feat(timeline): add day-jump toolbar with dated labels#202
Merged
Conversation
Qodo reviews are paused for this user.Troubleshooting steps vary by plan Learn more → On a Teams plan? Using GitHub Enterprise Server, GitLab Self-Managed, or Bitbucket Data Center? |
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
chiptus
commented
Jul 15, 2026
chiptus
force-pushed
the
claude/188-192-scrollto-url-state
branch
from
July 16, 2026 14:17
5fcab7c to
acf2265
Compare
chiptus
force-pushed
the
claude/188-193-day-jump-toolbar
branch
from
July 18, 2026 17:08
e6bdfdc to
fa5c695
Compare
chiptus
commented
Jul 18, 2026
chiptus
commented
Jul 18, 2026
chiptus
force-pushed
the
claude/188-193-day-jump-toolbar
branch
from
July 18, 2026 18:07
3f4ecd3 to
c508b4f
Compare
chiptus
commented
Jul 19, 2026
chiptus
commented
Jul 19, 2026
chiptus
commented
Jul 19, 2026
Adds a sticky toolbar above the Timeline strip with one button per festival day; tapping a day jumps the strip to that day's first set via jumpTo() on useTimelineScrollSync.
defaultStructuralSharing is set globally on the router in main.tsx.
useTimelineScrollSync now owns only the passive URL <-> scroll sync; imperative jumpTo moves to a new useTimelineJump hook.
Dedupes the inline ScheduleDay literals in timelineCalculator.test.ts and timelineDayJump.test.ts's buildDay into one makeScheduleDay helper.
Adds role="toolbar" + an aria-label to TimelineToolbar so the e2e spec can select it via getByRole instead of a test id.
A missing/broken seed should surface as a failure, not a quiet skip that masks a real regression.
- Drop the redundant scrollTo write in useTimelineJump; the scroll-driven debounce in useTimelineScrollSync already settles on the same value. - Move the ScheduleDay test fixture to src/__tests__/fixtures.ts. - Scope StageLabels' absolute positioning to the scroll container instead of the shared wrapper, so the new sticky toolbar no longer pushes it out of alignment with the date label and stage rows. - Give day-jump buttons an explicit transparent background so they're not unreadable white-on-white against the dark toolbar. - Give the e2e day-toolbar spec's initial container check a more generous timeout to reduce cross-browser CI flakiness.
- Day-jump buttons now highlight the day currently in view, tracked via a new useActiveTimelineDay hook that follows scroll position. - jumpTo gained a "start" alignment mode: day jumps now land the target moment near the left edge (offset by a gutter that clears the pinned StageLabels column) instead of centering, per feedback that centering buried the target day mid-viewport and let early sets hide behind the stage-name badges. - Share the gutter constant between useTimelineJump and useActiveTimelineDay so the active-day highlight and the actual scroll landing position never drift apart.
chiptus
force-pushed
the
claude/188-193-day-jump-toolbar
branch
from
July 19, 2026 05:17
4cfe485 to
ff8ecf0
Compare
- Inline useTimelineJump into a plain jumpToTimelineMoment function in timelineDayJump.ts; it held no state/effects so didn't need to be a hook. - Move makeStage into shared src/__tests__/fixtures.ts alongside makeScheduleDay. - Drop the now-unused data-testid on day-jump buttons (specs use getByRole). - Model the day-jump toolbar as a radiogroup of radio buttons instead of a plain toolbar/button list, and update the e2e spec's locators to match.
getDayJumpMoment targeted the global earliest set start, which landed the day jump on sparse midnight/pre-dawn sets (dead far-left timeline). Target the modal opening — the time the most stages start — instead. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chiptus
commented
Jul 19, 2026
getFestivalDayKey's no-timezone fallback formats in the local zone, so the 'UTC calendar day' test only passed on UTC machines (e.g. CI) and failed on local dev in other zones. Pin TZ=UTC in the shared test setup. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Replace the eight outlined pill buttons with a stacked weekday/date rail marked by an underline on the active day, and add a divider wherever the festival's days are not calendar-adjacent. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
chiptus
pushed a commit
that referenced
this pull request
Jul 20, 2026
The day-jump-toolbar feature (#202) was substantially reworked after this branch's own commits stopped: active-day tracking (useActiveTimelineDay), radiogroup/radio a11y semantics, a "modal opening" day-jump target instead of the global-earliest set, a restyled weekday/date rail, a repositioned StageLabels column, and global router structuralSharing. This branch's diff-based rebase preserved this branch's own (now-stale) versions of those files, which would have regressed all of the above on merge. Restore every file this PR doesn't need to touch to main's exact content, and re-wire only the overview mini-map on top of it: - TimelineToolbar now nests the day radiogroup and appends the overview toggle as a sibling, instead of replacing the toolbar's semantics. - TimelineContainer keeps main's useActiveTimelineDay + StageLabels wiring and drives both the day buttons (start-aligned) and the overview map (center-aligned) through the same jumpToTimelineMoment call. - Dropped the now-unnecessary useTimelineScrollSync.jumpTo/structuralSharing additions and the standalone getFestivalDayShortLabel helper. - e2e specs for both the day toolbar and the overview map now match main's "fail loudly instead of silently skipping" convention.
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.
Adds a slim sticky toolbar above the Timeline strip with one button per festival day (weekday + date, e.g. "Thu 13"). Tapping a day writes
scrollToand smooth-scrolls the strip to that day's first set, via a newjumpTo(moment: Date)returned fromuseTimelineScrollSync.Design notes: the day list comes from the unfiltered
scheduleDays(fromuseScheduleData) so it reflects the actual festival-timezone days; when adayfilter is active only that day's button renders (nav operates on what's rendered, never filters). The jump target is the day's earliest set start (falling back to festival-timezone midnight for a dayless day) since that's what a viewer actually wants centered.jumpTowritesscrollToimmediately via history replace and relies on the existing scroll debounce to settle on the same value once the smooth-scroll animation finishes — no new suppression state needed.Stacked on #192 (
claude/188-192-scrollto-url-state) — this PR's diff is scoped to the day-jump toolbar; #192's changes will disappear from the diff once that PR merges.Closes #193
Verification
scrollToparam.dayfilter (e.g. via the existing day select): only that day's button remains in the toolbar.TimeScale.tsx.pnpm run lint,pnpm run typecheck, andpnpm vitest runall pass.Generated by Claude Code