1use gpui::{
2 div, AnyElement, Div, ElementId, IntoElement, ParentElement as _, RenderOnce, Styled,
3 WindowContext,
4};
5
6#[derive(Default, IntoElement)]
7pub struct FacePile {
8 pub faces: Vec<AnyElement>,
9}
10
11impl RenderOnce for FacePile {
12 type Rendered = Div;
13
14 fn render(self, _: &mut WindowContext) -> Self::Rendered {
15 let player_count = self.faces.len();
16 let player_list = self.faces.into_iter().enumerate().map(|(ix, player)| {
17 let isnt_last = ix < player_count - 1;
18
19 div()
20 .z_index((player_count - ix) as u32)
21 .when(isnt_last, |div| div.neg_mr_1())
22 .child(player)
23 });
24 div().p_1().flex().items_center().children(player_list)
25 }
26}
27
28impl Extend<AnyElement> for FacePile {
29 fn extend<T: IntoIterator<Item = AnyElement>>(&mut self, children: T) {
30 self.faces.extend(children);
31 }
32}