From e178dc5aa91e221f3a477d1a483ca0f90ce55a25 Mon Sep 17 00:00:00 2001 From: NeilJo-GY <43027886+NeilJo-GY@users.noreply.github.com> Date: Fri, 2 Oct 2026 12:22:24 +0800 Subject: [PATCH] feat: wire remaining dialogs to useModalA11y and unify zh agent terminology MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - CreateAgentDialog / ConnectAgentModal: shared useModalA11y (Escape with acting guard, focus trap, focus return); add aria-modal, drop the hand-rolled Escape listener in ConnectAgentModal. - zh messages: unify agent/Agents/Agent as 智能体 across UI copy (~93 strings); keep technical terms (agent id, AgentPlanet) and code identifiers untouched; tighten CJK spacing around the replacement. Co-authored-by: Cursor --- .../src/ranch-shell/ConnectAgentModal.tsx | 13 +- .../src/ranch-shell/CreateAgentDialog.tsx | 15 +- packages/agent-chat/src/ranch-shell/i18n.ts | 184 +++++++++--------- tsconfig.tsbuildinfo | 2 +- 4 files changed, 110 insertions(+), 104 deletions(-) diff --git a/packages/agent-chat/src/ranch-shell/ConnectAgentModal.tsx b/packages/agent-chat/src/ranch-shell/ConnectAgentModal.tsx index 48422c5..732ebfb 100644 --- a/packages/agent-chat/src/ranch-shell/ConnectAgentModal.tsx +++ b/packages/agent-chat/src/ranch-shell/ConnectAgentModal.tsx @@ -9,6 +9,7 @@ import { } from "./connectPrompt"; import type { RanchLocale, RanchMessages } from "./i18n"; import { btnGhost, btnPrimary, colors, inputStyle } from "./styles"; +import { useModalA11y } from "./useModalA11y"; type Props = { locale: RanchLocale; @@ -32,6 +33,8 @@ export function ConnectAgentModal({ const [failed, setFailed] = useState(false); const [copied, setCopied] = useState(null); const qrRef = useRef(null); + const cardRef = useRef(null); + useModalA11y({ open: true, onClose, containerRef: cardRef }); const origin = useMemo(() => { const fromProp = (interfazeBaseUrl || "").replace(/\/+$/, ""); @@ -65,14 +68,6 @@ export function ConnectAgentModal({ // eslint-disable-next-line react-hooks/exhaustive-deps }, []); - useEffect(() => { - const onKey = (e: KeyboardEvent) => { - if (e.key === "Escape") onClose(); - }; - document.addEventListener("keydown", onKey); - return () => document.removeEventListener("keydown", onKey); - }, [onClose]); - const prompt = connectPromptForInvite(locale, code, origin); const pageUrl = joinLandingUrl(origin, code); @@ -104,7 +99,7 @@ export function ConnectAgentModal({ style={overlay} onClick={onClose} > -
e.stopPropagation()}> +
e.stopPropagation()} ref={cardRef} tabIndex={-1}>
{t.connectExisting}