Skip to content

Storage and Timeline take the arrow keys but not the wheel #35

Description

@bmethod

Source: noted while building the wheel handling in phase 3 of #24, 2026-09-09.
Re-audited 2026-09-10 against origin/issue-24-design at 685e3e8, where the
Timeline half turns out to be one prop rather than a new handler.

Reached by: open Storage or Timeline and turn the mouse wheel over the list.
Nothing moves. The same wheel moves the selection on Agents, the Agents table,
Resources and Builds.

Timeline: the shared list is already there, without its wheel

src/ui/timeline-screen.tsx:392-421 renders the change list through the shared
List, and passes items, selected, height, empty and render — but not
onSelect. src/ui/widgets.tsx:486 gates the wheel on exactly that prop:
onMouseScroll={onSelect && …}. The two screens that respond to the wheel pass
it (src/ui/agents.tsx:750, :787).

So Timeline needs a selection setter passed down, not a wheel handler of its own.

Storage: a scroll container, not a windowed list

src/ui/storage-screen.tsx:304 opens a <scrollbox> and :138 keeps the
selection visible with scroller.current?.scrollChildIntoView. This one is a real
choice: either move it onto the shared List, or give the container a wheel
handler that moves the selection rather than the scroll offset.

A reader who has learned the wheel on four screens will try it on the other two.

Done when

  • The wheel moves the selection on the Storage list and on the Timeline change
    list, one row per notch, the same as elsewhere.
  • A test drives each by wheel and asserts the selection moved by one.

Context

  • Location: src/ui/timeline-screen.tsx (pass onSelect),
    src/ui/storage-screen.tsx, and the wheel handling in src/ui/widgets.tsx.
  • Related: A fast wheel advances the selection by one row, not by several #46, the same handler at src/ui/widgets.tsx:486-495, where a fast
    flick advances one row instead of several. Worth doing in the same change.
  • Storage is the only screen left with a second scrolling implementation. A second
    implementation of the same behaviour is how the two drift apart.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    enhancementNew feature or request

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions