GATE01

Install

インストール

ピア依存は astro >= 4@love-rox/ptpt-core です。@love-rox/ptpt-rehype は依存として自動的に引き込まれます。

bun

bun add @love-rox/ptpt-astro

pnpm

pnpm add @love-rox/ptpt-astro

npm

npm i @love-rox/ptpt-astro

yarn

yarn add @love-rox/ptpt-astro
GATE02

Pieces

中身は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> は改行で分割して複数行の盤面にします。

GATE03

Usage

使い方

astro.config.mjs にインテグレーションを追加します。これだけで印付きの Markdown / MDX 本文が動き、スタイルシートと hydrator も注入されます。

astro.config.mjsts
// 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(オプション付き)ts
// 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 が解決します。

src/pages/example.astroastro
---
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" />
GATE04

Options

オプション

共通セルオプション(data-ptpt-* で渡されます)は React / Vue / rehype と同じ意味で動きます。インテグレーション自体には3つのトグルがあります。

共通セルオプション + rehype 由来

オプション既定値説明
presetPresetDefinition | stringdefaultPresetフラップに使う文字セット。PresetDefinitionrecommendedDuration / locale を既定値に使う)か、フラップ順を表す文字列を渡します。frames とは排他です。
framesFrameInput[]undefined明示的なフレーム集合。文字だけでなく画像や任意要素も指定できます。preset とは排他です。
durationPerFlapnumberプリセットの推奨値、なければ 2001 枚をめくるミリ秒数。プリセットの recommendedDuration を上書きします。
direction'forward' | 'shortest''forward'フレームのリングをめくる向き。shortest は近いほうへ逆回りすることもあります。
reducedMotion'instant' | 'minimal' | 'ignore''instant'OS が「視差効果を減らす」設定のときの挙動。instant は瞬時に切り替えます。
classNamestring'patapata'インライン要素を盤面に変換する目印となるクラス名。
fenceLanguagestring'patapata'盤面に変換するフェンスコードブロックのコードフェンス言語。
defaultPresetstringundefined要素/ブロックがプリセットを指定しないときに使うプリセット名。

インテグレーションオプション

オプション既定値説明
markdownboolean | RehypePtptOptionstrueMarkdown / MDX パイプラインに rehypePtpt を登録するか。オブジェクトを渡すと rehype 側のオプション(defaultPreset など)を転送できます。false でオフ。
stylesbooleantrue各ページに @love-rox/ptpt-core/styles.css を注入するか。
hydratebooleantrue読み込み時に走るクライアント hydrator を注入するか。
GATE05

Behaviour

挙動の注記

  • Astro は SSG-first なので、プラグインは build 時に走ります。クライアント側のコストは、静的マークアップを動かす小さな hydrator だけです。
  • JS がなくても盤面はプレーンで読めるテキストとして表示され、hydration はフリップを足すだけです。
  • markdown: false で Markdown パイプラインをオフにできます(コンポーネントだけ使う場合など)。styles: false / hydrate: false で各注入をスキップできます。
  • コンポーネントと Markdown プラグインは同じ data-ptpt-* 出力を共有するので、.astro 直書きと Markdown 本文で挙動が揃います。
GATE06

Related

他のアダプタ

Astro を使っていない場合は、生の rehype プラグインunified パイプラインに直接組み込んでください。アプリ側でランタイムに制御したいなら React / Vue コンポーネントがあります。