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/);