Move the LoadingLabel component to the UI crate (#33893)

So we can use it in other places and don't require them to depend on the
`agent_ui`. This PR also renames it from `AnimatedLabel` to
`LoadingLabel`.

Release Notes:

- N/A
This commit is contained in:
Danilo Leal 2025-07-04 01:49:11 -03:00 committed by GitHub
parent ed7552d3e3
commit 5253702200
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
5 changed files with 14 additions and 16 deletions

View file

@ -1,9 +1,7 @@
use crate::context_picker::{ContextPicker, MentionLink}; use crate::context_picker::{ContextPicker, MentionLink};
use crate::context_strip::{ContextStrip, ContextStripEvent, SuggestContextKind}; use crate::context_strip::{ContextStrip, ContextStripEvent, SuggestContextKind};
use crate::message_editor::{extract_message_creases, insert_message_creases}; use crate::message_editor::{extract_message_creases, insert_message_creases};
use crate::ui::{ use crate::ui::{AddedContext, AgentNotification, AgentNotificationEvent, ContextPill};
AddedContext, AgentNotification, AgentNotificationEvent, AnimatedLabel, ContextPill,
};
use crate::{AgentPanel, ModelUsageContext}; use crate::{AgentPanel, ModelUsageContext};
use agent::{ use agent::{
ContextStore, LastRestoreCheckpoint, MessageCrease, MessageId, MessageSegment, TextThreadStore, ContextStore, LastRestoreCheckpoint, MessageCrease, MessageId, MessageSegment, TextThreadStore,
@ -1820,7 +1818,7 @@ impl ActiveThread {
.my_3() .my_3()
.mx_5() .mx_5()
.when(is_generating_stale || message.is_hidden, |this| { .when(is_generating_stale || message.is_hidden, |this| {
this.child(AnimatedLabel::new("").size(LabelSize::Small)) this.child(LoadingLabel::new("").size(LabelSize::Small))
}) })
}); });
@ -2586,7 +2584,7 @@ impl ActiveThread {
.size(IconSize::XSmall) .size(IconSize::XSmall)
.color(Color::Muted), .color(Color::Muted),
) )
.child(AnimatedLabel::new("Thinking").size(LabelSize::Small)), .child(LoadingLabel::new("Thinking").size(LabelSize::Small)),
) )
.child( .child(
h_flex() h_flex()
@ -3155,7 +3153,7 @@ impl ActiveThread {
.border_color(self.tool_card_border_color(cx)) .border_color(self.tool_card_border_color(cx))
.rounded_b_lg() .rounded_b_lg()
.child( .child(
AnimatedLabel::new("Waiting for Confirmation").size(LabelSize::Small) LoadingLabel::new("Waiting for Confirmation").size(LabelSize::Small)
) )
.child( .child(
h_flex() h_flex()

View file

@ -1,5 +1,4 @@
mod agent_notification; mod agent_notification;
mod animated_label;
mod burn_mode_tooltip; mod burn_mode_tooltip;
mod context_pill; mod context_pill;
mod onboarding_modal; mod onboarding_modal;
@ -7,7 +6,6 @@ pub mod preview;
mod upsell; mod upsell;
pub use agent_notification::*; pub use agent_notification::*;
pub use animated_label::*;
pub use burn_mode_tooltip::*; pub use burn_mode_tooltip::*;
pub use context_pill::*; pub use context_pill::*;
pub use onboarding_modal::*; pub use onboarding_modal::*;

View file

@ -1,7 +1,9 @@
mod highlighted_label; mod highlighted_label;
mod label; mod label;
mod label_like; mod label_like;
mod loading_label;
pub use highlighted_label::*; pub use highlighted_label::*;
pub use label::*; pub use label::*;
pub use label_like::*; pub use label_like::*;
pub use loading_label::*;

View file

@ -1,24 +1,24 @@
use crate::prelude::*;
use gpui::{Animation, AnimationExt, FontWeight, pulsating_between}; use gpui::{Animation, AnimationExt, FontWeight, pulsating_between};
use std::time::Duration; use std::time::Duration;
use ui::prelude::*;
#[derive(IntoElement)] #[derive(IntoElement)]
pub struct AnimatedLabel { pub struct LoadingLabel {
base: Label, base: Label,
text: SharedString, text: SharedString,
} }
impl AnimatedLabel { impl LoadingLabel {
pub fn new(text: impl Into<SharedString>) -> Self { pub fn new(text: impl Into<SharedString>) -> Self {
let text = text.into(); let text = text.into();
AnimatedLabel { LoadingLabel {
base: Label::new(text.clone()), base: Label::new(text.clone()),
text, text,
} }
} }
} }
impl LabelCommon for AnimatedLabel { impl LabelCommon for LoadingLabel {
fn size(mut self, size: LabelSize) -> Self { fn size(mut self, size: LabelSize) -> Self {
self.base = self.base.size(size); self.base = self.base.size(size);
self self
@ -80,14 +80,14 @@ impl LabelCommon for AnimatedLabel {
} }
} }
impl RenderOnce for AnimatedLabel { impl RenderOnce for LoadingLabel {
fn render(self, _window: &mut Window, _cx: &mut App) -> impl IntoElement { fn render(self, _window: &mut Window, _cx: &mut App) -> impl IntoElement {
let text = self.text.clone(); let text = self.text.clone();
self.base self.base
.color(Color::Muted) .color(Color::Muted)
.with_animations( .with_animations(
"animated-label", "loading_label",
vec![ vec![
Animation::new(Duration::from_secs(1)), Animation::new(Duration::from_secs(1)),
Animation::new(Duration::from_secs(1)).repeat(), Animation::new(Duration::from_secs(1)).repeat(),

View file

@ -25,7 +25,7 @@ pub use crate::{Button, ButtonSize, ButtonStyle, IconButton, SelectableButton};
pub use crate::{ButtonCommon, Color}; pub use crate::{ButtonCommon, Color};
pub use crate::{Headline, HeadlineSize}; pub use crate::{Headline, HeadlineSize};
pub use crate::{Icon, IconName, IconPosition, IconSize}; pub use crate::{Icon, IconName, IconPosition, IconSize};
pub use crate::{Label, LabelCommon, LabelSize, LineHeightStyle}; pub use crate::{Label, LabelCommon, LabelSize, LineHeightStyle, LoadingLabel};
pub use crate::{h_container, h_flex, v_container, v_flex}; pub use crate::{h_container, h_flex, v_container, v_flex};
pub use crate::{ pub use crate::{
h_group, h_group_lg, h_group_sm, h_group_xl, v_group, v_group_lg, v_group_sm, v_group_xl, h_group, h_group_lg, h_group_sm, h_group_xl, v_group, v_group_lg, v_group_sm, v_group_xl,