From 994c8b06b597c2531ca9aa0dd95f5f48068bfe7f Mon Sep 17 00:00:00 2001 From: Yusup Supriyadi Date: Tue, 24 Mar 2026 22:55:19 +0700 Subject: [PATCH] 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 * 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 Co-authored-by: Claude Sonnet 4.6 --- src/app/office/page.tsx | 19 ++++++++- .../agents/components/FleetSidebar.tsx | 2 + .../components/GatewayConnectScreen.tsx | 40 +++++++++---------- src/features/agents/components/HeaderBar.tsx | 11 ++--- src/features/office/components/HQSidebar.tsx | 21 ++++++++-- .../retro-office/systems/visualSystems.tsx | 12 +++--- 6 files changed, 71 insertions(+), 34 deletions(-) diff --git a/src/app/office/page.tsx b/src/app/office/page.tsx index 6da0655..bcb3e78 100644 --- a/src/app/office/page.tsx +++ b/src/app/office/page.tsx @@ -10,12 +10,29 @@ const readDebugFlag = (value: string | undefined): boolean => { return ENABLED_RE.test(normalized); }; +function OfficeLoadingFallback() { + return ( +
+
+
+

+ Loading… +

+
+
+ ); +} + export default function OfficePage() { const showOpenClawConsole = readDebugFlag(process.env.DEBUG); return ( - + }> diff --git a/src/features/agents/components/FleetSidebar.tsx b/src/features/agents/components/FleetSidebar.tsx index ff3f48b..add0de1 100644 --- a/src/features/agents/components/FleetSidebar.tsx +++ b/src/features/agents/components/FleetSidebar.tsx @@ -126,6 +126,8 @@ export const FleetSidebar = ({ }} type="button" data-testid={`fleet-agent-row-${agent.agentId}`} + aria-label={`Select agent: ${agent.name}`} + aria-pressed={selected} className={`group relative ui-card flex w-full items-center gap-3 overflow-hidden border px-3 py-3 text-left transition-colors ${ selected ? "ui-card-selected" diff --git a/src/features/agents/components/GatewayConnectScreen.tsx b/src/features/agents/components/GatewayConnectScreen.tsx index 7a5b94a..0db6d5e 100644 --- a/src/features/agents/components/GatewayConnectScreen.tsx +++ b/src/features/agents/components/GatewayConnectScreen.tsx @@ -85,7 +85,7 @@ export const GatewayConnectScreen = ({ const commandField = (
- + {localGatewayCommand}
{copyStatus === "copied" ? ( -

Copied

+

Copied

) : copyStatus === "failed" ? (

Could not copy command.

) : ( -

- In a source checkout, use {localGatewayCommandPnpm}. +

+ In a source checkout, use {localGatewayCommandPnpm}.

)}
@@ -112,7 +112,7 @@ export const GatewayConnectScreen = ({ const remoteForm = (
-