Merge branch 'main' into collab-panel2

Marshall Bowers created

Change summary

crates/storybook2/src/story_selector.rs          |  2 +
crates/ui2/src/components/icon_button.rs         |  3 -
crates/ui2/src/components/stories.rs             |  2 +
crates/ui2/src/components/stories/icon_button.rs | 35 ++++++++++++++++++
4 files changed, 40 insertions(+), 2 deletions(-)

Detailed changes

crates/storybook2/src/story_selector.rs 🔗

@@ -18,6 +18,7 @@ pub enum ComponentStory {
     ContextMenu,
     Focus,
     Icon,
+    IconButton,
     Input,
     Keybinding,
     Label,
@@ -37,6 +38,7 @@ impl ComponentStory {
             Self::ContextMenu => cx.build_view(|_| ui::ContextMenuStory).into(),
             Self::Focus => FocusStory::view(cx).into(),
             Self::Icon => cx.build_view(|_| ui::IconStory).into(),
+            Self::IconButton => cx.build_view(|_| ui::IconButtonStory).into(),
             Self::Input => cx.build_view(|_| ui::InputStory).into(),
             Self::Keybinding => cx.build_view(|_| ui::KeybindingStory).into(),
             Self::Label => cx.build_view(|_| ui::LabelStory).into(),

crates/ui2/src/components/icon_button.rs 🔗

@@ -65,8 +65,7 @@ impl RenderOnce for IconButton {
             }
         }
 
-        // todo! this extra wrapping div is to work around a bug
-        // where tooltips otherwise don't show up.
+        // HACK: Add an additional identified element wrapper to fix tooltips not showing up.
         div().id(self.id.clone()).child(button)
     }
 }

crates/ui2/src/components/stories.rs 🔗

@@ -3,6 +3,7 @@ mod button;
 mod checkbox;
 mod context_menu;
 mod icon;
+mod icon_button;
 mod input;
 mod keybinding;
 mod label;
@@ -13,6 +14,7 @@ pub use button::*;
 pub use checkbox::*;
 pub use context_menu::*;
 pub use icon::*;
+pub use icon_button::*;
 pub use input::*;
 pub use keybinding::*;
 pub use label::*;

crates/ui2/src/components/stories/icon_button.rs 🔗

@@ -0,0 +1,35 @@
+use gpui::{Div, Render};
+use story::Story;
+
+use crate::{prelude::*, Tooltip};
+use crate::{Icon, IconButton};
+
+pub struct IconButtonStory;
+
+impl Render for IconButtonStory {
+    type Element = Div;
+
+    fn render(&mut self, _cx: &mut ViewContext<Self>) -> Self::Element {
+        Story::container()
+            .child(Story::title_for::<IconButton>())
+            .child(Story::label("Default"))
+            .child(div().w_8().child(IconButton::new("icon_a", Icon::Hash)))
+            .child(Story::label("With `on_click`"))
+            .child(
+                div()
+                    .w_8()
+                    .child(
+                        IconButton::new("with_on_click", Icon::Ai).on_click(|_event, _cx| {
+                            println!("Clicked!");
+                        }),
+                    ),
+            )
+            .child(Story::label("With `tooltip`"))
+            .child(
+                div().w_8().child(
+                    IconButton::new("with_tooltip", Icon::MessageBubbles)
+                        .tooltip(|cx| Tooltip::text("Open messages", cx)),
+                ),
+            )
+    }
+}