Mod panes on desktop: support fixed, independently scrolling and resizable regions
Status Open
Reported on v2.1.287
Maintainer reply None cached
Activity 2 comments · opened Oct 4, 2026
Context: A mod (ui.render on Pane, Claude Code 2.1.287, macOS desktop app) draws a diff viewer with a file tree beside the diffs, like the built-in diff panel. The goals are to keep the tree in view while the diffs scroll, and to let the person resize the tree by dragging the divider between them.
What happens on the desktop:
- The pane body scrolls natively, and
ui.scrollarrives after the window has moved. If a hook keeps the window (returns withoutnext), the window snaps back instead of never moving. ui.scrollcarries nopointerfor wheel or trackpad scrolls. So a hook can't tell a scroll over a pinned list from one over the body, which is the pattern theUiScrollPointerdocs describe.- A Box with
position: "relative"and atopoffset is drawn without the offset. - Redrawing a Box at
top = scroll.offsetkeeps it in view, but it trails each scroll by a frame or two and visibly jitters. - A
Clientregion on desktop gets presses but no pointer moves or drags, so a mod can't follow a drag on a divider. We use ‹ › buttons that step the tree's width instead.
Requests:
- Keeping a region in view (any one would work):
position: "sticky"for Box; a scrollable region inside a pane (overflow: "scroll"); pane regions that don't scroll with the body, such as a fixed header or sidebar; or honouring a kept window before the desktop moves, pluspointeron wheel events. - Resizing (either would work): a resizable split between such regions, or pointer move and drag events for a desktop
Client.
Why: mods could build side-by-side layouts (tree and content, list and detail) that match the built-in panels: without jitter, and with a divider the person can drag.
Related: #99457 (code in mod panes can't be selected or scrolled sideways).
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗