@bendyline/squisq 2.11.16 → 2.11.17

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 (36) hide show
  1. package/dist/{Doc-Bd2kdzuy.d.ts → Doc-CXx1WL8G.d.ts} +27 -2
  2. package/dist/{ImageEditDoc-C3HOltpW.d.ts → ImageEditDoc-BVLXI-Zd.d.ts} +1 -1
  3. package/dist/{chunk-NC6LD6D3.js → chunk-54RU7TBZ.js} +34 -7
  4. package/dist/{chunk-C3NAY5YP.js → chunk-A5QJJZ5S.js} +8 -5
  5. package/dist/{chunk-HVJ6VFDX.js → chunk-GB7OFYUK.js} +4 -0
  6. package/dist/{chunk-IFJPPI63.js → chunk-KNC4ZBQC.js} +5 -5
  7. package/dist/{chunk-WMXQDP2C.js → chunk-L7IIFWWW.js} +109 -14
  8. package/dist/{chunk-ANH2OZ2M.js → chunk-LJZHC6GN.js} +146 -11
  9. package/dist/{chunk-IRVXZUVU.js → chunk-MY46W5O5.js} +2 -2
  10. package/dist/{chunk-GDHXT5Q7.js → chunk-PGWYC3S2.js} +2 -2
  11. package/dist/{chunk-5W7F46OO.js → chunk-PNXBDMNS.js} +1 -1
  12. package/dist/{chunk-X7BNDUNI.js → chunk-Q6ELOAOQ.js} +383 -1
  13. package/dist/{chunk-TMOHAFYE.js → chunk-WSFXV5BT.js} +17 -0
  14. package/dist/doc/index.d.ts +35 -7
  15. package/dist/doc/index.js +11 -7
  16. package/dist/fence/index.d.ts +1 -1
  17. package/dist/generate/index.d.ts +1 -1
  18. package/dist/imageEdit/index.d.ts +3 -3
  19. package/dist/index.d.ts +6 -6
  20. package/dist/index.js +35 -11
  21. package/dist/jsonForm/index.d.ts +1 -1
  22. package/dist/jsonForm/index.js +1 -1
  23. package/dist/markdown/index.d.ts +170 -4
  24. package/dist/markdown/index.js +24 -4
  25. package/dist/{materializePageSection-FRv9whYy.d.ts → materializePageSection-BX1uOAlN.d.ts} +6 -1
  26. package/dist/mediaEdit/index.d.ts +2 -2
  27. package/dist/narration/index.d.ts +1 -1
  28. package/dist/narration/index.js +6 -6
  29. package/dist/recommend/index.js +2 -2
  30. package/dist/schemas/index.d.ts +4 -4
  31. package/dist/schemas/index.js +1 -1
  32. package/dist/{themeLibrary-BbF3EKWM.d.ts → themeLibrary-Bnq_x-db.d.ts} +1 -1
  33. package/dist/timing/index.d.ts +1 -1
  34. package/dist/transform/index.d.ts +2 -2
  35. package/dist/transform/index.js +6 -6
  36. package/package.json +1 -1
package/dist/index.js CHANGED
@@ -27,7 +27,7 @@ import {
27
27
  recordSlideShown,
28
28
  traceWordPosAt,
29
29
  vadStep
30
- } from "./chunk-IRVXZUVU.js";
30
+ } from "./chunk-MY46W5O5.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-IFJPPI63.js";
68
+ } from "./chunk-KNC4ZBQC.js";
69
69
  import {
70
70
  extractContent,
71
71
  mapElementToBlock,
@@ -154,7 +154,7 @@ import {
154
154
  pipStyleVars,
155
155
  serializeTheme,
156
156
  validateDocSchema
157
- } from "./chunk-HVJ6VFDX.js";
157
+ } from "./chunk-GB7OFYUK.js";
158
158
  import {
159
159
  calculateBearing,
160
160
  decodeGeohash,
@@ -246,7 +246,7 @@ import {
246
246
  validateMarkdownSource,
247
247
  wordRevealDelay,
248
248
  writeDashboardLayoutsToFrontmatter
249
- } from "./chunk-NC6LD6D3.js";
249
+ } from "./chunk-54RU7TBZ.js";
250
250
  import {
251
251
  buildNarrationScript,
252
252
  buildNarrationTimingJson,
@@ -257,7 +257,7 @@ import {
257
257
  wordIndexAtChar,
258
258
  wordIndexAtTime,
259
259
  wordPosAtExpectedSyllables
260
- } from "./chunk-5W7F46OO.js";
260
+ } from "./chunk-PNXBDMNS.js";
261
261
  import {
262
262
  ASCII_CHAR_H,
263
263
  ASCII_CHAR_W,
@@ -309,6 +309,7 @@ import {
309
309
  extractEmbeddedVideos,
310
310
  extractFirstEmbeddedVideo,
311
311
  extractFirstImage,
312
+ extractHostedVideos,
312
313
  extractImages,
313
314
  extractListItems,
314
315
  extractRichListItems,
@@ -341,6 +342,7 @@ import {
341
342
  imageWithCaption,
342
343
  isDataFence,
343
344
  isGeometryBoundTemplate,
345
+ isMaterializedMediaNode,
344
346
  isShapeName,
345
347
  layoutBlock,
346
348
  leftFeature,
@@ -389,7 +391,7 @@ import {
389
391
  wrapWithPersistentLayers,
390
392
  writeCustomTemplatesToFrontmatter,
391
393
  writeCustomThemesToFrontmatter
392
- } from "./chunk-WMXQDP2C.js";
394
+ } from "./chunk-L7IIFWWW.js";
393
395
  import {
394
396
  ASCII_DIAGRAM_FENCE_LANGS,
395
397
  ASCII_TIMELINE_FENCE_LANGS,
@@ -414,7 +416,7 @@ import {
414
416
  parseWrappedFlowTimeline,
415
417
  profileBlockContents,
416
418
  recommendTemplatesForBlock
417
- } from "./chunk-C3NAY5YP.js";
419
+ } from "./chunk-A5QJJZ5S.js";
418
420
  import {
419
421
  PATH_SHAPE_KINDS,
420
422
  anchorPoint,
@@ -550,7 +552,7 @@ import {
550
552
  stringifyMarkdown,
551
553
  unwrapMarkdownSource,
552
554
  wrapMarkdownSource
553
- } from "./chunk-ANH2OZ2M.js";
555
+ } from "./chunk-LJZHC6GN.js";
554
556
  import {
555
557
  DEFAULT_MARKDOWN_SAFETY_LIMITS,
556
558
  MarkdownLimitError,
@@ -562,7 +564,7 @@ import {
562
564
  resolveMarkdownSafetyLimits,
563
565
  serializePandocAttributes,
564
566
  toMdast
565
- } from "./chunk-GDHXT5Q7.js";
567
+ } from "./chunk-PGWYC3S2.js";
566
568
  import {
567
569
  BLOCK_META_KEY_DESCRIPTORS,
568
570
  CONTAINER_TEMPLATES,
@@ -580,26 +582,36 @@ import {
580
582
  splitKeyValueToken,
581
583
  tokenizeAttrTokens,
582
584
  unquoteAttrValue
583
- } from "./chunk-TMOHAFYE.js";
585
+ } from "./chunk-WSFXV5BT.js";
584
586
  import {
587
+ VIDEO_EMBED_IFRAME_ALLOW,
588
+ VIDEO_EMBED_PROVIDERS,
585
589
  countNodes,
586
590
  createDocument,
587
591
  extractPlainText,
592
+ findBlockVideoEmbed,
588
593
  findNodesByType,
589
594
  formatBlockScalar,
590
595
  formatFrontmatterValue,
591
596
  formatFrontmatterYaml,
592
597
  getChildren,
593
598
  inferDocumentTitle,
599
+ isVideoEmbedUrl,
600
+ mediaKindForUrl,
594
601
  parseFrontmatter,
595
602
  parseHtmlToNodes,
603
+ parseVideoEmbedInput,
604
+ parseVideoEmbedUrl,
605
+ parseVideoStartTime,
596
606
  plainTextFromInlineHtml,
597
607
  readFrontmatterThemeId,
598
608
  setFrontmatterValues,
599
609
  splitFrontmatterBlock,
600
610
  stringifyHtmlNodes,
611
+ videoEmbedFromIframe,
612
+ videoEmbedIframeAttributes,
601
613
  walkMarkdownTree
602
- } from "./chunk-X7BNDUNI.js";
614
+ } from "./chunk-Q6ELOAOQ.js";
603
615
  import {
604
616
  ICONS,
605
617
  canonicalIconToken,
@@ -749,6 +761,8 @@ export {
749
761
  TREE_FENCE_LANGS,
750
762
  VERSIONS_PREFIX,
751
763
  VERSION_TIMESTAMP_PATTERN,
764
+ VIDEO_EMBED_IFRAME_ALLOW,
765
+ VIDEO_EMBED_PROVIDERS,
752
766
  VIEWPORT_PRESETS,
753
767
  accentForViewport,
754
768
  accentToColorScheme,
@@ -888,6 +902,7 @@ export {
888
902
  extractFirstEmbeddedVideo,
889
903
  extractFirstImage,
890
904
  extractFrameFeatures,
905
+ extractHostedVideos,
891
906
  extractImages,
892
907
  extractKeywords,
893
908
  extractListItems,
@@ -900,6 +915,7 @@ export {
900
915
  featureStep,
901
916
  fenceRendererLangs,
902
917
  fetchResourceBytes,
918
+ findBlockVideoEmbed,
903
919
  findDocumentPath,
904
920
  findFirstList,
905
921
  findFirstTable,
@@ -987,6 +1003,7 @@ export {
987
1003
  isExplicitTreeLang,
988
1004
  isGeometryBoundTemplate,
989
1005
  isHex,
1006
+ isMaterializedMediaNode,
990
1007
  isMotionProfileName,
991
1008
  isPersistentLayerTemplate,
992
1009
  isRepairableDiagram,
@@ -997,6 +1014,7 @@ export {
997
1014
  isTemplatedPageBlock,
998
1015
  isTransitionType,
999
1016
  isTreeFence,
1017
+ isVideoEmbedUrl,
1000
1018
  isWrappedFlowTimelineSource,
1001
1019
  layoutBlock,
1002
1020
  layoutCapacity,
@@ -1025,6 +1043,7 @@ export {
1025
1043
  materializePageSection,
1026
1044
  materializePageSections,
1027
1045
  mayBeAnimatedImage,
1046
+ mediaKindForUrl,
1028
1047
  motionDelay,
1029
1048
  motionEntrance,
1030
1049
  motionStateTransform,
@@ -1059,6 +1078,9 @@ export {
1059
1078
  parseTree,
1060
1079
  parseVersionPath,
1061
1080
  parseVersionTimestamp,
1081
+ parseVideoEmbedInput,
1082
+ parseVideoEmbedUrl,
1083
+ parseVideoStartTime,
1062
1084
  parseWrappedFlowTimeline,
1063
1085
  parseYamlSubset,
1064
1086
  photoGrid,
@@ -1196,6 +1218,8 @@ export {
1196
1218
  validateMarkdownDoc,
1197
1219
  validateMarkdownSource,
1198
1220
  validateTheme,
1221
+ videoEmbedFromIframe,
1222
+ videoEmbedIframeAttributes,
1199
1223
  videoPullQuote,
1200
1224
  videoWithCaption,
1201
1225
  walkMarkdownTree,
@@ -1,4 +1,4 @@
1
- import { bw as Theme, bm as SurfaceScheme } from '../Doc-Bd2kdzuy.js';
1
+ import { bw as Theme, bm as SurfaceScheme } from '../Doc-CXx1WL8G.js';
2
2
  import '../types-C6VvDDL2.js';
3
3
 
4
4
  /**
@@ -16,7 +16,7 @@ import {
16
16
  setByPointer,
17
17
  toPointer
18
18
  } from "../chunk-7WN7DDMI.js";
19
- import "../chunk-HVJ6VFDX.js";
19
+ import "../chunk-GB7OFYUK.js";
20
20
  import "../chunk-2SRF5III.js";
21
21
  import "../chunk-PFH3WV6J.js";
22
22
  import "../chunk-JSGIWW35.js";
@@ -1,5 +1,5 @@
1
- import { $ as ParseOptions, n as MarkdownDocument, a0 as StringifyOptions, H as HeadingAttributes, e as HtmlNode, L as MarkdownNode } from '../types-C6VvDDL2.js';
2
- export { D as DEFAULT_MARKDOWN_SAFETY_LIMITS, b as HeadingTemplateAnnotation, c as HtmlComment, d as HtmlElement, 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, 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, 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, a6 as assertMarkdownDocumentWithinLimits, a7 as assertMarkdownSourceWithinLimits, ac as resolveMarkdownSafetyLimits } from '../types-C6VvDDL2.js';
1
+ import { $ as ParseOptions, n as MarkdownDocument, a0 as StringifyOptions, H as HeadingAttributes, e as HtmlNode, M as MarkdownBlockNode, d as HtmlElement, L as MarkdownNode } from '../types-C6VvDDL2.js';
2
+ export { D as DEFAULT_MARKDOWN_SAFETY_LIMITS, b as HeadingTemplateAnnotation, c as HtmlComment, f as HtmlText, g as MarkdownBlockquote, h as MarkdownBreak, i as MarkdownCodeBlock, j as MarkdownContainerDirective, k as MarkdownDefinitionDescription, l as MarkdownDefinitionList, m as MarkdownDefinitionTerm, 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, 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, a6 as assertMarkdownDocumentWithinLimits, a7 as assertMarkdownSourceWithinLimits, ac as resolveMarkdownSafetyLimits } from '../types-C6VvDDL2.js';
3
3
  export { B as BLOCK_META_KEY_DESCRIPTORS, a as BlockMetaKeyDescriptor, K as KNOWN_BLOCK_META_KEYS, b as KnownBlockMetaKey, p as parseTimeSeconds } from '../annotationCoercion-BgL52343.js';
4
4
 
5
5
  /**
@@ -296,6 +296,147 @@ declare function sanitizeUrl(url: string | null | undefined, kind?: UrlKind, opt
296
296
  */
297
297
  declare function sanitizeHtmlNodes(nodes: HtmlNode[]): HtmlNode[];
298
298
 
299
+ /**
300
+ * Hosted-video embeds (YouTube, Vimeo, Loom, Dailymotion, Wistia).
301
+ *
302
+ * The authored form is a paragraph that is ONLY a link, or a bare URL, to a
303
+ * video page:
304
+ *
305
+ * ```markdown
306
+ * [Launch keynote](https://www.youtube.com/watch?v=dQw4w9WgXcQ)
307
+ *
308
+ * https://vimeo.com/76979871
309
+ * ```
310
+ *
311
+ * GitHub, Notion and Medium all follow this convention. It degrades to a working
312
+ * link in every plain markdown renderer and in every document exporter
313
+ * (DOCX/PDF/EPUB), and renderers that know the convention swap in the
314
+ * provider's player. A link inside prose stays a link: only a paragraph made of
315
+ * nothing else is an embed. An `<iframe>` embed snippet copied from a provider's
316
+ * Share → Embed dialog is recognized too ({@link findBlockVideoEmbed} on an
317
+ * `htmlBlock`, {@link parseVideoEmbedInput} for pasted text).
318
+ *
319
+ * The iframe `src` is ALWAYS rebuilt from validated parts — provider, an id
320
+ * matched against the provider's id grammar, a whole-second start offset — on a
321
+ * fixed provider origin. An author's URL never reaches an iframe, which is what
322
+ * lets the HTML sanitizer admit these iframes while it drops every other one.
323
+ */
324
+
325
+ type VideoEmbedProviderId = 'youtube' | 'vimeo' | 'loom' | 'dailymotion' | 'wistia';
326
+ /** Display facts about a supported provider, for pickers and help text. */
327
+ interface VideoEmbedProviderInfo {
328
+ id: VideoEmbedProviderId;
329
+ /** Human-readable name, e.g. `YouTube`. */
330
+ name: string;
331
+ /** A representative page URL, for placeholder and help text. */
332
+ example: string;
333
+ }
334
+ /** The supported providers, in the order UI should list them. */
335
+ declare const VIDEO_EMBED_PROVIDERS: readonly VideoEmbedProviderInfo[];
336
+ /** A recognized hosted video, normalized. */
337
+ interface VideoEmbed {
338
+ provider: VideoEmbedProviderId;
339
+ /** Human-readable provider name, e.g. `YouTube`. */
340
+ providerName: string;
341
+ /**
342
+ * The provider's id for what plays: a video id, or — for a YouTube
343
+ * playlist link with no video — the playlist id.
344
+ */
345
+ id: string;
346
+ /** YouTube playlist the video plays within, when the URL named one. */
347
+ playlistId?: string;
348
+ /** The player URL for an `<iframe src>`. Rebuilt from validated parts. */
349
+ embedUrl: string;
350
+ /**
351
+ * The canonical page URL: what a markdown link should point at. Tracking
352
+ * parameters (`si=`, `feature=`, `pp=` …) are dropped; the start offset and
353
+ * playlist are kept. An embed-only URL (`/embed/<id>`) maps back to the
354
+ * watch page, so a pasted iframe still degrades to a link a reader can open.
355
+ */
356
+ watchUrl: string;
357
+ /** Start offset in whole seconds, when the URL carried one. */
358
+ startSeconds?: number;
359
+ /**
360
+ * A still poster image, when the provider serves one at a predictable URL
361
+ * with no API call (YouTube, Dailymotion). Remote — callers that must stay
362
+ * offline should not fetch it.
363
+ */
364
+ thumbnailUrl?: string;
365
+ /** Frame width ÷ height: 16/9, or 9/16 for YouTube Shorts. */
366
+ aspectRatio: number;
367
+ }
368
+ /** A block that should render as a hosted-video player. */
369
+ interface BlockVideoEmbed {
370
+ embed: VideoEmbed;
371
+ /**
372
+ * The author's label for the video — the link text — or null when the
373
+ * paragraph is a bare URL. For an `<iframe>` block it is the iframe's
374
+ * `title`, unless that is a provider's generic "… video player" title.
375
+ */
376
+ title: string | null;
377
+ /** How the block was written. */
378
+ form: 'link' | 'url' | 'iframe';
379
+ }
380
+ /**
381
+ * A start offset as providers write it — `90`, `90s`, `1m30s`, `1h2m3s`,
382
+ * `1:30`, `1:02:03` — in whole seconds; undefined when absent, zero or
383
+ * unreadable.
384
+ */
385
+ declare function parseVideoStartTime(raw: string | null | undefined): number | undefined;
386
+ /**
387
+ * Recognize a hosted-video page or player URL. Accepts the forms people paste:
388
+ * scheme-less (`youtu.be/…`), protocol-relative (`//player.vimeo.com/…`), the
389
+ * `<…>` autolink form, and markdown-escaped destinations. Returns null for
390
+ * anything that is not a playable video on a supported provider — a channel,
391
+ * a search page, a malformed id.
392
+ */
393
+ declare function parseVideoEmbedUrl(input: string | null | undefined): VideoEmbed | null;
394
+ /** Whether `input` is a hosted-video URL {@link parseVideoEmbedUrl} recognizes. */
395
+ declare function isVideoEmbedUrl(input: string | null | undefined): boolean;
396
+ /** The value a player iframe's `allow` attribute carries. */
397
+ declare const VIDEO_EMBED_IFRAME_ALLOW = "accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen";
398
+ /**
399
+ * The complete attribute set for a player `<iframe>` — the ONE definition
400
+ * every renderer and exporter emits, so a sanitized iframe and a rendered link
401
+ * paragraph produce the same element. Attribute names are HTML (lowercase).
402
+ *
403
+ * `referrerpolicy` matters: YouTube refuses to play ("Error 153") when an
404
+ * embed request carries no referrer.
405
+ */
406
+ declare function videoEmbedIframeAttributes(embed: VideoEmbed, title?: string | null): Record<string, string>;
407
+ /**
408
+ * Recognize a provider iframe element (the sanitizer's entry point). Null when
409
+ * its `src` is not a supported video.
410
+ */
411
+ declare function videoEmbedFromIframe(element: HtmlElement): {
412
+ embed: VideoEmbed;
413
+ title: string | null;
414
+ } | null;
415
+ /**
416
+ * What a person pasted or typed where a video is expected: a page URL, or a
417
+ * provider's `<iframe>` embed code. Null when it is neither.
418
+ */
419
+ declare function parseVideoEmbedInput(input: string | null | undefined): {
420
+ embed: VideoEmbed;
421
+ title: string | null;
422
+ } | null;
423
+ /**
424
+ * The hosted video a block stands for, or null:
425
+ *
426
+ * - a paragraph whose only content is one link to a video page
427
+ * (`[title](url)`; `title` is the link text unless that is itself a URL);
428
+ * - a paragraph whose whole text is one video URL (a bare URL, which GFM
429
+ * autolinks — read from the text so an autolink that stopped short of a
430
+ * trailing `_` in the id is still recognized);
431
+ * - an HTML block holding a single provider `<iframe>` (pasted embed code).
432
+ *
433
+ * A link with surrounding prose is not an embed. Renderers ask this of
434
+ * TOP-LEVEL blocks only: a video link in a list item or blockquote is a list
435
+ * of links, not a stack of players. (Explicit `<iframe>` code is honored
436
+ * wherever it appears.)
437
+ */
438
+ declare function findBlockVideoEmbed(node: MarkdownBlockNode): BlockVideoEmbed | null;
439
+
299
440
  /**
300
441
  * Caller-owned policy for resources referenced by a document.
301
442
  *
@@ -633,11 +774,20 @@ declare function rewriteMarkdownReferences(source: string, options?: MarkdownRef
633
774
  interface DocfxMarkdownOptions {
634
775
  /** Image omission retains descriptive alt text. */
635
776
  images?: 'preserve' | 'omit';
777
+ /** Retain invalid or unsupported source metadata visibly without interpreting it. */
778
+ frontmatterAsCode?: boolean;
779
+ /** Resolve code transclusions and UID references without fetching in core. */
780
+ reference?: (kind: 'code' | 'xref', target: string, label: string) => string;
781
+ /** Preserve unsupported presentation markers as visible inline code. */
782
+ unknownDirectives?: 'error' | 'preserve';
783
+ /** Report malformed references retained verbatim as code in preservation mode. */
784
+ onPreservedReference?: (source: string) => void;
636
785
  }
637
786
  /** Convert presentational DocFX directives to portable Markdown without fetching.
638
787
  * Includes and code transclusions remain the source adapter's responsibility.
639
788
  * All zone variants are retained with their pivot labels. Code examples and
640
- * frontmatter remain untouched. Unsupported directives throw instead of losing text.
789
+ * frontmatter remain untouched by default. Hosts can preserve unsupported syntax
790
+ * and metadata visibly through the explicit preservation options.
641
791
  */
642
792
  declare function normalizeDocfxMarkdown(source: string, options?: DocfxMarkdownOptions): string;
643
793
 
@@ -650,4 +800,20 @@ declare function normalizeDocfxMarkdown(source: string, options?: DocfxMarkdownO
650
800
  */
651
801
  declare function condenseMarkdownSource(source: string): string;
652
802
 
653
- export { DEFAULT_INTERACTIVE_RESOURCE_POLICY, DEFAULT_RESOURCE_MAX_BYTES, DEFAULT_RESOURCE_TIMEOUT_MS, DEFAULT_WRAP_WIDTH, type DocfxMarkdownOptions, type FetchResourceBytesOptions, type FetchedResource, HeadingAttributes, HtmlNode, type HtmlPolicy, LOCAL_ONLY_RESOURCE_POLICY, MARKDOWN_SOURCE_TRANSFORMS, MarkdownDocument, MarkdownNode, type MarkdownReferenceOptions, type MarkdownSourceEdit, type MarkdownSourceTransform, type MarkdownSourceTransformId, type MarkdownSourceTransformOptions, type MarkdownSourceTransformResult, type MarkdownWrapState, ParseOptions, type ResourcePolicy, ResourcePolicyError, type SanitizeUrlOptions, StringifyOptions, type TrailingAnnotationMatch, type 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 };
803
+ /**
804
+ * What a markdown media reference points at. Image syntax is the only
805
+ * embedding markdown has, so documents written for a library that ships
806
+ * clips and recordings (knowledge catalogs, recorder output) reference them
807
+ * as `![A brass bell ringing](sounds/bell.mp3)` — and a renderer that drew
808
+ * every such reference as an `<img>` showed a broken picture.
809
+ *
810
+ * The decision is by file extension, ignoring any query string or fragment.
811
+ * `.webm` and `.mp4` are containers for either; like narration discovery
812
+ * (`audioMapping.ts`), they count as audio only under the `audio/` folder
813
+ * the recorder writes to, and as video everywhere else.
814
+ */
815
+ type MediaReferenceKind = 'video' | 'audio';
816
+ /** `'video'`, `'audio'`, or null for anything else (an image, a page, no extension). */
817
+ declare function mediaKindForUrl(url: string): MediaReferenceKind | null;
818
+
819
+ export { type BlockVideoEmbed, DEFAULT_INTERACTIVE_RESOURCE_POLICY, DEFAULT_RESOURCE_MAX_BYTES, DEFAULT_RESOURCE_TIMEOUT_MS, DEFAULT_WRAP_WIDTH, type DocfxMarkdownOptions, type FetchResourceBytesOptions, type FetchedResource, HeadingAttributes, HtmlElement, HtmlNode, type HtmlPolicy, LOCAL_ONLY_RESOURCE_POLICY, MARKDOWN_SOURCE_TRANSFORMS, MarkdownBlockNode, MarkdownDocument, MarkdownNode, type MarkdownReferenceOptions, type MarkdownSourceEdit, type MarkdownSourceTransform, type MarkdownSourceTransformId, type MarkdownSourceTransformOptions, type MarkdownSourceTransformResult, type MarkdownWrapState, type MediaReferenceKind, ParseOptions, type ResourcePolicy, ResourcePolicyError, type SanitizeUrlOptions, StringifyOptions, type TrailingAnnotationMatch, type UrlKind, VIDEO_EMBED_IFRAME_ALLOW, VIDEO_EMBED_PROVIDERS, type VideoEmbed, type VideoEmbedProviderId, type VideoEmbedProviderInfo, applyMarkdownSourceTransform, cleanupMarkdownSource, condenseMarkdownSource, countNodes, createDocument, detectMarkdownWrapState, extractPlainText, fetchResourceBytes, findBlockVideoEmbed, findNodesByType, formatBlockScalar, formatFrontmatterValue, formatFrontmatterYaml, fromMdast, getChildren, inferDocumentTitle, isResourceUrlAllowed, isVideoEmbedUrl, matchTrailingPandocAttr, matchTrailingTemplateAnnotation, mediaKindForUrl, needsQuoting, normalizeDocfxMarkdown, parseFrontmatter, parseHtmlToNodes, parseMarkdown, parsePandocAttrTokens, parseVideoEmbedInput, parseVideoEmbedUrl, parseVideoStartTime, plainTextFromInlineHtml, quoteAttrValue, readFrontmatterThemeId, rewriteMarkdownReferences, sanitizeHtmlNodes, sanitizeUrl, serializePandocAttributes, setFrontmatterValues, splitFrontmatterBlock, splitKeyValueToken, stringifyHtmlNodes, stringifyMarkdown, toMdast, tokenizeAttrTokens, unquoteAttrValue, unwrapMarkdownSource, videoEmbedFromIframe, videoEmbedIframeAttributes, walkMarkdownTree, wrapMarkdownSource };
@@ -17,7 +17,7 @@ import {
17
17
  stringifyMarkdown,
18
18
  unwrapMarkdownSource,
19
19
  wrapMarkdownSource
20
- } from "../chunk-ANH2OZ2M.js";
20
+ } from "../chunk-LJZHC6GN.js";
21
21
  import {
22
22
  DEFAULT_MARKDOWN_SAFETY_LIMITS,
23
23
  MarkdownLimitError,
@@ -29,7 +29,7 @@ import {
29
29
  resolveMarkdownSafetyLimits,
30
30
  serializePandocAttributes,
31
31
  toMdast
32
- } from "../chunk-GDHXT5Q7.js";
32
+ } from "../chunk-PGWYC3S2.js";
33
33
  import {
34
34
  BLOCK_META_KEY_DESCRIPTORS,
35
35
  KNOWN_BLOCK_META_KEYS,
@@ -43,26 +43,36 @@ import {
43
43
  splitKeyValueToken,
44
44
  tokenizeAttrTokens,
45
45
  unquoteAttrValue
46
- } from "../chunk-TMOHAFYE.js";
46
+ } from "../chunk-WSFXV5BT.js";
47
47
  import {
48
+ VIDEO_EMBED_IFRAME_ALLOW,
49
+ VIDEO_EMBED_PROVIDERS,
48
50
  countNodes,
49
51
  createDocument,
50
52
  extractPlainText,
53
+ findBlockVideoEmbed,
51
54
  findNodesByType,
52
55
  formatBlockScalar,
53
56
  formatFrontmatterValue,
54
57
  formatFrontmatterYaml,
55
58
  getChildren,
56
59
  inferDocumentTitle,
60
+ isVideoEmbedUrl,
61
+ mediaKindForUrl,
57
62
  parseFrontmatter,
58
63
  parseHtmlToNodes,
64
+ parseVideoEmbedInput,
65
+ parseVideoEmbedUrl,
66
+ parseVideoStartTime,
59
67
  plainTextFromInlineHtml,
60
68
  readFrontmatterThemeId,
61
69
  setFrontmatterValues,
62
70
  splitFrontmatterBlock,
63
71
  stringifyHtmlNodes,
72
+ videoEmbedFromIframe,
73
+ videoEmbedIframeAttributes,
64
74
  walkMarkdownTree
65
- } from "../chunk-X7BNDUNI.js";
75
+ } from "../chunk-Q6ELOAOQ.js";
66
76
  import "../chunk-7N4G32LG.js";
67
77
  import "../chunk-4VOD55SX.js";
68
78
  export {
@@ -77,6 +87,8 @@ export {
77
87
  MARKDOWN_SOURCE_TRANSFORMS,
78
88
  MarkdownLimitError,
79
89
  ResourcePolicyError,
90
+ VIDEO_EMBED_IFRAME_ALLOW,
91
+ VIDEO_EMBED_PROVIDERS,
80
92
  applyMarkdownSourceTransform,
81
93
  assertMarkdownDocumentWithinLimits,
82
94
  assertMarkdownSourceWithinLimits,
@@ -87,6 +99,7 @@ export {
87
99
  detectMarkdownWrapState,
88
100
  extractPlainText,
89
101
  fetchResourceBytes,
102
+ findBlockVideoEmbed,
90
103
  findNodesByType,
91
104
  formatBlockScalar,
92
105
  formatFrontmatterValue,
@@ -95,8 +108,10 @@ export {
95
108
  getChildren,
96
109
  inferDocumentTitle,
97
110
  isResourceUrlAllowed,
111
+ isVideoEmbedUrl,
98
112
  matchTrailingPandocAttr,
99
113
  matchTrailingTemplateAnnotation,
114
+ mediaKindForUrl,
100
115
  needsQuoting,
101
116
  normalizeDocfxMarkdown,
102
117
  parseFrontmatter,
@@ -104,6 +119,9 @@ export {
104
119
  parseMarkdown,
105
120
  parsePandocAttrTokens,
106
121
  parseTimeSeconds,
122
+ parseVideoEmbedInput,
123
+ parseVideoEmbedUrl,
124
+ parseVideoStartTime,
107
125
  plainTextFromInlineHtml,
108
126
  quoteAttrValue,
109
127
  readFrontmatterThemeId,
@@ -121,6 +139,8 @@ export {
121
139
  tokenizeAttrTokens,
122
140
  unquoteAttrValue,
123
141
  unwrapMarkdownSource,
142
+ videoEmbedFromIframe,
143
+ videoEmbedIframeAttributes,
124
144
  walkMarkdownTree,
125
145
  wrapMarkdownSource
126
146
  };
@@ -1,4 +1,4 @@
1
- import { k as Block, aT as PageSectionKind, aR as PageEmphasis, by as ThemeColorScheme, aP as PageBackground, bw as Theme, b$ as ViewportConfig, y as CustomTemplateDefinition, aW as PageVariant, bk as StartBlockConfig, Q as Doc, bz as ThemePageStyle } from './Doc-Bd2kdzuy.js';
1
+ import { k as Block, aT as PageSectionKind, aR as PageEmphasis, by as ThemeColorScheme, aP as PageBackground, bw as Theme, c0 as ViewportConfig, y as CustomTemplateDefinition, aW as PageVariant, bk as StartBlockConfig, Q as Doc, bz as ThemePageStyle } from './Doc-CXx1WL8G.js';
2
2
  import { M as MarkdownBlockNode } from './types-C6VvDDL2.js';
3
3
 
4
4
  /**
@@ -46,6 +46,11 @@ type PageMedia = {
46
46
  clipEnd?: number;
47
47
  credit?: string;
48
48
  license?: string;
49
+ } | {
50
+ /** A hosted video (YouTube, Vimeo, …) by its page URL; renderers play it. */
51
+ type: 'videoEmbed';
52
+ url: string;
53
+ title?: string;
49
54
  } | {
50
55
  type: 'canvas';
51
56
  spatial: PageSpatialKind;
@@ -1,5 +1,5 @@
1
- import { al as MediaCut, Q as Doc, aj as MediaClip, cv as MediaFxOpId, cw as MediaFxChain } from '../Doc-Bd2kdzuy.js';
2
- export { cx as MEDIA_EDIT_PARAMS, cy as MEDIA_FX_ORDER, cz as MEDIA_FX_SPECS, ak as MediaCrop, cA as MediaEditParamKey, cB as MediaEditParamValues, am as MediaEdits, cC as MediaFxOp, cD as formatMediaNumber, cE as hasRenderableFx, cF as mediaEditHtmlAttribute, cG as mediaEditValuesFromAttributes, cH as mediaEditValuesFromParams, cI as mediaRenderKey, cJ as normalizeMediaCrop, cK as normalizeMediaCuts, cL as parseMediaCrop, cM as parseMediaCuts, cN as parseMediaEdits, cO as parseMediaFx, cP as serializeMediaCrop, cQ as serializeMediaCuts, cR as serializeMediaEdits, cS as serializeMediaFx } from '../Doc-Bd2kdzuy.js';
1
+ import { al as MediaCut, Q as Doc, aj as MediaClip, cw as MediaFxOpId, cx as MediaFxChain } from '../Doc-CXx1WL8G.js';
2
+ export { cy as MEDIA_EDIT_PARAMS, cz as MEDIA_FX_ORDER, cA as MEDIA_FX_SPECS, ak as MediaCrop, cB as MediaEditParamKey, cC as MediaEditParamValues, am as MediaEdits, cD as MediaFxOp, cE as formatMediaNumber, cF as hasRenderableFx, cG as mediaEditHtmlAttribute, cH as mediaEditValuesFromAttributes, cI as mediaEditValuesFromParams, cJ as mediaRenderKey, cK as normalizeMediaCrop, cL as normalizeMediaCuts, cM as parseMediaCrop, cN as parseMediaCuts, cO as parseMediaEdits, cP as parseMediaFx, cQ as serializeMediaCrop, cR as serializeMediaCuts, cS as serializeMediaEdits, cT as serializeMediaFx } from '../Doc-CXx1WL8G.js';
3
3
  import '../types-C6VvDDL2.js';
4
4
 
5
5
  /**
@@ -1,4 +1,4 @@
1
- import { Q as Doc, f as AudioBookmark } from '../Doc-Bd2kdzuy.js';
1
+ import { Q as Doc, f as AudioBookmark } from '../Doc-CXx1WL8G.js';
2
2
  import '../types-C6VvDDL2.js';
3
3
 
4
4
  /**
@@ -27,7 +27,7 @@ import {
27
27
  recordSlideShown,
28
28
  traceWordPosAt,
29
29
  vadStep
30
- } from "../chunk-IRVXZUVU.js";
30
+ } from "../chunk-MY46W5O5.js";
31
31
  import "../chunk-NEWNNLWN.js";
32
32
  import {
33
33
  buildNarrationScript,
@@ -39,14 +39,14 @@ import {
39
39
  wordIndexAtChar,
40
40
  wordIndexAtTime,
41
41
  wordPosAtExpectedSyllables
42
- } from "../chunk-5W7F46OO.js";
43
- import "../chunk-WMXQDP2C.js";
44
- import "../chunk-C3NAY5YP.js";
42
+ } from "../chunk-PNXBDMNS.js";
43
+ import "../chunk-L7IIFWWW.js";
44
+ import "../chunk-A5QJJZ5S.js";
45
45
  import "../chunk-PUS54YU6.js";
46
46
  import "../chunk-PFH3WV6J.js";
47
47
  import "../chunk-L7QZORLB.js";
48
- import "../chunk-TMOHAFYE.js";
49
- import "../chunk-X7BNDUNI.js";
48
+ import "../chunk-WSFXV5BT.js";
49
+ import "../chunk-Q6ELOAOQ.js";
50
50
  import "../chunk-4VOD55SX.js";
51
51
  import "../chunk-GHOPHGOK.js";
52
52
  import "../chunk-XRW6P7IF.js";
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  profileBlockContents,
3
3
  recommendTemplatesForBlock
4
- } from "../chunk-C3NAY5YP.js";
5
- import "../chunk-X7BNDUNI.js";
4
+ } from "../chunk-A5QJJZ5S.js";
5
+ import "../chunk-Q6ELOAOQ.js";
6
6
  export {
7
7
  profileBlockContents,
8
8
  recommendTemplatesForBlock
@@ -1,10 +1,10 @@
1
1
  export { B as BoundingBox, C as Coordinates } from '../Types-sh2VRxfo.js';
2
- import { Q as Doc, bw as Theme, bz as ThemePageStyle, by as ThemeColorScheme, K as DeepPartial, bC as ThemeSeedColors, bx as ThemeColorPalette, _ as FontFamilyKind, Z as FontFamily } from '../Doc-Bd2kdzuy.js';
3
- export { A as AccentImage, a as AccentPosition, b as AmbientGradientConfig, c as Animation, d as AnimationType, e as AreaChartInput, f as AudioBookmark, g as AudioSegment, h as AudioTimingData, i as AudioTrack, B as BarChartInput, j as BigTextInput, k as Block, l as BlockConnection, m as BorderStyle, 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, L as DefinitionCardInput, M as DiagramBlockInput, N as DiagramEdgeAnchor, O as DiagramTemplateEdge, P as DiagramTemplateNode, 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, $ 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, bA as ThemeRegistry, bB as ThemeSchemaVersion, 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-Bd2kdzuy.js';
2
+ import { Q as Doc, bw as Theme, bz as ThemePageStyle, by as ThemeColorScheme, K as DeepPartial, bC as ThemeSeedColors, bx as ThemeColorPalette, _ as FontFamilyKind, Z as FontFamily } from '../Doc-CXx1WL8G.js';
3
+ export { A as AccentImage, a as AccentPosition, b as AmbientGradientConfig, c as Animation, d as AnimationType, e as AreaChartInput, f as AudioBookmark, g as AudioSegment, h as AudioTimingData, i as AudioTrack, B as BarChartInput, j as BigTextInput, k as Block, l as BlockConnection, m as BorderStyle, 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, L as DefinitionCardInput, M as DiagramBlockInput, N as DiagramEdgeAnchor, O as DiagramTemplateEdge, P as DiagramTemplateNode, 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, $ 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, bA as ThemeRegistry, bB as ThemeSchemaVersion, 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 VideoEmbedLayer, bU as VideoLayer, bV as VideoPipPosition, bW as VideoPipShape, bX as VideoPipSize, bY as VideoPlacement, bZ as VideoPresentation, b_ as VideoPullQuoteInput, b$ as VideoWithCaptionInput, c0 as ViewportConfig, c1 as ViewportOrientation, c2 as ViewportPreset, c3 as VignetteConfig, c4 as applySurface, c5 as calculateDuration, c6 as calculateFontScale, c7 as createTemplateContext, c8 as createTheme, c9 as createThemeRegistry, ca as getAspectRatioString, cb as getBlockAtTime, cc as getCaptionAtTime, cd as getDocPlaybackDuration, ce as getLayoutHints, cf as getSafeTextBounds, cg as getSegmentAtTime, ch as getTwoColumnPositions, ci as getViewport, cj as getViewportOrientation, ck as isCustomTemplateDefinition, cl as isMotionProfileName, cm as isPersistentLayerTemplate, cn as isTemplateBlock, co as layoutScaledFontSize, cp as readFrontmatterMotion, cq as resolveMediaSchedule, cr as resolveMotionForDoc, cs as resolveMotionProfile, ct as scaledFontSize, cu as scheduleMediaClip, cv as validateCustomTemplateDefinition } from '../Doc-CXx1WL8G.js';
4
4
  export { a as DEFAULT_TRANSITION_DURATION_SECONDS, a1 as TRANSITION_DIRECTIONS, a2 as TRANSITION_TYPES, a3 as Transition, a4 as TransitionDirection, a5 as TransitionType, a8 as isTransitionType, a9 as normalizeTransitionDirection, aa as normalizeTransitionType, ab as resolveBlockTransition, ad as resolveTransitionDuration } from '../types-C6VvDDL2.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-BbF3EKWM.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-Bnq_x-db.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-C3HOltpW.js';
7
+ export { E as EditorLayerMeta, I as ImageEditCanvas, a as ImageEditDoc, b as ImageEditLayer, c as ImageEditLayerKind, d as ImageEditMeta } from '../ImageEditDoc-BVLXI-Zd.js';
8
8
 
9
9
  /**
10
10
  * Runtime validation for the canonical {@link Doc} JSON shape.
@@ -13,7 +13,7 @@ import {
13
13
  pipStyleVars,
14
14
  serializeTheme,
15
15
  validateDocSchema
16
- } from "../chunk-HVJ6VFDX.js";
16
+ } from "../chunk-GB7OFYUK.js";
17
17
  import {
18
18
  defaultPageStyle,
19
19
  getDocPlaybackDuration,
@@ -1,4 +1,4 @@
1
- import { bw as Theme, bA as ThemeRegistry } from './Doc-Bd2kdzuy.js';
1
+ import { bw as Theme, bA as ThemeRegistry } from './Doc-CXx1WL8G.js';
2
2
 
3
3
  /**
4
4
  * Built-in Theme Library
@@ -1,4 +1,4 @@
1
- import { g as AudioSegment, h as AudioTimingData, n as CaptionTrack } from '../Doc-Bd2kdzuy.js';
1
+ import { g as AudioSegment, h as AudioTimingData, n as CaptionTrack } from '../Doc-CXx1WL8G.js';
2
2
  import '../types-C6VvDDL2.js';
3
3
 
4
4
  /**