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