From ec741d61ed3c82e864d7703965fe35d5d1cea843 Mon Sep 17 00:00:00 2001
From: Danilo Leal <67129314+danilo-leal@users.noreply.github.com>
Date: Mon, 16 Dec 2024 16:42:09 -0300
Subject: [PATCH] assistant2: Adjust thread history list item visuals (#21998)
Most notably, adding the `outlined` property in the `ListItem`
component.
Release Notes:
- N/A
---
crates/assistant2/src/assistant_panel.rs | 9 +++++----
crates/assistant2/src/thread_history.rs | 14 +++++++++++---
crates/ui/src/components/list/list_item.rs | 15 ++++++++++++++-
3 files changed, 30 insertions(+), 8 deletions(-)
diff --git a/crates/assistant2/src/assistant_panel.rs b/crates/assistant2/src/assistant_panel.rs
index 2ab28077f111b3d64b044718bb244a077b028793..07902b5c835abeb4050815f2590c080d0bd89d22 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 f183276f7b575b22c7e7b4f557e7983c1abf0368..3eb333688a1544914cfb896581d59f7b0c2e38ad 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 48d1e9b03d3799a36b62a959ff8632e82b4c3603..908c873f9d740d415cb2a4d6fa1a2737bcb80cbf 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)