@bendyline/squisq 2.7.1 → 2.9.0

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.
@@ -1875,6 +1875,23 @@ interface RichListItem {
1875
1875
  markdown: MarkdownBlockNode[];
1876
1876
  html?: string;
1877
1877
  }
1878
+ /**
1879
+ * Render Markdown block nodes as the small, sanitized HTML subset accepted by
1880
+ * `TextLayer.content.html`. This keeps structural content (especially lists
1881
+ * and paragraph boundaries) intact when a slide template uses one rich text
1882
+ * layer instead of the full React Markdown renderer.
1883
+ *
1884
+ * Raw HTML blocks deliberately fall through to escaped plain text. The text
1885
+ * layer renderer sanitizes this projection again, but generated HTML should
1886
+ * still be safe before it reaches that boundary.
1887
+ */
1888
+ declare function renderMarkdownBlocksHtml(nodes: readonly MarkdownBlockNode[]): string;
1889
+ /**
1890
+ * Number of newline characters to retain in a plain-text projection between
1891
+ * two Markdown blocks. A normal block boundary gets the usual two newlines;
1892
+ * parsed source with additional blank lines keeps the larger authored gap.
1893
+ */
1894
+ declare function markdownBlockSeparatorLines(previous: MarkdownBlockNode, next: MarkdownBlockNode): number;
1878
1895
  /** Extract list items without discarding their inline Markdown formatting. */
1879
1896
  declare function extractRichListItems(contents?: MarkdownBlockNode[]): RichListItem[];
1880
1897
  /**
@@ -1976,8 +1993,9 @@ interface MarkdownToDocOptions {
1976
1993
  * StartBlockConfig is created with a title resolved in priority order:
1977
1994
  * frontmatter `title:`, the first occurrence of the shallowest heading
1978
1995
  * (H1, else H2, else H3, …), then {@link fileName}. If the document
1979
- * contains an image, the first image is used as the hero. Set to false to
1980
- * suppress automatic cover generation.
1996
+ * contains an image, the first image is used as the hero. A frontmatter
1997
+ * `subtitle:` overrides the usual first-paragraph subtitle. Set to false
1998
+ * to suppress automatic cover generation.
1981
1999
  */
1982
2000
  generateCoverBlock?: boolean;
1983
2001
  /**
@@ -2137,6 +2155,13 @@ interface BuildPreviewDocOptions {
2137
2155
  * the placeholder block id.
2138
2156
  */
2139
2157
  documentTitle?: string;
2158
+ /**
2159
+ * Whether unused document images become standalone interleaved
2160
+ * `imageWithCaption` slides (default true — the slideshow behavior).
2161
+ * Consumers with a fixed cell budget (the dashboard projection) pass
2162
+ * false so synthetic filler slides never compete with real blocks.
2163
+ */
2164
+ interleaveImages?: boolean;
2140
2165
  }
2141
2166
  /**
2142
2167
  * Derive a display title from a file name: strip any directory prefix and the
@@ -2417,6 +2442,653 @@ declare const PAGE_BASE_CSS = "\n/* \u2500\u2500 Base \u2500\u2500\u2500\u2500\u
2417
2442
  */
2418
2443
  declare function buildPageCss(theme?: Theme): string;
2419
2444
 
2445
+ /**
2446
+ * Supplemental rich-media layout for slideshow blocks.
2447
+ *
2448
+ * Templates still own their no-media composition. When an explicitly
2449
+ * selected text-first template also contains media that it did not consume,
2450
+ * this module selects a second composition with a reserved media rectangle
2451
+ * and maps the template's foreground into the companion content rectangle.
2452
+ * The exhaustive per-template policy selects by viewport orientation, media
2453
+ * aspect, and item count so placement does not depend on a template's name or
2454
+ * incidental overlap between its layers.
2455
+ */
2456
+
2457
+ interface LayerRect {
2458
+ x: number;
2459
+ y: number;
2460
+ width: number;
2461
+ height: number;
2462
+ }
2463
+
2464
+ /**
2465
+ * Dashboard cell zoom policy.
2466
+ *
2467
+ * A cell's "zoom" multiplies the type scale (`TemplateContext.fontScale`)
2468
+ * its block renders with — the %-based composition still targets the cell,
2469
+ * but titles and body text render 1.5×/2× so a sparse block fills its slot
2470
+ * instead of floating in whitespace. Zoom is deliberately a CLOSED ladder
2471
+ * (100% / 150% / 200%), and a dashboard uses at most TWO unique levels —
2472
+ * base 1× plus one boost — so cells still read as consistently sized
2473
+ * rather than each block being fitted independently.
2474
+ *
2475
+ * Levels come from three places, strongest first: an explicit `zoom` on a
2476
+ * custom layout's cell definition (author intent — never changed), the
2477
+ * automatic density pick (short text-led blocks get boosted; spatial,
2478
+ * media, chart, and display-scaled templates always render 1×), and the
2479
+ * `squisq-dashboard-zoom: off` frontmatter kill-switch that pins every
2480
+ * non-explicit cell to 1×.
2481
+ */
2482
+ /** The closed set of zoom multipliers a dashboard cell may render at. */
2483
+ declare const DASHBOARD_ZOOM_LEVELS: readonly [1, 1.5, 2];
2484
+ type DashboardZoomLevel = (typeof DASHBOARD_ZOOM_LEVELS)[number];
2485
+ /** Automatic zoom behavior: density-based boosts, or everything at 1×. */
2486
+ type DashboardZoomMode = 'auto' | 'off';
2487
+ /**
2488
+ * Normalize an authored zoom value to a ladder level. Accepts multipliers
2489
+ * (`1`, `1.5`, `2`) and percentages (`100`, `150`, `200`, `'200%'`).
2490
+ * Returns undefined for anything off the ladder.
2491
+ */
2492
+ declare function normalizeDashboardZoom(value: unknown): DashboardZoomLevel | undefined;
2493
+ /** One cell's input to the zoom policy. */
2494
+ interface DashboardZoomCandidate {
2495
+ /** Resolved template name of the block in this cell. */
2496
+ template?: string;
2497
+ /** Plain-text length of the block's title + body. */
2498
+ textLength: number;
2499
+ /** Author-pinned level from the layout's cell definition. */
2500
+ explicit?: DashboardZoomLevel;
2501
+ }
2502
+ /** The density pick for one cell, before the two-level quantization. */
2503
+ declare function desiredCellZoom(candidate: DashboardZoomCandidate): DashboardZoomLevel;
2504
+ /**
2505
+ * Resolve every cell's final zoom level.
2506
+ *
2507
+ * Explicit levels are honored verbatim. Automatic picks are then
2508
+ * quantized so the dashboard as a whole uses at most base 1× plus ONE
2509
+ * boost level: when both 1.5× and 2× are wanted, the boost with the most
2510
+ * cells wins (explicit pins count double so autos rally to the author's
2511
+ * level; ties boost to 2×), and the other autos snap to it.
2512
+ */
2513
+ declare function resolveDashboardZooms(candidates: readonly DashboardZoomCandidate[], mode: DashboardZoomMode): DashboardZoomLevel[];
2514
+
2515
+ /**
2516
+ * Dashboard layout model.
2517
+ *
2518
+ * A dashboard renders a document's blocks onto ONE canvas: a layout places
2519
+ * N cells (as %-rects) over the canvas's content area, and each cell hosts
2520
+ * one rendered block. Where `materializeBlockLayers` is the slide
2521
+ * projection and `materializePageSections` is the page projection,
2522
+ * `materializeDashboard` (in this directory) is the dashboard projection —
2523
+ * this module holds the layout *definition* shape shared by built-in and
2524
+ * user-authored layouts, plus the geometry helpers that resolve a
2525
+ * definition against a concrete viewport.
2526
+ *
2527
+ * Positions are `%`-strings relative to the layout's CONTENT rect (the
2528
+ * canvas minus the optional title band), mirroring the custom-template
2529
+ * convention: one definition renders at any aspect ratio unchanged.
2530
+ */
2531
+
2532
+ /**
2533
+ * One cell of a dashboard layout. `x`/`y`/`width`/`height` are `%`-strings
2534
+ * relative to the content rect. `block` is an optional 1-based explicit
2535
+ * block assignment ("render block N here"); cells without one fill in
2536
+ * document order.
2537
+ */
2538
+ interface DashboardCellDefinition {
2539
+ x: string;
2540
+ y: string;
2541
+ width: string;
2542
+ height: string;
2543
+ /** 1-based candidate-block index this cell explicitly renders. */
2544
+ block?: number;
2545
+ /**
2546
+ * Type-scale multiplier for the block rendered here: 1, 1.5, or 2
2547
+ * (percent spellings 100/150/200 are accepted and normalized). Pins the
2548
+ * cell's zoom and exempts it from the automatic density pick.
2549
+ */
2550
+ zoom?: number;
2551
+ }
2552
+ /** Where and how tall the optional document-title band renders. */
2553
+ interface DashboardTitleSlotDefinition {
2554
+ /** Which canvas edge hosts the band. Default 'top'. */
2555
+ placement: 'top' | 'bottom';
2556
+ /** Band height as a `%`-string of the canvas height. Default '9%'. */
2557
+ height: string;
2558
+ }
2559
+ /**
2560
+ * A dashboard layout definition — JSON-serializable so built-ins and
2561
+ * frontmatter-authored custom layouts share one schema.
2562
+ */
2563
+ interface DashboardLayoutDefinition {
2564
+ /** Slug id used by `squisq-dashboard-layout` (lowercase, hyphens). */
2565
+ name: string;
2566
+ /** Human-facing picker label. */
2567
+ label: string;
2568
+ description?: string;
2569
+ /**
2570
+ * Per-orientation cell arrays. `landscape` is required and defines the
2571
+ * layout's capacity. Fallbacks when a variant is absent:
2572
+ * square → landscape cells (%-stretch), portrait → transposed landscape.
2573
+ * Variants that are present must match landscape's cell count.
2574
+ */
2575
+ cells: {
2576
+ landscape: DashboardCellDefinition[];
2577
+ portrait?: DashboardCellDefinition[];
2578
+ square?: DashboardCellDefinition[];
2579
+ };
2580
+ /** Overrides the default title band when the doc shows a title. */
2581
+ titleSlot?: DashboardTitleSlotDefinition;
2582
+ /** False excludes the layout from auto-pick (picker-only). Default true. */
2583
+ auto?: boolean;
2584
+ }
2585
+ interface DashboardLayoutValidationError {
2586
+ path: string;
2587
+ message: string;
2588
+ }
2589
+ interface DashboardLayoutValidationResult {
2590
+ valid: boolean;
2591
+ errors: DashboardLayoutValidationError[];
2592
+ /** The normalized definition when `valid` is true. */
2593
+ layout?: DashboardLayoutDefinition;
2594
+ }
2595
+ /** A resolved cell: canvas-unit rect plus the optional explicit pins. */
2596
+ interface ResolvedDashboardCell {
2597
+ rect: LayerRect;
2598
+ block?: number;
2599
+ /** Author-pinned zoom level from the cell definition. */
2600
+ zoom?: DashboardZoomLevel;
2601
+ }
2602
+ /**
2603
+ * Validate an untrusted layout definition (frontmatter, host input) into a
2604
+ * normalized {@link DashboardLayoutDefinition}. Never throws; malformed
2605
+ * definitions come back as `{ valid: false, errors }`.
2606
+ */
2607
+ declare function validateDashboardLayoutDefinition(input: unknown): DashboardLayoutValidationResult;
2608
+ /** Number of blocks the layout can display. */
2609
+ declare function layoutCapacity(def: DashboardLayoutDefinition): number;
2610
+ /**
2611
+ * Swap each cell's axes (x↔y, width↔height) — the automatic portrait
2612
+ * rendition for layouts that only define landscape cells. A row of cells
2613
+ * becomes a column; grids become their transpose.
2614
+ */
2615
+ declare function transposeCells(cells: readonly DashboardCellDefinition[]): DashboardCellDefinition[];
2616
+ /**
2617
+ * Pick the orientation variant (with fallbacks) and resolve its `%`-strings
2618
+ * against a concrete content rect, producing canvas-unit cell rects.
2619
+ */
2620
+ declare function resolveLayoutCells(def: DashboardLayoutDefinition, orientation: ViewportOrientation, contentRect: LayerRect): ResolvedDashboardCell[];
2621
+
2622
+ /**
2623
+ * Built-in dashboard layouts.
2624
+ *
2625
+ * Built-ins use the exact same JSON-serializable schema as user-authored
2626
+ * custom layouts (`squisq-dashboard-layouts` frontmatter), so pickers,
2627
+ * validation, and the auto-pick ladder treat both uniformly. Gutters are
2628
+ * baked into the `%` rects (the photoGrid convention) rather than being a
2629
+ * separate spacing model.
2630
+ */
2631
+
2632
+ /**
2633
+ * The built-in layout library, ordered by capacity — the auto-pick ladder
2634
+ * walks this order. `hero-top` opts out of auto-pick (`auto: false`) so
2635
+ * `grid-2x2` wins the 4-block case; it stays available in pickers.
2636
+ */
2637
+ declare const BUILTIN_DASHBOARD_LAYOUTS: readonly DashboardLayoutDefinition[];
2638
+ /** Picker-facing summary of a layout. */
2639
+ interface DashboardLayoutSummary {
2640
+ id: string;
2641
+ label: string;
2642
+ description?: string;
2643
+ capacity: number;
2644
+ /** True for layouts defined by the document rather than built in. */
2645
+ custom: boolean;
2646
+ }
2647
+ /** Summaries of the built-in layouts, in ladder order. */
2648
+ declare function getDashboardLayoutSummaries(): DashboardLayoutSummary[];
2649
+ /**
2650
+ * Every layout available to a document: its frontmatter-defined custom
2651
+ * layouts first (they win name collisions), then the built-ins. This is
2652
+ * the list pickers and CLI `--layout` validation enumerate.
2653
+ */
2654
+ declare function listDashboardLayouts(doc: Pick<Doc, 'frontmatter'> | undefined): DashboardLayoutSummary[];
2655
+
2656
+ /**
2657
+ * Dashboard layout selection: id lookup plus the auto-pick ladder that
2658
+ * chooses the smallest layout able to hold every block.
2659
+ */
2660
+
2661
+ /** The sentinel layout id meaning "pick the best layout for the doc". */
2662
+ declare const DASHBOARD_AUTO_LAYOUT_ID = "auto";
2663
+ /**
2664
+ * Resolve a layout id against the document's custom layouts (which win
2665
+ * name collisions) and then the built-ins. Undefined when unknown.
2666
+ */
2667
+ declare function resolveDashboardLayoutDefinition(id: string, customLayouts?: readonly DashboardLayoutDefinition[]): DashboardLayoutDefinition | undefined;
2668
+ /**
2669
+ * Auto-pick the best layout for a block count: the smallest-capacity
2670
+ * auto-eligible layout that fits every block, preferring a custom layout
2671
+ * over a built-in at equal capacity. When even the largest layout cannot
2672
+ * hold the count, the largest wins and the caller reports the overflow.
2673
+ *
2674
+ * Orientation deliberately does not change WHICH layout wins — it selects
2675
+ * the cell variant later (via `resolveLayoutCells`) so the same document
2676
+ * keeps the same layout identity across aspect ratios.
2677
+ */
2678
+ declare function chooseDashboardLayout(blockCount: number, _orientation: ViewportOrientation, customLayouts?: readonly DashboardLayoutDefinition[]): DashboardLayoutDefinition;
2679
+
2680
+ /**
2681
+ * Dashboard cell style — the "how it's dressed" axis, orthogonal to the
2682
+ * layout's "where things go".
2683
+ *
2684
+ * A layout answers how many cells there are and what shape they take; a
2685
+ * style answers what a cell LOOKS like: whether the block simply fills its
2686
+ * rect (`basic`, the historical behavior), sits on a raised card, sits in a
2687
+ * flat outlined panel, or on an accent-tinted card. Every style derives its
2688
+ * colors, radius, and accents from the ACTIVE THEME (`colors`,
2689
+ * `style.borderRadius`, `colorSchemes`), so a gezellig dashboard reads as
2690
+ * gezellig and a tech-dark one reads as tech-dark — a style never carries
2691
+ * its own palette.
2692
+ *
2693
+ * Geometry is core-owned like everything else in the dashboard pipeline:
2694
+ * this module returns the card rect the block renders into plus the chrome
2695
+ * layers painted behind it (CELL-LOCAL coordinates — the same space
2696
+ * `materializeDashboard` hands renderers for the title band) and over it
2697
+ * (CARD-LOCAL, so a host clips them with the card's own corner radius).
2698
+ */
2699
+
2700
+ /** The closed set of dashboard cell styles. */
2701
+ declare const DASHBOARD_STYLE_IDS: readonly ["basic", "card", "panel", "accent"];
2702
+ type DashboardStyleId = (typeof DASHBOARD_STYLE_IDS)[number];
2703
+ declare const DEFAULT_DASHBOARD_STYLE: DashboardStyleId;
2704
+ /** Picker-facing summary of a style (mirrors `DashboardLayoutSummary`). */
2705
+ interface DashboardStyleSummary {
2706
+ id: DashboardStyleId;
2707
+ label: string;
2708
+ description: string;
2709
+ }
2710
+ /** The style library, in picker order. */
2711
+ declare const DASHBOARD_STYLES: readonly DashboardStyleSummary[];
2712
+ /** Normalize an authored style value; undefined when unrecognized. */
2713
+ declare function resolveDashboardStyleId(value: unknown): DashboardStyleId | undefined;
2714
+ /**
2715
+ * The canvas fill behind the cells. Card-like styles tint it away from the
2716
+ * card surface (down on light themes, up on dark ones) so cards read as
2717
+ * raised rather than as invisible rectangles on matching paper; flat styles
2718
+ * keep the theme background exactly.
2719
+ */
2720
+ declare function dashboardCanvasFill(style: DashboardStyleId, theme: Theme): string;
2721
+ /**
2722
+ * The accent color for cell `index`. Styles that show an accent rotate
2723
+ * through the theme's own `colorSchemes` (insertion order — the same
2724
+ * vocabulary page mode's `accentRotation` rotates), falling back to the
2725
+ * palette's primary when a theme declares no schemes.
2726
+ */
2727
+ declare function dashboardCellAccent(theme: Theme, index: number): string;
2728
+ /** The chrome + geometry a style contributes to one cell. */
2729
+ interface DashboardCellChrome {
2730
+ /** Card rect in canvas units (the block fills exactly this box). */
2731
+ cardRect: LayerRect;
2732
+ /** Box the block renders into — identical to {@link cardRect}. */
2733
+ contentRect: LayerRect;
2734
+ /** Chrome layers painted BEHIND the block, in cell-local coordinates. */
2735
+ layers: Layer[];
2736
+ /**
2737
+ * Chrome layers painted ON TOP of the block, in card-local coordinates
2738
+ * (origin at the card rect, so a host can clip them with the card's own
2739
+ * radius). Borders and accents live here: a template that paints its own
2740
+ * opaque surface would otherwise bury them.
2741
+ */
2742
+ overlayLayers: Layer[];
2743
+ /** Card corner radius in canvas units. */
2744
+ radius: number;
2745
+ /** CSS `border-radius` for the CONTENT box, percentage-based. */
2746
+ contentRadiusPct?: string;
2747
+ }
2748
+ /**
2749
+ * Build one cell's chrome. Returns null for `basic`, which paints nothing
2750
+ * and leaves the block filling the layout's rect exactly as before.
2751
+ *
2752
+ * The block fills the CARD, rather than sitting in a padded well inside it:
2753
+ * templates already carry their own internal padding, and many paint an
2754
+ * opaque surface or gradient of their own. Letting that surface BE the card
2755
+ * face is what keeps a card from reading as a box inside a box; the chrome
2756
+ * contributes the elevation behind it and the border/accent over it.
2757
+ *
2758
+ * Elevation is drawn as stacked translucent rects rather than an SVG blur
2759
+ * filter: it stays vector-pure, rasterizes identically in the player and in
2760
+ * headless capture, and costs three shapes.
2761
+ */
2762
+ declare function buildDashboardCellChrome(style: DashboardStyleId, options: {
2763
+ theme: Theme;
2764
+ rect: LayerRect;
2765
+ index: number;
2766
+ }): DashboardCellChrome | null;
2767
+ /**
2768
+ * Whether a block's own full-bleed theme-background layer should be
2769
+ * dropped in this style. Card-like styles paint the surface themselves, so
2770
+ * an opaque backdrop from the template would hide the card's tint and
2771
+ * square off its corners. Only a fill that exactly matches the theme
2772
+ * background is ever dropped — a template's accent or gradient backdrop is
2773
+ * authored intent and stays.
2774
+ */
2775
+ declare function stripsBlockBackdrop(style: DashboardStyleId): boolean;
2776
+ /**
2777
+ * Remove a leading full-bleed rect whose fill is exactly the theme
2778
+ * background. Matches `createBackgroundLayer`'s output shape.
2779
+ */
2780
+ declare function stripBlockBackdropLayer(layers: readonly Layer[], theme: Theme): Layer[];
2781
+
2782
+ /**
2783
+ * Dashboard settings persisted in Markdown frontmatter.
2784
+ *
2785
+ * Framework-free (model: `coverSlideSettings.ts`) so the editor, player,
2786
+ * and export pipelines resolve one canonical document contract:
2787
+ *
2788
+ * - `squisq-dashboard-layout`: layout id or `auto` (default `auto`).
2789
+ * - `squisq-dashboard-title`: whether the document title band renders
2790
+ * (default true; the band only appears when a title actually resolves).
2791
+ * - `squisq-dashboard-style`: cell style variant (default `basic`) — the
2792
+ * dressing axis that is orthogonal to the layout's geometry.
2793
+ */
2794
+
2795
+ interface DashboardSettings {
2796
+ /** Preferred layout id, or {@link DASHBOARD_AUTO_LAYOUT_ID}. */
2797
+ layout: string;
2798
+ /** Whether the document-title band renders when a title resolves. */
2799
+ showTitle: boolean;
2800
+ /** Cell zoom behavior: density-based `auto` boosts, or `off` (all 1×). */
2801
+ zoom: DashboardZoomMode;
2802
+ /** Cell style variant (chrome around each block). */
2803
+ style: DashboardStyleId;
2804
+ }
2805
+ declare const DASHBOARD_FRONTMATTER_KEYS: Readonly<{
2806
+ layout: {
2807
+ canonical: string;
2808
+ legacy: string;
2809
+ };
2810
+ showTitle: {
2811
+ canonical: string;
2812
+ legacy: string;
2813
+ };
2814
+ zoom: {
2815
+ canonical: string;
2816
+ legacy: string;
2817
+ };
2818
+ style: {
2819
+ canonical: string;
2820
+ legacy: string;
2821
+ };
2822
+ }>;
2823
+ declare const DEFAULT_DASHBOARD_SETTINGS: Readonly<DashboardSettings>;
2824
+ /**
2825
+ * Caller overrides. `style` is deliberately widened to `string`: hosts pass
2826
+ * raw CLI/UI values through, and an unrecognized one normalizes away rather
2827
+ * than needing a cast at every call site.
2828
+ */
2829
+ type DashboardSettingsOverrides = Partial<Omit<DashboardSettings, 'style'>> & {
2830
+ style?: DashboardStyleId | string;
2831
+ };
2832
+ /** Resolve dashboard settings from frontmatter, then apply caller overrides. */
2833
+ declare function resolveDashboardSettings(frontmatter: Record<string, unknown> | undefined, overrides?: DashboardSettingsOverrides): DashboardSettings;
2834
+
2835
+ /**
2836
+ * Frontmatter serialization for user-defined dashboard layouts.
2837
+ *
2838
+ * Custom layout definitions live in the document's YAML frontmatter under
2839
+ * `squisq-dashboard-layouts` as a single **compact JSON** object keyed by
2840
+ * layout name (the exact convention `squisq-custom-templates` uses — see
2841
+ * `customTemplatesFrontmatter.ts` for the rationale):
2842
+ *
2843
+ * ```yaml
2844
+ * squisq-dashboard-layouts: {"kpi-wall":{"lb":"KPI Wall","ce":{"ls":[{"x":"0%","y":"0%","wd":"50%","hg":"100%","bk":1},…]}}}
2845
+ * ```
2846
+ *
2847
+ * The value is written unquoted on a single line so the line-based
2848
+ * frontmatter parser round-trips it verbatim. Well-known property names
2849
+ * shrink to two-letter codes via {@link LONG_TO_SHORT}; unmapped keys pass
2850
+ * through unchanged, so the format stays lossless as the schema grows.
2851
+ */
2852
+
2853
+ /** Canonical frontmatter key for custom dashboard layouts. */
2854
+ declare const FRONTMATTER_DASHBOARD_LAYOUTS_KEY = "squisq-dashboard-layouts";
2855
+ /**
2856
+ * Read the `squisq-dashboard-layouts` key into validated layout
2857
+ * definitions. Returns undefined when the key is absent or unparseable;
2858
+ * individual malformed entries are dropped rather than failing the doc.
2859
+ */
2860
+ declare function readDashboardLayoutsFromFrontmatter(frontmatter: Record<string, unknown> | undefined): DashboardLayoutDefinition[] | undefined;
2861
+ /**
2862
+ * Encode layout definitions into the compact JSON object described in the
2863
+ * module header. Returns undefined for an empty list so callers can omit
2864
+ * the key entirely.
2865
+ */
2866
+ declare function writeDashboardLayoutsToFrontmatter(layouts: readonly DashboardLayoutDefinition[] | undefined, options?: {
2867
+ pretty?: boolean;
2868
+ }): string | undefined;
2869
+
2870
+ /**
2871
+ * Dashboard projection — the third sibling of the slide projection
2872
+ * (`buildPreviewDoc` + `materializeBlockLayers`) and the page projection
2873
+ * (`materializePageSections`).
2874
+ *
2875
+ * `materializeDashboard(doc, options)` turns a markdown-derived Doc into
2876
+ * ONE canvas: a layout's cells (canvas-unit rects) each holding one block
2877
+ * rendered AT the cell's size — a synthetic per-cell viewport, so
2878
+ * templates re-compose for the cell's orientation and typography scales
2879
+ * via `calculateFontScale` (the same strategy embedded spatial media uses
2880
+ * inside `materializeBlockLayers`). Core owns every geometry decision;
2881
+ * React consumers position cells with the CSS-ready `rectPct` values, and
2882
+ * non-React consumers flatten everything into a single canvas-level
2883
+ * `Layer[]` via {@link composeDashboardLayers}.
2884
+ *
2885
+ * Candidate blocks come from `buildPreviewDoc` (with image interleaving
2886
+ * off) so template resolution and derived inputs match the slideshow
2887
+ * exactly. Blocks beyond the layout's capacity are not rendered — that is
2888
+ * reported as an `overflow` diagnostic, never a console side effect.
2889
+ */
2890
+
2891
+ interface MaterializeDashboardOptions {
2892
+ /** Theme used by cell templates and the canvas backdrop. */
2893
+ theme?: Theme;
2894
+ /** Canvas viewport. Defaults to the landscape preset. */
2895
+ viewport?: ViewportConfig;
2896
+ /**
2897
+ * Layout override: an id, {@link DASHBOARD_AUTO_LAYOUT_ID}, or an inline
2898
+ * definition. Overrides the doc's `squisq-dashboard-layout` frontmatter.
2899
+ */
2900
+ layout?: string | DashboardLayoutDefinition;
2901
+ /** Custom layouts; defaults to the doc's `squisq-dashboard-layouts`. */
2902
+ customLayouts?: readonly DashboardLayoutDefinition[];
2903
+ /** Document-scoped custom templates; defaults to `doc.customTemplates`. */
2904
+ customTemplates?: readonly CustomTemplateDefinition[];
2905
+ /** Title-band override; overrides `squisq-dashboard-title` frontmatter. */
2906
+ showTitle?: boolean;
2907
+ /** Host-supplied title fallback (file name), as in `buildPreviewDoc`. */
2908
+ documentTitle?: string;
2909
+ /** Cell zoom override; overrides `squisq-dashboard-zoom` frontmatter. */
2910
+ zoom?: DashboardZoomMode;
2911
+ /** Cell style override; overrides `squisq-dashboard-style` frontmatter. */
2912
+ style?: DashboardStyleId | string;
2913
+ /** Per-cell failure policy, forwarded to `materializeBlockLayers`. */
2914
+ failureMode?: LayerMaterializationFailureMode;
2915
+ }
2916
+ /** CSS-ready percentages of the FULL canvas for absolute positioning. */
2917
+ interface DashboardRectPct {
2918
+ left: string;
2919
+ top: string;
2920
+ width: string;
2921
+ height: string;
2922
+ }
2923
+ /**
2924
+ * A cell's style chrome — the card/panel surface painted BEHIND the block.
2925
+ * Shaped like {@link DashboardTitle}: layers live in the frame's own
2926
+ * viewport space, so a renderer positions one box and draws into it.
2927
+ * Absent under the `basic` style, which paints no chrome at all.
2928
+ */
2929
+ interface DashboardCellFrame {
2930
+ /** The layout's full cell rect in canvas units (chrome's own box). */
2931
+ rect: LayerRect;
2932
+ /** The frame rect as percentages of the full canvas. */
2933
+ rectPct: DashboardRectPct;
2934
+ /** Viewport the chrome layers were composed against. */
2935
+ viewport: ViewportConfig;
2936
+ /** Chrome layers painted BEHIND the block, in frame-local coordinates. */
2937
+ layers: Layer[];
2938
+ /**
2939
+ * Chrome layers painted ON TOP of the block — borders and accents, which
2940
+ * a template's own opaque surface would otherwise bury. Composed against
2941
+ * {@link DashboardCellFrame.overlayViewport} and positioned at the
2942
+ * block's own rect, so the same clip rounds them to the card's corners.
2943
+ */
2944
+ overlayLayers: Layer[];
2945
+ /** Viewport the overlay layers were composed against (the card box). */
2946
+ overlayViewport: ViewportConfig;
2947
+ /**
2948
+ * CSS `border-radius` (percentage-based, so it scales with any rendered
2949
+ * size) for the block's content box, matching the card's corners. React
2950
+ * consumers apply it with `overflow: hidden` to clip full-bleed cell art.
2951
+ */
2952
+ contentRadiusPct?: string;
2953
+ }
2954
+ /** One populated dashboard cell. */
2955
+ interface DashboardCell {
2956
+ /** Cell ordinal in the layout (0-based, layout order). */
2957
+ index: number;
2958
+ /** The projected slide block rendered in this cell. */
2959
+ block: Block;
2960
+ /** Index in the candidate block sequence (for keys/debugging). */
2961
+ blockIndex: number;
2962
+ /** Layers materialized against {@link DashboardCell.viewport} (un-prefixed). */
2963
+ layers: Layer[];
2964
+ /**
2965
+ * The block's rect in canvas units. Equals the layout cell under `basic`;
2966
+ * under a card style it is the cell inset by the card's padding ring.
2967
+ */
2968
+ rect: LayerRect;
2969
+ /** Block rect as percentages of the full canvas. */
2970
+ rectPct: DashboardRectPct;
2971
+ /** Style chrome painted behind the block; absent under `basic`. */
2972
+ frame?: DashboardCellFrame;
2973
+ /** The synthetic per-cell viewport the layers were rendered against. */
2974
+ viewport: ViewportConfig;
2975
+ /**
2976
+ * Type-scale multiplier the block rendered with (1, 1.5, or 2) — the
2977
+ * layout stays cell-composed, but themed type renders this much larger
2978
+ * so sparse blocks fill their slot. Already baked into `layers`.
2979
+ */
2980
+ zoom: DashboardZoomLevel;
2981
+ source: LayerMaterializationSource;
2982
+ diagnostic?: LayerMaterializationDiagnostic;
2983
+ }
2984
+ interface DashboardDiagnostic {
2985
+ type: 'overflow' | 'unknown-layout' | 'invalid-cell-assignment' | 'empty-doc';
2986
+ message: string;
2987
+ /** Ids of blocks hidden by an `overflow`. */
2988
+ hiddenBlockIds?: string[];
2989
+ /** The unresolvable id behind an `unknown-layout`. */
2990
+ requestedLayout?: string;
2991
+ }
2992
+ /** The rendered document-title band. */
2993
+ interface DashboardTitle {
2994
+ text: string;
2995
+ rect: LayerRect;
2996
+ rectPct: DashboardRectPct;
2997
+ viewport: ViewportConfig;
2998
+ layers: Layer[];
2999
+ }
3000
+ interface DashboardMaterialization {
3001
+ layout: DashboardLayoutDefinition;
3002
+ layoutSource: 'option' | 'frontmatter' | 'auto';
3003
+ /** The resolved cell style variant. */
3004
+ style: DashboardStyleId;
3005
+ viewport: ViewportConfig;
3006
+ cells: DashboardCell[];
3007
+ /** Null when the title band is disabled or no title resolves. */
3008
+ title: DashboardTitle | null;
3009
+ /** Canvas-level base fill + theme/doc persistent layers, applied once. */
3010
+ backdrop: {
3011
+ fill: string;
3012
+ bottomLayers: Layer[];
3013
+ topLayers: Layer[];
3014
+ };
3015
+ diagnostics: DashboardDiagnostic[];
3016
+ }
3017
+ declare function materializeDashboard(doc: Doc, options?: MaterializeDashboardOptions): DashboardMaterialization;
3018
+ /**
3019
+ * Flatten a materialization into one canvas-level `Layer[]` for non-React
3020
+ * consumers. Every cell/title layer is mapped into its canvas rect with a
3021
+ * unique id prefix (templates reuse ids like `title`, so the prefix is
3022
+ * what keeps the flat canvas collision-free). Paint order: backdrop
3023
+ * bottom, then per cell its style chrome followed by its block, then the
3024
+ * title band and the backdrop top.
3025
+ *
3026
+ * The flat canvas has no clipping concept, so a cell's full-bleed art is
3027
+ * not rounded to its card corners here the way a React host clips it with
3028
+ * `frame.contentRadiusPct`.
3029
+ */
3030
+ declare function composeDashboardLayers(materialization: DashboardMaterialization): Layer[];
3031
+
3032
+ /**
3033
+ * Flashcard-mode projection.
3034
+ *
3035
+ * Flashcards are a study rendition of the existing heading-driven Block tree,
3036
+ * not a visual template. The projection keeps rich Markdown nodes and nested
3037
+ * blocks intact so React and future exporters can render the same authored
3038
+ * content without reducing cards to strings.
3039
+ */
3040
+
3041
+ type FlashcardKind = 'basic' | 'multiple-choice';
3042
+ type FlashcardSourceMode = 'auto' | 'explicit';
3043
+ interface FlashcardFace {
3044
+ /** Blocks rendered on this face, in source order. */
3045
+ blocks: Block[];
3046
+ }
3047
+ interface FlashcardChoice {
3048
+ id: string;
3049
+ sourceBlockId: string;
3050
+ content: FlashcardFace;
3051
+ correct: boolean;
3052
+ }
3053
+ interface Flashcard {
3054
+ id: string;
3055
+ sourceBlockId: string;
3056
+ kind: FlashcardKind;
3057
+ /** Optional parent heading used as a compact deck/category label. */
3058
+ label?: string;
3059
+ front: FlashcardFace;
3060
+ /** Basic-card answer, or the correct answer for a multiple-choice card. */
3061
+ back: FlashcardFace;
3062
+ choices?: FlashcardChoice[];
3063
+ /** Parent-owned body shown after reveal/grading for multi-child cards. */
3064
+ explanation?: FlashcardFace;
3065
+ }
3066
+ type FlashcardDiagnosticCode = 'empty-front' | 'empty-back' | 'multiple-choice-needs-distractor' | 'multiple-correct-answers';
3067
+ interface FlashcardDiagnostic {
3068
+ severity: 'warning' | 'error';
3069
+ code: FlashcardDiagnosticCode;
3070
+ message: string;
3071
+ blockId: string;
3072
+ }
3073
+ interface FlashcardDeck {
3074
+ title?: string;
3075
+ cards: Flashcard[];
3076
+ diagnostics: FlashcardDiagnostic[];
3077
+ }
3078
+ interface MaterializeFlashcardsOptions {
3079
+ /**
3080
+ * `auto` (default) discovers card-shaped blocks and honors explicit study
3081
+ * metadata. `explicit` includes only blocks marked `study=flashcard` or
3082
+ * `study=multiple-choice-flashcard` (and their class/template aliases).
3083
+ */
3084
+ source?: FlashcardSourceMode;
3085
+ }
3086
+ type FlashcardMarker = FlashcardKind | 'group';
3087
+ /** Resolve an authored study marker without changing the visual template model. */
3088
+ declare function resolveFlashcardMarker(block: Block): FlashcardMarker | undefined;
3089
+ /** Convert a nested Doc into a deterministic study deck. */
3090
+ declare function materializeFlashcards(doc: Doc, options?: MaterializeFlashcardsOptions): FlashcardDeck;
3091
+
2420
3092
  /**
2421
3093
  * Audio Mapping
2422
3094
  *
@@ -3239,4 +3911,4 @@ declare function treeFromMarkdownList(list: MarkdownList): Tree;
3239
3911
  /** Find the first top-level markdown list in a block's body, if any. */
3240
3912
  declare function findFirstList(contents: MarkdownBlockNode[] | undefined): MarkdownList | undefined;
3241
3913
 
3242
- export { ASCII_CHAR_H, ASCII_CHAR_W, ASCII_DIAGRAM_FENCE_LANGS, ASCII_TIMELINE_FENCE_LANGS, type AccentLayout, 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, type BlockLayerMaterialization, type BlockMediaLayoutPolicy, type BuildPreviewDocOptions, type BuiltInTemplateName, CONTAINER_TEMPLATES, COVER_SLIDE_FRONTMATTER_KEYS, COVER_SLIDE_TEMPLATE_OPTIONS, type ClipBox, type ConnectorAnchor, type ConnectorPort, type ConnectorRouting, type ConnectorSnapPoint, type CoverBlockInput, type CoverSlidePlayback, type CoverSlideSettings, type CoverSlideTemplate, type CoverSlideTemplateOption, DEFAULT_COVER_SLIDE_SETTINGS, DEFAULT_LAYOUT, DIAGRAM_LABEL_HORIZONTAL_PADDING, DIAGRAM_LABEL_LINE_HEIGHT, DIAGRAM_LABEL_MIN_FONT_SIZE, DIAGRAM_LABEL_VERTICAL_PADDING, type DataFenceParseResult, 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, type FirstImage, type InputCoercion, type LayerMaterializationDiagnostic, type LayerMaterializationFailureMode, type LayerMaterializationSource, type LayoutLayerDefaults, type LayoutLayersResult, MAX_COVER_SLIDE_DURATION_SECONDS, type MarkdownToDocOptions, type MarkdownValidationResult, type MaterializeBlockLayersOptions, type NarrationResolution, type NativeMediaLayout, type NoMediaLayout, PAGE_BASE_CSS, PATH_SHAPE_KINDS, PageSection, type PageSectionContext, type PageSectionDraft, PersistentLayerConfig, type RenderAsciiDiagramOptions, type RenderAsciiTimelineOptions, type RenderTreeOptions, type RepairResult, 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, adjustY, anchorPoint, applyNarrationTiming, applyRenderStyleToLayers, asciiCellToCanvas, asciiDiagramFromBlocks, asciiDiagramFromTemplateData, asciiDiagramToTemplateData, asciiTimelineToTemplateData, autoTemplatePreservesContent, bigText, buildPageCss, buildPageCssVars, buildPreviewDoc, buildRegistry, canvasToAsciiCell, clipEndpoints, clipPoint, coerceTemplateParams, comparisonBar, computeDiagramLayout, computeDrawingLayout, computeLayoutLayers, connectorPath, contentBlock, countBlocks, coverBlock, createAccentLayers, cssFilterForTreatment, dataTable, dateEvent, definitionCard, deriveTemplateInputs, detectAsciiDiagram, detectAsciiTimeline, detectTree, diagramBlock, docToMarkdown, documentTitleFromFileName, drawingBlock, expandCoverBlock, expandDocBlocks, expandPersistentLayers, extractBlockquoteText, extractBodyPlainText, extractEmbeddedVideos, extractFirstEmbeddedVideo, extractFirstImage, extractImages, extractListItems, extractRichListItems, extractTableData, extractTableFromContents, factCard, fallbackBlockLayers, findFirstList, findFirstTable, fitBigTextSize, fitDiagramLabel, flattenBlocks, flattenRenderableBlocks, fullBleedQuote, getAccentLayout, getAnimationProgress, getAnimationStyle, getAvailableTemplates, getBlockBodyText, getBlockDepth, getBlockMediaLayoutPolicy, getDefaultAnimation, getDefaultAnimationDuration, getOverlayOpacity, getPersistentLayersFromTheme, getPinnedBlockMeta, getTemplateHint, getThemeFont, getTransitionClass, hasTemplate, imageWithCaption, isAsciiDiagramFence, isAsciiTimelineFence, isContainerTemplate, isDataFence, isEligibleAsciiFenceLang, isEligibleAsciiTimelineFenceLang, isEligibleTreeFenceLang, isExplicitDiagramLang, isExplicitTimelineLang, isExplicitTreeLang, isRepairableDiagram, isShapeName, isTemplatedPageBlock, isTreeFence, isWrappedFlowTimelineSource, layoutBlock, leftFeature, lineStyleDasharray, lintTemplateParams, listBlock, mapBlock, markdownToDoc, markerPath, materializeBlockLayers, nearestSnapPoint, normalizeShapeKind, pageStyleDataAttributes, parseAsciiDiagram, parseAsciiTimeline, parseAsciiTimelineWithStats, parseDataFence, parseTree, parseWrappedFlowTimeline, parseYamlSubset, photoGrid, pullQuote, quoteBlock, readCustomTemplatesFromFrontmatter, readCustomThemesFromFrontmatter, renderAsciiDiagram, renderAsciiTimeline, renderTree, repairAsciiDiagram, replaceDataFence, resolveAudioMapping, resolveColorScheme, resolveCoverSlideSettings, resolvePageBlock, resolvePersistentLayers, resolveTemplateName, resolveThemeForDoc, rightFeature, scaleAnimationDuration, scoreTextSimilarity, sectionExtractors, sectionHeader, shapePath, shouldUseShadow, snapEndpoints, snapPoints, statHighlight, templateRegistry, themeWantsAmbientMotion, themedEntrance, themedFontSize, themedImageTreatment, themedScrim, themedSurfaceGradient, timelineBlock, titleBlock, treeBlock, treeFromMarkdownList, treeFromTemplateData, treeToTemplateData, twoColumn, validateMarkdownDoc, validateMarkdownSource, videoPullQuote, videoWithCaption, wrapWithPersistentLayers, writeCustomTemplatesToFrontmatter, writeCustomThemesToFrontmatter };
3914
+ export { ASCII_CHAR_H, ASCII_CHAR_W, ASCII_DIAGRAM_FENCE_LANGS, ASCII_TIMELINE_FENCE_LANGS, type AccentLayout, 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 BuiltInTemplateName, CONTAINER_TEMPLATES, COVER_SLIDE_FRONTMATTER_KEYS, COVER_SLIDE_TEMPLATE_OPTIONS, type ClipBox, type ConnectorAnchor, type ConnectorPort, type ConnectorRouting, type ConnectorSnapPoint, 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, DEFAULT_COVER_SLIDE_SETTINGS, DEFAULT_DASHBOARD_SETTINGS, DEFAULT_DASHBOARD_STYLE, DEFAULT_LAYOUT, 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 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 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, PersistentLayerConfig, type RenderAsciiDiagramOptions, type RenderAsciiTimelineOptions, type RenderTreeOptions, type RepairResult, type ResolvedDashboardCell, 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, adjustY, anchorPoint, applyNarrationTiming, applyRenderStyleToLayers, asciiCellToCanvas, asciiDiagramFromBlocks, asciiDiagramFromTemplateData, asciiDiagramToTemplateData, asciiTimelineToTemplateData, autoTemplatePreservesContent, bigText, buildDashboardCellChrome, buildPageCss, buildPageCssVars, buildPreviewDoc, buildRegistry, canvasToAsciiCell, chooseDashboardLayout, clipEndpoints, clipPoint, coerceTemplateParams, comparisonBar, composeDashboardLayers, computeDiagramLayout, computeDrawingLayout, computeLayoutLayers, connectorPath, contentBlock, countBlocks, coverBlock, createAccentLayers, cssFilterForTreatment, dashboardCanvasFill, dashboardCellAccent, dataTable, dateEvent, definitionCard, deriveTemplateInputs, desiredCellZoom, detectAsciiDiagram, detectAsciiTimeline, detectTree, diagramBlock, docToMarkdown, documentTitleFromFileName, drawingBlock, expandCoverBlock, expandDocBlocks, expandPersistentLayers, extractBlockquoteText, extractBodyPlainText, extractEmbeddedVideos, extractFirstEmbeddedVideo, extractFirstImage, extractImages, extractListItems, extractRichListItems, extractTableData, extractTableFromContents, factCard, fallbackBlockLayers, findFirstList, findFirstTable, fitBigTextSize, fitDiagramLabel, flattenBlocks, flattenRenderableBlocks, fullBleedQuote, getAccentLayout, getAnimationProgress, getAnimationStyle, getAvailableTemplates, getBlockBodyText, getBlockDepth, getBlockMediaLayoutPolicy, getDashboardLayoutSummaries, getDefaultAnimation, getDefaultAnimationDuration, getOverlayOpacity, getPersistentLayersFromTheme, getPinnedBlockMeta, getTemplateHint, getThemeFont, getTransitionClass, hasTemplate, imageWithCaption, isAsciiDiagramFence, isAsciiTimelineFence, isContainerTemplate, isDataFence, isEligibleAsciiFenceLang, isEligibleAsciiTimelineFenceLang, isEligibleTreeFenceLang, isExplicitDiagramLang, isExplicitTimelineLang, isExplicitTreeLang, isRepairableDiagram, isShapeName, isTemplatedPageBlock, isTreeFence, isWrappedFlowTimelineSource, layoutBlock, layoutCapacity, leftFeature, lineStyleDasharray, lintTemplateParams, listBlock, listDashboardLayouts, mapBlock, markdownBlockSeparatorLines, markdownToDoc, markerPath, materializeBlockLayers, materializeDashboard, materializeFlashcards, nearestSnapPoint, normalizeDashboardZoom, normalizeShapeKind, pageStyleDataAttributes, parseAsciiDiagram, parseAsciiTimeline, parseAsciiTimelineWithStats, parseDataFence, parseTree, parseWrappedFlowTimeline, parseYamlSubset, photoGrid, pullQuote, quoteBlock, readCustomTemplatesFromFrontmatter, readCustomThemesFromFrontmatter, readDashboardLayoutsFromFrontmatter, renderAsciiDiagram, renderAsciiTimeline, renderMarkdownBlocksHtml, renderTree, repairAsciiDiagram, replaceDataFence, resolveAudioMapping, resolveColorScheme, resolveCoverSlideSettings, resolveDashboardLayoutDefinition, resolveDashboardSettings, resolveDashboardStyleId, resolveDashboardZooms, 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, transposeCells, treeBlock, treeFromMarkdownList, treeFromTemplateData, treeToTemplateData, twoColumn, validateDashboardLayoutDefinition, validateMarkdownDoc, validateMarkdownSource, videoPullQuote, videoWithCaption, wrapWithPersistentLayers, writeCustomTemplatesToFrontmatter, writeCustomThemesToFrontmatter, writeDashboardLayoutsToFrontmatter };