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:
Nate Butler
2025-02-09 13:25:03 -05:00
committed by GitHub
co-authored by Marshall Bowers
parent 56cfc60875
commit 8f1ff189cc
36 changed files with 1582 additions and 976 deletions
+6
View File
@@ -14,8 +14,10 @@ path = "src/ui.rs"
[dependencies]
chrono.workspace = true
component.workspace = true
gpui.workspace = true
itertools = { workspace = true, optional = true }
linkme.workspace = true
menu.workspace = true
serde.workspace = true
settings.workspace = true
@@ -31,3 +33,7 @@ windows.workspace = true
[features]
default = []
stories = ["dep:itertools", "dep:story"]
# cargo-machete doesn't understand that linkme is used in the component macro
[package.metadata.cargo-machete]
ignored = ["linkme"]