fix(web): capture composer outside clicks

Co-Authored-By: Codex <noreply@anthropic.com>
This commit is contained in:
2026-08-04 11:26:02 +08:00
co-authored by Codex
parent 1bea6da301
commit 2d4e895cc4
2 changed files with 15 additions and 2 deletions
@@ -76,6 +76,13 @@ function TestRuntime(props: { withSettings?: boolean }) {
agentFlavor={props.withSettings ? 'claude' : undefined}
onPermissionModeChange={props.withSettings ? () => {} : undefined}
/>
{props.withSettings ? (
<button
type="button"
aria-label="Outside action"
onPointerDown={(event) => event.stopPropagation()}
/>
) : null}
</AssistantRuntimeProvider>
)
}
@@ -144,5 +151,11 @@ describe('HappyComposer plain-text expansion', () => {
fireEvent.pointerDown(screen.getByRole('textbox'))
expect(screen.queryByText('misc.permissionMode')).not.toBeInTheDocument()
fireEvent.click(settingsButton)
expect(screen.getByText('misc.permissionMode')).toBeInTheDocument()
fireEvent.pointerDown(screen.getByRole('button', { name: 'Outside action' }))
expect(screen.queryByText('misc.permissionMode')).not.toBeInTheDocument()
})
})
@@ -1153,8 +1153,8 @@ export function HappyComposer(props: {
setShowSettings(false)
}
document.addEventListener('pointerdown', handlePointerDown)
return () => document.removeEventListener('pointerdown', handlePointerDown)
document.addEventListener('pointerdown', handlePointerDown, true)
return () => document.removeEventListener('pointerdown', handlePointerDown, true)
}, [showSettings])
const handleSubmit = useCallback((event?: ReactFormEvent<HTMLFormElement>) => {