feat(ui): improve visual polish, responsiveness, and accessibility (#58)

* feat(ui): improve visual polish, responsiveness, and UX consistency

- GatewayConnectScreen: replace hardcoded text-white* with semantic
  foreground/muted-foreground tokens so the connect form is readable
  in both light and dark modes
- HeaderBar: show gateway status chip for "connected" state in addition
  to "connecting", giving users clear visual feedback once connected
- FleetSidebar: add aria-label and aria-pressed to agent row buttons
  for screen-reader accessibility
- HQSidebar: add role=tablist/tab/tabpanel, aria-selected, aria-controls,
  and aria-labelledby to the headquarters panel tabs
- OfficePage: replace Suspense fallback={null} with a themed spinner
  so users see feedback instead of a blank screen during initial load

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>

* fix(office): widen agent nameplate to prevent name truncation

- Expand background plane from 0.68 to 1.1 width
- Increase maxWidth from 0.56 to 1.0
- Slightly reduce fontSize 0.1 to 0.09 for better fit
- Add whiteSpace nowrap to prevent wrapping
- Truncate names >14 chars with ellipsis for very long agent names

---------

Co-authored-by: Claw3D UI Bot <ui-improvements@claw3d.local>
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
Yusup Supriyadi
2026-03-24 22:55:19 +07:00
committed by GitHub
parent c9789c2148
commit 994c8b06b5
6 changed files with 71 additions and 34 deletions
+18 -1
View File
@@ -10,12 +10,29 @@ const readDebugFlag = (value: string | undefined): boolean => {
return ENABLED_RE.test(normalized);
};
function OfficeLoadingFallback() {
return (
<div
className="flex h-full w-full items-center justify-center bg-background"
aria-label="Loading office"
role="status"
>
<div className="flex flex-col items-center gap-3">
<div className="h-8 w-8 animate-spin rounded-full border-2 border-border border-t-primary" />
<p className="font-mono text-[11px] tracking-[0.08em] text-muted-foreground">
Loading
</p>
</div>
</div>
);
}
export default function OfficePage() {
const showOpenClawConsole = readDebugFlag(process.env.DEBUG);
return (
<AgentStoreProvider>
<Suspense fallback={null}>
<Suspense fallback={<OfficeLoadingFallback />}>
<OfficeScreen showOpenClawConsole={showOpenClawConsole} />
</Suspense>
</AgentStoreProvider>