TypeDialog/docs/tui/README.md

340 lines
6.4 KiB
Markdown
Raw Normal View History

2025-12-24 03:11:32 +00:00
# TypeDialog TUI Backend
Terminal User Interface for TypeDialog powered by [Ratatui](https://ratatui.rs/).
## Overview
The TUI backend (`typedialog-tui`) provides a full-featured terminal UI with keyboard navigation, mouse support, and rich visual presentation. Built with Ratatui for interactive dashboards, system administration tools, and complex forms.
## Features
- **Full Terminal UI**: Rich interface with split panes, borders, and styling
- **Keyboard Navigation**: Vi-like bindings + arrow keys + Tab navigation
- **Mouse Support**: Click to select, scroll through options
- **Real-time Validation**: Inline error messages and field highlighting
- **RepeatingGroups**: Add/edit/delete array items with split-pane interface
- **Autocompletion**: Smart suggestions as you type
- **Custom Themes**: Color schemes and border styles
## Quick Start
### Installation
```bash
cargo build --release -p typedialog-tui
sudo cp target/release/typedialog-tui /usr/local/bin/
# Or use just
just build::tui
```
### Basic Usage
```bash
# Run a form
typedialog-tui examples/01-basic/simple_form.toml
# With specific theme
typedialog-tui --theme dark examples/form.toml
# Output to file
typedialog-tui form.toml > output.json
```
## Keyboard Shortcuts
### Global
| Key | Action |
| ----- | -------- |
| `↑/k` | Move up |
| `↓/j` | Move down |
| `←/h` | Move left / Previous field |
| `→/l` | Move right / Next field |
| `Tab` | Next field |
| `Shift+Tab` | Previous field |
| `Enter` | Confirm / Submit |
| `Esc` | Cancel / Go back |
| `Ctrl+C` | Quit |
### Text Fields
| Key | Action |
| ----- | -------- |
| `Ctrl+A` | Move to start |
| `Ctrl+E` | Move to end |
| `Ctrl+U` | Clear line |
| `Ctrl+K` | Delete to end |
| `Ctrl+W` | Delete word |
### Select Fields
| Key | Action |
| ----- | -------- |
| `Space` | Toggle selection (multi-select) |
| `Enter` | Confirm selection |
| `/` | Filter options |
### RepeatingGroups
| Key | Action |
| ----- | -------- |
| `a` | Add new item |
| `e` | Edit selected item |
| `d` | Delete selected item |
| `↑/↓` | Navigate items |
| `Enter` | Edit selected item |
## Visual Features
### Borders
```toml
[form]
border_style = "rounded" # rounded, double, thick, or none
```
### Themes
```toml
[tui]
theme = "dark" # dark, light, or custom
highlight_color = "cyan"
error_color = "red"
```
### Field Highlighting
- **Active field**: Highlighted border
- **Error**: Red border + error message below
- **Valid**: Green checkmark
- **Required**: Asterisk (*) after label
## Examples
### Simple Form
```toml
[[fields]]
name = "username"
field_type = "Text"
label = "Username"
required = true
[[fields]]
name = "role"
field_type = "Select"
label = "Role"
options = ["Admin", "User", "Guest"]
```
Run it:
```bash
typedialog-tui simple.toml
```
### Multi-Page Form
```toml
[[sections]]
title = "Personal Information"
[[sections.fields]]
name = "name"
field_type = "Text"
[[sections]]
title = "Account Settings"
[[sections.fields]]
name = "email"
field_type = "Text"
```
Navigate with `→/←` or `Tab`.
## RepeatingGroup features
```toml
[[fields]]
field_type = "RepeatingGroup"
name = "servers"
min_items = 1
max_items = 10
[[fields.item_fields]]
name = "hostname"
field_type = "Text"
[[fields.item_fields]]
name = "port"
field_type = "Text"
validation = "number"
```
Interface shows:
- Left pane: List of items
- Right pane: Selected item details
- Bottom: Commands (a=add, e=edit, d=delete)
## Configuration
Global TUI config in `~/.config/typedialog/tui.toml`:
```toml
[tui]
theme = "dark"
border_style = "rounded"
highlight_color = "cyan"
error_color = "red"
mouse_enabled = true
[keybindings]
submit = "Enter"
cancel = "Esc"
next_field = "Tab"
prev_field = "Shift+Tab"
```
Or per-form:
```bash
typedialog-tui form.toml --config config/tui/custom.toml
```
## Backend-Specific Features
### Split-Pane Layouts
For RepeatingGroups, the TUI uses a split-pane layout:
```text
┌─ Servers ─────┬─ Selected Server ───┐
│ • server-1 │ Hostname: server-1 │
│ server-2 │ Port: 8080 │
│ server-3 │ SSL: true │
├───────────────┴─────────────────────┤
│ a=add e=edit d=delete Enter=edit │
└──────────────────────────────────────┘
```
### Mouse Support
Click to:
- Select fields
- Toggle checkboxes
- Select from dropdowns
- Click buttons
- Scroll through long lists
Disable with:
```toml
[tui]
mouse_enabled = false
```
### Terminal Resize Handling
TUI automatically adapts to terminal size changes. Recommended minimum: 80x24.
## Use Cases
### 1. Interactive Dashboards
System monitoring dashboards with live data updates:
```bash
typedialog-tui monitoring.toml --watch
```
### 2. Configuration Wizards
Multi-step configuration with validation:
```bash
typedialog-tui setup-wizard.toml --output config.toml
```
### 3. Server Administration
SSH server management with terminal UI:
```bash
ssh admin@server 'typedialog-tui /etc/myapp/config.toml'
```
### 4. Development Tools
Interactive tools for developers:
```bash
typedialog-tui project-init.toml --format nickel > project.ncl
```
## More examples
See [examples/04-backends/tui/](../../examples/04-backends/tui/) for:
- Basic forms
- Multi-page wizards
- RepeatingGroups with split panes
- Custom themes
- Validation examples
- Integration with scripts
## Related Documentation
- [Installation](../installation.md) - Setup guide
- [Configuration](../configuration.md) - TUI configuration options
- [Field Types](../field_types.md) - Available field types
- [Examples](../../examples/04-backends/tui/) - Working examples
## Troubleshooting
### "Terminal not supported"
TUI requires a terminal with full control sequences. Most modern terminals work (iTerm2, Alacritty, Windows Terminal).
### "Display corruption"
Reset terminal:
```bash
reset
# Or
tput reset
```
### "Mouse not working"
Enable mouse support:
```toml
[tui]
mouse_enabled = true
```
### "Colors not showing"
Ensure 256-color terminal:
```bash
echo $TERM # Should be something like xterm-256color
```
Set if needed:
```bash
export TERM=xterm-256color
```
### "Form too large for terminal"
Increase terminal size or reduce form content. Minimum recommended: 80x24.
---
**Ready to start?** See [examples/04-backends/tui/](../../examples/04-backends/tui/)