Detailed changes
@@ -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(),
@@ -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)
}
}
@@ -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::*;
@@ -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)),
+ ),
+ )
+ }
+}