340 lines
6.4 KiB
Markdown
340 lines
6.4 KiB
Markdown
|
|
# 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/)
|