StorybookのDocsBlockを触ってみる
Storybookは、Canvasタブの以外には「Docs」というタブが設けられています
Docsには、以下のような文書を書くことができます
今回は、Docsの書き方について紹介しようと思います
Docsの種類
Storybookの公式ページに行き、左パネルの「Write docs」の下の「Docs Blocks」を注目します
「Docs Blocks」の下には8つのページがあります、その8つはDocsBlockの全部の種類です
さらに、Docsにの書き方は2種類存在しています
一つ目はMDX、ArgsTableを例えてみると
ドキュメントは「Working with MDX」のセクションです
もう一つ目はDocsPageです、ドキュメントは「Working with the DocsPage
」のセクションです
MDXは、DocsPageより豊富で、多様なDocsを書くことができます
今回はDocsPageで書きます
コンポーネントの作成
まずはstorybookにインストール、適当にコンポーネントを作成しようと思います
WebComponentで作成します
class TopNav extends HTMLElement {
constructor() {
super();
this.title = this.dataset.title || 'タイトル';
this.outerHTML = `
<header class="top-nav">
<div class="top-nav-start"></div>
<div class="top-nav-center">
<h1>${this.title}</h1>
</div>
<div class="top-nav-end"></div>
</header>
`;
}
}
customElements.define('top-nav', TopNav);
次は、storiesを作成します
Canvasだけ作成しておきます
import './top-nav';
export default {
title: 'Layout/TopNav',
args: {
title: 'タイトル',
},
};
export const Default = (arg) => {
const template = document.createElement('template');
template.innerHTML = `<top-nav data-title=${arg.title}></top-nav>`;
return template.content.firstChild;
};
これでCanvasページは完成しましたが
Docsページはほぼ空の状態です
Docsを追加
ここからDocsBlockを追加しようと思います
まずはdescription
export default
の部分に、parameters.docs.description.component
を追加しようと思います
フォーマットはMarkdownです
export default {
title: 'Layout/TopNav',
args: {
title: 'タイトル',
},
+ parameters: {
+ docs: {
+ description: {
+ component: 'ヘッダーのコンポーネント、タイトル名の指定ができます',
+ },
+ },
+ },
};
次はSample Codeを入れようと思います
parameters.docs.source.code
を入れます
export default {
title: 'Layout/TopNav',
args: {
title: 'タイトル',
},
parameters: {
docs: {
description: {
component: 'ヘッダーのコンポーネント、タイトル名の指定ができます',
},
+ source: {
+ code: `<top-nav data-title="タイトル"></top-nav>`,
+ },
},
},
};
さらに、parameters.docs.source.state
を`openに指定して、常にコードが見れるように設定できます
次はArgsTableです
このコンポーネントは一つのArgs:title
のみ存在しているので
まずはargTypes.title.description
を指定します
export default {
title: 'Layout/TopNav',
args: {
title: 'タイトル',
},
+ argTypes: {
+ title: {
+ description: 'ページのタイトル',
+ },
+ },
...略...
};
次はargTypes.title.table.defaultValue.summary
を指定します
export default {
title: 'Layout/TopNav',
args: {
title: 'タイトル',
},
argTypes: {
title: {
description: 'ページのタイトル',
+ table: {
+ defaultValue: {
+ summary: 'タイトル',
+ },
+ },
},
},
...略...
};
argTypes.title.table.type.summary
を指定します
export default {
title: 'Layout/TopNav',
args: {
title: 'タイトル',
},
argTypes: {
title: {
description: 'ページのタイトル',
table: {
defaultValue: {
summary: 'タイトル',
},
+ type: {
+ summary: 'string',
+ },
},
},
},
...略...
};
これで全てのDocsBlockを紹介できました
MDXの記法ならもっと多いDocsが利用できますが
DocsBlockだけでこれが極限です
Discussion