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 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                .mt_4()
36                .w_full()
37                .h(rems_from_px(110.))
38                .p_3()
39                .gap_2()
40                .bg(cx.theme().colors().elevated_surface_background.opacity(0.5))
41                .border_1()
42                .border_color(cx.theme().colors().border_variant)
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                            .justify_center()
55                            .bg(cx.theme().colors().elevated_surface_background.alpha(0.8))
56                            .child(Label::new("Overridden by dev extension.")),
57                    )
58                }),
59        )
60    }
61}