mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-08-27 04:06:39 +02:00
Compare commits
87 Commits
@mermaid-j
...
test-valid
Author | SHA1 | Date | |
---|---|---|---|
![]() |
526374e04a | ||
![]() |
5493d4344c | ||
![]() |
d7f1f12549 | ||
![]() |
6e56869566 | ||
![]() |
852cb35f0a | ||
![]() |
63d84f125b | ||
![]() |
a28965064d | ||
![]() |
355eeeb9cc | ||
![]() |
5449d6a447 | ||
![]() |
f76e27db70 | ||
![]() |
3e3ae08930 | ||
![]() |
966c112eb1 | ||
![]() |
55527e70c2 | ||
![]() |
447d1cf988 | ||
![]() |
fad6676d18 | ||
![]() |
637680d4d9 | ||
![]() |
5f6f5110fd | ||
![]() |
af47269342 | ||
![]() |
d3c0893937 | ||
![]() |
75ef9bc681 | ||
![]() |
45edc91591 | ||
![]() |
f4edd19371 | ||
![]() |
b611a13e04 | ||
![]() |
7a38eb715d | ||
![]() |
2715ddb338 | ||
![]() |
ca2eca58c9 | ||
![]() |
b4fae2d096 | ||
![]() |
6dd9af0dd4 | ||
![]() |
3151241559 | ||
![]() |
dda9c9b46e | ||
![]() |
cdd1a70b67 | ||
![]() |
d8bd4dea93 | ||
![]() |
6deb476182 | ||
![]() |
ed297ee235 | ||
![]() |
03c1201fcb | ||
![]() |
3ca317c5a0 | ||
![]() |
4d83263388 | ||
![]() |
254e5cbd51 | ||
![]() |
a58dd3c6ce | ||
![]() |
10b7bb568f | ||
![]() |
1aa2870224 | ||
![]() |
8fbcbb6dc9 | ||
![]() |
3e545d7925 | ||
![]() |
75d2a259ed | ||
![]() |
746280b3e2 | ||
![]() |
fa4e30bb15 | ||
![]() |
950b107dd4 | ||
![]() |
35b84761a9 | ||
![]() |
0da2922ee7 | ||
![]() |
85eba01663 | ||
![]() |
79ba50216a | ||
![]() |
9655d07adf | ||
![]() |
954f6cc8fc | ||
![]() |
19884294bc | ||
![]() |
e6b63fd70a | ||
![]() |
8a84ede164 | ||
![]() |
d79b7b2d97 | ||
![]() |
844f879f63 | ||
![]() |
cf789d2c91 | ||
![]() |
4936ef5c30 | ||
![]() |
f006718e56 | ||
![]() |
d720776918 | ||
![]() |
f43398dd44 | ||
![]() |
43ad451940 | ||
![]() |
94c099caa1 | ||
![]() |
3e6f680df2 | ||
![]() |
2e5d955e77 | ||
![]() |
7733faf6c4 | ||
![]() |
b053a88993 | ||
![]() |
7c77c46ede | ||
![]() |
da6937f474 | ||
![]() |
cbb496da79 | ||
![]() |
43e66a6089 | ||
![]() |
5acbd7e762 | ||
![]() |
febae345fc | ||
![]() |
28bdbbca1a | ||
![]() |
4b896fa22e | ||
![]() |
a25ee49edd | ||
![]() |
695b5b2fb2 | ||
![]() |
9b77af540b | ||
![]() |
7829138fb2 | ||
![]() |
7e7a4fc665 | ||
![]() |
34e6112fea | ||
![]() |
0c759d0075 | ||
![]() |
5b7c1aad9e | ||
![]() |
865c453547 | ||
![]() |
c0b14021b7 |
@@ -33,4 +33,9 @@ export const packageOptions = {
|
|||||||
packageName: 'mermaid-layout-elk',
|
packageName: 'mermaid-layout-elk',
|
||||||
file: 'layouts.ts',
|
file: 'layouts.ts',
|
||||||
},
|
},
|
||||||
|
examples: {
|
||||||
|
name: 'mermaid-examples',
|
||||||
|
packageName: 'examples',
|
||||||
|
file: 'index.ts',
|
||||||
|
},
|
||||||
} as const satisfies Record<string, PackageOptions>;
|
} as const satisfies Record<string, PackageOptions>;
|
||||||
|
@@ -10,13 +10,16 @@ const buildType = (packageName: string) => {
|
|||||||
console.log(out.toString());
|
console.log(out.toString());
|
||||||
}
|
}
|
||||||
} catch (e) {
|
} catch (e) {
|
||||||
console.error(e);
|
|
||||||
if (e.stdout.length > 0) {
|
if (e.stdout.length > 0) {
|
||||||
console.error(e.stdout.toString());
|
console.error(e.stdout.toString());
|
||||||
}
|
}
|
||||||
if (e.stderr.length > 0) {
|
if (e.stderr.length > 0) {
|
||||||
console.error(e.stderr.toString());
|
console.error(e.stderr.toString());
|
||||||
}
|
}
|
||||||
|
// Exit the build process if we are in CI
|
||||||
|
if (process.env.CI) {
|
||||||
|
throw new Error(`Failed to build types for ${packageName}`);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
5
.changeset/gold-olives-rule.md
Normal file
5
.changeset/gold-olives-rule.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'mermaid': minor
|
||||||
|
---
|
||||||
|
|
||||||
|
feat: Add `getRegisteredDiagramsMetadata` to `mermaid`, which returns all the registered diagram IDs in mermaid
|
5
.changeset/platinum-olives-rule.md
Normal file
5
.changeset/platinum-olives-rule.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'@mermaid-js/examples': minor
|
||||||
|
---
|
||||||
|
|
||||||
|
feat: Add examples for diagrams in the `@mermaid-js/examples` package
|
7
.changeset/slimy-peaches-win.md
Normal file
7
.changeset/slimy-peaches-win.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
'@mermaid-js/examples': patch
|
||||||
|
'mermaid': patch
|
||||||
|
'@mermaid-js/parser': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
chore: Move packet diagram out of beta
|
5
.changeset/tangy-ghosts-watch.md
Normal file
5
.changeset/tangy-ghosts-watch.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'mermaid': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
fix: adjust sequence diagram title positioning to prevent overlap with top border in Safari
|
5
.changeset/thick-women-find.md
Normal file
5
.changeset/thick-women-find.md
Normal file
@@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'mermaid': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
chore: downgrade chokidar to 3.6.0 and ignore updates for hot reload stability
|
7
.changeset/wild-areas-lick.md
Normal file
7
.changeset/wild-areas-lick.md
Normal file
@@ -0,0 +1,7 @@
|
|||||||
|
---
|
||||||
|
'mermaid': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
fix(timeline): fix loading `leftMargin` from config
|
||||||
|
|
||||||
|
The `timeline.leftMargin` config value should now correctly control the size of the left margin, instead of being ignored.
|
2
.github/workflows/autofix.yml
vendored
2
.github/workflows/autofix.yml
vendored
@@ -42,4 +42,4 @@ jobs:
|
|||||||
working-directory: ./packages/mermaid
|
working-directory: ./packages/mermaid
|
||||||
run: pnpm run docs:build
|
run: pnpm run docs:build
|
||||||
|
|
||||||
- uses: autofix-ci/action@551dded8c6cc8a1054039c8bc0b8b48c51dfc6ef # main
|
- uses: autofix-ci/action@635ffb0c9798bd160680f18fd73371e355b85f27 # main
|
||||||
|
26
.github/workflows/pr-labeler.yml
vendored
26
.github/workflows/pr-labeler.yml
vendored
@@ -29,3 +29,29 @@ jobs:
|
|||||||
disable-releaser: true
|
disable-releaser: true
|
||||||
env:
|
env:
|
||||||
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
|
||||||
|
- name: Add "Sponsored by MermaidChart" label
|
||||||
|
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
|
||||||
|
with:
|
||||||
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
||||||
|
script: |
|
||||||
|
const prNumber = context.payload.pull_request.number;
|
||||||
|
const { data: commits } = await github.rest.pulls.listCommits({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
pull_number: prNumber,
|
||||||
|
});
|
||||||
|
|
||||||
|
const isSponsored = commits.every(
|
||||||
|
(c) => c.commit.author.email?.endsWith('@mermaidchart.com')
|
||||||
|
);
|
||||||
|
|
||||||
|
if (isSponsored) {
|
||||||
|
console.log('PR is sponsored. Adding label.');
|
||||||
|
await github.rest.issues.addLabels({
|
||||||
|
owner: context.repo.owner,
|
||||||
|
repo: context.repo.repo,
|
||||||
|
issue_number: prNumber,
|
||||||
|
labels: ['Sponsored by MermaidChart'],
|
||||||
|
});
|
||||||
|
}
|
||||||
|
6
.github/workflows/validate-lockfile.yml
vendored
6
.github/workflows/validate-lockfile.yml
vendored
@@ -35,7 +35,7 @@ jobs:
|
|||||||
|
|
||||||
# 2) No unwanted vitepress paths
|
# 2) No unwanted vitepress paths
|
||||||
if grep -qF 'packages/mermaid/src/vitepress' pnpm-lock.yaml; then
|
if grep -qF 'packages/mermaid/src/vitepress' pnpm-lock.yaml; then
|
||||||
issues+=("• Disallowed path 'packages/mermaid/src/vitepress' present. Run `rm -rf packages/mermaid/src/vitepress && pnpm install` to regenerate.")
|
issues+=("• Disallowed path 'packages/mermaid/src/vitepress' present. Run \`rm -rf packages/mermaid/src/vitepress && pnpm install\` to regenerate.")
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# 3) Lockfile only changes when package.json changes
|
# 3) Lockfile only changes when package.json changes
|
||||||
@@ -46,12 +46,11 @@ jobs:
|
|||||||
|
|
||||||
# If any issues, output them and fail
|
# If any issues, output them and fail
|
||||||
if [ ${#issues[@]} -gt 0 ]; then
|
if [ ${#issues[@]} -gt 0 ]; then
|
||||||
# Use the new GITHUB_OUTPUT approach to set a multiline output
|
|
||||||
{
|
{
|
||||||
echo "errors<<EOF"
|
echo "errors<<EOF"
|
||||||
printf '%s\n' "${issues[@]}"
|
printf '%s\n' "${issues[@]}"
|
||||||
echo "EOF"
|
echo "EOF"
|
||||||
} >> $GITHUB_OUTPUT
|
} >> "$GITHUB_OUTPUT"
|
||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
@@ -63,6 +62,7 @@ jobs:
|
|||||||
issue-number: ${{ github.event.pull_request.number }}
|
issue-number: ${{ github.event.pull_request.number }}
|
||||||
body: |
|
body: |
|
||||||
The following issue(s) were detected:
|
The following issue(s) were detected:
|
||||||
|
|
||||||
${{ steps.validate.outputs.errors }}
|
${{ steps.validate.outputs.errors }}
|
||||||
|
|
||||||
Please address these and push an update.
|
Please address these and push an update.
|
||||||
|
@@ -26,7 +26,10 @@ export default eyesPlugin(
|
|||||||
config.env.useArgos = process.env.RUN_VISUAL_TEST === 'true';
|
config.env.useArgos = process.env.RUN_VISUAL_TEST === 'true';
|
||||||
|
|
||||||
if (config.env.useArgos) {
|
if (config.env.useArgos) {
|
||||||
registerArgosTask(on, config);
|
registerArgosTask(on, config, {
|
||||||
|
// Enable upload to Argos only when it runs on CI.
|
||||||
|
uploadToArgos: !!process.env.CI,
|
||||||
|
});
|
||||||
} else {
|
} else {
|
||||||
addMatchImageSnapshotPlugin(on, config);
|
addMatchImageSnapshotPlugin(on, config);
|
||||||
}
|
}
|
||||||
|
@@ -1,7 +1,7 @@
|
|||||||
import { imgSnapshotTest } from '../../helpers/util';
|
import { imgSnapshotTest } from '../../helpers/util';
|
||||||
|
|
||||||
describe('packet structure', () => {
|
describe('packet structure', () => {
|
||||||
it('should render a simple packet diagram', () => {
|
it('should render a simple packet-beta diagram', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`packet-beta
|
`packet-beta
|
||||||
title Hello world
|
title Hello world
|
||||||
@@ -10,9 +10,18 @@ describe('packet structure', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should render a simple packet diagram', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`packet
|
||||||
|
title Hello world
|
||||||
|
0-10: "hello"
|
||||||
|
`
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
it('should render a simple packet diagram without ranges', () => {
|
it('should render a simple packet diagram without ranges', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`packet-beta
|
`packet
|
||||||
0: "h"
|
0: "h"
|
||||||
1: "i"
|
1: "i"
|
||||||
`
|
`
|
||||||
@@ -21,7 +30,7 @@ describe('packet structure', () => {
|
|||||||
|
|
||||||
it('should render a complex packet diagram', () => {
|
it('should render a complex packet diagram', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`packet-beta
|
`packet
|
||||||
0-15: "Source Port"
|
0-15: "Source Port"
|
||||||
16-31: "Destination Port"
|
16-31: "Destination Port"
|
||||||
32-63: "Sequence Number"
|
32-63: "Sequence Number"
|
||||||
@@ -52,7 +61,7 @@ describe('packet structure', () => {
|
|||||||
packet:
|
packet:
|
||||||
showBits: false
|
showBits: false
|
||||||
---
|
---
|
||||||
packet-beta
|
packet
|
||||||
0-15: "Source Port"
|
0-15: "Source Port"
|
||||||
16-31: "Destination Port"
|
16-31: "Destination Port"
|
||||||
32-63: "Sequence Number"
|
32-63: "Sequence Number"
|
||||||
|
@@ -2,219 +2,219 @@
|
|||||||
"durations": [
|
"durations": [
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/other/configuration.spec.js",
|
"spec": "cypress/integration/other/configuration.spec.js",
|
||||||
"duration": 5659
|
"duration": 5672
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/other/external-diagrams.spec.js",
|
"spec": "cypress/integration/other/external-diagrams.spec.js",
|
||||||
"duration": 2015
|
"duration": 1990
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/other/ghsa.spec.js",
|
"spec": "cypress/integration/other/ghsa.spec.js",
|
||||||
"duration": 3195
|
"duration": 3186
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/other/iife.spec.js",
|
"spec": "cypress/integration/other/iife.spec.js",
|
||||||
"duration": 1976
|
"duration": 1948
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/other/interaction.spec.js",
|
"spec": "cypress/integration/other/interaction.spec.js",
|
||||||
"duration": 11149
|
"duration": 11938
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/other/rerender.spec.js",
|
"spec": "cypress/integration/other/rerender.spec.js",
|
||||||
"duration": 1910
|
"duration": 1932
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/other/xss.spec.js",
|
"spec": "cypress/integration/other/xss.spec.js",
|
||||||
"duration": 26998
|
"duration": 27237
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/appli.spec.js",
|
"spec": "cypress/integration/rendering/appli.spec.js",
|
||||||
"duration": 3176
|
"duration": 3170
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/architecture.spec.ts",
|
"spec": "cypress/integration/rendering/architecture.spec.ts",
|
||||||
"duration": 110
|
"duration": 104
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/block.spec.js",
|
"spec": "cypress/integration/rendering/block.spec.js",
|
||||||
"duration": 16265
|
"duration": 17390
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/c4.spec.js",
|
"spec": "cypress/integration/rendering/c4.spec.js",
|
||||||
"duration": 5431
|
"duration": 5296
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/classDiagram-elk-v3.spec.js",
|
"spec": "cypress/integration/rendering/classDiagram-elk-v3.spec.js",
|
||||||
"duration": 38025
|
"duration": 39004
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/classDiagram-handDrawn-v3.spec.js",
|
"spec": "cypress/integration/rendering/classDiagram-handDrawn-v3.spec.js",
|
||||||
"duration": 36179
|
"duration": 37653
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/classDiagram-v2.spec.js",
|
"spec": "cypress/integration/rendering/classDiagram-v2.spec.js",
|
||||||
"duration": 22386
|
"duration": 23278
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/classDiagram-v3.spec.js",
|
"spec": "cypress/integration/rendering/classDiagram-v3.spec.js",
|
||||||
"duration": 35378
|
"duration": 36645
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/classDiagram.spec.js",
|
"spec": "cypress/integration/rendering/classDiagram.spec.js",
|
||||||
"duration": 14967
|
"duration": 15418
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/conf-and-directives.spec.js",
|
"spec": "cypress/integration/rendering/conf-and-directives.spec.js",
|
||||||
"duration": 9140
|
"duration": 9684
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/current.spec.js",
|
"spec": "cypress/integration/rendering/current.spec.js",
|
||||||
"duration": 2652
|
"duration": 2570
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/erDiagram-unified.spec.js",
|
"spec": "cypress/integration/rendering/erDiagram-unified.spec.js",
|
||||||
"duration": 82257
|
"duration": 84687
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/erDiagram.spec.js",
|
"spec": "cypress/integration/rendering/erDiagram.spec.js",
|
||||||
"duration": 14138
|
"duration": 14819
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/errorDiagram.spec.js",
|
"spec": "cypress/integration/rendering/errorDiagram.spec.js",
|
||||||
"duration": 3718
|
"duration": 3371
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/flowchart-elk.spec.js",
|
"spec": "cypress/integration/rendering/flowchart-elk.spec.js",
|
||||||
"duration": 39683
|
"duration": 39925
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/flowchart-handDrawn.spec.js",
|
"spec": "cypress/integration/rendering/flowchart-handDrawn.spec.js",
|
||||||
"duration": 28676
|
"duration": 34694
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/flowchart-icon.spec.js",
|
"spec": "cypress/integration/rendering/flowchart-icon.spec.js",
|
||||||
"duration": 7080
|
"duration": 7137
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/flowchart-shape-alias.spec.ts",
|
"spec": "cypress/integration/rendering/flowchart-shape-alias.spec.ts",
|
||||||
"duration": 23175
|
"duration": 24740
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/flowchart-v2.spec.js",
|
"spec": "cypress/integration/rendering/flowchart-v2.spec.js",
|
||||||
"duration": 40846
|
"duration": 42077
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/flowchart.spec.js",
|
"spec": "cypress/integration/rendering/flowchart.spec.js",
|
||||||
"duration": 29743
|
"duration": 30642
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/gantt.spec.js",
|
"spec": "cypress/integration/rendering/gantt.spec.js",
|
||||||
"duration": 17352
|
"duration": 18085
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/gitGraph.spec.js",
|
"spec": "cypress/integration/rendering/gitGraph.spec.js",
|
||||||
"duration": 48514
|
"duration": 50107
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/iconShape.spec.ts",
|
"spec": "cypress/integration/rendering/iconShape.spec.ts",
|
||||||
"duration": 262422
|
"duration": 276279
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/imageShape.spec.ts",
|
"spec": "cypress/integration/rendering/imageShape.spec.ts",
|
||||||
"duration": 54513
|
"duration": 56505
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/info.spec.ts",
|
"spec": "cypress/integration/rendering/info.spec.ts",
|
||||||
"duration": 3025
|
"duration": 3036
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/journey.spec.js",
|
"spec": "cypress/integration/rendering/journey.spec.js",
|
||||||
"duration": 6994
|
"duration": 6889
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/kanban.spec.ts",
|
"spec": "cypress/integration/rendering/kanban.spec.ts",
|
||||||
"duration": 7346
|
"duration": 7353
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/katex.spec.js",
|
"spec": "cypress/integration/rendering/katex.spec.js",
|
||||||
"duration": 3642
|
"duration": 3580
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/marker_unique_id.spec.js",
|
"spec": "cypress/integration/rendering/marker_unique_id.spec.js",
|
||||||
"duration": 2464
|
"duration": 2508
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/mindmap.spec.ts",
|
"spec": "cypress/integration/rendering/mindmap.spec.ts",
|
||||||
"duration": 10882
|
"duration": 10939
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/newShapes.spec.ts",
|
"spec": "cypress/integration/rendering/newShapes.spec.ts",
|
||||||
"duration": 142092
|
"duration": 149102
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/oldShapes.spec.ts",
|
"spec": "cypress/integration/rendering/oldShapes.spec.ts",
|
||||||
"duration": 109340
|
"duration": 113987
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/packet.spec.ts",
|
"spec": "cypress/integration/rendering/packet.spec.ts",
|
||||||
"duration": 4167
|
"duration": 4060
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/pie.spec.ts",
|
"spec": "cypress/integration/rendering/pie.spec.ts",
|
||||||
"duration": 5736
|
"duration": 5715
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/quadrantChart.spec.js",
|
"spec": "cypress/integration/rendering/quadrantChart.spec.js",
|
||||||
"duration": 8628
|
"duration": 8945
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/radar.spec.js",
|
"spec": "cypress/integration/rendering/radar.spec.js",
|
||||||
"duration": 5311
|
"duration": 5337
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/requirement.spec.js",
|
"spec": "cypress/integration/rendering/requirement.spec.js",
|
||||||
"duration": 2619
|
"duration": 2643
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/requirementDiagram-unified.spec.js",
|
"spec": "cypress/integration/rendering/requirementDiagram-unified.spec.js",
|
||||||
"duration": 50640
|
"duration": 52072
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/sankey.spec.ts",
|
"spec": "cypress/integration/rendering/sankey.spec.ts",
|
||||||
"duration": 6735
|
"duration": 6692
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/sequencediagram.spec.js",
|
"spec": "cypress/integration/rendering/sequencediagram.spec.js",
|
||||||
"duration": 34777
|
"duration": 35721
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/stateDiagram-v2.spec.js",
|
"spec": "cypress/integration/rendering/stateDiagram-v2.spec.js",
|
||||||
"duration": 24440
|
"duration": 26030
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/stateDiagram.spec.js",
|
"spec": "cypress/integration/rendering/stateDiagram.spec.js",
|
||||||
"duration": 15476
|
"duration": 16333
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/theme.spec.js",
|
"spec": "cypress/integration/rendering/theme.spec.js",
|
||||||
"duration": 27932
|
"duration": 29287
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/timeline.spec.ts",
|
"spec": "cypress/integration/rendering/timeline.spec.ts",
|
||||||
"duration": 8162
|
"duration": 8491
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/treemap.spec.ts",
|
"spec": "cypress/integration/rendering/treemap.spec.ts",
|
||||||
"duration": 11763
|
"duration": 12291
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/xyChart.spec.js",
|
"spec": "cypress/integration/rendering/xyChart.spec.js",
|
||||||
"duration": 19759
|
"duration": 20651
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"spec": "cypress/integration/rendering/zenuml.spec.js",
|
"spec": "cypress/integration/rendering/zenuml.spec.js",
|
||||||
"duration": 3316
|
"duration": 3218
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
}
|
}
|
||||||
|
@@ -4,7 +4,7 @@
|
|||||||
<link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
|
<link href="https://unpkg.com/tailwindcss@^1.0/dist/tailwind.min.css" rel="stylesheet" />
|
||||||
<link
|
<link
|
||||||
rel="stylesheet"
|
rel="stylesheet"
|
||||||
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"
|
href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.7.2/css/font-awesome.min.css"
|
||||||
/>
|
/>
|
||||||
<link
|
<link
|
||||||
href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css"
|
href="https://cdn.jsdelivr.net/npm/@mdi/font@6.9.96/css/materialdesignicons.min.css"
|
||||||
|
@@ -17,7 +17,7 @@
|
|||||||
|
|
||||||
<div class="diagrams">
|
<div class="diagrams">
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
packet-beta
|
packet
|
||||||
0-15: "Source Port"
|
0-15: "Source Port"
|
||||||
16-31: "Destination Port"
|
16-31: "Destination Port"
|
||||||
32-63: "Sequence Number"
|
32-63: "Sequence Number"
|
||||||
@@ -44,7 +44,7 @@
|
|||||||
packet:
|
packet:
|
||||||
showBits: false
|
showBits: false
|
||||||
---
|
---
|
||||||
packet-beta
|
packet
|
||||||
0-15: "Source Port"
|
0-15: "Source Port"
|
||||||
16-31: "Destination Port"
|
16-31: "Destination Port"
|
||||||
32-63: "Sequence Number"
|
32-63: "Sequence Number"
|
||||||
@@ -70,7 +70,7 @@
|
|||||||
config:
|
config:
|
||||||
theme: forest
|
theme: forest
|
||||||
---
|
---
|
||||||
packet-beta
|
packet
|
||||||
title Forest theme
|
title Forest theme
|
||||||
0-15: "Source Port"
|
0-15: "Source Port"
|
||||||
16-31: "Destination Port"
|
16-31: "Destination Port"
|
||||||
@@ -97,7 +97,7 @@
|
|||||||
config:
|
config:
|
||||||
theme: dark
|
theme: dark
|
||||||
---
|
---
|
||||||
packet-beta
|
packet
|
||||||
title Dark theme
|
title Dark theme
|
||||||
0-15: "Source Port"
|
0-15: "Source Port"
|
||||||
16-31: "Destination Port"
|
16-31: "Destination Port"
|
||||||
|
@@ -111,3 +111,13 @@ const themes = {
|
|||||||
```
|
```
|
||||||
|
|
||||||
The actual options and values for the colors are defined in **src/theme/theme-\[xyz].js**. If you provide the options your diagram needs in the existing theme files then the theming will work smoothly without hiccups.
|
The actual options and values for the colors are defined in **src/theme/theme-\[xyz].js**. If you provide the options your diagram needs in the existing theme files then the theming will work smoothly without hiccups.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
The `@mermaid-js/examples` package contains a collection of examples that are used by tools like mermaid.live to help users get started with the new diagram.
|
||||||
|
|
||||||
|
You can duplicate an existing diagram example file, eg: `packages/examples/src/examples/flowchart.ts`, and modify it with details specific to your diagram.
|
||||||
|
|
||||||
|
Then you can import the example in the `packages/examples/src/index.ts` file and add it to the `examples` array.
|
||||||
|
|
||||||
|
Each diagram should have at least one example, and that should be marked as default. It is good to add more examples to showcase different features of the diagram.
|
||||||
|
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
# Interface: ExternalDiagramDefinition
|
# Interface: ExternalDiagramDefinition
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/diagram-api/types.ts:99](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L99)
|
Defined in: [packages/mermaid/src/diagram-api/types.ts:94](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L94)
|
||||||
|
|
||||||
## Properties
|
## Properties
|
||||||
|
|
||||||
@@ -18,7 +18,7 @@ Defined in: [packages/mermaid/src/diagram-api/types.ts:99](https://github.com/me
|
|||||||
|
|
||||||
> **detector**: `DiagramDetector`
|
> **detector**: `DiagramDetector`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/diagram-api/types.ts:101](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L101)
|
Defined in: [packages/mermaid/src/diagram-api/types.ts:96](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L96)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -26,7 +26,7 @@ Defined in: [packages/mermaid/src/diagram-api/types.ts:101](https://github.com/m
|
|||||||
|
|
||||||
> **id**: `string`
|
> **id**: `string`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/diagram-api/types.ts:100](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L100)
|
Defined in: [packages/mermaid/src/diagram-api/types.ts:95](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L95)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -34,4 +34,4 @@ Defined in: [packages/mermaid/src/diagram-api/types.ts:100](https://github.com/m
|
|||||||
|
|
||||||
> **loader**: `DiagramLoader`
|
> **loader**: `DiagramLoader`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/diagram-api/types.ts:102](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L102)
|
Defined in: [packages/mermaid/src/diagram-api/types.ts:97](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L97)
|
||||||
|
@@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
# Interface: Mermaid
|
# Interface: Mermaid
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:418](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L418)
|
Defined in: [packages/mermaid/src/mermaid.ts:429](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L429)
|
||||||
|
|
||||||
## Properties
|
## Properties
|
||||||
|
|
||||||
@@ -18,7 +18,7 @@ Defined in: [packages/mermaid/src/mermaid.ts:418](https://github.com/mermaid-js/
|
|||||||
|
|
||||||
> **contentLoaded**: () => `void`
|
> **contentLoaded**: () => `void`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:436](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L436)
|
Defined in: [packages/mermaid/src/mermaid.ts:447](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L447)
|
||||||
|
|
||||||
\##contentLoaded Callback function that is called when page is loaded. This functions fetches
|
\##contentLoaded Callback function that is called when page is loaded. This functions fetches
|
||||||
configuration for mermaid rendering and calls init for rendering the mermaid diagrams on the
|
configuration for mermaid rendering and calls init for rendering the mermaid diagrams on the
|
||||||
@@ -34,7 +34,7 @@ page.
|
|||||||
|
|
||||||
> **detectType**: (`text`, `config`?) => `string`
|
> **detectType**: (`text`, `config`?) => `string`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:438](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L438)
|
Defined in: [packages/mermaid/src/mermaid.ts:449](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L449)
|
||||||
|
|
||||||
Detects the type of the graph text.
|
Detects the type of the graph text.
|
||||||
|
|
||||||
@@ -86,11 +86,28 @@ A graph definition key
|
|||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
### getRegisteredDiagramsMetadata()
|
||||||
|
|
||||||
|
> **getRegisteredDiagramsMetadata**: () => `Pick`<[`ExternalDiagramDefinition`](ExternalDiagramDefinition.md), `"id"`>\[]
|
||||||
|
|
||||||
|
Defined in: [packages/mermaid/src/mermaid.ts:451](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L451)
|
||||||
|
|
||||||
|
Gets the metadata for all registered diagrams.
|
||||||
|
Currently only the id is returned.
|
||||||
|
|
||||||
|
#### Returns
|
||||||
|
|
||||||
|
`Pick`<[`ExternalDiagramDefinition`](ExternalDiagramDefinition.md), `"id"`>\[]
|
||||||
|
|
||||||
|
An array of objects with the id of the diagram.
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
### ~~init()~~
|
### ~~init()~~
|
||||||
|
|
||||||
> **init**: (`config`?, `nodes`?, `callback`?) => `Promise`<`void`>
|
> **init**: (`config`?, `nodes`?, `callback`?) => `Promise`<`void`>
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:431](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L431)
|
Defined in: [packages/mermaid/src/mermaid.ts:442](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L442)
|
||||||
|
|
||||||
## init
|
## init
|
||||||
|
|
||||||
@@ -138,7 +155,7 @@ Use [initialize](Mermaid.md#initialize) and [run](Mermaid.md#run) instead.
|
|||||||
|
|
||||||
> **initialize**: (`config`) => `void`
|
> **initialize**: (`config`) => `void`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:435](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L435)
|
Defined in: [packages/mermaid/src/mermaid.ts:446](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L446)
|
||||||
|
|
||||||
Used to set configurations for mermaid.
|
Used to set configurations for mermaid.
|
||||||
This function should be called before the run function.
|
This function should be called before the run function.
|
||||||
@@ -161,7 +178,7 @@ Configuration object for mermaid.
|
|||||||
|
|
||||||
> **mermaidAPI**: `Readonly`<{ `defaultConfig`: [`MermaidConfig`](MermaidConfig.md); `getConfig`: () => [`MermaidConfig`](MermaidConfig.md); `getDiagramFromText`: (`text`, `metadata`) => `Promise`<`Diagram`>; `getSiteConfig`: () => [`MermaidConfig`](MermaidConfig.md); `globalReset`: () => `void`; `initialize`: (`userOptions`) => `void`; `parse`: (`text`, `parseOptions`) => `Promise`<`false` | [`ParseResult`](ParseResult.md)>(`text`, `parseOptions`?) => `Promise`<[`ParseResult`](ParseResult.md)>; `render`: (`id`, `text`, `svgContainingElement`?) => `Promise`<[`RenderResult`](RenderResult.md)>; `reset`: () => `void`; `setConfig`: (`conf`) => [`MermaidConfig`](MermaidConfig.md); `updateSiteConfig`: (`conf`) => [`MermaidConfig`](MermaidConfig.md); }>
|
> **mermaidAPI**: `Readonly`<{ `defaultConfig`: [`MermaidConfig`](MermaidConfig.md); `getConfig`: () => [`MermaidConfig`](MermaidConfig.md); `getDiagramFromText`: (`text`, `metadata`) => `Promise`<`Diagram`>; `getSiteConfig`: () => [`MermaidConfig`](MermaidConfig.md); `globalReset`: () => `void`; `initialize`: (`userOptions`) => `void`; `parse`: (`text`, `parseOptions`) => `Promise`<`false` | [`ParseResult`](ParseResult.md)>(`text`, `parseOptions`?) => `Promise`<[`ParseResult`](ParseResult.md)>; `render`: (`id`, `text`, `svgContainingElement`?) => `Promise`<[`RenderResult`](RenderResult.md)>; `reset`: () => `void`; `setConfig`: (`conf`) => [`MermaidConfig`](MermaidConfig.md); `updateSiteConfig`: (`conf`) => [`MermaidConfig`](MermaidConfig.md); }>
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:425](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L425)
|
Defined in: [packages/mermaid/src/mermaid.ts:436](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L436)
|
||||||
|
|
||||||
**`Internal`**
|
**`Internal`**
|
||||||
|
|
||||||
@@ -175,7 +192,7 @@ Use [parse](Mermaid.md#parse) and [render](Mermaid.md#render) instead. Please [o
|
|||||||
|
|
||||||
> **parse**: (`text`, `parseOptions`) => `Promise`<`false` | [`ParseResult`](ParseResult.md)>(`text`, `parseOptions`?) => `Promise`<[`ParseResult`](ParseResult.md)>
|
> **parse**: (`text`, `parseOptions`) => `Promise`<`false` | [`ParseResult`](ParseResult.md)>(`text`, `parseOptions`?) => `Promise`<[`ParseResult`](ParseResult.md)>
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:426](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L426)
|
Defined in: [packages/mermaid/src/mermaid.ts:437](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L437)
|
||||||
|
|
||||||
Parse the text and validate the syntax.
|
Parse the text and validate the syntax.
|
||||||
|
|
||||||
@@ -243,7 +260,7 @@ Error if the diagram is invalid and parseOptions.suppressErrors is false or not
|
|||||||
|
|
||||||
> `optional` **parseError**: [`ParseErrorFunction`](../type-aliases/ParseErrorFunction.md)
|
> `optional` **parseError**: [`ParseErrorFunction`](../type-aliases/ParseErrorFunction.md)
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:420](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L420)
|
Defined in: [packages/mermaid/src/mermaid.ts:431](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L431)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -251,7 +268,7 @@ Defined in: [packages/mermaid/src/mermaid.ts:420](https://github.com/mermaid-js/
|
|||||||
|
|
||||||
> **registerExternalDiagrams**: (`diagrams`, `opts`) => `Promise`<`void`>
|
> **registerExternalDiagrams**: (`diagrams`, `opts`) => `Promise`<`void`>
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:434](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L434)
|
Defined in: [packages/mermaid/src/mermaid.ts:445](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L445)
|
||||||
|
|
||||||
Used to register external diagram types.
|
Used to register external diagram types.
|
||||||
|
|
||||||
@@ -281,7 +298,7 @@ If opts.lazyLoad is false, the diagrams will be loaded immediately.
|
|||||||
|
|
||||||
> **registerIconPacks**: (`iconLoaders`) => `void`
|
> **registerIconPacks**: (`iconLoaders`) => `void`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:439](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L439)
|
Defined in: [packages/mermaid/src/mermaid.ts:450](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L450)
|
||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
@@ -299,7 +316,7 @@ Defined in: [packages/mermaid/src/mermaid.ts:439](https://github.com/mermaid-js/
|
|||||||
|
|
||||||
> **registerLayoutLoaders**: (`loaders`) => `void`
|
> **registerLayoutLoaders**: (`loaders`) => `void`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:433](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L433)
|
Defined in: [packages/mermaid/src/mermaid.ts:444](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L444)
|
||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
@@ -317,7 +334,7 @@ Defined in: [packages/mermaid/src/mermaid.ts:433](https://github.com/mermaid-js/
|
|||||||
|
|
||||||
> **render**: (`id`, `text`, `svgContainingElement`?) => `Promise`<[`RenderResult`](RenderResult.md)>
|
> **render**: (`id`, `text`, `svgContainingElement`?) => `Promise`<[`RenderResult`](RenderResult.md)>
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:427](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L427)
|
Defined in: [packages/mermaid/src/mermaid.ts:438](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L438)
|
||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
@@ -349,7 +366,7 @@ Deprecated for external use.
|
|||||||
|
|
||||||
> **run**: (`options`) => `Promise`<`void`>
|
> **run**: (`options`) => `Promise`<`void`>
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:432](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L432)
|
Defined in: [packages/mermaid/src/mermaid.ts:443](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L443)
|
||||||
|
|
||||||
## run
|
## run
|
||||||
|
|
||||||
@@ -393,7 +410,7 @@ Optional runtime configs
|
|||||||
|
|
||||||
> **setParseErrorHandler**: (`parseErrorHandler`) => `void`
|
> **setParseErrorHandler**: (`parseErrorHandler`) => `void`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:437](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L437)
|
Defined in: [packages/mermaid/src/mermaid.ts:448](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L448)
|
||||||
|
|
||||||
## setParseErrorHandler Alternative to directly setting parseError using:
|
## setParseErrorHandler Alternative to directly setting parseError using:
|
||||||
|
|
||||||
@@ -424,4 +441,4 @@ New parseError() callback.
|
|||||||
|
|
||||||
> **startOnLoad**: `boolean`
|
> **startOnLoad**: `boolean`
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:419](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L419)
|
Defined in: [packages/mermaid/src/mermaid.ts:430](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L430)
|
||||||
|
@@ -12,4 +12,4 @@
|
|||||||
|
|
||||||
> **SVG**: `d3.Selection`<`SVGSVGElement`, `unknown`, `Element` | `null`, `unknown`>
|
> **SVG**: `d3.Selection`<`SVGSVGElement`, `unknown`, `Element` | `null`, `unknown`>
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/diagram-api/types.ts:130](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L130)
|
Defined in: [packages/mermaid/src/diagram-api/types.ts:126](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L126)
|
||||||
|
@@ -12,4 +12,4 @@
|
|||||||
|
|
||||||
> **SVGGroup**: `d3.Selection`<`SVGGElement`, `unknown`, `Element` | `null`, `unknown`>
|
> **SVGGroup**: `d3.Selection`<`SVGGElement`, `unknown`, `Element` | `null`, `unknown`>
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/diagram-api/types.ts:132](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L132)
|
Defined in: [packages/mermaid/src/diagram-api/types.ts:128](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/diagram-api/types.ts#L128)
|
||||||
|
@@ -12,4 +12,4 @@
|
|||||||
|
|
||||||
> `const` **default**: [`Mermaid`](../interfaces/Mermaid.md)
|
> `const` **default**: [`Mermaid`](../interfaces/Mermaid.md)
|
||||||
|
|
||||||
Defined in: [packages/mermaid/src/mermaid.ts:442](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L442)
|
Defined in: [packages/mermaid/src/mermaid.ts:454](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaid.ts#L454)
|
||||||
|
@@ -17,7 +17,7 @@ This diagram type is particularly useful for developers, network engineers, educ
|
|||||||
## Syntax
|
## Syntax
|
||||||
|
|
||||||
```
|
```
|
||||||
packet-beta
|
packet
|
||||||
start: "Block name" %% Single-bit block
|
start: "Block name" %% Single-bit block
|
||||||
start-end: "Block name" %% Multi-bit blocks
|
start-end: "Block name" %% Multi-bit blocks
|
||||||
... More Fields ...
|
... More Fields ...
|
||||||
@@ -28,7 +28,7 @@ start-end: "Block name" %% Multi-bit blocks
|
|||||||
Using start and end bit counts can be difficult, especially when modifying a design. For this we add a bit count field, which starts from the end of the previous field automagically. Use `+<count>` to set the number of bits, thus:
|
Using start and end bit counts can be difficult, especially when modifying a design. For this we add a bit count field, which starts from the end of the previous field automagically. Use `+<count>` to set the number of bits, thus:
|
||||||
|
|
||||||
```
|
```
|
||||||
packet-beta
|
packet
|
||||||
+1: "Block name" %% Single-bit block
|
+1: "Block name" %% Single-bit block
|
||||||
+8: "Block name" %% 8-bit block
|
+8: "Block name" %% 8-bit block
|
||||||
9-15: "Manually set start and end, it's fine to mix and match"
|
9-15: "Manually set start and end, it's fine to mix and match"
|
||||||
@@ -41,7 +41,7 @@ packet-beta
|
|||||||
---
|
---
|
||||||
title: "TCP Packet"
|
title: "TCP Packet"
|
||||||
---
|
---
|
||||||
packet-beta
|
packet
|
||||||
0-15: "Source Port"
|
0-15: "Source Port"
|
||||||
16-31: "Destination Port"
|
16-31: "Destination Port"
|
||||||
32-63: "Sequence Number"
|
32-63: "Sequence Number"
|
||||||
@@ -65,7 +65,7 @@ packet-beta
|
|||||||
---
|
---
|
||||||
title: "TCP Packet"
|
title: "TCP Packet"
|
||||||
---
|
---
|
||||||
packet-beta
|
packet
|
||||||
0-15: "Source Port"
|
0-15: "Source Port"
|
||||||
16-31: "Destination Port"
|
16-31: "Destination Port"
|
||||||
32-63: "Sequence Number"
|
32-63: "Sequence Number"
|
||||||
@@ -86,7 +86,7 @@ packet-beta
|
|||||||
```
|
```
|
||||||
|
|
||||||
```mermaid-example
|
```mermaid-example
|
||||||
packet-beta
|
packet
|
||||||
title UDP Packet
|
title UDP Packet
|
||||||
+16: "Source Port"
|
+16: "Source Port"
|
||||||
+16: "Destination Port"
|
+16: "Destination Port"
|
||||||
@@ -96,7 +96,7 @@ title UDP Packet
|
|||||||
```
|
```
|
||||||
|
|
||||||
```mermaid
|
```mermaid
|
||||||
packet-beta
|
packet
|
||||||
title UDP Packet
|
title UDP Packet
|
||||||
+16: "Source Port"
|
+16: "Source Port"
|
||||||
+16: "Destination Port"
|
+16: "Destination Port"
|
||||||
@@ -144,7 +144,7 @@ config:
|
|||||||
packet:
|
packet:
|
||||||
startByteColor: red
|
startByteColor: red
|
||||||
---
|
---
|
||||||
packet-beta
|
packet
|
||||||
0-15: "Source Port"
|
0-15: "Source Port"
|
||||||
16-31: "Destination Port"
|
16-31: "Destination Port"
|
||||||
32-63: "Sequence Number"
|
32-63: "Sequence Number"
|
||||||
|
14
package.json
14
package.json
@@ -64,7 +64,7 @@
|
|||||||
},
|
},
|
||||||
"devDependencies": {
|
"devDependencies": {
|
||||||
"@applitools/eyes-cypress": "^3.44.9",
|
"@applitools/eyes-cypress": "^3.44.9",
|
||||||
"@argos-ci/cypress": "^4.0.3",
|
"@argos-ci/cypress": "^5.0.2",
|
||||||
"@changesets/changelog-github": "^0.5.1",
|
"@changesets/changelog-github": "^0.5.1",
|
||||||
"@changesets/cli": "^2.27.12",
|
"@changesets/cli": "^2.27.12",
|
||||||
"@cspell/eslint-plugin": "^8.19.3",
|
"@cspell/eslint-plugin": "^8.19.3",
|
||||||
@@ -88,8 +88,8 @@
|
|||||||
"cors": "^2.8.5",
|
"cors": "^2.8.5",
|
||||||
"cpy-cli": "^5.0.0",
|
"cpy-cli": "^5.0.0",
|
||||||
"cross-env": "^7.0.3",
|
"cross-env": "^7.0.3",
|
||||||
"cspell": "^8.6.1",
|
"cspell": "^9.1.3",
|
||||||
"cypress": "^14.0.3",
|
"cypress": "^14.5.1",
|
||||||
"cypress-image-snapshot": "^4.0.1",
|
"cypress-image-snapshot": "^4.0.1",
|
||||||
"cypress-split": "^1.24.14",
|
"cypress-split": "^1.24.14",
|
||||||
"esbuild": "^0.25.0",
|
"esbuild": "^0.25.0",
|
||||||
@@ -109,25 +109,25 @@
|
|||||||
"globals": "^16.0.0",
|
"globals": "^16.0.0",
|
||||||
"globby": "^14.0.2",
|
"globby": "^14.0.2",
|
||||||
"husky": "^9.1.7",
|
"husky": "^9.1.7",
|
||||||
"jest": "^29.7.0",
|
"jest": "^30.0.4",
|
||||||
"jison": "^0.4.18",
|
"jison": "^0.4.18",
|
||||||
"js-yaml": "^4.1.0",
|
"js-yaml": "^4.1.0",
|
||||||
"jsdom": "^26.0.0",
|
"jsdom": "^26.0.0",
|
||||||
"langium-cli": "3.3.0",
|
"langium-cli": "3.3.0",
|
||||||
"lint-staged": "^15.2.11",
|
"lint-staged": "^16.1.2",
|
||||||
"markdown-table": "^3.0.4",
|
"markdown-table": "^3.0.4",
|
||||||
"nyc": "^17.1.0",
|
"nyc": "^17.1.0",
|
||||||
"path-browserify": "^1.0.1",
|
"path-browserify": "^1.0.1",
|
||||||
"prettier": "^3.5.2",
|
"prettier": "^3.5.2",
|
||||||
"prettier-plugin-jsdoc": "^1.3.2",
|
"prettier-plugin-jsdoc": "^1.3.2",
|
||||||
"rimraf": "^6.0.1",
|
"rimraf": "^6.0.1",
|
||||||
"rollup-plugin-visualizer": "^5.14.0",
|
"rollup-plugin-visualizer": "^6.0.3",
|
||||||
"start-server-and-test": "^2.0.10",
|
"start-server-and-test": "^2.0.10",
|
||||||
"tslib": "^2.8.1",
|
"tslib": "^2.8.1",
|
||||||
"tsx": "^4.7.3",
|
"tsx": "^4.7.3",
|
||||||
"typescript": "~5.7.3",
|
"typescript": "~5.7.3",
|
||||||
"typescript-eslint": "^8.32.0",
|
"typescript-eslint": "^8.32.0",
|
||||||
"vite": "^6.1.1",
|
"vite": "^7.0.3",
|
||||||
"vite-plugin-istanbul": "^7.0.0",
|
"vite-plugin-istanbul": "^7.0.0",
|
||||||
"vitest": "^3.0.6"
|
"vitest": "^3.0.6"
|
||||||
},
|
},
|
||||||
|
32
packages/examples/package.json
Normal file
32
packages/examples/package.json
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
{
|
||||||
|
"name": "@mermaid-js/examples",
|
||||||
|
"version": "0.0.1-beta.1",
|
||||||
|
"description": "Mermaid examples package",
|
||||||
|
"author": "Sidharth Vinod",
|
||||||
|
"type": "module",
|
||||||
|
"module": "./dist/mermaid-examples.core.mjs",
|
||||||
|
"types": "./dist/mermaid.d.ts",
|
||||||
|
"exports": {
|
||||||
|
".": {
|
||||||
|
"types": "./dist/index.d.ts",
|
||||||
|
"import": "./dist/mermaid-examples.core.mjs",
|
||||||
|
"default": "./dist/mermaid-examples.core.mjs"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"files": [
|
||||||
|
"dist"
|
||||||
|
],
|
||||||
|
"scripts": {
|
||||||
|
"clean": "rimraf dist"
|
||||||
|
},
|
||||||
|
"dependencies": {},
|
||||||
|
"devDependencies": {
|
||||||
|
"mermaid": "workspace:*"
|
||||||
|
},
|
||||||
|
"peerDependencies": {
|
||||||
|
"mermaid": "workspace:~"
|
||||||
|
},
|
||||||
|
"publishConfig": {
|
||||||
|
"access": "public"
|
||||||
|
}
|
||||||
|
}
|
34
packages/examples/src/example.spec.ts
Normal file
34
packages/examples/src/example.spec.ts
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
import mermaid from 'mermaid';
|
||||||
|
import { diagramData } from './index.js';
|
||||||
|
|
||||||
|
describe('examples', () => {
|
||||||
|
beforeAll(async () => {
|
||||||
|
// To trigger the diagram registration
|
||||||
|
await mermaid.registerExternalDiagrams([]);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should have examples for each diagrams', () => {
|
||||||
|
const skippedDiagrams = [
|
||||||
|
// These diagrams have no examples
|
||||||
|
'error',
|
||||||
|
'info',
|
||||||
|
'---',
|
||||||
|
// These diagrams have v2 versions, with examples
|
||||||
|
'class',
|
||||||
|
'graph',
|
||||||
|
'flowchart-elk',
|
||||||
|
'flowchart',
|
||||||
|
'state',
|
||||||
|
];
|
||||||
|
const diagrams = mermaid
|
||||||
|
.getRegisteredDiagramsMetadata()
|
||||||
|
.filter((d) => !skippedDiagrams.includes(d.id));
|
||||||
|
expect(diagrams.length).toBeGreaterThan(0);
|
||||||
|
for (const diagram of diagrams) {
|
||||||
|
const data = diagramData.find((d) => d.id === diagram.id)!;
|
||||||
|
expect(data, `Example for ${diagram.id} is not defined`).toBeDefined();
|
||||||
|
expect(data.examples.length).toBeGreaterThan(0);
|
||||||
|
expect(data.examples.filter((e) => e.isDefault).length).toBe(1);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
});
|
24
packages/examples/src/examples/architecture.ts
Normal file
24
packages/examples/src/examples/architecture.ts
Normal file
@@ -0,0 +1,24 @@
|
|||||||
|
import type { DiagramMetadata } from '../types.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
id: 'architecture',
|
||||||
|
name: 'Architecture Diagram',
|
||||||
|
description: 'Visualize system architecture and components',
|
||||||
|
examples: [
|
||||||
|
{
|
||||||
|
title: 'Basic System Architecture',
|
||||||
|
isDefault: true,
|
||||||
|
code: `architecture-beta
|
||||||
|
group api(cloud)[API]
|
||||||
|
|
||||||
|
service db(database)[Database] in api
|
||||||
|
service disk1(disk)[Storage] in api
|
||||||
|
service disk2(disk)[Storage] in api
|
||||||
|
service server(server)[Server] in api
|
||||||
|
|
||||||
|
db:L -- R:server
|
||||||
|
disk1:T -- B:server
|
||||||
|
disk2:T -- B:db`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} satisfies DiagramMetadata;
|
27
packages/examples/src/examples/block.ts
Normal file
27
packages/examples/src/examples/block.ts
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
import type { DiagramMetadata } from '../types.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
id: 'block',
|
||||||
|
name: 'Block Diagram',
|
||||||
|
description: 'Create block-based visualizations with beta styling',
|
||||||
|
examples: [
|
||||||
|
{
|
||||||
|
title: 'Basic Block Layout',
|
||||||
|
isDefault: true,
|
||||||
|
code: `block-beta
|
||||||
|
columns 1
|
||||||
|
db(("DB"))
|
||||||
|
blockArrowId6<[" "]>(down)
|
||||||
|
block:ID
|
||||||
|
A
|
||||||
|
B["A wide one in the middle"]
|
||||||
|
C
|
||||||
|
end
|
||||||
|
space
|
||||||
|
D
|
||||||
|
ID --> D
|
||||||
|
C --> D
|
||||||
|
style B fill:#969,stroke:#333,stroke-width:4px`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} satisfies DiagramMetadata;
|
47
packages/examples/src/examples/c4.ts
Normal file
47
packages/examples/src/examples/c4.ts
Normal file
@@ -0,0 +1,47 @@
|
|||||||
|
import type { DiagramMetadata } from '../types.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
id: 'c4',
|
||||||
|
name: 'C4 Diagram',
|
||||||
|
description:
|
||||||
|
'Visualize software architecture using the C4 model (Context, Container, Component, Code)',
|
||||||
|
examples: [
|
||||||
|
{
|
||||||
|
title: 'Internet Banking System Context',
|
||||||
|
isDefault: true,
|
||||||
|
code: `C4Context
|
||||||
|
title System Context diagram for Internet Banking System
|
||||||
|
Enterprise_Boundary(b0, "BankBoundary0") {
|
||||||
|
Person(customerA, "Banking Customer A", "A customer of the bank, with personal bank accounts.")
|
||||||
|
Person(customerB, "Banking Customer B")
|
||||||
|
Person_Ext(customerC, "Banking Customer C", "desc")
|
||||||
|
|
||||||
|
Person(customerD, "Banking Customer D", "A customer of the bank, <br/> with personal bank accounts.")
|
||||||
|
|
||||||
|
System(SystemAA, "Internet Banking System", "Allows customers to view information about their bank accounts, and make payments.")
|
||||||
|
|
||||||
|
Enterprise_Boundary(b1, "BankBoundary") {
|
||||||
|
SystemDb_Ext(SystemE, "Mainframe Banking System", "Stores all of the core banking information about customers, accounts, transactions, etc.")
|
||||||
|
|
||||||
|
System_Boundary(b2, "BankBoundary2") {
|
||||||
|
System(SystemA, "Banking System A")
|
||||||
|
System(SystemB, "Banking System B", "A system of the bank, with personal bank accounts. next line.")
|
||||||
|
}
|
||||||
|
|
||||||
|
System_Ext(SystemC, "E-mail system", "The internal Microsoft Exchange e-mail system.")
|
||||||
|
SystemDb(SystemD, "Banking System D Database", "A system of the bank, with personal bank accounts.")
|
||||||
|
|
||||||
|
Boundary(b3, "BankBoundary3", "boundary") {
|
||||||
|
SystemQueue(SystemF, "Banking System F Queue", "A system of the bank.")
|
||||||
|
SystemQueue_Ext(SystemG, "Banking System G Queue", "A system of the bank, with personal bank accounts.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
BiRel(customerA, SystemAA, "Uses")
|
||||||
|
BiRel(SystemAA, SystemE, "Uses")
|
||||||
|
Rel(SystemAA, SystemC, "Sends e-mails", "SMTP")
|
||||||
|
Rel(SystemC, customerA, "Sends e-mails to")`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} satisfies DiagramMetadata;
|
34
packages/examples/src/examples/class.ts
Normal file
34
packages/examples/src/examples/class.ts
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
import type { DiagramMetadata } from '../types.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
id: 'classDiagram',
|
||||||
|
name: 'Class Diagram',
|
||||||
|
description: 'Visualize class structures and relationships in object-oriented programming',
|
||||||
|
examples: [
|
||||||
|
{
|
||||||
|
title: 'Basic Class Inheritance',
|
||||||
|
isDefault: true,
|
||||||
|
code: `classDiagram
|
||||||
|
Animal <|-- Duck
|
||||||
|
Animal <|-- Fish
|
||||||
|
Animal <|-- Zebra
|
||||||
|
Animal : +int age
|
||||||
|
Animal : +String gender
|
||||||
|
Animal: +isMammal()
|
||||||
|
Animal: +mate()
|
||||||
|
class Duck{
|
||||||
|
+String beakColor
|
||||||
|
+swim()
|
||||||
|
+quack()
|
||||||
|
}
|
||||||
|
class Fish{
|
||||||
|
-int sizeInFeet
|
||||||
|
-canEat()
|
||||||
|
}
|
||||||
|
class Zebra{
|
||||||
|
+bool is_wild
|
||||||
|
+run()
|
||||||
|
}`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} satisfies DiagramMetadata;
|
36
packages/examples/src/examples/er.ts
Normal file
36
packages/examples/src/examples/er.ts
Normal file
@@ -0,0 +1,36 @@
|
|||||||
|
import type { DiagramMetadata } from '../types.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
id: 'er',
|
||||||
|
name: 'Entity Relationship Diagram',
|
||||||
|
description: 'Visualize database schemas and relationships between entities',
|
||||||
|
examples: [
|
||||||
|
{
|
||||||
|
title: 'Basic ER Schema',
|
||||||
|
isDefault: true,
|
||||||
|
code: `erDiagram
|
||||||
|
CUSTOMER ||--o{ ORDER : places
|
||||||
|
ORDER ||--|{ ORDER_ITEM : contains
|
||||||
|
PRODUCT ||--o{ ORDER_ITEM : includes
|
||||||
|
CUSTOMER {
|
||||||
|
string id
|
||||||
|
string name
|
||||||
|
string email
|
||||||
|
}
|
||||||
|
ORDER {
|
||||||
|
string id
|
||||||
|
date orderDate
|
||||||
|
string status
|
||||||
|
}
|
||||||
|
PRODUCT {
|
||||||
|
string id
|
||||||
|
string name
|
||||||
|
float price
|
||||||
|
}
|
||||||
|
ORDER_ITEM {
|
||||||
|
int quantity
|
||||||
|
float price
|
||||||
|
}`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} satisfies DiagramMetadata;
|
19
packages/examples/src/examples/flowchart.ts
Normal file
19
packages/examples/src/examples/flowchart.ts
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
import type { DiagramMetadata } from '../types.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
id: 'flowchart-v2',
|
||||||
|
name: 'Flowchart',
|
||||||
|
description: 'Visualize flowcharts and directed graphs',
|
||||||
|
examples: [
|
||||||
|
{
|
||||||
|
title: 'Basic Flowchart',
|
||||||
|
isDefault: true,
|
||||||
|
code: `flowchart TD
|
||||||
|
A[Christmas] -->|Get money| B(Go shopping)
|
||||||
|
B --> C{Let me think}
|
||||||
|
C -->|One| D[Laptop]
|
||||||
|
C -->|Two| E[iPhone]
|
||||||
|
C -->|Three| F[fa:fa-car Car]`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} satisfies DiagramMetadata;
|
22
packages/examples/src/examples/gantt.ts
Normal file
22
packages/examples/src/examples/gantt.ts
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import type { DiagramMetadata } from '../types.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
id: 'gantt',
|
||||||
|
name: 'Gantt Chart',
|
||||||
|
description: 'Visualize project schedules and timelines',
|
||||||
|
examples: [
|
||||||
|
{
|
||||||
|
title: 'Basic Project Timeline',
|
||||||
|
isDefault: true,
|
||||||
|
code: `gantt
|
||||||
|
title A Gantt Diagram
|
||||||
|
dateFormat YYYY-MM-DD
|
||||||
|
section Section
|
||||||
|
A task :a1, 2014-01-01, 30d
|
||||||
|
Another task :after a1 , 20d
|
||||||
|
section Another
|
||||||
|
Task in sec :2014-01-12 , 12d
|
||||||
|
another task : 24d`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} satisfies DiagramMetadata;
|
28
packages/examples/src/examples/git.ts
Normal file
28
packages/examples/src/examples/git.ts
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
import type { DiagramMetadata } from '../types.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
id: 'gitGraph',
|
||||||
|
name: 'Git Graph',
|
||||||
|
description: 'Visualize Git repository history and branch relationships',
|
||||||
|
examples: [
|
||||||
|
{
|
||||||
|
title: 'Basic Git Flow',
|
||||||
|
isDefault: true,
|
||||||
|
code: `gitGraph
|
||||||
|
commit
|
||||||
|
branch develop
|
||||||
|
checkout develop
|
||||||
|
commit
|
||||||
|
commit
|
||||||
|
checkout main
|
||||||
|
merge develop
|
||||||
|
commit
|
||||||
|
branch feature
|
||||||
|
checkout feature
|
||||||
|
commit
|
||||||
|
commit
|
||||||
|
checkout main
|
||||||
|
merge feature`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} satisfies DiagramMetadata;
|
37
packages/examples/src/examples/kanban.ts
Normal file
37
packages/examples/src/examples/kanban.ts
Normal file
@@ -0,0 +1,37 @@
|
|||||||
|
import type { DiagramMetadata } from '../types.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
id: 'kanban',
|
||||||
|
name: 'Kanban Diagram',
|
||||||
|
description: 'Visualize work items in a Kanban board',
|
||||||
|
examples: [
|
||||||
|
{
|
||||||
|
title: 'Kanban Diagram',
|
||||||
|
isDefault: true,
|
||||||
|
code: `---
|
||||||
|
config:
|
||||||
|
kanban:
|
||||||
|
ticketBaseUrl: 'https://github.com/mermaid-js/mermaid/issues/#TICKET#'
|
||||||
|
---
|
||||||
|
kanban
|
||||||
|
Todo
|
||||||
|
[Create Documentation]
|
||||||
|
docs[Create Blog about the new diagram]
|
||||||
|
[In progress]
|
||||||
|
id6[Create renderer so that it works in all cases. We also add some extra text here for testing purposes. And some more just for the extra flare.]
|
||||||
|
id9[Ready for deploy]
|
||||||
|
id8[Design grammar]@{ assigned: 'knsv' }
|
||||||
|
id10[Ready for test]
|
||||||
|
id4[Create parsing tests]@{ ticket: 2038, assigned: 'K.Sveidqvist', priority: 'High' }
|
||||||
|
id66[last item]@{ priority: 'Very Low', assigned: 'knsv' }
|
||||||
|
id11[Done]
|
||||||
|
id5[define getData]
|
||||||
|
id2[Title of diagram is more than 100 chars when user duplicates diagram with 100 char]@{ ticket: 2036, priority: 'Very High'}
|
||||||
|
id3[Update DB function]@{ ticket: 2037, assigned: knsv, priority: 'High' }
|
||||||
|
|
||||||
|
id12[Can't reproduce]
|
||||||
|
id3[Weird flickering in Firefox]
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} satisfies DiagramMetadata;
|
32
packages/examples/src/examples/mindmap.ts
Normal file
32
packages/examples/src/examples/mindmap.ts
Normal file
@@ -0,0 +1,32 @@
|
|||||||
|
import type { DiagramMetadata } from '../types.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
id: 'mindmap',
|
||||||
|
name: 'Mindmap',
|
||||||
|
description: 'Visualize ideas and concepts in a tree-like structure',
|
||||||
|
examples: [
|
||||||
|
{
|
||||||
|
title: 'Basic Mindmap',
|
||||||
|
isDefault: true,
|
||||||
|
code: `mindmap
|
||||||
|
root((mindmap))
|
||||||
|
Origins
|
||||||
|
Long history
|
||||||
|
::icon(fa fa-book)
|
||||||
|
Popularisation
|
||||||
|
British popular psychology author Tony Buzan
|
||||||
|
Research
|
||||||
|
On effectiveness<br/>and features
|
||||||
|
On Automatic creation
|
||||||
|
Uses
|
||||||
|
Creative techniques
|
||||||
|
Strategic planning
|
||||||
|
Argument mapping
|
||||||
|
Tools
|
||||||
|
Pen and paper
|
||||||
|
Mermaid`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} satisfies DiagramMetadata;
|
||||||
|
|
||||||
|
// cspell:ignore Buzan
|
34
packages/examples/src/examples/packet.ts
Normal file
34
packages/examples/src/examples/packet.ts
Normal file
@@ -0,0 +1,34 @@
|
|||||||
|
import type { DiagramMetadata } from '../types.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
id: 'packet',
|
||||||
|
name: 'Packet Diagram',
|
||||||
|
description: 'Visualize packet data and network traffic',
|
||||||
|
examples: [
|
||||||
|
{
|
||||||
|
title: 'TCP Packet',
|
||||||
|
isDefault: true,
|
||||||
|
code: `---
|
||||||
|
title: "TCP Packet"
|
||||||
|
---
|
||||||
|
packet
|
||||||
|
0-15: "Source Port"
|
||||||
|
16-31: "Destination Port"
|
||||||
|
32-63: "Sequence Number"
|
||||||
|
64-95: "Acknowledgment Number"
|
||||||
|
96-99: "Data Offset"
|
||||||
|
100-105: "Reserved"
|
||||||
|
106: "URG"
|
||||||
|
107: "ACK"
|
||||||
|
108: "PSH"
|
||||||
|
109: "RST"
|
||||||
|
110: "SYN"
|
||||||
|
111: "FIN"
|
||||||
|
112-127: "Window"
|
||||||
|
128-143: "Checksum"
|
||||||
|
144-159: "Urgent Pointer"
|
||||||
|
160-191: "(Options and Padding)"
|
||||||
|
192-255: "Data (variable length)"`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} satisfies DiagramMetadata;
|
17
packages/examples/src/examples/pie.ts
Normal file
17
packages/examples/src/examples/pie.ts
Normal file
@@ -0,0 +1,17 @@
|
|||||||
|
import type { DiagramMetadata } from '../types.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
id: 'pie',
|
||||||
|
name: 'Pie Chart',
|
||||||
|
description: 'Visualize data as proportional segments of a circle',
|
||||||
|
examples: [
|
||||||
|
{
|
||||||
|
title: 'Basic Pie Chart',
|
||||||
|
isDefault: true,
|
||||||
|
code: `pie title Pets adopted by volunteers
|
||||||
|
"Dogs" : 386
|
||||||
|
"Cats" : 85
|
||||||
|
"Rats" : 15`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} satisfies DiagramMetadata;
|
27
packages/examples/src/examples/quadrant-chart.ts
Normal file
27
packages/examples/src/examples/quadrant-chart.ts
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
import type { DiagramMetadata } from '../types.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
id: 'quadrantChart',
|
||||||
|
name: 'Quadrant Chart',
|
||||||
|
description: 'Visualize items in a 2x2 matrix based on two variables',
|
||||||
|
examples: [
|
||||||
|
{
|
||||||
|
title: 'Product Positioning',
|
||||||
|
isDefault: true,
|
||||||
|
code: `quadrantChart
|
||||||
|
title Reach and engagement of campaigns
|
||||||
|
x-axis Low Reach --> High Reach
|
||||||
|
y-axis Low Engagement --> High Engagement
|
||||||
|
quadrant-1 We should expand
|
||||||
|
quadrant-2 Need to promote
|
||||||
|
quadrant-3 Re-evaluate
|
||||||
|
quadrant-4 May be improved
|
||||||
|
Campaign A: [0.3, 0.6]
|
||||||
|
Campaign B: [0.45, 0.23]
|
||||||
|
Campaign C: [0.57, 0.69]
|
||||||
|
Campaign D: [0.78, 0.34]
|
||||||
|
Campaign E: [0.40, 0.34]
|
||||||
|
Campaign F: [0.35, 0.78]`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} satisfies DiagramMetadata;
|
25
packages/examples/src/examples/radar.ts
Normal file
25
packages/examples/src/examples/radar.ts
Normal file
@@ -0,0 +1,25 @@
|
|||||||
|
import type { DiagramMetadata } from '../types.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
id: 'radar',
|
||||||
|
name: 'Radar Diagram',
|
||||||
|
description: 'Visualize data in a radial format',
|
||||||
|
examples: [
|
||||||
|
{
|
||||||
|
title: 'Student Grades',
|
||||||
|
isDefault: true,
|
||||||
|
code: `---
|
||||||
|
title: "Grades"
|
||||||
|
---
|
||||||
|
radar-beta
|
||||||
|
axis m["Math"], s["Science"], e["English"]
|
||||||
|
axis h["History"], g["Geography"], a["Art"]
|
||||||
|
curve a["Alice"]{85, 90, 80, 70, 75, 90}
|
||||||
|
curve b["Bob"]{70, 75, 85, 80, 90, 85}
|
||||||
|
|
||||||
|
max 100
|
||||||
|
min 0
|
||||||
|
`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} satisfies DiagramMetadata;
|
27
packages/examples/src/examples/requirement.ts
Normal file
27
packages/examples/src/examples/requirement.ts
Normal file
@@ -0,0 +1,27 @@
|
|||||||
|
import type { DiagramMetadata } from '../types.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
id: 'requirement',
|
||||||
|
name: 'Requirement Diagram',
|
||||||
|
description: 'Visualize system requirements and their relationships',
|
||||||
|
examples: [
|
||||||
|
{
|
||||||
|
title: 'Basic Requirements',
|
||||||
|
code: `requirementDiagram
|
||||||
|
|
||||||
|
requirement test_req {
|
||||||
|
id: 1
|
||||||
|
text: the test text.
|
||||||
|
risk: high
|
||||||
|
verifymethod: test
|
||||||
|
}
|
||||||
|
|
||||||
|
element test_entity {
|
||||||
|
type: simulation
|
||||||
|
}
|
||||||
|
|
||||||
|
test_entity - satisfies -> test_req`,
|
||||||
|
isDefault: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} satisfies DiagramMetadata;
|
88
packages/examples/src/examples/sankey.ts
Normal file
88
packages/examples/src/examples/sankey.ts
Normal file
@@ -0,0 +1,88 @@
|
|||||||
|
import type { DiagramMetadata } from '../types.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
id: 'sankey',
|
||||||
|
name: 'Sankey Diagram',
|
||||||
|
description: 'Visualize flow quantities between different stages or processes',
|
||||||
|
examples: [
|
||||||
|
{
|
||||||
|
title: 'Energy Flow',
|
||||||
|
isDefault: true,
|
||||||
|
code: `---
|
||||||
|
config:
|
||||||
|
sankey:
|
||||||
|
showValues: false
|
||||||
|
---
|
||||||
|
sankey-beta
|
||||||
|
|
||||||
|
Agricultural 'waste',Bio-conversion,124.729
|
||||||
|
Bio-conversion,Liquid,0.597
|
||||||
|
Bio-conversion,Losses,26.862
|
||||||
|
Bio-conversion,Solid,280.322
|
||||||
|
Bio-conversion,Gas,81.144
|
||||||
|
Biofuel imports,Liquid,35
|
||||||
|
Biomass imports,Solid,35
|
||||||
|
Coal imports,Coal,11.606
|
||||||
|
Coal reserves,Coal,63.965
|
||||||
|
Coal,Solid,75.571
|
||||||
|
District heating,Industry,10.639
|
||||||
|
District heating,Heating and cooling - commercial,22.505
|
||||||
|
District heating,Heating and cooling - homes,46.184
|
||||||
|
Electricity grid,Over generation / exports,104.453
|
||||||
|
Electricity grid,Heating and cooling - homes,113.726
|
||||||
|
Electricity grid,H2 conversion,27.14
|
||||||
|
Electricity grid,Industry,342.165
|
||||||
|
Electricity grid,Road transport,37.797
|
||||||
|
Electricity grid,Agriculture,4.412
|
||||||
|
Electricity grid,Heating and cooling - commercial,40.858
|
||||||
|
Electricity grid,Losses,56.691
|
||||||
|
Electricity grid,Rail transport,7.863
|
||||||
|
Electricity grid,Lighting & appliances - commercial,90.008
|
||||||
|
Electricity grid,Lighting & appliances - homes,93.494
|
||||||
|
Gas imports,NGas,40.719
|
||||||
|
Gas reserves,NGas,82.233
|
||||||
|
Gas,Heating and cooling - commercial,0.129
|
||||||
|
Gas,Losses,1.401
|
||||||
|
Gas,Thermal generation,151.891
|
||||||
|
Gas,Agriculture,2.096
|
||||||
|
Gas,Industry,48.58
|
||||||
|
Geothermal,Electricity grid,7.013
|
||||||
|
H2 conversion,H2,20.897
|
||||||
|
H2 conversion,Losses,6.242
|
||||||
|
H2,Road transport,20.897
|
||||||
|
Hydro,Electricity grid,6.995
|
||||||
|
Liquid,Industry,121.066
|
||||||
|
Liquid,International shipping,128.69
|
||||||
|
Liquid,Road transport,135.835
|
||||||
|
Liquid,Domestic aviation,14.458
|
||||||
|
Liquid,International aviation,206.267
|
||||||
|
Liquid,Agriculture,3.64
|
||||||
|
Liquid,National navigation,33.218
|
||||||
|
Liquid,Rail transport,4.413
|
||||||
|
Marine algae,Bio-conversion,4.375
|
||||||
|
NGas,Gas,122.952
|
||||||
|
Nuclear,Thermal generation,839.978
|
||||||
|
Oil imports,Oil,504.287
|
||||||
|
Oil reserves,Oil,107.703
|
||||||
|
Oil,Liquid,611.99
|
||||||
|
Other waste,Solid,56.587
|
||||||
|
Other waste,Bio-conversion,77.81
|
||||||
|
Pumped heat,Heating and cooling - homes,193.026
|
||||||
|
Pumped heat,Heating and cooling - commercial,70.672
|
||||||
|
Solar PV,Electricity grid,59.901
|
||||||
|
Solar Thermal,Heating and cooling - homes,19.263
|
||||||
|
Solar,Solar Thermal,19.263
|
||||||
|
Solar,Solar PV,59.901
|
||||||
|
Solid,Agriculture,0.882
|
||||||
|
Solid,Thermal generation,400.12
|
||||||
|
Solid,Industry,46.477
|
||||||
|
Thermal generation,Electricity grid,525.531
|
||||||
|
Thermal generation,Losses,787.129
|
||||||
|
Thermal generation,District heating,79.329
|
||||||
|
Tidal,Electricity grid,9.452
|
||||||
|
UK land based bioenergy,Bio-conversion,182.01
|
||||||
|
Wave,Electricity grid,19.013
|
||||||
|
Wind,Electricity grid,289.366`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} satisfies DiagramMetadata;
|
18
packages/examples/src/examples/sequence.ts
Normal file
18
packages/examples/src/examples/sequence.ts
Normal file
@@ -0,0 +1,18 @@
|
|||||||
|
import type { DiagramMetadata } from '../types.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
id: 'sequence',
|
||||||
|
name: 'Sequence Diagram',
|
||||||
|
description: 'Visualize interactions between objects over time',
|
||||||
|
examples: [
|
||||||
|
{
|
||||||
|
title: 'Basic Sequence',
|
||||||
|
isDefault: true,
|
||||||
|
code: `sequenceDiagram
|
||||||
|
Alice->>+John: Hello John, how are you?
|
||||||
|
Alice->>+John: John, can you hear me?
|
||||||
|
John-->>-Alice: Hi Alice, I can hear you!
|
||||||
|
John-->>-Alice: I feel great!`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} satisfies DiagramMetadata;
|
20
packages/examples/src/examples/state.ts
Normal file
20
packages/examples/src/examples/state.ts
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import type { DiagramMetadata } from '../types.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
id: 'stateDiagram',
|
||||||
|
name: 'State Diagram',
|
||||||
|
description: 'Visualize the states and transitions of a system',
|
||||||
|
examples: [
|
||||||
|
{
|
||||||
|
title: 'Basic State Diagram',
|
||||||
|
code: `stateDiagram-v2
|
||||||
|
[*] --> Still
|
||||||
|
Still --> [*]
|
||||||
|
Still --> Moving
|
||||||
|
Moving --> Still
|
||||||
|
Moving --> Crash
|
||||||
|
Crash --> [*]`,
|
||||||
|
isDefault: true,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} satisfies DiagramMetadata;
|
20
packages/examples/src/examples/timeline.ts
Normal file
20
packages/examples/src/examples/timeline.ts
Normal file
@@ -0,0 +1,20 @@
|
|||||||
|
import type { DiagramMetadata } from '../types.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
id: 'timeline',
|
||||||
|
name: 'Timeline Diagram',
|
||||||
|
description: 'Visualize events and milestones in chronological order',
|
||||||
|
examples: [
|
||||||
|
{
|
||||||
|
title: 'Project Timeline',
|
||||||
|
isDefault: true,
|
||||||
|
code: `timeline
|
||||||
|
title History of Social Media Platform
|
||||||
|
2002 : LinkedIn
|
||||||
|
2004 : Facebook
|
||||||
|
: Google
|
||||||
|
2005 : YouTube
|
||||||
|
2006 : Twitter`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} satisfies DiagramMetadata;
|
21
packages/examples/src/examples/treemap.ts
Normal file
21
packages/examples/src/examples/treemap.ts
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
import type { DiagramMetadata } from '../types.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
id: 'treemap',
|
||||||
|
name: 'Treemap',
|
||||||
|
description: 'Visualize hierarchical data as nested rectangles',
|
||||||
|
examples: [
|
||||||
|
{
|
||||||
|
title: 'Treemap',
|
||||||
|
isDefault: true,
|
||||||
|
code: `treemap-beta
|
||||||
|
"Section 1"
|
||||||
|
"Leaf 1.1": 12
|
||||||
|
"Section 1.2"
|
||||||
|
"Leaf 1.2.1": 12
|
||||||
|
"Section 2"
|
||||||
|
"Leaf 2.1": 20
|
||||||
|
"Leaf 2.2": 25`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} satisfies DiagramMetadata;
|
22
packages/examples/src/examples/user-journey.ts
Normal file
22
packages/examples/src/examples/user-journey.ts
Normal file
@@ -0,0 +1,22 @@
|
|||||||
|
import type { DiagramMetadata } from '../types.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
id: 'journey',
|
||||||
|
name: 'User Journey Diagram',
|
||||||
|
description: 'Visualize user interactions and experiences with a system',
|
||||||
|
examples: [
|
||||||
|
{
|
||||||
|
title: 'My Working Day',
|
||||||
|
isDefault: true,
|
||||||
|
code: `journey
|
||||||
|
title My working day
|
||||||
|
section Go to work
|
||||||
|
Make tea: 5: Me
|
||||||
|
Go upstairs: 3: Me
|
||||||
|
Do work: 1: Me, Cat
|
||||||
|
section Go home
|
||||||
|
Go downstairs: 5: Me
|
||||||
|
Sit down: 5: Me`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} satisfies DiagramMetadata;
|
19
packages/examples/src/examples/xychart.ts
Normal file
19
packages/examples/src/examples/xychart.ts
Normal file
@@ -0,0 +1,19 @@
|
|||||||
|
import type { DiagramMetadata } from '../types.js';
|
||||||
|
|
||||||
|
export default {
|
||||||
|
id: 'xychart',
|
||||||
|
name: 'XY Chart',
|
||||||
|
description: 'Create scatter plots and line charts with customizable axes',
|
||||||
|
examples: [
|
||||||
|
{
|
||||||
|
title: 'Sales Revenue',
|
||||||
|
isDefault: true,
|
||||||
|
code: `xychart-beta
|
||||||
|
title "Sales Revenue"
|
||||||
|
x-axis [jan, feb, mar, apr, may, jun, jul, aug, sep, oct, nov, dec]
|
||||||
|
y-axis "Revenue (in $)" 4000 --> 11000
|
||||||
|
bar [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]
|
||||||
|
line [5000, 6000, 7500, 8200, 9500, 10500, 11000, 10200, 9200, 8500, 7000, 6000]`,
|
||||||
|
},
|
||||||
|
],
|
||||||
|
} satisfies DiagramMetadata;
|
48
packages/examples/src/index.ts
Normal file
48
packages/examples/src/index.ts
Normal file
@@ -0,0 +1,48 @@
|
|||||||
|
import type { DiagramMetadata } from './types.js';
|
||||||
|
import flowChart from './examples/flowchart.js';
|
||||||
|
import c4 from './examples/c4.js';
|
||||||
|
import kanban from './examples/kanban.js';
|
||||||
|
import classDiagram from './examples/class.js';
|
||||||
|
import sequenceDiagram from './examples/sequence.js';
|
||||||
|
import pieDiagram from './examples/pie.js';
|
||||||
|
import userJourneyDiagram from './examples/user-journey.js';
|
||||||
|
import mindmapDiagram from './examples/mindmap.js';
|
||||||
|
import requirementDiagram from './examples/requirement.js';
|
||||||
|
import radarDiagram from './examples/radar.js';
|
||||||
|
import stateDiagram from './examples/state.js';
|
||||||
|
import erDiagram from './examples/er.js';
|
||||||
|
import gitDiagram from './examples/git.js';
|
||||||
|
import architectureDiagram from './examples/architecture.js';
|
||||||
|
import xychartDiagram from './examples/xychart.js';
|
||||||
|
import sankeyDiagram from './examples/sankey.js';
|
||||||
|
import ganttDiagram from './examples/gantt.js';
|
||||||
|
import timelineDiagram from './examples/timeline.js';
|
||||||
|
import quadrantChart from './examples/quadrant-chart.js';
|
||||||
|
import packetDiagram from './examples/packet.js';
|
||||||
|
import blockDiagram from './examples/block.js';
|
||||||
|
import treemapDiagram from './examples/treemap.js';
|
||||||
|
|
||||||
|
export const diagramData: DiagramMetadata[] = [
|
||||||
|
flowChart,
|
||||||
|
c4,
|
||||||
|
kanban,
|
||||||
|
classDiagram,
|
||||||
|
sequenceDiagram,
|
||||||
|
pieDiagram,
|
||||||
|
userJourneyDiagram,
|
||||||
|
mindmapDiagram,
|
||||||
|
requirementDiagram,
|
||||||
|
radarDiagram,
|
||||||
|
stateDiagram,
|
||||||
|
erDiagram,
|
||||||
|
gitDiagram,
|
||||||
|
architectureDiagram,
|
||||||
|
xychartDiagram,
|
||||||
|
sankeyDiagram,
|
||||||
|
ganttDiagram,
|
||||||
|
timelineDiagram,
|
||||||
|
quadrantChart,
|
||||||
|
packetDiagram,
|
||||||
|
blockDiagram,
|
||||||
|
treemapDiagram,
|
||||||
|
];
|
12
packages/examples/src/types.ts
Normal file
12
packages/examples/src/types.ts
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
export interface Example {
|
||||||
|
title: string;
|
||||||
|
code: string;
|
||||||
|
isDefault?: boolean;
|
||||||
|
}
|
||||||
|
|
||||||
|
export interface DiagramMetadata {
|
||||||
|
id: string;
|
||||||
|
name: string;
|
||||||
|
description: string;
|
||||||
|
examples: Example[];
|
||||||
|
}
|
11
packages/examples/tsconfig.json
Normal file
11
packages/examples/tsconfig.json
Normal file
@@ -0,0 +1,11 @@
|
|||||||
|
{
|
||||||
|
"extends": "../../tsconfig.json",
|
||||||
|
"compilerOptions": {
|
||||||
|
"outDir": "./dist",
|
||||||
|
"rootDir": "./src",
|
||||||
|
"module": "Node16",
|
||||||
|
"moduleResolution": "Node16"
|
||||||
|
},
|
||||||
|
"include": ["src/**/*"],
|
||||||
|
"exclude": ["node_modules", "dist"]
|
||||||
|
}
|
@@ -1,5 +1,12 @@
|
|||||||
# mermaid
|
# mermaid
|
||||||
|
|
||||||
|
## 11.8.1
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- Updated dependencies [[`0da2922`](https://github.com/mermaid-js/mermaid/commit/0da2922ee7f47959e324ec10d3d21ee70594f557)]:
|
||||||
|
- @mermaid-js/parser@0.6.1
|
||||||
|
|
||||||
## 11.8.0
|
## 11.8.0
|
||||||
|
|
||||||
### Minor Changes
|
### Minor Changes
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "mermaid",
|
"name": "mermaid",
|
||||||
"version": "11.8.0",
|
"version": "11.8.1",
|
||||||
"description": "Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.",
|
"description": "Markdown-ish syntax for generating flowcharts, mindmaps, sequence diagrams, class diagrams, gantt charts, git graphs and more.",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
"module": "./dist/mermaid.core.mjs",
|
"module": "./dist/mermaid.core.mjs",
|
||||||
@@ -82,7 +82,7 @@
|
|||||||
"katex": "^0.16.9",
|
"katex": "^0.16.9",
|
||||||
"khroma": "^2.1.0",
|
"khroma": "^2.1.0",
|
||||||
"lodash-es": "^4.17.21",
|
"lodash-es": "^4.17.21",
|
||||||
"marked": "^15.0.7",
|
"marked": "^16.0.0",
|
||||||
"roughjs": "^4.6.6",
|
"roughjs": "^4.6.6",
|
||||||
"stylis": "^4.3.6",
|
"stylis": "^4.3.6",
|
||||||
"ts-dedent": "^2.2.0",
|
"ts-dedent": "^2.2.0",
|
||||||
@@ -105,7 +105,7 @@
|
|||||||
"@types/stylis": "^4.2.7",
|
"@types/stylis": "^4.2.7",
|
||||||
"@types/uuid": "^10.0.0",
|
"@types/uuid": "^10.0.0",
|
||||||
"ajv": "^8.17.1",
|
"ajv": "^8.17.1",
|
||||||
"chokidar": "3.6.0",
|
"chokidar": "^3.6.0",
|
||||||
"concurrently": "^9.1.2",
|
"concurrently": "^9.1.2",
|
||||||
"csstree-validator": "^4.0.1",
|
"csstree-validator": "^4.0.1",
|
||||||
"globby": "^14.0.2",
|
"globby": "^14.0.2",
|
||||||
|
@@ -7,20 +7,21 @@ export const loadRegisteredDiagrams = async () => {
|
|||||||
// Load all lazy loaded diagrams in parallel
|
// Load all lazy loaded diagrams in parallel
|
||||||
const results = await Promise.allSettled(
|
const results = await Promise.allSettled(
|
||||||
Object.entries(detectors).map(async ([key, { detector, loader }]) => {
|
Object.entries(detectors).map(async ([key, { detector, loader }]) => {
|
||||||
if (loader) {
|
if (!loader) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
try {
|
||||||
|
getDiagram(key);
|
||||||
|
} catch {
|
||||||
try {
|
try {
|
||||||
getDiagram(key);
|
// Register diagram if it is not already registered
|
||||||
} catch {
|
const { diagram, id } = await loader();
|
||||||
try {
|
registerDiagram(id, diagram, detector);
|
||||||
// Register diagram if it is not already registered
|
} catch (err) {
|
||||||
const { diagram, id } = await loader();
|
// Remove failed diagram from detectors
|
||||||
registerDiagram(id, diagram, detector);
|
log.error(`Failed to load external diagram with key ${key}. Removing from detectors.`);
|
||||||
} catch (err) {
|
delete detectors[key];
|
||||||
// Remove failed diagram from detectors
|
throw err;
|
||||||
log.error(`Failed to load external diagram with key ${key}. Removing from detectors.`);
|
|
||||||
delete detectors[key];
|
|
||||||
throw err;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
/* eslint-disable @typescript-eslint/no-explicit-any */
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||||
import type * as d3 from 'd3';
|
import type * as d3 from 'd3';
|
||||||
import type { SetRequired } from 'type-fest';
|
import type { SetOptional, SetRequired } from 'type-fest';
|
||||||
import type { Diagram } from '../Diagram.js';
|
import type { Diagram } from '../Diagram.js';
|
||||||
import type { BaseDiagramConfig, MermaidConfig } from '../config.type.js';
|
import type { BaseDiagramConfig, MermaidConfig } from '../config.type.js';
|
||||||
|
|
||||||
@@ -91,17 +91,13 @@ export interface DiagramDefinition {
|
|||||||
) => void;
|
) => void;
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface DetectorRecord {
|
|
||||||
detector: DiagramDetector;
|
|
||||||
loader?: DiagramLoader;
|
|
||||||
}
|
|
||||||
|
|
||||||
export interface ExternalDiagramDefinition {
|
export interface ExternalDiagramDefinition {
|
||||||
id: string;
|
id: string;
|
||||||
detector: DiagramDetector;
|
detector: DiagramDetector;
|
||||||
loader: DiagramLoader;
|
loader: DiagramLoader;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export type DetectorRecord = SetOptional<Omit<ExternalDiagramDefinition, 'id'>, 'loader'>;
|
||||||
export type DiagramDetector = (text: string, config?: MermaidConfig) => boolean;
|
export type DiagramDetector = (text: string, config?: MermaidConfig) => boolean;
|
||||||
export type DiagramLoader = () => Promise<{ id: string; diagram: DiagramDefinition }>;
|
export type DiagramLoader = () => Promise<{ id: string; diagram: DiagramDefinition }>;
|
||||||
|
|
||||||
|
@@ -287,7 +287,7 @@ const setBlock = (block: Block) => {
|
|||||||
blockDatabase.set(block.id, block);
|
blockDatabase.set(block.id, block);
|
||||||
};
|
};
|
||||||
|
|
||||||
const getLogger = () => console;
|
const getLogger = () => log;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return all of the style classes
|
* Return all of the style classes
|
||||||
|
@@ -7,7 +7,7 @@ import type {
|
|||||||
const id = 'packet';
|
const id = 'packet';
|
||||||
|
|
||||||
const detector: DiagramDetector = (txt) => {
|
const detector: DiagramDetector = (txt) => {
|
||||||
return /^\s*packet-beta/.test(txt);
|
return /^\s*packet(-beta)?/.test(txt);
|
||||||
};
|
};
|
||||||
|
|
||||||
const loader: DiagramLoader = async () => {
|
const loader: DiagramLoader = async () => {
|
||||||
|
@@ -15,8 +15,14 @@ describe('packet diagrams', () => {
|
|||||||
expect(getPacket()).toMatchInlineSnapshot('[]');
|
expect(getPacket()).toMatchInlineSnapshot('[]');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should handle a packet definition', async () => {
|
||||||
|
const str = `packet`;
|
||||||
|
await expect(parser.parse(str)).resolves.not.toThrow();
|
||||||
|
expect(getPacket()).toMatchInlineSnapshot('[]');
|
||||||
|
});
|
||||||
|
|
||||||
it('should handle diagram with data and title', async () => {
|
it('should handle diagram with data and title', async () => {
|
||||||
const str = `packet-beta
|
const str = `packet
|
||||||
title Packet diagram
|
title Packet diagram
|
||||||
accTitle: Packet accTitle
|
accTitle: Packet accTitle
|
||||||
accDescr: Packet accDescription
|
accDescr: Packet accDescription
|
||||||
@@ -41,7 +47,7 @@ describe('packet diagrams', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should handle single bits', async () => {
|
it('should handle single bits', async () => {
|
||||||
const str = `packet-beta
|
const str = `packet
|
||||||
0-10: "test"
|
0-10: "test"
|
||||||
11: "single"
|
11: "single"
|
||||||
`;
|
`;
|
||||||
@@ -67,7 +73,7 @@ describe('packet diagrams', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should handle bit counts', async () => {
|
it('should handle bit counts', async () => {
|
||||||
const str = `packet-beta
|
const str = `packet
|
||||||
+8: "byte"
|
+8: "byte"
|
||||||
+16: "word"
|
+16: "word"
|
||||||
`;
|
`;
|
||||||
@@ -93,7 +99,7 @@ describe('packet diagrams', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should handle bit counts with bit or bits', async () => {
|
it('should handle bit counts with bit or bits', async () => {
|
||||||
const str = `packet-beta
|
const str = `packet
|
||||||
+8: "byte"
|
+8: "byte"
|
||||||
+16: "word"
|
+16: "word"
|
||||||
`;
|
`;
|
||||||
@@ -119,7 +125,7 @@ describe('packet diagrams', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should split into multiple rows', async () => {
|
it('should split into multiple rows', async () => {
|
||||||
const str = `packet-beta
|
const str = `packet
|
||||||
0-10: "test"
|
0-10: "test"
|
||||||
11-90: "multiple"
|
11-90: "multiple"
|
||||||
`;
|
`;
|
||||||
@@ -161,7 +167,7 @@ describe('packet diagrams', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should split into multiple rows when cut at exact length', async () => {
|
it('should split into multiple rows when cut at exact length', async () => {
|
||||||
const str = `packet-beta
|
const str = `packet
|
||||||
0-16: "test"
|
0-16: "test"
|
||||||
17-63: "multiple"
|
17-63: "multiple"
|
||||||
`;
|
`;
|
||||||
@@ -195,7 +201,7 @@ describe('packet diagrams', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should throw error if numbers are not continuous', async () => {
|
it('should throw error if numbers are not continuous', async () => {
|
||||||
const str = `packet-beta
|
const str = `packet
|
||||||
0-16: "test"
|
0-16: "test"
|
||||||
18-20: "error"
|
18-20: "error"
|
||||||
`;
|
`;
|
||||||
@@ -205,7 +211,7 @@ describe('packet diagrams', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should throw error if numbers are not continuous with bit counts', async () => {
|
it('should throw error if numbers are not continuous with bit counts', async () => {
|
||||||
const str = `packet-beta
|
const str = `packet
|
||||||
+16: "test"
|
+16: "test"
|
||||||
18-20: "error"
|
18-20: "error"
|
||||||
`;
|
`;
|
||||||
@@ -215,7 +221,7 @@ describe('packet diagrams', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should throw error if numbers are not continuous for single packets', async () => {
|
it('should throw error if numbers are not continuous for single packets', async () => {
|
||||||
const str = `packet-beta
|
const str = `packet
|
||||||
0-16: "test"
|
0-16: "test"
|
||||||
18: "error"
|
18: "error"
|
||||||
`;
|
`;
|
||||||
@@ -225,7 +231,7 @@ describe('packet diagrams', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should throw error if numbers are not continuous for single packets with bit counts', async () => {
|
it('should throw error if numbers are not continuous for single packets with bit counts', async () => {
|
||||||
const str = `packet-beta
|
const str = `packet
|
||||||
+16: "test"
|
+16: "test"
|
||||||
18: "error"
|
18: "error"
|
||||||
`;
|
`;
|
||||||
@@ -235,7 +241,7 @@ describe('packet diagrams', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should throw error if numbers are not continuous for single packets - 2', async () => {
|
it('should throw error if numbers are not continuous for single packets - 2', async () => {
|
||||||
const str = `packet-beta
|
const str = `packet
|
||||||
0-16: "test"
|
0-16: "test"
|
||||||
17: "good"
|
17: "good"
|
||||||
19: "error"
|
19: "error"
|
||||||
@@ -246,7 +252,7 @@ describe('packet diagrams', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should throw error if end is less than start', async () => {
|
it('should throw error if end is less than start', async () => {
|
||||||
const str = `packet-beta
|
const str = `packet
|
||||||
0-16: "test"
|
0-16: "test"
|
||||||
25-20: "error"
|
25-20: "error"
|
||||||
`;
|
`;
|
||||||
@@ -256,7 +262,7 @@ describe('packet diagrams', () => {
|
|||||||
});
|
});
|
||||||
|
|
||||||
it('should throw error if bit count is 0', async () => {
|
it('should throw error if bit count is 0', async () => {
|
||||||
const str = `packet-beta
|
const str = `packet
|
||||||
+0: "test"
|
+0: "test"
|
||||||
`;
|
`;
|
||||||
await expect(parser.parse(str)).rejects.toThrowErrorMatchingInlineSnapshot(
|
await expect(parser.parse(str)).rejects.toThrowErrorMatchingInlineSnapshot(
|
||||||
|
@@ -524,7 +524,7 @@ export const drawBox = function (elem, box, conf) {
|
|||||||
box.name,
|
box.name,
|
||||||
g,
|
g,
|
||||||
box.x,
|
box.x,
|
||||||
box.y + (box.textMaxHeight || 0) / 2,
|
box.y + conf.boxTextMargin + (box.textMaxHeight || 0) / 2,
|
||||||
box.width,
|
box.width,
|
||||||
0,
|
0,
|
||||||
{ class: 'text' },
|
{ class: 'text' },
|
||||||
|
@@ -28,8 +28,7 @@ interface TimelineTask {
|
|||||||
export const draw = function (text: string, id: string, version: string, diagObj: Diagram) {
|
export const draw = function (text: string, id: string, version: string, diagObj: Diagram) {
|
||||||
//1. Fetch the configuration
|
//1. Fetch the configuration
|
||||||
const conf = getConfig();
|
const conf = getConfig();
|
||||||
// @ts-expect-error - wrong config?
|
const LEFT_MARGIN = conf.timeline?.leftMargin ?? 50;
|
||||||
const LEFT_MARGIN = conf.leftMargin ?? 50;
|
|
||||||
|
|
||||||
log.debug('timeline', diagObj.db);
|
log.debug('timeline', diagObj.db);
|
||||||
|
|
||||||
|
@@ -106,3 +106,13 @@ const themes = {
|
|||||||
```
|
```
|
||||||
|
|
||||||
The actual options and values for the colors are defined in **src/theme/theme-[xyz].js**. If you provide the options your diagram needs in the existing theme files then the theming will work smoothly without hiccups.
|
The actual options and values for the colors are defined in **src/theme/theme-[xyz].js**. If you provide the options your diagram needs in the existing theme files then the theming will work smoothly without hiccups.
|
||||||
|
|
||||||
|
## Examples
|
||||||
|
|
||||||
|
The `@mermaid-js/examples` package contains a collection of examples that are used by tools like mermaid.live to help users get started with the new diagram.
|
||||||
|
|
||||||
|
You can duplicate an existing diagram example file, eg: `packages/examples/src/examples/flowchart.ts`, and modify it with details specific to your diagram.
|
||||||
|
|
||||||
|
Then you can import the example in the `packages/examples/src/index.ts` file and add it to the `examples` array.
|
||||||
|
|
||||||
|
Each diagram should have at least one example, and that should be marked as default. It is good to add more examples to showcase different features of the diagram.
|
||||||
|
@@ -27,7 +27,7 @@
|
|||||||
"@iconify-json/carbon": "^1.1.37",
|
"@iconify-json/carbon": "^1.1.37",
|
||||||
"@unocss/reset": "^66.0.0",
|
"@unocss/reset": "^66.0.0",
|
||||||
"@vite-pwa/vitepress": "^1.0.0",
|
"@vite-pwa/vitepress": "^1.0.0",
|
||||||
"@vitejs/plugin-vue": "^5.0.5",
|
"@vitejs/plugin-vue": "^6.0.0",
|
||||||
"fast-glob": "^3.3.3",
|
"fast-glob": "^3.3.3",
|
||||||
"https-localhost": "^4.7.1",
|
"https-localhost": "^4.7.1",
|
||||||
"pathe": "^2.0.3",
|
"pathe": "^2.0.3",
|
||||||
|
@@ -11,7 +11,7 @@ This diagram type is particularly useful for developers, network engineers, educ
|
|||||||
## Syntax
|
## Syntax
|
||||||
|
|
||||||
```
|
```
|
||||||
packet-beta
|
packet
|
||||||
start: "Block name" %% Single-bit block
|
start: "Block name" %% Single-bit block
|
||||||
start-end: "Block name" %% Multi-bit blocks
|
start-end: "Block name" %% Multi-bit blocks
|
||||||
... More Fields ...
|
... More Fields ...
|
||||||
@@ -22,7 +22,7 @@ start-end: "Block name" %% Multi-bit blocks
|
|||||||
Using start and end bit counts can be difficult, especially when modifying a design. For this we add a bit count field, which starts from the end of the previous field automagically. Use `+<count>` to set the number of bits, thus:
|
Using start and end bit counts can be difficult, especially when modifying a design. For this we add a bit count field, which starts from the end of the previous field automagically. Use `+<count>` to set the number of bits, thus:
|
||||||
|
|
||||||
```
|
```
|
||||||
packet-beta
|
packet
|
||||||
+1: "Block name" %% Single-bit block
|
+1: "Block name" %% Single-bit block
|
||||||
+8: "Block name" %% 8-bit block
|
+8: "Block name" %% 8-bit block
|
||||||
9-15: "Manually set start and end, it's fine to mix and match"
|
9-15: "Manually set start and end, it's fine to mix and match"
|
||||||
@@ -35,7 +35,7 @@ packet-beta
|
|||||||
---
|
---
|
||||||
title: "TCP Packet"
|
title: "TCP Packet"
|
||||||
---
|
---
|
||||||
packet-beta
|
packet
|
||||||
0-15: "Source Port"
|
0-15: "Source Port"
|
||||||
16-31: "Destination Port"
|
16-31: "Destination Port"
|
||||||
32-63: "Sequence Number"
|
32-63: "Sequence Number"
|
||||||
@@ -56,7 +56,7 @@ packet-beta
|
|||||||
```
|
```
|
||||||
|
|
||||||
```mermaid-example
|
```mermaid-example
|
||||||
packet-beta
|
packet
|
||||||
title UDP Packet
|
title UDP Packet
|
||||||
+16: "Source Port"
|
+16: "Source Port"
|
||||||
+16: "Destination Port"
|
+16: "Destination Port"
|
||||||
@@ -104,7 +104,7 @@ config:
|
|||||||
packet:
|
packet:
|
||||||
startByteColor: red
|
startByteColor: red
|
||||||
---
|
---
|
||||||
packet-beta
|
packet
|
||||||
0-15: "Source Port"
|
0-15: "Source Port"
|
||||||
16-31: "Destination Port"
|
16-31: "Destination Port"
|
||||||
32-63: "Sequence Number"
|
32-63: "Sequence Number"
|
||||||
|
@@ -5,7 +5,7 @@
|
|||||||
import { registerIconPacks } from './rendering-util/icons.js';
|
import { registerIconPacks } from './rendering-util/icons.js';
|
||||||
import { dedent } from 'ts-dedent';
|
import { dedent } from 'ts-dedent';
|
||||||
import type { MermaidConfig } from './config.type.js';
|
import type { MermaidConfig } from './config.type.js';
|
||||||
import { detectType, registerLazyLoadedDiagrams } from './diagram-api/detectType.js';
|
import { detectType, detectors, registerLazyLoadedDiagrams } from './diagram-api/detectType.js';
|
||||||
import { addDiagrams } from './diagram-api/diagram-orchestration.js';
|
import { addDiagrams } from './diagram-api/diagram-orchestration.js';
|
||||||
import { loadRegisteredDiagrams } from './diagram-api/loadDiagram.js';
|
import { loadRegisteredDiagrams } from './diagram-api/loadDiagram.js';
|
||||||
import type { ExternalDiagramDefinition, SVG, SVGGroup } from './diagram-api/types.js';
|
import type { ExternalDiagramDefinition, SVG, SVGGroup } from './diagram-api/types.js';
|
||||||
@@ -415,6 +415,17 @@ const render: typeof mermaidAPI.render = (id, text, container) => {
|
|||||||
});
|
});
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the metadata for all registered diagrams.
|
||||||
|
* Currently only the id is returned.
|
||||||
|
* @returns An array of objects with the id of the diagram.
|
||||||
|
*/
|
||||||
|
const getRegisteredDiagramsMetadata = (): Pick<ExternalDiagramDefinition, 'id'>[] => {
|
||||||
|
return Object.keys(detectors).map((id) => ({
|
||||||
|
id,
|
||||||
|
}));
|
||||||
|
};
|
||||||
|
|
||||||
export interface Mermaid {
|
export interface Mermaid {
|
||||||
startOnLoad: boolean;
|
startOnLoad: boolean;
|
||||||
parseError?: ParseErrorFunction;
|
parseError?: ParseErrorFunction;
|
||||||
@@ -437,6 +448,7 @@ export interface Mermaid {
|
|||||||
setParseErrorHandler: typeof setParseErrorHandler;
|
setParseErrorHandler: typeof setParseErrorHandler;
|
||||||
detectType: typeof detectType;
|
detectType: typeof detectType;
|
||||||
registerIconPacks: typeof registerIconPacks;
|
registerIconPacks: typeof registerIconPacks;
|
||||||
|
getRegisteredDiagramsMetadata: typeof getRegisteredDiagramsMetadata;
|
||||||
}
|
}
|
||||||
|
|
||||||
const mermaid: Mermaid = {
|
const mermaid: Mermaid = {
|
||||||
@@ -454,6 +466,7 @@ const mermaid: Mermaid = {
|
|||||||
setParseErrorHandler,
|
setParseErrorHandler,
|
||||||
detectType,
|
detectType,
|
||||||
registerIconPacks,
|
registerIconPacks,
|
||||||
|
getRegisteredDiagramsMetadata,
|
||||||
};
|
};
|
||||||
|
|
||||||
export default mermaid;
|
export default mermaid;
|
||||||
|
@@ -794,6 +794,7 @@ graph TD;A--x|text including URL space|B;`)
|
|||||||
{ textDiagramType: 'gantt', expectedType: 'gantt' },
|
{ textDiagramType: 'gantt', expectedType: 'gantt' },
|
||||||
{ textDiagramType: 'journey', expectedType: 'journey' },
|
{ textDiagramType: 'journey', expectedType: 'journey' },
|
||||||
{ textDiagramType: 'pie', expectedType: 'pie' },
|
{ textDiagramType: 'pie', expectedType: 'pie' },
|
||||||
|
{ textDiagramType: 'packet', expectedType: 'packet' },
|
||||||
{ textDiagramType: 'packet-beta', expectedType: 'packet' },
|
{ textDiagramType: 'packet-beta', expectedType: 'packet' },
|
||||||
{ textDiagramType: 'xychart-beta', expectedType: 'xychart' },
|
{ textDiagramType: 'xychart-beta', expectedType: 'xychart' },
|
||||||
{ textDiagramType: 'requirementDiagram', expectedType: 'requirement' },
|
{ textDiagramType: 'requirementDiagram', expectedType: 'requirement' },
|
||||||
|
@@ -17,7 +17,7 @@ export async function note<T extends SVGGraphicsElement>(
|
|||||||
if (!useHtmlLabels) {
|
if (!useHtmlLabels) {
|
||||||
node.centerLabel = true;
|
node.centerLabel = true;
|
||||||
}
|
}
|
||||||
const { shapeSvg, bbox } = await labelHelper(parent, node, getNodeClasses(node));
|
const { shapeSvg, bbox, label } = await labelHelper(parent, node, getNodeClasses(node));
|
||||||
const totalWidth = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);
|
const totalWidth = Math.max(bbox.width + (node.padding ?? 0) * 2, node?.width ?? 0);
|
||||||
const totalHeight = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);
|
const totalHeight = Math.max(bbox.height + (node.padding ?? 0) * 2, node?.height ?? 0);
|
||||||
const x = -totalWidth / 2;
|
const x = -totalWidth / 2;
|
||||||
@@ -50,6 +50,11 @@ export async function note<T extends SVGGraphicsElement>(
|
|||||||
rect.selectAll('path').attr('style', nodeStyles);
|
rect.selectAll('path').attr('style', nodeStyles);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
label.attr(
|
||||||
|
'transform',
|
||||||
|
`translate(${-bbox.width / 2 - (bbox.x - (bbox.left ?? 0))}, ${-(bbox.height / 2) - (bbox.y - (bbox.top ?? 0))})`
|
||||||
|
);
|
||||||
|
|
||||||
updateNodeBounds(node, rect);
|
updateNodeBounds(node, rect);
|
||||||
|
|
||||||
node.intersect = function (point) {
|
node.intersect = function (point) {
|
||||||
|
@@ -1,5 +1,11 @@
|
|||||||
# @mermaid-js/parser
|
# @mermaid-js/parser
|
||||||
|
|
||||||
|
## 0.6.1
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- [#6725](https://github.com/mermaid-js/mermaid/pull/6725) [`0da2922`](https://github.com/mermaid-js/mermaid/commit/0da2922ee7f47959e324ec10d3d21ee70594f557) Thanks [@shubham-mermaid](https://github.com/shubham-mermaid)! - chore: use Treemap instead of TreemapDoc in parser.
|
||||||
|
|
||||||
## 0.6.0
|
## 0.6.0
|
||||||
|
|
||||||
### Minor Changes
|
### Minor Changes
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@mermaid-js/parser",
|
"name": "@mermaid-js/parser",
|
||||||
"version": "0.6.0",
|
"version": "0.6.1",
|
||||||
"description": "MermaidJS parser",
|
"description": "MermaidJS parser",
|
||||||
"author": "Yokozuna59",
|
"author": "Yokozuna59",
|
||||||
"contributors": [
|
"contributors": [
|
||||||
|
@@ -8,7 +8,7 @@ export {
|
|||||||
Architecture,
|
Architecture,
|
||||||
GitGraph,
|
GitGraph,
|
||||||
Radar,
|
Radar,
|
||||||
TreemapDoc,
|
Treemap,
|
||||||
Branch,
|
Branch,
|
||||||
Commit,
|
Commit,
|
||||||
Merge,
|
Merge,
|
||||||
@@ -20,7 +20,7 @@ export {
|
|||||||
isPieSection,
|
isPieSection,
|
||||||
isArchitecture,
|
isArchitecture,
|
||||||
isGitGraph,
|
isGitGraph,
|
||||||
isTreemapDoc,
|
isTreemap,
|
||||||
isBranch,
|
isBranch,
|
||||||
isCommit,
|
isCommit,
|
||||||
isMerge,
|
isMerge,
|
||||||
|
@@ -3,7 +3,7 @@ import "../common/common";
|
|||||||
|
|
||||||
entry Packet:
|
entry Packet:
|
||||||
NEWLINE*
|
NEWLINE*
|
||||||
"packet-beta"
|
("packet"| "packet-beta")
|
||||||
(
|
(
|
||||||
TitleAndAccessibilities
|
TitleAndAccessibilities
|
||||||
| blocks+=PacketBlock
|
| blocks+=PacketBlock
|
||||||
|
@@ -2,6 +2,6 @@ import { AbstractMermaidTokenBuilder } from '../common/index.js';
|
|||||||
|
|
||||||
export class PacketTokenBuilder extends AbstractMermaidTokenBuilder {
|
export class PacketTokenBuilder extends AbstractMermaidTokenBuilder {
|
||||||
public constructor() {
|
public constructor() {
|
||||||
super(['packet-beta']);
|
super(['packet']);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,5 @@
|
|||||||
import type { ValidationAcceptor, ValidationChecks } from 'langium';
|
import type { ValidationAcceptor, ValidationChecks } from 'langium';
|
||||||
import type { MermaidAstType, TreemapDoc } from '../generated/ast.js';
|
import type { MermaidAstType, Treemap } from '../generated/ast.js';
|
||||||
import type { TreemapServices } from './module.js';
|
import type { TreemapServices } from './module.js';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -9,10 +9,10 @@ export function registerValidationChecks(services: TreemapServices) {
|
|||||||
const validator = services.validation.TreemapValidator;
|
const validator = services.validation.TreemapValidator;
|
||||||
const registry = services.validation.ValidationRegistry;
|
const registry = services.validation.ValidationRegistry;
|
||||||
if (registry) {
|
if (registry) {
|
||||||
// Use any to bypass type checking since we know TreemapDoc is part of the AST
|
// Use any to bypass type checking since we know Treemap is part of the AST
|
||||||
// but the type system is having trouble with it
|
// but the type system is having trouble with it
|
||||||
const checks: ValidationChecks<MermaidAstType> = {
|
const checks: ValidationChecks<MermaidAstType> = {
|
||||||
TreemapDoc: validator.checkSingleRoot.bind(validator),
|
Treemap: validator.checkSingleRoot.bind(validator),
|
||||||
// Remove unused validation for TreemapRow
|
// Remove unused validation for TreemapRow
|
||||||
};
|
};
|
||||||
registry.register(checks, validator);
|
registry.register(checks, validator);
|
||||||
@@ -27,7 +27,7 @@ export class TreemapValidator {
|
|||||||
* Validates that a treemap has only one root node.
|
* Validates that a treemap has only one root node.
|
||||||
* A root node is defined as a node that has no indentation.
|
* A root node is defined as a node that has no indentation.
|
||||||
*/
|
*/
|
||||||
checkSingleRoot(doc: TreemapDoc, accept: ValidationAcceptor): void {
|
checkSingleRoot(doc: Treemap, accept: ValidationAcceptor): void {
|
||||||
let rootNodeIndentation;
|
let rootNodeIndentation;
|
||||||
|
|
||||||
for (const row of doc.TreemapRows) {
|
for (const row of doc.TreemapRows) {
|
||||||
|
@@ -34,14 +34,14 @@ interface ClassDefStatement {
|
|||||||
className: string
|
className: string
|
||||||
styleText: string // Optional style text
|
styleText: string // Optional style text
|
||||||
}
|
}
|
||||||
interface TreemapDoc {
|
interface Treemap {
|
||||||
TreemapRows: TreemapRow[]
|
TreemapRows: TreemapRow[]
|
||||||
title?: string
|
title?: string
|
||||||
accTitle?: string
|
accTitle?: string
|
||||||
accDescr?: string
|
accDescr?: string
|
||||||
}
|
}
|
||||||
|
|
||||||
entry TreemapDoc returns TreemapDoc:
|
entry Treemap returns Treemap:
|
||||||
TREEMAP_KEYWORD
|
TREEMAP_KEYWORD
|
||||||
(
|
(
|
||||||
TitleAndAccessibilities
|
TitleAndAccessibilities
|
||||||
|
@@ -11,6 +11,12 @@ describe('packet', () => {
|
|||||||
`
|
`
|
||||||
\tpacket-beta
|
\tpacket-beta
|
||||||
`,
|
`,
|
||||||
|
`packet`,
|
||||||
|
` packet `,
|
||||||
|
`\tpacket\t`,
|
||||||
|
`
|
||||||
|
\tpacket
|
||||||
|
`,
|
||||||
])('should handle regular packet', (context: string) => {
|
])('should handle regular packet', (context: string) => {
|
||||||
const result = parse(context);
|
const result = parse(context);
|
||||||
expectNoErrorsOrAlternatives(result);
|
expectNoErrorsOrAlternatives(result);
|
||||||
|
@@ -32,15 +32,10 @@ const consoleMock = vi.spyOn(console, 'log').mockImplementation(() => undefined)
|
|||||||
* @param result - the result `parse` function.
|
* @param result - the result `parse` function.
|
||||||
*/
|
*/
|
||||||
export function expectNoErrorsOrAlternatives(result: ParseResult) {
|
export function expectNoErrorsOrAlternatives(result: ParseResult) {
|
||||||
if (result.lexerErrors.length > 0) {
|
expect.soft(result.lexerErrors).toHaveLength(0);
|
||||||
// console.debug(result.lexerErrors);
|
expect.soft(result.parserErrors).toHaveLength(0);
|
||||||
}
|
// To see what the error is, in the logs.
|
||||||
if (result.parserErrors.length > 0) {
|
expect(result.lexerErrors[0]).toBeUndefined();
|
||||||
// console.debug(result.parserErrors);
|
|
||||||
}
|
|
||||||
expect(result.lexerErrors).toHaveLength(0);
|
|
||||||
expect(result.parserErrors).toHaveLength(0);
|
|
||||||
|
|
||||||
expect(consoleMock).not.toHaveBeenCalled();
|
expect(consoleMock).not.toHaveBeenCalled();
|
||||||
consoleMock.mockReset();
|
consoleMock.mockReset();
|
||||||
}
|
}
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
import { describe, expect, it } from 'vitest';
|
import { describe, expect, it } from 'vitest';
|
||||||
import { expectNoErrorsOrAlternatives } from './test-util.js';
|
import { expectNoErrorsOrAlternatives } from './test-util.js';
|
||||||
import type { TreemapDoc, Section, Leaf, TreemapRow } from '../src/language/generated/ast.js';
|
import type { Treemap, Section, Leaf, TreemapRow } from '../src/language/generated/ast.js';
|
||||||
import type { LangiumParser } from 'langium';
|
import type { LangiumParser } from 'langium';
|
||||||
import { createTreemapServices } from '../src/language/treemap/module.js';
|
import { createTreemapServices } from '../src/language/treemap/module.js';
|
||||||
|
|
||||||
@@ -9,21 +9,21 @@ describe('Treemap Parser', () => {
|
|||||||
const parser: LangiumParser = services.parser.LangiumParser;
|
const parser: LangiumParser = services.parser.LangiumParser;
|
||||||
|
|
||||||
const parse = (input: string) => {
|
const parse = (input: string) => {
|
||||||
return parser.parse<TreemapDoc>(input);
|
return parser.parse<Treemap>(input);
|
||||||
};
|
};
|
||||||
|
|
||||||
describe('Basic Parsing', () => {
|
describe('Basic Parsing', () => {
|
||||||
it('should parse empty treemap', () => {
|
it('should parse empty treemap', () => {
|
||||||
const result = parse('treemap');
|
const result = parse('treemap');
|
||||||
expectNoErrorsOrAlternatives(result);
|
expectNoErrorsOrAlternatives(result);
|
||||||
expect(result.value.$type).toBe('TreemapDoc');
|
expect(result.value.$type).toBe('Treemap');
|
||||||
expect(result.value.TreemapRows).toHaveLength(0);
|
expect(result.value.TreemapRows).toHaveLength(0);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should parse a section node', () => {
|
it('should parse a section node', () => {
|
||||||
const result = parse('treemap\n"Root"');
|
const result = parse('treemap\n"Root"');
|
||||||
expectNoErrorsOrAlternatives(result);
|
expectNoErrorsOrAlternatives(result);
|
||||||
expect(result.value.$type).toBe('TreemapDoc');
|
expect(result.value.$type).toBe('Treemap');
|
||||||
expect(result.value.TreemapRows).toHaveLength(1);
|
expect(result.value.TreemapRows).toHaveLength(1);
|
||||||
if (result.value.TreemapRows[0].item) {
|
if (result.value.TreemapRows[0].item) {
|
||||||
expect(result.value.TreemapRows[0].item.$type).toBe('Section');
|
expect(result.value.TreemapRows[0].item.$type).toBe('Section');
|
||||||
@@ -39,7 +39,7 @@ describe('Treemap Parser', () => {
|
|||||||
"Child2" : 200
|
"Child2" : 200
|
||||||
`);
|
`);
|
||||||
expectNoErrorsOrAlternatives(result);
|
expectNoErrorsOrAlternatives(result);
|
||||||
expect(result.value.$type).toBe('TreemapDoc');
|
expect(result.value.$type).toBe('Treemap');
|
||||||
expect(result.value.TreemapRows).toHaveLength(3);
|
expect(result.value.TreemapRows).toHaveLength(3);
|
||||||
|
|
||||||
if (result.value.TreemapRows[0].item) {
|
if (result.value.TreemapRows[0].item) {
|
||||||
@@ -95,7 +95,7 @@ describe('Treemap Parser', () => {
|
|||||||
|
|
||||||
// We're only checking that the multiple root nodes parse successfully
|
// We're only checking that the multiple root nodes parse successfully
|
||||||
// The validation errors would be reported by the validator during validation
|
// The validation errors would be reported by the validator during validation
|
||||||
expect(result.value.$type).toBe('TreemapDoc');
|
expect(result.value.$type).toBe('Treemap');
|
||||||
expect(result.value.TreemapRows).toHaveLength(2);
|
expect(result.value.TreemapRows).toHaveLength(2);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@@ -104,7 +104,7 @@ describe('Treemap Parser', () => {
|
|||||||
it('should parse a treemap with title', () => {
|
it('should parse a treemap with title', () => {
|
||||||
const result = parse('treemap\ntitle My Treemap Diagram\n"Root"\n "Child": 100');
|
const result = parse('treemap\ntitle My Treemap Diagram\n"Root"\n "Child": 100');
|
||||||
expectNoErrorsOrAlternatives(result);
|
expectNoErrorsOrAlternatives(result);
|
||||||
expect(result.value.$type).toBe('TreemapDoc');
|
expect(result.value.$type).toBe('Treemap');
|
||||||
// We can't directly test the title property due to how Langium processes TitleAndAccessibilities
|
// We can't directly test the title property due to how Langium processes TitleAndAccessibilities
|
||||||
// but we can verify the TreemapRows are parsed correctly
|
// but we can verify the TreemapRows are parsed correctly
|
||||||
expect(result.value.TreemapRows).toHaveLength(2);
|
expect(result.value.TreemapRows).toHaveLength(2);
|
||||||
@@ -113,7 +113,7 @@ describe('Treemap Parser', () => {
|
|||||||
it('should parse a treemap with accTitle', () => {
|
it('should parse a treemap with accTitle', () => {
|
||||||
const result = parse('treemap\naccTitle: Accessible Title\n"Root"\n "Child": 100');
|
const result = parse('treemap\naccTitle: Accessible Title\n"Root"\n "Child": 100');
|
||||||
expectNoErrorsOrAlternatives(result);
|
expectNoErrorsOrAlternatives(result);
|
||||||
expect(result.value.$type).toBe('TreemapDoc');
|
expect(result.value.$type).toBe('Treemap');
|
||||||
// We can't directly test the accTitle property due to how Langium processes TitleAndAccessibilities
|
// We can't directly test the accTitle property due to how Langium processes TitleAndAccessibilities
|
||||||
expect(result.value.TreemapRows).toHaveLength(2);
|
expect(result.value.TreemapRows).toHaveLength(2);
|
||||||
});
|
});
|
||||||
@@ -123,7 +123,7 @@ describe('Treemap Parser', () => {
|
|||||||
'treemap\naccDescr: This is an accessible description\n"Root"\n "Child": 100'
|
'treemap\naccDescr: This is an accessible description\n"Root"\n "Child": 100'
|
||||||
);
|
);
|
||||||
expectNoErrorsOrAlternatives(result);
|
expectNoErrorsOrAlternatives(result);
|
||||||
expect(result.value.$type).toBe('TreemapDoc');
|
expect(result.value.$type).toBe('Treemap');
|
||||||
// We can't directly test the accDescr property due to how Langium processes TitleAndAccessibilities
|
// We can't directly test the accDescr property due to how Langium processes TitleAndAccessibilities
|
||||||
expect(result.value.TreemapRows).toHaveLength(2);
|
expect(result.value.TreemapRows).toHaveLength(2);
|
||||||
});
|
});
|
||||||
@@ -136,7 +136,7 @@ accDescr: This is an accessible description
|
|||||||
"Root"
|
"Root"
|
||||||
"Child": 100`);
|
"Child": 100`);
|
||||||
expectNoErrorsOrAlternatives(result);
|
expectNoErrorsOrAlternatives(result);
|
||||||
expect(result.value.$type).toBe('TreemapDoc');
|
expect(result.value.$type).toBe('Treemap');
|
||||||
// We can't directly test these properties due to how Langium processes TitleAndAccessibilities
|
// We can't directly test these properties due to how Langium processes TitleAndAccessibilities
|
||||||
expect(result.value.TreemapRows).toHaveLength(2);
|
expect(result.value.TreemapRows).toHaveLength(2);
|
||||||
});
|
});
|
||||||
|
@@ -1,5 +1,12 @@
|
|||||||
# mermaid
|
# mermaid
|
||||||
|
|
||||||
|
## 11.8.1
|
||||||
|
|
||||||
|
### Patch Changes
|
||||||
|
|
||||||
|
- Updated dependencies [[`0da2922`](https://github.com/mermaid-js/mermaid/commit/0da2922ee7f47959e324ec10d3d21ee70594f557)]:
|
||||||
|
- @mermaid-js/parser@0.6.1
|
||||||
|
|
||||||
## 11.8.0
|
## 11.8.0
|
||||||
|
|
||||||
### Minor Changes
|
### Minor Changes
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@mermaid-js/tiny",
|
"name": "@mermaid-js/tiny",
|
||||||
"version": "11.8.0",
|
"version": "11.8.1",
|
||||||
"description": "Tiny version of mermaid",
|
"description": "Tiny version of mermaid",
|
||||||
"type": "commonjs",
|
"type": "commonjs",
|
||||||
"main": "./dist/mermaid.tiny.js",
|
"main": "./dist/mermaid.tiny.js",
|
||||||
|
3414
pnpm-lock.yaml
generated
3414
pnpm-lock.yaml
generated
File diff suppressed because it is too large
Load Diff
@@ -40,6 +40,10 @@
|
|||||||
{
|
{
|
||||||
"groupName": "dompurify",
|
"groupName": "dompurify",
|
||||||
"matchPackagePatterns": ["dompurify"]
|
"matchPackagePatterns": ["dompurify"]
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"matchPackageNames": ["chokidar"],
|
||||||
|
"enabled": false
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"dependencyDashboard": false,
|
"dependencyDashboard": false,
|
||||||
|
Reference in New Issue
Block a user