diff --git a/.vite/build.ts b/.vite/build.ts
index b89df9e31..bacc6bc6c 100644
--- a/.vite/build.ts
+++ b/.vite/build.ts
@@ -117,6 +117,9 @@ export const getBuildConfig = ({ minify, core, watch, entryName }: BuildOptions)
output,
},
},
+ define: {
+ 'import.meta.vitest': 'undefined',
+ },
resolve: {
extensions: [],
},
diff --git a/cypress/integration/rendering/flowchart-v2.spec.js b/cypress/integration/rendering/flowchart-v2.spec.js
index aac4a31b1..e23820ffa 100644
--- a/cypress/integration/rendering/flowchart-v2.spec.js
+++ b/cypress/integration/rendering/flowchart-v2.spec.js
@@ -729,6 +729,18 @@ A ~~~ B
{}
);
});
+
+ it('5064: Should render when subgraph child has links to outside node and subgraph', () => {
+ imgSnapshotTest(
+ `flowchart TB
+ Out --> In
+ subgraph Sub
+ In
+ end
+ Sub --> In`
+ );
+ });
+
describe('Markdown strings flowchart (#4220)', () => {
describe('html labels', () => {
it('With styling and classes', () => {
@@ -874,4 +886,93 @@ end
});
});
});
+ describe('Subgraph title margins', () => {
+ it('Should render subgraphs with title margins set (LR)', () => {
+ imgSnapshotTest(
+ `flowchart LR
+
+ subgraph TOP
+ direction TB
+ subgraph B1
+ direction RL
+ i1 -->f1
+ end
+ subgraph B2
+ direction BT
+ i2 -->f2
+ end
+ end
+ A --> TOP --> B
+ B1 --> B2
+ `,
+ { flowchart: { subGraphTitleMargin: { top: 10, bottom: 5 } } }
+ );
+ });
+ it('Should render subgraphs with title margins set (TD)', () => {
+ imgSnapshotTest(
+ `flowchart TD
+
+ subgraph TOP
+ direction LR
+ subgraph B1
+ direction RL
+ i1 -->f1
+ end
+ subgraph B2
+ direction BT
+ i2 -->f2
+ end
+ end
+ A --> TOP --> B
+ B1 --> B2
+ `,
+ { flowchart: { subGraphTitleMargin: { top: 8, bottom: 16 } } }
+ );
+ });
+ it('Should render subgraphs with title margins set (LR) and htmlLabels set to false', () => {
+ imgSnapshotTest(
+ `flowchart LR
+
+ subgraph TOP
+ direction TB
+ subgraph B1
+ direction RL
+ i1 -->f1
+ end
+ subgraph B2
+ direction BT
+ i2 -->f2
+ end
+ end
+ A --> TOP --> B
+ B1 --> B2
+ `,
+ {
+ htmlLabels: false,
+ flowchart: { htmlLabels: false, subGraphTitleMargin: { top: 10, bottom: 5 } },
+ }
+ );
+ });
+ it('Should render subgraphs with title margins and edge labels', () => {
+ imgSnapshotTest(
+ `flowchart LR
+
+ subgraph TOP
+ direction TB
+ subgraph B1
+ direction RL
+ i1 --lb1-->f1
+ end
+ subgraph B2
+ direction BT
+ i2 --lb2-->f2
+ end
+ end
+ A --lb3--> TOP --lb4--> B
+ B1 --lb5--> B2
+ `,
+ { flowchart: { subGraphTitleMargin: { top: 10, bottom: 5 } } }
+ );
+ });
+ });
});
diff --git a/cypress/integration/rendering/pie.spec.ts b/cypress/integration/rendering/pie.spec.ts
index 269efafb2..4a1d774c0 100644
--- a/cypress/integration/rendering/pie.spec.ts
+++ b/cypress/integration/rendering/pie.spec.ts
@@ -44,7 +44,7 @@ describe('pie chart', () => {
const style = svg.attr('style');
expect(style).to.match(/^max-width: [\d.]+px;$/);
const maxWidthValue = parseFloat(style.match(/[\d.]+/g).join(''));
- expect(maxWidthValue).to.eq(984);
+ expect(maxWidthValue).to.be.within(590, 600); // depends on installed fonts: 596.2 on my PC, 597.5 on CI
});
});
@@ -59,7 +59,7 @@ describe('pie chart', () => {
);
cy.get('svg').should((svg) => {
const width = parseFloat(svg.attr('width'));
- expect(width).to.eq(984);
+ expect(width).to.be.within(590, 600); // depends on installed fonts: 596.2 on my PC, 597.5 on CI
expect(svg).to.not.have.attr('style');
});
});
diff --git a/docs/config/setup/modules/mermaidAPI.md b/docs/config/setup/modules/mermaidAPI.md
index 633780788..a1992c225 100644
--- a/docs/config/setup/modules/mermaidAPI.md
+++ b/docs/config/setup/modules/mermaidAPI.md
@@ -96,7 +96,7 @@ mermaid.initialize(config);
#### Defined in
-[mermaidAPI.ts:603](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L603)
+[mermaidAPI.ts:608](https://github.com/mermaid-js/mermaid/blob/master/packages/mermaid/src/mermaidAPI.ts#L608)
## Functions
diff --git a/docs/ecosystem/integrations-community.md b/docs/ecosystem/integrations-community.md
index e979544cf..1da6e52ad 100644
--- a/docs/ecosystem/integrations-community.md
+++ b/docs/ecosystem/integrations-community.md
@@ -111,6 +111,8 @@ Communication tools and platforms
### Wikis
+- [PmWiki](https://www.pmwiki.org)
+ - [MermaidJs Cookbook recipe](https://www.pmwiki.org/wiki/Cookbook/MermaidJs)
- [MediaWiki](https://www.mediawiki.org)
- [Mermaid Extension](https://www.mediawiki.org/wiki/Extension:Mermaid)
- [Flex Diagrams Extension](https://www.mediawiki.org/wiki/Extension:Flex_Diagrams)
@@ -179,7 +181,7 @@ Communication tools and platforms
### Document Generation
- [Docusaurus](https://docusaurus.io/docs/markdown-features/diagrams) ✅
-- [Swimm - Up-to-date diagrams with Swimm, the knowledge management tool for code](https://docs.swimm.io/Features/diagrams-and-charts)
+- [Swimm - Up-to-date diagrams with Swimm, the knowledge management tool for code](https://docs.swimm.io/features/diagrams-and-charts/#mermaid--swimm--up-to-date-diagrams-)
- [Sphinx](https://www.sphinx-doc.org/en/master/)
- [sphinxcontrib-mermaid](https://github.com/mgaitan/sphinxcontrib-mermaid)
- [remark](https://remark.js.org/)
diff --git a/docs/news/announcements.md b/docs/news/announcements.md
index 98ca64421..79e32f2f0 100644
--- a/docs/news/announcements.md
+++ b/docs/news/announcements.md
@@ -6,18 +6,10 @@
# Announcements
-
+Check out our latest blog posts below. See more blog posts [here](blog.md).
-
+## [5 Reasons You Should Be Using Mermaid Chart As Your Diagram Generator](https://www.mermaidchart.com/blog/posts/5-reasons-you-should-be-using-mermaid-chart-as-your-diagram-generator/)
-## Calling all fans of Mermaid and Mermaid Chart! 🎉
+14 November 2023 · 5 mins
-We’ve officially made our Product Hunt debut, and would love any and all support from the community!
-
-[Click here](https://www.producthunt.com/posts/mermaid-chart?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-mermaid-chart) to check out our Product Hunt launch.
-
-Feel free to drop us a comment and let us know what you think. All new sign ups will receive a 30-day free trial of our Pro subscription, plus 25% off your first year.
-
-We’re on a mission to make text-based diagramming fun again. And we need your help to make that happen.
-
-Your support means the world to us. Thank you for being part of the diagramming movement.
+Mermaid Chart, a user-friendly, code-based diagram generator with AI integrations, templates, collaborative tools, and plugins for developers, streamlines the process of creating and sharing diagrams, enhancing both creativity and collaboration.
diff --git a/docs/news/blog.md b/docs/news/blog.md
index cc34b9f5c..da20ed1bb 100644
--- a/docs/news/blog.md
+++ b/docs/news/blog.md
@@ -6,6 +6,24 @@
# Blog
+## [5 Reasons You Should Be Using Mermaid Chart As Your Diagram Generator](https://www.mermaidchart.com/blog/posts/5-reasons-you-should-be-using-mermaid-chart-as-your-diagram-generator/)
+
+14 November 2023 · 5 mins
+
+Mermaid Chart, a user-friendly, code-based diagram generator with AI integrations, templates, collaborative tools, and plugins for developers, streamlines the process of creating and sharing diagrams, enhancing both creativity and collaboration.
+
+## [How to Use Mermaid Chart as an AI Diagram Generator](https://www.mermaidchart.com/blog/posts/how-to-use-mermaid-chart-as-an-ai-diagram-generator/)
+
+1 November 2023 · 5 mins
+
+Would an AI diagram generator make your life easier?
+
+## [Diagrams, Made Even Easier: Introducing “Code Snippets” in the Mermaid Chart Editor](https://www.mermaidchart.com/blog/posts/easier-diagram-editing-with-code-snippets/)
+
+12 October 2023 · 4 mins
+
+Mermaid Chart introduces Code Snippets in its editor, streamlining the diagramming process for developers and professionals.
+
## [How to Make a Git Graph with Mermaid Chart](https://www.mermaidchart.com/blog/posts/how-to-make-a-git-graph-with-mermaid-chart/)
22 September 2023 · 7 mins
diff --git a/package.json b/package.json
index d2ca53ce0..0e5d00e98 100644
--- a/package.json
+++ b/package.json
@@ -4,7 +4,7 @@
"version": "10.2.4",
"description": "Markdownish syntax for generating flowcharts, sequence diagrams, class diagrams, gantt charts and git graphs.",
"type": "module",
- "packageManager": "pnpm@8.10.4",
+ "packageManager": "pnpm@8.11.0",
"keywords": [
"diagram",
"markdown",
diff --git a/packages/mermaid/src/config.type.ts b/packages/mermaid/src/config.type.ts
index 82d5e1d00..402d9a4d8 100644
--- a/packages/mermaid/src/config.type.ts
+++ b/packages/mermaid/src/config.type.ts
@@ -1411,6 +1411,14 @@ export interface FlowchartDiagramConfig extends BaseDiagramConfig {
* Margin top for the text over the diagram
*/
titleTopMargin?: number;
+ /**
+ * Defines a top/bottom margin for subgraph titles
+ *
+ */
+ subGraphTitleMargin?: {
+ top?: number;
+ bottom?: number;
+ };
arrowMarkerAbsolute?: boolean;
/**
* The amount of padding around the diagram as a whole so that embedded
diff --git a/packages/mermaid/src/dagre-wrapper/clusters.js b/packages/mermaid/src/dagre-wrapper/clusters.js
index 5c6e5a4e0..2de3f2489 100644
--- a/packages/mermaid/src/dagre-wrapper/clusters.js
+++ b/packages/mermaid/src/dagre-wrapper/clusters.js
@@ -5,9 +5,11 @@ import { createText } from '../rendering-util/createText.js';
import { select } from 'd3';
import { getConfig } from '../diagram-api/diagramAPI.js';
import { evaluate } from '../diagrams/common/common.js';
+import { getSubGraphTitleMargins } from '../utils/subGraphTitleMargins.js';
const rect = (parent, node) => {
log.info('Creating subgraph rect for ', node.id, node);
+ const siteConfig = getConfig();
// Add outer g element
const shapeSvg = parent
@@ -18,7 +20,7 @@ const rect = (parent, node) => {
// add the rect
const rect = shapeSvg.insert('rect', ':first-child');
- const useHtmlLabels = evaluate(getConfig().flowchart.htmlLabels);
+ const useHtmlLabels = evaluate(siteConfig.flowchart.htmlLabels);
// Create the label and insert it after the rect
const label = shapeSvg.insert('g').attr('class', 'cluster-label');
@@ -34,7 +36,7 @@ const rect = (parent, node) => {
// Get the size of the label
let bbox = text.getBBox();
- if (evaluate(getConfig().flowchart.htmlLabels)) {
+ if (evaluate(siteConfig.flowchart.htmlLabels)) {
const div = text.children[0];
const dv = select(text);
bbox = div.getBoundingClientRect();
@@ -63,17 +65,18 @@ const rect = (parent, node) => {
.attr('width', width)
.attr('height', node.height + padding);
+ const { subGraphTitleTopMargin } = getSubGraphTitleMargins(siteConfig);
if (useHtmlLabels) {
label.attr(
'transform',
// This puts the labal on top of the box instead of inside it
- 'translate(' + (node.x - bbox.width / 2) + ', ' + (node.y - node.height / 2) + ')'
+ `translate(${node.x - bbox.width / 2}, ${node.y - node.height / 2 + subGraphTitleTopMargin})`
);
} else {
label.attr(
'transform',
// This puts the labal on top of the box instead of inside it
- 'translate(' + node.x + ', ' + (node.y - node.height / 2) + ')'
+ `translate(${node.x}, ${node.y - node.height / 2 + subGraphTitleTopMargin})`
);
}
// Center the label
@@ -127,6 +130,8 @@ const noteGroup = (parent, node) => {
return shapeSvg;
};
const roundedWithTitle = (parent, node) => {
+ const siteConfig = getConfig();
+
// Add outer g element
const shapeSvg = parent.insert('g').attr('class', node.classes).attr('id', node.id);
@@ -143,7 +148,7 @@ const roundedWithTitle = (parent, node) => {
// Get the size of the label
let bbox = text.getBBox();
- if (evaluate(getConfig().flowchart.htmlLabels)) {
+ if (evaluate(siteConfig.flowchart.htmlLabels)) {
const div = text.children[0];
const dv = select(text);
bbox = div.getBoundingClientRect();
@@ -175,6 +180,7 @@ const roundedWithTitle = (parent, node) => {
.attr('width', width + padding)
.attr('height', node.height + padding - bbox.height - 3);
+ const { subGraphTitleTopMargin } = getSubGraphTitleMargins(siteConfig);
// Center the label
label.attr(
'transform',
@@ -184,7 +190,8 @@ const roundedWithTitle = (parent, node) => {
(node.y -
node.height / 2 -
node.padding / 3 +
- (evaluate(getConfig().flowchart.htmlLabels) ? 5 : 3)) +
+ (evaluate(siteConfig.flowchart.htmlLabels) ? 5 : 3)) +
+ subGraphTitleTopMargin +
')'
);
diff --git a/packages/mermaid/src/dagre-wrapper/edgeMarker.spec.ts b/packages/mermaid/src/dagre-wrapper/edgeMarker.spec.ts
new file mode 100644
index 000000000..6cfb59fab
--- /dev/null
+++ b/packages/mermaid/src/dagre-wrapper/edgeMarker.spec.ts
@@ -0,0 +1,79 @@
+import type { Mocked } from 'vitest';
+import type { SVG } from '../diagram-api/types.js';
+import { addEdgeMarkers } from './edgeMarker.js';
+
+describe('addEdgeMarker', () => {
+ const svgPath = {
+ attr: vitest.fn(),
+ } as unknown as Mocked;
+ const url = 'http://example.com';
+ const id = 'test';
+ const diagramType = 'test';
+
+ beforeEach(() => {
+ svgPath.attr.mockReset();
+ });
+
+ it('should add markers for arrow_cross:arrow_point', () => {
+ const arrowTypeStart = 'arrow_cross';
+ const arrowTypeEnd = 'arrow_point';
+ addEdgeMarkers(svgPath, { arrowTypeStart, arrowTypeEnd }, url, id, diagramType);
+ expect(svgPath.attr).toHaveBeenCalledWith(
+ 'marker-start',
+ `url(${url}#${id}_${diagramType}-crossStart)`
+ );
+ expect(svgPath.attr).toHaveBeenCalledWith(
+ 'marker-end',
+ `url(${url}#${id}_${diagramType}-pointEnd)`
+ );
+ });
+
+ it('should add markers for aggregation:arrow_point', () => {
+ const arrowTypeStart = 'aggregation';
+ const arrowTypeEnd = 'arrow_point';
+ addEdgeMarkers(svgPath, { arrowTypeStart, arrowTypeEnd }, url, id, diagramType);
+ expect(svgPath.attr).toHaveBeenCalledWith(
+ 'marker-start',
+ `url(${url}#${id}_${diagramType}-aggregationStart)`
+ );
+ expect(svgPath.attr).toHaveBeenCalledWith(
+ 'marker-end',
+ `url(${url}#${id}_${diagramType}-pointEnd)`
+ );
+ });
+
+ it('should add markers for arrow_point:aggregation', () => {
+ const arrowTypeStart = 'arrow_point';
+ const arrowTypeEnd = 'aggregation';
+ addEdgeMarkers(svgPath, { arrowTypeStart, arrowTypeEnd }, url, id, diagramType);
+ expect(svgPath.attr).toHaveBeenCalledWith(
+ 'marker-start',
+ `url(${url}#${id}_${diagramType}-pointStart)`
+ );
+ expect(svgPath.attr).toHaveBeenCalledWith(
+ 'marker-end',
+ `url(${url}#${id}_${diagramType}-aggregationEnd)`
+ );
+ });
+
+ it('should add markers for aggregation:composition', () => {
+ const arrowTypeStart = 'aggregation';
+ const arrowTypeEnd = 'composition';
+ addEdgeMarkers(svgPath, { arrowTypeStart, arrowTypeEnd }, url, id, diagramType);
+ expect(svgPath.attr).toHaveBeenCalledWith(
+ 'marker-start',
+ `url(${url}#${id}_${diagramType}-aggregationStart)`
+ );
+ expect(svgPath.attr).toHaveBeenCalledWith(
+ 'marker-end',
+ `url(${url}#${id}_${diagramType}-compositionEnd)`
+ );
+ });
+
+ it('should not add invalid markers', () => {
+ const arrowTypeStart = 'this is an invalid marker';
+ const arrowTypeEnd = ') url(https://my-malicious-site.example)';
+ addEdgeMarkers(svgPath, { arrowTypeStart, arrowTypeEnd }, url, id, diagramType);
+ expect(svgPath.attr).not.toHaveBeenCalled();
+ });
+});
diff --git a/packages/mermaid/src/dagre-wrapper/edgeMarker.ts b/packages/mermaid/src/dagre-wrapper/edgeMarker.ts
new file mode 100644
index 000000000..778a7708d
--- /dev/null
+++ b/packages/mermaid/src/dagre-wrapper/edgeMarker.ts
@@ -0,0 +1,57 @@
+import type { SVG } from '../diagram-api/types.js';
+import { log } from '../logger.js';
+import type { EdgeData } from '../types.js';
+/**
+ * Adds SVG markers to a path element based on the arrow types specified in the edge.
+ *
+ * @param svgPath - The SVG path element to add markers to.
+ * @param edge - The edge data object containing the arrow types.
+ * @param url - The URL of the SVG marker definitions.
+ * @param id - The ID prefix for the SVG marker definitions.
+ * @param diagramType - The type of diagram being rendered.
+ */
+export const addEdgeMarkers = (
+ svgPath: SVG,
+ edge: Pick,
+ url: string,
+ id: string,
+ diagramType: string
+) => {
+ if (edge.arrowTypeStart) {
+ addEdgeMarker(svgPath, 'start', edge.arrowTypeStart, url, id, diagramType);
+ }
+ if (edge.arrowTypeEnd) {
+ addEdgeMarker(svgPath, 'end', edge.arrowTypeEnd, url, id, diagramType);
+ }
+};
+
+const arrowTypesMap = {
+ arrow_cross: 'cross',
+ arrow_point: 'point',
+ arrow_barb: 'barb',
+ arrow_circle: 'circle',
+ aggregation: 'aggregation',
+ extension: 'extension',
+ composition: 'composition',
+ dependency: 'dependency',
+ lollipop: 'lollipop',
+} as const;
+
+const addEdgeMarker = (
+ svgPath: SVG,
+ position: 'start' | 'end',
+ arrowType: string,
+ url: string,
+ id: string,
+ diagramType: string
+) => {
+ const endMarkerType = arrowTypesMap[arrowType as keyof typeof arrowTypesMap];
+
+ if (!endMarkerType) {
+ log.warn(`Unknown arrow type: ${arrowType}`);
+ return; // unknown arrow type, ignore
+ }
+
+ const suffix = position === 'start' ? 'Start' : 'End';
+ svgPath.attr(`marker-${position}`, `url(${url}#${id}_${diagramType}-${endMarkerType}${suffix})`);
+};
diff --git a/packages/mermaid/src/dagre-wrapper/edges.js b/packages/mermaid/src/dagre-wrapper/edges.js
index ced9a3bc2..368390128 100644
--- a/packages/mermaid/src/dagre-wrapper/edges.js
+++ b/packages/mermaid/src/dagre-wrapper/edges.js
@@ -6,6 +6,8 @@ import { getConfig } from '../diagram-api/diagramAPI.js';
import utils from '../utils.js';
import { evaluate } from '../diagrams/common/common.js';
import { getLineFunctionsWithOffset } from '../utils/lineWithOffset.js';
+import { getSubGraphTitleMargins } from '../utils/subGraphTitleMargins.js';
+import { addEdgeMarkers } from './edgeMarker.js';
let edgeLabels = {};
let terminalLabels = {};
@@ -135,6 +137,8 @@ function setTerminalWidth(fo, value) {
export const positionEdgeLabel = (edge, paths) => {
log.info('Moving label abc78 ', edge.id, edge.label, edgeLabels[edge.id]);
let path = paths.updatedPath ? paths.updatedPath : paths.originalPath;
+ const siteConfig = getConfig();
+ const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig);
if (edge.label) {
const el = edgeLabels[edge.id];
let x = edge.x;
@@ -158,7 +162,7 @@ export const positionEdgeLabel = (edge, paths) => {
y = pos.y;
}
}
- el.attr('transform', 'translate(' + x + ', ' + y + ')');
+ el.attr('transform', `translate(${x}, ${y + subGraphTitleTotalMargin / 2})`);
}
//let path = paths.updatedPath ? paths.updatedPath : paths.originalPath;
@@ -172,7 +176,7 @@ export const positionEdgeLabel = (edge, paths) => {
x = pos.x;
y = pos.y;
}
- el.attr('transform', 'translate(' + x + ', ' + y + ')');
+ el.attr('transform', `translate(${x}, ${y})`);
}
if (edge.startLabelRight) {
const el = terminalLabels[edge.id].startRight;
@@ -188,7 +192,7 @@ export const positionEdgeLabel = (edge, paths) => {
x = pos.x;
y = pos.y;
}
- el.attr('transform', 'translate(' + x + ', ' + y + ')');
+ el.attr('transform', `translate(${x}, ${y})`);
}
if (edge.endLabelLeft) {
const el = terminalLabels[edge.id].endLeft;
@@ -200,7 +204,7 @@ export const positionEdgeLabel = (edge, paths) => {
x = pos.x;
y = pos.y;
}
- el.attr('transform', 'translate(' + x + ', ' + y + ')');
+ el.attr('transform', `translate(${x}, ${y})`);
}
if (edge.endLabelRight) {
const el = terminalLabels[edge.id].endRight;
@@ -212,7 +216,7 @@ export const positionEdgeLabel = (edge, paths) => {
x = pos.x;
y = pos.y;
}
- el.attr('transform', 'translate(' + x + ', ' + y + ')');
+ el.attr('transform', `translate(${x}, ${y})`);
}
};
@@ -506,108 +510,8 @@ export const insertEdge = function (elem, e, edge, clusterDb, diagramType, graph
log.info('arrowTypeStart', edge.arrowTypeStart);
log.info('arrowTypeEnd', edge.arrowTypeEnd);
- switch (edge.arrowTypeStart) {
- case 'arrow_cross':
- svgPath.attr(
- 'marker-start',
- 'url(' + url + '#' + id + '_' + diagramType + '-crossStart' + ')'
- );
- break;
- case 'arrow_point':
- svgPath.attr(
- 'marker-start',
- 'url(' + url + '#' + id + '_' + diagramType + '-pointStart' + ')'
- );
- break;
- case 'arrow_barb':
- svgPath.attr(
- 'marker-start',
- 'url(' + url + '#' + id + '_' + diagramType + '-barbStart' + ')'
- );
- break;
- case 'arrow_circle':
- svgPath.attr(
- 'marker-start',
- 'url(' + url + '#' + id + '_' + diagramType + '-circleStart' + ')'
- );
- break;
- case 'aggregation':
- svgPath.attr(
- 'marker-start',
- 'url(' + url + '#' + id + '_' + diagramType + '-aggregationStart' + ')'
- );
- break;
- case 'extension':
- svgPath.attr(
- 'marker-start',
- 'url(' + url + '#' + id + '_' + diagramType + '-extensionStart' + ')'
- );
- break;
- case 'composition':
- svgPath.attr(
- 'marker-start',
- 'url(' + url + '#' + id + '_' + diagramType + '-compositionStart' + ')'
- );
- break;
- case 'dependency':
- svgPath.attr(
- 'marker-start',
- 'url(' + url + '#' + id + '_' + diagramType + '-dependencyStart' + ')'
- );
- break;
- case 'lollipop':
- svgPath.attr(
- 'marker-start',
- 'url(' + url + '#' + id + '_' + diagramType + '-lollipopStart' + ')'
- );
- break;
- default:
- }
- switch (edge.arrowTypeEnd) {
- case 'arrow_cross':
- svgPath.attr('marker-end', 'url(' + url + '#' + id + '_' + diagramType + '-crossEnd' + ')');
- break;
- case 'arrow_point':
- svgPath.attr('marker-end', 'url(' + url + '#' + id + '_' + diagramType + '-pointEnd' + ')');
- break;
- case 'arrow_barb':
- svgPath.attr('marker-end', 'url(' + url + '#' + id + '_' + diagramType + '-barbEnd' + ')');
- break;
- case 'arrow_circle':
- svgPath.attr('marker-end', 'url(' + url + '#' + id + '_' + diagramType + '-circleEnd' + ')');
- break;
- case 'aggregation':
- svgPath.attr(
- 'marker-end',
- 'url(' + url + '#' + id + '_' + diagramType + '-aggregationEnd' + ')'
- );
- break;
- case 'extension':
- svgPath.attr(
- 'marker-end',
- 'url(' + url + '#' + id + '_' + diagramType + '-extensionEnd' + ')'
- );
- break;
- case 'composition':
- svgPath.attr(
- 'marker-end',
- 'url(' + url + '#' + id + '_' + diagramType + '-compositionEnd' + ')'
- );
- break;
- case 'dependency':
- svgPath.attr(
- 'marker-end',
- 'url(' + url + '#' + id + '_' + diagramType + '-dependencyEnd' + ')'
- );
- break;
- case 'lollipop':
- svgPath.attr(
- 'marker-end',
- 'url(' + url + '#' + id + '_' + diagramType + '-lollipopEnd' + ')'
- );
- break;
- default:
- }
+ addEdgeMarkers(svgPath, edge, url, id, diagramType);
+
let paths = {};
if (pointsHasChanged) {
paths.updatedPath = points;
diff --git a/packages/mermaid/src/dagre-wrapper/index.js b/packages/mermaid/src/dagre-wrapper/index.js
index 9843adb8b..76685dd7b 100644
--- a/packages/mermaid/src/dagre-wrapper/index.js
+++ b/packages/mermaid/src/dagre-wrapper/index.js
@@ -13,8 +13,10 @@ import { insertNode, positionNode, clear as clearNodes, setNodeElem } from './no
import { insertCluster, clear as clearClusters } from './clusters.js';
import { insertEdgeLabel, positionEdgeLabel, insertEdge, clear as clearEdges } from './edges.js';
import { log } from '../logger.js';
+import { getSubGraphTitleMargins } from '../utils/subGraphTitleMargins.js';
+import { getConfig } from '../diagram-api/diagramAPI.js';
-const recursiveRender = async (_elem, graph, diagramtype, id, parentCluster) => {
+const recursiveRender = async (_elem, graph, diagramtype, id, parentCluster, siteConfig) => {
log.info('Graph in recursive render: XXX', graphlibJson.write(graph), parentCluster);
const dir = graph.graph().rankdir;
log.trace('Dir in recursive render - dir:', dir);
@@ -52,7 +54,14 @@ const recursiveRender = async (_elem, graph, diagramtype, id, parentCluster) =>
if (node && node.clusterNode) {
// const children = graph.children(v);
log.info('Cluster identified', v, node.width, graph.node(v));
- const o = await recursiveRender(nodes, node.graph, diagramtype, id, graph.node(v));
+ const o = await recursiveRender(
+ nodes,
+ node.graph,
+ diagramtype,
+ id,
+ graph.node(v),
+ siteConfig
+ );
const newEl = o.elem;
updateNodeBounds(node, newEl);
node.diff = o.diff || 0;
@@ -101,6 +110,7 @@ const recursiveRender = async (_elem, graph, diagramtype, id, parentCluster) =>
log.info('Graph after layout:', graphlibJson.write(graph));
// Move the nodes to the correct place
let diff = 0;
+ const { subGraphTitleTotalMargin } = getSubGraphTitleMargins(siteConfig);
sortNodesByHierarchy(graph).forEach(function (v) {
const node = graph.node(v);
log.info('Position ' + v + ': ' + JSON.stringify(graph.node(v)));
@@ -114,16 +124,18 @@ const recursiveRender = async (_elem, graph, diagramtype, id, parentCluster) =>
);
if (node && node.clusterNode) {
// clusterDb[node.id].node = node;
-
+ node.y += subGraphTitleTotalMargin;
positionNode(node);
} else {
// Non cluster node
if (graph.children(v).length > 0) {
// A cluster in the non-recursive way
// positionCluster(node);
+ node.height += subGraphTitleTotalMargin;
insertCluster(clusters, node);
clusterDb[node.id].node = node;
} else {
+ node.y += subGraphTitleTotalMargin / 2;
positionNode(node);
}
}
@@ -134,6 +146,7 @@ const recursiveRender = async (_elem, graph, diagramtype, id, parentCluster) =>
const edge = graph.edge(e);
log.info('Edge ' + e.v + ' -> ' + e.w + ': ' + JSON.stringify(edge), edge);
+ edge.points.forEach((point) => (point.y += subGraphTitleTotalMargin / 2));
const paths = insertEdge(edgePaths, e, edge, clusterDb, diagramtype, graph, id);
positionEdgeLabel(edge, paths);
});
@@ -159,7 +172,8 @@ export const render = async (elem, graph, markers, diagramtype, id) => {
adjustClustersAndEdges(graph);
log.warn('Graph after:', JSON.stringify(graphlibJson.write(graph)));
// log.warn('Graph ever after:', graphlibJson.write(graph.node('A').graph));
- await recursiveRender(elem, graph, diagramtype, id);
+ const siteConfig = getConfig();
+ await recursiveRender(elem, graph, diagramtype, id, undefined, siteConfig);
};
// const shapeDefinitions = {};
diff --git a/packages/mermaid/src/dagre-wrapper/shapes/util.js b/packages/mermaid/src/dagre-wrapper/shapes/util.js
index 079125e3a..97a1bef8d 100644
--- a/packages/mermaid/src/dagre-wrapper/shapes/util.js
+++ b/packages/mermaid/src/dagre-wrapper/shapes/util.js
@@ -80,7 +80,9 @@ export const labelHelper = async (parent, node, _classes, isNode) => {
? getConfig().fontSize
: window.getComputedStyle(document.body).fontSize;
const enlargingFactor = 5;
- img.style.width = parseInt(bodyFontSize, 10) * enlargingFactor + 'px';
+ const width = parseInt(bodyFontSize, 10) * enlargingFactor + 'px';
+ img.style.minWidth = width;
+ img.style.maxWidth = width;
} else {
img.style.width = '100%';
}
diff --git a/packages/mermaid/src/diagrams/class/styles.js b/packages/mermaid/src/diagrams/class/styles.js
index 5f99a8b91..9bad27f38 100644
--- a/packages/mermaid/src/diagrams/class/styles.js
+++ b/packages/mermaid/src/diagrams/class/styles.js
@@ -145,6 +145,7 @@ g.classGroup line {
.edgeTerminals {
font-size: 11px;
+ line-height: initial;
}
.classTitleText {
diff --git a/packages/mermaid/src/diagrams/flowchart/elk/flowRenderer-elk.js b/packages/mermaid/src/diagrams/flowchart/elk/flowRenderer-elk.js
index e45739524..393a00088 100644
--- a/packages/mermaid/src/diagrams/flowchart/elk/flowRenderer-elk.js
+++ b/packages/mermaid/src/diagrams/flowchart/elk/flowRenderer-elk.js
@@ -11,6 +11,7 @@ import common from '../../common/common.js';
import { interpolateToCurve, getStylesFromArray } from '../../../utils.js';
import ELK from 'elkjs/lib/elk.bundled.js';
import { getLineFunctionsWithOffset } from '../../../utils/lineWithOffset.js';
+import { addEdgeMarkers } from '../../../dagre-wrapper/edgeMarker.js';
const elk = new ELK();
@@ -586,108 +587,7 @@ const addMarkersToEdge = function (svgPath, edgeData, diagramType, arrowMarkerAb
}
// look in edge data and decide which marker to use
- switch (edgeData.arrowTypeStart) {
- case 'arrow_cross':
- svgPath.attr(
- 'marker-start',
- 'url(' + url + '#' + id + '_' + diagramType + '-crossStart' + ')'
- );
- break;
- case 'arrow_point':
- svgPath.attr(
- 'marker-start',
- 'url(' + url + '#' + id + '_' + diagramType + '-pointStart' + ')'
- );
- break;
- case 'arrow_barb':
- svgPath.attr(
- 'marker-start',
- 'url(' + url + '#' + id + '_' + diagramType + '-barbStart' + ')'
- );
- break;
- case 'arrow_circle':
- svgPath.attr(
- 'marker-start',
- 'url(' + url + '#' + id + '_' + diagramType + '-circleStart' + ')'
- );
- break;
- case 'aggregation':
- svgPath.attr(
- 'marker-start',
- 'url(' + url + '#' + id + '_' + diagramType + '-aggregationStart' + ')'
- );
- break;
- case 'extension':
- svgPath.attr(
- 'marker-start',
- 'url(' + url + '#' + id + '_' + diagramType + '-extensionStart' + ')'
- );
- break;
- case 'composition':
- svgPath.attr(
- 'marker-start',
- 'url(' + url + '#' + id + '_' + diagramType + '-compositionStart' + ')'
- );
- break;
- case 'dependency':
- svgPath.attr(
- 'marker-start',
- 'url(' + url + '#' + id + '_' + diagramType + '-dependencyStart' + ')'
- );
- break;
- case 'lollipop':
- svgPath.attr(
- 'marker-start',
- 'url(' + url + '#' + id + '_' + diagramType + '-lollipopStart' + ')'
- );
- break;
- default:
- }
- switch (edgeData.arrowTypeEnd) {
- case 'arrow_cross':
- svgPath.attr('marker-end', 'url(' + url + '#' + id + '_' + diagramType + '-crossEnd' + ')');
- break;
- case 'arrow_point':
- svgPath.attr('marker-end', 'url(' + url + '#' + id + '_' + diagramType + '-pointEnd' + ')');
- break;
- case 'arrow_barb':
- svgPath.attr('marker-end', 'url(' + url + '#' + id + '_' + diagramType + '-barbEnd' + ')');
- break;
- case 'arrow_circle':
- svgPath.attr('marker-end', 'url(' + url + '#' + id + '_' + diagramType + '-circleEnd' + ')');
- break;
- case 'aggregation':
- svgPath.attr(
- 'marker-end',
- 'url(' + url + '#' + id + '_' + diagramType + '-aggregationEnd' + ')'
- );
- break;
- case 'extension':
- svgPath.attr(
- 'marker-end',
- 'url(' + url + '#' + id + '_' + diagramType + '-extensionEnd' + ')'
- );
- break;
- case 'composition':
- svgPath.attr(
- 'marker-end',
- 'url(' + url + '#' + id + '_' + diagramType + '-compositionEnd' + ')'
- );
- break;
- case 'dependency':
- svgPath.attr(
- 'marker-end',
- 'url(' + url + '#' + id + '_' + diagramType + '-dependencyEnd' + ')'
- );
- break;
- case 'lollipop':
- svgPath.attr(
- 'marker-end',
- 'url(' + url + '#' + id + '_' + diagramType + '-lollipopEnd' + ')'
- );
- break;
- default:
- }
+ addEdgeMarkers(svgPath, edgeData, url, id, diagramType);
};
/**
diff --git a/packages/mermaid/src/diagrams/pie/pieRenderer.ts b/packages/mermaid/src/diagrams/pie/pieRenderer.ts
index 5f6f653c3..a24bcb532 100644
--- a/packages/mermaid/src/diagrams/pie/pieRenderer.ts
+++ b/packages/mermaid/src/diagrams/pie/pieRenderer.ts
@@ -1,6 +1,5 @@
import type d3 from 'd3';
import { scaleOrdinal, pie as d3pie, arc } from 'd3';
-
import { log } from '../../logger.js';
import { configureSvgSize } from '../../setupGraphViewbox.js';
import { getConfig } from '../../diagram-api/diagramAPI.js';
@@ -38,33 +37,25 @@ const createPieArcs = (sections: Sections): d3.PieArcDatum[] => {
*/
export const draw: DrawDefinition = (text, id, _version, diagObj) => {
log.debug('rendering pie chart\n' + text);
-
const db = diagObj.db as PieDB;
const globalConfig: MermaidConfig = getConfig();
const pieConfig: Required = cleanAndMerge(db.getConfig(), globalConfig.pie);
-
- const height = 450;
- // TODO: remove document width
- const width: number =
- document.getElementById(id)?.parentElement?.offsetWidth ?? pieConfig.useWidth;
- const svg: SVG = selectSvgElement(id);
- // Set viewBox
- svg.attr('viewBox', `0 0 ${width} ${height}`);
- configureSvgSize(svg, height, width, pieConfig.useMaxWidth);
-
const MARGIN = 40;
const LEGEND_RECT_SIZE = 18;
const LEGEND_SPACING = 4;
-
+ const height = 450;
+ const pieWidth: number = height;
+ const svg: SVG = selectSvgElement(id);
const group: Group = svg.append('g');
- group.attr('transform', 'translate(' + width / 2 + ',' + height / 2 + ')');
+ const sections: Sections = db.getSections();
+ group.attr('transform', 'translate(' + pieWidth / 2 + ',' + height / 2 + ')');
const { themeVariables } = globalConfig;
let [outerStrokeWidth] = parseFontSize(themeVariables.pieOuterStrokeWidth);
outerStrokeWidth ??= 2;
const textPosition: number = pieConfig.textPosition;
- const radius: number = Math.min(width, height) / 2 - MARGIN;
+ const radius: number = Math.min(pieWidth, height) / 2 - MARGIN;
// Shape helper to build arcs:
const arcGenerator: d3.Arc> = arc<
d3.PieArcDatum
@@ -84,7 +75,6 @@ export const draw: DrawDefinition = (text, id, _version, diagObj) => {
.attr('r', radius + outerStrokeWidth / 2)
.attr('class', 'pieOuterCircle');
- const sections: Sections = db.getSections();
const arcs: d3.PieArcDatum[] = createPieArcs(sections);
const myGeneratedColors = [
@@ -177,6 +167,19 @@ export const draw: DrawDefinition = (text, id, _version, diagObj) => {
}
return label;
});
+
+ const longestTextWidth = Math.max(
+ ...legend
+ .selectAll('text')
+ .nodes()
+ .map((node) => (node as Element)?.getBoundingClientRect().width ?? 0)
+ );
+
+ const totalWidth = pieWidth + MARGIN + LEGEND_RECT_SIZE + LEGEND_SPACING + longestTextWidth;
+
+ // Set viewBox
+ svg.attr('viewBox', `0 0 ${totalWidth} ${height}`);
+ configureSvgSize(svg, height, totalWidth, pieConfig.useMaxWidth);
};
export const renderer = { draw };
diff --git a/packages/mermaid/src/docs/.vitepress/config.ts b/packages/mermaid/src/docs/.vitepress/config.ts
index 691ca0565..8601664fa 100644
--- a/packages/mermaid/src/docs/.vitepress/config.ts
+++ b/packages/mermaid/src/docs/.vitepress/config.ts
@@ -4,7 +4,10 @@ import { defineConfig, MarkdownOptions } from 'vitepress';
const allMarkdownTransformers: MarkdownOptions = {
// the shiki theme to highlight code blocks
- theme: 'github-dark',
+ theme: {
+ light: 'github-light',
+ dark: 'github-dark',
+ },
config: async (md) => {
await MermaidExample(md);
},
diff --git a/packages/mermaid/src/docs/ecosystem/integrations-community.md b/packages/mermaid/src/docs/ecosystem/integrations-community.md
index f6ffd908f..88dd3492d 100644
--- a/packages/mermaid/src/docs/ecosystem/integrations-community.md
+++ b/packages/mermaid/src/docs/ecosystem/integrations-community.md
@@ -109,6 +109,8 @@ Communication tools and platforms
### Wikis
+- [PmWiki](https://www.pmwiki.org)
+ - [MermaidJs Cookbook recipe](https://www.pmwiki.org/wiki/Cookbook/MermaidJs)
- [MediaWiki](https://www.mediawiki.org)
- [Mermaid Extension](https://www.mediawiki.org/wiki/Extension:Mermaid)
- [Flex Diagrams Extension](https://www.mediawiki.org/wiki/Extension:Flex_Diagrams)
@@ -177,7 +179,7 @@ Communication tools and platforms
### Document Generation
- [Docusaurus](https://docusaurus.io/docs/markdown-features/diagrams) ✅
-- [Swimm - Up-to-date diagrams with Swimm, the knowledge management tool for code](https://docs.swimm.io/Features/diagrams-and-charts)
+- [Swimm - Up-to-date diagrams with Swimm, the knowledge management tool for code](https://docs.swimm.io/features/diagrams-and-charts/#mermaid--swimm--up-to-date-diagrams-)
- [Sphinx](https://www.sphinx-doc.org/en/master/)
- [sphinxcontrib-mermaid](https://github.com/mgaitan/sphinxcontrib-mermaid)
- [remark](https://remark.js.org/)
diff --git a/packages/mermaid/src/docs/news/announcements.md b/packages/mermaid/src/docs/news/announcements.md
index f14aab785..7093d6fba 100644
--- a/packages/mermaid/src/docs/news/announcements.md
+++ b/packages/mermaid/src/docs/news/announcements.md
@@ -1,17 +1,9 @@
# Announcements
-
+Check out our latest blog posts below. See more blog posts [here](blog.md).
-
+## [5 Reasons You Should Be Using Mermaid Chart As Your Diagram Generator](https://www.mermaidchart.com/blog/posts/5-reasons-you-should-be-using-mermaid-chart-as-your-diagram-generator/)
-## Calling all fans of Mermaid and Mermaid Chart! 🎉
+14 November 2023 · 5 mins
-We’ve officially made our Product Hunt debut, and would love any and all support from the community!
-
-[Click here](https://www.producthunt.com/posts/mermaid-chart?utm_source=badge-featured&utm_medium=badge&utm_souce=badge-mermaid-chart) to check out our Product Hunt launch.
-
-Feel free to drop us a comment and let us know what you think. All new sign ups will receive a 30-day free trial of our Pro subscription, plus 25% off your first year.
-
-We’re on a mission to make text-based diagramming fun again. And we need your help to make that happen.
-
-Your support means the world to us. Thank you for being part of the diagramming movement.
+Mermaid Chart, a user-friendly, code-based diagram generator with AI integrations, templates, collaborative tools, and plugins for developers, streamlines the process of creating and sharing diagrams, enhancing both creativity and collaboration.
diff --git a/packages/mermaid/src/docs/news/blog.md b/packages/mermaid/src/docs/news/blog.md
index fa581349f..d9bf6a8b7 100644
--- a/packages/mermaid/src/docs/news/blog.md
+++ b/packages/mermaid/src/docs/news/blog.md
@@ -1,5 +1,23 @@
# Blog
+## [5 Reasons You Should Be Using Mermaid Chart As Your Diagram Generator](https://www.mermaidchart.com/blog/posts/5-reasons-you-should-be-using-mermaid-chart-as-your-diagram-generator/)
+
+14 November 2023 · 5 mins
+
+Mermaid Chart, a user-friendly, code-based diagram generator with AI integrations, templates, collaborative tools, and plugins for developers, streamlines the process of creating and sharing diagrams, enhancing both creativity and collaboration.
+
+## [How to Use Mermaid Chart as an AI Diagram Generator](https://www.mermaidchart.com/blog/posts/how-to-use-mermaid-chart-as-an-ai-diagram-generator/)
+
+1 November 2023 · 5 mins
+
+Would an AI diagram generator make your life easier?
+
+## [Diagrams, Made Even Easier: Introducing “Code Snippets” in the Mermaid Chart Editor](https://www.mermaidchart.com/blog/posts/easier-diagram-editing-with-code-snippets/)
+
+12 October 2023 · 4 mins
+
+Mermaid Chart introduces Code Snippets in its editor, streamlining the diagramming process for developers and professionals.
+
## [How to Make a Git Graph with Mermaid Chart](https://www.mermaidchart.com/blog/posts/how-to-make-a-git-graph-with-mermaid-chart/)
22 September 2023 · 7 mins
diff --git a/packages/mermaid/src/docs/package.json b/packages/mermaid/src/docs/package.json
index 87777eb9f..edeb9dc37 100644
--- a/packages/mermaid/src/docs/package.json
+++ b/packages/mermaid/src/docs/package.json
@@ -23,7 +23,7 @@
"devDependencies": {
"@iconify-json/carbon": "^1.1.16",
"@unocss/reset": "^0.57.0",
- "@vite-pwa/vitepress": "^0.2.0",
+ "@vite-pwa/vitepress": "^0.3.0",
"@vitejs/plugin-vue": "^4.2.1",
"fast-glob": "^3.2.12",
"https-localhost": "^4.7.1",
@@ -31,8 +31,8 @@
"unocss": "^0.57.0",
"unplugin-vue-components": "^0.25.0",
"vite": "^4.3.9",
- "vite-plugin-pwa": "^0.16.0",
- "vitepress": "1.0.0-rc.25",
+ "vite-plugin-pwa": "^0.17.0",
+ "vitepress": "1.0.0-rc.31",
"workbox-window": "^7.0.0"
}
}
diff --git a/packages/mermaid/src/mermaid.spec.ts b/packages/mermaid/src/mermaid.spec.ts
index 645b5b39c..390ee74ef 100644
--- a/packages/mermaid/src/mermaid.spec.ts
+++ b/packages/mermaid/src/mermaid.spec.ts
@@ -2,7 +2,7 @@ import mermaid from './mermaid.js';
import { mermaidAPI } from './mermaidAPI.js';
import './diagram-api/diagram-orchestration.js';
import { addDiagrams } from './diagram-api/diagram-orchestration.js';
-import { beforeAll, describe, it, expect, vi } from 'vitest';
+import { beforeAll, describe, it, expect, vi, afterEach } from 'vitest';
import type { DiagramDefinition } from './diagram-api/types.js';
beforeAll(async () => {
@@ -89,7 +89,7 @@ describe('when using mermaid and ', () => {
).resolves.not.toThrow();
// should still render, even if lazyLoadedDiagrams fails
expect(mermaidAPI.render).toHaveBeenCalled();
- });
+ }, 20_000);
it('should defer diagram load based on parameter', async () => {
let loaded = false;
diff --git a/packages/mermaid/src/mermaidAPI.spec.ts b/packages/mermaid/src/mermaidAPI.spec.ts
index 32647ee62..b7ff578fb 100644
--- a/packages/mermaid/src/mermaidAPI.spec.ts
+++ b/packages/mermaid/src/mermaidAPI.spec.ts
@@ -67,6 +67,7 @@ vi.mock('stylis', () => {
});
import { compile, serialize } from 'stylis';
import { decodeEntities, encodeEntities } from './utils.js';
+import { Diagram } from './Diagram.js';
/**
* @see https://vitest.dev/guide/mocking.html Mock part of a module
@@ -744,4 +745,16 @@ describe('mermaidAPI', () => {
});
});
});
+
+ describe('getDiagramFromText', () => {
+ it('should clean up comments when present in diagram definition', async () => {
+ const diagram = await mermaidAPI.getDiagramFromText(
+ `flowchart LR
+ %% This is a comment A -- text --> B{node}
+ A -- text --> B -- text2 --> C`
+ );
+ expect(diagram).toBeInstanceOf(Diagram);
+ expect(diagram.type).toBe('flowchart-v2');
+ });
+ });
});
diff --git a/packages/mermaid/src/mermaidAPI.ts b/packages/mermaid/src/mermaidAPI.ts
index 09d007780..65310d4fa 100644
--- a/packages/mermaid/src/mermaidAPI.ts
+++ b/packages/mermaid/src/mermaidAPI.ts
@@ -17,7 +17,7 @@ import { compile, serialize, stringify } from 'stylis';
import { version } from '../package.json';
import * as configApi from './config.js';
import { addDiagrams } from './diagram-api/diagram-orchestration.js';
-import { Diagram, getDiagramFromText } from './Diagram.js';
+import { Diagram, getDiagramFromText as getDiagramFromTextInternal } from './Diagram.js';
import errorRenderer from './diagrams/error/errorRenderer.js';
import { attachFunctions } from './interactionDb.js';
import { log, setLogLevel } from './logger.js';
@@ -28,7 +28,7 @@ import type { MermaidConfig } from './config.type.js';
import { evaluate } from './diagrams/common/common.js';
import isEmpty from 'lodash-es/isEmpty.js';
import { setA11yDiagramInfo, addSVGa11yTitleDescription } from './accessibility.js';
-import type { DiagramStyleClassDef } from './diagram-api/types.js';
+import type { DiagramMetadata, DiagramStyleClassDef } from './diagram-api/types.js';
import { preprocessDiagram } from './preprocess.js';
import { decodeEntities } from './utils.js';
@@ -519,6 +519,11 @@ function initialize(options: MermaidConfig = {}) {
addDiagrams();
}
+const getDiagramFromText = (text: string, metadata: Pick = {}) => {
+ const { code } = preprocessDiagram(text);
+ return getDiagramFromTextInternal(code, metadata);
+};
+
/**
* Add accessibility (a11y) information to the diagram.
*
diff --git a/packages/mermaid/src/schemas/config.schema.yaml b/packages/mermaid/src/schemas/config.schema.yaml
index ee92b4875..2791c32d4 100644
--- a/packages/mermaid/src/schemas/config.schema.yaml
+++ b/packages/mermaid/src/schemas/config.schema.yaml
@@ -1863,6 +1863,7 @@ $defs: # JSON Schema definition (maybe we should move these to a separate file)
unevaluatedProperties: false
required:
- titleTopMargin
+ - subGraphTitleMargin
- diagramPadding
- htmlLabels
- nodeSpacing
@@ -1875,6 +1876,20 @@ $defs: # JSON Schema definition (maybe we should move these to a separate file)
titleTopMargin:
$ref: '#/$defs/GitGraphDiagramConfig/properties/titleTopMargin'
default: 25
+ subGraphTitleMargin:
+ description: |
+ Defines a top/bottom margin for subgraph titles
+ type: object
+ properties:
+ top:
+ type: integer
+ minimum: 0
+ bottom:
+ type: integer
+ minimum: 0
+ default:
+ top: 0
+ bottom: 0
arrowMarkerAbsolute:
type: boolean # TODO, is this actually used here (it has no default value but was in types)
diagramPadding:
diff --git a/packages/mermaid/src/setupGraphViewbox.js b/packages/mermaid/src/setupGraphViewbox.js
index ba74b79fd..d3df6db7c 100644
--- a/packages/mermaid/src/setupGraphViewbox.js
+++ b/packages/mermaid/src/setupGraphViewbox.js
@@ -44,6 +44,7 @@ export const configureSvgSize = function (svgElem, height, width, useMaxWidth) {
const attrs = calculateSvgSizeAttrs(height, width, useMaxWidth);
d3Attrs(svgElem, attrs);
};
+
export const setupGraphViewbox = function (graph, svgElem, padding, useMaxWidth) {
const svgBounds = svgElem.node().getBBox();
const sWidth = svgBounds.width;
@@ -55,26 +56,13 @@ export const setupGraphViewbox = function (graph, svgElem, padding, useMaxWidth)
let height = 0;
log.info(`Graph bounds: ${width}x${height}`, graph);
- // let tx = 0;
- // let ty = 0;
- // if (sWidth > width) {
- // tx = (sWidth - width) / 2 + padding;
width = sWidth + padding * 2;
- // } else {
- // if (Math.abs(sWidth - width) >= 2 * padding + 1) {
- // width = width - padding;
- // }
- // }
- // if (sHeight > height) {
- // ty = (sHeight - height) / 2 + padding;
height = sHeight + padding * 2;
- // }
log.info(`Calculated bounds: ${width}x${height}`);
configureSvgSize(svgElem, height, width, useMaxWidth);
// Ensure the viewBox includes the whole svgBounds area with extra space for padding
- // const vBox = `0 0 ${width} ${height}`;
const vBox = `${svgBounds.x - padding} ${svgBounds.y - padding} ${
svgBounds.width + 2 * padding
} ${svgBounds.height + 2 * padding}`;
diff --git a/packages/mermaid/src/utils/lineWithOffset.ts b/packages/mermaid/src/utils/lineWithOffset.ts
index f348d3eb3..af0cd3b46 100644
--- a/packages/mermaid/src/utils/lineWithOffset.ts
+++ b/packages/mermaid/src/utils/lineWithOffset.ts
@@ -19,9 +19,12 @@ const markerOffsets = {
* @returns The angle, deltaX and deltaY
*/
function calculateDeltaAndAngle(
- point1: Point | [number, number],
- point2: Point | [number, number]
+ point1?: Point | [number, number],
+ point2?: Point | [number, number]
): { angle: number; deltaX: number; deltaY: number } {
+ if (point1 === undefined || point2 === undefined) {
+ return { angle: 0, deltaX: 0, deltaY: 0 };
+ }
point1 = pointTransformer(point1);
point2 = pointTransformer(point2);
const [x1, y1] = [point1.x, point1.y];
@@ -90,3 +93,44 @@ export const getLineFunctionsWithOffset = (
},
};
};
+
+if (import.meta.vitest) {
+ const { it, expect, describe } = import.meta.vitest;
+ describe('calculateDeltaAndAngle', () => {
+ it('should calculate the angle and deltas between two points', () => {
+ expect(calculateDeltaAndAngle([0, 0], [0, 1])).toStrictEqual({
+ angle: 1.5707963267948966,
+ deltaX: 0,
+ deltaY: 1,
+ });
+ expect(calculateDeltaAndAngle([1, 0], [0, -1])).toStrictEqual({
+ angle: 0.7853981633974483,
+ deltaX: -1,
+ deltaY: -1,
+ });
+ expect(calculateDeltaAndAngle({ x: 1, y: 0 }, [0, -1])).toStrictEqual({
+ angle: 0.7853981633974483,
+ deltaX: -1,
+ deltaY: -1,
+ });
+ expect(calculateDeltaAndAngle({ x: 1, y: 0 }, { x: 1, y: 0 })).toStrictEqual({
+ angle: NaN,
+ deltaX: 0,
+ deltaY: 0,
+ });
+ });
+
+ it('should calculate the angle and deltas if one point in undefined', () => {
+ expect(calculateDeltaAndAngle(undefined, [0, 1])).toStrictEqual({
+ angle: 0,
+ deltaX: 0,
+ deltaY: 0,
+ });
+ expect(calculateDeltaAndAngle([0, 1], undefined)).toStrictEqual({
+ angle: 0,
+ deltaX: 0,
+ deltaY: 0,
+ });
+ });
+ });
+}
diff --git a/packages/mermaid/src/utils/subGraphTitleMargins.spec.ts b/packages/mermaid/src/utils/subGraphTitleMargins.spec.ts
new file mode 100644
index 000000000..c607f8bce
--- /dev/null
+++ b/packages/mermaid/src/utils/subGraphTitleMargins.spec.ts
@@ -0,0 +1,22 @@
+import { getSubGraphTitleMargins } from './subGraphTitleMargins.js';
+import * as configApi from '../config.js';
+
+describe('getSubGraphTitleMargins', () => {
+ it('should get subgraph title margins after config has been set', () => {
+ const config_0 = {
+ flowchart: {
+ subGraphTitleMargin: {
+ top: 10,
+ bottom: 5,
+ },
+ },
+ };
+
+ configApi.setSiteConfig(config_0);
+ expect(getSubGraphTitleMargins(config_0)).toEqual({
+ subGraphTitleTopMargin: 10,
+ subGraphTitleBottomMargin: 5,
+ subGraphTitleTotalMargin: 15,
+ });
+ });
+});
diff --git a/packages/mermaid/src/utils/subGraphTitleMargins.ts b/packages/mermaid/src/utils/subGraphTitleMargins.ts
new file mode 100644
index 000000000..426f4770d
--- /dev/null
+++ b/packages/mermaid/src/utils/subGraphTitleMargins.ts
@@ -0,0 +1,21 @@
+import type { FlowchartDiagramConfig } from '../config.type.js';
+
+export const getSubGraphTitleMargins = ({
+ flowchart,
+}: {
+ flowchart: FlowchartDiagramConfig;
+}): {
+ subGraphTitleTopMargin: number;
+ subGraphTitleBottomMargin: number;
+ subGraphTitleTotalMargin: number;
+} => {
+ const subGraphTitleTopMargin = flowchart?.subGraphTitleMargin?.top ?? 0;
+ const subGraphTitleBottomMargin = flowchart?.subGraphTitleMargin?.bottom ?? 0;
+ const subGraphTitleTotalMargin = subGraphTitleTopMargin + subGraphTitleBottomMargin;
+
+ return {
+ subGraphTitleTopMargin,
+ subGraphTitleBottomMargin,
+ subGraphTitleTotalMargin,
+ };
+};
diff --git a/packages/mermaid/tsconfig.json b/packages/mermaid/tsconfig.json
index c49ba69b0..78e3cf2de 100644
--- a/packages/mermaid/tsconfig.json
+++ b/packages/mermaid/tsconfig.json
@@ -2,7 +2,8 @@
"extends": "../../tsconfig.json",
"compilerOptions": {
"rootDir": "./src",
- "outDir": "./dist"
+ "outDir": "./dist",
+ "types": ["vitest/importMeta", "vitest/globals"]
},
"include": ["./src/**/*.ts", "./package.json"]
}
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 1106439c8..871c32f0d 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -377,7 +377,7 @@ importers:
version: 1.0.0-alpha.72(@algolia/client-search@4.19.1)(@types/node@18.17.5)(search-insights@2.7.0)
vitepress-plugin-search:
specifier: ^1.0.4-alpha.20
- version: 1.0.4-alpha.20(flexsearch@0.7.31)(vitepress@1.0.0-alpha.72)(vue@3.3.7)
+ version: 1.0.4-alpha.20(flexsearch@0.7.31)(vitepress@1.0.0-alpha.72)(vue@3.3.8)
packages/mermaid-example-diagram:
dependencies:
@@ -448,8 +448,8 @@ importers:
specifier: ^0.57.0
version: 0.57.1
'@vite-pwa/vitepress':
- specifier: ^0.2.0
- version: 0.2.0(vite-plugin-pwa@0.16.0)
+ specifier: ^0.3.0
+ version: 0.3.0(vite-plugin-pwa@0.17.0)
'@vitejs/plugin-vue':
specifier: ^4.2.1
version: 4.2.1(vite@4.4.9)(vue@3.3.4)
@@ -472,11 +472,11 @@ importers:
specifier: ^4.3.9
version: 4.4.9(@types/node@18.17.5)
vite-plugin-pwa:
- specifier: ^0.16.0
- version: 0.16.0(vite@4.4.9)(workbox-build@7.0.0)(workbox-window@7.0.0)
+ specifier: ^0.17.0
+ version: 0.17.0(vite@4.4.9)(workbox-build@7.0.0)(workbox-window@7.0.0)
vitepress:
- specifier: 1.0.0-rc.25
- version: 1.0.0-rc.25(@algolia/client-search@4.19.1)(@types/node@18.17.5)(postcss@8.4.31)(search-insights@2.7.0)(typescript@5.1.6)
+ specifier: 1.0.0-rc.31
+ version: 1.0.0-rc.31(@algolia/client-search@4.19.1)(@types/node@18.17.5)(postcss@8.4.31)(search-insights@2.7.0)(typescript@5.1.6)
workbox-window:
specifier: ^7.0.0
version: 7.0.0
@@ -698,10 +698,6 @@ packages:
find-up: 5.0.0
dev: true
- /@antfu/utils@0.7.5:
- resolution: {integrity: sha512-dlR6LdS+0SzOAPx/TPRhnoi7hE251OVeT2Snw0RguNbBSbjUHdWr0l3vcUUDg26rEysT89kCbtw1lVorBXLLCg==}
- dev: true
-
/@antfu/utils@0.7.6:
resolution: {integrity: sha512-pvFiLP2BeOKA/ZOS6jxx4XhKzdVLHDhGlFEaZ2flWWYf2xOqVniqpk38I04DFRyz+L0ASggl7SkItTc+ZLju4w==}
dev: true
@@ -3029,6 +3025,15 @@ packages:
dev: true
optional: true
+ /@esbuild/android-arm64@0.19.6:
+ resolution: {integrity: sha512-KQ/hbe9SJvIJ4sR+2PcZ41IBV+LPJyYp6V1K1P1xcMRup9iYsBoQn4MzE3mhMLOld27Au2eDcLlIREeKGUXpHQ==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@esbuild/android-arm@0.18.20:
resolution: {integrity: sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==}
engines: {node: '>=12'}
@@ -3047,6 +3052,15 @@ packages:
dev: true
optional: true
+ /@esbuild/android-arm@0.19.6:
+ resolution: {integrity: sha512-muPzBqXJKCbMYoNbb1JpZh/ynl0xS6/+pLjrofcR3Nad82SbsCogYzUE6Aq9QT3cLP0jR/IVK/NHC9b90mSHtg==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@esbuild/android-x64@0.18.20:
resolution: {integrity: sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==}
engines: {node: '>=12'}
@@ -3065,6 +3079,15 @@ packages:
dev: true
optional: true
+ /@esbuild/android-x64@0.19.6:
+ resolution: {integrity: sha512-VVJVZQ7p5BBOKoNxd0Ly3xUM78Y4DyOoFKdkdAe2m11jbh0LEU4bPles4e/72EMl4tapko8o915UalN/5zhspg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@esbuild/darwin-arm64@0.18.20:
resolution: {integrity: sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==}
engines: {node: '>=12'}
@@ -3083,6 +3106,15 @@ packages:
dev: true
optional: true
+ /@esbuild/darwin-arm64@0.19.6:
+ resolution: {integrity: sha512-91LoRp/uZAKx6ESNspL3I46ypwzdqyDLXZH7x2QYCLgtnaU08+AXEbabY2yExIz03/am0DivsTtbdxzGejfXpA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@esbuild/darwin-x64@0.18.20:
resolution: {integrity: sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==}
engines: {node: '>=12'}
@@ -3101,6 +3133,15 @@ packages:
dev: true
optional: true
+ /@esbuild/darwin-x64@0.19.6:
+ resolution: {integrity: sha512-QCGHw770ubjBU1J3ZkFJh671MFajGTYMZumPs9E/rqU52md6lIil97BR0CbPq6U+vTh3xnTNDHKRdR8ggHnmxQ==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@esbuild/freebsd-arm64@0.18.20:
resolution: {integrity: sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==}
engines: {node: '>=12'}
@@ -3119,6 +3160,15 @@ packages:
dev: true
optional: true
+ /@esbuild/freebsd-arm64@0.19.6:
+ resolution: {integrity: sha512-J53d0jGsDcLzWk9d9SPmlyF+wzVxjXpOH7jVW5ae7PvrDst4kiAz6sX+E8btz0GB6oH12zC+aHRD945jdjF2Vg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@esbuild/freebsd-x64@0.18.20:
resolution: {integrity: sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==}
engines: {node: '>=12'}
@@ -3137,6 +3187,15 @@ packages:
dev: true
optional: true
+ /@esbuild/freebsd-x64@0.19.6:
+ resolution: {integrity: sha512-hn9qvkjHSIB5Z9JgCCjED6YYVGCNpqB7dEGavBdG6EjBD8S/UcNUIlGcB35NCkMETkdYwfZSvD9VoDJX6VeUVA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [freebsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@esbuild/linux-arm64@0.18.20:
resolution: {integrity: sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==}
engines: {node: '>=12'}
@@ -3155,6 +3214,15 @@ packages:
dev: true
optional: true
+ /@esbuild/linux-arm64@0.19.6:
+ resolution: {integrity: sha512-HQCOrk9XlH3KngASLaBfHpcoYEGUt829A9MyxaI8RMkfRA8SakG6YQEITAuwmtzFdEu5GU4eyhKcpv27dFaOBg==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@esbuild/linux-arm@0.18.20:
resolution: {integrity: sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==}
engines: {node: '>=12'}
@@ -3173,6 +3241,15 @@ packages:
dev: true
optional: true
+ /@esbuild/linux-arm@0.19.6:
+ resolution: {integrity: sha512-G8IR5zFgpXad/Zp7gr7ZyTKyqZuThU6z1JjmRyN1vSF8j0bOlGzUwFSMTbctLAdd7QHpeyu0cRiuKrqK1ZTwvQ==}
+ engines: {node: '>=12'}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@esbuild/linux-ia32@0.18.20:
resolution: {integrity: sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==}
engines: {node: '>=12'}
@@ -3191,6 +3268,15 @@ packages:
dev: true
optional: true
+ /@esbuild/linux-ia32@0.19.6:
+ resolution: {integrity: sha512-22eOR08zL/OXkmEhxOfshfOGo8P69k8oKHkwkDrUlcB12S/sw/+COM4PhAPT0cAYW/gpqY2uXp3TpjQVJitz7w==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@esbuild/linux-loong64@0.18.20:
resolution: {integrity: sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==}
engines: {node: '>=12'}
@@ -3209,6 +3295,15 @@ packages:
dev: true
optional: true
+ /@esbuild/linux-loong64@0.19.6:
+ resolution: {integrity: sha512-82RvaYAh/SUJyjWA8jDpyZCHQjmEggL//sC7F3VKYcBMumQjUL3C5WDl/tJpEiKtt7XrWmgjaLkrk205zfvwTA==}
+ engines: {node: '>=12'}
+ cpu: [loong64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@esbuild/linux-mips64el@0.18.20:
resolution: {integrity: sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==}
engines: {node: '>=12'}
@@ -3227,6 +3322,15 @@ packages:
dev: true
optional: true
+ /@esbuild/linux-mips64el@0.19.6:
+ resolution: {integrity: sha512-8tvnwyYJpR618vboIv2l8tK2SuK/RqUIGMfMENkeDGo3hsEIrpGldMGYFcWxWeEILe5Fi72zoXLmhZ7PR23oQA==}
+ engines: {node: '>=12'}
+ cpu: [mips64el]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@esbuild/linux-ppc64@0.18.20:
resolution: {integrity: sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==}
engines: {node: '>=12'}
@@ -3245,6 +3349,15 @@ packages:
dev: true
optional: true
+ /@esbuild/linux-ppc64@0.19.6:
+ resolution: {integrity: sha512-Qt+D7xiPajxVNk5tQiEJwhmarNnLPdjXAoA5uWMpbfStZB0+YU6a3CtbWYSy+sgAsnyx4IGZjWsTzBzrvg/fMA==}
+ engines: {node: '>=12'}
+ cpu: [ppc64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@esbuild/linux-riscv64@0.18.20:
resolution: {integrity: sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==}
engines: {node: '>=12'}
@@ -3263,6 +3376,15 @@ packages:
dev: true
optional: true
+ /@esbuild/linux-riscv64@0.19.6:
+ resolution: {integrity: sha512-lxRdk0iJ9CWYDH1Wpnnnc640ajF4RmQ+w6oHFZmAIYu577meE9Ka/DCtpOrwr9McMY11ocbp4jirgGgCi7Ls/g==}
+ engines: {node: '>=12'}
+ cpu: [riscv64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@esbuild/linux-s390x@0.18.20:
resolution: {integrity: sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==}
engines: {node: '>=12'}
@@ -3281,6 +3403,15 @@ packages:
dev: true
optional: true
+ /@esbuild/linux-s390x@0.19.6:
+ resolution: {integrity: sha512-MopyYV39vnfuykHanRWHGRcRC3AwU7b0QY4TI8ISLfAGfK+tMkXyFuyT1epw/lM0pflQlS53JoD22yN83DHZgA==}
+ engines: {node: '>=12'}
+ cpu: [s390x]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@esbuild/linux-x64@0.18.20:
resolution: {integrity: sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==}
engines: {node: '>=12'}
@@ -3299,6 +3430,15 @@ packages:
dev: true
optional: true
+ /@esbuild/linux-x64@0.19.6:
+ resolution: {integrity: sha512-UWcieaBzsN8WYbzFF5Jq7QULETPcQvlX7KL4xWGIB54OknXJjBO37sPqk7N82WU13JGWvmDzFBi1weVBajPovg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@esbuild/netbsd-x64@0.18.20:
resolution: {integrity: sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==}
engines: {node: '>=12'}
@@ -3317,6 +3457,15 @@ packages:
dev: true
optional: true
+ /@esbuild/netbsd-x64@0.19.6:
+ resolution: {integrity: sha512-EpWiLX0fzvZn1wxtLxZrEW+oQED9Pwpnh+w4Ffv8ZLuMhUoqR9q9rL4+qHW8F4Mg5oQEKxAoT0G+8JYNqCiR6g==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [netbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@esbuild/openbsd-x64@0.18.20:
resolution: {integrity: sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==}
engines: {node: '>=12'}
@@ -3335,6 +3484,15 @@ packages:
dev: true
optional: true
+ /@esbuild/openbsd-x64@0.19.6:
+ resolution: {integrity: sha512-fFqTVEktM1PGs2sLKH4M5mhAVEzGpeZJuasAMRnvDZNCV0Cjvm1Hu35moL2vC0DOrAQjNTvj4zWrol/lwQ8Deg==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [openbsd]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@esbuild/sunos-x64@0.18.20:
resolution: {integrity: sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==}
engines: {node: '>=12'}
@@ -3353,6 +3511,15 @@ packages:
dev: true
optional: true
+ /@esbuild/sunos-x64@0.19.6:
+ resolution: {integrity: sha512-M+XIAnBpaNvaVAhbe3uBXtgWyWynSdlww/JNZws0FlMPSBy+EpatPXNIlKAdtbFVII9OpX91ZfMb17TU3JKTBA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [sunos]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@esbuild/win32-arm64@0.18.20:
resolution: {integrity: sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==}
engines: {node: '>=12'}
@@ -3371,6 +3538,15 @@ packages:
dev: true
optional: true
+ /@esbuild/win32-arm64@0.19.6:
+ resolution: {integrity: sha512-2DchFXn7vp/B6Tc2eKdTsLzE0ygqKkNUhUBCNtMx2Llk4POIVMUq5rUYjdcedFlGLeRe1uLCpVvCmE+G8XYybA==}
+ engines: {node: '>=12'}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@esbuild/win32-ia32@0.18.20:
resolution: {integrity: sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==}
engines: {node: '>=12'}
@@ -3389,6 +3565,15 @@ packages:
dev: true
optional: true
+ /@esbuild/win32-ia32@0.19.6:
+ resolution: {integrity: sha512-PBo/HPDQllyWdjwAVX+Gl2hH0dfBydL97BAH/grHKC8fubqp02aL4S63otZ25q3sBdINtOBbz1qTZQfXbP4VBg==}
+ engines: {node: '>=12'}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@esbuild/win32-x64@0.18.20:
resolution: {integrity: sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==}
engines: {node: '>=12'}
@@ -3407,6 +3592,15 @@ packages:
dev: true
optional: true
+ /@esbuild/win32-x64@0.19.6:
+ resolution: {integrity: sha512-OE7yIdbDif2kKfrGa+V0vx/B3FJv2L4KnIiLlvtibPyO9UkgO3rzYE0HhpREo2vmJ1Ixq1zwm9/0er+3VOSZJA==}
+ engines: {node: '>=12'}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@eslint-community/eslint-utils@4.4.0(eslint@8.47.0):
resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==}
engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0}
@@ -3498,7 +3692,7 @@ packages:
resolution: {integrity: sha512-M/w3PkN8zQYXi8N6qK/KhnYMfEbbb6Sk8RZVn8g+Pmmu5ybw177RpsaGwpziyHeUsu4etrexYSWq3rwnIqzYCg==}
dependencies:
'@antfu/install-pkg': 0.1.1
- '@antfu/utils': 0.7.5
+ '@antfu/utils': 0.7.6
'@iconify/types': 2.0.0
debug: 4.3.4(supports-color@8.1.1)
kolorist: 1.8.0
@@ -3838,7 +4032,7 @@ packages:
engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0}
dependencies:
cross-spawn: 7.0.3
- fast-glob: 3.3.1
+ fast-glob: 3.3.2
is-glob: 4.0.3
open: 9.1.0
picocolors: 1.0.0
@@ -3908,7 +4102,7 @@ packages:
tslib:
optional: true
dependencies:
- '@rollup/pluginutils': 5.0.3(rollup@2.79.1)
+ '@rollup/pluginutils': 5.0.3
resolve: 1.22.4
typescript: 5.1.6
dev: true
@@ -3925,7 +4119,7 @@ packages:
rollup: 2.79.1
dev: true
- /@rollup/pluginutils@5.0.3(rollup@2.79.1):
+ /@rollup/pluginutils@5.0.3:
resolution: {integrity: sha512-hfllNN4a80rwNQ9QCxhxuHCGHMAvabXqxNdaChUSSadMre7t4iEUI6fFAhBOn/eIYTgYVhBv7vCLsAJ4u3lf3g==}
engines: {node: '>=14.0.0'}
peerDependencies:
@@ -3937,7 +4131,6 @@ packages:
'@types/estree': 1.0.1
estree-walker: 2.0.2
picomatch: 2.3.1
- rollup: 2.79.1
dev: true
/@rollup/pluginutils@5.0.5(rollup@2.79.1):
@@ -3955,6 +4148,102 @@ packages:
rollup: 2.79.1
dev: true
+ /@rollup/rollup-android-arm-eabi@4.5.0:
+ resolution: {integrity: sha512-OINaBGY+Wc++U0rdr7BLuFClxcoWaVW3vQYqmQq6B3bqQ/2olkaoz+K8+af/Mmka/C2yN5j+L9scBkv4BtKsDA==}
+ cpu: [arm]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-android-arm64@4.5.0:
+ resolution: {integrity: sha512-UdMf1pOQc4ZmUA/NTmKhgJTBimbSKnhPS2zJqucqFyBRFPnPDtwA8MzrGNTjDeQbIAWfpJVAlxejw+/lQyBK/w==}
+ cpu: [arm64]
+ os: [android]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-darwin-arm64@4.5.0:
+ resolution: {integrity: sha512-L0/CA5p/idVKI+c9PcAPGorH6CwXn6+J0Ys7Gg1axCbTPgI8MeMlhA6fLM9fK+ssFhqogMHFC8HDvZuetOii7w==}
+ cpu: [arm64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-darwin-x64@4.5.0:
+ resolution: {integrity: sha512-QZCbVqU26mNlLn8zi/XDDquNmvcr4ON5FYAHQQsyhrHx8q+sQi/6xduoznYXwk/KmKIXG5dLfR0CvY+NAWpFYQ==}
+ cpu: [x64]
+ os: [darwin]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-linux-arm-gnueabihf@4.5.0:
+ resolution: {integrity: sha512-VpSQ+xm93AeV33QbYslgf44wc5eJGYfYitlQzAi3OObu9iwrGXEnmu5S3ilkqE3Pr/FkgOiJKV/2p0ewf4Hrtg==}
+ cpu: [arm]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-linux-arm64-gnu@4.5.0:
+ resolution: {integrity: sha512-OrEyIfpxSsMal44JpEVx9AEcGpdBQG1ZuWISAanaQTSMeStBW+oHWwOkoqR54bw3x8heP8gBOyoJiGg+fLY8qQ==}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-linux-arm64-musl@4.5.0:
+ resolution: {integrity: sha512-1H7wBbQuE6igQdxMSTjtFfD+DGAudcYWhp106z/9zBA8OQhsJRnemO4XGavdzHpGhRtRxbgmUGdO3YQgrWf2RA==}
+ cpu: [arm64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-linux-x64-gnu@4.5.0:
+ resolution: {integrity: sha512-FVyFI13tXw5aE65sZdBpNjPVIi4Q5mARnL/39UIkxvSgRAIqCo5sCpCELk0JtXHGee2owZz5aNLbWNfBHzr71Q==}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-linux-x64-musl@4.5.0:
+ resolution: {integrity: sha512-eBPYl2sLpH/o8qbSz6vPwWlDyThnQjJfcDOGFbNjmjb44XKC1F5dQfakOsADRVrXCNzM6ZsSIPDG5dc6HHLNFg==}
+ cpu: [x64]
+ os: [linux]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-win32-arm64-msvc@4.5.0:
+ resolution: {integrity: sha512-xaOHIfLOZypoQ5U2I6rEaugS4IYtTgP030xzvrBf5js7p9WI9wik07iHmsKaej8Z83ZDxN5GyypfoyKV5O5TJA==}
+ cpu: [arm64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-win32-ia32-msvc@4.5.0:
+ resolution: {integrity: sha512-Al6quztQUrHwcOoU2TuFblUQ5L+/AmPBXFR6dUvyo4nRj2yQRK0WIUaGMF/uwKulvRcXkpHe3k9A8Vf93VDktA==}
+ cpu: [ia32]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
+ /@rollup/rollup-win32-x64-msvc@4.5.0:
+ resolution: {integrity: sha512-8kdW+brNhI/NzJ4fxDufuJUjepzINqJKLGHuxyAtpPG9bMbn8P5mtaCcbOm0EzLJ+atg+kF9dwg8jpclkVqx5w==}
+ cpu: [x64]
+ os: [win32]
+ requiresBuild: true
+ dev: true
+ optional: true
+
/@sideway/address@4.1.4:
resolution: {integrity: sha512-7vwq+rOHVWjyXxVlR76Agnvhy8I9rpzjosTESvmhNeXOXdZZB15Fl+TI9x1SiHZH5Jv2wTGduSxFDIaq0m3DUw==}
dependencies:
@@ -4379,6 +4668,12 @@ packages:
'@types/node': 18.17.5
dev: true
+ /@types/hast@3.0.3:
+ resolution: {integrity: sha512-2fYGlaDy/qyLlhidX42wAH0KBi2TCjKMH8CHmBXgRlJ3Y+OXTiqsPQ6IWarZKwF1JoUcAJdPogv1d4b0COTpmQ==}
+ dependencies:
+ '@types/unist': 3.0.2
+ dev: true
+
/@types/http-cache-semantics@4.0.1:
resolution: {integrity: sha512-SZs7ekbP8CN0txVG2xVRH6EgKmEm31BOxA07vkFaETzZz1xh+cbt8BcI0slpymvwhx5dlFnQG2rTlPVQn+iRPQ==}
dev: true
@@ -4452,8 +4747,8 @@ packages:
'@types/mdurl': 1.0.2
dev: true
- /@types/markdown-it@13.0.5:
- resolution: {integrity: sha512-QhJP7hkq3FCrFNx0szMNCT/79CXfcEgUIA3jc5GBfeXqoKsk3R8JZm2wRXJ2DiyjbPE4VMFOSDemLFcUTZmHEQ==}
+ /@types/markdown-it@13.0.7:
+ resolution: {integrity: sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==}
dependencies:
'@types/linkify-it': 3.0.2
'@types/mdurl': 1.0.2
@@ -4464,6 +4759,12 @@ packages:
dependencies:
'@types/unist': 2.0.7
+ /@types/mdast@4.0.3:
+ resolution: {integrity: sha512-LsjtqsyF+d2/yFOYaN22dHZI1Cpwkrj+g06G8+qtUKlhovPW89YhqSnfKtMbkgmEtYpH2gydRNULd6y8mciAFg==}
+ dependencies:
+ '@types/unist': 3.0.2
+ dev: true
+
/@types/mdurl@1.0.2:
resolution: {integrity: sha512-eC4U9MlIcu2q0KQmXszyn5Akca/0jrQmwDRgpAMJai7qBWq4amIQhZyNau4VYGtCeALvW1/NtjzJJ567aZxfKA==}
dev: true
@@ -4607,6 +4908,10 @@ packages:
/@types/unist@2.0.7:
resolution: {integrity: sha512-cputDpIbFgLUaGQn6Vqg3/YsJwxUwHLO13v3i5ouxT4lat0khip9AEWxtERujXV9wxIB1EyF97BSJFt6vpdI8g==}
+ /@types/unist@3.0.2:
+ resolution: {integrity: sha512-dqId9J8K/vGi5Zr7oo212BGii5m3q5Hxlkwy3WpYuKPklmBEvsbMYYyLxAQpSffdLl/gdW0XUpKWFvYmyoWCoQ==}
+ dev: true
+
/@types/uuid@9.0.1:
resolution: {integrity: sha512-rFT3ak0/2trgvp4yYZo5iKFEPsET7vKydKF+VRCxlQ9bpheehyAJH89dAkaLEq/j/RZXJIqcgsmPJKUP1Z28HA==}
dev: true
@@ -4619,8 +4924,8 @@ packages:
resolution: {integrity: sha512-4p9vcSmxAayx72yn70joFoL44c9MO/0+iVEBIQXe3v2h2SiAsEIo/G5v6ObFWvNKRFjbrVadNf9LqEEZeQPzdA==}
dev: true
- /@types/web-bluetooth@0.0.18:
- resolution: {integrity: sha512-v/ZHEj9xh82usl8LMR3GarzFY1IrbXJw5L4QfQhokjRV91q+SelFqxQWSep1ucXEZ22+dSTwLFkXeur25sPIbw==}
+ /@types/web-bluetooth@0.0.20:
+ resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==}
dev: true
/@types/ws@8.5.5:
@@ -4970,6 +5275,10 @@ packages:
eslint-visitor-keys: 3.4.3
dev: true
+ /@ungap/structured-clone@1.2.0:
+ resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==}
+ dev: true
+
/@unocss/astro@0.57.1(rollup@2.79.1)(vite@4.4.9):
resolution: {integrity: sha512-KNaqN/SGM/uz1QitajIkzNEw0jy9Zx9Wp8fl4GhfGYEMAN2+M4cuvBZRmlb6cLctSXmSAJQDG91ivbD1JijGnw==}
peerDependencies:
@@ -5000,7 +5309,7 @@ packages:
chokidar: 3.5.3
colorette: 2.0.20
consola: 3.2.3
- fast-glob: 3.3.1
+ fast-glob: 3.3.2
magic-string: 0.30.5
pathe: 1.1.1
perfect-debounce: 1.0.0
@@ -5044,7 +5353,7 @@ packages:
'@unocss/core': 0.57.1
'@unocss/rule-utils': 0.57.1
css-tree: 2.3.1
- fast-glob: 3.3.1
+ fast-glob: 3.3.2
magic-string: 0.30.5
postcss: 8.4.31
dev: true
@@ -5171,19 +5480,19 @@ packages:
'@unocss/scope': 0.57.1
'@unocss/transformer-directives': 0.57.1
chokidar: 3.5.3
- fast-glob: 3.3.1
+ fast-glob: 3.3.2
magic-string: 0.30.5
vite: 4.4.9(@types/node@18.17.5)
transitivePeerDependencies:
- rollup
dev: true
- /@vite-pwa/vitepress@0.2.0(vite-plugin-pwa@0.16.0):
- resolution: {integrity: sha512-dVQVaP6NB9woCFe4UASUqRp7uwBQJOVXlJlqK4krqXcbb3NuXIXIWOnU7HLpJnHqZj5U/81gKtLN6gs5gJBwiQ==}
+ /@vite-pwa/vitepress@0.3.0(vite-plugin-pwa@0.17.0):
+ resolution: {integrity: sha512-7akiTt0laHJRSJ7lxPttGHYBoC2J+FgWJr0TGYQd2jPe/8nou+YSDwBGpOV+/qeobX2uzff8kew02n/07JRe9Q==}
peerDependencies:
- vite-plugin-pwa: '>=0.16.3 <1'
+ vite-plugin-pwa: '>=0.17.0 <1'
dependencies:
- vite-plugin-pwa: 0.16.0(vite@4.4.9)(workbox-build@7.0.0)(workbox-window@7.0.0)
+ vite-plugin-pwa: 0.17.0(vite@4.4.9)(workbox-build@7.0.0)(workbox-window@7.0.0)
dev: true
/@vitejs/plugin-vue@4.2.1(vite@4.4.9)(vue@3.3.4):
@@ -5208,15 +5517,15 @@ packages:
vue: 3.3.4
dev: true
- /@vitejs/plugin-vue@4.3.1(vite@4.5.0)(vue@3.3.7):
- resolution: {integrity: sha512-tUBEtWcF7wFtII7ayNiLNDTCE1X1afySEo+XNVMNkFXaThENyCowIEX095QqbJZGTgoOcSVDJGlnde2NG4jtbQ==}
+ /@vitejs/plugin-vue@4.5.0(vite@5.0.2)(vue@3.3.8):
+ resolution: {integrity: sha512-a2WSpP8X8HTEww/U00bU4mX1QpLINNuz/2KMNpLsdu3BzOpak3AGI1CJYBTXcc4SPhaD0eNRUp7IyQK405L5dQ==}
engines: {node: ^14.18.0 || >=16.0.0}
peerDependencies:
- vite: ^4.0.0
+ vite: ^4.0.0 || ^5.0.0
vue: ^3.2.25
dependencies:
- vite: 4.5.0(@types/node@18.17.5)
- vue: 3.3.7(typescript@5.1.6)
+ vite: 5.0.2(@types/node@18.17.5)
+ vue: 3.3.8(typescript@5.1.6)
dev: true
/@vitest/coverage-v8@0.34.0(vitest@0.34.0):
@@ -5276,7 +5585,7 @@ packages:
vitest: '>=0.30.1 <1'
dependencies:
'@vitest/utils': 0.34.0
- fast-glob: 3.3.1
+ fast-glob: 3.3.2
fflate: 0.8.0
flatted: 3.2.7
pathe: 1.1.1
@@ -5307,16 +5616,16 @@ packages:
/@vue/compiler-core@3.3.4:
resolution: {integrity: sha512-cquyDNvZ6jTbf/+x+AgM2Arrp6G4Dzbb0R64jiG804HRMfRiFXWI6kqUVqZ6ZR0bQhIoQjB4+2bhNtVwndW15g==}
dependencies:
- '@babel/parser': 7.22.10
+ '@babel/parser': 7.23.0
'@vue/shared': 3.3.4
estree-walker: 2.0.2
source-map-js: 1.0.2
- /@vue/compiler-core@3.3.7:
- resolution: {integrity: sha512-pACdY6YnTNVLXsB86YD8OF9ihwpolzhhtdLVHhBL6do/ykr6kKXNYABRtNMGrsQXpEXXyAdwvWWkuTbs4MFtPQ==}
+ /@vue/compiler-core@3.3.8:
+ resolution: {integrity: sha512-hN/NNBUECw8SusQvDSqqcVv6gWq8L6iAktUR0UF3vGu2OhzRqcOiAno0FmBJWwxhYEXRlQJT5XnoKsVq1WZx4g==}
dependencies:
'@babel/parser': 7.23.0
- '@vue/shared': 3.3.7
+ '@vue/shared': 3.3.8
estree-walker: 2.0.2
source-map-js: 1.0.2
dev: true
@@ -5327,11 +5636,11 @@ packages:
'@vue/compiler-core': 3.3.4
'@vue/shared': 3.3.4
- /@vue/compiler-dom@3.3.7:
- resolution: {integrity: sha512-0LwkyJjnUPssXv/d1vNJ0PKfBlDoQs7n81CbO6Q0zdL7H1EzqYRrTVXDqdBVqro0aJjo/FOa1qBAPVI4PGSHBw==}
+ /@vue/compiler-dom@3.3.8:
+ resolution: {integrity: sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ==}
dependencies:
- '@vue/compiler-core': 3.3.7
- '@vue/shared': 3.3.7
+ '@vue/compiler-core': 3.3.8
+ '@vue/shared': 3.3.8
dev: true
/@vue/compiler-sfc@3.3.4:
@@ -5344,19 +5653,19 @@ packages:
'@vue/reactivity-transform': 3.3.4
'@vue/shared': 3.3.4
estree-walker: 2.0.2
- magic-string: 0.30.2
- postcss: 8.4.27
+ magic-string: 0.30.5
+ postcss: 8.4.31
source-map-js: 1.0.2
- /@vue/compiler-sfc@3.3.7:
- resolution: {integrity: sha512-7pfldWy/J75U/ZyYIXRVqvLRw3vmfxDo2YLMwVtWVNew8Sm8d6wodM+OYFq4ll/UxfqVr0XKiVwti32PCrruAw==}
+ /@vue/compiler-sfc@3.3.8:
+ resolution: {integrity: sha512-WMzbUrlTjfYF8joyT84HfwwXo+8WPALuPxhy+BZ6R4Aafls+jDBnSz8PDz60uFhuqFbl3HxRfxvDzrUf3THwpA==}
dependencies:
'@babel/parser': 7.23.0
- '@vue/compiler-core': 3.3.7
- '@vue/compiler-dom': 3.3.7
- '@vue/compiler-ssr': 3.3.7
- '@vue/reactivity-transform': 3.3.7
- '@vue/shared': 3.3.7
+ '@vue/compiler-core': 3.3.8
+ '@vue/compiler-dom': 3.3.8
+ '@vue/compiler-ssr': 3.3.8
+ '@vue/reactivity-transform': 3.3.8
+ '@vue/shared': 3.3.8
estree-walker: 2.0.2
magic-string: 0.30.5
postcss: 8.4.31
@@ -5369,11 +5678,11 @@ packages:
'@vue/compiler-dom': 3.3.4
'@vue/shared': 3.3.4
- /@vue/compiler-ssr@3.3.7:
- resolution: {integrity: sha512-TxOfNVVeH3zgBc82kcUv+emNHo+vKnlRrkv8YvQU5+Y5LJGJwSNzcmLUoxD/dNzv0bhQ/F0s+InlgV0NrApJZg==}
+ /@vue/compiler-ssr@3.3.8:
+ resolution: {integrity: sha512-hXCqQL/15kMVDBuoBYpUnSYT8doDNwsjvm3jTefnXr+ytn294ySnT8NlsFHmTgKNjwpuFy7XVV8yTeLtNl/P6w==}
dependencies:
- '@vue/compiler-dom': 3.3.7
- '@vue/shared': 3.3.7
+ '@vue/compiler-dom': 3.3.8
+ '@vue/shared': 3.3.8
dev: true
/@vue/devtools-api@6.5.0:
@@ -5392,12 +5701,12 @@ packages:
estree-walker: 2.0.2
magic-string: 0.30.5
- /@vue/reactivity-transform@3.3.7:
- resolution: {integrity: sha512-APhRmLVbgE1VPGtoLQoWBJEaQk4V8JUsqrQihImVqKT+8U6Qi3t5ATcg4Y9wGAPb3kIhetpufyZ1RhwbZCIdDA==}
+ /@vue/reactivity-transform@3.3.8:
+ resolution: {integrity: sha512-49CvBzmZNtcHua0XJ7GdGifM8GOXoUMOX4dD40Y5DxI3R8OUhMlvf2nvgUAcPxaXiV5MQQ1Nwy09ADpnLQUqRw==}
dependencies:
'@babel/parser': 7.23.0
- '@vue/compiler-core': 3.3.7
- '@vue/shared': 3.3.7
+ '@vue/compiler-core': 3.3.8
+ '@vue/shared': 3.3.8
estree-walker: 2.0.2
magic-string: 0.30.5
dev: true
@@ -5407,10 +5716,10 @@ packages:
dependencies:
'@vue/shared': 3.3.4
- /@vue/reactivity@3.3.7:
- resolution: {integrity: sha512-cZNVjWiw00708WqT0zRpyAgduG79dScKEPYJXq2xj/aMtk3SKvL3FBt2QKUlh6EHBJ1m8RhBY+ikBUzwc7/khg==}
+ /@vue/reactivity@3.3.8:
+ resolution: {integrity: sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw==}
dependencies:
- '@vue/shared': 3.3.7
+ '@vue/shared': 3.3.8
dev: true
/@vue/runtime-core@3.3.4:
@@ -5419,11 +5728,11 @@ packages:
'@vue/reactivity': 3.3.4
'@vue/shared': 3.3.4
- /@vue/runtime-core@3.3.7:
- resolution: {integrity: sha512-LHq9du3ubLZFdK/BP0Ysy3zhHqRfBn80Uc+T5Hz3maFJBGhci1MafccnL3rpd5/3wVfRHAe6c+PnlO2PAavPTQ==}
+ /@vue/runtime-core@3.3.8:
+ resolution: {integrity: sha512-qurzOlb6q26KWQ/8IShHkMDOuJkQnQcTIp1sdP4I9MbCf9FJeGVRXJFr2mF+6bXh/3Zjr9TDgURXrsCr9bfjUw==}
dependencies:
- '@vue/reactivity': 3.3.7
- '@vue/shared': 3.3.7
+ '@vue/reactivity': 3.3.8
+ '@vue/shared': 3.3.8
dev: true
/@vue/runtime-dom@3.3.4:
@@ -5433,11 +5742,11 @@ packages:
'@vue/shared': 3.3.4
csstype: 3.1.2
- /@vue/runtime-dom@3.3.7:
- resolution: {integrity: sha512-PFQU1oeJxikdDmrfoNQay5nD4tcPNYixUBruZzVX/l0eyZvFKElZUjW4KctCcs52nnpMGO6UDK+jF5oV4GT5Lw==}
+ /@vue/runtime-dom@3.3.8:
+ resolution: {integrity: sha512-Noy5yM5UIf9UeFoowBVgghyGGPIDPy1Qlqt0yVsUdAVbqI8eeMSsTqBtauaEoT2UFXUk5S64aWVNJN4MJ2vRdA==}
dependencies:
- '@vue/runtime-core': 3.3.7
- '@vue/shared': 3.3.7
+ '@vue/runtime-core': 3.3.8
+ '@vue/shared': 3.3.8
csstype: 3.1.2
dev: true
@@ -5450,21 +5759,21 @@ packages:
'@vue/shared': 3.3.4
vue: 3.3.4
- /@vue/server-renderer@3.3.7(vue@3.3.7):
- resolution: {integrity: sha512-UlpKDInd1hIZiNuVVVvLgxpfnSouxKQOSE2bOfQpBuGwxRV/JqqTCyyjXUWiwtVMyeRaZhOYYqntxElk8FhBhw==}
+ /@vue/server-renderer@3.3.8(vue@3.3.8):
+ resolution: {integrity: sha512-zVCUw7RFskvPuNlPn/8xISbrf0zTWsTSdYTsUTN1ERGGZGVnRxM2QZ3x1OR32+vwkkCm0IW6HmJ49IsPm7ilLg==}
peerDependencies:
- vue: 3.3.7
+ vue: 3.3.8
dependencies:
- '@vue/compiler-ssr': 3.3.7
- '@vue/shared': 3.3.7
- vue: 3.3.7(typescript@5.0.4)
+ '@vue/compiler-ssr': 3.3.8
+ '@vue/shared': 3.3.8
+ vue: 3.3.8(typescript@5.0.4)
dev: true
/@vue/shared@3.3.4:
resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==}
- /@vue/shared@3.3.7:
- resolution: {integrity: sha512-N/tbkINRUDExgcPTBvxNkvHGu504k8lzlNQRITVnm6YjOjwa4r0nnbd4Jb01sNpur5hAllyRJzSK5PvB9PPwRg==}
+ /@vue/shared@3.3.8:
+ resolution: {integrity: sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw==}
dev: true
/@vueuse/core@10.1.0(vue@3.3.4):
@@ -5491,20 +5800,20 @@ packages:
- vue
dev: true
- /@vueuse/core@10.5.0(vue@3.3.7):
- resolution: {integrity: sha512-z/tI2eSvxwLRjOhDm0h/SXAjNm8N5ld6/SC/JQs6o6kpJ6Ya50LnEL8g5hoYu005i28L0zqB5L5yAl8Jl26K3A==}
+ /@vueuse/core@10.6.1(vue@3.3.8):
+ resolution: {integrity: sha512-Pc26IJbqgC9VG1u6VY/xrXXfxD33hnvxBnKrLlA2LJlyHII+BSrRoTPJgGYq7qZOu61itITFUnm6QbacwZ4H8Q==}
dependencies:
- '@types/web-bluetooth': 0.0.18
- '@vueuse/metadata': 10.5.0
- '@vueuse/shared': 10.5.0(vue@3.3.7)
- vue-demi: 0.14.6(vue@3.3.7)
+ '@types/web-bluetooth': 0.0.20
+ '@vueuse/metadata': 10.6.1
+ '@vueuse/shared': 10.6.1(vue@3.3.8)
+ vue-demi: 0.14.6(vue@3.3.8)
transitivePeerDependencies:
- '@vue/composition-api'
- vue
dev: true
- /@vueuse/integrations@10.5.0(focus-trap@7.5.4)(vue@3.3.7):
- resolution: {integrity: sha512-fm5sXLCK0Ww3rRnzqnCQRmfjDURaI4xMsx+T+cec0ngQqHx/JgUtm8G0vRjwtonIeTBsH1Q8L3SucE+7K7upJQ==}
+ /@vueuse/integrations@10.6.1(focus-trap@7.5.4)(vue@3.3.8):
+ resolution: {integrity: sha512-mPDupuofMJ4DPmtX/FfP1MajmWRzYDv8WSaTCo8LQ5kFznjWgmUQ16ApjYqgMquqffNY6+IRMdMgosLDRZOSZA==}
peerDependencies:
async-validator: '*'
axios: '*'
@@ -5544,10 +5853,10 @@ packages:
universal-cookie:
optional: true
dependencies:
- '@vueuse/core': 10.5.0(vue@3.3.7)
- '@vueuse/shared': 10.5.0(vue@3.3.7)
+ '@vueuse/core': 10.6.1(vue@3.3.8)
+ '@vueuse/shared': 10.6.1(vue@3.3.8)
focus-trap: 7.5.4
- vue-demi: 0.14.6(vue@3.3.7)
+ vue-demi: 0.14.6(vue@3.3.8)
transitivePeerDependencies:
- '@vue/composition-api'
- vue
@@ -5561,8 +5870,8 @@ packages:
resolution: {integrity: sha512-Ema3YhNOa4swDsV0V7CEY5JXvK19JI/o1szFO1iWxdFg3vhdFtCtSTP26PCvbUpnUtNHBY2wx5y3WDXND5Pvnw==}
dev: true
- /@vueuse/metadata@10.5.0:
- resolution: {integrity: sha512-fEbElR+MaIYyCkeM0SzWkdoMtOpIwO72x8WsZHRE7IggiOlILttqttM69AS13nrDxosnDBYdyy3C5mR1LCxHsw==}
+ /@vueuse/metadata@10.6.1:
+ resolution: {integrity: sha512-qhdwPI65Bgcj23e5lpGfQsxcy0bMjCAsUGoXkJ7DsoeDUdasbZ2DBa4dinFCOER3lF4gwUv+UD2AlA11zdzMFw==}
dev: true
/@vueuse/shared@10.1.0(vue@3.3.4):
@@ -5583,10 +5892,10 @@ packages:
- vue
dev: true
- /@vueuse/shared@10.5.0(vue@3.3.7):
- resolution: {integrity: sha512-18iyxbbHYLst9MqU1X1QNdMHIjks6wC7XTVf0KNOv5es/Ms6gjVFCAAWTVP2JStuGqydg3DT+ExpFORUEi9yhg==}
+ /@vueuse/shared@10.6.1(vue@3.3.8):
+ resolution: {integrity: sha512-TECVDTIedFlL0NUfHWncf3zF9Gc4VfdxfQc8JFwoVZQmxpONhLxFrlm0eHQeidHj4rdTPL3KXJa0TZCk1wnc5Q==}
dependencies:
- vue-demi: 0.14.6(vue@3.3.7)
+ vue-demi: 0.14.6(vue@3.3.8)
transitivePeerDependencies:
- '@vue/composition-api'
- vue
@@ -6755,10 +7064,18 @@ packages:
engines: {node: '>=10'}
dev: true
+ /character-entities-html4@2.1.0:
+ resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==}
+ dev: true
+
/character-entities-legacy@1.1.4:
resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==}
dev: true
+ /character-entities-legacy@3.0.0:
+ resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==}
+ dev: true
+
/character-entities@1.2.4:
resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==}
dev: true
@@ -6791,7 +7108,7 @@ packages:
normalize-path: 3.0.0
readdirp: 3.6.0
optionalDependencies:
- fsevents: 2.3.2
+ fsevents: 2.3.3
/chrome-trace-event@1.0.3:
resolution: {integrity: sha512-p3KULyQg4S7NIHixdwbGX+nFHkoBiA4YQmyWtjb8XngSKV124nJmRysgAeujbUVb15vh+RvFUfCPqU7rXk+hZg==}
@@ -6980,6 +7297,10 @@ packages:
delayed-stream: 1.0.0
dev: true
+ /comma-separated-tokens@2.0.3:
+ resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==}
+ dev: true
+
/commander@10.0.1:
resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
engines: {node: '>=14'}
@@ -8259,6 +8580,12 @@ packages:
resolution: {integrity: sha512-T0NIuQpnTvFDATNuHN5roPwSBG83rFsuO+MXXH9/3N1eFbn4wcPjttvjMLEPWJ0RGUYgQE7cGgS3tNxbqCGM7g==}
dev: true
+ /devlop@1.1.0:
+ resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==}
+ dependencies:
+ dequal: 2.0.3
+ dev: true
+
/didyoumean@1.2.2:
resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
dev: false
@@ -8636,6 +8963,36 @@ packages:
'@esbuild/win32-x64': 0.19.0
dev: true
+ /esbuild@0.19.6:
+ resolution: {integrity: sha512-Xl7dntjA2OEIvpr9j0DVxxnog2fyTGnyVoQXAMQI6eR3mf9zCQds7VIKUDCotDgE/p4ncTgeRqgX8t5d6oP4Gw==}
+ engines: {node: '>=12'}
+ hasBin: true
+ requiresBuild: true
+ optionalDependencies:
+ '@esbuild/android-arm': 0.19.6
+ '@esbuild/android-arm64': 0.19.6
+ '@esbuild/android-x64': 0.19.6
+ '@esbuild/darwin-arm64': 0.19.6
+ '@esbuild/darwin-x64': 0.19.6
+ '@esbuild/freebsd-arm64': 0.19.6
+ '@esbuild/freebsd-x64': 0.19.6
+ '@esbuild/linux-arm': 0.19.6
+ '@esbuild/linux-arm64': 0.19.6
+ '@esbuild/linux-ia32': 0.19.6
+ '@esbuild/linux-loong64': 0.19.6
+ '@esbuild/linux-mips64el': 0.19.6
+ '@esbuild/linux-ppc64': 0.19.6
+ '@esbuild/linux-riscv64': 0.19.6
+ '@esbuild/linux-s390x': 0.19.6
+ '@esbuild/linux-x64': 0.19.6
+ '@esbuild/netbsd-x64': 0.19.6
+ '@esbuild/openbsd-x64': 0.19.6
+ '@esbuild/sunos-x64': 0.19.6
+ '@esbuild/win32-arm64': 0.19.6
+ '@esbuild/win32-ia32': 0.19.6
+ '@esbuild/win32-x64': 0.19.6
+ dev: true
+
/escalade@3.1.1:
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
engines: {node: '>=6'}
@@ -9188,6 +9545,17 @@ packages:
glob-parent: 5.1.2
merge2: 1.4.1
micromatch: 4.0.5
+ dev: true
+
+ /fast-glob@3.3.2:
+ resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==}
+ engines: {node: '>=8.6.0'}
+ dependencies:
+ '@nodelib/fs.stat': 2.0.5
+ '@nodelib/fs.walk': 1.2.8
+ glob-parent: 5.1.2
+ merge2: 1.4.1
+ micromatch: 4.0.5
/fast-json-stable-stringify@2.1.0:
resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==}
@@ -9571,8 +9939,8 @@ packages:
/fs.realpath@1.0.0:
resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==}
- /fsevents@2.3.2:
- resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==}
+ /fsevents@2.3.3:
+ resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==}
engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0}
os: [darwin]
requiresBuild: true
@@ -9807,7 +10175,7 @@ packages:
dependencies:
array-union: 2.1.0
dir-glob: 3.0.1
- fast-glob: 3.3.1
+ fast-glob: 3.3.2
ignore: 5.2.4
merge2: 1.4.1
slash: 3.0.0
@@ -9819,7 +10187,7 @@ packages:
dependencies:
array-union: 2.1.0
dir-glob: 3.0.1
- fast-glob: 3.3.1
+ fast-glob: 3.3.2
ignore: 5.2.4
merge2: 1.4.1
slash: 3.0.0
@@ -9841,7 +10209,7 @@ packages:
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dependencies:
dir-glob: 3.0.1
- fast-glob: 3.3.1
+ fast-glob: 3.3.2
ignore: 5.2.4
merge2: 1.4.1
slash: 4.0.0
@@ -9977,6 +10345,88 @@ packages:
type-fest: 0.8.1
dev: true
+ /hast-util-from-parse5@8.0.1:
+ resolution: {integrity: sha512-Er/Iixbc7IEa7r/XLtuG52zoqn/b3Xng/w6aZQ0xGVxzhw5xUFxcRqdPzP6yFi/4HBYRaifaI5fQ1RH8n0ZeOQ==}
+ dependencies:
+ '@types/hast': 3.0.3
+ '@types/unist': 3.0.2
+ devlop: 1.1.0
+ hastscript: 8.0.0
+ property-information: 6.4.0
+ vfile: 6.0.1
+ vfile-location: 5.0.2
+ web-namespaces: 2.0.1
+ dev: true
+
+ /hast-util-parse-selector@4.0.0:
+ resolution: {integrity: sha512-wkQCkSYoOGCRKERFWcxMVMOcYE2K1AaNLU8DXS9arxnLOUEWbOXKXiJUNzEpqZ3JOKpnha3jkFrumEjVliDe7A==}
+ dependencies:
+ '@types/hast': 3.0.3
+ dev: true
+
+ /hast-util-raw@9.0.1:
+ resolution: {integrity: sha512-5m1gmba658Q+lO5uqL5YNGQWeh1MYWZbZmWrM5lncdcuiXuo5E2HT/CIOp0rLF8ksfSwiCVJ3twlgVRyTGThGA==}
+ dependencies:
+ '@types/hast': 3.0.3
+ '@types/unist': 3.0.2
+ '@ungap/structured-clone': 1.2.0
+ hast-util-from-parse5: 8.0.1
+ hast-util-to-parse5: 8.0.0
+ html-void-elements: 3.0.0
+ mdast-util-to-hast: 13.0.2
+ parse5: 7.1.2
+ unist-util-position: 5.0.0
+ unist-util-visit: 5.0.0
+ vfile: 6.0.1
+ web-namespaces: 2.0.1
+ zwitch: 2.0.4
+ dev: true
+
+ /hast-util-to-html@9.0.0:
+ resolution: {integrity: sha512-IVGhNgg7vANuUA2XKrT6sOIIPgaYZnmLx3l/CCOAK0PtgfoHrZwX7jCSYyFxHTrGmC6S9q8aQQekjp4JPZF+cw==}
+ dependencies:
+ '@types/hast': 3.0.3
+ '@types/unist': 3.0.2
+ ccount: 2.0.1
+ comma-separated-tokens: 2.0.3
+ hast-util-raw: 9.0.1
+ hast-util-whitespace: 3.0.0
+ html-void-elements: 3.0.0
+ mdast-util-to-hast: 13.0.2
+ property-information: 6.4.0
+ space-separated-tokens: 2.0.2
+ stringify-entities: 4.0.3
+ zwitch: 2.0.4
+ dev: true
+
+ /hast-util-to-parse5@8.0.0:
+ resolution: {integrity: sha512-3KKrV5ZVI8if87DVSi1vDeByYrkGzg4mEfeu4alwgmmIeARiBLKCZS2uw5Gb6nU9x9Yufyj3iudm6i7nl52PFw==}
+ dependencies:
+ '@types/hast': 3.0.3
+ comma-separated-tokens: 2.0.3
+ devlop: 1.1.0
+ property-information: 6.4.0
+ space-separated-tokens: 2.0.2
+ web-namespaces: 2.0.1
+ zwitch: 2.0.4
+ dev: true
+
+ /hast-util-whitespace@3.0.0:
+ resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==}
+ dependencies:
+ '@types/hast': 3.0.3
+ dev: true
+
+ /hastscript@8.0.0:
+ resolution: {integrity: sha512-dMOtzCEd3ABUeSIISmrETiKuyydk1w0pa+gE/uormcTpSYuaNJPbX1NU3JLyscSLjwAQM8bWMhhIlnCqnRvDTw==}
+ dependencies:
+ '@types/hast': 3.0.3
+ comma-separated-tokens: 2.0.3
+ hast-util-parse-selector: 4.0.0
+ property-information: 6.4.0
+ space-separated-tokens: 2.0.2
+ dev: true
+
/heap@0.2.7:
resolution: {integrity: sha512-2bsegYkkHO+h/9MGbn6KWcE45cHZgPANo5LXF7EvWdT0yT2EguSVO1nDgU5c8+ZOPwp2vMNa7YFsJhVcDR9Sdg==}
dev: false
@@ -10024,6 +10474,10 @@ packages:
resolution: {integrity: sha512-9gux8QhvjRO/erSnDPv28noDZcPZmYE7e1vFsBLKLlRlKDSqNJYebj6Qz1TGd5lsRV+X+xYyjCKjuZdABinWjA==}
dev: false
+ /html-void-elements@3.0.0:
+ resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==}
+ dev: true
+
/htmlparser2@8.0.2:
resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==}
dependencies:
@@ -10892,7 +11346,7 @@ packages:
micromatch: 4.0.5
walker: 1.0.8
optionalDependencies:
- fsevents: 2.3.2
+ fsevents: 2.3.3
dev: true
/jest-image-snapshot@4.2.0(jest@29.6.2):
@@ -11200,15 +11654,9 @@ packages:
hasBin: true
dev: false
- /jiti@1.19.1:
- resolution: {integrity: sha512-oVhqoRDaBXf7sjkll95LHVS6Myyyb1zaunVwk4Z0+WPSW4gjS0pl01zYKHScTuyEhQsFxV5L4DR5r+YqSyqyyg==}
- hasBin: true
- dev: false
-
/jiti@1.21.0:
resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==}
hasBin: true
- dev: true
/jju@1.4.0:
resolution: {integrity: sha512-8wb9Yw966OSxApiCt0K3yNJL8pnNeIv+OEq2YMidz4FKP6nonSRoOXc80iXY4JaN2FC11B9qsNmDsm+ZOfMROA==}
@@ -11794,6 +12242,7 @@ packages:
engines: {node: '>=12'}
dependencies:
'@jridgewell/sourcemap-codec': 1.4.15
+ dev: true
/magic-string@0.30.5:
resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==}
@@ -12004,6 +12453,19 @@ packages:
unist-util-is: 5.2.1
dev: true
+ /mdast-util-to-hast@13.0.2:
+ resolution: {integrity: sha512-U5I+500EOOw9e3ZrclN3Is3fRpw8c19SMyNZlZ2IS+7vLsNzb2Om11VpIVOR+/0137GhZsFEF6YiKD5+0Hr2Og==}
+ dependencies:
+ '@types/hast': 3.0.3
+ '@types/mdast': 4.0.3
+ '@ungap/structured-clone': 1.2.0
+ devlop: 1.1.0
+ micromark-util-sanitize-uri: 2.0.0
+ trim-lines: 3.0.1
+ unist-util-position: 5.0.0
+ unist-util-visit: 5.0.0
+ dev: true
+
/mdast-util-to-markdown@1.5.0:
resolution: {integrity: sha512-bbv7TPv/WC49thZPg3jXuqzuvI45IL2EVAr/KxF0BSdHsU0ceFHOmwQn6evxAh1GaoK/6GQ1wp4R4oW2+LFL/A==}
dependencies:
@@ -12259,6 +12721,13 @@ packages:
micromark-util-symbol: 1.1.0
micromark-util-types: 1.1.0
+ /micromark-util-character@2.0.1:
+ resolution: {integrity: sha512-3wgnrmEAJ4T+mGXAUfMvMAbxU9RDG43XmGce4j6CwPtVxB3vfwXSZ6KhFwDzZ3mZHhmPimMAXg71veiBGzeAZw==}
+ dependencies:
+ micromark-util-symbol: 2.0.0
+ micromark-util-types: 2.0.0
+ dev: true
+
/micromark-util-chunked@1.1.0:
resolution: {integrity: sha512-Ye01HXpkZPNcV6FiyoW2fGZDUw4Yc7vT0E9Sad83+bEDiCJ1uXu0S3mr8WLpsz3HaG3x2q0HM6CTuPdcZcluFQ==}
dependencies:
@@ -12293,6 +12762,10 @@ packages:
/micromark-util-encode@1.1.0:
resolution: {integrity: sha512-EuEzTWSTAj9PA5GOAs992GzNh2dGQO52UvAbtSOMvXTxv3Criqb6IOzJUBCmEqrrXSblJIJBbFFv6zPxpreiJw==}
+ /micromark-util-encode@2.0.0:
+ resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==}
+ dev: true
+
/micromark-util-html-tag-name@1.2.0:
resolution: {integrity: sha512-VTQzcuQgFUD7yYztuQFKXT49KghjtETQ+Wv/zUjGSGBioZnkA4P1XXZPT1FHeJA6RwRXSF47yvJ1tsJdoxwO+Q==}
@@ -12313,6 +12786,14 @@ packages:
micromark-util-encode: 1.1.0
micromark-util-symbol: 1.1.0
+ /micromark-util-sanitize-uri@2.0.0:
+ resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==}
+ dependencies:
+ micromark-util-character: 2.0.1
+ micromark-util-encode: 2.0.0
+ micromark-util-symbol: 2.0.0
+ dev: true
+
/micromark-util-subtokenize@1.1.0:
resolution: {integrity: sha512-kUQHyzRoxvZO2PuLzMt2P/dwVsTiivCK8icYTeR+3WgbuPqfHgPPy7nFKbeqRivBvn/3N3GBiNC+JRTMSxEC7A==}
dependencies:
@@ -12324,9 +12805,17 @@ packages:
/micromark-util-symbol@1.1.0:
resolution: {integrity: sha512-uEjpEYY6KMs1g7QfJ2eX1SQEV+ZT4rUD3UcF6l57acZvLNK7PBZL+ty82Z1qhK1/yXIY4bdx04FKMgR0g4IAag==}
+ /micromark-util-symbol@2.0.0:
+ resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==}
+ dev: true
+
/micromark-util-types@1.1.0:
resolution: {integrity: sha512-ukRBgie8TIAcacscVHSiddHjO4k/q3pnedmzMQ4iwDcK0FtFCohKOlFbaOL/mPgfnPsL3C1ZyxJa4sbWrBl3jg==}
+ /micromark-util-types@2.0.0:
+ resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==}
+ dev: true
+
/micromark@2.11.4:
resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==}
dependencies:
@@ -12454,6 +12943,10 @@ packages:
resolution: {integrity: sha512-PNxA/X8pWk+TiqPbsoIYH0GQ5Di7m6326/lwU/S4mlo4wGQddIcf/V//1f9TB0V4j59b57b+HZxt8h3iMROGvg==}
dev: true
+ /minisearch@6.3.0:
+ resolution: {integrity: sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==}
+ dev: true
+
/mkdirp@0.5.6:
resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
hasBin: true
@@ -13415,6 +13908,10 @@ packages:
sisteransi: 1.0.5
dev: true
+ /property-information@6.4.0:
+ resolution: {integrity: sha512-9t5qARVofg2xQqKtytzt+lZ4d1Qvj8t5B8fEwXK6qOfgRLgH/b13QlgEyDh033NOS31nXeFbYv7CLUDG1CeifQ==}
+ dev: true
+
/proxy-addr@2.0.7:
resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==}
engines: {node: '>= 0.10'}
@@ -13932,7 +14429,7 @@ packages:
engines: {node: '>=10.0.0'}
hasBin: true
optionalDependencies:
- fsevents: 2.3.2
+ fsevents: 2.3.3
dev: true
/rollup@3.28.0:
@@ -13940,7 +14437,27 @@ packages:
engines: {node: '>=14.18.0', npm: '>=8.0.0'}
hasBin: true
optionalDependencies:
- fsevents: 2.3.2
+ fsevents: 2.3.3
+ dev: true
+
+ /rollup@4.5.0:
+ resolution: {integrity: sha512-41xsWhzxqjMDASCxH5ibw1mXk+3c4TNI2UjKbLxe6iEzrSQnqOzmmK8/3mufCPbzHNJ2e04Fc1ddI35hHy+8zg==}
+ engines: {node: '>=18.0.0', npm: '>=8.0.0'}
+ hasBin: true
+ optionalDependencies:
+ '@rollup/rollup-android-arm-eabi': 4.5.0
+ '@rollup/rollup-android-arm64': 4.5.0
+ '@rollup/rollup-darwin-arm64': 4.5.0
+ '@rollup/rollup-darwin-x64': 4.5.0
+ '@rollup/rollup-linux-arm-gnueabihf': 4.5.0
+ '@rollup/rollup-linux-arm64-gnu': 4.5.0
+ '@rollup/rollup-linux-arm64-musl': 4.5.0
+ '@rollup/rollup-linux-x64-gnu': 4.5.0
+ '@rollup/rollup-linux-x64-musl': 4.5.0
+ '@rollup/rollup-win32-arm64-msvc': 4.5.0
+ '@rollup/rollup-win32-ia32-msvc': 4.5.0
+ '@rollup/rollup-win32-x64-msvc': 4.5.0
+ fsevents: 2.3.3
dev: true
/rrweb-cssom@0.6.0:
@@ -14223,13 +14740,16 @@ packages:
vscode-textmate: 8.0.0
dev: true
- /shiki@0.14.5:
- resolution: {integrity: sha512-1gCAYOcmCFONmErGTrS1fjzJLA7MGZmKzrBNX7apqSwhyITJg2O102uFzXUeBxNnEkDA9vHIKLyeKq0V083vIw==}
+ /shikiji-transformers@0.7.4:
+ resolution: {integrity: sha512-oykilNekcW2FnRGbvZm+RNWHYroSeCVMOaMMwAbxozZgpTdcJtHoA+1+MDFw6/o2hCkX88kKbxG6FwAZoUZ6WQ==}
dependencies:
- ansi-sequence-parser: 1.1.1
- jsonc-parser: 3.2.0
- vscode-oniguruma: 1.7.0
- vscode-textmate: 8.0.0
+ shikiji: 0.7.4
+ dev: true
+
+ /shikiji@0.7.4:
+ resolution: {integrity: sha512-N5dmPvyhH/zfcsuWysUEAMwRJDMz26LUns2VEUs5y4Ozbf5jkAODU0Yswjcf/tZAwpFnk5x3y34dupFMnF2+NA==}
+ dependencies:
+ hast-util-to-html: 9.0.0
dev: true
/side-channel@1.0.4:
@@ -14378,6 +14898,10 @@ packages:
deprecated: Please use @jridgewell/sourcemap-codec instead
dev: true
+ /space-separated-tokens@2.0.2:
+ resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==}
+ dev: true
+
/spawn-command@0.0.2-1:
resolution: {integrity: sha512-n98l9E2RMSJ9ON1AKisHzz7V42VDiBQGY6PB1BwRglz99wpVsSuGzQ+jOi6lFXBGVTCrRpltvjm+/XA+tpeJrg==}
dev: true
@@ -14616,6 +15140,13 @@ packages:
dependencies:
safe-buffer: 5.2.1
+ /stringify-entities@4.0.3:
+ resolution: {integrity: sha512-BP9nNHMhhfcMbiuQKCqMjhDP5yBCAxsPu4pHFFzJ6Alo9dZgY4VLDPutXqIjpRiMoKdp7Av85Gr73Q5uH9k7+g==}
+ dependencies:
+ character-entities-html4: 2.1.0
+ character-entities-legacy: 3.0.0
+ dev: true
+
/stringify-object@3.3.0:
resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==}
engines: {node: '>=4'}
@@ -14769,10 +15300,10 @@ packages:
chokidar: 3.5.3
didyoumean: 1.2.2
dlv: 1.1.3
- fast-glob: 3.3.1
+ fast-glob: 3.3.2
glob-parent: 6.0.2
is-glob: 4.0.3
- jiti: 1.19.1
+ jiti: 1.21.0
lilconfig: 2.1.0
micromatch: 4.0.5
normalize-path: 3.0.0
@@ -15028,6 +15559,10 @@ packages:
hasBin: true
dev: true
+ /trim-lines@3.0.1:
+ resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==}
+ dev: true
+
/trim-newlines@3.0.1:
resolution: {integrity: sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==}
engines: {node: '>=8'}
@@ -15423,6 +15958,18 @@ packages:
'@types/unist': 2.0.7
dev: true
+ /unist-util-is@6.0.0:
+ resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==}
+ dependencies:
+ '@types/unist': 3.0.2
+ dev: true
+
+ /unist-util-position@5.0.0:
+ resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==}
+ dependencies:
+ '@types/unist': 3.0.2
+ dev: true
+
/unist-util-stringify-position@2.0.3:
resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==}
dependencies:
@@ -15434,6 +15981,12 @@ packages:
dependencies:
'@types/unist': 2.0.7
+ /unist-util-stringify-position@4.0.0:
+ resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==}
+ dependencies:
+ '@types/unist': 3.0.2
+ dev: true
+
/unist-util-visit-parents@5.1.3:
resolution: {integrity: sha512-x6+y8g7wWMyQhL1iZfhIPhDAs7Xwbn9nRosDXl7qoPTSCy0yNxnKc+hWokFifWQIDGi154rdUqKvbCa4+1kLhg==}
dependencies:
@@ -15441,6 +15994,13 @@ packages:
unist-util-is: 5.2.1
dev: true
+ /unist-util-visit-parents@6.0.1:
+ resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==}
+ dependencies:
+ '@types/unist': 3.0.2
+ unist-util-is: 6.0.0
+ dev: true
+
/unist-util-visit@4.1.2:
resolution: {integrity: sha512-MSd8OUGISqHdVvfY9TPhyK2VdUrPgxkUtWSuMHF6XAAFuL4LokseigBnZtPnJMu+FbynTkFNnFlyjxpVKujMRg==}
dependencies:
@@ -15449,6 +16009,14 @@ packages:
unist-util-visit-parents: 5.1.3
dev: true
+ /unist-util-visit@5.0.0:
+ resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==}
+ dependencies:
+ '@types/unist': 3.0.2
+ unist-util-is: 6.0.0
+ unist-util-visit-parents: 6.0.1
+ dev: true
+
/universalify@0.1.2:
resolution: {integrity: sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==}
engines: {node: '>= 4.0.0'}
@@ -15521,13 +16089,13 @@ packages:
'@nuxt/kit':
optional: true
dependencies:
- '@antfu/utils': 0.7.5
- '@rollup/pluginutils': 5.0.3(rollup@2.79.1)
+ '@antfu/utils': 0.7.6
+ '@rollup/pluginutils': 5.0.5(rollup@2.79.1)
chokidar: 3.5.3
debug: 4.3.4(supports-color@8.1.1)
- fast-glob: 3.2.12
+ fast-glob: 3.3.2
local-pkg: 0.4.3
- magic-string: 0.30.2
+ magic-string: 0.30.5
minimatch: 9.0.3
resolve: 1.22.4
unplugin: 1.4.0
@@ -15641,6 +16209,13 @@ packages:
extsprintf: 1.3.0
dev: true
+ /vfile-location@5.0.2:
+ resolution: {integrity: sha512-NXPYyxyBSH7zB5U6+3uDdd6Nybz6o6/od9rk8bp9H8GR3L+cm/fC0uUTbqBmUTnMCUDslAGBOIKNfvvb+gGlDg==}
+ dependencies:
+ '@types/unist': 3.0.2
+ vfile: 6.0.1
+ dev: true
+
/vfile-message@3.1.4:
resolution: {integrity: sha512-fa0Z6P8HUrQN4BZaX05SIVXic+7kE3b05PWAtPuYP9QLHsLKYR7/AlLW3NtOrpXRLeawpDLMsVkmk5DG0NXgWw==}
dependencies:
@@ -15648,6 +16223,13 @@ packages:
unist-util-stringify-position: 3.0.3
dev: true
+ /vfile-message@4.0.2:
+ resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==}
+ dependencies:
+ '@types/unist': 3.0.2
+ unist-util-stringify-position: 4.0.0
+ dev: true
+
/vfile@5.3.7:
resolution: {integrity: sha512-r7qlzkgErKjobAmyNIkkSpizsFPYiUPuJb5pNW1RB4JcYVZhs4lIbVqk8XPk033CV/1z8ss5pkax8SuhGpcG8g==}
dependencies:
@@ -15657,6 +16239,14 @@ packages:
vfile-message: 3.1.4
dev: true
+ /vfile@6.0.1:
+ resolution: {integrity: sha512-1bYqc7pt6NIADBJ98UiG0Bn/CHIVOoZ/IyEkqIruLg0mE1BKzkOXY2D6CSqQIcKqgadppE5lrxgWXJmXd7zZJw==}
+ dependencies:
+ '@types/unist': 3.0.2
+ unist-util-stringify-position: 4.0.0
+ vfile-message: 4.0.2
+ dev: true
+
/vite-node@0.34.0(@types/node@18.17.5):
resolution: {integrity: sha512-rGZMvpb052rjUwJA/a17xMfOibzNF7byMdRSTcN2Lw8uxX08s5EfjWW5mBkm3MSFTPctMSVtT2yC+8ShrZbT5g==}
engines: {node: '>=v14.18.0'}
@@ -15693,16 +16283,16 @@ packages:
- supports-color
dev: true
- /vite-plugin-pwa@0.16.0(vite@4.4.9)(workbox-build@7.0.0)(workbox-window@7.0.0):
- resolution: {integrity: sha512-E+AQRzHxqNU4ZhEeR8X37/foZB+ezJEhXauE/mcf1UITY6k2Pa1dtlFl+BQu57fTdiVlWim5S0Qy44Yap93Dkg==}
+ /vite-plugin-pwa@0.17.0(vite@4.4.9)(workbox-build@7.0.0)(workbox-window@7.0.0):
+ resolution: {integrity: sha512-cOyEG8EEc7JHmyMapTnjK2j0g2BIC3ErlmOHyGzVu8hqjyF9Jt6yWMmVNFtpA6v/NNyzP28ARf3vwzIAzR1kaw==}
engines: {node: '>=16.0.0'}
peerDependencies:
- vite: ^3.1.0 || ^4.0.0
+ vite: ^3.1.0 || ^4.0.0 || ^5.0.0
workbox-build: ^7.0.0
workbox-window: ^7.0.0
dependencies:
debug: 4.3.4(supports-color@8.1.1)
- fast-glob: 3.2.12
+ fast-glob: 3.3.2
pretty-bytes: 6.1.1
vite: 4.4.9(@types/node@18.17.5)
workbox-build: 7.0.0
@@ -15744,7 +16334,7 @@ packages:
postcss: 8.4.27
rollup: 3.28.0
optionalDependencies:
- fsevents: 2.3.2
+ fsevents: 2.3.3
dev: true
/vite@4.5.0(@types/node@18.17.5):
@@ -15780,10 +16370,46 @@ packages:
postcss: 8.4.31
rollup: 3.28.0
optionalDependencies:
- fsevents: 2.3.2
+ fsevents: 2.3.3
dev: true
- /vitepress-plugin-search@1.0.4-alpha.20(flexsearch@0.7.31)(vitepress@1.0.0-alpha.72)(vue@3.3.7):
+ /vite@5.0.2(@types/node@18.17.5):
+ resolution: {integrity: sha512-6CCq1CAJCNM1ya2ZZA7+jS2KgnhbzvxakmlIjN24cF/PXhRMzpM/z8QgsVJA/Dm5fWUWnVEsmtBoMhmerPxT0g==}
+ engines: {node: ^18.0.0 || >=20.0.0}
+ hasBin: true
+ peerDependencies:
+ '@types/node': ^18.0.0 || >=20.0.0
+ less: '*'
+ lightningcss: ^1.21.0
+ sass: '*'
+ stylus: '*'
+ sugarss: '*'
+ terser: ^5.4.0
+ peerDependenciesMeta:
+ '@types/node':
+ optional: true
+ less:
+ optional: true
+ lightningcss:
+ optional: true
+ sass:
+ optional: true
+ stylus:
+ optional: true
+ sugarss:
+ optional: true
+ terser:
+ optional: true
+ dependencies:
+ '@types/node': 18.17.5
+ esbuild: 0.19.6
+ postcss: 8.4.31
+ rollup: 4.5.0
+ optionalDependencies:
+ fsevents: 2.3.3
+ dev: true
+
+ /vitepress-plugin-search@1.0.4-alpha.20(flexsearch@0.7.31)(vitepress@1.0.0-alpha.72)(vue@3.3.8):
resolution: {integrity: sha512-zG+ev9pw1Mg7htABlFCNXb8XwnKN+qfTKw+vU0Ers6RIrABx+45EAAFBoaL1mEpl1FRFn1o/dQ7F4b8GP6HdGQ==}
engines: {node: ^14.13.1 || ^16.7.0 || >=18}
peerDependencies:
@@ -15797,7 +16423,7 @@ packages:
glob-to-regexp: 0.4.1
markdown-it: 13.0.1
vitepress: 1.0.0-alpha.72(@algolia/client-search@4.19.1)(@types/node@18.17.5)(search-insights@2.7.0)
- vue: 3.3.7(typescript@5.0.4)
+ vue: 3.3.8(typescript@5.0.4)
dev: true
/vitepress@1.0.0-alpha.72(@algolia/client-search@4.19.1)(@types/node@18.17.5)(search-insights@2.7.0):
@@ -15831,8 +16457,8 @@ packages:
- terser
dev: true
- /vitepress@1.0.0-rc.25(@algolia/client-search@4.19.1)(@types/node@18.17.5)(postcss@8.4.31)(search-insights@2.7.0)(typescript@5.1.6):
- resolution: {integrity: sha512-1dqWiHNThNrVZ08ixmfEDBEH+764KOgnev9oXga/x6cN++Vb9pnuu8p3K6DQP+KZrYcG+WiX7jxal0iSNpAWuQ==}
+ /vitepress@1.0.0-rc.31(@algolia/client-search@4.19.1)(@types/node@18.17.5)(postcss@8.4.31)(search-insights@2.7.0)(typescript@5.1.6):
+ resolution: {integrity: sha512-ikH9pIjOOAbyoYAGBVfTz8TzuXp+UoWaIRMU4bw/oiTg8R65SbAaGKY84xx6TuL+f4VqUJ8lhzW82YyxSLvstA==}
hasBin: true
peerDependencies:
markdown-it-mathjax3: ^4.3.2
@@ -15845,18 +16471,20 @@ packages:
dependencies:
'@docsearch/css': 3.5.2
'@docsearch/js': 3.5.2(@algolia/client-search@4.19.1)(search-insights@2.7.0)
- '@types/markdown-it': 13.0.5
- '@vitejs/plugin-vue': 4.3.1(vite@4.5.0)(vue@3.3.7)
+ '@types/markdown-it': 13.0.7
+ '@vitejs/plugin-vue': 4.5.0(vite@5.0.2)(vue@3.3.8)
'@vue/devtools-api': 6.5.1
- '@vueuse/core': 10.5.0(vue@3.3.7)
- '@vueuse/integrations': 10.5.0(focus-trap@7.5.4)(vue@3.3.7)
+ '@vueuse/core': 10.6.1(vue@3.3.8)
+ '@vueuse/integrations': 10.6.1(focus-trap@7.5.4)(vue@3.3.8)
focus-trap: 7.5.4
mark.js: 8.11.1
- minisearch: 6.1.0
+ minisearch: 6.3.0
+ mrmime: 1.0.1
postcss: 8.4.31
- shiki: 0.14.5
- vite: 4.5.0(@types/node@18.17.5)
- vue: 3.3.7(typescript@5.1.6)
+ shikiji: 0.7.4
+ shikiji-transformers: 0.7.4
+ vite: 5.0.2(@types/node@18.17.5)
+ vue: 3.3.8(typescript@5.1.6)
transitivePeerDependencies:
- '@algolia/client-search'
- '@types/node'
@@ -15939,7 +16567,7 @@ packages:
strip-literal: 1.3.0
tinybench: 2.5.0
tinypool: 0.7.0
- vite: 4.4.9(@types/node@18.17.5)
+ vite: 4.5.0(@types/node@18.17.5)
vite-node: 0.34.0(@types/node@18.17.5)
why-is-node-running: 2.2.2
transitivePeerDependencies:
@@ -16016,7 +16644,7 @@ packages:
vue: 3.3.4
dev: true
- /vue-demi@0.14.6(vue@3.3.7):
+ /vue-demi@0.14.6(vue@3.3.8):
resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==}
engines: {node: '>=12'}
hasBin: true
@@ -16028,7 +16656,7 @@ packages:
'@vue/composition-api':
optional: true
dependencies:
- vue: 3.3.7(typescript@5.1.6)
+ vue: 3.3.8(typescript@5.1.6)
dev: true
/vue@3.3.4:
@@ -16040,35 +16668,35 @@ packages:
'@vue/server-renderer': 3.3.4(vue@3.3.4)
'@vue/shared': 3.3.4
- /vue@3.3.7(typescript@5.0.4):
- resolution: {integrity: sha512-YEMDia1ZTv1TeBbnu6VybatmSteGOS3A3YgfINOfraCbf85wdKHzscD6HSS/vB4GAtI7sa1XPX7HcQaJ1l24zA==}
+ /vue@3.3.8(typescript@5.0.4):
+ resolution: {integrity: sha512-5VSX/3DabBikOXMsxzlW8JyfeLKlG9mzqnWgLQLty88vdZL7ZJgrdgBOmrArwxiLtmS+lNNpPcBYqrhE6TQW5w==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
- '@vue/compiler-dom': 3.3.7
- '@vue/compiler-sfc': 3.3.7
- '@vue/runtime-dom': 3.3.7
- '@vue/server-renderer': 3.3.7(vue@3.3.7)
- '@vue/shared': 3.3.7
+ '@vue/compiler-dom': 3.3.8
+ '@vue/compiler-sfc': 3.3.8
+ '@vue/runtime-dom': 3.3.8
+ '@vue/server-renderer': 3.3.8(vue@3.3.8)
+ '@vue/shared': 3.3.8
typescript: 5.0.4
dev: true
- /vue@3.3.7(typescript@5.1.6):
- resolution: {integrity: sha512-YEMDia1ZTv1TeBbnu6VybatmSteGOS3A3YgfINOfraCbf85wdKHzscD6HSS/vB4GAtI7sa1XPX7HcQaJ1l24zA==}
+ /vue@3.3.8(typescript@5.1.6):
+ resolution: {integrity: sha512-5VSX/3DabBikOXMsxzlW8JyfeLKlG9mzqnWgLQLty88vdZL7ZJgrdgBOmrArwxiLtmS+lNNpPcBYqrhE6TQW5w==}
peerDependencies:
typescript: '*'
peerDependenciesMeta:
typescript:
optional: true
dependencies:
- '@vue/compiler-dom': 3.3.7
- '@vue/compiler-sfc': 3.3.7
- '@vue/runtime-dom': 3.3.7
- '@vue/server-renderer': 3.3.7(vue@3.3.7)
- '@vue/shared': 3.3.7
+ '@vue/compiler-dom': 3.3.8
+ '@vue/compiler-sfc': 3.3.8
+ '@vue/runtime-dom': 3.3.8
+ '@vue/server-renderer': 3.3.8(vue@3.3.8)
+ '@vue/shared': 3.3.8
typescript: 5.1.6
dev: true
@@ -16136,6 +16764,10 @@ packages:
minimalistic-assert: 1.0.1
dev: true
+ /web-namespaces@2.0.1:
+ resolution: {integrity: sha512-bKr1DkiNa2krS7qxNtdrtHAmzuYGFQLiQ13TsorsdT6ULTkPLKuu5+GsFpDlg6JFjUTwX2DyhMPG2be8uPrqsQ==}
+ dev: true
+
/web-streams-polyfill@3.2.1:
resolution: {integrity: sha512-e0MO3wdXWKrLbL0DgGnUV7WHVuw9OUvL4hjgnPkIeEvESk74gAITi5G606JtZPp39cd8HA9VQzCIvA49LpPN5Q==}
engines: {node: '>= 8'}
diff --git a/vite.config.ts b/vite.config.ts
index 080ff981f..8da356117 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -24,6 +24,7 @@ export default defineConfig({
reportsDirectory: './coverage/vitest',
exclude: ['**/node_modules/**', '**/tests/**', '**/__mocks__/**'],
},
+ includeSource: ['packages/*/src/**/*.{js,ts}'],
},
build: {
/** If you set esmExternals to true, this plugins assumes that
@@ -33,4 +34,7 @@ export default defineConfig({
esmExternals: true,
},
},
+ define: {
+ 'import.meta.vitest': 'undefined',
+ },
});