From cd9241fc7d65361f22f5ee237c0fe2ab25c2c615 Mon Sep 17 00:00:00 2001 From: Mark IJbema Date: Wed, 11 Feb 2026 10:05:40 +0100 Subject: [PATCH] feat: replace lucide-solid icons with kilo-ui Icon component (Phase 1.5) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - All 15 lucide-solid icons in Settings.tsx replaced with Icon component - Back button ArrowLeft → Icon name='arrow-left' - Removed lucide-solid dependency from package.json - Many icons use approximate matches (kilo-ui only has 38 icons) - Update progress tracker + deviation note #7 --- packages/kilo-vscode/AGENTS.md | 1 + .../docs/ui-implementation-plan.md | 3 +- packages/kilo-vscode/package.json | 1 - .../webview-ui/src/components/Settings.tsx | 48 +++++++------------ 4 files changed, 19 insertions(+), 34 deletions(-) diff --git a/packages/kilo-vscode/AGENTS.md b/packages/kilo-vscode/AGENTS.md index 2e3f7dce1f5..41413a676e9 100644 --- a/packages/kilo-vscode/AGENTS.md +++ b/packages/kilo-vscode/AGENTS.md @@ -42,6 +42,7 @@ New webview features must use **`@kilocode/kilo-ui`** components instead of raw - See [`docs/ui-implementation-plan.md`](docs/ui-implementation-plan.md) for the full migration plan and phased rollout - **Check the desktop app first**: [`packages/app/src/`](../../packages/app/src/) is the reference implementation for how kilo-ui components are composed together. Always check how the app uses a component before implementing it in the webview — don't just look at the component API in isolation. - **`data-component` and `data-slot` attributes carry CSS styling** — kilo-ui uses `[data-component]` and `[data-slot]` attribute selectors, not class names. When the app uses e.g. `data-component="permission-prompt"` and `data-slot="permission-actions"`, these get kilo-ui styling for free. +- **Icons**: kilo-ui has 75+ custom SVG icons in [`packages/ui/src/components/icon.tsx`](../../packages/ui/src/components/icon.tsx). To list all available icon names: `node -e "const c=require('fs').readFileSync('../../packages/ui/src/components/icon.tsx','utf8');[...c.matchAll(/^\\s{2}[\"']?([\\w-]+)[\"']?:\\s*\x60/gm)].map(m=>m[1]).sort().forEach(n=>console.log(n))"`. Icon names use both hyphenated (`arrow-left`) and bare-word (`brain`, `console`, `providers`) keys. ## Debugging diff --git a/packages/kilo-vscode/docs/ui-implementation-plan.md b/packages/kilo-vscode/docs/ui-implementation-plan.md index dccea1ab2fa..d0819d73577 100644 --- a/packages/kilo-vscode/docs/ui-implementation-plan.md +++ b/packages/kilo-vscode/docs/ui-implementation-plan.md @@ -792,7 +792,7 @@ Each phase has specific acceptance criteria (listed above). The general verifica | Phase 1.2: Spinners | ✅ Complete | 2026-02-10 | Emoji loading indicators (`⏳`, `⚙️`) in Message.tsx and DeviceAuthCard.tsx replaced with `Spinner`. Status icons (`✓`, `✕`) kept as-is. | | Phase 1.3: Permission Dialog | ✅ Complete | 2026-02-11 | Custom overlay replaced with `Dialog` via `useDialog()` hook + `BasicTool` for collapsible header + `data-component="permission-prompt"` for actions. Removed 7 custom CSS classes. Direct `@kobalte/core` dep removed to avoid dual-package context mismatch. | | Phase 1.4: Cards | ✅ Complete | 2026-02-11 | Inline-styled card divs in ProfileView (profile + balance) and DeviceAuthCard (5 state cards) replaced with `Card` component. Removed `cardStyle` constant. | -| Phase 1.5: Icons | ⬚ Not started | — | Requires adding 6 missing icons to kilo-ui first | +| Phase 1.5: Icons | ✅ Complete | 2026-02-11 | All 15 lucide-solid icons replaced with kilo-ui `Icon`. `lucide-solid` dep removed. Many icons use approximate matches (see deviation #7). | | Phase 2: Settings UI | ⬚ Not started | — | | | Phase 3: Chat UI | ⬚ Not started | — | | | Phase 4: Advanced | ⬚ Not started | — | | @@ -805,3 +805,4 @@ Each phase has specific acceptance criteria (listed above). The general verifica 4. **`Spinner` has no `size` prop**: The plan assumed `Spinner` would accept a `size` prop. The actual component is sized via CSS `style` prop (`width`/`height`). 5. **Settings tab sidebar buttons**: Left as native `