@bendyline/docblocks-react 2.6.2 → 2.7.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.
Files changed (57) hide show
  1. package/README.md +3 -10
  2. package/THIRD_PARTY_NOTICES.txt +4284 -3651
  3. package/dist/AiDiagrams-LFV4YU6W.js +13 -0
  4. package/dist/AiEditorAssistant-GN2KXKZD.js +786 -0
  5. package/dist/AudioExportDialog-F23QXNPB.js +253 -0
  6. package/dist/DocumentConflictDialog-5LRVIGXS.js +111 -0
  7. package/dist/ExportDialog-IMBVGRYG.js +9 -0
  8. package/dist/{ExportToolbarControls-QYLBRWM7.js → ExportToolbarControls-MUM6HM3K.js} +117 -49
  9. package/dist/{GitToolbarControl-O5AXBC6T.js → GitToolbarControl-B7KG4MFP.js} +6 -6
  10. package/dist/{GitUI-L5T3XHZG.js → GitUI-RCWUZVS6.js} +6 -6
  11. package/dist/PresentationMaker-W2JIBHRN.js +9 -0
  12. package/dist/QuickOpenDialog-2KK4SEBU.js +356 -0
  13. package/dist/Settings-DuXk6baH.d.ts +144 -0
  14. package/dist/ShareDialog-XUA2OVGI.js +292 -0
  15. package/dist/SpeechToolbarControl-OSQS7NVY.js +434 -0
  16. package/dist/TextFromNarration-XYRAB6O2.js +598 -0
  17. package/dist/WorkspaceSearchPanel-BKZJRPMY.js +334 -0
  18. package/dist/chunk-2IYBBFQX.js +201 -0
  19. package/dist/{chunk-LG6HAWCK.js → chunk-56KO2LYN.js} +35 -4
  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-FMDLZ4ZG.js → chunk-BD54Z5XP.js} +12 -3
  24. package/dist/chunk-EA4BO6E4.js +73 -0
  25. package/dist/chunk-EPOLZNFD.js +518 -0
  26. package/dist/chunk-G4MFB3IO.js +208 -0
  27. package/dist/{chunk-MRUK56JS.js → chunk-GMA4KGGO.js} +7 -3
  28. package/dist/chunk-I44HKDQX.js +314 -0
  29. package/dist/chunk-K4I3NJFL.js +49 -0
  30. package/dist/chunk-KBDZDFPU.js +61 -0
  31. package/dist/{chunk-FNSRCCBC.js → chunk-KWG6UP5O.js} +0 -10
  32. package/dist/chunk-NAH52736.js +1884 -0
  33. package/dist/chunk-RP3DVNTI.js +62 -0
  34. package/dist/chunk-SPUPWCSI.js +111 -0
  35. package/dist/chunk-TBLZBNQF.js +25 -0
  36. package/dist/{chunk-M5Y5WO7Z.js → chunk-UG4G7PJ4.js} +1 -1
  37. package/dist/chunk-UONFWKJ7.js +22 -0
  38. package/dist/chunk-VO2JYYQZ.js +40 -0
  39. package/dist/chunk-W55E6TE2.js +1714 -0
  40. package/dist/chunk-X3DDTJKR.js +574 -0
  41. package/dist/{chunk-EBWYGTN7.js → chunk-X437UAF7.js} +6 -0
  42. package/dist/editor.d.ts +36 -1
  43. package/dist/editor.js +16 -1
  44. package/dist/export/index.d.ts +27 -11
  45. package/dist/export/index.js +11 -7
  46. package/dist/index.d.ts +100 -13
  47. package/dist/index.js +3927 -1638
  48. package/dist/proofing/index.js +11 -1
  49. package/dist/{run-export-I2XOVGG4.js → run-export-47X5FTYZ.js} +3 -3
  50. package/dist/settings/index.d.ts +32 -101
  51. package/dist/settings/index.js +14 -2
  52. package/package.json +9 -9
  53. package/src/styles/docblocks.css +2344 -657
  54. package/dist/ExportDialog-Q4VWI43H.js +0 -9
  55. package/dist/ShareDialog-4OX3UPJ4.js +0 -359
  56. package/dist/chunk-JDJVRDOP.js +0 -92
  57. package/dist/chunk-Q6XNIKDG.js +0 -669
@@ -1,25 +1,32 @@
1
+ import {
2
+ buildVideoExportDoc
3
+ } from "./chunk-RP3DVNTI.js";
1
4
  import {
2
5
  browserSaveMode,
3
6
  saveActionLabel
4
7
  } from "./chunk-UMEDHMT7.js";
5
8
  import {
6
9
  useMenuKeyboard
7
- } from "./chunk-MRUK56JS.js";
10
+ } from "./chunk-GMA4KGGO.js";
11
+ import {
12
+ createImageSaveOutput,
13
+ hostErrorDetail
14
+ } from "./chunk-UONFWKJ7.js";
8
15
  import {
9
16
  buildExportFilename
10
- } from "./chunk-M5Y5WO7Z.js";
17
+ } from "./chunk-UG4G7PJ4.js";
11
18
  import {
12
19
  loadTransformStyleSummaries
13
20
  } from "./chunk-YBEYTVU2.js";
14
21
  import {
15
- DEFAULT_OPTIONS,
16
22
  FORMAT_EXTENSIONS,
17
23
  loadLastExportOptions,
24
+ resolveExportDialogInitial,
18
25
  saveExportOptions
19
- } from "./chunk-EBWYGTN7.js";
26
+ } from "./chunk-X437UAF7.js";
20
27
  import {
21
28
  Dialog
22
- } from "./chunk-LG6HAWCK.js";
29
+ } from "./chunk-56KO2LYN.js";
23
30
 
24
31
  // src/Export/ExportToolbarControls.tsx
25
32
  import {
@@ -32,22 +39,27 @@ import {
32
39
  useMemo
33
40
  } from "react";
34
41
  import { useEditorContext, usePreviewSettings } from "@bendyline/squisq-editor-react";
42
+ import { readFrontmatterThemeId } from "@bendyline/squisq/markdown";
35
43
  import { getThemeSummaries } from "@bendyline/squisq/schemas";
36
- import { parseMarkdown } from "@bendyline/squisq/markdown";
37
44
  import { Fragment, jsx, jsxs } from "react/jsx-runtime";
38
45
  var ExportDialog = lazy(
39
- () => import("./ExportDialog-Q4VWI43H.js").then((module) => ({ default: module.ExportDialog }))
46
+ () => import("./ExportDialog-IMBVGRYG.js").then((module) => ({ default: module.ExportDialog }))
40
47
  );
41
48
  var ShareDialog = lazy(
42
- () => import("./ShareDialog-4OX3UPJ4.js").then((module) => ({ default: module.ShareDialog }))
49
+ () => import("./ShareDialog-XUA2OVGI.js").then((module) => ({ default: module.ShareDialog }))
43
50
  );
44
51
  var runExportModulePromise = null;
45
52
  function loadRunExportModule() {
46
- runExportModulePromise ?? (runExportModulePromise = import("./run-export-I2XOVGG4.js"));
53
+ runExportModulePromise ?? (runExportModulePromise = import("./run-export-47X5FTYZ.js"));
47
54
  return runExportModulePromise;
48
55
  }
49
56
  var ExportCancelledError = class extends Error {
50
57
  };
58
+ var AudioExportDialog = lazy(
59
+ () => import("./AudioExportDialog-F23QXNPB.js").then((module) => ({
60
+ default: module.AudioExportDialog
61
+ }))
62
+ );
51
63
  var SHARED_USE_MODES = Object.freeze({
52
64
  slideshow: "slideshow",
53
65
  video: "video",
@@ -70,19 +82,16 @@ function SharedModeInitializer({ mode }) {
70
82
  var videoExportModulesPromise = null;
71
83
  function loadVideoExportModules() {
72
84
  videoExportModulesPromise ?? (videoExportModulesPromise = Promise.all([
73
- import("@bendyline/squisq/doc"),
74
85
  import("@bendyline/squisq-video-react"),
75
86
  import("@bendyline/squisq-react/standalone-source")
76
- ]).then(([docModule, videoModule, playerModule]) => ({
87
+ ]).then(([videoModule, playerModule]) => ({
77
88
  Modal: videoModule.VideoExportModal,
78
- markdownToDoc: docModule.markdownToDoc,
79
- resolveAudioMapping: docModule.resolveAudioMapping,
80
89
  playerScript: playerModule.PLAYER_BUNDLE
81
90
  })));
82
91
  return videoExportModulesPromise;
83
92
  }
84
93
  function exportErrorMessage(caught) {
85
- const detail = caught instanceof Error ? caught.message.replace(/^Error invoking remote method '[^']+': Error:\s*/, "").trim() : "";
94
+ const detail = hostErrorDetail(caught);
86
95
  return detail ? `Export failed: ${detail}` : "Export failed. The document could not be exported.";
87
96
  }
88
97
  function quickLabel(opts, transformSummaries, saveMode, destinationPath) {
@@ -118,6 +127,7 @@ function ExportToolbarControls({
118
127
  mediaContainer,
119
128
  workspaceContainer,
120
129
  mediaProvider,
130
+ mediaEditRenders = null,
121
131
  saveBlob,
122
132
  destinationAdapter,
123
133
  trigger = "menu",
@@ -126,13 +136,17 @@ function ExportToolbarControls({
126
136
  colorScheme = "light",
127
137
  videoExportPalette,
128
138
  shareBaseUrl,
129
- initialSharedMode = null
139
+ initialSharedMode = null,
140
+ speech,
141
+ defaultThemeId
130
142
  }) {
131
143
  const { markdownSource, markdownDoc } = useEditorContext();
132
144
  const [menuOpen, setMenuOpen] = useState(false);
133
145
  const [dialogOpen, setDialogOpen] = useState(false);
146
+ const [fileShare, setFileShare] = useState(false);
134
147
  const [shareDialogOpen, setShareDialogOpen] = useState(false);
135
148
  const [videoModalOpen, setVideoModalOpen] = useState(false);
149
+ const [audioDialogOpen, setAudioDialogOpen] = useState(false);
136
150
  const [videoOutputFormat, setVideoOutputFormat] = useState("mp4");
137
151
  const [videoLoading, setVideoLoading] = useState(false);
138
152
  const [videoLoadError, setVideoLoadError] = useState(null);
@@ -150,19 +164,14 @@ function ExportToolbarControls({
150
164
  const lastOptions = loadLastExportOptions();
151
165
  const quickDestinationKey = lastOptions ? JSON.stringify([selectedFile, lastOptions]) : null;
152
166
  const quickDestinationTarget = quickDestination?.key === quickDestinationKey ? quickDestination.target : null;
153
- const docThemeId = useMemo(() => {
154
- const fm = markdownDoc?.frontmatter;
155
- if (!fm) return null;
156
- const candidates = [fm["squisq-theme"], fm["theme"], fm["themeId"]];
157
- for (const v of candidates) {
158
- if (typeof v === "string" && v.trim()) return v.trim();
159
- }
160
- return null;
161
- }, [markdownDoc]);
162
- const dialogInitial = useMemo(() => {
163
- const base = lastOptions ?? DEFAULT_OPTIONS;
164
- return docThemeId ? { ...base, themeId: docThemeId } : base;
165
- }, [lastOptions, docThemeId]);
167
+ const docThemeId = useMemo(
168
+ () => readFrontmatterThemeId(markdownDoc?.frontmatter),
169
+ [markdownDoc]
170
+ );
171
+ const dialogInitial = useMemo(
172
+ () => resolveExportDialogInitial(lastOptions, docThemeId, defaultThemeId),
173
+ [lastOptions, docThemeId, defaultThemeId]
174
+ );
166
175
  useEffect(() => {
167
176
  if (!menuOpen) return;
168
177
  const onPointerDown = (e) => {
@@ -233,25 +242,26 @@ function ExportToolbarControls({
233
242
  [destinationAdapter, selectedFile]
234
243
  );
235
244
  const handleOpenDialog = useCallback(() => {
236
- setMenuOpen(false);
245
+ setFileShare(false);
246
+ closeMenu(true);
237
247
  setExportError(null);
238
248
  setDialogOpen(true);
239
249
  void refreshDestination(dialogInitial);
240
- }, [dialogInitial, refreshDestination]);
250
+ }, [closeMenu, dialogInitial, refreshDestination]);
241
251
  const handleCloseDialog = useCallback(() => {
242
252
  setDialogOpen(false);
243
253
  setExportError(null);
244
254
  }, []);
245
255
  const handleOpenShareDialog = useCallback(() => {
246
- setMenuOpen(false);
256
+ closeMenu(true);
247
257
  setShareDialogOpen(true);
248
- }, []);
258
+ }, [closeMenu]);
249
259
  const handleCloseShareDialog = useCallback(() => {
250
260
  setShareDialogOpen(false);
251
261
  }, []);
252
262
  const handleOpenVideoModal = useCallback(
253
263
  async (outputFormat) => {
254
- setMenuOpen(false);
264
+ closeMenu(true);
255
265
  setVideoOutputFormat(outputFormat);
256
266
  setVideoModalOpen(true);
257
267
  setVideoLoadError(null);
@@ -264,10 +274,12 @@ function ExportToolbarControls({
264
274
  }
265
275
  setVideoLoading(true);
266
276
  try {
267
- const modules = videoModules ?? await loadVideoExportModules();
277
+ const [modules, exportDoc] = await Promise.all([
278
+ videoModules ?? loadVideoExportModules(),
279
+ // The same projection the Video preview plays, so the MP4 matches it.
280
+ buildVideoExportDoc(markdownSource, { fileName: selectedFile, workspaceContainer })
281
+ ]);
268
282
  setVideoModules(modules);
269
- const parsedDoc = modules.markdownToDoc(parseMarkdown(markdownSource));
270
- const exportDoc = workspaceContainer ? await modules.resolveAudioMapping(parsedDoc, workspaceContainer) : parsedDoc;
271
283
  setVideoDoc(exportDoc);
272
284
  } catch {
273
285
  setVideoLoadError("Video export could not be loaded.");
@@ -275,7 +287,7 @@ function ExportToolbarControls({
275
287
  setVideoLoading(false);
276
288
  }
277
289
  },
278
- [markdownSource, videoModules, workspaceContainer]
290
+ [closeMenu, markdownSource, selectedFile, videoModules, workspaceContainer]
279
291
  );
280
292
  const handleCloseVideoModal = useCallback(() => {
281
293
  setVideoModalOpen(false);
@@ -317,7 +329,7 @@ function ExportToolbarControls({
317
329
  setExportError(null);
318
330
  try {
319
331
  let exportTarget = destinationTarget;
320
- if (destinationAdapter?.pickBeforeSave) {
332
+ if (!fileShare && destinationAdapter?.pickBeforeSave) {
321
333
  const filename = buildExportFilename(selectedFile, opts);
322
334
  exportTarget = await destinationAdapter.pickTarget(filename, destinationTarget);
323
335
  if (!exportTarget) return;
@@ -329,7 +341,10 @@ function ExportToolbarControls({
329
341
  selectedFile,
330
342
  opts,
331
343
  mediaContainer,
332
- destinationAdapter ? (blob, filename) => saveToDestination(blob, filename, exportTarget) : saveBlob
344
+ fileShare && destinationAdapter?.shareBlob ? async (blob, filename) => {
345
+ const outcome = await destinationAdapter.shareBlob(blob, filename);
346
+ if (outcome === "cancelled") throw new ExportCancelledError();
347
+ } : destinationAdapter ? (blob, filename) => saveToDestination(blob, filename, exportTarget) : saveBlob
333
348
  );
334
349
  setDialogOpen(false);
335
350
  } catch (caught) {
@@ -339,6 +354,7 @@ function ExportToolbarControls({
339
354
  }
340
355
  },
341
356
  [
357
+ fileShare,
342
358
  markdownSource,
343
359
  selectedFile,
344
360
  mediaContainer,
@@ -350,7 +366,7 @@ function ExportToolbarControls({
350
366
  );
351
367
  const handleQuickExport = useCallback(async () => {
352
368
  if (!lastOptions) return;
353
- setMenuOpen(false);
369
+ closeMenu(true);
354
370
  setExporting(true);
355
371
  setExportError(null);
356
372
  try {
@@ -380,6 +396,7 @@ function ExportToolbarControls({
380
396
  setExporting(false);
381
397
  }
382
398
  }, [
399
+ closeMenu,
383
400
  destinationAdapter,
384
401
  lastOptions,
385
402
  markdownSource,
@@ -392,13 +409,8 @@ function ExportToolbarControls({
392
409
  const handleDismissExportError = useCallback(() => {
393
410
  setExportError(null);
394
411
  }, []);
395
- const handleVideoSave = useCallback(
396
- async (blob, filename) => {
397
- if (!destinationAdapter) return false;
398
- const target = await destinationAdapter.pickTarget(filename, null);
399
- if (!target) return false;
400
- return await destinationAdapter.saveBlob(blob, filename, target) !== null;
401
- },
412
+ const videoSaveOutput = useMemo(
413
+ () => destinationAdapter ? createImageSaveOutput(destinationAdapter) : void 0,
402
414
  [destinationAdapter]
403
415
  );
404
416
  const LoadedVideoExportModal = videoModules?.Modal;
@@ -409,6 +421,7 @@ function ExportToolbarControls({
409
421
  trigger === "button" ? /* @__PURE__ */ jsx(
410
422
  "button",
411
423
  {
424
+ ref: triggerRef,
412
425
  type: "button",
413
426
  className: "squisq-toolbar-button db-toolbar-export-trigger",
414
427
  onClick: handleOpenDialog,
@@ -478,6 +491,22 @@ function ExportToolbarControls({
478
491
  children: "Export document..."
479
492
  }
480
493
  ),
494
+ destinationAdapter?.shareBlob && /* @__PURE__ */ jsx(
495
+ "button",
496
+ {
497
+ type: "button",
498
+ role: "menuitem",
499
+ tabIndex: -1,
500
+ className: "db-toolbar-menu-item",
501
+ onClick: () => {
502
+ setFileShare(true);
503
+ closeMenu(true);
504
+ setExportError(null);
505
+ setDialogOpen(true);
506
+ },
507
+ children: "Share file..."
508
+ }
509
+ ),
481
510
  /* @__PURE__ */ jsx(
482
511
  "button",
483
512
  {
@@ -502,6 +531,20 @@ function ExportToolbarControls({
502
531
  children: "Export video..."
503
532
  }
504
533
  ),
534
+ speech && /* @__PURE__ */ jsx(
535
+ "button",
536
+ {
537
+ type: "button",
538
+ role: "menuitem",
539
+ tabIndex: -1,
540
+ className: "db-toolbar-menu-item",
541
+ onClick: () => {
542
+ closeMenu(true);
543
+ setAudioDialogOpen(true);
544
+ },
545
+ children: "Export audio..."
546
+ }
547
+ ),
505
548
  showAnimatedGifExport && /* @__PURE__ */ jsx(
506
549
  "button",
507
550
  {
@@ -518,6 +561,29 @@ function ExportToolbarControls({
518
561
  }
519
562
  )
520
563
  ] }),
564
+ audioDialogOpen && /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(
565
+ AudioExportDialog,
566
+ {
567
+ speech,
568
+ selectedFile,
569
+ workspaceContainer: workspaceContainer ?? null,
570
+ onSave: async (blob, filename) => {
571
+ try {
572
+ if (destinationAdapter) {
573
+ const target = await destinationAdapter.resolveTarget(filename).catch(() => null);
574
+ await saveToDestination(blob, filename, target);
575
+ } else if (saveBlob) {
576
+ await saveBlob(blob, filename);
577
+ }
578
+ return true;
579
+ } catch (caught) {
580
+ if (caught instanceof ExportCancelledError) return false;
581
+ throw caught;
582
+ }
583
+ },
584
+ onClose: () => setAudioDialogOpen(false)
585
+ }
586
+ ) }),
521
587
  dialogOpen && /* @__PURE__ */ jsx(Suspense, { fallback: null, children: /* @__PURE__ */ jsx(
522
588
  ExportDialog,
523
589
  {
@@ -533,6 +599,7 @@ function ExportToolbarControls({
533
599
  onOptionsChange: destinationAdapter ? handleOptionsChange : void 0,
534
600
  actionLabel: (options) => {
535
601
  const extension = options.format === "html" && (options.includeLinkedDocs || options.htmlBundle === "zip") ? "ZIP" : FORMAT_EXTENSIONS[options.format].slice(1);
602
+ if (fileShare) return `Share ${extension.toUpperCase()}`;
536
603
  if (destinationAdapter && !destinationAdapter.pickBeforeSave) {
537
604
  return `Save ${extension.toUpperCase()}`;
538
605
  }
@@ -584,6 +651,7 @@ function ExportToolbarControls({
584
651
  doc: videoDoc,
585
652
  playerScript: videoModules.playerScript,
586
653
  ...mediaProvider ? { mediaProvider } : {},
654
+ mediaEditRenders,
587
655
  colorScheme,
588
656
  uiPalette: videoExportPalette,
589
657
  defaultConfig: {
@@ -591,8 +659,8 @@ function ExportToolbarControls({
591
659
  ...ffmpegWasm ? { ffmpegWasm } : {},
592
660
  outputFormat: videoOutputFormat
593
661
  },
594
- ...destinationAdapter ? {
595
- saveOutput: handleVideoSave,
662
+ ...videoSaveOutput ? {
663
+ saveOutput: videoSaveOutput,
596
664
  saveActionLabel: (format) => saveActionLabel(format, "save-as")
597
665
  } : {},
598
666
  onClose: handleCloseVideoModal
@@ -2,12 +2,12 @@ import "./chunk-APC4KI4B.js";
2
2
  import {
3
3
  isFileDirty
4
4
  } from "./chunk-V2ENBGUA.js";
5
- import {
6
- useMenuKeyboard
7
- } from "./chunk-MRUK56JS.js";
8
5
  import {
9
6
  useGitContext
10
7
  } from "./chunk-6E635KCJ.js";
8
+ import {
9
+ useMenuKeyboard
10
+ } from "./chunk-GMA4KGGO.js";
11
11
 
12
12
  // src/Git/GitToolbarControl.tsx
13
13
  import { useEffect, useRef, useState } from "react";
@@ -31,15 +31,15 @@ function GitToolbarControl({ selectedFile }) {
31
31
  const dirty = isFileDirty(git.status, selectedFile);
32
32
  const label = dirty ? "Git actions (file modified)" : "Git actions";
33
33
  const openDiff = () => {
34
- closeMenu(false);
34
+ closeMenu(true);
35
35
  git.openDialog({ kind: "diff", path: selectedFile });
36
36
  };
37
37
  const openHistory = () => {
38
- closeMenu(false);
38
+ closeMenu(true);
39
39
  git.openDialog({ kind: "history", path: selectedFile });
40
40
  };
41
41
  const openOnRemote = () => {
42
- closeMenu(false);
42
+ closeMenu(true);
43
43
  git.openOnRemote(selectedFile);
44
44
  };
45
45
  return /* @__PURE__ */ jsxs("div", { className: "db-toolbar-menu", ref: rootRef, children: [
@@ -6,15 +6,15 @@ import {
6
6
  formatAheadBehind,
7
7
  summarizeDirty
8
8
  } from "./chunk-V2ENBGUA.js";
9
- import {
10
- useMenuKeyboard
11
- } from "./chunk-MRUK56JS.js";
12
9
  import {
13
10
  useGitContext
14
11
  } from "./chunk-6E635KCJ.js";
12
+ import {
13
+ useMenuKeyboard
14
+ } from "./chunk-GMA4KGGO.js";
15
15
  import {
16
16
  Dialog
17
- } from "./chunk-LG6HAWCK.js";
17
+ } from "./chunk-56KO2LYN.js";
18
18
 
19
19
  // src/Git/GitStatusBar.tsx
20
20
  import { useCallback, useEffect, useRef, useState } from "react";
@@ -36,7 +36,7 @@ function GitStatusBar() {
36
36
  }, [menuOpen]);
37
37
  const runItem = useCallback(
38
38
  (action) => {
39
- closeMenu(false);
39
+ closeMenu(true);
40
40
  action();
41
41
  },
42
42
  [closeMenu]
@@ -867,7 +867,7 @@ function GitAuthGuidanceDialog({
867
867
  {
868
868
  type: "button",
869
869
  className: "db-git-secondary-btn",
870
- onClick: () => void maybeGetDocBlocksHost()?.shell.openExternal(LEARN_MORE_URL),
870
+ onClick: () => void maybeGetDocBlocksHost()?.shell?.openExternal(LEARN_MORE_URL),
871
871
  children: "Learn more"
872
872
  }
873
873
  ),
@@ -0,0 +1,9 @@
1
+ import {
2
+ PresentationMaker
3
+ } from "./chunk-EPOLZNFD.js";
4
+ import "./chunk-NAH52736.js";
5
+ import "./chunk-K4I3NJFL.js";
6
+ import "./chunk-56KO2LYN.js";
7
+ export {
8
+ PresentationMaker
9
+ };