Move the composer strips out of the pop-out drag region - #74611
Merged
Merged
Conversation
The micro-action pills, the status stack, and the underside strip all
rendered inside the composer root. The pop-out drag region is an
`absolute inset-0` child of that root, so everything alongside it was
inside the grab area by construction — hovering a pill hatched the
composer and a press between two badges started a peel-out drag.
That was being patched at the gesture instead of the structure: a
`composer-no-drag` exclusion in gestureTargetOk, a matching guard on the
double-click toggle, and a strip that juggled z-index and pointer-events
to climb back over a region painting on top of it.
Introduce a dock column that owns the composer's position and stacks its
children in flow, bottom-anchored:
composer-dock
├── micro-action strip
├── status stack
├── composer <- drag region lives in here, and only here
└── underside strip
The strips are siblings of the composer rather than children, so landing
in the grab area is impossible rather than excluded. gestureTargetOk and
the double-click handler go back to what they were, and the shared strip
constant drops to a bare flex row.
Two things fall out of the move:
Alignment stops needing a magic number. The strips sat in different
containing blocks — one in the stack's absolute lane resolving against
the root's padding box, one in the root's content box — and the root
carries `padding-inline: 5px` for the grab margin, which is the 5px the
pills hung left by. One parent and a shared `px-[5px]` line both strips
up with the surface directly.
The stack stops measuring itself. It published
--status-stack-measured-height only because it was out of flow and the
composer's measurement couldn't see it. As a dock child it's covered by
the dock's own height, so the var, the ResizeObserver effect, and the
detached-node cleanup it needed all go, and thread clearance reads one
number instead of summing two.
Contributor
૮ >ﻌ< ა ci reviewran on e17d058 ℹ️ InfoDesktop E2E visual evidence · View test artifacts · View job1 visual diff. inline evidence is publishing... |
randlee
pushed a commit
to randlee/hermes-agent
that referenced
this pull request
Aug 11, 2026
…trips-outside Move the composer strips out of the pop-out drag region
33hodl
pushed a commit
to 33hodl/hermes-agent
that referenced
this pull request
Aug 12, 2026
…trips-outside Move the composer strips out of the pop-out drag region
prmartinow
pushed a commit
to prmartinow/hermes-agent
that referenced
this pull request
Aug 26, 2026
…trips-outside Move the composer strips out of the pop-out drag region
melon-xf
added a commit
to melon-xf/hermes-agent
that referenced
this pull request
Sep 3, 2026
…trips-outside Move the composer strips out of the pop-out drag region
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.
Summary
The micro-action pills, the status stack, and the
composer.undersidestrip all rendered inside the composer root. The pop-out drag region is anabsolute inset-0child of that root, so everything alongside it was inside the grab area by construction — hovering a pill hatched the composer, and a press landing between two badges started a peel-out drag.That was getting patched at the gesture rather than the structure: a
composer-no-dragexclusion ingestureTargetOk, a matching guard on the double-click toggle, and a strip jugglingz-indexandpointer-eventsto climb back over a region painting on top of it. Each fix traded away a bit of the vertical band the composer is actually grabbed by.This adds a dock column that owns the composer's position and stacks its children in flow, bottom-anchored:
The strips are siblings of the composer rather than children, so landing in the grab area is impossible instead of excluded.
gestureTargetOkand the double-click handler revert to their pre-existing form, and the shared strip constant drops to a bare flex row.Two things fall out of the move:
Alignment stops needing a magic number. The strips sat in different containing blocks — one in the stack's absolute lane resolving against the root's padding box, one in the root's content box — and the root carries
padding-inline: 5pxfor the grab margin. That was the 5px the pills hung left by, and thepl-[0.3125rem]in #73741 was compensating for it. One parent and a sharedpx-[5px]line both strips up with the surface directly.The status stack stops measuring itself. It published
--status-stack-measured-heightonly because it was out of flow and the composer's measurement couldn't see it. As a dock child it's covered by the dock's own height, so the var, itsResizeObservereffect, and the detached-node cleanup that effect needed all go — thread clearance now reads one number instead of summing two. Note this also removessurface-var-lifecycle.test.tsx: it guarded a real regression (a stale clearance written to:rootfrom a detached node), but the mechanism it tested no longer exists, and the bug class is now structurally unreachable.Net −139 lines.
Test plan
tsc --noEmitclean,eslint0 errorsvitest run src/app/chat/composer src/app/chat/surface-vars.test.tsfromapps/desktop)