@open-press/core
Press
単一のドキュメント。<Press> はそのタイトル、ページのジオメトリ、ソース、ソースのルートディレクトリ、および配下の Frames + 補助ツールの React ツリー構造を宣言します。フォルダの規約に従うプロジェクトでは、press/<slug>/press.tsx から単一の Press をエクスポートします。
<Press> コンポーネントは、単一のドキュメントのコア設定、コンテンツソース、およびコンポーネント構造を定義します。エンジンはこの宣言を通じて、Workspace 内に分離されたドキュメントの境界を確立します。
1.0 契約: システムは出版物を発見するために press/*/press.tsx フォルダ規約に依存しています。各エントリファイルはデフォルトエクスポートとして単一の <Press> インスタンスを返す必要があり、slug はフォルダ名と一致している必要があります。
単一のドキュメントのコンテキスト、レイアウト、およびデータソースを設定・カプセル化します。レンダリング時には `Frame` および補助コンポーネントのホストとして機能します。
import { Press } from "@open-press/core"; <Press
title="..."
page="a4" | "social-square" | "slide-16-9" | PageGeometry
sources={[ mdxSource({ id, preset, root }) ]}
slug?
theme?
componentsDir?
mediaDir?
>
{/* Frames + 原稿補助ツール */}
</Press> ドキュメント設定 (Metadata & Routing)
| Name | Type | Default | Description |
|---|---|---|---|
title required | string | ドキュメントの完全な名前。HTML の ` | |
slug | string | URL ルーティングおよび出力ディレクトリの識別子。デフォルトでは親ディレクトリ名から自動的に推論されます(例: `press/report` は `report` に対応します)。 |
リソース登録 (Resource Registration)
| Name | Type | Default | Description |
|---|---|---|---|
page required | "a4" | "social-square" | "slide-16-9" | PageGeometry | この Press の page geometry。一般的な形式には preset を使い、プロジェクト固有のサイズには `{ id, label, width, height }` custom object を渡します。Exporter は resolved geometry を `--openpress-page-*` CSS variables に変換します。 | |
sources required | SourceRegistration[] | `mdxSource()` によって初期化されたデータソースのリスト。内部で定義された `id` は ` | |
theme | string | この Press の theme path override。新しい work では tokens と font loading を `press/ | |
componentsDir | string | string[] | MDX のオートロードコンポーネントの物理ディレクトリ。デフォルトで `./components` が含まれます。ディレクトリ内のコンポーネントは `import` なしで MDX で使用できます。 | |
mediaDir | string | string[] | ローカルメディアファイルのディレクトリ。デフォルトで `./media` が含まれます。 | |
children required | ReactNode | ドキュメント本体を構成する `` および補助コンポーネント(` |
例:単一ドキュメントの宣言
import { Press, Frame } from "@open-press/core";
import { mdxSource } from "@open-press/core/mdx";
import { Sections, Toc } from "@open-press/core/manuscript";
export default function ReportPress() {
return (
<Press
title="Transport models in dense networks"
page="a4"
sources={[
mdxSource({ id: "story", preset: "section-folders", root: "report/chapters" }),
]}
>
<Frame frameKey="cover" role="document.cover">
<Cover />
</Frame>
<Toc source="story" maxLevel={2} />
<Sections source="story" />
</Press>
);
}例:プロジェクト固有の geometry
<Press
slug="campaign"
title="Campaign Card"
page={{ id: "campaign-card", label: "Campaign Card", width: "1080px", height: "1350px" }}
>
<Frame frameKey="cover" role="social.card">
<CampaignCard />
</Frame>
</Press> 実行時契約と制約
エンジンが <Press> を処理する際、以下の不変法則に従います:
- 単一ルートノードの法則: ドキュメントのすべての可視コンテンツおよび構造コンテンツは、単一の
<Press>の子である必要があります。 - 設定の一貫性: ドキュメント設定はすべて props にカプセル化され、並行するフロントエンド設定ファイルは存在しません。
- 順序の制約: ツリー構造のトップレベルコンポーネントの順序(例: カバー、目次、本文の段落)は、出力されるページネーションの順序に直接対応します。
- ステートレスレンダリング (Stateless Rendering): レンダリングフェーズでは複数のパス(スペースの計算、ブロックの配置など)が行われます。開発者はコンポーネントツリーの内部で副作用(ネットワークの読み書き、乱数生成、キャッシュ操作など)を引き起こしてはなりません。