| v3.1 state | Keypad key | Tooltip when dimmed |
|---|---|---|
| S1 Incoming (desktop and mobile web; native mobile hides the card) | dimmed | Keypad available when connected |
| S2 Calling · reconnecting · ending | dimmed | Keypad available when connected |
| Probe window (≤ 3 s after connect) | dimmed | Checking keypad availability… |
| S3 legacy/v1 and the 409 card (Hold and Transfer dimmed) | live (SDK DTMF works) | — |
| S4 v2 · S5 muted · S6 speaker · S13 returned | live when canUseKeypad | — |
| S7 On hold (keypad closed) | dimmed | Resume the call to use the keypad |
| S8/S9 Ask first · S10 transferring · S12 colleague's side · 3+ people · v2 unsafe | dimmed | Keypad unavailable for this call right now |
| Digit state | Meaning | Look |
|---|---|---|
| Sent .is-sent | v1: the SDK accepted it · v2: own sequence completed and available | gray-00 |
| Sending .is-sending | In flight, shown after 150 ms | gray-00 + a 2px gray-00 underline at y 36–38, glyph width − 2, pulsing opacity 1 → .4 → 1 over 1 s (steady with reduced motion) |
| Queued .is-queued | Waiting more than 150 ms | gray-00 at opacity .4 (opacity, because dark gray-02/03/04 are all near-white) |
| Not sent .is-notsent | Cleared by a failure, hold or reconnect | opacity .4 + a 1px gray-00 strike at y ≈ 25 |
| Unconfirmed .is-unconfirmed | v2 unknown: Twilio was called, delivery not confirmed | gray-00 + a 2px dotted gray-02 underline (2 on / 2 off), no pulse |
| # | Line B · first match wins | Copy |
|---|---|---|
| 1 | On hold (the keypad stays open and dimmed) | “On hold · {n} digits not sent” if digits were dropped, else “Resume the call to use the keypad” |
| 2 | Reconnecting | “Keypad available when connected” |
| 3 | Stopped (failed or canceled), until the next press or close | “Stopped · {n} not sent” in --t-tiny-bold gray-00 |
| 4 | Unconfirmed, same lifetime | “Last digit may not have played” in --t-tiny-bold gray-00 |
| 5 | Probe re-running / v2 briefly unsafe ≥ 600 ms | “Checking the keypad…” / “Keypad paused · checking the call” |
| 6 | Hint (2.5 s) | “Only 0–9, * and # are sent” · “Enter isn't sent · press # if asked” · “Sent digits can't be taken back” · “Pasted {n} digits” · “Paste has letters · nothing sent” · “Paste up to 32 digits” · “32 waiting · let these send first” · “Not sent · try again” |
| 7 | Desktop, not armed, with digits | “Click to keep typing” |
| 8 | Sending (v2 only; in flight ≥ 400 ms, or digits queued) | “Sending…” / “Sending · {n} waiting” |
| 9 | Otherwise | “{Name} · {mm:ss}” |
| # | State | Desktop | Mobile |
|---|---|---|---|
| KP0 | Closed, available | Key neutral | Same |
| KP1 | Unavailable | Key dimmed; tooltip gives the reason | Same (long-press) |
| KP2 | Open, empty, armed | Caret + “Type digits, * or #”; pad only if opened by pointer | Caret + “Tap digits below”; dock up |
| KP3 | Open, empty, not armed | “Click to type digits” | n/a |
| KP4 | Typing, v1 | Digits show as sent (queued only faster than 4 a second) | Same |
| KP5 | Typing, v2 | Sent / sending / queued; “Sending · 3 waiting”; Hold and Transfer dimmed | Same |
| KP6 | Not armed, with digits | No caret; “Click to keep typing”; sending continues | n/a |
| KP7 | Checking (probe re-runs) | “Checking the keypad…”; pad at .4; presses refused | Dock at .4 |
| KP8 | Briefly unsafe, v2 | Under 600 ms: no dimming, presses refused with “Not sent · try again”. 600 ms or more: line A and pad at .4 (line B keeps its reason at full strength), “Keypad paused · checking the call” | Same |
| KP9 | Stopped (failure) | Queued → Not sent; “Stopped · {n} not sent”; no toast while open | Same |
| KP10 | Unconfirmed | That digit Unconfirmed, the rest Not sent; “Last digit may not have played” | Same |
| KP11 | On hold while open | Dims in place; queue cleared as Not sent; line B per #1 | Dock keys at .4 |
| KP12 | Overflow | Right-anchored with the left fade | Same |
| KP13 | Queue cap (32 pending) | Further presses refused; hint | Same |
| KP14 | Hint | Line B for 2.5 s | Same |
| KP15 | Closed, v2 digits pending | Line 2 “Sending digits · {n} left”; Hold and Transfer dimmed until drained | Same |
| KP16 | Idle 2 min | The echo clears (the keypad stays open) | Same |
| Input (armed) | Result |
|---|---|
| A key-down whose character is 0–9, * or # (numpad too; Shift+3 and Shift+8 on any layout) | Queued and sent; the matching pad key lights |
| Key repeat | Ignored: one physical press is one digit |
| Backspace | Removes the last queued (unsent) digit. Nothing queued: hint “Sent digits can't be taken back” |
| Esc | Digits queued: clears them (Not sent, “Stopped · {n} not sent”). Nothing queued: closes the keypad |
| Enter (entry line focused) | Swallowed, with the Enter hint. On a focused card key it activates that key |
| Space | Swallowed on the entry line; activates a focused card key |
| Letters and other characters | Swallowed, with the letters hint (at most once per 2.5 s) |
| Cmd/Ctrl+V | Paste |
| Other Cmd/Ctrl/Alt chords | Passed through to the app |
| Tab | entry line → Keypad key → Mute → Hold → Transfer → End; capture stays live inside the card |