@bendyline/squisq 2.3.3 → 2.4.1

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.
Files changed (38) hide show
  1. package/dist/{Doc-BrgZC7SE.d.ts → Doc-CSW6K2UF.d.ts} +222 -9
  2. package/dist/{ImageEditDoc-rum0Xb9P.d.ts → ImageEditDoc-x9yoTb4l.d.ts} +1 -1
  3. package/dist/{chunk-GQNH7PLN.js → chunk-2HY2ZA7U.js} +1470 -77
  4. package/dist/{chunk-G3JOS25T.js → chunk-7TJJA2RI.js} +46 -15
  5. package/dist/{chunk-RS5AP3J4.js → chunk-AE3IUKMM.js} +1 -1
  6. package/dist/{chunk-IZLKI3IL.js → chunk-AQF5ZYDI.js} +76 -16
  7. package/dist/{chunk-QWCFK5FN.js → chunk-CUYHFOFL.js} +5 -1
  8. package/dist/{chunk-2VCNTDNZ.js → chunk-D6YTLQCL.js} +71 -0
  9. package/dist/{chunk-32R2RZAO.js → chunk-DAMIRKTO.js} +1 -1
  10. package/dist/{chunk-ABP4LAJS.js → chunk-EMXYZLRH.js} +1 -1
  11. package/dist/{chunk-2ZWIXGAC.js → chunk-GAZKTT4R.js} +28 -4
  12. package/dist/{chunk-SPTY4C6F.js → chunk-GODLNXO4.js} +45 -3
  13. package/dist/chunk-JUAC2QWP.js +983 -0
  14. package/dist/{chunk-BCCXTMN5.js → chunk-O7JILDEF.js} +7 -0
  15. package/dist/{chunk-C33GTPUZ.js → chunk-SBAX4ZPO.js} +438 -0
  16. package/dist/doc/index.d.ts +113 -6
  17. package/dist/doc/index.js +14 -11
  18. package/dist/generate/index.d.ts +1 -1
  19. package/dist/imageEdit/index.d.ts +3 -3
  20. package/dist/index.d.ts +7 -7
  21. package/dist/index.js +41 -17
  22. package/dist/jsonForm/index.d.ts +1 -1
  23. package/dist/jsonForm/index.js +4 -4
  24. package/dist/markdown/index.d.ts +118 -1
  25. package/dist/markdown/index.js +22 -6
  26. package/dist/{materializePageSection-CrZWYnXM.d.ts → materializePageSection-_rrDuOYU.d.ts} +2 -2
  27. package/dist/narration/index.d.ts +1 -1
  28. package/dist/narration/index.js +6 -6
  29. package/dist/recommend/index.js +2 -2
  30. package/dist/schemas/index.d.ts +32 -5
  31. package/dist/schemas/index.js +9 -3
  32. package/dist/storage/index.d.ts +2 -3
  33. package/dist/{themeLibrary-DJt89gyP.d.ts → themeLibrary-DlJzXsin.d.ts} +1 -1
  34. package/dist/timing/index.d.ts +1 -2
  35. package/dist/transform/index.d.ts +2 -2
  36. package/dist/transform/index.js +2 -2
  37. package/package.json +2 -2
  38. package/dist/chunk-UA5DTYAY.js +0 -400
@@ -440,6 +440,12 @@ function formatBlockScalar(value) {
440
440
  ${body}`;
441
441
  }
442
442
  var FRONTMATTER_BLOCK_RE = /^---\r?\n([\s\S]*?)\r?\n---(\r?\n)?/;
443
+ var EMPTY_FRONTMATTER_BLOCK_RE = /^---\r?\n---(\r?\n)?/;
444
+ function splitFrontmatterBlock(source) {
445
+ const match = FRONTMATTER_BLOCK_RE.exec(source) ?? EMPTY_FRONTMATTER_BLOCK_RE.exec(source);
446
+ if (!match) return { frontmatter: null, body: source };
447
+ return { frontmatter: match[0], body: source.slice(match[0].length) };
448
+ }
443
449
  function formatFrontmatterValue(value) {
444
450
  if (typeof value === "boolean" || typeof value === "number") return String(value);
445
451
  if (/[\r\n]/.test(value)) return formatBlockScalar(value.replace(/\r\n?/g, "\n"));
@@ -689,6 +695,7 @@ export {
689
695
  countNodes,
690
696
  parseFrontmatter,
691
697
  formatBlockScalar,
698
+ splitFrontmatterBlock,
692
699
  formatFrontmatterValue,
693
700
  formatFrontmatterYaml,
694
701
  setFrontmatterValues,
@@ -6,6 +6,424 @@ import {
6
6
  } from "./chunk-4VOD55SX.js";
7
7
 
8
8
  // src/schemas/CustomTemplates.ts
9
+ var LAYER_TYPES = /* @__PURE__ */ new Set([
10
+ "image",
11
+ "text",
12
+ "shape",
13
+ "path",
14
+ "map",
15
+ "video",
16
+ "table",
17
+ "tree",
18
+ "mermaid"
19
+ ]);
20
+ var ANIMATION_TYPES = /* @__PURE__ */ new Set([
21
+ "none",
22
+ "fadeIn",
23
+ "fadeOut",
24
+ "slowZoom",
25
+ "zoomIn",
26
+ "zoomOut",
27
+ "panLeft",
28
+ "panRight",
29
+ "typewriter"
30
+ ]);
31
+ var TemplateValidator = class {
32
+ constructor() {
33
+ this.errors = [];
34
+ }
35
+ error(path, message) {
36
+ this.errors.push({ path, message });
37
+ }
38
+ object(value, path) {
39
+ if (!value || typeof value !== "object" || Array.isArray(value)) {
40
+ this.error(path, "expected object");
41
+ return false;
42
+ }
43
+ return true;
44
+ }
45
+ string(value, path, nonEmpty = false) {
46
+ if (typeof value !== "string" || nonEmpty && value.trim().length === 0) {
47
+ this.error(path, nonEmpty ? "expected non-empty string" : "expected string");
48
+ return false;
49
+ }
50
+ return true;
51
+ }
52
+ number(value, path) {
53
+ if (typeof value !== "number" || !Number.isFinite(value)) {
54
+ this.error(path, "expected finite number");
55
+ return false;
56
+ }
57
+ return true;
58
+ }
59
+ boolean(value, path) {
60
+ if (typeof value !== "boolean") {
61
+ this.error(path, "expected boolean");
62
+ return false;
63
+ }
64
+ return true;
65
+ }
66
+ enum(value, path, allowed) {
67
+ if (typeof value !== "string" || !allowed.has(value)) {
68
+ this.error(path, `expected one of: ${Array.from(allowed).join(", ")}`);
69
+ return false;
70
+ }
71
+ return true;
72
+ }
73
+ };
74
+ function optionalString(v, obj, key, path) {
75
+ if (obj[key] !== void 0) v.string(obj[key], `${path}.${key}`);
76
+ }
77
+ function optionalNumber(v, obj, key, path) {
78
+ if (obj[key] !== void 0) v.number(obj[key], `${path}.${key}`);
79
+ }
80
+ function optionalBoolean(v, obj, key, path) {
81
+ if (obj[key] !== void 0) v.boolean(obj[key], `${path}.${key}`);
82
+ }
83
+ function optionalEnum(v, obj, key, path, allowed) {
84
+ if (obj[key] !== void 0) v.enum(obj[key], `${path}.${key}`, new Set(allowed));
85
+ }
86
+ function validatePosition(v, value, path) {
87
+ if (!v.object(value, path)) return;
88
+ for (const key of ["x", "y"]) validateCoordinate(v, value[key], `${path}.${key}`);
89
+ for (const key of ["width", "height"]) {
90
+ if (value[key] !== void 0) validateCoordinate(v, value[key], `${path}.${key}`);
91
+ }
92
+ optionalEnum(v, value, "anchor", path, [
93
+ "center",
94
+ "top-left",
95
+ "top-right",
96
+ "bottom-left",
97
+ "bottom-right"
98
+ ]);
99
+ }
100
+ function validateCoordinate(v, value, path) {
101
+ if (typeof value === "number" && Number.isFinite(value)) return;
102
+ if (typeof value === "string" && Number.isFinite(Number.parseFloat(value))) return;
103
+ v.error(path, "expected finite number or numeric string");
104
+ }
105
+ function validateAnimation(v, value, path) {
106
+ if (!v.object(value, path)) return;
107
+ v.enum(value.type, `${path}.type`, ANIMATION_TYPES);
108
+ optionalNumber(v, value, "duration", path);
109
+ optionalNumber(v, value, "delay", path);
110
+ optionalString(v, value, "easing", path);
111
+ optionalEnum(v, value, "direction", path, ["in", "out"]);
112
+ optionalEnum(v, value, "panDirection", path, ["left", "right", "up", "down"]);
113
+ }
114
+ function validateRepeat(v, value, path) {
115
+ if (!v.object(value, path)) return;
116
+ v.enum(value.source, `${path}.source`, /* @__PURE__ */ new Set(["images", "children", "listItems"]));
117
+ optionalEnum(v, value, "direction", path, ["row", "column"]);
118
+ optionalNumber(v, value, "gap", path);
119
+ if (value.max !== void 0 && v.number(value.max, `${path}.max`)) {
120
+ if (!Number.isInteger(value.max) || value.max < 0) {
121
+ v.error(`${path}.max`, "expected non-negative integer");
122
+ }
123
+ }
124
+ }
125
+ function validateGradient(v, value, path) {
126
+ if (!v.object(value, path)) return;
127
+ v.string(value.from, `${path}.from`);
128
+ v.string(value.to, `${path}.to`);
129
+ optionalNumber(v, value, "angle", path);
130
+ }
131
+ function validateTextStyle(v, value, path) {
132
+ if (!v.object(value, path)) return;
133
+ v.number(value.fontSize, `${path}.fontSize`);
134
+ v.string(value.color, `${path}.color`);
135
+ optionalString(v, value, "fontFamily", path);
136
+ optionalEnum(v, value, "fontWeight", path, ["normal", "bold"]);
137
+ optionalEnum(v, value, "fontStyle", path, ["normal", "italic"]);
138
+ optionalEnum(v, value, "textAlign", path, ["left", "center", "right"]);
139
+ optionalEnum(v, value, "verticalAlign", path, ["top", "middle", "bottom"]);
140
+ optionalNumber(v, value, "lineHeight", path);
141
+ optionalBoolean(v, value, "shadow", path);
142
+ optionalString(v, value, "background", path);
143
+ optionalNumber(v, value, "backgroundOpacity", path);
144
+ if (value.backgroundGradient !== void 0) {
145
+ validateGradient(v, value.backgroundGradient, `${path}.backgroundGradient`);
146
+ }
147
+ optionalString(v, value, "borderColor", path);
148
+ optionalNumber(v, value, "borderWidth", path);
149
+ optionalEnum(v, value, "borderStyle", path, ["solid", "dashed", "dotted"]);
150
+ optionalNumber(v, value, "padding", path);
151
+ optionalNumber(v, value, "maxLines", path);
152
+ }
153
+ function validateImageContent(v, value, path) {
154
+ if (!v.object(value, path)) return;
155
+ v.string(value.src, `${path}.src`);
156
+ v.string(value.alt, `${path}.alt`);
157
+ optionalEnum(v, value, "fit", path, ["cover", "contain", "fill"]);
158
+ optionalString(v, value, "credit", path);
159
+ optionalString(v, value, "license", path);
160
+ optionalNumber(v, value, "blur", path);
161
+ if (value.treatment !== void 0) {
162
+ const treatmentPath = `${path}.treatment`;
163
+ if (v.object(value.treatment, treatmentPath)) {
164
+ v.enum(
165
+ value.treatment.type,
166
+ `${treatmentPath}.type`,
167
+ /* @__PURE__ */ new Set(["none", "mono", "duotone", "warm", "cool"])
168
+ );
169
+ optionalNumber(v, value.treatment, "strength", treatmentPath);
170
+ optionalString(v, value.treatment, "color", treatmentPath);
171
+ }
172
+ }
173
+ }
174
+ function validateShapeContent(v, value, path) {
175
+ if (!v.object(value, path)) return;
176
+ v.enum(value.shape, `${path}.shape`, /* @__PURE__ */ new Set(["rect", "circle", "line"]));
177
+ optionalString(v, value, "fill", path);
178
+ optionalNumber(v, value, "fillOpacity", path);
179
+ if (value.gradient !== void 0) validateGradient(v, value.gradient, `${path}.gradient`);
180
+ optionalString(v, value, "stroke", path);
181
+ optionalNumber(v, value, "strokeWidth", path);
182
+ optionalEnum(v, value, "borderStyle", path, ["solid", "dashed", "dotted"]);
183
+ optionalNumber(v, value, "borderRadius", path);
184
+ if (value.pattern !== void 0) {
185
+ const patternPath = `${path}.pattern`;
186
+ if (v.object(value.pattern, patternPath)) {
187
+ v.enum(value.pattern.kind, `${patternPath}.kind`, /* @__PURE__ */ new Set(["dots", "grid", "diagonal"]));
188
+ v.string(value.pattern.color, `${patternPath}.color`);
189
+ optionalNumber(v, value.pattern, "size", patternPath);
190
+ optionalNumber(v, value.pattern, "opacity", patternPath);
191
+ }
192
+ }
193
+ if (value.filter !== void 0) {
194
+ const filterPath = `${path}.filter`;
195
+ if (v.object(value.filter, filterPath)) {
196
+ v.enum(value.filter.type, `${filterPath}.type`, /* @__PURE__ */ new Set(["noise"]));
197
+ optionalNumber(v, value.filter, "baseFrequency", filterPath);
198
+ optionalNumber(v, value.filter, "opacity", filterPath);
199
+ }
200
+ }
201
+ }
202
+ function validatePathContent(v, value, path) {
203
+ if (!v.object(value, path)) return;
204
+ v.string(value.d, `${path}.d`);
205
+ optionalString(v, value, "shapeKind", path);
206
+ optionalString(v, value, "stroke", path);
207
+ optionalNumber(v, value, "strokeWidth", path);
208
+ optionalString(v, value, "fill", path);
209
+ optionalNumber(v, value, "fillOpacity", path);
210
+ if (value.gradient !== void 0) validateGradient(v, value.gradient, `${path}.gradient`);
211
+ optionalEnum(v, value, "borderStyle", path, ["solid", "dashed", "dotted"]);
212
+ optionalString(v, value, "dasharray", path);
213
+ const markers = ["none", "arrow", "open", "diamond", "circle", "square"];
214
+ optionalEnum(v, value, "startMarker", path, markers);
215
+ optionalEnum(v, value, "endMarker", path, markers);
216
+ }
217
+ function validateMapContent(v, value, path) {
218
+ if (!v.object(value, path)) return;
219
+ if (v.object(value.center, `${path}.center`)) {
220
+ v.number(value.center.lat, `${path}.center.lat`);
221
+ v.number(value.center.lng, `${path}.center.lng`);
222
+ }
223
+ v.number(value.zoom, `${path}.zoom`);
224
+ v.enum(
225
+ value.style,
226
+ `${path}.style`,
227
+ /* @__PURE__ */ new Set(["terrain", "satellite", "road", "toner", "watercolor"])
228
+ );
229
+ optionalString(v, value, "staticSrc", path);
230
+ optionalBoolean(v, value, "showAttribution", path);
231
+ if (value.markers !== void 0) {
232
+ if (!Array.isArray(value.markers)) {
233
+ v.error(`${path}.markers`, "expected array");
234
+ } else {
235
+ value.markers.forEach((marker, index) => {
236
+ const markerPath = `${path}.markers[${index}]`;
237
+ if (!v.object(marker, markerPath)) return;
238
+ v.number(marker.lat, `${markerPath}.lat`);
239
+ v.number(marker.lng, `${markerPath}.lng`);
240
+ optionalString(v, marker, "label", markerPath);
241
+ optionalString(v, marker, "color", markerPath);
242
+ optionalEnum(v, marker, "icon", markerPath, ["pin", "circle", "star"]);
243
+ });
244
+ }
245
+ }
246
+ }
247
+ function validateVideoContent(v, value, path) {
248
+ if (!v.object(value, path)) return;
249
+ v.string(value.src, `${path}.src`);
250
+ v.string(value.alt, `${path}.alt`);
251
+ v.number(value.clipStart, `${path}.clipStart`);
252
+ v.number(value.clipEnd, `${path}.clipEnd`);
253
+ optionalString(v, value, "posterSrc", path);
254
+ optionalEnum(v, value, "fit", path, ["cover", "contain", "fill"]);
255
+ optionalNumber(v, value, "sourceDuration", path);
256
+ optionalNumber(v, value, "startAt", path);
257
+ optionalBoolean(v, value, "spillover", path);
258
+ optionalString(v, value, "credit", path);
259
+ optionalString(v, value, "license", path);
260
+ }
261
+ function validateTableContent(v, value, path) {
262
+ if (!v.object(value, path)) return;
263
+ validateStringArray(v, value.headers, `${path}.headers`);
264
+ if (!Array.isArray(value.rows)) {
265
+ v.error(`${path}.rows`, "expected array");
266
+ } else {
267
+ value.rows.forEach((row, index) => validateStringArray(v, row, `${path}.rows[${index}]`));
268
+ }
269
+ if (value.align !== void 0) {
270
+ if (!Array.isArray(value.align)) {
271
+ v.error(`${path}.align`, "expected array");
272
+ } else {
273
+ const alignments = /* @__PURE__ */ new Set(["left", "right", "center"]);
274
+ value.align.forEach((entry, index) => {
275
+ if (entry !== null) v.enum(entry, `${path}.align[${index}]`, alignments);
276
+ });
277
+ }
278
+ }
279
+ if (v.object(value.style, `${path}.style`)) {
280
+ for (const key of [
281
+ "headerBackground",
282
+ "headerColor",
283
+ "cellBackground",
284
+ "cellColor",
285
+ "borderColor"
286
+ ]) {
287
+ v.string(value.style[key], `${path}.style.${key}`);
288
+ }
289
+ v.number(value.style.fontSize, `${path}.style.fontSize`);
290
+ optionalString(v, value.style, "fontFamily", `${path}.style`);
291
+ optionalString(v, value.style, "headerFontFamily", `${path}.style`);
292
+ optionalNumber(v, value.style, "borderRadius", `${path}.style`);
293
+ }
294
+ }
295
+ function validateStringArray(v, value, path) {
296
+ if (!Array.isArray(value)) {
297
+ v.error(path, "expected string array");
298
+ return;
299
+ }
300
+ value.forEach((entry, index) => v.string(entry, `${path}[${index}]`));
301
+ }
302
+ function validateTreeContent(v, value, path) {
303
+ if (!v.object(value, path)) return;
304
+ if (!Array.isArray(value.items)) {
305
+ v.error(`${path}.items`, "expected array");
306
+ } else {
307
+ value.items.forEach((item, index) => validateTreeItem(v, item, `${path}.items[${index}]`, 0));
308
+ }
309
+ if (v.object(value.style, `${path}.style`)) {
310
+ for (const key of ["rowColor", "dirColor", "connectorColor", "iconColor", "commentColor"]) {
311
+ v.string(value.style[key], `${path}.style.${key}`);
312
+ }
313
+ v.number(value.style.fontSize, `${path}.style.fontSize`);
314
+ v.number(value.style.indentPx, `${path}.style.indentPx`);
315
+ optionalString(v, value.style, "fontFamily", `${path}.style`);
316
+ optionalString(v, value.style, "monoFontFamily", `${path}.style`);
317
+ optionalString(v, value.style, "folderIcon", `${path}.style`);
318
+ optionalString(v, value.style, "fileIcon", `${path}.style`);
319
+ }
320
+ }
321
+ function validateTreeItem(v, value, path, depth) {
322
+ if (depth > 100) {
323
+ v.error(path, "tree nesting exceeds 100 levels");
324
+ return;
325
+ }
326
+ if (!v.object(value, path)) return;
327
+ v.string(value.id, `${path}.id`);
328
+ v.string(value.label, `${path}.label`);
329
+ optionalBoolean(v, value, "isDir", path);
330
+ optionalString(v, value, "comment", path);
331
+ if (!Array.isArray(value.children)) {
332
+ v.error(`${path}.children`, "expected array");
333
+ } else {
334
+ value.children.forEach(
335
+ (child, index) => validateTreeItem(v, child, `${path}.children[${index}]`, depth + 1)
336
+ );
337
+ }
338
+ }
339
+ function validateMermaidContent(v, value, path) {
340
+ if (!v.object(value, path)) return;
341
+ v.string(value.source, `${path}.source`);
342
+ optionalString(v, value, "background", path);
343
+ optionalString(v, value, "foreground", path);
344
+ optionalNumber(v, value, "padding", path);
345
+ }
346
+ function validateLayer(v, value, path) {
347
+ if (!v.object(value, path)) return;
348
+ v.string(value.id, `${path}.id`, true);
349
+ validatePosition(v, value.position, `${path}.position`);
350
+ if (value.animation !== void 0) validateAnimation(v, value.animation, `${path}.animation`);
351
+ if (value.repeat !== void 0) validateRepeat(v, value.repeat, `${path}.repeat`);
352
+ if (!v.enum(value.type, `${path}.type`, LAYER_TYPES)) return;
353
+ const contentPath = `${path}.content`;
354
+ switch (value.type) {
355
+ case "image":
356
+ validateImageContent(v, value.content, contentPath);
357
+ break;
358
+ case "text":
359
+ if (v.object(value.content, contentPath)) {
360
+ v.string(value.content.text, `${contentPath}.text`);
361
+ optionalString(v, value.content, "html", contentPath);
362
+ validateTextStyle(v, value.content.style, `${contentPath}.style`);
363
+ }
364
+ break;
365
+ case "shape":
366
+ validateShapeContent(v, value.content, contentPath);
367
+ break;
368
+ case "path":
369
+ validatePathContent(v, value.content, contentPath);
370
+ break;
371
+ case "map":
372
+ validateMapContent(v, value.content, contentPath);
373
+ break;
374
+ case "video":
375
+ validateVideoContent(v, value.content, contentPath);
376
+ break;
377
+ case "table":
378
+ validateTableContent(v, value.content, contentPath);
379
+ break;
380
+ case "tree":
381
+ validateTreeContent(v, value.content, contentPath);
382
+ break;
383
+ case "mermaid":
384
+ validateMermaidContent(v, value.content, contentPath);
385
+ break;
386
+ }
387
+ }
388
+ function validateCustomTemplateDefinition(input) {
389
+ const v = new TemplateValidator();
390
+ if (!v.object(input, "$")) return { valid: false, errors: v.errors };
391
+ v.string(input.name, "$.name", true);
392
+ v.string(input.label, "$.label", true);
393
+ if (input.description !== void 0) v.string(input.description, "$.description");
394
+ if (v.object(input.viewport, "$.viewport")) {
395
+ if (v.number(input.viewport.width, "$.viewport.width") && input.viewport.width <= 0) {
396
+ v.error("$.viewport.width", "expected number greater than zero");
397
+ }
398
+ if (v.number(input.viewport.height, "$.viewport.height") && input.viewport.height <= 0) {
399
+ v.error("$.viewport.height", "expected number greater than zero");
400
+ }
401
+ }
402
+ if (!Array.isArray(input.layers)) {
403
+ v.error("$.layers", "expected array");
404
+ } else {
405
+ const ids = /* @__PURE__ */ new Set();
406
+ input.layers.forEach((layer, index) => {
407
+ validateLayer(v, layer, `$.layers[${index}]`);
408
+ if (layer && typeof layer === "object" && !Array.isArray(layer)) {
409
+ const id = layer.id;
410
+ if (typeof id === "string") {
411
+ if (ids.has(id)) v.error(`$.layers[${index}].id`, `duplicate layer id "${id}"`);
412
+ ids.add(id);
413
+ }
414
+ }
415
+ });
416
+ }
417
+ if (v.errors.length > 0) return { valid: false, errors: v.errors };
418
+ return {
419
+ valid: true,
420
+ errors: [],
421
+ template: input
422
+ };
423
+ }
424
+ function isCustomTemplateDefinition(input) {
425
+ return validateCustomTemplateDefinition(input).valid;
426
+ }
9
427
  var FRONTMATTER_CUSTOM_TEMPLATES_KEY = "squisq-custom-templates";
10
428
 
11
429
  // src/schemas/themeConstants.ts
@@ -383,6 +801,24 @@ var V = class {
383
801
  if (v.imageTreatment !== void 0) {
384
802
  this.imageTreatment(`${path}.imageTreatment`, v.imageTreatment);
385
803
  }
804
+ if (v.pip !== void 0) {
805
+ this.pip(`${path}.pip`, v.pip);
806
+ }
807
+ }
808
+ pip(path, v) {
809
+ if (!this.isObject(v)) {
810
+ this.err(path, "expected object");
811
+ return;
812
+ }
813
+ if (v.cornerRadius !== void 0 && !this.isNumber(v.cornerRadius) && !this.isString(v.cornerRadius)) {
814
+ this.err(`${path}.cornerRadius`, "expected number or string");
815
+ }
816
+ if (v.border !== void 0 && v.border !== "none" && !this.isObject(v.border)) {
817
+ this.err(`${path}.border`, "expected 'none' or { width?, color? }");
818
+ }
819
+ if (v.shadow !== void 0 && !this.isBoolean(v.shadow) && !this.isString(v.shadow)) {
820
+ this.err(`${path}.shadow`, "expected boolean or string");
821
+ }
386
822
  }
387
823
  imageTreatment(path, v) {
388
824
  if (!this.isObject(v)) {
@@ -2335,6 +2771,8 @@ function matchFontFamily(name) {
2335
2771
  }
2336
2772
 
2337
2773
  export {
2774
+ validateCustomTemplateDefinition,
2775
+ isCustomTemplateDefinition,
2338
2776
  FRONTMATTER_CUSTOM_TEMPLATES_KEY,
2339
2777
  THEME_SCHEMA_VERSION,
2340
2778
  isHex,
@@ -1,11 +1,11 @@
1
- import { aY as TemplateBlock, aZ as TemplateContext, W as Layer, q as CustomTemplateDefinition, a$ as TemplateRegistry, b2 as Theme, br as ViewportConfig, aA as PersistentLayerConfig, H as DocBlock, bs as ViewportOrientation, az as PersistentLayer, bf as TitleBlockInput, aN as SectionHeaderInput, o as ContentBlockInput, aT as StatHighlightInput, aI as QuoteBlockInput, M as FactCardInput, bm as TwoColumnInput, v as DateEventInput, U as ImageWithCaptionInput, Z as LeftFeatureInput, aL as RightFeatureInput, a0 as MapBlockInput, aS as StartBlockConfig, P as FullBleedQuoteInput, $ as ListBlockInput, aE as PhotoGridInput, x as DefinitionCardInput, n as ComparisonBarInput, aH as PullQuoteInput, bq as VideoWithCaptionInput, bp as VideoPullQuoteInput, u as DataTableInput, y as DiagramBlockInput, bh as TreeBlockInput, bb as TimelineBlockInput, B as Block, J as DrawingBlockInput, a4 as MarkerStyle, A as AccentImage, T as ImageTreatment, a as AccentPosition, c as Animation, d as AnimationType, b4 as ThemeColorScheme, G as Doc, b6 as ThemeRegistry, as as PageEmphasis, b5 as ThemePageStyle, I as DocDiagnostic, F as DiagramTemplateNode, E as DiagramTemplateEdge, be as TimelineTemplateTrack, bd as TimelineTemplateLink } from '../Doc-BrgZC7SE.js';
2
- export { K as FRONTMATTER_CUSTOM_TEMPLATES_KEY, L as FRONTMATTER_CUSTOM_THEMES_KEY, Y as LayoutHints, aK as RenderStyle, b3 as ThemeColorPalette, b9 as ThemeStyle, ba as ThemeTypography, bn as VIEWPORT_PRESETS, bt as ViewportPreset, by as createTemplateContext, bF as getLayoutHints, bI as getTwoColumnPositions, bJ as getViewport, bK as getViewportOrientation, bM as isTemplateBlock, bP as scaledFontSize } from '../Doc-BrgZC7SE.js';
1
+ import { ba as TemplateBlock, bb as TemplateContext, a2 as Layer, v as CustomTemplateDefinition, bd as TemplateRegistry, bg as Theme, bK as ViewportConfig, aK as PersistentLayerConfig, O as DocBlock, bL as ViewportOrientation, aJ as PersistentLayer, bt as TitleBlockInput, a$ as SectionHeaderInput, t as ContentBlockInput, b5 as StatHighlightInput, aV as QuoteBlockInput, U as FactCardInput, bA as TwoColumnInput, G as DateEventInput, a0 as ImageWithCaptionInput, a5 as LeftFeatureInput, aY as RightFeatureInput, a9 as MapBlockInput, b4 as StartBlockConfig, X as FullBleedQuoteInput, a8 as ListBlockInput, aO as PhotoGridInput, I as DefinitionCardInput, s as ComparisonBarInput, aU as PullQuoteInput, bJ as VideoWithCaptionInput, bI as VideoPullQuoteInput, F as DataTableInput, J as DiagramBlockInput, bv as TreeBlockInput, bp as TimelineBlockInput, j as Block, R as DrawingBlockInput, ad as MarkerStyle, A as AccentImage, $ as ImageTreatment, a as AccentPosition, c as Animation, d as AnimationType, bi as ThemeColorScheme, N as Doc, bk as ThemeRegistry, aC as PageEmphasis, bj as ThemePageStyle, P as DocDiagnostic, M as DiagramTemplateNode, L as DiagramTemplateEdge, bs as TimelineTemplateTrack, br as TimelineTemplateLink } from '../Doc-CSW6K2UF.js';
2
+ export { S as FRONTMATTER_CUSTOM_TEMPLATES_KEY, T as FRONTMATTER_CUSTOM_THEMES_KEY, a4 as LayoutHints, aX as RenderStyle, bh as ThemeColorPalette, bn as ThemeStyle, bo as ThemeTypography, bB as VIEWPORT_PRESETS, bM as ViewportPreset, bR as createTemplateContext, bY as getLayoutHints, b$ as getTwoColumnPositions, c0 as getViewport, c1 as getViewportOrientation, c4 as isTemplateBlock, c7 as scaledFontSize } from '../Doc-CSW6K2UF.js';
3
3
  import { K as MarkdownNode, a2 as TransitionType, a1 as TransitionDirection, M as MarkdownBlockNode, r as MarkdownHeading, n as MarkdownDocument, S as MarkdownTable, i as MarkdownCodeBlock, F as MarkdownList } from '../types-CUNc9biN.js';
4
4
  import { C as CoercedBlockMeta } from '../annotationCoercion-PtRQhk5V.js';
5
- import { c as PageSection } from '../materializePageSection-CrZWYnXM.js';
6
- export { M as MaterializePageSectionOptions, a as MaterializePageSectionsOptions, P as PageMedia, b as PageRichText, d as PageSectionDiagnostic, e as PageSectionItem, f as PageSectionMaterialization, g as PageSectionSource, h as PageSpatialKind, i as PageTransformHints, m as materializePageSection, j as materializePageSections, r as resolvePageStyle } from '../materializePageSection-CrZWYnXM.js';
5
+ import { c as PageSection } from '../materializePageSection-_rrDuOYU.js';
6
+ export { M as MaterializePageSectionOptions, a as MaterializePageSectionsOptions, P as PageMedia, b as PageRichText, d as PageSectionDiagnostic, e as PageSectionItem, f as PageSectionMaterialization, g as PageSectionSource, h as PageSpatialKind, i as PageTransformHints, m as materializePageSection, j as materializePageSections, r as resolvePageStyle } from '../materializePageSection-_rrDuOYU.js';
7
7
  import { C as ContentContainer } from '../ContentContainer-B2w9sUoL.js';
8
- export { D as DEFAULT_THEME, g as getAvailableThemes, b as getThemeSummaries, r as resolveTheme } from '../themeLibrary-DJt89gyP.js';
8
+ export { D as DEFAULT_THEME, g as getAvailableThemes, b as getThemeSummaries, r as resolveTheme } from '../themeLibrary-DlJzXsin.js';
9
9
 
10
10
  /** Runtime registry composition for built-in and document-scoped templates. */
11
11
 
@@ -251,6 +251,48 @@ declare const TEMPLATE_AUTHORING_METADATA: {
251
251
  readonly safeForContentFirst: false;
252
252
  readonly placement: "heading";
253
253
  };
254
+ readonly barChart: {
255
+ readonly role: "data";
256
+ readonly bodyPolicy: "structured";
257
+ readonly safeForContentFirst: false;
258
+ readonly placement: "heading";
259
+ };
260
+ readonly columnChart: {
261
+ readonly role: "data";
262
+ readonly bodyPolicy: "structured";
263
+ readonly safeForContentFirst: false;
264
+ readonly placement: "heading";
265
+ };
266
+ readonly pieChart: {
267
+ readonly role: "data";
268
+ readonly bodyPolicy: "structured";
269
+ readonly safeForContentFirst: false;
270
+ readonly placement: "heading";
271
+ };
272
+ readonly donutChart: {
273
+ readonly role: "data";
274
+ readonly bodyPolicy: "structured";
275
+ readonly safeForContentFirst: false;
276
+ readonly placement: "heading";
277
+ };
278
+ readonly lineChart: {
279
+ readonly role: "data";
280
+ readonly bodyPolicy: "structured";
281
+ readonly safeForContentFirst: false;
282
+ readonly placement: "heading";
283
+ };
284
+ readonly areaChart: {
285
+ readonly role: "data";
286
+ readonly bodyPolicy: "structured";
287
+ readonly safeForContentFirst: false;
288
+ readonly placement: "heading";
289
+ };
290
+ readonly scatterChart: {
291
+ readonly role: "data";
292
+ readonly bodyPolicy: "structured";
293
+ readonly safeForContentFirst: false;
294
+ readonly placement: "heading";
295
+ };
254
296
  readonly diagram: {
255
297
  readonly role: "spatial";
256
298
  readonly bodyPolicy: "structured";
@@ -499,6 +541,55 @@ declare const BLOCK_MEDIA_LAYOUT_POLICIES: {
499
541
  readonly unconsumedMedia: "reserved-slot";
500
542
  readonly variants: SupplementalMediaVariantMatrix;
501
543
  };
544
+ readonly barChart: {
545
+ readonly summary: "The chart remains wide; supplemental media stacks below the dense data region.";
546
+ readonly noMedia: "template-default";
547
+ readonly ownership: "supplemental";
548
+ readonly unconsumedMedia: "reserved-slot";
549
+ readonly variants: SupplementalMediaVariantMatrix;
550
+ };
551
+ readonly columnChart: {
552
+ readonly summary: "The chart remains wide; supplemental media stacks below the dense data region.";
553
+ readonly noMedia: "template-default";
554
+ readonly ownership: "supplemental";
555
+ readonly unconsumedMedia: "reserved-slot";
556
+ readonly variants: SupplementalMediaVariantMatrix;
557
+ };
558
+ readonly pieChart: {
559
+ readonly summary: "The chart remains wide; supplemental media stacks below the dense data region.";
560
+ readonly noMedia: "template-default";
561
+ readonly ownership: "supplemental";
562
+ readonly unconsumedMedia: "reserved-slot";
563
+ readonly variants: SupplementalMediaVariantMatrix;
564
+ };
565
+ readonly donutChart: {
566
+ readonly summary: "The chart remains wide; supplemental media stacks below the dense data region.";
567
+ readonly noMedia: "template-default";
568
+ readonly ownership: "supplemental";
569
+ readonly unconsumedMedia: "reserved-slot";
570
+ readonly variants: SupplementalMediaVariantMatrix;
571
+ };
572
+ readonly lineChart: {
573
+ readonly summary: "The chart remains wide; supplemental media stacks below the dense data region.";
574
+ readonly noMedia: "template-default";
575
+ readonly ownership: "supplemental";
576
+ readonly unconsumedMedia: "reserved-slot";
577
+ readonly variants: SupplementalMediaVariantMatrix;
578
+ };
579
+ readonly areaChart: {
580
+ readonly summary: "The chart remains wide; supplemental media stacks below the dense data region.";
581
+ readonly noMedia: "template-default";
582
+ readonly ownership: "supplemental";
583
+ readonly unconsumedMedia: "reserved-slot";
584
+ readonly variants: SupplementalMediaVariantMatrix;
585
+ };
586
+ readonly scatterChart: {
587
+ readonly summary: "The chart remains wide; supplemental media stacks below the dense data region.";
588
+ readonly noMedia: "template-default";
589
+ readonly ownership: "supplemental";
590
+ readonly unconsumedMedia: "reserved-slot";
591
+ readonly variants: SupplementalMediaVariantMatrix;
592
+ };
502
593
  readonly diagram: {
503
594
  readonly summary: "The node-and-edge canvas is intrinsic media and retains its spatial coordinate system.";
504
595
  readonly noMedia: "intrinsic-visual";
@@ -545,6 +636,12 @@ declare function getBlockMediaLayoutPolicy(template: string | undefined): BlockM
545
636
 
546
637
  /** Resolve a historical template id to its canonical registry key. */
547
638
  declare function resolveTemplateName(name: string): string;
639
+ /**
640
+ * Templates whose data is the first GFM table in the block body: the parse
641
+ * pipeline promotes that table into `templateData.headers`/`rows` unless the
642
+ * author already supplied them (data fence / `{[…]}` params).
643
+ */
644
+ declare const TABLE_FED_TEMPLATES: ReadonlySet<string>;
548
645
  /** Templates that consume their child headings rather than rendering them. */
549
646
  declare const CONTAINER_TEMPLATES: ReadonlySet<string>;
550
647
  /** True when `name` (or its alias) consumes child blocks. */
@@ -1395,6 +1492,16 @@ interface ExpandDocBlocksOptions {
1395
1492
  * ensuring proper synchronization with audio playback.
1396
1493
  */
1397
1494
  audioSegments?: AudioSegmentTiming[];
1495
+ /**
1496
+ * Split any block whose *scheduled* duration exceeds ~20s into repeated parts
1497
+ * so a single slide never lingers too long during timed playback (video).
1498
+ * Each part re-shows the same content — correct for a continuous medium, but
1499
+ * for discrete-slide consumers it produces duplicate slides. Emitters of
1500
+ * discrete slides (e.g. the PPTX exporter) pass `false` so one authored slide
1501
+ * stays one slide, matching the slideshow. Only affects the audio-timed path;
1502
+ * defaults to `true` to preserve video/narration pacing.
1503
+ */
1504
+ splitLongBlocks?: boolean;
1398
1505
  /**
1399
1506
  * User-defined custom templates to merge onto the built-in registry
1400
1507
  * before expanding blocks. Typically passed straight from
@@ -2970,4 +3077,4 @@ declare function treeFromMarkdownList(list: MarkdownList): Tree;
2970
3077
  /** Find the first top-level markdown list in a block's body, if any. */
2971
3078
  declare function findFirstList(contents: MarkdownBlockNode[] | undefined): MarkdownList | undefined;
2972
3079
 
2973
- export { ASCII_CHAR_H, ASCII_CHAR_W, ASCII_DIAGRAM_FENCE_LANGS, ASCII_TIMELINE_FENCE_LANGS, type AccentLayout, type AsciiDiagram, type AsciiDiagramDetection, type AsciiDiagramEdge, type AsciiDiagramNode, type AsciiTimeline, type AsciiTimelineDetection, type AsciiTimelineEvent, type AsciiTimelineLink, type AsciiTimelineMarker, type AsciiTimelineSide, type AsciiTimelineStats, type AsciiTimelineStyle, type AsciiTimelineTrack, type AudioSegmentTiming, BASE_INPUT_DESCRIPTORS, BLOCK_MEDIA_LAYOUT_POLICIES, type BlockLayerMaterialization, type BlockMediaLayoutPolicy, type BuiltInTemplateName, CONTAINER_TEMPLATES, type ClipBox, type ConnectorAnchor, type ConnectorPort, type ConnectorRouting, type ConnectorSnapPoint, type CoverBlockInput, DEFAULT_LAYOUT, DIAGRAM_LABEL_HORIZONTAL_PADDING, DIAGRAM_LABEL_LINE_HEIGHT, DIAGRAM_LABEL_MIN_FONT_SIZE, DIAGRAM_LABEL_VERTICAL_PADDING, type DataFenceParseResult, type DeriveTemplateInputsOptions, type DetectAsciiTimelineOptions, type DiagramEdge, type DiagramLabelFit, type DiagramLayout, type DiagramLayoutOptions, type DiagramNodePosition, DocBlock, type DrawingConnector, type DrawingLayout, type DrawingLayoutOptions, type DrawingShape, type DrawingShapeKind, type EmbeddedVideo, type ExpandDocBlocksOptions, type ExtractedTableData, type FirstImage, type InputCoercion, type LayerMaterializationDiagnostic, type LayerMaterializationFailureMode, type LayerMaterializationSource, type LayoutLayerDefaults, type LayoutLayersResult, type MarkdownToDocOptions, type MarkdownValidationResult, type MaterializeBlockLayersOptions, type NarrationResolution, type NativeMediaLayout, type NoMediaLayout, PAGE_BASE_CSS, PATH_SHAPE_KINDS, PageSection, type PageSectionContext, type PageSectionDraft, PersistentLayerConfig, type RenderAsciiDiagramOptions, type RenderAsciiTimelineOptions, type RenderTreeOptions, type RepairResult, type ResolvedPageBlock, type RichListItem, type RuntimeTemplateRegistry, SHAPE_NAMES, type SectionExtractor, type SupplementalMediaLayoutVariant, type SupplementalMediaShape, type SupplementalMediaVariantMatrix, TEMPLATE_AUTHORING_METADATA, TEMPLATE_INPUT_DESCRIPTORS, TEMPLATE_METADATA, TREE_FENCE_LANGS, type TemplateAuthoringMetadata, type TemplateAuthoringRole, TemplateBlock, type TemplateBodyPolicy, TemplateContext, type TemplateInputDescriptor, type TemplateMediaOwnership, type TemplateMetadata, type TemplateParamFinding, Theme, ThemeColorScheme, type Tree, type TreeDetection, type TreeItem, type TreeNode, type UnconsumedMediaBehavior, type ValidateOptions, ViewportConfig, ViewportOrientation, adjustY, anchorPoint, applyNarrationTiming, applyRenderStyleToLayers, asciiCellToCanvas, asciiDiagramFromBlocks, asciiDiagramFromTemplateData, asciiDiagramToTemplateData, asciiTimelineToTemplateData, autoTemplatePreservesContent, buildPageCss, buildPageCssVars, buildRegistry, canvasToAsciiCell, clipEndpoints, clipPoint, coerceTemplateParams, comparisonBar, computeDiagramLayout, computeDrawingLayout, computeLayoutLayers, connectorPath, contentBlock, countBlocks, coverBlock, createAccentLayers, cssFilterForTreatment, dataTable, dateEvent, definitionCard, deriveTemplateInputs, detectAsciiDiagram, detectAsciiTimeline, detectTree, diagramBlock, docToMarkdown, drawingBlock, expandCoverBlock, expandDocBlocks, expandPersistentLayers, extractBlockquoteText, extractBodyPlainText, extractEmbeddedVideos, extractFirstEmbeddedVideo, extractFirstImage, extractImages, extractListItems, extractRichListItems, extractTableData, extractTableFromContents, factCard, fallbackBlockLayers, findFirstList, findFirstTable, fitDiagramLabel, flattenBlocks, flattenRenderableBlocks, fullBleedQuote, getAccentLayout, getAnimationProgress, getAnimationStyle, getAvailableTemplates, getBlockBodyText, getBlockDepth, getBlockMediaLayoutPolicy, getDefaultAnimation, getDefaultAnimationDuration, getOverlayOpacity, getPersistentLayersFromTheme, getPinnedBlockMeta, getTemplateHint, getThemeFont, getTransitionClass, hasTemplate, imageWithCaption, isAsciiDiagramFence, isAsciiTimelineFence, isContainerTemplate, isDataFence, isEligibleAsciiFenceLang, isEligibleAsciiTimelineFenceLang, isEligibleTreeFenceLang, isExplicitDiagramLang, isExplicitTimelineLang, isExplicitTreeLang, isRepairableDiagram, isShapeName, isTemplatedPageBlock, isTreeFence, isWrappedFlowTimelineSource, layoutBlock, leftFeature, lineStyleDasharray, lintTemplateParams, listBlock, mapBlock, markdownToDoc, markerPath, materializeBlockLayers, nearestSnapPoint, normalizeShapeKind, pageStyleDataAttributes, parseAsciiDiagram, parseAsciiTimeline, parseAsciiTimelineWithStats, parseDataFence, parseTree, parseWrappedFlowTimeline, parseYamlSubset, photoGrid, pullQuote, quoteBlock, readCustomTemplatesFromFrontmatter, readCustomThemesFromFrontmatter, renderAsciiDiagram, renderAsciiTimeline, renderTree, repairAsciiDiagram, replaceDataFence, resolveAudioMapping, resolveColorScheme, resolvePageBlock, resolvePersistentLayers, resolveTemplateName, resolveThemeForDoc, rightFeature, scaleAnimationDuration, scoreTextSimilarity, sectionExtractors, sectionHeader, shapePath, shouldUseShadow, snapEndpoints, snapPoints, statHighlight, templateRegistry, themeWantsAmbientMotion, themedEntrance, themedFontSize, themedImageTreatment, themedScrim, themedSurfaceGradient, timelineBlock, titleBlock, treeBlock, treeFromMarkdownList, treeFromTemplateData, treeToTemplateData, twoColumn, validateMarkdownDoc, validateMarkdownSource, videoPullQuote, videoWithCaption, wrapWithPersistentLayers, writeCustomTemplatesToFrontmatter, writeCustomThemesToFrontmatter };
3080
+ export { ASCII_CHAR_H, ASCII_CHAR_W, ASCII_DIAGRAM_FENCE_LANGS, ASCII_TIMELINE_FENCE_LANGS, type AccentLayout, type AsciiDiagram, type AsciiDiagramDetection, type AsciiDiagramEdge, type AsciiDiagramNode, type AsciiTimeline, type AsciiTimelineDetection, type AsciiTimelineEvent, type AsciiTimelineLink, type AsciiTimelineMarker, type AsciiTimelineSide, type AsciiTimelineStats, type AsciiTimelineStyle, type AsciiTimelineTrack, type AudioSegmentTiming, BASE_INPUT_DESCRIPTORS, BLOCK_MEDIA_LAYOUT_POLICIES, type BlockLayerMaterialization, type BlockMediaLayoutPolicy, type BuiltInTemplateName, CONTAINER_TEMPLATES, type ClipBox, type ConnectorAnchor, type ConnectorPort, type ConnectorRouting, type ConnectorSnapPoint, type CoverBlockInput, DEFAULT_LAYOUT, DIAGRAM_LABEL_HORIZONTAL_PADDING, DIAGRAM_LABEL_LINE_HEIGHT, DIAGRAM_LABEL_MIN_FONT_SIZE, DIAGRAM_LABEL_VERTICAL_PADDING, type DataFenceParseResult, type DeriveTemplateInputsOptions, type DetectAsciiTimelineOptions, type DiagramEdge, type DiagramLabelFit, type DiagramLayout, type DiagramLayoutOptions, type DiagramNodePosition, DocBlock, type DrawingConnector, type DrawingLayout, type DrawingLayoutOptions, type DrawingShape, type DrawingShapeKind, type EmbeddedVideo, type ExpandDocBlocksOptions, type ExtractedTableData, type FirstImage, type InputCoercion, type LayerMaterializationDiagnostic, type LayerMaterializationFailureMode, type LayerMaterializationSource, type LayoutLayerDefaults, type LayoutLayersResult, type MarkdownToDocOptions, type MarkdownValidationResult, type MaterializeBlockLayersOptions, type NarrationResolution, type NativeMediaLayout, type NoMediaLayout, PAGE_BASE_CSS, PATH_SHAPE_KINDS, PageSection, type PageSectionContext, type PageSectionDraft, PersistentLayerConfig, type RenderAsciiDiagramOptions, type RenderAsciiTimelineOptions, type RenderTreeOptions, type RepairResult, type ResolvedPageBlock, type RichListItem, type RuntimeTemplateRegistry, SHAPE_NAMES, type SectionExtractor, type SupplementalMediaLayoutVariant, type SupplementalMediaShape, type SupplementalMediaVariantMatrix, TABLE_FED_TEMPLATES, TEMPLATE_AUTHORING_METADATA, TEMPLATE_INPUT_DESCRIPTORS, TEMPLATE_METADATA, TREE_FENCE_LANGS, type TemplateAuthoringMetadata, type TemplateAuthoringRole, TemplateBlock, type TemplateBodyPolicy, TemplateContext, type TemplateInputDescriptor, type TemplateMediaOwnership, type TemplateMetadata, type TemplateParamFinding, Theme, ThemeColorScheme, type Tree, type TreeDetection, type TreeItem, type TreeNode, type UnconsumedMediaBehavior, type ValidateOptions, ViewportConfig, ViewportOrientation, adjustY, anchorPoint, applyNarrationTiming, applyRenderStyleToLayers, asciiCellToCanvas, asciiDiagramFromBlocks, asciiDiagramFromTemplateData, asciiDiagramToTemplateData, asciiTimelineToTemplateData, autoTemplatePreservesContent, buildPageCss, buildPageCssVars, buildRegistry, canvasToAsciiCell, clipEndpoints, clipPoint, coerceTemplateParams, comparisonBar, computeDiagramLayout, computeDrawingLayout, computeLayoutLayers, connectorPath, contentBlock, countBlocks, coverBlock, createAccentLayers, cssFilterForTreatment, dataTable, dateEvent, definitionCard, deriveTemplateInputs, detectAsciiDiagram, detectAsciiTimeline, detectTree, diagramBlock, docToMarkdown, drawingBlock, expandCoverBlock, expandDocBlocks, expandPersistentLayers, extractBlockquoteText, extractBodyPlainText, extractEmbeddedVideos, extractFirstEmbeddedVideo, extractFirstImage, extractImages, extractListItems, extractRichListItems, extractTableData, extractTableFromContents, factCard, fallbackBlockLayers, findFirstList, findFirstTable, fitDiagramLabel, flattenBlocks, flattenRenderableBlocks, fullBleedQuote, getAccentLayout, getAnimationProgress, getAnimationStyle, getAvailableTemplates, getBlockBodyText, getBlockDepth, getBlockMediaLayoutPolicy, getDefaultAnimation, getDefaultAnimationDuration, getOverlayOpacity, getPersistentLayersFromTheme, getPinnedBlockMeta, getTemplateHint, getThemeFont, getTransitionClass, hasTemplate, imageWithCaption, isAsciiDiagramFence, isAsciiTimelineFence, isContainerTemplate, isDataFence, isEligibleAsciiFenceLang, isEligibleAsciiTimelineFenceLang, isEligibleTreeFenceLang, isExplicitDiagramLang, isExplicitTimelineLang, isExplicitTreeLang, isRepairableDiagram, isShapeName, isTemplatedPageBlock, isTreeFence, isWrappedFlowTimelineSource, layoutBlock, leftFeature, lineStyleDasharray, lintTemplateParams, listBlock, mapBlock, markdownToDoc, markerPath, materializeBlockLayers, nearestSnapPoint, normalizeShapeKind, pageStyleDataAttributes, parseAsciiDiagram, parseAsciiTimeline, parseAsciiTimelineWithStats, parseDataFence, parseTree, parseWrappedFlowTimeline, parseYamlSubset, photoGrid, pullQuote, quoteBlock, readCustomTemplatesFromFrontmatter, readCustomThemesFromFrontmatter, renderAsciiDiagram, renderAsciiTimeline, renderTree, repairAsciiDiagram, replaceDataFence, resolveAudioMapping, resolveColorScheme, resolvePageBlock, resolvePersistentLayers, resolveTemplateName, resolveThemeForDoc, rightFeature, scaleAnimationDuration, scoreTextSimilarity, sectionExtractors, sectionHeader, shapePath, shouldUseShadow, snapEndpoints, snapPoints, statHighlight, templateRegistry, themeWantsAmbientMotion, themedEntrance, themedFontSize, themedImageTreatment, themedScrim, themedSurfaceGradient, timelineBlock, titleBlock, treeBlock, treeFromMarkdownList, treeFromTemplateData, treeToTemplateData, twoColumn, validateMarkdownDoc, validateMarkdownSource, videoPullQuote, videoWithCaption, wrapWithPersistentLayers, writeCustomTemplatesToFrontmatter, writeCustomThemesToFrontmatter };