Compare commits

..
Author SHA1 Message Date
Yash SinghandGitHub 73168de160 Merge branch 'develop' into revert-585-revert-478-develop 2022-01-20 20:36:44 -08:00
Sidharth VinodandGitHub ea4e0a0d2d Merge pull request #602 from mermaid-js/dependabot/npm_and_yarn/develop/lint-staged-12.2.1
chore(deps-dev): bump lint-staged from 12.2.0 to 12.2.1
2022-01-20 11:55:50 +05:30
Sidharth VinodandGitHub f75182106a Merge pull request #603 from mermaid-js/dependabot/npm_and_yarn/develop/daisyui-1.24.3
chore(deps): bump daisyui from 1.21.0 to 1.24.3
2022-01-20 11:55:40 +05:30
dependabot[bot]andGitHub 597a396def chore(deps): bump daisyui from 1.21.0 to 1.24.3
Bumps [daisyui](https://github.com/saadeghi/daisyui) from 1.21.0 to 1.24.3.
- [Release notes](https://github.com/saadeghi/daisyui/releases)
- [Changelog](https://github.com/saadeghi/daisyui/blob/master/CHANGELOG.md)
- [Commits](https://github.com/saadeghi/daisyui/compare/v1.21.0...v1.24.3)

---
updated-dependencies:
- dependency-name: daisyui
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-19 20:43:48 +00:00
dependabot[bot]andGitHub 5c6f5cf0e7 chore(deps-dev): bump lint-staged from 12.2.0 to 12.2.1
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 12.2.0 to 12.2.1.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v12.2.0...v12.2.1)

---
updated-dependencies:
- dependency-name: lint-staged
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-19 20:43:19 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
9cc2ea05bb chore(deps-dev): bump cssnano from 5.0.14 to 5.0.15 (#600)
Bumps [cssnano](https://github.com/cssnano/cssnano) from 5.0.14 to 5.0.15.
- [Release notes](https://github.com/cssnano/cssnano/releases)
- [Commits](https://github.com/cssnano/cssnano/compare/cssnano@5.0.14...cssnano@5.0.15)

---
updated-dependencies:
- dependency-name: cssnano
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-19 12:40:40 -08:00
Sidharth VinodandGitHub df4964ab83 Merge pull request #601 from mermaid-js/dependabot/npm_and_yarn/develop/autoprefixer-10.4.2
chore(deps-dev): bump autoprefixer from 10.4.0 to 10.4.2
2022-01-19 20:15:00 +05:30
Sidharth VinodandGitHub 33a9491def Merge pull request #599 from mermaid-js/dependabot/npm_and_yarn/develop/mermaid-8.13.9
chore(deps): bump mermaid from 8.13.8 to 8.13.9
2022-01-19 20:14:30 +05:30
Sidharth VinodandGitHub 208b397378 Merge pull request #595 from mermaid-js/dependabot/npm_and_yarn/develop/pako-2.0.4
chore(deps): bump pako from 1.0.10 to 2.0.4
2022-01-19 20:14:17 +05:30
Sidharth VinodandGitHub e67628e321 Merge pull request #596 from mermaid-js/dependabot/npm_and_yarn/develop/cypress-9.3.1
chore(deps-dev): bump cypress from 9.2.0 to 9.3.1
2022-01-19 20:14:11 +05:30
dependabot[bot]andGitHub 9997efdad1 chore(deps-dev): bump autoprefixer from 10.4.0 to 10.4.2
Bumps [autoprefixer](https://github.com/postcss/autoprefixer) from 10.4.0 to 10.4.2.
- [Release notes](https://github.com/postcss/autoprefixer/releases)
- [Changelog](https://github.com/postcss/autoprefixer/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/autoprefixer/compare/10.4.0...10.4.2)

---
updated-dependencies:
- dependency-name: autoprefixer
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-19 12:42:08 +00:00
dependabot[bot]andGitHub d576e45ed5 chore(deps): bump pako from 1.0.10 to 2.0.4
Bumps [pako](https://github.com/nodeca/pako) from 1.0.10 to 2.0.4.
- [Release notes](https://github.com/nodeca/pako/releases)
- [Changelog](https://github.com/nodeca/pako/blob/master/CHANGELOG.md)
- [Commits](https://github.com/nodeca/pako/compare/1.0.10...2.0.4)

---
updated-dependencies:
- dependency-name: pako
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-19 12:41:36 +00:00
dependabot[bot]andGitHub 749828fc9b chore(deps): bump mermaid from 8.13.8 to 8.13.9
Bumps [mermaid](https://github.com/knsv/mermaid) from 8.13.8 to 8.13.9.
- [Release notes](https://github.com/knsv/mermaid/releases)
- [Changelog](https://github.com/mermaid-js/mermaid/blob/develop/docs/CHANGELOG.md)
- [Commits](https://github.com/knsv/mermaid/compare/8.13.8...8.13.9)

---
updated-dependencies:
- dependency-name: mermaid
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-19 12:41:31 +00:00
dependabot[bot]andGitHub 38e0b2c9d6 chore(deps-dev): bump cypress from 9.2.0 to 9.3.1
Bumps [cypress](https://github.com/cypress-io/cypress) from 9.2.0 to 9.3.1.
- [Release notes](https://github.com/cypress-io/cypress/releases)
- [Changelog](https://github.com/cypress-io/cypress/blob/develop/.releaserc.base.js)
- [Commits](https://github.com/cypress-io/cypress/compare/v9.2.0...v9.3.1)

---
updated-dependencies:
- dependency-name: cypress
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-19 12:41:27 +00:00
Sidharth VinodandGitHub 1fb24aa4ce Merge pull request #593 from mermaid-js/dependabot/npm_and_yarn/develop/eslint-plugin-tailwindcss-3.3.0
chore(deps-dev): bump eslint-plugin-tailwindcss from 1.17.2 to 3.3.0
2022-01-19 18:09:00 +05:30
Sidharth VinodandGitHub f0d5550c0c Merge pull request #592 from mermaid-js/dependabot/npm_and_yarn/develop/mocha-9.1.4
chore(deps-dev): bump mocha from 9.1.3 to 9.1.4
2022-01-19 18:08:51 +05:30
Sidharth VinodandGitHub a8b27fc815 Merge pull request #581 from mermaid-js/dependabot/npm_and_yarn/develop/analytics-0.7.21
chore(deps): bump analytics from 0.7.19 to 0.7.21
2022-01-19 17:29:54 +05:30
dependabot[bot]andGitHub 3c9706f8e6 chore(deps-dev): bump mocha from 9.1.3 to 9.1.4
Bumps [mocha](https://github.com/mochajs/mocha) from 9.1.3 to 9.1.4.
- [Release notes](https://github.com/mochajs/mocha/releases)
- [Changelog](https://github.com/mochajs/mocha/blob/master/CHANGELOG.md)
- [Commits](https://github.com/mochajs/mocha/compare/v9.1.3...v9.1.4)

---
updated-dependencies:
- dependency-name: mocha
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-19 11:57:05 +00:00
dependabot[bot]andGitHub 311fbd785e chore(deps-dev): bump eslint-plugin-tailwindcss from 1.17.2 to 3.3.0
Bumps [eslint-plugin-tailwindcss](https://github.com/francoismassart/eslint-plugin-tailwindcss) from 1.17.2 to 3.3.0.
- [Release notes](https://github.com/francoismassart/eslint-plugin-tailwindcss/releases)
- [Commits](https://github.com/francoismassart/eslint-plugin-tailwindcss/compare/v1.17.2...v3.3.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-tailwindcss
  dependency-type: direct:development
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-19 11:56:52 +00:00
Sidharth Vinod 52e533dc52 Merge branch 'develop' of https://github.com/mermaid-js/mermaid-live-editor into develop
* 'develop' of https://github.com/mermaid-js/mermaid-live-editor:
  chore(deps-dev): bump svelte from 3.46.1 to 3.46.2
  chore(deps-dev): bump lint-staged from 12.1.7 to 12.2.0
2022-01-19 17:24:19 +05:30
Sidharth Vinod 399b2a338f Fix ssr 2022-01-19 17:24:10 +05:30
dependabot[bot]andGitHub 642c247686 chore(deps): bump analytics from 0.7.19 to 0.7.21
Bumps [analytics](https://github.com/DavidWells/analytics) from 0.7.19 to 0.7.21.
- [Release notes](https://github.com/DavidWells/analytics/releases)
- [Commits](https://github.com/DavidWells/analytics/compare/analytics@0.7.19...analytics@0.7.21)

---
updated-dependencies:
- dependency-name: analytics
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-19 11:44:05 +00:00
Sidharth VinodandGitHub 5e1c37271e Merge pull request #587 from mermaid-js/dependabot/npm_and_yarn/develop/svelte-3.46.2
chore(deps-dev): bump svelte from 3.46.1 to 3.46.2
2022-01-19 17:10:40 +05:30
Sidharth VinodandGitHub 5b3b659ea2 Merge pull request #590 from mermaid-js/dependabot/npm_and_yarn/develop/lint-staged-12.2.0
chore(deps-dev): bump lint-staged from 12.1.7 to 12.2.0
2022-01-19 17:10:28 +05:30
Sidharth Vinod cbb354f43e Update kit 2022-01-19 17:09:58 +05:30
dependabot[bot]andGitHub 652d4c67ea chore(deps-dev): bump svelte from 3.46.1 to 3.46.2
Bumps [svelte](https://github.com/sveltejs/svelte) from 3.46.1 to 3.46.2.
- [Release notes](https://github.com/sveltejs/svelte/releases)
- [Changelog](https://github.com/sveltejs/svelte/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sveltejs/svelte/compare/v3.46.1...v3.46.2)

---
updated-dependencies:
- dependency-name: svelte
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-19 11:21:44 +00:00
dependabot[bot]andGitHub a2442e287e chore(deps-dev): bump lint-staged from 12.1.7 to 12.2.0
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 12.1.7 to 12.2.0.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v12.1.7...v12.2.0)

---
updated-dependencies:
- dependency-name: lint-staged
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-19 11:21:24 +00:00
Sidharth VinodandGitHub 05c5b3bf2d Merge pull request #588 from mermaid-js/dependabot/npm_and_yarn/develop/svelte-preprocess-4.10.2
chore(deps-dev): bump svelte-preprocess from 4.10.1 to 4.10.2
2022-01-19 16:48:14 +05:30
Sidharth VinodandGitHub c18a3b520e Merge pull request #589 from mermaid-js/dependabot/npm_and_yarn/develop/prettier-plugin-svelte-2.6.0
chore(deps-dev): bump prettier-plugin-svelte from 2.5.1 to 2.6.0
2022-01-19 16:48:01 +05:30
Sidharth VinodandGitHub e5ab129e28 Merge pull request #584 from skrobul/kroki-support
Kroki support
2022-01-19 14:48:21 +05:30
Marek Skrobacki c59351c84f kroki: don't make copy of the state 2022-01-19 08:25:24 +00:00
dependabot[bot]andGitHub ea9e2fc0e0 chore(deps-dev): bump prettier-plugin-svelte from 2.5.1 to 2.6.0
Bumps [prettier-plugin-svelte](https://github.com/sveltejs/prettier-plugin-svelte) from 2.5.1 to 2.6.0.
- [Release notes](https://github.com/sveltejs/prettier-plugin-svelte/releases)
- [Changelog](https://github.com/sveltejs/prettier-plugin-svelte/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sveltejs/prettier-plugin-svelte/compare/v2.5.1...v2.6.0)

---
updated-dependencies:
- dependency-name: prettier-plugin-svelte
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-19 08:19:13 +00:00
dependabot[bot]andGitHub e0b2b762c5 chore(deps-dev): bump svelte-preprocess from 4.10.1 to 4.10.2
Bumps [svelte-preprocess](https://github.com/sveltejs/svelte-preprocess) from 4.10.1 to 4.10.2.
- [Release notes](https://github.com/sveltejs/svelte-preprocess/releases)
- [Changelog](https://github.com/sveltejs/svelte-preprocess/blob/main/CHANGELOG.md)
- [Commits](https://github.com/sveltejs/svelte-preprocess/compare/v4.10.1...v4.10.2)

---
updated-dependencies:
- dependency-name: svelte-preprocess
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-19 08:18:36 +00:00
Sidharth VinodandGitHub 6f09bc6872 Merge pull request #573 from mermaid-js/dependabot/npm_and_yarn/develop/postcss-load-config-3.1.1
chore(deps-dev): bump postcss-load-config from 3.1.0 to 3.1.1
2022-01-19 13:45:38 +05:30
Sidharth VinodandGitHub a3a9828ac8 Merge pull request #582 from mermaid-js/dependabot/npm_and_yarn/develop/eslint-plugin-svelte3-3.4.0
chore(deps-dev): bump eslint-plugin-svelte3 from 3.2.1 to 3.4.0
2022-01-19 13:45:28 +05:30
dependabot[bot]andGitHub 432e12e083 chore(deps-dev): bump postcss-load-config from 3.1.0 to 3.1.1
Bumps [postcss-load-config](https://github.com/postcss/postcss-load-config) from 3.1.0 to 3.1.1.
- [Release notes](https://github.com/postcss/postcss-load-config/releases)
- [Changelog](https://github.com/postcss/postcss-load-config/blob/main/CHANGELOG.md)
- [Commits](https://github.com/postcss/postcss-load-config/compare/3.1.0...3.1.1)

---
updated-dependencies:
- dependency-name: postcss-load-config
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-18 20:55:38 +00:00
dependabot[bot]andGitHub a29568b42d chore(deps-dev): bump eslint-plugin-svelte3 from 3.2.1 to 3.4.0
Bumps [eslint-plugin-svelte3](https://github.com/sveltejs/eslint-plugin-svelte3) from 3.2.1 to 3.4.0.
- [Release notes](https://github.com/sveltejs/eslint-plugin-svelte3/releases)
- [Changelog](https://github.com/sveltejs/eslint-plugin-svelte3/blob/master/CHANGELOG.md)
- [Commits](https://github.com/sveltejs/eslint-plugin-svelte3/compare/v3.2.1...v3.4.0)

---
updated-dependencies:
- dependency-name: eslint-plugin-svelte3
  dependency-type: direct:development
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
2022-01-18 18:17:26 +00:00
dependabot[bot]GitHubdependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
6bdf8af2f1 chore(deps-dev): bump lint-staged from 12.1.4 to 12.1.7 (#575)
Bumps [lint-staged](https://github.com/okonet/lint-staged) from 12.1.4 to 12.1.7.
- [Release notes](https://github.com/okonet/lint-staged/releases)
- [Commits](https://github.com/okonet/lint-staged/compare/v12.1.4...v12.1.7)

---
updated-dependencies:
- dependency-name: lint-staged
  dependency-type: direct:development
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>

Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2022-01-18 10:14:15 -08:00
Marek Skrobacki 6ab1b296b8 kroki: switch from native to js-base64 btoa 2022-01-18 08:54:51 +00:00
Marek Skrobacki 4472b1921c kroki: generate URL / compressed diagram on-demand
Converting the diagram to base64 and compression are the operations that might
be CPU heavy, it is better to perform these only when actually needed.
After this commit, the URL will be generated only after the button is pressed
instead of after every change to the text.
2022-01-18 08:54:51 +00:00
Sidharth Vinod 787c6df2ed Merge branch 'develop' into pr/skrobul/584
* develop:
  Revert "Use `monaco-mermaid`"
2022-01-18 11:24:36 +05:30
Sidharth VinodandGitHub b0cb4e6a0e Revert "Revert "Use monaco-mermaid"" 2022-01-18 11:21:57 +05:30
Sidharth VinodandGitHub f8f7db6a77 Merge pull request #585 from mermaid-js/revert-478-develop
Revert "Use `monaco-mermaid`"
2022-01-18 11:21:49 +05:30
Marek Skrobacki 36bcd32ee3 Kroki support
This commit adds support for generating links to be rendered with
[Kroki](https://kroki.io) compatible renderer. Apart from supporting many other
diagram formats, it directly benefits Mermaid editor because it generates much
shorter URLs (due to the compression).

Custom Kroki URL can be configured through environment variable if you want to
use self-hosted instance of Kroki.
2022-01-17 20:51:30 +00:00
10 changed files with 381 additions and 1060 deletions
+5
View File
@@ -32,6 +32,11 @@ docker run --publish 8000:80 ghcr.io/mermaid-js/mermaid-live-editor
When building, Set the Environment variable MERMAID_RENDERER_URL to the rendering service.
Default is `https://mermaid.ink`
### To configure Kroki Instance URL
When building, Set the Environment variable MERMAID_KROKI_RENDERER_URL to your Kroki instance.
Default is `https://kroki.io`
### Development
```bash
+18 -16
View File
@@ -15,15 +15,15 @@
},
"devDependencies": {
"@cypress/snapshot": "^2.1.7",
"@sveltejs/adapter-static": "1.0.0-next.22",
"@sveltejs/kit": "1.0.0-next.202",
"@sveltejs/adapter-static": "1.0.0-next.26",
"@sveltejs/kit": "1.0.0-next.232",
"@types/mermaid": "^8.2.7",
"@typescript-eslint/eslint-plugin": "^4.33.0",
"@typescript-eslint/parser": "^4.33.0",
"autoprefixer": "^10.4.0",
"autoprefixer": "^10.4.2",
"chai": "^4.3.4",
"cssnano": "^5.0.14",
"cypress": "9.2.0",
"cssnano": "^5.0.15",
"cypress": "9.3.1",
"cypress-localstorage-commands": "^1.6.1",
"eslint": "^7.32.0",
"eslint-config-prettier": "^8.1.0",
@@ -31,18 +31,18 @@
"eslint-plugin-es": "^4.1.0",
"eslint-plugin-mocha": "^10.0.3",
"eslint-plugin-postcss-modules": "^2.0.0",
"eslint-plugin-svelte3": "^3.2.1",
"eslint-plugin-tailwindcss": "^1.17.2",
"eslint-plugin-svelte3": "^3.4.0",
"eslint-plugin-tailwindcss": "^3.3.0",
"husky": "^7.0.4",
"lint-staged": "^12.1.4",
"mocha": "^9.1.3",
"lint-staged": "^12.2.1",
"mocha": "^9.1.4",
"node-html-parser": "^5.2.0",
"postcss": "^8.4.5",
"postcss-load-config": "^3.1.0",
"postcss-load-config": "^3.1.1",
"prettier": "~2.5.1",
"prettier-plugin-svelte": "^2.5.1",
"svelte": "^3.46.1",
"svelte-preprocess": "^4.10.1",
"prettier-plugin-svelte": "^2.6.0",
"svelte": "^3.46.2",
"svelte-preprocess": "^4.10.2",
"tailwindcss": "^3.0.13",
"tslib": "^2.3.1",
"typescript": "^4.5.4"
@@ -51,12 +51,14 @@
"dependencies": {
"@analytics/google-analytics": "^0.5.3",
"@macfja/svelte-persistent-store": "^1.2.0",
"analytics": "^0.7.19",
"daisyui": "1.21.0",
"analytics": "^0.7.21",
"daisyui": "1.24.3",
"js-base64": "^3.7.2",
"mermaid": "8.13.8",
"mermaid": "8.13.9",
"moment": "^2.29.1",
"monaco-editor": "^0.31.1",
"monaco-mermaid": "^1.0.2",
"pako": "2.0.4",
"random-word-slugs": "^0.1.6"
},
"lint-staged": {
+9
View File
@@ -0,0 +1,9 @@
import type { Handle } from '@sveltejs/kit/types/hooks';
export const handle: Handle = async ({ request, resolve }) => {
const response = await resolve(request, {
ssr: false
});
return response;
};
+31 -2
View File
@@ -2,10 +2,11 @@
import { browser } from '$app/env';
import Card from '$lib/components/card/card.svelte';
import { rendererUrl } from '$lib/util/env';
import { rendererUrl, krokiRendererUrl } from '$lib/util/env';
import { base64State, codeStore } from '$lib/util/state';
import { toBase64 } from 'js-base64';
import { toBase64, btoa as jsbtoa } from 'js-base64';
import moment from 'moment';
import pako from 'pako';
type Exporter = (context: CanvasRenderingContext2D, image: HTMLImageElement) => () => void;
@@ -127,6 +128,31 @@
window.location.href = `${window.location.pathname}?gist=${gistURL}`;
};
const textEncode = (str) => {
if (window.TextEncoder) {
return new TextEncoder('utf-8').encode(str);
}
let utf8 = unescape(encodeURIComponent(str));
let result = new Uint8Array(utf8.length);
for (let i = 0; i < utf8.length; i++) {
result[i] = utf8.charCodeAt(i);
}
return result;
};
const onKrokiClick = () => {
const krokiCode = getKrokiCode($codeStore.code);
const krokiUrl = `${krokiRendererUrl}/mermaid/svg/${krokiCode}`;
return window.open(krokiUrl, '_blank');
};
const getKrokiCode = (source) => {
const data = textEncode(source);
const compressed = pako.deflate(data, { level: 9, to: 'string' });
let result = jsbtoa(compressed).replace(/\+/g, '-').replace(/\//g, '_');
return result;
};
let iUrl: string;
let svgUrl: string;
let mdCode: string;
@@ -168,6 +194,9 @@
<button class="action-btn flex-auto">
<a target="_blank" href={svgUrl}><i class="fas fa-external-link-alt mr-2" /> SVG</a>
</button>
<button class="action-btn flex-auto" on:click={onKrokiClick}>
<i class="fas fa-external-link-alt mr-2" /> Kroki
</button>
<div class="flex gap-2 items-center">
PNG size
@@ -4,7 +4,7 @@
import { themeStore } from '$lib/util/theme';
import type monaco from 'monaco-editor';
import { createEventDispatcher, onMount } from 'svelte';
import { initEditor } from './util';
import initEditor from 'monaco-mermaid';
let divEl: HTMLDivElement = null;
let editor: monaco.editor.IStandaloneCodeEditor;
-552
View File
@@ -1,552 +0,0 @@
/* eslint-disable @typescript-eslint/no-unsafe-assignment */
/* eslint-disable @typescript-eslint/no-unsafe-call */
/* eslint-disable @typescript-eslint/no-unsafe-member-access */
// eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types
export const initEditor = (monacoEditor): void => {
monacoEditor.languages.register({ id: 'mermaid' });
const requirementDiagrams = [
'requirement',
'functionalRequirement',
'interfaceRequirement',
'performanceRequirement',
'physicalRequirement',
'designConstraint'
];
const keywords: {
[key: string]: {
typeKeywords: string[];
blockKeywords: string[];
keywords: string[];
};
} = {
flowchart: {
typeKeywords: ['flowchart', 'flowchart-v2', 'graph'],
blockKeywords: ['subgraph', 'end'],
keywords: [
'TB',
'TD',
'BT',
'RL',
'LR',
'click',
'call',
'href',
'_self',
'_blank',
'_parent',
'_top',
'linkStyle',
'style',
'classDef',
'class',
'direction',
'interpolate'
]
},
sequenceDiagram: {
typeKeywords: ['sequenceDiagram'],
blockKeywords: ['alt', 'par', 'and', 'loop', 'else', 'end', 'rect', 'opt', 'alt', 'rect'],
keywords: [
'participant',
'as',
'Note',
'note',
'right of',
'left of',
'over',
'activate',
'deactivate',
'autonumber',
'title',
'actor'
]
},
classDiagram: {
typeKeywords: ['classDiagram', 'classDiagram-v2'],
blockKeywords: ['class'],
keywords: [
'link',
'click',
'callback',
'call',
'href',
'cssClass',
'direction',
'TB',
'BT',
'RL',
'LR'
]
},
stateDiagram: {
typeKeywords: ['stateDiagram', 'stateDiagram-v2'],
blockKeywords: ['state', 'note', 'end'],
keywords: ['state', 'as', 'hide empty description', 'direction', 'TB', 'BT', 'RL', 'LR']
},
erDiagram: {
typeKeywords: ['erDiagram'],
blockKeywords: [],
keywords: []
},
journey: {
typeKeywords: ['journey'],
blockKeywords: ['section'],
keywords: ['title']
},
info: {
typeKeywords: ['info'],
blockKeywords: [],
keywords: ['showInfo']
},
gantt: {
typeKeywords: ['gantt'],
blockKeywords: [],
keywords: [
'title',
'dateFormat',
'axisFormat',
'todayMarker',
'section',
'excludes',
'inclusiveEndDates'
]
},
requirementDiagram: {
typeKeywords: ['requirement', 'requirementDiagram'],
blockKeywords: requirementDiagrams.concat('element'),
keywords: []
},
gitGraph: {
typeKeywords: ['gitGraph'],
blockKeywords: [],
keywords: ['commit', 'branch', 'merge', 'reset', 'checkout', 'LR', 'BT']
},
pie: {
typeKeywords: ['pie'],
blockKeywords: [],
keywords: ['title', 'showData']
}
};
// Register a tokens provider for the mermaid language
monacoEditor.languages.setMonarchTokensProvider('mermaid', {
...Object.entries(keywords)
.map((entry) =>
Object.fromEntries(
Object.entries(entry[1]).map((deepEntry) => [
entry[0] + deepEntry[0][0].toUpperCase() + deepEntry[0].slice(1),
deepEntry[1]
])
)
)
.reduce((overallKeywords, nextKeyword) => ({ ...overallKeywords, ...nextKeyword }), {}),
tokenizer: {
root: [
[/%%(?=.*%%$)/, { token: 'string', nextEmbedded: 'json' }],
[/%%$/, { token: 'string', nextEmbedded: '@pop' }],
[/^\s*gitGraph/m, 'typeKeyword', 'gitGraph'],
[/^\s*info/m, 'typeKeyword', 'info'],
[/^\s*pie/m, 'typeKeyword', 'pie'],
[/^\s*(flowchart|flowchart-v2|graph)/m, 'typeKeyword', 'flowchart'],
[/^\s*sequenceDiagram/, 'typeKeyword', 'sequenceDiagram'],
[/^\s*classDiagram(-v2)?/, 'typeKeyword', 'classDiagram'],
[/^\s*journey/, 'typeKeyword', 'journey'],
[/^\s*gantt/, 'typeKeyword', 'gantt'],
[/^\s*stateDiagram(-v2)?/, 'typeKeyword', 'stateDiagram'],
[/^\s*erDiagram/, 'typeKeyword', 'erDiagram'],
[/^\s*requirement(Diagram)?/, 'typeKeyword', 'requirementDiagram'],
[/%%[^$]([^%]*(?!%%$)%?)*$/, 'comment']
],
gitGraph: [
[/option(?=s)/, { token: 'typeKeyword', next: 'optionsGitGraph' }],
[/(^\s*branch|reset|merge|checkout)(.*$)/, ['keyword', 'variable']],
[
/[a-zA-Z][\w$]*/,
{
cases: {
'@gitGraphBlockKeywords': 'typeKeyword',
'@gitGraphKeywords': 'keyword'
}
}
],
[/%%[^$]([^%]*(?!%%$)%?)*$/, 'comment'],
[/".*?"/, 'string'],
[/\^/, 'delimiter.bracket']
],
optionsGitGraph: [
[/s$/, { token: 'typeKeyword', nextEmbedded: 'json', matchOnlyAtLineStart: false }],
['end', { token: 'typeKeyword', next: '@pop', nextEmbedded: '@pop' }]
],
info: [
[
/[a-zA-Z][\w$]*/,
{
cases: {
'@infoBlockKeywords': 'typeKeyword',
'@infoKeywords': 'keyword'
}
}
]
],
pie: [
[/(title)(.*$)/, ['keyword', 'string']],
[
/[a-zA-Z][\w$]*/,
{
cases: {
'@pieBlockKeywords': 'typeKeyword',
'@pieKeywords': 'keyword'
}
}
],
[/".*?"/, 'string'],
[/\s*\d+/, 'number'],
[/:/, 'delimiter.bracket'],
[/%%[^$]([^%]*(?!%%$)%?)*$/, 'comment']
],
flowchart: [
[/[ox]?(--+|==+)[ox]/, 'transition'],
[
/[a-zA-Z][\w$]*/,
{
cases: {
'@flowchartBlockKeywords': 'typeKeyword',
'@flowchartKeywords': 'keyword',
'@default': 'variable'
}
}
],
[/\|+.+?\|+/, 'string'],
[/\[+(\\.+?[\\/]|\/.+?[/\\])\]+/, 'string'],
[/[[>]+[^\]|[]+?\]+/, 'string'],
[/{+.+?}+/, 'string'],
[/\(+.+?\)+/, 'string'],
[/-\.+->?/, 'transition'],
[/(-[-.])([^->]+?)(-{3,}|-{2,}>|\.-+>)/, ['transition', 'string', 'transition']],
[/(==+)([^=]+?)(={3,}|={2,}>)/, ['transition', 'string', 'transition']],
[/<?(--+|==+)>|===+|---+/, 'transition'],
[/:::/, 'transition'],
[/[;&]/, 'delimiter.bracket'],
[/".*?"/, 'string'],
[/%%[^$]([^%]*(?!%%$)%?)*$/, 'comment']
],
sequenceDiagram: [
[
/[a-zA-Z][\w$]*/,
{
cases: {
'@sequenceDiagramBlockKeywords': 'typeKeyword',
'@sequenceDiagramKeywords': 'keyword',
'@default': 'variable'
}
}
],
[/(--?>?>|--?[)x])[+-]?/, 'transition'],
[/(:)([^:\n]*?$)/, ['delimiter.bracket', 'string']],
[/%%[^$]([^%]*(?!%%$)%?)*$/, 'comment']
],
classDiagram: [
[/(?!class\s)([a-zA-Z]+)(\s+[a-zA-Z]+)/, ['type', 'variable']],
[/(\*|<\|?|o)?(--|\.\.)(\*|\|?>|o)?/, 'transition'],
[/^\s*class\s(?!.*\{)/, 'keyword'],
[
/[a-zA-Z][\w$]*/,
{
cases: {
'@classDiagramBlockKeywords': 'typeKeyword',
'@classDiagramKeywords': 'keyword',
'@default': 'variable'
}
}
],
[/%%[^$]([^%]*(?!%%$)%?)*$/, 'comment'],
[/(<<)(.+?)(>>)/, ['delimiter.bracket', 'annotation', 'delimiter.bracket']],
[/".*?"/, 'string'],
[/:::/, 'transition'],
[/:|\+|-|#|~|\*\s*$|\$\s*$|\(|\)|{|}/, 'delimiter.bracket']
],
journey: [
[/(title)(.*)/, ['keyword', 'string']],
[/(section)(.*)/, ['typeKeyword', 'string']],
[
/[a-zA-Z][\w$]*/,
{
cases: {
'@journeyBlockKeywords': 'typeKeyword',
'@journeyKeywords': 'keyword',
'@default': 'variable'
}
}
],
[
/(^\s*.+?)(:)(.*?)(:)(.*?)([,$])/,
[
'string',
'delimiter.bracket',
'number',
'delimiter.bracket',
'variable',
'delimiter.bracket'
]
],
[/,/, 'delimiter.bracket'],
[/(^\s*.+?)(:)([^:]*?)$/, ['string', 'delimiter.bracket', 'variable']],
[/%%[^$]([^%]*(?!%%$)%?)*$/, 'comment']
],
gantt: [
[/(title)(.*)/, ['keyword', 'string']],
[/(section)(.*)/, ['typeKeyword', 'string']],
[
/[a-zA-Z][\w$]*/,
{
cases: {
'@ganttBlockKeywords': 'typeKeyword',
'@ganttKeywords': 'keyword'
}
}
],
[/(^\s*.*?)(:)/, ['string', 'delimiter.bracket']],
[/%%[^$]([^%]*(?!%%$)%?)*$/, 'comment'],
[/:/, 'delimiter.bracket']
],
stateDiagram: [
[/note[^:]*$/, { token: 'typeKeyword', next: 'stateDiagramNote' }],
['hide empty description', 'keyword'],
[/^\s*state\s(?!.*\{)/, 'keyword'],
[/(<<)(fork|join|choice)(>>)/, 'annotation'],
[/(\[\[)(fork|join|choice)(]])/, ['delimiter.bracket', 'annotation', 'delimiter.bracket']],
[
/[a-zA-Z][\w$]*/,
{
cases: {
'@stateDiagramBlockKeywords': 'typeKeyword',
'@stateDiagramKeywords': 'keyword',
'@default': 'variable'
}
}
],
[/".*?"/, 'string'],
[/(:)([^:\n]*?$)/, ['delimiter.bracket', 'string']],
[/{|}/, 'delimiter.bracket'],
[/%%[^$]([^%]*(?!%%$)%?)*$/, 'comment'],
[/-->/, 'transition'],
[/\[.*?]/, 'string']
],
stateDiagramNote: [
[/^\s*end note$/, { token: 'typeKeyword', next: '@pop' }],
[/.*/, 'string']
],
erDiagram: [
[/[}|][o|](--|\.\.)[o|][{|]/, 'transition'],
[/".*?"/, 'string'],
[/(:)(.*?$)/, ['delimiter.bracket', 'string']],
[/:|{|}/, 'delimiter.bracket'],
[/([a-zA-Z]+)(\s+[a-zA-Z]+)/, ['type', 'variable']],
[/%%[^$]([^%]*(?!%%$)%?)*$/, 'comment'],
[/[a-zA-Z_-][\w$]*/, 'variable']
],
requirementDiagram: [
[/->|<-|-/, 'transition'],
[/(\d+\.)*\d+/, 'number'],
[
/[a-zA-Z_-][\w$]*/,
{
cases: {
'@requirementDiagramBlockKeywords': 'typeKeyword',
'@default': 'variable'
}
}
],
[/:|{|}|\//, 'delimiter.bracket'],
[/%%[^$]([^%]*(?!%%$)%?)*$/, 'comment'],
[/".*?"/, 'string']
]
}
});
monacoEditor.editor.defineTheme('mermaid-dark', {
base: 'vs-dark',
inherit: true,
rules: [
{ token: 'typeKeyword', foreground: '9650c8', fontStyle: 'bold' },
{ token: 'transition', foreground: '008800', fontStyle: 'bold' }
],
colors: {}
});
monacoEditor.editor.defineTheme('mermaid', {
base: 'vs',
inherit: true,
rules: [
{ token: 'typeKeyword', foreground: '9650c8', fontStyle: 'bold' },
{ token: 'keyword', foreground: '649696' },
{ token: 'custom-error', foreground: 'ff0000', fontStyle: 'bold' },
{ token: 'string', foreground: 'AA8500' },
{ token: 'transition', foreground: '008800', fontStyle: 'bold' },
{ token: 'delimiter.bracket', foreground: '000000', fontStyle: 'bold' },
{ token: 'annotation', foreground: '4b4b96' },
{ token: 'number', foreground: '4b4b96' },
{ token: 'comment', foreground: '888c89' },
{ token: 'variable', foreground: 'A22889' },
{ token: 'type', foreground: '2BDEA8' }
],
colors: {}
});
// Register a completion item provider for the mermaid language
monacoEditor.languages.registerCompletionItemProvider('mermaid', {
provideCompletionItems: () => {
const suggestions = [
{
label: 'loop',
kind: monacoEditor.languages.CompletionItemKind.Snippet,
insertText: ['loop ${1:Loop text}', '\t$0', 'end'].join('\n'),
insertTextRules: monacoEditor.languages.CompletionItemInsertTextRule.InsertAsSnippet,
documentation: 'Sequence Diagram Loops'
},
{
label: 'alt',
kind: monacoEditor.languages.CompletionItemKind.Snippet,
insertText: ['alt ${1:Describing text}', '\t$0', 'else', '\t', 'end'].join('\n'),
insertTextRules: monacoEditor.languages.CompletionItemInsertTextRule.InsertAsSnippet,
documentation: 'Alternative Path'
},
{
label: 'opt',
kind: monacoEditor.languages.CompletionItemKind.Snippet,
insertText: ['opt ${1:Describing text}', '\t$0', 'end'].join('\n'),
insertTextRules: monacoEditor.languages.CompletionItemInsertTextRule.InsertAsSnippet,
documentation: 'Optional Path'
},
{
label: 'par',
kind: monacoEditor.languages.CompletionItemKind.Snippet,
insertText: [
'par ${1:[Action 1]}',
'\t$0',
'and ${2:[Action 2]}',
'\t',
'and ${3:[Action 3]}',
'\t',
'end'
].join('\n'),
insertTextRules: monacoEditor.languages.CompletionItemInsertTextRule.InsertAsSnippet,
documentation: 'Parallel Actions'
},
{
label: 'rect',
kind: monacoEditor.languages.CompletionItemKind.Snippet,
insertText: ['rect ${1:rgb(0, 255, 0)}', '\t$0', 'end'].join('\n'),
insertTextRules: monacoEditor.languages.CompletionItemInsertTextRule.InsertAsSnippet,
documentation: 'Background Color'
},
{
label: 'subgraph',
kind: monacoEditor.languages.CompletionItemKind.Snippet,
insertText: ['subgraph ${1:title}', '\t$0', 'end'].join('\n'),
insertTextRules: monacoEditor.languages.CompletionItemInsertTextRule.InsertAsSnippet,
documentation: 'Subgraph'
},
{
label: 'class',
kind: monacoEditor.languages.CompletionItemKind.Snippet,
insertText: ['class ${1:className} {', '\t$0', '}'].join('\n'),
insertTextRules: monacoEditor.languages.CompletionItemInsertTextRule.InsertAsSnippet,
documentation: 'Class'
},
{
label: 'state',
kind: monacoEditor.languages.CompletionItemKind.Snippet,
insertText: ['state ${1:stateName} {', '\t$0', '}'].join('\n'),
insertTextRules: monacoEditor.languages.CompletionItemInsertTextRule.InsertAsSnippet,
documentation: 'State'
},
{
label: 'note',
kind: monacoEditor.languages.CompletionItemKind.Snippet,
insertText: ['note ${1:right of State1}', '\t$0', 'end note'].join('\n'),
insertTextRules: monacoEditor.languages.CompletionItemInsertTextRule.InsertAsSnippet,
documentation: 'State'
},
{
label: 'section',
kind: monacoEditor.languages.CompletionItemKind.Snippet,
insertText: ['section ${1:Go to work}', '\t$0'].join('\n'),
insertTextRules: monacoEditor.languages.CompletionItemInsertTextRule.InsertAsSnippet,
documentation: 'User-journey Section'
},
{
label: 'element',
kind: monacoEditor.languages.CompletionItemKind.Snippet,
insertText: ['element ${1:test_entity} {', '\t$0', '}'].join('\n'),
insertTextRules: monacoEditor.languages.CompletionItemInsertTextRule.InsertAsSnippet,
documentation: 'Requirement Diagram Element'
},
{
label: 'options',
kind: monacoEditor.languages.CompletionItemKind.Snippet,
insertText: ['options', '{', ' $0', '}', 'end'].join('\n'),
insertTextRules: monacoEditor.languages.CompletionItemInsertTextRule.InsertAsSnippet,
documentation: 'Git Graph Options'
},
...requirementDiagrams.map((requirementDiagramType) => ({
label: requirementDiagramType,
kind: monacoEditor.languages.CompletionItemKind.Snippet,
insertText: [
requirementDiagramType + ' ${1:test_req} {',
'\tid: 1',
'\ttext: the test text.',
'\trisk: high',
'\tverifyMethod: test',
'}'
].join('\n'),
insertTextRules: monacoEditor.languages.CompletionItemInsertTextRule.InsertAsSnippet,
documentation: requirementDiagramType
.split(/(?=[A-Z])/)
.map((part) => part[0].toUpperCase() + part.slice(1))
.join(' ')
})),
...[
...new Set(
Object.values(keywords)
.map((diagramKeywords) =>
Object.entries(diagramKeywords)
.filter((keywordType) => keywordType[0] !== 'annotations')
.map((entry) => entry[1])
)
.flat(2)
)
].map((keyword) => ({
label: keyword,
kind: monacoEditor.languages.CompletionItemKind.Keyword,
insertText: keyword
}))
];
return { suggestions: suggestions };
}
});
monacoEditor.languages.setLanguageConfiguration('mermaid', {
autoClosingPairs: [
{
open: '(',
close: ')'
},
{
open: '{',
close: '}'
},
{
open: '[',
close: ']'
}
],
brackets: [
['(', ')'],
['{', '}'],
['[', ']']
]
});
};
+1
View File
@@ -1 +1,2 @@
export const rendererUrl = import.meta.env.MERMAID_RENDERER_URL ?? 'https://mermaid.ink';
export const krokiRendererUrl = import.meta.env.MERMAID_KROKI_RENDERER_URL ?? 'https://kroki.io';
+1 -1
View File
@@ -1,5 +1,5 @@
<script lang="ts">
import Editor from '$lib/components/editor/editor.svelte';
import Editor from '$lib/components/editor.svelte';
import Navbar from '$lib/components/navbar.svelte';
import Preset from '$lib/components/preset.svelte';
import Actions from '$lib/components/actions.svelte';
-1
View File
@@ -19,7 +19,6 @@ const config = {
base: `/mermaid-live-editor${process.env['BETA'] ? '/beta' : ''}`
}
: {},
ssr: false,
// hydrate the <div id="svelte"> element in src/app.html
target: '#svelte',
trailingSlash: 'ignore',
+315 -487
View File
File diff suppressed because it is too large Load Diff