iris_hub/ui/components/
header.rs1use eframe::egui::{self, RichText};
7use crate::ui::theme::ThemeColors;
8
9pub struct HeaderActions {
11 pub add_app_clicked: bool,
12 pub export_clicked: bool,
13 pub import_clicked: bool,
14}
15
16impl Default for HeaderActions {
17 fn default() -> Self {
18 Self {
19 add_app_clicked: false,
20 export_clicked: false,
21 import_clicked: false,
22 }
23 }
24}
25
26pub fn render_header(ui: &mut egui::Ui, search_filter: &mut String) -> HeaderActions {
35 let mut actions = HeaderActions::default();
36
37 ui.horizontal(|ui| {
38 ui.heading(RichText::new("🌈").size(32.0));
40 ui.add_space(8.0);
41 ui.vertical(|ui| {
42 ui.add_space(2.0);
43 ui.label(
44 RichText::new("Iris")
45 .size(24.0)
46 .strong()
47 .color(ThemeColors::TEXT_PRIMARY),
48 );
49 ui.label(
50 RichText::new("Mensageira dos Devs")
51 .size(11.0)
52 .color(egui::Color32::from_rgb(140, 140, 150)),
53 );
54 });
55
56 ui.with_layout(egui::Layout::right_to_left(egui::Align::Center), |ui| {
57 let add_btn = egui::Button::new(
59 RichText::new("➕ Nova Aplicação")
60 .size(14.0)
61 .color(ThemeColors::TEXT_PRIMARY),
62 )
63 .fill(ThemeColors::BTN_PRIMARY)
64 .rounding(10.0)
65 .min_size(egui::vec2(140.0, 38.0));
66
67 if ui.add(add_btn).clicked() {
68 actions.add_app_clicked = true;
69 }
70
71 ui.add_space(8.0);
72
73 ui.menu_button(
75 RichText::new("⚙")
76 .size(16.0)
77 .color(ThemeColors::TEXT_SECONDARY),
78 |ui| {
79 ui.set_min_width(160.0);
80
81 if ui.button("📤 Exportar configurações").clicked() {
82 actions.export_clicked = true;
83 ui.close_menu();
84 }
85
86 if ui.button("📥 Importar configurações").clicked() {
87 actions.import_clicked = true;
88 ui.close_menu();
89 }
90
91 ui.separator();
92
93 ui.label(
94 RichText::new("Compartilhe suas configurações!")
95 .size(10.0)
96 .color(egui::Color32::from_rgb(120, 120, 130))
97 );
98 }
99 );
100
101 ui.add_space(16.0);
102
103 egui::Frame::none()
105 .fill(ThemeColors::BG_INPUT)
106 .rounding(10.0)
107 .inner_margin(egui::Margin::symmetric(12.0, 8.0))
108 .show(ui, |ui| {
109 ui.horizontal(|ui| {
110 ui.label(
111 RichText::new("🔍")
112 .size(14.0)
113 .color(egui::Color32::from_rgb(120, 120, 130)),
114 );
115 ui.add(
116 egui::TextEdit::singleline(search_filter)
117 .desired_width(180.0)
118 .frame(false)
119 .hint_text(
120 RichText::new("Buscar aplicações...")
121 .color(ThemeColors::TEXT_MUTED)
122 ),
123 );
124 });
125 });
126 });
127 });
128
129 actions
130}