1use gpui::{div, overlay, px, 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 .bg(gpui::green())
20 .relative()
21 .child(div().bg(gpui::blue()).child(self.trigger))
22 .child(
23 overlay()
24 .position(gpui::Point {
25 x: px(100.),
26 y: px(100.),
27 })
28 .anchor(gpui::AnchorCorner::TopRight)
29 .child(Popover::new().children(self.children)),
30 )
31 }
32}
33
34impl PopoverMenu {
35 pub fn new(trigger: AnyElement) -> Self {
36 Self {
37 trigger,
38 children: SmallVec::new(),
39 }
40 }
41}
42
43impl ParentElement for PopoverMenu {
44 fn children_mut(&mut self) -> &mut SmallVec<[AnyElement; 2]> {
45 &mut self.children
46 }
47}