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}