mirror of
https://github.com/mermaid-js/mermaid.git
synced 2025-01-28 07:03:17 +08:00
Merge branch 'develop' into pr/rhysd/4359
* develop: (595 commits) chore: Fix unit tests chore(deps): update all patch dependencies chore: Update docs Update docs New Mermaid Live Editor for Confluence Cloud (#4814) Update link to Discourse theme component (#4811) Update flowchart.md (#4810) chore: remove unneeded `CommomDB` chore: Update docs "CSS" instead of "css" in flowchart.md (#4797) Update CONTRIBUTING.md Update CONTRIBUTING.md fix: typos (#4801) chore: Align with convention fix: Add support for `~test Array~string~` chore: Add JSDoc to apply in sequenceDB refactor: Tidy up direction handling chore: Fix flowchart arrow chore: Add test to verify activate chore: Update tests snapshot ...
This commit is contained in:
commit
c3b86b687c
@ -38,12 +38,17 @@ module.exports = {
|
|||||||
'lodash',
|
'lodash',
|
||||||
'unicorn',
|
'unicorn',
|
||||||
],
|
],
|
||||||
|
ignorePatterns: [
|
||||||
|
// this file is automatically generated by `pnpm run --filter mermaid types:build-config`
|
||||||
|
'packages/mermaid/src/config.type.ts',
|
||||||
|
],
|
||||||
rules: {
|
rules: {
|
||||||
curly: 'error',
|
curly: 'error',
|
||||||
'no-console': 'error',
|
'no-console': 'error',
|
||||||
'no-prototype-builtins': 'off',
|
'no-prototype-builtins': 'off',
|
||||||
'no-unused-vars': 'off',
|
'no-unused-vars': 'off',
|
||||||
'cypress/no-async-tests': 'off',
|
'cypress/no-async-tests': 'off',
|
||||||
|
'@typescript-eslint/consistent-type-imports': 'error',
|
||||||
'@typescript-eslint/no-floating-promises': 'error',
|
'@typescript-eslint/no-floating-promises': 'error',
|
||||||
'@typescript-eslint/no-misused-promises': 'error',
|
'@typescript-eslint/no-misused-promises': 'error',
|
||||||
'@typescript-eslint/ban-ts-comment': [
|
'@typescript-eslint/ban-ts-comment': [
|
||||||
@ -123,6 +128,14 @@ module.exports = {
|
|||||||
files: ['*.{ts,tsx}'],
|
files: ['*.{ts,tsx}'],
|
||||||
plugins: ['tsdoc'],
|
plugins: ['tsdoc'],
|
||||||
rules: {
|
rules: {
|
||||||
|
'no-restricted-syntax': [
|
||||||
|
'error',
|
||||||
|
{
|
||||||
|
selector: 'TSEnumDeclaration',
|
||||||
|
message:
|
||||||
|
'Prefer using TypeScript union types over TypeScript enum, since TypeScript enums have a bunch of issues, see https://dev.to/dvddpl/whats-the-problem-with-typescript-enums-2okj',
|
||||||
|
},
|
||||||
|
],
|
||||||
'tsdoc/syntax': 'error',
|
'tsdoc/syntax': 'error',
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
9
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
9
.github/ISSUE_TEMPLATE/bug_report.yml
vendored
@ -55,6 +55,15 @@ body:
|
|||||||
value: |-
|
value: |-
|
||||||
- Mermaid version:
|
- Mermaid version:
|
||||||
- Browser and Version: [Chrome, Edge, Firefox]
|
- Browser and Version: [Chrome, Edge, Firefox]
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Suggested Solutions
|
||||||
|
description: >
|
||||||
|
If applicable, suggest solutions that could resolve the bug.
|
||||||
|
It would help maintainers/contributors to not waste time looking for the solution. Even pointing the line causing the bug would be great!
|
||||||
|
placeholder: |-
|
||||||
|
- Variable `parser` in file <filepath> is not initialised ...
|
||||||
|
- Add a new type for ...
|
||||||
- type: textarea
|
- type: textarea
|
||||||
attributes:
|
attributes:
|
||||||
label: Additional Context
|
label: Additional Context
|
||||||
|
11
codecov.yaml → .github/codecov.yaml
vendored
11
codecov.yaml → .github/codecov.yaml
vendored
@ -1,6 +1,17 @@
|
|||||||
|
codecov:
|
||||||
|
branch: develop
|
||||||
|
|
||||||
comment:
|
comment:
|
||||||
layout: 'reach, diff, flags, files'
|
layout: 'reach, diff, flags, files'
|
||||||
behavior: default
|
behavior: default
|
||||||
require_changes: false # if true: only post the comment if coverage changes
|
require_changes: false # if true: only post the comment if coverage changes
|
||||||
require_base: no # [yes :: must have a base report to post]
|
require_base: no # [yes :: must have a base report to post]
|
||||||
require_head: yes # [yes :: must have a head report to post]
|
require_head: yes # [yes :: must have a head report to post]
|
||||||
|
|
||||||
|
coverage:
|
||||||
|
status:
|
||||||
|
project:
|
||||||
|
off
|
||||||
|
# Turing off for now as code coverage isn't stable and causes unnecessary build failures.
|
||||||
|
# default:
|
||||||
|
# threshold: 2%
|
44
.github/lychee.toml
vendored
Normal file
44
.github/lychee.toml
vendored
Normal file
@ -0,0 +1,44 @@
|
|||||||
|
############################# Display #############################
|
||||||
|
|
||||||
|
# Verbose program output
|
||||||
|
# Accepts log level: "error", "warn", "info", "debug", "trace"
|
||||||
|
verbose = "debug"
|
||||||
|
|
||||||
|
# Don't show interactive progress bar while checking links.
|
||||||
|
no_progress = true
|
||||||
|
|
||||||
|
############################# Cache ###############################
|
||||||
|
|
||||||
|
# Enable link caching. This can be helpful to avoid checking the same links on
|
||||||
|
# multiple runs.
|
||||||
|
cache = true
|
||||||
|
|
||||||
|
# Discard all cached requests older than this duration.
|
||||||
|
max_cache_age = "1d"
|
||||||
|
|
||||||
|
############################# Requests ############################
|
||||||
|
|
||||||
|
# Comma-separated list of accepted status codes for valid links.
|
||||||
|
accept = [200, 429]
|
||||||
|
|
||||||
|
############################# Exclusions ##########################
|
||||||
|
|
||||||
|
# Exclude URLs and mail addresses from checking (supports regex).
|
||||||
|
exclude = [
|
||||||
|
# Network error: Forbidden
|
||||||
|
"https://codepen.io",
|
||||||
|
|
||||||
|
# Timeout error, maybe Twitter has anti-bot defenses against GitHub's CI servers?
|
||||||
|
"https://twitter.com/mermaidjs_",
|
||||||
|
|
||||||
|
# Don't check files that are generated during the build via `pnpm docs:code`
|
||||||
|
'packages/mermaid/src/docs/config/setup/*',
|
||||||
|
|
||||||
|
# Ignore slack invite
|
||||||
|
"https://join.slack.com/"
|
||||||
|
]
|
||||||
|
|
||||||
|
# Exclude all private IPs from checking.
|
||||||
|
# Equivalent to setting `exclude_private`, `exclude_link_local`, and
|
||||||
|
# `exclude_loopback` to true.
|
||||||
|
exclude_all_private = true
|
7
.github/pr-labeler.yml
vendored
7
.github/pr-labeler.yml
vendored
@ -1,3 +1,4 @@
|
|||||||
'Type: Bug / Error': 'bug/*'
|
'Type: Bug / Error': ['bug/*', fix/*]
|
||||||
'Type: Enhancement': 'feature/*'
|
'Type: Enhancement': ['feature/*', 'feat/*']
|
||||||
'Type: Other': 'other/*'
|
'Type: Other': ['other/*', 'chore/*', 'test/*', 'refactor/*']
|
||||||
|
'Area: Documentation': ['docs/*']
|
||||||
|
4
.github/pull_request_template.md
vendored
4
.github/pull_request_template.md
vendored
@ -13,6 +13,6 @@ Describe the way your implementation works or what design decisions you made if
|
|||||||
Make sure you
|
Make sure you
|
||||||
|
|
||||||
- [ ] :book: have read the [contribution guidelines](https://github.com/mermaid-js/mermaid/blob/develop/CONTRIBUTING.md)
|
- [ ] :book: have read the [contribution guidelines](https://github.com/mermaid-js/mermaid/blob/develop/CONTRIBUTING.md)
|
||||||
- [ ] :computer: have added unit/e2e tests (if appropriate)
|
- [ ] :computer: have added necessary unit/e2e tests.
|
||||||
- [ ] :notebook: have added documentation (if appropriate)
|
- [ ] :notebook: have added documentation. Make sure [`MERMAID_RELEASE_VERSION`](https://github.com/mermaid-js/mermaid/blob/develop/packages/mermaid/src/docs/community/development.md#3-update-documentation) is used for all new features.
|
||||||
- [ ] :bookmark: targeted `develop` branch
|
- [ ] :bookmark: targeted `develop` branch
|
||||||
|
15
.github/release-drafter.yml
vendored
15
.github/release-drafter.yml
vendored
@ -1,14 +1,27 @@
|
|||||||
name-template: '$NEXT_PATCH_VERSION'
|
name-template: '$NEXT_PATCH_VERSION'
|
||||||
tag-template: '$NEXT_PATCH_VERSION'
|
tag-template: '$NEXT_PATCH_VERSION'
|
||||||
categories:
|
categories:
|
||||||
|
- title: '🚨 **Breaking Changes**'
|
||||||
|
labels:
|
||||||
|
- 'Breaking Change'
|
||||||
- title: '🚀 Features'
|
- title: '🚀 Features'
|
||||||
labels:
|
labels:
|
||||||
- 'Type: Enhancement'
|
- 'Type: Enhancement'
|
||||||
|
- 'feature' # deprecated, new PRs shouldn't have this
|
||||||
- title: '🐛 Bug Fixes'
|
- title: '🐛 Bug Fixes'
|
||||||
labels:
|
labels:
|
||||||
- 'Type: Bug / Error'
|
- 'Type: Bug / Error'
|
||||||
|
- 'fix' # deprecated, new PRs shouldn't have this
|
||||||
- title: '🧰 Maintenance'
|
- title: '🧰 Maintenance'
|
||||||
label: 'Type: Other'
|
labels:
|
||||||
|
- 'Type: Other'
|
||||||
|
- 'chore' # deprecated, new PRs shouldn't have this
|
||||||
|
- title: '⚡️ Performance'
|
||||||
|
labels:
|
||||||
|
- 'Type: Performance'
|
||||||
|
- title: '📚 Documentation'
|
||||||
|
labels:
|
||||||
|
- 'Area: Documentation'
|
||||||
change-template: '- $TITLE (#$NUMBER) @$AUTHOR'
|
change-template: '- $TITLE (#$NUMBER) @$AUTHOR'
|
||||||
sort-by: title
|
sort-by: title
|
||||||
sort-direction: ascending
|
sort-direction: ascending
|
||||||
|
12
.github/workflows/build-docs.yml
vendored
12
.github/workflows/build-docs.yml
vendored
@ -1,14 +1,18 @@
|
|||||||
name: Build Vitepress docs
|
name: Build Vitepress docs
|
||||||
|
|
||||||
on:
|
on:
|
||||||
|
push:
|
||||||
|
branches:
|
||||||
|
- master
|
||||||
|
- release/*
|
||||||
pull_request:
|
pull_request:
|
||||||
|
merge_group:
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
# Build job
|
build-docs:
|
||||||
build:
|
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
@ -25,5 +29,9 @@ jobs:
|
|||||||
- name: Install Packages
|
- name: Install Packages
|
||||||
run: pnpm install --frozen-lockfile
|
run: pnpm install --frozen-lockfile
|
||||||
|
|
||||||
|
- name: Verify release verion
|
||||||
|
if: ${{ github.event_name == 'push' && (github.ref == 'refs/heads/master' || startsWith(github.ref, 'refs/heads/release')) }}
|
||||||
|
run: pnpm --filter mermaid run docs:verify-version
|
||||||
|
|
||||||
- name: Run Build
|
- name: Run Build
|
||||||
run: pnpm --filter mermaid run docs:build:vitepress
|
run: pnpm --filter mermaid run docs:build:vitepress
|
||||||
|
3
.github/workflows/build.yml
vendored
3
.github/workflows/build.yml
vendored
@ -2,6 +2,7 @@ name: Build
|
|||||||
|
|
||||||
on:
|
on:
|
||||||
push: {}
|
push: {}
|
||||||
|
merge_group:
|
||||||
pull_request:
|
pull_request:
|
||||||
types:
|
types:
|
||||||
- opened
|
- opened
|
||||||
@ -12,7 +13,7 @@ permissions:
|
|||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
build-mermaid:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
|
2
.github/workflows/check-readme-in-sync.yml
vendored
2
.github/workflows/check-readme-in-sync.yml
vendored
@ -14,7 +14,7 @@ permissions:
|
|||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
check:
|
check-readme:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout repository
|
- name: Checkout repository
|
||||||
|
7
.github/workflows/checks.yml
vendored
7
.github/workflows/checks.yml
vendored
@ -1,15 +1,16 @@
|
|||||||
on:
|
on:
|
||||||
push: {}
|
push:
|
||||||
|
merge_group:
|
||||||
pull_request:
|
pull_request:
|
||||||
types:
|
types:
|
||||||
- opened
|
- opened
|
||||||
- synchronize
|
- synchronize
|
||||||
- ready_for_review
|
- ready_for_review
|
||||||
|
|
||||||
name: Static analysis
|
name: Static analysis on Test files
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
check-tests:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
name: check tests
|
name: check tests
|
||||||
if: github.repository_owner == 'mermaid-js'
|
if: github.repository_owner == 'mermaid-js'
|
||||||
|
2
.github/workflows/e2e-applitools.yml
vendored
2
.github/workflows/e2e-applitools.yml
vendored
@ -19,7 +19,7 @@ env:
|
|||||||
USE_APPLI: ${{ secrets.APPLITOOLS_API_KEY && 'true' || '' }}
|
USE_APPLI: ${{ secrets.APPLITOOLS_API_KEY && 'true' || '' }}
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
test:
|
e2e-applitools:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
|
14
.github/workflows/e2e.yml
vendored
14
.github/workflows/e2e.yml
vendored
@ -1,12 +1,15 @@
|
|||||||
name: E2E
|
name: E2E
|
||||||
|
|
||||||
on: [push, pull_request]
|
on:
|
||||||
|
push:
|
||||||
|
pull_request:
|
||||||
|
merge_group:
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
e2e:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
strategy:
|
||||||
fail-fast: false
|
fail-fast: false
|
||||||
@ -42,15 +45,18 @@ jobs:
|
|||||||
env:
|
env:
|
||||||
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
|
CYPRESS_RECORD_KEY: ${{ secrets.CYPRESS_RECORD_KEY }}
|
||||||
VITEST_COVERAGE: true
|
VITEST_COVERAGE: true
|
||||||
|
CYPRESS_COMMIT: ${{ github.sha }}
|
||||||
- name: Upload Coverage to Codecov
|
- name: Upload Coverage to Codecov
|
||||||
uses: codecov/codecov-action@v3
|
uses: codecov/codecov-action@v3
|
||||||
if: steps.cypress.conclusion == 'success'
|
# Run step only pushes to develop and pull_requests
|
||||||
|
if: ${{ steps.cypress.conclusion == 'success' && (github.event_name == 'pull_request' || github.ref == 'refs/heads/develop')}}
|
||||||
with:
|
with:
|
||||||
files: coverage/cypress/lcov.info
|
files: coverage/cypress/lcov.info
|
||||||
flags: e2e
|
flags: e2e
|
||||||
name: mermaid-codecov
|
name: mermaid-codecov
|
||||||
fail_ci_if_error: true
|
fail_ci_if_error: false
|
||||||
verbose: true
|
verbose: true
|
||||||
|
token: 6845cc80-77ee-4e17-85a1-026cd95e0766
|
||||||
- name: Upload Artifacts
|
- name: Upload Artifacts
|
||||||
uses: actions/upload-artifact@v3
|
uses: actions/upload-artifact@v3
|
||||||
if: ${{ failure() && steps.cypress.conclusion == 'failure' }}
|
if: ${{ failure() && steps.cypress.conclusion == 'failure' }}
|
||||||
|
7
.github/workflows/link-checker.yml
vendored
7
.github/workflows/link-checker.yml
vendored
@ -20,7 +20,7 @@ on:
|
|||||||
- cron: '30 8 * * *'
|
- cron: '30 8 * * *'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
linkChecker:
|
link-checker:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
permissions:
|
permissions:
|
||||||
# lychee only uses the GITHUB_TOKEN to avoid rate-limiting
|
# lychee only uses the GITHUB_TOKEN to avoid rate-limiting
|
||||||
@ -39,10 +39,7 @@ jobs:
|
|||||||
uses: lycheeverse/lychee-action@v1.8.0
|
uses: lycheeverse/lychee-action@v1.8.0
|
||||||
with:
|
with:
|
||||||
args: >-
|
args: >-
|
||||||
--verbose
|
--config .github/lychee.toml
|
||||||
--no-progress
|
|
||||||
--cache
|
|
||||||
--max-cache-age 1d
|
|
||||||
packages/mermaid/src/docs/**/*.md
|
packages/mermaid/src/docs/**/*.md
|
||||||
README.md
|
README.md
|
||||||
README.zh-CN.md
|
README.zh-CN.md
|
||||||
|
30
.github/workflows/lint.yml
vendored
30
.github/workflows/lint.yml
vendored
@ -1,7 +1,8 @@
|
|||||||
name: Lint
|
name: Lint
|
||||||
|
|
||||||
on:
|
on:
|
||||||
push: {}
|
push:
|
||||||
|
merge_group:
|
||||||
pull_request:
|
pull_request:
|
||||||
types:
|
types:
|
||||||
- opened
|
- opened
|
||||||
@ -52,6 +53,33 @@ jobs:
|
|||||||
exit 1
|
exit 1
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
- name: Verify `./src/config.type.ts` is in sync with `./src/schemas/config.schema.yaml`
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
if ! pnpm run --filter mermaid types:verify-config; then
|
||||||
|
ERROR_MESSAGE='Running `pnpm run --filter mermaid types:verify-config` failed.'
|
||||||
|
ERROR_MESSAGE+=' This should be fixed by running'
|
||||||
|
ERROR_MESSAGE+=' `pnpm run --filter mermaid types:build-config`'
|
||||||
|
ERROR_MESSAGE+=' on your local machine.'
|
||||||
|
echo "::error title=Lint failure::${ERROR_MESSAGE}"
|
||||||
|
# make sure to return an error exitcode so that GitHub actions shows a red-cross
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
- name: Verify no circular dependencies
|
||||||
|
working-directory: ./packages/mermaid
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
if ! pnpm run --filter mermaid checkCircle; then
|
||||||
|
ERROR_MESSAGE='Circular dependency detected.'
|
||||||
|
ERROR_MESSAGE+=' This should be fixed by removing the circular dependency.'
|
||||||
|
ERROR_MESSAGE+=' Run `pnpm run --filter mermaid checkCircle` on your local machine'
|
||||||
|
ERROR_MESSAGE+=' to see the circular dependency.'
|
||||||
|
echo "::error title=Lint failure::${ERROR_MESSAGE}"
|
||||||
|
# make sure to return an error exitcode so that GitHub actions shows a red-cross
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
- name: Verify Docs
|
- name: Verify Docs
|
||||||
id: verifyDocs
|
id: verifyDocs
|
||||||
working-directory: ./packages/mermaid
|
working-directory: ./packages/mermaid
|
||||||
|
@ -1,11 +1,15 @@
|
|||||||
name: Validate PR Labeler Configuration
|
name: Validate PR Labeler Configuration
|
||||||
on:
|
on:
|
||||||
push: {}
|
push:
|
||||||
|
paths:
|
||||||
|
- .github/workflows/pr-labeler-config-validator.yml
|
||||||
|
- .github/workflows/pr-labeler.yml
|
||||||
|
- .github/pr-labeler.yml
|
||||||
pull_request:
|
pull_request:
|
||||||
types:
|
paths:
|
||||||
- opened
|
- .github/workflows/pr-labeler-config-validator.yml
|
||||||
- synchronize
|
- .github/workflows/pr-labeler.yml
|
||||||
- ready_for_review
|
- .github/pr-labeler.yml
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
pr-labeler:
|
pr-labeler:
|
||||||
|
6
.github/workflows/publish-docs.yml
vendored
6
.github/workflows/publish-docs.yml
vendored
@ -19,7 +19,7 @@ concurrency:
|
|||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
# Build job
|
# Build job
|
||||||
build:
|
build-docs:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- name: Checkout
|
- name: Checkout
|
||||||
@ -48,11 +48,11 @@ jobs:
|
|||||||
path: packages/mermaid/src/vitepress/.vitepress/dist
|
path: packages/mermaid/src/vitepress/.vitepress/dist
|
||||||
|
|
||||||
# Deployment job
|
# Deployment job
|
||||||
deploy:
|
deploy-docs:
|
||||||
environment:
|
environment:
|
||||||
name: github-pages
|
name: github-pages
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
needs: build
|
needs: build-docs
|
||||||
steps:
|
steps:
|
||||||
- name: Deploy to GitHub Pages
|
- name: Deploy to GitHub Pages
|
||||||
id: deployment
|
id: deployment
|
||||||
|
@ -6,7 +6,7 @@ on:
|
|||||||
- 'release/**'
|
- 'release/**'
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
publish:
|
publish-preview:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
15
.github/workflows/test.yml
vendored
15
.github/workflows/test.yml
vendored
@ -1,12 +1,12 @@
|
|||||||
name: Unit Tests
|
name: Unit Tests
|
||||||
|
|
||||||
on: [push, pull_request]
|
on: [push, pull_request, merge_group]
|
||||||
|
|
||||||
permissions:
|
permissions:
|
||||||
contents: read
|
contents: read
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
unit-test:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
strategy:
|
strategy:
|
||||||
matrix:
|
matrix:
|
||||||
@ -43,15 +43,12 @@ jobs:
|
|||||||
|
|
||||||
- name: Upload Coverage to Codecov
|
- name: Upload Coverage to Codecov
|
||||||
uses: codecov/codecov-action@v3
|
uses: codecov/codecov-action@v3
|
||||||
|
# Run step only pushes to develop and pull_requests
|
||||||
|
if: ${{ github.event_name == 'pull_request' || github.ref == 'refs/heads/develop' }}
|
||||||
with:
|
with:
|
||||||
files: ./coverage/vitest/lcov.info
|
files: ./coverage/vitest/lcov.info
|
||||||
flags: unit
|
flags: unit
|
||||||
name: mermaid-codecov
|
name: mermaid-codecov
|
||||||
fail_ci_if_error: true
|
fail_ci_if_error: false
|
||||||
verbose: true
|
verbose: true
|
||||||
# Coveralls is throwing 500. Disabled for now.
|
token: 6845cc80-77ee-4e17-85a1-026cd95e0766
|
||||||
# - name: Upload Coverage to Coveralls
|
|
||||||
# uses: coverallsapp/github-action@v2
|
|
||||||
# with:
|
|
||||||
# github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
||||||
# flag-name: unit
|
|
||||||
|
2
.github/workflows/update-browserlist.yml
vendored
2
.github/workflows/update-browserlist.yml
vendored
@ -5,7 +5,7 @@ on:
|
|||||||
workflow_dispatch:
|
workflow_dispatch:
|
||||||
|
|
||||||
jobs:
|
jobs:
|
||||||
build:
|
update-browser-list:
|
||||||
runs-on: ubuntu-latest
|
runs-on: ubuntu-latest
|
||||||
steps:
|
steps:
|
||||||
- uses: actions/checkout@v3
|
- uses: actions/checkout@v3
|
||||||
|
3
.gitignore
vendored
3
.gitignore
vendored
@ -43,3 +43,6 @@ stats/
|
|||||||
**/contributor-names.json
|
**/contributor-names.json
|
||||||
.pnpm-store
|
.pnpm-store
|
||||||
.nyc_output
|
.nyc_output
|
||||||
|
|
||||||
|
demos/dev/**
|
||||||
|
!/demos/dev/example.html
|
||||||
|
@ -1,17 +0,0 @@
|
|||||||
# These links are ignored by our link checker https://github.com/lycheeverse/lychee
|
|
||||||
# The file allows you to list multiple regular expressions for exclusion (one pattern per line).
|
|
||||||
|
|
||||||
# Network error: Forbidden
|
|
||||||
https://codepen.io
|
|
||||||
|
|
||||||
# Timeout error, maybe Twitter has anti-bot defenses against GitHub's CI servers?
|
|
||||||
https://twitter.com/mermaidjs_
|
|
||||||
|
|
||||||
# Don't check files that are generated during the build via `pnpm docs:code`
|
|
||||||
packages/mermaid/src/docs/config/setup/*
|
|
||||||
|
|
||||||
# Ignore localhost
|
|
||||||
http://localhost:3333/
|
|
||||||
|
|
||||||
# Ignore slack invite
|
|
||||||
https://join.slack.com/
|
|
@ -5,4 +5,8 @@ coverage
|
|||||||
# Autogenerated by PNPM
|
# Autogenerated by PNPM
|
||||||
pnpm-lock.yaml
|
pnpm-lock.yaml
|
||||||
stats
|
stats
|
||||||
packages/mermaid/src/docs/.vitepress/components.d.ts
|
**/.vitepress/components.d.ts
|
||||||
|
**/.vitepress/cache
|
||||||
|
.nyc_output
|
||||||
|
# Autogenerated by `pnpm run --filter mermaid types:build-config`
|
||||||
|
packages/mermaid/src/config.type.ts
|
||||||
|
@ -2,6 +2,7 @@ import { build, InlineConfig, type PluginOption } from 'vite';
|
|||||||
import { resolve } from 'path';
|
import { resolve } from 'path';
|
||||||
import { fileURLToPath } from 'url';
|
import { fileURLToPath } from 'url';
|
||||||
import jisonPlugin from './jisonPlugin.js';
|
import jisonPlugin from './jisonPlugin.js';
|
||||||
|
import jsonSchemaPlugin from './jsonSchemaPlugin.js';
|
||||||
import { readFileSync } from 'fs';
|
import { readFileSync } from 'fs';
|
||||||
import typescript from '@rollup/plugin-typescript';
|
import typescript from '@rollup/plugin-typescript';
|
||||||
import { visualizer } from 'rollup-plugin-visualizer';
|
import { visualizer } from 'rollup-plugin-visualizer';
|
||||||
@ -121,6 +122,7 @@ export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions)
|
|||||||
},
|
},
|
||||||
plugins: [
|
plugins: [
|
||||||
jisonPlugin(),
|
jisonPlugin(),
|
||||||
|
jsonSchemaPlugin(), // handles `.schema.yaml` files
|
||||||
// @ts-expect-error According to the type definitions, rollup plugins are incompatible with vite
|
// @ts-expect-error According to the type definitions, rollup plugins are incompatible with vite
|
||||||
typescript({ compilerOptions: { declaration: false } }),
|
typescript({ compilerOptions: { declaration: false } }),
|
||||||
istanbul({
|
istanbul({
|
||||||
|
150
.vite/jsonSchemaPlugin.ts
Normal file
150
.vite/jsonSchemaPlugin.ts
Normal file
@ -0,0 +1,150 @@
|
|||||||
|
import { load, JSON_SCHEMA } from 'js-yaml';
|
||||||
|
import assert from 'node:assert';
|
||||||
|
import Ajv2019, { type JSONSchemaType } from 'ajv/dist/2019.js';
|
||||||
|
import { PluginOption } from 'vite';
|
||||||
|
|
||||||
|
import type { MermaidConfig, BaseDiagramConfig } from '../packages/mermaid/src/config.type.js';
|
||||||
|
|
||||||
|
/**
|
||||||
|
* All of the keys in the mermaid config that have a mermaid diagram config.
|
||||||
|
*/
|
||||||
|
const MERMAID_CONFIG_DIAGRAM_KEYS = [
|
||||||
|
'flowchart',
|
||||||
|
'sequence',
|
||||||
|
'gantt',
|
||||||
|
'journey',
|
||||||
|
'class',
|
||||||
|
'state',
|
||||||
|
'er',
|
||||||
|
'pie',
|
||||||
|
'quadrantChart',
|
||||||
|
'requirement',
|
||||||
|
'mindmap',
|
||||||
|
'timeline',
|
||||||
|
'gitGraph',
|
||||||
|
'c4',
|
||||||
|
'sankey',
|
||||||
|
] as const;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Generate default values from the JSON Schema.
|
||||||
|
*
|
||||||
|
* AJV does not support nested default values yet (or default values with $ref),
|
||||||
|
* so we need to manually find them (this may be fixed in ajv v9).
|
||||||
|
*
|
||||||
|
* @param mermaidConfigSchema - The Mermaid JSON Schema to use.
|
||||||
|
* @returns The default mermaid config object.
|
||||||
|
*/
|
||||||
|
function generateDefaults(mermaidConfigSchema: JSONSchemaType<MermaidConfig>) {
|
||||||
|
const ajv = new Ajv2019({
|
||||||
|
useDefaults: true,
|
||||||
|
allowUnionTypes: true,
|
||||||
|
strict: true,
|
||||||
|
});
|
||||||
|
|
||||||
|
ajv.addKeyword({
|
||||||
|
keyword: 'meta:enum', // used by jsonschema2md
|
||||||
|
errors: false,
|
||||||
|
});
|
||||||
|
ajv.addKeyword({
|
||||||
|
keyword: 'tsType', // used by json-schema-to-typescript
|
||||||
|
errors: false,
|
||||||
|
});
|
||||||
|
|
||||||
|
// ajv currently doesn't support nested default values, see https://github.com/ajv-validator/ajv/issues/1718
|
||||||
|
// (may be fixed in v9) so we need to manually use sub-schemas
|
||||||
|
const mermaidDefaultConfig = {};
|
||||||
|
|
||||||
|
assert.ok(mermaidConfigSchema.$defs);
|
||||||
|
const baseDiagramConfig = mermaidConfigSchema.$defs.BaseDiagramConfig;
|
||||||
|
|
||||||
|
for (const key of MERMAID_CONFIG_DIAGRAM_KEYS) {
|
||||||
|
const subSchemaRef = mermaidConfigSchema.properties[key].$ref;
|
||||||
|
const [root, defs, defName] = subSchemaRef.split('/');
|
||||||
|
assert.strictEqual(root, '#');
|
||||||
|
assert.strictEqual(defs, '$defs');
|
||||||
|
const subSchema = {
|
||||||
|
$schema: mermaidConfigSchema.$schema,
|
||||||
|
$defs: mermaidConfigSchema.$defs,
|
||||||
|
...mermaidConfigSchema.$defs[defName],
|
||||||
|
} as JSONSchemaType<BaseDiagramConfig>;
|
||||||
|
|
||||||
|
const validate = ajv.compile(subSchema);
|
||||||
|
|
||||||
|
mermaidDefaultConfig[key] = {};
|
||||||
|
|
||||||
|
for (const required of subSchema.required ?? []) {
|
||||||
|
if (subSchema.properties[required] === undefined && baseDiagramConfig.properties[required]) {
|
||||||
|
mermaidDefaultConfig[key][required] = baseDiagramConfig.properties[required].default;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (!validate(mermaidDefaultConfig[key])) {
|
||||||
|
throw new Error(
|
||||||
|
`schema for subconfig ${key} does not have valid defaults! Errors were ${JSON.stringify(
|
||||||
|
validate.errors,
|
||||||
|
undefined,
|
||||||
|
2
|
||||||
|
)}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
const validate = ajv.compile(mermaidConfigSchema);
|
||||||
|
|
||||||
|
if (!validate(mermaidDefaultConfig)) {
|
||||||
|
throw new Error(
|
||||||
|
`Mermaid config JSON Schema does not have valid defaults! Errors were ${JSON.stringify(
|
||||||
|
validate.errors,
|
||||||
|
undefined,
|
||||||
|
2
|
||||||
|
)}`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
return mermaidDefaultConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Vite plugin that handles JSON Schemas saved as a `.schema.yaml` file.
|
||||||
|
*
|
||||||
|
* Use `my-example.schema.yaml?only-defaults=true` to only load the default values.
|
||||||
|
*/
|
||||||
|
export default function jsonSchemaPlugin(): PluginOption {
|
||||||
|
return {
|
||||||
|
name: 'json-schema-plugin',
|
||||||
|
transform(src: string, id: string) {
|
||||||
|
const idAsUrl = new URL(id, 'file:///');
|
||||||
|
|
||||||
|
if (!idAsUrl.pathname.endsWith('schema.yaml')) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (idAsUrl.searchParams.get('only-defaults')) {
|
||||||
|
const jsonSchema = load(src, {
|
||||||
|
filename: idAsUrl.pathname,
|
||||||
|
// only allow JSON types in our YAML doc (will probably be default in YAML 1.3)
|
||||||
|
// e.g. `true` will be parsed a boolean `true`, `True` will be parsed as string `"True"`.
|
||||||
|
schema: JSON_SCHEMA,
|
||||||
|
}) as JSONSchemaType<MermaidConfig>;
|
||||||
|
return {
|
||||||
|
code: `export default ${JSON.stringify(generateDefaults(jsonSchema), undefined, 2)};`,
|
||||||
|
map: null, // no source map
|
||||||
|
};
|
||||||
|
} else {
|
||||||
|
return {
|
||||||
|
code: `export default ${JSON.stringify(
|
||||||
|
load(src, {
|
||||||
|
filename: idAsUrl.pathname,
|
||||||
|
// only allow JSON types in our YAML doc (will probably be default in YAML 1.3)
|
||||||
|
// e.g. `true` will be parsed a boolean `true`, `True` will be parsed as string `"True"`.
|
||||||
|
schema: JSON_SCHEMA,
|
||||||
|
}),
|
||||||
|
undefined,
|
||||||
|
2
|
||||||
|
)};`,
|
||||||
|
map: null, // provide source map if available
|
||||||
|
};
|
||||||
|
}
|
||||||
|
},
|
||||||
|
};
|
||||||
|
}
|
2
.vscode/launch.json
vendored
2
.vscode/launch.json
vendored
@ -17,7 +17,7 @@
|
|||||||
"name": "Docs generation",
|
"name": "Docs generation",
|
||||||
"type": "node",
|
"type": "node",
|
||||||
"request": "launch",
|
"request": "launch",
|
||||||
"args": ["src/docs.mts"],
|
"args": ["scripts/docs.cli.mts"],
|
||||||
"runtimeArgs": ["--loader", "ts-node/esm"],
|
"runtimeArgs": ["--loader", "ts-node/esm"],
|
||||||
"cwd": "${workspaceRoot}/packages/mermaid",
|
"cwd": "${workspaceRoot}/packages/mermaid",
|
||||||
"skipFiles": ["<node_internals>/**", "**/node_modules/**"],
|
"skipFiles": ["<node_internals>/**", "**/node_modules/**"],
|
||||||
|
16
CITATION.cff
Normal file
16
CITATION.cff
Normal file
@ -0,0 +1,16 @@
|
|||||||
|
cff-version: 1.2.0
|
||||||
|
title: 'Mermaid: Generate diagrams from markdown-like text'
|
||||||
|
message: >-
|
||||||
|
If you use this software, please cite it using the metadata from this file.
|
||||||
|
type: software
|
||||||
|
authors:
|
||||||
|
- family-names: Sveidqvist
|
||||||
|
given-names: Knut
|
||||||
|
- name: 'Contributors to Mermaid'
|
||||||
|
repository-code: 'https://github.com/mermaid-js/mermaid'
|
||||||
|
date-released: 2014-12-02
|
||||||
|
url: 'https://mermaid.js.org/'
|
||||||
|
abstract: >-
|
||||||
|
JavaScript based diagramming and charting tool that renders Markdown-inspired
|
||||||
|
text definitions to create and modify diagrams dynamically.
|
||||||
|
license: MIT
|
@ -26,9 +26,14 @@ Install required packages:
|
|||||||
```bash
|
```bash
|
||||||
# npx is required for first install as volta support for pnpm is not added yet.
|
# npx is required for first install as volta support for pnpm is not added yet.
|
||||||
npx pnpm install
|
npx pnpm install
|
||||||
pnpm test
|
pnpm test # run unit tests
|
||||||
|
pnpm dev # starts a dev server
|
||||||
```
|
```
|
||||||
|
|
||||||
|
Open <http://localhost:9000> in your browser after starting the dev server.
|
||||||
|
You can also duplicate the `example.html` file in `demos/dev`, rename it and add your own mermaid code to it.
|
||||||
|
That will be served at <http://localhost:9000/dev/your-file-name.html>.
|
||||||
|
|
||||||
### Docker
|
### Docker
|
||||||
|
|
||||||
If you are using docker and docker-compose, you have self-documented `run` bash script, which is a convenient alias for docker-compose commands:
|
If you are using docker and docker-compose, you have self-documented `run` bash script, which is a convenient alias for docker-compose commands:
|
||||||
@ -64,8 +69,10 @@ eg: `feature/2945_state-diagram-new-arrow-florbs`, `bug/1123_fix_random_ugly_red
|
|||||||
|
|
||||||
Documentation is necessary for all non bugfix/refactoring changes.
|
Documentation is necessary for all non bugfix/refactoring changes.
|
||||||
|
|
||||||
Only make changes to files are in [`/packages/mermaid/src/docs`](packages/mermaid/src/docs)
|
Only make changes to files that are in [`/packages/mermaid/src/docs`](packages/mermaid/src/docs)
|
||||||
|
|
||||||
**_DO NOT CHANGE FILES IN `/docs`_**
|
**_DO NOT CHANGE FILES IN `/docs` MANUALLY_**
|
||||||
|
|
||||||
|
The `/docs` folder will be rebuilt and committed as part of a pre-commit hook.
|
||||||
|
|
||||||
[Join our slack community if you want closer contact!](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE)
|
[Join our slack community if you want closer contact!](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE)
|
||||||
|
@ -60,7 +60,7 @@ Use Mermaid with your favorite applications, check out the list of [Integrations
|
|||||||
|
|
||||||
You can also use Mermaid within [GitHub](https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/) as well many of your other favorite applications—check out the list of [Integrations and Usages of Mermaid](./docs/ecosystem/integrations.md).
|
You can also use Mermaid within [GitHub](https://github.blog/2022-02-14-include-diagrams-markdown-files-mermaid/) as well many of your other favorite applications—check out the list of [Integrations and Usages of Mermaid](./docs/ecosystem/integrations.md).
|
||||||
|
|
||||||
For a more detailed introduction to Mermaid and some of its more basic uses, look to the [Beginner's Guide](./docs/community/n00b-overview.md), [Usage](./docs/config/usage.md) and [Tutorials](./docs/config/Tutorials.md).
|
For a more detailed introduction to Mermaid and some of its more basic uses, look to the [Beginner's Guide](./docs/intro/getting-started.md), [Usage](./docs/config/usage.md) and [Tutorials](./docs/config/Tutorials.md).
|
||||||
|
|
||||||
In our release process we rely heavily on visual regression tests using [applitools](https://applitools.com/). Applitools is a great service which has been easy to use and integrate with our tests.
|
In our release process we rely heavily on visual regression tests using [applitools](https://applitools.com/). Applitools is a great service which has been easy to use and integrate with our tests.
|
||||||
|
|
||||||
@ -386,7 +386,7 @@ Update version number in `package.json`.
|
|||||||
npm publish
|
npm publish
|
||||||
```
|
```
|
||||||
|
|
||||||
The above command generates files into the `dist` folder and publishes them to npmjs.org.
|
The above command generates files into the `dist` folder and publishes them to <https://www.npmjs.com>.
|
||||||
|
|
||||||
## Related projects
|
## Related projects
|
||||||
|
|
||||||
@ -402,7 +402,7 @@ Detailed information about how to contribute can be found in the [contribution g
|
|||||||
|
|
||||||
## Security and safe diagrams
|
## Security and safe diagrams
|
||||||
|
|
||||||
For public sites, it can be precarious to retrieve text from users on the internet, storing that content for presentation in a browser at a later stage. The reason is that the user content can contain embedded malicious scripts that will run when the data is presented. For Mermaid this is a risk, specially as mermaid diagrams contain many characters that are used in html which makes the standard sanitation unusable as it also breaks the diagrams. We still make an effort to sanitise the incoming code and keep refining the process but it is hard to guarantee that there are no loop holes.
|
For public sites, it can be precarious to retrieve text from users on the internet, storing that content for presentation in a browser at a later stage. The reason is that the user content can contain embedded malicious scripts that will run when the data is presented. For Mermaid this is a risk, specially as mermaid diagrams contain many characters that are used in html which makes the standard sanitation unusable as it also breaks the diagrams. We still make an effort to sanitize the incoming code and keep refining the process but it is hard to guarantee that there are no loop holes.
|
||||||
|
|
||||||
As an extra level of security for sites with external users we are happy to introduce a new security level in which the diagram is rendered in a sandboxed iframe preventing javascript in the code from being executed. This is a great step forward for better security.
|
As an extra level of security for sites with external users we are happy to introduce a new security level in which the diagram is rendered in a sandboxed iframe preventing javascript in the code from being executed. This is a great step forward for better security.
|
||||||
|
|
||||||
|
@ -55,7 +55,7 @@ Mermaid 通过允许用户创建便于修改的图表来解决这一难题,它
|
|||||||
Mermaid 甚至能让非程序员也能通过 [Mermaid Live Editor](https://mermaid.live/) 轻松创建详细的图表。<br/>
|
Mermaid 甚至能让非程序员也能通过 [Mermaid Live Editor](https://mermaid.live/) 轻松创建详细的图表。<br/>
|
||||||
你可以访问 [教程](./docs/config/Tutorials.md) 来查看 Live Editor 的视频教程,也可以查看 [Mermaid 的集成和使用](./docs/ecosystem/integrations.md) 这个清单来检查你的文档工具是否已经集成了 Mermaid 支持。
|
你可以访问 [教程](./docs/config/Tutorials.md) 来查看 Live Editor 的视频教程,也可以查看 [Mermaid 的集成和使用](./docs/ecosystem/integrations.md) 这个清单来检查你的文档工具是否已经集成了 Mermaid 支持。
|
||||||
|
|
||||||
如果想要查看关于 Mermaid 更详细的介绍及基础使用方式,可以查看 [入门指引](./docs/community/n00b-overview.md), [用法](./docs/config/usage.md) 和 [教程](./docs/config/Tutorials.md).
|
如果想要查看关于 Mermaid 更详细的介绍及基础使用方式,可以查看 [入门指引](./docs/intro/getting-started.md), [用法](./docs/config/usage.md) 和 [教程](./docs/config/Tutorials.md).
|
||||||
|
|
||||||
<!-- </Main description> -->
|
<!-- </Main description> -->
|
||||||
|
|
||||||
@ -322,7 +322,7 @@ Rel(SystemC, customerA, "Sends e-mails to")
|
|||||||
npm publish
|
npm publish
|
||||||
```
|
```
|
||||||
|
|
||||||
以上的命令会将文件打包到 `dist` 目录并发布至 npmjs.org.
|
以上的命令会将文件打包到 `dist` 目录并发布至 <https://www.npmjs.com>.
|
||||||
|
|
||||||
## 相关项目
|
## 相关项目
|
||||||
|
|
||||||
|
8
__mocks__/pieRenderer.ts
Normal file
8
__mocks__/pieRenderer.ts
Normal file
@ -0,0 +1,8 @@
|
|||||||
|
/**
|
||||||
|
* Mocked pie (picChart) diagram renderer
|
||||||
|
*/
|
||||||
|
import { vi } from 'vitest';
|
||||||
|
|
||||||
|
const draw = vi.fn().mockImplementation(() => '');
|
||||||
|
|
||||||
|
export const renderer = { draw };
|
@ -1,5 +1,5 @@
|
|||||||
/**
|
/**
|
||||||
* Mocked pie (picChart) diagram renderer
|
* Mocked Sankey diagram renderer
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import { vi } from 'vitest';
|
import { vi } from 'vitest';
|
21
cSpell.json
21
cSpell.json
@ -38,10 +38,16 @@
|
|||||||
"docsy",
|
"docsy",
|
||||||
"doku",
|
"doku",
|
||||||
"dompurify",
|
"dompurify",
|
||||||
|
"dont",
|
||||||
|
"doublecircle",
|
||||||
"edgechromium",
|
"edgechromium",
|
||||||
|
"elems",
|
||||||
"elkjs",
|
"elkjs",
|
||||||
|
"elle",
|
||||||
"faber",
|
"faber",
|
||||||
"flatmap",
|
"flatmap",
|
||||||
|
"foswiki",
|
||||||
|
"frontmatter",
|
||||||
"ftplugin",
|
"ftplugin",
|
||||||
"gantt",
|
"gantt",
|
||||||
"gitea",
|
"gitea",
|
||||||
@ -51,6 +57,7 @@
|
|||||||
"graphviz",
|
"graphviz",
|
||||||
"grav",
|
"grav",
|
||||||
"greywolf",
|
"greywolf",
|
||||||
|
"gzipped",
|
||||||
"huynh",
|
"huynh",
|
||||||
"huynhicode",
|
"huynhicode",
|
||||||
"inkdrop",
|
"inkdrop",
|
||||||
@ -84,7 +91,11 @@
|
|||||||
"mkdocs",
|
"mkdocs",
|
||||||
"mmorel",
|
"mmorel",
|
||||||
"mult",
|
"mult",
|
||||||
|
"neurodiverse",
|
||||||
"nextra",
|
"nextra",
|
||||||
|
"nikolay",
|
||||||
|
"nirname",
|
||||||
|
"npmjs",
|
||||||
"orlandoni",
|
"orlandoni",
|
||||||
"pathe",
|
"pathe",
|
||||||
"pbrolin",
|
"pbrolin",
|
||||||
@ -98,10 +109,14 @@
|
|||||||
"ranksep",
|
"ranksep",
|
||||||
"rect",
|
"rect",
|
||||||
"rects",
|
"rects",
|
||||||
|
"reda",
|
||||||
"redmine",
|
"redmine",
|
||||||
|
"regexes",
|
||||||
"rehype",
|
"rehype",
|
||||||
"roledescription",
|
"roledescription",
|
||||||
|
"rozhkov",
|
||||||
"sandboxed",
|
"sandboxed",
|
||||||
|
"sankey",
|
||||||
"setupgraphviewbox",
|
"setupgraphviewbox",
|
||||||
"shiki",
|
"shiki",
|
||||||
"sidharth",
|
"sidharth",
|
||||||
@ -116,6 +131,7 @@
|
|||||||
"stylis",
|
"stylis",
|
||||||
"subhash-halder",
|
"subhash-halder",
|
||||||
"substate",
|
"substate",
|
||||||
|
"sulais",
|
||||||
"sveidqvist",
|
"sveidqvist",
|
||||||
"swimm",
|
"swimm",
|
||||||
"techn",
|
"techn",
|
||||||
@ -126,6 +142,7 @@
|
|||||||
"tsdoc",
|
"tsdoc",
|
||||||
"tuleap",
|
"tuleap",
|
||||||
"tylerlong",
|
"tylerlong",
|
||||||
|
"typora",
|
||||||
"ugge",
|
"ugge",
|
||||||
"unist",
|
"unist",
|
||||||
"unocss",
|
"unocss",
|
||||||
@ -139,7 +156,9 @@
|
|||||||
"vueuse",
|
"vueuse",
|
||||||
"xlink",
|
"xlink",
|
||||||
"yash",
|
"yash",
|
||||||
"zenuml"
|
"yokozuna",
|
||||||
|
"zenuml",
|
||||||
|
"zune"
|
||||||
],
|
],
|
||||||
"patterns": [
|
"patterns": [
|
||||||
{ "name": "Markdown links", "pattern": "\\((.*)\\)", "description": "" },
|
{ "name": "Markdown links", "pattern": "\\((.*)\\)", "description": "" },
|
||||||
|
@ -1,93 +0,0 @@
|
|||||||
const utf8ToB64 = (str) => {
|
|
||||||
return window.btoa(unescape(encodeURIComponent(str)));
|
|
||||||
};
|
|
||||||
|
|
||||||
const batchId = 'mermaid-batch' + new Date().getTime();
|
|
||||||
|
|
||||||
export const mermaidUrl = (graphStr, options, api) => {
|
|
||||||
const obj = {
|
|
||||||
code: graphStr,
|
|
||||||
mermaid: options,
|
|
||||||
};
|
|
||||||
const objStr = JSON.stringify(obj);
|
|
||||||
let url = 'http://localhost:9000/e2e.html?graph=' + utf8ToB64(objStr);
|
|
||||||
if (api) {
|
|
||||||
url = 'http://localhost:9000/xss.html?graph=' + graphStr;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (options.listUrl) {
|
|
||||||
cy.log(options.listId, ' ', url);
|
|
||||||
}
|
|
||||||
|
|
||||||
return url;
|
|
||||||
};
|
|
||||||
|
|
||||||
export const imgSnapshotTest = (graphStr, _options = {}, api = false, validation = undefined) => {
|
|
||||||
cy.log(_options);
|
|
||||||
const options = Object.assign(_options);
|
|
||||||
if (!options.fontFamily) {
|
|
||||||
options.fontFamily = 'courier';
|
|
||||||
}
|
|
||||||
if (!options.sequence) {
|
|
||||||
options.sequence = {};
|
|
||||||
}
|
|
||||||
if (!options.sequence || (options.sequence && !options.sequence.actorFontFamily)) {
|
|
||||||
options.sequence.actorFontFamily = 'courier';
|
|
||||||
}
|
|
||||||
if (options.sequence && !options.sequence.noteFontFamily) {
|
|
||||||
options.sequence.noteFontFamily = 'courier';
|
|
||||||
}
|
|
||||||
options.sequence.actorFontFamily = 'courier';
|
|
||||||
options.sequence.noteFontFamily = 'courier';
|
|
||||||
options.sequence.messageFontFamily = 'courier';
|
|
||||||
if (options.sequence && !options.sequence.actorFontFamily) {
|
|
||||||
options.sequence.actorFontFamily = 'courier';
|
|
||||||
}
|
|
||||||
if (!options.fontSize) {
|
|
||||||
options.fontSize = '16px';
|
|
||||||
}
|
|
||||||
const url = mermaidUrl(graphStr, options, api);
|
|
||||||
openURLAndVerifyRendering(url, options, validation);
|
|
||||||
};
|
|
||||||
|
|
||||||
export const urlSnapshotTest = (url, _options, api = false, validation) => {
|
|
||||||
const options = Object.assign(_options);
|
|
||||||
openURLAndVerifyRendering(url, options, validation);
|
|
||||||
};
|
|
||||||
|
|
||||||
export const renderGraph = (graphStr, options, api) => {
|
|
||||||
const url = mermaidUrl(graphStr, options, api);
|
|
||||||
openURLAndVerifyRendering(url, options);
|
|
||||||
};
|
|
||||||
|
|
||||||
export const openURLAndVerifyRendering = (url, options, validation = undefined) => {
|
|
||||||
const useAppli = Cypress.env('useAppli');
|
|
||||||
const name = (options.name || cy.state('runnable').fullTitle()).replace(/\s+/g, '-');
|
|
||||||
|
|
||||||
if (useAppli) {
|
|
||||||
cy.log('Opening eyes ' + Cypress.spec.name + ' --- ' + name);
|
|
||||||
cy.eyesOpen({
|
|
||||||
appName: 'Mermaid',
|
|
||||||
testName: name,
|
|
||||||
batchName: Cypress.spec.name,
|
|
||||||
batchId: batchId + Cypress.spec.name,
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
cy.visit(url);
|
|
||||||
cy.window().should('have.property', 'rendered', true);
|
|
||||||
cy.get('svg').should('be.visible');
|
|
||||||
|
|
||||||
if (validation) {
|
|
||||||
cy.get('svg').should(validation);
|
|
||||||
}
|
|
||||||
|
|
||||||
if (useAppli) {
|
|
||||||
cy.log('Check eyes' + Cypress.spec.name);
|
|
||||||
cy.eyesCheckWindow('Click!');
|
|
||||||
cy.log('Closing eyes' + Cypress.spec.name);
|
|
||||||
cy.eyesClose();
|
|
||||||
} else {
|
|
||||||
cy.matchImageSnapshot(name);
|
|
||||||
}
|
|
||||||
};
|
|
136
cypress/helpers/util.ts
Normal file
136
cypress/helpers/util.ts
Normal file
@ -0,0 +1,136 @@
|
|||||||
|
/* eslint-disable @typescript-eslint/no-explicit-any */
|
||||||
|
import { Buffer } from 'buffer';
|
||||||
|
import type { MermaidConfig } from '../../packages/mermaid/src/config.type.js';
|
||||||
|
|
||||||
|
interface CypressConfig {
|
||||||
|
listUrl?: boolean;
|
||||||
|
listId?: string;
|
||||||
|
name?: string;
|
||||||
|
}
|
||||||
|
type CypressMermaidConfig = MermaidConfig & CypressConfig;
|
||||||
|
|
||||||
|
interface CodeObject {
|
||||||
|
code: string;
|
||||||
|
mermaid: CypressMermaidConfig;
|
||||||
|
}
|
||||||
|
|
||||||
|
const utf8ToB64 = (str: string): string => {
|
||||||
|
return Buffer.from(decodeURIComponent(encodeURIComponent(str))).toString('base64');
|
||||||
|
};
|
||||||
|
|
||||||
|
const batchId: string =
|
||||||
|
'mermaid-batch-' +
|
||||||
|
(Cypress.env('useAppli')
|
||||||
|
? Date.now().toString()
|
||||||
|
: Cypress.env('CYPRESS_COMMIT') || Date.now().toString());
|
||||||
|
|
||||||
|
export const mermaidUrl = (
|
||||||
|
graphStr: string,
|
||||||
|
options: CypressMermaidConfig,
|
||||||
|
api: boolean
|
||||||
|
): string => {
|
||||||
|
const codeObject: CodeObject = {
|
||||||
|
code: graphStr,
|
||||||
|
mermaid: options,
|
||||||
|
};
|
||||||
|
const objStr: string = JSON.stringify(codeObject);
|
||||||
|
let url = `http://localhost:9000/e2e.html?graph=${utf8ToB64(objStr)}`;
|
||||||
|
if (api) {
|
||||||
|
url = `http://localhost:9000/xss.html?graph=${graphStr}`;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (options.listUrl) {
|
||||||
|
cy.log(options.listId, ' ', url);
|
||||||
|
}
|
||||||
|
|
||||||
|
return url;
|
||||||
|
};
|
||||||
|
|
||||||
|
export const imgSnapshotTest = (
|
||||||
|
graphStr: string,
|
||||||
|
_options: CypressMermaidConfig = {},
|
||||||
|
api = false,
|
||||||
|
validation?: any
|
||||||
|
): void => {
|
||||||
|
cy.log(JSON.stringify(_options));
|
||||||
|
const options: CypressMermaidConfig = Object.assign(_options);
|
||||||
|
if (!options.fontFamily) {
|
||||||
|
options.fontFamily = 'courier';
|
||||||
|
}
|
||||||
|
if (!options.sequence) {
|
||||||
|
options.sequence = {};
|
||||||
|
}
|
||||||
|
if (!options.sequence || (options.sequence && !options.sequence.actorFontFamily)) {
|
||||||
|
options.sequence.actorFontFamily = 'courier';
|
||||||
|
}
|
||||||
|
if (options.sequence && !options.sequence.noteFontFamily) {
|
||||||
|
options.sequence.noteFontFamily = 'courier';
|
||||||
|
}
|
||||||
|
options.sequence.actorFontFamily = 'courier';
|
||||||
|
options.sequence.noteFontFamily = 'courier';
|
||||||
|
options.sequence.messageFontFamily = 'courier';
|
||||||
|
if (options.sequence && !options.sequence.actorFontFamily) {
|
||||||
|
options.sequence.actorFontFamily = 'courier';
|
||||||
|
}
|
||||||
|
if (!options.fontSize) {
|
||||||
|
options.fontSize = 16;
|
||||||
|
}
|
||||||
|
|
||||||
|
const url: string = mermaidUrl(graphStr, options, api);
|
||||||
|
openURLAndVerifyRendering(url, options, validation);
|
||||||
|
};
|
||||||
|
|
||||||
|
export const urlSnapshotTest = (
|
||||||
|
url: string,
|
||||||
|
_options: CypressMermaidConfig,
|
||||||
|
_api = false,
|
||||||
|
validation?: any
|
||||||
|
): void => {
|
||||||
|
const options: CypressMermaidConfig = Object.assign(_options);
|
||||||
|
openURLAndVerifyRendering(url, options, validation);
|
||||||
|
};
|
||||||
|
|
||||||
|
export const renderGraph = (
|
||||||
|
graphStr: string,
|
||||||
|
options: CypressMermaidConfig = {},
|
||||||
|
api = false
|
||||||
|
): void => {
|
||||||
|
const url: string = mermaidUrl(graphStr, options, api);
|
||||||
|
openURLAndVerifyRendering(url, options);
|
||||||
|
};
|
||||||
|
|
||||||
|
export const openURLAndVerifyRendering = (
|
||||||
|
url: string,
|
||||||
|
options: CypressMermaidConfig,
|
||||||
|
validation?: any
|
||||||
|
): void => {
|
||||||
|
const useAppli: boolean = Cypress.env('useAppli');
|
||||||
|
const name: string = (options.name || cy.state('runnable').fullTitle()).replace(/\s+/g, '-');
|
||||||
|
|
||||||
|
if (useAppli) {
|
||||||
|
cy.log(`Opening eyes ${Cypress.spec.name} --- ${name}`);
|
||||||
|
cy.eyesOpen({
|
||||||
|
appName: 'Mermaid',
|
||||||
|
testName: name,
|
||||||
|
batchName: Cypress.spec.name,
|
||||||
|
batchId: batchId + Cypress.spec.name,
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
cy.visit(url);
|
||||||
|
cy.window().should('have.property', 'rendered', true);
|
||||||
|
cy.get('svg').should('be.visible');
|
||||||
|
|
||||||
|
if (validation) {
|
||||||
|
cy.get('svg').should(validation);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (useAppli) {
|
||||||
|
cy.log(`Check eyes ${Cypress.spec.name}`);
|
||||||
|
cy.eyesCheckWindow('Click!');
|
||||||
|
cy.log(`Closing eyes ${Cypress.spec.name}`);
|
||||||
|
cy.eyesClose();
|
||||||
|
} else {
|
||||||
|
cy.matchImageSnapshot(name);
|
||||||
|
}
|
||||||
|
};
|
@ -1,4 +1,4 @@
|
|||||||
import { renderGraph } from '../../helpers/util.js';
|
import { renderGraph } from '../../helpers/util.ts';
|
||||||
describe('Configuration', () => {
|
describe('Configuration', () => {
|
||||||
describe('arrowMarkerAbsolute', () => {
|
describe('arrowMarkerAbsolute', () => {
|
||||||
it('should handle default value false of arrowMarkerAbsolute', () => {
|
it('should handle default value false of arrowMarkerAbsolute', () => {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { urlSnapshotTest } from '../../helpers/util.js';
|
import { urlSnapshotTest } from '../../helpers/util.ts';
|
||||||
|
|
||||||
describe('mermaid', () => {
|
describe('mermaid', () => {
|
||||||
describe('registerDiagram', () => {
|
describe('registerDiagram', () => {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { urlSnapshotTest, openURLAndVerifyRendering } from '../../helpers/util.js';
|
import { urlSnapshotTest, openURLAndVerifyRendering } from '../../helpers/util.ts';
|
||||||
|
|
||||||
describe('CSS injections', () => {
|
describe('CSS injections', () => {
|
||||||
it('should not allow CSS injections outside of the diagram', () => {
|
it('should not allow CSS injections outside of the diagram', () => {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { mermaidUrl } from '../../helpers/util.js';
|
import { mermaidUrl } from '../../helpers/util.ts';
|
||||||
describe('XSS', () => {
|
describe('XSS', () => {
|
||||||
it('should handle xss in tags', () => {
|
it('should handle xss in tags', () => {
|
||||||
const str =
|
const str =
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { imgSnapshotTest } from '../../helpers/util.js';
|
import { imgSnapshotTest } from '../../helpers/util.ts';
|
||||||
|
|
||||||
describe('Git Graph diagram', () => {
|
describe('Git Graph diagram', () => {
|
||||||
it('1: should render a simple gitgraph with commit on main branch', () => {
|
it('1: should render a simple gitgraph with commit on main branch', () => {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.js';
|
import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts';
|
||||||
|
|
||||||
describe('C4 diagram', () => {
|
describe('C4 diagram', () => {
|
||||||
it('should render a simple C4Context diagram', () => {
|
it('should render a simple C4Context diagram', () => {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { imgSnapshotTest } from '../../helpers/util.js';
|
import { imgSnapshotTest } from '../../helpers/util.ts';
|
||||||
describe('Class diagram V2', () => {
|
describe('Class diagram V2', () => {
|
||||||
it('0: should render a simple class diagram', () => {
|
it('0: should render a simple class diagram', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
@ -386,30 +386,6 @@ describe('Class diagram V2', () => {
|
|||||||
{ logLevel: 1, flowchart: { htmlLabels: false } }
|
{ logLevel: 1, flowchart: { htmlLabels: false } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('18: should handle the direction statement with LR', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
classDiagram
|
|
||||||
direction LR
|
|
||||||
class Student {
|
|
||||||
-idCard : IdCard
|
|
||||||
}
|
|
||||||
class IdCard{
|
|
||||||
-id : int
|
|
||||||
-name : string
|
|
||||||
}
|
|
||||||
class Bike{
|
|
||||||
-id : int
|
|
||||||
-name : string
|
|
||||||
}
|
|
||||||
Student "1" --o "1" IdCard : carries
|
|
||||||
Student "1" --o "1" Bike : rides
|
|
||||||
|
|
||||||
`,
|
|
||||||
{ logLevel: 1, flowchart: { htmlLabels: false } }
|
|
||||||
);
|
|
||||||
});
|
|
||||||
it('17a: should handle the direction statement with BT', () => {
|
it('17a: should handle the direction statement with BT', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
@ -457,7 +433,31 @@ describe('Class diagram V2', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('18: should render a simple class diagram with notes', () => {
|
it('18a: should handle the direction statement with LR', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
classDiagram
|
||||||
|
direction LR
|
||||||
|
class Student {
|
||||||
|
-idCard : IdCard
|
||||||
|
}
|
||||||
|
class IdCard{
|
||||||
|
-id : int
|
||||||
|
-name : string
|
||||||
|
}
|
||||||
|
class Bike{
|
||||||
|
-id : int
|
||||||
|
-name : string
|
||||||
|
}
|
||||||
|
Student "1" --o "1" IdCard : carries
|
||||||
|
Student "1" --o "1" Bike : rides
|
||||||
|
|
||||||
|
`,
|
||||||
|
{ logLevel: 1, flowchart: { htmlLabels: false } }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('18b: should render a simple class diagram with notes', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
classDiagram-v2
|
classDiagram-v2
|
||||||
@ -562,4 +562,13 @@ class C13["With Città foreign language"]
|
|||||||
`
|
`
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
it('should render a simple class diagram with no members', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
classDiagram-v2
|
||||||
|
class Class10
|
||||||
|
`,
|
||||||
|
{ logLevel: 1, flowchart: { htmlLabels: false } }
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.js';
|
import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts';
|
||||||
|
|
||||||
describe('Class diagram', () => {
|
describe('Class diagram', () => {
|
||||||
it('1: should render a simple class diagram', () => {
|
it('1: should render a simple class diagram', () => {
|
||||||
@ -423,4 +423,82 @@ describe('Class diagram', () => {
|
|||||||
);
|
);
|
||||||
cy.get('svg');
|
cy.get('svg');
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should render class diagram with newlines in title', () => {
|
||||||
|
imgSnapshotTest(`
|
||||||
|
classDiagram
|
||||||
|
Animal <|-- \`Du\nck\`
|
||||||
|
Animal : +int age
|
||||||
|
Animal : +String gender
|
||||||
|
Animal: +isMammal()
|
||||||
|
Animal: +mate()
|
||||||
|
class \`Du\nck\` {
|
||||||
|
+String beakColor
|
||||||
|
+String featherColor
|
||||||
|
+swim()
|
||||||
|
+quack()
|
||||||
|
}
|
||||||
|
`);
|
||||||
|
cy.get('svg');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render class diagram with many newlines in title', () => {
|
||||||
|
imgSnapshotTest(`
|
||||||
|
classDiagram
|
||||||
|
class \`This\nTitle\nHas\nMany\nNewlines\` {
|
||||||
|
+String Also
|
||||||
|
-Stirng Many
|
||||||
|
#int Members
|
||||||
|
+And()
|
||||||
|
-Many()
|
||||||
|
#Methods()
|
||||||
|
}
|
||||||
|
`);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render with newlines in title and an annotation', () => {
|
||||||
|
imgSnapshotTest(`
|
||||||
|
classDiagram
|
||||||
|
class \`This\nTitle\nHas\nMany\nNewlines\` {
|
||||||
|
+String Also
|
||||||
|
-Stirng Many
|
||||||
|
#int Members
|
||||||
|
+And()
|
||||||
|
-Many()
|
||||||
|
#Methods()
|
||||||
|
}
|
||||||
|
<<Interface>> \`This\nTitle\nHas\nMany\nNewlines\`
|
||||||
|
`);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should handle newline title in namespace', () => {
|
||||||
|
imgSnapshotTest(`
|
||||||
|
classDiagram
|
||||||
|
namespace testingNamespace {
|
||||||
|
class \`This\nTitle\nHas\nMany\nNewlines\` {
|
||||||
|
+String Also
|
||||||
|
-Stirng Many
|
||||||
|
#int Members
|
||||||
|
+And()
|
||||||
|
-Many()
|
||||||
|
#Methods()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
`);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should handle newline in string label', () => {
|
||||||
|
imgSnapshotTest(`
|
||||||
|
classDiagram
|
||||||
|
class A["This has\na newline!"] {
|
||||||
|
+String boop
|
||||||
|
-Int beep
|
||||||
|
#double bop
|
||||||
|
}
|
||||||
|
|
||||||
|
class B["This title also has\na newline"]
|
||||||
|
B : +with(more)
|
||||||
|
B : -methods()
|
||||||
|
`);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { imgSnapshotTest } from '../../helpers/util.js';
|
import { imgSnapshotTest } from '../../helpers/util.ts';
|
||||||
|
|
||||||
describe('Configuration and directives - nodes should be light blue', () => {
|
describe('Configuration and directives - nodes should be light blue', () => {
|
||||||
it('No config - use default', () => {
|
it('No config - use default', () => {
|
||||||
@ -14,7 +14,6 @@ describe('Configuration and directives - nodes should be light blue', () => {
|
|||||||
`,
|
`,
|
||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
cy.get('svg');
|
|
||||||
});
|
});
|
||||||
it('Settings from initialize - nodes should be green', () => {
|
it('Settings from initialize - nodes should be green', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
@ -28,7 +27,6 @@ graph TD
|
|||||||
end `,
|
end `,
|
||||||
{ theme: 'forest' }
|
{ theme: 'forest' }
|
||||||
);
|
);
|
||||||
cy.get('svg');
|
|
||||||
});
|
});
|
||||||
it('Settings from initialize overriding themeVariable - nodes should be red', () => {
|
it('Settings from initialize overriding themeVariable - nodes should be red', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
@ -46,7 +44,6 @@ graph TD
|
|||||||
`,
|
`,
|
||||||
{ theme: 'base', themeVariables: { primaryColor: '#ff0000' }, logLevel: 0 }
|
{ theme: 'base', themeVariables: { primaryColor: '#ff0000' }, logLevel: 0 }
|
||||||
);
|
);
|
||||||
cy.get('svg');
|
|
||||||
});
|
});
|
||||||
it('Settings from directive - nodes should be grey', () => {
|
it('Settings from directive - nodes should be grey', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
@ -62,7 +59,24 @@ graph TD
|
|||||||
`,
|
`,
|
||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
cy.get('svg');
|
});
|
||||||
|
it('Settings from frontmatter - nodes should be grey', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
theme: neutral
|
||||||
|
---
|
||||||
|
graph TD
|
||||||
|
A(Start) --> B[/Another/]
|
||||||
|
A[/Another/] --> C[End]
|
||||||
|
subgraph section
|
||||||
|
B
|
||||||
|
C
|
||||||
|
end
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
it('Settings from directive overriding theme variable - nodes should be red', () => {
|
it('Settings from directive overriding theme variable - nodes should be red', () => {
|
||||||
@ -79,7 +93,6 @@ graph TD
|
|||||||
`,
|
`,
|
||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
cy.get('svg');
|
|
||||||
});
|
});
|
||||||
it('Settings from initialize and directive - nodes should be grey', () => {
|
it('Settings from initialize and directive - nodes should be grey', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
@ -95,7 +108,6 @@ graph TD
|
|||||||
`,
|
`,
|
||||||
{ theme: 'forest' }
|
{ theme: 'forest' }
|
||||||
);
|
);
|
||||||
cy.get('svg');
|
|
||||||
});
|
});
|
||||||
it('Theme from initialize, directive overriding theme variable - nodes should be red', () => {
|
it('Theme from initialize, directive overriding theme variable - nodes should be red', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
@ -111,8 +123,71 @@ graph TD
|
|||||||
`,
|
`,
|
||||||
{ theme: 'base' }
|
{ theme: 'base' }
|
||||||
);
|
);
|
||||||
cy.get('svg');
|
|
||||||
});
|
});
|
||||||
|
it('Theme from initialize, frontmatter overriding theme variable - nodes should be red', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
theme: base
|
||||||
|
themeVariables:
|
||||||
|
primaryColor: '#ff0000'
|
||||||
|
---
|
||||||
|
graph TD
|
||||||
|
A(Start) --> B[/Another/]
|
||||||
|
A[/Another/] --> C[End]
|
||||||
|
subgraph section
|
||||||
|
B
|
||||||
|
C
|
||||||
|
end
|
||||||
|
`,
|
||||||
|
{ theme: 'forest' }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('Theme from initialize, frontmatter overriding theme variable, directive overriding primaryColor - nodes should be red', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
theme: base
|
||||||
|
themeVariables:
|
||||||
|
primaryColor: '#00ff00'
|
||||||
|
---
|
||||||
|
%%{init: {'theme': 'base', 'themeVariables':{ 'primaryColor': '#ff0000'}}}%%
|
||||||
|
graph TD
|
||||||
|
A(Start) --> B[/Another/]
|
||||||
|
A[/Another/] --> C[End]
|
||||||
|
subgraph section
|
||||||
|
B
|
||||||
|
C
|
||||||
|
end
|
||||||
|
`,
|
||||||
|
{ theme: 'forest' }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should render if values are not quoted properly', () => {
|
||||||
|
// #ff0000 is not quoted properly, and will evaluate to null.
|
||||||
|
// This test ensures that the rendering still works.
|
||||||
|
imgSnapshotTest(
|
||||||
|
`---
|
||||||
|
config:
|
||||||
|
theme: base
|
||||||
|
themeVariables:
|
||||||
|
primaryColor: #ff0000
|
||||||
|
---
|
||||||
|
graph TD
|
||||||
|
A(Start) --> B[/Another/]
|
||||||
|
A[/Another/] --> C[End]
|
||||||
|
subgraph section
|
||||||
|
B
|
||||||
|
C
|
||||||
|
end
|
||||||
|
`,
|
||||||
|
{ theme: 'forest' }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
it('Theme variable from initialize, theme from directive - nodes should be red', () => {
|
it('Theme variable from initialize, theme from directive - nodes should be red', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
@ -127,13 +202,11 @@ graph TD
|
|||||||
`,
|
`,
|
||||||
{ themeVariables: { primaryColor: '#ff0000' } }
|
{ themeVariables: { primaryColor: '#ff0000' } }
|
||||||
);
|
);
|
||||||
cy.get('svg');
|
|
||||||
});
|
});
|
||||||
describe('when rendering several diagrams', () => {
|
describe('when rendering several diagrams', () => {
|
||||||
it('diagrams should not taint later diagrams', () => {
|
it('diagrams should not taint later diagrams', () => {
|
||||||
const url = 'http://localhost:9000/theme-directives.html';
|
const url = 'http://localhost:9000/theme-directives.html';
|
||||||
cy.visit(url);
|
cy.visit(url);
|
||||||
cy.get('svg');
|
|
||||||
cy.matchImageSnapshot('conf-and-directives.spec-when-rendering-several-diagrams-diagram-1');
|
cy.matchImageSnapshot('conf-and-directives.spec-when-rendering-several-diagrams-diagram-1');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { imgSnapshotTest } from '../../helpers/util.js';
|
import { imgSnapshotTest } from '../../helpers/util.ts';
|
||||||
|
|
||||||
describe('Current diagram', () => {
|
describe('Current diagram', () => {
|
||||||
it('should render a state with states in it', () => {
|
it('should render a state with states in it', () => {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { imgSnapshotTest } from '../../helpers/util.js';
|
import { imgSnapshotTest } from '../../helpers/util.ts';
|
||||||
|
|
||||||
describe('Flowchart', () => {
|
describe('Flowchart', () => {
|
||||||
it('34: testing the label width in percy', () => {
|
it('34: testing the label width in percy', () => {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.js';
|
import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts';
|
||||||
|
|
||||||
describe('Entity Relationship Diagram', () => {
|
describe('Entity Relationship Diagram', () => {
|
||||||
it('should render a simple ER diagram', () => {
|
it('should render a simple ER diagram', () => {
|
||||||
@ -200,6 +200,27 @@ describe('Entity Relationship Diagram', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should render entities with attributes that begin with asterisk', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
erDiagram
|
||||||
|
BOOK {
|
||||||
|
int *id
|
||||||
|
string name
|
||||||
|
varchar(99) summary
|
||||||
|
}
|
||||||
|
BOOK }o..o{ STORE : soldBy
|
||||||
|
STORE {
|
||||||
|
int *id
|
||||||
|
string name
|
||||||
|
varchar(50) address
|
||||||
|
}
|
||||||
|
`,
|
||||||
|
{ loglevel: 1 }
|
||||||
|
);
|
||||||
|
cy.get('svg');
|
||||||
|
});
|
||||||
|
|
||||||
it('should render entities with keys', () => {
|
it('should render entities with keys', () => {
|
||||||
renderGraph(
|
renderGraph(
|
||||||
`
|
`
|
||||||
@ -284,4 +305,21 @@ ORDER ||--|{ LINE-ITEM : contains
|
|||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should render entities with entity name aliases', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
erDiagram
|
||||||
|
p[Person] {
|
||||||
|
varchar(64) firstName
|
||||||
|
varchar(64) lastName
|
||||||
|
}
|
||||||
|
c["Customer Account"] {
|
||||||
|
varchar(128) email
|
||||||
|
}
|
||||||
|
p ||--o| c : has
|
||||||
|
`,
|
||||||
|
{ logLevel: 1 }
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.js';
|
import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts';
|
||||||
|
|
||||||
describe.skip('Flowchart ELK', () => {
|
describe.skip('Flowchart ELK', () => {
|
||||||
it('1-elk: should render a simple flowchart', () => {
|
it('1-elk: should render a simple flowchart', () => {
|
||||||
@ -681,7 +681,7 @@ title: Simple flowchart
|
|||||||
flowchart-elk TD
|
flowchart-elk TD
|
||||||
A --> B
|
A --> B
|
||||||
`,
|
`,
|
||||||
{ titleTopMargin: 0 }
|
{ flowchart: { titleTopMargin: 0 } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('elk: should include classes on the edges', () => {
|
it('elk: should include classes on the edges', () => {
|
||||||
@ -710,7 +710,7 @@ flowchart-elk LR
|
|||||||
style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5
|
style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5
|
||||||
classDef someclass fill:#f96
|
classDef someclass fill:#f96
|
||||||
`,
|
`,
|
||||||
{ titleTopMargin: 0 }
|
{ flowchart: { titleTopMargin: 0 } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('With formatting in a node', () => {
|
it('With formatting in a node', () => {
|
||||||
@ -726,7 +726,7 @@ flowchart-elk LR
|
|||||||
b --> d(The dog in the hog)
|
b --> d(The dog in the hog)
|
||||||
c --> d
|
c --> d
|
||||||
`,
|
`,
|
||||||
{ titleTopMargin: 0 }
|
{ flowchart: { titleTopMargin: 0 } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('New line in node and formatted edge label', () => {
|
it('New line in node and formatted edge label', () => {
|
||||||
@ -736,7 +736,7 @@ flowchart-elk LR
|
|||||||
b("\`The dog in **the** hog.(1)
|
b("\`The dog in **the** hog.(1)
|
||||||
NL\`") --"\`1o **bold**\`"--> c
|
NL\`") --"\`1o **bold**\`"--> c
|
||||||
`,
|
`,
|
||||||
{ titleTopMargin: 0 }
|
{ flowchart: { titleTopMargin: 0 } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('Wrapping long text with a new line', () => {
|
it('Wrapping long text with a new line', () => {
|
||||||
@ -749,7 +749,7 @@ Word!
|
|||||||
Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. \`) --> c
|
Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. \`) --> c
|
||||||
|
|
||||||
`,
|
`,
|
||||||
{ titleTopMargin: 0 }
|
{ flowchart: { titleTopMargin: 0 } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('Sub graphs and markdown strings', () => {
|
it('Sub graphs and markdown strings', () => {
|
||||||
@ -766,7 +766,7 @@ subgraph "\`**Two**\`"
|
|||||||
end
|
end
|
||||||
|
|
||||||
`,
|
`,
|
||||||
{ titleTopMargin: 0 }
|
{ flowchart: { titleTopMargin: 0 } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -782,7 +782,7 @@ flowchart-elk LR
|
|||||||
style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5
|
style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5
|
||||||
classDef someclass fill:#f96
|
classDef someclass fill:#f96
|
||||||
`,
|
`,
|
||||||
{ titleTopMargin: 0 }
|
{ flowchart: { titleTopMargin: 0 } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('With formatting in a node', () => {
|
it('With formatting in a node', () => {
|
||||||
@ -798,7 +798,7 @@ flowchart-elk LR
|
|||||||
b --> d(The dog in the hog)
|
b --> d(The dog in the hog)
|
||||||
c --> d
|
c --> d
|
||||||
`,
|
`,
|
||||||
{ titleTopMargin: 0 }
|
{ flowchart: { titleTopMargin: 0 } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('New line in node and formatted edge label', () => {
|
it('New line in node and formatted edge label', () => {
|
||||||
@ -808,7 +808,7 @@ flowchart-elk LR
|
|||||||
b("\`The dog in **the** hog.(1)
|
b("\`The dog in **the** hog.(1)
|
||||||
NL\`") --"\`1o **bold**\`"--> c
|
NL\`") --"\`1o **bold**\`"--> c
|
||||||
`,
|
`,
|
||||||
{ titleTopMargin: 0 }
|
{ flowchart: { titleTopMargin: 0 } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('Wrapping long text with a new line', () => {
|
it('Wrapping long text with a new line', () => {
|
||||||
@ -821,7 +821,7 @@ Word!
|
|||||||
Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. \`") --> c
|
Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. \`") --> c
|
||||||
|
|
||||||
`,
|
`,
|
||||||
{ titleTopMargin: 0 }
|
{ flowchart: { titleTopMargin: 0 } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('Sub graphs and markdown strings', () => {
|
it('Sub graphs and markdown strings', () => {
|
||||||
@ -838,7 +838,7 @@ subgraph "\`**Two**\`"
|
|||||||
end
|
end
|
||||||
|
|
||||||
`,
|
`,
|
||||||
{ titleTopMargin: 0 }
|
{ flowchart: { titleTopMargin: 0 } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.js';
|
import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts';
|
||||||
|
|
||||||
describe('Flowchart v2', () => {
|
describe('Flowchart v2', () => {
|
||||||
it('1: should render a simple flowchart', () => {
|
it('1: should render a simple flowchart', () => {
|
||||||
@ -449,7 +449,7 @@ flowchart TD
|
|||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('65: text-color from classes', () => {
|
it('65-1: text-color from classes', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
flowchart LR
|
flowchart LR
|
||||||
@ -460,6 +460,31 @@ flowchart TD
|
|||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
it('65-2: bold text from classes', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
flowchart
|
||||||
|
classDef cat fill:#f9d5e5, stroke:#233d4d,stroke-width:2px, font-weight:bold;
|
||||||
|
CS(A long bold text to be viewed):::cat
|
||||||
|
`,
|
||||||
|
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('65-3: bigger font from classes', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
flowchart
|
||||||
|
Node1:::class1 --> Node2:::class2
|
||||||
|
Node1:::class1 --> Node3:::class2
|
||||||
|
Node3 --> Node4((I am a circle)):::larger
|
||||||
|
|
||||||
|
classDef class1 fill:lightblue
|
||||||
|
classDef class2 fill:pink
|
||||||
|
classDef larger font-size:30px,fill:yellow
|
||||||
|
`,
|
||||||
|
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
||||||
|
);
|
||||||
|
});
|
||||||
it('66: More nested subgraph cases (TB)', () => {
|
it('66: More nested subgraph cases (TB)', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
@ -671,7 +696,7 @@ title: Simple flowchart
|
|||||||
flowchart TD
|
flowchart TD
|
||||||
A --> B
|
A --> B
|
||||||
`,
|
`,
|
||||||
{ titleTopMargin: 0 }
|
{ flowchart: { titleTopMargin: 10 } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('3192: It should be possieble to render flowcharts with invisible edges', () => {
|
it('3192: It should be possieble to render flowcharts with invisible edges', () => {
|
||||||
@ -682,7 +707,7 @@ title: Simple flowchart with invisible edges
|
|||||||
flowchart TD
|
flowchart TD
|
||||||
A ~~~ B
|
A ~~~ B
|
||||||
`,
|
`,
|
||||||
{ titleTopMargin: 0 }
|
{ flowchart: { titleTopMargin: 10 } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('4023: Should render html labels with images and-or text correctly', () => {
|
it('4023: Should render html labels with images and-or text correctly', () => {
|
||||||
@ -695,6 +720,15 @@ A ~~~ B
|
|||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('4439: Should render the graph even if some images are missing', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`flowchart TD
|
||||||
|
B[<img>]
|
||||||
|
B-->C[<img>]`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
describe('Markdown strings flowchart (#4220)', () => {
|
describe('Markdown strings flowchart (#4220)', () => {
|
||||||
describe('html labels', () => {
|
describe('html labels', () => {
|
||||||
it('With styling and classes', () => {
|
it('With styling and classes', () => {
|
||||||
@ -707,7 +741,7 @@ flowchart LR
|
|||||||
style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5
|
style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5
|
||||||
classDef someclass fill:#f96
|
classDef someclass fill:#f96
|
||||||
`,
|
`,
|
||||||
{ titleTopMargin: 0 }
|
{ flowchart: { titleTopMargin: 0 } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('With formatting in a node', () => {
|
it('With formatting in a node', () => {
|
||||||
@ -723,7 +757,7 @@ flowchart LR
|
|||||||
b --> d(The dog in the hog)
|
b --> d(The dog in the hog)
|
||||||
c --> d
|
c --> d
|
||||||
`,
|
`,
|
||||||
{ titleTopMargin: 0 }
|
{ flowchart: { titleTopMargin: 0 } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('New line in node and formatted edge label', () => {
|
it('New line in node and formatted edge label', () => {
|
||||||
@ -733,7 +767,7 @@ flowchart LR
|
|||||||
b("\`The dog in **the** hog.(1)
|
b("\`The dog in **the** hog.(1)
|
||||||
NL\`") --"\`1o **bold**\`"--> c
|
NL\`") --"\`1o **bold**\`"--> c
|
||||||
`,
|
`,
|
||||||
{ titleTopMargin: 0 }
|
{ flowchart: { titleTopMargin: 0 } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('Wrapping long text with a new line', () => {
|
it('Wrapping long text with a new line', () => {
|
||||||
@ -746,7 +780,7 @@ Word!
|
|||||||
Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. \`") --> c
|
Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. \`") --> c
|
||||||
|
|
||||||
`,
|
`,
|
||||||
{ titleTopMargin: 0 }
|
{ flowchart: { titleTopMargin: 0 } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('Sub graphs and markdown strings', () => {
|
it('Sub graphs and markdown strings', () => {
|
||||||
@ -763,7 +797,7 @@ subgraph "\`**Two**\`"
|
|||||||
end
|
end
|
||||||
|
|
||||||
`,
|
`,
|
||||||
{ titleTopMargin: 0 }
|
{ flowchart: { titleTopMargin: 0 } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
@ -779,7 +813,7 @@ flowchart LR
|
|||||||
style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5
|
style id2 fill:#bbf,stroke:#f66,stroke-width:2px,color:#fff,stroke-dasharray: 5 5
|
||||||
classDef someclass fill:#f96
|
classDef someclass fill:#f96
|
||||||
`,
|
`,
|
||||||
{ titleTopMargin: 0 }
|
{ flowchart: { titleTopMargin: 0 } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('With formatting in a node', () => {
|
it('With formatting in a node', () => {
|
||||||
@ -795,7 +829,7 @@ flowchart LR
|
|||||||
b --> d(The dog in the hog)
|
b --> d(The dog in the hog)
|
||||||
c --> d
|
c --> d
|
||||||
`,
|
`,
|
||||||
{ titleTopMargin: 0 }
|
{ flowchart: { titleTopMargin: 0 } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('New line in node and formatted edge label', () => {
|
it('New line in node and formatted edge label', () => {
|
||||||
@ -805,7 +839,7 @@ flowchart LR
|
|||||||
b("\`The dog in **the** hog.(1)
|
b("\`The dog in **the** hog.(1)
|
||||||
NL\`") --"\`1o **bold**\`"--> c
|
NL\`") --"\`1o **bold**\`"--> c
|
||||||
`,
|
`,
|
||||||
{ titleTopMargin: 0 }
|
{ flowchart: { titleTopMargin: 0 } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('Wrapping long text with a new line', () => {
|
it('Wrapping long text with a new line', () => {
|
||||||
@ -818,7 +852,7 @@ Word!
|
|||||||
Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. \`") --> c
|
Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. Another line with many, many words. \`") --> c
|
||||||
|
|
||||||
`,
|
`,
|
||||||
{ titleTopMargin: 0 }
|
{ flowchart: { titleTopMargin: 0 } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
it('Sub graphs and markdown strings', () => {
|
it('Sub graphs and markdown strings', () => {
|
||||||
@ -835,7 +869,7 @@ subgraph "\`**Two**\`"
|
|||||||
end
|
end
|
||||||
|
|
||||||
`,
|
`,
|
||||||
{ titleTopMargin: 0 }
|
{ flowchart: { titleTopMargin: 0 } }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.js';
|
import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts';
|
||||||
|
|
||||||
describe('Graph', () => {
|
describe('Graph', () => {
|
||||||
it('1: should render a simple flowchart no htmlLabels', () => {
|
it('1: should render a simple flowchart no htmlLabels', () => {
|
||||||
@ -891,4 +891,27 @@ graph TD
|
|||||||
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
it('66: apply class called default on node called default', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
graph TD
|
||||||
|
classDef default fill:#a34,stroke:#000,stroke-width:4px,color:#fff
|
||||||
|
hello --> default
|
||||||
|
`,
|
||||||
|
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
it('67: should be able to style default node independently', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
flowchart TD
|
||||||
|
classDef default fill:#a34
|
||||||
|
hello --> default
|
||||||
|
|
||||||
|
style default stroke:#000,stroke-width:4px
|
||||||
|
`,
|
||||||
|
{ htmlLabels: true, flowchart: { htmlLabels: true }, securityLevel: 'loose' }
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.js';
|
import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts';
|
||||||
|
|
||||||
describe('Gantt diagram', () => {
|
describe('Gantt diagram', () => {
|
||||||
beforeEach(() => {
|
beforeEach(() => {
|
||||||
@ -414,6 +414,28 @@ describe('Gantt diagram', () => {
|
|||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should render a gantt diagram with tick is 1 week, with the day starting on monday', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
gantt
|
||||||
|
title A Gantt Diagram
|
||||||
|
dateFormat YYYY-MM-DD
|
||||||
|
axisFormat %m-%d
|
||||||
|
tickInterval 1week
|
||||||
|
weekday monday
|
||||||
|
excludes weekends
|
||||||
|
|
||||||
|
section Section
|
||||||
|
A task : a1, 2022-10-01, 30d
|
||||||
|
Another task : after a1, 20d
|
||||||
|
section Another
|
||||||
|
Task in sec : 2022-10-20, 12d
|
||||||
|
another task : 24d
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
it('should render a gantt diagram with tick is 1 month', () => {
|
it('should render a gantt diagram with tick is 1 month', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { imgSnapshotTest } from '../../helpers/util.js';
|
import { imgSnapshotTest } from '../../helpers/util.ts';
|
||||||
|
|
||||||
describe('Git Graph diagram', () => {
|
describe('Git Graph diagram', () => {
|
||||||
it('1: should render a simple gitgraph with commit on main branch', () => {
|
it('1: should render a simple gitgraph with commit on main branch', () => {
|
||||||
@ -333,4 +333,372 @@ gitGraph
|
|||||||
{}
|
{}
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
it('15: should render a simple gitgraph with commit on main branch | Vertical Branch', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`gitGraph TB:
|
||||||
|
commit id: "1"
|
||||||
|
commit id: "2"
|
||||||
|
commit id: "3"
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('16: should render a simple gitgraph with commit on main branch with Id | Vertical Branch', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`gitGraph TB:
|
||||||
|
commit id: "One"
|
||||||
|
commit id: "Two"
|
||||||
|
commit id: "Three"
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('17: should render a simple gitgraph with different commitTypes on main branch | Vertical Branch', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`gitGraph TB:
|
||||||
|
commit id: "Normal Commit"
|
||||||
|
commit id: "Reverse Commit" type: REVERSE
|
||||||
|
commit id: "Hightlight Commit" type: HIGHLIGHT
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('18: should render a simple gitgraph with tags commitTypes on main branch | Vertical Branch', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`gitGraph TB:
|
||||||
|
commit id: "Normal Commit with tag" tag: "v1.0.0"
|
||||||
|
commit id: "Reverse Commit with tag" type: REVERSE tag: "RC_1"
|
||||||
|
commit id: "Hightlight Commit" type: HIGHLIGHT tag: "8.8.4"
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('19: should render a simple gitgraph with two branches | Vertical Branch', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`gitGraph TB:
|
||||||
|
commit id: "1"
|
||||||
|
commit id: "2"
|
||||||
|
branch develop
|
||||||
|
checkout develop
|
||||||
|
commit id: "3"
|
||||||
|
commit id: "4"
|
||||||
|
checkout main
|
||||||
|
commit id: "5"
|
||||||
|
commit id: "6"
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('20: should render a simple gitgraph with two branches and merge commit | Vertical Branch', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`gitGraph TB:
|
||||||
|
commit id: "1"
|
||||||
|
commit id: "2"
|
||||||
|
branch develop
|
||||||
|
checkout develop
|
||||||
|
commit id: "3"
|
||||||
|
commit id: "4"
|
||||||
|
checkout main
|
||||||
|
merge develop
|
||||||
|
commit id: "5"
|
||||||
|
commit id: "6"
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('21: should render a simple gitgraph with three branches and tagged merge commit | Vertical Branch', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`gitGraph TB:
|
||||||
|
commit id: "1"
|
||||||
|
commit id: "2"
|
||||||
|
branch nice_feature
|
||||||
|
checkout nice_feature
|
||||||
|
commit id: "3"
|
||||||
|
checkout main
|
||||||
|
commit id: "4"
|
||||||
|
checkout nice_feature
|
||||||
|
branch very_nice_feature
|
||||||
|
checkout very_nice_feature
|
||||||
|
commit id: "5"
|
||||||
|
checkout main
|
||||||
|
commit id: "6"
|
||||||
|
checkout nice_feature
|
||||||
|
commit id: "7"
|
||||||
|
checkout main
|
||||||
|
merge nice_feature id: "12345" tag: "my merge commit"
|
||||||
|
checkout very_nice_feature
|
||||||
|
commit id: "8"
|
||||||
|
checkout main
|
||||||
|
commit id: "9"
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('22: should render a simple gitgraph with more than 8 branchs & overriding variables | Vertical Branch', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`%%{init: { 'logLevel': 'debug', 'theme': 'default' , 'themeVariables': {
|
||||||
|
'gitBranchLabel0': '#ffffff',
|
||||||
|
'gitBranchLabel1': '#ffffff',
|
||||||
|
'gitBranchLabel2': '#ffffff',
|
||||||
|
'gitBranchLabel3': '#ffffff',
|
||||||
|
'gitBranchLabel4': '#ffffff',
|
||||||
|
'gitBranchLabel5': '#ffffff',
|
||||||
|
'gitBranchLabel6': '#ffffff',
|
||||||
|
'gitBranchLabel7': '#ffffff',
|
||||||
|
} } }%%
|
||||||
|
gitGraph TB:
|
||||||
|
checkout main
|
||||||
|
branch branch1
|
||||||
|
branch branch2
|
||||||
|
branch branch3
|
||||||
|
branch branch4
|
||||||
|
branch branch5
|
||||||
|
branch branch6
|
||||||
|
branch branch7
|
||||||
|
branch branch8
|
||||||
|
branch branch9
|
||||||
|
checkout branch1
|
||||||
|
commit id: "1"
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('23: should render a simple gitgraph with rotated labels | Vertical Branch', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`%%{init: { 'logLevel': 'debug', 'theme': 'default' , 'gitGraph': {
|
||||||
|
'rotateCommitLabel': true
|
||||||
|
} } }%%
|
||||||
|
gitGraph TB:
|
||||||
|
commit id: "75f7219e83b321cd3fdde7dcf83bc7c1000a6828"
|
||||||
|
commit id: "0db4784daf82736dec4569e0dc92980d328c1f2e"
|
||||||
|
commit id: "7067e9973f9eaa6cd4a4b723c506d1eab598e83e"
|
||||||
|
commit id: "66972321ad6c199013b5b31f03b3a86fa3f9817d"
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('24: should render a simple gitgraph with horizontal labels | Vertical Branch', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`%%{init: { 'logLevel': 'debug', 'theme': 'default' , 'gitGraph': {
|
||||||
|
'rotateCommitLabel': false
|
||||||
|
} } }%%
|
||||||
|
gitGraph TB:
|
||||||
|
commit id: "Alpha"
|
||||||
|
commit id: "Beta"
|
||||||
|
commit id: "Gamma"
|
||||||
|
commit id: "Delta"
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('25: should render a simple gitgraph with cherry pick commit | Vertical Branch', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
gitGraph TB:
|
||||||
|
commit id: "ZERO"
|
||||||
|
branch develop
|
||||||
|
commit id:"A"
|
||||||
|
checkout main
|
||||||
|
commit id:"ONE"
|
||||||
|
checkout develop
|
||||||
|
commit id:"B"
|
||||||
|
checkout main
|
||||||
|
commit id:"TWO"
|
||||||
|
cherry-pick id:"A"
|
||||||
|
commit id:"THREE"
|
||||||
|
checkout develop
|
||||||
|
commit id:"C"
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('26: should render a gitgraph with cherry pick commit with custom tag | Vertical Branch', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
gitGraph TB:
|
||||||
|
commit id: "ZERO"
|
||||||
|
branch develop
|
||||||
|
commit id:"A"
|
||||||
|
checkout main
|
||||||
|
commit id:"ONE"
|
||||||
|
checkout develop
|
||||||
|
commit id:"B"
|
||||||
|
checkout main
|
||||||
|
commit id:"TWO"
|
||||||
|
cherry-pick id:"A" tag: "snapshot"
|
||||||
|
commit id:"THREE"
|
||||||
|
checkout develop
|
||||||
|
commit id:"C"
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('27: should render a gitgraph with cherry pick commit with no tag | Vertical Branch', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
gitGraph TB:
|
||||||
|
commit id: "ZERO"
|
||||||
|
branch develop
|
||||||
|
commit id:"A"
|
||||||
|
checkout main
|
||||||
|
commit id:"ONE"
|
||||||
|
checkout develop
|
||||||
|
commit id:"B"
|
||||||
|
checkout main
|
||||||
|
commit id:"TWO"
|
||||||
|
cherry-pick id:"A" tag: ""
|
||||||
|
commit id:"THREE"
|
||||||
|
checkout develop
|
||||||
|
commit id:"C"
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('28: should render a simple gitgraph with two cherry pick commit | Vertical Branch', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
gitGraph TB:
|
||||||
|
commit id: "ZERO"
|
||||||
|
branch develop
|
||||||
|
commit id:"A"
|
||||||
|
checkout main
|
||||||
|
commit id:"ONE"
|
||||||
|
checkout develop
|
||||||
|
commit id:"B"
|
||||||
|
branch featureA
|
||||||
|
commit id:"FIX"
|
||||||
|
commit id: "FIX-2"
|
||||||
|
checkout main
|
||||||
|
commit id:"TWO"
|
||||||
|
cherry-pick id:"A"
|
||||||
|
commit id:"THREE"
|
||||||
|
cherry-pick id:"FIX"
|
||||||
|
checkout develop
|
||||||
|
commit id:"C"
|
||||||
|
merge featureA
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('29: should render commits for more than 8 branches | Vertical Branch', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
gitGraph TB:
|
||||||
|
checkout main
|
||||||
|
%% Make sure to manually set the ID of all commits, for consistent visual tests
|
||||||
|
commit id: "1-abcdefg"
|
||||||
|
checkout main
|
||||||
|
branch branch1
|
||||||
|
commit id: "2-abcdefg"
|
||||||
|
checkout main
|
||||||
|
merge branch1
|
||||||
|
branch branch2
|
||||||
|
commit id: "3-abcdefg"
|
||||||
|
checkout main
|
||||||
|
merge branch2
|
||||||
|
branch branch3
|
||||||
|
commit id: "4-abcdefg"
|
||||||
|
checkout main
|
||||||
|
merge branch3
|
||||||
|
branch branch4
|
||||||
|
commit id: "5-abcdefg"
|
||||||
|
checkout main
|
||||||
|
merge branch4
|
||||||
|
branch branch5
|
||||||
|
commit id: "6-abcdefg"
|
||||||
|
checkout main
|
||||||
|
merge branch5
|
||||||
|
branch branch6
|
||||||
|
commit id: "7-abcdefg"
|
||||||
|
checkout main
|
||||||
|
merge branch6
|
||||||
|
branch branch7
|
||||||
|
commit id: "8-abcdefg"
|
||||||
|
checkout main
|
||||||
|
merge branch7
|
||||||
|
branch branch8
|
||||||
|
commit id: "9-abcdefg"
|
||||||
|
checkout main
|
||||||
|
merge branch8
|
||||||
|
branch branch9
|
||||||
|
commit id: "10-abcdefg"
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('30: should render a simple gitgraph with three branches,custom merge commit id,tag,type | Vertical Branch', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`gitGraph TB:
|
||||||
|
commit id: "1"
|
||||||
|
commit id: "2"
|
||||||
|
branch nice_feature
|
||||||
|
checkout nice_feature
|
||||||
|
commit id: "3"
|
||||||
|
checkout main
|
||||||
|
commit id: "4"
|
||||||
|
checkout nice_feature
|
||||||
|
branch very_nice_feature
|
||||||
|
checkout very_nice_feature
|
||||||
|
commit id: "5"
|
||||||
|
checkout main
|
||||||
|
commit id: "6"
|
||||||
|
checkout nice_feature
|
||||||
|
commit id: "7"
|
||||||
|
checkout main
|
||||||
|
merge nice_feature id: "customID" tag: "customTag" type: REVERSE
|
||||||
|
checkout very_nice_feature
|
||||||
|
commit id: "8"
|
||||||
|
checkout main
|
||||||
|
commit id: "9"
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('31: should render a simple gitgraph with a title | Vertical Branch', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`---
|
||||||
|
title: simple gitGraph
|
||||||
|
---
|
||||||
|
gitGraph TB:
|
||||||
|
commit id: "1-abcdefg"
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('32: should render a simple gitgraph overlapping commits | Vertical Branch', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`gitGraph TB:
|
||||||
|
commit id:"s1"
|
||||||
|
commit id:"s2"
|
||||||
|
branch branch1
|
||||||
|
commit id:"s3"
|
||||||
|
commit id:"s4"
|
||||||
|
checkout main
|
||||||
|
commit id:"s5"
|
||||||
|
checkout branch1
|
||||||
|
commit id:"s6"
|
||||||
|
commit id:"s7"
|
||||||
|
merge main
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('33: should render a simple gitgraph overlapping commits', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`gitGraph
|
||||||
|
commit id:"s1"
|
||||||
|
commit id:"s2"
|
||||||
|
branch branch1
|
||||||
|
commit id:"s3"
|
||||||
|
commit id:"s4"
|
||||||
|
checkout main
|
||||||
|
commit id:"s5"
|
||||||
|
checkout branch1
|
||||||
|
commit id:"s6"
|
||||||
|
commit id:"s7"
|
||||||
|
merge main
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { imgSnapshotTest } from '../../helpers/util.js';
|
import { imgSnapshotTest } from '../../helpers/util.ts';
|
||||||
|
|
||||||
describe('info diagram', () => {
|
describe('info diagram', () => {
|
||||||
it('should handle an info definition', () => {
|
it('should handle an info definition', () => {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.js';
|
import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts';
|
||||||
|
|
||||||
describe('User journey diagram', () => {
|
describe('User journey diagram', () => {
|
||||||
it('Simple test', () => {
|
it('Simple test', () => {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { imgSnapshotTest } from '../../helpers/util.js';
|
import { imgSnapshotTest } from '../../helpers/util.ts';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Check whether the SVG Element has a Mindmap root
|
* Check whether the SVG Element has a Mindmap root
|
||||||
@ -242,8 +242,7 @@ mindmap
|
|||||||
a second line 😎\`]
|
a second line 😎\`]
|
||||||
id2[\`The dog in **the** hog... a *very long text* about it
|
id2[\`The dog in **the** hog... a *very long text* about it
|
||||||
Word!\`]
|
Word!\`]
|
||||||
`,
|
`
|
||||||
{ titleTopMargin: 0 }
|
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
@ -1,89 +1,85 @@
|
|||||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.js';
|
import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts';
|
||||||
|
|
||||||
describe('Pie Chart', () => {
|
describe('pie chart', () => {
|
||||||
it('should render a simple pie diagram', () => {
|
it('should render a simple pie diagram', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
|
`pie title Sports in Sweden
|
||||||
|
"Bandy": 40
|
||||||
|
"Ice-Hockey": 80
|
||||||
|
"Football": 90
|
||||||
`
|
`
|
||||||
pie title Sports in Sweden
|
|
||||||
"Bandy" : 40
|
|
||||||
"Ice-Hockey" : 80
|
|
||||||
"Football" : 90
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
);
|
||||||
cy.get('svg');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should render a simple pie diagram with long labels', () => {
|
it('should render a simple pie diagram with long labels', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
|
`pie title NETFLIX
|
||||||
|
"Time spent looking for movie": 90
|
||||||
|
"Time spent watching it": 10
|
||||||
`
|
`
|
||||||
pie title NETFLIX
|
|
||||||
"Time spent looking for movie" : 90
|
|
||||||
"Time spent watching it" : 10
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
);
|
||||||
cy.get('svg');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should render a simple pie diagram with capital letters for labels', () => {
|
it('should render a simple pie diagram with capital letters for labels', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
|
`pie title What Voldemort doesn't have?
|
||||||
|
"FRIENDS": 2
|
||||||
|
"FAMILY": 3
|
||||||
|
"NOSE": 45
|
||||||
`
|
`
|
||||||
pie title What Voldemort doesn't have?
|
|
||||||
"FRIENDS" : 2
|
|
||||||
"FAMILY" : 3
|
|
||||||
"NOSE" : 45
|
|
||||||
`,
|
|
||||||
{}
|
|
||||||
);
|
);
|
||||||
cy.get('svg');
|
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should render a pie diagram when useMaxWidth is true (default)', () => {
|
it('should render a pie diagram when useMaxWidth is true (default)', () => {
|
||||||
renderGraph(
|
renderGraph(
|
||||||
`
|
`pie title Sports in Sweden
|
||||||
pie title Sports in Sweden
|
"Bandy": 40
|
||||||
"Bandy" : 40
|
"Ice-Hockey": 80
|
||||||
"Ice-Hockey" : 80
|
"Football": 90
|
||||||
"Football" : 90
|
|
||||||
`,
|
`,
|
||||||
{ pie: { useMaxWidth: true } }
|
{ pie: { useMaxWidth: true } }
|
||||||
);
|
);
|
||||||
cy.get('svg').should((svg) => {
|
cy.get('svg').should((svg) => {
|
||||||
expect(svg).to.have.attr('width', '100%');
|
expect(svg).to.have.attr('width', '100%');
|
||||||
// expect(svg).to.have.attr('height');
|
|
||||||
// const height = parseFloat(svg.attr('height'));
|
|
||||||
// expect(height).to.eq(450);
|
|
||||||
const style = svg.attr('style');
|
const style = svg.attr('style');
|
||||||
expect(style).to.match(/^max-width: [\d.]+px;$/);
|
expect(style).to.match(/^max-width: [\d.]+px;$/);
|
||||||
const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
|
const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
|
||||||
expect(maxWidthValue).to.eq(984);
|
expect(maxWidthValue).to.eq(984);
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
it('should render a pie diagram when useMaxWidth is false', () => {
|
it('should render a pie diagram when useMaxWidth is false', () => {
|
||||||
renderGraph(
|
renderGraph(
|
||||||
`
|
`pie title Sports in Sweden
|
||||||
pie title Sports in Sweden
|
"Bandy": 40
|
||||||
"Bandy" : 40
|
"Ice-Hockey": 80
|
||||||
"Ice-Hockey" : 80
|
"Football": 90
|
||||||
"Football" : 90
|
|
||||||
`,
|
`,
|
||||||
{ pie: { useMaxWidth: false } }
|
{ pie: { useMaxWidth: false } }
|
||||||
);
|
);
|
||||||
cy.get('svg').should((svg) => {
|
cy.get('svg').should((svg) => {
|
||||||
// const height = parseFloat(svg.attr('height'));
|
|
||||||
const width = parseFloat(svg.attr('width'));
|
const width = parseFloat(svg.attr('width'));
|
||||||
// expect(height).to.eq(450);
|
|
||||||
expect(width).to.eq(984);
|
expect(width).to.eq(984);
|
||||||
expect(svg).to.not.have.attr('style');
|
expect(svg).to.not.have.attr('style');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
it('should render a pie diagram when textPosition is set', () => {
|
|
||||||
|
it('should render a pie diagram when textPosition is setted', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
`
|
`pie
|
||||||
pie
|
"Dogs": 50
|
||||||
"Dogs": 50
|
"Cats": 25
|
||||||
"Cats": 25
|
`,
|
||||||
`,
|
|
||||||
{ logLevel: 1, pie: { textPosition: 0.9 } }
|
{ logLevel: 1, pie: { textPosition: 0.9 } }
|
||||||
);
|
);
|
||||||
cy.get('svg');
|
});
|
||||||
|
|
||||||
|
it('should render a pie diagram with showData', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`pie showData
|
||||||
|
"Dogs": 50
|
||||||
|
"Cats": 25
|
||||||
|
`
|
||||||
|
);
|
||||||
});
|
});
|
||||||
});
|
});
|
@ -1,4 +1,4 @@
|
|||||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.js';
|
import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts';
|
||||||
|
|
||||||
describe('Quadrant Chart', () => {
|
describe('Quadrant Chart', () => {
|
||||||
it('should render if only chart type is provided', () => {
|
it('should render if only chart type is provided', () => {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.js';
|
import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts';
|
||||||
|
|
||||||
describe('Requirement diagram', () => {
|
describe('Requirement diagram', () => {
|
||||||
it('sample', () => {
|
it('sample', () => {
|
||||||
|
144
cypress/integration/rendering/sankey.spec.ts
Normal file
144
cypress/integration/rendering/sankey.spec.ts
Normal file
@ -0,0 +1,144 @@
|
|||||||
|
import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts';
|
||||||
|
|
||||||
|
describe('Sankey Diagram', () => {
|
||||||
|
it('should render a simple example', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
sankey-beta
|
||||||
|
|
||||||
|
sourceNode,targetNode,10
|
||||||
|
`,
|
||||||
|
{}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('when given a linkColor', function () {
|
||||||
|
this.beforeAll(() => {
|
||||||
|
cy.wrap(
|
||||||
|
`sankey-beta
|
||||||
|
a,b,10
|
||||||
|
`
|
||||||
|
).as('graph');
|
||||||
|
});
|
||||||
|
|
||||||
|
it('links should use hex color', function () {
|
||||||
|
renderGraph(this.graph, { sankey: { linkColor: '#636465' } });
|
||||||
|
|
||||||
|
cy.get('.link path').should((link) => {
|
||||||
|
expect(link.attr('stroke')).to.equal('#636465');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('links should be the same color as source node', function () {
|
||||||
|
renderGraph(this.graph, { sankey: { linkColor: 'source' } });
|
||||||
|
|
||||||
|
cy.get('.link path').then((link) => {
|
||||||
|
cy.get('.node[id="node-1"] rect').should((node) =>
|
||||||
|
expect(link.attr('stroke')).to.equal(node.attr('fill'))
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('links should be the same color as target node', function () {
|
||||||
|
renderGraph(this.graph, { sankey: { linkColor: 'target' } });
|
||||||
|
|
||||||
|
cy.get('.link path').then((link) => {
|
||||||
|
cy.get('.node[id="node-2"] rect').should((node) =>
|
||||||
|
expect(link.attr('stroke')).to.equal(node.attr('fill'))
|
||||||
|
);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('links must be gradient', function () {
|
||||||
|
renderGraph(this.graph, { sankey: { linkColor: 'gradient' } });
|
||||||
|
|
||||||
|
cy.get('.link path').should((link) => {
|
||||||
|
expect(link.attr('stroke')).to.equal('url(#linearGradient-3)');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
describe('when given a nodeAlignment', function () {
|
||||||
|
this.beforeAll(() => {
|
||||||
|
cy.wrap(
|
||||||
|
`
|
||||||
|
sankey-beta
|
||||||
|
|
||||||
|
a,b,8
|
||||||
|
b,c,8
|
||||||
|
c,d,8
|
||||||
|
d,e,8
|
||||||
|
|
||||||
|
x,c,4
|
||||||
|
c,y,4
|
||||||
|
`
|
||||||
|
).as('graph');
|
||||||
|
});
|
||||||
|
|
||||||
|
this.afterEach(() => {
|
||||||
|
cy.get('.node[id="node-1"]').should((node) => {
|
||||||
|
expect(node.attr('x')).to.equal('0');
|
||||||
|
});
|
||||||
|
cy.get('.node[id="node-2"]').should((node) => {
|
||||||
|
expect(node.attr('x')).to.equal('100');
|
||||||
|
});
|
||||||
|
cy.get('.node[id="node-3"]').should((node) => {
|
||||||
|
expect(node.attr('x')).to.equal('200');
|
||||||
|
});
|
||||||
|
cy.get('.node[id="node-4"]').should((node) => {
|
||||||
|
expect(node.attr('x')).to.equal('300');
|
||||||
|
});
|
||||||
|
cy.get('.node[id="node-5"]').should((node) => {
|
||||||
|
expect(node.attr('x')).to.equal('400');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should justify nodes', function () {
|
||||||
|
renderGraph(this.graph, {
|
||||||
|
sankey: { nodeAlignment: 'justify', width: 410, useMaxWidth: false },
|
||||||
|
});
|
||||||
|
cy.get('.node[id="node-6"]').should((node) => {
|
||||||
|
expect(node.attr('x')).to.equal('0');
|
||||||
|
});
|
||||||
|
cy.get('.node[id="node-7"]').should((node) => {
|
||||||
|
expect(node.attr('x')).to.equal('400');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should align nodes left', function () {
|
||||||
|
renderGraph(this.graph, {
|
||||||
|
sankey: { nodeAlignment: 'left', width: 410, useMaxWidth: false },
|
||||||
|
});
|
||||||
|
cy.get('.node[id="node-6"]').should((node) => {
|
||||||
|
expect(node.attr('x')).to.equal('0');
|
||||||
|
});
|
||||||
|
cy.get('.node[id="node-7"]').should((node) => {
|
||||||
|
expect(node.attr('x')).to.equal('300');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should align nodes right', function () {
|
||||||
|
renderGraph(this.graph, {
|
||||||
|
sankey: { nodeAlignment: 'right', width: 410, useMaxWidth: false },
|
||||||
|
});
|
||||||
|
cy.get('.node[id="node-6"]').should((node) => {
|
||||||
|
expect(node.attr('x')).to.equal('100');
|
||||||
|
});
|
||||||
|
cy.get('.node[id="node-7"]').should((node) => {
|
||||||
|
expect(node.attr('x')).to.equal('400');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
it('should center nodes', function () {
|
||||||
|
renderGraph(this.graph, {
|
||||||
|
sankey: { nodeAlignment: 'center', width: 410, useMaxWidth: false },
|
||||||
|
});
|
||||||
|
cy.get('.node[id="node-6"]').should((node) => {
|
||||||
|
expect(node.attr('x')).to.equal('100');
|
||||||
|
});
|
||||||
|
cy.get('.node[id="node-7"]').should((node) => {
|
||||||
|
expect(node.attr('x')).to.equal('300');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
@ -1,6 +1,6 @@
|
|||||||
/// <reference types="Cypress" />
|
/// <reference types="Cypress" />
|
||||||
|
|
||||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.js';
|
import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts';
|
||||||
|
|
||||||
context('Sequence diagram', () => {
|
context('Sequence diagram', () => {
|
||||||
it('should render a sequence diagram with boxes', () => {
|
it('should render a sequence diagram with boxes', () => {
|
||||||
@ -156,6 +156,81 @@ context('Sequence diagram', () => {
|
|||||||
`
|
`
|
||||||
);
|
);
|
||||||
});
|
});
|
||||||
|
it('should render a sequence diagram with basic actor creation and destruction', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
sequenceDiagram
|
||||||
|
Alice ->> Bob: Hello Bob, how are you ?
|
||||||
|
Bob ->> Alice: Fine, thank you. And you?
|
||||||
|
create participant Polo
|
||||||
|
Alice ->> Polo: Hi Polo!
|
||||||
|
create actor Ola1 as Ola
|
||||||
|
Polo ->> Ola1: Hiii
|
||||||
|
Ola1 ->> Alice: Hi too
|
||||||
|
destroy Ola1
|
||||||
|
Alice --x Ola1: Bye!
|
||||||
|
Alice ->> Bob: And now?
|
||||||
|
create participant Ola2 as Ola
|
||||||
|
Alice ->> Ola2: Hello again
|
||||||
|
destroy Alice
|
||||||
|
Alice --x Ola2: Bye for me!
|
||||||
|
destroy Bob
|
||||||
|
Ola2 --> Bob: The end
|
||||||
|
`
|
||||||
|
);
|
||||||
|
});
|
||||||
|
it('should render a sequence diagram with actor creation and destruction coupled with backgrounds, loops and notes', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
sequenceDiagram
|
||||||
|
accTitle: test the accTitle
|
||||||
|
accDescr: Test a description
|
||||||
|
|
||||||
|
participant Alice
|
||||||
|
participant Bob
|
||||||
|
autonumber 10 10
|
||||||
|
rect rgb(200, 220, 100)
|
||||||
|
rect rgb(200, 255, 200)
|
||||||
|
|
||||||
|
Alice ->> Bob: Hello Bob, how are you?
|
||||||
|
create participant John as John<br />Second Line
|
||||||
|
Bob-->>John: How about you John?
|
||||||
|
end
|
||||||
|
|
||||||
|
Bob--x Alice: I am good thanks!
|
||||||
|
Bob-x John: I am good thanks!
|
||||||
|
Note right of John: John thinks a long<br />long time, so long<br />that the text does<br />not fit on a row.
|
||||||
|
|
||||||
|
Bob-->Alice: Checking with John...
|
||||||
|
Note over John:wrap: John looks like he's still thinking, so Bob prods him a bit.
|
||||||
|
Bob-x John: Hey John - we're still waiting to know<br />how you're doing
|
||||||
|
Note over John:nowrap: John's trying hard not to break his train of thought.
|
||||||
|
destroy John
|
||||||
|
Bob-x John: John! Cmon!
|
||||||
|
Note over John: After a few more moments, John<br />finally snaps out of it.
|
||||||
|
end
|
||||||
|
|
||||||
|
autonumber off
|
||||||
|
alt either this
|
||||||
|
create actor Lola
|
||||||
|
Alice->>+Lola: Yes
|
||||||
|
Lola-->>-Alice: OK
|
||||||
|
else or this
|
||||||
|
autonumber
|
||||||
|
Alice->>Lola: No
|
||||||
|
else or this will happen
|
||||||
|
Alice->Lola: Maybe
|
||||||
|
end
|
||||||
|
autonumber 200
|
||||||
|
par this happens in parallel
|
||||||
|
destroy Bob
|
||||||
|
Alice -->> Bob: Parallel message 1
|
||||||
|
and
|
||||||
|
Alice -->> Lola: Parallel message 2
|
||||||
|
end
|
||||||
|
`
|
||||||
|
);
|
||||||
|
});
|
||||||
context('font settings', () => {
|
context('font settings', () => {
|
||||||
it('should render different note fonts when configured', () => {
|
it('should render different note fonts when configured', () => {
|
||||||
imgSnapshotTest(
|
imgSnapshotTest(
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.js';
|
import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts';
|
||||||
|
|
||||||
describe('State diagram', () => {
|
describe('State diagram', () => {
|
||||||
it('v2 should render a simple info', () => {
|
it('v2 should render a simple info', () => {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { imgSnapshotTest, renderGraph } from '../../helpers/util.js';
|
import { imgSnapshotTest, renderGraph } from '../../helpers/util.ts';
|
||||||
|
|
||||||
describe('State diagram', () => {
|
describe('State diagram', () => {
|
||||||
it('should render a simple state diagrams', () => {
|
it('should render a simple state diagrams', () => {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { imgSnapshotTest } from '../../helpers/util.js';
|
import { imgSnapshotTest } from '../../helpers/util.ts';
|
||||||
|
|
||||||
describe('themeCSS balancing, it', () => {
|
describe('themeCSS balancing, it', () => {
|
||||||
it('should not allow unbalanced CSS definitions', () => {
|
it('should not allow unbalanced CSS definitions', () => {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { imgSnapshotTest } from '../../helpers/util.js';
|
import { imgSnapshotTest } from '../../helpers/util.ts';
|
||||||
|
|
||||||
describe('Timeline diagram', () => {
|
describe('Timeline diagram', () => {
|
||||||
it('1: should render a simple timeline with no specific sections', () => {
|
it('1: should render a simple timeline with no specific sections', () => {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
import { imgSnapshotTest } from '../../helpers/util.js';
|
import { imgSnapshotTest } from '../../helpers/util.ts';
|
||||||
|
|
||||||
describe('Zen UML', () => {
|
describe('Zen UML', () => {
|
||||||
it('Basic Zen UML diagram', () => {
|
it('Basic Zen UML diagram', () => {
|
||||||
|
@ -58,6 +58,23 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<pre id="diagram" class="mermaid">
|
<pre id="diagram" class="mermaid">
|
||||||
|
flowchart
|
||||||
|
classDef mainCategories fill:#f9d5e5, stroke:#233d4d,stroke-width:2px, font-weight:bold;
|
||||||
|
CS(Customer Awareness Journey):::mainCategories
|
||||||
|
</pre
|
||||||
|
>
|
||||||
|
<pre id="diagram" class="mermaid">
|
||||||
|
flowchart
|
||||||
|
Node1:::class1 --> Node2:::class2
|
||||||
|
Node1:::class1 --> Node3:::class2
|
||||||
|
Node3 --> Node4((I am a circle)):::larger
|
||||||
|
|
||||||
|
classDef class1 fill:lightblue
|
||||||
|
classDef class2 fill:pink
|
||||||
|
classDef larger font-size:30px,fill:yellow
|
||||||
|
</pre
|
||||||
|
>
|
||||||
|
<pre id="diagram" class="mermaid2">
|
||||||
stateDiagram-v2
|
stateDiagram-v2
|
||||||
[*] --> Still
|
[*] --> Still
|
||||||
Still --> [*]
|
Still --> [*]
|
||||||
@ -73,7 +90,7 @@ flowchart RL
|
|||||||
a1 -- l2 --> a2
|
a1 -- l2 --> a2
|
||||||
end
|
end
|
||||||
</pre>
|
</pre>
|
||||||
<pre id="diagram" class="mermaid">
|
<pre id="diagram" class="mermaid2">
|
||||||
flowchart RL
|
flowchart RL
|
||||||
subgraph "`one`"
|
subgraph "`one`"
|
||||||
a1 -- l1 --> a2
|
a1 -- l1 --> a2
|
||||||
@ -98,11 +115,11 @@ flowchart LR
|
|||||||
way`"]
|
way`"]
|
||||||
</pre
|
</pre
|
||||||
>
|
>
|
||||||
<pre id="diagram" class="mermaid">
|
<pre id="diagram" class="mermaid2">
|
||||||
classDiagram-v2
|
classDiagram-v2
|
||||||
note "I love this diagram!\nDo you love it?"
|
note "I love this diagram!\nDo you love it?"
|
||||||
</pre>
|
</pre>
|
||||||
<pre id="diagram" class="mermaid">
|
<pre id="diagram" class="mermaid2">
|
||||||
stateDiagram-v2
|
stateDiagram-v2
|
||||||
State1: The state with a note with minus - and plus + in it
|
State1: The state with a note with minus - and plus + in it
|
||||||
note left of State1
|
note left of State1
|
||||||
@ -147,7 +164,7 @@ mindmap
|
|||||||
शान्तिः سلام 和平 `"]
|
शान्तिः سلام 和平 `"]
|
||||||
|
|
||||||
</pre>
|
</pre>
|
||||||
<pre id="diagram" class="mermaid">
|
<pre id="diagram" class="mermaid2">
|
||||||
%%{init: {"flowchart": {"defaultRenderer": "elk"}} }%%
|
%%{init: {"flowchart": {"defaultRenderer": "elk"}} }%%
|
||||||
flowchart TB
|
flowchart TB
|
||||||
%% I could not figure out how to use double quotes in labels in Mermaid
|
%% I could not figure out how to use double quotes in labels in Mermaid
|
||||||
@ -399,21 +416,31 @@ mindmap
|
|||||||
mermaid.parseError = function (err, hash) {
|
mermaid.parseError = function (err, hash) {
|
||||||
// console.error('Mermaid error: ', err);
|
// console.error('Mermaid error: ', err);
|
||||||
};
|
};
|
||||||
|
// mermaid.initialize({
|
||||||
|
// // theme: 'forest',
|
||||||
|
// startOnLoad: true,
|
||||||
|
// logLevel: 0,
|
||||||
|
// flowchart: {
|
||||||
|
// // defaultRenderer: 'elk',
|
||||||
|
// useMaxWidth: false,
|
||||||
|
// // htmlLabels: false,
|
||||||
|
// htmlLabels: true,
|
||||||
|
// },
|
||||||
|
// // htmlLabels: false,
|
||||||
|
// gantt: {
|
||||||
|
// useMaxWidth: false,
|
||||||
|
// },
|
||||||
|
// useMaxWidth: false,
|
||||||
|
// });
|
||||||
mermaid.initialize({
|
mermaid.initialize({
|
||||||
// theme: 'forest',
|
flowchart: { titleTopMargin: 10 },
|
||||||
startOnLoad: true,
|
fontFamily: 'courier',
|
||||||
logLevel: 0,
|
sequence: {
|
||||||
flowchart: {
|
actorFontFamily: 'courier',
|
||||||
// defaultRenderer: 'elk',
|
noteFontFamily: 'courier',
|
||||||
useMaxWidth: false,
|
messageFontFamily: 'courier',
|
||||||
// htmlLabels: false,
|
|
||||||
htmlLabels: true,
|
|
||||||
},
|
},
|
||||||
// htmlLabels: false,
|
fontSize: 16,
|
||||||
gantt: {
|
|
||||||
useMaxWidth: false,
|
|
||||||
},
|
|
||||||
useMaxWidth: false,
|
|
||||||
});
|
});
|
||||||
function callback() {
|
function callback() {
|
||||||
alert('It worked');
|
alert('It worked');
|
||||||
|
@ -2,7 +2,9 @@
|
|||||||
"compilerOptions": {
|
"compilerOptions": {
|
||||||
"target": "es2020",
|
"target": "es2020",
|
||||||
"lib": ["es2020", "dom"],
|
"lib": ["es2020", "dom"],
|
||||||
"types": ["cypress", "node"]
|
"types": ["cypress", "node"],
|
||||||
|
"allowImportingTsExtensions": true,
|
||||||
|
"noEmit": true
|
||||||
},
|
},
|
||||||
"include": ["**/*.ts"]
|
"include": ["**/*.ts"]
|
||||||
}
|
}
|
||||||
|
@ -38,12 +38,14 @@
|
|||||||
+quack()
|
+quack()
|
||||||
}
|
}
|
||||||
class Fish{
|
class Fish{
|
||||||
-int sizeInFeet
|
-Listint sizeInFeet
|
||||||
-canEat()
|
-canEat()
|
||||||
}
|
}
|
||||||
class Zebra{
|
class Zebra{
|
||||||
+bool is_wild
|
+bool is_wild
|
||||||
+run()
|
+run(List~T~, List~OT~)
|
||||||
|
%% +run-composite(List~T, K~)
|
||||||
|
+run-nested(List~List~OT~~)
|
||||||
}
|
}
|
||||||
|
|
||||||
</pre>
|
</pre>
|
||||||
@ -80,6 +82,7 @@
|
|||||||
Class01 : #size()
|
Class01 : #size()
|
||||||
Class01 : -int chimp
|
Class01 : -int chimp
|
||||||
Class01 : +int gorilla
|
Class01 : +int gorilla
|
||||||
|
Class01 : +abstractAttribute string*
|
||||||
class Class10~T~ {
|
class Class10~T~ {
|
||||||
<<service>>
|
<<service>>
|
||||||
int id
|
int id
|
||||||
@ -122,6 +125,8 @@
|
|||||||
classDiagram
|
classDiagram
|
||||||
direction LR
|
direction LR
|
||||||
Animal ()-- Dog
|
Animal ()-- Dog
|
||||||
|
Animal ()-- Cat
|
||||||
|
note for Cat "should have no members area"
|
||||||
Dog : bark()
|
Dog : bark()
|
||||||
Dog : species()
|
Dog : species()
|
||||||
</pre>
|
</pre>
|
||||||
@ -151,6 +156,30 @@
|
|||||||
~InternalProperty : string
|
~InternalProperty : string
|
||||||
~AnotherInternalProperty : List~List~string~~
|
~AnotherInternalProperty : List~List~string~~
|
||||||
}
|
}
|
||||||
|
class People List~List~Person~~
|
||||||
|
</pre>
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<pre class="mermaid">
|
||||||
|
classDiagram
|
||||||
|
A1 --> B1
|
||||||
|
namespace A {
|
||||||
|
class A1 {
|
||||||
|
+foo : string
|
||||||
|
}
|
||||||
|
class A2 {
|
||||||
|
+bar : int
|
||||||
|
}
|
||||||
|
}
|
||||||
|
namespace B {
|
||||||
|
class B1 {
|
||||||
|
+foo : bool
|
||||||
|
}
|
||||||
|
class B2 {
|
||||||
|
+bar : float
|
||||||
|
}
|
||||||
|
}
|
||||||
|
A2 --> B2
|
||||||
</pre>
|
</pre>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
||||||
|
34
demos/dev/example.html
Normal file
34
demos/dev/example.html
Normal file
@ -0,0 +1,34 @@
|
|||||||
|
<!--Do not edit this file-->
|
||||||
|
<!--Duplicate this file to any name you like, run `pnpm dev`, open http://localhost:9000/dev/name.html to view-->
|
||||||
|
<html>
|
||||||
|
<head>
|
||||||
|
<title>Mermaid development page</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
<pre id="diagram" class="mermaid">
|
||||||
|
graph TB
|
||||||
|
a --> b
|
||||||
|
a --> c
|
||||||
|
b --> d
|
||||||
|
c --> d
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<div id="dynamicDiagram"></div>
|
||||||
|
|
||||||
|
<script type="module">
|
||||||
|
import mermaid from '/mermaid.esm.mjs';
|
||||||
|
mermaid.parseError = function (err, hash) {
|
||||||
|
console.error('Mermaid error: ', err);
|
||||||
|
};
|
||||||
|
mermaid.initialize({
|
||||||
|
startOnLoad: true,
|
||||||
|
logLevel: 0,
|
||||||
|
});
|
||||||
|
const value = `graph TD\nHello --> World`;
|
||||||
|
const el = document.getElementById('dynamicDiagram');
|
||||||
|
const { svg } = await mermaid.render('dd', value);
|
||||||
|
console.log(svg);
|
||||||
|
el.innerHTML = svg;
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -21,6 +21,8 @@
|
|||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
---
|
---
|
||||||
title: This is a title
|
title: This is a title
|
||||||
|
config:
|
||||||
|
theme: forest
|
||||||
---
|
---
|
||||||
erDiagram
|
erDiagram
|
||||||
%% title This is a title
|
%% title This is a title
|
||||||
@ -108,6 +110,35 @@
|
|||||||
}
|
}
|
||||||
MANUFACTURER only one to zero or more CAR : makes
|
MANUFACTURER only one to zero or more CAR : makes
|
||||||
</pre>
|
</pre>
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<pre class="mermaid">
|
||||||
|
erDiagram
|
||||||
|
p[Person] {
|
||||||
|
string firstName
|
||||||
|
string lastName
|
||||||
|
}
|
||||||
|
a["Customer Account"] {
|
||||||
|
string email
|
||||||
|
}
|
||||||
|
p ||--o| a : has
|
||||||
|
</pre>
|
||||||
|
<hr />
|
||||||
|
|
||||||
|
<pre class="mermaid">
|
||||||
|
erDiagram
|
||||||
|
_customer_order {
|
||||||
|
bigint id PK
|
||||||
|
bigint customer_id FK
|
||||||
|
text shipping_address
|
||||||
|
text delivery_method
|
||||||
|
timestamp_with_time_zone ordered_at
|
||||||
|
numeric total_tax_amount
|
||||||
|
numeric total_price
|
||||||
|
text payment_method
|
||||||
|
}
|
||||||
|
</pre>
|
||||||
|
<hr />
|
||||||
|
|
||||||
<script type="module">
|
<script type="module">
|
||||||
import mermaid from './mermaid.esm.mjs';
|
import mermaid from './mermaid.esm.mjs';
|
||||||
|
@ -123,6 +123,13 @@
|
|||||||
|
|
||||||
<h3>flowchart</h3>
|
<h3>flowchart</h3>
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
|
---
|
||||||
|
title: This is another complicated flow
|
||||||
|
config:
|
||||||
|
theme: base
|
||||||
|
flowchart:
|
||||||
|
curve: cardinal
|
||||||
|
---
|
||||||
flowchart LR
|
flowchart LR
|
||||||
sid-B3655226-6C29-4D00-B685-3D5C734DC7E1["
|
sid-B3655226-6C29-4D00-B685-3D5C734DC7E1["
|
||||||
|
|
||||||
@ -1505,6 +1512,34 @@
|
|||||||
</pre>
|
</pre>
|
||||||
<hr />
|
<hr />
|
||||||
|
|
||||||
|
<pre class="mermaid">
|
||||||
|
graph TD
|
||||||
|
A([Start]) ==> B[Step 1]
|
||||||
|
B ==> C{Flow 1}
|
||||||
|
C -- Choice 1.1 --> D[Step 2.1]
|
||||||
|
C -- Choice 1.3 --> I[Step 2.3]
|
||||||
|
C == Choice 1.2 ==> E[Step 2.2]
|
||||||
|
D --> F{Flow 2}
|
||||||
|
E ==> F{Flow 2}
|
||||||
|
F{Flow 2} == Choice 2.1 ==> H[Feedback node]
|
||||||
|
H[Feedback node] ==> B[Step 1]
|
||||||
|
F{Flow 2} == Choice 2.2 ==> G((Finish))
|
||||||
|
|
||||||
|
linkStyle 0,1,4,6,7,8,9 stroke:gold, stroke-width:4px
|
||||||
|
|
||||||
|
classDef active_node fill:#0CF,stroke:#09F,stroke-width:6px
|
||||||
|
classDef unactive_node fill:#e0e0e0,stroke:#bdbdbd,stroke-width:3px
|
||||||
|
classDef bugged_node fill:#F88,stroke:#F22,stroke-width:3px
|
||||||
|
classDef start_node,finish_node fill:#3B1,stroke:#391,stroke-width:8px
|
||||||
|
|
||||||
|
class A start_node;
|
||||||
|
class B,C,E,F,H active_node;
|
||||||
|
class D unactive_node;
|
||||||
|
class G finish_node;
|
||||||
|
class I bugged_node
|
||||||
|
</pre>
|
||||||
|
<hr />
|
||||||
|
|
||||||
<h1 id="link-clicked">Anchor for "link-clicked" test</h1>
|
<h1 id="link-clicked">Anchor for "link-clicked" test</h1>
|
||||||
|
|
||||||
<script type="module">
|
<script type="module">
|
||||||
|
@ -75,6 +75,9 @@
|
|||||||
<li>
|
<li>
|
||||||
<h2><a href="./zenuml.html">ZenUML</a></h2>
|
<h2><a href="./zenuml.html">ZenUML</a></h2>
|
||||||
</li>
|
</li>
|
||||||
|
<li>
|
||||||
|
<h2><a href="./sankey.html">Sankey</a></h2>
|
||||||
|
</li>
|
||||||
</ul>
|
</ul>
|
||||||
</body>
|
</body>
|
||||||
</html>
|
</html>
|
||||||
|
@ -7,7 +7,6 @@
|
|||||||
<link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgo=" />
|
<link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgo=" />
|
||||||
<style>
|
<style>
|
||||||
div.mermaid {
|
div.mermaid {
|
||||||
/* font-family: 'trebuchet ms', verdana, arial; */
|
|
||||||
font-family: 'Courier New', Courier, monospace !important;
|
font-family: 'Courier New', Courier, monospace !important;
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
@ -17,37 +16,32 @@
|
|||||||
<h1>Pie chart demos</h1>
|
<h1>Pie chart demos</h1>
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
pie title Pets adopted by volunteers
|
pie title Pets adopted by volunteers
|
||||||
accTitle: simple pie char demo
|
accTitle: simple pie char demo
|
||||||
accDescr: pie chart with 3 sections: dogs, cats, rats. Most are dogs.
|
accDescr: pie chart with 3 sections: dogs, cats, rats. Most are dogs.
|
||||||
"Dogs" : 386
|
"Dogs": 386
|
||||||
"Cats" : 85
|
"Cats": 85
|
||||||
"Rats" : 15
|
"Rats": 15
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<hr />
|
<hr />
|
||||||
<pre class="mermaid">
|
<pre class="mermaid">
|
||||||
%%{init: {"pie": {"textPosition": 0.9}, "themeVariables": {"pieOuterStrokeWidth": "5px"}} }%%
|
%%{init: {"pie": {"textPosition": 0.9}, "themeVariables": {"pieOuterStrokeWidth": "5px"}}}%%
|
||||||
pie
|
pie
|
||||||
title Key elements in Product X
|
title Key elements in Product X
|
||||||
accTitle: Key elements in Product X
|
accTitle: Key elements in Product X
|
||||||
accDescr: This is a pie chart showing the key elements in Product X.
|
accDescr: This is a pie chart showing the key elements in Product X.
|
||||||
"Calcium" : 42.96
|
"Calcium": 42.96
|
||||||
"Potassium" : 50.05
|
"Potassium": 50.05
|
||||||
"Magnesium" : 10.01
|
"Magnesium": 10.01
|
||||||
"Iron" : 5
|
"Iron": 5
|
||||||
</pre>
|
</pre>
|
||||||
|
|
||||||
<script type="module">
|
<script type="module">
|
||||||
import mermaid from './mermaid.esm.mjs';
|
import mermaid from './mermaid.esm.mjs';
|
||||||
mermaid.initialize({
|
mermaid.initialize({
|
||||||
theme: 'forest',
|
theme: 'forest',
|
||||||
// themeCSS: '.node rect { fill: red; }',
|
|
||||||
logLevel: 3,
|
logLevel: 3,
|
||||||
securityLevel: 'loose',
|
securityLevel: 'loose',
|
||||||
// flowchart: { curve: 'basis' },
|
|
||||||
// gantt: { axisFormat: '%m/%d/%Y' },
|
|
||||||
sequence: { actorMargin: 50 },
|
|
||||||
// sequenceDiagram: { actorMargin: 300 } // deprecated
|
|
||||||
});
|
});
|
||||||
</script>
|
</script>
|
||||||
</body>
|
</body>
|
||||||
|
124
demos/sankey.html
Normal file
124
demos/sankey.html
Normal file
@ -0,0 +1,124 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en" xmlns="http://www.w3.org/1999/html">
|
||||||
|
<head>
|
||||||
|
<meta charset="utf-8" />
|
||||||
|
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||||
|
<title>Sankey Mermaid Quick Test Page</title>
|
||||||
|
<link rel="icon" type="image/png" href="data:image/png;base64,iVBORw0KGgo=" />
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<h1>Sankey diagram demos</h1>
|
||||||
|
<h2>FY20-21 Performance</h2>
|
||||||
|
<pre class="mermaid">
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
sankey:
|
||||||
|
showValues: true
|
||||||
|
prefix: $
|
||||||
|
suffix: B
|
||||||
|
width: 800
|
||||||
|
nodeAlignment: left
|
||||||
|
---
|
||||||
|
sankey-beta
|
||||||
|
Revenue,Expenses,10
|
||||||
|
Revenue,Profit,10
|
||||||
|
Expenses,Manufacturing,5
|
||||||
|
Expenses,Tax,3
|
||||||
|
Expenses,Research,2
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<h2>Energy flow</h2>
|
||||||
|
<pre class="mermaid">
|
||||||
|
---
|
||||||
|
config:
|
||||||
|
sankey:
|
||||||
|
showValues: false
|
||||||
|
width: 1200
|
||||||
|
height: 600
|
||||||
|
linkColor: gradient
|
||||||
|
nodeAlignment: justify
|
||||||
|
---
|
||||||
|
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
|
||||||
|
</pre>
|
||||||
|
|
||||||
|
<script type="module">
|
||||||
|
import mermaid from './mermaid.esm.mjs';
|
||||||
|
mermaid.initialize({
|
||||||
|
theme: 'default',
|
||||||
|
logLevel: 3,
|
||||||
|
securityLevel: 'loose',
|
||||||
|
startOnLoad: true,
|
||||||
|
});
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
@ -1,9 +1,36 @@
|
|||||||
version: '3.9'
|
version: '3.9'
|
||||||
services:
|
services:
|
||||||
mermaid:
|
mermaid:
|
||||||
image: node:18.16.0-alpine3.18
|
image: node:18.17.1-alpine3.18
|
||||||
stdin_open: true
|
stdin_open: true
|
||||||
tty: true
|
tty: true
|
||||||
working_dir: /mermaid
|
working_dir: /mermaid
|
||||||
|
mem_limit: '4G'
|
||||||
|
environment:
|
||||||
|
- NODE_OPTIONS=--max_old_space_size=4096
|
||||||
volumes:
|
volumes:
|
||||||
- ./:/mermaid
|
- ./:/mermaid
|
||||||
|
- root_cache:/root/.cache
|
||||||
|
- root_local:/root/.local
|
||||||
|
- root_npm:/root/.npm
|
||||||
|
ports:
|
||||||
|
- 9000:9000
|
||||||
|
- 3333:3333
|
||||||
|
cypress:
|
||||||
|
image: cypress/included:12.17.4
|
||||||
|
stdin_open: true
|
||||||
|
tty: true
|
||||||
|
working_dir: /mermaid
|
||||||
|
mem_limit: '2G'
|
||||||
|
entrypoint: cypress
|
||||||
|
environment:
|
||||||
|
- DISPLAY
|
||||||
|
volumes:
|
||||||
|
- ./:/mermaid
|
||||||
|
- /tmp/.X11-unix:/tmp/.X11-unix
|
||||||
|
network_mode: host
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
root_cache:
|
||||||
|
root_local:
|
||||||
|
root_npm:
|
||||||
|
176
docs/community/code.md
Normal file
176
docs/community/code.md
Normal file
@ -0,0 +1,176 @@
|
|||||||
|
> **Warning**
|
||||||
|
>
|
||||||
|
> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT.
|
||||||
|
>
|
||||||
|
> ## Please edit the corresponding file in [/packages/mermaid/src/docs/community/code.md](../../packages/mermaid/src/docs/community/code.md).
|
||||||
|
|
||||||
|
# Contributing Code
|
||||||
|
|
||||||
|
The basic steps for contributing code are:
|
||||||
|
|
||||||
|
```mermaid-example
|
||||||
|
graph LR
|
||||||
|
git[1. Checkout a git branch] --> codeTest[2. Write tests and code] --> doc[3. Update documentation] --> submit[4. Submit a PR] --> review[5. Review and merge]
|
||||||
|
```
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
graph LR
|
||||||
|
git[1. Checkout a git branch] --> codeTest[2. Write tests and code] --> doc[3. Update documentation] --> submit[4. Submit a PR] --> review[5. Review and merge]
|
||||||
|
```
|
||||||
|
|
||||||
|
1. **Create** and checkout a git branch and work on your code in the branch
|
||||||
|
2. Write and update **tests** (unit and perhaps even integration (e2e) tests) (If you do TDD/BDD, the order might be different.)
|
||||||
|
3. **Let users know** that things have changed or been added in the documents! This is often overlooked, but _critical_
|
||||||
|
4. **Submit** your code as a _pull request_.
|
||||||
|
5. Maintainers will **review** your code. If there are no changes necessary, the PR will be merged. Otherwise, make the requested changes and repeat.
|
||||||
|
|
||||||
|
## 1. Checkout a git branch
|
||||||
|
|
||||||
|
Mermaid uses a [Git Flow](https://guides.github.com/introduction/flow/)–inspired approach to branching.
|
||||||
|
|
||||||
|
Development is done in the `develop` branch.
|
||||||
|
|
||||||
|
Once development is done we create a `release/vX.X.X` branch from `develop` for testing.
|
||||||
|
|
||||||
|
Once the release happens we add a tag to the `release` branch and merge it with `master`. The live product and on-line documentation are what is in the `master` branch.
|
||||||
|
|
||||||
|
**All new work should be based on the `develop` branch.**
|
||||||
|
|
||||||
|
**When you are ready to do work, always, ALWAYS:**
|
||||||
|
|
||||||
|
1. Make sure you have the most up-to-date version of the `develop` branch. (fetch or pull to update it)
|
||||||
|
2. Check out the `develop` branch
|
||||||
|
3. Create a new branch for your work. Please name the branch following our naming convention below.
|
||||||
|
|
||||||
|
We use the following naming convention for branches:
|
||||||
|
|
||||||
|
```txt
|
||||||
|
[feature | bug | chore | docs]/[issue number]_[short description using dashes ('-') or underscores ('_') instead of spaces]
|
||||||
|
```
|
||||||
|
|
||||||
|
You can always check current [configuration of labelling and branch prefixes](https://github.com/mermaid-js/mermaid/blob/develop/.github/pr-labeler.yml)
|
||||||
|
|
||||||
|
- The first part is the **type** of change: a feature, bug, chore, or documentation change ('docs')
|
||||||
|
- followed by a _slash_ (which helps to group like types together in many git tools)
|
||||||
|
- followed by the **issue number**
|
||||||
|
- followed by an _underscore_ ('\_')
|
||||||
|
- followed by a short text description (but use dashes ('-') or underscores ('\_') instead of spaces)
|
||||||
|
|
||||||
|
If your work is specific to a single diagram type, it is a good idea to put the diagram type at the start of the description. This will help us keep release notes organized: it will help us keep changes for a diagram type together.
|
||||||
|
|
||||||
|
**Ex: A new feature described in issue 2945 that adds a new arrow type called 'florbs' to state diagrams**
|
||||||
|
|
||||||
|
`feature/2945_state-diagram-new-arrow-florbs`
|
||||||
|
|
||||||
|
**Ex: A bug described in issue 1123 that causes random ugly red text in multiple diagram types**
|
||||||
|
`bug/1123_fix_random_ugly_red_text`
|
||||||
|
|
||||||
|
## 2. Write Tests
|
||||||
|
|
||||||
|
Tests ensure that each function, module, or part of code does what it says it will do. This is critically
|
||||||
|
important when other changes are made to ensure that existing code is not broken (no regression).
|
||||||
|
|
||||||
|
Just as important, the tests act as _specifications:_ they specify what the code does (or should do).
|
||||||
|
Whenever someone is new to a section of code, they should be able to read the tests to get a thorough understanding of what it does and why.
|
||||||
|
|
||||||
|
If you are fixing a bug, you should add tests to ensure that your code has actually fixed the bug, to specify/describe what the code is doing, and to ensure the bug doesn't happen again.
|
||||||
|
(If there had been a test for the situation, the bug never would have happened in the first place.)
|
||||||
|
You may need to change existing tests if they were inaccurate.
|
||||||
|
|
||||||
|
If you are adding a feature, you will definitely need to add tests. Depending on the size of your feature, you may need to add integration tests.
|
||||||
|
|
||||||
|
### Unit Tests
|
||||||
|
|
||||||
|
Unit tests are tests that test a single function or module. They are the easiest to write and the fastest to run.
|
||||||
|
|
||||||
|
Unit tests are mandatory all code except the renderers. (The renderers are tested with integration tests.)
|
||||||
|
|
||||||
|
We use [Vitest](https://vitest.dev) to run unit tests.
|
||||||
|
|
||||||
|
You can use the following command to run the unit tests:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
pnpm test
|
||||||
|
```
|
||||||
|
|
||||||
|
When writing new tests, it's easier to have the tests automatically run as you make changes. You can do this by running the following command:
|
||||||
|
|
||||||
|
```sh
|
||||||
|
pnpm test:watch
|
||||||
|
```
|
||||||
|
|
||||||
|
### Integration/End-to-End (e2e) tests
|
||||||
|
|
||||||
|
These test the rendering and visual appearance of the diagrams.
|
||||||
|
This ensures that the rendering of that feature in the e2e will be reviewed in the release process going forward. Less chance that it breaks!
|
||||||
|
|
||||||
|
To start working with the e2e tests:
|
||||||
|
|
||||||
|
1. Run `pnpm dev` to start the dev server
|
||||||
|
2. Start **Cypress** by running `pnpm cypress:open`.
|
||||||
|
|
||||||
|
The rendering tests are very straightforward to create. There is a function `imgSnapshotTest`, which takes a diagram in text form and the mermaid options, and it renders that diagram in Cypress.
|
||||||
|
|
||||||
|
When running in CI it will take a snapshot of the rendered diagram and compare it with the snapshot from last build and flag it for review if it differs.
|
||||||
|
|
||||||
|
This is what a rendering test looks like:
|
||||||
|
|
||||||
|
```js
|
||||||
|
it('should render forks and joins', () => {
|
||||||
|
imgSnapshotTest(
|
||||||
|
`
|
||||||
|
stateDiagram
|
||||||
|
state fork_state <<fork>>
|
||||||
|
[*] --> fork_state
|
||||||
|
fork_state --> State2
|
||||||
|
fork_state --> State3
|
||||||
|
|
||||||
|
state join_state <<join>>
|
||||||
|
State2 --> join_state
|
||||||
|
State3 --> join_state
|
||||||
|
join_state --> State4
|
||||||
|
State4 --> [*]
|
||||||
|
`,
|
||||||
|
{ logLevel: 0 }
|
||||||
|
);
|
||||||
|
cy.get('svg');
|
||||||
|
});
|
||||||
|
```
|
||||||
|
|
||||||
|
**_\[TODO - running the tests against what is expected in development. ]_**
|
||||||
|
|
||||||
|
**_\[TODO - how to generate new screenshots]_**
|
||||||
|
....
|
||||||
|
|
||||||
|
## 3. Update Documentation
|
||||||
|
|
||||||
|
If the users have no way to know that things have changed, then you haven't really _fixed_ anything for the users; you've just added to making Mermaid feel broken.
|
||||||
|
Likewise, if users don't know that there is a new feature that you've implemented, it will forever remain unknown and unused.
|
||||||
|
|
||||||
|
The documentation has to be updated to users know that things have changed and added!
|
||||||
|
If you are adding a new feature, add `(v<MERMAID_RELEASE_VERSION>+)` in the title or description. It will be replaced automatically with the current version number when the release happens.
|
||||||
|
|
||||||
|
eg: `# Feature Name (v<MERMAID_RELEASE_VERSION>+)`
|
||||||
|
|
||||||
|
We know it can sometimes be hard to code _and_ write user documentation.
|
||||||
|
|
||||||
|
Our documentation is managed in `packages/mermaid/src/docs`. Details on how to edit is in the [Contributing Documentation](#contributing-documentation) section.
|
||||||
|
|
||||||
|
Create another issue specifically for the documentation.\
|
||||||
|
You will need to help with the PR, but definitely ask for help if you feel stuck.
|
||||||
|
When it feels hard to write stuff out, explaining it to someone and having that person ask you clarifying questions can often be 80% of the work!
|
||||||
|
|
||||||
|
When in doubt, write up and submit what you can. It can be clarified and refined later. (With documentation, something is better than nothing!)
|
||||||
|
|
||||||
|
## 4. Submit your pull request
|
||||||
|
|
||||||
|
**\[TODO - PR titles should start with (fix | feat | ....)]**
|
||||||
|
|
||||||
|
We make all changes via Pull Requests (PRs). As we have many Pull Requests from developers new to Mermaid, we have put in place a process wherein _knsv, Knut Sveidqvist_ is in charge of the final release process and the active maintainers are in charge of reviewing and merging most PRs.
|
||||||
|
|
||||||
|
- PRs will be reviewed by active maintainers, who will provide feedback and request changes as needed.
|
||||||
|
- The maintainers will request a review from knsv, if necessary.
|
||||||
|
- Once the PR is approved, the maintainers will merge the PR into the `develop` branch.
|
||||||
|
- When a release is ready, the `release/x.x.x` branch will be created, extensively tested and knsv will be in charge of the release process.
|
||||||
|
|
||||||
|
**Reminder: Pull Requests should be submitted to the develop branch.**
|
@ -6,15 +6,9 @@
|
|||||||
|
|
||||||
# Contributing to Mermaid
|
# Contributing to Mermaid
|
||||||
|
|
||||||
## Contents
|
> The following documentation describes how to work with Mermaid in your host environment.
|
||||||
|
> There's also a [Docker installation guide](../community/docker-development.md)
|
||||||
- [Technical Requirements and Setup](#technical-requirements-and-setup)
|
> if you prefer to work in a Docker environment.
|
||||||
- [Contributing Code](#contributing-code)
|
|
||||||
- [Contributing Documentation](#contributing-documentation)
|
|
||||||
- [Questions or Suggestions?](#questions-or-suggestions)
|
|
||||||
- [Last Words](#last-words)
|
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
So you want to help? That's great!
|
So you want to help? That's great!
|
||||||
|
|
||||||
@ -22,47 +16,68 @@ So you want to help? That's great!
|
|||||||
|
|
||||||
Here are a few things to get you started on the right path.
|
Here are a few things to get you started on the right path.
|
||||||
|
|
||||||
## Technical Requirements and Setup
|
## Get the Source Code
|
||||||
|
|
||||||
### Technical Requirements
|
In GitHub, you first **fork** a repository when you are going to make changes and submit pull requests.
|
||||||
|
|
||||||
These are the tools we use for working with the code and documentation.
|
Then you **clone** a copy to your local development machine (e.g. where you code) to make a copy with all the files to work with.
|
||||||
|
|
||||||
|
[Fork mermaid](https://github.com/mermaid-js/mermaid/fork) to start contributing to the main project and its documentation, or [search for other repositories](https://github.com/orgs/mermaid-js/repositories).
|
||||||
|
|
||||||
|
[Here is a GitHub document that gives an overview of the process.](https://docs.github.com/en/get-started/quickstart/fork-a-repo)
|
||||||
|
|
||||||
|
## Technical Requirements
|
||||||
|
|
||||||
|
> The following documentation describes how to work with Mermaid in your host environment.
|
||||||
|
> There's also a [Docker installation guide](../community/docker-development.md)
|
||||||
|
> if you prefer to work in a Docker environment.
|
||||||
|
|
||||||
|
These are the tools we use for working with the code and documentation:
|
||||||
|
|
||||||
- [volta](https://volta.sh/) to manage node versions.
|
- [volta](https://volta.sh/) to manage node versions.
|
||||||
- [Node.js](https://nodejs.org/en/). `volta install node`
|
- [Node.js](https://nodejs.org/en/). `volta install node`
|
||||||
- [pnpm](https://pnpm.io/) package manager. `volta install pnpm`
|
- [pnpm](https://pnpm.io/) package manager. `volta install pnpm`
|
||||||
- [npx](https://docs.npmjs.com/cli/v8/commands/npx) the packaged executor in npm. This is needed [to install pnpm.](#2-install-pnpm)
|
- [npx](https://docs.npmjs.com/cli/v8/commands/npx) the packaged executor in npm. This is needed [to install pnpm.](#install-packages)
|
||||||
|
|
||||||
Follow [the setup steps below](#setup) to install them and verify they are working
|
Follow the setup steps below to install them and start the development.
|
||||||
|
|
||||||
### Setup
|
## Setup and Launch
|
||||||
|
|
||||||
Follow these steps to set up the environment you need to work on code and/or documentation.
|
### Switch to project
|
||||||
|
|
||||||
#### 1. Fork and clone the repository
|
Once you have cloned the repository onto your development machine, change into the `mermaid` project folder (the top level directory of the mermaid project repository)
|
||||||
|
|
||||||
In GitHub, you first _fork_ a repository when you are going to make changes and submit pull requests.
|
|
||||||
|
|
||||||
Then you _clone_ a copy to your local development machine (e.g. where you code) to make a copy with all the files to work with.
|
|
||||||
|
|
||||||
[Here is a GitHub document that gives an overview of the process.](https://docs.github.com/en/get-started/quickstart/fork-a-repo)
|
|
||||||
|
|
||||||
#### 2. Install pnpm
|
|
||||||
|
|
||||||
Once you have cloned the repository onto your development machine, change into the `mermaid` project folder so that you can install `pnpm`. You will need `npx` to install pnpm because volta doesn't support it yet.
|
|
||||||
|
|
||||||
Ex:
|
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
# Change into the mermaid directory (the top level director of the mermaid project repository)
|
|
||||||
cd mermaid
|
cd mermaid
|
||||||
# npx is required for first install because volta does not support pnpm yet
|
|
||||||
npx pnpm install
|
|
||||||
```
|
```
|
||||||
|
|
||||||
#### 3. Verify Everything Is Working
|
### Install packages
|
||||||
|
|
||||||
Once you have installed pnpm, you can run the `test` script to verify that pnpm is working _and_ that the repository has been cloned correctly:
|
Run `npx pnpm install`. You will need `npx` for this because volta doesn't support it yet.
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx pnpm install # npx is required for first install
|
||||||
|
```
|
||||||
|
|
||||||
|
### Launch
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npx pnpm run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
Now you are ready to make your changes! Edit whichever files in `src` as required.
|
||||||
|
|
||||||
|
Open <http://localhost:9000> in your browser, after starting the dev server.
|
||||||
|
There is a list of demos that can be used to see and test your changes.
|
||||||
|
|
||||||
|
If you need a specific diagram, you can duplicate the `example.html` file in `/demos/dev` and add your own mermaid code to your copy.
|
||||||
|
|
||||||
|
That will be served at <http://localhost:9000/dev/your-file-name.html>.
|
||||||
|
After making code changes, the dev server will rebuild the mermaid library. You will need to reload the browser page yourself to see the changes. (PRs for auto reload are welcome!)
|
||||||
|
|
||||||
|
## Verify Everything is Working
|
||||||
|
|
||||||
|
You can run the `test` script to verify that pnpm is working _and_ that the repository has been cloned correctly:
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
pnpm test
|
pnpm test
|
||||||
@ -72,303 +87,6 @@ The `test` script and others are in the top-level `package.json` file.
|
|||||||
|
|
||||||
All tests should run successfully without any errors or failures. (You might see _lint_ or _formatting_ warnings; those are ok during this step.)
|
All tests should run successfully without any errors or failures. (You might see _lint_ or _formatting_ warnings; those are ok during this step.)
|
||||||
|
|
||||||
### Docker
|
|
||||||
|
|
||||||
If you are using docker and docker-compose, you have self-documented `run` bash script, which is a convenient alias for docker-compose commands:
|
|
||||||
|
|
||||||
```bash
|
|
||||||
./run install # npx pnpm install
|
|
||||||
./run test # pnpm test
|
|
||||||
```
|
|
||||||
|
|
||||||
## Contributing Code
|
|
||||||
|
|
||||||
The basic steps for contributing code are:
|
|
||||||
|
|
||||||
```mermaid-example
|
|
||||||
graph LR
|
|
||||||
git[1. Checkout a git branch] --> codeTest[2. Write tests and code] --> doc[3. Update documentation] --> submit[4. Submit a PR] --> review[5. Review and merge]
|
|
||||||
```
|
|
||||||
|
|
||||||
```mermaid
|
|
||||||
graph LR
|
|
||||||
git[1. Checkout a git branch] --> codeTest[2. Write tests and code] --> doc[3. Update documentation] --> submit[4. Submit a PR] --> review[5. Review and merge]
|
|
||||||
```
|
|
||||||
|
|
||||||
1. **Create** and checkout a git branch and work on your code in the branch
|
|
||||||
2. Write and update **tests** (unit and perhaps even integration (e2e) tests) (If you do TDD/BDD, the order might be different.)
|
|
||||||
3. **Let users know** that things have changed or been added in the documents! This is often overlooked, but _critical_
|
|
||||||
4. **Submit** your code as a _pull request_.
|
|
||||||
5. Maintainers will **review** your code. If there are no changes necessary, the PR will be merged. Otherwise, make the requested changes and repeat.
|
|
||||||
|
|
||||||
### 1. Checkout a git branch
|
|
||||||
|
|
||||||
Mermaid uses a [Git Flow](https://guides.github.com/introduction/flow/)–inspired approach to branching.
|
|
||||||
|
|
||||||
Development is done in the `develop` branch.
|
|
||||||
|
|
||||||
Once development is done we create a `release/vX.X.X` branch from `develop` for testing.
|
|
||||||
|
|
||||||
Once the release happens we add a tag to the `release` branch and merge it with `master`. The live product and on-line documentation are what is in the `master` branch.
|
|
||||||
|
|
||||||
**All new work should be based on the `develop` branch.**
|
|
||||||
|
|
||||||
**When you are ready to do work, always, ALWAYS:**
|
|
||||||
|
|
||||||
1. Make sure you have the most up-to-date version of the `develop` branch. (fetch or pull to update it)
|
|
||||||
2. Check out the `develop` branch
|
|
||||||
3. Create a new branch for your work. Please name the branch following our naming convention below.
|
|
||||||
|
|
||||||
We use the follow naming convention for branches:
|
|
||||||
|
|
||||||
```text
|
|
||||||
[feature | bug | chore | docs]/[issue number]_[short description using dashes ('-') or underscores ('_') instead of spaces]
|
|
||||||
```
|
|
||||||
|
|
||||||
- The first part is the **type** of change: a feature, bug, chore, or documentation change ('docs')
|
|
||||||
- followed by a _slash_ (which helps to group like types together in many git tools)
|
|
||||||
- followed by the **issue number**
|
|
||||||
- followed by an _underscore_ ('\_')
|
|
||||||
- followed by a short text description (but use dashes ('-') or underscores ('\_') instead of spaces)
|
|
||||||
|
|
||||||
If your work is specific to a single diagram type, it is a good idea to put the diagram type at the start of the description. This will help us keep release notes organized: it will help us keep changes for a diagram type together.
|
|
||||||
|
|
||||||
**Ex: A new feature described in issue 2945 that adds a new arrow type called 'florbs' to state diagrams**
|
|
||||||
|
|
||||||
`feature/2945_state-diagram-new-arrow-florbs`
|
|
||||||
|
|
||||||
**Ex: A bug described in issue 1123 that causes random ugly red text in multiple diagram types**
|
|
||||||
`bug/1123_fix_random_ugly_red_text`
|
|
||||||
|
|
||||||
### 2. Write Tests
|
|
||||||
|
|
||||||
Tests ensure that each function, module, or part of code does what it says it will do. This is critically
|
|
||||||
important when other changes are made to ensure that existing code is not broken (no regression).
|
|
||||||
|
|
||||||
Just as important, the tests act as _specifications:_ they specify what the code does (or should do).
|
|
||||||
Whenever someone is new to a section of code, they should be able to read the tests to get a thorough understanding of what it does and why.
|
|
||||||
|
|
||||||
If you are fixing a bug, you should add tests to ensure that your code has actually fixed the bug, to specify/describe what the code is doing, and to ensure the bug doesn't happen again.
|
|
||||||
(If there had been a test for the situation, the bug never would have happened in the first place.)
|
|
||||||
You may need to change existing tests if they were inaccurate.
|
|
||||||
|
|
||||||
If you are adding a feature, you will definitely need to add tests. Depending on the size of your feature, you may need to add integration tests.
|
|
||||||
|
|
||||||
#### Unit Tests
|
|
||||||
|
|
||||||
Unit tests are tests that test a single function or module. They are the easiest to write and the fastest to run.
|
|
||||||
|
|
||||||
Unit tests are mandatory all code except the renderers. (The renderers are tested with integration tests.)
|
|
||||||
|
|
||||||
We use [Vitest](https://vitest.dev) to run unit tests.
|
|
||||||
|
|
||||||
You can use the following command to run the unit tests:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
pnpm test
|
|
||||||
```
|
|
||||||
|
|
||||||
When writing new tests, it's easier to have the tests automatically run as you make changes. You can do this by running the following command:
|
|
||||||
|
|
||||||
```sh
|
|
||||||
pnpm test:watch
|
|
||||||
```
|
|
||||||
|
|
||||||
#### Integration/End-to-End (e2e) tests
|
|
||||||
|
|
||||||
These test the rendering and visual appearance of the diagrams.
|
|
||||||
This ensures that the rendering of that feature in the e2e will be reviewed in the release process going forward. Less chance that it breaks!
|
|
||||||
|
|
||||||
To start working with the e2e tests:
|
|
||||||
|
|
||||||
1. Run `pnpm dev` to start the dev server
|
|
||||||
2. Start **Cypress** by running `pnpm cypress:open`.
|
|
||||||
|
|
||||||
The rendering tests are very straightforward to create. There is a function `imgSnapshotTest`, which takes a diagram in text form and the mermaid options, and it renders that diagram in Cypress.
|
|
||||||
|
|
||||||
When running in CI it will take a snapshot of the rendered diagram and compare it with the snapshot from last build and flag it for review if it differs.
|
|
||||||
|
|
||||||
This is what a rendering test looks like:
|
|
||||||
|
|
||||||
```js
|
|
||||||
it('should render forks and joins', () => {
|
|
||||||
imgSnapshotTest(
|
|
||||||
`
|
|
||||||
stateDiagram
|
|
||||||
state fork_state <<fork>>
|
|
||||||
[*] --> fork_state
|
|
||||||
fork_state --> State2
|
|
||||||
fork_state --> State3
|
|
||||||
|
|
||||||
state join_state <<join>>
|
|
||||||
State2 --> join_state
|
|
||||||
State3 --> join_state
|
|
||||||
join_state --> State4
|
|
||||||
State4 --> [*]
|
|
||||||
`,
|
|
||||||
{ logLevel: 0 }
|
|
||||||
);
|
|
||||||
cy.get('svg');
|
|
||||||
});
|
|
||||||
```
|
|
||||||
|
|
||||||
**_\[TODO - running the tests against what is expected in development. ]_**
|
|
||||||
|
|
||||||
**_\[TODO - how to generate new screenshots]_**
|
|
||||||
....
|
|
||||||
|
|
||||||
### 3. Update Documentation
|
|
||||||
|
|
||||||
If the users have no way to know that things have changed, then you haven't really _fixed_ anything for the users; you've just added to making Mermaid feel broken.
|
|
||||||
Likewise, if users don't know that there is a new feature that you've implemented, it will forever remain unknown and unused.
|
|
||||||
|
|
||||||
The documentation has to be updated to users know that things have changed and added!
|
|
||||||
|
|
||||||
We know it can sometimes be hard to code _and_ write user documentation.
|
|
||||||
|
|
||||||
Our documentation is managed in `packages/mermaid/src/docs`. Details on how to edit is in the [Contributing Documentation](#contributing-documentation) section.
|
|
||||||
|
|
||||||
Create another issue specifically for the documentation.\
|
|
||||||
You will need to help with the PR, but definitely ask for help if you feel stuck.
|
|
||||||
When it feels hard to write stuff out, explaining it to someone and having that person ask you clarifying questions can often be 80% of the work!
|
|
||||||
|
|
||||||
When in doubt, write up and submit what you can. It can be clarified and refined later. (With documentation, something is better than nothing!)
|
|
||||||
|
|
||||||
### 4. Submit your pull request
|
|
||||||
|
|
||||||
**\[TODO - PR titles should start with (fix | feat | ....)]**
|
|
||||||
|
|
||||||
We make all changes via Pull Requests (PRs). As we have many Pull Requests from developers new to Mermaid, we have put in place a process wherein _knsv, Knut Sveidqvist_ is in charge of the final release process and the active maintainers are in charge of reviewing and merging most PRs.
|
|
||||||
|
|
||||||
- PRs will be reviewed by active maintainers, who will provide feedback and request changes as needed.
|
|
||||||
- The maintainers will request a review from knsv, if necessary.
|
|
||||||
- Once the PR is approved, the maintainers will merge the PR into the `develop` branch.
|
|
||||||
- When a release is ready, the `release/x.x.x` branch will be created, extensively tested and knsv will be in charge of the release process.
|
|
||||||
|
|
||||||
**Reminder: Pull Requests should be submitted to the develop branch.**
|
|
||||||
|
|
||||||
## Contributing Documentation
|
|
||||||
|
|
||||||
**_\[TODO: This section is still a WIP. It still needs MAJOR revision.]_**
|
|
||||||
|
|
||||||
If it is not in the documentation, it's like it never happened. Wouldn't that be sad? With all the effort that was put into the feature?
|
|
||||||
|
|
||||||
The docs are located in the `packages/mermaid/src/docs` folder and are written in Markdown. Just pick the right section and start typing.
|
|
||||||
|
|
||||||
The contents of [mermaid.js.org](https://mermaid.js.org/) are based on the docs from the `master` branch.
|
|
||||||
Updates committed to the `master` branch are reflected in the [Mermaid Docs](https://mermaid.js.org/) once published.
|
|
||||||
|
|
||||||
### How to Contribute to Documentation
|
|
||||||
|
|
||||||
We are a little less strict here, it is OK to commit directly in the `develop` branch if you are a collaborator.
|
|
||||||
|
|
||||||
The documentation is located in the `packages/mermaid/src/docs` directory and organized according to relevant subfolder.
|
|
||||||
|
|
||||||
The `docs` folder will be automatically generated when committing to `packages/mermaid/src/docs` and **should not** be edited manually.
|
|
||||||
|
|
||||||
```mermaid-example
|
|
||||||
flowchart LR
|
|
||||||
classDef default fill:#fff,color:black,stroke:black
|
|
||||||
|
|
||||||
source["files in /packages/mermaid/src/docs\n(changes should be done here)"] -- automatic processing\nto generate the final documentation--> published["files in /docs\ndisplayed on the official documentation site"]
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
```mermaid
|
|
||||||
flowchart LR
|
|
||||||
classDef default fill:#fff,color:black,stroke:black
|
|
||||||
|
|
||||||
source["files in /packages/mermaid/src/docs\n(changes should be done here)"] -- automatic processing\nto generate the final documentation--> published["files in /docs\ndisplayed on the official documentation site"]
|
|
||||||
|
|
||||||
```
|
|
||||||
|
|
||||||
You can use `note`, `tip`, `warning` and `danger` in triple backticks to add a note, tip, warning or danger box.
|
|
||||||
Do not use vitepress specific markdown syntax `::: warning` as it will not be processed correctly.
|
|
||||||
|
|
||||||
````
|
|
||||||
```note
|
|
||||||
Note content
|
|
||||||
```
|
|
||||||
|
|
||||||
```tip
|
|
||||||
Tip content
|
|
||||||
```
|
|
||||||
|
|
||||||
```warning
|
|
||||||
Warning content
|
|
||||||
```
|
|
||||||
|
|
||||||
```danger
|
|
||||||
Danger content
|
|
||||||
```
|
|
||||||
|
|
||||||
````
|
|
||||||
|
|
||||||
> **Note**
|
|
||||||
> If the change is _only_ to the documentation, you can get your changes published to the site quicker by making a PR to the `master` branch.
|
|
||||||
|
|
||||||
We encourage contributions to the documentation at [packages/mermaid/src/docs in the _develop_ branch](https://github.com/mermaid-js/mermaid/tree/develop/packages/mermaid/src/docs).
|
|
||||||
|
|
||||||
**_DO NOT CHANGE FILES IN `/docs`_**
|
|
||||||
|
|
||||||
### The official documentation site
|
|
||||||
|
|
||||||
**[The mermaid documentation site](https://mermaid.js.org/) is powered by [Vitepress](https://vitepress.vuejs.org/).**
|
|
||||||
|
|
||||||
To run the documentation site locally:
|
|
||||||
|
|
||||||
1. Run `pnpm --filter mermaid run docs:dev` to start the dev server. (Or `pnpm docs:dev` inside the `packages/mermaid` directory.)
|
|
||||||
2. Open <http://localhost:3333/> in your browser.
|
|
||||||
|
|
||||||
Markdown is used to format the text, for more information about Markdown [see the GitHub Markdown help page](https://help.github.com/en/github/writing-on-github/basic-writing-and-formatting-syntax).
|
|
||||||
|
|
||||||
To edit Docs on your computer:
|
|
||||||
|
|
||||||
_\[TODO: need to keep this in sync with [check out a git branch in Contributing Code above](#1-checkout-a-git-branch) ]_
|
|
||||||
|
|
||||||
1. Create a fork of the develop branch to work on.
|
|
||||||
2. Find the Markdown file (.md) to edit in the `packages/mermaid/src/docs` directory.
|
|
||||||
3. Make changes or add new documentation.
|
|
||||||
4. Commit changes to your branch and push it to GitHub (which should create a new branch).
|
|
||||||
5. Create a Pull Request of your fork.
|
|
||||||
|
|
||||||
To edit Docs on GitHub:
|
|
||||||
|
|
||||||
1. Login to [GitHub.com](https://www.github.com).
|
|
||||||
2. Navigate to [packages/mermaid/src/docs](https://github.com/mermaid-js/mermaid/tree/develop/packages/mermaid/src/docs) in the mermaid-js repository.
|
|
||||||
3. To edit a file, click the pencil icon at the top-right of the file contents panel.
|
|
||||||
4. Describe what you changed in the **Propose file change** section, located at the bottom of the page.
|
|
||||||
5. Submit your changes by clicking the button **Propose file change** at the bottom (by automatic creation of a fork and a new branch).
|
|
||||||
6. Visit the Actions tab in Github, `https://github.com/<Your Username>/mermaid/actions` and enable the actions for your fork. This will ensure that the documentation is built and updated in your fork.
|
|
||||||
7. Create a Pull Request of your newly forked branch by clicking the green **Create Pull Request** button.
|
|
||||||
|
|
||||||
### Documentation organization: Sidebar navigation
|
|
||||||
|
|
||||||
If you want to propose changes to how the documentation is _organized_, such as adding a new section or re-arranging or renaming a section, you must update the **sidebar navigation.**
|
|
||||||
|
|
||||||
The sidebar navigation is defined in [the vitepress configuration file config.ts](../.vitepress/config.ts).
|
|
||||||
|
|
||||||
## Questions or Suggestions?
|
|
||||||
|
|
||||||
#### First search to see if someone has already asked (and hopefully been answered) or suggested the same thing.
|
|
||||||
|
|
||||||
- Search in Discussions
|
|
||||||
- Search in open Issues
|
|
||||||
- Search in closed Issues
|
|
||||||
|
|
||||||
If you find an open issue or discussion thread that is similar to your question but isn't answered, you can let us know that you are also interested in it.
|
|
||||||
Use the GitHub reactions to add a thumbs-up to the issue or discussion thread.
|
|
||||||
|
|
||||||
This helps the team know the relative interest in something and helps them set priorities and assignments.
|
|
||||||
|
|
||||||
Feel free to add to the discussion on the issue or topic.
|
|
||||||
|
|
||||||
If you can't find anything that already addresses your question or suggestion, _open a new issue:_
|
|
||||||
|
|
||||||
Log in to [GitHub.com](https://www.github.com), open or append to an issue [using the GitHub issue tracker of the mermaid-js repository](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Area%3A+Documentation%22).
|
|
||||||
|
|
||||||
### How to Contribute a Suggestion
|
|
||||||
|
|
||||||
## Last Words
|
## Last Words
|
||||||
|
|
||||||
Don't get daunted if it is hard in the beginning. We have a great community with only encouraging words. So, if you get stuck, ask for help and hints in the Slack forum. If you want to show off something good, show it off there.
|
Don't get daunted if it is hard in the beginning. We have a great community with only encouraging words. So, if you get stuck, ask for help and hints in the Slack forum. If you want to show off something good, show it off there.
|
||||||
|
109
docs/community/docker-development.md
Normal file
109
docs/community/docker-development.md
Normal file
@ -0,0 +1,109 @@
|
|||||||
|
> **Warning**
|
||||||
|
>
|
||||||
|
> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT.
|
||||||
|
>
|
||||||
|
> ## Please edit the corresponding file in [/packages/mermaid/src/docs/community/docker-development.md](../../packages/mermaid/src/docs/community/docker-development.md).
|
||||||
|
|
||||||
|
# Contributing to Mermaid via Docker
|
||||||
|
|
||||||
|
> The following documentation describes how to work with Mermaid in a Docker environment.
|
||||||
|
> There's also a [host installation guide](../community/development.md)
|
||||||
|
> if you prefer to work without a Docker environment.
|
||||||
|
|
||||||
|
So you want to help? That's great!
|
||||||
|
|
||||||
|
![Image of happy people jumping with excitement](https://media.giphy.com/media/BlVnrxJgTGsUw/giphy.gif)
|
||||||
|
|
||||||
|
Here are a few things to get you started on the right path.
|
||||||
|
|
||||||
|
## Get the Source Code
|
||||||
|
|
||||||
|
In GitHub, you first **fork** a repository when you are going to make changes and submit pull requests.
|
||||||
|
|
||||||
|
Then you **clone** a copy to your local development machine (e.g. where you code) to make a copy with all the files to work with.
|
||||||
|
|
||||||
|
[Fork mermaid](https://github.com/mermaid-js/mermaid/fork) to start contributing to the main project and its documentation, or [search for other repositories](https://github.com/orgs/mermaid-js/repositories).
|
||||||
|
|
||||||
|
[Here is a GitHub document that gives an overview of the process.](https://docs.github.com/en/get-started/quickstart/fork-a-repo)
|
||||||
|
|
||||||
|
## Technical Requirements
|
||||||
|
|
||||||
|
> The following documentation describes how to work with Mermaid in a Docker environment.
|
||||||
|
> There's also a [host installation guide](../community/development.md)
|
||||||
|
> if you prefer to work without a Docker environment.
|
||||||
|
|
||||||
|
[Install Docker](https://docs.docker.com/engine/install/). And that is pretty much all you need.
|
||||||
|
|
||||||
|
Optionally, to run GUI (Cypress) within Docker you will also need an X11 server installed.
|
||||||
|
You might already have it installed, so check this by running:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
echo $DISPLAY
|
||||||
|
```
|
||||||
|
|
||||||
|
If the `$DISPLAY` variable is not empty, then an X11 server is running. Otherwise you may need to install one.
|
||||||
|
|
||||||
|
## Setup and Launch
|
||||||
|
|
||||||
|
### Switch to project
|
||||||
|
|
||||||
|
Once you have cloned the repository onto your development machine, change into the `mermaid` project folder (the top level directory of the mermaid project repository)
|
||||||
|
|
||||||
|
```bash
|
||||||
|
cd mermaid
|
||||||
|
```
|
||||||
|
|
||||||
|
### Make `./run` executable
|
||||||
|
|
||||||
|
For development using Docker there is a self-documented `run` bash script, which provides convenient aliases for `docker compose` commands.
|
||||||
|
|
||||||
|
Ensure `./run` script is executable:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
chmod +x run
|
||||||
|
```
|
||||||
|
|
||||||
|
> **💡 Tip**
|
||||||
|
> To get detailed help simply type `./run` or `./run help`.
|
||||||
|
>
|
||||||
|
> It also has short _Development quick start guide_ embedded.
|
||||||
|
|
||||||
|
### Install packages
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./run pnpm install # Install packages
|
||||||
|
```
|
||||||
|
|
||||||
|
### Launch
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./run dev
|
||||||
|
```
|
||||||
|
|
||||||
|
Now you are ready to make your changes! Edit whichever files in `src` as required.
|
||||||
|
|
||||||
|
Open <http://localhost:9000> in your browser, after starting the dev server.
|
||||||
|
There is a list of demos that can be used to see and test your changes.
|
||||||
|
|
||||||
|
If you need a specific diagram, you can duplicate the `example.html` file in `/demos/dev` and add your own mermaid code to your copy.
|
||||||
|
|
||||||
|
That will be served at <http://localhost:9000/dev/your-file-name.html>.
|
||||||
|
After making code changes, the dev server will rebuild the mermaid library. You will need to reload the browser page yourself to see the changes. (PRs for auto reload are welcome!)
|
||||||
|
|
||||||
|
## Verify Everything is Working
|
||||||
|
|
||||||
|
```bash
|
||||||
|
./run pnpm test
|
||||||
|
```
|
||||||
|
|
||||||
|
The `test` script and others are in the top-level `package.json` file.
|
||||||
|
|
||||||
|
All tests should run successfully without any errors or failures. (You might see _lint_ or _formatting_ warnings; those are ok during this step.)
|
||||||
|
|
||||||
|
## Last Words
|
||||||
|
|
||||||
|
Don't get daunted if it is hard in the beginning. We have a great community with only encouraging words. So, if you get stuck, ask for help and hints in the Slack forum. If you want to show off something good, show it off there.
|
||||||
|
|
||||||
|
[Join our Slack community if you want closer contact!](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE)
|
||||||
|
|
||||||
|
![Image of superhero wishing you good luck](https://media.giphy.com/media/l49JHz7kJvl6MCj3G/giphy.gif)
|
105
docs/community/documentation.md
Normal file
105
docs/community/documentation.md
Normal file
@ -0,0 +1,105 @@
|
|||||||
|
> **Warning**
|
||||||
|
>
|
||||||
|
> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT.
|
||||||
|
>
|
||||||
|
> ## Please edit the corresponding file in [/packages/mermaid/src/docs/community/documentation.md](../../packages/mermaid/src/docs/community/documentation.md).
|
||||||
|
|
||||||
|
# Contributing Documentation
|
||||||
|
|
||||||
|
**_\[TODO: This section is still a WIP. It still needs MAJOR revision.]_**
|
||||||
|
|
||||||
|
If it is not in the documentation, it's like it never happened. Wouldn't that be sad? With all the effort that was put into the feature?
|
||||||
|
|
||||||
|
The docs are located in the `packages/mermaid/src/docs` folder and are written in Markdown. Just pick the right section and start typing.
|
||||||
|
|
||||||
|
The contents of [mermaid.js.org](https://mermaid.js.org/) are based on the docs from the `master` branch.
|
||||||
|
Updates committed to the `master` branch are reflected in the [Mermaid Docs](https://mermaid.js.org/) once published.
|
||||||
|
|
||||||
|
## How to Contribute to Documentation
|
||||||
|
|
||||||
|
We are a little less strict here, it is OK to commit directly in the `develop` branch if you are a collaborator.
|
||||||
|
|
||||||
|
The documentation is located in the `packages/mermaid/src/docs` directory and organized according to relevant subfolder.
|
||||||
|
|
||||||
|
The `docs` folder will be automatically generated when committing to `packages/mermaid/src/docs` and **should not** be edited manually.
|
||||||
|
|
||||||
|
```mermaid-example
|
||||||
|
flowchart LR
|
||||||
|
classDef default fill:#fff,color:black,stroke:black
|
||||||
|
|
||||||
|
source["files in /packages/mermaid/src/docs\n(changes should be done here)"] -- automatic processing\nto generate the final documentation--> published["files in /docs\ndisplayed on the official documentation site"]
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
flowchart LR
|
||||||
|
classDef default fill:#fff,color:black,stroke:black
|
||||||
|
|
||||||
|
source["files in /packages/mermaid/src/docs\n(changes should be done here)"] -- automatic processing\nto generate the final documentation--> published["files in /docs\ndisplayed on the official documentation site"]
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
You can use `note`, `tip`, `warning` and `danger` in triple backticks to add a note, tip, warning or danger box.
|
||||||
|
Do not use vitepress specific markdown syntax `::: warning` as it will not be processed correctly.
|
||||||
|
|
||||||
|
````markdown
|
||||||
|
```note
|
||||||
|
Note content
|
||||||
|
```
|
||||||
|
|
||||||
|
```tip
|
||||||
|
Tip content
|
||||||
|
```
|
||||||
|
|
||||||
|
```warning
|
||||||
|
Warning content
|
||||||
|
```
|
||||||
|
|
||||||
|
```danger
|
||||||
|
Danger content
|
||||||
|
```
|
||||||
|
````
|
||||||
|
|
||||||
|
> **Note**
|
||||||
|
> If the change is _only_ to the documentation, you can get your changes published to the site quicker by making a PR to the `master` branch. In that case, your branch should be based on master, not develop.
|
||||||
|
|
||||||
|
We encourage contributions to the documentation at [packages/mermaid/src/docs in the _develop_ branch](https://github.com/mermaid-js/mermaid/tree/develop/packages/mermaid/src/docs).
|
||||||
|
|
||||||
|
**_DO NOT CHANGE FILES IN `/docs`_**
|
||||||
|
|
||||||
|
## The official documentation site
|
||||||
|
|
||||||
|
**[The mermaid documentation site](https://mermaid.js.org/) is powered by [Vitepress](https://vitepress.vuejs.org/).**
|
||||||
|
|
||||||
|
To run the documentation site locally:
|
||||||
|
|
||||||
|
1. Run `pnpm --filter mermaid run docs:dev` to start the dev server. (Or `pnpm docs:dev` inside the `packages/mermaid` directory.)
|
||||||
|
2. Open <http://localhost:3333/> in your browser.
|
||||||
|
|
||||||
|
Markdown is used to format the text, for more information about Markdown [see the GitHub Markdown help page](https://help.github.com/en/github/writing-on-github/basic-writing-and-formatting-syntax).
|
||||||
|
|
||||||
|
To edit Docs on your computer:
|
||||||
|
|
||||||
|
_\[TODO: need to keep this in sync with [check out a git branch in Contributing Code above](#1-checkout-a-git-branch) ]_
|
||||||
|
|
||||||
|
1. Create a fork of the develop branch to work on.
|
||||||
|
2. Find the Markdown file (.md) to edit in the `packages/mermaid/src/docs` directory.
|
||||||
|
3. Make changes or add new documentation.
|
||||||
|
4. Commit changes to your branch and push it to GitHub (which should create a new branch).
|
||||||
|
5. Create a Pull Request from the branch of your fork.
|
||||||
|
|
||||||
|
To edit Docs on GitHub:
|
||||||
|
|
||||||
|
1. Login to [GitHub.com](https://www.github.com).
|
||||||
|
2. Navigate to [packages/mermaid/src/docs](https://github.com/mermaid-js/mermaid/tree/develop/packages/mermaid/src/docs) in the mermaid-js repository.
|
||||||
|
3. To edit a file, click the pencil icon at the top-right of the file contents panel.
|
||||||
|
4. Describe what you changed in the **Propose file change** section, located at the bottom of the page.
|
||||||
|
5. Submit your changes by clicking the button **Propose file change** at the bottom (by automatic creation of a fork and a new branch).
|
||||||
|
6. Visit the Actions tab in Github, `https://github.com/<Your Username>/mermaid/actions` and enable the actions for your fork. This will ensure that the documentation is built and updated in your fork.
|
||||||
|
7. Create a Pull Request of your newly forked branch by clicking the green **Create Pull Request** button.
|
||||||
|
|
||||||
|
## Documentation organization: Sidebar navigation
|
||||||
|
|
||||||
|
If you want to propose changes to how the documentation is _organized_, such as adding a new section or re-arranging or renaming a section, you must update the **sidebar navigation.**
|
||||||
|
|
||||||
|
The sidebar navigation is defined in [the vitepress configuration file config.ts](../.vitepress/config.ts).
|
@ -1,74 +0,0 @@
|
|||||||
> **Warning**
|
|
||||||
>
|
|
||||||
> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT.
|
|
||||||
>
|
|
||||||
> ## Please edit the corresponding file in [/packages/mermaid/src/docs/community/n00b-overview.md](../../packages/mermaid/src/docs/community/n00b-overview.md).
|
|
||||||
|
|
||||||
# Overview for Beginners
|
|
||||||
|
|
||||||
**Explaining with a Diagram**
|
|
||||||
|
|
||||||
A picture is worth a thousand words, a good diagram is undoubtedly worth more. They make understanding easier.
|
|
||||||
|
|
||||||
## Creating and Maintaining Diagrams
|
|
||||||
|
|
||||||
Anyone who has used Visio, or (God Forbid) Excel to make a Gantt Chart, knows how hard it is to create, edit and maintain good visualizations.
|
|
||||||
|
|
||||||
Diagrams/Charts are significant but also become obsolete/inaccurate very fast. This catch-22 hobbles the productivity of teams.
|
|
||||||
|
|
||||||
# Doc Rot in Diagrams
|
|
||||||
|
|
||||||
Doc-Rot kills diagrams as quickly as it does text, but it takes hours in a desktop application to produce a diagram.
|
|
||||||
|
|
||||||
Mermaid seeks to change using markdown-inspired syntax. The process is a quicker, less complicated, and more convenient way of going from concept to visualization.
|
|
||||||
|
|
||||||
It is a relatively straightforward solution to a significant hurdle with the software teams.
|
|
||||||
|
|
||||||
# Definition of Terms/ Dictionary
|
|
||||||
|
|
||||||
**Mermaid text definitions can be saved for later reuse and editing.**
|
|
||||||
|
|
||||||
> These are the Mermaid diagram definitions inside `<div>` tags, with the `class=mermaid`.
|
|
||||||
|
|
||||||
```html
|
|
||||||
<pre class="mermaid">
|
|
||||||
graph TD
|
|
||||||
A[Client] --> B[Load Balancer]
|
|
||||||
B --> C[Server01]
|
|
||||||
B --> D[Server02]
|
|
||||||
</pre>
|
|
||||||
```
|
|
||||||
|
|
||||||
**render**
|
|
||||||
|
|
||||||
> This is the core function of the Mermaid API. It reads all the `Mermaid Definitions` inside `div` tags and returns an SVG file, based on the definition.
|
|
||||||
|
|
||||||
**Nodes**
|
|
||||||
|
|
||||||
> These are the boxes that contain text or otherwise discrete pieces of each diagram, separated generally by arrows, except for Gantt Charts and User Journey Diagrams. They will be referred often in the instructions. Read for Diagram Specific [Syntax](../intro/n00b-syntaxReference.md)
|
|
||||||
|
|
||||||
## Advantages of using Mermaid
|
|
||||||
|
|
||||||
- Ease to generate, modify and render diagrams when you make them.
|
|
||||||
- The number of integrations and plugins it has.
|
|
||||||
- You can add it to your or companies website.
|
|
||||||
- Diagrams can be created through comments like this in a script:
|
|
||||||
|
|
||||||
## The catch-22 of Diagrams and Charts:
|
|
||||||
|
|
||||||
**Diagramming and charting is a large waste of developer's time, but not having diagrams ruins productivity.**
|
|
||||||
|
|
||||||
Mermaid solves this by reducing the time and effort required to create diagrams and charts.
|
|
||||||
|
|
||||||
Because, the text base for the diagrams allows it to be updated easily. Also, it can be made part of production scripts (and other pieces of code). So less time is spent on documenting, as a separate task.
|
|
||||||
|
|
||||||
## Catching up with Development
|
|
||||||
|
|
||||||
Being based on markdown, Mermaid can be used, not only by accomplished front-end developers, but by most computer savvy people to render diagrams, at much faster speeds.
|
|
||||||
In fact one can pick up the syntax for it quite easily from the examples given and there are many tutorials available in the internet.
|
|
||||||
|
|
||||||
## Mermaid is for everyone.
|
|
||||||
|
|
||||||
Video [Tutorials](https://mermaid.js.org/config/Tutorials.html) are also available for the mermaid [live editor](https://mermaid.live/).
|
|
||||||
|
|
||||||
Alternatively you can use Mermaid [Plug-Ins](https://mermaid-js.github.io/mermaid/#/./integrations), with tools you already use, like Google Docs.
|
|
@ -10,7 +10,7 @@
|
|||||||
|
|
||||||
#### Grammar
|
#### Grammar
|
||||||
|
|
||||||
This would be to define a jison grammar for the new diagram type. That should start with a way to identify that the text in the mermaid tag is a diagram of that type. Create a new folder under diagrams for your new diagram type and a parser folder in it. This leads us to step 2.
|
This would be to define a JISON grammar for the new diagram type. That should start with a way to identify that the text in the mermaid tag is a diagram of that type. Create a new folder under diagrams for your new diagram type and a parser folder in it. This leads us to step 2.
|
||||||
|
|
||||||
For instance:
|
For instance:
|
||||||
|
|
||||||
@ -19,7 +19,7 @@ For instance:
|
|||||||
|
|
||||||
#### Store data found during parsing
|
#### Store data found during parsing
|
||||||
|
|
||||||
There are some jison specific sub steps here where the parser stores the data encountered when parsing the diagram, this data is later used by the renderer. You can during the parsing call a object provided to the parser by the user of the parser. This object can be called during parsing for storing data.
|
There are some jison specific sub steps here where the parser stores the data encountered when parsing the diagram, this data is later used by the renderer. You can during the parsing call an object provided to the parser by the user of the parser. This object can be called during parsing for storing data.
|
||||||
|
|
||||||
```jison
|
```jison
|
||||||
statement
|
statement
|
||||||
@ -35,7 +35,7 @@ In the extract of the grammar above, it is defined that a call to the setTitle m
|
|||||||
> **Note**
|
> **Note**
|
||||||
> Make sure that the `parseError` function for the parser is defined and calling `mermaid.parseError`. This way a common way of detecting parse errors is provided for the end-user.
|
> Make sure that the `parseError` function for the parser is defined and calling `mermaid.parseError`. This way a common way of detecting parse errors is provided for the end-user.
|
||||||
|
|
||||||
For more info look in the example diagram type:
|
For more info look at the example diagram type:
|
||||||
|
|
||||||
The `yy` object has the following function:
|
The `yy` object has the following function:
|
||||||
|
|
||||||
@ -54,15 +54,15 @@ parser.yy = db;
|
|||||||
|
|
||||||
### Step 2: Rendering
|
### Step 2: Rendering
|
||||||
|
|
||||||
Write a renderer that given the data found during parsing renders the diagram. To look at an example look at sequenceRenderer.js rather then the flowchart renderer as this is a more generic example.
|
Write a renderer that given the data found during parsing renders the diagram. To look at an example look at sequenceRenderer.js rather than the flowchart renderer as this is a more generic example.
|
||||||
|
|
||||||
Place the renderer in the diagram folder.
|
Place the renderer in the diagram folder.
|
||||||
|
|
||||||
### Step 3: Detection of the new diagram type
|
### Step 3: Detection of the new diagram type
|
||||||
|
|
||||||
The second thing to do is to add the capability to detect the new diagram to type to the detectType in utils.js. The detection should return a key for the new diagram type.
|
The second thing to do is to add the capability to detect the new diagram to type to the detectType in `diagram-api/detectType.ts`. The detection should return a key for the new diagram type.
|
||||||
[This key will be used to as the aria roledescription](#aria-roledescription), so it should be a word that clearly describes the diagram type.
|
[This key will be used to as the aria roledescription](#aria-roledescription), so it should be a word that clearly describes the diagram type.
|
||||||
For example, if your new diagram use a UML deployment diagram, a good key would be "UMLDeploymentDiagram" because assistive technologies such as a screen reader
|
For example, if your new diagram uses a UML deployment diagram, a good key would be "UMLDeploymentDiagram" because assistive technologies such as a screen reader
|
||||||
would voice that as "U-M-L Deployment diagram." Another good key would be "deploymentDiagram" because that would be voiced as "Deployment Diagram." A bad key would be "deployment" because that would not sufficiently describe the diagram.
|
would voice that as "U-M-L Deployment diagram." Another good key would be "deploymentDiagram" because that would be voiced as "Deployment Diagram." A bad key would be "deployment" because that would not sufficiently describe the diagram.
|
||||||
|
|
||||||
Note that the diagram type key does not have to be the same as the diagram keyword chosen for the [grammar](#grammar), but it is helpful if they are the same.
|
Note that the diagram type key does not have to be the same as the diagram keyword chosen for the [grammar](#grammar), but it is helpful if they are the same.
|
||||||
@ -122,54 +122,7 @@ There are a few features that are common between the different types of diagrams
|
|||||||
- Themes, there is a common way to modify the styling of diagrams in Mermaid.
|
- Themes, there is a common way to modify the styling of diagrams in Mermaid.
|
||||||
- Comments should follow mermaid standards
|
- Comments should follow mermaid standards
|
||||||
|
|
||||||
Here some pointers on how to handle these different areas.
|
Here are some pointers on how to handle these different areas.
|
||||||
|
|
||||||
#### [Directives](../config/directives.md)
|
|
||||||
|
|
||||||
Here is example handling from flowcharts:
|
|
||||||
Jison:
|
|
||||||
|
|
||||||
```jison
|
|
||||||
/* lexical grammar */
|
|
||||||
%lex
|
|
||||||
%x open_directive
|
|
||||||
%x type_directive
|
|
||||||
%x arg_directive
|
|
||||||
%x close_directive
|
|
||||||
|
|
||||||
\%\%\{ { this.begin('open_directive'); return 'open_directive'; }
|
|
||||||
<open_directive>((?:(?!\}\%\%)[^:.])*) { this.begin('type_directive'); return 'type_directive'; }
|
|
||||||
<type_directive>":" { this.popState(); this.begin('arg_directive'); return ':'; }
|
|
||||||
<type_directive,arg_directive>\}\%\% { this.popState(); this.popState(); return 'close_directive'; }
|
|
||||||
<arg_directive>((?:(?!\}\%\%).|\n)*) return 'arg_directive';
|
|
||||||
|
|
||||||
/* language grammar */
|
|
||||||
|
|
||||||
/* ... */
|
|
||||||
|
|
||||||
directive
|
|
||||||
: openDirective typeDirective closeDirective separator
|
|
||||||
| openDirective typeDirective ':' argDirective closeDirective separator
|
|
||||||
;
|
|
||||||
|
|
||||||
openDirective
|
|
||||||
: open_directive { yy.parseDirective('%%{', 'open_directive'); }
|
|
||||||
;
|
|
||||||
|
|
||||||
typeDirective
|
|
||||||
: type_directive { yy.parseDirective($1, 'type_directive'); }
|
|
||||||
;
|
|
||||||
|
|
||||||
argDirective
|
|
||||||
: arg_directive { $1 = $1.trim().replace(/'/g, '"'); yy.parseDirective($1, 'arg_directive'); }
|
|
||||||
;
|
|
||||||
|
|
||||||
closeDirective
|
|
||||||
: close_directive { yy.parseDirective('}%%', 'close_directive', 'flowchart'); }
|
|
||||||
;
|
|
||||||
```
|
|
||||||
|
|
||||||
It is probably a good idea to keep the handling similar to this in your new diagram. The parseDirective function is provided by the mermaidAPI.
|
|
||||||
|
|
||||||
## Accessibility
|
## Accessibility
|
||||||
|
|
||||||
@ -187,9 +140,9 @@ See [the definition of aria-roledescription](https://www.w3.org/TR/wai-aria-1.1/
|
|||||||
|
|
||||||
### accessible title and description
|
### accessible title and description
|
||||||
|
|
||||||
The syntax for accessible titles and descriptions is described in [the Accessibility documenation section.](../config/accessibility.md)
|
The syntax for accessible titles and descriptions is described in [the Accessibility documentation section.](../config/accessibility.md)
|
||||||
|
|
||||||
In a similar way to the directives, the jison syntax are quite similar between the diagrams.
|
As a design goal, the jison syntax should be similar between the diagrams.
|
||||||
|
|
||||||
```jison
|
```jison
|
||||||
|
|
||||||
|
26
docs/community/questions-and-suggestions.md
Normal file
26
docs/community/questions-and-suggestions.md
Normal file
@ -0,0 +1,26 @@
|
|||||||
|
> **Warning**
|
||||||
|
>
|
||||||
|
> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT.
|
||||||
|
>
|
||||||
|
> ## Please edit the corresponding file in [/packages/mermaid/src/docs/community/questions-and-suggestions.md](../../packages/mermaid/src/docs/community/questions-and-suggestions.md).
|
||||||
|
|
||||||
|
# Questions or Suggestions?
|
||||||
|
|
||||||
|
**_\[TODO: This section is still a WIP. It still needs MAJOR revision.]_**
|
||||||
|
|
||||||
|
## First search to see if someone has already asked (and hopefully been answered) or suggested the same thing.
|
||||||
|
|
||||||
|
- Search in Discussions
|
||||||
|
- Search in open Issues
|
||||||
|
- Search in closed Issues
|
||||||
|
|
||||||
|
If you find an open issue or discussion thread that is similar to your question but isn't answered, you can let us know that you are also interested in it.
|
||||||
|
Use the GitHub reactions to add a thumbs-up to the issue or discussion thread.
|
||||||
|
|
||||||
|
This helps the team know the relative interest in something and helps them set priorities and assignments.
|
||||||
|
|
||||||
|
Feel free to add to the discussion on the issue or topic.
|
||||||
|
|
||||||
|
If you can't find anything that already addresses your question or suggestion, _open a new issue:_
|
||||||
|
|
||||||
|
Log in to [GitHub.com](https://www.github.com), open or append to an issue [using the GitHub issue tracker of the mermaid-js repository](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Area%3A+Documentation%22).
|
@ -26,9 +26,13 @@ The definitions that can be generated the Live-Editor are also backwards-compati
|
|||||||
|
|
||||||
[Eddie Jaoude: Can you code your diagrams?](https://www.youtube.com/watch?v=9HZzKkAqrX8)
|
[Eddie Jaoude: Can you code your diagrams?](https://www.youtube.com/watch?v=9HZzKkAqrX8)
|
||||||
|
|
||||||
|
## Mermaid with OpenAI
|
||||||
|
|
||||||
|
[Elle Neal: Mind Mapping with AI: An Accessible Approach for Neurodiverse Learners Tutorial:](https://medium.com/@elle.neal_71064/mind-mapping-with-ai-an-accessible-approach-for-neurodiverse-learners-1a74767359ff), [Demo:](https://databutton.com/v/jk9vrghc)
|
||||||
|
|
||||||
## Mermaid with HTML
|
## Mermaid with HTML
|
||||||
|
|
||||||
Examples are provided in [Getting Started](../intro/n00b-gettingStarted.md)
|
Examples are provided in [Getting Started](../intro/getting-started.md)
|
||||||
|
|
||||||
**CodePen Examples:**
|
**CodePen Examples:**
|
||||||
|
|
||||||
|
@ -2,9 +2,9 @@
|
|||||||
>
|
>
|
||||||
> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT.
|
> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT.
|
||||||
>
|
>
|
||||||
> ## Please edit the corresponding file in [/packages/mermaid/src/docs/config/n00b-advanced.md](../../packages/mermaid/src/docs/config/n00b-advanced.md).
|
> ## Please edit the corresponding file in [/packages/mermaid/src/docs/config/advanced.md](../../packages/mermaid/src/docs/config/advanced.md).
|
||||||
|
|
||||||
# Advanced n00b mermaid (Coming soon..)
|
# Advanced mermaid (Coming soon..)
|
||||||
|
|
||||||
## splitting mermaid code from html
|
## splitting mermaid code from html
|
||||||
|
|
@ -10,10 +10,41 @@ When mermaid starts, configuration is extracted to determine a configuration to
|
|||||||
|
|
||||||
- The default configuration
|
- The default configuration
|
||||||
- Overrides at the site level are set by the initialize call, and will be applied to all diagrams in the site/app. The term for this is the **siteConfig**.
|
- Overrides at the site level are set by the initialize call, and will be applied to all diagrams in the site/app. The term for this is the **siteConfig**.
|
||||||
- Directives - diagram authors can update select configuration parameters directly in the diagram code via directives. These are applied to the render config.
|
- Frontmatter (v\<MERMAID_RELEASE_VERSION>+) - diagram authors can update select configuration parameters in the frontmatter of the diagram. These are applied to the render config.
|
||||||
|
- Directives (Deprecated by Frontmatter) - diagram authors can update select configuration parameters directly in the diagram code via directives. These are applied to the render config.
|
||||||
|
|
||||||
**The render config** is configuration that is used when rendering by applying these configurations.
|
**The render config** is configuration that is used when rendering by applying these configurations.
|
||||||
|
|
||||||
|
## Frontmatter config
|
||||||
|
|
||||||
|
The entire mermaid configuration (except the secure configs) can be overridden by the diagram author in the frontmatter of the diagram. The frontmatter is a YAML block at the top of the diagram.
|
||||||
|
|
||||||
|
```mermaid-example
|
||||||
|
---
|
||||||
|
title: Hello Title
|
||||||
|
config:
|
||||||
|
theme: base
|
||||||
|
themeVariables:
|
||||||
|
primaryColor: "#00ff00"
|
||||||
|
---
|
||||||
|
flowchart
|
||||||
|
Hello --> World
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
|
```mermaid
|
||||||
|
---
|
||||||
|
title: Hello Title
|
||||||
|
config:
|
||||||
|
theme: base
|
||||||
|
themeVariables:
|
||||||
|
primaryColor: "#00ff00"
|
||||||
|
---
|
||||||
|
flowchart
|
||||||
|
Hello --> World
|
||||||
|
|
||||||
|
```
|
||||||
|
|
||||||
## Theme configuration
|
## Theme configuration
|
||||||
|
|
||||||
## Starting mermaid
|
## Starting mermaid
|
||||||
|
@ -6,6 +6,9 @@
|
|||||||
|
|
||||||
# Directives
|
# Directives
|
||||||
|
|
||||||
|
> **Warning**
|
||||||
|
> Directives are deprecated from v\<MERMAID_RELEASE_VERSION>. Please use the `config` key in frontmatter to pass configuration. See [Configuration](./configuration.md) for more details.
|
||||||
|
|
||||||
## Directives
|
## Directives
|
||||||
|
|
||||||
Directives give a diagram author the capability to alter the appearance of a diagram before rendering by changing the applied configuration.
|
Directives give a diagram author the capability to alter the appearance of a diagram before rendering by changing the applied configuration.
|
||||||
@ -123,7 +126,7 @@ The following code snippet changes `theme` to `forest`:
|
|||||||
|
|
||||||
`%%{init: { "theme": "forest" } }%%`
|
`%%{init: { "theme": "forest" } }%%`
|
||||||
|
|
||||||
Possible theme values are: `default`,`base`, `dark`, `forest` and `neutral`.
|
Possible theme values are: `default`, `base`, `dark`, `forest` and `neutral`.
|
||||||
Default Value is `default`.
|
Default Value is `default`.
|
||||||
|
|
||||||
Example:
|
Example:
|
||||||
@ -288,7 +291,7 @@ Let us see an example:
|
|||||||
sequenceDiagram
|
sequenceDiagram
|
||||||
|
|
||||||
Alice->Bob: Hello Bob, how are you?
|
Alice->Bob: Hello Bob, how are you?
|
||||||
Bob->Alice: Fine, how did you mother like the book I suggested? And did you catch the new book about alien invasion?
|
Bob->Alice: Fine, how did your mother like the book I suggested? And did you catch the new book about alien invasion?
|
||||||
Alice->Bob: Good.
|
Alice->Bob: Good.
|
||||||
Bob->Alice: Cool
|
Bob->Alice: Cool
|
||||||
```
|
```
|
||||||
@ -297,7 +300,7 @@ Bob->Alice: Cool
|
|||||||
sequenceDiagram
|
sequenceDiagram
|
||||||
|
|
||||||
Alice->Bob: Hello Bob, how are you?
|
Alice->Bob: Hello Bob, how are you?
|
||||||
Bob->Alice: Fine, how did you mother like the book I suggested? And did you catch the new book about alien invasion?
|
Bob->Alice: Fine, how did your mother like the book I suggested? And did you catch the new book about alien invasion?
|
||||||
Alice->Bob: Good.
|
Alice->Bob: Good.
|
||||||
Bob->Alice: Cool
|
Bob->Alice: Cool
|
||||||
```
|
```
|
||||||
@ -314,7 +317,7 @@ By applying that snippet to the diagram above, `wrap` will be enabled:
|
|||||||
%%{init: { "sequence": { "wrap": true, "width":300 } } }%%
|
%%{init: { "sequence": { "wrap": true, "width":300 } } }%%
|
||||||
sequenceDiagram
|
sequenceDiagram
|
||||||
Alice->Bob: Hello Bob, how are you?
|
Alice->Bob: Hello Bob, how are you?
|
||||||
Bob->Alice: Fine, how did you mother like the book I suggested? And did you catch the new book about alien invasion?
|
Bob->Alice: Fine, how did your mother like the book I suggested? And did you catch the new book about alien invasion?
|
||||||
Alice->Bob: Good.
|
Alice->Bob: Good.
|
||||||
Bob->Alice: Cool
|
Bob->Alice: Cool
|
||||||
```
|
```
|
||||||
@ -323,7 +326,7 @@ Bob->Alice: Cool
|
|||||||
%%{init: { "sequence": { "wrap": true, "width":300 } } }%%
|
%%{init: { "sequence": { "wrap": true, "width":300 } } }%%
|
||||||
sequenceDiagram
|
sequenceDiagram
|
||||||
Alice->Bob: Hello Bob, how are you?
|
Alice->Bob: Hello Bob, how are you?
|
||||||
Bob->Alice: Fine, how did you mother like the book I suggested? And did you catch the new book about alien invasion?
|
Bob->Alice: Fine, how did your mother like the book I suggested? And did you catch the new book about alien invasion?
|
||||||
Alice->Bob: Good.
|
Alice->Bob: Good.
|
||||||
Bob->Alice: Cool
|
Bob->Alice: Cool
|
||||||
```
|
```
|
||||||
|
@ -16,4 +16,4 @@
|
|||||||
|
|
||||||
#### Defined in
|
#### Defined in
|
||||||
|
|
||||||
[mermaidAPI.ts:77](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L77)
|
[mermaidAPI.ts:78](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L78)
|
||||||
|
@ -39,7 +39,7 @@ bindFunctions?.(div); // To call bindFunctions only if it's present.
|
|||||||
|
|
||||||
#### Defined in
|
#### Defined in
|
||||||
|
|
||||||
[mermaidAPI.ts:97](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L97)
|
[mermaidAPI.ts:98](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L98)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -51,4 +51,4 @@ The svg code for the rendered graph.
|
|||||||
|
|
||||||
#### Defined in
|
#### Defined in
|
||||||
|
|
||||||
[mermaidAPI.ts:87](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L87)
|
[mermaidAPI.ts:88](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L88)
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
#### Defined in
|
#### Defined in
|
||||||
|
|
||||||
[config.ts:7](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L7)
|
[config.ts:8](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L8)
|
||||||
|
|
||||||
## Functions
|
## Functions
|
||||||
|
|
||||||
@ -26,9 +26,9 @@ Pushes in a directive to the configuration
|
|||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
| Name | Type | Description |
|
| Name | Type | Description |
|
||||||
| :---------- | :---- | :----------------------- |
|
| :---------- | :-------------- | :----------------------- |
|
||||||
| `directive` | `any` | The directive to push in |
|
| `directive` | `MermaidConfig` | The directive to push in |
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
@ -36,7 +36,7 @@ Pushes in a directive to the configuration
|
|||||||
|
|
||||||
#### Defined in
|
#### Defined in
|
||||||
|
|
||||||
[config.ts:191](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L191)
|
[config.ts:188](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L188)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -60,7 +60,7 @@ The currentConfig
|
|||||||
|
|
||||||
#### Defined in
|
#### Defined in
|
||||||
|
|
||||||
[config.ts:137](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L137)
|
[config.ts:131](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L131)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -118,7 +118,7 @@ The siteConfig
|
|||||||
|
|
||||||
#### Defined in
|
#### Defined in
|
||||||
|
|
||||||
[config.ts:223](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L223)
|
[config.ts:218](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L218)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -147,7 +147,7 @@ options in-place
|
|||||||
|
|
||||||
#### Defined in
|
#### Defined in
|
||||||
|
|
||||||
[config.ts:152](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L152)
|
[config.ts:146](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L146)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -242,10 +242,10 @@ The new siteConfig
|
|||||||
|
|
||||||
#### Parameters
|
#### Parameters
|
||||||
|
|
||||||
| Name | Type |
|
| Name | Type |
|
||||||
| :------------ | :-------------- |
|
| :------------ | :----------------- |
|
||||||
| `siteCfg` | `MermaidConfig` |
|
| `siteCfg` | `MermaidConfig` |
|
||||||
| `_directives` | `any`\[] |
|
| `_directives` | `MermaidConfig`\[] |
|
||||||
|
|
||||||
#### Returns
|
#### Returns
|
||||||
|
|
||||||
@ -253,7 +253,7 @@ The new siteConfig
|
|||||||
|
|
||||||
#### Defined in
|
#### Defined in
|
||||||
|
|
||||||
[config.ts:14](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L14)
|
[config.ts:15](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/config.ts#L15)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
@ -10,47 +10,24 @@
|
|||||||
|
|
||||||
### configKeys
|
### configKeys
|
||||||
|
|
||||||
• `Const` **configKeys**: `string`\[]
|
• `Const` **configKeys**: `Set`<`string`>
|
||||||
|
|
||||||
#### Defined in
|
#### Defined in
|
||||||
|
|
||||||
[defaultConfig.ts:2293](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/defaultConfig.ts#L2293)
|
[defaultConfig.ts:268](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/defaultConfig.ts#L268)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
### default
|
### default
|
||||||
|
|
||||||
• `Const` **default**: `Partial`<`MermaidConfig`>
|
• `Const` **default**: `RequiredDeep`<`MermaidConfig`>
|
||||||
|
|
||||||
**Configuration methods in Mermaid version 8.6.0 have been updated, to learn more\[[click
|
Default mermaid configuration options.
|
||||||
here](8.6.0_docs.md)].**
|
|
||||||
|
|
||||||
## **What follows are config instructions for older versions**
|
Please see the Mermaid config JSON Schema for the default JSON values.
|
||||||
|
Non-JSON JS default values are listed in this file, e.g. functions, or
|
||||||
These are the default options which can be overridden with the initialization call like so:
|
`undefined` (explicitly set so that `configKeys` finds them).
|
||||||
|
|
||||||
**Example 1:**
|
|
||||||
|
|
||||||
```js
|
|
||||||
mermaid.initialize({ flowchart: { htmlLabels: false } });
|
|
||||||
```
|
|
||||||
|
|
||||||
**Example 2:**
|
|
||||||
|
|
||||||
```html
|
|
||||||
<script>
|
|
||||||
const config = {
|
|
||||||
startOnLoad: true,
|
|
||||||
flowchart: { useMaxWidth: true, htmlLabels: true, curve: 'cardinal' },
|
|
||||||
securityLevel: 'loose',
|
|
||||||
};
|
|
||||||
mermaid.initialize(config);
|
|
||||||
</script>
|
|
||||||
```
|
|
||||||
|
|
||||||
A summary of all options and their defaults is found [here](#mermaidapi-configuration-defaults).
|
|
||||||
A description of each option follows below.
|
|
||||||
|
|
||||||
#### Defined in
|
#### Defined in
|
||||||
|
|
||||||
[defaultConfig.ts:33](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/defaultConfig.ts#L33)
|
[defaultConfig.ts:18](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/defaultConfig.ts#L18)
|
||||||
|
@ -25,7 +25,7 @@ Renames and re-exports [mermaidAPI](mermaidAPI.md#mermaidapi)
|
|||||||
|
|
||||||
#### Defined in
|
#### Defined in
|
||||||
|
|
||||||
[mermaidAPI.ts:81](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L81)
|
[mermaidAPI.ts:82](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L82)
|
||||||
|
|
||||||
## Variables
|
## Variables
|
||||||
|
|
||||||
@ -96,7 +96,7 @@ mermaid.initialize(config);
|
|||||||
|
|
||||||
#### Defined in
|
#### Defined in
|
||||||
|
|
||||||
[mermaidAPI.ts:663](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L663)
|
[mermaidAPI.ts:673](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L673)
|
||||||
|
|
||||||
## Functions
|
## Functions
|
||||||
|
|
||||||
@ -127,7 +127,7 @@ Return the last node appended
|
|||||||
|
|
||||||
#### Defined in
|
#### Defined in
|
||||||
|
|
||||||
[mermaidAPI.ts:308](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L308)
|
[mermaidAPI.ts:310](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L310)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@ -320,4 +320,4 @@ Remove any existing elements from the given document
|
|||||||
|
|
||||||
#### Defined in
|
#### Defined in
|
||||||
|
|
||||||
[mermaidAPI.ts:358](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L358)
|
[mermaidAPI.ts:360](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L360)
|
||||||
|
@ -73,9 +73,9 @@ To make a custom theme, modify `themeVariables` via `init`.
|
|||||||
|
|
||||||
You will need to use the [base](#available-themes) theme as it is the only modifiable theme.
|
You will need to use the [base](#available-themes) theme as it is the only modifiable theme.
|
||||||
|
|
||||||
| Parameter | Description | Type | Properties |
|
| Parameter | Description | Type | Properties |
|
||||||
| -------------- | ------------------------------------ | ------ | --------------------------------------------------------------------------------------------------- |
|
| -------------- | ------------------------------------ | ------ | ----------------------------------------------------------------------------------- |
|
||||||
| themeVariables | Modifiable with the `init` directive | Object | `primaryColor`, `primaryTextColor`, `lineColor` ([see full list](#theme-variables-reference-table)) |
|
| themeVariables | Modifiable with the `init` directive | Object | `primaryColor`, `primaryTextColor`, `lineColor` ([see full list](#theme-variables)) |
|
||||||
|
|
||||||
Example of modifying `themeVariables` using the `init` directive:
|
Example of modifying `themeVariables` using the `init` directive:
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ pnpm add mermaid
|
|||||||
|
|
||||||
**Hosting mermaid on a web page:**
|
**Hosting mermaid on a web page:**
|
||||||
|
|
||||||
> Note:This topic explored in greater depth in the [User Guide for Beginners](../intro/n00b-gettingStarted.md)
|
> Note: This topic is explored in greater depth in the [User Guide for Beginners](../intro/getting-started.md)
|
||||||
|
|
||||||
The easiest way to integrate mermaid on a web page requires two elements:
|
The easiest way to integrate mermaid on a web page requires two elements:
|
||||||
|
|
||||||
@ -100,7 +100,7 @@ Mermaid can load multiple diagrams, in the same page.
|
|||||||
|
|
||||||
## Enabling Click Event and Tags in Nodes
|
## Enabling Click Event and Tags in Nodes
|
||||||
|
|
||||||
A `securityLevel` configuration has to first be cleared. `securityLevel` sets the level of trust for the parsed diagrams and limits click functionality. This was introduce in version 8.2 as a security improvement, aimed at preventing malicious use.
|
A `securityLevel` configuration has to first be cleared. `securityLevel` sets the level of trust for the parsed diagrams and limits click functionality. This was introduced in version 8.2 as a security improvement, aimed at preventing malicious use.
|
||||||
|
|
||||||
**It is the site owner's responsibility to discriminate between trustworthy and untrustworthy user-bases and we encourage the use of discretion.**
|
**It is the site owner's responsibility to discriminate between trustworthy and untrustworthy user-bases and we encourage the use of discretion.**
|
||||||
|
|
||||||
@ -115,13 +115,13 @@ Values:
|
|||||||
- **strict**: (**default**) HTML tags in the text are encoded and click functionality is disabled.
|
- **strict**: (**default**) HTML tags in the text are encoded and click functionality is disabled.
|
||||||
- **antiscript**: HTML tags in text are allowed (only script elements are removed) and click functionality is enabled.
|
- **antiscript**: HTML tags in text are allowed (only script elements are removed) and click functionality is enabled.
|
||||||
- **loose**: HTML tags in text are allowed and click functionality is enabled.
|
- **loose**: HTML tags in text are allowed and click functionality is enabled.
|
||||||
- **sandbox**: With this security level, all rendering takes place in a sandboxed iframe. This prevent any JavaScript from running in the context. This may hinder interactive functionality of the diagram, like scripts, popups in the sequence diagram, links to other tabs or targets, etc.
|
- **sandbox**: With this security level, all rendering takes place in a sandboxed iframe. This prevents any JavaScript from running in the context. This may hinder interactive functionality of the diagram, like scripts, popups in the sequence diagram, links to other tabs or targets, etc.
|
||||||
|
|
||||||
> **Note**
|
> **Note**
|
||||||
> This changes the default behaviour of mermaid so that after upgrade to 8.2, unless the `securityLevel` is not changed, tags in flowcharts are encoded as tags and clicking is disabled.
|
> This changes the default behaviour of mermaid so that after upgrade to 8.2, unless the `securityLevel` is not changed, tags in flowcharts are encoded as tags and clicking is disabled.
|
||||||
> **sandbox** security level is still in the beta version.
|
> **sandbox** security level is still in the beta version.
|
||||||
|
|
||||||
**If you are taking responsibility for the diagram source security you can set the `securityLevel` to a value of your choosing . This allows clicks and tags are allowed.**
|
**If you are taking responsibility for the diagram source security you can set the `securityLevel` to a value of your choosing. This allows clicks and tags are allowed.**
|
||||||
|
|
||||||
**To change `securityLevel`, you have to call `mermaid.initialize`:**
|
**To change `securityLevel`, you have to call `mermaid.initialize`:**
|
||||||
|
|
||||||
@ -228,7 +228,7 @@ mermaid fully supports webpack. Here is a [working demo](https://github.com/merm
|
|||||||
|
|
||||||
The main idea of the API is to be able to call a render function with the graph definition as a string. The render function will render the graph and call a callback with the resulting SVG code. With this approach it is up to the site creator to fetch the graph definition from the site (perhaps from a textarea), render it and place the graph somewhere in the site.
|
The main idea of the API is to be able to call a render function with the graph definition as a string. The render function will render the graph and call a callback with the resulting SVG code. With this approach it is up to the site creator to fetch the graph definition from the site (perhaps from a textarea), render it and place the graph somewhere in the site.
|
||||||
|
|
||||||
The example below show an outline of how this could be used. The example just logs the resulting SVG to the JavaScript console.
|
The example below shows an example of how this could be used. The example just logs the resulting SVG to the JavaScript console.
|
||||||
|
|
||||||
```html
|
```html
|
||||||
<script type="module">
|
<script type="module">
|
||||||
|
@ -49,6 +49,7 @@ They also serve as proof of concept, for the variety of things that can be built
|
|||||||
- [Mermaid plugin for GitBook](https://github.com/wwformat/gitbook-plugin-mermaid-pdf)
|
- [Mermaid plugin for GitBook](https://github.com/wwformat/gitbook-plugin-mermaid-pdf)
|
||||||
- [LiveBook](https://livebook.dev) (**Native support**)
|
- [LiveBook](https://livebook.dev) (**Native support**)
|
||||||
- [Atlassian Products](https://www.atlassian.com)
|
- [Atlassian Products](https://www.atlassian.com)
|
||||||
|
- [Mermaid Live Editor for Confluence Cloud](https://marketplace.atlassian.com/apps/1231571/mermaid-live-editor-for-confluence?hosting=cloud&tab=overview)
|
||||||
- [Mermaid Plugin for Confluence](https://marketplace.atlassian.com/apps/1214124/mermaid-plugin-for-confluence?hosting=server&tab=overview)
|
- [Mermaid Plugin for Confluence](https://marketplace.atlassian.com/apps/1214124/mermaid-plugin-for-confluence?hosting=server&tab=overview)
|
||||||
- [CloudScript.io Addon](https://marketplace.atlassian.com/apps/1219878/cloudscript-io-mermaid-addon?hosting=cloud&tab=overview)
|
- [CloudScript.io Addon](https://marketplace.atlassian.com/apps/1219878/cloudscript-io-mermaid-addon?hosting=cloud&tab=overview)
|
||||||
- [Auto convert diagrams in Jira](https://github.com/coddingtonbear/jirafs-mermaid)
|
- [Auto convert diagrams in Jira](https://github.com/coddingtonbear/jirafs-mermaid)
|
||||||
@ -66,7 +67,7 @@ They also serve as proof of concept, for the variety of things that can be built
|
|||||||
|
|
||||||
## Blogs
|
## Blogs
|
||||||
|
|
||||||
- [Wordpress](https://wordpress.org)
|
- [WordPress](https://wordpress.org)
|
||||||
- [WordPress Markdown Editor](https://wordpress.org/plugins/wp-githuber-md)
|
- [WordPress Markdown Editor](https://wordpress.org/plugins/wp-githuber-md)
|
||||||
- [WP-ReliableMD](https://wordpress.org/plugins/wp-reliablemd/)
|
- [WP-ReliableMD](https://wordpress.org/plugins/wp-reliablemd/)
|
||||||
- [Hexo](https://hexo.io)
|
- [Hexo](https://hexo.io)
|
||||||
@ -84,7 +85,7 @@ They also serve as proof of concept, for the variety of things that can be built
|
|||||||
- [Plugin for Mermaid.js](https://github.com/eFrane/vuepress-plugin-mermaidjs)
|
- [Plugin for Mermaid.js](https://github.com/eFrane/vuepress-plugin-mermaidjs)
|
||||||
- [Grav CMS](https://getgrav.org/)
|
- [Grav CMS](https://getgrav.org/)
|
||||||
- [Mermaid Diagrams](https://github.com/DanielFlaum/grav-plugin-mermaid-diagrams)
|
- [Mermaid Diagrams](https://github.com/DanielFlaum/grav-plugin-mermaid-diagrams)
|
||||||
- [Gitlab Markdown Adapter](https://github.com/Goutte/grav-plugin-gitlab-markdown-adapter)
|
- [GitLab Markdown Adapter](https://github.com/Goutte/grav-plugin-gitlab-markdown-adapter)
|
||||||
|
|
||||||
## Communication
|
## Communication
|
||||||
|
|
||||||
@ -104,7 +105,7 @@ They also serve as proof of concept, for the variety of things that can be built
|
|||||||
- [Flex Diagrams Extension](https://www.mediawiki.org/wiki/Extension:Flex_Diagrams)
|
- [Flex Diagrams Extension](https://www.mediawiki.org/wiki/Extension:Flex_Diagrams)
|
||||||
- [Semantic Media Wiki](https://semantic-mediawiki.org)
|
- [Semantic Media Wiki](https://semantic-mediawiki.org)
|
||||||
- [Mermaid Plugin](https://github.com/SemanticMediaWiki/Mermaid)
|
- [Mermaid Plugin](https://github.com/SemanticMediaWiki/Mermaid)
|
||||||
- [FosWiki](https://foswiki.org)
|
- [Foswiki](https://foswiki.org)
|
||||||
- [Mermaid Plugin](https://foswiki.org/Extensions/MermaidPlugin)
|
- [Mermaid Plugin](https://foswiki.org/Extensions/MermaidPlugin)
|
||||||
- [DokuWiki](https://dokuwiki.org)
|
- [DokuWiki](https://dokuwiki.org)
|
||||||
- [Mermaid Plugin](https://www.dokuwiki.org/plugin:mermaid)
|
- [Mermaid Plugin](https://www.dokuwiki.org/plugin:mermaid)
|
||||||
@ -161,6 +162,8 @@ They also serve as proof of concept, for the variety of things that can be built
|
|||||||
- [Nano Mermaid](https://github.com/Yash-Singh1/nano-mermaid)
|
- [Nano Mermaid](https://github.com/Yash-Singh1/nano-mermaid)
|
||||||
- [CKEditor](https://github.com/ckeditor/ckeditor5)
|
- [CKEditor](https://github.com/ckeditor/ckeditor5)
|
||||||
- [CKEditor 5 Mermaid plugin](https://github.com/ckeditor/ckeditor5-mermaid)
|
- [CKEditor 5 Mermaid plugin](https://github.com/ckeditor/ckeditor5-mermaid)
|
||||||
|
- [Standard Notes](https://standardnotes.com/)
|
||||||
|
- [sn-mermaid](https://github.com/nienow/sn-mermaid)
|
||||||
|
|
||||||
## Document Generation
|
## Document Generation
|
||||||
|
|
||||||
@ -172,7 +175,7 @@ They also serve as proof of concept, for the variety of things that can be built
|
|||||||
- [rehype-mermaidjs](https://github.com/remcohaszing/rehype-mermaidjs)
|
- [rehype-mermaidjs](https://github.com/remcohaszing/rehype-mermaidjs)
|
||||||
- [Gatsby](https://www.gatsbyjs.com/)
|
- [Gatsby](https://www.gatsbyjs.com/)
|
||||||
- [gatsby-remark-mermaid](https://github.com/remcohaszing/gatsby-remark-mermaid)
|
- [gatsby-remark-mermaid](https://github.com/remcohaszing/gatsby-remark-mermaid)
|
||||||
- [jSDoc](https://jsdoc.app/)
|
- [JSDoc](https://jsdoc.app/)
|
||||||
- [jsdoc-mermaid](https://github.com/Jellyvision/jsdoc-mermaid)
|
- [jsdoc-mermaid](https://github.com/Jellyvision/jsdoc-mermaid)
|
||||||
- [MkDocs](https://www.mkdocs.org)
|
- [MkDocs](https://www.mkdocs.org)
|
||||||
- [mkdocs-mermaid2-plugin](https://github.com/fralau/mkdocs-mermaid2-plugin)
|
- [mkdocs-mermaid2-plugin](https://github.com/fralau/mkdocs-mermaid2-plugin)
|
||||||
@ -185,6 +188,7 @@ They also serve as proof of concept, for the variety of things that can be built
|
|||||||
- [mdbook](https://rust-lang.github.io/mdBook/index.html)
|
- [mdbook](https://rust-lang.github.io/mdBook/index.html)
|
||||||
- [mdbook-mermaid](https://github.com/badboy/mdbook-mermaid)
|
- [mdbook-mermaid](https://github.com/badboy/mdbook-mermaid)
|
||||||
- [Quarto](https://quarto.org/)
|
- [Quarto](https://quarto.org/)
|
||||||
|
- [Typora](https://typora.io/) ([Native support](https://support.typora.io/Draw-Diagrams-With-Markdown/#mermaid))
|
||||||
|
|
||||||
## Browser Extensions
|
## Browser Extensions
|
||||||
|
|
||||||
|
@ -2,13 +2,13 @@
|
|||||||
>
|
>
|
||||||
> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT.
|
> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT.
|
||||||
>
|
>
|
||||||
> ## Please edit the corresponding file in [/packages/mermaid/src/docs/intro/n00b-gettingStarted.md](../../packages/mermaid/src/docs/intro/n00b-gettingStarted.md).
|
> ## Please edit the corresponding file in [/packages/mermaid/src/docs/intro/getting-started.md](../../packages/mermaid/src/docs/intro/getting-started.md).
|
||||||
|
|
||||||
# A Mermaid User-Guide for Beginners
|
# A Mermaid User-Guide for Beginners
|
||||||
|
|
||||||
Mermaid is composed of three parts: Deployment, Syntax and Configuration.
|
Mermaid is composed of three parts: Deployment, Syntax and Configuration.
|
||||||
|
|
||||||
This section talks about the different ways to deploy Mermaid. Learning the [Syntax](n00b-syntaxReference.md) would be of great help to the beginner.
|
This section talks about the different ways to deploy Mermaid. Learning the [Syntax](syntax-reference.md) would be of great help to the beginner.
|
||||||
|
|
||||||
> Generally the live editor is enough for most general uses of mermaid, and is a good place to start learning.
|
> Generally the live editor is enough for most general uses of mermaid, and is a good place to start learning.
|
||||||
|
|
||||||
@ -53,7 +53,7 @@ graph TD
|
|||||||
|
|
||||||
In the `Code` section one can write or edit raw mermaid code, and instantly `Preview` the rendered result on the panel beside it.
|
In the `Code` section one can write or edit raw mermaid code, and instantly `Preview` the rendered result on the panel beside it.
|
||||||
|
|
||||||
The `Configuration` Section is for changing the appearance and behavior of mermaid diagrams. An easy introduction to mermaid configuration is found in the [Advanced usage](../config/n00b-advanced.md) section. A complete configuration reference cataloging the default values can be found on the [mermaidAPI](../config/setup/README.md) page.
|
The `Configuration` Section is for changing the appearance and behavior of mermaid diagrams. An easy introduction to mermaid configuration is found in the [Advanced usage](../config/advanced.md) section. A complete configuration reference cataloging the default values can be found on the [mermaidAPI](../config/setup/README.md) page.
|
||||||
|
|
||||||
![Code,Config and Preview](./img/Code-Preview-Config.png)
|
![Code,Config and Preview](./img/Code-Preview-Config.png)
|
||||||
|
|
||||||
@ -103,7 +103,7 @@ When writing the .html file, we give two instructions inside the html code to th
|
|||||||
|
|
||||||
a. The mermaid code for the diagram we want to create.
|
a. The mermaid code for the diagram we want to create.
|
||||||
|
|
||||||
b. The importing of mermaid library through the `mermaid.esm.mjs` or `mermaid.esm.min.mjs` and the `mermaid.initialize()` call, which dictates the appearance of diagrams and also starts the rendering process .
|
b. The importing of mermaid library through the `mermaid.esm.mjs` or `mermaid.esm.min.mjs` and the `mermaid.initialize()` call, which dictates the appearance of diagrams and also starts the rendering process.
|
||||||
|
|
||||||
**a. The embedded mermaid diagram definition inside a `<pre class="mermaid">`:**
|
**a. The embedded mermaid diagram definition inside a `<pre class="mermaid">`:**
|
||||||
|
|
||||||
@ -221,4 +221,4 @@ In this example mermaid.js is referenced in `src` as a separate JavaScript file,
|
|||||||
|
|
||||||
**Comments from Knut Sveidqvist, creator of mermaid:**
|
**Comments from Knut Sveidqvist, creator of mermaid:**
|
||||||
|
|
||||||
- In early versions of mermaid, the `<script>` tag was invoked in the `<head>` part of the web page. Nowadays we can place it in the `<body>` as seen above. Older parts of the documentation frequently reflects the previous way which still works.
|
- In early versions of mermaid, the `<script>` tag was invoked in the `<head>` part of the web page. Nowadays we can place it in the `<body>` as seen above. Older parts of the documentation frequently reflect the previous way which still works.
|
@ -10,11 +10,22 @@
|
|||||||
|
|
||||||
It is a JavaScript based diagramming and charting tool that renders Markdown-inspired text definitions to create and modify diagrams dynamically.
|
It is a JavaScript based diagramming and charting tool that renders Markdown-inspired text definitions to create and modify diagrams dynamically.
|
||||||
|
|
||||||
> If you are familiar with Markdown you should have no problem learning [Mermaid's Syntax](n00b-syntaxReference.md).
|
> If you are familiar with Markdown you should have no problem learning [Mermaid's Syntax](syntax-reference.md).
|
||||||
|
|
||||||
<img src="/header.png" alt="" />
|
<img src="/header.png" alt="" />
|
||||||
|
|
||||||
[![Build CI Status](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml/badge.svg)](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml) [![NPM](https://img.shields.io/npm/v/mermaid)](https://www.npmjs.com/package/mermaid) [![npm minified gzipped bundle size](https://img.shields.io/bundlephobia/minzip/mermaid)](https://bundlephobia.com/package/mermaid) [![Coverage Status](https://coveralls.io/repos/github/mermaid-js/mermaid/badge.svg?branch=master)](https://coveralls.io/github/mermaid-js/mermaid?branch=master) [![CDN Status](https://img.shields.io/jsdelivr/npm/hm/mermaid)](https://www.jsdelivr.com/package/npm/mermaid) [![NPM](https://img.shields.io/npm/dm/mermaid)](https://www.npmjs.com/package/mermaid) [![Join our Slack!](https://img.shields.io/static/v1?message=join%20chat&color=9cf&logo=slack&label=slack)](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE) [![Twitter Follow](https://img.shields.io/twitter/follow/mermaidjs_?style=social)](https://twitter.com/mermaidjs_)
|
<div class='badges'>
|
||||||
|
|
||||||
|
[![Build CI Status](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml/badge.svg)](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml)
|
||||||
|
[![NPM](https://img.shields.io/npm/v/mermaid)](https://www.npmjs.com/package/mermaid)
|
||||||
|
[![npm minified gzipped bundle size](https://img.shields.io/bundlephobia/minzip/mermaid)](https://bundlephobia.com/package/mermaid)
|
||||||
|
[![Coverage Status](https://coveralls.io/repos/github/mermaid-js/mermaid/badge.svg?branch=master)](https://coveralls.io/github/mermaid-js/mermaid?branch=master)
|
||||||
|
[![CDN Status](https://img.shields.io/jsdelivr/npm/hm/mermaid)](https://www.jsdelivr.com/package/npm/mermaid)
|
||||||
|
[![NPM](https://img.shields.io/npm/dm/mermaid)](https://www.npmjs.com/package/mermaid)
|
||||||
|
[![Join our Slack!](https://img.shields.io/static/v1?message=join%20chat&color=9cf&logo=slack&label=slack)](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE)
|
||||||
|
[![Twitter Follow](https://img.shields.io/twitter/follow/mermaidjs_?style=social)](https://twitter.com/mermaidjs_)
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
<!-- Mermaid book banner -->
|
<!-- Mermaid book banner -->
|
||||||
|
|
||||||
@ -33,7 +44,7 @@ Mermaid allows even non-programmers to easily create detailed and diagrams throu
|
|||||||
[Tutorials](../config/Tutorials.md) has video tutorials.
|
[Tutorials](../config/Tutorials.md) has video tutorials.
|
||||||
Use Mermaid with your favorite applications, check out the list of [Integrations and Usages of Mermaid](../ecosystem/integrations.md).
|
Use Mermaid with your favorite applications, check out the list of [Integrations and Usages of Mermaid](../ecosystem/integrations.md).
|
||||||
|
|
||||||
For a more detailed introduction to Mermaid and some of its more basic uses, look to the [Beginner's Guide](../community/n00b-overview.md) and [Usage](../config/usage.md).
|
For a more detailed introduction to Mermaid and some of its more basic uses, look to the [Beginner's Guide](../intro/getting-started.md) and [Usage](../config/usage.md).
|
||||||
|
|
||||||
🌐 [CDN](https://www.jsdelivr.com/package/npm/mermaid) | 📖 [Documentation](https://mermaidjs.github.io) | 🙌 [Contribution](../community/development.md) | 🔌 [Plug-Ins](../ecosystem/integrations.md)
|
🌐 [CDN](https://www.jsdelivr.com/package/npm/mermaid) | 📖 [Documentation](https://mermaidjs.github.io) | 🙌 [Contribution](../community/development.md) | 🔌 [Plug-Ins](../ecosystem/integrations.md)
|
||||||
|
|
||||||
@ -273,9 +284,9 @@ quadrantChart
|
|||||||
|
|
||||||
## Installation
|
## Installation
|
||||||
|
|
||||||
**In depth guides and examples can be found at [Getting Started](./n00b-gettingStarted.md) and [Usage](../config/usage.md).**
|
**In depth guides and examples can be found at [Getting Started](./getting-started.md) and [Usage](../config/usage.md).**
|
||||||
|
|
||||||
**It would also be helpful to learn more about mermaid's [Syntax](./n00b-syntaxReference.md).**
|
**It would also be helpful to learn more about mermaid's [Syntax](./syntax-reference.md).**
|
||||||
|
|
||||||
### CDN
|
### CDN
|
||||||
|
|
||||||
@ -334,7 +345,19 @@ Together we could continue the work with things like:
|
|||||||
|
|
||||||
Don't hesitate to contact me if you want to get involved!
|
Don't hesitate to contact me if you want to get involved!
|
||||||
|
|
||||||
## For contributors
|
## Contributors
|
||||||
|
|
||||||
|
<div class='badges'>
|
||||||
|
|
||||||
|
[![Good first issue](https://img.shields.io/github/labels/mermaid-js/mermaid/Good%20first%20issue%21)](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Good+first+issue%21%22)
|
||||||
|
[![Contributors](https://img.shields.io/github/contributors/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors)
|
||||||
|
[![Commits](https://img.shields.io/github/commit-activity/m/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors)
|
||||||
|
|
||||||
|
</div>
|
||||||
|
|
||||||
|
Mermaid is a growing community and is always accepting new contributors. There's a lot of different ways to help out and we're always looking for extra hands! Look at [this issue](https://github.com/mermaid-js/mermaid/issues/866) if you want to know where to start helping out.
|
||||||
|
|
||||||
|
Detailed information about how to contribute can be found in the [contribution guideline](/community/development).
|
||||||
|
|
||||||
### Requirements
|
### Requirements
|
||||||
|
|
||||||
@ -342,7 +365,7 @@ Don't hesitate to contact me if you want to get involved!
|
|||||||
- [Node.js](https://nodejs.org/en/). `volta install node`
|
- [Node.js](https://nodejs.org/en/). `volta install node`
|
||||||
- [pnpm](https://pnpm.io/) package manager. `volta install pnpm`
|
- [pnpm](https://pnpm.io/) package manager. `volta install pnpm`
|
||||||
|
|
||||||
## Development Installation
|
### Development Installation
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone git@github.com:mermaid-js/mermaid.git
|
git clone git@github.com:mermaid-js/mermaid.git
|
||||||
@ -379,19 +402,7 @@ Update version number in `package.json`.
|
|||||||
npm publish
|
npm publish
|
||||||
```
|
```
|
||||||
|
|
||||||
The above command generates files into the `dist` folder and publishes them to \<npmjs.org>.
|
The above command generates files into the `dist` folder and publishes them to [npmjs.com](https://www.npmjs.com/).
|
||||||
|
|
||||||
## Related projects
|
|
||||||
|
|
||||||
- [Command Line Interface](https://github.com/mermaid-js/mermaid-cli)
|
|
||||||
- [Live Editor](https://github.com/mermaid-js/mermaid-live-editor)
|
|
||||||
- [HTTP Server](https://github.com/TomWright/mermaid-server)
|
|
||||||
|
|
||||||
## Contributors [![Good first issue](https://img.shields.io/github/labels/mermaid-js/mermaid/Good%20first%20issue%21)](https://github.com/mermaid-js/mermaid/issues?q=is%3Aissue+is%3Aopen+label%3A%22Good+first+issue%21%22) [![Contributors](https://img.shields.io/github/contributors/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors) [![Commits](https://img.shields.io/github/commit-activity/m/mermaid-js/mermaid)](https://github.com/mermaid-js/mermaid/graphs/contributors)
|
|
||||||
|
|
||||||
Mermaid is a growing community and is always accepting new contributors. There's a lot of different ways to help out and we're always looking for extra hands! Look at [this issue](https://github.com/mermaid-js/mermaid/issues/866) if you want to know where to start helping out.
|
|
||||||
|
|
||||||
Detailed information about how to contribute can be found in the [contribution guide](https://github.com/mermaid-js/mermaid/blob/develop/CONTRIBUTING.md)
|
|
||||||
|
|
||||||
## Security and safe diagrams
|
## Security and safe diagrams
|
||||||
|
|
||||||
@ -422,20 +433,15 @@ A quick note from Knut Sveidqvist:
|
|||||||
_Mermaid was created by Knut Sveidqvist for easier documentation._
|
_Mermaid was created by Knut Sveidqvist for easier documentation._
|
||||||
|
|
||||||
<style scoped>
|
<style scoped>
|
||||||
#contributors + p,
|
.badges > p {
|
||||||
#about-mermaid + p + p + blockquote + img + p
|
display: flex;
|
||||||
{
|
|
||||||
display: flex
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#contributors + p a,
|
.badges > p > a {
|
||||||
#about-mermaid + p + p + blockquote + img + p a
|
margin: 0 0.5rem;
|
||||||
{
|
|
||||||
margin: 0 0.5rem
|
|
||||||
}
|
}
|
||||||
|
|
||||||
.dark #VPContent > div > div > div.content > div > main > div > div > img
|
.dark #VPContent > div > div > div.content > div > main > div > div > img {
|
||||||
{
|
|
||||||
filter: invert(1) hue-rotate(217deg) contrast(0.72);
|
filter: invert(1) hue-rotate(217deg) contrast(0.72);
|
||||||
}
|
}
|
||||||
</style>
|
</style>
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
>
|
>
|
||||||
> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT.
|
> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT.
|
||||||
>
|
>
|
||||||
> ## Please edit the corresponding file in [/packages/mermaid/src/docs/intro/n00b-syntaxReference.md](../../packages/mermaid/src/docs/intro/n00b-syntaxReference.md).
|
> ## Please edit the corresponding file in [/packages/mermaid/src/docs/intro/syntax-reference.md](../../packages/mermaid/src/docs/intro/syntax-reference.md).
|
||||||
|
|
||||||
# Diagram Syntax
|
# Diagram Syntax
|
||||||
|
|
||||||
@ -42,7 +42,7 @@ erDiagram
|
|||||||
PRODUCT ||--o{ ORDER-ITEM : "ordered in"
|
PRODUCT ||--o{ ORDER-ITEM : "ordered in"
|
||||||
```
|
```
|
||||||
|
|
||||||
The [Getting Started](./n00b-gettingStarted.md) section can also provide some practical examples of mermaid syntax.
|
The [Getting Started](./getting-started.md) section can also provide some practical examples of mermaid syntax.
|
||||||
|
|
||||||
## Diagram Breaking
|
## Diagram Breaking
|
||||||
|
|
||||||
@ -56,30 +56,30 @@ One should **beware the use of some words or symbols** that can break diagrams.
|
|||||||
| 'end' | The word "End" can cause Flowcharts and Sequence diagrams to break | Wrap them in quotation marks to prevent breakage. |
|
| 'end' | The word "End" can cause Flowcharts and Sequence diagrams to break | Wrap them in quotation marks to prevent breakage. |
|
||||||
| [Nodes inside Nodes](../syntax/flowchart.md?id=special-characters-that-break-syntax) | Mermaid gets confused with nested shapes | wrap them in quotation marks to prevent breaking |
|
| [Nodes inside Nodes](../syntax/flowchart.md?id=special-characters-that-break-syntax) | Mermaid gets confused with nested shapes | wrap them in quotation marks to prevent breaking |
|
||||||
|
|
||||||
### Mermaid Live Editor
|
## Mermaid Live Editor
|
||||||
|
|
||||||
Now, that you've seen what you should not add to your diagrams, you can play around with them in the [Mermaid Live Editor](https://mermaid.live).
|
Now, that you've seen what you should not add to your diagrams, you can play around with them in the [Mermaid Live Editor](https://mermaid.live).
|
||||||
|
|
||||||
# Configuration
|
## Configuration
|
||||||
|
|
||||||
Configuration is the third part of Mermaid, after deployment and syntax. It deals with the different ways that Mermaid can be customized across different deployments.
|
Configuration is the third part of Mermaid, after deployment and syntax. It deals with the different ways that Mermaid can be customized across different deployments.
|
||||||
|
|
||||||
If you are interested in altering and customizing your Mermaid Diagrams, you will find the methods and values available for [Configuration](../config/setup/README.md) here. It includes themes.
|
If you are interested in altering and customizing your Mermaid Diagrams, you will find the methods and values available for [Configuration](../config/setup/README.md) here. It includes themes.
|
||||||
This section will introduce the different methods of configuring the behaviors and appearances of Mermaid Diagrams.
|
This section will introduce the different methods of configuring the behaviors and appearances of Mermaid Diagrams.
|
||||||
The following are the most commonly used methods, and they are all tied to Mermaid [Deployment](./n00b-gettingStarted.md) methods.
|
The following are the most commonly used methods, and they are all tied to Mermaid [Deployment](./getting-started.md) methods.
|
||||||
|
|
||||||
### Configuration Section in the [Live Editor](https://mermaid.live).
|
### Configuration Section in the [Live Editor](https://mermaid.live).
|
||||||
|
|
||||||
Here you can edit certain values to change the behavior and appearance of the diagram.
|
Here you can edit certain values to change the behavior and appearance of the diagram.
|
||||||
|
|
||||||
### [The initialize() call](https://mermaid-js.github.io/mermaid/#/n00b-gettingStarted?id=_3-calling-the-javascript-api),
|
### [The initialize() call](./getting-started.md#_3-calling-the-javascript-api)
|
||||||
|
|
||||||
Used when Mermaid is called via an API, or through a `<script>` tag.
|
Used when Mermaid is called via an API, or through a `<script>` tag.
|
||||||
|
|
||||||
### [Directives](../config/directives.md),
|
### [Directives](../config/directives.md)
|
||||||
|
|
||||||
Allows for the limited reconfiguration of a diagram just before it is rendered. It can alter the font style, color and other aesthetic aspects of the diagram. You can pass a directive alongside your definition inside `%%{ }%%`. It can be done either above or below your diagram definition.
|
Allows for the limited reconfiguration of a diagram just before it is rendered. It can alter the font style, color and other aesthetic aspects of the diagram. You can pass a directive alongside your definition inside `%%{ }%%`. It can be done either above or below your diagram definition.
|
||||||
|
|
||||||
### [Theme Manipulation](../config/theming.md):
|
### [Theme Manipulation](../config/theming.md)
|
||||||
|
|
||||||
An application of using Directives to change [Themes](../config/theming.md). `Theme` is a value within Mermaid's configuration that dictates the color scheme for diagrams.
|
An application of using Directives to change [Themes](../config/theming.md). `Theme` is a value within Mermaid's configuration that dictates the color scheme for diagrams.
|
@ -6,8 +6,8 @@
|
|||||||
|
|
||||||
# Announcements
|
# Announcements
|
||||||
|
|
||||||
## [subhash-halder contributed quadrant charts so you can show your manager what to select - just like the strategy consultants at BCG do](https://www.mermaidchart.com/blog/posts/subhash-halder-contributed-quadrant-charts-so-you-can-show-your-manager-what-to-select-just-like-the-strategy-consultants-at-bcg-do/)
|
## [Special cases broke Microsoft Zune and can ruin your code base too](https://www.mermaidchart.com/blog/posts/special-cases-broke-microsoft-zune-and-can-ruin-your-code-base-too/)
|
||||||
|
|
||||||
8 June 2023 · 7 mins
|
23 August 2023 · 15 mins
|
||||||
|
|
||||||
A quadrant chart is a useful diagram that helps users visualize data and identify patterns in a data set.
|
Read about the pitfalls of special cases in programming, illustrating how they can lead to complexity, diminish readability, and create maintenance challenges.
|
||||||
|
@ -6,6 +6,48 @@
|
|||||||
|
|
||||||
# Blog
|
# Blog
|
||||||
|
|
||||||
|
## [Special cases broke Microsoft Zune and can ruin your code base too](https://www.mermaidchart.com/blog/posts/special-cases-broke-microsoft-zune-and-can-ruin-your-code-base-too/)
|
||||||
|
|
||||||
|
23 August 2023 · 15 mins
|
||||||
|
|
||||||
|
Read about the pitfalls of special cases in programming, illustrating how they can lead to complexity, diminish readability, and create maintenance challenges.
|
||||||
|
|
||||||
|
## [New AI chatbot now available on Mermaid Chart to simplify text-based diagram creation](https://www.mermaidchart.com/blog/posts/ai-chatbot-now-available-on-mermaid-chart-to-simplify-text-based-diagram-creation/)
|
||||||
|
|
||||||
|
14 August 2023 · 4 mins
|
||||||
|
|
||||||
|
Introducing Mermaid Chart’s new AI chatbot, a diagramming assistant that simplifies text-based diagram creation for everyone, from developers to educators, offering features to start, edit, and fix diagrams, and embodying our vision to make diagramming accessible, user-friendly, and fun.
|
||||||
|
|
||||||
|
## [Believe It or Not, You Still Need an Online UML Diagram Tool](https://www.mermaidchart.com/blog/posts/uml-diagram-tool/)
|
||||||
|
|
||||||
|
14 August 2023 · 8 mins
|
||||||
|
|
||||||
|
A UML diagram tool helps developers and other professionals quickly create and share UML diagrams that communicate information about complex software systems.
|
||||||
|
|
||||||
|
## [From Chaos to Clarity: Exploring Mind Maps with MermaidJS](https://www.mermaidchart.com/blog/posts/from-chaos-to-clarity-exploring-mind-maps-with-mermaidjs)
|
||||||
|
|
||||||
|
24 July 2023 · 4 mins
|
||||||
|
|
||||||
|
Introducing the concept of mind mapping as a tool for organizing complex information, and highlights Mermaid as a user-friendly software that simplifies the creation and editing of mind maps for applications in IT solution design, business decision-making, and knowledge organization.
|
||||||
|
|
||||||
|
## [Mermaid Chart Announces Visual Studio Code Plugin to Simplify Development Workflows](https://www.mermaidchart.com/blog/posts/mermaid-chart-announces-visual-studio-code-plugin)
|
||||||
|
|
||||||
|
17 July 2023 · 3 mins
|
||||||
|
|
||||||
|
New Integration Enhances Workflows By Enabling Developers To Reference And Edit Diagrams Within Visual Studio Code.
|
||||||
|
|
||||||
|
## [Mermaid Chart’s ChatGPT Plugin Combines Generative AI and Smart Diagramming For Users](https://www.mermaidchart.com/blog/posts/mermaid-chart-chatgpt-plugin-combines-generative-ai-and-smart-diagramming)
|
||||||
|
|
||||||
|
29 June 2023 · 4 mins
|
||||||
|
|
||||||
|
Mermaid Chart’s new ChatGPT plugin integrates AI-powered text prompts with Mermaid’s intuitive diagramming editor, enabling users to generate, edit, and share complex diagrams with ease and efficiency.
|
||||||
|
|
||||||
|
## [Sequence diagrams, the only good thing UML brought to software development](https://www.mermaidchart.com/blog/posts/sequence-diagrams-the-good-thing-uml-brought-to-software-development/)
|
||||||
|
|
||||||
|
15 June 2023 · 12 mins
|
||||||
|
|
||||||
|
Sequence diagrams really shine when you’re documenting different parts of a system and the various ways these parts interact with each other.
|
||||||
|
|
||||||
## [subhash-halder contributed quadrant charts so you can show your manager what to select - just like the strategy consultants at BCG do](https://www.mermaidchart.com/blog/posts/subhash-halder-contributed-quadrant-charts-so-you-can-show-your-manager-what-to-select-just-like-the-strategy-consultants-at-bcg-do/)
|
## [subhash-halder contributed quadrant charts so you can show your manager what to select - just like the strategy consultants at BCG do](https://www.mermaidchart.com/blog/posts/subhash-halder-contributed-quadrant-charts-so-you-can-show-your-manager-what-to-select-just-like-the-strategy-consultants-at-bcg-do/)
|
||||||
|
|
||||||
8 June 2023 · 7 mins
|
8 June 2023 · 7 mins
|
||||||
|
@ -2,13 +2,13 @@
|
|||||||
>
|
>
|
||||||
> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT.
|
> ## THIS IS AN AUTOGENERATED FILE. DO NOT EDIT.
|
||||||
>
|
>
|
||||||
> ## Please edit the corresponding file in [/packages/mermaid/src/docs/syntax/c4c.md](../../packages/mermaid/src/docs/syntax/c4c.md).
|
> ## Please edit the corresponding file in [/packages/mermaid/src/docs/syntax/c4.md](../../packages/mermaid/src/docs/syntax/c4.md).
|
||||||
|
|
||||||
# C4 Diagrams
|
# C4 Diagrams
|
||||||
|
|
||||||
> C4 Diagram: This is an experimental diagram for now. The syntax and properties can change in future releases. Proper documentation will be provided when the syntax is stable.
|
> C4 Diagram: This is an experimental diagram for now. The syntax and properties can change in future releases. Proper documentation will be provided when the syntax is stable.
|
||||||
|
|
||||||
Mermaid's c4 diagram syntax is compatible with plantUML. See example below:
|
Mermaid's C4 diagram syntax is compatible with plantUML. See example below:
|
||||||
|
|
||||||
```mermaid-example
|
```mermaid-example
|
||||||
C4Context
|
C4Context
|
||||||
@ -114,7 +114,7 @@ For an example, see the source code demos/index.html
|
|||||||
- Dynamic diagram (C4Dynamic)
|
- Dynamic diagram (C4Dynamic)
|
||||||
- Deployment diagram (C4Deployment)
|
- Deployment diagram (C4Deployment)
|
||||||
|
|
||||||
Please refer to the linked document [C4-PlantUML syntax](https://github.com/plantuml-stdlib/C4-PlantUML/blob/master/README.md) for how to write the c4 diagram.
|
Please refer to the linked document [C4-PlantUML syntax](https://github.com/plantuml-stdlib/C4-PlantUML/blob/master/README.md) for how to write the C4 diagram.
|
||||||
|
|
||||||
C4 diagram is fixed style, such as css color, so different css is not provided under different skins.
|
C4 diagram is fixed style, such as css color, so different css is not provided under different skins.
|
||||||
updateElementStyle and UpdateElementStyle are written in the diagram last part. updateElementStyle is inconsistent with the original definition and updates the style of the relationship, including the offset of the text label relative to the original position.
|
updateElementStyle and UpdateElementStyle are written in the diagram last part. updateElementStyle is inconsistent with the original definition and updates the style of the relationship, including the offset of the text label relative to the original position.
|
||||||
@ -123,10 +123,10 @@ The layout does not use a fully automated layout algorithm. The position of shap
|
|||||||
The number of shapes per row and the number of boundaries can be adjusted using UpdateLayoutConfig.
|
The number of shapes per row and the number of boundaries can be adjusted using UpdateLayoutConfig.
|
||||||
|
|
||||||
- Layout
|
- Layout
|
||||||
- - Lay_U, Lay_Up
|
- Lay_U, Lay_Up
|
||||||
- - Lay_D, Lay_Down
|
- Lay_D, Lay_Down
|
||||||
- - Lay_L, Lay_Left
|
- Lay_L, Lay_Left
|
||||||
- - Lay_R, Lay_Right
|
- Lay_R, Lay_Right
|
||||||
|
|
||||||
The following unfinished features are not supported in the short term.
|
The following unfinished features are not supported in the short term.
|
||||||
|
|
||||||
@ -140,111 +140,70 @@ The following unfinished features are not supported in the short term.
|
|||||||
|
|
||||||
- [x] System Context
|
- [x] System Context
|
||||||
|
|
||||||
- - [x] Person(alias, label, ?descr, ?sprite, ?tags, $link)
|
- [x] Person(alias, label, ?descr, ?sprite, ?tags, $link)
|
||||||
|
- [x] Person_Ext
|
||||||
- - [x] Person_Ext
|
- [x] System(alias, label, ?descr, ?sprite, ?tags, $link)
|
||||||
|
- [x] SystemDb
|
||||||
- - [x] System(alias, label, ?descr, ?sprite, ?tags, $link)
|
- [x] SystemQueue
|
||||||
|
- [x] System_Ext
|
||||||
- - [x] SystemDb
|
- [x] SystemDb_Ext
|
||||||
|
- [x] SystemQueue_Ext
|
||||||
- - [x] SystemQueue
|
- [x] Boundary(alias, label, ?type, ?tags, $link)
|
||||||
|
- [x] Enterprise_Boundary(alias, label, ?tags, $link)
|
||||||
- - [x] System_Ext
|
- [x] System_Boundary
|
||||||
|
|
||||||
- - [x] SystemDb_Ext
|
|
||||||
|
|
||||||
- - [x] SystemQueue_Ext
|
|
||||||
|
|
||||||
- - [x] Boundary(alias, label, ?type, ?tags, $link)
|
|
||||||
|
|
||||||
- - [x] Enterprise_Boundary(alias, label, ?tags, $link)
|
|
||||||
|
|
||||||
- - [x] System_Boundary
|
|
||||||
|
|
||||||
- [x] Container diagram
|
- [x] Container diagram
|
||||||
|
|
||||||
- - [x] Container(alias, label, ?techn, ?descr, ?sprite, ?tags, $link)
|
- [x] Container(alias, label, ?techn, ?descr, ?sprite, ?tags, $link)
|
||||||
|
- [x] ContainerDb
|
||||||
- - [x] ContainerDb
|
- [x] ContainerQueue
|
||||||
|
- [x] Container_Ext
|
||||||
- - [x] ContainerQueue
|
- [x] ContainerDb_Ext
|
||||||
|
- [x] ContainerQueue_Ext
|
||||||
- - [x] Container_Ext
|
- [x] Container_Boundary(alias, label, ?tags, $link)
|
||||||
|
|
||||||
- - [x] ContainerDb_Ext
|
|
||||||
|
|
||||||
- - [x] ContainerQueue_Ext
|
|
||||||
|
|
||||||
- - [x] Container_Boundary(alias, label, ?tags, $link)
|
|
||||||
|
|
||||||
- [x] Component diagram
|
- [x] Component diagram
|
||||||
|
|
||||||
- - [x] Component(alias, label, ?techn, ?descr, ?sprite, ?tags, $link)
|
- [x] Component(alias, label, ?techn, ?descr, ?sprite, ?tags, $link)
|
||||||
|
- [x] ComponentDb
|
||||||
- - [x] ComponentDb
|
- [x] ComponentQueue
|
||||||
|
- [x] Component_Ext
|
||||||
- - [x] ComponentQueue
|
- [x] ComponentDb_Ext
|
||||||
|
- [x] ComponentQueue_Ext
|
||||||
- - [x] Component_Ext
|
|
||||||
|
|
||||||
- - [x] ComponentDb_Ext
|
|
||||||
|
|
||||||
- - [x] ComponentQueue_Ext
|
|
||||||
|
|
||||||
- [x] Dynamic diagram
|
- [x] Dynamic diagram
|
||||||
|
|
||||||
- - [x] RelIndex(index, from, to, label, ?tags, $link)
|
- [x] RelIndex(index, from, to, label, ?tags, $link)
|
||||||
|
|
||||||
- [x] Deployment diagram
|
- [x] Deployment diagram
|
||||||
|
|
||||||
- - [x] Deployment_Node(alias, label, ?type, ?descr, ?sprite, ?tags, $link)
|
- [x] Deployment_Node(alias, label, ?type, ?descr, ?sprite, ?tags, $link)
|
||||||
|
- [x] Node(alias, label, ?type, ?descr, ?sprite, ?tags, $link): short name of Deployment_Node()
|
||||||
- - [x] Node(alias, label, ?type, ?descr, ?sprite, ?tags, $link): short name of Deployment_Node()
|
- [x] Node_L(alias, label, ?type, ?descr, ?sprite, ?tags, $link): left aligned Node()
|
||||||
|
- [x] Node_R(alias, label, ?type, ?descr, ?sprite, ?tags, $link): right aligned Node()
|
||||||
- - [x] Node_L(alias, label, ?type, ?descr, ?sprite, ?tags, $link): left aligned Node()
|
|
||||||
|
|
||||||
- - [x] Node_R(alias, label, ?type, ?descr, ?sprite, ?tags, $link): right aligned Node()
|
|
||||||
|
|
||||||
- [x] Relationship Types
|
- [x] Relationship Types
|
||||||
|
|
||||||
- - [x] Rel(from, to, label, ?techn, ?descr, ?sprite, ?tags, $link)
|
- [x] Rel(from, to, label, ?techn, ?descr, ?sprite, ?tags, $link)
|
||||||
|
- [x] BiRel (bidirectional relationship)
|
||||||
- - [x] BiRel (bidirectional relationship)
|
- [x] Rel_U, Rel_Up
|
||||||
|
- [x] Rel_D, Rel_Down
|
||||||
- - [x] Rel_U, Rel_Up
|
- [x] Rel_L, Rel_Left
|
||||||
|
- [x] Rel_R, Rel_Right
|
||||||
- - [x] Rel_D, Rel_Down
|
- [x] Rel_Back
|
||||||
|
- [x] RelIndex \* Compatible with C4-Plantuml syntax, but ignores the index parameter. The sequence number is determined by the order in which the rel statements are written.
|
||||||
- - [x] Rel_L, Rel_Left
|
|
||||||
|
|
||||||
- - [x] Rel_R, Rel_Right
|
|
||||||
|
|
||||||
- - [x] Rel_Back
|
|
||||||
|
|
||||||
- - [x] RelIndex \* Compatible with C4-Plantuml syntax, but ignores the index parameter. The sequence number is determined by the order in which the rel statements are written.
|
|
||||||
|
|
||||||
- [ ] Custom tags/stereotypes support and skin param updates
|
- [ ] Custom tags/stereotypes support and skin param updates
|
||||||
|
- [ ] AddElementTag(tagStereo, ?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?sprite, ?techn, ?legendText, ?legendSprite): Introduces a new element tag. The styles of the tagged elements are updated and the tag is displayed in the calculated legend.
|
||||||
- - [ ] AddElementTag(tagStereo, ?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?sprite, ?techn, ?legendText, ?legendSprite): Introduces a new element tag. The styles of the tagged elements are updated and the tag is displayed in the calculated legend.
|
- [ ] AddRelTag(tagStereo, ?textColor, ?lineColor, ?lineStyle, ?sprite, ?techn, ?legendText, ?legendSprite): Introduces a new Relationship tag. The styles of the tagged relationships are updated and the tag is displayed in the calculated legend.
|
||||||
|
- [x] UpdateElementStyle(elementName, ?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?sprite, ?techn, ?legendText, ?legendSprite): This call updates the default style of the elements (component, ...) and creates no additional legend entry.
|
||||||
- - [ ] AddRelTag(tagStereo, ?textColor, ?lineColor, ?lineStyle, ?sprite, ?techn, ?legendText, ?legendSprite): Introduces a new Relationship tag. The styles of the tagged relationships are updated and the tag is displayed in the calculated legend.
|
- [x] UpdateRelStyle(from, to, ?textColor, ?lineColor, ?offsetX, ?offsetY): This call updates the default relationship colors and creates no additional legend entry. Two new parameters, offsetX and offsetY, are added to set the offset of the original position of the text.
|
||||||
|
- [ ] RoundedBoxShape(): This call returns the name of the rounded box shape and can be used as ?shape argument.
|
||||||
- - [x] UpdateElementStyle(elementName, ?bgColor, ?fontColor, ?borderColor, ?shadowing, ?shape, ?sprite, ?techn, ?legendText, ?legendSprite): This call updates the default style of the elements (component, ...) and creates no additional legend entry.
|
- [ ] EightSidedShape(): This call returns the name of the eight sided shape and can be used as ?shape argument.
|
||||||
|
- [ ] DashedLine(): This call returns the name of the dashed line and can be used as ?lineStyle argument.
|
||||||
- - [x] UpdateRelStyle(from, to, ?textColor, ?lineColor, ?offsetX, ?offsetY): This call updates the default relationship colors and creates no additional legend entry. Two new parameters, offsetX and offsetY, are added to set the offset of the original position of the text.
|
- [ ] DottedLine(): This call returns the name of the dotted line and can be used as ?lineStyle argument.
|
||||||
|
- [ ] BoldLine(): This call returns the name of the bold line and can be used as ?lineStyle argument.
|
||||||
- - [ ] RoundedBoxShape(): This call returns the name of the rounded box shape and can be used as ?shape argument.
|
- [x] UpdateLayoutConfig(?c4ShapeInRow, ?c4BoundaryInRow): New. This call updates the default c4ShapeInRow(4) and c4BoundaryInRow(2).
|
||||||
|
|
||||||
- - [ ] EightSidedShape(): This call returns the name of the eight sided shape and can be used as ?shape argument.
|
|
||||||
|
|
||||||
- - [ ] DashedLine(): This call returns the name of the dashed line and can be used as ?lineStyle argument.
|
|
||||||
|
|
||||||
- - [ ] DottedLine(): This call returns the name of the dotted line and can be used as ?lineStyle argument.
|
|
||||||
|
|
||||||
- - [ ] BoldLine(): This call returns the name of the bold line and can be used as ?lineStyle argument.
|
|
||||||
|
|
||||||
- - [x] UpdateLayoutConfig(?c4ShapeInRow, ?c4BoundaryInRow): New. This call updates the default c4ShapeInRow(4) and c4BoundaryInRow(2).
|
|
||||||
|
|
||||||
There are two ways to assign parameters with question marks. One uses the non-named parameter assignment method in the order of the parameters, and the other uses the named parameter assignment method, where the name must start with a $ symbol.
|
There are two ways to assign parameters with question marks. One uses the non-named parameter assignment method in the order of the parameters, and the other uses the named parameter assignment method, where the name must start with a $ symbol.
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user