@blockslides/ai-context 0.1.3 → 0.1.4

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 CHANGED
@@ -53,6 +53,7 @@ __export(v1_exports, {
53
53
 
54
54
  // src/contexts/v1/core.ts
55
55
  var core = `
56
+ <core>
56
57
  You are given a BlockSlides document to CREATE or EDIT.
57
58
 
58
59
  Document shape:
@@ -66,6 +67,7 @@ Rules:
66
67
  - Use only known node types and valid attrs. Do not invent attributes.
67
68
  - Prefer stable references: preserve slide.attrs.id if present.
68
69
  - Slides and flyers share the same JSON; flyers are slides sized via attrs and theme.
70
+ </core>
69
71
  `.trim();
70
72
 
71
73
  // src/contexts/v1/output.fullDocument.ts
@@ -78,6 +80,7 @@ Output contract:
78
80
 
79
81
  // src/contexts/v1/imageBlock.ts
80
82
  var imageBlock = `
83
+ <imageBlock>
81
84
  Node: imageBlock
82
85
  Attrs:
83
86
  - src (required): string (URL)
@@ -101,10 +104,12 @@ Behavior:
101
104
  - focus: Cover + radial spotlight at focalX/focalY.
102
105
  - pattern: Hide <img>; use tiled background (from src).
103
106
  - Do not set unknown attributes. Preserve existing valid attrs.
107
+ </imageBlock>
104
108
  `.trim();
105
109
 
106
110
  // src/contexts/v1/row.ts
107
111
  var row = `
112
+ <row>
108
113
  Node: row
109
114
  Attrs:
110
115
  - 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"
@@ -118,10 +123,12 @@ Semantics:
118
123
  - 1-1-1: three equal columns
119
124
  - 1-1-1-1: four equal columns
120
125
  - Empty layout ("", "1") acts as a single full-width column.
126
+ </row>
121
127
  `.trim();
122
128
 
123
129
  // src/contexts/v1/column.ts
124
130
  var column = `
131
+ <column>
125
132
  Node: column
126
133
  Attrs:
127
134
  - className (optional): string
@@ -133,10 +140,12 @@ Attrs:
133
140
  Notes:
134
141
  - Use className for spacing, colors, typography (e.g., Tailwind).
135
142
  - Keep nesting shallow; columns can contain rows or blocks as needed.
143
+ </column>
136
144
  `.trim();
137
145
 
138
146
  // src/contexts/v1/slide.ts
139
147
  var slide = `
148
+ <slide>
140
149
  Node: slide
141
150
  Attrs:
142
151
  - id (optional): string (stable identifier; preserve if present)
@@ -149,35 +158,72 @@ Content:
149
158
  Notes:
150
159
  - Flyers are slides sized for paper (e.g., size: "a4-portrait").
151
160
  - Set size to control canvas dimensions; theme applies the exact width/height.
161
+ </slide>
152
162
  `.trim();
153
163
 
154
164
  // src/contexts/v1/style.ts
155
165
  var style = `
166
+ <style>
156
167
  Styling
157
168
  - Prefer using attrs.className for styling (e.g., Tailwind classes).
158
169
  - Use enums for canonical behaviors (e.g., imageBlock.layout).
159
170
  - When enums are insufficient (spacing, backgrounds), use className.
171
+ </style>
160
172
  `.trim();
161
173
 
162
174
  // src/contexts/v1/editingRules.ts
163
175
  var editingRules = `
164
- Editing rules
176
+ <General editing rules>
165
177
  - Preserve existing ids and valid attributes. Do not remove or rename known attrs.
166
178
  - Use only allowed enum values. Do not invent new enum values.
167
- - Avoid introducing new attrs. If styling is needed, prefer className.
179
+ - Avoid introducing new attributes that are not documented. If styling is needed, prefer className.
168
180
  - Keep the document valid: slide > row > column > blocks.
181
+ </General editing rules>
182
+
183
+ <Centering content in a column>
184
+ - Columns are flex containers. Use their alignment attrs instead of per-block hacks.
185
+ - To center all content vertically and horizontally inside a column:
186
+ - Set column.attrs.verticalAlign = "center".
187
+ - Set column.attrs.horizontalAlign = "center".
188
+ - This will apply to headings, paragraphs, imageBlocks, and other blocks inside that column.
189
+ - Example:
190
+ - Before: column.attrs = { verticalAlign: "top", horizontalAlign: "left", padding: "none" }
191
+ - After: column.attrs = { verticalAlign: "center", horizontalAlign: "center", padding: "none" }
192
+ </Centering content in a column>
193
+
194
+ <Text editing (headings and paragraphs)>
195
+ - Preserve semantic types: do not turn headings into paragraphs or vice versa unless explicitly asked.
196
+ - To change heading level, update heading.attrs.level (1\u20136) without changing its id.
197
+ - To change the text, edit the text nodes inside content, keeping marks and structure when possible.
198
+ - For alignment of text itself, prefer using the textAlign extension (textAlign: "left" | "center" | "right" | "justify") if configured.
199
+ - Do not introduce inline HTML; represent formatting via marks (bold, italic, underline, etc.).
200
+ </Text editing (headings and paragraphs)>
201
+
202
+ <Image blocks>
203
+ - Use imageBlock for rich images; preserve src, assetId, and metadata unless the user explicitly asks to change them.
204
+ - To change the alignment of an imageBlock within its column, set imageBlock.attrs.align to "left", "center", "right", or "stretch".
205
+ - To change how the image is fit, adjust imageBlock.attrs.layout (for example: "cover", "contain", "fill", "focus", or a configured layout key).
206
+ - When centering both text and image in a column, combine:
207
+ - column verticalAlign/horizontalAlign for layout, and
208
+ - imageBlock align for how the image itself sits in the column.
209
+ - Do not invent new layout or align values that are not documented in the schema.
210
+ </Image blocks>
211
+
169
212
  `.trim();
170
213
 
171
214
  // src/contexts/v1/sizing.ts
172
215
  var sizing = `
216
+ <sizing>
173
217
  Sizing
174
218
  - Slides and flyers share the same JSON. Flyers are slides sized via slide.attrs.size and theme rules.
175
219
  - Allowed sizes: "16x9" | "4x3" | "a4-portrait" | "a4-landscape" | "letter-portrait" | "letter-landscape" | "linkedin-banner".
176
220
  - Editors may render with fixed canvases or dynamic mode. The default is fixed; dynamic stretches to container with preserved aspect.
221
+ </sizing>
177
222
  `.trim();
178
223
 
179
224
  // src/contexts/v1/blockquote.ts
180
225
  var blockquote = `
226
+ <blockquote>
181
227
  Node: blockquote
182
228
  Attrs:
183
229
  - HTML-only; no required JSON attrs beyond optional styling such as className.
@@ -188,10 +234,12 @@ Content:
188
234
  Semantics:
189
235
  - Use for quoted text or callouts inside a column or row.
190
236
  - Styling should be applied via className on the surrounding column/slide, not by inventing new attrs here.
237
+ </blockquote>
191
238
  `.trim();
192
239
 
193
240
  // src/contexts/v1/bulletList.ts
194
241
  var bulletList = `
242
+ <bulletList>
195
243
  Node: bulletList
196
244
  Attrs:
197
245
  - HTML-only; no required JSON attrs beyond optional styling such as className.
@@ -203,10 +251,12 @@ Semantics:
203
251
  - Represents an unordered list rendered as <ul>.
204
252
  - Use when you need bullet points inside a column or blockquote.
205
253
  - Do not use bulletList as a top-level child of doc; it belongs inside a column/row structure.
254
+ </bulletList>
206
255
  `.trim();
207
256
 
208
257
  // src/contexts/v1/codeBlock.ts
209
258
  var codeBlock = `
259
+ <codeBlock>
210
260
  Node: codeBlock
211
261
  Attrs:
212
262
  - language (optional): string | null (e.g., "js", "ts", "python").
@@ -218,10 +268,12 @@ Semantics:
218
268
  - Renders as <pre><code>\u2026</code></pre>.
219
269
  - language controls a CSS class (e.g., "language-js") for syntax highlighting.
220
270
  - Use when the user explicitly wants a fenced code block, not inline code in a paragraph.
271
+ </codeBlock>
221
272
  `.trim();
222
273
 
223
274
  // src/contexts/v1/hardBreak.ts
224
275
  var hardBreak = `
276
+ <hardBreak>
225
277
  Node: hardBreak
226
278
  Attrs:
227
279
  - None (HTML-only); behaves like a manual line break.
@@ -232,10 +284,12 @@ Content:
232
284
  Semantics:
233
285
  - Renders as <br> and as a newline in plain text exports.
234
286
  - Use when the user requests a line break without starting a new paragraph.
287
+ </hardBreak>
235
288
  `.trim();
236
289
 
237
290
  // src/contexts/v1/horizontalRule.ts
238
291
  var horizontalRule = `
292
+ <horizontalRule>
239
293
  Node: horizontalRule
240
294
  Attrs:
241
295
  - HTML-only; no JSON attrs beyond optional styling via surrounding layout.
@@ -246,10 +300,12 @@ Content:
246
300
  Semantics:
247
301
  - Renders as <hr>.
248
302
  - Use to visually separate sections within a slide (for example, between rows of text).
303
+ </horizontalRule>
249
304
  `.trim();
250
305
 
251
306
  // src/contexts/v1/image.ts
252
307
  var image = `
308
+ <image>
253
309
  Node: image
254
310
  Attrs:
255
311
  - src (required): string (URL to the image).
@@ -263,10 +319,12 @@ Content:
263
319
  Semantics:
264
320
  - Renders as a simple <img>, unlike imageBlock which adds rich framing/caption UI.
265
321
  - Prefer imageBlock for designed layouts; use image for simple inline images in paragraphs.
322
+ </image>
266
323
  `.trim();
267
324
 
268
325
  // src/contexts/v1/heading.ts
269
326
  var heading = `
327
+ <heading>
270
328
  Node: heading
271
329
  Attrs:
272
330
  - level (required): 1 | 2 | 3 | 4 | 5 | 6.
@@ -278,10 +336,12 @@ Semantics:
278
336
  - Renders as <h1>\u2026<h6> depending on level.
279
337
  - Use level 1\u20132 for main slide titles, 3\u20134 for section headings, 5\u20136 for subtle labels.
280
338
  - Do not invent other attrs; typography/styling should come from className on columns/slides.
339
+ </heading>
281
340
  `.trim();
282
341
 
283
342
  // src/contexts/v1/paragraph.ts
284
343
  var paragraph = `
344
+ <paragraph>
285
345
  Node: paragraph
286
346
  Attrs:
287
347
  - HTML-only; no structured JSON attrs beyond optional styling such as className.
@@ -292,10 +352,12 @@ Content:
292
352
  Semantics:
293
353
  - Default text block inside columns and rows.
294
354
  - Multiple paragraphs can be stacked within the same column to create vertical rhythm.
355
+ </paragraph>
295
356
  `.trim();
296
357
 
297
358
  // src/contexts/v1/youtube.ts
298
359
  var youtube = `
360
+ <youtube>
299
361
  Node: youtube
300
362
  Attrs:
301
363
  - src (required): string (public YouTube URL).
@@ -310,6 +372,7 @@ Semantics:
310
372
  - Renders as an embedded YouTube iframe wrapped in a container <div>.
311
373
  - Use for video embeds inside a column or row; keep other text in separate paragraphs/columns.
312
374
  - Do not embed raw <iframe> HTML directly; always use the youtube node with attrs.
375
+ </youtube>
313
376
  `.trim();
314
377
 
315
378
  // src/examples/v1/index.ts
@@ -712,13 +775,20 @@ var youtube_schema_default = {
712
775
  };
713
776
 
714
777
  // src/bundles/v1/allSchemas.ts
715
- var allSchemas = Object.entries(v1_exports3).map(
716
- ([name, schema]) => `Schema "${name}":
717
- ` + JSON.stringify(schema, null, 2)
718
- ).join("\n\n");
778
+ var allSchemas = `
779
+ <Schemas>
780
+ ${Object.entries(v1_exports3).map(
781
+ ([name, schema]) => `<${name}Schema>
782
+ ` + JSON.stringify(schema, null, 2) + `
783
+ </${name}Schema>`
784
+ ).join("\n\n")}
785
+ </Schemas>
786
+ `.trim();
719
787
 
720
788
  // src/bundles/v1/allContexts.ts
721
- var allContexts = [
789
+ var allContexts = `
790
+ <Context>
791
+ ${[
722
792
  core,
723
793
  fullDocument,
724
794
  slide,
@@ -737,7 +807,9 @@ var allContexts = [
737
807
  horizontalRule,
738
808
  youtube,
739
809
  editingRules
740
- ].join("\n\n");
810
+ ].join("\n\n")}
811
+ </Context>
812
+ `.trim();
741
813
 
742
814
  // src/recipes/v1/index.ts
743
815
  var v1_exports5 = {};
@@ -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 = `\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`.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 = `\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`.trim();\n\n\n","export const 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\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`.trim();\n\n\n","export const 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\nNotes:\n- Use className for spacing, colors, typography (e.g., Tailwind).\n- Keep nesting shallow; columns can contain rows or blocks as needed.\n`.trim();\n\n\n","export const 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\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`.trim();\n\n\n","export const 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`.trim();\n\n\n","export const editingRules = `\nEditing 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 attrs. If styling is needed, prefer className.\n- Keep the document valid: slide > row > column > blocks.\n`.trim();\n\n\n","export const 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`.trim();\n\n\n","export const 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`.trim();\n\n\n","export const 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`.trim();\n\n\n","export const 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`.trim();\n\n\n","export const 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`.trim();\n\n\n","export const 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`.trim();\n\n\n","export const 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`.trim();\n\n\n","export const 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`.trim();\n\n\n","export const 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`.trim();\n\n\n","export const 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`.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 },\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 },\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 },\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 * This is intended for:\n * - LLMs that want to see the exact JSON Schema contracts\n * - Tools that want a single text blob containing every schema\n *\n * Each schema is pretty-printed and prefixed with its key name.\n */\nexport const allSchemas = Object.entries(schemas)\n .map(\n ([name, schema]) =>\n `Schema \"${name}\":\\n` + JSON.stringify(schema as unknown, null, 2)\n )\n .join(\"\\n\\n\");\n\n\n\n","import * as ctx from \"../../contexts/v1\";\n\n/**\n * All v1 context atoms concatenated into a single string.\n *\n * Intended for:\n * - LLMs that should know about every supported node type and layout primitive\n * - Power users who want a “maximal” context (structure + nodes + editing rules + sizing)\n */\nexport const allContexts = [\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\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"],"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\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</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\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\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</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<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 },\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 },\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 },\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"]}
package/dist/index.d.cts CHANGED
@@ -75,20 +75,14 @@ declare const all: string;
75
75
  /**
76
76
  * Human- and AI-readable bundle of all v1 JSON Schemas.
77
77
  *
78
- * This is intended for:
79
- * - LLMs that want to see the exact JSON Schema contracts
80
- * - Tools that want a single text blob containing every schema
81
- *
82
- * Each schema is pretty-printed and prefixed with its key name.
78
+ * Wrapped in a top-level <Schemas>…</Schemas> tag, with each schema
79
+ * enclosed in its own <{name}Schema>…</{name}Schema> block.
83
80
  */
84
81
  declare const allSchemas: string;
85
82
 
86
83
  /**
87
- * All v1 context atoms concatenated into a single string.
88
- *
89
- * Intended for:
90
- * - LLMs that should know about every supported node type and layout primitive
91
- * - Power users who want a “maximal” context (structure + nodes + editing rules + sizing)
84
+ * All v1 context atoms concatenated into a single string,
85
+ * wrapped in a top-level <Context>…</Context> block.
92
86
  */
93
87
  declare const allContexts: string;
94
88
 
package/dist/index.d.ts CHANGED
@@ -75,20 +75,14 @@ declare const all: string;
75
75
  /**
76
76
  * Human- and AI-readable bundle of all v1 JSON Schemas.
77
77
  *
78
- * This is intended for:
79
- * - LLMs that want to see the exact JSON Schema contracts
80
- * - Tools that want a single text blob containing every schema
81
- *
82
- * Each schema is pretty-printed and prefixed with its key name.
78
+ * Wrapped in a top-level <Schemas>…</Schemas> tag, with each schema
79
+ * enclosed in its own <{name}Schema>…</{name}Schema> block.
83
80
  */
84
81
  declare const allSchemas: string;
85
82
 
86
83
  /**
87
- * All v1 context atoms concatenated into a single string.
88
- *
89
- * Intended for:
90
- * - LLMs that should know about every supported node type and layout primitive
91
- * - Power users who want a “maximal” context (structure + nodes + editing rules + sizing)
84
+ * All v1 context atoms concatenated into a single string,
85
+ * wrapped in a top-level <Context>…</Context> block.
92
86
  */
93
87
  declare const allContexts: string;
94
88
 
package/dist/index.js CHANGED
@@ -29,6 +29,7 @@ __export(v1_exports, {
29
29
 
30
30
  // src/contexts/v1/core.ts
31
31
  var core = `
32
+ <core>
32
33
  You are given a BlockSlides document to CREATE or EDIT.
33
34
 
34
35
  Document shape:
@@ -42,6 +43,7 @@ Rules:
42
43
  - Use only known node types and valid attrs. Do not invent attributes.
43
44
  - Prefer stable references: preserve slide.attrs.id if present.
44
45
  - Slides and flyers share the same JSON; flyers are slides sized via attrs and theme.
46
+ </core>
45
47
  `.trim();
46
48
 
47
49
  // src/contexts/v1/output.fullDocument.ts
@@ -54,6 +56,7 @@ Output contract:
54
56
 
55
57
  // src/contexts/v1/imageBlock.ts
56
58
  var imageBlock = `
59
+ <imageBlock>
57
60
  Node: imageBlock
58
61
  Attrs:
59
62
  - src (required): string (URL)
@@ -77,10 +80,12 @@ Behavior:
77
80
  - focus: Cover + radial spotlight at focalX/focalY.
78
81
  - pattern: Hide <img>; use tiled background (from src).
79
82
  - Do not set unknown attributes. Preserve existing valid attrs.
83
+ </imageBlock>
80
84
  `.trim();
81
85
 
82
86
  // src/contexts/v1/row.ts
83
87
  var row = `
88
+ <row>
84
89
  Node: row
85
90
  Attrs:
86
91
  - 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"
@@ -94,10 +99,12 @@ Semantics:
94
99
  - 1-1-1: three equal columns
95
100
  - 1-1-1-1: four equal columns
96
101
  - Empty layout ("", "1") acts as a single full-width column.
102
+ </row>
97
103
  `.trim();
98
104
 
99
105
  // src/contexts/v1/column.ts
100
106
  var column = `
107
+ <column>
101
108
  Node: column
102
109
  Attrs:
103
110
  - className (optional): string
@@ -109,10 +116,12 @@ Attrs:
109
116
  Notes:
110
117
  - Use className for spacing, colors, typography (e.g., Tailwind).
111
118
  - Keep nesting shallow; columns can contain rows or blocks as needed.
119
+ </column>
112
120
  `.trim();
113
121
 
114
122
  // src/contexts/v1/slide.ts
115
123
  var slide = `
124
+ <slide>
116
125
  Node: slide
117
126
  Attrs:
118
127
  - id (optional): string (stable identifier; preserve if present)
@@ -125,35 +134,72 @@ Content:
125
134
  Notes:
126
135
  - Flyers are slides sized for paper (e.g., size: "a4-portrait").
127
136
  - Set size to control canvas dimensions; theme applies the exact width/height.
137
+ </slide>
128
138
  `.trim();
129
139
 
130
140
  // src/contexts/v1/style.ts
131
141
  var style = `
142
+ <style>
132
143
  Styling
133
144
  - Prefer using attrs.className for styling (e.g., Tailwind classes).
134
145
  - Use enums for canonical behaviors (e.g., imageBlock.layout).
135
146
  - When enums are insufficient (spacing, backgrounds), use className.
147
+ </style>
136
148
  `.trim();
137
149
 
138
150
  // src/contexts/v1/editingRules.ts
139
151
  var editingRules = `
140
- Editing rules
152
+ <General editing rules>
141
153
  - Preserve existing ids and valid attributes. Do not remove or rename known attrs.
142
154
  - Use only allowed enum values. Do not invent new enum values.
143
- - Avoid introducing new attrs. If styling is needed, prefer className.
155
+ - Avoid introducing new attributes that are not documented. If styling is needed, prefer className.
144
156
  - Keep the document valid: slide > row > column > blocks.
157
+ </General editing rules>
158
+
159
+ <Centering content in a column>
160
+ - Columns are flex containers. Use their alignment attrs instead of per-block hacks.
161
+ - To center all content vertically and horizontally inside a column:
162
+ - Set column.attrs.verticalAlign = "center".
163
+ - Set column.attrs.horizontalAlign = "center".
164
+ - This will apply to headings, paragraphs, imageBlocks, and other blocks inside that column.
165
+ - Example:
166
+ - Before: column.attrs = { verticalAlign: "top", horizontalAlign: "left", padding: "none" }
167
+ - After: column.attrs = { verticalAlign: "center", horizontalAlign: "center", padding: "none" }
168
+ </Centering content in a column>
169
+
170
+ <Text editing (headings and paragraphs)>
171
+ - Preserve semantic types: do not turn headings into paragraphs or vice versa unless explicitly asked.
172
+ - To change heading level, update heading.attrs.level (1\u20136) without changing its id.
173
+ - To change the text, edit the text nodes inside content, keeping marks and structure when possible.
174
+ - For alignment of text itself, prefer using the textAlign extension (textAlign: "left" | "center" | "right" | "justify") if configured.
175
+ - Do not introduce inline HTML; represent formatting via marks (bold, italic, underline, etc.).
176
+ </Text editing (headings and paragraphs)>
177
+
178
+ <Image blocks>
179
+ - Use imageBlock for rich images; preserve src, assetId, and metadata unless the user explicitly asks to change them.
180
+ - To change the alignment of an imageBlock within its column, set imageBlock.attrs.align to "left", "center", "right", or "stretch".
181
+ - To change how the image is fit, adjust imageBlock.attrs.layout (for example: "cover", "contain", "fill", "focus", or a configured layout key).
182
+ - When centering both text and image in a column, combine:
183
+ - column verticalAlign/horizontalAlign for layout, and
184
+ - imageBlock align for how the image itself sits in the column.
185
+ - Do not invent new layout or align values that are not documented in the schema.
186
+ </Image blocks>
187
+
145
188
  `.trim();
146
189
 
147
190
  // src/contexts/v1/sizing.ts
148
191
  var sizing = `
192
+ <sizing>
149
193
  Sizing
150
194
  - Slides and flyers share the same JSON. Flyers are slides sized via slide.attrs.size and theme rules.
151
195
  - Allowed sizes: "16x9" | "4x3" | "a4-portrait" | "a4-landscape" | "letter-portrait" | "letter-landscape" | "linkedin-banner".
152
196
  - Editors may render with fixed canvases or dynamic mode. The default is fixed; dynamic stretches to container with preserved aspect.
197
+ </sizing>
153
198
  `.trim();
154
199
 
155
200
  // src/contexts/v1/blockquote.ts
156
201
  var blockquote = `
202
+ <blockquote>
157
203
  Node: blockquote
158
204
  Attrs:
159
205
  - HTML-only; no required JSON attrs beyond optional styling such as className.
@@ -164,10 +210,12 @@ Content:
164
210
  Semantics:
165
211
  - Use for quoted text or callouts inside a column or row.
166
212
  - Styling should be applied via className on the surrounding column/slide, not by inventing new attrs here.
213
+ </blockquote>
167
214
  `.trim();
168
215
 
169
216
  // src/contexts/v1/bulletList.ts
170
217
  var bulletList = `
218
+ <bulletList>
171
219
  Node: bulletList
172
220
  Attrs:
173
221
  - HTML-only; no required JSON attrs beyond optional styling such as className.
@@ -179,10 +227,12 @@ Semantics:
179
227
  - Represents an unordered list rendered as <ul>.
180
228
  - Use when you need bullet points inside a column or blockquote.
181
229
  - Do not use bulletList as a top-level child of doc; it belongs inside a column/row structure.
230
+ </bulletList>
182
231
  `.trim();
183
232
 
184
233
  // src/contexts/v1/codeBlock.ts
185
234
  var codeBlock = `
235
+ <codeBlock>
186
236
  Node: codeBlock
187
237
  Attrs:
188
238
  - language (optional): string | null (e.g., "js", "ts", "python").
@@ -194,10 +244,12 @@ Semantics:
194
244
  - Renders as <pre><code>\u2026</code></pre>.
195
245
  - language controls a CSS class (e.g., "language-js") for syntax highlighting.
196
246
  - Use when the user explicitly wants a fenced code block, not inline code in a paragraph.
247
+ </codeBlock>
197
248
  `.trim();
198
249
 
199
250
  // src/contexts/v1/hardBreak.ts
200
251
  var hardBreak = `
252
+ <hardBreak>
201
253
  Node: hardBreak
202
254
  Attrs:
203
255
  - None (HTML-only); behaves like a manual line break.
@@ -208,10 +260,12 @@ Content:
208
260
  Semantics:
209
261
  - Renders as <br> and as a newline in plain text exports.
210
262
  - Use when the user requests a line break without starting a new paragraph.
263
+ </hardBreak>
211
264
  `.trim();
212
265
 
213
266
  // src/contexts/v1/horizontalRule.ts
214
267
  var horizontalRule = `
268
+ <horizontalRule>
215
269
  Node: horizontalRule
216
270
  Attrs:
217
271
  - HTML-only; no JSON attrs beyond optional styling via surrounding layout.
@@ -222,10 +276,12 @@ Content:
222
276
  Semantics:
223
277
  - Renders as <hr>.
224
278
  - Use to visually separate sections within a slide (for example, between rows of text).
279
+ </horizontalRule>
225
280
  `.trim();
226
281
 
227
282
  // src/contexts/v1/image.ts
228
283
  var image = `
284
+ <image>
229
285
  Node: image
230
286
  Attrs:
231
287
  - src (required): string (URL to the image).
@@ -239,10 +295,12 @@ Content:
239
295
  Semantics:
240
296
  - Renders as a simple <img>, unlike imageBlock which adds rich framing/caption UI.
241
297
  - Prefer imageBlock for designed layouts; use image for simple inline images in paragraphs.
298
+ </image>
242
299
  `.trim();
243
300
 
244
301
  // src/contexts/v1/heading.ts
245
302
  var heading = `
303
+ <heading>
246
304
  Node: heading
247
305
  Attrs:
248
306
  - level (required): 1 | 2 | 3 | 4 | 5 | 6.
@@ -254,10 +312,12 @@ Semantics:
254
312
  - Renders as <h1>\u2026<h6> depending on level.
255
313
  - Use level 1\u20132 for main slide titles, 3\u20134 for section headings, 5\u20136 for subtle labels.
256
314
  - Do not invent other attrs; typography/styling should come from className on columns/slides.
315
+ </heading>
257
316
  `.trim();
258
317
 
259
318
  // src/contexts/v1/paragraph.ts
260
319
  var paragraph = `
320
+ <paragraph>
261
321
  Node: paragraph
262
322
  Attrs:
263
323
  - HTML-only; no structured JSON attrs beyond optional styling such as className.
@@ -268,10 +328,12 @@ Content:
268
328
  Semantics:
269
329
  - Default text block inside columns and rows.
270
330
  - Multiple paragraphs can be stacked within the same column to create vertical rhythm.
331
+ </paragraph>
271
332
  `.trim();
272
333
 
273
334
  // src/contexts/v1/youtube.ts
274
335
  var youtube = `
336
+ <youtube>
275
337
  Node: youtube
276
338
  Attrs:
277
339
  - src (required): string (public YouTube URL).
@@ -286,6 +348,7 @@ Semantics:
286
348
  - Renders as an embedded YouTube iframe wrapped in a container <div>.
287
349
  - Use for video embeds inside a column or row; keep other text in separate paragraphs/columns.
288
350
  - Do not embed raw <iframe> HTML directly; always use the youtube node with attrs.
351
+ </youtube>
289
352
  `.trim();
290
353
 
291
354
  // src/examples/v1/index.ts
@@ -688,13 +751,20 @@ var youtube_schema_default = {
688
751
  };
689
752
 
690
753
  // src/bundles/v1/allSchemas.ts
691
- var allSchemas = Object.entries(v1_exports3).map(
692
- ([name, schema]) => `Schema "${name}":
693
- ` + JSON.stringify(schema, null, 2)
694
- ).join("\n\n");
754
+ var allSchemas = `
755
+ <Schemas>
756
+ ${Object.entries(v1_exports3).map(
757
+ ([name, schema]) => `<${name}Schema>
758
+ ` + JSON.stringify(schema, null, 2) + `
759
+ </${name}Schema>`
760
+ ).join("\n\n")}
761
+ </Schemas>
762
+ `.trim();
695
763
 
696
764
  // src/bundles/v1/allContexts.ts
697
- var allContexts = [
765
+ var allContexts = `
766
+ <Context>
767
+ ${[
698
768
  core,
699
769
  fullDocument,
700
770
  slide,
@@ -713,7 +783,9 @@ var allContexts = [
713
783
  horizontalRule,
714
784
  youtube,
715
785
  editingRules
716
- ].join("\n\n");
786
+ ].join("\n\n")}
787
+ </Context>
788
+ `.trim();
717
789
 
718
790
  // src/recipes/v1/index.ts
719
791
  var v1_exports5 = {};
package/dist/index.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/contexts/v1/index.ts","../src/contexts/v1/core.ts","../src/contexts/v1/output.fullDocument.ts","../src/contexts/v1/imageBlock.ts","../src/contexts/v1/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 { 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 = `\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`.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 = `\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`.trim();\n\n\n","export const 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\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`.trim();\n\n\n","export const 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\nNotes:\n- Use className for spacing, colors, typography (e.g., Tailwind).\n- Keep nesting shallow; columns can contain rows or blocks as needed.\n`.trim();\n\n\n","export const 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\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`.trim();\n\n\n","export const 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`.trim();\n\n\n","export const editingRules = `\nEditing 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 attrs. If styling is needed, prefer className.\n- Keep the document valid: slide > row > column > blocks.\n`.trim();\n\n\n","export const 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`.trim();\n\n\n","export const 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`.trim();\n\n\n","export const 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`.trim();\n\n\n","export const 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`.trim();\n\n\n","export const 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`.trim();\n\n\n","export const 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`.trim();\n\n\n","export const 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`.trim();\n\n\n","export const 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`.trim();\n\n\n","export const 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`.trim();\n\n\n","export const 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`.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 },\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 },\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 },\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 * This is intended for:\n * - LLMs that want to see the exact JSON Schema contracts\n * - Tools that want a single text blob containing every schema\n *\n * Each schema is pretty-printed and prefixed with its key name.\n */\nexport const allSchemas = Object.entries(schemas)\n .map(\n ([name, schema]) =>\n `Schema \"${name}\":\\n` + JSON.stringify(schema as unknown, null, 2)\n )\n .join(\"\\n\\n\");\n\n\n\n","import * as ctx from \"../../contexts/v1\";\n\n/**\n * All v1 context atoms concatenated into a single string.\n *\n * Intended for:\n * - LLMs that should know about every supported node type and layout primitive\n * - Power users who want a “maximal” context (structure + nodes + editing rules + sizing)\n */\nexport const allContexts = [\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\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"]}
1
+ {"version":3,"sources":["../src/contexts/v1/index.ts","../src/contexts/v1/core.ts","../src/contexts/v1/output.fullDocument.ts","../src/contexts/v1/imageBlock.ts","../src/contexts/v1/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 { 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\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</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\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\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</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<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 },\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 },\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 },\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"]}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@blockslides/ai-context",
3
3
  "description": "AI context snippets for BlockSlides (v1 atoms, examples, schemas, types)",
4
- "version": "0.1.3",
4
+ "version": "0.1.4",
5
5
  "keywords": [
6
6
  "blockslides",
7
7
  "ai",