Skip to content

fix(mobile): frequency carousel arrows outside the card + surface chat voice errors - #176

Merged
thomasluizon merged 1 commit into
mainfrom
fix/frequency-carousel-voice-errors
Jun 15, 2026
Merged

fix(mobile): frequency carousel arrows outside the card + surface chat voice errors#176
thomasluizon merged 1 commit into
mainfrom
fix/frequency-carousel-voice-errors

Conversation

@thomasluizon

Copy link
Copy Markdown
Owner

Follow-up to #175 (the UX/QA batch), from on-device testing.

Frequency carousel — arrows were overlapping the card

The prev/next arrows were absolutely positioned over the card, so they sat on top of the card's icon and text. Moved them into a flex row that flanks the card (‹ [card] ›); the card shrinks to fit between them. The disabled end-state now dims the arrow instead of hiding it, so there's no layout shift at the first/last card.

Chat voice — failures were silent

The chat surfaced speech-recognition errors only for the mic-denied case; every other error (no-speech, language-not-supported, service / network errors) was computed in the hook but never rendered. So when the device recognizer started but produced no transcript, it looked like a silent no-op. Now all speech errors render in the notice area, matching web (which already routes them through sendError).

Note: this surfaces why recognition fails on a given device; it doesn't change the recognizer. The underlying "starts but emits no result" behavior is device/OS-level and needs the now-visible error text (or logcat) to pin down the root cause.

Verification

  • type-check + lint: clean (mobile)
  • tests: carousel arrow + chat suites green

🤖 Generated with Claude Code

…h errors

- Frequency carousel: move the prev/next arrows out of the card into a flex
  row that flanks it, so they no longer overlap the card content. The
  disabled end-state dims the arrow instead of hiding it (no layout shift).
- Chat voice: surface every speech-recognition error, not just mic-denied.
  Non-permission errors (no-speech, language-not-supported, service errors)
  were computed in the hook but never rendered, so a failing recognizer looked
  like a silent no-op. Now matches web, which already routes speech errors to
  the notice area.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
@vercel

vercel Bot commented Jun 15, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
orbit-ui-mobile-web Ignored Ignored Jun 15, 2026 12:51am

@claude claude Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Two clean bugfixes. The frequency carousel refactor correctly moves the arrows out of absolute-overlay position and into a flanking flex row, with the onLayout handler migrated to the ScrollView so pageWidth measures the scrollable area (not the full container including arrows) — slides now size to the right width. Dimming arrows at the boundary (0.3 opacity) rather than hiding them is the right call for the flex-row layout: no layout shift, but the affordance stays visible. On the chat side, the generic speechError text block is properly inserted above the micDenied-specific settings button, so all speech error variants (no-speech, network, language-not-supported) now surface to the user — matching web, which already routes speechError → sendError. Removed styles (frequencyArrowHidden, frequencyArrowRow, frequencyCarousel) have zero remaining references.

@sonarqubecloud

Copy link
Copy Markdown

@thomasluizon
thomasluizon merged commit 394385c into main Jun 15, 2026
8 checks passed
@thomasluizon
thomasluizon deleted the fix/frequency-carousel-voice-errors branch June 15, 2026 00:58
thomasluizon added a commit that referenced this pull request Jun 15, 2026
…th mobile) (#177)

The web frequency carousel positioned its prev/next arrows absolutely over the
card (absolute left-1 / right-1), so they overlapped the card's icon and text.
Restructure into a flex row that flanks the card: [arrow][scroll track flex-1][arrow].
Arrows are now flex siblings — they cannot overlap the card. Disabled end-state
dims the arrow (opacity-30) instead of hiding it, matching the mobile carousel
fixed in #176. End state: both platforms use the identical flanking layout.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant