git.lucas.co / cce-files
file manager
git clone https://git.lucas.co/cce-files.git

commit4389b01f3696b20abd01e3679bdb94fa87b1965d
parenta70ece2f8b
authorLucas Galante <[email protected]>
date2026-06-18 01:22
refactor: update dependencies and rename clear-ui to cce-ui

 Cargo.toml            |  2 +-
 src/main.rs           | 90 ++++++++++++++++++++++++++++-----------------------
 src/pages/browse.rs   | 32 +++++++++---------
 src/pages/mod.rs      |  8 ++---
 src/pages/network.rs  |  8 ++---
 src/pages/preview.rs  |  8 ++---
 src/pages/settings.rs | 10 +++---
 7 files changed, 83 insertions(+), 75 deletions(-)

diff --git a/Cargo.toml b/Cargo.toml
index ce53d62..937eadd 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -4,7 +4,7 @@ version = "0.1.0"
 edition = "2024"
 
 [dependencies]
-clear-ui = { path = "../clear-ui" }
+cce-ui = { path = "../cce-ui" }
 wayland-client = { version = "0.31", features = ["system"] }
 wgpu = "24"
 bytemuck = { version = "1", features = ["derive"] }
diff --git a/src/main.rs b/src/main.rs
index 94b95ed..8d464a5 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -4,9 +4,9 @@ mod services;
 use wayland_client::QueueHandle;
 use glyphon::FontSystem;
 
-use clear_ui::engine::{Application, LogicalPosition, LogicalSize, WindowSettings};
-use clear_ui::widget::{MouseButton, ElementState, MouseScrollDelta, KeyEvent, TextItem, Element, PageSelector, MenuController};
-use clear_ui::widget::{GraphController, PathController};
+use cce_ui::engine::{Application, LogicalPosition, LogicalSize, WindowSettings};
+use cce_ui::widget::{MouseButton, ElementState, MouseScrollDelta, KeyEvent, TextItem, Element, PageSelector, MenuController};
+use cce_ui::widget::{GraphController, PathController};
 
 use notify::{Watcher, RecommendedWatcher, RecursiveMode, Config};
 
@@ -58,16 +58,16 @@ struct FilesystemApp {
     height: u32,
     scale_factor: f64,
     sender: calloop::channel::Sender<Message>,
-    page_buttons: Vec<(clear_ui::widget::Button, Message)>,
+    page_buttons: Vec<(cce_ui::widget::Button, Message)>,
     cursor_x: f32,
     cursor_y: f32,
-    menubar: clear_ui::widget::MenuBar,
+    menubar: cce_ui::widget::MenuBar,
     just_initialized: bool,
-    ui_context: clear_ui::context::UiContext,
+    ui_context: cce_ui::context::UiContext,
     watcher: Option<notify::RecommendedWatcher>,
     fs_service: crate::services::fs::FsService,
     context_menu: ContextMenu,
-    open_with_dialog: Option<(std::path::PathBuf, clear_ui::widget::TextBox)>,
+    open_with_dialog: Option<(std::path::PathBuf, cce_ui::widget::TextBox)>,
 }
 
 // ── Messages ────────────────────────────────────────────────────────
@@ -141,8 +141,8 @@ impl FilesystemApp {
         let mut widgets = Vec::new();
         let mut text_items = Vec::new();
 
-        clear_ui::widget::hover_animation::reset_frame_registration();
-        clear_ui::widget::hover_animation::set_cursor_pos(self.cursor_x, self.cursor_y);
+        cce_ui::widget::hover_animation::reset_frame_registration();
+        cce_ui::widget::hover_animation::set_cursor_pos(self.cursor_x, self.cursor_y);
 
         let mut pc = pages::PageContent::new();
 
@@ -163,7 +163,7 @@ impl FilesystemApp {
         };
 
         // Full window page background
-        let bg_color = clear_ui::color::page_low_color();
+        let bg_color = cce_ui::color::page_low_color();
         pc.rect(bg_color, 0.0, 0.0, self.width as f32, self.height as f32);
 
         let mut menubar_pc = pages::PageContent::new();
@@ -171,7 +171,7 @@ impl FilesystemApp {
             // 1. Render the Menubar widget directly
             let page_idx = Page::ALL.iter().position(|&p| p == self.current_page).unwrap_or(0);
             self.menubar.menus.set_selected(Some(page_idx));
-            clear_ui::layout::render_widget(&mut menubar_pc, &mut self.menubar, 0.0, 0.0, sidebar_w, self.height as f32, &mut self.ui_context);
+            cce_ui::layout::render_widget(&mut menubar_pc, &mut self.menubar, 0.0, 0.0, sidebar_w, self.height as f32, &mut self.ui_context);
         }
 
         // 3. Draw Page content
@@ -230,9 +230,9 @@ impl FilesystemApp {
                 let r_f = col[0] as f32 / 255.0;
                 let g_f = col[1] as f32 / 255.0;
                 let b_f = col[2] as f32 / 255.0;
-                let linear_col = clear_ui::color::to_linear([r_f, g_f, b_f, 1.0]);
-                if clear_ui::color::node_color() != linear_col {
-                    clear_ui::color::set_node_color(linear_col);
+                let linear_col = cce_ui::color::to_linear([r_f, g_f, b_f, 1.0]);
+                if cce_ui::color::node_color() != linear_col {
+                    cce_ui::color::set_node_color(linear_col);
                 }
             }
         }
@@ -448,7 +448,7 @@ impl FilesystemApp {
             // Background
             widgets.push(AppWidget {
                 x: cx + 1.0, y: cy + 1.0, w: cw - 2.0, h: ch - 2.0,
-                color: clear_ui::color::popover_bg_color(), hover_color: clear_ui::color::popover_bg_color(),
+                color: cce_ui::color::popover_bg_color(), hover_color: cce_ui::color::popover_bg_color(),
                 hovering: false,
                 action: None,
             });
@@ -645,20 +645,20 @@ impl FilesystemApp {
 impl Application for FilesystemApp {
     type Message = Message;
 
-    fn new(_qh: &QueueHandle<clear_ui::engine::EngineState<Self>>, sender: calloop::channel::Sender<Self::Message>) -> Self {
+    fn new(_qh: &QueueHandle<cce_ui::engine::EngineState<Self>>, sender: calloop::channel::Sender<Self::Message>) -> Self {
         // Parse command line arguments
         let args: Vec<String> = std::env::args().collect();
         let select_directory = args.iter().any(|arg| arg == "--select-dir");
         let save_mode = args.iter().any(|arg| arg == "--save");
         let select_mode = save_mode || args.iter().any(|arg| arg == "--select" || arg == "--select-dir");
 
-        clear_ui::scale::set_scale_factor(1.0);
+        cce_ui::scale::set_scale_factor(1.0);
 
         let browse = pages::browse::BrowseState::default();
         let current_dir = browse.current_dir.clone();
 
         let pages_names = Page::ALL.iter().map(|p| p.label().to_string()).collect::<Vec<_>>();
-        let mut menubar = clear_ui::widget::MenuBar::new(0.0, 0.0, 56.0, 0.0)
+        let mut menubar = cce_ui::widget::MenuBar::new(0.0, 0.0, 56.0, 0.0)
             .with_vertical(true);
         menubar.set_sidebar_label(Some("CLEAR".to_string()));
         menubar.set_pages(pages_names);
@@ -690,7 +690,7 @@ impl Application for FilesystemApp {
             cursor_y: 0.0,
             menubar,
             just_initialized: true,
-            ui_context: clear_ui::context::UiContext::new(),
+            ui_context: cce_ui::context::UiContext::new(),
             watcher: None,
             fs_service,
             context_menu: ContextMenu {
@@ -858,7 +858,7 @@ impl Application for FilesystemApp {
                 std::process::exit(1);
             }
             Message::PromptOpenWith(path) => {
-                let mut tb = clear_ui::widget::TextBox::new(String::new())
+                let mut tb = cce_ui::widget::TextBox::new(String::new())
                     .with_max_width(None)
                     .with_placeholder("Program/Command");
                 tb.focus();
@@ -920,8 +920,8 @@ impl Application for FilesystemApp {
                 let r_f = col[0] as f32 / 255.0;
                 let g_f = col[1] as f32 / 255.0;
                 let b_f = col[2] as f32 / 255.0;
-                let linear_col = clear_ui::color::to_linear([r_f, g_f, b_f, 1.0]);
-                clear_ui::color::set_node_color(linear_col);
+                let linear_col = cce_ui::color::to_linear([r_f, g_f, b_f, 1.0]);
+                cce_ui::color::set_node_color(linear_col);
                 *needs_rebuild = true;
                 self.needs_rebuild = true;
             }
@@ -933,7 +933,7 @@ impl Application for FilesystemApp {
             self.width = size.width as u32;
             self.height = size.height as u32;
             self.scale_factor = scale;
-            clear_ui::scale::set_scale_factor(scale as f32);
+            cce_ui::scale::set_scale_factor(scale as f32);
             self.rebuild_layout();
         }
 
@@ -947,8 +947,8 @@ impl Application for FilesystemApp {
     }
 
     fn clear_color(&self) -> [f32; 4] {
-        let mut color = clear_ui::color::page_low_color();
-        if let Some(opacity) = clear_ui::color::read_opacity_if_configured() {
+        let mut color = cce_ui::color::page_low_color();
+        if let Some(opacity) = cce_ui::color::read_opacity_if_configured() {
             color[3] = opacity;
         }
         color
@@ -1387,8 +1387,8 @@ impl Application for FilesystemApp {
                     let r_f = col[0] as f32 / 255.0;
                     let g_f = col[1] as f32 / 255.0;
                     let b_f = col[2] as f32 / 255.0;
-                    let linear_col = clear_ui::color::to_linear([r_f, g_f, b_f, 1.0]);
-                    clear_ui::color::set_node_color(linear_col);
+                    let linear_col = cce_ui::color::to_linear([r_f, g_f, b_f, 1.0]);
+                    cce_ui::color::set_node_color(linear_col);
                 }
                 changed = true;
             }
@@ -1487,12 +1487,12 @@ impl Application for FilesystemApp {
         }
 
         if let Some((_path, textbox)) = &mut self.open_with_dialog {
-            if event.logical_key == clear_ui::widget::Key::Named(clear_ui::widget::NamedKey::Enter) {
+            if event.logical_key == cce_ui::widget::Key::Named(cce_ui::widget::NamedKey::Enter) {
                 textbox.unfocus();
                 self.ui_context.clear_focus();
                 return Some(Message::OpenWithSubmit);
             }
-            if event.logical_key == clear_ui::widget::Key::Named(clear_ui::widget::NamedKey::Escape) {
+            if event.logical_key == cce_ui::widget::Key::Named(cce_ui::widget::NamedKey::Escape) {
                 textbox.unfocus();
                 self.ui_context.clear_focus();
                 return Some(Message::OpenWithCancel);
@@ -1504,8 +1504,16 @@ impl Application for FilesystemApp {
             return None;
         }
 
+        if self.current_page == Page::Network {
+            if self.network.graph.keyboard_input(event, &mut self.ui_context) {
+                *needs_rebuild = true;
+                self.needs_rebuild = true;
+                return None;
+            }
+        }
+
         if self.context_menu.visible {
-            if event.logical_key == clear_ui::widget::Key::Named(clear_ui::widget::NamedKey::Escape) {
+            if event.logical_key == cce_ui::widget::Key::Named(cce_ui::widget::NamedKey::Escape) {
                 self.context_menu.visible = false;
                 *needs_rebuild = true;
                 self.needs_rebuild = true;
@@ -1522,8 +1530,8 @@ impl Application for FilesystemApp {
                     let r_f = col[0] as f32 / 255.0;
                     let g_f = col[1] as f32 / 255.0;
                     let b_f = col[2] as f32 / 255.0;
-                    let linear_col = clear_ui::color::to_linear([r_f, g_f, b_f, 1.0]);
-                    clear_ui::color::set_node_color(linear_col);
+                    let linear_col = cce_ui::color::to_linear([r_f, g_f, b_f, 1.0]);
+                    cce_ui::color::set_node_color(linear_col);
                 }
                 return None;
             }
@@ -1548,7 +1556,7 @@ impl Application for FilesystemApp {
             if self.browse.save_name_box.keyboard_input(event, &mut self.ui_context) {
                 *needs_rebuild = true;
                 self.needs_rebuild = true;
-                if event.logical_key == clear_ui::widget::Key::Named(clear_ui::widget::NamedKey::Enter) {
+                if event.logical_key == cce_ui::widget::Key::Named(cce_ui::widget::NamedKey::Enter) {
                     self.browse.save_name_box.unfocus();
                     self.ui_context.clear_focus();
                     return Some(Message::SelectOpen);
@@ -1560,22 +1568,22 @@ impl Application for FilesystemApp {
         // Global key navigation
         if self.current_page == Page::Browse {
             let key_char = match &event.logical_key {
-                clear_ui::widget::Key::Character(c) => Some(c.as_str()),
+                cce_ui::widget::Key::Character(c) => Some(c.as_str()),
                 _ => None,
             };
 
             match &event.logical_key {
-                clear_ui::widget::Key::Named(clear_ui::widget::NamedKey::ArrowUp) => {
+                cce_ui::widget::Key::Named(cce_ui::widget::NamedKey::ArrowUp) => {
                     if let Some(index) = pages::browse::next_selection_index(&self.browse, pages::browse::BrowseNavigation::Up) {
                         return Some(Message::Browse(pages::browse::BrowseMessage::SelectEntry(index)));
                     }
                 }
-                clear_ui::widget::Key::Named(clear_ui::widget::NamedKey::ArrowDown) => {
+                cce_ui::widget::Key::Named(cce_ui::widget::NamedKey::ArrowDown) => {
                     if let Some(index) = pages::browse::next_selection_index(&self.browse, pages::browse::BrowseNavigation::Down) {
                         return Some(Message::Browse(pages::browse::BrowseMessage::SelectEntry(index)));
                     }
                 }
-                clear_ui::widget::Key::Named(clear_ui::widget::NamedKey::Enter) => {
+                cce_ui::widget::Key::Named(cce_ui::widget::NamedKey::Enter) => {
                     if let Some(idx) = self.browse.selected {
                         if let Some(entry) = self.browse.entries.get(idx) {
                             if entry.is_dir && !is_project_dir(&entry.path) {
@@ -1593,17 +1601,17 @@ impl Application for FilesystemApp {
                         return Some(Message::SelectOpen);
                     }
                 }
-                clear_ui::widget::Key::Named(clear_ui::widget::NamedKey::Delete) => {
+                cce_ui::widget::Key::Named(cce_ui::widget::NamedKey::Delete) => {
                     if let Some(idx) = self.browse.selected {
                         return Some(Message::Browse(pages::browse::BrowseMessage::DeleteEntry(idx)));
                     }
                 }
-                clear_ui::widget::Key::Named(clear_ui::widget::NamedKey::Escape) => {
+                cce_ui::widget::Key::Named(cce_ui::widget::NamedKey::Escape) => {
                     if self.select_mode {
                         std::process::exit(1);
                     }
                 }
-                clear_ui::widget::Key::Named(clear_ui::widget::NamedKey::Backspace) => {
+                cce_ui::widget::Key::Named(cce_ui::widget::NamedKey::Backspace) => {
                     if let Some(parent) = self.browse.current_dir.parent() {
                         return Some(Message::Browse(pages::browse::BrowseMessage::NavigateToPath(parent.to_path_buf())));
                     }
@@ -1655,5 +1663,5 @@ impl Application for FilesystemApp {
 
 #[tokio::main]
 async fn main() {
-    clear_ui::engine::run::<FilesystemApp>();
+    cce_ui::engine::run::<FilesystemApp>();
 }
diff --git a/src/pages/browse.rs b/src/pages/browse.rs
index 67bd6f1..6eccb8c 100644
--- a/src/pages/browse.rs
+++ b/src/pages/browse.rs
@@ -3,8 +3,8 @@ use std::os::unix::fs::PermissionsExt;
 use std::path::{Path, PathBuf};
 
 use crate::pages::PageContent;
-use clear_ui::widget::{Element, Breadcrumb, PathController};
-use clear_ui::layout::{ColumnLayout, LayoutStrategy};
+use cce_ui::widget::{Element, Breadcrumb, PathController};
+use cce_ui::layout::{ColumnLayout, LayoutStrategy};
 
 // ── Data ────────────────────────────────────────────────────────────
 
@@ -24,11 +24,11 @@ pub struct BrowseState {
     pub all_entries: Vec<DirEntry>,
     pub entries: Vec<DirEntry>,
     pub show_hidden: bool,
-    pub search_box: clear_ui::widget::TextBox,
-    pub list_box: clear_ui::widget::ScrollingList,
+    pub search_box: cce_ui::widget::TextBox,
+    pub list_box: cce_ui::widget::ScrollingList,
     pub selected: Option<usize>,
     pub breadcrumb: Breadcrumb,
-    pub save_name_box: clear_ui::widget::TextBox,
+    pub save_name_box: cce_ui::widget::TextBox,
 }
 
 impl Default for BrowseState {
@@ -42,13 +42,13 @@ impl Default for BrowseState {
             all_entries: Vec::new(),
             entries: Vec::new(),
             show_hidden: false,
-            search_box: clear_ui::widget::TextBox::new(String::new())
+            search_box: cce_ui::widget::TextBox::new(String::new())
                 .with_max_width(None)
                 .with_placeholder("Search"),
-            list_box: clear_ui::widget::ScrollingList::new(28.0, 2.0),
+            list_box: cce_ui::widget::ScrollingList::new(28.0, 2.0),
             selected: None,
             breadcrumb,
-            save_name_box: clear_ui::widget::TextBox::new(String::new()).with_max_width(None),
+            save_name_box: cce_ui::widget::TextBox::new(String::new()).with_max_width(None),
         };
         state.list_box.scroll_box.show_border = false;
         state.update_breadcrumb();
@@ -156,7 +156,7 @@ pub fn next_selection_index(state: &BrowseState, direction: BrowseNavigation) ->
 
 // ── View ────────────────────────────────────────────────────────────
 
-pub fn view(state: &mut BrowseState, cx: f32, cy: f32, cw: f32, ch: f32, select_mode: bool, ctx: &mut clear_ui::context::UiContext) -> PageContent {
+pub fn view(state: &mut BrowseState, cx: f32, cy: f32, cw: f32, ch: f32, select_mode: bool, ctx: &mut cce_ui::context::UiContext) -> PageContent {
     let mut pc = PageContent::new();
     let text_dim = [0.53, 0.53, 0.60, 1.0];
     let heading_fg = [0.56, 0.83, 0.56, 1.0]; // Color::from_rgb8(0x8f, 0xd4, 0x8f)
@@ -179,14 +179,14 @@ pub fn view(state: &mut BrowseState, cx: f32, cy: f32, cw: f32, ch: f32, select_
 
     // 1. Allocate and render Breadcrumb
     let (bx, by, bw, bh) = layout.allocate(client_w, breadcrumb_h);
-    clear_ui::layout::render_widget(&mut pc, &mut state.breadcrumb, bx, by, bw, bh, ctx);
+    cce_ui::layout::render_widget(&mut pc, &mut state.breadcrumb, bx, by, bw, bh, ctx);
 
     // 2. Allocate and render ScrollingList (ScrollBox)
     // The scrolling list height occupies the remaining vertical space:
     // list_h = client_h - breadcrumb_h - textbox_h - (2 * gap)
     let list_h_val = client_h - breadcrumb_h - textbox_h - 2.0 * gap;
     let (list_x, list_y, list_w, list_h) = layout.allocate(client_w, list_h_val);
-    clear_ui::layout::render_widget(&mut pc, &mut state.list_box, list_x, list_y, list_w, list_h, ctx);
+    cce_ui::layout::render_widget(&mut pc, &mut state.list_box, list_x, list_y, list_w, list_h, ctx);
 
     state.list_box.update_bounds(state.entries.len(), list_y, list_h);
 
@@ -212,17 +212,17 @@ pub fn view(state: &mut BrowseState, cx: f32, cy: f32, cw: f32, ch: f32, select_
         let search_x = tx;
         let search_w = sec_w;
         state.search_box.set_row_rect(search_x, search_w);
-        clear_ui::layout::render_widget(&mut pc, &mut state.search_box, search_x, ty, search_w, th, ctx);
+        cce_ui::layout::render_widget(&mut pc, &mut state.search_box, search_x, ty, search_w, th, ctx);
 
         // Right column: File Name
         let filename_x = tx + sec_w + 12.0;
         let filename_w = sec_w;
         state.save_name_box.set_row_rect(filename_x, filename_w);
-        clear_ui::layout::render_widget(&mut pc, &mut state.save_name_box, filename_x, ty, filename_w, th, ctx);
+        cce_ui::layout::render_widget(&mut pc, &mut state.save_name_box, filename_x, ty, filename_w, th, ctx);
     } else {
         // Full width search textbox
         state.search_box.set_row_rect(tx, tw);
-        clear_ui::layout::render_widget(&mut pc, &mut state.search_box, tx, ty, tw, th, ctx);
+        cce_ui::layout::render_widget(&mut pc, &mut state.search_box, tx, ty, tw, th, ctx);
     }
 
     for (idx, entry) in state.entries.iter().enumerate() {
@@ -429,8 +429,8 @@ mod tests {
                     modified: String::new(),
                 })
                 .collect(),
-            search_box: clear_ui::widget::TextBox::new(String::new()).with_max_width(None),
-            list_box: clear_ui::widget::ScrollingList::new(28.0, 2.0),
+            search_box: cce_ui::widget::TextBox::new(String::new()).with_max_width(None),
+            list_box: cce_ui::widget::ScrollingList::new(28.0, 2.0),
             ..BrowseState::default()
         }
     }
diff --git a/src/pages/mod.rs b/src/pages/mod.rs
index b1c229f..efa5e93 100644
--- a/src/pages/mod.rs
+++ b/src/pages/mod.rs
@@ -3,7 +3,7 @@ pub mod preview;
 pub mod network;
 pub mod settings;
 
-use clear_ui::layout::RenderTarget;
+use cce_ui::layout::RenderTarget;
 
 #[derive(Debug, Clone, Copy, PartialEq, Eq)]
 pub enum Page {
@@ -39,7 +39,7 @@ impl Page {
 pub struct PageContent {
     pub rects: Vec<([f32; 4], f32, f32, f32, f32)>,
     pub texts: Vec<(String, f32, f32, f32, [f32; 4], Option<String>, Option<[f32; 4]>)>,
-    pub buttons: Vec<(clear_ui::widget::Button, crate::Message)>,
+    pub buttons: Vec<(cce_ui::widget::Button, crate::Message)>,
 }
 
 impl PageContent {
@@ -75,7 +75,7 @@ impl PageContent {
         label_color: [f32; 4],
         action: crate::Message,
     ) {
-        let btn = clear_ui::widget::Button::new(x, y, w, h)
+        let btn = cce_ui::widget::Button::new(x, y, w, h)
             .with_label(label)
             .with_bg(bg)
             .with_hover_bg(hover_bg)
@@ -95,7 +95,7 @@ impl PageContent {
         label_color: [f32; 4],
         action: crate::Message,
     ) {
-        let btn = clear_ui::widget::Button::new(x, y, w, h)
+        let btn = cce_ui::widget::Button::new(x, y, w, h)
             .with_label(label)
             .with_bg(bg)
             .with_hover_bg(hover_bg)
diff --git a/src/pages/network.rs b/src/pages/network.rs
index faf8e5e..fbb6995 100644
--- a/src/pages/network.rs
+++ b/src/pages/network.rs
@@ -1,7 +1,7 @@
 use std::path::{Path, PathBuf};
 use crate::pages::PageContent;
 use crate::pages::browse::{BrowseState, DirEntry};
-use clear_ui::widget::{Graph, GraphNode, Element, Breadcrumb, GraphController, PathController};
+use cce_ui::widget::{Graph, GraphNode, Element, Breadcrumb, GraphController, PathController};
 
 pub struct NetworkState {
     pub graph: Graph,
@@ -112,11 +112,11 @@ impl NetworkState {
     }
 }
 
-pub fn view(state: &mut NetworkState, browse: &BrowseState, cx: f32, cy: f32, cw: f32, ch: f32, ctx: &mut clear_ui::context::UiContext) -> PageContent {
+pub fn view(state: &mut NetworkState, browse: &BrowseState, cx: f32, cy: f32, cw: f32, ch: f32, ctx: &mut cce_ui::context::UiContext) -> PageContent {
     let mut pc = PageContent::new();
 
     // Render the Breadcrumb widget into PageContent
-    clear_ui::layout::render_widget(&mut pc, &mut state.breadcrumb, cx + 4.0, cy + 6.0, cw - 16.0, 24.0, ctx);
+    cce_ui::layout::render_widget(&mut pc, &mut state.breadcrumb, cx + 4.0, cy + 6.0, cw - 16.0, 24.0, ctx);
 
     // Check if directory changed, or if last_dir is empty, and repopulate
     if state.last_dir != browse.current_dir || state.graph.get_nodes().is_empty() {
@@ -162,7 +162,7 @@ pub fn view(state: &mut NetworkState, browse: &BrowseState, cx: f32, cy: f32, cw
     }
 
     // Render the Graph widget into PageContent, shifted down by 28.0 to leave room for the breadcrumb
-    clear_ui::layout::render_widget(&mut pc, &mut state.graph, cx, cy + 28.0, cw, ch - 28.0, ctx);
+    cce_ui::layout::render_widget(&mut pc, &mut state.graph, cx, cy + 28.0, cw, ch - 28.0, ctx);
 
     pc
 }
diff --git a/src/pages/preview.rs b/src/pages/preview.rs
index d2dbbc7..27baaa4 100644
--- a/src/pages/preview.rs
+++ b/src/pages/preview.rs
@@ -1,7 +1,7 @@
 use std::path::PathBuf;
 
 use crate::pages::PageContent;
-use clear_ui::layout::SectionContext;
+use cce_ui::layout::SectionContext;
 
 // ── Data ────────────────────────────────────────────────────────────
 
@@ -30,7 +30,7 @@ pub enum PreviewMessage {
 
 
 impl PreviewState {
-    pub fn handle_mouse_wheel(&mut self, delta: &clear_ui::widget::MouseScrollDelta, ch: f32) -> bool {
+    pub fn handle_mouse_wheel(&mut self, delta: &cce_ui::widget::MouseScrollDelta, ch: f32) -> bool {
         let content = match &self.content_preview {
             Some(c) => c,
             None => return false,
@@ -53,10 +53,10 @@ impl PreviewState {
         let max_scroll = total_lines.saturating_sub(max_visible_lines);
         let scroll_speed = 3.0;
         let diff = match delta {
-            clear_ui::widget::MouseScrollDelta::LineDelta(_, y) => {
+            cce_ui::widget::MouseScrollDelta::LineDelta(_, y) => {
                 -y * scroll_speed
             }
-            clear_ui::widget::MouseScrollDelta::PixelDelta(pos) => {
+            cce_ui::widget::MouseScrollDelta::PixelDelta(pos) => {
                 -pos.y as f32 / 15.0
             }
         };
diff --git a/src/pages/settings.rs b/src/pages/settings.rs
index 9b70920..b9dcfa8 100644
--- a/src/pages/settings.rs
+++ b/src/pages/settings.rs
@@ -1,6 +1,6 @@
 use crate::pages::PageContent;
-use clear_ui::widget::{ColorSelector, Element};
-use clear_ui::layout::SectionContext;
+use cce_ui::widget::{ColorSelector, Element};
+use cce_ui::layout::SectionContext;
 
 // ── Data ────────────────────────────────────────────────────────────
 
@@ -10,7 +10,7 @@ pub struct SettingsState {
 
 impl Default for SettingsState {
     fn default() -> Self {
-        let col = clear_ui::color::node_color();
+        let col = cce_ui::color::node_color();
         let col_u8 = [
             (col[0] * 255.0) as u8,
             (col[1] * 255.0) as u8,
@@ -77,7 +77,7 @@ const SECTIONS: &[SectionData] = &[
 
 // ── View ────────────────────────────────────────────────────────────
 
-pub fn view(state: &mut SettingsState, cx: f32, cy: f32, cw: f32, _ch: f32, ctx: &mut clear_ui::context::UiContext) -> PageContent {
+pub fn view(state: &mut SettingsState, cx: f32, cy: f32, cw: f32, _ch: f32, ctx: &mut cce_ui::context::UiContext) -> PageContent {
     let mut pc = PageContent::new();
     let accent = [0.36, 0.56, 0.38, 1.0];
     let text_fg = [0.83, 0.83, 0.83, 1.0];
@@ -90,7 +90,7 @@ pub fn view(state: &mut SettingsState, cx: f32, cy: f32, cw: f32, _ch: f32, ctx:
     let cs_y = cy + 48.0;
 
     state.color_selector.set_row_rect(cx + 12.0, cs_w);
-    clear_ui::layout::render_widget(&mut pc, &mut state.color_selector, cx + 12.0, cs_y, cs_w, cs_h, ctx);
+    cce_ui::layout::render_widget(&mut pc, &mut state.color_selector, cx + 12.0, cs_y, cs_w, cs_h, ctx);
 
     let y = cs_y + cs_h + 32.0;