Crate tuiuiu

Crate tuiuiu 

Source
Expand description

§Tuiuiu - Zero-dependency Terminal UI Framework

A minimal, reactive terminal UI framework with signal-based reactivity, flexbox layout, and zero external dependencies.

§Quick Start

use tuiuiu::prelude::*;

fn counter() -> impl Component {
    let (count, set_count) = create_signal(0);

    use_input(move |key| {
        match key {
            Key::Up => set_count.update(|c| *c += 1),
            Key::Down => set_count.update(|c| *c -= 1),
            Key::Escape => app::exit(),
            _ => {}
        }
    });

    Box::new()
        .flex_direction(FlexDirection::Column)
        .padding(1)
        .border(BorderStyle::Round)
        .children([
            Text::new("🐦 Tuiuiu Counter")
                .color(Color::Cyan)
                .bold(true),
            Text::new(move || format!("Count: {}", count.get())),
            Text::new("↑/↓: change • Esc: exit")
                .color(Color::Gray)
                .dim(true),
        ])
}

fn main() {
    let app = render(counter);
    app.wait_until_exit();
}

§Architecture

Tuiuiu follows the Atomic Design methodology:

  • Core: Signals, Layout engine, Renderer, Event system
  • Primitives: Box, Text, Spacer, Newline, Fragment, Divider
  • Atoms: Button, TextInput, Switch, Slider, Spinner, ProgressBar
  • Molecules: Select, Table, Tabs, Tree, Calendar, Charts
  • Organisms: Modal, CommandPalette, DataTable, FileManager
  • Templates: AppShell, Page, Header, StatusBar

§Features

  • full (default): All components
  • core: Only core functionality
  • primitives: Core + primitives
  • atoms: Primitives + atoms
  • molecules: Atoms + molecules
  • organisms: Molecules + organisms
  • templates: Organisms + templates
  • themes: Theme system
  • mcp: Model Context Protocol server
  • dev-tools: Development and debugging tools

Re-exports§

pub use core::signals::batch;
pub use core::signals::create_effect;
pub use core::signals::create_memo;
pub use core::signals::create_signal;
pub use core::signals::untrack;
pub use core::signals::Effect;
pub use core::signals::Memo;
pub use core::signals::ReadSignal;
pub use core::signals::WriteSignal;
pub use core::layout::AlignContent;
pub use core::layout::AlignItems;
pub use core::layout::AlignSelf;
pub use core::layout::FlexDirection;
pub use core::layout::FlexWrap;
pub use core::layout::JustifyContent;
pub use core::layout::LayoutNode;
pub use core::layout::calculate_layout;
pub use core::renderer::OutputBuffer;
pub use core::renderer::RenderContext;
pub use core::renderer::render_to_string;
pub use core::app::App;
pub use core::app::RenderOptions;
pub use core::app::render;
pub use core::app::render_once;
pub use core::terminal::Key;
pub use core::terminal::KeyModifiers;
pub use core::terminal::MouseButton;
pub use core::terminal::MouseEvent;
pub use core::terminal::Terminal;
pub use core::terminal::TerminalEvent;
pub use core::event::Event;
pub use core::event::EventEmitter;
pub use core::event::EventHandler;
pub use core::event::EventPhase;
pub use core::focus::FocusManager;
pub use core::focus::Focusable;
pub use core::focus::FocusZoneState;
pub use core::tick::Tick;
pub use core::tick::get_tick;
pub use core::tick::on_tick;
pub use core::tick::start_tick;
pub use core::tick::stop_tick;
pub use core::tick::pause_tick;
pub use core::tick::resume_tick;
pub use core::tick::get_frame;
pub use core::tick::oscillate;
pub use hooks::use_state;
pub use hooks::use_effect;
pub use hooks::use_memo;
pub use hooks::use_input;
pub use hooks::use_mouse;
pub use hooks::use_focus;
pub use hooks::use_app;
pub use hooks::use_terminal_size;
pub use hooks::use_fps;
pub use hooks::use_hotkeys;
pub use utils::ansi::strip_ansi;
pub use utils::ansi::colorize;
pub use utils::ansi::style;
pub use utils::ansi::Color;
pub use utils::ansi::Style;
pub use utils::text::measure_text;
pub use utils::text::visible_width;
pub use utils::text::wrap_text;
pub use utils::text::truncate_text;
pub use utils::text::slice_ansi;
pub use utils::cursor::show_cursor;
pub use utils::cursor::hide_cursor;
pub use utils::cursor::move_cursor;
pub use utils::cursor::save_cursor;
pub use utils::cursor::restore_cursor;
pub use utils::border::BorderStyle;
pub use utils::border::BorderChars;
pub use utils::border::BORDER_STYLES;
pub use primitives::BoxComponent;
pub use primitives::Text;
pub use primitives::Spacer;
pub use primitives::Newline;
pub use primitives::Fragment;
pub use primitives::Divider;
pub use primitives::Canvas;
pub use primitives::When;
pub use primitives::Each;
pub use primitives::Transform;
pub use primitives::Static;
pub use primitives::Slot;
pub use atoms::Button;
pub use atoms::TextInput;
pub use atoms::Switch;
pub use atoms::Slider;
pub use atoms::Spinner;
pub use atoms::ProgressBar;
pub use atoms::Timer;
pub use atoms::Checkbox;
pub use atoms::Badge;
pub use atoms::Tooltip;
pub use atoms::Icon;
pub use molecules::Select;
pub use molecules::MultiSelect;
pub use molecules::RadioGroup;
pub use molecules::Autocomplete;
pub use molecules::Table;
pub use molecules::Tabs;
pub use molecules::Tree;
pub use molecules::Calendar;
pub use molecules::CodeBlock;
pub use molecules::Markdown;
pub use molecules::Sparkline;
pub use molecules::BarChart;
pub use molecules::LineChart;
pub use molecules::Gauge;
pub use molecules::Heatmap;
pub use organisms::Modal;
pub use organisms::CommandPalette;
pub use organisms::DataTable;
pub use organisms::FileManager;
pub use organisms::SplitPanel;
pub use organisms::ScrollArea;
pub use organisms::Grid;
pub use organisms::OverlayStack;
pub use organisms::Notification;
pub use organisms::Toast;
pub use templates::AppShell;
pub use templates::Page;
pub use templates::Header;
pub use templates::StatusBar;
pub use templates::Footer;
pub use templates::Sidebar;
pub use templates::VStack;
pub use templates::HStack;
pub use templates::Center;
pub use templates::FullScreen;
pub use templates::Container;
pub use themes::Theme;
pub use themes::ThemeMode;
pub use themes::use_theme;
pub use themes::get_theme;
pub use themes::set_theme;
pub use themes::create_theme;
pub use themes::dark_theme;
pub use themes::light_theme;
pub use themes::monokai_theme;
pub use themes::dracula_theme;
pub use themes::nord_theme;

Modules§

atoms
Atoms - Smallest functional UI components
core
Core module - The heart of Tuiuiu
hooks
Hooks - Reactive state and effects
mcp
Mcp - Stub module (to be implemented)
molecules
Molecules - Composite Components
organisms
Organisms - Stub module (to be implemented)
prelude
Commonly used types and traits for convenient importing.
primitives
Primitives - Basic building blocks
templates
Templates - Stub module (to be implemented)
themes
Themes - Stub module (to be implemented)
utils
Utilities

Structs§

VersionInfo
Version information structure.

Functions§

version
Returns the library version.
version_info
Returns detailed version information.