feat(web): larger empty-composer voice/dictate hit target
Maintainers usually reply within 4 days
Nobody has claimed this yet.
Assessment
- Difficulty
- 2/5
- Estimated time
- 1-3 hours
- Newbie friendliness
- 84/100
- Issue type
- Feature
- Clarity
- Clearly specified
- Activity status
- Active
- Tech stack
- react, tailwindcss, typescript
- Domain
- accessibility, frontend
Research direction
Start in web/src/components/AssistantChat/ComposerButtons.tsx at UnifiedButton and trace how it distinguishes an empty composer with voice enabled from send and stop states. Check the existing component tests or nearby composer tests, if present, and add coverage for the empty and non-empty sizes. Done means the empty voice button is visibly larger while the other states keep their compact size and routing.
Written by the indexing model from the issue text.
Description
Summary
The composer primary action button (UnifiedButton) is always h-8 w-8 (32px), including the empty-composer voice / dictate state (waveform icon). On touch and VR (Quest browser) that hit target is too small relative to the unused space beside the empty field. Once there is draft text, the same control becomes Send — that size is fine because Send competes with the text area and toolbar.
Proposal
- Empty composer + voice/dictate afforded: make the primary button a larger hit target by default (e.g.
h-12 w-12/ ~48px, icon scaled up). - Has text / send / scratchlist send / connected stop: keep the current compact
h-8 w-8. - No layout competition when empty: Send is not shown until there is something to send.
Why
Quest and other coarse-pointer clients benefit from a large default dictate affordance. Desktop mouse users are not hurt by a larger empty-state control; the compact Send state preserves density once drafting.
Related
- Closed #1900 (dictate keyboard shortcut) — complementary, not a duplicate
- Implementation likely in
web/src/components/AssistantChat/ComposerButtons.tsx(UnifiedButton)
Acceptance
- Empty composer with voice enabled: primary button visibly larger than today and easy to tap on a phone / Quest viewport.
- Non-empty draft: button returns to compact Send size.
- Existing UnifiedButton routing (scratchlist amber, stop while connected) unchanged except empty-voice size.
- Dominant language
- TypeScript
- Stars
- 5.3k
- Forks
- 626
- Avg merge
- 6d 5h
- Merged PRs (30d)
- 87
Getting set up
- No Dockerfile or Docker Compose file
- No pull request template
- Read the contributing guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
More from tiann/hapi
-
bug(peer): missing localId duplicates ping_peer messages in shared Codex historyMay be free again A pull request for this issue was closed without being merged. Openagent:codex area:cli bug status:needs-triage
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
tiann/hapi#1974 · 2 comments ·
Maintainers usually reply within 4 days
-
bug(cli): hapi doctor inline-media prints a fabricated B:\ helper-script path in packaged installsPossibly taken @techotaku39 claimed this 34 days ago. Openarea:cli bug platform:windows status:needs-triage
Difficulty 2/5 1-3 hours Newbie friendliness 70/100
Maintainers usually reply within 4 days
-
feat(web): absolute-date tooltips on relative time labelsPossibly taken @heavygee claimed this 51 days ago. Openarea:web enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 86/100
Maintainers usually reply within 4 days
-
Support full-width yen sign as an alias for $ skill autocompletePossibly taken @techotaku39 claimed this 69 days ago. Openarea:web enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 72/100
Maintainers usually reply within 4 days
-
web: Enter should insert newline when composer is expandedPossibly taken @techotaku39 claimed this 59 days ago. Openarea:web enhancement
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 4 days
Similar issues
-
Parallel reticle_verify opens per-flow leases without the source lease's ignoreHTTPSErrorsPossibly taken @as992949791 claimed this today. Opengood first issue help wanted
Difficulty 2/5 1-3 hours Newbie friendliness 85/100
reticlehq/reticle#2033 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 78/100
Maintainers usually reply within 1 day
-
area:quality p3-medium ready-for-agent type:docs
Difficulty 2/5 1-3 hours Newbie friendliness 83/100
fderuiter/deruiter.dev#3589 · 1 comment ·
Maintainers usually reply within 1 day
-
Difficulty 2/5 1-3 hours Newbie friendliness 75/100
manfredsteyer/angular-oauth2-oidc#1514 ·
-
Difficulty 2/5 1-3 hours Newbie friendliness 76/100
marmelab/react-admin#11431 ·
Maintainers usually reply within 1 day