React アダプタ
new@love-rox/ptpt-react
React 向けのスプリットフラップ・ディスプレイ。<Patapata>(1セル)、<PatapataBoard>(一列)、useFlipCell フックを提供します。クライアントコンポーネントなので Waku や Next.js の RSC 構成でも動きます。
v0.1.1MITSSR-safe
GATE01
Install
インストール
@love-rox/ptpt-core は依存として自動的に引き込まれます。react(>=18)はピア依存です。既定の見た目には @love-rox/ptpt-core/styles.css を一度 import してください。
bun
bun add @love-rox/ptpt-reactpnpm
pnpm add @love-rox/ptpt-reactnpm
npm i @love-rox/ptpt-reactyarn
yarn add @love-rox/ptpt-reactGATE02
Usage
使い方
<PatapataBoard> に targets 文字列を渡すだけ——セル数は文字列の長さから決まります。cellOptions は全セルに共通で適用されます。各文字が所定の値までめくれ、盤面は時間差で動きます。targets を変えると新しいフリップが走ります。
import { PatapataBoard } from "@love-rox/ptpt-react";
import { alphanumericPreset } from "@love-rox/ptpt-core/presets/alphanumeric";
import "@love-rox/ptpt-core/styles.css";
export function Departures() {
return (
<PatapataBoard
cellOptions={{ preset: alphanumericPreset }}
targets="TOKYO "
flipMode="replace"
/>
);
}GATE03
Options
オプション
<Patapata> は CellOptions のすべてのフィールドに加え、下記のコンポーネント専用プロパティを受け付けます。共通オプションは Vue / rehype / Astro と完全に同じ意味で動きます。
共通セルオプション
| オプション | 型 | 既定値 | 説明 |
|---|---|---|---|
| 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 は瞬時に切り替えます。 |
コンポーネント専用プロパティ
| オプション | 型 | 既定値 | 説明 |
|---|---|---|---|
| target | string | — | 変化を監視し、変わるたびにめくる先のスラッグ。 |
| flipMode | 'replace' | 'queue' | undefined | target が連続で変わったときの挙動。replace は最新だけ、queue は順番に。 |
| onFlipComplete | () => void | undefined | 各フリップが落ち着いたあとに呼ばれます。 |
| className / style | string / CSSProperties | undefined | ホスト要素に付与するクラス/スタイル。 |
GATE04
Behaviour
挙動の注記
- 構造に関わるオプションはマウント時に読まれます。作り直したいときは
keyを渡してください。target/targetsを変えるだけならフリップが走るだけです。 flipMode="replace"(既定)は連続更新を最新の目標にまとめます。flipMode="queue"は順番に消化します。- 盤面は1つの
role="status"ライブリージョンです。onFlipCompleteは各フリップが落ち着いたあとに呼ばれます。 - preset には文字列ではなくプリセットオブジェクト(
preset={digitsPreset})を渡してください。文字列はプリセット名ではなく、フラップの文字列そのものとして扱われます。
GATE05
Related
他のアダプタ
Vue を使っているなら同じ API の Vue 版があります。Markdown のレンダリングや静的サイトの生成なら、React を持ち込まずに rehype / Astro 版が build 時に処理します。