Tabs

どこで使えるか — prose と source comments。 <tabs> markup は任意の prose(README、tutorials、docs directory)の中、または JSDoc / TypeDoc comment の description の中に直接書きます — どちらも同じ converter を通って流れます。専用の block tag はありません。どちらの場所でも 同じ markup を書きます。

<tabs> は tabbed view を render します — 一群の panels の上に並ぶ clickable な tab buttons の列で、一度に 1 つの panel を表示します。あなたは prose の中(または doc-comment description の中)に lowercase の <tabs> / <tab> tags を書きます。 theme はそれらを、rang が render する capitalized な <Tabs> / <Tab> components へと書き換えます。

この書き換えは raw-string レベルで from-html.ts にて起こります(splitContainers / parseItems)。これは HTML round-trip の 前で、その round-trip はこれらの custom tags を取り除いてしまいます。Component は Tabs.tsx にあります。

tabs を live で見たいですか? Configuration page 全体が これらで作られています — どの option の snippet も synced な JSDoc/TypeDoc tab group です。JSDocTypeDoc の getting-started pages もこれらを 使っています。実際の、copy できる例については、これらいずれかの page sources を GitHub で見てください。

Syntax

1 つの <tabs> container は、それぞれ label を持つ 1 つ以上の <tab> items を 包みます:

CODE
<tabs>

<tab label="npm">

```sh
npm install clean-jsdoc-theme
```

</tab>

<tab label="pnpm">

```sh
pnpm add clean-jsdoc-theme
```

</tab>

</tabs>

各 tab の内側の content(fenced code、lists、paragraphs)の 周りに空行 を 残してください。各 item の body は Markdown として再 parse されるため、それらの 空行こそが content を正しく render させるものです。

Attributes

TagAttributeEffect
<tab>labelThe tab button text. Falls back to Tab N when omitted.
<tab>valueThe cross-block sync key (see below). Defaults to the normalized label (lower-cased, trimmed).
<tabs>groupOpts the whole block into cross-block syncing under a shared group name.

readAttr は single または double quotes を受け入れます。<tabs> の外側の <tab> は何も render しません — Tab は論理的な marker で、Tabs が直接 読み取ります。

tab bar は完全に SSR-rendered です(最初の tab が見え、残りは hidden)。本物の ARIA tablist + panels を伴います。小さな tabs island はその markup を 強化する だけです — click とキーボード操作で aria-selected / tabIndex / hidden を toggle します。panels を Preact 経由で再 render はしないので、panel content は任意の rendered MDX であってかまいません。

page をまたいで tab groups を sync する — group

複数の <tabs> blocks に同じ group を与えると、それらは sync します: 1 つを switch すると page 上の他のすべての grouped block が switch し(各 tab の value でマッチされます)、その選択は次回の訪問まで保持されます。

value は group の中で tabs がマッチされる key です。これを省略すると、normalized label に default されます(lower-cased および trimmed、 Tabs.tsxtabValue に従います)。そのため 同一の labels は無料で sync します。 labels が casing や言い回しで異なるが、それでも sync させたい場合は、明示的な value を set します。

CODE
<tabs group="pm">

<tab label="npm" value="npm">

```sh
npm install clean-jsdoc-theme
```

</tab>

<tab label="pnpm" value="pnpm">

```sh
pnpm add clean-jsdoc-theme
```

</tab>

</tabs>

同じ page 上の別の <tabs> block に同じ group を与えると、両者は lockstep に 保たれます — 一方で 1 つの tab を選ぶと、他のすべての grouped block が追従します。 これは Configuration が JSDoc-対-TypeDoc の snippets を sync に保つために使うのとまさに同じ mechanism です: どの option の tabs も group="tool" を共有するので、一度 "TypeDoc" を選べば page 全体が switch します。

doc comment の中で

<tabs> は JSDoc / TypeDoc の description の中でも動作します。live demo の module page にある install tabs は、その @module comment の中に直接書かれて います:

CODE
/**
 * Install it with your package manager of choice:
 *
 * <tabs>
 *
 * <tab label="npm">
 *
 * ```sh
 * npm install --save-dev jsdoc clean-jsdoc-theme
 * ```
 *
 * </tab>
 *
 * <tab label="pnpm">
 *
 * ```sh
 * pnpm add -D jsdoc clean-jsdoc-theme
 * ```
 *
 * </tab>
 *
 * </tabs>
 *
 * @module sample-api
 */

これらの tabs を live demo の sample-api module page で rendered された 状態で見てください — source は docs-site/src/index.js にあります。

こちらも参照

  • Steps — 兄弟の stepper container(step の内側に tabs を nest できます)。
  • Callouts[!NOTE]-style の notices について。
  • Structure your sidebar — guide pages がどう group 化されるかについて。