From 955534022095adb7a610c5fd274ce59ffd59d0ae Mon Sep 17 00:00:00 2001 From: "google-labs-jules[bot]" <161369871+google-labs-jules[bot]@users.noreply.github.com> Date: Fri, 31 Jul 2026 12:35:14 +0000 Subject: [PATCH] feat(ux): add visible focus indicators Improve keyboard accessibility by adding high-contrast focus indicators. They are added to all interactive controls (buttons, links, inputs). Co-authored-by: d-oit <6849456+d-oit@users.noreply.github.com> --- web/app/components/History.tsx | 10 +++++----- web/app/components/MainHeader.tsx | 6 +++--- web/app/components/MetadataBar.tsx | 6 +++--- web/app/components/ProfileCombobox.tsx | 2 +- web/app/components/ResultCard.tsx | 8 ++++---- web/app/components/SearchSection.tsx | 8 ++++---- web/app/components/Sidebar.tsx | 20 ++++++++++---------- 7 files changed, 30 insertions(+), 30 deletions(-) diff --git a/web/app/components/History.tsx b/web/app/components/History.tsx index 265d283c..ca4b7a3d 100644 --- a/web/app/components/History.tsx +++ b/web/app/components/History.tsx @@ -106,7 +106,7 @@ export default function History({ onLoad }: HistoryProps) {
- + Help
diff --git a/web/app/components/MetadataBar.tsx b/web/app/components/MetadataBar.tsx index c218f90b..cfa493b3 100644 --- a/web/app/components/MetadataBar.tsx +++ b/web/app/components/MetadataBar.tsx @@ -53,7 +53,7 @@ export function MetadataBar({
diff --git a/web/app/components/ProfileCombobox.tsx b/web/app/components/ProfileCombobox.tsx index fa0e4ee9..2f2c92cf 100644 --- a/web/app/components/ProfileCombobox.tsx +++ b/web/app/components/ProfileCombobox.tsx @@ -118,7 +118,7 @@ export default function ProfileCombobox({ id: providedId, value, onChange, optio ref={triggerRef} onClick={() => (open ? handleClose() : handleOpen())} onKeyDown={handleKeyDown} - className="w-full bg-[#141414] border-2 border-border-muted px-3 py-2 text-left flex items-center justify-between text-[12px] min-h-[44px] hover:border-border-strong focus:border-accent" + className="w-full bg-[#141414] border-2 border-border-muted px-3 py-2 text-left flex items-center justify-between text-[12px] min-h-[44px] hover:border-border-strong focus:border-accent focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2" aria-haspopup="listbox" aria-expanded={open} aria-controls={open ? listboxId : undefined} diff --git a/web/app/components/ResultCard.tsx b/web/app/components/ResultCard.tsx index a32403f3..8820cceb 100644 --- a/web/app/components/ResultCard.tsx +++ b/web/app/components/ResultCard.tsx @@ -20,7 +20,7 @@ const ResultHeader = ({ id, title, url, normalizedUrl }: { id: string; title: st href={url} target="_blank" rel="noreferrer" - className="text-accent text-[15px] hover:underline" + className="text-accent text-[15px] hover:underline focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2" > {title} @@ -76,7 +76,7 @@ export default function ResultCard({ result, onCopy, onHelpfulToggle, helpful }:
@@ -167,7 +167,7 @@ export default function Sidebar({ const tooltipId = `provider-hint-${provider.id}`; const showHint = needsKey || (provider.id === "duckduckgo" && mistralActive); - let buttonClasses = "px-2 py-1 text-[10px] border-2 transition-colors min-h-[36px] "; + let buttonClasses = "px-2 py-1 text-[10px] border-2 transition-colors min-h-[36px] focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2 "; if (isActive) { if (isManual) { buttonClasses += "bg-accent text-background border-accent font-bold"; @@ -227,7 +227,7 @@ export default function Sidebar({ onClick={() => setApiKeysOpen(!apiKeysOpen)} aria-expanded={apiKeysOpen} aria-controls="api-keys-panel" - className="text-[11px] text-text-muted hover:text-foreground text-left min-h-[44px] py-2" + className="text-[11px] text-text-muted hover:text-foreground text-left min-h-[44px] py-2 focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2" > API Keys @@ -239,7 +239,7 @@ export default function Sidebar({ type="checkbox" checked={skipCache} onChange={(e) => setSkipCache(e.target.checked)} - className="w-5 h-5 bg-[#141414] border-2 border-border-muted accent-accent" + className="w-5 h-5 bg-[#141414] border-2 border-border-muted accent-accent focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2" /> Skip cache @@ -249,7 +249,7 @@ export default function Sidebar({ type="checkbox" checked={deepResearch} onChange={(e) => setDeepResearch(e.target.checked)} - className="w-5 h-5 bg-[#141414] border-2 border-border-muted accent-accent" + className="w-5 h-5 bg-[#141414] border-2 border-border-muted accent-accent focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2" /> Deep research @@ -267,7 +267,7 @@ export default function Sidebar({ value={value} onChange={(e) => handleKeyChange(key, e.target.value)} placeholder={hasServer && !value ? "Using server key" : "sk-..."} - className="bg-[#141414] border-2 border-border-muted px-2 py-2 text-[12px] text-foreground placeholder:text-text-dim focus:border-accent min-h-[44px]" + className="bg-[#141414] border-2 border-border-muted px-2 py-2 text-[12px] text-foreground placeholder:text-text-dim focus:border-accent focus-visible:outline-2 focus-visible:outline-accent focus-visible:outline-offset-2 min-h-[44px]" /> );