v1.22.1 — Mobile and Coach polish#370
Merged
Merged
Conversation
The Theme sub-trigger inherited the shared sub-trigger padding (py-1.5, no min-height) while every sibling row carries min-h-11 py-2, so the Theme row sat a few pixels shorter and the menu read as unevenly spaced. Match the item height on this instance only, leaving other dropdowns' sub-triggers untouched.
The long single-word labels (de "Benachrichtigungen") clipped their last character at the tile edge on a 320 px phone. Trim the grid gutters and the tile padding/gap to hand each label more horizontal room, and cap the bottom sheet at max-w-md, so the label wraps cleanly onto a second line instead of running off the tile. Tile height stays uniform.
The Sleep view led with an average-per-night headline card that repeated the same figure and label already shown in the average-sleep tile within the sleep-rhythm grid row below it. Remove the leading card and let the tile carry the readout; the stage-distribution bar and duration trend chart stay in place.
Fixed-pixel chart bands ate roughly half the screen when a small phone was rotated to landscape. Swap the brittle heights for viewport-relative clamps so the chart envelope holds its previous size on desktop and portrait but shrinks toward a floor on short landscape viewports. Covers the overview trends-row slot and the mood distribution, weekday, and time-of-day charts (with matching skeleton heights). Chart series and styling are untouched; only the container heights flex.
Surface a short, factual subtitle under every catalog-linked lab marker on the Labs page, mirroring the descriptive line the Insights overview carries under its metric headings. The text states what each biomarker measures, sourced from the seed catalog via a new labs.catalog.desc.<slug> i18n map in all six locales. A reading's analyte resolves back to its catalog slug by a case- and whitespace-insensitive match against the localised catalog name; free-text markers with no catalog match carry no subtitle rather than a fabricated one. Rendered in both the compact list view and the card/tile view.
Shorten the composer placeholder across all locales to a short, inviting one-liner and clip the placeholder pseudo-element so a longer hint can never wrap to a second line inside the single-row composer on a narrow phone. The textarea value still wraps and auto-grows for real typing.
The history search rendered as a thin, short strip that read as an afterthought. Give it the app's standard full-width input height and padding so it matches the standalone conversations page and looks intentional.
Read-aloud only set the utterance language and let the browser fall back to its default voice, which on most systems is a legacy compact engine that reads robotically. Enumerate the installed voices, rank them for the active locale (prefer enhanced/premium, Siri, Microsoft Natural/Online, Google, and an exact lang-region match; penalise known compact engines), and assign the winner with a natural rate and pitch. The voice list loads asynchronously, so subscribe to voiceschanged and re-rank lazily; when no voice beats the legacy default, fall back gracefully to prior behaviour.
…nerate, read-aloud) Surface an icon-only action row below each message, sharing the row with the hover timestamp: muted until the bubble is hovered or focused on pointer devices, and always visible on touch where there is no hover. User turns get Copy; assistant turns get Copy, Read-aloud, a thumbs-up / thumbs-down feedback pair (wired to the existing per-message feedback endpoint), and Try-again. Copy strips inline chart tokens from assistant prose so they are never pasted. Try-again resubmits the user turn that produced the reply as a fresh turn, leaving the composer untouched.
Hide the copy button on insecure-context (plain-HTTP) self-hosts where the Clipboard API is undefined: a new SSR-safe useClipboardSupported() detector mirrors the speech-synthesis hook so the button is absent rather than error-toasting on tap. Stop the per-message action row compressing below the 44px touch floor on narrow phones: the icon buttons keep their tap size (shrink-0 + min-w-11) and the row wraps instead of shrinking the up-to-six targets to ~30px.
Standardise the labs marker subtitle to text-xs across both the compact list and the card grid, and build the localized name->slug lookup map once per locale instead of re-scanning the catalog seeds per group on every render. Add relative to the mobile section strips in the settings and admin shells so the active chip's offsetLeft is measured from the strip, giving an exact horizontal scroll target. Drop the orphaned insights.sleep.headlineCaption and headlineCaptionSuffix keys from all six locales; nothing references them after the sleep headline removal.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Reliability and quality-of-life patch focused on the mobile interface and the Coach.
Added
Changed
Fixed
No schema changes, no migrations. Full gate green (typecheck, lint, OpenAPI, 11799 tests, build). Two review passes (code-correctness + design/a11y); all Medium and Low findings reconciled.