Commit de seguridad antes de dividir table.zig (1770 líneas) en múltiples archivos más manejables. Ver docs/TABLE_REFACTORING_PLAN.md para el plan completo. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2.3 KiB
2.3 KiB
Plan de Refactoring: table.zig
Fecha: 2025-12-11 Motivo: Archivo de 1770 líneas, difícil de manejar en sesiones de edición
Estado Actual
src/widgets/table.zig (~1770 líneas)
├── Tipos (Column, TableConfig, TableColors, SortDirection, etc.)
├── TableState (estado completo con ~50 campos)
├── TableResult (resultado de interacción)
├── Funciones de renderizado (drawHeaders, drawRows, drawScrollbar)
├── handleKeyboard (navegación, edición, búsqueda)
├── API pública (table, tableRect, tableEx)
└── Tests
Estructura Propuesta
src/widgets/table/
├── table.zig # Re-exports + API pública (table, tableRect, tableEx)
├── types.zig # Column, TableConfig, TableColors, SortDirection, RowState
├── state.zig # TableState, TableResult
├── keyboard.zig # handleKeyboard, startsWithIgnoreCase
├── render.zig # drawHeaders, drawRows, drawCell, drawScrollbar
└── tests.zig # Todos los tests
Estimación de Líneas por Archivo
| Archivo | Contenido | Líneas Est. |
|---|---|---|
| types.zig | Enums, configs, column def | ~150 |
| state.zig | TableState, TableResult | ~400 |
| keyboard.zig | Input handling | ~250 |
| render.zig | Drawing functions | ~500 |
| table.zig | API pública + re-exports | ~200 |
| tests.zig | Unit tests | ~250 |
Orden de Extracción
- types.zig - Sin dependencias internas
- state.zig - Depende de types.zig
- keyboard.zig - Depende de types.zig, state.zig
- render.zig - Depende de types.zig, state.zig
- table.zig - Orquesta todo, re-exporta API pública
- tests.zig - Al final, importa todo
Dependencias Externas (se mantienen)
../core/context.zig- Context../core/command.zig- Command../core/layout.zig- Layout, Rect../core/style.zig- Style, Color../core/input.zig- Input
Compatibilidad
La API pública NO cambia:
const table = @import("widgets").table;
// Sigue funcionando igual:
table.table(ctx, &state, &columns, getCellData);
table.tableRect(ctx, rect, &state, &columns, getCellData, onEdit, validate, config, colors);
Rollback
Si hay problemas, el commit anterior tiene table.zig completo y funcional.