From 6a70d51ea711983687c95597472c9ee3de66dc4f Mon Sep 17 00:00:00 2001 From: Bohdan Triapitsyn Date: Fri, 24 Apr 2026 09:33:02 +0300 Subject: [PATCH] refactor: drop mobile keyboard/viewport hacks, rely on browser MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remove body position:fixed lock, visualViewport listener in MainLayout (keyboard-inset heuristics, scroll-to-zero lock, focusin/focusout RAF), [data-keyboard-avoid-active] translateY rule, and related CSS vars (--oc-keyboard-inset, --oc-keyboard-avoid-offset, --oc-keyboard-home-indicator, --oc-visual-viewport-offset-top). Strip data-keyboard-avoid* attrs and keyboardAvoid props from Dialog/ScrollableOverlay and consumers. Drop isKeyboardOpen from useUIStore. With body unlocked and the layout plain flex-col (h-dvh), the browser shrinks the viewport on keyboard open naturally — composer sits above the keyboard, header stops lagging, input no longer jitters. FilesView.nudgeEditorSelectionAboveKeyboard now derives the occluded bottom locally from visualViewport + documentElement.clientHeight. --- .../src/components/auth/SessionAuthGate.tsx | 2 +- .../ui/src/components/chat/ChatContainer.tsx | 139 +++++----- packages/ui/src/components/chat/ChatInput.tsx | 77 ++---- .../ui/src/components/layout/MainLayout.tsx | 253 ------------------ .../components/multirun/MultiRunLauncher.tsx | 2 +- .../components/sections/agents/AgentsPage.tsx | 2 +- .../sections/commands/CommandsPage.tsx | 2 +- .../sections/git-identities/GitPage.tsx | 2 +- .../src/components/sections/mcp/McpPage.tsx | 4 +- .../sections/openchamber/OpenChamberPage.tsx | 2 - .../sections/projects/ProjectsPage.tsx | 4 +- .../sections/providers/ProvidersPage.tsx | 4 +- .../components/sections/skills/SkillsPage.tsx | 4 +- .../skills/catalog/AddCatalogDialog.tsx | 2 +- .../skills/catalog/InstallSkillDialog.tsx | 2 +- .../skills/catalog/SkillsCatalogPage.tsx | 2 +- .../components/sections/usage/UsagePage.tsx | 2 +- .../components/session/SessionFolderItem.tsx | 2 +- .../session/sidebar/SessionNodeItem.tsx | 37 ++- .../components/terminal/TerminalViewport.tsx | 4 - .../src/components/ui/MobileOverlayPanel.tsx | 1 - .../src/components/ui/ScrollableOverlay.tsx | 3 - packages/ui/src/components/ui/dialog.tsx | 3 - .../ui/src/components/views/FilesView.tsx | 8 +- packages/ui/src/components/views/GitView.tsx | 2 +- .../ui/src/components/views/SettingsView.tsx | 4 +- .../ui/src/components/views/TerminalView.tsx | 4 - .../views/agent-manager/AgentGroupDetail.tsx | 2 +- .../agent-manager/AgentManagerSidebar.tsx | 2 +- .../components/views/git/CommitSection.tsx | 2 +- packages/ui/src/index.css | 4 - packages/ui/src/stores/useUIStore.ts | 7 - packages/ui/src/styles/design-system.css | 4 - packages/ui/src/styles/mobile.css | 36 --- 34 files changed, 134 insertions(+), 496 deletions(-) diff --git a/packages/ui/src/components/auth/SessionAuthGate.tsx b/packages/ui/src/components/auth/SessionAuthGate.tsx index 9de99558..4bd16ec8 100644 --- a/packages/ui/src/components/auth/SessionAuthGate.tsx +++ b/packages/ui/src/components/auth/SessionAuthGate.tsx @@ -484,7 +484,7 @@ export const SessionAuthGate: React.FC = ({ children }) => {!isTunnelLocked && ( -
+ {canUsePasskey && (