Ver Fonte

PHPStan 1.11 + minor update dev dependencies (#6459)

* PHPStan 1.11 + minor update dev dependencies
https://github.com/phpstan/phpstan/releases/tag/1.11.0

* Comment style
Alexandre Alapetite há 1 ano atrás
pai
commit
2d17c020b6

+ 4 - 4
app/Controllers/updateController.php

@@ -267,7 +267,7 @@ class FreshRSS_update_Controller extends FreshRSS_ActionController {
 				$res = !self::hasGitUpdate();
 				$res = !self::hasGitUpdate();
 			} else {
 			} else {
 				require(UPDATE_FILENAME);
 				require(UPDATE_FILENAME);
-				// @phpstan-ignore-next-line
+				// @phpstan-ignore function.notFound
 				$res = do_post_update();
 				$res = do_post_update();
 			}
 			}
 
 
@@ -290,12 +290,12 @@ class FreshRSS_update_Controller extends FreshRSS_ActionController {
 			} else {
 			} else {
 				require(UPDATE_FILENAME);
 				require(UPDATE_FILENAME);
 				if (Minz_Request::isPost()) {
 				if (Minz_Request::isPost()) {
-					// @phpstan-ignore-next-line
+					// @phpstan-ignore function.notFound
 					save_info_update();
 					save_info_update();
 				}
 				}
-				// @phpstan-ignore-next-line
+				// @phpstan-ignore function.notFound
 				if (!need_info_update()) {
 				if (!need_info_update()) {
-					// @phpstan-ignore-next-line
+					// @phpstan-ignore function.notFound
 					$res = apply_update();
 					$res = apply_update();
 				} else {
 				} else {
 					return;
 					return;

+ 1 - 1
app/Models/Feed.php

@@ -349,8 +349,8 @@ class FreshRSS_Feed extends Minz_Model {
 	public function load(bool $loadDetails = false, bool $noCache = false): ?SimplePie {
 	public function load(bool $loadDetails = false, bool $noCache = false): ?SimplePie {
 		if ($this->url != '') {
 		if ($this->url != '') {
 			/**
 			/**
-			 * @phpstan-ignore-next-line
 			 * @throws Minz_FileNotExistException
 			 * @throws Minz_FileNotExistException
+			 * @phpstan-ignore if.alwaysFalse
 			 */
 			 */
 			if (CACHE_PATH == '') {
 			if (CACHE_PATH == '') {
 				throw new Minz_FileNotExistException(
 				throw new Minz_FileNotExistException(

+ 2 - 0
app/Models/TagDAO.php

@@ -383,6 +383,7 @@ SQL;
 			}
 			}
 			$sql .= ' AND et.id_entry IN (' . str_repeat('?,', count($entries) - 1). '?)';
 			$sql .= ' AND et.id_entry IN (' . str_repeat('?,', count($entries) - 1). '?)';
 			if (is_array($entries[0])) {
 			if (is_array($entries[0])) {
+				/** @var array<array<string,string>> $entries */
 				foreach ($entries as $entry) {
 				foreach ($entries as $entry) {
 					if (!empty($entry['id'])) {
 					if (!empty($entry['id'])) {
 						$values[] = $entry['id'];
 						$values[] = $entry['id'];
@@ -394,6 +395,7 @@ SQL;
 					$values[] = $entry->id();
 					$values[] = $entry->id();
 				}
 				}
 			} else {
 			} else {
+				/** @var array<numeric-string> $entries */
 				foreach ($entries as $entry) {
 				foreach ($entries as $entry) {
 					$values[] = $entry;
 					$values[] = $entry;
 				}
 				}

+ 1 - 1
app/views/update/apply.phtml

@@ -11,7 +11,7 @@
 	<h1><?= _t('admin.update') ?></h1>
 	<h1><?= _t('admin.update') ?></h1>
 
 
 	<?php
 	<?php
-		// @phpstan-ignore-next-line
+		// @phpstan-ignore function.notFound
 		ask_info_update();
 		ask_info_update();
 	?>
 	?>
 </main>
 </main>

+ 1 - 1
cli/CliOptionsParser.php

@@ -101,7 +101,7 @@ abstract class CliOptionsParser {
 				}
 				}
 
 
 				if (!empty($typedValues)) {
 				if (!empty($typedValues)) {
-					// @phpstan-ignore-next-line (change to `@phpstan-ignore property.dynamicName` when upgrading to PHPStan 1.11+)
+					// @phpstan-ignore property.dynamicName
 					$this->$name = $types['isArray'] ? $typedValues : array_pop($typedValues);
 					$this->$name = $types['isArray'] ? $typedValues : array_pop($typedValues);
 				}
 				}
 			}
 			}

+ 1 - 1
cli/reconfigure.php

@@ -108,7 +108,7 @@ foreach ($values as $name => $value) {
 				}
 				}
 				break;
 				break;
 		}
 		}
-		// @phpstan-ignore-next-line (change to `@phpstan-ignore property.dynamicName` when upgrading to PHPStan 1.11+)
+		// @phpstan-ignore assign.propertyType, property.dynamicName
 		$systemConf->$name = $value;
 		$systemConf->$name = $value;
 	}
 	}
 }
 }

+ 3 - 3
composer.json

@@ -57,9 +57,9 @@
         "ext-phar": "*",
         "ext-phar": "*",
         "ext-tokenizer": "*",
         "ext-tokenizer": "*",
         "ext-xmlwriter": "*",
         "ext-xmlwriter": "*",
-        "phpstan/phpstan": "^1.10",
-        "phpstan/phpstan-phpunit": "^1.3",
-        "phpstan/phpstan-strict-rules": "^1.5",
+        "phpstan/phpstan": "^1.11",
+        "phpstan/phpstan-phpunit": "^1.4",
+        "phpstan/phpstan-strict-rules": "^1.6",
         "phpunit/phpunit": "^9",
         "phpunit/phpunit": "^9",
         "squizlabs/php_codesniffer": "^3.9"
         "squizlabs/php_codesniffer": "^3.9"
     },
     },

+ 21 - 21
composer.lock

@@ -4,7 +4,7 @@
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "Read more about it at https://getcomposer.org/doc/01-basic-usage.md#installing-dependencies",
         "This file is @generated automatically"
         "This file is @generated automatically"
     ],
     ],
-    "content-hash": "39d1b72706ede754d441aa7d720c03d5",
+    "content-hash": "2dcd52d3495f0c8bbca900f58e469323",
     "packages": [],
     "packages": [],
     "packages-dev": [
     "packages-dev": [
         {
         {
@@ -314,16 +314,16 @@
         },
         },
         {
         {
             "name": "phpstan/phpstan",
             "name": "phpstan/phpstan",
-            "version": "1.10.67",
+            "version": "1.11.0",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan.git",
                 "url": "https://github.com/phpstan/phpstan.git",
-                "reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493"
+                "reference": "666cb1703742cea9cc80fee631f0940e1592fa6e"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/16ddbe776f10da6a95ebd25de7c1dbed397dc493",
-                "reference": "16ddbe776f10da6a95ebd25de7c1dbed397dc493",
+                "url": "https://api.github.com/repos/phpstan/phpstan/zipball/666cb1703742cea9cc80fee631f0940e1592fa6e",
+                "reference": "666cb1703742cea9cc80fee631f0940e1592fa6e",
                 "shasum": ""
                 "shasum": ""
             },
             },
             "require": {
             "require": {
@@ -368,25 +368,25 @@
                     "type": "github"
                     "type": "github"
                 }
                 }
             ],
             ],
-            "time": "2024-04-16T07:22:02+00:00"
+            "time": "2024-05-13T06:02:22+00:00"
         },
         },
         {
         {
             "name": "phpstan/phpstan-phpunit",
             "name": "phpstan/phpstan-phpunit",
-            "version": "1.3.16",
+            "version": "1.4.0",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan-phpunit.git",
                 "url": "https://github.com/phpstan/phpstan-phpunit.git",
-                "reference": "d5242a59d035e46774f2e634b374bc39ff62cb95"
+                "reference": "f3ea021866f4263f07ca3636bf22c64be9610c11"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/d5242a59d035e46774f2e634b374bc39ff62cb95",
-                "reference": "d5242a59d035e46774f2e634b374bc39ff62cb95",
+                "url": "https://api.github.com/repos/phpstan/phpstan-phpunit/zipball/f3ea021866f4263f07ca3636bf22c64be9610c11",
+                "reference": "f3ea021866f4263f07ca3636bf22c64be9610c11",
                 "shasum": ""
                 "shasum": ""
             },
             },
             "require": {
             "require": {
                 "php": "^7.2 || ^8.0",
                 "php": "^7.2 || ^8.0",
-                "phpstan/phpstan": "^1.10"
+                "phpstan/phpstan": "^1.11"
             },
             },
             "conflict": {
             "conflict": {
                 "phpunit/phpunit": "<7.0"
                 "phpunit/phpunit": "<7.0"
@@ -418,27 +418,27 @@
             "description": "PHPUnit extensions and rules for PHPStan",
             "description": "PHPUnit extensions and rules for PHPStan",
             "support": {
             "support": {
                 "issues": "https://github.com/phpstan/phpstan-phpunit/issues",
                 "issues": "https://github.com/phpstan/phpstan-phpunit/issues",
-                "source": "https://github.com/phpstan/phpstan-phpunit/tree/1.3.16"
+                "source": "https://github.com/phpstan/phpstan-phpunit/tree/1.4.0"
             },
             },
-            "time": "2024-02-23T09:51:20+00:00"
+            "time": "2024-04-20T06:39:00+00:00"
         },
         },
         {
         {
             "name": "phpstan/phpstan-strict-rules",
             "name": "phpstan/phpstan-strict-rules",
-            "version": "1.5.5",
+            "version": "1.6.0",
             "source": {
             "source": {
                 "type": "git",
                 "type": "git",
                 "url": "https://github.com/phpstan/phpstan-strict-rules.git",
                 "url": "https://github.com/phpstan/phpstan-strict-rules.git",
-                "reference": "2e193a07651a6f4be3baa44ddb21d822681f5918"
+                "reference": "363f921dd8441777d4fc137deb99beb486c77df1"
             },
             },
             "dist": {
             "dist": {
                 "type": "zip",
                 "type": "zip",
-                "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/2e193a07651a6f4be3baa44ddb21d822681f5918",
-                "reference": "2e193a07651a6f4be3baa44ddb21d822681f5918",
+                "url": "https://api.github.com/repos/phpstan/phpstan-strict-rules/zipball/363f921dd8441777d4fc137deb99beb486c77df1",
+                "reference": "363f921dd8441777d4fc137deb99beb486c77df1",
                 "shasum": ""
                 "shasum": ""
             },
             },
             "require": {
             "require": {
                 "php": "^7.2 || ^8.0",
                 "php": "^7.2 || ^8.0",
-                "phpstan/phpstan": "^1.10.60"
+                "phpstan/phpstan": "^1.11"
             },
             },
             "require-dev": {
             "require-dev": {
                 "nikic/php-parser": "^4.13.0",
                 "nikic/php-parser": "^4.13.0",
@@ -467,9 +467,9 @@
             "description": "Extra strict and opinionated rules for PHPStan",
             "description": "Extra strict and opinionated rules for PHPStan",
             "support": {
             "support": {
                 "issues": "https://github.com/phpstan/phpstan-strict-rules/issues",
                 "issues": "https://github.com/phpstan/phpstan-strict-rules/issues",
-                "source": "https://github.com/phpstan/phpstan-strict-rules/tree/1.5.5"
+                "source": "https://github.com/phpstan/phpstan-strict-rules/tree/1.6.0"
             },
             },
-            "time": "2024-04-19T15:12:26+00:00"
+            "time": "2024-04-20T06:37:51+00:00"
         },
         },
         {
         {
             "name": "phpunit/php-code-coverage",
             "name": "phpunit/php-code-coverage",
@@ -2024,5 +2024,5 @@
     "platform-overrides": {
     "platform-overrides": {
         "php": "7.4"
         "php": "7.4"
     },
     },
-    "plugin-api-version": "2.6.0"
+    "plugin-api-version": "2.3.0"
 }
 }

+ 1 - 1
lib/Minz/Configuration.php

@@ -72,7 +72,7 @@ class Minz_Configuration {
 	/**
 	/**
 	 * The namespace of the current configuration.
 	 * The namespace of the current configuration.
 	 * Unused.
 	 * Unused.
-	 * @phpstan-ignore-next-line
+	 * @phpstan-ignore property.onlyWritten
 	 */
 	 */
 	private string $namespace = '';
 	private string $namespace = '';
 
 

+ 3 - 3
lib/Minz/Dispatcher.php

@@ -44,7 +44,7 @@ final class Minz_Dispatcher {
 				$this->createController (Minz_Request::controllerName ());
 				$this->createController (Minz_Request::controllerName ());
 				$this->controller->init ();
 				$this->controller->init ();
 				$this->controller->firstAction ();
 				$this->controller->firstAction ();
-				// @phpstan-ignore-next-line
+				// @phpstan-ignore booleanNot.alwaysTrue
 				if (!self::$needsReset) {
 				if (!self::$needsReset) {
 					$this->launchAction (
 					$this->launchAction (
 						Minz_Request::actionName ()
 						Minz_Request::actionName ()
@@ -53,7 +53,7 @@ final class Minz_Dispatcher {
 				}
 				}
 				$this->controller->lastAction ();
 				$this->controller->lastAction ();
 
 
-				// @phpstan-ignore-next-line
+				// @phpstan-ignore booleanNot.alwaysTrue
 				if (!self::$needsReset) {
 				if (!self::$needsReset) {
 					$this->controller->declareCspHeader();
 					$this->controller->declareCspHeader();
 					$this->controller->view ()->build ();
 					$this->controller->view ()->build ();
@@ -61,7 +61,7 @@ final class Minz_Dispatcher {
 			} catch (Minz_Exception $e) {
 			} catch (Minz_Exception $e) {
 				throw $e;
 				throw $e;
 			}
 			}
-			// @phpstan-ignore-next-line
+			// @phpstan-ignore doWhile.alwaysFalse
 		} while (self::$needsReset);
 		} while (self::$needsReset);
 	}
 	}
 
 

+ 3 - 3
lib/Minz/Pdo.php

@@ -58,7 +58,7 @@ abstract class Minz_Pdo extends PDO {
 	 * @param array<int,string> $options
 	 * @param array<int,string> $options
 	 * @return PDOStatement|false
 	 * @return PDOStatement|false
 	 * @throws PDOException if the attribute `PDO::ATTR_ERRMODE` is set to `PDO::ERRMODE_EXCEPTION`
 	 * @throws PDOException if the attribute `PDO::ATTR_ERRMODE` is set to `PDO::ERRMODE_EXCEPTION`
-	 * @phpstan-ignore-next-line
+	 * @phpstan-ignore method.childParameterType, throws.unusedType
 	 */
 	 */
 	#[\Override]
 	#[\Override]
 	#[\ReturnTypeWillChange]
 	#[\ReturnTypeWillChange]
@@ -72,7 +72,7 @@ abstract class Minz_Pdo extends PDO {
 	 * @param string $statement
 	 * @param string $statement
 	 * @return int|false
 	 * @return int|false
 	 * @throws PDOException if the attribute `PDO::ATTR_ERRMODE` is set to `PDO::ERRMODE_EXCEPTION`
 	 * @throws PDOException if the attribute `PDO::ATTR_ERRMODE` is set to `PDO::ERRMODE_EXCEPTION`
-	 * @phpstan-ignore-next-line
+	 * @phpstan-ignore throws.unusedType
 	 */
 	 */
 	#[\Override]
 	#[\Override]
 	#[\ReturnTypeWillChange]
 	#[\ReturnTypeWillChange]
@@ -84,7 +84,7 @@ abstract class Minz_Pdo extends PDO {
 	/**
 	/**
 	 * @return PDOStatement|false
 	 * @return PDOStatement|false
 	 * @throws PDOException if the attribute `PDO::ATTR_ERRMODE` is set to `PDO::ERRMODE_EXCEPTION`
 	 * @throws PDOException if the attribute `PDO::ATTR_ERRMODE` is set to `PDO::ERRMODE_EXCEPTION`
-	 * @phpstan-ignore-next-line
+	 * @phpstan-ignore throws.unusedType
 	 */
 	 */
 	#[\Override]
 	#[\Override]
 	#[\ReturnTypeWillChange]
 	#[\ReturnTypeWillChange]

+ 1 - 2
lib/Minz/View.php

@@ -346,8 +346,7 @@ class Minz_View {
 
 
 	public function attributeParams(): void {
 	public function attributeParams(): void {
 		foreach (Minz_View::$params as $key => $value) {
 		foreach (Minz_View::$params as $key => $value) {
-			// TODO: Do not use variable variable (noVariableVariables)
-			/** @phpstan-ignore-next-line */
+			// @phpstan-ignore property.dynamicName
 			$this->$key = $value;
 			$this->$key = $value;
 		}
 		}
 	}
 	}

+ 2 - 2
lib/http-conditional.php

@@ -107,13 +107,13 @@ function httpConditional(int $UnixTimeStamp, int $cacheSeconds = 0, int $cachePr
 	}
 	}
 	$etagServer = '"' . md5($scriptName . $myQuery . '#' . $dateLastModif) . '"';
 	$etagServer = '"' . md5($scriptName . $myQuery . '#' . $dateLastModif) . '"';
 
 
-	// @phpstan-ignore-next-line
+	// @phpstan-ignore booleanNot.alwaysTrue
 	if ((!$is412) && isset($_SERVER['HTTP_IF_MATCH'])) { //rfc2616-sec14.html#sec14.24
 	if ((!$is412) && isset($_SERVER['HTTP_IF_MATCH'])) { //rfc2616-sec14.html#sec14.24
 		$etagsClient = stripslashes($_SERVER['HTTP_IF_MATCH']);
 		$etagsClient = stripslashes($_SERVER['HTTP_IF_MATCH']);
 		$etagsClient = str_ireplace('-gzip', '', $etagsClient);
 		$etagsClient = str_ireplace('-gzip', '', $etagsClient);
 		$is412 = (($etagsClient !== '*') && (strpos($etagsClient, $etagServer) === false));
 		$is412 = (($etagsClient !== '*') && (strpos($etagsClient, $etagServer) === false));
 	}
 	}
-	// @phpstan-ignore-next-line
+	// @phpstan-ignore booleanAnd.leftAlwaysTrue
 	if ($is304 && isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { //rfc2616-sec14.html#sec14.25 //rfc1945.txt
 	if ($is304 && isset($_SERVER['HTTP_IF_MODIFIED_SINCE'])) { //rfc2616-sec14.html#sec14.25 //rfc1945.txt
 		$nbCond++;
 		$nbCond++;
 		$dateCacheClient = $_SERVER['HTTP_IF_MODIFIED_SINCE'];
 		$dateCacheClient = $_SERVER['HTTP_IF_MODIFIED_SINCE'];

+ 1 - 1
lib/lib_rss.php

@@ -41,7 +41,7 @@ if (!function_exists('syslog')) {
 		define('STDERR', fopen('php://stderr', 'w'));
 		define('STDERR', fopen('php://stderr', 'w'));
 	}
 	}
 	function syslog(int $priority, string $message): bool {
 	function syslog(int $priority, string $message): bool {
-		// @phpstan-ignore-next-line
+		// @phpstan-ignore booleanAnd.rightAlwaysTrue
 		if (COPY_SYSLOG_TO_STDERR && defined('STDERR') && STDERR) {
 		if (COPY_SYSLOG_TO_STDERR && defined('STDERR') && STDERR) {
 			return fwrite(STDERR, $message . "\n") != false;
 			return fwrite(STDERR, $message . "\n") != false;
 		}
 		}

+ 93 - 149
package-lock.json

@@ -21,16 +21,7 @@
         "stylelint-order": "^6.0.4"
         "stylelint-order": "^6.0.4"
       },
       },
       "engines": {
       "engines": {
-        "node": ">=12"
-      }
-    },
-    "node_modules/@aashutoshrathi/word-wrap": {
-      "version": "1.2.6",
-      "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz",
-      "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==",
-      "dev": true,
-      "engines": {
-        "node": ">=0.10.0"
+        "node": ">=16"
       }
       }
     },
     },
     "node_modules/@babel/code-frame": {
     "node_modules/@babel/code-frame": {
@@ -47,21 +38,21 @@
       }
       }
     },
     },
     "node_modules/@babel/helper-validator-identifier": {
     "node_modules/@babel/helper-validator-identifier": {
-      "version": "7.22.20",
-      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz",
-      "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==",
+      "version": "7.24.5",
+      "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.5.tgz",
+      "integrity": "sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==",
       "dev": true,
       "dev": true,
       "engines": {
       "engines": {
         "node": ">=6.9.0"
         "node": ">=6.9.0"
       }
       }
     },
     },
     "node_modules/@babel/highlight": {
     "node_modules/@babel/highlight": {
-      "version": "7.24.2",
-      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.2.tgz",
-      "integrity": "sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==",
+      "version": "7.24.5",
+      "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.5.tgz",
+      "integrity": "sha512-8lLmua6AVh/8SLJRRVD6V8p73Hir9w5mJrhE+IPpILG31KKlI9iz5zmBYKcWPS59qSfgP9RaSBQSHHE81WKuEw==",
       "dev": true,
       "dev": true,
       "dependencies": {
       "dependencies": {
-        "@babel/helper-validator-identifier": "^7.22.20",
+        "@babel/helper-validator-identifier": "^7.24.5",
         "chalk": "^2.4.2",
         "chalk": "^2.4.2",
         "js-tokens": "^4.0.0",
         "js-tokens": "^4.0.0",
         "picocolors": "^1.0.0"
         "picocolors": "^1.0.0"
@@ -142,9 +133,9 @@
       }
       }
     },
     },
     "node_modules/@csstools/css-parser-algorithms": {
     "node_modules/@csstools/css-parser-algorithms": {
-      "version": "2.6.1",
-      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.1.tgz",
-      "integrity": "sha512-ubEkAaTfVZa+WwGhs5jbo5Xfqpeaybr/RvWzvFxRs4jfq16wH8l8Ty/QEEpINxll4xhuGfdMbipRyz5QZh9+FA==",
+      "version": "2.6.3",
+      "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.3.tgz",
+      "integrity": "sha512-xI/tL2zxzEbESvnSxwFgwvy5HS00oCXxL4MLs6HUiDcYfwowsoQaABKxUElp1ARITrINzBnsECOc1q0eg2GOrA==",
       "dev": true,
       "dev": true,
       "funding": [
       "funding": [
         {
         {
@@ -160,13 +151,13 @@
         "node": "^14 || ^16 || >=18"
         "node": "^14 || ^16 || >=18"
       },
       },
       "peerDependencies": {
       "peerDependencies": {
-        "@csstools/css-tokenizer": "^2.2.4"
+        "@csstools/css-tokenizer": "^2.3.1"
       }
       }
     },
     },
     "node_modules/@csstools/css-tokenizer": {
     "node_modules/@csstools/css-tokenizer": {
-      "version": "2.2.4",
-      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.4.tgz",
-      "integrity": "sha512-PuWRAewQLbDhGeTvFuq2oClaSCKPIBmHyIobCV39JHRYN0byDcUWJl5baPeNUcqrjtdMNqFooE0FGl31I3JOqw==",
+      "version": "2.3.1",
+      "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.3.1.tgz",
+      "integrity": "sha512-iMNHTyxLbBlWIfGtabT157LH9DUx9X8+Y3oymFEuMj8HNc+rpE3dPFGFgHjpKfjeFDjLjYIAIhXPGvS2lKxL9g==",
       "dev": true,
       "dev": true,
       "funding": [
       "funding": [
         {
         {
@@ -183,9 +174,9 @@
       }
       }
     },
     },
     "node_modules/@csstools/media-query-list-parser": {
     "node_modules/@csstools/media-query-list-parser": {
-      "version": "2.1.9",
-      "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.9.tgz",
-      "integrity": "sha512-qqGuFfbn4rUmyOB0u8CVISIp5FfJ5GAR3mBrZ9/TKndHakdnm6pY0L/fbLcpPnrzwCyyTEZl1nUcXAYHEWneTA==",
+      "version": "2.1.11",
+      "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.11.tgz",
+      "integrity": "sha512-uox5MVhvNHqitPP+SynrB1o8oPxPMt2JLgp5ghJOWf54WGQ5OKu47efne49r1SWqs3wRP8xSWjnO9MBKxhB1dA==",
       "dev": true,
       "dev": true,
       "funding": [
       "funding": [
         {
         {
@@ -201,14 +192,14 @@
         "node": "^14 || ^16 || >=18"
         "node": "^14 || ^16 || >=18"
       },
       },
       "peerDependencies": {
       "peerDependencies": {
-        "@csstools/css-parser-algorithms": "^2.6.1",
-        "@csstools/css-tokenizer": "^2.2.4"
+        "@csstools/css-parser-algorithms": "^2.6.3",
+        "@csstools/css-tokenizer": "^2.3.1"
       }
       }
     },
     },
     "node_modules/@csstools/selector-specificity": {
     "node_modules/@csstools/selector-specificity": {
-      "version": "3.0.3",
-      "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.3.tgz",
-      "integrity": "sha512-KEPNw4+WW5AVEIyzC80rTbWEUatTW2lXpN8+8ILC8PiPeWPjwUzrPZDIOZ2wwqDmeqOYTdSGyL3+vE5GC3FB3Q==",
+      "version": "3.1.1",
+      "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz",
+      "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==",
       "dev": true,
       "dev": true,
       "funding": [
       "funding": [
         {
         {
@@ -228,9 +219,9 @@
       }
       }
     },
     },
     "node_modules/@dual-bundle/import-meta-resolve": {
     "node_modules/@dual-bundle/import-meta-resolve": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz",
-      "integrity": "sha512-ZKXyJeFAzcpKM2kk8ipoGIPUqx9BX52omTGnfwjJvxOCaZTM2wtDK7zN0aIgPRbT9XYAlha0HtmZ+XKteuh0Gw==",
+      "version": "4.1.0",
+      "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz",
+      "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==",
       "dev": true,
       "dev": true,
       "funding": {
       "funding": {
         "type": "github",
         "type": "github",
@@ -737,26 +728,11 @@
         "semver": "^7.0.0"
         "semver": "^7.0.0"
       }
       }
     },
     },
-    "node_modules/builtins/node_modules/lru-cache": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-      "dev": true,
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
     "node_modules/builtins/node_modules/semver": {
     "node_modules/builtins/node_modules/semver": {
-      "version": "7.6.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
-      "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+      "version": "7.6.2",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+      "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
       "dev": true,
       "dev": true,
-      "dependencies": {
-        "lru-cache": "^6.0.0"
-      },
       "bin": {
       "bin": {
         "semver": "bin/semver.js"
         "semver": "bin/semver.js"
       },
       },
@@ -1364,26 +1340,11 @@
         "eslint": ">=6.0.0"
         "eslint": ">=6.0.0"
       }
       }
     },
     },
-    "node_modules/eslint-compat-utils/node_modules/lru-cache": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-      "dev": true,
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
     "node_modules/eslint-compat-utils/node_modules/semver": {
     "node_modules/eslint-compat-utils/node_modules/semver": {
-      "version": "7.6.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
-      "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+      "version": "7.6.2",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+      "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
       "dev": true,
       "dev": true,
-      "dependencies": {
-        "lru-cache": "^6.0.0"
-      },
       "bin": {
       "bin": {
         "semver": "bin/semver.js"
         "semver": "bin/semver.js"
       },
       },
@@ -1566,26 +1527,11 @@
         "eslint": ">=7.0.0"
         "eslint": ">=7.0.0"
       }
       }
     },
     },
-    "node_modules/eslint-plugin-n/node_modules/lru-cache": {
-      "version": "6.0.0",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz",
-      "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==",
-      "dev": true,
-      "dependencies": {
-        "yallist": "^4.0.0"
-      },
-      "engines": {
-        "node": ">=10"
-      }
-    },
     "node_modules/eslint-plugin-n/node_modules/semver": {
     "node_modules/eslint-plugin-n/node_modules/semver": {
-      "version": "7.6.0",
-      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz",
-      "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==",
+      "version": "7.6.2",
+      "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
+      "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
       "dev": true,
       "dev": true,
-      "dependencies": {
-        "lru-cache": "^6.0.0"
-      },
       "bin": {
       "bin": {
         "semver": "bin/semver.js"
         "semver": "bin/semver.js"
       },
       },
@@ -1946,9 +1892,9 @@
       }
       }
     },
     },
     "node_modules/get-tsconfig": {
     "node_modules/get-tsconfig": {
-      "version": "4.7.3",
-      "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.3.tgz",
-      "integrity": "sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==",
+      "version": "4.7.5",
+      "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.5.tgz",
+      "integrity": "sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==",
       "dev": true,
       "dev": true,
       "dependencies": {
       "dependencies": {
         "resolve-pkg-maps": "^1.0.0"
         "resolve-pkg-maps": "^1.0.0"
@@ -1958,22 +1904,22 @@
       }
       }
     },
     },
     "node_modules/glob": {
     "node_modules/glob": {
-      "version": "10.3.12",
-      "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.12.tgz",
-      "integrity": "sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==",
+      "version": "10.3.15",
+      "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.15.tgz",
+      "integrity": "sha512-0c6RlJt1TICLyvJYIApxb8GsXoai0KUP7AxKKAtsYXdgJR1mGEUa7DgwShbdk1nly0PYoZj01xd4hzbq3fsjpw==",
       "dev": true,
       "dev": true,
       "dependencies": {
       "dependencies": {
         "foreground-child": "^3.1.0",
         "foreground-child": "^3.1.0",
         "jackspeak": "^2.3.6",
         "jackspeak": "^2.3.6",
         "minimatch": "^9.0.1",
         "minimatch": "^9.0.1",
         "minipass": "^7.0.4",
         "minipass": "^7.0.4",
-        "path-scurry": "^1.10.2"
+        "path-scurry": "^1.11.0"
       },
       },
       "bin": {
       "bin": {
         "glob": "dist/esm/bin.mjs"
         "glob": "dist/esm/bin.mjs"
       },
       },
       "engines": {
       "engines": {
-        "node": ">=16 || 14 >=14.17"
+        "node": ">=16 || 14 >=14.18"
       },
       },
       "funding": {
       "funding": {
         "url": "https://github.com/sponsors/isaacs"
         "url": "https://github.com/sponsors/isaacs"
@@ -2075,12 +2021,13 @@
       }
       }
     },
     },
     "node_modules/globalthis": {
     "node_modules/globalthis": {
-      "version": "1.0.3",
-      "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz",
-      "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==",
+      "version": "1.0.4",
+      "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.4.tgz",
+      "integrity": "sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==",
       "dev": true,
       "dev": true,
       "dependencies": {
       "dependencies": {
-        "define-properties": "^1.1.3"
+        "define-properties": "^1.2.1",
+        "gopd": "^1.0.1"
       },
       },
       "engines": {
       "engines": {
         "node": ">= 0.4"
         "node": ">= 0.4"
@@ -2236,9 +2183,9 @@
       }
       }
     },
     },
     "node_modules/immutable": {
     "node_modules/immutable": {
-      "version": "4.3.5",
-      "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz",
-      "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==",
+      "version": "4.3.6",
+      "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.6.tgz",
+      "integrity": "sha512-Ju0+lEMyzMVZarkTn/gqRpdqd5dOPaz1mCZ0SH3JV6iFw81PldE/PEB1hWVEA288HPt4WXW8O7AWxB10M+03QQ==",
       "dev": true
       "dev": true
     },
     },
     "node_modules/import-fresh": {
     "node_modules/import-fresh": {
@@ -2787,9 +2734,9 @@
       "dev": true
       "dev": true
     },
     },
     "node_modules/lru-cache": {
     "node_modules/lru-cache": {
-      "version": "10.2.0",
-      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz",
-      "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==",
+      "version": "10.2.2",
+      "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz",
+      "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==",
       "dev": true,
       "dev": true,
       "engines": {
       "engines": {
         "node": "14 || >=16.14"
         "node": "14 || >=16.14"
@@ -2967,9 +2914,9 @@
       }
       }
     },
     },
     "node_modules/minipass": {
     "node_modules/minipass": {
-      "version": "7.0.4",
-      "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz",
-      "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==",
+      "version": "7.1.1",
+      "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.1.tgz",
+      "integrity": "sha512-UZ7eQ+h8ywIRAW1hIEl2AqdwzJucU/Kp59+8kkZeSvafXhZjul247BvIJjEVFVeON6d7lM46XX1HXCduKAS8VA==",
       "dev": true,
       "dev": true,
       "engines": {
       "engines": {
         "node": ">=16 || 14 >=14.17"
         "node": ">=16 || 14 >=14.17"
@@ -3109,17 +3056,17 @@
       }
       }
     },
     },
     "node_modules/optionator": {
     "node_modules/optionator": {
-      "version": "0.9.3",
-      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz",
-      "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==",
+      "version": "0.9.4",
+      "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz",
+      "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==",
       "dev": true,
       "dev": true,
       "dependencies": {
       "dependencies": {
-        "@aashutoshrathi/word-wrap": "^1.2.3",
         "deep-is": "^0.1.3",
         "deep-is": "^0.1.3",
         "fast-levenshtein": "^2.0.6",
         "fast-levenshtein": "^2.0.6",
         "levn": "^0.4.1",
         "levn": "^0.4.1",
         "prelude-ls": "^1.2.1",
         "prelude-ls": "^1.2.1",
-        "type-check": "^0.4.0"
+        "type-check": "^0.4.0",
+        "word-wrap": "^1.2.5"
       },
       },
       "engines": {
       "engines": {
         "node": ">= 0.8.0"
         "node": ">= 0.8.0"
@@ -3219,16 +3166,16 @@
       "dev": true
       "dev": true
     },
     },
     "node_modules/path-scurry": {
     "node_modules/path-scurry": {
-      "version": "1.10.2",
-      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.2.tgz",
-      "integrity": "sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==",
+      "version": "1.11.1",
+      "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz",
+      "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==",
       "dev": true,
       "dev": true,
       "dependencies": {
       "dependencies": {
         "lru-cache": "^10.2.0",
         "lru-cache": "^10.2.0",
         "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
         "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0"
       },
       },
       "engines": {
       "engines": {
-        "node": ">=16 || 14 >=14.17"
+        "node": ">=16 || 14 >=14.18"
       },
       },
       "funding": {
       "funding": {
         "url": "https://github.com/sponsors/isaacs"
         "url": "https://github.com/sponsors/isaacs"
@@ -3244,9 +3191,9 @@
       }
       }
     },
     },
     "node_modules/picocolors": {
     "node_modules/picocolors": {
-      "version": "1.0.0",
-      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz",
-      "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==",
+      "version": "1.0.1",
+      "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz",
+      "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==",
       "dev": true
       "dev": true
     },
     },
     "node_modules/picomatch": {
     "node_modules/picomatch": {
@@ -3648,9 +3595,9 @@
       }
       }
     },
     },
     "node_modules/sass": {
     "node_modules/sass": {
-      "version": "1.76.0",
-      "resolved": "https://registry.npmjs.org/sass/-/sass-1.76.0.tgz",
-      "integrity": "sha512-nc3LeqvF2FNW5xGF1zxZifdW3ffIz5aBb7I7tSvOoNu7z1RQ6pFt9MBuiPtjgaI62YWrM/txjWlOCFiGtf2xpw==",
+      "version": "1.77.1",
+      "resolved": "https://registry.npmjs.org/sass/-/sass-1.77.1.tgz",
+      "integrity": "sha512-OMEyfirt9XEfyvocduUIOlUSkWOXS/LAt6oblR/ISXCTukyavjex+zQNm51pPCOiFKY1QpWvEH1EeCkgyV3I6w==",
       "dev": true,
       "dev": true,
       "dependencies": {
       "dependencies": {
         "chokidar": ">=3.0.0 <4.0.0",
         "chokidar": ">=3.0.0 <4.0.0",
@@ -3958,9 +3905,9 @@
       "dev": true
       "dev": true
     },
     },
     "node_modules/stylelint": {
     "node_modules/stylelint": {
-      "version": "16.4.0",
-      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.4.0.tgz",
-      "integrity": "sha512-uSx7VMuXwLuYcNSIg+0/fFNv0WinsfLAqsVVy7h7p80clKOHiGE8pfY6UjqwylTHiJrRIahTl6a8FPxGezhWoA==",
+      "version": "16.5.0",
+      "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.5.0.tgz",
+      "integrity": "sha512-IlCBtVrG+qTy3v+tZTk50W8BIomjY/RUuzdrDqdnlCYwVuzXtPbiGfxYqtyYAyOMcb+195zRsuHn6tgfPmFfbw==",
       "dev": true,
       "dev": true,
       "dependencies": {
       "dependencies": {
         "@csstools/css-parser-algorithms": "^2.6.1",
         "@csstools/css-parser-algorithms": "^2.6.1",
@@ -4063,12 +4010,12 @@
       }
       }
     },
     },
     "node_modules/stylelint-scss": {
     "node_modules/stylelint-scss": {
-      "version": "6.2.1",
-      "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.2.1.tgz",
-      "integrity": "sha512-ZoGLbVb1keZYRVGQlhB8G6sZOoNqw61whzzzGFWp05N12ErqLFfBv3JPrXiMLZaW98sBS7K/vUQhRnvUj4vwdw==",
+      "version": "6.3.0",
+      "resolved": "https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-6.3.0.tgz",
+      "integrity": "sha512-8OSpiuf1xC7f8kllJsBOFAOYp/mR/C1FXMVeOFjtJPw+AFvEmC93FaklHt7MlOqU4poxuQ1TkYMyfI0V+1SxjA==",
       "dev": true,
       "dev": true,
       "dependencies": {
       "dependencies": {
-        "known-css-properties": "^0.29.0",
+        "known-css-properties": "^0.30.0",
         "postcss-media-query-parser": "^0.2.3",
         "postcss-media-query-parser": "^0.2.3",
         "postcss-resolve-nested-selector": "^0.1.1",
         "postcss-resolve-nested-selector": "^0.1.1",
         "postcss-selector-parser": "^6.0.15",
         "postcss-selector-parser": "^6.0.15",
@@ -4081,12 +4028,6 @@
         "stylelint": "^16.0.2"
         "stylelint": "^16.0.2"
       }
       }
     },
     },
-    "node_modules/stylelint-scss/node_modules/known-css-properties": {
-      "version": "0.29.0",
-      "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz",
-      "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==",
-      "dev": true
-    },
     "node_modules/stylelint/node_modules/balanced-match": {
     "node_modules/stylelint/node_modules/balanced-match": {
       "version": "2.0.0",
       "version": "2.0.0",
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
       "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz",
@@ -4246,15 +4187,15 @@
       }
       }
     },
     },
     "node_modules/table/node_modules/ajv": {
     "node_modules/table/node_modules/ajv": {
-      "version": "8.12.0",
-      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz",
-      "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==",
+      "version": "8.13.0",
+      "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.13.0.tgz",
+      "integrity": "sha512-PRA911Blj99jR5RMeTunVbNXMF6Lp4vZXnk5GQjcnUWUTsrXtekg/pnmFFI2u/I36Y/2bITGS30GZCXei6uNkA==",
       "dev": true,
       "dev": true,
       "dependencies": {
       "dependencies": {
-        "fast-deep-equal": "^3.1.1",
+        "fast-deep-equal": "^3.1.3",
         "json-schema-traverse": "^1.0.0",
         "json-schema-traverse": "^1.0.0",
         "require-from-string": "^2.0.2",
         "require-from-string": "^2.0.2",
-        "uri-js": "^4.2.2"
+        "uri-js": "^4.4.1"
       },
       },
       "funding": {
       "funding": {
         "type": "github",
         "type": "github",
@@ -4506,6 +4447,15 @@
         "url": "https://github.com/sponsors/ljharb"
         "url": "https://github.com/sponsors/ljharb"
       }
       }
     },
     },
+    "node_modules/word-wrap": {
+      "version": "1.2.5",
+      "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz",
+      "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==",
+      "dev": true,
+      "engines": {
+        "node": ">=0.10.0"
+      }
+    },
     "node_modules/wrap-ansi": {
     "node_modules/wrap-ansi": {
       "version": "8.1.0",
       "version": "8.1.0",
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
       "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz",
@@ -4619,12 +4569,6 @@
         "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
         "node": "^14.17.0 || ^16.13.0 || >=18.0.0"
       }
       }
     },
     },
-    "node_modules/yallist": {
-      "version": "4.0.0",
-      "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz",
-      "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==",
-      "dev": true
-    },
     "node_modules/yocto-queue": {
     "node_modules/yocto-queue": {
       "version": "0.1.0",
       "version": "0.1.0",
       "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",
       "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz",

+ 1 - 1
package.json

@@ -19,7 +19,7 @@
   },
   },
   "license": "AGPL-3.0",
   "license": "AGPL-3.0",
   "engines": {
   "engines": {
-    "node": ">=12"
+    "node": ">=16"
   },
   },
   "scripts": {
   "scripts": {
     "eslint": "eslint --ext .js .",
     "eslint": "eslint --ext .js .",