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)