zcatui/CLAUDE.md
reugenio 73667a752e docs: Update CLAUDE.md with v2.0 complete documentation
- Full project status: v2.0 FEATURE COMPLETE
- 60 source files, 27 widgets, 186+ tests
- Detailed module breakdown (core, events, features, widgets)
- Examples and commands reference
- Focus management, themes, unicode, termcap documentation
- Team methodology and workflow notes
- Historical development timeline
- Quick reference section for next conversations

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-08 19:37:58 +01:00

580 lines
19 KiB
Markdown

# zcatui - TUI Library para Zig
> **Última actualización**: 2025-12-08
> **Versión**: v2.0 - FEATURE COMPLETE
> **Lenguaje**: Zig 0.15.2
> **Inspiración**: [ratatui](https://github.com/ratatui/ratatui) + [crossterm](https://github.com/crossterm-rs/crossterm) (Rust)
> **Estado**: Librería completa y lista para producción
---
## RESUMEN EJECUTIVO
**zcatui** es una librería TUI completa para Zig, equivalente a ratatui+crossterm de Rust pero en un solo paquete.
### Estadísticas del Proyecto
| Métrica | Valor |
|---------|-------|
| **Archivos fuente** | 60 archivos .zig |
| **Widgets** | 27 widgets |
| **Módulos core** | 16 módulos |
| **Tests** | 186+ tests |
| **Examples** | 11 demos ejecutables |
| **Líneas de código** | ~15,000+ |
### Funcionalidades Principales
- ✅ Renderizado immediate-mode con double buffering y diff
- ✅ 27 widgets (más que ratatui)
- ✅ Sistema de eventos teclado/ratón
- ✅ Sistema de animaciones con easing
- ✅ Clipboard (OSC 52)
- ✅ Hyperlinks (OSC 8)
- ✅ Imágenes en terminal (Kitty/iTerm2)
- ✅ Notificaciones desktop (OSC 9/777)
- ✅ Focus management global
- ✅ Sistema de themes (10 themes predefinidos)
- ✅ Unicode width calculation (wcwidth)
- ✅ Terminal capability detection
- ✅ Lazy rendering con cache
---
## ESTRUCTURA COMPLETA DEL PROYECTO
```
zcatui/
├── src/
│ ├── root.zig # Entry point, re-exports públicos
│ │
│ ├── ─── CORE ───
│ ├── buffer.zig # Buffer, Cell, Rect, Symbol, Margin
│ ├── style.zig # Color, Style, Modifier
│ ├── text.zig # Text, Line, Span, Alignment
│ ├── layout.zig # Layout, Constraint, Direction
│ ├── terminal.zig # Terminal abstraction
│ │
│ ├── ─── EVENTOS ───
│ ├── event.zig # Event, KeyEvent, MouseEvent, KeyCode
│ ├── event/
│ │ ├── reader.zig # EventReader con polling
│ │ └── parse.zig # Parser de escape sequences
│ │
│ ├── ─── FEATURES ───
│ ├── focus.zig # FocusRing, FocusManager, Focusable
│ ├── theme.zig # Theme system (10 themes)
│ ├── animation.zig # Animation, Easing, Timer, AnimationGroup
│ ├── cursor.zig # Cursor control (shapes, position)
│ ├── clipboard.zig # OSC 52 clipboard
│ ├── hyperlink.zig # OSC 8 hyperlinks
│ ├── notification.zig # OSC 9/777 notifications
│ ├── image.zig # Kitty/iTerm2 images
│ ├── lazy.zig # RenderCache, Throttle, Debounce
│ ├── unicode.zig # charWidth, stringWidth (wcwidth)
│ ├── termcap.zig # Terminal capability detection
│ │
│ ├── ─── BACKEND ───
│ ├── backend/
│ │ └── backend.zig # ANSI escape sequences
│ │
│ ├── ─── SYMBOLS ───
│ ├── symbols/
│ │ ├── symbols.zig # Re-exports
│ │ ├── line.zig # Line drawing (─│┌┐└┘├┤┬┴┼)
│ │ ├── border.zig # Border sets (single, double, rounded, thick)
│ │ ├── block.zig # Block elements (█▀▄░▒▓)
│ │ ├── bar.zig # Bar characters for charts
│ │ ├── braille.zig # 256 braille patterns
│ │ ├── half_block.zig # Half-block for pseudo-graphics
│ │ ├── scrollbar.zig # Scrollbar symbols
│ │ └── marker.zig # Chart markers (Dot, Braille, HalfBlock)
│ │
│ ├── ─── WIDGETS (27) ───
│ ├── widgets/
│ │ ├── block.zig # Block (borders, titles, padding)
│ │ ├── paragraph.zig # Text with wrapping
│ │ ├── list.zig # Selectable list with state
│ │ ├── table.zig # Multi-column table
│ │ ├── gauge.zig # Gauge + LineGauge progress bars
│ │ ├── tabs.zig # Tab navigation
│ │ ├── sparkline.zig # Mini line graphs
│ │ ├── scrollbar.zig # Scroll indicator
│ │ ├── barchart.zig # Bar charts with groups
│ │ ├── canvas.zig # Drawing (braille/half-block/block)
│ │ ├── chart.zig # Line/scatter/bar graphs with axes
│ │ ├── calendar.zig # Monthly calendar
│ │ ├── clear.zig # Clear/reset area
│ │ ├── input.zig # Readline-style text input
│ │ ├── textarea.zig # Multi-line text editor
│ │ ├── popup.zig # Popup + Modal dialogs
│ │ ├── menu.zig # Menu, MenuBar, ContextMenu
│ │ ├── tooltip.zig # Tooltip + TooltipManager
│ │ ├── tree.zig # Tree view (expandable)
│ │ ├── filepicker.zig # File/directory picker
│ │ ├── scroll.zig # ScrollView, VirtualList, InfiniteScroll
│ │ ├── panel.zig # Panel, PanelSplit, TabbedPanel, DockingPanel
│ │ ├── checkbox.zig # Checkbox, RadioGroup, CheckboxGroup
│ │ ├── select.zig # Select dropdown, MultiSelect
│ │ ├── slider.zig # Slider, RangeSlider
│ │ └── statusbar.zig # StatusBar, Toast, ToastManager
│ │
│ └── ─── TESTS ───
│ └── tests/
│ ├── tests.zig # Test aggregator
│ ├── widget_tests.zig # Widget tests
│ ├── theme_tests.zig # Theme tests
│ └── layout_tests.zig # Layout tests
├── examples/ # 11 demos ejecutables
│ ├── hello.zig # Minimal TUI app
│ ├── events_demo.zig # Keyboard/mouse events
│ ├── list_demo.zig # Lista navegable
│ ├── table_demo.zig # Tabla con selección
│ ├── dashboard.zig # Demo completo multi-widget
│ ├── input_demo.zig # Input readline-style
│ ├── animation_demo.zig # Easing functions showcase
│ ├── clipboard_demo.zig # OSC 52 clipboard
│ ├── menu_demo.zig # MenuBar + Modal
│ ├── form_demo.zig # Form widgets
│ └── panel_demo.zig # Panel system
├── docs/
│ ├── ARCHITECTURE.md # Arquitectura técnica
│ ├── WIDGETS.md # Guía de widgets
│ └── API.md # Referencia rápida
├── build.zig
├── README.md # Documentación pública
└── CLAUDE.md # Este archivo
```
---
## MÓDULOS DETALLADOS
### Core
| Módulo | Archivo | Descripción |
|--------|---------|-------------|
| **Buffer** | `buffer.zig` | Buffer de celdas, Cell, Rect, Symbol, diff rendering |
| **Style** | `style.zig` | Color (16/256/RGB), Style, Modifier |
| **Text** | `text.zig` | Text, Line, Span, StyledGrapheme, Alignment |
| **Layout** | `layout.zig` | Layout, Constraint (Length/Min/Max/Percentage/Ratio) |
| **Terminal** | `terminal.zig` | Terminal abstraction, raw mode |
### Eventos
| Módulo | Archivo | Descripción |
|--------|---------|-------------|
| **Event** | `event.zig` | Event, KeyEvent, MouseEvent, KeyCode, KeyModifiers |
| **EventReader** | `event/reader.zig` | Polling de eventos con timeout |
| **Parser** | `event/parse.zig` | Parser de escape sequences (CSI, SS3, SGR mouse) |
### Features Avanzadas
| Módulo | Archivo | Descripción |
|--------|---------|-------------|
| **Focus** | `focus.zig` | FocusRing, FocusManager, Focusable interface |
| **Theme** | `theme.zig` | 10 themes: dark, light, dracula, nord, gruvbox, monokai... |
| **Animation** | `animation.zig` | Easing functions, Animation, Timer, AnimationGroup |
| **Cursor** | `cursor.zig` | Cursor shapes, visibility, save/restore |
| **Clipboard** | `clipboard.zig` | OSC 52 copy/paste |
| **Hyperlink** | `hyperlink.zig` | OSC 8 clickable links |
| **Notification** | `notification.zig` | OSC 9/777 desktop notifications |
| **Image** | `image.zig` | Kitty/iTerm2 inline images |
| **Lazy** | `lazy.zig` | RenderCache, Throttle, Debounce, DeferredRender |
| **Unicode** | `unicode.zig` | charWidth, stringWidth (wcwidth equivalent) |
| **Termcap** | `termcap.zig` | Terminal capability detection, color support |
### Widgets (27)
| Widget | Archivo | Descripción |
|--------|---------|-------------|
| Block | `block.zig` | Contenedor con bordes y título |
| Paragraph | `paragraph.zig` | Texto con wrapping |
| List | `list.zig` | Lista seleccionable con estado |
| Table | `table.zig` | Tabla multi-columna |
| Gauge | `gauge.zig` | Barra de progreso |
| LineGauge | `gauge.zig` | Barra de progreso línea |
| Tabs | `tabs.zig` | Navegación por pestañas |
| Sparkline | `sparkline.zig` | Mini gráfico de línea |
| Scrollbar | `scrollbar.zig` | Indicador de scroll |
| BarChart | `barchart.zig` | Gráfico de barras |
| Canvas | `canvas.zig` | Dibujo libre (braille/block) |
| Chart | `chart.zig` | Gráficos con ejes |
| Calendar | `calendar.zig` | Calendario mensual |
| Clear | `clear.zig` | Limpiar área |
| Input | `input.zig` | Input readline-style |
| TextArea | `textarea.zig` | Editor multilínea |
| Popup | `popup.zig` | Overlay flotante |
| Modal | `popup.zig` | Diálogo con botones |
| Menu | `menu.zig` | Menú dropdown |
| MenuBar | `menu.zig` | Barra de menús |
| ContextMenu | `menu.zig` | Menú contextual |
| Tooltip | `tooltip.zig` | Información emergente |
| Tree | `tree.zig` | Árbol expandible |
| FilePicker | `filepicker.zig` | Selector de archivos |
| ScrollView | `scroll.zig` | Vista con scroll |
| VirtualList | `scroll.zig` | Lista virtual (large datasets) |
| Panel | `panel.zig` | Panel con foco |
| TabbedPanel | `panel.zig` | Panel con pestañas |
| Checkbox | `checkbox.zig` | Checkbox toggle |
| RadioGroup | `checkbox.zig` | Grupo de radio buttons |
| Select | `select.zig` | Dropdown select |
| Slider | `slider.zig` | Slider numérico |
| StatusBar | `statusbar.zig` | Barra de estado |
| Toast | `statusbar.zig` | Notificaciones toast |
---
## COMANDOS
```bash
# Ruta del compilador Zig
ZIG=/mnt/cello2/arno/re/recode/zig/zig-0.15.2/zig-x86_64-linux-0.15.2/zig
# Compilar
zig build
# Tests (186+ tests)
zig build test
# Ejecutar ejemplos
zig build hello
zig build events-demo
zig build list-demo
zig build table-demo
zig build dashboard
zig build input-demo
zig build animation-demo
zig build clipboard-demo
zig build menu-demo
zig build form-demo
zig build panel-demo
```
---
## THEMES DISPONIBLES
```zig
const Theme = zcatui.Theme;
// 10 themes predefinidos
const dark = zcatui.theme.dark;
const light = zcatui.theme.light;
const dracula = zcatui.theme.dracula;
const nord = zcatui.theme.nord;
const gruvbox = zcatui.theme.gruvbox;
const solarized_dark = zcatui.theme.solarized_dark;
const monokai = zcatui.theme.monokai;
const one_dark = zcatui.theme.one_dark;
const tokyo_night = zcatui.theme.tokyo_night;
const catppuccin = zcatui.theme.catppuccin;
// Uso
const style = theme.primaryStyle();
const error_style = theme.errorStyle();
const selection_style = theme.selectionStyle();
```
---
## FOCUS MANAGEMENT
```zig
const FocusManager = zcatui.FocusManager;
const FocusRing = zcatui.FocusRing;
var manager = FocusManager{};
// Crear rings (grupos de widgets)
const main_ring = manager.createRing("main");
const modal_ring = manager.createRing("modal");
// Añadir widgets focusables
_ = main_ring.?.add(widget1.focusable());
_ = main_ring.?.add(widget2.focusable());
// Navegación
_ = manager.focusNext(); // Tab
_ = manager.focusPrev(); // Shift+Tab
_ = manager.focusFirst(); // Home
_ = manager.focusLast(); // End
// Focus trapping (para modales)
manager.setTrapFocus(true);
// Cambiar ring activo
_ = manager.setActiveRing("modal");
```
---
## UNICODE WIDTH
```zig
const unicode = zcatui.unicode;
// Ancho de caracteres
unicode.charWidth('a'); // 1 (ASCII)
unicode.charWidth(0x4E2D); // 2 (中 - CJK)
unicode.charWidth(0x0301); // 0 (combining accent)
// Ancho de strings
unicode.stringWidth("Hello"); // 5
unicode.stringWidth("日本"); // 4 (2+2)
unicode.stringWidth("Hello日本"); // 9 (5+4)
// Truncar a ancho visual
const truncated = unicode.truncateToWidth("Hello World", 5); // "Hello"
```
---
## TERMINAL CAPABILITIES
```zig
const termcap = zcatui.termcap;
const caps = termcap.detect();
// Color support
if (caps.color_support.hasTrueColor()) {
// RGB colors disponibles
} else if (caps.color_support.has256()) {
// 256 colores
} else {
// 8/16 colores básicos
}
// Features
caps.hyperlinks // OSC 8 support
caps.images // Kitty/Sixel
caps.clipboard // OSC 52
caps.unicode // UTF-8 support
caps.styled_underline // Curly underlines
// Adaptar colores al terminal
const adapted = termcap.adaptColor(caps, r, g, b);
```
---
## STACK TÉCNICO
| Componente | Elección |
|------------|----------|
| **Lenguaje** | Zig 0.15.2 |
| **Zig path** | `/mnt/cello2/arno/re/recode/zig/zig-0.15.2/zig-x86_64-linux-0.15.2/zig` |
| **Backend** | ANSI escape sequences (portable) |
| **Dependencias** | Solo stdlib de Zig |
| **Target** | Linux primario, cross-platform compatible |
---
## EQUIPO Y METODOLOGÍA
### Quiénes Somos
- **Usuario (Arno)**: Desarrollador independiente, proyectos comerciales propios
- **Claude**: Asistente de programación (Claude Code / Opus 4.5)
### Cómo Trabajamos
- Desarrollo iterativo con commits frecuentes
- Tests antes de features nuevas
- Documentación inline con `///` doc comments
- Código idiomático Zig (snake_case, error handling explícito)
- Sin dependencias externas
### Normas de Trabajo Centralizadas
**IMPORTANTE**: Todas las normas de trabajo están en:
```
/mnt/cello2/arno/re/recode/TEAM_STANDARDS/
```
**Archivos clave a leer**:
| Archivo | Descripción |
|---------|-------------|
| `LAST_UPDATE.md` | **LEER PRIMERO** - Cambios recientes |
| `NORMAS_TRABAJO_CONSENSUADAS.md` | Metodología fundamental |
| `QUICK_REFERENCE.md` | Cheat sheet rápido |
| `INFRASTRUCTURE/` | Documentación de servidores |
| `PROJECTS/zcatui.md` | Estado de este proyecto |
### Protocolo de Inicio de Conversación
1. **Leer** `TEAM_STANDARDS/LAST_UPDATE.md` (detectar cambios)
2. **Leer** este archivo `CLAUDE.md`
3. **Verificar** estado (`git status`, `zig build test`)
4. **Continuar** desde donde se dejó
---
## CONTROL DE VERSIONES
```bash
# Remote
git@git.reugenio.com:reugenio/zcatui.git
# Estado actual
git log --oneline -5
```
---
## OTROS PROYECTOS DEL ECOSISTEMA
### Proyectos Zig
| Proyecto | Descripción | Ubicación |
|----------|-------------|-----------|
| **zcatui** | TUI library (este) | `/mnt/cello2/arno/re/recode/zig/zcatui` |
| **service-monitor** | Monitor HTTP/TCP | `/mnt/cello2/arno/re/recode/zig/service-monitor` |
### Proyectos Go (referencia)
| Proyecto | Descripción |
|----------|-------------|
| **simifactu** | API facturación electrónica |
| **ms-web** | E-commerce mundisofa |
| **0fiS** | Aplicación desktop Fyne |
### Infraestructura
| Recurso | Ubicación |
|---------|-----------|
| Git server | git.reugenio.com (Forgejo) |
| Servidor | Simba (188.245.244.244) |
| Docs infra | `TEAM_STANDARDS/INFRASTRUCTURE/` |
---
## RECURSOS Y REFERENCIAS
### ratatui (Rust) - Referencia principal
- Repo: https://github.com/ratatui/ratatui
- Docs: https://docs.rs/ratatui/latest/ratatui/
- Website: https://ratatui.rs/
### Zig
- Docs 0.15: https://ziglang.org/documentation/0.15.0/std/
- Guía migración: `TEAM_STANDARDS/INFRASTRUCTURE/ZIG_0.15_GUIA.md`
### ANSI Escape Codes
- https://en.wikipedia.org/wiki/ANSI_escape_code
- https://gist.github.com/fnky/458719343aabd01cfb17a3a4f7296797
---
## HISTORIAL DE DESARROLLO
### 2025-12-08 - v2.0 (FEATURE COMPLETE)
**Nuevos módulos:**
- `focus.zig` - Focus management global (FocusRing, FocusManager)
- `theme.zig` - Sistema de themes (10 themes predefinidos)
- `unicode.zig` - Unicode width calculation (wcwidth)
- `termcap.zig` - Terminal capability detection
**Tests:**
- Suite de tests exhaustiva en `src/tests/`
- 186+ tests pasando
- Cobertura de widgets, layout, themes, focus
**Correcciones Zig 0.15:**
- `style.fg``style.foreground`
- `std.time.sleep``std.Thread.sleep`
- `Cell.char``Cell.symbol`
- Tipo `i2``i8` para charWidth
### 2025-12-08 - v1.4 (Form widgets + Panels)
**Widgets nuevos:**
- Checkbox, RadioGroup, CheckboxGroup
- Select, MultiSelect
- Slider, RangeSlider
- StatusBar, Toast, ToastManager
- Panel, PanelSplit, TabbedPanel, DockingPanel
**Features:**
- Tooltip + TooltipManager
- Tree widget
- FilePicker
- ScrollView, VirtualList, InfiniteScroll
### 2025-12-08 - v1.3 (Menus + Modals)
**Widgets nuevos:**
- Input (readline-style)
- Popup, Modal
- Menu, MenuBar, ContextMenu
**Sistemas:**
- Animation system (easing, timer, groups)
- Clipboard (OSC 52)
- Hyperlinks (OSC 8)
- Notifications (OSC 9/777)
- Images (Kitty/iTerm2)
### 2025-12-08 - v1.2 (Eventos)
- Sistema de eventos crossterm-style
- EventReader con polling
- Parser de escape sequences
- Cursor control
### 2025-12-08 - v1.1 (Performance)
- Symbol type compacto
- Buffer diff rendering
- Optimizaciones
### 2025-12-08 - v1.0 (Implementación inicial)
- 13 widgets base (ratatui equivalents)
- Sistema de símbolos
- 103+ tests iniciales
### 2025-12-08 - Inicio
- Creación del proyecto
- Definición de arquitectura
---
## NOTAS PARA PRÓXIMAS CONVERSACIONES
### Estado del Proyecto
- **Librería COMPLETA** - Todas las funcionalidades implementadas
- **Tests pasando** - 186+ tests
- **Documentación completa** - README.md, docs/, CLAUDE.md
### Posibles Mejoras Futuras (opcionales)
- Performance: SIMD para operaciones de buffer
- Más examples específicos
- Tutorial paso a paso
- Publicación en package registry
### Cosas a Recordar
- Zig 0.15.2 tiene cambios de API respecto a versiones anteriores
- El path del compilador está en `/mnt/cello2/arno/re/recode/zig/zig-0.15.2/`
- TEAM_STANDARDS contiene todas las normas de trabajo del equipo
- El usuario prefiere commits descriptivos con emoji 🤖
- Siempre verificar `zig build test` antes de commit
---
## QUICK REFERENCE
```bash
# Build & Test
zig build
zig build test
# Run examples
zig build hello
zig build dashboard
# Git
git status
git add -A && git commit -m "mensaje"
git push
# Paths importantes
/mnt/cello2/arno/re/recode/zig/zcatui/ # Este proyecto
/mnt/cello2/arno/re/recode/TEAM_STANDARDS/ # Normas trabajo
/mnt/cello2/arno/re/recode/zig/zig-0.15.2/... # Compilador Zig
```