@blockslides/ai-context 0.1.5 → 0.2.0
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 +1179 -3
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +2880 -39
- package/dist/index.d.ts +2880 -39
- package/dist/index.js +1177 -2
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/contexts/v1/editingRules.ts +2 -1
- package/src/index.ts +1 -0
- package/src/templates/v1/index.ts +2 -0
- package/src/templates/v1/presetTemplateBuilder.ts +739 -0
- package/src/templates/v1/schemaBuilder.ts +672 -0
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/contexts/v1/index.ts","../src/contexts/v1/core.ts","../src/contexts/v1/output.fullDocument.ts","../src/contexts/v1/imageBlock.ts","../src/contexts/v1/row.ts","../src/contexts/v1/column.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/examples/v1/index.ts","../src/examples/v1/slides.ts","../src/examples/v1/flyers.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/row.schema.json","../src/schemas/v1/column.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/recipes/v1/index.ts","../src/recipes/v1/createSlide.ts","../src/recipes/v1/addTwoColumns.ts","../src/recipes/v1/editImageToCover.ts"],"sourcesContent":["export * as contextsV1 from \"./contexts/v1\";\nexport * as examplesV1 from \"./examples/v1\";\nexport * as bundlesV1 from \"./bundles/v1\";\nexport * as recipesV1 from \"./recipes/v1\";\nexport * as schemasV1 from \"./schemas/v1\";\nexport * from \"./types/v1\";\n\n","export { core } from \"./core\";\nexport { fullDocument } from \"./output.fullDocument\";\nexport { imageBlock } from \"./imageBlock\";\nexport { row } from \"./row\";\nexport { column } from \"./column\";\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: row[] }\n- row: { type: \"row\", attrs?, content: column[] | block[] }\n- column: { type: \"column\", attrs?, content: (block | row)[] }\n- block: includes nodes like paragraph, heading, imageBlock, etc.\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</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\nAttrs:\n- src (required): string (URL)\n- alt (optional): string\n- caption (optional): string\n- credit (optional): string\n- layout (optional): \"cover\" | \"contain\" | \"fill\" | \"focus\" | \"pattern\"\n- align (optional): \"left\" | \"center\" | \"right\" | \"stretch\" (default \"center\")\n- width (optional): number (px) or string (\"%\"/\"px\")\n- height (optional): number (px) or string (\"%\"/\"px\")\n- fullBleed (optional): boolean (removes radius; stretches width)\n- assetId (optional): string\n- focalX, focalY (optional): 0–100; spotlight position (when relevant)\n\nBehavior:\n- Numbers for width/height are interpreted as pixels.\n- layout:\n - cover: Fill container; crop edges as needed.\n - contain: Fit entirely; may letterbox.\n - fill: Stretch to container (may distort).\n - focus: Cover + radial spotlight at focalX/focalY.\n - pattern: Hide <img>; use tiled background (from src).\n- Do not set unknown attributes. Preserve existing valid attrs.\n</imageBlock>\n`.trim();\n\n\n","export const row = `\n<row>\nNode: row\nAttrs:\n- layout (optional): \"\", \"1\", \"1-1\", \"2-1\", \"1-2\", \"1-1-1\", \"2-1-1\", \"1-2-1\", \"1-1-2\", \"1-1-1-1\"\n- className (optional): string (CSS classes)\n- backgroundMode (optional): \"none\" | \"color\" | \"image\" | \"imageOverlay\"\n- backgroundColor (optional): string (CSS color for row background)\n- backgroundImage (optional): string (URL for row-level background image)\n- backgroundOverlayColor (optional): string (overlay color when using imageOverlay)\n- backgroundOverlayOpacity (optional): number (0–1, overlay opacity)\n\nSemantics:\n- Fractions determine relative column flex:\n - 1-1: two equal columns\n - 2-1: first column is double width\n - 1-2: second column is double width\n - 1-1-1: three equal columns\n - 1-1-1-1: four equal columns\n- Empty layout (\"\", \"1\") acts as a single full-width column.\n- Use row backgrounds for horizontal bands (e.g., header strip) instead of attaching everything to the slide.\n</row>\n`.trim();\n\n\n","export const column = `\n<column>\nNode: column\nAttrs:\n- className (optional): string\n- contentMode (optional): \"default\" (future-friendly)\n- verticalAlign (optional): \"top\" | \"center\" | \"bottom\" (default \"top\")\n- horizontalAlign (optional): \"left\" | \"center\" | \"right\" | \"stretch\" (default \"left\")\n- padding (optional): \"none\" (future-friendly)\n- backgroundMode (optional): \"none\" | \"color\" | \"image\" | \"imageOverlay\"\n- backgroundColor (optional): string (CSS color for the column background)\n- backgroundImage (optional): string (URL for column-level background image)\n- backgroundOverlayColor (optional): string (overlay color when using imageOverlay)\n- backgroundOverlayOpacity (optional): number (0–1, overlay opacity)\n\nNotes:\n- Use className for spacing, colors, typography (e.g., Tailwind).\n- Keep nesting shallow; columns can contain rows or blocks as needed.\n</column>\n`.trim();\n\n\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 contains one or more rows.\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</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 > row > 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, rows, columns)>\n- Prefer structured background attrs over raw Tailwind bg-[url(...)] when setting background images.\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 row-level backgrounds (row.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/row/column and layer additional visuals as imageBlock nodes.\n</Backgrounds (slides, rows, 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\nAttrs:\n- HTML-only; no required JSON attrs beyond optional styling such as className.\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 row.\n- Styling should be applied via className on the surrounding column/slide, not by inventing new attrs here.\n</blockquote>\n`.trim();\n\n\n","export const bulletList = `\n<bulletList>\nNode: bulletList\nAttrs:\n- HTML-only; no required JSON attrs beyond optional styling such as className.\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 blockquote.\n- Do not use bulletList as a top-level child of doc; it belongs inside a column/row structure.\n</bulletList>\n`.trim();\n\n\n","export const codeBlock = `\n<codeBlock>\nNode: codeBlock\nAttrs:\n- language (optional): string | null (e.g., \"js\", \"ts\", \"python\").\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\nAttrs:\n- HTML-only; no JSON attrs beyond optional styling via surrounding layout.\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 (for example, between rows of text).\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\nAttrs:\n- level (required): 1 | 2 | 3 | 4 | 5 | 6.\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- Do not invent other attrs; typography/styling should come from className on columns/slides.\n</heading>\n`.trim();\n\n\n","export const paragraph = `\n<paragraph>\nNode: paragraph\nAttrs:\n- HTML-only; no structured JSON attrs beyond optional styling such as className.\n\nContent:\n- Inline content (text with marks, inline nodes such as image or hardBreak).\n\nSemantics:\n- Default text block inside columns and rows.\n- Multiple paragraphs can be stacked within the same column to create vertical rhythm.\n</paragraph>\n`.trim();\n\n\n","export const youtube = `\n<youtube>\nNode: youtube\nAttrs:\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\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 row; keep other text in separate paragraphs/columns.\n- Do not embed raw <iframe> HTML directly; always use the youtube node with attrs.\n</youtube>\n`.trim();\n\n\n","export { slides } from \"./slides\";\nexport { flyers } from \"./flyers\";\n\n\n","export const slides = `\nExamples: Slides (full-document output)\n\n{\n \"type\": \"doc\",\n \"content\": [\n {\n \"type\": \"slide\",\n \"attrs\": { \"id\": \"intro\", \"size\": \"16x9\" },\n \"content\": [\n {\n \"type\": \"row\",\n \"attrs\": { \"layout\": \"1-1\" },\n \"content\": [\n { \"type\": \"column\", \"content\": [\n { \"type\": \"heading\", \"attrs\": { \"level\": 2 }, \"content\": [{ \"type\": \"text\", \"text\": \"Welcome\" }] }\n ]},\n { \"type\": \"column\", \"content\": [\n { \"type\": \"imageBlock\", \"attrs\": { \"src\": \"https://picsum.photos/seed/welcome/1200/800\", \"layout\": \"cover\", \"align\": \"center\" } }\n ]}\n ]\n }\n ]\n }\n ]\n}\n\n/* more-slide-examples to be added here */\n`.trim();\n\n\n","export const flyers = `\nExamples: Flyers (A4 slides; full-document output)\n\n{\n \"type\": \"doc\",\n \"content\": [\n {\n \"type\": \"slide\",\n \"attrs\": { \"id\": \"a4-flyer\", \"size\": \"a4-portrait\", \"className\": \"bg-white text-slate-900\" },\n \"content\": [\n {\n \"type\": \"row\",\n \"attrs\": { \"layout\": \"1\" },\n \"content\": [\n { \"type\": \"column\", \"content\": [\n { \"type\": \"heading\", \"attrs\": { \"level\": 2 }, \"content\": [{ \"type\": \"text\", \"text\": \"Event Title\" }] },\n { \"type\": \"paragraph\", \"content\": [{ \"type\": \"text\", \"text\": \"Date · Location\" }] },\n { \"type\": \"imageBlock\", \"attrs\": { \"src\": \"https://picsum.photos/seed/a4/1600/1000\", \"layout\": \"contain\", \"align\": \"center\", \"height\": 320 } }\n ]}\n ]\n }\n ]\n }\n ]\n}\n\n/* more-flyer-examples to be added here */\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, row, column, style } from \"../../contexts/v1\";\n\nexport const minimalCreate = [core, fullDocument, slide, row, 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.row,\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 row } from \"./row.schema.json\";\nexport { default as column } from \"./column.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 \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"imageBlock\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"src\": { \"type\": \"string\", \"minLength\": 1 },\n \"alt\": { \"type\": \"string\" },\n \"caption\": { \"type\": \"string\" },\n \"credit\": { \"type\": \"string\" },\n \"layout\": { \"enum\": [\"cover\", \"contain\", \"fill\", \"focus\", \"pattern\", null] },\n \"align\": { \"enum\": [\"left\", \"center\", \"right\", \"stretch\", null] },\n \"width\": { \"type\": [\"number\", \"string\", \"null\"] },\n \"height\": { \"type\": [\"number\", \"string\", \"null\"] },\n \"fullBleed\": { \"type\": \"boolean\" },\n \"assetId\": { \"type\": [\"string\", \"null\"] },\n \"focalX\": { \"type\": [\"number\", \"null\"], \"minimum\": 0, \"maximum\": 100 },\n \"focalY\": { \"type\": [\"number\", \"null\"], \"minimum\": 0, \"maximum\": 100 }\n },\n \"required\": [\"src\"],\n \"additionalProperties\": false\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n\n\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"row\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"row\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"layout\": {\n \"enum\": [\"\", \"1\", \"1-1\", \"2-1\", \"1-2\", \"1-1-1\", \"2-1-1\", \"1-2-1\", \"1-1-2\", \"1-1-1-1\", null]\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 },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n\n\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"column\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"column\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"className\": { \"type\": [\"string\", \"null\"] },\n \"contentMode\": { \"enum\": [\"default\", null] },\n \"verticalAlign\": { \"enum\": [\"top\", \"center\", \"bottom\", null] },\n \"horizontalAlign\": { \"enum\": [\"left\", \"center\", \"right\", \"stretch\", null] },\n \"padding\": { \"enum\": [\"none\", 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 },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n\n\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"slide\",\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 },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n\n\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"blockquote\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"blockquote\" },\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\": \"bulletList\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"bulletList\" },\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\": \"codeBlock\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"codeBlock\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"language\": { \"type\": [\"string\", \"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\": \"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 \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"horizontalRule\" },\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\": \"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 \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"heading\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"level\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"maximum\": 6\n }\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\": \"paragraph\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"paragraph\" },\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\": \"youtube\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"youtube\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"src\": { \"type\": [\"string\", \"null\"] },\n \"start\": { \"type\": \"number\" },\n \"width\": { \"type\": \"number\" },\n \"height\": { \"type\": \"number\" }\n },\n \"additionalProperties\": true\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n\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.row,\n ctx.column,\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 { createSlide } from \"./createSlide\";\nexport { addTwoColumns } from \"./addTwoColumns\";\nexport { editImageToCover } from \"./editImageToCover\";\n\n\n","import { core, fullDocument, slide, row, column } from \"../../contexts/v1\";\n\nexport const createSlide = [\n core,\n fullDocument,\n slide,\n row,\n column,\n `\nReturn a single JSON document that creates one 16x9 slide with a 1-1 row:\n{\n \"type\": \"doc\",\n \"content\": [\n {\n \"type\": \"slide\",\n \"attrs\": { \"size\": \"16x9\" },\n \"content\": [\n { \"type\": \"row\", \"attrs\": { \"layout\": \"1-1\" }, \"content\": [\n { \"type\": \"column\", \"content\": [{ \"type\": \"paragraph\", \"content\": [{ \"type\": \"text\", \"text\": \"Left\" }] }] },\n { \"type\": \"column\", \"content\": [{ \"type\": \"paragraph\", \"content\": [{ \"type\": \"text\", \"text\": \"Right\" }] }] }\n ] }\n ]\n }\n ]\n}\n`.trim(),\n].join(\"\\n\\n\");\n\n\n","import { core, fullDocument, row, column } from \"../../contexts/v1\";\n\nexport const addTwoColumns = [\n core,\n fullDocument,\n row,\n column,\n `\nReturn a full document where the first slide contains a row with layout \"1-1\" and two columns with simple text paragraphs.\n`.trim(),\n].join(\"\\n\\n\");\n\n\n","import { core, fullDocument, imageBlock, editingRules } from \"../../contexts/v1\";\n\nexport const editImageToCover = [\n core,\n fullDocument,\n imageBlock,\n editingRules,\n `\nUpdate an existing imageBlock on the first slide so it uses layout \"cover\" and align \"center\". Preserve all other attributes.\n`.trim(),\n].join(\"\\n\\n\");\n\n\n"],"mappings":"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","names":["v1_exports","v1_exports","v1_exports","v1_exports","v1_exports","v1_exports"]}
|
|
1
|
+
{"version":3,"sources":["../src/index.ts","../src/contexts/v1/index.ts","../src/contexts/v1/core.ts","../src/contexts/v1/output.fullDocument.ts","../src/contexts/v1/imageBlock.ts","../src/contexts/v1/row.ts","../src/contexts/v1/column.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/examples/v1/index.ts","../src/examples/v1/slides.ts","../src/examples/v1/flyers.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/row.schema.json","../src/schemas/v1/column.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/recipes/v1/index.ts","../src/recipes/v1/createSlide.ts","../src/recipes/v1/addTwoColumns.ts","../src/recipes/v1/editImageToCover.ts","../src/templates/v1/index.ts","../src/templates/v1/schemaBuilder.ts","../src/templates/v1/presetTemplateBuilder.ts"],"sourcesContent":["export * as contextsV1 from \"./contexts/v1\";\nexport * as examplesV1 from \"./examples/v1\";\nexport * as bundlesV1 from \"./bundles/v1\";\nexport * as recipesV1 from \"./recipes/v1\";\nexport * as schemasV1 from \"./schemas/v1\";\nexport * as templatesV1 from \"./templates/v1\";\nexport * from \"./types/v1\";\n\n","export { core } from \"./core\";\nexport { fullDocument } from \"./output.fullDocument\";\nexport { imageBlock } from \"./imageBlock\";\nexport { row } from \"./row\";\nexport { column } from \"./column\";\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: row[] }\n- row: { type: \"row\", attrs?, content: column[] | block[] }\n- column: { type: \"column\", attrs?, content: (block | row)[] }\n- block: includes nodes like paragraph, heading, imageBlock, etc.\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</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\nAttrs:\n- src (required): string (URL)\n- alt (optional): string\n- caption (optional): string\n- credit (optional): string\n- layout (optional): \"cover\" | \"contain\" | \"fill\" | \"focus\" | \"pattern\"\n- align (optional): \"left\" | \"center\" | \"right\" | \"stretch\" (default \"center\")\n- width (optional): number (px) or string (\"%\"/\"px\")\n- height (optional): number (px) or string (\"%\"/\"px\")\n- fullBleed (optional): boolean (removes radius; stretches width)\n- assetId (optional): string\n- focalX, focalY (optional): 0–100; spotlight position (when relevant)\n\nBehavior:\n- Numbers for width/height are interpreted as pixels.\n- layout:\n - cover: Fill container; crop edges as needed.\n - contain: Fit entirely; may letterbox.\n - fill: Stretch to container (may distort).\n - focus: Cover + radial spotlight at focalX/focalY.\n - pattern: Hide <img>; use tiled background (from src).\n- Do not set unknown attributes. Preserve existing valid attrs.\n</imageBlock>\n`.trim();\n\n\n","export const row = `\n<row>\nNode: row\nAttrs:\n- layout (optional): \"\", \"1\", \"1-1\", \"2-1\", \"1-2\", \"1-1-1\", \"2-1-1\", \"1-2-1\", \"1-1-2\", \"1-1-1-1\"\n- className (optional): string (CSS classes)\n- backgroundMode (optional): \"none\" | \"color\" | \"image\" | \"imageOverlay\"\n- backgroundColor (optional): string (CSS color for row background)\n- backgroundImage (optional): string (URL for row-level background image)\n- backgroundOverlayColor (optional): string (overlay color when using imageOverlay)\n- backgroundOverlayOpacity (optional): number (0–1, overlay opacity)\n\nSemantics:\n- Fractions determine relative column flex:\n - 1-1: two equal columns\n - 2-1: first column is double width\n - 1-2: second column is double width\n - 1-1-1: three equal columns\n - 1-1-1-1: four equal columns\n- Empty layout (\"\", \"1\") acts as a single full-width column.\n- Use row backgrounds for horizontal bands (e.g., header strip) instead of attaching everything to the slide.\n</row>\n`.trim();\n\n\n","export const column = `\n<column>\nNode: column\nAttrs:\n- className (optional): string\n- contentMode (optional): \"default\" (future-friendly)\n- verticalAlign (optional): \"top\" | \"center\" | \"bottom\" (default \"top\")\n- horizontalAlign (optional): \"left\" | \"center\" | \"right\" | \"stretch\" (default \"left\")\n- padding (optional): \"none\" (future-friendly)\n- backgroundMode (optional): \"none\" | \"color\" | \"image\" | \"imageOverlay\"\n- backgroundColor (optional): string (CSS color for the column background)\n- backgroundImage (optional): string (URL for column-level background image)\n- backgroundOverlayColor (optional): string (overlay color when using imageOverlay)\n- backgroundOverlayOpacity (optional): number (0–1, overlay opacity)\n\nNotes:\n- Use className for spacing, colors, typography (e.g., Tailwind).\n- Keep nesting shallow; columns can contain rows or blocks as needed.\n</column>\n`.trim();\n\n\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 contains one or more rows.\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</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 > row > 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, rows, 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 row-level backgrounds (row.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/row/column and layer additional visuals as imageBlock nodes.\n</Backgrounds (slides, rows, 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\nAttrs:\n- HTML-only; no required JSON attrs beyond optional styling such as className.\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 row.\n- Styling should be applied via className on the surrounding column/slide, not by inventing new attrs here.\n</blockquote>\n`.trim();\n\n\n","export const bulletList = `\n<bulletList>\nNode: bulletList\nAttrs:\n- HTML-only; no required JSON attrs beyond optional styling such as className.\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 blockquote.\n- Do not use bulletList as a top-level child of doc; it belongs inside a column/row structure.\n</bulletList>\n`.trim();\n\n\n","export const codeBlock = `\n<codeBlock>\nNode: codeBlock\nAttrs:\n- language (optional): string | null (e.g., \"js\", \"ts\", \"python\").\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\nAttrs:\n- HTML-only; no JSON attrs beyond optional styling via surrounding layout.\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 (for example, between rows of text).\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\nAttrs:\n- level (required): 1 | 2 | 3 | 4 | 5 | 6.\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- Do not invent other attrs; typography/styling should come from className on columns/slides.\n</heading>\n`.trim();\n\n\n","export const paragraph = `\n<paragraph>\nNode: paragraph\nAttrs:\n- HTML-only; no structured JSON attrs beyond optional styling such as className.\n\nContent:\n- Inline content (text with marks, inline nodes such as image or hardBreak).\n\nSemantics:\n- Default text block inside columns and rows.\n- Multiple paragraphs can be stacked within the same column to create vertical rhythm.\n</paragraph>\n`.trim();\n\n\n","export const youtube = `\n<youtube>\nNode: youtube\nAttrs:\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\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 row; keep other text in separate paragraphs/columns.\n- Do not embed raw <iframe> HTML directly; always use the youtube node with attrs.\n</youtube>\n`.trim();\n\n\n","export { slides } from \"./slides\";\nexport { flyers } from \"./flyers\";\n\n\n","export const slides = `\nExamples: Slides (full-document output)\n\n{\n \"type\": \"doc\",\n \"content\": [\n {\n \"type\": \"slide\",\n \"attrs\": { \"id\": \"intro\", \"size\": \"16x9\" },\n \"content\": [\n {\n \"type\": \"row\",\n \"attrs\": { \"layout\": \"1-1\" },\n \"content\": [\n { \"type\": \"column\", \"content\": [\n { \"type\": \"heading\", \"attrs\": { \"level\": 2 }, \"content\": [{ \"type\": \"text\", \"text\": \"Welcome\" }] }\n ]},\n { \"type\": \"column\", \"content\": [\n { \"type\": \"imageBlock\", \"attrs\": { \"src\": \"https://picsum.photos/seed/welcome/1200/800\", \"layout\": \"cover\", \"align\": \"center\" } }\n ]}\n ]\n }\n ]\n }\n ]\n}\n\n/* more-slide-examples to be added here */\n`.trim();\n\n\n","export const flyers = `\nExamples: Flyers (A4 slides; full-document output)\n\n{\n \"type\": \"doc\",\n \"content\": [\n {\n \"type\": \"slide\",\n \"attrs\": { \"id\": \"a4-flyer\", \"size\": \"a4-portrait\", \"className\": \"bg-white text-slate-900\" },\n \"content\": [\n {\n \"type\": \"row\",\n \"attrs\": { \"layout\": \"1\" },\n \"content\": [\n { \"type\": \"column\", \"content\": [\n { \"type\": \"heading\", \"attrs\": { \"level\": 2 }, \"content\": [{ \"type\": \"text\", \"text\": \"Event Title\" }] },\n { \"type\": \"paragraph\", \"content\": [{ \"type\": \"text\", \"text\": \"Date · Location\" }] },\n { \"type\": \"imageBlock\", \"attrs\": { \"src\": \"https://picsum.photos/seed/a4/1600/1000\", \"layout\": \"contain\", \"align\": \"center\", \"height\": 320 } }\n ]}\n ]\n }\n ]\n }\n ]\n}\n\n/* more-flyer-examples to be added here */\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, row, column, style } from \"../../contexts/v1\";\n\nexport const minimalCreate = [core, fullDocument, slide, row, 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.row,\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 row } from \"./row.schema.json\";\nexport { default as column } from \"./column.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 \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"imageBlock\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"src\": { \"type\": \"string\", \"minLength\": 1 },\n \"alt\": { \"type\": \"string\" },\n \"caption\": { \"type\": \"string\" },\n \"credit\": { \"type\": \"string\" },\n \"layout\": { \"enum\": [\"cover\", \"contain\", \"fill\", \"focus\", \"pattern\", null] },\n \"align\": { \"enum\": [\"left\", \"center\", \"right\", \"stretch\", null] },\n \"width\": { \"type\": [\"number\", \"string\", \"null\"] },\n \"height\": { \"type\": [\"number\", \"string\", \"null\"] },\n \"fullBleed\": { \"type\": \"boolean\" },\n \"assetId\": { \"type\": [\"string\", \"null\"] },\n \"focalX\": { \"type\": [\"number\", \"null\"], \"minimum\": 0, \"maximum\": 100 },\n \"focalY\": { \"type\": [\"number\", \"null\"], \"minimum\": 0, \"maximum\": 100 }\n },\n \"required\": [\"src\"],\n \"additionalProperties\": false\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n\n\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"row\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"row\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"layout\": {\n \"enum\": [\"\", \"1\", \"1-1\", \"2-1\", \"1-2\", \"1-1-1\", \"2-1-1\", \"1-2-1\", \"1-1-2\", \"1-1-1-1\", null]\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 },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n\n\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"column\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"column\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"className\": { \"type\": [\"string\", \"null\"] },\n \"contentMode\": { \"enum\": [\"default\", null] },\n \"verticalAlign\": { \"enum\": [\"top\", \"center\", \"bottom\", null] },\n \"horizontalAlign\": { \"enum\": [\"left\", \"center\", \"right\", \"stretch\", null] },\n \"padding\": { \"enum\": [\"none\", 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 },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n\n\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"slide\",\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 },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n\n\n","{\n \"$schema\": \"https://json-schema.org/draft/2020-12/schema\",\n \"title\": \"blockquote\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"blockquote\" },\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\": \"bulletList\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"bulletList\" },\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\": \"codeBlock\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"codeBlock\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"language\": { \"type\": [\"string\", \"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\": \"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 \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"horizontalRule\" },\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\": \"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 \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"heading\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"level\": {\n \"type\": \"integer\",\n \"minimum\": 1,\n \"maximum\": 6\n }\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\": \"paragraph\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"paragraph\" },\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\": \"youtube\",\n \"type\": \"object\",\n \"properties\": {\n \"type\": { \"const\": \"youtube\" },\n \"attrs\": {\n \"type\": \"object\",\n \"properties\": {\n \"src\": { \"type\": [\"string\", \"null\"] },\n \"start\": { \"type\": \"number\" },\n \"width\": { \"type\": \"number\" },\n \"height\": { \"type\": \"number\" }\n },\n \"additionalProperties\": true\n }\n },\n \"required\": [\"type\"],\n \"additionalProperties\": false\n}\n\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.row,\n ctx.column,\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 { createSlide } from \"./createSlide\";\nexport { addTwoColumns } from \"./addTwoColumns\";\nexport { editImageToCover } from \"./editImageToCover\";\n\n\n","import { core, fullDocument, slide, row, column } from \"../../contexts/v1\";\n\nexport const createSlide = [\n core,\n fullDocument,\n slide,\n row,\n column,\n `\nReturn a single JSON document that creates one 16x9 slide with a 1-1 row:\n{\n \"type\": \"doc\",\n \"content\": [\n {\n \"type\": \"slide\",\n \"attrs\": { \"size\": \"16x9\" },\n \"content\": [\n { \"type\": \"row\", \"attrs\": { \"layout\": \"1-1\" }, \"content\": [\n { \"type\": \"column\", \"content\": [{ \"type\": \"paragraph\", \"content\": [{ \"type\": \"text\", \"text\": \"Left\" }] }] },\n { \"type\": \"column\", \"content\": [{ \"type\": \"paragraph\", \"content\": [{ \"type\": \"text\", \"text\": \"Right\" }] }] }\n ] }\n ]\n }\n ]\n}\n`.trim(),\n].join(\"\\n\\n\");\n\n\n","import { core, fullDocument, row, column } from \"../../contexts/v1\";\n\nexport const addTwoColumns = [\n core,\n fullDocument,\n row,\n column,\n `\nReturn a full document where the first slide contains a row with layout \"1-1\" and two columns with simple text paragraphs.\n`.trim(),\n].join(\"\\n\\n\");\n\n\n","import { core, fullDocument, imageBlock, editingRules } from \"../../contexts/v1\";\n\nexport const editImageToCover = [\n core,\n fullDocument,\n imageBlock,\n editingRules,\n `\nUpdate an existing imageBlock on the first slide so it uses layout \"cover\" and align \"center\". Preserve all other attributes.\n`.trim(),\n].join(\"\\n\\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 more slide presets (hero, imageCover, agenda) once shapes are finalized.\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 RowAttrs,\n ColumnAttrs,\n ImageBlockAttrs,\n} from \"../../types/v1\";\n\ntype Block = JSONContent;\ntype SlideNode = JSONContent; // slide -> row -> column -> blocks\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 row: (attrs?: Partial<RowAttrs>): RowAttrs => ({\n layout: attrs?.layout ?? \"1\",\n className: attrs?.className ?? \"\",\n }),\n column: (attrs?: Partial<ColumnAttrs>): ColumnAttrs => ({\n className: attrs?.className ?? \"\",\n contentMode: attrs?.contentMode ?? \"default\",\n verticalAlign: attrs?.verticalAlign,\n horizontalAlign: attrs?.horizontalAlign,\n padding: attrs?.padding,\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\ntype SingleColOpts = {\n slideAttrs?: Partial<SlideAttrs>;\n rowAttrs?: Partial<RowAttrs>;\n columnAttrs?: Partial<ColumnAttrs>;\n content?: Block[];\n};\n\ntype TwoColOpts = {\n slideAttrs?: Partial<SlideAttrs>;\n rowAttrs?: Partial<RowAttrs>;\n leftColumnAttrs?: Partial<ColumnAttrs>;\n rightColumnAttrs?: Partial<ColumnAttrs>;\n left?: Block[];\n right?: Block[];\n};\n\nexport const slide = Object.assign(\n (opts: {\n slideAttrs?: Partial<SlideAttrs>;\n rowAttrs?: Partial<RowAttrs>;\n columnAttrs?: Partial<ColumnAttrs>;\n } = {}): SlideNode => ({\n type: \"slide\",\n attrs: defaults.slide(opts.slideAttrs),\n content: [\n {\n type: \"row\",\n attrs: defaults.row(opts.rowAttrs),\n content: [\n {\n type: \"column\",\n attrs: defaults.column(opts.columnAttrs),\n content: [],\n },\n ],\n },\n ],\n }),\n {\n singleCol: (opts: SingleColOpts = {}): SlideNode => ({\n type: \"slide\",\n attrs: defaults.slide(opts.slideAttrs),\n content: [\n {\n type: \"row\",\n attrs: defaults.row(opts.rowAttrs),\n content: [\n {\n type: \"column\",\n attrs: defaults.column(opts.columnAttrs),\n content: opts.content ?? [],\n },\n ],\n },\n ],\n }),\n\n twoCol: (opts: TwoColOpts = {}): SlideNode => ({\n type: \"slide\",\n attrs: defaults.slide(opts.slideAttrs),\n content: [\n {\n type: \"row\",\n attrs: defaults.row({\n layout: opts.rowAttrs?.layout ?? \"1-1\",\n ...opts.rowAttrs,\n }),\n content: [\n {\n type: \"column\",\n attrs: defaults.column(opts.leftColumnAttrs),\n content: opts.left ?? [],\n },\n {\n type: \"column\",\n attrs: defaults.column(opts.rightColumnAttrs),\n content: opts.right ?? [],\n },\n ],\n },\n ],\n }),\n }\n);\n\n// Slide layout presets beyond the base helpers\ntype HeroOpts = {\n slideAttrs?: Partial<SlideAttrs>;\n rowAttrs?: Partial<RowAttrs>;\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 rowAttrs?: Partial<RowAttrs>;\n};\n\ntype QuoteOpts = {\n slideAttrs?: Partial<SlideAttrs>;\n rowAttrs?: Partial<RowAttrs>;\n columnAttrs?: Partial<ColumnAttrs>;\n quote?: Block[];\n};\n\ntype AgendaOpts = {\n slideAttrs?: Partial<SlideAttrs>;\n rowAttrs?: Partial<RowAttrs>;\n columnAttrs?: Partial<ColumnAttrs>;\n items?: (string | Block)[];\n};\n\ntype MultiColOpts = {\n slideAttrs?: Partial<SlideAttrs>;\n rowAttrs?: Partial<RowAttrs>;\n columns: {\n content?: Block[];\n attrs?: Partial<ColumnAttrs>;\n }[];\n};\n\ntype MediaTextOpts = {\n slideAttrs?: Partial<SlideAttrs>;\n rowAttrs?: Partial<RowAttrs>;\n media?: Block[];\n text?: Block[];\n mediaColumnAttrs?: Partial<ColumnAttrs>;\n textColumnAttrs?: Partial<ColumnAttrs>;\n};\n\ntype Stack2Opts = {\n slideAttrs?: Partial<SlideAttrs>;\n topRow?: {\n rowAttrs?: Partial<RowAttrs>;\n columns: { content?: Block[]; attrs?: Partial<ColumnAttrs> }[];\n };\n bottomRow?: {\n rowAttrs?: Partial<RowAttrs>;\n columns: { content?: Block[]; attrs?: Partial<ColumnAttrs> }[];\n };\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 rowAttrs?: Partial<RowAttrs>;\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\nconst column = (attrs: Partial<ColumnAttrs> | undefined, content: Block[] = []): Block => ({\n type: \"column\",\n attrs: defaults.column(attrs),\n content,\n});\n\nconst row = (layout: RowAttrs[\"layout\"], content: Block[], attrs?: Partial<RowAttrs>): Block => ({\n type: \"row\",\n attrs: defaults.row({ layout, ...attrs }),\n content,\n});\n\nexport const createTemplate = (input: CreateTemplateInput): SlideNode => {\n switch (input.preset) {\n case \"slide.empty\":\n return slide({\n slideAttrs: input.slideAttrs,\n rowAttrs: input.rowAttrs,\n columnAttrs: input.columnAttrs,\n });\n case \"slide.singleCol\":\n return slide.singleCol({\n slideAttrs: input.slideAttrs,\n rowAttrs: input.rowAttrs,\n columnAttrs: input.columnAttrs,\n content: input.content ?? [],\n });\n case \"slide.twoCol\":\n return slide.twoCol({\n slideAttrs: input.slideAttrs,\n rowAttrs: input.rowAttrs,\n leftColumnAttrs: input.leftColumnAttrs,\n rightColumnAttrs: input.rightColumnAttrs,\n left: input.left ?? [],\n right: input.right ?? [],\n });\n case \"slide.hero\": {\n const opts = input.heroOpts ?? {};\n return {\n type: \"slide\",\n attrs: defaults.slide({ className: \"bg-slate-950 text-white\", ...opts.slideAttrs }),\n content: [\n row(\n opts.rowAttrs?.layout ?? \"1\",\n [\n column(\n opts.columnAttrs ?? { className: \"max-w-4xl gap-6 p-12\" },\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 { className: \"min-h-[720px] items-center justify-center p-12\", ...opts.rowAttrs }\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 layout: \"cover\",\n fullBleed: true,\n align: \"center\",\n };\n const overlay = opts.overlay ?? [blocks.heading(\"Overlay title\", 1)];\n return {\n type: \"slide\",\n attrs: defaults.slide({ className: \"bg-black text-white\", ...opts.slideAttrs }),\n content: [\n row(\n opts.rowAttrs?.layout ?? \"1\",\n [\n {\n type: \"column\",\n attrs: defaults.column({ className: \"relative w-full h-full\", ...opts.columnAttrs }),\n content: [\n blocks.imageBlock(image),\n ...overlay.map((node) => ({\n ...node,\n attrs: {\n ...(node as any).attrs,\n className: `${((node as any).attrs?.className ?? \"\")} absolute bottom-12 left-12 drop-shadow-lg`.trim(),\n },\n })),\n ],\n },\n ],\n { className: \"min-h-[720px]\", ...opts.rowAttrs }\n ),\n ],\n };\n }\n case \"slide.quote\": {\n const opts = input.quoteOpts ?? {};\n return {\n type: \"slide\",\n attrs: defaults.slide({ className: \"bg-white text-slate-900\", ...opts.slideAttrs }),\n content: [\n row(\n opts.rowAttrs?.layout ?? \"1\",\n [\n column(\n opts.columnAttrs ?? { className: \"max-w-3xl mx-auto gap-4 p-12\" },\n [\n blocks.blockquote(\n opts.quote ?? [\n blocks.paragraph(\"“Add your quote here.”\"),\n blocks.paragraph(\"— Author\"),\n ]\n ),\n ]\n ),\n ],\n { className: \"min-h-[640px] items-center justify-center\", ...opts.rowAttrs }\n ),\n ],\n };\n }\n case \"slide.agenda\": {\n const opts = input.agendaOpts ?? {};\n return {\n type: \"slide\",\n attrs: defaults.slide({ className: \"bg-white text-slate-900\", ...opts.slideAttrs }),\n content: [\n row(\n opts.rowAttrs?.layout ?? \"1\",\n [\n column(\n opts.columnAttrs ?? { className: \"p-12 gap-6\" },\n [\n blocks.heading(\"Agenda\", 1),\n blocks.bulletList(opts.items ?? [\"Topic 1\", \"Topic 2\", \"Topic 3\"]),\n ]\n ),\n ],\n { className: \"min-h-[640px]\", ...opts.rowAttrs }\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({ className: \"bg-white text-slate-900\", ...opts.slideAttrs }),\n content: [\n row(\n opts.rowAttrs?.layout ?? \"1-1-1\",\n cols.map((c) => column(c.attrs, c.content ?? [])),\n { className: \"p-8 gap-4\", ...opts.rowAttrs }\n ),\n ],\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({ className: \"bg-white text-slate-900\", ...opts.slideAttrs }),\n content: [\n row(\n opts.rowAttrs?.layout ?? \"1-1-1-1\",\n cols.map((c) => column(c.attrs, c.content ?? [])),\n { className: \"p-8 gap-4\", ...opts.rowAttrs }\n ),\n ],\n };\n }\n case \"slide.oneTwo\": {\n const opts = input.mediaTextOpts ?? {};\n return {\n type: \"slide\",\n attrs: defaults.slide({ className: \"bg-white text-slate-900\", ...opts.slideAttrs }),\n content: [\n row(\n opts.rowAttrs?.layout ?? \"1-2\",\n [\n column(opts.textColumnAttrs ?? { className: \"p-8 gap-4\" }, opts.text ?? []),\n column(opts.mediaColumnAttrs ?? { className: \"p-8 gap-4\" }, opts.media ?? []),\n ],\n { className: \"min-h-[640px]\", ...opts.rowAttrs }\n ),\n ],\n };\n }\n case \"slide.twoOne\": {\n const opts = input.mediaTextOpts ?? {};\n return {\n type: \"slide\",\n attrs: defaults.slide({ className: \"bg-white text-slate-900\", ...opts.slideAttrs }),\n content: [\n row(\n opts.rowAttrs?.layout ?? \"2-1\",\n [\n column(opts.mediaColumnAttrs ?? { className: \"p-8 gap-4\" }, opts.media ?? []),\n column(opts.textColumnAttrs ?? { className: \"p-8 gap-4\" }, opts.text ?? []),\n ],\n { className: \"min-h-[640px]\", ...opts.rowAttrs }\n ),\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({ className: \"bg-white text-slate-900\", ...opts.slideAttrs }),\n content: [\n row(\n opts.rowAttrs?.layout ?? \"1-2-1\",\n cols.map((c) => column(c.attrs, c.content ?? [])),\n { className: \"p-8 gap-4\", ...opts.rowAttrs }\n ),\n ],\n };\n }\n case \"slide.textMedia\": {\n const opts = input.mediaTextOpts ?? {};\n return {\n type: \"slide\",\n attrs: defaults.slide({ className: \"bg-white text-slate-900\", ...opts.slideAttrs }),\n content: [\n row(\n opts.rowAttrs?.layout ?? \"1-1\",\n [\n column(opts.textColumnAttrs ?? { className: \"p-10 gap-4\" }, opts.text ?? []),\n column(opts.mediaColumnAttrs ?? { className: \"p-10 gap-4 bg-slate-50\" }, opts.media ?? []),\n ],\n { className: \"min-h-[640px]\", ...opts.rowAttrs }\n ),\n ],\n };\n }\n case \"slide.mediaText\": {\n const opts = input.mediaTextOpts ?? {};\n return {\n type: \"slide\",\n attrs: defaults.slide({ className: \"bg-white text-slate-900\", ...opts.slideAttrs }),\n content: [\n row(\n opts.rowAttrs?.layout ?? \"1-1\",\n [\n column(opts.mediaColumnAttrs ?? { className: \"p-10 gap-4 bg-slate-50\" }, opts.media ?? []),\n column(opts.textColumnAttrs ?? { className: \"p-10 gap-4\" }, opts.text ?? []),\n ],\n { className: \"min-h-[640px]\", ...opts.rowAttrs }\n ),\n ],\n };\n }\n case \"slide.stack2\": {\n const opts = input.stack2Opts ?? {};\n const top = opts.topRow ?? {\n rowAttrs: { layout: \"1\" },\n columns: [{ content: [blocks.heading(\"Title\", 1), blocks.paragraph(\"Subhead\")] }],\n };\n const bottom = opts.bottomRow ?? {\n rowAttrs: { layout: \"1-1\" },\n columns: [\n { content: [blocks.paragraph(\"Left detail\")] },\n { content: [blocks.paragraph(\"Right detail\")] },\n ],\n };\n return {\n type: \"slide\",\n attrs: defaults.slide({ className: \"bg-white text-slate-900\", ...opts.slideAttrs }),\n content: [\n row(\n top.rowAttrs?.layout ?? \"1\",\n top.columns.map((c) => column(c.attrs, c.content ?? [])),\n { className: \"p-8 gap-4\", ...top.rowAttrs }\n ),\n row(\n bottom.rowAttrs?.layout ?? \"1-1\",\n bottom.columns.map((c) => column(c.attrs, c.content ?? [])),\n { className: \"p-8 gap-4\", ...bottom.rowAttrs }\n ),\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\nPresets:\n- slide.empty(): slide with one empty column.\n- slide.singleCol({ content?, slideAttrs?, rowAttrs?, columnAttrs? })\n- slide.twoCol({ left?, right?, slideAttrs?, rowAttrs?, leftColumnAttrs?, rightColumnAttrs? })\n- slide.hero({ content?, slideAttrs?, rowAttrs?, columnAttrs? })\n- slide.imageCover({ image?, overlay?, slideAttrs?, rowAttrs?, columnAttrs? })\n- slide.quote({ quote?, slideAttrs?, rowAttrs?, columnAttrs? })\n- slide.agenda({ items?, slideAttrs?, rowAttrs?, columnAttrs? })\n- slide.grid3/grid4({ columns?, slideAttrs?, rowAttrs? })\n- slide.oneTwo/twoOne/oneTwoOne({ columns?, slideAttrs?, rowAttrs? })\n- slide.textMedia/mediaText({ text?, media?, slideAttrs?, rowAttrs? })\n- slide.stack2({ topRow?, bottomRow?, slideAttrs? })\n\nBlocks:\n- blocks.text(text, marks?)\n- blocks.heading(text, level?)\n- blocks.paragraph(text?)\n- blocks.bulletList([string | Block][])\n- blocks.codeBlock(code, language?)\n- blocks.horizontalRule()\n- blocks.hardBreak()\n- blocks.imageBlock({ src, alt?, layout?, fullBleed?, align?, ...ImageBlockAttrs })\n- blocks.blockquote(content?)\n- blocks.listItem(content?)\n- blocks.image({ src, alt?, title?, width?, height? })\n- blocks.youtube({ src?, start?, width?, height? })\n\nAgent/tool usage:\n- Call createTemplate({ preset: \"slide.twoCol\", left: [blocks.paragraph(\"Left\")], right: [blocks.imageBlock({ src })] })\n- Wrap returned slides in { type: \"doc\", content: [/* slides here */] } before sending to the editor.\n\nNotes:\n- Size defaults to 16x9; override via slideAttrs.size.\n- Layout defaults: singleCol uses \"1\"; twoCol uses \"1-1\" unless rowAttrs.layout overrides.\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 rowAttrs: { className: \"min-h-[720px] items-center justify-center\" },\n columnAttrs: {\n verticalAlign: \"center\",\n horizontalAlign: \"center\",\n className: \"gap-6 p-12 text-center bg-white\",\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 rowAttrs: { className: \"items-center\" },\n leftColumnAttrs: {\n horizontalAlign: \"center\",\n verticalAlign: \"center\",\n className: \"p-8\",\n },\n rightColumnAttrs: {\n verticalAlign: \"center\",\n className: \"p-8 gap-3\",\n },\n left: [\n blocks.imageBlock({\n src: \"https://placehold.co/640x480/png\",\n layout: \"contain\",\n fullBleed: false,\n }),\n ],\n right: [\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};\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 rowAttrs: { className: \"items-center\" },\n leftColumnAttrs: {\n verticalAlign: \"center\",\n className: \"p-8 gap-3\",\n },\n rightColumnAttrs: {\n horizontalAlign: \"center\",\n verticalAlign: \"center\",\n className: \"p-8\",\n },\n left: [\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 right: [\n blocks.imageBlock({\n src: \"https://placehold.co/640x480/png\",\n layout: \"contain\",\n fullBleed: false,\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 slide.singleCol({\n columnAttrs: { className: \"w-full p-6 gap-4\", horizontalAlign: \"stretch\" },\n content: [\n blocks.heading(\"Section heading\", 2),\n {\n type: \"row\",\n attrs: { layout: \"1-1\", className: \"items-start w-full gap-4\" },\n content: [\n {\n type: \"column\",\n attrs: { className: \"p-4 gap-3 w-full box-border\" },\n content: [\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 },\n {\n type: \"column\",\n attrs: { className: \"p-4 gap-3 w-full box-border\" },\n content: [\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 },\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 slide.singleCol({\n columnAttrs: { className: \"w-full p-6 gap-4\", horizontalAlign: \"stretch\" },\n content: [\n blocks.heading(\"Section heading\", 2),\n {\n type: \"row\",\n attrs: { layout: \"1-1\", className: \"items-start w-full gap-4\" },\n content: [\n {\n type: \"column\",\n attrs: { className: \"p-4 gap-3 w-full box-border\" },\n content: [\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 },\n {\n type: \"column\",\n attrs: { className: \"p-4 gap-3 w-full box-border\" },\n content: [\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 },\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 slide.singleCol({\n columnAttrs: { className: \"w-full p-6 gap-4\", horizontalAlign: \"stretch\" },\n content: [\n {\n type: \"row\",\n attrs: { layout: \"1-1-1\", className: \"items-start w-full gap-4\" },\n content: [\n {\n type: \"column\",\n attrs: { className: \"p-3 gap-3 w-full box-border\" },\n content: [\n blocks.paragraph(\"Lorem ipsum dolor sit amet.\"),\n blocks.paragraph(\"Consectetur adipiscing elit. Sed do eiusmod tempor incididunt.\"),\n ],\n },\n {\n type: \"column\",\n attrs: { className: \"p-3 gap-3 w-full box-border\" },\n content: [\n blocks.paragraph(\"Ut enim ad minim veniam.\"),\n blocks.paragraph(\"Quis nostrud exercitation ullamco laboris.\"),\n ],\n },\n {\n type: \"column\",\n attrs: { className: \"p-3 gap-3 w-full box-border\" },\n content: [\n blocks.paragraph(\"Nisi ut aliquip ex ea commodo consequat.\"),\n blocks.paragraph(\"Duis aute irure dolor in reprehenderit.\"),\n ],\n },\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 slide.singleCol({\n columnAttrs: { className: \"w-full p-6 gap-4\", horizontalAlign: \"stretch\" },\n content: [\n blocks.heading(\"Section heading\", 2),\n {\n type: \"row\",\n attrs: { layout: \"1-1-1\", className: \"items-start w-full gap-4\" },\n content: [\n {\n type: \"column\",\n attrs: { className: \"p-3 gap-3 w-full box-border\" },\n content: [\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 },\n {\n type: \"column\",\n attrs: { className: \"p-3 gap-3 w-full box-border\" },\n content: [\n blocks.heading(\"Column heading\", 4),\n blocks.paragraph(\"Ut enim ad minim veniam.\"),\n blocks.paragraph(\"Quis nostrud exercitation ullamco laboris.\"),\n ],\n },\n {\n type: \"column\",\n attrs: { className: \"p-3 gap-3 w-full box-border\" },\n content: [\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 },\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 slide.singleCol({\n columnAttrs: { className: \"w-full p-6 gap-4\", horizontalAlign: \"stretch\" },\n content: [\n blocks.heading(\"Section heading\", 2),\n {\n type: \"row\",\n attrs: { layout: \"1-1-1-1\", className: \"items-start w-full gap-3\" },\n content: [\n {\n type: \"column\",\n attrs: { className: \"p-3 gap-3 w-full box-border\" },\n content: [\n blocks.heading(\"Column heading\", 4),\n blocks.paragraph(\"Lorem ipsum dolor sit amet.\"),\n blocks.paragraph(\"Consectetur adipiscing elit.\"),\n ],\n },\n {\n type: \"column\",\n attrs: { className: \"p-3 gap-3 w-full box-border\" },\n content: [\n blocks.heading(\"Column heading\", 4),\n blocks.paragraph(\"Ut enim ad minim veniam.\"),\n blocks.paragraph(\"Quis nostrud exercitation ullamco laboris.\"),\n ],\n },\n {\n type: \"column\",\n attrs: { className: \"p-3 gap-3 w-full box-border\" },\n content: [\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 },\n {\n type: \"column\",\n attrs: { className: \"p-3 gap-3 w-full box-border\" },\n content: [\n blocks.heading(\"Column heading\", 4),\n blocks.paragraph(\"Excepteur sint occaecat cupidatat.\"),\n blocks.paragraph(\"Sunt in culpa qui officia.\"),\n ],\n },\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 rowAttrs: { className: \"min-h-[720px]\" },\n columnAttrs: { className: \"p-0 w-full h-full\", horizontalAlign: \"stretch\" },\n content: [\n blocks.imageBlock({\n src: \"https://placehold.co/1920x1080/png\",\n layout: \"cover\",\n fullBleed: true,\n align: \"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 slide.singleCol({\n columnAttrs: { className: \"w-full p-4 gap-4\", horizontalAlign: \"stretch\" },\n content: [\n {\n type: \"row\",\n attrs: { layout: \"1-1-1-1\", className: \"items-start w-full gap-3\" },\n content: Array.from({ length: 4 }).map(() => ({\n type: \"column\",\n attrs: { className: \"p-2.5 gap-2 w-full box-border\" },\n content: [\n blocks.paragraph(\"Lorem ipsum dolor sit amet.\"),\n blocks.paragraph(\"Consectetur adipiscing elit.\"),\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: { className: \"p-6 gap-4\" },\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 rowAttrs: { className: \"items-start w-full\" },\n leftColumnAttrs: { className: \"p-6 gap-3 w-full\" },\n rightColumnAttrs: {\n horizontalAlign: \"center\",\n verticalAlign: \"center\",\n className: \"p-6 w-full\",\n },\n left: [\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 right: [\n blocks.imageBlock({\n src: \"https://placehold.co/480x360/png\",\n layout: \"contain\",\n fullBleed: false,\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 rowAttrs: { layout: \"1-2\", className: \"items-stretch w-full gap-0 min-h-[360px]\" },\n leftColumnAttrs: {\n className: \"bg-slate-100 p-0 w-full h-full\",\n horizontalAlign: \"stretch\",\n verticalAlign: \"top\",\n },\n rightColumnAttrs: { className: \"p-6 gap-3 w-full\", verticalAlign: \"center\" },\n left: [\n blocks.imageBlock({\n src: \"https://placehold.co/320x240/png\",\n layout: \"cover\",\n fullBleed: true,\n align: \"center\",\n }),\n ],\n right: [\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 }),\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 rowAttrs: { layout: \"2-1\", className: \"items-stretch w-full gap-0 min-h-[360px]\" },\n leftColumnAttrs: { className: \"p-6 gap-3 w-full\", verticalAlign: \"center\" },\n rightColumnAttrs: {\n className: \"bg-slate-100 p-0 w-full h-full\",\n horizontalAlign: \"stretch\",\n verticalAlign: \"top\",\n },\n left: [\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 right: [\n blocks.imageBlock({\n src: \"https://placehold.co/320x240/png\",\n layout: \"cover\",\n fullBleed: true,\n align: \"center\",\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\", className: \"\" },\n content: [\n {\n type: \"row\",\n attrs: { layout: \"1\", className: \"w-full items-stretch h-[20vh] min-h-[140px]\" },\n content: [\n {\n type: \"column\",\n attrs: { className: \"bg-slate-100 p-0 w-full h-full box-border\" },\n content: [\n blocks.imageBlock({\n src: \"https://placehold.co/1200x400/png\",\n layout: \"cover\",\n fullBleed: true,\n align: \"center\",\n }),\n ],\n },\n ],\n },\n {\n type: \"row\",\n attrs: { layout: \"1\", className: \"w-full flex-1\" },\n content: [\n {\n type: \"column\",\n attrs: { className: \"p-6 gap-3 w-full box-border 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 },\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 rowAttrs: { layout: \"2-1\", className: \"items-center w-full gap-4\" },\n leftColumnAttrs: { className: \"p-6 gap-3 w-full\", verticalAlign: \"center\" },\n rightColumnAttrs: {\n className: \"p-6 w-full items-center\",\n verticalAlign: \"center\",\n horizontalAlign: \"center\",\n },\n left: [\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 right: [\n {\n type: \"column\",\n attrs: { className: \"bg-slate-100 p-4 gap-3 rounded-lg w-full items-center\" },\n content: [\n blocks.imageBlock({\n src: \"https://placehold.co/240x200/png\",\n layout: \"contain\",\n fullBleed: false,\n align: \"center\",\n }),\n ],\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 rowAttrs: { layout: \"1-2\", className: \"items-center w-full gap-4\" },\n leftColumnAttrs: {\n className: \"p-6 w-full items-center\",\n verticalAlign: \"center\",\n horizontalAlign: \"center\",\n },\n rightColumnAttrs: { className: \"p-6 gap-3 w-full\", verticalAlign: \"center\" },\n left: [\n {\n type: \"column\",\n attrs: { className: \"bg-slate-100 p-4 gap-3 rounded-lg w-full items-center\" },\n content: [\n blocks.imageBlock({\n src: \"https://placehold.co/240x200/png\",\n layout: \"contain\",\n fullBleed: false,\n align: \"center\",\n }),\n ],\n },\n ],\n right: [\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 }),\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 slide.singleCol({\n columnAttrs: { className: \"w-full p-6 gap-4\", horizontalAlign: \"stretch\" },\n content: [\n blocks.heading(\"Images\", 2),\n {\n type: \"row\",\n attrs: { layout: \"1-1\", className: \"items-start w-full gap-4\" },\n content: [\n {\n type: \"column\",\n attrs: { className: \"p-4 gap-3 w-full box-border\" },\n content: [\n blocks.imageBlock({\n src: \"https://placehold.co/640x360/png\",\n layout: \"contain\",\n fullBleed: false,\n align: \"center\",\n }),\n blocks.heading(\"Image title\", 4),\n blocks.paragraph(\"Short supporting copy goes here.\"),\n ],\n },\n {\n type: \"column\",\n attrs: { className: \"p-4 gap-3 w-full box-border\" },\n content: [\n blocks.imageBlock({\n src: \"https://placehold.co/640x360/png\",\n layout: \"contain\",\n fullBleed: false,\n align: \"center\",\n }),\n blocks.heading(\"Image title\", 4),\n blocks.paragraph(\"Short supporting copy goes here.\"),\n ],\n },\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","v1_exports","v1_exports","v1_exports","slide","slide","column","row","image","_a","_b","slide"]}
|