Context
Three keyboard-feel features iOS has had since v1.3.0-beta, grouped because they touch the same key-handling code:
1. Key popup preview on every press
Popup balloon above the pressed key on touch-down (all keys, not just accent long-press as today). Reuse/generalize AccentPopup. Haptic stays on touch-down. (Matches prior design feedback: popup preview + mockup dimensions.)
2. Accelerating backspace
Today: basic repeat. Target (iOS): tap = 1 char; hold ≥0.4 s = repeat at ~100 ms; after ~10 deletions accelerate to word-by-word deletion (deleteSurroundingText word boundaries). Light haptic per deletion.
3. Key press sounds
3 sound categories (letter / delete / modifier) like iOS, respecting system rules: use AudioManager.playSoundEffect (FX_KEYPRESS_STANDARD / DELETE / SPACEBAR / RETURN) so it follows the system "touch sounds" volume and silent mode. Settings toggle in CLAVIER section (note: existing Sounds screen covers recording sounds only — keyboard sounds is a separate toggle).
Acceptance criteria
Context
Three keyboard-feel features iOS has had since v1.3.0-beta, grouped because they touch the same key-handling code:
1. Key popup preview on every press
Popup balloon above the pressed key on touch-down (all keys, not just accent long-press as today). Reuse/generalize
AccentPopup. Haptic stays on touch-down. (Matches prior design feedback: popup preview + mockup dimensions.)2. Accelerating backspace
Today: basic repeat. Target (iOS): tap = 1 char; hold ≥0.4 s = repeat at ~100 ms; after ~10 deletions accelerate to word-by-word deletion (
deleteSurroundingTextword boundaries). Light haptic per deletion.3. Key press sounds
3 sound categories (letter / delete / modifier) like iOS, respecting system rules: use
AudioManager.playSoundEffect(FX_KEYPRESS_STANDARD / DELETE / SPACEBAR / RETURN) so it follows the system "touch sounds" volume and silent mode. Settings toggle in CLAVIER section (note: existing Sounds screen covers recording sounds only — keyboard sounds is a separate toggle).Acceptance criteria