extension_card.rs

 1use gpui::{AnyElement, prelude::*};
 2use smallvec::SmallVec;
 3use ui::prelude::*;
 4
 5#[derive(IntoElement)]
 6pub struct ExtensionCard {
 7    overridden_by_dev_extension: bool,
 8    children: SmallVec<[AnyElement; 2]>,
 9}
10
11impl ExtensionCard {
12    pub fn new() -> Self {
13        Self {
14            overridden_by_dev_extension: false,
15            children: SmallVec::new(),
16        }
17    }
18
19    pub const fn overridden_by_dev_extension(mut self, overridden: bool) -> Self {
20        self.overridden_by_dev_extension = overridden;
21        self
22    }
23}
24
25impl ParentElement for ExtensionCard {
26    fn extend(&mut self, elements: impl IntoIterator<Item = AnyElement>) {
27        self.children.extend(elements)
28    }
29}
30
31impl RenderOnce for ExtensionCard {
32    fn render(self, _window: &mut Window, cx: &mut App) -> impl IntoElement {
33        div().w_full().child(
34            v_flex()
35                .w_full()
36                .h(rems(7.))
37                .p_3()
38                .mt_4()
39                .gap_2()
40                .bg(cx.theme().colors().elevated_surface_background)
41                .border_1()
42                .border_color(cx.theme().colors().border)
43                .rounded_md()
44                .children(self.children)
45                .when(self.overridden_by_dev_extension, |card| {
46                    card.child(
47                        h_flex()
48                            .absolute()
49                            .top_0()
50                            .left_0()
51                            .block_mouse_except_scroll()
52                            .cursor_default()
53                            .size_full()
54                            .items_center()
55                            .justify_center()
56                            .bg(cx.theme().colors().elevated_surface_background.alpha(0.8))
57                            .child(Label::new("Overridden by dev extension.")),
58                    )
59                }),
60        )
61    }
62}