diff --git a/crates/assistant2/src/assistant_panel.rs b/crates/assistant2/src/assistant_panel.rs index 2ab28077f1..07902b5c83 100644 --- a/crates/assistant2/src/assistant_panel.rs +++ b/crates/assistant2/src/assistant_panel.rs @@ -323,10 +323,11 @@ impl AssistantPanel { .when(!recent_threads.is_empty(), |parent| { parent .child( - h_flex() - .w_full() - .justify_center() - .child(Label::new("Recent Threads:").size(LabelSize::Small)), + h_flex().w_full().justify_center().child( + Label::new("Recent Threads:") + .size(LabelSize::Small) + .color(Color::Muted), + ), ) .child( v_flex().gap_2().children( diff --git a/crates/assistant2/src/thread_history.rs b/crates/assistant2/src/thread_history.rs index f183276f7b..3eb333688a 100644 --- a/crates/assistant2/src/thread_history.rs +++ b/crates/assistant2/src/thread_history.rs @@ -2,7 +2,7 @@ use gpui::{ uniform_list, AppContext, FocusHandle, FocusableView, Model, UniformListScrollHandle, WeakView, }; use time::{OffsetDateTime, UtcOffset}; -use ui::{prelude::*, IconButtonShape, ListItem}; +use ui::{prelude::*, IconButtonShape, ListItem, ListItemSpacing, Tooltip}; use crate::thread::Thread; use crate::thread_store::ThreadStore; @@ -117,17 +117,25 @@ impl RenderOnce for PastThread { .unwrap_or(UtcOffset::UTC), time_format::TimestampFormat::EnhancedAbsolute, ); + ListItem::new(("past-thread", self.thread.entity_id())) + .outlined() .start_slot(Icon::new(IconName::MessageBubbles)) - .child(Label::new(summary)) + .spacing(ListItemSpacing::Sparse) + .child(Label::new(summary).size(LabelSize::Small)) .end_slot( h_flex() .gap_2() - .child(Label::new(thread_timestamp).color(Color::Disabled)) + .child( + Label::new(thread_timestamp) + .color(Color::Disabled) + .size(LabelSize::Small), + ) .child( IconButton::new("delete", IconName::TrashAlt) .shape(IconButtonShape::Square) .icon_size(IconSize::Small) + .tooltip(|cx| Tooltip::text("Delete Thread", cx)) .on_click({ let assistant_panel = self.assistant_panel.clone(); let id = id.clone(); diff --git a/crates/ui/src/components/list/list_item.rs b/crates/ui/src/components/list/list_item.rs index 48d1e9b03d..908c873f9d 100644 --- a/crates/ui/src/components/list/list_item.rs +++ b/crates/ui/src/components/list/list_item.rs @@ -38,6 +38,7 @@ pub struct ListItem { on_secondary_mouse_down: Option>, children: SmallVec<[AnyElement; 2]>, selectable: bool, + outlined: bool, overflow_x: bool, focused: Option, } @@ -62,6 +63,7 @@ impl ListItem { tooltip: None, children: SmallVec::new(), selectable: true, + outlined: false, overflow_x: false, focused: None, } @@ -138,6 +140,11 @@ impl ListItem { self } + pub fn outlined(mut self) -> Self { + self.outlined = true; + self + } + pub fn overflow_x(mut self) -> Self { self.overflow_x = true; self @@ -203,6 +210,7 @@ impl RenderOnce for ListItem { .child( h_flex() .id("inner_list_item") + .group("list_item") .w_full() .relative() .items_center() @@ -212,7 +220,6 @@ impl RenderOnce for ListItem { ListItemSpacing::Dense => this, ListItemSpacing::Sparse => this.py_1(), }) - .group("list_item") .when(self.inset && !self.disabled, |this| { this // TODO: Add focus state @@ -238,6 +245,12 @@ impl RenderOnce for ListItem { .when_some(self.on_click, |this, on_click| { this.cursor_pointer().on_click(on_click) }) + .when(self.outlined, |this| { + this.border_1() + .border_color(cx.theme().colors().border) + .rounded_md() + .overflow_hidden() + }) .when_some(self.on_secondary_mouse_down, |this, on_mouse_down| { this.on_mouse_down(MouseButton::Right, move |event, cx| { (on_mouse_down)(event, cx)