# component: Add \`component\` and \`component_preview\` crates to power UI components \(\#24456\) · gitcafe/zed

[View on GitCafe](https://git.cafe/gitcafe/zed/commit/8f1ff189ccf698d87735366a8a1d9c2bbbd58331)

Repository: [gitcafe/zed](https://git.cafe/gitcafe/zed)

Visibility: public

Requested revision: 8f1ff189ccf698d87735366a8a1d9c2bbbd58331

Requested commit: 8f1ff189ccf698d87735366a8a1d9c2bbbd58331

Commit: 8f1ff189ccf698d87735366a8a1d9c2bbbd58331

Tree: 2e4ee9f80ece4c775944c70679a2171ee70523d4

Author: Nate Butler

Committer: GitHub

## Message

````
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>
````

## Parents

- [56cfc60875f6105fb3bd2fece6427bdaa1cbde4e](https://git.cafe/gitcafe/zed/commit/56cfc60875f6105fb3bd2fece6427bdaa1cbde4e?format=markdown)

[Source at this commit](https://git.cafe/gitcafe/zed/tree/8f1ff189ccf698d87735366a8a1d9c2bbbd58331?format=markdown)
