@bendyline/docblocks-react 1.1.1 → 2.0.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.
- package/README.md +50 -15
- package/dist/AppMenu/AppMenu.d.ts +29 -2
- package/dist/AppMenu/AppMenu.d.ts.map +1 -1
- package/dist/AppMenu/AppMenu.js +41 -2
- package/dist/AppMenu/AppMenu.js.map +1 -1
- package/dist/AppMenu/index.d.ts +1 -1
- package/dist/AppMenu/index.d.ts.map +1 -1
- package/dist/DocBlocksShell/DocBlocksShell.d.ts +17 -4
- package/dist/DocBlocksShell/DocBlocksShell.d.ts.map +1 -1
- package/dist/DocBlocksShell/DocBlocksShell.js +1710 -299
- package/dist/DocBlocksShell/DocBlocksShell.js.map +1 -1
- package/dist/DocBlocksShell/LazyEditorShell.d.ts +3 -0
- package/dist/DocBlocksShell/LazyEditorShell.d.ts.map +1 -0
- package/dist/DocBlocksShell/LazyEditorShell.js +3 -0
- package/dist/DocBlocksShell/LazyEditorShell.js.map +1 -0
- package/dist/DocBlocksShell/UpdateAvailableNotice.d.ts +13 -0
- package/dist/DocBlocksShell/UpdateAvailableNotice.d.ts.map +1 -0
- package/dist/DocBlocksShell/UpdateAvailableNotice.js +16 -0
- package/dist/DocBlocksShell/UpdateAvailableNotice.js.map +1 -0
- package/dist/DocBlocksShell/document-title.d.ts +3 -0
- package/dist/DocBlocksShell/document-title.d.ts.map +1 -0
- package/dist/DocBlocksShell/document-title.js +17 -0
- package/dist/DocBlocksShell/document-title.js.map +1 -0
- package/dist/DocBlocksShell/workspace-authority-barrier.d.ts +14 -0
- package/dist/DocBlocksShell/workspace-authority-barrier.d.ts.map +1 -0
- package/dist/DocBlocksShell/workspace-authority-barrier.js +23 -0
- package/dist/DocBlocksShell/workspace-authority-barrier.js.map +1 -0
- package/dist/Export/DeferredExportToolbarControls.d.ts +5 -0
- package/dist/Export/DeferredExportToolbarControls.d.ts.map +1 -0
- package/dist/Export/DeferredExportToolbarControls.js +10 -0
- package/dist/Export/DeferredExportToolbarControls.js.map +1 -0
- package/dist/Export/ExportDialog.d.ts +10 -1
- package/dist/Export/ExportDialog.d.ts.map +1 -1
- package/dist/Export/ExportDialog.js +39 -20
- package/dist/Export/ExportDialog.js.map +1 -1
- package/dist/Export/ExportToolbarControls.d.ts +21 -1
- package/dist/Export/ExportToolbarControls.d.ts.map +1 -1
- package/dist/Export/ExportToolbarControls.js +161 -26
- package/dist/Export/ExportToolbarControls.js.map +1 -1
- package/dist/Export/export-destination.d.ts +3 -0
- package/dist/Export/export-destination.d.ts.map +1 -0
- package/dist/Export/export-destination.js +32 -0
- package/dist/Export/export-destination.js.map +1 -0
- package/dist/Export/index.d.ts +8 -4
- package/dist/Export/index.d.ts.map +1 -1
- package/dist/Export/index.js +4 -1
- package/dist/Export/index.js.map +1 -1
- package/dist/Export/public-api.d.ts +12 -0
- package/dist/Export/public-api.d.ts.map +1 -0
- package/dist/Export/public-api.js +9 -0
- package/dist/Export/public-api.js.map +1 -0
- package/dist/Export/run-export.d.ts +3 -1
- package/dist/Export/run-export.d.ts.map +1 -1
- package/dist/Export/run-export.js +58 -25
- package/dist/Export/run-export.js.map +1 -1
- package/dist/Export/transform-summaries.d.ts +7 -0
- package/dist/Export/transform-summaries.d.ts.map +1 -0
- package/dist/Export/transform-summaries.js +6 -0
- package/dist/Export/transform-summaries.js.map +1 -0
- package/dist/ExportDialog-MEUISWZX.js +9 -0
- package/dist/ExportDialog-MEUISWZX.js.map +1 -0
- package/dist/ExportToolbarControls-D2YDWOXW.js +373 -0
- package/dist/ExportToolbarControls-D2YDWOXW.js.map +1 -0
- package/dist/FileExplorer/FileExplorer.d.ts +26 -4
- package/dist/FileExplorer/FileExplorer.d.ts.map +1 -1
- package/dist/FileExplorer/FileExplorer.js +204 -29
- package/dist/FileExplorer/FileExplorer.js.map +1 -1
- package/dist/FileExplorer/FileTreeNode.d.ts +24 -3
- package/dist/FileExplorer/FileTreeNode.d.ts.map +1 -1
- package/dist/FileExplorer/FileTreeNode.js +27 -8
- package/dist/FileExplorer/FileTreeNode.js.map +1 -1
- package/dist/FileExplorer/index.d.ts +1 -1
- package/dist/FileExplorer/index.d.ts.map +1 -1
- package/dist/FileExplorer/useFileTree.d.ts +5 -3
- package/dist/FileExplorer/useFileTree.d.ts.map +1 -1
- package/dist/FileExplorer/useFileTree.js +173 -13
- package/dist/FileExplorer/useFileTree.js.map +1 -1
- package/dist/Git/GitAuthGuidanceDialog.d.ts +18 -0
- package/dist/Git/GitAuthGuidanceDialog.d.ts.map +1 -0
- package/dist/Git/GitAuthGuidanceDialog.js +27 -0
- package/dist/Git/GitAuthGuidanceDialog.js.map +1 -0
- package/dist/Git/GitBranchesDialog.d.ts +13 -0
- package/dist/Git/GitBranchesDialog.d.ts.map +1 -0
- package/dist/Git/GitBranchesDialog.js +59 -0
- package/dist/Git/GitBranchesDialog.js.map +1 -0
- package/dist/Git/GitCloneDialog.d.ts +14 -0
- package/dist/Git/GitCloneDialog.d.ts.map +1 -0
- package/dist/Git/GitCloneDialog.js +79 -0
- package/dist/Git/GitCloneDialog.js.map +1 -0
- package/dist/Git/GitCommitDialog.d.ts +12 -0
- package/dist/Git/GitCommitDialog.d.ts.map +1 -0
- package/dist/Git/GitCommitDialog.js +38 -0
- package/dist/Git/GitCommitDialog.js.map +1 -0
- package/dist/Git/GitConflictsDialog.d.ts +12 -0
- package/dist/Git/GitConflictsDialog.d.ts.map +1 -0
- package/dist/Git/GitConflictsDialog.js +17 -0
- package/dist/Git/GitConflictsDialog.js.map +1 -0
- package/dist/Git/GitContext.d.ts +89 -0
- package/dist/Git/GitContext.d.ts.map +1 -0
- package/dist/Git/GitContext.js +15 -0
- package/dist/Git/GitContext.js.map +1 -0
- package/dist/Git/GitDiffDialog.d.ts +20 -0
- package/dist/Git/GitDiffDialog.d.ts.map +1 -0
- package/dist/Git/GitDiffDialog.js +100 -0
- package/dist/Git/GitDiffDialog.js.map +1 -0
- package/dist/Git/GitDiffView.d.ts +23 -0
- package/dist/Git/GitDiffView.d.ts.map +1 -0
- package/dist/Git/GitDiffView.js +77 -0
- package/dist/Git/GitDiffView.js.map +1 -0
- package/dist/Git/GitHistoryDialog.d.ts +15 -0
- package/dist/Git/GitHistoryDialog.d.ts.map +1 -0
- package/dist/Git/GitHistoryDialog.js +107 -0
- package/dist/Git/GitHistoryDialog.js.map +1 -0
- package/dist/Git/GitStatusBar.d.ts +8 -0
- package/dist/Git/GitStatusBar.d.ts.map +1 -0
- package/dist/Git/GitStatusBar.js +49 -0
- package/dist/Git/GitStatusBar.js.map +1 -0
- package/dist/Git/GitToolbarControl.d.ts +15 -0
- package/dist/Git/GitToolbarControl.d.ts.map +1 -0
- package/dist/Git/GitToolbarControl.js +51 -0
- package/dist/Git/GitToolbarControl.js.map +1 -0
- package/dist/Git/GitUI.d.ts +14 -0
- package/dist/Git/GitUI.d.ts.map +1 -0
- package/dist/Git/GitUI.js +21 -0
- package/dist/Git/GitUI.js.map +1 -0
- package/dist/Git/commit-selection.d.ts +22 -0
- package/dist/Git/commit-selection.d.ts.map +1 -0
- package/dist/Git/commit-selection.js +47 -0
- package/dist/Git/commit-selection.js.map +1 -0
- package/dist/Git/git-clone-utils.d.ts +8 -0
- package/dist/Git/git-clone-utils.d.ts.map +1 -0
- package/dist/Git/git-clone-utils.js +26 -0
- package/dist/Git/git-clone-utils.js.map +1 -0
- package/dist/Git/git-status.d.ts +24 -0
- package/dist/Git/git-status.d.ts.map +1 -0
- package/dist/Git/git-status.js +105 -0
- package/dist/Git/git-status.js.map +1 -0
- package/dist/Git/useGit.d.ts +15 -0
- package/dist/Git/useGit.d.ts.map +1 -0
- package/dist/Git/useGit.js +206 -0
- package/dist/Git/useGit.js.map +1 -0
- package/dist/Git/useGitStatus.d.ts +17 -0
- package/dist/Git/useGitStatus.d.ts.map +1 -0
- package/dist/Git/useGitStatus.js +63 -0
- package/dist/Git/useGitStatus.js.map +1 -0
- package/dist/GitToolbarControl-LMIR4R7I.js +117 -0
- package/dist/GitToolbarControl-LMIR4R7I.js.map +1 -0
- package/dist/GitUI-KGF5MSNV.js +1048 -0
- package/dist/GitUI-KGF5MSNV.js.map +1 -0
- package/dist/LazyEditorShell-EF2BWRXU.js +6 -0
- package/dist/LazyEditorShell-EF2BWRXU.js.map +1 -0
- package/dist/Settings/Settings.d.ts +23 -0
- package/dist/Settings/Settings.d.ts.map +1 -0
- package/dist/Settings/Settings.js +22 -0
- package/dist/Settings/Settings.js.map +1 -0
- package/dist/Settings/public-api.d.ts +3 -0
- package/dist/Settings/public-api.d.ts.map +1 -0
- package/dist/Settings/public-api.js +2 -0
- package/dist/Settings/public-api.js.map +1 -0
- package/dist/WorkspacePicker/WorkspacePicker.d.ts +6 -1
- package/dist/WorkspacePicker/WorkspacePicker.d.ts.map +1 -1
- package/dist/WorkspacePicker/WorkspacePicker.js +16 -5
- package/dist/WorkspacePicker/WorkspacePicker.js.map +1 -1
- package/dist/chunk-3SAXDU2U.js +157 -0
- package/dist/chunk-3SAXDU2U.js.map +1 -0
- package/dist/chunk-4XXSWN3T.js +13 -0
- package/dist/chunk-4XXSWN3T.js.map +1 -0
- package/dist/chunk-5A4KEWKT.js +97 -0
- package/dist/chunk-5A4KEWKT.js.map +1 -0
- package/dist/chunk-AOVTHZU7.js +321 -0
- package/dist/chunk-AOVTHZU7.js.map +1 -0
- package/dist/chunk-DD4VFJQI.js +51 -0
- package/dist/chunk-DD4VFJQI.js.map +1 -0
- package/dist/chunk-GSNZSCIK.js +55 -0
- package/dist/chunk-GSNZSCIK.js.map +1 -0
- package/dist/chunk-VHDP4IPL.js +70 -0
- package/dist/chunk-VHDP4IPL.js.map +1 -0
- package/dist/chunk-ZI56BNB7.js +270 -0
- package/dist/chunk-ZI56BNB7.js.map +1 -0
- package/dist/components/Dialog.d.ts +22 -0
- package/dist/components/Dialog.d.ts.map +1 -0
- package/dist/components/Dialog.js +33 -0
- package/dist/components/Dialog.js.map +1 -0
- package/dist/editor.d.ts +10 -0
- package/dist/editor.d.ts.map +1 -0
- package/dist/editor.js +70 -0
- package/dist/editor.js.map +1 -0
- package/dist/export/index.d.ts +87 -0
- package/dist/export/index.js +26 -0
- package/dist/export/index.js.map +1 -0
- package/dist/hooks/index.d.ts +2 -1
- package/dist/hooks/index.d.ts.map +1 -1
- package/dist/hooks/index.js +1 -1
- package/dist/hooks/index.js.map +1 -1
- package/dist/hooks/useDocumentSession.d.ts +16 -0
- package/dist/hooks/useDocumentSession.d.ts.map +1 -0
- package/dist/hooks/useDocumentSession.js +18 -0
- package/dist/hooks/useDocumentSession.js.map +1 -0
- package/dist/icons.d.ts +11 -6
- package/dist/icons.d.ts.map +1 -1
- package/dist/icons.js +21 -20
- package/dist/icons.js.map +1 -1
- package/dist/index.d.ts +8 -5
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +4 -2
- package/dist/index.js.map +1 -1
- package/dist/preferences/theme.d.ts +18 -0
- package/dist/preferences/theme.d.ts.map +1 -0
- package/dist/preferences/theme.js +63 -0
- package/dist/preferences/theme.js.map +1 -0
- package/dist/provider-lease.d.ts +10 -0
- package/dist/provider-lease.d.ts.map +1 -0
- package/dist/provider-lease.js +42 -0
- package/dist/provider-lease.js.map +1 -0
- package/dist/run-export-ICTZITXC.js +10 -0
- package/dist/run-export-ICTZITXC.js.map +1 -0
- package/dist/settings/index.d.ts +28 -0
- package/dist/settings/index.js +12 -0
- package/dist/settings/index.js.map +1 -0
- package/package.json +27 -10
- package/src/AppMenu/AppMenu.tsx +169 -99
- package/src/AppMenu/index.ts +1 -1
- package/src/DocBlocksShell/DocBlocksShell.tsx +2183 -516
- package/src/DocBlocksShell/LazyEditorShell.ts +2 -0
- package/src/DocBlocksShell/UpdateAvailableNotice.tsx +60 -0
- package/src/DocBlocksShell/document-title.ts +19 -0
- package/src/DocBlocksShell/workspace-authority-barrier.ts +26 -0
- package/src/Export/DeferredExportToolbarControls.tsx +23 -0
- package/src/Export/ExportDialog.tsx +102 -27
- package/src/Export/ExportToolbarControls.tsx +343 -57
- package/src/Export/export-destination.ts +30 -0
- package/src/Export/index.ts +18 -4
- package/src/Export/public-api.ts +17 -0
- package/src/Export/run-export.ts +66 -29
- package/src/Export/transform-summaries.ts +14 -0
- package/src/FileExplorer/FileExplorer.tsx +284 -38
- package/src/FileExplorer/FileTreeNode.tsx +100 -8
- package/src/FileExplorer/index.ts +1 -1
- package/src/FileExplorer/useFileTree.ts +190 -16
- package/src/Git/GitAuthGuidanceDialog.tsx +84 -0
- package/src/Git/GitBranchesDialog.tsx +144 -0
- package/src/Git/GitCloneDialog.tsx +200 -0
- package/src/Git/GitCommitDialog.tsx +119 -0
- package/src/Git/GitConflictsDialog.tsx +62 -0
- package/src/Git/GitContext.tsx +88 -0
- package/src/Git/GitDiffDialog.tsx +147 -0
- package/src/Git/GitDiffView.tsx +105 -0
- package/src/Git/GitHistoryDialog.tsx +195 -0
- package/src/Git/GitStatusBar.tsx +157 -0
- package/src/Git/GitToolbarControl.tsx +123 -0
- package/src/Git/GitUI.tsx +68 -0
- package/src/Git/commit-selection.ts +63 -0
- package/src/Git/git-clone-utils.ts +23 -0
- package/src/Git/git-status.ts +113 -0
- package/src/Git/useGit.ts +279 -0
- package/src/Git/useGitStatus.ts +78 -0
- package/src/Settings/Settings.tsx +118 -0
- package/src/Settings/public-api.ts +8 -0
- package/src/WorkspacePicker/WorkspacePicker.tsx +62 -8
- package/src/components/Dialog.tsx +81 -0
- package/src/editor.ts +72 -0
- package/src/hooks/index.ts +2 -1
- package/src/hooks/useDocumentSession.ts +37 -0
- package/src/icons.tsx +33 -55
- package/src/index.ts +35 -5
- package/src/preferences/theme.ts +67 -0
- package/src/provider-lease.ts +52 -0
- package/src/styles/docblocks.css +2247 -77
- package/src/types/pwa-dom.d.ts +31 -0
- package/dist/hooks/useAutoSave.d.ts +0 -15
- package/dist/hooks/useAutoSave.d.ts.map +0 -1
- package/dist/hooks/useAutoSave.js +0 -83
- package/dist/hooks/useAutoSave.js.map +0 -1
- package/src/fonts/fonts.css +0 -362
- package/src/fonts/licenses/LICENSE-cormorant-garamond.txt +0 -93
- package/src/fonts/licenses/LICENSE-crimson-text.txt +0 -93
- package/src/fonts/licenses/LICENSE-dm-sans.txt +0 -93
- package/src/fonts/licenses/LICENSE-dm-serif-display.txt +0 -93
- package/src/fonts/licenses/LICENSE-hanken-grotesk.txt +0 -94
- package/src/fonts/licenses/LICENSE-ibm-plex-sans.txt +0 -93
- package/src/fonts/licenses/LICENSE-inter.txt +0 -93
- package/src/fonts/licenses/LICENSE-jetbrains-mono.txt +0 -93
- package/src/fonts/licenses/LICENSE-lora.txt +0 -93
- package/src/fonts/licenses/LICENSE-merriweather.txt +0 -93
- package/src/fonts/licenses/LICENSE-oswald.txt +0 -93
- package/src/fonts/licenses/LICENSE-playfair-display.txt +0 -93
- package/src/fonts/licenses/LICENSE-pt-serif.txt +0 -93
- package/src/fonts/licenses/LICENSE-roboto.txt +0 -93
- package/src/fonts/licenses/LICENSE-source-serif-4.txt +0 -93
- package/src/fonts/woff2/cormorant-garamond-400.woff2 +0 -0
- package/src/fonts/woff2/cormorant-garamond-700.woff2 +0 -0
- package/src/fonts/woff2/crimson-text-400.woff2 +0 -0
- package/src/fonts/woff2/crimson-text-400i.woff2 +0 -0
- package/src/fonts/woff2/crimson-text-700.woff2 +0 -0
- package/src/fonts/woff2/dm-sans-400.woff2 +0 -0
- package/src/fonts/woff2/dm-sans-400i.woff2 +0 -0
- package/src/fonts/woff2/dm-sans-500.woff2 +0 -0
- package/src/fonts/woff2/dm-sans-700.woff2 +0 -0
- package/src/fonts/woff2/dm-serif-display-400.woff2 +0 -0
- package/src/fonts/woff2/hanken-grotesk-400.woff2 +0 -0
- package/src/fonts/woff2/hanken-grotesk-400i.woff2 +0 -0
- package/src/fonts/woff2/hanken-grotesk-500.woff2 +0 -0
- package/src/fonts/woff2/hanken-grotesk-600.woff2 +0 -0
- package/src/fonts/woff2/hanken-grotesk-700.woff2 +0 -0
- package/src/fonts/woff2/ibm-plex-sans-400.woff2 +0 -0
- package/src/fonts/woff2/ibm-plex-sans-400i.woff2 +0 -0
- package/src/fonts/woff2/ibm-plex-sans-500.woff2 +0 -0
- package/src/fonts/woff2/ibm-plex-sans-600.woff2 +0 -0
- package/src/fonts/woff2/ibm-plex-sans-700.woff2 +0 -0
- package/src/fonts/woff2/inter-400.woff2 +0 -0
- package/src/fonts/woff2/inter-400i.woff2 +0 -0
- package/src/fonts/woff2/inter-500.woff2 +0 -0
- package/src/fonts/woff2/inter-600.woff2 +0 -0
- package/src/fonts/woff2/inter-700.woff2 +0 -0
- package/src/fonts/woff2/jetbrains-mono-400.woff2 +0 -0
- package/src/fonts/woff2/jetbrains-mono-400i.woff2 +0 -0
- package/src/fonts/woff2/jetbrains-mono-700.woff2 +0 -0
- package/src/fonts/woff2/lora-400.woff2 +0 -0
- package/src/fonts/woff2/lora-400i.woff2 +0 -0
- package/src/fonts/woff2/lora-700.woff2 +0 -0
- package/src/fonts/woff2/merriweather-400.woff2 +0 -0
- package/src/fonts/woff2/merriweather-700.woff2 +0 -0
- package/src/fonts/woff2/oswald-400.woff2 +0 -0
- package/src/fonts/woff2/oswald-700.woff2 +0 -0
- package/src/fonts/woff2/playfair-display-400.woff2 +0 -0
- package/src/fonts/woff2/playfair-display-700.woff2 +0 -0
- package/src/fonts/woff2/pt-serif-400.woff2 +0 -0
- package/src/fonts/woff2/pt-serif-700.woff2 +0 -0
- package/src/fonts/woff2/roboto-400.woff2 +0 -0
- package/src/fonts/woff2/roboto-400i.woff2 +0 -0
- package/src/fonts/woff2/roboto-700.woff2 +0 -0
- package/src/fonts/woff2/source-serif-4-400.woff2 +0 -0
- package/src/fonts/woff2/source-serif-4-400i.woff2 +0 -0
- package/src/fonts/woff2/source-serif-4-700.woff2 +0 -0
- package/src/hooks/useAutoSave.ts +0 -116
package/src/Export/run-export.ts
CHANGED
|
@@ -8,27 +8,13 @@ import type {
|
|
|
8
8
|
MarkdownInlineNode,
|
|
9
9
|
} from '@bendyline/squisq/markdown';
|
|
10
10
|
import { parseMarkdown } from '@bendyline/squisq/markdown';
|
|
11
|
-
import { markdownToDoc } from '@bendyline/squisq/doc';
|
|
12
11
|
import type { Doc } from '@bendyline/squisq/schemas';
|
|
13
|
-
import { applyTransform } from '@bendyline/squisq/transform';
|
|
14
|
-
import { markdownDocToDocx } from '@bendyline/squisq-formats/docx';
|
|
15
|
-
import { markdownDocToPdf } from '@bendyline/squisq-formats/pdf';
|
|
16
|
-
import { docToPptx } from '@bendyline/squisq-formats/pptx';
|
|
17
|
-
import {
|
|
18
|
-
docToHtml,
|
|
19
|
-
docToHtmlZip,
|
|
20
|
-
collectImagePaths,
|
|
21
|
-
markdownDocsToPlainHtmlBundle,
|
|
22
|
-
markdownDocsToHtmlBundle,
|
|
23
|
-
markdownDocToPlainHtml,
|
|
24
|
-
} from '@bendyline/squisq-formats/html';
|
|
25
|
-
import { containerToZip } from '@bendyline/squisq-formats/container';
|
|
26
|
-
import { MemoryContentContainer } from '@bendyline/squisq/storage';
|
|
27
|
-
import { PLAYER_BUNDLE } from '@bendyline/squisq-react/standalone-source';
|
|
28
12
|
import type { ContentContainer } from '@bendyline/squisq/storage';
|
|
29
13
|
import type { ExportOptions, ExportFormat } from './export-options.js';
|
|
30
14
|
import { FORMAT_EXTENSIONS } from './export-options.js';
|
|
31
15
|
|
|
16
|
+
export type ExportBlobSaver = (blob: Blob, filename: string) => Promise<void> | void;
|
|
17
|
+
|
|
32
18
|
const MIME_TYPES: Record<ExportFormat, string> = {
|
|
33
19
|
docx: 'application/vnd.openxmlformats-officedocument.wordprocessingml.document',
|
|
34
20
|
pdf: 'application/pdf',
|
|
@@ -47,52 +33,81 @@ function downloadBlob(blob: Blob, filename: string): void {
|
|
|
47
33
|
URL.revokeObjectURL(url);
|
|
48
34
|
}
|
|
49
35
|
|
|
36
|
+
async function saveExportBlob(
|
|
37
|
+
blob: Blob,
|
|
38
|
+
filename: string,
|
|
39
|
+
saveBlob?: ExportBlobSaver,
|
|
40
|
+
): Promise<void> {
|
|
41
|
+
if (saveBlob) {
|
|
42
|
+
await saveBlob(blob, filename);
|
|
43
|
+
return;
|
|
44
|
+
}
|
|
45
|
+
downloadBlob(blob, filename);
|
|
46
|
+
}
|
|
47
|
+
|
|
50
48
|
/** Derive a filename from the selected file path and export format. */
|
|
51
49
|
function buildFilename(selectedFile: string | null, format: ExportFormat): string {
|
|
52
50
|
const base = selectedFile ? selectedFile.replace(/^\//, '').replace(/\.[^.]+$/, '') : 'document';
|
|
53
51
|
return base + FORMAT_EXTENSIONS[format];
|
|
54
52
|
}
|
|
55
53
|
|
|
54
|
+
export function buildExportFilename(selectedFile: string | null, options: ExportOptions): string {
|
|
55
|
+
const base = selectedFile ? selectedFile.replace(/^\//, '').replace(/\.[^.]+$/, '') : 'document';
|
|
56
|
+
if (options.format === 'html') {
|
|
57
|
+
if (options.includeLinkedDocs || options.htmlBundle === 'zip') return `${base}.zip`;
|
|
58
|
+
if (options.entryAsIndex) return 'index.html';
|
|
59
|
+
}
|
|
60
|
+
return base + FORMAT_EXTENSIONS[options.format];
|
|
61
|
+
}
|
|
62
|
+
|
|
56
63
|
/** Run the export and trigger a download. */
|
|
57
64
|
export async function runExport(
|
|
58
65
|
markdown: string,
|
|
59
66
|
selectedFile: string | null,
|
|
60
67
|
options: ExportOptions,
|
|
61
68
|
mediaContainer?: ContentContainer | null,
|
|
69
|
+
saveBlob?: ExportBlobSaver,
|
|
62
70
|
): Promise<void> {
|
|
63
71
|
const filename = buildFilename(selectedFile, options.format);
|
|
64
72
|
const themeId = options.themeId !== 'standard' ? options.themeId : undefined;
|
|
65
73
|
|
|
66
74
|
if (options.format === 'md') {
|
|
67
|
-
|
|
75
|
+
await saveExportBlob(new Blob([markdown], { type: MIME_TYPES.md }), filename, saveBlob);
|
|
68
76
|
return;
|
|
69
77
|
}
|
|
70
78
|
|
|
71
79
|
if (options.format === 'html') {
|
|
72
|
-
await runHtmlExport(markdown, filename, options, mediaContainer, selectedFile);
|
|
80
|
+
await runHtmlExport(markdown, filename, options, mediaContainer, selectedFile, saveBlob);
|
|
73
81
|
return;
|
|
74
82
|
}
|
|
75
83
|
|
|
76
84
|
const doc = parseMarkdown(markdown);
|
|
77
85
|
|
|
78
86
|
if (options.format === 'docx') {
|
|
87
|
+
const { markdownDocToDocx } = await import('@bendyline/squisq-formats/docx');
|
|
79
88
|
const images = mediaContainer ? await resolveImages(doc, mediaContainer) : undefined;
|
|
80
89
|
const buf = await markdownDocToDocx(doc, { themeId, images });
|
|
81
|
-
|
|
90
|
+
await saveExportBlob(new Blob([buf], { type: MIME_TYPES.docx }), filename, saveBlob);
|
|
82
91
|
return;
|
|
83
92
|
}
|
|
84
93
|
|
|
85
94
|
if (options.format === 'pdf') {
|
|
95
|
+
const { markdownDocToPdf } = await import('@bendyline/squisq-formats/pdf');
|
|
86
96
|
const buf = await markdownDocToPdf(doc, {
|
|
87
97
|
themeId,
|
|
88
98
|
pageSize: options.pageSize,
|
|
89
99
|
});
|
|
90
|
-
|
|
100
|
+
await saveExportBlob(new Blob([buf], { type: MIME_TYPES.pdf }), filename, saveBlob);
|
|
91
101
|
return;
|
|
92
102
|
}
|
|
93
103
|
|
|
94
104
|
if (options.format === 'pptx') {
|
|
95
|
-
|
|
105
|
+
const [{ markdownToDoc }, { applyTransform }, { docToPptx }] = await Promise.all([
|
|
106
|
+
import('@bendyline/squisq/doc'),
|
|
107
|
+
import('@bendyline/squisq/transform'),
|
|
108
|
+
import('@bendyline/squisq-formats/pptx'),
|
|
109
|
+
]);
|
|
110
|
+
// Use the full transform pipeline: markdown -> Doc -> transform -> PPTX
|
|
96
111
|
const baseDoc = markdownToDoc(doc);
|
|
97
112
|
const transformed = applyTransform(baseDoc, options.transformStyle);
|
|
98
113
|
const enrichedDoc = transformed.doc;
|
|
@@ -100,7 +115,7 @@ export async function runExport(
|
|
|
100
115
|
enrichedDoc.themeId = themeId;
|
|
101
116
|
}
|
|
102
117
|
const buf = await docToPptx(enrichedDoc, { themeId });
|
|
103
|
-
|
|
118
|
+
await saveExportBlob(new Blob([buf], { type: MIME_TYPES.pptx }), filename, saveBlob);
|
|
104
119
|
return;
|
|
105
120
|
}
|
|
106
121
|
}
|
|
@@ -112,6 +127,7 @@ async function runHtmlExport(
|
|
|
112
127
|
options: ExportOptions,
|
|
113
128
|
mediaContainer?: ContentContainer | null,
|
|
114
129
|
selectedFile?: string | null,
|
|
130
|
+
saveBlob?: ExportBlobSaver,
|
|
115
131
|
): Promise<void> {
|
|
116
132
|
const baseName = htmlFilename.replace(/\.html$/, '');
|
|
117
133
|
const zipName = `${baseName}.zip`;
|
|
@@ -136,6 +152,10 @@ async function runHtmlExport(
|
|
|
136
152
|
if (options.includeLinkedDocs && mediaContainer && selectedFile) {
|
|
137
153
|
const entryPath = basenameForBundle(selectedFile);
|
|
138
154
|
if (options.htmlStyle === 'rendered') {
|
|
155
|
+
const [{ markdownDocsToHtmlBundle }, { PLAYER_BUNDLE }] = await Promise.all([
|
|
156
|
+
import('@bendyline/squisq-formats/html'),
|
|
157
|
+
import('@bendyline/squisq-react/standalone-source'),
|
|
158
|
+
]);
|
|
139
159
|
const blob = await markdownDocsToHtmlBundle({
|
|
140
160
|
entryPath,
|
|
141
161
|
readDocument: (path) => readDocumentFromContainer(mediaContainer, path),
|
|
@@ -146,9 +166,10 @@ async function runHtmlExport(
|
|
|
146
166
|
mode: 'static',
|
|
147
167
|
entryAsIndex: options.entryAsIndex,
|
|
148
168
|
});
|
|
149
|
-
|
|
169
|
+
await saveExportBlob(blob, zipName, saveBlob);
|
|
150
170
|
return;
|
|
151
171
|
}
|
|
172
|
+
const { markdownDocsToPlainHtmlBundle } = await import('@bendyline/squisq-formats/html');
|
|
152
173
|
const blob = await markdownDocsToPlainHtmlBundle({
|
|
153
174
|
entryPath,
|
|
154
175
|
readDocument: (path) => readDocumentFromContainer(mediaContainer, path),
|
|
@@ -157,16 +178,24 @@ async function runHtmlExport(
|
|
|
157
178
|
themeId,
|
|
158
179
|
entryAsIndex: options.entryAsIndex,
|
|
159
180
|
});
|
|
160
|
-
|
|
181
|
+
await saveExportBlob(blob, zipName, saveBlob);
|
|
161
182
|
return;
|
|
162
183
|
}
|
|
163
184
|
|
|
164
185
|
if (options.htmlStyle === 'rendered') {
|
|
186
|
+
const [{ markdownToDoc }, { docToHtml, docToHtmlZip, collectImagePaths }, { PLAYER_BUNDLE }] =
|
|
187
|
+
await Promise.all([
|
|
188
|
+
import('@bendyline/squisq/doc'),
|
|
189
|
+
import('@bendyline/squisq-formats/html'),
|
|
190
|
+
import('@bendyline/squisq-react/standalone-source'),
|
|
191
|
+
]);
|
|
165
192
|
const mdDoc = parseMarkdown(markdown);
|
|
166
193
|
const baseDoc = markdownToDoc(mdDoc);
|
|
167
194
|
if (themeId) baseDoc.themeId = themeId;
|
|
168
195
|
|
|
169
|
-
const images = mediaContainer
|
|
196
|
+
const images = mediaContainer
|
|
197
|
+
? await resolveDocImages(baseDoc, mediaContainer, collectImagePaths)
|
|
198
|
+
: undefined;
|
|
170
199
|
|
|
171
200
|
if (options.htmlBundle === 'zip') {
|
|
172
201
|
const blob = await docToHtmlZip(baseDoc, {
|
|
@@ -175,7 +204,7 @@ async function runHtmlExport(
|
|
|
175
204
|
mode: 'static',
|
|
176
205
|
title: baseName,
|
|
177
206
|
});
|
|
178
|
-
|
|
207
|
+
await saveExportBlob(blob, zipName, saveBlob);
|
|
179
208
|
return;
|
|
180
209
|
}
|
|
181
210
|
|
|
@@ -185,7 +214,7 @@ async function runHtmlExport(
|
|
|
185
214
|
mode: 'static',
|
|
186
215
|
title: baseName,
|
|
187
216
|
});
|
|
188
|
-
|
|
217
|
+
await saveExportBlob(new Blob([html], { type: MIME_TYPES.html }), singleHtmlFilename, saveBlob);
|
|
189
218
|
return;
|
|
190
219
|
}
|
|
191
220
|
|
|
@@ -195,6 +224,12 @@ async function runHtmlExport(
|
|
|
195
224
|
const localImages = referencedImages.filter((u) => !isExternalUrl(u));
|
|
196
225
|
|
|
197
226
|
if (options.htmlBundle === 'zip' && mediaContainer && localImages.length > 0) {
|
|
227
|
+
const [{ markdownDocToPlainHtml }, { MemoryContentContainer }, { containerToZip }] =
|
|
228
|
+
await Promise.all([
|
|
229
|
+
import('@bendyline/squisq-formats/html'),
|
|
230
|
+
import('@bendyline/squisq/storage'),
|
|
231
|
+
import('@bendyline/squisq-formats/container'),
|
|
232
|
+
]);
|
|
198
233
|
// Mirror the markdown's relative paths inside the zip so <img src="..."> still resolves.
|
|
199
234
|
const html = markdownDocToPlainHtml(mdDoc, { title: baseName, themeId });
|
|
200
235
|
const container = new MemoryContentContainer();
|
|
@@ -206,10 +241,11 @@ async function runHtmlExport(
|
|
|
206
241
|
await container.writeFile(cleanPath, new Uint8Array(data));
|
|
207
242
|
}
|
|
208
243
|
const blob = await containerToZip(container);
|
|
209
|
-
|
|
244
|
+
await saveExportBlob(blob, zipName, saveBlob);
|
|
210
245
|
return;
|
|
211
246
|
}
|
|
212
247
|
|
|
248
|
+
const { markdownDocToPlainHtml } = await import('@bendyline/squisq-formats/html');
|
|
213
249
|
// Single-file plain HTML — embed local images as base64 data URIs.
|
|
214
250
|
const inlineMap = new Map<string, string>();
|
|
215
251
|
if (mediaContainer) {
|
|
@@ -224,7 +260,7 @@ async function runHtmlExport(
|
|
|
224
260
|
images: inlineMap.size > 0 ? inlineMap : undefined,
|
|
225
261
|
themeId,
|
|
226
262
|
});
|
|
227
|
-
|
|
263
|
+
await saveExportBlob(new Blob([html], { type: MIME_TYPES.html }), singleHtmlFilename, saveBlob);
|
|
228
264
|
}
|
|
229
265
|
|
|
230
266
|
const IMAGE_MIME: Record<string, string> = {
|
|
@@ -325,6 +361,7 @@ async function readDocumentFromContainer(
|
|
|
325
361
|
async function resolveDocImages(
|
|
326
362
|
doc: Doc,
|
|
327
363
|
container: ContentContainer,
|
|
364
|
+
collectImagePaths: (doc: Doc) => Iterable<string>,
|
|
328
365
|
): Promise<Map<string, ArrayBuffer>> {
|
|
329
366
|
const paths = collectImagePaths(doc);
|
|
330
367
|
const map = new Map<string, ArrayBuffer>();
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export interface ExportSummaryOption {
|
|
2
|
+
id: string;
|
|
3
|
+
name: string;
|
|
4
|
+
description?: string;
|
|
5
|
+
}
|
|
6
|
+
|
|
7
|
+
let transformStyleSummariesPromise: Promise<ExportSummaryOption[]> | null = null;
|
|
8
|
+
|
|
9
|
+
export function loadTransformStyleSummaries(): Promise<ExportSummaryOption[]> {
|
|
10
|
+
transformStyleSummariesPromise ??= import('@bendyline/squisq/transform').then(
|
|
11
|
+
({ getTransformStyleSummaries }) => getTransformStyleSummaries(),
|
|
12
|
+
);
|
|
13
|
+
return transformStyleSummariesPromise;
|
|
14
|
+
}
|