fix(mobile): desktop-only keyboard shortcuts, settings edge-swipe back, safe-area audit #3

Closed
thatumi wants to merge 0 commits from fix/mobile-polish into main
Owner

Real-device feedback round (branch stacked on fix/ios-safearea-2 - rounds
24 and 23 touch the same swipe/safe-area code):

  • Keyboard shortcuts are a desktop-only concept: new shared
    lib/platform.ts isNativePlatform() (Capacitor) gates
    KeyboardShortcutsLayer (renders nothing, no keydown listener mounts, so
    the shortcuts help overlay is unreachable) and drops the Keybinds pane
    from user settings in the iOS/Android shells. Browser builds unchanged.
  • SettingsModalShell (user/room/space settings) now answers the left-edge
    swipe-back: a rightward drag from the left edge moves the full-screen
    mobile sheet 1:1 with the finger; past 15% on release it pops one level
    (sub-pane -> category rail -> close). Same mechanics as the round-23
    panel drags (native non-passive listeners, ref-held offset, transform
    written straight to the dialog, fresh view reads via ref), but
    edge-restricted (40px) because settings panes are dense with
    horizontally draggable content (appearance sliders, search caret).
  • Safe-area round 2 audit: tops verified clean - no modal X or header
    reaches the Dynamic Island. Two bottom misses fixed: the full-screen
    1:1/group call screens kept only p-6 (24px) under their bottom-anchored
    mic/camera/hang-up rows, inside the iPhone home-indicator zone - both
    carry pb-[calc(1.5rem + env(safe-area-inset-bottom))] now; and the
    compose bar's mobile bottom band (1.5rem + inset ~ 58px dead space)
    tightened to 0.5rem + inset below sm (sm+ keeps 1.5rem + inset;
    desktop unchanged, env() = 0).

Gate: npm run build clean; vitest 452 passed + 1 skipped; oxlint 0 errors
(same 53 baseline warnings as the clean tree); npx cap sync ios clean.

Co-Authored-By: GLM noreply@z.ai

Real-device feedback round (branch stacked on fix/ios-safearea-2 - rounds 24 and 23 touch the same swipe/safe-area code): - Keyboard shortcuts are a desktop-only concept: new shared lib/platform.ts isNativePlatform() (Capacitor) gates KeyboardShortcutsLayer (renders nothing, no keydown listener mounts, so the shortcuts help overlay is unreachable) and drops the Keybinds pane from user settings in the iOS/Android shells. Browser builds unchanged. - SettingsModalShell (user/room/space settings) now answers the left-edge swipe-back: a rightward drag from the left edge moves the full-screen mobile sheet 1:1 with the finger; past 15% on release it pops one level (sub-pane -> category rail -> close). Same mechanics as the round-23 panel drags (native non-passive listeners, ref-held offset, transform written straight to the dialog, fresh view reads via ref), but edge-restricted (40px) because settings panes are dense with horizontally draggable content (appearance sliders, search caret). - Safe-area round 2 audit: tops verified clean - no modal X or header reaches the Dynamic Island. Two bottom misses fixed: the full-screen 1:1/group call screens kept only p-6 (24px) under their bottom-anchored mic/camera/hang-up rows, inside the iPhone home-indicator zone - both carry pb-[calc(1.5rem + env(safe-area-inset-bottom))] now; and the compose bar's mobile bottom band (1.5rem + inset ~ 58px dead space) tightened to 0.5rem + inset below sm (sm+ keeps 1.5rem + inset; desktop unchanged, env() = 0). Gate: npm run build clean; vitest 452 passed + 1 skipped; oxlint 0 errors (same 53 baseline warnings as the clean tree); npx cap sync ios clean. Co-Authored-By: GLM <noreply@z.ai>
fix(mobile): desktop-only keyboard shortcuts, settings edge-swipe back, safe-area audit
All checks were successful
CI / build-and-test (pull_request) Successful in 39s
CI / e2e (pull_request) Successful in 3m18s
471d487167
Real-device feedback round (branch stacked on fix/ios-safearea-2 - rounds
24 and 23 touch the same swipe/safe-area code):

- Keyboard shortcuts are a desktop-only concept: new shared
  lib/platform.ts isNativePlatform() (Capacitor) gates
  KeyboardShortcutsLayer (renders nothing, no keydown listener mounts, so
  the shortcuts help overlay is unreachable) and drops the Keybinds pane
  from user settings in the iOS/Android shells. Browser builds unchanged.
- SettingsModalShell (user/room/space settings) now answers the left-edge
  swipe-back: a rightward drag from the left edge moves the full-screen
  mobile sheet 1:1 with the finger; past 15% on release it pops one level
  (sub-pane -> category rail -> close). Same mechanics as the round-23
  panel drags (native non-passive listeners, ref-held offset, transform
  written straight to the dialog, fresh view reads via ref), but
  edge-restricted (40px) because settings panes are dense with
  horizontally draggable content (appearance sliders, search caret).
- Safe-area round 2 audit: tops verified clean - no modal X or header
  reaches the Dynamic Island. Two bottom misses fixed: the full-screen
  1:1/group call screens kept only p-6 (24px) under their bottom-anchored
  mic/camera/hang-up rows, inside the iPhone home-indicator zone - both
  carry pb-[calc(1.5rem + env(safe-area-inset-bottom))] now; and the
  compose bar's mobile bottom band (1.5rem + inset ~ 58px dead space)
  tightened to 0.5rem + inset below sm (sm+ keeps 1.5rem + inset;
  desktop unchanged, env() = 0).

Gate: npm run build clean; vitest 452 passed + 1 skipped; oxlint 0 errors
(same 53 baseline warnings as the clean tree); npx cap sync ios clean.

Co-Authored-By: GLM <noreply@z.ai>
thatumi closed this pull request 2026-09-10 18:18:48 +00:00
All checks were successful
CI / build-and-test (pull_request) Successful in 39s
CI / e2e (pull_request) Successful in 3m18s

Pull request closed

Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
thatumi/JorKonvo!3
No description provided.