Răsfoiți Sursa

chore: Picocrank upgrade for vue router 5

jamesread 4 luni în urmă
părinte
comite
c1062fb4fa

+ 190 - 232
frontend/package-lock.json

@@ -13,21 +13,21 @@
 				"@connectrpc/connect-web": "^2.1.1",
 				"@hugeicons/core-free-icons": "^3.1.1",
 				"@hugeicons/vue": "^1.0.4",
-				"@vitejs/plugin-vue": "^6.0.3",
+				"@vitejs/plugin-vue": "^6.0.4",
 				"@xterm/addon-fit": "^0.11.0",
 				"@xterm/xterm": "^6.0.0",
 				"iconify-icon": "^3.0.2",
-				"picocrank": "^1.13.1",
+				"picocrank": "^1.14.0",
 				"standard": "^17.1.2",
 				"unplugin-vue-components": "^31.0.0",
 				"vite": "^7.3.1",
-				"vue": "^3.5.27",
+				"vue": "^3.5.28",
 				"vue-i18n": "^11.2.8",
-				"vue-router": "^5.0.1"
+				"vue-router": "^5.0.2"
 			},
 			"devDependencies": {
 				"process": "^0.11.10",
-				"stylelint": "^17.0.0",
+				"stylelint": "^17.3.0",
 				"stylelint-config-standard": "^40.0.0"
 			}
 		},
@@ -196,39 +196,39 @@
 			"peer": true
 		},
 		"node_modules/@cacheable/memory": {
-			"version": "2.0.5",
-			"resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.0.5.tgz",
-			"integrity": "sha512-fkiAxCvssEyJZ5fxX4tcdZFRmW9JehSTGvvqmXn6rTzG5cH6V/3C4ad8yb01vOjp2xBydHkHrgpW0qeGtzt6VQ==",
+			"version": "2.0.7",
+			"resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.0.7.tgz",
+			"integrity": "sha512-RbxnxAMf89Tp1dLhXMS7ceft/PGsDl1Ip7T20z5nZ+pwIAsQ1p2izPjVG69oCLv/jfQ7HDPHTWK0c9rcAWXN3A==",
 			"dev": true,
 			"license": "MIT",
 			"dependencies": {
-				"@cacheable/utils": "^2.3.0",
-				"@keyv/bigmap": "^1.1.0",
-				"hookified": "^1.12.2",
-				"keyv": "^5.5.4"
+				"@cacheable/utils": "^2.3.3",
+				"@keyv/bigmap": "^1.3.0",
+				"hookified": "^1.14.0",
+				"keyv": "^5.5.5"
 			}
 		},
 		"node_modules/@cacheable/memory/node_modules/@keyv/bigmap": {
-			"version": "1.3.0",
-			"resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.0.tgz",
-			"integrity": "sha512-KT01GjzV6AQD5+IYrcpoYLkCu1Jod3nau1Z7EsEuViO3TZGRacSbO9MfHmbJ1WaOXFtWLxPVj169cn2WNKPkIg==",
+			"version": "1.3.1",
+			"resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.1.tgz",
+			"integrity": "sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==",
 			"dev": true,
 			"license": "MIT",
 			"dependencies": {
-				"hashery": "^1.2.0",
-				"hookified": "^1.13.0"
+				"hashery": "^1.4.0",
+				"hookified": "^1.15.0"
 			},
 			"engines": {
 				"node": ">= 18"
 			},
 			"peerDependencies": {
-				"keyv": "^5.5.4"
+				"keyv": "^5.6.0"
 			}
 		},
 		"node_modules/@cacheable/memory/node_modules/keyv": {
-			"version": "5.5.4",
-			"resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.4.tgz",
-			"integrity": "sha512-eohl3hKTiVyD1ilYdw9T0OiB4hnjef89e3dMYKz+mVKDzj+5IteTseASUsOB+EU9Tf6VNTCjDePcP6wkDGmLKQ==",
+			"version": "5.6.0",
+			"resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz",
+			"integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==",
 			"dev": true,
 			"license": "MIT",
 			"dependencies": {
@@ -236,20 +236,20 @@
 			}
 		},
 		"node_modules/@cacheable/utils": {
-			"version": "2.3.1",
-			"resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.3.1.tgz",
-			"integrity": "sha512-38NJXjIr4W1Sghun8ju+uYWD8h2c61B4dKwfnQHVDFpAJ9oS28RpfqZQJ6Dgd3RceGkILDY9YT+72HJR3LoeSQ==",
+			"version": "2.3.4",
+			"resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.3.4.tgz",
+			"integrity": "sha512-knwKUJEYgIfwShABS1BX6JyJJTglAFcEU7EXqzTdiGCXur4voqkiJkdgZIQtWNFhynzDWERcTYv/sETMu3uJWA==",
 			"dev": true,
 			"license": "MIT",
 			"dependencies": {
-				"hashery": "^1.2.0",
-				"keyv": "^5.5.4"
+				"hashery": "^1.3.0",
+				"keyv": "^5.6.0"
 			}
 		},
 		"node_modules/@cacheable/utils/node_modules/keyv": {
-			"version": "5.5.4",
-			"resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.4.tgz",
-			"integrity": "sha512-eohl3hKTiVyD1ilYdw9T0OiB4hnjef89e3dMYKz+mVKDzj+5IteTseASUsOB+EU9Tf6VNTCjDePcP6wkDGmLKQ==",
+			"version": "5.6.0",
+			"resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz",
+			"integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==",
 			"dev": true,
 			"license": "MIT",
 			"dependencies": {
@@ -275,6 +275,30 @@
 				"@connectrpc/connect": "2.1.1"
 			}
 		},
+		"node_modules/@csstools/css-calc": {
+			"version": "3.1.1",
+			"resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.1.1.tgz",
+			"integrity": "sha512-HJ26Z/vmsZQqs/o3a6bgKslXGFAungXGbinULZO3eMsOyNJHeBBZfup5FiZInOghgoM4Hwnmw+OgbJCNg1wwUQ==",
+			"dev": true,
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"license": "MIT",
+			"engines": {
+				"node": ">=20.19.0"
+			},
+			"peerDependencies": {
+				"@csstools/css-parser-algorithms": "^4.0.0",
+				"@csstools/css-tokenizer": "^4.0.0"
+			}
+		},
 		"node_modules/@csstools/css-parser-algorithms": {
 			"version": "4.0.0",
 			"resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz",
@@ -299,9 +323,9 @@
 			}
 		},
 		"node_modules/@csstools/css-syntax-patches-for-csstree": {
-			"version": "1.0.25",
-			"resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.25.tgz",
-			"integrity": "sha512-g0Kw9W3vjx5BEBAF8c5Fm2NcB/Fs8jJXh85aXqwEXiL+tqtOut07TWgyaGzAAfTM+gKckrrncyeGEZPcaRgm2Q==",
+			"version": "1.0.27",
+			"resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.0.27.tgz",
+			"integrity": "sha512-sxP33Jwg1bviSUXAV43cVYdmjt2TLnLXNqCWl9xmxHawWVjGz/kEbdkr7F9pxJNBN2Mh+dq0crgItbW6tQvyow==",
 			"dev": true,
 			"funding": [
 				{
@@ -313,10 +337,7 @@
 					"url": "https://opencollective.com/csstools"
 				}
 			],
-			"license": "MIT-0",
-			"engines": {
-				"node": ">=18"
-			}
+			"license": "MIT-0"
 		},
 		"node_modules/@csstools/css-tokenizer": {
 			"version": "4.0.0",
@@ -1068,9 +1089,9 @@
 			}
 		},
 		"node_modules/@rolldown/pluginutils": {
-			"version": "1.0.0-beta.53",
-			"resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-beta.53.tgz",
-			"integrity": "sha512-vENRlFU4YbrwVqNDZ7fLvy+JR1CRkyr01jhSiDpE1u6py3OMzQfztQU2jxykW3ALNxO4kSlqIDeYyD0Y9RcQeQ==",
+			"version": "1.0.0-rc.2",
+			"resolved": "https://registry.npmjs.org/@rolldown/pluginutils/-/pluginutils-1.0.0-rc.2.tgz",
+			"integrity": "sha512-izyXV/v+cHiRfozX62W9htOAvwMo4/bXKDrQ+vom1L1qRuexPock/7VZDAhnpHCLNejd3NJ6hiab+tO0D44Rgw==",
 			"license": "MIT"
 		},
 		"node_modules/@rollup/rollup-android-arm-eabi": {
@@ -1371,12 +1392,12 @@
 			"license": "ISC"
 		},
 		"node_modules/@vitejs/plugin-vue": {
-			"version": "6.0.3",
-			"resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.3.tgz",
-			"integrity": "sha512-TlGPkLFLVOY3T7fZrwdvKpjprR3s4fxRln0ORDo1VQ7HHyxJwTlrjKU3kpVWTlaAjIEuCTokmjkZnr8Tpc925w==",
+			"version": "6.0.4",
+			"resolved": "https://registry.npmjs.org/@vitejs/plugin-vue/-/plugin-vue-6.0.4.tgz",
+			"integrity": "sha512-uM5iXipgYIn13UUQCZNdWkYk+sysBeA97d5mHsAoAt1u/wpN3+zxOmsVJWosuzX+IMGRzeYUNytztrYznboIkQ==",
 			"license": "MIT",
 			"dependencies": {
-				"@rolldown/pluginutils": "1.0.0-beta.53"
+				"@rolldown/pluginutils": "1.0.0-rc.2"
 			},
 			"engines": {
 				"node": "^20.19.0 || >=22.12.0"
@@ -1414,39 +1435,39 @@
 			}
 		},
 		"node_modules/@vue/compiler-core": {
-			"version": "3.5.27",
-			"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.27.tgz",
-			"integrity": "sha512-gnSBQjZA+//qDZen+6a2EdHqJ68Z7uybrMf3SPjEGgG4dicklwDVmMC1AeIHxtLVPT7sn6sH1KOO+tS6gwOUeQ==",
+			"version": "3.5.28",
+			"resolved": "https://registry.npmjs.org/@vue/compiler-core/-/compiler-core-3.5.28.tgz",
+			"integrity": "sha512-kviccYxTgoE8n6OCw96BNdYlBg2GOWfBuOW4Vqwrt7mSKWKwFVvI8egdTltqRgITGPsTFYtKYfxIG8ptX2PJHQ==",
 			"license": "MIT",
 			"dependencies": {
-				"@babel/parser": "^7.28.5",
-				"@vue/shared": "3.5.27",
-				"entities": "^7.0.0",
+				"@babel/parser": "^7.29.0",
+				"@vue/shared": "3.5.28",
+				"entities": "^7.0.1",
 				"estree-walker": "^2.0.2",
 				"source-map-js": "^1.2.1"
 			}
 		},
 		"node_modules/@vue/compiler-dom": {
-			"version": "3.5.27",
-			"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.27.tgz",
-			"integrity": "sha512-oAFea8dZgCtVVVTEC7fv3T5CbZW9BxpFzGGxC79xakTr6ooeEqmRuvQydIiDAkglZEAd09LgVf1RoDnL54fu5w==",
+			"version": "3.5.28",
+			"resolved": "https://registry.npmjs.org/@vue/compiler-dom/-/compiler-dom-3.5.28.tgz",
+			"integrity": "sha512-/1ZepxAb159jKR1btkefDP+J2xuWL5V3WtleRmxaT+K2Aqiek/Ab/+Ebrw2pPj0sdHO8ViAyyJWfhXXOP/+LQA==",
 			"license": "MIT",
 			"dependencies": {
-				"@vue/compiler-core": "3.5.27",
-				"@vue/shared": "3.5.27"
+				"@vue/compiler-core": "3.5.28",
+				"@vue/shared": "3.5.28"
 			}
 		},
 		"node_modules/@vue/compiler-sfc": {
-			"version": "3.5.27",
-			"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.27.tgz",
-			"integrity": "sha512-sHZu9QyDPeDmN/MRoshhggVOWE5WlGFStKFwu8G52swATgSny27hJRWteKDSUUzUH+wp+bmeNbhJnEAel/auUQ==",
+			"version": "3.5.28",
+			"resolved": "https://registry.npmjs.org/@vue/compiler-sfc/-/compiler-sfc-3.5.28.tgz",
+			"integrity": "sha512-6TnKMiNkd6u6VeVDhZn/07KhEZuBSn43Wd2No5zaP5s3xm8IqFTHBj84HJah4UepSUJTro5SoqqlOY22FKY96g==",
 			"license": "MIT",
 			"dependencies": {
-				"@babel/parser": "^7.28.5",
-				"@vue/compiler-core": "3.5.27",
-				"@vue/compiler-dom": "3.5.27",
-				"@vue/compiler-ssr": "3.5.27",
-				"@vue/shared": "3.5.27",
+				"@babel/parser": "^7.29.0",
+				"@vue/compiler-core": "3.5.28",
+				"@vue/compiler-dom": "3.5.28",
+				"@vue/compiler-ssr": "3.5.28",
+				"@vue/shared": "3.5.28",
 				"estree-walker": "^2.0.2",
 				"magic-string": "^0.30.21",
 				"postcss": "^8.5.6",
@@ -1454,13 +1475,13 @@
 			}
 		},
 		"node_modules/@vue/compiler-ssr": {
-			"version": "3.5.27",
-			"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.27.tgz",
-			"integrity": "sha512-Sj7h+JHt512fV1cTxKlYhg7qxBvack+BGncSpH+8vnN+KN95iPIcqB5rsbblX40XorP+ilO7VIKlkuu3Xq2vjw==",
+			"version": "3.5.28",
+			"resolved": "https://registry.npmjs.org/@vue/compiler-ssr/-/compiler-ssr-3.5.28.tgz",
+			"integrity": "sha512-JCq//9w1qmC6UGLWJX7RXzrGpKkroubey/ZFqTpvEIDJEKGgntuDMqkuWiZvzTzTA5h2qZvFBFHY7fAAa9475g==",
 			"license": "MIT",
 			"dependencies": {
-				"@vue/compiler-dom": "3.5.27",
-				"@vue/shared": "3.5.27"
+				"@vue/compiler-dom": "3.5.28",
+				"@vue/shared": "3.5.28"
 			}
 		},
 		"node_modules/@vue/devtools-api": {
@@ -1494,53 +1515,53 @@
 			}
 		},
 		"node_modules/@vue/reactivity": {
-			"version": "3.5.27",
-			"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.27.tgz",
-			"integrity": "sha512-vvorxn2KXfJ0nBEnj4GYshSgsyMNFnIQah/wczXlsNXt+ijhugmW+PpJ2cNPe4V6jpnBcs0MhCODKllWG+nvoQ==",
+			"version": "3.5.28",
+			"resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.5.28.tgz",
+			"integrity": "sha512-gr5hEsxvn+RNyu9/9o1WtdYdwDjg5FgjUSBEkZWqgTKlo/fvwZ2+8W6AfKsc9YN2k/+iHYdS9vZYAhpi10kNaw==",
 			"license": "MIT",
 			"dependencies": {
-				"@vue/shared": "3.5.27"
+				"@vue/shared": "3.5.28"
 			}
 		},
 		"node_modules/@vue/runtime-core": {
-			"version": "3.5.27",
-			"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.27.tgz",
-			"integrity": "sha512-fxVuX/fzgzeMPn/CLQecWeDIFNt3gQVhxM0rW02Tvp/YmZfXQgcTXlakq7IMutuZ/+Ogbn+K0oct9J3JZfyk3A==",
+			"version": "3.5.28",
+			"resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.5.28.tgz",
+			"integrity": "sha512-POVHTdbgnrBBIpnbYU4y7pOMNlPn2QVxVzkvEA2pEgvzbelQq4ZOUxbp2oiyo+BOtiYlm8Q44wShHJoBvDPAjQ==",
 			"license": "MIT",
 			"dependencies": {
-				"@vue/reactivity": "3.5.27",
-				"@vue/shared": "3.5.27"
+				"@vue/reactivity": "3.5.28",
+				"@vue/shared": "3.5.28"
 			}
 		},
 		"node_modules/@vue/runtime-dom": {
-			"version": "3.5.27",
-			"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.27.tgz",
-			"integrity": "sha512-/QnLslQgYqSJ5aUmb5F0z0caZPGHRB8LEAQ1s81vHFM5CBfnun63rxhvE/scVb/j3TbBuoZwkJyiLCkBluMpeg==",
+			"version": "3.5.28",
+			"resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.5.28.tgz",
+			"integrity": "sha512-4SXxSF8SXYMuhAIkT+eBRqOkWEfPu6nhccrzrkioA6l0boiq7sp18HCOov9qWJA5HML61kW8p/cB4MmBiG9dSA==",
 			"license": "MIT",
 			"dependencies": {
-				"@vue/reactivity": "3.5.27",
-				"@vue/runtime-core": "3.5.27",
-				"@vue/shared": "3.5.27",
+				"@vue/reactivity": "3.5.28",
+				"@vue/runtime-core": "3.5.28",
+				"@vue/shared": "3.5.28",
 				"csstype": "^3.2.3"
 			}
 		},
 		"node_modules/@vue/server-renderer": {
-			"version": "3.5.27",
-			"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.27.tgz",
-			"integrity": "sha512-qOz/5thjeP1vAFc4+BY3Nr6wxyLhpeQgAE/8dDtKo6a6xdk+L4W46HDZgNmLOBUDEkFXV3G7pRiUqxjX0/2zWA==",
+			"version": "3.5.28",
+			"resolved": "https://registry.npmjs.org/@vue/server-renderer/-/server-renderer-3.5.28.tgz",
+			"integrity": "sha512-pf+5ECKGj8fX95bNincbzJ6yp6nyzuLDhYZCeFxUNp8EBrQpPpQaLX3nNCp49+UbgbPun3CeVE+5CXVV1Xydfg==",
 			"license": "MIT",
 			"dependencies": {
-				"@vue/compiler-ssr": "3.5.27",
-				"@vue/shared": "3.5.27"
+				"@vue/compiler-ssr": "3.5.28",
+				"@vue/shared": "3.5.28"
 			},
 			"peerDependencies": {
-				"vue": "3.5.27"
+				"vue": "3.5.28"
 			}
 		},
 		"node_modules/@vue/shared": {
-			"version": "3.5.27",
-			"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.27.tgz",
-			"integrity": "sha512-dXr/3CgqXsJkZ0n9F3I4elY8wM9jMJpP3pvRG52r6m0tu/MsAFIe6JpXVGeNMd/D9F4hQynWT8Rfuj0bdm9kFQ==",
+			"version": "3.5.28",
+			"resolved": "https://registry.npmjs.org/@vue/shared/-/shared-3.5.28.tgz",
+			"integrity": "sha512-cfWa1fCGBxrvaHRhvV3Is0MgmrbSCxYTXCSCau2I0a1Xw1N1pHAvkWCiXPRAqjvToILvguNyEwjevUqAuBQWvQ==",
 			"license": "MIT"
 		},
 		"node_modules/@xterm/addon-fit": {
@@ -1900,23 +1921,23 @@
 			}
 		},
 		"node_modules/cacheable": {
-			"version": "2.2.0",
-			"resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.2.0.tgz",
-			"integrity": "sha512-LEJxRqfeomiiRd2t0uON6hxAtgOoWDfY3fugebbz+J3vDLO+SkdfFChQcOHTZhj9SYa9iwE9MGYNX72dKiOE4w==",
+			"version": "2.3.2",
+			"resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.3.2.tgz",
+			"integrity": "sha512-w+ZuRNmex9c1TR9RcsxbfTKCjSL0rh1WA5SABbrWprIHeNBdmyQLSYonlDy9gpD+63XT8DgZ/wNh1Smvc9WnJA==",
 			"dev": true,
 			"license": "MIT",
 			"dependencies": {
-				"@cacheable/memory": "^2.0.5",
-				"@cacheable/utils": "^2.3.0",
-				"hookified": "^1.13.0",
-				"keyv": "^5.5.4",
-				"qified": "^0.5.2"
+				"@cacheable/memory": "^2.0.7",
+				"@cacheable/utils": "^2.3.3",
+				"hookified": "^1.15.0",
+				"keyv": "^5.5.5",
+				"qified": "^0.6.0"
 			}
 		},
 		"node_modules/cacheable/node_modules/keyv": {
-			"version": "5.5.4",
-			"resolved": "https://registry.npmjs.org/keyv/-/keyv-5.5.4.tgz",
-			"integrity": "sha512-eohl3hKTiVyD1ilYdw9T0OiB4hnjef89e3dMYKz+mVKDzj+5IteTseASUsOB+EU9Tf6VNTCjDePcP6wkDGmLKQ==",
+			"version": "5.6.0",
+			"resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz",
+			"integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==",
 			"dev": true,
 			"license": "MIT",
 			"dependencies": {
@@ -2283,9 +2304,9 @@
 			"dev": true
 		},
 		"node_modules/entities": {
-			"version": "7.0.0",
-			"resolved": "https://registry.npmjs.org/entities/-/entities-7.0.0.tgz",
-			"integrity": "sha512-FDWG5cmEYf2Z00IkYRhbFrwIwvdFKH07uV8dvNy0omp/Qb1xcyCWp2UDtcwJF4QZZvk0sLudP6/hAu42TaqVhQ==",
+			"version": "7.0.1",
+			"resolved": "https://registry.npmjs.org/entities/-/entities-7.0.1.tgz",
+			"integrity": "sha512-TWrgLOFUQTH994YUyl1yT4uyavY5nNB5muff+RtWaqNVCAK408b5ZnnbNAUEWLTCpum9w6arT70i1XdQ4UeOPA==",
 			"license": "BSD-2-Clause",
 			"engines": {
 				"node": ">=0.12"
@@ -3569,13 +3590,13 @@
 			}
 		},
 		"node_modules/hashery": {
-			"version": "1.2.0",
-			"resolved": "https://registry.npmjs.org/hashery/-/hashery-1.2.0.tgz",
-			"integrity": "sha512-43XJKpwle72Ik5Zpam7MuzRWyNdwwdf6XHlh8wCj2PggvWf+v/Dm5B0dxGZOmddidgeO6Ofu9As/o231Ti/9PA==",
+			"version": "1.4.0",
+			"resolved": "https://registry.npmjs.org/hashery/-/hashery-1.4.0.tgz",
+			"integrity": "sha512-Wn2i1In6XFxl8Az55kkgnFRiAlIAushzh26PTjL2AKtQcEfXrcLa7Hn5QOWGZEf3LU057P9TwwZjFyxfS1VuvQ==",
 			"dev": true,
 			"license": "MIT",
 			"dependencies": {
-				"hookified": "^1.13.0"
+				"hookified": "^1.14.0"
 			},
 			"engines": {
 				"node": ">=20"
@@ -3600,9 +3621,9 @@
 			"license": "MIT"
 		},
 		"node_modules/hookified": {
-			"version": "1.13.0",
-			"resolved": "https://registry.npmjs.org/hookified/-/hookified-1.13.0.tgz",
-			"integrity": "sha512-6sPYUY8olshgM/1LDNW4QZQN0IqgKhtl/1C8koNZBJrKLBk3AZl6chQtNwpNztvfiApHMEwMHek5rv993PRbWw==",
+			"version": "1.15.1",
+			"resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz",
+			"integrity": "sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==",
 			"dev": true,
 			"license": "MIT"
 		},
@@ -4854,97 +4875,19 @@
 			"license": "ISC"
 		},
 		"node_modules/picocrank": {
-			"version": "1.13.1",
-			"resolved": "https://registry.npmjs.org/picocrank/-/picocrank-1.13.1.tgz",
-			"integrity": "sha512-gzrDNpmnMPcmsD7glFrqlqCVGSiX0wJhLMPCTCs2wLe52pjFJc0duHqHCUXNQ81OEhFwkG7N2c+1yF6i6yEMlw==",
+			"version": "1.14.0",
+			"resolved": "https://registry.npmjs.org/picocrank/-/picocrank-1.14.0.tgz",
+			"integrity": "sha512-ksjqPHFMFE6ENaIXjhund50wocFmaLy22jYgWlWikugHBdd/0YlHfOOuoIMn0wKV8bSrJhcM3pQug/qz45Bc4g==",
 			"license": "ISC",
 			"dependencies": {
 				"@hugeicons/core-free-icons": "^3.1.1",
 				"@hugeicons/vue": "^1.0.4",
-				"@vitejs/plugin-vue": "^6.0.3",
+				"@vitejs/plugin-vue": "^6.0.4",
 				"femtocrank": "^2.5.0",
-				"unplugin-vue-components": "^30.0.0",
+				"unplugin-vue-components": "^31.0.0",
 				"vite": "^7.3.1",
-				"vue": "^3.5.26",
-				"vue-router": "^4.6.4"
-			}
-		},
-		"node_modules/picocrank/node_modules/chokidar": {
-			"version": "4.0.3",
-			"resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.3.tgz",
-			"integrity": "sha512-Qgzu8kfBvo+cA4962jnP1KkS6Dop5NS6g7R5LFYJr4b8Ub94PPQXUksCw9PvXoeXPRRddRNC5C1JQUR2SMGtnA==",
-			"license": "MIT",
-			"dependencies": {
-				"readdirp": "^4.0.1"
-			},
-			"engines": {
-				"node": ">= 14.16.0"
-			},
-			"funding": {
-				"url": "https://paulmillr.com/funding/"
-			}
-		},
-		"node_modules/picocrank/node_modules/readdirp": {
-			"version": "4.1.2",
-			"resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.1.2.tgz",
-			"integrity": "sha512-GDhwkLfywWL2s6vEjyhri+eXmfH6j1L7JE27WhqLeYzoh/A3DBaYGEj2H/HFZCn/kMfim73FXxEJTw06WtxQwg==",
-			"license": "MIT",
-			"engines": {
-				"node": ">= 14.18.0"
-			},
-			"funding": {
-				"type": "individual",
-				"url": "https://paulmillr.com/funding/"
-			}
-		},
-		"node_modules/picocrank/node_modules/unplugin-vue-components": {
-			"version": "30.0.0",
-			"resolved": "https://registry.npmjs.org/unplugin-vue-components/-/unplugin-vue-components-30.0.0.tgz",
-			"integrity": "sha512-4qVE/lwCgmdPTp6h0qsRN2u642tt4boBQtcpn4wQcWZAsr8TQwq+SPT3NDu/6kBFxzo/sSEK4ioXhOOBrXc3iw==",
-			"license": "MIT",
-			"dependencies": {
-				"chokidar": "^4.0.3",
-				"debug": "^4.4.3",
-				"local-pkg": "^1.1.2",
-				"magic-string": "^0.30.19",
-				"mlly": "^1.8.0",
-				"tinyglobby": "^0.2.15",
-				"unplugin": "^2.3.10",
-				"unplugin-utils": "^0.3.1"
-			},
-			"engines": {
-				"node": ">=14"
-			},
-			"funding": {
-				"url": "https://github.com/sponsors/antfu"
-			},
-			"peerDependencies": {
-				"@babel/parser": "^7.15.8",
-				"@nuxt/kit": "^3.2.2 || ^4.0.0",
-				"vue": "2 || 3"
-			},
-			"peerDependenciesMeta": {
-				"@babel/parser": {
-					"optional": true
-				},
-				"@nuxt/kit": {
-					"optional": true
-				}
-			}
-		},
-		"node_modules/picocrank/node_modules/vue-router": {
-			"version": "4.6.4",
-			"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-4.6.4.tgz",
-			"integrity": "sha512-Hz9q5sa33Yhduglwz6g9skT8OBPii+4bFn88w6J+J4MfEo4KRRpmiNG/hHHkdbRFlLBOqxN8y8gf2Fb0MTUgVg==",
-			"license": "MIT",
-			"dependencies": {
-				"@vue/devtools-api": "^6.6.4"
-			},
-			"funding": {
-				"url": "https://github.com/sponsors/posva"
-			},
-			"peerDependencies": {
-				"vue": "^3.5.0"
+				"vue": "^3.5.28",
+				"vue-router": "^5.0.2"
 			}
 		},
 		"node_modules/picomatch": {
@@ -5176,13 +5119,13 @@
 			}
 		},
 		"node_modules/qified": {
-			"version": "0.5.2",
-			"resolved": "https://registry.npmjs.org/qified/-/qified-0.5.2.tgz",
-			"integrity": "sha512-7gJ6mxcQb9vUBOtbKm5mDevbe2uRcOEVp1g4gb/Q+oLntB3HY8eBhOYRxFI2mlDFlY1e4DOSCptzxarXRvzxCA==",
+			"version": "0.6.0",
+			"resolved": "https://registry.npmjs.org/qified/-/qified-0.6.0.tgz",
+			"integrity": "sha512-tsSGN1x3h569ZSU1u6diwhltLyfUWDp3YbFHedapTmpBl0B3P6U3+Qptg7xu+v+1io1EwhdPyyRHYbEw0KN2FA==",
 			"dev": true,
 			"license": "MIT",
 			"dependencies": {
-				"hookified": "^1.13.0"
+				"hookified": "^1.14.0"
 			},
 			"engines": {
 				"node": ">=20"
@@ -5911,9 +5854,9 @@
 			}
 		},
 		"node_modules/stylelint": {
-			"version": "17.0.0",
-			"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-17.0.0.tgz",
-			"integrity": "sha512-saMZ2mqdQre4AfouxcbTdpVglDRcROb4MIucKHvgsDb/0IX7ODhcaz+EOIyfxAsm8Zjl/7j4hJj6MgIYYM8Xwg==",
+			"version": "17.3.0",
+			"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-17.3.0.tgz",
+			"integrity": "sha512-1POV91lcEMhj6SLVaOeA0KlS9yattS+qq+cyWqP/nYzWco7K5jznpGH1ExngvPlTM9QF1Kjd2bmuzJu9TH2OcA==",
 			"dev": true,
 			"funding": [
 				{
@@ -5927,8 +5870,9 @@
 			],
 			"license": "MIT",
 			"dependencies": {
+				"@csstools/css-calc": "^3.1.1",
 				"@csstools/css-parser-algorithms": "^4.0.0",
-				"@csstools/css-syntax-patches-for-csstree": "^1.0.25",
+				"@csstools/css-syntax-patches-for-csstree": "^1.0.26",
 				"@csstools/css-tokenizer": "^4.0.0",
 				"@csstools/media-query-list-parser": "^5.0.0",
 				"@csstools/selector-resolve-nested": "^4.0.0",
@@ -5941,7 +5885,7 @@
 				"debug": "^4.4.3",
 				"fast-glob": "^3.3.3",
 				"fastest-levenshtein": "^1.0.16",
-				"file-entry-cache": "^11.1.1",
+				"file-entry-cache": "^11.1.2",
 				"global-modules": "^2.0.0",
 				"globby": "^16.1.0",
 				"globjoin": "^0.1.4",
@@ -5960,7 +5904,7 @@
 				"postcss-safe-parser": "^7.0.1",
 				"postcss-selector-parser": "^7.1.1",
 				"postcss-value-parser": "^4.2.0",
-				"string-width": "^8.1.0",
+				"string-width": "^8.1.1",
 				"supports-hyperlinks": "^4.4.0",
 				"svg-tags": "^1.0.0",
 				"table": "^6.9.0",
@@ -6046,25 +5990,25 @@
 			}
 		},
 		"node_modules/stylelint/node_modules/file-entry-cache": {
-			"version": "11.1.1",
-			"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-11.1.1.tgz",
-			"integrity": "sha512-TPVFSDE7q91Dlk1xpFLvFllf8r0HyOMOlnWy7Z2HBku5H3KhIeOGInexrIeg2D64DosVB/JXkrrk6N/7Wriq4A==",
+			"version": "11.1.2",
+			"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-11.1.2.tgz",
+			"integrity": "sha512-N2WFfK12gmrK1c1GXOqiAJ1tc5YE+R53zvQ+t5P8S5XhnmKYVB5eZEiLNZKDSmoG8wqqbF9EXYBBW/nef19log==",
 			"dev": true,
 			"license": "MIT",
 			"dependencies": {
-				"flat-cache": "^6.1.19"
+				"flat-cache": "^6.1.20"
 			}
 		},
 		"node_modules/stylelint/node_modules/flat-cache": {
-			"version": "6.1.19",
-			"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.19.tgz",
-			"integrity": "sha512-l/K33newPTZMTGAnnzaiqSl6NnH7Namh8jBNjrgjprWxGmZUuxx/sJNIRaijOh3n7q7ESbhNZC+pvVZMFdeU4A==",
+			"version": "6.1.20",
+			"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.20.tgz",
+			"integrity": "sha512-AhHYqwvN62NVLp4lObVXGVluiABTHapoB57EyegZVmazN+hhGhLTn3uZbOofoTw4DSDvVCadzzyChXhOAvy8uQ==",
 			"dev": true,
 			"license": "MIT",
 			"dependencies": {
-				"cacheable": "^2.2.0",
+				"cacheable": "^2.3.2",
 				"flatted": "^3.3.3",
-				"hookified": "^1.13.0"
+				"hookified": "^1.15.0"
 			}
 		},
 		"node_modules/stylelint/node_modules/ignore": {
@@ -6078,9 +6022,9 @@
 			}
 		},
 		"node_modules/stylelint/node_modules/string-width": {
-			"version": "8.1.0",
-			"resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.0.tgz",
-			"integrity": "sha512-Kxl3KJGb/gxkaUMOjRsQ8IrXiGW75O4E3RPjFIINOVH8AMl2SQ/yWdTzWwF3FevIX9LcMAjJW+GRwAlAbTSXdg==",
+			"version": "8.1.1",
+			"resolved": "https://registry.npmjs.org/string-width/-/string-width-8.1.1.tgz",
+			"integrity": "sha512-KpqHIdDL9KwYk22wEOg/VIqYbrnLeSApsKT/bSj6Ez7pn3CftUiLAv2Lccpq1ALcpLV9UX1Ppn92npZWu2w/aw==",
 			"dev": true,
 			"license": "MIT",
 			"dependencies": {
@@ -6671,16 +6615,16 @@
 			}
 		},
 		"node_modules/vue": {
-			"version": "3.5.27",
-			"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.27.tgz",
-			"integrity": "sha512-aJ/UtoEyFySPBGarREmN4z6qNKpbEguYHMmXSiOGk69czc+zhs0NF6tEFrY8TZKAl8N/LYAkd4JHVd5E/AsSmw==",
+			"version": "3.5.28",
+			"resolved": "https://registry.npmjs.org/vue/-/vue-3.5.28.tgz",
+			"integrity": "sha512-BRdrNfeoccSoIZeIhyPBfvWSLFP4q8J3u8Ju8Ug5vu3LdD+yTM13Sg4sKtljxozbnuMu1NB1X5HBHRYUzFocKg==",
 			"license": "MIT",
 			"dependencies": {
-				"@vue/compiler-dom": "3.5.27",
-				"@vue/compiler-sfc": "3.5.27",
-				"@vue/runtime-dom": "3.5.27",
-				"@vue/server-renderer": "3.5.27",
-				"@vue/shared": "3.5.27"
+				"@vue/compiler-dom": "3.5.28",
+				"@vue/compiler-sfc": "3.5.28",
+				"@vue/runtime-dom": "3.5.28",
+				"@vue/server-renderer": "3.5.28",
+				"@vue/shared": "3.5.28"
 			},
 			"peerDependencies": {
 				"typescript": "*"
@@ -6712,9 +6656,9 @@
 			}
 		},
 		"node_modules/vue-router": {
-			"version": "5.0.1",
-			"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-5.0.1.tgz",
-			"integrity": "sha512-t+lFugGXMdaq8lbn+vXG4j2H9UlsP205Tszz1wcDk9FyxqItBzcdJQ06IhpkQ2mHOfiTOHZeBshkskzPzHJkCw==",
+			"version": "5.0.2",
+			"resolved": "https://registry.npmjs.org/vue-router/-/vue-router-5.0.2.tgz",
+			"integrity": "sha512-YFhwaE5c5JcJpNB1arpkl4/GnO32wiUWRB+OEj1T0DlDxEZoOfbltl2xEwktNU/9o1sGcGburIXSpbLpPFe/6w==",
 			"license": "MIT",
 			"dependencies": {
 				"@babel/generator": "^7.28.6",
@@ -6731,7 +6675,7 @@
 				"picomatch": "^4.0.3",
 				"scule": "^1.3.0",
 				"tinyglobby": "^0.2.15",
-				"unplugin": "^2.3.11",
+				"unplugin": "^3.0.0",
 				"unplugin-utils": "^0.3.1",
 				"yaml": "^2.8.2"
 			},
@@ -6739,7 +6683,7 @@
 				"url": "https://github.com/sponsors/posva"
 			},
 			"peerDependencies": {
-				"@pinia/colada": "^0.18.1",
+				"@pinia/colada": ">=0.21.2",
 				"@vue/compiler-sfc": "^3.5.17",
 				"pinia": "^3.0.4",
 				"vue": "^3.5.0"
@@ -6789,6 +6733,20 @@
 				"url": "https://github.com/sponsors/jonschlinkert"
 			}
 		},
+		"node_modules/vue-router/node_modules/unplugin": {
+			"version": "3.0.0",
+			"resolved": "https://registry.npmjs.org/unplugin/-/unplugin-3.0.0.tgz",
+			"integrity": "sha512-0Mqk3AT2TZCXWKdcoaufeXNukv2mTrEZExeXlHIOZXdqYoHHr4n51pymnwV8x2BOVxwXbK2HLlI7usrqMpycdg==",
+			"license": "MIT",
+			"dependencies": {
+				"@jridgewell/remapping": "^2.3.5",
+				"picomatch": "^4.0.3",
+				"webpack-virtual-modules": "^0.6.2"
+			},
+			"engines": {
+				"node": "^20.19.0 || >=22.12.0"
+			}
+		},
 		"node_modules/webpack-virtual-modules": {
 			"version": "0.6.2",
 			"resolved": "https://registry.npmjs.org/webpack-virtual-modules/-/webpack-virtual-modules-0.6.2.tgz",

+ 5 - 5
frontend/package.json

@@ -6,7 +6,7 @@
 	"source": "index.html",
 	"devDependencies": {
 		"process": "^0.11.10",
-		"stylelint": "^17.0.0",
+		"stylelint": "^17.3.0",
 		"stylelint-config-standard": "^40.0.0"
 	},
 	"scripts": {
@@ -26,16 +26,16 @@
 		"@connectrpc/connect-web": "^2.1.1",
 		"@hugeicons/core-free-icons": "^3.1.1",
 		"@hugeicons/vue": "^1.0.4",
-		"@vitejs/plugin-vue": "^6.0.3",
+		"@vitejs/plugin-vue": "^6.0.4",
 		"@xterm/addon-fit": "^0.11.0",
 		"@xterm/xterm": "^6.0.0",
 		"iconify-icon": "^3.0.2",
-		"picocrank": "^1.13.1",
+		"picocrank": "^1.14.0",
 		"standard": "^17.1.2",
 		"unplugin-vue-components": "^31.0.0",
 		"vite": "^7.3.1",
-    "vue": "^3.5.27",
+    "vue": "^3.5.28",
 		"vue-i18n": "^11.2.8",
-		"vue-router": "^5.0.1"
+		"vue-router": "^5.0.2"
 	}
 }

+ 1 - 0
frontend/resources/vue/components/Breadcrumbs.vue

@@ -40,6 +40,7 @@ a:hover {
 
         links.value = [];
         matched.forEach((record) => {
+            if (!record) return;
             if (record.meta && record.meta.breadcrumb) {
                 record.meta.breadcrumb.forEach((item) => {
                     links.value.push({