Give the exercise run screen its own chrome, rolling digits, and a true resume
The run screen now hides the navigation bar in both orientations and draws its own header — back chevron top-left, exercise name (plus library name when renamed) in large type where the toolbar was, previewing the next exercise during a between-exercise rest. Work and rest counters are pinned to the exact vertical center of the timer half via equal flexible bands, with the adjust pill moved to an overlay so complications can't shift them. Counter digits are now state-driven and roll through numericText transitions (work count-up, rest countdown, and the Done button count). Reopening an in-progress exercise now resumes its timer from the durable timestamps instead of restarting at zero: no sets done anchors the stopwatch to startedAt; mid-rest lands back on the rest page with the countdown still running off its true window; past the window the next set's stopwatch counts from the rest's computed end. The resume page is computed at init because the paged TabView must initialize on it — a post-layout backward jump wedges the pager, which then ignores the next animated programmatic advance. Claude-Session: https://claude.ai/code/session_01H8VxUX4ckjU3vRF5M4L5FV
This commit is contained in:
@@ -65,7 +65,11 @@ struct LiveRunCoverView: View {
|
||||
},
|
||||
onActivity: { services.liveActivity.update($0) },
|
||||
onActivityEnded: { services.liveActivity.end() },
|
||||
incomingFrame: incomingFrame
|
||||
incomingFrame: incomingFrame,
|
||||
// The run screen hides the nav bar (and this toolbar's close button
|
||||
// with it); its own header hosts the close action instead.
|
||||
closeSymbol: "xmark",
|
||||
onClose: onClose
|
||||
)
|
||||
} else {
|
||||
// The workout hasn't resolved from the cache yet (or has vanished).
|
||||
|
||||
Reference in New Issue
Block a user