From 6e89ba36a579b07a128376c6883dbd0e85c411d3 Mon Sep 17 00:00:00 2001 From: Yuhan Lei Date: Fri, 1 May 2026 16:23:05 +0800 Subject: [PATCH 1/3] chore(ui): remove 26 unused upstream chrome icon registry entries Drop align-right, archive, arrow-down-to-line, chevron-double-right, chevron-left, collapse, discord, edit-small-2, expand, eye, file-tree, file-tree-active, fork, github, layout-bottom{,-full,-partial}, layout-left{,-full,-partial}, layout-right{,-full,-partial}, share, shield, speech-bubble. None of these keys are referenced anywhere in the app; they were inherited from upstream OpenCode and partially redrawn during the brand v2 pass (2abc3697d) but never wired up. Sync icon.stories.tsx names array to match. icon-registry-rename guard unaffected (only checks agent rename from #128). Refs #356. --- packages/ui/src/components/icon.stories.tsx | 24 ------------------- packages/ui/src/components/icon.tsx | 26 --------------------- 2 files changed, 50 deletions(-) diff --git a/packages/ui/src/components/icon.stories.tsx b/packages/ui/src/components/icon.stories.tsx index 49bc53753..f5ae8b2d4 100644 --- a/packages/ui/src/components/icon.stories.tsx +++ b/packages/ui/src/components/icon.stories.tsx @@ -27,37 +27,27 @@ Use with \`Button\`, \`IconButton\`, and menu items. ` const names = [ - "align-right", "arrow-up", "arrow-left", "arrow-right", - "archive", "bubble-5", "prompt", "brain", "bullet-list", "check-small", "chevron-down", - "chevron-left", "chevron-right", "chevron-grabber-vertical", - "chevron-double-right", "circle-x", "close", "close-small", "checklist", "console", - "expand", - "collapse", "code", "code-lines", "circle-ban-sign", - "edit-small-2", - "eye", "enter", "folder", - "file-tree", - "file-tree-active", "magnifying-glass", "plus-small", "plus", @@ -69,28 +59,15 @@ const names = [ "window-cursor", "agent", "stop", - "layout-left", - "layout-left-partial", - "layout-left-full", - "layout-right", - "layout-right-partial", - "layout-right-full", "square-arrow-top-right", "open-file", - "speech-bubble", "comment", "folder-add-left", - "github", - "discord", - "layout-bottom", - "layout-bottom-partial", - "layout-bottom-full", "dot-grid", "circle-check", "copy", "check", "photo", - "share", "download", "menu", "server", @@ -104,7 +81,6 @@ const names = [ "sliders", "keyboard", "selector", - "arrow-down-to-line", "warning", "link", "providers", diff --git a/packages/ui/src/components/icon.tsx b/packages/ui/src/components/icon.tsx index 1c0c69ef7..bdd4eafcf 100644 --- a/packages/ui/src/components/icon.tsx +++ b/packages/ui/src/components/icon.tsx @@ -1,22 +1,17 @@ import { splitProps, type ComponentProps } from "solid-js" export const icons = { - "align-right": ``, "arrow-up": ``, "arrow-left": ``, "arrow-right": ``, - archive: ``, "bubble-5": ``, prompt: ``, brain: ``, - fork: ``, "bullet-list": ``, "check-small": ``, "chevron-down": ``, - "chevron-left": ``, "chevron-right": ``, "chevron-grabber-vertical": ``, - "chevron-double-right": ``, "circle-x": ``, close: ``, "close-small": ``, @@ -26,17 +21,11 @@ export const icons = { "terminal-active": ``, review: ``, "review-active": ``, - expand: ``, - collapse: ``, code: ``, "code-lines": ``, "circle-ban-sign": ``, - "edit-small-2": ``, - eye: ``, enter: ``, folder: ``, - "file-tree": ``, - "file-tree-active": ``, "magnifying-glass": ``, "plus-small": ``, plus: ``, @@ -54,29 +43,15 @@ export const icons = { "status-active": ``, sidebar: ``, "sidebar-active": ``, - "layout-left": ``, - "layout-left-partial": ``, - "layout-left-full": ``, - "layout-right": ``, - "layout-right-partial": ``, - "layout-right-full": ``, "square-arrow-top-right": ``, "open-file": ``, - "speech-bubble": ``, comment: ``, "folder-add-left": ``, - github: ``, - discord: ``, - "layout-bottom": ``, - "layout-bottom-partial": ``, - "layout-bottom-full": ``, "dot-grid": ``, "circle-check": ``, copy: ``, check: ``, photo: ``, - share: ``, - shield: ``, download: ``, menu: ``, server: ``, @@ -90,7 +65,6 @@ export const icons = { sliders: ``, keyboard: ``, selector: ``, - "arrow-down-to-line": ``, warning: ``, reset: ``, link: ``, From 5a190db6d3c8e44ae2b7bf79ce1a35a66e57d859 Mon Sep 17 00:00:00 2001 From: Yuhan Lei Date: Fri, 1 May 2026 16:57:18 +0800 Subject: [PATCH 2/3] chore(ui): redraw new-session chrome icon pair from v3 imagegen MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Replace the v2 file+pencil drawing for new-session / new-session-active with chat-bubble+plus from the v3 imagegen sheet (imagegen-chrome-icons-newsession.png column 1). The chat-bubble form matches Codex / ChatGPT "new chat" convention, and the active variant keeps the bubble identical with a small filled dot in the corner — same "selected" pattern we use for terminal-active / sidebar-active. Tracing pipeline: potrace via icon-trace.mjs with THICK=2 to dilate the strokes so the rendered weight matches the rest of the v2 brand family (brain, agent, prompt). potrace output uses fill-rule="evenodd" so hollow regions render correctly across SVG renderers. Refs #356. --- packages/ui/src/components/icon.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/ui/src/components/icon.tsx b/packages/ui/src/components/icon.tsx index bdd4eafcf..3a22e95cf 100644 --- a/packages/ui/src/components/icon.tsx +++ b/packages/ui/src/components/icon.tsx @@ -29,8 +29,8 @@ export const icons = { "magnifying-glass": ``, "plus-small": ``, plus: ``, - "new-session": ``, - "new-session-active": ``, + "new-session": ``, + "new-session-active": ``, "pencil-line": ``, mcp: ``, glasses: ``, From 8a764a7cd29a31dfbc89f42c2e569b87a1b18c73 Mon Sep 17 00:00:00 2001 From: Yuhan Lei Date: Fri, 1 May 2026 17:28:55 +0800 Subject: [PATCH 3/3] feat(ui): add worktree chrome icon for #278 Add a `worktree` key to the chrome icon registry, traced from the v3 imagegen worktree sheet (imagegen-chrome-icons-worktree.png r1c1) with THICK=2 dilate to match the v2 brand stroke weight. The shape combines folder + branch so it reads as "a checked-out working directory on a branch", visually distinct from `branch` (just the fork) and `folder` (no version-control hint). No worktree-active variant is added in this commit; #278 surfaces this inline rather than as a sidebar nav tab. If a nav placement appears later, a paired active variant can be added then. Refs #356, #278. --- packages/ui/src/components/icon.stories.tsx | 1 + packages/ui/src/components/icon.tsx | 1 + 2 files changed, 2 insertions(+) diff --git a/packages/ui/src/components/icon.stories.tsx b/packages/ui/src/components/icon.stories.tsx index f5ae8b2d4..70ae1a0a4 100644 --- a/packages/ui/src/components/icon.stories.tsx +++ b/packages/ui/src/components/icon.stories.tsx @@ -72,6 +72,7 @@ const names = [ "menu", "server", "branch", + "worktree", "edit", "help", "settings-gear", diff --git a/packages/ui/src/components/icon.tsx b/packages/ui/src/components/icon.tsx index 3a22e95cf..6e8518d83 100644 --- a/packages/ui/src/components/icon.tsx +++ b/packages/ui/src/components/icon.tsx @@ -56,6 +56,7 @@ export const icons = { menu: ``, server: ``, branch: ``, + worktree: ``, edit: ``, help: ``, "settings-gear": ``,