From d770dbe07847a1e8c77e62465a58457352bc20f4 Mon Sep 17 00:00:00 2001 From: shawn Date: Sun, 29 Mar 2026 23:10:52 +0800 Subject: [PATCH 1/2] feat: replace hand-drawn sidebar icons with Lucide icons Introduce lucide-react library and replace inline SVG icons in the sidebar navigation with tree-shakeable Lucide components: Warehouse (repository), FolderTree (worktrees), FishingHook (hooks), and Settings (settings). Co-Authored-By: Claude Opus 4.6 (1M context) --- package.json | 1 + pnpm-lock.yaml | 12 ++++++++++++ src/App.tsx | 20 +++++--------------- 3 files changed, 18 insertions(+), 15 deletions(-) diff --git a/package.json b/package.json index 122df84..5991178 100644 --- a/package.json +++ b/package.json @@ -20,6 +20,7 @@ "@tauri-apps/plugin-opener": "^2.5.3", "@tauri-apps/plugin-process": "^2.3.1", "@tauri-apps/plugin-updater": "^2.10.0", + "lucide-react": "^1.7.0", "react": "^19.0.0", "react-dom": "^19.0.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 1d2a43c..232a87c 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -23,6 +23,9 @@ importers: '@tauri-apps/plugin-updater': specifier: ^2.10.0 version: 2.10.0 + lucide-react: + specifier: ^1.7.0 + version: 1.7.0(react@19.2.4) react: specifier: ^19.0.0 version: 19.2.4 @@ -682,6 +685,11 @@ packages: lru-cache@5.1.1: resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + lucide-react@1.7.0: + resolution: {integrity: sha512-yI7BeItCLZJTXikmK4KNUGCKoGzSvbKlfCvw44bU4fXAL6v3gYS4uHD1jzsLkfwODYwI6Drw5Tu9Z5ulDe0TSg==} + peerDependencies: + react: ^16.5.1 || ^17.0.0 || ^18.0.0 || ^19.0.0 + magic-string@0.30.21: resolution: {integrity: sha512-vd2F4YUyEXKGcLHoq+TEyCjxueSeHnFxyyjNp80yg0XV4vUhnDer/lvvlqM/arB5bXQN5K2/3oinyCRyx8T2CQ==} @@ -1390,6 +1398,10 @@ snapshots: dependencies: yallist: 3.1.1 + lucide-react@1.7.0(react@19.2.4): + dependencies: + react: 19.2.4 + magic-string@0.30.21: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 diff --git a/src/App.tsx b/src/App.tsx index 6484c30..907fa3c 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -4,6 +4,7 @@ import { listen, type UnlistenFn } from "@tauri-apps/api/event"; import { getCurrentWindow } from "@tauri-apps/api/window"; import { openUrl, revealItemInDir } from "@tauri-apps/plugin-opener"; import { useEffect, useRef, useState } from "react"; +import { FishingHook, FolderTree, Settings, Warehouse } from "lucide-react"; import { Input, Textarea, Select } from "./components/FormControls"; import groveMark from "./assets/grove-mark.svg"; import alacrittyIcon from "./assets/launcher-icons/alacritty.svg"; @@ -636,10 +637,7 @@ export default function App({ repoPath }: { repoPath: string }) { className={`sidebar-tab${view === "repository" ? " active" : ""}`} onClick={() => setView("repository")} > - - - - + {t.tabRepository} @@ -658,10 +654,7 @@ export default function App({ repoPath }: { repoPath: string }) { onClick={() => setView("hooks")} disabled={!repo} > - - - - + {t.hooks} {hookCount > 0 && {hookCount}} @@ -669,10 +662,7 @@ export default function App({ repoPath }: { repoPath: string }) { className={`sidebar-tab${view === "settings" ? " active" : ""}`} onClick={() => setView("settings")} > - - - - + {t.settings} {updateInfo && } From b9289f7f2128c387d7dc1ec3930e60864b9bc931 Mon Sep 17 00:00:00 2001 From: shawn Date: Mon, 30 Mar 2026 00:07:05 +0800 Subject: [PATCH 2/2] feat: replace remaining hand-drawn SVGs with Lucide icons Replace all remaining inline SVG icons with Lucide React components: - Copy icon for clipboard buttons - Folder icon in topbar repo path - GitBranch icon in worktree list items - ChevronRight icon for hook group expand/collapse - Switch repository tab icon from Warehouse to HousePlus Also clean up redundant CSS width/height on .hook-group-chevron and extract inline style to .topbar-path-icon class. Co-Authored-By: Claude Opus 4.6 (1M context) --- src/App.tsx | 22 +++++----------------- src/components/HooksModal.tsx | 5 ++--- src/styles.css | 7 +++++-- 3 files changed, 12 insertions(+), 22 deletions(-) diff --git a/src/App.tsx b/src/App.tsx index 907fa3c..78eb114 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -4,7 +4,7 @@ import { listen, type UnlistenFn } from "@tauri-apps/api/event"; import { getCurrentWindow } from "@tauri-apps/api/window"; import { openUrl, revealItemInDir } from "@tauri-apps/plugin-opener"; import { useEffect, useRef, useState } from "react"; -import { FishingHook, FolderTree, Settings, Warehouse } from "lucide-react"; +import { Copy, FishingHook, Folder, FolderTree, GitBranch, HousePlus, Settings } from "lucide-react"; import { Input, Textarea, Select } from "./components/FormControls"; import groveMark from "./assets/grove-mark.svg"; import alacrittyIcon from "./assets/launcher-icons/alacritty.svg"; @@ -117,12 +117,7 @@ const createInitialForm = (repo?: RepoSnapshot): CreateFormState => ({ autoStartLaunchers: [], }); -const copySvg = ( - - - - -); +const copySvg = ; function relativeTime(iso: string, t: Translations): string { const diff = Date.now() - new Date(iso).getTime(); @@ -621,9 +616,7 @@ export default function App({ repoPath }: { repoPath: string }) { {repo && (
- - - + {repo.repoRoot}
)} @@ -637,7 +630,7 @@ export default function App({ repoPath }: { repoPath: string }) { className={`sidebar-tab${view === "repository" ? " active" : ""}`} onClick={() => setView("repository")} > - + {t.tabRepository}