Fixed issue where Ctrl+C did not work to exit looping animations.
In raw terminal mode, signals are not automatically handled, so we
need to manually poll for keyboard events.
Changes:
- Added crossterm event polling in render loop
- Check for Ctrl+C, 'q', or ESC key to exit animation
- Polls with 0ms timeout to avoid blocking animation frames
Users can now exit with:
- Ctrl+C
- Press 'q'
- Press ESC
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Previously all binaries were uploaded with the same name 'piglet',
causing them to overwrite each other. Now each binary is renamed
to include the target platform (e.g., piglet-x86_64-unknown-linux-gnu)
before uploading.
This ensures all 4 platform binaries are available in the release.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Added 'contents: write' permission to allow GITHUB_TOKEN to create
releases. This fixes the 403 error when the workflow tries to create
a GitHub release.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Rustfmt requires long chained method calls to be broken across
multiple lines when they exceed line length limits.
Changes:
- Break visual_width() iterator chains in renderer.rs
- Break visual_width() iterator chains in terminal.rs
- Fix comment alignment in ansi.rs
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Windows support is removed from CI workflows:
- Removed windows-latest from test matrix
- Removed x86_64-pc-windows-msvc from build targets
- Simplified artifact upload path (no .exe conditional)
CI now only runs on Ubuntu and macOS.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
The motion effects were appearing with incorrect row offsets because
the text width calculation included ANSI color escape sequences in
the byte length, causing misaligned centering.
Changes:
- Added utils/ansi.rs module with strip_ansi() and visual_width()
- Updated renderer to use visual_width() for offset positioning
- Updated TerminalManager::print_centered() to use visual_width()
- All text positioning now correctly ignores ANSI escape sequences
This fixes the "shifted in the rows" issue where colored text was
not properly centered due to escape sequence byte counts.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Previously, the animation loop would exit before rendering the final
frame at progress=1.0. The loop checked is_complete() before rendering,
so the last visible frame was at (total_frames-1)/total_frames progress
(~96-97%).
Changed the loop to:
1. Render the current frame
2. Check if complete and break
3. Advance to next frame
This ensures the final frame at progress=1.0 is rendered before exiting,
completing the animation properly.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Windows figlet installation was unreliable in CI. Tests will
gracefully skip when figlet is not available.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
Chocolatey installation was failing in CI. Winget is built into
Windows and provides a more reliable installation method.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Update actions/upload-artifact from v3 to v4
- Update actions/dependency-review-action from v3 to v4
- Fix deprecated action warnings
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>
- Implement complete animation system with 20+ motion effects
- Add 18+ easing functions (quad, cubic, elastic, back, bounce)
- Implement color system with palette and gradient support
- Add parser for durations, colors, and CSS gradients
- Create comprehensive test suite (14 tests passing)
- Add linting and formatting with clippy/rustfmt
- Support for figlet integration with custom fonts
- Terminal rendering with crossterm
- Fix all clippy warnings and lint issues
🤖 Generated with [Claude Code](https://claude.com/claude-code)
Co-Authored-By: Claude <noreply@anthropic.com>