diff --git a/assets/icons/heart-off.svg b/assets/icons/heart-off.svg
new file mode 100644
index 00000000..68cda020
--- /dev/null
+++ b/assets/icons/heart-off.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/heart.svg b/assets/icons/heart.svg
new file mode 100644
index 00000000..2f267c91
--- /dev/null
+++ b/assets/icons/heart.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/star-off.svg b/assets/icons/star-off.svg
new file mode 100644
index 00000000..a2620605
--- /dev/null
+++ b/assets/icons/star-off.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/star.svg b/assets/icons/star.svg
new file mode 100644
index 00000000..8d931311
--- /dev/null
+++ b/assets/icons/star.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/thumbs-down.svg b/assets/icons/thumbs-down.svg
new file mode 100644
index 00000000..816273e9
--- /dev/null
+++ b/assets/icons/thumbs-down.svg
@@ -0,0 +1 @@
+
diff --git a/assets/icons/thumbs-up.svg b/assets/icons/thumbs-up.svg
new file mode 100644
index 00000000..01fae76f
--- /dev/null
+++ b/assets/icons/thumbs-up.svg
@@ -0,0 +1 @@
+
diff --git a/crates/story/src/icon_story.rs b/crates/story/src/icon_story.rs
index 548db4af..26f9ce9f 100644
--- a/crates/story/src/icon_story.rs
+++ b/crates/story/src/icon_story.rs
@@ -1,5 +1,10 @@
use gpui::{px, rems, ParentElement, Render, Styled, View, VisualContext as _, WindowContext};
-use ui::{h_flex, theme::ActiveTheme as _, v_flex, Icon, IconName};
+use ui::{
+ button::{Button, ButtonStyle},
+ h_flex,
+ theme::ActiveTheme as _,
+ v_flex, Icon, IconName,
+};
pub struct IconStory {}
@@ -25,6 +30,24 @@ impl Render for IconStory {
.text_color(ui::green_500()),
)
.child(Icon::new(IconName::Maximize).size(px(55.)))
+ .child(
+ Button::new("like1", cx)
+ .icon(
+ Icon::new(IconName::Heart)
+ .text_color(ui::gray_500())
+ .size_6(),
+ )
+ .style(ButtonStyle::Ghost),
+ )
+ .child(
+ Button::new("like2", cx)
+ .icon(
+ Icon::new(IconName::HeartOff)
+ .text_color(ui::red_500())
+ .size_6(),
+ )
+ .style(ButtonStyle::Ghost),
+ )
.child(
Icon::new(IconName::Plus)
.w(rems(3.))
diff --git a/crates/ui/src/button.rs b/crates/ui/src/button.rs
index b60a981e..fcf06dca 100644
--- a/crates/ui/src/button.rs
+++ b/crates/ui/src/button.rs
@@ -267,7 +267,7 @@ impl RenderOnce for Button {
.text_color(text_color)
.when(!self.loading, |this| {
this.when_some(self.icon, |this, icon| {
- this.child(icon.size(self.size).text_color(text_color))
+ this.child(div().text_color(text_color).child(icon.size(self.size)))
})
})
.when(self.loading, |this| {
diff --git a/crates/ui/src/icon.rs b/crates/ui/src/icon.rs
index ecd102d1..aceac9ab 100644
--- a/crates/ui/src/icon.rs
+++ b/crates/ui/src/icon.rs
@@ -30,6 +30,12 @@ pub enum IconName {
Eye,
EyeOff,
Inbox,
+ Heart,
+ HeartOff,
+ Star,
+ StarOff,
+ ThumbsUp,
+ ThumbsDown,
}
impl IconName {
@@ -59,6 +65,12 @@ impl IconName {
IconName::Eye => "icons/eye.svg",
IconName::EyeOff => "icons/eye-off.svg",
IconName::Inbox => "icons/inbox.svg",
+ IconName::Heart => "icons/heart.svg",
+ IconName::HeartOff => "icons/heart-off.svg",
+ IconName::Star => "icons/star.svg",
+ IconName::StarOff => "icons/star-off.svg",
+ IconName::ThumbsUp => "icons/thumbs-up.svg",
+ IconName::ThumbsDown => "icons/thumbs-down.svg",
}
.into()
}
@@ -171,7 +183,7 @@ impl Styled for Icon {
impl RenderOnce for Icon {
fn render(self, cx: &mut WindowContext) -> impl IntoElement {
- let text_color = self.text_color.unwrap_or_else(|| cx.theme().foreground);
+ let text_color = self.text_color.unwrap_or_else(|| cx.text_style().color);
self.base
.text_color(text_color)