list_item.rs

  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}