component: Add component
and component_preview
crates to power UI components (#24456)
This PR formalizes design components with the Component and ComponentPreview traits. You can open the preview UI with `workspace: open component preview`. Component previews no longer need to return `Self` allowing for more complex previews, and previews of components like `ui::Tooltip` that supplement other components rather than are rendered by default. `cargo-machete` incorrectly identifies `linkme` as an unused dep on crates that have components deriving `IntoComponent`, so you may need to add this to that crate's `Cargo.toml`: ```toml # cargo-machete doesn't understand that linkme is used in the component macro [package.metadata.cargo-machete] ignored = ["linkme"] ``` Release Notes: - N/A --------- Co-authored-by: Marshall Bowers <git@maxdeviant.com>
This commit is contained in:
parent
56cfc60875
commit
8f1ff189cc
36 changed files with 1582 additions and 976 deletions
|
@ -27,7 +27,7 @@ pub enum TabCloseSide {
|
|||
End,
|
||||
}
|
||||
|
||||
#[derive(IntoElement)]
|
||||
#[derive(IntoElement, IntoComponent)]
|
||||
pub struct Tab {
|
||||
div: Stateful<Div>,
|
||||
selected: bool,
|
||||
|
@ -171,3 +171,48 @@ impl RenderOnce for Tab {
|
|||
)
|
||||
}
|
||||
}
|
||||
|
||||
impl ComponentPreview for Tab {
|
||||
fn preview(_window: &mut Window, _cx: &App) -> AnyElement {
|
||||
v_flex()
|
||||
.gap_6()
|
||||
.children(vec![example_group_with_title(
|
||||
"Variations",
|
||||
vec![
|
||||
single_example(
|
||||
"Default",
|
||||
Tab::new("default").child("Default Tab").into_any_element(),
|
||||
),
|
||||
single_example(
|
||||
"Selected",
|
||||
Tab::new("selected")
|
||||
.toggle_state(true)
|
||||
.child("Selected Tab")
|
||||
.into_any_element(),
|
||||
),
|
||||
single_example(
|
||||
"First",
|
||||
Tab::new("first")
|
||||
.position(TabPosition::First)
|
||||
.child("First Tab")
|
||||
.into_any_element(),
|
||||
),
|
||||
single_example(
|
||||
"Middle",
|
||||
Tab::new("middle")
|
||||
.position(TabPosition::Middle(Ordering::Equal))
|
||||
.child("Middle Tab")
|
||||
.into_any_element(),
|
||||
),
|
||||
single_example(
|
||||
"Last",
|
||||
Tab::new("last")
|
||||
.position(TabPosition::Last)
|
||||
.child("Last Tab")
|
||||
.into_any_element(),
|
||||
),
|
||||
],
|
||||
)])
|
||||
.into_any_element()
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue