Skip to content

Commit e09dfcf

Browse files
doublegateclaude
andcommitted
feat(gui): migrate from iced 0.14.0 to Dioxus 0.7.3 + Axum
Complete GUI framework migration (Phases 0-4): Phase 0: Reset dioxus branch to main (v0.4.2 baseline) Phase 1: Replace iced with dioxus 0.7.3 + axum 0.8 in workspace deps - Remove iced, iced_glyphon vendor patch - Add dioxus with fullstack, desktop, server, web feature flags - Add Dioxus.toml configuration - Bump MSRV to 1.80.0 for Dioxus compatibility Phase 2: Core-to-Dioxus state bridge - Signal<AppState> context provider architecture - use_coroutine EventBus listener (hooks/use_irc.rs) - IrcActions (Copy) for direct core method calls - Theme hook with FromStr trait for 22 themes Phase 3: Dioxus RSX component rebuild - 3-pane layout (server tree, messages, user list) via CSS flexbox - TabBar, StatusBar, MenuBar, ServerTree, UserList - MessageView with IRC formatting -> styled HTML spans - InputArea with history, command parsing, tab completion - Connect, Preferences, About dialogs - Context menu component Phase 4: CSS theme system - 22 themes as CSS custom properties ([data-theme] selectors) - IRC mIRC color codes 0-15 as CSS classes - Tailwind CSS utility classes throughout components All 234 workspace tests passing, zero clippy warnings, zero fmt issues. Removed: iced, iced_glyphon vendor, Material Design 3 iced components Kept: ratatui TUI, CLI mode, all non-GUI crates unchanged Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
1 parent 70cbafd commit e09dfcf

96 files changed

Lines changed: 5903 additions & 24463 deletions

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Cargo.lock

Lines changed: 3528 additions & 2133 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -49,8 +49,8 @@ notify-rust = "4"
4949
tokio-socks = "0.5"
5050

5151
# UI
52-
# iced 0.14.0 - Major release with reactive rendering, time-travel debugging, and API improvements
53-
iced = { version = "0.14.0", features = ["tokio", "debug", "advanced"] }
52+
dioxus = { version = "0.7.3", features = ["fullstack"] }
53+
axum = "0.8"
5454
ratatui = "0.30.0"
5555
crossterm = "0.29"
5656

@@ -71,7 +71,7 @@ clap = { version = "4.5.53", features = ["derive"] }
7171
name = "rustirc"
7272
version = "0.4.2"
7373
edition = "2021"
74-
rust-version = "1.75.0"
74+
rust-version = "1.80.0"
7575
authors = ["RustIRC Contributors"]
7676
description = "A powerful, modern IRC client combining the best of mIRC, HexChat, and WeeChat"
7777
documentation = "https://docs.rs/rustirc"
@@ -114,8 +114,3 @@ strip = true
114114
opt-level = 3
115115
debug = false
116116

117-
# Patch vulnerable lru 0.12.5 by replacing iced_glyphon with patched version
118-
# The patched version updates lru from 0.12.1 to 0.16.3 which includes the security fix
119-
# See SECURITY-FIX-RUSTSEC-2026-0002.md for details
120-
[patch.crates-io]
121-
iced_glyphon = { path = "vendor/iced_glyphon" }

Dioxus.toml

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
[application]
2+
name = "RustIRC"
3+
asset_dir = "assets"
4+
5+
[web.app]
6+
title = "RustIRC - Modern IRC Client"
7+
8+
[web.watcher]
9+
reload_html = true
10+
watch_path = ["src", "crates/rustirc-gui/src"]

assets/main.css

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
/* RustIRC - Base CSS with theme variables */
2+
@import url("themes/base.css");
3+
4+
/* Reset */
5+
*, *::before, *::after {
6+
box-sizing: border-box;
7+
margin: 0;
8+
padding: 0;
9+
}
10+
11+
html, body {
12+
height: 100%;
13+
width: 100%;
14+
overflow: hidden;
15+
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, Oxygen, Ubuntu, sans-serif;
16+
font-size: 14px;
17+
background-color: var(--bg-color, #1a1a1a);
18+
color: var(--text-color, #e0e0e0);
19+
}
20+
21+
/* Scrollbar styling */
22+
::-webkit-scrollbar {
23+
width: 8px;
24+
height: 8px;
25+
}
26+
27+
::-webkit-scrollbar-track {
28+
background: var(--bg-color, #1a1a1a);
29+
}
30+
31+
::-webkit-scrollbar-thumb {
32+
background: var(--scrollbar-thumb, #444);
33+
border-radius: 4px;
34+
}
35+
36+
::-webkit-scrollbar-thumb:hover {
37+
background: var(--scrollbar-thumb-hover, #555);
38+
}
39+
40+
/* Selection */
41+
::selection {
42+
background: var(--selection-bg, #37373d);
43+
color: var(--selection-color, #e0e0e0);
44+
}
45+
46+
/* Focus styles */
47+
*:focus-visible {
48+
outline: 1px solid var(--accent-color, #4ecdc4);
49+
outline-offset: -1px;
50+
}
51+
52+
/* IRC color classes */
53+
.irc-color-0 { color: #ffffff; }
54+
.irc-color-1 { color: #000000; }
55+
.irc-color-2 { color: #00007f; }
56+
.irc-color-3 { color: #009300; }
57+
.irc-color-4 { color: #ff0000; }
58+
.irc-color-5 { color: #7f0000; }
59+
.irc-color-6 { color: #9c009c; }
60+
.irc-color-7 { color: #fc7f00; }
61+
.irc-color-8 { color: #ffff00; }
62+
.irc-color-9 { color: #00fc00; }
63+
.irc-color-10 { color: #009393; }
64+
.irc-color-11 { color: #00ffff; }
65+
.irc-color-12 { color: #0000fc; }
66+
.irc-color-13 { color: #ff00ff; }
67+
.irc-color-14 { color: #7f7f7f; }
68+
.irc-color-15 { color: #d2d2d2; }

0 commit comments

Comments
 (0)