Polish and harden the global search composer across breakpoints#829
Merged
Conversation
- Idle send button now reads as a calm neutral control and turns accent
only when a query makes it actionable, replacing the muddy faded-teal
(a 50%-opacity accent fill with a bleeding colour glow).
- Restore hover and open-state feedback on the "+" compose trigger — an
unlayered `background: transparent` was suppressing both the hover
utility and the open-state background.
- Scale the clear ("x") button to 48px at >=640px so it matches the "+"
and send buttons instead of sitting a size smaller in the pill row.
- Unify the send/spinner glyph at 20px (size-icon-lg) with the mode and
search affordances it swaps between.
- Soften the field/send divider into a hairline that fades at both ends.
- Fix the workflow-header mode button's dead responsive variant: size
utilities were duplicated in the shared base, so the smaller workflow
override never applied (Tailwind v4 canonical order let the base win).
- Keep the "+"->"x" open affordance under reduced motion by dropping the
motion-safe gate (the global reduced-motion rule already makes it
instant, so gating removed the state entirely for those users).
- Extend forced-colors coverage to the pill, divider, and chip; drop a
wasted backdrop blur on the opaque phone dock pill; consolidate the two
duplicate max-width:430px blocks; and remove a dark-mode no-op that was
overriding the new hover colours.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CkbwfoKvheoJPp3pYf3PAs
|
This pull request has been ignored for the connected project Preview Branches by Supabase. |
Contributor
📝 WalkthroughWalkthroughThe changes refine search composer sizing, interaction states, divider rendering, dock and forced-colors behavior, and clinical dashboard mode control sizing and open-state affordances. ChangesComposer and mode controls
Estimated code review effort: 3 (Moderate) | ~20 minutes Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
BigSimmo
marked this pull request as ready for review
July 18, 2026 07:26
BigSimmo
enabled auto-merge
July 18, 2026 07:30
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.
Summary
Design/polish pass on the global search composer (the pill + its header) reviewed at desktop, medium (tablet) and small (phone) widths, in light and dark, with a second independent UI review. All changes are scoped to the composer's visual chrome and interactive-control states — no behavioural or data changes.
surface-subtlefill + inset ring + muted glyph) and turns accent the moment a query makes it actionable, replacing the muddy faded-teal (a 50%-opacity accent fill with a bleeding colour glow) on the empty hero.+compose trigger. An unlayeredbackground: transparentwas silently suppressing both the hover utility and the open-state background, so the primary compose action had no tactile response and stayed flat even while its menu was open. Hover +[aria-expanded="true"]are now restored as unlayered rules.x) button rhythm. It now scales 44→48px at ≥640px so it matches the+and send buttons instead of sitting a size smaller in the pill row on tablet/desktop.size-icon-lg) with the mode/search affordances it swaps between (was 16px only for those two states).lg:. Size utilities now live in the per-variant branch so the intended compact size actually applies. The default (main search) header button is unchanged.+→xstate. Dropped themotion-safe:gate — the global reduced-motion rule already makes the transform instant, so gating removed the open-state affordance entirely for those users.color-mix(...transparent)that thinned system-colour contrast next to the already-forced header); dropped a wastedbackdrop-filteron the opaque phone-dock pill; consolidated two duplicatemax-width:430pxblocks; and removed a dark-mode no-op that was overriding the new hover colours.Files:
src/app/globals.css,src/components/clinical-dashboard/master-search-header.tsx,src/components/clinical-dashboard/mode-action-popup.tsx.Verification
npm run verify:pr-local— UI verification not run: sandbox limitation. The environment shipped an incompletenode_modules(test devDependencies absent) and a pre-installed Chromium (1194) mismatched to the pinned Playwright's expected build, so the gate's isolated production build could not run until the dev deps were installed and the browser pinned viaPLAYWRIGHT_CHROMIUM_EXECUTABLE_PATH. The relevant checks were run directly instead (below), and CI runs the full gates.npm run verify:ui— ran the relevant Chromium specs directly:tests/ui-overlap.spec.ts— 12/12 pass (header controls don't overlap at 640/768/1024/1152/1280/1366/1440/1536px; clear button doesn't cover typed text at mobile + desktop; smart-search layout).tests/ui-universal-search.spec.ts— 14/14 pass (command surface / typeahead).tests/ui-accessibility.spec.ts+tests/ui-smoke.spec.ts— 91/92 pass. The one failure (document viewer puts the PDF preview first…) is a pdf.js canvas that does not paint under the mismatched Chromium build; it fails identically on a clean tree (changes stashed), so it is pre-existing/environmental and unrelated to this diff (which does not touch the document viewer).npm run typecheck— exit 0 across the project.npm run lint— exit 0.Also verified visually (live rendered screenshots) at desktop/tablet/phone in light + dark, and via computed-style checks confirming: the idle send is
surface-subtle/opacity:1, the+hover applies, and the forced-colors pill/divider render opaque.Risk and rollout
classNamestrings + one motion utility). No API, data, auth, retrieval, or provider surface is touched.Clinical Governance Preflight
This change is limited to the search composer's visual chrome (CSS + two
classNamestrings + one motion utility) and alters no clinical behaviour; the path-based policy classifies it as clinical-risk only because the edited files live underclinical-dashboard. Every invariant below is preserved by the change:Clinical KB Database(sjrfecxgysukkwxsowpy)Notes
The full
verify:pr-local/verify:uiwrappers were not run verbatim for the sandbox reasons noted under Verification; the constituent UI/lint/type checks were run directly and CI runs the full gates on this PR.🤖 Generated with Claude Code