Allows external diagrams to override internal diagrams, if necessary.
This will help move ELK to a different package, without completely breaking rendering, by falling back to dagre, and supporting ELK if it's registered as an external diagram.
* develop: (164 commits)
Update all patch dependencies
Fix docs
Update packages/mermaid/src/docs/community/questions-and-suggestions.md
Update packages/mermaid/src/diagrams/class/classRenderer-v2.ts
update edge ids
draw top actors with lines first followed by messages
Bump GitHub workflow actions to latest versions
Update docs
Documentation: clarify sentence
Fix lint
Fix typo
fix typo
Add new Atlassian integrations
chore(deps): update all patch dependencies
Update demos/sequence.html
chore: release v10.6.1
fix
fix
fix: render the participants in same order as they are created
fix(flow): fix invalid ellipseText regex
...
* develop: (126 commits)
Update all patch dependencies
Fix docs
Update packages/mermaid/src/docs/community/questions-and-suggestions.md
Update packages/mermaid/src/diagrams/class/classRenderer-v2.ts
update edge ids
draw top actors with lines first followed by messages
Bump GitHub workflow actions to latest versions
Update docs
Documentation: clarify sentence
Fix lint
Fix typo
fix typo
Add new Atlassian integrations
chore(deps): update all patch dependencies
Update demos/sequence.html
chore: release v10.6.1
fix
fix
fix: render the participants in same order as they are created
fix(flow): fix invalid ellipseText regex
...
Position the tooltip centered, just below the node being hovered.
Update packages/mermaid/src/diagrams/flowchart/flowDb.js
Co-authored-by: Sidharth Vinod <sidharthv96@gmail.com>
window.scrollY is already account for which means document.body.scrollTop incorrectly offsets the tooltip vertically.
The same is not true for horizontal position.
Replace the `TimonVS/pr-labeler-action` with
`release-drafter/release-drafter` as it has an [`autolabeler`][1]
option that can autolabel PRs for us.
This should fix labeling PRs from forks,
see https://github.com/TimonVS/pr-labeler-action/issues/25.
I've kept the `.github/pr-labeler.yml` configuration file, so that
links to it from the https://mermaid.js.org website continue to work.
I've also kept everything in the same
`.github/workflows/pr-labeler.yml` GitHub Actions workflow to make the
`git diff` easier to review, and to keep the GitHub Actions permissions
the same.
[1]: ff929b5ceb/README.md (autolabeler)
* develop:
docs: Wrap email in <>
chore(dev-deps): update @typescript-eslint to v6
chore(deps): update all patch dependencies
test(e2e): wait for theme-directives.html
test(e2e): remove unused code in theme-directives
test(e2e): wait for marker_unique_id.html e2e test
Update the `@typescript-eslint/eslint-plugin` and
`@typescript-eslint/parser` plugin to v6.
The full list of changes needed can be found in the
[Announcing typescript-eslint v6 blog post][1], but the ones that
affect us are:
- Dropped support for Node.JS v14.
This isn't a big deal for us, since Mermaid uses a version of
`eslint-plugin-jsdoc` that does not support Node.JS v14 either,
see 120029913d
(chore(deps): update dependency eslint-plugin-jsdoc to v46, 2023-06-27)
- Changes to the `plugin:@typescript-eslint/recommended` configuration.
I've manually changed the following two rules to match their old
`@typescript-eslint/parser` v5 settings, to avoid turning ESLint
warnings into errors:
- `@typescript-eslint/no-explicit-any` to `warn`
- `@typescript-eslint/no-unused-vars` to `warn`
[1]: https://main--typescript-eslint.netlify.app/blog/announcing-typescript-eslint-v6
The `theme-directives.html` test currently sometimes takes a screenshot
before all of the Mermaid diagrams have completed rendering.
We can use the `urlSnapshopTest()` helper function, which waits until
a `.rendered` property exists on the page.
Co-authored-by: Sidharth Vinod <sidharthv96@gmail.com>
Sometimes, Cypress takes the screenshot for marker_unique_id.html early,
before mermaid has finished rendering the diagrams.
Fixes: 924c9e913b
Co-authored-by: Sidharth Vinod <sidharthv96@gmail.com>
* develop:
Bump version
chore: Fix type in 'getLineFunctionsWithOffset'
Update cypress/platform/marker_unique_id.html
refactor: Add getLineFunctionsWithOffset function
refactor: Move EdgeData to types
fix: PointStart marker refX
Added cypress test
chore(deps): update all patch dependencies
refactor: Fix typings in utils.ts
Give markers unique id's per graph
chore: Add @internal to createCSSStyles
chore: Bump version
refactor: Remove unused variables
fix: #4818 support `getClasses` in external diagrams.
* develop:
chore: Fix type in 'getLineFunctionsWithOffset'
refactor: Add getLineFunctionsWithOffset function
refactor: Move EdgeData to types
fix: PointStart marker refX
chore(deps): update all patch dependencies
refactor: Fix typings in utils.ts
chore: Add @internal to createCSSStyles
chore: Bump version
refactor: Remove unused variables
fix: #4818 support `getClasses` in external diagrams.
* develop:
Remove unnecessary tests
Remove optional chaining
refactor: Use `||` instead of `??`
core: Adapt changes from 3f7bafb2d7
Update cypress/helpers/util.js
chore: Add deprecation notices, improve types
chore: Cleanup gitGraph tests
Update README.md
refactor: Move setWrap to individual diagrams as necessary.
refactor: Remove directives from grammar
refactor: Update DBs to remove directive handling
refactor: Move directive processing before parsing
I refactored the code to improve its time complexity by removing unnecessary code and optimizing the existing code.
* develop:
Update flowchart.md (#4798)
Update flowchart.md (#4792)
chore: Update docs
Added missing integration tests and release version in docs.
chore: Fix warning formatting
docs: Disable showValues in sankey example
Added support for millisecond and second to gantt tickInterval
Use utf8 encoding in Jupyter example
* develop: (31 commits)
chore: Update docs
New Mermaid Live Editor for Confluence Cloud (#4814)
Update link to Discourse theme component (#4811)
Update flowchart.md (#4810)
chore: Update docs
"CSS" instead of "css" in flowchart.md (#4797)
Update CONTRIBUTING.md
Update CONTRIBUTING.md
fix: typos (#4801)
chore: Align with convention
add additional test case
chore(deps): update all patch dependencies
chore(deps): update all minor dependencies
added test case
add sanitize text
Update docs
modifications to generic parser
improvements to parseGenericTypes
Update packages/mermaid/src/diagrams/class/svgDraw.js
return comment
...
* develop:
chore: Align with convention
add additional test case
added test case
add sanitize text
Update docs
modifications to generic parser
improvements to parseGenericTypes
Update packages/mermaid/src/diagrams/class/svgDraw.js
return comment
add tsdoc comments
update tests
apply suggesitons
Update packages/mermaid/src/diagrams/class/classTypes.ts
Update packages/mermaid/src/diagrams/class/classTypes.ts
update tests and db name
Fix tests
spec changes
update classes to handle , in generic
Update and add tests
Create new type for member handling
Currently (in Mermaid v10), pretty much all enum types in the
MermaidConfig have generic `string` or `number` fallbacks,
for backwards compatibility.
This commit drops this. The MermaidConfig TypeScript types now expects
a limited amount of values.
BREAKING-CHANGE: Remove `MermaidConfig` generic type fallbacks for
enum values.
* next:
chore: Increase heap size when building
fix(er): bug if relationship is declared first
test(er): add cypress test on entity name alias
feat(er): use square brackets to add aliases
docs(er): add release version for entity name aliases
feat(er): add entity name alias
* develop:
fix(er): bug if relationship is declared first
test(er): add cypress test on entity name alias
feat(er): use square brackets to add aliases
docs(er): add release version for entity name aliases
feat(er): add entity name alias
* develop: (22 commits)
docs: Fix link
Update docs
fix(pie): align slices and legend orders
Mermaid version v10.4.0
unique batches every time, if not repeated tests end up in the same batch
Added missed .md
Increase JS heap
More tests for redirects + prettier
Fixed redirects inside vitepress, extended tests
chore: Explain redirect.ts clearly
Reverted docker compose to develop branch
Run GA
Update docs
Update docs
fix(er): bug if relationship is declared first
update latest news
Removed all n00b file names and added redirects
test(er): add cypress test on entity name alias
feat(er): use square brackets to add aliases
docs(er): add release version for entity name aliases
...
* develop:
Fixed docs according review
chore: Fix type imports
Fixed links
Split development documentation in several separate pages, fixes for the sidebar menu
* develop:
chore: Remove circular dependency
Update docs
docs: Add frontmatter config demos
docs: Add frontmatter config docs
fix: XSS vulnerability
chore: Minor typo fixes
chore: Add test with both frontmatter and directive
Update docs
feat: Add support for config in frontmatter
chore: Fix type in assignWithDepth
refactor: Move `sanitizeDirective` into `addDirective`
refactor: Rename and cleanup `directiveSanitizer`
* feature/frontmatterConfig:
Update docs
docs: Add frontmatter config demos
docs: Add frontmatter config docs
fix: XSS vulnerability
chore: Minor typo fixes
chore: Add test with both frontmatter and directive
Update docs
feat: Add support for config in frontmatter
deps: Update unocss and webpack to address vulnerability.
chore: Fix type in assignWithDepth
refactor: Move `sanitizeDirective` into `addDirective`
refactor: Rename and cleanup `directiveSanitizer`
chore(deps): update all patch dependencies
ci(release-drafter): add more release notes categories
Add the following new categories to the release notes:
- **BREAKING CHANGES**
- Performance
- Documentation
I've also made the `feature`, `fix`, and `chore` label point to
their appropriate section.
* develop: (56 commits)
chore: Add comments on redirectMaps
remove `chart` from `pie.spec.ts` description
Update docs
change `defaultConfig` type to `RequiredDeep` and use it in `pieDb`
use `DiagramStylesProvider` in `pieStyles.ts`
remove `setConfig` and `resetConfig` in pie
add `structuredClone` in pie `getConfig`
cleanAndMerge pieConfig
remove cleanClone
feat: Add cleanAndMerge and tests
chore: Rename utils.spec.ts
move db assignment from `beforeEach` to `beforeAll`
create `structuredCleanClone` helper function
add more types to pieRenderer
add `resetConfig` to `clear` in pieDb
rename `reset` to `resetConfig`
use `structedClone` in `pieDb`
remove `PieDiagramConfig` and import generated one
remove unnecessary lines in pie files
remove unused `HTML` import in pieRenderer
...
* develop:
Update all minor dependencies
Update all patch dependencies
make more `RectData` required and remove optional assignment
use lineBreakRegex in `svgDrawCommon`
fix svgDrawCommon import by adding `.js`
add types to `svgDrawCommon.ts`
convert `svgDrawCommon` to TS
* master:
Version update and adjusted error diagram
Fix for broker error diagram related #4178
Adding new flowchart tests related to issue #2139
Fix for interim issue with classes in state diagrams
#2139 Applying user defined classes properly when calculating shape width
chore: Ignore localhost
Update packages/mermaid/src/docs/community/development.md
Update docs/community/development.md
docs: Add development example page.
* origin/release/10.3.1: (85 commits)
Version update and adjusted error diagram
Fix for broker error diagram related #4178
Adding new flowchart tests related to issue #2139
Fix for interim issue with classes in state diagrams
use default export in `error` diagram
create `ParserDefinition` type
standardized `error` diagram'
#2139 Applying user defined classes properly when calculating shape width
style: format packages/mermaid/src/config.type.ts
build(types): use prettier conf on config.types.ts
Syntax Update CONTRIBUTING.md
docs: Correct detectType filename
chore: Minor cleanups
chore: remove comment
chore: Remove comments, cleanup
fix!(deps): fix zenuml style leakage. update @zenuml/core to ^3.0.6 to fix the style leakage.
Update selectSvgElement.ts
create `Group` type
Add specialChars in textNoTagsToken, alphaNumToken
Return Unicode Text to idStringToken definition
...
Currently, the `packages/mermaid/src/config.type.ts` types file
(auto-generated via `pnpm run --filter mermaid types:build-config`)
uses the default prettier config.
Instead, we should use the prettier config in the Mermaid repo, as it's
slightly different from the default prettier config.
* develop: (59 commits)
fix!(deps): fix zenuml style leakage. update @zenuml/core to ^3.0.6 to fix the style leakage.
Update selectSvgElement.ts
create `Group` type
Add specialChars in textNoTagsToken, alphaNumToken
Return Unicode Text to idStringToken definition
Add underscore to unit test on special Chars
Revert to old docs concerning quotations marks in string
Refactor unit tests and remove repetition
Correct idStringToken definition to include all individual special tokens
Add unit tests for node ids with special Chars
Create lychee.toml
create `selectSvgElement`
change `svgElem` to `SVG` in `configureSvgSize`
add `configureSvgSize` in infoRenderer
run docs:build
remove info sandbox test case
Remove replaceAll method in addLink
Modify HREF token regex to contain space
Add unit tests for stange node names
Remove escaped quotes with backslash feature
...
This will ensure that alphaNumToken does not lose any of
the previously used tokens in its definition. The same
tokens were added to textNoTagsToken explicitly, because it used to
have alphaNumToken in its definition before I removed it.
Previously, textNoTagsToken and alphaNumToken had many tokens in
common in their definition. To avoid grammar conflicts, the
alphaNumStatement grammar was created. However, I found this
unintuitive and was an extra step just to avoid repetition in
the definitions.
I opted to have repetition in the definitions of textNoTagsToken
and alphaNumToken and it be explicitly clear right away, rather than
have extra grammar statements like alphaNumStatement which don't look
like they do anything at first glance
This attempts to maintain the current behaviour.
Previously, because HREF contained a space and called
a state, the href token was able to be placed in the
beginning of node ids (because it wouldn't conflict
without the space). We require the space to keep that
behaviour.
Originally, I thought this was necessary to prevent parsing
the token as part of an edge. I forgot that the token will always
be separated from the link/edge by the node id. Added an unit test
for an edge case to be certain.
Previously, you were allowed to define a class called 'default'
but were not allowed to use it because the classStatement grammar
expected an alphanum, which did not include the word DEFAULT
Similar to what was done in the class diagram parser,
this will allow string tokens to appear in any state.
This is especially helpful, because it will simplify the
code and any future refactoring
This was never really used and had many things wrong with it.
I believe that if a hex was provided in the diagram specification,
the alphanum grammar would break it up into a BRKT and NUM token
and use the first line with the addVertex() function.
Second, the styleLink grammar provides the exact same functionality
with the linkStyle keyword.
Third, updateLink() expects an array of nums, not a hex digit.
Fourth, no documentation is provided on this grammar statement existing.
Fifth, the unit test does not work in version 10.2.4
What this allows is for idStrings that are separated by
dashes or underscores to be considered one whole string
rather than a bunch of tokens mixed together.
This is necessary for examples such as a-node-graph[text].
Now, the last part of the idString 'graph' will be read as
part of the NODE_STRING token rather than attempting to add
a GRAPH token to the idString.
* develop:
build(docs): handle YAML edgecases in markdown
run pnpm lint:fix
Update cypress/helpers/util.ts
change deprecated `btoa` into `Buffer.from`
allow ts extension imports in cypress ts files
build(docs): allow using custom `editLink`
build(docs): add `editLink: ` to MD frontmatter
build(docs): run remark plugins on MermaidConfig
Fix import file extension
Batch by commit
resolve lint issues for `no-inferrable-types`
fix wrong config paramater in some cypress spec
convert cypress/helpers/util.js into ts
convert file from js into ts
Add a YAML front-matter entry called `editLink` to Markdown files in
Vitepress, e.g.
```markdown
---
editLink: "https://github.com/mermaid-js/mermaid/edit/develop/packages/mermaid/src/schemas/config.schema.yaml"
---
Here is my markdown file!
```
Although Vitepress doesn't officially support adding a URL as a
`editLink:` YAML front-matter, we can add a custom `editLink` function
to our Vitepress config that does allow it.
This reverts commit 063cb124cd.
This file was originally added to test whether the new implementation
of the default config in
`packages/mermaid/src/schemas/config.schema.yaml` matched the old
existing default config in `packages/mermaid/src/oldDefaultConfig.ts`,
and this test is no longer needed.
This test was accidentally removed by a bad merge commit, see
29291c89 (Merge branch 'develop' into pr/aloisklink/4112, 2023-07-06).
This test checks whether the default config defined in the
`config.schema.yaml` file matches the old default config defined in
`oldDefaultConfig.ts`.
Fixes: 29291c8901
* develop: (293 commits)
chore: Remove lint warnings in example-diagram
chore: Reduce codecov pushes
Turn off codecov project status check
build(docs): fix links to `config.schema.json`
ci(lint): check if MermaidConfig types are in sync
docs: add link to mermaid config docs in sidebar
test(config): add temp test for defaultConfig
build(types): create types from config JSON Schema
build(types): add script to generate Config types
build(docs): build JSON Schema docs
build: use vite to get default mermaid config
feat: add Mermaid Config in JSON Schema format
docs: add support for ```regexp``` code blocks
test: test partial QuadrantChartConfig options
test: fix types in `config.spec.ts`
style: fix lint issues in src/config.spec.ts
test: rename src/config.spec.js to config.spec.ts
fix(quadrant): make quadrant options optional
fix lint
update homepage community link
...
Fix the link in some Mermaid Config markdown documentation,
which previously pointed to `src/schemas/config.schema.yaml`,
which went nowhere.
Now, these links point to:
- config.schema.json (i.e. the generated JSON file, not YAML)
- links are relative to the markdown documentation
We also needed to store the `schema.json` file in the Vitepress
`public/` folder, as Vitepress otherwise doesn't bundle `.json` files
properly, when running `vitepress build src/vitepress`.
Add a CI check that runs
`pnpm run --filter mermaid types:verify-config` and checks whether
the MermaidConfig TypeScript types are in sync with the MermaidConfig
JSON Schema.
Adds a temporary test to ensure that the new defaultConfig,
generated by Vite automatically from the `MermaidConfig` JSON Schema,
has the same values as the old defaultConfig
(taken from
38013de711/packages/mermaid/src/defaultConfig.ts)
The only minor difference seems to be that:
- `gitGraph` now has a default `useMaxWidth: false` option
(previously used to be `undefined`),
- `class` now has a `htmlLabels` value of `false` instead of `undefined`.
Add script `packages/mermaid/scripts/create-types-from-json-schema.mts`
to automatically generate the TypeScript definition for `MermaidConfig`
from the `MermaidConfig` JSON Schema at
`packages/mermaid/src/schemas/config.schema.yaml`.
To do this, we are using this library
[`json-schema-to-typescript`][1], which is also used by Webpack to
generate their types from their JSON Schema.
In order to make sure that this isn't a breaking change, the script
makes all fields **optional**, as that is what the original typescript
file has.
Additionally, I've put in some custom logic into the script, so that
the exact same order is used for the TypeScript file, to make the
`git diff` easier to review. In the future, we can remove this custom
logic, once we no longer need to worry about `git merge` conflicts.
[1]: https://github.com/bcherny/json-schema-to-typescript
Automatically build documentation for JSON Schema.
This is only built when running with `--vitepress`,
as it currently produces loads of markdown files, which I feel like
we shouldn't be committing.
This currently manually uses some internal `jsonschema2md` functions
so that we can manually control the Markdown output.
Adds a vitepress JsonSchema plugin that automatically loads
the Mermaid Config JSON Schema from a .schema.yaml file and
gets the default values from it.
Add a JSON Schema file (in YAML) for the MermaidConfig.
This JSON Schema file follows [JSON Schema 2019-09][1], with some slight
modifications to work with:
- [json-schema-to-typescript][2]
The `tsType` keyword is used to override the generated TypeScript
type, when it doesn't match the JSON Schema type.
This is used in two cases:
- when the current type cannot be represented in JSON Schema
(e.g. `FontCalculator`, which is a function)
- when the JSON Schema type is narrower than the TypeScript type.
Currently, many enums types are listed as `string` in TypeScript,
but json-schema-to-typescript converts them to `"val1" | "val2"`.
I've manually set them to `string | "val1" | "val2"` to avoid
causing a breaking change in the TypeScript types. We should
remove these in a future major version of TypeScript.
- [@adobe/jsonschema2md][3]
The `meta:enum` keyword is used to add documentation for specific enum
values.
[1]: https://json-schema.org/draft/2019-09/release-notes.html
[2]: https://www.npmjs.com/package/json-schema-to-typescript
[3]: https://www.npmjs.com/package/@adobe/jsonschema2md
Currently, shiki doesn't support code-blocks that use the regexp
language, which means vitepress throws an error on them:
```regexp
^([1-9][0-9]*)(minute|hour|day|week|month)$
```
As a hack until shiki supports them, I've just modified them to get
converted into JavaScript RegEx literal code-blocks, e.g.:
```javascript
/^([1-9][0-9]*)(minute|hour|day|week|month)$/
```
Make the types of the options in QuadrantChartConfig in the
MermaidConfig optional. All of these (except for the values in
`BaseDiagramConfig`) will be automatically set to their
default values, so they're optional from a user perspective.
Replace the TypeScript `enum {a = "a", b = "b"}` types with
TypeScript's literal types (e.g. `"a" | "b"`).
This is because TypeScript enums are
[_not_ a type-level addition to JavaScript][1], and even the official
TypeScript docs say to be careful when using.
[1]: https://www.typescriptlang.org/docs/handbook/2/everyday-types.html#enums
Added cypress container (from their official image),
may be reconsidered later to choose our own
The only minor problem is node JS version mistmatch
package.json 18.16.0
docker-compose mermaid 18.16.1
docker-compose cypress 18.16.0
Host option in cypress docker container must be removed
in favor of possible configuration option.
http://localhost:9000 are currently hard-coded, that is bad
Updated ./run script with better documentation
and added some styles too it as well
Started sankey.spec.js as an example
Tooltip is an object that gets reset to an array. It is then looked up for properties without guard, causing array functions like "length" and "constructor" to run into undefined behvaior.
- add types for parameter and returned value and variables
- change the deperated `unescape` into `decodeURIComponent`
- create `CypressConfig` and `CypressMermaidConfig` and `CodeObject` types
- add default value for some parameter
- remove @ts-ignore comments
- rename vitest test and describe title
- remove unnecessary types, e.i, `null` and `number`
- clean `addSVGa11yTitleDescription` and `setA11yDiagramInfo` functions
* develop: (783 commits)
chore(deps): update all minor dependencies
chore: Run codecov based on E2E test status
change REAMDME.md coverage from coveralls into codecov
Add codecov.yaml
Upload E2E
set normal mode for vitest coverage
Fix path name
Add codecov to unit tests
Add codecov to E2E
chore: Add coverage scripts
chore: add excludes
chore: update deps
Merge coverages
Add coverage paths
Rebuild
chore: update pnpm
Add coverage for E2E tests
rename plugin variable into info in infoDetector.ts
remove cypress/platform/index.html
update pnpm-lock.yaml
...
* develop: (43 commits)
rename plugin variable into info in infoDetector.ts
remove cypress/platform/index.html
update pnpm-lock.yaml
indent info.html files
update pnpm-lock.yaml
remove empty options in cypress info.spec.ts
format and add theme to cypress info.html
convert the cypress info.spec.js into ts
add messing timeline and info demoes links
change infoDb db export
remove default export in info files
resolve db import in info.spec.ts
remove assigned variables to their variables and export db without default
use object destructuring for getConfig in infoRenderer
move default_info_db into infoDbOF
remove id and diagram assigning in info loader
assign returned variables to their variables
remove handled `ts-ignore` in info diagram
handle optional `.styles`
add info fields interface
...
* develop: (815 commits)
Move filetype Recommendations to the top
Update docs
Update integrations.md per review
Disable coveralls
Update coveralls
Ignore bundlephobia
Update docs
strawman extension and mime type docs
Update docs
Rename info to note
Rename "info" to "note"
Update all patch dependencies
Fix Directives Documentation
Run docs:build
Update tutorial link
Run build
Fix link to Tutorials from n00b-overview page
Correct timeline spelling
UPdated version to 10.2.3
Remove old changelog
...
Updated lintignore and move dockerfile to .dev
Fix
Updated contributing
Fixing GA
Fix contributing.md
Fixing issues after review
No need to change .eslintignore
there is no need for matching, capturing results, and validating nullablity
just using `.test` would be enough and significantly faster
for more info, see https://stackoverflow.com/10940138/16476610
* develop:
Update docs
Rename info to note
Rename "info" to "note"
Update all patch dependencies
Fix Directives Documentation
Update tutorial link
Run build
Fix link to Tutorials from n00b-overview page
UPdated version to 10.2.3
Remove old changelog
Remove old changelog
Setting version to 10.2.2
#4446 Improved regular expression
#4446 Updating the cleanup criteria
#4438 Reverted to the changes from #4285
Fix download
Fix compile error in docs.
Fix Contributor link in homepage
Update docs
Add hint on "flowchart" and "graph" (and some more styling)
* develop: (22 commits)
Update docs
Added CKEditor and GitHub Writer to available integrations.
chore(deps): update all patch dependencies
build(deps): fix broken pnpm-lock.yaml file
Mermaid version 10.2.0
Mermaid Version 10.2.0-rc.4
Label background fix
Test commit
Fix for regression error in sequenceDiagrams
Fix visibility issue for fields
fix parsing issue with class diagrams
fix: Use unicode arrows in quadrant chart axis
fix: Use unicode arrows in quadrant chart axis
fix lint command
Bump version
Back to JS with jsdoc types
Add unsupported text
Reduce changes in test
Fix deps
Fix lockfile
...
* develop: (66 commits)
Update docs
Update docs
Improve the wording of security level values
Added quadrantChart to the side bar
Added e2e test cases with some fixes
Added documentation for the quadrantChart
Restructured the build function and addressed more review comment
Fixed some parser issue and added test cases for the parser
Fixed review comment
Update docs
Converted files to typescript and added proper types
Fix blog linting
Debug fetch-contributors
Fix lockfile
Revert "Replace esno & ts-node with tsx"
[draft] Added support for quadrant chart
Fix lockfile
Fix build
Update pnpm-lock
Replace esno & ts-node with tsx
...
Merge conflicts:
- pnpm-lock.yaml
* develop: (66 commits)
Update docs
Update docs
Improve the wording of security level values
Added quadrantChart to the side bar
Added e2e test cases with some fixes
Added documentation for the quadrantChart
Restructured the build function and addressed more review comment
Fixed some parser issue and added test cases for the parser
Fixed review comment
Update docs
Converted files to typescript and added proper types
Fix blog linting
Debug fetch-contributors
Fix lockfile
Revert "Replace esno & ts-node with tsx"
[draft] Added support for quadrant chart
Fix lockfile
Fix build
Update pnpm-lock
Replace esno & ts-node with tsx
...
* develop: (33 commits)
Update version
Fix classParser
Check for conflict when linting jison
Update class grammar test
fix Class diagram grammar
Skip sourcemap
Bump version
Update deps
Fix unit tests
Update vite
Fix applitools cypress
Update packages/mermaid/package.json
chore(deps): update dependency typescript to v5
fix typedoc
fix(deps): update all minor dependencies
chore(deps): update pnpm to v8
chore(deps): update fregante/setup-git-user action to v2
fix(deps): update all minor dependencies
chore(deps): update dependency start-server-and-test to v2
chore(deps): update dependency rimraf to v5
...
Here are the changes I made:
Removed unnecessary variables and assignments
Removed unnecessary object property assignments
Removed redundant code by consolidating similar conditionals
Removed unused parameters and default values
Simplified some conditionals with boolean expressions
Removed unused variables and imports
Extracted common code into a reusable function
By optimizing the code in these ways, we can reduce the time complexity of the code and improve its performance.
'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',
@@ -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.
# This Action will scan dependency manifest files that change as part of a Pull Reqest, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging.
# This Action will scan dependency manifest files that change as part of a Pull Request, surfacing known-vulnerable versions of the packages declared or updated in the PR. Once installed, if the workflow run is marked as required, PRs introducing known-vulnerable packages will be blocked from merging.
# Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement
# Public documentation: https://docs.github.com/en/code-security/supply-chain-security/understanding-your-software-supply-chain/about-dependency-review#dependency-review-enforcement
Please read in detail about how to contribute documentation and code on the [Mermaid documentation site.](https://mermaid-js.github.io/mermaid/#/development)

---
Here are a few things to know to get you started on the right path.
# Mermaid contribution cheat-sheet
Below link will help you making a copy of the repository in your local system.
If you don't have direct access to push to mermaid repositories, make a fork first. Then clone. Or clone directly from mermaid-js:
```bash
```bash
git clone git@github.com:mermaid-js/mermaid.git
git clone git@github.com:mermaid-js/mermaid.git
cd mermaid
cd mermaid
```
Install required packages:
```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# 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
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
```
## Testing
```bash
# Run unit test
pnpm test
pnpm test
# Run unit test in watch mode
pnpm test:watch
# Run E2E test
pnpm e2e
# Debug E2E tests
pnpm dev
pnpm cypress:open # in another terminal
```
```
## Committing code
## Branch name format:
We make all changes via pull requests. As we have many pull requests from developers new to mermaid, the current approach is to have _knsv, Knut Sveidqvist_ as a main reviewer of changes and merging pull requests. More precisely like this:
- Large changes reviewed by knsv or other developer asked to review by knsv
- Smaller low-risk changes like dependencies, documentation, etc. can be merged by active collaborators
- Documentation (updates to the `package/mermaid/src/docs` folder is also allowed via direct commits)
To commit code, create a branch, let it start with the type like feature or bug followed by the issue number for reference and some describing text.
One example:
`feature/945_state_diagrams`
Another:
`bug/123_nasty_bug_branch`
## Committing documentation
Less strict here, it is OK to commit directly in the `develop` branch if you are a collaborator.
The documentation is written in **Markdown**. 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).
### Documentation source files are in [`/packages/mermaid/src/docs`](packages/mermaid/src/docs)
The source files for the project documentation are located in the [`/packages/mermaid/src/docs`](packages/mermaid/src/docs) directory. This is where you should make changes.
The files under `/packages/mermaid/src/docs` are processed to generate the published documentation, and the resulting files are put into the `/docs` directory.
After editing files in the [`/packages/mermaid/src/docs`](packages/mermaid/src/docs) directory, be sure to run `pnpm install` and `pnpm run --filter mermaid docs:build` locally to build the `/docs` directory.
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"]
```text
[feature | bug | chore | docs]/[issue number]_[short description using dashes ('-') or underscores ('_') instead of spaces]
```
```
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.
````
## Documentation
```note
Note content
```
```tip
Documentation is necessary for all non bugfix/refactoring changes.
Tip content
```
```warning
Only make changes to files that are in [`/packages/mermaid/src/docs`](packages/mermaid/src/docs)
Warning content
```
```danger
**_DO NOT CHANGE FILES IN `/docs` MANUALLY_**
Danger content
```
````
The `/docs` folder will be rebuilt and committed as part of a pre-commit hook.
**_DO NOT CHANGE FILES IN `/docs`_**
### The official documentation site
**[The mermaid documentation site](https://mermaid-js.github.io/mermaid/) is powered by [Vitepress](https://vitepress.vuejs.org/), a simple documentation site generator.**
If you want to preview the whole documentation site on your machine:
```sh
cd packages/mermaid
pnpm i
pnpm docs:dev
```
You can now build and serve the documentation site:
```sh
pnpm docs:serve
```
## Branching
Going forward we will use a git flow inspired approach to branching. So development is done in develop, to do the development in the develop.
Once development is done we branch a release branch from develop for testing.
Once the release happens we merge the release branch to master and kill the release branch.
This means... **branch off your pull request from develop**
## Content of a pull request
A new feature has been born. Great! But without the steps below it might just ... fade away ...
### **Add unit tests for the parsing part**
This is important so that, if someone else does a change to the grammar that does not know about this great feature, gets notified early on when that change breaks the parser. Another important aspect is that without proper parsing tests refactoring is pretty much impossible.
### **Add e2e tests**
This tests the rendering and visual appearance of the diagram. 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, run `pnpm run dev` to start the dev server, after that start cypress by running `pnpm exec cypress open` in the mermaid folder.
The rendering tests are very straightforward to create. There is a function imgSnapshotTest. This function takes a diagram in text form, the mermaid options and 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 for review it if it differs.
This is what a rendering test looks like:
```javascript
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');
});
```
### **Add documentation for it**
Finally, if it is not in the documentation, no one will know about it and then **no one will use it**. Wouldn't that be sad? With all the effort that was put into the feature?
The source files for documentation are in `/packages/mermaid/src/docs` and are written in markdown. Just pick the right section and start typing. See the [Committing Documentation](#committing-documentation) section for more about how the documentation is generated.
#### Adding to or changing the documentation organization
If you want to add a new section or change the organization (structure), then you need to make sure to **change the side navigation** in `mermaid/src/docs/.vitepress/config.js`.
When changes are committed and then released, they become part of the `master` branch and become part of the published documentation on https://mermaid-js.github.io/mermaid/
## 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)
[Join our slack community if you want closer contact!](https://join.slack.com/t/mermaid-talk/shared_invite/enQtNzc4NDIyNzk4OTAyLWVhYjQxOTI2OTg4YmE1ZmJkY2Y4MTU3ODliYmIwOTY3NDJlYjA0YjIyZTdkMDMyZTUwOGI0NjEzYmEwODcwOTE)

@@ -20,6 +20,9 @@ Generate diagrams from markdown-like text.
<palign="center">
<palign="center">
<ahref="./README.zh-CN.md">简体中文</a>
<ahref="./README.zh-CN.md">简体中文</a>
</p>
</p>
<palign="center">
Try Live Editor previews of future releases: <ahref="https://develop.git.mermaid.live/"title="Try the mermaid version from the develop branch.">Develop</a> | <ahref="https://next.git.mermaid.live/"title="Try the mermaid version from the next branch.">Next</a>
</p>
<br>
<br>
<br>
<br>
@@ -27,11 +30,11 @@ Generate diagrams from markdown-like text.
[](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml)
[](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml)
@@ -41,6 +44,22 @@ Generate diagrams from markdown-like text.
<ahref="https://mermaid-js.github.io/mermaid/landing/"><imgsrc="https://github.com/mermaid-js/mermaid/blob/master/docs/intro/img/book-banner-post-release.jpg"alt="Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out!"></a>
<ahref="https://mermaid-js.github.io/mermaid/landing/"><imgsrc="https://github.com/mermaid-js/mermaid/blob/master/docs/intro/img/book-banner-post-release.jpg"alt="Explore Mermaid.js in depth, with real-world examples, tips & tricks from the creator... The first official book on Mermaid is available for purchase. Check it out!"></a>
## Table of content
<details>
<summary>Expand contents</summary>
- [About](#about)
- [Examples](#examples)
- [Release](#release)
- [Related projects](#related-projects)
- [Contributors](#contributors)
- [Security and safe diagrams](#security-and-safe-diagrams)
@@ -55,12 +74,12 @@ Mermaid addresses this problem by enabling users to create easily modifiable dia
<br/>
<br/>
Mermaid allows even non-programmers to easily create detailed diagrams through the [Mermaid Live Editor](https://mermaid.live/).<br/>
Mermaid allows even non-programmers to easily create detailed diagrams through the [Mermaid Live Editor](https://mermaid.live/).<br/>
[Tutorials](./docs/config/Tutorials.md) has video tutorials.
For video tutorials, visit our [Tutorials](./docs/config/Tutorials.md) page.
Use Mermaid with your favorite applications, check out the list of [Integrations and Usages of Mermaid](./docs/ecosystem/integrations.md).
Use Mermaid with your favorite applications, check out the list of [Integrations and Usages of Mermaid](./docs/ecosystem/integrations-community.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).
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-community.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.
@@ -165,13 +184,7 @@ class Class10 {
int id
int id
size()
size()
}
}
namespace Namespace01 {
class Class11
class Class12 {
int id
size()
}
}
```
```
```mermaid
```mermaid
@@ -191,13 +204,7 @@ class Class10 {
int id
int id
size()
size()
}
}
namespace Namespace01 {
class Class11
class Class12 {
int id
size()
}
}
```
```
### State diagram [<a href="https://mermaid-js.github.io/mermaid/#/stateDiagram">docs</a> - <a href="https://mermaid.live/edit#pako:eNpdkEFvgzAMhf8K8nEqpYSNthx22Xbcqcexg0sCiZQQlDhIFeK_L8A6TfXp6fOz9ewJGssFVOAJSbwr7ByadGR1n8T6evpO0vQ1uZDSekOrXGFsPqJPO6q-2-imH8f_0TeHXm50lfelsAMjnEHFY6xpMdRAUhhRQxUlFy0GTTXU_RytYeAx-AdXZB1ULWovdoCB7OXWN1CRC-Ju-r3uz6UtchGHJqDbsPygU57iysb2reoWHpyOWBINvsqypb3vFMlw3TfWZF5xiY7keC6zkpUnZIUojwW-FAVvrvn51LLnvOXHQ84Q5nn-AVtLcwk">live editor</a>]
### State diagram [<a href="https://mermaid-js.github.io/mermaid/#/stateDiagram">docs</a> - <a href="https://mermaid.live/edit#pako:eNpdkEFvgzAMhf8K8nEqpYSNthx22Xbcqcexg0sCiZQQlDhIFeK_L8A6TfXp6fOz9ewJGssFVOAJSbwr7ByadGR1n8T6evpO0vQ1uZDSekOrXGFsPqJPO6q-2-imH8f_0TeHXm50lfelsAMjnEHFY6xpMdRAUhhRQxUlFy0GTTXU_RytYeAx-AdXZB1ULWovdoCB7OXWN1CRC-Ju-r3uz6UtchGHJqDbsPygU57iysb2reoWHpyOWBINvsqypb3vFMlw3TfWZF5xiY7keC6zkpUnZIUojwW-FAVvrvn51LLnvOXHQ84Q5nn-AVtLcwk">live editor</a>]
@@ -386,7 +393,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 +409,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.
@@ -410,7 +417,7 @@ _Unfortunately you can not have a cake and eat it at the same time which in this
## Reporting vulnerabilities
## Reporting vulnerabilities
To report a vulnerability, please e-mail security@mermaid.live with a description of the issue, the steps you took to create the issue, affected versions, and if known, mitigations for the issue.
To report a vulnerability, please e-mail <security@mermaid.live> with a description of the issue, the steps you took to create the issue, affected versions, and if known, mitigations for the issue.
[](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml)
[](https://github.com/mermaid-js/mermaid/actions/workflows/build.yml)
it('New line in node and formatted edge label',()=>{
it('New line in node and formatted edge label',()=>{
@@ -722,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',()=>{
@@ -735,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
it('New line in node and formatted edge label',()=>{
it('New line in node and formatted edge label',()=>{
@@ -794,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',()=>{
@@ -807,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
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
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
Some files were not shown because too many files have changed in this diff
Show More
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.