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

19 KiB

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 + 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

# 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

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

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

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

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

# 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

Zig

ANSI Escape Codes


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.fgstyle.foreground
  • std.time.sleepstd.Thread.sleep
  • Cell.charCell.symbol
  • Tipo i2i8 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

# 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