prev/next A2UI surface and better dismissal
This commit is contained in:
@@ -39,6 +39,8 @@ const ICON_SPARK: &[u8] = include_bytes!("../../assets/icons/spark.svg");
|
||||
const ICON_PIN: &[u8] = include_bytes!("../../assets/icons/pin.svg");
|
||||
const ICON_SIDEBAR: &[u8] = include_bytes!("../../assets/icons/sidebar.svg");
|
||||
const ICON_ARCHIVE: &[u8] = include_bytes!("../../assets/icons/archive.svg");
|
||||
const ICON_ARROW_LEFT: &[u8] = include_bytes!("../../assets/icons/arrow-left.svg");
|
||||
const ICON_ARROW_RIGHT: &[u8] = include_bytes!("../../assets/icons/arrow-right.svg");
|
||||
|
||||
/// Height of the strip the window content shares with the native title bar.
|
||||
/// Keep it close to the 28pt macOS title bar so our controls line up with the
|
||||
@@ -70,6 +72,7 @@ impl App {
|
||||
|| self.pending_project_path.is_some()
|
||||
|| self.session_rename.is_some()
|
||||
|| self.menu_session().is_some()
|
||||
|| self.pending_a2ui_dismissal.is_some()
|
||||
|| !self.a2ui_modals.is_empty()
|
||||
|| {
|
||||
#[cfg(target_os = "macos")]
|
||||
@@ -135,6 +138,8 @@ impl App {
|
||||
layers.push(self.rename_dialog(title));
|
||||
} else if let Some(session) = self.menu_session() {
|
||||
layers.push(self.session_menu_panel(session));
|
||||
} else if let Some(surface_id) = &self.pending_a2ui_dismissal {
|
||||
layers.push(self.a2ui_dismiss_panel(surface_id));
|
||||
} else if let Some(panel) = self.a2ui_modal_panel() {
|
||||
layers.push(panel);
|
||||
}
|
||||
@@ -147,6 +152,8 @@ impl App {
|
||||
layers.push(self.rename_dialog(title));
|
||||
} else if let Some(session) = self.menu_session() {
|
||||
layers.push(self.session_menu_panel(session));
|
||||
} else if let Some(surface_id) = &self.pending_a2ui_dismissal {
|
||||
layers.push(self.a2ui_dismiss_panel(surface_id));
|
||||
} else if let Some(panel) = self.a2ui_modal_panel() {
|
||||
layers.push(panel);
|
||||
}
|
||||
@@ -604,6 +611,37 @@ impl App {
|
||||
)
|
||||
}
|
||||
|
||||
fn a2ui_dismiss_panel<'a>(&self, surface_id: &'a str) -> Element<'a, Message> {
|
||||
let dialog = container(
|
||||
column![
|
||||
text("Dismiss A2UI surface?").size(24),
|
||||
text(format!(
|
||||
"The `{surface_id}` surface will be hidden permanently. The next generated UI starts as a new surface."
|
||||
))
|
||||
.size(14),
|
||||
row![
|
||||
Space::new().width(Length::Fill),
|
||||
action_button("Cancel").on_press(Message::DismissPanel),
|
||||
action_button("Dismiss surface").on_press(Message::ConfirmA2uiDismiss),
|
||||
]
|
||||
.spacing(8),
|
||||
]
|
||||
.spacing(12),
|
||||
)
|
||||
.padding(22)
|
||||
.width(460)
|
||||
.style(overview_style);
|
||||
|
||||
opaque(
|
||||
container(dialog)
|
||||
.center_x(Length::Fill)
|
||||
.center_y(Length::Fill)
|
||||
.style(|_| {
|
||||
container::Style::default().background(Color::from_rgba8(0, 0, 0, 0.68))
|
||||
}),
|
||||
)
|
||||
}
|
||||
|
||||
pub(super) fn selected_project(&self) -> Option<&ProjectWithSessions> {
|
||||
self.projects
|
||||
.iter()
|
||||
|
||||
Reference in New Issue
Block a user