コンテンツにスキップ
Page

Markdoc で使う

Markdoc を有効にし、pageMarkdoc() プリセットを追加して RefineUI コンポーネントを Markdoc タグで書きます。

Markdoc のページでは import の代わりにタグを使います。@pelagornis/page/markdoc には、クライアントの状態なしで描画できる RefineUI コンポーネントをタグとして登録するプリセットがあります。このページも .mdoc なので、下の例はそのタグで描画されています。

ターミナルウィンドウ
bun add @astrojs/markdoc @astrojs/starlight-markdoc

Starlight の前に Markdoc 統合を追加します。

astro.config.ts
import markdoc from "@astrojs/markdoc";
import starlight from "@astrojs/starlight";
import pagePlugin from "@pelagornis/page";
import { defineConfig } from "astro/config";
export default defineConfig({
integrations: [
markdoc(),
starlight({
title: "My Docs",
plugins: [pagePlugin()],
}),
],
});

Astro の設定の隣に markdoc.config.mjs を作ります。starlightMarkdoc() は aside などの Starlight のタグを、pageMarkdoc() は RefineUI のタグを追加します。

markdoc.config.mjs
import { defineMarkdocConfig } from "@astrojs/markdoc/config";
import starlightMarkdoc from "@astrojs/starlight-markdoc";
import pageMarkdoc from "@pelagornis/page/markdoc";
export default defineMarkdocConfig({
extends: [starlightMarkdoc(), pageMarkdoc()],
});

属性の名前と値は React の props と同じです。内容のあるタグには閉じタグが必要で、内容のないタグは最後の %} の前にスラッシュを付けて自己終了します。

{% stack direction="row" gap="sizeSmall" align="center" %}
{% badge variant="success" %}Stable{% /badge %}
{% button variant="primary" %}Continue{% /button %}
{% button variant="outline" %}Cancel{% /button %}
{% /stack %}

Stable

数値と真偽値は引用符なしで書きます。

{% progress value=60 ariaLabel="Upload" /%}
{% checkbox label="Send release emails" defaultChecked=true /%}

React の aria-label は ariaLabel と書きます。どのタグも class と id を受け取ります。

タグコンポーネント補足
box, container, grid, stack, spacerBox, Container, Grid, Stack, Spacerトークン props のレイアウト
dividerDivider内容がインラインのラベルになります
textTextvariant の既定は bodyMd
button, linkButton, Linklink は href 必須
label, input, textarea, checkbox, radioフォームネイティブ入力、クライアントスクリプトなし
badge, chipBadge, Chip内容がラベル
progress, spinner, skeletonフィードバックprogress は value 必須
iconWebIconname は RefineUI のアイコン名
avatarsAvatarsavatars=[{alt: "Name"}]

操作できるコンポーネントのタグを追加する

「操作できるコンポーネントのタグを追加する」セクション

タグはサーバーで Astro コンポーネントとして描画されます。クライアントの状態を持つものには、ハイドレートする .astro ラッパーが必要です。MDX で使うと同じく .tsx で組み立ててから包みます。

src/components/markdoc/TabsExample.astro
---
import TabsExample from "../TabsExample";
---
<TabsExample client:load />

プリセットの隣にラッパーを登録します。

markdoc.config.mjs
import { component, defineMarkdocConfig } from "@astrojs/markdoc/config";
import starlightMarkdoc from "@astrojs/starlight-markdoc";
import pageMarkdoc from "@pelagornis/page/markdoc";
export default defineMarkdocConfig({
extends: [starlightMarkdoc(), pageMarkdoc()],
tags: {
"tabs-example": {
render: component("./src/components/markdoc/TabsExample.astro"),
selfClosing: true,
},
},
});
{% tabs-example /%}
Tabs switch between panes in place.

各コンポーネントのページに、そのコンポーネントの Markdoc タグか、必要なラッパーが載っています。