2026-06-23 07:45:57 +03:30
|
|
|
import type { SceneBlock } from "./types";
|
|
|
|
|
import { TitleCardBlock } from "./blocks/TitleCard";
|
|
|
|
|
import { CharacterSceneBlock } from "./blocks/CharacterScene";
|
|
|
|
|
import { ImageCaptionBlock } from "./blocks/ImageCaption";
|
|
|
|
|
import { KineticQuoteBlock } from "./blocks/KineticQuote";
|
|
|
|
|
import { SlideshowBlock } from "./blocks/Slideshow";
|
|
|
|
|
import { OutroCTABlock } from "./blocks/OutroCTA";
|
2026-06-23 15:05:15 +03:30
|
|
|
import { LogoRevealBlock } from "./blocks/LogoReveal";
|
|
|
|
|
import { StatCounterBlock } from "./blocks/StatCounter";
|
2026-06-23 07:45:57 +03:30
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* The scene-block registry. A FlexStory template is an ordered list of these
|
|
|
|
|
* blocks; new template types = new blocks. Each block declares its editable
|
|
|
|
|
* fields + duration range (so the studio can clamp per-block, not globally).
|
|
|
|
|
*/
|
|
|
|
|
export const SCENE_BLOCKS: Record<string, SceneBlock> = {
|
|
|
|
|
[TitleCardBlock.id]: TitleCardBlock,
|
|
|
|
|
[CharacterSceneBlock.id]: CharacterSceneBlock,
|
|
|
|
|
[ImageCaptionBlock.id]: ImageCaptionBlock,
|
|
|
|
|
[KineticQuoteBlock.id]: KineticQuoteBlock,
|
|
|
|
|
[SlideshowBlock.id]: SlideshowBlock,
|
|
|
|
|
[OutroCTABlock.id]: OutroCTABlock,
|
2026-06-23 15:05:15 +03:30
|
|
|
[LogoRevealBlock.id]: LogoRevealBlock,
|
|
|
|
|
[StatCounterBlock.id]: StatCounterBlock,
|
2026-06-23 07:45:57 +03:30
|
|
|
};
|
|
|
|
|
|
|
|
|
|
export const BLOCK_LIST = Object.values(SCENE_BLOCKS);
|
|
|
|
|
export const getBlock = (id: string): SceneBlock | undefined => SCENE_BLOCKS[id];
|