TUI - Program-scoped animation runtime - #3843
Merged
Merged
Conversation
Collaborator
|
👋 This PR has merge conflicts with the base branch. Please rebase or merge the latest base branch and resolve them. I've moved it to draft and added |
krissetto
force-pushed
the
tui-animation-infrastructure
branch
from
July 27, 2026 11:58
1fd22c3 to
6053c20
Compare
krissetto
force-pushed
the
tui-animation-infrastructure
branch
from
July 27, 2026 12:09
6053c20 to
fa302fd
Compare
Sayt-0
approved these changes
Jul 27, 2026
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.
First of many TUI improvement proposals :)
This PR sets some animation-related foundations for enabling a better overall TUI UX where we can:
Why
The current global coordinator advances animations by frame count and does not own queued ticks. Under event-loop delays, animations slow down; stale or duplicate tick chains also cannot be rejected cleanly.
What changed
Runtime.Accept, andIsCurrentGenremains a side-effect-free generation check. This matches some consumer's direct use ofTickMsg,StartTick*,HasActive, andIsCurrentGen.Component adoption of the new infra is for later PRs. The legacy facade can be removed after components and consumers have migrated.
flowchart LR Root["TUI root"] --> AnimationRuntime["Program animation runtime"] AnimationRuntime -->|shared tick| Components Components -->|subscribe while active| AnimationRuntimeflowchart LR Delivery["Tick delivery"] --> Clock["Elapsed time"] Clock --> Transition["progress = elapsed / duration"] Clock --> Spinner["frame = elapsed / cadence"]