Repository navigation
refactor(widgets): consolidate the progress-bar widgets' duplicated code - #810
Merged
sirmalloc merged 1 commit intoNov 6, 2026
Merged
Conversation
- Shared bar rendering: Block Timer, Block Reset Timer, Weekly Reset Timer, Extra Usage Utilization and the usage-percent widgets each built their bars with the same blocks. formatUsageBar in usage-display.ts now builds every bar mode (block, line and slider, with or without the percentage) in one place and returns null outside them, so each widget only adds its label. The time cursor is still resolved only in bar modes. - One class for the usage-percent widgets: Block, Weekly, Weekly Sonnet, Weekly Opus and Fable Weekly Usage were identical apart from their kind. UsagePercentWidget holds the class once and each widget names its kind. Spend Limit Usage extends it too and keeps only its color; the class takes the time cursor and the API-error state from the kind. - A shared base for the Context % widgets: Context % and Context % (usable) differed only in name, color, description, label prefix, preview sample and how they measure the used share. ContextPercentageWidgetBase holds the rest. No change in behavior.
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.
What
The progress-bar widgets carry a lot of copied code. This consolidates it, with no change in behavior: every widget renders byte for byte what it renders on
main, in every display mode, including #794's line bar.Why
The same bar code lives in up to a dozen places, so a change to how bars render has to be made in each of them. #794's line mode, for example, touched the bar blocks of Block Timer, Block Reset Timer, Weekly Reset Timer, Extra Usage Utilization and the usage-percent widgets one by one.
How
formatUsageBarinwidgets/shared/usage-display.tsbuilds every bar mode's text (block, line and slider, with or without the percentage) and returnsnulloutside them, so each widget only adds its label. The time cursor is still resolved only in bar modes.UsagePercentWidgetinwidgets/shared/usage-percent-widget.tsholds the class once, and each widget names its kind. Spend Limit Usage extends it and keeps only its color. The class takes the other two differences from the kind: no usage window means no cursor key, and a kind that ignores API errors has no "unavailable" state to hide.ContextPercentageWidgetBaseholds what the two share; each supplies only what differs, including Context % (usable)'s compaction-aware usable window from fix: use env override and settings for usable context ratio calculation #407.17 files, 284 lines added and 594 removed.
Demo
In the line editor, p cycles the display modes of Block Usage, Block Timer, Context % and Extra Usage Utilization, which between them use all three pieces of shared code. These were recorded before #794 added the line mode; the render check under Testing covers it.
Powerline
Plain
Testing
mainas of fix(powerline): keep the Custom theme when Powerline is enabled again #793 (a0bedc0), one commit:bun run lintis clean, andbun testgives 4151 pass, 0 fail (4147 onmain). The existing tests pass unchanged, which is the main check that behavior didn't change. New:widgets/shared/__tests__/usage-bar.test.tscoversformatUsageBarin each bar mode,nulloutside them without resolving the cursor, and the time cursor;SpendLimitUsage.test.tschecks the color Spend Limit Usage keeps and that it offers no state to hide.mainand on this branch in every state their own keys reach, up to six presses deep, so every display mode including the line bar: display modes, used or remaining, time cursor, compact, date and so on (72 states per usage-percent widget, up to 400 for the Weekly Reset Timer). Each state renders raw and labeled, at all three color levels, in the TUI preview, plus sample live usage and context data for the usage and Context % widgets. All 9,273 cases are byte-identical, as are each state's editor label and keys.mainin plain and Powerline mode, on a line of these widgets in bar modes. The TUI opens and exits cleanly under both.