From 17d1ea0c751143159caedc8db044e545f836cfba Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=90=B4=E7=9B=9B=E5=8D=8E?= <736139669@qq.com> Date: Sat, 8 Aug 2026 13:53:48 +0800 Subject: [PATCH] fix(web): close composer settings on outside click (#1354) * fix(web): close composer settings on outside click Co-Authored-By: Codex * fix(web): capture composer outside clicks Co-Authored-By: Codex --------- Co-authored-by: Codex --- .../AssistantChat/ComposerButtons.tsx | 4 +- .../HappyComposer.expandSelection.test.tsx | 72 ++++++++++++++++--- .../AssistantChat/HappyComposer.tsx | 20 +++++- 3 files changed, 86 insertions(+), 10 deletions(-) diff --git a/web/src/components/AssistantChat/ComposerButtons.tsx b/web/src/components/AssistantChat/ComposerButtons.tsx index faa10f04..8973a807 100644 --- a/web/src/components/AssistantChat/ComposerButtons.tsx +++ b/web/src/components/AssistantChat/ComposerButtons.tsx @@ -6,7 +6,7 @@ import { ScheduleTimePicker } from './ScheduleTimePicker' import type { PendingSchedule } from './ScheduleTimePicker' import { useFue } from '@/lib/use-fue' import { FueCallout, FueDot } from '@/components/Fue' -import { Children, isValidElement, useRef, useState, type ReactElement, type ReactNode } from 'react' +import { Children, isValidElement, useRef, useState, type ReactElement, type ReactNode, type Ref } from 'react' import { useComposerToolbarLayout, type ComposerToolbarItemId, type ComposerToolbarLayout } from '@/hooks/useComposerToolbarLayout' import { useLongPress } from '@/hooks/useLongPress' import type { ComposerSendIntent } from '@/lib/messageDelivery' @@ -623,6 +623,7 @@ export function ComposerButtons(props: { canSend: boolean controlsDisabled: boolean showSettingsButton: boolean + settingsButtonRef?: Ref onSettingsToggle: () => void expanded: boolean onExpandedToggle: () => void @@ -704,6 +705,7 @@ export function ComposerButtons(props: { {props.showSettingsButton ? (