fix(web): capture composer outside clicks

Co-Authored-By: Codex <noreply@anthropic.com>
This commit is contained in:
2026-08-05 11:16:36 +08:00
co-authored by Codex
parent b30c25ddcf
commit 4bc88bdf0f
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()
})
})
@@ -1393,8 +1393,8 @@ export function HappyComposer(props: {
dismissSettings()
}
document.addEventListener('pointerdown', handlePointerDown)
return () => document.removeEventListener('pointerdown', handlePointerDown)
document.addEventListener('pointerdown', handlePointerDown, true)
return () => document.removeEventListener('pointerdown', handlePointerDown, true)
}, [dismissSettings, showSettings])
const handleSubmit = useCallback((event?: ReactFormEvent<HTMLFormElement>) => {