use std::marker::PhantomData; use crate::prelude::*; use crate::{OrderMethod, Palette, PaletteItem}; #[derive(Element)] pub struct RecentProjects { state_type: PhantomData, scroll_state: ScrollState, } impl RecentProjects { 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("zed").sublabel("~/projects/zed"), PaletteItem::new("saga").sublabel("~/projects/saga"), PaletteItem::new("journal").sublabel("~/journal"), PaletteItem::new("dotfiles").sublabel("~/dotfiles"), PaletteItem::new("zed.dev").sublabel("~/projects/zed.dev"), PaletteItem::new("laminar").sublabel("~/projects/laminar"), ]) .placeholder("Recent Projects...") .empty_string("No matches") .default_order(OrderMethod::Ascending), ) } } #[cfg(feature = "stories")] pub use stories::*; #[cfg(feature = "stories")] mod stories { use crate::Story; use super::*; #[derive(Element)] pub struct RecentProjectsStory { state_type: PhantomData, } impl RecentProjectsStory { pub fn new() -> Self { Self { state_type: PhantomData, } } fn render(&mut self, cx: &mut ViewContext) -> impl Element { Story::container(cx) .child(Story::title_for::<_, RecentProjects>(cx)) .child(Story::label(cx, "Default")) .child(RecentProjects::new()) } } }