mediawiki/extensions/CommunityConfiguration: main (log #2503015)

sourcepatches

This run took 193 seconds.

From 3e73de23492f2b4b0355e041cfd3c03d9a1fb283 Mon Sep 17 00:00:00 2001
From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Date: Sun, 14 Jun 2026 04:34:25 +0000
Subject: [PATCH] build: Updating npm dependencies
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* stylelint-config-wikimedia: 0.18.0 → 0.19.2
* @wikimedia/codex: 2.4.0 → 2.6.0
* shell-quote: 1.8.3 → 1.8.4
  * https://github.com/advisories/GHSA-w7jw-789q-3m8p

Change-Id: I747874593f9b6c90e3661dfc726d6cf4c55af2d9
---
 package-lock.json                             | 905 ++++++++++++------
 package.json                                  |   4 +-
 .../ClientErrorMessage.test.js.snap           |   7 +-
 3 files changed, 623 insertions(+), 293 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 12e1e41..b5a721b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,7 +11,7 @@
 				"@vue/compiler-dom": "3.4.19",
 				"@vue/test-utils": "2.4.6",
 				"@vue/vue3-jest": "29.2.6",
-				"@wikimedia/codex": "2.4.0",
+				"@wikimedia/codex": "2.6.0",
 				"@wikimedia/types-wikimedia": "^0.4.4",
 				"api-testing": "1.7.3",
 				"cypress": "^15.11.0",
@@ -25,7 +25,7 @@
 				"npm-run-all": "4.1.5",
 				"stylelint": "16.23.0",
 				"stylelint-config-recommended-vue": "^1.5.0",
-				"stylelint-config-wikimedia": "0.18.0",
+				"stylelint-config-wikimedia": "0.19.2",
 				"typescript": "5.8.3",
 				"vue": "3.5.13"
 			}
@@ -1777,6 +1777,62 @@
 			"dev": true,
 			"license": "MIT"
 		},
+		"node_modules/@cacheable/memory": {
+			"version": "2.0.9",
+			"resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.0.9.tgz",
+			"integrity": "sha512-HdMx6DoGywB30vacDbBsITbIX4pgFqj1zsrV58jZBUw3klzkNoXhj7qOqAgledhxG7YZI5rBSJg7Zp8/VG0DuA==",
+			"dev": true,
+			"dependencies": {
+				"@cacheable/utils": "^2.4.1",
+				"@keyv/bigmap": "^1.3.1",
+				"hookified": "^1.15.1",
+				"keyv": "^5.6.0"
+			}
+		},
+		"node_modules/@cacheable/memory/node_modules/@keyv/bigmap": {
+			"version": "1.3.1",
+			"resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.1.tgz",
+			"integrity": "sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==",
+			"dev": true,
+			"dependencies": {
+				"hashery": "^1.4.0",
+				"hookified": "^1.15.0"
+			},
+			"engines": {
+				"node": ">= 18"
+			},
+			"peerDependencies": {
+				"keyv": "^5.6.0"
+			}
+		},
+		"node_modules/@cacheable/memory/node_modules/keyv": {
+			"version": "5.6.0",
+			"resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz",
+			"integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==",
+			"dev": true,
+			"dependencies": {
+				"@keyv/serialize": "^1.1.1"
+			}
+		},
+		"node_modules/@cacheable/utils": {
+			"version": "2.4.1",
+			"resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.4.1.tgz",
+			"integrity": "sha512-eiFgzCbIneyMlLOmNG4g9xzF7Hv3Mga4LjxjcSC/ues6VYq2+gUbQI8JqNuw/ZM8tJIeIaBGpswAsqV2V7ApgA==",
+			"dev": true,
+			"dependencies": {
+				"hashery": "^1.5.1",
+				"keyv": "^5.6.0"
+			}
+		},
+		"node_modules/@cacheable/utils/node_modules/keyv": {
+			"version": "5.6.0",
+			"resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz",
+			"integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==",
+			"dev": true,
+			"dependencies": {
+				"@keyv/serialize": "^1.1.1"
+			}
+		},
 		"node_modules/@csstools/css-parser-algorithms": {
 			"version": "3.0.5",
 			"resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz",
@@ -3022,11 +3078,10 @@
 			}
 		},
 		"node_modules/@keyv/serialize": {
-			"version": "1.1.0",
-			"resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.0.tgz",
-			"integrity": "sha512-RlDgexML7Z63Q8BSaqhXdCYNBy/JQnqYIwxofUrNLGCblOMHp+xux2Q8nLMLlPpgHQPoU0Do8Z6btCpRBEqZ8g==",
-			"dev": true,
-			"license": "MIT"
+			"version": "1.1.1",
+			"resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz",
+			"integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==",
+			"dev": true
 		},
 		"node_modules/@mdn/browser-compat-data": {
 			"version": "6.1.5",
@@ -3130,6 +3185,18 @@
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
+		"node_modules/@sindresorhus/merge-streams": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz",
+			"integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==",
+			"dev": true,
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
 		"node_modules/@sinonjs/commons": {
 			"version": "3.0.1",
 			"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
@@ -3211,69 +3278,6 @@
 				"url": "https://opencollective.com/eslint"
 			}
 		},
-		"node_modules/@stylistic/stylelint-config": {
-			"version": "2.0.0",
-			"resolved": "https://registry.npmjs.org/@stylistic/stylelint-config/-/stylelint-config-2.0.0.tgz",
-			"integrity": "sha512-8J4YAxggy2Nzkb8KJIOLbtMXTPZ5gpKVmyhiiuKEUgCl9XFND5lM0e/ZZBMGEYZ68h5qcsS/jgg1wh235erRAw==",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"@stylistic/stylelint-plugin": "^3.0.0"
-			},
-			"engines": {
-				"node": "^18.12 || >=20.9"
-			},
-			"peerDependencies": {
-				"stylelint": "^16.8.0"
-			}
-		},
-		"node_modules/@stylistic/stylelint-plugin": {
-			"version": "3.1.1",
-			"resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-3.1.1.tgz",
-			"integrity": "sha512-XagAHHIa528EvyGybv8EEYGK5zrVW74cHpsjhtovVATbhDRuJYfE+X4HCaAieW9lCkwbX6L+X0I4CiUG3w/hFw==",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"@csstools/css-parser-algorithms": "^3.0.1",
-				"@csstools/css-tokenizer": "^3.0.1",
-				"@csstools/media-query-list-parser": "^3.0.1",
-				"is-plain-object": "^5.0.0",
-				"postcss-selector-parser": "^6.1.2",
-				"postcss-value-parser": "^4.2.0",
-				"style-search": "^0.1.0",
-				"stylelint": "^16.8.2"
-			},
-			"engines": {
-				"node": "^18.12 || >=20.9"
-			},
-			"peerDependencies": {
-				"stylelint": "^16.8.0"
-			}
-		},
-		"node_modules/@stylistic/stylelint-plugin/node_modules/@csstools/media-query-list-parser": {
-			"version": "3.0.1",
-			"resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-3.0.1.tgz",
-			"integrity": "sha512-HNo8gGD02kHmcbX6PvCoUuOQvn4szyB9ca63vZHKX5A81QytgDG4oxG4IaEfHTlEZSZ6MjPEMWIVU+zF2PZcgw==",
-			"dev": true,
-			"funding": [
-				{
-					"type": "github",
-					"url": "https://github.com/sponsors/csstools"
-				},
-				{
-					"type": "opencollective",
-					"url": "https://opencollective.com/csstools"
-				}
-			],
-			"license": "MIT",
-			"engines": {
-				"node": ">=18"
-			},
-			"peerDependencies": {
-				"@csstools/css-parser-algorithms": "^3.0.1",
-				"@csstools/css-tokenizer": "^3.0.1"
-			}
-		},
 		"node_modules/@tootallnate/once": {
 			"version": "2.0.1",
 			"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.1.tgz",
@@ -3387,8 +3391,7 @@
 			"version": "3.0.5",
 			"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
 			"integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
-			"dev": true,
-			"license": "MIT"
+			"dev": true
 		},
 		"node_modules/@types/node": {
 			"version": "22.17.0",
@@ -4008,16 +4011,16 @@
 			"license": "MIT"
 		},
 		"node_modules/@wikimedia/codex": {
-			"version": "2.4.0",
-			"resolved": "https://registry.npmjs.org/@wikimedia/codex/-/codex-2.4.0.tgz",
-			"integrity": "sha512-j/I1gGbTo6pttjmwyYw9/3CeInK6mpBm2FVfABJk+B1Ylw5DskX+TqeCdKghwxSkxBt0ODbUTBYdFyafk+7ajg==",
+			"version": "2.6.0",
+			"resolved": "https://registry.npmjs.org/@wikimedia/codex/-/codex-2.6.0.tgz",
+			"integrity": "sha512-ul/WXyxZbMV3PrWd0tGATuhTwUijRhHQxEJ+k+NukzcbY4MTItU3zEiw0Ye3wgNGQBMcCDt34pRGF3tXQwwDgA==",
 			"dev": true,
 			"dependencies": {
 				"@floating-ui/vue": "1.0.6",
-				"@wikimedia/codex-icons": "2.4.0"
+				"@wikimedia/codex-icons": "2.6.0"
 			},
 			"engines": {
-				"node": ">=20.19.1",
+				"node": ">=20.20.2",
 				"npm": ">=10.8.2"
 			},
 			"peerDependencies": {
@@ -4025,12 +4028,12 @@
 			}
 		},
 		"node_modules/@wikimedia/codex-icons": {
-			"version": "2.4.0",
-			"resolved": "https://registry.npmjs.org/@wikimedia/codex-icons/-/codex-icons-2.4.0.tgz",
-			"integrity": "sha512-BBtrzLR7r9ShxCMYfsx9XaKJu/peqt5Y/jtvWx3E2G5aL/Y/pIWAkv8NIvU+ztKklbHySLH5jSvVZVKxxvU0Ew==",
+			"version": "2.6.0",
+			"resolved": "https://registry.npmjs.org/@wikimedia/codex-icons/-/codex-icons-2.6.0.tgz",
+			"integrity": "sha512-U0FK8kxhIrX5hAkFGZ0uWsR4arYjWw6GLCMZmrG1qvbX7+CFoVrhJQL7alogRdCrBiQBr8CUQOquOP5fUXPIBQ==",
 			"dev": true,
 			"engines": {
-				"node": ">=20.19.1",
+				"node": ">=20.20.2",
 				"npm": ">=10.8.2"
 			}
 		},
@@ -4287,7 +4290,6 @@
 			"resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz",
 			"integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==",
 			"dev": true,
-			"license": "MIT",
 			"engines": {
 				"node": ">=8"
 			}
@@ -4329,7 +4331,6 @@
 			"resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
 			"integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
 			"dev": true,
-			"license": "MIT",
 			"engines": {
 				"node": ">=8"
 			}
@@ -5363,15 +5364,13 @@
 			"version": "1.0.3",
 			"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
 			"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
-			"dev": true,
-			"license": "MIT"
+			"dev": true
 		},
 		"node_modules/cosmiconfig": {
-			"version": "9.0.0",
-			"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
-			"integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
+			"version": "9.0.2",
+			"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.2.tgz",
+			"integrity": "sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"env-paths": "^2.2.1",
 				"import-fresh": "^3.3.0",
@@ -5526,13 +5525,12 @@
 			}
 		},
 		"node_modules/css-functions-list": {
-			"version": "3.2.3",
-			"resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz",
-			"integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==",
+			"version": "3.3.3",
+			"resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.3.3.tgz",
+			"integrity": "sha512-8HFEBPKhOpJPEPu70wJJetjKta86Gw9+CCyCnB3sui2qQfOvRyqBy4IKLKKAwdMpWb2lHXWk9Wb4Z6AmaUT1Pg==",
 			"dev": true,
-			"license": "MIT",
 			"engines": {
-				"node": ">=12 || >=16"
+				"node": ">=12"
 			}
 		},
 		"node_modules/css-tokenize": {
@@ -5540,7 +5538,6 @@
 			"resolved": "https://registry.npmjs.org/css-tokenize/-/css-tokenize-1.0.1.tgz",
 			"integrity": "sha512-gLmmbJdwH9HLY4bcA17lnZ8GgPwEXRbvxBJGHnkiB6gLhRpTzjkjtMIvz7YORGW/Ptv2oMk8b5g+u7mRD6Dd7A==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"inherits": "^2.0.1",
 				"readable-stream": "^1.0.33"
@@ -6059,7 +6056,6 @@
 			"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
 			"integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
 			"dev": true,
-			"license": "BSD-3-Clause",
 			"engines": {
 				"node": ">= 12"
 			}
@@ -6157,7 +6153,6 @@
 			"resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz",
 			"integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"end-of-stream": "^1.4.1",
 				"inherits": "^2.0.3",
@@ -6170,7 +6165,6 @@
 			"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
 			"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"inherits": "^2.0.3",
 				"string_decoder": "^1.1.1",
@@ -6185,7 +6179,6 @@
 			"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
 			"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"safe-buffer": "~5.2.0"
 			}
@@ -8561,6 +8554,18 @@
 				"node": ">=8"
 			}
 		},
+		"node_modules/hashery": {
+			"version": "1.5.1",
+			"resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.1.tgz",
+			"integrity": "sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==",
+			"dev": true,
+			"dependencies": {
+				"hookified": "^1.15.0"
+			},
+			"engines": {
+				"node": ">=20"
+			}
+		},
 		"node_modules/hasown": {
 			"version": "2.0.2",
 			"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
@@ -8575,11 +8580,10 @@
 			}
 		},
 		"node_modules/hookified": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/hookified/-/hookified-1.11.0.tgz",
-			"integrity": "sha512-aDdIN3GyU5I6wextPplYdfmWCo+aLmjjVbntmX6HLD5RCi/xKsivYEBhnRD+d9224zFf008ZpLMPlWF0ZodYZw==",
-			"dev": true,
-			"license": "MIT"
+			"version": "1.15.1",
+			"resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz",
+			"integrity": "sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==",
+			"dev": true
 		},
 		"node_modules/hosted-git-info": {
 			"version": "2.8.9",
@@ -8801,6 +8805,16 @@
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
+		"node_modules/import-meta-resolve": {
+			"version": "4.2.0",
+			"resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz",
+			"integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==",
+			"dev": true,
+			"funding": {
+				"type": "github",
+				"url": "https://github.com/sponsors/wooorm"
+			}
+		},
 		"node_modules/imurmurhash": {
 			"version": "0.1.4",
 			"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
@@ -11510,7 +11524,8 @@
 			"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
 			"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
 			"dev": true,
-			"license": "MIT"
+			"license": "MIT",
+			"peer": true
 		},
 		"node_modules/json-parse-better-errors": {
 			"version": "1.0.2",
@@ -11601,6 +11616,7 @@
 			"integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
 			"dev": true,
 			"license": "MIT",
+			"peer": true,
 			"dependencies": {
 				"json-buffer": "3.0.1"
 			}
@@ -12382,7 +12398,6 @@
 			"resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz",
 			"integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/minimatch": "^3.0.3",
 				"array-differ": "^3.0.0",
@@ -13098,12 +13113,10 @@
 			}
 		},
 		"node_modules/postcss-html": {
-			"version": "1.8.0",
-			"resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.8.0.tgz",
-			"integrity": "sha512-5mMeb1TgLWoRKxZ0Xh9RZDfwUUIqRrcxO2uXO+Ezl1N5lqpCiSU5Gk6+1kZediBfBHFtPCdopr2UZ2SgUsKcgQ==",
+			"version": "1.8.1",
+			"resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.8.1.tgz",
+			"integrity": "sha512-OLF6P7qctfAWayOhLpcVnTGqVeJzu2W3WpIYelfz2+JV5oGxfkcEvweN9U4XpeqE0P98dcD9ssusGwlF0TK0uQ==",
 			"dev": true,
-			"license": "MIT",
-			"peer": true,
 			"dependencies": {
 				"htmlparser2": "^8.0.0",
 				"js-tokens": "^9.0.0",
@@ -13119,8 +13132,7 @@
 			"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz",
 			"integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==",
 			"dev": true,
-			"license": "MIT",
-			"peer": true
+			"license": "MIT"
 		},
 		"node_modules/postcss-less": {
 			"version": "6.0.0",
@@ -13321,6 +13333,24 @@
 			],
 			"license": "MIT"
 		},
+		"node_modules/qified": {
+			"version": "0.10.1",
+			"resolved": "https://registry.npmjs.org/qified/-/qified-0.10.1.tgz",
+			"integrity": "sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==",
+			"dev": true,
+			"dependencies": {
+				"hookified": "^2.1.1"
+			},
+			"engines": {
+				"node": ">=20"
+			}
+		},
+		"node_modules/qified/node_modules/hookified": {
+			"version": "2.2.0",
+			"resolved": "https://registry.npmjs.org/hookified/-/hookified-2.2.0.tgz",
+			"integrity": "sha512-p/LgFzRN5FeoD3DLS6bkUapeye6E4SI6yJs6KetENd18S+FBthqYq2amJUWpt5z0EQwwHemidjY5OqJGEKm5uA==",
+			"dev": true
+		},
 		"node_modules/qs": {
 			"version": "6.15.2",
 			"resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz",
@@ -13448,7 +13478,6 @@
 			"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
 			"integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"core-util-is": "~1.0.0",
 				"inherits": "~2.0.1",
@@ -13460,8 +13489,7 @@
 			"version": "0.0.1",
 			"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
 			"integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
-			"dev": true,
-			"license": "MIT"
+			"dev": true
 		},
 		"node_modules/reflect.getprototypeof": {
 			"version": "1.0.10",
@@ -14019,11 +14047,10 @@
 			}
 		},
 		"node_modules/shell-quote": {
-			"version": "1.8.3",
-			"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz",
-			"integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==",
+			"version": "1.8.4",
+			"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.4.tgz",
+			"integrity": "sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==",
 			"dev": true,
-			"license": "MIT",
 			"engines": {
 				"node": ">= 0.4"
 			},
@@ -14334,15 +14361,13 @@
 			"version": "1.0.3",
 			"resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz",
 			"integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==",
-			"dev": true,
-			"license": "MIT"
+			"dev": true
 		},
 		"node_modules/string_decoder": {
 			"version": "0.10.31",
 			"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
 			"integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==",
-			"dev": true,
-			"license": "MIT"
+			"dev": true
 		},
 		"node_modules/string-length": {
 			"version": "4.0.2",
@@ -14543,8 +14568,7 @@
 			"version": "0.1.0",
 			"resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
 			"integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==",
-			"dev": true,
-			"license": "ISC"
+			"dev": true
 		},
 		"node_modules/stylelint": {
 			"version": "16.23.0",
@@ -14685,29 +14709,31 @@
 			}
 		},
 		"node_modules/stylelint-config-wikimedia": {
-			"version": "0.18.0",
-			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.18.0.tgz",
-			"integrity": "sha512-Lr45NIe7pG8i7BPcMc6EddO1pRK8/KNG8gp4o/oOG1Ez10hglJuJb/QT17BlzX8NPkhtP2KdY63NS2f/Wcj6Ww==",
+			"version": "0.19.2",
+			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.19.2.tgz",
+			"integrity": "sha512-GTz6SmNbbrjXJpEVussRBtsE2703BSUo5R4PRR3f+o1j1h6ngyyH3/qKJ7oZzlkRMHpJHVtAS9h1emIAvc/XWw==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
-				"@stylistic/stylelint-config": "2.0.0",
-				"@stylistic/stylelint-plugin": "3.1.1",
+				"@stylistic/stylelint-config": "5.0.0",
+				"@stylistic/stylelint-plugin": "5.1.0",
 				"browserslist-config-wikimedia": "0.7.0",
-				"postcss-html": "1.7.0",
+				"postcss-html": "1.8.1",
 				"postcss-less": "6.0.0",
-				"stylelint": "16.12.0",
-				"stylelint-config-recommended": "14.0.1",
-				"stylelint-no-unsupported-browser-features": "8.0.2"
+				"stylelint": "17.6.0",
+				"stylelint-config-recommended": "18.0.0",
+				"stylelint-no-unsupported-browser-features": "8.1.1"
+			},
+			"engines": {
+				"node": ">=20.19.0"
 			},
 			"peerDependencies": {
 				"postcss-less": "^6.0.0"
 			}
 		},
-		"node_modules/stylelint-config-wikimedia/node_modules/@csstools/selector-specificity": {
-			"version": "5.0.0",
-			"resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz",
-			"integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==",
+		"node_modules/stylelint-config-wikimedia/node_modules/@csstools/css-calc": {
+			"version": "3.2.1",
+			"resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.2.1.tgz",
+			"integrity": "sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg==",
 			"dev": true,
 			"funding": [
 				{
@@ -14719,115 +14745,373 @@
 					"url": "https://opencollective.com/csstools"
 				}
 			],
-			"license": "MIT-0",
 			"engines": {
-				"node": ">=18"
+				"node": ">=20.19.0"
 			},
 			"peerDependencies": {
-				"postcss-selector-parser": "^7.0.0"
+				"@csstools/css-parser-algorithms": "^4.0.0",
+				"@csstools/css-tokenizer": "^4.0.0"
 			}
 		},
-		"node_modules/stylelint-config-wikimedia/node_modules/balanced-match": {
-			"version": "2.0.0",
-			"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
-			"integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
-			"dev": true,
-			"license": "MIT"
-		},
-		"node_modules/stylelint-config-wikimedia/node_modules/css-tree": {
-			"version": "3.1.0",
-			"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz",
-			"integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==",
+		"node_modules/stylelint-config-wikimedia/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",
+			"integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==",
 			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"mdn-data": "2.12.2",
-				"source-map-js": "^1.0.1"
-			},
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
 			"engines": {
-				"node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+				"node": ">=20.19.0"
+			},
+			"peerDependencies": {
+				"@csstools/css-tokenizer": "^4.0.0"
 			}
 		},
-		"node_modules/stylelint-config-wikimedia/node_modules/file-entry-cache": {
-			"version": "9.1.0",
-			"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz",
-			"integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==",
+		"node_modules/stylelint-config-wikimedia/node_modules/@csstools/css-syntax-patches-for-csstree": {
+			"version": "1.1.5",
+			"resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.5.tgz",
+			"integrity": "sha512-oNjBvzLq2GPZtJphCjLqXow/cHySHSgtxvKZb7OqSZ/xHgw6NWNhfad+6AB9cLeVm6eA9d/qMll3JdEHjy6M+A==",
 			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"flat-cache": "^5.0.0"
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"peerDependencies": {
+				"css-tree": "^3.2.1"
 			},
-			"engines": {
-				"node": ">=18"
+			"peerDependenciesMeta": {
+				"css-tree": {
+					"optional": true
+				}
 			}
 		},
-		"node_modules/stylelint-config-wikimedia/node_modules/flat-cache": {
-			"version": "5.0.0",
-			"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz",
-			"integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==",
+		"node_modules/stylelint-config-wikimedia/node_modules/@csstools/css-tokenizer": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz",
+			"integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==",
 			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"flatted": "^3.3.1",
-				"keyv": "^4.5.4"
-			},
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
 			"engines": {
-				"node": ">=18"
+				"node": ">=20.19.0"
 			}
 		},
-		"node_modules/stylelint-config-wikimedia/node_modules/ignore": {
-			"version": "6.0.2",
-			"resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz",
-			"integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==",
+		"node_modules/stylelint-config-wikimedia/node_modules/@csstools/media-query-list-parser": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-5.0.0.tgz",
+			"integrity": "sha512-T9lXmZOfnam3eMERPsszjY5NK0jX8RmThmmm99FZ8b7z8yMaFZWKwLWGZuTwdO3ddRY5fy13GmmEYZXB4I98Eg==",
 			"dev": true,
-			"license": "MIT",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
 			"engines": {
-				"node": ">= 4"
+				"node": ">=20.19.0"
+			},
+			"peerDependencies": {
+				"@csstools/css-parser-algorithms": "^4.0.0",
+				"@csstools/css-tokenizer": "^4.0.0"
 			}
 		},
-		"node_modules/stylelint-config-wikimedia/node_modules/js-tokens": {
-			"version": "9.0.1",
-			"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz",
-			"integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==",
+		"node_modules/stylelint-config-wikimedia/node_modules/@csstools/selector-resolve-nested": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-4.0.0.tgz",
+			"integrity": "sha512-9vAPxmp+Dx3wQBIUwc1v7Mdisw1kbbaGqXUM8QLTgWg7SoPGYtXBsMXvsFs/0Bn5yoFhcktzxNZGNaUt0VjgjA==",
 			"dev": true,
-			"license": "MIT"
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"engines": {
+				"node": ">=20.19.0"
+			},
+			"peerDependencies": {
+				"postcss-selector-parser": "^7.1.1"
+			}
 		},
-		"node_modules/stylelint-config-wikimedia/node_modules/known-css-properties": {
-			"version": "0.35.0",
-			"resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.35.0.tgz",
-			"integrity": "sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==",
+		"node_modules/stylelint-config-wikimedia/node_modules/@csstools/selector-specificity": {
+			"version": "6.0.0",
+			"resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-6.0.0.tgz",
+			"integrity": "sha512-4sSgl78OtOXEX/2d++8A83zHNTgwCJMaR24FvsYL7Uf/VS8HZk9PTwR51elTbGqMuwH3szLvvOXEaVnqn0Z3zA==",
 			"dev": true,
-			"license": "MIT"
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"engines": {
+				"node": ">=20.19.0"
+			},
+			"peerDependencies": {
+				"postcss-selector-parser": "^7.1.1"
+			}
 		},
-		"node_modules/stylelint-config-wikimedia/node_modules/mdn-data": {
-			"version": "2.12.2",
-			"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz",
-			"integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==",
+		"node_modules/stylelint-config-wikimedia/node_modules/@stylistic/stylelint-config": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/@stylistic/stylelint-config/-/stylelint-config-5.0.0.tgz",
+			"integrity": "sha512-AW6S27wEm4DzB+uOZMvRkONIu0ba50VRbFte7qYJgGP4dacS8kAuj8HZJ+s+8kE4GK3XXBcSKLb75a+NfJlbiQ==",
 			"dev": true,
-			"license": "CC0-1.0"
+			"dependencies": {
+				"@stylistic/stylelint-plugin": "^5.1.0"
+			},
+			"engines": {
+				"node": ">=20.19.0"
+			},
+			"peerDependencies": {
+				"stylelint": "^17.6.0"
+			}
 		},
-		"node_modules/stylelint-config-wikimedia/node_modules/postcss-html": {
-			"version": "1.7.0",
-			"resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.7.0.tgz",
-			"integrity": "sha512-MfcMpSUIaR/nNgeVS8AyvyDugXlADjN9AcV7e5rDfrF1wduIAGSkL4q2+wgrZgA3sHVAHLDO9FuauHhZYW2nBw==",
+		"node_modules/stylelint-config-wikimedia/node_modules/@stylistic/stylelint-plugin": {
+			"version": "5.1.0",
+			"resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-5.1.0.tgz",
+			"integrity": "sha512-TFvKCbJUEWUYCD+rDv45qhnStO6nRtbBngaCblS2JGh8c95S3jJi3fIotfF6EDo4IVM15UPa65WP+kp6GNvXRA==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
-				"htmlparser2": "^8.0.0",
-				"js-tokens": "^9.0.0",
-				"postcss": "^8.4.0",
-				"postcss-safe-parser": "^6.0.0"
+				"@csstools/css-parser-algorithms": "^4.0.0",
+				"@csstools/css-tokenizer": "^4.0.0",
+				"@csstools/media-query-list-parser": "^5.0.0",
+				"postcss": "^8.5.8",
+				"postcss-selector-parser": "^7.1.1",
+				"postcss-value-parser": "^4.2.0",
+				"style-search": "^0.1.0"
 			},
 			"engines": {
-				"node": "^12 || >=14"
+				"node": ">=20.19.0"
+			},
+			"peerDependencies": {
+				"stylelint": "^17.6.0"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/ansi-regex": {
+			"version": "6.2.2",
+			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+			"integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+			"dev": true,
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/ansi-regex?sponsor=1"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/cacheable": {
+			"version": "2.3.5",
+			"resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.3.5.tgz",
+			"integrity": "sha512-EQfaKe09tl615iNvq/TBRWTFf1AKJNXYQSsMx0Z3EI0nA+pVsVPS8wJhnRlkbdacKPh1d0qVIhwTc2zsQNFEEg==",
+			"dev": true,
+			"dependencies": {
+				"@cacheable/memory": "^2.0.8",
+				"@cacheable/utils": "^2.4.1",
+				"hookified": "^1.15.0",
+				"keyv": "^5.6.0",
+				"qified": "^0.10.1"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/css-tree": {
+			"version": "3.2.1",
+			"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz",
+			"integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==",
+			"dev": true,
+			"dependencies": {
+				"mdn-data": "2.27.1",
+				"source-map-js": "^1.2.1"
+			},
+			"engines": {
+				"node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/file-entry-cache": {
+			"version": "11.1.3",
+			"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-11.1.3.tgz",
+			"integrity": "sha512-oMbq0PD6VIiIwMF6LIa7MEwd/l9huKwmqRKXqmrkqIZv8CvRbfowL+L0ryAl8h//HfAS0zS+4SbYoRyAoA6BJA==",
+			"dev": true,
+			"dependencies": {
+				"flat-cache": "^6.1.22"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/flat-cache": {
+			"version": "6.1.22",
+			"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.22.tgz",
+			"integrity": "sha512-N2dnzVJIphnNsjHcrxGW7DePckJ6haPrSFqpsBUhHYgwtKGVq4JrBGielEGD2fCVnsGm1zlBVZ8wGhkyuetgug==",
+			"dev": true,
+			"dependencies": {
+				"cacheable": "^2.3.4",
+				"flatted": "^3.4.2",
+				"hookified": "^1.15.0"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/globby": {
+			"version": "16.2.0",
+			"resolved": "https://registry.npmjs.org/globby/-/globby-16.2.0.tgz",
+			"integrity": "sha512-QrJia2qDf5BB/V6HYlDTs0I0lBahyjLzpGQg3KT7FnCdTonAyPy2RtY802m2k4ALx6Dp752f82WsOczEVr3l6Q==",
+			"dev": true,
+			"dependencies": {
+				"@sindresorhus/merge-streams": "^4.0.0",
+				"fast-glob": "^3.3.3",
+				"ignore": "^7.0.5",
+				"is-path-inside": "^4.0.0",
+				"slash": "^5.1.0",
+				"unicorn-magic": "^0.4.0"
+			},
+			"engines": {
+				"node": ">=20"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/has-flag": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-5.0.1.tgz",
+			"integrity": "sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==",
+			"dev": true,
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/html-tags": {
+			"version": "5.1.0",
+			"resolved": "https://registry.npmjs.org/html-tags/-/html-tags-5.1.0.tgz",
+			"integrity": "sha512-n6l5uca7/y5joxZ3LUePhzmBFUJ+U2YWzhMa8XUTecSeSlQiZdF5XAd/Q3/WUl0VsXgUwWi8I7CNIwdI5WN1SQ==",
+			"dev": true,
+			"engines": {
+				"node": ">=20.10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/ignore": {
+			"version": "7.0.5",
+			"resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+			"integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+			"dev": true,
+			"engines": {
+				"node": ">= 4"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/is-path-inside": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz",
+			"integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==",
+			"dev": true,
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/keyv": {
+			"version": "5.6.0",
+			"resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz",
+			"integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==",
+			"dev": true,
+			"dependencies": {
+				"@keyv/serialize": "^1.1.1"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/mathml-tag-names": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-4.0.0.tgz",
+			"integrity": "sha512-aa6AU2Pcx0VP/XWnh8IGL0SYSgQHDT6Ucror2j2mXeFAlN3ahaNs8EZtG1YiticMkSLj3Gt6VPFfZogt7G5iFQ==",
+			"dev": true,
+			"funding": {
+				"type": "github",
+				"url": "https://github.com/sponsors/wooorm"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/mdn-data": {
+			"version": "2.27.1",
+			"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz",
+			"integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==",
+			"dev": true
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/meow": {
+			"version": "14.1.0",
+			"resolved": "https://registry.npmjs.org/meow/-/meow-14.1.0.tgz",
+			"integrity": "sha512-EDYo6VlmtnumlcBCbh1gLJ//9jvM/ndXHfVXIFrZVr6fGcwTUyCTFNTLCKuY3ffbK8L/+3Mzqnd58RojiZqHVw==",
+			"dev": true,
+			"engines": {
+				"node": ">=20"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/postcss-safe-parser": {
+			"version": "7.0.1",
+			"resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz",
+			"integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==",
+			"dev": true,
+			"funding": [
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/postcss/"
+				},
+				{
+					"type": "tidelift",
+					"url": "https://tidelift.com/funding/github/npm/postcss-safe-parser"
+				},
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/ai"
+				}
+			],
+			"engines": {
+				"node": ">=18.0"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4.31"
 			}
 		},
 		"node_modules/stylelint-config-wikimedia/node_modules/postcss-selector-parser": {
-			"version": "7.1.0",
-			"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
-			"integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
+			"version": "7.1.4",
+			"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz",
+			"integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"cssesc": "^3.0.0",
 				"util-deprecate": "^1.0.2"
@@ -14841,7 +15125,6 @@
 			"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
 			"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
 			"dev": true,
-			"license": "ISC",
 			"engines": {
 				"node": ">=14"
 			},
@@ -14849,10 +15132,53 @@
 				"url": "https://github.com/sponsors/isaacs"
 			}
 		},
+		"node_modules/stylelint-config-wikimedia/node_modules/slash": {
+			"version": "5.1.0",
+			"resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+			"integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
+			"dev": true,
+			"engines": {
+				"node": ">=14.16"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/string-width": {
+			"version": "8.2.1",
+			"resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.1.tgz",
+			"integrity": "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==",
+			"dev": true,
+			"dependencies": {
+				"get-east-asian-width": "^1.5.0",
+				"strip-ansi": "^7.1.2"
+			},
+			"engines": {
+				"node": ">=20"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/strip-ansi": {
+			"version": "7.2.0",
+			"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
+			"integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
+			"dev": true,
+			"dependencies": {
+				"ansi-regex": "^6.2.2"
+			},
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/strip-ansi?sponsor=1"
+			}
+		},
 		"node_modules/stylelint-config-wikimedia/node_modules/stylelint": {
-			"version": "16.12.0",
-			"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.12.0.tgz",
-			"integrity": "sha512-F8zZ3L/rBpuoBZRvI4JVT20ZanPLXfQLzMOZg1tzPflRVh9mKpOZ8qcSIhh1my3FjAjZWG4T2POwGnmn6a6hbg==",
+			"version": "17.6.0",
+			"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-17.6.0.tgz",
+			"integrity": "sha512-tokrsMIVAR9vAQ/q3UVEr7S0dGXCi7zkCezPRnS2kqPUulvUh5Vgfwngrk4EoAoW7wnrThqTdnTFN5Ra7CaxIg==",
 			"dev": true,
 			"funding": [
 				{
@@ -14864,58 +15190,55 @@
 					"url": "https://github.com/sponsors/stylelint"
 				}
 			],
-			"license": "MIT",
 			"dependencies": {
-				"@csstools/css-parser-algorithms": "^3.0.4",
-				"@csstools/css-tokenizer": "^3.0.3",
-				"@csstools/media-query-list-parser": "^4.0.2",
-				"@csstools/selector-specificity": "^5.0.0",
-				"@dual-bundle/import-meta-resolve": "^4.1.0",
-				"balanced-match": "^2.0.0",
+				"@csstools/css-calc": "^3.1.1",
+				"@csstools/css-parser-algorithms": "^4.0.0",
+				"@csstools/css-syntax-patches-for-csstree": "^1.1.1",
+				"@csstools/css-tokenizer": "^4.0.0",
+				"@csstools/media-query-list-parser": "^5.0.0",
+				"@csstools/selector-resolve-nested": "^4.0.0",
+				"@csstools/selector-specificity": "^6.0.0",
 				"colord": "^2.9.3",
-				"cosmiconfig": "^9.0.0",
-				"css-functions-list": "^3.2.3",
-				"css-tree": "^3.0.1",
-				"debug": "^4.3.7",
-				"fast-glob": "^3.3.2",
+				"cosmiconfig": "^9.0.1",
+				"css-functions-list": "^3.3.3",
+				"css-tree": "^3.2.1",
+				"debug": "^4.4.3",
+				"fast-glob": "^3.3.3",
 				"fastest-levenshtein": "^1.0.16",
-				"file-entry-cache": "^9.1.0",
+				"file-entry-cache": "^11.1.2",
 				"global-modules": "^2.0.0",
-				"globby": "^11.1.0",
+				"globby": "^16.1.1",
 				"globjoin": "^0.1.4",
-				"html-tags": "^3.3.1",
-				"ignore": "^6.0.2",
-				"imurmurhash": "^0.1.4",
+				"html-tags": "^5.1.0",
+				"ignore": "^7.0.5",
+				"import-meta-resolve": "^4.2.0",
 				"is-plain-object": "^5.0.0",
-				"known-css-properties": "^0.35.0",
-				"mathml-tag-names": "^2.1.3",
-				"meow": "^13.2.0",
+				"mathml-tag-names": "^4.0.0",
+				"meow": "^14.1.0",
 				"micromatch": "^4.0.8",
 				"normalize-path": "^3.0.0",
 				"picocolors": "^1.1.1",
-				"postcss": "^8.4.49",
-				"postcss-resolve-nested-selector": "^0.1.6",
+				"postcss": "^8.5.8",
 				"postcss-safe-parser": "^7.0.1",
-				"postcss-selector-parser": "^7.0.0",
+				"postcss-selector-parser": "^7.1.1",
 				"postcss-value-parser": "^4.2.0",
-				"resolve-from": "^5.0.0",
-				"string-width": "^4.2.3",
-				"supports-hyperlinks": "^3.1.0",
+				"string-width": "^8.2.0",
+				"supports-hyperlinks": "^4.4.0",
 				"svg-tags": "^1.0.0",
 				"table": "^6.9.0",
-				"write-file-atomic": "^5.0.1"
+				"write-file-atomic": "^7.0.1"
 			},
 			"bin": {
 				"stylelint": "bin/stylelint.mjs"
 			},
 			"engines": {
-				"node": ">=18.12.0"
+				"node": ">=20.19.0"
 			}
 		},
 		"node_modules/stylelint-config-wikimedia/node_modules/stylelint-config-recommended": {
-			"version": "14.0.1",
-			"resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.1.tgz",
-			"integrity": "sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==",
+			"version": "18.0.0",
+			"resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-18.0.0.tgz",
+			"integrity": "sha512-mxgT2XY6YZ3HWWe3Di8umG6aBmWmHTblTgu/f10rqFXnyWxjKWwNdjSWkgkwCtxIKnqjSJzvFmPT5yabVIRxZg==",
 			"dev": true,
 			"funding": [
 				{
@@ -14927,70 +15250,68 @@
 					"url": "https://github.com/sponsors/stylelint"
 				}
 			],
-			"license": "MIT",
 			"engines": {
-				"node": ">=18.12.0"
+				"node": ">=20.19.0"
 			},
 			"peerDependencies": {
-				"stylelint": "^16.1.0"
+				"stylelint": "^17.0.0"
 			}
 		},
-		"node_modules/stylelint-config-wikimedia/node_modules/stylelint/node_modules/postcss-safe-parser": {
-			"version": "7.0.1",
-			"resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz",
-			"integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==",
+		"node_modules/stylelint-config-wikimedia/node_modules/supports-color": {
+			"version": "10.2.2",
+			"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz",
+			"integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==",
 			"dev": true,
-			"funding": [
-				{
-					"type": "opencollective",
-					"url": "https://opencollective.com/postcss/"
-				},
-				{
-					"type": "tidelift",
-					"url": "https://tidelift.com/funding/github/npm/postcss-safe-parser"
-				},
-				{
-					"type": "github",
-					"url": "https://github.com/sponsors/ai"
-				}
-			],
-			"license": "MIT",
 			"engines": {
-				"node": ">=18.0"
+				"node": ">=18"
 			},
-			"peerDependencies": {
-				"postcss": "^8.4.31"
+			"funding": {
+				"url": "https://github.com/chalk/supports-color?sponsor=1"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/supports-hyperlinks": {
+			"version": "4.4.0",
+			"resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-4.4.0.tgz",
+			"integrity": "sha512-UKbpT93hN5Nr9go5UY7bopIB9YQlMz9nm/ct4IXt/irb5YRkn9WaqrOBJGZ5Pwvsd5FQzSVeYlGdXoCAPQZrPg==",
+			"dev": true,
+			"dependencies": {
+				"has-flag": "^5.0.1",
+				"supports-color": "^10.2.2"
+			},
+			"engines": {
+				"node": ">=20"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/supports-hyperlinks?sponsor=1"
 			}
 		},
 		"node_modules/stylelint-config-wikimedia/node_modules/write-file-atomic": {
-			"version": "5.0.1",
-			"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
-			"integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
+			"version": "7.0.1",
+			"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-7.0.1.tgz",
+			"integrity": "sha512-OTIk8iR8/aCRWBqvxrzxR0hgxWpnYBblY1S5hDWBQfk/VFmJwzmJgQFN3WsoUKHISv2eAwe+PpbUzyL1CKTLXg==",
 			"dev": true,
-			"license": "ISC",
 			"dependencies": {
-				"imurmurhash": "^0.1.4",
 				"signal-exit": "^4.0.1"
 			},
 			"engines": {
-				"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+				"node": "^20.17.0 || >=22.9.0"
 			}
 		},
 		"node_modules/stylelint-no-unsupported-browser-features": {
-			"version": "8.0.2",
-			"resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-8.0.2.tgz",
-			"integrity": "sha512-4PY2qJ3ZTEje9RgGfaQ82eJoPioXxs6hazeKpji/wzLNVzTX2wd4b0Ds3ewdLkH3ID+o63IInuTquU2MNJO3YQ==",
+			"version": "8.1.1",
+			"resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-8.1.1.tgz",
+			"integrity": "sha512-sLEe6NUFoWL2vGt6IKKllQEKfKgVxmvTBFs1JVMHKKLWzxtWAXaqSxJvH+j0URM4vLQQqzC/wXc9Kp3XBNKdBw==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
-				"doiuse": "^6.0.5",
+				"browserslist": "^4.26.3",
+				"doiuse": "^6.0.6",
 				"postcss": "^8.4.32"
 			},
 			"engines": {
 				"node": ">=18.12.0"
 			},
 			"peerDependencies": {
-				"stylelint": "^16.0.2"
+				"stylelint": ">=16.0.2"
 			}
 		},
 		"node_modules/stylelint/node_modules/@csstools/selector-specificity": {
@@ -15821,6 +16142,18 @@
 				"node": ">=4"
 			}
 		},
+		"node_modules/unicorn-magic": {
+			"version": "0.4.0",
+			"resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz",
+			"integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==",
+			"dev": true,
+			"engines": {
+				"node": ">=20"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
 		"node_modules/universalify": {
 			"version": "2.0.1",
 			"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
diff --git a/package.json b/package.json
index 6c84b04..70ed0ed 100644
--- a/package.json
+++ b/package.json
@@ -23,7 +23,7 @@
 		"@vue/compiler-dom": "3.4.19",
 		"@vue/test-utils": "2.4.6",
 		"@vue/vue3-jest": "29.2.6",
-		"@wikimedia/codex": "2.4.0",
+		"@wikimedia/codex": "2.6.0",
 		"api-testing": "1.7.3",
 		"cypress": "^15.11.0",
 		"eslint-config-wikimedia": "0.32.4",
@@ -36,7 +36,7 @@
 		"npm-run-all": "4.1.5",
 		"stylelint": "16.23.0",
 		"stylelint-config-recommended-vue": "^1.5.0",
-		"stylelint-config-wikimedia": "0.18.0",
+		"stylelint-config-wikimedia": "0.19.2",
 		"typescript": "5.8.3",
 		"vue": "3.5.13"
 	},
diff --git a/resources/ext.communityConfiguration.Editor.common/components/__snapshots__/ClientErrorMessage.test.js.snap b/resources/ext.communityConfiguration.Editor.common/components/__snapshots__/ClientErrorMessage.test.js.snap
index 247e318..85ccb4a 100644
--- a/resources/ext.communityConfiguration.Editor.common/components/__snapshots__/ClientErrorMessage.test.js.snap
+++ b/resources/ext.communityConfiguration.Editor.common/components/__snapshots__/ClientErrorMessage.test.js.snap
@@ -25,7 +25,7 @@ exports[`ClientErrorMessage matches snapshot 1`] = `
         <!--v-if-->
         <g>
           <path
-            d="M13.728 1H6.272L1 6.272v7.456L6.272 19h7.456L19 13.728V6.272zM11 15H9v-2h2zm0-4H9V5h2z"
+            d="M19 6.4v7.199L13.6 19H6.4L1 13.599v-7.2L6.4 1h7.2zM9 14v2h2v-2zm0-9v7h2V5z"
           />
         </g>
       </svg>
@@ -72,10 +72,7 @@ exports[`ClientErrorMessage matches snapshot 1`] = `
           <!--v-if-->
           <g>
             <path
-              d="m4.34 2.93 12.73 12.73-1.41 1.41L2.93 4.35z"
-            />
-            <path
-              d="M17.07 4.34 4.34 17.07l-1.41-1.41L15.66 2.93z"
+              d="M16.707 4.707 11.414 10l5.293 5.293-1.414 1.414L10 11.414l-5.293 5.293-1.414-1.414L8.586 10 3.293 4.707l1.414-1.414L10 8.586l5.293-5.293z"
             />
           </g>
         </svg>
-- 
2.47.3

$ date
--- stdout ---
Sun Jun 14 04:31:20 UTC 2026

--- end ---
$ git clone file:///srv/git/mediawiki-extensions-CommunityConfiguration.git /src/repo --depth=1 -b master
--- stderr ---
Cloning into '/src/repo'...
--- stdout ---

--- end ---
$ git config user.name libraryupgrader
--- stdout ---

--- end ---
$ git config user.email tools.libraryupgrader@tools.wmflabs.org
--- stdout ---

--- end ---
$ git submodule update --init
--- stdout ---

--- end ---
$ grr init
--- stdout ---
Installed commit-msg hook.

--- end ---
$ git show-ref refs/heads/master
--- stdout ---
4e5322e2a05f3c6ddf810316b3ca1272952f8de5 refs/heads/master

--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "shell-quote": {
      "name": "shell-quote",
      "severity": "critical",
      "isDirect": false,
      "via": [
        {
          "source": 1120422,
          "name": "shell-quote",
          "dependency": "shell-quote",
          "title": "shell-quote quote() does not escape newlines in object .op values",
          "url": "https://github.com/advisories/GHSA-w7jw-789q-3m8p",
          "severity": "critical",
          "cwe": [
            "CWE-77",
            "CWE-78"
          ],
          "cvss": {
            "score": 8.1,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H"
          },
          "range": ">=1.1.0 <=1.8.3"
        }
      ],
      "effects": [],
      "range": "1.1.0 - 1.8.3",
      "nodes": [
        "node_modules/shell-quote"
      ],
      "fixAvailable": true
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 0,
      "moderate": 0,
      "high": 0,
      "critical": 1,
      "total": 1
    },
    "dependencies": {
      "prod": 1,
      "dev": 1210,
      "optional": 5,
      "peer": 42,
      "peerOptional": 0,
      "total": 1210
    }
  }
}

--- end ---
$ /usr/bin/composer install
--- stderr ---
No composer.lock file present. Updating dependencies to latest instead of installing from lock file. See https://getcomposer.org/install for more information.
Loading composer repositories with package information
Updating dependencies
Lock file operations: 38 installs, 0 updates, 0 removals
  - Locking composer/pcre (3.4.0)
  - Locking composer/semver (3.4.4)
  - Locking composer/spdx-licenses (1.6.0)
  - Locking composer/xdebug-handler (3.0.5)
  - Locking danog/advanced-json-rpc (v3.2.3)
  - Locking dealerdirect/phpcodesniffer-composer-installer (v1.2.1)
  - Locking doctrine/deprecations (1.1.6)
  - Locking mediawiki/mediawiki-codesniffer (v51.0.0)
  - Locking mediawiki/mediawiki-phan-config (0.20.0)
  - Locking mediawiki/minus-x (2.0.1)
  - Locking mediawiki/phan-taint-check-plugin (9.1.0)
  - Locking netresearch/jsonmapper (v5.0.1)
  - Locking phan/phan (6.0.2)
  - Locking phan/tolerant-php-parser (v0.2.0)
  - Locking phan/var_representation_polyfill (0.1.4)
  - Locking php-parallel-lint/php-console-color (v1.0.1)
  - Locking php-parallel-lint/php-console-highlighter (v1.0.0)
  - Locking php-parallel-lint/php-parallel-lint (v1.4.0)
  - Locking phpcsstandards/phpcsextra (1.5.0)
  - Locking phpcsstandards/phpcsutils (1.2.2)
  - Locking phpdocumentor/reflection-common (2.2.0)
  - Locking phpdocumentor/reflection-docblock (6.0.3)
  - Locking phpdocumentor/type-resolver (2.0.0)
  - Locking phpstan/phpdoc-parser (2.3.2)
  - Locking psr/container (2.0.2)
  - Locking psr/log (3.0.2)
  - Locking sabre/event (6.1.0)
  - Locking squizlabs/php_codesniffer (3.13.5)
  - Locking symfony/console (v8.1.0)
  - Locking symfony/deprecation-contracts (v3.7.0)
  - Locking symfony/polyfill-ctype (v1.37.0)
  - Locking symfony/polyfill-intl-grapheme (v1.38.1)
  - Locking symfony/polyfill-intl-normalizer (v1.38.0)
  - Locking symfony/polyfill-mbstring (v1.38.2)
  - Locking symfony/polyfill-php85 (v1.38.1)
  - Locking symfony/service-contracts (v3.7.0)
  - Locking symfony/string (v8.1.0)
  - Locking webmozart/assert (2.4.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 38 installs, 0 updates, 0 removals
    0 [>---------------------------]    0 [->--------------------------]
  - Installing squizlabs/php_codesniffer (3.13.5): Extracting archive
  - Installing dealerdirect/phpcodesniffer-composer-installer (v1.2.1): Extracting archive
  - Installing composer/pcre (3.4.0): Extracting archive
  - Installing phpcsstandards/phpcsutils (1.2.2): Extracting archive
  - Installing phpcsstandards/phpcsextra (1.5.0): Extracting archive
  - Installing symfony/polyfill-mbstring (v1.38.2): Extracting archive
  - Installing composer/spdx-licenses (1.6.0): Extracting archive
  - Installing composer/semver (3.4.4): Extracting archive
  - Installing mediawiki/mediawiki-codesniffer (v51.0.0): Extracting archive
  - Installing symfony/polyfill-intl-normalizer (v1.38.0): Extracting archive
  - Installing symfony/polyfill-intl-grapheme (v1.38.1): Extracting archive
  - Installing symfony/polyfill-ctype (v1.37.0): Extracting archive
  - Installing symfony/string (v8.1.0): Extracting archive
  - Installing symfony/deprecation-contracts (v3.7.0): Extracting archive
  - Installing psr/container (2.0.2): Extracting archive
  - Installing symfony/service-contracts (v3.7.0): Extracting archive
  - Installing symfony/polyfill-php85 (v1.38.1): Extracting archive
  - Installing symfony/console (v8.1.0): Extracting archive
  - Installing sabre/event (6.1.0): Extracting archive
  - Installing phan/var_representation_polyfill (0.1.4): Extracting archive
  - Installing phan/tolerant-php-parser (v0.2.0): Extracting archive
  - Installing netresearch/jsonmapper (v5.0.1): Extracting archive
  - Installing webmozart/assert (2.4.0): Extracting archive
  - Installing phpstan/phpdoc-parser (2.3.2): Extracting archive
  - Installing phpdocumentor/reflection-common (2.2.0): Extracting archive
  - Installing doctrine/deprecations (1.1.6): Extracting archive
  - Installing phpdocumentor/type-resolver (2.0.0): Extracting archive
  - Installing phpdocumentor/reflection-docblock (6.0.3): Extracting archive
  - Installing danog/advanced-json-rpc (v3.2.3): Extracting archive
  - Installing psr/log (3.0.2): Extracting archive
  - Installing composer/xdebug-handler (3.0.5): Extracting archive
  - Installing phan/phan (6.0.2): Extracting archive
  - Installing mediawiki/phan-taint-check-plugin (9.1.0): Extracting archive
  - Installing mediawiki/mediawiki-phan-config (0.20.0): Extracting archive
  - Installing mediawiki/minus-x (2.0.1): Extracting archive
  - Installing php-parallel-lint/php-console-color (v1.0.1): Extracting archive
  - Installing php-parallel-lint/php-console-highlighter (v1.0.0): Extracting archive
  - Installing php-parallel-lint/php-parallel-lint (v1.4.0): Extracting archive
  0/36 [>---------------------------]   0%
 29/36 [======================>-----]  80%
 36/36 [============================] 100%
1 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
17 packages you are using are looking for funding.
Use the `composer fund` command to find out more!
--- stdout ---
PHP CodeSniffer Config installed_paths set to ../../mediawiki/mediawiki-codesniffer,../../phpcsstandards/phpcsextra,../../phpcsstandards/phpcsutils

--- end ---
Upgrading n:stylelint-config-wikimedia from 0.18.0 -> 0.19.2
Upgrading n:@wikimedia/codex from 2.4.0 -> 2.6.0
$ /usr/bin/npm install
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex@2.6.0',
npm WARN EBADENGINE   required: { npm: '>=10.8.2', node: '>=20.20.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-icons@2.6.0',
npm WARN EBADENGINE   required: { npm: '>=10.8.2', node: '>=20.20.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm WARN deprecated @humanwhocodes/config-array@0.11.14: Use @eslint/config-array instead
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated abab@2.0.6: Use your platform's native atob() and btoa() methods instead
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated domexception@4.0.0: Use your platform's native DOMException instead
npm WARN deprecated eslint@8.57.0: This version is no longer supported. Please see https://eslint.org/version-support for other options.
--- stdout ---

added 1235 packages, and audited 1236 packages in 38s

265 packages are looking for funding
  run `npm fund` for details

1 critical severity vulnerability

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

--- end ---
$ package-lock-lint /src/repo/package-lock.json
--- stdout ---
Checking /src/repo/package-lock.json

--- end ---
$ ./node_modules/.bin/stylelint resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/ObjectControl.vue resources/ext.communityConfiguration.Editor/lib/json-form/form/components/FormLayout.vue resources/ext.communityConfiguration.Editor.common/components/ValidationErrorMessage.vue resources/ext.communityConfiguration.Editor/styles/bootstrap.less resources/ext.communityConfiguration.Editor.common/components/ClientErrorMessage.vue resources/ext.communityConfiguration.Editor.common/components/PermissionsErrorMessage.vue resources/ext.communityConfiguration.Editor.common/components/SuccessMessage.vue resources/ext.communityConfiguration.Editor/app/App.vue resources/ext.communityConfiguration.Editor.common/components/MissingPermissionsNoticeMessage.vue resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/controls/ControlWrapper.vue resources/ext.communityConfiguration.Dashboard/Features.less resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/controls/StringControl.vue resources/ext.communityConfiguration.Editor.common/components/EditorMessage.vue resources/ext.communityConfiguration.Editor.common/components/GenericSubmitErrorMessage.vue resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/controls/NumberControl.vue resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/NamespacesControl.vue resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/PageTitleControl.vue resources/ext.communityConfiguration.Editor/lib/json-form/form/components/JsonForm.vue resources/ext.communityConfiguration.Editor.common/components/EditSummaryDialog.vue resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/controls/BooleanControl.vue resources/ext.communityConfiguration.Editor/lib/json-form/form/components/DispatchRenderer.vue resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/ArrayControl.vue resources/ext.communityConfiguration.Dashboard/Guidelines.less resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/EnumControl.vue resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/CommonsFileControl.vue resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/MultiselectEnumControl.vue resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/ChipStringsControl.vue resources/ext.communityConfiguration.Editor.common/components/NetworkErrorMessage.vue resources/ext.communityConfiguration.Dashboard/variables.less resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/PageTitlesControl.vue --fix
--- stdout ---

--- end ---
$ ./node_modules/.bin/stylelint resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/ObjectControl.vue resources/ext.communityConfiguration.Editor/lib/json-form/form/components/FormLayout.vue resources/ext.communityConfiguration.Editor.common/components/ValidationErrorMessage.vue resources/ext.communityConfiguration.Editor/styles/bootstrap.less resources/ext.communityConfiguration.Editor.common/components/ClientErrorMessage.vue resources/ext.communityConfiguration.Editor.common/components/PermissionsErrorMessage.vue resources/ext.communityConfiguration.Editor.common/components/SuccessMessage.vue resources/ext.communityConfiguration.Editor/app/App.vue resources/ext.communityConfiguration.Editor.common/components/MissingPermissionsNoticeMessage.vue resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/controls/ControlWrapper.vue resources/ext.communityConfiguration.Dashboard/Features.less resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/controls/StringControl.vue resources/ext.communityConfiguration.Editor.common/components/EditorMessage.vue resources/ext.communityConfiguration.Editor.common/components/GenericSubmitErrorMessage.vue resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/controls/NumberControl.vue resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/NamespacesControl.vue resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/PageTitleControl.vue resources/ext.communityConfiguration.Editor/lib/json-form/form/components/JsonForm.vue resources/ext.communityConfiguration.Editor.common/components/EditSummaryDialog.vue resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/controls/BooleanControl.vue resources/ext.communityConfiguration.Editor/lib/json-form/form/components/DispatchRenderer.vue resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/ArrayControl.vue resources/ext.communityConfiguration.Dashboard/Guidelines.less resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/EnumControl.vue resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/CommonsFileControl.vue resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/MultiselectEnumControl.vue resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/ChipStringsControl.vue resources/ext.communityConfiguration.Editor.common/components/NetworkErrorMessage.vue resources/ext.communityConfiguration.Dashboard/variables.less resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/PageTitlesControl.vue -f json
--- stdout ---
[{"source":"/src/repo/resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/ObjectControl.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Editor/lib/json-form/form/components/FormLayout.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Editor.common/components/ValidationErrorMessage.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Editor/styles/bootstrap.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Editor.common/components/ClientErrorMessage.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Editor.common/components/PermissionsErrorMessage.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Editor.common/components/SuccessMessage.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Editor/app/App.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Editor.common/components/MissingPermissionsNoticeMessage.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/controls/ControlWrapper.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Dashboard/Features.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/controls/StringControl.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Editor.common/components/EditorMessage.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Editor.common/components/GenericSubmitErrorMessage.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/controls/NumberControl.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/NamespacesControl.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/PageTitleControl.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Editor/lib/json-form/form/components/JsonForm.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Editor.common/components/EditSummaryDialog.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/controls/BooleanControl.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Editor/lib/json-form/form/components/DispatchRenderer.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/ArrayControl.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Dashboard/Guidelines.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/EnumControl.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/CommonsFileControl.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/MultiselectEnumControl.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/ChipStringsControl.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Editor.common/components/NetworkErrorMessage.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Dashboard/variables.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/PageTitlesControl.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]}]
--- end ---
$ /usr/bin/npm ci
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex@2.6.0',
npm WARN EBADENGINE   required: { node: '>=20.20.2', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-icons@2.6.0',
npm WARN EBADENGINE   required: { node: '>=20.20.2', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm WARN deprecated @humanwhocodes/config-array@0.11.14: Use @eslint/config-array instead
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated abab@2.0.6: Use your platform's native atob() and btoa() methods instead
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated domexception@4.0.0: Use your platform's native DOMException instead
npm WARN deprecated eslint@8.57.0: This version is no longer supported. Please see https://eslint.org/version-support for other options.
--- stdout ---

added 1235 packages, and audited 1236 packages in 22s

265 packages are looking for funding
  run `npm fund` for details

1 critical severity vulnerability

To address all issues, run:
  npm audit fix

Run `npm audit` for details.

--- end ---
$ /usr/bin/npm test
--- stderr ---
PASS resources/ext.communityConfiguration.Editor/lib/json-form/core/__tests__/i18n.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/PageTitleControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/NamespacesControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/core/__tests__/uischema.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/ArrayControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/controls/StringControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/EnumControl.test.js
PASS resources/ext.communityConfiguration.Editor/app/App.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/form/composables/useJsonForm.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/MultiselectEnumControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/controls/BooleanControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/controls/NumberControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/api.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/PageTitlesControl.test.js
FAIL resources/ext.communityConfiguration.Editor.common/components/ClientErrorMessage.test.js
  ● ClientErrorMessage › matches snapshot

    expect(received).toMatchSnapshot()

    Snapshot name: `ClientErrorMessage matches snapshot 1`

    - Snapshot  - 5
    + Received  + 2

    @@ -20,11 +20,11 @@
              xmlns="http://www.w3.org/2000/svg"
            >
              <!--v-if-->
              <g>
                <path
    -             d="M13.728 1H6.272L1 6.272v7.456L6.272 19h7.456L19 13.728V6.272zM11 15H9v-2h2zm0-4H9V5h2z"
    +             d="M19 6.4v7.199L13.6 19H6.4L1 13.599v-7.2L6.4 1h7.2zM9 14v2h2v-2zm0-9v7h2V5z"
                />
              </g>
            </svg>
          </span>
          <div
    @@ -67,14 +67,11 @@
                xmlns="http://www.w3.org/2000/svg"
              >
                <!--v-if-->
                <g>
                  <path
    -               d="m4.34 2.93 12.73 12.73-1.41 1.41L2.93 4.35z"
    -             />
    -             <path
    -               d="M17.07 4.34 4.34 17.07l-1.41-1.41L15.66 2.93z"
    +               d="M16.707 4.707 11.414 10l5.293 5.293-1.414 1.414L10 11.414l-5.293 5.293-1.414-1.414L8.586 10 3.293 4.707l1.414-1.414L10 8.586l5.293-5.293z"
                  />
                </g>
              </svg>
            </span>

      20 | 		} );
      21 |
    > 22 | 		expect( wrapper.element ).toMatchSnapshot();
         | 		                          ^
      23 | 	} );
      24 | } );
      25 |

              
      at Object.<anonymous> (resources/ext.communityConfiguration.Editor.common/components/ClientErrorMessage.test.js:22:29)

 › 1 snapshot failed.
Snapshot Summary
 › 1 snapshot failed from 1 test suite. Inspect your code changes or run `npm run test:jest -- -u` to update them.

Test Suites: 1 failed, 1 skipped, 14 passed, 15 of 16 total
Tests:       1 failed, 12 skipped, 68 passed, 81 total
Snapshots:   1 failed, 1 total
Time:        7.067 s
Ran all test suites.
ERROR: "test:jest" exited with 1.
--- stdout ---

> test
> npm-run-all test:*


> test:lint
> eslint --cache --max-warnings 0 .


> test:types
> tsc --noEmit -p cypress/tsconfig.json


> test:lintcss
> stylelint --cache "**/*.{css,less,vue}"


> test:linti18n
> banana-checker i18n/

Checked 1 message directory.

> test:jest
> jest

--------------------------------------------------|---------|----------|---------|---------|---------------------------------------
File                                              | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s                     
--------------------------------------------------|---------|----------|---------|---------|---------------------------------------
All files                                         |   80.69 |    67.54 |   77.95 |   80.54 |                                       
 app                                              |   58.26 |    72.34 |      50 |   58.26 |                                       
  App.vue                                         |   84.81 |    82.92 |   73.33 |   84.81 | 71,79,97,135-136,166-177,251-255      
  MwApiCommunityConfigurationWritingRepository.js |       0 |      100 |       0 |       0 | 1-15                                  
  init.js                                         |       0 |        0 |       0 |       0 | 1-66                                  
 lib/json-form/controls-codex/config              |     100 |      100 |     100 |     100 |                                       
  index.js                                        |     100 |      100 |     100 |     100 |                                       
 lib/json-form/controls-codex/src                 |     100 |      100 |     100 |     100 |                                       
  index.js                                        |     100 |      100 |     100 |     100 |                                       
  utils.js                                        |     100 |      100 |     100 |     100 |                                       
 lib/json-form/controls-codex/src/complex         |   91.56 |    80.76 |   82.69 |   92.35 |                                       
  ArrayControl.vue                                |     100 |       70 |     100 |     100 | 74-122                                
  ChipStringsControl.vue                          |      50 |        0 |       0 |      55 | 29-36,51-58                           
  EnumControl.vue                                 |     100 |      100 |     100 |     100 |                                       
  MultiselectEnumControl.vue                      |   96.87 |     92.3 |   94.73 |   96.61 | 103,155                               
  ObjectControl.vue                               |   95.65 |       75 |    87.5 |   95.65 | 86                                    
  index.js                                        |     100 |      100 |     100 |     100 |                                       
 lib/json-form/controls-codex/src/controls        |   94.11 |    88.46 |    92.3 |   94.87 |                                       
  BooleanControl.vue                              |    90.9 |       75 |     100 |    90.9 | 31-32                                 
  ControlWrapper.vue                              |   93.33 |      100 |   83.33 |   93.33 | 42                                    
  NumberControl.vue                               |   97.29 |     87.5 |     100 |   97.29 | 57                                    
  StringControl.vue                               |   94.44 |    91.66 |     100 |   94.44 | 42-43                                 
  index.js                                        |   88.88 |        0 |      50 |     100 | 17                                    
 lib/json-form/controls-codex/src/mediawiki       |   75.69 |    52.38 |   70.68 |   74.58 |                                       
  CommonsFileControl.vue                          |   19.67 |        0 |       0 |   19.67 | 31-124,146-165                        
  NamespacesControl.vue                           |   97.77 |    91.66 |     100 |   97.61 | 19                                    
  PageTitleControl.vue                            |   94.33 |       75 |   81.81 |   94.23 | 82,101,139                            
  PageTitlesControl.vue                           |   88.67 |    81.25 |   81.25 |   87.23 | 57-58,63,94,125-129                   
  api.js                                          |   89.47 |     62.5 |     100 |   89.47 | 17,46                                 
  constants.js                                    |     100 |      100 |     100 |     100 |                                       
  index.js                                        |     100 |      100 |     100 |     100 |                                       
 lib/json-form/core                               |   86.13 |    70.58 |   80.64 |   86.86 |                                       
  i18n.js                                         |   98.18 |    95.45 |     100 |   98.14 | 104                                   
  index.js                                        |     100 |      100 |     100 |     100 |                                       
  testers.js                                      |      50 |     6.25 |      40 |      52 | 14-18,31-50,70                        
  uischema.js                                     |     100 |     62.5 |     100 |     100 | 15,19                                 
 lib/json-form/form                               |     100 |      100 |     100 |     100 |                                       
  index.js                                        |     100 |      100 |     100 |     100 |                                       
 lib/json-form/form/components                    |   90.74 |       70 |   69.23 |   90.56 |                                       
  DispatchRenderer.vue                            |   95.65 |    83.33 |   83.33 |   95.45 | 44                                    
  FormLayout.vue                                  |    90.9 |      100 |      50 |    90.9 | 24                                    
  JsonForm.vue                                    |      85 |       50 |      60 |      85 | 47-48,80                              
 lib/json-form/form/composables                   |    73.5 |    53.03 |   87.17 |   72.97 |                                       
  props.js                                        |     100 |      100 |     100 |     100 |                                       
  useJsonForm.js                                  |   86.04 |    69.23 |     100 |   86.04 | 31-34,56,76,91-92,101,135,182,200,262 
  useValidationErrors.js                          |   54.83 |    29.62 |   76.19 |   53.33 | 46,100-113,191-212,218,225-237        
--------------------------------------------------|---------|----------|---------|---------|---------------------------------------

--- end ---
$ node_modules/.bin/jest -u
--- stderr ---
PASS resources/ext.communityConfiguration.Editor.common/components/ClientErrorMessage.test.js
 › 1 snapshot updated.
PASS resources/ext.communityConfiguration.Editor/app/App.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/core/__tests__/i18n.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/PageTitleControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/NamespacesControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/controls/StringControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/ArrayControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/MultiselectEnumControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/PageTitlesControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/controls/NumberControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/form/composables/useJsonForm.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/EnumControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/controls/BooleanControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/api.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/core/__tests__/uischema.test.js

Snapshot Summary
 › 1 snapshot updated from 1 test suite.

Test Suites: 1 skipped, 15 passed, 15 of 16 total
Tests:       12 skipped, 69 passed, 81 total
Snapshots:   1 updated, 1 total
Time:        5.017 s
Ran all test suites.
--- stdout ---
--------------------------------------------------|---------|----------|---------|---------|---------------------------------------
File                                              | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s                     
--------------------------------------------------|---------|----------|---------|---------|---------------------------------------
All files                                         |   80.69 |    67.54 |   77.95 |   80.54 |                                       
 app                                              |   58.26 |    72.34 |      50 |   58.26 |                                       
  App.vue                                         |   84.81 |    82.92 |   73.33 |   84.81 | 71,79,97,135-136,166-177,251-255      
  MwApiCommunityConfigurationWritingRepository.js |       0 |      100 |       0 |       0 | 1-15                                  
  init.js                                         |       0 |        0 |       0 |       0 | 1-66                                  
 lib/json-form/controls-codex/config              |     100 |      100 |     100 |     100 |                                       
  index.js                                        |     100 |      100 |     100 |     100 |                                       
 lib/json-form/controls-codex/src                 |     100 |      100 |     100 |     100 |                                       
  index.js                                        |     100 |      100 |     100 |     100 |                                       
  utils.js                                        |     100 |      100 |     100 |     100 |                                       
 lib/json-form/controls-codex/src/complex         |   91.56 |    80.76 |   82.69 |   92.35 |                                       
  ArrayControl.vue                                |     100 |       70 |     100 |     100 | 74-122                                
  ChipStringsControl.vue                          |      50 |        0 |       0 |      55 | 29-36,51-58                           
  EnumControl.vue                                 |     100 |      100 |     100 |     100 |                                       
  MultiselectEnumControl.vue                      |   96.87 |     92.3 |   94.73 |   96.61 | 103,155                               
  ObjectControl.vue                               |   95.65 |       75 |    87.5 |   95.65 | 86                                    
  index.js                                        |     100 |      100 |     100 |     100 |                                       
 lib/json-form/controls-codex/src/controls        |   94.11 |    88.46 |    92.3 |   94.87 |                                       
  BooleanControl.vue                              |    90.9 |       75 |     100 |    90.9 | 31-32                                 
  ControlWrapper.vue                              |   93.33 |      100 |   83.33 |   93.33 | 42                                    
  NumberControl.vue                               |   97.29 |     87.5 |     100 |   97.29 | 57                                    
  StringControl.vue                               |   94.44 |    91.66 |     100 |   94.44 | 42-43                                 
  index.js                                        |   88.88 |        0 |      50 |     100 | 17                                    
 lib/json-form/controls-codex/src/mediawiki       |   75.69 |    52.38 |   70.68 |   74.58 |                                       
  CommonsFileControl.vue                          |   19.67 |        0 |       0 |   19.67 | 31-124,146-165                        
  NamespacesControl.vue                           |   97.77 |    91.66 |     100 |   97.61 | 19                                    
  PageTitleControl.vue                            |   94.33 |       75 |   81.81 |   94.23 | 82,101,139                            
  PageTitlesControl.vue                           |   88.67 |    81.25 |   81.25 |   87.23 | 57-58,63,94,125-129                   
  api.js                                          |   89.47 |     62.5 |     100 |   89.47 | 17,46                                 
  constants.js                                    |     100 |      100 |     100 |     100 |                                       
  index.js                                        |     100 |      100 |     100 |     100 |                                       
 lib/json-form/core                               |   86.13 |    70.58 |   80.64 |   86.86 |                                       
  i18n.js                                         |   98.18 |    95.45 |     100 |   98.14 | 104                                   
  index.js                                        |     100 |      100 |     100 |     100 |                                       
  testers.js                                      |      50 |     6.25 |      40 |      52 | 14-18,31-50,70                        
  uischema.js                                     |     100 |     62.5 |     100 |     100 | 15,19                                 
 lib/json-form/form                               |     100 |      100 |     100 |     100 |                                       
  index.js                                        |     100 |      100 |     100 |     100 |                                       
 lib/json-form/form/components                    |   90.74 |       70 |   69.23 |   90.56 |                                       
  DispatchRenderer.vue                            |   95.65 |    83.33 |   83.33 |   95.45 | 44                                    
  FormLayout.vue                                  |    90.9 |      100 |      50 |    90.9 | 24                                    
  JsonForm.vue                                    |      85 |       50 |      60 |      85 | 47-48,80                              
 lib/json-form/form/composables                   |    73.5 |    53.03 |   87.17 |   72.97 |                                       
  props.js                                        |     100 |      100 |     100 |     100 |                                       
  useJsonForm.js                                  |   86.04 |    69.23 |     100 |   86.04 | 31-34,56,76,91-92,101,135,182,200,262 
  useValidationErrors.js                          |   54.83 |    29.62 |   76.19 |   53.33 | 46,100-113,191-212,218,225-237        
--------------------------------------------------|---------|----------|---------|---------|---------------------------------------

--- end ---
$ /usr/bin/npm test
--- stderr ---
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/NamespacesControl.test.js
PASS resources/ext.communityConfiguration.Editor/app/App.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/MultiselectEnumControl.test.js
PASS resources/ext.communityConfiguration.Editor.common/components/ClientErrorMessage.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/PageTitleControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/ArrayControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/controls/StringControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/PageTitlesControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/controls/NumberControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/EnumControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/core/__tests__/i18n.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/form/composables/useJsonForm.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/core/__tests__/uischema.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/controls/BooleanControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/api.test.js

Test Suites: 1 skipped, 15 passed, 15 of 16 total
Tests:       12 skipped, 69 passed, 81 total
Snapshots:   1 passed, 1 total
Time:        5.011 s
Ran all test suites.
--- stdout ---

> test
> npm-run-all test:*


> test:lint
> eslint --cache --max-warnings 0 .


> test:types
> tsc --noEmit -p cypress/tsconfig.json


> test:lintcss
> stylelint --cache "**/*.{css,less,vue}"


> test:linti18n
> banana-checker i18n/

Checked 1 message directory.

> test:jest
> jest

--------------------------------------------------|---------|----------|---------|---------|---------------------------------------
File                                              | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s                     
--------------------------------------------------|---------|----------|---------|---------|---------------------------------------
All files                                         |   80.69 |    67.54 |   77.95 |   80.54 |                                       
 app                                              |   58.26 |    72.34 |      50 |   58.26 |                                       
  App.vue                                         |   84.81 |    82.92 |   73.33 |   84.81 | 71,79,97,135-136,166-177,251-255      
  MwApiCommunityConfigurationWritingRepository.js |       0 |      100 |       0 |       0 | 1-15                                  
  init.js                                         |       0 |        0 |       0 |       0 | 1-66                                  
 lib/json-form/controls-codex/config              |     100 |      100 |     100 |     100 |                                       
  index.js                                        |     100 |      100 |     100 |     100 |                                       
 lib/json-form/controls-codex/src                 |     100 |      100 |     100 |     100 |                                       
  index.js                                        |     100 |      100 |     100 |     100 |                                       
  utils.js                                        |     100 |      100 |     100 |     100 |                                       
 lib/json-form/controls-codex/src/complex         |   91.56 |    80.76 |   82.69 |   92.35 |                                       
  ArrayControl.vue                                |     100 |       70 |     100 |     100 | 74-122                                
  ChipStringsControl.vue                          |      50 |        0 |       0 |      55 | 29-36,51-58                           
  EnumControl.vue                                 |     100 |      100 |     100 |     100 |                                       
  MultiselectEnumControl.vue                      |   96.87 |     92.3 |   94.73 |   96.61 | 103,155                               
  ObjectControl.vue                               |   95.65 |       75 |    87.5 |   95.65 | 86                                    
  index.js                                        |     100 |      100 |     100 |     100 |                                       
 lib/json-form/controls-codex/src/controls        |   94.11 |    88.46 |    92.3 |   94.87 |                                       
  BooleanControl.vue                              |    90.9 |       75 |     100 |    90.9 | 31-32                                 
  ControlWrapper.vue                              |   93.33 |      100 |   83.33 |   93.33 | 42                                    
  NumberControl.vue                               |   97.29 |     87.5 |     100 |   97.29 | 57                                    
  StringControl.vue                               |   94.44 |    91.66 |     100 |   94.44 | 42-43                                 
  index.js                                        |   88.88 |        0 |      50 |     100 | 17                                    
 lib/json-form/controls-codex/src/mediawiki       |   75.69 |    52.38 |   70.68 |   74.58 |                                       
  CommonsFileControl.vue                          |   19.67 |        0 |       0 |   19.67 | 31-124,146-165                        
  NamespacesControl.vue                           |   97.77 |    91.66 |     100 |   97.61 | 19                                    
  PageTitleControl.vue                            |   94.33 |       75 |   81.81 |   94.23 | 82,101,139                            
  PageTitlesControl.vue                           |   88.67 |    81.25 |   81.25 |   87.23 | 57-58,63,94,125-129                   
  api.js                                          |   89.47 |     62.5 |     100 |   89.47 | 17,46                                 
  constants.js                                    |     100 |      100 |     100 |     100 |                                       
  index.js                                        |     100 |      100 |     100 |     100 |                                       
 lib/json-form/core                               |   86.13 |    70.58 |   80.64 |   86.86 |                                       
  i18n.js                                         |   98.18 |    95.45 |     100 |   98.14 | 104                                   
  index.js                                        |     100 |      100 |     100 |     100 |                                       
  testers.js                                      |      50 |     6.25 |      40 |      52 | 14-18,31-50,70                        
  uischema.js                                     |     100 |     62.5 |     100 |     100 | 15,19                                 
 lib/json-form/form                               |     100 |      100 |     100 |     100 |                                       
  index.js                                        |     100 |      100 |     100 |     100 |                                       
 lib/json-form/form/components                    |   90.74 |       70 |   69.23 |   90.56 |                                       
  DispatchRenderer.vue                            |   95.65 |    83.33 |   83.33 |   95.45 | 44                                    
  FormLayout.vue                                  |    90.9 |      100 |      50 |    90.9 | 24                                    
  JsonForm.vue                                    |      85 |       50 |      60 |      85 | 47-48,80                              
 lib/json-form/form/composables                   |    73.5 |    53.03 |   87.17 |   72.97 |                                       
  props.js                                        |     100 |      100 |     100 |     100 |                                       
  useJsonForm.js                                  |   86.04 |    69.23 |     100 |   86.04 | 31-34,56,76,91-92,101,135,182,200,262 
  useValidationErrors.js                          |   54.83 |    29.62 |   76.19 |   53.33 | 46,100-113,191-212,218,225-237        
--------------------------------------------------|---------|----------|---------|---------|---------------------------------------

--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "shell-quote": {
      "name": "shell-quote",
      "severity": "critical",
      "isDirect": false,
      "via": [
        {
          "source": 1120422,
          "name": "shell-quote",
          "dependency": "shell-quote",
          "title": "shell-quote quote() does not escape newlines in object .op values",
          "url": "https://github.com/advisories/GHSA-w7jw-789q-3m8p",
          "severity": "critical",
          "cwe": [
            "CWE-77",
            "CWE-78"
          ],
          "cvss": {
            "score": 8.1,
            "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H"
          },
          "range": ">=1.1.0 <=1.8.3"
        }
      ],
      "effects": [],
      "range": "1.1.0 - 1.8.3",
      "nodes": [
        "node_modules/shell-quote"
      ],
      "fixAvailable": true
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 0,
      "moderate": 0,
      "high": 0,
      "critical": 1,
      "total": 1
    },
    "dependencies": {
      "prod": 1,
      "dev": 1236,
      "optional": 5,
      "peer": 42,
      "peerOptional": 0,
      "total": 1236
    }
  }
}

--- end ---
Attempting to npm audit fix
$ /usr/bin/npm audit fix --dry-run --only=dev --json
--- stderr ---
npm WARN invalid config only="dev" set in command line options
npm WARN invalid config Must be one of: null, prod, production
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex@2.6.0',
npm WARN EBADENGINE   required: { node: '>=20.20.2', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-icons@2.6.0',
npm WARN EBADENGINE   required: { node: '>=20.20.2', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
--- stdout ---
{
  "added": 1,
  "removed": 0,
  "changed": 1,
  "audited": 1237,
  "funding": 265,
  "audit": {
    "auditReportVersion": 2,
    "vulnerabilities": {
      "shell-quote": {
        "name": "shell-quote",
        "severity": "critical",
        "isDirect": false,
        "via": [
          {
            "source": 1120422,
            "name": "shell-quote",
            "dependency": "shell-quote",
            "title": "shell-quote quote() does not escape newlines in object .op values",
            "url": "https://github.com/advisories/GHSA-w7jw-789q-3m8p",
            "severity": "critical",
            "cwe": [
              "CWE-77",
              "CWE-78"
            ],
            "cvss": {
              "score": 8.1,
              "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H"
            },
            "range": ">=1.1.0 <=1.8.3"
          }
        ],
        "effects": [],
        "range": "1.1.0 - 1.8.3",
        "nodes": [
          ""
        ],
        "fixAvailable": true
      }
    },
    "metadata": {
      "vulnerabilities": {
        "info": 0,
        "low": 0,
        "moderate": 0,
        "high": 0,
        "critical": 1,
        "total": 1
      },
      "dependencies": {
        "prod": 1,
        "dev": 1236,
        "optional": 5,
        "peer": 42,
        "peerOptional": 0,
        "total": 1236
      }
    }
  }
}

--- end ---
{"added": 1, "removed": 0, "changed": 1, "audited": 1237, "funding": 265, "audit": {"auditReportVersion": 2, "vulnerabilities": {"shell-quote": {"name": "shell-quote", "severity": "critical", "isDirect": false, "via": [{"source": 1120422, "name": "shell-quote", "dependency": "shell-quote", "title": "shell-quote quote() does not escape newlines in object .op values", "url": "https://github.com/advisories/GHSA-w7jw-789q-3m8p", "severity": "critical", "cwe": ["CWE-77", "CWE-78"], "cvss": {"score": 8.1, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H"}, "range": ">=1.1.0 <=1.8.3"}], "effects": [], "range": "1.1.0 - 1.8.3", "nodes": [""], "fixAvailable": true}}, "metadata": {"vulnerabilities": {"info": 0, "low": 0, "moderate": 0, "high": 0, "critical": 1, "total": 1}, "dependencies": {"prod": 1, "dev": 1236, "optional": 5, "peer": 42, "peerOptional": 0, "total": 1236}}}}
$ /usr/bin/npm audit fix --only=dev
--- stderr ---
npm WARN invalid config only="dev" set in command line options
npm WARN invalid config Must be one of: null, prod, production
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex@2.6.0',
npm WARN EBADENGINE   required: { node: '>=20.20.2', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-icons@2.6.0',
npm WARN EBADENGINE   required: { node: '>=20.20.2', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
--- stdout ---

changed 1 package, and audited 1236 packages in 4s

265 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

--- end ---
Verifying that tests still pass
$ /usr/bin/npm ci
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex@2.6.0',
npm WARN EBADENGINE   required: { node: '>=20.20.2', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-icons@2.6.0',
npm WARN EBADENGINE   required: { node: '>=20.20.2', npm: '>=10.8.2' },
npm WARN EBADENGINE   current: { node: 'v20.19.2', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm WARN deprecated @humanwhocodes/config-array@0.11.14: Use @eslint/config-array instead
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated abab@2.0.6: Use your platform's native atob() and btoa() methods instead
npm WARN deprecated glob@7.2.3: Glob versions prior to v9 are no longer supported
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated domexception@4.0.0: Use your platform's native DOMException instead
npm WARN deprecated eslint@8.57.0: This version is no longer supported. Please see https://eslint.org/version-support for other options.
--- stdout ---

added 1235 packages, and audited 1236 packages in 18s

265 packages are looking for funding
  run `npm fund` for details

found 0 vulnerabilities

--- end ---
$ /usr/bin/npm test
--- stderr ---
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/NamespacesControl.test.js
PASS resources/ext.communityConfiguration.Editor/app/App.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/MultiselectEnumControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/controls/StringControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/ArrayControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/complex/EnumControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/PageTitleControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/PageTitlesControl.test.js
PASS resources/ext.communityConfiguration.Editor.common/components/ClientErrorMessage.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/controls/BooleanControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/controls/NumberControl.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/form/composables/useJsonForm.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/core/__tests__/i18n.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/controls-codex/src/mediawiki/api.test.js
PASS resources/ext.communityConfiguration.Editor/lib/json-form/core/__tests__/uischema.test.js

Test Suites: 1 skipped, 15 passed, 15 of 16 total
Tests:       12 skipped, 69 passed, 81 total
Snapshots:   1 passed, 1 total
Time:        4.782 s
Ran all test suites.
--- stdout ---

> test
> npm-run-all test:*


> test:lint
> eslint --cache --max-warnings 0 .


> test:types
> tsc --noEmit -p cypress/tsconfig.json


> test:lintcss
> stylelint --cache "**/*.{css,less,vue}"


> test:linti18n
> banana-checker i18n/

Checked 1 message directory.

> test:jest
> jest

--------------------------------------------------|---------|----------|---------|---------|---------------------------------------
File                                              | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s                     
--------------------------------------------------|---------|----------|---------|---------|---------------------------------------
All files                                         |   80.69 |    67.54 |   77.95 |   80.54 |                                       
 app                                              |   58.26 |    72.34 |      50 |   58.26 |                                       
  App.vue                                         |   84.81 |    82.92 |   73.33 |   84.81 | 71,79,97,135-136,166-177,251-255      
  MwApiCommunityConfigurationWritingRepository.js |       0 |      100 |       0 |       0 | 1-15                                  
  init.js                                         |       0 |        0 |       0 |       0 | 1-66                                  
 lib/json-form/controls-codex/config              |     100 |      100 |     100 |     100 |                                       
  index.js                                        |     100 |      100 |     100 |     100 |                                       
 lib/json-form/controls-codex/src                 |     100 |      100 |     100 |     100 |                                       
  index.js                                        |     100 |      100 |     100 |     100 |                                       
  utils.js                                        |     100 |      100 |     100 |     100 |                                       
 lib/json-form/controls-codex/src/complex         |   91.56 |    80.76 |   82.69 |   92.35 |                                       
  ArrayControl.vue                                |     100 |       70 |     100 |     100 | 74-122                                
  ChipStringsControl.vue                          |      50 |        0 |       0 |      55 | 29-36,51-58                           
  EnumControl.vue                                 |     100 |      100 |     100 |     100 |                                       
  MultiselectEnumControl.vue                      |   96.87 |     92.3 |   94.73 |   96.61 | 103,155                               
  ObjectControl.vue                               |   95.65 |       75 |    87.5 |   95.65 | 86                                    
  index.js                                        |     100 |      100 |     100 |     100 |                                       
 lib/json-form/controls-codex/src/controls        |   94.11 |    88.46 |    92.3 |   94.87 |                                       
  BooleanControl.vue                              |    90.9 |       75 |     100 |    90.9 | 31-32                                 
  ControlWrapper.vue                              |   93.33 |      100 |   83.33 |   93.33 | 42                                    
  NumberControl.vue                               |   97.29 |     87.5 |     100 |   97.29 | 57                                    
  StringControl.vue                               |   94.44 |    91.66 |     100 |   94.44 | 42-43                                 
  index.js                                        |   88.88 |        0 |      50 |     100 | 17                                    
 lib/json-form/controls-codex/src/mediawiki       |   75.69 |    52.38 |   70.68 |   74.58 |                                       
  CommonsFileControl.vue                          |   19.67 |        0 |       0 |   19.67 | 31-124,146-165                        
  NamespacesControl.vue                           |   97.77 |    91.66 |     100 |   97.61 | 19                                    
  PageTitleControl.vue                            |   94.33 |       75 |   81.81 |   94.23 | 82,101,139                            
  PageTitlesControl.vue                           |   88.67 |    81.25 |   81.25 |   87.23 | 57-58,63,94,125-129                   
  api.js                                          |   89.47 |     62.5 |     100 |   89.47 | 17,46                                 
  constants.js                                    |     100 |      100 |     100 |     100 |                                       
  index.js                                        |     100 |      100 |     100 |     100 |                                       
 lib/json-form/core                               |   86.13 |    70.58 |   80.64 |   86.86 |                                       
  i18n.js                                         |   98.18 |    95.45 |     100 |   98.14 | 104                                   
  index.js                                        |     100 |      100 |     100 |     100 |                                       
  testers.js                                      |      50 |     6.25 |      40 |      52 | 14-18,31-50,70                        
  uischema.js                                     |     100 |     62.5 |     100 |     100 | 15,19                                 
 lib/json-form/form                               |     100 |      100 |     100 |     100 |                                       
  index.js                                        |     100 |      100 |     100 |     100 |                                       
 lib/json-form/form/components                    |   90.74 |       70 |   69.23 |   90.56 |                                       
  DispatchRenderer.vue                            |   95.65 |    83.33 |   83.33 |   95.45 | 44                                    
  FormLayout.vue                                  |    90.9 |      100 |      50 |    90.9 | 24                                    
  JsonForm.vue                                    |      85 |       50 |      60 |      85 | 47-48,80                              
 lib/json-form/form/composables                   |    73.5 |    53.03 |   87.17 |   72.97 |                                       
  props.js                                        |     100 |      100 |     100 |     100 |                                       
  useJsonForm.js                                  |   86.04 |    69.23 |     100 |   86.04 | 31-34,56,76,91-92,101,135,182,200,262 
  useValidationErrors.js                          |   54.83 |    29.62 |   76.19 |   53.33 | 46,100-113,191-212,218,225-237        
--------------------------------------------------|---------|----------|---------|---------|---------------------------------------

--- end ---
{"1120422": {"source": 1120422, "name": "shell-quote", "dependency": "shell-quote", "title": "shell-quote quote() does not escape newlines in object .op values", "url": "https://github.com/advisories/GHSA-w7jw-789q-3m8p", "severity": "critical", "cwe": ["CWE-77", "CWE-78"], "cvss": {"score": 8.1, "vectorString": "CVSS:3.1/AV:N/AC:H/PR:N/UI:N/S:U/C:H/I:H/A:H"}, "range": ">=1.1.0 <=1.8.3"}}
Upgrading n:shell-quote from 1.8.3 -> 1.8.4
$ package-lock-lint /src/repo/package-lock.json
--- stdout ---
Checking /src/repo/package-lock.json

--- end ---
build: Updating npm dependencies

* stylelint-config-wikimedia: 0.18.0 → 0.19.2
* @wikimedia/codex: 2.4.0 → 2.6.0
* shell-quote: 1.8.3 → 1.8.4
  * https://github.com/advisories/GHSA-w7jw-789q-3m8p

$ git add .
--- stdout ---

--- end ---
$ git commit -F /tmp/tmp83hd10l7
--- stdout ---
[master 3e73de2] build: Updating npm dependencies
 3 files changed, 623 insertions(+), 293 deletions(-)

--- end ---
$ git format-patch HEAD~1 --stdout
--- stdout ---
From 3e73de23492f2b4b0355e041cfd3c03d9a1fb283 Mon Sep 17 00:00:00 2001
From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org>
Date: Sun, 14 Jun 2026 04:34:25 +0000
Subject: [PATCH] build: Updating npm dependencies
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* stylelint-config-wikimedia: 0.18.0 → 0.19.2
* @wikimedia/codex: 2.4.0 → 2.6.0
* shell-quote: 1.8.3 → 1.8.4
  * https://github.com/advisories/GHSA-w7jw-789q-3m8p

Change-Id: I747874593f9b6c90e3661dfc726d6cf4c55af2d9
---
 package-lock.json                             | 905 ++++++++++++------
 package.json                                  |   4 +-
 .../ClientErrorMessage.test.js.snap           |   7 +-
 3 files changed, 623 insertions(+), 293 deletions(-)

diff --git a/package-lock.json b/package-lock.json
index 12e1e41..b5a721b 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -11,7 +11,7 @@
 				"@vue/compiler-dom": "3.4.19",
 				"@vue/test-utils": "2.4.6",
 				"@vue/vue3-jest": "29.2.6",
-				"@wikimedia/codex": "2.4.0",
+				"@wikimedia/codex": "2.6.0",
 				"@wikimedia/types-wikimedia": "^0.4.4",
 				"api-testing": "1.7.3",
 				"cypress": "^15.11.0",
@@ -25,7 +25,7 @@
 				"npm-run-all": "4.1.5",
 				"stylelint": "16.23.0",
 				"stylelint-config-recommended-vue": "^1.5.0",
-				"stylelint-config-wikimedia": "0.18.0",
+				"stylelint-config-wikimedia": "0.19.2",
 				"typescript": "5.8.3",
 				"vue": "3.5.13"
 			}
@@ -1777,6 +1777,62 @@
 			"dev": true,
 			"license": "MIT"
 		},
+		"node_modules/@cacheable/memory": {
+			"version": "2.0.9",
+			"resolved": "https://registry.npmjs.org/@cacheable/memory/-/memory-2.0.9.tgz",
+			"integrity": "sha512-HdMx6DoGywB30vacDbBsITbIX4pgFqj1zsrV58jZBUw3klzkNoXhj7qOqAgledhxG7YZI5rBSJg7Zp8/VG0DuA==",
+			"dev": true,
+			"dependencies": {
+				"@cacheable/utils": "^2.4.1",
+				"@keyv/bigmap": "^1.3.1",
+				"hookified": "^1.15.1",
+				"keyv": "^5.6.0"
+			}
+		},
+		"node_modules/@cacheable/memory/node_modules/@keyv/bigmap": {
+			"version": "1.3.1",
+			"resolved": "https://registry.npmjs.org/@keyv/bigmap/-/bigmap-1.3.1.tgz",
+			"integrity": "sha512-WbzE9sdmQtKy8vrNPa9BRnwZh5UF4s1KTmSK0KUVLo3eff5BlQNNWDnFOouNpKfPKDnms9xynJjsMYjMaT/aFQ==",
+			"dev": true,
+			"dependencies": {
+				"hashery": "^1.4.0",
+				"hookified": "^1.15.0"
+			},
+			"engines": {
+				"node": ">= 18"
+			},
+			"peerDependencies": {
+				"keyv": "^5.6.0"
+			}
+		},
+		"node_modules/@cacheable/memory/node_modules/keyv": {
+			"version": "5.6.0",
+			"resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz",
+			"integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==",
+			"dev": true,
+			"dependencies": {
+				"@keyv/serialize": "^1.1.1"
+			}
+		},
+		"node_modules/@cacheable/utils": {
+			"version": "2.4.1",
+			"resolved": "https://registry.npmjs.org/@cacheable/utils/-/utils-2.4.1.tgz",
+			"integrity": "sha512-eiFgzCbIneyMlLOmNG4g9xzF7Hv3Mga4LjxjcSC/ues6VYq2+gUbQI8JqNuw/ZM8tJIeIaBGpswAsqV2V7ApgA==",
+			"dev": true,
+			"dependencies": {
+				"hashery": "^1.5.1",
+				"keyv": "^5.6.0"
+			}
+		},
+		"node_modules/@cacheable/utils/node_modules/keyv": {
+			"version": "5.6.0",
+			"resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz",
+			"integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==",
+			"dev": true,
+			"dependencies": {
+				"@keyv/serialize": "^1.1.1"
+			}
+		},
 		"node_modules/@csstools/css-parser-algorithms": {
 			"version": "3.0.5",
 			"resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-3.0.5.tgz",
@@ -3022,11 +3078,10 @@
 			}
 		},
 		"node_modules/@keyv/serialize": {
-			"version": "1.1.0",
-			"resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.0.tgz",
-			"integrity": "sha512-RlDgexML7Z63Q8BSaqhXdCYNBy/JQnqYIwxofUrNLGCblOMHp+xux2Q8nLMLlPpgHQPoU0Do8Z6btCpRBEqZ8g==",
-			"dev": true,
-			"license": "MIT"
+			"version": "1.1.1",
+			"resolved": "https://registry.npmjs.org/@keyv/serialize/-/serialize-1.1.1.tgz",
+			"integrity": "sha512-dXn3FZhPv0US+7dtJsIi2R+c7qWYiReoEh5zUntWCf4oSpMNib8FDhSoed6m3QyZdx5hK7iLFkYk3rNxwt8vTA==",
+			"dev": true
 		},
 		"node_modules/@mdn/browser-compat-data": {
 			"version": "6.1.5",
@@ -3130,6 +3185,18 @@
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
+		"node_modules/@sindresorhus/merge-streams": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/@sindresorhus/merge-streams/-/merge-streams-4.0.0.tgz",
+			"integrity": "sha512-tlqY9xq5ukxTUZBmoOp+m61cqwQD5pHJtFY3Mn8CA8ps6yghLH/Hw8UPdqg4OLmFW3IFlcXnQNmo/dh8HzXYIQ==",
+			"dev": true,
+			"engines": {
+				"node": ">=18"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
 		"node_modules/@sinonjs/commons": {
 			"version": "3.0.1",
 			"resolved": "https://registry.npmjs.org/@sinonjs/commons/-/commons-3.0.1.tgz",
@@ -3211,69 +3278,6 @@
 				"url": "https://opencollective.com/eslint"
 			}
 		},
-		"node_modules/@stylistic/stylelint-config": {
-			"version": "2.0.0",
-			"resolved": "https://registry.npmjs.org/@stylistic/stylelint-config/-/stylelint-config-2.0.0.tgz",
-			"integrity": "sha512-8J4YAxggy2Nzkb8KJIOLbtMXTPZ5gpKVmyhiiuKEUgCl9XFND5lM0e/ZZBMGEYZ68h5qcsS/jgg1wh235erRAw==",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"@stylistic/stylelint-plugin": "^3.0.0"
-			},
-			"engines": {
-				"node": "^18.12 || >=20.9"
-			},
-			"peerDependencies": {
-				"stylelint": "^16.8.0"
-			}
-		},
-		"node_modules/@stylistic/stylelint-plugin": {
-			"version": "3.1.1",
-			"resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-3.1.1.tgz",
-			"integrity": "sha512-XagAHHIa528EvyGybv8EEYGK5zrVW74cHpsjhtovVATbhDRuJYfE+X4HCaAieW9lCkwbX6L+X0I4CiUG3w/hFw==",
-			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"@csstools/css-parser-algorithms": "^3.0.1",
-				"@csstools/css-tokenizer": "^3.0.1",
-				"@csstools/media-query-list-parser": "^3.0.1",
-				"is-plain-object": "^5.0.0",
-				"postcss-selector-parser": "^6.1.2",
-				"postcss-value-parser": "^4.2.0",
-				"style-search": "^0.1.0",
-				"stylelint": "^16.8.2"
-			},
-			"engines": {
-				"node": "^18.12 || >=20.9"
-			},
-			"peerDependencies": {
-				"stylelint": "^16.8.0"
-			}
-		},
-		"node_modules/@stylistic/stylelint-plugin/node_modules/@csstools/media-query-list-parser": {
-			"version": "3.0.1",
-			"resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-3.0.1.tgz",
-			"integrity": "sha512-HNo8gGD02kHmcbX6PvCoUuOQvn4szyB9ca63vZHKX5A81QytgDG4oxG4IaEfHTlEZSZ6MjPEMWIVU+zF2PZcgw==",
-			"dev": true,
-			"funding": [
-				{
-					"type": "github",
-					"url": "https://github.com/sponsors/csstools"
-				},
-				{
-					"type": "opencollective",
-					"url": "https://opencollective.com/csstools"
-				}
-			],
-			"license": "MIT",
-			"engines": {
-				"node": ">=18"
-			},
-			"peerDependencies": {
-				"@csstools/css-parser-algorithms": "^3.0.1",
-				"@csstools/css-tokenizer": "^3.0.1"
-			}
-		},
 		"node_modules/@tootallnate/once": {
 			"version": "2.0.1",
 			"resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.1.tgz",
@@ -3387,8 +3391,7 @@
 			"version": "3.0.5",
 			"resolved": "https://registry.npmjs.org/@types/minimatch/-/minimatch-3.0.5.tgz",
 			"integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==",
-			"dev": true,
-			"license": "MIT"
+			"dev": true
 		},
 		"node_modules/@types/node": {
 			"version": "22.17.0",
@@ -4008,16 +4011,16 @@
 			"license": "MIT"
 		},
 		"node_modules/@wikimedia/codex": {
-			"version": "2.4.0",
-			"resolved": "https://registry.npmjs.org/@wikimedia/codex/-/codex-2.4.0.tgz",
-			"integrity": "sha512-j/I1gGbTo6pttjmwyYw9/3CeInK6mpBm2FVfABJk+B1Ylw5DskX+TqeCdKghwxSkxBt0ODbUTBYdFyafk+7ajg==",
+			"version": "2.6.0",
+			"resolved": "https://registry.npmjs.org/@wikimedia/codex/-/codex-2.6.0.tgz",
+			"integrity": "sha512-ul/WXyxZbMV3PrWd0tGATuhTwUijRhHQxEJ+k+NukzcbY4MTItU3zEiw0Ye3wgNGQBMcCDt34pRGF3tXQwwDgA==",
 			"dev": true,
 			"dependencies": {
 				"@floating-ui/vue": "1.0.6",
-				"@wikimedia/codex-icons": "2.4.0"
+				"@wikimedia/codex-icons": "2.6.0"
 			},
 			"engines": {
-				"node": ">=20.19.1",
+				"node": ">=20.20.2",
 				"npm": ">=10.8.2"
 			},
 			"peerDependencies": {
@@ -4025,12 +4028,12 @@
 			}
 		},
 		"node_modules/@wikimedia/codex-icons": {
-			"version": "2.4.0",
-			"resolved": "https://registry.npmjs.org/@wikimedia/codex-icons/-/codex-icons-2.4.0.tgz",
-			"integrity": "sha512-BBtrzLR7r9ShxCMYfsx9XaKJu/peqt5Y/jtvWx3E2G5aL/Y/pIWAkv8NIvU+ztKklbHySLH5jSvVZVKxxvU0Ew==",
+			"version": "2.6.0",
+			"resolved": "https://registry.npmjs.org/@wikimedia/codex-icons/-/codex-icons-2.6.0.tgz",
+			"integrity": "sha512-U0FK8kxhIrX5hAkFGZ0uWsR4arYjWw6GLCMZmrG1qvbX7+CFoVrhJQL7alogRdCrBiQBr8CUQOquOP5fUXPIBQ==",
 			"dev": true,
 			"engines": {
-				"node": ">=20.19.1",
+				"node": ">=20.20.2",
 				"npm": ">=10.8.2"
 			}
 		},
@@ -4287,7 +4290,6 @@
 			"resolved": "https://registry.npmjs.org/array-differ/-/array-differ-3.0.0.tgz",
 			"integrity": "sha512-THtfYS6KtME/yIAhKjZ2ul7XI96lQGHRputJQHO80LAWQnuGP4iCIN8vdMRboGbIEYBwU33q8Tch1os2+X0kMg==",
 			"dev": true,
-			"license": "MIT",
 			"engines": {
 				"node": ">=8"
 			}
@@ -4329,7 +4331,6 @@
 			"resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz",
 			"integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==",
 			"dev": true,
-			"license": "MIT",
 			"engines": {
 				"node": ">=8"
 			}
@@ -5363,15 +5364,13 @@
 			"version": "1.0.3",
 			"resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz",
 			"integrity": "sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==",
-			"dev": true,
-			"license": "MIT"
+			"dev": true
 		},
 		"node_modules/cosmiconfig": {
-			"version": "9.0.0",
-			"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz",
-			"integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==",
+			"version": "9.0.2",
+			"resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.2.tgz",
+			"integrity": "sha512-gtTZxTDau1wL7Y7zifc2dd8jHSK/k6BTx/2Xp/BpdlAdnlYWFVt7qhJqgwi7637yRwRQ3qL4ZidbB4I8tA5VOg==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"env-paths": "^2.2.1",
 				"import-fresh": "^3.3.0",
@@ -5526,13 +5525,12 @@
 			}
 		},
 		"node_modules/css-functions-list": {
-			"version": "3.2.3",
-			"resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.3.tgz",
-			"integrity": "sha512-IQOkD3hbR5KrN93MtcYuad6YPuTSUhntLHDuLEbFWE+ff2/XSZNdZG+LcbbIW5AXKg/WFIfYItIzVoHngHXZzA==",
+			"version": "3.3.3",
+			"resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.3.3.tgz",
+			"integrity": "sha512-8HFEBPKhOpJPEPu70wJJetjKta86Gw9+CCyCnB3sui2qQfOvRyqBy4IKLKKAwdMpWb2lHXWk9Wb4Z6AmaUT1Pg==",
 			"dev": true,
-			"license": "MIT",
 			"engines": {
-				"node": ">=12 || >=16"
+				"node": ">=12"
 			}
 		},
 		"node_modules/css-tokenize": {
@@ -5540,7 +5538,6 @@
 			"resolved": "https://registry.npmjs.org/css-tokenize/-/css-tokenize-1.0.1.tgz",
 			"integrity": "sha512-gLmmbJdwH9HLY4bcA17lnZ8GgPwEXRbvxBJGHnkiB6gLhRpTzjkjtMIvz7YORGW/Ptv2oMk8b5g+u7mRD6Dd7A==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"inherits": "^2.0.1",
 				"readable-stream": "^1.0.33"
@@ -6059,7 +6056,6 @@
 			"resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz",
 			"integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==",
 			"dev": true,
-			"license": "BSD-3-Clause",
 			"engines": {
 				"node": ">= 12"
 			}
@@ -6157,7 +6153,6 @@
 			"resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz",
 			"integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"end-of-stream": "^1.4.1",
 				"inherits": "^2.0.3",
@@ -6170,7 +6165,6 @@
 			"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz",
 			"integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"inherits": "^2.0.3",
 				"string_decoder": "^1.1.1",
@@ -6185,7 +6179,6 @@
 			"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz",
 			"integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"safe-buffer": "~5.2.0"
 			}
@@ -8561,6 +8554,18 @@
 				"node": ">=8"
 			}
 		},
+		"node_modules/hashery": {
+			"version": "1.5.1",
+			"resolved": "https://registry.npmjs.org/hashery/-/hashery-1.5.1.tgz",
+			"integrity": "sha512-iZyKG96/JwPz1N55vj2Ie2vXbhu440zfUfJvSwEqEbeLluk7NnapfGqa7LH0mOsnDxTF85Mx8/dyR6HfqcbmbQ==",
+			"dev": true,
+			"dependencies": {
+				"hookified": "^1.15.0"
+			},
+			"engines": {
+				"node": ">=20"
+			}
+		},
 		"node_modules/hasown": {
 			"version": "2.0.2",
 			"resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz",
@@ -8575,11 +8580,10 @@
 			}
 		},
 		"node_modules/hookified": {
-			"version": "1.11.0",
-			"resolved": "https://registry.npmjs.org/hookified/-/hookified-1.11.0.tgz",
-			"integrity": "sha512-aDdIN3GyU5I6wextPplYdfmWCo+aLmjjVbntmX6HLD5RCi/xKsivYEBhnRD+d9224zFf008ZpLMPlWF0ZodYZw==",
-			"dev": true,
-			"license": "MIT"
+			"version": "1.15.1",
+			"resolved": "https://registry.npmjs.org/hookified/-/hookified-1.15.1.tgz",
+			"integrity": "sha512-MvG/clsADq1GPM2KGo2nyfaWVyn9naPiXrqIe4jYjXNZQt238kWyOGrsyc/DmRAQ+Re6yeo6yX/yoNCG5KAEVg==",
+			"dev": true
 		},
 		"node_modules/hosted-git-info": {
 			"version": "2.8.9",
@@ -8801,6 +8805,16 @@
 				"url": "https://github.com/sponsors/sindresorhus"
 			}
 		},
+		"node_modules/import-meta-resolve": {
+			"version": "4.2.0",
+			"resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz",
+			"integrity": "sha512-Iqv2fzaTQN28s/FwZAoFq0ZSs/7hMAHJVX+w8PZl3cY19Pxk6jFFalxQoIfW2826i/fDLXv8IiEZRIT0lDuWcg==",
+			"dev": true,
+			"funding": {
+				"type": "github",
+				"url": "https://github.com/sponsors/wooorm"
+			}
+		},
 		"node_modules/imurmurhash": {
 			"version": "0.1.4",
 			"resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz",
@@ -11510,7 +11524,8 @@
 			"resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz",
 			"integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==",
 			"dev": true,
-			"license": "MIT"
+			"license": "MIT",
+			"peer": true
 		},
 		"node_modules/json-parse-better-errors": {
 			"version": "1.0.2",
@@ -11601,6 +11616,7 @@
 			"integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==",
 			"dev": true,
 			"license": "MIT",
+			"peer": true,
 			"dependencies": {
 				"json-buffer": "3.0.1"
 			}
@@ -12382,7 +12398,6 @@
 			"resolved": "https://registry.npmjs.org/multimatch/-/multimatch-5.0.0.tgz",
 			"integrity": "sha512-ypMKuglUrZUD99Tk2bUQ+xNQj43lPEfAeX2o9cTteAmShXy2VHDJpuwu1o0xqoKCt9jLVAvwyFKdLTPXKAfJyA==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"@types/minimatch": "^3.0.3",
 				"array-differ": "^3.0.0",
@@ -13098,12 +13113,10 @@
 			}
 		},
 		"node_modules/postcss-html": {
-			"version": "1.8.0",
-			"resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.8.0.tgz",
-			"integrity": "sha512-5mMeb1TgLWoRKxZ0Xh9RZDfwUUIqRrcxO2uXO+Ezl1N5lqpCiSU5Gk6+1kZediBfBHFtPCdopr2UZ2SgUsKcgQ==",
+			"version": "1.8.1",
+			"resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.8.1.tgz",
+			"integrity": "sha512-OLF6P7qctfAWayOhLpcVnTGqVeJzu2W3WpIYelfz2+JV5oGxfkcEvweN9U4XpeqE0P98dcD9ssusGwlF0TK0uQ==",
 			"dev": true,
-			"license": "MIT",
-			"peer": true,
 			"dependencies": {
 				"htmlparser2": "^8.0.0",
 				"js-tokens": "^9.0.0",
@@ -13119,8 +13132,7 @@
 			"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz",
 			"integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==",
 			"dev": true,
-			"license": "MIT",
-			"peer": true
+			"license": "MIT"
 		},
 		"node_modules/postcss-less": {
 			"version": "6.0.0",
@@ -13321,6 +13333,24 @@
 			],
 			"license": "MIT"
 		},
+		"node_modules/qified": {
+			"version": "0.10.1",
+			"resolved": "https://registry.npmjs.org/qified/-/qified-0.10.1.tgz",
+			"integrity": "sha512-+Owyggi9IxT1ePKGafcI87ubSmxol6smwJ+RAHDQlx9+9cPwFWDiKFFCPuWhr9ignlGpZ9vDQLw67N4dcTVFEA==",
+			"dev": true,
+			"dependencies": {
+				"hookified": "^2.1.1"
+			},
+			"engines": {
+				"node": ">=20"
+			}
+		},
+		"node_modules/qified/node_modules/hookified": {
+			"version": "2.2.0",
+			"resolved": "https://registry.npmjs.org/hookified/-/hookified-2.2.0.tgz",
+			"integrity": "sha512-p/LgFzRN5FeoD3DLS6bkUapeye6E4SI6yJs6KetENd18S+FBthqYq2amJUWpt5z0EQwwHemidjY5OqJGEKm5uA==",
+			"dev": true
+		},
 		"node_modules/qs": {
 			"version": "6.15.2",
 			"resolved": "https://registry.npmjs.org/qs/-/qs-6.15.2.tgz",
@@ -13448,7 +13478,6 @@
 			"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.1.14.tgz",
 			"integrity": "sha512-+MeVjFf4L44XUkhM1eYbD8fyEsxcV81pqMSR5gblfcLCHfZvbrqy4/qYHE+/R5HoBUT11WV5O08Cr1n3YXkWVQ==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"core-util-is": "~1.0.0",
 				"inherits": "~2.0.1",
@@ -13460,8 +13489,7 @@
 			"version": "0.0.1",
 			"resolved": "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz",
 			"integrity": "sha512-D2S+3GLxWH+uhrNEcoh/fnmYeP8E8/zHl644d/jdA0g2uyXvy3sb0qxotE+ne0LtccHknQzWwZEzhak7oJ0COQ==",
-			"dev": true,
-			"license": "MIT"
+			"dev": true
 		},
 		"node_modules/reflect.getprototypeof": {
 			"version": "1.0.10",
@@ -14019,11 +14047,10 @@
 			}
 		},
 		"node_modules/shell-quote": {
-			"version": "1.8.3",
-			"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz",
-			"integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==",
+			"version": "1.8.4",
+			"resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.4.tgz",
+			"integrity": "sha512-VsC6n6vz1ihYYyZZwX7YZSF5l5x36ca17OC+a69h94YqB7X6XLwf+5MOgynYir2SLFUbl8gIYvBo8K8RoNQ6bQ==",
 			"dev": true,
-			"license": "MIT",
 			"engines": {
 				"node": ">= 0.4"
 			},
@@ -14334,15 +14361,13 @@
 			"version": "1.0.3",
 			"resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz",
 			"integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==",
-			"dev": true,
-			"license": "MIT"
+			"dev": true
 		},
 		"node_modules/string_decoder": {
 			"version": "0.10.31",
 			"resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz",
 			"integrity": "sha512-ev2QzSzWPYmy9GuqfIVildA4OdcGLeFZQrq5ys6RtiuF+RQQiZWr8TZNyAcuVXyQRYfEO+MsoB/1BuQVhOJuoQ==",
-			"dev": true,
-			"license": "MIT"
+			"dev": true
 		},
 		"node_modules/string-length": {
 			"version": "4.0.2",
@@ -14543,8 +14568,7 @@
 			"version": "0.1.0",
 			"resolved": "https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz",
 			"integrity": "sha512-Dj1Okke1C3uKKwQcetra4jSuk0DqbzbYtXipzFlFMZtowbF1x7BKJwB9AayVMyFARvU8EDrZdcax4At/452cAg==",
-			"dev": true,
-			"license": "ISC"
+			"dev": true
 		},
 		"node_modules/stylelint": {
 			"version": "16.23.0",
@@ -14685,29 +14709,31 @@
 			}
 		},
 		"node_modules/stylelint-config-wikimedia": {
-			"version": "0.18.0",
-			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.18.0.tgz",
-			"integrity": "sha512-Lr45NIe7pG8i7BPcMc6EddO1pRK8/KNG8gp4o/oOG1Ez10hglJuJb/QT17BlzX8NPkhtP2KdY63NS2f/Wcj6Ww==",
+			"version": "0.19.2",
+			"resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.19.2.tgz",
+			"integrity": "sha512-GTz6SmNbbrjXJpEVussRBtsE2703BSUo5R4PRR3f+o1j1h6ngyyH3/qKJ7oZzlkRMHpJHVtAS9h1emIAvc/XWw==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
-				"@stylistic/stylelint-config": "2.0.0",
-				"@stylistic/stylelint-plugin": "3.1.1",
+				"@stylistic/stylelint-config": "5.0.0",
+				"@stylistic/stylelint-plugin": "5.1.0",
 				"browserslist-config-wikimedia": "0.7.0",
-				"postcss-html": "1.7.0",
+				"postcss-html": "1.8.1",
 				"postcss-less": "6.0.0",
-				"stylelint": "16.12.0",
-				"stylelint-config-recommended": "14.0.1",
-				"stylelint-no-unsupported-browser-features": "8.0.2"
+				"stylelint": "17.6.0",
+				"stylelint-config-recommended": "18.0.0",
+				"stylelint-no-unsupported-browser-features": "8.1.1"
+			},
+			"engines": {
+				"node": ">=20.19.0"
 			},
 			"peerDependencies": {
 				"postcss-less": "^6.0.0"
 			}
 		},
-		"node_modules/stylelint-config-wikimedia/node_modules/@csstools/selector-specificity": {
-			"version": "5.0.0",
-			"resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-5.0.0.tgz",
-			"integrity": "sha512-PCqQV3c4CoVm3kdPhyeZ07VmBRdH2EpMFA/pd9OASpOEC3aXNGoqPDAZ80D0cLpMBxnmk0+yNhGsEx31hq7Gtw==",
+		"node_modules/stylelint-config-wikimedia/node_modules/@csstools/css-calc": {
+			"version": "3.2.1",
+			"resolved": "https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.2.1.tgz",
+			"integrity": "sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg==",
 			"dev": true,
 			"funding": [
 				{
@@ -14719,115 +14745,373 @@
 					"url": "https://opencollective.com/csstools"
 				}
 			],
-			"license": "MIT-0",
 			"engines": {
-				"node": ">=18"
+				"node": ">=20.19.0"
 			},
 			"peerDependencies": {
-				"postcss-selector-parser": "^7.0.0"
+				"@csstools/css-parser-algorithms": "^4.0.0",
+				"@csstools/css-tokenizer": "^4.0.0"
 			}
 		},
-		"node_modules/stylelint-config-wikimedia/node_modules/balanced-match": {
-			"version": "2.0.0",
-			"resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
-			"integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==",
-			"dev": true,
-			"license": "MIT"
-		},
-		"node_modules/stylelint-config-wikimedia/node_modules/css-tree": {
-			"version": "3.1.0",
-			"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.1.0.tgz",
-			"integrity": "sha512-0eW44TGN5SQXU1mWSkKwFstI/22X2bG1nYzZTYMAWjylYURhse752YgbE4Cx46AC+bAvI+/dYTPRk1LqSUnu6w==",
+		"node_modules/stylelint-config-wikimedia/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",
+			"integrity": "sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==",
 			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"mdn-data": "2.12.2",
-				"source-map-js": "^1.0.1"
-			},
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
 			"engines": {
-				"node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+				"node": ">=20.19.0"
+			},
+			"peerDependencies": {
+				"@csstools/css-tokenizer": "^4.0.0"
 			}
 		},
-		"node_modules/stylelint-config-wikimedia/node_modules/file-entry-cache": {
-			"version": "9.1.0",
-			"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.1.0.tgz",
-			"integrity": "sha512-/pqPFG+FdxWQj+/WSuzXSDaNzxgTLr/OrR1QuqfEZzDakpdYE70PwUxL7BPUa8hpjbvY1+qvCl8k+8Tq34xJgg==",
+		"node_modules/stylelint-config-wikimedia/node_modules/@csstools/css-syntax-patches-for-csstree": {
+			"version": "1.1.5",
+			"resolved": "https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.5.tgz",
+			"integrity": "sha512-oNjBvzLq2GPZtJphCjLqXow/cHySHSgtxvKZb7OqSZ/xHgw6NWNhfad+6AB9cLeVm6eA9d/qMll3JdEHjy6M+A==",
 			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"flat-cache": "^5.0.0"
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"peerDependencies": {
+				"css-tree": "^3.2.1"
 			},
-			"engines": {
-				"node": ">=18"
+			"peerDependenciesMeta": {
+				"css-tree": {
+					"optional": true
+				}
 			}
 		},
-		"node_modules/stylelint-config-wikimedia/node_modules/flat-cache": {
-			"version": "5.0.0",
-			"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz",
-			"integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==",
+		"node_modules/stylelint-config-wikimedia/node_modules/@csstools/css-tokenizer": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz",
+			"integrity": "sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==",
 			"dev": true,
-			"license": "MIT",
-			"dependencies": {
-				"flatted": "^3.3.1",
-				"keyv": "^4.5.4"
-			},
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
 			"engines": {
-				"node": ">=18"
+				"node": ">=20.19.0"
 			}
 		},
-		"node_modules/stylelint-config-wikimedia/node_modules/ignore": {
-			"version": "6.0.2",
-			"resolved": "https://registry.npmjs.org/ignore/-/ignore-6.0.2.tgz",
-			"integrity": "sha512-InwqeHHN2XpumIkMvpl/DCJVrAHgCsG5+cn1XlnLWGwtZBm8QJfSusItfrwx81CTp5agNZqpKU2J/ccC5nGT4A==",
+		"node_modules/stylelint-config-wikimedia/node_modules/@csstools/media-query-list-parser": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-5.0.0.tgz",
+			"integrity": "sha512-T9lXmZOfnam3eMERPsszjY5NK0jX8RmThmmm99FZ8b7z8yMaFZWKwLWGZuTwdO3ddRY5fy13GmmEYZXB4I98Eg==",
 			"dev": true,
-			"license": "MIT",
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
 			"engines": {
-				"node": ">= 4"
+				"node": ">=20.19.0"
+			},
+			"peerDependencies": {
+				"@csstools/css-parser-algorithms": "^4.0.0",
+				"@csstools/css-tokenizer": "^4.0.0"
 			}
 		},
-		"node_modules/stylelint-config-wikimedia/node_modules/js-tokens": {
-			"version": "9.0.1",
-			"resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-9.0.1.tgz",
-			"integrity": "sha512-mxa9E9ITFOt0ban3j6L5MpjwegGz6lBQmM1IJkWeBZGcMxto50+eWdjC/52xDbS2vy0k7vIMK0Fe2wfL9OQSpQ==",
+		"node_modules/stylelint-config-wikimedia/node_modules/@csstools/selector-resolve-nested": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-4.0.0.tgz",
+			"integrity": "sha512-9vAPxmp+Dx3wQBIUwc1v7Mdisw1kbbaGqXUM8QLTgWg7SoPGYtXBsMXvsFs/0Bn5yoFhcktzxNZGNaUt0VjgjA==",
 			"dev": true,
-			"license": "MIT"
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"engines": {
+				"node": ">=20.19.0"
+			},
+			"peerDependencies": {
+				"postcss-selector-parser": "^7.1.1"
+			}
 		},
-		"node_modules/stylelint-config-wikimedia/node_modules/known-css-properties": {
-			"version": "0.35.0",
-			"resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.35.0.tgz",
-			"integrity": "sha512-a/RAk2BfKk+WFGhhOCAYqSiFLc34k8Mt/6NWRI4joER0EYUzXIcFivjjnoD3+XU1DggLn/tZc3DOAgke7l8a4A==",
+		"node_modules/stylelint-config-wikimedia/node_modules/@csstools/selector-specificity": {
+			"version": "6.0.0",
+			"resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-6.0.0.tgz",
+			"integrity": "sha512-4sSgl78OtOXEX/2d++8A83zHNTgwCJMaR24FvsYL7Uf/VS8HZk9PTwR51elTbGqMuwH3szLvvOXEaVnqn0Z3zA==",
 			"dev": true,
-			"license": "MIT"
+			"funding": [
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/csstools"
+				},
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/csstools"
+				}
+			],
+			"engines": {
+				"node": ">=20.19.0"
+			},
+			"peerDependencies": {
+				"postcss-selector-parser": "^7.1.1"
+			}
 		},
-		"node_modules/stylelint-config-wikimedia/node_modules/mdn-data": {
-			"version": "2.12.2",
-			"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.12.2.tgz",
-			"integrity": "sha512-IEn+pegP1aManZuckezWCO+XZQDplx1366JoVhTpMpBB1sPey/SbveZQUosKiKiGYjg1wH4pMlNgXbCiYgihQA==",
+		"node_modules/stylelint-config-wikimedia/node_modules/@stylistic/stylelint-config": {
+			"version": "5.0.0",
+			"resolved": "https://registry.npmjs.org/@stylistic/stylelint-config/-/stylelint-config-5.0.0.tgz",
+			"integrity": "sha512-AW6S27wEm4DzB+uOZMvRkONIu0ba50VRbFte7qYJgGP4dacS8kAuj8HZJ+s+8kE4GK3XXBcSKLb75a+NfJlbiQ==",
 			"dev": true,
-			"license": "CC0-1.0"
+			"dependencies": {
+				"@stylistic/stylelint-plugin": "^5.1.0"
+			},
+			"engines": {
+				"node": ">=20.19.0"
+			},
+			"peerDependencies": {
+				"stylelint": "^17.6.0"
+			}
 		},
-		"node_modules/stylelint-config-wikimedia/node_modules/postcss-html": {
-			"version": "1.7.0",
-			"resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.7.0.tgz",
-			"integrity": "sha512-MfcMpSUIaR/nNgeVS8AyvyDugXlADjN9AcV7e5rDfrF1wduIAGSkL4q2+wgrZgA3sHVAHLDO9FuauHhZYW2nBw==",
+		"node_modules/stylelint-config-wikimedia/node_modules/@stylistic/stylelint-plugin": {
+			"version": "5.1.0",
+			"resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-5.1.0.tgz",
+			"integrity": "sha512-TFvKCbJUEWUYCD+rDv45qhnStO6nRtbBngaCblS2JGh8c95S3jJi3fIotfF6EDo4IVM15UPa65WP+kp6GNvXRA==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
-				"htmlparser2": "^8.0.0",
-				"js-tokens": "^9.0.0",
-				"postcss": "^8.4.0",
-				"postcss-safe-parser": "^6.0.0"
+				"@csstools/css-parser-algorithms": "^4.0.0",
+				"@csstools/css-tokenizer": "^4.0.0",
+				"@csstools/media-query-list-parser": "^5.0.0",
+				"postcss": "^8.5.8",
+				"postcss-selector-parser": "^7.1.1",
+				"postcss-value-parser": "^4.2.0",
+				"style-search": "^0.1.0"
 			},
 			"engines": {
-				"node": "^12 || >=14"
+				"node": ">=20.19.0"
+			},
+			"peerDependencies": {
+				"stylelint": "^17.6.0"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/ansi-regex": {
+			"version": "6.2.2",
+			"resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz",
+			"integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==",
+			"dev": true,
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/ansi-regex?sponsor=1"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/cacheable": {
+			"version": "2.3.5",
+			"resolved": "https://registry.npmjs.org/cacheable/-/cacheable-2.3.5.tgz",
+			"integrity": "sha512-EQfaKe09tl615iNvq/TBRWTFf1AKJNXYQSsMx0Z3EI0nA+pVsVPS8wJhnRlkbdacKPh1d0qVIhwTc2zsQNFEEg==",
+			"dev": true,
+			"dependencies": {
+				"@cacheable/memory": "^2.0.8",
+				"@cacheable/utils": "^2.4.1",
+				"hookified": "^1.15.0",
+				"keyv": "^5.6.0",
+				"qified": "^0.10.1"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/css-tree": {
+			"version": "3.2.1",
+			"resolved": "https://registry.npmjs.org/css-tree/-/css-tree-3.2.1.tgz",
+			"integrity": "sha512-X7sjQzceUhu1u7Y/ylrRZFU2FS6LRiFVp6rKLPg23y3x3c3DOKAwuXGDp+PAGjh6CSnCjYeAul8pcT8bAl+lSA==",
+			"dev": true,
+			"dependencies": {
+				"mdn-data": "2.27.1",
+				"source-map-js": "^1.2.1"
+			},
+			"engines": {
+				"node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/file-entry-cache": {
+			"version": "11.1.3",
+			"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-11.1.3.tgz",
+			"integrity": "sha512-oMbq0PD6VIiIwMF6LIa7MEwd/l9huKwmqRKXqmrkqIZv8CvRbfowL+L0ryAl8h//HfAS0zS+4SbYoRyAoA6BJA==",
+			"dev": true,
+			"dependencies": {
+				"flat-cache": "^6.1.22"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/flat-cache": {
+			"version": "6.1.22",
+			"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-6.1.22.tgz",
+			"integrity": "sha512-N2dnzVJIphnNsjHcrxGW7DePckJ6haPrSFqpsBUhHYgwtKGVq4JrBGielEGD2fCVnsGm1zlBVZ8wGhkyuetgug==",
+			"dev": true,
+			"dependencies": {
+				"cacheable": "^2.3.4",
+				"flatted": "^3.4.2",
+				"hookified": "^1.15.0"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/globby": {
+			"version": "16.2.0",
+			"resolved": "https://registry.npmjs.org/globby/-/globby-16.2.0.tgz",
+			"integrity": "sha512-QrJia2qDf5BB/V6HYlDTs0I0lBahyjLzpGQg3KT7FnCdTonAyPy2RtY802m2k4ALx6Dp752f82WsOczEVr3l6Q==",
+			"dev": true,
+			"dependencies": {
+				"@sindresorhus/merge-streams": "^4.0.0",
+				"fast-glob": "^3.3.3",
+				"ignore": "^7.0.5",
+				"is-path-inside": "^4.0.0",
+				"slash": "^5.1.0",
+				"unicorn-magic": "^0.4.0"
+			},
+			"engines": {
+				"node": ">=20"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/has-flag": {
+			"version": "5.0.1",
+			"resolved": "https://registry.npmjs.org/has-flag/-/has-flag-5.0.1.tgz",
+			"integrity": "sha512-CsNUt5x9LUdx6hnk/E2SZLsDyvfqANZSUq4+D3D8RzDJ2M+HDTIkF60ibS1vHaK55vzgiZw1bEPFG9yH7l33wA==",
+			"dev": true,
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/html-tags": {
+			"version": "5.1.0",
+			"resolved": "https://registry.npmjs.org/html-tags/-/html-tags-5.1.0.tgz",
+			"integrity": "sha512-n6l5uca7/y5joxZ3LUePhzmBFUJ+U2YWzhMa8XUTecSeSlQiZdF5XAd/Q3/WUl0VsXgUwWi8I7CNIwdI5WN1SQ==",
+			"dev": true,
+			"engines": {
+				"node": ">=20.10"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/ignore": {
+			"version": "7.0.5",
+			"resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz",
+			"integrity": "sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+			"dev": true,
+			"engines": {
+				"node": ">= 4"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/is-path-inside": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz",
+			"integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==",
+			"dev": true,
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/keyv": {
+			"version": "5.6.0",
+			"resolved": "https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz",
+			"integrity": "sha512-CYDD3SOtsHtyXeEORYRx2qBtpDJFjRTGXUtmNEMGyzYOKj1TE3tycdlho7kA1Ufx9OYWZzg52QFBGALTirzDSw==",
+			"dev": true,
+			"dependencies": {
+				"@keyv/serialize": "^1.1.1"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/mathml-tag-names": {
+			"version": "4.0.0",
+			"resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-4.0.0.tgz",
+			"integrity": "sha512-aa6AU2Pcx0VP/XWnh8IGL0SYSgQHDT6Ucror2j2mXeFAlN3ahaNs8EZtG1YiticMkSLj3Gt6VPFfZogt7G5iFQ==",
+			"dev": true,
+			"funding": {
+				"type": "github",
+				"url": "https://github.com/sponsors/wooorm"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/mdn-data": {
+			"version": "2.27.1",
+			"resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz",
+			"integrity": "sha512-9Yubnt3e8A0OKwxYSXyhLymGW4sCufcLG6VdiDdUGVkPhpqLxlvP5vl1983gQjJl3tqbrM731mjaZaP68AgosQ==",
+			"dev": true
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/meow": {
+			"version": "14.1.0",
+			"resolved": "https://registry.npmjs.org/meow/-/meow-14.1.0.tgz",
+			"integrity": "sha512-EDYo6VlmtnumlcBCbh1gLJ//9jvM/ndXHfVXIFrZVr6fGcwTUyCTFNTLCKuY3ffbK8L/+3Mzqnd58RojiZqHVw==",
+			"dev": true,
+			"engines": {
+				"node": ">=20"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/postcss-safe-parser": {
+			"version": "7.0.1",
+			"resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz",
+			"integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==",
+			"dev": true,
+			"funding": [
+				{
+					"type": "opencollective",
+					"url": "https://opencollective.com/postcss/"
+				},
+				{
+					"type": "tidelift",
+					"url": "https://tidelift.com/funding/github/npm/postcss-safe-parser"
+				},
+				{
+					"type": "github",
+					"url": "https://github.com/sponsors/ai"
+				}
+			],
+			"engines": {
+				"node": ">=18.0"
+			},
+			"peerDependencies": {
+				"postcss": "^8.4.31"
 			}
 		},
 		"node_modules/stylelint-config-wikimedia/node_modules/postcss-selector-parser": {
-			"version": "7.1.0",
-			"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.0.tgz",
-			"integrity": "sha512-8sLjZwK0R+JlxlYcTuVnyT2v+htpdrjDOKuMcOVdYjt52Lh8hWRYpxBPoKx/Zg+bcjc3wx6fmQevMmUztS/ccA==",
+			"version": "7.1.4",
+			"resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.4.tgz",
+			"integrity": "sha512-HeP7D2wyhkR+XaK6v4W8oRF62Dsz4flyuczALJp61GckGm42u1saSSJ/0auvcBqxs3jMRFEcPK34At/0JBKdOg==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
 				"cssesc": "^3.0.0",
 				"util-deprecate": "^1.0.2"
@@ -14841,7 +15125,6 @@
 			"resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz",
 			"integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==",
 			"dev": true,
-			"license": "ISC",
 			"engines": {
 				"node": ">=14"
 			},
@@ -14849,10 +15132,53 @@
 				"url": "https://github.com/sponsors/isaacs"
 			}
 		},
+		"node_modules/stylelint-config-wikimedia/node_modules/slash": {
+			"version": "5.1.0",
+			"resolved": "https://registry.npmjs.org/slash/-/slash-5.1.0.tgz",
+			"integrity": "sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==",
+			"dev": true,
+			"engines": {
+				"node": ">=14.16"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/string-width": {
+			"version": "8.2.1",
+			"resolved": "https://registry.npmjs.org/string-width/-/string-width-8.2.1.tgz",
+			"integrity": "sha512-IIaP0g3iy9Cyy18w3M9YcaDudujEAVHKt3a3QJg1+sr/oX96TbaGUubG0hJyCjCBThFH+tFpcIyoUHUn1ogaLA==",
+			"dev": true,
+			"dependencies": {
+				"get-east-asian-width": "^1.5.0",
+				"strip-ansi": "^7.1.2"
+			},
+			"engines": {
+				"node": ">=20"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/strip-ansi": {
+			"version": "7.2.0",
+			"resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz",
+			"integrity": "sha512-yDPMNjp4WyfYBkHnjIRLfca1i6KMyGCtsVgoKe/z1+6vukgaENdgGBZt+ZmKPc4gavvEZ5OgHfHdrazhgNyG7w==",
+			"dev": true,
+			"dependencies": {
+				"ansi-regex": "^6.2.2"
+			},
+			"engines": {
+				"node": ">=12"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/strip-ansi?sponsor=1"
+			}
+		},
 		"node_modules/stylelint-config-wikimedia/node_modules/stylelint": {
-			"version": "16.12.0",
-			"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.12.0.tgz",
-			"integrity": "sha512-F8zZ3L/rBpuoBZRvI4JVT20ZanPLXfQLzMOZg1tzPflRVh9mKpOZ8qcSIhh1my3FjAjZWG4T2POwGnmn6a6hbg==",
+			"version": "17.6.0",
+			"resolved": "https://registry.npmjs.org/stylelint/-/stylelint-17.6.0.tgz",
+			"integrity": "sha512-tokrsMIVAR9vAQ/q3UVEr7S0dGXCi7zkCezPRnS2kqPUulvUh5Vgfwngrk4EoAoW7wnrThqTdnTFN5Ra7CaxIg==",
 			"dev": true,
 			"funding": [
 				{
@@ -14864,58 +15190,55 @@
 					"url": "https://github.com/sponsors/stylelint"
 				}
 			],
-			"license": "MIT",
 			"dependencies": {
-				"@csstools/css-parser-algorithms": "^3.0.4",
-				"@csstools/css-tokenizer": "^3.0.3",
-				"@csstools/media-query-list-parser": "^4.0.2",
-				"@csstools/selector-specificity": "^5.0.0",
-				"@dual-bundle/import-meta-resolve": "^4.1.0",
-				"balanced-match": "^2.0.0",
+				"@csstools/css-calc": "^3.1.1",
+				"@csstools/css-parser-algorithms": "^4.0.0",
+				"@csstools/css-syntax-patches-for-csstree": "^1.1.1",
+				"@csstools/css-tokenizer": "^4.0.0",
+				"@csstools/media-query-list-parser": "^5.0.0",
+				"@csstools/selector-resolve-nested": "^4.0.0",
+				"@csstools/selector-specificity": "^6.0.0",
 				"colord": "^2.9.3",
-				"cosmiconfig": "^9.0.0",
-				"css-functions-list": "^3.2.3",
-				"css-tree": "^3.0.1",
-				"debug": "^4.3.7",
-				"fast-glob": "^3.3.2",
+				"cosmiconfig": "^9.0.1",
+				"css-functions-list": "^3.3.3",
+				"css-tree": "^3.2.1",
+				"debug": "^4.4.3",
+				"fast-glob": "^3.3.3",
 				"fastest-levenshtein": "^1.0.16",
-				"file-entry-cache": "^9.1.0",
+				"file-entry-cache": "^11.1.2",
 				"global-modules": "^2.0.0",
-				"globby": "^11.1.0",
+				"globby": "^16.1.1",
 				"globjoin": "^0.1.4",
-				"html-tags": "^3.3.1",
-				"ignore": "^6.0.2",
-				"imurmurhash": "^0.1.4",
+				"html-tags": "^5.1.0",
+				"ignore": "^7.0.5",
+				"import-meta-resolve": "^4.2.0",
 				"is-plain-object": "^5.0.0",
-				"known-css-properties": "^0.35.0",
-				"mathml-tag-names": "^2.1.3",
-				"meow": "^13.2.0",
+				"mathml-tag-names": "^4.0.0",
+				"meow": "^14.1.0",
 				"micromatch": "^4.0.8",
 				"normalize-path": "^3.0.0",
 				"picocolors": "^1.1.1",
-				"postcss": "^8.4.49",
-				"postcss-resolve-nested-selector": "^0.1.6",
+				"postcss": "^8.5.8",
 				"postcss-safe-parser": "^7.0.1",
-				"postcss-selector-parser": "^7.0.0",
+				"postcss-selector-parser": "^7.1.1",
 				"postcss-value-parser": "^4.2.0",
-				"resolve-from": "^5.0.0",
-				"string-width": "^4.2.3",
-				"supports-hyperlinks": "^3.1.0",
+				"string-width": "^8.2.0",
+				"supports-hyperlinks": "^4.4.0",
 				"svg-tags": "^1.0.0",
 				"table": "^6.9.0",
-				"write-file-atomic": "^5.0.1"
+				"write-file-atomic": "^7.0.1"
 			},
 			"bin": {
 				"stylelint": "bin/stylelint.mjs"
 			},
 			"engines": {
-				"node": ">=18.12.0"
+				"node": ">=20.19.0"
 			}
 		},
 		"node_modules/stylelint-config-wikimedia/node_modules/stylelint-config-recommended": {
-			"version": "14.0.1",
-			"resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.1.tgz",
-			"integrity": "sha512-bLvc1WOz/14aPImu/cufKAZYfXs/A/owZfSMZ4N+16WGXLoX5lOir53M6odBxvhgmgdxCVnNySJmZKx73T93cg==",
+			"version": "18.0.0",
+			"resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-18.0.0.tgz",
+			"integrity": "sha512-mxgT2XY6YZ3HWWe3Di8umG6aBmWmHTblTgu/f10rqFXnyWxjKWwNdjSWkgkwCtxIKnqjSJzvFmPT5yabVIRxZg==",
 			"dev": true,
 			"funding": [
 				{
@@ -14927,70 +15250,68 @@
 					"url": "https://github.com/sponsors/stylelint"
 				}
 			],
-			"license": "MIT",
 			"engines": {
-				"node": ">=18.12.0"
+				"node": ">=20.19.0"
 			},
 			"peerDependencies": {
-				"stylelint": "^16.1.0"
+				"stylelint": "^17.0.0"
 			}
 		},
-		"node_modules/stylelint-config-wikimedia/node_modules/stylelint/node_modules/postcss-safe-parser": {
-			"version": "7.0.1",
-			"resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.1.tgz",
-			"integrity": "sha512-0AioNCJZ2DPYz5ABT6bddIqlhgwhpHZ/l65YAYo0BCIn0xiDpsnTHz0gnoTGk0OXZW0JRs+cDwL8u/teRdz+8A==",
+		"node_modules/stylelint-config-wikimedia/node_modules/supports-color": {
+			"version": "10.2.2",
+			"resolved": "https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz",
+			"integrity": "sha512-SS+jx45GF1QjgEXQx4NJZV9ImqmO2NPz5FNsIHrsDjh2YsHnawpan7SNQ1o8NuhrbHZy9AZhIoCUiCeaW/C80g==",
 			"dev": true,
-			"funding": [
-				{
-					"type": "opencollective",
-					"url": "https://opencollective.com/postcss/"
-				},
-				{
-					"type": "tidelift",
-					"url": "https://tidelift.com/funding/github/npm/postcss-safe-parser"
-				},
-				{
-					"type": "github",
-					"url": "https://github.com/sponsors/ai"
-				}
-			],
-			"license": "MIT",
 			"engines": {
-				"node": ">=18.0"
+				"node": ">=18"
 			},
-			"peerDependencies": {
-				"postcss": "^8.4.31"
+			"funding": {
+				"url": "https://github.com/chalk/supports-color?sponsor=1"
+			}
+		},
+		"node_modules/stylelint-config-wikimedia/node_modules/supports-hyperlinks": {
+			"version": "4.4.0",
+			"resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-4.4.0.tgz",
+			"integrity": "sha512-UKbpT93hN5Nr9go5UY7bopIB9YQlMz9nm/ct4IXt/irb5YRkn9WaqrOBJGZ5Pwvsd5FQzSVeYlGdXoCAPQZrPg==",
+			"dev": true,
+			"dependencies": {
+				"has-flag": "^5.0.1",
+				"supports-color": "^10.2.2"
+			},
+			"engines": {
+				"node": ">=20"
+			},
+			"funding": {
+				"url": "https://github.com/chalk/supports-hyperlinks?sponsor=1"
 			}
 		},
 		"node_modules/stylelint-config-wikimedia/node_modules/write-file-atomic": {
-			"version": "5.0.1",
-			"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.1.tgz",
-			"integrity": "sha512-+QU2zd6OTD8XWIJCbffaiQeH9U73qIqafo1x6V1snCWYGJf6cVE0cDR4D8xRzcEnfI21IFrUPzPGtcPf8AC+Rw==",
+			"version": "7.0.1",
+			"resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-7.0.1.tgz",
+			"integrity": "sha512-OTIk8iR8/aCRWBqvxrzxR0hgxWpnYBblY1S5hDWBQfk/VFmJwzmJgQFN3WsoUKHISv2eAwe+PpbUzyL1CKTLXg==",
 			"dev": true,
-			"license": "ISC",
 			"dependencies": {
-				"imurmurhash": "^0.1.4",
 				"signal-exit": "^4.0.1"
 			},
 			"engines": {
-				"node": "^14.17.0 || ^16.13.0 || >=18.0.0"
+				"node": "^20.17.0 || >=22.9.0"
 			}
 		},
 		"node_modules/stylelint-no-unsupported-browser-features": {
-			"version": "8.0.2",
-			"resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-8.0.2.tgz",
-			"integrity": "sha512-4PY2qJ3ZTEje9RgGfaQ82eJoPioXxs6hazeKpji/wzLNVzTX2wd4b0Ds3ewdLkH3ID+o63IInuTquU2MNJO3YQ==",
+			"version": "8.1.1",
+			"resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-8.1.1.tgz",
+			"integrity": "sha512-sLEe6NUFoWL2vGt6IKKllQEKfKgVxmvTBFs1JVMHKKLWzxtWAXaqSxJvH+j0URM4vLQQqzC/wXc9Kp3XBNKdBw==",
 			"dev": true,
-			"license": "MIT",
 			"dependencies": {
-				"doiuse": "^6.0.5",
+				"browserslist": "^4.26.3",
+				"doiuse": "^6.0.6",
 				"postcss": "^8.4.32"
 			},
 			"engines": {
 				"node": ">=18.12.0"
 			},
 			"peerDependencies": {
-				"stylelint": "^16.0.2"
+				"stylelint": ">=16.0.2"
 			}
 		},
 		"node_modules/stylelint/node_modules/@csstools/selector-specificity": {
@@ -15821,6 +16142,18 @@
 				"node": ">=4"
 			}
 		},
+		"node_modules/unicorn-magic": {
+			"version": "0.4.0",
+			"resolved": "https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz",
+			"integrity": "sha512-wH590V9VNgYH9g3lH9wWjTrUoKsjLF6sGLjhR4sH1LWpLmCOH0Zf7PukhDA8BiS7KHe4oPNkcTHqYkj7SOGUOw==",
+			"dev": true,
+			"engines": {
+				"node": ">=20"
+			},
+			"funding": {
+				"url": "https://github.com/sponsors/sindresorhus"
+			}
+		},
 		"node_modules/universalify": {
 			"version": "2.0.1",
 			"resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.1.tgz",
diff --git a/package.json b/package.json
index 6c84b04..70ed0ed 100644
--- a/package.json
+++ b/package.json
@@ -23,7 +23,7 @@
 		"@vue/compiler-dom": "3.4.19",
 		"@vue/test-utils": "2.4.6",
 		"@vue/vue3-jest": "29.2.6",
-		"@wikimedia/codex": "2.4.0",
+		"@wikimedia/codex": "2.6.0",
 		"api-testing": "1.7.3",
 		"cypress": "^15.11.0",
 		"eslint-config-wikimedia": "0.32.4",
@@ -36,7 +36,7 @@
 		"npm-run-all": "4.1.5",
 		"stylelint": "16.23.0",
 		"stylelint-config-recommended-vue": "^1.5.0",
-		"stylelint-config-wikimedia": "0.18.0",
+		"stylelint-config-wikimedia": "0.19.2",
 		"typescript": "5.8.3",
 		"vue": "3.5.13"
 	},
diff --git a/resources/ext.communityConfiguration.Editor.common/components/__snapshots__/ClientErrorMessage.test.js.snap b/resources/ext.communityConfiguration.Editor.common/components/__snapshots__/ClientErrorMessage.test.js.snap
index 247e318..85ccb4a 100644
--- a/resources/ext.communityConfiguration.Editor.common/components/__snapshots__/ClientErrorMessage.test.js.snap
+++ b/resources/ext.communityConfiguration.Editor.common/components/__snapshots__/ClientErrorMessage.test.js.snap
@@ -25,7 +25,7 @@ exports[`ClientErrorMessage matches snapshot 1`] = `
         <!--v-if-->
         <g>
           <path
-            d="M13.728 1H6.272L1 6.272v7.456L6.272 19h7.456L19 13.728V6.272zM11 15H9v-2h2zm0-4H9V5h2z"
+            d="M19 6.4v7.199L13.6 19H6.4L1 13.599v-7.2L6.4 1h7.2zM9 14v2h2v-2zm0-9v7h2V5z"
           />
         </g>
       </svg>
@@ -72,10 +72,7 @@ exports[`ClientErrorMessage matches snapshot 1`] = `
           <!--v-if-->
           <g>
             <path
-              d="m4.34 2.93 12.73 12.73-1.41 1.41L2.93 4.35z"
-            />
-            <path
-              d="M17.07 4.34 4.34 17.07l-1.41-1.41L15.66 2.93z"
+              d="M16.707 4.707 11.414 10l5.293 5.293-1.414 1.414L10 11.414l-5.293 5.293-1.414-1.414L8.586 10 3.293 4.707l1.414-1.414L10 8.586l5.293-5.293z"
             />
           </g>
         </svg>
-- 
2.47.3


--- end ---
Source code is licensed under the AGPL.