From 3533c4332b145ec01a738257fe631135ae414ad1 Mon Sep 17 00:00:00 2001 From: Codeman maintainer Date: Sun, 9 Aug 2026 17:32:24 +0200 Subject: [PATCH] feat(mobile): bigger green working dot on tabs; Tab key replaces /clear in the simple keyboard bar The working dot is the one glance-state a phone needs: busy tabs now get a 9px pulsing dot with a green glow (idle stays 4px). The glow needs !important because the skin block's no-halo rule outranks mobile.css. The simple keyboard accessory bar swaps /clear for Tab (/clear and /compact stay in the extended bar with their double-tap confirm). The tab action now flushes locally-buffered prompt text to the PTY before sending \t, so completion applies to what was just typed instead of an empty composer. Co-Authored-By: Claude Fable 5 --- src/web/public/keyboard-accessory.js | 29 +++++++++++--- src/web/public/mobile.css | 10 +++++ test/mobile/keyboard.test.ts | 13 ++++++- test/path-picker-ui.test.ts | 58 +++++++++++++++++++++++++++- 4 files changed, 102 insertions(+), 8 deletions(-) diff --git a/src/web/public/keyboard-accessory.js b/src/web/public/keyboard-accessory.js index 6972008d..a254b96c 100644 --- a/src/web/public/keyboard-accessory.js +++ b/src/web/public/keyboard-accessory.js @@ -4,10 +4,12 @@ * Defines three exports: * * - KeyboardAccessoryBar (singleton object) — Quick action buttons shown above the virtual - * keyboard on mobile: arrow up/down, /init, /clear, /compact, paste, Esc, and dismiss. + * keyboard on mobile: arrow up/down, /init, Tab, paste, Esc, and dismiss (the extended + * bar adds /clear, /compact, Shift+Tab and more). Tab flushes any locally-buffered + * prompt text to the PTY before sending \t, so completion applies to what was typed. * The paste button opens a dialog that handles both text paste and image attach * (native picker + best-effort image paste, routed through app._uploadAndInsertImages). - * Destructive actions (/clear, /compact) require double-tap confirmation (2s amber state). + * Destructive actions (/clear, /compact, extended bar only) require double-tap confirmation (2s amber state). * Commands are sent as text + Enter separately for Ink compatibility. * Only initializes on touch devices (MobileDetection.isTouchDevice guard). * - PathPicker (singleton object) — Lazy server-side file/folder browser shared @@ -432,7 +434,7 @@ const KeyboardAccessoryBar = { - +