diff --git a/crates/storybook2/src/stories/components.rs b/crates/storybook2/src/stories/components.rs index 97ca15c0c40649201fe0145a0ef56c75c2e313ba..9016567de4a5fae782769bf2318519490032ad64 100644 --- a/crates/storybook2/src/stories/components.rs +++ b/crates/storybook2/src/stories/components.rs @@ -15,6 +15,7 @@ pub mod project_panel; pub mod tab; pub mod tab_bar; pub mod terminal; +pub mod theme_selector; pub mod title_bar; pub mod toast; pub mod toolbar; diff --git a/crates/storybook2/src/stories/components/theme_selector.rs b/crates/storybook2/src/stories/components/theme_selector.rs new file mode 100644 index 0000000000000000000000000000000000000000..b766a9afacd7038c61b6d979c074023a51b2c4d5 --- /dev/null +++ b/crates/storybook2/src/stories/components/theme_selector.rs @@ -0,0 +1,26 @@ +use std::marker::PhantomData; + +use ui::prelude::*; +use ui::ThemeSelector; + +use crate::story::Story; + +#[derive(Element)] +pub struct ThemeSelectorStory { + state_type: PhantomData, +} + +impl ThemeSelectorStory { + pub fn new() -> Self { + Self { + state_type: PhantomData, + } + } + + fn render(&mut self, cx: &mut ViewContext) -> impl Element { + Story::container(cx) + .child(Story::title_for::<_, ThemeSelector>(cx)) + .child(Story::label(cx, "Default")) + .child(ThemeSelector::new()) + } +} diff --git a/crates/storybook2/src/story_selector.rs b/crates/storybook2/src/story_selector.rs index 9e8ae772f984cadd6b6ffd556335cb51d95cf431..d75e14bd322776f563345fbc4b1a2fb392acad18 100644 --- a/crates/storybook2/src/story_selector.rs +++ b/crates/storybook2/src/story_selector.rs @@ -53,6 +53,7 @@ pub enum ComponentStory { Tab, TabBar, Terminal, + ThemeSelector, TitleBar, Toast, Toolbar, @@ -88,6 +89,7 @@ impl ComponentStory { Self::Tab => components::tab::TabStory::new().into_any(), Self::TabBar => components::tab_bar::TabBarStory::new().into_any(), Self::Terminal => components::terminal::TerminalStory::new().into_any(), + Self::ThemeSelector => components::theme_selector::ThemeSelectorStory::new().into_any(), Self::TitleBar => components::title_bar::TitleBarStory::new().into_any(), Self::Toast => components::toast::ToastStory::new().into_any(), Self::Toolbar => components::toolbar::ToolbarStory::new().into_any(), diff --git a/crates/ui2/src/components.rs b/crates/ui2/src/components.rs index 185e76e749d60cc64a8f7285ea12d16da16e8f55..a9557baac6eecf0bb1415e998621f50cb19ed99e 100644 --- a/crates/ui2/src/components.rs +++ b/crates/ui2/src/components.rs @@ -21,6 +21,7 @@ mod status_bar; mod tab; mod tab_bar; mod terminal; +mod theme_selector; mod title_bar; mod toast; mod toolbar; @@ -50,6 +51,7 @@ pub use status_bar::*; pub use tab::*; pub use tab_bar::*; pub use terminal::*; +pub use theme_selector::*; pub use title_bar::*; pub use toast::*; pub use toolbar::*; diff --git a/crates/ui2/src/components/theme_selector.rs b/crates/ui2/src/components/theme_selector.rs new file mode 100644 index 0000000000000000000000000000000000000000..d51b5c74264a9f03d5327b18d46fe6c7730e8bc1 --- /dev/null +++ b/crates/ui2/src/components/theme_selector.rs @@ -0,0 +1,41 @@ +use std::marker::PhantomData; + +use crate::prelude::*; +use crate::{OrderMethod, Palette, PaletteItem}; + +#[derive(Element)] +pub struct ThemeSelector { + state_type: PhantomData, + scroll_state: ScrollState, +} + +impl ThemeSelector { + pub fn new() -> Self { + Self { + state_type: PhantomData, + scroll_state: ScrollState::default(), + } + } + + fn render(&mut self, cx: &mut ViewContext) -> impl Element { + div().child( + Palette::new(self.scroll_state.clone()) + .items(vec![ + PaletteItem::new("One Dark"), + PaletteItem::new("Rosé Pine"), + PaletteItem::new("Rosé Pine Moon"), + PaletteItem::new("Sandcastle"), + PaletteItem::new("Solarized Dark"), + PaletteItem::new("Summercamp"), + PaletteItem::new("Atelier Cave Light"), + PaletteItem::new("Atelier Dune Light"), + PaletteItem::new("Atelier Estuary Light"), + PaletteItem::new("Atelier Forest Light"), + PaletteItem::new("Atelier Heath Light"), + ]) + .placeholder("Select Theme...") + .empty_string("No matches") + .default_order(OrderMethod::Ascending), + ) + } +}