Directives Registry
:::name ディレクティブ構文を JSX コンポーネントにマッピングするパースプリミティブ。
Core 機能 — 常に有効です。設定は不要です。
概要
Directives Registry は、markdown における :::name(および ::name / :name)ディレクティブ構文を可能にする基盤プリミティブです。コンパイル時にディレクティブ構文を JSX コンポーネント呼び出しに変換し、組み込み機能とカスタムプロジェクトコンポーネントの両方がディレクティブブロックに応答できるようにします。
このレジストリがなければ、アドモニションを含むディレクティブベースの機能はすべてパースされません。
ディレクティブの形式
3 つの形式に対応しています。
| 形式 | 構文 | 用途 |
|---|---|---|
| コンテナ | :::name[label]{attrs} … ::: | 複数段落ブロック(アドモニション、コードグループ) |
| リーフ | ::name[label]{attrs} | 自己クローズ要素 |
| テキスト(インライン) | :name[label]{attrs} | インラインコンポーネント |
アドモニション
レジストリの最も一般的な使用方法はアドモニションディレクティブです。このプロジェクトは directives マップ(レシピ)でアドモニションのボキャブラリを登録しているため、以下のコンテナディレクティブが使えます。
Note
これは :::note アドモニションです。
Tip
役立つ提案には :::tip を使います。
Info
補足情報には :::info を使います。
Warning
注意が必要な内容には :::warning を使います。
Danger
重大な警告には :::danger を使います。
Caution
慎重に扱うべきリスクのある手順には :::caution を使います。
クリックして展開
折り畳み可能なコンテンツには :::details[ラベル] を使います。
構文
:::note[任意のタイトル]
コンテンツをここに記述します。
:::角括弧内のラベルは省略可能です。ラベルを省略すると、デフォルトのタイプ名がタイトルとしてレンダリングされます。
出力マークアップ
:::note ディレクティブは以下のようにレンダリングされます。
<div data-admonition="note" class="admonition admonition-note">
<p class="admonition-title">Note</p>
<div class="admonition-body">…</div>
</div>data-admonition 属性はバリアント名を保持します。タイプ固有のクラス(admonition-note、admonition-tip など)はスタイリングに使用されます。
カスタムディレクティブ
カスタムディレクティブの登録には 2 つのステップが必要です。zfb.config.ts でディレクティブ名とコンポーネント名のマッピングを定義し、pages/ でコンポーネントの実装を提供します。
ステップ 1 — zfb.config.ts にディレクティブ名 → コンポーネント名のマッピングを追加する:
export default defineConfig({
markdown: {
features: {
directives: {
// 既存のエントリ...
callout: "Callout", // :::callout → <Callout>
},
},
},
});値("Callout")は、コンパイル済みの MDX 出力で zfb が出力する JSX タグ名です。コンポーネントマップに登録するキーと一致している必要があります。
ステップ 2 — pages/ でコンポーネント名を実装にバインドする:
import { Callout } from "@/components/content/callout";
export function createMdxComponents(lang) {
return {
// 既存のエントリ...
Callout,
};
}作者が :::callout と書くと、zfb はコンパイル済みの MDX に <Callout> を出力します。<entry. の呼び出しが、このマップを通じて Callout をコンポーネントに解決します。Rust コードは不要です。
補足
アドモニションディレクティブ(
note、tip、info、warning、danger、caution、details)は、このプロジェクトがdirectivesマップで登録しているアドモニションレシピが提供します。Core レジストリ自体ではありません。レジストリはエンジンであり、zfb.config.tsのdirectivesマップがディレクティブ名 → コンポーネント名のバインディングを、pages/がコンポーネント名 → 実装のバインディングを提供します。_ mdx- components. ts importantとcautionコンポーネントが登録されていることを確認しない限り、> [!IMPORTANT]や> [!CAUTION]の GitHub アラート構文は使用しないでください。それぞれdata-admonition="important"/data-admonition="caution"にマッピングされ、コンポーネントが存在しない場合は 500 エラーになります。