Repository navigation
Conversation
Codex Review SummaryThis comment shows the latest Codex review activity on this pull request.
ℹ️ About Codex in GitHubYour team has set up Codex to review pull requests in this repo. Reviews are triggered when you
Codex reacts with 👀 while any review is running, comments if it has suggestions, and reacts with 👍 once all reviews finish with no findings. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: a7487b992c
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| <div style={{ flexShrink: 1, minHeight: 0, display: "flex", alignItems: "flex-start", gap: 8, padding: "12px 14px", borderBottom: "1px solid var(--border)", maxHeight: "50vh", overflowY: "auto" }}> | ||
| <div style={{ flex: 1, minWidth: 0 }}> | ||
| <div {...drag.handleProps} style={{ flex: 1, minWidth: 0, display: "flex", alignItems: "flex-start", gap: 8, cursor: drag.enabled ? "grab" : undefined, touchAction: drag.enabled ? "none" : undefined }}> |
There was a problem hiding this comment.
Preserve touch scrolling in long dialog titles
On touch devices whose viewport is wider than 640 px (so drag.enabled is true), this touchAction: "none" is applied to the child that fills the existing maxHeight: "50vh"; overflowY: "auto" header. A multiline extension title taller than that cap can therefore no longer be panned: the pointer sequence drags the whole dialog instead, leaving the clipped lines unreachable on devices such as an iPad without a mouse. Keep touch panning available for the title scroller, for example by restricting touch dragging to the grip.
AGENTS.md reference: AGENTS.md:L28-L28
Useful? React with 👍 / 👎.
|
Thanks @uvforce for the careful work. Clamping, pointer-capture cleanup, collapse/restore and the ≤640px cutoff all behaved as described when I tried them in Chrome. I'm going to close this one on scope, though. You mention moving the dialog aside without collapsing it. On One side effect I noticed while testing: since any mouse press on the title starts a drag, the title text can no longer be selected or double-clicked to copy. Extensions often put the whole question there, ids and commands included. If you run into a case that scrolling and Collapse don't cover, please open an issue describing it. |
Summary
Extension interaction dialogs can cover conversation text that users need to read before answering. Allow users to move the dialog aside without dismissing or collapsing the pending interaction.
ExtensionDialog / ExtensionCustomPanel existing padded overlay existing dialog surface existing header + drag grip, pointer dragging and keyboard movement unchanged body and action buttonsKeep the official adaptive width, maximize/restore controls, multiline titles, cancellation, input focus and terminal-key handling. Compose the ordinary dialog's existing sizing ref with the drag ref. Clamp movement to the content region, retain the offset across collapse/restore, and release pointer capture and temporary cursor styles on cancellation, lost capture, blur, hidden state or unmount. Disable dragging at the existing ≤640 px mobile breakpoint; wider touch/pen screens continue to use pointer dragging.
This is a UI-only change with no new settings, persistence, APIs or dependencies. It does not include any automatic-title, sidebar or session-file customization.
Evidence
Before: The unmodified v0.12.0 dialog obscures the relevant conversation text.
After: Dragging the header moves the same dialog aside and reveals the text without submitting another response.
The comparison uses actual official/modified React components over a synthetic conversation in Chrome, not a model-generated or live extension-RPC session. Screenshots were captured locally but are not attached to this PR.
Regression: The hook consumer test covers bounded pointer movement, excluded controls, keyboard/reset actions, collapse/restore, resize, narrow-screen reset and capture/style cleanup. The existing official dialog-fit and extension queue tests are retained.
Validation: 14 focused tests pass. The standalone official-base suite has 2627 tests: 2626 pass, 0 fail and 1 skip. ESLint, TypeScript,
git diff --checkand clean-basegit apply --checkpass.Merge Danger
Door: two-way
Reverting restores centered dialogs. Drag offsets are component-local and do not change stored session data or preferences.
Blast Radius: Dialogs
The affected area is the header, focus and positioning lifecycle of ordinary and terminal-style extension dialogs. Body inputs, scrolling and action buttons remain outside the drag-start area; the official mobile breakpoint and sizing behavior are preserved.