feat: add Dioxus and GPUI UI prototypes for framework comparison
Dioxus (ui-dioxus/): 2,169 lines, WebView mode (same wry as Tauri), Catppuccin theme, 12 components, agor-core integration, compiles clean. Evolution path — keeps xterm.js, gradual migration from Tauri. GPUI (ui-gpui/): 2,490 lines, GPU-accelerated rendering, alacritty_terminal for native terminal, 17 files, Catppuccin palette, demo data. Revolution path — pure Rust UI, 120fps target, no WebView. Both are standalone (not in workspace), share agor-core backend. Created for side-by-side comparison to inform framework decision.
This commit is contained in:
parent
90c7315336
commit
f3d2ca78ba
34 changed files with 17467 additions and 0 deletions
32
ui-dioxus/src/components/project_grid.rs
Normal file
32
ui-dioxus/src/components/project_grid.rs
Normal file
|
|
@ -0,0 +1,32 @@
|
|||
/// ProjectGrid — responsive grid of ProjectBox cards.
|
||||
///
|
||||
/// Mirrors the Svelte app's ProjectGrid.svelte: CSS grid with
|
||||
/// auto-fit columns, minimum 28rem each.
|
||||
|
||||
use dioxus::prelude::*;
|
||||
|
||||
use crate::state::{AgentStatus, ProjectConfig};
|
||||
use crate::components::project_box::ProjectBox;
|
||||
|
||||
#[component]
|
||||
pub fn ProjectGrid(projects: Vec<ProjectConfig>) -> Element {
|
||||
// Assign different demo statuses to show variety
|
||||
let statuses = vec![
|
||||
AgentStatus::Running,
|
||||
AgentStatus::Idle,
|
||||
AgentStatus::Done,
|
||||
AgentStatus::Stalled,
|
||||
];
|
||||
|
||||
rsx! {
|
||||
div { class: "project-grid",
|
||||
for (i, project) in projects.iter().enumerate() {
|
||||
ProjectBox {
|
||||
key: "{project.id}",
|
||||
project: project.clone(),
|
||||
initial_status: statuses[i % statuses.len()],
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue