Runtime
Slides アーキテクチャ
Slide Press の構造:Press marker、folder-per-slide source、template registry、core objects、安定した object identity。
OpenPress は、deck の順序、各 slide の source、再利用可能な template、theme CSS を分離します。この分離により slide style を package として移植しやすくなり、Agent は巨大な deck file ではなく単一 slide に集中できます。
press.tsx は順序を記述する
press/<slug>/press.tsx は deck の index です。<Slide id="..." /> で再生順序を登録し、各 slide の実際の layout は別の source file に置きます。
import { Press, Slide } from "@open-press/core";
export default function SlidePress() {
return (
<Press slug="slide" title="Deck Title" type="slides" page="slide-16-9">
<Slide id="cover" />
<Slide id="agenda" />
</Press>
);
}
各 slide は独立した source file を持つ
各 slide は press/<slug>/slides/<id>/slide.tsx にあります。この file が実際の visual source で、通常は Slide、Frame、Text、Line、MediaObject などの core objects を組み合わせます。
Folder-per-slide は次の点で有効です:
- Agent は deck 全体を理解せずに 1 枚の slide を編集できます。
- Git diff と履歴が読みやすくなります。
- Workbench の add、delete、skip が明確な source folder に対応します。
Template registry が移植境界になる
press/<slug>/slide-style/manifest.json は利用可能な template を登録します。Slide を追加すると、CLI または Workbench は slide-style/templates/<template>/ から新しい slides/<id>/ folder に template をコピーします。
この境界が重要です。Style package は templates と theme CSS を持ち運び、deck は生成された slide source を保存します。
Object identity は primitives で表現する
編集可能 object を大きな compound wrapper の props に隠さないでください。Template は core objects を直接使います:
Frameの identity にはframeKeyを使います。Text、Line、MediaObjectは template 内で安定したlabelを指定します。- 固定配置には
boxを使います。16:9 slide の base canvas は 1920 x 1080 です。 - フロー配置には
Frame layoutを使います。 - Typography、color、spacing、visual effects は theme CSS に置きます。
Engine はこれらの primitives から Workbench の inline editing、comments、thumbnails、preview のための locator を生成します。作者と Agent の責任は、安定した local ID と明確な source structure を提供することです。
詳細は Core Object API を参照してください。