From 29d30ff76d86c8c5835ec4950e8b50116bc1184a Mon Sep 17 00:00:00 2001 From: Augustin Mauroy <97875033+AugustinMauroy@users.noreply.github.com> Date: Mon, 10 Mar 2025 22:26:18 +0100 Subject: [PATCH 1/4] WIP --- .../components/__design__/mermaid.stories.tsx | 32 + apps/site/next.mdx.plugins.mjs | 4 + apps/site/package.json | 1 + package-lock.json | 1573 ++++++++++++++++- 4 files changed, 1563 insertions(+), 47 deletions(-) create mode 100644 apps/site/components/__design__/mermaid.stories.tsx diff --git a/apps/site/components/__design__/mermaid.stories.tsx b/apps/site/components/__design__/mermaid.stories.tsx new file mode 100644 index 0000000000000..e57bba456a40b --- /dev/null +++ b/apps/site/components/__design__/mermaid.stories.tsx @@ -0,0 +1,32 @@ +import type { Meta as MetaObj, StoryObj } from '@storybook/react'; +import { VFile } from 'vfile'; + +import { compile } from '@/next.mdx.compiler.mjs'; + +type Props = { children: string }; + +type Story = StoryObj; +type Meta = MetaObj; + +export const Default: Story = { + args: { + children: `\`\`\`mermaid +graph LR +A[Client] --> B(Load Balancer) +B --> C{Server 1} +B --> D{Server 2} +\`\`\``, + }, +}; + +export default { + title: 'Design System/Mermaid', + render: (_, { loaded: { Content } }) => Content, + loaders: [ + async ({ args }) => { + const { content } = await compile(new VFile(args.children), 'mdx', {}); + + return { Content: content }; + }, + ], +} as Meta; diff --git a/apps/site/next.mdx.plugins.mjs b/apps/site/next.mdx.plugins.mjs index 2c7d02968f380..5f668f8e15684 100644 --- a/apps/site/next.mdx.plugins.mjs +++ b/apps/site/next.mdx.plugins.mjs @@ -2,6 +2,7 @@ import remarkHeadings from '@vcarl/remark-headings'; import rehypeAutolinkHeadings from 'rehype-autolink-headings'; +import rehypeMermaid from 'rehype-mermaid'; import rehypeSlug from 'rehype-slug'; import remarkGfm from 'remark-gfm'; import readingTime from 'remark-reading-time'; @@ -14,6 +15,9 @@ import rehypeShikiji from './next.mdx.shiki.mjs'; * @type {Array} */ export const REHYPE_PLUGINS = [ + // Transforms Mermaid code blocks into SVGs + // !!! This plugin must be before `rehypeShikiji` !!! + rehypeMermaid, // Generates `id` attributes for headings (H1, ...) rehypeSlug, // Automatically add anchor links to headings (H1, ...) diff --git a/apps/site/package.json b/apps/site/package.json index caa3a0d316248..30bf0681fcabc 100644 --- a/apps/site/package.json +++ b/apps/site/package.json @@ -65,6 +65,7 @@ "react": "19.0.0", "react-dom": "19.0.0", "rehype-autolink-headings": "~7.1.0", + "rehype-mermaid": "^3.0.0", "rehype-slug": "~6.0.0", "remark-gfm": "~4.0.1", "remark-reading-time": "~2.0.1", diff --git a/package-lock.json b/package-lock.json index 4b1a7391df476..8ffa5b7fa6894 100644 --- a/package-lock.json +++ b/package-lock.json @@ -77,6 +77,7 @@ "react": "19.0.0", "react-dom": "19.0.0", "rehype-autolink-headings": "~7.1.0", + "rehype-mermaid": "^3.0.0", "rehype-slug": "~6.0.0", "remark-gfm": "~4.0.1", "remark-reading-time": "~2.0.1", @@ -177,6 +178,28 @@ "node": ">=6.0.0" } }, + "node_modules/@antfu/install-pkg": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.0.0.tgz", + "integrity": "sha512-xvX6P/lo1B3ej0OsaErAjqgFYzYVcJpamjLAFLYh9vRJngBrMoUG7aVnrGTeqM7yxbyTD5p3F2+0/QUEh8Vzhw==", + "license": "MIT", + "dependencies": { + "package-manager-detector": "^0.2.8", + "tinyexec": "^0.3.2" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, + "node_modules/@antfu/utils": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-8.1.1.tgz", + "integrity": "sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/@babel/code-frame": { "version": "7.26.2", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.26.2.tgz", @@ -704,6 +727,51 @@ "dev": true, "license": "MIT" }, + "node_modules/@braintree/sanitize-url": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.1.tgz", + "integrity": "sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw==", + "license": "MIT" + }, + "node_modules/@chevrotain/cst-dts-gen": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-11.0.3.tgz", + "integrity": "sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==", + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/gast": "11.0.3", + "@chevrotain/types": "11.0.3", + "lodash-es": "4.17.21" + } + }, + "node_modules/@chevrotain/gast": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@chevrotain/gast/-/gast-11.0.3.tgz", + "integrity": "sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==", + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/types": "11.0.3", + "lodash-es": "4.17.21" + } + }, + "node_modules/@chevrotain/regexp-to-ast": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@chevrotain/regexp-to-ast/-/regexp-to-ast-11.0.3.tgz", + "integrity": "sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA==", + "license": "Apache-2.0" + }, + "node_modules/@chevrotain/types": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@chevrotain/types/-/types-11.0.3.tgz", + "integrity": "sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ==", + "license": "Apache-2.0" + }, + "node_modules/@chevrotain/utils": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/@chevrotain/utils/-/utils-11.0.3.tgz", + "integrity": "sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ==", + "license": "Apache-2.0" + }, "node_modules/@commitlint/config-validator": { "version": "19.5.0", "resolved": "https://registry.npmjs.org/@commitlint/config-validator/-/config-validator-19.5.0.tgz", @@ -1654,6 +1722,15 @@ "tslib": "2" } }, + "node_modules/@fortawesome/fontawesome-free": { + "version": "6.7.2", + "resolved": "https://registry.npmjs.org/@fortawesome/fontawesome-free/-/fontawesome-free-6.7.2.tgz", + "integrity": "sha512-JUOtgFW6k9u4Y+xeIaEiLr3+cjoUPiAuLXoyKOJSia6Duzb7pq+A76P9ZdPDoAoxHdHzq6gE9/jKBGXlZT8FbA==", + "license": "(CC-BY-4.0 AND OFL-1.1 AND MIT)", + "engines": { + "node": ">=6" + } + }, "node_modules/@heroicons/react": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/@heroicons/react/-/react-2.2.0.tgz", @@ -1729,6 +1806,40 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@iconify/types": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz", + "integrity": "sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg==", + "license": "MIT" + }, + "node_modules/@iconify/utils": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@iconify/utils/-/utils-2.3.0.tgz", + "integrity": "sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==", + "license": "MIT", + "dependencies": { + "@antfu/install-pkg": "^1.0.0", + "@antfu/utils": "^8.1.0", + "@iconify/types": "^2.0.0", + "debug": "^4.4.0", + "globals": "^15.14.0", + "kolorist": "^1.8.0", + "local-pkg": "^1.0.0", + "mlly": "^1.7.4" + } + }, + "node_modules/@iconify/utils/node_modules/globals": { + "version": "15.15.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz", + "integrity": "sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==", + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@img/sharp-darwin-arm64": { "version": "0.33.5", "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", @@ -3185,6 +3296,15 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/@mermaid-js/parser": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@mermaid-js/parser/-/parser-0.3.0.tgz", + "integrity": "sha512-HsvL6zgE5sUPGgkIDlmAWR1HTNHz2Iy11BAWPTa4Jjabkpguy4Ze2gzfLrg6pdRuBvFwgUYyxiaNqZwrEEXepA==", + "license": "MIT", + "dependencies": { + "langium": "3.0.0" + } + }, "node_modules/@next/env": { "version": "15.2.0", "resolved": "https://registry.npmjs.org/@next/env/-/env-15.2.0.tgz", @@ -6201,6 +6321,259 @@ "@types/node": "*" } }, + "node_modules/@types/d3": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz", + "integrity": "sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==", + "license": "MIT", + "dependencies": { + "@types/d3-array": "*", + "@types/d3-axis": "*", + "@types/d3-brush": "*", + "@types/d3-chord": "*", + "@types/d3-color": "*", + "@types/d3-contour": "*", + "@types/d3-delaunay": "*", + "@types/d3-dispatch": "*", + "@types/d3-drag": "*", + "@types/d3-dsv": "*", + "@types/d3-ease": "*", + "@types/d3-fetch": "*", + "@types/d3-force": "*", + "@types/d3-format": "*", + "@types/d3-geo": "*", + "@types/d3-hierarchy": "*", + "@types/d3-interpolate": "*", + "@types/d3-path": "*", + "@types/d3-polygon": "*", + "@types/d3-quadtree": "*", + "@types/d3-random": "*", + "@types/d3-scale": "*", + "@types/d3-scale-chromatic": "*", + "@types/d3-selection": "*", + "@types/d3-shape": "*", + "@types/d3-time": "*", + "@types/d3-time-format": "*", + "@types/d3-timer": "*", + "@types/d3-transition": "*", + "@types/d3-zoom": "*" + } + }, + "node_modules/@types/d3-array": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz", + "integrity": "sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg==", + "license": "MIT" + }, + "node_modules/@types/d3-axis": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz", + "integrity": "sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-brush": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz", + "integrity": "sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-chord": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz", + "integrity": "sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg==", + "license": "MIT" + }, + "node_modules/@types/d3-color": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz", + "integrity": "sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A==", + "license": "MIT" + }, + "node_modules/@types/d3-contour": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz", + "integrity": "sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==", + "license": "MIT", + "dependencies": { + "@types/d3-array": "*", + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw==", + "license": "MIT" + }, + "node_modules/@types/d3-dispatch": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz", + "integrity": "sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ==", + "license": "MIT" + }, + "node_modules/@types/d3-drag": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz", + "integrity": "sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-dsv": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz", + "integrity": "sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g==", + "license": "MIT" + }, + "node_modules/@types/d3-ease": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz", + "integrity": "sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA==", + "license": "MIT" + }, + "node_modules/@types/d3-fetch": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz", + "integrity": "sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==", + "license": "MIT", + "dependencies": { + "@types/d3-dsv": "*" + } + }, + "node_modules/@types/d3-force": { + "version": "3.0.10", + "resolved": "https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz", + "integrity": "sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw==", + "license": "MIT" + }, + "node_modules/@types/d3-format": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz", + "integrity": "sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g==", + "license": "MIT" + }, + "node_modules/@types/d3-geo": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz", + "integrity": "sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==", + "license": "MIT", + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@types/d3-hierarchy": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz", + "integrity": "sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg==", + "license": "MIT" + }, + "node_modules/@types/d3-interpolate": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz", + "integrity": "sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==", + "license": "MIT", + "dependencies": { + "@types/d3-color": "*" + } + }, + "node_modules/@types/d3-path": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz", + "integrity": "sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg==", + "license": "MIT" + }, + "node_modules/@types/d3-polygon": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz", + "integrity": "sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA==", + "license": "MIT" + }, + "node_modules/@types/d3-quadtree": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz", + "integrity": "sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg==", + "license": "MIT" + }, + "node_modules/@types/d3-random": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz", + "integrity": "sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ==", + "license": "MIT" + }, + "node_modules/@types/d3-scale": { + "version": "4.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz", + "integrity": "sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==", + "license": "MIT", + "dependencies": { + "@types/d3-time": "*" + } + }, + "node_modules/@types/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ==", + "license": "MIT" + }, + "node_modules/@types/d3-selection": { + "version": "3.0.11", + "resolved": "https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz", + "integrity": "sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w==", + "license": "MIT" + }, + "node_modules/@types/d3-shape": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz", + "integrity": "sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==", + "license": "MIT", + "dependencies": { + "@types/d3-path": "*" + } + }, + "node_modules/@types/d3-time": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz", + "integrity": "sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g==", + "license": "MIT" + }, + "node_modules/@types/d3-time-format": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz", + "integrity": "sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg==", + "license": "MIT" + }, + "node_modules/@types/d3-timer": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz", + "integrity": "sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw==", + "license": "MIT" + }, + "node_modules/@types/d3-transition": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz", + "integrity": "sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==", + "license": "MIT", + "dependencies": { + "@types/d3-selection": "*" + } + }, + "node_modules/@types/d3-zoom": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz", + "integrity": "sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==", + "license": "MIT", + "dependencies": { + "@types/d3-interpolate": "*", + "@types/d3-selection": "*" + } + }, "node_modules/@types/debug": { "version": "4.1.12", "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz", @@ -6254,6 +6627,12 @@ "@types/estree": "*" } }, + "node_modules/@types/geojson": { + "version": "7946.0.16", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz", + "integrity": "sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==", + "license": "MIT" + }, "node_modules/@types/graceful-fs": { "version": "4.1.9", "resolved": "https://registry.npmjs.org/@types/graceful-fs/-/graceful-fs-4.1.9.tgz", @@ -8345,6 +8724,32 @@ "node": ">= 16" } }, + "node_modules/chevrotain": { + "version": "11.0.3", + "resolved": "https://registry.npmjs.org/chevrotain/-/chevrotain-11.0.3.tgz", + "integrity": "sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==", + "license": "Apache-2.0", + "dependencies": { + "@chevrotain/cst-dts-gen": "11.0.3", + "@chevrotain/gast": "11.0.3", + "@chevrotain/regexp-to-ast": "11.0.3", + "@chevrotain/types": "11.0.3", + "@chevrotain/utils": "11.0.3", + "lodash-es": "4.17.21" + } + }, + "node_modules/chevrotain-allstar": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/chevrotain-allstar/-/chevrotain-allstar-0.3.1.tgz", + "integrity": "sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==", + "license": "MIT", + "dependencies": { + "lodash-es": "^4.17.21" + }, + "peerDependencies": { + "chevrotain": "^11.0.0" + } + }, "node_modules/chokidar": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", @@ -8705,7 +9110,6 @@ "version": "8.3.0", "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, "license": "MIT", "engines": { "node": ">= 12" @@ -8825,6 +9229,12 @@ "typedarray": "^0.0.6" } }, + "node_modules/confbox": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.1.tgz", + "integrity": "sha512-hkT3yDPFbs95mNCy1+7qNKC6Pro+/ibzYxtM2iqEigpf0sVw+bg4Zh9/snjsBcf990vfIsg5+1U7VyiyBb3etg==", + "license": "MIT" + }, "node_modules/constants-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/constants-browserify/-/constants-browserify-1.0.0.tgz", @@ -8846,6 +9256,15 @@ "dev": true, "license": "MIT" }, + "node_modules/cose-base": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz", + "integrity": "sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==", + "license": "MIT", + "dependencies": { + "layout-base": "^1.0.0" + } + }, "node_modules/cosmiconfig": { "version": "9.0.0", "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", @@ -9164,6 +9583,54 @@ "devOptional": true, "license": "MIT" }, + "node_modules/cytoscape": { + "version": "3.31.1", + "resolved": "https://registry.npmjs.org/cytoscape/-/cytoscape-3.31.1.tgz", + "integrity": "sha512-Hx5Mtb1+hnmAKaZZ/7zL1Y5HTFYOjdDswZy/jD+1WINRU8KVi1B7+vlHdsTwY+VCFucTreoyu1RDzQJ9u0d2Hw==", + "license": "MIT", + "engines": { + "node": ">=0.10" + } + }, + "node_modules/cytoscape-cose-bilkent": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz", + "integrity": "sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==", + "license": "MIT", + "dependencies": { + "cose-base": "^1.0.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz", + "integrity": "sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==", + "license": "MIT", + "dependencies": { + "cose-base": "^2.2.0" + }, + "peerDependencies": { + "cytoscape": "^3.2.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/cose-base": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz", + "integrity": "sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==", + "license": "MIT", + "dependencies": { + "layout-base": "^2.0.0" + } + }, + "node_modules/cytoscape-fcose/node_modules/layout-base": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz", + "integrity": "sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg==", + "license": "MIT" + }, "node_modules/cz-conventional-changelog": { "version": "3.3.0", "resolved": "https://registry.npmjs.org/cz-conventional-changelog/-/cz-conventional-changelog-3.3.0.tgz", @@ -9185,52 +9652,524 @@ "@commitlint/load": ">6.1.1" } }, - "node_modules/damerau-levenshtein": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", - "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", - "dev": true, - "license": "BSD-2-Clause" - }, - "node_modules/data-urls": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", - "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", - "dev": true, - "license": "MIT", + "node_modules/d3": { + "version": "7.9.0", + "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz", + "integrity": "sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==", + "license": "ISC", "dependencies": { - "abab": "^2.0.6", - "whatwg-mimetype": "^3.0.0", - "whatwg-url": "^11.0.0" + "d3-array": "3", + "d3-axis": "3", + "d3-brush": "3", + "d3-chord": "3", + "d3-color": "3", + "d3-contour": "4", + "d3-delaunay": "6", + "d3-dispatch": "3", + "d3-drag": "3", + "d3-dsv": "3", + "d3-ease": "3", + "d3-fetch": "3", + "d3-force": "3", + "d3-format": "3", + "d3-geo": "3", + "d3-hierarchy": "3", + "d3-interpolate": "3", + "d3-path": "3", + "d3-polygon": "3", + "d3-quadtree": "3", + "d3-random": "3", + "d3-scale": "4", + "d3-scale-chromatic": "3", + "d3-selection": "3", + "d3-shape": "3", + "d3-time": "3", + "d3-time-format": "4", + "d3-timer": "3", + "d3-transition": "3", + "d3-zoom": "3" }, "engines": { "node": ">=12" } }, - "node_modules/data-view-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", - "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", - "dev": true, - "license": "MIT", + "node_modules/d3-array": { + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz", + "integrity": "sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==", + "license": "ISC", "dependencies": { - "call-bound": "^1.0.3", - "es-errors": "^1.3.0", - "is-data-view": "^1.0.2" + "internmap": "1 - 2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12" } }, - "node_modules/data-view-byte-length": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", - "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", - "dev": true, - "license": "MIT", + "node_modules/d3-axis": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz", + "integrity": "sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-brush": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz", + "integrity": "sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "3", + "d3-transition": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-chord": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz", + "integrity": "sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==", + "license": "ISC", + "dependencies": { + "d3-path": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-color": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz", + "integrity": "sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-contour": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz", + "integrity": "sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==", + "license": "ISC", + "dependencies": { + "d3-array": "^3.2.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-delaunay": { + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz", + "integrity": "sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==", + "license": "ISC", + "dependencies": { + "delaunator": "5" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dispatch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz", + "integrity": "sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-drag": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz", + "integrity": "sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-selection": "3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz", + "integrity": "sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==", + "license": "ISC", + "dependencies": { + "commander": "7", + "iconv-lite": "0.6", + "rw": "1" + }, + "bin": { + "csv2json": "bin/dsv2json.js", + "csv2tsv": "bin/dsv2dsv.js", + "dsv2dsv": "bin/dsv2dsv.js", + "dsv2json": "bin/dsv2json.js", + "json2csv": "bin/json2dsv.js", + "json2dsv": "bin/json2dsv.js", + "json2tsv": "bin/json2dsv.js", + "tsv2csv": "bin/dsv2dsv.js", + "tsv2json": "bin/dsv2json.js" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-dsv/node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "license": "MIT", + "engines": { + "node": ">= 10" + } + }, + "node_modules/d3-dsv/node_modules/iconv-lite": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", + "integrity": "sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==", + "license": "MIT", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/d3-ease": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz", + "integrity": "sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-fetch": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz", + "integrity": "sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==", + "license": "ISC", + "dependencies": { + "d3-dsv": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-force": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz", + "integrity": "sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-quadtree": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-format": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz", + "integrity": "sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-geo": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz", + "integrity": "sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2.5.0 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-hierarchy": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz", + "integrity": "sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-interpolate": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz", + "integrity": "sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-path": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz", + "integrity": "sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-polygon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz", + "integrity": "sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-quadtree": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz", + "integrity": "sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-random": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz", + "integrity": "sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-sankey": { + "version": "0.12.3", + "resolved": "https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz", + "integrity": "sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==", + "license": "BSD-3-Clause", + "dependencies": { + "d3-array": "1 - 2", + "d3-shape": "^1.2.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-array": { + "version": "2.12.1", + "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz", + "integrity": "sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==", + "license": "BSD-3-Clause", + "dependencies": { + "internmap": "^1.0.0" + } + }, + "node_modules/d3-sankey/node_modules/d3-path": { + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz", + "integrity": "sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg==", + "license": "BSD-3-Clause" + }, + "node_modules/d3-sankey/node_modules/d3-shape": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz", + "integrity": "sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==", + "license": "BSD-3-Clause", + "dependencies": { + "d3-path": "1" + } + }, + "node_modules/d3-sankey/node_modules/internmap": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz", + "integrity": "sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw==", + "license": "ISC" + }, + "node_modules/d3-scale": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz", + "integrity": "sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==", + "license": "ISC", + "dependencies": { + "d3-array": "2.10.0 - 3", + "d3-format": "1 - 3", + "d3-interpolate": "1.2.0 - 3", + "d3-time": "2.1.1 - 3", + "d3-time-format": "2 - 4" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-scale-chromatic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz", + "integrity": "sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-interpolate": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-selection": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz", + "integrity": "sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-shape": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz", + "integrity": "sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==", + "license": "ISC", + "dependencies": { + "d3-path": "^3.1.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz", + "integrity": "sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==", + "license": "ISC", + "dependencies": { + "d3-array": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-time-format": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz", + "integrity": "sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==", + "license": "ISC", + "dependencies": { + "d3-time": "1 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-timer": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz", + "integrity": "sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/d3-transition": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz", + "integrity": "sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==", + "license": "ISC", + "dependencies": { + "d3-color": "1 - 3", + "d3-dispatch": "1 - 3", + "d3-ease": "1 - 3", + "d3-interpolate": "1 - 3", + "d3-timer": "1 - 3" + }, + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "d3-selection": "2 - 3" + } + }, + "node_modules/d3-zoom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz", + "integrity": "sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==", + "license": "ISC", + "dependencies": { + "d3-dispatch": "1 - 3", + "d3-drag": "2 - 3", + "d3-interpolate": "1 - 3", + "d3-selection": "2 - 3", + "d3-transition": "2 - 3" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/dagre-d3-es": { + "version": "7.0.11", + "resolved": "https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.11.tgz", + "integrity": "sha512-tvlJLyQf834SylNKax8Wkzco/1ias1OPw8DcUMDE7oUIoSEW25riQVuiu/0OWEFqT0cxHT3Pa9/D82Jr47IONw==", + "license": "MIT", + "dependencies": { + "d3": "^7.9.0", + "lodash-es": "^4.17.21" + } + }, + "node_modules/damerau-levenshtein": { + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/damerau-levenshtein/-/damerau-levenshtein-1.0.8.tgz", + "integrity": "sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==", + "dev": true, + "license": "BSD-2-Clause" + }, + "node_modules/data-urls": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/data-urls/-/data-urls-3.0.2.tgz", + "integrity": "sha512-Jy/tj3ldjZJo63sVAvg6LHt2mHvl4V6AgRAmNDtLdm7faqtsx+aJG42rsyCo9JCoRVKwPFzKlIPx3DIibwSIaQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "abab": "^2.0.6", + "whatwg-mimetype": "^3.0.0", + "whatwg-url": "^11.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/data-view-buffer": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-buffer/-/data-view-buffer-1.0.2.tgz", + "integrity": "sha512-EmKO5V3OLXh1rtK2wgXRansaK1/mtVdTUEiEI0W8RkvgT05kfxaH29PliLnpLP73yYO6142Q72QNa8Wx/A5CqQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.3", + "es-errors": "^1.3.0", + "is-data-view": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/data-view-byte-length": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/data-view-byte-length/-/data-view-byte-length-1.0.2.tgz", + "integrity": "sha512-tuhGbE6CfTM9+5ANGf+oQb72Ky/0+s3xKUpHvShfiz2RxMFgFPjsXuRLBVMtvMs15awe45SRb83D6wH4ew6wlQ==", + "dev": true, + "license": "MIT", "dependencies": { "call-bound": "^1.0.3", "es-errors": "^1.3.0", @@ -9261,6 +10200,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/dayjs": { + "version": "1.11.13", + "resolved": "https://registry.npmjs.org/dayjs/-/dayjs-1.11.13.tgz", + "integrity": "sha512-oaMBel6gjolK862uaPQOVTA7q3TZhuSvuMQAAglQDOWYO9A91IrAOUJEyKVlqJlHE0vq5p5UXxzdPfMH/x6xNg==", + "license": "MIT" + }, "node_modules/debug": { "version": "4.4.0", "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", @@ -9397,6 +10342,15 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/delaunator": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz", + "integrity": "sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==", + "license": "ISC", + "dependencies": { + "robust-predicates": "^3.0.2" + } + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -11337,6 +12291,12 @@ "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, + "node_modules/exsolve": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.4.tgz", + "integrity": "sha512-xsZH6PXaER4XoV+NiT7JHp1bJodJVT+cxeSH1G0f0tlT0lJqYuHUP3bUx2HtfTDvOagMINYp8rsqusxud3RXhw==", + "license": "MIT" + }, "node_modules/extend": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz", @@ -12357,6 +13317,12 @@ "js-yaml": "bin/js-yaml.js" } }, + "node_modules/hachure-fill": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/hachure-fill/-/hachure-fill-0.5.2.tgz", + "integrity": "sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg==", + "license": "MIT" + }, "node_modules/handlebars": { "version": "4.7.8", "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.8.tgz", @@ -12470,16 +13436,85 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hasown": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", - "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/hast-util-from-dom": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/hast-util-from-dom/-/hast-util-from-dom-5.0.1.tgz", + "integrity": "sha512-N+LqofjR2zuzTjCPzyDUdSshy4Ma6li7p/c3pA78uTwzFgENbgbUrm2ugwsOdcjI1muO+o6Dgzp9p8WHtn/39Q==", + "license": "ISC", + "dependencies": { + "@types/hast": "^3.0.0", + "hastscript": "^9.0.0", + "web-namespaces": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-html": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-html/-/hast-util-from-html-2.0.3.tgz", + "integrity": "sha512-CUSRHXyKjzHov8yKsQjGOElXy/3EKpyX56ELnkHH34vDVw1N1XSQ1ZcAvTyAPtGqLTuKP/uxM+aLkSPqF/EtMw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "devlop": "^1.1.0", + "hast-util-from-parse5": "^8.0.0", + "parse5": "^7.0.0", + "vfile": "^6.0.0", + "vfile-message": "^4.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-html-isomorphic": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hast-util-from-html-isomorphic/-/hast-util-from-html-isomorphic-2.0.0.tgz", + "integrity": "sha512-zJfpXq44yff2hmE0XmwEOzdWin5xwH+QIhMLOScpX91e/NSGPsAzNCvLQDIEPyO2TXi+lBmU6hjLIhV8MwP2kw==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-from-dom": "^5.0.0", + "hast-util-from-html": "^2.0.0", + "unist-util-remove-position": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, + "node_modules/hast-util-from-parse5": { + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/hast-util-from-parse5/-/hast-util-from-parse5-8.0.3.tgz", + "integrity": "sha512-3kxEVkEKt0zvcZ3hCRYI8rqrgwtlIOFMWkbclACvjlDw8Li9S2hk/d51OI0nr/gIpdMHNepwgOKqZ/sy0Clpyg==", "license": "MIT", "dependencies": { - "function-bind": "^1.1.2" + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "devlop": "^1.0.0", + "hastscript": "^9.0.0", + "property-information": "^7.0.0", + "vfile": "^6.0.0", + "vfile-location": "^5.0.0", + "web-namespaces": "^2.0.0" }, - "engines": { - "node": ">= 0.4" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" } }, "node_modules/hast-util-heading-rank": { @@ -12508,6 +13543,19 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hast-util-parse-selector": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/hast-util-parse-selector/-/hast-util-parse-selector-4.0.0.tgz", + "integrity": "sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/hast-util-to-estree": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/hast-util-to-estree/-/hast-util-to-estree-3.1.2.tgz", @@ -12599,6 +13647,22 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hast-util-to-text": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/hast-util-to-text/-/hast-util-to-text-4.0.2.tgz", + "integrity": "sha512-KK6y/BN8lbaq654j7JgBydev7wuNMcID54lkRav1P0CaE1e47P72AWWPiGKXTJU271ooYzcvTAn/Zt0REnvc7A==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "@types/unist": "^3.0.0", + "hast-util-is-element": "^3.0.0", + "unist-util-find-after": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/hast-util-whitespace": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/hast-util-whitespace/-/hast-util-whitespace-3.0.0.tgz", @@ -12612,6 +13676,23 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/hastscript": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/hastscript/-/hastscript-9.0.1.tgz", + "integrity": "sha512-g7df9rMFX/SPi34tyGCyUBREQoKkapwdY/T04Qn9TDWfHhAYt4/I0gMVirzK5wEzeUqIjEB+LXC/ypb7Aqno5w==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "comma-separated-tokens": "^2.0.0", + "hast-util-parse-selector": "^4.0.0", + "property-information": "^7.0.0", + "space-separated-tokens": "^2.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/he": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/he/-/he-1.2.0.tgz", @@ -13170,6 +14251,15 @@ "node": ">= 0.4" } }, + "node_modules/internmap": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz", + "integrity": "sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==", + "license": "ISC", + "engines": { + "node": ">=12" + } + }, "node_modules/intl-messageformat": { "version": "10.7.15", "resolved": "https://registry.npmjs.org/intl-messageformat/-/intl-messageformat-10.7.15.tgz", @@ -16259,6 +17349,22 @@ "node": ">=4.0" } }, + "node_modules/katex": { + "version": "0.16.21", + "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.21.tgz", + "integrity": "sha512-XvqR7FgOHtWupfMiigNzmh+MgUVmDGU2kXZm899ZkPfcuoPuFxyHmXsgATDpFZDAXCI8tvinaVcDo8PIIJSo4A==", + "funding": [ + "https://opencollective.com/katex", + "https://github.com/sponsors/katex" + ], + "license": "MIT", + "dependencies": { + "commander": "^8.3.0" + }, + "bin": { + "katex": "cli.js" + } + }, "node_modules/keyv": { "version": "4.5.4", "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", @@ -16269,6 +17375,11 @@ "json-buffer": "3.0.1" } }, + "node_modules/khroma": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.1.0.tgz", + "integrity": "sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw==" + }, "node_modules/kind-of": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", @@ -16295,6 +17406,28 @@ "dev": true, "license": "MIT" }, + "node_modules/kolorist": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz", + "integrity": "sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ==", + "license": "MIT" + }, + "node_modules/langium": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/langium/-/langium-3.0.0.tgz", + "integrity": "sha512-+Ez9EoiByeoTu/2BXmEaZ06iPNXM6thWJp02KfBO/raSMyCJ4jw7AkWWa+zBCTm0+Tw1Fj9FOxdqSskyN5nAwg==", + "license": "MIT", + "dependencies": { + "chevrotain": "~11.0.3", + "chevrotain-allstar": "~0.3.0", + "vscode-languageserver": "~9.0.1", + "vscode-languageserver-textdocument": "~1.0.11", + "vscode-uri": "~3.0.8" + }, + "engines": { + "node": ">=16.0.0" + } + }, "node_modules/language-subtag-registry": { "version": "0.3.23", "resolved": "https://registry.npmjs.org/language-subtag-registry/-/language-subtag-registry-0.3.23.tgz", @@ -16315,6 +17448,12 @@ "node": ">=0.10" } }, + "node_modules/layout-base": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz", + "integrity": "sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg==", + "license": "MIT" + }, "node_modules/leven": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz", @@ -16688,6 +17827,23 @@ "node": ">=6.11.5" } }, + "node_modules/local-pkg": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.1.tgz", + "integrity": "sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==", + "license": "MIT", + "dependencies": { + "mlly": "^1.7.4", + "pkg-types": "^2.0.1", + "quansync": "^0.2.8" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -16710,6 +17866,12 @@ "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", "license": "MIT" }, + "node_modules/lodash-es": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT" + }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", @@ -17745,6 +18907,68 @@ "node": ">= 8" } }, + "node_modules/mermaid": { + "version": "11.4.1", + "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.4.1.tgz", + "integrity": "sha512-Mb01JT/x6CKDWaxigwfZYuYmDZ6xtrNwNlidKZwkSrDaY9n90tdrJTV5Umk+wP1fZscGptmKFXHsXMDEVZ+Q6A==", + "license": "MIT", + "dependencies": { + "@braintree/sanitize-url": "^7.0.1", + "@iconify/utils": "^2.1.32", + "@mermaid-js/parser": "^0.3.0", + "@types/d3": "^7.4.3", + "cytoscape": "^3.29.2", + "cytoscape-cose-bilkent": "^4.1.0", + "cytoscape-fcose": "^2.2.0", + "d3": "^7.9.0", + "d3-sankey": "^0.12.3", + "dagre-d3-es": "7.0.11", + "dayjs": "^1.11.10", + "dompurify": "^3.2.1", + "katex": "^0.16.9", + "khroma": "^2.1.0", + "lodash-es": "^4.17.21", + "marked": "^13.0.2", + "roughjs": "^4.6.6", + "stylis": "^4.3.1", + "ts-dedent": "^2.2.0", + "uuid": "^9.0.1" + } + }, + "node_modules/mermaid-isomorphic": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/mermaid-isomorphic/-/mermaid-isomorphic-3.0.0.tgz", + "integrity": "sha512-6RBUQD0ZWzBHO4KZ8JMK3a/lNL7383N6K4nXzOdA2Ylnhz34qC8Nls2ZgOJVjGuB9Iq1bP61XKE0K/fNOD2n6g==", + "license": "MIT", + "dependencies": { + "@fortawesome/fontawesome-free": "^6.0.0", + "mermaid": "^11.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/remcohaszing" + }, + "peerDependencies": { + "playwright": "1" + }, + "peerDependenciesMeta": { + "playwright": { + "optional": true + } + } + }, + "node_modules/mermaid/node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, "node_modules/micromark": { "version": "4.0.2", "resolved": "https://registry.npmjs.org/micromark/-/micromark-4.0.2.tgz", @@ -18549,6 +19773,15 @@ "node": ">=4" } }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "license": "MIT", + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, "node_modules/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -18596,6 +19829,35 @@ "node": ">=10" } }, + "node_modules/mlly": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz", + "integrity": "sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==", + "license": "MIT", + "dependencies": { + "acorn": "^8.14.0", + "pathe": "^2.0.1", + "pkg-types": "^1.3.0", + "ufo": "^1.5.4" + } + }, + "node_modules/mlly/node_modules/confbox": { + "version": "0.1.8", + "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz", + "integrity": "sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w==", + "license": "MIT" + }, + "node_modules/mlly/node_modules/pkg-types": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz", + "integrity": "sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==", + "license": "MIT", + "dependencies": { + "confbox": "^0.1.8", + "mlly": "^1.7.4", + "pathe": "^2.0.1" + } + }, "node_modules/module-details-from-path": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", @@ -19345,6 +20607,15 @@ "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", "license": "BlueOak-1.0.0" }, + "node_modules/package-manager-detector": { + "version": "0.2.11", + "resolved": "https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-0.2.11.tgz", + "integrity": "sha512-BEnLolu+yuz22S56CU1SUKq3XC3PkwD5wv4ikR4MfGvnRVcmzXR9DwSlW2fEamyTPyXHomBJRzgapeuBvRNzJQ==", + "license": "MIT", + "dependencies": { + "quansync": "^0.2.7" + } + }, "node_modules/param-case": { "version": "3.0.4", "resolved": "https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz", @@ -19425,7 +20696,6 @@ "version": "7.2.1", "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.2.1.tgz", "integrity": "sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==", - "dev": true, "license": "MIT", "dependencies": { "entities": "^4.5.0" @@ -19452,6 +20722,12 @@ "dev": true, "license": "MIT" }, + "node_modules/path-data-parser": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/path-data-parser/-/path-data-parser-0.1.0.tgz", + "integrity": "sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w==", + "license": "MIT" + }, "node_modules/path-exists": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", @@ -19522,6 +20798,12 @@ "node": ">=8" } }, + "node_modules/pathe": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz", + "integrity": "sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w==", + "license": "MIT" + }, "node_modules/pathval": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/pathval/-/pathval-2.0.0.tgz", @@ -19649,6 +20931,17 @@ "node": ">=8" } }, + "node_modules/pkg-types": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.1.0.tgz", + "integrity": "sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==", + "license": "MIT", + "dependencies": { + "confbox": "^0.2.1", + "exsolve": "^1.0.1", + "pathe": "^2.0.3" + } + }, "node_modules/pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", @@ -19659,6 +20952,22 @@ "node": ">=4" } }, + "node_modules/points-on-curve": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/points-on-curve/-/points-on-curve-0.2.0.tgz", + "integrity": "sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A==", + "license": "MIT" + }, + "node_modules/points-on-path": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/points-on-path/-/points-on-path-0.2.1.tgz", + "integrity": "sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==", + "license": "MIT", + "dependencies": { + "path-data-parser": "0.1.0", + "points-on-curve": "0.2.0" + } + }, "node_modules/polished": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/polished/-/polished-4.3.1.tgz", @@ -20376,6 +21685,22 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/quansync": { + "version": "0.2.8", + "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.8.tgz", + "integrity": "sha512-4+saucphJMazjt7iOM27mbFCk+D9dd/zmgMDCzRZ8MEoBfYp7lAvoN38et/phRQF6wOPMy/OROBGgoWeSKyluA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/antfu" + }, + { + "type": "individual", + "url": "https://github.com/sponsors/sxzz" + } + ], + "license": "MIT" + }, "node_modules/querystringify": { "version": "2.2.0", "resolved": "https://registry.npmjs.org/querystringify/-/querystringify-2.2.0.tgz", @@ -20853,6 +22178,34 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/rehype-mermaid": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/rehype-mermaid/-/rehype-mermaid-3.0.0.tgz", + "integrity": "sha512-fxrD5E4Fa1WXUjmjNDvLOMT4XB1WaxcfycFIWiYU0yEMQhcTDElc9aDFnbDFRLxG1Cfo1I3mfD5kg4sjlWaB+Q==", + "license": "MIT", + "dependencies": { + "@types/hast": "^3.0.0", + "hast-util-from-html-isomorphic": "^2.0.0", + "hast-util-to-text": "^4.0.0", + "mermaid-isomorphic": "^3.0.0", + "mini-svg-data-uri": "^1.0.0", + "space-separated-tokens": "^2.0.0", + "unified": "^11.0.0", + "unist-util-visit-parents": "^6.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/remcohaszing" + }, + "peerDependencies": { + "playwright": "1" + }, + "peerDependenciesMeta": { + "playwright": { + "optional": true + } + } + }, "node_modules/rehype-recma": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/rehype-recma/-/rehype-recma-1.0.0.tgz", @@ -22288,6 +23641,24 @@ "node": "*" } }, + "node_modules/robust-predicates": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz", + "integrity": "sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg==", + "license": "Unlicense" + }, + "node_modules/roughjs": { + "version": "4.6.6", + "resolved": "https://registry.npmjs.org/roughjs/-/roughjs-4.6.6.tgz", + "integrity": "sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==", + "license": "MIT", + "dependencies": { + "hachure-fill": "^0.5.2", + "path-data-parser": "^0.1.0", + "points-on-curve": "^0.2.0", + "points-on-path": "^0.2.1" + } + }, "node_modules/run-async": { "version": "2.4.1", "resolved": "https://registry.npmjs.org/run-async/-/run-async-2.4.1.tgz", @@ -22321,6 +23692,12 @@ "queue-microtask": "^1.2.2" } }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "license": "BSD-3-Clause" + }, "node_modules/rxjs": { "version": "7.8.2", "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", @@ -22424,7 +23801,6 @@ "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==", - "dev": true, "license": "MIT" }, "node_modules/sax": { @@ -23581,6 +24957,12 @@ "node": "^14.17.0 || ^16.13.0 || >=18.0.0" } }, + "node_modules/stylis": { + "version": "4.3.6", + "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz", + "integrity": "sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ==", + "license": "MIT" + }, "node_modules/sucrase": { "version": "3.35.0", "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", @@ -24209,6 +25591,12 @@ "dev": true, "license": "MIT" }, + "node_modules/tinyexec": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-0.3.2.tgz", + "integrity": "sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==", + "license": "MIT" + }, "node_modules/tinyglobby": { "version": "0.2.12", "resolved": "https://registry.npmjs.org/tinyglobby/-/tinyglobby-0.2.12.tgz", @@ -24379,7 +25767,6 @@ "version": "2.2.0", "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz", "integrity": "sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==", - "dev": true, "license": "MIT", "engines": { "node": ">=6.10" @@ -24681,6 +26068,12 @@ "integrity": "sha512-ARDJmphmdvUk6Glw7y9DQ2bFkKBHwQHLi2lsaH6PPmz/Ka9sFOBsBluozhDltWmnv9u/cF6Rt87znRTPV+yp/A==", "license": "MIT" }, + "node_modules/ufo": { + "version": "1.5.4", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.5.4.tgz", + "integrity": "sha512-UsUk3byDzKd04EyoZ7U4DOlxQaD14JUKQl6/P7wiX4FNvUfm3XL246n9W5AmqwW5RSFJ27NAuM0iLscAOYUiGQ==", + "license": "MIT" + }, "node_modules/uglify-js": { "version": "3.19.3", "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.19.3.tgz", @@ -24961,6 +26354,20 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/unist-util-find-after": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-find-after/-/unist-util-find-after-5.0.0.tgz", + "integrity": "sha512-amQa0Ep2m6hE2g72AugUItjbuM8X8cGQnFoHk0pGfrFeT9GZhzN5SW8nRsiGKK7Aif4CrACPENkA6P/Lw6fHGQ==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-is": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/unist-util-inspect": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/unist-util-inspect/-/unist-util-inspect-8.1.0.tgz", @@ -25014,6 +26421,20 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/unist-util-remove-position": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/unist-util-remove-position/-/unist-util-remove-position-5.0.0.tgz", + "integrity": "sha512-Hp5Kh3wLxv0PHj9m2yZhhLt58KzPtEYKQQ4yxfYFEO7EvHwzyDYnduhHnY1mDxoqr7VUwVuHXk9RXKIiYS1N8Q==", + "license": "MIT", + "dependencies": { + "@types/unist": "^3.0.0", + "unist-util-visit": "^5.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/unist-util-stringify-position": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/unist-util-stringify-position/-/unist-util-stringify-position-4.0.0.tgz", @@ -25321,7 +26742,6 @@ "version": "5.0.3", "resolved": "https://registry.npmjs.org/vfile-location/-/vfile-location-5.0.3.tgz", "integrity": "sha512-5yXvWDEgqeiYiBe1lbxYF7UMAIm/IcopxMHrMQDq3nvKcjPKIhZklUKL+AE7J7uApI4kwe2snsK+eI6UTj9EHg==", - "dev": true, "license": "MIT", "dependencies": { "@types/unist": "^3.0.0", @@ -25478,6 +26898,55 @@ "url": "https://opencollective.com/unified" } }, + "node_modules/vscode-jsonrpc": { + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz", + "integrity": "sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==", + "license": "MIT", + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/vscode-languageserver": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz", + "integrity": "sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==", + "license": "MIT", + "dependencies": { + "vscode-languageserver-protocol": "3.17.5" + }, + "bin": { + "installServerIntoExtension": "bin/installServerIntoExtension" + } + }, + "node_modules/vscode-languageserver-protocol": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz", + "integrity": "sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==", + "license": "MIT", + "dependencies": { + "vscode-jsonrpc": "8.2.0", + "vscode-languageserver-types": "3.17.5" + } + }, + "node_modules/vscode-languageserver-textdocument": { + "version": "1.0.12", + "resolved": "https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz", + "integrity": "sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA==", + "license": "MIT" + }, + "node_modules/vscode-languageserver-types": { + "version": "3.17.5", + "resolved": "https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz", + "integrity": "sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg==", + "license": "MIT" + }, + "node_modules/vscode-uri": { + "version": "3.0.8", + "resolved": "https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz", + "integrity": "sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw==", + "license": "MIT" + }, "node_modules/w3c-xmlserializer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/w3c-xmlserializer/-/w3c-xmlserializer-4.0.0.tgz", @@ -25532,6 +27001,16 @@ "defaults": "^1.0.3" } }, + "node_modules/web-namespaces": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/web-namespaces/-/web-namespaces-2.0.1.tgz", + "integrity": "sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==", + "license": "MIT", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/webidl-conversions": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-7.0.0.tgz", From 92474ca64a518e17834bf19c986fe0bbad425266 Mon Sep 17 00:00:00 2001 From: Augustin Mauroy <97875033+AugustinMauroy@users.noreply.github.com> Date: Tue, 11 Mar 2025 22:25:54 +0100 Subject: [PATCH 2/4] fix + feedback --- .../components/__design__/mermaid.stories.tsx | 7 +-- apps/site/next.mdx.plugins.mjs | 2 +- apps/site/package.json | 1 + package-lock.json | 45 +++++++++++++++++++ 4 files changed, 51 insertions(+), 4 deletions(-) diff --git a/apps/site/components/__design__/mermaid.stories.tsx b/apps/site/components/__design__/mermaid.stories.tsx index e57bba456a40b..4979cde34ec17 100644 --- a/apps/site/components/__design__/mermaid.stories.tsx +++ b/apps/site/components/__design__/mermaid.stories.tsx @@ -1,4 +1,5 @@ import type { Meta as MetaObj, StoryObj } from '@storybook/react'; +import dedent from 'dedent'; import { VFile } from 'vfile'; import { compile } from '@/next.mdx.compiler.mjs'; @@ -8,9 +9,9 @@ type Props = { children: string }; type Story = StoryObj; type Meta = MetaObj; -export const Default: Story = { +export const Mermaid: Story = { args: { - children: `\`\`\`mermaid + children: dedent`\`\`\`mermaid graph LR A[Client] --> B(Load Balancer) B --> C{Server 1} @@ -20,7 +21,7 @@ B --> D{Server 2} }; export default { - title: 'Design System/Mermaid', + title: 'Design System', render: (_, { loaded: { Content } }) => Content, loaders: [ async ({ args }) => { diff --git a/apps/site/next.mdx.plugins.mjs b/apps/site/next.mdx.plugins.mjs index 5f668f8e15684..c9c7ca4a167e5 100644 --- a/apps/site/next.mdx.plugins.mjs +++ b/apps/site/next.mdx.plugins.mjs @@ -16,7 +16,7 @@ import rehypeShikiji from './next.mdx.shiki.mjs'; */ export const REHYPE_PLUGINS = [ // Transforms Mermaid code blocks into SVGs - // !!! This plugin must be before `rehypeShikiji` !!! + // note: needs to be imported before rehype-shiki to prevent transforming into code-blocks rehypeMermaid, // Generates `id` attributes for headings (H1, ...) rehypeSlug, diff --git a/apps/site/package.json b/apps/site/package.json index 30bf0681fcabc..71170effe9c55 100644 --- a/apps/site/package.json +++ b/apps/site/package.json @@ -56,6 +56,7 @@ "next": "15.2.0", "next-intl": "~3.26.5", "next-themes": "~0.4.4", + "playwright": "^1.51.0", "postcss": "~8.5.3", "postcss-calc": "~10.1.1", "postcss-import": "~16.1.0", diff --git a/package-lock.json b/package-lock.json index 8ffa5b7fa6894..32f5c029e0736 100644 --- a/package-lock.json +++ b/package-lock.json @@ -68,6 +68,7 @@ "next": "15.2.0", "next-intl": "~3.26.5", "next-themes": "~0.4.4", + "playwright": "^1.51.0", "postcss": "~8.5.3", "postcss-calc": "~10.1.1", "postcss-import": "~16.1.0", @@ -20942,6 +20943,50 @@ "pathe": "^2.0.3" } }, + "node_modules/playwright": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.51.0.tgz", + "integrity": "sha512-442pTfGM0xxfCYxuBa/Pu6B2OqxqqaYq39JS8QDMGThUvIOCd6s0ANDog3uwA0cHavVlnTQzGCN7Id2YekDSXA==", + "license": "Apache-2.0", + "dependencies": { + "playwright-core": "1.51.0" + }, + "bin": { + "playwright": "cli.js" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "fsevents": "2.3.2" + } + }, + "node_modules/playwright-core": { + "version": "1.51.0", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.51.0.tgz", + "integrity": "sha512-x47yPE3Zwhlil7wlNU/iktF7t2r/URR3VLbH6EknJd/04Qc/PSJ0EY3CMXipmglLG+zyRxW6HNo2EGbKLHPWMg==", + "license": "Apache-2.0", + "bin": { + "playwright-core": "cli.js" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/pluralize": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/pluralize/-/pluralize-8.0.0.tgz", From e8cd8001e1042b66f136a25b45501fbb58c843b2 Mon Sep 17 00:00:00 2001 From: Augustin Mauroy <97875033+AugustinMauroy@users.noreply.github.com> Date: Wed, 12 Mar 2025 16:46:19 +0100 Subject: [PATCH 3/4] add indent --- apps/site/components/__design__/mermaid.stories.tsx | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/apps/site/components/__design__/mermaid.stories.tsx b/apps/site/components/__design__/mermaid.stories.tsx index 4979cde34ec17..f928765dbde3b 100644 --- a/apps/site/components/__design__/mermaid.stories.tsx +++ b/apps/site/components/__design__/mermaid.stories.tsx @@ -12,11 +12,11 @@ type Meta = MetaObj; export const Mermaid: Story = { args: { children: dedent`\`\`\`mermaid -graph LR -A[Client] --> B(Load Balancer) -B --> C{Server 1} -B --> D{Server 2} -\`\`\``, + graph LR + A[Client] --> B(Load Balancer) + B --> C{Server 1} + B --> D{Server 2} + \`\`\``, }, }; From 4f81e2c8ffed3ae89b1e1e8920a8b3f3dca8140c Mon Sep 17 00:00:00 2001 From: Augustin Mauroy <97875033+AugustinMauroy@users.noreply.github.com> Date: Mon, 17 Mar 2025 18:24:19 +0100 Subject: [PATCH 4/4] fork: mermaid-isomorphic --- apps/site/next.mdx.plugins.mjs | 2 +- apps/site/package.json | 7 + package-lock.json | 729 +++++++++++++++++- package.json | 1 + packages/mermaid-isomorphic/LICENSE.md | 18 + packages/mermaid-isomorphic/eslint.config.js | 19 + .../fixtures/accessibility/browser.svg | 10 + .../accessibility/custom-font-iterable.svg | 10 + .../fixtures/accessibility/custom-font.svg | 10 + .../fixtures/accessibility/expected.png | Bin 0 -> 10388 bytes .../fixtures/accessibility/expected.svg | 10 + .../fixtures/accessibility/firefox.svg | 10 + .../fixtures/accessibility/input.mmd | 5 + .../fixtures/accessibility/webkit.svg | 10 + .../fixtures/accessibility/with-options.svg | 10 + .../fixtures/fontawesome/browser.svg | 8 + .../fontawesome/custom-font-iterable.svg | 8 + .../fixtures/fontawesome/custom-font.svg | 8 + .../fixtures/fontawesome/expected.png | Bin 0 -> 11002 bytes .../fixtures/fontawesome/expected.svg | 8 + .../fixtures/fontawesome/firefox.svg | 8 + .../fixtures/fontawesome/input.mmd | 5 + .../fixtures/fontawesome/webkit.svg | 8 + .../fixtures/fontawesome/with-options.svg | 8 + .../fixtures/self-closing/browser.svg | 8 + .../self-closing/custom-font-iterable.svg | 8 + .../fixtures/self-closing/custom-font.svg | 8 + .../fixtures/self-closing/expected.png | Bin 0 -> 1978 bytes .../fixtures/self-closing/expected.svg | 8 + .../fixtures/self-closing/firefox.svg | 8 + .../fixtures/self-closing/input.mmd | 2 + .../fixtures/self-closing/webkit.svg | 8 + .../fixtures/self-closing/with-options.svg | 8 + .../fixtures/simple/browser.svg | 8 + .../fixtures/simple/custom-font-iterable.svg | 8 + .../fixtures/simple/custom-font.svg | 8 + .../fixtures/simple/expected.png | Bin 0 -> 5547 bytes .../fixtures/simple/expected.svg | 8 + .../fixtures/simple/firefox.svg | 8 + .../fixtures/simple/input.mmd | 5 + .../fixtures/simple/webkit.svg | 8 + .../fixtures/simple/with-options.svg | 8 + .../fixtures/title/browser.svg | 8 + .../fixtures/title/custom-font-iterable.svg | 8 + .../fixtures/title/custom-font.svg | 8 + .../fixtures/title/expected.png | Bin 0 -> 1807 bytes .../fixtures/title/expected.svg | 8 + .../fixtures/title/firefox.svg | 8 + .../fixtures/title/input.mmd | 5 + .../fixtures/title/webkit.svg | 8 + .../fixtures/title/with-options.svg | 8 + packages/mermaid-isomorphic/index.html | 7 + packages/mermaid-isomorphic/package.json | 62 ++ packages/mermaid-isomorphic/src/browser.ts | 72 ++ .../src/mermaid-isomorphic.ts | 375 +++++++++ .../mermaid-isomorphic/src/test.bundle.ts | 9 + packages/mermaid-isomorphic/src/test.ts | 132 ++++ packages/mermaid-isomorphic/tsconfig.json | 16 + packages/mermaid-isomorphic/turbo.json | 13 + 59 files changed, 1758 insertions(+), 20 deletions(-) create mode 100644 packages/mermaid-isomorphic/LICENSE.md create mode 100644 packages/mermaid-isomorphic/eslint.config.js create mode 100644 packages/mermaid-isomorphic/fixtures/accessibility/browser.svg create mode 100644 packages/mermaid-isomorphic/fixtures/accessibility/custom-font-iterable.svg create mode 100644 packages/mermaid-isomorphic/fixtures/accessibility/custom-font.svg create mode 100644 packages/mermaid-isomorphic/fixtures/accessibility/expected.png create mode 100644 packages/mermaid-isomorphic/fixtures/accessibility/expected.svg create mode 100644 packages/mermaid-isomorphic/fixtures/accessibility/firefox.svg create mode 100644 packages/mermaid-isomorphic/fixtures/accessibility/input.mmd create mode 100644 packages/mermaid-isomorphic/fixtures/accessibility/webkit.svg create mode 100644 packages/mermaid-isomorphic/fixtures/accessibility/with-options.svg create mode 100644 packages/mermaid-isomorphic/fixtures/fontawesome/browser.svg create mode 100644 packages/mermaid-isomorphic/fixtures/fontawesome/custom-font-iterable.svg create mode 100644 packages/mermaid-isomorphic/fixtures/fontawesome/custom-font.svg create mode 100644 packages/mermaid-isomorphic/fixtures/fontawesome/expected.png create mode 100644 packages/mermaid-isomorphic/fixtures/fontawesome/expected.svg create mode 100644 packages/mermaid-isomorphic/fixtures/fontawesome/firefox.svg create mode 100644 packages/mermaid-isomorphic/fixtures/fontawesome/input.mmd create mode 100644 packages/mermaid-isomorphic/fixtures/fontawesome/webkit.svg create mode 100644 packages/mermaid-isomorphic/fixtures/fontawesome/with-options.svg create mode 100644 packages/mermaid-isomorphic/fixtures/self-closing/browser.svg create mode 100644 packages/mermaid-isomorphic/fixtures/self-closing/custom-font-iterable.svg create mode 100644 packages/mermaid-isomorphic/fixtures/self-closing/custom-font.svg create mode 100644 packages/mermaid-isomorphic/fixtures/self-closing/expected.png create mode 100644 packages/mermaid-isomorphic/fixtures/self-closing/expected.svg create mode 100644 packages/mermaid-isomorphic/fixtures/self-closing/firefox.svg create mode 100644 packages/mermaid-isomorphic/fixtures/self-closing/input.mmd create mode 100644 packages/mermaid-isomorphic/fixtures/self-closing/webkit.svg create mode 100644 packages/mermaid-isomorphic/fixtures/self-closing/with-options.svg create mode 100644 packages/mermaid-isomorphic/fixtures/simple/browser.svg create mode 100644 packages/mermaid-isomorphic/fixtures/simple/custom-font-iterable.svg create mode 100644 packages/mermaid-isomorphic/fixtures/simple/custom-font.svg create mode 100644 packages/mermaid-isomorphic/fixtures/simple/expected.png create mode 100644 packages/mermaid-isomorphic/fixtures/simple/expected.svg create mode 100644 packages/mermaid-isomorphic/fixtures/simple/firefox.svg create mode 100644 packages/mermaid-isomorphic/fixtures/simple/input.mmd create mode 100644 packages/mermaid-isomorphic/fixtures/simple/webkit.svg create mode 100644 packages/mermaid-isomorphic/fixtures/simple/with-options.svg create mode 100644 packages/mermaid-isomorphic/fixtures/title/browser.svg create mode 100644 packages/mermaid-isomorphic/fixtures/title/custom-font-iterable.svg create mode 100644 packages/mermaid-isomorphic/fixtures/title/custom-font.svg create mode 100644 packages/mermaid-isomorphic/fixtures/title/expected.png create mode 100644 packages/mermaid-isomorphic/fixtures/title/expected.svg create mode 100644 packages/mermaid-isomorphic/fixtures/title/firefox.svg create mode 100644 packages/mermaid-isomorphic/fixtures/title/input.mmd create mode 100644 packages/mermaid-isomorphic/fixtures/title/webkit.svg create mode 100644 packages/mermaid-isomorphic/fixtures/title/with-options.svg create mode 100644 packages/mermaid-isomorphic/index.html create mode 100644 packages/mermaid-isomorphic/package.json create mode 100644 packages/mermaid-isomorphic/src/browser.ts create mode 100644 packages/mermaid-isomorphic/src/mermaid-isomorphic.ts create mode 100644 packages/mermaid-isomorphic/src/test.bundle.ts create mode 100644 packages/mermaid-isomorphic/src/test.ts create mode 100644 packages/mermaid-isomorphic/tsconfig.json create mode 100644 packages/mermaid-isomorphic/turbo.json diff --git a/apps/site/next.mdx.plugins.mjs b/apps/site/next.mdx.plugins.mjs index c9c7ca4a167e5..7a28c94995dc1 100644 --- a/apps/site/next.mdx.plugins.mjs +++ b/apps/site/next.mdx.plugins.mjs @@ -17,7 +17,7 @@ import rehypeShikiji from './next.mdx.shiki.mjs'; export const REHYPE_PLUGINS = [ // Transforms Mermaid code blocks into SVGs // note: needs to be imported before rehype-shiki to prevent transforming into code-blocks - rehypeMermaid, + [rehypeMermaid, { strategy: 'inline-svg', dark: true }], // Generates `id` attributes for headings (H1, ...) rehypeSlug, // Automatically add anchor links to headings (H1, ...) diff --git a/apps/site/package.json b/apps/site/package.json index 71170effe9c55..e0978e7f9a6fb 100644 --- a/apps/site/package.json +++ b/apps/site/package.json @@ -113,5 +113,12 @@ "typescript": "~5.7.2", "typescript-eslint": "~8.25.0", "user-agent-data-types": "0.4.2" + }, + "overrides": { + "rehype-mermaid": { + "dependencies": { + "mermaid-isomorphic": "*" + } + } } } diff --git a/package-lock.json b/package-lock.json index 32f5c029e0736..19b21b9ee13e7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -1663,6 +1663,16 @@ "integrity": "sha512-MDWhGtE+eHw5JW7lq4qhc5yRLS11ERl1c7Z6Xd0a58DozHES6EnNNwUWbMiG4J9Cgj053Bhk8zvlhFYKVhULwg==", "license": "MIT" }, + "node_modules/@fontsource/irish-grover": { + "version": "5.2.5", + "resolved": "https://registry.npmjs.org/@fontsource/irish-grover/-/irish-grover-5.2.5.tgz", + "integrity": "sha512-dJXJkf8HDB92hg9PmRLiAQ94aONugGyXEkWK8WwZQx1Qscj16wV//BMDUe2RFqmOW5YmFDh5gSHsBXRk0hAggw==", + "dev": true, + "license": "OFL-1.1", + "funding": { + "url": "https://github.com/sponsors/ayuhito" + } + }, "node_modules/@formatjs/ecma402-abstract": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/@formatjs/ecma402-abstract/-/ecma402-abstract-2.3.3.tgz", @@ -8466,6 +8476,126 @@ "node": ">=10.16.0" } }, + "node_modules/c8": { + "version": "10.1.3", + "resolved": "https://registry.npmjs.org/c8/-/c8-10.1.3.tgz", + "integrity": "sha512-LvcyrOAaOnrrlMpW22n690PUvxiq4Uf9WMhQwNJ9vgagkL/ph1+D4uvjvDA5XCbykrc0sx+ay6pVi9YZ1GnhyA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@bcoe/v8-coverage": "^1.0.1", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^3.1.1", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.1", + "istanbul-reports": "^3.1.6", + "test-exclude": "^7.0.1", + "v8-to-istanbul": "^9.0.0", + "yargs": "^17.7.2", + "yargs-parser": "^21.1.1" + }, + "bin": { + "c8": "bin/c8.js" + }, + "engines": { + "node": ">=18" + }, + "peerDependencies": { + "monocart-coverage-reports": "^2" + }, + "peerDependenciesMeta": { + "monocart-coverage-reports": { + "optional": true + } + } + }, + "node_modules/c8/node_modules/@bcoe/v8-coverage": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@bcoe/v8-coverage/-/v8-coverage-1.0.2.tgz", + "integrity": "sha512-6zABk/ECA/QYSCQ1NGiVwwbQerUCZ+TQbp64Q3AgmfNvurHH0j8TtXa1qbShXA6qqkpAj4V5W8pP6mLe1mcMqA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + } + }, + "node_modules/c8/node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "license": "ISC", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/c8/node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/c8/node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/c8/node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "license": "BlueOak-1.0.0", + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/c8/node_modules/test-exclude": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/test-exclude/-/test-exclude-7.0.1.tgz", + "integrity": "sha512-pFYqmTw68LXVjeWJMST4+borgQP2AyMNbg1BpZh9LbyhUeNkeaPF9gzfPGUAnSMV3qPYdWUwDIjjCLiSDOl7vg==", + "dev": true, + "license": "ISC", + "dependencies": { + "@istanbuljs/schema": "^0.1.2", + "glob": "^10.4.1", + "minimatch": "^9.0.4" + }, + "engines": { + "node": ">=18" + } + }, "node_modules/cacheable": { "version": "1.8.8", "resolved": "https://registry.npmjs.org/cacheable/-/cacheable-1.8.8.tgz", @@ -18937,25 +19067,8 @@ } }, "node_modules/mermaid-isomorphic": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mermaid-isomorphic/-/mermaid-isomorphic-3.0.0.tgz", - "integrity": "sha512-6RBUQD0ZWzBHO4KZ8JMK3a/lNL7383N6K4nXzOdA2Ylnhz34qC8Nls2ZgOJVjGuB9Iq1bP61XKE0K/fNOD2n6g==", - "license": "MIT", - "dependencies": { - "@fortawesome/fontawesome-free": "^6.0.0", - "mermaid": "^11.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/remcohaszing" - }, - "peerDependencies": { - "playwright": "1" - }, - "peerDependenciesMeta": { - "playwright": { - "optional": true - } - } + "resolved": "packages/mermaid-isomorphic", + "link": true }, "node_modules/mermaid/node_modules/uuid": { "version": "9.0.1", @@ -24244,6 +24357,60 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/snapshot-fixtures": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/snapshot-fixtures/-/snapshot-fixtures-1.2.0.tgz", + "integrity": "sha512-+JH/QfYxlFCD64/ifTAk39dHFzv+cHHeu+U1ocyBNcYhgTath5CFHH8m6yW7I27xODKQc8gIDQbsl8HwRnyWRg==", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^5.0.0", + "ci-info": "^4.0.0", + "diff": "^5.0.0", + "to-vfile": "^8.0.0", + "vfile": "^6.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/remcohaszing" + }, + "peerDependencies": { + "prettier": ">=3" + }, + "peerDependenciesMeta": { + "prettier": { + "optional": true + } + } + }, + "node_modules/snapshot-fixtures/node_modules/chalk": { + "version": "5.4.1", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.4.1.tgz", + "integrity": "sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/snapshot-fixtures/node_modules/ci-info": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.2.0.tgz", + "integrity": "sha512-cYY9mypksY8NRqgDB1XD1RiJL338v/551niynFTGkZOO2LHuB2OmOYxDIe/ttN9AHwrqdum1360G3ald0W9kCg==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/source-map": { "version": "0.7.4", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.4.tgz", @@ -25736,6 +25903,20 @@ "node": ">=8.0" } }, + "node_modules/to-vfile": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/to-vfile/-/to-vfile-8.0.0.tgz", + "integrity": "sha512-IcmH1xB5576MJc9qcfEC/m/nQCFt3fzMHz45sSlgJyTWjRbKW1HAkJpuf3DgE57YzIlZcwcBZA5ENQbBo4aLkg==", + "dev": true, + "license": "MIT", + "dependencies": { + "vfile": "^6.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/unified" + } + }, "node_modules/tough-cookie": { "version": "4.1.4", "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-4.1.4.tgz", @@ -27936,6 +28117,516 @@ "eslint": "^8.57.0 || ^9.0.0", "typescript": ">=4.8.4 <5.8.0" } + }, + "packages/mermaid-isomorphic": { + "version": "3.0.0", + "license": "MIT", + "dependencies": { + "@fortawesome/fontawesome-free": "^6.0.0", + "mermaid": "^11.0.0" + }, + "devDependencies": { + "@fontsource/irish-grover": "^5.0.0", + "@types/node": "^22.0.0", + "c8": "^10.0.0", + "esbuild": "^0.24.0", + "eslint-import-resolver-typescript": "~3.8.3", + "playwright": "^1.0.0", + "snapshot-fixtures": "^1.0.0", + "typescript": "5.8.2", + "typescript-eslint": "~8.25.0" + }, + "funding": { + "url": "https://github.com/sponsors/remcohaszing" + }, + "peerDependencies": { + "playwright": "1" + }, + "peerDependenciesMeta": { + "playwright": { + "optional": true + } + } + }, + "packages/mermaid-isomorphic/node_modules/@esbuild/aix-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", + "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "packages/mermaid-isomorphic/node_modules/@esbuild/android-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", + "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/mermaid-isomorphic/node_modules/@esbuild/android-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", + "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/mermaid-isomorphic/node_modules/@esbuild/android-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", + "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "packages/mermaid-isomorphic/node_modules/@esbuild/darwin-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", + "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/mermaid-isomorphic/node_modules/@esbuild/darwin-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", + "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "packages/mermaid-isomorphic/node_modules/@esbuild/freebsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", + "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/mermaid-isomorphic/node_modules/@esbuild/freebsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", + "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/mermaid-isomorphic/node_modules/@esbuild/linux-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", + "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/mermaid-isomorphic/node_modules/@esbuild/linux-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", + "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/mermaid-isomorphic/node_modules/@esbuild/linux-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", + "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/mermaid-isomorphic/node_modules/@esbuild/linux-loong64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", + "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/mermaid-isomorphic/node_modules/@esbuild/linux-mips64el": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", + "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/mermaid-isomorphic/node_modules/@esbuild/linux-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", + "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/mermaid-isomorphic/node_modules/@esbuild/linux-riscv64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", + "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/mermaid-isomorphic/node_modules/@esbuild/linux-s390x": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", + "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/mermaid-isomorphic/node_modules/@esbuild/linux-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", + "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "packages/mermaid-isomorphic/node_modules/@esbuild/netbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", + "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/mermaid-isomorphic/node_modules/@esbuild/netbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", + "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/mermaid-isomorphic/node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", + "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/mermaid-isomorphic/node_modules/@esbuild/openbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", + "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "packages/mermaid-isomorphic/node_modules/@esbuild/sunos-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", + "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "packages/mermaid-isomorphic/node_modules/@esbuild/win32-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", + "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/mermaid-isomorphic/node_modules/@esbuild/win32-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", + "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/mermaid-isomorphic/node_modules/@esbuild/win32-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", + "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "packages/mermaid-isomorphic/node_modules/esbuild": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", + "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.24.2", + "@esbuild/android-arm": "0.24.2", + "@esbuild/android-arm64": "0.24.2", + "@esbuild/android-x64": "0.24.2", + "@esbuild/darwin-arm64": "0.24.2", + "@esbuild/darwin-x64": "0.24.2", + "@esbuild/freebsd-arm64": "0.24.2", + "@esbuild/freebsd-x64": "0.24.2", + "@esbuild/linux-arm": "0.24.2", + "@esbuild/linux-arm64": "0.24.2", + "@esbuild/linux-ia32": "0.24.2", + "@esbuild/linux-loong64": "0.24.2", + "@esbuild/linux-mips64el": "0.24.2", + "@esbuild/linux-ppc64": "0.24.2", + "@esbuild/linux-riscv64": "0.24.2", + "@esbuild/linux-s390x": "0.24.2", + "@esbuild/linux-x64": "0.24.2", + "@esbuild/netbsd-arm64": "0.24.2", + "@esbuild/netbsd-x64": "0.24.2", + "@esbuild/openbsd-arm64": "0.24.2", + "@esbuild/openbsd-x64": "0.24.2", + "@esbuild/sunos-x64": "0.24.2", + "@esbuild/win32-arm64": "0.24.2", + "@esbuild/win32-ia32": "0.24.2", + "@esbuild/win32-x64": "0.24.2" + } + }, + "packages/mermaid-isomorphic/node_modules/typescript": { + "version": "5.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.8.2.tgz", + "integrity": "sha512-aJn6wq13/afZp/jT9QZmwEjDqqvSGp1VT5GVg+f/t6/oVyrgXM6BY1h9BRh/O5p3PlUPAe+WuiEZOmb/49RqoQ==", + "dev": true, + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } } } } diff --git a/package.json b/package.json index 9eb1905513cf8..51c2e580cc9c0 100644 --- a/package.json +++ b/package.json @@ -22,6 +22,7 @@ "scripts": { "dev": "turbo run dev", "build": "turbo run build", + "storybook": "turbo run storybook", "storybook:build": "turbo run storybook:build", "start": "turbo run start", "check-types": "turbo check-types", diff --git a/packages/mermaid-isomorphic/LICENSE.md b/packages/mermaid-isomorphic/LICENSE.md new file mode 100644 index 0000000000000..c1e045d6ee431 --- /dev/null +++ b/packages/mermaid-isomorphic/LICENSE.md @@ -0,0 +1,18 @@ +# MIT License + +Copyright © 2023 Remco Haszing + +Permission is hereby granted, free of charge, to any person obtaining a copy of this software and +associated documentation files (the “Software”), to deal in the Software without restriction, +including without limitation the rights to use, copy, modify, merge, publish, distribute, +sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all copies or substantial +portions of the Software. + +THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT +NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND +NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES +OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN +CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/packages/mermaid-isomorphic/eslint.config.js b/packages/mermaid-isomorphic/eslint.config.js new file mode 100644 index 0000000000000..7c8bb485443ab --- /dev/null +++ b/packages/mermaid-isomorphic/eslint.config.js @@ -0,0 +1,19 @@ +import importX from 'eslint-plugin-import-x'; +import tseslint from 'typescript-eslint'; + +// eslint-disable-next-line no-relative-import-paths/no-relative-import-paths +import baseConfig from '../../eslint.config.js'; + +export default [ + ...baseConfig, + ...tseslint.configs.recommended, + importX.flatConfigs.typescript, + { + ignores: ['dist'], + }, + { + rules: { + '@typescript-eslint/consistent-type-imports': 'error', + }, + }, +]; diff --git a/packages/mermaid-isomorphic/fixtures/accessibility/browser.svg b/packages/mermaid-isomorphic/fixtures/accessibility/browser.svg new file mode 100644 index 0000000000000..63cbb60931962 --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/accessibility/browser.svg @@ -0,0 +1,10 @@ + +Big DecisionsBob's Burgers process for making big decisions

Identify Big Descision

Make Big Decision

Be done

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/accessibility/custom-font-iterable.svg b/packages/mermaid-isomorphic/fixtures/accessibility/custom-font-iterable.svg new file mode 100644 index 0000000000000..2c628ad6b76e9 --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/accessibility/custom-font-iterable.svg @@ -0,0 +1,10 @@ + +Big DecisionsBob's Burgers process for making big decisions

Identify Big Descision

Make Big Decision

Be done

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/accessibility/custom-font.svg b/packages/mermaid-isomorphic/fixtures/accessibility/custom-font.svg new file mode 100644 index 0000000000000..2c628ad6b76e9 --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/accessibility/custom-font.svg @@ -0,0 +1,10 @@ + +Big DecisionsBob's Burgers process for making big decisions

Identify Big Descision

Make Big Decision

Be done

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/accessibility/expected.png b/packages/mermaid-isomorphic/fixtures/accessibility/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..3e1a87b4796843e3f74c3b98628451bffd6490aa GIT binary patch literal 10388 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 DS#R|R literal 0 HcmV?d00001 diff --git a/packages/mermaid-isomorphic/fixtures/accessibility/expected.svg b/packages/mermaid-isomorphic/fixtures/accessibility/expected.svg new file mode 100644 index 0000000000000..63cbb60931962 --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/accessibility/expected.svg @@ -0,0 +1,10 @@ + +Big DecisionsBob's Burgers process for making big decisions

Identify Big Descision

Make Big Decision

Be done

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/accessibility/firefox.svg b/packages/mermaid-isomorphic/fixtures/accessibility/firefox.svg new file mode 100644 index 0000000000000..676e99d1bf2dc --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/accessibility/firefox.svg @@ -0,0 +1,10 @@ + +Big DecisionsBob's Burgers process for making big decisions

Identify Big Descision

Make Big Decision

Be done

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/accessibility/input.mmd b/packages/mermaid-isomorphic/fixtures/accessibility/input.mmd new file mode 100644 index 0000000000000..b4f450f0ffd1a --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/accessibility/input.mmd @@ -0,0 +1,5 @@ + graph LR + accTitle: Big Decisions + accDescr: Bob's Burgers process for making big decisions + A[Identify Big Descision] --> B{Make Big Decision} + B --> D[Be done] diff --git a/packages/mermaid-isomorphic/fixtures/accessibility/webkit.svg b/packages/mermaid-isomorphic/fixtures/accessibility/webkit.svg new file mode 100644 index 0000000000000..ea25671fe5827 --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/accessibility/webkit.svg @@ -0,0 +1,10 @@ + +Big DecisionsBob's Burgers process for making big decisions

Identify Big Descision

Make Big Decision

Be done

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/accessibility/with-options.svg b/packages/mermaid-isomorphic/fixtures/accessibility/with-options.svg new file mode 100644 index 0000000000000..47582e21f2a92 --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/accessibility/with-options.svg @@ -0,0 +1,10 @@ + +Big DecisionsBob's Burgers process for making big decisions

Identify Big Descision

Make Big Decision

Be done

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/fontawesome/browser.svg b/packages/mermaid-isomorphic/fixtures/fontawesome/browser.svg new file mode 100644 index 0000000000000..d2841e8cf43e3 --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/fontawesome/browser.svg @@ -0,0 +1,8 @@ + +

for peace

forbidden

A perhaps?

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/fontawesome/custom-font-iterable.svg b/packages/mermaid-isomorphic/fixtures/fontawesome/custom-font-iterable.svg new file mode 100644 index 0000000000000..7d39246c8588e --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/fontawesome/custom-font-iterable.svg @@ -0,0 +1,8 @@ + +

for peace

forbidden

A perhaps?

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/fontawesome/custom-font.svg b/packages/mermaid-isomorphic/fixtures/fontawesome/custom-font.svg new file mode 100644 index 0000000000000..7d39246c8588e --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/fontawesome/custom-font.svg @@ -0,0 +1,8 @@ + +

for peace

forbidden

A perhaps?

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/fontawesome/expected.png b/packages/mermaid-isomorphic/fixtures/fontawesome/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..6d7892432064a958b44120fdb68b9d8b42474407 GIT binary patch literal 11002 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 HnuYuqF9#NK literal 0 HcmV?d00001 diff --git a/packages/mermaid-isomorphic/fixtures/fontawesome/expected.svg b/packages/mermaid-isomorphic/fixtures/fontawesome/expected.svg new file mode 100644 index 0000000000000..231da3b338e3c --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/fontawesome/expected.svg @@ -0,0 +1,8 @@ + +

for peace

forbidden

A perhaps?

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/fontawesome/firefox.svg b/packages/mermaid-isomorphic/fixtures/fontawesome/firefox.svg new file mode 100644 index 0000000000000..0ada030625ef0 --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/fontawesome/firefox.svg @@ -0,0 +1,8 @@ + +

for peace

forbidden

A perhaps?

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/fontawesome/input.mmd b/packages/mermaid-isomorphic/fixtures/fontawesome/input.mmd new file mode 100644 index 0000000000000..cb84848273621 --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/fontawesome/input.mmd @@ -0,0 +1,5 @@ +flowchart TD + B["fab:fa-twitter for peace"] + B-->C[fa:fa-ban forbidden] + B-->D(fa:fa-spinner) + B-->E(A fa:fa-camera-retro perhaps?) diff --git a/packages/mermaid-isomorphic/fixtures/fontawesome/webkit.svg b/packages/mermaid-isomorphic/fixtures/fontawesome/webkit.svg new file mode 100644 index 0000000000000..267be58580d17 --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/fontawesome/webkit.svg @@ -0,0 +1,8 @@ + +

for peace

forbidden

A perhaps?

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/fontawesome/with-options.svg b/packages/mermaid-isomorphic/fixtures/fontawesome/with-options.svg new file mode 100644 index 0000000000000..699b3eb63ff4a --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/fontawesome/with-options.svg @@ -0,0 +1,8 @@ + +

for peace

forbidden

A perhaps?

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/self-closing/browser.svg b/packages/mermaid-isomorphic/fixtures/self-closing/browser.svg new file mode 100644 index 0000000000000..1ed9c18a65e6c --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/self-closing/browser.svg @@ -0,0 +1,8 @@ + +

1


2

2


4

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/self-closing/custom-font-iterable.svg b/packages/mermaid-isomorphic/fixtures/self-closing/custom-font-iterable.svg new file mode 100644 index 0000000000000..846a40d03617a --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/self-closing/custom-font-iterable.svg @@ -0,0 +1,8 @@ + +

1


2

2


4

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/self-closing/custom-font.svg b/packages/mermaid-isomorphic/fixtures/self-closing/custom-font.svg new file mode 100644 index 0000000000000..846a40d03617a --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/self-closing/custom-font.svg @@ -0,0 +1,8 @@ + +

1


2

2


4

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/self-closing/expected.png b/packages/mermaid-isomorphic/fixtures/self-closing/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..6c86066b84c458f4e5970449de7c776d04b991dc GIT binary patch literal 1978 zcmb7_c`)0H7RP^{CHAFgV=3j;QbePwm)3S8wn_zUxV6So6tRUMw);dw393^1LM$!X z3Tod8wN+_zwMCU$tDYs660z3v{(0|@cc(M=%$#%P%$)iDab`Z}d*8;|T!>$q9{>O$ zOAEN&Ngq1NU|yb+YNu9kc+xnqcIGgk@}2Aw0D!_Q;lJLB%wv9uM|@;)_HT|YY9Pr) zgM$eADKK%W`~l&!pC?vHVi0=eVgl|_PWRi_HKU`CYvt!@a6N_a>zE2O1kzq(6_cTh?vc4$*tXWIfVG7_qT{BetM_>#ewsfXV@o1VUIIFep%Q4?FS zejxB;<27S?*UhHgv!#4gYP>mu5&mK-pA=?IM*qM?4-19JJX-De zaVRn(KBo+cguu8V$A}BoUL?@qzf))7$i57qRD# z{=nX*jgCi2fP`1=3ebJq_+3J_S|l+w0apGZV08z zufy(?$Vf^eU*wyFcu?HQISxxQ){QPC$Iv2^^+^yXKX>reHs94p zT3|bmu*-=pEjhC+T=!C#dpFSs4R(wd=0`(|-{c#xHt?;pI3s~)H*?3}87W;huUPB? zSoDF9g;j2vjjHZ~c43CT-F-dm`$x>w^LG=P!=~-o2Tc+#LF*2kyIT+lV*rQ z&<`k7y%-85gJKlw1~-?@hN5WsA*k(mvT3mxkIDIebctG`q3}~+!A!0{A1x>^mHr;Z z&CSgTOEv`7cUY|0ay(LP27=%hhYf*j1ZUnJ9vaN-Ox)MU(?OI zopNc#7-*6RU3@dN^-KD~;QEbE`Bq$s!|MlgMF|NB_l|Y*cxK-Ff0`1UX|xRT=7d5Q zV)<;nz{JH%@d)ML-IS^RV4{LDHHTy7uz2f-C%A8Xa~c^(zdcW1+rKl@!-`T(|8XW= zn;tJpr53>T`)7k^vYoz*H&~kWpf#$DM;iUdnYd5Po#aJQno@vuSv85T=qsUQ#Lv{# zRW39%R5AbAN;r)P8T!7!_S?(w?i5u&oh>^a@!Xrf3>nsyO=o5aQzc>BjvCqQ+CU8r z(1VSj(gGcS;cQLF$L}p^_ZqrvoT*xZ^Zp7wU0Eu~IDP;*ofJCq^r0BR62nP!k4zMm zr|O0zh-}aQ-c?-H(a|A;3bN3Nk^3ogmg1zllrk03r6a`g#)g|OCKlx4!URi8C%$a} zL=2mRtrxQ%>tRcmqa;)o83)xN^LUBVQ-m{aF{Z4%47 z+J=aMm=5fG^<>89&u3L3kp7jI>t?u}OLg^UVY;&R2AOl6^LoU}O5BLHM=1tcDrFWG zrS#^FnzAfoV1OGSk(_PnNOO0BgMn6DJI}K%zMkm2K@re%=Mm&>2N!taQ@vj0ciA&Y_Ix7ni@rV8A;6% zRO^E@XqyUb`oeg%gxD3x`$MM&yJ(o${Zu^N;J8iZfd*=#U@v9*Gq7`kia3*Uj=eq0&aS`hPxH zLU#7I3pp=uZ;29$5rj=!9S&ny5``xV8D_&xT(^sW~^o{~N_=#~gh-Z0)4ZXyS<( N1D2-N@Jbju;oo^oplSdB literal 0 HcmV?d00001 diff --git a/packages/mermaid-isomorphic/fixtures/self-closing/expected.svg b/packages/mermaid-isomorphic/fixtures/self-closing/expected.svg new file mode 100644 index 0000000000000..1ed9c18a65e6c --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/self-closing/expected.svg @@ -0,0 +1,8 @@ + +

1


2

2


4

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/self-closing/firefox.svg b/packages/mermaid-isomorphic/fixtures/self-closing/firefox.svg new file mode 100644 index 0000000000000..3d7dfc96df070 --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/self-closing/firefox.svg @@ -0,0 +1,8 @@ + +

1


2

2


4

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/self-closing/input.mmd b/packages/mermaid-isomorphic/fixtures/self-closing/input.mmd new file mode 100644 index 0000000000000..6fc9341f71f29 --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/self-closing/input.mmd @@ -0,0 +1,2 @@ +graph LR + A[1


2]-->B[2
4] diff --git a/packages/mermaid-isomorphic/fixtures/self-closing/webkit.svg b/packages/mermaid-isomorphic/fixtures/self-closing/webkit.svg new file mode 100644 index 0000000000000..f9f282fa40508 --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/self-closing/webkit.svg @@ -0,0 +1,8 @@ + +

1


2

2


4

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/self-closing/with-options.svg b/packages/mermaid-isomorphic/fixtures/self-closing/with-options.svg new file mode 100644 index 0000000000000..fc45e58a125d9 --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/self-closing/with-options.svg @@ -0,0 +1,8 @@ + +

1


2

2


4

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/simple/browser.svg b/packages/mermaid-isomorphic/fixtures/simple/browser.svg new file mode 100644 index 0000000000000..d7457f954f6b2 --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/simple/browser.svg @@ -0,0 +1,8 @@ + +

A

B

C

D

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/simple/custom-font-iterable.svg b/packages/mermaid-isomorphic/fixtures/simple/custom-font-iterable.svg new file mode 100644 index 0000000000000..aba5d36b65f18 --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/simple/custom-font-iterable.svg @@ -0,0 +1,8 @@ + +

A

B

C

D

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/simple/custom-font.svg b/packages/mermaid-isomorphic/fixtures/simple/custom-font.svg new file mode 100644 index 0000000000000..aba5d36b65f18 --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/simple/custom-font.svg @@ -0,0 +1,8 @@ + +

A

B

C

D

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/simple/expected.png b/packages/mermaid-isomorphic/fixtures/simple/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..29d69594fc7d5effb9533055c756ece23b164eca GIT binary patch literal 5547 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 JS&MLw|8It|a>oDw literal 0 HcmV?d00001 diff --git a/packages/mermaid-isomorphic/fixtures/simple/expected.svg b/packages/mermaid-isomorphic/fixtures/simple/expected.svg new file mode 100644 index 0000000000000..d7457f954f6b2 --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/simple/expected.svg @@ -0,0 +1,8 @@ + +

A

B

C

D

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/simple/firefox.svg b/packages/mermaid-isomorphic/fixtures/simple/firefox.svg new file mode 100644 index 0000000000000..d1455783ddb78 --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/simple/firefox.svg @@ -0,0 +1,8 @@ + +

A

B

C

D

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/simple/input.mmd b/packages/mermaid-isomorphic/fixtures/simple/input.mmd new file mode 100644 index 0000000000000..d5bf6cb311e49 --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/simple/input.mmd @@ -0,0 +1,5 @@ +graph TD; + A-->B; + A-->C; + B-->D; + C-->D; diff --git a/packages/mermaid-isomorphic/fixtures/simple/webkit.svg b/packages/mermaid-isomorphic/fixtures/simple/webkit.svg new file mode 100644 index 0000000000000..256aba79be19d --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/simple/webkit.svg @@ -0,0 +1,8 @@ + +

A

B

C

D

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/simple/with-options.svg b/packages/mermaid-isomorphic/fixtures/simple/with-options.svg new file mode 100644 index 0000000000000..4fb9b58c4dadd --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/simple/with-options.svg @@ -0,0 +1,8 @@ + +

A

B

C

D

\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/title/browser.svg b/packages/mermaid-isomorphic/fixtures/title/browser.svg new file mode 100644 index 0000000000000..68f2bb25f9960 --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/title/browser.svg @@ -0,0 +1,8 @@ + +

id

Node
\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/title/custom-font-iterable.svg b/packages/mermaid-isomorphic/fixtures/title/custom-font-iterable.svg new file mode 100644 index 0000000000000..418414c84bc95 --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/title/custom-font-iterable.svg @@ -0,0 +1,8 @@ + +

id

Node
\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/title/custom-font.svg b/packages/mermaid-isomorphic/fixtures/title/custom-font.svg new file mode 100644 index 0000000000000..418414c84bc95 --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/title/custom-font.svg @@ -0,0 +1,8 @@ + +

id

Node
\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/title/expected.png b/packages/mermaid-isomorphic/fixtures/title/expected.png new file mode 100644 index 0000000000000000000000000000000000000000..4483c041c4d36a2e95bbf5142d29d98dde5efb2b GIT binary patch literal 1807 zcmbVNc{JOJ8jamhOX)m{@|yOAR_%KmYtxa`6I~L^C~=5wEb$O)gP3_!)YzA!MW`W7 zXoAvKkT9ktqqP(zwp1;t^@mg=LOgH&c<255-Z}TX_k90+=Y02^dv5kEq^pvGmI4R_ zQbNFCcTUvjWD@0NPdMz^#_EYk#NBaq0nvtZP8L}<0_KcLs@$AQj~q`t*T2IP(SkE9 z&&p`~LZYAg7#KYlbYEtxb*=s+9jsWvn^G$;TzgXdE+kvI4c?A*uB z7Gm!}^DKU5cwjh-=e^*aks0mRh|kOYp!=d5m~l*bz3!8zyycJ>3AnzW-4i9JJ93A4 zr2v7>ofR-;f^yB?X#Sh-)y7b4J|B)YTL%s)mQ(n)e{m-UhXV-UT~PBWP1Qn}t&Z3^G?eEE zSr2USp4i^rzD`Y%`ek6G%jb)zPYYc@pB08rB3bd+&+u}cH2o0hzX_cqxV zs0;}w*jFPAvx|0Xhx0r%-2glcazpLCbYf8*OdTB3sO{~0b;bC;zP|j%HRAxYW(?XF zw&W!|O0E`ozaR}~!(Gs+L>$(M=yr0p@|g*Kd zVa+>alQf^I7XsxeTgLh9U&mIfII5pcOg@UY0>`F)U47A2zH1zy`pQN({{ec>f^%?= z3FL$Jna4Eh*1-C%8>gQnWFCJvtC|4BF&uOJ;PXdv#7b!`|#pq9+tNkN$C5Sddk~KKa86ybE-3BU(Mw zdoX0}vCp4B<9pz@A+}1q^HSsE;~Sb5!^E}TIb5m zfq@YL-C0*;k;_f#*HxuE*1v@4VRi_|?Af2gET=84trKWuGVk6u4MLV(X)E6iaZybp zL)6MLW=Cvc1L;x2_O)T*;X>$${Gr`UH5NRMTc+tq_fC@6RbDyj=3}6JQBhGxP1LU_ zH2TOPG5J!-VbcH~DuX;=rt>YMt`S`;l6<&hb8|=9e_cxUmuq%``AhoWn$RY)ZQ8zN z0*R8f@Qb?cOVJt+p4@;;(jJhgs*quXOGgWI-22X$Yx?q9K4hHZ^4%u{GOa^Gj}SSLx0ApG~}M zaPwXBFtAw~h2ee06E8j#YTsBQF#(ouD^dGDf&Meq|3&;>)b_y=>4hL#NnW88bya^7 z6Gm=z5=4=~PB;cgi5(5gXDx-*)A>R)Er zqRViOgc0un<^L6^$brShpeFxw!CWQ@)4K9|wyq~V?>$GTPYz0@U$({;s=Ae1KM&}A zVB*`j_UXcyq1Tq^H@`c!Iw69s&_Vm$Cr_seEGkZIZfbkC|6mj``9{JvVZ)?r{}Vqx z{;)83FnZyGFV0Y48v1LXiUw6e-=iT(wCM~w5OJ}CWw^MNw}|O!-4OAi%m(Lq=WJhP zVa{AJ-(E0l0w=pB9jtO&Vita%n|_JozFp{hVB8tqf!?UD1jZ?63_Y8=G);RRS*`zZ zwV{FmaT&szf7$DHj@legJ><#yvuW7{eG8_O7|h`I_DIR{YCJo7-VZei8vwbxlb$p- z2Hk9?GpGGNn7tdfQr~6Z1qI0bW`YQkr|0-b?~f)ei9r6KebZUWeu4h6$o=kJ#m6>4 z4IRKicj4L|_ItL8^T~peM>o+e>A#`TX#VctT@|^Osmp;a=u^t#Dj`3DLaToLqe>b% zGN_W0qtsErVC0vi$^(ekddBlASFm#b2aH8$NuYjZ)?$d|4bMwnMjEH=q^INdt1=UF ls4=C4XBmI?1_gC2BX{*;81Lfk;YXf6Sn{{jOlhhqQ$ literal 0 HcmV?d00001 diff --git a/packages/mermaid-isomorphic/fixtures/title/expected.svg b/packages/mermaid-isomorphic/fixtures/title/expected.svg new file mode 100644 index 0000000000000..68f2bb25f9960 --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/title/expected.svg @@ -0,0 +1,8 @@ + +

id

Node
\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/title/firefox.svg b/packages/mermaid-isomorphic/fixtures/title/firefox.svg new file mode 100644 index 0000000000000..d39bc307d3838 --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/title/firefox.svg @@ -0,0 +1,8 @@ + +

id

Node
\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/title/input.mmd b/packages/mermaid-isomorphic/fixtures/title/input.mmd new file mode 100644 index 0000000000000..2ff12a3d9093a --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/title/input.mmd @@ -0,0 +1,5 @@ +--- +title: Node +--- +flowchart LR + id diff --git a/packages/mermaid-isomorphic/fixtures/title/webkit.svg b/packages/mermaid-isomorphic/fixtures/title/webkit.svg new file mode 100644 index 0000000000000..3f191e007d5a4 --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/title/webkit.svg @@ -0,0 +1,8 @@ + +

id

Node
\ No newline at end of file diff --git a/packages/mermaid-isomorphic/fixtures/title/with-options.svg b/packages/mermaid-isomorphic/fixtures/title/with-options.svg new file mode 100644 index 0000000000000..5698621ccf05b --- /dev/null +++ b/packages/mermaid-isomorphic/fixtures/title/with-options.svg @@ -0,0 +1,8 @@ + +

id

Node
\ No newline at end of file diff --git a/packages/mermaid-isomorphic/index.html b/packages/mermaid-isomorphic/index.html new file mode 100644 index 0000000000000..99a74f355942f --- /dev/null +++ b/packages/mermaid-isomorphic/index.html @@ -0,0 +1,7 @@ + + + + + + + diff --git a/packages/mermaid-isomorphic/package.json b/packages/mermaid-isomorphic/package.json new file mode 100644 index 0000000000000..e1c1eb8251a86 --- /dev/null +++ b/packages/mermaid-isomorphic/package.json @@ -0,0 +1,62 @@ +{ + "name": "mermaid-isomorphic", + "version": "3.0.0", + "description": "Transform mermaid diagrams in the browser or Node.js", + "keywords": [ + "browser", + "isomorphic", + "mermaid", + "mermaidjs", + "node", + "nodejs" + ], + "homepage": "https://github.com/remcohaszing/mermaid-isomorphic#readme", + "bugs": "https://github.com/remcohaszing/mermaid-isomorphic/issues", + "repository": "remcohaszing/mermaid-isomorphic", + "funding": "https://github.com/sponsors/remcohaszing", + "license": "MIT", + "author": "Remco Haszing ", + "sideEffects": false, + "type": "module", + "main": "./dist/mermaid-isomorphic.js", + "exports": { + "browser": "./dist/browser.js", + "default": "./dist/mermaid-isomorphic.js" + }, + "files": [ + "index.html", + "src", + "dist", + "!test*" + ], + "scripts": { + "prepack": "tsc", + "pretest": "tsc", + "test": "c8 node --enable-source-maps --test", + "check-types": "tsc --noEmit", + "lint:js": "eslint \"**/*.{js,mjs,ts}\"" + }, + "dependencies": { + "@fortawesome/fontawesome-free": "^6.0.0", + "mermaid": "^11.0.0" + }, + "peerDependencies": { + "playwright": "1" + }, + "devDependencies": { + "@fontsource/irish-grover": "^5.0.0", + "@types/node": "^22.0.0", + "c8": "^10.0.0", + "esbuild": "^0.24.0", + "eslint-import-resolver-typescript": "~3.8.3", + "playwright": "^1.0.0", + "snapshot-fixtures": "^1.0.0", + "typescript": "5.8.2", + "typescript-eslint": "~8.25.0" + }, + "peerDependenciesMeta": { + "playwright": { + "optional": true + } + } +} diff --git a/packages/mermaid-isomorphic/src/browser.ts b/packages/mermaid-isomorphic/src/browser.ts new file mode 100644 index 0000000000000..69f124afa0a09 --- /dev/null +++ b/packages/mermaid-isomorphic/src/browser.ts @@ -0,0 +1,72 @@ +import mermaid from 'mermaid'; + +import { + type MermaidRenderer, + type createMermaidRenderer as nodeImplementation, + type RenderResult, +} from './mermaid-isomorphic.js'; + +const parser = new DOMParser(); +const serializer = new XMLSerializer(); + +/** + * Get an aria value form a referencing attribute. + * + * @param element + * The SVG element the get the value from. + * @param attribute + * The attribute whose value to get. + * @returns + * The aria value. + */ +function getAriaValue( + element: SVGSVGElement, + attribute: string +): string | undefined { + const value = element.getAttribute(attribute); + if (!value) { + return; + } + + let result = ''; + for (const id of value.split(/\s+/)) { + const node = element.getElementById(id); + if (node) { + result += node.textContent; + } + } + return result; +} + +const renderer: MermaidRenderer = (diagrams, options) => + Promise.allSettled( + diagrams.map(async (diagram, index) => { + const id = `${options?.prefix ?? 'mermaid'}-${index}`; + + const { svg } = await mermaid.render(id, diagram); + const root = parser.parseFromString(svg, 'text/html'); + const [element] = root.getElementsByTagName('svg'); + const { height, width } = element.viewBox.baseVal; + const description = getAriaValue(element, 'aria-describedby'); + const title = getAriaValue(element, 'aria-labelledby'); + + const result: RenderResult = { + height, + id, + svg: serializer.serializeToString(element), + width, + }; + + if (description) { + result.description = description; + } + + if (title) { + result.title = title; + } + + return result; + }) + ); + +export const createMermaidRenderer: typeof nodeImplementation = () => renderer; diff --git a/packages/mermaid-isomorphic/src/mermaid-isomorphic.ts b/packages/mermaid-isomorphic/src/mermaid-isomorphic.ts new file mode 100644 index 0000000000000..56cfec50b47b3 --- /dev/null +++ b/packages/mermaid-isomorphic/src/mermaid-isomorphic.ts @@ -0,0 +1,375 @@ +import { createRequire } from 'node:module'; +import { dirname, join } from 'node:path'; +import { fileURLToPath, pathToFileURL } from 'node:url'; + +import { type Mermaid, type MermaidConfig } from 'mermaid'; +import { + type BrowserType, + chromium, + type LaunchOptions, + type Page, +} from 'playwright'; + +declare const mermaid: Mermaid; + +/** + * NOTE: `import.meta.resolve` is not available in Webpack/turbopack/swc context. + * So we use pure Node.js APIs to resolve the paths. + * But `import.meta.url` is still available in the Webpack/turbopack/swc context. + */ + +const require = createRequire(import.meta.url); + +const __filename = fileURLToPath(import.meta.url); +const __dirname = dirname(__filename); + +const html = pathToFileURL(join(__dirname, '../index.html')).href; +const mermaidScript = { + url: pathToFileURL(require.resolve('mermaid/dist/mermaid.js')).href, +}; +const faStyle = { + url: pathToFileURL( + require.resolve('@fortawesome/fontawesome-free/css/all.css') + ).href, +}; + +export interface CreateMermaidRendererOptions { + /** + * The Playwright browser to use. + * + * @default chromium + */ + browserType?: BrowserType; + + /** + * The options used to launch the browser. + */ + launchOptions?: LaunchOptions; +} + +export interface RenderResult { + /** + * The aria description of the diagram. + */ + description?: string; + + /** + * The height of the resulting SVG. + */ + height: number; + + /** + * The DOM id of the SVG node. + */ + id: string; + + /** + * The diagram SVG rendered as a PNG buffer. + */ + screenshot?: Buffer; + + /** + * The diagram rendered as an SVG. + */ + svg: string; + + /** + * The title of the rendered diagram. + */ + title?: string; + + /** + * The width of the resulting SVG. + */ + width: number; +} + +export interface RenderOptions { + /** + * A URL that points to a custom CSS file to load. + * + * Use this to load custom fonts. + * + * This option is ignored in the browser. You need to include the CSS in your build manually. + */ + css?: Iterable | URL | string | undefined; + + /** + * If true, a PNG screenshot of the diagram will be added. + * + * This is only supported in the Node.js. + */ + screenshot?: boolean; + + /** + * The mermaid configuration. + * + * By default `fontFamily` is set to `arial,sans-serif`. + * + * This option is ignored in the browser. You need to call `mermaid.initialize()` manually. + */ + mermaidConfig?: MermaidConfig; + + /** + * The prefix of the id. + * + * @default 'mermaid' + */ + prefix?: string | undefined; +} + +/** + * Render Mermaid diagrams in the browser. + * + * @param diagrams + * The Mermaid diagrams to render. + * @param options + * Additional options to use when rendering the diagrams. + * @returns + * A list of settled promises that contains the rendered Mermaid diagram. Each result matches the + * same index of the input diagrams. + */ +export type MermaidRenderer = ( + diagrams: string[], + options?: RenderOptions +) => Promise[]>; + +interface RenderDiagramsOptions + extends Required< + Pick + > { + /** + * The diagrams to process. + */ + diagrams: string[]; +} + +/* c8 ignore start */ +/** + * Render mermaid diagrams in the browser. + * + * @param options + * The options used to render the diagrams + * @returns + * A settled promise that holds the rendering results. + */ +async function renderDiagrams({ + diagrams, + mermaidConfig, + prefix, + screenshot, +}: RenderDiagramsOptions): Promise[]> { + await Promise.all(Array.from(document.fonts, font => font.load())); + const parser = new DOMParser(); + const serializer = new XMLSerializer(); + + mermaid.initialize(mermaidConfig); + + /** + * Get an aria value form a referencing attribute. + * + * @param element + * The SVG element the get the value from. + * @param attribute + * The attribute whose value to get. + * @returns + * The aria value. + */ + function getAriaValue( + element: SVGSVGElement, + attribute: string + ): string | undefined { + const value = element.getAttribute(attribute); + if (!value) { + return; + } + + let result = ''; + for (const id of value.split(/\s+/)) { + const node = element.getElementById(id); + if (node) { + result += node.textContent; + } + } + return result; + } + + return Promise.allSettled( + diagrams.map(async (diagram, index) => { + const id = `${prefix}-${index}`; + + try { + const { svg } = await mermaid.render(id, diagram); + const root = parser.parseFromString(svg, 'text/html'); + const [element] = root.getElementsByTagName('svg'); + const { height, width } = element.viewBox.baseVal; + const description = getAriaValue(element, 'aria-describedby'); + const title = getAriaValue(element, 'aria-labelledby'); + + if (screenshot) { + document.body.append(element); + } + + const result: RenderResult = { + height, + id, + svg: serializer.serializeToString(element), + width, + }; + + if (description) { + result.description = description; + } + + if (title) { + result.title = title; + } + + return result; + } catch (error) { + throw error instanceof Error + ? { name: error.name, stack: error.stack, message: error.message } + : error; + } + }) + ); +} + +/* c8 ignore stop */ + +interface SimpleContext { + /** + * Gracefully close the browser context and the browser. + */ + close: () => Promise; + + /** + * Open a new page. + */ + newPage: () => Promise; +} + +/** + * Launch a browser and a single browser context. + * + * @param browserType + * The browser type to launch. + * @param launchOptions + * Optional launch options + * @returns + * A simple browser context wrapper + */ +async function getBrowser( + browserType: BrowserType, + launchOptions: LaunchOptions | undefined +): Promise { + const browser = await browserType.launch(launchOptions); + const context = await browser.newContext({ bypassCSP: true }); + + return { + async close() { + await context.close(); + await browser.close(); + }, + + newPage() { + return context.newPage(); + }, + }; +} + +/** + * Create a Mermaid renderer. + * + * The Mermaid renderer manages a browser instance. If multiple diagrams are being rendered + * simultaneously, the internal browser instance will be re-used. If no diagrams are being rendered, + * the browser will be closed. + * + * @param options + * The options of the Mermaid renderer. + * @returns + * A function that renders Mermaid diagrams in the browser. + */ +export function createMermaidRenderer( + options: CreateMermaidRendererOptions = {} +): MermaidRenderer { + const { browserType = chromium, launchOptions } = options; + + let browserPromise: Promise | undefined; + let count = 0; + + return async (diagrams, renderOptions) => { + count += 1; + if (!browserPromise) { + browserPromise = getBrowser(browserType, launchOptions); + } + + const context = await browserPromise; + + let page: Page | undefined; + let renderResults: PromiseSettledResult[]; + + try { + page = await context.newPage(); + await page.goto(html); + const promises = [ + page.addStyleTag(faStyle), + page.addScriptTag(mermaidScript), + ]; + const css = renderOptions?.css; + if (typeof css === 'string' || css instanceof URL) { + promises.push(page.addStyleTag({ url: String(css) })); + } else if (css) { + for (const url of css) { + promises.push(page.addStyleTag({ url: String(url) })); + } + } + await Promise.all(promises); + + renderResults = await page.evaluate(renderDiagrams, { + diagrams, + screenshot: Boolean(renderOptions?.screenshot), + mermaidConfig: { + fontFamily: 'arial,sans-serif', + ...renderOptions?.mermaidConfig, + }, + prefix: renderOptions?.prefix ?? 'mermaid', + }); + if (renderOptions?.screenshot) { + for (const result of renderResults) { + if (result.status === 'fulfilled') { + result.value.screenshot = await page + .locator(`#${result.value.id}`) + .screenshot({ omitBackground: true }); + } + } + } + } finally { + await page?.close(); + count -= 1; + if (!count) { + browserPromise = undefined; + context.close(); + } + } + + for (const result of renderResults) { + if (result.status !== 'rejected') { + continue; + } + + const { reason } = result; + + if ( + reason && + 'name' in reason && + 'message' in reason && + 'stack' in reason + ) { + Object.setPrototypeOf(reason, Error.prototype); + } + } + + return renderResults; + }; +} diff --git a/packages/mermaid-isomorphic/src/test.bundle.ts b/packages/mermaid-isomorphic/src/test.bundle.ts new file mode 100644 index 0000000000000..55d26cea5e602 --- /dev/null +++ b/packages/mermaid-isomorphic/src/test.bundle.ts @@ -0,0 +1,9 @@ +import mermaid from 'mermaid'; + +import { createMermaidRenderer } from 'mermaid-isomorphic'; + +mermaid.initialize({ + fontFamily: 'arial,sans-serif', +}); + +Object.assign(globalThis, { createMermaidRenderer }); diff --git a/packages/mermaid-isomorphic/src/test.ts b/packages/mermaid-isomorphic/src/test.ts new file mode 100644 index 0000000000000..d1ad2738c9339 --- /dev/null +++ b/packages/mermaid-isomorphic/src/test.ts @@ -0,0 +1,132 @@ +import assert from 'node:assert/strict'; +import { writeFile } from 'node:fs/promises'; +import { join } from 'node:path'; +import { after, before, test } from 'node:test'; +import { fileURLToPath } from 'node:url'; + +import { build } from 'esbuild'; +import { type Browser, chromium, firefox, webkit } from 'playwright'; +import { testFixturesDirectory } from 'snapshot-fixtures'; + +import { createMermaidRenderer, type RenderResult } from 'mermaid-isomorphic'; + +const irishGrover = import.meta.resolve('@fontsource/irish-grover'); +let browser: Browser; +let content: string; + +async function testFixtureResults( + results: PromiseSettledResult[], + pngPath?: string +): Promise { + assert.equal(results.length, 1); + const [result] = results; + assert.equal(result.status, 'fulfilled'); + const { screenshot, svg, ...meta } = result.value; + if (pngPath) { + await writeFile(pngPath, screenshot!); + } + return `\n${svg}`; +} + +before(async () => { + const output = await build({ + bundle: true, + conditions: ['browser'], + entryPoints: [fileURLToPath(import.meta.resolve('./test.bundle.js'))], + format: 'iife', + write: false, + }); + assert.deepEqual(output.errors, []); + assert.deepEqual(output.warnings, []); + assert.equal(output.outputFiles.length, 1); + content = output.outputFiles[0].text; + + browser = await chromium.launch({ headless: true }); +}); + +after(async () => { + await browser?.close(); +}); + +testFixturesDirectory({ + directory: new URL('../fixtures', import.meta.url), + prettier: true, + write: true, + tests: { + async 'expected.svg'(file) { + const renderer = createMermaidRenderer(); + const results = await renderer([String(file)], { screenshot: true }); + + return testFixtureResults(results, join(file.dirname!, 'expected.png')); + }, + + async 'with-options.svg'(file) { + const renderer = createMermaidRenderer(); + const results = await renderer([String(file)], { + mermaidConfig: { theme: 'dark' }, + prefix: 'prefix', + }); + + return testFixtureResults(results); + }, + + async 'custom-font.svg'(file) { + const renderer = createMermaidRenderer(); + const results = await renderer([String(file)], { + css: irishGrover, + mermaidConfig: { fontFamily: '"Irish Grover"' }, + }); + + return testFixtureResults(results); + }, + + async 'custom-font-iterable.svg'(file) { + const renderer = createMermaidRenderer(); + const results = await renderer([String(file)], { + css: [irishGrover, irishGrover], + mermaidConfig: { fontFamily: '"Irish Grover"' }, + }); + + return testFixtureResults(results); + }, + + async 'firefox.svg'(file) { + const renderer = createMermaidRenderer({ browserType: firefox }); + const results = await renderer([String(file)]); + + return testFixtureResults(results); + }, + + async 'webkit.svg'(file) { + const renderer = createMermaidRenderer({ browserType: webkit }); + const results = await renderer([String(file)]); + + return testFixtureResults(results); + }, + + async 'browser.svg'(file) { + const page = await browser.newPage(); + await page.addScriptTag({ content }); + + const results = await page.evaluate( + diagram => createMermaidRenderer()([diagram]), + String(file) + ); + + return testFixtureResults(results); + }, + }, +}); + +test('concurrent rendering', async () => { + const renderer = createMermaidRenderer(); + + const results = await Promise.all([ + renderer(['graph TD;\nA-->B']), + renderer(['invalid']), + renderer(['graph TD;\nC-->D']), + ]); + assert.strictEqual(results[0][0].status, 'fulfilled'); + assert.strictEqual(results[1][0].status, 'rejected'); + assert.strictEqual(results[2][0].status, 'fulfilled'); +}); diff --git a/packages/mermaid-isomorphic/tsconfig.json b/packages/mermaid-isomorphic/tsconfig.json new file mode 100644 index 0000000000000..fc817804fc6cd --- /dev/null +++ b/packages/mermaid-isomorphic/tsconfig.json @@ -0,0 +1,16 @@ +{ + "compilerOptions": { + "composite": true, + "declaration": true, + "declarationMap": true, + "module": "node16", + "outDir": "dist", + "rootDir": "src", + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "target": "es2021", + "useUnknownInCatchVariables": true, + "erasableSyntaxOnly": true + } +} diff --git a/packages/mermaid-isomorphic/turbo.json b/packages/mermaid-isomorphic/turbo.json new file mode 100644 index 0000000000000..ccffaca27f952 --- /dev/null +++ b/packages/mermaid-isomorphic/turbo.json @@ -0,0 +1,13 @@ +{ + "$schema": "https://turbo.build/schema.json", + "extends": ["//"], + "tasks": { + "dev": { + "cache": false, + "persistent": true + }, + "lint:js": { + "inputs": ["lib/**/*.{js,mjs,ts}"] + } + } +}