@bendyline/squisq 2.13.2 → 2.13.4

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 (32) hide show
  1. package/dist/{Doc-CYTLtFEu.d.ts → Doc-DnRFE0EI.d.ts} +40 -2
  2. package/dist/{ImageEditDoc-DZ4k_O10.d.ts → ImageEditDoc-CadNz387.d.ts} +1 -1
  3. package/dist/{chunk-HE3HQZWU.js → chunk-6NWVLLMI.js} +104 -1
  4. package/dist/{chunk-56TW6HE6.js → chunk-BITSNRJH.js} +15 -10
  5. package/dist/{chunk-3A6YM375.js → chunk-D3JQMZUT.js} +8 -8
  6. package/dist/chunk-DOOUVVOM.js +78 -0
  7. package/dist/{chunk-FUQYQWQR.js → chunk-DRHJD6U4.js} +5 -5
  8. package/dist/{chunk-2GN67Q2T.js → chunk-FIPRGGXD.js} +1 -1
  9. package/dist/{chunk-YY3OQ3MI.js → chunk-J2NFT7GH.js} +475 -342
  10. package/dist/{chunk-7ZXCS3UU.js → chunk-JFJZ4NS6.js} +2 -2
  11. package/dist/{chunk-HGCIIXHP.js → chunk-POZCKPCO.js} +235 -4
  12. package/dist/doc/index.d.ts +134 -14
  13. package/dist/doc/index.js +17 -7
  14. package/dist/fence/index.d.ts +1 -1
  15. package/dist/generate/index.d.ts +1 -1
  16. package/dist/imageEdit/index.d.ts +3 -3
  17. package/dist/index.d.ts +5 -5
  18. package/dist/index.js +27 -17
  19. package/dist/jsonForm/index.d.ts +1 -1
  20. package/dist/markdown/index.js +11 -12
  21. package/dist/{materializePageSection-CDps_xUd.d.ts → materializePageSection-D84uA6Vk.d.ts} +1 -1
  22. package/dist/mediaEdit/index.d.ts +2 -2
  23. package/dist/narration/index.d.ts +1 -1
  24. package/dist/narration/index.js +5 -5
  25. package/dist/recommend/index.js +3 -2
  26. package/dist/schemas/index.d.ts +4 -4
  27. package/dist/{themeLibrary-CMm_jh3a.d.ts → themeLibrary-in0fafp4.d.ts} +1 -1
  28. package/dist/timing/index.d.ts +1 -1
  29. package/dist/transform/index.d.ts +2 -2
  30. package/dist/transform/index.js +6 -6
  31. package/package.json +1 -1
  32. package/dist/chunk-Y25EJEZN.js +0 -178
@@ -3,14 +3,14 @@ import {
3
3
  parseMarkdown,
4
4
  remarkWikiLinks,
5
5
  toMdast
6
- } from "./chunk-3A6YM375.js";
6
+ } from "./chunk-D3JQMZUT.js";
7
7
  import {
8
8
  formatFrontmatterYaml,
9
9
  getChildren,
10
10
  splitFrontmatterBlock,
11
11
  stringifyHtmlNodes,
12
12
  walkMarkdownTree
13
- } from "./chunk-HE3HQZWU.js";
13
+ } from "./chunk-6NWVLLMI.js";
14
14
 
15
15
  // src/markdown/stringify.ts
16
16
  import { unified } from "unified";
@@ -1,14 +1,22 @@
1
+ import {
2
+ mediaEditValuesFromAttributes,
3
+ mediaEditValuesFromParams,
4
+ parseMediaEdits
5
+ } from "./chunk-L7QZORLB.js";
1
6
  import {
2
7
  extractPlainText,
3
8
  findBlockVideoEmbed,
4
9
  findNodesByType,
5
10
  isSvgIslandLang,
6
11
  isVideoEmbedUrl,
12
+ matchTrailingTemplateAnnotation,
7
13
  mediaKindForUrl,
8
14
  parseTimeSeconds,
9
15
  sanitizeUrl,
16
+ splitKeyValueToken,
17
+ tokenizeAttrTokens,
10
18
  walkMarkdownTree
11
- } from "./chunk-HE3HQZWU.js";
19
+ } from "./chunk-6NWVLLMI.js";
12
20
 
13
21
  // src/doc/asciiDiagram/chars.ts
14
22
  function toCells(s) {
@@ -2864,8 +2872,199 @@ function matchNumberHighlight(text) {
2864
2872
  };
2865
2873
  }
2866
2874
 
2875
+ // src/doc/standaloneAnnotation.ts
2876
+ function parseAnnotationInner(inner) {
2877
+ const tokens = tokenizeAttrTokens(inner.trim());
2878
+ const firstIsParam = tokens.length > 0 && tokens[0].indexOf("=") > 0;
2879
+ const template = firstIsParam || tokens.length === 0 ? void 0 : tokens[0];
2880
+ const startIdx = firstIsParam ? 0 : 1;
2881
+ const params = {};
2882
+ for (let i = startIdx; i < tokens.length; i++) {
2883
+ const kv = splitKeyValueToken(tokens[i]);
2884
+ if (kv) params[kv.key] = kv.value;
2885
+ }
2886
+ return { template, params };
2887
+ }
2888
+ function parseStandaloneAnnotation(node) {
2889
+ if (node.type !== "paragraph") return null;
2890
+ const children = node.children ?? [];
2891
+ if (children.length !== 1 || children[0].type !== "text") return null;
2892
+ const text = children[0].value.trim();
2893
+ const match = matchTrailingTemplateAnnotation(text);
2894
+ if (!match || match.index !== 0) return null;
2895
+ return parseAnnotationInner(match.inner);
2896
+ }
2897
+
2898
+ // src/doc/mediaAnnotations.ts
2899
+ var MEDIA_TEMPLATES = /* @__PURE__ */ new Set(["audio", "video", "media"]);
2900
+ function isMediaAnnotationName(name) {
2901
+ return name != null && MEDIA_TEMPLATES.has(name);
2902
+ }
2903
+ function time(raw) {
2904
+ if (raw == null) return null;
2905
+ return parseTimeSeconds(raw);
2906
+ }
2907
+ function videoPlacement(params) {
2908
+ const explicit = params.placement ?? params.presentation;
2909
+ if (explicit === "content") return "content";
2910
+ if (explicit === "pip" || explicit === "picture-in-picture") return "picture-in-picture";
2911
+ if (explicit === "overlay" || explicit === "full-frame") return "overlay";
2912
+ if (params.pip === "" || params.pip === "true") return "picture-in-picture";
2913
+ if (params.overlay === "" || params.overlay === "true") return "overlay";
2914
+ return void 0;
2915
+ }
2916
+ function lockToBlock(raw) {
2917
+ return raw !== "false" && raw !== "0";
2918
+ }
2919
+ function videoPipSize(raw) {
2920
+ return raw === "small" || raw === "large" ? raw : void 0;
2921
+ }
2922
+ function videoPipShape(raw) {
2923
+ return raw === "square" || raw === "wide" ? raw : void 0;
2924
+ }
2925
+ function videoPipPosition(raw) {
2926
+ return raw === "top-left" || raw === "top-right" || raw === "bottom-left" || raw === "bottom-right" ? raw : void 0;
2927
+ }
2928
+ function toMediaClip(parsed, id) {
2929
+ const { template, params } = parsed;
2930
+ if (!template || !MEDIA_TEMPLATES.has(template)) return null;
2931
+ const src = params.src;
2932
+ if (!src) return null;
2933
+ const kind = template === "video" ? "video" : "audio";
2934
+ const anchor = params.anchor === "document" || params.span === "document" ? "document" : "block";
2935
+ const clip = {
2936
+ id,
2937
+ src,
2938
+ kind,
2939
+ startAt: time(params.startAt ?? params.startTime) ?? 0,
2940
+ anchor
2941
+ };
2942
+ const placement = kind === "video" ? videoPlacement(params) : void 0;
2943
+ if (placement && placement !== "content") clip.placement = placement;
2944
+ const pipSize = videoPipSize(params.pipSize);
2945
+ const pipShape = videoPipShape(params.pipShape);
2946
+ const pipPosition = videoPipPosition(params.pipPosition);
2947
+ if (pipSize) clip.pipSize = pipSize;
2948
+ if (pipShape) clip.pipShape = pipShape;
2949
+ if (pipPosition) clip.pipPosition = pipPosition;
2950
+ if (kind === "video" && placement && placement !== "content" && params.lockToBlock != null) {
2951
+ const locked = lockToBlock(params.lockToBlock);
2952
+ clip.lockToBlock = locked;
2953
+ clip.anchor = locked ? "block" : "document";
2954
+ if (locked) clip.startAt = 0;
2955
+ }
2956
+ const clipStart = time(params.clipStart);
2957
+ const clipEnd = time(params.clipEnd);
2958
+ if (clipStart != null) clip.clipStart = clipStart;
2959
+ if (clipEnd != null) clip.clipEnd = clipEnd;
2960
+ if (clip.lockToBlock === true) delete clip.clipEnd;
2961
+ if (params.spillover === "true" || params.spillover === "") clip.spillover = true;
2962
+ const edits = parseMediaEdits(mediaEditValuesFromParams(params));
2963
+ if (edits) clip.edits = edits;
2964
+ return clip;
2965
+ }
2966
+ function firstVideoElement(children) {
2967
+ const visit = (nodes) => {
2968
+ for (const child of nodes) {
2969
+ if (child.type !== "htmlElement") continue;
2970
+ if (child.tagName === "video") return child;
2971
+ const nested = visit(child.children);
2972
+ if (nested) return nested;
2973
+ }
2974
+ return null;
2975
+ };
2976
+ return visit(children);
2977
+ }
2978
+ function standaloneHtmlVideo(node) {
2979
+ if (node.type === "htmlBlock") {
2980
+ if (!/^\s*<video\b/i.test(node.rawHtml)) return null;
2981
+ const element = firstVideoElement(node.htmlChildren);
2982
+ return element ? { element, raw: node.rawHtml.trim() } : null;
2983
+ }
2984
+ if (node.type !== "paragraph" || !node.children.every((child) => child.type === "htmlInline")) {
2985
+ return null;
2986
+ }
2987
+ const raw = node.children.map((child) => child.type === "htmlInline" ? child.rawHtml : "").join("");
2988
+ if (!/^\s*<video\b[\s\S]*<\/video>\s*$/i.test(raw)) return null;
2989
+ for (const child of node.children) {
2990
+ if (child.type !== "htmlInline") continue;
2991
+ const element = firstVideoElement(child.htmlChildren);
2992
+ if (element) return { element, raw: raw.trim() };
2993
+ }
2994
+ return null;
2995
+ }
2996
+ function isStandaloneHtmlVideo(node) {
2997
+ return standaloneHtmlVideo(node) !== null;
2998
+ }
2999
+ function htmlVideoClip(node, id) {
3000
+ const authored = standaloneHtmlVideo(node);
3001
+ if (!authored) return null;
3002
+ const { element } = authored;
3003
+ const placement = videoPlacement({
3004
+ placement: element.attributes["data-squisq-video-placement"] ?? ""
3005
+ });
3006
+ if (!placement || placement === "content") return null;
3007
+ const src = element.attributes.src;
3008
+ if (!src) return null;
3009
+ const locked = lockToBlock(element.attributes["data-squisq-video-lock-to-block"]);
3010
+ const clip = {
3011
+ id,
3012
+ src,
3013
+ kind: "video",
3014
+ placement,
3015
+ lockToBlock: locked,
3016
+ startAt: locked ? 0 : time(element.attributes["data-squisq-video-start-at"]) ?? 0,
3017
+ anchor: locked ? "block" : "document"
3018
+ };
3019
+ const pipSize = videoPipSize(element.attributes["data-squisq-video-pip-size"]);
3020
+ const pipShape = videoPipShape(element.attributes["data-squisq-video-pip-shape"]);
3021
+ const pipPosition = videoPipPosition(element.attributes["data-squisq-video-pip-position"]);
3022
+ if (pipSize) clip.pipSize = pipSize;
3023
+ if (pipShape) clip.pipShape = pipShape;
3024
+ if (pipPosition) clip.pipPosition = pipPosition;
3025
+ const clipStart = time(element.attributes["data-squisq-video-clip-start"]);
3026
+ const clipEnd = time(element.attributes["data-squisq-video-clip-end"]);
3027
+ if (clipStart != null) clip.clipStart = clipStart;
3028
+ if (!locked && clipEnd != null) clip.clipEnd = clipEnd;
3029
+ const edits = parseMediaEdits(mediaEditValuesFromAttributes("video", element.attributes));
3030
+ if (edits) clip.edits = edits;
3031
+ return clip;
3032
+ }
3033
+ function extractMediaFromContents(contents, makeId, blockId) {
3034
+ const media = [];
3035
+ const documentMedia = [];
3036
+ const remaining = [];
3037
+ let index = 0;
3038
+ let originalIndex = 0;
3039
+ for (const node of contents ?? []) {
3040
+ const parsed = parseStandaloneAnnotation(node);
3041
+ const clip = parsed ? toMediaClip(parsed, "") : htmlVideoClip(node, "");
3042
+ if (clip) {
3043
+ clip.id = makeId(clip.src, index++);
3044
+ const line = node.position?.start.line;
3045
+ if (line != null) clip.sourceLine = line;
3046
+ if (blockId !== void 0) {
3047
+ const authoredHtml = standaloneHtmlVideo(node);
3048
+ const rawText = node.type === "paragraph" && node.children?.[0]?.type === "text" ? node.children[0].value.trim() : authoredHtml?.raw;
3049
+ clip.origin = {
3050
+ blockId,
3051
+ index: originalIndex,
3052
+ ...rawText !== void 0 ? { raw: rawText } : {},
3053
+ ...authoredHtml ? { format: "html" } : {}
3054
+ };
3055
+ }
3056
+ (clip.anchor === "document" ? documentMedia : media).push(clip);
3057
+ } else {
3058
+ remaining.push(node);
3059
+ }
3060
+ originalIndex++;
3061
+ }
3062
+ return { media, documentMedia, remaining };
3063
+ }
3064
+
2867
3065
  // src/doc/templateInputs.ts
2868
3066
  var VIDEO_FILE_RE = /\.(?:webm|mp4|mov|m4v|ogv)(?:[?#].*)?$/i;
3067
+ var INLINE_MEDIA_TAG_RE = /^<\/?(?:video|audio|source|track)\b/i;
2869
3068
  function extractHostedVideos(contents, limit = Infinity) {
2870
3069
  const found = [];
2871
3070
  const seen = /* @__PURE__ */ new Set();
@@ -2888,7 +3087,26 @@ function isPictureFence(node) {
2888
3087
  }
2889
3088
  function isMaterializedMediaNode(node) {
2890
3089
  if (node.type === "code") return isPictureFence(node);
2891
- return findBlockVideoEmbed(node) !== null;
3090
+ return findBlockVideoEmbed(node) !== null || isStandaloneHtmlVideo(node);
3091
+ }
3092
+ function isPictureParagraph(node) {
3093
+ if (node.type !== "paragraph") return false;
3094
+ let pictures = 0;
3095
+ for (const child of node.children) {
3096
+ if (child.type === "image") {
3097
+ if (!VIDEO_FILE_RE.test(child.url) && mediaKindForUrl(child.url)) return false;
3098
+ pictures += 1;
3099
+ } else if (child.type === "htmlInline") {
3100
+ const elements = child.htmlChildren.filter(
3101
+ (html) => html.type === "htmlElement"
3102
+ );
3103
+ if (!elements.length || !elements.every((html) => html.tagName === "img")) return false;
3104
+ pictures += elements.length;
3105
+ } else if (child.type !== "break" && !(child.type === "text" && !child.value.trim())) {
3106
+ return false;
3107
+ }
3108
+ }
3109
+ return pictures > 0;
2892
3110
  }
2893
3111
  function extractBodyPlainText(contents) {
2894
3112
  if (!contents || contents.length === 0) return "";
@@ -2942,7 +3160,7 @@ function renderInlineHtml(nodes) {
2942
3160
  case "inlineIcon":
2943
3161
  return `<i class="fa-${node.family} fa-${node.name}" aria-hidden="true"></i>`;
2944
3162
  case "htmlInline":
2945
- return escapeInlineHtml(node.rawHtml);
3163
+ return INLINE_MEDIA_TAG_RE.test(node.rawHtml.trim()) ? "" : escapeInlineHtml(node.rawHtml);
2946
3164
  }
2947
3165
  }).join("");
2948
3166
  }
@@ -3659,7 +3877,9 @@ function profileBlockContents(nodes) {
3659
3877
  }
3660
3878
  var UNIVERSAL_DEFAULTS = ["title", "sectionHeader", "content", "factCard", "twoColumn"];
3661
3879
  function recommendedNamesForProfile(profile) {
3662
- if (profile.hasCompoundBody) return ["content"];
3880
+ if (profile.hasCompoundBody) {
3881
+ return profile.hasImage || profile.hasVideo ? ["content", "topFeature", "bottomFeature"] : ["content"];
3882
+ }
3663
3883
  const names = /* @__PURE__ */ new Set();
3664
3884
  let anyContentSignal = false;
3665
3885
  if (profile.hasAsciiDiagram) {
@@ -3679,11 +3899,17 @@ function recommendedNamesForProfile(profile) {
3679
3899
  names.add("imageWithCaption");
3680
3900
  names.add("leftFeature");
3681
3901
  names.add("rightFeature");
3902
+ names.add("topFeature");
3903
+ names.add("bottomFeature");
3904
+ names.add("mediaOnly");
3682
3905
  if (profile.imageCount >= 2) names.add("photoGrid");
3683
3906
  }
3684
3907
  if (profile.hasVideo) {
3685
3908
  anyContentSignal = true;
3686
3909
  names.add("videoWithCaption");
3910
+ names.add("topFeature");
3911
+ names.add("bottomFeature");
3912
+ names.add("mediaOnly");
3687
3913
  if (profile.hasBlockquote) names.add("videoPullQuote");
3688
3914
  }
3689
3915
  if (profile.hasBlockquote) {
@@ -3748,6 +3974,10 @@ function recommendTemplatesForBlock(profile, allNames) {
3748
3974
  }
3749
3975
 
3750
3976
  export {
3977
+ parseAnnotationInner,
3978
+ parseStandaloneAnnotation,
3979
+ isMediaAnnotationName,
3980
+ extractMediaFromContents,
3751
3981
  toCells,
3752
3982
  cellWidth,
3753
3983
  isHoriz,
@@ -3799,6 +4029,7 @@ export {
3799
4029
  extractHostedVideos,
3800
4030
  isPictureFence,
3801
4031
  isMaterializedMediaNode,
4032
+ isPictureParagraph,
3802
4033
  extractBodyPlainText,
3803
4034
  extractListItems,
3804
4035
  renderMarkdownBlocksHtml,
@@ -1,12 +1,12 @@
1
- import { a6 as Layer, k as Block, Q as Doc, br as TemplateBlock, bs as TemplateContext, y as CustomTemplateDefinition, bu as TemplateRegistry, bA as Theme, c4 as ViewportConfig, a_ as PersistentLayerConfig, at as MotionSpec, R as DocBlock, c5 as ViewportOrientation, aZ as PersistentLayer, bN as TitleBlockInput, bf as SectionHeaderInput, j as BigTextInput, u as ContentBlockInput, bl as StatHighlightInput, b9 as QuoteBlockInput, Y as FactCardInput, bV as TwoColumnInput, J as DateEventInput, a4 as ImageWithCaptionInput, a9 as LeftFeatureInput, bc as RightFeatureInput, ae as MapBlockInput, bk as StartBlockConfig, $ as FullBleedQuoteInput, ac as ListBlockInput, b2 as PhotoGridInput, L as DefinitionCardInput, t as ComparisonBarInput, b8 as PullQuoteInput, c3 as VideoWithCaptionInput, c2 as VideoPullQuoteInput, I as DataTableInput, M as DiagramBlockInput, bQ as TreeBlockInput, bJ as TimelineBlockInput, U as DrawingBlockInput, ai as MarkerStyle, A as AccentImage, a3 as ImageTreatment, a as AccentPosition, c as Animation, d as AnimationType, au as MotionState, ar as MotionProfile, bC as ThemeColorScheme, w as CountUpSpec, bE as ThemeRegistry, aR as PageEmphasis, bD as ThemePageStyle, S as DocDiagnostic, P as DiagramTemplateNode, O as DiagramTemplateEdge, bM as TimelineTemplateTrack, bL as TimelineTemplateLink } from '../Doc-CYTLtFEu.js';
2
- export { V as FRONTMATTER_CUSTOM_TEMPLATES_KEY, W as FRONTMATTER_CUSTOM_THEMES_KEY, a8 as LayoutHints, bb as RenderStyle, bB as ThemeColorPalette, bH as ThemeStyle, bI as ThemeTypography, bW as VIEWPORT_PRESETS, c6 as ViewportPreset, cb as createTemplateContext, ci as getLayoutHints, cl as getTwoColumnPositions, cm as getViewport, cn as getViewportOrientation, cr as isTemplateBlock, cx as scaledFontSize } from '../Doc-CYTLtFEu.js';
1
+ import { a7 as Layer, k as Block, R as Doc, bt as TemplateBlock, bu as TemplateContext, z as CustomTemplateDefinition, bw as TemplateRegistry, bC as Theme, c7 as ViewportConfig, b0 as PersistentLayerConfig, av as MotionSpec, S as DocBlock, c8 as ViewportOrientation, a$ as PersistentLayer, bP as TitleBlockInput, bh as SectionHeaderInput, j as BigTextInput, v as ContentBlockInput, bn as StatHighlightInput, bb as QuoteBlockInput, Z as FactCardInput, bY as TwoColumnInput, K as DateEventInput, a5 as ImageWithCaptionInput, aa as LeftFeatureInput, be as RightFeatureInput, n as BottomFeatureInput, ao as MediaOnlyInput, bR as TopFeatureInput, af as MapBlockInput, bm as StartBlockConfig, a0 as FullBleedQuoteInput, ad as ListBlockInput, b4 as PhotoGridInput, M as DefinitionCardInput, u as ComparisonBarInput, ba as PullQuoteInput, c6 as VideoWithCaptionInput, c5 as VideoPullQuoteInput, J as DataTableInput, N as DiagramBlockInput, bT as TreeBlockInput, bL as TimelineBlockInput, V as DrawingBlockInput, aj as MarkerStyle, A as AccentImage, a4 as ImageTreatment, a as AccentPosition, c as Animation, d as AnimationType, aw as MotionState, at as MotionProfile, bE as ThemeColorScheme, x as CountUpSpec, bG as ThemeRegistry, aT as PageEmphasis, bF as ThemePageStyle, T as DocDiagnostic, Q as DiagramTemplateNode, P as DiagramTemplateEdge, bO as TimelineTemplateTrack, bN as TimelineTemplateLink } from '../Doc-DnRFE0EI.js';
2
+ export { W as FRONTMATTER_CUSTOM_TEMPLATES_KEY, X as FRONTMATTER_CUSTOM_THEMES_KEY, a9 as LayoutHints, bd as RenderStyle, bD as ThemeColorPalette, bJ as ThemeStyle, bK as ThemeTypography, bZ as VIEWPORT_PRESETS, c9 as ViewportPreset, ce as createTemplateContext, cl as getLayoutHints, co as getTwoColumnPositions, cp as getViewport, cq as getViewportOrientation, cu as isTemplateBlock, cA as scaledFontSize } from '../Doc-DnRFE0EI.js';
3
3
  import { g as BuildStep, M as MarkdownBlockNode, S as MarkdownListItem, f as BuildSpec, e as BuildCursor, h as BuildTiming, V as MarkdownNode, ae as TransitionType, ad as TransitionDirection, z as MarkdownHeading, v as MarkdownDocument, a2 as MarkdownTable, q as MarkdownCodeBlock, R as MarkdownList } from '../types-Zk8qYuaT.js';
4
4
  import { C as CoercedBlockMeta } from '../annotationCoercion-hTvELpIN.js';
5
- import { c as PageSection } from '../materializePageSection-CDps_xUd.js';
6
- export { M as MaterializePageSectionOptions, a as MaterializePageSectionsOptions, P as PageMedia, b as PageRichText, d as PageSectionDiagnostic, e as PageSectionItem, f as PageSectionMaterialization, g as PageSectionSource, h as PageSpatialKind, i as PageTransformHints, m as materializePageSection, j as materializePageSections, r as resolvePageStyle } from '../materializePageSection-CDps_xUd.js';
5
+ import { c as PageSection } from '../materializePageSection-D84uA6Vk.js';
6
+ export { M as MaterializePageSectionOptions, a as MaterializePageSectionsOptions, P as PageMedia, b as PageRichText, d as PageSectionDiagnostic, e as PageSectionItem, f as PageSectionMaterialization, g as PageSectionSource, h as PageSpatialKind, i as PageTransformHints, m as materializePageSection, j as materializePageSections, r as resolvePageStyle } from '../materializePageSection-D84uA6Vk.js';
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-CMm_jh3a.js';
9
+ export { D as DEFAULT_THEME, g as getAvailableThemes, b as getThemeSummaries, r as resolveTheme } from '../themeLibrary-in0fafp4.js';
10
10
 
11
11
  /** Pure build planning and evaluation, shared by interactive slides and frame export. */
12
12
 
@@ -256,6 +256,24 @@ declare const TEMPLATE_AUTHORING_METADATA: {
256
256
  readonly safeForContentFirst: false;
257
257
  readonly placement: "heading";
258
258
  };
259
+ readonly topFeature: {
260
+ readonly role: "media";
261
+ readonly bodyPolicy: "complete";
262
+ readonly safeForContentFirst: false;
263
+ readonly placement: "heading";
264
+ };
265
+ readonly bottomFeature: {
266
+ readonly role: "media";
267
+ readonly bodyPolicy: "complete";
268
+ readonly safeForContentFirst: false;
269
+ readonly placement: "heading";
270
+ };
271
+ readonly mediaOnly: {
272
+ readonly role: "media";
273
+ readonly bodyPolicy: "ignored";
274
+ readonly safeForContentFirst: false;
275
+ readonly placement: "heading";
276
+ };
259
277
  readonly map: {
260
278
  readonly role: "spatial";
261
279
  readonly bodyPolicy: "structured";
@@ -410,10 +428,15 @@ type SupplementalMediaLayoutVariant = 'title-stack' | 'split' | 'text-stack' | '
410
428
  type SupplementalMediaVariantMatrix = Record<ViewportOrientation, Record<SupplementalMediaShape, SupplementalMediaLayoutVariant>>;
411
429
  /** What the template does before supplemental rich media is considered. */
412
430
  type NoMediaLayout = 'template-default' | 'template-without-optional-media' | 'unsupported' | 'intrinsic-visual';
413
- /** Which part of the system owns the template's primary media geometry. */
414
- type TemplateMediaOwnership = 'supplemental' | 'optional-native' | 'required-native' | 'intrinsic-visual';
431
+ /**
432
+ * Which part of the system owns the template's primary media geometry.
433
+ * `native-slot`: the template declares where media goes (a band, the whole
434
+ * slide) but never draws any itself — the body's media fills that slot
435
+ * through the shared rich-media pass.
436
+ */
437
+ type TemplateMediaOwnership = 'supplemental' | 'optional-native' | 'required-native' | 'native-slot' | 'intrinsic-visual';
415
438
  /** Geometry already implemented by templates that own their primary media. */
416
- type NativeMediaLayout = 'full-bleed-image' | 'full-bleed-video' | 'background-image' | 'accent-strip-or-inset' | 'feature-left' | 'feature-right' | 'map-canvas' | 'photo-grid' | 'spatial-canvas' | 'freeform-canvas';
439
+ type NativeMediaLayout = 'full-bleed-image' | 'full-bleed-video' | 'background-image' | 'accent-strip-or-inset' | 'feature-left' | 'feature-right' | 'feature-top' | 'feature-bottom' | 'full-frame' | 'map-canvas' | 'photo-grid' | 'spatial-canvas' | 'freeform-canvas';
417
440
  /** How unconsumed body media behaves after the template renders. */
418
441
  type UnconsumedMediaBehavior = 'reserved-slot' | 'reserve-when-no-native-media' | 'retain-native-layout';
419
442
  interface BlockMediaLayoutPolicy {
@@ -545,6 +568,30 @@ declare const BLOCK_MEDIA_LAYOUT_POLICIES: {
545
568
  readonly additionalMediaLayout: "overlay-inset";
546
569
  readonly unconsumedMedia: "retain-native-layout";
547
570
  };
571
+ readonly topFeature: {
572
+ readonly summary: "Body media spans the full width across the top; the heading and complete body take a band below sized to the text. Without media it is a content slide.";
573
+ readonly noMedia: "template-default";
574
+ readonly ownership: "native-slot";
575
+ readonly nativeLayout: "feature-top";
576
+ readonly additionalMediaLayout: "overlay-inset";
577
+ readonly unconsumedMedia: "retain-native-layout";
578
+ };
579
+ readonly bottomFeature: {
580
+ readonly summary: "The heading and complete body take a band across the top sized to the text; body media spans the full width below. Without media it is a content slide.";
581
+ readonly noMedia: "template-default";
582
+ readonly ownership: "native-slot";
583
+ readonly nativeLayout: "feature-bottom";
584
+ readonly additionalMediaLayout: "overlay-inset";
585
+ readonly unconsumedMedia: "retain-native-layout";
586
+ };
587
+ readonly mediaOnly: {
588
+ readonly summary: "Body media fills the whole slide with no text; without media the heading and body render as a content slide.";
589
+ readonly noMedia: "template-default";
590
+ readonly ownership: "native-slot";
591
+ readonly nativeLayout: "full-frame";
592
+ readonly additionalMediaLayout: "overlay-inset";
593
+ readonly unconsumedMedia: "retain-native-layout";
594
+ };
548
595
  readonly map: {
549
596
  readonly summary: "The map canvas is the primary visual; other media must not reflow its geography.";
550
597
  readonly noMedia: "intrinsic-visual";
@@ -820,6 +867,12 @@ declare function sectionHeader(input: SectionHeaderInput, context: TemplateConte
820
867
  * cover's scrim follows. Built for YouTube covers and social thumbnails,
821
868
  * but works as an ordinary block template too.
822
869
  *
870
+ * `backdrop: 'frosted'` swaps the bloom for the frosted-glass plate of the
871
+ * frosted cover (frostedPlate.ts): the photo stays clear and the title sits
872
+ * on glass that hugs it, centred in its placement band, sized as large as
873
+ * the glass allows within 90% of the frame width. Only with an image; the
874
+ * plate never fades (a fading ancestor would switch its blur off).
875
+ *
823
876
  * This is shared code used by both site and efb-app doc renderers.
824
877
  */
825
878
 
@@ -829,6 +882,40 @@ declare function sectionHeader(input: SectionHeaderInput, context: TemplateConte
829
882
  * then binary-searched against the wrapped block's height.
830
883
  */
831
884
  declare function fitBigTextSize(title: string, viewport: ViewportConfig, heightFraction?: number): number;
885
+ /** Geometry of a frosted big-text card, in px of the viewport (exported for tests and tools). */
886
+ interface FrostedBigTextLayout {
887
+ /** Title font size, px. */
888
+ fontSize: number;
889
+ /** The title as drawn, one entry per line. */
890
+ lines: string[];
891
+ /** The plate: top-left corner, size and corner radius. */
892
+ plate: {
893
+ x: number;
894
+ y: number;
895
+ width: number;
896
+ height: number;
897
+ radius: number;
898
+ };
899
+ /** The title's box, centred on the plate with room for the font's full ascent and descent. */
900
+ title: {
901
+ cx: number;
902
+ cy: number;
903
+ width: number;
904
+ height: number;
905
+ };
906
+ /** Optical centring of the title's ink (see `opticalCentreShiftEm`). */
907
+ baselineShift: number;
908
+ }
909
+ /**
910
+ * Lay out a frosted big-text card: the largest size whose balanced lines, padded by
911
+ * the plate, fit {@link BIG_TEXT_FROSTED_WIDTH_FRACTION} of the frame width and the
912
+ * placement band's height (at most {@link BIG_TEXT_FROSTED_HEIGHT_SHARE} of the shorter
913
+ * side). The plate is centred on the band.
914
+ */
915
+ declare function frostedBigTextLayout(displayTitle: string, viewport: ViewportConfig, band?: {
916
+ y: number;
917
+ height: number;
918
+ }): FrostedBigTextLayout;
832
919
  declare function bigText(input: BigTextInput, context: TemplateContext): Layer[];
833
920
 
834
921
  /**
@@ -840,7 +927,15 @@ declare function bigText(input: BigTextInput, context: TemplateContext): Layer[]
840
927
  * more visual template after validation and preview.
841
928
  */
842
929
 
843
- declare function contentBlock(input: ContentBlockInput, context: TemplateContext): Layer[];
930
+ interface ContentBlockOptions {
931
+ /**
932
+ * Leave picture-only paragraphs out of the body — for media-led templates,
933
+ * which show those pictures in their media band. `content` itself keeps
934
+ * their alt text, the loss-averse default.
935
+ */
936
+ omitPictures?: boolean;
937
+ }
938
+ declare function contentBlock(input: ContentBlockInput, context: TemplateContext, options?: ContentBlockOptions): Layer[];
844
939
 
845
940
  /**
846
941
  * Stat Highlight Template
@@ -1004,6 +1099,24 @@ declare function imageWithCaption(input: ImageWithCaptionInput, context: Templat
1004
1099
  declare function leftFeature(input: LeftFeatureInput, context: TemplateContext): Layer[];
1005
1100
  declare function rightFeature(input: RightFeatureInput, context: TemplateContext): Layer[];
1006
1101
 
1102
+ /**
1103
+ * Media-led Templates — `topFeature`, `bottomFeature` and `mediaOnly`
1104
+ *
1105
+ * The block's own media — images, video clips, hosted players, diagrams —
1106
+ * leads the slide. These templates render their text exactly as `content`
1107
+ * does (the heading and the complete body, lists and builds intact) and leave
1108
+ * the media to the shared rich-media pass. Their layout policy
1109
+ * (`mediaLayoutPolicy.ts`, resolved in `richMediaLayout.ts`) gives the media
1110
+ * the full width of the slide, edge to edge — a band across the top or bottom
1111
+ * with the text re-fitted into the rest, or the whole slide — instead of the
1112
+ * half a side-by-side feature leaves it. Without media each one is a plain
1113
+ * content slide, so choosing it never loses the body.
1114
+ */
1115
+
1116
+ declare function topFeature(input: TopFeatureInput, context: TemplateContext): Layer[];
1117
+ declare function bottomFeature(input: BottomFeatureInput, context: TemplateContext): Layer[];
1118
+ declare function mediaOnly(input: MediaOnlyInput, context: TemplateContext): Layer[];
1119
+
1007
1120
  /**
1008
1121
  * Map Block Template
1009
1122
  *
@@ -2176,12 +2289,19 @@ declare function extractHostedVideos(contents: readonly MarkdownBlockNode[] | un
2176
2289
  declare function isPictureFence(node: MarkdownNode): boolean;
2177
2290
  /**
2178
2291
  * Body nodes that render as their own visual layer rather than as prose: a
2179
- * picture fence ({@link isPictureFence}) and a hosted-video paragraph (a
2180
- * player, via `appendRichContentLayers`). Repeating them as body text would
2181
- * print the diagram source or the video's link under the very thing they
2182
- * became.
2292
+ * picture fence ({@link isPictureFence}), a hosted-video paragraph and a
2293
+ * standalone `<video>` (players, via `appendRichContentLayers`). Repeating
2294
+ * them as body text would print the diagram source, the video's link or its
2295
+ * raw tag under the very thing they became.
2183
2296
  */
2184
2297
  declare function isMaterializedMediaNode(node: MarkdownBlockNode): boolean;
2298
+ /**
2299
+ * A paragraph that is only pictures: markdown images (a video file in image
2300
+ * syntax included) or resized `<img>` tags. A media-led template shows them
2301
+ * in its media band, so their alt text repeated as body copy would caption
2302
+ * the picture twice.
2303
+ */
2304
+ declare function isPictureParagraph(node: MarkdownBlockNode): boolean;
2185
2305
  /** Plain text of a block's body contents (excluding the heading). */
2186
2306
  declare function extractBodyPlainText(contents?: MarkdownBlockNode[]): string;
2187
2307
  /** Extract list items as plain text. */
@@ -4347,4 +4467,4 @@ declare function treeFromMarkdownList(list: MarkdownList): Tree;
4347
4467
  /** Find the first top-level markdown list in a block's body, if any. */
4348
4468
  declare function findFirstList(contents: MarkdownBlockNode[] | undefined): MarkdownList | undefined;
4349
4469
 
4350
- export { ASCII_CHAR_H, ASCII_CHAR_W, ASCII_DIAGRAM_FENCE_LANGS, ASCII_TIMELINE_FENCE_LANGS, 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, 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 ClipBox, 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, GEOMETRY_BOUND_TEMPLATES, type HostedVideo, type InputCoercion, type LayerMaterializationDiagnostic, type LayerMaterializationFailureMode, type LayerMaterializationSource, type LayoutLayerDefaults, type LayoutLayersResult, MAX_COVER_SLIDE_DURATION_SECONDS, type MarkdownToDocOptions, type MarkdownValidationResult, type MaterializeBlockLayersOptions, type MaterializeDashboardOptions, type MaterializeFlashcardsOptions, type NarrationResolution, type NativeMediaLayout, type NoMediaLayout, PAGE_BASE_CSS, PATH_SHAPE_KINDS, PageSection, type PageSectionContext, type PageSectionDraft, type ParsedStat, PersistentLayerConfig, 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 SupplementalMediaLayoutVariant, type SupplementalMediaShape, type SupplementalMediaVariantMatrix, TABLE_FED_TEMPLATES, TEMPLATE_AUTHORING_METADATA, TEMPLATE_INPUT_DESCRIPTORS, TEMPLATE_METADATA, TREE_FENCE_LANGS, type TemplateAuthoringMetadata, type TemplateAuthoringRole, TemplateBlock, type TemplateBodyPolicy, TemplateContext, type TemplateInputDescriptor, type TemplateMediaOwnership, type TemplateMetadata, type TemplateParamFinding, Theme, ThemeColorScheme, type Tree, type TreeDetection, type TreeItem, type TreeNode, type UnconsumedMediaBehavior, type ValidateOptions, ViewportConfig, ViewportOrientation, accentForViewport, adjustY, anchorPoint, applyNarrationTiming, applyRenderStyleToLayers, arrangeAsciiDiagram, asciiCellToCanvas, asciiDiagramFromBlocks, asciiDiagramFromTemplateData, asciiDiagramToTemplateData, asciiTimelineToTemplateData, autoTemplatePreservesContent, bigText, blockBuildSteps, buildCursorAtTime, buildDashboardCellChrome, buildPageCss, buildPageCssVars, buildPreviewDoc, buildRegistry, buildSourceText, buildTargetState, canvasToAsciiCell, chooseDashboardLayout, clipEndpoints, clipPoint, coerceTemplateParams, comparisonBar, composeDashboardLayers, computeDiagramLayout, computeDrawingLayout, computeLayoutLayers, connectorPath, contentBlock, countBlocks, countUpSpecFor, coverBlock, createAccentLayers, cssFilterForTreatment, dashboardCanvasFill, dashboardCellAccent, dataSidecarPrefix, dataTable, dateEvent, definitionCard, deriveTemplateInputs, desiredCellZoom, detectAsciiDiagram, detectAsciiTimeline, detectTree, diagramBlock, docToMarkdown, documentTitleFromFileName, drawingBlock, expandCoverBlock, expandDocBlocks, expandPersistentLayers, extractBlockquoteText, extractBodyPlainText, extractEmbeddedVideos, extractFirstEmbeddedVideo, extractFirstImage, extractHostedVideos, extractImages, extractListItems, extractRichListItems, extractTableData, extractTableFromContents, factCard, fallbackBlockLayers, findFirstList, findFirstTable, fitBigTextSize, fitDiagramLabel, flattenBlocks, flattenRenderableBlocks, formatCountUp, formatCountValue, fullBleedQuote, getAccentLayout, getAnimationProgress, getAnimationStyle, getAvailableTemplates, getBlockBodyText, getBlockDepth, getBlockMediaLayoutPolicy, getDashboardLayoutSummaries, getDefaultAnimation, getDefaultAnimationDuration, getMotionProfile, getOverlayOpacity, getPersistentLayersFromTheme, getPinnedBlockMeta, getTemplateHint, getThemeFont, getTransitionClass, hasBlockBuilds, hasTemplate, imageWithCaption, isAsciiDiagramFence, isAsciiTimelineFence, isContainerTemplate, isDataFence, isDataFilePath, isEligibleAsciiFenceLang, isEligibleAsciiTimelineFenceLang, isEligibleTreeFenceLang, isExplicitDiagramLang, isExplicitTimelineLang, isExplicitTreeLang, isGeometryBoundTemplate, isMaterializedMediaNode, isPictureFence, isRepairableDiagram, isShapeName, isTemplatedPageBlock, isTreeFence, isWrappedFlowTimelineSource, layoutBlock, layoutCapacity, leftFeature, lineStyleDasharray, lintTemplateParams, listBlock, listDashboardLayouts, mapBlock, markdownBlockSeparatorLines, markdownToDoc, markerPath, materializeBlockLayers, materializeDashboard, materializeFlashcards, motionDelay, motionEntrance, motionStateTransform, nearestSnapPoint, normalizeDashboardZoom, normalizeShapeKind, pageStyleDataAttributes, parseAsciiDiagram, parseAsciiTimeline, parseAsciiTimelineWithStats, parseDataFence, parseStatNumber, parseTree, parseWrappedFlowTimeline, parseYamlSubset, photoGrid, planContentBuilds, pullQuote, quoteBlock, readCustomTemplatesFromFrontmatter, readCustomThemesFromFrontmatter, readDashboardLayoutsFromFrontmatter, renderAsciiDiagram, renderAsciiTimeline, renderMarkdownBlocksHtml, renderTree, repairAsciiDiagram, replaceDataFence, resolveAudioMapping, resolveBuildTimeline, resolveColorScheme, resolveCoverSlideSettings, resolveDashboardLayoutDefinition, resolveDashboardSettings, resolveDashboardStyleId, resolveDashboardZooms, resolveDataReferences, resolveDocBuildTiming, resolveFlashcardMarker, resolveLayoutCells, resolvePageBlock, resolvePersistentLayers, resolveTemplateName, resolveThemeForDoc, rightFeature, scaleAnimationDuration, scoreTextSimilarity, sectionExtractors, sectionHeader, shapePath, shouldUseShadow, snapEndpoints, snapPoints, statHighlight, stripBlockBackdropLayer, stripsBlockBackdrop, templateRegistry, themeWantsAmbientMotion, themedEntrance, themedFontSize, themedImageTreatment, themedScrim, themedSurfaceGradient, timelineBlock, titleBlock, transformOriginFor, transposeCells, treeBlock, treeFromMarkdownList, treeFromTemplateData, treeToTemplateData, twoColumn, validateDashboardLayoutDefinition, validateMarkdownDoc, validateMarkdownSource, videoPullQuote, videoWithCaption, wordRevealDelay, wrapWithPersistentLayers, writeCustomTemplatesToFrontmatter, writeCustomThemesToFrontmatter, writeDashboardLayoutsToFrontmatter };
4470
+ export { ASCII_CHAR_H, ASCII_CHAR_W, ASCII_DIAGRAM_FENCE_LANGS, ASCII_TIMELINE_FENCE_LANGS, 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, 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 ClipBox, 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 HostedVideo, type InputCoercion, type LayerMaterializationDiagnostic, type LayerMaterializationFailureMode, type LayerMaterializationSource, type LayoutLayerDefaults, type LayoutLayersResult, MAX_COVER_SLIDE_DURATION_SECONDS, type MarkdownToDocOptions, type MarkdownValidationResult, type MaterializeBlockLayersOptions, type MaterializeDashboardOptions, type MaterializeFlashcardsOptions, type NarrationResolution, type NativeMediaLayout, type NoMediaLayout, PAGE_BASE_CSS, PATH_SHAPE_KINDS, PageSection, type PageSectionContext, type PageSectionDraft, type ParsedStat, PersistentLayerConfig, 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 SupplementalMediaLayoutVariant, type SupplementalMediaShape, type SupplementalMediaVariantMatrix, TABLE_FED_TEMPLATES, TEMPLATE_AUTHORING_METADATA, TEMPLATE_INPUT_DESCRIPTORS, TEMPLATE_METADATA, TREE_FENCE_LANGS, type TemplateAuthoringMetadata, type TemplateAuthoringRole, TemplateBlock, type TemplateBodyPolicy, TemplateContext, type TemplateInputDescriptor, type TemplateMediaOwnership, type TemplateMetadata, type TemplateParamFinding, Theme, ThemeColorScheme, type Tree, type TreeDetection, type TreeItem, type TreeNode, type UnconsumedMediaBehavior, type ValidateOptions, ViewportConfig, ViewportOrientation, accentForViewport, adjustY, anchorPoint, applyNarrationTiming, applyRenderStyleToLayers, arrangeAsciiDiagram, asciiCellToCanvas, asciiDiagramFromBlocks, asciiDiagramFromTemplateData, asciiDiagramToTemplateData, asciiTimelineToTemplateData, autoTemplatePreservesContent, bigText, blockBuildSteps, bottomFeature, buildCursorAtTime, buildDashboardCellChrome, buildPageCss, buildPageCssVars, buildPreviewDoc, buildRegistry, buildSourceText, buildTargetState, canvasToAsciiCell, chooseDashboardLayout, clipEndpoints, clipPoint, coerceTemplateParams, comparisonBar, composeDashboardLayers, computeDiagramLayout, computeDrawingLayout, computeLayoutLayers, connectorPath, contentBlock, countBlocks, countUpSpecFor, coverBlock, createAccentLayers, cssFilterForTreatment, dashboardCanvasFill, dashboardCellAccent, dataSidecarPrefix, dataTable, dateEvent, definitionCard, deriveTemplateInputs, desiredCellZoom, detectAsciiDiagram, detectAsciiTimeline, detectTree, diagramBlock, docToMarkdown, documentTitleFromFileName, drawingBlock, expandCoverBlock, expandDocBlocks, expandPersistentLayers, extractBlockquoteText, extractBodyPlainText, extractEmbeddedVideos, extractFirstEmbeddedVideo, extractFirstImage, extractHostedVideos, extractImages, extractListItems, extractRichListItems, extractTableData, extractTableFromContents, factCard, fallbackBlockLayers, findFirstList, findFirstTable, fitBigTextSize, fitDiagramLabel, flattenBlocks, flattenRenderableBlocks, formatCountUp, formatCountValue, frostedBigTextLayout, fullBleedQuote, getAccentLayout, getAnimationProgress, getAnimationStyle, getAvailableTemplates, getBlockBodyText, getBlockDepth, getBlockMediaLayoutPolicy, getDashboardLayoutSummaries, getDefaultAnimation, getDefaultAnimationDuration, getMotionProfile, getOverlayOpacity, getPersistentLayersFromTheme, getPinnedBlockMeta, getTemplateHint, getThemeFont, getTransitionClass, hasBlockBuilds, hasTemplate, imageWithCaption, isAsciiDiagramFence, isAsciiTimelineFence, isContainerTemplate, isDataFence, isDataFilePath, isEligibleAsciiFenceLang, isEligibleAsciiTimelineFenceLang, isEligibleTreeFenceLang, isExplicitDiagramLang, isExplicitTimelineLang, isExplicitTreeLang, isGeometryBoundTemplate, isMaterializedMediaNode, isPictureFence, isPictureParagraph, isRepairableDiagram, isShapeName, isTemplatedPageBlock, isTreeFence, isWrappedFlowTimelineSource, layoutBlock, layoutCapacity, leftFeature, lineStyleDasharray, lintTemplateParams, listBlock, listDashboardLayouts, mapBlock, markdownBlockSeparatorLines, markdownToDoc, markerPath, materializeBlockLayers, materializeDashboard, materializeFlashcards, mediaOnly, motionDelay, motionEntrance, motionStateTransform, nearestSnapPoint, normalizeDashboardZoom, normalizeShapeKind, pageStyleDataAttributes, parseAsciiDiagram, parseAsciiTimeline, parseAsciiTimelineWithStats, parseDataFence, parseStatNumber, parseTree, parseWrappedFlowTimeline, parseYamlSubset, photoGrid, planContentBuilds, pullQuote, quoteBlock, readCustomTemplatesFromFrontmatter, readCustomThemesFromFrontmatter, readDashboardLayoutsFromFrontmatter, renderAsciiDiagram, renderAsciiTimeline, renderMarkdownBlocksHtml, renderTree, repairAsciiDiagram, replaceDataFence, resolveAudioMapping, resolveBuildTimeline, resolveColorScheme, resolveCoverSlideSettings, resolveDashboardLayoutDefinition, resolveDashboardSettings, resolveDashboardStyleId, resolveDashboardZooms, resolveDataReferences, resolveDocBuildTiming, resolveFlashcardMarker, resolveLayoutCells, resolvePageBlock, resolvePersistentLayers, resolveTemplateName, resolveThemeForDoc, rightFeature, scaleAnimationDuration, scoreTextSimilarity, sectionExtractors, sectionHeader, shapePath, shouldUseShadow, snapEndpoints, snapPoints, statHighlight, stripBlockBackdropLayer, stripsBlockBackdrop, templateRegistry, themeWantsAmbientMotion, themedEntrance, themedFontSize, themedImageTreatment, themedScrim, themedSurfaceGradient, timelineBlock, titleBlock, topFeature, transformOriginFor, transposeCells, treeBlock, treeFromMarkdownList, treeFromTemplateData, treeToTemplateData, twoColumn, validateDashboardLayoutDefinition, validateMarkdownDoc, validateMarkdownSource, videoPullQuote, videoWithCaption, wordRevealDelay, wrapWithPersistentLayers, writeCustomTemplatesToFrontmatter, writeCustomThemesToFrontmatter, writeDashboardLayoutsToFrontmatter };