From 7240a09417a3c35b4e71bd5242cafdb6cd7de551 Mon Sep 17 00:00:00 2001 From: shawn Date: Mon, 30 Mar 2026 00:40:33 +0800 Subject: [PATCH 1/3] feat: redesign sidebar as icon-only activity bar with view titles Remove text labels from sidebar tabs, keeping only enlarged icons (22px, bold stroke) with native title tooltips. Add a view title header to each main content area. Remove badge indicators and dead hookCount code. Clean up unused badge CSS and variables. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/App.tsx | 28 ++++++++++++---------- src/styles.css | 64 +++++++++++++++++++++----------------------------- 2 files changed, 42 insertions(+), 50 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 8095c89..bb80f60 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -617,7 +617,6 @@ export default function App({ repoPath }: { repoPath: string }) { const launchers = repo?.mergedConfig.launchers ?? []; const hooksMap: HooksMap = repo?.mergedConfig.hooks ?? {}; - const hookCount = Object.keys(hooksMap).filter((e) => (hooksMap[e as HookEvent]?.length ?? 0) > 0).length; return (
@@ -644,35 +643,32 @@ export default function App({ repoPath }: { repoPath: string }) { @@ -682,6 +678,7 @@ export default function App({ repoPath }: { repoPath: string }) { {view === "repository" && (
+

{t.tabRepository}

{t.heroTitle}

{t.heroDescription}

@@ -726,6 +723,7 @@ export default function App({ repoPath }: { repoPath: string }) { {view === "worktrees" && ( <> +

{t.tabWorktrees}

{!repo ? (
@@ -825,6 +823,7 @@ export default function App({ repoPath }: { repoPath: string }) { {view === "hooks" && (
+

{t.hooks}

{!repo ? (

{t.hooks}

@@ -850,7 +849,9 @@ export default function App({ repoPath }: { repoPath: string }) { )} {view === "settings" && ( - +

{t.settings}

+ setLogs([])} @@ -898,6 +899,7 @@ export default function App({ repoPath }: { repoPath: string }) { }} onRetryDownload={() => setDownloadProgress(INITIAL_PROGRESS)} /> + )}
diff --git a/src/styles.css b/src/styles.css index 1e61404..ab6cd34 100644 --- a/src/styles.css +++ b/src/styles.css @@ -336,29 +336,29 @@ pre { } .sidebar { - width: 54px; + width: 48px; flex-shrink: 0; display: flex; flex-direction: column; - gap: 2px; - padding: 10px 8px; + align-items: center; + gap: 8px; + padding: 10px 6px; border-right: 1px solid var(--border-faint); background: var(--surface-sidebar); } .sidebar-tab { display: flex; - flex-direction: column; align-items: center; - gap: 3px; - padding: 8px 8px 6px; + justify-content: center; + width: 36px; + height: 36px; border-radius: 10px; background: transparent; color: var(--ink-ghost); - font-size: 9px; - font-weight: 500; - white-space: nowrap; border: none; + outline: none; + -webkit-tap-highlight-color: transparent; cursor: pointer; transition: color 140ms ease, @@ -366,12 +366,12 @@ pre { position: relative; } -.sidebar-tab-icon { - flex-shrink: 0; +.sidebar-tab:focus-visible { + outline: none; } -.sidebar-tab-label { - line-height: 1; +.sidebar-tab-icon { + flex-shrink: 0; } .sidebar-tab:hover { @@ -393,29 +393,6 @@ pre { background: transparent; } -.sidebar-tab-badge { - position: absolute; - top: 4px; - right: 4px; - display: inline-flex; - align-items: center; - justify-content: center; - min-width: 14px; - height: 14px; - padding: 0 3px; - border-radius: 999px; - background: var(--teal-bg-strong); - color: var(--teal-muted); - font-size: 0.55rem; - font-weight: 700; - line-height: 1; -} - -.sidebar-tab.active .sidebar-tab-badge { - background: var(--teal-bg-strong); - color: var(--teal-hover); -} - .topbar-path { position: absolute; left: 50%; @@ -465,9 +442,22 @@ pre { overflow-y: auto; } -.main:has(> .worktrees-layout) { +.main:has(.worktrees-layout) { padding: 0; overflow: hidden; + gap: 0; +} + +.main:has(.worktrees-layout) > .view-title { + padding: 14px 14px 8px; +} + +.view-title { + font-size: 14px; + font-weight: 600; + color: var(--ink-primary); + margin: 0; + letter-spacing: -0.01em; } .brand-mark { From 245dcdc743ef41b37bc8b9740c03793456a6b4cf Mon Sep 17 00:00:00 2001 From: shawn Date: Mon, 30 Mar 2026 10:30:24 +0800 Subject: [PATCH 2/3] fix: move view titles to main container for consistent left alignment View titles for Repository and Hooks were inside their respective view containers, inheriting centered layout. Move all four view titles to be direct children of .main for uniform left-aligned positioning. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/App.tsx | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index bb80f60..63bd559 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -677,8 +677,9 @@ export default function App({ repoPath }: { repoPath: string }) { {error &&
{error}
} {view === "repository" && ( + <> +

{t.tabRepository}

-

{t.tabRepository}

{t.heroTitle}

{t.heroDescription}

@@ -719,6 +720,7 @@ export default function App({ repoPath }: { repoPath: string }) {
+ )} {view === "worktrees" && ( @@ -822,8 +824,9 @@ export default function App({ repoPath }: { repoPath: string }) { )} {view === "hooks" && ( + <> +

{t.hooks}

-

{t.hooks}

{!repo ? (

{t.hooks}

@@ -846,6 +849,7 @@ export default function App({ repoPath }: { repoPath: string }) { /> )}
+ )} {view === "settings" && ( From 6f21931839431d76503ea8c480a4a11836d60c88 Mon Sep 17 00:00:00 2001 From: shawn Date: Mon, 30 Mar 2026 11:47:19 +0800 Subject: [PATCH 3/3] fix: place worktrees view title inside grid layout for proper alignment Move the title into a dedicated grid row above the sidebar panel so it visually belongs to the worktree list column rather than floating in the main container. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/App.tsx | 18 ++++++++++++------ src/styles.css | 17 ++++++++++++----- 2 files changed, 24 insertions(+), 11 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 63bd559..695848b 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -725,15 +725,21 @@ export default function App({ repoPath }: { repoPath: string }) { {view === "worktrees" && ( <> -

{t.tabWorktrees}

{!repo ? ( -
-
-

{t.loading}

-
-
+ <> +

{t.tabWorktrees}

+
+
+

{t.loading}

+
+
+ ) : (
+
+

{t.tabWorktrees}

+
+