@bendyline/squisq-editor-react 2.10.3 → 2.11.1

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.
@@ -15,6 +15,8 @@ var RE_LEGACY_ITALIC_STAR = /(?<!\*)\*(?![\s*])(.+?)(?<![\s*])([ \t]+)\*(?=$|[^\
15
15
  var ESCAPABLE_MD_CHARS = ["*", "_", "~", "\\"];
16
16
  var RE_MD_ESCAPE = /\\([*_~\\])/g;
17
17
  var RE_INLINE_CODE = /`(.+?)`/g;
18
+ var BACKTICK = "`";
19
+ var FENCE = "```";
18
20
  var RE_IMAGE = /!\[(.*?)\]\((.+?)\)/g;
19
21
  var RE_MENTION = /@\[([^\]]+?)\]\(([a-z][a-z0-9+.-]*)\\?:([^)\s]+)\)/gi;
20
22
  var RE_MENTION_TAG = /<span\b[^>]*?\bdata-mention\b[^>]*?>(?:<[^>]+>)*([^<]*)<\/span>/gi;
@@ -26,10 +28,50 @@ var RE_VERT_ALIGN_TAG = /<(sup|sub)>((?:(?!<\/?(?:sup|sub)>)[\s\S])*)<\/\1>/gi;
26
28
  var RE_A_TAG = /<a\b([^>]*)>(.*?)<\/a>/g;
27
29
  var RE_IMG_TAG = /<img\b([^>]*)>/g;
28
30
  var RE_STRIP_TAGS = /<[^>]+>/g;
31
+ function joinWrappedCodeSpans(lines) {
32
+ if (!lines.some((line) => line.includes(BACKTICK))) return lines;
33
+ const joined = [];
34
+ let inFence = false;
35
+ for (let i = 0; i < lines.length; i++) {
36
+ const line = lines[i];
37
+ if (line.startsWith(FENCE)) {
38
+ inFence = !inFence;
39
+ joined.push(line);
40
+ continue;
41
+ }
42
+ if (inFence || !leavesCodeSpanOpen(line)) {
43
+ joined.push(line);
44
+ continue;
45
+ }
46
+ let merged = line;
47
+ let next = i + 1;
48
+ let closed = false;
49
+ while (next < lines.length) {
50
+ const candidate = lines[next];
51
+ if (candidate.trim() === "" || candidate.startsWith(FENCE)) break;
52
+ merged = `${merged} ${candidate.replace(/^[ \t]+/, "")}`;
53
+ next++;
54
+ if (!leavesCodeSpanOpen(merged)) {
55
+ closed = true;
56
+ break;
57
+ }
58
+ }
59
+ if (!closed) {
60
+ joined.push(line);
61
+ continue;
62
+ }
63
+ joined.push(merged);
64
+ i = next - 1;
65
+ }
66
+ return joined;
67
+ }
68
+ function leavesCodeSpanOpen(text) {
69
+ return text.replace(RE_INLINE_CODE, "").includes(BACKTICK);
70
+ }
29
71
  function markdownToTiptap(markdown) {
30
72
  if (!markdown.trim()) return "<p></p>";
31
73
  const html = markdown.replace(/\r\n/g, "\n").replace(/\r/g, "\n");
32
- const lines = html.split("\n");
74
+ const lines = joinWrappedCodeSpans(html.split("\n"));
33
75
  const frontmatterEnd = findFrontmatterEnd(lines);
34
76
  const outputBlocks = [];
35
77
  let inCodeBlock = false;
@@ -403,7 +445,7 @@ function tiptapToMarkdown(html) {
403
445
  while ((cellExec = cellRegex.exec(rowHtml)) !== null) {
404
446
  const tag = cellExec[1];
405
447
  const attrs = cellExec[2];
406
- const content = htmlToInline(cellExec[3].replace(/<\/?p>/g, ""));
448
+ const content = htmlToTableCell(cellExec[3].replace(/<\/?p>/g, ""));
407
449
  const alignExec = attrs.match(/text-align:\s*(left|center|right)/);
408
450
  cells.push({
409
451
  content,
@@ -789,6 +831,7 @@ function inlineToHtml(text) {
789
831
  const name = tag.toLowerCase();
790
832
  return stash(`<${name}>${inlineToHtml(inner)}</${name}>`);
791
833
  });
834
+ staged = staged.replace(/<br\s*\/?>/gi, () => stash("<br>"));
792
835
  staged = staged.replace(
793
836
  RE_IMAGE,
794
837
  (_m, alt, src) => stash(`<img alt="${escapeHtml(alt)}" src="${escapeHtml(src)}">`)
@@ -1031,6 +1074,9 @@ function htmlToInline(html) {
1031
1074
  result = vault.restore(result);
1032
1075
  return restoreLeadingSpaces(unescapeHtml(result));
1033
1076
  }
1077
+ function htmlToTableCell(html) {
1078
+ return htmlToInline(html).replace(/ {2}\n/g, "<br>");
1079
+ }
1034
1080
  function preserveLeadingSpaces(html) {
1035
1081
  return html.replace(/^ +/, (spaces) => "&nbsp;".repeat(spaces.length));
1036
1082
  }
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  markdownToTiptap,
3
3
  tiptapToMarkdown
4
- } from "./chunk-TCLNRATG.js";
4
+ } from "./chunk-A2W4GYPG.js";
5
5
 
6
6
  // src/jsonEditor/JsonEditorContext.tsx
7
7
  import { createContext, useContext, useEffect, useMemo } from "react";
package/dist/index.d.ts CHANGED
@@ -1,8 +1,8 @@
1
- import { C as CodeContext, E as EditorHostMode, S as SceneTextChannel } from './shell-DSHMZvnK.js';
2
- export { B as BlockTagVisibility, a as CodeContextSection, b as CoverImageSaveOutput, D as DashboardImageSaveOutput, c as DocumentLinkCandidate, d as DocumentLinkProvider, e as EditorActions, f as EditorColorScheme, g as EditorContextMenuContext, h as EditorContextMenuItem, i as EditorContextMenuItemVisibility, j as EditorContextMenuProvider, k as EditorContextMenuProviderProps, l as EditorContextValue, m as EditorMode, n as EditorProvider, o as EditorProviderProps, p as EditorShell, q as EditorShellProps, r as EditorState, s as EditorView, I as ImageDisplayMode, L as LayoutMode, M as MentionCandidate, t as MentionProvider, P as PreviewPanel, u as PreviewPanelProps, R as RawEditor, v as RawEditorProps, T as ThemeInheritance, V as ViewPreferences, W as WriteCanvasSettings, w as WysiwygEditor, x as WysiwygEditorProps, y as useEditorContext, z as useEditorContextMenuItems } from './shell-DSHMZvnK.js';
1
+ import { C as CodeContext, E as EditorHostMode, S as SceneTextChannel, a as CalcEngineFactory, b as CsvSourceMeta, X as XlsxSourceMeta, F as FormulaEditRecord } from './shell-CJkHDwpz.js';
2
+ export { B as BlockTagVisibility, c as CodeContextSection, d as CoverImageSaveOutput, D as DashboardImageSaveOutput, e as DocumentLinkCandidate, f as DocumentLinkProvider, g as EditorActions, h as EditorColorScheme, i as EditorContextMenuContext, j as EditorContextMenuItem, k as EditorContextMenuItemVisibility, l as EditorContextMenuProvider, m as EditorContextMenuProviderProps, n as EditorContextValue, o as EditorMode, p as EditorProvider, q as EditorProviderProps, r as EditorShell, s as EditorShellProps, t as EditorState, u as EditorView, v as FormulaSessionOptions, I as ImageDisplayMode, w as IngestedSidecar, L as LayoutMode, M as MentionCandidate, x as MentionProvider, P as PreviewPanel, y as PreviewPanelProps, R as RawEditor, z as RawEditorProps, T as ThemeInheritance, V as ViewPreferences, W as WriteCanvasSettings, A as WysiwygEditor, G as WysiwygEditorProps, H as XLSX_LOCKED_REASON, J as XlsxFormulaSession, K as createXlsxFormulaSession, N as ingestSidecarBytes, O as useEditorContext, Q as useEditorContextMenuItems } from './shell-CJkHDwpz.js';
3
3
  import * as react_jsx_runtime from 'react/jsx-runtime';
4
4
  import * as react from 'react';
5
- import { ReactNode, CSSProperties } from 'react';
5
+ import { ReactNode, CSSProperties, ReactElement } from 'react';
6
6
  import { Doc, ScheduledClip, VideoPlacement, VideoPipSize, VideoPipShape, VideoPipPosition, MediaProvider, Theme, CustomTemplateDefinition, ThemeSeedColors, ViewportPreset, ViewportConfig, Block, MediaEntry, DiagramEdgeAnchor } from '@bendyline/squisq/schemas';
7
7
  import { ContentContainer } from '@bendyline/squisq/storage';
8
8
  export { CanvasRect, ImageEditor, ImageEditorAction, ImageEditorProps, ImageEditorState, ImageEditorTool, ImageViewer, ImageViewerProps, UseImageEditorOptions, UseImageEditorReturn, imageEditorReducer, initialImageEditorState, useImageEditor } from './image-editor/index.js';
@@ -23,6 +23,8 @@ import { Transaction, PluginKey } from '@tiptap/pm/state';
23
23
  import { Node } from '@tiptap/pm/model';
24
24
  import { RenderResult } from 'mermaid';
25
25
  import { FenceRendererMap } from '@bendyline/squisq/fence';
26
+ import { TableViewState } from '@bendyline/squisq/table';
27
+ import { EditJournal } from '@bendyline/squisq-grid-react';
26
28
  export { JsonEditor, JsonEditorProps } from './json-editor/index.js';
27
29
  export { C as CameraStreamOptions, D as DEFAULT_RECORDER_DEVICE_SETTINGS, M as MediaDeviceInventory, R as RecordedBookmark, a as RecordedMediaKind, b as RecorderAudioDeviceSettings, c as RecorderButton, d as RecorderButtonProps, e as RecorderCameraDeviceSettings, f as RecorderCameraSaveResult, g as RecorderColorScheme, h as RecorderConstraintMode, i as RecorderDeviceOption, j as RecorderDeviceQuickPicks, k as RecorderDeviceQuickPicksProps, l as RecorderDeviceSettings, m as RecorderDeviceSettingsPanel, n as RecorderDeviceSettingsPanelProps, o as RecorderEncodingSettings, p as RecorderModal, q as RecorderModalProps, r as RecorderNarrationOptions, s as RecorderPanel, t as RecorderPanelProps, u as RecorderSaveResult, v as RecorderScreenAudioSettings, w as RecorderScreenDeviceSettings, x as RecorderSlidesOptions, S as ScreenStreamHandle, y as ScreenStreamOptions, z as SlideTimingSaveResult, T as TimingJson, A as buildRecorderAudioConstraints, B as buildRecorderCameraConstraints, E as buildRecorderScreenAudioConstraints, F as buildRecorderScreenConstraints, G as buildTimingJson, H as encodeTimingJson, I as hasRecorderDeviceChoice, J as recordedMediaKind, K as recorderBitsPerSecond, L as recorderDeviceGroups, N as recorderDeviceOptions, O as requestCameraStream, P as requestMicStream, Q as requestScreenStream, U as timingPathFor, V as useMediaDevices, W as useStreamPreview } from './recorder-GrEh4xE8.js';
28
30
  import { R as RecorderState } from './useNarrationStage-B6r9Zlq-.js';
@@ -31,6 +33,8 @@ export { EYE_LINE_FRACTION, NarrationSavePlan, NarrationSaveResult, NarrationSta
31
33
  export { H as HarperProofingConfig, P as ProofingCapability, a as ProofingDocumentRef, b as ProofingIgnoreStore, c as ProofingLanguage, d as ProofingLintOptions, e as ProofingProvider, f as ProofingProviderFactory } from './types-B_aHRuSc.js';
32
34
  export { createHarperProofingProvider } from './proofing/index.js';
33
35
  export { PROOF_DIALECTS, PROOF_FRONTMATTER_KEYS, ProofCategory, ProofDialect, ProofFinding, ProofRange, ProofSuggestion, ProofSuggestionKind } from '@bendyline/squisq/proof';
36
+ import '@bendyline/squisq-calc';
37
+ import '@bendyline/squisq-formats/xlsx';
34
38
  import '@bendyline/squisq/versions';
35
39
  import '@bendyline/squisq/imageEdit';
36
40
  import '@bendyline/squisq/jsonForm';
@@ -422,9 +426,12 @@ interface FileKind {
422
426
  /**
423
427
  * 'markdown' keeps the full editor (WYSIWYG + Preview tabs); 'code' is
424
428
  * Monaco-only; 'image' renders a dedicated image viewer with no text
425
- * editing surface.
429
+ * editing surface; 'data' marks a tabular data file (csv/tsv/parquet) the
430
+ * host should open as a sidecar-referencing document (or fall back to a
431
+ * plaintext Monaco view) rather than pasting raw bytes into the WYSIWYG
432
+ * markdown editor.
426
433
  */
427
- mode: 'markdown' | 'code' | 'image';
434
+ mode: 'markdown' | 'code' | 'image' | 'data';
428
435
  /** Monaco language ID — passed to `<Editor defaultLanguage={...} />`. */
429
436
  language: string;
430
437
  }
@@ -1350,8 +1357,13 @@ interface MediaBinProps {
1350
1357
  * URLs that the host otherwise exposes to the browser.
1351
1358
  */
1352
1359
  allowBinaryDownloads?: boolean;
1360
+ /**
1361
+ * Relative path of an entry to highlight and scroll into view — how the
1362
+ * data card's "Show in Files" lands on the file it names.
1363
+ */
1364
+ highlightPath?: string | null;
1353
1365
  }
1354
- declare function MediaBin({ mediaProvider, isDark, refreshKey, usedMediaPaths, onMediaUploaded, onMediaRemoved, onCountChange, onRecord, isRecorderOpen, allowBinaryDownloads, }: MediaBinProps): react_jsx_runtime.JSX.Element;
1366
+ declare function MediaBin({ mediaProvider, isDark, refreshKey, usedMediaPaths, onMediaUploaded, onMediaRemoved, onCountChange, onRecord, isRecorderOpen, allowBinaryDownloads, highlightPath, }: MediaBinProps): react_jsx_runtime.JSX.Element;
1355
1367
 
1356
1368
  interface StatusBarProps {
1357
1369
  /** Additional class name */
@@ -1383,7 +1395,7 @@ declare function TooltipLayer(): react.ReactPortal | null;
1383
1395
  * classifies dragged file types (media vs text), and dispatches
1384
1396
  * drop events to callers.
1385
1397
  */
1386
- type FileCategory = 'media' | 'text' | 'unknown';
1398
+ type FileCategory = 'media' | 'text' | 'data' | 'unknown';
1387
1399
  type DragContentType = 'media' | 'text' | 'mixed' | null;
1388
1400
  type DropTarget = 'media' | 'insert' | 'replace';
1389
1401
  declare function classifyFile(file: {
@@ -1439,12 +1451,13 @@ declare function DropZoneOverlay({ dragContentType, zoneProps, hasMediaProvider,
1439
1451
  */
1440
1452
 
1441
1453
  /**
1442
- * Partition an array of files into media and text categories.
1454
+ * Partition an array of files into media, text, and data categories.
1443
1455
  * Files with unknown type are skipped.
1444
1456
  */
1445
1457
  declare function partitionFiles(files: File[]): {
1446
1458
  media: File[];
1447
1459
  text: File[];
1460
+ data: File[];
1448
1461
  };
1449
1462
  /**
1450
1463
  * Add media files to a MediaProvider. Returns the relative paths
@@ -1470,6 +1483,16 @@ declare function partitionFiles(files: File[]): {
1470
1483
  * problematic file doesn't abort a multi-file drop.
1471
1484
  */
1472
1485
  declare function processMediaFiles(files: File[], mediaProvider: MediaProvider): Promise<(string | null)[]>;
1486
+ /**
1487
+ * Store data files (csv/tsv/xlsx/parquet) into the container behind a
1488
+ * MediaProvider, under a caller-supplied directory prefix — conventionally
1489
+ * `dataSidecarPrefix(docBasename)`, i.e. `<docbasename>_files/data/`.
1490
+ *
1491
+ * Same defensive read handling and index-aligned `null` slots as
1492
+ * {@link processMediaFiles}. Name collisions inside the prefix get a
1493
+ * ` -1`, `-2`, … suffix rather than overwriting an existing sidecar.
1494
+ */
1495
+ declare function processDataFiles(files: File[], mediaProvider: MediaProvider, dataDirPrefix: string): Promise<(string | null)[]>;
1473
1496
  /**
1474
1497
  * Read a text-content file and return its content as a markdown string.
1475
1498
  *
@@ -1775,7 +1798,12 @@ interface FenceBlockEntry {
1775
1798
  * (and may use a lenient re-parse gate); a position absent from it is a NEW
1776
1799
  * fence that must pass full detection.
1777
1800
  */
1778
- declare function mapFenceEntries(tr: Transaction, previous: readonly FenceBlockEntry[], doc: Node): Map<number, string>;
1801
+ declare function mapFenceEntries(tr: Transaction, previous: readonly FenceBlockEntry[], doc: Node,
1802
+ /**
1803
+ * Node type the family claims. Defaults to `'codeBlock'` (every fence
1804
+ * family); the data-card family passes `'paragraph'`.
1805
+ */
1806
+ nodeTypeName?: string): Map<number, string>;
1779
1807
 
1780
1808
  /**
1781
1809
  * AsciiDiagramExtension — Tiptap/ProseMirror plugin that turns code blocks
@@ -2559,6 +2587,13 @@ interface CodeSnippetExtensionOptions {
2559
2587
  * change freely behind the host extension's getter.
2560
2588
  */
2561
2589
  reservedLanguages?: readonly string[];
2590
+ /**
2591
+ * Getter for the host clipboard adapter used by each snippet's Copy
2592
+ * button. A getter (not the handler itself) so a host can swap its
2593
+ * clipboard implementation without re-configuring the editor — the
2594
+ * same live-behind-a-getter contract `renderers` uses.
2595
+ */
2596
+ onCopyCode?: () => CodeBlockCopyHandler | undefined;
2562
2597
  }
2563
2598
  declare const CODE_SNIPPET_KEY: PluginKey<CodeSnippetPluginState>;
2564
2599
  declare function isCodeSnippetNode(node: Node, reserved?: ReadonlySet<string>): boolean;
@@ -2571,8 +2606,14 @@ interface CodeSnippetWidgetProps {
2571
2606
  host?: HTMLElement | null;
2572
2607
  /** Focus this newly inserted snippet after Monaco has mounted. */
2573
2608
  focusOnMount?: boolean;
2609
+ /**
2610
+ * Getter for the host clipboard adapter. Read at click time so a host can
2611
+ * swap its implementation without remounting the widget. When it yields
2612
+ * nothing, the button falls back to `navigator.clipboard`.
2613
+ */
2614
+ onCopyCode?: () => CodeBlockCopyHandler | undefined;
2574
2615
  }
2575
- declare function CodeSnippetWidget({ editor, blockId, host, focusOnMount, }: CodeSnippetWidgetProps): react_jsx_runtime.JSX.Element | null;
2616
+ declare function CodeSnippetWidget({ editor, blockId, host, focusOnMount, onCopyCode, }: CodeSnippetWidgetProps): react_jsx_runtime.JSX.Element | null;
2576
2617
 
2577
2618
  /** Lossless edits for language-tagged code fences. */
2578
2619
 
@@ -2823,8 +2864,16 @@ declare const HostFenceExtension: Extension<HostFenceExtensionOptions, any>;
2823
2864
  /**
2824
2865
  * Every event a mounted fence widget must keep to itself. Ordered
2825
2866
  * pointer → key → text-input → composition → clipboard.
2867
+ *
2868
+ * `copy` belongs with `cut`/`paste`: ProseMirror installs its own `copy`
2869
+ * handler on `view.dom` that serializes the DOCUMENT selection into the
2870
+ * clipboard, and since it sits on an ancestor it runs after a widget's own
2871
+ * copy handler — whichever `setData` runs last wins, so a Ctrl/Cmd-C inside
2872
+ * a widget (a selected grid range, a diagram label field) would ship the
2873
+ * document selection instead of the widget's. Its absence while `cut` and
2874
+ * `paste` were contained was an oversight, not a decision.
2826
2875
  */
2827
- declare const FENCE_WIDGET_CONTAINED_EVENTS: readonly ["pointerdown", "mousedown", "keydown", "keyup", "beforeinput", "input", "change", "compositionstart", "compositionupdate", "compositionend", "paste", "cut"];
2876
+ declare const FENCE_WIDGET_CONTAINED_EVENTS: readonly ["pointerdown", "mousedown", "keydown", "keyup", "beforeinput", "input", "change", "compositionstart", "compositionupdate", "compositionend", "copy", "paste", "cut"];
2828
2877
  /**
2829
2878
  * Stop every contained event at `container` so interaction inside a mounted
2830
2879
  * fence widget never reaches the ProseMirror editor that hosts it.
@@ -2834,6 +2883,231 @@ declare const FENCE_WIDGET_CONTAINED_EVENTS: readonly ["pointerdown", "mousedown
2834
2883
  */
2835
2884
  declare function containFenceWidgetEvents(container: HTMLElement): void;
2836
2885
 
2886
+ /**
2887
+ * DataCardExtension — the Write-view "rectangle" for data sidecar files.
2888
+ *
2889
+ * A paragraph whose entire content is one link to a relative data file
2890
+ * (`[q3.csv](report_files/data/q3.csv)` — the graceful-degradation body link
2891
+ * under a `{[dataTable src=…]}` heading) is hidden and a summary card mounts
2892
+ * in its place: file name, size, rows × cols, and a small preview.
2893
+ *
2894
+ * Structurally a sibling of `fenceWidgets/HostFenceExtension`, claiming
2895
+ * PARAGRAPHS instead of code fences: same position registry with stable
2896
+ * synthetic ids (via the generalized `mapFenceEntries`), same hide-the-node
2897
+ * decoration + React-root widget with `containFenceWidgetEvents`.
2898
+ *
2899
+ * The claim predicate is synchronous and doc-content-only (relative href +
2900
+ * data extension) — never an async listMedia consultation, so plugin state
2901
+ * stays deterministic per transaction. A claimed card whose file is missing
2902
+ * renders the error state instead of un-claiming.
2903
+ *
2904
+ * READ-ONLY by design in this phase: the card never touches the ProseMirror
2905
+ * document, so markdown round-trips byte-identically with the extension
2906
+ * active (`dataCard.test.tsx` holds that contract).
2907
+ */
2908
+
2909
+ type DataCardBlockEntry = FenceBlockEntry;
2910
+ interface DataCardPluginState {
2911
+ entries: DataCardBlockEntry[];
2912
+ decorations: DecorationSet;
2913
+ seq: number;
2914
+ }
2915
+ declare const DATA_CARD_KEY: PluginKey<DataCardPluginState>;
2916
+ interface DataCardExtensionOptions {
2917
+ /** When false, the extension is inert. */
2918
+ enabled?: boolean;
2919
+ /** Getter — stays live without an editor remount (the mentionProvider pattern). */
2920
+ mediaProvider?: () => MediaProvider | null | undefined;
2921
+ /** Getter for the media revision; a bump re-resolves mounted cards. */
2922
+ mediaRevision?: () => number;
2923
+ /**
2924
+ * Getter for the workspace container — enables the grid save flow's
2925
+ * `.versions/data/` pre-save backups. Absent = saves proceed without a
2926
+ * backup (and say so).
2927
+ */
2928
+ container?: () => ContentContainer | null | undefined;
2929
+ /** Open the Files panel focused on a sidecar path. */
2930
+ onOpenFiles?: (relativePath: string) => void;
2931
+ /** Notified after a successful sidecar save (hosts bump mediaRevision). */
2932
+ onMediaSaved?: () => void;
2933
+ /** Getter for the calc backend of formula sessions (default in-house). */
2934
+ calcEngineFactory?: () => CalcEngineFactory | null | undefined;
2935
+ }
2936
+ /**
2937
+ * The single data-file href a paragraph is entirely made of, or null.
2938
+ * Every text child must carry the SAME link href; any unlinked or
2939
+ * non-text content disqualifies the paragraph (an inline link in prose
2940
+ * stays prose).
2941
+ */
2942
+ declare function dataLinkHrefOf(node: Node): string | null;
2943
+ declare function findDataCardBlockPos(editor: Editor, blockId: string): number | null;
2944
+ declare const DataCardExtension: Extension<DataCardExtensionOptions, any>;
2945
+
2946
+ /**
2947
+ * DataCardWidget — the Write-view surface for a data sidecar reference.
2948
+ *
2949
+ * ALWAYS-GRID contract: every `{[dataTable src=…]}` block mounts the real
2950
+ * virtualized grid (`@bendyline/squisq-grid-react`, lazily imported), with
2951
+ * the summary card's identity strip (icon, name, size, rows×cols,
2952
+ * Show-in-Files) as the grid's header. The compact preview card remains
2953
+ * ONLY as the runtime fallback when the grid module fails to load — plus
2954
+ * the unchanged missing/metadata error states.
2955
+ *
2956
+ * View state (sort/filter) binds to the OWNING heading's annotation params
2957
+ * when the heading really owns this sidecar (see viewStateBinding.ts);
2958
+ * otherwise it is session-only and the grid footer says so. CSV/TSV edits
2959
+ * save in place through gridSave.ts; XLSX edits (values, and formulas when
2960
+ * the calc-engine session boots within budget) save through in-place
2961
+ * patching; parquet mounts read-only with a reason chip.
2962
+ *
2963
+ * The underlying PM paragraph is still never touched by the widget itself —
2964
+ * only the heading's `dataTemplateParams` attribute changes, through the
2965
+ * ordinary PM-undoable transaction path.
2966
+ */
2967
+
2968
+ interface DataCardWidgetProps {
2969
+ editor: Editor;
2970
+ blockId: string;
2971
+ getMediaProvider: () => MediaProvider | null | undefined;
2972
+ getMediaRevision: () => number;
2973
+ getContainer?: (() => ContentContainer | null | undefined) | undefined;
2974
+ onOpenFiles?: ((relativePath: string) => void) | undefined;
2975
+ onMediaSaved?: (() => void) | undefined;
2976
+ /** Calc backend for formula sessions (default: the in-house tier). */
2977
+ getCalcEngineFactory?: (() => CalcEngineFactory | null | undefined) | undefined;
2978
+ }
2979
+ declare function DataCardWidget({ editor, blockId, getMediaProvider, getMediaRevision, getContainer, onOpenFiles, onMediaSaved, getCalcEngineFactory, }: DataCardWidgetProps): ReactElement | null;
2980
+
2981
+ /**
2982
+ * Data preview loading for the Write-view data card: bytes → a small
2983
+ * `DataPreview` window via the formats data readers, loaded lazily so a
2984
+ * document with no data references costs nothing. Results are cached by
2985
+ * `(path, mediaRevision)` — a re-uploaded sidecar bumps the revision and
2986
+ * naturally misses the cache.
2987
+ */
2988
+ interface DataPreview {
2989
+ columns: string[];
2990
+ rows: string[][];
2991
+ totalRows: number | null;
2992
+ totalCols: number | null;
2993
+ }
2994
+ /** Lowercase extension of a path, or empty string. */
2995
+ declare function dataExtensionOf(path: string): string;
2996
+ /**
2997
+ * Parse a bounded preview from raw bytes. Returns null when no reader is
2998
+ * available for the extension (e.g. parquet without the optional peer) —
2999
+ * the card then renders its metadata-only state. Parse failures also
3000
+ * resolve to null rather than throwing.
3001
+ */
3002
+ declare function loadDataPreview(bytes: ArrayBuffer, ext: string, opts?: {
3003
+ maxRows?: number;
3004
+ sheet?: string;
3005
+ anchor?: string;
3006
+ }): Promise<DataPreview | null>;
3007
+
3008
+ /**
3009
+ * Binds the grid's view state (sort/filter) to the OWNING heading's
3010
+ * `{[dataTable …]}` annotation params — the document-persisted half of the
3011
+ * "author's sort IS part of the document" contract.
3012
+ *
3013
+ * Persistence guard: params are written ONLY when the owning heading's
3014
+ * template resolves into `TABLE_FED_TEMPLATES` AND its `src` equals the
3015
+ * card's href — a data-link paragraph under a template-less heading gets
3016
+ * SESSION-ONLY view state rather than a fabricated annotation.
3017
+ *
3018
+ * Writes go through the established single-transaction pattern
3019
+ * (`tr.setNodeAttribute(pos, 'dataTemplateParams', serialized || null)`,
3020
+ * see scene/commands/drawingCommands.ts) with canonical
3021
+ * `key=quoteAttrValue(value)` serialization; existing params keep their
3022
+ * order, `sort`/`filter` update in place or append — `paramsEqual` in
3023
+ * docToMarkdown is order-insensitive, so repeat writes stay byte-stable.
3024
+ */
3025
+
3026
+ interface HeadingViewBinding {
3027
+ /** Heading node position, when an owning heading exists. */
3028
+ headingPos: number | null;
3029
+ /** True when sort/filter writes persist to the document. */
3030
+ persisted: boolean;
3031
+ /** All annotation params on the heading (raw, unquoted values). */
3032
+ params: Record<string, string>;
3033
+ /** Raw sort/filter param values, for `parseTableViewState`. */
3034
+ sortRaw?: string;
3035
+ filterRaw?: string;
3036
+ }
3037
+ /** Resolve the owning heading + persistence eligibility for a card. */
3038
+ declare function readHeadingViewBinding(editor: Editor, cardPos: number, href: string): HeadingViewBinding;
3039
+ /**
3040
+ * Write the view state onto the heading annotation (one transaction,
3041
+ * PM-undoable). Returns false when the write couldn't apply (stale pos).
3042
+ */
3043
+ declare function writeHeadingViewState(editor: Editor, cardPos: number, href: string, view: TableViewState): boolean;
3044
+ /** Parse the binding's raw params into a `TableViewState` for the grid. */
3045
+ declare function viewStateFromBinding(binding: HeadingViewBinding, headers: readonly string[]): TableViewState;
3046
+
3047
+ /**
3048
+ * Grid save orchestration for CSV/TSV sidecars: journal → serialized bytes
3049
+ * → in-place overwrite, with a `.versions/data/` pre-save backup.
3050
+ *
3051
+ * Order of operations and their whys:
3052
+ * 1. BACKUP the original bytes first (`buildDataBackupPath`, pruned to the
3053
+ * newest 3 per sidecar) — the only cross-save undo the grid offers.
3054
+ * No container = no backup; the result says so rather than hiding it.
3055
+ * 2. Serialize from the ORIGINAL parsed rows with journal edits splatted
3056
+ * in — unedited cells reproduce the parse product byte-for-byte (values,
3057
+ * not necessarily quoting style), sidestepping float-rendering drift.
3058
+ * Formula neutralization applies ONLY to journal-edited, non-numeric
3059
+ * cells (`serializeCsvRows` defaults `preserve`; blanket escaping would
3060
+ * corrupt every negative number in a re-saved file).
3061
+ * 3. `addMedia(samePath)` with FORK DETECTION: `addMedia` returns the path
3062
+ * the host actually used, and a collision-renaming provider would
3063
+ * silently fork the document's reference — surface it instead.
3064
+ * 4. The caller bumps mediaRevision (previews re-resolve, journal cache
3065
+ * rotates) only on success.
3066
+ */
3067
+
3068
+ interface GridSaveResult {
3069
+ ok: boolean;
3070
+ /** Path actually written (differs from requested on a host fork). */
3071
+ savedPath?: string;
3072
+ /** Human-readable caveats: fork detected, backup skipped, … */
3073
+ notices: string[];
3074
+ error?: string;
3075
+ }
3076
+ interface SaveCsvEditsOptions {
3077
+ path: string;
3078
+ originalBytes: ArrayBuffer;
3079
+ csv: CsvSourceMeta;
3080
+ journal: EditJournal;
3081
+ mediaProvider: MediaProvider;
3082
+ container: ContentContainer | null;
3083
+ }
3084
+ declare function saveCsvEdits(options: SaveCsvEditsOptions): Promise<GridSaveResult>;
3085
+ interface SaveXlsxEditsOptions {
3086
+ path: string;
3087
+ originalBytes: ArrayBuffer;
3088
+ xlsx: XlsxSourceMeta;
3089
+ journal: EditJournal;
3090
+ /** Formula edits from the calc-engine session, keyed `"row:col"`. */
3091
+ formulaEdits?: ReadonlyMap<string, FormulaEditRecord>;
3092
+ mediaProvider: MediaProvider;
3093
+ container: ContentContainer | null;
3094
+ }
3095
+ /**
3096
+ * Save journal edits into an XLSX sidecar via in-place cell patching.
3097
+ *
3098
+ * Journal rowIds are BODY row indices within the region; the region's
3099
+ * anchor (+ header offset) maps them back to sheet addresses. The patcher
3100
+ * is all-or-nothing — a refused cell (formula/date, which the grid's lock
3101
+ * predicate should have prevented) fails the whole save with its reason.
3102
+ */
3103
+ declare function saveXlsxEdits(options: SaveXlsxEditsOptions): Promise<GridSaveResult>;
3104
+
3105
+ /**
3106
+ * Returns the heading position for the block owning a document position.
3107
+ * A block begins at a top-level heading and continues until the next heading.
3108
+ */
3109
+ declare function findOwningHeadingPosition(doc: Node, position: number): number | null;
3110
+
2837
3111
  /**
2838
3112
  * TimelineViewExtension — mounts a WYSIWYG timeline editor over qualifying
2839
3113
  * authored timeline code fences while keeping the fence text as source of
@@ -3106,4 +3380,4 @@ declare function unshownSlidesWarning(total: number, unshown: number): string |
3106
3380
  /** The exact label of the review-state block-timings checkbox. */
3107
3381
  declare const SLIDE_TIMING_CHECKBOX_LABEL = "Update block timings when I save this narration";
3108
3382
 
3109
- export { ALL_PICKER_ENTRIES, type AddTimelineEventOptions, type AddTimelineEventResult, type ApplyAsciiDiagramCommandOptions, type AsciiDiagramBlockEntry, AsciiDiagramExtension, type AsciiDiagramExtensionOptions, type AsciiDiagramPluginState, type AsciiDiagramView, AsciiDiagramWidget, BlockCardView, type BlockCardViewProps, type BlockNavigator, BlockPropertiesPopover, type BlockPropertiesPopoverProps, type BlockRange, type BlockSlice, CODE_SNIPPET_KEY, CODE_SNIPPET_LANGUAGES, CodeContext, CodeContextZones, type CodeSnippetBlockEntry, type CodeSnippetData, CodeSnippetExtension, type CodeSnippetExtensionOptions, type CodeSnippetLanguage, type CodeSnippetPluginState, CodeSnippetWidget, type CodeSnippetWidgetProps, type CustomTemplateContextValue, CustomTemplateProvider, type CustomTemplateProviderProps, type CustomThemeContextValue, CustomThemeProvider, type CustomThemeProviderProps, DEFAULT_MERMAID_DIAGRAM_TYPE, DiagramCanvas, type DiagramCommand, type DiagramData, type DiagramEdge, type DiagramNode, type DirectionModel, type DocCustomTemplates, type DocCustomThemes, DocumentSettingsDialog, type DocumentSettingsDialogProps, type DragContentType, type DropTarget, DropZoneOverlay, type DropZoneOverlayProps, EMPTY_TRANSITION, EditorHostMode, EmojiPicker, type EmojiPickerProps, FENCE_WIDGET_CONTAINED_EVENTS, type FenceBlockEntry, type FileCategory, type FileKind, type FolderEntry, FolderView, type FolderViewProps, HOST_FENCE_KEY, type HeadingTransitionAttrs, HeadingWithTemplate, type HostFenceBlockEntry, HostFenceExtension, type HostFenceExtensionOptions, type HostFencePluginState, ImportThemeSection, type ImportThemeSectionProps, type ImportedThemeResult, InlinePreviewGutter, type InlinePreviewGutterProps, MERMAID_DIAGRAM_KEY, MERMAID_DIAGRAM_TYPES, MERMAID_FLOWCHART_SHAPES, MediaBin, type MediaBinProps, type MediaClipPatch, type MermaidDiagramBlockEntry, MermaidDiagramCanvas, type MermaidDiagramCanvasProps, type MermaidDiagramCategory, type MermaidDiagramData, MermaidDiagramExtension, type MermaidDiagramExtensionOptions, type MermaidDiagramPluginState, type MermaidDiagramPreview, type MermaidDiagramProperty, type MermaidDiagramType, MermaidDiagramTypeThumbnail, MermaidDiagramWidget, type MermaidDiagramWidgetProps, type MermaidEditCapabilities, type MermaidEditableDiagramKind, type MermaidEditableEdge, type MermaidEditableModel, type MermaidEditableNode, type MermaidEditableText, type MermaidEditableTextTarget, type MermaidFlowchartDirection, type MermaidFlowchartModel, type MermaidFlowchartShape, type MermaidFlowchartShapeId, type MermaidNodeCanvasAction, type MermaidRenderResult, type MermaidSelection, MermaidShapePalette, type MermaidShapePaletteProps, type MermaidSourceEditableModel, type MermaidSurfaceScheme, MonacoLanguageLoadOptions, MonacoLanguageRequest, OutlinePanel, type OutlinePanelProps, PICKER_CATEGORIES, type PickerCategory, type PickerEntry, PlainHtmlPreview, type PlainHtmlPreviewProps, PreviewFormatSwitch, PreviewModeMenu, PreviewModeSwitch, type PreviewSettings, PreviewSettingsProvider, PreviewToolbarControls, type PreviewToolbarControlsProps, REPAIRABLE_KEY, type RecorderPanelMode, type RecorderSlide, RecorderSlidesPanel, type RecorderSlidesPanelProps, RecorderState, type RepairableBlockEntry, RepairableDiagramExtension, type RepairableDiagramExtensionOptions, type RepairablePluginState, SLIDE_TIMING_CHECKBOX_LABEL, StatusBar, type StatusBarProps, Subscript, Superscript, TIMELINE_VIEW_KEY, TRANSITION_ENTRIES, TRANSITION_GROUPS, TemplatePicker, ThemeCustomizerPanel, type ThemeCustomizerPanelProps, ThemePicker, type ThemePickerProps, type ThemeSaveExtras, type TimelineBlockEntry, type TimelineCommand, type TimelineCommandResult, TimelineCompositionPanel, type TimelineCompositionPanelProps, TimelineEditorWidget, type TimelineEditorWidgetProps, type TimelineEventPatch, TimelineToolbar, type TimelineToolbarProps, TimelineTrack, type TimelineTrackProps, TimelineVideoPanel, type TimelineVideoPanelProps, type TimelineViewData, TimelineViewExtension, type TimelineViewExtensionOptions, type TimelineViewPluginState, Toolbar, type ToolbarProps, TooltipLayer, TransformMenu, type TransitionCatalogEntry, type TransitionFields, type TransitionGroup, TransitionPicker, type TransitionPickerProps, type TreeBlockEntry, type TreeCommand, TreeOutlineWidget, type TreeViewData, TreeViewExtension, type TreeViewExtensionOptions, type TreeViewPluginState, type UseBlockNavigatorOptions, type UseFileDropOptions, type UseFileDropResult, type UseMonacoLoaderResult, VersionHistoryPanel, ViewMenuPanel, ViewSwitcher, type ViewSwitcherProps, type WrapPolicyIngest, adaptThemeToSurface, addEdgeOp, addItemOp, addNodeOp, addTimelineEventOp, applyAsciiDiagramCommand, applyRepairCommand, applyTimelineCommand, applyTreeCommand, asciiDiagramToCanvas, buildRecorderSlideDeck, clampSlideIndex, classifyFile, codeSnippetFenceLanguageToken, codeSnippetLanguageLabel, codeSnippetMarkdown, containFenceWidgetEvents, detectLanguageFromFileName, draftPatchFromImportedTheme, findAsciiDiagramBlockPos, findCodeSnippetBlockPos, findHostFenceBlockPos, findMermaidDiagramBlockPos, findRepairableBlockPos, findTimelineBlockPos, findTransitionEntry, findTreeBlockPos, formatSeconds, getBlockSlices, getTimelineForNode, indentItemOp, ingestForWrite, inspectMermaidSource, isAsciiSourceVisible, isCodeSnippetFenceLanguage, isCodeSnippetNode, isExpandedPanel, isMermaidDiagramNode, isMermaidFlowchartShapeId, isMermaidSourceVisible, isRepairableFence, isTimelineSourceSafeForSemanticEdit, lineToOffset, mapFenceEntries, markdownToTiptap, mermaidDiagramMarkdown, mermaidDiagramProperties, mermaidEditCapabilities, mermaidEditableTexts, mermaidErrorMessage, mermaidSurfaceScheme, monacoLanguageForFence, moveItemDownOp, moveItemUpOp, moveNodeOp, nextTimelineEventId, normalizeMermaidFlowchartShape, offsetToLine, outdentItemOp, panelModeAfterToggle, parseTimelineForNode, partitionFiles, persistFromWrite, preloadMonaco, preloadMonacoSuggestions, processMediaFiles, processTextFile, processTextFiles, readBlockAttrsParams, readBlockAttrsTransition, readBlockAttrsValue, readHeadingLineTransition, removeEdgeOp, removeItemOp, removeNodeOp, removeTimelineEventOp, renameItemOp, renameNodeOp, renderMermaidDiagram, replaceAsciiFenceText, replaceCodeSnippetText, replaceHostFenceText, replaceAsciiFenceText as replaceTreeFenceText, resizeNodeOp, resolveFileKind, resolveMermaidSurfaceTheme, sanitizeAsciiLabel, sanitizeTimelineText, sanitizeTreeLabel, searchPickerEntries, setBlockAttrsValue, setBlockDurationInSource, setBlockStartTimeInSource, setBlockTransitionInSource, setHeadingAttrsTransition, setHeadingLineTransition, setMediaClipInSource, shouldPasteAsAsciiFence, shouldPasteAsTimelineFence, shouldPasteAsTreeFence, showSlideTimingCheckbox, sliceIndexAtOffset, slideStepForKey, spliceBlock, summarizeBlockProps, templateLabel, tiptapToMarkdown, toggleAsciiSource, toggleDirOp, toggleMermaidSource, transitionLabel, translateDiagramOp, unshownSlidesWarning, updateTimelineEventOp, useAsciiDiagramData, useBlockNavigator, useCodeSnippetData, useCustomTemplates, useCustomThemes, useDocCustomTemplates, useDocCustomThemes, useFileDrop, useMermaidDiagramData, useMermaidSurfaceTheme, useMonacoLoader, usePreviewSettings, useTimelineData, useTreeViewData };
3383
+ export { ALL_PICKER_ENTRIES, type AddTimelineEventOptions, type AddTimelineEventResult, type ApplyAsciiDiagramCommandOptions, type AsciiDiagramBlockEntry, AsciiDiagramExtension, type AsciiDiagramExtensionOptions, type AsciiDiagramPluginState, type AsciiDiagramView, AsciiDiagramWidget, BlockCardView, type BlockCardViewProps, type BlockNavigator, BlockPropertiesPopover, type BlockPropertiesPopoverProps, type BlockRange, type BlockSlice, CODE_SNIPPET_KEY, CODE_SNIPPET_LANGUAGES, CalcEngineFactory, CodeContext, CodeContextZones, type CodeSnippetBlockEntry, type CodeSnippetData, CodeSnippetExtension, type CodeSnippetExtensionOptions, type CodeSnippetLanguage, type CodeSnippetPluginState, CodeSnippetWidget, type CodeSnippetWidgetProps, CsvSourceMeta, type CustomTemplateContextValue, CustomTemplateProvider, type CustomTemplateProviderProps, type CustomThemeContextValue, CustomThemeProvider, type CustomThemeProviderProps, DATA_CARD_KEY, DEFAULT_MERMAID_DIAGRAM_TYPE, type DataCardBlockEntry, DataCardExtension, type DataCardExtensionOptions, type DataCardPluginState, DataCardWidget, type DataPreview, DiagramCanvas, type DiagramCommand, type DiagramData, type DiagramEdge, type DiagramNode, type DirectionModel, type DocCustomTemplates, type DocCustomThemes, DocumentSettingsDialog, type DocumentSettingsDialogProps, type DragContentType, type DropTarget, DropZoneOverlay, type DropZoneOverlayProps, EMPTY_TRANSITION, EditorHostMode, EmojiPicker, type EmojiPickerProps, FENCE_WIDGET_CONTAINED_EVENTS, type FenceBlockEntry, type FileCategory, type FileKind, type FolderEntry, FolderView, type FolderViewProps, FormulaEditRecord, type GridSaveResult, HOST_FENCE_KEY, type HeadingTransitionAttrs, type HeadingViewBinding, HeadingWithTemplate, type HostFenceBlockEntry, HostFenceExtension, type HostFenceExtensionOptions, type HostFencePluginState, ImportThemeSection, type ImportThemeSectionProps, type ImportedThemeResult, InlinePreviewGutter, type InlinePreviewGutterProps, MERMAID_DIAGRAM_KEY, MERMAID_DIAGRAM_TYPES, MERMAID_FLOWCHART_SHAPES, MediaBin, type MediaBinProps, type MediaClipPatch, type MermaidDiagramBlockEntry, MermaidDiagramCanvas, type MermaidDiagramCanvasProps, type MermaidDiagramCategory, type MermaidDiagramData, MermaidDiagramExtension, type MermaidDiagramExtensionOptions, type MermaidDiagramPluginState, type MermaidDiagramPreview, type MermaidDiagramProperty, type MermaidDiagramType, MermaidDiagramTypeThumbnail, MermaidDiagramWidget, type MermaidDiagramWidgetProps, type MermaidEditCapabilities, type MermaidEditableDiagramKind, type MermaidEditableEdge, type MermaidEditableModel, type MermaidEditableNode, type MermaidEditableText, type MermaidEditableTextTarget, type MermaidFlowchartDirection, type MermaidFlowchartModel, type MermaidFlowchartShape, type MermaidFlowchartShapeId, type MermaidNodeCanvasAction, type MermaidRenderResult, type MermaidSelection, MermaidShapePalette, type MermaidShapePaletteProps, type MermaidSourceEditableModel, type MermaidSurfaceScheme, MonacoLanguageLoadOptions, MonacoLanguageRequest, OutlinePanel, type OutlinePanelProps, PICKER_CATEGORIES, type PickerCategory, type PickerEntry, PlainHtmlPreview, type PlainHtmlPreviewProps, PreviewFormatSwitch, PreviewModeMenu, PreviewModeSwitch, type PreviewSettings, PreviewSettingsProvider, PreviewToolbarControls, type PreviewToolbarControlsProps, REPAIRABLE_KEY, type RecorderPanelMode, type RecorderSlide, RecorderSlidesPanel, type RecorderSlidesPanelProps, RecorderState, type RepairableBlockEntry, RepairableDiagramExtension, type RepairableDiagramExtensionOptions, type RepairablePluginState, SLIDE_TIMING_CHECKBOX_LABEL, type SaveCsvEditsOptions, type SaveXlsxEditsOptions, StatusBar, type StatusBarProps, Subscript, Superscript, TIMELINE_VIEW_KEY, TRANSITION_ENTRIES, TRANSITION_GROUPS, TemplatePicker, ThemeCustomizerPanel, type ThemeCustomizerPanelProps, ThemePicker, type ThemePickerProps, type ThemeSaveExtras, type TimelineBlockEntry, type TimelineCommand, type TimelineCommandResult, TimelineCompositionPanel, type TimelineCompositionPanelProps, TimelineEditorWidget, type TimelineEditorWidgetProps, type TimelineEventPatch, TimelineToolbar, type TimelineToolbarProps, TimelineTrack, type TimelineTrackProps, TimelineVideoPanel, type TimelineVideoPanelProps, type TimelineViewData, TimelineViewExtension, type TimelineViewExtensionOptions, type TimelineViewPluginState, Toolbar, type ToolbarProps, TooltipLayer, TransformMenu, type TransitionCatalogEntry, type TransitionFields, type TransitionGroup, TransitionPicker, type TransitionPickerProps, type TreeBlockEntry, type TreeCommand, TreeOutlineWidget, type TreeViewData, TreeViewExtension, type TreeViewExtensionOptions, type TreeViewPluginState, type UseBlockNavigatorOptions, type UseFileDropOptions, type UseFileDropResult, type UseMonacoLoaderResult, VersionHistoryPanel, ViewMenuPanel, ViewSwitcher, type ViewSwitcherProps, type WrapPolicyIngest, XlsxSourceMeta, adaptThemeToSurface, addEdgeOp, addItemOp, addNodeOp, addTimelineEventOp, applyAsciiDiagramCommand, applyRepairCommand, applyTimelineCommand, applyTreeCommand, asciiDiagramToCanvas, buildRecorderSlideDeck, clampSlideIndex, classifyFile, codeSnippetFenceLanguageToken, codeSnippetLanguageLabel, codeSnippetMarkdown, containFenceWidgetEvents, dataExtensionOf, dataLinkHrefOf, detectLanguageFromFileName, draftPatchFromImportedTheme, findAsciiDiagramBlockPos, findCodeSnippetBlockPos, findDataCardBlockPos, findHostFenceBlockPos, findMermaidDiagramBlockPos, findOwningHeadingPosition, findRepairableBlockPos, findTimelineBlockPos, findTransitionEntry, findTreeBlockPos, formatSeconds, getBlockSlices, getTimelineForNode, indentItemOp, ingestForWrite, inspectMermaidSource, isAsciiSourceVisible, isCodeSnippetFenceLanguage, isCodeSnippetNode, isExpandedPanel, isMermaidDiagramNode, isMermaidFlowchartShapeId, isMermaidSourceVisible, isRepairableFence, isTimelineSourceSafeForSemanticEdit, lineToOffset, loadDataPreview, mapFenceEntries, markdownToTiptap, mermaidDiagramMarkdown, mermaidDiagramProperties, mermaidEditCapabilities, mermaidEditableTexts, mermaidErrorMessage, mermaidSurfaceScheme, monacoLanguageForFence, moveItemDownOp, moveItemUpOp, moveNodeOp, nextTimelineEventId, normalizeMermaidFlowchartShape, offsetToLine, outdentItemOp, panelModeAfterToggle, parseTimelineForNode, partitionFiles, persistFromWrite, preloadMonaco, preloadMonacoSuggestions, processDataFiles, processMediaFiles, processTextFile, processTextFiles, readBlockAttrsParams, readBlockAttrsTransition, readBlockAttrsValue, readHeadingLineTransition, readHeadingViewBinding, removeEdgeOp, removeItemOp, removeNodeOp, removeTimelineEventOp, renameItemOp, renameNodeOp, renderMermaidDiagram, replaceAsciiFenceText, replaceCodeSnippetText, replaceHostFenceText, replaceAsciiFenceText as replaceTreeFenceText, resizeNodeOp, resolveFileKind, resolveMermaidSurfaceTheme, sanitizeAsciiLabel, sanitizeTimelineText, sanitizeTreeLabel, saveCsvEdits, saveXlsxEdits, searchPickerEntries, setBlockAttrsValue, setBlockDurationInSource, setBlockStartTimeInSource, setBlockTransitionInSource, setHeadingAttrsTransition, setHeadingLineTransition, setMediaClipInSource, shouldPasteAsAsciiFence, shouldPasteAsTimelineFence, shouldPasteAsTreeFence, showSlideTimingCheckbox, sliceIndexAtOffset, slideStepForKey, spliceBlock, summarizeBlockProps, templateLabel, tiptapToMarkdown, toggleAsciiSource, toggleDirOp, toggleMermaidSource, transitionLabel, translateDiagramOp, unshownSlidesWarning, updateTimelineEventOp, useAsciiDiagramData, useBlockNavigator, useCodeSnippetData, useCustomTemplates, useCustomThemes, useDocCustomTemplates, useDocCustomThemes, useFileDrop, useMermaidDiagramData, useMermaidSurfaceTheme, useMonacoLoader, usePreviewSettings, useTimelineData, useTreeViewData, viewStateFromBinding, writeHeadingViewState };