diff --git a/AgentCompany-New/src/renderer/src/overlays.css b/AgentCompany-New/src/renderer/src/overlays.css index ba8df62f..8e4c78d3 100644 --- a/AgentCompany-New/src/renderer/src/overlays.css +++ b/AgentCompany-New/src/renderer/src/overlays.css @@ -180,9 +180,11 @@ @media (max-width: 980px) { .sidebar { width: 64px; } .sidebar .brand-name, - .sidebar .nav-item span:not(.nav-badge), + .sidebar .nav-item span:not(.nav-badge):not(.icon-box), .sidebar-foot-name, .sidebar .search-bar > span:not(.search-kbd) { display: none; } + .sidebar .nav-item { justify-content: center; } + .sidebar .nav-badge { display: none; } .sidebar .search-bar { justify-content: center; padding: var(--sp-2); } .sidebar .search-kbd { display: none; } .content { padding: var(--sp-5) var(--sp-4) var(--sp-8); } diff --git a/AgentCompany-New/src/renderer/src/shared/Icon.tsx b/AgentCompany-New/src/renderer/src/shared/Icon.tsx index a57287d4..f8eb56e8 100644 --- a/AgentCompany-New/src/renderer/src/shared/Icon.tsx +++ b/AgentCompany-New/src/renderer/src/shared/Icon.tsx @@ -41,6 +41,8 @@ const PATHS: Record = { refresh: <>, pause: <>, shield: , + calendar: <>, + target: <>, }; export type IconName = keyof typeof PATHS | (string & {}); diff --git a/AgentCompany-New/src/renderer/src/shared/Shell.tsx b/AgentCompany-New/src/renderer/src/shared/Shell.tsx index e221b57c..0d717105 100644 --- a/AgentCompany-New/src/renderer/src/shared/Shell.tsx +++ b/AgentCompany-New/src/renderer/src/shared/Shell.tsx @@ -32,22 +32,29 @@ interface NavSpec { * internal scroll regions, so the content area must not scroll as one block. */ const FLUSH_ROUTES = new Set(["chat", "settings", "files", "social", "runs"]); +/** The daily-driver surfaces — the core operating loop. */ const primaryNav: NavSpec[] = [ { id: "home", label: "Home", icon: "home" }, - { id: "inbox", label: "Inbox", icon: "approve" }, { id: "work", label: "Work", icon: "work" }, - { id: "approvals", label: "Approvals", icon: "approve" }, { id: "team", label: "Team", icon: "team" }, { id: "chat", label: "Messages", icon: "chat" }, - { id: "files", label: "Files", icon: "docs" }, + { id: "runs", label: "Runs", icon: "send" }, + { id: "files", label: "Files", icon: "folder" }, + { id: "approvals", label: "Approvals", icon: "approve" }, +]; + +/** Less-frequent surfaces, demoted under a divider so the primary set leads. */ +const secondaryNav: NavSpec[] = [ + { id: "inbox", label: "Inbox", icon: "inbox" }, { id: "docs", label: "Documents", icon: "file" }, { id: "knowledge", label: "Knowledge", icon: "sparkle" }, - { id: "runs", label: "Runs", icon: "send" }, - { id: "meetings", label: "Meetings", icon: "team" }, - { id: "sprints", label: "Sprints", icon: "work" }, + { id: "meetings", label: "Meetings", icon: "calendar" }, + { id: "sprints", label: "Sprints", icon: "target" }, { id: "social", label: "Social", icon: "social" }, ]; +const allNav: NavSpec[] = [...primaryNav, ...secondaryNav]; + export function Shell({ snapshot, route, @@ -104,17 +111,13 @@ export function Shell({ +
+
@@ -122,10 +125,11 @@ export function Shell({ @@ -167,8 +171,34 @@ export function Shell({ } +function NavButton({ + item, + active, + badge, + onSelect, +}: { + item: NavSpec; + active: boolean; + badge: number | undefined; + onSelect: (route: RouteId) => void; +}) { + return ( + + ); +} + function labelFor(route: RouteId): string { - const spec = primaryNav.find((item) => item.id === route); + const spec = allNav.find((item) => item.id === route); if (spec) return spec.label; if (route === "settings") return "Settings"; throw new Error(`Unknown route: ${route}`); diff --git a/AgentCompany-New/src/renderer/src/styles.css b/AgentCompany-New/src/renderer/src/styles.css index 964a29df..d4613308 100644 --- a/AgentCompany-New/src/renderer/src/styles.css +++ b/AgentCompany-New/src/renderer/src/styles.css @@ -195,14 +195,17 @@ a { color: inherit; } .nav-item:active { transform: scale(0.985); } .nav-item.active { background: var(--panel-3); color: var(--text-1); font-weight: 560; } .nav-item.active svg { color: var(--text-1); } -.nav-item svg { color: var(--text-3); flex-shrink: 0; transition: color var(--motion-fast) var(--ease-out); } -.nav-item span:not(.nav-badge) { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } +.nav-item svg { color: var(--text-3); transition: color var(--motion-fast) var(--ease-out); } +.nav-item .icon-box { color: var(--text-3); } +.nav-item.active .icon-box { color: var(--text-1); } +.nav-item span:not(.nav-badge):not(.icon-box) { flex: 1; overflow: hidden; text-overflow: ellipsis; white-space: nowrap; } .nav-badge { margin-left: auto; font-size: var(--fs-caption); color: var(--text-3); font-variant-numeric: tabular-nums; } +.nav-divider { height: 1px; background: var(--border-soft); margin: var(--sp-2); } .org-menu { position: absolute; left: 0;