@blockslides/ai-context 0.3.2 → 0.3.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.cjs +5 -5
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +5 -5
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/contexts/v1/index.ts","../src/contexts/v1/core.ts","../src/contexts/v1/output.fullDocument.ts","../src/contexts/v1/imageBlock.ts","../src/contexts/v1/column.ts","../src/contexts/v1/columnGroup.ts","../src/contexts/v1/slide.ts","../src/contexts/v1/style.ts","../src/contexts/v1/editingRules.ts","../src/contexts/v1/sizing.ts","../src/contexts/v1/blockquote.ts","../src/contexts/v1/bulletList.ts","../src/contexts/v1/codeBlock.ts","../src/contexts/v1/hardBreak.ts","../src/contexts/v1/horizontalRule.ts","../src/contexts/v1/image.ts","../src/contexts/v1/heading.ts","../src/contexts/v1/paragraph.ts","../src/contexts/v1/youtube.ts","../src/bundles/v1/index.ts","../src/bundles/v1/minimalCreate.ts","../src/bundles/v1/imageEditing.ts","../src/bundles/v1/all.ts","../src/schemas/v1/index.ts","../src/schemas/v1/imageBlock.schema.json","../src/schemas/v1/column.schema.json","../src/schemas/v1/columnGroup.schema.json","../src/schemas/v1/slide.schema.json","../src/schemas/v1/blockquote.schema.json","../src/schemas/v1/bulletList.schema.json","../src/schemas/v1/codeBlock.schema.json","../src/schemas/v1/hardBreak.schema.json","../src/schemas/v1/horizontalRule.schema.json","../src/schemas/v1/image.schema.json","../src/schemas/v1/heading.schema.json","../src/schemas/v1/paragraph.schema.json","../src/schemas/v1/youtube.schema.json","../src/bundles/v1/allSchemas.ts","../src/bundles/v1/allContexts.ts","../src/templates/v1/index.ts","../src/templates/v1/schemaBuilder.ts","../src/templates/v1/presetTemplateBuilder.ts"],"sourcesContent":["export { core } from \"./core\";\nexport { fullDocument } from \"./output.fullDocument\";\nexport { imageBlock } from \"./imageBlock\";\nexport { column } from \"./column\";\nexport { columnGroup } from \"./columnGroup\";\nexport { slide } from \"./slide\";\nexport { style } from \"./style\";\nexport { editingRules } from \"./editingRules\";\nexport { sizing } from \"./sizing\";\nexport { blockquote } from \"./blockquote\";\nexport { bulletList } from \"./bulletList\";\nexport { codeBlock } from \"./codeBlock\";\nexport { hardBreak } from \"./hardBreak\";\nexport { horizontalRule } from \"./horizontalRule\";\nexport { image } from \"./image\";\nexport { heading } from \"./heading\";\nexport { paragraph } from \"./paragraph\";\nexport { youtube } from \"./youtube\";\n\n","export const core = `\n<core>\nYou are given a BlockSlides document to CREATE or EDIT.\n\nDocument shape:\n- doc: { type: \"doc\", content: slide[] }\n- slide: { type: \"slide\", attrs?, content: block[] }\n- block: includes heading, paragraph, column, imageBlock, bulletList, codeBlock, blockquote, horizontalRule, youtube, etc.\n- column: { type: \"column\", attrs?, content: block[] }\n\nKey changes:\n- Slides can contain columns, columnGroups, or any block-level content\n- Use column directly in slide for full-width blocks\n- Use columnGroup to place multiple columns side-by-side\n- All block types inherit common attributes from BaseBlockAttributes\n\nBaseBlockAttributes (available on all blocks):\n- align: \"left\" | \"center\" | \"right\" | \"stretch\"\n- justify: \"start\" | \"center\" | \"end\" | \"space-between\" (for containers)\n- padding: \"none\" | \"sm\" | \"md\" | \"lg\"\n- margin: \"none\" | \"sm\" | \"md\" | \"lg\"\n- gap: \"none\" | \"sm\" | \"md\" | \"lg\"\n- backgroundColor: string (CSS color)\n- backgroundImage: string (URL)\n- borderRadius: \"none\" | \"sm\" | \"md\" | \"lg\"\n- border: string (CSS border)\n- fill: boolean (fill available space)\n- width: string (CSS width)\n- height: string (CSS height)\n\nRules:\n- Use only known node types and valid attrs. Do not invent attributes.\n- Prefer stable references: preserve slide.attrs.id if present.\n- Slides and flyers share the same JSON; flyers are slides sized via attrs and theme.\n- Use semantic spacing tokens (sm/md/lg) instead of raw pixel values\n</core>\n`.trim();\n\n\n","export const fullDocument = `\nOutput contract:\n- Return exactly one JSON object representing the ENTIRE document.\n- No prose, no markdown, no code fences, no comments. JSON only.\n- Include all required attrs. Use allowed enum values only.\n`.trim();\n\n\n","export const imageBlock = `\n<imageBlock>\nNode: imageBlock (block group)\nAttrs (required):\n- src (required): string (image URL)\n\nAttrs (optional - image-specific):\n- alt (optional): string - alt text for accessibility\n- caption (optional): string - image caption\n- credit (optional): string - image credit/attribution\n- assetId (optional): string - asset reference\n- size (optional): \"fill\" | \"fit\" | \"natural\" - how image fills container\n - fill: Cover entire container (width:100%, height:100%, object-fit:cover)\n - fit: Fit inside container with letterboxing (object-fit:contain)\n - natural: Use image's natural dimensions\n- crop (optional): \"center\" | \"top\" | \"bottom\" | \"left\" | \"right\" | \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\"\n - Focal point for fill/fit modes (default: \"center\")\n\nAttrs (inherited from BaseBlockAttributes):\n- align (optional): \"left\" | \"center\" | \"right\" | \"stretch\" - block alignment\n- padding (optional): \"none\" | \"sm\" | \"md\" | \"lg\" - internal padding\n- margin (optional): \"none\" | \"sm\" | \"md\" | \"lg\" - external margin\n- backgroundColor (optional): string - background color\n- borderRadius (optional): \"none\" | \"sm\" | \"md\" | \"lg\" - corner rounding\n- width (optional): string - explicit width override (CSS value)\n- height (optional): string - explicit height override (CSS value)\n\nDeprecated attributes (kept for backwards compatibility, do not use):\n- layout, fullBleed, focalX, focalY\n\nNotes:\n- Default size is \"fill\" if not specified\n- Use crop to control which part of the image is visible when cropped\n- width/height overrides apply on top of size mode\n</imageBlock>\n`.trim();\n\n\n","export const column = `\n<column>\nNode: column (block group)\nAttrs (inherits from BaseBlockAttributes):\n- align (optional): \"left\" | \"center\" | \"right\" | \"stretch\" - horizontal alignment\n- justify (optional): \"start\" | \"center\" | \"end\" | \"space-between\" - vertical distribution of children\n- padding (optional): \"none\" | \"sm\" | \"md\" | \"lg\" - internal spacing (semantic tokens)\n- margin (optional): \"none\" | \"sm\" | \"md\" | \"lg\" - external spacing\n- gap (optional): \"none\" | \"sm\" | \"md\" | \"lg\" - space between child blocks\n- backgroundColor (optional): string - CSS color\n- backgroundImage (optional): string - background image URL\n- borderRadius (optional): \"none\" | \"sm\" | \"md\" | \"lg\" - corner rounding\n- border (optional): string - CSS border value\n- fill (optional): boolean - whether to fill available space\n- width (optional): string - explicit width (CSS value)\n- height (optional): string - explicit height (CSS value)\n\nContent:\n- Contains one or more blocks (heading, paragraph, imageBlock, bulletList, etc.)\n- Columns cannot nest other columns\n\nSpacing tokens:\n- none: 0\n- sm: 8px\n- md: 16px\n- lg: 32px\n\nBorder radius tokens:\n- none: 0\n- sm: 4px\n- md: 8px\n- lg: 16px\n\nNotes:\n- Use column directly in slide for full-width content\n- Wrap columns in columnGroup to place them side-by-side\n- Use justify to control vertical distribution of child blocks\n- Use gap for spacing between children instead of margins\n</column>\n`.trim();\n\n\n","export const columnGroup = `\n<columnGroup>\nNode: columnGroup (horizontal container)\nPurpose: Groups multiple columns side-by-side horizontally\n\nAttrs:\n- layout (optional): string - Layout ratio for columns (e.g., \"1-1\" for equal width, \"2-1\" for 2:1 ratio, \"1-2-1\" for three columns)\n- fill (optional): boolean - Whether the columnGroup fills available vertical space\n- className (optional): string - CSS classes\n- backgroundMode (optional): \"none\" | \"color\" | \"image\" | \"imageOverlay\"\n- backgroundColor (optional): string - CSS color for background\n- backgroundImage (optional): string - URL for background image\n- backgroundOverlayColor (optional): string - Color for overlay when using imageOverlay\n- backgroundOverlayOpacity (optional): number (0-1) - Opacity for overlay\n\nContent:\n- Contains one or more column nodes\n- Columns within a columnGroup are displayed side-by-side horizontally\n- Each column shares the horizontal space (equal width by default, or based on layout attribute)\n\nUsage:\n- Use columnGroup when you want columns to appear next to each other horizontally\n- For full-width content, use column directly in the slide (without columnGroup)\n- You can have multiple columnGroups in a slide to create different rows of columns\n\nExamples:\n1. Two equal columns side-by-side:\n columnGroup { content: [column, column] }\n\n2. Three columns with 2:1:1 ratio:\n columnGroup { attrs: { layout: \"2-1-1\" }, content: [column, column, column] }\n\n3. Full-width content above and below a two-column section:\n slide {\n content: [\n column { ... }, // full-width\n columnGroup { // side-by-side\n content: [column, column]\n },\n column { ... } // full-width\n ]\n }\n</columnGroup>\n`.trim();\n","export const slide = `\n<slide>\nNode: slide\nAttrs:\n- id (optional): string (stable identifier; preserve if present)\n- className (optional): string (styling)\n- size (optional): \"16x9\" | \"4x3\" | \"a4-portrait\" | \"a4-landscape\" | \"letter-portrait\" | \"letter-landscape\" | \"linkedin-banner\"\n- backgroundMode (optional): \"none\" | \"color\" | \"image\" | \"imageOverlay\"\n- backgroundColor (optional): string (CSS color for solid backgrounds)\n- backgroundImage (optional): string (URL for slide-level background image)\n- backgroundOverlayColor (optional): string (color for the overlay when using imageOverlay)\n- backgroundOverlayOpacity (optional): number (0–1, opacity for the overlay)\n\nContent:\n- slide can contain columns, columnGroups, or any block-level content (heading, paragraph, imageBlock, bulletList, codeBlock, etc.)\n- Use column directly for full-width content\n- Use columnGroup to place multiple columns side-by-side\n- You can mix columns, columnGroups, and other blocks in any order\n\nNotes:\n- Flyers are slides sized for paper (e.g., size: \"a4-portrait\").\n- Set size to control canvas dimensions; theme applies the exact width/height.\n- For background images, prefer backgroundMode/backgroundImage over Tailwind bg-[url(...)]; the extension will inject the correct CSS.\n- To create multi-column layouts, wrap columns in a columnGroup\n</slide>\n`.trim();\n\n\n","export const style = `\n<style>\nStyling\n- Prefer using attrs.className for styling (e.g., Tailwind classes).\n- Use enums for canonical behaviors (e.g., imageBlock.layout).\n- When enums are insufficient (spacing, backgrounds), use className.\n</style>\n`.trim();\n\n\n","export const editingRules = `\n<General editing rules>\n- Preserve existing ids and valid attributes. Do not remove or rename known attrs.\n- Use only allowed enum values. Do not invent new enum values.\n- Avoid introducing new attributes that are not documented. If styling is needed, prefer className.\n- Keep the document valid: slide > (column | columnGroup > column) > blocks.\n</General editing rules>\n\n<Centering content in a column>\n- Columns are flex containers. Use their alignment attrs instead of per-block hacks.\n- To center all content vertically and horizontally inside a column:\n - Set column.attrs.verticalAlign = \"center\".\n - Set column.attrs.horizontalAlign = \"center\".\n- This will apply to headings, paragraphs, imageBlocks, and other blocks inside that column.\n- Example:\n - Before: column.attrs = { verticalAlign: \"top\", horizontalAlign: \"left\", padding: \"none\" }\n - After: column.attrs = { verticalAlign: \"center\", horizontalAlign: \"center\", padding: \"none\" }\n</Centering content in a column>\n\n<Backgrounds (slides, columnGroups, columns)>\n- Use structured background attrs instead of raw Tailwind bg-[url(...)] when setting background images.\n- If you use bg-[...], the image will not work because the tailwind classes we need have been tree shaken off - instead use the attributes.\n- For slide-level backgrounds (hero/flyer):\n - Use slide.attrs.backgroundMode = \"color\" | \"image\" | \"imageOverlay\".\n - For images, set slide.attrs.backgroundImage to the image URL.\n - For overlays, set slide.attrs.backgroundOverlayColor (e.g., \"rgba(0,0,0,0.8)\") and slide.attrs.backgroundOverlayOpacity (0–1).\n- For horizontal bands, use columnGroup-level backgrounds (columnGroup.attrs.background*).\n- For panel-style sections, use column-level backgrounds (column.attrs.background*).\n- Do not mix multiple background images on the same node; prefer one backgroundMode per slide/columnGroup/column and layer additional visuals as imageBlock nodes.\n</Backgrounds (slides, columnGroups, columns)>\n\n<Text editing (headings and paragraphs)>\n- Preserve semantic types: do not turn headings into paragraphs or vice versa unless explicitly asked.\n- To change heading level, update heading.attrs.level (1–6) without changing its id.\n- To change the text, edit the text nodes inside content, keeping marks and structure when possible.\n- For alignment of text itself, prefer using the textAlign extension (textAlign: \"left\" | \"center\" | \"right\" | \"justify\") if configured.\n- Do not introduce inline HTML; represent formatting via marks (bold, italic, underline, etc.).\n</Text editing (headings and paragraphs)>\n\n<Image blocks>\n- Use imageBlock for rich images; preserve src, assetId, and metadata unless the user explicitly asks to change them.\n- To change the alignment of an imageBlock within its column, set imageBlock.attrs.align to \"left\", \"center\", \"right\", or \"stretch\".\n- To change how the image is fit, adjust imageBlock.attrs.layout (for example: \"cover\", \"contain\", \"fill\", \"focus\", or a configured layout key).\n- When centering both text and image in a column, combine:\n - column verticalAlign/horizontalAlign for layout, and\n - imageBlock align for how the image itself sits in the column.\n- Do not invent new layout or align values that are not documented in the schema.\n</Image blocks>\n\n`.trim();\n\n\n","export const sizing = `\n<sizing>\nSizing\n- Slides and flyers share the same JSON. Flyers are slides sized via slide.attrs.size and theme rules.\n- Allowed sizes: \"16x9\" | \"4x3\" | \"a4-portrait\" | \"a4-landscape\" | \"letter-portrait\" | \"letter-landscape\" | \"linkedin-banner\".\n- Editors may render with fixed canvases or dynamic mode. The default is fixed; dynamic stretches to container with preserved aspect.\n</sizing>\n`.trim();\n\n\n","export const blockquote = `\n<blockquote>\nNode: blockquote (block group)\nAttrs (inherited from BaseBlockAttributes):\n- align: \"left\" | \"center\" | \"right\"\n- padding: \"none\" | \"sm\" | \"md\" | \"lg\"\n- margin: \"none\" | \"sm\" | \"md\" | \"lg\"\n- backgroundColor: string (CSS color)\n- borderRadius: \"none\" | \"sm\" | \"md\" | \"lg\"\n- (and other base attributes)\n\nContent:\n- One or more block nodes (typically paragraphs, headings, lists).\n\nSemantics:\n- Use for quoted text or callouts inside a column or slide.\n- BaseBlockAttributes provide consistent styling capabilities.\n</blockquote>\n`.trim();\n\n\n","export const bulletList = `\n<bulletList>\nNode: bulletList (block group)\nAttrs (inherited from BaseBlockAttributes):\n- align: \"left\" | \"center\" | \"right\"\n- padding: \"none\" | \"sm\" | \"md\" | \"lg\"\n- margin: \"none\" | \"sm\" | \"md\" | \"lg\"\n- backgroundColor: string (CSS color)\n- borderRadius: \"none\" | \"sm\" | \"md\" | \"lg\"\n- (and other base attributes)\n\nContent:\n- One or more list item nodes (listItem) that contain paragraphs or inline content.\n\nSemantics:\n- Represents an unordered list rendered as <ul>.\n- Use when you need bullet points inside a column or slide.\n- Can be placed directly in slides or within columns.\n</bulletList>\n`.trim();\n\n\n","export const codeBlock = `\n<codeBlock>\nNode: codeBlock (block group)\nAttrs (codeBlock-specific):\n- language (optional): string | null (e.g., \"js\", \"ts\", \"python\")\n\nAttrs (inherited from BaseBlockAttributes):\n- align: \"left\" | \"center\" | \"right\"\n- padding: \"none\" | \"sm\" | \"md\" | \"lg\"\n- margin: \"none\" | \"sm\" | \"md\" | \"lg\"\n- backgroundColor: string (CSS color)\n- borderRadius: \"none\" | \"sm\" | \"md\" | \"lg\"\n- (and other base attributes)\n\nContent:\n- Plain text only (no child nodes); used for preformatted code samples.\n\nSemantics:\n- Renders as <pre><code>…</code></pre>.\n- language controls a CSS class (e.g., \"language-js\") for syntax highlighting.\n- Use when the user explicitly wants a fenced code block, not inline code in a paragraph.\n</codeBlock>\n`.trim();\n\n\n","export const hardBreak = `\n<hardBreak>\nNode: hardBreak\nAttrs:\n- None (HTML-only); behaves like a manual line break.\n\nContent:\n- Inline-only; used within paragraphs or headings.\n\nSemantics:\n- Renders as <br> and as a newline in plain text exports.\n- Use when the user requests a line break without starting a new paragraph.\n</hardBreak>\n`.trim();\n\n\n","export const horizontalRule = `\n<horizontalRule>\nNode: horizontalRule (block group)\nAttrs (inherited from BaseBlockAttributes):\n- align: \"left\" | \"center\" | \"right\" | \"stretch\"\n- padding: \"none\" | \"sm\" | \"md\" | \"lg\"\n- margin: \"none\" | \"sm\" | \"md\" | \"lg\"\n- backgroundColor: string (CSS color)\n- (and other base attributes)\n\nContent:\n- No children; this is a self-contained separator.\n\nSemantics:\n- Renders as <hr>.\n- Use to visually separate sections within a slide.\n- Can control spacing around the rule with padding/margin.\n</horizontalRule>\n`.trim();\n\n\n","export const image = `\n<image>\nNode: image\nAttrs:\n- src (required): string (URL to the image).\n- alt (optional): string (accessibility text).\n- title (optional): string (tooltip / caption).\n- width, height (optional): numbers (px) used as hints for rendering.\n\nContent:\n- No children; this is an atomic inline or block-level image node depending on editor configuration.\n\nSemantics:\n- Renders as a simple <img>, unlike imageBlock which adds rich framing/caption UI.\n- Prefer imageBlock for designed layouts; use image for simple inline images in paragraphs.\n</image>\n`.trim();\n\n\n","export const heading = `\n<heading>\nNode: heading (block group)\nAttrs (heading-specific):\n- level (required): 1 | 2 | 3 | 4 | 5 | 6\n\nAttrs (inherited from BaseBlockAttributes):\n- align: \"left\" | \"center\" | \"right\"\n- padding: \"none\" | \"sm\" | \"md\" | \"lg\"\n- margin: \"none\" | \"sm\" | \"md\" | \"lg\"\n- backgroundColor: string (CSS color)\n- borderRadius: \"none\" | \"sm\" | \"md\" | \"lg\"\n- (and other base attributes)\n\nContent:\n- Inline content (text, marks, inline nodes).\n\nSemantics:\n- Renders as <h1>…<h6> depending on level.\n- Use level 1–2 for main slide titles, 3–4 for section headings, 5–6 for subtle labels.\n</heading>\n`.trim();\n\n\n","export const paragraph = `\n<paragraph>\nNode: paragraph (block group)\nAttrs (inherited from BaseBlockAttributes):\n- align: \"left\" | \"center\" | \"right\"\n- padding: \"none\" | \"sm\" | \"md\" | \"lg\"\n- margin: \"none\" | \"sm\" | \"md\" | \"lg\"\n- backgroundColor: string (CSS color)\n- borderRadius: \"none\" | \"sm\" | \"md\" | \"lg\"\n- (and other base attributes)\n\nContent:\n- Inline content (text with marks, inline nodes such as image or hardBreak).\n\nSemantics:\n- Default text block inside columns and slides.\n- Multiple paragraphs can be stacked to create vertical rhythm.\n- Use gap on parent column instead of margin on individual paragraphs for consistent spacing.\n</paragraph>\n`.trim();\n\n\n","export const youtube = `\n<youtube>\nNode: youtube (block group)\nAttrs (youtube-specific):\n- src (required): string (public YouTube URL)\n- start (optional): number (start time in seconds)\n- width (optional): number (frame width in px)\n- height (optional): number (frame height in px)\n\nAttrs (inherited from BaseBlockAttributes):\n- align: \"left\" | \"center\" | \"right\" | \"stretch\"\n- padding: \"none\" | \"sm\" | \"md\" | \"lg\"\n- margin: \"none\" | \"sm\" | \"md\" | \"lg\"\n- borderRadius: \"none\" | \"sm\" | \"md\" | \"lg\"\n- (and other base attributes)\n\nContent:\n- No children; this is an atomic embed node.\n\nSemantics:\n- Renders as an embedded YouTube iframe wrapped in a container <div>.\n- Use for video embeds inside a column or slide.\n- Do not embed raw <iframe> HTML directly; always use the youtube node with attrs.\n</youtube>\n`.trim();\n\n\n","export { minimalCreate } from \"./minimalCreate\";\nexport { imageEditing } from \"./imageEditing\";\nexport { all } from \"./all\";\nexport { allSchemas } from \"./allSchemas\";\nexport { allContexts } from \"./allContexts\";\n\n","import { core, fullDocument, slide, column, style } from \"../../contexts/v1\";\n\nexport const minimalCreate = [core, fullDocument, slide, column, style].join(\"\\n\\n\");\n\n\n","import { core, fullDocument, imageBlock, editingRules } from \"../../contexts/v1\";\n\nexport const imageEditing = [core, fullDocument, imageBlock, editingRules].join(\"\\n\\n\");\n\n\n","import * as ctx from \"../../contexts/v1\";\n\nexport const all = [\n ctx.core,\n ctx.fullDocument,\n ctx.slide,\n ctx.column,\n ctx.style,\n ctx.sizing,\n // Core content blocks and media\n ctx.imageBlock,\n ctx.blockquote,\n ctx.bulletList,\n ctx.heading,\n ctx.paragraph,\n ctx.image,\n ctx.codeBlock,\n ctx.hardBreak,\n ctx.horizontalRule,\n ctx.youtube,\n // Editing behavior\n ctx.editingRules,\n].join(\"\\n\\n\");\n\n\n","export { default as imageBlock } from \"./imageBlock.schema.json\";\nexport { default as column } from \"./column.schema.json\";\nexport { default as columnGroup } from \"./columnGroup.schema.json\";\nexport { default as slide } from \"./slide.schema.json\";\nexport { default as blockquote } from \"./blockquote.schema.json\";\nexport { default as bulletList } from \"./bulletList.schema.json\";\nexport { default as codeBlock } from \"./codeBlock.schema.json\";\nexport { default as hardBreak } from \"./hardBreak.schema.json\";\nexport { default as horizontalRule } from \"./horizontalRule.schema.json\";\nexport { default as image } from \"./image.schema.json\";\nexport { default as heading } from \"./heading.schema.json\";\nexport { default as paragraph } from \"./paragraph.schema.json\";\nexport { default as youtube } from \"./youtube.schema.json\";\n\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"imageBlock\",\n \"description\": \"An image block with simplified size and crop controls. Also inherits common block attributes.\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"imageBlock\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"src\": { \"type\": \"string\", \"minLength\": 1, \"description\": \"Image URL (required)\" },\n \"alt\": { \"type\": \"string\", \"description\": \"Alt text for accessibility\" },\n \"caption\": { \"type\": \"string\", \"description\": \"Image caption\" },\n \"credit\": { \"type\": \"string\", \"description\": \"Image credit/attribution\" },\n \"size\": { \n \"enum\": [\"fill\", \"fit\", \"natural\", null], \n \"description\": \"How the image fills its container: fill (cover), fit (contain), or natural (original size)\" \n },\n \"crop\": { \n \"enum\": [\"center\", \"top\", \"bottom\", \"left\", \"right\", \"top-left\", \"top-right\", \"bottom-left\", \"bottom-right\", null], \n \"description\": \"Crop/focus position for fill/fit modes\" \n },\n \"align\": { \"enum\": [\"left\", \"center\", \"right\", \"stretch\", null], \"description\": \"Block alignment within parent\" },\n \"padding\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Internal padding\" },\n \"backgroundColor\": { \"type\": [\"string\", \"null\"], \"description\": \"Background color\" },\n \"borderRadius\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Corner rounding\" },\n \"width\": { \"type\": [\"string\", \"null\"], \"description\": \"Explicit width override\" },\n \"height\": { \"type\": [\"string\", \"null\"], \"description\": \"Explicit height override\" },\n \"assetId\": { \"type\": [\"string\", \"null\"], \"description\": \"Asset ID reference\" },\n \"layout\": { \"enum\": [\"cover\", \"contain\", \"fill\", \"focus\", \"pattern\", null], \"description\": \"DEPRECATED: Use size instead\" },\n \"fullBleed\": { \"type\": \"boolean\", \"description\": \"DEPRECATED: Use size='fill' instead\" },\n \"focalX\": { \"type\": [\"number\", \"null\"], \"minimum\": 0, \"maximum\": 100, \"description\": \"DEPRECATED: Use crop instead\" },\n \"focalY\": { \"type\": [\"number\", \"null\"], \"minimum\": 0, \"maximum\": 100, \"description\": \"DEPRECATED: Use crop instead\" }\n },\n \"required\": [\"src\"],\n \"additionalProperties\": true\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"column\",\n \"description\": \"A container block that holds other blocks. Common attributes (align, padding, gap, backgroundColor, etc.) are shared with all block types.\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"column\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"align\": { \"enum\": [\"left\", \"center\", \"right\", \"stretch\", null], \"description\": \"Horizontal alignment of content\" },\n \"justify\": { \"enum\": [\"start\", \"center\", \"end\", \"space-between\", null], \"description\": \"Vertical distribution of children\" },\n \"padding\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Internal padding\" },\n \"margin\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"External margin\" },\n \"gap\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Gap between child blocks\" },\n \"backgroundColor\": { \"type\": [\"string\", \"null\"], \"description\": \"Background color\" },\n \"backgroundImage\": { \"type\": [\"string\", \"null\"], \"description\": \"Background image URL\" },\n \"borderRadius\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Corner rounding\" },\n \"border\": { \"type\": [\"string\", \"null\"], \"description\": \"CSS border value\" },\n \"fill\": { \"type\": [\"boolean\", \"null\"], \"description\": \"Whether to fill available space\" },\n \"width\": { \"type\": [\"string\", \"null\"], \"description\": \"Explicit width\" },\n \"height\": { \"type\": [\"string\", \"null\"], \"description\": \"Explicit height\" }\n },\n \"additionalProperties\": true\n },\n \"content\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"object\" },\n \"description\": \"Child blocks\"\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"columnGroup\",\n \"description\": \"A horizontal container that groups multiple columns side-by-side. Use columnGroup when you want columns to be placed next to each other horizontally. For full-width content, use column directly in the slide.\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"columnGroup\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"layout\": {\n \"type\": [\"string\", \"null\"],\n \"description\": \"Layout ratio for columns (e.g., '1-1' for equal, '2-1' for 2:1 ratio)\"\n },\n \"fill\": {\n \"type\": [\"boolean\", \"null\"],\n \"description\": \"Whether the columnGroup should fill available vertical space\"\n },\n \"className\": { \"type\": [\"string\", \"null\"] },\n \"backgroundMode\": {\n \"enum\": [\"none\", \"color\", \"image\", \"imageOverlay\", null]\n },\n \"backgroundColor\": { \"type\": [\"string\", \"null\"] },\n \"backgroundImage\": { \"type\": [\"string\", \"null\"] },\n \"backgroundOverlayColor\": { \"type\": [\"string\", \"null\"] },\n \"backgroundOverlayOpacity\": { \"type\": [\"number\", \"null\"] }\n },\n \"additionalProperties\": true\n },\n \"content\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"column\" }\n },\n \"required\": [\"type\"]\n },\n \"minItems\": 1,\n \"description\": \"Array of column nodes\"\n }\n },\n \"required\": [\"type\", \"content\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"slide\",\n \"description\": \"A slide containing blocks directly. Blocks can be any block-level node (heading, paragraph, column, imageBlock, etc.). Adjacent columns automatically form horizontal layouts.\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"slide\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"id\": { \"type\": [\"string\", \"null\"] },\n \"className\": { \"type\": [\"string\", \"null\"] },\n \"size\": {\n \"enum\": [\n \"16x9\",\n \"4x3\",\n \"a4-portrait\",\n \"a4-landscape\",\n \"letter-portrait\",\n \"letter-landscape\",\n \"linkedin-banner\",\n null\n ]\n },\n \"backgroundMode\": {\n \"enum\": [\"none\", \"color\", \"image\", \"imageOverlay\", null]\n },\n \"backgroundColor\": { \"type\": [\"string\", \"null\"] },\n \"backgroundImage\": { \"type\": [\"string\", \"null\"] },\n \"backgroundOverlayColor\": { \"type\": [\"string\", \"null\"] },\n \"backgroundOverlayOpacity\": { \"type\": [\"number\", \"null\"] }\n },\n \"additionalProperties\": true\n },\n \"content\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"object\" },\n \"description\": \"Block-level content (heading, paragraph, column, imageBlock, etc.)\"\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n\n\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"blockquote\",\n \"description\": \"A blockquote. Inherits common block attributes.\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"blockquote\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"align\": { \"enum\": [\"left\", \"center\", \"right\", null], \"description\": \"Text alignment\" },\n \"padding\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Internal padding\" },\n \"margin\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"External margin\" },\n \"backgroundColor\": { \"type\": [\"string\", \"null\"], \"description\": \"Background color\" },\n \"borderRadius\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Corner rounding\" }\n },\n \"additionalProperties\": true\n },\n \"content\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"object\" },\n \"description\": \"Block content\"\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"bulletList\",\n \"description\": \"A bullet list block. Inherits common block attributes.\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"bulletList\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"align\": { \"enum\": [\"left\", \"center\", \"right\", null], \"description\": \"Text alignment\" },\n \"padding\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Internal padding\" },\n \"margin\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"External margin\" },\n \"backgroundColor\": { \"type\": [\"string\", \"null\"], \"description\": \"Background color\" },\n \"borderRadius\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Corner rounding\" }\n },\n \"additionalProperties\": true\n },\n \"content\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"object\" },\n \"description\": \"List items\"\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"codeBlock\",\n \"description\": \"A code block. Inherits common block attributes.\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"codeBlock\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"language\": { \"type\": [\"string\", \"null\"], \"description\": \"Programming language for syntax highlighting\" },\n \"align\": { \"enum\": [\"left\", \"center\", \"right\", null], \"description\": \"Block alignment\" },\n \"padding\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Internal padding\" },\n \"margin\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"External margin\" },\n \"backgroundColor\": { \"type\": [\"string\", \"null\"], \"description\": \"Background color\" },\n \"borderRadius\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Corner rounding\" }\n },\n \"additionalProperties\": true\n },\n \"content\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"object\" },\n \"description\": \"Code text content\"\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"hardBreak\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"hardBreak\" },\n \"attrs\": {\n \"type\": \"object\",\n \"additionalProperties\": true\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n\n\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"horizontalRule\",\n \"description\": \"A horizontal rule/divider. Inherits common block attributes.\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"horizontalRule\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"align\": { \"enum\": [\"left\", \"center\", \"right\", \"stretch\", null], \"description\": \"Alignment\" },\n \"padding\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Padding around rule\" },\n \"margin\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Margin around rule\" },\n \"backgroundColor\": { \"type\": [\"string\", \"null\"], \"description\": \"Background color\" }\n },\n \"additionalProperties\": true\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"image\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"image\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"src\": { \"type\": [\"string\", \"null\"] },\n \"alt\": { \"type\": [\"string\", \"null\"] },\n \"title\": { \"type\": [\"string\", \"null\"] },\n \"width\": { \"type\": [\"number\", \"null\"] },\n \"height\": { \"type\": [\"number\", \"null\"] }\n },\n \"additionalProperties\": true\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n\n\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"heading\",\n \"description\": \"A heading block (h1-h6). Inherits common block attributes.\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"heading\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"level\": { \"type\": \"integer\", \"minimum\": 1, \"maximum\": 6, \"description\": \"Heading level (1-6)\" },\n \"align\": { \"enum\": [\"left\", \"center\", \"right\", null], \"description\": \"Text alignment\" },\n \"padding\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Internal padding\" },\n \"margin\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"External margin\" },\n \"backgroundColor\": { \"type\": [\"string\", \"null\"], \"description\": \"Background color\" },\n \"borderRadius\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Corner rounding\" }\n },\n \"additionalProperties\": true\n },\n \"content\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"object\" },\n \"description\": \"Inline content (text, marks)\"\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"paragraph\",\n \"description\": \"A paragraph block. Inherits common block attributes.\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"paragraph\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"align\": { \"enum\": [\"left\", \"center\", \"right\", null], \"description\": \"Text alignment\" },\n \"padding\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Internal padding\" },\n \"margin\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"External margin\" },\n \"backgroundColor\": { \"type\": [\"string\", \"null\"], \"description\": \"Background color\" },\n \"borderRadius\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Corner rounding\" }\n },\n \"additionalProperties\": true\n },\n \"content\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"object\" },\n \"description\": \"Inline content (text, marks)\"\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"youtube\",\n \"description\": \"A YouTube video embed. Inherits common block attributes.\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"youtube\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"src\": { \"type\": [\"string\", \"null\"], \"description\": \"YouTube video URL or ID\" },\n \"start\": { \"type\": \"number\", \"description\": \"Start time in seconds\" },\n \"width\": { \"type\": \"number\", \"description\": \"Video width\" },\n \"height\": { \"type\": \"number\", \"description\": \"Video height\" },\n \"align\": { \"enum\": [\"left\", \"center\", \"right\", \"stretch\", null], \"description\": \"Block alignment\" },\n \"padding\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Padding\" },\n \"margin\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Margin\" },\n \"borderRadius\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Corner rounding\" }\n },\n \"additionalProperties\": true\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n","import * as schemas from \"../../schemas/v1\";\n\n/**\n * Human- and AI-readable bundle of all v1 JSON Schemas.\n *\n * Wrapped in a top-level <Schemas>…</Schemas> tag, with each schema\n * enclosed in its own <{name}Schema>…</{name}Schema> block.\n */\nexport const allSchemas = `\n<Schemas>\n${Object.entries(schemas)\n .map(\n ([name, schema]) =>\n `<${name}Schema>\\n` +\n JSON.stringify(schema as unknown, null, 2) +\n `\\n</${name}Schema>`\n )\n .join(\"\\n\\n\")}\n</Schemas>\n`.trim();\n\n\n\n","import * as ctx from \"../../contexts/v1\";\n\n/**\n * All v1 context atoms concatenated into a single string,\n * wrapped in a top-level <Context>…</Context> block.\n */\nexport const allContexts = `\n<Context>\n${[\n ctx.core,\n ctx.fullDocument,\n ctx.slide,\n ctx.column,\n ctx.columnGroup,\n ctx.style,\n ctx.sizing,\n ctx.imageBlock,\n ctx.blockquote,\n ctx.bulletList,\n ctx.heading,\n ctx.paragraph,\n ctx.image,\n ctx.codeBlock,\n ctx.hardBreak,\n ctx.horizontalRule,\n ctx.youtube,\n ctx.editingRules,\n].join(\"\\n\\n\")}\n</Context>\n`.trim();\n\n\n\n","export * from \"./schemaBuilder\";\nexport * from \"./presetTemplateBuilder\";\n","// TODO: Add additional block helpers (tables, marks) to cover all extensions.\n// TODO: Add server-side validation helper that checks slides against schemasV1.\n// TODO: Add tests/examples that demonstrate agent/tool usage.\n\nimport type { JSONContent } from \"@blockslides/core\";\nimport type {\n SizeKey,\n SlideAttrs,\n ColumnAttrs,\n ImageBlockAttrs,\n BaseBlockAttrs,\n} from \"../../types/v1\";\n\ntype Block = JSONContent;\ntype SlideNode = JSONContent; // slide -> block+\ntype TextMark = { type: string; attrs?: Record<string, any> };\n\nconst defaults = {\n slide: (attrs?: Partial<SlideAttrs>): SlideAttrs => ({\n id: attrs?.id ?? \"slide-1\",\n size: attrs?.size ?? (\"16x9\" as SizeKey),\n className: attrs?.className ?? \"\",\n }),\n column: (attrs?: Partial<ColumnAttrs>): ColumnAttrs => ({\n ...attrs,\n }),\n};\n\nconst textNode = (text: string) =>\n ({\n type: \"text\",\n text,\n }) satisfies Block;\n\nexport const blocks = {\n text: (text: string, marks?: TextMark[]): Block =>\n marks && marks.length > 0\n ? ({ type: \"text\", text, marks } as Block)\n : textNode(text),\n\n paragraph: (text?: string): Block => ({\n type: \"paragraph\",\n content: text ? [textNode(text)] : [],\n }),\n\n heading: (text: string, level: 1 | 2 | 3 | 4 | 5 | 6 = 2): Block => ({\n type: \"heading\",\n attrs: { level },\n content: [textNode(text)],\n }),\n\n bulletList: (items: (string | Block)[]): Block => ({\n type: \"bulletList\",\n content: items.map((item) =>\n typeof item === \"string\"\n ? {\n type: \"listItem\",\n content: [{ type: \"paragraph\", content: [textNode(item)] }],\n }\n : { type: \"listItem\", content: [item] }\n ),\n }),\n\n horizontalRule: (): Block => ({ type: \"horizontalRule\" }),\n\n hardBreak: (): Block => ({ type: \"hardBreak\" }),\n\n codeBlock: (code: string, language?: string): Block => ({\n type: \"codeBlock\",\n attrs: language ? { language } : undefined,\n content: code ? [textNode(code)] : [],\n }),\n\n imageBlock: (attrs: ImageBlockAttrs): Block => ({\n type: \"imageBlock\",\n attrs,\n }),\n\n // Additional nodes to mirror extensions/schemas\n blockquote: (content: Block[] = []): Block => ({\n type: \"blockquote\",\n content,\n }),\n\n listItem: (content: Block[] = []): Block => ({\n type: \"listItem\",\n content,\n }),\n\n image: (attrs: {\n src: string;\n alt?: string | null;\n title?: string | null;\n width?: number | null;\n height?: number | null;\n }): Block => ({\n type: \"image\",\n attrs,\n }),\n\n youtube: (attrs: {\n src?: string | null;\n start?: number;\n width?: number;\n height?: number;\n }): Block => ({\n type: \"youtube\",\n attrs,\n }),\n\n column: (content: Block[], attrs?: Partial<ColumnAttrs>) => ({\n type: \"column\" as const,\n attrs: attrs ?? {},\n content,\n }),\n\n columnGroup: (columns: Block[], attrs?: { layout?: string; fill?: boolean; className?: string }) => ({\n type: \"columnGroup\" as const,\n attrs: attrs ?? {},\n content: columns,\n }),\n};\n\ntype SingleColOpts = {\n slideAttrs?: Partial<SlideAttrs>;\n columnAttrs?: Partial<ColumnAttrs>;\n content?: Block[];\n};\n\ntype ColumnNode = {\n type: \"column\";\n attrs?: Partial<ColumnAttrs>;\n content: Block[];\n};\n\ntype TwoColOpts = {\n slideAttrs?: Partial<SlideAttrs>;\n columns: [ColumnNode, ColumnNode];\n};\n\n/**\n * Slide builder with presets for common layouts.\n * \n * New schema: slides contain blocks directly (doc → slide+ → block+).\n * Adjacent columns automatically form horizontal layouts via CSS.\n */\nexport const slide = Object.assign(\n /**\n * Create a slide with direct block content (no column wrapper).\n */\n (opts: {\n slideAttrs?: Partial<SlideAttrs>;\n content?: Block[];\n } = {}): SlideNode => ({\n type: \"slide\",\n attrs: defaults.slide(opts.slideAttrs),\n content: opts.content ?? [],\n }),\n {\n /**\n * Single column layout - wraps content in one column block.\n */\n singleCol: (opts: SingleColOpts = {}): SlideNode => ({\n type: \"slide\",\n attrs: defaults.slide(opts.slideAttrs),\n content: [\n {\n type: \"column\",\n attrs: defaults.column(opts.columnAttrs),\n content: opts.content ?? [],\n },\n ],\n }),\n\n /**\n * Two column layout - columns grouped side-by-side via columnGroup.\n * Pass two column objects created with blocks.column().\n */\n twoCol: (col1: ColumnNode, col2: ColumnNode, slideAttrs?: Partial<SlideAttrs>): SlideNode => ({\n type: \"slide\",\n attrs: defaults.slide(slideAttrs),\n content: [\n {\n type: \"columnGroup\",\n attrs: { fill: true },\n content: [col1, col2],\n },\n ],\n }),\n\n /**\n * Three column layout - columns grouped side-by-side via columnGroup.\n * Pass three column objects created with blocks.column().\n */\n threeCol: (col1: ColumnNode, col2: ColumnNode, col3: ColumnNode, slideAttrs?: Partial<SlideAttrs>): SlideNode => ({\n type: \"slide\",\n attrs: defaults.slide(slideAttrs),\n content: [\n {\n type: \"columnGroup\",\n attrs: { fill: true },\n content: [col1, col2, col3],\n },\n ],\n }),\n\n /**\n * Four column layout - columns grouped side-by-side via columnGroup.\n * Pass four column objects created with blocks.column().\n */\n fourCol: (col1: ColumnNode, col2: ColumnNode, col3: ColumnNode, col4: ColumnNode, slideAttrs?: Partial<SlideAttrs>): SlideNode => ({\n type: \"slide\",\n attrs: defaults.slide(slideAttrs),\n content: [\n {\n type: \"columnGroup\",\n attrs: { fill: true },\n content: [col1, col2, col3, col4],\n },\n ],\n }),\n }\n);\n\n// Slide layout presets beyond the base helpers\ntype HeroOpts = {\n slideAttrs?: Partial<SlideAttrs>;\n columnAttrs?: Partial<ColumnAttrs>;\n content?: Block[];\n};\n\ntype ImageCoverOpts = {\n slideAttrs?: Partial<SlideAttrs>;\n image?: ImageBlockAttrs;\n overlay?: Block[];\n columnAttrs?: Partial<ColumnAttrs>;\n};\n\ntype QuoteOpts = {\n slideAttrs?: Partial<SlideAttrs>;\n columnAttrs?: Partial<ColumnAttrs>;\n quote?: Block[];\n};\n\ntype AgendaOpts = {\n slideAttrs?: Partial<SlideAttrs>;\n columnAttrs?: Partial<ColumnAttrs>;\n items?: (string | Block)[];\n};\n\ntype MultiColOpts = {\n slideAttrs?: Partial<SlideAttrs>;\n columns: {\n content?: Block[];\n attrs?: Partial<ColumnAttrs>;\n }[];\n};\n\ntype MediaTextOpts = {\n slideAttrs?: Partial<SlideAttrs>;\n media?: Block[];\n text?: Block[];\n mediaColumnAttrs?: Partial<ColumnAttrs>;\n textColumnAttrs?: Partial<ColumnAttrs>;\n};\n\ntype Stack2Opts = {\n slideAttrs?: Partial<SlideAttrs>;\n topColumns?: { content?: Block[]; attrs?: Partial<ColumnAttrs> }[];\n bottomColumns?: { content?: Block[]; attrs?: Partial<ColumnAttrs> }[];\n};\n\n/** Helper to create a column block with attrs and content */\nconst column = (attrs: Partial<ColumnAttrs> | undefined, content: Block[] = []): Block => ({\n type: \"column\",\n attrs: defaults.column(attrs),\n content,\n});\n\ntype TemplatePreset =\n | \"slide.empty\"\n | \"slide.singleCol\"\n | \"slide.twoCol\"\n | \"slide.hero\"\n | \"slide.imageCover\"\n | \"slide.quote\"\n | \"slide.agenda\"\n | \"slide.grid3\"\n | \"slide.grid4\"\n | \"slide.oneTwo\"\n | \"slide.twoOne\"\n | \"slide.oneTwoOne\"\n | \"slide.textMedia\"\n | \"slide.mediaText\"\n | \"slide.stack2\";\n\ntype CreateTemplateInput = {\n preset: TemplatePreset;\n slideAttrs?: Partial<SlideAttrs>;\n columnAttrs?: Partial<ColumnAttrs>;\n leftColumnAttrs?: Partial<ColumnAttrs>;\n rightColumnAttrs?: Partial<ColumnAttrs>;\n content?: Block[];\n left?: Block[];\n right?: Block[];\n heroOpts?: HeroOpts;\n imageCoverOpts?: ImageCoverOpts;\n quoteOpts?: QuoteOpts;\n agendaOpts?: AgendaOpts;\n multiColOpts?: MultiColOpts;\n mediaTextOpts?: MediaTextOpts;\n stack2Opts?: Stack2Opts;\n};\n\nexport const createTemplate = (input: CreateTemplateInput): SlideNode => {\n switch (input.preset) {\n case \"slide.empty\":\n return slide({\n slideAttrs: input.slideAttrs,\n content: [],\n });\n case \"slide.singleCol\":\n return slide.singleCol({\n slideAttrs: input.slideAttrs,\n columnAttrs: input.columnAttrs,\n content: input.content ?? [],\n });\n case \"slide.twoCol\":\n return slide.twoCol(\n blocks.column(input.left ?? [], input.leftColumnAttrs),\n blocks.column(input.right ?? [], input.rightColumnAttrs),\n input.slideAttrs\n );\n case \"slide.hero\": {\n const opts = input.heroOpts ?? {};\n return {\n type: \"slide\",\n attrs: defaults.slide({ ...opts.slideAttrs, backgroundColor: opts.slideAttrs?.backgroundColor ?? \"#020617\" }),\n content: [\n column(\n { justify: \"center\", align: \"center\", padding: \"lg\", fill: true, ...opts.columnAttrs },\n opts.content ?? [\n blocks.heading(\"Your headline\", 1),\n blocks.paragraph(\"Subhead goes here.\"),\n blocks.paragraph(\"Add supporting details here.\"),\n ]\n ),\n ],\n };\n }\n case \"slide.imageCover\": {\n const opts = input.imageCoverOpts ?? {};\n const image = opts.image ?? {\n src: \"https://placehold.co/1600x900/png\",\n size: \"fill\",\n };\n const overlay = opts.overlay ?? [blocks.heading(\"Overlay title\", 1)];\n return {\n type: \"slide\",\n attrs: defaults.slide({ ...opts.slideAttrs, backgroundColor: opts.slideAttrs?.backgroundColor ?? \"#000000\" }),\n content: [\n column(\n { fill: true, padding: \"none\", ...opts.columnAttrs },\n [\n blocks.imageBlock(image),\n ...overlay,\n ]\n ),\n ],\n };\n }\n case \"slide.quote\": {\n const opts = input.quoteOpts ?? {};\n return {\n type: \"slide\",\n attrs: defaults.slide({ ...opts.slideAttrs, backgroundColor: opts.slideAttrs?.backgroundColor ?? \"#ffffff\" }),\n content: [\n column(\n { justify: \"center\", align: \"center\", padding: \"lg\", gap: \"md\", fill: true, ...opts.columnAttrs },\n [\n blocks.blockquote(\n opts.quote ?? [\n blocks.paragraph(\"Add your quote here.\"),\n blocks.paragraph(\"— Author\"),\n ]\n ),\n ]\n ),\n ],\n };\n }\n case \"slide.agenda\": {\n const opts = input.agendaOpts ?? {};\n return {\n type: \"slide\",\n attrs: defaults.slide({ ...opts.slideAttrs, backgroundColor: opts.slideAttrs?.backgroundColor ?? \"#ffffff\" }),\n content: [\n column(\n { padding: \"lg\", gap: \"lg\", ...opts.columnAttrs },\n [\n blocks.heading(\"Agenda\", 1),\n blocks.bulletList(opts.items ?? [\"Topic 1\", \"Topic 2\", \"Topic 3\"]),\n ]\n ),\n ],\n };\n }\n case \"slide.grid3\": {\n const opts = input.multiColOpts ?? { columns: [] };\n const cols =\n opts.columns.length > 0\n ? opts.columns\n : [\n { content: [blocks.heading(\"One\", 3), blocks.paragraph(\"Details.\")] },\n { content: [blocks.heading(\"Two\", 3), blocks.paragraph(\"Details.\")] },\n { content: [blocks.heading(\"Three\", 3), blocks.paragraph(\"Details.\")] },\n ];\n return {\n type: \"slide\",\n attrs: defaults.slide({ ...opts.slideAttrs, backgroundColor: opts.slideAttrs?.backgroundColor ?? \"#ffffff\" }),\n content: cols.map((c) => column({ padding: \"md\", gap: \"sm\", fill: true, ...c.attrs }, c.content ?? [])),\n };\n }\n case \"slide.grid4\": {\n const opts = input.multiColOpts ?? { columns: [] };\n const cols =\n opts.columns.length > 0\n ? opts.columns\n : [\n { content: [blocks.heading(\"One\", 4)] },\n { content: [blocks.heading(\"Two\", 4)] },\n { content: [blocks.heading(\"Three\", 4)] },\n { content: [blocks.heading(\"Four\", 4)] },\n ];\n return {\n type: \"slide\",\n attrs: defaults.slide({ ...opts.slideAttrs, backgroundColor: opts.slideAttrs?.backgroundColor ?? \"#ffffff\" }),\n content: cols.map((c) => column({ padding: \"md\", gap: \"sm\", fill: true, ...c.attrs }, c.content ?? [])),\n };\n }\n case \"slide.oneTwo\": {\n const opts = input.mediaTextOpts ?? {};\n return {\n type: \"slide\",\n attrs: defaults.slide({ ...opts.slideAttrs, backgroundColor: opts.slideAttrs?.backgroundColor ?? \"#ffffff\" }),\n content: [\n column({ padding: \"md\", gap: \"sm\", width: \"33%\", ...opts.textColumnAttrs }, opts.text ?? []),\n column({ padding: \"md\", gap: \"sm\", fill: true, ...opts.mediaColumnAttrs }, opts.media ?? []),\n ],\n };\n }\n case \"slide.twoOne\": {\n const opts = input.mediaTextOpts ?? {};\n return {\n type: \"slide\",\n attrs: defaults.slide({ ...opts.slideAttrs, backgroundColor: opts.slideAttrs?.backgroundColor ?? \"#ffffff\" }),\n content: [\n column({ padding: \"md\", gap: \"sm\", fill: true, ...opts.mediaColumnAttrs }, opts.media ?? []),\n column({ padding: \"md\", gap: \"sm\", width: \"33%\", ...opts.textColumnAttrs }, opts.text ?? []),\n ],\n };\n }\n case \"slide.oneTwoOne\": {\n const opts = input.multiColOpts ?? { columns: [] };\n const cols =\n opts.columns.length > 0\n ? opts.columns\n : [\n { content: [blocks.paragraph(\"Left\")] },\n { content: [blocks.paragraph(\"Center\")] },\n { content: [blocks.paragraph(\"Right\")] },\n ];\n return {\n type: \"slide\",\n attrs: defaults.slide({ ...opts.slideAttrs, backgroundColor: opts.slideAttrs?.backgroundColor ?? \"#ffffff\" }),\n content: cols.map((c, i) => column({ padding: \"md\", gap: \"sm\", width: i === 1 ? \"50%\" : \"25%\", ...c.attrs }, c.content ?? [])),\n };\n }\n case \"slide.textMedia\": {\n const opts = input.mediaTextOpts ?? {};\n return {\n type: \"slide\",\n attrs: defaults.slide({ ...opts.slideAttrs, backgroundColor: opts.slideAttrs?.backgroundColor ?? \"#ffffff\" }),\n content: [\n column({ padding: \"lg\", gap: \"sm\", fill: true, ...opts.textColumnAttrs }, opts.text ?? []),\n column({ padding: \"lg\", gap: \"sm\", fill: true, backgroundColor: \"#f8fafc\", ...opts.mediaColumnAttrs }, opts.media ?? []),\n ],\n };\n }\n case \"slide.mediaText\": {\n const opts = input.mediaTextOpts ?? {};\n return {\n type: \"slide\",\n attrs: defaults.slide({ ...opts.slideAttrs, backgroundColor: opts.slideAttrs?.backgroundColor ?? \"#ffffff\" }),\n content: [\n column({ padding: \"lg\", gap: \"sm\", fill: true, backgroundColor: \"#f8fafc\", ...opts.mediaColumnAttrs }, opts.media ?? []),\n column({ padding: \"lg\", gap: \"sm\", fill: true, ...opts.textColumnAttrs }, opts.text ?? []),\n ],\n };\n }\n case \"slide.stack2\": {\n const opts = input.stack2Opts ?? {};\n const top = opts.topColumns ?? [{ content: [blocks.heading(\"Title\", 1), blocks.paragraph(\"Subhead\")] }];\n const bottom = opts.bottomColumns ?? [\n { content: [blocks.paragraph(\"Left detail\")] },\n { content: [blocks.paragraph(\"Right detail\")] },\n ];\n return {\n type: \"slide\",\n attrs: defaults.slide({ ...opts.slideAttrs, backgroundColor: opts.slideAttrs?.backgroundColor ?? \"#ffffff\" }),\n content: [\n ...top.map((c) => column({ padding: \"md\", gap: \"sm\", ...c.attrs }, c.content ?? [])),\n ...bottom.map((c) => column({ padding: \"md\", gap: \"sm\", ...c.attrs }, c.content ?? [])),\n ],\n };\n }\n default:\n return slide(); // fallback\n }\n};\n\nexport const listTemplates = (): TemplatePreset[] => [\n \"slide.empty\",\n \"slide.singleCol\",\n \"slide.twoCol\",\n \"slide.hero\",\n \"slide.imageCover\",\n \"slide.quote\",\n \"slide.agenda\",\n \"slide.grid3\",\n \"slide.grid4\",\n \"slide.oneTwo\",\n \"slide.twoOne\",\n \"slide.oneTwoOne\",\n \"slide.textMedia\",\n \"slide.mediaText\",\n \"slide.stack2\",\n];\n\nexport const templatesV1Context = `\nBlockSlides templates API (v1)\n\nDocument Hierarchy:\ndoc → slide+ → block+\nSlides contain blocks directly - no mandatory row wrapper.\nAdjacent columns automatically form horizontal layouts via CSS.\n\nPresets:\n- slide({ content?, slideAttrs? }): slide with direct block content\n- slide.singleCol({ content?, slideAttrs?, columnAttrs? }): single column layout\n- slide.twoCol(column1, column2, slideAttrs?): two columns side by side\n- slide.threeCol(col1, col2, col3, slideAttrs?): three columns side by side\n- slide.fourCol(col1, col2, col3, col4, slideAttrs?): four columns side by side\n- slide.hero({ heroOpts }): centered content on dark background\n- slide.imageCover({ imageCoverOpts }): full-bleed image with overlay\n- slide.quote({ quoteOpts }): centered blockquote\n- slide.agenda({ agendaOpts }): title with bullet list\n- slide.grid3/grid4({ multiColOpts }): equal-width column grids\n- slide.oneTwo/twoOne({ mediaTextOpts }): asymmetric layouts\n- slide.textMedia/mediaText({ mediaTextOpts }): text and media columns\n- slide.stack2({ stack2Opts }): stacked column sections\n\nBase Block Attributes (available on ALL blocks):\n- align: \"left\" | \"center\" | \"right\" | \"stretch\" - horizontal alignment\n- justify: \"start\" | \"center\" | \"end\" | \"space-between\" - vertical distribution\n- padding: \"none\" | \"sm\" | \"md\" | \"lg\" - internal spacing (8px/16px/32px)\n- margin: \"none\" | \"sm\" | \"md\" | \"lg\" - external spacing\n- gap: \"none\" | \"sm\" | \"md\" | \"lg\" - space between children\n- backgroundColor: CSS color\n- backgroundImage: URL\n- borderRadius: \"none\" | \"sm\" | \"md\" | \"lg\" (4px/8px/16px)\n- border: CSS border\n- fill: boolean - fill available space\n- width: CSS width\n- height: CSS height\n\nBlock Helpers:\n- blocks.text(text, marks?)\n- blocks.heading(text, level?) - level 1-6\n- blocks.paragraph(text?)\n- blocks.bulletList([string | Block][])\n- blocks.codeBlock(code, language?)\n- blocks.horizontalRule()\n- blocks.hardBreak()\n- blocks.imageBlock({ src, size?, crop?, alt?, caption?, credit? })\n - size: \"fill\" | \"fit\" | \"natural\" - how image fills container\n - crop: \"center\" | \"top\" | \"bottom\" | \"left\" | \"right\" | corner positions\n- blocks.blockquote(content?)\n- blocks.listItem(content?)\n- blocks.youtube({ src?, start?, width?, height? })\n\nAgent/tool usage:\n- Use blocks.column(content, attrs) to create columns\n- Use blocks.columnGroup(columns) to group columns horizontally\n- Call createTemplate({ preset: \"slide.twoCol\", left: [...], right: [...] })\n- Wrap returned slides in { type: \"doc\", content: [/* slides here */] }\n\nNotes:\n- Size defaults to 16x9; override via slideAttrs.size\n- Use fill: true on columns to distribute space evenly\n- Use semantic spacing tokens (sm/md/lg) instead of raw pixel values\n`.trim();\n\nexport type { Block, SlideNode, TemplatePreset, CreateTemplateInput };\n","import { blocks, slide, type SlideNode } from \"./schemaBuilder\";\n\nexport type PresetKey =\n | \"tpl.titleAndSubheader\"\n | \"tpl.imageAndText\"\n | \"tpl.textAndImage\"\n | \"tpl.twoColumns\"\n | \"tpl.twoColumnsWithHeader\"\n | \"tpl.threeColumns\"\n | \"tpl.threeColumnsWithHeader\"\n | \"tpl.fourColumns\"\n | \"tpl.fourColumnsWithHeader\"\n | \"tpl.titleWithBullets\"\n | \"tpl.titleBulletsAndImage\"\n | \"tpl.twoImageColumns\"\n | \"tpl.accentLeft\"\n | \"tpl.accentRight\"\n | \"tpl.accentTop\"\n | \"tpl.accentRightFit\"\n | \"tpl.accentLeftFit\"\n | \"tpl.fullImage\";\n\ntype PresetTemplate = {\n key: PresetKey;\n label: string;\n description?: string;\n icon?: string;\n build: () => SlideNode;\n};\n\nconst titleAndSubheaderIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"18\" y=\"22\" width=\"60\" height=\"12\" rx=\"2\" fill=\"#D4D4D8\"/><rect x=\"26\" y=\"38\" width=\"44\" height=\"8\" rx=\"2\" fill=\"#E5E7EB\"/></svg>';\n\nconst titleAndSubheader: PresetTemplate = {\n key: \"tpl.titleAndSubheader\",\n label: \"Title & Subheader\",\n description: \"Centered title and subtitle for a new presentation\",\n icon: titleAndSubheaderIcon,\n build: () =>\n slide.singleCol({\n columnAttrs: {\n justify: \"center\",\n align: \"center\",\n gap: \"md\",\n padding: \"lg\",\n fill: true,\n backgroundColor: \"#ffffff\",\n },\n content: [\n blocks.heading(\"Lorem ipsum dolor sit amet\", 1),\n blocks.paragraph(\"Consectetur adipiscing elit. Sed do eiusmod tempor incididunt.\"),\n ],\n }),\n};\n\nconst imageTextIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"16\" y=\"26\" width=\"24\" height=\"16\" rx=\"2\" fill=\"#E5E7EB\"/><rect x=\"21\" y=\"31\" width=\"14\" height=\"6\" rx=\"1\" fill=\"#D4D4D8\"/><rect x=\"46\" y=\"24\" width=\"34\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"46\" y=\"33\" width=\"34\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"46\" y=\"41\" width=\"28\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/></svg>';\n\nconst textImageIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"18\" y=\"24\" width=\"34\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"18\" y=\"33\" width=\"34\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"18\" y=\"41\" width=\"28\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"56\" y=\"26\" width=\"24\" height=\"16\" rx=\"2\" fill=\"#E5E7EB\"/><rect x=\"61\" y=\"31\" width=\"14\" height=\"6\" rx=\"1\" fill=\"#D4D4D8\"/></svg>';\n\nconst twoColumnsIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"18\" y=\"22\" width=\"26\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"18\" y=\"31\" width=\"26\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"18\" y=\"39\" width=\"22\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"52\" y=\"22\" width=\"26\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"52\" y=\"31\" width=\"26\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"52\" y=\"39\" width=\"22\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/></svg>';\n\nconst twoColumnsHeaderIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"18\" y=\"18\" width=\"60\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"18\" y=\"28\" width=\"26\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"18\" y=\"37\" width=\"26\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"18\" y=\"45\" width=\"22\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"52\" y=\"28\" width=\"26\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"52\" y=\"37\" width=\"26\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"52\" y=\"45\" width=\"22\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/></svg>';\n\nconst threeColumnsIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"14\" y=\"22\" width=\"20\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"14\" y=\"31\" width=\"20\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"14\" y=\"39\" width=\"18\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"38\" y=\"22\" width=\"20\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"38\" y=\"31\" width=\"20\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"38\" y=\"39\" width=\"18\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"62\" y=\"22\" width=\"20\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"62\" y=\"31\" width=\"20\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"62\" y=\"39\" width=\"18\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/></svg>';\n\nconst threeColumnsHeaderIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"16\" y=\"16\" width=\"60\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"14\" y=\"28\" width=\"20\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"14\" y=\"37\" width=\"20\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"14\" y=\"45\" width=\"18\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"38\" y=\"28\" width=\"20\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"38\" y=\"37\" width=\"20\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"38\" y=\"45\" width=\"18\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"62\" y=\"28\" width=\"20\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"62\" y=\"37\" width=\"20\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"62\" y=\"45\" width=\"18\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/></svg>';\n\nconst fourColumnsHeaderIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"16\" y=\"16\" width=\"60\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"12\" y=\"28\" width=\"16\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"12\" y=\"37\" width=\"16\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"12\" y=\"45\" width=\"14\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"32\" y=\"28\" width=\"16\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"32\" y=\"37\" width=\"16\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"32\" y=\"45\" width=\"14\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"52\" y=\"28\" width=\"16\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"52\" y=\"37\" width=\"16\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"52\" y=\"45\" width=\"14\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"72\" y=\"28\" width=\"16\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"72\" y=\"37\" width=\"16\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"72\" y=\"45\" width=\"14\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/></svg>';\n\nconst fourColumnsIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"12\" y=\"22\" width=\"16\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"12\" y=\"31\" width=\"16\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"12\" y=\"39\" width=\"16\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"32\" y=\"22\" width=\"16\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"32\" y=\"31\" width=\"16\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"32\" y=\"39\" width=\"16\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"52\" y=\"22\" width=\"16\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"52\" y=\"31\" width=\"16\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"52\" y=\"39\" width=\"16\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"72\" y=\"22\" width=\"16\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"72\" y=\"31\" width=\"16\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"72\" y=\"39\" width=\"16\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/></svg>';\n\nconst fullImageIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"14\" y=\"14\" width=\"68\" height=\"44\" rx=\"3\" fill=\"#E5E7EB\"/><path d=\"M18 50 34 32l12 14 8-10 16 14H18Z\" fill=\"#D4D4D8\"/><circle cx=\"32\" cy=\"26\" r=\"4\" fill=\"#D4D4D8\"/></svg>';\n\nconst twoImageColumnsIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"16\" y=\"18\" width=\"64\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"16\" y=\"28\" width=\"28\" height=\"14\" rx=\"2\" fill=\"#E5E7EB\"/><rect x=\"52\" y=\"28\" width=\"28\" height=\"14\" rx=\"2\" fill=\"#E5E7EB\"/><rect x=\"16\" y=\"46\" width=\"20\" height=\"4\" rx=\"1\" fill=\"#D4D4D8\"/><rect x=\"52\" y=\"46\" width=\"20\" height=\"4\" rx=\"1\" fill=\"#D4D4D8\"/></svg>';\n\nconst accentLeftIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"12\" y=\"18\" width=\"20\" height=\"36\" rx=\"2\" fill=\"#EFEFEF\"/><rect x=\"18\" y=\"30\" width=\"8\" height=\"8\" rx=\"1\" fill=\"#CCCCCC\"/><rect x=\"36\" y=\"26\" width=\"42\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"36\" y=\"36\" width=\"38\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"36\" y=\"44\" width=\"32\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/></svg>';\n\nconst accentRightIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"64\" y=\"18\" width=\"20\" height=\"36\" rx=\"2\" fill=\"#EFEFEF\"/><rect x=\"70\" y=\"30\" width=\"8\" height=\"8\" rx=\"1\" fill=\"#CCCCCC\"/><rect x=\"16\" y=\"26\" width=\"42\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"16\" y=\"36\" width=\"38\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"16\" y=\"44\" width=\"32\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/></svg>';\n\nconst accentTopIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"14\" y=\"14\" width=\"68\" height=\"16\" rx=\"2\" fill=\"#EFEFEF\"/><rect x=\"44\" y=\"18\" width=\"8\" height=\"8\" rx=\"1\" fill=\"#CCCCCC\"/><rect x=\"18\" y=\"36\" width=\"60\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"18\" y=\"46\" width=\"56\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"18\" y=\"54\" width=\"48\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/></svg>';\n\nconst accentRightFitIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"64\" y=\"24\" width=\"16\" height=\"20\" rx=\"2\" fill=\"#E5E7EB\"/><rect x=\"68\" y=\"28\" width=\"8\" height=\"8\" rx=\"1\" fill=\"#CCCCCC\"/><rect x=\"14\" y=\"28\" width=\"44\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"14\" y=\"38\" width=\"40\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"14\" y=\"46\" width=\"32\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/></svg>';\n\nconst accentLeftFitIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"16\" y=\"24\" width=\"16\" height=\"20\" rx=\"2\" fill=\"#E5E7EB\"/><rect x=\"20\" y=\"28\" width=\"8\" height=\"8\" rx=\"1\" fill=\"#CCCCCC\"/><rect x=\"36\" y=\"28\" width=\"44\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"36\" y=\"38\" width=\"40\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"36\" y=\"46\" width=\"32\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/></svg>';\n\nconst titleBulletsIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"18\" y=\"20\" width=\"60\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><circle cx=\"22\" cy=\"32\" r=\"2\" fill=\"#D4D4D8\"/><rect x=\"28\" y=\"30\" width=\"44\" height=\"4\" rx=\"1\" fill=\"#E5E7EB\"/><circle cx=\"22\" cy=\"39\" r=\"2\" fill=\"#D4D4D8\"/><rect x=\"28\" y=\"37\" width=\"44\" height=\"4\" rx=\"1\" fill=\"#E5E7EB\"/><circle cx=\"22\" cy=\"46\" r=\"2\" fill=\"#D4D4D8\"/><rect x=\"28\" y=\"44\" width=\"36\" height=\"4\" rx=\"1\" fill=\"#E5E7EB\"/></svg>';\n\nconst titleBulletsImageIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"16\" y=\"18\" width=\"64\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><circle cx=\"20\" cy=\"31\" r=\"2\" fill=\"#D4D4D8\"/><rect x=\"26\" y=\"29\" width=\"24\" height=\"4\" rx=\"1\" fill=\"#E5E7EB\"/><circle cx=\"20\" cy=\"38\" r=\"2\" fill=\"#D4D4D8\"/><rect x=\"26\" y=\"36\" width=\"24\" height=\"4\" rx=\"1\" fill=\"#E5E7EB\"/><circle cx=\"20\" cy=\"45\" r=\"2\" fill=\"#D4D4D8\"/><rect x=\"26\" y=\"43\" width=\"20\" height=\"4\" rx=\"1\" fill=\"#E5E7EB\"/><rect x=\"56\" y=\"31\" width=\"24\" height=\"16\" rx=\"2\" fill=\"#E5E7EB\"/><rect x=\"61\" y=\"36\" width=\"14\" height=\"6\" rx=\"1\" fill=\"#D4D4D8\"/></svg>';\nconst imageAndText: PresetTemplate = {\n key: \"tpl.imageAndText\",\n label: \"Image & Text\",\n description: \"Image on left, text on right\",\n icon: imageTextIcon,\n build: () =>\n slide.twoCol(\n blocks.column(\n [\n blocks.imageBlock({\n src: \"https://placehold.co/640x480/png\",\n size: \"fit\",\n }),\n ],\n {\n }\n ),\n blocks.column(\n [\n blocks.heading(\"Lorem ipsum dolor sit amet\", 2),\n blocks.paragraph(\"Consectetur adipiscing elit. Sed do eiusmod tempor incididunt.\"),\n blocks.paragraph(\"Ut enim ad minim veniam, quis nostrud exercitation.\"),\n ],\n {\n padding: \"lg\",\n gap: \"sm\",\n fill: true,\n }\n )\n ),\n};\n\nconst textAndImage: PresetTemplate = {\n key: \"tpl.textAndImage\",\n label: \"Text & Image\",\n description: \"Text on left, image on right\",\n icon: textImageIcon,\n build: () =>\n slide.twoCol(\n blocks.column(\n [\n blocks.heading(\"Lorem ipsum dolor sit amet\", 2),\n blocks.paragraph(\"Consectetur adipiscing elit. Sed do eiusmod tempor incididunt.\"),\n blocks.paragraph(\"Ut enim ad minim veniam, quis nostrud exercitation.\"),\n ],\n {\n justify: \"center\",\n padding: \"lg\",\n gap: \"sm\",\n fill: true,\n }\n ),\n blocks.column(\n [\n blocks.imageBlock({\n src: \"https://placehold.co/640x480/png\",\n size: \"fit\",\n }),\n ],\n {\n align: \"center\",\n justify: \"center\",\n padding: \"lg\",\n fill: true,\n }\n )\n ),\n};\n\nconst twoColumns: PresetTemplate = {\n key: \"tpl.twoColumns\",\n label: \"Two Columns\",\n description: \"Header above two balanced text columns\",\n icon: twoColumnsIcon,\n build: () => ({\n type: \"slide\",\n attrs: { id: \"slide-1\", size: \"16x9\" },\n content: [\n blocks.heading(\"Section heading\", 2),\n blocks.columnGroup([\n blocks.column(\n [\n blocks.paragraph(\"Lorem ipsum dolor sit amet.\"),\n blocks.paragraph(\"Consectetur adipiscing elit. Sed do eiusmod tempor incididunt.\"),\n blocks.paragraph(\"Ut enim ad minim veniam, quis nostrud exercitation.\"),\n ],\n { padding: \"md\", gap: \"sm\", fill: true }\n ),\n blocks.column(\n [\n blocks.paragraph(\"Lorem ipsum dolor sit amet.\"),\n blocks.paragraph(\"Consectetur adipiscing elit. Sed do eiusmod tempor incididunt.\"),\n blocks.paragraph(\"Ut enim ad minim veniam, quis nostrud exercitation.\"),\n ],\n { padding: \"md\", gap: \"sm\", fill: true }\n ),\n ]),\n ],\n }),\n};\n\nconst twoColumnsWithHeader: PresetTemplate = {\n key: \"tpl.twoColumnsWithHeader\",\n label: \"Two Columns + Header\",\n description: \"Header plus two columns, each with its own heading\",\n icon: twoColumnsHeaderIcon,\n build: () => ({\n type: \"slide\",\n attrs: { id: \"slide-1\", size: \"16x9\" },\n content: [\n blocks.heading(\"Section heading\", 2),\n blocks.columnGroup([\n blocks.column(\n [\n blocks.heading(\"Column heading\", 4),\n blocks.paragraph(\"Consectetur adipiscing elit. Sed do eiusmod tempor incididunt.\"),\n blocks.paragraph(\"Ut enim ad minim veniam, quis nostrud exercitation.\"),\n ],\n { padding: \"md\", gap: \"sm\", fill: true }\n ),\n blocks.column(\n [\n blocks.heading(\"Column heading\", 4),\n blocks.paragraph(\"Consectetur adipiscing elit. Sed do eiusmod tempor incididunt.\"),\n blocks.paragraph(\"Ut enim ad minim veniam, quis nostrud exercitation.\"),\n ],\n { padding: \"md\", gap: \"sm\", fill: true }\n ),\n ]),\n ],\n }),\n};\n\nconst threeColumns: PresetTemplate = {\n key: \"tpl.threeColumns\",\n label: \"Three Columns\",\n description: \"Balanced three-column text\",\n icon: threeColumnsIcon,\n build: () => ({\n type: \"slide\",\n attrs: { id: \"slide-1\", size: \"16x9\" },\n content: [\n blocks.columnGroup([\n blocks.column(\n [\n blocks.paragraph(\"Lorem ipsum dolor sit amet.\"),\n blocks.paragraph(\"Consectetur adipiscing elit. Sed do eiusmod tempor incididunt.\"),\n ],\n { padding: \"sm\", gap: \"sm\", fill: true }\n ),\n blocks.column(\n [\n blocks.paragraph(\"Ut enim ad minim veniam.\"),\n blocks.paragraph(\"Quis nostrud exercitation ullamco laboris.\"),\n ],\n { padding: \"sm\", gap: \"sm\", fill: true }\n ),\n blocks.column(\n [\n blocks.paragraph(\"Nisi ut aliquip ex ea commodo consequat.\"),\n blocks.paragraph(\"Duis aute irure dolor in reprehenderit.\"),\n ],\n { padding: \"sm\", gap: \"sm\", fill: true }\n ),\n ]),\n ],\n }),\n};\n\nconst threeColumnsWithHeader: PresetTemplate = {\n key: \"tpl.threeColumnsWithHeader\",\n label: \"Three Columns + Header\",\n description: \"Header plus three columns\",\n icon: threeColumnsHeaderIcon,\n build: () => ({\n type: \"slide\",\n attrs: { id: \"slide-1\", size: \"16x9\" },\n content: [\n blocks.heading(\"Section heading\", 2),\n blocks.columnGroup([\n blocks.column(\n [\n blocks.heading(\"Column heading\", 4),\n blocks.paragraph(\"Lorem ipsum dolor sit amet.\"),\n blocks.paragraph(\"Consectetur adipiscing elit. Sed do eiusmod tempor incididunt.\"),\n ],\n { padding: \"sm\", gap: \"sm\", fill: true }\n ),\n blocks.column(\n [\n blocks.heading(\"Column heading\", 4),\n blocks.paragraph(\"Ut enim ad minim veniam.\"),\n blocks.paragraph(\"Quis nostrud exercitation ullamco laboris.\"),\n ],\n { padding: \"sm\", gap: \"sm\", fill: true }\n ),\n blocks.column(\n [\n blocks.heading(\"Column heading\", 4),\n blocks.paragraph(\"Nisi ut aliquip ex ea commodo consequat.\"),\n blocks.paragraph(\"Duis aute irure dolor in reprehenderit.\"),\n ],\n { padding: \"sm\", gap: \"sm\", fill: true }\n ),\n ]),\n ],\n }),\n};\n\nconst fourColumnsWithHeader: PresetTemplate = {\n key: \"tpl.fourColumnsWithHeader\",\n label: \"Four Columns + Header\",\n description: \"Header plus four columns\",\n icon: fourColumnsHeaderIcon,\n build: () => ({\n type: \"slide\",\n attrs: { id: \"slide-1\", size: \"16x9\" },\n content: [\n blocks.heading(\"Section heading\", 2),\n blocks.columnGroup([\n blocks.column(\n [\n blocks.heading(\"Column heading\", 4),\n blocks.paragraph(\"Lorem ipsum dolor sit amet.\"),\n blocks.paragraph(\"Consectetur adipiscing elit.\"),\n ],\n { padding: \"sm\", gap: \"sm\", fill: true }\n ),\n blocks.column(\n [\n blocks.heading(\"Column heading\", 4),\n blocks.paragraph(\"Ut enim ad minim veniam.\"),\n blocks.paragraph(\"Quis nostrud exercitation ullamco laboris.\"),\n ],\n { padding: \"sm\", gap: \"sm\", fill: true }\n ),\n blocks.column(\n [\n blocks.heading(\"Column heading\", 4),\n blocks.paragraph(\"Nisi ut aliquip ex ea commodo consequat.\"),\n blocks.paragraph(\"Duis aute irure dolor in reprehenderit.\"),\n ],\n { padding: \"sm\", gap: \"sm\", fill: true }\n ),\n blocks.column(\n [\n blocks.heading(\"Column heading\", 4),\n blocks.paragraph(\"Excepteur sint occaecat cupidatat.\"),\n blocks.paragraph(\"Sunt in culpa qui officia.\"),\n ],\n { padding: \"sm\", gap: \"sm\", fill: true }\n ),\n ]),\n ],\n }),\n};\n\nconst fullImage: PresetTemplate = {\n key: \"tpl.fullImage\",\n label: \"Full Image\",\n description: \"Edge-to-edge image filling the slide\",\n icon: fullImageIcon,\n build: () =>\n slide.singleCol({\n columnAttrs: { padding: \"none\", fill: true, align: \"stretch\" },\n content: [\n blocks.imageBlock({\n src: \"https://placehold.co/1920x1080/png\",\n size: \"fill\",\n crop: \"center\",\n }),\n ],\n }),\n};\n\nconst fourColumns: PresetTemplate = {\n key: \"tpl.fourColumns\",\n label: \"Four Columns\",\n description: \"Balanced four-column text\",\n icon: fourColumnsIcon,\n build: () => ({\n type: \"slide\",\n attrs: { id: \"slide-1\", size: \"16x9\" },\n content: [\n blocks.columnGroup(\n Array.from({ length: 4 }).map(() =>\n blocks.column(\n [\n blocks.paragraph(\"Lorem ipsum dolor sit amet.\"),\n blocks.paragraph(\"Consectetur adipiscing elit.\"),\n ],\n { padding: \"sm\", gap: \"sm\", fill: true }\n )\n )\n ),\n ],\n }),\n};\n\nconst titleWithBullets: PresetTemplate = {\n key: \"tpl.titleWithBullets\",\n label: \"Title with Bullets\",\n description: \"Header and a bullet list\",\n icon: titleBulletsIcon,\n build: () =>\n slide.singleCol({\n columnAttrs: { padding: \"md\", gap: \"md\" },\n content: [\n blocks.heading(\"Lorem ipsum dolor sit amet\", 2),\n blocks.bulletList([\n \"Consectetur adipiscing elit.\",\n \"Sed do eiusmod tempor incididunt.\",\n \"Ut enim ad minim veniam.\",\n ]),\n ],\n }),\n};\n\nconst titleBulletsAndImage: PresetTemplate = {\n key: \"tpl.titleBulletsAndImage\",\n label: \"Title, Bullets & Image\",\n description: \"Title with bullets and an image\",\n icon: titleBulletsImageIcon,\n build: () =>\n slide.twoCol(\n blocks.column(\n [\n blocks.heading(\"Lorem ipsum dolor sit amet\", 2),\n blocks.bulletList([\n \"Consectetur adipiscing elit.\",\n \"Sed do eiusmod tempor incididunt.\",\n \"Ut enim ad minim veniam.\",\n ]),\n ],\n { padding: \"md\", gap: \"sm\", fill: true }\n ),\n blocks.column(\n [\n blocks.imageBlock({\n src: \"https://placehold.co/480x360/png\",\n size: \"fit\",\n }),\n ],\n {\n align: \"center\",\n justify: \"center\",\n padding: \"md\",\n fill: true,\n }\n )\n ),\n};\n\nconst accentLeft: PresetTemplate = {\n key: \"tpl.accentLeft\",\n label: \"Accent left\",\n description: \"Accent band with image on the left, text on the right\",\n icon: accentLeftIcon,\n build: () =>\n slide.twoCol(\n blocks.column(\n [\n blocks.imageBlock({\n src: \"https://placehold.co/320x240/png\",\n size: \"fill\",\n crop: \"center\",\n }),\n ],\n {\n backgroundColor: \"#f1f5f9\",\n padding: \"none\",\n fill: true,\n align: \"stretch\",\n }\n ),\n blocks.column(\n [\n blocks.heading(\"Accent left\", 3),\n blocks.paragraph(\"Short supporting copy goes here.\"),\n blocks.paragraph(\"Add one more line if needed.\"),\n ],\n { padding: \"md\", gap: \"sm\", fill: true, justify: \"center\" }\n )\n ),\n};\n\nconst accentRight: PresetTemplate = {\n key: \"tpl.accentRight\",\n label: \"Accent right\",\n description: \"Accent band with image on the right, text on the left\",\n icon: accentRightIcon,\n build: () =>\n slide.twoCol(\n blocks.column(\n [\n blocks.heading(\"Accent right\", 3),\n blocks.paragraph(\"Short supporting copy goes here.\"),\n blocks.paragraph(\"Add one more line if needed.\"),\n ],\n { padding: \"md\", gap: \"sm\", fill: true, justify: \"center\" }\n ),\n blocks.column(\n [\n blocks.imageBlock({\n src: \"https://placehold.co/320x240/png\",\n size: \"fill\",\n crop: \"center\",\n }),\n ],\n {\n backgroundColor: \"#f1f5f9\",\n padding: \"none\",\n fill: true,\n align: \"stretch\",\n }\n )\n ),\n};\n\nconst accentTop: PresetTemplate = {\n key: \"tpl.accentTop\",\n label: \"Accent top\",\n description: \"Accent band on top with image, text below\",\n icon: accentTopIcon,\n build: () =>\n ({\n type: \"slide\",\n attrs: { id: \"slide-1\", size: \"16x9\" },\n content: [\n {\n type: \"column\",\n attrs: { backgroundColor: \"#f1f5f9\", padding: \"none\", height: \"200px\", align: \"stretch\" },\n content: [\n blocks.imageBlock({\n src: \"https://placehold.co/1200x400/png\",\n size: \"fill\",\n crop: \"center\",\n }),\n ],\n },\n {\n type: \"column\",\n attrs: { padding: \"md\", gap: \"sm\", fill: true, justify: \"end\" },\n content: [\n blocks.heading(\"Accent top\", 3),\n blocks.paragraph(\"Short supporting copy goes here.\"),\n blocks.paragraph(\"Add one more line if needed.\"),\n ],\n },\n ],\n } as SlideNode),\n};\n\nconst accentRightFit: PresetTemplate = {\n key: \"tpl.accentRightFit\",\n label: \"Accent right (fit)\",\n description: \"Text with a tighter image card on the right\",\n icon: accentRightFitIcon,\n build: () =>\n slide.twoCol(\n blocks.column(\n [\n blocks.heading(\"Accent right (fit)\", 3),\n blocks.paragraph(\"Short supporting copy goes here.\"),\n blocks.paragraph(\"Add one more line if needed.\"),\n ],\n { padding: \"md\", gap: \"sm\", fill: true, justify: \"center\" }\n ),\n blocks.column(\n [\n blocks.column(\n [\n blocks.imageBlock({\n src: \"https://placehold.co/240x200/png\",\n size: \"fit\",\n }),\n ],\n { backgroundColor: \"#f1f5f9\", padding: \"md\", gap: \"sm\", borderRadius: \"lg\", align: \"center\" }\n ),\n ],\n {\n padding: \"md\",\n fill: true,\n justify: \"center\",\n align: \"center\",\n }\n )\n ),\n};\n\nconst accentLeftFit: PresetTemplate = {\n key: \"tpl.accentLeftFit\",\n label: \"Accent left (fit)\",\n description: \"Compact image card on the left, text on the right\",\n icon: accentLeftFitIcon,\n build: () =>\n slide.twoCol(\n blocks.column(\n [\n blocks.column(\n [\n blocks.imageBlock({\n src: \"https://placehold.co/240x200/png\",\n size: \"fit\",\n }),\n ],\n { backgroundColor: \"#f1f5f9\", padding: \"md\", gap: \"sm\", borderRadius: \"lg\", align: \"center\" }\n ),\n ],\n {\n padding: \"md\",\n fill: true,\n justify: \"center\",\n align: \"center\",\n }\n ),\n blocks.column(\n [\n blocks.heading(\"Accent left (fit)\", 3),\n blocks.paragraph(\"Short supporting copy goes here.\"),\n blocks.paragraph(\"Add one more line if needed.\"),\n ],\n { padding: \"md\", gap: \"sm\", fill: true, justify: \"center\" }\n )\n ),\n};\n\nconst twoImageColumns: PresetTemplate = {\n key: \"tpl.twoImageColumns\",\n label: \"2 image columns\",\n description: \"Header with two image cards\",\n icon: twoImageColumnsIcon,\n build: () => ({\n type: \"slide\",\n attrs: { id: \"slide-1\", size: \"16x9\" },\n content: [\n blocks.heading(\"Images\", 2),\n blocks.columnGroup([\n blocks.column(\n [\n blocks.imageBlock({\n src: \"https://placehold.co/640x360/png\",\n size: \"fit\",\n }),\n blocks.heading(\"Image title\", 4),\n blocks.paragraph(\"Short supporting copy goes here.\"),\n ],\n { padding: \"md\", gap: \"sm\", fill: true }\n ),\n blocks.column(\n [\n blocks.imageBlock({\n src: \"https://placehold.co/640x360/png\",\n size: \"fit\",\n }),\n blocks.heading(\"Image title\", 4),\n blocks.paragraph(\"Short supporting copy goes here.\"),\n ],\n { padding: \"md\", gap: \"sm\", fill: true }\n ),\n ]),\n ],\n }),\n};\n\nconst registry: Record<PresetKey, PresetTemplate> = {\n \"tpl.titleAndSubheader\": titleAndSubheader,\n \"tpl.imageAndText\": imageAndText,\n \"tpl.textAndImage\": textAndImage,\n \"tpl.twoColumns\": twoColumns,\n \"tpl.twoColumnsWithHeader\": twoColumnsWithHeader,\n \"tpl.threeColumns\": threeColumns,\n \"tpl.threeColumnsWithHeader\": threeColumnsWithHeader,\n \"tpl.fourColumns\": fourColumns,\n \"tpl.fourColumnsWithHeader\": fourColumnsWithHeader,\n \"tpl.titleWithBullets\": titleWithBullets,\n \"tpl.titleBulletsAndImage\": titleBulletsAndImage,\n \"tpl.fullImage\": fullImage,\n \"tpl.accentLeft\": accentLeft,\n \"tpl.accentRight\": accentRight,\n \"tpl.accentTop\": accentTop,\n \"tpl.accentRightFit\": accentRightFit,\n \"tpl.accentLeftFit\": accentLeftFit,\n \"tpl.twoImageColumns\": twoImageColumns,\n\n};\n\nexport const listPresetTemplates = (): PresetTemplate[] => Object.values(registry);\n\nexport const buildPresetTemplate = (key: PresetKey): SlideNode => registry[key].build();\n\nexport type { PresetTemplate };\n"],"mappings":"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","names":["v1_exports","v1_exports","v1_exports","v1_exports","slide","slide","column","image","_a","slide"]}
|
|
1
|
+
{"version":3,"sources":["../src/contexts/v1/index.ts","../src/contexts/v1/core.ts","../src/contexts/v1/output.fullDocument.ts","../src/contexts/v1/imageBlock.ts","../src/contexts/v1/column.ts","../src/contexts/v1/columnGroup.ts","../src/contexts/v1/slide.ts","../src/contexts/v1/style.ts","../src/contexts/v1/editingRules.ts","../src/contexts/v1/sizing.ts","../src/contexts/v1/blockquote.ts","../src/contexts/v1/bulletList.ts","../src/contexts/v1/codeBlock.ts","../src/contexts/v1/hardBreak.ts","../src/contexts/v1/horizontalRule.ts","../src/contexts/v1/image.ts","../src/contexts/v1/heading.ts","../src/contexts/v1/paragraph.ts","../src/contexts/v1/youtube.ts","../src/bundles/v1/index.ts","../src/bundles/v1/minimalCreate.ts","../src/bundles/v1/imageEditing.ts","../src/bundles/v1/all.ts","../src/schemas/v1/index.ts","../src/schemas/v1/imageBlock.schema.json","../src/schemas/v1/column.schema.json","../src/schemas/v1/columnGroup.schema.json","../src/schemas/v1/slide.schema.json","../src/schemas/v1/blockquote.schema.json","../src/schemas/v1/bulletList.schema.json","../src/schemas/v1/codeBlock.schema.json","../src/schemas/v1/hardBreak.schema.json","../src/schemas/v1/horizontalRule.schema.json","../src/schemas/v1/image.schema.json","../src/schemas/v1/heading.schema.json","../src/schemas/v1/paragraph.schema.json","../src/schemas/v1/youtube.schema.json","../src/bundles/v1/allSchemas.ts","../src/bundles/v1/allContexts.ts","../src/templates/v1/index.ts","../src/templates/v1/schemaBuilder.ts","../src/templates/v1/presetTemplateBuilder.ts"],"sourcesContent":["export { core } from \"./core\";\nexport { fullDocument } from \"./output.fullDocument\";\nexport { imageBlock } from \"./imageBlock\";\nexport { column } from \"./column\";\nexport { columnGroup } from \"./columnGroup\";\nexport { slide } from \"./slide\";\nexport { style } from \"./style\";\nexport { editingRules } from \"./editingRules\";\nexport { sizing } from \"./sizing\";\nexport { blockquote } from \"./blockquote\";\nexport { bulletList } from \"./bulletList\";\nexport { codeBlock } from \"./codeBlock\";\nexport { hardBreak } from \"./hardBreak\";\nexport { horizontalRule } from \"./horizontalRule\";\nexport { image } from \"./image\";\nexport { heading } from \"./heading\";\nexport { paragraph } from \"./paragraph\";\nexport { youtube } from \"./youtube\";\n\n","export const core = `\n<core>\nYou are given a BlockSlides document to CREATE or EDIT.\n\nDocument shape:\n- doc: { type: \"doc\", content: slide[] }\n- slide: { type: \"slide\", attrs?, content: block[] }\n- block: includes heading, paragraph, column, imageBlock, bulletList, codeBlock, blockquote, horizontalRule, youtube, etc.\n- column: { type: \"column\", attrs?, content: block[] }\n\nKey changes:\n- Slides can contain columns, columnGroups, or any block-level content\n- Use column directly in slide for full-width blocks\n- Use columnGroup to place multiple columns side-by-side\n- All block types inherit common attributes from BaseBlockAttributes\n\nBaseBlockAttributes (available on all blocks):\n- align: \"left\" | \"center\" | \"right\" | \"stretch\"\n- justify: \"start\" | \"center\" | \"end\" | \"space-between\" (for containers)\n- padding: \"none\" | \"sm\" | \"md\" | \"lg\"\n- margin: \"none\" | \"sm\" | \"md\" | \"lg\"\n- gap: \"none\" | \"sm\" | \"md\" | \"lg\"\n- backgroundColor: string (CSS color)\n- backgroundImage: string (URL)\n- borderRadius: \"none\" | \"sm\" | \"md\" | \"lg\"\n- border: string (CSS border)\n- fill: boolean (fill available space)\n- width: string (CSS width)\n- height: string (CSS height)\n\nRules:\n- Use only known node types and valid attrs. Do not invent attributes.\n- Prefer stable references: preserve slide.attrs.id if present.\n- Slides and flyers share the same JSON; flyers are slides sized via attrs and theme.\n- Use semantic spacing tokens (sm/md/lg) instead of raw pixel values\n</core>\n`.trim();\n\n\n","export const fullDocument = `\nOutput contract:\n- Return exactly one JSON object representing the ENTIRE document.\n- No prose, no markdown, no code fences, no comments. JSON only.\n- Include all required attrs. Use allowed enum values only.\n`.trim();\n\n\n","export const imageBlock = `\n<imageBlock>\nNode: imageBlock (block group)\nAttrs (required):\n- src (required): string (image URL)\n\nAttrs (optional - image-specific):\n- alt (optional): string - alt text for accessibility\n- caption (optional): string - image caption\n- credit (optional): string - image credit/attribution\n- assetId (optional): string - asset reference\n- size (optional): \"fill\" | \"fit\" | \"natural\" - how image fills container\n - fill: Cover entire container (width:100%, height:100%, object-fit:cover)\n - fit: Fit inside container with letterboxing (object-fit:contain)\n - natural: Use image's natural dimensions\n- crop (optional): \"center\" | \"top\" | \"bottom\" | \"left\" | \"right\" | \"top-left\" | \"top-right\" | \"bottom-left\" | \"bottom-right\"\n - Focal point for fill/fit modes (default: \"center\")\n\nAttrs (inherited from BaseBlockAttributes):\n- align (optional): \"left\" | \"center\" | \"right\" | \"stretch\" - block alignment\n- padding (optional): \"none\" | \"sm\" | \"md\" | \"lg\" - internal padding\n- margin (optional): \"none\" | \"sm\" | \"md\" | \"lg\" - external margin\n- backgroundColor (optional): string - background color\n- borderRadius (optional): \"none\" | \"sm\" | \"md\" | \"lg\" - corner rounding\n- width (optional): string - explicit width override (CSS value)\n- height (optional): string - explicit height override (CSS value)\n\nDeprecated attributes (kept for backwards compatibility, do not use):\n- layout, fullBleed, focalX, focalY\n\nNotes:\n- Default size is \"fill\" if not specified\n- Use crop to control which part of the image is visible when cropped\n- width/height overrides apply on top of size mode\n</imageBlock>\n`.trim();\n\n\n","export const column = `\n<column>\nNode: column (block group)\nAttrs (inherits from BaseBlockAttributes):\n- align (optional): \"left\" | \"center\" | \"right\" | \"stretch\" - horizontal alignment\n- justify (optional): \"start\" | \"center\" | \"end\" | \"space-between\" - vertical distribution of children\n- padding (optional): \"none\" | \"sm\" | \"md\" | \"lg\" - internal spacing (semantic tokens)\n- margin (optional): \"none\" | \"sm\" | \"md\" | \"lg\" - external spacing\n- gap (optional): \"none\" | \"sm\" | \"md\" | \"lg\" - space between child blocks\n- backgroundColor (optional): string - CSS color\n- backgroundImage (optional): string - background image URL\n- borderRadius (optional): \"none\" | \"sm\" | \"md\" | \"lg\" - corner rounding\n- border (optional): string - CSS border value\n- fill (optional): boolean - whether to fill available space\n- width (optional): string - explicit width (CSS value)\n- height (optional): string - explicit height (CSS value)\n\nContent:\n- Contains one or more blocks (heading, paragraph, imageBlock, bulletList, etc.)\n- Columns cannot nest other columns\n\nSpacing tokens:\n- none: 0\n- sm: 8px\n- md: 16px\n- lg: 32px\n\nBorder radius tokens:\n- none: 0\n- sm: 4px\n- md: 8px\n- lg: 16px\n\nNotes:\n- Use column directly in slide for full-width content\n- Wrap columns in columnGroup to place them side-by-side\n- Use justify to control vertical distribution of child blocks\n- Use gap for spacing between children instead of margins\n</column>\n`.trim();\n\n\n","export const columnGroup = `\n<columnGroup>\nNode: columnGroup (horizontal container)\nPurpose: Groups multiple columns side-by-side horizontally\n\nAttrs:\n- layout (optional): string - Layout ratio for columns (e.g., \"1-1\" for equal width, \"2-1\" for 2:1 ratio, \"1-2-1\" for three columns)\n- fill (optional): boolean - Whether the columnGroup fills available vertical space\n- className (optional): string - CSS classes\n- backgroundMode (optional): \"none\" | \"color\" | \"image\" | \"imageOverlay\"\n- backgroundColor (optional): string - CSS color for background\n- backgroundImage (optional): string - URL for background image\n- backgroundOverlayColor (optional): string - Color for overlay when using imageOverlay\n- backgroundOverlayOpacity (optional): number (0-1) - Opacity for overlay\n\nContent:\n- Contains one or more column nodes\n- Columns within a columnGroup are displayed side-by-side horizontally\n- Each column shares the horizontal space (equal width by default, or based on layout attribute)\n\nUsage:\n- Use columnGroup when you want columns to appear next to each other horizontally\n- For full-width content, use column directly in the slide (without columnGroup)\n- You can have multiple columnGroups in a slide to create different rows of columns\n\nExamples:\n1. Two equal columns side-by-side:\n columnGroup { content: [column, column] }\n\n2. Three columns with 2:1:1 ratio:\n columnGroup { attrs: { layout: \"2-1-1\" }, content: [column, column, column] }\n\n3. Full-width content above and below a two-column section:\n slide {\n content: [\n column { ... }, // full-width\n columnGroup { // side-by-side\n content: [column, column]\n },\n column { ... } // full-width\n ]\n }\n</columnGroup>\n`.trim();\n","export const slide = `\n<slide>\nNode: slide\nAttrs:\n- id (optional): string (stable identifier; preserve if present)\n- className (optional): string (styling)\n- size (optional): \"16x9\" | \"4x3\" | \"a4-portrait\" | \"a4-landscape\" | \"letter-portrait\" | \"letter-landscape\" | \"linkedin-banner\"\n- backgroundMode (optional): \"none\" | \"color\" | \"image\" | \"imageOverlay\"\n- backgroundColor (optional): string (CSS color for solid backgrounds)\n- backgroundImage (optional): string (URL for slide-level background image)\n- backgroundOverlayColor (optional): string (color for the overlay when using imageOverlay)\n- backgroundOverlayOpacity (optional): number (0–1, opacity for the overlay)\n\nContent:\n- slide can contain columns, columnGroups, or any block-level content (heading, paragraph, imageBlock, bulletList, codeBlock, etc.)\n- Use column directly for full-width content\n- Use columnGroup to place multiple columns side-by-side\n- You can mix columns, columnGroups, and other blocks in any order\n\nNotes:\n- Flyers are slides sized for paper (e.g., size: \"a4-portrait\").\n- Set size to control canvas dimensions; theme applies the exact width/height.\n- For background images, prefer backgroundMode/backgroundImage over Tailwind bg-[url(...)]; the extension will inject the correct CSS.\n- To create multi-column layouts, wrap columns in a columnGroup\n</slide>\n`.trim();\n\n\n","export const style = `\n<style>\nStyling\n- Prefer using attrs.className for styling (e.g., Tailwind classes).\n- Use enums for canonical behaviors (e.g., imageBlock.layout).\n- When enums are insufficient (spacing, backgrounds), use className.\n</style>\n`.trim();\n\n\n","export const editingRules = `\n<General editing rules>\n- Preserve existing ids and valid attributes. Do not remove or rename known attrs.\n- Use only allowed enum values. Do not invent new enum values.\n- Avoid introducing new attributes that are not documented. If styling is needed, prefer className.\n- Keep the document valid: slide > (column | columnGroup > column) > blocks.\n</General editing rules>\n\n<Centering content in a column>\n- Columns are flex containers. Use their alignment attrs instead of per-block hacks.\n- To center all content vertically and horizontally inside a column:\n - Set column.attrs.verticalAlign = \"center\".\n - Set column.attrs.horizontalAlign = \"center\".\n- This will apply to headings, paragraphs, imageBlocks, and other blocks inside that column.\n- Example:\n - Before: column.attrs = { verticalAlign: \"top\", horizontalAlign: \"left\", padding: \"none\" }\n - After: column.attrs = { verticalAlign: \"center\", horizontalAlign: \"center\", padding: \"none\" }\n</Centering content in a column>\n\n<Backgrounds (slides, columnGroups, columns)>\n- Use structured background attrs instead of raw Tailwind bg-[url(...)] when setting background images.\n- If you use bg-[...], the image will not work because the tailwind classes we need have been tree shaken off - instead use the attributes.\n- For slide-level backgrounds (hero/flyer):\n - Use slide.attrs.backgroundMode = \"color\" | \"image\" | \"imageOverlay\".\n - For images, set slide.attrs.backgroundImage to the image URL.\n - For overlays, set slide.attrs.backgroundOverlayColor (e.g., \"rgba(0,0,0,0.8)\") and slide.attrs.backgroundOverlayOpacity (0–1).\n- For horizontal bands, use columnGroup-level backgrounds (columnGroup.attrs.background*).\n- For panel-style sections, use column-level backgrounds (column.attrs.background*).\n- Do not mix multiple background images on the same node; prefer one backgroundMode per slide/columnGroup/column and layer additional visuals as imageBlock nodes.\n</Backgrounds (slides, columnGroups, columns)>\n\n<Text editing (headings and paragraphs)>\n- Preserve semantic types: do not turn headings into paragraphs or vice versa unless explicitly asked.\n- To change heading level, update heading.attrs.level (1–6) without changing its id.\n- To change the text, edit the text nodes inside content, keeping marks and structure when possible.\n- For alignment of text itself, prefer using the textAlign extension (textAlign: \"left\" | \"center\" | \"right\" | \"justify\") if configured.\n- Do not introduce inline HTML; represent formatting via marks (bold, italic, underline, etc.).\n</Text editing (headings and paragraphs)>\n\n<Image blocks>\n- Use imageBlock for rich images; preserve src, assetId, and metadata unless the user explicitly asks to change them.\n- To change the alignment of an imageBlock within its column, set imageBlock.attrs.align to \"left\", \"center\", \"right\", or \"stretch\".\n- To change how the image is fit, adjust imageBlock.attrs.layout (for example: \"cover\", \"contain\", \"fill\", \"focus\", or a configured layout key).\n- When centering both text and image in a column, combine:\n - column verticalAlign/horizontalAlign for layout, and\n - imageBlock align for how the image itself sits in the column.\n- Do not invent new layout or align values that are not documented in the schema.\n</Image blocks>\n\n`.trim();\n\n\n","export const sizing = `\n<sizing>\nSizing\n- Slides and flyers share the same JSON. Flyers are slides sized via slide.attrs.size and theme rules.\n- Allowed sizes: \"16x9\" | \"4x3\" | \"a4-portrait\" | \"a4-landscape\" | \"letter-portrait\" | \"letter-landscape\" | \"linkedin-banner\".\n- Editors may render with fixed canvases or dynamic mode. The default is fixed; dynamic stretches to container with preserved aspect.\n</sizing>\n`.trim();\n\n\n","export const blockquote = `\n<blockquote>\nNode: blockquote (block group)\nAttrs (inherited from BaseBlockAttributes):\n- align: \"left\" | \"center\" | \"right\"\n- padding: \"none\" | \"sm\" | \"md\" | \"lg\"\n- margin: \"none\" | \"sm\" | \"md\" | \"lg\"\n- backgroundColor: string (CSS color)\n- borderRadius: \"none\" | \"sm\" | \"md\" | \"lg\"\n- (and other base attributes)\n\nContent:\n- One or more block nodes (typically paragraphs, headings, lists).\n\nSemantics:\n- Use for quoted text or callouts inside a column or slide.\n- BaseBlockAttributes provide consistent styling capabilities.\n</blockquote>\n`.trim();\n\n\n","export const bulletList = `\n<bulletList>\nNode: bulletList (block group)\nAttrs (inherited from BaseBlockAttributes):\n- align: \"left\" | \"center\" | \"right\"\n- padding: \"none\" | \"sm\" | \"md\" | \"lg\"\n- margin: \"none\" | \"sm\" | \"md\" | \"lg\"\n- backgroundColor: string (CSS color)\n- borderRadius: \"none\" | \"sm\" | \"md\" | \"lg\"\n- (and other base attributes)\n\nContent:\n- One or more list item nodes (listItem) that contain paragraphs or inline content.\n\nSemantics:\n- Represents an unordered list rendered as <ul>.\n- Use when you need bullet points inside a column or slide.\n- Can be placed directly in slides or within columns.\n</bulletList>\n`.trim();\n\n\n","export const codeBlock = `\n<codeBlock>\nNode: codeBlock (block group)\nAttrs (codeBlock-specific):\n- language (optional): string | null (e.g., \"js\", \"ts\", \"python\")\n\nAttrs (inherited from BaseBlockAttributes):\n- align: \"left\" | \"center\" | \"right\"\n- padding: \"none\" | \"sm\" | \"md\" | \"lg\"\n- margin: \"none\" | \"sm\" | \"md\" | \"lg\"\n- backgroundColor: string (CSS color)\n- borderRadius: \"none\" | \"sm\" | \"md\" | \"lg\"\n- (and other base attributes)\n\nContent:\n- Plain text only (no child nodes); used for preformatted code samples.\n\nSemantics:\n- Renders as <pre><code>…</code></pre>.\n- language controls a CSS class (e.g., \"language-js\") for syntax highlighting.\n- Use when the user explicitly wants a fenced code block, not inline code in a paragraph.\n</codeBlock>\n`.trim();\n\n\n","export const hardBreak = `\n<hardBreak>\nNode: hardBreak\nAttrs:\n- None (HTML-only); behaves like a manual line break.\n\nContent:\n- Inline-only; used within paragraphs or headings.\n\nSemantics:\n- Renders as <br> and as a newline in plain text exports.\n- Use when the user requests a line break without starting a new paragraph.\n</hardBreak>\n`.trim();\n\n\n","export const horizontalRule = `\n<horizontalRule>\nNode: horizontalRule (block group)\nAttrs (inherited from BaseBlockAttributes):\n- align: \"left\" | \"center\" | \"right\" | \"stretch\"\n- padding: \"none\" | \"sm\" | \"md\" | \"lg\"\n- margin: \"none\" | \"sm\" | \"md\" | \"lg\"\n- backgroundColor: string (CSS color)\n- (and other base attributes)\n\nContent:\n- No children; this is a self-contained separator.\n\nSemantics:\n- Renders as <hr>.\n- Use to visually separate sections within a slide.\n- Can control spacing around the rule with padding/margin.\n</horizontalRule>\n`.trim();\n\n\n","export const image = `\n<image>\nNode: image\nAttrs:\n- src (required): string (URL to the image).\n- alt (optional): string (accessibility text).\n- title (optional): string (tooltip / caption).\n- width, height (optional): numbers (px) used as hints for rendering.\n\nContent:\n- No children; this is an atomic inline or block-level image node depending on editor configuration.\n\nSemantics:\n- Renders as a simple <img>, unlike imageBlock which adds rich framing/caption UI.\n- Prefer imageBlock for designed layouts; use image for simple inline images in paragraphs.\n</image>\n`.trim();\n\n\n","export const heading = `\n<heading>\nNode: heading (block group)\nAttrs (heading-specific):\n- level (required): 1 | 2 | 3 | 4 | 5 | 6\n\nAttrs (inherited from BaseBlockAttributes):\n- align: \"left\" | \"center\" | \"right\"\n- padding: \"none\" | \"sm\" | \"md\" | \"lg\"\n- margin: \"none\" | \"sm\" | \"md\" | \"lg\"\n- backgroundColor: string (CSS color)\n- borderRadius: \"none\" | \"sm\" | \"md\" | \"lg\"\n- (and other base attributes)\n\nContent:\n- Inline content (text, marks, inline nodes).\n\nSemantics:\n- Renders as <h1>…<h6> depending on level.\n- Use level 1–2 for main slide titles, 3–4 for section headings, 5–6 for subtle labels.\n</heading>\n`.trim();\n\n\n","export const paragraph = `\n<paragraph>\nNode: paragraph (block group)\nAttrs (inherited from BaseBlockAttributes):\n- align: \"left\" | \"center\" | \"right\"\n- padding: \"none\" | \"sm\" | \"md\" | \"lg\"\n- margin: \"none\" | \"sm\" | \"md\" | \"lg\"\n- backgroundColor: string (CSS color)\n- borderRadius: \"none\" | \"sm\" | \"md\" | \"lg\"\n- (and other base attributes)\n\nContent:\n- Inline content (text with marks, inline nodes such as image or hardBreak).\n\nSemantics:\n- Default text block inside columns and slides.\n- Multiple paragraphs can be stacked to create vertical rhythm.\n- Use gap on parent column instead of margin on individual paragraphs for consistent spacing.\n</paragraph>\n`.trim();\n\n\n","export const youtube = `\n<youtube>\nNode: youtube (block group)\nAttrs (youtube-specific):\n- src (required): string (public YouTube URL)\n- start (optional): number (start time in seconds)\n- width (optional): number (frame width in px)\n- height (optional): number (frame height in px)\n\nAttrs (inherited from BaseBlockAttributes):\n- align: \"left\" | \"center\" | \"right\" | \"stretch\"\n- padding: \"none\" | \"sm\" | \"md\" | \"lg\"\n- margin: \"none\" | \"sm\" | \"md\" | \"lg\"\n- borderRadius: \"none\" | \"sm\" | \"md\" | \"lg\"\n- (and other base attributes)\n\nContent:\n- No children; this is an atomic embed node.\n\nSemantics:\n- Renders as an embedded YouTube iframe wrapped in a container <div>.\n- Use for video embeds inside a column or slide.\n- Do not embed raw <iframe> HTML directly; always use the youtube node with attrs.\n</youtube>\n`.trim();\n\n\n","export { minimalCreate } from \"./minimalCreate\";\nexport { imageEditing } from \"./imageEditing\";\nexport { all } from \"./all\";\nexport { allSchemas } from \"./allSchemas\";\nexport { allContexts } from \"./allContexts\";\n\n","import { core, fullDocument, slide, column, style } from \"../../contexts/v1\";\n\nexport const minimalCreate = [core, fullDocument, slide, column, style].join(\"\\n\\n\");\n\n\n","import { core, fullDocument, imageBlock, editingRules } from \"../../contexts/v1\";\n\nexport const imageEditing = [core, fullDocument, imageBlock, editingRules].join(\"\\n\\n\");\n\n\n","import * as ctx from \"../../contexts/v1\";\n\nexport const all = [\n ctx.core,\n ctx.fullDocument,\n ctx.slide,\n ctx.column,\n ctx.style,\n ctx.sizing,\n // Core content blocks and media\n ctx.imageBlock,\n ctx.blockquote,\n ctx.bulletList,\n ctx.heading,\n ctx.paragraph,\n ctx.image,\n ctx.codeBlock,\n ctx.hardBreak,\n ctx.horizontalRule,\n ctx.youtube,\n // Editing behavior\n ctx.editingRules,\n].join(\"\\n\\n\");\n\n\n","export { default as imageBlock } from \"./imageBlock.schema.json\";\nexport { default as column } from \"./column.schema.json\";\nexport { default as columnGroup } from \"./columnGroup.schema.json\";\nexport { default as slide } from \"./slide.schema.json\";\nexport { default as blockquote } from \"./blockquote.schema.json\";\nexport { default as bulletList } from \"./bulletList.schema.json\";\nexport { default as codeBlock } from \"./codeBlock.schema.json\";\nexport { default as hardBreak } from \"./hardBreak.schema.json\";\nexport { default as horizontalRule } from \"./horizontalRule.schema.json\";\nexport { default as image } from \"./image.schema.json\";\nexport { default as heading } from \"./heading.schema.json\";\nexport { default as paragraph } from \"./paragraph.schema.json\";\nexport { default as youtube } from \"./youtube.schema.json\";\n\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"imageBlock\",\n \"description\": \"An image block with simplified size and crop controls. Also inherits common block attributes.\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"imageBlock\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"src\": { \"type\": \"string\", \"minLength\": 1, \"description\": \"Image URL (required)\" },\n \"alt\": { \"type\": \"string\", \"description\": \"Alt text for accessibility\" },\n \"caption\": { \"type\": \"string\", \"description\": \"Image caption\" },\n \"credit\": { \"type\": \"string\", \"description\": \"Image credit/attribution\" },\n \"size\": { \n \"enum\": [\"fill\", \"fit\", \"natural\", null], \n \"description\": \"How the image fills its container: fill (cover), fit (contain), or natural (original size)\" \n },\n \"crop\": { \n \"enum\": [\"center\", \"top\", \"bottom\", \"left\", \"right\", \"top-left\", \"top-right\", \"bottom-left\", \"bottom-right\", null], \n \"description\": \"Crop/focus position for fill/fit modes\" \n },\n \"align\": { \"enum\": [\"left\", \"center\", \"right\", \"stretch\", null], \"description\": \"Block alignment within parent\" },\n \"padding\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Internal padding\" },\n \"backgroundColor\": { \"type\": [\"string\", \"null\"], \"description\": \"Background color\" },\n \"borderRadius\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Corner rounding\" },\n \"width\": { \"type\": [\"string\", \"null\"], \"description\": \"Explicit width override\" },\n \"height\": { \"type\": [\"string\", \"null\"], \"description\": \"Explicit height override\" },\n \"assetId\": { \"type\": [\"string\", \"null\"], \"description\": \"Asset ID reference\" },\n \"layout\": { \"enum\": [\"cover\", \"contain\", \"fill\", \"focus\", \"pattern\", null], \"description\": \"DEPRECATED: Use size instead\" },\n \"fullBleed\": { \"type\": \"boolean\", \"description\": \"DEPRECATED: Use size='fill' instead\" },\n \"focalX\": { \"type\": [\"number\", \"null\"], \"minimum\": 0, \"maximum\": 100, \"description\": \"DEPRECATED: Use crop instead\" },\n \"focalY\": { \"type\": [\"number\", \"null\"], \"minimum\": 0, \"maximum\": 100, \"description\": \"DEPRECATED: Use crop instead\" }\n },\n \"required\": [\"src\"],\n \"additionalProperties\": true\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"column\",\n \"description\": \"A container block that holds other blocks. Common attributes (align, padding, gap, backgroundColor, etc.) are shared with all block types.\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"column\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"align\": { \"enum\": [\"left\", \"center\", \"right\", \"stretch\", null], \"description\": \"Horizontal alignment of content\" },\n \"justify\": { \"enum\": [\"start\", \"center\", \"end\", \"space-between\", null], \"description\": \"Vertical distribution of children\" },\n \"padding\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Internal padding\" },\n \"margin\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"External margin\" },\n \"gap\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Gap between child blocks\" },\n \"backgroundColor\": { \"type\": [\"string\", \"null\"], \"description\": \"Background color\" },\n \"backgroundImage\": { \"type\": [\"string\", \"null\"], \"description\": \"Background image URL\" },\n \"borderRadius\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Corner rounding\" },\n \"border\": { \"type\": [\"string\", \"null\"], \"description\": \"CSS border value\" },\n \"fill\": { \"type\": [\"boolean\", \"null\"], \"description\": \"Whether to fill available space\" },\n \"width\": { \"type\": [\"string\", \"null\"], \"description\": \"Explicit width\" },\n \"height\": { \"type\": [\"string\", \"null\"], \"description\": \"Explicit height\" }\n },\n \"additionalProperties\": true\n },\n \"content\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"object\" },\n \"description\": \"Child blocks\"\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"columnGroup\",\n \"description\": \"A horizontal container that groups multiple columns side-by-side. Use columnGroup when you want columns to be placed next to each other horizontally. For full-width content, use column directly in the slide.\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"columnGroup\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"layout\": {\n \"type\": [\"string\", \"null\"],\n \"description\": \"Layout ratio for columns (e.g., '1-1' for equal, '2-1' for 2:1 ratio)\"\n },\n \"fill\": {\n \"type\": [\"boolean\", \"null\"],\n \"description\": \"Whether the columnGroup should fill available vertical space\"\n },\n \"className\": { \"type\": [\"string\", \"null\"] },\n \"backgroundMode\": {\n \"enum\": [\"none\", \"color\", \"image\", \"imageOverlay\", null]\n },\n \"backgroundColor\": { \"type\": [\"string\", \"null\"] },\n \"backgroundImage\": { \"type\": [\"string\", \"null\"] },\n \"backgroundOverlayColor\": { \"type\": [\"string\", \"null\"] },\n \"backgroundOverlayOpacity\": { \"type\": [\"number\", \"null\"] }\n },\n \"additionalProperties\": true\n },\n \"content\": {\n \"type\": \"array\",\n \"items\": {\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"column\" }\n },\n \"required\": [\"type\"]\n },\n \"minItems\": 1,\n \"description\": \"Array of column nodes\"\n }\n },\n \"required\": [\"type\", \"content\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"slide\",\n \"description\": \"A slide containing blocks directly. Blocks can be any block-level node (heading, paragraph, column, imageBlock, etc.). Adjacent columns automatically form horizontal layouts.\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"slide\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"id\": { \"type\": [\"string\", \"null\"] },\n \"className\": { \"type\": [\"string\", \"null\"] },\n \"size\": {\n \"enum\": [\n \"16x9\",\n \"4x3\",\n \"a4-portrait\",\n \"a4-landscape\",\n \"letter-portrait\",\n \"letter-landscape\",\n \"linkedin-banner\",\n null\n ]\n },\n \"backgroundMode\": {\n \"enum\": [\"none\", \"color\", \"image\", \"imageOverlay\", null]\n },\n \"backgroundColor\": { \"type\": [\"string\", \"null\"] },\n \"backgroundImage\": { \"type\": [\"string\", \"null\"] },\n \"backgroundOverlayColor\": { \"type\": [\"string\", \"null\"] },\n \"backgroundOverlayOpacity\": { \"type\": [\"number\", \"null\"] }\n },\n \"additionalProperties\": true\n },\n \"content\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"object\" },\n \"description\": \"Block-level content (heading, paragraph, column, imageBlock, etc.)\"\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n\n\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"blockquote\",\n \"description\": \"A blockquote. Inherits common block attributes.\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"blockquote\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"align\": { \"enum\": [\"left\", \"center\", \"right\", null], \"description\": \"Text alignment\" },\n \"padding\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Internal padding\" },\n \"margin\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"External margin\" },\n \"backgroundColor\": { \"type\": [\"string\", \"null\"], \"description\": \"Background color\" },\n \"borderRadius\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Corner rounding\" }\n },\n \"additionalProperties\": true\n },\n \"content\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"object\" },\n \"description\": \"Block content\"\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"bulletList\",\n \"description\": \"A bullet list block. Inherits common block attributes.\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"bulletList\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"align\": { \"enum\": [\"left\", \"center\", \"right\", null], \"description\": \"Text alignment\" },\n \"padding\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Internal padding\" },\n \"margin\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"External margin\" },\n \"backgroundColor\": { \"type\": [\"string\", \"null\"], \"description\": \"Background color\" },\n \"borderRadius\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Corner rounding\" }\n },\n \"additionalProperties\": true\n },\n \"content\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"object\" },\n \"description\": \"List items\"\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"codeBlock\",\n \"description\": \"A code block. Inherits common block attributes.\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"codeBlock\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"language\": { \"type\": [\"string\", \"null\"], \"description\": \"Programming language for syntax highlighting\" },\n \"align\": { \"enum\": [\"left\", \"center\", \"right\", null], \"description\": \"Block alignment\" },\n \"padding\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Internal padding\" },\n \"margin\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"External margin\" },\n \"backgroundColor\": { \"type\": [\"string\", \"null\"], \"description\": \"Background color\" },\n \"borderRadius\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Corner rounding\" }\n },\n \"additionalProperties\": true\n },\n \"content\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"object\" },\n \"description\": \"Code text content\"\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"hardBreak\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"hardBreak\" },\n \"attrs\": {\n \"type\": \"object\",\n \"additionalProperties\": true\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n\n\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"horizontalRule\",\n \"description\": \"A horizontal rule/divider. Inherits common block attributes.\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"horizontalRule\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"align\": { \"enum\": [\"left\", \"center\", \"right\", \"stretch\", null], \"description\": \"Alignment\" },\n \"padding\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Padding around rule\" },\n \"margin\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Margin around rule\" },\n \"backgroundColor\": { \"type\": [\"string\", \"null\"], \"description\": \"Background color\" }\n },\n \"additionalProperties\": true\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"image\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"image\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"src\": { \"type\": [\"string\", \"null\"] },\n \"alt\": { \"type\": [\"string\", \"null\"] },\n \"title\": { \"type\": [\"string\", \"null\"] },\n \"width\": { \"type\": [\"number\", \"null\"] },\n \"height\": { \"type\": [\"number\", \"null\"] }\n },\n \"additionalProperties\": true\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n\n\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"heading\",\n \"description\": \"A heading block (h1-h6). Inherits common block attributes.\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"heading\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"level\": { \"type\": \"integer\", \"minimum\": 1, \"maximum\": 6, \"description\": \"Heading level (1-6)\" },\n \"align\": { \"enum\": [\"left\", \"center\", \"right\", null], \"description\": \"Text alignment\" },\n \"padding\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Internal padding\" },\n \"margin\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"External margin\" },\n \"backgroundColor\": { \"type\": [\"string\", \"null\"], \"description\": \"Background color\" },\n \"borderRadius\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Corner rounding\" }\n },\n \"additionalProperties\": true\n },\n \"content\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"object\" },\n \"description\": \"Inline content (text, marks)\"\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"paragraph\",\n \"description\": \"A paragraph block. Inherits common block attributes.\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"paragraph\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"align\": { \"enum\": [\"left\", \"center\", \"right\", null], \"description\": \"Text alignment\" },\n \"padding\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Internal padding\" },\n \"margin\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"External margin\" },\n \"backgroundColor\": { \"type\": [\"string\", \"null\"], \"description\": \"Background color\" },\n \"borderRadius\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Corner rounding\" }\n },\n \"additionalProperties\": true\n },\n \"content\": {\n \"type\": \"array\",\n \"items\": { \"type\": \"object\" },\n \"description\": \"Inline content (text, marks)\"\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"youtube\",\n \"description\": \"A YouTube video embed. Inherits common block attributes.\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"youtube\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"src\": { \"type\": [\"string\", \"null\"], \"description\": \"YouTube video URL or ID\" },\n \"start\": { \"type\": \"number\", \"description\": \"Start time in seconds\" },\n \"width\": { \"type\": \"number\", \"description\": \"Video width\" },\n \"height\": { \"type\": \"number\", \"description\": \"Video height\" },\n \"align\": { \"enum\": [\"left\", \"center\", \"right\", \"stretch\", null], \"description\": \"Block alignment\" },\n \"padding\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Padding\" },\n \"margin\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Margin\" },\n \"borderRadius\": { \"enum\": [\"none\", \"sm\", \"md\", \"lg\", null], \"description\": \"Corner rounding\" }\n },\n \"additionalProperties\": true\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n","import * as schemas from \"../../schemas/v1\";\n\n/**\n * Human- and AI-readable bundle of all v1 JSON Schemas.\n *\n * Wrapped in a top-level <Schemas>…</Schemas> tag, with each schema\n * enclosed in its own <{name}Schema>…</{name}Schema> block.\n */\nexport const allSchemas = `\n<Schemas>\n${Object.entries(schemas)\n .map(\n ([name, schema]) =>\n `<${name}Schema>\\n` +\n JSON.stringify(schema as unknown, null, 2) +\n `\\n</${name}Schema>`\n )\n .join(\"\\n\\n\")}\n</Schemas>\n`.trim();\n\n\n\n","import * as ctx from \"../../contexts/v1\";\n\n/**\n * All v1 context atoms concatenated into a single string,\n * wrapped in a top-level <Context>…</Context> block.\n */\nexport const allContexts = `\n<Context>\n${[\n ctx.core,\n ctx.fullDocument,\n ctx.slide,\n ctx.column,\n ctx.columnGroup,\n ctx.style,\n ctx.sizing,\n ctx.imageBlock,\n ctx.blockquote,\n ctx.bulletList,\n ctx.heading,\n ctx.paragraph,\n ctx.image,\n ctx.codeBlock,\n ctx.hardBreak,\n ctx.horizontalRule,\n ctx.youtube,\n ctx.editingRules,\n].join(\"\\n\\n\")}\n</Context>\n`.trim();\n\n\n\n","export * from \"./schemaBuilder\";\nexport * from \"./presetTemplateBuilder\";\n","// TODO: Add additional block helpers (tables, marks) to cover all extensions.\n// TODO: Add server-side validation helper that checks slides against schemasV1.\n// TODO: Add tests/examples that demonstrate agent/tool usage.\n\nimport type { JSONContent } from \"@blockslides/core\";\nimport type {\n SizeKey,\n SlideAttrs,\n ColumnAttrs,\n ImageBlockAttrs,\n BaseBlockAttrs,\n} from \"../../types/v1\";\n\ntype Block = JSONContent;\ntype SlideNode = JSONContent; // slide -> block+\ntype TextMark = { type: string; attrs?: Record<string, any> };\n\nconst defaults = {\n slide: (attrs?: Partial<SlideAttrs>): SlideAttrs => ({\n id: attrs?.id ?? \"slide-1\",\n size: attrs?.size ?? (\"16x9\" as SizeKey),\n className: attrs?.className ?? \"\",\n }),\n column: (attrs?: Partial<ColumnAttrs>): ColumnAttrs => ({\n ...attrs,\n }),\n};\n\nconst textNode = (text: string) =>\n ({\n type: \"text\",\n text,\n }) satisfies Block;\n\nexport const blocks = {\n text: (text: string, marks?: TextMark[]): Block =>\n marks && marks.length > 0\n ? ({ type: \"text\", text, marks } as Block)\n : textNode(text),\n\n paragraph: (text?: string): Block => ({\n type: \"paragraph\",\n content: text ? [textNode(text)] : [],\n }),\n\n heading: (text: string, level: 1 | 2 | 3 | 4 | 5 | 6 = 2): Block => ({\n type: \"heading\",\n attrs: { level },\n content: [textNode(text)],\n }),\n\n bulletList: (items: (string | Block)[]): Block => ({\n type: \"bulletList\",\n content: items.map((item) =>\n typeof item === \"string\"\n ? {\n type: \"listItem\",\n content: [{ type: \"paragraph\", content: [textNode(item)] }],\n }\n : { type: \"listItem\", content: [item] }\n ),\n }),\n\n horizontalRule: (): Block => ({ type: \"horizontalRule\" }),\n\n hardBreak: (): Block => ({ type: \"hardBreak\" }),\n\n codeBlock: (code: string, language?: string): Block => ({\n type: \"codeBlock\",\n attrs: language ? { language } : undefined,\n content: code ? [textNode(code)] : [],\n }),\n\n imageBlock: (attrs: ImageBlockAttrs): Block => ({\n type: \"imageBlock\",\n attrs,\n }),\n\n // Additional nodes to mirror extensions/schemas\n blockquote: (content: Block[] = []): Block => ({\n type: \"blockquote\",\n content,\n }),\n\n listItem: (content: Block[] = []): Block => ({\n type: \"listItem\",\n content,\n }),\n\n image: (attrs: {\n src: string;\n alt?: string | null;\n title?: string | null;\n width?: number | null;\n height?: number | null;\n }): Block => ({\n type: \"image\",\n attrs,\n }),\n\n youtube: (attrs: {\n src?: string | null;\n start?: number;\n width?: number;\n height?: number;\n }): Block => ({\n type: \"youtube\",\n attrs,\n }),\n\n column: (content: Block[], attrs?: Partial<ColumnAttrs>) => ({\n type: \"column\" as const,\n attrs: attrs ?? {},\n content,\n }),\n\n columnGroup: (columns: Block[], attrs?: { layout?: string; fill?: boolean; className?: string }) => ({\n type: \"columnGroup\" as const,\n attrs: attrs ?? {},\n content: columns,\n }),\n};\n\ntype SingleColOpts = {\n slideAttrs?: Partial<SlideAttrs>;\n columnAttrs?: Partial<ColumnAttrs>;\n content?: Block[];\n};\n\ntype ColumnNode = {\n type: \"column\";\n attrs?: Partial<ColumnAttrs>;\n content: Block[];\n};\n\ntype TwoColOpts = {\n slideAttrs?: Partial<SlideAttrs>;\n columns: [ColumnNode, ColumnNode];\n};\n\n/**\n * Slide builder with presets for common layouts.\n * \n * New schema: slides contain blocks directly (doc → slide+ → block+).\n * Adjacent columns automatically form horizontal layouts via CSS.\n */\nexport const slide = Object.assign(\n /**\n * Create a slide with direct block content (no column wrapper).\n */\n (opts: {\n slideAttrs?: Partial<SlideAttrs>;\n content?: Block[];\n } = {}): SlideNode => ({\n type: \"slide\",\n attrs: defaults.slide(opts.slideAttrs),\n content: opts.content ?? [],\n }),\n {\n /**\n * Single column layout - wraps content in one column block.\n */\n singleCol: (opts: SingleColOpts = {}): SlideNode => ({\n type: \"slide\",\n attrs: defaults.slide(opts.slideAttrs),\n content: [\n {\n type: \"column\",\n attrs: defaults.column(opts.columnAttrs),\n content: opts.content ?? [],\n },\n ],\n }),\n\n /**\n * Two column layout - columns grouped side-by-side via columnGroup.\n * Pass two column objects created with blocks.column().\n */\n twoCol: (col1: ColumnNode, col2: ColumnNode, slideAttrs?: Partial<SlideAttrs>): SlideNode => ({\n type: \"slide\",\n attrs: defaults.slide(slideAttrs),\n content: [\n {\n type: \"columnGroup\",\n attrs: { fill: true },\n content: [col1, col2],\n },\n ],\n }),\n\n /**\n * Three column layout - columns grouped side-by-side via columnGroup.\n * Pass three column objects created with blocks.column().\n */\n threeCol: (col1: ColumnNode, col2: ColumnNode, col3: ColumnNode, slideAttrs?: Partial<SlideAttrs>): SlideNode => ({\n type: \"slide\",\n attrs: defaults.slide(slideAttrs),\n content: [\n {\n type: \"columnGroup\",\n attrs: { fill: true },\n content: [col1, col2, col3],\n },\n ],\n }),\n\n /**\n * Four column layout - columns grouped side-by-side via columnGroup.\n * Pass four column objects created with blocks.column().\n */\n fourCol: (col1: ColumnNode, col2: ColumnNode, col3: ColumnNode, col4: ColumnNode, slideAttrs?: Partial<SlideAttrs>): SlideNode => ({\n type: \"slide\",\n attrs: defaults.slide(slideAttrs),\n content: [\n {\n type: \"columnGroup\",\n attrs: { fill: true },\n content: [col1, col2, col3, col4],\n },\n ],\n }),\n }\n);\n\n// Slide layout presets beyond the base helpers\ntype HeroOpts = {\n slideAttrs?: Partial<SlideAttrs>;\n columnAttrs?: Partial<ColumnAttrs>;\n content?: Block[];\n};\n\ntype ImageCoverOpts = {\n slideAttrs?: Partial<SlideAttrs>;\n image?: ImageBlockAttrs;\n overlay?: Block[];\n columnAttrs?: Partial<ColumnAttrs>;\n};\n\ntype QuoteOpts = {\n slideAttrs?: Partial<SlideAttrs>;\n columnAttrs?: Partial<ColumnAttrs>;\n quote?: Block[];\n};\n\ntype AgendaOpts = {\n slideAttrs?: Partial<SlideAttrs>;\n columnAttrs?: Partial<ColumnAttrs>;\n items?: (string | Block)[];\n};\n\ntype MultiColOpts = {\n slideAttrs?: Partial<SlideAttrs>;\n columns: {\n content?: Block[];\n attrs?: Partial<ColumnAttrs>;\n }[];\n};\n\ntype MediaTextOpts = {\n slideAttrs?: Partial<SlideAttrs>;\n media?: Block[];\n text?: Block[];\n mediaColumnAttrs?: Partial<ColumnAttrs>;\n textColumnAttrs?: Partial<ColumnAttrs>;\n};\n\ntype Stack2Opts = {\n slideAttrs?: Partial<SlideAttrs>;\n topColumns?: { content?: Block[]; attrs?: Partial<ColumnAttrs> }[];\n bottomColumns?: { content?: Block[]; attrs?: Partial<ColumnAttrs> }[];\n};\n\n/** Helper to create a column block with attrs and content */\nconst column = (attrs: Partial<ColumnAttrs> | undefined, content: Block[] = []): Block => ({\n type: \"column\",\n attrs: defaults.column(attrs),\n content,\n});\n\ntype TemplatePreset =\n | \"slide.empty\"\n | \"slide.singleCol\"\n | \"slide.twoCol\"\n | \"slide.hero\"\n | \"slide.imageCover\"\n | \"slide.quote\"\n | \"slide.agenda\"\n | \"slide.grid3\"\n | \"slide.grid4\"\n | \"slide.oneTwo\"\n | \"slide.twoOne\"\n | \"slide.oneTwoOne\"\n | \"slide.textMedia\"\n | \"slide.mediaText\"\n | \"slide.stack2\";\n\ntype CreateTemplateInput = {\n preset: TemplatePreset;\n slideAttrs?: Partial<SlideAttrs>;\n columnAttrs?: Partial<ColumnAttrs>;\n leftColumnAttrs?: Partial<ColumnAttrs>;\n rightColumnAttrs?: Partial<ColumnAttrs>;\n content?: Block[];\n left?: Block[];\n right?: Block[];\n heroOpts?: HeroOpts;\n imageCoverOpts?: ImageCoverOpts;\n quoteOpts?: QuoteOpts;\n agendaOpts?: AgendaOpts;\n multiColOpts?: MultiColOpts;\n mediaTextOpts?: MediaTextOpts;\n stack2Opts?: Stack2Opts;\n};\n\nexport const createTemplate = (input: CreateTemplateInput): SlideNode => {\n switch (input.preset) {\n case \"slide.empty\":\n return slide({\n slideAttrs: input.slideAttrs,\n content: [],\n });\n case \"slide.singleCol\":\n return slide.singleCol({\n slideAttrs: input.slideAttrs,\n columnAttrs: input.columnAttrs,\n content: input.content ?? [],\n });\n case \"slide.twoCol\":\n return slide.twoCol(\n blocks.column(input.left ?? [], input.leftColumnAttrs),\n blocks.column(input.right ?? [], input.rightColumnAttrs),\n input.slideAttrs\n );\n case \"slide.hero\": {\n const opts = input.heroOpts ?? {};\n return {\n type: \"slide\",\n attrs: defaults.slide({ ...opts.slideAttrs, backgroundColor: opts.slideAttrs?.backgroundColor ?? \"#020617\" }),\n content: [\n column(\n { justify: \"center\", align: \"center\", padding: \"lg\", fill: true, ...opts.columnAttrs },\n opts.content ?? [\n blocks.heading(\"Your headline\", 1),\n blocks.paragraph(\"Subhead goes here.\"),\n blocks.paragraph(\"Add supporting details here.\"),\n ]\n ),\n ],\n };\n }\n case \"slide.imageCover\": {\n const opts = input.imageCoverOpts ?? {};\n const image = opts.image ?? {\n src: \"https://placehold.co/1600x900/png\",\n size: \"fill\",\n };\n const overlay = opts.overlay ?? [blocks.heading(\"Overlay title\", 1)];\n return {\n type: \"slide\",\n attrs: defaults.slide({ ...opts.slideAttrs, backgroundColor: opts.slideAttrs?.backgroundColor ?? \"#000000\" }),\n content: [\n column(\n { fill: true, padding: \"none\", ...opts.columnAttrs },\n [\n blocks.imageBlock(image),\n ...overlay,\n ]\n ),\n ],\n };\n }\n case \"slide.quote\": {\n const opts = input.quoteOpts ?? {};\n return {\n type: \"slide\",\n attrs: defaults.slide({ ...opts.slideAttrs, backgroundColor: opts.slideAttrs?.backgroundColor ?? \"#ffffff\" }),\n content: [\n column(\n { justify: \"center\", align: \"center\", padding: \"lg\", gap: \"md\", fill: true, ...opts.columnAttrs },\n [\n blocks.blockquote(\n opts.quote ?? [\n blocks.paragraph(\"Add your quote here.\"),\n blocks.paragraph(\"— Author\"),\n ]\n ),\n ]\n ),\n ],\n };\n }\n case \"slide.agenda\": {\n const opts = input.agendaOpts ?? {};\n return {\n type: \"slide\",\n attrs: defaults.slide({ ...opts.slideAttrs, backgroundColor: opts.slideAttrs?.backgroundColor ?? \"#ffffff\" }),\n content: [\n column(\n { padding: \"lg\", gap: \"lg\", ...opts.columnAttrs },\n [\n blocks.heading(\"Agenda\", 1),\n blocks.bulletList(opts.items ?? [\"Topic 1\", \"Topic 2\", \"Topic 3\"]),\n ]\n ),\n ],\n };\n }\n case \"slide.grid3\": {\n const opts = input.multiColOpts ?? { columns: [] };\n const cols =\n opts.columns.length > 0\n ? opts.columns\n : [\n { content: [blocks.heading(\"One\", 3), blocks.paragraph(\"Details.\")] },\n { content: [blocks.heading(\"Two\", 3), blocks.paragraph(\"Details.\")] },\n { content: [blocks.heading(\"Three\", 3), blocks.paragraph(\"Details.\")] },\n ];\n return {\n type: \"slide\",\n attrs: defaults.slide({ ...opts.slideAttrs, backgroundColor: opts.slideAttrs?.backgroundColor ?? \"#ffffff\" }),\n content: cols.map((c) => column({ padding: \"md\", gap: \"sm\", fill: true, ...c.attrs }, c.content ?? [])),\n };\n }\n case \"slide.grid4\": {\n const opts = input.multiColOpts ?? { columns: [] };\n const cols =\n opts.columns.length > 0\n ? opts.columns\n : [\n { content: [blocks.heading(\"One\", 4)] },\n { content: [blocks.heading(\"Two\", 4)] },\n { content: [blocks.heading(\"Three\", 4)] },\n { content: [blocks.heading(\"Four\", 4)] },\n ];\n return {\n type: \"slide\",\n attrs: defaults.slide({ ...opts.slideAttrs, backgroundColor: opts.slideAttrs?.backgroundColor ?? \"#ffffff\" }),\n content: cols.map((c) => column({ padding: \"md\", gap: \"sm\", fill: true, ...c.attrs }, c.content ?? [])),\n };\n }\n case \"slide.oneTwo\": {\n const opts = input.mediaTextOpts ?? {};\n return {\n type: \"slide\",\n attrs: defaults.slide({ ...opts.slideAttrs, backgroundColor: opts.slideAttrs?.backgroundColor ?? \"#ffffff\" }),\n content: [\n column({ padding: \"md\", gap: \"sm\", width: \"33%\", ...opts.textColumnAttrs }, opts.text ?? []),\n column({ padding: \"md\", gap: \"sm\", fill: true, ...opts.mediaColumnAttrs }, opts.media ?? []),\n ],\n };\n }\n case \"slide.twoOne\": {\n const opts = input.mediaTextOpts ?? {};\n return {\n type: \"slide\",\n attrs: defaults.slide({ ...opts.slideAttrs, backgroundColor: opts.slideAttrs?.backgroundColor ?? \"#ffffff\" }),\n content: [\n column({ padding: \"md\", gap: \"sm\", fill: true, ...opts.mediaColumnAttrs }, opts.media ?? []),\n column({ padding: \"md\", gap: \"sm\", width: \"33%\", ...opts.textColumnAttrs }, opts.text ?? []),\n ],\n };\n }\n case \"slide.oneTwoOne\": {\n const opts = input.multiColOpts ?? { columns: [] };\n const cols =\n opts.columns.length > 0\n ? opts.columns\n : [\n { content: [blocks.paragraph(\"Left\")] },\n { content: [blocks.paragraph(\"Center\")] },\n { content: [blocks.paragraph(\"Right\")] },\n ];\n return {\n type: \"slide\",\n attrs: defaults.slide({ ...opts.slideAttrs, backgroundColor: opts.slideAttrs?.backgroundColor ?? \"#ffffff\" }),\n content: cols.map((c, i) => column({ padding: \"md\", gap: \"sm\", width: i === 1 ? \"50%\" : \"25%\", ...c.attrs }, c.content ?? [])),\n };\n }\n case \"slide.textMedia\": {\n const opts = input.mediaTextOpts ?? {};\n return {\n type: \"slide\",\n attrs: defaults.slide({ ...opts.slideAttrs, backgroundColor: opts.slideAttrs?.backgroundColor ?? \"#ffffff\" }),\n content: [\n column({ padding: \"lg\", gap: \"sm\", fill: true, ...opts.textColumnAttrs }, opts.text ?? []),\n column({ padding: \"lg\", gap: \"sm\", fill: true, backgroundColor: \"#f8fafc\", ...opts.mediaColumnAttrs }, opts.media ?? []),\n ],\n };\n }\n case \"slide.mediaText\": {\n const opts = input.mediaTextOpts ?? {};\n return {\n type: \"slide\",\n attrs: defaults.slide({ ...opts.slideAttrs, backgroundColor: opts.slideAttrs?.backgroundColor ?? \"#ffffff\" }),\n content: [\n column({ padding: \"lg\", gap: \"sm\", fill: true, backgroundColor: \"#f8fafc\", ...opts.mediaColumnAttrs }, opts.media ?? []),\n column({ padding: \"lg\", gap: \"sm\", fill: true, ...opts.textColumnAttrs }, opts.text ?? []),\n ],\n };\n }\n case \"slide.stack2\": {\n const opts = input.stack2Opts ?? {};\n const top = opts.topColumns ?? [{ content: [blocks.heading(\"Title\", 1), blocks.paragraph(\"Subhead\")] }];\n const bottom = opts.bottomColumns ?? [\n { content: [blocks.paragraph(\"Left detail\")] },\n { content: [blocks.paragraph(\"Right detail\")] },\n ];\n return {\n type: \"slide\",\n attrs: defaults.slide({ ...opts.slideAttrs, backgroundColor: opts.slideAttrs?.backgroundColor ?? \"#ffffff\" }),\n content: [\n ...top.map((c) => column({ padding: \"md\", gap: \"sm\", ...c.attrs }, c.content ?? [])),\n ...bottom.map((c) => column({ padding: \"md\", gap: \"sm\", ...c.attrs }, c.content ?? [])),\n ],\n };\n }\n default:\n return slide(); // fallback\n }\n};\n\nexport const listTemplates = (): TemplatePreset[] => [\n \"slide.empty\",\n \"slide.singleCol\",\n \"slide.twoCol\",\n \"slide.hero\",\n \"slide.imageCover\",\n \"slide.quote\",\n \"slide.agenda\",\n \"slide.grid3\",\n \"slide.grid4\",\n \"slide.oneTwo\",\n \"slide.twoOne\",\n \"slide.oneTwoOne\",\n \"slide.textMedia\",\n \"slide.mediaText\",\n \"slide.stack2\",\n];\n\nexport const templatesV1Context = `\nBlockSlides templates API (v1)\n\nDocument Hierarchy:\ndoc → slide+ → block+\nSlides contain blocks directly - no mandatory row wrapper.\nAdjacent columns automatically form horizontal layouts via CSS.\n\nPresets:\n- slide({ content?, slideAttrs? }): slide with direct block content\n- slide.singleCol({ content?, slideAttrs?, columnAttrs? }): single column layout\n- slide.twoCol(column1, column2, slideAttrs?): two columns side by side\n- slide.threeCol(col1, col2, col3, slideAttrs?): three columns side by side\n- slide.fourCol(col1, col2, col3, col4, slideAttrs?): four columns side by side\n- slide.hero({ heroOpts }): centered content on dark background\n- slide.imageCover({ imageCoverOpts }): full-bleed image with overlay\n- slide.quote({ quoteOpts }): centered blockquote\n- slide.agenda({ agendaOpts }): title with bullet list\n- slide.grid3/grid4({ multiColOpts }): equal-width column grids\n- slide.oneTwo/twoOne({ mediaTextOpts }): asymmetric layouts\n- slide.textMedia/mediaText({ mediaTextOpts }): text and media columns\n- slide.stack2({ stack2Opts }): stacked column sections\n\nBase Block Attributes (available on ALL blocks):\n- align: \"left\" | \"center\" | \"right\" | \"stretch\" - horizontal alignment\n- justify: \"start\" | \"center\" | \"end\" | \"space-between\" - vertical distribution\n- padding: \"none\" | \"sm\" | \"md\" | \"lg\" - internal spacing (8px/16px/32px)\n- margin: \"none\" | \"sm\" | \"md\" | \"lg\" - external spacing\n- gap: \"none\" | \"sm\" | \"md\" | \"lg\" - space between children\n- backgroundColor: CSS color\n- backgroundImage: URL\n- borderRadius: \"none\" | \"sm\" | \"md\" | \"lg\" (4px/8px/16px)\n- border: CSS border\n- fill: boolean - fill available space\n- width: CSS width\n- height: CSS height\n\nBlock Helpers:\n- blocks.text(text, marks?)\n- blocks.heading(text, level?) - level 1-6\n- blocks.paragraph(text?)\n- blocks.bulletList([string | Block][])\n- blocks.codeBlock(code, language?)\n- blocks.horizontalRule()\n- blocks.hardBreak()\n- blocks.imageBlock({ src, size?, crop?, alt?, caption?, credit? })\n - size: \"fill\" | \"fit\" | \"natural\" - how image fills container\n - crop: \"center\" | \"top\" | \"bottom\" | \"left\" | \"right\" | corner positions\n- blocks.blockquote(content?)\n- blocks.listItem(content?)\n- blocks.youtube({ src?, start?, width?, height? })\n\nAgent/tool usage:\n- Use blocks.column(content, attrs) to create columns\n- Use blocks.columnGroup(columns) to group columns horizontally\n- Call createTemplate({ preset: \"slide.twoCol\", left: [...], right: [...] })\n- Wrap returned slides in { type: \"doc\", content: [/* slides here */] }\n\nNotes:\n- Size defaults to 16x9; override via slideAttrs.size\n- Use fill: true on columns to distribute space evenly\n- Use semantic spacing tokens (sm/md/lg) instead of raw pixel values\n`.trim();\n\nexport type { Block, SlideNode, TemplatePreset, CreateTemplateInput };\n","import { blocks, slide, type SlideNode } from \"./schemaBuilder\";\n\nexport type PresetKey =\n | \"tpl.titleAndSubheader\"\n | \"tpl.imageAndText\"\n | \"tpl.textAndImage\"\n | \"tpl.twoColumns\"\n | \"tpl.twoColumnsWithHeader\"\n | \"tpl.threeColumns\"\n | \"tpl.threeColumnsWithHeader\"\n | \"tpl.fourColumns\"\n | \"tpl.fourColumnsWithHeader\"\n | \"tpl.titleWithBullets\"\n | \"tpl.titleBulletsAndImage\"\n | \"tpl.twoImageColumns\"\n | \"tpl.accentLeft\"\n | \"tpl.accentRight\"\n | \"tpl.accentTop\"\n | \"tpl.accentRightFit\"\n | \"tpl.accentLeftFit\"\n | \"tpl.fullImage\";\n\ntype PresetTemplate = {\n key: PresetKey;\n label: string;\n description?: string;\n icon?: string;\n build: () => SlideNode;\n};\n\nconst titleAndSubheaderIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"18\" y=\"22\" width=\"60\" height=\"12\" rx=\"2\" fill=\"#D4D4D8\"/><rect x=\"26\" y=\"38\" width=\"44\" height=\"8\" rx=\"2\" fill=\"#E5E7EB\"/></svg>';\n\nconst titleAndSubheader: PresetTemplate = {\n key: \"tpl.titleAndSubheader\",\n label: \"Title & Subheader\",\n description: \"Centered title and subtitle for a new presentation\",\n icon: titleAndSubheaderIcon,\n build: () =>\n slide.singleCol({\n columnAttrs: {\n justify: \"center\",\n align: \"center\",\n gap: \"md\",\n padding: \"lg\",\n fill: true,\n backgroundColor: \"#ffffff\",\n },\n content: [\n blocks.heading(\"Lorem ipsum dolor sit amet\", 1),\n blocks.paragraph(\"Consectetur adipiscing elit. Sed do eiusmod tempor incididunt.\"),\n ],\n }),\n};\n\nconst imageTextIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"16\" y=\"26\" width=\"24\" height=\"16\" rx=\"2\" fill=\"#E5E7EB\"/><rect x=\"21\" y=\"31\" width=\"14\" height=\"6\" rx=\"1\" fill=\"#D4D4D8\"/><rect x=\"46\" y=\"24\" width=\"34\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"46\" y=\"33\" width=\"34\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"46\" y=\"41\" width=\"28\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/></svg>';\n\nconst textImageIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"18\" y=\"24\" width=\"34\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"18\" y=\"33\" width=\"34\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"18\" y=\"41\" width=\"28\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"56\" y=\"26\" width=\"24\" height=\"16\" rx=\"2\" fill=\"#E5E7EB\"/><rect x=\"61\" y=\"31\" width=\"14\" height=\"6\" rx=\"1\" fill=\"#D4D4D8\"/></svg>';\n\nconst twoColumnsIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"18\" y=\"22\" width=\"26\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"18\" y=\"31\" width=\"26\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"18\" y=\"39\" width=\"22\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"52\" y=\"22\" width=\"26\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"52\" y=\"31\" width=\"26\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"52\" y=\"39\" width=\"22\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/></svg>';\n\nconst twoColumnsHeaderIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"18\" y=\"18\" width=\"60\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"18\" y=\"28\" width=\"26\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"18\" y=\"37\" width=\"26\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"18\" y=\"45\" width=\"22\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"52\" y=\"28\" width=\"26\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"52\" y=\"37\" width=\"26\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"52\" y=\"45\" width=\"22\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/></svg>';\n\nconst threeColumnsIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"14\" y=\"22\" width=\"20\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"14\" y=\"31\" width=\"20\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"14\" y=\"39\" width=\"18\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"38\" y=\"22\" width=\"20\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"38\" y=\"31\" width=\"20\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"38\" y=\"39\" width=\"18\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"62\" y=\"22\" width=\"20\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"62\" y=\"31\" width=\"20\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"62\" y=\"39\" width=\"18\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/></svg>';\n\nconst threeColumnsHeaderIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"16\" y=\"16\" width=\"60\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"14\" y=\"28\" width=\"20\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"14\" y=\"37\" width=\"20\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"14\" y=\"45\" width=\"18\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"38\" y=\"28\" width=\"20\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"38\" y=\"37\" width=\"20\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"38\" y=\"45\" width=\"18\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"62\" y=\"28\" width=\"20\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"62\" y=\"37\" width=\"20\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"62\" y=\"45\" width=\"18\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/></svg>';\n\nconst fourColumnsHeaderIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"16\" y=\"16\" width=\"60\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"12\" y=\"28\" width=\"16\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"12\" y=\"37\" width=\"16\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"12\" y=\"45\" width=\"14\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"32\" y=\"28\" width=\"16\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"32\" y=\"37\" width=\"16\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"32\" y=\"45\" width=\"14\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"52\" y=\"28\" width=\"16\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"52\" y=\"37\" width=\"16\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"52\" y=\"45\" width=\"14\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"72\" y=\"28\" width=\"16\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"72\" y=\"37\" width=\"16\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"72\" y=\"45\" width=\"14\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/></svg>';\n\nconst fourColumnsIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"12\" y=\"22\" width=\"16\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"12\" y=\"31\" width=\"16\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"12\" y=\"39\" width=\"16\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"32\" y=\"22\" width=\"16\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"32\" y=\"31\" width=\"16\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"32\" y=\"39\" width=\"16\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"52\" y=\"22\" width=\"16\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"52\" y=\"31\" width=\"16\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"52\" y=\"39\" width=\"16\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"72\" y=\"22\" width=\"16\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"72\" y=\"31\" width=\"16\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"72\" y=\"39\" width=\"16\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/></svg>';\n\nconst fullImageIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"14\" y=\"14\" width=\"68\" height=\"44\" rx=\"3\" fill=\"#E5E7EB\"/><path d=\"M18 50 34 32l12 14 8-10 16 14H18Z\" fill=\"#D4D4D8\"/><circle cx=\"32\" cy=\"26\" r=\"4\" fill=\"#D4D4D8\"/></svg>';\n\nconst twoImageColumnsIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"16\" y=\"18\" width=\"64\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"16\" y=\"28\" width=\"28\" height=\"14\" rx=\"2\" fill=\"#E5E7EB\"/><rect x=\"52\" y=\"28\" width=\"28\" height=\"14\" rx=\"2\" fill=\"#E5E7EB\"/><rect x=\"16\" y=\"46\" width=\"20\" height=\"4\" rx=\"1\" fill=\"#D4D4D8\"/><rect x=\"52\" y=\"46\" width=\"20\" height=\"4\" rx=\"1\" fill=\"#D4D4D8\"/></svg>';\n\nconst accentLeftIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"12\" y=\"18\" width=\"20\" height=\"36\" rx=\"2\" fill=\"#EFEFEF\"/><rect x=\"18\" y=\"30\" width=\"8\" height=\"8\" rx=\"1\" fill=\"#CCCCCC\"/><rect x=\"36\" y=\"26\" width=\"42\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"36\" y=\"36\" width=\"38\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"36\" y=\"44\" width=\"32\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/></svg>';\n\nconst accentRightIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"64\" y=\"18\" width=\"20\" height=\"36\" rx=\"2\" fill=\"#EFEFEF\"/><rect x=\"70\" y=\"30\" width=\"8\" height=\"8\" rx=\"1\" fill=\"#CCCCCC\"/><rect x=\"16\" y=\"26\" width=\"42\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"16\" y=\"36\" width=\"38\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"16\" y=\"44\" width=\"32\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/></svg>';\n\nconst accentTopIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"14\" y=\"14\" width=\"68\" height=\"16\" rx=\"2\" fill=\"#EFEFEF\"/><rect x=\"44\" y=\"18\" width=\"8\" height=\"8\" rx=\"1\" fill=\"#CCCCCC\"/><rect x=\"18\" y=\"36\" width=\"60\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"18\" y=\"46\" width=\"56\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"18\" y=\"54\" width=\"48\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/></svg>';\n\nconst accentRightFitIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"64\" y=\"24\" width=\"16\" height=\"20\" rx=\"2\" fill=\"#E5E7EB\"/><rect x=\"68\" y=\"28\" width=\"8\" height=\"8\" rx=\"1\" fill=\"#CCCCCC\"/><rect x=\"14\" y=\"28\" width=\"44\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"14\" y=\"38\" width=\"40\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"14\" y=\"46\" width=\"32\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/></svg>';\n\nconst accentLeftFitIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"16\" y=\"24\" width=\"16\" height=\"20\" rx=\"2\" fill=\"#E5E7EB\"/><rect x=\"20\" y=\"28\" width=\"8\" height=\"8\" rx=\"1\" fill=\"#CCCCCC\"/><rect x=\"36\" y=\"28\" width=\"44\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><rect x=\"36\" y=\"38\" width=\"40\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/><rect x=\"36\" y=\"46\" width=\"32\" height=\"5\" rx=\"1.5\" fill=\"#E5E7EB\"/></svg>';\n\nconst titleBulletsIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"18\" y=\"20\" width=\"60\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><circle cx=\"22\" cy=\"32\" r=\"2\" fill=\"#D4D4D8\"/><rect x=\"28\" y=\"30\" width=\"44\" height=\"4\" rx=\"1\" fill=\"#E5E7EB\"/><circle cx=\"22\" cy=\"39\" r=\"2\" fill=\"#D4D4D8\"/><rect x=\"28\" y=\"37\" width=\"44\" height=\"4\" rx=\"1\" fill=\"#E5E7EB\"/><circle cx=\"22\" cy=\"46\" r=\"2\" fill=\"#D4D4D8\"/><rect x=\"28\" y=\"44\" width=\"36\" height=\"4\" rx=\"1\" fill=\"#E5E7EB\"/></svg>';\n\nconst titleBulletsImageIcon =\n '<svg width=\"96\" height=\"72\" viewBox=\"0 0 96 72\" fill=\"none\" xmlns=\"http://www.w3.org/2000/svg\"><rect x=\"6\" y=\"6\" width=\"84\" height=\"60\" rx=\"4\" stroke=\"#D4D4D8\" stroke-width=\"2\" fill=\"#F9FAFB\"/><rect x=\"16\" y=\"18\" width=\"64\" height=\"6\" rx=\"1.5\" fill=\"#D4D4D8\"/><circle cx=\"20\" cy=\"31\" r=\"2\" fill=\"#D4D4D8\"/><rect x=\"26\" y=\"29\" width=\"24\" height=\"4\" rx=\"1\" fill=\"#E5E7EB\"/><circle cx=\"20\" cy=\"38\" r=\"2\" fill=\"#D4D4D8\"/><rect x=\"26\" y=\"36\" width=\"24\" height=\"4\" rx=\"1\" fill=\"#E5E7EB\"/><circle cx=\"20\" cy=\"45\" r=\"2\" fill=\"#D4D4D8\"/><rect x=\"26\" y=\"43\" width=\"20\" height=\"4\" rx=\"1\" fill=\"#E5E7EB\"/><rect x=\"56\" y=\"31\" width=\"24\" height=\"16\" rx=\"2\" fill=\"#E5E7EB\"/><rect x=\"61\" y=\"36\" width=\"14\" height=\"6\" rx=\"1\" fill=\"#D4D4D8\"/></svg>';\nconst imageAndText: PresetTemplate = {\n key: \"tpl.imageAndText\",\n label: \"Image & Text\",\n description: \"Image on left, text on right\",\n icon: imageTextIcon,\n build: () =>\n slide.twoCol(\n blocks.column(\n [\n blocks.imageBlock({\n src: \"https://placehold.co/640x480/png\",\n size: \"fit\",\n }),\n ],\n {\n }\n ),\n blocks.column(\n [\n blocks.heading(\"Lorem ipsum dolor sit amet\", 2),\n blocks.paragraph(\"Consectetur adipiscing elit. Sed do eiusmod tempor incididunt.\"),\n blocks.paragraph(\"Ut enim ad minim veniam, quis nostrud exercitation.\"),\n ],\n {\n padding: \"lg\",\n gap: \"sm\",\n fill: true,\n }\n )\n ),\n};\n\nconst textAndImage: PresetTemplate = {\n key: \"tpl.textAndImage\",\n label: \"Text & Image\",\n description: \"Text on left, image on right\",\n icon: textImageIcon,\n build: () =>\n slide.twoCol(\n blocks.column(\n [\n blocks.heading(\"Lorem ipsum dolor sit amet\", 2),\n blocks.paragraph(\"Consectetur adipiscing elit. Sed do eiusmod tempor incididunt.\"),\n blocks.paragraph(\"Ut enim ad minim veniam, quis nostrud exercitation.\"),\n ],\n {\n justify: \"center\",\n padding: \"lg\",\n gap: \"sm\",\n fill: true,\n }\n ),\n blocks.column(\n [\n blocks.imageBlock({\n src: \"https://placehold.co/640x480/png\",\n size: \"fit\",\n }),\n ],\n {\n align: \"center\",\n justify: \"center\",\n padding: \"lg\",\n fill: true,\n }\n )\n ),\n};\n\nconst twoColumns: PresetTemplate = {\n key: \"tpl.twoColumns\",\n label: \"Two Columns\",\n description: \"Header above two balanced text columns\",\n icon: twoColumnsIcon,\n build: () => ({\n type: \"slide\",\n attrs: { id: \"slide-1\", size: \"16x9\" },\n content: [\n blocks.heading(\"Section heading\", 2),\n blocks.columnGroup([\n blocks.column(\n [\n blocks.paragraph(\"Lorem ipsum dolor sit amet.\"),\n blocks.paragraph(\"Consectetur adipiscing elit. Sed do eiusmod tempor incididunt.\"),\n blocks.paragraph(\"Ut enim ad minim veniam, quis nostrud exercitation.\"),\n ],\n { padding: \"md\", gap: \"sm\", fill: true }\n ),\n blocks.column(\n [\n blocks.paragraph(\"Lorem ipsum dolor sit amet.\"),\n blocks.paragraph(\"Consectetur adipiscing elit. Sed do eiusmod tempor incididunt.\"),\n blocks.paragraph(\"Ut enim ad minim veniam, quis nostrud exercitation.\"),\n ],\n { padding: \"md\", gap: \"sm\", fill: true }\n ),\n ]),\n ],\n }),\n};\n\nconst twoColumnsWithHeader: PresetTemplate = {\n key: \"tpl.twoColumnsWithHeader\",\n label: \"Two Columns + Header\",\n description: \"Header plus two columns, each with its own heading\",\n icon: twoColumnsHeaderIcon,\n build: () => ({\n type: \"slide\",\n attrs: { id: \"slide-1\", size: \"16x9\" },\n content: [\n blocks.heading(\"Section heading\", 2),\n blocks.columnGroup([\n blocks.column(\n [\n blocks.heading(\"Column heading\", 4),\n blocks.paragraph(\"Consectetur adipiscing elit. Sed do eiusmod tempor incididunt.\"),\n blocks.paragraph(\"Ut enim ad minim veniam, quis nostrud exercitation.\"),\n ],\n { padding: \"md\", gap: \"sm\", fill: true }\n ),\n blocks.column(\n [\n blocks.heading(\"Column heading\", 4),\n blocks.paragraph(\"Consectetur adipiscing elit. Sed do eiusmod tempor incididunt.\"),\n blocks.paragraph(\"Ut enim ad minim veniam, quis nostrud exercitation.\"),\n ],\n { padding: \"md\", gap: \"sm\", fill: true }\n ),\n ]),\n ],\n }),\n};\n\nconst threeColumns: PresetTemplate = {\n key: \"tpl.threeColumns\",\n label: \"Three Columns\",\n description: \"Balanced three-column text\",\n icon: threeColumnsIcon,\n build: () => ({\n type: \"slide\",\n attrs: { id: \"slide-1\", size: \"16x9\" },\n content: [\n blocks.columnGroup([\n blocks.column(\n [\n blocks.paragraph(\"Lorem ipsum dolor sit amet.\"),\n blocks.paragraph(\"Consectetur adipiscing elit. Sed do eiusmod tempor incididunt.\"),\n ],\n { padding: \"sm\", gap: \"sm\", fill: true }\n ),\n blocks.column(\n [\n blocks.paragraph(\"Ut enim ad minim veniam.\"),\n blocks.paragraph(\"Quis nostrud exercitation ullamco laboris.\"),\n ],\n { padding: \"sm\", gap: \"sm\", fill: true }\n ),\n blocks.column(\n [\n blocks.paragraph(\"Nisi ut aliquip ex ea commodo consequat.\"),\n blocks.paragraph(\"Duis aute irure dolor in reprehenderit.\"),\n ],\n { padding: \"sm\", gap: \"sm\", fill: true }\n ),\n ]),\n ],\n }),\n};\n\nconst threeColumnsWithHeader: PresetTemplate = {\n key: \"tpl.threeColumnsWithHeader\",\n label: \"Three Columns + Header\",\n description: \"Header plus three columns\",\n icon: threeColumnsHeaderIcon,\n build: () => ({\n type: \"slide\",\n attrs: { id: \"slide-1\", size: \"16x9\" },\n content: [\n blocks.heading(\"Section heading\", 2),\n blocks.columnGroup([\n blocks.column(\n [\n blocks.heading(\"Column heading\", 4),\n blocks.paragraph(\"Lorem ipsum dolor sit amet.\"),\n blocks.paragraph(\"Consectetur adipiscing elit. Sed do eiusmod tempor incididunt.\"),\n ],\n { padding: \"sm\", gap: \"sm\", fill: true }\n ),\n blocks.column(\n [\n blocks.heading(\"Column heading\", 4),\n blocks.paragraph(\"Ut enim ad minim veniam.\"),\n blocks.paragraph(\"Quis nostrud exercitation ullamco laboris.\"),\n ],\n { padding: \"sm\", gap: \"sm\", fill: true }\n ),\n blocks.column(\n [\n blocks.heading(\"Column heading\", 4),\n blocks.paragraph(\"Nisi ut aliquip ex ea commodo consequat.\"),\n blocks.paragraph(\"Duis aute irure dolor in reprehenderit.\"),\n ],\n { padding: \"sm\", gap: \"sm\", fill: true }\n ),\n ]),\n ],\n }),\n};\n\nconst fourColumnsWithHeader: PresetTemplate = {\n key: \"tpl.fourColumnsWithHeader\",\n label: \"Four Columns + Header\",\n description: \"Header plus four columns\",\n icon: fourColumnsHeaderIcon,\n build: () => ({\n type: \"slide\",\n attrs: { id: \"slide-1\", size: \"16x9\" },\n content: [\n blocks.heading(\"Section heading\", 2),\n blocks.columnGroup([\n blocks.column(\n [\n blocks.heading(\"Column heading\", 4),\n blocks.paragraph(\"Lorem ipsum dolor sit amet.\"),\n blocks.paragraph(\"Consectetur adipiscing elit.\"),\n ],\n { padding: \"sm\", gap: \"sm\", fill: true }\n ),\n blocks.column(\n [\n blocks.heading(\"Column heading\", 4),\n blocks.paragraph(\"Ut enim ad minim veniam.\"),\n blocks.paragraph(\"Quis nostrud exercitation ullamco laboris.\"),\n ],\n { padding: \"sm\", gap: \"sm\", fill: true }\n ),\n blocks.column(\n [\n blocks.heading(\"Column heading\", 4),\n blocks.paragraph(\"Nisi ut aliquip ex ea commodo consequat.\"),\n blocks.paragraph(\"Duis aute irure dolor in reprehenderit.\"),\n ],\n { padding: \"sm\", gap: \"sm\", fill: true }\n ),\n blocks.column(\n [\n blocks.heading(\"Column heading\", 4),\n blocks.paragraph(\"Excepteur sint occaecat cupidatat.\"),\n blocks.paragraph(\"Sunt in culpa qui officia.\"),\n ],\n { padding: \"sm\", gap: \"sm\", fill: true }\n ),\n ]),\n ],\n }),\n};\n\nconst fullImage: PresetTemplate = {\n key: \"tpl.fullImage\",\n label: \"Full Image\",\n description: \"Edge-to-edge image filling the slide\",\n icon: fullImageIcon,\n build: () =>\n slide.singleCol({\n columnAttrs: { padding: \"none\", fill: true, align: \"stretch\" },\n content: [\n blocks.imageBlock({\n src: \"https://placehold.co/1920x1080/png\",\n size: \"fill\",\n crop: \"center\",\n }),\n ],\n }),\n};\n\nconst fourColumns: PresetTemplate = {\n key: \"tpl.fourColumns\",\n label: \"Four Columns\",\n description: \"Balanced four-column text\",\n icon: fourColumnsIcon,\n build: () => ({\n type: \"slide\",\n attrs: { id: \"slide-1\", size: \"16x9\" },\n content: [\n blocks.columnGroup(\n Array.from({ length: 4 }).map(() =>\n blocks.column(\n [\n blocks.paragraph(\"Lorem ipsum dolor sit amet.\"),\n blocks.paragraph(\"Consectetur adipiscing elit.\"),\n ],\n { padding: \"sm\", gap: \"sm\", fill: true }\n )\n )\n ),\n ],\n }),\n};\n\nconst titleWithBullets: PresetTemplate = {\n key: \"tpl.titleWithBullets\",\n label: \"Title with Bullets\",\n description: \"Header and a bullet list\",\n icon: titleBulletsIcon,\n build: () =>\n slide.singleCol({\n columnAttrs: { padding: \"md\", gap: \"md\" },\n content: [\n blocks.heading(\"Lorem ipsum dolor sit amet\", 2),\n blocks.bulletList([\n \"Consectetur adipiscing elit.\",\n \"Sed do eiusmod tempor incididunt.\",\n \"Ut enim ad minim veniam.\",\n ]),\n ],\n }),\n};\n\nconst titleBulletsAndImage: PresetTemplate = {\n key: \"tpl.titleBulletsAndImage\",\n label: \"Title, Bullets & Image\",\n description: \"Title with bullets and an image\",\n icon: titleBulletsImageIcon,\n build: () =>\n slide.twoCol(\n blocks.column(\n [\n blocks.heading(\"Lorem ipsum dolor sit amet\", 2),\n blocks.bulletList([\n \"Consectetur adipiscing elit.\",\n \"Sed do eiusmod tempor incididunt.\",\n \"Ut enim ad minim veniam.\",\n ]),\n ],\n { padding: \"md\", gap: \"sm\", fill: true }\n ),\n blocks.column(\n [\n blocks.imageBlock({\n src: \"https://placehold.co/480x360/png\",\n size: \"fit\",\n }),\n ],\n {\n align: \"center\",\n justify: \"center\",\n padding: \"md\",\n fill: true,\n }\n )\n ),\n};\n\nconst accentLeft: PresetTemplate = {\n key: \"tpl.accentLeft\",\n label: \"Accent left\",\n description: \"Accent band with image on the left, text on the right\",\n icon: accentLeftIcon,\n build: () =>\n slide.twoCol(\n blocks.column(\n [\n blocks.imageBlock({\n src: \"https://placehold.co/320x240/png\",\n size: \"fill\",\n crop: \"center\",\n }),\n ],\n {\n backgroundColor: \"#f1f5f9\",\n padding: \"none\",\n fill: true,\n align: \"stretch\",\n }\n ),\n blocks.column(\n [\n blocks.heading(\"Accent left\", 3),\n blocks.paragraph(\"Short supporting copy goes here.\"),\n blocks.paragraph(\"Add one more line if needed.\"),\n ],\n { padding: \"md\", gap: \"sm\", fill: true, justify: \"center\" }\n )\n ),\n};\n\nconst accentRight: PresetTemplate = {\n key: \"tpl.accentRight\",\n label: \"Accent right\",\n description: \"Accent band with image on the right, text on the left\",\n icon: accentRightIcon,\n build: () =>\n slide.twoCol(\n blocks.column(\n [\n blocks.heading(\"Accent right\", 3),\n blocks.paragraph(\"Short supporting copy goes here.\"),\n blocks.paragraph(\"Add one more line if needed.\"),\n ],\n { padding: \"md\", gap: \"sm\", fill: true, justify: \"center\" }\n ),\n blocks.column(\n [\n blocks.imageBlock({\n src: \"https://placehold.co/320x240/png\",\n size: \"fill\",\n crop: \"center\",\n }),\n ],\n {\n backgroundColor: \"#f1f5f9\",\n padding: \"none\",\n fill: true,\n align: \"stretch\",\n }\n )\n ),\n};\n\nconst accentTop: PresetTemplate = {\n key: \"tpl.accentTop\",\n label: \"Accent top\",\n description: \"Accent band on top with image, text below\",\n icon: accentTopIcon,\n build: () =>\n ({\n type: \"slide\",\n attrs: { id: \"slide-1\", size: \"16x9\" },\n content: [\n {\n type: \"column\",\n attrs: { backgroundColor: \"#f1f5f9\", padding: \"none\", height: \"200px\", align: \"stretch\" },\n content: [\n blocks.imageBlock({\n src: \"https://placehold.co/1200x400/png\",\n size: \"fill\",\n crop: \"center\",\n }),\n ],\n },\n {\n type: \"column\",\n attrs: { padding: \"md\", gap: \"sm\", fill: true, justify: \"end\" },\n content: [\n blocks.heading(\"Accent top\", 3),\n blocks.paragraph(\"Short supporting copy goes here.\"),\n blocks.paragraph(\"Add one more line if needed.\"),\n ],\n },\n ],\n } as SlideNode),\n};\n\nconst accentRightFit: PresetTemplate = {\n key: \"tpl.accentRightFit\",\n label: \"Accent right (fit)\",\n description: \"Text with a tighter image card on the right\",\n icon: accentRightFitIcon,\n build: () =>\n slide.twoCol(\n blocks.column(\n [\n blocks.heading(\"Accent right (fit)\", 3),\n blocks.paragraph(\"Short supporting copy goes here.\"),\n blocks.paragraph(\"Add one more line if needed.\"),\n ],\n { padding: \"md\", gap: \"sm\", fill: true, justify: \"center\" }\n ),\n blocks.column(\n [\n blocks.column(\n [\n blocks.imageBlock({\n src: \"https://placehold.co/240x200/png\",\n size: \"fit\",\n }),\n ],\n { backgroundColor: \"#f1f5f9\", padding: \"md\", gap: \"sm\", borderRadius: \"lg\", align: \"center\" }\n ),\n ],\n {\n padding: \"md\",\n fill: true,\n justify: \"center\",\n align: \"center\",\n }\n )\n ),\n};\n\nconst accentLeftFit: PresetTemplate = {\n key: \"tpl.accentLeftFit\",\n label: \"Accent left (fit)\",\n description: \"Compact image card on the left, text on the right\",\n icon: accentLeftFitIcon,\n build: () =>\n slide.twoCol(\n blocks.column(\n [\n blocks.column(\n [\n blocks.imageBlock({\n src: \"https://placehold.co/240x200/png\",\n size: \"fit\",\n }),\n ],\n { backgroundColor: \"#f1f5f9\", padding: \"md\", gap: \"sm\", borderRadius: \"lg\", align: \"center\" }\n ),\n ],\n {\n padding: \"md\",\n fill: true,\n justify: \"center\",\n align: \"center\",\n }\n ),\n blocks.column(\n [\n blocks.heading(\"Accent left (fit)\", 3),\n blocks.paragraph(\"Short supporting copy goes here.\"),\n blocks.paragraph(\"Add one more line if needed.\"),\n ],\n { padding: \"md\", gap: \"sm\", fill: true, justify: \"center\" }\n )\n ),\n};\n\nconst twoImageColumns: PresetTemplate = {\n key: \"tpl.twoImageColumns\",\n label: \"2 image columns\",\n description: \"Header with two image cards\",\n icon: twoImageColumnsIcon,\n build: () => ({\n type: \"slide\",\n attrs: { id: \"slide-1\", size: \"16x9\" },\n content: [\n blocks.heading(\"Images\", 2),\n blocks.columnGroup([\n blocks.column(\n [\n blocks.imageBlock({\n src: \"https://placehold.co/640x360/png\",\n size: \"fit\",\n }),\n blocks.heading(\"Image title\", 4),\n blocks.paragraph(\"Short supporting copy goes here.\"),\n ],\n { padding: \"md\", gap: \"sm\", fill: true }\n ),\n blocks.column(\n [\n blocks.imageBlock({\n src: \"https://placehold.co/640x360/png\",\n size: \"fit\",\n }),\n blocks.heading(\"Image title\", 4),\n blocks.paragraph(\"Short supporting copy goes here.\"),\n ],\n { padding: \"md\", gap: \"sm\", fill: true }\n ),\n ]),\n ],\n }),\n};\n\nconst registry: Record<PresetKey, PresetTemplate> = {\n \"tpl.titleAndSubheader\": titleAndSubheader,\n \"tpl.accentLeft\": accentLeft,\n \"tpl.accentRight\": accentRight,\n \"tpl.accentTop\": accentTop,\n \"tpl.accentRightFit\": accentRightFit,\n \"tpl.accentLeftFit\": accentLeftFit,\n \"tpl.imageAndText\": imageAndText,\n \"tpl.textAndImage\": textAndImage,\n \"tpl.twoColumns\": twoColumns,\n \"tpl.twoColumnsWithHeader\": twoColumnsWithHeader,\n \"tpl.threeColumns\": threeColumns,\n \"tpl.threeColumnsWithHeader\": threeColumnsWithHeader,\n \"tpl.fourColumns\": fourColumns,\n \"tpl.fourColumnsWithHeader\": fourColumnsWithHeader,\n \"tpl.titleWithBullets\": titleWithBullets,\n \"tpl.titleBulletsAndImage\": titleBulletsAndImage,\n \"tpl.fullImage\": fullImage,\n \"tpl.twoImageColumns\": twoImageColumns,\n\n};\n\nexport const listPresetTemplates = (): PresetTemplate[] => Object.values(registry);\n\nexport const buildPresetTemplate = (key: PresetKey): SlideNode => registry[key].build();\n\nexport type { PresetTemplate };\n"],"mappings":"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","names":["v1_exports","v1_exports","v1_exports","v1_exports","slide","slide","column","image","_a","slide"]}
|