1use std::path::PathBuf;
2use std::str::FromStr;
3use std::sync::Arc;
4
5use ui::prelude::*;
6use ui::{theme, Breadcrumb, HighlightColor, HighlightedText, Icon, IconButton, Symbol, Toolbar};
7
8use crate::story::Story;
9
10#[derive(Element, Default)]
11pub struct ToolbarStory {}
12
13impl ToolbarStory {
14 fn render<V: 'static>(&mut self, _: &mut V, cx: &mut ViewContext<V>) -> impl IntoElement<V> {
15 let theme = theme(cx);
16
17 struct LeftItemsPayload {
18 pub theme: Arc<Theme>,
19 }
20
21 Story::container(cx)
22 .child(Story::title_for::<_, Toolbar<V>>(cx))
23 .child(Story::label(cx, "Default"))
24 .child(Toolbar::new(
25 |_, payload| {
26 let payload = payload.downcast_ref::<LeftItemsPayload>().unwrap();
27
28 let theme = payload.theme.clone();
29
30 vec![Breadcrumb::new(
31 PathBuf::from_str("crates/ui/src/components/toolbar.rs").unwrap(),
32 vec![
33 Symbol(vec![
34 HighlightedText {
35 text: "impl ".to_string(),
36 color: HighlightColor::Keyword.hsla(&theme),
37 },
38 HighlightedText {
39 text: "ToolbarStory".to_string(),
40 color: HighlightColor::Function.hsla(&theme),
41 },
42 ]),
43 Symbol(vec![
44 HighlightedText {
45 text: "fn ".to_string(),
46 color: HighlightColor::Keyword.hsla(&theme),
47 },
48 HighlightedText {
49 text: "render".to_string(),
50 color: HighlightColor::Function.hsla(&theme),
51 },
52 ]),
53 ],
54 )
55 .into_any()]
56 },
57 Box::new(LeftItemsPayload {
58 theme: theme.clone(),
59 }),
60 |_, _| {
61 vec![
62 IconButton::new(Icon::InlayHint).into_any(),
63 IconButton::new(Icon::MagnifyingGlass).into_any(),
64 IconButton::new(Icon::MagicWand).into_any(),
65 ]
66 },
67 Box::new(()),
68 ))
69 }
70}