Note
Grok responding on behalf of Julius.
Thanks for the report. I can reproduce this from the code. Two things block selection in the pending-question card (apps/web/src/components/chat/ComposerPendingUserInputPanel.tsx, on current main):
Root cause
- Option label and description are inside a
<button>(ComposerPendingUserInputPanel.tsx:293-303, content at:272-277). Chromium/Electron won't start a drag selection inside a button, and any mousedown there turns into a click, sohandleOptionSelection(:297-299) runs. - The question text is caught by the composer form's pointer handler. The card renders inside the composer
<form>(ChatComposer.tsx:6680/:6701). ItsonPointerDownCapture(ChatComposer.tsx:6550-6568) ignores buttons, but for any other target it callsevent.preventDefault()while the composer is resting (:6561-6565) so it can refocus the editor. Calling preventDefault on pointerdown stops a native text selection from starting, so the question<p>(ComposerPendingUserInputPanel.tsx:249) can't be selected either. The collapsed header is also a<button>trigger (:197-213), so the truncated question there can't be selected.
Proposed fix
- In the form's
onPointerDownCapture, return early for targets inside the pending-question panel (for example adata-pending-user-input-bodymarker), or at least for non-editor text. - Make the option rows not native buttons: use
role="button"/role="radio"on a div withtabIndex, keep keyboard handling and the 1-9 shortcuts, and addselect-text cursor-texton the label and description spans. Another option is to keep the button and render the description outside it. - In the option's
onClick, skip selection when the user dragged out a selection:if (window.getSelection()?.toString()) return;, or compare the pointerdown/pointerup positions. Clicking an option still selects it, and drag-select plus Cmd+C works. - Add a test in
ComposerPendingUserInputPanel.test.tsxthat a click with a non-empty selection doesn't call the selection handler.
Workaround None in the card itself for now; a screenshot is the only reliable way to get the text out until the fix lands.
Overlap: #5454 (closed, dismiss after session death), #15517 (stale question after steering) and #14237 (option preview dropped) all touch this card but not text selection, so this isn't a duplicate.