1use gpui::{Render, SharedUrl};
2use story::Story;
3
4use crate::{prelude::*, Avatar};
5use crate::{IconName, ListItem};
6
7pub struct ListItemStory;
8
9impl Render for ListItemStory {
10 fn render(&mut self, cx: &mut ViewContext<Self>) -> impl IntoElement {
11 Story::container()
12 .bg(cx.theme().colors().background)
13 .child(Story::title_for::<ListItem>())
14 .child(Story::label("Default"))
15 .child(ListItem::new("hello_world").child("Hello, world!"))
16 .child(Story::label("Inset"))
17 .child(
18 ListItem::new("inset_list_item")
19 .inset(true)
20 .start_slot(
21 Icon::new(IconName::Bell)
22 .size(IconSize::Small)
23 .color(Color::Muted),
24 )
25 .child("Hello, world!")
26 .end_slot(
27 Icon::new(IconName::Bell)
28 .size(IconSize::Small)
29 .color(Color::Muted),
30 ),
31 )
32 .child(Story::label("With start slot icon"))
33 .child(
34 ListItem::new("with start slot_icon")
35 .child("Hello, world!")
36 .start_slot(
37 Icon::new(IconName::Bell)
38 .size(IconSize::Small)
39 .color(Color::Muted),
40 ),
41 )
42 .child(Story::label("With start slot avatar"))
43 .child(
44 ListItem::new("with_start slot avatar")
45 .child("Hello, world!")
46 .start_slot(Avatar::new(SharedUrl::from(
47 "https://avatars.githubusercontent.com/u/1714999?v=4",
48 ))),
49 )
50 .child(Story::label("With end slot"))
51 .child(
52 ListItem::new("with_left_avatar")
53 .child("Hello, world!")
54 .end_slot(Avatar::new(SharedUrl::from(
55 "https://avatars.githubusercontent.com/u/1714999?v=4",
56 ))),
57 )
58 .child(Story::label("With end hover slot"))
59 .child(
60 ListItem::new("with_end_hover_slot")
61 .child("Hello, world!")
62 .end_slot(
63 h_stack()
64 .gap_2()
65 .child(Avatar::new(SharedUrl::from(
66 "https://avatars.githubusercontent.com/u/1789?v=4",
67 )))
68 .child(Avatar::new(SharedUrl::from(
69 "https://avatars.githubusercontent.com/u/1789?v=4",
70 )))
71 .child(Avatar::new(SharedUrl::from(
72 "https://avatars.githubusercontent.com/u/1789?v=4",
73 )))
74 .child(Avatar::new(SharedUrl::from(
75 "https://avatars.githubusercontent.com/u/1789?v=4",
76 )))
77 .child(Avatar::new(SharedUrl::from(
78 "https://avatars.githubusercontent.com/u/1789?v=4",
79 ))),
80 )
81 .end_hover_slot(Avatar::new(SharedUrl::from(
82 "https://avatars.githubusercontent.com/u/1714999?v=4",
83 ))),
84 )
85 .child(Story::label("With `on_click`"))
86 .child(
87 ListItem::new("with_on_click")
88 .child("Click me")
89 .on_click(|_event, _cx| {
90 println!("Clicked!");
91 }),
92 )
93 .child(Story::label("With `on_secondary_mouse_down`"))
94 .child(
95 ListItem::new("with_on_secondary_mouse_down")
96 .child("Right click me")
97 .on_secondary_mouse_down(|_event, _cx| {
98 println!("Right mouse down!");
99 }),
100 )
101 }
102}