Merge branch 'gpui2' into zed2

This commit is contained in:
Marshall Bowers 2023-10-24 14:11:13 +02:00
commit bb35583998
19 changed files with 115 additions and 60 deletions

View file

@ -45,7 +45,7 @@ impl<S: 'static + Send + Sync> AssistantPanel<S> {
.child(
div()
.flex()
.child(IconButton::new(Icon::Menu))
.child(IconButton::new("menu", Icon::Menu))
.child(Label::new("New Conversation")),
)
.child(
@ -53,11 +53,11 @@ impl<S: 'static + Send + Sync> AssistantPanel<S> {
.flex()
.items_center()
.gap_px()
.child(IconButton::new(Icon::SplitMessage))
.child(IconButton::new(Icon::Quote))
.child(IconButton::new(Icon::MagicWand))
.child(IconButton::new(Icon::Plus))
.child(IconButton::new(Icon::Maximize)),
.child(IconButton::new("split_message", Icon::SplitMessage))
.child(IconButton::new("quote", Icon::Quote))
.child(IconButton::new("magic_wand", Icon::MagicWand))
.child(IconButton::new("plus", Icon::Plus))
.child(IconButton::new("maximize", Icon::Maximize)),
),
)
// Chat Body

View file

@ -32,7 +32,7 @@ impl BufferSearch {
h_stack().bg(color.toolbar).p_2().child(
h_stack().child(Input::new("Search")).child(
IconButton::<Self>::new(Icon::Replace)
IconButton::<Self>::new("replace", Icon::Replace)
.when(self.is_replace_open, |this| this.color(IconColor::Accent))
.on_click(|buffer_search, cx| {
buffer_search.toggle_replace(cx);

View file

@ -45,8 +45,8 @@ impl<S: 'static + Send + Sync> ChatPanel<S> {
.flex()
.items_center()
.gap_px()
.child(IconButton::new(Icon::File))
.child(IconButton::new(Icon::AudioOn)),
.child(IconButton::new("file", Icon::File))
.child(IconButton::new("audio_on", Icon::AudioOn)),
),
)
.child(

View file

@ -61,15 +61,15 @@ impl EditorPane {
Toolbar::new()
.left_item(Breadcrumb::new(self.path.clone(), self.symbols.clone()))
.right_items(vec![
IconButton::new(Icon::InlayHint),
IconButton::<Self>::new(Icon::MagnifyingGlass)
IconButton::new("toggle_inlay_hints", Icon::InlayHint),
IconButton::<Self>::new("buffer_search", Icon::MagnifyingGlass)
.when(self.is_buffer_search_open, |this| {
this.color(IconColor::Accent)
})
.on_click(|editor, cx| {
editor.toggle_buffer_search(cx);
}),
IconButton::new(Icon::MagicWand),
IconButton::new("inline_assist", Icon::MagicWand),
]),
)
.children(Some(self.buffer_search.clone()).filter(|_| self.is_buffer_search_open))

View file

@ -19,6 +19,7 @@ impl<S: 'static + Send + Sync> Default for IconButtonHandlers<S> {
#[derive(Element)]
pub struct IconButton<S: 'static + Send + Sync> {
state_type: PhantomData<S>,
id: ElementId,
icon: Icon,
color: IconColor,
variant: ButtonVariant,
@ -27,9 +28,10 @@ pub struct IconButton<S: 'static + Send + Sync> {
}
impl<S: 'static + Send + Sync> IconButton<S> {
pub fn new(icon: Icon) -> Self {
pub fn new(id: impl Into<ElementId>, icon: Icon) -> Self {
Self {
state_type: PhantomData,
id: id.into(),
icon,
color: IconColor::default(),
variant: ButtonVariant::default(),
@ -88,8 +90,7 @@ impl<S: 'static + Send + Sync> IconButton<S> {
};
let mut button = h_stack()
// TODO: We probably need a more robust method for differentiating `IconButton`s from one another.
.id(SharedString::from(format!("{:?}", self.icon)))
.id(self.id.clone())
.justify_center()
.rounded_md()
.py(ui_size(cx, 0.25))

View file

@ -511,9 +511,11 @@ impl<S: 'static + Send + Sync> ListDetailsEntry<S> {
.w_full()
.line_height(relative(1.2))
.child(Label::new(self.label.clone()).color(label_color))
.when(self.meta.is_some(), |this| {
this.child(Label::new(self.meta.clone().unwrap()).color(LabelColor::Muted))
})
.children(
self.meta
.take()
.map(|meta| Label::new(meta).color(LabelColor::Muted)),
)
.child(
h_stack()
.gap_1()

View file

@ -60,7 +60,7 @@ impl<S: 'static + Send + Sync> Modal<S> {
.border_b()
.border_color(color.border)
.child(div().children(self.title.clone().map(|t| Label::new(t))))
.child(IconButton::new(Icon::Close)),
.child(IconButton::new("close", Icon::Close)),
)
.child(v_stack().p_1().children(self.children.drain(..)))
.when(

View file

@ -34,7 +34,7 @@ impl<S: 'static + Send + Sync + Clone> MultiBuffer<S> {
.p_4()
.bg(color.editor_subheader)
.child(Label::new("main.rs"))
.child(IconButton::new(Icon::ArrowUpRight)),
.child(IconButton::new("arrow_up_right", Icon::ArrowUpRight)),
)
.child(buffer)
}))

View file

@ -113,7 +113,7 @@ impl StatusBar {
.items_center()
.gap_1()
.child(
IconButton::<Workspace>::new(Icon::FileTree)
IconButton::<Workspace>::new("project_panel", Icon::FileTree)
.when(workspace.is_project_panel_open(), |this| {
this.color(IconColor::Accent)
})
@ -122,7 +122,7 @@ impl StatusBar {
}),
)
.child(
IconButton::<Workspace>::new(Icon::Hash)
IconButton::<Workspace>::new("collab_panel", Icon::Hash)
.when(workspace.is_collab_panel_open(), |this| {
this.color(IconColor::Accent)
})
@ -131,7 +131,7 @@ impl StatusBar {
}),
)
.child(ToolDivider::new())
.child(IconButton::new(Icon::XCircle))
.child(IconButton::new("diagnostics", Icon::XCircle))
}
fn right_tools(
@ -164,11 +164,11 @@ impl StatusBar {
.items_center()
.gap_1()
.child(
IconButton::new(Icon::Copilot)
IconButton::new("copilot", Icon::Copilot)
.on_click(|_, _| println!("Copilot clicked.")),
)
.child(
IconButton::new(Icon::Envelope)
IconButton::new("envelope", Icon::Envelope)
.on_click(|_, _| println!("Send Feedback clicked.")),
),
)
@ -179,7 +179,7 @@ impl StatusBar {
.items_center()
.gap_1()
.child(
IconButton::<Workspace>::new(Icon::Terminal)
IconButton::<Workspace>::new("terminal", Icon::Terminal)
.when(workspace.is_terminal_open(), |this| {
this.color(IconColor::Accent)
})
@ -188,7 +188,7 @@ impl StatusBar {
}),
)
.child(
IconButton::<Workspace>::new(Icon::MessageBubbles)
IconButton::<Workspace>::new("chat_panel", Icon::MessageBubbles)
.when(workspace.is_chat_panel_open(), |this| {
this.color(IconColor::Accent)
})
@ -197,7 +197,7 @@ impl StatusBar {
}),
)
.child(
IconButton::<Workspace>::new(Icon::Ai)
IconButton::<Workspace>::new("assistant_panel", Icon::Ai)
.when(workspace.is_assistant_panel_open(), |this| {
this.color(IconColor::Accent)
})

View file

@ -51,11 +51,11 @@ impl<S: 'static + Send + Sync + Clone> TabBar<S> {
.items_center()
.gap_px()
.child(
IconButton::new(Icon::ArrowLeft)
IconButton::new("arrow_left", Icon::ArrowLeft)
.state(InteractionState::Enabled.if_enabled(can_navigate_back)),
)
.child(
IconButton::new(Icon::ArrowRight).state(
IconButton::new("arrow_right", Icon::ArrowRight).state(
InteractionState::Enabled.if_enabled(can_navigate_forward),
),
),
@ -83,8 +83,8 @@ impl<S: 'static + Send + Sync + Clone> TabBar<S> {
.flex()
.items_center()
.gap_px()
.child(IconButton::new(Icon::Plus))
.child(IconButton::new(Icon::Split)),
.child(IconButton::new("plus", Icon::Plus))
.child(IconButton::new("split", Icon::Split)),
),
)
}

View file

@ -40,11 +40,11 @@ impl<S: 'static + Send + Sync + Clone> Terminal<S> {
.items_center()
.gap_px()
.child(
IconButton::new(Icon::ArrowLeft).state(
IconButton::new("arrow_left", Icon::ArrowLeft).state(
InteractionState::Enabled.if_enabled(can_navigate_back),
),
)
.child(IconButton::new(Icon::ArrowRight).state(
.child(IconButton::new("arrow_right", Icon::ArrowRight).state(
InteractionState::Enabled.if_enabled(can_navigate_forward),
)),
),

View file

@ -128,7 +128,7 @@ impl TitleBar {
.child(Button::new("nate/gpui2-ui-components")),
)
.children(player_list.map(|p| PlayerStack::new(p)))
.child(IconButton::new(Icon::Plus)),
.child(IconButton::new("plus", Icon::Plus)),
)
.child(
div()
@ -140,8 +140,8 @@ impl TitleBar {
.flex()
.items_center()
.gap_1()
.child(IconButton::new(Icon::FolderX))
.child(IconButton::new(Icon::Exit)),
.child(IconButton::new("folder_x", Icon::FolderX))
.child(IconButton::new("exit", Icon::Exit)),
)
.child(ToolDivider::new())
.child(
@ -151,17 +151,17 @@ impl TitleBar {
.items_center()
.gap_1()
.child(
IconButton::<TitleBar>::new(Icon::Mic)
IconButton::<TitleBar>::new("toggle_mic_status", Icon::Mic)
.when(self.is_mic_muted(), |this| this.color(IconColor::Error))
.on_click(|title_bar, cx| title_bar.toggle_mic_status(cx)),
)
.child(
IconButton::<TitleBar>::new(Icon::AudioOn)
IconButton::<TitleBar>::new("toggle_deafened", Icon::AudioOn)
.when(self.is_deafened, |this| this.color(IconColor::Error))
.on_click(|title_bar, cx| title_bar.toggle_deafened(cx)),
)
.child(
IconButton::<TitleBar>::new(Icon::Screen)
IconButton::<TitleBar>::new("toggle_screen_share", Icon::Screen)
.when(
self.screen_share_status == ScreenShareStatus::Shared,
|this| this.color(IconColor::Accent),

View file

@ -130,9 +130,9 @@ mod stories {
],
))
.right_items(vec![
IconButton::new(Icon::InlayHint),
IconButton::new(Icon::MagnifyingGlass),
IconButton::new(Icon::MagicWand),
IconButton::new("toggle_inlay_hints", Icon::InlayHint),
IconButton::new("buffer_search", Icon::MagnifyingGlass),
IconButton::new("inline_assist", Icon::MagicWand),
]),
)
}

View file

@ -208,7 +208,7 @@ impl Workspace {
.size_full()
.flex()
.flex_col()
.font("Zed Sans Extended")
.font("Zed Sans")
.gap_0()
.justify_start()
.items_start()

View file

@ -38,6 +38,7 @@ impl<S: 'static + Send + Sync> Details<S> {
.gap_0p5()
.text_xs()
.text_color(color.text)
.size_full()
.child(self.text)
.children(self.meta.map(|m| m))
.children(self.actions.take().map(|a| a))
@ -49,7 +50,7 @@ pub use stories::*;
#[cfg(feature = "stories")]
mod stories {
use crate::Story;
use crate::{Button, Story};
use super::*;
@ -79,6 +80,15 @@ mod stories {
Details::new("The quick brown fox jumps over the lazy dog")
.meta_text("Sphinx of black quartz, judge my vow."),
)
.child(Story::label(cx, "With meta and actions"))
.child(
Details::new("The quick brown fox jumps over the lazy dog")
.meta_text("Sphinx of black quartz, judge my vow.")
.actions(ButtonGroup::new(vec![
Button::new("Decline"),
Button::new("Accept").variant(crate::ButtonVariant::Filled),
])),
)
}
}
}

View file

@ -14,7 +14,7 @@ impl Story {
.flex_col()
.pt_2()
.px_4()
.font("Zed Mono Extended")
.font("Zed Mono")
.bg(color.background)
}