Skip to content

Commit d7157c9

Browse files
Maik Roland Dammclaude
andcommitted
feat(deps): upgrade leptos 0.7→0.8, leptos_icons 0.5→0.7, icondata 0.5→0.7
Lucide icon renames required by icondata 0.7: - LuFileEdit → LuFilePenLine - LuPlusCircle → LuCirclePlus - LuSendHorizonal → LuSendHorizontal (typo fix) - LuAlertTriangle → LuTriangleAlert - LuTerminalSquare → LuSquareTerminal - LuPlayCircle/AlertCircle/CheckCircle/MinusCircle → LuCircle* variants No reactive API changes needed — leptos 0.8 is backward-compatible for all signal, effect, callback and event-listener APIs used here. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
1 parent 3dbb3ea commit d7157c9

5 files changed

Lines changed: 101 additions & 13 deletions

File tree

Lines changed: 88 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,88 @@
1+
# Plan: Leptos 0.7 → 0.8 + leptos_icons/icondata 0.5 → 0.7
2+
3+
## Status: IN PROGRESS — Cargo.toml already bumped, code not yet fixed
4+
5+
## Context
6+
7+
Upgrading the three coupled frontend deps:
8+
- `leptos` 0.7.8 → 0.8.19
9+
- `leptos_icons` 0.5 → 0.7.1 (requires leptos 0.8)
10+
- `icondata` 0.5 → 0.7 (paired with leptos_icons)
11+
12+
Research confirmed **most leptos API is unchanged** between 0.7 and 0.8. The only true breaking change is in **leptos_icons**: the `icon` prop changed from a bare `icondata_core::Icon` value to `Signal<icondata_core::Icon>`.
13+
14+
---
15+
16+
## Breaking Changes
17+
18+
| Change | Scope | Fix |
19+
|---|---|---|
20+
| `leptos_icons::Icon` prop `icon:` changed from `icondata_core::Icon` to `Signal<icondata_core::Icon>` | 20 files | Wrap every `icon={icondata::LuX}``icon=Signal::derive(\|\| icondata::LuX)` |
21+
| leptos prelude now also exports `write::*` (additive) | Possible name shadowing | Fix any name conflicts from compile errors |
22+
| reactive_graph 0.1 → 0.2, tachys 0.1 → 0.2 | Internal | No code changes expected |
23+
24+
---
25+
26+
## Fix Pattern
27+
28+
```rust
29+
// Before (leptos_icons 0.5):
30+
<LxIcon icon={icondata::LuTerminal} width="16" height="16" />
31+
32+
// After (leptos_icons 0.7):
33+
<LxIcon icon=Signal::derive(|| icondata::LuTerminal) width="16" height="16" />
34+
```
35+
36+
`Signal` is already in scope via `leptos::prelude::*` — no extra import needed.
37+
38+
---
39+
40+
## Files to Update (20 files — all `<LxIcon icon={...}>` call sites)
41+
42+
All in `src/workbench/`:
43+
1. `agent_context_handoff.rs`
44+
2. `agent_panel/context_list.rs`
45+
3. `agent_panel/mod.rs`
46+
4. `agent_panel/timeline.rs` ← also has `fn -> icondata::Icon` return type — leave that alone
47+
5. `agent_panel/voice_orb/mod.rs`
48+
6. `create_workspace_wizard.rs`
49+
7. `git_graph/mod.rs`
50+
8. `harness_image_pane/mod.rs`
51+
9. `harness_ui.rs`
52+
10. `harness_voice_pane/mod.rs`
53+
11. `memory_graph/mod.rs`
54+
12. `memory_panel.rs`
55+
13. `model_picker/mod.rs`
56+
14. `plans_panel/mod.rs`
57+
15. `project_explorer/mod.rs`
58+
16. `right_panel.rs`
59+
17. `skills_rules_panel/rules_tab.rs`
60+
18. `skills_rules_panel/skills_tab.rs`
61+
19. `terminal_cell.rs`
62+
20. `workspace_panel.rs`
63+
64+
---
65+
66+
## Execution Steps
67+
68+
1. ~~Bump `leptos = "0.8"`, `leptos_icons = "0.7"`, `icondata = "0.7"` in `Cargo.toml`~~ ✅ Done
69+
2. Run `cargo check -p blxcode-ui --target wasm32-unknown-unknown` — collect all errors
70+
3. For each error: wrap `icondata::Lu*` in `Signal::derive(|| ...)`
71+
4. Re-run `cargo check` — fix any residual errors
72+
5. Final: `cargo check -p blxcode` + `cargo check -p blxcode-ui --target wasm32-unknown-unknown`
73+
74+
---
75+
76+
## APIs Confirmed Unchanged (no edits needed)
77+
78+
- `window_event_listener_untyped` — same (11 files safe)
79+
- `mount_to_body()` — same
80+
- `Effect::new()` — same (19 files safe)
81+
- `spawn_local` at `leptos::task::spawn_local` — same (27 files safe)
82+
- `on_cleanup` — same (14 files safe)
83+
- `Callback<In, Out>` / `Callable` — same (8 files safe)
84+
- `signal()`, `RwSignal::new()`, `.get()`, `.set()` — same
85+
- `Signal::derive()`, `Memo::new()` — same
86+
- `provide_context` / `expect_context` — same
87+
- `NodeRef::<html::Div>`, `NodeRef::<html::Audio>` — same
88+
- `Show`, `For` in `view!` macro — same

Cargo.toml

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ license = "MIT"
66

77
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
88
[dependencies]
9-
leptos = { version = "0.7", features = ["csr"] }
9+
leptos = { version = "0.8", features = ["csr"] }
1010
wasm-bindgen = "0.2"
1111
wasm-bindgen-futures = "0.4"
1212
js-sys = "0.3"
@@ -17,9 +17,9 @@ gloo-timers = { version = "0.4", features = ["futures"] }
1717
console_error_panic_hook = "0.1.7"
1818
base64 = { version = "0.22", default-features = false, features = ["std"] }
1919
pulldown-cmark = "0.13"
20-
leptos_icons = "0.5"
20+
leptos_icons = "0.7"
2121
send_wrapper = "0.6"
22-
icondata = { version = "0.5", default-features = false, features = ["lucide"] }
22+
icondata = { version = "0.7", default-features = false, features = ["lucide"] }
2323
uuid = { version = "1", features = ["v4", "js"] }
2424
web-sys = { version = "0.3", features = [
2525
"DataTransfer",

src/workbench/agent_panel/timeline.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -336,9 +336,9 @@ fn tool_icon(tool: &str) -> icondata::Icon {
336336
"memory_read" => icondata::LuBookOpen,
337337
"memory_search" => icondata::LuSearch,
338338
"memory_create" => icondata::LuFilePlus,
339-
"memory_write" => icondata::LuFileEdit,
339+
"memory_write" => icondata::LuFilePenLine,
340340
"memory_delete" => icondata::LuTrash2,
341-
"memory_rename" => icondata::LuFileEdit,
341+
"memory_rename" => icondata::LuFilePenLine,
342342
"memory_graph" => icondata::LuShare2,
343343
"memory_backlinks" => icondata::LuLink,
344344
"memory_category_list" => icondata::LuPalette,
@@ -349,13 +349,13 @@ fn tool_icon(tool: &str) -> icondata::Icon {
349349
"list_tools" => icondata::LuWrench,
350350
"task_list" => icondata::LuListTodo,
351351
"task_get" => icondata::LuClipboardList,
352-
"task_create" => icondata::LuPlusCircle,
352+
"task_create" => icondata::LuCirclePlus,
353353
"task_update" => icondata::LuListChecks,
354354
"task_delete" => icondata::LuTrash2,
355355
"task_reorder" => icondata::LuArrowUpDown,
356356
"harness.open_terminal" => icondata::LuTerminal,
357357
"harness.list_terminals" => icondata::LuLayoutGrid,
358-
"harness.send_terminal_keys" => icondata::LuSendHorizonal,
358+
"harness.send_terminal_keys" => icondata::LuSendHorizontal,
359359
"harness.send_agent_context" => icondata::LuShare2,
360360
"harness.read_terminal_output" => icondata::LuWrapText,
361361
_ => icondata::LuWrench,
@@ -658,7 +658,7 @@ fn ToolActivityRow(idx: usize, entry: ToolActivity) -> impl IntoView {
658658
let status_icon = match entry.status {
659659
ActivityStatus::Pending => icondata::LuLoader,
660660
ActivityStatus::Ok => icondata::LuCheck,
661-
ActivityStatus::Fail => icondata::LuAlertTriangle,
661+
ActivityStatus::Fail => icondata::LuTriangleAlert,
662662
};
663663
let detail_open = RwSignal::new(false);
664664
let has_detail = entry.detail.as_ref().is_some_and(|s| !s.is_empty());

src/workbench/memory_graph/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -773,7 +773,7 @@ fn GraphPreviewPopover(
773773
aria-label=move || i18n.tr(I18nKey::MemGraphSendToTerminal)()
774774
on:click=move |_| handoff_open.update(|v| *v = !*v)
775775
>
776-
<LxIcon icon=icondata::LuTerminalSquare width="0.82rem" height="0.82rem" />
776+
<LxIcon icon=icondata::LuSquareTerminal width="0.82rem" height="0.82rem" />
777777
</button>
778778
<Show when=move || handoff_open.get()>
779779
<HandoffMenu

src/workbench/plans_panel/mod.rs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -628,25 +628,25 @@ fn PlanTaskSummaryIcons(summary: PlanTaskSummaryWire) -> impl IntoView {
628628
label_key=I18nKey::PlansTaskStatPending
629629
/>
630630
<PlanTaskStatChip
631-
icon=icondata::LuPlayCircle
631+
icon=icondata::LuCirclePlay
632632
count=summary.in_progress
633633
modifier="in-progress"
634634
label_key=I18nKey::PlansTaskStatInProgress
635635
/>
636636
<PlanTaskStatChip
637-
icon=icondata::LuAlertCircle
637+
icon=icondata::LuCircleAlert
638638
count=summary.blocked
639639
modifier="blocked"
640640
label_key=I18nKey::PlansTaskStatBlocked
641641
/>
642642
<PlanTaskStatChip
643-
icon=icondata::LuCheckCircle
643+
icon=icondata::LuCircleCheck
644644
count=summary.completed
645645
modifier="completed"
646646
label_key=I18nKey::PlansTaskStatCompleted
647647
/>
648648
<PlanTaskStatChip
649-
icon=icondata::LuMinusCircle
649+
icon=icondata::LuCircleMinus
650650
count=summary.cancelled
651651
modifier="cancelled"
652652
label_key=I18nKey::PlansTaskStatCancelled

0 commit comments

Comments
 (0)