From f256c18b48f023edeb029b3dba0450d263e07777 Mon Sep 17 00:00:00 2001 From: Henry Chu Date: Sun, 8 Nov 2026 10:51:11 -0500 Subject: [PATCH] Restore non-voice upstream hunks the voice cut dropped Fable review of the ade473018d sync (PR #309) found #30623/#30624 non-voice changes reverted together with the dictation hooks: - ComposerPrimaryActions: the pending-answer button honours isSendDisabled again. - ui/textarea.tsx and useLocalStorage.ts are upstream's (rows sizing, storage.clear() notifies subscribers). - shared keybindingMatching.ts carried and keybindings.ts back to upstream's re-export form minus the composer.dictation binding. The seams doc now lists every file the voice revert touched and the client-side providerCatalogsOnDemand omission (#28487). Co-Authored-By: Claude Opus 5.5 --- .../chat/ComposerPrimaryActions.tsx | 1 + apps/web/src/components/ui/textarea.tsx | 27 ++++- apps/web/src/hooks/useLocalStorage.ts | 2 +- docs/internals/coder-only.md | 28 +++-- packages/shared/src/keybindingMatching.ts | 106 +++++++++++++++++ packages/shared/src/keybindings.ts | 112 ++---------------- scripts/sync-resolve-deleted.mjs | 1 - 7 files changed, 159 insertions(+), 118 deletions(-) create mode 100644 packages/shared/src/keybindingMatching.ts diff --git a/apps/web/src/components/chat/ComposerPrimaryActions.tsx b/apps/web/src/components/chat/ComposerPrimaryActions.tsx index a4a8993a7036e..afbe76a830fa5 100644 --- a/apps/web/src/components/chat/ComposerPrimaryActions.tsx +++ b/apps/web/src/components/chat/ComposerPrimaryActions.tsx @@ -186,6 +186,7 @@ export const ComposerPrimaryActions = memo(function ComposerPrimaryActions({ disabled={ !canOperateThread || isEnvironmentUnavailable || + isSendDisabled || pendingAction.isResponding || (pendingAction.isLastQuestion ? !pendingAction.isComplete : !pendingAction.canAdvance) } diff --git a/apps/web/src/components/ui/textarea.tsx b/apps/web/src/components/ui/textarea.tsx index 681d1f043f31f..116d0d663fb82 100644 --- a/apps/web/src/components/ui/textarea.tsx +++ b/apps/web/src/components/ui/textarea.tsx @@ -9,7 +9,13 @@ type TextareaProps = React.ComponentProps<"textarea"> & { unstyled?: boolean; }; -function Textarea({ className, size = "default", unstyled = false, ...props }: TextareaProps) { +function Textarea({ + className, + size = "default", + unstyled = false, + rows, + ...props +}: TextareaProps) { return ( (