diff --git a/eslint.config.js b/eslint.config.js
index 5a6e4694..4367aab5 100644
--- a/eslint.config.js
+++ b/eslint.config.js
@@ -148,6 +148,7 @@ export default tseslint.config(
allowNamedFunctions: true,
},
],
+ "prefer-const": "off",
"prefer-exponentiation-operator": "error",
"prefer-object-spread": "error",
"prefer-regex-literals": "error",
@@ -165,14 +166,17 @@ export default tseslint.config(
},
],
"svelte/button-has-type": "error",
+ "svelte/consistent-selector-style": [
+ "error",
+ {
+ style: ["type", "class"],
+ },
+ ],
"svelte/derived-has-same-inputs-outputs": "error",
- "svelte/infinite-reactive-loop": "error",
- "svelte/no-dom-manipulating": "error",
- "svelte/no-dupe-use-directives": "error",
"svelte/no-extra-reactive-curlies": "error",
"svelte/no-ignored-unsubscribe": "error",
"svelte/no-inline-styles": "error",
- "svelte/no-store-async": "error",
+ "svelte/no-navigation-without-base": "error",
"svelte/no-target-blank": "error",
"svelte/no-unused-class-name": [
"error",
@@ -180,24 +184,22 @@ export default tseslint.config(
allowedClassNames: ["mdc-typography--subtitle2"],
},
],
- "svelte/no-useless-mustaches": "error",
"svelte/prefer-class-directive": "error",
+ "svelte/prefer-const": "error",
"svelte/prefer-destructured-store-props": "error",
"svelte/prefer-style-directive": "error",
- "svelte/require-each-key": "error",
"svelte/require-optimized-style-attribute": "error",
"svelte/require-store-callbacks-use-set-param": "error",
- "svelte/require-store-reactive-access": "error",
"svelte/require-stores-init": "error",
"svelte/shorthand-attribute": "error",
"svelte/shorthand-directive": "error",
"svelte/sort-attributes": "error",
"svelte/spaced-html-comment": "error",
- "svelte/valid-each-key": "error",
+ "svelte/valid-style-parse": "error",
},
},
{
- files: ["**/*.svelte", "*.svelte"],
+ files: ["**/*.svelte", "**/*.svelte.ts"],
languageOptions: {
globals: {
google: "readonly",
diff --git a/package-lock.json b/package-lock.json
index e501c1ac..ae5f80eb 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -35,7 +35,7 @@
"eslint-plugin-playwright": "^2.2.0",
"eslint-plugin-prefer-arrow-functions": "^3.6.2",
"eslint-plugin-prettier": "^5.2.3",
- "eslint-plugin-svelte": "^2.46.1",
+ "eslint-plugin-svelte": "^3.1.0",
"npm-run-all": "^4.1.5",
"nyc": "^17.1.0",
"playwright": "^1.49.1",
@@ -5629,9 +5629,9 @@
}
},
"node_modules/eslint-compat-utils": {
- "version": "0.5.1",
- "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz",
- "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==",
+ "version": "0.6.4",
+ "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.6.4.tgz",
+ "integrity": "sha512-/u+GQt8NMfXO8w17QendT4gvO5acfxQsAKirAt0LVxDnr2N8YLCVbregaNc/Yhp7NM128DwCaRvr8PLDfeNkQw==",
"dev": true,
"license": "MIT",
"dependencies": {
@@ -6000,95 +6000,31 @@
}
},
"node_modules/eslint-plugin-svelte": {
- "version": "2.46.1",
- "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.46.1.tgz",
- "integrity": "sha512-7xYr2o4NID/f9OEYMqxsEQsCsj4KaMy4q5sANaKkAb6/QeCjYFxRmDm2S3YC3A3pl1kyPZ/syOx/i7LcWYSbIw==",
+ "version": "3.1.0",
+ "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-3.1.0.tgz",
+ "integrity": "sha512-hSQyLDkuuHPJby1ixZfUVrfLON42mT0Odf18MbwAgFUPuyIwJlhy3acUY1/bxt+Njucq/dQxR543zYDqkBNLmw==",
"dev": true,
"license": "MIT",
"dependencies": {
- "@eslint-community/eslint-utils": "^4.4.0",
- "@jridgewell/sourcemap-codec": "^1.4.15",
- "eslint-compat-utils": "^0.5.1",
+ "@eslint-community/eslint-utils": "^4.4.1",
+ "@jridgewell/sourcemap-codec": "^1.5.0",
+ "eslint-compat-utils": "^0.6.4",
"esutils": "^2.0.3",
"known-css-properties": "^0.35.0",
- "postcss": "^8.4.38",
+ "postcss": "^8.4.49",
"postcss-load-config": "^3.1.4",
- "postcss-safe-parser": "^6.0.0",
- "postcss-selector-parser": "^6.1.0",
- "semver": "^7.6.2",
- "svelte-eslint-parser": "^0.43.0"
- },
- "engines": {
- "node": "^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://github.com/sponsors/ota-meshi"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0-0 || ^9.0.0-0",
- "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0"
- },
- "peerDependenciesMeta": {
- "svelte": {
- "optional": true
- }
- }
- },
- "node_modules/eslint-plugin-svelte/node_modules/eslint-scope": {
- "version": "7.2.2",
- "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
- "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "esrecurse": "^4.3.0",
- "estraverse": "^5.2.0"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-plugin-svelte/node_modules/espree": {
- "version": "9.6.1",
- "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz",
- "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "acorn": "^8.9.0",
- "acorn-jsx": "^5.3.2",
- "eslint-visitor-keys": "^3.4.1"
+ "postcss-safe-parser": "^7.0.0",
+ "semver": "^7.6.3",
+ "svelte-eslint-parser": "^1.0.1"
},
"engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
- },
- "funding": {
- "url": "https://opencollective.com/eslint"
- }
- },
- "node_modules/eslint-plugin-svelte/node_modules/svelte-eslint-parser": {
- "version": "0.43.0",
- "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.43.0.tgz",
- "integrity": "sha512-GpU52uPKKcVnh8tKN5P4UZpJ/fUDndmq7wfsvoVXsyP+aY0anol7Yqo01fyrlaWGMFfm4av5DyrjlaXdLRJvGA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "eslint-scope": "^7.2.2",
- "eslint-visitor-keys": "^3.4.3",
- "espree": "^9.6.1",
- "postcss": "^8.4.39",
- "postcss-scss": "^4.0.9"
- },
- "engines": {
- "node": "^12.22.0 || ^14.17.0 || >=16.0.0"
+ "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
},
"funding": {
"url": "https://github.com/sponsors/ota-meshi"
},
"peerDependencies": {
+ "eslint": "^8.57.1 || ^9.0.0",
"svelte": "^3.37.0 || ^4.0.0 || ^5.0.0"
},
"peerDependenciesMeta": {
@@ -10421,20 +10357,30 @@
}
},
"node_modules/postcss-safe-parser": {
- "version": "6.0.0",
- "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz",
- "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==",
+ "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"
+ }
+ ],
"license": "MIT",
"engines": {
- "node": ">=12.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/postcss/"
+ "node": ">=18.0"
},
"peerDependencies": {
- "postcss": "^8.3.3"
+ "postcss": "^8.4.31"
}
},
"node_modules/postcss-scss": {
@@ -10464,20 +10410,6 @@
"postcss": "^8.4.29"
}
},
- "node_modules/postcss-selector-parser": {
- "version": "6.1.2",
- "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz",
- "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "cssesc": "^3.0.0",
- "util-deprecate": "^1.0.2"
- },
- "engines": {
- "node": ">=4"
- }
- },
"node_modules/prelude-ls": {
"version": "1.2.1",
"resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz",
diff --git a/package.json b/package.json
index b5aca643..85941e11 100644
--- a/package.json
+++ b/package.json
@@ -40,7 +40,7 @@
"eslint-plugin-playwright": "^2.2.0",
"eslint-plugin-prefer-arrow-functions": "^3.6.2",
"eslint-plugin-prettier": "^5.2.3",
- "eslint-plugin-svelte": "^2.46.1",
+ "eslint-plugin-svelte": "^3.1.0",
"npm-run-all": "^4.1.5",
"nyc": "^17.1.0",
"playwright": "^1.49.1",
diff --git a/src/frontend/App.svelte b/src/frontend/App.svelte
index e4efc8a4..2c163708 100644
--- a/src/frontend/App.svelte
+++ b/src/frontend/App.svelte
@@ -148,7 +148,7 @@