iris_hub/ui/components/
empty_state.rs1use eframe::egui::{self, RichText};
7use crate::ui::theme::ThemeColors;
8
9pub fn render_empty_state(ui: &mut egui::Ui) -> bool {
17 let mut create_clicked = false;
18
19 ui.vertical_centered(|ui| {
20 ui.add_space(80.0);
21
22 egui::Frame::none()
24 .fill(egui::Color32::from_rgb(30, 30, 38))
25 .rounding(24.0)
26 .inner_margin(egui::Margin::same(32.0))
27 .show(ui, |ui| {
28 ui.label(RichText::new("🌈").size(56.0));
29 });
30
31 ui.add_space(28.0);
32
33 ui.label(
34 RichText::new("Bem-vindo ao Iris!")
35 .size(28.0)
36 .strong()
37 .color(ThemeColors::TEXT_PRIMARY),
38 );
39
40 ui.add_space(8.0);
41
42 ui.label(
43 RichText::new("Seu hub de aplicações está vazio")
44 .size(16.0)
45 .color(egui::Color32::from_rgb(140, 140, 150)),
46 );
47
48 ui.add_space(24.0);
49
50 let btn = egui::Button::new(
52 RichText::new("➕ Criar primeira aplicação")
53 .size(15.0)
54 .color(ThemeColors::TEXT_PRIMARY),
55 )
56 .fill(ThemeColors::BTN_PRIMARY)
57 .rounding(12.0)
58 .min_size(egui::vec2(220.0, 44.0));
59
60 if ui.add(btn).clicked() {
61 create_clicked = true;
62 }
63
64 ui.add_space(16.0);
65
66 ui.label(
67 RichText::new("Configure comandos, escolha um ícone e execute com um clique!")
68 .size(12.0)
69 .color(ThemeColors::TEXT_MUTED),
70 );
71 });
72
73 create_clicked
74}
75
76pub fn render_no_results(ui: &mut egui::Ui, search_term: &str) {
82 ui.vertical_centered(|ui| {
83 ui.add_space(60.0);
84
85 egui::Frame::none()
86 .fill(egui::Color32::from_rgb(28, 28, 35))
87 .rounding(16.0)
88 .inner_margin(egui::Margin::same(24.0))
89 .show(ui, |ui| {
90 ui.label(RichText::new("🔍").size(32.0));
91 ui.add_space(12.0);
92 ui.label(
93 RichText::new("Nenhuma aplicação encontrada")
94 .size(16.0)
95 .color(ThemeColors::TEXT_SECONDARY),
96 );
97 ui.add_space(4.0);
98 ui.label(
99 RichText::new(format!("Nenhum resultado para \"{}\".", search_term))
100 .size(13.0)
101 .color(ThemeColors::TEXT_MUTED),
102 );
103 });
104 });
105}