@open-press/core/manuscript
原稿補助ツール
長編の章フローのための選択可能な補助ツールです。Sections は登録されたソースを反復処理し、各章ごとにフレームを発行し、コンテンツの長さに応じて自動的に複数のフレームにページ分割します。Toc + TocArea は自動生成された目次を提供します。
@open-press/core/manuscript モジュールは、長編の章、自動ページ分割、および目次生成をサポートする React コンポーネントとユーティリティ関数を提供します。主にレポート、論文、書籍などのドキュメントタイプに適用されます。固定レイアウトのプレゼンテーションやカードデザインでは、このモジュールをスキップする必要があります。
指定された MDX ソースを反復処理し、対応するフレームシーケンスを自動生成します。コンテンツのオーバーフローを処理する際に新しいページを自動的にインスタンス化します。
import { Sections } from "@open-press/core/manuscript"; <Sections
source="story"
page?={SectionsPageComponent}
opener?={SectionsOpenerComponent}
/> プロパティ (Props)
| Name | Type | Default | Description |
|---|---|---|---|
source required | string | ` | |
page | ComponentType<SectionsPageProps> | DefaultSectionPage | 単一ページレンダリングコンポーネント。`frameKey`、`chainId`、`pageIndex`、`totalPages`、`sectionSlug`、`sectionTitle`、`sectionTone` などのコンテキストプロパティを受け取ります。 |
opener | ComponentType<SectionsOpenerProps> | 章のオープナー(セパレーター)レンダリングコンポーネント。指定された場合、各章の最初のページの前に挿入されます。 |
例:カスタマイズされたコンテンツのページ分割
function ContentPage({
frameKey, chainId, pageIndex, totalPages, sectionTitle,
}: SectionsPageProps) {
return (
<Frame frameKey={frameKey} role="document.content">
<div className="flex h-full flex-col px-16 py-12">
<main className="min-h-0 flex-1 text-[22px] leading-relaxed">
<MdxArea chainId={chainId} />
</main>
<footer className="flex justify-between text-xs uppercase tracking-wide text-neutral-500">
<span>{sectionTitle}</span>
<span>{pageIndex + 1}/{totalPages}</span>
</footer>
</div>
</Frame>
);
}
<Press><Sections source="story" page={ContentPage} /></Press> `<Sections>` のエイリアスコンポーネント。コンテンツ階層のセマンティクスが「章」(Chapter) である場合に使用し、プロパティインターフェースは `<Sections>` と完全に同じです。
import { Chapters } from "@open-press/core/manuscript"; システムのデフォルトの章ページ分割コンポーネント。標準のヘッダー、フッター、および `<MdxArea>` コンテンツスロットの実装が組み込まれています。
import { DefaultSectionPage } from "@open-press/core/manuscript"; <DefaultSectionPage {...sectionsPageProps} /> ドキュメントの見出し構造に基づいて目次 (Table of Contents) を生成します。自動的に `<Frame>` として設定され、ページをまたぐオーバーフローをサポートします。
import { Toc } from "@open-press/core/manuscript"; <Toc
source="story"
maxLevel?={3}
page?={TocPageComponent}
/> プロパティ (Props)
| Name | Type | Default | Description |
|---|---|---|---|
source required | string | 見出し階層を抽出するターゲット MDX ソース識別子。 | |
maxLevel | number | 3 | 抽出する見出しの最大深度(例: `3` は H1 から H3 までを抽出することを示します)。 |
page | ComponentType<TocPageProps> | カスタマイズされた目次コンテナコンポーネント。デフォルトの実装では、標準の Frame と ` |
管理された目次コンテンツスロット。目次シナリオ向けの `<MdxArea>` の特化ラッパーであり、`<Toc>` カスタムページ内で使用する必要があります。
import { TocArea } from "@open-press/core/manuscript"; <TocArea
chainId="toc:story"
maxLevel?={3}
overflow?="extend"
className?
/> プロパティ (Props)
| Name | Type | Default | Description |
|---|---|---|---|
chainId required | string | システムが生成する目次チェーン識別子(フォーマットは `toc: | |
maxLevel | number | 3 | 目次リスト出力の見出しの深さを制御します。 |
overflow | "extend" | "truncate" | "extend" | `MdxArea` のオーバーフロー処理セマンティクスと一致します。 |
className | string | ルートの `
|
実装上の注意点
- 暗黙の CSS スコープ:原稿によって生成される
<Frame>には、テーマスタイルシートのカスケード選択用にデフォルトでrole="manuscript.content"またはrole="manuscript.toc"属性が付与されます。 - 内部リンクバインディング:目次ソースリンク(例:
toc:story)は、ビルドフェーズでエンジンが見出しを反復処理することによって自動的に生成され、開発者が手動で書き込んだり登録したりすることはできません。 - デザインパターンの境界:ドキュメントに高度にカスタマイズされた固定レイアウトデザインが必要な場合は、
<Sections>補助ツールの使用を放棄し、代わりにFrameの手動宣言とoverflow="truncate"の<MdxArea>実装を組み合わせて使用する必要があります。