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}