Astro インテグレーション
new@love-rox/ptpt-astro
Astro 4+ 専用。Markdown プラグインの登録、スタイルシートの注入、クライアント hydrator の実行をまとめて面倒見ます。Patapata.astro / PatapataBoard.astro を同梱し、テンプレートに盤面を直接置けます。
Install
インストール
ピア依存は astro >= 4 と @love-rox/ptpt-core です。@love-rox/ptpt-rehype は依存として自動的に引き込まれます。
bun
bun add @love-rox/ptpt-astropnpm
pnpm add @love-rox/ptpt-astronpm
npm i @love-rox/ptpt-astroyarn
yarn add @love-rox/ptpt-astroPieces
中身は2つ
ptpt() インテグレーション
@love-rox/ptpt-rehype を Astro の Markdown / MDX パイプラインに登録し、@love-rox/ptpt-core/styles.css を注入し、各ページでクライアント hydrator を走らせます。.md / .mdx の印付きコンテンツが、追加配線なしで動き出します。
<Patapata> / <PatapataBoard>
読める静的マークアップを出力し、読み込み時に hydrator が動かす Astro コンポーネント。<Patapata> はインライン1個、<PatapataBoard> は改行で分割して複数行の盤面にします。
Usage
使い方
astro.config.mjs にインテグレーションを追加します。これだけで印付きの Markdown / MDX 本文が動き、スタイルシートと hydrator も注入されます。
// astro.config.mjs
import { defineConfig } from "astro/config";
import ptpt from "@love-rox/ptpt-astro";
export default defineConfig({
integrations: [ptpt()],
});オプションを渡す
各ピースの ON/OFF を切り替え、rehype のオプション(defaultPreset など)は markdown 経由で渡せます。
// astro.config.mjs
import { defineConfig } from "astro/config";
import ptpt from "@love-rox/ptpt-astro";
export default defineConfig({
integrations: [
ptpt({
// forward rehype options (e.g. a default preset name)
markdown: { defaultPreset: "alphanumeric" },
styles: true,
hydrate: true,
}),
],
});.astro ファイル内で使う
<Patapata> コンポーネントでテンプレートに盤面を直接置けます。ここでの preset はプリセット名で、hydrator が解決します。
---
import Patapata from "@love-rox/ptpt-astro/Patapata.astro";
import PatapataBoard from "@love-rox/ptpt-astro/PatapataBoard.astro";
---
<!-- preset is a built-in preset NAME, resolved by the hydrator -->
<Patapata target="TOKYO" preset="alphanumeric" />
<PatapataBoard targets={`TOKYO\nOSAKA`} preset="alphanumeric" />Options
オプション
共通セルオプション(data-ptpt-* で渡されます)は React / Vue / rehype と同じ意味で動きます。インテグレーション自体には3つのトグルがあります。
共通セルオプション + rehype 由来
| オプション | 型 | 既定値 | 説明 |
|---|---|---|---|
| preset | PresetDefinition | string | defaultPreset | フラップに使う文字セット。PresetDefinition(recommendedDuration / locale を既定値に使う)か、フラップ順を表す文字列を渡します。frames とは排他です。 |
| frames | FrameInput[] | undefined | 明示的なフレーム集合。文字だけでなく画像や任意要素も指定できます。preset とは排他です。 |
| durationPerFlap | number | プリセットの推奨値、なければ 200 | 1 枚をめくるミリ秒数。プリセットの recommendedDuration を上書きします。 |
| direction | 'forward' | 'shortest' | 'forward' | フレームのリングをめくる向き。shortest は近いほうへ逆回りすることもあります。 |
| reducedMotion | 'instant' | 'minimal' | 'ignore' | 'instant' | OS が「視差効果を減らす」設定のときの挙動。instant は瞬時に切り替えます。 |
| className | string | 'patapata' | インライン要素を盤面に変換する目印となるクラス名。 |
| fenceLanguage | string | 'patapata' | 盤面に変換するフェンスコードブロックのコードフェンス言語。 |
| defaultPreset | string | undefined | 要素/ブロックがプリセットを指定しないときに使うプリセット名。 |
インテグレーションオプション
| オプション | 型 | 既定値 | 説明 |
|---|---|---|---|
| markdown | boolean | RehypePtptOptions | true | Markdown / MDX パイプラインに rehypePtpt を登録するか。オブジェクトを渡すと rehype 側のオプション(defaultPreset など)を転送できます。false でオフ。 |
| styles | boolean | true | 各ページに @love-rox/ptpt-core/styles.css を注入するか。 |
| hydrate | boolean | true | 読み込み時に走るクライアント hydrator を注入するか。 |
Behaviour
挙動の注記
- Astro は SSG-first なので、プラグインは build 時に走ります。クライアント側のコストは、静的マークアップを動かす小さな hydrator だけです。
- JS がなくても盤面はプレーンで読めるテキストとして表示され、hydration はフリップを足すだけです。
markdown: falseで Markdown パイプラインをオフにできます(コンポーネントだけ使う場合など)。styles: false/hydrate: falseで各注入をスキップできます。- コンポーネントと Markdown プラグインは同じ
data-ptpt-*出力を共有するので、.astro直書きと Markdown 本文で挙動が揃います。
Related
他のアダプタ
Astro を使っていない場合は、生の rehype プラグイン を unified パイプラインに直接組み込んでください。アプリ側でランタイムに制御したいなら React / Vue コンポーネントがあります。