@bendyline/squisq 2.11.12 → 2.11.14

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.
@@ -2153,6 +2153,7 @@ function deriveTemplateInputs(templateName, headingText, contents, options = {})
2153
2153
 
2154
2154
  // src/doc/templates/contentBlock.ts
2155
2155
  function bodyNodes(context) {
2156
+ if (context.block?.summaryMode === "headings-and-features") return [];
2156
2157
  return (context.block?.contents ?? []).filter(
2157
2158
  // Mermaid source is already materialized as a visual layer. Repeating the
2158
2159
  // fence text as prose makes the loss-averse default noisy without
@@ -3310,6 +3311,41 @@ function imageWithCaption(input, context) {
3310
3311
  return layers;
3311
3312
  }
3312
3313
 
3314
+ // src/doc/templates/featureMediaSlot.ts
3315
+ function featureMediaSlot(side, {
3316
+ stack,
3317
+ summaryFeature,
3318
+ sized = false
3319
+ }) {
3320
+ if (summaryFeature) {
3321
+ return {
3322
+ position: {
3323
+ x: stack ? "5%" : side === "left" ? "5%" : "35%",
3324
+ y: "5%",
3325
+ width: stack ? "90%" : "60%",
3326
+ height: stack ? "70%" : "90%"
3327
+ },
3328
+ fit: "contain"
3329
+ };
3330
+ }
3331
+ if (stack) {
3332
+ return {
3333
+ position: { x: "0", y: "0", width: "100%", height: "50%" },
3334
+ fit: sized ? "contain" : "cover"
3335
+ };
3336
+ }
3337
+ if (sized) {
3338
+ return {
3339
+ position: { x: side === "left" ? "5%" : "55%", y: "5%", width: "40%", height: "90%" },
3340
+ fit: "contain"
3341
+ };
3342
+ }
3343
+ return {
3344
+ position: { x: side === "left" ? "0" : "50%", y: "0", width: "50%", height: "100%" },
3345
+ fit: "cover"
3346
+ };
3347
+ }
3348
+
3313
3349
  // src/doc/templates/featureBlock.ts
3314
3350
  var TITLE_LINE_HEIGHT3 = 1.2;
3315
3351
  var BODY_LINE_HEIGHT = 1.5;
@@ -3375,6 +3411,7 @@ function buildFeatureLayers(input, context, side) {
3375
3411
  const body = input.body?.trim() ?? "";
3376
3412
  const { theme, layout, viewport } = context;
3377
3413
  const treatment = themedImageTreatment(context, input.imageTreatment);
3414
+ const summaryFeature = input.summaryMode === "headings-and-features" && !body;
3378
3415
  const sized = (imageWidth ?? 0) > 0 || (imageHeight ?? 0) > 0;
3379
3416
  const stack = layout.stackColumns;
3380
3417
  const titleFont = getThemeFont(context, "title");
@@ -3383,39 +3420,15 @@ function buildFeatureLayers(input, context, side) {
3383
3420
  const titleMinSize = themedFontSize(30, context, true);
3384
3421
  const bodyBaseSize = themedFontSize(24, context, false);
3385
3422
  const bodyMinSize = themedFontSize(18, context, false);
3386
- let imgX;
3387
- let imgY;
3388
- let imgW;
3389
- let imgH;
3390
- let imageFit;
3391
- if (stack) {
3392
- imgX = "0";
3393
- imgY = "0";
3394
- imgW = "100%";
3395
- imgH = "50%";
3396
- imageFit = sized ? "contain" : "cover";
3397
- } else if (sized) {
3398
- const halfStart = side === "left" ? 5 : 55;
3399
- imgX = `${halfStart}%`;
3400
- imgY = "5%";
3401
- imgW = "40%";
3402
- imgH = "90%";
3403
- imageFit = "contain";
3404
- } else {
3405
- imgX = side === "left" ? "0" : "50%";
3406
- imgY = "0";
3407
- imgW = "50%";
3408
- imgH = "100%";
3409
- imageFit = "cover";
3410
- }
3423
+ const mediaSlot = featureMediaSlot(side, { stack, summaryFeature, sized });
3411
3424
  const COLUMN_INSET = 4;
3412
- const textColumnWidth = stack ? 90 : 42;
3413
- const textXPct = stack ? (100 - textColumnWidth) / 2 : side === "left" ? 50 + COLUMN_INSET : COLUMN_INSET + 2;
3425
+ const textColumnWidth = stack ? 90 : summaryFeature ? 26 : 42;
3426
+ const textXPct = summaryFeature && !stack ? side === "left" ? 69 : 5 : stack ? (100 - textColumnWidth) / 2 : side === "left" ? 50 + COLUMN_INSET : COLUMN_INSET + 2;
3414
3427
  const textX = `${textXPct}%`;
3415
3428
  const columnWidthPx = textColumnWidth / 100 * viewport.width;
3416
3429
  const textAnchor = "top-left";
3417
3430
  const textAlign = "left";
3418
- const bandTop = (stack ? 0.56 : 0.08) * viewport.height;
3431
+ const bandTop = (stack ? summaryFeature ? 0.79 : 0.56 : 0.08) * viewport.height;
3419
3432
  const bandBottom = (stack ? 0.92 : 0.9) * viewport.height;
3420
3433
  const bandHeight = bandBottom - bandTop;
3421
3434
  const titleWrapWidth = title ? fitWrapWidth(title, titleBaseSize, columnWidthPx, titleFont) : 0;
@@ -3424,7 +3437,7 @@ function buildFeatureLayers(input, context, side) {
3424
3437
  baseFontSize: titleBaseSize,
3425
3438
  minFontSize: titleMinSize,
3426
3439
  maxWidthPx: titleWrapWidth,
3427
- maxHeightPx: bandHeight * 0.45,
3440
+ maxHeightPx: bandHeight * (summaryFeature ? 1 : 0.45),
3428
3441
  lineHeight: TITLE_LINE_HEIGHT3
3429
3442
  }) : null;
3430
3443
  const titleLines = titleFit ? Math.min(
@@ -3464,10 +3477,10 @@ function buildFeatureLayers(input, context, side) {
3464
3477
  content: {
3465
3478
  src: imageSrc,
3466
3479
  alt: imageAlt ?? title,
3467
- fit: imageFit,
3480
+ fit: mediaSlot.fit,
3468
3481
  ...treatment ? { treatment } : {}
3469
3482
  },
3470
- position: { x: imgX, y: imgY, width: imgW, height: imgH }
3483
+ position: mediaSlot.position
3471
3484
  });
3472
3485
  }
3473
3486
  if (title && titleFit) {
@@ -4902,7 +4915,7 @@ var BLOCK_MEDIA_LAYOUT_POLICIES = {
4902
4915
  unconsumedMedia: "retain-native-layout"
4903
4916
  },
4904
4917
  leftFeature: {
4905
- summary: "Requires a primary image in the left feature cell; text occupies the right cell.",
4918
+ summary: "Primary imagery or embedded visuals fill the left feature cell; text occupies the right cell.",
4906
4919
  noMedia: "unsupported",
4907
4920
  ownership: "required-native",
4908
4921
  nativeLayout: "feature-left",
@@ -4910,7 +4923,7 @@ var BLOCK_MEDIA_LAYOUT_POLICIES = {
4910
4923
  unconsumedMedia: "retain-native-layout"
4911
4924
  },
4912
4925
  rightFeature: {
4913
- summary: "Requires a primary image in the right feature cell; text occupies the left cell.",
4926
+ summary: "Primary imagery or embedded visuals fill the right feature cell; text occupies the left cell.",
4914
4927
  noMedia: "unsupported",
4915
4928
  ownership: "required-native",
4916
4929
  nativeLayout: "feature-right",
@@ -5141,6 +5154,93 @@ function wrappedLineCount2(text, fontSize, maxWidth) {
5141
5154
  }
5142
5155
 
5143
5156
  // src/doc/richMediaLayout.ts
5157
+ function containedFeatureArea(region, aspects) {
5158
+ const count = aspects.length;
5159
+ const columns = Math.min(
5160
+ count,
5161
+ Math.max(1, Math.ceil(Math.sqrt(count * region.width / region.height)))
5162
+ );
5163
+ const rows = Math.ceil(count / columns);
5164
+ const width = region.width / columns;
5165
+ const height = region.height / rows;
5166
+ return aspects.reduce((area, aspect) => {
5167
+ const ratio = aspect && Number.isFinite(aspect) && aspect > 0 ? aspect : 16 / 9;
5168
+ const containedWidth = Math.min(width, height * ratio);
5169
+ return area + containedWidth * (containedWidth / ratio);
5170
+ }, 0);
5171
+ }
5172
+ function resolveFeatureSummaryLayout(layers, viewport, aspectRatios) {
5173
+ const title = layers.find((layer) => layer.type === "text" && layer.id === "title");
5174
+ if (!title || title.type !== "text") {
5175
+ return { layers, mediaRect: rect(viewport, 0.045, 0.045, 0.91, 0.91), framed: false };
5176
+ }
5177
+ const unit = Math.min(viewport.width, viewport.height);
5178
+ const margin = unit * 0.045;
5179
+ const gap = unit * 0.035;
5180
+ const baseFontSize = Math.min(title.content.style.fontSize, unit * 0.056);
5181
+ const minFontSize = Math.min(baseFontSize, unit * 0.026);
5182
+ const lineHeight = 1.2;
5183
+ const topWidth = viewport.width - margin * 2;
5184
+ const topFit = fitProse({
5185
+ text: title.content.text,
5186
+ baseFontSize,
5187
+ minFontSize,
5188
+ maxWidthPx: topWidth,
5189
+ maxHeightPx: viewport.height * 0.26,
5190
+ lineHeight
5191
+ });
5192
+ const mediaTop = margin + topFit.heightPx + gap;
5193
+ const topMedia = {
5194
+ x: margin,
5195
+ y: mediaTop,
5196
+ width: topWidth,
5197
+ height: viewport.height - margin - mediaTop
5198
+ };
5199
+ const sideWidth = viewport.width * 0.25;
5200
+ const sideMedia = {
5201
+ x: margin + sideWidth + gap,
5202
+ y: margin,
5203
+ width: viewport.width - margin * 2 - sideWidth - gap,
5204
+ height: viewport.height - margin * 2
5205
+ };
5206
+ const side = containedFeatureArea(sideMedia, aspectRatios) > containedFeatureArea(topMedia, aspectRatios) * 1.04;
5207
+ const titleWidth = side ? sideWidth : topWidth;
5208
+ const titleFit = side ? fitProse({
5209
+ text: title.content.text,
5210
+ baseFontSize,
5211
+ minFontSize,
5212
+ maxWidthPx: titleWidth,
5213
+ maxHeightPx: sideMedia.height,
5214
+ lineHeight
5215
+ }) : topFit;
5216
+ const titleLayer = {
5217
+ ...title,
5218
+ position: {
5219
+ ...title.position,
5220
+ x: side ? margin : viewport.width / 2,
5221
+ y: side ? viewport.height / 2 - titleFit.heightPx / 2 : margin + titleFit.heightPx / 2,
5222
+ width: titleWidth,
5223
+ height: titleFit.heightPx,
5224
+ anchor: side ? "top-left" : "center"
5225
+ },
5226
+ content: {
5227
+ ...title.content,
5228
+ style: {
5229
+ ...title.content.style,
5230
+ fontSize: titleFit.fontSize,
5231
+ lineHeight,
5232
+ textAlign: side ? "left" : "center",
5233
+ maxLines: titleFit.maxLines,
5234
+ shrinkToFit: true
5235
+ }
5236
+ }
5237
+ };
5238
+ return {
5239
+ layers: [...layers.filter((layer) => isFullViewportBackground(layer, viewport)), titleLayer],
5240
+ mediaRect: side ? sideMedia : topMedia,
5241
+ framed: false
5242
+ };
5243
+ }
5144
5244
  function rect(viewport, x, y, width, height) {
5145
5245
  return {
5146
5246
  x: viewport.width * x,
@@ -5553,12 +5653,31 @@ function leastObstructedMediaRect(layers, viewport) {
5553
5653
  return score < bestScore ? candidate : best;
5554
5654
  });
5555
5655
  }
5556
- function resolveSupplementalMediaLayout(layers, template, viewport, mediaCount, aspectRatios) {
5656
+ function resolveSupplementalMediaLayout(layers, template, viewport, mediaCount, aspectRatios, featureOptions = {}) {
5557
5657
  const policy = getBlockMediaLayoutPolicy(template);
5558
5658
  const shape = mediaShape(mediaCount, aspectRatios);
5559
5659
  const alreadyOwnsMedia = layers.some(
5560
5660
  (layer) => layer.type === "image" || layer.type === "video" || layer.type === "map" || layer.type === "mermaid"
5561
5661
  );
5662
+ if (!alreadyOwnsMedia && (policy?.nativeLayout === "feature-left" || policy?.nativeLayout === "feature-right")) {
5663
+ const { position } = featureMediaSlot(
5664
+ policy.nativeLayout === "feature-left" ? "left" : "right",
5665
+ {
5666
+ stack: featureOptions.stackColumns ?? getViewportOrientation(viewport) === "portrait",
5667
+ summaryFeature: featureOptions.summaryFeature ?? false
5668
+ }
5669
+ );
5670
+ return {
5671
+ layers,
5672
+ mediaRect: {
5673
+ x: resolvePositionValue(position.x, viewport.width),
5674
+ y: resolvePositionValue(position.y, viewport.height),
5675
+ width: resolvePositionValue(position.width, viewport.width),
5676
+ height: resolvePositionValue(position.height, viewport.height)
5677
+ },
5678
+ framed: false
5679
+ };
5680
+ }
5562
5681
  const retainNativeLayout = policy?.unconsumedMedia === "retain-native-layout" || policy?.unconsumedMedia === "reserve-when-no-native-media" && alreadyOwnsMedia;
5563
5682
  if (policy?.additionalMediaLayout === "overlay-inset" && retainNativeLayout) {
5564
5683
  return {
@@ -9638,7 +9757,8 @@ function materializeBlockLayersWithRuntime(block, options, runtime) {
9638
9757
  cloneData(existingLayers),
9639
9758
  block,
9640
9759
  theme,
9641
- viewport
9760
+ viewport,
9761
+ options.mediaAspectRatios
9642
9762
  );
9643
9763
  return {
9644
9764
  layers: injectPersistentLayers(
@@ -9652,7 +9772,13 @@ function materializeBlockLayersWithRuntime(block, options, runtime) {
9652
9772
  };
9653
9773
  }
9654
9774
  if (!isTemplateBlock(block)) {
9655
- const layers = appendRichContentLayers([], block, theme, viewport);
9775
+ const layers = appendRichContentLayers(
9776
+ [],
9777
+ block,
9778
+ theme,
9779
+ viewport,
9780
+ options.mediaAspectRatios
9781
+ );
9656
9782
  return {
9657
9783
  layers: injectPersistentLayers(
9658
9784
  layers,
@@ -9669,7 +9795,13 @@ function materializeBlockLayersWithRuntime(block, options, runtime) {
9669
9795
  const execution = executeTemplateMaterialization(block, context, runtime.registry);
9670
9796
  if (execution.status === "ok") {
9671
9797
  const styledLayers = runtime.applyRenderStyle !== false ? applyRenderStyleToLayers(execution.layers, block, theme) : execution.layers;
9672
- const layers = appendRichContentLayers(styledLayers, block, theme, viewport);
9798
+ const layers = appendRichContentLayers(
9799
+ styledLayers,
9800
+ block,
9801
+ theme,
9802
+ viewport,
9803
+ options.mediaAspectRatios
9804
+ );
9673
9805
  return {
9674
9806
  layers: injectPersistentLayers(
9675
9807
  layers,
@@ -9940,16 +10072,25 @@ function applyEmbeddedVideoTiming(layers, block) {
9940
10072
  };
9941
10073
  });
9942
10074
  }
9943
- function appendRichContentLayers(layers, block, theme, viewport) {
10075
+ function appendRichContentLayers(layers, block, theme, viewport, mediaAspectRatios) {
9944
10076
  const timedLayers = applyEmbeddedVideoTiming(layers, block);
9945
10077
  const items = collectRichMediaItems(timedLayers, block);
9946
10078
  if (items.length === 0) return timedLayers;
9947
- const layout = resolveSupplementalMediaLayout(
10079
+ const aspects = items.map((item) => {
10080
+ const key = item.kind === "image" || item.kind === "video" ? item.src : item.kind === "mermaid" ? item.source : void 0;
10081
+ const intrinsic = key ? mediaAspectRatios?.[key] : void 0;
10082
+ return intrinsic && Number.isFinite(intrinsic) && intrinsic > 0 ? intrinsic : item.aspectRatio;
10083
+ });
10084
+ const layout = block.summaryLayout === "feature" ? resolveFeatureSummaryLayout(timedLayers, viewport, aspects) : resolveSupplementalMediaLayout(
9948
10085
  timedLayers,
9949
10086
  block.template ? resolveTemplateName(block.template) : void 0,
9950
10087
  viewport,
9951
10088
  items.length,
9952
- items.map((item) => item.aspectRatio)
10089
+ aspects,
10090
+ {
10091
+ summaryFeature: block.summaryMode === "headings-and-features" && !timedLayers.some((layer) => layer.id === "feature-body"),
10092
+ stackColumns: createTemplateContext(theme, 0, 1, viewport).layout.stackColumns
10093
+ }
9953
10094
  );
9954
10095
  const cells = gridCells(layout.mediaRect, items.length, viewport, layout.framed);
9955
10096
  const counters = {
@@ -10669,7 +10810,7 @@ function expandCoverBlock(config, context, template = "cover") {
10669
10810
  }
10670
10811
 
10671
10812
  // src/doc/templates/index.ts
10672
- function materializeScheduledBlock(sourceBlock, blockIndex, totalBlocks, theme, viewport, persistentLayers, expandedPersistentLayers, registry, failureMode, onDiagnostic, motion) {
10813
+ function materializeScheduledBlock(sourceBlock, blockIndex, totalBlocks, theme, viewport, persistentLayers, expandedPersistentLayers, registry, failureMode, onDiagnostic, motion, mediaAspectRatios) {
10673
10814
  const materialized = materializeBlockLayersWithRuntime(
10674
10815
  sourceBlock,
10675
10816
  {
@@ -10679,7 +10820,8 @@ function materializeScheduledBlock(sourceBlock, blockIndex, totalBlocks, theme,
10679
10820
  blockIndex,
10680
10821
  totalBlocks,
10681
10822
  failureMode,
10682
- motion
10823
+ motion,
10824
+ mediaAspectRatios
10683
10825
  },
10684
10826
  { registry, expandedPersistentLayers }
10685
10827
  );
@@ -10739,7 +10881,8 @@ function expandDocBlocks(blocks, options = {}) {
10739
10881
  registry,
10740
10882
  failureMode,
10741
10883
  onDiagnostic,
10742
- motion
10884
+ motion,
10885
+ opts.mediaAspectRatios
10743
10886
  );
10744
10887
  expandedBlock.startTime = currentTime;
10745
10888
  currentTime += expandedBlock.duration;
@@ -10772,7 +10915,8 @@ function expandDocBlocks(blocks, options = {}) {
10772
10915
  registry,
10773
10916
  failureMode,
10774
10917
  onDiagnostic,
10775
- motion
10918
+ motion,
10919
+ opts.mediaAspectRatios
10776
10920
  );
10777
10921
  expandedBlock.startTime = offsetTime;
10778
10922
  offsetTime += expandedBlock.duration;
@@ -10811,7 +10955,8 @@ function expandDocBlocks(blocks, options = {}) {
10811
10955
  registry,
10812
10956
  failureMode,
10813
10957
  onDiagnostic,
10814
- motion
10958
+ motion,
10959
+ opts.mediaAspectRatios
10815
10960
  );
10816
10961
  const templateBlock = block;
10817
10962
  expandedInfos.push({
@@ -1,12 +1,12 @@
1
- import { bq as TemplateBlock, br as TemplateContext, a6 as Layer, y as CustomTemplateDefinition, bt as TemplateRegistry, bw as Theme, b$ as ViewportConfig, a_ as PersistentLayerConfig, at as MotionSpec, R as DocBlock, c0 as ViewportOrientation, aZ as PersistentLayer, bJ as TitleBlockInput, bf as SectionHeaderInput, j as BigTextInput, u as ContentBlockInput, bl as StatHighlightInput, b9 as QuoteBlockInput, Y as FactCardInput, bR as TwoColumnInput, J as DateEventInput, a4 as ImageWithCaptionInput, a9 as LeftFeatureInput, bc as RightFeatureInput, ae as MapBlockInput, bk as StartBlockConfig, $ as FullBleedQuoteInput, ac as ListBlockInput, b2 as PhotoGridInput, L as DefinitionCardInput, t as ComparisonBarInput, b8 as PullQuoteInput, b_ as VideoWithCaptionInput, bZ as VideoPullQuoteInput, I as DataTableInput, M as DiagramBlockInput, bM as TreeBlockInput, bF as TimelineBlockInput, k as Block, U as DrawingBlockInput, ai as MarkerStyle, A as AccentImage, a3 as ImageTreatment, a as AccentPosition, c as Animation, d as AnimationType, au as MotionState, ar as MotionProfile, by as ThemeColorScheme, w as CountUpSpec, Q as Doc, bA as ThemeRegistry, aR as PageEmphasis, bz as ThemePageStyle, S as DocDiagnostic, P as DiagramTemplateNode, O as DiagramTemplateEdge, bI as TimelineTemplateTrack, bH as TimelineTemplateLink } from '../Doc-BWtfp7dT.js';
2
- export { V as FRONTMATTER_CUSTOM_TEMPLATES_KEY, W as FRONTMATTER_CUSTOM_THEMES_KEY, a8 as LayoutHints, bb as RenderStyle, bx as ThemeColorPalette, bD as ThemeStyle, bE as ThemeTypography, bS as VIEWPORT_PRESETS, c1 as ViewportPreset, c6 as createTemplateContext, cd as getLayoutHints, cg as getTwoColumnPositions, ch as getViewport, ci as getViewportOrientation, cm as isTemplateBlock, cs as scaledFontSize } from '../Doc-BWtfp7dT.js';
1
+ import { bq as TemplateBlock, br as TemplateContext, a6 as Layer, y as CustomTemplateDefinition, bt as TemplateRegistry, bw as Theme, b$ as ViewportConfig, a_ as PersistentLayerConfig, at as MotionSpec, R as DocBlock, c0 as ViewportOrientation, aZ as PersistentLayer, bJ as TitleBlockInput, bf as SectionHeaderInput, j as BigTextInput, u as ContentBlockInput, bl as StatHighlightInput, b9 as QuoteBlockInput, Y as FactCardInput, bR as TwoColumnInput, J as DateEventInput, a4 as ImageWithCaptionInput, a9 as LeftFeatureInput, bc as RightFeatureInput, ae as MapBlockInput, bk as StartBlockConfig, $ as FullBleedQuoteInput, ac as ListBlockInput, b2 as PhotoGridInput, L as DefinitionCardInput, t as ComparisonBarInput, b8 as PullQuoteInput, b_ as VideoWithCaptionInput, bZ as VideoPullQuoteInput, I as DataTableInput, M as DiagramBlockInput, bM as TreeBlockInput, bF as TimelineBlockInput, k as Block, U as DrawingBlockInput, ai as MarkerStyle, A as AccentImage, a3 as ImageTreatment, a as AccentPosition, c as Animation, d as AnimationType, au as MotionState, ar as MotionProfile, by as ThemeColorScheme, w as CountUpSpec, Q as Doc, bA as ThemeRegistry, aR as PageEmphasis, bz as ThemePageStyle, S as DocDiagnostic, P as DiagramTemplateNode, O as DiagramTemplateEdge, bI as TimelineTemplateTrack, bH as TimelineTemplateLink } from '../Doc-C-cv1g4G.js';
2
+ export { V as FRONTMATTER_CUSTOM_TEMPLATES_KEY, W as FRONTMATTER_CUSTOM_THEMES_KEY, a8 as LayoutHints, bb as RenderStyle, bx as ThemeColorPalette, bD as ThemeStyle, bE as ThemeTypography, bS as VIEWPORT_PRESETS, c1 as ViewportPreset, c6 as createTemplateContext, cd as getLayoutHints, cg as getTwoColumnPositions, ch as getViewport, ci as getViewportOrientation, cm as isTemplateBlock, cs as scaledFontSize } from '../Doc-C-cv1g4G.js';
3
3
  import { L as MarkdownNode, a5 as TransitionType, a4 as TransitionDirection, M as MarkdownBlockNode, r as MarkdownHeading, n as MarkdownDocument, V as MarkdownTable, i as MarkdownCodeBlock, G as MarkdownList } from '../types-Be6sBUBx.js';
4
4
  import { C as CoercedBlockMeta } from '../annotationCoercion-Ckqpu33y.js';
5
- import { c as PageSection } from '../materializePageSection-Db7pABI0.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-Db7pABI0.js';
5
+ import { c as PageSection } from '../materializePageSection-Dmy_-AUQ.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-Dmy_-AUQ.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-Bphz1CRp.js';
9
+ export { D as DEFAULT_THEME, g as getAvailableThemes, b as getThemeSummaries, r as resolveTheme } from '../themeLibrary-CROfw3YK.js';
10
10
 
11
11
  /** Runtime registry composition for built-in and document-scoped templates. */
12
12
 
@@ -89,6 +89,8 @@ interface MaterializeBlockLayersOptions {
89
89
  failureMode?: LayerMaterializationFailureMode;
90
90
  /** Motion profile for template output; omitted → theme default, else `calm`. */
91
91
  motion?: MotionSpec | null;
92
+ /** Intrinsic media aspect ratios, keyed by image/video URL or Mermaid source. */
93
+ mediaAspectRatios?: Readonly<Record<string, number>>;
92
94
  }
93
95
  /**
94
96
  * Turn any doc block into an owned, render-ready layer graph.
@@ -491,7 +493,7 @@ declare const BLOCK_MEDIA_LAYOUT_POLICIES: {
491
493
  readonly unconsumedMedia: "retain-native-layout";
492
494
  };
493
495
  readonly leftFeature: {
494
- readonly summary: "Requires a primary image in the left feature cell; text occupies the right cell.";
496
+ readonly summary: "Primary imagery or embedded visuals fill the left feature cell; text occupies the right cell.";
495
497
  readonly noMedia: "unsupported";
496
498
  readonly ownership: "required-native";
497
499
  readonly nativeLayout: "feature-left";
@@ -499,7 +501,7 @@ declare const BLOCK_MEDIA_LAYOUT_POLICIES: {
499
501
  readonly unconsumedMedia: "retain-native-layout";
500
502
  };
501
503
  readonly rightFeature: {
502
- readonly summary: "Requires a primary image in the right feature cell; text occupies the left cell.";
504
+ readonly summary: "Primary imagery or embedded visuals fill the right feature cell; text occupies the left cell.";
503
505
  readonly noMedia: "unsupported";
504
506
  readonly ownership: "required-native";
505
507
  readonly nativeLayout: "feature-right";
@@ -1753,6 +1755,8 @@ interface ExpandDocBlocksOptions {
1753
1755
  * `resolveMotionForDoc()` so `Doc.motion` and frontmatter take part.
1754
1756
  */
1755
1757
  motion?: MotionSpec | null;
1758
+ /** Intrinsic media aspect ratios for adaptive feature summaries. */
1759
+ mediaAspectRatios?: Readonly<Record<string, number>>;
1756
1760
  }
1757
1761
  declare function expandDocBlocks(blocks: DocBlock[], options?: ExpandDocBlocksOptions): Block[];
1758
1762
  /**
package/dist/doc/index.js CHANGED
@@ -74,8 +74,8 @@ import {
74
74
  validateMarkdownSource,
75
75
  wordRevealDelay,
76
76
  writeDashboardLayoutsToFrontmatter
77
- } from "../chunk-S4427XKY.js";
78
- import "../chunk-BR7ZMDWW.js";
77
+ } from "../chunk-GDF2FWL6.js";
78
+ import "../chunk-6H2HBBFC.js";
79
79
  import {
80
80
  ASCII_CHAR_H,
81
81
  ASCII_CHAR_W,
@@ -206,7 +206,7 @@ import {
206
206
  wrapWithPersistentLayers,
207
207
  writeCustomTemplatesToFrontmatter,
208
208
  writeCustomThemesToFrontmatter
209
- } from "../chunk-42IU2SJY.js";
209
+ } from "../chunk-YPI2VJSB.js";
210
210
  import {
211
211
  ASCII_DIAGRAM_FENCE_LANGS,
212
212
  ASCII_TIMELINE_FENCE_LANGS,
@@ -1,4 +1,4 @@
1
- import { bw as Theme } from '../Doc-BWtfp7dT.js';
1
+ import { bw as Theme } from '../Doc-C-cv1g4G.js';
2
2
  import '../types-Be6sBUBx.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 { r as ColorScheme, A as AccentImage, bq as TemplateBlock } from '../Doc-BWtfp7dT.js';
3
+ import { r as ColorScheme, A as AccentImage, bq as TemplateBlock } from '../Doc-C-cv1g4G.js';
4
4
  import '../types-Be6sBUBx.js';
5
5
 
6
6
  /**
@@ -1,8 +1,8 @@
1
- import { a as ImageEditDoc, b as ImageEditLayer } from '../ImageEditDoc-CYRQK8so.js';
2
- export { E as EditorLayerMeta, I as ImageEditCanvas, c as ImageEditLayerKind, d as ImageEditMeta } from '../ImageEditDoc-CYRQK8so.js';
1
+ import { a as ImageEditDoc, b as ImageEditLayer } from '../ImageEditDoc-3J4PRw8N.js';
2
+ export { E as EditorLayerMeta, I as ImageEditCanvas, c as ImageEditLayerKind, d as ImageEditMeta } from '../ImageEditDoc-3J4PRw8N.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-BWtfp7dT.js';
5
+ import '../Doc-C-cv1g4G.js';
6
6
  import '../types-Be6sBUBx.js';
7
7
 
8
8
  /**
package/dist/index.d.ts CHANGED
@@ -1,16 +1,16 @@
1
1
  export { B as BoundingBox, C as Coordinates } from './Types-sh2VRxfo.js';
2
- 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, C as CaptionPhrase, n as CaptionTrack, o as CaptionWord, p as ChartBaseFields, q as ChartTemplateInput, r as ColorScheme, s as ColumnChartInput, t as ComparisonBarInput, u as ContentBlockInput, v as CornerBrandingConfig, w as CountUpSpec, x as CreateTemplateContextOptions, y as CustomTemplateDefinition, z as CustomTemplateLayer, D as CustomTemplateValidationError, E as CustomTemplateValidationResult, F as DARK_SURFACE, G as DEFAULT_DOC_FONT, H as DEFAULT_TITLE_FONT, I as DataTableInput, J as DateEventInput, K as DeepPartial, L as DefinitionCardInput, M as DiagramBlockInput, N as DiagramEdgeAnchor, O as DiagramTemplateEdge, P as DiagramTemplateNode, Q as Doc, R as DocBlock, S as DocDiagnostic, T as DonutChartInput, U as DrawingBlockInput, V as FRONTMATTER_CUSTOM_TEMPLATES_KEY, W as FRONTMATTER_CUSTOM_THEMES_KEY, X as FRONTMATTER_MOTION_KEY, Y as FactCardInput, Z as FontFamily, _ as FontFamilyKind, $ as FullBleedQuoteInput, a0 as GradientBackgroundConfig, a1 as ImageBackgroundConfig, a2 as ImageLayer, a3 as ImageTreatment, a4 as ImageWithCaptionInput, a5 as LIGHT_SURFACE, a6 as Layer, a7 as LayerRepeat, a8 as LayoutHints, a9 as LeftFeatureInput, aa as LineChartInput, ab as LinearGradient, ac as ListBlockInput, ad as MOTION_PROFILES, ae as MapBlockInput, af as MapLayer, ag as MapMarker, ah as MapTileStyle, ai as MarkerStyle, aj as MediaClip, ak as MediaCrop, al as MediaCut, am as MediaEdits, an as MediaScheduleOptions, ao as MermaidLayer, ap as MotionEntrance, aq as MotionOrigin, ar as MotionProfile, as as MotionProfileName, at as MotionSpec, au as MotionState, av as PAGE_ACCENT_STRATEGIES, aw as PAGE_BACKGROUNDS, ax as PAGE_BACKGROUND_RHYTHMS, ay as PAGE_DESIGN_FAMILIES, az as PAGE_DIVIDERS, aA as PAGE_EMPHASES, aB as PAGE_EYEBROWS, aC as PAGE_HEADING_CASES, aD as PAGE_HEADING_SCALES, aE as PAGE_HEADING_UNDERLINES, aF as PAGE_HERO_STYLES, aG as PAGE_IMAGE_FRAMINGS, aH as PAGE_NUMERAL_STYLES, aI as PAGE_PATTERNS, aJ as PAGE_QUOTE_MARKS, aK as PAGE_SECTION_KINDS, aL as PAGE_SECTION_SPACINGS, aM as PAGE_SHADOWS, aN as PAGE_VARIANTS, aO as PageAccentRotation, aP as PageBackground, aQ as PageDesignFamily, aR as PageEmphasis, aS as PageHeadingTreatment, aT as PageSectionKind, aU as PageSectionOverride, aV as PageTokens, aW as PageVariant, aX as PathLayer, aY as PatternBackgroundConfig, aZ as PersistentLayer, a_ as PersistentLayerConfig, a$ as PersistentLayerTemplate, b0 as PersistentLayerTemplateConfig, b1 as PersistentLayerTemplateType, b2 as PhotoGridInput, b3 as PieChartInput, b4 as PipStyle, b5 as Position, b6 as ProgressIndicatorConfig, b7 as PromotedBodyAnnotation, b8 as PullQuoteInput, b9 as QuoteBlockInput, ba as RawLayersInput, bb as RenderStyle, bc as RightFeatureInput, bd as ScatterChartInput, be as ScheduledClip, bf as SectionHeaderInput, bg as ShapeFilter, bh as ShapeLayer, bi as ShapePattern, bj as SolidBackgroundConfig, bk as StartBlockConfig, bl as StatHighlightInput, bm as SurfaceScheme, bn as THEME_SCHEMA_VERSION, bo as TableLayer, bp as TableLayerStyle, bq as TemplateBlock, br as TemplateContext, bs as TemplateFunction, bt as TemplateRegistry, bu as TextLayer, bv as TextStyle, bw as Theme, bx as ThemeColorPalette, by as ThemeColorScheme, bz as ThemePageStyle, bA as ThemeRegistry, bB as ThemeSchemaVersion, bC as ThemeSeedColors, bD as ThemeStyle, bE as ThemeTypography, bF as TimelineBlockInput, bG as TimelineTemplateEvent, bH as TimelineTemplateLink, bI as TimelineTemplateTrack, bJ as TitleBlockInput, bK as TitleCaptionConfig, bL as TranscriptBlockInput, bM as TreeBlockInput, bN as TreeLayer, bO as TreeLayerItem, bP as TreeLayerStyle, bQ as TreeTemplateItem, bR as TwoColumnInput, bS as VIEWPORT_PRESETS, bT as VideoLayer, bU as VideoPipPosition, bV as VideoPipShape, bW as VideoPipSize, bX as VideoPlacement, bY as VideoPresentation, bZ as VideoPullQuoteInput, b_ as VideoWithCaptionInput, b$ as ViewportConfig, c0 as ViewportOrientation, c1 as ViewportPreset, c2 as VignetteConfig, c3 as applySurface, c4 as calculateDuration, c5 as calculateFontScale, c6 as createTemplateContext, c7 as createTheme, c8 as createThemeRegistry, c9 as getAspectRatioString, ca as getBlockAtTime, cb as getCaptionAtTime, cc as getDocPlaybackDuration, cd as getLayoutHints, ce as getSafeTextBounds, cf as getSegmentAtTime, cg as getTwoColumnPositions, ch as getViewport, ci as getViewportOrientation, cj as isCustomTemplateDefinition, ck as isMotionProfileName, cl as isPersistentLayerTemplate, cm as isTemplateBlock, cn as layoutScaledFontSize, co as readFrontmatterMotion, cp as resolveMediaSchedule, cq as resolveMotionForDoc, cr as resolveMotionProfile, cs as scaledFontSize, ct as scheduleMediaClip, cu as validateCustomTemplateDefinition } from './Doc-BWtfp7dT.js';
2
+ 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, C as CaptionPhrase, n as CaptionTrack, o as CaptionWord, p as ChartBaseFields, q as ChartTemplateInput, r as ColorScheme, s as ColumnChartInput, t as ComparisonBarInput, u as ContentBlockInput, v as CornerBrandingConfig, w as CountUpSpec, x as CreateTemplateContextOptions, y as CustomTemplateDefinition, z as CustomTemplateLayer, D as CustomTemplateValidationError, E as CustomTemplateValidationResult, F as DARK_SURFACE, G as DEFAULT_DOC_FONT, H as DEFAULT_TITLE_FONT, I as DataTableInput, J as DateEventInput, K as DeepPartial, L as DefinitionCardInput, M as DiagramBlockInput, N as DiagramEdgeAnchor, O as DiagramTemplateEdge, P as DiagramTemplateNode, Q as Doc, R as DocBlock, S as DocDiagnostic, T as DonutChartInput, U as DrawingBlockInput, V as FRONTMATTER_CUSTOM_TEMPLATES_KEY, W as FRONTMATTER_CUSTOM_THEMES_KEY, X as FRONTMATTER_MOTION_KEY, Y as FactCardInput, Z as FontFamily, _ as FontFamilyKind, $ as FullBleedQuoteInput, a0 as GradientBackgroundConfig, a1 as ImageBackgroundConfig, a2 as ImageLayer, a3 as ImageTreatment, a4 as ImageWithCaptionInput, a5 as LIGHT_SURFACE, a6 as Layer, a7 as LayerRepeat, a8 as LayoutHints, a9 as LeftFeatureInput, aa as LineChartInput, ab as LinearGradient, ac as ListBlockInput, ad as MOTION_PROFILES, ae as MapBlockInput, af as MapLayer, ag as MapMarker, ah as MapTileStyle, ai as MarkerStyle, aj as MediaClip, ak as MediaCrop, al as MediaCut, am as MediaEdits, an as MediaScheduleOptions, ao as MermaidLayer, ap as MotionEntrance, aq as MotionOrigin, ar as MotionProfile, as as MotionProfileName, at as MotionSpec, au as MotionState, av as PAGE_ACCENT_STRATEGIES, aw as PAGE_BACKGROUNDS, ax as PAGE_BACKGROUND_RHYTHMS, ay as PAGE_DESIGN_FAMILIES, az as PAGE_DIVIDERS, aA as PAGE_EMPHASES, aB as PAGE_EYEBROWS, aC as PAGE_HEADING_CASES, aD as PAGE_HEADING_SCALES, aE as PAGE_HEADING_UNDERLINES, aF as PAGE_HERO_STYLES, aG as PAGE_IMAGE_FRAMINGS, aH as PAGE_NUMERAL_STYLES, aI as PAGE_PATTERNS, aJ as PAGE_QUOTE_MARKS, aK as PAGE_SECTION_KINDS, aL as PAGE_SECTION_SPACINGS, aM as PAGE_SHADOWS, aN as PAGE_VARIANTS, aO as PageAccentRotation, aP as PageBackground, aQ as PageDesignFamily, aR as PageEmphasis, aS as PageHeadingTreatment, aT as PageSectionKind, aU as PageSectionOverride, aV as PageTokens, aW as PageVariant, aX as PathLayer, aY as PatternBackgroundConfig, aZ as PersistentLayer, a_ as PersistentLayerConfig, a$ as PersistentLayerTemplate, b0 as PersistentLayerTemplateConfig, b1 as PersistentLayerTemplateType, b2 as PhotoGridInput, b3 as PieChartInput, b4 as PipStyle, b5 as Position, b6 as ProgressIndicatorConfig, b7 as PromotedBodyAnnotation, b8 as PullQuoteInput, b9 as QuoteBlockInput, ba as RawLayersInput, bb as RenderStyle, bc as RightFeatureInput, bd as ScatterChartInput, be as ScheduledClip, bf as SectionHeaderInput, bg as ShapeFilter, bh as ShapeLayer, bi as ShapePattern, bj as SolidBackgroundConfig, bk as StartBlockConfig, bl as StatHighlightInput, bm as SurfaceScheme, bn as THEME_SCHEMA_VERSION, bo as TableLayer, bp as TableLayerStyle, bq as TemplateBlock, br as TemplateContext, bs as TemplateFunction, bt as TemplateRegistry, bu as TextLayer, bv as TextStyle, bw as Theme, bx as ThemeColorPalette, by as ThemeColorScheme, bz as ThemePageStyle, bA as ThemeRegistry, bB as ThemeSchemaVersion, bC as ThemeSeedColors, bD as ThemeStyle, bE as ThemeTypography, bF as TimelineBlockInput, bG as TimelineTemplateEvent, bH as TimelineTemplateLink, bI as TimelineTemplateTrack, bJ as TitleBlockInput, bK as TitleCaptionConfig, bL as TranscriptBlockInput, bM as TreeBlockInput, bN as TreeLayer, bO as TreeLayerItem, bP as TreeLayerStyle, bQ as TreeTemplateItem, bR as TwoColumnInput, bS as VIEWPORT_PRESETS, bT as VideoLayer, bU as VideoPipPosition, bV as VideoPipShape, bW as VideoPipSize, bX as VideoPlacement, bY as VideoPresentation, bZ as VideoPullQuoteInput, b_ as VideoWithCaptionInput, b$ as ViewportConfig, c0 as ViewportOrientation, c1 as ViewportPreset, c2 as VignetteConfig, c3 as applySurface, c4 as calculateDuration, c5 as calculateFontScale, c6 as createTemplateContext, c7 as createTheme, c8 as createThemeRegistry, c9 as getAspectRatioString, ca as getBlockAtTime, cb as getCaptionAtTime, cc as getDocPlaybackDuration, cd as getLayoutHints, ce as getSafeTextBounds, cf as getSegmentAtTime, cg as getTwoColumnPositions, ch as getViewport, ci as getViewportOrientation, cj as isCustomTemplateDefinition, ck as isMotionProfileName, cl as isPersistentLayerTemplate, cm as isTemplateBlock, cn as layoutScaledFontSize, co as readFrontmatterMotion, cp as resolveMediaSchedule, cq as resolveMotionForDoc, cr as resolveMotionProfile, cs as scaledFontSize, ct as scheduleMediaClip, cu as validateCustomTemplateDefinition } from './Doc-C-cv1g4G.js';
3
3
  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';
4
4
  export { D as DEFAULT_MARKDOWN_SAFETY_LIMITS, a as DEFAULT_TRANSITION_DURATION_SECONDS, H as HeadingAttributes, b as HeadingTemplateAnnotation, c as HtmlComment, d as HtmlElement, e as HtmlNode, f as HtmlText, M as MarkdownBlockNode, g as MarkdownBlockquote, h as MarkdownBreak, i as MarkdownCodeBlock, j as MarkdownContainerDirective, k as MarkdownDefinitionDescription, l as MarkdownDefinitionList, m as MarkdownDefinitionTerm, n as MarkdownDocument, o as MarkdownEmphasis, p as MarkdownFootnoteDefinition, q as MarkdownFootnoteReference, r as MarkdownHeading, s as MarkdownHtmlBlock, t as MarkdownImage, u as MarkdownImageReference, v as MarkdownInlineCode, w as MarkdownInlineHtml, x as MarkdownInlineIcon, y as MarkdownInlineMath, z as MarkdownInlineNode, A as MarkdownLeafDirective, B as MarkdownLimitError, C as MarkdownLink, E as MarkdownLinkDefinition, F as MarkdownLinkReference, G as MarkdownList, I as MarkdownListItem, J as MarkdownMathBlock, K as MarkdownMention, L as MarkdownNode, N as MarkdownParagraph, O as MarkdownPoint, P as MarkdownSafetyLimits, Q as MarkdownSourcePosition, R as MarkdownStrikethrough, S as MarkdownStrong, T as MarkdownSubscript, U as MarkdownSuperscript, V as MarkdownTable, W as MarkdownTableCell, X as MarkdownTableRow, Y as MarkdownText, Z as MarkdownTextDirective, _ as MarkdownThematicBreak, $ as ParseOptions, a0 as StringifyOptions, a1 as TRANSITION_DIRECTIONS, a2 as TRANSITION_TYPES, a3 as Transition, a4 as TransitionDirection, a5 as TransitionType, a6 as assertMarkdownDocumentWithinLimits, a7 as assertMarkdownSourceWithinLimits, a8 as isTransitionType, a9 as normalizeTransitionDirection, aa as normalizeTransitionType, ab as resolveBlockTransition, ac as resolveMarkdownSafetyLimits, ad as resolveTransitionDuration } from './types-Be6sBUBx.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-Bphz1CRp.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-CROfw3YK.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-CYRQK8so.js';
7
+ export { E as EditorLayerMeta, I as ImageEditCanvas, a as ImageEditDoc, b as ImageEditLayer, c as ImageEditLayerKind, d as ImageEditMeta } from './ImageEditDoc-3J4PRw8N.js';
8
8
  export { ASCII_CHAR_H, ASCII_CHAR_W, ASCII_DIAGRAM_FENCE_LANGS, ASCII_TIMELINE_FENCE_LANGS, AccentLayout, 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, BuiltInTemplateName, CONTAINER_TEMPLATES, COVER_SLIDE_FRONTMATTER_KEYS, COVER_SLIDE_TEMPLATE_OPTIONS, ClipBox, ConnectorAnchor, ConnectorPort, ConnectorRouting, ConnectorSnapPoint, 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, GEOMETRY_BOUND_TEMPLATES, 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, adjustY, anchorPoint, applyNarrationTiming, applyRenderStyleToLayers, asciiCellToCanvas, asciiDiagramFromBlocks, asciiDiagramFromTemplateData, asciiDiagramToTemplateData, asciiTimelineToTemplateData, autoTemplatePreservesContent, bigText, buildDashboardCellChrome, buildPageCss, buildPageCssVars, buildPreviewDoc, buildRegistry, 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, extractImages, extractListItems, extractRichListItems, extractTableData, extractTableFromContents, factCard, fallbackBlockLayers, findFirstList, findFirstTable, fitBigTextSize, fitDiagramLabel, flattenBlocks, flattenRenderableBlocks, formatCountUp, formatCountValue, fullBleedQuote, getAccentLayout, getAnimationProgress, getAnimationStyle, getAvailableTemplates, getBlockBodyText, getBlockDepth, getBlockMediaLayoutPolicy, getDashboardLayoutSummaries, getDefaultAnimation, getDefaultAnimationDuration, getMotionProfile, getOverlayOpacity, getPersistentLayersFromTheme, getPinnedBlockMeta, getTemplateHint, getThemeFont, getTransitionClass, hasTemplate, imageWithCaption, isAsciiDiagramFence, isAsciiTimelineFence, isContainerTemplate, isDataFence, isDataFilePath, isEligibleAsciiFenceLang, isEligibleAsciiTimelineFenceLang, isEligibleTreeFenceLang, isExplicitDiagramLang, isExplicitTimelineLang, isExplicitTreeLang, isGeometryBoundTemplate, isRepairableDiagram, isShapeName, isTemplatedPageBlock, isTreeFence, isWrappedFlowTimelineSource, layoutBlock, layoutCapacity, leftFeature, lineStyleDasharray, lintTemplateParams, listBlock, listDashboardLayouts, mapBlock, markdownBlockSeparatorLines, markdownToDoc, markerPath, materializeBlockLayers, materializeDashboard, materializeFlashcards, motionDelay, motionEntrance, motionStateTransform, nearestSnapPoint, normalizeDashboardZoom, normalizeShapeKind, pageStyleDataAttributes, parseAsciiDiagram, parseAsciiTimeline, parseAsciiTimelineWithStats, parseDataFence, parseStatNumber, parseTree, parseWrappedFlowTimeline, parseYamlSubset, photoGrid, pullQuote, quoteBlock, readCustomTemplatesFromFrontmatter, readCustomThemesFromFrontmatter, readDashboardLayoutsFromFrontmatter, renderAsciiDiagram, renderAsciiTimeline, renderMarkdownBlocksHtml, renderTree, repairAsciiDiagram, replaceDataFence, resolveAudioMapping, resolveColorScheme, resolveCoverSlideSettings, resolveDashboardLayoutDefinition, resolveDashboardSettings, resolveDashboardStyleId, resolveDashboardZooms, resolveDataReferences, 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, 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-Db7pABI0.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-Dmy_-AUQ.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 { DEFAULT_INTERACTIVE_RESOURCE_POLICY, DEFAULT_RESOURCE_MAX_BYTES, DEFAULT_RESOURCE_TIMEOUT_MS, DEFAULT_WRAP_WIDTH, FetchResourceBytesOptions, FetchedResource, HtmlPolicy, LOCAL_ONLY_RESOURCE_POLICY, MARKDOWN_SOURCE_TRANSFORMS, MarkdownSourceEdit, MarkdownSourceTransform, MarkdownSourceTransformId, MarkdownSourceTransformOptions, MarkdownSourceTransformResult, MarkdownWrapState, ResourcePolicy, ResourcePolicyError, SanitizeUrlOptions, TrailingAnnotationMatch, UrlKind, applyMarkdownSourceTransform, cleanupMarkdownSource, countNodes, createDocument, detectMarkdownWrapState, extractPlainText, fetchResourceBytes, findNodesByType, formatBlockScalar, formatFrontmatterValue, formatFrontmatterYaml, fromMdast, getChildren, inferDocumentTitle, isResourceUrlAllowed, matchTrailingPandocAttr, matchTrailingTemplateAnnotation, needsQuoting, parseFrontmatter, parseHtmlToNodes, parseMarkdown, parsePandocAttrTokens, plainTextFromInlineHtml, quoteAttrValue, readFrontmatterThemeId, sanitizeHtmlNodes, sanitizeUrl, serializePandocAttributes, setFrontmatterValues, splitFrontmatterBlock, splitKeyValueToken, stringifyHtmlNodes, stringifyMarkdown, toMdast, tokenizeAttrTokens, unquoteAttrValue, unwrapMarkdownSource, walkMarkdownTree, wrapMarkdownSource } from './markdown/index.js';
13
+ export { 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, ResourcePolicy, ResourcePolicyError, SanitizeUrlOptions, TrailingAnnotationMatch, UrlKind, applyMarkdownSourceTransform, cleanupMarkdownSource, condenseMarkdownSource, countNodes, createDocument, detectMarkdownWrapState, extractPlainText, fetchResourceBytes, findNodesByType, formatBlockScalar, formatFrontmatterValue, formatFrontmatterYaml, fromMdast, getChildren, inferDocumentTitle, isResourceUrlAllowed, matchTrailingPandocAttr, matchTrailingTemplateAnnotation, needsQuoting, normalizeDocfxMarkdown, parseFrontmatter, parseHtmlToNodes, parseMarkdown, parsePandocAttrTokens, plainTextFromInlineHtml, quoteAttrValue, readFrontmatterThemeId, rewriteMarkdownReferences, sanitizeHtmlNodes, sanitizeUrl, serializePandocAttributes, setFrontmatterValues, splitFrontmatterBlock, splitKeyValueToken, stringifyHtmlNodes, stringifyMarkdown, toMdast, tokenizeAttrTokens, unquoteAttrValue, unwrapMarkdownSource, walkMarkdownTree, 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-Ckqpu33y.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-X2TDC4E5.js";
30
+ } from "./chunk-HHGVTXHR.js";
31
31
  import {
32
32
  fenceRendererLangs
33
33
  } from "./chunk-PGI7HSWE.js";
@@ -65,7 +65,7 @@ import {
65
65
  getTransformStyleSummaries,
66
66
  resolveTransformStyle,
67
67
  transformNarratedSegment
68
- } from "./chunk-EWO2VLOS.js";
68
+ } from "./chunk-4P557IPH.js";
69
69
  import {
70
70
  extractContent,
71
71
  mapElementToBlock,
@@ -246,7 +246,7 @@ import {
246
246
  validateMarkdownSource,
247
247
  wordRevealDelay,
248
248
  writeDashboardLayoutsToFrontmatter
249
- } from "./chunk-S4427XKY.js";
249
+ } from "./chunk-GDF2FWL6.js";
250
250
  import {
251
251
  buildNarrationScript,
252
252
  buildNarrationTimingJson,
@@ -256,7 +256,7 @@ import {
256
256
  wordIndexAtChar,
257
257
  wordIndexAtTime,
258
258
  wordPosAtExpectedSyllables
259
- } from "./chunk-BR7ZMDWW.js";
259
+ } from "./chunk-6H2HBBFC.js";
260
260
  import {
261
261
  ASCII_CHAR_H,
262
262
  ASCII_CHAR_W,
@@ -387,7 +387,7 @@ import {
387
387
  wrapWithPersistentLayers,
388
388
  writeCustomTemplatesToFrontmatter,
389
389
  writeCustomThemesToFrontmatter
390
- } from "./chunk-42IU2SJY.js";
390
+ } from "./chunk-YPI2VJSB.js";
391
391
  import {
392
392
  ASCII_DIAGRAM_FENCE_LANGS,
393
393
  ASCII_TIMELINE_FENCE_LANGS,
@@ -528,7 +528,7 @@ import {
528
528
  createMediaProviderFromContainer,
529
529
  findDocumentPath,
530
530
  scopeContainer
531
- } from "./chunk-GIYWXYCK.js";
531
+ } from "./chunk-XSOIWNZL.js";
532
532
  import {
533
533
  DEFAULT_INTERACTIVE_RESOURCE_POLICY,
534
534
  DEFAULT_RESOURCE_MAX_BYTES,
@@ -539,13 +539,16 @@ import {
539
539
  ResourcePolicyError,
540
540
  applyMarkdownSourceTransform,
541
541
  cleanupMarkdownSource,
542
+ condenseMarkdownSource,
542
543
  detectMarkdownWrapState,
543
544
  fetchResourceBytes,
544
545
  isResourceUrlAllowed,
546
+ normalizeDocfxMarkdown,
547
+ rewriteMarkdownReferences,
545
548
  stringifyMarkdown,
546
549
  unwrapMarkdownSource,
547
550
  wrapMarkdownSource
548
- } from "./chunk-XZVBR5BP.js";
551
+ } from "./chunk-UVQPK6A3.js";
549
552
  import {
550
553
  DEFAULT_MARKDOWN_SAFETY_LIMITS,
551
554
  MarkdownLimitError,
@@ -812,6 +815,7 @@ export {
812
815
  computeDiagramLayout,
813
816
  computeDrawingLayout,
814
817
  computeLayoutLayers,
818
+ condenseMarkdownSource,
815
819
  connectorPath,
816
820
  contentBlock,
817
821
  contrastRatio,
@@ -1025,6 +1029,7 @@ export {
1025
1029
  nearestSnapPoint,
1026
1030
  needsQuoting,
1027
1031
  normalizeDashboardZoom,
1032
+ normalizeDocfxMarkdown,
1028
1033
  normalizeShapeKind,
1029
1034
  normalizeTransitionDirection,
1030
1035
  normalizeTransitionType,
@@ -1119,6 +1124,7 @@ export {
1119
1124
  resolveTransitionDuration,
1120
1125
  revertToImageEditVersion,
1121
1126
  revertToVersion,
1127
+ rewriteMarkdownReferences,
1122
1128
  rightFeature,
1123
1129
  sampleGreatCircle,
1124
1130
  sanitizeHtmlNodes,