diff --git a/.gitignore b/.gitignore index a0fd1c50b..267ff4091 100644 --- a/.gitignore +++ b/.gitignore @@ -35,7 +35,7 @@ cypress/snapshots/ .tsbuildinfo tsconfig.tsbuildinfo -knsv*.html +#knsv*.html local*.html stats/ diff --git a/cypress/platform/knsv2.html b/cypress/platform/knsv2.html index 5cc8036d5..e52019e40 100644 --- a/cypress/platform/knsv2.html +++ b/cypress/platform/knsv2.html @@ -59,7 +59,7 @@
 stateDiagram-v2
-       Second
+     ASH --> KNUT
   
diff --git a/packages/mermaid/src/dagre-wrapper/nodes.js b/packages/mermaid/src/dagre-wrapper/nodes.js
index 052bc8874..ff1b7d568 100644
--- a/packages/mermaid/src/dagre-wrapper/nodes.js
+++ b/packages/mermaid/src/dagre-wrapper/nodes.js
@@ -372,13 +372,26 @@ const rect = async (parent, node) => {
   // add the rect
   const rect = shapeSvg.insert('rect', ':first-child');
 
-
   // console.log('Rect node:', node, 'bbox:', bbox, 'halfPadding:', halfPadding, 'node.padding:', node.padding);
   // const totalWidth = bbox.width + node.padding * 2;
   // const totalHeight = bbox.height + node.padding * 2;
   const totalWidth = bbox.width + node.padding;
   const totalHeight = bbox.height + node.padding;
-  console.log('Rect node:', node, rect.node(), 'bbox:', bbox, 'halfPadding:', halfPadding, 'node.padding:', node.padding, 'totalWidth:', totalWidth, 'totalHeight:', totalHeight);
+  console.log(
+    'Rect node:',
+    node,
+    rect.node(),
+    'bbox:',
+    bbox,
+    'halfPadding:',
+    halfPadding,
+    'node.padding:',
+    node.padding,
+    'totalWidth:',
+    totalWidth,
+    'totalHeight:',
+    totalHeight
+  );
   rect
     .attr('class', 'basic label-container')
     .attr('style', node.style)
diff --git a/packages/mermaid/src/diagrams/state/stateDb.js b/packages/mermaid/src/diagrams/state/stateDb.js
index c5d5d390a..29ea43799 100644
--- a/packages/mermaid/src/diagrams/state/stateDb.js
+++ b/packages/mermaid/src/diagrams/state/stateDb.js
@@ -21,6 +21,7 @@ import {
   DEFAULT_STATE_TYPE,
   DIVIDER_TYPE,
 } from './stateCommon.js';
+import { node } from 'stylis';
 
 const START_NODE = '[*]';
 const START_TYPE = 'start';
@@ -542,37 +543,48 @@ const setDirection = (dir) => {
 const trimColon = (str) => (str && str[0] === ':' ? str.substr(1).trim() : str.trim());
 
 const dataFetcher = (parentId, doc, nodes, edges) => {
-  doc.forEach((item) => {
-    switch (item.stmt) {
-      case STMT_STATE:
-        if (parentId) {
-          nodes.push({ ...item, labelText: item.id, labelType: 'text', parentId, shape: 'rect' });
-        } else {
-          nodes.push({
-            ...item,
-            labelText: item.id,
-            // description: item.id,
-            labelType: 'text',
-            labelStyle: '',
-            shape: 'rect',
-            domId: 'state-bla-bla-bla',
-            x: 100,
-            y: 100,
-            height: 100,
-            width: 100,
-            padding: 15,
-            classes: ' statediagram-state',
-          });
-        }
-        if (item.doc) {
-          dataFetcher(item.id, item.doc, nodes, edges);
-        }
-        break;
-      case STMT_RELATION:
-        edges.push(item);
-        break;
+  extract(doc);
+
+  //states
+  const stateKeys = Object.keys(currentDocument.states);
+
+  stateKeys.forEach((key) => {
+    const item = currentDocument.states[key];
+
+    if (parentId) {
+      nodes.push({ ...item, labelText: item.id, labelType: 'text', parentId, shape: 'rect' });
+    } else {
+      nodes.push({
+        ...item,
+        labelText: item.id,
+        // description: item.id,
+        labelType: 'text',
+        labelStyle: '',
+        shape: 'rect',
+        padding: 15,
+        classes: ' statediagram-state',
+      });
     }
   });
+
+  //edges
+  currentDocument.relations.forEach((item) => {
+    edges.push({
+      id: item.id1 + item.id2,
+      from: item.id1,
+      to: item.id2,
+      label: item.relationTitle,
+    });
+  });
+
+  // if (item.doc) {
+  //   dataFetcher(item.id, item.doc, nodes, edges);
+  // }
+  //break;
+  //   case STMT_RELATION:
+  //     edges.push(item);
+  //     break;
+  // }
 };
 export const getData = () => {
   const nodes = [];
diff --git a/packages/mermaid/src/diagrams/state/stateRenderer-v3-unified.ts b/packages/mermaid/src/diagrams/state/stateRenderer-v3-unified.ts
index 7e30ece82..bf72d3cbb 100644
--- a/packages/mermaid/src/diagrams/state/stateRenderer-v3-unified.ts
+++ b/packages/mermaid/src/diagrams/state/stateRenderer-v3-unified.ts
@@ -83,7 +83,6 @@ export const draw = async function (text: string, id: string, _version: string,
   // // The performRender method provided in all supported diagrams is used to render the data
   // performRender(data4Rendering);
 
-  console.log('REF1:', data4Layout);
   data4Layout.type = diag.type;
   data4Layout.layoutAlgorithm = 'dagre-wrapper';
   data4Layout.skin = 'roughjs';
@@ -92,7 +91,7 @@ export const draw = async function (text: string, id: string, _version: string,
   data4Layout.rankSpacing = conf.rankSpacing || 50;
   data4Layout.markers = ['barb'];
   data4Layout.diagramId = id;
-
+  console.log('REF1:', data4Layout);
   await render(data4Layout, svg, element);
 };
 
diff --git a/packages/mermaid/src/rendering-util/layout-algorithms/dagre/index.js b/packages/mermaid/src/rendering-util/layout-algorithms/dagre/index.js
index f6760f96f..6600df08d 100644
--- a/packages/mermaid/src/rendering-util/layout-algorithms/dagre/index.js
+++ b/packages/mermaid/src/rendering-util/layout-algorithms/dagre/index.js
@@ -203,6 +203,11 @@ export const render = async (data4Layout, svg, element) => {
     graph.setNode(node.id, { ...node });
   });
 
+  console.log('Edges:', data4Layout.edges);
+  data4Layout.edges.forEach((edge) => {
+    graph.setEdge(edge.from, edge.to, { ...edge });
+  });
+
   log.warn('Graph at first:', JSON.stringify(graphlibJson.write(graph)));
   adjustClustersAndEdges(graph);
   log.warn('Graph after:', JSON.stringify(graphlibJson.write(graph)));
diff --git a/packages/mermaid/src/rendering-util/rendering-elements/shapes/rect.js b/packages/mermaid/src/rendering-util/rendering-elements/shapes/rect.ts
similarity index 79%
rename from packages/mermaid/src/rendering-util/rendering-elements/shapes/rect.js
rename to packages/mermaid/src/rendering-util/rendering-elements/shapes/rect.ts
index 96b803fdb..e26118541 100644
--- a/packages/mermaid/src/rendering-util/rendering-elements/shapes/rect.js
+++ b/packages/mermaid/src/rendering-util/rendering-elements/shapes/rect.ts
@@ -1,6 +1,7 @@
 import { log } from '$root/logger.js';
 import { labelHelper, updateNodeBounds } from './util.js';
 import intersect from '../intersect/index.js';
+import type { Node } from '$root/rendering-util/types.d.ts';
 
 /**
  *
@@ -9,12 +10,20 @@ import intersect from '../intersect/index.js';
  * @param totalWidth
  * @param totalHeight
  */
-function applyNodePropertyBorders(rect, borders, totalWidth, totalHeight) {
-  const strokeDashArray = [];
-  const addBorder = (length) => {
+function applyNodePropertyBorders(
+  rect: d3.Selection,
+  borders: string | undefined,
+  totalWidth: number,
+  totalHeight: number
+) {
+  if (!borders) {
+    return;
+  }
+  const strokeDashArray: number[] = [];
+  const addBorder = (length: number) => {
     strokeDashArray.push(length, 0);
   };
-  const skipBorder = (length) => {
+  const skipBorder = (length: number) => {
     strokeDashArray.push(0, length);
   };
   if (borders.includes('t')) {
@@ -41,10 +50,11 @@ function applyNodePropertyBorders(rect, borders, totalWidth, totalHeight) {
   } else {
     skipBorder(totalHeight);
   }
+
   rect.attr('stroke-dasharray', strokeDashArray.join(' '));
 }
 
-export const rect = async (parent, node) => {
+export const rect = async (parent: SVGAElement, node: Node) => {
   const { shapeSvg, bbox, halfPadding } = await labelHelper(
     parent,
     node,
@@ -52,7 +62,7 @@ export const rect = async (parent, node) => {
     true
   );
 
-  console.log('rect node', node);
+  console.log('new rect node', node);
 
   // add the rect
   const rect = shapeSvg.insert('rect', ':first-child');
@@ -75,7 +85,7 @@ export const rect = async (parent, node) => {
   if (node.props) {
     const propKeys = new Set(Object.keys(node.props));
     if (node.props.borders) {
-      applyNodePropertyBorders(rect, node.props.borders, totalWidth, totalHeight);
+      applyNodePropertyBorders(rect, node.props.borders + '', totalWidth, totalHeight);
       propKeys.delete('borders');
     }
     propKeys.forEach((propKey) => {
@@ -92,7 +102,7 @@ export const rect = async (parent, node) => {
   return shapeSvg;
 };
 
-export const labelRect = async (parent, node) => {
+export const labelRect = async (parent: SVGElement, node: Node) => {
   const { shapeSvg } = await labelHelper(parent, node, 'label', true);
 
   log.trace('Classes = ', node.class);
@@ -108,7 +118,7 @@ export const labelRect = async (parent, node) => {
   if (node.props) {
     const propKeys = new Set(Object.keys(node.props));
     if (node.props.borders) {
-      applyNodePropertyBorders(rect, node.props.borders, totalWidth, totalHeight);
+      applyNodePropertyBorders(rect, node.borders, totalWidth, totalHeight);
       propKeys.delete('borders');
     }
     propKeys.forEach((propKey) => {
diff --git a/packages/mermaid/src/rendering-util/types.d.ts b/packages/mermaid/src/rendering-util/types.d.ts
index 497a84acc..38a48b38d 100644
--- a/packages/mermaid/src/rendering-util/types.d.ts
+++ b/packages/mermaid/src/rendering-util/types.d.ts
@@ -33,6 +33,11 @@ interface Node {
   tooltip?: string;
   type: string;
   width?: number;
+  intersect?: (point: any) => any;
+  // Specific properties for State Diagram nodes TODO remove and use generic properties
+  style?: string;
+  class?: string;
+  borders?: string;
 }
 
 // Common properties for any edge in the system
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index 9c860f9c4..dde85ebf6 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -503,61 +503,6 @@ importers:
         specifier: ^7.0.0
         version: 7.0.0
 
-  packages/mermaid/src/vitepress:
-    dependencies:
-      '@vueuse/core':
-        specifier: ^10.1.0
-        version: 10.1.0(vue@3.3.4)
-      jiti:
-        specifier: ^1.18.2
-        version: 1.18.2
-      mermaid:
-        specifier: workspace:^
-        version: link:../..
-      vue:
-        specifier: ^3.3
-        version: 3.3.4
-    devDependencies:
-      '@iconify-json/carbon':
-        specifier: ^1.1.16
-        version: 1.1.16
-      '@unocss/reset':
-        specifier: ^0.58.0
-        version: 0.58.0
-      '@vite-pwa/vitepress':
-        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.12)(vue@3.3.4)
-      fast-glob:
-        specifier: ^3.2.12
-        version: 3.2.12
-      https-localhost:
-        specifier: ^4.7.1
-        version: 4.7.1
-      pathe:
-        specifier: ^1.1.0
-        version: 1.1.0
-      unocss:
-        specifier: ^0.58.0
-        version: 0.58.0(postcss@8.4.33)(rollup@2.79.1)(vite@4.4.12)
-      unplugin-vue-components:
-        specifier: ^0.26.0
-        version: 0.26.0(rollup@2.79.1)(vue@3.3.4)
-      vite:
-        specifier: ^4.4.12
-        version: 4.4.12(@types/node@18.17.5)
-      vite-plugin-pwa:
-        specifier: ^0.17.0
-        version: 0.17.0(vite@4.4.12)(workbox-build@7.0.0)(workbox-window@7.0.0)
-      vitepress:
-        specifier: 1.0.0-rc.39
-        version: 1.0.0-rc.39(@algolia/client-search@4.19.1)(@types/node@18.17.5)(postcss@8.4.33)(search-insights@2.7.0)(typescript@5.1.6)
-      workbox-window:
-        specifier: ^7.0.0
-        version: 7.0.0
-
   packages/parser:
     dependencies:
       langium:
@@ -5351,22 +5296,6 @@ packages:
       eslint-visitor-keys: 3.4.3
     dev: true
 
-  /@unocss/astro@0.58.0(rollup@2.79.1)(vite@4.4.12):
-    resolution: {integrity: sha512-df+tEFO5eKXjQOwSWQhS9IdjD0sfLHLtn8U09sEKR2Nmh5CvpwyBxmvLQgOCilPou7ehmyKfsyGRLZg7IMp+Ew==}
-    peerDependencies:
-      vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0
-    peerDependenciesMeta:
-      vite:
-        optional: true
-    dependencies:
-      '@unocss/core': 0.58.0
-      '@unocss/reset': 0.58.0
-      '@unocss/vite': 0.58.0(rollup@2.79.1)(vite@4.4.12)
-      vite: 4.4.12(@types/node@18.17.5)
-    transitivePeerDependencies:
-      - rollup
-    dev: true
-
   /@unocss/astro@0.58.0(rollup@2.79.1)(vite@4.5.0):
     resolution: {integrity: sha512-df+tEFO5eKXjQOwSWQhS9IdjD0sfLHLtn8U09sEKR2Nmh5CvpwyBxmvLQgOCilPou7ehmyKfsyGRLZg7IMp+Ew==}
     peerDependencies:
@@ -5561,26 +5490,6 @@ packages:
       '@unocss/core': 0.58.0
     dev: true
 
-  /@unocss/vite@0.58.0(rollup@2.79.1)(vite@4.4.12):
-    resolution: {integrity: sha512-OCUOLMSOBEtXOEyBbAvMI3/xdR175BWRzmvV9Wc34ANZclEvCdVH8+WU725ibjY4VT0gVIuX68b13fhXdHV41A==}
-    peerDependencies:
-      vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0
-    dependencies:
-      '@ampproject/remapping': 2.2.1
-      '@rollup/pluginutils': 5.1.0(rollup@2.79.1)
-      '@unocss/config': 0.58.0
-      '@unocss/core': 0.58.0
-      '@unocss/inspector': 0.58.0
-      '@unocss/scope': 0.58.0
-      '@unocss/transformer-directives': 0.58.0
-      chokidar: 3.5.3
-      fast-glob: 3.3.2
-      magic-string: 0.30.5
-      vite: 4.4.12(@types/node@18.17.5)
-    transitivePeerDependencies:
-      - rollup
-    dev: true
-
   /@unocss/vite@0.58.0(rollup@2.79.1)(vite@4.5.0):
     resolution: {integrity: sha512-OCUOLMSOBEtXOEyBbAvMI3/xdR175BWRzmvV9Wc34ANZclEvCdVH8+WU725ibjY4VT0gVIuX68b13fhXdHV41A==}
     peerDependencies:
@@ -5609,17 +5518,6 @@ packages:
       vite-plugin-pwa: 0.17.0(vite@4.5.0)(workbox-build@7.0.0)(workbox-window@7.0.0)
     dev: true
 
-  /@vitejs/plugin-vue@4.2.1(vite@4.4.12)(vue@3.3.4):
-    resolution: {integrity: sha512-ZTZjzo7bmxTRTkb8GSTwkPOYDIP7pwuyV+RV53c9PYUouwcbkIZIvWvNWlX2b1dYZqtOv7D6iUAnJLVNGcLrSw==}
-    engines: {node: ^14.18.0 || >=16.0.0}
-    peerDependencies:
-      vite: ^4.0.0
-      vue: ^3.2.25
-    dependencies:
-      vite: 4.4.12(@types/node@18.17.5)
-      vue: 3.3.4
-    dev: true
-
   /@vitejs/plugin-vue@4.2.1(vite@4.5.0)(vue@3.3.4):
     resolution: {integrity: sha512-ZTZjzo7bmxTRTkb8GSTwkPOYDIP7pwuyV+RV53c9PYUouwcbkIZIvWvNWlX2b1dYZqtOv7D6iUAnJLVNGcLrSw==}
     engines: {node: ^14.18.0 || >=16.0.0}
@@ -15861,45 +15759,6 @@ packages:
     engines: {node: '>= 10.0.0'}
     dev: true
 
-  /unocss@0.58.0(postcss@8.4.33)(rollup@2.79.1)(vite@4.4.12):
-    resolution: {integrity: sha512-MSPRHxBqWN+1AHGV+J5uUy4//e6ZBK6O+ISzD0qrXcCD/GNtxk1+lYjOK2ltkUiKX539+/KF91vNxzhhwEf+xA==}
-    engines: {node: '>=14'}
-    peerDependencies:
-      '@unocss/webpack': 0.58.0
-      vite: ^2.9.0 || ^3.0.0-0 || ^4.0.0 || ^5.0.0-0
-    peerDependenciesMeta:
-      '@unocss/webpack':
-        optional: true
-      vite:
-        optional: true
-    dependencies:
-      '@unocss/astro': 0.58.0(rollup@2.79.1)(vite@4.4.12)
-      '@unocss/cli': 0.58.0(rollup@2.79.1)
-      '@unocss/core': 0.58.0
-      '@unocss/extractor-arbitrary-variants': 0.58.0
-      '@unocss/postcss': 0.58.0(postcss@8.4.33)
-      '@unocss/preset-attributify': 0.58.0
-      '@unocss/preset-icons': 0.58.0
-      '@unocss/preset-mini': 0.58.0
-      '@unocss/preset-tagify': 0.58.0
-      '@unocss/preset-typography': 0.58.0
-      '@unocss/preset-uno': 0.58.0
-      '@unocss/preset-web-fonts': 0.58.0
-      '@unocss/preset-wind': 0.58.0
-      '@unocss/reset': 0.58.0
-      '@unocss/transformer-attributify-jsx': 0.58.0
-      '@unocss/transformer-attributify-jsx-babel': 0.58.0
-      '@unocss/transformer-compile-class': 0.58.0
-      '@unocss/transformer-directives': 0.58.0
-      '@unocss/transformer-variant-group': 0.58.0
-      '@unocss/vite': 0.58.0(rollup@2.79.1)(vite@4.4.12)
-      vite: 4.4.12(@types/node@18.17.5)
-    transitivePeerDependencies:
-      - postcss
-      - rollup
-      - supports-color
-    dev: true
-
   /unocss@0.58.0(postcss@8.4.33)(rollup@2.79.1)(vite@4.5.0):
     resolution: {integrity: sha512-MSPRHxBqWN+1AHGV+J5uUy4//e6ZBK6O+ISzD0qrXcCD/GNtxk1+lYjOK2ltkUiKX539+/KF91vNxzhhwEf+xA==}
     engines: {node: '>=14'}
@@ -16129,24 +15988,6 @@ packages:
       - supports-color
     dev: true
 
-  /vite-plugin-pwa@0.17.0(vite@4.4.12)(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 || ^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.3.2
-      pretty-bytes: 6.1.1
-      vite: 4.4.12(@types/node@18.17.5)
-      workbox-build: 7.0.0
-      workbox-window: 7.0.0
-    transitivePeerDependencies:
-      - supports-color
-    dev: true
-
   /vite-plugin-pwa@0.17.0(vite@4.5.0)(workbox-build@7.0.0)(workbox-window@7.0.0):
     resolution: {integrity: sha512-cOyEG8EEc7JHmyMapTnjK2j0g2BIC3ErlmOHyGzVu8hqjyF9Jt6yWMmVNFtpA6v/NNyzP28ARf3vwzIAzR1kaw==}
     engines: {node: '>=16.0.0'}
@@ -16996,6 +16837,7 @@ packages:
 
   /workbox-google-analytics@7.0.0:
     resolution: {integrity: sha512-MEYM1JTn/qiC3DbpvP2BVhyIH+dV/5BjHk756u9VbwuAhu0QHyKscTnisQuz21lfRpOwiS9z4XdqeVAKol0bzg==}
+    deprecated: It is not compatible with newer versions of GA starting with v4, as long as you are using GAv3 it should be ok, but the package is not longer being maintained
     dependencies:
       workbox-background-sync: 7.0.0
       workbox-core: 7.0.0