文档

tui.builders 是一个用于设计终端界面的可视化拖拽编辑器。目前可生成面向 SuperLightTUI (SLT) 的生产级 Rust 代码,后续还将支持更多框架。

使用方式

  1. 打开编辑器。
  2. 选择模板或从空白项目开始。
  3. 从组件面板添加组件。
  4. 在检查器中调整 props、布局与样式。
  5. 导出生成的 Rust 代码。

前置条件: 安装 Rust 并确保 cargo 在终端中可用。

编辑器指南

组件面板

将组件拖入树中,或点击后插入到当前选中位置。

画布

实时显示当前组件树的终端预览。

检查器

在同一处编辑组件 props、flex 布局参数与样式令牌。

代码预览

编辑时实时查看生成的 Rust 代码更新。

导出

可下载为 Cargo 项目 zip、导出单个 .rs 文件,或复制到剪贴板。

组件目录

按类别分组展示所有可用组件。

Layout (7)

WidgetSLT FunctionDescription
Containerui.container().col(...) / ui.row(...)Flexible parent container with border, spacing, and layout controls.
Spacerui.spacer()Consumes remaining space to align surrounding content.
Separatorui.separator()Draws a horizontal divider line.
Scrollableui.scrollable(&mut state)Adds scroll behavior to tall content regions.
Gridui.grid(cols, ...)Places children into a responsive multi-column layout.
Divider Textui.divider_text(label)Renders a labeled section divider.
Accordionui.accordion(title, &mut open, ...)Expandable section for progressively revealed content.

Text (4)

WidgetSLT FunctionDescription
Textui.text(value)Renders plain terminal text.
Markdownui.markdown(value)Renders markdown with SLT inline formatting.
Linkui.link(label, url)Creates clickable terminal hyperlinks (OSC 8).
Code Blockui.code_block(value)Shows syntax-styled code snippets.

Input (10)

WidgetSLT FunctionDescription
Text Inputui.text_input(&mut state)Single-line text entry field.
Textareaui.textarea(&mut state, rows)Multi-line text editing area.
Buttonui.button(label)Clickable action trigger with variant support.
Sliderui.slider(label, &mut value, min..=max)Adjusts a numeric value over a range.
Confirmui.confirm(question, &mut state)Binary confirmation interaction.
Checkboxui.checkbox(label, &mut checked)Boolean option toggle with checkmark UI.
Toggleui.toggle(label, &mut on)Switch-style boolean control.
Selectui.select(&mut state)Dropdown-style single choice selector.
Radioui.radio(&mut state)Mutually exclusive option set.
Multi-Selectui.multi_select(&mut state)Selects multiple options from a list.

Data (6)

WidgetSLT FunctionDescription
Tableui.table(&mut state)Structured rows and columns with selection support.
Listui.list(&mut state)Vertical selectable list for menu-like flows.
Treeui.tree(&mut state)Hierarchical expandable node viewer.
Virtual Listui.virtual_list(&mut state, visible, ...)Virtualized list for large datasets.
Statui.stat(label, value)Compact metric card with optional trend/color variants.
Def. Listui.definition_list(&[(term, value)])Aligned key/value detail list.

Navigation (5)

WidgetSLT FunctionDescription
Tabsui.tabs(&mut state)Tabbed navigation across content panes.
Cmd Paletteui.command_palette(&mut state)Searchable command launcher overlay.
Help Barui.help(&[(key, desc)])Bottom helper bar for key bindings.
Breadcrumbui.breadcrumb(&[segments])Path-style navigation trail.
Key Hintui.key_hint(key)Inline keyboard hint chip.

Feedback (7)

WidgetSLT FunctionDescription
Progressui.progress(value)Minimal progress meter.
Progress Barui.progress_bar(value, width)Width-controlled progress bar.
Spinnerui.spinner(&state)Animated loading indicator.
Toastui.toast(&mut state)Timed notification stack.
Alertui.alert(message, level)Inline severity callout banner.
Badgeui.badge(label)Compact status or metadata label.
Empty Stateui.empty_state(title, subtitle)Placeholder content for empty screens.

DataViz (7)

WidgetSLT FunctionDescription
Bar Chartui.bar_chart(&[(label, value)], h)Comparative categorical bar visualization.
Sparklineui.sparkline(&values, width)Tiny inline trend graph.
Chartui.chart(builder, w, h)Configurable chart builder for multiple series.
Candlestickui.candlestick(&candles, up, down)OHLC market-style chart rendering.
Heatmapui.heatmap(&grid, w, h, low, high)Color-intensity matrix visualization.
Scatterui.scatter(&points, w, h)Plots point distributions on two axes.
Histogramui.histogram(&values, w, h)Frequency distribution buckets.

Overlay (2)

WidgetSLT FunctionDescription
Modalui.modal(|ui| { ... })Dimmed overlay dialog layer.
Overlayui.overlay(|ui| { ... })Floating content layer without dimming.

AI (3)

WidgetSLT FunctionDescription
Streaming Textui.streaming_text(&mut state)Token-by-token text stream output.
Stream MDui.streaming_markdown(&mut state)Streaming markdown renderer.
Context Barui.context_bar(&items)Context token/source chips for AI workflows.

Form (1)

WidgetSLT FunctionDescription
Form Fieldui.form_field(&mut field)Composable form input field unit.

Media (1)

WidgetSLT FunctionDescription
Imageui.image(&img)Half-block image rendering from RGBA data.

代码生成

tui.builders 会通过 generateRustCode() 将编辑器树转换为 Rust,并输出可直接运行的 main.rs,目标为 SLT v0.12.x,使用 slt::run_with() 与 RunConfig。

示例: container + text + button

use slt::*;
use std::time::Duration;

fn main() -> std::io::Result<()> {
    slt::run_with(
        RunConfig {
            theme: Theme::dark(),
            mouse: true,
            tick_rate: Duration::from_millis(16),
            ..Default::default()
        },
        |ui: &mut Context| {
            if ui.key('q') { ui.quit(); }

            ui.bordered(Border::Rounded).pad(1).gap(1).col(|ui| {
                ui.text("Hello from tui.builders").bold().fg(Color::Cyan);
                if ui.button("Click me").clicked {
                    // handle click
                }
                ui.help(&[("q", "quit")]);
            });
        },
    )
}

运行代码

tui.builders 生成的所有代码都可以直接在 SuperLightTUI 上编译。以下是运行方法。

方法1:导出为 Cargo 项目 (.zip)

在编辑器工具栏点击 Export → Cargo Project。解压后运行:

unzip my-tui-app.zip
cd my-tui-app
cargo run

方法2:导出为 .rs 文件

点击 Export → .rs File。手动创建 Cargo 项目:

cargo new my-tui-app
cd my-tui-app
cargo add superlighttui
# Replace src/main.rs with your exported file
cargo run

方法3:复制到剪贴板

点击 Export → Copy。粘贴到已有 superlighttui 依赖的 Cargo 项目中。

# In your Cargo.toml:
[dependencies]
superlighttui = "0.12"
注意: 需要安装 Rust 和 Cargo。所有生成代码针对 SLT v0.12.x,并通过自动测试验证编译。运行中的 TUI 应用按 q 退出。

模板

tui.builders 提供 19 个模板,覆盖仪表盘、表单、导航流程和运维工具场景。

键盘快捷键

q在生成的 TUI 应用中退出。
Tab将焦点移动到下一个组件。
Enter选择或激活当前聚焦控件。
Ctrl+C立即退出应用。

支持的框架

tui.builders 目前可为 SuperLightTUI 生成代码,后续将扩展到更多 TUI 生态。

已支持
SuperLightTUI (Rust)

即时模式、zero-unsafe、flexbox 布局、50+ 组件、主题、动画、AI 原生组件

即将支持
Ink (TypeScript)

由 Vadim Demedes 开发的 React 终端 UI 框架

计划中
Ratatui (Rust) · Textual (Python) · Bubbletea (Go)