@blockslides/ai-context 0.1.2 → 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 +80 -8
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +4 -10
- package/dist/index.d.ts +4 -10
- package/dist/index.js +80 -8
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
- package/src/contexts/v1/bulletList.ts +0 -2
- package/src/contexts/v1/editingRules.ts +0 -10
- package/src/contexts/v1/row.ts +0 -2
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
|
-
|
|
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
|
|
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 =
|
|
716
|
-
|
|
717
|
-
|
|
718
|
-
|
|
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 = {};
|
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../src/index.ts","../src/contexts/v1/index.ts","../src/contexts/v1/core.ts","../src/contexts/v1/output.fullDocument.ts","../src/contexts/v1/imageBlock.ts","../src/contexts/v1/row.ts","../src/contexts/v1/column.ts","../src/contexts/v1/slide.ts","../src/contexts/v1/style.ts","../src/contexts/v1/editingRules.ts","../src/contexts/v1/sizing.ts","../src/contexts/v1/blockquote.ts","../src/contexts/v1/bulletList.ts","../src/contexts/v1/codeBlock.ts","../src/contexts/v1/hardBreak.ts","../src/contexts/v1/horizontalRule.ts","../src/contexts/v1/image.ts","../src/contexts/v1/heading.ts","../src/contexts/v1/paragraph.ts","../src/contexts/v1/youtube.ts","../src/examples/v1/index.ts","../src/examples/v1/slides.ts","../src/examples/v1/flyers.ts","../src/bundles/v1/index.ts","../src/bundles/v1/minimalCreate.ts","../src/bundles/v1/imageEditing.ts","../src/bundles/v1/all.ts","../src/schemas/v1/index.ts","../src/schemas/v1/imageBlock.schema.json","../src/schemas/v1/row.schema.json","../src/schemas/v1/column.schema.json","../src/schemas/v1/slide.schema.json","../src/schemas/v1/blockquote.schema.json","../src/schemas/v1/bulletList.schema.json","../src/schemas/v1/codeBlock.schema.json","../src/schemas/v1/hardBreak.schema.json","../src/schemas/v1/horizontalRule.schema.json","../src/schemas/v1/image.schema.json","../src/schemas/v1/heading.schema.json","../src/schemas/v1/paragraph.schema.json","../src/schemas/v1/youtube.schema.json","../src/bundles/v1/allSchemas.ts","../src/bundles/v1/allContexts.ts","../src/recipes/v1/index.ts","../src/recipes/v1/createSlide.ts","../src/recipes/v1/addTwoColumns.ts","../src/recipes/v1/editImageToCover.ts"],"sourcesContent":["export * as contextsV1 from \"./contexts/v1\";\nexport * as examplesV1 from \"./examples/v1\";\nexport * as bundlesV1 from \"./bundles/v1\";\nexport * as recipesV1 from \"./recipes/v1\";\nexport * as schemasV1 from \"./schemas/v1\";\nexport * from \"./types/v1\";\n\n","export { core } from \"./core\";\nexport { fullDocument } from \"./output.fullDocument\";\nexport { imageBlock } from \"./imageBlock\";\nexport { row } from \"./row\";\nexport { column } from \"./column\";\nexport { slide } from \"./slide\";\nexport { style } from \"./style\";\nexport { editingRules } from \"./editingRules\";\nexport { sizing } from \"./sizing\";\nexport { blockquote } from \"./blockquote\";\nexport { bulletList } from \"./bulletList\";\nexport { codeBlock } from \"./codeBlock\";\nexport { hardBreak } from \"./hardBreak\";\nexport { horizontalRule } from \"./horizontalRule\";\nexport { image } from \"./image\";\nexport { heading } from \"./heading\";\nexport { paragraph } from \"./paragraph\";\nexport { youtube } from \"./youtube\";\n\n","export const core = `\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
|
-
*
|
|
79
|
-
*
|
|
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
|
-
*
|
|
79
|
-
*
|
|
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
|
-
|
|
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
|
|
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 =
|
|
692
|
-
|
|
693
|
-
|
|
694
|
-
|
|
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,5 +1,4 @@
|
|
|
1
1
|
export const bulletList = `
|
|
2
|
-
<Context>
|
|
3
2
|
<bulletList>
|
|
4
3
|
Node: bulletList
|
|
5
4
|
Attrs:
|
|
@@ -13,7 +12,6 @@ Semantics:
|
|
|
13
12
|
- Use when you need bullet points inside a column or blockquote.
|
|
14
13
|
- Do not use bulletList as a top-level child of doc; it belongs inside a column/row structure.
|
|
15
14
|
</bulletList>
|
|
16
|
-
</Context>
|
|
17
15
|
`.trim();
|
|
18
16
|
|
|
19
17
|
|
|
@@ -6,16 +6,6 @@ export const editingRules = `
|
|
|
6
6
|
- Keep the document valid: slide > row > column > blocks.
|
|
7
7
|
</General editing rules>
|
|
8
8
|
|
|
9
|
-
<Layout and structure>
|
|
10
|
-
- Do not change the overall hierarchy: doc > slide > row > column > blocks.
|
|
11
|
-
- You may add, remove, or reorder blocks inside a column if requested, but keep the slide/row/column structure intact.
|
|
12
|
-
- When duplicating content, generate new ids for new nodes but keep existing ids unchanged.
|
|
13
|
-
- Example (valid move):
|
|
14
|
-
- Move a heading block from one column's content array to another column's content array within the same slide.
|
|
15
|
-
- Example (invalid change):
|
|
16
|
-
- Replacing a slide node with a column node, or inserting a column directly under doc.
|
|
17
|
-
</Layout and structure>
|
|
18
|
-
|
|
19
9
|
<Centering content in a column>
|
|
20
10
|
- Columns are flex containers. Use their alignment attrs instead of per-block hacks.
|
|
21
11
|
- To center all content vertically and horizontally inside a column:
|
package/src/contexts/v1/row.ts
CHANGED