You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
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.
Source: noted while building the wheel handling in phase 3 of #24, 2026-09-09.
Re-audited 2026-09-10 against
origin/issue-24-designat685e3e8, where theTimeline 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-421renders the change list through the sharedList, and passesitems,selected,height,emptyandrender— but notonSelect.src/ui/widgets.tsx:486gates the wheel on exactly that prop:onMouseScroll={onSelect && …}. The two screens that respond to the wheel passit (
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:304opens a<scrollbox>and:138keeps theselection visible with
scroller.current?.scrollChildIntoView. This one is a realchoice: either move it onto the shared
List, or give the container a wheelhandler 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
list, one row per notch, the same as elsewhere.
Context
src/ui/timeline-screen.tsx(passonSelect),src/ui/storage-screen.tsx, and the wheel handling insrc/ui/widgets.tsx.src/ui/widgets.tsx:486-495, where a fastflick advances one row instead of several. Worth doing in the same change.
implementation of the same behaviour is how the two drift apart.