Open
Conversation
added 30 commits
January 28, 2026 17:47
New features: - SplitView: horizontal/vertical split layout with custom ratios - ProgressBar: animated progress bar with Unicode block characters - Focus system: Tab to cycle focus, views can handle keyboard input - Dynamic terminal size: Window now uses actual terminal dimensions - Screen clearing on resize to prevent visual artifacts Bug fixes: - Screen bounds checking prevents RangeError on negative coordinates - View.resize_children uses parent size for uninitialized children New key codes: TAB, SHIFT_TAB, ENTER, ESCAPE, BACKSPACE Example: split_view.dart demonstrates all new features
Tests (97 total): - Screen: buffer operations, bounds checking, resize - Canvas: offset calculations, nested canvas, position immutability - View: resize, SplitView ratios, ProgressBar, Box, CenteredText - Focus: focusableViews collection, callbacks, key handling - TreeView: navigation, expand/collapse, scrolling Architecture fixes: - Unified View hierarchy: TreeView now extends View (removed View2) - TreeView integrates with Canvas/Screen rendering system - Removed incomplete FlexView (SplitView covers main use cases) - Fixed Position mutation bug in Canvas.canvas() - Fixed SplitView ratio calculation for extra children Updated file_browser.dart example to use new TreeView API
Single Responsibility improvements: - view.dart: Now contains only base View class (152 lines) - widgets.dart: New file with Box, CenteredText, SplitView, ProgressBar (189 lines) - focus.dart: New FocusManager mixin extracted from Window (74 lines) - window.dart: Simplified, uses FocusManager mixin (119 lines) File size comparison (before → after): - view.dart: 343 → 152 lines - window.dart: 135 → 119 lines - New widgets.dart: 189 lines - New focus.dart: 74 lines Benefits: - Each file has a single, clear responsibility - FocusManager can be reused independently - Widgets are easier to find and maintain - Base View class is cleaner and well-documented Added 8 new tests for FocusManager mixin (105 total tests)
- Standardize onKey() to return bool across all views - Apply consistent code formatting (indentation, trailing newlines) - Simplify verbose code patterns - Remove redundant code and unused imports - Net reduction of ~140 lines
New stuff: - PageView for multi-step wizards with page navigation - Page indicators (steps, dots, text) - NavigationBar with prev/next buttons - Frame widget for bordered panels with titles Two example wizards showing it all in action.
Add new shadow font using 3D block characters (███╗) for better visual impact. Add subtitle property for description text below the main banner. Add showBorder and borderColor properties for optional frame around banner. Add centered property for horizontal centering of text.
Add FpsMeter class for tracking frame timing statistics (current, average, min, max FPS and frame time). Integrate into Window with showFps toggle. Change default render loop from 50ms (20 FPS) to 16ms (~60 FPS). Update animation_demo to enable FPS display and use 60 FPS animations.
Add 4 pages: Fonts (block/slim/chunky/shadow), Gradients (rainbow/sunset/ ocean/matrix/fire), Borders (with subtitle support), Showcase (combined). Navigate with LEFT/RIGHT or H/L keys. Fix rendering by setting children in constructor and page switch handler instead of update().
Add RepeatMode enum (once, reverse, loop, pingPong) with repeatCount support. Add new animations: - RevealAnimation: reveal multi-line content (linesDown, linesUp, centerOut, fade) - ValueAnimation: simple value interpolation with repeat support - ShimmerAnimation: scan line effect across width - BlinkAnimation: cursor/alert blinking Update animation_demo with examples of all repeat modes and new animations.
- Fix FPS meter rendering order (now renders AFTER screen buffer) - Add guard against Duration(0) in Animation.progress to prevent division by zero - Add comprehensive test suite for animation system (26 tests): - Easing functions - Tween interpolation - RGB color operations - Animation lifecycle (start/stop/reset) - AnimationController - FpsMeter - RepeatMode and RevealStyle enums
Add line-by-line BigText animation with configurable reveal style per line: - LineRevealStyle: instant, typewriter, glitch, matrix, fade, slide - LineRevealConfig: style, duration, easing per line - BigTextAnimation: animates multiple lines with different effects - AnimatedBigText: wrapper widget for easy BigText animation Each line can have a different reveal effect: - typewriter: characters appear left to right - glitch: random characters resolve to final text - matrix: matrix rain characters that resolve - fade: dim to bright transition - slide: slides in from the side Add 4 new demos and 6 new tests for BigText animations.
Add static method to generate raw ASCII art lines from text and font. Update animation_demo to use generateLines() instead of hardcoded lines. Now animations use proper BigText fonts (shadow, block, etc.).
Update all example files to use BoxChars class instead of literal Unicode box-drawing characters: - animation_demo.dart: generate reveal box using BoxChars - build_wizard.dart: use BoxChars.lightH and BoxChars.doubleH - file_browser.dart: use BoxChars.lightH in main() - input_demo.dart: use BoxChars.lightH for separators - split_view.dart: use BoxChars.lightH in main() - widgets_demo.dart: use BoxChars.lightH in main() - wizard.dart: use BoxChars.lightH and BoxChars.doubleH
- Shorten verbose private variable names - Clean up outdated inline comments - Minor code style improvements
- Use dim borders (color '8') for unfocused panels - Add distinct focus colors: cyan, yellow, green - Show contextual hints only when focused - Use brighter ANSI colors for log levels - Add FPS toggle with F key
…rato and tempo map
clean up duplication, dead code and inefficiencies
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.