@bendyline/squisq 2.13.15 → 2.13.16

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (38) hide show
  1. package/dist/{Doc-C_Sh49ot.d.ts → Doc-DLfTam0R.d.ts} +24 -1
  2. package/dist/{ImageEditDoc-Sqw3Tw-R.d.ts → ImageEditDoc-DdSHb6sj.d.ts} +1 -1
  3. package/dist/{chunk-OJCAKUHW.js → chunk-33CAD575.js} +12 -6
  4. package/dist/{chunk-L7QZORLB.js → chunk-37RLFDIT.js} +11 -4
  5. package/dist/chunk-4R3YZTPX.js +42 -0
  6. package/dist/{chunk-DBVCSVNV.js → chunk-A4ZFYGU6.js} +13 -38
  7. package/dist/{chunk-4HQ7QZKB.js → chunk-BG2OYBGC.js} +181 -43
  8. package/dist/{chunk-2SRF5III.js → chunk-BVL3F64S.js} +1 -1
  9. package/dist/{chunk-OFE5RZWW.js → chunk-MA7XUCSQ.js} +27 -6
  10. package/dist/{chunk-JSGIWW35.js → chunk-MTIR5PWF.js} +1 -1
  11. package/dist/{chunk-DDJHIZED.js → chunk-NBDF6SQ5.js} +21 -1
  12. package/dist/{chunk-N3FQSUVT.js → chunk-TOPEP5B7.js} +2 -2
  13. package/dist/{chunk-2CB37BOU.js → chunk-TXN23SG2.js} +1 -1
  14. package/dist/{chunk-FYP7GNER.js → chunk-XY5Z23C4.js} +7 -7
  15. package/dist/{chunk-Y34KYMAS.js → chunk-Z73DG6IL.js} +1 -1
  16. package/dist/doc/index.d.ts +98 -10
  17. package/dist/doc/index.js +17 -8
  18. package/dist/fence/index.d.ts +1 -1
  19. package/dist/generate/index.d.ts +1 -1
  20. package/dist/imageEdit/index.d.ts +3 -3
  21. package/dist/index.d.ts +6 -6
  22. package/dist/index.js +30 -16
  23. package/dist/jsonForm/index.d.ts +1 -1
  24. package/dist/jsonForm/index.js +5 -4
  25. package/dist/markdown/index.js +2 -2
  26. package/dist/{materializePageSection-Dmf-rf1b.d.ts → materializePageSection-HIoRYiZu.d.ts} +1 -1
  27. package/dist/mediaEdit/index.d.ts +154 -3
  28. package/dist/mediaEdit/index.js +241 -2
  29. package/dist/narration/index.d.ts +1 -1
  30. package/dist/narration/index.js +6 -4
  31. package/dist/recommend/index.js +3 -2
  32. package/dist/schemas/index.d.ts +26 -7
  33. package/dist/schemas/index.js +14 -8
  34. package/dist/{themeLibrary-B4VLovhW.d.ts → themeLibrary-B2K-aAOy.d.ts} +1 -1
  35. package/dist/timing/index.d.ts +1 -1
  36. package/dist/transform/index.d.ts +3 -3
  37. package/dist/transform/index.js +8 -6
  38. package/package.json +1 -1
@@ -1,8 +1,11 @@
1
+ import {
2
+ taskMarker
3
+ } from "./chunk-4R3YZTPX.js";
1
4
  import {
2
5
  mediaEditValuesFromAttributes,
3
6
  mediaEditValuesFromParams,
4
7
  parseMediaEdits
5
- } from "./chunk-L7QZORLB.js";
8
+ } from "./chunk-37RLFDIT.js";
6
9
  import {
7
10
  extractPlainText,
8
11
  findBlockVideoEmbed,
@@ -3248,8 +3251,19 @@ function isPictureFence(node) {
3248
3251
  if (node.type !== "code") return false;
3249
3252
  return node.lang?.trim().toLowerCase() === "mermaid" || isSvgIslandLang(node.lang);
3250
3253
  }
3254
+ function isSpatialPictureFence(node) {
3255
+ if (node.type !== "code") return false;
3256
+ if (isExplicitDiagramLang(node.lang)) {
3257
+ return detectAsciiDiagram(node.value, { explicit: true }).isDiagram;
3258
+ }
3259
+ if (isExplicitTreeLang(node.lang)) return detectTree(node.value, { explicit: true }).isTree;
3260
+ if (isExplicitTimelineLang(node.lang)) {
3261
+ return detectAsciiTimeline(node.value, { explicit: true }).isTimeline;
3262
+ }
3263
+ return false;
3264
+ }
3251
3265
  function isMaterializedMediaNode(node) {
3252
- if (node.type === "code") return isPictureFence(node);
3266
+ if (node.type === "code") return isPictureFence(node) || isSpatialPictureFence(node);
3253
3267
  return findBlockVideoEmbed(node) !== null || isStandaloneHtmlVideo(node);
3254
3268
  }
3255
3269
  function isPictureParagraph(node) {
@@ -3374,10 +3388,12 @@ function renderMarkdownBlocksHtml(nodes, builds) {
3374
3388
  const tag = node.ordered ? "ol" : "ul";
3375
3389
  const start = node.ordered && node.start != null ? ` start="${node.start}"` : "";
3376
3390
  const items = node.children.map((item, index) => {
3377
- const taskMarker = item.checked == null ? "" : `<span>${item.checked ? "[x]" : "[ ]"} </span>`;
3391
+ const task = item.checked == null ? null : taskMarker(item.checked);
3378
3392
  const step = builds?.targets.get(item);
3379
- if (step === void 0) return `<li>${taskMarker}${renderBlocks(item.children)}</li>`;
3380
- const marker = item.checked == null ? node.ordered ? `${(node.start ?? 1) + index}.` : "\u2022" : item.checked ? "[x]" : "[ ]";
3393
+ if (step === void 0) {
3394
+ return task === null ? `<li>${renderBlocks(item.children)}</li>` : `<li data-squisq-task><span aria-hidden="true">${task} </span>${renderBlocks(item.children)}</li>`;
3395
+ }
3396
+ const marker = task ?? (node.ordered ? `${(node.start ?? 1) + index}.` : "\u2022");
3381
3397
  let first = true;
3382
3398
  let own = [];
3383
3399
  const fragments = [];
@@ -3562,13 +3578,17 @@ function extractEmbeddedVideos(contents, limit = Infinity) {
3562
3578
  const startAt = attrs?.["data-squisq-video-start-at"] ? parseTimeSeconds(attrs["data-squisq-video-start-at"]) : null;
3563
3579
  const clipStart = attrs?.["data-squisq-video-clip-start"] ? parseTimeSeconds(attrs["data-squisq-video-clip-start"]) : null;
3564
3580
  const clipEnd = attrs?.["data-squisq-video-clip-end"] ? parseTimeSeconds(attrs["data-squisq-video-clip-end"]) : null;
3581
+ const edits = parseMediaEdits(mediaEditValuesFromAttributes("video", attrs ?? {}));
3582
+ const cuts = edits?.cuts;
3565
3583
  add({
3566
3584
  src,
3567
3585
  ...attrs?.poster ? { posterSrc: attrs.poster } : {},
3568
3586
  alt: attrs?.["aria-label"] || attrs?.title || attrs?.alt || "",
3569
3587
  ...startAt != null ? { startAt } : {},
3570
3588
  ...clipStart != null ? { clipStart } : {},
3571
- ...clipEnd != null ? { clipEnd } : {}
3589
+ ...clipEnd != null ? { clipEnd } : {},
3590
+ ...cuts?.length ? { cuts } : {},
3591
+ ...edits ? { edits } : {}
3572
3592
  });
3573
3593
  }
3574
3594
  } else if ((n.type === "link" || n.type === "image") && typeof n.url === "string" && VIDEO_FILE_RE.test(n.url)) {
@@ -4571,6 +4591,7 @@ export {
4571
4591
  findFirstList,
4572
4592
  extractHostedVideos,
4573
4593
  isPictureFence,
4594
+ isSpatialPictureFence,
4574
4595
  isMaterializedMediaNode,
4575
4596
  isPictureParagraph,
4576
4597
  extractBodyPlainText,
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  normalizeMediaCuts
3
- } from "./chunk-L7QZORLB.js";
3
+ } from "./chunk-37RLFDIT.js";
4
4
 
5
5
  // src/mediaEdit/timeMap.ts
6
6
  function createMediaTimeMap(input) {
@@ -730,14 +730,24 @@ function convertBlockNode(node, parseHtml) {
730
730
  }
731
731
  function convertListItem(node, parseHtml) {
732
732
  const pos = convertPosition(node.position);
733
+ const emptyTask = node.checked == null ? emptyTaskMarker(node) : null;
733
734
  return {
734
735
  type: "listItem",
735
736
  ...node.checked != null ? { checked: node.checked } : {},
737
+ ...emptyTask !== null ? { checked: emptyTask } : {},
736
738
  ...node.spread != null ? { spread: node.spread } : {},
737
- children: convertBlockChildren(node.children ?? [], parseHtml),
739
+ children: emptyTask !== null ? [] : convertBlockChildren(node.children ?? [], parseHtml),
738
740
  ...posField(pos)
739
741
  };
740
742
  }
743
+ function emptyTaskMarker(node) {
744
+ const [paragraph, ...rest] = node.children ?? [];
745
+ if (!paragraph || rest.length > 0 || paragraph.type !== "paragraph") return null;
746
+ const [text, ...more] = paragraph.children ?? [];
747
+ if (!text || more.length > 0 || text.type !== "text") return null;
748
+ const match = /^\[( |x|X)\]$/.exec(String(text.value ?? "").trim());
749
+ return match ? match[1] !== " " : null;
750
+ }
741
751
  function convertTableRow(node, isHeader, parseHtml) {
742
752
  const pos = convertPosition(node.position);
743
753
  return {
@@ -1019,6 +1029,16 @@ function blockToMdast(node) {
1019
1029
  }
1020
1030
  }
1021
1031
  function listItemToMdast(item) {
1032
+ if (item.checked != null && item.children.length === 0) {
1033
+ return {
1034
+ type: "listItem",
1035
+ ...item.spread != null ? { spread: item.spread } : {},
1036
+ children: [
1037
+ { type: "paragraph", children: [{ type: "html", value: item.checked ? "[x]" : "[ ]" }] }
1038
+ ],
1039
+ ...mdastPosField(item.position)
1040
+ };
1041
+ }
1022
1042
  return {
1023
1043
  type: "listItem",
1024
1044
  ...item.checked != null ? { checked: item.checked } : {},
@@ -10,7 +10,7 @@ import {
10
10
  presentationBeatExtras,
11
11
  presentationLayoutProblem,
12
12
  presentationStat
13
- } from "./chunk-4HQ7QZKB.js";
13
+ } from "./chunk-BG2OYBGC.js";
14
14
  import {
15
15
  classifyListShape,
16
16
  matchNumberHighlight,
@@ -18,7 +18,7 @@ import {
18
18
  shapeIsStated,
19
19
  splitStatItem,
20
20
  unstatedShapeFallback
21
- } from "./chunk-OFE5RZWW.js";
21
+ } from "./chunk-MA7XUCSQ.js";
22
22
 
23
23
  // src/transform/grounding.ts
24
24
  var NUMBER = /\d[\d,]*(?:\.\d+)?/gu;
@@ -9,7 +9,7 @@ import {
9
9
  expectedSyllablesAt,
10
10
  flattenRenderableBlocks,
11
11
  wordPosAtExpectedSyllables
12
- } from "./chunk-4HQ7QZKB.js";
12
+ } from "./chunk-BG2OYBGC.js";
13
13
 
14
14
  // src/narration/types.ts
15
15
  var DEFAULT_FEATURE_CONFIG = Object.freeze({
@@ -3,7 +3,7 @@ import {
3
3
  } from "./chunk-HKHOFTGM.js";
4
4
  import {
5
5
  applySavedPresentation
6
- } from "./chunk-OJCAKUHW.js";
6
+ } from "./chunk-33CAD575.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-4HQ7QZKB.js";
34
+ } from "./chunk-BG2OYBGC.js";
35
35
  import {
36
36
  ASCII_TREE_VOCAB,
37
37
  ASCII_VOCAB,
@@ -57,14 +57,14 @@ import {
57
57
  toCells,
58
58
  toGrid,
59
59
  traceBoxes
60
- } from "./chunk-OFE5RZWW.js";
60
+ } from "./chunk-MA7XUCSQ.js";
61
61
  import {
62
62
  iconMarker
63
63
  } from "./chunk-7ZAAICW4.js";
64
64
  import {
65
65
  defaultPageStyle,
66
66
  resolveMediaSchedule
67
- } from "./chunk-2SRF5III.js";
67
+ } from "./chunk-BVL3F64S.js";
68
68
  import {
69
69
  DEFAULT_THEME,
70
70
  FRONTMATTER_CUSTOM_TEMPLATES_KEY,
@@ -84,13 +84,13 @@ import {
84
84
  } from "./chunk-JNUNNQ74.js";
85
85
  import {
86
86
  createMediaTimeMap
87
- } from "./chunk-JSGIWW35.js";
87
+ } from "./chunk-MTIR5PWF.js";
88
88
  import {
89
89
  serializeMediaEdits
90
- } from "./chunk-L7QZORLB.js";
90
+ } from "./chunk-37RLFDIT.js";
91
91
  import {
92
92
  parseMarkdown
93
- } from "./chunk-DDJHIZED.js";
93
+ } from "./chunk-NBDF6SQ5.js";
94
94
  import {
95
95
  TABLE_FED_TEMPLATES,
96
96
  TEMPLATE_ALIASES,
@@ -3,7 +3,7 @@ import {
3
3
  parseMarkdown,
4
4
  remarkWikiLinks,
5
5
  toMdast
6
- } from "./chunk-DDJHIZED.js";
6
+ } from "./chunk-NBDF6SQ5.js";
7
7
  import {
8
8
  formatFrontmatterYaml,
9
9
  getChildren,
@@ -1,12 +1,12 @@
1
- import { ac as Layer, k as Block, U as Doc, bE as TemplateBlock, bF as TemplateContext, D as CustomTemplateDefinition, bH as TemplateRegistry, bN as Theme, cj as ViewportConfig, b7 as PersistentLayerConfig, aC as MotionSpec, V as DocBlock, ck as ViewportOrientation, b6 as PersistentLayer, b_ as TitleBlockInput, br as SectionHeaderInput, j as BigTextInput, w as ContentBlockInput, bx as StatHighlightInput, bl as QuoteBlockInput, a0 as FactCardInput, c7 as TwoColumnInput, M as DateEventInput, aa as ImageWithCaptionInput, ag as LeftFeatureInput, bo as RightFeatureInput, n as BottomFeatureInput, av as MediaOnlyInput, c0 as TopFeatureInput, al as MapBlockInput, bw as StartBlockConfig, a3 as FullBleedQuoteInput, aj as ListBlockInput, q as CardsBlockInput, H as CycleBlockInput, ae as LayersBlockInput, bg as ProcessBlockInput, a4 as FunnelBlockInput, a6 as HubBlockInput, aq as MatrixBlockInput, bk as PyramidBlockInput, by as StatsBlockInput, c9 as VennBlockInput, bb as PhotoGridInput, O as DefinitionCardInput, v as ComparisonBarInput, bj as PullQuoteInput, ci as VideoWithCaptionInput, ch as VideoPullQuoteInput, L as DataTableInput, P as DiagramBlockInput, c2 as TreeBlockInput, bW as TimelineBlockInput, Y as DrawingBlockInput, ap as MarkerStyle, A as AccentImage, a9 as ImageTreatment, a as AccentPosition, c as Animation, d as AnimationType, aD as MotionState, aA as MotionProfile, bP as ThemeColorScheme, y as CountUpSpec, bR as ThemeRegistry, a_ as PageEmphasis, bQ as ThemePageStyle, W as DocDiagnostic, bi as PromotedBodyAnnotation, S as DiagramTemplateNode, R as DiagramTemplateEdge, bZ as TimelineTemplateTrack, bY as TimelineTemplateLink } from '../Doc-C_Sh49ot.js';
2
- export { Z as FRONTMATTER_CUSTOM_TEMPLATES_KEY, _ as FRONTMATTER_CUSTOM_THEMES_KEY, af as LayoutHints, bn as RenderStyle, bO as ThemeColorPalette, bU as ThemeStyle, bV as ThemeTypography, c8 as VIEWPORT_PRESETS, cl as ViewportPreset, cq as createTemplateContext, cx as getLayoutHints, cA as getTwoColumnPositions, cB as getViewport, cC as getViewportOrientation, cG as isTemplateBlock, cM as scaledFontSize } from '../Doc-C_Sh49ot.js';
1
+ import { ac as Layer, k as Block, U as Doc, bE as TemplateBlock, bF as TemplateContext, D as CustomTemplateDefinition, bH as TemplateRegistry, bN as Theme, cj as ViewportConfig, b7 as PersistentLayerConfig, aC as MotionSpec, V as DocBlock, ck as ViewportOrientation, b6 as PersistentLayer, b_ as TitleBlockInput, br as SectionHeaderInput, j as BigTextInput, w as ContentBlockInput, bx as StatHighlightInput, bl as QuoteBlockInput, a0 as FactCardInput, c7 as TwoColumnInput, M as DateEventInput, aa as ImageWithCaptionInput, ag as LeftFeatureInput, bo as RightFeatureInput, n as BottomFeatureInput, av as MediaOnlyInput, c0 as TopFeatureInput, al as MapBlockInput, bw as StartBlockConfig, a3 as FullBleedQuoteInput, aj as ListBlockInput, q as CardsBlockInput, H as CycleBlockInput, ae as LayersBlockInput, bg as ProcessBlockInput, a4 as FunnelBlockInput, a6 as HubBlockInput, aq as MatrixBlockInput, bk as PyramidBlockInput, by as StatsBlockInput, c9 as VennBlockInput, bb as PhotoGridInput, O as DefinitionCardInput, v as ComparisonBarInput, bj as PullQuoteInput, ci as VideoWithCaptionInput, ch as VideoPullQuoteInput, L as DataTableInput, P as DiagramBlockInput, c2 as TreeBlockInput, bW as TimelineBlockInput, Y as DrawingBlockInput, ap as MarkerStyle, A as AccentImage, a9 as ImageTreatment, a as AccentPosition, c as Animation, d as AnimationType, aD as MotionState, aA as MotionProfile, bP as ThemeColorScheme, y as CountUpSpec, at as MediaCut, au as MediaEdits, bR as ThemeRegistry, a_ as PageEmphasis, bQ as ThemePageStyle, W as DocDiagnostic, bi as PromotedBodyAnnotation, S as DiagramTemplateNode, R as DiagramTemplateEdge, bZ as TimelineTemplateTrack, bY as TimelineTemplateLink } from '../Doc-DLfTam0R.js';
2
+ export { Z as FRONTMATTER_CUSTOM_TEMPLATES_KEY, _ as FRONTMATTER_CUSTOM_THEMES_KEY, af as LayoutHints, bn as RenderStyle, bO as ThemeColorPalette, bU as ThemeStyle, bV as ThemeTypography, c8 as VIEWPORT_PRESETS, cl as ViewportPreset, cq as createTemplateContext, cx as getLayoutHints, cA as getTwoColumnPositions, cB as getViewport, cC as getViewportOrientation, cG as isTemplateBlock, cM as scaledFontSize } from '../Doc-DLfTam0R.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 { w as PresentationLayout, g as ConceptTemplateName, m as PageSection } from '../materializePageSection-Dmf-rf1b.js';
6
- export { C as CONCEPT_MAX_DRAWN, a as CONCEPT_SPECS, c as ConceptDowngrade, d as ConceptItemsOptions, e as ConceptSpec, f as ConceptSpecInput, M as MaterializePageSectionOptions, h as MaterializePageSectionsOptions, k as PageMedia, l as PageRichText, n as PageSectionDiagnostic, o as PageSectionItem, p as PageSectionMaterialization, q as PageSectionSource, r as PageSpatialKind, s as PageTransformHints, y as conceptDowngrade, z as conceptDrawsAs, B as conceptItemCount, D as conceptItemsProblem, F as materializePageSection, G as materializePageSections, O as resolvePageStyle } from '../materializePageSection-Dmf-rf1b.js';
5
+ import { w as PresentationLayout, g as ConceptTemplateName, m as PageSection } from '../materializePageSection-HIoRYiZu.js';
6
+ export { C as CONCEPT_MAX_DRAWN, a as CONCEPT_SPECS, c as ConceptDowngrade, d as ConceptItemsOptions, e as ConceptSpec, f as ConceptSpecInput, M as MaterializePageSectionOptions, h as MaterializePageSectionsOptions, k as PageMedia, l as PageRichText, n as PageSectionDiagnostic, o as PageSectionItem, p as PageSectionMaterialization, q as PageSectionSource, r as PageSpatialKind, s as PageTransformHints, y as conceptDowngrade, z as conceptDrawsAs, B as conceptItemCount, D as conceptItemsProblem, F as materializePageSection, G as materializePageSections, O as resolvePageStyle } from '../materializePageSection-HIoRYiZu.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-B4VLovhW.js';
9
+ export { D as DEFAULT_THEME, g as getAvailableThemes, b as getThemeSummaries, r as resolveTheme } from '../themeLibrary-B2K-aAOy.js';
10
10
 
11
11
  /** Pure build planning and evaluation, shared by interactive slides and frame export. */
12
12
 
@@ -2745,6 +2745,10 @@ interface EmbeddedVideo {
2745
2745
  /** Source-media in/out points carried by inline video data attributes. */
2746
2746
  clipStart?: number;
2747
2747
  clipEnd?: number;
2748
+ /** Source ranges the clip's edit recipe removes (`data-squisq-video-cuts`). */
2749
+ cuts?: MediaCut[];
2750
+ /** The clip's whole edit recipe (`data-squisq-video-*`), when it has one. */
2751
+ edits?: MediaEdits;
2748
2752
  }
2749
2753
  /** A hosted video (YouTube, Vimeo, …) a block body stands for. */
2750
2754
  interface HostedVideo {
@@ -2769,12 +2773,22 @@ declare function extractHostedVideos(contents: readonly MarkdownBlockNode[] | un
2769
2773
  * captions and reading time must not speak diagram source or SVG markup.
2770
2774
  */
2771
2775
  declare function isPictureFence(node: MarkdownNode): boolean;
2776
+ /**
2777
+ * A fence the author tagged ```diagram, ```tree or ```timeline whose art
2778
+ * parses: `appendRichContentLayers` draws it as its own picture beside the
2779
+ * block's words. Its source is box-drawing and marker art (`● Start {#start}
2780
+ * ─────●`), so as prose it would print on the slide next to the picture it
2781
+ * became and be read aloud by narration. An untagged fence stays code; one
2782
+ * whose art does not parse stays visible rather than disappearing.
2783
+ */
2784
+ declare function isSpatialPictureFence(node: MarkdownNode): boolean;
2772
2785
  /**
2773
2786
  * Body nodes that render as their own visual layer rather than as prose: a
2774
- * picture fence ({@link isPictureFence}), a hosted-video paragraph and a
2775
- * standalone `<video>` (players, via `appendRichContentLayers`). Repeating
2776
- * them as body text would print the diagram source, the video's link or its
2777
- * raw tag under the very thing they became.
2787
+ * picture fence ({@link isPictureFence}), a tagged diagram, tree or timeline
2788
+ * ({@link isSpatialPictureFence}), a hosted-video paragraph and a standalone
2789
+ * `<video>` (players, via `appendRichContentLayers`). Repeating them as body
2790
+ * text would print the diagram source, the video's link or its raw tag under
2791
+ * the very thing they became.
2778
2792
  */
2779
2793
  declare function isMaterializedMediaNode(node: MarkdownBlockNode): boolean;
2780
2794
  /**
@@ -2909,6 +2923,63 @@ declare function deriveTemplateInputs(templateName: string, headingText: string,
2909
2923
  */
2910
2924
  declare function coverRepeatsLeadingBlock(doc: Doc): boolean;
2911
2925
 
2926
+ /**
2927
+ * A block's video sets the floor on its length.
2928
+ *
2929
+ * `markdownToDoc` estimates a block's duration from its text. That is right
2930
+ * for prose and wrong for a slide that is a short caption over a clip: a
2931
+ * heading, a line of text and a 1:40 screen recording read in three seconds,
2932
+ * so the slide advanced — and its video, whose out-point is the block's end,
2933
+ * stopped — three seconds in. A video plays to its own length, so the block's
2934
+ * duration is at least the longest video it plays, measured from the block's
2935
+ * start (a `startAt` delay counts) through the clip's played length (trim
2936
+ * window minus cuts).
2937
+ *
2938
+ * ## Which videos count
2939
+ *
2940
+ * - Video in the block's body: a `<video>` tag, or a markdown link/image to a
2941
+ * video file (what {@link extractEmbeddedVideos} finds).
2942
+ * - Video clips anchored to the block (`block.media`) that stop at its end —
2943
+ * not `spillover` clips (they run past the block on purpose) and not
2944
+ * unlocked clips (`lockToBlock: false`; those are document-timed).
2945
+ *
2946
+ * Audio does not count: a block over a long music bed should not hold for the
2947
+ * whole track.
2948
+ *
2949
+ * ## Where a video's length comes from
2950
+ *
2951
+ * An authored out-point (`data-squisq-video-clip-end` / `clipEnd=`) is enough
2952
+ * on its own. Otherwise the length is the media file's, which the pure model
2953
+ * cannot read: hosts that can (a browser decoding the file's metadata) pass a
2954
+ * {@link VideoDurationLookup}. Without either, the video sets no floor and the
2955
+ * block keeps its text estimate.
2956
+ *
2957
+ * ## Precedence
2958
+ *
2959
+ * An author-pinned `duration=` wins outright. Recorded narration
2960
+ * (`applyNarrationTiming`, run later by `resolveAudioMapping`) overwrites the
2961
+ * blocks it times. Below both, a block lasts the longer of its reading time and
2962
+ * its video.
2963
+ */
2964
+
2965
+ /**
2966
+ * A media file's own length in seconds, keyed by the `src` the document
2967
+ * names it with. Return undefined when the length is not known (yet).
2968
+ */
2969
+ type VideoDurationLookup = (src: string) => number | undefined;
2970
+ /**
2971
+ * The shortest duration that lets every video in `block` play to its end, or
2972
+ * null when the block plays no video of known length. Ignores the block's own
2973
+ * duration and any pin — callers decide whether the floor applies.
2974
+ */
2975
+ declare function blockVideoLength(block: Block, lookup?: VideoDurationLookup): number | null;
2976
+ /**
2977
+ * The video sources in `doc` whose length only the media file can tell — those
2978
+ * with no authored out-point — in document order, without duplicates. A host
2979
+ * measures these and passes the results to `applyVideoDurations`.
2980
+ */
2981
+ declare function collectVideoDurationSources(doc: Doc): string[];
2982
+
2912
2983
  /**
2913
2984
  * Markdown → Doc Conversion
2914
2985
  *
@@ -2995,6 +3066,23 @@ interface MarkdownToDocOptions {
2995
3066
  */
2996
3067
  declare function getPinnedBlockMeta(block: Block): CoercedBlockMeta;
2997
3068
  declare function markdownToDoc(markdownDoc: MarkdownDocument, options?: MarkdownToDocOptions): Doc;
3069
+ /**
3070
+ * Hold each block open for the videos it plays, using media lengths the pure
3071
+ * conversion could not know (see `doc/videoTiming.ts`). `markdownToDoc`
3072
+ * already floors blocks with an authored out-point; this adds the files'
3073
+ * own lengths — typically measured in a browser — and re-lays the timeline
3074
+ * (start times, caption phrases, document-timed videos, `doc.duration`)
3075
+ * exactly as conversion does.
3076
+ *
3077
+ * Run it on `markdownToDoc` output, BEFORE `resolveAudioMapping`: recorded
3078
+ * narration then re-times the blocks it covers and keeps precedence, and the
3079
+ * re-layout here cannot disturb it. A block with a pinned `duration=` keeps it.
3080
+ *
3081
+ * Pure: returns `doc` itself when no block needs to grow (so memoized
3082
+ * consumers see no change), otherwise a new Doc whose block tree is copied —
3083
+ * the input is never mutated.
3084
+ */
3085
+ declare function applyVideoDurations(doc: Doc, lookup: VideoDurationLookup): Doc;
2998
3086
  /**
2999
3087
  * Flatten a nested block tree into a depth-first ordered array.
3000
3088
  * Useful for calculating sequential timing or iterating all blocks.
@@ -5150,4 +5238,4 @@ declare function treeFromMarkdownList(list: MarkdownList): Tree;
5150
5238
  /** Find the first top-level markdown list in a block's body, if any. */
5151
5239
  declare function findFirstList(contents: MarkdownBlockNode[] | undefined): MarkdownList | undefined;
5152
5240
 
5153
- export { ASCII_CHAR_H, ASCII_CHAR_W, ASCII_DIAGRAM_FENCE_LANGS, ASCII_TIMELINE_FENCE_LANGS, AUTHORING_TRICKS, type AccentLayout, type ArrangeAsciiDiagramOptions, type AsciiDiagram, type AsciiDiagramDetection, type AsciiDiagramEdge, type AsciiDiagramNode, type AsciiTimeline, type AsciiTimelineDetection, type AsciiTimelineEvent, type AsciiTimelineLink, type AsciiTimelineMarker, type AsciiTimelineSide, type AsciiTimelineStats, type AsciiTimelineStyle, type AsciiTimelineTrack, type AudioSegmentTiming, type AuthoringTrick, type AuthoringTrickOptions, BASE_INPUT_DESCRIPTORS, BLOCK_MEDIA_LAYOUT_POLICIES, BUILTIN_DASHBOARD_LAYOUTS, type BlockLayerMaterialization, type BlockMediaLayoutPolicy, type BuildPreviewDocOptions, type BuildTimeline, type BuiltInTemplateName, CONTAINER_TEMPLATES, COVER_SLIDE_FRONTMATTER_KEYS, COVER_SLIDE_TEMPLATE_OPTIONS, type ChartData, type ChartTableData, type ClipBox, type ConceptItem, ConceptTemplateName, type ConnectorAnchor, type ConnectorPort, type ConnectorRouting, type ConnectorSnapPoint, type ContentBuildPlan, type CoverBlockInput, type CoverSlidePlayback, type CoverSlideSettings, type CoverSlideTemplate, type 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, type DashboardCell, type DashboardCellChrome, type DashboardCellDefinition, type DashboardCellFrame, type DashboardDiagnostic, type DashboardLayoutDefinition, type DashboardLayoutSummary, type DashboardLayoutValidationError, type DashboardLayoutValidationResult, type DashboardMaterialization, type DashboardRectPct, type DashboardSettings, type DashboardSettingsOverrides, type DashboardStyleId, type DashboardStyleSummary, type DashboardTitle, type DashboardTitleSlotDefinition, type DashboardZoomCandidate, type DashboardZoomLevel, type DashboardZoomMode, type DataFenceParseResult, type DataSourceReadOptions, type DataSourceReader, type DataSourceStats, type DataSourceTable, type DeriveTemplateInputsOptions, type DetectAsciiTimelineOptions, type DiagramEdge, type DiagramLabelFit, type DiagramLayout, type DiagramLayoutOptions, type DiagramNodePosition, DocBlock, type DrawingConnector, type DrawingLayout, type DrawingLayoutOptions, type DrawingShape, type DrawingShapeKind, type EmbeddedVideo, type ExpandDocBlocksOptions, type ExtractedTableData, FRONTMATTER_DASHBOARD_LAYOUTS_KEY, type FirstImage, type Flashcard, type FlashcardChoice, type FlashcardDeck, type FlashcardDiagnostic, type FlashcardDiagnosticCode, type FlashcardFace, type FlashcardKind, type FlashcardSourceMode, type FrostedBigTextLayout, GEOMETRY_BOUND_TEMPLATES, type GuideWording, type GuidedTemplate, type HostedVideo, type InputCoercion, type LayerMaterializationDiagnostic, type LayerMaterializationFailureMode, type LayerMaterializationSource, type LayoutLayerDefaults, type LayoutLayersResult, MARKDOWN_SHAPE_EXAMPLES, MAX_COVER_SLIDE_DURATION_SECONDS, type MarkdownShapeExample, type MarkdownToDocOptions, type MarkdownValidationResult, type MaterializeBlockLayersOptions, type MaterializeDashboardOptions, type MaterializeFlashcardsOptions, type MatrixReading, type NarrationResolution, type NativeMediaLayout, type NoMediaLayout, PAGE_BASE_CSS, PATH_SHAPE_KINDS, PRESENTATION_LAYOUT_GUIDE, PRESENTATION_LAYOUT_LABELS, PageSection, type PageSectionContext, type PageSectionDraft, type ParsedAnnotation, type ParsedStat, PersistentLayerConfig, type PromotableDetection, type RenderAsciiDiagramOptions, type RenderAsciiTimelineOptions, type RenderTreeOptions, type RepairResult, type ResolveDataReferencesOptions, type ResolvedDashboardCell, type ResolvedDataReferences, type ResolvedPageBlock, type RichListItem, type RuntimeTemplateRegistry, SHAPE_NAMES, type SectionExtractor, type StatItem, type SupplementalMediaLayoutVariant, type SupplementalMediaShape, type SupplementalMediaVariantMatrix, TABLE_FED_TEMPLATES, TEMPLATE_AUTHORING_METADATA, TEMPLATE_GUIDES, TEMPLATE_INPUT_DESCRIPTORS, TEMPLATE_METADATA, TREE_FENCE_LANGS, type TemplateAuthoringMetadata, type TemplateAuthoringRole, TemplateBlock, type TemplateBodyPolicy, type TemplateCatalogEntry, TemplateContext, type TemplateGuide, type TemplateInputDescriptor, type TemplateMediaOwnership, type TemplateMetadata, type TemplateParamFinding, Theme, ThemeColorScheme, type Tree, type TreeDetection, type TreeItem, type TreeNode, type UnconsumedMediaBehavior, type ValidateOptions, ViewportConfig, ViewportOrientation, accentForViewport, adjustY, anchorPoint, applyNarrationTiming, applyRenderStyleToLayers, arrangeAsciiDiagram, asciiCellToCanvas, asciiDiagramFromBlocks, asciiDiagramFromTemplateData, asciiDiagramToTemplateData, asciiTimelineToTemplateData, authoringTricks, autoTemplatePreservesContent, bigText, blockBuildSteps, bottomFeature, buildChartData, buildCursorAtTime, buildDashboardCellChrome, buildPageCss, buildPageCssVars, buildPreviewDoc, buildRegistry, buildSourceText, buildTargetState, canvasToAsciiCell, cardsBlock, chooseDashboardLayout, clipEndpoints, clipPoint, coerceTemplateParams, comparisonBar, composeDashboardLayers, computeDiagramLayout, computeDrawingLayout, computeLayoutLayers, conceptBuildStepTexts, connectorPath, contentBlock, countBlocks, countUpSpecFor, coverBlock, coverRepeatsLeadingBlock, createAccentLayers, cssFilterForTreatment, cycleBlock, dashboardCanvasFill, dashboardCellAccent, dataSidecarPrefix, dataTable, dateEvent, definitionCard, deriveTemplateInputs, desiredCellZoom, detectAsciiDiagram, detectAsciiTimeline, detectPromotableBodyAnnotation, detectTree, diagramBlock, docToMarkdown, documentTitleFromFileName, drawingBlock, expandCoverBlock, expandDocBlocks, expandPersistentLayers, extractBlockquote, extractBlockquoteText, extractBodyPlainText, extractConceptItems, extractEmbeddedVideos, extractFirstEmbeddedVideo, extractFirstImage, extractHostedVideos, extractImages, extractListItems, extractRichListItems, extractTableData, extractTableFromContents, factCard, fallbackBlockLayers, findFirstList, findFirstTable, fitBigTextSize, fitDiagramLabel, flattenBlocks, flattenRenderableBlocks, formatCountUp, formatCountValue, frostedBigTextLayout, fullBleedQuote, funnelBlock, getAccentLayout, getAnimationProgress, getAnimationStyle, getAvailableTemplates, getBlockBodyText, getBlockDepth, getBlockMediaLayoutPolicy, getDashboardLayoutSummaries, getDefaultAnimation, getDefaultAnimationDuration, getMotionProfile, getOverlayOpacity, getPersistentLayersFromTheme, getPinnedBlockMeta, getTemplateHint, getThemeFont, getTransitionClass, guideText, hasBlockBuilds, hasTemplate, hubBlock, imageWithCaption, isAsciiDiagramFence, isAsciiTimelineFence, isContainerTemplate, isDataFence, isDataFilePath, isEligibleAsciiFenceLang, isEligibleAsciiTimelineFenceLang, isEligibleTreeFenceLang, isExplicitDiagramLang, isExplicitTimelineLang, isExplicitTreeLang, isFigureText, isGeometryBoundTemplate, isMaterializedMediaNode, isMediaAnnotationName, isPictureFence, isPictureParagraph, isRepairableDiagram, isShapeName, isTemplatedPageBlock, isTreeFence, isWrappedFlowTimelineSource, layersBlock, layoutBlock, layoutCapacity, leftFeature, lineStyleDasharray, lintTemplateParams, listBlock, listDashboardLayouts, mapBlock, markdownBlockSeparatorLines, markdownShapeExample, markdownShapeGuide, markdownShapeSummary, markdownToDoc, markerPath, materializeBlockLayers, materializeDashboard, materializeFlashcards, matrixBlock, mediaOnly, motionDelay, motionEntrance, motionStateTransform, nearestSnapPoint, normalizeChartTable, normalizeDashboardZoom, normalizeShapeKind, pageStyleDataAttributes, parseAsciiDiagram, parseAsciiTimeline, parseAsciiTimelineWithStats, parseDataFence, parseStandaloneAnnotation, parseStatNumber, parseTree, parseWrappedFlowTimeline, parseYamlSubset, photoGrid, planContentBuilds, previewBlockTemplate, processBlock, pullQuote, pyramidBlock, quoteBlock, readCustomTemplatesFromFrontmatter, readCustomThemesFromFrontmatter, readDashboardLayoutsFromFrontmatter, readMatrixItems, 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, splitConceptItem, splitStatItem, statHighlight, statsBlock, stripBlockBackdropLayer, stripsBlockBackdrop, templateCatalog, templateRegistry, themeWantsAmbientMotion, themedEntrance, themedFontSize, themedImageTreatment, themedScrim, themedSurfaceGradient, timelineBlock, titleBlock, topFeature, transformOriginFor, transposeCells, treeBlock, treeFromMarkdownList, treeFromTemplateData, treeToTemplateData, twoColumn, validateDashboardLayoutDefinition, validateMarkdownDoc, validateMarkdownSource, vennBlock, vennOverlapIndex, videoPullQuote, videoWithCaption, wordRevealDelay, wrapWithPersistentLayers, writeCustomTemplatesToFrontmatter, writeCustomThemesToFrontmatter, writeDashboardLayoutsToFrontmatter };
5241
+ export { ASCII_CHAR_H, ASCII_CHAR_W, ASCII_DIAGRAM_FENCE_LANGS, ASCII_TIMELINE_FENCE_LANGS, AUTHORING_TRICKS, type AccentLayout, type ArrangeAsciiDiagramOptions, type AsciiDiagram, type AsciiDiagramDetection, type AsciiDiagramEdge, type AsciiDiagramNode, type AsciiTimeline, type AsciiTimelineDetection, type AsciiTimelineEvent, type AsciiTimelineLink, type AsciiTimelineMarker, type AsciiTimelineSide, type AsciiTimelineStats, type AsciiTimelineStyle, type AsciiTimelineTrack, type AudioSegmentTiming, type AuthoringTrick, type AuthoringTrickOptions, BASE_INPUT_DESCRIPTORS, BLOCK_MEDIA_LAYOUT_POLICIES, BUILTIN_DASHBOARD_LAYOUTS, type BlockLayerMaterialization, type BlockMediaLayoutPolicy, type BuildPreviewDocOptions, type BuildTimeline, type BuiltInTemplateName, CONTAINER_TEMPLATES, COVER_SLIDE_FRONTMATTER_KEYS, COVER_SLIDE_TEMPLATE_OPTIONS, type ChartData, type ChartTableData, type ClipBox, type ConceptItem, ConceptTemplateName, type ConnectorAnchor, type ConnectorPort, type ConnectorRouting, type ConnectorSnapPoint, type ContentBuildPlan, type CoverBlockInput, type CoverSlidePlayback, type CoverSlideSettings, type CoverSlideTemplate, type 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, type DashboardCell, type DashboardCellChrome, type DashboardCellDefinition, type DashboardCellFrame, type DashboardDiagnostic, type DashboardLayoutDefinition, type DashboardLayoutSummary, type DashboardLayoutValidationError, type DashboardLayoutValidationResult, type DashboardMaterialization, type DashboardRectPct, type DashboardSettings, type DashboardSettingsOverrides, type DashboardStyleId, type DashboardStyleSummary, type DashboardTitle, type DashboardTitleSlotDefinition, type DashboardZoomCandidate, type DashboardZoomLevel, type DashboardZoomMode, type DataFenceParseResult, type DataSourceReadOptions, type DataSourceReader, type DataSourceStats, type DataSourceTable, type DeriveTemplateInputsOptions, type DetectAsciiTimelineOptions, type DiagramEdge, type DiagramLabelFit, type DiagramLayout, type DiagramLayoutOptions, type DiagramNodePosition, DocBlock, type DrawingConnector, type DrawingLayout, type DrawingLayoutOptions, type DrawingShape, type DrawingShapeKind, type EmbeddedVideo, type ExpandDocBlocksOptions, type ExtractedTableData, FRONTMATTER_DASHBOARD_LAYOUTS_KEY, type FirstImage, type Flashcard, type FlashcardChoice, type FlashcardDeck, type FlashcardDiagnostic, type FlashcardDiagnosticCode, type FlashcardFace, type FlashcardKind, type FlashcardSourceMode, type FrostedBigTextLayout, GEOMETRY_BOUND_TEMPLATES, type GuideWording, type GuidedTemplate, type HostedVideo, type InputCoercion, type LayerMaterializationDiagnostic, type LayerMaterializationFailureMode, type LayerMaterializationSource, type LayoutLayerDefaults, type LayoutLayersResult, MARKDOWN_SHAPE_EXAMPLES, MAX_COVER_SLIDE_DURATION_SECONDS, type MarkdownShapeExample, type MarkdownToDocOptions, type MarkdownValidationResult, type MaterializeBlockLayersOptions, type MaterializeDashboardOptions, type MaterializeFlashcardsOptions, type MatrixReading, type NarrationResolution, type NativeMediaLayout, type NoMediaLayout, PAGE_BASE_CSS, PATH_SHAPE_KINDS, PRESENTATION_LAYOUT_GUIDE, PRESENTATION_LAYOUT_LABELS, PageSection, type PageSectionContext, type PageSectionDraft, type ParsedAnnotation, type ParsedStat, PersistentLayerConfig, type PromotableDetection, type RenderAsciiDiagramOptions, type RenderAsciiTimelineOptions, type RenderTreeOptions, type RepairResult, type ResolveDataReferencesOptions, type ResolvedDashboardCell, type ResolvedDataReferences, type ResolvedPageBlock, type RichListItem, type RuntimeTemplateRegistry, SHAPE_NAMES, type SectionExtractor, type StatItem, type SupplementalMediaLayoutVariant, type SupplementalMediaShape, type SupplementalMediaVariantMatrix, TABLE_FED_TEMPLATES, TEMPLATE_AUTHORING_METADATA, TEMPLATE_GUIDES, TEMPLATE_INPUT_DESCRIPTORS, TEMPLATE_METADATA, TREE_FENCE_LANGS, type TemplateAuthoringMetadata, type TemplateAuthoringRole, TemplateBlock, type TemplateBodyPolicy, type TemplateCatalogEntry, TemplateContext, type TemplateGuide, type TemplateInputDescriptor, type TemplateMediaOwnership, type TemplateMetadata, type TemplateParamFinding, Theme, ThemeColorScheme, type Tree, type TreeDetection, type TreeItem, type TreeNode, type UnconsumedMediaBehavior, type ValidateOptions, type VideoDurationLookup, ViewportConfig, ViewportOrientation, accentForViewport, adjustY, anchorPoint, applyNarrationTiming, applyRenderStyleToLayers, applyVideoDurations, arrangeAsciiDiagram, asciiCellToCanvas, asciiDiagramFromBlocks, asciiDiagramFromTemplateData, asciiDiagramToTemplateData, asciiTimelineToTemplateData, authoringTricks, autoTemplatePreservesContent, bigText, blockBuildSteps, blockVideoLength, bottomFeature, buildChartData, buildCursorAtTime, buildDashboardCellChrome, buildPageCss, buildPageCssVars, buildPreviewDoc, buildRegistry, buildSourceText, buildTargetState, canvasToAsciiCell, cardsBlock, chooseDashboardLayout, clipEndpoints, clipPoint, coerceTemplateParams, collectVideoDurationSources, comparisonBar, composeDashboardLayers, computeDiagramLayout, computeDrawingLayout, computeLayoutLayers, conceptBuildStepTexts, connectorPath, contentBlock, countBlocks, countUpSpecFor, coverBlock, coverRepeatsLeadingBlock, createAccentLayers, cssFilterForTreatment, cycleBlock, dashboardCanvasFill, dashboardCellAccent, dataSidecarPrefix, dataTable, dateEvent, definitionCard, deriveTemplateInputs, desiredCellZoom, detectAsciiDiagram, detectAsciiTimeline, detectPromotableBodyAnnotation, detectTree, diagramBlock, docToMarkdown, documentTitleFromFileName, drawingBlock, expandCoverBlock, expandDocBlocks, expandPersistentLayers, extractBlockquote, extractBlockquoteText, extractBodyPlainText, extractConceptItems, extractEmbeddedVideos, extractFirstEmbeddedVideo, extractFirstImage, extractHostedVideos, extractImages, extractListItems, extractRichListItems, extractTableData, extractTableFromContents, factCard, fallbackBlockLayers, findFirstList, findFirstTable, fitBigTextSize, fitDiagramLabel, flattenBlocks, flattenRenderableBlocks, formatCountUp, formatCountValue, frostedBigTextLayout, fullBleedQuote, funnelBlock, getAccentLayout, getAnimationProgress, getAnimationStyle, getAvailableTemplates, getBlockBodyText, getBlockDepth, getBlockMediaLayoutPolicy, getDashboardLayoutSummaries, getDefaultAnimation, getDefaultAnimationDuration, getMotionProfile, getOverlayOpacity, getPersistentLayersFromTheme, getPinnedBlockMeta, getTemplateHint, getThemeFont, getTransitionClass, guideText, hasBlockBuilds, hasTemplate, hubBlock, imageWithCaption, isAsciiDiagramFence, isAsciiTimelineFence, isContainerTemplate, isDataFence, isDataFilePath, isEligibleAsciiFenceLang, isEligibleAsciiTimelineFenceLang, isEligibleTreeFenceLang, isExplicitDiagramLang, isExplicitTimelineLang, isExplicitTreeLang, isFigureText, isGeometryBoundTemplate, isMaterializedMediaNode, isMediaAnnotationName, isPictureFence, isPictureParagraph, isRepairableDiagram, isShapeName, isSpatialPictureFence, isTemplatedPageBlock, isTreeFence, isWrappedFlowTimelineSource, layersBlock, layoutBlock, layoutCapacity, leftFeature, lineStyleDasharray, lintTemplateParams, listBlock, listDashboardLayouts, mapBlock, markdownBlockSeparatorLines, markdownShapeExample, markdownShapeGuide, markdownShapeSummary, markdownToDoc, markerPath, materializeBlockLayers, materializeDashboard, materializeFlashcards, matrixBlock, mediaOnly, motionDelay, motionEntrance, motionStateTransform, nearestSnapPoint, normalizeChartTable, normalizeDashboardZoom, normalizeShapeKind, pageStyleDataAttributes, parseAsciiDiagram, parseAsciiTimeline, parseAsciiTimelineWithStats, parseDataFence, parseStandaloneAnnotation, parseStatNumber, parseTree, parseWrappedFlowTimeline, parseYamlSubset, photoGrid, planContentBuilds, previewBlockTemplate, processBlock, pullQuote, pyramidBlock, quoteBlock, readCustomTemplatesFromFrontmatter, readCustomThemesFromFrontmatter, readDashboardLayoutsFromFrontmatter, readMatrixItems, 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, splitConceptItem, splitStatItem, statHighlight, statsBlock, stripBlockBackdropLayer, stripsBlockBackdrop, templateCatalog, templateRegistry, themeWantsAmbientMotion, themedEntrance, themedFontSize, themedImageTreatment, themedScrim, themedSurfaceGradient, timelineBlock, titleBlock, topFeature, transformOriginFor, transposeCells, treeBlock, treeFromMarkdownList, treeFromTemplateData, treeToTemplateData, twoColumn, validateDashboardLayoutDefinition, validateMarkdownDoc, validateMarkdownSource, vennBlock, vennOverlapIndex, videoPullQuote, videoWithCaption, wordRevealDelay, wrapWithPersistentLayers, writeCustomTemplatesToFrontmatter, writeCustomThemesToFrontmatter, writeDashboardLayoutsToFrontmatter };
package/dist/doc/index.js CHANGED
@@ -77,9 +77,9 @@ import {
77
77
  validateMarkdownSource,
78
78
  wordRevealDelay,
79
79
  writeDashboardLayoutsToFrontmatter
80
- } from "../chunk-FYP7GNER.js";
80
+ } from "../chunk-XY5Z23C4.js";
81
81
  import "../chunk-HKHOFTGM.js";
82
- import "../chunk-OJCAKUHW.js";
82
+ import "../chunk-33CAD575.js";
83
83
  import {
84
84
  AUTHORING_TRICKS,
85
85
  BASE_INPUT_DESCRIPTORS,
@@ -103,9 +103,11 @@ import {
103
103
  accentForViewport,
104
104
  adjustY,
105
105
  applyRenderStyleToLayers,
106
+ applyVideoDurations,
106
107
  authoringTricks,
107
108
  bigText,
108
109
  blockBuildSteps,
110
+ blockVideoLength,
109
111
  bottomFeature,
110
112
  buildChartData,
111
113
  buildCursorAtTime,
@@ -114,6 +116,7 @@ import {
114
116
  buildTargetState,
115
117
  cardsBlock,
116
118
  coerceTemplateParams,
119
+ collectVideoDurationSources,
117
120
  comparisonBar,
118
121
  computeDrawingLayout,
119
122
  computeLayoutLayers,
@@ -228,7 +231,7 @@ import {
228
231
  wrapWithPersistentLayers,
229
232
  writeCustomTemplatesToFrontmatter,
230
233
  writeCustomThemesToFrontmatter
231
- } from "../chunk-4HQ7QZKB.js";
234
+ } from "../chunk-BG2OYBGC.js";
232
235
  import {
233
236
  ASCII_CHAR_H,
234
237
  ASCII_CHAR_W,
@@ -273,6 +276,7 @@ import {
273
276
  isMediaAnnotationName,
274
277
  isPictureFence,
275
278
  isPictureParagraph,
279
+ isSpatialPictureFence,
276
280
  isTreeFence,
277
281
  isWrappedFlowTimelineSource,
278
282
  markdownBlockSeparatorLines,
@@ -290,7 +294,7 @@ import {
290
294
  treeFromTemplateData,
291
295
  treeToTemplateData,
292
296
  vennOverlapIndex
293
- } from "../chunk-OFE5RZWW.js";
297
+ } from "../chunk-MA7XUCSQ.js";
294
298
  import "../chunk-SVN7T6BK.js";
295
299
  import {
296
300
  PATH_SHAPE_KINDS,
@@ -306,7 +310,7 @@ import {
306
310
  snapPoints
307
311
  } from "../chunk-FUBMT6SJ.js";
308
312
  import "../chunk-7ZAAICW4.js";
309
- import "../chunk-2SRF5III.js";
313
+ import "../chunk-BVL3F64S.js";
310
314
  import {
311
315
  DEFAULT_THEME,
312
316
  FRONTMATTER_CUSTOM_TEMPLATES_KEY,
@@ -323,9 +327,10 @@ import {
323
327
  resolveTheme,
324
328
  scaledFontSize2 as scaledFontSize
325
329
  } from "../chunk-JNUNNQ74.js";
326
- import "../chunk-JSGIWW35.js";
327
- import "../chunk-L7QZORLB.js";
328
- import "../chunk-DDJHIZED.js";
330
+ import "../chunk-4R3YZTPX.js";
331
+ import "../chunk-MTIR5PWF.js";
332
+ import "../chunk-37RLFDIT.js";
333
+ import "../chunk-NBDF6SQ5.js";
329
334
  import {
330
335
  CONTAINER_TEMPLATES,
331
336
  TABLE_FED_TEMPLATES,
@@ -392,6 +397,7 @@ export {
392
397
  anchorPoint,
393
398
  applyNarrationTiming,
394
399
  applyRenderStyleToLayers,
400
+ applyVideoDurations,
395
401
  arrangeAsciiDiagram,
396
402
  asciiCellToCanvas,
397
403
  asciiDiagramFromBlocks,
@@ -402,6 +408,7 @@ export {
402
408
  autoTemplatePreservesContent,
403
409
  bigText,
404
410
  blockBuildSteps,
411
+ blockVideoLength,
405
412
  bottomFeature,
406
413
  buildChartData,
407
414
  buildCursorAtTime,
@@ -418,6 +425,7 @@ export {
418
425
  clipEndpoints,
419
426
  clipPoint,
420
427
  coerceTemplateParams,
428
+ collectVideoDurationSources,
421
429
  comparisonBar,
422
430
  composeDashboardLayers,
423
431
  computeDiagramLayout,
@@ -530,6 +538,7 @@ export {
530
538
  isPictureParagraph,
531
539
  isRepairableDiagram,
532
540
  isShapeName,
541
+ isSpatialPictureFence,
533
542
  isTemplateBlock,
534
543
  isTemplatedPageBlock,
535
544
  isTreeFence,
@@ -1,4 +1,4 @@
1
- import { bN as Theme } from '../Doc-C_Sh49ot.js';
1
+ import { bN as Theme } from '../Doc-DLfTam0R.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 { t as ColorScheme, A as AccentImage, bE as TemplateBlock } from '../Doc-C_Sh49ot.js';
3
+ import { t as ColorScheme, A as AccentImage, bE as TemplateBlock } from '../Doc-DLfTam0R.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-Sqw3Tw-R.js';
2
- export { E as EditorLayerMeta, I as ImageEditCanvas, c as ImageEditLayerKind, d as ImageEditMeta } from '../ImageEditDoc-Sqw3Tw-R.js';
1
+ import { a as ImageEditDoc, b as ImageEditLayer } from '../ImageEditDoc-DdSHb6sj.js';
2
+ export { E as EditorLayerMeta, I as ImageEditCanvas, c as ImageEditLayerKind, d as ImageEditMeta } from '../ImageEditDoc-DdSHb6sj.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-C_Sh49ot.js';
5
+ import '../Doc-DLfTam0R.js';
6
6
  import '../types-Zk8qYuaT.js';
7
7
 
8
8
  /**