From 0d3ef74878384123d70ec9e776e0d0a6e1654ba9 Mon Sep 17 00:00:00 2001 From: Michael Suchacz <203725896+ibetitsmike@users.noreply.github.com> Date: Sun, 30 Nov 2025 14:23:07 +0000 Subject: [PATCH 1/2] =?UTF-8?q?=F0=9F=A4=96=20fix:=20iPadOS=20PWA=20keyboa?= =?UTF-8?q?rd=20accessory=20bar=20layout=20shift?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit On iPadOS 26 with external keyboard in PWA mode, Safari shows an input accessory bar (language switch, up/down arrows, microphone) that can cause layout shifts when focusing the chat input. Changes: - Add viewport-fit=cover to viewport meta for safe area inset support - Use 100dvh (dynamic viewport height) to account for browser chrome and keyboard bars, with 100vh fallback for older browsers - Add CSS env() safe-area-inset handling for notched devices - Add enterKeyHint="send" to textarea for better mobile keyboard UX - Add comprehensive comments explaining the iOS/iPadOS keyboard behavior The dvh unit automatically adjusts when the keyboard accessory bar appears/disappears, preventing the chat input from being pushed around. _Generated with `mux`_ --- index.html | 5 ++-- src/browser/components/VimTextArea.tsx | 2 ++ src/browser/styles/globals.css | 38 ++++++++++++++++++++++++++ 3 files changed, 43 insertions(+), 2 deletions(-) diff --git a/index.html b/index.html index 464c263822..c277884c3e 100644 --- a/index.html +++ b/index.html @@ -4,7 +4,7 @@ @@ -19,7 +19,8 @@ background: var(--color-background, #1e1e1e); } #root { - height: 100vh; + height: 100vh; /* fallback for older browsers */ + height: 100dvh; overflow: hidden; } diff --git a/src/browser/components/VimTextArea.tsx b/src/browser/components/VimTextArea.tsx index 9e44d868d0..5d1546287a 100644 --- a/src/browser/components/VimTextArea.tsx +++ b/src/browser/components/VimTextArea.tsx @@ -219,6 +219,8 @@ export const VimTextArea = React.forwardRef Date: Sun, 30 Nov 2025 14:26:19 +0000 Subject: [PATCH 2/2] fix: add all safe-area insets for notch/edge devices Addresses review feedback - viewport-fit=cover requires handling all four safe-area insets (top, bottom, left, right) to prevent content from being obscured by notches, home indicators, or screen edges. --- src/browser/styles/globals.css | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/browser/styles/globals.css b/src/browser/styles/globals.css index 248add4684..b3dbad4586 100644 --- a/src/browser/styles/globals.css +++ b/src/browser/styles/globals.css @@ -609,10 +609,13 @@ body, } /* Handle safe areas for notched devices and keyboard accessory bars */ -@supports (padding-bottom: env(safe-area-inset-bottom)) { - /* Apply padding to account for iOS safe areas (home indicator, notch) */ +@supports (padding: env(safe-area-inset-top)) { + /* Apply padding to account for iOS safe areas (notch at top, home indicator at bottom) */ #root { + padding-top: env(safe-area-inset-top, 0); padding-bottom: env(safe-area-inset-bottom, 0); + padding-left: env(safe-area-inset-left, 0); + padding-right: env(safe-area-inset-right, 0); } }