Commit graph

46 commits

Author SHA1 Message Date
59935aeb2b refactor: Split textarea.zig and progress.zig into modular structures
Split large widget files for better maintainability (~500-600 lines per file):

textarea/ (was 882 lines):
- types.zig: TextAreaConfig, TextAreaColors, TextAreaResult
- state.zig: TextAreaState with cursor/selection methods
- render.zig: drawLineNumber, drawLineText, drawLineSelection
- textarea.zig: Main API with re-exports and tests

progress/ (was 806 lines):
- render.zig: Shared drawing helpers (stripes, gradients, arcs)
- bar.zig: ProgressBar widget
- circle.zig: ProgressCircle widget
- spinner.zig: Spinner widget with animation state
- progress.zig: Main API with re-exports and tests

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-11 23:21:06 +01:00
cfe4ee7935 refactor: Split table.zig into modular structure
Split the 1770-line table.zig into a cleaner module structure:

  src/widgets/table/
  ├── table.zig     (~400 lines) - Public API + re-exports + tests
  ├── types.zig     (~150 lines) - Enums, configs, column definitions
  ├── state.zig     (~500 lines) - TableState, TableResult
  ├── keyboard.zig  (~270 lines) - Keyboard handling, search
  └── render.zig    (~350 lines) - Drawing functions

Benefits:
- Each file is now manageable (<500 lines)
- Clearer separation of concerns
- Easier to navigate and modify
- Same public API (no breaking changes)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-11 23:11:35 +01:00
e73836493e docs: Plan de refactoring table.zig antes de dividir
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>
2025-12-11 23:04:08 +01:00
05e4f2c926 feat: Implement keyboard system improvements (4 phases)
Phase 1: Frame timing in Context
- Added current_time_ms and frame_delta_ms to Context
- Added setFrameTime() method for applications to provide timing

Phase 2: Centralized shortcuts system
- Added StandardShortcut enum with common shortcuts (copy, paste, etc.)
- Added isStandardActive() function for checking shortcuts
- Updated TextInput to use centralized shortcuts

Phase 3: Incremental search in table
- Added search_buffer, search_len, search_last_time to TableState
- Added addSearchChar(), getSearchTerm(), clearSearch() methods
- Typing in focused table searches first column (case-insensitive)
- 1 second timeout resets search buffer

Phase 4: Blinking cursor in TextInput
- Cursor blinks every 500ms when field is focused
- Uses current_time_ms from Context for timing

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-11 22:58:22 +01:00
7073ccef9f docs: Plan de refactoring sistema de teclado
Auditoría comparando con Gio, microui y DVUI identificó 4 problemas:
1. SDL_KEYDOWN y SDL_TEXTINPUT separados
2. Dos arrays para eventos de teclado
3. Sin timing en Context para animaciones
4. Shortcuts duplicados en cada widget

Plan de 4 fases aprobado (~7-11 horas total).

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-11 22:43:05 +01:00
466735a6fd docs: Renombrar TEAM_STANDARDS a teamdocs
🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-11 19:33:25 +01:00
3517a6f972 docs: Documentar sistema de focus completado y widgets adaptados
- Actualizar FOCUS_TRANSITION_2025-12-11.md con patrón de integración
- Actualizar CLAUDE.md: sección SISTEMA DE FOCUS - RESUELTO
- Widgets adaptados a FocusSystem:
  - numberentry.zig: registerFocusable, requestFocus, hasFocus
  - textarea.zig: registerFocusable, requestFocus, hasFocus
  - select.zig: campo focused, integración completa
  - radio.zig: reemplazado focus manual por FocusSystem
  - slider.zig: reemplazado focus manual por FocusSystem
  - tabs.zig: navegación teclado solo cuando tiene focus

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-11 18:50:37 +01:00
7cde6370d8 fix: Sistema de focus rediseñado y funcionando
Cambios principales:
- Nuevo FocusSystem unificado en core/focus.zig
- Separación registration_group / active_group para multi-panel
- Focus implícito para primer widget del grupo activo
- Table inicializa selected_row/col a 0 cuando tiene datos
- Corregido test navKeyPressed (usaba setKeyState en vez de handleKeyEvent)

Bug resuelto: tabla no respondía a teclado sin clic previo
Causa: selected_col quedaba en -1, selectedCell() retornaba null

Documentación: docs/FOCUS_TRANSITION_2025-12-11.md

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-11 17:55:08 +01:00
9b6210c76e refactor: Unificar sistema de focus - trabajo en progreso
PROBLEMA DETECTADO:
- Existían dos sistemas de focus paralelos que no se comunicaban
- FocusManager (widgets/focus.zig) usaba IDs u32
- FocusGroupManager (core/focus_group.zig) usaba IDs u64
- Esto causaba que Tab no funcionara y clics no cambiaran focus

SOLUCIÓN CONSENSUADA:
- Usar SOLO FocusGroupManager como fuente de verdad
- Integrar en Context con métodos públicos
- Widgets se auto-registran en el grupo activo al dibujarse
- Tab navega DENTRO del grupo activo
- F6 (u otro) cambia entre grupos/paneles

CAMBIOS:
- context.zig: Añadidos createFocusGroup(), setActiveFocusGroup(),
  hasFocus(), requestFocus(), registerFocusable(), handleTabKey()
- text_input.zig: Usa @intFromPtr para ID único, se auto-registra
- table.zig: Ahora se registra como widget focusable
- widgets.zig/zcatgui.zig: Eliminadas referencias antiguas a FocusManager
- CLAUDE.md: Documentado el trabajo en progreso

ESTADO: EN PROGRESO - Compila pero requiere más testing

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-11 00:26:22 +01:00
88f5a15491 docs: Add MainLoop to VERIFIED_FEATURES
- Add mainloop.zig section with feature status
- Note that patterns are tested via zsimifactu manual implementation
- Add to verification history

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 12:26:22 +01:00
80b5d99bfd feat(core): Add MainLoop helper for optimized application loops
MainLoop encapsulates the CPU optimization patterns:
- Progressive sleep (8ms → 33ms → SDL_WaitEventTimeout)
- Automatic event handling
- Dirty region support
- Configurable timing parameters

Usage:
```zig
const MyApp = struct {
    pub fn handleEvent(self: *MyApp, event: Event, ctx: *Context) void { ... }
    pub fn update(self: *MyApp, ctx: *Context) bool { return changed; }
    pub fn draw(self: *MyApp, ctx: *Context, renderer: *Renderer) void { ... }
};

var loop = try MainLoop.init(allocator, 800, 600);
loop.run(backend, &app);
```

This moves CPU optimization from application code to library level,
making it easy for all zcatgui apps to achieve 0% CPU in idle.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 12:25:27 +01:00
3c0daa9644 docs: Update VERIFIED_FEATURES with partial redraw and SIMD
- Add clearRect as verified feature
- Mark fillRect as improved with SIMD @memset
- Add historial entry: render 1.4ms → 1.0ms

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 12:19:19 +01:00
f7af2ba833 perf(framebuffer): Optimize fillRect with row-wise @memset
For solid colors (alpha=255), use @memset per row instead of
pixel-by-pixel loop. @memset is SIMD-optimized by the compiler
(uses SSE/AVX on x86-64).

Result: Render time 1.4ms → 1.0ms (28% faster in Release build)

Also cleaner code separation between solid color fast path
and alpha blending slow path.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 12:18:47 +01:00
e5ba9b178c feat(render): Add partial redraw support with dirty regions
Framebuffer:
- Add clearRect() for clearing specific rectangular regions

SoftwareRenderer:
- Add executeWithDirtyRegions() for optimized partial rendering
- Add clearRect() convenience method
- Add commandBounds() to extract bounding box from draw commands
- Add rectsIntersect() helper for intersection testing

This enables applications to:
1. Clear only dirty regions instead of full screen
2. Skip rendering commands outside dirty areas
3. Significantly reduce CPU when only small areas change

Usage: Pass dirty_regions from Context.getDirtyRects() to
executeWithDirtyRegions() instead of using clear()+executeAll().

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 12:12:21 +01:00
d44d4d26d2 docs: Update VERIFIED_FEATURES with waitEvent verification
- Mark waitEvent and waitEventTimeout as verified in sdl2.zig
- Add historial entry: CPU 92% → 1.9% with progressive sleep

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 12:07:47 +01:00
eebd0022ce feat(backend): Add waitEvent and waitEventTimeout for 0% CPU idle
- Add waitEvent() and waitEventTimeout() to Backend abstract interface
- Implement SDL_WaitEvent and SDL_WaitEventTimeout in SDL2 backend
- Refactor translateEvent into shared function
- Optional vtable entries with fallback to pollEvent for compatibility

This enables progressive sleep patterns:
- Phase 1: Short sleep (8ms) for quick response
- Phase 2: Medium sleep (33ms) for moderate idle
- Phase 3: SDL_WaitEventTimeout for 0% CPU in deep idle

Result: CPU 92% → 1.9% in idle applications.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 12:06:45 +01:00
d8f0523e8f docs: Add VERIFIED_FEATURES.md - tracking production-tested features
Documento que distingue features realmente probadas en producción
vs solo tests unitarios. Incluye:
- 48 widgets con estado de verificación
- Core modules (context, input, layout, style)
- Render modules (framebuffer, font, software)
- Backends (SDL2, WASM, Android, iOS)

Verificado en zsimifactu:
- Table, TextInput, Split, Panel
- Font 8x16 Latin-1, UTF-8 rendering
- SDL2 backend completo

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 12:00:37 +01:00
51d41bd01e perf(font): Optimizar drawChar con fast path para caracteres visibles
- Early out para caracteres completamente fuera del clip
- Fast path para caracteres 100% visibles (caso común)
- Escritura directa al buffer de píxeles sin setPixel
- Loop optimizado para fuentes de 8px de ancho
- Unroll de los 8 bits del glyph byte

Resultados:
- Debug: 40ms → 32ms por frame
- Release: 40ms → 1.5ms por frame (~26x más rápido)

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 11:40:58 +01:00
097f1474ca perf(sdl2): Usar aceleración GPU + VSync para reducir CPU
Cambio de SDL_RENDERER_SOFTWARE a SDL_RENDERER_ACCELERATED | PRESENTVSYNC:
- VSync sincroniza con el refresco del monitor (~60Hz)
- SDL_RenderPresent() ahora bloquea hasta el próximo frame
- Elimina necesidad de sleep manual en aplicaciones
- CPU de ~70% a ~1-5% en idle

Fallback a software renderer si GPU no disponible.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 10:49:55 +01:00
feb1c4f48d feat(TextInput): Manejar teclas especiales internamente
El widget TextInput ahora procesa internamente:
- Backspace/Delete: borrar caracteres
- Flechas izq/der: mover cursor
- Home/End: inicio/fin del texto
- Shift+movimiento: selección
- Ctrl+A: seleccionar todo
- Enter: submit

Esto hace que el widget sea auto-contenido y reutilizable,
sin requerir manejo de teclas en la aplicación.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 01:39:26 +01:00
f7a7b48c2c docs: Documentar soporte UTF-8 en renderizado de texto
- REFERENCE.md: Nueva sección "UTF-8 Text Rendering" explicando:
  - Cómo funciona la decodificación UTF-8 → Latin-1
  - Caracteres soportados (ASCII + Latin-1 Supplement)
  - Por qué UTF-8 es el estándar correcto para BD/archivos
  - Ejemplo de uso con texto español

- software.zig: Doc comments explicando el sistema UTF-8

El renderer ahora maneja texto UTF-8 automáticamente,
permitiendo mostrar correctamente: ñ, á, é, í, ó, ú, ¿, ¡, €, etc.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 01:37:00 +01:00
2e1b627f11 fix(render): Decodificar UTF-8 correctamente en drawText
El renderer iteraba byte por byte, causando que caracteres UTF-8
multi-byte (como ñ, á, é) se mostraran incorrectamente.

Cambios:
- Decodificación completa de UTF-8 (1-4 bytes)
- Mapeo de codepoints a Latin-1 para renderizado
- Caracteres fuera de Latin-1 se muestran como '?'

Esto permite mostrar correctamente texto en español y otros
idiomas europeos que usan caracteres Latin-1.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 01:30:21 +01:00
784fecac01 feat(fonts): Sistema de fuentes multi-tamaño con 8x16 Latin-1
Nuevas fuentes bitmap 8x16 (altura VGA estándar, mejor legibilidad):
- font_8x16: ASCII básico (95 caracteres)
- font_8x16_latin1: Latin-1 completo (224 caracteres)

Sistema FontSize para selección por categoría:
- getFontForSize(.small) → 8x8 Latin-1 (compacto)
- getFontForSize(.medium) → 8x16 Latin-1 (estándar UI)
- getFontForSizeAscii() variantes para menor memoria

Soporte completo español/europeo: ñ, Ñ, á, é, í, ó, ú, ü, ¿, ¡, ç, ß

Documentación actualizada en REFERENCE.md con tabla de fuentes
y ejemplos de uso.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 01:19:34 +01:00
520c5d7343 🌍 Font Latin-1 completo para soporte español/europeo
- Nuevo font_data.zig con datos de glifos separados
- font_8x8_ascii: ASCII básico (32-126)
- font_8x8_latin1: Latin-1 completo (32-255)
- Soporte español: ñ, Ñ, á, é, í, ó, ú, ü, ¿, ¡
- Soporte europeo: français, deutsch, português, italiano
- Exports: default_font_latin1, font_data

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 01:03:02 +01:00
14d717d7f4 🔧 Font completo + key repeat para navegación
- Font bitmap 8x8 completo (ASCII 32-126)
- navKeyPressed() ahora detecta key repeat de SDL2
- Exportar default_font desde render module

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-10 00:50:44 +01:00
296939bb65 🔧 FIX: Compatibilidad Zig 0.15.2
- build.zig.zon: .name = .zcatgui (enum literal, no string)
- examples/widgets_demo.zig: Añadido try en Context.init
- examples/table_demo.zig: Añadido try en Context.init
- ZIG_VERSION_NOTES.md: Referencia a sistema notas versiones

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 23:01:09 +01:00
2de8f626be docs: Update CLAUDE.md with REFERENCE.md link and cleanup
- Add REFERENCE.md to documentation protocol (Step 3)
- Update widget count to 37
- Update LOC to ~35K
- Add REFERENCE.md to file structure
- Remove obsolete roadmap sections (now in DEVELOPMENT_PLAN.md)
- Simplify documentation section with table
- Clean up references section

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 22:46:09 +01:00
b42945ba81 docs: Complete API Reference Manual (1370 lines)
REFERENCE.md - Comprehensive documentation for zcatgui library

Contents:
- Overview and design philosophy
- Installation and build commands (all platforms)
- Quick start guide with examples
- Architecture diagram and file structure
- Core modules documentation:
  - Context, Layout, Style, Input, Command
  - Clipboard, DragDrop, Shortcuts, Focus
  - Accessibility, Gesture recognition

- All 37 widgets documented with categories:
  - Basic: Label, Button, TextInput, TextArea, Checkbox, Radio, Switch
  - Selection: Select, List, AutoComplete, Menu, Tabs
  - Data: Table, Tree, VirtualScroll
  - Input: Slider, NumberEntry, ColorPicker, DatePicker
  - Feedback: Progress, Tooltip, Toast, Badge, Loader
  - Layout: Split, Panel, Modal, ScrollArea, Surface, Grid, Resize, Divider
  - Navigation: AppBar, NavDrawer, Sheet, Breadcrumb, Discloser
  - Visual: Icon, IconButton, Image, RichText, Canvas, Chart
  - Interactive: Reorderable, Selectable

- Rendering system:
  - Framebuffer, SoftwareRenderer
  - Bitmap and TTF fonts
  - Animation system (20+ easing functions, spring physics)
  - Effects (shadows, gradients, blur, AA)

- Backend documentation:
  - SDL2 (desktop)
  - WASM (browser) with JS integration
  - Android (NDK)
  - iOS (UIKit bridge)

- Macro system (record/playback)
- Panel system (Lego architecture)
- Performance utilities (arena, pools, benchmarks)
- Theme system (5 built-in themes)
- Accessibility system
- Full API reference

Stats: 35K LOC, 81 source files, 37 widgets, 4 backends

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 18:42:52 +01:00
6889474327 feat: zcatgui v0.15.0 - Mobile & Web Backends
WASM Backend:
- src/backend/wasm.zig: Browser backend using extern JS functions
- web/zcatgui.js: Canvas 2D rendering bridge (~200 LOC)
- web/index.html: Demo page with event handling
- examples/wasm_demo.zig: Widget showcase for browser
- Output: 18KB WASM binary

Android Backend:
- src/backend/android.zig: ANativeActivity + ANativeWindow
- examples/android_demo.zig: Touch-enabled demo
- Touch-to-mouse event mapping
- Logging via __android_log_print
- Targets: ARM64 (device), x86_64 (emulator)

iOS Backend:
- src/backend/ios.zig: UIKit bridge via extern C functions
- ios/ZcatguiBridge.h: Objective-C header
- ios/ZcatguiBridge.m: UIKit implementation (~320 LOC)
- CADisplayLink render loop
- Touch event queue with @synchronized
- Targets: ARM64 (device), ARM64 simulator

Build System:
- WASM: zig build wasm
- Android: zig build android / android-x86
- iOS: zig build ios / ios-sim
- Conditional compilation for platform detection

Documentation:
- docs/MOBILE_WEB_BACKENDS.md: Comprehensive guide (~400 lines)
- Updated DEVELOPMENT_PLAN.md with FASE 10
- Updated CLAUDE.md with new commands

Stats: 3 backends, ~1500 new LOC, cross-platform ready

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 18:20:13 +01:00
91e13f6956 feat: zcatgui Gio parity - 12 new widgets + gesture system
New widgets (12):
- Switch: Toggle switch with animation
- IconButton: Circular icon button (filled/outlined/ghost/tonal)
- Divider: Horizontal/vertical separator with optional label
- Loader: 7 spinner styles (circular/dots/bars/pulse/bounce/ring/square)
- Surface: Elevated container with shadow layers
- Grid: Layout grid with scrolling and selection
- Resize: Draggable resize handle (horizontal/vertical/both)
- AppBar: Application bar (top/bottom) with actions
- NavDrawer: Navigation drawer with items, icons, badges
- Sheet: Side/bottom sliding panel with modal support
- Discloser: Expandable/collapsible container (3 icon styles)
- Selectable: Clickable region with selection modes

Core systems added:
- GestureRecognizer: Tap, double-tap, long-press, drag, swipe
- Velocity tracking and fling detection
- Spring physics for fluid animations

Integration:
- All widgets exported via widgets.zig
- GestureRecognizer exported via zcatgui.zig
- Spring/SpringConfig exported from animation.zig
- Color.withAlpha() method added to style.zig

Stats: 47 widget files, 338+ tests, +5,619 LOC
Full Gio UI parity achieved.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 17:21:15 +01:00
5a751782ea docs: Add comprehensive README.md
- Project overview and features
- Quick start example
- Full widget list (35 widgets)
- Unique features documentation (Macros, Lego Panels, Table)
- Theme system
- Performance utilities
- Build instructions
- Comparison with DVUI/Dear ImGui

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 14:01:01 +01:00
f219e14f9c docs: Mark all development phases complete
Updated DEVELOPMENT_PLAN.md checklist:
- All 35 widgets marked complete
- All 9 development phases complete
- 274+ tests passing
- Ready for v1.0.0 release

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 14:00:09 +01:00
5acc754555 docs: Update CLAUDE.md for v0.14.0 release
Updated documentation to reflect project completion:
- Version bump to v0.14.0
- Complete widget inventory (35 widgets)
- All core systems documented
- Full version history (v0.1.0 to v0.14.0)
- Metrics: 274 tests, ~25K LOC

All 9 phases of DEVELOPMENT_PLAN.md completed:
- Phase 1: Performance infrastructure
- Phase 2: Feedback widgets (Progress, Tooltip, Toast)
- Phase 3: Specialized widgets (Tree, Image, ColorPicker)
- Phase 4: Text widgets (TextArea, NumberEntry, RichText)
- Phase 5: Graphics (Canvas, Charts, Icons)
- Phase 6: Input systems (Clipboard, DragDrop, Shortcuts)
- Phase 7: Visual polish (Animation, Effects, AA)
- Phase 8: Accessibility & Testing
- Phase 9: Integration & Documentation

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 13:55:35 +01:00
1a26d34aa3 feat: zcatgui v0.14.0 - Phase 8 Accessibility & Testing
Accessibility System:
- Role enum for all widget types (button, checkbox, slider,
  tree, table, menu, dialog, etc.)
- State packed struct (disabled, focused, selected, checked,
  expanded, pressed, invalid, readonly, required, busy)
- Info struct with label, description, value, position,
  level, controls, labelled_by
- Manager for tracking widget accessibility info
- announce() method for screen reader announcements
- Live region support (polite, assertive)
- Helper constructors for common patterns

Testing Framework:
- TestRunner for simulating user interactions:
  - Mouse: click, doubleClick, drag, scroll, moveMouse
  - Keyboard: pressKey, typeText, shortcut
  - Time: tick, waitFrames, advanceTime
- SnapshotTester for visual regression testing:
  - capture() to save framebuffer
  - compare() to diff against baseline
  - update() to update baseline
- Assertions module:
  - assertVisible, assertContains, assertIntersects
  - assertColorEqual, assertColorNear
  - assertInRange

Widget count: 35 widgets
Test count: 274 tests passing

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 13:54:07 +01:00
70fca5177b feat: zcatgui v0.13.0 - Phase 7 Visual Polish
Animation System:
- Easing functions: linear, quad, cubic, quartic, sine, expo,
  elastic, bounce, back (in/out/inout variants)
- Animation struct with start/stop/getValue/isComplete
- AnimationManager for concurrent animations
- lerp/lerpInt interpolation helpers

Visual Effects:
- Shadow: soft/hard presets, offset, blur, spread
- Gradient: horizontal, vertical, diagonal, radial
- Blur: box blur with configurable radius
- Color utilities: interpolateColor, applyOpacity,
  highlight, lowlight

Virtual Scrolling:
- VirtualScrollState for large list management
- Variable item height support
- Scrollbar with drag support
- Overscan for smooth scrolling
- ensureVisible/scrollToItem helpers

Anti-Aliased Rendering:
- drawLineAA: Xiaolin Wu's algorithm
- drawCircleAA: filled and stroke
- drawRoundedRectAA: rounded corners
- drawEllipseAA: arbitrary ellipses
- drawPolygonAA: polygon outlines
- Quality levels: none, low, medium, high, ultra

Widget count: 35 widgets
Test count: 256 tests passing

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 13:49:50 +01:00
976d172501 feat: zcatgui v0.12.0 - Phase 6 Advanced Input
New Core Modules (4):

Clipboard - System clipboard integration
- getText()/setText() via SDL2 clipboard API
- hasText() and clear() utilities
- Cross-platform support

DragDrop - Drag and drop system
- DragData with typed data transfer
- DropZone registration with type filtering
- DragDropManager for coordinating operations
- Hover detection and drop results
- Helper functions: makeDraggable(), makeDropZone()

Shortcuts - Keyboard shortcuts system
- Shortcut struct with key + modifiers
- ShortcutManager for registration and checking
- Common shortcuts (Ctrl+C/V/X/Z, etc.)
- Human-readable formatting (formatShortcut)
- Enable/disable individual shortcuts

FocusGroup - Focus group management
- FocusGroup for widget tab order
- focusNext/Previous with wrap support
- FocusGroupManager for multiple groups
- Group switching (focusNextGroup)
- Tab/Shift+Tab navigation

All tests passing

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 13:41:43 +01:00
bb5b201203 feat: zcatgui v0.11.0 - Phase 5 Data Visualization
New Widgets (3):

Canvas - Drawing primitives widget
- Point, fillRect, strokeRect, line, text
- fillCircle, strokeCircle (Bresenham algorithm)
- fillArc, fillTriangle (scanline fill)
- strokePolygon, fillRoundedRect
- horizontalGradient, verticalGradient
- Color interpolation (lerpColor)

Chart - Data visualization widgets
- LineChart: Points, grid, axis labels, fill under line
- BarChart: Vertical bars, value display, labels
- PieChart: Slices with colors, donut mode
- DataPoint and DataSeries for multi-series
- 8-color default palette
- Scanline fill for triangles and quads

Icon - Vector icon system (60+ icons)
- Size presets: small(12), medium(16), large(24), xlarge(32)
- Categories: Navigation, Actions, Files, Status, UI, Media
- Stroke-based drawing with configurable thickness
- All icons resolution-independent

Widget count: 34 widget files
All tests passing

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 13:37:27 +01:00
34dfcfce18 feat: zcatgui v0.10.0 - Phase 4 Text & Navigation Widgets
New Widgets (3):
- NumberEntry: Numeric input with spinner buttons,
  min/max limits, prefix/suffix, validation
- RichText: Styled text display with bold, italic,
  underline, strikethrough, colors, clickable links,
  simple markdown parsing
- Breadcrumb: Navigation path display with clickable
  segments, separators, home icon, collapse support

Widget count: 30 widgets
Test count: 200 tests passing

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 13:27:21 +01:00
a75827f70b feat: zcatgui v0.9.0 - Phase 3 Specialized Widgets
New Widgets (4):
- Image: Display images with RGBA/RGB/grayscale support,
  fit modes (contain, cover, fill, scale_down), LRU cache
- ReorderableList: Drag and drop list reordering with
  drag handle, remove button, add button support
- ColorPicker: RGB/HSL/Palette modes, alpha slider,
  preview comparison, recent colors
- DatePicker: Calendar view with month navigation,
  range selection, min/max dates, week numbers

Widget count: 27 widgets
Test count: 186 tests passing

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 13:21:47 +01:00
8044c1df43 feat: zcatgui v0.8.0 - Phase 2 Complete (6 new widgets)
New Widgets:
- TextArea: Multi-line text editor with cursor navigation,
  line numbers, selection, and scrolling support
- Tree: Hierarchical tree view with expand/collapse,
  keyboard navigation, and selection
- Badge: Status labels with variants (primary, success,
  warning, danger, info, outline), dismissible option
- TagGroup: Multiple badges in a row with wrapping

From previous session (v0.7.0):
- Progress: Bar (solid, striped, gradient, segmented),
  Circle, Spinner (circular, dots, bars, ring)
- Tooltip: Hover tooltips with smart positioning
- Toast: Non-blocking notifications with auto-dismiss

Widget count: 23 widgets
Test count: 163 tests passing

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 13:04:41 +01:00
1ae0199db7 feat: zcatgui v0.7.0 - Phase 2 Feedback Widgets
New Widgets (3):
- Progress: Bar, Circle, Spinner with multiple styles
  - Bar styles: solid, striped, gradient, segmented
  - Spinner styles: circular, dots, bars, ring
  - Animated spinners with configurable speed
- Tooltip: Hover tooltips with smart positioning
  - Auto-position to stay within screen bounds
  - Arrow pointing to target element
  - Multi-line text support with wrapping
  - Configurable delay and styling
- Toast: Non-blocking notifications
  - Types: info, success, warning, error
  - Configurable position (6 positions)
  - Auto-dismiss with countdown
  - Action buttons support
  - Stack multiple toasts

Widget count: 20 widgets
Test count: 140 tests passing

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 12:54:55 +01:00
8adc93a345 feat: zcatgui v0.6.0 - Phase 1 Optimization Complete
Performance Infrastructure:
- FrameArena: O(1) per-frame allocator with automatic reset
- ObjectPool: Generic object pool for frequently allocated types
- CommandPool: Specialized pool for draw commands
- RingBuffer: Circular buffer for streaming data
- ScopedArena: RAII pattern for temporary allocations

Dirty Rectangle System:
- Context now tracks dirty regions for partial redraws
- Automatic rect merging to reduce overdraw
- invalidateRect(), needsRedraw(), getDirtyRects() API
- Falls back to full redraw when > 32 dirty rects

Benchmark Suite:
- Timer: High-resolution timing
- Benchmark: Stats collection (avg, min, max, stddev, median)
- FrameTimer: FPS and frame time tracking
- AllocationTracker: Memory usage monitoring
- Pre-built benchmarks for arena, pool, and commands

Context Improvements:
- Integrated FrameArena for zero-allocation hot paths
- frameAllocator() for per-frame widget allocations
- FrameStats for performance monitoring
- Context.init() now returns error union (breaking change)

New Widgets (from previous session):
- Slider: Horizontal/vertical with customization
- ScrollArea: Scrollable content region
- Tabs: Tab container with keyboard navigation
- RadioButton: Radio button groups
- Menu: Dropdown menus (foundation)

Theme System Expansion:
- 5 built-in themes: dark, light, high_contrast, nord, dracula
- ThemeManager with runtime switching
- TTF font support via stb_truetype

Documentation:
- DEVELOPMENT_PLAN.md: 9-phase roadmap to DVUI/Gio parity
- Updated WIDGET_COMPARISON.md with detailed analysis
- Lego Panels architecture documented

Stats: 17 widgets, 123 tests, 5 themes

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 12:45:00 +01:00
6ac3856ae2 feat: zcatgui v0.5.0 - Complete widget library + research docs
Widgets implemented (13 total):
- Label: Static text with alignment
- Button: With importance levels (primary/normal/danger)
- TextInput: Single-line text entry with cursor
- Checkbox: Boolean toggle
- Select: Dropdown selection
- List: Scrollable selectable list
- Focus: Focus manager with tab navigation
- Table: Editable table with dirty tracking, keyboard nav
- Split: HSplit/VSplit draggable panels
- Panel: Container with title bar, collapsible
- Modal: Dialogs (alert, confirm, inputDialog)
- AutoComplete: ComboBox with prefix/contains/fuzzy matching

Core improvements:
- InputState now tracks keyboard state (keys_down, key_events)
- Full keyboard navigation for Table widget

Research documentation:
- WIDGET_COMPARISON.md: zcatgui vs DVUI vs Gio vs zcatui
- SIMIFACTU_ADVANCEDTABLE.md: Analysis of 10K LOC table component
- LEGO_PANELS_SYSTEM.md: Modular panel composition architecture

Examples:
- widgets_demo.zig: All basic widgets showcase
- table_demo.zig: Table, Split, Panel demonstration

All tests passing.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 11:00:49 +01:00
b352cf9672 docs: Update CLAUDE.md with actual project state
- Fix file structure to show what actually exists
- Update Zig 0.15.2 notes (ArrayListUnmanaged, file I/O)
- Update status: 16 tests passing, core implemented
- Add verification commands

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 01:41:20 +01:00
c4ea6422dc style: Use consistent lowercase naming (zcatgui, not zCatGui)
Apply TEAM_STANDARDS Norma #25: project names use lowercase
everywhere - repo, directory, module, documentation, imports.

No CamelCase in project names. Consistency = less cognitive friction.

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 01:38:36 +01:00
59c597fc18 feat: zCatGui v0.1.0 - Initial project setup
Immediate Mode GUI library for Zig with software rendering.

Core features:
- SDL2 backend for cross-platform window/events
- Software rasterizer (works everywhere, including SSH)
- Macro recording system (cornerstone feature, like Vim)
- Command-list rendering (DrawRect, DrawText, etc.)
- Layout system with constraints
- Color/Style system with themes

Project structure:
- src/core/: context, command, input, layout, style
- src/macro/: MacroRecorder, MacroPlayer, MacroStorage
- src/render/: Framebuffer, SoftwareRenderer, Font
- src/backend/: Backend interface, SDL2 implementation
- examples/: hello.zig, macro_demo.zig
- docs/: Architecture, research (Gio, immediate-mode libs, Simifactu)

Build: zig build (requires SDL2-devel)
Tests: 16 tests passing

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

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-09 01:30:05 +01:00