storybook/docs/sharing/package-composition.md
2021-12-23 14:50:59 -05:00

73 lines
2.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: 'Package Composition'
---
Storybook is widely used by component libraries and design systems. Design system authors can automatically compose their design systems inside their consumers Storybooks.
For example, if you use a design system package, its stories can appear alongside your own. That makes it convenient to cross reference usage documentation without leaving Storybook.
<div class="aside">
Composition via a package requires a secure integration between the service where you publish Storybook and Storybooks own APIs. We recommend [publishing Storybook to Chromatic](./publish-storybook.md#publish-storybook-with-chromatic) for full support of these features.
</div>
## For consumers
Composition happens automatically if the package [supports](#for-authors) it. When you install the package, Storybook will load its stories alongside your own.
![Package composition workflow](./package-composition.png)
### Set up
If you want to configure how the composed Storybook behaves, you can disable the `ref` element in your [`.storybook/main.js`](../configure/overview.md#configure-story-rendering)
<!-- prettier-ignore-start -->
<CodeSnippets
paths={[
'common/storybook-main-disable-refs.js.mdx',
]}
/>
<!-- prettier-ignore-end -->
### Switching versions
Change the version of the composed Storybook to see how the library evolves. This requires [configuration](#show-a-version-selector) from the package author.
![Package composition workflow](./composition-versioning.png)
## For authors
Component library authors can expand adoption by composing their components in their consumers Storybooks.
Add a `storybook` property in your published `package.json`that contains an object with a `url` field. Point the URL field to a published Storybook at the version you want.
```json
// Your component librarys package.json
{
"storybook": {
"url": "https://host.com/your-storybook-for-this-version"
}
}
```
### Automatic version selection
If you're using [Chromatic](./publish-storybook.md#publish-storybook-with-chromatic), you can provide a single URL for your Storybook in the `storybook.url` field. You do not need to change the URL each time you publish a new version. Storybook will automatically find the correct URL for your package. For example:
```json
{
"storybook": {
"url": "https://master--xyz123.chromatic.com"
}
}
```
In this example `xyz123` is your Chromatic project id. Storybook will automatically compose in the Storybook published to that project corresponding to the version the user has installed.
### Show a version selector
If you're using [Chromatic](./publish-storybook.md#publish-storybook-with-chromatic), you can provide a list of versions for the user to [choose from](#switching-versions) to experiment with other versions of your package.