From 7d14a1c844bcdba61a380f0212802cb03acaa4c8 Mon Sep 17 00:00:00 2001 From: Dion Date: Mon, 16 Dec 2024 11:29:59 +0100 Subject: [PATCH 01/30] ClientApp Eslint changes --- .../build-tools/clientapp-vite-update.js | 44 +- starsky/starsky/clientapp/eslint.config.js | 14 + starsky/starsky/clientapp/package-lock.json | 3470 +++++++++-------- starsky/starsky/clientapp/package.json | 28 +- 4 files changed, 1828 insertions(+), 1728 deletions(-) create mode 100644 starsky/starsky/clientapp/eslint.config.js diff --git a/starsky-tools/build-tools/clientapp-vite-update.js b/starsky-tools/build-tools/clientapp-vite-update.js index 389ef3346..1b0fd32ed 100644 --- a/starsky-tools/build-tools/clientapp-vite-update.js +++ b/starsky-tools/build-tools/clientapp-vite-update.js @@ -195,6 +195,10 @@ function npmUnInstall(packageName) { console.log("-result of package"); console.log(uninstall.stdout); console.log(uninstall.stout ? updateSpawn.stout : ""); + if (uninstall.status !== 0) { + console.log(uninstall.stderr); + console.log("no exit yet; FAIL - npm install " + packageName); + } } // npmUnInstall can be done here @@ -244,8 +248,10 @@ function npmInstall(packageName, force, dev) { console.log("-result of " + packageName); console.log(npmInstallSpawn.stdout); console.log(npmInstallSpawn.stout ? updateSpawn.stout : ""); - if (npmInstallSpawn.stout) { - exit(1); + if (npmInstallSpawn.status !== 0) { + console.log(npmInstallSpawn.stderr); + console.log("FAIL - npm install " + packageName); + exit(npmInstallSpawn.status); } } @@ -254,6 +260,12 @@ function npmInstall(packageName, force, dev) { console.log("next install"); // npmInstall: name, force, dev +// for conflicts +npmUnInstall('@typescript-eslint/eslint-plugin'); +npmInstall('@typescript-eslint/eslint-plugin', true, true); +npmUnInstall('@typescript-eslint/parser'); +npmInstall('@typescript-eslint/parser', true, true); + npmInstall('leaflet', false, false); npmInstall('core-js', false, false); npmInstall('react-router-dom', false, false); @@ -286,6 +298,8 @@ npmInstall('@testing-library/jest-dom', false, true); npmInstall('@testing-library/react', false, true); // @testing-library/user-event is skipped + + console.log("npm install result:"); const npmInstallSpawnResult = spawnSync( "npm", @@ -300,6 +314,11 @@ const npmInstallSpawnResult = spawnSync( ); console.log(npmInstallSpawnResult.stdout); +if (npmInstallSpawnResult.status !== 0) { + console.log(npmInstallSpawnResult.stderr); + console.log("FAIL - npm install"); + exit(npmInstallSpawnResult.status); +} // clean afterwards if (process.env.DEBUG !== "true") { @@ -318,21 +337,42 @@ const lintSpawn = spawnSync("npm", ["run", "lint:fix"], { }); console.log(lintSpawn.stdout); +if (lintSpawn.status !== 0) { + console.log(lintSpawn.stderr); + console.log("FAIL -lint project"); + exit(lintSpawn.status); +} + console.log("next: build project"); + const buildSpawn = spawnSync("npm", ["run", "build"], { cwd: clientAppFolderPath, env: process.env, encoding: "utf-8", }); + console.log(buildSpawn.stdout); +if (buildSpawn.status !== 0) { + console.log(buildSpawn.stderr); + console.log("FAIL -build project"); + exit(buildSpawn.status); +} console.log("next: test project"); + const testSpawn = spawnSync("npm", ["run", "test:ci"], { cwd: clientAppFolderPath, env: process.env, encoding: "utf-8", }); + console.log(testSpawn.stdout); +if (testSpawn.status !== 0) { + console.log(testSpawn.stderr); + console.log("FAIL -test project"); + exit(testSpawn.status); +} + console.log("done"); diff --git a/starsky/starsky/clientapp/eslint.config.js b/starsky/starsky/clientapp/eslint.config.js new file mode 100644 index 000000000..ac5942f58 --- /dev/null +++ b/starsky/starsky/clientapp/eslint.config.js @@ -0,0 +1,14 @@ +import globals from "globals"; +import pluginJs from "@eslint/js"; +import tseslint from "typescript-eslint"; +import pluginReact from "eslint-plugin-react"; + + +/** @type {import('eslint').Linter.Config[]} */ +export default [ + {files: ["**/*.{js,mjs,cjs,ts,jsx,tsx}"]}, + {languageOptions: { globals: globals.browser }}, + pluginJs.configs.recommended, + ...tseslint.configs.recommended, + pluginReact.configs.flat.recommended, +]; \ No newline at end of file diff --git a/starsky/starsky/clientapp/package-lock.json b/starsky/starsky/clientapp/package-lock.json index d92da963e..a77c02b31 100644 --- a/starsky/starsky/clientapp/package-lock.json +++ b/starsky/starsky/clientapp/package-lock.json @@ -15,21 +15,21 @@ "react-router-dom": "^6.28.0" }, "devDependencies": { - "@storybook/addon-essentials": "^8.4.4", - "@storybook/addon-interactions": "^8.4.4", - "@storybook/addon-links": "^8.4.4", - "@storybook/builder-vite": "^8.4.4", - "@storybook/react": "^8.4.4", - "@storybook/react-vite": "^8.4.6", + "@storybook/addon-essentials": "^8.4.7", + "@storybook/addon-interactions": "^8.4.7", + "@storybook/addon-links": "^8.4.7", + "@storybook/builder-vite": "^8.4.7", + "@storybook/react": "^8.4.7", + "@storybook/react-vite": "^8.4.7", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^14.3.1", "@types/jest": "^29.5.14", - "@types/leaflet": "^1.9.14", - "@types/node": "^20.17.6", + "@types/leaflet": "^1.9.15", + "@types/node": "^20.17.10", "@types/react": "^18.2.55", "@types/react-dom": "^18.2.18", - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^6.21.0", + "@typescript-eslint/eslint-plugin": "^8.18.0", + "@typescript-eslint/parser": "^8.18.0", "@vitejs/plugin-react": "^4.2.1", "eslint": "^8.57.1", "eslint-config-prettier": "^9.1.0", @@ -38,14 +38,14 @@ "eslint-plugin-react": "^7.37.2", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.5", - "eslint-plugin-storybook": "^0.11.0", - "eslint-plugin-testing-library": "^6.4.0", + "eslint-plugin-storybook": "^0.11.1", + "eslint-plugin-testing-library": "^6.5.0", "identity-obj-proxy": "^3.0.0", "isomorphic-fetch": "^3.0.0", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", - "prettier": "^3.3.3", - "storybook": "^8.4.4", + "prettier": "^3.4.2", + "storybook": "^8.4.7", "ts-jest": "^29.2.5", "ts-node": "^10.9.2", "typescript": "^5.3.3", @@ -89,9 +89,9 @@ } }, "node_modules/@babel/compat-data": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.2.tgz", - "integrity": "sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.26.3.tgz", + "integrity": "sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==", "dev": true, "license": "MIT", "engines": { @@ -130,14 +130,14 @@ } }, "node_modules/@babel/generator": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.2.tgz", - "integrity": "sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.26.3.tgz", + "integrity": "sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==", "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.26.2", - "@babel/types": "^7.26.0", + "@babel/parser": "^7.26.3", + "@babel/types": "^7.26.3", "@jridgewell/gen-mapping": "^0.3.5", "@jridgewell/trace-mapping": "^0.3.25", "jsesc": "^3.0.2" @@ -250,13 +250,13 @@ } }, "node_modules/@babel/parser": { - "version": "7.26.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.2.tgz", - "integrity": "sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.26.3.tgz", + "integrity": "sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.26.0" + "@babel/types": "^7.26.3" }, "bin": { "parser": "bin/babel-parser.js" @@ -565,17 +565,17 @@ } }, "node_modules/@babel/traverse": { - "version": "7.25.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.25.9.tgz", - "integrity": "sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==", + "version": "7.26.4", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.26.4.tgz", + "integrity": "sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.25.9", - "@babel/generator": "^7.25.9", - "@babel/parser": "^7.25.9", + "@babel/code-frame": "^7.26.2", + "@babel/generator": "^7.26.3", + "@babel/parser": "^7.26.3", "@babel/template": "^7.25.9", - "@babel/types": "^7.25.9", + "@babel/types": "^7.26.3", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -594,9 +594,9 @@ } }, "node_modules/@babel/types": { - "version": "7.26.0", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.0.tgz", - "integrity": "sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==", + "version": "7.26.3", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.26.3.tgz", + "integrity": "sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==", "dev": true, "license": "MIT", "dependencies": { @@ -639,9 +639,9 @@ } }, "node_modules/@esbuild/aix-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", - "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.0.tgz", + "integrity": "sha512-WtKdFM7ls47zkKHFVzMz8opM7LkcsIp9amDUBIAWirg70RM71WRSjdILPsY5Uv1D42ZpUfaPILDlfactHgsRkw==", "cpu": [ "ppc64" ], @@ -652,13 +652,13 @@ "aix" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", - "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.0.tgz", + "integrity": "sha512-arAtTPo76fJ/ICkXWetLCc9EwEHKaeya4vMrReVlEIUCAUncH7M4bhMQ+M9Vf+FFOZJdTNMXNBrWwW+OXWpSew==", "cpu": [ "arm" ], @@ -669,13 +669,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", - "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.0.tgz", + "integrity": "sha512-Vsm497xFM7tTIPYK9bNTYJyF/lsP590Qc1WxJdlB6ljCbdZKU9SY8i7+Iin4kyhV/KV5J2rOKsBQbB77Ab7L/w==", "cpu": [ "arm64" ], @@ -686,13 +686,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/android-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", - "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.0.tgz", + "integrity": "sha512-t8GrvnFkiIY7pa7mMgJd7p8p8qqYIz1NYiAoKc75Zyv73L3DZW++oYMSHPRarcotTKuSs6m3hTOa5CKHaS02TQ==", "cpu": [ "x64" ], @@ -703,13 +703,13 @@ "android" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", - "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.0.tgz", + "integrity": "sha512-CKyDpRbK1hXwv79soeTJNHb5EiG6ct3efd/FTPdzOWdbZZfGhpbcqIpiD0+vwmpu0wTIL97ZRPZu8vUt46nBSw==", "cpu": [ "arm64" ], @@ -720,13 +720,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", - "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.0.tgz", + "integrity": "sha512-rgtz6flkVkh58od4PwTRqxbKH9cOjaXCMZgWD905JOzjFKW+7EiUObfd/Kav+A6Gyud6WZk9w+xu6QLytdi2OA==", "cpu": [ "x64" ], @@ -737,13 +737,13 @@ "darwin" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", - "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.0.tgz", + "integrity": "sha512-6Mtdq5nHggwfDNLAHkPlyLBpE5L6hwsuXZX8XNmHno9JuL2+bg2BX5tRkwjyfn6sKbxZTq68suOjgWqCicvPXA==", "cpu": [ "arm64" ], @@ -754,13 +754,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", - "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.0.tgz", + "integrity": "sha512-D3H+xh3/zphoX8ck4S2RxKR6gHlHDXXzOf6f/9dbFt/NRBDIE33+cVa49Kil4WUjxMGW0ZIYBYtaGCa2+OsQwQ==", "cpu": [ "x64" ], @@ -771,13 +771,13 @@ "freebsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", - "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.0.tgz", + "integrity": "sha512-gJKIi2IjRo5G6Glxb8d3DzYXlxdEj2NlkixPsqePSZMhLudqPhtZ4BUrpIuTjJYXxvF9njql+vRjB2oaC9XpBw==", "cpu": [ "arm" ], @@ -788,13 +788,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", - "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.0.tgz", + "integrity": "sha512-TDijPXTOeE3eaMkRYpcy3LarIg13dS9wWHRdwYRnzlwlA370rNdZqbcp0WTyyV/k2zSxfko52+C7jU5F9Tfj1g==", "cpu": [ "arm64" ], @@ -805,13 +805,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", - "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.0.tgz", + "integrity": "sha512-K40ip1LAcA0byL05TbCQ4yJ4swvnbzHscRmUilrmP9Am7//0UjPreh4lpYzvThT2Quw66MhjG//20mrufm40mA==", "cpu": [ "ia32" ], @@ -822,13 +822,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", - "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.0.tgz", + "integrity": "sha512-0mswrYP/9ai+CU0BzBfPMZ8RVm3RGAN/lmOMgW4aFUSOQBjA31UP8Mr6DDhWSuMwj7jaWOT0p0WoZ6jeHhrD7g==", "cpu": [ "loong64" ], @@ -839,13 +839,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", - "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.0.tgz", + "integrity": "sha512-hIKvXm0/3w/5+RDtCJeXqMZGkI2s4oMUGj3/jM0QzhgIASWrGO5/RlzAzm5nNh/awHE0A19h/CvHQe6FaBNrRA==", "cpu": [ "mips64el" ], @@ -856,13 +856,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", - "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.0.tgz", + "integrity": "sha512-HcZh5BNq0aC52UoocJxaKORfFODWXZxtBaaZNuN3PUX3MoDsChsZqopzi5UupRhPHSEHotoiptqikjN/B77mYQ==", "cpu": [ "ppc64" ], @@ -873,13 +873,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", - "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.0.tgz", + "integrity": "sha512-bEh7dMn/h3QxeR2KTy1DUszQjUrIHPZKyO6aN1X4BCnhfYhuQqedHaa5MxSQA/06j3GpiIlFGSsy1c7Gf9padw==", "cpu": [ "riscv64" ], @@ -890,13 +890,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", - "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.0.tgz", + "integrity": "sha512-ZcQ6+qRkw1UcZGPyrCiHHkmBaj9SiCD8Oqd556HldP+QlpUIe2Wgn3ehQGVoPOvZvtHm8HPx+bH20c9pvbkX3g==", "cpu": [ "s390x" ], @@ -907,13 +907,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/linux-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", - "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.0.tgz", + "integrity": "sha512-vbutsFqQ+foy3wSSbmjBXXIJ6PL3scghJoM8zCL142cGaZKAdCZHyf+Bpu/MmX9zT9Q0zFBVKb36Ma5Fzfa8xA==", "cpu": [ "x64" ], @@ -924,13 +924,13 @@ "linux" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", - "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.0.tgz", + "integrity": "sha512-hjQ0R/ulkO8fCYFsG0FZoH+pWgTTDreqpqY7UnQntnaKv95uP5iW3+dChxnx7C3trQQU40S+OgWhUVwCjVFLvg==", "cpu": [ "x64" ], @@ -941,13 +941,30 @@ "netbsd" ], "engines": { - "node": ">=12" + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.0.tgz", + "integrity": "sha512-MD9uzzkPQbYehwcN583yx3Tu5M8EIoTD+tUgKF982WYL9Pf5rKy9ltgD0eUgs8pvKnmizxjXZyLt0z6DC3rRXg==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", - "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.0.tgz", + "integrity": "sha512-4ir0aY1NGUhIC1hdoCzr1+5b43mw99uNwVzhIq1OY3QcEwPDO3B7WNXBzaKY5Nsf1+N11i1eOfFcq+D/gOS15Q==", "cpu": [ "x64" ], @@ -958,13 +975,13 @@ "openbsd" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", - "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.0.tgz", + "integrity": "sha512-jVzdzsbM5xrotH+W5f1s+JtUy1UWgjU0Cf4wMvffTB8m6wP5/kx0KiaLHlbJO+dMgtxKV8RQ/JvtlFcdZ1zCPA==", "cpu": [ "x64" ], @@ -975,13 +992,13 @@ "sunos" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", - "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.0.tgz", + "integrity": "sha512-iKc8GAslzRpBytO2/aN3d2yb2z8XTVfNV0PjGlCxKo5SgWmNXx82I/Q3aG1tFfS+A2igVCY97TJ8tnYwpUWLCA==", "cpu": [ "arm64" ], @@ -992,13 +1009,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", - "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.0.tgz", + "integrity": "sha512-vQW36KZolfIudCcTnaTpmLQ24Ha1RjygBo39/aLkM2kmjkWmZGEJ5Gn9l5/7tzXA42QGIoWbICfg6KLLkIw6yw==", "cpu": [ "ia32" ], @@ -1009,13 +1026,13 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@esbuild/win32-x64": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", - "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.0.tgz", + "integrity": "sha512-7IAFPrjSQIJrGsK6flwg7NFmwBoSTyF3rl7If0hNUFQU4ilTsEPL6GuMuU9BfIWVVGuRnuIidkSMC+c0Otu8IA==", "cpu": [ "x64" ], @@ -1026,7 +1043,7 @@ "win32" ], "engines": { - "node": ">=12" + "node": ">=18" } }, "node_modules/@eslint-community/eslint-utils": { @@ -1048,6 +1065,19 @@ "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@eslint-community/regexpp": { "version": "4.12.1", "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", @@ -1608,9 +1638,9 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", - "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "version": "0.3.8", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.8.tgz", + "integrity": "sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==", "dev": true, "license": "MIT", "dependencies": { @@ -1739,9 +1769,9 @@ } }, "node_modules/@rollup/pluginutils": { - "version": "5.1.3", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.3.tgz", - "integrity": "sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==", + "version": "5.1.4", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.4.tgz", + "integrity": "sha512-USm05zrsFxYLPdWWq+K3STlWiT/3ELn3RcV5hJMghpeAIhxfsUIg6mt12CBJBInWMV4VneoV7SfGv8xIwo2qNQ==", "dev": true, "license": "MIT", "dependencies": { @@ -1775,9 +1805,9 @@ } }, "node_modules/@rollup/rollup-android-arm-eabi": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.26.0.tgz", - "integrity": "sha512-gJNwtPDGEaOEgejbaseY6xMFu+CPltsc8/T+diUTTbOQLqD+bnrJq9ulH6WD69TqwqWmrfRAtUv30cCFZlbGTQ==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.28.1.tgz", + "integrity": "sha512-2aZp8AES04KI2dy3Ss6/MDjXbwBzj+i0GqKtWXgw2/Ma6E4jJvujryO6gJAghIRVz7Vwr9Gtl/8na3nDUKpraQ==", "cpu": [ "arm" ], @@ -1789,9 +1819,9 @@ ] }, "node_modules/@rollup/rollup-android-arm64": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.26.0.tgz", - "integrity": "sha512-YJa5Gy8mEZgz5JquFruhJODMq3lTHWLm1fOy+HIANquLzfIOzE9RA5ie3JjCdVb9r46qfAQY/l947V0zfGJ0OQ==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.28.1.tgz", + "integrity": "sha512-EbkK285O+1YMrg57xVA+Dp0tDBRB93/BZKph9XhMjezf6F4TpYjaUSuPt5J0fZXlSag0LmZAsTmdGGqPp4pQFA==", "cpu": [ "arm64" ], @@ -1803,9 +1833,9 @@ ] }, "node_modules/@rollup/rollup-darwin-arm64": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.26.0.tgz", - "integrity": "sha512-ErTASs8YKbqTBoPLp/kA1B1Um5YSom8QAc4rKhg7b9tyyVqDBlQxy7Bf2wW7yIlPGPg2UODDQcbkTlruPzDosw==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.28.1.tgz", + "integrity": "sha512-prduvrMKU6NzMq6nxzQw445zXgaDBbMQvmKSJaxpaZ5R1QDM8w+eGxo6Y/jhT/cLoCvnZI42oEqf9KQNYz1fqQ==", "cpu": [ "arm64" ], @@ -1817,9 +1847,9 @@ ] }, "node_modules/@rollup/rollup-darwin-x64": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.26.0.tgz", - "integrity": "sha512-wbgkYDHcdWW+NqP2mnf2NOuEbOLzDblalrOWcPyY6+BRbVhliavon15UploG7PpBRQ2bZJnbmh8o3yLoBvDIHA==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.28.1.tgz", + "integrity": "sha512-WsvbOunsUk0wccO/TV4o7IKgloJ942hVFK1CLatwv6TJspcCZb9umQkPdvB7FihmdxgaKR5JyxDjWpCOp4uZlQ==", "cpu": [ "x64" ], @@ -1831,9 +1861,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-arm64": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.26.0.tgz", - "integrity": "sha512-Y9vpjfp9CDkAG4q/uwuhZk96LP11fBz/bYdyg9oaHYhtGZp7NrbkQrj/66DYMMP2Yo/QPAsVHkV891KyO52fhg==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-arm64/-/rollup-freebsd-arm64-4.28.1.tgz", + "integrity": "sha512-HTDPdY1caUcU4qK23FeeGxCdJF64cKkqajU0iBnTVxS8F7H/7BewvYoG+va1KPSL63kQ1PGNyiwKOfReavzvNA==", "cpu": [ "arm64" ], @@ -1845,9 +1875,9 @@ ] }, "node_modules/@rollup/rollup-freebsd-x64": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.26.0.tgz", - "integrity": "sha512-A/jvfCZ55EYPsqeaAt/yDAG4q5tt1ZboWMHEvKAH9Zl92DWvMIbnZe/f/eOXze65aJaaKbL+YeM0Hz4kLQvdwg==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-freebsd-x64/-/rollup-freebsd-x64-4.28.1.tgz", + "integrity": "sha512-m/uYasxkUevcFTeRSM9TeLyPe2QDuqtjkeoTpP9SW0XxUWfcYrGDMkO/m2tTw+4NMAF9P2fU3Mw4ahNvo7QmsQ==", "cpu": [ "x64" ], @@ -1859,9 +1889,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-gnueabihf": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.26.0.tgz", - "integrity": "sha512-paHF1bMXKDuizaMODm2bBTjRiHxESWiIyIdMugKeLnjuS1TCS54MF5+Y5Dx8Ui/1RBPVRE09i5OUlaLnv8OGnA==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.28.1.tgz", + "integrity": "sha512-QAg11ZIt6mcmzpNE6JZBpKfJaKkqTm1A9+y9O+frdZJEuhQxiugM05gnCWiANHj4RmbgeVJpTdmKRmH/a+0QbA==", "cpu": [ "arm" ], @@ -1873,9 +1903,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm-musleabihf": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.26.0.tgz", - "integrity": "sha512-cwxiHZU1GAs+TMxvgPfUDtVZjdBdTsQwVnNlzRXC5QzIJ6nhfB4I1ahKoe9yPmoaA/Vhf7m9dB1chGPpDRdGXg==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.28.1.tgz", + "integrity": "sha512-dRP9PEBfolq1dmMcFqbEPSd9VlRuVWEGSmbxVEfiq2cs2jlZAl0YNxFzAQS2OrQmsLBLAATDMb3Z6MFv5vOcXg==", "cpu": [ "arm" ], @@ -1887,9 +1917,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-gnu": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.26.0.tgz", - "integrity": "sha512-4daeEUQutGRCW/9zEo8JtdAgtJ1q2g5oHaoQaZbMSKaIWKDQwQ3Yx0/3jJNmpzrsScIPtx/V+1AfibLisb3AMQ==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.28.1.tgz", + "integrity": "sha512-uGr8khxO+CKT4XU8ZUH1TTEUtlktK6Kgtv0+6bIFSeiSlnGJHG1tSFSjm41uQ9sAO/5ULx9mWOz70jYLyv1QkA==", "cpu": [ "arm64" ], @@ -1901,9 +1931,9 @@ ] }, "node_modules/@rollup/rollup-linux-arm64-musl": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.26.0.tgz", - "integrity": "sha512-eGkX7zzkNxvvS05ROzJ/cO/AKqNvR/7t1jA3VZDi2vRniLKwAWxUr85fH3NsvtxU5vnUUKFHKh8flIBdlo2b3Q==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.28.1.tgz", + "integrity": "sha512-QF54q8MYGAqMLrX2t7tNpi01nvq5RI59UBNx+3+37zoKX5KViPo/gk2QLhsuqok05sSCRluj0D00LzCwBikb0A==", "cpu": [ "arm64" ], @@ -1914,10 +1944,24 @@ "linux" ] }, + "node_modules/@rollup/rollup-linux-loongarch64-gnu": { + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-loongarch64-gnu/-/rollup-linux-loongarch64-gnu-4.28.1.tgz", + "integrity": "sha512-vPul4uodvWvLhRco2w0GcyZcdyBfpfDRgNKU+p35AWEbJ/HPs1tOUrkSueVbBS0RQHAf/A+nNtDpvw95PeVKOA==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] + }, "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.26.0.tgz", - "integrity": "sha512-Odp/lgHbW/mAqw/pU21goo5ruWsytP7/HCC/liOt0zcGG0llYWKrd10k9Fj0pdj3prQ63N5yQLCLiE7HTX+MYw==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.28.1.tgz", + "integrity": "sha512-pTnTdBuC2+pt1Rmm2SV7JWRqzhYpEILML4PKODqLz+C7Ou2apEV52h19CR7es+u04KlqplggmN9sqZlekg3R1A==", "cpu": [ "ppc64" ], @@ -1929,9 +1973,9 @@ ] }, "node_modules/@rollup/rollup-linux-riscv64-gnu": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.26.0.tgz", - "integrity": "sha512-MBR2ZhCTzUgVD0OJdTzNeF4+zsVogIR1U/FsyuFerwcqjZGvg2nYe24SAHp8O5sN8ZkRVbHwlYeHqcSQ8tcYew==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.28.1.tgz", + "integrity": "sha512-vWXy1Nfg7TPBSuAncfInmAI/WZDd5vOklyLJDdIRKABcZWojNDY0NJwruY2AcnCLnRJKSaBgf/GiJfauu8cQZA==", "cpu": [ "riscv64" ], @@ -1943,9 +1987,9 @@ ] }, "node_modules/@rollup/rollup-linux-s390x-gnu": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.26.0.tgz", - "integrity": "sha512-YYcg8MkbN17fMbRMZuxwmxWqsmQufh3ZJFxFGoHjrE7bv0X+T6l3glcdzd7IKLiwhT+PZOJCblpnNlz1/C3kGQ==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.28.1.tgz", + "integrity": "sha512-/yqC2Y53oZjb0yz8PVuGOQQNOTwxcizudunl/tFs1aLvObTclTwZ0JhXF2XcPT/zuaymemCDSuuUPXJJyqeDOg==", "cpu": [ "s390x" ], @@ -1957,9 +2001,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-gnu": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.26.0.tgz", - "integrity": "sha512-ZuwpfjCwjPkAOxpjAEjabg6LRSfL7cAJb6gSQGZYjGhadlzKKywDkCUnJ+KEfrNY1jH5EEoSIKLCb572jSiglA==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.28.1.tgz", + "integrity": "sha512-fzgeABz7rrAlKYB0y2kSEiURrI0691CSL0+KXwKwhxvj92VULEDQLpBYLHpF49MSiPG4sq5CK3qHMnb9tlCjBw==", "cpu": [ "x64" ], @@ -1971,9 +2015,9 @@ ] }, "node_modules/@rollup/rollup-linux-x64-musl": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.26.0.tgz", - "integrity": "sha512-+HJD2lFS86qkeF8kNu0kALtifMpPCZU80HvwztIKnYwym3KnA1os6nsX4BGSTLtS2QVAGG1P3guRgsYyMA0Yhg==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.28.1.tgz", + "integrity": "sha512-xQTDVzSGiMlSshpJCtudbWyRfLaNiVPXt1WgdWTwWz9n0U12cI2ZVtWe/Jgwyv/6wjL7b66uu61Vg0POWVfz4g==", "cpu": [ "x64" ], @@ -1985,9 +2029,9 @@ ] }, "node_modules/@rollup/rollup-win32-arm64-msvc": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.26.0.tgz", - "integrity": "sha512-WUQzVFWPSw2uJzX4j6YEbMAiLbs0BUysgysh8s817doAYhR5ybqTI1wtKARQKo6cGop3pHnrUJPFCsXdoFaimQ==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.28.1.tgz", + "integrity": "sha512-wSXmDRVupJstFP7elGMgv+2HqXelQhuNf+IS4V+nUpNVi/GUiBgDmfwD0UGN3pcAnWsgKG3I52wMOBnk1VHr/A==", "cpu": [ "arm64" ], @@ -1999,9 +2043,9 @@ ] }, "node_modules/@rollup/rollup-win32-ia32-msvc": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.26.0.tgz", - "integrity": "sha512-D4CxkazFKBfN1akAIY6ieyOqzoOoBV1OICxgUblWxff/pSjCA2khXlASUx7mK6W1oP4McqhgcCsu6QaLj3WMWg==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.28.1.tgz", + "integrity": "sha512-ZkyTJ/9vkgrE/Rk9vhMXhf8l9D+eAhbAVbsGsXKy2ohmJaWg0LPQLnIxRdRp/bKyr8tXuPlXhIoGlEB5XpJnGA==", "cpu": [ "ia32" ], @@ -2013,9 +2057,9 @@ ] }, "node_modules/@rollup/rollup-win32-x64-msvc": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.26.0.tgz", - "integrity": "sha512-2x8MO1rm4PGEP0xWbubJW5RtbNLk3puzAMaLQd3B3JHVw4KcHlmXcO+Wewx9zCoo7EUFiMlu/aZbCJ7VjMzAag==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.28.1.tgz", + "integrity": "sha512-ZvK2jBafvttJjoIdKm/Q/Bh7IJ1Ose9IBOwpOXcOvW3ikGTQGmKDgxTC6oCAzW6PynbkKP8+um1du81XJHZ0JA==", "cpu": [ "x64" ], @@ -2054,9 +2098,9 @@ } }, "node_modules/@storybook/addon-actions": { - "version": "8.4.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.4.4.tgz", - "integrity": "sha512-+Dd6alcieS6UN7IKhXLuhyQYQMu9HG/Tdr790a4EOQKpJM1NxIMuPuUH3fAoKfa9VhtI1BxTBr7zNtzg9Akqhg==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/addon-actions/-/addon-actions-8.4.7.tgz", + "integrity": "sha512-mjtD5JxcPuW74T6h7nqMxWTvDneFtokg88p6kQ5OnC1M259iAXb//yiSZgu/quunMHPCXSiqn4FNOSgASTSbsA==", "dev": true, "license": "MIT", "dependencies": { @@ -2071,13 +2115,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.4.4" + "storybook": "^8.4.7" } }, "node_modules/@storybook/addon-backgrounds": { - "version": "8.4.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.4.4.tgz", - "integrity": "sha512-asaGD4ruIPFthyhpByQSJagvtNN7EGKdHj5yMnsMvkSXnN0r1uVkI2/Z37hmLt02Qbzf6OQiBPW5TDL+X+EEBg==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/addon-backgrounds/-/addon-backgrounds-8.4.7.tgz", + "integrity": "sha512-I4/aErqtFiazcoWyKafOAm3bLpxTj6eQuH/woSbk1Yx+EzN+Dbrgx1Updy8//bsNtKkcrXETITreqHC+a57DHQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2090,13 +2134,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.4.4" + "storybook": "^8.4.7" } }, "node_modules/@storybook/addon-controls": { - "version": "8.4.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.4.4.tgz", - "integrity": "sha512-FbZRbwJQggLz6M3zB6scCp1SDGwQ5zdiD6sjBilZzgGO5rBFqG0A8PoOyr4iPrLU2y/NZBdRrJBD+6MkaJ+yzw==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/addon-controls/-/addon-controls-8.4.7.tgz", + "integrity": "sha512-377uo5IsJgXLnQLJixa47+11V+7Wn9KcDEw+96aGCBCfLbWNH8S08tJHHnSu+jXg9zoqCAC23MetntVp6LetHA==", "dev": true, "license": "MIT", "dependencies": { @@ -2109,20 +2153,20 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.4.4" + "storybook": "^8.4.7" } }, "node_modules/@storybook/addon-docs": { - "version": "8.4.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.4.4.tgz", - "integrity": "sha512-wuHaStfpd2rkAN5Lf0qmvE3JKTHTEDbnAMTvfs9inzGBL0iAwBLjW48/ll7lLkJ2E3k/FQtaevNpuc7C52u1Bw==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/addon-docs/-/addon-docs-8.4.7.tgz", + "integrity": "sha512-NwWaiTDT5puCBSUOVuf6ME7Zsbwz7Y79WF5tMZBx/sLQ60vpmJVQsap6NSjvK1Ravhc21EsIXqemAcBjAWu80w==", "dev": true, "license": "MIT", "dependencies": { "@mdx-js/react": "^3.0.0", - "@storybook/blocks": "8.4.4", - "@storybook/csf-plugin": "8.4.4", - "@storybook/react-dom-shim": "8.4.4", + "@storybook/blocks": "8.4.7", + "@storybook/csf-plugin": "8.4.7", + "@storybook/react-dom-shim": "8.4.7", "react": "^16.8.0 || ^17.0.0 || ^18.0.0", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0", "ts-dedent": "^2.0.0" @@ -2132,25 +2176,25 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.4.4" + "storybook": "^8.4.7" } }, "node_modules/@storybook/addon-essentials": { - "version": "8.4.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.4.4.tgz", - "integrity": "sha512-0ObUQ98zZkeWqP2k3Un5jny3WxT3THgUKZUGD+mR8eq6CuTmJ3bUXWzDHreuDxQwgr8s5f04XD8IcRvjZ9IRgA==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/addon-essentials/-/addon-essentials-8.4.7.tgz", + "integrity": "sha512-+BtZHCBrYtQKILtejKxh0CDRGIgTl9PumfBOKRaihYb4FX1IjSAxoV/oo/IfEjlkF5f87vouShWsRa8EUauFDw==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/addon-actions": "8.4.4", - "@storybook/addon-backgrounds": "8.4.4", - "@storybook/addon-controls": "8.4.4", - "@storybook/addon-docs": "8.4.4", - "@storybook/addon-highlight": "8.4.4", - "@storybook/addon-measure": "8.4.4", - "@storybook/addon-outline": "8.4.4", - "@storybook/addon-toolbars": "8.4.4", - "@storybook/addon-viewport": "8.4.4", + "@storybook/addon-actions": "8.4.7", + "@storybook/addon-backgrounds": "8.4.7", + "@storybook/addon-controls": "8.4.7", + "@storybook/addon-docs": "8.4.7", + "@storybook/addon-highlight": "8.4.7", + "@storybook/addon-measure": "8.4.7", + "@storybook/addon-outline": "8.4.7", + "@storybook/addon-toolbars": "8.4.7", + "@storybook/addon-viewport": "8.4.7", "ts-dedent": "^2.0.0" }, "funding": { @@ -2158,13 +2202,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.4.4" + "storybook": "^8.4.7" } }, "node_modules/@storybook/addon-highlight": { - "version": "8.4.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.4.4.tgz", - "integrity": "sha512-k7EUxiMe8RCasmgfa6ZKx7UG6kU9RooTYGwqY5TG5xAQOzDwKn4qom+OYkT/9/6lORhJrUe2GgQLCrq/WGpS1A==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/addon-highlight/-/addon-highlight-8.4.7.tgz", + "integrity": "sha512-whQIDBd3PfVwcUCrRXvCUHWClXe9mQ7XkTPCdPo4B/tZ6Z9c6zD8JUHT76ddyHivixFLowMnA8PxMU6kCMAiNw==", "dev": true, "license": "MIT", "dependencies": { @@ -2175,19 +2219,19 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.4.4" + "storybook": "^8.4.7" } }, "node_modules/@storybook/addon-interactions": { - "version": "8.4.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-8.4.4.tgz", - "integrity": "sha512-izqcc6tY0BiKW7DYrEnoXUEH9FYDPWNfQnqqE0nVBv3BS2DoNmm8M9SB8fZx7pPfw53cMJBGt3vrlY0Wtxy1+Q==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/addon-interactions/-/addon-interactions-8.4.7.tgz", + "integrity": "sha512-fnufT3ym8ht3HHUIRVXAH47iOJW/QOb0VSM+j269gDuvyDcY03D1civCu1v+eZLGaXPKJ8vtjr0L8zKQ/4P0JQ==", "dev": true, "license": "MIT", "dependencies": { "@storybook/global": "^5.0.0", - "@storybook/instrumenter": "8.4.4", - "@storybook/test": "8.4.4", + "@storybook/instrumenter": "8.4.7", + "@storybook/test": "8.4.7", "polished": "^4.2.2", "ts-dedent": "^2.2.0" }, @@ -2196,13 +2240,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.4.4" + "storybook": "^8.4.7" } }, "node_modules/@storybook/addon-links": { - "version": "8.4.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-8.4.4.tgz", - "integrity": "sha512-hqTv06fPq9k5GUZD8JR49ANw5sBg8EYAsuCNoSd9OwVSBO/3y53HrMA0NCILUK8hnupPvtBuKXXoHmHes9R+1g==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/addon-links/-/addon-links-8.4.7.tgz", + "integrity": "sha512-L/1h4dMeMKF+MM0DanN24v5p3faNYbbtOApMgg7SlcBT/tgo3+cAjkgmNpYA8XtKnDezm+T2mTDhB8mmIRZpIQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2216,7 +2260,7 @@ }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "storybook": "^8.4.4" + "storybook": "^8.4.7" }, "peerDependenciesMeta": { "react": { @@ -2225,9 +2269,9 @@ } }, "node_modules/@storybook/addon-measure": { - "version": "8.4.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.4.4.tgz", - "integrity": "sha512-KsjrwrXwrI+z7hKKfjyY1w1b0gLSLZmp15vIRJMELybWV0+4bZFLJGwMBOQFx+aWBED8yZrRV9OjTmoczawsZg==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/addon-measure/-/addon-measure-8.4.7.tgz", + "integrity": "sha512-QfvqYWDSI5F68mKvafEmZic3SMiK7zZM8VA0kTXx55hF/+vx61Mm0HccApUT96xCXIgmwQwDvn9gS4TkX81Dmw==", "dev": true, "license": "MIT", "dependencies": { @@ -2239,13 +2283,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.4.4" + "storybook": "^8.4.7" } }, "node_modules/@storybook/addon-outline": { - "version": "8.4.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.4.4.tgz", - "integrity": "sha512-CVS1dm6BNUWKGrJj9E1ThBp5Khe6Yw+Hhz6OFxrPZfoTr6RstwoTmvSpKjDUCn8zj6ujoORdiQUh1FsHOxAPBg==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/addon-outline/-/addon-outline-8.4.7.tgz", + "integrity": "sha512-6LYRqUZxSodmAIl8icr585Oi8pmzbZ90aloZJIpve+dBAzo7ydYrSQxxoQEVltXbKf3VeVcrs64ouAYqjisMYA==", "dev": true, "license": "MIT", "dependencies": { @@ -2257,13 +2301,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.4.4" + "storybook": "^8.4.7" } }, "node_modules/@storybook/addon-toolbars": { - "version": "8.4.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.4.4.tgz", - "integrity": "sha512-ENPshJMDpfzOJ4Tgm1hSzQoaEmgDxCtP6C8LKk4MOd3X92MJ7p6kfb3y3R1BLg4E/g90qp6lKPFdcohS2tKCgQ==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/addon-toolbars/-/addon-toolbars-8.4.7.tgz", + "integrity": "sha512-OSfdv5UZs+NdGB+nZmbafGUWimiweJ/56gShlw8Neo/4jOJl1R3rnRqqY7MYx8E4GwoX+i3GF5C3iWFNQqlDcw==", "dev": true, "license": "MIT", "funding": { @@ -2271,13 +2315,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.4.4" + "storybook": "^8.4.7" } }, "node_modules/@storybook/addon-viewport": { - "version": "8.4.4", - "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.4.4.tgz", - "integrity": "sha512-SRHJlLhf3tu7+sYNfVIYTeMegn6aiv4HGX97ZLvL76NWWBU8BntQ1LKMki7475mWiZNUFMoYYPsHlG+HU9FAtg==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/addon-viewport/-/addon-viewport-8.4.7.tgz", + "integrity": "sha512-hvczh/jjuXXcOogih09a663sRDDSATXwbE866al1DXgbDFraYD/LxX/QDb38W9hdjU9+Qhx8VFIcNWoMQns5HQ==", "dev": true, "license": "MIT", "dependencies": { @@ -2288,13 +2332,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.4.4" + "storybook": "^8.4.7" } }, "node_modules/@storybook/blocks": { - "version": "8.4.4", - "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.4.4.tgz", - "integrity": "sha512-LwM3guL7uWpYR1a/SY0KZjCUskTKEaS22eF7GK8iXAV5BY4KpKr6ArW4O9orK29KtFwKhDZQLcMcECsOJBVk/A==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/blocks/-/blocks-8.4.7.tgz", + "integrity": "sha512-+QH7+JwXXXIyP3fRCxz/7E2VZepAanXJM7G8nbR3wWsqWgrRp4Wra6MvybxAYCxU7aNfJX5c+RW84SNikFpcIA==", "dev": true, "license": "MIT", "dependencies": { @@ -2309,7 +2353,7 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "storybook": "^8.4.4" + "storybook": "^8.4.7" }, "peerDependenciesMeta": { "react": { @@ -2321,13 +2365,13 @@ } }, "node_modules/@storybook/builder-vite": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-8.4.6.tgz", - "integrity": "sha512-PyJsaEPyuRFFEplpNUi+nbuJd7d1DC2dAZjpsaHTXyqg5iPIbkIgsbCJLUDeIXnUDqM/utjmMpN0sQKJuhIc6w==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/builder-vite/-/builder-vite-8.4.7.tgz", + "integrity": "sha512-LovyXG5VM0w7CovI/k56ZZyWCveQFVDl0m7WwetpmMh2mmFJ+uPQ35BBsgTvTfc8RHi+9Q3F58qP1MQSByXi9g==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/csf-plugin": "8.4.6", + "@storybook/csf-plugin": "8.4.7", "browser-assert": "^1.2.1", "ts-dedent": "^2.0.0" }, @@ -2336,31 +2380,14 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.4.6", + "storybook": "^8.4.7", "vite": "^4.0.0 || ^5.0.0 || ^6.0.0" } }, - "node_modules/@storybook/builder-vite/node_modules/@storybook/csf-plugin": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.4.6.tgz", - "integrity": "sha512-JDIT0czC4yMgKGNf39KTZr3zm5MusAZdn6LBrTfvWb7CrTCR4iVHa4lp2yb7EJk41vHsBec0QUYDDuiFH/vV0g==", - "dev": true, - "license": "MIT", - "dependencies": { - "unplugin": "^1.3.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.4.6" - } - }, "node_modules/@storybook/components": { - "version": "8.4.4", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.4.4.tgz", - "integrity": "sha512-0BSZVmsk23C0BSRKx3liZSVQFXtoF86XQFdNQxjrXIwdHIEN7TcL3DwcxeVUU5ilGp7HeDgAydGNIPGgTeEe6g==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.4.7.tgz", + "integrity": "sha512-uyJIcoyeMWKAvjrG9tJBUCKxr2WZk+PomgrgrUwejkIfXMO76i6jw9BwLa0NZjYdlthDv30r9FfbYZyeNPmF0g==", "dev": true, "license": "MIT", "funding": { @@ -2372,9 +2399,9 @@ } }, "node_modules/@storybook/core": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/@storybook/core/-/core-8.4.6.tgz", - "integrity": "sha512-WeojVtHy0/t50tzw/15S+DLzKsj8BN9yWdo3vJMvm+nflLFvfq1XvD9WGOWeaFp8E/o3AP+4HprXG0r42KEJtA==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/core/-/core-8.4.7.tgz", + "integrity": "sha512-7Z8Z0A+1YnhrrSXoKKwFFI4gnsLbWzr8fnDCU6+6HlDukFYh8GHRcZ9zKfqmy6U3hw2h8H5DrHsxWfyaYUUOoA==", "dev": true, "license": "MIT", "dependencies": { @@ -2417,9 +2444,9 @@ } }, "node_modules/@storybook/csf": { - "version": "0.1.11", - "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.11.tgz", - "integrity": "sha512-dHYFQH3mA+EtnCkHXzicbLgsvzYjcDJ1JWsogbItZogkPHgSJM/Wr71uMkcvw8v9mmCyP4NpXJuu6bPoVsOnzg==", + "version": "0.1.12", + "resolved": "https://registry.npmjs.org/@storybook/csf/-/csf-0.1.12.tgz", + "integrity": "sha512-9/exVhabisyIVL0VxTCxo01Tdm8wefIXKXfltAPTSr8cbLn5JAxGQ6QV3mjdecLGEOucfoVhAKtJfVHxEK1iqw==", "dev": true, "license": "MIT", "dependencies": { @@ -2427,9 +2454,9 @@ } }, "node_modules/@storybook/csf-plugin": { - "version": "8.4.4", - "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.4.4.tgz", - "integrity": "sha512-4+6SUhp5sEJN9BY5RuxcFKvJbOqCzIUp9oHSSz36hkP07a4QH+SwxfEd0U7JRfmPpB63L+izywTzWhdADiAMOQ==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/csf-plugin/-/csf-plugin-8.4.7.tgz", + "integrity": "sha512-Fgogplu4HImgC+AYDcdGm1rmL6OR1rVdNX1Be9C/NEXwOCpbbBwi0BxTf/2ZxHRk9fCeaPEcOdP5S8QHfltc1g==", "dev": true, "license": "MIT", "dependencies": { @@ -2440,7 +2467,7 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.4.4" + "storybook": "^8.4.7" } }, "node_modules/@storybook/global": { @@ -2451,23 +2478,23 @@ "license": "MIT" }, "node_modules/@storybook/icons": { - "version": "1.2.12", - "resolved": "https://registry.npmjs.org/@storybook/icons/-/icons-1.2.12.tgz", - "integrity": "sha512-UxgyK5W3/UV4VrI3dl6ajGfHM4aOqMAkFLWe2KibeQudLf6NJpDrDMSHwZj+3iKC4jFU7dkKbbtH2h/al4sW3Q==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/@storybook/icons/-/icons-1.3.0.tgz", + "integrity": "sha512-Nz/UzeYQdUZUhacrPyfkiiysSjydyjgg/p0P9HxB4p/WaJUUjMAcaoaLgy3EXx61zZJ3iD36WPuDkZs5QYrA0A==", "dev": true, "license": "MIT", "engines": { "node": ">=14.0.0" }, "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0" + "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", + "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta" } }, "node_modules/@storybook/instrumenter": { - "version": "8.4.4", - "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.4.4.tgz", - "integrity": "sha512-mq/YVEZrB8jyyio2Of01rQixsQ72z8ssAhJS9ldIlK+cvERQi0VBCpH3pejPmjOB40yiKBJHNqH4HIANVhibgw==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.4.7.tgz", + "integrity": "sha512-k6NSD3jaRCCHAFtqXZ7tw8jAzD/yTEWXGya+REgZqq5RCkmJ+9S4Ytp/6OhQMPtPFX23gAuJJzTQVLcCr+gjRg==", "dev": true, "license": "MIT", "dependencies": { @@ -2479,13 +2506,13 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.4.4" + "storybook": "^8.4.7" } }, "node_modules/@storybook/manager-api": { - "version": "8.4.4", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.4.4.tgz", - "integrity": "sha512-rmNPcbEyzakEHoaecUbhkW7WWOkyZ0z7ywH4d5/s0ZuQS57Px2N+ZLVgRJwYK+YNHiJYqDf1BTln9YJ/Mt1L6Q==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.4.7.tgz", + "integrity": "sha512-ELqemTviCxAsZ5tqUz39sDmQkvhVAvAgiplYy9Uf15kO0SP2+HKsCMzlrm2ue2FfkUNyqbDayCPPCB0Cdn/mpQ==", "dev": true, "license": "MIT", "funding": { @@ -2497,9 +2524,9 @@ } }, "node_modules/@storybook/preview-api": { - "version": "8.4.4", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.4.4.tgz", - "integrity": "sha512-iZrWQcjRBqBHFdDXVxGpw6mHBZMCMYqhWXdyJ0d1S2y3PwcfOjkcXlQ1UiAenFHlA6dKrcYw8luKUQTL9bKReA==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.4.7.tgz", + "integrity": "sha512-0QVQwHw+OyZGHAJEXo6Knx+6/4er7n2rTDE5RYJ9F2E2Lg42E19pfdLlq2Jhoods2Xrclo3wj6GWR//Ahi39Eg==", "dev": true, "license": "MIT", "funding": { @@ -2511,18 +2538,18 @@ } }, "node_modules/@storybook/react": { - "version": "8.4.4", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-8.4.4.tgz", - "integrity": "sha512-92lGnRcAI2qW6zH8GMBScyXmOS1ANI8ZuSP4ExQj+lGsCrAr7PBr0wuHy3wIn1YyAvQGPUn/mpYrmMz08c2HfA==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/react/-/react-8.4.7.tgz", + "integrity": "sha512-nQ0/7i2DkaCb7dy0NaT95llRVNYWQiPIVuhNfjr1mVhEP7XD090p0g7eqUmsx8vfdHh2BzWEo6CoBFRd3+EXxw==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/components": "8.4.4", + "@storybook/components": "8.4.7", "@storybook/global": "^5.0.0", - "@storybook/manager-api": "8.4.4", - "@storybook/preview-api": "8.4.4", - "@storybook/react-dom-shim": "8.4.4", - "@storybook/theming": "8.4.4" + "@storybook/manager-api": "8.4.7", + "@storybook/preview-api": "8.4.7", + "@storybook/react-dom-shim": "8.4.7", + "@storybook/theming": "8.4.7" }, "engines": { "node": ">=18.0.0" @@ -2532,10 +2559,10 @@ "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "@storybook/test": "8.4.4", + "@storybook/test": "8.4.7", "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "storybook": "^8.4.4", + "storybook": "^8.4.7", "typescript": ">= 4.2.x" }, "peerDependenciesMeta": { @@ -2548,9 +2575,9 @@ } }, "node_modules/@storybook/react-dom-shim": { - "version": "8.4.4", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.4.4.tgz", - "integrity": "sha512-kufv2FDK3kjADBo+/aKHsUn9T5E4p9IBAmCoIvXBGRDumPRds7Pt3MB4ODKlg+IumR7LMEq0jTJkn27ZRTuUmw==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.4.7.tgz", + "integrity": "sha512-6bkG2jvKTmWrmVzCgwpTxwIugd7Lu+2btsLAqhQSzDyIj2/uhMNp8xIMr/NBDtLgq3nomt9gefNa9xxLwk/OMg==", "dev": true, "license": "MIT", "funding": { @@ -2560,20 +2587,20 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "storybook": "^8.4.4" + "storybook": "^8.4.7" } }, "node_modules/@storybook/react-vite": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-8.4.6.tgz", - "integrity": "sha512-bVoYj3uJRz0SknK2qN3vBVSoEXsvyARQLuHjP9eX0lWBd9XSxZinmVbexPdD0OeJYcJIdmbli2/Gw7/hu5CjFA==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/react-vite/-/react-vite-8.4.7.tgz", + "integrity": "sha512-iiY9iLdMXhDnilCEVxU6vQsN72pW3miaf0WSenOZRyZv3HdbpgOxI0qapOS0KCyRUnX9vTlmrSPTMchY4cAeOg==", "dev": true, "license": "MIT", "dependencies": { "@joshwooding/vite-plugin-react-docgen-typescript": "0.4.2", "@rollup/pluginutils": "^5.0.2", - "@storybook/builder-vite": "8.4.6", - "@storybook/react": "8.4.6", + "@storybook/builder-vite": "8.4.7", + "@storybook/react": "8.4.7", "find-up": "^5.0.0", "magic-string": "^0.30.0", "react-docgen": "^7.0.0", @@ -2590,62 +2617,80 @@ "peerDependencies": { "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "storybook": "^8.4.6", + "storybook": "^8.4.7", "vite": "^4.0.0 || ^5.0.0 || ^6.0.0" } }, - "node_modules/@storybook/react-vite/node_modules/@storybook/components": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/@storybook/components/-/components-8.4.6.tgz", - "integrity": "sha512-9tKSJJCyFT5RZMRGyozTBJkr9C9Yfk1nuOE9XbDEE1Z+3/IypKR9+iwc5mfNBStDNY+rxtYWNLKBb5GPR2yhzA==", + "node_modules/@storybook/test": { + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.4.7.tgz", + "integrity": "sha512-AhvJsu5zl3uG40itSQVuSy5WByp3UVhS6xAnme4FWRwgSxhvZjATJ3AZkkHWOYjnnk+P2/sbz/XuPli1FVCWoQ==", "dev": true, "license": "MIT", + "dependencies": { + "@storybook/csf": "^0.1.11", + "@storybook/global": "^5.0.0", + "@storybook/instrumenter": "8.4.7", + "@testing-library/dom": "10.4.0", + "@testing-library/jest-dom": "6.5.0", + "@testing-library/user-event": "14.5.2", + "@vitest/expect": "2.0.5", + "@vitest/spy": "2.0.5" + }, "funding": { "type": "opencollective", "url": "https://opencollective.com/storybook" }, "peerDependencies": { - "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" + "storybook": "^8.4.7" } }, - "node_modules/@storybook/react-vite/node_modules/@storybook/instrumenter": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/@storybook/instrumenter/-/instrumenter-8.4.6.tgz", - "integrity": "sha512-snXjlgbp065A6KoK9zkjBYEIMCSlN5JefPKzt1FC0rbcbtahhD+iPpqISKhDSczwgOku/JVhVUDp/vU7AIf4mg==", + "node_modules/@storybook/test/node_modules/@testing-library/jest-dom": { + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.5.0.tgz", + "integrity": "sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==", "dev": true, "license": "MIT", - "optional": true, - "peer": true, "dependencies": { - "@storybook/global": "^5.0.0", - "@vitest/utils": "^2.1.1" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "@adobe/css-tools": "^4.4.0", + "aria-query": "^5.0.0", + "chalk": "^3.0.0", + "css.escape": "^1.5.1", + "dom-accessibility-api": "^0.6.3", + "lodash": "^4.17.21", + "redent": "^3.0.0" }, - "peerDependencies": { - "storybook": "^8.4.6" + "engines": { + "node": ">=14", + "npm": ">=6", + "yarn": ">=1" } }, - "node_modules/@storybook/react-vite/node_modules/@storybook/manager-api": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/@storybook/manager-api/-/manager-api-8.4.6.tgz", - "integrity": "sha512-TsXlQ5m5rTl2KNT9icPFyy822AqXrx1QplZBt/L7cFn7SpqQKDeSta21FH7MG0piAvzOweXebVSqKngJ6cCWWQ==", + "node_modules/@storybook/test/node_modules/chalk": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", + "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", "dev": true, "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, - "peerDependencies": { - "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" + "engines": { + "node": ">=8" } }, - "node_modules/@storybook/react-vite/node_modules/@storybook/preview-api": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/@storybook/preview-api/-/preview-api-8.4.6.tgz", - "integrity": "sha512-LbD+lR1FGvWaJBXteVx5xdgs1x1D7tyidBg2CsW2ex+cP0iJ176JgjPfutZxlWOfQnhfRYNnJ3WKoCIfxFOTKA==", + "node_modules/@storybook/test/node_modules/dom-accessibility-api": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", + "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", + "dev": true, + "license": "MIT" + }, + "node_modules/@storybook/theming": { + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.4.7.tgz", + "integrity": "sha512-99rgLEjf7iwfSEmdqlHkSG3AyLcK0sfExcr0jnc6rLiAkBhzuIsvcHjjUwkR210SOCgXqBPW0ZA6uhnuyppHLw==", "dev": true, "license": "MIT", "funding": { @@ -2656,242 +2701,21 @@ "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" } }, - "node_modules/@storybook/react-vite/node_modules/@storybook/react": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/@storybook/react/-/react-8.4.6.tgz", - "integrity": "sha512-QAT23beoYNLhFGAXPimtuMErvpcI7eZbZ4AlLqW1fhiTZrRYw06cjC1bs9H3tODMcHH9LS5p3Wz9b29jtV2XGw==", + "node_modules/@testing-library/dom": { + "version": "10.4.0", + "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", + "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/components": "8.4.6", - "@storybook/global": "^5.0.0", - "@storybook/manager-api": "8.4.6", - "@storybook/preview-api": "8.4.6", - "@storybook/react-dom-shim": "8.4.6", - "@storybook/theming": "8.4.6" - }, - "engines": { - "node": ">=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "@storybook/test": "8.4.6", - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "storybook": "^8.4.6", - "typescript": ">= 4.2.x" - }, - "peerDependenciesMeta": { - "@storybook/test": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/@storybook/react-vite/node_modules/@storybook/react-dom-shim": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/@storybook/react-dom-shim/-/react-dom-shim-8.4.6.tgz", - "integrity": "sha512-f7RM8GO++fqMxbjNdEzeGS1P821jXuwRnAraejk5hyjB5SqetauFxMwoFYEYfJXPaLX2qIubnIJ78hdJ/IBaEA==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "react": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "react-dom": "^16.8.0 || ^17.0.0 || ^18.0.0 || ^19.0.0-beta", - "storybook": "^8.4.6" - } - }, - "node_modules/@storybook/react-vite/node_modules/@storybook/test": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.4.6.tgz", - "integrity": "sha512-MeU1g65YgU66M2NtmEIL9gVeHk+en0k9Hp0wfxEO7NT/WLfaOD5RXLRDJVhbAlrH/6tLeWKIPNh/D26y27vO/g==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@storybook/csf": "^0.1.11", - "@storybook/global": "^5.0.0", - "@storybook/instrumenter": "8.4.6", - "@testing-library/dom": "10.4.0", - "@testing-library/jest-dom": "6.5.0", - "@testing-library/user-event": "14.5.2", - "@vitest/expect": "2.0.5", - "@vitest/spy": "2.0.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.4.6" - } - }, - "node_modules/@storybook/react-vite/node_modules/@storybook/theming": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.4.6.tgz", - "integrity": "sha512-q7vDPN/mgj7cXIVQ9R1/V75hrzNgKkm2G0LjMo57//9/djQ+7LxvBsR1iScbFIRSEqppvMiBFzkts+2uXidySA==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" - } - }, - "node_modules/@storybook/react-vite/node_modules/@testing-library/jest-dom": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.5.0.tgz", - "integrity": "sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "@adobe/css-tools": "^4.4.0", - "aria-query": "^5.0.0", - "chalk": "^3.0.0", - "css.escape": "^1.5.1", - "dom-accessibility-api": "^0.6.3", - "lodash": "^4.17.21", - "redent": "^3.0.0" - }, - "engines": { - "node": ">=14", - "npm": ">=6", - "yarn": ">=1" - } - }, - "node_modules/@storybook/react-vite/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true, - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/react-vite/node_modules/dom-accessibility-api": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", - "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", - "dev": true, - "license": "MIT", - "optional": true, - "peer": true - }, - "node_modules/@storybook/test": { - "version": "8.4.4", - "resolved": "https://registry.npmjs.org/@storybook/test/-/test-8.4.4.tgz", - "integrity": "sha512-tmJd+lxl3MC0Xdu1KW/69V8tibv98OvdopxGqfVR0x5dkRHM3sFK/tv1ZJAUeronlvRyhGySOu1tHUrMjcNqyA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@storybook/csf": "^0.1.11", - "@storybook/global": "^5.0.0", - "@storybook/instrumenter": "8.4.4", - "@testing-library/dom": "10.4.0", - "@testing-library/jest-dom": "6.5.0", - "@testing-library/user-event": "14.5.2", - "@vitest/expect": "2.0.5", - "@vitest/spy": "2.0.5" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.4.4" - } - }, - "node_modules/@storybook/test/node_modules/@testing-library/jest-dom": { - "version": "6.5.0", - "resolved": "https://registry.npmjs.org/@testing-library/jest-dom/-/jest-dom-6.5.0.tgz", - "integrity": "sha512-xGGHpBXYSHUUr6XsKBfs85TWlYKpTc37cSBBVrXcib2MkHLboWlkClhWF37JKlDb9KEq3dHs+f2xR7XJEWGBxA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@adobe/css-tools": "^4.4.0", - "aria-query": "^5.0.0", - "chalk": "^3.0.0", - "css.escape": "^1.5.1", - "dom-accessibility-api": "^0.6.3", - "lodash": "^4.17.21", - "redent": "^3.0.0" - }, - "engines": { - "node": ">=14", - "npm": ">=6", - "yarn": ">=1" - } - }, - "node_modules/@storybook/test/node_modules/chalk": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz", - "integrity": "sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@storybook/test/node_modules/dom-accessibility-api": { - "version": "0.6.3", - "resolved": "https://registry.npmjs.org/dom-accessibility-api/-/dom-accessibility-api-0.6.3.tgz", - "integrity": "sha512-7ZgogeTnjuHbo+ct10G9Ffp0mif17idi0IyWNVA/wcwcm7NPOD/WEHVP3n7n3MhXqxoIYm8d6MuZohYWIZ4T3w==", - "dev": true, - "license": "MIT" - }, - "node_modules/@storybook/theming": { - "version": "8.4.4", - "resolved": "https://registry.npmjs.org/@storybook/theming/-/theming-8.4.4.tgz", - "integrity": "sha512-iq4yt3Fx35ZV5owNC//E6G+QPV19xHHVN2Ugi3p7KOSFK3chuXX9mxZ1rfir+t+U30a5EPOEnlsY3/1LXn7aTw==", - "dev": true, - "license": "MIT", - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/storybook" - }, - "peerDependencies": { - "storybook": "^8.2.0 || ^8.3.0-0 || ^8.4.0-0 || ^8.5.0-0 || ^8.6.0-0" - } - }, - "node_modules/@testing-library/dom": { - "version": "10.4.0", - "resolved": "https://registry.npmjs.org/@testing-library/dom/-/dom-10.4.0.tgz", - "integrity": "sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/code-frame": "^7.10.4", - "@babel/runtime": "^7.12.5", - "@types/aria-query": "^5.0.1", - "aria-query": "5.3.0", - "chalk": "^4.1.0", - "dom-accessibility-api": "^0.5.9", - "lz-string": "^1.5.0", - "pretty-format": "^27.0.2" + "@babel/code-frame": "^7.10.4", + "@babel/runtime": "^7.12.5", + "@types/aria-query": "^5.0.1", + "aria-query": "5.3.0", + "chalk": "^4.1.0", + "dom-accessibility-api": "^0.5.9", + "lz-string": "^1.5.0", + "pretty-format": "^27.0.2" }, "engines": { "node": ">=18" @@ -3107,9 +2931,9 @@ "license": "MIT" }, "node_modules/@types/geojson": { - "version": "7946.0.14", - "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz", - "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==", + "version": "7946.0.15", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.15.tgz", + "integrity": "sha512-9oSxFzDCT2Rj6DfcHF8G++jxBKS7mBqXl5xrRW+Kbvjry6Uduya2iiwqHPhVXpasAVMBYKkEPGgKhd3+/HZ6xA==", "dev": true, "license": "MIT" }, @@ -3216,9 +3040,9 @@ "license": "MIT" }, "node_modules/@types/leaflet": { - "version": "1.9.14", - "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.14.tgz", - "integrity": "sha512-sx2q6MDJaajwhKeVgPSvqXd8rhNJSTA3tMidQGduZn9S6WBYxDkCpSpV5xXEmSg7Cgdk/5vJGhVF1kMYLzauBg==", + "version": "1.9.15", + "resolved": "https://registry.npmjs.org/@types/leaflet/-/leaflet-1.9.15.tgz", + "integrity": "sha512-7UuggAuAs+mva66gtf2OTB1nEhzU/9JED93TIaOEgvFMvG/dIGQaukHE7izHo1Zd+Ko1L4ETUw7TBc8yUxevpg==", "dev": true, "license": "MIT", "dependencies": { @@ -3233,9 +3057,9 @@ "license": "MIT" }, "node_modules/@types/node": { - "version": "20.17.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.6.tgz", - "integrity": "sha512-VEI7OdvK2wP7XHnsuXbAJnEpEkF6NjSN45QJlL4VGqZSXsnicpesdTWsg9RISeSdYd3yeRj/y3k5KGjUXYnFwQ==", + "version": "20.17.10", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.17.10.tgz", + "integrity": "sha512-/jrvh5h6NXhEauFFexRin69nA0uHJ5gwk4iDivp/DeoEua3uwCUto6PC86IpRITBOs4+6i2I56K5x5b6WYGXHA==", "dev": true, "license": "MIT", "dependencies": { @@ -3243,16 +3067,16 @@ } }, "node_modules/@types/prop-types": { - "version": "15.7.13", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.13.tgz", - "integrity": "sha512-hCZTSvwbzWGvhqxp/RqVqwU999pBf2vp7hzIjiYOsl8wqOmUxkQ6ddw1cV3l8811+kdUFus/q4d1Y3E3SyEifA==", + "version": "15.7.14", + "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.14.tgz", + "integrity": "sha512-gNMvNH49DJ7OJYv+KAKn0Xp45p8PLl6zo2YnvDIbTd4J6MER2BmWN49TG7n9LvkyihINxeKW8+3bfS2yDC9dzQ==", "dev": true, "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.12", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.12.tgz", - "integrity": "sha512-D2wOSq/d6Agt28q7rSI3jhU7G6aiuzljDGZ2hTZHIkrTLUI+AF3WMeKkEZ9nN2fkBAlcktT6vcZjDFiIhMYEQw==", + "version": "18.3.16", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.16.tgz", + "integrity": "sha512-oh8AMIC4Y2ciKufU8hnKgs+ufgbA/dhPTACaZPM86AbwX9QwnFtSoPWEeRUj8fge+v6kFt78BXcDhAU1SrrAsw==", "dev": true, "license": "MIT", "dependencies": { @@ -3261,13 +3085,13 @@ } }, "node_modules/@types/react-dom": { - "version": "18.3.1", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.1.tgz", - "integrity": "sha512-qW1Mfv8taImTthu4KoXgDfLuk4bydU6Q/TkADnDWWHwi4NX4BR+LWfTp2sVmTqRrsHvyDDTelgelxJ+SsejKKQ==", + "version": "18.3.5", + "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.3.5.tgz", + "integrity": "sha512-P4t6saawp+b/dFrUr2cvkVsfvPguwsxtH6dNIYRllMsefqFzkZk5UIjzyDOv5g1dXIPdG4Sp1yCR4Z6RCUsG/Q==", "dev": true, "license": "MIT", - "dependencies": { - "@types/react": "*" + "peerDependencies": { + "@types/react": "^18.0.0" } }, "node_modules/@types/resolve": { @@ -3323,91 +3147,104 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.21.0.tgz", - "integrity": "sha512-oy9+hTPCUFpngkEZUSzbf9MxI65wbKFoQYsgPdILTfbUldp5ovUuphZVe4i30emU9M/kP+T64Di0mxl7dSw3MA==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.18.0.tgz", + "integrity": "sha512-NR2yS7qUqCL7AIxdJUQf2MKKNDVNaig/dEB0GBLU7D+ZdHgK1NoH/3wsgO3OnPVipn51tG3MAwaODEGil70WEw==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/type-utils": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.18.0", + "@typescript-eslint/type-utils": "8.18.0", + "@typescript-eslint/utils": "8.18.0", + "@typescript-eslint/visitor-keys": "8.18.0", "graphemer": "^1.4.0", - "ignore": "^5.2.4", + "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" + } + }, + "node_modules/@typescript-eslint/experimental-utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", + "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/utils": "5.62.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", + "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", + "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", "dev": true, "license": "MIT", "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", + "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", @@ -3419,208 +3256,45 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", + "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", + "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", + "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/experimental-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/experimental-utils/-/experimental-utils-5.62.0.tgz", - "integrity": "sha512-RTXpeB3eMkpoclG3ZHft6vG/Z30azNHuqY6wKPBHlVMZFuEvrtlEDe8gMqDb+SO+9hjC/pLekeSCryf9vMZlCw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/utils": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/experimental-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { "type": "opencollective", @@ -3641,6 +3315,19 @@ "node": ">=8.0.0" } }, + "node_modules/@typescript-eslint/experimental-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@typescript-eslint/experimental-utils/node_modules/estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", @@ -3665,114 +3352,114 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.21.0.tgz", - "integrity": "sha512-tbsV1jPne5CkFQCgPBcDOt30ItF7aJoZL997JSF7MhGQqOeT3svWRYxiqlfA5RUdlHN6Fi+EI9bxqbdyAUZjYQ==", + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.18.0.tgz", + "integrity": "sha512-hgUZ3kTEpVzKaK3uNibExUYm6SKKOmTU2BOxBSvOYwtJEPdVQ70kZJpPjstlnhCHcuc2WGfSbpKlb/69ttyN5Q==", "dev": true, - "license": "BSD-2-Clause", + "license": "MITClause", "dependencies": { - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", + "@typescript-eslint/scope-manager": "8.18.0", + "@typescript-eslint/types": "8.18.0", + "@typescript-eslint/typescript-estree": "8.18.0", + "@typescript-eslint/visitor-keys": "8.18.0", "debug": "^4.3.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.18.0.tgz", + "integrity": "sha512-PNGcHop0jkK2WVYGotk/hxj+UFLhXtGPiGtiaWgVBVP1jhMoMCHlTyJA+hEj4rszoSdLTK3fN4oOatrL0Cp+Xw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" + "@typescript-eslint/types": "8.18.0", + "@typescript-eslint/visitor-keys": "8.18.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", + "node_modules/@typescript-eslint/type-utils": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.18.0.tgz", + "integrity": "sha512-er224jRepVAVLnMF2Q7MZJCq5CsdH2oqjP4dT7K6ij09Kyd+R21r7UVJrF0buMVdZS5QRhDzpvzAxHxabQadow==", "dev": true, "license": "MIT", + "dependencies": { + "@typescript-eslint/typescript-estree": "8.18.0", + "@typescript-eslint/utils": "8.18.0", + "debug": "^4.3.4", + "ts-api-utils": "^1.3.0" + }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", + "node_modules/@typescript-eslint/types": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.0.tgz", + "integrity": "sha512-FNYxgyTCAnFwTrzpBGq+zrnoTO4x0c1CKYY5MuUTzpScqmY5fmsh2o3+57lqdI3NZucBDCzDgdEbIaNfAjAHQA==", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, + "license": "MIT", "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } } }, - "node_modules/@typescript-eslint/parser/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.0.tgz", + "integrity": "sha512-rqQgFRu6yPkauz+ms3nQpohwejS8bvgbPyIDq13cgEDbkXt4LH4OkDMT0/fN1RUtzG8e8AKJyDBoocuQh8qNeg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "8.18.0", + "@typescript-eslint/visitor-keys": "8.18.0", + "debug": "^4.3.4", + "fast-glob": "^3.3.2", + "is-glob": "^4.0.3", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "typescript": ">=4.8.4 <5.8.0" } }, - "node_modules/@typescript-eslint/parser/node_modules/brace-expansion": { + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", @@ -3782,10 +3469,10 @@ "balanced-match": "^1.0.0" } }, - "node_modules/@typescript-eslint/parser/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "license": "ISC", "dependencies": { @@ -3798,7 +3485,7 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@typescript-eslint/parser/node_modules/semver": { + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { "version": "7.6.3", "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", @@ -3811,15 +3498,17 @@ "node": ">=10" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.14.0.tgz", - "integrity": "sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw==", + "node_modules/@typescript-eslint/utils": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.18.0.tgz", + "integrity": "sha512-p6GLdY383i7h5b0Qrfbix3Vc3+J2k6QWw6UMUeY5JGfm3C5LbZ4QIZzJNoNOfgyRe0uuYKjvVOsO/jD4SJO+xg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.14.0", - "@typescript-eslint/visitor-keys": "8.14.0" + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "8.18.0", + "@typescript-eslint/types": "8.18.0", + "@typescript-eslint/typescript-estree": "8.18.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3827,328 +3516,55 @@ "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.21.0.tgz", - "integrity": "sha512-rZQI7wHfao8qMX3Rd3xqeYSMCL3SoiSQLBATSiVKARdFGCYSRvmViieZjqc58jKgs8Y8i9YvVVhRbHSTA4VBag==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.0.tgz", + "integrity": "sha512-pCh/qEA8Lb1wVIqNvBke8UaRjJ6wrAWkJO5yyIbs8Yx6TNGYyfNjOo61tLv+WwLvoLPp4BQ8B7AHKijl8NGUfw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", - "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "@typescript-eslint/types": "8.18.0", + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } } }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz", - "integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==", + "node_modules/@ungap/structured-clone": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.1.tgz", + "integrity": "sha512-fEzPV3hSkSMltkw152tJKNARhOupqbH96MZWyRjNaYZOMIzbrTeQDG+MTc6Mr2pgzFQzFxAfmhGDNP5QK++2ZA==", + "dev": true, + "license": "ISC" + }, + "node_modules/@vitejs/plugin-react": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.4.tgz", + "integrity": "sha512-SCCPBJtYLdE8PX/7ZQAs1QAZ8Jqwih+0VBLum1EGqmCCQal+MIUqLCzj3ZUy8ufbC0cAM4LRlSTm7IQJwWT4ug==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" + "@babel/core": "^7.26.0", + "@babel/plugin-transform-react-jsx-self": "^7.25.9", + "@babel/plugin-transform-react-jsx-source": "^7.25.9", + "@types/babel__core": "^7.20.5", + "react-refresh": "^0.14.2" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^14.18.0 || >=16.0.0" }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz", - "integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz", - "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz", - "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.21.0", - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/typescript-estree": "6.21.0", - "semver": "^7.5.4" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": { - "version": "6.21.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz", - "integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" - }, - "engines": { - "node": "^16.0.0 || >=18.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/type-utils/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/types": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.14.0.tgz", - "integrity": "sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g==", - "dev": true, - "license": "MIT", - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.14.0.tgz", - "integrity": "sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==", - "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "@typescript-eslint/types": "8.14.0", - "@typescript-eslint/visitor-keys": "8.14.0", - "debug": "^4.3.4", - "fast-glob": "^3.3.2", - "is-glob": "^4.0.3", - "minimatch": "^9.0.4", - "semver": "^7.6.0", - "ts-api-utils": "^1.3.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { - "version": "9.0.5", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", - "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { - "version": "7.6.3", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", - "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/@typescript-eslint/utils": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.14.0.tgz", - "integrity": "sha512-OGqj6uB8THhrHj0Fk27DcHPojW7zKwKkPmHXHvQ58pLYp4hy8CSUdTKykKeh+5vFqTTVmjz0zCOOPKRovdsgHA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.14.0", - "@typescript-eslint/types": "8.14.0", - "@typescript-eslint/typescript-estree": "8.14.0" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^8.57.0 || ^9.0.0" - } - }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.14.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.14.0.tgz", - "integrity": "sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ==", - "dev": true, - "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "8.14.0", - "eslint-visitor-keys": "^3.4.3" - }, - "engines": { - "node": "^18.18.0 || ^20.9.0 || >=21.1.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/@vitejs/plugin-react": { - "version": "4.3.3", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-4.3.3.tgz", - "integrity": "sha512-NooDe9GpHGqNns1i8XDERg0Vsg5SSYRhRxxyTGogUdkdNt47jal+fbuYi+Yfq6pzRCKXyoPcWisfxE6RIM3GKA==", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/core": "^7.25.2", - "@babel/plugin-transform-react-jsx-self": "^7.24.7", - "@babel/plugin-transform-react-jsx-source": "^7.24.7", - "@types/babel__core": "^7.20.5", - "react-refresh": "^0.14.2" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^4.2.0 || ^5.0.0" + "peerDependencies": { + "vite": "^4.2.0 || ^5.0.0 || ^6.0.0" } }, "node_modules/@vitest/expect": { @@ -4207,9 +3623,9 @@ } }, "node_modules/@vitest/pretty-format": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.5.tgz", - "integrity": "sha512-4ZOwtk2bqG5Y6xRGHcveZVr+6txkH7M2e+nPFd6guSoN638v/1XQ0K06eOpi0ptVU/2tW/pIU4IoPotY/GZ9fw==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/pretty-format/-/pretty-format-2.1.8.tgz", + "integrity": "sha512-9HiSZ9zpqNLKlbIDRWOnAWqgcA7xu+8YxXSekhr0Ykab7PAYFkhkwoqVArPOtJhPmYeE2YHgKZlj3CP36z2AJQ==", "dev": true, "license": "MIT", "dependencies": { @@ -4233,13 +3649,13 @@ } }, "node_modules/@vitest/utils": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.5.tgz", - "integrity": "sha512-yfj6Yrp0Vesw2cwJbP+cl04OC+IHFsuQsrsJBL9pyGeQXE56v1UAOQco+SR55Vf1nQzfV0QJg1Qum7AaWUwwYg==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-2.1.8.tgz", + "integrity": "sha512-dwSoui6djdwbfFmIgbIjX2ZhIoG7Ex/+xpxyiEgIGzjliY8xGkcpITKTlp6B4MgtGkF2ilvm97cPM96XZaAgcA==", "dev": true, "license": "MIT", "dependencies": { - "@vitest/pretty-format": "2.1.5", + "@vitest/pretty-format": "2.1.8", "loupe": "^3.1.2", "tinyrainbow": "^1.2.0" }, @@ -4495,16 +3911,16 @@ } }, "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.3.tgz", + "integrity": "sha512-rwG/ja1neyLqCuGZ5YYrznA62D4mZXg0i1cIskIUKSiqF3Cje9/wXAls9B9s1Wa2fomMsIv8czB8jZcPmxCXFg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4514,16 +3930,16 @@ } }, "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.3.tgz", + "integrity": "sha512-Y7Wt51eKJSyi80hFrJCePGGNo5ktJCslFuboqJsbf57CCPcm5zztluPlc4/aD8sWsKvlwatezpV4U1efk8kpjg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "es-abstract": "^1.23.5", + "es-shim-unscopables": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -4550,20 +3966,19 @@ } }, "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.3.tgz", - "integrity": "sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==", + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.4.tgz", + "integrity": "sha512-BNoCY6SXXPQ7gF2opIP4GBE+Xw7U+pHMYKuzjgCN3GwiaIR09UUeKfheyIry77QtrCBlC0KK0q5/TER/tYh3PQ==", "dev": true, "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", - "call-bind": "^1.0.5", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.22.3", - "es-errors": "^1.2.1", - "get-intrinsic": "^1.2.3", - "is-array-buffer": "^3.0.4", - "is-shared-array-buffer": "^1.0.2" + "es-abstract": "^1.23.5", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.6", + "is-array-buffer": "^3.0.4" }, "engines": { "node": ">= 0.4" @@ -4792,9 +4207,9 @@ "dev": true }, "node_modules/browserslist": { - "version": "4.24.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.2.tgz", - "integrity": "sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==", + "version": "4.24.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.24.3.tgz", + "integrity": "sha512-1CPmv8iobE2fyRMV97dAcMVegvvWKxmq94hkLiAkUGwKVTyDLw33K+ZxiFrREKmmps4rIw6grcCFCnTMSZ/YiA==", "dev": true, "funding": [ { @@ -4812,9 +4227,9 @@ ], "license": "MIT", "dependencies": { - "caniuse-lite": "^1.0.30001669", - "electron-to-chromium": "^1.5.41", - "node-releases": "^2.0.18", + "caniuse-lite": "^1.0.30001688", + "electron-to-chromium": "^1.5.73", + "node-releases": "^2.0.19", "update-browserslist-db": "^1.1.1" }, "bin": { @@ -4855,17 +4270,16 @@ "license": "MIT" }, "node_modules/call-bind": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", - "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.8.tgz", + "integrity": "sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==", "dev": true, "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.0", "es-define-property": "^1.0.0", - "es-errors": "^1.3.0", - "function-bind": "^1.1.2", "get-intrinsic": "^1.2.4", - "set-function-length": "^1.2.1" + "set-function-length": "^1.2.2" }, "engines": { "node": ">= 0.4" @@ -4874,30 +4288,61 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "node_modules/call-bind-apply-helpers": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/call-bind-apply-helpers/-/call-bind-apply-helpers-1.0.1.tgz", + "integrity": "sha512-BhYE+WDaywFg2TBWYNXAE+8B1ATnThNBqXHP5nQu0jWJdVvY2hvkpyB3qOmtmDePiS5/BDQ8wASEWGMWRG148g==", "dev": true, "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2" + }, "engines": { - "node": ">=6" + "node": ">= 0.4" } }, - "node_modules/camelcase": { - "version": "5.3.1", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", - "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "node_modules/call-bound": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/call-bound/-/call-bound-1.0.3.tgz", + "integrity": "sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==", "dev": true, "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "get-intrinsic": "^1.2.6" + }, "engines": { - "node": ">=6" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001680", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001680.tgz", - "integrity": "sha512-rPQy70G6AGUMnbwS1z6Xg+RkHYPAi18ihs47GH0jcxIG7wArmPgY3XbS2sRdBbxJljp3thdT8BIqv9ccCypiPA==", + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/callsites": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", + "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001689", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001689.tgz", + "integrity": "sha512-CmeR2VBycfa+5/jOfnp/NpWPGd06nf1XYiefUvhXFfZE4GkRc9jv+eGPS4nT558WS/8lYCzV8SlANCIPvbWP1g==", "dev": true, "funding": [ { @@ -5113,9 +4558,9 @@ "license": "MIT" }, "node_modules/cross-spawn": { - "version": "7.0.5", - "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.5.tgz", - "integrity": "sha512-ZVJrKKYunU38/76t0RMOulHOnUcbU9GbpWKAOZ0mhjr7CX6FVrH+4FrAapSOekrgFQ3f/8gwMEuIft0aKq6Hug==", + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", "dev": true, "license": "MIT", "dependencies": { @@ -5238,9 +4683,9 @@ } }, "node_modules/debug": { - "version": "4.3.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", - "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.0.tgz", + "integrity": "sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==", "dev": true, "license": "MIT", "dependencies": { @@ -5480,6 +4925,21 @@ "node": ">=12" } }, + "node_modules/dunder-proto": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.0.tgz", + "integrity": "sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bind-apply-helpers": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.2.0" + }, + "engines": { + "node": ">= 0.4" + } + }, "node_modules/ejs": { "version": "3.1.10", "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", @@ -5497,9 +4957,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.59", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.59.tgz", - "integrity": "sha512-faAXB6+gEbC8FsiRdpOXgOe4snP49YwjiXynEB8Mp7sUx80W5eN+BnnBHJ/F7eIeLzs+QBfDD40bJMm97oEFcw==", + "version": "1.5.73", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.73.tgz", + "integrity": "sha512-8wGNxG9tAG5KhGd3eeA0o6ixhiNdgr0DcHWm85XPCphwZgD1lIEoi6t3VERayWao7SF7AAZTw6oARGJeVjH8Kg==", "dev": true, "license": "ISC" }, @@ -5547,58 +5007,60 @@ } }, "node_modules/es-abstract": { - "version": "1.23.5", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.5.tgz", - "integrity": "sha512-vlmniQ0WNPwXqA0BnmwV3Ng7HxiGlh6r5U6JcTMNx8OilcAGqVJBHJcPjqOMaczU9fRuRK5Px2BdVyPRnKMMVQ==", + "version": "1.23.6", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.23.6.tgz", + "integrity": "sha512-Ifco6n3yj2tMZDWNLyloZrytt9lqqlwvS83P3HtaETR0NUOYnIULGGHpktqYGObGy+8wc1okO25p8TjemhImvA==", "dev": true, "license": "MIT", "dependencies": { "array-buffer-byte-length": "^1.0.1", - "arraybuffer.prototype.slice": "^1.0.3", + "arraybuffer.prototype.slice": "^1.0.4", "available-typed-arrays": "^1.0.7", - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", "data-view-buffer": "^1.0.1", "data-view-byte-length": "^1.0.1", "data-view-byte-offset": "^1.0.0", - "es-define-property": "^1.0.0", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", "es-object-atoms": "^1.0.0", "es-set-tostringtag": "^2.0.3", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.4", + "es-to-primitive": "^1.3.0", + "function.prototype.name": "^1.1.7", + "get-intrinsic": "^1.2.6", "get-symbol-description": "^1.0.2", "globalthis": "^1.0.4", - "gopd": "^1.0.1", + "gopd": "^1.2.0", "has-property-descriptors": "^1.0.2", - "has-proto": "^1.0.3", - "has-symbols": "^1.0.3", + "has-proto": "^1.2.0", + "has-symbols": "^1.1.0", "hasown": "^2.0.2", - "internal-slot": "^1.0.7", + "internal-slot": "^1.1.0", "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-data-view": "^1.0.1", + "is-data-view": "^1.0.2", "is-negative-zero": "^2.0.3", - "is-regex": "^1.1.4", + "is-regex": "^1.2.1", "is-shared-array-buffer": "^1.0.3", - "is-string": "^1.0.7", + "is-string": "^1.1.1", "is-typed-array": "^1.1.13", - "is-weakref": "^1.0.2", + "is-weakref": "^1.1.0", + "math-intrinsics": "^1.0.0", "object-inspect": "^1.13.3", "object-keys": "^1.1.1", "object.assign": "^4.1.5", "regexp.prototype.flags": "^1.5.3", - "safe-array-concat": "^1.1.2", - "safe-regex-test": "^1.0.3", - "string.prototype.trim": "^1.2.9", - "string.prototype.trimend": "^1.0.8", + "safe-array-concat": "^1.1.3", + "safe-regex-test": "^1.1.0", + "string.prototype.trim": "^1.2.10", + "string.prototype.trimend": "^1.0.9", "string.prototype.trimstart": "^1.0.8", "typed-array-buffer": "^1.0.2", "typed-array-byte-length": "^1.0.1", - "typed-array-byte-offset": "^1.0.2", - "typed-array-length": "^1.0.6", + "typed-array-byte-offset": "^1.0.3", + "typed-array-length": "^1.0.7", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.15" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -5608,14 +5070,11 @@ } }, "node_modules/es-define-property": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", - "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.1.tgz", + "integrity": "sha512-e3nRfgfUZ4rNGL232gUgX06QNyyez04KdjFrF+LTRoOXmrOgFKDg4BCdsjW8EnT69eqdYGmRpJwiPVYNrCaW3g==", "dev": true, "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.4" - }, "engines": { "node": ">= 0.4" } @@ -5717,15 +5176,15 @@ } }, "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.3.0.tgz", + "integrity": "sha512-w+5mJ3GuFL+NjVtJlvydShqE1eN3h3PbI7/5LAsYJP/2qtuMXjfL2LpHSRqo4b4eSF5K/DH1JXKUAHSB2UW50g==", "dev": true, "license": "MIT", "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" + "is-callable": "^1.2.7", + "is-date-object": "^1.0.5", + "is-symbol": "^1.0.4" }, "engines": { "node": ">= 0.4" @@ -5735,9 +5194,9 @@ } }, "node_modules/esbuild": { - "version": "0.21.5", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", - "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", + "version": "0.24.0", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.0.tgz", + "integrity": "sha512-FuLPevChGDshgSicjisSooU0cemp/sGXR841D5LHMB7mTVOmsEHcAxaH3irL53+8YDIeVNQEySh4DaYU/iuPqQ==", "dev": true, "hasInstallScript": true, "license": "MIT", @@ -5745,32 +5204,33 @@ "esbuild": "bin/esbuild" }, "engines": { - "node": ">=12" + "node": ">=18" }, "optionalDependencies": { - "@esbuild/aix-ppc64": "0.21.5", - "@esbuild/android-arm": "0.21.5", - "@esbuild/android-arm64": "0.21.5", - "@esbuild/android-x64": "0.21.5", - "@esbuild/darwin-arm64": "0.21.5", - "@esbuild/darwin-x64": "0.21.5", - "@esbuild/freebsd-arm64": "0.21.5", - "@esbuild/freebsd-x64": "0.21.5", - "@esbuild/linux-arm": "0.21.5", - "@esbuild/linux-arm64": "0.21.5", - "@esbuild/linux-ia32": "0.21.5", - "@esbuild/linux-loong64": "0.21.5", - "@esbuild/linux-mips64el": "0.21.5", - "@esbuild/linux-ppc64": "0.21.5", - "@esbuild/linux-riscv64": "0.21.5", - "@esbuild/linux-s390x": "0.21.5", - "@esbuild/linux-x64": "0.21.5", - "@esbuild/netbsd-x64": "0.21.5", - "@esbuild/openbsd-x64": "0.21.5", - "@esbuild/sunos-x64": "0.21.5", - "@esbuild/win32-arm64": "0.21.5", - "@esbuild/win32-ia32": "0.21.5", - "@esbuild/win32-x64": "0.21.5" + "@esbuild/aix-ppc64": "0.24.0", + "@esbuild/android-arm": "0.24.0", + "@esbuild/android-arm64": "0.24.0", + "@esbuild/android-x64": "0.24.0", + "@esbuild/darwin-arm64": "0.24.0", + "@esbuild/darwin-x64": "0.24.0", + "@esbuild/freebsd-arm64": "0.24.0", + "@esbuild/freebsd-x64": "0.24.0", + "@esbuild/linux-arm": "0.24.0", + "@esbuild/linux-arm64": "0.24.0", + "@esbuild/linux-ia32": "0.24.0", + "@esbuild/linux-loong64": "0.24.0", + "@esbuild/linux-mips64el": "0.24.0", + "@esbuild/linux-ppc64": "0.24.0", + "@esbuild/linux-riscv64": "0.24.0", + "@esbuild/linux-s390x": "0.24.0", + "@esbuild/linux-x64": "0.24.0", + "@esbuild/netbsd-x64": "0.24.0", + "@esbuild/openbsd-arm64": "0.24.0", + "@esbuild/openbsd-x64": "0.24.0", + "@esbuild/sunos-x64": "0.24.0", + "@esbuild/win32-arm64": "0.24.0", + "@esbuild/win32-ia32": "0.24.0", + "@esbuild/win32-x64": "0.24.0" } }, "node_modules/esbuild-register": { @@ -5992,13 +5452,13 @@ } }, "node_modules/eslint-plugin-react-refresh": { - "version": "0.4.14", - "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.14.tgz", - "integrity": "sha512-aXvzCTK7ZBv1e7fahFuR3Z/fyQQSIQ711yPgYRj+Oj64tyTgO4iQIDmYXDBqvSWQ/FA4OSCsXOStlF+noU0/NA==", + "version": "0.4.16", + "resolved": "https://registry.npmjs.org/eslint-plugin-react-refresh/-/eslint-plugin-react-refresh-0.4.16.tgz", + "integrity": "sha512-slterMlxAhov/DZO8NScf6mEeMBBXodFUolijDvrtTxyezyLoTQaa73FyYus/VbTdftd8wBgBxPMRk3poleXNQ==", "dev": true, "license": "MIT", "peerDependencies": { - "eslint": ">=7" + "eslint": ">=8.40" } }, "node_modules/eslint-plugin-react/node_modules/doctrine": { @@ -6033,9 +5493,9 @@ } }, "node_modules/eslint-plugin-storybook": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-0.11.0.tgz", - "integrity": "sha512-MvPJgF+ORwgK04a1CY5itO4pwdAOFIRqczlNEHL62+4Ocvj1d61GWRqIdeX1BNCKno6fdPC6TksUHCZMGsq26g==", + "version": "0.11.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-storybook/-/eslint-plugin-storybook-0.11.1.tgz", + "integrity": "sha512-yGKpAYkBm/Q2hZg476vRUAvd9lAccjjSvzU5nYy3BSQbKTPy7uopx7JEpwk2vSuw4weTMZzWF64z9/gp/K5RCg==", "dev": true, "license": "MIT", "dependencies": { @@ -6051,9 +5511,9 @@ } }, "node_modules/eslint-plugin-testing-library": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-6.4.0.tgz", - "integrity": "sha512-yeWF+YgCgvNyPNI9UKnG0FjeE2sk93N/3lsKqcmR8dSfeXJwFT5irnWo7NjLf152HkRzfoFjh3LsBUrhvFz4eA==", + "version": "6.5.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-testing-library/-/eslint-plugin-testing-library-6.5.0.tgz", + "integrity": "sha512-Ls5TUfLm5/snocMAOlofSOJxNN0aKqwTlco7CrNtMjkTdQlkpSMaeTCDHCuXfzrI97xcx2rSCNeKeJjtpkNC1w==", "dev": true, "license": "MIT", "dependencies": { @@ -6186,6 +5646,19 @@ "node": ">=8.0.0" } }, + "node_modules/eslint-plugin-testing-library/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/eslint-plugin-testing-library/node_modules/estraverse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", @@ -6227,6 +5700,19 @@ } }, "node_modules/eslint-visitor-keys": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", @@ -6257,6 +5743,19 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/esprima": { "version": "4.0.1", "resolved": "https://registry.npmjs.org/esprima/-/esprima-4.0.1.tgz", @@ -6544,9 +6043,9 @@ } }, "node_modules/flatted": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", - "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.2.tgz", + "integrity": "sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==", "dev": true, "license": "ISC" }, @@ -6608,16 +6107,17 @@ } }, "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", + "version": "1.1.7", + "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.7.tgz", + "integrity": "sha512-2g4x+HqTJKM9zcJqBSpjoRmdcPFtJM60J3xJisTQSXBWka5XqyBN/2tNUgma1mztTXyDuUsEtYe5qcs7xYzYQA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" + "call-bind": "^1.0.8", + "define-properties": "^1.2.1", + "functions-have-names": "^1.2.3", + "hasown": "^2.0.2", + "is-callable": "^1.2.7" }, "engines": { "node": ">= 0.4" @@ -6657,17 +6157,22 @@ } }, "node_modules/get-intrinsic": { - "version": "1.2.4", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", - "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.6.tgz", + "integrity": "sha512-qxsEs+9A+u85HhllWJJFicJfPDhRmjzoYdl64aMWW9yRIJmSyxdn8IEkuIM530/7T+lv0TIHd8L6Q/ra0tEoeA==", "dev": true, "license": "MIT", "dependencies": { + "call-bind-apply-helpers": "^1.0.1", + "dunder-proto": "^1.0.0", + "es-define-property": "^1.0.1", "es-errors": "^1.3.0", + "es-object-atoms": "^1.0.0", "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" + "gopd": "^1.2.0", + "has-symbols": "^1.1.0", + "hasown": "^2.0.2", + "math-intrinsics": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -6820,13 +6325,13 @@ } }, "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.2.0.tgz", + "integrity": "sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==", "dev": true, "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.1.3" + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -6887,11 +6392,14 @@ } }, "node_modules/has-proto": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", - "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.2.0.tgz", + "integrity": "sha512-KIL7eQPfHQRC8+XluaIw7BHUwwqL19bQn4hzNgdr+1wXoU0KKj6rufu47lhY7KbJR2C6T6+PfyN0Ea7wkSS+qQ==", "dev": true, "license": "MIT", + "dependencies": { + "dunder-proto": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -6900,9 +6408,9 @@ } }, "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.1.0.tgz", + "integrity": "sha512-1cDNdwJ2Jaohmb3sg4OmKaMBwuC48sYni5HUw2DvsC8LjGTLK9h+eb1X6RyuOHe4hT0ULCW68iomhjUoKUqlPQ==", "dev": true, "license": "MIT", "engines": { @@ -7113,29 +6621,29 @@ "license": "ISC" }, "node_modules/internal-slot": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.7.tgz", - "integrity": "sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.1.0.tgz", + "integrity": "sha512-4gd7VpWNQNB4UKKCFFVcp1AVv+FMOgs9NKzjHKusc8jTMhd5eL1NqQqOpE0KzMds804/yHlglp3uxgluOqAPLw==", "dev": true, "license": "MIT", "dependencies": { "es-errors": "^1.3.0", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "hasown": "^2.0.2", + "side-channel": "^1.1.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/is-arguments": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.1.1.tgz", - "integrity": "sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/is-arguments/-/is-arguments-1.2.0.tgz", + "integrity": "sha512-7bVbi0huj/wrIAOzb8U1aszg9kdi3KN/CyU19CTI7tAoZYEZoL9yCDXpbXN+uPsuWnP02cyug1gleqq+TU+YCA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7185,27 +6693,30 @@ } }, "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.1.0.tgz", + "integrity": "sha512-n4ZT37wG78iz03xPRKJrHTdZbe3IicyucEtdRsV5yglwc3GyUfbAfpSeD0FJ41NbUNSt5wbhqfp1fS+BgnvDFQ==", "dev": true, "license": "MIT", "dependencies": { - "has-bigints": "^1.0.1" + "has-bigints": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.2.1.tgz", + "integrity": "sha512-l9qO6eFlUETHtuihLcYOaLKByJ1f+N4kthcU9YjHy3N+B3hWv0y/2Nd0mu/7lTFnRQHTrSdXF50HQ3bl5fEnng==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7228,9 +6739,9 @@ } }, "node_modules/is-core-module": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.15.1.tgz", - "integrity": "sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==", + "version": "2.16.0", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.16.0.tgz", + "integrity": "sha512-urTSINYfAYgcbLb0yDQ6egFm6h3Mo1DcF9EkyXSRjjzdHbsulg01qhwWuXdOoUBuTkbQ80KDboXa0vFJ+BDH+g==", "dev": true, "license": "MIT", "dependencies": { @@ -7244,12 +6755,14 @@ } }, "node_modules/is-data-view": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.1.tgz", - "integrity": "sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/is-data-view/-/is-data-view-1.0.2.tgz", + "integrity": "sha512-RKtWF8pGmS87i2D6gqQu/l7EYRlVdfzemCJN/P3UOs//x1QE7mfhvzHIApBTRf7axvT6DMGwSwBXYCT0nfB9xw==", "dev": true, "license": "MIT", "dependencies": { + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", "is-typed-array": "^1.1.13" }, "engines": { @@ -7260,13 +6773,14 @@ } }, "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.1.0.tgz", + "integrity": "sha512-PwwhEakHVKTdRNVOw+/Gyh0+MzlCl4R6qKvkhuvLtPMggI1WAHt9sOwZxQLSGpUaDnrdyDsomoRgNnCfKNSXXg==", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7302,13 +6816,16 @@ } }, "node_modules/is-finalizationregistry": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.0.2.tgz", - "integrity": "sha512-0by5vtUJs8iFQb5TYUHHPudOR+qXYIMKtiUzvLIZITZUjknFmziyBJuLhVRc+Ds0dREFlskDNJKYIdIzu/9pfw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz", + "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7400,13 +6917,14 @@ } }, "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.1.1.tgz", + "integrity": "sha512-lZhclumE1G6VYD8VHe35wFaIif+CTy5SJIi5+3y4psDgWu4wPDoBhF8NxUOinEc7pHgiTsT6MaBb92rKhhD+Xw==", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7433,14 +6951,16 @@ "license": "MIT" }, "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.2.1.tgz", + "integrity": "sha512-MjYsKHO5O7mCsmRGxWcLWheFqN9DJ/2TmngvjKXihe6efViPqc274+Fx/4fYj/r03+ESvBdTXK0V6tA3rgez1g==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.2", + "gopd": "^1.2.0", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -7492,13 +7012,14 @@ } }, "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.1.1.tgz", + "integrity": "sha512-BtEeSsoaQjlSPBemMQIrY1MY0uM6vnS1g5fmufYOtnxLGUZM2178PKbhsk7Ffv58IX+ZtcvoGwccYsh0PglkAA==", "dev": true, "license": "MIT", "dependencies": { - "has-tostringtag": "^1.0.0" + "call-bound": "^1.0.3", + "has-tostringtag": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -7508,13 +7029,15 @@ } }, "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.1.1.tgz", + "integrity": "sha512-9gGx6GTtCQM73BgmHQXfDmLtfjjTUDSyoxTCbp5WtoixAhfgsDirWIcVQ/IHpvI5Vgd5i/J5F7B9cN/WlVbC/w==", "dev": true, "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" + "call-bound": "^1.0.2", + "has-symbols": "^1.1.0", + "safe-regex-test": "^1.1.0" }, "engines": { "node": ">= 0.4" @@ -7553,13 +7076,16 @@ } }, "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.1.0.tgz", + "integrity": "sha512-SXM8Nwyys6nT5WP6pltOwKytLV7FqQ4UiibxVmW+EIosHcmCqkkjViTb5SNssDlkCiEYRP1/pdWUKVvZBmsR2Q==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "call-bound": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -7705,17 +7231,18 @@ } }, "node_modules/iterator.prototype": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.3.tgz", - "integrity": "sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/iterator.prototype/-/iterator.prototype-1.1.4.tgz", + "integrity": "sha512-x4WH0BWmrMmg4oHHl+duwubhrvczGlyuGAZu3nvrf0UXOfPu8IhZObFEr7DE/iv01YgVZrsOiRcqw2srkKEDIA==", "dev": true, "license": "MIT", "dependencies": { - "define-properties": "^1.2.1", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "reflect.getprototypeof": "^1.0.4", - "set-function-name": "^2.0.1" + "define-data-property": "^1.1.4", + "es-object-atoms": "^1.0.0", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", + "reflect.getprototypeof": "^1.0.8", + "set-function-name": "^2.0.2" }, "engines": { "node": ">= 0.4" @@ -8755,9 +8282,9 @@ } }, "node_modules/jsesc": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.0.2.tgz", - "integrity": "sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-3.1.0.tgz", + "integrity": "sha512-/sM3dO2FOzXjKQhJuo0Q173wf2KOo8t4I8vHy6lF9poUp7bKT0/NHE8fPX23PwfhnykfqnC2xRxOnVw5XuGIaA==", "dev": true, "license": "MIT", "bin": { @@ -8958,9 +8485,9 @@ } }, "node_modules/magic-string": { - "version": "0.30.12", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.12.tgz", - "integrity": "sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==", + "version": "0.30.17", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.17.tgz", + "integrity": "sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==", "dev": true, "license": "MIT", "dependencies": { @@ -9020,6 +8547,16 @@ "dev": true, "license": "MIT" }, + "node_modules/math-intrinsics": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.0.0.tgz", + "integrity": "sha512-4MqMiKP90ybymYvsut0CH2g4XWbfLtmlCkXmtmdcDCxNB+mQcu1w/1+L/VD7vi/PSv7X2JYV7SCcR+jiPXnQtA==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/memoizerific": { "version": "1.11.3", "resolved": "https://registry.npmjs.org/memoizerific/-/memoizerific-1.11.3.tgz", @@ -9135,9 +8672,9 @@ "license": "MIT" }, "node_modules/nanoid": { - "version": "3.3.7", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", - "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "version": "3.3.8", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.8.tgz", + "integrity": "sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==", "dev": true, "funding": [ { @@ -9214,9 +8751,9 @@ "license": "MIT" }, "node_modules/node-releases": { - "version": "2.0.18", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.18.tgz", - "integrity": "sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==", + "version": "2.0.19", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.19.tgz", + "integrity": "sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==", "dev": true, "license": "MIT" }, @@ -9244,9 +8781,9 @@ } }, "node_modules/nwsapi": { - "version": "2.2.13", - "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.13.tgz", - "integrity": "sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==", + "version": "2.2.16", + "resolved": "https://registry.npmjs.org/nwsapi/-/nwsapi-2.2.16.tgz", + "integrity": "sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==", "dev": true, "license": "MIT" }, @@ -9739,9 +9276,9 @@ } }, "node_modules/prettier": { - "version": "3.3.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.3.tgz", - "integrity": "sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==", + "version": "3.4.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.4.2.tgz", + "integrity": "sha512-e9MewbtFo+Fevyuxn/4rrcDAaq0IYxPGLvObpQjiZBMAzB9IGmzlnG9RZy3FFas+eBMu2vA0CszMeduow5dIuQ==", "dev": true, "license": "MIT", "bin": { @@ -9839,13 +9376,16 @@ "license": "MIT" }, "node_modules/psl": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/psl/-/psl-1.10.0.tgz", - "integrity": "sha512-KSKHEbjAnpUuAUserOq0FxGXCUrzC3WniuSJhvdbs102rL55266ZcHBqLWOsG30spQMlPdpy7icATiAQehg/iA==", + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/psl/-/psl-1.15.0.tgz", + "integrity": "sha512-JZd3gMVBAVQkSs6HdNZo9Sdo0LNcQeMNP3CozBJb3JYC/QUYZTnKxP+f8oWRX4rHP5EurWxqAHTSwUCjlNKa1w==", "dev": true, "license": "MIT", "dependencies": { "punycode": "^2.3.1" + }, + "funding": { + "url": "https://github.com/sponsors/lupomontero" } }, "node_modules/punycode": { @@ -10054,19 +9594,20 @@ } }, "node_modules/reflect.getprototypeof": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.6.tgz", - "integrity": "sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/reflect.getprototypeof/-/reflect.getprototypeof-1.0.8.tgz", + "integrity": "sha512-B5dj6usc5dkk8uFliwjwDHM8To5/QwdKz9JcBZ8Ic4G1f0YmeeJTtE/ZTdgRFPAfxZFiUaPhZ1Jcs4qeagItGQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", "define-properties": "^1.2.1", - "es-abstract": "^1.23.1", + "dunder-proto": "^1.0.0", + "es-abstract": "^1.23.5", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", - "globalthis": "^1.0.3", - "which-builtin-type": "^1.1.3" + "gopd": "^1.2.0", + "which-builtin-type": "^1.2.0" }, "engines": { "node": ">= 0.4" @@ -10119,13 +9660,13 @@ "license": "MIT" }, "node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "version": "1.22.9", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.9.tgz", + "integrity": "sha512-QxrmX1DzraFIi9PxdG5VkRfRwIgjwyud+z/iBwfRRrVmHc+P9Q7u2lSSpQ6bjr2gy5lrqIiU9vb6iAeGf2400A==", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", + "is-core-module": "^2.16.0", "path-parse": "^1.0.7", "supports-preserve-symlinks-flag": "^1.0.0" }, @@ -10170,9 +9711,9 @@ } }, "node_modules/resolve.exports": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.2.tgz", - "integrity": "sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/resolve.exports/-/resolve.exports-2.0.3.tgz", + "integrity": "sha512-OcXjMsGdhL4XnbShKpAcSqPMzQoYkYyhbEaeSko47MjRP9NfEQMhZkXL1DoFlt9LWQn4YttrdnV6X2OiyzBi+A==", "dev": true, "license": "MIT", "engines": { @@ -10208,9 +9749,9 @@ } }, "node_modules/rollup": { - "version": "4.26.0", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.26.0.tgz", - "integrity": "sha512-ilcl12hnWonG8f+NxU6BlgysVA0gvY2l8N0R84S1HcINbW20bvwuCngJkkInV6LXhwRpucsW5k1ovDwEdBVrNg==", + "version": "4.28.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.28.1.tgz", + "integrity": "sha512-61fXYl/qNVinKmGSTHAZ6Yy8I3YIJC/r2m9feHo6SwVAVcLT5MPwOUFe7EuURA/4m0NR8lXG4BBXuo/IZEsjMg==", "dev": true, "license": "MIT", "dependencies": { @@ -10224,24 +9765,25 @@ "npm": ">=8.0.0" }, "optionalDependencies": { - "@rollup/rollup-android-arm-eabi": "4.26.0", - "@rollup/rollup-android-arm64": "4.26.0", - "@rollup/rollup-darwin-arm64": "4.26.0", - "@rollup/rollup-darwin-x64": "4.26.0", - "@rollup/rollup-freebsd-arm64": "4.26.0", - "@rollup/rollup-freebsd-x64": "4.26.0", - "@rollup/rollup-linux-arm-gnueabihf": "4.26.0", - "@rollup/rollup-linux-arm-musleabihf": "4.26.0", - "@rollup/rollup-linux-arm64-gnu": "4.26.0", - "@rollup/rollup-linux-arm64-musl": "4.26.0", - "@rollup/rollup-linux-powerpc64le-gnu": "4.26.0", - "@rollup/rollup-linux-riscv64-gnu": "4.26.0", - "@rollup/rollup-linux-s390x-gnu": "4.26.0", - "@rollup/rollup-linux-x64-gnu": "4.26.0", - "@rollup/rollup-linux-x64-musl": "4.26.0", - "@rollup/rollup-win32-arm64-msvc": "4.26.0", - "@rollup/rollup-win32-ia32-msvc": "4.26.0", - "@rollup/rollup-win32-x64-msvc": "4.26.0", + "@rollup/rollup-android-arm-eabi": "4.28.1", + "@rollup/rollup-android-arm64": "4.28.1", + "@rollup/rollup-darwin-arm64": "4.28.1", + "@rollup/rollup-darwin-x64": "4.28.1", + "@rollup/rollup-freebsd-arm64": "4.28.1", + "@rollup/rollup-freebsd-x64": "4.28.1", + "@rollup/rollup-linux-arm-gnueabihf": "4.28.1", + "@rollup/rollup-linux-arm-musleabihf": "4.28.1", + "@rollup/rollup-linux-arm64-gnu": "4.28.1", + "@rollup/rollup-linux-arm64-musl": "4.28.1", + "@rollup/rollup-linux-loongarch64-gnu": "4.28.1", + "@rollup/rollup-linux-powerpc64le-gnu": "4.28.1", + "@rollup/rollup-linux-riscv64-gnu": "4.28.1", + "@rollup/rollup-linux-s390x-gnu": "4.28.1", + "@rollup/rollup-linux-x64-gnu": "4.28.1", + "@rollup/rollup-linux-x64-musl": "4.28.1", + "@rollup/rollup-win32-arm64-msvc": "4.28.1", + "@rollup/rollup-win32-ia32-msvc": "4.28.1", + "@rollup/rollup-win32-x64-msvc": "4.28.1", "fsevents": "~2.3.2" } }, @@ -10270,15 +9812,16 @@ } }, "node_modules/safe-array-concat": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.2.tgz", - "integrity": "sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==", + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.1.3.tgz", + "integrity": "sha512-AURm5f0jYEOydBj7VQlVvDrjeFgthDdEF5H1dP+6mNpoXOMo1quQqJ4wvJDyRZ9+pO3kGWoOdmV08cSv2aJV6Q==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4", - "has-symbols": "^1.0.3", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "get-intrinsic": "^1.2.6", + "has-symbols": "^1.1.0", "isarray": "^2.0.5" }, "engines": { @@ -10289,15 +9832,15 @@ } }, "node_modules/safe-regex-test": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.3.tgz", - "integrity": "sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.1.0.tgz", + "integrity": "sha512-x/+Cz4YrimQxQccJf5mKEbIa1NzeCRNI5Ecl/ekmlYaampdNLPalVyIcCZNNH3MvmqBugV5TMYZXv0ljslUlaw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.6", + "call-bound": "^1.0.2", "es-errors": "^1.3.0", - "is-regex": "^1.1.4" + "is-regex": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -10403,16 +9946,17 @@ } }, "node_modules/side-channel": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", - "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.1.0.tgz", + "integrity": "sha512-ZX99e6tRweoUXqR+VBrslhda51Nh5MTQwou5tnUDgbtyM0dBgmhEDtWGP/xbKn6hqfPRHujUNwz5fy/wbbhnpw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.4", - "object-inspect": "^1.13.1" + "object-inspect": "^1.13.3", + "side-channel-list": "^1.0.0", + "side-channel-map": "^1.0.1", + "side-channel-weakmap": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -10421,31 +9965,87 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/signal-exit": { - "version": "3.0.7", - "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", - "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", - "dev": true, - "license": "ISC" - }, - "node_modules/sisteransi": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", - "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", - "dev": true, - "license": "MIT" - }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "node_modules/side-channel-list": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/side-channel-list/-/side-channel-list-1.0.0.tgz", + "integrity": "sha512-FCLHtRD/gnpCiCHEiJLOwdmFP+wzCmDEkc9y7NsYxeF4u7Btsn1ZuwgwJGxImImHicJArLP4R0yX4c2KCrMrTA==", "dev": true, "license": "MIT", + "dependencies": { + "es-errors": "^1.3.0", + "object-inspect": "^1.13.3" + }, "engines": { - "node": ">=8" - } - }, - "node_modules/source-map": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-map": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/side-channel-map/-/side-channel-map-1.0.1.tgz", + "integrity": "sha512-VCjCNfgMsby3tTdo02nbjtM/ewra6jPHmpThenkTYh8pG9ucZ/1P8So4u4FGBek/BjpOVsDCMoLA/iuBKIFXRA==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/side-channel-weakmap": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/side-channel-weakmap/-/side-channel-weakmap-1.0.2.tgz", + "integrity": "sha512-WPS/HvHQTYnHisLo9McqBHOJk2FkHO/tlpvldyrnem4aeQp4hai3gythswg6p01oSoTl58rcpiFAjF2br2Ak2A==", + "dev": true, + "license": "MIT", + "dependencies": { + "call-bound": "^1.0.2", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.5", + "object-inspect": "^1.13.3", + "side-channel-map": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "3.0.7", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-3.0.7.tgz", + "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", + "dev": true, + "license": "ISC" + }, + "node_modules/sisteransi": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/sisteransi/-/sisteransi-1.0.5.tgz", + "integrity": "sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==", + "dev": true, + "license": "MIT" + }, + "node_modules/slash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", + "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", @@ -10507,26 +10107,27 @@ } }, "node_modules/stop-iteration-iterator": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz", - "integrity": "sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/stop-iteration-iterator/-/stop-iteration-iterator-1.1.0.tgz", + "integrity": "sha512-eLoXW/DHyl62zxY4SCaIgnRhuMr6ri4juEYARS8E6sCEqzKpOiE521Ucofdx+KnDZl5xmvGYaaKCk5FEOxJCoQ==", "dev": true, "license": "MIT", "dependencies": { - "internal-slot": "^1.0.4" + "es-errors": "^1.3.0", + "internal-slot": "^1.1.0" }, "engines": { "node": ">= 0.4" } }, "node_modules/storybook": { - "version": "8.4.6", - "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.4.6.tgz", - "integrity": "sha512-J6juZSZT2u3PUW0QZYZZYxBq6zU5O0OrkSgkMXGMg/QrS9to9IHmt4FjEMEyACRbXo8POcB/fSXa3VpGe7bv3g==", + "version": "8.4.7", + "resolved": "https://registry.npmjs.org/storybook/-/storybook-8.4.7.tgz", + "integrity": "sha512-RP/nMJxiWyFc8EVMH5gp20ID032Wvk+Yr3lmKidoegto5Iy+2dVQnUoElZb2zpbVXNHWakGuAkfI0dY1Hfp/vw==", "dev": true, "license": "MIT", "dependencies": { - "@storybook/core": "8.4.6" + "@storybook/core": "8.4.7" }, "bin": { "getstorybook": "bin/index.cjs", @@ -10614,16 +10215,19 @@ } }, "node_modules/string.prototype.trim": { - "version": "1.2.9", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.9.tgz", - "integrity": "sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==", + "version": "1.2.10", + "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.10.tgz", + "integrity": "sha512-Rs66F0P/1kedk5lyYyH9uBzuiI/kNRmwJAR9quK6VOtIpZ2G+hMZd+HQbbv25MgCA6gEffoMZYxlTod4WcdrKA==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", + "define-data-property": "^1.1.4", "define-properties": "^1.2.1", - "es-abstract": "^1.23.0", - "es-object-atoms": "^1.0.0" + "es-abstract": "^1.23.5", + "es-object-atoms": "^1.0.0", + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -10633,16 +10237,20 @@ } }, "node_modules/string.prototype.trimend": { - "version": "1.0.8", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.8.tgz", - "integrity": "sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==", + "version": "1.0.9", + "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.9.tgz", + "integrity": "sha512-G7Ok5C6E/j4SGfyLCloXTrngQIQU3PWtXGst3yM7Bea9FRURf1S42ZHlZZtsNque2FN2PoUhfZXYLNWwEr4dLQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", + "call-bind": "^1.0.8", + "call-bound": "^1.0.2", "define-properties": "^1.2.1", "es-object-atoms": "^1.0.0" }, + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -10876,9 +10484,9 @@ } }, "node_modules/ts-api-utils": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz", - "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.3.tgz", + "integrity": "sha512-i3eMG77UTMD0hZhgRS562pv83RC6ukSAC2GMNWc+9dieh/+jDM5u5YG+NHX6VNDRHQcHwmsTHctP9LhbC3WxVw==", "dev": true, "license": "MIT", "engines": { @@ -11131,9 +10739,9 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", - "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.3.tgz", + "integrity": "sha512-GsvTyUHTriq6o/bHcTd0vM7OQ9JEdlvluu9YISaA7+KzDzPaIzEeDFNkTfhdE3MYcNhNi0vq/LlegYgIs5yPAw==", "dev": true, "license": "MIT", "dependencies": { @@ -11142,7 +10750,8 @@ "for-each": "^0.3.3", "gopd": "^1.0.1", "has-proto": "^1.0.3", - "is-typed-array": "^1.1.13" + "is-typed-array": "^1.1.13", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -11152,18 +10761,18 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.6.tgz", - "integrity": "sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.7.tgz", + "integrity": "sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==", "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.7", "for-each": "^0.3.3", "gopd": "^1.0.1", - "has-proto": "^1.0.3", "is-typed-array": "^1.1.13", - "possible-typed-array-names": "^1.0.0" + "possible-typed-array-names": "^1.0.0", + "reflect.getprototypeof": "^1.0.6" }, "engines": { "node": ">= 0.4" @@ -11187,16 +10796,19 @@ } }, "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", + "integrity": "sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", + "call-bound": "^1.0.3", "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "has-symbols": "^1.1.0", + "which-boxed-primitive": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11230,169 +10842,599 @@ "webpack-virtual-modules": "^0.6.2" }, "engines": { - "node": ">=14.0.0" + "node": ">=14.0.0" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", + "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/uri-js": { + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", + "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/url-parse": { + "version": "1.5.10", + "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", + "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "querystringify": "^2.1.1", + "requires-port": "^1.0.0" + } + }, + "node_modules/util": { + "version": "0.12.5", + "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", + "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "dev": true, + "license": "MIT", + "dependencies": { + "inherits": "^2.0.3", + "is-arguments": "^1.0.4", + "is-generator-function": "^1.0.7", + "is-typed-array": "^1.1.3", + "which-typed-array": "^1.1.2" + } + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", + "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-to-istanbul": { + "version": "9.3.0", + "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", + "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "node_modules/vite": { + "version": "5.4.11", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", + "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", + "dev": true, + "license": "MIT", + "dependencies": { + "esbuild": "^0.21.3", + "postcss": "^8.4.43", + "rollup": "^4.20.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "sass-embedded": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "sass-embedded": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/@esbuild/aix-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", + "integrity": "sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.21.5.tgz", + "integrity": "sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.21.5.tgz", + "integrity": "sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/android-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.21.5.tgz", + "integrity": "sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.21.5.tgz", + "integrity": "sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/darwin-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.21.5.tgz", + "integrity": "sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.21.5.tgz", + "integrity": "sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/freebsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.21.5.tgz", + "integrity": "sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.21.5.tgz", + "integrity": "sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==", + "cpu": [ + "arm" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.21.5.tgz", + "integrity": "sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==", + "cpu": [ + "arm64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.21.5.tgz", + "integrity": "sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==", + "cpu": [ + "ia32" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-loong64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.21.5.tgz", + "integrity": "sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==", + "cpu": [ + "loong64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-mips64el": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.21.5.tgz", + "integrity": "sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==", + "cpu": [ + "mips64el" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-ppc64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.21.5.tgz", + "integrity": "sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==", + "cpu": [ + "ppc64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-riscv64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.21.5.tgz", + "integrity": "sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/vite/node_modules/@esbuild/linux-s390x": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.21.5.tgz", + "integrity": "sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==", + "cpu": [ + "s390x" + ], + "dev": true, + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/update-browserslist-db": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.1.tgz", - "integrity": "sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } + "node_modules/vite/node_modules/@esbuild/linux-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.21.5.tgz", + "integrity": "sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==", + "cpu": [ + "x64" ], + "dev": true, "license": "MIT", - "dependencies": { - "escalade": "^3.2.0", - "picocolors": "^1.1.0" - }, - "bin": { - "update-browserslist-db": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" } }, - "node_modules/uri-js": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", - "integrity": "sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==", + "node_modules/vite/node_modules/@esbuild/netbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.21.5.tgz", + "integrity": "sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==", + "cpu": [ + "x64" + ], "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" + "license": "MIT", + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/url-parse": { - "version": "1.5.10", - "resolved": "https://registry.npmjs.org/url-parse/-/url-parse-1.5.10.tgz", - "integrity": "sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==", + "node_modules/vite/node_modules/@esbuild/openbsd-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.21.5.tgz", + "integrity": "sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "querystringify": "^2.1.1", - "requires-port": "^1.0.0" + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" } }, - "node_modules/util": { - "version": "0.12.5", - "resolved": "https://registry.npmjs.org/util/-/util-0.12.5.tgz", - "integrity": "sha512-kZf/K6hEIrWHI6XqOFUiiMa+79wE/D8Q+NCNAWclkyg3b4d2k7s0QGepNjiABc+aR3N1PAyHL7p6UcLY6LmrnA==", + "node_modules/vite/node_modules/@esbuild/sunos-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.21.5.tgz", + "integrity": "sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==", + "cpu": [ + "x64" + ], "dev": true, "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "is-arguments": "^1.0.4", - "is-generator-function": "^1.0.7", - "is-typed-array": "^1.1.3", - "which-typed-array": "^1.1.2" + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" } }, - "node_modules/uuid": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", - "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", - "dev": true, - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" + "node_modules/vite/node_modules/@esbuild/win32-arm64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.21.5.tgz", + "integrity": "sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==", + "cpu": [ + "arm64" ], + "dev": true, "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" } }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", + "node_modules/vite/node_modules/@esbuild/win32-ia32": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.21.5.tgz", + "integrity": "sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==", + "cpu": [ + "ia32" + ], "dev": true, - "license": "MIT" + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } }, - "node_modules/v8-to-istanbul": { - "version": "9.3.0", - "resolved": "https://registry.npmjs.org/v8-to-istanbul/-/v8-to-istanbul-9.3.0.tgz", - "integrity": "sha512-kiGUalWN+rgBJ/1OHZsBtU4rXZOfj/7rKQxULKlIzwzQSvMJUUNgPwJEEh7gU6xEVxC0ahoOBvN2YI8GH6FNgA==", + "node_modules/vite/node_modules/@esbuild/win32-x64": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.21.5.tgz", + "integrity": "sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==", + "cpu": [ + "x64" + ], "dev": true, - "license": "ISC", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" - }, + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=10.12.0" + "node": ">=12" } }, - "node_modules/vite": { - "version": "5.4.11", - "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.11.tgz", - "integrity": "sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==", + "node_modules/vite/node_modules/esbuild": { + "version": "0.21.5", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", + "integrity": "sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==", "dev": true, + "hasInstallScript": true, "license": "MIT", - "dependencies": { - "esbuild": "^0.21.3", - "postcss": "^8.4.43", - "rollup": "^4.20.0" - }, "bin": { - "vite": "bin/vite.js" + "esbuild": "bin/esbuild" }, "engines": { - "node": "^18.0.0 || >=20.0.0" - }, - "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" + "node": ">=12" }, "optionalDependencies": { - "fsevents": "~2.3.3" - }, - "peerDependencies": { - "@types/node": "^18.0.0 || >=20.0.0", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "sass-embedded": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "sass-embedded": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } + "@esbuild/aix-ppc64": "0.21.5", + "@esbuild/android-arm": "0.21.5", + "@esbuild/android-arm64": "0.21.5", + "@esbuild/android-x64": "0.21.5", + "@esbuild/darwin-arm64": "0.21.5", + "@esbuild/darwin-x64": "0.21.5", + "@esbuild/freebsd-arm64": "0.21.5", + "@esbuild/freebsd-x64": "0.21.5", + "@esbuild/linux-arm": "0.21.5", + "@esbuild/linux-arm64": "0.21.5", + "@esbuild/linux-ia32": "0.21.5", + "@esbuild/linux-loong64": "0.21.5", + "@esbuild/linux-mips64el": "0.21.5", + "@esbuild/linux-ppc64": "0.21.5", + "@esbuild/linux-riscv64": "0.21.5", + "@esbuild/linux-s390x": "0.21.5", + "@esbuild/linux-x64": "0.21.5", + "@esbuild/netbsd-x64": "0.21.5", + "@esbuild/openbsd-x64": "0.21.5", + "@esbuild/sunos-x64": "0.21.5", + "@esbuild/win32-arm64": "0.21.5", + "@esbuild/win32-ia32": "0.21.5", + "@esbuild/win32-x64": "0.21.5" } }, "node_modules/w3c-xmlserializer": { @@ -11496,41 +11538,45 @@ } }, "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.1.1.tgz", + "integrity": "sha512-TbX3mj8n0odCBFVlY8AxkqcHASw3L60jIuF8jFP78az3C2YhmGvqbHBpAjTRH2/xqYunrJ9g1jSyjCjpoWzIAA==", "dev": true, "license": "MIT", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "is-bigint": "^1.1.0", + "is-boolean-object": "^1.2.1", + "is-number-object": "^1.1.1", + "is-string": "^1.1.1", + "is-symbol": "^1.1.1" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/which-builtin-type": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.1.4.tgz", - "integrity": "sha512-bppkmBSsHFmIMSl8BO9TbsyzsvGjVoppt8xUiGzwiu/bhDCGxnpOKCxgqj6GuyHE0mINMDecBFPlOm2hzY084w==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/which-builtin-type/-/which-builtin-type-1.2.1.tgz", + "integrity": "sha512-6iBczoX+kDQ7a3+YJBnh3T+KZRxM/iYNPXicqk66/Qfm1b93iu+yOImkg0zHbj5LNOcNv1TEADiZ0xa34B4q6Q==", "dev": true, "license": "MIT", "dependencies": { + "call-bound": "^1.0.2", "function.prototype.name": "^1.1.6", "has-tostringtag": "^1.0.2", "is-async-function": "^2.0.0", - "is-date-object": "^1.0.5", - "is-finalizationregistry": "^1.0.2", + "is-date-object": "^1.1.0", + "is-finalizationregistry": "^1.1.0", "is-generator-function": "^1.0.10", - "is-regex": "^1.1.4", + "is-regex": "^1.2.1", "is-weakref": "^1.0.2", "isarray": "^2.0.5", - "which-boxed-primitive": "^1.0.2", + "which-boxed-primitive": "^1.1.0", "which-collection": "^1.0.2", - "which-typed-array": "^1.1.15" + "which-typed-array": "^1.1.16" }, "engines": { "node": ">= 0.4" @@ -11559,9 +11605,9 @@ } }, "node_modules/which-typed-array": { - "version": "1.1.15", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.15.tgz", - "integrity": "sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==", + "version": "1.1.16", + "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.16.tgz", + "integrity": "sha512-g+N+GAWiRj66DngFwHvISJd+ITsyphZvD1vChfVg6cEdnzy53GzB3oy0fUNlvhz7H7+MiqhYr26qxQShCpKTTQ==", "dev": true, "license": "MIT", "dependencies": { diff --git a/starsky/starsky/clientapp/package.json b/starsky/starsky/clientapp/package.json index 72257bbb9..d0e752c61 100644 --- a/starsky/starsky/clientapp/package.json +++ b/starsky/starsky/clientapp/package.json @@ -31,21 +31,21 @@ "react-router-dom": "^6.28.0" }, "devDependencies": { - "@storybook/addon-essentials": "^8.4.4", - "@storybook/addon-interactions": "^8.4.4", - "@storybook/addon-links": "^8.4.4", - "@storybook/builder-vite": "^8.4.4", - "@storybook/react": "^8.4.4", - "@storybook/react-vite": "^8.4.6", + "@storybook/addon-essentials": "^8.4.7", + "@storybook/addon-interactions": "^8.4.7", + "@storybook/addon-links": "^8.4.7", + "@storybook/builder-vite": "^8.4.7", + "@storybook/react": "^8.4.7", + "@storybook/react-vite": "^8.4.7", "@testing-library/jest-dom": "^6.6.3", "@testing-library/react": "^14.3.1", "@types/jest": "^29.5.14", - "@types/leaflet": "^1.9.14", - "@types/node": "^20.17.6", + "@types/leaflet": "^1.9.15", + "@types/node": "^20.17.10", "@types/react": "^18.2.55", "@types/react-dom": "^18.2.18", - "@typescript-eslint/eslint-plugin": "^6.21.0", - "@typescript-eslint/parser": "^6.21.0", + "@typescript-eslint/eslint-plugin": "^8.18.0", + "@typescript-eslint/parser": "^8.18.0", "@vitejs/plugin-react": "^4.2.1", "eslint": "^8.57.1", "eslint-config-prettier": "^9.1.0", @@ -54,14 +54,14 @@ "eslint-plugin-react": "^7.37.2", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.5", - "eslint-plugin-storybook": "^0.11.0", - "eslint-plugin-testing-library": "^6.4.0", + "eslint-plugin-storybook": "^0.11.1", + "eslint-plugin-testing-library": "^6.5.0", "identity-obj-proxy": "^3.0.0", "isomorphic-fetch": "^3.0.0", "jest": "^29.7.0", "jest-environment-jsdom": "^29.7.0", - "prettier": "^3.3.3", - "storybook": "^8.4.4", + "prettier": "^3.4.2", + "storybook": "^8.4.7", "ts-jest": "^29.2.5", "ts-node": "^10.9.2", "typescript": "^5.3.3", From 51ae452043d8fdac5b1bc373119e2bc8cc02fa05 Mon Sep 17 00:00:00 2001 From: Dion Date: Mon, 16 Dec 2024 14:52:29 +0100 Subject: [PATCH 02/30] #1865 fixes (cherry picked from commit f9c86433b574ad1e413b3e22ecf7b16b31f7a572) --- .../build-tools/clientapp-vite-update.js | 3 + starsky/starsky/clientapp/eslint.config.js | 58 +++++++++++++++++-- starsky/starsky/clientapp/package-lock.json | 24 ++++++++ starsky/starsky/clientapp/package.json | 5 +- .../starsky/clientapp/scripts/prestorybook.js | 4 +- .../current-location-button.spec.tsx | 20 ++++++- .../atoms/drop-area/post-single-form-data.ts | 22 +++++-- .../file-hash-image/pan-and-zoom-image.tsx | 4 +- .../menu-option-modal/menu-option-modal.tsx | 4 +- .../atoms/menu-option/menu-option.tsx | 4 +- .../src/components/atoms/modal/modal.tsx | 10 ++-- .../components/atoms/more-menu/more-menu.tsx | 4 +- .../archive-sidebar-selection-list.tsx | 4 +- .../force-sync-wait-button.tsx | 2 +- .../internal/inline-search-suggest.tsx | 2 +- .../menu-inline-search/menu-inline-search.tsx | 2 +- .../menu-select-count/menu-select-count.tsx | 8 ++- .../modal-drop-area-files-added.tsx | 2 +- .../detail-view-media/detail-view-gpx.tsx | 6 +- .../detail-view-media/detail-view-mp4.tsx | 6 +- .../detail-view-media/internal/controls.tsx | 3 +- .../detail-view-sidebar.spec.tsx | 8 +-- .../internal/select-menu-item.tsx | 10 +++- .../menu-archive/menu-archive.spec.tsx | 11 ++-- .../organisms/menu-archive/menu-archive.tsx | 4 +- .../menu-detail-view/menu-detail-view.tsx | 8 ++- .../organisms/menu-search/menu-search.tsx | 8 ++- .../organisms/menu-trash/menu-trash.tsx | 4 +- ...top-editor-open-selection-confirmation.tsx | 3 +- .../modal-detailview-rename-file.tsx | 2 +- .../modal-display-options.tsx | 2 +- .../modal-download/modal-download.tsx | 2 +- .../modal-force-delete/modal-force-delete.tsx | 2 +- .../modal-geo/internal/update-geo-location.ts | 4 +- .../organisms/modal-geo/modal-geo.spec.tsx | 13 ++--- .../organisms/modal-geo/modal-geo.tsx | 4 +- .../modal-move-file/modal-move-file.tsx | 2 +- .../modal-move-folder-to-trash.tsx | 2 +- .../organisms/modal-publish/modal-publish.tsx | 4 +- .../containers/detailview/detailview.spec.tsx | 16 +++-- .../src/containers/detailview/detailview.tsx | 6 +- .../src/contexts-wrappers/archive-wrapper.tsx | 2 +- .../contexts-wrappers/detailview-wrapper.tsx | 2 +- .../src/hooks/realtime/use-sockets.tsx | 2 +- .../src/hooks/realtime/websocket-service.ts | 2 +- .../clientapp/src/hooks/use-filelist.ts | 2 +- .../src/hooks/use-gestures/IHandlers.types.ts | 28 ++++----- .../src/hooks/use-intersection-observer.ts | 4 +- .../clientapp/src/hooks/use-interval.spec.tsx | 2 +- .../clientapp/src/hooks/use-interval.ts | 2 +- .../use-keyboard/use-keyboard-event.spec.tsx | 2 +- .../hooks/use-keyboard/use-keyboard-event.ts | 8 ++- .../src/hooks/use-location/use-location.ts | 2 +- .../clientapp/src/hooks/use-searchlist.ts | 2 +- .../clientapp/src/shared/clipboard-helper.ts | 2 +- .../clientapp/src/shared/fetch/fetch-post.ts | 2 +- .../starsky/clientapp/src/shared/geo.spec.ts | 2 +- .../clientapp/src/shared/url/url-path.ts | 3 +- 58 files changed, 264 insertions(+), 117 deletions(-) diff --git a/starsky-tools/build-tools/clientapp-vite-update.js b/starsky-tools/build-tools/clientapp-vite-update.js index 1b0fd32ed..2dfdfae69 100644 --- a/starsky-tools/build-tools/clientapp-vite-update.js +++ b/starsky-tools/build-tools/clientapp-vite-update.js @@ -277,6 +277,7 @@ npmInstall('jest-environment-jsdom', false, true); npmInstall('identity-obj-proxy', false, true); npmInstall('isomorphic-fetch', false, true); npmInstall('eslint-plugin-react', false, true); +npmInstall('typescript-eslint', false, true); npmInstall('eslint-config-prettier', false, true); npmInstall('eslint-plugin-prettier', false, true); npmInstall('eslint-plugin-jest-react', false, true); @@ -300,6 +301,8 @@ npmInstall('@testing-library/react', false, true); + + console.log("npm install result:"); const npmInstallSpawnResult = spawnSync( "npm", diff --git a/starsky/starsky/clientapp/eslint.config.js b/starsky/starsky/clientapp/eslint.config.js index ac5942f58..74c450a1f 100644 --- a/starsky/starsky/clientapp/eslint.config.js +++ b/starsky/starsky/clientapp/eslint.config.js @@ -1,14 +1,60 @@ -import globals from "globals"; import pluginJs from "@eslint/js"; -import tseslint from "typescript-eslint"; +import jestReactPlugin from "eslint-plugin-jest-react"; +import prettierPlugin from "eslint-plugin-prettier"; import pluginReact from "eslint-plugin-react"; - +import hooksPlugin from "eslint-plugin-react-hooks"; +import storybookPlugin from "eslint-plugin-storybook"; +import testingLibPlugin from 'eslint-plugin-testing-library'; +import globals from "globals"; +import tseslint from "typescript-eslint"; /** @type {import('eslint').Linter.Config[]} */ export default [ - {files: ["**/*.{js,mjs,cjs,ts,jsx,tsx}"]}, - {languageOptions: { globals: globals.browser }}, + { files: ["**/*.{js,mjs,cjs,ts,jsx,tsx}"] }, + { languageOptions: { globals: globals.browser } }, pluginJs.configs.recommended, ...tseslint.configs.recommended, - pluginReact.configs.flat.recommended, + { + ...pluginReact.configs.flat.recommended, + settings: { + react: { + version: "detect", + }, + }, + files: ['**/*.{js,jsx,mjs,cjs,ts,tsx}'], + plugins: { + react: pluginReact, + hooks: hooksPlugin, + prettier: prettierPlugin, + jestReact: jestReactPlugin, + storybook: storybookPlugin, + testing: testingLibPlugin + }, + languageOptions: { + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + }, + globals: { + ...globals.browser, + }, + }, + rules: { + 'react/jsx-uses-react': 'error', + 'react/jsx-uses-vars': 'error', + '@typescript-eslint/no-explicit-any': 'warn', + '@typescript-eslint/no-unsafe-function-type': 'warn', + // wait for https://github.com/facebook/react/pull/30774 + // 'react-hooks/rules-of-hooks': 'error', + //'react-hooks/exhaustive-deps': 'error' + } + }, + { + ignores: [ + "**/build/**", + "**/.storybook/middleware.js", + 'tsconfig.json', + ] + } ]; \ No newline at end of file diff --git a/starsky/starsky/clientapp/package-lock.json b/starsky/starsky/clientapp/package-lock.json index a77c02b31..5c6f299d4 100644 --- a/starsky/starsky/clientapp/package-lock.json +++ b/starsky/starsky/clientapp/package-lock.json @@ -49,6 +49,7 @@ "ts-jest": "^29.2.5", "ts-node": "^10.9.2", "typescript": "^5.3.3", + "typescript-eslint": "^8.18.0", "vite": "^5.2.6" } }, @@ -10795,6 +10796,29 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.18.0", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.18.0.tgz", + "integrity": "sha512-Xq2rRjn6tzVpAyHr3+nmSg1/9k9aIHnJ2iZeOH7cfGOWqTkXTm3kwpQglEuLGdNrYvPF+2gtAs+/KF5rjVo+WQ==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.18.0", + "@typescript-eslint/parser": "8.18.0", + "@typescript-eslint/utils": "8.18.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.57.0 || ^9.0.0", + "typescript": ">=4.8.4 <5.8.0" + } + }, "node_modules/unbox-primitive": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.1.0.tgz", diff --git a/starsky/starsky/clientapp/package.json b/starsky/starsky/clientapp/package.json index d0e752c61..c6b64dd9f 100644 --- a/starsky/starsky/clientapp/package.json +++ b/starsky/starsky/clientapp/package.json @@ -7,8 +7,8 @@ "dev": "vite", "start": "vite --port 3000", "build": "tsc -p tsconfig.prod.json && vite build", - "lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 810", - "lint:fix": "eslint --fix . --ext ts,tsx --report-unused-disable-directives --max-warnings 810", + "lint": "eslint .", + "lint:fix": "eslint --fix . ", "format": "prettier --write './**/*.{js,jsx,ts,tsx,css,md,json}'", "test": "jest --watch", "test:ci": "jest --ci --coverage --silent", @@ -65,6 +65,7 @@ "ts-jest": "^29.2.5", "ts-node": "^10.9.2", "typescript": "^5.3.3", + "typescript-eslint": "^8.18.0", "vite": "^5.2.6" }, "jest": { diff --git a/starsky/starsky/clientapp/scripts/prestorybook.js b/starsky/starsky/clientapp/scripts/prestorybook.js index be23f8639..0a48aef16 100644 --- a/starsky/starsky/clientapp/scripts/prestorybook.js +++ b/starsky/starsky/clientapp/scripts/prestorybook.js @@ -1,7 +1,7 @@ import { spawnSync } from "child_process"; -import { join } from "path"; +import path, { join } from "path"; +import process from "process"; import { fileURLToPath } from "url"; -import path from "path"; const __filename = fileURLToPath(import.meta.url); const __dirname = path.dirname(__filename); diff --git a/starsky/starsky/clientapp/src/components/atoms/current-location-button/current-location-button.spec.tsx b/starsky/starsky/clientapp/src/components/atoms/current-location-button/current-location-button.spec.tsx index 1c2e5721d..0263ac7b6 100644 --- a/starsky/starsky/clientapp/src/components/atoms/current-location-button/current-location-button.spec.tsx +++ b/starsky/starsky/clientapp/src/components/atoms/current-location-button/current-location-button.spec.tsx @@ -6,6 +6,19 @@ describe("CurrentLocationButton", () => { render(); }); + function globalNavigator() { + return global as unknown as { + navigator: { + geolocation: { + getCurrentPosition: ( + success: (position: { coords: { latitude: number; longitude: number } }) => void, + error?: (error: Error) => void + ) => void; + }; + }; + }; + } + describe("context", () => { it("no navigator.geolocation wrong_location", async () => { const component = render(); @@ -33,7 +46,8 @@ describe("CurrentLocationButton", () => { ) ) }; - (global as any).navigator.geolocation = mockGeolocation; + + globalNavigator().navigator.geolocation = mockGeolocation; const callback = jest.fn(); const component = render(); @@ -60,7 +74,7 @@ describe("CurrentLocationButton", () => { ) ) }; - (global as any).navigator.geolocation = mockGeolocation; + globalNavigator().navigator.geolocation = mockGeolocation; const component = render(); screen.getByRole("button").click(); @@ -75,7 +89,7 @@ describe("CurrentLocationButton", () => { const mockGeolocation = { getCurrentPosition: jest.fn().mockImplementationOnce((_, error) => Promise.resolve(error())) }; - (global as any).navigator.geolocation = mockGeolocation; + globalNavigator().navigator.geolocation = mockGeolocation; const callback = jest.fn(); const component = render(); diff --git a/starsky/starsky/clientapp/src/components/atoms/drop-area/post-single-form-data.ts b/starsky/starsky/clientapp/src/components/atoms/drop-area/post-single-form-data.ts index b458f491d..2f4433ea6 100644 --- a/starsky/starsky/clientapp/src/components/atoms/drop-area/post-single-form-data.ts +++ b/starsky/starsky/clientapp/src/components/atoms/drop-area/post-single-form-data.ts @@ -3,7 +3,12 @@ import { IExifStatus } from "../../../interfaces/IExifStatus"; import { IFileIndexItem, newIFileIndexItem } from "../../../interfaces/IFileIndexItem"; import FetchPost from "../../../shared/fetch/fetch-post"; -const CastFileIndexItem = (element: any): IFileIndexItem => { +const CastFileIndexItem = (element: { + fileHash: string; + filePath: string; + fileName: string; + status: IExifStatus; +}): IFileIndexItem => { const uploadFileObject = newIFileIndexItem(); uploadFileObject.fileHash = element.fileHash; uploadFileObject.filePath = element.filePath; @@ -105,7 +110,14 @@ class ProcessResponse { } // Success - Array.from(response.data).forEach((dataItem: any) => { + ( + response.data as { + fileIndexItem?: IFileIndexItem; + filePath?: string; + fileHash?: string; + status: IExifStatus; + }[] + ).forEach((dataItem) => { if (!dataItem) { outputUploadFilesList.push({ filePath: inputFilesList[index].name, @@ -124,8 +136,10 @@ class ProcessResponse { status: dataItem.status } as IFileIndexItem); } else { - dataItem.fileIndexItem.lastEdited = new Date().toISOString(); - outputUploadFilesList.push(dataItem.fileIndexItem); + if (dataItem.fileIndexItem) { + dataItem.fileIndexItem.lastEdited = new Date().toISOString(); + outputUploadFilesList.push(dataItem.fileIndexItem); + } } }); diff --git a/starsky/starsky/clientapp/src/components/atoms/file-hash-image/pan-and-zoom-image.tsx b/starsky/starsky/clientapp/src/components/atoms/file-hash-image/pan-and-zoom-image.tsx index 134ac3daf..01f8461ad 100644 --- a/starsky/starsky/clientapp/src/components/atoms/file-hash-image/pan-and-zoom-image.tsx +++ b/starsky/starsky/clientapp/src/components/atoms/file-hash-image/pan-and-zoom-image.tsx @@ -6,7 +6,7 @@ import { OnMouseDownMouseAction } from "./on-mouse-down-mouse-action"; import { OnMoveMouseTouchAction } from "./on-move-mouse-touch-action"; import { OnWheelMouseAction } from "./on-wheel-mouse-action"; -interface IPanAndZoomImage { +export interface IPanAndZoomImage { src: string; setError?: React.Dispatch>; onErrorCallback?(): void; @@ -52,7 +52,7 @@ const PanAndZoomImage = ({ src, id, ...props }: IPanAndZoomImage) => { props.setIsLoading(isLoaded === false); // use Memo gives issues elsewhere - // eslint-disable-next-line react-hooks/exhaustive-deps + // es_lint-disable-next-line react-hooks/exhaustive-deps // https://github.com/facebook/react/pull/30774 }, [id]); const containerRef = useRef(null); diff --git a/starsky/starsky/clientapp/src/components/atoms/menu-option-modal/menu-option-modal.tsx b/starsky/starsky/clientapp/src/components/atoms/menu-option-modal/menu-option-modal.tsx index 5c720cdd3..bfd272aeb 100644 --- a/starsky/starsky/clientapp/src/components/atoms/menu-option-modal/menu-option-modal.tsx +++ b/starsky/starsky/clientapp/src/components/atoms/menu-option-modal/menu-option-modal.tsx @@ -47,7 +47,9 @@ const MenuOptionModal: React.FunctionComponent = memo( data-test={testName} onClick={onClickHandler} onKeyDown={(event) => { - event.key === "Enter" && onClickHandler(); + if (event.key === "Enter") { + onClickHandler(); + } }} > {Message} diff --git a/starsky/starsky/clientapp/src/components/atoms/menu-option/menu-option.tsx b/starsky/starsky/clientapp/src/components/atoms/menu-option/menu-option.tsx index bd180bd4b..39aec5196 100644 --- a/starsky/starsky/clientapp/src/components/atoms/menu-option/menu-option.tsx +++ b/starsky/starsky/clientapp/src/components/atoms/menu-option/menu-option.tsx @@ -25,7 +25,9 @@ const MenuOption: React.FunctionComponent = memo( data-test={testName} onClick={onClickKeydown} onKeyDown={(event) => { - event.key === "Enter" && onClickKeydown(); + if (event.key === "Enter") { + onClickKeydown(); + } }} > {Message} diff --git a/starsky/starsky/clientapp/src/components/atoms/modal/modal.tsx b/starsky/starsky/clientapp/src/components/atoms/modal/modal.tsx index bdce39077..6c335fcc1 100644 --- a/starsky/starsky/clientapp/src/components/atoms/modal/modal.tsx +++ b/starsky/starsky/clientapp/src/components/atoms/modal/modal.tsx @@ -2,10 +2,10 @@ import "core-js/features/dom-collections/for-each"; import React, { ReactNode, useEffect, useRef, useState } from "react"; import ReactDOM from "react-dom"; import useGlobalSettings from "../../../hooks/use-global-settings"; +import localization from "../../../localization/localization.json"; import { Language } from "../../../shared/language"; import modalFreezeHelper from "./modal-freeze-helper"; import modalInsertPortalDiv from "./modal-insert-portal-div"; -import localization from "../../../localization/localization.json"; type ModalPropTypes = { children: ReactNode; @@ -33,7 +33,7 @@ function ModalClassName(isOpen: boolean, className?: string) { function ifModalOpenHandleExit( event: React.MouseEvent, - handleExit: Function + handleExit: () => void ) { const target = event.target as HTMLElement; if (target.className.indexOf(ModalOpenClassName) === -1) return; @@ -61,7 +61,7 @@ export default function Modal({ useEffect(() => { return modalInsertPortalDiv(modal, forceUpdate, setForceUpdate, id); - // eslint-disable-next-line react-hooks/exhaustive-deps + // es_lint-disable-next-line react-hooks/exhaustive-deps // https://github.com/facebook/react/pull/30774 }, []); const initialRender = useRef(false); @@ -74,7 +74,9 @@ export default function Modal({
ifModalOpenHandleExit(event, handleExit)} onKeyDown={(event) => { - event.key === "Enter" && handleExit(); + if (event.key === "Enter") { + handleExit(); + } }} data-test={dataTest} className={ModalClassName(isOpen, className)} diff --git a/starsky/starsky/clientapp/src/components/atoms/more-menu/more-menu.tsx b/starsky/starsky/clientapp/src/components/atoms/more-menu/more-menu.tsx index d49509a04..8c27ef065 100644 --- a/starsky/starsky/clientapp/src/components/atoms/more-menu/more-menu.tsx +++ b/starsky/starsky/clientapp/src/components/atoms/more-menu/more-menu.tsx @@ -36,7 +36,9 @@ const MoreMenu: React.FunctionComponent = ({ onChange={offMoreMenu} onClick={() => setEnableMoreMenu(false)} onKeyDown={(event) => { - event.key === "Enter" && setEnableMoreMenu(false); + if (event.key === "Enter") { + setEnableMoreMenu(false); + } }} data-test="menu-context" className={enableMoreMenu ? "menu-context" : "menu-context menu-context--hide"} diff --git a/starsky/starsky/clientapp/src/components/molecules/archive-sidebar/archive-sidebar-selection-list.tsx b/starsky/starsky/clientapp/src/components/molecules/archive-sidebar/archive-sidebar-selection-list.tsx index c47a32ada..18537c964 100644 --- a/starsky/starsky/clientapp/src/components/molecules/archive-sidebar/archive-sidebar-selection-list.tsx +++ b/starsky/starsky/clientapp/src/components/molecules/archive-sidebar/archive-sidebar-selection-list.tsx @@ -74,7 +74,9 @@ const ArchiveSidebarSelectionList: React.FunctionComponent + + ); + }; + } + + function createPanZoomObjectResetCallback(): (props: { + src: string; + onResetCallback: (z: number) => void; + }) => JSX.Element { + return (props: { src: string; onResetCallback: (z: number) => void }) => { + return ( + <> + test + + + ); + }; + } + it("Rotation API is called return 202", async () => { console.log("-- Rotation API is called return 202 --"); @@ -135,14 +163,8 @@ describe("FileHashImage", () => { jest.spyOn(FetchGet, "default").mockImplementationOnce(() => mockGetIConnectionDefault); - const panZoomObject = (props: any) => { - return ( - <> - test - - - ); - }; + const panZoomObject = createPanZoomObjectWheelCallback(); + jest .spyOn(PanAndZoomImage, "default") .mockImplementationOnce(panZoomObject) @@ -173,14 +195,7 @@ describe("FileHashImage", () => { jest.spyOn(FetchGet, "default").mockImplementationOnce(() => mockGetIConnectionDefault); - const panZoomObject = (props: any) => { - return ( - <> - test - - - ); - }; + const panZoomObject = createPanZoomObjectWheelCallback(); jest .spyOn(PanAndZoomImage, "default") .mockImplementationOnce(panZoomObject) @@ -214,18 +229,8 @@ describe("FileHashImage", () => { jest.spyOn(FetchGet, "default").mockImplementationOnce(() => mockGetIConnectionDefault); - const panZoomObject = (props: any) => { - return ( - <> - test - - - ); - }; - jest - .spyOn(PanAndZoomImage, "default") - .mockImplementationOnce(panZoomObject) - .mockImplementationOnce(panZoomObject); + const panZoomObject = createPanZoomObjectWheelCallback(); + jest.spyOn(PanAndZoomImage, "default").mockImplementationOnce(panZoomObject); const component = render( @@ -250,14 +255,9 @@ describe("FileHashImage", () => { jest.spyOn(FetchGet, "default").mockImplementationOnce(() => mockGetIConnectionDefault); - const panZoomObject = (props: any) => { - return ( - <> - test - - - ); - }; + // test reset callback instead of wheel callback + const panZoomObject = createPanZoomObjectResetCallback(); + jest .spyOn(PanAndZoomImage, "default") .mockImplementationOnce(panZoomObject) diff --git a/starsky/starsky/clientapp/src/shared/sidebar-update.ts b/starsky/starsky/clientapp/src/shared/sidebar-update.ts index aaee40f07..539931d8f 100644 --- a/starsky/starsky/clientapp/src/shared/sidebar-update.ts +++ b/starsky/starsky/clientapp/src/shared/sidebar-update.ts @@ -14,7 +14,7 @@ export class SidebarUpdate { ): ISidebarUpdate => { if (!fieldName) return updateSidebar; if (!fieldValue) { - delete (updateSidebar as any)[fieldName]; + delete (updateSidebar as Partial)[fieldName as keyof ISidebarUpdate]; return updateSidebar; } From ca2f565a6ebe9e2f44a1cbbbb3a4c088744537ed Mon Sep 17 00:00:00 2001 From: Dion Date: Mon, 16 Dec 2024 15:12:47 +0100 Subject: [PATCH 04/30] #1865 fixes (cherry picked from commit 7265f48f54d59d71cf7472c59207268d8d13dee3) --- .../internal/update-progress-by-click.spec.ts | 4 ++-- .../leaflet-modify-empty-image-url-gridlayer.ts | 2 +- .../leaflet-modify-empty-image-url-tilelayer.spec.ts | 11 +++++++---- .../clientapp/src/shared/shallow-equal.spec.ts | 4 ++-- .../starsky/clientapp/src/shared/shallow-equal.ts | 12 ++++++------ 5 files changed, 18 insertions(+), 15 deletions(-) diff --git a/starsky/starsky/clientapp/src/components/organisms/detail-view-media/internal/update-progress-by-click.spec.ts b/starsky/starsky/clientapp/src/components/organisms/detail-view-media/internal/update-progress-by-click.spec.ts index ed19e39c0..f14a2d6b0 100644 --- a/starsky/starsky/clientapp/src/components/organisms/detail-view-media/internal/update-progress-by-click.spec.ts +++ b/starsky/starsky/clientapp/src/components/organisms/detail-view-media/internal/update-progress-by-click.spec.ts @@ -21,7 +21,7 @@ describe("UpdateProgressByClick function", () => { it("should update currentTime when videoRef and event.target are valid", () => { // Mock event const event = { - target: document.createElement("video") as any + target: document.createElement("video") as unknown as EventTarget } as React.MouseEvent; // Mock GetMousePosition to return a valid value @@ -61,7 +61,7 @@ describe("UpdateProgressByClick function", () => { it("should not update currentTime when videoRef is not valid", () => { // Mock valid event const event = { - target: document.createElement("div") as any + target: document.createElement("div") as unknown as EventTarget } as React.MouseEvent; // Set videoRef to null diff --git a/starsky/starsky/clientapp/src/shared/leaflet/leaflet-modify-empty-image-url-gridlayer.ts b/starsky/starsky/clientapp/src/shared/leaflet/leaflet-modify-empty-image-url-gridlayer.ts index d8efce589..82a7a92e7 100644 --- a/starsky/starsky/clientapp/src/shared/leaflet/leaflet-modify-empty-image-url-gridlayer.ts +++ b/starsky/starsky/clientapp/src/shared/leaflet/leaflet-modify-empty-image-url-gridlayer.ts @@ -51,7 +51,7 @@ export class LeafletEmptyImageUrlGridLayer extends GridLayer { */ public _tileReady( coords: Coords, - err: any, + err: boolean | null, tile: { active?: boolean; coords: Coords; diff --git a/starsky/starsky/clientapp/src/shared/leaflet/leaflet-modify-empty-image-url-tilelayer.spec.ts b/starsky/starsky/clientapp/src/shared/leaflet/leaflet-modify-empty-image-url-tilelayer.spec.ts index 7d63aa5fa..27777a0f3 100644 --- a/starsky/starsky/clientapp/src/shared/leaflet/leaflet-modify-empty-image-url-tilelayer.spec.ts +++ b/starsky/starsky/clientapp/src/shared/leaflet/leaflet-modify-empty-image-url-tilelayer.spec.ts @@ -14,12 +14,15 @@ describe("LeafletEmptyImageUrlTileLayer [leaflet-extension]", () => { y: 10, z: 1 } as Coords; - const el = document.createElement("div") as any; + const el = document.createElement("div") as HTMLDivElement; - const tileLayer = new LeafletEmptyImageUrlTileLayer("51:10:1"); + const tileLayer = new LeafletEmptyImageUrlTileLayer("51:10:1") as unknown as { + _tiles: InternalTiles; + _abortLoading: () => void; + }; // mock a tile - (tileLayer as any)._tiles = { + tileLayer._tiles = { "51:10:1": { coords: exampleCoords, current: true, @@ -30,6 +33,6 @@ describe("LeafletEmptyImageUrlTileLayer [leaflet-extension]", () => { tileLayer._abortLoading(); // no content anymore - expect((tileLayer as any)._tiles).toStrictEqual({}); + expect(tileLayer._tiles).toStrictEqual({}); }); }); diff --git a/starsky/starsky/clientapp/src/shared/shallow-equal.spec.ts b/starsky/starsky/clientapp/src/shared/shallow-equal.spec.ts index 3b802c1e0..fad78c54b 100644 --- a/starsky/starsky/clientapp/src/shared/shallow-equal.spec.ts +++ b/starsky/starsky/clientapp/src/shared/shallow-equal.spec.ts @@ -56,7 +56,7 @@ describe("shallowEqual", function () { }); it("should not handle comparisons if `customizer` returns `true`", () => { - const customizer = function (value: any) { + const customizer = function (value: unknown) { return typeof value === "string" || undefined; }; @@ -66,7 +66,7 @@ describe("shallowEqual", function () { }); it("should not handle comparisons if `customizer` returns `false`", () => { - const customizer = function (value: any) { + const customizer = function (value: unknown) { return typeof value === "string" ? false : undefined; }; diff --git a/starsky/starsky/clientapp/src/shared/shallow-equal.ts b/starsky/starsky/clientapp/src/shared/shallow-equal.ts index d14817118..94ce8ff12 100644 --- a/starsky/starsky/clientapp/src/shared/shallow-equal.ts +++ b/starsky/starsky/clientapp/src/shared/shallow-equal.ts @@ -1,10 +1,10 @@ // https://github.com/dashed/shallowequal/blob/master/index.js const shallowEqual = ( - objA: any, - objB: any, - compare?: (objA: any, objB: any, indexOrKey?: number | string) => boolean | undefined, - compareContext?: any + objA: unknown, + objB: unknown, + compare?: (objA: unknown, objB: unknown, indexOrKey?: number | string) => boolean | undefined, + compareContext?: unknown ): boolean => { let ret = compare ? compare.call(compareContext, objA, objB) : void 0; @@ -35,8 +35,8 @@ const shallowEqual = ( return false; } - const valueA = objA[key]; - const valueB = objB[key]; + const valueA = (objA as { [key: string]: unknown })[key]; + const valueB = (objB as { [key: string]: unknown })[key]; ret = compare ? compare.call(compareContext, valueA, valueB, key) : void 0; From b00cecbc85624ee920cc57bf4399a7d9d85bdb90 Mon Sep 17 00:00:00 2001 From: Dion Date: Mon, 16 Dec 2024 16:44:14 +0100 Subject: [PATCH 05/30] #1866 fixes eslint --- .../atoms/drop-area/post-single-form-data.ts | 12 +++---- .../on-load-mouse-action.spec.ts | 9 +++-- .../on-mouse-down-mouse-action.spec.ts | 5 +-- .../on-wheel-mouse-action.spec.ts | 33 ++++++++++--------- .../pan-and-zoom-image.spec.tsx | 18 +++++----- .../atoms/form-control/form-control.spec.tsx | 2 +- .../atoms/list-image/list-image.spec.tsx | 2 +- .../atoms/modal/modal-freeze-helper.spec.ts | 33 +++++++++++++++---- .../modal/modal-insert-portal-div.spec.ts | 21 ++++++++++-- .../src/components/atoms/modal/modal.spec.tsx | 11 ++++--- .../src/components/atoms/modal/modal.tsx | 4 +-- .../menu-archive/menu-archive.spec.tsx | 4 +-- ...ditor-open-selection-confirmation.spec.tsx | 1 + .../src/hooks/use-intersection-observer.ts | 2 +- 14 files changed, 100 insertions(+), 57 deletions(-) diff --git a/starsky/starsky/clientapp/src/components/atoms/drop-area/post-single-form-data.ts b/starsky/starsky/clientapp/src/components/atoms/drop-area/post-single-form-data.ts index 2f4433ea6..1f87df11b 100644 --- a/starsky/starsky/clientapp/src/components/atoms/drop-area/post-single-form-data.ts +++ b/starsky/starsky/clientapp/src/components/atoms/drop-area/post-single-form-data.ts @@ -124,9 +124,9 @@ class ProcessResponse { fileName: inputFilesList[index].name, status: IExifStatus.ServerError } as IFileIndexItem); - } else if (dataItem.fileIndexItem && (dataItem.status as IExifStatus) !== IExifStatus.Ok) { + } else if (dataItem.fileIndexItem && dataItem.status !== IExifStatus.Ok) { outputUploadFilesList.push(CastFileIndexItem(dataItem.fileIndexItem)); - } else if (!dataItem.fileIndexItem && (dataItem.status as IExifStatus) !== IExifStatus.Ok) { + } else if (!dataItem.fileIndexItem && dataItem.status !== IExifStatus.Ok) { // when `/import` already existing item outputUploadFilesList.push({ filePath: dataItem.filePath, @@ -135,11 +135,9 @@ class ProcessResponse { fileHash: dataItem.fileHash, status: dataItem.status } as IFileIndexItem); - } else { - if (dataItem.fileIndexItem) { - dataItem.fileIndexItem.lastEdited = new Date().toISOString(); - outputUploadFilesList.push(dataItem.fileIndexItem); - } + } else if (dataItem.fileIndexItem) { + dataItem.fileIndexItem.lastEdited = new Date().toISOString(); + outputUploadFilesList.push(dataItem.fileIndexItem); } }); diff --git a/starsky/starsky/clientapp/src/components/atoms/file-hash-image/on-load-mouse-action.spec.ts b/starsky/starsky/clientapp/src/components/atoms/file-hash-image/on-load-mouse-action.spec.ts index 96d27675b..492b826f6 100644 --- a/starsky/starsky/clientapp/src/components/atoms/file-hash-image/on-load-mouse-action.spec.ts +++ b/starsky/starsky/clientapp/src/components/atoms/file-hash-image/on-load-mouse-action.spec.ts @@ -1,3 +1,4 @@ +import { SyntheticEvent } from "react"; import { OnLoadMouseAction } from "./on-load-mouse-action"; describe("OnLoadMouseAction", () => { @@ -5,9 +6,13 @@ describe("OnLoadMouseAction", () => { it("should also set when SetError and SetIsLoading is null", () => { const setImage = jest.fn(); - new OnLoadMouseAction(setImage, null as any, null as any).onLoad({ + new OnLoadMouseAction( + setImage, + null as unknown as React.Dispatch>, + null as unknown as React.Dispatch> + ).onLoad({ target: {} - } as any); + } as unknown as SyntheticEvent); expect(setImage).toHaveBeenCalled(); }); }); diff --git a/starsky/starsky/clientapp/src/components/atoms/file-hash-image/on-mouse-down-mouse-action.spec.ts b/starsky/starsky/clientapp/src/components/atoms/file-hash-image/on-mouse-down-mouse-action.spec.ts index 42f4920dd..4e5f27a09 100644 --- a/starsky/starsky/clientapp/src/components/atoms/file-hash-image/on-mouse-down-mouse-action.spec.ts +++ b/starsky/starsky/clientapp/src/components/atoms/file-hash-image/on-mouse-down-mouse-action.spec.ts @@ -1,9 +1,10 @@ import { OnMouseDownMouseAction } from "./on-mouse-down-mouse-action"; +import { PositionObject } from "./pan-and-zoom-image"; describe("OnMoveMouseTouchAction", () => { it("should set values", () => { const setPosition = jest.fn(); - new OnMouseDownMouseAction(jest.fn(), {} as any, setPosition).onTouchStart({ + new OnMouseDownMouseAction(jest.fn(), {} as PositionObject, setPosition).onTouchStart({ touches: [ { clientX: 1, @@ -11,7 +12,7 @@ describe("OnMoveMouseTouchAction", () => { } ], preventDefault: jest.fn() - } as any); + } as unknown as TouchEvent); expect(setPosition).toHaveBeenCalledTimes(1); expect(setPosition).toHaveBeenCalledWith({ oldX: 1, oldY: 1 }); }); diff --git a/starsky/starsky/clientapp/src/components/atoms/file-hash-image/on-wheel-mouse-action.spec.ts b/starsky/starsky/clientapp/src/components/atoms/file-hash-image/on-wheel-mouse-action.spec.ts index bf3546d57..c3f2f44a5 100644 --- a/starsky/starsky/clientapp/src/components/atoms/file-hash-image/on-wheel-mouse-action.spec.ts +++ b/starsky/starsky/clientapp/src/components/atoms/file-hash-image/on-wheel-mouse-action.spec.ts @@ -1,4 +1,5 @@ import { OnWheelMouseAction } from "./on-wheel-mouse-action"; +import { ImageObject, PositionObject } from "./pan-and-zoom-image"; describe("OnWheelMouseAction", () => { // @see: pan-and-zoom-image.spec.tsx @@ -6,28 +7,28 @@ describe("OnWheelMouseAction", () => { it("should not set when current is null and delta exist", () => { const setPosition = jest.fn(); new OnWheelMouseAction( - null as any, + null as unknown as ImageObject, setPosition, - null as any, - { current: null } as any, - null as any + null as unknown as PositionObject, + { current: null } as unknown as React.RefObject, + null as unknown as (z: number) => void ).onWheel({ deltaY: 1 - } as any); + } as unknown as React.WheelEvent); expect(setPosition).toHaveBeenCalledTimes(0); }); it("should not set when current is null and delta not exist", () => { const setPosition = jest.fn(); new OnWheelMouseAction( - null as any, + null as unknown as ImageObject, setPosition, - null as any, - { current: 1 } as any, - null as any + null as unknown as PositionObject, + { current: 1 } as unknown as React.RefObject, + null as unknown as (z: number) => void ).onWheel({ deltaY: 0 // <= not exist - } as any); + } as unknown as React.WheelEvent); expect(setPosition).toHaveBeenCalledTimes(0); }); @@ -36,7 +37,7 @@ describe("OnWheelMouseAction", () => { new OnWheelMouseAction( { height: 40, width: 40 }, // image setPosition, - { x: 0, y: 0, z: 0 } as any, // position + { x: 0, y: 0, z: 0 } as PositionObject, // position { current: { getBoundingClientRect: () => { @@ -46,7 +47,7 @@ describe("OnWheelMouseAction", () => { }; } } - } as any, + } as unknown as React.RefObject, jest.fn() ).zoom(-3); expect(setPosition).toHaveBeenCalledTimes(1); @@ -59,7 +60,7 @@ describe("OnWheelMouseAction", () => { new OnWheelMouseAction( { height: 40, width: 40 }, // image setPosition, - { x: 0, y: 0, z: 0 } as any, // position + { x: 0, y: 0, z: 0 } as PositionObject, // position { current: { getBoundingClientRect: () => { @@ -69,7 +70,7 @@ describe("OnWheelMouseAction", () => { }; } } - } as any, + } as unknown as React.RefObject, jest.fn() ).zoom(-3, 99); expect(setPosition).toHaveBeenCalledTimes(1); @@ -85,7 +86,7 @@ describe("OnWheelMouseAction", () => { new OnWheelMouseAction( { height: 40, width: 40 }, // image setPosition, - { x: 0, y: 0, z: 0 } as any, // position + { x: 0, y: 0, z: 0 } as PositionObject, // position { current: { getBoundingClientRect: () => { @@ -95,7 +96,7 @@ describe("OnWheelMouseAction", () => { }; } } - } as any, + } as unknown as React.RefObject, jest.fn() ).zoom(-3, 99); expect(setPosition).toHaveBeenCalledTimes(1); diff --git a/starsky/starsky/clientapp/src/components/atoms/file-hash-image/pan-and-zoom-image.spec.tsx b/starsky/starsky/clientapp/src/components/atoms/file-hash-image/pan-and-zoom-image.spec.tsx index d44dfa90d..bd468af3b 100644 --- a/starsky/starsky/clientapp/src/components/atoms/file-hash-image/pan-and-zoom-image.spec.tsx +++ b/starsky/starsky/clientapp/src/components/atoms/file-hash-image/pan-and-zoom-image.spec.tsx @@ -24,7 +24,7 @@ describe("PanAndZoomImage", () => { const component = render( >} translateRotation={Orientation.Horizontal} onWheelCallback={onWheelCallback} onResetCallback={jest.fn()} @@ -73,7 +73,7 @@ describe("PanAndZoomImage", () => { const component = render( >} translateRotation={Orientation.Horizontal} onWheelCallback={onWheelCallback} onResetCallback={jest.fn()} @@ -104,7 +104,7 @@ describe("PanAndZoomImage", () => { const component = render( >} translateRotation={Orientation.Horizontal} onWheelCallback={onWheelCallback} onResetCallback={jest.fn()} @@ -147,7 +147,7 @@ describe("PanAndZoomImage", () => { const component = render( >} translateRotation={Orientation.Horizontal} onWheelCallback={onWheelCallback} onResetCallback={jest.fn()} @@ -173,7 +173,7 @@ describe("PanAndZoomImage", () => { const component = render( >} translateRotation={Orientation.Horizontal} onWheelCallback={onWheelCallback} onResetCallback={jest.fn()} @@ -202,7 +202,7 @@ describe("PanAndZoomImage", () => { const component = render( >} translateRotation={Orientation.Horizontal} onWheelCallback={jest.fn()} onResetCallback={jest.fn()} @@ -228,7 +228,7 @@ describe("PanAndZoomImage", () => { const component = render( >} translateRotation={Orientation.Horizontal} onWheelCallback={jest.fn()} onResetCallback={jest.fn()} @@ -249,7 +249,7 @@ describe("PanAndZoomImage", () => { const component = render( >} translateRotation={Orientation.Horizontal} onWheelCallback={jest.fn()} onResetCallback={onResetCallbackSpy} @@ -275,7 +275,7 @@ describe("PanAndZoomImage", () => { const component = render( >} translateRotation={Orientation.Horizontal} onWheelCallback={jest.fn()} onResetCallback={onResetCallbackSpy} diff --git a/starsky/starsky/clientapp/src/components/atoms/form-control/form-control.spec.tsx b/starsky/starsky/clientapp/src/components/atoms/form-control/form-control.spec.tsx index b7d97f1cd..b600c0e34 100644 --- a/starsky/starsky/clientapp/src/components/atoms/form-control/form-control.spec.tsx +++ b/starsky/starsky/clientapp/src/components/atoms/form-control/form-control.spec.tsx @@ -13,7 +13,7 @@ describe("FormControl", () => { describe("with events", () => { beforeAll(() => { - (window as any).getSelection = () => { + (window as { getSelection: () => void }).getSelection = () => { return { removeAllRanges: () => {} }; diff --git a/starsky/starsky/clientapp/src/components/atoms/list-image/list-image.spec.tsx b/starsky/starsky/clientapp/src/components/atoms/list-image/list-image.spec.tsx index 4d55761e6..f7ee93179 100644 --- a/starsky/starsky/clientapp/src/components/atoms/list-image/list-image.spec.tsx +++ b/starsky/starsky/clientapp/src/components/atoms/list-image/list-image.spec.tsx @@ -12,7 +12,7 @@ describe("ListImageTest", () => { }); it("useIntersection = true", () => { - (useIntersection.default as jest.Mock).mockImplementation(() => true); + (useIntersection.default as jest.Mock).mockImplementation(() => true); const element = render( test diff --git a/starsky/starsky/clientapp/src/components/atoms/modal/modal-freeze-helper.spec.ts b/starsky/starsky/clientapp/src/components/atoms/modal/modal-freeze-helper.spec.ts index da0669504..72ccb206c 100644 --- a/starsky/starsky/clientapp/src/components/atoms/modal/modal-freeze-helper.spec.ts +++ b/starsky/starsky/clientapp/src/components/atoms/modal/modal-freeze-helper.spec.ts @@ -5,13 +5,18 @@ import * as toggleTabIndex from "./toggle-tab-index"; describe("modalFreezeOpen", () => { it("modalFreezeOpen", () => { const freeze = jest.fn(); - modalFreezeOpen(freeze, { current: null } as any, null, null); + modalFreezeOpen(freeze, { current: null } as React.RefObject, null, null); expect(freeze).toHaveBeenCalled(); }); it("modalFreezeOpen focus", () => { const focus = jest.fn(); - modalFreezeOpen(jest.fn(), { current: { focus } } as any, null, null); + modalFreezeOpen( + jest.fn(), + { current: { focus } } as unknown as React.RefObject, + null, + null + ); expect(focus).toHaveBeenCalled(); }); @@ -19,7 +24,7 @@ describe("modalFreezeOpen", () => { const freeze = jest.fn(); modalFreezeOpen( freeze, - { current: null } as any, + { current: null } as React.RefObject, null, document.createElement("div") as HTMLElement ); @@ -43,7 +48,7 @@ describe("modalUnFreezeNotOpen", () => { const unFreeze = jest.fn(); const toggleTabSpy = jest.spyOn(toggleTabIndex, "toggleTabIndex").mockImplementation(() => {}); - modalUnFreezeNotOpen(unFreeze, { current: true } as any, null, undefined, { + modalUnFreezeNotOpen(unFreeze, { current: true } as unknown as Element, null, undefined, { current: false }); expect(unFreeze).toHaveBeenCalled(); @@ -55,7 +60,7 @@ describe("modalUnFreezeNotOpen", () => { const unFreeze = jest.fn(); const toggleTabSpy = jest.spyOn(toggleTabIndex, "toggleTabIndex").mockImplementation(() => {}); - modalUnFreezeNotOpen(unFreeze, null, { current: true } as any, undefined, { + modalUnFreezeNotOpen(unFreeze, null, { current: true } as unknown as Element, undefined, { current: false }); expect(unFreeze).toHaveBeenCalled(); @@ -76,7 +81,14 @@ describe("modalFreezeHelper", () => { unfreeze: unfreezeSpy })); - modalFreezeHelper(jest.fn() as any, "root", "id", true, { current: null }, div); + modalFreezeHelper( + jest.fn() as unknown as React.MutableRefObject, + "root", + "id", + true, + { current: null }, + div + ); expect(freezeSpy).toHaveBeenCalled(); expect(unfreezeSpy).not.toHaveBeenCalled(); }); @@ -92,7 +104,14 @@ describe("modalFreezeHelper", () => { unfreeze: unfreezeSpy })); - modalFreezeHelper(jest.fn() as any, "root", "id", false, { current: null }, div); + modalFreezeHelper( + jest.fn() as unknown as React.MutableRefObject, + "root", + "id", + false, + { current: null }, + div + ); expect(freezeSpy).not.toHaveBeenCalled(); expect(unfreezeSpy).toHaveBeenCalled(); }); diff --git a/starsky/starsky/clientapp/src/components/atoms/modal/modal-insert-portal-div.spec.ts b/starsky/starsky/clientapp/src/components/atoms/modal/modal-insert-portal-div.spec.ts index 9eee96808..fae451ede 100644 --- a/starsky/starsky/clientapp/src/components/atoms/modal/modal-insert-portal-div.spec.ts +++ b/starsky/starsky/clientapp/src/components/atoms/modal/modal-insert-portal-div.spec.ts @@ -14,7 +14,12 @@ describe("modalInsertPortalDiv", () => { exampleDiv.innerHTML = "test"; document.body.appendChild(exampleDiv); - modalInsertPortalDiv({ current: null } as any, false, jest.fn() as any, "test-id-2"); + modalInsertPortalDiv( + { current: null } as React.MutableRefObject, + false, + jest.fn() as React.Dispatch>, + "test-id-2" + ); const element = document.querySelector("#test-id-2"); expect(element).not.toBeNull(); @@ -24,14 +29,24 @@ describe("modalInsertPortalDiv", () => { it("should setForceUpdate", () => { const forceUpdateSpy = jest.fn(); - modalInsertPortalDiv({ current: null } as any, false, forceUpdateSpy, "test-id"); + modalInsertPortalDiv( + { current: null } as React.MutableRefObject, + false, + forceUpdateSpy, + "test-id" + ); expect(forceUpdateSpy).toHaveBeenCalled(); }); it("should not setForceUpdate", () => { const forceUpdateSpy = jest.fn(); - modalInsertPortalDiv({ current: null } as any, true, forceUpdateSpy, "test-id"); + modalInsertPortalDiv( + { current: null } as React.MutableRefObject, + true, + forceUpdateSpy, + "test-id" + ); expect(forceUpdateSpy).not.toHaveBeenCalled(); }); diff --git a/starsky/starsky/clientapp/src/components/atoms/modal/modal.spec.tsx b/starsky/starsky/clientapp/src/components/atoms/modal/modal.spec.tsx index 416baf281..16ff89cbe 100644 --- a/starsky/starsky/clientapp/src/components/atoms/modal/modal.spec.tsx +++ b/starsky/starsky/clientapp/src/components/atoms/modal/modal.spec.tsx @@ -12,7 +12,10 @@ describe("Modal", () => { }); describe("Close Modal", () => { - function renderModal(): any { + function renderModal(): { + handleExit: jest.Mock; + element: RenderResult; + } { window.scrollTo = jest.fn(); const handleExit = jest.fn(); const element = render( @@ -66,11 +69,11 @@ describe("Modal", () => { }); describe("Open Modal", () => { - function renderModal2(): [jest.Mock, RenderResult] { + function renderModal2(): [jest.Mock, RenderResult] { const spyScrollTo = jest.fn(); window.scrollTo = spyScrollTo; - const handleExit = jest.fn() as any; + const handleExit = jest.fn(); const component = render(
@@ -79,7 +82,7 @@ describe("Modal", () => {
); - return [spyScrollTo, component as unknown as any]; + return [spyScrollTo, component as unknown as RenderResult]; } it("should open modal", () => { diff --git a/starsky/starsky/clientapp/src/components/atoms/modal/modal.tsx b/starsky/starsky/clientapp/src/components/atoms/modal/modal.tsx index 6c335fcc1..78843de5d 100644 --- a/starsky/starsky/clientapp/src/components/atoms/modal/modal.tsx +++ b/starsky/starsky/clientapp/src/components/atoms/modal/modal.tsx @@ -12,7 +12,7 @@ type ModalPropTypes = { root?: string; id?: string; isOpen: boolean; - handleExit: () => any; + handleExit: () => void; focusAfterExit?: HTMLElement; className?: string; dataTest?: string; @@ -49,7 +49,7 @@ export default function Modal({ focusAfterExit, className = "", dataTest = "modal-bg" -}: ModalPropTypes): any { +}: ModalPropTypes): JSX.Element | null { const settings = useGlobalSettings(); const language = new Language(settings.language); const MessageCloseDialog = language.key(localization.MessageCloseDialog); diff --git a/starsky/starsky/clientapp/src/components/organisms/menu-archive/menu-archive.spec.tsx b/starsky/starsky/clientapp/src/components/organisms/menu-archive/menu-archive.spec.tsx index 190b1002c..7537cc192 100644 --- a/starsky/starsky/clientapp/src/components/organisms/menu-archive/menu-archive.spec.tsx +++ b/starsky/starsky/clientapp/src/components/organisms/menu-archive/menu-archive.spec.tsx @@ -1,5 +1,5 @@ -import { act, fireEvent, render, screen, waitFor } from "@testing-library/react"; -import React from "react"; +import { fireEvent, render, screen, waitFor } from "@testing-library/react"; +import React, { act } from "react"; import * as useFetch from "../../../hooks/use-fetch"; import * as useHotKeys from "../../../hooks/use-keyboard/use-hotkeys"; import { IArchive } from "../../../interfaces/IArchive"; diff --git a/starsky/starsky/clientapp/src/components/organisms/modal-desktop-editor-open-selection-confirmation/modal-desktop-editor-open-selection-confirmation.spec.tsx b/starsky/starsky/clientapp/src/components/organisms/modal-desktop-editor-open-selection-confirmation/modal-desktop-editor-open-selection-confirmation.spec.tsx index f4fd3be16..fd637ab9f 100644 --- a/starsky/starsky/clientapp/src/components/organisms/modal-desktop-editor-open-selection-confirmation/modal-desktop-editor-open-selection-confirmation.spec.tsx +++ b/starsky/starsky/clientapp/src/components/organisms/modal-desktop-editor-open-selection-confirmation/modal-desktop-editor-open-selection-confirmation.spec.tsx @@ -63,6 +63,7 @@ describe("ModalDesktopEditorOpenConfirmation", () => { it("calls handleExit on close left top button click", () => { jest.spyOn(Modal, "default").mockImplementationOnce((element) => { element.handleExit(); + return <>; }); // it auto close the modal diff --git a/starsky/starsky/clientapp/src/hooks/use-intersection-observer.ts b/starsky/starsky/clientapp/src/hooks/use-intersection-observer.ts index e2b122875..12ff220d5 100644 --- a/starsky/starsky/clientapp/src/hooks/use-intersection-observer.ts +++ b/starsky/starsky/clientapp/src/hooks/use-intersection-observer.ts @@ -45,7 +45,7 @@ const useIntersection = ( ref: React.RefObject, options: IntersectionOptions = {}, callback?: IntersectionChangeHandler -) => { +): boolean => { const { defaultIntersecting, once, ...opts } = options; const optsRef = useRef(opts); const [intersecting, setIntersecting] = useState(defaultIntersecting === true); From 75eaa91ad7b476d212e426c0d4daa203a54d79e3 Mon Sep 17 00:00:00 2001 From: Dion Date: Mon, 16 Dec 2024 16:51:19 +0100 Subject: [PATCH 06/30] #1866 eslint issues --- .../file-hash-image/on-load-mouse-action.ts | 2 +- .../on-move-mouse-touch-action.spec.ts | 23 +++++++++++++------ .../file-hash-image/pan-and-zoom-image.tsx | 6 +++-- .../modal/modal-insert-portal-div.spec.ts | 7 +++++- ...-sidebar-label-edit-add-overwrite.spec.tsx | 6 ++--- ...sidebar-label-edit-search-replace.spec.tsx | 6 ++--- 6 files changed, 33 insertions(+), 17 deletions(-) diff --git a/starsky/starsky/clientapp/src/components/atoms/file-hash-image/on-load-mouse-action.ts b/starsky/starsky/clientapp/src/components/atoms/file-hash-image/on-load-mouse-action.ts index bb51f25da..0f6a02df8 100644 --- a/starsky/starsky/clientapp/src/components/atoms/file-hash-image/on-load-mouse-action.ts +++ b/starsky/starsky/clientapp/src/components/atoms/file-hash-image/on-load-mouse-action.ts @@ -16,7 +16,7 @@ export class OnLoadMouseAction { } public onLoad = (e: React.SyntheticEvent) => { - const target = e.target as any; + const target = e.target as HTMLImageElement; this.setImage({ width: target.naturalWidth, height: target.naturalHeight diff --git a/starsky/starsky/clientapp/src/components/atoms/file-hash-image/on-move-mouse-touch-action.spec.ts b/starsky/starsky/clientapp/src/components/atoms/file-hash-image/on-move-mouse-touch-action.spec.ts index abd51dc92..3fa45762e 100644 --- a/starsky/starsky/clientapp/src/components/atoms/file-hash-image/on-move-mouse-touch-action.spec.ts +++ b/starsky/starsky/clientapp/src/components/atoms/file-hash-image/on-move-mouse-touch-action.spec.ts @@ -1,37 +1,46 @@ import { OnMoveMouseTouchAction } from "./on-move-mouse-touch-action"; +import { PositionObject } from "./pan-and-zoom-image"; describe("OnMoveMouseTouchAction", () => { // @see: pan-and-zoom-image.spec.tsx it("should not set when input has no touches", () => { const setPosition = jest.fn(); - new OnMoveMouseTouchAction(null as any, setPosition, null as any).touchMove({} as any); + new OnMoveMouseTouchAction( + null as unknown as boolean, + setPosition, + null as unknown as PositionObject + ).touchMove({} as unknown as TouchEvent); expect(setPosition).toHaveBeenCalledTimes(0); }); it("should not set when input has no panning", () => { const setPosition = jest.fn(); - new OnMoveMouseTouchAction(null as any, setPosition, null as any).touchMove({ + new OnMoveMouseTouchAction( + null as unknown as boolean, + setPosition, + null as unknown as PositionObject + ).touchMove({ touches: [ { clientX: 1, clientY: 1 } ] - } as any); + } as unknown as TouchEvent); expect(setPosition).toHaveBeenCalledTimes(0); }); it("should setPosition with clientX and y 1 and values", () => { const setPosition = jest.fn(); - new OnMoveMouseTouchAction(true, setPosition, { y: 1 } as any).touchMove({ + new OnMoveMouseTouchAction(true, setPosition, { y: 1 } as PositionObject).touchMove({ touches: [ { clientX: 1, clientY: 1 } ] - } as any); + } as unknown as TouchEvent); expect(setPosition).toHaveBeenCalledTimes(1); expect(setPosition).toHaveBeenCalledWith({ oldX: 1, oldY: 1, x: NaN, y: NaN }); }); @@ -39,14 +48,14 @@ describe("OnMoveMouseTouchAction", () => { it("should not setPosition with clientX and y 0 and values", () => { const setPosition = jest.fn(); // .. y = 0 should not set - new OnMoveMouseTouchAction(true, setPosition, { y: 0 } as any).touchMove({ + new OnMoveMouseTouchAction(true, setPosition, { y: 0 } as PositionObject).touchMove({ touches: [ { clientX: 1, clientY: 1 } ] - } as any); + } as unknown as TouchEvent); expect(setPosition).toHaveBeenCalledTimes(0); }); }); diff --git a/starsky/starsky/clientapp/src/components/atoms/file-hash-image/pan-and-zoom-image.tsx b/starsky/starsky/clientapp/src/components/atoms/file-hash-image/pan-and-zoom-image.tsx index 01f8461ad..bea8d57ac 100644 --- a/starsky/starsky/clientapp/src/components/atoms/file-hash-image/pan-and-zoom-image.tsx +++ b/starsky/starsky/clientapp/src/components/atoms/file-hash-image/pan-and-zoom-image.tsx @@ -118,8 +118,10 @@ const PanAndZoomImage = ({ src, id, ...props }: IPanAndZoomImage) => { data-test="pan-zoom-image" ref={containerRef} onMouseDown={new OnMouseDownMouseAction(setPanning, position, setPosition).onMouseDown} - onTouchStart={(e) => - new OnMouseDownMouseAction(setPanning, position, setPosition).onTouchStart(e as any) + onTouchStart={(touchEvent) => + new OnMouseDownMouseAction(setPanning, position, setPosition).onTouchStart( + touchEvent as unknown as TouchEvent + ) } onWheel={ new OnWheelMouseAction(image, setPosition, position, containerRef, props.onWheelCallback) diff --git a/starsky/starsky/clientapp/src/components/atoms/modal/modal-insert-portal-div.spec.ts b/starsky/starsky/clientapp/src/components/atoms/modal/modal-insert-portal-div.spec.ts index fae451ede..22296d748 100644 --- a/starsky/starsky/clientapp/src/components/atoms/modal/modal-insert-portal-div.spec.ts +++ b/starsky/starsky/clientapp/src/components/atoms/modal/modal-insert-portal-div.spec.ts @@ -2,7 +2,12 @@ import modalInsertPortalDiv from "./modal-insert-portal-div"; describe("modalInsertPortalDiv", () => { it("should add div element", () => { - modalInsertPortalDiv({ current: null } as any, false, jest.fn() as any, "test-id"); + modalInsertPortalDiv( + { current: null } as React.MutableRefObject, + false, + jest.fn() as React.Dispatch>, + "test-id" + ); const element = document.querySelector("#test-id"); expect(element).not.toBeNull(); diff --git a/starsky/starsky/clientapp/src/components/molecules/archive-sidebar/archive-sidebar-label-edit-add-overwrite.spec.tsx b/starsky/starsky/clientapp/src/components/molecules/archive-sidebar/archive-sidebar-label-edit-add-overwrite.spec.tsx index da4bea81d..cf3ac051a 100644 --- a/starsky/starsky/clientapp/src/components/molecules/archive-sidebar/archive-sidebar-label-edit-add-overwrite.spec.tsx +++ b/starsky/starsky/clientapp/src/components/molecules/archive-sidebar/archive-sidebar-label-edit-add-overwrite.spec.tsx @@ -33,7 +33,7 @@ describe("ArchiveSidebarLabelEditAddOverwrite", () => { describe("with context", () => { let useContextSpy: jest.SpyInstance; - let dispatchedValues: any[] = []; + let dispatchedValues: AppContext.ArchiveAction[] = []; beforeEach(() => { // is used in multiple ways @@ -57,7 +57,7 @@ describe("ArchiveSidebarLabelEditAddOverwrite", () => { } ] } as IArchive, - dispatch: (value: any) => { + dispatch: (value: AppContext.ArchiveAction) => { dispatchedValues.push(value); } } as AppContext.IArchiveContext; @@ -132,7 +132,7 @@ describe("ArchiveSidebarLabelEditAddOverwrite", () => { it("click overwrite > generic fail > remove message retry when success", async () => { const connectionDefault: IConnectionDefault = { statusCode: 200, - data: [] as any[] + data: [] as AppContext.ArchiveAction[] }; const mockIConnectionDefaultReject: Promise = Promise.reject(); diff --git a/starsky/starsky/clientapp/src/components/molecules/archive-sidebar/archive-sidebar-label-edit-search-replace.spec.tsx b/starsky/starsky/clientapp/src/components/molecules/archive-sidebar/archive-sidebar-label-edit-search-replace.spec.tsx index 097966230..f8f84b31a 100644 --- a/starsky/starsky/clientapp/src/components/molecules/archive-sidebar/archive-sidebar-label-edit-search-replace.spec.tsx +++ b/starsky/starsky/clientapp/src/components/molecules/archive-sidebar/archive-sidebar-label-edit-search-replace.spec.tsx @@ -33,7 +33,7 @@ describe("ArchiveSidebarLabelEditAddOverwrite", () => { describe("with context", () => { let useContextSpy: jest.SpyInstance; - let dispatchedValues: any[] = []; + let dispatchedValues: AppContext.ArchiveAction[] = []; beforeEach(() => { // is used in multiple ways @@ -57,7 +57,7 @@ describe("ArchiveSidebarLabelEditAddOverwrite", () => { } ] } as IArchive, - dispatch: (value: any) => { + dispatch: (value: AppContext.ArchiveAction) => { dispatchedValues.push(value); } } as AppContext.IArchiveContext; @@ -132,7 +132,7 @@ describe("ArchiveSidebarLabelEditAddOverwrite", () => { it("click overwrite > generic fail > remove message retry when success", async () => { const connectionDefault: IConnectionDefault = { statusCode: 200, - data: [] as any[] + data: [] as AppContext.ArchiveAction[] }; const mockIConnectionDefaultReject: Promise = Promise.reject(); From ddb67447b21e92462a49664df1372e06b21f0306 Mon Sep 17 00:00:00 2001 From: Dion Date: Mon, 16 Dec 2024 19:26:59 +0100 Subject: [PATCH 07/30] #1866 replace any | eslint --- ...hive-sidebar-label-edit-search-replace.tsx | 7 ++-- .../detail-view-sidebar/update-change.spec.ts | 7 ++-- .../src/contexts/archive-context.spec.tsx | 4 +- .../src/interfaces/ISidebarUpdate.ts | 4 ++ .../src/shared/filelist-cache.spec.ts | 32 ++++++++-------- .../clientapp/src/shared/filelist-cache.ts | 13 ++++--- .../starsky/clientapp/src/shared/geo.spec.ts | 6 +-- .../clientapp/src/shared/keyboard.spec.ts | 4 +- ...t-modify-empty-image-url-gridlayer.spec.ts | 38 ++++++++++++------- 9 files changed, 67 insertions(+), 48 deletions(-) diff --git a/starsky/starsky/clientapp/src/components/molecules/archive-sidebar/archive-sidebar-label-edit-search-replace.tsx b/starsky/starsky/clientapp/src/components/molecules/archive-sidebar/archive-sidebar-label-edit-search-replace.tsx index f6e13e8d6..22e2db7d3 100644 --- a/starsky/starsky/clientapp/src/components/molecules/archive-sidebar/archive-sidebar-label-edit-search-replace.tsx +++ b/starsky/starsky/clientapp/src/components/molecules/archive-sidebar/archive-sidebar-label-edit-search-replace.tsx @@ -4,7 +4,8 @@ import useGlobalSettings from "../../../hooks/use-global-settings"; import useLocation from "../../../hooks/use-location/use-location"; import { PageType } from "../../../interfaces/IDetailView"; import { IExifStatus } from "../../../interfaces/IExifStatus"; -import { ISidebarUpdate } from "../../../interfaces/ISidebarUpdate"; +import { IFileIndexItem } from "../../../interfaces/IFileIndexItem"; +import { ISidebarGenericUpdate, ISidebarUpdate } from "../../../interfaces/ISidebarUpdate"; import localization from "../../../localization/localization.json"; import { CastToInterface } from "../../../shared/cast-to-interface"; import FetchPost from "../../../shared/fetch/fetch-post"; @@ -86,7 +87,7 @@ const ArchiveSidebarLabelEditSearchReplace: React.FunctionComponent = () => { return bodyParams; } - function handleFetchPostResponse(anyData: any) { + function handleFetchPostResponse(anyData: { data: IFileIndexItem[] }) { const result = new CastToInterface().InfoFileIndexArray(anyData.data); result.forEach((element) => { if (element.status === IExifStatus.ReadOnly) setIsError(MessageWriteErrorReadOnly); @@ -142,7 +143,7 @@ const ArchiveSidebarLabelEditSearchReplace: React.FunctionComponent = () => { bodyParams.set("search", fieldValue); const replaceFieldName = "replace" + Capitalize(fieldName); - const replaceAnyValue = (update as any)[replaceFieldName]; + const replaceAnyValue = (update as unknown as ISidebarGenericUpdate)[replaceFieldName]; const replaceValue: string = replaceAnyValue ?? ""; bodyParams.set("replace", replaceValue); diff --git a/starsky/starsky/clientapp/src/components/organisms/detail-view-sidebar/update-change.spec.ts b/starsky/starsky/clientapp/src/components/organisms/detail-view-sidebar/update-change.spec.ts index fdb102a3a..1ef3071ce 100644 --- a/starsky/starsky/clientapp/src/components/organisms/detail-view-sidebar/update-change.spec.ts +++ b/starsky/starsky/clientapp/src/components/organisms/detail-view-sidebar/update-change.spec.ts @@ -1,3 +1,4 @@ +import { newIArchive } from "../../../interfaces/IArchive"; import { IConnectionDefault } from "../../../interfaces/IConnectionDefault"; import { IFileIndexItem } from "../../../interfaces/IFileIndexItem"; import * as FetchPost from "../../../shared/fetch/fetch-post"; @@ -58,7 +59,7 @@ describe("Update Change", () => { it("wrong status code or missing data", async () => { const cacheSetSpy = jest .spyOn(FileListCache.prototype, "CacheSet") - .mockImplementationOnce(() => {}); + .mockImplementationOnce(() => newIArchive()); const fetchPostSpy = jest.spyOn(FetchPost, "default").mockImplementationOnce(() => { return Promise.resolve({ @@ -86,7 +87,7 @@ describe("Update Change", () => { it("item not in result", async () => { const cacheSetSpy = jest .spyOn(FileListCache.prototype, "CacheSet") - .mockImplementationOnce(() => {}); + .mockImplementationOnce(() => newIArchive()); const fetchPostSpy = jest .spyOn(FetchPost, "default") @@ -115,7 +116,7 @@ describe("Update Change", () => { it("contain result", async () => { const cacheSetSpy = jest .spyOn(FileListCache.prototype, "CacheSet") - .mockImplementationOnce(() => {}); + .mockImplementationOnce(() => newIArchive()); const fetchPostSpy = jest .spyOn(FetchPost, "default") diff --git a/starsky/starsky/clientapp/src/contexts/archive-context.spec.tsx b/starsky/starsky/clientapp/src/contexts/archive-context.spec.tsx index bc6be5795..512724486 100644 --- a/starsky/starsky/clientapp/src/contexts/archive-context.spec.tsx +++ b/starsky/starsky/clientapp/src/contexts/archive-context.spec.tsx @@ -117,7 +117,7 @@ describe("ArchiveContext", () => { const cacheSetObjectSpy = jest .spyOn(FileListCache.prototype, "CacheSetObject") - .mockImplementationOnce(() => {}); + .mockImplementationOnce(() => newIArchive()); // fullPath input const action = { type: "force-reset", payload: state } as ArchiveAction; @@ -154,7 +154,7 @@ describe("ArchiveContext", () => { const cacheSetObjectSpy = jest .spyOn(FileListCache.prototype, "CacheSetObject") .mockReset() - .mockImplementationOnce(() => {}); + .mockImplementationOnce(() => newIArchive()); // fullPath input const action = { type: "force-reset", payload: state } as ArchiveAction; diff --git a/starsky/starsky/clientapp/src/interfaces/ISidebarUpdate.ts b/starsky/starsky/clientapp/src/interfaces/ISidebarUpdate.ts index 60e219edf..a58171fef 100644 --- a/starsky/starsky/clientapp/src/interfaces/ISidebarUpdate.ts +++ b/starsky/starsky/clientapp/src/interfaces/ISidebarUpdate.ts @@ -12,3 +12,7 @@ export interface ISidebarUpdate { replaceDescription?: string; replaceTitle?: string; } + +export interface ISidebarGenericUpdate { + [key: string]: string | undefined; +} diff --git a/starsky/starsky/clientapp/src/shared/filelist-cache.spec.ts b/starsky/starsky/clientapp/src/shared/filelist-cache.spec.ts index 933e8a063..7a908ddc7 100644 --- a/starsky/starsky/clientapp/src/shared/filelist-cache.spec.ts +++ b/starsky/starsky/clientapp/src/shared/filelist-cache.spec.ts @@ -9,7 +9,7 @@ describe("FileListCache", () => { const fileListCache = new FileListCache(); describe("Test", () => { it("input and check if any result", () => { - fileListCache.CacheSet("?f=1", {} as any); + fileListCache.CacheSet("?f=1", {} as unknown as IArchive); const result = sessionStorage.getItem( fileListCache.CacheKeyGenerator({ @@ -112,7 +112,7 @@ describe("FileListCache", () => { fileIndexItems: [detailView.fileIndexItem] }); - if ((window as any).debug) { + if ((window as unknown as { debug: boolean }).debug) { // only for debugging for (let index = 0; index < Object.keys(sessionStorage).length; index++) { const item = new FileListCache().ParseJson( @@ -161,7 +161,7 @@ describe("FileListCache", () => { }); it("check default value", () => { - fileListCache.CacheSet("", {} as any); + fileListCache.CacheSet("", {} as unknown as IArchive); const result = sessionStorage.getItem( fileListCache.CacheKeyGenerator({ @@ -178,7 +178,7 @@ describe("FileListCache", () => { }); it("default sort value should be fileName", () => { - fileListCache.CacheSet("", {} as any); + fileListCache.CacheSet("", {} as unknown as IArchive); const explicitSet = fileListCache.CacheKeyGenerator({ sort: SortType.fileName @@ -189,7 +189,7 @@ describe("FileListCache", () => { }); it("sort value should be fileName NOT imageFormat", () => { - fileListCache.CacheSet("", {} as any); + fileListCache.CacheSet("", {} as unknown as IArchive); const imageFormatStorageKey = fileListCache.CacheKeyGenerator({ sort: SortType.imageFormat @@ -314,7 +314,7 @@ describe("FileListCache", () => { JSON.stringify({ data: 1, dateCache: 1 - } as any) + } as { data: number; dateCache: number }) ); const cacheGetter = fileListCache.CacheGet("?f=2"); @@ -352,7 +352,7 @@ describe("FileListCache", () => { JSON.stringify({ data: 1, dateCache: 1 - } as any) + } as { data: number; dateCache: number }) ); fileListCache.CacheCleanOld(); @@ -370,7 +370,7 @@ describe("FileListCache", () => { key, JSON.stringify({ data: 2 - } as any) + } as { data: number; dateCache: number }) ); fileListCache.CacheCleanOld(); @@ -392,13 +392,13 @@ describe("FileListCache", () => { JSON.stringify({ data: 2, dateCache: 2 - } as any) + } as { data: number; dateCache: number }) ); const data4 = { data: 2, dateCache: Date.now() - } as any; + } as { data: number; dateCache: number }; sessionStorage.setItem( fileListCache.CacheKeyGenerator({ f: "4", @@ -428,7 +428,7 @@ describe("FileListCache", () => { JSON.stringify({ data: 2, dateCache: 2 - } as any) + } as { data: number; dateCache: number }) ); sessionStorage.setItem( @@ -440,7 +440,7 @@ describe("FileListCache", () => { JSON.stringify({ data: 2, dateCache: Date.now() - } as any) + } as { data: number; dateCache: number }) ); fileListCache.CacheCleanEverything(); @@ -458,9 +458,9 @@ describe("FileListCache", () => { const data6 = { data: 2, dateCache: Date.now() - } as any; + } as { data: number; dateCache: number }; - fileListCache.CacheSetObject({ f: "6" }, data6); + fileListCache.CacheSetObject({ f: "6" }, data6 as unknown as IDetailView); const checkIfItemNotExist = sessionStorage.getItem( fileListCache.CacheKeyGenerator({ @@ -478,10 +478,10 @@ describe("FileListCache", () => { const data7 = { data: 2, dateCache: Date.now() - } as any; + } as { data: number; dateCache: number }; // before disabling - fileListCache.CacheSetObject({ f: "7" }, data7); + fileListCache.CacheSetObject({ f: "7" }, data7 as unknown as IDetailView); localStorage.setItem("clientCache", "false"); diff --git a/starsky/starsky/clientapp/src/shared/filelist-cache.ts b/starsky/starsky/clientapp/src/shared/filelist-cache.ts index b6673bf23..a74bd433f 100644 --- a/starsky/starsky/clientapp/src/shared/filelist-cache.ts +++ b/starsky/starsky/clientapp/src/shared/filelist-cache.ts @@ -33,7 +33,7 @@ export class FileListCache { * @param urlObject params of url * @param value object with data */ - public CacheSetObject(urlObject: IUrl, value: IArchive | IDetailView): any { + public CacheSetObject(urlObject: IUrl, value: IArchive | IDetailView): IDetailView | IArchive { this.CacheSetObjectWithoutParent(urlObject, value); this.CacheCleanOld(); this.setParentItem(urlObject, value); @@ -47,7 +47,10 @@ export class FileListCache { return urlObject; } - private CacheSetObjectWithoutParent(urlObject: IUrl, value: IArchive | IDetailView): any { + private CacheSetObjectWithoutParent( + urlObject: IUrl, + value: IArchive | IDetailView + ): void | IDetailView | IArchive { if (localStorage.getItem("clientCache") === "false") return; urlObject = this.SetDefaultUrlObjectValues(urlObject); value.dateCache = Date.now(); @@ -111,7 +114,7 @@ export class FileListCache { ); } - public CacheSet(locationSearch: string, value: IArchive | IDetailView): any { + public CacheSet(locationSearch: string, value: IArchive | IDetailView): IDetailView | IArchive { const urlObject = new URLPath().StringToIUrl(locationSearch); return this.CacheSetObject(urlObject, value); } @@ -185,9 +188,9 @@ export class FileListCache { */ public ParseJson(cacheString: string | null): IArchive | IDetailView | null { if (!cacheString) return null; - let cacheData: any = {}; + let cacheData = {} as IArchive | IDetailView | null; try { - cacheData = JSON.parse(cacheString); + cacheData = JSON.parse(cacheString) as IArchive | IDetailView; } catch (error) { console.error(error); return null; diff --git a/starsky/starsky/clientapp/src/shared/geo.spec.ts b/starsky/starsky/clientapp/src/shared/geo.spec.ts index f8c4bffa3..01e23cf64 100644 --- a/starsky/starsky/clientapp/src/shared/geo.spec.ts +++ b/starsky/starsky/clientapp/src/shared/geo.spec.ts @@ -14,7 +14,7 @@ describe("Geo", () => { }); it("point 1 has wrong input", () => { - let shouldGiveError: any; + let shouldGiveError: unknown; try { geo.Distance([1, 1, 1], []); throw Error("should fail"); @@ -27,11 +27,11 @@ describe("Geo", () => { }); it("point 2 has wrong input", () => { - let shouldGiveError: any; + let shouldGiveError: unknown; try { geo.Distance([1, 1], []); throw Error("should fail"); - } catch (error) { + } catch (error: unknown) { shouldGiveError = error; } diff --git a/starsky/starsky/clientapp/src/shared/keyboard.spec.ts b/starsky/starsky/clientapp/src/shared/keyboard.spec.ts index b253639b0..a31f1409a 100644 --- a/starsky/starsky/clientapp/src/shared/keyboard.spec.ts +++ b/starsky/starsky/clientapp/src/shared/keyboard.spec.ts @@ -107,7 +107,7 @@ describe("keyboard", () => { target.innerHTML = "input"; const setStart = jest.fn(); - (document.createRange as any) = () => ({ + (document as { createRange: () => void }).createRange = () => ({ setStart: () => setStart, setEnd: () => {}, commonAncestorContainer: { @@ -118,7 +118,7 @@ describe("keyboard", () => { }); const addRange = jest.fn(); - (window.getSelection as any) = () => { + (window as { getSelection: () => void }).getSelection = () => { return { removeAllRanges: () => {}, addRange: addRange diff --git a/starsky/starsky/clientapp/src/shared/leaflet/leaflet-modify-empty-image-url-gridlayer.spec.ts b/starsky/starsky/clientapp/src/shared/leaflet/leaflet-modify-empty-image-url-gridlayer.spec.ts index a25346ecf..ac9d4bb52 100644 --- a/starsky/starsky/clientapp/src/shared/leaflet/leaflet-modify-empty-image-url-gridlayer.spec.ts +++ b/starsky/starsky/clientapp/src/shared/leaflet/leaflet-modify-empty-image-url-gridlayer.spec.ts @@ -8,7 +8,7 @@ describe("LeafletEmptyImageUrlGridLayer [leaflet-extension]", () => { const el = document.createElement("div"); // mock a tile - (gridlayer as any)._tiles = { + (gridlayer as unknown as { _tiles: InternalTiles })._tiles = { test: { coords: {} as Coords, current: true, @@ -28,7 +28,7 @@ describe("LeafletEmptyImageUrlGridLayer [leaflet-extension]", () => { // this is normaly excuted by leaflet gridlayer._removeTile("test"); - expect((gridlayer as any)._tiles).toStrictEqual({}); + expect((gridlayer as unknown as { _tiles: InternalTiles })._tiles).toStrictEqual({}); expect(fire).toHaveBeenCalled(); }); @@ -44,13 +44,13 @@ describe("LeafletEmptyImageUrlGridLayer [leaflet-extension]", () => { y: 10, z: 1 } as Coords; - const el = document.createElement("div") as any; + const el = document.createElement("div") as unknown as HTMLElement; const gridlayer = new LeafletEmptyImageUrlGridLayer(); - (gridlayer as any)._map = true; + (gridlayer as unknown as { _map: boolean })._map = true; // mock a tile - (gridlayer as any)._tiles = { + (gridlayer as unknown as { _tiles: InternalTiles })._tiles = { "51:10:1": { coords: exampleCoords, current: true, @@ -59,13 +59,18 @@ describe("LeafletEmptyImageUrlGridLayer [leaflet-extension]", () => { } as InternalTiles; const _pruneTiles = jest.fn(); - (gridlayer as any)._pruneTiles = _pruneTiles; + (gridlayer as unknown as { _pruneTiles: () => void })._pruneTiles = _pruneTiles; - (gridlayer as any)._noTilesToLoad = () => { + (gridlayer as unknown as { _noTilesToLoad: () => boolean })._noTilesToLoad = () => { return true; }; - gridlayer._tileReady(exampleCoords, null, el); + gridlayer._tileReady(exampleCoords, null, { + getAttribute: jest.fn(), + coords: exampleCoords, + current: true, + el + }); expect(_pruneTiles).toHaveBeenCalled(); expect(requestAnimFrameSpy).toHaveBeenCalled(); @@ -85,14 +90,14 @@ describe("LeafletEmptyImageUrlGridLayer [leaflet-extension]", () => { y: 10, z: 1 } as Coords; - const el = document.createElement("div") as any; + const el = document.createElement("div") as unknown as HTMLElement; const gridlayer = new LeafletEmptyImageUrlGridLayer(); - (gridlayer as any)._map = true; + (gridlayer as unknown as { _map: boolean })._map = true; // mock a tile - (gridlayer as any)._tiles = { + (gridlayer as unknown as { _tiles: InternalTiles })._tiles = { "51:10:1": { coords: exampleCoords, current: true, @@ -100,16 +105,21 @@ describe("LeafletEmptyImageUrlGridLayer [leaflet-extension]", () => { } } as InternalTiles; - (gridlayer as any)._map = { + (gridlayer as unknown as { _map: { _fadeAnimated: boolean } })._map = { _fadeAnimated: true }; - (gridlayer as any)._noTilesToLoad = () => { + (gridlayer as unknown as { _noTilesToLoad: () => boolean })._noTilesToLoad = () => { return true; }; // with error enabled - gridlayer._tileReady(exampleCoords, true, el); + gridlayer._tileReady(exampleCoords, true, { + getAttribute: jest.fn(), + coords: exampleCoords, + current: true, + el + }); expect(requestAnimFrameSpy).toHaveBeenCalled(); expect(timeoutSpy).toHaveBeenCalled(); From 81805c140360b6f8fa8f867695251a9a4a37092f Mon Sep 17 00:00:00 2001 From: Dion Date: Mon, 16 Dec 2024 20:10:40 +0100 Subject: [PATCH 08/30] #1866 eslint fixes --- .../color-class-select-keyboard.spec.tsx | 4 +- .../color-class-select.spec.tsx | 2 +- .../health-check-for-updates.spec.tsx | 4 +- .../health-check-for-updates.stories.tsx | 4 +- .../is-search-query-menu-search-item.spec.tsx | 26 ++++--- .../internal/shift-selection-helper.spec.ts | 10 ++- .../item-list-view/item-list-view.spec.tsx | 8 +- .../item-text-list-view.spec.tsx | 7 +- .../list-image-view-select-container.spec.tsx | 2 +- .../internal/arrow-key-down.spec.ts | 14 ++-- .../internal/inline-search-suggest.spec.tsx | 12 +-- .../internal/navigate.spec.ts | 8 +- .../menu-option-selection-all.spec.tsx | 17 +++-- .../menu-option-selection-undo.spec.tsx | 15 +++- .../application-exception.spec.tsx | 8 +- .../application-exception.tsx | 2 +- .../detail-view-media/detail-view-gpx.tsx | 10 ++- .../detail-view-mp4.spec.tsx | 2 +- .../internal/play-pause.spec.ts | 5 +- .../internal/time-update.spec.ts | 2 +- .../menu-archive/menu-archive.spec.tsx | 15 +++- .../modal-archive-rename.tsx | 2 +- .../src/contexts/archive-context.spec.tsx | 75 ++++++++++--------- .../src/hooks/use-gestures/pointer.ts | 2 +- .../hooks/use-gestures/use-gestures.spec.tsx | 4 +- 25 files changed, 152 insertions(+), 108 deletions(-) diff --git a/starsky/starsky/clientapp/src/components/molecules/color-class-select/color-class-select-keyboard.spec.tsx b/starsky/starsky/clientapp/src/components/molecules/color-class-select/color-class-select-keyboard.spec.tsx index a84904f72..e79726c6a 100644 --- a/starsky/starsky/clientapp/src/components/molecules/color-class-select/color-class-select-keyboard.spec.tsx +++ b/starsky/starsky/clientapp/src/components/molecules/color-class-select/color-class-select-keyboard.spec.tsx @@ -112,7 +112,7 @@ describe("ColorClassSelectKeyboard", () => { .spyOn(ColorClassUpdateSingle, "ColorClassUpdateSingle") .mockImplementationOnce((_p1, _p2, _p3, _p4, setIsError) => { setIsError("true"); - return { Update: jest.fn() } as any; + return { Update: jest.fn() } as unknown as ColorClassUpdateSingle.ColorClassUpdateSingle; }); const component = render( @@ -152,7 +152,7 @@ describe("ColorClassSelectKeyboard", () => { .spyOn(ColorClassUpdateSingle, "ColorClassUpdateSingle") .mockImplementationOnce((_p1, _p2, _p3, _p4, _p5, _p6, setCurrentColorClass) => { setCurrentColorClass(1); - return { Update: jest.fn() } as any; + return { Update: jest.fn() } as unknown as ColorClassUpdateSingle.ColorClassUpdateSingle; }); const component = render( diff --git a/starsky/starsky/clientapp/src/components/molecules/color-class-select/color-class-select.spec.tsx b/starsky/starsky/clientapp/src/components/molecules/color-class-select/color-class-select.spec.tsx index 38efbc80e..4118eac56 100644 --- a/starsky/starsky/clientapp/src/components/molecules/color-class-select/color-class-select.spec.tsx +++ b/starsky/starsky/clientapp/src/components/molecules/color-class-select/color-class-select.spec.tsx @@ -182,7 +182,7 @@ describe("ColorClassSelect", () => { .spyOn(ColorClassUpdateSingle, "ColorClassUpdateSingle") .mockImplementationOnce((_p1, _p2, _p3, _p4, setIsError) => { setIsError("true"); - return { Update: jest.fn() } as any; + return { Update: jest.fn() } as unknown as ColorClassUpdateSingle.ColorClassUpdateSingle; }); const component = render( diff --git a/starsky/starsky/clientapp/src/components/molecules/health-check-for-updates/health-check-for-updates.spec.tsx b/starsky/starsky/clientapp/src/components/molecules/health-check-for-updates/health-check-for-updates.spec.tsx index 4729a9cdb..37cf5ef85 100644 --- a/starsky/starsky/clientapp/src/components/molecules/health-check-for-updates/health-check-for-updates.spec.tsx +++ b/starsky/starsky/clientapp/src/components/molecules/health-check-for-updates/health-check-for-updates.spec.tsx @@ -149,7 +149,7 @@ describe("HealthCheckForUpdates", () => { it("There a no links in the Notification when using electron", () => { // This is the difference - (window as any).isElectron = true; + (window as unknown as { isElectron: boolean }).isElectron = true; const mockGetIConnectionDefault = { statusCode: 202, @@ -173,7 +173,7 @@ describe("HealthCheckForUpdates", () => { expect(useFetchSpy).toHaveBeenCalled(); component.unmount(); - (window as any).isElectron = null; + (window as unknown as { isElectron: null }).isElectron = null; }); }); }); diff --git a/starsky/starsky/clientapp/src/components/molecules/health-check-for-updates/health-check-for-updates.stories.tsx b/starsky/starsky/clientapp/src/components/molecules/health-check-for-updates/health-check-for-updates.stories.tsx index 4e760ea72..31113b5b4 100644 --- a/starsky/starsky/clientapp/src/components/molecules/health-check-for-updates/health-check-for-updates.stories.tsx +++ b/starsky/starsky/clientapp/src/components/molecules/health-check-for-updates/health-check-for-updates.stories.tsx @@ -5,7 +5,7 @@ export default { }; export const Default = () => { - (window as any).isElectron = undefined; + (window as unknown as { isElectron: unknown }).isElectron = undefined; return ( <>
{MessageRole}
-
{accountStatus?.data?.roleCode}
+
{accountStatusData?.roleCode}
); }; diff --git a/starsky/starsky/clientapp/src/hooks/use-gestures/IHandlers.types.ts b/starsky/starsky/clientapp/src/hooks/use-gestures/IHandlers.types.ts index edbcbdb51..24161681d 100644 --- a/starsky/starsky/clientapp/src/hooks/use-gestures/IHandlers.types.ts +++ b/starsky/starsky/clientapp/src/hooks/use-gestures/IHandlers.types.ts @@ -1,3 +1,5 @@ +import { ICurrentTouches } from "./ICurrentTouches.types"; + export interface IHandlers { onPanStart?: () => void; onPanMove?: (ev: TouchEvent) => void; @@ -14,3 +16,7 @@ export interface IHandlers { onPinchChanged?: () => void; onPinchEnd?: () => void; } + +export interface IHandlersMapper { + [key: string]: (event?: ICurrentTouches) => void; +} diff --git a/starsky/starsky/clientapp/src/hooks/use-gestures/call-handler.spec.ts b/starsky/starsky/clientapp/src/hooks/use-gestures/call-handler.spec.ts index 5ce528dfb..61270ee7e 100644 --- a/starsky/starsky/clientapp/src/hooks/use-gestures/call-handler.spec.ts +++ b/starsky/starsky/clientapp/src/hooks/use-gestures/call-handler.spec.ts @@ -1,20 +1,21 @@ import { ICurrentTouches } from "./ICurrentTouches.types"; +import { IHandlers } from "./IHandlers.types"; import { callHandler } from "./call-handler"; describe("callHandler", () => { describe("callHandler", () => { it("should call test function", () => { - const handlers = { test: jest.fn() } as any; - callHandler("test", true as any, handlers); + const handlers = { test: jest.fn() } as unknown as IHandlers; + callHandler("test", true as unknown as ICurrentTouches, handlers); - expect(handlers.test).toHaveBeenCalled(); + expect((handlers as { test: jest.Mock }).test).toHaveBeenCalled(); }); it("should not call test function", () => { - const handlers = { test: jest.fn() } as any; - callHandler(undefined as any, true as any, handlers); + const handlers = { test: jest.fn() } as unknown as IHandlers; + callHandler(undefined as unknown as string, true as unknown as ICurrentTouches, handlers); - expect(handlers.test).toHaveBeenCalledTimes(0); + expect((handlers as { test: jest.Mock }).test).toHaveBeenCalledTimes(0); }); }); diff --git a/starsky/starsky/clientapp/src/hooks/use-gestures/call-handler.ts b/starsky/starsky/clientapp/src/hooks/use-gestures/call-handler.ts index ce23277ea..2f08052c1 100644 --- a/starsky/starsky/clientapp/src/hooks/use-gestures/call-handler.ts +++ b/starsky/starsky/clientapp/src/hooks/use-gestures/call-handler.ts @@ -1,10 +1,10 @@ import { ICurrentTouches } from "./ICurrentTouches.types"; -import { IHandlers } from "./IHandlers.types"; +import { IHandlers, IHandlersMapper } from "./IHandlers.types"; export const callHandler = ( eventName: string, event: ICurrentTouches, - handlers: IHandlers | undefined + handlers: IHandlers | undefined | IHandlersMapper ) => { if (!handlers) { throw new Error(`handler ${eventName} is missing`); @@ -12,9 +12,12 @@ export const callHandler = ( if ( eventName && - (handlers as any)[eventName] && - typeof (handlers as any)[eventName] === "function" + handlers[eventName as keyof IHandlers] && + typeof handlers[eventName as keyof IHandlers] === "function" ) { - (handlers as any)[eventName](event); + const handler = handlers[eventName as keyof IHandlers]; + if (handler) { + (handler as (e: ICurrentTouches) => void)(event); + } } }; diff --git a/starsky/starsky/clientapp/src/hooks/use-gestures/debounce.ts b/starsky/starsky/clientapp/src/hooks/use-gestures/debounce.ts index 912c6864b..fb6894a29 100644 --- a/starsky/starsky/clientapp/src/hooks/use-gestures/debounce.ts +++ b/starsky/starsky/clientapp/src/hooks/use-gestures/debounce.ts @@ -1,6 +1,6 @@ -export const debounce = (func: any, wait: number) => { - let timeout: any; - return function (...args: any) { +export const debounce = (func: (...args: unknown[]) => void, wait: number) => { + let timeout: ReturnType; + return function (...args: unknown[]) { // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore // eslint-disable-next-line @typescript-eslint/no-this-alias diff --git a/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.spec.tsx b/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.spec.tsx index 5a7cceb06..57b016aa4 100644 --- a/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.spec.tsx +++ b/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.spec.tsx @@ -1,10 +1,11 @@ -import { act, createEvent, fireEvent, render } from "@testing-library/react"; -import React, { useRef, useState } from "react"; +import { createEvent, fireEvent, render } from "@testing-library/react"; +import React, { act, useRef, useState } from "react"; import { mountReactHook } from "../___tests___/test-hook"; import * as callHandler from "./call-handler"; import * as debounce from "./debounce"; import * as getCurrentTouchesAll from "./get-current-touches"; import { getCurrentTouches } from "./get-current-touches"; +import { ICurrentTouches } from "./ICurrentTouches.types"; import { Pointer } from "./pointer"; import { getAngleDeg, getDistance, useGestures } from "./use-gestures"; @@ -48,7 +49,7 @@ describe("useGestures", () => { const p = getDistance(new Pointer({ clientX: 0, clientY: 0 }), { x: undefined, y: undefined - } as any); + } as unknown as Pointer); expect(p).toBe(0); }); @@ -74,7 +75,7 @@ describe("useGestures", () => { const p = getAngleDeg(new Pointer({ clientX: 0, clientY: 0 }), { x: undefined, y: undefined - } as any); + } as unknown as Pointer); expect(p).toBe(0); }); @@ -116,10 +117,10 @@ describe("useGestures", () => { const t = { current: { x: 1, y: 1 } }; const result = getCurrentTouches( - sourceEvent as any, - newTouches as any, - prevTouch as any, - t as any + sourceEvent as unknown as globalThis.TouchEvent, + newTouches as unknown as TouchList, + prevTouch as unknown as ICurrentTouches, + t as React.MutableRefObject ); expect(result.delta).toBe(20); @@ -150,10 +151,10 @@ describe("useGestures", () => { const t = { current: { x: 1, y: 1 } }; const result = getCurrentTouches( - sourceEvent as any, - newTouches as any, - prevTouch as any, - t as any + sourceEvent as unknown as globalThis.TouchEvent, + newTouches as unknown as TouchList, + prevTouch as unknown as ICurrentTouches, + t as React.MutableRefObject ); expect(result.angleDeg).toBe(180); @@ -167,22 +168,22 @@ describe("useGestures", () => { { clientX: 10, clientY: 0 - } as any + } ] - }; + } as TouchEventInit; const exampleDoubleTouches = { touches: [ { clientX: 10, clientY: 0 - } as any, + }, { clientX: 10, clientY: 0 - } as any + } ] - }; + } as TouchEventInit; it("check if is called once", () => { jest.useFakeTimers(); @@ -220,7 +221,7 @@ describe("useGestures", () => { expect(callHandlerSpy).toHaveBeenCalled(); expect(callHandlerSpy).toHaveBeenCalledWith("onPanStart", expect.anything(), undefined); - const component = hook.componentMount as any; + const component = hook.componentMount; component.unmount(); }); @@ -244,7 +245,7 @@ describe("useGestures", () => { expect(callHandlerSpy).toHaveBeenCalled(); expect(callHandlerSpy).toHaveBeenCalledWith("onPinchStart", expect.anything(), undefined); - const component = hook.componentMount as any; + const component = hook.componentMount; component.unmount(); }); @@ -268,7 +269,7 @@ describe("useGestures", () => { expect(callHandlerSpy).toHaveBeenCalled(); expect(callHandlerSpy).toHaveBeenCalledWith("onPanMove", expect.anything(), undefined); - const component = hook.componentMount as any; + const component = hook.componentMount; component.unmount(); }); @@ -280,7 +281,7 @@ describe("useGestures", () => { return { deltaX: undefined, deltaY: undefined - } as any; + } as unknown as ICurrentTouches; }); jest.spyOn(callHandler, "callHandler").mockImplementationOnce(() => {}); @@ -305,7 +306,7 @@ describe("useGestures", () => { expect(debounceSpy).toHaveBeenCalledTimes(0); - const component = hook.componentMount as any; + const component = hook.componentMount; component.unmount(); debounceSpy.mockReset(); }); @@ -315,7 +316,7 @@ describe("useGestures", () => { return { deltaX: 30, deltaY: 0 - } as any; + } as unknown as ICurrentTouches; }); const debounceAnonymousFnSpy = jest.fn(); @@ -341,7 +342,7 @@ describe("useGestures", () => { expect(debounceSpy).toHaveBeenCalled(); expect(debounceAnonymousFnSpy).toHaveBeenCalledWith("onSwipeRight", {}, "swipeRight"); - const component = hook.componentMount as any; + const component = hook.componentMount; component.unmount(); }); @@ -353,7 +354,7 @@ describe("useGestures", () => { return { deltaX: -30, deltaY: 0 - } as any; + } as unknown as ICurrentTouches; }); jest.spyOn(callHandler, "callHandler").mockImplementationOnce(() => {}); @@ -377,7 +378,7 @@ describe("useGestures", () => { expect(debounceSpy).toHaveBeenCalled(); expect(debounceAnonymousFnSpy).toHaveBeenCalledWith("onSwipeLeft", {}, "swipeLeft"); - const component = hook.componentMount as any; + const component = hook.componentMount; component.unmount(); }); @@ -389,7 +390,7 @@ describe("useGestures", () => { return { deltaX: 0, deltaY: 30 - } as any; + } as unknown as ICurrentTouches; }); jest.spyOn(callHandler, "callHandler").mockImplementationOnce(() => {}); @@ -413,7 +414,7 @@ describe("useGestures", () => { expect(debounceSpy).toHaveBeenCalled(); expect(debounceAnonymousFnSpy).toHaveBeenCalledWith("onSwipeDown", {}, "swipeDown"); - const component = hook.componentMount as any; + const component = hook.componentMount; component.unmount(); }); @@ -425,7 +426,7 @@ describe("useGestures", () => { return { deltaX: 0, deltaY: -30 - } as any; + } as unknown as ICurrentTouches; }); jest.spyOn(callHandler, "callHandler").mockImplementationOnce(() => {}); @@ -450,7 +451,7 @@ describe("useGestures", () => { expect(debounceSpy).toHaveBeenCalled(); expect(debounceAnonymousFnSpy).toHaveBeenCalledWith("onSwipeUp", {}, "swipeUp"); - const component = hook.componentMount as any; + const component = hook.componentMount; component.unmount(); }); @@ -477,7 +478,7 @@ describe("useGestures", () => { expect(callHandlerSpy).toHaveBeenCalled(); expect(callHandlerSpy).toHaveBeenCalledWith("onPinchChanged", undefined, undefined); - const component = hook.componentMount as any; + const component = hook.componentMount; component.unmount(); }); @@ -531,7 +532,7 @@ describe("useGestures", () => { expect(callHandlerSpy).toHaveBeenCalled(); expect(callHandlerSpy).toHaveBeenCalledWith("onPinchEnd", undefined, undefined); - const component = hook.componentMount as any; + const component = hook.componentMount; component.unmount(); }); @@ -564,7 +565,7 @@ describe("useGestures", () => { expect(callHandlerSpy).toHaveBeenCalled(); expect(callHandlerSpy).toHaveBeenNthCalledWith(1, "onPanEnd", undefined, undefined); expect(callHandlerSpy).toHaveBeenNthCalledWith(2, "onGesture1End", undefined, undefined); - const component = hook.componentMount as any; + const component = hook.componentMount; component.unmount(); }); }); diff --git a/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.ts b/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.ts index 9dba81dfb..3179f5718 100644 --- a/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.ts +++ b/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.ts @@ -95,13 +95,15 @@ const executeTouchMove = ( } if (eventName) { - debounce( - (eventNameScoped: string, touchesScoped: ICurrentTouches, theGestureScoped: string) => { - callHandler(eventNameScoped, touchesScoped, handlers); - setGesture(theGestureScoped); - }, - 100 - )(eventName, touches, theGesture); + debounce((...args: unknown[]) => { + const [eventNameScoped, touchesScoped, theGestureScoped] = args as [ + string, + ICurrentTouches, + string + ]; + callHandler(eventNameScoped, touchesScoped, handlers); + setGesture(theGestureScoped); + }, 100)(eventName, touches, theGesture); } }; diff --git a/starsky/starsky/clientapp/src/hooks/use-intersection-observer.spec.tsx b/starsky/starsky/clientapp/src/hooks/use-intersection-observer.spec.tsx index 6aab734b0..dd5aa2d8e 100644 --- a/starsky/starsky/clientapp/src/hooks/use-intersection-observer.spec.tsx +++ b/starsky/starsky/clientapp/src/hooks/use-intersection-observer.spec.tsx @@ -1,6 +1,9 @@ import { render } from "@testing-library/react"; -import React, { useRef } from "react"; -import useIntersection, { newIntersectionObserver } from "./use-intersection-observer"; +import React, { MutableRefObject, useRef } from "react"; +import useIntersection, { + IntersectionOptions, + newIntersectionObserver +} from "./use-intersection-observer"; describe("useIntersection", () => { const IntersectionComponentTest = () => { @@ -28,7 +31,12 @@ describe("useIntersection", () => { const target = useRef(null); render(
); const tagRef = { current: { scrollHeight: 100, clientHeight: 200 } }; - newIntersectionObserver(target, jest.fn(), true, tagRef); + newIntersectionObserver( + target, + jest.fn(), + true, + tagRef as unknown as MutableRefObject + ); return null; }; diff --git a/starsky/starsky/clientapp/src/hooks/use-intersection-observer.ts b/starsky/starsky/clientapp/src/hooks/use-intersection-observer.ts index 12ff220d5..3b6cf78ec 100644 --- a/starsky/starsky/clientapp/src/hooks/use-intersection-observer.ts +++ b/starsky/starsky/clientapp/src/hooks/use-intersection-observer.ts @@ -6,7 +6,7 @@ type IntersectionChangeHandler = (entry: IntersectionObserverEntry) => void; // credits for: https://github.com/cats-oss/use-intersection -type IntersectionOptions = { +export type IntersectionOptions = { root?: React.RefObject; rootMargin?: string; threshold?: number | number[]; @@ -16,9 +16,9 @@ type IntersectionOptions = { export const newIntersectionObserver = ( ref: React.RefObject, - setIntersecting: React.Dispatch, + setIntersecting: React.Dispatch>, once: boolean | undefined, - optsRef: React.MutableRefObject, + optsRef: React.MutableRefObject, callback?: IntersectionChangeHandler ): IntersectionObserver => { const observer = new IntersectionObserver( diff --git a/starsky/starsky/clientapp/src/hooks/use-interval.spec.tsx b/starsky/starsky/clientapp/src/hooks/use-interval.spec.tsx index 5558dc2e3..b5ac105e6 100644 --- a/starsky/starsky/clientapp/src/hooks/use-interval.spec.tsx +++ b/starsky/starsky/clientapp/src/hooks/use-interval.spec.tsx @@ -24,7 +24,7 @@ describe("useInterval", () => { it("check if setInterval is called", () => { const clearIntervalSpy = jest.spyOn(window, "setInterval").mockImplementationOnce(() => { - return {} as any; + return {} as NodeJS.Timeout; }); const component = render(); diff --git a/starsky/starsky/clientapp/src/hooks/use-keyboard/use-hotkeys.tsx b/starsky/starsky/clientapp/src/hooks/use-keyboard/use-hotkeys.tsx index a9df83609..0dcdb96aa 100644 --- a/starsky/starsky/clientapp/src/hooks/use-keyboard/use-hotkeys.tsx +++ b/starsky/starsky/clientapp/src/hooks/use-keyboard/use-hotkeys.tsx @@ -34,7 +34,7 @@ function useHotKeys( /* should do nothing, you should overwrite this */ }, // eslint-disable-next-line @typescript-eslint/no-unused-vars - _dependencies: any = [] + _dependencies: React.DependencyList = [] ) { useEffect(() => { const handler = function (event: KeyboardEvent) { diff --git a/starsky/starsky/clientapp/src/hooks/use-keyboard/use-keyboard-event.spec.tsx b/starsky/starsky/clientapp/src/hooks/use-keyboard/use-keyboard-event.spec.tsx index efd5ff962..35d3f96a2 100644 --- a/starsky/starsky/clientapp/src/hooks/use-keyboard/use-keyboard-event.spec.tsx +++ b/starsky/starsky/clientapp/src/hooks/use-keyboard/use-keyboard-event.spec.tsx @@ -6,7 +6,7 @@ describe("useKeyboardEvent", () => { interface UseKeyboardEventComponentTestProps { regex: RegExp; callback: (arg0: KeyboardEvent) => void; - dependencies: any[]; + dependencies: React.DependencyList; } const UseKeyboardEventComponentTest: React.FunctionComponent = diff --git a/starsky/starsky/clientapp/src/hooks/use-keyboard/use-keyboard-event.ts b/starsky/starsky/clientapp/src/hooks/use-keyboard/use-keyboard-event.ts index c1ab48217..358f0b438 100644 --- a/starsky/starsky/clientapp/src/hooks/use-keyboard/use-keyboard-event.ts +++ b/starsky/starsky/clientapp/src/hooks/use-keyboard/use-keyboard-event.ts @@ -19,7 +19,7 @@ import { useEffect } from "react"; function useKeyboardEvent( regex: RegExp, callback: (arg0: KeyboardEvent) => void, - dependencies: any = [] + dependencies: React.DependencyList = [] ) { useEffect(() => { const handler = function (event: KeyboardEvent) { diff --git a/starsky/starsky/clientapp/src/hooks/use-location/use-location.spec.tsx b/starsky/starsky/clientapp/src/hooks/use-location/use-location.spec.tsx index 59c93b6de..30137fc5b 100644 --- a/starsky/starsky/clientapp/src/hooks/use-location/use-location.spec.tsx +++ b/starsky/starsky/clientapp/src/hooks/use-location/use-location.spec.tsx @@ -3,7 +3,7 @@ import React from "react"; import useLocation from "./use-location"; describe("useLocation", () => { - const UseLocationComponentTest: React.FunctionComponent = () => { + const UseLocationComponentTest: React.FunctionComponent = () => { useLocation(); return null; }; diff --git a/starsky/starsky/clientapp/src/hooks/use-searchlist.ts b/starsky/starsky/clientapp/src/hooks/use-searchlist.ts index 13396ea41..0d0a76226 100644 --- a/starsky/starsky/clientapp/src/hooks/use-searchlist.ts +++ b/starsky/starsky/clientapp/src/hooks/use-searchlist.ts @@ -96,8 +96,8 @@ export const fetchContentUseSearchList = async ( archiveMedia.data.colorClassUsage = []; archiveMedia.data.colorClassActiveList = []; setArchive(archiveMedia.data); - } catch (e: any) { - if (e?.message?.indexOf("aborted") >= 0) { + } catch (e: unknown) { + if ((e as Error)?.message?.indexOf("aborted") >= 0) { console.log("useSearchList aborted"); return; } diff --git a/starsky/starsky/clientapp/src/interfaces/IConnectionDefault.ts b/starsky/starsky/clientapp/src/interfaces/IConnectionDefault.ts index 76865974c..c36010f34 100644 --- a/starsky/starsky/clientapp/src/interfaces/IConnectionDefault.ts +++ b/starsky/starsky/clientapp/src/interfaces/IConnectionDefault.ts @@ -1,5 +1,5 @@ export interface IConnectionDefault { - data: any; + data: unknown; statusCode: number; } export function newIConnectionDefault(): IConnectionDefault { diff --git a/starsky/starsky/clientapp/src/shared/update-relative-object.ts b/starsky/starsky/clientapp/src/shared/update-relative-object.ts index 304e2e562..7b9a2e6b7 100644 --- a/starsky/starsky/clientapp/src/shared/update-relative-object.ts +++ b/starsky/starsky/clientapp/src/shared/update-relative-object.ts @@ -31,8 +31,8 @@ export class UpdateRelativeObject { rejects(new Error("status code not 200")); return; } - setRelativeObjects(result.data); - resolve(result.data); + setRelativeObjects(result.data as React.SetStateAction); + resolve(result.data as IRelativeObjects); }) .catch((err: Error) => { console.error(err); From d2c20189b5e0d87d902017bc94cfe3e0977ced18 Mon Sep 17 00:00:00 2001 From: Dion Date: Mon, 16 Dec 2024 22:51:40 +0100 Subject: [PATCH 17/30] #1866 remove any | eslint --- starsky/starsky/clientapp/src/hooks/use-interval.ts | 4 +++- .../clientapp/src/pages/search-page.spec.tsx | 13 +++++++++---- .../starsky/clientapp/src/pages/trash-page.spec.tsx | 12 ++++++++---- .../clientapp/src/router-app/router-app.spec.tsx | 4 ++-- 4 files changed, 22 insertions(+), 11 deletions(-) diff --git a/starsky/starsky/clientapp/src/hooks/use-interval.ts b/starsky/starsky/clientapp/src/hooks/use-interval.ts index c34f116cb..2b3b18446 100644 --- a/starsky/starsky/clientapp/src/hooks/use-interval.ts +++ b/starsky/starsky/clientapp/src/hooks/use-interval.ts @@ -1,7 +1,9 @@ import { useEffect, useRef } from "react"; function useInterval(callback: () => void, delay: number) { - const savedCallback = useRef({} as any); + const savedCallback = useRef<() => void | null>(null) as React.MutableRefObject< + () => void | null + >; // Remember the latest callback. useEffect(() => { diff --git a/starsky/starsky/clientapp/src/pages/search-page.spec.tsx b/starsky/starsky/clientapp/src/pages/search-page.spec.tsx index b6b02f1e0..a349232c2 100644 --- a/starsky/starsky/clientapp/src/pages/search-page.spec.tsx +++ b/starsky/starsky/clientapp/src/pages/search-page.spec.tsx @@ -3,6 +3,7 @@ import * as Preloader from "../components/atoms/preloader/preloader"; import * as ApplicationException from "../components/organisms/application-exception/application-exception"; import * as ArchiveContextWrapper from "../contexts-wrappers/archive-wrapper"; import * as useSearchList from "../hooks/use-searchlist"; +import { ISearchList } from "../hooks/use-searchlist"; import { PageType } from "../interfaces/IDetailView"; import { SearchPage } from "./search-page"; @@ -24,7 +25,9 @@ describe("SearchPage", () => { }); it("Internal Error null", () => { - jest.spyOn(useSearchList, "default").mockImplementationOnce(() => null as any); + jest + .spyOn(useSearchList, "default") + .mockImplementationOnce(() => null as unknown as ISearchList); const component = render(); expect(component.container.innerHTML).toBe("Something went wrong"); @@ -33,7 +36,9 @@ describe("SearchPage", () => { }); it("Internal Error plain object", () => { - jest.spyOn(useSearchList, "default").mockImplementationOnce(() => ({}) as any); + jest + .spyOn(useSearchList, "default") + .mockImplementationOnce(() => ({}) as unknown as ISearchList); const component = render(); expect(component.container.innerHTML).toBe("Something went wrong"); @@ -49,7 +54,7 @@ describe("SearchPage", () => { jest.spyOn(useSearchList, "default").mockImplementationOnce(() => { return { pageType: PageType.ApplicationException - } as any; + } as unknown as ISearchList; }); const component = render(); @@ -66,7 +71,7 @@ describe("SearchPage", () => { return { archive: {}, pageType: PageType.Loading - } as any; + } as unknown as ISearchList; }); jest.spyOn(ArchiveContextWrapper, "default").mockImplementationOnce(() => { diff --git a/starsky/starsky/clientapp/src/pages/trash-page.spec.tsx b/starsky/starsky/clientapp/src/pages/trash-page.spec.tsx index 0e4a7ed7e..d3f88896f 100644 --- a/starsky/starsky/clientapp/src/pages/trash-page.spec.tsx +++ b/starsky/starsky/clientapp/src/pages/trash-page.spec.tsx @@ -39,7 +39,9 @@ describe("TrashPage", () => { }); it("Internal Error null", () => { - jest.spyOn(useSearchList, "default").mockImplementationOnce(() => null as any); + jest + .spyOn(useSearchList, "default") + .mockImplementationOnce(() => null as unknown as ISearchList); const component = render(); expect(component.container.innerHTML).toBe("Something went wrong"); @@ -48,7 +50,9 @@ describe("TrashPage", () => { }); it("Internal Error plain object", () => { - jest.spyOn(useSearchList, "default").mockImplementationOnce(() => ({}) as any); + jest + .spyOn(useSearchList, "default") + .mockImplementationOnce(() => ({}) as unknown as ISearchList); const component = render(); expect(component.container.innerHTML).toBe("Something went wrong"); @@ -64,7 +68,7 @@ describe("TrashPage", () => { jest.spyOn(useSearchList, "default").mockImplementationOnce(() => { return { pageType: PageType.ApplicationException - } as any; + } as ISearchList; }); const component = render(); @@ -81,7 +85,7 @@ describe("TrashPage", () => { return { archive: {}, pageType: PageType.Loading - } as any; + } as ISearchList; }); jest.spyOn(ArchiveContextWrapper, "default").mockImplementationOnce(() => { diff --git a/starsky/starsky/clientapp/src/router-app/router-app.spec.tsx b/starsky/starsky/clientapp/src/router-app/router-app.spec.tsx index 6a88f8656..6d61f3f8d 100644 --- a/starsky/starsky/clientapp/src/router-app/router-app.spec.tsx +++ b/starsky/starsky/clientapp/src/router-app/router-app.spec.tsx @@ -30,7 +30,7 @@ describe("Router", () => { jest.spyOn(SearchPage, "SearchPage").mockImplementationOnce(() => <>); const searchListMock = jest.spyOn(useSearchList, "default").mockImplementationOnce(() => { - return [{} as ISearchList, () => {}] as any; + return [{} as ISearchList, () => {}] as unknown as ISearchList; }); Router.navigate("search?q=t"); @@ -48,7 +48,7 @@ describe("Router", () => { .spyOn(useSearchList, "default") .mockReset() .mockImplementationOnce(() => { - return [{} as ISearchList, () => {}] as any; + return [{} as ISearchList, () => {}] as unknown as ISearchList; }); jest.spyOn(TrashPage, "TrashPage").mockImplementationOnce(() => { From 30099a4d528067785255f268c13ed94506d9a90e Mon Sep 17 00:00:00 2001 From: Dion Date: Mon, 16 Dec 2024 23:12:46 +0100 Subject: [PATCH 18/30] #1866 lint eslint anys removal --- .../clientapp/src/shared/array-helper.spec.ts | 5 +++- .../clientapp/src/shared/array-helper.ts | 3 +-- .../src/shared/browser-detect.spec.ts | 12 ++++++---- .../clientapp/src/shared/browser-detect.ts | 2 +- .../clientapp/src/shared/bytes-format.spec.ts | 4 ++-- .../clientapp/src/shared/cast-to-interface.ts | 23 +++++++++++-------- 6 files changed, 29 insertions(+), 20 deletions(-) diff --git a/starsky/starsky/clientapp/src/shared/array-helper.spec.ts b/starsky/starsky/clientapp/src/shared/array-helper.spec.ts index 3a1174ea3..735f28b15 100644 --- a/starsky/starsky/clientapp/src/shared/array-helper.spec.ts +++ b/starsky/starsky/clientapp/src/shared/array-helper.spec.ts @@ -4,7 +4,10 @@ describe("ArrayHelper", () => { const arrayHelper = new ArrayHelper(); it("undefined return same output", () => { - const result = arrayHelper.UniqueResults(undefined as any, "test"); + const result = arrayHelper.UniqueResults( + undefined as unknown as string[], + "test" as keyof string + ); expect(result).toBeUndefined(); }); diff --git a/starsky/starsky/clientapp/src/shared/array-helper.ts b/starsky/starsky/clientapp/src/shared/array-helper.ts index 92283d54d..b329027b5 100644 --- a/starsky/starsky/clientapp/src/shared/array-helper.ts +++ b/starsky/starsky/clientapp/src/shared/array-helper.ts @@ -1,7 +1,6 @@ class ArrayHelper { - public UniqueResults(arrayOfObj: any[], key: string): any[] { + public UniqueResults(arrayOfObj: T[], key: keyof T): T[] { if (!arrayOfObj) return arrayOfObj; - // fileIndexItems.filter((v, i, a) => a.findIndex(t => (t.filePath === v.filePath)) === i) // duplicate check return arrayOfObj.filter((item, index, array) => { return array.map((mapItem) => mapItem[key]).indexOf(item[key]) === index; }); diff --git a/starsky/starsky/clientapp/src/shared/browser-detect.spec.ts b/starsky/starsky/clientapp/src/shared/browser-detect.spec.ts index 8bd97f915..10fdf98d6 100644 --- a/starsky/starsky/clientapp/src/shared/browser-detect.spec.ts +++ b/starsky/starsky/clientapp/src/shared/browser-detect.spec.ts @@ -10,8 +10,9 @@ describe("browser-detect", () => { }); it("Fake IE11", () => { - (document.documentElement.style as any)["-ms-scroll-limit"] = true; - (document.documentElement.style as any)["-ms-ime-align"] = true; + const style = document.documentElement.style as unknown as { [key: string]: string }; + style["-ms-scroll-limit"] = "true"; + style["-ms-ime-align"] = "true"; jest.spyOn(navigator, "userAgent", "get").mockImplementationOnce(() => { return "Trident"; @@ -20,7 +21,8 @@ describe("browser-detect", () => { }); it("Fake IsIOS iphone", () => { - (document.documentElement.style as any)["WebkitAppearance"] = true; + const style = document.documentElement.style as unknown as { [key: string]: string }; + style["WebkitAppearance"] = "true"; jest.spyOn(navigator, "userAgent", "get").mockImplementationOnce(() => { return "Safari"; }); @@ -31,7 +33,9 @@ describe("browser-detect", () => { }); it("Fake IsIOS iPad", () => { - (document.documentElement.style as any)["WebkitAppearance"] = true; + const style = document.documentElement.style as unknown as { [key: string]: string }; + style["WebkitAppearance"] = "true"; + document.ontouchend = jest.fn(); Object.defineProperty(navigator, "maxTouchPoints", { diff --git a/starsky/starsky/clientapp/src/shared/browser-detect.ts b/starsky/starsky/clientapp/src/shared/browser-detect.ts index 01d8cdce7..ad17ac546 100644 --- a/starsky/starsky/clientapp/src/shared/browser-detect.ts +++ b/starsky/starsky/clientapp/src/shared/browser-detect.ts @@ -18,7 +18,7 @@ export class BrowserDetect { }; public IsElectronApp = (): boolean => { - if ((window as any).isElectron === true) return true; + if ((window as { isElectron?: boolean }).isElectron === true) return true; return ( navigator.userAgent.indexOf("Electron") > -1 && navigator.userAgent.indexOf("starsky/") > -1 ); diff --git a/starsky/starsky/clientapp/src/shared/bytes-format.spec.ts b/starsky/starsky/clientapp/src/shared/bytes-format.spec.ts index 4fd6f9442..65cdf83fc 100644 --- a/starsky/starsky/clientapp/src/shared/bytes-format.spec.ts +++ b/starsky/starsky/clientapp/src/shared/bytes-format.spec.ts @@ -7,12 +7,12 @@ describe("BytesFormat", () => { }); it("undefined", () => { - const result = BytesFormat(undefined as any); + const result = BytesFormat(undefined as unknown as number); expect(result).toBeFalsy(); }); it("null", () => { - const result = BytesFormat(null as any); + const result = BytesFormat(null as unknown as number); expect(result).toBeFalsy(); }); diff --git a/starsky/starsky/clientapp/src/shared/cast-to-interface.ts b/starsky/starsky/clientapp/src/shared/cast-to-interface.ts index 0baf65a27..a8212b557 100644 --- a/starsky/starsky/clientapp/src/shared/cast-to-interface.ts +++ b/starsky/starsky/clientapp/src/shared/cast-to-interface.ts @@ -1,5 +1,5 @@ import { IArchive, newIArchive } from "../interfaces/IArchive"; -import { newDetailView, PageType } from "../interfaces/IDetailView"; +import { IDetailView, newDetailView, PageType } from "../interfaces/IDetailView"; import { IFileIndexItem } from "../interfaces/IFileIndexItem"; import { IMedia } from "../interfaces/IMedia"; @@ -7,17 +7,18 @@ export class CastToInterface { /** * Plain JS-object to casted object for Archive, Search and Trash pages */ - MediaArchive = (data: any): IMedia<"Archive"> => { + MediaArchive = (data: unknown): IMedia<"Archive"> => { + const castedData = data as IArchive; const media = { type: "Archive" } as IMedia<"Archive">; if ( - data.pageType === PageType.Archive || - data.pageType === PageType.Search || - data.pageType === PageType.Trash + castedData.pageType === PageType.Archive || + castedData.pageType === PageType.Search || + castedData.pageType === PageType.Trash ) { - media.data = data; + media.data = castedData; return media; } // default situation @@ -28,13 +29,15 @@ export class CastToInterface { /** * Plain JS-object to casted object for DetailView pages */ - MediaDetailView = (data: any): IMedia<"DetailView"> => { + MediaDetailView = (data: unknown): IMedia<"DetailView"> => { const media = { type: "DetailView" } as IMedia<"DetailView">; - if (data.pageType === PageType.DetailView) { - media.data = data; + const castedData = data as IDetailView; + + if (castedData.pageType === PageType.DetailView) { + media.data = castedData; return media; } // default situation @@ -45,7 +48,7 @@ export class CastToInterface { /** * Return casted list */ - InfoFileIndexArray = (data: any): Array => { + InfoFileIndexArray = (data: unknown): Array => { if (typeof data === "string") return []; return data as Array; }; From 29caa1570ef0037676760186e20b5e76f248e7a7 Mon Sep 17 00:00:00 2001 From: Dion Date: Tue, 17 Dec 2024 13:57:33 +0100 Subject: [PATCH 19/30] #1866 eslint issues --- .../shared/detect-automatic-rotation.spec.ts | 18 ++++++---- .../clientapp/src/shared/fetch/fetch-xml.ts | 2 +- ...eaflet-modify-empty-image-url-gridlayer.ts | 33 ++++++++++++------- 3 files changed, 33 insertions(+), 20 deletions(-) diff --git a/starsky/starsky/clientapp/src/shared/detect-automatic-rotation.spec.ts b/starsky/starsky/clientapp/src/shared/detect-automatic-rotation.spec.ts index 9fdeec153..36dbc2306 100644 --- a/starsky/starsky/clientapp/src/shared/detect-automatic-rotation.spec.ts +++ b/starsky/starsky/clientapp/src/shared/detect-automatic-rotation.spec.ts @@ -1,6 +1,14 @@ import { BrowserDetect } from "./browser-detect"; import DetectAutomaticRotation, { testAutoOrientationImageURL } from "./detect-automatic-rotation"; +class ImageClass { + constructor() { + setTimeout(() => { + (this as unknown as { onload: () => void }).onload(); // simulate success + }, 1); + } +} + describe("select", () => { describe("removeSidebarSelection", () => { jest.mock("../style/images/detect-automatic-rotation.jpg"); @@ -8,13 +16,9 @@ describe("select", () => { it("returns true if both arguments are null or undefined", async () => { // Fake onLoad Trigger // @see: https://stackoverflow.com/a/59118461 - (global as any).Image = class { - constructor() { - setTimeout(() => { - (this as any).onload(); // simulate success - }, 1); - } - }; + + (global as unknown as { Image: typeof ImageClass }).Image = ImageClass; + expect(testAutoOrientationImageURL).toContain("data:image"); const result = await DetectAutomaticRotation(); diff --git a/starsky/starsky/clientapp/src/shared/fetch/fetch-xml.ts b/starsky/starsky/clientapp/src/shared/fetch/fetch-xml.ts index a2684713f..5d9a75cd6 100644 --- a/starsky/starsky/clientapp/src/shared/fetch/fetch-xml.ts +++ b/starsky/starsky/clientapp/src/shared/fetch/fetch-xml.ts @@ -1,6 +1,6 @@ import { IConnectionDefault } from "../../interfaces/IConnectionDefault"; -function isParseError(parsedDocument: any) { +function isParseError(parsedDocument: Document) { // parser and parsererrorNS could be cached on startup for efficiency const parser = new DOMParser(), errorneousParse = parser.parseFromString("<", "text/xml"), diff --git a/starsky/starsky/clientapp/src/shared/leaflet/leaflet-modify-empty-image-url-gridlayer.ts b/starsky/starsky/clientapp/src/shared/leaflet/leaflet-modify-empty-image-url-gridlayer.ts index 82a7a92e7..2535f0d39 100644 --- a/starsky/starsky/clientapp/src/shared/leaflet/leaflet-modify-empty-image-url-gridlayer.ts +++ b/starsky/starsky/clientapp/src/shared/leaflet/leaflet-modify-empty-image-url-gridlayer.ts @@ -38,7 +38,7 @@ export class LeafletEmptyImageUrlGridLayer extends GridLayer { // Fired when a tile is removed (e.g. when a tile goes off the screen). this.fire("tileunload", { tile: tile.el, - coords: (this as any)._keyToTileCoords(key) + coords: (this as unknown as { _keyToTileCoords: (key: string) => void })._keyToTileCoords(key) }); } @@ -59,10 +59,10 @@ export class LeafletEmptyImageUrlGridLayer extends GridLayer { el: HTMLElement; loaded?: Date | number; retain?: boolean; - getAttribute?: any; + getAttribute?: (name: string) => string | null; } ) { - if (!this._map || tile.getAttribute("src") === "empty-image.gif") { + if (!this._map || (tile.getAttribute && tile.getAttribute("src") === "empty-image.gif")) { return; } // Replace emptyImageUrl @@ -84,13 +84,16 @@ export class LeafletEmptyImageUrlGridLayer extends GridLayer { } tile.loaded = +new Date(); - if ((this._map as any)._fadeAnimated) { + if ((this._map as unknown as { _fadeAnimated: boolean })._fadeAnimated) { L.DomUtil.setOpacity(tile.el, 0); - L.Util.cancelAnimFrame((this as any)._fadeFrame); - (this as any)._fadeFrame = L.Util.requestAnimFrame((this as any)._updateOpacity, this); + L.Util.cancelAnimFrame((this as unknown as { _fadeFrame: number })._fadeFrame); + (this as unknown as { _fadeFrame: number })._fadeFrame = L.Util.requestAnimFrame( + (this as unknown as { _updateOpacity: (timestamp: number) => void })._updateOpacity, + this + ); } else { tile.active = true; - (this as any)._pruneTiles(); + (this as unknown as { _pruneTiles: () => void })._pruneTiles(); } if (!err) { @@ -104,18 +107,24 @@ export class LeafletEmptyImageUrlGridLayer extends GridLayer { }); } - if ((this as any)._noTilesToLoad()) { - (this as any)._loading = false; + if ((this as unknown as { _noTilesToLoad: () => boolean })._noTilesToLoad()) { + (this as unknown as { _loading: boolean })._loading = false; // @event load: Event // Fired when the grid layer loaded all visible tiles. this.fire("load"); - if (L.Browser.ielt9 || !(this as any)._map._fadeAnimated) { - L.Util.requestAnimFrame((this as any)._pruneTiles, this); + if ( + L.Browser.ielt9 || + !(this as unknown as { _map: { _fadeAnimated: boolean } })._map._fadeAnimated + ) { + L.Util.requestAnimFrame((this as unknown as { _pruneTiles: () => void })._pruneTiles, this); } else { // Wait a bit more than 0.2 secs (the duration of the tile fade-in) // to trigger a pruning. - setTimeout(L.Util.bind((this as any)._pruneTiles, this), 250); + setTimeout( + L.Util.bind((this as unknown as { _pruneTiles: () => void })._pruneTiles, this), + 250 + ); } } } From fb33acc48be3d90bca335322b4a6a80ea0e88886 Mon Sep 17 00:00:00 2001 From: Dion Date: Tue, 17 Dec 2024 16:28:27 +0100 Subject: [PATCH 20/30] #1866 eslint fixes & upgrade packages --- starsky/starsky/clientapp/package-lock.json | 153 +++++++++--------- starsky/starsky/clientapp/package.json | 6 +- .../detail-view-sidebar/update-change.ts | 4 +- .../src/shared/clipboard-helper.spec.ts | 14 +- .../clientapp/src/shared/fetch/fetch-post.ts | 5 +- ...eaflet-modify-empty-image-url-tilelayer.ts | 6 +- .../src/shared/sidebar-update.spec.ts | 8 +- 7 files changed, 104 insertions(+), 92 deletions(-) diff --git a/starsky/starsky/clientapp/package-lock.json b/starsky/starsky/clientapp/package-lock.json index 5c6f299d4..285ef5cad 100644 --- a/starsky/starsky/clientapp/package-lock.json +++ b/starsky/starsky/clientapp/package-lock.json @@ -28,8 +28,8 @@ "@types/node": "^20.17.10", "@types/react": "^18.2.55", "@types/react-dom": "^18.2.18", - "@typescript-eslint/eslint-plugin": "^8.18.0", - "@typescript-eslint/parser": "^8.18.0", + "@typescript-eslint/eslint-plugin": "^8.18.1", + "@typescript-eslint/parser": "^8.18.1", "@vitejs/plugin-react": "^4.2.1", "eslint": "^8.57.1", "eslint-config-prettier": "^9.1.0", @@ -49,7 +49,7 @@ "ts-jest": "^29.2.5", "ts-node": "^10.9.2", "typescript": "^5.3.3", - "typescript-eslint": "^8.18.0", + "typescript-eslint": "^8.18.1", "vite": "^5.2.6" } }, @@ -3075,9 +3075,9 @@ "license": "MIT" }, "node_modules/@types/react": { - "version": "18.3.16", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.16.tgz", - "integrity": "sha512-oh8AMIC4Y2ciKufU8hnKgs+ufgbA/dhPTACaZPM86AbwX9QwnFtSoPWEeRUj8fge+v6kFt78BXcDhAU1SrrAsw==", + "version": "18.3.17", + "resolved": "https://registry.npmjs.org/@types/react/-/react-18.3.17.tgz", + "integrity": "sha512-opAQ5no6LqJNo9TqnxBKsgnkIYHozW9KSTlFVoSUJYh1Fl/sswkEoqIugRSm7tbh6pABtYjGAjW+GOS23j8qbw==", "dev": true, "license": "MIT", "dependencies": { @@ -3148,17 +3148,17 @@ "license": "MIT" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.18.0.tgz", - "integrity": "sha512-NR2yS7qUqCL7AIxdJUQf2MKKNDVNaig/dEB0GBLU7D+ZdHgK1NoH/3wsgO3OnPVipn51tG3MAwaODEGil70WEw==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.18.1.tgz", + "integrity": "sha512-Ncvsq5CT3Gvh+uJG0Lwlho6suwDfUXH0HztslDf5I+F2wAFAZMRwYLEorumpKLzmO2suAXZ/td1tBg4NZIi9CQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.18.0", - "@typescript-eslint/type-utils": "8.18.0", - "@typescript-eslint/utils": "8.18.0", - "@typescript-eslint/visitor-keys": "8.18.0", + "@typescript-eslint/scope-manager": "8.18.1", + "@typescript-eslint/type-utils": "8.18.1", + "@typescript-eslint/utils": "8.18.1", + "@typescript-eslint/visitor-keys": "8.18.1", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -3353,16 +3353,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.18.0.tgz", - "integrity": "sha512-hgUZ3kTEpVzKaK3uNibExUYm6SKKOmTU2BOxBSvOYwtJEPdVQ70kZJpPjstlnhCHcuc2WGfSbpKlb/69ttyN5Q==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.18.1.tgz", + "integrity": "sha512-rBnTWHCdbYM2lh7hjyXqxk70wvon3p2FyaniZuey5TrcGBpfhVp0OxOa6gxr9Q9YhZFKyfbEnxc24ZnVbbUkCA==", "dev": true, - "license": "MITClause", + "license": "MIT", "dependencies": { - "@typescript-eslint/scope-manager": "8.18.0", - "@typescript-eslint/types": "8.18.0", - "@typescript-eslint/typescript-estree": "8.18.0", - "@typescript-eslint/visitor-keys": "8.18.0", + "@typescript-eslint/scope-manager": "8.18.1", + "@typescript-eslint/types": "8.18.1", + "@typescript-eslint/typescript-estree": "8.18.1", + "@typescript-eslint/visitor-keys": "8.18.1", "debug": "^4.3.4" }, "engines": { @@ -3378,14 +3378,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.18.0.tgz", - "integrity": "sha512-PNGcHop0jkK2WVYGotk/hxj+UFLhXtGPiGtiaWgVBVP1jhMoMCHlTyJA+hEj4rszoSdLTK3fN4oOatrL0Cp+Xw==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.18.1.tgz", + "integrity": "sha512-HxfHo2b090M5s2+/9Z3gkBhI6xBH8OJCFjH9MhQ+nnoZqxU3wNxkLT+VWXWSFWc3UF3Z+CfPAyqdCTdoXtDPCQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.18.0", - "@typescript-eslint/visitor-keys": "8.18.0" + "@typescript-eslint/types": "8.18.1", + "@typescript-eslint/visitor-keys": "8.18.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3396,14 +3396,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.18.0.tgz", - "integrity": "sha512-er224jRepVAVLnMF2Q7MZJCq5CsdH2oqjP4dT7K6ij09Kyd+R21r7UVJrF0buMVdZS5QRhDzpvzAxHxabQadow==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.18.1.tgz", + "integrity": "sha512-jAhTdK/Qx2NJPNOTxXpMwlOiSymtR2j283TtPqXkKBdH8OAMmhiUfP0kJjc/qSE51Xrq02Gj9NY7MwK+UxVwHQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.18.0", - "@typescript-eslint/utils": "8.18.0", + "@typescript-eslint/typescript-estree": "8.18.1", + "@typescript-eslint/utils": "8.18.1", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -3420,9 +3420,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.0.tgz", - "integrity": "sha512-FNYxgyTCAnFwTrzpBGq+zrnoTO4x0c1CKYY5MuUTzpScqmY5fmsh2o3+57lqdI3NZucBDCzDgdEbIaNfAjAHQA==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.18.1.tgz", + "integrity": "sha512-7uoAUsCj66qdNQNpH2G8MyTFlgerum8ubf21s3TSM3XmKXuIn+H2Sifh/ES2nPOPiYSRJWAk0fDkW0APBWcpfw==", "dev": true, "license": "MIT", "engines": { @@ -3434,14 +3434,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.0.tgz", - "integrity": "sha512-rqQgFRu6yPkauz+ms3nQpohwejS8bvgbPyIDq13cgEDbkXt4LH4OkDMT0/fN1RUtzG8e8AKJyDBoocuQh8qNeg==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.18.1.tgz", + "integrity": "sha512-z8U21WI5txzl2XYOW7i9hJhxoKKNG1kcU4RzyNvKrdZDmbjkmLBo8bgeiOJmA06kizLI76/CCBAAGlTlEeUfyg==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.18.0", - "@typescript-eslint/visitor-keys": "8.18.0", + "@typescript-eslint/types": "8.18.1", + "@typescript-eslint/visitor-keys": "8.18.1", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -3500,16 +3500,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.18.0.tgz", - "integrity": "sha512-p6GLdY383i7h5b0Qrfbix3Vc3+J2k6QWw6UMUeY5JGfm3C5LbZ4QIZzJNoNOfgyRe0uuYKjvVOsO/jD4SJO+xg==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.18.1.tgz", + "integrity": "sha512-8vikiIj2ebrC4WRdcAdDcmnu9Q/MXXwg+STf40BVfT8exDqBCUPdypvzcUPxEqRGKg9ALagZ0UWcYCtn+4W2iQ==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.18.0", - "@typescript-eslint/types": "8.18.0", - "@typescript-eslint/typescript-estree": "8.18.0" + "@typescript-eslint/scope-manager": "8.18.1", + "@typescript-eslint/types": "8.18.1", + "@typescript-eslint/typescript-estree": "8.18.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -3524,13 +3524,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.0.tgz", - "integrity": "sha512-pCh/qEA8Lb1wVIqNvBke8UaRjJ6wrAWkJO5yyIbs8Yx6TNGYyfNjOo61tLv+WwLvoLPp4BQ8B7AHKijl8NGUfw==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.18.1.tgz", + "integrity": "sha512-Vj0WLm5/ZsD013YeUKn+K0y8p1M0jPpxOkKdbD1wB0ns53a5piVY02zjf072TblEweAbcYiFiPoSMF3kp+VhhQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.18.0", + "@typescript-eslint/types": "8.18.1", "eslint-visitor-keys": "^4.2.0" }, "engines": { @@ -4927,13 +4927,13 @@ } }, "node_modules/dunder-proto": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.0.tgz", - "integrity": "sha512-9+Sj30DIu+4KvHqMfLUGLFYL2PkURSYMVXJyXe92nFRvlYq5hBjLEhblKB+vkd/WVlUYMWigiY07T91Fkk0+4A==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/dunder-proto/-/dunder-proto-1.0.1.tgz", + "integrity": "sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==", "dev": true, "license": "MIT", "dependencies": { - "call-bind-apply-helpers": "^1.0.0", + "call-bind-apply-helpers": "^1.0.1", "es-errors": "^1.3.0", "gopd": "^1.2.0" }, @@ -4958,9 +4958,9 @@ } }, "node_modules/electron-to-chromium": { - "version": "1.5.73", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.73.tgz", - "integrity": "sha512-8wGNxG9tAG5KhGd3eeA0o6ixhiNdgr0DcHWm85XPCphwZgD1lIEoi6t3VERayWao7SF7AAZTw6oARGJeVjH8Kg==", + "version": "1.5.74", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.74.tgz", + "integrity": "sha512-ck3//9RC+6oss/1Bh9tiAVFy5vfSKbRHAFh7Z3/eTRkEqJeWgymloShB17Vg3Z4nmDNp35vAd1BZ6CMW4Wt6Iw==", "dev": true, "license": "ISC" }, @@ -6654,14 +6654,15 @@ } }, "node_modules/is-array-buffer": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.4.tgz", - "integrity": "sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==", + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.5.tgz", + "integrity": "sha512-DDfANUiiG2wC1qawP66qlTugJeL5HyzMpfr8lLK+jMQirGzNod0B12cFB/9q838Ru27sBwfw78/rdoU7RERz6A==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1" + "call-bind": "^1.0.8", + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -6817,13 +6818,13 @@ } }, "node_modules/is-finalizationregistry": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.0.tgz", - "integrity": "sha512-qfMdqbAQEwBw78ZyReKnlA8ezmPdb9BemzIIip/JkjaZUhitfXDkkr+3QTboW0JrSXT1QWyYShpvnNHGZ4c4yA==", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/is-finalizationregistry/-/is-finalizationregistry-1.1.1.tgz", + "integrity": "sha512-1pC6N8qWJbWoPtEjgcL2xyhQOP491EQjeUo3qTKcmV8YSDDJrOepfG8pcC7h/QgnQHYSv0mJ3Z/ZWxmatVrysg==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7" + "call-bound": "^1.0.3" }, "engines": { "node": ">= 0.4" @@ -7093,14 +7094,14 @@ } }, "node_modules/is-weakset": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.3.tgz", - "integrity": "sha512-LvIm3/KWzS9oRFHugab7d+M/GcBXuXX5xZkzPmN+NxihdQlZUQ4dWuSV1xR/sq6upL1TJEDrfBgRepHFdBtSNQ==", + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-weakset/-/is-weakset-2.0.4.tgz", + "integrity": "sha512-mfcwb6IzQyOKTs84CQMrOwW4gQcaTOAWJ0zzJCl2WSPDrWk/OzDaImWFH3djXhb24g4eudZfLRozAvPGw4d9hQ==", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.7", - "get-intrinsic": "^1.2.4" + "call-bound": "^1.0.3", + "get-intrinsic": "^1.2.6" }, "engines": { "node": ">= 0.4" @@ -10797,15 +10798,15 @@ } }, "node_modules/typescript-eslint": { - "version": "8.18.0", - "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.18.0.tgz", - "integrity": "sha512-Xq2rRjn6tzVpAyHr3+nmSg1/9k9aIHnJ2iZeOH7cfGOWqTkXTm3kwpQglEuLGdNrYvPF+2gtAs+/KF5rjVo+WQ==", + "version": "8.18.1", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.18.1.tgz", + "integrity": "sha512-Mlaw6yxuaDEPQvb/2Qwu3/TfgeBHy9iTJ3mTwe7OvpPmF6KPQjVOfGyEJpPv6Ez2C34OODChhXrzYw/9phI0MQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/eslint-plugin": "8.18.0", - "@typescript-eslint/parser": "8.18.0", - "@typescript-eslint/utils": "8.18.0" + "@typescript-eslint/eslint-plugin": "8.18.1", + "@typescript-eslint/parser": "8.18.1", + "@typescript-eslint/utils": "8.18.1" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" diff --git a/starsky/starsky/clientapp/package.json b/starsky/starsky/clientapp/package.json index c6b64dd9f..e7b09ea48 100644 --- a/starsky/starsky/clientapp/package.json +++ b/starsky/starsky/clientapp/package.json @@ -44,8 +44,8 @@ "@types/node": "^20.17.10", "@types/react": "^18.2.55", "@types/react-dom": "^18.2.18", - "@typescript-eslint/eslint-plugin": "^8.18.0", - "@typescript-eslint/parser": "^8.18.0", + "@typescript-eslint/eslint-plugin": "^8.18.1", + "@typescript-eslint/parser": "^8.18.1", "@vitejs/plugin-react": "^4.2.1", "eslint": "^8.57.1", "eslint-config-prettier": "^9.1.0", @@ -65,7 +65,7 @@ "ts-jest": "^29.2.5", "ts-node": "^10.9.2", "typescript": "^5.3.3", - "typescript-eslint": "^8.18.0", + "typescript-eslint": "^8.18.1", "vite": "^5.2.6" }, "jest": { diff --git a/starsky/starsky/clientapp/src/components/organisms/detail-view-sidebar/update-change.ts b/starsky/starsky/clientapp/src/components/organisms/detail-view-sidebar/update-change.ts index e06b6aa35..9bba096b3 100644 --- a/starsky/starsky/clientapp/src/components/organisms/detail-view-sidebar/update-change.ts +++ b/starsky/starsky/clientapp/src/components/organisms/detail-view-sidebar/update-change.ts @@ -69,7 +69,9 @@ export class UpdateChange { .toString() .replace(/%00/gi, AsciiNull()); - if (bodyParams === "") return Promise.resolve("no body param"); + if (bodyParams === "") { + return Promise.resolve("no body param"); + } return new Promise((resolve) => { FetchPost(new UrlQuery().UrlUpdateApi(), bodyParams) diff --git a/starsky/starsky/clientapp/src/shared/clipboard-helper.spec.ts b/starsky/starsky/clientapp/src/shared/clipboard-helper.spec.ts index 9714a8dd1..6c5bb63ad 100644 --- a/starsky/starsky/clientapp/src/shared/clipboard-helper.spec.ts +++ b/starsky/starsky/clientapp/src/shared/clipboard-helper.spec.ts @@ -5,10 +5,10 @@ describe("ClipboardHelper", () => { const clipboardHelper = new ClipboardHelper(); const clipBoardName = "starskyClipboardData"; - function refGenerator(text: string): any { + function refGenerator(text: string): React.RefObject { const div = document.createElement("div"); div.innerText = text; - return { current: div } as any; + return { current: div } as React.RefObject; } function getClipboardData(): IClipboardData { @@ -48,7 +48,9 @@ describe("ClipboardHelper", () => { describe("Paste", () => { it("non valid ref", () => { - expect(clipboardHelper.Paste(null as any)).toBeFalsy(); + expect( + clipboardHelper.Paste(null as unknown as (items: [string, string][]) => void) + ).toBeFalsy(); }); it("No clipboard data", () => { @@ -78,7 +80,11 @@ describe("ClipboardHelper", () => { describe("PasteAsync", () => { it("non valid ref", async () => { - expect(await clipboardHelper.PasteAsync(null as any)).toBeFalsy(); + expect( + await clipboardHelper.PasteAsync( + null as unknown as (items: [string, string][]) => Promise + ) + ).toBeFalsy(); }); it("should return false if updateChange returns false", async () => { diff --git a/starsky/starsky/clientapp/src/shared/fetch/fetch-post.ts b/starsky/starsky/clientapp/src/shared/fetch/fetch-post.ts index cf3180201..616a5ba23 100644 --- a/starsky/starsky/clientapp/src/shared/fetch/fetch-post.ts +++ b/starsky/starsky/clientapp/src/shared/fetch/fetch-post.ts @@ -5,7 +5,7 @@ const FetchPost = async ( url: string, body: string | FormData, method: "post" | "delete" = "post", - headers: object = {} + headers: Record = {} ): Promise => { const settings: RequestInit = { method: method, @@ -19,7 +19,8 @@ const FetchPost = async ( }; if (typeof body === "string") { - (settings.headers as any)["Content-Type"] = "application/x-www-form-urlencoded"; + (settings.headers as Record)["Content-Type"] = + "application/x-www-form-urlencoded"; } let res: Response; diff --git a/starsky/starsky/clientapp/src/shared/leaflet/leaflet-modify-empty-image-url-tilelayer.ts b/starsky/starsky/clientapp/src/shared/leaflet/leaflet-modify-empty-image-url-tilelayer.ts index 863c75383..8f13d7eba 100644 --- a/starsky/starsky/clientapp/src/shared/leaflet/leaflet-modify-empty-image-url-tilelayer.ts +++ b/starsky/starsky/clientapp/src/shared/leaflet/leaflet-modify-empty-image-url-tilelayer.ts @@ -21,14 +21,14 @@ export class LeafletEmptyImageUrlTileLayer extends TileLayer { */ public _abortLoading() { let i; - let tile: any; + let tile: HTMLImageElement; for (i in this._tiles) { if (this._tiles[i].coords.z !== this._tileZoom) { - tile = this._tiles[i].el; + tile = this._tiles[i].el as HTMLImageElement; tile.onload = L.Util.falseFn; tile.onerror = L.Util.falseFn; - if (!tile.complete) { + if (!(tile as HTMLImageElement).complete) { tile.src = EmptyImageUrl; // Replace emptyImageUrl L.DomUtil.remove(tile); delete this._tiles[i]; diff --git a/starsky/starsky/clientapp/src/shared/sidebar-update.spec.ts b/starsky/starsky/clientapp/src/shared/sidebar-update.spec.ts index fa2a2f1dc..47344306f 100644 --- a/starsky/starsky/clientapp/src/shared/sidebar-update.spec.ts +++ b/starsky/starsky/clientapp/src/shared/sidebar-update.spec.ts @@ -79,7 +79,9 @@ describe("url-path", () => { describe("Change", () => { it("no field name should return null", () => { const result = sidebarUpdate.Change( - { currentTarget: { textContent: null, dataset: {} } } as any, + { + currentTarget: { textContent: null, dataset: {} } + } as unknown as React.ChangeEvent, {} as ISidebarUpdate ); expect(result).toStrictEqual(null); @@ -89,7 +91,7 @@ describe("url-path", () => { const result = sidebarUpdate.Change( { currentTarget: { textContent: null, dataset: { name: "test" } } - } as any, + } as unknown as React.ChangeEvent, {} as ISidebarUpdate ); expect(result).toStrictEqual({}); @@ -99,7 +101,7 @@ describe("url-path", () => { const result = sidebarUpdate.Change( { currentTarget: { textContent: "test", dataset: { name: "tags" } } - } as any, + } as unknown as React.ChangeEvent, {} as ISidebarUpdate ); expect(result).toStrictEqual({ From 08ec9786e717f85d4fe248bf01efe4bbc3dd3b2d Mon Sep 17 00:00:00 2001 From: Dion Date: Tue, 17 Dec 2024 16:30:13 +0100 Subject: [PATCH 21/30] #1866 format && add clear done --- .../build-tools/clientapp-vite-update.js | 432 +++++++++--------- 1 file changed, 216 insertions(+), 216 deletions(-) diff --git a/starsky-tools/build-tools/clientapp-vite-update.js b/starsky-tools/build-tools/clientapp-vite-update.js index 2dfdfae69..dc9060dba 100644 --- a/starsky-tools/build-tools/clientapp-vite-update.js +++ b/starsky-tools/build-tools/clientapp-vite-update.js @@ -1,204 +1,204 @@ #!/usr/bin/node -const {spawnSync} = require("child_process"); +const { spawnSync } = require("child_process"); const fs = require("fs"); const path = require("path"); -const {exit} = require("process"); +const { exit } = require("process"); const clientAppFolderPath = path.join( - __dirname, - "..", - "..", - "starsky", - "starsky", - "clientapp" + __dirname, + "..", + "..", + "starsky", + "starsky", + "clientapp" ); if (!fs.existsSync(clientAppFolderPath)) { - console.log("FAIL -clientAppFolderPath does not exists"); - exit(1); + console.log("FAIL -clientAppFolderPath does not exists"); + exit(1); } const deleteFolderRecursive = function (path) { - let files = []; - if (fs.existsSync(path)) { - files = fs.readdirSync(path); - files.forEach(function (file, index) { - const curPath = path + "/" + file; - if (fs.lstatSync(curPath).isDirectory()) { - // recurse - deleteFolderRecursive(curPath); - } else { - // delete file - fs.unlinkSync(curPath); - } - }); - fs.rmdirSync(path); - } + let files = []; + if (fs.existsSync(path)) { + files = fs.readdirSync(path); + files.forEach(function (file, index) { + const curPath = path + "/" + file; + if (fs.lstatSync(curPath).isDirectory()) { + // recurse + deleteFolderRecursive(curPath); + } else { + // delete file + fs.unlinkSync(curPath); + } + }); + fs.rmdirSync(path); + } }; const createReactTempFolder = path.join(__dirname, "vite-tmp-folder"); const myAppName = "my-app"; const createReactMyAppFolder = path.join( - __dirname, - "vite-tmp-folder", - myAppName + __dirname, + "vite-tmp-folder", + myAppName ); console.log("npm config set fund false --global"); spawnSync("npm", ["config", "set", "fund", "false", "--global"], { - cwd: clientAppFolderPath, - env: process.env, - encoding: "utf-8", + cwd: clientAppFolderPath, + env: process.env, + encoding: "utf-8", }); function getNpxCreateCreateApp() { - console.log("check " + createReactTempFolder); - if (fs.existsSync(createReactTempFolder)) { - deleteFolderRecursive(createReactTempFolder); - } - fs.mkdirSync(createReactTempFolder); - - if (!fs.existsSync(createReactTempFolder)) { - console.log("FAIL -directory creating failed"); - exit(1); - } - - console.log("--createReactTempFolder"); - console.log(createReactTempFolder); - - // npm create -y vite@latest my-app -- --template react-ts - console.log( - ` npm create -y vite@latest ${myAppName} -- --template react-ts` - ); - - const updateSpawn = spawnSync( - "npm", - ["create", "-y", "vite@latest", myAppName, "--", "--template", "react-ts"], - { - cwd: createReactTempFolder, - env: process.env, - encoding: "utf-8", - } - ); - - console.log("-result of npm create"); - console.log(updateSpawn.stdout); - console.log(updateSpawn.stout ? updateSpawn.stout : ""); - - // run npm install in my-app folder - const createReactTempFolderMyApp = path.join(createReactTempFolder, myAppName); - const npmInstallMyAppSpawn = spawnSync( - "npm", - ["install"], - { - cwd: createReactTempFolderMyApp, - env: process.env, - encoding: "utf-8", - } - ); - - console.log("-result of npm install in my-app folder"); - console.log(npmInstallMyAppSpawn.stdout); - console.log(npmInstallMyAppSpawn.stout ? npmInstallMyAppSpawn.stout : ""); + console.log("check " + createReactTempFolder); + if (fs.existsSync(createReactTempFolder)) { + deleteFolderRecursive(createReactTempFolder); + } + fs.mkdirSync(createReactTempFolder); + + if (!fs.existsSync(createReactTempFolder)) { + console.log("FAIL -directory creating failed"); + exit(1); + } + + console.log("--createReactTempFolder"); + console.log(createReactTempFolder); + + // npm create -y vite@latest my-app -- --template react-ts + console.log( + ` npm create -y vite@latest ${myAppName} -- --template react-ts` + ); + + const updateSpawn = spawnSync( + "npm", + ["create", "-y", "vite@latest", myAppName, "--", "--template", "react-ts"], + { + cwd: createReactTempFolder, + env: process.env, + encoding: "utf-8", + } + ); + + console.log("-result of npm create"); + console.log(updateSpawn.stdout); + console.log(updateSpawn.stout ? updateSpawn.stout : ""); + + // run npm install in my-app folder + const createReactTempFolderMyApp = path.join(createReactTempFolder, myAppName); + const npmInstallMyAppSpawn = spawnSync( + "npm", + ["install"], + { + cwd: createReactTempFolderMyApp, + env: process.env, + encoding: "utf-8", + } + ); + + console.log("-result of npm install in my-app folder"); + console.log(npmInstallMyAppSpawn.stdout); + console.log(npmInstallMyAppSpawn.stout ? npmInstallMyAppSpawn.stout : ""); } if (process.env.DEBUG !== "true") { - getNpxCreateCreateApp(); + getNpxCreateCreateApp(); } if ( - !fs.existsSync(path.join(createReactMyAppFolder, "package.json")) || - !fs.existsSync(path.join(createReactMyAppFolder, "package-lock.json")) + !fs.existsSync(path.join(createReactMyAppFolder, "package.json")) || + !fs.existsSync(path.join(createReactMyAppFolder, "package-lock.json")) ) { - console.log("FAIL --- should include package json files"); - exit(1); + console.log("FAIL --- should include package json files"); + exit(1); } if (fs.existsSync(path.join(clientAppFolderPath, "node_modules"))) { - deleteFolderRecursive(path.join(clientAppFolderPath, "node_modules")); + deleteFolderRecursive(path.join(clientAppFolderPath, "node_modules")); } const myAppPackageJson = JSON.parse( - fs - .readFileSync(path.join(createReactMyAppFolder, "package.json")) - .toString() + fs + .readFileSync(path.join(createReactMyAppFolder, "package.json")) + .toString() ); const myAppPackageLockJson = JSON.parse( - fs - .readFileSync(path.join(createReactMyAppFolder, "package-lock.json")) - .toString() + fs + .readFileSync(path.join(createReactMyAppFolder, "package-lock.json")) + .toString() ); // backup first let toClientAppPackageJson = JSON.parse( - fs.readFileSync(path.join(clientAppFolderPath, "package.json")).toString() + fs.readFileSync(path.join(clientAppFolderPath, "package.json")).toString() ); fs.writeFileSync( - path.join(clientAppFolderPath, "package.json.bak"), - JSON.stringify(toClientAppPackageJson, null, 2) + path.join(clientAppFolderPath, "package.json.bak"), + JSON.stringify(toClientAppPackageJson, null, 2) ); // overwrite fs.writeFileSync( - path.join(clientAppFolderPath, "package.json"), - JSON.stringify(myAppPackageJson, null, 2) + path.join(clientAppFolderPath, "package.json"), + JSON.stringify(myAppPackageJson, null, 2) ); fs.writeFileSync( - path.join(clientAppFolderPath, "package-lock.json"), - JSON.stringify(myAppPackageLockJson, null, 2) + path.join(clientAppFolderPath, "package-lock.json"), + JSON.stringify(myAppPackageLockJson, null, 2) ); // npm ci function npmCi() { - console.log( - "run > npm ci --no-audit --legacy-peer-deps | in: " + - clientAppFolderPath - ); - const npmCiOne = spawnSync( - "npm", - ["ci", "--no-audit", "--legacy-peer-deps"], - { - cwd: clientAppFolderPath, - env: process.env, - encoding: "utf-8", - } - ); - - console.log("-result of npmCiOne"); - console.log(npmCiOne.stdout); - console.log(npmCiOne.stout ? updateSpawn.stout : ""); + console.log( + "run > npm ci --no-audit --legacy-peer-deps | in: " + + clientAppFolderPath + ); + const npmCiOne = spawnSync( + "npm", + ["ci", "--no-audit", "--legacy-peer-deps"], + { + cwd: clientAppFolderPath, + env: process.env, + encoding: "utf-8", + } + ); + + console.log("-result of npmCiOne"); + console.log(npmCiOne.stdout); + console.log(npmCiOne.stout ? updateSpawn.stout : ""); } npmCi(); function npmUnInstall(packageName) { - console.log(`run > npm uninstall ${packageName} --save --legacy-peer-deps`); - const uninstall = spawnSync( - "npm", - [ - "uninstall", - packageName, - "--no-audit", - "--save", - "--legacy-peer-deps", - "--no-fund", - ], - { - cwd: clientAppFolderPath, - env: process.env, - encoding: "utf-8", - } - ); - - console.log("-result of package"); - console.log(uninstall.stdout); - console.log(uninstall.stout ? updateSpawn.stout : ""); - if (uninstall.status !== 0) { - console.log(uninstall.stderr); - console.log("no exit yet; FAIL - npm install " + packageName); - } + console.log(`run > npm uninstall ${packageName} --save --legacy-peer-deps`); + const uninstall = spawnSync( + "npm", + [ + "uninstall", + packageName, + "--no-audit", + "--save", + "--legacy-peer-deps", + "--no-fund", + ], + { + cwd: clientAppFolderPath, + env: process.env, + encoding: "utf-8", + } + ); + + console.log("-result of package"); + console.log(uninstall.stdout); + console.log(uninstall.stout ? updateSpawn.stout : ""); + if (uninstall.status !== 0) { + console.log(uninstall.stderr); + console.log("no exit yet; FAIL - npm install " + packageName); + } } // npmUnInstall can be done here @@ -206,53 +206,53 @@ function npmUnInstall(packageName) { // update packages in clientapp package json console.log("next: overwrite package json file"); toClientAppPackageJson.dependencies = { - ...toClientAppPackageJson.dependencies, - ...myAppPackageJson.dependencies, + ...toClientAppPackageJson.dependencies, + ...myAppPackageJson.dependencies, }; fs.writeFileSync( - path.join(clientAppFolderPath, "package.json"), - JSON.stringify(toClientAppPackageJson, null, 2) + path.join(clientAppFolderPath, "package.json"), + JSON.stringify(toClientAppPackageJson, null, 2) ); fs.rmSync(path.join(clientAppFolderPath, "package.json.bak")); function npmInstall(packageName, force, dev) { - let forceText = ""; - if (force) { - forceText = "--force"; - } - let saveText = "--save"; - if (dev) { - saveText = "--save-dev"; - } - console.log( - "npm" + - " " + - "install --no-audit" + - " " + - packageName + - " " + - saveText + - " " + - forceText - ); - const npmInstallSpawn = spawnSync( - "npm", - ["install", "--no-audit", packageName, saveText, forceText], - { - cwd: clientAppFolderPath, - env: process.env, - encoding: "utf-8", - } - ); - - console.log("-result of " + packageName); - console.log(npmInstallSpawn.stdout); - console.log(npmInstallSpawn.stout ? updateSpawn.stout : ""); - if (npmInstallSpawn.status !== 0) { - console.log(npmInstallSpawn.stderr); - console.log("FAIL - npm install " + packageName); - exit(npmInstallSpawn.status); - } + let forceText = ""; + if (force) { + forceText = "--force"; + } + let saveText = "--save"; + if (dev) { + saveText = "--save-dev"; + } + console.log( + "npm" + + " " + + "install --no-audit" + + " " + + packageName + + " " + + saveText + + " " + + forceText + ); + const npmInstallSpawn = spawnSync( + "npm", + ["install", "--no-audit", packageName, saveText, forceText], + { + cwd: clientAppFolderPath, + env: process.env, + encoding: "utf-8", + } + ); + + console.log("-result of " + packageName); + console.log(npmInstallSpawn.stdout); + console.log(npmInstallSpawn.stout ? updateSpawn.stout : ""); + if (npmInstallSpawn.status !== 0) { + console.log(npmInstallSpawn.stderr); + console.log("FAIL - npm install " + packageName); + exit(npmInstallSpawn.status); + } } // uninstall not needed at the moment @@ -305,77 +305,77 @@ npmInstall('@testing-library/react', false, true); console.log("npm install result:"); const npmInstallSpawnResult = spawnSync( - "npm", - [ - "install" - ], - { - cwd: clientAppFolderPath, - env: process.env, - encoding: "utf-8", - } + "npm", + [ + "install" + ], + { + cwd: clientAppFolderPath, + env: process.env, + encoding: "utf-8", + } ); console.log(npmInstallSpawnResult.stdout); if (npmInstallSpawnResult.status !== 0) { - console.log(npmInstallSpawnResult.stderr); - console.log("FAIL - npm install"); - exit(npmInstallSpawnResult.status); + console.log(npmInstallSpawnResult.stderr); + console.log("FAIL - npm install"); + exit(npmInstallSpawnResult.status); } // clean afterwards if (process.env.DEBUG !== "true") { - console.log("when exists rm " + createReactTempFolder); - if (fs.existsSync(createReactTempFolder)) { - deleteFolderRecursive(createReactTempFolder); - } + console.log("when exists rm " + createReactTempFolder); + if (fs.existsSync(createReactTempFolder)) { + deleteFolderRecursive(createReactTempFolder); + } } // run linter (and fix issues) console.log("next: run linter"); const lintSpawn = spawnSync("npm", ["run", "lint:fix"], { - cwd: clientAppFolderPath, - env: process.env, - encoding: "utf-8", + cwd: clientAppFolderPath, + env: process.env, + encoding: "utf-8", }); console.log(lintSpawn.stdout); if (lintSpawn.status !== 0) { - console.log(lintSpawn.stderr); - console.log("FAIL -lint project"); - exit(lintSpawn.status); + console.log(lintSpawn.stderr); + console.log("FAIL -lint project"); + exit(lintSpawn.status); } console.log("next: build project"); const buildSpawn = spawnSync("npm", ["run", "build"], { - cwd: clientAppFolderPath, - env: process.env, - encoding: "utf-8", + cwd: clientAppFolderPath, + env: process.env, + encoding: "utf-8", }); console.log(buildSpawn.stdout); if (buildSpawn.status !== 0) { - console.log(buildSpawn.stderr); - console.log("FAIL -build project"); - exit(buildSpawn.status); + console.log(buildSpawn.stderr); + console.log("FAIL -build project"); + exit(buildSpawn.status); } console.log("next: test project"); const testSpawn = spawnSync("npm", ["run", "test:ci"], { - cwd: clientAppFolderPath, - env: process.env, - encoding: "utf-8", + cwd: clientAppFolderPath, + env: process.env, + encoding: "utf-8", }); console.log(testSpawn.stdout); if (testSpawn.status !== 0) { - console.log(testSpawn.stderr); - console.log("FAIL -test project"); - exit(testSpawn.status); + console.log(testSpawn.stderr); + console.log("FAIL -test project"); + exit(testSpawn.status); } -console.log("done"); +console.log("🎉 Done Update - End of file"); From 74f8d3dc39911d1bb8b32e3315ac5151c26ccd12 Mon Sep 17 00:00:00 2001 From: Dion Date: Tue, 17 Dec 2024 16:49:54 +0100 Subject: [PATCH 22/30] #1866 sonarcloud --- .../organisms/detail-view-media/detail-view-gpx.tsx | 2 +- .../clientapp/src/hooks/use-capture-position.ts | 12 ++++++------ .../leaflet-modify-empty-image-url-tilelayer.ts | 2 +- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/starsky/starsky/clientapp/src/components/organisms/detail-view-media/detail-view-gpx.tsx b/starsky/starsky/clientapp/src/components/organisms/detail-view-media/detail-view-gpx.tsx index 3eb1e258c..8b3cfdee5 100644 --- a/starsky/starsky/clientapp/src/components/organisms/detail-view-media/detail-view-gpx.tsx +++ b/starsky/starsky/clientapp/src/components/organisms/detail-view-media/detail-view-gpx.tsx @@ -32,7 +32,7 @@ const DetailViewGpx: React.FC = () => { mapReference.current.innerHTML = ""; const container = L.DomUtil.get(mapReference.current); if (container != null) { - (container as HTMLElement as unknown as { _leaflet_id: null })._leaflet_id = null; + (container as unknown as { _leaflet_id: null })._leaflet_id = null; } const tracks: [number, number][] = []; diff --git a/starsky/starsky/clientapp/src/hooks/use-capture-position.ts b/starsky/starsky/clientapp/src/hooks/use-capture-position.ts index a051a9d41..e31cfe85c 100644 --- a/starsky/starsky/clientapp/src/hooks/use-capture-position.ts +++ b/starsky/starsky/clientapp/src/hooks/use-capture-position.ts @@ -9,14 +9,14 @@ const capturePosition = () => { const topCachedPosition = window.scrollY; return { freeze: () => { - (document.body as HTMLElement).style.position = "fixed"; - (document.body as HTMLElement).style.top = `${topCachedPosition * -1}px`; - (document.body as HTMLElement).style.width = "100%"; + document.body.style.position = "fixed"; + document.body.style.top = `${topCachedPosition * -1}px`; + document.body.style.width = "100%"; }, unfreeze: () => { - (document.body as HTMLElement).style.position = "initial"; - (document.body as HTMLElement).style.top = "initial"; - (document.body as HTMLElement).style.width = "initial"; + document.body.style.position = "initial"; + document.body.style.top = "initial"; + document.body.style.width = "initial"; window.scrollTo(0, topCachedPosition); } } as ICaptionPosition; diff --git a/starsky/starsky/clientapp/src/shared/leaflet/leaflet-modify-empty-image-url-tilelayer.ts b/starsky/starsky/clientapp/src/shared/leaflet/leaflet-modify-empty-image-url-tilelayer.ts index 8f13d7eba..f0143a33e 100644 --- a/starsky/starsky/clientapp/src/shared/leaflet/leaflet-modify-empty-image-url-tilelayer.ts +++ b/starsky/starsky/clientapp/src/shared/leaflet/leaflet-modify-empty-image-url-tilelayer.ts @@ -28,7 +28,7 @@ export class LeafletEmptyImageUrlTileLayer extends TileLayer { tile.onload = L.Util.falseFn; tile.onerror = L.Util.falseFn; - if (!(tile as HTMLImageElement).complete) { + if (!tile.complete) { tile.src = EmptyImageUrl; // Replace emptyImageUrl L.DomUtil.remove(tile); delete this._tiles[i]; From 90783db2d78b42fe4784da495cf1d3c384f524c8 Mon Sep 17 00:00:00 2001 From: Dion Date: Tue, 17 Dec 2024 17:06:52 +0100 Subject: [PATCH 23/30] #1866 add data test --- .../src/components/atoms/file-hash-image/pan-and-zoom-image.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/starsky/starsky/clientapp/src/components/atoms/file-hash-image/pan-and-zoom-image.tsx b/starsky/starsky/clientapp/src/components/atoms/file-hash-image/pan-and-zoom-image.tsx index bea8d57ac..124079558 100644 --- a/starsky/starsky/clientapp/src/components/atoms/file-hash-image/pan-and-zoom-image.tsx +++ b/starsky/starsky/clientapp/src/components/atoms/file-hash-image/pan-and-zoom-image.tsx @@ -129,6 +129,7 @@ const PanAndZoomImage = ({ src, id, ...props }: IPanAndZoomImage) => { } >
Date: Tue, 17 Dec 2024 17:31:03 +0100 Subject: [PATCH 24/30] #1866 arrow --- .../atoms/file-hash-image/on-move-mouse-touch-action.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/starsky/starsky/clientapp/src/components/atoms/file-hash-image/on-move-mouse-touch-action.ts b/starsky/starsky/clientapp/src/components/atoms/file-hash-image/on-move-mouse-touch-action.ts index bcdc91891..0f3975f54 100644 --- a/starsky/starsky/clientapp/src/components/atoms/file-hash-image/on-move-mouse-touch-action.ts +++ b/starsky/starsky/clientapp/src/components/atoms/file-hash-image/on-move-mouse-touch-action.ts @@ -18,12 +18,12 @@ export class OnMoveMouseTouchAction { this.move = this.move.bind(this); } - public touchMove = (e: TouchEvent) => { + public touchMove(e: TouchEvent) { if (!e.touches) return; const clientX = e.touches[0].clientX; const clientY = e.touches[0].clientY; this.move(clientX, clientY); - }; + } public mousemove = (event: MouseEvent) => { this.move(event.clientX, event.clientY); From 2f43ab703987b26fa3d8621920d7c7f3a798b363 Mon Sep 17 00:00:00 2001 From: Dion Date: Tue, 17 Dec 2024 17:33:57 +0100 Subject: [PATCH 25/30] #1866 add tests --- .../pan-and-zoom-image.spec.tsx | 96 ++++++++++++++++++- 1 file changed, 95 insertions(+), 1 deletion(-) diff --git a/starsky/starsky/clientapp/src/components/atoms/file-hash-image/pan-and-zoom-image.spec.tsx b/starsky/starsky/clientapp/src/components/atoms/file-hash-image/pan-and-zoom-image.spec.tsx index bd468af3b..95b2bd4b2 100644 --- a/starsky/starsky/clientapp/src/components/atoms/file-hash-image/pan-and-zoom-image.spec.tsx +++ b/starsky/starsky/clientapp/src/components/atoms/file-hash-image/pan-and-zoom-image.spec.tsx @@ -1,5 +1,5 @@ import { createEvent, fireEvent, render, screen } from "@testing-library/react"; -import { act } from "react"; +import React, { act } from "react"; import { Orientation } from "../../../interfaces/IFileIndexItem"; import { OnMoveMouseTouchAction } from "./on-move-mouse-touch-action"; import { OnWheelMouseAction } from "./on-wheel-mouse-action"; @@ -298,5 +298,99 @@ describe("PanAndZoomImage", () => { component.unmount(); }); + + it("should call setIsLoading with false when image is not loaded", () => { + const setIsLoadingMock = jest.fn(); + + // Mock the querySelector to return an image element that is not loaded + const containerRefMock = { + current: { + querySelector: jest.fn().mockReturnValue({ + complete: true, + naturalHeight: 0 + }) + } + }; + + jest.spyOn(React, "useRef").mockReturnValueOnce(containerRefMock); + + render( + + ); + + // Verify that setIsLoading was called with true + expect(setIsLoadingMock).toHaveBeenCalledWith(true); + }); + + it("should call setIsLoading with true when image is not loaded", () => { + const setIsLoadingMock = jest.fn(); + + // Mock the querySelector to return an image element that is not loaded + const containerRefMock = { + current: { + querySelector: jest.fn().mockReturnValue({ + complete: false, + naturalHeight: 0 + }) + } + }; + + jest.spyOn(React, "useRef").mockReturnValueOnce(containerRefMock); + + render( + + ); + + // Verify that setIsLoading was called with true + expect(setIsLoadingMock).toHaveBeenCalledWith(true); + }); + + it("should call touchMove on touch move event", async () => { + const spyOn = jest + .spyOn(OnMoveMouseTouchAction.prototype, "touchMove") + .mockImplementationOnce(() => {}); + + const component = render( + + ); + + const touchEvent = new TouchEvent("touchmove", { + touches: [ + { + identifier: 1, + target: component.container, + clientX: 500, + clientY: 500 + } as unknown as Touch + ] + }); + + window?.dispatchEvent(touchEvent); + + expect(spyOn).toHaveBeenCalled(); + + component.unmount(); + }); }); }); From 9c45d89d30aa56cf799bf005f1c68b1adc23ffa6 Mon Sep 17 00:00:00 2001 From: Dion Date: Tue, 17 Dec 2024 18:49:43 +0100 Subject: [PATCH 26/30] #1866 add tests --- .../hooks/use-gestures/use-gestures.spec.tsx | 52 ++++++++++++++++++- .../src/hooks/use-gestures/use-gestures.ts | 2 +- 2 files changed, 51 insertions(+), 3 deletions(-) diff --git a/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.spec.tsx b/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.spec.tsx index 57b016aa4..addbef495 100644 --- a/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.spec.tsx +++ b/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.spec.tsx @@ -1,4 +1,4 @@ -import { createEvent, fireEvent, render } from "@testing-library/react"; +import { createEvent, fireEvent, render, renderHook } from "@testing-library/react"; import React, { act, useRef, useState } from "react"; import { mountReactHook } from "../___tests___/test-hook"; import * as callHandler from "./call-handler"; @@ -6,8 +6,9 @@ import * as debounce from "./debounce"; import * as getCurrentTouchesAll from "./get-current-touches"; import { getCurrentTouches } from "./get-current-touches"; import { ICurrentTouches } from "./ICurrentTouches.types"; +import { IHandlers } from "./IHandlers.types"; import { Pointer } from "./pointer"; -import { getAngleDeg, getDistance, useGestures } from "./use-gestures"; +import { executeTouchMove, getAngleDeg, getDistance, useGestures } from "./use-gestures"; function Rotate() { const [imageRotation, setImageRotation] = useState(0); @@ -569,4 +570,51 @@ describe("useGestures", () => { component.unmount(); }); }); + + it("should call callHandler and setGesture with the correct arguments", () => { + executeTouchMove( + {} as globalThis.TouchEvent, + {} as ICurrentTouches, + {} as IHandlers, + { minDelta: 1 }, + {} as ICurrentTouches, + jest.fn() + ); + }); + + it("should correctly destructure args array", () => { + // const mockEventName = "touchstart"; + // // const mockTouches: ICurrentTouches = { + // // x: 100, + // // y: 100 + // // }; + // const mockGesture = "swipe"; + + // const args: [string, ICurrentTouches, string] = [mockEventName, mockTouches, mockGesture]; + + jest + .spyOn(React, "useState") + .mockReset() + .mockImplementationOnce(() => [{ pointers: ["a"] }, jest.fn()]) + .mockImplementationOnce(() => ["gesture1", jest.fn()]); + + const result = renderHook(() => { + const inputFormControlReference = useRef(null); + return [
, inputFormControlReference]; + }); + + const reference = result.result.current[1] as React.RefObject; + + const result1 = renderHook(() => useGestures(reference, { onPanStart: jest.fn() })); + + console.log(result1.result.current); + + // Call the function that contains the destructuring + // const [eventNameScoped, , theGestureScoped] = args; + + // Verify that the variables are correctly assigned + // expect(eventNameScoped).toBe(mockEventName); + // expect(touchesScoped).toBe(mockTouches); + // expect(theGestureScoped).toBe(mockGesture); + }); }); diff --git a/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.ts b/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.ts index 3179f5718..3aab1c6a6 100644 --- a/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.ts +++ b/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.ts @@ -47,7 +47,7 @@ const executeTouchStart = ( } }; -const executeTouchMove = ( +export const executeTouchMove = ( event: globalThis.TouchEvent, currentTouches: ICurrentTouches, handlers: IHandlers, From 3420931e13f205c4c251c8e054597a4f4d357ea6 Mon Sep 17 00:00:00 2001 From: Dion Date: Tue, 17 Dec 2024 18:50:58 +0100 Subject: [PATCH 27/30] #1866 return --- starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.ts b/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.ts index 3aab1c6a6..e5bae5ccb 100644 --- a/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.ts +++ b/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.ts @@ -105,6 +105,7 @@ export const executeTouchMove = ( setGesture(theGestureScoped); }, 100)(eventName, touches, theGesture); } + return theGesture; }; const executeTouchEnd = ( From 99b438d9f8f3d7c545186e1d20d38d4a863730c2 Mon Sep 17 00:00:00 2001 From: Dion Date: Tue, 17 Dec 2024 18:53:45 +0100 Subject: [PATCH 28/30] #1866 return type --- .../starsky/clientapp/src/hooks/use-gestures/use-gestures.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.ts b/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.ts index e5bae5ccb..2d10181b8 100644 --- a/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.ts +++ b/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.ts @@ -54,7 +54,7 @@ export const executeTouchMove = ( options: { minDelta: number }, touches: ICurrentTouches, setGesture: Dispatch> -) => { +): string | undefined => { if (event.touches.length === 2) { callHandler("onPinchChanged", currentTouches, handlers); return; From 62b3f20b83b93418a64b5a72c3c02f3906147ea0 Mon Sep 17 00:00:00 2001 From: Dion Date: Tue, 17 Dec 2024 19:11:18 +0100 Subject: [PATCH 29/30] #1866 add theory --- .../hooks/use-gestures/use-gestures.spec.tsx | 116 ++++++++++++------ 1 file changed, 77 insertions(+), 39 deletions(-) diff --git a/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.spec.tsx b/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.spec.tsx index addbef495..5080375b0 100644 --- a/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.spec.tsx +++ b/starsky/starsky/clientapp/src/hooks/use-gestures/use-gestures.spec.tsx @@ -1,4 +1,4 @@ -import { createEvent, fireEvent, render, renderHook } from "@testing-library/react"; +import { createEvent, fireEvent, render } from "@testing-library/react"; import React, { act, useRef, useState } from "react"; import { mountReactHook } from "../___tests___/test-hook"; import * as callHandler from "./call-handler"; @@ -571,50 +571,88 @@ describe("useGestures", () => { }); }); - it("should call callHandler and setGesture with the correct arguments", () => { - executeTouchMove( - {} as globalThis.TouchEvent, - {} as ICurrentTouches, + it("executeTouchMove returns emthy string", () => { + const result = executeTouchMove( + { touches: [] } as unknown as globalThis.TouchEvent, + { + x: 1, + y: 1, + deltaX: 1, + deltaY: 1 + } as ICurrentTouches, {} as IHandlers, - { minDelta: 1 }, + { minDelta: 0 }, {} as ICurrentTouches, jest.fn() ); - }); - - it("should correctly destructure args array", () => { - // const mockEventName = "touchstart"; - // // const mockTouches: ICurrentTouches = { - // // x: 100, - // // y: 100 - // // }; - // const mockGesture = "swipe"; - - // const args: [string, ICurrentTouches, string] = [mockEventName, mockTouches, mockGesture]; - - jest - .spyOn(React, "useState") - .mockReset() - .mockImplementationOnce(() => [{ pointers: ["a"] }, jest.fn()]) - .mockImplementationOnce(() => ["gesture1", jest.fn()]); - - const result = renderHook(() => { - const inputFormControlReference = useRef(null); - return [
, inputFormControlReference]; - }); - - const reference = result.result.current[1] as React.RefObject; - const result1 = renderHook(() => useGestures(reference, { onPanStart: jest.fn() })); - - console.log(result1.result.current); + expect(result).toBe(""); + }); - // Call the function that contains the destructuring - // const [eventNameScoped, , theGestureScoped] = args; + describe("executeTouchMove", () => { + const testCases = [ + { + description: "swipeRight", + currentTouches: { x: 150, y: 150, deltaX: 1000, deltaY: 5 }, + options: { minDelta: 10 }, + expectedGesture: "swipeRight" + }, + { + description: "swipeUp", + currentTouches: { x: 150, y: 150, deltaX: 5, deltaY: -1000 }, + options: { minDelta: 10 }, + expectedGesture: "swipeUp" + }, + { + description: "swipeDown", + currentTouches: { x: 150, y: 150, deltaX: 5, deltaY: 1000 }, + options: { minDelta: 10 }, + expectedGesture: "swipeDown" + }, + { + description: "swipeLeft", + currentTouches: { x: 150, y: 150, deltaX: -1000, deltaY: 5 }, + options: { minDelta: 10 }, + expectedGesture: "swipeLeft" + } + ]; + + test.each(testCases)( + "should detect $description gesture", + ({ currentTouches, options, expectedGesture }) => { + jest.spyOn(debounce, "debounce").mockImplementationOnce((arg) => { + arg("onSwipe", {}, expectedGesture); + return jest.fn(); + }); - // Verify that the variables are correctly assigned - // expect(eventNameScoped).toBe(mockEventName); - // expect(touchesScoped).toBe(mockTouches); - // expect(theGestureScoped).toBe(mockGesture); + const callHandlerSpy = jest + .spyOn(callHandler, "callHandler") + .mockImplementationOnce(() => {}); + + const mockTouchEvent = { touches: [] } as unknown as globalThis.TouchEvent; + const handlers: IHandlers = {}; + const previousTouches: ICurrentTouches = {} as ICurrentTouches; + const callback = jest.fn(); + + const result = executeTouchMove( + mockTouchEvent, + currentTouches as ICurrentTouches, + handlers, + options, + previousTouches, + callback + ); + + // Verify that the condition is hit + expect( + Math.abs(currentTouches.deltaX) >= options.minDelta || + Math.abs(currentTouches.deltaY) >= options.minDelta + ).toBe(true); + + // Verify that the callback is called with the expected gesture + expect(callHandlerSpy).toHaveBeenCalled(); + expect(result).toBe(expectedGesture); + } + ); }); }); From a5ec7419d4ac4c8a77adbfd963e691d58844a13e Mon Sep 17 00:00:00 2001 From: Dion Date: Tue, 17 Dec 2024 19:19:31 +0100 Subject: [PATCH 30/30] #1866 changelog --- history.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/history.md b/history.md index 393f0da35..2e29de729 100644 --- a/history.md +++ b/history.md @@ -48,7 +48,8 @@ Semantic Versioning 2.0.0 is from version 0.1.6+ - [x] (Changed) _Back-end_ Small readablity fixes to avoid code smells (PR #1844) - [x] (Changed) _Back-end_ Filename checks for extensions (PR #1849) - [x] (Changed) _Back-end_ Improve tests for port mapper (PR #1850) - +- [x] (Fixed) _Front-end_ Eslint update and remove of any (PR #1866) + ## version 0.6.3 - 2024-11-14 {#v0.6.3} - [x] (Fixed) _Front-end_ OkAndSame status in Upload Modal gives the wrong status (PR #1783)