Skip to main content

gpui_macos/
sheet.rs

1//! Edge-attached modal details, with dismissal and focus trapping owned by base.
2use crate::{ActiveTheme, dialog_backdrop};
3use gpui_kit::rems;
4use gpui_kit::{App, Div, FocusHandle, div, prelude::*, relative};
5
6/// Focus `focus` when opening; restore the trigger in `request_close`.
7pub fn sheet(focus: &FocusHandle, cx: &mut App) -> gpui_kit::base::Sheet {
8    gpui_kit::base::Sheet::new(cx)
9        .focus_handle(focus.clone())
10        .overlay(dialog_backdrop())
11}
12
13/// Floating right-edge sheet. Override width through the normal styling API.
14pub fn sheet_surface(cx: &App) -> Div {
15    let t = cx.macos();
16    div()
17        .absolute()
18        .right(rems(0.75))
19        .top(rems(0.75))
20        .bottom(rems(0.75))
21        .w(rems(22.5))
22        .max_w(relative(1.))
23        .flex()
24        .flex_col()
25        .gap(rems(0.875))
26        .p(rems(1.125))
27        .border_1()
28        .rounded(rems(1.125))
29        .border_color(t.glass_border())
30        .bg(t.surface)
31        .shadow(t.popover_shadow())
32        .font_family(t.font.clone())
33        .text_size(rems(0.8125))
34        .text_color(t.foreground)
35        .occlude()
36}