popover_menu.rs

 1use gpui::{div, overlay, AnyElement, Div, ParentElement, RenderOnce, Styled, WindowContext};
 2use smallvec::SmallVec;
 3
 4use crate::{prelude::*, Popover};
 5
 6// 🚧 Under Construction
 7
 8#[derive(IntoElement)]
 9pub struct PopoverMenu {
10    trigger: AnyElement,
11    children: SmallVec<[AnyElement; 2]>,
12}
13
14impl RenderOnce for PopoverMenu {
15    type Rendered = Div;
16
17    fn render(self, _cx: &mut WindowContext) -> Self::Rendered {
18        div()
19            .relative()
20            .child(self.trigger)
21            .child(overlay().child(Popover::new().children(self.children)))
22    }
23}
24
25impl PopoverMenu {
26    pub fn new(trigger: AnyElement) -> Self {
27        Self {
28            trigger,
29            children: SmallVec::new(),
30        }
31    }
32}
33
34impl ParentElement for PopoverMenu {
35    fn children_mut(&mut self) -> &mut SmallVec<[AnyElement; 2]> {
36        &mut self.children
37    }
38}