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

marat pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/camel-karavan.git

commit 0f6a66249cb17a4aabb35c2c74247760d3e2bfdd
Author: Marat Gubaidullin <ma...@talismancloud.io>
AuthorDate: Mon Jan 13 18:35:36 2025 -0500

    Fix for vscode
---
 karavan-vscode/package-lock.json                   | 658 +++++++++++++++++----
 karavan-vscode/package.json                        |   8 +-
 karavan-vscode/webview/topology/CustomGroup.tsx    |  10 +-
 karavan-vscode/webview/topology/CustomNode.tsx     |  16 +-
 karavan-vscode/webview/topology/TopologyApi.tsx    |   5 +-
 karavan-vscode/webview/topology/TopologyLegend.tsx |  44 ++
 karavan-vscode/webview/topology/TopologyTab.tsx    |   2 +
 karavan-vscode/webview/topology/topology.css       |  50 +-
 8 files changed, 669 insertions(+), 124 deletions(-)

diff --git a/karavan-vscode/package-lock.json b/karavan-vscode/package-lock.json
index 37ac75db..f91eea28 100644
--- a/karavan-vscode/package-lock.json
+++ b/karavan-vscode/package-lock.json
@@ -10,9 +10,11 @@
       "license": "Apache-2.0",
       "dependencies": {
         "@monaco-editor/react": "^4.6.0",
-        "@patternfly/patternfly": "5.4.0",
-        "@patternfly/react-core": "5.4.0",
-        "@patternfly/react-table": "5.4.0",
+        "@patternfly/patternfly": "^5.4.2",
+        "@patternfly/react-charts": "7.4.5",
+        "@patternfly/react-core": "^5.4.8",
+        "@patternfly/react-log-viewer": "^5.3.0",
+        "@patternfly/react-table": "^5.4.8",
         "@patternfly/react-topology": "5.4.0",
         "@types/js-yaml": "4.0.9",
         "@types/uuid": "10.0.0",
@@ -2005,21 +2007,57 @@
       }
     },
     "node_modules/@patternfly/patternfly": {
-      "version": "5.4.0",
-      "resolved": 
"https://registry.npmjs.org/@patternfly/patternfly/-/patternfly-5.4.0.tgz";,
-      "integrity": 
"sha512-9B33M4N0/KDyss6NpCwAhz18za7R+sXYiFrUObhGoJ1Cmg06SeScVrEAjT4yJwAClWUlKh604Af9wE4D7IF8Lg=="
+      "version": "5.4.2",
+      "resolved": 
"https://registry.npmjs.org/@patternfly/patternfly/-/patternfly-5.4.2.tgz";,
+      "integrity": 
"sha512-+BaokNR8/AmTYMESxby9UtQXPGACg449BXQd0KejAvW/uGxlgO6mY1X1205DeBEHoK3e/vXkYXjvZPpv/tcxSA==",
+      "license": "MIT"
+    },
+    "node_modules/@patternfly/react-charts": {
+      "version": "7.4.5",
+      "resolved": 
"https://registry.npmjs.org/@patternfly/react-charts/-/react-charts-7.4.5.tgz";,
+      "integrity": 
"sha512-m6+y4FDCQm+Ql55KJQK1Yor799aaYgpVbIcqShtZ7Lidx9MFCfoCJxSrJTbfJHb46H+zv/LKxLtJ6dUx54qnjA==",
+      "license": "MIT",
+      "dependencies": {
+        "@patternfly/react-styles": "^5.4.1",
+        "@patternfly/react-tokens": "^5.4.1",
+        "hoist-non-react-statics": "^3.3.2",
+        "lodash": "^4.17.21",
+        "tslib": "^2.7.0",
+        "victory-area": "^37.1.1",
+        "victory-axis": "^37.1.1",
+        "victory-bar": "^37.1.1",
+        "victory-box-plot": "^37.1.1",
+        "victory-chart": "^37.1.1",
+        "victory-core": "^37.1.1",
+        "victory-create-container": "^37.1.1",
+        "victory-cursor-container": "^37.1.1",
+        "victory-group": "^37.1.1",
+        "victory-legend": "^37.1.1",
+        "victory-line": "^37.1.1",
+        "victory-pie": "^37.1.1",
+        "victory-scatter": "^37.1.1",
+        "victory-stack": "^37.1.1",
+        "victory-tooltip": "^37.1.1",
+        "victory-voronoi-container": "^37.1.1",
+        "victory-zoom-container": "^37.1.1"
+      },
+      "peerDependencies": {
+        "react": "^17 || ^18",
+        "react-dom": "^17 || ^18"
+      }
     },
     "node_modules/@patternfly/react-core": {
-      "version": "5.4.0",
-      "resolved": 
"https://registry.npmjs.org/@patternfly/react-core/-/react-core-5.4.0.tgz";,
-      "integrity": 
"sha512-Tz2Y9V4G2pnwrylc/4/FyxIRFvxiA8BEBIG6UBwXxrstnJmJaHgAIy6QJdJmERzVx3GVDz6/rM0PnMqa5R6auQ==",
+      "version": "5.4.12",
+      "resolved": 
"https://registry.npmjs.org/@patternfly/react-core/-/react-core-5.4.12.tgz";,
+      "integrity": 
"sha512-RI1xS1JGJdE/FvpkMzawaE21oeTc/e+WbxvFXqZfLhTz60P8RzVG1nYWXDL747Onkz3SYtY79PhQ8nsLeO5sJQ==",
+      "license": "MIT",
       "dependencies": {
-        "@patternfly/react-icons": "^5.4.0",
-        "@patternfly/react-styles": "^5.4.0",
-        "@patternfly/react-tokens": "^5.4.0",
-        "focus-trap": "7.5.4",
+        "@patternfly/react-icons": "^5.4.2",
+        "@patternfly/react-styles": "^5.4.1",
+        "@patternfly/react-tokens": "^5.4.1",
+        "focus-trap": "7.6.2",
         "react-dropzone": "^14.2.3",
-        "tslib": "^2.6.3"
+        "tslib": "^2.7.0"
       },
       "peerDependencies": {
         "react": "^17 || ^18",
@@ -2027,30 +2065,49 @@
       }
     },
     "node_modules/@patternfly/react-icons": {
-      "version": "5.4.0",
-      "resolved": 
"https://registry.npmjs.org/@patternfly/react-icons/-/react-icons-5.4.0.tgz";,
-      "integrity": 
"sha512-2M3qN/naultvRHeG2laJMmoIroFCGAyfwTVrnCjSkG6/KnRoXV0+dqd+Xrh7xzpzvIJB1klvifC0oX42cEkDrA==",
+      "version": "5.4.2",
+      "resolved": 
"https://registry.npmjs.org/@patternfly/react-icons/-/react-icons-5.4.2.tgz";,
+      "integrity": 
"sha512-CMQ5oHYzW6TPVTs2jpNJmP2vGCAKR/YeTPwHGO9dLkAUej1IcIxtCCWK2Fdo2UJsnBjuZihasyw2b6ehvbUm9Q==",
+      "license": "MIT",
+      "peerDependencies": {
+        "react": "^17 || ^18",
+        "react-dom": "^17 || ^18"
+      }
+    },
+    "node_modules/@patternfly/react-log-viewer": {
+      "version": "5.3.0",
+      "resolved": 
"https://registry.npmjs.org/@patternfly/react-log-viewer/-/react-log-viewer-5.3.0.tgz";,
+      "integrity": 
"sha512-6jzhxwJwllLdX3jpoGdzIhvhPTfYuC6B+KuN2Laf7Iuioeig8bOMzJZFh6VXg+aBGd9j4JGv2dYryDsbDsTLvw==",
+      "license": "MIT",
+      "dependencies": {
+        "@patternfly/react-core": "^5.0.0",
+        "@patternfly/react-icons": "^5.0.0",
+        "@patternfly/react-styles": "^5.0.0",
+        "memoize-one": "^5.1.0"
+      },
       "peerDependencies": {
         "react": "^17 || ^18",
         "react-dom": "^17 || ^18"
       }
     },
     "node_modules/@patternfly/react-styles": {
-      "version": "5.4.0",
-      "resolved": 
"https://registry.npmjs.org/@patternfly/react-styles/-/react-styles-5.4.0.tgz";,
-      "integrity": 
"sha512-4ZE0s6LkX/0KsN0FOeogrDoj18m+BPA73YKnabZGB4SDRzrBNeBh2a6bSt546ZseEjkoJ+S81kOG0G8YckPQYg=="
+      "version": "5.4.1",
+      "resolved": 
"https://registry.npmjs.org/@patternfly/react-styles/-/react-styles-5.4.1.tgz";,
+      "integrity": 
"sha512-XA8PXksD8uiA3RTwxdUwJXOCf+V6sVd+2HKapWAdRLvtSV+Sdk7NgCvalb4IAQncsddLopjPQD8gAHA298+N8w==",
+      "license": "MIT"
     },
     "node_modules/@patternfly/react-table": {
-      "version": "5.4.0",
-      "resolved": 
"https://registry.npmjs.org/@patternfly/react-table/-/react-table-5.4.0.tgz";,
-      "integrity": 
"sha512-HkXxVEPeI6nRVSUSHb5BungF41IfjB8W2VqaA3SX+6fGxQAW0e/Hb58ctUdPR2VJ/S2YZFcIcqCCWQtQEf+xKA==",
+      "version": "5.4.13",
+      "resolved": 
"https://registry.npmjs.org/@patternfly/react-table/-/react-table-5.4.13.tgz";,
+      "integrity": 
"sha512-cYw+pgpZXKGg3dZxudteUURqmj5O0ec7aNE80NLqFTcnI0MAOnfrFzCNApXJErn+MjD0VolMcC+H48eaRkT8TA==",
+      "license": "MIT",
       "dependencies": {
-        "@patternfly/react-core": "^5.4.0",
-        "@patternfly/react-icons": "^5.4.0",
-        "@patternfly/react-styles": "^5.4.0",
-        "@patternfly/react-tokens": "^5.4.0",
+        "@patternfly/react-core": "^5.4.12",
+        "@patternfly/react-icons": "^5.4.2",
+        "@patternfly/react-styles": "^5.4.1",
+        "@patternfly/react-tokens": "^5.4.1",
         "lodash": "^4.17.21",
-        "tslib": "^2.6.3"
+        "tslib": "^2.7.0"
       },
       "peerDependencies": {
         "react": "^17 || ^18",
@@ -2058,9 +2115,10 @@
       }
     },
     "node_modules/@patternfly/react-tokens": {
-      "version": "5.4.0",
-      "resolved": 
"https://registry.npmjs.org/@patternfly/react-tokens/-/react-tokens-5.4.0.tgz";,
-      "integrity": 
"sha512-KONkwCVOMyklhuuaYeYgcAsGtCBQXnsBGZeolhOdSzr2Mj0RVSW0oMrQPgZuPVzhhC/kbqgClHJJl6xuG9xheA=="
+      "version": "5.4.1",
+      "resolved": 
"https://registry.npmjs.org/@patternfly/react-tokens/-/react-tokens-5.4.1.tgz";,
+      "integrity": 
"sha512-eygdHE7Krta1mijAv/E8RHiKIgysD0eeNTo8EXUYC8/M4e5K6sqpr2p6rQBF8QiRMN8FnbXvZT3K2OQ28pYt9Q==",
+      "license": "MIT"
     },
     "node_modules/@patternfly/react-topology": {
       "version": "5.4.0",
@@ -3841,7 +3899,9 @@
       }
     },
     "node_modules/cross-spawn": {
-      "version": "7.0.3",
+      "version": "7.0.6",
+      "resolved": 
"https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz";,
+      "integrity": 
"sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -4331,11 +4391,13 @@
       }
     },
     "node_modules/debug": {
-      "version": "4.3.4",
+      "version": "4.4.0",
+      "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz";,
+      "integrity": 
"sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "ms": "2.1.2"
+        "ms": "^2.1.3"
       },
       "engines": {
         "node": ">=6.0"
@@ -4417,8 +4479,25 @@
         "robust-predicates": "^3.0.0"
       }
     },
+    "node_modules/delaunay-find": {
+      "version": "0.0.6",
+      "resolved": 
"https://registry.npmjs.org/delaunay-find/-/delaunay-find-0.0.6.tgz";,
+      "integrity": 
"sha512-1+almjfrnR7ZamBk0q3Nhg6lqSe6Le4vL0WJDSMx4IDbQwTpUTXPjxC00lqLBT8MYsJpPCbI16sIkw9cPsbi7Q==",
+      "license": "ISC",
+      "dependencies": {
+        "delaunator": "^4.0.0"
+      }
+    },
+    "node_modules/delaunay-find/node_modules/delaunator": {
+      "version": "4.0.1",
+      "resolved": 
"https://registry.npmjs.org/delaunator/-/delaunator-4.0.1.tgz";,
+      "integrity": 
"sha512-WNPWi1IRKZfCt/qIDMfERkDp93+iZEmOxN2yy4Jg+Xhv8SLk2UTqqbe1sfiipn0and9QrE914/ihdx82Y/Giag==",
+      "license": "ISC"
+    },
     "node_modules/diff": {
-      "version": "5.0.0",
+      "version": "5.2.0",
+      "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz";,
+      "integrity": 
"sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==",
       "dev": true,
       "license": "BSD-3-Clause",
       "engines": {
@@ -5348,9 +5427,10 @@
       "license": "ISC"
     },
     "node_modules/focus-trap": {
-      "version": "7.5.4",
-      "resolved": 
"https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.4.tgz";,
-      "integrity": 
"sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==",
+      "version": "7.6.2",
+      "resolved": 
"https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.2.tgz";,
+      "integrity": 
"sha512-9FhUxK1hVju2+AiQIDJ5Dd//9R2n2RAfJ0qfhF4IHGHgcoEUTMpbTeG/zbEuwaiYXfuAH6XE0/aCyxDdRM+W5w==",
+      "license": "MIT",
       "dependencies": {
         "tabbable": "^6.2.0"
       }
@@ -5668,6 +5748,15 @@
         "he": "bin/he"
       }
     },
+    "node_modules/hoist-non-react-statics": {
+      "version": "3.3.2",
+      "resolved": 
"https://registry.npmjs.org/hoist-non-react-statics/-/hoist-non-react-statics-3.3.2.tgz";,
+      "integrity": 
"sha512-/gGivxi8JPKWNm/W0jSmzcMPpfpPLc3dY/6GxhX2hQ9iGj3aDfklV4ET7NjKpSinLpJ5vafa9iiGIEZg10SfBw==",
+      "license": "BSD-3-Clause",
+      "dependencies": {
+        "react-is": "^16.7.0"
+      }
+    },
     "node_modules/html-to-image": {
       "version": "1.11.11",
       "license": "MIT"
@@ -6259,6 +6348,12 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/json-stringify-safe": {
+      "version": "5.0.1",
+      "resolved": 
"https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz";,
+      "integrity": 
"sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA==",
+      "license": "ISC"
+    },
     "node_modules/json5": {
       "version": "2.2.3",
       "dev": true,
@@ -6504,6 +6599,12 @@
       "dev": true,
       "license": "CC0-1.0"
     },
+    "node_modules/memoize-one": {
+      "version": "5.2.1",
+      "resolved": 
"https://registry.npmjs.org/memoize-one/-/memoize-one-5.2.1.tgz";,
+      "integrity": 
"sha512-zYiwtZUcYyXKo/np96AGZAckk+FWWsUdJ3cHGGmld7+AhvcWmQyGCYUh1hc4Q/pkOhb65dQR/pqCyK0cOaHz4Q==",
+      "license": "MIT"
+    },
     "node_modules/memory-fs": {
       "version": "0.5.0",
       "dev": true,
@@ -6531,11 +6632,13 @@
       }
     },
     "node_modules/micromatch": {
-      "version": "4.0.5",
+      "version": "4.0.8",
+      "resolved": 
"https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz";,
+      "integrity": 
"sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
-        "braces": "^3.0.2",
+        "braces": "^3.0.3",
         "picomatch": "^2.3.1"
       },
       "engines": {
@@ -6679,31 +6782,32 @@
       }
     },
     "node_modules/mocha": {
-      "version": "10.2.0",
-      "dev": true,
-      "license": "MIT",
-      "dependencies": {
-        "ansi-colors": "4.1.1",
-        "browser-stdout": "1.3.1",
-        "chokidar": "3.5.3",
-        "debug": "4.3.4",
-        "diff": "5.0.0",
-        "escape-string-regexp": "4.0.0",
-        "find-up": "5.0.0",
-        "glob": "7.2.0",
-        "he": "1.2.0",
-        "js-yaml": "4.1.0",
-        "log-symbols": "4.1.0",
-        "minimatch": "5.0.1",
-        "ms": "2.1.3",
-        "nanoid": "3.3.3",
-        "serialize-javascript": "6.0.0",
-        "strip-json-comments": "3.1.1",
-        "supports-color": "8.1.1",
-        "workerpool": "6.2.1",
-        "yargs": "16.2.0",
-        "yargs-parser": "20.2.4",
-        "yargs-unparser": "2.0.0"
+      "version": "10.8.2",
+      "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.8.2.tgz";,
+      "integrity": 
"sha512-VZlYo/WE8t1tstuRmqgeyBgCbJc/lEdopaa+axcKzTBJ+UIdlAB9XnmvTCAH4pwR4ElNInaedhEBmZD8iCSVEg==",
+      "dev": true,
+      "license": "MIT",
+      "dependencies": {
+        "ansi-colors": "^4.1.3",
+        "browser-stdout": "^1.3.1",
+        "chokidar": "^3.5.3",
+        "debug": "^4.3.5",
+        "diff": "^5.2.0",
+        "escape-string-regexp": "^4.0.0",
+        "find-up": "^5.0.0",
+        "glob": "^8.1.0",
+        "he": "^1.2.0",
+        "js-yaml": "^4.1.0",
+        "log-symbols": "^4.1.0",
+        "minimatch": "^5.1.6",
+        "ms": "^2.1.3",
+        "serialize-javascript": "^6.0.2",
+        "strip-json-comments": "^3.1.1",
+        "supports-color": "^8.1.1",
+        "workerpool": "^6.5.1",
+        "yargs": "^16.2.0",
+        "yargs-parser": "^20.2.9",
+        "yargs-unparser": "^2.0.0"
       },
       "bin": {
         "_mocha": "bin/_mocha",
@@ -6711,22 +6815,12 @@
       },
       "engines": {
         "node": ">= 14.0.0"
-      },
-      "funding": {
-        "type": "opencollective",
-        "url": "https://opencollective.com/mochajs";
-      }
-    },
-    "node_modules/mocha/node_modules/ansi-colors": {
-      "version": "4.1.1",
-      "dev": true,
-      "license": "MIT",
-      "engines": {
-        "node": ">=6"
       }
     },
     "node_modules/mocha/node_modules/brace-expansion": {
       "version": "2.0.1",
+      "resolved": 
"https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz";,
+      "integrity": 
"sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
       "dev": true,
       "license": "MIT",
       "dependencies": {
@@ -6744,6 +6838,27 @@
         "url": "https://github.com/sponsors/sindresorhus";
       }
     },
+    "node_modules/mocha/node_modules/glob": {
+      "version": "8.1.0",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz";,
+      "integrity": 
"sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==",
+      "deprecated": "Glob versions prior to v9 are no longer supported",
+      "dev": true,
+      "license": "ISC",
+      "dependencies": {
+        "fs.realpath": "^1.0.0",
+        "inflight": "^1.0.4",
+        "inherits": "2",
+        "minimatch": "^5.0.1",
+        "once": "^1.3.0"
+      },
+      "engines": {
+        "node": ">=12"
+      },
+      "funding": {
+        "url": "https://github.com/sponsors/isaacs";
+      }
+    },
     "node_modules/mocha/node_modules/has-flag": {
       "version": "4.0.0",
       "dev": true,
@@ -6753,7 +6868,9 @@
       }
     },
     "node_modules/mocha/node_modules/minimatch": {
-      "version": "5.0.1",
+      "version": "5.1.6",
+      "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz";,
+      "integrity": 
"sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
@@ -6763,19 +6880,6 @@
         "node": ">=10"
       }
     },
-    "node_modules/mocha/node_modules/ms": {
-      "version": "2.1.3",
-      "dev": true,
-      "license": "MIT"
-    },
-    "node_modules/mocha/node_modules/serialize-javascript": {
-      "version": "6.0.0",
-      "dev": true,
-      "license": "BSD-3-Clause",
-      "dependencies": {
-        "randombytes": "^2.1.0"
-      }
-    },
     "node_modules/mocha/node_modules/supports-color": {
       "version": "8.1.1",
       "dev": true,
@@ -6796,13 +6900,23 @@
       "peer": true
     },
     "node_modules/ms": {
-      "version": "2.1.2",
+      "version": "2.1.3",
+      "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz";,
+      "integrity": 
"sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==",
       "dev": true,
       "license": "MIT"
     },
     "node_modules/nanoid": {
-      "version": "3.3.3",
+      "version": "3.3.8",
+      "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz";,
+      "integrity": 
"sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==",
       "dev": true,
+      "funding": [
+        {
+          "type": "github",
+          "url": "https://github.com/sponsors/ai";
+        }
+      ],
       "license": "MIT",
       "bin": {
         "nanoid": "bin/nanoid.cjs"
@@ -7270,23 +7384,6 @@
       "dev": true,
       "license": "MIT"
     },
-    "node_modules/postcss/node_modules/nanoid": {
-      "version": "3.3.6",
-      "dev": true,
-      "funding": [
-        {
-          "type": "github",
-          "url": "https://github.com/sponsors/ai";
-        }
-      ],
-      "license": "MIT",
-      "bin": {
-        "nanoid": "bin/nanoid.cjs"
-      },
-      "engines": {
-        "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1"
-      }
-    },
     "node_modules/prelude-ls": {
       "version": "1.2.1",
       "dev": true,
@@ -7417,6 +7514,12 @@
         "react": ">= 16.8 || 18.0.0"
       }
     },
+    "node_modules/react-fast-compare": {
+      "version": "3.2.2",
+      "resolved": 
"https://registry.npmjs.org/react-fast-compare/-/react-fast-compare-3.2.2.tgz";,
+      "integrity": 
"sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==",
+      "license": "MIT"
+    },
     "node_modules/react-is": {
       "version": "16.13.1",
       "license": "MIT"
@@ -7818,7 +7921,9 @@
       }
     },
     "node_modules/serialize-javascript": {
-      "version": "6.0.1",
+      "version": "6.0.2",
+      "resolved": 
"https://registry.npmjs.org/serialize-javascript/-/serialize-javascript-6.0.2.tgz";,
+      "integrity": 
"sha512-Saa1xPByTTq2gdeFZYLLo+RFE35NHZkAbqZeWNd3BpzppeVisAqpDjcp8dyf6uIvEqJRd46jemmyA4iFIeVk8g==",
       "dev": true,
       "license": "BSD-3-Clause",
       "dependencies": {
@@ -8187,7 +8292,8 @@
     "node_modules/tabbable": {
       "version": "6.2.0",
       "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz";,
-      "integrity": 
"sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew=="
+      "integrity": 
"sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==",
+      "license": "MIT"
     },
     "node_modules/table": {
       "version": "6.8.1",
@@ -8787,6 +8893,326 @@
       "dev": true,
       "license": "MIT"
     },
+    "node_modules/victory-area": {
+      "version": "37.3.5",
+      "resolved": 
"https://registry.npmjs.org/victory-area/-/victory-area-37.3.5.tgz";,
+      "integrity": 
"sha512-MP5+dm8ThQVsSDQhmU4K93mjPZ4hir1QkoM8kYT0PsJcoFYI6J2ceTxoyJUUgrgO0Kf63PcYChR5RLu34bhFlw==",
+      "license": "MIT",
+      "dependencies": {
+        "lodash": "^4.17.19",
+        "victory-core": "37.3.5",
+        "victory-vendor": "37.3.5"
+      },
+      "peerDependencies": {
+        "react": ">=16.6.0"
+      }
+    },
+    "node_modules/victory-axis": {
+      "version": "37.3.5",
+      "resolved": 
"https://registry.npmjs.org/victory-axis/-/victory-axis-37.3.5.tgz";,
+      "integrity": 
"sha512-hd40FVZvWw26CHr6XfmVGhKgPd4I4Yqxtnl27P6aLVGv1gL46UuNVdDVFozr9rpxO+lGUepYz6Wh4OuzImpDEQ==",
+      "license": "MIT",
+      "dependencies": {
+        "lodash": "^4.17.19",
+        "victory-core": "37.3.5"
+      },
+      "peerDependencies": {
+        "react": ">=16.6.0"
+      }
+    },
+    "node_modules/victory-bar": {
+      "version": "37.3.5",
+      "resolved": 
"https://registry.npmjs.org/victory-bar/-/victory-bar-37.3.5.tgz";,
+      "integrity": 
"sha512-9HXxM/+9jyv6SIcJv90yqyImgXLSEGhaPBnDJg5CvHcR1zdGAdQp2pDxDV6EivUrfxiIyj1NeSWyCZpM0ZJddQ==",
+      "license": "MIT",
+      "dependencies": {
+        "lodash": "^4.17.19",
+        "victory-core": "37.3.5",
+        "victory-vendor": "37.3.5"
+      },
+      "peerDependencies": {
+        "react": ">=16.6.0"
+      }
+    },
+    "node_modules/victory-box-plot": {
+      "version": "37.3.5",
+      "resolved": 
"https://registry.npmjs.org/victory-box-plot/-/victory-box-plot-37.3.5.tgz";,
+      "integrity": 
"sha512-jIV8k4XViLBWh5XvYBSELYGsWo55vYBoNqGkVUKhcXM4sS9mumc2XgDQ6nltTO88gs8uOyZpb2vBFp+1zOauyA==",
+      "license": "MIT",
+      "dependencies": {
+        "lodash": "^4.17.19",
+        "victory-core": "37.3.5",
+        "victory-vendor": "37.3.5"
+      },
+      "peerDependencies": {
+        "react": ">=16.6.0"
+      }
+    },
+    "node_modules/victory-brush-container": {
+      "version": "37.3.5",
+      "resolved": 
"https://registry.npmjs.org/victory-brush-container/-/victory-brush-container-37.3.5.tgz";,
+      "integrity": 
"sha512-n4Ozb5I/Pz/dcWnxAfqBhnsq6Q2gIC7Phjbau3cIBTPcq/rrkRIWzpiPPWhoAT+OTirgB9vOfe3JX4LBDk17FA==",
+      "license": "MIT",
+      "dependencies": {
+        "lodash": "^4.17.19",
+        "react-fast-compare": "^3.2.0",
+        "victory-core": "37.3.5"
+      },
+      "peerDependencies": {
+        "react": ">=16.6.0"
+      }
+    },
+    "node_modules/victory-chart": {
+      "version": "37.3.5",
+      "resolved": 
"https://registry.npmjs.org/victory-chart/-/victory-chart-37.3.5.tgz";,
+      "integrity": 
"sha512-Lsbmp5rG3ESzQAr76M4WJ0FKraltAzuQY1D3e7CmqzQlLKpsMS/j2Ty+5OCBDmC3qQ+PHObBLVavgn3TJSRJLg==",
+      "license": "MIT",
+      "dependencies": {
+        "lodash": "^4.17.19",
+        "react-fast-compare": "^3.2.0",
+        "victory-axis": "37.3.5",
+        "victory-core": "37.3.5",
+        "victory-polar-axis": "37.3.5",
+        "victory-shared-events": "37.3.5"
+      },
+      "peerDependencies": {
+        "react": ">=16.6.0"
+      }
+    },
+    "node_modules/victory-core": {
+      "version": "37.3.5",
+      "resolved": 
"https://registry.npmjs.org/victory-core/-/victory-core-37.3.5.tgz";,
+      "integrity": 
"sha512-PXY+9Lx1ohCX+ZzkWdm+VY7T+2Pd/YKdv3yVkuflzMQ52kQMYbcgwGI49yPuzVqB3m1eBJ5dYdAD53ww53GTHw==",
+      "license": "MIT",
+      "dependencies": {
+        "lodash": "^4.17.21",
+        "react-fast-compare": "^3.2.0",
+        "victory-vendor": "37.3.5"
+      },
+      "peerDependencies": {
+        "react": ">=16.6.0"
+      }
+    },
+    "node_modules/victory-create-container": {
+      "version": "37.3.5",
+      "resolved": 
"https://registry.npmjs.org/victory-create-container/-/victory-create-container-37.3.5.tgz";,
+      "integrity": 
"sha512-VcHhnw35e+xU96LWwAuCZQ7YLS9NSSlGU0pgtiUUx0ymCJDWtY8G+ZijZL+DKQ5byU/8+DvaK3iNUhxdpBAHQw==",
+      "license": "MIT",
+      "dependencies": {
+        "lodash": "^4.17.19",
+        "victory-brush-container": "37.3.5",
+        "victory-core": "37.3.5",
+        "victory-cursor-container": "37.3.5",
+        "victory-selection-container": "37.3.5",
+        "victory-voronoi-container": "37.3.5",
+        "victory-zoom-container": "37.3.5"
+      },
+      "peerDependencies": {
+        "react": ">=16.6.0"
+      }
+    },
+    "node_modules/victory-cursor-container": {
+      "version": "37.3.5",
+      "resolved": 
"https://registry.npmjs.org/victory-cursor-container/-/victory-cursor-container-37.3.5.tgz";,
+      "integrity": 
"sha512-/G9zpYkeJA0uBk3khGNJBUNHOZ25EPoFfVZqwSSjpVRRI3JLMVNvv1LWhZvFZDkK0KMrT8pi8AZr04jCZxCoPg==",
+      "license": "MIT",
+      "dependencies": {
+        "lodash": "^4.17.19",
+        "victory-core": "37.3.5"
+      },
+      "peerDependencies": {
+        "react": ">=16.6.0"
+      }
+    },
+    "node_modules/victory-group": {
+      "version": "37.3.5",
+      "resolved": 
"https://registry.npmjs.org/victory-group/-/victory-group-37.3.5.tgz";,
+      "integrity": 
"sha512-0GEtrG2Vl7uv1fkmWlHRO6U8JBhXJ3cB1KJPP2k5QKblfYd0QgDCtlSeMuaTUB+yRnQR5OlUv6bvkwwRio4bSg==",
+      "license": "MIT",
+      "dependencies": {
+        "lodash": "^4.17.19",
+        "react-fast-compare": "^3.2.0",
+        "victory-core": "37.3.5",
+        "victory-shared-events": "37.3.5"
+      },
+      "peerDependencies": {
+        "react": ">=16.6.0"
+      }
+    },
+    "node_modules/victory-legend": {
+      "version": "37.3.5",
+      "resolved": 
"https://registry.npmjs.org/victory-legend/-/victory-legend-37.3.5.tgz";,
+      "integrity": 
"sha512-TW/OeKP8LgZp93nJVoAltTwl5T0q1MWeH1HqZim2oGqwqX0E8o0BeJXv+2TGkXdp5ITiWi2nxGGQ77vSg8KZhQ==",
+      "license": "MIT",
+      "dependencies": {
+        "lodash": "^4.17.19",
+        "victory-core": "37.3.5"
+      },
+      "peerDependencies": {
+        "react": ">=16.6.0"
+      }
+    },
+    "node_modules/victory-line": {
+      "version": "37.3.5",
+      "resolved": 
"https://registry.npmjs.org/victory-line/-/victory-line-37.3.5.tgz";,
+      "integrity": 
"sha512-q1L2aSG28Z7ousRckf8zut7HdLQ7kWiNakOatsdfAqnce/n52F0E8c3qSIwbRmkdHHSe3SHhTLNyzLtnDzYQjQ==",
+      "license": "MIT",
+      "dependencies": {
+        "lodash": "^4.17.19",
+        "victory-core": "37.3.5",
+        "victory-vendor": "37.3.5"
+      },
+      "peerDependencies": {
+        "react": ">=16.6.0"
+      }
+    },
+    "node_modules/victory-pie": {
+      "version": "37.3.5",
+      "resolved": 
"https://registry.npmjs.org/victory-pie/-/victory-pie-37.3.5.tgz";,
+      "integrity": 
"sha512-JjKE5QhlatZkl/YbiN2KrF+tXIHRZ0ZYua5yWl8JYcg5/UTE3IFn/Y+2HIQIGghzEa98ZMMC/lNfZ3CEwK1yaw==",
+      "license": "MIT",
+      "dependencies": {
+        "lodash": "^4.17.19",
+        "victory-core": "37.3.5",
+        "victory-vendor": "37.3.5"
+      },
+      "peerDependencies": {
+        "react": ">=16.6.0"
+      }
+    },
+    "node_modules/victory-polar-axis": {
+      "version": "37.3.5",
+      "resolved": 
"https://registry.npmjs.org/victory-polar-axis/-/victory-polar-axis-37.3.5.tgz";,
+      "integrity": 
"sha512-6aZiaMGLtYDeh3uCB9wHKVVyvRsdbo5+WTp6S8lvyuHxyYOEn4JcxtpORzHHnGMWFkhZs4MmLSORrp/TBOi+7g==",
+      "license": "MIT",
+      "dependencies": {
+        "lodash": "^4.17.19",
+        "victory-core": "37.3.5"
+      },
+      "peerDependencies": {
+        "react": ">=16.6.0"
+      }
+    },
+    "node_modules/victory-scatter": {
+      "version": "37.3.5",
+      "resolved": 
"https://registry.npmjs.org/victory-scatter/-/victory-scatter-37.3.5.tgz";,
+      "integrity": 
"sha512-YEXm9D1novmUjk44eFyj+UQIxUw50v3yAa/772nb8yzR9ys9xPjM9+yyIsJSbRwdSiEAPmcbj6qwcYlyvJz1bQ==",
+      "license": "MIT",
+      "dependencies": {
+        "lodash": "^4.17.19",
+        "victory-core": "37.3.5"
+      },
+      "peerDependencies": {
+        "react": ">=16.6.0"
+      }
+    },
+    "node_modules/victory-selection-container": {
+      "version": "37.3.5",
+      "resolved": 
"https://registry.npmjs.org/victory-selection-container/-/victory-selection-container-37.3.5.tgz";,
+      "integrity": 
"sha512-cGqlZwV3HAWjrXjhGUsUkyFtWn+lsph2dcUzMlzTKs+e1sDFEHIVjpe3ZX4XsThu23dK//lrmIXFvbWtpLhy+Q==",
+      "license": "MIT",
+      "dependencies": {
+        "lodash": "^4.17.19",
+        "victory-core": "37.3.5"
+      },
+      "peerDependencies": {
+        "react": ">=16.6.0"
+      }
+    },
+    "node_modules/victory-shared-events": {
+      "version": "37.3.5",
+      "resolved": 
"https://registry.npmjs.org/victory-shared-events/-/victory-shared-events-37.3.5.tgz";,
+      "integrity": 
"sha512-Juq/5Y9WsFaD/4ivk7/y786EwNgLUjp3hkhpIGhiQOM2VaL5H7Xb1pX4ASjibkCkWIQUMBM+JaprtNcKEDylpQ==",
+      "license": "MIT",
+      "dependencies": {
+        "json-stringify-safe": "^5.0.1",
+        "lodash": "^4.17.19",
+        "react-fast-compare": "^3.2.0",
+        "victory-core": "37.3.5"
+      },
+      "peerDependencies": {
+        "react": ">=16.6.0"
+      }
+    },
+    "node_modules/victory-stack": {
+      "version": "37.3.5",
+      "resolved": 
"https://registry.npmjs.org/victory-stack/-/victory-stack-37.3.5.tgz";,
+      "integrity": 
"sha512-PL23dKKlr30Y77mw3JuIUYUhvOF66r3LhKQXqoymkV6DGMBhkQ2p7h+klek3xleRPBBTSz3o8EbfM8H2eZ/Umg==",
+      "license": "MIT",
+      "dependencies": {
+        "lodash": "^4.17.19",
+        "react-fast-compare": "^3.2.0",
+        "victory-core": "37.3.5",
+        "victory-shared-events": "37.3.5"
+      },
+      "peerDependencies": {
+        "react": ">=16.6.0"
+      }
+    },
+    "node_modules/victory-tooltip": {
+      "version": "37.3.5",
+      "resolved": 
"https://registry.npmjs.org/victory-tooltip/-/victory-tooltip-37.3.5.tgz";,
+      "integrity": 
"sha512-IbvD37PGehP3K5BLL9xAK+6d/UEaNcLH/cdKKzeXeqOvoefQLIxxB1DJHYr542Ll8cxkeqtdsgtJ16pRCUgCSA==",
+      "license": "MIT",
+      "dependencies": {
+        "lodash": "^4.17.19",
+        "victory-core": "37.3.5"
+      },
+      "peerDependencies": {
+        "react": ">=16.6.0"
+      }
+    },
+    "node_modules/victory-vendor": {
+      "version": "37.3.5",
+      "resolved": 
"https://registry.npmjs.org/victory-vendor/-/victory-vendor-37.3.5.tgz";,
+      "integrity": 
"sha512-+K2VBMmB7peKG3Gjp79XjgsbfsYgD0eZRSmKz7p5a4V0NhYq43eM/b0gpSLq+Dhwag96QaWsU75/6bFVBjVE7A==",
+      "license": "MIT AND ISC",
+      "dependencies": {
+        "@types/d3-array": "^3.0.3",
+        "@types/d3-ease": "^3.0.0",
+        "@types/d3-interpolate": "^3.0.1",
+        "@types/d3-scale": "^4.0.2",
+        "@types/d3-shape": "^3.1.0",
+        "@types/d3-time": "^3.0.0",
+        "@types/d3-timer": "^3.0.0",
+        "d3-array": "^3.1.6",
+        "d3-ease": "^3.0.1",
+        "d3-interpolate": "^3.0.1",
+        "d3-scale": "^4.0.2",
+        "d3-shape": "^3.1.0",
+        "d3-time": "^3.0.0",
+        "d3-timer": "^3.0.1"
+      }
+    },
+    "node_modules/victory-voronoi-container": {
+      "version": "37.3.5",
+      "resolved": 
"https://registry.npmjs.org/victory-voronoi-container/-/victory-voronoi-container-37.3.5.tgz";,
+      "integrity": 
"sha512-GF35HQn8ACMcr7yJAFmaSKAS6w9GOsxxWoR6gtuQtBUwSBciZ5LNWpR6718nFxeOYDhkk/FVn7tnKqQTBv6XUw==",
+      "license": "MIT",
+      "dependencies": {
+        "delaunay-find": "0.0.6",
+        "lodash": "^4.17.19",
+        "react-fast-compare": "^3.2.0",
+        "victory-core": "37.3.5",
+        "victory-tooltip": "37.3.5"
+      },
+      "peerDependencies": {
+        "react": ">=16.6.0"
+      }
+    },
+    "node_modules/victory-zoom-container": {
+      "version": "37.3.5",
+      "resolved": 
"https://registry.npmjs.org/victory-zoom-container/-/victory-zoom-container-37.3.5.tgz";,
+      "integrity": 
"sha512-LlRp2Ulodu3rhIrM1XilgR72223+qlhXE9mzBCYVoHQ+uo8uTKt27T0iOBkvY5kRwNiXQzshn01uxUAwxyBppw==",
+      "license": "MIT",
+      "dependencies": {
+        "lodash": "^4.17.19",
+        "victory-core": "37.3.5"
+      },
+      "peerDependencies": {
+        "react": ">=16.6.0"
+      }
+    },
     "node_modules/vscode-test": {
       "version": "1.6.1",
       "dev": true,
@@ -9158,7 +9584,9 @@
       "license": "MIT"
     },
     "node_modules/workerpool": {
-      "version": "6.2.1",
+      "version": "6.5.1",
+      "resolved": 
"https://registry.npmjs.org/workerpool/-/workerpool-6.5.1.tgz";,
+      "integrity": 
"sha512-Fs4dNYcsdpYSAfVxhnl1L5zTksjvOJxtC5hzMNl+1t9B8hTJTdKDyZ5ju7ztgPy+ft9tBFXoOlDNiOT9WUXZlA==",
       "dev": true,
       "license": "Apache-2.0"
     },
@@ -9243,7 +9671,9 @@
       }
     },
     "node_modules/yargs-parser": {
-      "version": "20.2.4",
+      "version": "20.2.9",
+      "resolved": 
"https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz";,
+      "integrity": 
"sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==",
       "dev": true,
       "license": "ISC",
       "engines": {
diff --git a/karavan-vscode/package.json b/karavan-vscode/package.json
index 205e7aa1..67f8d22f 100644
--- a/karavan-vscode/package.json
+++ b/karavan-vscode/package.json
@@ -738,9 +738,11 @@
   },
   "dependencies": {
     "@monaco-editor/react": "^4.6.0",
-    "@patternfly/patternfly": "5.4.0",
-    "@patternfly/react-core": "5.4.0",
-    "@patternfly/react-table": "5.4.0",
+    "@patternfly/patternfly": "^5.4.2",
+    "@patternfly/react-charts": "7.4.5",
+    "@patternfly/react-core": "^5.4.8",
+    "@patternfly/react-log-viewer": "^5.3.0",
+    "@patternfly/react-table": "^5.4.8",
     "@patternfly/react-topology": "5.4.0",
     "@types/js-yaml": "4.0.9",
     "@types/uuid": "10.0.0",
diff --git a/karavan-vscode/webview/topology/CustomGroup.tsx 
b/karavan-vscode/webview/topology/CustomGroup.tsx
index 595250a8..1d57941a 100644
--- a/karavan-vscode/webview/topology/CustomGroup.tsx
+++ b/karavan-vscode/webview/topology/CustomGroup.tsx
@@ -18,11 +18,17 @@
 import * as React from 'react';
 
 import './topology.css';
-import {DefaultGroup, observer} from '@patternfly/react-topology';
+import {DefaultGroup, LabelPosition, observer} from 
'@patternfly/react-topology';
 
 const CustomGroup: React.FC<any> = observer(({ element, ...rest }) => {
     return (
-        <DefaultGroup element={element} className={"topology-group"} {...rest}>
+        <DefaultGroup
+            element={element}
+            className={"topology-group"}
+            showLabel={false}
+            showLabelOnHover={true}
+            {...rest}
+        >
         </DefaultGroup>
     )
 })
diff --git a/karavan-vscode/webview/topology/CustomNode.tsx 
b/karavan-vscode/webview/topology/CustomNode.tsx
index fd8d12e6..457675be 100644
--- a/karavan-vscode/webview/topology/CustomNode.tsx
+++ b/karavan-vscode/webview/topology/CustomNode.tsx
@@ -25,6 +25,10 @@ import './topology.css';
 import {RouteDefinition} from "core/model/CamelDefinition";
 import {AutoStartupIcon, ErrorHandlerIcon} from "../designer/icons/OtherIcons";
 
+export const COLOR_ORANGE = '#ef9234';
+export const COLOR_BLUE = '#2b9af3';
+export const COLOR_GREEN = '#6ec664';
+
 function getIcon(data: any) {
     if (['route', 'rest', 'routeConfiguration'].includes(data.icon)) {
         return (
@@ -67,7 +71,13 @@ function getAttachments(data: any) {
 const CustomNode: React.FC<any> = observer(({element, ...rest}) => {
 
     const data = element.getData();
-    const badge: string = data.badge === 'REST' ? data.badge : 
data.badge?.substring(0, 1).toUpperCase();
+    const badge: string = ['API', 'RT'].includes(data.badge) ? data.badge : 
data.badge?.substring(0, 1).toUpperCase();
+    let badgeColor = COLOR_ORANGE;
+    if (badge === 'C') {
+        badgeColor = COLOR_BLUE;
+    } else if (badge === 'K') {
+        badgeColor = COLOR_GREEN;
+    }
     if (element.getLabel()?.length > 30) {
         element.setLabel(element.getLabel()?.substring(0, 30) + '...');
     }
@@ -75,8 +85,10 @@ const CustomNode: React.FC<any> = observer(({element, 
...rest}) => {
     return (
         <DefaultNode
             badge={badge}
+            badgeColor={badgeColor}
+            badgeBorderColor={badgeColor}
             showStatusDecorator
-            className="common-node"
+            className={"common-node common-node-" + badge}
             scaleLabel={false}
             element={element}
             attachments={getAttachments(data)}
diff --git a/karavan-vscode/webview/topology/TopologyApi.tsx 
b/karavan-vscode/webview/topology/TopologyApi.tsx
index fda10d1f..7a46320e 100644
--- a/karavan-vscode/webview/topology/TopologyApi.tsx
+++ b/karavan-vscode/webview/topology/TopologyApi.tsx
@@ -80,11 +80,14 @@ export function getRoutes(tins: TopologyRouteNode[]): 
NodeModel[] {
             status: NodeStatus.default,
             data: {
                 isAlternate: false,
+                badge: tin.templateId !== undefined ? 'RT' : 'R',
                 type: 'route',
                 icon: 'route',
                 step: tin.route,
                 routeId: tin.routeId,
                 fileName: tin.fileName,
+                templateId: tin.templateId,
+                templateTitle: tin.templateTitle,
             }
         }
         return node;
@@ -198,7 +201,7 @@ export function getRestNodes(tins: TopologyRestNode[]): 
NodeModel[] {
             status: NodeStatus.default,
             data: {
                 isAlternate: false,
-                badge: 'REST',
+                badge: 'API',
                 icon: 'rest',
                 type: 'rest',
                 step: tin.rest,
diff --git a/karavan-vscode/webview/topology/TopologyLegend.tsx 
b/karavan-vscode/webview/topology/TopologyLegend.tsx
new file mode 100644
index 00000000..0a915988
--- /dev/null
+++ b/karavan-vscode/webview/topology/TopologyLegend.tsx
@@ -0,0 +1,44 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements.  See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License.  You may obtain a copy of the License at
+ *
+ *      http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+import * as React from 'react';
+import './topology.css';
+import {
+    Badge,
+    Card,
+    CardBody,
+    CardTitle,
+    Label,
+} from "@patternfly/react-core";
+import {COLOR_BLUE, COLOR_GREEN, COLOR_ORANGE} from "./CustomNode";
+
+export function TopologyLegend () {
+
+
+    return (
+        <Card isCompact isFlat isRounded className="topology-legend-card">
+            <CardTitle>Legend</CardTitle>
+            <CardBody className='card-body'>
+                <Label icon={<Badge style={{backgroundColor: COLOR_ORANGE, 
padding: 0}}>API</Badge>}>REST API</Label>
+                <Label icon={<Badge style={{backgroundColor: COLOR_ORANGE, 
padding: 0}}>R</Badge>}>Route</Label>
+                <Label icon={<Badge style={{backgroundColor: COLOR_ORANGE, 
padding: 0}}>RT</Badge>}>Route Template</Label>
+                <Label icon={<Badge style={{backgroundColor: COLOR_BLUE, 
padding: 0}}>C</Badge>}>Component</Label>
+                <Label icon={<Badge style={{backgroundColor: COLOR_GREEN, 
padding: 0}}>K</Badge>}>Kamelet</Label>
+            </CardBody>
+        </Card>
+    )
+}
\ No newline at end of file
diff --git a/karavan-vscode/webview/topology/TopologyTab.tsx 
b/karavan-vscode/webview/topology/TopologyTab.tsx
index a98703b4..1f154c41 100644
--- a/karavan-vscode/webview/topology/TopologyTab.tsx
+++ b/karavan-vscode/webview/topology/TopologyTab.tsx
@@ -36,6 +36,7 @@ import {TopologyPropertiesPanel} from 
"./TopologyPropertiesPanel";
 import {TopologyToolbar} from "./TopologyToolbar";
 import {useDesignerStore} from "../designer/DesignerStore";
 import {IntegrationFile} from "core/model/IntegrationDefinition";
+import {TopologyLegend} from "./TopologyLegend";
 
 interface Props {
     files: IntegrationFile[],
@@ -160,6 +161,7 @@ export function TopologyTab(props: Props) {
         >
             <VisualizationProvider controller={controller}>
                 <VisualizationSurface state={{selectedIds}}/>
+                <TopologyLegend/>
             </VisualizationProvider>
         </TopologyView>
     );
diff --git a/karavan-vscode/webview/topology/topology.css 
b/karavan-vscode/webview/topology/topology.css
index 6edc633d..7279a162 100644
--- a/karavan-vscode/webview/topology/topology.css
+++ b/karavan-vscode/webview/topology/topology.css
@@ -61,6 +61,10 @@
     width: 32px;
 }
 
+.karavan .topology-panel .common-node-R {
+
+}
+
 .karavan .topology-panel .pf-v5-c-panel__header {
     padding-bottom: 0;
 }
@@ -117,6 +121,48 @@
     fill: var(--pf-topology__node__label__text--Fill);
 }
 
-.karavan .topology-group .pf-topology__group__label {
-    display: none;
+.karavan .pf-topology__node__label__badge > text {
+    fill: white;
+}
+
+.karavan .topology-panel .common-node-RT .pf-topology__node__background {
+    outline: 1px dashed grey;
+    outline-offset: 2px;
+    border-radius: 9px;
+}
+
+.karavan .topology-panel .topology-legend-card {
+    position: absolute;
+    bottom: 6px;
+    right: 6px;
+}
+
+.karavan .topology-panel .topology-legend-card .pf-v5-c-card__title {
+    padding: 5px;
+    display: flex;
+    justify-content: center;
+}
+
+.karavan .topology-panel .topology-legend-card .card-body {
+    display: flex;
+    flex-direction: column;
+    gap: 5px;
+    padding: 0px 10px 10px 10px;
+}
+
+.karavan .topology-panel .topology-legend-card .pf-v5-c-label {
+    background-color: white;
+}
+
+.karavan .topology-panel .topology-legend-card .pf-v5-c-label__content::before 
{
+    border-radius: 4px;
+}
+
+.karavan .topology-panel .topology-legend-card .pf-v5-c-badge {
+    min-width: 32px;
+    font-weight: normal;
+}
+
+ .pf-topology__group__label .pf-topology__node__label__background {
+    fill: grey;
 }
\ No newline at end of file


Reply via email to