
 - Adds the Switch component - Updates `Selected`, `Selectable` -> `ToggleState`, `Toggleable` - Adds `checkbox` and `switch` functions to align better with other elements in our layout system. We decided not to merge Switch and Checkbox. However, in a followup I'll introduce a Toggle or AnyToggle enum so we can update `CheckboxWithLabel` -> `ToggleWithLabel` as this component will work exactly the same with either a Checkbox or a Switch. Release Notes: - N/A
146 lines
5.2 KiB
Rust
146 lines
5.2 KiB
Rust
use gpui::Render;
|
|
use story::{Story, StoryItem, StorySection};
|
|
|
|
use crate::{prelude::*, IconButtonShape, Tooltip};
|
|
use crate::{IconButton, IconName};
|
|
|
|
pub struct IconButtonStory;
|
|
|
|
impl Render for IconButtonStory {
|
|
fn render(&mut self, _cx: &mut ViewContext<Self>) -> impl IntoElement {
|
|
let default_button = StoryItem::new(
|
|
"Default",
|
|
IconButton::new("default_icon_button", IconName::Hash),
|
|
)
|
|
.description("Displays an icon button.")
|
|
.usage(
|
|
r#"
|
|
IconButton::new("default_icon_button", Icon::Hash)
|
|
"#,
|
|
);
|
|
|
|
let selected_button = StoryItem::new(
|
|
"Selected",
|
|
IconButton::new("selected_icon_button", IconName::Hash).toggle_state(true),
|
|
)
|
|
.description("Displays an icon button that is selected.")
|
|
.usage(
|
|
r#"
|
|
IconButton::new("selected_icon_button", Icon::Hash).selected(true)
|
|
"#,
|
|
);
|
|
|
|
let selected_with_selected_icon = StoryItem::new(
|
|
"Selected with `selected_icon`",
|
|
IconButton::new("selected_with_selected_icon_button", IconName::AudioOn)
|
|
.toggle_state(true)
|
|
.selected_icon(IconName::AudioOff),
|
|
)
|
|
.description(
|
|
"Displays an icon button that is selected and shows a different icon when selected.",
|
|
)
|
|
.usage(
|
|
r#"
|
|
IconButton::new("selected_with_selected_icon_button", Icon::AudioOn)
|
|
.selected(true)
|
|
.selected_icon(Icon::AudioOff)
|
|
"#,
|
|
);
|
|
|
|
let disabled_button = StoryItem::new(
|
|
"Disabled",
|
|
IconButton::new("disabled_icon_button", IconName::Hash).disabled(true),
|
|
)
|
|
.description("Displays an icon button that is disabled.")
|
|
.usage(
|
|
r#"
|
|
IconButton::new("disabled_icon_button", Icon::Hash).disabled(true)
|
|
"#,
|
|
);
|
|
|
|
let with_on_click_button = StoryItem::new(
|
|
"With `on_click`",
|
|
IconButton::new("with_on_click_button", IconName::Ai).on_click(|_event, _cx| {
|
|
println!("Clicked!");
|
|
}),
|
|
)
|
|
.description("Displays an icon button which triggers an event on click.")
|
|
.usage(
|
|
r#"
|
|
IconButton::new("with_on_click_button", Icon::Ai).on_click(|_event, _cx| {
|
|
println!("Clicked!");
|
|
})
|
|
"#,
|
|
);
|
|
|
|
let with_tooltip_button = StoryItem::new(
|
|
"With `tooltip`",
|
|
IconButton::new("with_tooltip_button", IconName::MessageBubbles)
|
|
.tooltip(|cx| Tooltip::text("Open messages", cx)),
|
|
)
|
|
.description("Displays an icon button that has a tooltip when hovered.")
|
|
.usage(
|
|
r#"
|
|
IconButton::new("with_tooltip_button", Icon::MessageBubbles)
|
|
.tooltip(|cx| Tooltip::text("Open messages", cx))
|
|
"#,
|
|
);
|
|
|
|
let selected_with_tooltip_button = StoryItem::new(
|
|
"Selected with `tooltip`",
|
|
IconButton::new("selected_with_tooltip_button", IconName::InlayHint)
|
|
.toggle_state(true)
|
|
.tooltip(|cx| Tooltip::text("Toggle inlay hints", cx)),
|
|
)
|
|
.description("Displays a selected icon button with tooltip.")
|
|
.usage(
|
|
r#"
|
|
IconButton::new("selected_with_tooltip_button", Icon::InlayHint)
|
|
.selected(true)
|
|
.tooltip(|cx| Tooltip::text("Toggle inlay hints", cx))
|
|
"#,
|
|
);
|
|
|
|
let buttons = vec![
|
|
default_button,
|
|
selected_button,
|
|
selected_with_selected_icon,
|
|
disabled_button,
|
|
with_on_click_button,
|
|
with_tooltip_button,
|
|
selected_with_tooltip_button,
|
|
];
|
|
|
|
Story::container()
|
|
.child(Story::title_for::<IconButton>())
|
|
.child(StorySection::new().children(buttons))
|
|
.child(
|
|
StorySection::new().child(StoryItem::new(
|
|
"Square",
|
|
h_flex()
|
|
.gap_2()
|
|
.child(
|
|
IconButton::new("square-medium", IconName::Close)
|
|
.shape(IconButtonShape::Square)
|
|
.icon_size(IconSize::Medium),
|
|
)
|
|
.child(
|
|
IconButton::new("square-small", IconName::Close)
|
|
.shape(IconButtonShape::Square)
|
|
.icon_size(IconSize::Small),
|
|
)
|
|
.child(
|
|
IconButton::new("square-xsmall", IconName::Close)
|
|
.shape(IconButtonShape::Square)
|
|
.icon_size(IconSize::XSmall),
|
|
)
|
|
.child(
|
|
IconButton::new("square-indicator", IconName::Close)
|
|
.shape(IconButtonShape::Square)
|
|
.icon_size(IconSize::Indicator),
|
|
),
|
|
)),
|
|
)
|
|
.into_element()
|
|
}
|
|
}
|