This is an automated email from the ASF dual-hosted git repository.

popduke pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/bifromq-sites.git


The following commit(s) were added to refs/heads/master by this push:
     new fc07fdf  1. remove external image link 2. add mermaid support 3. 
replace some images with mermaid
fc07fdf is described below

commit fc07fdfcfae06c4aeb18c987c9017a65fd198575
Author: Yonny Hao <popd...@gmail.com>
AuthorDate: Wed Jun 25 15:21:16 2025 +0800

    1. remove external image link
    2. add mermaid support
    3. replace some images with mermaid
---
 docs/get_started/intro.md                          |    4 +-
 docs/user_guide/api/images/API-Arch.png            |  Bin 25560 -> 0 bytes
 docs/user_guide/api/intro.md                       |   22 +-
 docs/user_guide/basic/images/pub-sub-pattern.png   |  Bin 372353 -> 0 bytes
 .../basic/images/shared-subscription.png           |  Bin 489533 -> 0 bytes
 docs/user_guide/basic/pubsub.md                    |   29 +-
 docs/user_guide/basic/shared_sub.md                |   28 +-
 .../integration/images/bifromqapproach.jpg         |  Bin 133675 -> 0 bytes
 .../integration/images/commonapproach.jpg          |  Bin 129120 -> 0 bytes
 docs/user_guide/integration/intro.md               |   59 +-
 docusaurus.config.ts                               |   21 +-
 package-lock.json                                  | 1424 +++++++++++++++++---
 package.json                                       |    2 +-
 src/theme/Footer/index.js                          |   15 -
 14 files changed, 1416 insertions(+), 188 deletions(-)

diff --git a/docs/get_started/intro.md b/docs/get_started/intro.md
index 3643e8c..eaab195 100644
--- a/docs/get_started/intro.md
+++ b/docs/get_started/intro.md
@@ -45,6 +45,4 @@ To subscribe or manage your subscription for any of these 
lists, visit the Apach
 
 #### **Discord**
 
-We also use Discord for real-time chat and community discussion. Join our 
server to ask questions, share ideas, and stay up-to-date with the latest 
project progress. Please adhere to the Apache Code of Conduct while 
participating.
-
-<a href="https://discord.gg/Pfs3QRadRB";><img 
src="https://img.shields.io/discord/1115542029531885599?logo=discord&logoColor=white";
 alt="BifroMQ Discord server" /></a>
+We also use [Discord](https://discord.gg/Pfs3QRadRB) for real-time chat and 
community discussion. Join our server to ask questions, share ideas, and stay 
up-to-date with the latest project progress. Please adhere to the Apache Code 
of Conduct while participating.
diff --git a/docs/user_guide/api/images/API-Arch.png 
b/docs/user_guide/api/images/API-Arch.png
deleted file mode 100644
index f96fee0..0000000
Binary files a/docs/user_guide/api/images/API-Arch.png and /dev/null differ
diff --git a/docs/user_guide/api/intro.md b/docs/user_guide/api/intro.md
index 44522bf..138d6d8 100644
--- a/docs/user_guide/api/intro.md
+++ b/docs/user_guide/api/intro.md
@@ -10,6 +10,26 @@ BifroMQ incorporates built-in API capabilities, allowing for 
operations such as
 
 By default, the API service functionality is automatically enabled on every 
BifroMQ service node using port 8091, For more setting options, refer to the 
[configuration file](../../admin_guide/configuration/config_file_manual.md). 
API requests can be sent to any node, ensuring high availability of the API 
capabilities in a standard deployment setup.
 
-![API-Arch.png](images%2FAPI-Arch.png)
+```mermaid
+graph TD
+
+  Nginx(Nginx)
+
+  subgraph "BifroMQ"
+    BifroMQ1(BifroMQ<br>API)
+  end
+
+  subgraph "BifroMQ"
+    BifroMQ2(BifroMQ<br>API)
+  end
+
+  subgraph "BifroMQ"
+    BifroMQ3(BifroMQ<br>API)
+  end
+
+  Nginx --> BifroMQ1
+  Nginx --> BifroMQ2
+  Nginx --> BifroMQ3
+```
 
 The diagram above illustrates a common deployment scenario: distributing API 
requests using a front-end load balancer, such as Nginx.
diff --git a/docs/user_guide/basic/images/pub-sub-pattern.png 
b/docs/user_guide/basic/images/pub-sub-pattern.png
deleted file mode 100644
index bc6925c..0000000
Binary files a/docs/user_guide/basic/images/pub-sub-pattern.png and /dev/null 
differ
diff --git a/docs/user_guide/basic/images/shared-subscription.png 
b/docs/user_guide/basic/images/shared-subscription.png
deleted file mode 100644
index 3a9e977..0000000
Binary files a/docs/user_guide/basic/images/shared-subscription.png and 
/dev/null differ
diff --git a/docs/user_guide/basic/pubsub.md b/docs/user_guide/basic/pubsub.md
index 46eafd7..36746fd 100644
--- a/docs/user_guide/basic/pubsub.md
+++ b/docs/user_guide/basic/pubsub.md
@@ -5,7 +5,31 @@ title: "Pub/Sub"
 
 According to the MQTT protocol, entities involved in sending and receiving 
messages can be categorized as Publishers and Subscribers. The basic model is 
depicted below:
 
-<img src={require('./images/pub-sub-pattern.png').default} alt="Pub/Sub 
pattern" width="600" />
+```mermaid
+graph LR
+
+  subgraph "MQTT Clients"
+    Sensor0(Sensor0)
+    Sensor1(Sensor1)
+    Sensor2(Sensor2)
+  end
+
+  subgraph "MQTT Clients"
+    Process0(Process0)
+    Process1(Process1)
+  end
+
+  BifroMQ(BifroMQ)
+
+  Sensor0 -->|Publish 20°C| BifroMQ
+  Sensor1 --> BifroMQ
+  Sensor2 --> BifroMQ
+
+  BifroMQ -->|Publish: 20°C| Process0
+  BifroMQ --> Process1
+
+  Process0 -.->|Subscribe| BifroMQ
+```
 
 - **Publishing Messages**: Clients can publish messages to the server through 
a connection. Messages are published based on `topics`, which describe the 
content of the communication and are hierarchical in nature (
   e.g., `home/bedroom/temperature`).
@@ -21,7 +45,6 @@ According to the MQTT protocol, entities involved in sending 
and receiving messa
 
 - **Subscribing to Topics**: In subscription, the subscribed topics are called 
`topicFilter`. The server receives subscription requests from clients and 
records these subscriptions. Generally, subscriptions can be either non-wildcard
   subscriptions or wildcard subscriptions.
-
   - For **non-wildcard subscriptions**: Clients subscribe to a specific topic 
without using wildcards. For example, if a client subscribes to 
`home/bedroom/temperature`, it will only match messages with the
     topic `home/bedroom/temperature`.
 
@@ -29,12 +52,10 @@ According to the MQTT protocol, entities involved in 
sending and receiving messa
     how to use wildcards for subscriptions:
 
     Using the `+` wildcard:
-
     - Subscribing to `sensor/+/temperature` matches topics like 
`sensor/bedroom/temperature`, `sensor/kitchen/temperature`, etc.
     - Subscribing to `home/+/light/+` matches topics like 
`home/livingroom/light/on`, `home/bedroom/light/off`, etc.
 
     Using the `#` wildcard:
-
     - Subscribing to `home/bedroom/#` matches topics like 
`home/bedroom/light/on`, `home/bedroom/temperature`, and their subtopics.
     - Subscribing to `home/+/#` matches topics like `home/bedroom/light/on`, 
`home/kitchen/temperature`, and their subtopics.
     - Subscribing to `#` matches all topics.
diff --git a/docs/user_guide/basic/shared_sub.md 
b/docs/user_guide/basic/shared_sub.md
index 6cd3012..6ac2c18 100644
--- a/docs/user_guide/basic/shared_sub.md
+++ b/docs/user_guide/basic/shared_sub.md
@@ -5,7 +5,33 @@ title: "Shared Subscriptions"
 
 MQTT Shared Subscriptions are a feature of the MQTT protocol that enables 
multiple subscribers to receive messages from the same topic in a fair manner.
 
-<img src={require('./images/shared-subscription.png').default} alt="Pub/Sub 
pattern" width="600" />
+```mermaid
+graph LR
+
+  Publisher(Publisher)
+  BifroMQ(BifroMQ)
+
+  Subscriber0(Subscriber 0)
+  Subscriber1(Subscriber 1)
+
+  subgraph Shared Group
+    SharedSubscriber0(Shared Subscriber 0)
+    SharedSubscriber1(Shared Subscriber 1)
+  end
+
+  Publisher -->|Publish 20°C<br>x/y/z| BifroMQ
+  BifroMQ -->|Publish 20°C| Subscriber0
+  BifroMQ -->|Publish 20°C| Subscriber1
+
+  BifroMQ --> SharedSubscriber0
+  BifroMQ --> SharedSubscriber1
+
+  Subscriber0 -.->|Subscribe<br>x/y/z| BifroMQ
+  Subscriber1 -.->|Subscribe<br>x/y/z| BifroMQ
+
+  SharedSubscriber0 -.->|Subscribe<br>$share/group1/x/y/z| BifroMQ
+  SharedSubscriber1 -.->|Subscribe<br>$share/group1/x/y/z| BifroMQ
+```
 
 To initiate a shared subscription, you should subscribe to a topic using the 
`$share/{groupName}/{topicFilter}` format. `{groupName}` refers to the name of 
the group sharing the subscription, as demonstrated with `group1` in the 
diagram.
 When subscribers choose to subscribe using the same topicFilter and groupName, 
they become part of the same shared group. Whenever a publisher sends a 
message, BifroMQ determines which subscriber in the group receives the message 
based on the defined sharing strategy.
diff --git a/docs/user_guide/integration/images/bifromqapproach.jpg 
b/docs/user_guide/integration/images/bifromqapproach.jpg
deleted file mode 100644
index 093d04c..0000000
Binary files a/docs/user_guide/integration/images/bifromqapproach.jpg and 
/dev/null differ
diff --git a/docs/user_guide/integration/images/commonapproach.jpg 
b/docs/user_guide/integration/images/commonapproach.jpg
deleted file mode 100644
index e6100b4..0000000
Binary files a/docs/user_guide/integration/images/commonapproach.jpg and 
/dev/null differ
diff --git a/docs/user_guide/integration/intro.md 
b/docs/user_guide/integration/intro.md
index f47d839..18aea81 100644
--- a/docs/user_guide/integration/intro.md
+++ b/docs/user_guide/integration/intro.md
@@ -21,13 +21,68 @@ Data integration with BifroMQ involves a bidirectional flow 
of messages between
 
 A common architectural pattern involves embedding downstream system clients 
directly within the MQTT Broker. This method utilizes specific communication 
mechanisms and mapping logic to achieve protocol conversion, treating the MQTT 
protocol implementation and integration with heterogeneous systems as a unified 
whole, providing out-of-the-box integration capabilities.
 
-![Common Approach](./images/commonapproach.jpg)
+```mermaid
+flowchart LR
+
+%% 整体框架
+    subgraph MQTT_Broker_System["MQTT Broker System"]
+
+        mqttserver[MQTT Server]
+
+        subgraph Data Integration
+            kafkaproducer[Kafka Producer]
+            mongoclient[Mongo Client]
+            otherclients[Other Clients]
+        end
+
+        mqttserver -- Ad-hoc --> kafkaproducer
+        mqttserver -- Ad-hoc --> mongoclient
+        mqttserver -- Ad-hoc --> otherclients
+    end
+
+%% 外部连接
+    mqttclient[MQTT Client] -->|Pub/Sub| mqttserver
+
+%% 目标系统
+    kafkaproducer --> kafka[kafka]
+    mongoclient --> mongodb[mongoDB]
+    otherclients --> cloud[Cloud Service]
+```
 
 ### Non-Coupled Pattern
 
 Contrary to the common practice, BifroMQ recommends a non-coupled approach for 
data integration: Integration logic directly utilizes the MQTT protocol as a 
client to subscribe to messages from BifroMQ. This architectural pattern allows 
the integration module to be reused across different MQTT Brokers, hence the 
BifroMQ project itself does not include out-of-the-box data integration 
functionalities.
 
-![BifroMQ Approach](./images/bifromqapproach.jpg)
+```mermaid
+flowchart LR
+
+%% 左侧 MQTT Clients
+    mqttclients[MQTT Clients]
+
+%% 中间 BifroMQ
+    bifromq[BifroMQ]
+
+%% 右上 Kafka Integration
+    subgraph Kafka Integration
+        kafka_mqtt[MQTT Clients]
+        kafka_producer[Kafka Producer]
+        kafka[kafka]
+        kafka_mqtt --> kafka_producer --> kafka
+    end
+
+%% 右下 Mongo Integration
+    subgraph Mongo Integration
+        mongo_mqtt[MQTT Clients]
+        mongo_client[Mongo Client]
+        mongodb[mongoDB]
+        mongo_mqtt --> mongo_client --> mongodb
+    end
+
+%% 主干连接
+    mqttclients -- Pub/Sub --> bifromq
+    bifromq -- Shared Sub --> kafka_mqtt
+    bifromq -- Shared Sub --> mongo_mqtt
+```
 
 ## Directions of Message Flow Integration
 
diff --git a/docusaurus.config.ts b/docusaurus.config.ts
index 784a0a7..9daa9c0 100644
--- a/docusaurus.config.ts
+++ b/docusaurus.config.ts
@@ -28,6 +28,23 @@ const config = {
     locales: ["en"],
   },
 
+  markdown: {
+    mermaid: true,
+  },
+  themes: [
+    [
+      '@docusaurus/theme-mermaid',
+      {
+        mermaid: {
+          theme: {
+            light: 'default',
+            dark: 'dark'
+          }
+        },
+      },
+    ]
+  ],
+
   presets: [
     [
       "classic",
@@ -36,7 +53,7 @@ const config = {
         docs: {
           sidebarPath: require.resolve("./sidebars.js"),
           editUrl: ({ locale, versionDocsDirPath, docPath }) => {
-            return 
`https://github.com/apache/${siteRepoName}/tree/master/website/${versionDocsDirPath}/${docPath}`;
+            return 
`https://github.com/apache/${siteRepoName}/tree/master/${versionDocsDirPath}/${docPath}`;
           },
           lastVersion: "current",
           versions: {
@@ -50,7 +67,7 @@ const config = {
           showReadingTime: true,
           blogSidebarCount: 10,
           editUrl: ({ locale }) => {
-            return 
`https://github.com/apache/${siteRepoName}/tree/master/website/blog`;
+            return 
`https://github.com/apache/${siteRepoName}/tree/master/blog`;
           },
         },
         theme: {
diff --git a/package-lock.json b/package-lock.json
index b4a608c..0bcd225 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -1,17 +1,17 @@
 {
-  "name": "BifroMQ",
+  "name": "bifromq",
   "version": "1.0.0",
   "lockfileVersion": 3,
   "requires": true,
   "packages": {
     "": {
-      "name": "BifroMQ",
+      "name": "bifromq",
       "version": "1.0.0",
       "dependencies": {
-        "@docsly/react": "^1.9.1",
         "@docusaurus/core": "^3.8.1",
         "@docusaurus/preset-classic": "^3.8.1",
         "@docusaurus/theme-common": "^3.8.1",
+        "@docusaurus/theme-mermaid": "^3.8.1",
         "@heroicons/react": "^2.2.0",
         "@mdx-js/react": "^3.1.0",
         "@radix-ui/react-icons": "^1.3.2",
@@ -277,6 +277,26 @@
         "node": ">=6.0.0"
       }
     },
+    "node_modules/@antfu/install-pkg": {
+      "version": "1.1.0",
+      "resolved": 
"https://registry.npmjs.org/@antfu/install-pkg/-/install-pkg-1.1.0.tgz";,
+      "integrity": 
"sha512-MGQsmw10ZyI+EJo45CdSER4zEb+p31LpDAFp2Z3gkSd1yqVZGi0Ebx++YTEMonJy4oChEMLsxZ64j8FH6sSqtQ==",
+      "dependencies": {
+        "package-manager-detector": "^1.3.0",
+        "tinyexec": "^1.0.1"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu";
+      }
+    },
+    "node_modules/@antfu/utils": {
+      "version": "8.1.1",
+      "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-8.1.1.tgz";,
+      "integrity": 
"sha512-Mex9nXf9vR6AhcXmMrlz/HVgYYZpVGJ6YlPgwl7UnaFpnshXs6EK/oa5Gpf3CzENMjkvEx2tQtntGnb7UtSTOQ==",
+      "funding": {
+        "url": "https://github.com/sponsors/antfu";
+      }
+    },
     "node_modules/@babel/code-frame": {
       "version": "7.27.1",
       "resolved": 
"https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.27.1.tgz";,
@@ -1842,6 +1862,45 @@
         "node": ">=6.9.0"
       }
     },
+    "node_modules/@braintree/sanitize-url": {
+      "version": "7.1.1",
+      "resolved": 
"https://registry.npmjs.org/@braintree/sanitize-url/-/sanitize-url-7.1.1.tgz";,
+      "integrity": 
"sha512-i1L7noDNxtFyL5DmZafWy1wRVhGehQmzZaz1HiN5e7iylJMSZR7ekOV7NsIqa5qBldlLrsKv4HbgFUVlQrz8Mw=="
+    },
+    "node_modules/@chevrotain/cst-dts-gen": {
+      "version": "11.0.3",
+      "resolved": 
"https://registry.npmjs.org/@chevrotain/cst-dts-gen/-/cst-dts-gen-11.0.3.tgz";,
+      "integrity": 
"sha512-BvIKpRLeS/8UbfxXxgC33xOumsacaeCKAjAeLyOn7Pcp95HiRbrpl14S+9vaZLolnbssPIUuiUd8IvgkRyt6NQ==",
+      "dependencies": {
+        "@chevrotain/gast": "11.0.3",
+        "@chevrotain/types": "11.0.3",
+        "lodash-es": "4.17.21"
+      }
+    },
+    "node_modules/@chevrotain/gast": {
+      "version": "11.0.3",
+      "resolved": 
"https://registry.npmjs.org/@chevrotain/gast/-/gast-11.0.3.tgz";,
+      "integrity": 
"sha512-+qNfcoNk70PyS/uxmj3li5NiECO+2YKZZQMbmjTqRI3Qchu8Hig/Q9vgkHpI3alNjr7M+a2St5pw5w5F6NL5/Q==",
+      "dependencies": {
+        "@chevrotain/types": "11.0.3",
+        "lodash-es": "4.17.21"
+      }
+    },
+    "node_modules/@chevrotain/regexp-to-ast": {
+      "version": "11.0.3",
+      "resolved": 
"https://registry.npmjs.org/@chevrotain/regexp-to-ast/-/regexp-to-ast-11.0.3.tgz";,
+      "integrity": 
"sha512-1fMHaBZxLFvWI067AVbGJav1eRY7N8DDvYCTwGBiE/ytKBgP8azTdgyrKyWZ9Mfh09eHWb5PgTSO8wi7U824RA=="
+    },
+    "node_modules/@chevrotain/types": {
+      "version": "11.0.3",
+      "resolved": 
"https://registry.npmjs.org/@chevrotain/types/-/types-11.0.3.tgz";,
+      "integrity": 
"sha512-gsiM3G8b58kZC2HaWR50gu6Y1440cHiJ+i3JUvcp/35JchYejb2+5MVeJK0iKThYpAa/P2PYFV4hoi44HD+aHQ=="
+    },
+    "node_modules/@chevrotain/utils": {
+      "version": "11.0.3",
+      "resolved": 
"https://registry.npmjs.org/@chevrotain/utils/-/utils-11.0.3.tgz";,
+      "integrity": 
"sha512-YslZMgtJUyuMbZ+aKvfF3x1f5liK4mWNxghFRv7jqRR9C3R3fAOGTTKvxXDa2Y1s9zSbcpuO0cAxDYsc9SrXoQ=="
+    },
     "node_modules/@colors/colors": {
       "version": "1.5.0",
       "resolved": 
"https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz";,
@@ -2979,31 +3038,6 @@
         }
       }
     },
-    "node_modules/@docsly/react": {
-      "version": "1.9.1",
-      "resolved": "https://registry.npmjs.org/@docsly/react/-/react-1.9.1.tgz";,
-      "integrity": 
"sha512-MzInFvAXoAC2KlouOJgdKw7TLHShKwqDCv8JbmbISnUG/h1iEqGVTnfxwPJIPBfMGnkyqB6+7Ja+khV5Gir6hg==",
-      "dependencies": {
-        "@heroicons/react": "^2.0.18",
-        "clsx": "^1.2.1",
-        "dayjs": "^1.11.7",
-        "react-error-boundary": "^3.1.4",
-        "react-hot-toast": "^2.4.0",
-        "swr": "^2.1.0"
-      },
-      "peerDependencies": {
-        "react": ">=17",
-        "react-dom": ">=17"
-      }
-    },
-    "node_modules/@docsly/react/node_modules/clsx": {
-      "version": "1.2.1",
-      "resolved": "https://registry.npmjs.org/clsx/-/clsx-1.2.1.tgz";,
-      "integrity": 
"sha512-EcR6r5a8bj6pu3ycsa/E/cKVGuTgZJZdsyUYHOksG/UHIiKfjxzRxYJpyVBwYaQeOvghal9fcc4PidlgzugAQg==",
-      "engines": {
-        "node": ">=6"
-      }
-    },
     "node_modules/@docusaurus/babel": {
       "version": "3.8.1",
       "resolved": 
"https://registry.npmjs.org/@docusaurus/babel/-/babel-3.8.1.tgz";,
@@ -3531,6 +3565,27 @@
         "react-dom": "^18.0.0 || ^19.0.0"
       }
     },
+    "node_modules/@docusaurus/theme-mermaid": {
+      "version": "3.8.1",
+      "resolved": 
"https://registry.npmjs.org/@docusaurus/theme-mermaid/-/theme-mermaid-3.8.1.tgz";,
+      "integrity": 
"sha512-IWYqjyTPjkNnHsFFu9+4YkeXS7PD1xI3Bn2shOhBq+f95mgDfWInkpfBN4aYvx4fTT67Am6cPtohRdwh4Tidtg==",
+      "dependencies": {
+        "@docusaurus/core": "3.8.1",
+        "@docusaurus/module-type-aliases": "3.8.1",
+        "@docusaurus/theme-common": "3.8.1",
+        "@docusaurus/types": "3.8.1",
+        "@docusaurus/utils-validation": "3.8.1",
+        "mermaid": ">=11.6.0",
+        "tslib": "^2.6.0"
+      },
+      "engines": {
+        "node": ">=18.0"
+      },
+      "peerDependencies": {
+        "react": "^18.0.0 || ^19.0.0",
+        "react-dom": "^18.0.0 || ^19.0.0"
+      }
+    },
     "node_modules/@docusaurus/theme-search-algolia": {
       "version": "3.8.1",
       "resolved": 
"https://registry.npmjs.org/@docusaurus/theme-search-algolia/-/theme-search-algolia-3.8.1.tgz";,
@@ -3694,6 +3749,37 @@
         "react": ">= 16 || ^19.0.0-rc"
       }
     },
+    "node_modules/@iconify/types": {
+      "version": "2.0.0",
+      "resolved": 
"https://registry.npmjs.org/@iconify/types/-/types-2.0.0.tgz";,
+      "integrity": 
"sha512-+wluvCrRhXrhyOmRDJ3q8mux9JkKy5SJ/v8ol2tu4FVjyYvtEzkc/3pK15ET6RKg4b4w4BmTk1+gsCUhf21Ykg=="
+    },
+    "node_modules/@iconify/utils": {
+      "version": "2.3.0",
+      "resolved": 
"https://registry.npmjs.org/@iconify/utils/-/utils-2.3.0.tgz";,
+      "integrity": 
"sha512-GmQ78prtwYW6EtzXRU1rY+KwOKfz32PD7iJh6Iyqw68GiKuoZ2A6pRtzWONz5VQJbp50mEjXh/7NkumtrAgRKA==",
+      "dependencies": {
+        "@antfu/install-pkg": "^1.0.0",
+        "@antfu/utils": "^8.1.0",
+        "@iconify/types": "^2.0.0",
+        "debug": "^4.4.0",
+        "globals": "^15.14.0",
+        "kolorist": "^1.8.0",
+        "local-pkg": "^1.0.0",
+        "mlly": "^1.7.4"
+      }
+    },
+    "node_modules/@iconify/utils/node_modules/globals": {
+      "version": "15.15.0",
+      "resolved": "https://registry.npmjs.org/globals/-/globals-15.15.0.tgz";,
+      "integrity": 
"sha512-7ACyT3wmyp3I61S4fG682L0VA2RGD9otkqGJIwNUMF1SWUombIIk+af1unuDYgMm082aHYwD+mzJvv9Iu8dsgg==",
+      "engines": {
+        "node": ">=18"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/sindresorhus";
+      }
+    },
     "node_modules/@isaacs/cliui": {
       "version": "8.0.2",
       "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz";,
@@ -3870,6 +3956,14 @@
         "react": ">=16"
       }
     },
+    "node_modules/@mermaid-js/parser": {
+      "version": "0.5.0",
+      "resolved": 
"https://registry.npmjs.org/@mermaid-js/parser/-/parser-0.5.0.tgz";,
+      "integrity": 
"sha512-AiaN7+VjXC+3BYE+GwNezkpjIcCI2qIMB/K4S2/vMWe0q/XJCBbx5+K7iteuz7VyltX9iAK4FmVTvGc9kjOV4w==",
+      "dependencies": {
+        "langium": "3.3.1"
+      }
+    },
     "node_modules/@nodelib/fs.scandir": {
       "version": "2.1.5",
       "resolved": 
"https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz";,
@@ -4315,6 +4409,228 @@
         "@types/node": "*"
       }
     },
+    "node_modules/@types/d3": {
+      "version": "7.4.3",
+      "resolved": "https://registry.npmjs.org/@types/d3/-/d3-7.4.3.tgz";,
+      "integrity": 
"sha512-lZXZ9ckh5R8uiFVt8ogUNf+pIrK4EsWrx2Np75WvF/eTpJ0FMHNhjXk8CKEx/+gpHbNQyJWehbFaTvqmHWB3ww==",
+      "dependencies": {
+        "@types/d3-array": "*",
+        "@types/d3-axis": "*",
+        "@types/d3-brush": "*",
+        "@types/d3-chord": "*",
+        "@types/d3-color": "*",
+        "@types/d3-contour": "*",
+        "@types/d3-delaunay": "*",
+        "@types/d3-dispatch": "*",
+        "@types/d3-drag": "*",
+        "@types/d3-dsv": "*",
+        "@types/d3-ease": "*",
+        "@types/d3-fetch": "*",
+        "@types/d3-force": "*",
+        "@types/d3-format": "*",
+        "@types/d3-geo": "*",
+        "@types/d3-hierarchy": "*",
+        "@types/d3-interpolate": "*",
+        "@types/d3-path": "*",
+        "@types/d3-polygon": "*",
+        "@types/d3-quadtree": "*",
+        "@types/d3-random": "*",
+        "@types/d3-scale": "*",
+        "@types/d3-scale-chromatic": "*",
+        "@types/d3-selection": "*",
+        "@types/d3-shape": "*",
+        "@types/d3-time": "*",
+        "@types/d3-time-format": "*",
+        "@types/d3-timer": "*",
+        "@types/d3-transition": "*",
+        "@types/d3-zoom": "*"
+      }
+    },
+    "node_modules/@types/d3-array": {
+      "version": "3.2.1",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-array/-/d3-array-3.2.1.tgz";,
+      "integrity": 
"sha512-Y2Jn2idRrLzUfAKV2LyRImR+y4oa2AntrgID95SHJxuMUrkNXmanDSed71sRNZysveJVt1hLLemQZIady0FpEg=="
+    },
+    "node_modules/@types/d3-axis": {
+      "version": "3.0.6",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-axis/-/d3-axis-3.0.6.tgz";,
+      "integrity": 
"sha512-pYeijfZuBd87T0hGn0FO1vQ/cgLk6E1ALJjfkC0oJ8cbwkZl3TpgS8bVBLZN+2jjGgg38epgxb2zmoGtSfvgMw==",
+      "dependencies": {
+        "@types/d3-selection": "*"
+      }
+    },
+    "node_modules/@types/d3-brush": {
+      "version": "3.0.6",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-brush/-/d3-brush-3.0.6.tgz";,
+      "integrity": 
"sha512-nH60IZNNxEcrh6L1ZSMNA28rj27ut/2ZmI3r96Zd+1jrZD++zD3LsMIjWlvg4AYrHn/Pqz4CF3veCxGjtbqt7A==",
+      "dependencies": {
+        "@types/d3-selection": "*"
+      }
+    },
+    "node_modules/@types/d3-chord": {
+      "version": "3.0.6",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-chord/-/d3-chord-3.0.6.tgz";,
+      "integrity": 
"sha512-LFYWWd8nwfwEmTZG9PfQxd17HbNPksHBiJHaKuY1XeqscXacsS2tyoo6OdRsjf+NQYeB6XrNL3a25E3gH69lcg=="
+    },
+    "node_modules/@types/d3-color": {
+      "version": "3.1.3",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-color/-/d3-color-3.1.3.tgz";,
+      "integrity": 
"sha512-iO90scth9WAbmgv7ogoq57O9YpKmFBbmoEoCHDB2xMBY0+/KVrqAaCDyCE16dUspeOvIxFFRI+0sEtqDqy2b4A=="
+    },
+    "node_modules/@types/d3-contour": {
+      "version": "3.0.6",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-contour/-/d3-contour-3.0.6.tgz";,
+      "integrity": 
"sha512-BjzLgXGnCWjUSYGfH1cpdo41/hgdWETu4YxpezoztawmqsvCeep+8QGfiY6YbDvfgHz/DkjeIkkZVJavB4a3rg==",
+      "dependencies": {
+        "@types/d3-array": "*",
+        "@types/geojson": "*"
+      }
+    },
+    "node_modules/@types/d3-delaunay": {
+      "version": "6.0.4",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-delaunay/-/d3-delaunay-6.0.4.tgz";,
+      "integrity": 
"sha512-ZMaSKu4THYCU6sV64Lhg6qjf1orxBthaC161plr5KuPHo3CNm8DTHiLw/5Eq2b6TsNP0W0iJrUOFscY6Q450Hw=="
+    },
+    "node_modules/@types/d3-dispatch": {
+      "version": "3.0.6",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-dispatch/-/d3-dispatch-3.0.6.tgz";,
+      "integrity": 
"sha512-4fvZhzMeeuBJYZXRXrRIQnvUYfyXwYmLsdiN7XXmVNQKKw1cM8a5WdID0g1hVFZDqT9ZqZEY5pD44p24VS7iZQ=="
+    },
+    "node_modules/@types/d3-drag": {
+      "version": "3.0.7",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-drag/-/d3-drag-3.0.7.tgz";,
+      "integrity": 
"sha512-HE3jVKlzU9AaMazNufooRJ5ZpWmLIoc90A37WU2JMmeq28w1FQqCZswHZ3xR+SuxYftzHq6WU6KJHvqxKzTxxQ==",
+      "dependencies": {
+        "@types/d3-selection": "*"
+      }
+    },
+    "node_modules/@types/d3-dsv": {
+      "version": "3.0.7",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-dsv/-/d3-dsv-3.0.7.tgz";,
+      "integrity": 
"sha512-n6QBF9/+XASqcKK6waudgL0pf/S5XHPPI8APyMLLUHd8NqouBGLsU8MgtO7NINGtPBtk9Kko/W4ea0oAspwh9g=="
+    },
+    "node_modules/@types/d3-ease": {
+      "version": "3.0.2",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-ease/-/d3-ease-3.0.2.tgz";,
+      "integrity": 
"sha512-NcV1JjO5oDzoK26oMzbILE6HW7uVXOHLQvHshBUW4UMdZGfiY6v5BeQwh9a9tCzv+CeefZQHJt5SRgK154RtiA=="
+    },
+    "node_modules/@types/d3-fetch": {
+      "version": "3.0.7",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-fetch/-/d3-fetch-3.0.7.tgz";,
+      "integrity": 
"sha512-fTAfNmxSb9SOWNB9IoG5c8Hg6R+AzUHDRlsXsDZsNp6sxAEOP0tkP3gKkNSO/qmHPoBFTxNrjDprVHDQDvo5aA==",
+      "dependencies": {
+        "@types/d3-dsv": "*"
+      }
+    },
+    "node_modules/@types/d3-force": {
+      "version": "3.0.10",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-force/-/d3-force-3.0.10.tgz";,
+      "integrity": 
"sha512-ZYeSaCF3p73RdOKcjj+swRlZfnYpK1EbaDiYICEEp5Q6sUiqFaFQ9qgoshp5CzIyyb/yD09kD9o2zEltCexlgw=="
+    },
+    "node_modules/@types/d3-format": {
+      "version": "3.0.4",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-format/-/d3-format-3.0.4.tgz";,
+      "integrity": 
"sha512-fALi2aI6shfg7vM5KiR1wNJnZ7r6UuggVqtDA+xiEdPZQwy/trcQaHnwShLuLdta2rTymCNpxYTiMZX/e09F4g=="
+    },
+    "node_modules/@types/d3-geo": {
+      "version": "3.1.0",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-geo/-/d3-geo-3.1.0.tgz";,
+      "integrity": 
"sha512-856sckF0oP/diXtS4jNsiQw/UuK5fQG8l/a9VVLeSouf1/PPbBE1i1W852zVwKwYCBkFJJB7nCFTbk6UMEXBOQ==",
+      "dependencies": {
+        "@types/geojson": "*"
+      }
+    },
+    "node_modules/@types/d3-hierarchy": {
+      "version": "3.1.7",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-hierarchy/-/d3-hierarchy-3.1.7.tgz";,
+      "integrity": 
"sha512-tJFtNoYBtRtkNysX1Xq4sxtjK8YgoWUNpIiUee0/jHGRwqvzYxkq0hGVbbOGSz+JgFxxRu4K8nb3YpG3CMARtg=="
+    },
+    "node_modules/@types/d3-interpolate": {
+      "version": "3.0.4",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-interpolate/-/d3-interpolate-3.0.4.tgz";,
+      "integrity": 
"sha512-mgLPETlrpVV1YRJIglr4Ez47g7Yxjl1lj7YKsiMCb27VJH9W8NVM6Bb9d8kkpG/uAQS5AmbA48q2IAolKKo1MA==",
+      "dependencies": {
+        "@types/d3-color": "*"
+      }
+    },
+    "node_modules/@types/d3-path": {
+      "version": "3.1.1",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-path/-/d3-path-3.1.1.tgz";,
+      "integrity": 
"sha512-VMZBYyQvbGmWyWVea0EHs/BwLgxc+MKi1zLDCONksozI4YJMcTt8ZEuIR4Sb1MMTE8MMW49v0IwI5+b7RmfWlg=="
+    },
+    "node_modules/@types/d3-polygon": {
+      "version": "3.0.2",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-polygon/-/d3-polygon-3.0.2.tgz";,
+      "integrity": 
"sha512-ZuWOtMaHCkN9xoeEMr1ubW2nGWsp4nIql+OPQRstu4ypeZ+zk3YKqQT0CXVe/PYqrKpZAi+J9mTs05TKwjXSRA=="
+    },
+    "node_modules/@types/d3-quadtree": {
+      "version": "3.0.6",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-quadtree/-/d3-quadtree-3.0.6.tgz";,
+      "integrity": 
"sha512-oUzyO1/Zm6rsxKRHA1vH0NEDG58HrT5icx/azi9MF1TWdtttWl0UIUsjEQBBh+SIkrpd21ZjEv7ptxWys1ncsg=="
+    },
+    "node_modules/@types/d3-random": {
+      "version": "3.0.3",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-random/-/d3-random-3.0.3.tgz";,
+      "integrity": 
"sha512-Imagg1vJ3y76Y2ea0871wpabqp613+8/r0mCLEBfdtqC7xMSfj9idOnmBYyMoULfHePJyxMAw3nWhJxzc+LFwQ=="
+    },
+    "node_modules/@types/d3-scale": {
+      "version": "4.0.9",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-scale/-/d3-scale-4.0.9.tgz";,
+      "integrity": 
"sha512-dLmtwB8zkAeO/juAMfnV+sItKjlsw2lKdZVVy6LRr0cBmegxSABiLEpGVmSJJ8O08i4+sGR6qQtb6WtuwJdvVw==",
+      "dependencies": {
+        "@types/d3-time": "*"
+      }
+    },
+    "node_modules/@types/d3-scale-chromatic": {
+      "version": "3.1.0",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz";,
+      "integrity": 
"sha512-iWMJgwkK7yTRmWqRB5plb1kadXyQ5Sj8V/zYlFGMUBbIPKQScw+Dku9cAAMgJG+z5GYDoMjWGLVOvjghDEFnKQ=="
+    },
+    "node_modules/@types/d3-selection": {
+      "version": "3.0.11",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-selection/-/d3-selection-3.0.11.tgz";,
+      "integrity": 
"sha512-bhAXu23DJWsrI45xafYpkQ4NtcKMwWnAC/vKrd2l+nxMFuvOT3XMYTIj2opv8vq8AO5Yh7Qac/nSeP/3zjTK0w=="
+    },
+    "node_modules/@types/d3-shape": {
+      "version": "3.1.7",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-shape/-/d3-shape-3.1.7.tgz";,
+      "integrity": 
"sha512-VLvUQ33C+3J+8p+Daf+nYSOsjB4GXp19/S/aGo60m9h1v6XaxjiT82lKVWJCfzhtuZ3yD7i/TPeC/fuKLLOSmg==",
+      "dependencies": {
+        "@types/d3-path": "*"
+      }
+    },
+    "node_modules/@types/d3-time": {
+      "version": "3.0.4",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-time/-/d3-time-3.0.4.tgz";,
+      "integrity": 
"sha512-yuzZug1nkAAaBlBBikKZTgzCeA+k1uy4ZFwWANOfKw5z5LRhV0gNA7gNkKm7HoK+HRN0wX3EkxGk0fpbWhmB7g=="
+    },
+    "node_modules/@types/d3-time-format": {
+      "version": "4.0.3",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-time-format/-/d3-time-format-4.0.3.tgz";,
+      "integrity": 
"sha512-5xg9rC+wWL8kdDj153qZcsJ0FWiFt0J5RB6LYUNZjwSnesfblqrI/bJ1wBdJ8OQfncgbJG5+2F+qfqnqyzYxyg=="
+    },
+    "node_modules/@types/d3-timer": {
+      "version": "3.0.2",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-timer/-/d3-timer-3.0.2.tgz";,
+      "integrity": 
"sha512-Ps3T8E8dZDam6fUyNiMkekK3XUsaUEik+idO9/YjPtfj2qruF8tFBXS7XhtE4iIXBLxhmLjP3SXpLhVf21I9Lw=="
+    },
+    "node_modules/@types/d3-transition": {
+      "version": "3.0.9",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-transition/-/d3-transition-3.0.9.tgz";,
+      "integrity": 
"sha512-uZS5shfxzO3rGlu0cC3bjmMFKsXv+SmZZcgp0KD22ts4uGXp5EVYGzu/0YdwZeKmddhcAccYtREJKkPfXkZuCg==",
+      "dependencies": {
+        "@types/d3-selection": "*"
+      }
+    },
+    "node_modules/@types/d3-zoom": {
+      "version": "3.0.8",
+      "resolved": 
"https://registry.npmjs.org/@types/d3-zoom/-/d3-zoom-3.0.8.tgz";,
+      "integrity": 
"sha512-iqMC4/YlFCSlO8+2Ii1GGGliCAY4XdeG748w5vQUbevlbDu0zSjH/+jojorQVBK/se0j6DUFNPBGSqD3YWYnDw==",
+      "dependencies": {
+        "@types/d3-interpolate": "*",
+        "@types/d3-selection": "*"
+      }
+    },
     "node_modules/@types/debug": {
       "version": "4.1.12",
       "resolved": "https://registry.npmjs.org/@types/debug/-/debug-4.1.12.tgz";,
@@ -4387,6 +4703,11 @@
         "@types/send": "*"
       }
     },
+    "node_modules/@types/geojson": {
+      "version": "7946.0.16",
+      "resolved": 
"https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.16.tgz";,
+      "integrity": 
"sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg=="
+    },
     "node_modules/@types/gtag.js": {
       "version": "0.0.12",
       "resolved": 
"https://registry.npmjs.org/@types/gtag.js/-/gtag.js-0.0.12.tgz";,
@@ -4593,6 +4914,12 @@
         "@types/node": "*"
       }
     },
+    "node_modules/@types/trusted-types": {
+      "version": "2.0.7",
+      "resolved": 
"https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz";,
+      "integrity": 
"sha512-ScaPdn1dQczgbl0QFTeTOmVHFULt394XJgOQNoyVhZ6r2vLnMLJfBPd53SB52T/3G36VI1/g2MZaX0cwDuXsfw==",
+      "optional": true
+    },
     "node_modules/@types/unist": {
       "version": "3.0.3",
       "resolved": "https://registry.npmjs.org/@types/unist/-/unist-3.0.3.tgz";,
@@ -5600,6 +5927,30 @@
         "url": "https://github.com/sponsors/fb55";
       }
     },
+    "node_modules/chevrotain": {
+      "version": "11.0.3",
+      "resolved": 
"https://registry.npmjs.org/chevrotain/-/chevrotain-11.0.3.tgz";,
+      "integrity": 
"sha512-ci2iJH6LeIkvP9eJW6gpueU8cnZhv85ELY8w8WiFtNjMHA5ad6pQLaJo9mEly/9qUyCpvqX8/POVUTf18/HFdw==",
+      "dependencies": {
+        "@chevrotain/cst-dts-gen": "11.0.3",
+        "@chevrotain/gast": "11.0.3",
+        "@chevrotain/regexp-to-ast": "11.0.3",
+        "@chevrotain/types": "11.0.3",
+        "@chevrotain/utils": "11.0.3",
+        "lodash-es": "4.17.21"
+      }
+    },
+    "node_modules/chevrotain-allstar": {
+      "version": "0.3.1",
+      "resolved": 
"https://registry.npmjs.org/chevrotain-allstar/-/chevrotain-allstar-0.3.1.tgz";,
+      "integrity": 
"sha512-b7g+y9A0v4mxCW1qUhf3BSVPg+/NvGErk/dOkrDaHA0nQIQGAtrOjlX//9OQtRlSCy+x9rfB5N8yC71lH1nvMw==",
+      "dependencies": {
+        "lodash-es": "^4.17.21"
+      },
+      "peerDependencies": {
+        "chevrotain": "^11.0.0"
+      }
+    },
     "node_modules/chokidar": {
       "version": "3.6.0",
       "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz";,
@@ -5863,6 +6214,11 @@
       "resolved": 
"https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz";,
       "integrity": 
"sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg=="
     },
+    "node_modules/confbox": {
+      "version": "0.2.2",
+      "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.2.2.tgz";,
+      "integrity": 
"sha512-1NB+BKqhtNipMsov4xI/NnhCKp9XG9NamYp5PVm9klAT0fsrNPjaFICsCFhNhwZJKNh7zB/3q8qXz0E9oaMNtQ=="
+    },
     "node_modules/config-chain": {
       "version": "1.1.13",
       "resolved": 
"https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz";,
@@ -6056,6 +6412,14 @@
       "resolved": 
"https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz";,
       "integrity": 
"sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ=="
     },
+    "node_modules/cose-base": {
+      "version": "1.0.3",
+      "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-1.0.3.tgz";,
+      "integrity": 
"sha512-s9whTXInMSgAp/NVXVNuVxVKzGH2qck3aQlVHxDCdAEPgtMKwc4Wq6/QKhgdEdgbLSi9rBTAcPoRa6JpiG4ksg==",
+      "dependencies": {
+        "layout-base": "^1.0.0"
+      }
+    },
     "node_modules/cosmiconfig": {
       "version": "8.3.6",
       "resolved": 
"https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz";,
@@ -6420,100 +6784,576 @@
         "postcss-zindex": "^6.0.2"
       },
       "engines": {
-        "node": "^14 || ^16 || >=18.0"
+        "node": "^14 || ^16 || >=18.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.4.31"
+      }
+    },
+    "node_modules/cssnano-preset-default": {
+      "version": "6.1.2",
+      "resolved": 
"https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz";,
+      "integrity": 
"sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==",
+      "dependencies": {
+        "browserslist": "^4.23.0",
+        "css-declaration-sorter": "^7.2.0",
+        "cssnano-utils": "^4.0.2",
+        "postcss-calc": "^9.0.1",
+        "postcss-colormin": "^6.1.0",
+        "postcss-convert-values": "^6.1.0",
+        "postcss-discard-comments": "^6.0.2",
+        "postcss-discard-duplicates": "^6.0.3",
+        "postcss-discard-empty": "^6.0.3",
+        "postcss-discard-overridden": "^6.0.2",
+        "postcss-merge-longhand": "^6.0.5",
+        "postcss-merge-rules": "^6.1.1",
+        "postcss-minify-font-values": "^6.1.0",
+        "postcss-minify-gradients": "^6.0.3",
+        "postcss-minify-params": "^6.1.0",
+        "postcss-minify-selectors": "^6.0.4",
+        "postcss-normalize-charset": "^6.0.2",
+        "postcss-normalize-display-values": "^6.0.2",
+        "postcss-normalize-positions": "^6.0.2",
+        "postcss-normalize-repeat-style": "^6.0.2",
+        "postcss-normalize-string": "^6.0.2",
+        "postcss-normalize-timing-functions": "^6.0.2",
+        "postcss-normalize-unicode": "^6.1.0",
+        "postcss-normalize-url": "^6.0.2",
+        "postcss-normalize-whitespace": "^6.0.2",
+        "postcss-ordered-values": "^6.0.2",
+        "postcss-reduce-initial": "^6.1.0",
+        "postcss-reduce-transforms": "^6.0.2",
+        "postcss-svgo": "^6.0.3",
+        "postcss-unique-selectors": "^6.0.4"
+      },
+      "engines": {
+        "node": "^14 || ^16 || >=18.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.4.31"
+      }
+    },
+    "node_modules/cssnano-utils": {
+      "version": "4.0.2",
+      "resolved": 
"https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz";,
+      "integrity": 
"sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==",
+      "engines": {
+        "node": "^14 || ^16 || >=18.0"
+      },
+      "peerDependencies": {
+        "postcss": "^8.4.31"
+      }
+    },
+    "node_modules/csso": {
+      "version": "5.0.5",
+      "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz";,
+      "integrity": 
"sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
+      "dependencies": {
+        "css-tree": "~2.2.0"
+      },
+      "engines": {
+        "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+        "npm": ">=7.0.0"
+      }
+    },
+    "node_modules/csso/node_modules/css-tree": {
+      "version": "2.2.1",
+      "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz";,
+      "integrity": 
"sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+      "dependencies": {
+        "mdn-data": "2.0.28",
+        "source-map-js": "^1.0.1"
+      },
+      "engines": {
+        "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
+        "npm": ">=7.0.0"
+      }
+    },
+    "node_modules/csso/node_modules/mdn-data": {
+      "version": "2.0.28",
+      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz";,
+      "integrity": 
"sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="
+    },
+    "node_modules/csstype": {
+      "version": "3.1.3",
+      "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz";,
+      "integrity": 
"sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+    },
+    "node_modules/cytoscape": {
+      "version": "3.32.0",
+      "resolved": 
"https://registry.npmjs.org/cytoscape/-/cytoscape-3.32.0.tgz";,
+      "integrity": 
"sha512-5JHBC9n75kz5851jeklCPmZWcg3hUe6sjqJvyk3+hVqFaKcHwHgxsjeN1yLmggoUc6STbtm9/NQyabQehfjvWQ==",
+      "engines": {
+        "node": ">=0.10"
+      }
+    },
+    "node_modules/cytoscape-cose-bilkent": {
+      "version": "4.1.0",
+      "resolved": 
"https://registry.npmjs.org/cytoscape-cose-bilkent/-/cytoscape-cose-bilkent-4.1.0.tgz";,
+      "integrity": 
"sha512-wgQlVIUJF13Quxiv5e1gstZ08rnZj2XaLHGoFMYXz7SkNfCDOOteKBE6SYRfA9WxxI/iBc3ajfDoc6hb/MRAHQ==",
+      "dependencies": {
+        "cose-base": "^1.0.0"
+      },
+      "peerDependencies": {
+        "cytoscape": "^3.2.0"
+      }
+    },
+    "node_modules/cytoscape-fcose": {
+      "version": "2.2.0",
+      "resolved": 
"https://registry.npmjs.org/cytoscape-fcose/-/cytoscape-fcose-2.2.0.tgz";,
+      "integrity": 
"sha512-ki1/VuRIHFCzxWNrsshHYPs6L7TvLu3DL+TyIGEsRcvVERmxokbf5Gdk7mFxZnTdiGtnA4cfSmjZJMviqSuZrQ==",
+      "dependencies": {
+        "cose-base": "^2.2.0"
+      },
+      "peerDependencies": {
+        "cytoscape": "^3.2.0"
+      }
+    },
+    "node_modules/cytoscape-fcose/node_modules/cose-base": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/cose-base/-/cose-base-2.2.0.tgz";,
+      "integrity": 
"sha512-AzlgcsCbUMymkADOJtQm3wO9S3ltPfYOFD5033keQn9NJzIbtnZj+UdBJe7DYml/8TdbtHJW3j58SOnKhWY/5g==",
+      "dependencies": {
+        "layout-base": "^2.0.0"
+      }
+    },
+    "node_modules/cytoscape-fcose/node_modules/layout-base": {
+      "version": "2.0.1",
+      "resolved": 
"https://registry.npmjs.org/layout-base/-/layout-base-2.0.1.tgz";,
+      "integrity": 
"sha512-dp3s92+uNI1hWIpPGH3jK2kxE2lMjdXdr+DH8ynZHpd6PUlH6x6cbuXnoMmiNumznqaNO31xu9e79F0uuZ0JFg=="
+    },
+    "node_modules/d3": {
+      "version": "7.9.0",
+      "resolved": "https://registry.npmjs.org/d3/-/d3-7.9.0.tgz";,
+      "integrity": 
"sha512-e1U46jVP+w7Iut8Jt8ri1YsPOvFpg46k+K8TpCb0P+zjCkjkPnV7WzfDJzMHy1LnA+wj5pLT1wjO901gLXeEhA==",
+      "dependencies": {
+        "d3-array": "3",
+        "d3-axis": "3",
+        "d3-brush": "3",
+        "d3-chord": "3",
+        "d3-color": "3",
+        "d3-contour": "4",
+        "d3-delaunay": "6",
+        "d3-dispatch": "3",
+        "d3-drag": "3",
+        "d3-dsv": "3",
+        "d3-ease": "3",
+        "d3-fetch": "3",
+        "d3-force": "3",
+        "d3-format": "3",
+        "d3-geo": "3",
+        "d3-hierarchy": "3",
+        "d3-interpolate": "3",
+        "d3-path": "3",
+        "d3-polygon": "3",
+        "d3-quadtree": "3",
+        "d3-random": "3",
+        "d3-scale": "4",
+        "d3-scale-chromatic": "3",
+        "d3-selection": "3",
+        "d3-shape": "3",
+        "d3-time": "3",
+        "d3-time-format": "4",
+        "d3-timer": "3",
+        "d3-transition": "3",
+        "d3-zoom": "3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-array": {
+      "version": "3.2.4",
+      "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-3.2.4.tgz";,
+      "integrity": 
"sha512-tdQAmyA18i4J7wprpYq8ClcxZy3SC31QMeByyCFyRt7BVHdREQZ5lpzoe5mFEYZUWe+oq8HBvk9JjpibyEV4Jg==",
+      "dependencies": {
+        "internmap": "1 - 2"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-axis": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/d3-axis/-/d3-axis-3.0.0.tgz";,
+      "integrity": 
"sha512-IH5tgjV4jE/GhHkRV0HiVYPDtvfjHQlQfJHs0usq7M30XcSBvOotpmH1IgkcXsO/5gEQZD43B//fc7SRT5S+xw==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-brush": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/d3-brush/-/d3-brush-3.0.0.tgz";,
+      "integrity": 
"sha512-ALnjWlVYkXsVIGlOsuWH1+3udkYFI48Ljihfnh8FZPF2QS9o+PzGLBslO0PjzVoHLZ2KCVgAM8NVkXPJB2aNnQ==",
+      "dependencies": {
+        "d3-dispatch": "1 - 3",
+        "d3-drag": "2 - 3",
+        "d3-interpolate": "1 - 3",
+        "d3-selection": "3",
+        "d3-transition": "3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-chord": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-chord/-/d3-chord-3.0.1.tgz";,
+      "integrity": 
"sha512-VE5S6TNa+j8msksl7HwjxMHDM2yNK3XCkusIlpX5kwauBfXuyLAtNg9jCp/iHH61tgI4sb6R/EIMWCqEIdjT/g==",
+      "dependencies": {
+        "d3-path": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-color": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/d3-color/-/d3-color-3.1.0.tgz";,
+      "integrity": 
"sha512-zg/chbXyeBtMQ1LbD/WSoW2DpC3I0mpmPdW+ynRTj/x2DAWYrIY7qeZIHidozwV24m4iavr15lNwIwLxRmOxhA==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-contour": {
+      "version": "4.0.2",
+      "resolved": 
"https://registry.npmjs.org/d3-contour/-/d3-contour-4.0.2.tgz";,
+      "integrity": 
"sha512-4EzFTRIikzs47RGmdxbeUvLWtGedDUNkTcmzoeyg4sP/dvCexO47AaQL7VKy/gul85TOxw+IBgA8US2xwbToNA==",
+      "dependencies": {
+        "d3-array": "^3.2.0"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-delaunay": {
+      "version": "6.0.4",
+      "resolved": 
"https://registry.npmjs.org/d3-delaunay/-/d3-delaunay-6.0.4.tgz";,
+      "integrity": 
"sha512-mdjtIZ1XLAM8bm/hx3WwjfHt6Sggek7qH043O8KEjDXN40xi3vx/6pYSVTwLjEgiXQTbvaouWKynLBiUZ6SK6A==",
+      "dependencies": {
+        "delaunator": "5"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-dispatch": {
+      "version": "3.0.1",
+      "resolved": 
"https://registry.npmjs.org/d3-dispatch/-/d3-dispatch-3.0.1.tgz";,
+      "integrity": 
"sha512-rzUyPU/S7rwUflMyLc1ETDeBj0NRuHKKAcvukozwhshr6g6c5d8zh4c2gQjY2bZ0dXeGLWc1PF174P2tVvKhfg==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-drag": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/d3-drag/-/d3-drag-3.0.0.tgz";,
+      "integrity": 
"sha512-pWbUJLdETVA8lQNJecMxoXfH6x+mO2UQo8rSmZ+QqxcbyA3hfeprFgIT//HW2nlHChWeIIMwS2Fq+gEARkhTkg==",
+      "dependencies": {
+        "d3-dispatch": "1 - 3",
+        "d3-selection": "3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-dsv": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-dsv/-/d3-dsv-3.0.1.tgz";,
+      "integrity": 
"sha512-UG6OvdI5afDIFP9w4G0mNq50dSOsXHJaRE8arAS5o9ApWnIElp8GZw1Dun8vP8OyHOZ/QJUKUJwxiiCCnUwm+Q==",
+      "dependencies": {
+        "commander": "7",
+        "iconv-lite": "0.6",
+        "rw": "1"
+      },
+      "bin": {
+        "csv2json": "bin/dsv2json.js",
+        "csv2tsv": "bin/dsv2dsv.js",
+        "dsv2dsv": "bin/dsv2dsv.js",
+        "dsv2json": "bin/dsv2json.js",
+        "json2csv": "bin/json2dsv.js",
+        "json2dsv": "bin/json2dsv.js",
+        "json2tsv": "bin/json2dsv.js",
+        "tsv2csv": "bin/dsv2dsv.js",
+        "tsv2json": "bin/dsv2json.js"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-dsv/node_modules/commander": {
+      "version": "7.2.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz";,
+      "integrity": 
"sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==",
+      "engines": {
+        "node": ">= 10"
+      }
+    },
+    "node_modules/d3-dsv/node_modules/iconv-lite": {
+      "version": "0.6.3",
+      "resolved": 
"https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz";,
+      "integrity": 
"sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==",
+      "dependencies": {
+        "safer-buffer": ">= 2.1.2 < 3.0.0"
+      },
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
+    "node_modules/d3-ease": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-ease/-/d3-ease-3.0.1.tgz";,
+      "integrity": 
"sha512-wR/XK3D3XcLIZwpbvQwQ5fK+8Ykds1ip7A2Txe0yxncXSdq1L9skcG7blcedkOX+ZcgxGAmLX1FrRGbADwzi0w==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-fetch": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-fetch/-/d3-fetch-3.0.1.tgz";,
+      "integrity": 
"sha512-kpkQIM20n3oLVBKGg6oHrUchHM3xODkTzjMoj7aWQFq5QEM+R6E4WkzT5+tojDY7yjez8KgCBRoj4aEr99Fdqw==",
+      "dependencies": {
+        "d3-dsv": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-force": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/d3-force/-/d3-force-3.0.0.tgz";,
+      "integrity": 
"sha512-zxV/SsA+U4yte8051P4ECydjD/S+qeYtnaIyAs9tgHCqfguma/aAQDjo85A9Z6EKhBirHRJHXIgJUlffT4wdLg==",
+      "dependencies": {
+        "d3-dispatch": "1 - 3",
+        "d3-quadtree": "1 - 3",
+        "d3-timer": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-format": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/d3-format/-/d3-format-3.1.0.tgz";,
+      "integrity": 
"sha512-YyUI6AEuY/Wpt8KWLgZHsIU86atmikuoOmCfommt0LYHiQSPjvX2AcFc38PX0CBpr2RCyZhjex+NS/LPOv6YqA==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-geo": {
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/d3-geo/-/d3-geo-3.1.1.tgz";,
+      "integrity": 
"sha512-637ln3gXKXOwhalDzinUgY83KzNWZRKbYubaG+fGVuc/dxO64RRljtCTnf5ecMyE1RIdtqpkVcq0IbtU2S8j2Q==",
+      "dependencies": {
+        "d3-array": "2.5.0 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-hierarchy": {
+      "version": "3.1.2",
+      "resolved": 
"https://registry.npmjs.org/d3-hierarchy/-/d3-hierarchy-3.1.2.tgz";,
+      "integrity": 
"sha512-FX/9frcub54beBdugHjDCdikxThEqjnR93Qt7PvQTOHxyiNCAlvMrHhclk3cD5VeAaq9fxmfRp+CnWw9rEMBuA==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-interpolate": {
+      "version": "3.0.1",
+      "resolved": 
"https://registry.npmjs.org/d3-interpolate/-/d3-interpolate-3.0.1.tgz";,
+      "integrity": 
"sha512-3bYs1rOD33uo8aqJfKP3JWPAibgw8Zm2+L9vBKEHJ2Rg+viTR7o5Mmv5mZcieN+FRYaAOWX5SJATX6k1PWz72g==",
+      "dependencies": {
+        "d3-color": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-path": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-3.1.0.tgz";,
+      "integrity": 
"sha512-p3KP5HCf/bvjBSSKuXid6Zqijx7wIfNW+J/maPs+iwR35at5JCbLUT0LzF1cnjbCHWhqzQTIN2Jpe8pRebIEFQ==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-polygon": {
+      "version": "3.0.1",
+      "resolved": 
"https://registry.npmjs.org/d3-polygon/-/d3-polygon-3.0.1.tgz";,
+      "integrity": 
"sha512-3vbA7vXYwfe1SYhED++fPUQlWSYTTGmFmQiany/gdbiWgU/iEyQzyymwL9SkJjFFuCS4902BSzewVGsHHmHtXg==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-quadtree": {
+      "version": "3.0.1",
+      "resolved": 
"https://registry.npmjs.org/d3-quadtree/-/d3-quadtree-3.0.1.tgz";,
+      "integrity": 
"sha512-04xDrxQTDTCFwP5H6hRhsRcb9xxv2RzkcsygFzmkSIOJy3PeRJP7sNk3VRIbKXcog561P9oU0/rVH6vDROAgUw==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-random": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-random/-/d3-random-3.0.1.tgz";,
+      "integrity": 
"sha512-FXMe9GfxTxqd5D6jFsQ+DJ8BJS4E/fT5mqqdjovykEB2oFbTMDVdg1MGFxfQW+FBOGoB++k8swBrgwSHT1cUXQ==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-sankey": {
+      "version": "0.12.3",
+      "resolved": 
"https://registry.npmjs.org/d3-sankey/-/d3-sankey-0.12.3.tgz";,
+      "integrity": 
"sha512-nQhsBRmM19Ax5xEIPLMY9ZmJ/cDvd1BG3UVvt5h3WRxKg5zGRbvnteTyWAbzeSvlh3tW7ZEmq4VwR5mB3tutmQ==",
+      "dependencies": {
+        "d3-array": "1 - 2",
+        "d3-shape": "^1.2.0"
+      }
+    },
+    "node_modules/d3-sankey/node_modules/d3-array": {
+      "version": "2.12.1",
+      "resolved": "https://registry.npmjs.org/d3-array/-/d3-array-2.12.1.tgz";,
+      "integrity": 
"sha512-B0ErZK/66mHtEsR1TkPEEkwdy+WDesimkM5gpZr5Dsg54BiTA5RXtYW5qTLIAcekaS9xfZrzBLF/OAkB3Qn1YQ==",
+      "dependencies": {
+        "internmap": "^1.0.0"
+      }
+    },
+    "node_modules/d3-sankey/node_modules/d3-path": {
+      "version": "1.0.9",
+      "resolved": "https://registry.npmjs.org/d3-path/-/d3-path-1.0.9.tgz";,
+      "integrity": 
"sha512-VLaYcn81dtHVTjEHd8B+pbe9yHWpXKZUC87PzoFmsFrJqgFwDe/qxfp5MlfsfM1V5E/iVt0MmEbWQ7FVIXh/bg=="
+    },
+    "node_modules/d3-sankey/node_modules/d3-shape": {
+      "version": "1.3.7",
+      "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-1.3.7.tgz";,
+      "integrity": 
"sha512-EUkvKjqPFUAZyOlhY5gzCxCeI0Aep04LwIRpsZ/mLFelJiUfnK56jo5JMDSE7yyP2kLSb6LtF+S5chMk7uqPqw==",
+      "dependencies": {
+        "d3-path": "1"
+      }
+    },
+    "node_modules/d3-sankey/node_modules/internmap": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/internmap/-/internmap-1.0.1.tgz";,
+      "integrity": 
"sha512-lDB5YccMydFBtasVtxnZ3MRBHuaoE8GKsppq+EchKL2U4nK/DmEpPHNH8MZe5HkMtpSiTSOZwfN0tzYjO/lJEw=="
+    },
+    "node_modules/d3-scale": {
+      "version": "4.0.2",
+      "resolved": "https://registry.npmjs.org/d3-scale/-/d3-scale-4.0.2.tgz";,
+      "integrity": 
"sha512-GZW464g1SH7ag3Y7hXjf8RoUuAFIqklOAq3MRl4OaWabTFJY9PN/E1YklhXLh+OQ3fM9yS2nOkCoS+WLZ6kvxQ==",
+      "dependencies": {
+        "d3-array": "2.10.0 - 3",
+        "d3-format": "1 - 3",
+        "d3-interpolate": "1.2.0 - 3",
+        "d3-time": "2.1.1 - 3",
+        "d3-time-format": "2 - 4"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-scale-chromatic": {
+      "version": "3.1.0",
+      "resolved": 
"https://registry.npmjs.org/d3-scale-chromatic/-/d3-scale-chromatic-3.1.0.tgz";,
+      "integrity": 
"sha512-A3s5PWiZ9YCXFye1o246KoscMWqf8BsD9eRiJ3He7C9OBaxKhAd5TFCdEx/7VbKtxxTsu//1mMJFrEt572cEyQ==",
+      "dependencies": {
+        "d3-color": "1 - 3",
+        "d3-interpolate": "1 - 3"
+      },
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-selection": {
+      "version": "3.0.0",
+      "resolved": 
"https://registry.npmjs.org/d3-selection/-/d3-selection-3.0.0.tgz";,
+      "integrity": 
"sha512-fmTRWbNMmsmWq6xJV8D19U/gw/bwrHfNXxrIN+HfZgnzqTHp9jOmKMhsTUjXOJnZOdZY9Q28y4yebKzqDKlxlQ==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-shape": {
+      "version": "3.2.0",
+      "resolved": "https://registry.npmjs.org/d3-shape/-/d3-shape-3.2.0.tgz";,
+      "integrity": 
"sha512-SaLBuwGm3MOViRq2ABk3eLoxwZELpH6zhl3FbAoJ7Vm1gofKx6El1Ib5z23NUEhF9AsGl7y+dzLe5Cw2AArGTA==",
+      "dependencies": {
+        "d3-path": "^3.1.0"
       },
-      "peerDependencies": {
-        "postcss": "^8.4.31"
+      "engines": {
+        "node": ">=12"
       }
     },
-    "node_modules/cssnano-preset-default": {
-      "version": "6.1.2",
-      "resolved": 
"https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.1.2.tgz";,
-      "integrity": 
"sha512-1C0C+eNaeN8OcHQa193aRgYexyJtU8XwbdieEjClw+J9d94E41LwT6ivKH0WT+fYwYWB0Zp3I3IZ7tI/BbUbrg==",
+    "node_modules/d3-time": {
+      "version": "3.1.0",
+      "resolved": "https://registry.npmjs.org/d3-time/-/d3-time-3.1.0.tgz";,
+      "integrity": 
"sha512-VqKjzBLejbSMT4IgbmVgDjpkYrNWUYJnbCGo874u7MMKIWsILRX+OpX/gTk8MqjpT1A/c6HY2dCA77ZN0lkQ2Q==",
       "dependencies": {
-        "browserslist": "^4.23.0",
-        "css-declaration-sorter": "^7.2.0",
-        "cssnano-utils": "^4.0.2",
-        "postcss-calc": "^9.0.1",
-        "postcss-colormin": "^6.1.0",
-        "postcss-convert-values": "^6.1.0",
-        "postcss-discard-comments": "^6.0.2",
-        "postcss-discard-duplicates": "^6.0.3",
-        "postcss-discard-empty": "^6.0.3",
-        "postcss-discard-overridden": "^6.0.2",
-        "postcss-merge-longhand": "^6.0.5",
-        "postcss-merge-rules": "^6.1.1",
-        "postcss-minify-font-values": "^6.1.0",
-        "postcss-minify-gradients": "^6.0.3",
-        "postcss-minify-params": "^6.1.0",
-        "postcss-minify-selectors": "^6.0.4",
-        "postcss-normalize-charset": "^6.0.2",
-        "postcss-normalize-display-values": "^6.0.2",
-        "postcss-normalize-positions": "^6.0.2",
-        "postcss-normalize-repeat-style": "^6.0.2",
-        "postcss-normalize-string": "^6.0.2",
-        "postcss-normalize-timing-functions": "^6.0.2",
-        "postcss-normalize-unicode": "^6.1.0",
-        "postcss-normalize-url": "^6.0.2",
-        "postcss-normalize-whitespace": "^6.0.2",
-        "postcss-ordered-values": "^6.0.2",
-        "postcss-reduce-initial": "^6.1.0",
-        "postcss-reduce-transforms": "^6.0.2",
-        "postcss-svgo": "^6.0.3",
-        "postcss-unique-selectors": "^6.0.4"
+        "d3-array": "2 - 3"
       },
       "engines": {
-        "node": "^14 || ^16 || >=18.0"
+        "node": ">=12"
+      }
+    },
+    "node_modules/d3-time-format": {
+      "version": "4.1.0",
+      "resolved": 
"https://registry.npmjs.org/d3-time-format/-/d3-time-format-4.1.0.tgz";,
+      "integrity": 
"sha512-dJxPBlzC7NugB2PDLwo9Q8JiTR3M3e4/XANkreKSUxF8vvXKqm1Yfq4Q5dl8budlunRVlUUaDUgFt7eA8D6NLg==",
+      "dependencies": {
+        "d3-time": "1 - 3"
       },
-      "peerDependencies": {
-        "postcss": "^8.4.31"
+      "engines": {
+        "node": ">=12"
       }
     },
-    "node_modules/cssnano-utils": {
-      "version": "4.0.2",
-      "resolved": 
"https://registry.npmjs.org/cssnano-utils/-/cssnano-utils-4.0.2.tgz";,
-      "integrity": 
"sha512-ZR1jHg+wZ8o4c3zqf1SIUSTIvm/9mU343FMR6Obe/unskbvpGhZOo1J6d/r8D1pzkRQYuwbcH3hToOuoA2G7oQ==",
+    "node_modules/d3-timer": {
+      "version": "3.0.1",
+      "resolved": "https://registry.npmjs.org/d3-timer/-/d3-timer-3.0.1.tgz";,
+      "integrity": 
"sha512-ndfJ/JxxMd3nw31uyKoY2naivF+r29V+Lc0svZxe1JvvIRmi8hUsrMvdOwgS1o6uBHmiz91geQ0ylPP0aj1VUA==",
       "engines": {
-        "node": "^14 || ^16 || >=18.0"
-      },
-      "peerDependencies": {
-        "postcss": "^8.4.31"
+        "node": ">=12"
       }
     },
-    "node_modules/csso": {
-      "version": "5.0.5",
-      "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz";,
-      "integrity": 
"sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==",
+    "node_modules/d3-transition": {
+      "version": "3.0.1",
+      "resolved": 
"https://registry.npmjs.org/d3-transition/-/d3-transition-3.0.1.tgz";,
+      "integrity": 
"sha512-ApKvfjsSR6tg06xrL434C0WydLr7JewBB3V+/39RMHsaXTOG0zmt/OAXeng5M5LBm0ojmxJrpomQVZ1aPvBL4w==",
       "dependencies": {
-        "css-tree": "~2.2.0"
+        "d3-color": "1 - 3",
+        "d3-dispatch": "1 - 3",
+        "d3-ease": "1 - 3",
+        "d3-interpolate": "1 - 3",
+        "d3-timer": "1 - 3"
       },
       "engines": {
-        "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
-        "npm": ">=7.0.0"
+        "node": ">=12"
+      },
+      "peerDependencies": {
+        "d3-selection": "2 - 3"
       }
     },
-    "node_modules/csso/node_modules/css-tree": {
-      "version": "2.2.1",
-      "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz";,
-      "integrity": 
"sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==",
+    "node_modules/d3-zoom": {
+      "version": "3.0.0",
+      "resolved": "https://registry.npmjs.org/d3-zoom/-/d3-zoom-3.0.0.tgz";,
+      "integrity": 
"sha512-b8AmV3kfQaqWAuacbPuNbL6vahnOJflOhexLzMMNLga62+/nh0JzvJ0aO/5a5MVgUFGS7Hu1P9P03o3fJkDCyw==",
       "dependencies": {
-        "mdn-data": "2.0.28",
-        "source-map-js": "^1.0.1"
+        "d3-dispatch": "1 - 3",
+        "d3-drag": "2 - 3",
+        "d3-interpolate": "1 - 3",
+        "d3-selection": "2 - 3",
+        "d3-transition": "2 - 3"
       },
       "engines": {
-        "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0",
-        "npm": ">=7.0.0"
+        "node": ">=12"
       }
     },
-    "node_modules/csso/node_modules/mdn-data": {
-      "version": "2.0.28",
-      "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz";,
-      "integrity": 
"sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g=="
-    },
-    "node_modules/csstype": {
-      "version": "3.1.3",
-      "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.3.tgz";,
-      "integrity": 
"sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw=="
+    "node_modules/dagre-d3-es": {
+      "version": "7.0.11",
+      "resolved": 
"https://registry.npmjs.org/dagre-d3-es/-/dagre-d3-es-7.0.11.tgz";,
+      "integrity": 
"sha512-tvlJLyQf834SylNKax8Wkzco/1ias1OPw8DcUMDE7oUIoSEW25riQVuiu/0OWEFqT0cxHT3Pa9/D82Jr47IONw==",
+      "dependencies": {
+        "d3": "^7.9.0",
+        "lodash-es": "^4.17.21"
+      }
     },
     "node_modules/dayjs": {
       "version": "1.11.13",
@@ -6653,6 +7493,14 @@
         "url": "https://github.com/sponsors/ljharb";
       }
     },
+    "node_modules/delaunator": {
+      "version": "5.0.1",
+      "resolved": 
"https://registry.npmjs.org/delaunator/-/delaunator-5.0.1.tgz";,
+      "integrity": 
"sha512-8nvh+XBe96aCESrGOqMp/84b13H9cdKbG5P2ejQCh4d4sK9RL4371qou9drQjMhvnPmhWl5hnmqbEE0fXr9Xnw==",
+      "dependencies": {
+        "robust-predicates": "^3.0.2"
+      }
+    },
     "node_modules/depd": {
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz";,
@@ -6801,6 +7649,14 @@
         "url": "https://github.com/fb55/domhandler?sponsor=1";
       }
     },
+    "node_modules/dompurify": {
+      "version": "3.2.6",
+      "resolved": "https://registry.npmjs.org/dompurify/-/dompurify-3.2.6.tgz";,
+      "integrity": 
"sha512-/2GogDQlohXPZe6D6NOgQvXLPSYBqIWMnZ8zzOhn09REE4eyAzb+Hed3jhoM9OkuaJ8P6ZGTTVWQKAi8ieIzfQ==",
+      "optionalDependencies": {
+        "@types/trusted-types": "^2.0.7"
+      }
+    },
     "node_modules/domutils": {
       "version": "3.2.2",
       "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.2.2.tgz";,
@@ -7357,6 +8213,11 @@
         "node": ">= 0.6"
       }
     },
+    "node_modules/exsolve": {
+      "version": "1.0.7",
+      "resolved": "https://registry.npmjs.org/exsolve/-/exsolve-1.0.7.tgz";,
+      "integrity": 
"sha512-VO5fQUzZtI6C+vx4w/4BWJpg3s/5l+6pRQEHzFRM8WFi4XffSP1Z+4qi7GbjWbvRQEbdIco5mIMq+zX4rPuLrw=="
+    },
     "node_modules/extend": {
       "version": "3.0.2",
       "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.2.tgz";,
@@ -7915,14 +8776,6 @@
         "url": "https://github.com/sponsors/sindresorhus";
       }
     },
-    "node_modules/goober": {
-      "version": "2.1.16",
-      "resolved": "https://registry.npmjs.org/goober/-/goober-2.1.16.tgz";,
-      "integrity": 
"sha512-erjk19y1U33+XAMe1VTvIONHYoSqE4iS7BYUZfHaqeohLmnC0FdxEh7rQU+6MZ4OajItzjZFSRtVANrQwNq6/g==",
-      "peerDependencies": {
-        "csstype": "^3.0.10"
-      }
-    },
     "node_modules/gopd": {
       "version": "1.2.0",
       "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz";,
@@ -8022,6 +8875,11 @@
         "url": "https://github.com/sponsors/sindresorhus";
       }
     },
+    "node_modules/hachure-fill": {
+      "version": "0.5.2",
+      "resolved": 
"https://registry.npmjs.org/hachure-fill/-/hachure-fill-0.5.2.tgz";,
+      "integrity": 
"sha512-3GKBOn+m2LX9iq+JC1064cSFprJY4jL1jCXTcpnfER5HYE2l/4EfWSGzkPa/ZDBmYI0ZOEj5VHV/eKnPGkHuOg=="
+    },
     "node_modules/handle-thing": {
       "version": "2.0.1",
       "resolved": 
"https://registry.npmjs.org/handle-thing/-/handle-thing-2.0.1.tgz";,
@@ -8672,6 +9530,14 @@
       "resolved": 
"https://registry.npmjs.org/inline-style-parser/-/inline-style-parser-0.2.4.tgz";,
       "integrity": 
"sha512-0aO8FkhNZlj/ZIbNi7Lxxr12obT7cL1moPfE4tg1LkX7LlLfC6DeX4l2ZEud1ukP9jNQyNnfzQVqwbwmAATY4Q=="
     },
+    "node_modules/internmap": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz";,
+      "integrity": 
"sha512-5Hh7Y1wQbvY5ooGgPbDaL5iYLAPzMTUrjMulskHLH6wnv/A+1q5rgEaiuqEjB+oxGXIVZs1FF+R/KPN3ZSQYYg==",
+      "engines": {
+        "node": ">=12"
+      }
+    },
     "node_modules/invariant": {
       "version": "2.2.4",
       "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz";,
@@ -9093,6 +9959,29 @@
         "graceful-fs": "^4.1.6"
       }
     },
+    "node_modules/katex": {
+      "version": "0.16.22",
+      "resolved": "https://registry.npmjs.org/katex/-/katex-0.16.22.tgz";,
+      "integrity": 
"sha512-XCHRdUw4lf3SKBaJe4EvgqIuWwkPSo9XoeO8GjQW94Bp7TWv9hNhzZjZ+OH9yf1UmLygb7DIT5GSFQiyt16zYg==",
+      "funding": [
+        "https://opencollective.com/katex";,
+        "https://github.com/sponsors/katex";
+      ],
+      "dependencies": {
+        "commander": "^8.3.0"
+      },
+      "bin": {
+        "katex": "cli.js"
+      }
+    },
+    "node_modules/katex/node_modules/commander": {
+      "version": "8.3.0",
+      "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz";,
+      "integrity": 
"sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==",
+      "engines": {
+        "node": ">= 12"
+      }
+    },
     "node_modules/keyv": {
       "version": "4.5.4",
       "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz";,
@@ -9101,6 +9990,11 @@
         "json-buffer": "3.0.1"
       }
     },
+    "node_modules/khroma": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/khroma/-/khroma-2.1.0.tgz";,
+      "integrity": 
"sha512-Ls993zuzfayK269Svk9hzpeGUKob/sIgZzyHYdjQoAdQetRKpOLj+k/QQQ/6Qi0Yz65mlROrfd+Ev+1+7dz9Kw=="
+    },
     "node_modules/kind-of": {
       "version": "6.0.3",
       "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz";,
@@ -9117,6 +10011,26 @@
         "node": ">=6"
       }
     },
+    "node_modules/kolorist": {
+      "version": "1.8.0",
+      "resolved": "https://registry.npmjs.org/kolorist/-/kolorist-1.8.0.tgz";,
+      "integrity": 
"sha512-Y+60/zizpJ3HRH8DCss+q95yr6145JXZo46OTpFvDZWLfRCE4qChOyk1b26nMaNpfHHgxagk9dXT5OP0Tfe+dQ=="
+    },
+    "node_modules/langium": {
+      "version": "3.3.1",
+      "resolved": "https://registry.npmjs.org/langium/-/langium-3.3.1.tgz";,
+      "integrity": 
"sha512-QJv/h939gDpvT+9SiLVlY7tZC3xB2qK57v0J04Sh9wpMb6MP1q8gB21L3WIo8T5P1MSMg3Ep14L7KkDCFG3y4w==",
+      "dependencies": {
+        "chevrotain": "~11.0.3",
+        "chevrotain-allstar": "~0.3.0",
+        "vscode-languageserver": "~9.0.1",
+        "vscode-languageserver-textdocument": "~1.0.11",
+        "vscode-uri": "~3.0.8"
+      },
+      "engines": {
+        "node": ">=16.0.0"
+      }
+    },
     "node_modules/latest-version": {
       "version": "7.0.0",
       "resolved": 
"https://registry.npmjs.org/latest-version/-/latest-version-7.0.0.tgz";,
@@ -9140,6 +10054,11 @@
         "shell-quote": "^1.8.1"
       }
     },
+    "node_modules/layout-base": {
+      "version": "1.0.2",
+      "resolved": 
"https://registry.npmjs.org/layout-base/-/layout-base-1.0.2.tgz";,
+      "integrity": 
"sha512-8h2oVEZNktL4BH2JCOI90iD1yXwL6iNW7KcCKT2QZgQJR2vbqDsldCTPRU9NifTCqHZci57XvQQ15YTu+sTYPg=="
+    },
     "node_modules/leven": {
       "version": "3.1.0",
       "resolved": "https://registry.npmjs.org/leven/-/leven-3.1.0.tgz";,
@@ -9190,6 +10109,22 @@
         "node": ">=8.9.0"
       }
     },
+    "node_modules/local-pkg": {
+      "version": "1.1.1",
+      "resolved": "https://registry.npmjs.org/local-pkg/-/local-pkg-1.1.1.tgz";,
+      "integrity": 
"sha512-WunYko2W1NcdfAFpuLUoucsgULmgDBRkdxHxWQ7mK0cQqwPiy8E1enjuRBrhLtZkB5iScJ1XIPdhVEFK8aOLSg==",
+      "dependencies": {
+        "mlly": "^1.7.4",
+        "pkg-types": "^2.0.1",
+        "quansync": "^0.2.8"
+      },
+      "engines": {
+        "node": ">=14"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/antfu";
+      }
+    },
     "node_modules/locate-path": {
       "version": "7.2.0",
       "resolved": 
"https://registry.npmjs.org/locate-path/-/locate-path-7.2.0.tgz";,
@@ -9209,6 +10144,11 @@
       "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz";,
       "integrity": 
"sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg=="
     },
+    "node_modules/lodash-es": {
+      "version": "4.17.21",
+      "resolved": 
"https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz";,
+      "integrity": 
"sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw=="
+    },
     "node_modules/lodash.castarray": {
       "version": "4.4.0",
       "resolved": 
"https://registry.npmjs.org/lodash.castarray/-/lodash.castarray-4.4.0.tgz";,
@@ -9306,6 +10246,17 @@
         "url": "https://github.com/sponsors/wooorm";
       }
     },
+    "node_modules/marked": {
+      "version": "15.0.12",
+      "resolved": "https://registry.npmjs.org/marked/-/marked-15.0.12.tgz";,
+      "integrity": 
"sha512-8dD6FusOQSrpv9Z1rdNMdlSgQOIP880DHqnohobOmYLElGEqAL/JvxvuxZO16r4HtjTlfPRDC1hbvxC9dPN2nA==",
+      "bin": {
+        "marked": "bin/marked.js"
+      },
+      "engines": {
+        "node": ">= 18"
+      }
+    },
     "node_modules/math-intrinsics": {
       "version": "1.1.0",
       "resolved": 
"https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz";,
@@ -9748,6 +10699,45 @@
         "node": ">= 8"
       }
     },
+    "node_modules/mermaid": {
+      "version": "11.7.0",
+      "resolved": "https://registry.npmjs.org/mermaid/-/mermaid-11.7.0.tgz";,
+      "integrity": 
"sha512-/1/5R0rt0Z1Ak0CuznAnCF3HtQgayRXUz6SguzOwN4L+DuCobz0UxnQ+ZdTSZ3AugKVVh78tiVmsHpHWV25TCw==",
+      "dependencies": {
+        "@braintree/sanitize-url": "^7.0.4",
+        "@iconify/utils": "^2.1.33",
+        "@mermaid-js/parser": "^0.5.0",
+        "@types/d3": "^7.4.3",
+        "cytoscape": "^3.29.3",
+        "cytoscape-cose-bilkent": "^4.1.0",
+        "cytoscape-fcose": "^2.2.0",
+        "d3": "^7.9.0",
+        "d3-sankey": "^0.12.3",
+        "dagre-d3-es": "7.0.11",
+        "dayjs": "^1.11.13",
+        "dompurify": "^3.2.5",
+        "katex": "^0.16.9",
+        "khroma": "^2.1.0",
+        "lodash-es": "^4.17.21",
+        "marked": "^15.0.7",
+        "roughjs": "^4.6.6",
+        "stylis": "^4.3.6",
+        "ts-dedent": "^2.2.0",
+        "uuid": "^11.1.0"
+      }
+    },
+    "node_modules/mermaid/node_modules/uuid": {
+      "version": "11.1.0",
+      "resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz";,
+      "integrity": 
"sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==",
+      "funding": [
+        "https://github.com/sponsors/broofa";,
+        "https://github.com/sponsors/ctavan";
+      ],
+      "bin": {
+        "uuid": "dist/esm/bin/uuid"
+      }
+    },
     "node_modules/methods": {
       "version": "1.1.2",
       "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz";,
@@ -11558,6 +12548,32 @@
         "node": ">=16 || 14 >=14.17"
       }
     },
+    "node_modules/mlly": {
+      "version": "1.7.4",
+      "resolved": "https://registry.npmjs.org/mlly/-/mlly-1.7.4.tgz";,
+      "integrity": 
"sha512-qmdSIPC4bDJXgZTCR7XosJiNKySV7O215tsPtDN9iEO/7q/76b/ijtgRu/+epFXSJhijtTCCGp3DWS549P3xKw==",
+      "dependencies": {
+        "acorn": "^8.14.0",
+        "pathe": "^2.0.1",
+        "pkg-types": "^1.3.0",
+        "ufo": "^1.5.4"
+      }
+    },
+    "node_modules/mlly/node_modules/confbox": {
+      "version": "0.1.8",
+      "resolved": "https://registry.npmjs.org/confbox/-/confbox-0.1.8.tgz";,
+      "integrity": 
"sha512-RMtmw0iFkeR4YV+fUOSucriAQNb9g8zFR52MWCtl+cCZOFRNL6zeB395vPzFhEjjn4fMxXudmELnl/KF/WrK6w=="
+    },
+    "node_modules/mlly/node_modules/pkg-types": {
+      "version": "1.3.1",
+      "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-1.3.1.tgz";,
+      "integrity": 
"sha512-/Jm5M4RvtBFVkKWRu2BLUTNP8/M2a+UwuAX+ae4770q1qVGtfjG+WTCupoZixokjmHiry8uI+dlY8KXYV5HVVQ==",
+      "dependencies": {
+        "confbox": "^0.1.8",
+        "mlly": "^1.7.4",
+        "pathe": "^2.0.1"
+      }
+    },
     "node_modules/mrmime": {
       "version": "2.0.1",
       "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.1.tgz";,
@@ -12019,6 +13035,11 @@
       "resolved": 
"https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz";,
       "integrity": 
"sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw=="
     },
+    "node_modules/package-manager-detector": {
+      "version": "1.3.0",
+      "resolved": 
"https://registry.npmjs.org/package-manager-detector/-/package-manager-detector-1.3.0.tgz";,
+      "integrity": 
"sha512-ZsEbbZORsyHuO00lY1kV3/t72yp6Ysay6Pd17ZAlNGuGwmWDLCJxFpRs0IzfXfj1o4icJOkUEioexFHzyPurSQ=="
+    },
     "node_modules/param-case": {
       "version": "3.0.4",
       "resolved": 
"https://registry.npmjs.org/param-case/-/param-case-3.0.4.tgz";,
@@ -12135,6 +13156,11 @@
         "tslib": "^2.0.3"
       }
     },
+    "node_modules/path-data-parser": {
+      "version": "0.1.0",
+      "resolved": 
"https://registry.npmjs.org/path-data-parser/-/path-data-parser-0.1.0.tgz";,
+      "integrity": 
"sha512-NOnmBpt5Y2RWbuv0LMzsayp3lVylAHLPUTut412ZA3l+C4uw4ZVkQbjShYCQ8TCpUMdPapr4YjUqLYD6v68j+w=="
+    },
     "node_modules/path-exists": {
       "version": "5.0.0",
       "resolved": 
"https://registry.npmjs.org/path-exists/-/path-exists-5.0.0.tgz";,
@@ -12224,6 +13250,11 @@
         "node": ">=8"
       }
     },
+    "node_modules/pathe": {
+      "version": "2.0.3",
+      "resolved": "https://registry.npmjs.org/pathe/-/pathe-2.0.3.tgz";,
+      "integrity": 
"sha512-WUjGcAqP1gQacoQe+OBJsFA7Ld4DyXuUIjZ5cc75cLHvJ7dtNsTugphxIADwspS+AraAUePCKrSVtPLFj/F88w=="
+    },
     "node_modules/picocolors": {
       "version": "1.1.1",
       "resolved": 
"https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz";,
@@ -12270,6 +13301,30 @@
         "url": "https://github.com/sponsors/sindresorhus";
       }
     },
+    "node_modules/pkg-types": {
+      "version": "2.1.0",
+      "resolved": "https://registry.npmjs.org/pkg-types/-/pkg-types-2.1.0.tgz";,
+      "integrity": 
"sha512-wmJwA+8ihJixSoHKxZJRBQG1oY8Yr9pGLzRmSsNms0iNWyHHAlZCa7mmKiFR10YPZuz/2k169JiS/inOjBCZ2A==",
+      "dependencies": {
+        "confbox": "^0.2.1",
+        "exsolve": "^1.0.1",
+        "pathe": "^2.0.3"
+      }
+    },
+    "node_modules/points-on-curve": {
+      "version": "0.2.0",
+      "resolved": 
"https://registry.npmjs.org/points-on-curve/-/points-on-curve-0.2.0.tgz";,
+      "integrity": 
"sha512-0mYKnYYe9ZcqMCWhUjItv/oHjvgEsfKvnUTg8sAtnHr3GVy7rGkXCb6d5cSyqrWqL4k81b9CPg3urd+T7aop3A=="
+    },
+    "node_modules/points-on-path": {
+      "version": "0.2.1",
+      "resolved": 
"https://registry.npmjs.org/points-on-path/-/points-on-path-0.2.1.tgz";,
+      "integrity": 
"sha512-25ClnWWuw7JbWZcgqY/gJ4FQWadKxGWk+3kR/7kD0tCaDtPPMj7oHu2ToLaVhfpnHrZzYby2w6tUA0eOIuUg8g==",
+      "dependencies": {
+        "path-data-parser": "0.1.0",
+        "points-on-curve": "0.2.0"
+      }
+    },
     "node_modules/postcss": {
       "version": "8.5.6",
       "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz";,
@@ -14038,6 +15093,21 @@
         "url": "https://github.com/sponsors/ljharb";
       }
     },
+    "node_modules/quansync": {
+      "version": "0.2.10",
+      "resolved": "https://registry.npmjs.org/quansync/-/quansync-0.2.10.tgz";,
+      "integrity": 
"sha512-t41VRkMYbkHyCYmOvx/6URnN80H7k4X0lLdBMGsz+maAwrJQYB1djpV6vHrQIBE0WBSGqhtEHrK9U3DWWH8v7A==",
+      "funding": [
+        {
+          "type": "individual",
+          "url": "https://github.com/sponsors/antfu";
+        },
+        {
+          "type": "individual",
+          "url": "https://github.com/sponsors/sxzz";
+        }
+      ]
+    },
     "node_modules/queue-microtask": {
       "version": "1.2.3",
       "resolved": 
"https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz";,
@@ -14152,21 +15222,6 @@
         "react": "^19.1.0"
       }
     },
-    "node_modules/react-error-boundary": {
-      "version": "3.1.4",
-      "resolved": 
"https://registry.npmjs.org/react-error-boundary/-/react-error-boundary-3.1.4.tgz";,
-      "integrity": 
"sha512-uM9uPzZJTF6wRQORmSrvOIgt4lJ9MC1sNgEOj2XGsDTRE4kmpWxg7ENK9EWNKJRMAOY9z0MuF4yIfl6gp4sotA==",
-      "dependencies": {
-        "@babel/runtime": "^7.12.5"
-      },
-      "engines": {
-        "node": ">=10",
-        "npm": ">=6"
-      },
-      "peerDependencies": {
-        "react": ">=16.13.1"
-      }
-    },
     "node_modules/react-fast-compare": {
       "version": "3.2.2",
       "resolved": 
"https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz";,
@@ -14189,22 +15244,6 @@
         "react-dom": "^16.6.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
       }
     },
-    "node_modules/react-hot-toast": {
-      "version": "2.5.2",
-      "resolved": 
"https://registry.npmjs.org/react-hot-toast/-/react-hot-toast-2.5.2.tgz";,
-      "integrity": 
"sha512-Tun3BbCxzmXXM7C+NI4qiv6lT0uwGh4oAfeJyNOjYUejTsm35mK9iCaYLGv8cBz9L5YxZLx/2ii7zsIwPtPUdw==",
-      "dependencies": {
-        "csstype": "^3.1.3",
-        "goober": "^2.1.16"
-      },
-      "engines": {
-        "node": ">=10"
-      },
-      "peerDependencies": {
-        "react": ">=16",
-        "react-dom": ">=16"
-      }
-    },
     "node_modules/react-is": {
       "version": "16.13.1",
       "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz";,
@@ -14879,6 +15918,22 @@
         "url": "https://github.com/sponsors/isaacs";
       }
     },
+    "node_modules/robust-predicates": {
+      "version": "3.0.2",
+      "resolved": 
"https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.2.tgz";,
+      "integrity": 
"sha512-IXgzBWvWQwE6PrDI05OvmXUIruQTcoMDzRsOd5CDvHCVLcLHMTSYvOK5Cm46kWqlV3yAbuSpBZdJ5oP5OUoStg=="
+    },
+    "node_modules/roughjs": {
+      "version": "4.6.6",
+      "resolved": "https://registry.npmjs.org/roughjs/-/roughjs-4.6.6.tgz";,
+      "integrity": 
"sha512-ZUz/69+SYpFN/g/lUlo2FXcIjRkSu3nDarreVdGGndHEBJ6cXPdKguS8JGxwj5HA5xIbVKSmLgr5b3AWxtRfvQ==",
+      "dependencies": {
+        "hachure-fill": "^0.5.2",
+        "path-data-parser": "^0.1.0",
+        "points-on-curve": "^0.2.0",
+        "points-on-path": "^0.2.1"
+      }
+    },
     "node_modules/rtlcss": {
       "version": "4.3.0",
       "resolved": "https://registry.npmjs.org/rtlcss/-/rtlcss-4.3.0.tgz";,
@@ -14918,6 +15973,11 @@
         "queue-microtask": "^1.2.2"
       }
     },
+    "node_modules/rw": {
+      "version": "1.3.3",
+      "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz";,
+      "integrity": 
"sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ=="
+    },
     "node_modules/safe-buffer": {
       "version": "5.2.1",
       "resolved": 
"https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz";,
@@ -15711,6 +16771,11 @@
         "node": ">=4"
       }
     },
+    "node_modules/stylis": {
+      "version": "4.3.6",
+      "resolved": "https://registry.npmjs.org/stylis/-/stylis-4.3.6.tgz";,
+      "integrity": 
"sha512-yQ3rwFWRfwNUY7H5vpU0wfdkNSnvnJinhF9830Swlaxl03zsOjCfmX0ugac+3LtK0lYSgwL/KXc8oYL3mG4YFQ=="
+    },
     "node_modules/sucrase": {
       "version": "3.35.0",
       "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz";,
@@ -15799,18 +16864,6 @@
         "node": ">= 10"
       }
     },
-    "node_modules/swr": {
-      "version": "2.3.3",
-      "resolved": "https://registry.npmjs.org/swr/-/swr-2.3.3.tgz";,
-      "integrity": 
"sha512-dshNvs3ExOqtZ6kJBaAsabhPdHyeY4P2cKwRCniDVifBMoG/SVI7tfLWqPXriVspf2Rg4tPzXJTnwaihIeFw2A==",
-      "dependencies": {
-        "dequal": "^2.0.3",
-        "use-sync-external-store": "^1.4.0"
-      },
-      "peerDependencies": {
-        "react": "^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
-      }
-    },
     "node_modules/tailwindcss": {
       "version": "3.4.17",
       "resolved": 
"https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.17.tgz";,
@@ -16010,6 +17063,11 @@
       "resolved": 
"https://registry.npmjs.org/tiny-warning/-/tiny-warning-1.0.3.tgz";,
       "integrity": 
"sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA=="
     },
+    "node_modules/tinyexec": {
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/tinyexec/-/tinyexec-1.0.1.tgz";,
+      "integrity": 
"sha512-5uC6DDlmeqiOwCPmK9jMSdOuZTh8bU39Ys6yidB+UTt5hfZUPGAypSgFRiEp+jbi9qH40BLDvy85jIU88wKSqw=="
+    },
     "node_modules/tinypool": {
       "version": "1.1.1",
       "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-1.1.1.tgz";,
@@ -16063,6 +17121,14 @@
         "url": "https://github.com/sponsors/wooorm";
       }
     },
+    "node_modules/ts-dedent": {
+      "version": "2.2.0",
+      "resolved": "https://registry.npmjs.org/ts-dedent/-/ts-dedent-2.2.0.tgz";,
+      "integrity": 
"sha512-q5W7tVM71e2xjHZTlgfTDoPF/SmqKG5hddq9SzR49CH2hayqRKJtQ4mtRlSxKaJlR/+9rEM+mnBHf7I2/BQcpQ==",
+      "engines": {
+        "node": ">=6.10"
+      }
+    },
     "node_modules/ts-interface-checker": {
       "version": "0.1.13",
       "resolved": 
"https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz";,
@@ -16141,6 +17207,11 @@
         "node": ">=14.17"
       }
     },
+    "node_modules/ufo": {
+      "version": "1.6.1",
+      "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.6.1.tgz";,
+      "integrity": 
"sha512-9a4/uxlTWJ4+a5i0ooc1rU7C7YOw3wT+UGqdeNNHWnOF9qcMBgLRS+4IYUqbczewFx4mLEig6gawh7X6mFlEkA=="
+    },
     "node_modules/undici-types": {
       "version": "7.8.0",
       "resolved": 
"https://registry.npmjs.org/undici-types/-/undici-types-7.8.0.tgz";,
@@ -16530,14 +17601,6 @@
         "url": "https://opencollective.com/webpack";
       }
     },
-    "node_modules/use-sync-external-store": {
-      "version": "1.5.0",
-      "resolved": 
"https://registry.npmjs.org/use-sync-external-store/-/use-sync-external-store-1.5.0.tgz";,
-      "integrity": 
"sha512-Rb46I4cGGVBmjamjphe8L/UnvJD+uPPtTkNvX5mZgqdbavhI4EbgIWJiIHXJ8bc/i9EQGPRh4DwEURJ552Do0A==",
-      "peerDependencies": {
-        "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0"
-      }
-    },
     "node_modules/util-deprecate": {
       "version": "1.0.2",
       "resolved": 
"https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz";,
@@ -16636,6 +17699,49 @@
         "url": "https://opencollective.com/unified";
       }
     },
+    "node_modules/vscode-jsonrpc": {
+      "version": "8.2.0",
+      "resolved": 
"https://registry.npmjs.org/vscode-jsonrpc/-/vscode-jsonrpc-8.2.0.tgz";,
+      "integrity": 
"sha512-C+r0eKJUIfiDIfwJhria30+TYWPtuHJXHtI7J0YlOmKAo7ogxP20T0zxB7HZQIFhIyvoBPwWskjxrvAtfjyZfA==",
+      "engines": {
+        "node": ">=14.0.0"
+      }
+    },
+    "node_modules/vscode-languageserver": {
+      "version": "9.0.1",
+      "resolved": 
"https://registry.npmjs.org/vscode-languageserver/-/vscode-languageserver-9.0.1.tgz";,
+      "integrity": 
"sha512-woByF3PDpkHFUreUa7Hos7+pUWdeWMXRd26+ZX2A8cFx6v/JPTtd4/uN0/jB6XQHYaOlHbio03NTHCqrgG5n7g==",
+      "dependencies": {
+        "vscode-languageserver-protocol": "3.17.5"
+      },
+      "bin": {
+        "installServerIntoExtension": "bin/installServerIntoExtension"
+      }
+    },
+    "node_modules/vscode-languageserver-protocol": {
+      "version": "3.17.5",
+      "resolved": 
"https://registry.npmjs.org/vscode-languageserver-protocol/-/vscode-languageserver-protocol-3.17.5.tgz";,
+      "integrity": 
"sha512-mb1bvRJN8SVznADSGWM9u/b07H7Ecg0I3OgXDuLdn307rl/J3A9YD6/eYOssqhecL27hK1IPZAsaqh00i/Jljg==",
+      "dependencies": {
+        "vscode-jsonrpc": "8.2.0",
+        "vscode-languageserver-types": "3.17.5"
+      }
+    },
+    "node_modules/vscode-languageserver-textdocument": {
+      "version": "1.0.12",
+      "resolved": 
"https://registry.npmjs.org/vscode-languageserver-textdocument/-/vscode-languageserver-textdocument-1.0.12.tgz";,
+      "integrity": 
"sha512-cxWNPesCnQCcMPeenjKKsOCKQZ/L6Tv19DTRIGuLWe32lyzWhihGVJ/rcckZXJxfdKCFvRLS3fpBIsV/ZGX4zA=="
+    },
+    "node_modules/vscode-languageserver-types": {
+      "version": "3.17.5",
+      "resolved": 
"https://registry.npmjs.org/vscode-languageserver-types/-/vscode-languageserver-types-3.17.5.tgz";,
+      "integrity": 
"sha512-Ld1VelNuX9pdF39h2Hgaeb5hEZM2Z3jUrrMgWQAu82jMtZp7p3vJT3BzToKtZI7NgQssZje5o0zryOrhQvzQAg=="
+    },
+    "node_modules/vscode-uri": {
+      "version": "3.0.8",
+      "resolved": 
"https://registry.npmjs.org/vscode-uri/-/vscode-uri-3.0.8.tgz";,
+      "integrity": 
"sha512-AyFQ0EVmsOZOlAnxoFOGOq1SQDWAB7C6aqMGS23svWAllfOaxbuFvcT8D1i8z3Gyn8fraVeZNNmN6e9bxxXkKw=="
+    },
     "node_modules/watchpack": {
       "version": "2.4.4",
       "resolved": "https://registry.npmjs.org/watchpack/-/watchpack-2.4.4.tgz";,
diff --git a/package.json b/package.json
index c1591f6..37180cd 100644
--- a/package.json
+++ b/package.json
@@ -16,10 +16,10 @@
     "typecheck": "tsc"
   },
   "dependencies": {
-    "@docsly/react": "^1.9.1",
     "@docusaurus/core": "^3.8.1",
     "@docusaurus/preset-classic": "^3.8.1",
     "@docusaurus/theme-common": "^3.8.1",
+    "@docusaurus/theme-mermaid": "^3.8.1",
     "@heroicons/react": "^2.2.0",
     "@mdx-js/react": "^3.1.0",
     "@radix-ui/react-icons": "^1.3.2",
diff --git a/src/theme/Footer/index.js b/src/theme/Footer/index.js
deleted file mode 100644
index 15f98ac..0000000
--- a/src/theme/Footer/index.js
+++ /dev/null
@@ -1,15 +0,0 @@
-import React from 'react';
-import Footer from '@theme-original/Footer';
-import Docsly from "@docsly/react";
-import "@docsly/react/styles.css";
-import {useLocation} from "@docusaurus/router";
-
-export default function FooterWrapper(props) {
-  const { pathname } = useLocation();
-  return (
-    <>
-      <Footer {...props} />
-      <Docsly publicId="pk_3w27Gav8Q0EzQ4lZh4zVFAyNsVlGHpf34UTiz73MG5zeix3e" 
pathname={pathname} />
-    </>
-  );
-}

Reply via email to