Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Replace dagre/dagre-d3 with dagre-d3-es #3809

Merged
merged 5 commits into from Nov 21, 2022

Conversation

aloisklink
Copy link
Member

📑 Summary

Replace the dagre and dagre-d3 libraries with dagre-d3-es.

Both dagre and dagre-d3 are deprecated and unmaintained, and haven't been updated for more than 3 years.

Since dagre-d3 still requires an old version of d3, this causes a bunch of security warnings, e.g. GHSA-36jr-mh4h-2g58

The dagre-d3-es package is a fork that contains support for "d3": "^7.6.1". Also, it's ESM, so we will get smaller bundle sizes too (mermaid.esm.min.mjs seems to be about 180 KB smaller!)

The only issue is that this fork isn't very well used (only has 3000 weekly downloads), compared to dagre-d3's 250,000 weekly downloads (although to be fair, a large proportion of dagre-d3's downloads probably come from mermaid).

Resolves #3712
Resolves #3705 (there might be other issues, but pnpm audit now says No known vulnerabilities found)
Resolves #3666
Resolves #2626

📏 Design Decisions

The mindmap e2e tests were being a bit flaky.

Sometimes, the mindmap e2e tests take a snapshot when the mindmap SVG has been created, but hasn't yet been fully rendered. E.g., the <svg ....> exits, but is empty.

I've added a quick check for a mindmap section root, so that the snapshot is only taken after the mindmap diagram has started rendering, and it seems like nothing has changed in the e2e tests.

I also added a demos/mindmap.html example, since I needed it anyway to help write the Cypress E2E tests.


Since it's is a less popular package, I've pinned dagre-d3-es to "7.0.2" instead of "^7.0.2". This does mean if there is a bug in dagre-d3-es, we will have to manually bump it ourselves, but it also means we won't accidentally be sending a buggy version of dagre-d3-es out to users in cases something changes (it might be worth disabling renovate for this if we're feeling paranoid!)

In the long-term, we should slowly move towards removing dagre if we can, see #1969.


Other useful links:

📋 Tasks

Make sure you

  • 📖 have read the contribution guidelines
  • 💻 have added unit/e2e tests (if appropriate)
  • 🔖 targeted develop branch

Copy link
Member

@sidharthv96 sidharthv96 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The ~200KB decrease in size is phenomenal!!

import addHtmlLabel from 'dagre-d3/lib/label/add-html-label.js';
import { render as Render } from 'dagre-d3-es';
import { applyStyle } from 'dagre-d3-es/src/dagre-js/util';
import { addHtmlLabel } from 'dagre-d3-es/src/dagre-js/label/add-html-label.js';
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Is the .js extension necessary?

Copy link
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It is normally required in the browser/Node.JS, see https://nodejs.org/api/esm.html#mandatory-file-extensions, but it looks like Vite is allowing it.

My gut feeling is to add the .js extension to everything except for things exported directly by the package.json. I've changed this in fd76e0e (I've git rebase-d my commits).

We could also try to add https://nodejs.org/api/packages.html#subpath-patterns to dagre-d3-es, so that we could do stuff like import {applyStyle} from 'dagre-d3-es/dagre-d3/util.js (e.g. without the /src/ bit) instead, but even then, the Node.JS docs seem to recommend only exporting paths that end with .js if possible.

demos/mindmap.html Outdated Show resolved Hide resolved
cypress/integration/rendering/mindmap.spec.js Outdated Show resolved Hide resolved
Currently, we have mindmap tests in the
cypress/integration/rendering/mermaid.spec.js which is a bit
odd. They should probably all be in the mindmap.spec.js file.
All tests have been moved to `mindmap.spec.js` in a previous commit.
Sometimes, the mindmap e2e tests take a snapshot when the mindmap
SVG has been created, but hasn't yet been fully rendered.

This adds a quick check for a mindmap section root, so that the
snapshot is only taken after the mindmap diagram has started
rendering.

I was also running into JSDoc ESLint warnings, so I moved the file
into a TypeScript file to fix those warnings.
Replace the dagre and dagre-d3 libraries with dagre-d3-es.

Both dagre and dagre-d3 are deprecated and unmaintained,
and haven't been updated for more than 3 years.

Since dagre-d3 still requires an old version of d3, this causes
a bunch of security warnings,
e.g. GHSA-36jr-mh4h-2g58

The [dagre-d3-es](https://github.com/tbo47/dagre-es) package is a fork
that contains support for `"d3": "^7.6.1"`. Also, it's ESM, so we will
hopefully get smaller bundle sizes too. The only issue is that this
fork isn't very well used (only has 3000 weekly downloads),
compared to `dagre-d3`'s 250,000 weekly downloads.

(although to be fair, a large proportion of dagre-d3's downloads
 probably come from mermaid)

Since it's is a less popular package,
**I've pinned `dagre-d3-es` to `"7.0.2"` instead of `"^7.0.2"`**.
This does mean if there is a bug in `dagre-d3-es`, we will have to
manually bump it ourselves, but it also means we won't accidentally
be sending a buggy version of `dagre-d3-es` out to users in cases
something changes (it might be worth disabling renovate for this
if we're feeling paranoid!)
@aloisklink
Copy link
Member Author

The ~200KB decrease in size is phenomenal!!

I think we can go further actually :)

dagre-d3-es has it's own version of graphlib in it, see https://github.com/tbo47/dagre-es/tree/main/src/graphlib. And graphlib is like a 500 KiB library, so using an ESM version might greatly decrease our bundle size. I didn't put it into this PR, since it looks like graphlib still has some activity (even if there hasn't been an NPM release for 3 years +), but it could be a future PR.

We could also try swapping out lodash for lodash-es and see if that decreases bundle size.

@sidharthv96
Copy link
Member

I was experimenting with that yesterday, analyzing our bundle size. Already replaced lodash and it did make a difference. I've also split out our internal diagrams from the bundle.

image

@weedySeaDragon
Copy link
Contributor

@sidharthv96 - what tool(s) did you use to generate the bundle size info? ( == my lack of experience with dealing with js toolchain)

@aloisklink
Copy link
Member Author

aloisklink commented Nov 19, 2022

I've also split out our internal diagrams from the bundle.

I think we should keep all the internal diagrams in a single bundle, mainly for backwards compatibility.

In the mermaid-cli project, we used to just copy the mermaid.min.js file and use that (it's part of the reason why we had so much trouble switching to using mindmaps). A lot of other projects seem to do the same thing, they just copy the bundle over into their static website.

To be honest, we don't really save much by moving it into separate bundles anyway, because all of the internal diagrams are always imported anyway by default (unless we enable lazy loading for all of them too).

E.g.

  • IFFE single file, no other dependencies (not even the ones in node_modules): mermaid.min.js
  • ESM single file, no other dependencies (not even the ones in node_modules): mermaid.esm.min.mjs
  • ESM import (listed in package.json): can be anything, because this assumes that a downstream project (Webpack/Vite/TypeScript/ESBuild/rollup) will bundle Mermaid into somebody else's app/website
  • CommonJS require (listed in package.json): just points to mermaid.min.js, because we have to bundle ESM dependencies for them to work in CommonJS. Only here for backwards compatibility.

@sidharthv96
Copy link
Member

sidharthv96 commented Nov 20, 2022

To be honest, we don't really save much by moving it into separate bundles anyway, because all of the internal diagrams are always imported anyway by default (unless we enable lazy loading for all of them too).

I did enable lazy loading for them. There are some kinks to iron out, but there is a performance difference.
If we bundle all the detectors, then the request count and loading time will come down further.

Good 3G

mermaid.min.js
image

Unbundled
image

4G

mermaid.min.js
image

Unbundled
image

WiFi

mermaid.min.js
image

Unbundled
image


After moving styles out,
image

@sidharthv96
Copy link
Member

@sidharthv96 - what tool(s) did you use to generate the bundle size info? ( == my lack of experience with dealing with js toolchain)

@weedySeaDragon I used https://github.com/btd/rollup-plugin-visualizer. Which has very nice diagrams.
The network diagram is a bit too messy, though.

Image from their readme.

image

@aloisklink
Copy link
Member Author

aloisklink commented Nov 20, 2022

I did enable lazy loading for them. There are some kinks to iron out, but there is a performance difference.
If we bundle all the detectors, then the request count and loading time will come down further.

🚀 Those size/speed differences look pretty good!

I still think that the bundles the Mermaid project provides shouldn't change (at least unless it's announced as a breaking change in a v10), but enabling lazy loading for all the diagrams does make sense, since then people using mermaid with their own bundlers will get the performance benefits!

@tbo47
Copy link

tbo47 commented Nov 20, 2022

I just released dagre-d3-es v7.0.4: https://www.npmjs.com/package/dagre-d3-es

It includes the modification with intersect (that you are not using) and the loadash optimization
https://github.com/tbo47/dagre-es/pulls?q=is%3Apr+is%3Aclosed

@sidharthv96 sidharthv96 mentioned this pull request Nov 20, 2022
3 tasks
@knsv knsv merged commit 29a02d1 into mermaid-js:develop Nov 21, 2022
@aloisklink aloisklink deleted the use-dagre-d3-es branch November 21, 2022 23:54
fuxingloh pushed a commit to fuxingloh/contented that referenced this pull request Dec 19, 2022
[![Mend
Renovate](https://app.renovatebot.com/images/banner.svg)](https://renovatebot.com)

This PR contains the following updates:

| Package | Change | Age | Adoption | Passing | Confidence |
|---|---|---|---|---|---|
| [mermaid](https://togithub.com/mermaid-js/mermaid) | [`9.2.2` ->
`9.3.0`](https://renovatebot.com/diffs/npm/mermaid/9.2.2/9.3.0) |
[![age](https://badges.renovateapi.com/packages/npm/mermaid/9.3.0/age-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![adoption](https://badges.renovateapi.com/packages/npm/mermaid/9.3.0/adoption-slim)](https://docs.renovatebot.com/merge-confidence/)
|
[![passing](https://badges.renovateapi.com/packages/npm/mermaid/9.3.0/compatibility-slim/9.2.2)](https://docs.renovatebot.com/merge-confidence/)
|
[![confidence](https://badges.renovateapi.com/packages/npm/mermaid/9.3.0/confidence-slim/9.2.2)](https://docs.renovatebot.com/merge-confidence/)
|

---

### Release Notes

<details>
<summary>mermaid-js/mermaid</summary>

###
[`v9.3.0`](https://togithub.com/mermaid-js/mermaid/releases/tag/v9.3.0)

[Compare
Source](https://togithub.com/mermaid-js/mermaid/compare/v9.2.2...v9.3.0)

### Significant Changes

-   25% Smaller
-   New docs
-   Replaces the deprecated and vulnerable `dagre-d3` with `dagre-es`

### Release Notes

- [#&#8203;3778](https://togithub.com/mermaid-js/mermaid/issues/3778)
Adding a hexgon shape
([#&#8203;3834](https://togithub.com/mermaid-js/mermaid/issues/3834))
[@&#8203;knsv](https://togithub.com/knsv)
- [#&#8203;3831](https://togithub.com/mermaid-js/mermaid/issues/3831)
Re-enabling themes for er diagrams
([#&#8203;3837](https://togithub.com/mermaid-js/mermaid/issues/3837))
[@&#8203;knsv](https://togithub.com/knsv)
- [#&#8203;3882](https://togithub.com/mermaid-js/mermaid/issues/3882)
fix for issues with mindmaps with only a single node
([#&#8203;3833](https://togithub.com/mermaid-js/mermaid/issues/3833))
[@&#8203;knsv](https://togithub.com/knsv)
- (chore) remove console stmt in pieDetector
([#&#8203;3840](https://togithub.com/mermaid-js/mermaid/issues/3840))
[@&#8203;weedySeaDragon](https://togithub.com/weedySeaDragon)
- (feat) state classDef documentation
([#&#8203;3841](https://togithub.com/mermaid-js/mermaid/issues/3841))
[@&#8203;weedySeaDragon](https://togithub.com/weedySeaDragon)
- 3882 edge labels
([#&#8203;3883](https://togithub.com/mermaid-js/mermaid/issues/3883))
[@&#8203;knsv](https://togithub.com/knsv)
- Add GHA that will check links + Fix broken links
([#&#8203;3765](https://togithub.com/mermaid-js/mermaid/issues/3765))
[@&#8203;spier](https://togithub.com/spier)
- Add official vim plugin to list in integrations
([#&#8203;3847](https://togithub.com/mermaid-js/mermaid/issues/3847))
[@&#8203;craigmac](https://togithub.com/craigmac)
- Add package visualizations
([#&#8203;3823](https://togithub.com/mermaid-js/mermaid/issues/3823))
[@&#8203;sidharthv96](https://togithub.com/sidharthv96)
- Add support for [@&#8203;include](https://togithub.com/include) in
docs
([#&#8203;3863](https://togithub.com/mermaid-js/mermaid/issues/3863))
[@&#8203;sidharthv96](https://togithub.com/sidharthv96)
- CI: disable pinning dependencies
([#&#8203;3735](https://togithub.com/mermaid-js/mermaid/issues/3735))
[@&#8203;aloisklink](https://togithub.com/aloisklink)
- Defects/issue 3878
([#&#8203;3880](https://togithub.com/mermaid-js/mermaid/issues/3880))
[@&#8203;MrCoder](https://togithub.com/MrCoder)
- Feat: Add aria-describedby, aria-roledescription
([#&#8203;3808](https://togithub.com/mermaid-js/mermaid/issues/3808))
[@&#8203;weedySeaDragon](https://togithub.com/weedySeaDragon)
- Fix
[#&#8203;3799](https://togithub.com/mermaid-js/mermaid/issues/3799):
Remove `type` from package.json
([#&#8203;3802](https://togithub.com/mermaid-js/mermaid/issues/3802))
[@&#8203;sidharthv96](https://togithub.com/sidharthv96)
- Fix for
[#&#8203;3835](https://togithub.com/mermaid-js/mermaid/issues/3835),
makes it possible to style path elements
([#&#8203;3836](https://togithub.com/mermaid-js/mermaid/issues/3836))
[@&#8203;knsv](https://togithub.com/knsv)
- Fix typos
([#&#8203;3820](https://togithub.com/mermaid-js/mermaid/issues/3820))
[@&#8203;endolith](https://togithub.com/endolith)
- Housekeeping with eslint-unicorn
([#&#8203;3845](https://togithub.com/mermaid-js/mermaid/issues/3845))
[@&#8203;sidharthv96](https://togithub.com/sidharthv96)
- Integrations added - Visual Studio Code \[Polyglot Interactive
Notebooks]
([#&#8203;3821](https://togithub.com/mermaid-js/mermaid/issues/3821))
[@&#8203;dfinke](https://togithub.com/dfinke)
- Mindmap integration docs
([#&#8203;3810](https://togithub.com/mermaid-js/mermaid/issues/3810))
[@&#8203;sidharthv96](https://togithub.com/sidharthv96)
- Reduce mermaid size by 31%
([#&#8203;3825](https://togithub.com/mermaid-js/mermaid/issues/3825))
[@&#8203;sidharthv96](https://togithub.com/sidharthv96)
- Remove extra arrow and adjust cross position
([#&#8203;3641](https://togithub.com/mermaid-js/mermaid/issues/3641))
[@&#8203;ishuen](https://togithub.com/ishuen)
- Replace `dagre`/`dagre-d3` with `dagre-d3-es`
([#&#8203;3809](https://togithub.com/mermaid-js/mermaid/issues/3809))
[@&#8203;aloisklink](https://togithub.com/aloisklink)
- Revert "Added pie"
([#&#8203;3842](https://togithub.com/mermaid-js/mermaid/issues/3842))
[@&#8203;pbrolin47](https://togithub.com/pbrolin47)
- Switch CDN to unpkg.com
([#&#8203;3777](https://togithub.com/mermaid-js/mermaid/issues/3777))
[@&#8203;sidharthv96](https://togithub.com/sidharthv96)
- Switch back to jsdelivr
([#&#8203;3873](https://togithub.com/mermaid-js/mermaid/issues/3873))
[@&#8203;sidharthv96](https://togithub.com/sidharthv96)
- Use `github-dark` to highlight fence blocks in vitepress docs
([#&#8203;3807](https://togithub.com/mermaid-js/mermaid/issues/3807))
[@&#8203;aloisklink](https://togithub.com/aloisklink)
- Use current mermaid version in docs.
([#&#8203;3846](https://togithub.com/mermaid-js/mermaid/issues/3846))
[@&#8203;sidharthv96](https://togithub.com/sidharthv96)
- Use stylis to prepend idSelector
([#&#8203;3829](https://togithub.com/mermaid-js/mermaid/issues/3829))
[@&#8203;DanInProgress](https://togithub.com/DanInProgress)
- bug: State diagram fix classes type
([#&#8203;3798](https://togithub.com/mermaid-js/mermaid/issues/3798))
[@&#8203;weedySeaDragon](https://togithub.com/weedySeaDragon)
- bug: change shiki getHighlighter import
([#&#8203;3804](https://togithub.com/mermaid-js/mermaid/issues/3804))
[@&#8203;weedySeaDragon](https://togithub.com/weedySeaDragon)
- chore(deps): remove dependency on `graphlib`
([#&#8203;3861](https://togithub.com/mermaid-js/mermaid/issues/3861))
[@&#8203;aloisklink](https://togithub.com/aloisklink)
- chore(deps): update all non-major dependencies (minor)
([#&#8203;3905](https://togithub.com/mermaid-js/mermaid/issues/3905))
[@&#8203;renovate](https://togithub.com/renovate)
- chore(deps): update all non-major dependencies (minor)
([#&#8203;3791](https://togithub.com/mermaid-js/mermaid/issues/3791))
[@&#8203;renovate](https://togithub.com/renovate)
- chore(deps): update lycheeverse/lychee-action action to v1.5.4
([#&#8203;3827](https://togithub.com/mermaid-js/mermaid/issues/3827))
[@&#8203;renovate](https://togithub.com/renovate)
- chore(deps): update pnpm to v7.17.0
([#&#8203;3828](https://togithub.com/mermaid-js/mermaid/issues/3828))
[@&#8203;renovate](https://togithub.com/renovate)
- chore(deps): update pnpm to v7.17.1
([#&#8203;3862](https://togithub.com/mermaid-js/mermaid/issues/3862))
[@&#8203;renovate](https://togithub.com/renovate)
- chore(docs): Auto build docs
([#&#8203;3547](https://togithub.com/mermaid-js/mermaid/issues/3547))
[@&#8203;sidharthv96](https://togithub.com/sidharthv96)
- chore: Housekeeping
([#&#8203;3783](https://togithub.com/mermaid-js/mermaid/issues/3783))
[@&#8203;sidharthv96](https://togithub.com/sidharthv96)
- chore: Merge master to develop
([#&#8203;3780](https://togithub.com/mermaid-js/mermaid/issues/3780))
[@&#8203;sidharthv96](https://togithub.com/sidharthv96)
- chore: clean up code in mermaidAPI render() and write specs/tests
([#&#8203;3684](https://togithub.com/mermaid-js/mermaid/issues/3684))
[@&#8203;weedySeaDragon](https://togithub.com/weedySeaDragon)
- chore: delete functions not used in diagrams/c4 code (dead code)
([#&#8203;3871](https://togithub.com/mermaid-js/mermaid/issues/3871))
[@&#8203;weedySeaDragon](https://togithub.com/weedySeaDragon)
- comments in states are skipped now
([#&#8203;3762](https://togithub.com/mermaid-js/mermaid/issues/3762))
[@&#8203;avijit1258](https://togithub.com/avijit1258)
- doc: remove links from atom.io; add note Atom has been archived
([#&#8203;3899](https://togithub.com/mermaid-js/mermaid/issues/3899))
[@&#8203;weedySeaDragon](https://togithub.com/weedySeaDragon)
- docs: refactor Theming doc
([#&#8203;3889](https://togithub.com/mermaid-js/mermaid/issues/3889))
[@&#8203;huynhicode](https://togithub.com/huynhicode)
- feat: Redirect old documentation links.
([#&#8203;3797](https://togithub.com/mermaid-js/mermaid/issues/3797))
[@&#8203;sidharthv96](https://togithub.com/sidharthv96)
- feat: Title support via front matter for ER, state, class, git, and
graph diagrams
([#&#8203;3706](https://togithub.com/mermaid-js/mermaid/issues/3706))
[@&#8203;MasonM](https://togithub.com/MasonM)
- fix(deps): update all non-major dependencies (patch)
([#&#8203;3790](https://togithub.com/mermaid-js/mermaid/issues/3790))
[@&#8203;renovate](https://togithub.com/renovate)
- fix(deps): update dependency rollup to v3
([#&#8203;3674](https://togithub.com/mermaid-js/mermaid/issues/3674))
[@&#8203;renovate](https://togithub.com/renovate)
- fix: LintStaged
([#&#8203;3844](https://togithub.com/mermaid-js/mermaid/issues/3844))
[@&#8203;sidharthv96](https://togithub.com/sidharthv96)

🎉 **Thanks to all contributors helping with this release!** 🎉

#### What's Changed

- chore(deps): update actions/checkout action to v3 by
[@&#8203;renovate](https://togithub.com/renovate) in
[mermaid-js/mermaid#3645
- chore(deps): update actions/setup-node action to v3 by
[@&#8203;renovate](https://togithub.com/renovate) in
[mermaid-js/mermaid#3646
- Remove inconsistent and deprecated semicolons by
[@&#8203;revolter](https://togithub.com/revolter) in
[mermaid-js/mermaid#3657
- Fix windows paths for `docs:build` by
[@&#8203;arpansaha13](https://togithub.com/arpansaha13) in
[mermaid-js/mermaid#3605
- feat: make `parseError` function more type-safe by
[@&#8203;Some-Dood](https://togithub.com/Some-Dood) in
[mermaid-js/mermaid#3643
- chore(deps): update all non-major dependencies (minor) by
[@&#8203;renovate](https://togithub.com/renovate) in
[mermaid-js/mermaid#3632
- chore(deps): update all non-major dependencies (patch) by
[@&#8203;renovate](https://togithub.com/renovate) in
[mermaid-js/mermaid#3671
- chore(deps): pin dependencies by
[@&#8203;renovate](https://togithub.com/renovate) in
[mermaid-js/mermaid#3685
- Added Open Graph meta tags by
[@&#8203;danangtomo](https://togithub.com/danangtomo) in
[mermaid-js/mermaid#3679
- add eslint-plugin-no-only-tests plugin by
[@&#8203;DKurilo](https://togithub.com/DKurilo) in
[mermaid-js/mermaid#3690
- Added and configured cspell plugin to eslint by
[@&#8203;devcer](https://togithub.com/devcer) in
[mermaid-js/mermaid#3604
- fix: gantt demo diagrams
([#&#8203;3655](https://togithub.com/mermaid-js/mermaid/issues/3655)) by
[@&#8203;isinek](https://togithub.com/isinek) in
[mermaid-js/mermaid#3688
- Chore/3697 eslint curly by
[@&#8203;jeroenekkelkamp](https://togithub.com/jeroenekkelkamp) in
[mermaid-js/mermaid#3698
- Update sequenceDiagram.md by
[@&#8203;imgss](https://togithub.com/imgss) in
[mermaid-js/mermaid#3707
- Use `eslint-plugin-tsdoc` for TypeScript files instead of
`eslint-plugin-jsdoc` by
[@&#8203;aloisklink](https://togithub.com/aloisklink) in
[mermaid-js/mermaid#3708
- chore(deps): pin dependencies by
[@&#8203;renovate](https://togithub.com/renovate) in
[mermaid-js/mermaid#3713
- chore(deps): update all non-major dependencies (patch) by
[@&#8203;renovate](https://togithub.com/renovate) in
[mermaid-js/mermaid#3714
- Order pie chart slices clockwise by order of entries by
[@&#8203;jasmaa](https://togithub.com/jasmaa) in
[mermaid-js/mermaid#3609
- fix: border attribute does not work in a certain writing style by
[@&#8203;maiermic](https://togithub.com/maiermic) in
[mermaid-js/mermaid#3636
- add the way to add notes to class diagram by
[@&#8203;DKurilo](https://togithub.com/DKurilo) in
[mermaid-js/mermaid#3647
- add statement aliases for ER diagram by
[@&#8203;DKurilo](https://togithub.com/DKurilo) in
[mermaid-js/mermaid#3649
- fix: Fix useMaxWidth option for git graph by
[@&#8203;uttk](https://togithub.com/uttk) in
[mermaid-js/mermaid#3652
- [#&#8203;3659](https://togithub.com/mermaid-js/mermaid/issues/3659)
Adding height when not using maxWidth by
[@&#8203;knsv](https://togithub.com/knsv) in
[mermaid-js/mermaid#3668
- Change fill attribute to style by
[@&#8203;CalebUsadi](https://togithub.com/CalebUsadi) in
[mermaid-js/mermaid#3719
- feat: \[State diagram] Add classDefs and classes to states by
[@&#8203;weedySeaDragon](https://togithub.com/weedySeaDragon) in
[mermaid-js/mermaid#3644
- Fill inheritance arrow with background color by
[@&#8203;vallsv](https://togithub.com/vallsv) in
[mermaid-js/mermaid#3543
- Ensure example code and rendered output are synced by
[@&#8203;marcjansen](https://togithub.com/marcjansen) in
[mermaid-js/mermaid#3721
- fix(git): Support quoted branch names by
[@&#8203;gibson042](https://togithub.com/gibson042) in
[mermaid-js/mermaid#3726
- docs: Add link to docs source by
[@&#8203;sidharthv96](https://togithub.com/sidharthv96) in
[mermaid-js/mermaid#3612
- chore(deps): update all non-major dependencies (patch) by
[@&#8203;renovate](https://togithub.com/renovate) in
[mermaid-js/mermaid#3736
- chore(deps): update all non-major dependencies (minor) by
[@&#8203;renovate](https://togithub.com/renovate) in
[mermaid-js/mermaid#3737
- feat(gantt): Add option 'tickInterval' for custom tick interval by
[@&#8203;DarkNami](https://togithub.com/DarkNami) in
[mermaid-js/mermaid#3729
- Fix/convert attr to style in er graph by
[@&#8203;CalebUsadi](https://togithub.com/CalebUsadi) in
[mermaid-js/mermaid#3722
- update user story link for
[#&#8203;3740](https://togithub.com/mermaid-js/mermaid/issues/3740) by
[@&#8203;6footGeek](https://togithub.com/6footGeek) in
[mermaid-js/mermaid#3741
- Improved New Documentation by
[@&#8203;emersonbottero](https://togithub.com/emersonbottero) in
[mermaid-js/mermaid#3678
- chore: fix cSpell word entry misspelling "mermiad" -> "mermaid" by
[@&#8203;weedySeaDragon](https://togithub.com/weedySeaDragon) in
[mermaid-js/mermaid#3751
- Fix link to CSS classes by
[@&#8203;hugovk](https://togithub.com/hugovk) in
[mermaid-js/mermaid#3752
- docs: Update references to default config in directives page by
[@&#8203;raptor0929](https://togithub.com/raptor0929) in
[mermaid-js/mermaid#3738
- Fix link relative links to documentation files by
[@&#8203;spier](https://togithub.com/spier) in
[mermaid-js/mermaid#3760
- chore(deps): update all non-major dependencies (patch) by
[@&#8203;renovate](https://togithub.com/renovate) in
[mermaid-js/mermaid#3769
- chore(deps): update all non-major dependencies (minor) by
[@&#8203;renovate](https://togithub.com/renovate) in
[mermaid-js/mermaid#3770
- Fix CSpell by [@&#8203;sidharthv96](https://togithub.com/sidharthv96)
in
[mermaid-js/mermaid#3753
- Live edits for Docs by
[@&#8203;sidharthv96](https://togithub.com/sidharthv96) in
[mermaid-js/mermaid#3755
- Switch CDN to unpkg.com by
[@&#8203;sidharthv96](https://togithub.com/sidharthv96) in
[mermaid-js/mermaid#3777
- chore: Housekeeping by
[@&#8203;sidharthv96](https://togithub.com/sidharthv96) in
[mermaid-js/mermaid#3783
- Pnpm issue reproduction by
[@&#8203;sidharthv96](https://togithub.com/sidharthv96) in
[mermaid-js/mermaid#3784
- fix(deps): update all non-major dependencies (patch) by
[@&#8203;renovate](https://togithub.com/renovate) in
[mermaid-js/mermaid#3790
- chore: clean up code in mermaidAPI render() and write specs/tests by
[@&#8203;weedySeaDragon](https://togithub.com/weedySeaDragon) in
[mermaid-js/mermaid#3684
- chore(deps): update all non-major dependencies (minor) by
[@&#8203;renovate](https://togithub.com/renovate) in
[mermaid-js/mermaid#3791
- fix(deps): update dependency rollup to v3 by
[@&#8203;renovate](https://togithub.com/renovate) in
[mermaid-js/mermaid#3674
- Add GHA that will check links + Fix broken links by
[@&#8203;spier](https://togithub.com/spier) in
[mermaid-js/mermaid#3765
- chore: Merge master to develop by
[@&#8203;sidharthv96](https://togithub.com/sidharthv96) in
[mermaid-js/mermaid#3780
- bug: change shiki getHighlighter import by
[@&#8203;weedySeaDragon](https://togithub.com/weedySeaDragon) in
[mermaid-js/mermaid#3804
- Fix
[#&#8203;3799](https://togithub.com/mermaid-js/mermaid/issues/3799):
Remove `type` from package.json by
[@&#8203;sidharthv96](https://togithub.com/sidharthv96) in
[mermaid-js/mermaid#3802
- CI: disable pinning dependencies by
[@&#8203;aloisklink](https://togithub.com/aloisklink) in
[mermaid-js/mermaid#3735
- bug: State diagram fix classes type by
[@&#8203;weedySeaDragon](https://togithub.com/weedySeaDragon) in
[mermaid-js/mermaid#3798
- Remove extra arrow and adjust cross position by
[@&#8203;ishuen](https://togithub.com/ishuen) in
[mermaid-js/mermaid#3641
- comments in states are skipped now by
[@&#8203;avijit1258](https://togithub.com/avijit1258) in
[mermaid-js/mermaid#3762
- feat: Redirect old documentation links. by
[@&#8203;sidharthv96](https://togithub.com/sidharthv96) in
[mermaid-js/mermaid#3797
- Mindmap integration docs by
[@&#8203;sidharthv96](https://togithub.com/sidharthv96) in
[mermaid-js/mermaid#3810
- Use `github-dark` to highlight fence blocks in vitepress docs by
[@&#8203;aloisklink](https://togithub.com/aloisklink) in
[mermaid-js/mermaid#3807
- chore(deps): update lycheeverse/lychee-action action to v1.5.4 by
[@&#8203;renovate](https://togithub.com/renovate) in
[mermaid-js/mermaid#3827
- chore(deps): update pnpm to v7.17.0 by
[@&#8203;renovate](https://togithub.com/renovate) in
[mermaid-js/mermaid#3828
- feat: Title support via front matter for ER, state, class, git, and
graph diagrams by [@&#8203;MasonM](https://togithub.com/MasonM) in
[mermaid-js/mermaid#3706
- Replace `dagre`/`dagre-d3` with `dagre-d3-es` by
[@&#8203;aloisklink](https://togithub.com/aloisklink) in
[mermaid-js/mermaid#3809
- Add package visualizations by
[@&#8203;sidharthv96](https://togithub.com/sidharthv96) in
[mermaid-js/mermaid#3823
- [#&#8203;3882](https://togithub.com/mermaid-js/mermaid/issues/3882)
fix for issues with mindmaps with only a single node by
[@&#8203;knsv](https://togithub.com/knsv) in
[mermaid-js/mermaid#3833
- [#&#8203;3778](https://togithub.com/mermaid-js/mermaid/issues/3778)
Adding a hexgon shape by [@&#8203;knsv](https://togithub.com/knsv) in
[mermaid-js/mermaid#3834
- Fix for
[#&#8203;3835](https://togithub.com/mermaid-js/mermaid/issues/3835),
makes it possible to style path elements by
[@&#8203;knsv](https://togithub.com/knsv) in
[mermaid-js/mermaid#3836
- [#&#8203;3831](https://togithub.com/mermaid-js/mermaid/issues/3831)
Re-enabling themes for er diagrams by
[@&#8203;knsv](https://togithub.com/knsv) in
[mermaid-js/mermaid#3837
- (chore) remove console stmt in pieDetector by
[@&#8203;weedySeaDragon](https://togithub.com/weedySeaDragon) in
[mermaid-js/mermaid#3840
- Revert "Added pie" by
[@&#8203;pbrolin47](https://togithub.com/pbrolin47) in
[mermaid-js/mermaid#3842
- Fix typos by [@&#8203;endolith](https://togithub.com/endolith) in
[mermaid-js/mermaid#3820
- (feat) state classDef documentation by
[@&#8203;weedySeaDragon](https://togithub.com/weedySeaDragon) in
[mermaid-js/mermaid#3841
- Integrations added - Visual Studio Code \[Polyglot Interactive
Notebooks] by [@&#8203;dfinke](https://togithub.com/dfinke) in
[mermaid-js/mermaid#3821
- Reduce mermaid size by 31% by
[@&#8203;sidharthv96](https://togithub.com/sidharthv96) in
[mermaid-js/mermaid#3825
- fix: LintStaged by
[@&#8203;sidharthv96](https://togithub.com/sidharthv96) in
[mermaid-js/mermaid#3844
- Add official vim plugin to list in integrations by
[@&#8203;craigmac](https://togithub.com/craigmac) in
[mermaid-js/mermaid#3847
- chore(deps): remove dependency on `graphlib` by
[@&#8203;aloisklink](https://togithub.com/aloisklink) in
[mermaid-js/mermaid#3861
- chore(deps): update pnpm to v7.17.1 by
[@&#8203;renovate](https://togithub.com/renovate) in
[mermaid-js/mermaid#3862
- Make gitgraph snapshots consistent in E2E tests by
[@&#8203;aloisklink](https://togithub.com/aloisklink) in
[mermaid-js/mermaid#3860
- Use stylis to prepend idSelector by
[@&#8203;DanInProgress](https://togithub.com/DanInProgress) in
[mermaid-js/mermaid#3829
- Use current mermaid version in docs. by
[@&#8203;sidharthv96](https://togithub.com/sidharthv96) in
[mermaid-js/mermaid#3846
- Add support for [@&#8203;include](https://togithub.com/include) in
docs by [@&#8203;sidharthv96](https://togithub.com/sidharthv96) in
[mermaid-js/mermaid#3863
- Housekeeping with eslint-unicorn by
[@&#8203;sidharthv96](https://togithub.com/sidharthv96) in
[mermaid-js/mermaid#3845
- chore: delete functions not used in diagrams/c4 code (dead code) by
[@&#8203;weedySeaDragon](https://togithub.com/weedySeaDragon) in
[mermaid-js/mermaid#3871
- Switch back to jsdelivr by
[@&#8203;sidharthv96](https://togithub.com/sidharthv96) in
[mermaid-js/mermaid#3873
- 3882 edge labels by [@&#8203;knsv](https://togithub.com/knsv) in
[mermaid-js/mermaid#3883
- Small fix for issue
[#&#8203;3881](https://togithub.com/mermaid-js/mermaid/issues/3881) by
[@&#8203;knsv](https://togithub.com/knsv) in
[mermaid-js/mermaid#3884
- Defects/issue 3878 by [@&#8203;MrCoder](https://togithub.com/MrCoder)
in
[mermaid-js/mermaid#3880
- chore(docs): Auto build docs by
[@&#8203;sidharthv96](https://togithub.com/sidharthv96) in
[mermaid-js/mermaid#3547
- docs: refactor Theming doc by
[@&#8203;huynhicode](https://togithub.com/huynhicode) in
[mermaid-js/mermaid#3889
- Feat: Add aria-describedby, aria-roledescription by
[@&#8203;weedySeaDragon](https://togithub.com/weedySeaDragon) in
[mermaid-js/mermaid#3808
- Release/9.3.0 by
[@&#8203;sidharthv96](https://togithub.com/sidharthv96) in
[mermaid-js/mermaid#3911

#### New Contributors

- [@&#8203;revolter](https://togithub.com/revolter) made their first
contribution in
[mermaid-js/mermaid#3657
- [@&#8203;Some-Dood](https://togithub.com/Some-Dood) made their first
contribution in
[mermaid-js/mermaid#3643
- [@&#8203;danangtomo](https://togithub.com/danangtomo) made their first
contribution in
[mermaid-js/mermaid#3679
- [@&#8203;DKurilo](https://togithub.com/DKurilo) made their first
contribution in
[mermaid-js/mermaid#3690
- [@&#8203;devcer](https://togithub.com/devcer) made their first
contribution in
[mermaid-js/mermaid#3604
- [@&#8203;isinek](https://togithub.com/isinek) made their first
contribution in
[mermaid-js/mermaid#3688
- [@&#8203;jeroenekkelkamp](https://togithub.com/jeroenekkelkamp) made
their first contribution in
[mermaid-js/mermaid#3698
- [@&#8203;imgss](https://togithub.com/imgss) made their first
contribution in
[mermaid-js/mermaid#3707
- [@&#8203;jasmaa](https://togithub.com/jasmaa) made their first
contribution in
[mermaid-js/mermaid#3609
- [@&#8203;uttk](https://togithub.com/uttk) made their first
contribution in
[mermaid-js/mermaid#3652
- [@&#8203;CalebUsadi](https://togithub.com/CalebUsadi) made their first
contribution in
[mermaid-js/mermaid#3719
- [@&#8203;marcjansen](https://togithub.com/marcjansen) made their first
contribution in
[mermaid-js/mermaid#3721
- [@&#8203;DarkNami](https://togithub.com/DarkNami) made their first
contribution in
[mermaid-js/mermaid#3729
- [@&#8203;6footGeek](https://togithub.com/6footGeek) made their first
contribution in
[mermaid-js/mermaid#3741
- [@&#8203;hugovk](https://togithub.com/hugovk) made their first
contribution in
[mermaid-js/mermaid#3752
- [@&#8203;raptor0929](https://togithub.com/raptor0929) made their first
contribution in
[mermaid-js/mermaid#3738
- [@&#8203;spier](https://togithub.com/spier) made their first
contribution in
[mermaid-js/mermaid#3760
- [@&#8203;ishuen](https://togithub.com/ishuen) made their first
contribution in
[mermaid-js/mermaid#3641
- [@&#8203;avijit1258](https://togithub.com/avijit1258) made their first
contribution in
[mermaid-js/mermaid#3762
- [@&#8203;MasonM](https://togithub.com/MasonM) made their first
contribution in
[mermaid-js/mermaid#3706
- [@&#8203;endolith](https://togithub.com/endolith) made their first
contribution in
[mermaid-js/mermaid#3820
- [@&#8203;dfinke](https://togithub.com/dfinke) made their first
contribution in
[mermaid-js/mermaid#3821
- [@&#8203;craigmac](https://togithub.com/craigmac) made their first
contribution in
[mermaid-js/mermaid#3847
- [@&#8203;DanInProgress](https://togithub.com/DanInProgress) made their
first contribution in
[mermaid-js/mermaid#3829
- [@&#8203;MrCoder](https://togithub.com/MrCoder) made their first
contribution in
[mermaid-js/mermaid#3880
- [@&#8203;huynhicode](https://togithub.com/huynhicode) made their first
contribution in
[mermaid-js/mermaid#3889

**Full Changelog**:
mermaid-js/mermaid@v9.2.2...v9.3.0

</details>

---

### Configuration

📅 **Schedule**: Branch creation - At any time (no schedule defined),
Automerge - At any time (no schedule defined).

🚦 **Automerge**: Disabled by config. Please merge this manually once you
are satisfied.

♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the
rebase/retry checkbox.

🔕 **Ignore**: Close this PR and you won't be reminded about this update
again.

---

- [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check
this box

---

This PR has been generated by [Mend
Renovate](https://www.mend.io/free-developer-tools/renovate/). View
repository job log
[here](https://app.renovatebot.com/dashboard#github/BirthdayResearch/contented).

<!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiIzNC41NC4yIiwidXBkYXRlZEluVmVyIjoiMzQuNjIuMSJ9-->

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
6 participants