@bendyline/docblocks-react 2.6.1 → 2.7.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.
Files changed (54) hide show
  1. package/README.md +3 -10
  2. package/THIRD_PARTY_NOTICES.txt +4284 -3651
  3. package/dist/AiDiagrams-XWOM3YZX.js +13 -0
  4. package/dist/AiEditorAssistant-M4LI2CRY.js +771 -0
  5. package/dist/AudioExportDialog-F23QXNPB.js +253 -0
  6. package/dist/DocumentConflictDialog-5LRVIGXS.js +111 -0
  7. package/dist/ExportDialog-L6FG6W3H.js +9 -0
  8. package/dist/{ExportToolbarControls-QYLBRWM7.js → ExportToolbarControls-BRCPZ7H3.js} +108 -42
  9. package/dist/{GitUI-L5T3XHZG.js → GitUI-LZW3IUXO.js} +5 -5
  10. package/dist/PresentationMaker-622NHMIN.js +9 -0
  11. package/dist/QuickOpenDialog-2KK4SEBU.js +356 -0
  12. package/dist/Settings-DuXk6baH.d.ts +144 -0
  13. package/dist/{ShareDialog-4OX3UPJ4.js → ShareDialog-N7GPM4SB.js} +10 -59
  14. package/dist/SpeechToolbarControl-UZQKGQWD.js +434 -0
  15. package/dist/TextFromNarration-XYRAB6O2.js +598 -0
  16. package/dist/WorkspaceSearchPanel-OUQQ5DOM.js +328 -0
  17. package/dist/chunk-2IYBBFQX.js +201 -0
  18. package/dist/{chunk-LG6HAWCK.js → chunk-56KO2LYN.js} +35 -4
  19. package/dist/chunk-5OZBGIIT.js +1826 -0
  20. package/dist/chunk-6B7G33D5.js +88 -0
  21. package/dist/chunk-ARATARVJ.js +40 -0
  22. package/dist/{chunk-ODYNOPC3.js → chunk-BCQZTWE5.js} +57 -17
  23. package/dist/chunk-EA4BO6E4.js +73 -0
  24. package/dist/chunk-G4MFB3IO.js +208 -0
  25. package/dist/chunk-I44HKDQX.js +314 -0
  26. package/dist/chunk-K4I3NJFL.js +49 -0
  27. package/dist/chunk-KBDZDFPU.js +61 -0
  28. package/dist/{chunk-FNSRCCBC.js → chunk-KWG6UP5O.js} +0 -10
  29. package/dist/chunk-MMOTEQK6.js +518 -0
  30. package/dist/chunk-OINKNX26.js +574 -0
  31. package/dist/chunk-Q5ZVP5LV.js +1711 -0
  32. package/dist/chunk-RP3DVNTI.js +62 -0
  33. package/dist/{chunk-FMDLZ4ZG.js → chunk-SGQKTKDX.js} +2 -2
  34. package/dist/chunk-TBLZBNQF.js +25 -0
  35. package/dist/{chunk-M5Y5WO7Z.js → chunk-UG4G7PJ4.js} +1 -1
  36. package/dist/chunk-UONFWKJ7.js +22 -0
  37. package/dist/chunk-VO2JYYQZ.js +40 -0
  38. package/dist/{chunk-EBWYGTN7.js → chunk-X437UAF7.js} +6 -0
  39. package/dist/chunk-YS4HVWIO.js +63 -0
  40. package/dist/editor.d.ts +36 -1
  41. package/dist/editor.js +16 -1
  42. package/dist/export/index.d.ts +27 -11
  43. package/dist/export/index.js +11 -7
  44. package/dist/index.d.ts +100 -13
  45. package/dist/index.js +3916 -1633
  46. package/dist/{run-export-I2XOVGG4.js → run-export-47X5FTYZ.js} +3 -3
  47. package/dist/settings/index.d.ts +32 -101
  48. package/dist/settings/index.js +14 -2
  49. package/package.json +9 -9
  50. package/src/styles/docblocks.css +2337 -650
  51. package/dist/ExportDialog-Q4VWI43H.js +0 -9
  52. package/dist/chunk-JDJVRDOP.js +0 -92
  53. package/dist/chunk-Q6XNIKDG.js +0 -669
  54. package/dist/{GitToolbarControl-O5AXBC6T.js → GitToolbarControl-J4UYZDV6.js} +3 -3
package/dist/index.d.ts CHANGED
@@ -1,21 +1,24 @@
1
1
  import * as react_jsx_runtime from 'react/jsx-runtime';
2
- import { FileSystemEntry, FileSystemProvider, FsErrorCode } from '@bendyline/docblocks/filesystem';
2
+ import { FileSystemEntry, FileSystemProvider, FileSystemEntryMoveOptions, FsErrorCode } from '@bendyline/docblocks/filesystem';
3
3
  import { WorkspaceDescriptor } from '@bendyline/docblocks/workspace';
4
4
  import { EditorColorScheme, CalcEngineFactory, ProofingCapability, ProofingIgnoreStore } from '@bendyline/squisq-editor-react';
5
5
  import { CodeBlockCopyHandler } from '@bendyline/squisq-react';
6
6
  import { FfmpegWasmLoadConfig } from '@bendyline/squisq-video';
7
7
  import { PrunePolicy, SaveVersionResult, DocumentVersionManager } from '@bendyline/squisq/versions';
8
- import { ThemePreference, AccentColor, WriteCanvasPreferences, ProofingPreferences } from './settings/index.js';
9
- export { AccentColorSettings, AccentColorSettingsProps, DEFAULT_PROOFING_PREFERENCES, DEFAULT_WRITE_CANVAS_FONT_SCHEME, ProofingSettingsControls, ProofingSettingsControlsProps, SettingsDialog, SettingsDialogProps, ThemeSettings, ThemeSettingsProps, WRITE_CANVAS_FONT_SCHEMES, WriteCanvasFontScheme, WriteCanvasFontSchemeGroup, WriteCanvasFontSchemeOption, WriteCanvasSettingsControls, WriteCanvasSettingsControlsProps, loadProofingPreferences, resolveWriteCanvasFonts, saveProofingPreferences } from './settings/index.js';
8
+ import { DocBlocksHostAiAPI, DocBlocksHostSpeechAPI } from '@bendyline/docblocks/host';
9
+ import { T as ThemePreference, A as AccentColor, I as InterfaceFontPreference, q as WriteCanvasPreferences, P as ProofingPreferences } from './Settings-DuXk6baH.js';
10
+ export { a as AccentColorSettings, b as AccentColorSettingsProps, c as AiSettingsControls, d as AiSettingsControlsProps, D as DEFAULT_INTERFACE_FONT, e as DEFAULT_PROOFING_PREFERENCES, f as DEFAULT_WRITE_CANVAS_FONT_SCHEME, g as InterfaceFontSettings, h as InterfaceFontSettingsProps, i as ProofingSettingsControls, j as ProofingSettingsControlsProps, S as SettingsDialog, k as SettingsDialogProps, l as ThemeSettings, m as ThemeSettingsProps, W as WRITE_CANVAS_FONT_SCHEMES, n as WriteCanvasFontScheme, o as WriteCanvasFontSchemeGroup, p as WriteCanvasFontSchemeOption, r as WriteCanvasSettingsControls, s as WriteCanvasSettingsControlsProps, t as loadInterfaceFont, u as loadProofingPreferences, v as resolveWriteCanvasFonts, w as saveInterfaceFont, x as saveProofingPreferences } from './Settings-DuXk6baH.js';
10
11
  import { SharedDocumentMode } from '@bendyline/docblocks/share';
11
12
  import { MediaProvider } from '@bendyline/squisq/schemas';
12
13
  import { ContentContainer } from '@bendyline/squisq/storage';
13
14
  import { VideoExportModalProps } from '@bendyline/squisq-video-react';
15
+ import { MediaEditRenderManager } from '@bendyline/squisq-video-react/media-edit';
14
16
  import { ExportBlobSaver } from './export/index.js';
15
17
  export { CoverImageSaveAdapter, CoverImageSaveOutput, DEFAULT_OPTIONS, CoverImageSaveAdapter as DashboardImageSaveAdapter, CoverImageSaveOutput as DashboardImageSaveOutput, ExportDestinationControl, ExportDialog, ExportDialogProps, ExportFormat, ExportOptions, HtmlBundle, HtmlStyle, CoverImageSaveAdapter as ImageSaveAdapter, CoverImageSaveOutput as ImageSaveOutput, buildExportFilename, createCoverImageSaveOutput, createCoverImageSaveOutput as createDashboardImageSaveOutput, createCoverImageSaveOutput as createImageSaveOutput, loadLastExportOptions, runExport, updateExportTargetExtension } from './export/index.js';
16
18
  import { DocumentSession, DocumentSessionSnapshot } from '@bendyline/docblocks/document';
17
19
  import 'react';
18
20
  import '@bendyline/squisq-formats/pptx';
21
+ import '@bendyline/squisq-formats/diagrams';
19
22
 
20
23
  /** Git decoration for a row — precomputed by FileExplorer so this node stays context-free. */
21
24
  interface FileTreeNodeBadge {
@@ -98,7 +101,24 @@ interface PinnedDocumentListItem extends PinnedDocument {
98
101
 
99
102
  type FileExplorerSortMode = 'name' | 'last-modified';
100
103
 
104
+ /** Host-supplied rendering context for regenerated outside-in files. */
105
+ interface OutsideInRenderOptions {
106
+ /**
107
+ * The workspace default theme, read at render time. Applied only to
108
+ * documents whose frontmatter names no theme of their own: every Squisq
109
+ * exporter lets an explicit theme beat the document's frontmatter.
110
+ */
111
+ defaultThemeId?: () => string | undefined;
112
+ }
113
+
114
+ /**
115
+ * The types a new document can be created as. Shared by the explorer's inline
116
+ * new-file form and the shell's New document dialog so both name the result
117
+ * the same way; `NewFileFormatOptions` renders the matching choices.
118
+ */
119
+
101
120
  type NewFileFormat = 'markdown' | 'docx' | 'xlsx' | 'pdf' | 'web-interactive' | 'web-static';
121
+
102
122
  type FileTreeChange = {
103
123
  type: 'create';
104
124
  path: string;
@@ -113,7 +133,7 @@ type FileTreeChange = {
113
133
  newPath: string;
114
134
  kind: 'file' | 'directory';
115
135
  };
116
- type FileTreeMutationHandler = (change: FileTreeChange, mutate: () => Promise<void>) => Promise<void>;
136
+ type FileTreeMutationHandler = (change: FileTreeChange, mutate: (options?: FileSystemEntryMoveOptions) => Promise<void>) => Promise<void>;
117
137
  interface WorkspaceMoveDestination {
118
138
  id: string;
119
139
  name: string;
@@ -170,10 +190,20 @@ interface FileExplorerProps {
170
190
  moveDestinations?: readonly WorkspaceMoveDestination[];
171
191
  /** When provided, shows the transient-workspace move action above the tree. */
172
192
  onMoveToWorkspace?: (workspaceId: string) => Promise<void>;
193
+ /** Rendering context (e.g. the workspace default theme) for new rendered documents. */
194
+ outsideInRender?: OutsideInRenderOptions;
195
+ /** The type the New File form preselects. Defaults to Markdown. */
196
+ defaultNewFileFormat?: NewFileFormat;
197
+ /** Called with the type of each file the New File form creates. */
198
+ onNewFileFormatUsed?: (format: NewFileFormat) => void;
199
+ /** Shows a Search button that switches the sidebar to workspace search. */
200
+ onShowSearch?: () => void;
201
+ /** Tooltip shortcut for the Search button, e.g. `Ctrl+Shift+F`. */
202
+ searchShortcutLabel?: string;
173
203
  /** Optional className for the root element. */
174
204
  className?: string;
175
205
  }
176
- declare function FileExplorer({ provider, metadataRefreshKey, activeFilePath, sortMode, onSortModeChange, activeWorkspaceId, pinnedDocuments, pinnedPaths, onPinnedDocumentSelect, onPinnedDocumentUnpin, onPinnedDocumentRename, onPinnedDocumentDelete, onTogglePin, onSelect, onOpenWorkspaceFolder, actionsForEntry, onTreeMutation, onTreeChange, onImportFiles, confirmDelete, moveDestinations, onMoveToWorkspace, className, }: FileExplorerProps): react_jsx_runtime.JSX.Element;
206
+ declare function FileExplorer({ provider, metadataRefreshKey, activeFilePath, sortMode, onSortModeChange, activeWorkspaceId, pinnedDocuments, pinnedPaths, onPinnedDocumentSelect, onPinnedDocumentUnpin, onPinnedDocumentRename, onPinnedDocumentDelete, onTogglePin, onSelect, onOpenWorkspaceFolder, actionsForEntry, onTreeMutation, onTreeChange, onImportFiles, confirmDelete, moveDestinations, onMoveToWorkspace, outsideInRender, defaultNewFileFormat, onNewFileFormatUsed, onShowSearch, searchShortcutLabel, className, }: FileExplorerProps): react_jsx_runtime.JSX.Element;
177
207
 
178
208
  /**
179
209
  * useFileTree — hook that reads from a FileSystemProvider,
@@ -224,7 +254,7 @@ interface FileTreeActions {
224
254
  /** Delete a file or directory. */
225
255
  deleteEntry: (path: string) => Promise<void>;
226
256
  /** Rename or move a file or directory, including a markdown companion folder. */
227
- renameEntry: (oldPath: string, newPath: string, kind?: 'file' | 'directory') => Promise<void>;
257
+ renameEntry: (oldPath: string, newPath: string, kind?: 'file' | 'directory', options?: FileSystemEntryMoveOptions) => Promise<void>;
228
258
  /** Force refresh the tree. */
229
259
  refresh: () => Promise<void>;
230
260
  /** Retry one failed directory without treating it as a workspace-root failure. */
@@ -244,12 +274,33 @@ interface WorkspacePickerProps {
244
274
  * the desktop when git is available — omitted, the item is hidden.
245
275
  */
246
276
  onCloneRepository?: () => void;
277
+ /**
278
+ * Called when the user chooses "Remove workspace" from a row's actions menu
279
+ * (its ⋯ button, a right-click, or Shift+F10). The host confirms and does
280
+ * the removal. Omitted, rows have no actions menu.
281
+ */
282
+ onRemoveWorkspace?: (descriptor: WorkspaceDescriptor) => void;
247
283
  /** Forces a list refresh after an external workspace-registry mutation. */
248
284
  refreshKey?: number;
249
285
  /** Optional className. */
250
286
  className?: string;
251
287
  }
252
- declare function WorkspacePicker({ activeWorkspaceId, onSelect, onOpenFolder, onCloneRepository, refreshKey, className, }: WorkspacePickerProps): react_jsx_runtime.JSX.Element;
288
+ declare function WorkspacePicker({ activeWorkspaceId, onSelect, onOpenFolder, onCloneRepository, onRemoveWorkspace, refreshKey, className, }: WorkspacePickerProps): react_jsx_runtime.JSX.Element;
289
+
290
+ /**
291
+ * Owns the active workspace's index: one per provider instance, disposed
292
+ * (cancelling any in-flight walk) when the workspace changes.
293
+ *
294
+ * The index module is loaded on demand so it stays out of the startup bundle,
295
+ * and indexing starts once the browser is idle so it never competes with the
296
+ * explorer's first listing.
297
+ */
298
+
299
+ /**
300
+ * `eager` indexes once the browser is idle; `on-demand` waits until a feature
301
+ * needs it (quick-open, search); `off` never indexes.
302
+ */
303
+ type WorkspaceIndexMode = 'eager' | 'on-demand' | 'off';
253
304
 
254
305
  interface DocBlocksShellProps {
255
306
  /**
@@ -329,6 +380,12 @@ interface DocBlocksShellProps {
329
380
  onApplyUpdate?: () => void;
330
381
  /** Host-supplied content rendered at the right edge of the editor status bar. */
331
382
  statusBarSlotRight?: React.ReactNode;
383
+ /**
384
+ * When the shared workspace index (link picker, quick-open, search) reads
385
+ * the workspace: `eager` once the app is idle (default), `on-demand` when a
386
+ * feature first needs it (hosts whose listings are expensive), `off` never.
387
+ */
388
+ workspaceIndex?: WorkspaceIndexMode;
332
389
  /** Show Copy controls on ordinary fenced code blocks (default: true). */
333
390
  showCodeCopyButton?: boolean;
334
391
  /**
@@ -348,7 +405,7 @@ interface DocBlocksShellProps {
348
405
  */
349
406
  offlineReady?: boolean;
350
407
  }
351
- declare function DocBlocksShell({ theme: hostTheme, logoUrl, issueReportVersion, appBuildDate, ffmpegWasm, calcEngineFactory, proofing, proofingDefaultEnabled, proofingIgnoreStore, homeDocumentTitle, homeDocumentPath, allowVersioning, versionBasename, versioningPrunePolicy, versioningAutoSaveIdleMs, onSaveVersion, versioningRef, updateAvailable, onApplyUpdate, statusBarSlotRight, showCodeCopyButton, onCopyCode, allowRecording, allowPresentationWindow, allowPresentationFullscreen, offlineReady, }: DocBlocksShellProps): react_jsx_runtime.JSX.Element;
408
+ declare function DocBlocksShell({ theme: hostTheme, logoUrl, issueReportVersion, appBuildDate, ffmpegWasm, calcEngineFactory, proofing, proofingDefaultEnabled, proofingIgnoreStore, homeDocumentTitle, homeDocumentPath, allowVersioning, versionBasename, versioningPrunePolicy, versioningAutoSaveIdleMs, onSaveVersion, versioningRef, updateAvailable, onApplyUpdate, statusBarSlotRight, workspaceIndex: workspaceIndexMode, showCodeCopyButton, onCopyCode, allowRecording, allowPresentationWindow, allowPresentationFullscreen, offlineReady, }: DocBlocksShellProps): react_jsx_runtime.JSX.Element;
352
409
 
353
410
  /**
354
411
  * Versioning preferences — global default + per-workspace resolution.
@@ -358,9 +415,12 @@ declare function DocBlocksShell({ theme: hostTheme, logoUrl, issueReportVersion,
358
415
  * default is `'browser-only'` so local-folder workspaces stay clean by
359
416
  * default and only IndexedDB workspaces accumulate version history.
360
417
  *
361
- * Each workspace can override the global default with its own setting
362
- * stored on the WorkspaceDescriptor. `'inherit'` (or absent) defers to
363
- * the global preference; `'on'` / `'off'` force the behavior regardless.
418
+ * Each workspace can override the global default. The override lives in
419
+ * the folder's `.docblocks/workspace.json` (`versionHistory.enabled`) so it
420
+ * travels with the folder; an older override stored on the
421
+ * WorkspaceDescriptor is still honored until the next workspace-settings
422
+ * save moves it into the file. Absent (or `'inherit'`) defers to the global
423
+ * preference; `'on'` / `'off'` force the behavior regardless.
364
424
  */
365
425
 
366
426
  type VersioningPreference = 'on' | 'browser-only' | 'off';
@@ -374,8 +434,11 @@ interface AppMenuProps {
374
434
  onThemeChange?: (theme: ThemePreference) => void;
375
435
  /** Current accent color. */
376
436
  accentColor?: AccentColor;
437
+ /** Chrome typeface: follow the OS, or use the bundled face. */
438
+ interfaceFont?: InterfaceFontPreference;
377
439
  /** Called when the user changes the accent color. */
378
440
  onAccentColorChange?: (color: AccentColor) => void;
441
+ onInterfaceFontChange?: (font: InterfaceFontPreference) => void;
379
442
  /** Current typography preferences for the editor's Write canvas. */
380
443
  writeCanvasSettings?: WriteCanvasPreferences;
381
444
  /** Called when the user changes the Write canvas typography. */
@@ -388,6 +451,8 @@ interface AppMenuProps {
388
451
  versioningPreference?: VersioningPreference;
389
452
  /** Called when the user changes the global versioning preference. */
390
453
  onVersioningPreferenceChange?: (pref: VersioningPreference) => void;
454
+ /** Opens the active workspace's own settings (`.docblocks/workspace.json`). */
455
+ onOpenWorkspaceSettings?: () => void;
391
456
  /**
392
457
  * Called when the user clicks "Download all workspaces". When omitted,
393
458
  * the menu item is hidden.
@@ -419,8 +484,20 @@ interface AppMenuProps {
419
484
  appVersion?: string;
420
485
  /** ISO build date shown in About. */
421
486
  appBuildDate?: string;
487
+ /**
488
+ * The host's AI API. When present, Settings offers an AI section; when
489
+ * omitted — a host without AI — the section is hidden.
490
+ */
491
+ ai?: DocBlocksHostAiAPI;
492
+ /**
493
+ * The host's speech API. When present, Settings offers a Speech section for
494
+ * dictation and narration models; when omitted the section is hidden.
495
+ */
496
+ speech?: DocBlocksHostSpeechAPI;
497
+ /** Opens Settings whenever it changes to a new non-zero value. */
498
+ settingsRequest?: number;
422
499
  }
423
- declare function AppMenu({ logoUrl, themePreference, onThemeChange, accentColor, onAccentColorChange, writeCanvasSettings, onWriteCanvasSettingsChange, proofingPreferences, onProofingPreferencesChange, versioningPreference, onVersioningPreferenceChange, onDownloadAllWorkspaces, onKeepBrowserData, onInstallApp, getStorageEstimate, storagePersistent, appVersion, appBuildDate, }: AppMenuProps): react_jsx_runtime.JSX.Element;
500
+ declare function AppMenu({ logoUrl, themePreference, onThemeChange, accentColor, onAccentColorChange, interfaceFont, onInterfaceFontChange, writeCanvasSettings, onWriteCanvasSettingsChange, proofingPreferences, onProofingPreferencesChange, versioningPreference, onVersioningPreferenceChange, onOpenWorkspaceSettings, onDownloadAllWorkspaces, onKeepBrowserData, onInstallApp, getStorageEstimate, storagePersistent, appVersion, appBuildDate, ai, speech, settingsRequest, }: AppMenuProps): react_jsx_runtime.JSX.Element;
424
501
 
425
502
  interface ExportToolbarControlsProps {
426
503
  /** Currently selected file path — used to derive the download filename. */
@@ -435,6 +512,15 @@ interface ExportToolbarControlsProps {
435
512
  workspaceContainer?: ContentContainer | null;
436
513
  /** Active document media provider used to preload audio and video export assets. */
437
514
  mediaProvider?: MediaProvider | null;
515
+ /**
516
+ * Processed-audio renders for media-edit recipes. Video export waits for
517
+ * pending renders and mixes the processed audio in place of the original.
518
+ */
519
+ mediaEditRenders?: MediaEditRenderManager | null;
520
+ /** The host's speech API; when present the menu offers "Export audio…". */
521
+ speech?: DocBlocksHostSpeechAPI;
522
+ /** Workspace default theme, pre-selected for documents without their own. */
523
+ defaultThemeId?: string;
438
524
  /** Override the default browser download behavior for host-provided save flows. */
439
525
  saveBlob?: ExportBlobSaver;
440
526
  /** Optional host adapter for displaying, picking, and saving to a native target path. */
@@ -460,6 +546,7 @@ interface ExportDestinationTarget {
460
546
  displayPath: string;
461
547
  }
462
548
  interface ExportDestinationAdapter {
549
+ shareBlob?: (blob: Blob, filename: string) => Promise<'shared' | 'presented' | 'cancelled'>;
463
550
  resolveTarget: (filename: string) => Promise<ExportDestinationTarget>;
464
551
  pickTarget: (filename: string, currentTarget?: ExportDestinationTarget | null) => Promise<ExportDestinationTarget | null>;
465
552
  saveBlob: (blob: Blob, filename: string, target?: ExportDestinationTarget | null) => Promise<ExportDestinationTarget | null>;
@@ -488,4 +575,4 @@ interface UseDocumentSessionResult {
488
575
  */
489
576
  declare function useDocumentSession(autoSaveDelayMs?: number): UseDocumentSessionResult;
490
577
 
491
- export { AccentColor, AppMenu, type AppMenuProps, DocBlocksShell, type DocBlocksShellProps, ExportBlobSaver, type ExportDestinationAdapter, type ExportDestinationTarget, ExportToolbarControls, type ExportToolbarControlsProps, FileExplorer, type FileExplorerProps, type FileExplorerSortMode, type FileTreeActions, type FileTreeChange, type FileTreeMutationHandler, FileTreeNode, type FileTreeNodeProps, type FileTreeReadIssue, type FileTreeState, type NewFileFormat, ProofingPreferences, ThemePreference, type UseDocumentSessionResult, WorkspacePicker, type WorkspacePickerProps, WriteCanvasPreferences, useDocumentSession, useFileTree };
578
+ export { AccentColor, AppMenu, type AppMenuProps, DocBlocksShell, type DocBlocksShellProps, ExportBlobSaver, type ExportDestinationAdapter, type ExportDestinationTarget, ExportToolbarControls, type ExportToolbarControlsProps, FileExplorer, type FileExplorerProps, type FileExplorerSortMode, type FileTreeActions, type FileTreeChange, type FileTreeMutationHandler, FileTreeNode, type FileTreeNodeProps, type FileTreeReadIssue, type FileTreeState, InterfaceFontPreference, type NewFileFormat, ProofingPreferences, ThemePreference, type UseDocumentSessionResult, WorkspacePicker, type WorkspacePickerProps, WriteCanvasPreferences, useDocumentSession, useFileTree };