Skip to content

Keep the roadmap's horizontal scrollbar on the chart frame's bottom edge - #901

Merged
github-actions[bot] merged 1 commit into
mainfrom
claude/horizontal-scrollbar-positioning-12edcc
Sep 30, 2026
Merged

github-actions[bot] merged 1 commit into
mainfrom
claude/horizontal-scrollbar-positioning-12edcc

Conversation

@JSdotNet

Copy link
Copy Markdown
Owner

Summary

In the desktop Roadmap takeover, the timeline's horizontal scrollbar could sit mid-chart with blank lanes below it. The chart frame is a flex row with a fixed height, and align-items: stretch clamped both columns (lane names and the scrolling track) to the frame's visible height. The track's overflow-y: hidden then clipped its last lanes. The lane names overflowed and made the frame scroll, so scrolled down, the track and its scrollbar ended partway while the names carried on beside empty rows.

Each column is now as tall as the frame or its own lanes, whichever is taller. A short plan puts the scrollbar on the frame's bottom edge; a long one grows the track with its lanes, so nothing is clipped.

Changes

  • src/App/Backlog.Desktop.UI/wwwroot/app.css: the frame override (.roadmap-band__timeline .roadmap-timeline__frame) gets align-items: flex-start, and .roadmap-timeline__sidebar / .roadmap-timeline__scroll inside it get min-height: 100%. The shared component's CSS is untouched; other hosts still size the chart to its content.
  • tests/Backlog.Desktop.UI.UnitTests/DevbookStackLayoutTests.cs: a CSS contract test pins both declarations.

Reviewer note: with a long plan the horizontal scrollbar is at the bottom of the lanes, so you scroll down to reach it. Keeping it permanently on screen would mean restructuring the chart's scrolling, which this PR does not do.

Testing

  • dotnet build Backlog.sln: 0 warnings, 0 errors. dotnet test Backlog.sln: 10294 passed, 1 skipped, 0 failed; the new test passed.
  • Reproduced before the fix in desktop-web-harness under Aspire at 1280x700: the scroll box was 406px tall around a 440px track, and scrolled to the bottom it ended 35px above the frame.
  • Targeted Playwright QA after the fix, all passed:
    • 1280x700, scrolled to the bottom: the scrollbar is on the frame's bottom edge and the track (440px) is not clipped.
    • 1280x1400: the scroll box fills the frame, the scrollbar is on its bottom edge, and there is no vertical scroll.
    • Horizontal scroll moves the axis exactly, and sidebar rows stay aligned with track rows in both viewports.
  • No errors in the Aspire logs.

Related

No issue: raised from a screenshot in session.

Checklist

  • Scope is focused and excludes unrelated changes
  • Documentation or instruction files were updated when governance or behavior changed (none needed)
  • Running Aspire instances for this checkout were stopped before PR creation
  • Follow-up work is captured when the implementation is intentionally partial (always-visible scrollbar noted above as optional)
  • Issues this PR closes are linked with a closing keyword, or there are none

🤖 Generated with Claude Code

The frame stretched both columns to its visible height, so with more lanes
than fit the track clipped its last lanes and, scrolled down, its scrollbar
sat mid-chart beside lane names over blank rows. Each column is now the
frame's height or its rows', whichever is taller.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions
github-actions Bot merged commit b6d47de into main Sep 30, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant