diff --git a/package.json b/package.json
index fdc9c79e..d696f4eb 100644
--- a/package.json
+++ b/package.json
@@ -91,6 +91,7 @@
"@fontsource-variable/recursive": "^5.2.5",
"@fsegurai/codemirror-theme-vscode-dark": "^6.1.4",
"@fsegurai/codemirror-theme-vscode-light": "^6.1.4",
+ "@mermaid-js/examples": "^1.0.0",
"@mermaid-js/layout-elk": "^0.1.8",
"@mermaid-js/mermaid-zenuml": "^0.2.1",
"codemirror": "^6.0.1",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index ccaae8e5..a907b54f 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -35,6 +35,9 @@ importers:
'@fsegurai/codemirror-theme-vscode-light':
specifier: ^6.1.4
version: 6.1.4(@codemirror/language@6.11.0)(@codemirror/state@6.5.2)(@codemirror/view@6.36.7)(@lezer/highlight@1.2.1)
+ '@mermaid-js/examples':
+ specifier: ^1.0.0
+ version: 1.0.0(mermaid@11.9.0)
'@mermaid-js/layout-elk':
specifier: ^0.1.8
version: 0.1.8(mermaid@11.9.0)
@@ -696,6 +699,11 @@ packages:
'@marijn/find-cluster-break@1.0.2':
resolution: {integrity: sha512-l0h88YhZFyKdXIFNfSWpyjStDjGHwZ/U7iobcK1cQQD8sejsONdQtTVU+1wVN1PBw40PiiHB1vA5S7VTfQiP9g==}
+ '@mermaid-js/examples@1.0.0':
+ resolution: {integrity: sha512-OfTlpPJweRhGS/3+Wvk3WFY5kkqu/KP4PR2ZSZKxk4kuoqGsxWmsu3eDTHh6zfMIVMExILrFdacVkrtYO8QE3g==}
+ peerDependencies:
+ mermaid: ~11.9.0
+
'@mermaid-js/layout-elk@0.1.8':
resolution: {integrity: sha512-uU+Glm1tQZScphrFuzf6dzPpYTrET3sz6Q2SqpLj/nr+FpO6cfgJmYdJ+vWA8oGoeNQZLVey480qbKAFk8DBuQ==}
peerDependencies:
@@ -4409,6 +4417,10 @@ snapshots:
'@marijn/find-cluster-break@1.0.2': {}
+ '@mermaid-js/examples@1.0.0(mermaid@11.9.0)':
+ dependencies:
+ mermaid: 11.9.0
+
'@mermaid-js/layout-elk@0.1.8(mermaid@11.9.0)':
dependencies:
d3: 7.9.0
diff --git a/src/lib/components/Preset.svelte b/src/lib/components/Preset.svelte
index 6401ab31..ac77b72f 100644
--- a/src/lib/components/Preset.svelte
+++ b/src/lib/components/Preset.svelte
@@ -1,179 +1,12 @@
diff --git a/src/lib/util/mermaid.ts b/src/lib/util/mermaid.ts
index 12693c10..82f9f73e 100644
--- a/src/lib/util/mermaid.ts
+++ b/src/lib/util/mermaid.ts
@@ -1,3 +1,4 @@
+import { diagramData } from '@mermaid-js/examples';
import elkLayouts from '@mermaid-js/layout-elk';
import zenuml from '@mermaid-js/mermaid-zenuml';
import type { MermaidConfig, RenderResult } from 'mermaid';
@@ -39,3 +40,23 @@ export const standardizeDiagramType = (diagramType: string) => {
}
}
};
+
+type DiagramDefinition = (typeof diagramData)[number];
+
+const isValidDiagram = (diagram: DiagramDefinition): diagram is Required => {
+ return Boolean(diagram.name && diagram.examples && diagram.examples.length > 0);
+};
+
+export const getSampleDiagrams = () => {
+ const diagrams = diagramData
+ .filter((d) => isValidDiagram(d))
+ .map(({ examples, ...rest }) => ({
+ ...rest,
+ example: examples?.filter(({ isDefault }) => isDefault)[0]
+ }));
+ const examples: Record = {};
+ for (const diagram of diagrams) {
+ examples[diagram.name.replace(/ (Diagram|Chart|Graph)/, '')] = diagram.example.code;
+ }
+ return examples;
+};
diff --git a/tests/actions.spec.ts b/tests/actions.spec.ts
index 95335481..2618be5b 100644
--- a/tests/actions.spec.ts
+++ b/tests/actions.spec.ts
@@ -26,10 +26,10 @@ test.describe('Check actions', () => {
// Verify downloaded file is different for different diagrams
await editPage.toggleSampleDiagrams();
- await editPage.loadSampleDiagram('ER');
+ await editPage.loadSampleDiagram('Entity Relationship');
const secondPngSize = await editPage.checkAndDownloadPNG(81_000);
- const secondSvgSize = await editPage.downloadSVG(11_000);
+ const secondSvgSize = await editPage.downloadSVG(40_000);
// Verify files are actually different
expect(firstPngSize).not.toBe(secondPngSize);
diff --git a/tests/docMap.spec.ts b/tests/docMap.spec.ts
index 649ac56a..e579a668 100644
--- a/tests/docMap.spec.ts
+++ b/tests/docMap.spec.ts
@@ -12,7 +12,7 @@ test.describe('Editor docs tests', () => {
test('Test to see if the correct URL loads when changing from one diagram to other', async ({
editPage
}) => {
- await editPage.loadSampleDiagram('Flow');
+ await editPage.loadSampleDiagram('Flowchart');
await editPage.checkDocURL(/syntax\/flowchart\.html/);
await editPage.setEditorMode('Config');
await editPage.checkDocURL(/syntax\/flowchart\.html#configuration/);