@bendyline/squisq 2.13.4 → 2.13.5

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 (34) hide show
  1. package/dist/{Doc-DnRFE0EI.d.ts → Doc-BQUVDooL.d.ts} +9 -0
  2. package/dist/{ImageEditDoc-CadNz387.d.ts → ImageEditDoc-glA5UUau.d.ts} +1 -1
  3. package/dist/{chunk-D3JQMZUT.js → chunk-CPD3MFX7.js} +1 -1
  4. package/dist/{chunk-POZCKPCO.js → chunk-CZHWFQ7C.js} +1 -1
  5. package/dist/{chunk-DRHJD6U4.js → chunk-F5WTRHWL.js} +4 -4
  6. package/dist/{chunk-JFJZ4NS6.js → chunk-FJNTG3VZ.js} +2 -2
  7. package/dist/{chunk-FIPRGGXD.js → chunk-FSZ6HB7S.js} +1 -1
  8. package/dist/{chunk-BITSNRJH.js → chunk-K75GTKSN.js} +5 -5
  9. package/dist/{chunk-6NWVLLMI.js → chunk-KVEOD57Z.js} +5 -0
  10. package/dist/{chunk-ISVJ42I3.js → chunk-SG3HXPMF.js} +3 -0
  11. package/dist/{chunk-J2NFT7GH.js → chunk-ZF4NWRZU.js} +144 -34
  12. package/dist/doc/index.d.ts +10 -6
  13. package/dist/doc/index.js +6 -6
  14. package/dist/fence/index.d.ts +1 -1
  15. package/dist/generate/index.d.ts +1 -1
  16. package/dist/imageEdit/index.d.ts +3 -3
  17. package/dist/index.d.ts +5 -5
  18. package/dist/index.js +11 -9
  19. package/dist/jsonForm/index.d.ts +1 -1
  20. package/dist/jsonForm/index.js +1 -1
  21. package/dist/markdown/index.d.ts +6 -1
  22. package/dist/markdown/index.js +5 -3
  23. package/dist/{materializePageSection-D84uA6Vk.d.ts → materializePageSection-_ftXlwvB.d.ts} +1 -1
  24. package/dist/mediaEdit/index.d.ts +2 -2
  25. package/dist/narration/index.d.ts +1 -1
  26. package/dist/narration/index.js +4 -4
  27. package/dist/recommend/index.js +2 -2
  28. package/dist/schemas/index.d.ts +4 -4
  29. package/dist/schemas/index.js +1 -1
  30. package/dist/{themeLibrary-in0fafp4.d.ts → themeLibrary-D6GK29l3.d.ts} +1 -1
  31. package/dist/timing/index.d.ts +1 -1
  32. package/dist/transform/index.d.ts +2 -2
  33. package/dist/transform/index.js +5 -5
  34. package/package.json +1 -1
@@ -2348,6 +2348,15 @@ interface StartBlockConfig {
2348
2348
  * (so a square crop, such as a social link card, shows all of it).
2349
2349
  */
2350
2350
  coverStyle?: 'scrim' | 'frosted';
2351
+ /**
2352
+ * Where a frosted cover puts its subtitle. `'stacked'` (default): under the title, on the
2353
+ * title's plate. `'split'`: the title on a plate near the top of the frame and the
2354
+ * subtitle, set as a display deck, on a plate of its own near the bottom — a vertical
2355
+ * cover's name and its hook. Both plates stay inside the middle 3:4 that feeds crop a
2356
+ * 9:16 frame to, with even room above the title and below the subtitle. A split that would crowd the frame (two plates closer than half
2357
+ * the title's size) stacks instead. No effect without a subtitle or with the scrim style.
2358
+ */
2359
+ coverLayout?: 'stacked' | 'split';
2351
2360
  }
2352
2361
  /**
2353
2362
  * A structural problem detected while converting or validating a document.
@@ -1,4 +1,4 @@
1
- import { a3 as ImageLayer, by as TextLayer, bj as ShapeLayer, aZ as PathLayer } from './Doc-DnRFE0EI.js';
1
+ import { a3 as ImageLayer, by as TextLayer, bj as ShapeLayer, aZ as PathLayer } from './Doc-BQUVDooL.js';
2
2
 
3
3
  /**
4
4
  * ImageEditDoc — JSON document describing a layered, editable image.
@@ -11,7 +11,7 @@ import {
11
11
  sanitizeUrl,
12
12
  splitKeyValueToken,
13
13
  tokenizeAttrTokens
14
- } from "./chunk-6NWVLLMI.js";
14
+ } from "./chunk-KVEOD57Z.js";
15
15
  import {
16
16
  resolveIcon
17
17
  } from "./chunk-CZ7AUSLI.js";
@@ -16,7 +16,7 @@ import {
16
16
  splitKeyValueToken,
17
17
  tokenizeAttrTokens,
18
18
  walkMarkdownTree
19
- } from "./chunk-6NWVLLMI.js";
19
+ } from "./chunk-KVEOD57Z.js";
20
20
 
21
21
  // src/doc/asciiDiagram/chars.ts
22
22
  function toCells(s) {
@@ -4,7 +4,7 @@ import {
4
4
  flattenRenderableBlocks,
5
5
  getPinnedBlockMeta,
6
6
  markdownToDoc
7
- } from "./chunk-J2NFT7GH.js";
7
+ } from "./chunk-ZF4NWRZU.js";
8
8
  import {
9
9
  deriveTemplateInputs,
10
10
  extractImages,
@@ -12,7 +12,7 @@ import {
12
12
  isAsciiTimelineFence,
13
13
  isPictureFence,
14
14
  isTreeFence
15
- } from "./chunk-POZCKPCO.js";
15
+ } from "./chunk-CZHWFQ7C.js";
16
16
  import {
17
17
  extractContent,
18
18
  mapElementToBlock,
@@ -24,7 +24,7 @@ import {
24
24
  } from "./chunk-WNEH3BZP.js";
25
25
  import {
26
26
  parseMarkdown
27
- } from "./chunk-D3JQMZUT.js";
27
+ } from "./chunk-CPD3MFX7.js";
28
28
  import {
29
29
  isContainerTemplate
30
30
  } from "./chunk-DOOUVVOM.js";
@@ -32,7 +32,7 @@ import {
32
32
  extractPlainText,
33
33
  getChildren,
34
34
  stringifyHtmlNodes
35
- } from "./chunk-6NWVLLMI.js";
35
+ } from "./chunk-KVEOD57Z.js";
36
36
  import {
37
37
  parseBuildSpec
38
38
  } from "./chunk-P53Z4RYC.js";
@@ -3,14 +3,14 @@ import {
3
3
  parseMarkdown,
4
4
  remarkWikiLinks,
5
5
  toMdast
6
- } from "./chunk-D3JQMZUT.js";
6
+ } from "./chunk-CPD3MFX7.js";
7
7
  import {
8
8
  formatFrontmatterYaml,
9
9
  getChildren,
10
10
  splitFrontmatterBlock,
11
11
  stringifyHtmlNodes,
12
12
  walkMarkdownTree
13
- } from "./chunk-6NWVLLMI.js";
13
+ } from "./chunk-KVEOD57Z.js";
14
14
 
15
15
  // src/markdown/stringify.ts
16
16
  import { unified } from "unified";
@@ -8,7 +8,7 @@ import {
8
8
  expectedSyllablesAt,
9
9
  flattenRenderableBlocks,
10
10
  wordPosAtExpectedSyllables
11
- } from "./chunk-J2NFT7GH.js";
11
+ } from "./chunk-ZF4NWRZU.js";
12
12
 
13
13
  // src/narration/types.ts
14
14
  var DEFAULT_FEATURE_CONFIG = Object.freeze({
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-FTN6SGW5.js";
4
4
  import {
5
5
  applySavedPresentation
6
- } from "./chunk-DRHJD6U4.js";
6
+ } from "./chunk-F5WTRHWL.js";
7
7
  import {
8
8
  SHAPE_NAMES,
9
9
  buildChartData,
@@ -31,7 +31,7 @@ import {
31
31
  templateRegistry,
32
32
  writeCustomTemplatesToFrontmatter,
33
33
  writeCustomThemesToFrontmatter
34
- } from "./chunk-J2NFT7GH.js";
34
+ } from "./chunk-ZF4NWRZU.js";
35
35
  import {
36
36
  ASCII_TREE_VOCAB,
37
37
  ASCII_VOCAB,
@@ -54,7 +54,7 @@ import {
54
54
  toCells,
55
55
  toGrid,
56
56
  traceBoxes
57
- } from "./chunk-POZCKPCO.js";
57
+ } from "./chunk-CZHWFQ7C.js";
58
58
  import {
59
59
  iconMarker
60
60
  } from "./chunk-7ZAAICW4.js";
@@ -87,7 +87,7 @@ import {
87
87
  } from "./chunk-L7QZORLB.js";
88
88
  import {
89
89
  parseMarkdown
90
- } from "./chunk-D3JQMZUT.js";
90
+ } from "./chunk-CPD3MFX7.js";
91
91
  import {
92
92
  TABLE_FED_TEMPLATES,
93
93
  TEMPLATE_ALIASES,
@@ -105,7 +105,7 @@ import {
105
105
  parseVideoEmbedUrl,
106
106
  readFrontmatterThemeId,
107
107
  serializeAnnotation
108
- } from "./chunk-6NWVLLMI.js";
108
+ } from "./chunk-KVEOD57Z.js";
109
109
  import {
110
110
  BUILD_PARAM_KEYS,
111
111
  buildSpecParams
@@ -172,11 +172,15 @@ function findNodesByType(root, type) {
172
172
  });
173
173
  return results;
174
174
  }
175
+ function isHtmlLineBreak(rawHtml) {
176
+ return /^<br\s*\/?>$/i.test(rawHtml.trim());
177
+ }
175
178
  function extractPlainText(node) {
176
179
  if ("value" in node && typeof node.value === "string") {
177
180
  return node.value;
178
181
  }
179
182
  if (node.type === "break") return "\n";
183
+ if (node.type === "htmlInline" && isHtmlLineBreak(node.rawHtml)) return "\n";
180
184
  const children = getChildren(node);
181
185
  const separator = node.type === "list" || node.type === "listItem" || node.type === "table" ? "\n" : node.type === "tableRow" ? " " : "";
182
186
  return children.map(extractPlainText).join(separator);
@@ -2433,6 +2437,7 @@ export {
2433
2437
  getChildren,
2434
2438
  walkMarkdownTree,
2435
2439
  findNodesByType,
2440
+ isHtmlLineBreak,
2436
2441
  extractPlainText,
2437
2442
  countNodes,
2438
2443
  parseFrontmatter,
@@ -309,6 +309,9 @@ function validateStartBlock(value, issues) {
309
309
  if (value.coverStyle !== void 0 && value.coverStyle !== "scrim" && value.coverStyle !== "frosted") {
310
310
  add(issues, "startBlock.coverStyle", 'must be "scrim" or "frosted"', value.coverStyle);
311
311
  }
312
+ if (value.coverLayout !== void 0 && value.coverLayout !== "stacked" && value.coverLayout !== "split") {
313
+ add(issues, "startBlock.coverLayout", 'must be "stacked" or "split"', value.coverLayout);
314
+ }
312
315
  }
313
316
  function validateCaptions(value, issues) {
314
317
  if (!isRecord(value)) {
@@ -32,7 +32,7 @@ import {
32
32
  profileBlockContents,
33
33
  renderMarkdownBlocksHtml,
34
34
  treeToTemplateData
35
- } from "./chunk-POZCKPCO.js";
35
+ } from "./chunk-CZHWFQ7C.js";
36
36
  import {
37
37
  anchorPoint,
38
38
  base64ToUtf8,
@@ -81,7 +81,7 @@ import {
81
81
  parseVideoEmbedUrl,
82
82
  readFrontmatterThemeId,
83
83
  walkMarkdownTree
84
- } from "./chunk-6NWVLLMI.js";
84
+ } from "./chunk-KVEOD57Z.js";
85
85
  import {
86
86
  resolveBlockTransition
87
87
  } from "./chunk-P53Z4RYC.js";
@@ -10334,33 +10334,125 @@ function coverScrimGradient(background) {
10334
10334
  const stops = COVER_SCRIM_STOPS.map((s) => `${withAlpha(background, s.alpha)} ${s.pos}%`);
10335
10335
  return `linear-gradient(0deg, ${stops.join(", ")})`;
10336
10336
  }
10337
+ function fitFrostedText(text, size, minSize, maxPlateWidth, maxLines) {
10338
+ const wrapAt = (s) => {
10339
+ const column = maxPlateWidth - 2 * FROSTED_PAD_X_EM * s;
10340
+ const lines = text.split("\n").flatMap((line) => balancedDisplayLines(line, s, column));
10341
+ const width = Math.max(...lines.map((line) => estimateDisplayTextWidth(line, s)));
10342
+ return { lines, width, column };
10343
+ };
10344
+ let fontSize = size;
10345
+ let wrapped = wrapAt(fontSize);
10346
+ while ((wrapped.lines.length > maxLines || wrapped.width > wrapped.column) && fontSize > minSize) {
10347
+ fontSize = Math.max(minSize, Math.floor(fontSize * 0.95));
10348
+ wrapped = wrapAt(fontSize);
10349
+ }
10350
+ return {
10351
+ fontSize,
10352
+ lines: wrapped.lines,
10353
+ column: wrapped.column,
10354
+ textWidth: Math.min(wrapped.width, wrapped.column)
10355
+ };
10356
+ }
10337
10357
  var FROSTED_LINE_HEIGHT = 1.12;
10338
10358
  var FROSTED_MAX_LINES = 3;
10339
10359
  var FROSTED_SQUARE_SHARE = 0.9;
10340
10360
  var FROSTED_BOTTOM_MARGIN_PCT = { wide: 7, tall: 17 };
10361
+ var FROSTED_TOP_MARGIN_PCT = FROSTED_BOTTOM_MARGIN_PCT;
10341
10362
  var COVER_SUBTITLE_BASE_PX = 40;
10342
- function frostedCoverLayout(title, subtitle, context) {
10363
+ var COVER_DECK_BASE_PX = 114;
10364
+ var FROSTED_SPLIT_TITLE_SCALE = 1.5;
10365
+ var FROSTED_DECK_MAX_LINES = 3;
10366
+ var FROSTED_SPLIT_MIN_GAP_EM = 0.5;
10367
+ function frostedCoverLayout(title, subtitle, context, coverLayout = "stacked") {
10343
10368
  const { width: frameW, height: frameH } = context.viewport;
10344
10369
  const shortSide = Math.min(frameW, frameH);
10345
10370
  const maxPlateWidth = FROSTED_SQUARE_SHARE * shortSide;
10346
10371
  const minSize = themedFontSize(COVER_TITLE_MIN_BASE_PX, context, true);
10347
- const wrapAt = (size) => {
10348
- const column2 = maxPlateWidth - 2 * FROSTED_PAD_X_EM * size;
10349
- const lines2 = title.split("\n").flatMap((line) => balancedDisplayLines(line, size, column2));
10350
- const width = Math.max(...lines2.map((line) => estimateDisplayTextWidth(line, size)));
10351
- return { lines: lines2, width, column: column2 };
10372
+ const tall = frameH > frameW;
10373
+ const marginPct = tall ? FROSTED_BOTTOM_MARGIN_PCT.tall : FROSTED_BOTTOM_MARGIN_PCT.wide;
10374
+ const plateBottom = frameH * (1 - marginPct / 100);
10375
+ const cx = frameW / 2;
10376
+ const fitTitle = (scale) => {
10377
+ const fit = fitFrostedText(
10378
+ title,
10379
+ Math.round(scale * themedFontSize(fitCoverTitleSize(title), context, true)),
10380
+ minSize,
10381
+ maxPlateWidth,
10382
+ FROSTED_MAX_LINES
10383
+ );
10384
+ const textHeight2 = fit.lines.length * fit.fontSize * FROSTED_LINE_HEIGHT;
10385
+ const padX2 = FROSTED_PAD_X_EM * fit.fontSize;
10386
+ const padY2 = FROSTED_PAD_Y_EM * fit.fontSize;
10387
+ return {
10388
+ ...fit,
10389
+ textHeight: textHeight2,
10390
+ padX: padX2,
10391
+ padY: padY2,
10392
+ radius: FROSTED_RADIUS_EM * fit.fontSize,
10393
+ // The box spans the plate's padding too: shrink-to-fit measures the font's whole
10394
+ // ascent and descent (about 1.3 em), which overflows a box of 1.12 em lines and
10395
+ // would scale every title down by up to 14%.
10396
+ box: (plateY2) => ({
10397
+ cx,
10398
+ cy: plateY2 + padY2 + textHeight2 / 2,
10399
+ width: frostedTitleBoxWidth(fit.lines, fit.fontSize, fit.textWidth),
10400
+ height: textHeight2 + 2 * padY2
10401
+ })
10402
+ };
10352
10403
  };
10353
- let fontSize = themedFontSize(fitCoverTitleSize(title), context, true);
10354
- let wrapped = wrapAt(fontSize);
10355
- while ((wrapped.lines.length > FROSTED_MAX_LINES || wrapped.width > wrapped.column) && fontSize > minSize) {
10356
- fontSize = Math.max(minSize, Math.floor(fontSize * 0.95));
10357
- wrapped = wrapAt(fontSize);
10404
+ if (coverLayout === "split" && subtitle?.trim()) {
10405
+ const { fontSize: fontSize2, lines: lines2, textWidth: textWidth2, textHeight: textHeight2, padX: padX2, padY: padY2, radius: radius2, box: box2 } = fitTitle(FROSTED_SPLIT_TITLE_SCALE);
10406
+ const deckMin = themedFontSize(COVER_SUBTITLE_BASE_PX, context, false);
10407
+ const deck = fitFrostedText(
10408
+ subtitle.trim(),
10409
+ Math.max(deckMin, themedFontSize(COVER_DECK_BASE_PX, context, true)),
10410
+ deckMin,
10411
+ maxPlateWidth,
10412
+ FROSTED_DECK_MAX_LINES
10413
+ );
10414
+ const deckPadX = FROSTED_PAD_X_EM * deck.fontSize;
10415
+ const deckHeight = deck.lines.length * deck.fontSize * FROSTED_LINE_HEIGHT + 2 * FROSTED_PAD_Y_EM * deck.fontSize;
10416
+ const deckWidth = deck.textWidth + 2 * deckPadX;
10417
+ const topPct = tall ? FROSTED_TOP_MARGIN_PCT.tall : FROSTED_TOP_MARGIN_PCT.wide;
10418
+ const titlePlate = {
10419
+ x: cx - (textWidth2 + 2 * padX2) / 2,
10420
+ y: frameH * topPct / 100,
10421
+ width: textWidth2 + 2 * padX2,
10422
+ height: textHeight2 + 2 * padY2,
10423
+ radius: radius2
10424
+ };
10425
+ const deckPlate = {
10426
+ x: cx - deckWidth / 2,
10427
+ y: plateBottom - deckHeight,
10428
+ width: deckWidth,
10429
+ height: deckHeight,
10430
+ // The title's corners, so the two plates read as a pair.
10431
+ radius: Math.min(radius2, deckHeight / 2)
10432
+ };
10433
+ const gap = deckPlate.y - (titlePlate.y + titlePlate.height);
10434
+ if (gap >= FROSTED_SPLIT_MIN_GAP_EM * fontSize2) {
10435
+ return {
10436
+ fontSize: fontSize2,
10437
+ lines: lines2,
10438
+ plate: titlePlate,
10439
+ title: box2(titlePlate.y),
10440
+ subtitle: {
10441
+ cx,
10442
+ cy: deckPlate.y + deckHeight / 2,
10443
+ width: frostedTitleBoxWidth(deck.lines, deck.fontSize, deck.textWidth),
10444
+ height: deckHeight,
10445
+ fontSize: deck.fontSize,
10446
+ lines: deck.lines,
10447
+ baselineShift: opticalCentreShiftEm(deck.lines)
10448
+ },
10449
+ subtitlePlate: deckPlate,
10450
+ baselineShift: opticalCentreShiftEm(lines2),
10451
+ blur: frostedBlurPx(context)
10452
+ };
10453
+ }
10358
10454
  }
10359
- const { lines, column } = wrapped;
10360
- const textWidth = Math.min(wrapped.width, column);
10361
- const textHeight = lines.length * fontSize * FROSTED_LINE_HEIGHT;
10362
- const padX = FROSTED_PAD_X_EM * fontSize;
10363
- const padY = FROSTED_PAD_Y_EM * fontSize;
10455
+ const { fontSize, lines, column, textWidth, textHeight, padX, padY, radius, box } = fitTitle(1);
10364
10456
  let sub;
10365
10457
  if (subtitle?.trim()) {
10366
10458
  const subSize = themedFontSize(COVER_SUBTITLE_BASE_PX, context, false);
@@ -10378,10 +10470,7 @@ function frostedCoverLayout(title, subtitle, context) {
10378
10470
  }
10379
10471
  const plateWidth = Math.max(textWidth, sub?.width ?? 0) + 2 * padX;
10380
10472
  const plateHeight = textHeight + (sub ? sub.gap + sub.height : 0) + 2 * padY;
10381
- const marginPct = frameH > frameW ? FROSTED_BOTTOM_MARGIN_PCT.tall : FROSTED_BOTTOM_MARGIN_PCT.wide;
10382
- const plateBottom = frameH * (1 - marginPct / 100);
10383
10473
  const plateY = plateBottom - plateHeight;
10384
- const cx = frameW / 2;
10385
10474
  return {
10386
10475
  fontSize,
10387
10476
  lines,
@@ -10390,17 +10479,9 @@ function frostedCoverLayout(title, subtitle, context) {
10390
10479
  y: plateY,
10391
10480
  width: plateWidth,
10392
10481
  height: plateHeight,
10393
- radius: FROSTED_RADIUS_EM * fontSize
10394
- },
10395
- // The box spans the plate's padding too: shrink-to-fit measures the font's whole
10396
- // ascent and descent (about 1.3 em), which overflows a box of 1.12 em lines and
10397
- // would scale every title down by up to 14%.
10398
- title: {
10399
- cx,
10400
- cy: plateY + padY + textHeight / 2,
10401
- width: frostedTitleBoxWidth(lines, fontSize, textWidth),
10402
- height: textHeight + 2 * padY
10482
+ radius
10403
10483
  },
10484
+ title: box(plateY),
10404
10485
  ...sub ? {
10405
10486
  subtitle: {
10406
10487
  cx,
@@ -10420,7 +10501,7 @@ function frostedCoverLayout(title, subtitle, context) {
10420
10501
  }
10421
10502
  function frostedCoverLayers(input, context) {
10422
10503
  const { theme, viewport } = context;
10423
- const layout = frostedCoverLayout(input.title, input.subtitle, context);
10504
+ const layout = frostedCoverLayout(input.title, input.subtitle, context, input.coverLayout);
10424
10505
  const lightText = frostedUnderLightText(context);
10425
10506
  const layers = [
10426
10507
  frostedPlateLayer("cover-plate", layout.plate, context),
@@ -10452,7 +10533,35 @@ function frostedCoverLayers(input, context) {
10452
10533
  animation: getMotionProfile(context).coverWordReveal ? { type: "wordReveal", duration: 0.5, delay: 0.1, stagger: 0.12 } : { type: "fadeIn", duration: 0.8 }
10453
10534
  }
10454
10535
  ];
10455
- if (layout.subtitle) {
10536
+ if (layout.subtitle && layout.subtitlePlate) {
10537
+ layers.push(frostedPlateLayer("cover-subtitle-plate", layout.subtitlePlate, context), {
10538
+ type: "text",
10539
+ id: "cover-subtitle",
10540
+ content: {
10541
+ text: layout.subtitle.lines.join("\n"),
10542
+ style: {
10543
+ fontSize: layout.subtitle.fontSize,
10544
+ fontFamily: getThemeFont(context, "title"),
10545
+ fontWeight: "bold",
10546
+ color: theme.colors.text,
10547
+ textAlign: "center",
10548
+ verticalAlign: "middle",
10549
+ lineHeight: FROSTED_LINE_HEIGHT,
10550
+ baselineShift: layout.subtitle.baselineShift,
10551
+ shadow: lightText,
10552
+ shrinkToFit: true
10553
+ }
10554
+ },
10555
+ position: {
10556
+ x: "50%",
10557
+ y: pct(layout.subtitle.cy, viewport.height),
10558
+ anchor: "center",
10559
+ width: pct(layout.subtitle.width, viewport.width),
10560
+ height: pct(layout.subtitle.height, viewport.height)
10561
+ },
10562
+ animation: motionEntrance(context, { type: "fadeIn", duration: 0.8, delay: 0.2 })
10563
+ });
10564
+ } else if (layout.subtitle) {
10456
10565
  layers.push({
10457
10566
  type: "text",
10458
10567
  id: "cover-subtitle",
@@ -10644,7 +10753,8 @@ function startBlockToCoverInput(config) {
10644
10753
  ambientMotion: config.ambientMotion,
10645
10754
  heroCredit: config.heroCredit,
10646
10755
  heroLicense: config.heroLicense,
10647
- ...config.coverStyle ? { coverStyle: config.coverStyle } : {}
10756
+ ...config.coverStyle ? { coverStyle: config.coverStyle } : {},
10757
+ ...config.coverLayout ? { coverLayout: config.coverLayout } : {}
10648
10758
  };
10649
10759
  }
10650
10760
  function expandCoverBlock(config, context, template = "cover") {
@@ -1,12 +1,12 @@
1
- import { a7 as Layer, k as Block, R as Doc, bt as TemplateBlock, bu as TemplateContext, z as CustomTemplateDefinition, bw as TemplateRegistry, bC as Theme, c7 as ViewportConfig, b0 as PersistentLayerConfig, av as MotionSpec, S as DocBlock, c8 as ViewportOrientation, a$ as PersistentLayer, bP as TitleBlockInput, bh as SectionHeaderInput, j as BigTextInput, v as ContentBlockInput, bn as StatHighlightInput, bb as QuoteBlockInput, Z as FactCardInput, bY as TwoColumnInput, K as DateEventInput, a5 as ImageWithCaptionInput, aa as LeftFeatureInput, be as RightFeatureInput, n as BottomFeatureInput, ao as MediaOnlyInput, bR as TopFeatureInput, af as MapBlockInput, bm as StartBlockConfig, a0 as FullBleedQuoteInput, ad as ListBlockInput, b4 as PhotoGridInput, M as DefinitionCardInput, u as ComparisonBarInput, ba as PullQuoteInput, c6 as VideoWithCaptionInput, c5 as VideoPullQuoteInput, J as DataTableInput, N as DiagramBlockInput, bT as TreeBlockInput, bL as TimelineBlockInput, V as DrawingBlockInput, aj as MarkerStyle, A as AccentImage, a4 as ImageTreatment, a as AccentPosition, c as Animation, d as AnimationType, aw as MotionState, at as MotionProfile, bE as ThemeColorScheme, x as CountUpSpec, bG as ThemeRegistry, aT as PageEmphasis, bF as ThemePageStyle, T as DocDiagnostic, Q as DiagramTemplateNode, P as DiagramTemplateEdge, bO as TimelineTemplateTrack, bN as TimelineTemplateLink } from '../Doc-DnRFE0EI.js';
2
- export { W as FRONTMATTER_CUSTOM_TEMPLATES_KEY, X as FRONTMATTER_CUSTOM_THEMES_KEY, a9 as LayoutHints, bd as RenderStyle, bD as ThemeColorPalette, bJ as ThemeStyle, bK as ThemeTypography, bZ as VIEWPORT_PRESETS, c9 as ViewportPreset, ce as createTemplateContext, cl as getLayoutHints, co as getTwoColumnPositions, cp as getViewport, cq as getViewportOrientation, cu as isTemplateBlock, cA as scaledFontSize } from '../Doc-DnRFE0EI.js';
1
+ import { a7 as Layer, k as Block, R as Doc, bt as TemplateBlock, bu as TemplateContext, z as CustomTemplateDefinition, bw as TemplateRegistry, bC as Theme, c7 as ViewportConfig, b0 as PersistentLayerConfig, av as MotionSpec, S as DocBlock, c8 as ViewportOrientation, a$ as PersistentLayer, bP as TitleBlockInput, bh as SectionHeaderInput, j as BigTextInput, v as ContentBlockInput, bn as StatHighlightInput, bb as QuoteBlockInput, Z as FactCardInput, bY as TwoColumnInput, K as DateEventInput, a5 as ImageWithCaptionInput, aa as LeftFeatureInput, be as RightFeatureInput, n as BottomFeatureInput, ao as MediaOnlyInput, bR as TopFeatureInput, af as MapBlockInput, bm as StartBlockConfig, a0 as FullBleedQuoteInput, ad as ListBlockInput, b4 as PhotoGridInput, M as DefinitionCardInput, u as ComparisonBarInput, ba as PullQuoteInput, c6 as VideoWithCaptionInput, c5 as VideoPullQuoteInput, J as DataTableInput, N as DiagramBlockInput, bT as TreeBlockInput, bL as TimelineBlockInput, V as DrawingBlockInput, aj as MarkerStyle, A as AccentImage, a4 as ImageTreatment, a as AccentPosition, c as Animation, d as AnimationType, aw as MotionState, at as MotionProfile, bE as ThemeColorScheme, x as CountUpSpec, bG as ThemeRegistry, aT as PageEmphasis, bF as ThemePageStyle, T as DocDiagnostic, Q as DiagramTemplateNode, P as DiagramTemplateEdge, bO as TimelineTemplateTrack, bN as TimelineTemplateLink } from '../Doc-BQUVDooL.js';
2
+ export { W as FRONTMATTER_CUSTOM_TEMPLATES_KEY, X as FRONTMATTER_CUSTOM_THEMES_KEY, a9 as LayoutHints, bd as RenderStyle, bD as ThemeColorPalette, bJ as ThemeStyle, bK as ThemeTypography, bZ as VIEWPORT_PRESETS, c9 as ViewportPreset, ce as createTemplateContext, cl as getLayoutHints, co as getTwoColumnPositions, cp as getViewport, cq as getViewportOrientation, cu as isTemplateBlock, cA as scaledFontSize } from '../Doc-BQUVDooL.js';
3
3
  import { g as BuildStep, M as MarkdownBlockNode, S as MarkdownListItem, f as BuildSpec, e as BuildCursor, h as BuildTiming, V as MarkdownNode, ae as TransitionType, ad as TransitionDirection, z as MarkdownHeading, v as MarkdownDocument, a2 as MarkdownTable, q as MarkdownCodeBlock, R as MarkdownList } from '../types-Zk8qYuaT.js';
4
4
  import { C as CoercedBlockMeta } from '../annotationCoercion-hTvELpIN.js';
5
- import { c as PageSection } from '../materializePageSection-D84uA6Vk.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-D84uA6Vk.js';
5
+ import { c as PageSection } from '../materializePageSection-_ftXlwvB.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-_ftXlwvB.js';
7
7
  import { C as ContentContainer } from '../ContentContainer-B2w9sUoL.js';
8
8
  import { V as ViewIssue } from '../viewState-lTZS-hP_.js';
9
- export { D as DEFAULT_THEME, g as getAvailableThemes, b as getThemeSummaries, r as resolveTheme } from '../themeLibrary-in0fafp4.js';
9
+ export { D as DEFAULT_THEME, g as getAvailableThemes, b as getThemeSummaries, r as resolveTheme } from '../themeLibrary-D6GK29l3.js';
10
10
 
11
11
  /** Pure build planning and evaluation, shared by interactive slides and frame export. */
12
12
 
@@ -1192,7 +1192,9 @@ declare function resolveCoverSlideSettings(frontmatter: Record<string, unknown>
1192
1192
  * photo with the title on a frosted-glass plate (`'frosted'`): the plate rests near
1193
1193
  * the bottom, grows upward for longer titles, and stays inside the frame's centre
1194
1194
  * square so a square crop (a social link card) still shows the whole title
1195
- * - Large centered title with optional subtitle
1195
+ * - Large centered title with optional subtitle; a frosted cover can split them
1196
+ * (`coverLayout: 'split'`), the title on a plate up top and the subtitle as a deck
1197
+ * on its own plate below, for a vertical cover's name and hook
1196
1198
  * - No animation delays (shown at rest, not during playback)
1197
1199
  *
1198
1200
  * This is shared code used by both site and efb-app doc renderers.
@@ -1220,6 +1222,8 @@ interface CoverBlockInput {
1220
1222
  imageTreatment?: 'none' | 'mono' | 'duotone' | 'warm' | 'cool';
1221
1223
  /** How a hero cover keeps its title legible (see StartBlockConfig.coverStyle). */
1222
1224
  coverStyle?: 'scrim' | 'frosted';
1225
+ /** Where a frosted cover puts its subtitle (see StartBlockConfig.coverLayout). */
1226
+ coverLayout?: 'stacked' | 'split';
1223
1227
  }
1224
1228
  /**
1225
1229
  * Generate cover block layers from StartBlockConfig.
package/dist/doc/index.js CHANGED
@@ -75,9 +75,9 @@ import {
75
75
  validateMarkdownSource,
76
76
  wordRevealDelay,
77
77
  writeDashboardLayoutsToFrontmatter
78
- } from "../chunk-BITSNRJH.js";
78
+ } from "../chunk-K75GTKSN.js";
79
79
  import "../chunk-FTN6SGW5.js";
80
- import "../chunk-DRHJD6U4.js";
80
+ import "../chunk-F5WTRHWL.js";
81
81
  import {
82
82
  BASE_INPUT_DESCRIPTORS,
83
83
  BLOCK_MEDIA_LAYOUT_POLICIES,
@@ -195,7 +195,7 @@ import {
195
195
  wrapWithPersistentLayers,
196
196
  writeCustomTemplatesToFrontmatter,
197
197
  writeCustomThemesToFrontmatter
198
- } from "../chunk-J2NFT7GH.js";
198
+ } from "../chunk-ZF4NWRZU.js";
199
199
  import {
200
200
  ASCII_CHAR_H,
201
201
  ASCII_CHAR_W,
@@ -248,7 +248,7 @@ import {
248
248
  treeFromMarkdownList,
249
249
  treeFromTemplateData,
250
250
  treeToTemplateData
251
- } from "../chunk-POZCKPCO.js";
251
+ } from "../chunk-CZHWFQ7C.js";
252
252
  import "../chunk-SVN7T6BK.js";
253
253
  import {
254
254
  PATH_SHAPE_KINDS,
@@ -283,14 +283,14 @@ import {
283
283
  } from "../chunk-WNEH3BZP.js";
284
284
  import "../chunk-JSGIWW35.js";
285
285
  import "../chunk-L7QZORLB.js";
286
- import "../chunk-D3JQMZUT.js";
286
+ import "../chunk-CPD3MFX7.js";
287
287
  import {
288
288
  CONTAINER_TEMPLATES,
289
289
  TABLE_FED_TEMPLATES,
290
290
  isContainerTemplate,
291
291
  resolveTemplateName
292
292
  } from "../chunk-DOOUVVOM.js";
293
- import "../chunk-6NWVLLMI.js";
293
+ import "../chunk-KVEOD57Z.js";
294
294
  import "../chunk-CZ7AUSLI.js";
295
295
  import "../chunk-P53Z4RYC.js";
296
296
  import "../chunk-5HWYSUXS.js";
@@ -1,4 +1,4 @@
1
- import { bC as Theme } from '../Doc-DnRFE0EI.js';
1
+ import { bC as Theme } from '../Doc-BQUVDooL.js';
2
2
  import '../types-Zk8qYuaT.js';
3
3
 
4
4
  /**
@@ -1,6 +1,6 @@
1
1
  import { E as ExtractedElement } from '../contentExtractor-BNfVJV2U.js';
2
2
  export { C as ComparisonData, D as DateData, a as DefinitionData, b as ExtractionOptions, c as ExtractionResult, d as ExtractionType, F as FactData, I as ImpactLineData, L as ListData, Q as QuoteData, S as StatData, e as extractContent, s as stripMarkdown } from '../contentExtractor-BNfVJV2U.js';
3
- import { s as ColorScheme, A as AccentImage, bt as TemplateBlock } from '../Doc-DnRFE0EI.js';
3
+ import { s as ColorScheme, A as AccentImage, bt as TemplateBlock } from '../Doc-BQUVDooL.js';
4
4
  import '../types-Zk8qYuaT.js';
5
5
 
6
6
  /**
@@ -1,8 +1,8 @@
1
- import { a as ImageEditDoc, b as ImageEditLayer } from '../ImageEditDoc-CadNz387.js';
2
- export { E as EditorLayerMeta, I as ImageEditCanvas, c as ImageEditLayerKind, d as ImageEditMeta } from '../ImageEditDoc-CadNz387.js';
1
+ import { a as ImageEditDoc, b as ImageEditLayer } from '../ImageEditDoc-glA5UUau.js';
2
+ export { E as EditorLayerMeta, I as ImageEditCanvas, c as ImageEditLayerKind, d as ImageEditMeta } from '../ImageEditDoc-glA5UUau.js';
3
3
  import { C as ContentContainer } from '../ContentContainer-B2w9sUoL.js';
4
4
  import { V as Version, C as CoalesceOptions, P as PrunePolicy } from '../types-8QjefM9J.js';
5
- import '../Doc-DnRFE0EI.js';
5
+ import '../Doc-BQUVDooL.js';
6
6
  import '../types-Zk8qYuaT.js';
7
7
 
8
8
  /**
package/dist/index.d.ts CHANGED
@@ -1,16 +1,16 @@
1
1
  export { B as BUILD_EFFECTS, a as BUILD_MODES, b as BUILD_PARAM_KEYS, c as BUILD_PREVIOUS, d as BuildAdvance, e as BuildCursor, f as BuildSpec, g as BuildStep, h as BuildTiming, D as DEFAULT_MARKDOWN_SAFETY_LIMITS, i as DEFAULT_TRANSITION_DURATION_SECONDS, H as HeadingAttributes, j as HeadingTemplateAnnotation, k as HtmlComment, l as HtmlElement, m as HtmlNode, n as HtmlText, M as MarkdownBlockNode, o as MarkdownBlockquote, p as MarkdownBreak, q as MarkdownCodeBlock, r as MarkdownContainerDirective, s as MarkdownDefinitionDescription, t as MarkdownDefinitionList, u as MarkdownDefinitionTerm, v as MarkdownDocument, w as MarkdownEmphasis, x as MarkdownFootnoteDefinition, y as MarkdownFootnoteReference, z as MarkdownHeading, A as MarkdownHtmlBlock, C as MarkdownImage, E as MarkdownImageReference, F as MarkdownInlineCode, G as MarkdownInlineHtml, I as MarkdownInlineIcon, J as MarkdownInlineMath, K as MarkdownInlineNode, L as MarkdownLeafDirective, N as MarkdownLimitError, O as MarkdownLink, P as MarkdownLinkDefinition, Q as MarkdownLinkReference, R as MarkdownList, S as MarkdownListItem, T as MarkdownMathBlock, U as MarkdownMention, V as MarkdownNode, W as MarkdownParagraph, X as MarkdownPoint, Y as MarkdownSafetyLimits, Z as MarkdownSourcePosition, _ as MarkdownStrikethrough, $ as MarkdownStrong, a0 as MarkdownSubscript, a1 as MarkdownSuperscript, a2 as MarkdownTable, a3 as MarkdownTableCell, a4 as MarkdownTableRow, a5 as MarkdownText, a6 as MarkdownTextDirective, a7 as MarkdownThematicBreak, a8 as ParseOptions, a9 as StringifyOptions, aa as TRANSITION_DIRECTIONS, ab as TRANSITION_TYPES, ac as Transition, ad as TransitionDirection, ae as TransitionType, af as assertMarkdownDocumentWithinLimits, ag as assertMarkdownSourceWithinLimits, ah as buildSpecParams, ai as isTransitionType, aj as normalizeTransitionDirection, ak as normalizeTransitionType, al as parseBuildSpec, am as recordBuildAdvance, an as resolveBlockTransition, ao as resolveMarkdownSafetyLimits, ap as resolveTransitionDuration } from './types-Zk8qYuaT.js';
2
2
  export { B as BoundingBox, C as Coordinates } from './Types-sh2VRxfo.js';
3
- export { A as AccentImage, a as AccentPosition, b as AmbientGradientConfig, c as Animation, d as AnimationType, e as AreaChartInput, f as AudioBookmark, g as AudioSegment, h as AudioTimingData, i as AudioTrack, B as BarChartInput, j as BigTextInput, k as Block, l as BlockConnection, m as BorderStyle, n as BottomFeatureInput, C as CaptionPhrase, o as CaptionTrack, p as CaptionWord, q as ChartBaseFields, r as ChartTemplateInput, s as ColorScheme, t as ColumnChartInput, u as ComparisonBarInput, v as ContentBlockInput, w as CornerBrandingConfig, x as CountUpSpec, y as CreateTemplateContextOptions, z as CustomTemplateDefinition, D as CustomTemplateLayer, E as CustomTemplateValidationError, F as CustomTemplateValidationResult, G as DARK_SURFACE, H as DEFAULT_DOC_FONT, I as DEFAULT_TITLE_FONT, J as DataTableInput, K as DateEventInput, L as DeepPartial, M as DefinitionCardInput, N as DiagramBlockInput, O as DiagramEdgeAnchor, P as DiagramTemplateEdge, Q as DiagramTemplateNode, R as Doc, S as DocBlock, T as DocDiagnostic, U as DonutChartInput, V as DrawingBlockInput, W as FRONTMATTER_CUSTOM_TEMPLATES_KEY, X as FRONTMATTER_CUSTOM_THEMES_KEY, Y as FRONTMATTER_MOTION_KEY, Z as FactCardInput, _ as FontFamily, $ as FontFamilyKind, a0 as FullBleedQuoteInput, a1 as GradientBackgroundConfig, a2 as ImageBackgroundConfig, a3 as ImageLayer, a4 as ImageTreatment, a5 as ImageWithCaptionInput, a6 as LIGHT_SURFACE, a7 as Layer, a8 as LayerRepeat, a9 as LayoutHints, aa as LeftFeatureInput, ab as LineChartInput, ac as LinearGradient, ad as ListBlockInput, ae as MOTION_PROFILES, af as MapBlockInput, ag as MapLayer, ah as MapMarker, ai as MapTileStyle, aj as MarkerStyle, ak as MediaClip, al as MediaCrop, am as MediaCut, an as MediaEdits, ao as MediaOnlyInput, ap as MediaScheduleOptions, aq as MermaidLayer, ar as MotionEntrance, as as MotionOrigin, at as MotionProfile, au as MotionProfileName, av as MotionSpec, aw as MotionState, ax as PAGE_ACCENT_STRATEGIES, ay as PAGE_BACKGROUNDS, az as PAGE_BACKGROUND_RHYTHMS, aA as PAGE_DESIGN_FAMILIES, aB as PAGE_DIVIDERS, aC as PAGE_EMPHASES, aD as PAGE_EYEBROWS, aE as PAGE_HEADING_CASES, aF as PAGE_HEADING_SCALES, aG as PAGE_HEADING_UNDERLINES, aH as PAGE_HERO_STYLES, aI as PAGE_IMAGE_FRAMINGS, aJ as PAGE_NUMERAL_STYLES, aK as PAGE_PATTERNS, aL as PAGE_QUOTE_MARKS, aM as PAGE_SECTION_KINDS, aN as PAGE_SECTION_SPACINGS, aO as PAGE_SHADOWS, aP as PAGE_VARIANTS, aQ as PageAccentRotation, aR as PageBackground, aS as PageDesignFamily, aT as PageEmphasis, aU as PageHeadingTreatment, aV as PageSectionKind, aW as PageSectionOverride, aX as PageTokens, aY as PageVariant, aZ as PathLayer, a_ as PatternBackgroundConfig, a$ as PersistentLayer, b0 as PersistentLayerConfig, b1 as PersistentLayerTemplate, b2 as PersistentLayerTemplateConfig, b3 as PersistentLayerTemplateType, b4 as PhotoGridInput, b5 as PieChartInput, b6 as PipStyle, b7 as Position, b8 as ProgressIndicatorConfig, b9 as PromotedBodyAnnotation, ba as PullQuoteInput, bb as QuoteBlockInput, bc as RawLayersInput, bd as RenderStyle, be as RightFeatureInput, bf as ScatterChartInput, bg as ScheduledClip, bh as SectionHeaderInput, bi as ShapeFilter, bj as ShapeLayer, bk as ShapePattern, bl as SolidBackgroundConfig, bm as StartBlockConfig, bn as StatHighlightInput, bo as SurfaceScheme, bp as SvgLayer, bq as THEME_SCHEMA_VERSION, br as TableLayer, bs as TableLayerStyle, bt as TemplateBlock, bu as TemplateContext, bv as TemplateFunction, bw as TemplateRegistry, bx as TextFlow, by as TextLayer, bz as TextParagraph, bA as TextParagraphList, bB as TextStyle, bC as Theme, bD as ThemeColorPalette, bE as ThemeColorScheme, bF as ThemePageStyle, bG as ThemeRegistry, bH as ThemeSchemaVersion, bI as ThemeSeedColors, bJ as ThemeStyle, bK as ThemeTypography, bL as TimelineBlockInput, bM as TimelineTemplateEvent, bN as TimelineTemplateLink, bO as TimelineTemplateTrack, bP as TitleBlockInput, bQ as TitleCaptionConfig, bR as TopFeatureInput, bS as TranscriptBlockInput, bT as TreeBlockInput, bU as TreeLayer, bV as TreeLayerItem, bW as TreeLayerStyle, bX as TreeTemplateItem, bY as TwoColumnInput, bZ as VIEWPORT_PRESETS, b_ as VideoEmbedLayer, b$ as VideoLayer, c0 as VideoPipPosition, c1 as VideoPipShape, c2 as VideoPipSize, c3 as VideoPlacement, c4 as VideoPresentation, c5 as VideoPullQuoteInput, c6 as VideoWithCaptionInput, c7 as ViewportConfig, c8 as ViewportOrientation, c9 as ViewportPreset, ca as VignetteConfig, cb as applySurface, cc as calculateDuration, cd as calculateFontScale, ce as createTemplateContext, cf as createTheme, cg as createThemeRegistry, ch as getAspectRatioString, ci as getBlockAtTime, cj as getCaptionAtTime, ck as getDocPlaybackDuration, cl as getLayoutHints, cm as getSafeTextBounds, cn as getSegmentAtTime, co as getTwoColumnPositions, cp as getViewport, cq as getViewportOrientation, cr as isCustomTemplateDefinition, cs as isMotionProfileName, ct as isPersistentLayerTemplate, cu as isTemplateBlock, cv as layoutScaledFontSize, cw as readFrontmatterMotion, cx as resolveMediaSchedule, cy as resolveMotionForDoc, cz as resolveMotionProfile, cA as scaledFontSize, cB as scheduleMediaClip, cC as validateCustomTemplateDefinition } from './Doc-DnRFE0EI.js';
3
+ export { A as AccentImage, a as AccentPosition, b as AmbientGradientConfig, c as Animation, d as AnimationType, e as AreaChartInput, f as AudioBookmark, g as AudioSegment, h as AudioTimingData, i as AudioTrack, B as BarChartInput, j as BigTextInput, k as Block, l as BlockConnection, m as BorderStyle, n as BottomFeatureInput, C as CaptionPhrase, o as CaptionTrack, p as CaptionWord, q as ChartBaseFields, r as ChartTemplateInput, s as ColorScheme, t as ColumnChartInput, u as ComparisonBarInput, v as ContentBlockInput, w as CornerBrandingConfig, x as CountUpSpec, y as CreateTemplateContextOptions, z as CustomTemplateDefinition, D as CustomTemplateLayer, E as CustomTemplateValidationError, F as CustomTemplateValidationResult, G as DARK_SURFACE, H as DEFAULT_DOC_FONT, I as DEFAULT_TITLE_FONT, J as DataTableInput, K as DateEventInput, L as DeepPartial, M as DefinitionCardInput, N as DiagramBlockInput, O as DiagramEdgeAnchor, P as DiagramTemplateEdge, Q as DiagramTemplateNode, R as Doc, S as DocBlock, T as DocDiagnostic, U as DonutChartInput, V as DrawingBlockInput, W as FRONTMATTER_CUSTOM_TEMPLATES_KEY, X as FRONTMATTER_CUSTOM_THEMES_KEY, Y as FRONTMATTER_MOTION_KEY, Z as FactCardInput, _ as FontFamily, $ as FontFamilyKind, a0 as FullBleedQuoteInput, a1 as GradientBackgroundConfig, a2 as ImageBackgroundConfig, a3 as ImageLayer, a4 as ImageTreatment, a5 as ImageWithCaptionInput, a6 as LIGHT_SURFACE, a7 as Layer, a8 as LayerRepeat, a9 as LayoutHints, aa as LeftFeatureInput, ab as LineChartInput, ac as LinearGradient, ad as ListBlockInput, ae as MOTION_PROFILES, af as MapBlockInput, ag as MapLayer, ah as MapMarker, ai as MapTileStyle, aj as MarkerStyle, ak as MediaClip, al as MediaCrop, am as MediaCut, an as MediaEdits, ao as MediaOnlyInput, ap as MediaScheduleOptions, aq as MermaidLayer, ar as MotionEntrance, as as MotionOrigin, at as MotionProfile, au as MotionProfileName, av as MotionSpec, aw as MotionState, ax as PAGE_ACCENT_STRATEGIES, ay as PAGE_BACKGROUNDS, az as PAGE_BACKGROUND_RHYTHMS, aA as PAGE_DESIGN_FAMILIES, aB as PAGE_DIVIDERS, aC as PAGE_EMPHASES, aD as PAGE_EYEBROWS, aE as PAGE_HEADING_CASES, aF as PAGE_HEADING_SCALES, aG as PAGE_HEADING_UNDERLINES, aH as PAGE_HERO_STYLES, aI as PAGE_IMAGE_FRAMINGS, aJ as PAGE_NUMERAL_STYLES, aK as PAGE_PATTERNS, aL as PAGE_QUOTE_MARKS, aM as PAGE_SECTION_KINDS, aN as PAGE_SECTION_SPACINGS, aO as PAGE_SHADOWS, aP as PAGE_VARIANTS, aQ as PageAccentRotation, aR as PageBackground, aS as PageDesignFamily, aT as PageEmphasis, aU as PageHeadingTreatment, aV as PageSectionKind, aW as PageSectionOverride, aX as PageTokens, aY as PageVariant, aZ as PathLayer, a_ as PatternBackgroundConfig, a$ as PersistentLayer, b0 as PersistentLayerConfig, b1 as PersistentLayerTemplate, b2 as PersistentLayerTemplateConfig, b3 as PersistentLayerTemplateType, b4 as PhotoGridInput, b5 as PieChartInput, b6 as PipStyle, b7 as Position, b8 as ProgressIndicatorConfig, b9 as PromotedBodyAnnotation, ba as PullQuoteInput, bb as QuoteBlockInput, bc as RawLayersInput, bd as RenderStyle, be as RightFeatureInput, bf as ScatterChartInput, bg as ScheduledClip, bh as SectionHeaderInput, bi as ShapeFilter, bj as ShapeLayer, bk as ShapePattern, bl as SolidBackgroundConfig, bm as StartBlockConfig, bn as StatHighlightInput, bo as SurfaceScheme, bp as SvgLayer, bq as THEME_SCHEMA_VERSION, br as TableLayer, bs as TableLayerStyle, bt as TemplateBlock, bu as TemplateContext, bv as TemplateFunction, bw as TemplateRegistry, bx as TextFlow, by as TextLayer, bz as TextParagraph, bA as TextParagraphList, bB as TextStyle, bC as Theme, bD as ThemeColorPalette, bE as ThemeColorScheme, bF as ThemePageStyle, bG as ThemeRegistry, bH as ThemeSchemaVersion, bI as ThemeSeedColors, bJ as ThemeStyle, bK as ThemeTypography, bL as TimelineBlockInput, bM as TimelineTemplateEvent, bN as TimelineTemplateLink, bO as TimelineTemplateTrack, bP as TitleBlockInput, bQ as TitleCaptionConfig, bR as TopFeatureInput, bS as TranscriptBlockInput, bT as TreeBlockInput, bU as TreeLayer, bV as TreeLayerItem, bW as TreeLayerStyle, bX as TreeTemplateItem, bY as TwoColumnInput, bZ as VIEWPORT_PRESETS, b_ as VideoEmbedLayer, b$ as VideoLayer, c0 as VideoPipPosition, c1 as VideoPipShape, c2 as VideoPipSize, c3 as VideoPlacement, c4 as VideoPresentation, c5 as VideoPullQuoteInput, c6 as VideoWithCaptionInput, c7 as ViewportConfig, c8 as ViewportOrientation, c9 as ViewportPreset, ca as VignetteConfig, cb as applySurface, cc as calculateDuration, cd as calculateFontScale, ce as createTemplateContext, cf as createTheme, cg as createThemeRegistry, ch as getAspectRatioString, ci as getBlockAtTime, cj as getCaptionAtTime, ck as getDocPlaybackDuration, cl as getLayoutHints, cm as getSafeTextBounds, cn as getSegmentAtTime, co as getTwoColumnPositions, cp as getViewport, cq as getViewportOrientation, cr as isCustomTemplateDefinition, cs as isMotionProfileName, ct as isPersistentLayerTemplate, cu as isTemplateBlock, cv as layoutScaledFontSize, cw as readFrontmatterMotion, cx as resolveMediaSchedule, cy as resolveMotionForDoc, cz as resolveMotionProfile, cA as scaledFontSize, cB as scheduleMediaClip, cC as validateCustomTemplateDefinition } from './Doc-BQUVDooL.js';
4
4
  export { AVAILABLE_FONT_STACKS, CompileOptions, ContrastPreset, DocSchemaIssue, FONT_FALLBACKS, FontStack, MermaidThemeVariables, PipStyleVars, STARTER_THEME, ValidationError, ValidationResult, accentToColorScheme, assertDocSchema, assertTheme, buildGoogleFontsUrl, buildMermaidThemeVariables, compileTheme, contrastRatio, defaultPageStyle, deriveColorPalette, deriveScale, fontStack, getFontStack, guessFontFallback, hexHueDegrees, isHex, matchFontFamily, oklchDarken, oklchLighten, oklchSetChroma, parseTheme, pickContrastingText, pipStyleVars, relativeLuminance, resolveFontFamily, serializeTheme, validateDocSchema, validateTheme, withAlpha } from './schemas/index.js';
5
- export { D as DEFAULT_THEME, a as DEFAULT_THEME_ID, T as THEMES, g as getAvailableThemes, b as getThemeSummaries, r as resolveTheme } from './themeLibrary-in0fafp4.js';
5
+ export { D as DEFAULT_THEME, a as DEFAULT_THEME_ID, T as THEMES, g as getAvailableThemes, b as getThemeSummaries, r as resolveTheme } from './themeLibrary-D6GK29l3.js';
6
6
  export { M as MediaEntry, a as MediaProvider } from './MediaProvider-wpSe21B3.js';
7
- export { E as EditorLayerMeta, I as ImageEditCanvas, a as ImageEditDoc, b as ImageEditLayer, c as ImageEditLayerKind, d as ImageEditMeta } from './ImageEditDoc-CadNz387.js';
7
+ export { E as EditorLayerMeta, I as ImageEditCanvas, a as ImageEditDoc, b as ImageEditLayer, c as ImageEditLayerKind, d as ImageEditMeta } from './ImageEditDoc-glA5UUau.js';
8
8
  export { ASCII_CHAR_H, ASCII_CHAR_W, ASCII_DIAGRAM_FENCE_LANGS, ASCII_TIMELINE_FENCE_LANGS, AccentLayout, ArrangeAsciiDiagramOptions, AsciiDiagram, AsciiDiagramDetection, AsciiDiagramEdge, AsciiDiagramNode, AsciiTimeline, AsciiTimelineDetection, AsciiTimelineEvent, AsciiTimelineLink, AsciiTimelineMarker, AsciiTimelineSide, AsciiTimelineStats, AsciiTimelineStyle, AsciiTimelineTrack, AudioSegmentTiming, BASE_INPUT_DESCRIPTORS, BLOCK_MEDIA_LAYOUT_POLICIES, BUILTIN_DASHBOARD_LAYOUTS, BlockLayerMaterialization, BlockMediaLayoutPolicy, BuildPreviewDocOptions, BuildTimeline, BuiltInTemplateName, CONTAINER_TEMPLATES, COVER_SLIDE_FRONTMATTER_KEYS, COVER_SLIDE_TEMPLATE_OPTIONS, ClipBox, ConnectorAnchor, ConnectorPort, ConnectorRouting, ConnectorSnapPoint, ContentBuildPlan, CoverBlockInput, CoverSlidePlayback, CoverSlideSettings, CoverSlideTemplate, CoverSlideTemplateOption, DASHBOARD_AUTO_LAYOUT_ID, DASHBOARD_FRONTMATTER_KEYS, DASHBOARD_STYLES, DASHBOARD_STYLE_IDS, DASHBOARD_ZOOM_LEVELS, DATA_FILE_EXTENSIONS, DEFAULT_COVER_SLIDE_SETTINGS, DEFAULT_DASHBOARD_SETTINGS, DEFAULT_DASHBOARD_STYLE, DEFAULT_LAYOUT, DEFAULT_WORD_STAGGER, DIAGRAM_LABEL_HORIZONTAL_PADDING, DIAGRAM_LABEL_LINE_HEIGHT, DIAGRAM_LABEL_MIN_FONT_SIZE, DIAGRAM_LABEL_VERTICAL_PADDING, DashboardCell, DashboardCellChrome, DashboardCellDefinition, DashboardCellFrame, DashboardDiagnostic, DashboardLayoutDefinition, DashboardLayoutSummary, DashboardLayoutValidationError, DashboardLayoutValidationResult, DashboardMaterialization, DashboardRectPct, DashboardSettings, DashboardSettingsOverrides, DashboardStyleId, DashboardStyleSummary, DashboardTitle, DashboardTitleSlotDefinition, DashboardZoomCandidate, DashboardZoomLevel, DashboardZoomMode, DataFenceParseResult, DataSourceReadOptions, DataSourceReader, DataSourceStats, DataSourceTable, DeriveTemplateInputsOptions, DetectAsciiTimelineOptions, DiagramEdge, DiagramLabelFit, DiagramLayout, DiagramLayoutOptions, DiagramNodePosition, DrawingConnector, DrawingLayout, DrawingLayoutOptions, DrawingShape, DrawingShapeKind, EmbeddedVideo, ExpandDocBlocksOptions, ExtractedTableData, FRONTMATTER_DASHBOARD_LAYOUTS_KEY, FirstImage, Flashcard, FlashcardChoice, FlashcardDeck, FlashcardDiagnostic, FlashcardDiagnosticCode, FlashcardFace, FlashcardKind, FlashcardSourceMode, FrostedBigTextLayout, GEOMETRY_BOUND_TEMPLATES, HostedVideo, InputCoercion, LayerMaterializationDiagnostic, LayerMaterializationFailureMode, LayerMaterializationSource, LayoutLayerDefaults, LayoutLayersResult, MAX_COVER_SLIDE_DURATION_SECONDS, MarkdownToDocOptions, MarkdownValidationResult, MaterializeBlockLayersOptions, MaterializeDashboardOptions, MaterializeFlashcardsOptions, NarrationResolution, NativeMediaLayout, NoMediaLayout, PAGE_BASE_CSS, PATH_SHAPE_KINDS, PageSectionContext, PageSectionDraft, ParsedStat, RenderAsciiDiagramOptions, RenderAsciiTimelineOptions, RenderTreeOptions, RepairResult, ResolveDataReferencesOptions, ResolvedDashboardCell, ResolvedDataReferences, ResolvedPageBlock, RichListItem, RuntimeTemplateRegistry, SHAPE_NAMES, SectionExtractor, SupplementalMediaLayoutVariant, SupplementalMediaShape, SupplementalMediaVariantMatrix, TABLE_FED_TEMPLATES, TEMPLATE_AUTHORING_METADATA, TEMPLATE_INPUT_DESCRIPTORS, TEMPLATE_METADATA, TREE_FENCE_LANGS, TemplateAuthoringMetadata, TemplateAuthoringRole, TemplateBodyPolicy, TemplateInputDescriptor, TemplateMediaOwnership, TemplateMetadata, TemplateParamFinding, Tree, TreeDetection, TreeItem, TreeNode, UnconsumedMediaBehavior, ValidateOptions, accentForViewport, adjustY, anchorPoint, applyNarrationTiming, applyRenderStyleToLayers, arrangeAsciiDiagram, asciiCellToCanvas, asciiDiagramFromBlocks, asciiDiagramFromTemplateData, asciiDiagramToTemplateData, asciiTimelineToTemplateData, autoTemplatePreservesContent, bigText, blockBuildSteps, bottomFeature, buildCursorAtTime, buildDashboardCellChrome, buildPageCss, buildPageCssVars, buildPreviewDoc, buildRegistry, buildSourceText, buildTargetState, canvasToAsciiCell, chooseDashboardLayout, clipEndpoints, clipPoint, coerceTemplateParams, comparisonBar, composeDashboardLayers, computeDiagramLayout, computeDrawingLayout, computeLayoutLayers, connectorPath, contentBlock, countBlocks, countUpSpecFor, coverBlock, createAccentLayers, cssFilterForTreatment, dashboardCanvasFill, dashboardCellAccent, dataSidecarPrefix, dataTable, dateEvent, definitionCard, deriveTemplateInputs, desiredCellZoom, detectAsciiDiagram, detectAsciiTimeline, detectTree, diagramBlock, docToMarkdown, documentTitleFromFileName, drawingBlock, expandCoverBlock, expandDocBlocks, expandPersistentLayers, extractBlockquoteText, extractBodyPlainText, extractEmbeddedVideos, extractFirstEmbeddedVideo, extractFirstImage, extractHostedVideos, extractImages, extractListItems, extractRichListItems, extractTableData, extractTableFromContents, factCard, fallbackBlockLayers, findFirstList, findFirstTable, fitBigTextSize, fitDiagramLabel, flattenBlocks, flattenRenderableBlocks, formatCountUp, formatCountValue, frostedBigTextLayout, fullBleedQuote, getAccentLayout, getAnimationProgress, getAnimationStyle, getAvailableTemplates, getBlockBodyText, getBlockDepth, getBlockMediaLayoutPolicy, getDashboardLayoutSummaries, getDefaultAnimation, getDefaultAnimationDuration, getMotionProfile, getOverlayOpacity, getPersistentLayersFromTheme, getPinnedBlockMeta, getTemplateHint, getThemeFont, getTransitionClass, hasBlockBuilds, hasTemplate, imageWithCaption, isAsciiDiagramFence, isAsciiTimelineFence, isContainerTemplate, isDataFence, isDataFilePath, isEligibleAsciiFenceLang, isEligibleAsciiTimelineFenceLang, isEligibleTreeFenceLang, isExplicitDiagramLang, isExplicitTimelineLang, isExplicitTreeLang, isGeometryBoundTemplate, isMaterializedMediaNode, isPictureFence, isPictureParagraph, isRepairableDiagram, isShapeName, isTemplatedPageBlock, isTreeFence, isWrappedFlowTimelineSource, layoutBlock, layoutCapacity, leftFeature, lineStyleDasharray, lintTemplateParams, listBlock, listDashboardLayouts, mapBlock, markdownBlockSeparatorLines, markdownToDoc, markerPath, materializeBlockLayers, materializeDashboard, materializeFlashcards, mediaOnly, motionDelay, motionEntrance, motionStateTransform, nearestSnapPoint, normalizeDashboardZoom, normalizeShapeKind, pageStyleDataAttributes, parseAsciiDiagram, parseAsciiTimeline, parseAsciiTimelineWithStats, parseDataFence, parseStatNumber, parseTree, parseWrappedFlowTimeline, parseYamlSubset, photoGrid, planContentBuilds, pullQuote, quoteBlock, readCustomTemplatesFromFrontmatter, readCustomThemesFromFrontmatter, readDashboardLayoutsFromFrontmatter, renderAsciiDiagram, renderAsciiTimeline, renderMarkdownBlocksHtml, renderTree, repairAsciiDiagram, replaceDataFence, resolveAudioMapping, resolveBuildTimeline, resolveColorScheme, resolveCoverSlideSettings, resolveDashboardLayoutDefinition, resolveDashboardSettings, resolveDashboardStyleId, resolveDashboardZooms, resolveDataReferences, resolveDocBuildTiming, resolveFlashcardMarker, resolveLayoutCells, resolvePageBlock, resolvePersistentLayers, resolveTemplateName, resolveThemeForDoc, rightFeature, scaleAnimationDuration, scoreTextSimilarity, sectionExtractors, sectionHeader, shapePath, shouldUseShadow, snapEndpoints, snapPoints, statHighlight, stripBlockBackdropLayer, stripsBlockBackdrop, templateRegistry, themeWantsAmbientMotion, themedEntrance, themedFontSize, themedImageTreatment, themedScrim, themedSurfaceGradient, timelineBlock, titleBlock, topFeature, transformOriginFor, transposeCells, treeBlock, treeFromMarkdownList, treeFromTemplateData, treeToTemplateData, twoColumn, validateDashboardLayoutDefinition, validateMarkdownDoc, validateMarkdownSource, videoPullQuote, videoWithCaption, wordRevealDelay, wrapWithPersistentLayers, writeCustomTemplatesToFrontmatter, writeCustomThemesToFrontmatter, writeDashboardLayoutsToFrontmatter } from './doc/index.js';
9
- export { M as MaterializePageSectionOptions, a as MaterializePageSectionsOptions, P as PageMedia, b as PageRichText, c as PageSection, 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-D84uA6Vk.js';
9
+ export { M as MaterializePageSectionOptions, a as MaterializePageSectionsOptions, P as PageMedia, b as PageRichText, c as PageSection, 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-_ftXlwvB.js';
10
10
  export { calculateBearing, decodeGeohash, destinationPoint, encodeGeohash, geohashOverlapsBounds, geohashToHierarchicalPath, getGeohash4Neighbors, getGeohashPath, getGeohashPrefix, getNeighbors, haversineDistance, interpolateGreatCircle, sampleGreatCircle } from './spatial/index.js';
11
11
  export { LocalForageAdapter, LocalForageAdapterOptions, LocalStorageAdapter, MemoryStorageAdapter, ScopedContentContainer, StorageAdapter, createMediaProviderFromContainer, scopeContainer } from './storage/index.js';
12
12
  export { C as ContentContainer, a as ContentEntry, M as MemoryContentContainer, f as findDocumentPath } from './ContentContainer-B2w9sUoL.js';
13
- export { BlockVideoEmbed, DEFAULT_INTERACTIVE_RESOURCE_POLICY, DEFAULT_RESOURCE_MAX_BYTES, DEFAULT_RESOURCE_TIMEOUT_MS, DEFAULT_WRAP_WIDTH, DocfxMarkdownOptions, FetchResourceBytesOptions, FetchedResource, HtmlPolicy, LOCAL_ONLY_RESOURCE_POLICY, MARKDOWN_SOURCE_TRANSFORMS, MarkdownReferenceOptions, MarkdownSourceEdit, MarkdownSourceTransform, MarkdownSourceTransformId, MarkdownSourceTransformOptions, MarkdownSourceTransformResult, MarkdownWrapState, MediaReferenceKind, ParseSvgIslandOptions, ResourcePolicy, ResourcePolicyError, SVG_ISLAND_LIMITS, SanitizeUrlOptions, SvgIsland, SvgIslandDiagnostic, SvgIslandFailureReason, SvgIslandMarkupOptions, SvgIslandResult, TrailingAnnotationMatch, UrlKind, VIDEO_EMBED_IFRAME_ALLOW, VIDEO_EMBED_PROVIDERS, VideoEmbed, VideoEmbedProviderId, VideoEmbedProviderInfo, WikiLinkSuggestion, WikiLinkSupport, applyMarkdownSourceTransform, cleanupMarkdownSource, condenseMarkdownSource, countNodes, createDocument, detectMarkdownWrapState, extractPlainText, fetchResourceBytes, findBlockVideoEmbed, findNodesByType, formatBlockScalar, formatFrontmatterValue, formatFrontmatterYaml, fromMdast, getChildren, inferDocumentTitle, isResourceUrlAllowed, isSvgImageSource, isSvgIslandFence, isSvgIslandLang, isVideoEmbedUrl, matchTrailingPandocAttr, matchTrailingTemplateAnnotation, mediaKindForUrl, needsQuoting, normalizeDocfxMarkdown, parseFrontmatter, parseHtmlToNodes, parseMarkdown, parsePandocAttrTokens, parseSvgIsland, parseVideoEmbedInput, parseVideoEmbedUrl, parseVideoStartTime, parseWikiLink, plainTextFromInlineHtml, quoteAttrValue, readFrontmatterThemeId, resolveWikiLinks, rewriteMarkdownReferences, sanitizeHtmlNodes, sanitizeUrl, serializePandocAttributes, setFrontmatterValues, splitFrontmatterBlock, splitKeyValueToken, stringifyHtmlNodes, stringifyMarkdown, svgIslandDataUrl, svgIslandMarkup, svgSourceFromBytes, svgSourceFromDataUrl, toMdast, tokenizeAttrTokens, unquoteAttrValue, unwrapMarkdownSource, videoEmbedFromIframe, videoEmbedIframeAttributes, walkMarkdownTree, wikiLinkPath, wrapMarkdownSource } from './markdown/index.js';
13
+ export { BlockVideoEmbed, DEFAULT_INTERACTIVE_RESOURCE_POLICY, DEFAULT_RESOURCE_MAX_BYTES, DEFAULT_RESOURCE_TIMEOUT_MS, DEFAULT_WRAP_WIDTH, DocfxMarkdownOptions, FetchResourceBytesOptions, FetchedResource, HtmlPolicy, LOCAL_ONLY_RESOURCE_POLICY, MARKDOWN_SOURCE_TRANSFORMS, MarkdownReferenceOptions, MarkdownSourceEdit, MarkdownSourceTransform, MarkdownSourceTransformId, MarkdownSourceTransformOptions, MarkdownSourceTransformResult, MarkdownWrapState, MediaReferenceKind, ParseSvgIslandOptions, ResourcePolicy, ResourcePolicyError, SVG_ISLAND_LIMITS, SanitizeUrlOptions, SvgIsland, SvgIslandDiagnostic, SvgIslandFailureReason, SvgIslandMarkupOptions, SvgIslandResult, TrailingAnnotationMatch, UrlKind, VIDEO_EMBED_IFRAME_ALLOW, VIDEO_EMBED_PROVIDERS, VideoEmbed, VideoEmbedProviderId, VideoEmbedProviderInfo, WikiLinkSuggestion, WikiLinkSupport, applyMarkdownSourceTransform, cleanupMarkdownSource, condenseMarkdownSource, countNodes, createDocument, detectMarkdownWrapState, extractPlainText, fetchResourceBytes, findBlockVideoEmbed, findNodesByType, formatBlockScalar, formatFrontmatterValue, formatFrontmatterYaml, fromMdast, getChildren, inferDocumentTitle, isHtmlLineBreak, isResourceUrlAllowed, isSvgImageSource, isSvgIslandFence, isSvgIslandLang, isVideoEmbedUrl, matchTrailingPandocAttr, matchTrailingTemplateAnnotation, mediaKindForUrl, needsQuoting, normalizeDocfxMarkdown, parseFrontmatter, parseHtmlToNodes, parseMarkdown, parsePandocAttrTokens, parseSvgIsland, parseVideoEmbedInput, parseVideoEmbedUrl, parseVideoStartTime, parseWikiLink, plainTextFromInlineHtml, quoteAttrValue, readFrontmatterThemeId, resolveWikiLinks, rewriteMarkdownReferences, sanitizeHtmlNodes, sanitizeUrl, serializePandocAttributes, setFrontmatterValues, splitFrontmatterBlock, splitKeyValueToken, stringifyHtmlNodes, stringifyMarkdown, svgIslandDataUrl, svgIslandMarkup, svgSourceFromBytes, svgSourceFromDataUrl, toMdast, tokenizeAttrTokens, unquoteAttrValue, unwrapMarkdownSource, videoEmbedFromIframe, videoEmbedIframeAttributes, walkMarkdownTree, wikiLinkPath, wrapMarkdownSource } from './markdown/index.js';
14
14
  export { B as BLOCK_META_KEY_DESCRIPTORS, a as BlockMetaKeyDescriptor, K as KNOWN_BLOCK_META_KEYS, b as KnownBlockMetaKey, p as parseTimeSeconds } from './annotationCoercion-hTvELpIN.js';
15
15
  export { BuildCaptionTrackOptions, CaptionSegmentSource, DEFAULT_WORDS_PER_SECOND, NarrationTimeEstimate, NarrationTimeOptions, ReadingTimeEstimate, ReadingTimeOptions, buildCaptionTrack, calculatePrefixDuration, countSpokenWords, estimateNarrationDuration, estimateNarrationTime, estimateReadingTime, estimateSpokenWordCount, estimateTimeFromText } from './timing/index.js';
16
16
  export { SeededRandom, hashString } from './random/index.js';
package/dist/index.js CHANGED
@@ -27,7 +27,7 @@ import {
27
27
  recordSlideShown,
28
28
  traceWordPosAt,
29
29
  vadStep
30
- } from "./chunk-FIPRGGXD.js";
30
+ } from "./chunk-FSZ6HB7S.js";
31
31
  import {
32
32
  fenceRendererLangs
33
33
  } from "./chunk-PGI7HSWE.js";
@@ -137,7 +137,7 @@ import {
137
137
  pipStyleVars,
138
138
  serializeTheme,
139
139
  validateDocSchema
140
- } from "./chunk-ISVJ42I3.js";
140
+ } from "./chunk-SG3HXPMF.js";
141
141
  import {
142
142
  calculateBearing,
143
143
  decodeGeohash,
@@ -230,7 +230,7 @@ import {
230
230
  validateMarkdownSource,
231
231
  wordRevealDelay,
232
232
  writeDashboardLayoutsToFrontmatter
233
- } from "./chunk-BITSNRJH.js";
233
+ } from "./chunk-K75GTKSN.js";
234
234
  import {
235
235
  buildNarrationTimingJson,
236
236
  parseNarrationTimingJson,
@@ -262,7 +262,7 @@ import {
262
262
  serializePresentationPlan,
263
263
  transformNarratedSegment,
264
264
  usesDynamicPresentation
265
- } from "./chunk-DRHJD6U4.js";
265
+ } from "./chunk-F5WTRHWL.js";
266
266
  import {
267
267
  BASE_INPUT_DESCRIPTORS,
268
268
  BLOCK_MEDIA_LAYOUT_POLICIES,
@@ -386,7 +386,7 @@ import {
386
386
  wrapWithPersistentLayers,
387
387
  writeCustomTemplatesToFrontmatter,
388
388
  writeCustomThemesToFrontmatter
389
- } from "./chunk-J2NFT7GH.js";
389
+ } from "./chunk-ZF4NWRZU.js";
390
390
  import {
391
391
  ASCII_CHAR_H,
392
392
  ASCII_CHAR_W,
@@ -441,7 +441,7 @@ import {
441
441
  treeFromMarkdownList,
442
442
  treeFromTemplateData,
443
443
  treeToTemplateData
444
- } from "./chunk-POZCKPCO.js";
444
+ } from "./chunk-CZHWFQ7C.js";
445
445
  import {
446
446
  extractContent,
447
447
  mapElementToBlock,
@@ -582,7 +582,7 @@ import {
582
582
  stringifyMarkdown,
583
583
  unwrapMarkdownSource,
584
584
  wrapMarkdownSource
585
- } from "./chunk-JFJZ4NS6.js";
585
+ } from "./chunk-FJNTG3VZ.js";
586
586
  import {
587
587
  DEFAULT_MARKDOWN_SAFETY_LIMITS,
588
588
  MarkdownLimitError,
@@ -597,7 +597,7 @@ import {
597
597
  serializePandocAttributes,
598
598
  toMdast,
599
599
  wikiLinkPath
600
- } from "./chunk-D3JQMZUT.js";
600
+ } from "./chunk-CPD3MFX7.js";
601
601
  import {
602
602
  CONTAINER_TEMPLATES,
603
603
  TABLE_FED_TEMPLATES,
@@ -619,6 +619,7 @@ import {
619
619
  formatFrontmatterYaml,
620
620
  getChildren,
621
621
  inferDocumentTitle,
622
+ isHtmlLineBreak,
622
623
  isSvgImageSource,
623
624
  isSvgIslandFence,
624
625
  isSvgIslandLang,
@@ -652,7 +653,7 @@ import {
652
653
  videoEmbedFromIframe,
653
654
  videoEmbedIframeAttributes,
654
655
  walkMarkdownTree
655
- } from "./chunk-6NWVLLMI.js";
656
+ } from "./chunk-KVEOD57Z.js";
656
657
  import {
657
658
  ICONS,
658
659
  canonicalIconToken,
@@ -1075,6 +1076,7 @@ export {
1075
1076
  isExplicitTreeLang,
1076
1077
  isGeometryBoundTemplate,
1077
1078
  isHex,
1079
+ isHtmlLineBreak,
1078
1080
  isMaterializedMediaNode,
1079
1081
  isMotionProfileName,
1080
1082
  isPersistentLayerTemplate,
@@ -1,4 +1,4 @@
1
- import { bC as Theme, bo as SurfaceScheme } from '../Doc-DnRFE0EI.js';
1
+ import { bC as Theme, bo as SurfaceScheme } from '../Doc-BQUVDooL.js';
2
2
  import '../types-Zk8qYuaT.js';
3
3
 
4
4
  /**
@@ -16,7 +16,7 @@ import {
16
16
  setByPointer,
17
17
  toPointer
18
18
  } from "../chunk-GLWQTZ4C.js";
19
- import "../chunk-ISVJ42I3.js";
19
+ import "../chunk-SG3HXPMF.js";
20
20
  import "../chunk-2SRF5III.js";
21
21
  import "../chunk-WNEH3BZP.js";
22
22
  import "../chunk-JSGIWW35.js";
@@ -672,6 +672,11 @@ declare function walkMarkdownTree(node: MarkdownNode, visitor: (node: MarkdownNo
672
672
  * ```
673
673
  */
674
674
  declare function findNodesByType<T extends MarkdownNode>(root: MarkdownNode, type: T['type']): T[];
675
+ /**
676
+ * Whether a raw inline HTML fragment is a line break tag: `<br>`, `<br/>` or
677
+ * `<br />`. Markdown has no other way to break a line inside a table cell.
678
+ */
679
+ declare function isHtmlLineBreak(rawHtml: string): boolean;
675
680
  /**
676
681
  * Extract all plain text content from a node and its descendants.
677
682
  * Concatenates text values, ignoring formatting, links, etc.
@@ -992,4 +997,4 @@ interface WikiLinkSupport {
992
997
  */
993
998
  declare function resolveWikiLinks(document: MarkdownDocument, exists: (target: string) => Promise<boolean | string | null>): Promise<MarkdownDocument>;
994
999
 
995
- export { type BlockVideoEmbed, DEFAULT_INTERACTIVE_RESOURCE_POLICY, DEFAULT_RESOURCE_MAX_BYTES, DEFAULT_RESOURCE_TIMEOUT_MS, DEFAULT_WRAP_WIDTH, type DocfxMarkdownOptions, type FetchResourceBytesOptions, type FetchedResource, HeadingAttributes, HtmlElement, HtmlNode, type HtmlPolicy, LOCAL_ONLY_RESOURCE_POLICY, MARKDOWN_SOURCE_TRANSFORMS, MarkdownBlockNode, MarkdownDocument, MarkdownNode, type MarkdownReferenceOptions, type MarkdownSourceEdit, type MarkdownSourceTransform, type MarkdownSourceTransformId, type MarkdownSourceTransformOptions, type MarkdownSourceTransformResult, type MarkdownWrapState, type MediaReferenceKind, ParseOptions, type ParseSvgIslandOptions, type ResourcePolicy, ResourcePolicyError, SVG_ISLAND_LIMITS, type SanitizeUrlOptions, StringifyOptions, type SvgIsland, type SvgIslandDiagnostic, type SvgIslandFailureReason, type SvgIslandMarkupOptions, type SvgIslandResult, type TrailingAnnotationMatch, type UrlKind, VIDEO_EMBED_IFRAME_ALLOW, VIDEO_EMBED_PROVIDERS, type VideoEmbed, type VideoEmbedProviderId, type VideoEmbedProviderInfo, type WikiLinkSuggestion, type WikiLinkSupport, applyMarkdownSourceTransform, cleanupMarkdownSource, condenseMarkdownSource, countNodes, createDocument, detectMarkdownWrapState, extractPlainText, fetchResourceBytes, findBlockVideoEmbed, findNodesByType, formatBlockScalar, formatFrontmatterValue, formatFrontmatterYaml, fromMdast, getChildren, inferDocumentTitle, isResourceUrlAllowed, isSvgImageSource, isSvgIslandFence, isSvgIslandLang, isVideoEmbedUrl, matchTrailingPandocAttr, matchTrailingTemplateAnnotation, mediaKindForUrl, needsQuoting, normalizeDocfxMarkdown, parseFrontmatter, parseHtmlToNodes, parseMarkdown, parsePandocAttrTokens, parseSvgIsland, parseVideoEmbedInput, parseVideoEmbedUrl, parseVideoStartTime, parseWikiLink, plainTextFromInlineHtml, quoteAttrValue, readFrontmatterThemeId, resolveWikiLinks, rewriteMarkdownReferences, sanitizeHtmlNodes, sanitizeUrl, serializePandocAttributes, setFrontmatterValues, splitFrontmatterBlock, splitKeyValueToken, stringifyHtmlNodes, stringifyMarkdown, svgIslandDataUrl, svgIslandMarkup, svgSourceFromBytes, svgSourceFromDataUrl, toMdast, tokenizeAttrTokens, unquoteAttrValue, unwrapMarkdownSource, videoEmbedFromIframe, videoEmbedIframeAttributes, walkMarkdownTree, wikiLinkPath, wrapMarkdownSource };
1000
+ export { type BlockVideoEmbed, DEFAULT_INTERACTIVE_RESOURCE_POLICY, DEFAULT_RESOURCE_MAX_BYTES, DEFAULT_RESOURCE_TIMEOUT_MS, DEFAULT_WRAP_WIDTH, type DocfxMarkdownOptions, type FetchResourceBytesOptions, type FetchedResource, HeadingAttributes, HtmlElement, HtmlNode, type HtmlPolicy, LOCAL_ONLY_RESOURCE_POLICY, MARKDOWN_SOURCE_TRANSFORMS, MarkdownBlockNode, MarkdownDocument, MarkdownNode, type MarkdownReferenceOptions, type MarkdownSourceEdit, type MarkdownSourceTransform, type MarkdownSourceTransformId, type MarkdownSourceTransformOptions, type MarkdownSourceTransformResult, type MarkdownWrapState, type MediaReferenceKind, ParseOptions, type ParseSvgIslandOptions, type ResourcePolicy, ResourcePolicyError, SVG_ISLAND_LIMITS, type SanitizeUrlOptions, StringifyOptions, type SvgIsland, type SvgIslandDiagnostic, type SvgIslandFailureReason, type SvgIslandMarkupOptions, type SvgIslandResult, type TrailingAnnotationMatch, type UrlKind, VIDEO_EMBED_IFRAME_ALLOW, VIDEO_EMBED_PROVIDERS, type VideoEmbed, type VideoEmbedProviderId, type VideoEmbedProviderInfo, type WikiLinkSuggestion, type WikiLinkSupport, applyMarkdownSourceTransform, cleanupMarkdownSource, condenseMarkdownSource, countNodes, createDocument, detectMarkdownWrapState, extractPlainText, fetchResourceBytes, findBlockVideoEmbed, findNodesByType, formatBlockScalar, formatFrontmatterValue, formatFrontmatterYaml, fromMdast, getChildren, inferDocumentTitle, isHtmlLineBreak, isResourceUrlAllowed, isSvgImageSource, isSvgIslandFence, isSvgIslandLang, isVideoEmbedUrl, matchTrailingPandocAttr, matchTrailingTemplateAnnotation, mediaKindForUrl, needsQuoting, normalizeDocfxMarkdown, parseFrontmatter, parseHtmlToNodes, parseMarkdown, parsePandocAttrTokens, parseSvgIsland, parseVideoEmbedInput, parseVideoEmbedUrl, parseVideoStartTime, parseWikiLink, plainTextFromInlineHtml, quoteAttrValue, readFrontmatterThemeId, resolveWikiLinks, rewriteMarkdownReferences, sanitizeHtmlNodes, sanitizeUrl, serializePandocAttributes, setFrontmatterValues, splitFrontmatterBlock, splitKeyValueToken, stringifyHtmlNodes, stringifyMarkdown, svgIslandDataUrl, svgIslandMarkup, svgSourceFromBytes, svgSourceFromDataUrl, toMdast, tokenizeAttrTokens, unquoteAttrValue, unwrapMarkdownSource, videoEmbedFromIframe, videoEmbedIframeAttributes, walkMarkdownTree, wikiLinkPath, wrapMarkdownSource };
@@ -17,7 +17,7 @@ import {
17
17
  stringifyMarkdown,
18
18
  unwrapMarkdownSource,
19
19
  wrapMarkdownSource
20
- } from "../chunk-JFJZ4NS6.js";
20
+ } from "../chunk-FJNTG3VZ.js";
21
21
  import {
22
22
  DEFAULT_MARKDOWN_SAFETY_LIMITS,
23
23
  MarkdownLimitError,
@@ -32,7 +32,7 @@ import {
32
32
  serializePandocAttributes,
33
33
  toMdast,
34
34
  wikiLinkPath
35
- } from "../chunk-D3JQMZUT.js";
35
+ } from "../chunk-CPD3MFX7.js";
36
36
  import "../chunk-DOOUVVOM.js";
37
37
  import {
38
38
  BLOCK_META_KEY_DESCRIPTORS,
@@ -49,6 +49,7 @@ import {
49
49
  formatFrontmatterYaml,
50
50
  getChildren,
51
51
  inferDocumentTitle,
52
+ isHtmlLineBreak,
52
53
  isSvgImageSource,
53
54
  isSvgIslandFence,
54
55
  isSvgIslandLang,
@@ -82,7 +83,7 @@ import {
82
83
  videoEmbedFromIframe,
83
84
  videoEmbedIframeAttributes,
84
85
  walkMarkdownTree
85
- } from "../chunk-6NWVLLMI.js";
86
+ } from "../chunk-KVEOD57Z.js";
86
87
  import "../chunk-CZ7AUSLI.js";
87
88
  import {
88
89
  SVG_ISLAND_LIMITS
@@ -120,6 +121,7 @@ export {
120
121
  fromMdast,
121
122
  getChildren,
122
123
  inferDocumentTitle,
124
+ isHtmlLineBreak,
123
125
  isResourceUrlAllowed,
124
126
  isSvgImageSource,
125
127
  isSvgIslandFence,
@@ -1,4 +1,4 @@
1
- import { k as Block, aV as PageSectionKind, aT as PageEmphasis, bE as ThemeColorScheme, aR as PageBackground, bC as Theme, c7 as ViewportConfig, z as CustomTemplateDefinition, aY as PageVariant, bm as StartBlockConfig, R as Doc, bF as ThemePageStyle } from './Doc-DnRFE0EI.js';
1
+ import { k as Block, aV as PageSectionKind, aT as PageEmphasis, bE as ThemeColorScheme, aR as PageBackground, bC as Theme, c7 as ViewportConfig, z as CustomTemplateDefinition, aY as PageVariant, bm as StartBlockConfig, R as Doc, bF as ThemePageStyle } from './Doc-BQUVDooL.js';
2
2
  import { M as MarkdownBlockNode } from './types-Zk8qYuaT.js';
3
3
 
4
4
  /**
@@ -1,5 +1,5 @@
1
- import { am as MediaCut, R as Doc, ak as MediaClip, cD as MediaFxOpId, cE as MediaFxChain } from '../Doc-DnRFE0EI.js';
2
- export { cF as MEDIA_EDIT_PARAMS, cG as MEDIA_FX_ORDER, cH as MEDIA_FX_SPECS, al as MediaCrop, cI as MediaEditParamKey, cJ as MediaEditParamValues, an as MediaEdits, cK as MediaFxOp, cL as formatMediaNumber, cM as hasRenderableFx, cN as mediaEditHtmlAttribute, cO as mediaEditValuesFromAttributes, cP as mediaEditValuesFromParams, cQ as mediaRenderKey, cR as normalizeMediaCrop, cS as normalizeMediaCuts, cT as parseMediaCrop, cU as parseMediaCuts, cV as parseMediaEdits, cW as parseMediaFx, cX as serializeMediaCrop, cY as serializeMediaCuts, cZ as serializeMediaEdits, c_ as serializeMediaFx } from '../Doc-DnRFE0EI.js';
1
+ import { am as MediaCut, R as Doc, ak as MediaClip, cD as MediaFxOpId, cE as MediaFxChain } from '../Doc-BQUVDooL.js';
2
+ export { cF as MEDIA_EDIT_PARAMS, cG as MEDIA_FX_ORDER, cH as MEDIA_FX_SPECS, al as MediaCrop, cI as MediaEditParamKey, cJ as MediaEditParamValues, an as MediaEdits, cK as MediaFxOp, cL as formatMediaNumber, cM as hasRenderableFx, cN as mediaEditHtmlAttribute, cO as mediaEditValuesFromAttributes, cP as mediaEditValuesFromParams, cQ as mediaRenderKey, cR as normalizeMediaCrop, cS as normalizeMediaCuts, cT as parseMediaCrop, cU as parseMediaCuts, cV as parseMediaEdits, cW as parseMediaFx, cX as serializeMediaCrop, cY as serializeMediaCuts, cZ as serializeMediaEdits, c_ as serializeMediaFx } from '../Doc-BQUVDooL.js';
3
3
  import '../types-Zk8qYuaT.js';
4
4
 
5
5
  /**
@@ -1,4 +1,4 @@
1
- import { R as Doc, f as AudioBookmark } from '../Doc-DnRFE0EI.js';
1
+ import { R as Doc, f as AudioBookmark } from '../Doc-BQUVDooL.js';
2
2
  import { d as BuildAdvance } from '../types-Zk8qYuaT.js';
3
3
 
4
4
  /**
@@ -27,7 +27,7 @@ import {
27
27
  recordSlideShown,
28
28
  traceWordPosAt,
29
29
  vadStep
30
- } from "../chunk-FIPRGGXD.js";
30
+ } from "../chunk-FSZ6HB7S.js";
31
31
  import "../chunk-NEWNNLWN.js";
32
32
  import {
33
33
  buildNarrationTimingJson,
@@ -41,13 +41,13 @@ import {
41
41
  wordIndexAtChar,
42
42
  wordIndexAtTime,
43
43
  wordPosAtExpectedSyllables
44
- } from "../chunk-J2NFT7GH.js";
45
- import "../chunk-POZCKPCO.js";
44
+ } from "../chunk-ZF4NWRZU.js";
45
+ import "../chunk-CZHWFQ7C.js";
46
46
  import "../chunk-FUBMT6SJ.js";
47
47
  import "../chunk-WNEH3BZP.js";
48
48
  import "../chunk-L7QZORLB.js";
49
49
  import "../chunk-DOOUVVOM.js";
50
- import "../chunk-6NWVLLMI.js";
50
+ import "../chunk-KVEOD57Z.js";
51
51
  import "../chunk-P53Z4RYC.js";
52
52
  import "../chunk-GHOPHGOK.js";
53
53
  import "../chunk-XRW6P7IF.js";
@@ -1,9 +1,9 @@
1
1
  import {
2
2
  profileBlockContents,
3
3
  recommendTemplatesForBlock
4
- } from "../chunk-POZCKPCO.js";
4
+ } from "../chunk-CZHWFQ7C.js";
5
5
  import "../chunk-L7QZORLB.js";
6
- import "../chunk-6NWVLLMI.js";
6
+ import "../chunk-KVEOD57Z.js";
7
7
  import "../chunk-P53Z4RYC.js";
8
8
  export {
9
9
  profileBlockContents,
@@ -1,10 +1,10 @@
1
1
  export { B as BUILD_EFFECTS, a as BUILD_MODES, b as BUILD_PARAM_KEYS, c as BUILD_PREVIOUS, d as BuildAdvance, e as BuildCursor, f as BuildSpec, g as BuildStep, h as BuildTiming, i as DEFAULT_TRANSITION_DURATION_SECONDS, aa as TRANSITION_DIRECTIONS, ab as TRANSITION_TYPES, ac as Transition, ad as TransitionDirection, ae as TransitionType, ah as buildSpecParams, ai as isTransitionType, aj as normalizeTransitionDirection, ak as normalizeTransitionType, al as parseBuildSpec, am as recordBuildAdvance, an as resolveBlockTransition, ap as resolveTransitionDuration } from '../types-Zk8qYuaT.js';
2
2
  export { B as BoundingBox, C as Coordinates } from '../Types-sh2VRxfo.js';
3
- import { R as Doc, bC as Theme, bF as ThemePageStyle, bE as ThemeColorScheme, L as DeepPartial, bI as ThemeSeedColors, bD as ThemeColorPalette, $ as FontFamilyKind, _ as FontFamily } from '../Doc-DnRFE0EI.js';
4
- export { A as AccentImage, a as AccentPosition, b as AmbientGradientConfig, c as Animation, d as AnimationType, e as AreaChartInput, f as AudioBookmark, g as AudioSegment, h as AudioTimingData, i as AudioTrack, B as BarChartInput, j as BigTextInput, k as Block, l as BlockConnection, m as BorderStyle, n as BottomFeatureInput, C as CaptionPhrase, o as CaptionTrack, p as CaptionWord, q as ChartBaseFields, r as ChartTemplateInput, s as ColorScheme, t as ColumnChartInput, u as ComparisonBarInput, v as ContentBlockInput, w as CornerBrandingConfig, x as CountUpSpec, y as CreateTemplateContextOptions, z as CustomTemplateDefinition, D as CustomTemplateLayer, E as CustomTemplateValidationError, F as CustomTemplateValidationResult, G as DARK_SURFACE, H as DEFAULT_DOC_FONT, I as DEFAULT_TITLE_FONT, J as DataTableInput, K as DateEventInput, M as DefinitionCardInput, N as DiagramBlockInput, O as DiagramEdgeAnchor, P as DiagramTemplateEdge, Q as DiagramTemplateNode, S as DocBlock, T as DocDiagnostic, U as DonutChartInput, V as DrawingBlockInput, W as FRONTMATTER_CUSTOM_TEMPLATES_KEY, X as FRONTMATTER_CUSTOM_THEMES_KEY, Y as FRONTMATTER_MOTION_KEY, Z as FactCardInput, a0 as FullBleedQuoteInput, a1 as GradientBackgroundConfig, a2 as ImageBackgroundConfig, a3 as ImageLayer, a4 as ImageTreatment, a5 as ImageWithCaptionInput, a6 as LIGHT_SURFACE, a7 as Layer, a8 as LayerRepeat, a9 as LayoutHints, aa as LeftFeatureInput, ab as LineChartInput, ac as LinearGradient, ad as ListBlockInput, ae as MOTION_PROFILES, af as MapBlockInput, ag as MapLayer, ah as MapMarker, ai as MapTileStyle, aj as MarkerStyle, ak as MediaClip, al as MediaCrop, am as MediaCut, an as MediaEdits, ao as MediaOnlyInput, ap as MediaScheduleOptions, aq as MermaidLayer, ar as MotionEntrance, as as MotionOrigin, at as MotionProfile, au as MotionProfileName, av as MotionSpec, aw as MotionState, ax as PAGE_ACCENT_STRATEGIES, ay as PAGE_BACKGROUNDS, az as PAGE_BACKGROUND_RHYTHMS, aA as PAGE_DESIGN_FAMILIES, aB as PAGE_DIVIDERS, aC as PAGE_EMPHASES, aD as PAGE_EYEBROWS, aE as PAGE_HEADING_CASES, aF as PAGE_HEADING_SCALES, aG as PAGE_HEADING_UNDERLINES, aH as PAGE_HERO_STYLES, aI as PAGE_IMAGE_FRAMINGS, aJ as PAGE_NUMERAL_STYLES, aK as PAGE_PATTERNS, aL as PAGE_QUOTE_MARKS, aM as PAGE_SECTION_KINDS, aN as PAGE_SECTION_SPACINGS, aO as PAGE_SHADOWS, aP as PAGE_VARIANTS, aQ as PageAccentRotation, aR as PageBackground, aS as PageDesignFamily, aT as PageEmphasis, aU as PageHeadingTreatment, aV as PageSectionKind, aW as PageSectionOverride, aX as PageTokens, aY as PageVariant, aZ as PathLayer, a_ as PatternBackgroundConfig, a$ as PersistentLayer, b0 as PersistentLayerConfig, b1 as PersistentLayerTemplate, b2 as PersistentLayerTemplateConfig, b3 as PersistentLayerTemplateType, b4 as PhotoGridInput, b5 as PieChartInput, b6 as PipStyle, b7 as Position, b8 as ProgressIndicatorConfig, b9 as PromotedBodyAnnotation, ba as PullQuoteInput, bb as QuoteBlockInput, bc as RawLayersInput, bd as RenderStyle, be as RightFeatureInput, bf as ScatterChartInput, bg as ScheduledClip, bh as SectionHeaderInput, bi as ShapeFilter, bj as ShapeLayer, bk as ShapePattern, bl as SolidBackgroundConfig, bm as StartBlockConfig, bn as StatHighlightInput, bo as SurfaceScheme, bp as SvgLayer, bq as THEME_SCHEMA_VERSION, br as TableLayer, bs as TableLayerStyle, bt as TemplateBlock, bu as TemplateContext, bv as TemplateFunction, bw as TemplateRegistry, bx as TextFlow, by as TextLayer, bz as TextParagraph, bA as TextParagraphList, bB as TextStyle, bG as ThemeRegistry, bH as ThemeSchemaVersion, bJ as ThemeStyle, bK as ThemeTypography, bL as TimelineBlockInput, bM as TimelineTemplateEvent, bN as TimelineTemplateLink, bO as TimelineTemplateTrack, bP as TitleBlockInput, bQ as TitleCaptionConfig, bR as TopFeatureInput, bS as TranscriptBlockInput, bT as TreeBlockInput, bU as TreeLayer, bV as TreeLayerItem, bW as TreeLayerStyle, bX as TreeTemplateItem, bY as TwoColumnInput, bZ as VIEWPORT_PRESETS, b_ as VideoEmbedLayer, b$ as VideoLayer, c0 as VideoPipPosition, c1 as VideoPipShape, c2 as VideoPipSize, c3 as VideoPlacement, c4 as VideoPresentation, c5 as VideoPullQuoteInput, c6 as VideoWithCaptionInput, c7 as ViewportConfig, c8 as ViewportOrientation, c9 as ViewportPreset, ca as VignetteConfig, cb as applySurface, cc as calculateDuration, cd as calculateFontScale, ce as createTemplateContext, cf as createTheme, cg as createThemeRegistry, ch as getAspectRatioString, ci as getBlockAtTime, cj as getCaptionAtTime, ck as getDocPlaybackDuration, cl as getLayoutHints, cm as getSafeTextBounds, cn as getSegmentAtTime, co as getTwoColumnPositions, cp as getViewport, cq as getViewportOrientation, cr as isCustomTemplateDefinition, cs as isMotionProfileName, ct as isPersistentLayerTemplate, cu as isTemplateBlock, cv as layoutScaledFontSize, cw as readFrontmatterMotion, cx as resolveMediaSchedule, cy as resolveMotionForDoc, cz as resolveMotionProfile, cA as scaledFontSize, cB as scheduleMediaClip, cC as validateCustomTemplateDefinition } from '../Doc-DnRFE0EI.js';
5
- export { D as DEFAULT_THEME, a as DEFAULT_THEME_ID, T as THEMES, g as getAvailableThemes, b as getThemeSummaries, r as resolveTheme } from '../themeLibrary-in0fafp4.js';
3
+ import { R as Doc, bC as Theme, bF as ThemePageStyle, bE as ThemeColorScheme, L as DeepPartial, bI as ThemeSeedColors, bD as ThemeColorPalette, $ as FontFamilyKind, _ as FontFamily } from '../Doc-BQUVDooL.js';
4
+ export { A as AccentImage, a as AccentPosition, b as AmbientGradientConfig, c as Animation, d as AnimationType, e as AreaChartInput, f as AudioBookmark, g as AudioSegment, h as AudioTimingData, i as AudioTrack, B as BarChartInput, j as BigTextInput, k as Block, l as BlockConnection, m as BorderStyle, n as BottomFeatureInput, C as CaptionPhrase, o as CaptionTrack, p as CaptionWord, q as ChartBaseFields, r as ChartTemplateInput, s as ColorScheme, t as ColumnChartInput, u as ComparisonBarInput, v as ContentBlockInput, w as CornerBrandingConfig, x as CountUpSpec, y as CreateTemplateContextOptions, z as CustomTemplateDefinition, D as CustomTemplateLayer, E as CustomTemplateValidationError, F as CustomTemplateValidationResult, G as DARK_SURFACE, H as DEFAULT_DOC_FONT, I as DEFAULT_TITLE_FONT, J as DataTableInput, K as DateEventInput, M as DefinitionCardInput, N as DiagramBlockInput, O as DiagramEdgeAnchor, P as DiagramTemplateEdge, Q as DiagramTemplateNode, S as DocBlock, T as DocDiagnostic, U as DonutChartInput, V as DrawingBlockInput, W as FRONTMATTER_CUSTOM_TEMPLATES_KEY, X as FRONTMATTER_CUSTOM_THEMES_KEY, Y as FRONTMATTER_MOTION_KEY, Z as FactCardInput, a0 as FullBleedQuoteInput, a1 as GradientBackgroundConfig, a2 as ImageBackgroundConfig, a3 as ImageLayer, a4 as ImageTreatment, a5 as ImageWithCaptionInput, a6 as LIGHT_SURFACE, a7 as Layer, a8 as LayerRepeat, a9 as LayoutHints, aa as LeftFeatureInput, ab as LineChartInput, ac as LinearGradient, ad as ListBlockInput, ae as MOTION_PROFILES, af as MapBlockInput, ag as MapLayer, ah as MapMarker, ai as MapTileStyle, aj as MarkerStyle, ak as MediaClip, al as MediaCrop, am as MediaCut, an as MediaEdits, ao as MediaOnlyInput, ap as MediaScheduleOptions, aq as MermaidLayer, ar as MotionEntrance, as as MotionOrigin, at as MotionProfile, au as MotionProfileName, av as MotionSpec, aw as MotionState, ax as PAGE_ACCENT_STRATEGIES, ay as PAGE_BACKGROUNDS, az as PAGE_BACKGROUND_RHYTHMS, aA as PAGE_DESIGN_FAMILIES, aB as PAGE_DIVIDERS, aC as PAGE_EMPHASES, aD as PAGE_EYEBROWS, aE as PAGE_HEADING_CASES, aF as PAGE_HEADING_SCALES, aG as PAGE_HEADING_UNDERLINES, aH as PAGE_HERO_STYLES, aI as PAGE_IMAGE_FRAMINGS, aJ as PAGE_NUMERAL_STYLES, aK as PAGE_PATTERNS, aL as PAGE_QUOTE_MARKS, aM as PAGE_SECTION_KINDS, aN as PAGE_SECTION_SPACINGS, aO as PAGE_SHADOWS, aP as PAGE_VARIANTS, aQ as PageAccentRotation, aR as PageBackground, aS as PageDesignFamily, aT as PageEmphasis, aU as PageHeadingTreatment, aV as PageSectionKind, aW as PageSectionOverride, aX as PageTokens, aY as PageVariant, aZ as PathLayer, a_ as PatternBackgroundConfig, a$ as PersistentLayer, b0 as PersistentLayerConfig, b1 as PersistentLayerTemplate, b2 as PersistentLayerTemplateConfig, b3 as PersistentLayerTemplateType, b4 as PhotoGridInput, b5 as PieChartInput, b6 as PipStyle, b7 as Position, b8 as ProgressIndicatorConfig, b9 as PromotedBodyAnnotation, ba as PullQuoteInput, bb as QuoteBlockInput, bc as RawLayersInput, bd as RenderStyle, be as RightFeatureInput, bf as ScatterChartInput, bg as ScheduledClip, bh as SectionHeaderInput, bi as ShapeFilter, bj as ShapeLayer, bk as ShapePattern, bl as SolidBackgroundConfig, bm as StartBlockConfig, bn as StatHighlightInput, bo as SurfaceScheme, bp as SvgLayer, bq as THEME_SCHEMA_VERSION, br as TableLayer, bs as TableLayerStyle, bt as TemplateBlock, bu as TemplateContext, bv as TemplateFunction, bw as TemplateRegistry, bx as TextFlow, by as TextLayer, bz as TextParagraph, bA as TextParagraphList, bB as TextStyle, bG as ThemeRegistry, bH as ThemeSchemaVersion, bJ as ThemeStyle, bK as ThemeTypography, bL as TimelineBlockInput, bM as TimelineTemplateEvent, bN as TimelineTemplateLink, bO as TimelineTemplateTrack, bP as TitleBlockInput, bQ as TitleCaptionConfig, bR as TopFeatureInput, bS as TranscriptBlockInput, bT as TreeBlockInput, bU as TreeLayer, bV as TreeLayerItem, bW as TreeLayerStyle, bX as TreeTemplateItem, bY as TwoColumnInput, bZ as VIEWPORT_PRESETS, b_ as VideoEmbedLayer, b$ as VideoLayer, c0 as VideoPipPosition, c1 as VideoPipShape, c2 as VideoPipSize, c3 as VideoPlacement, c4 as VideoPresentation, c5 as VideoPullQuoteInput, c6 as VideoWithCaptionInput, c7 as ViewportConfig, c8 as ViewportOrientation, c9 as ViewportPreset, ca as VignetteConfig, cb as applySurface, cc as calculateDuration, cd as calculateFontScale, ce as createTemplateContext, cf as createTheme, cg as createThemeRegistry, ch as getAspectRatioString, ci as getBlockAtTime, cj as getCaptionAtTime, ck as getDocPlaybackDuration, cl as getLayoutHints, cm as getSafeTextBounds, cn as getSegmentAtTime, co as getTwoColumnPositions, cp as getViewport, cq as getViewportOrientation, cr as isCustomTemplateDefinition, cs as isMotionProfileName, ct as isPersistentLayerTemplate, cu as isTemplateBlock, cv as layoutScaledFontSize, cw as readFrontmatterMotion, cx as resolveMediaSchedule, cy as resolveMotionForDoc, cz as resolveMotionProfile, cA as scaledFontSize, cB as scheduleMediaClip, cC as validateCustomTemplateDefinition } from '../Doc-BQUVDooL.js';
5
+ export { D as DEFAULT_THEME, a as DEFAULT_THEME_ID, T as THEMES, g as getAvailableThemes, b as getThemeSummaries, r as resolveTheme } from '../themeLibrary-D6GK29l3.js';
6
6
  export { M as MediaEntry, a as MediaProvider } from '../MediaProvider-wpSe21B3.js';
7
- export { E as EditorLayerMeta, I as ImageEditCanvas, a as ImageEditDoc, b as ImageEditLayer, c as ImageEditLayerKind, d as ImageEditMeta } from '../ImageEditDoc-CadNz387.js';
7
+ export { E as EditorLayerMeta, I as ImageEditCanvas, a as ImageEditDoc, b as ImageEditLayer, c as ImageEditLayerKind, d as ImageEditMeta } from '../ImageEditDoc-glA5UUau.js';
8
8
 
9
9
  /**
10
10
  * Runtime validation for the canonical {@link Doc} JSON shape.
@@ -13,7 +13,7 @@ import {
13
13
  pipStyleVars,
14
14
  serializeTheme,
15
15
  validateDocSchema
16
- } from "../chunk-ISVJ42I3.js";
16
+ } from "../chunk-SG3HXPMF.js";
17
17
  import {
18
18
  defaultPageStyle,
19
19
  getDocPlaybackDuration,
@@ -1,4 +1,4 @@
1
- import { bC as Theme, bG as ThemeRegistry } from './Doc-DnRFE0EI.js';
1
+ import { bC as Theme, bG as ThemeRegistry } from './Doc-BQUVDooL.js';
2
2
 
3
3
  /**
4
4
  * Built-in Theme Library
@@ -1,4 +1,4 @@
1
- import { g as AudioSegment, h as AudioTimingData, o as CaptionTrack } from '../Doc-DnRFE0EI.js';
1
+ import { g as AudioSegment, h as AudioTimingData, o as CaptionTrack } from '../Doc-BQUVDooL.js';
2
2
  import '../types-Zk8qYuaT.js';
3
3
 
4
4
  /**
@@ -1,5 +1,5 @@
1
- import { R as Doc, s as ColorScheme, k as Block, bt as TemplateBlock } from '../Doc-DnRFE0EI.js';
2
- import { i as PageTransformHints } from '../materializePageSection-D84uA6Vk.js';
1
+ import { R as Doc, s as ColorScheme, k as Block, bt as TemplateBlock } from '../Doc-BQUVDooL.js';
2
+ import { i as PageTransformHints } from '../materializePageSection-_ftXlwvB.js';
3
3
  import { d as ExtractionType, E as ExtractedElement, b as ExtractionOptions } from '../contentExtractor-BNfVJV2U.js';
4
4
  import { f as BuildSpec } from '../types-Zk8qYuaT.js';
5
5
 
@@ -24,16 +24,16 @@ import {
24
24
  serializePresentationPlan,
25
25
  transformNarratedSegment,
26
26
  usesDynamicPresentation
27
- } from "../chunk-DRHJD6U4.js";
28
- import "../chunk-J2NFT7GH.js";
29
- import "../chunk-POZCKPCO.js";
27
+ } from "../chunk-F5WTRHWL.js";
28
+ import "../chunk-ZF4NWRZU.js";
29
+ import "../chunk-CZHWFQ7C.js";
30
30
  import "../chunk-SVN7T6BK.js";
31
31
  import "../chunk-FUBMT6SJ.js";
32
32
  import "../chunk-WNEH3BZP.js";
33
33
  import "../chunk-L7QZORLB.js";
34
- import "../chunk-D3JQMZUT.js";
34
+ import "../chunk-CPD3MFX7.js";
35
35
  import "../chunk-DOOUVVOM.js";
36
- import "../chunk-6NWVLLMI.js";
36
+ import "../chunk-KVEOD57Z.js";
37
37
  import "../chunk-CZ7AUSLI.js";
38
38
  import "../chunk-P53Z4RYC.js";
39
39
  import "../chunk-GHOPHGOK.js";
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bendyline/squisq",
3
- "version": "2.13.4",
3
+ "version": "2.13.5",
4
4
  "description": "Headless utilities for doc/block rendering, spatial math, Markdown, and storage",
5
5
  "license": "MIT",
6
6
  "author": "Bendyline",