From c44971842dc1983218f2e98d71ce13b37b3cf172 Mon Sep 17 00:00:00 2001 From: Kim Jeong-won Date: Tue, 11 Jun 2024 23:14:37 +0900 Subject: [PATCH 1/8] refact: migrate Canvas to runes --- package-lock.json | 758 ++++++++++-------- package.json | 14 +- src/lib/canvas/Canvas.svelte | 20 +- src/lib/canvas/elements/Circle.svelte | 34 +- src/lib/canvas/elements/Clip.svelte | 11 +- src/lib/canvas/elements/Crop.svelte | 25 +- src/lib/canvas/elements/Ellipse.svelte | 45 +- src/lib/canvas/elements/HitRegion.svelte | 61 +- src/lib/canvas/elements/Line.svelte | 23 +- src/lib/canvas/elements/Rectangle.svelte | 33 +- src/lib/canvas/elements/Text.svelte | 59 +- .../guitar/finger-board/FingerBoard.svelte | 12 +- .../FingerBoardPoisitionIndicator.svelte | 5 +- 13 files changed, 637 insertions(+), 463 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7edb7db..70150e3 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,26 +19,26 @@ "@sveltejs/adapter-static": "^3.0.1", "@sveltejs/kit": "^2.5.0", "@sveltejs/vite-plugin-svelte": "^3.0.1", - "@types/eslint": "8.56.0", - "@typescript-eslint/eslint-plugin": "^6.0.0", - "@typescript-eslint/parser": "^6.0.0", + "@types/eslint": "^8.56.7", "@vite-pwa/assets-generator": "^0.2.3", "@vite-pwa/sveltekit": "^0.3.0", "autoprefixer": "^10.4.17", "daisyui": "^4.7.1", - "eslint": "^8.56.0", + "eslint": "^9.0.0", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-svelte": "^2.36.0-next.4", + "eslint-plugin-svelte": "^2.36.0", + "globals": "^15.0.0", "postcss": "^8.4.35", "prettier": "^3.2.5", "prettier-plugin-svelte": "^3.1.2", "prettier-plugin-tailwindcss": "^0.5.11", "sass": "^1.70.0", - "svelte": "^4.2.8", + "svelte": "^5.0.0-next.152", "svelte-check": "^3.6.3", "tailwindcss": "^3.4.1", "tslib": "^2.4.1", "typescript": "^5.3.3", + "typescript-eslint": "^8.0.0-alpha.20", "vite": "^5.0.11", "vite-plugin-pwa": "^0.17.4", "vitest": "^1.2.2" @@ -2364,44 +2364,38 @@ "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "node_modules/@eslint/config-array": { + "version": "0.15.1", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.15.1.tgz", + "integrity": "sha512-K4gzNq+yymn/EVsXYmf+SBcBro8MTf+aXJZUphM96CdzUEr+ClGDvAbpmaEK+cGVigVXIgs9gNmvHAlrzzY5JQ==", "dev": true, + "license": "Apache-2.0", "dependencies": { - "ajv": "^6.12.4", - "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", - "ignore": "^5.2.0", - "import-fresh": "^3.2.1", - "js-yaml": "^4.1.0", - "minimatch": "^3.1.2", - "strip-json-comments": "^3.1.1" + "@eslint/object-schema": "^2.1.3", + "debug": "^4.3.1", + "minimatch": "^3.0.5" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { + "node_modules/@eslint/config-array/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "node_modules/@eslint/eslintrc/node_modules/minimatch": { + "node_modules/@eslint/config-array/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -2409,44 +2403,60 @@ "node": "*" } }, - "node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - } - }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.14", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", - "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "node_modules/@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", "dev": true, + "license": "MIT", "dependencies": { - "@humanwhocodes/object-schema": "^2.0.2", - "debug": "^4.3.1", - "minimatch": "^3.0.5" + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" }, "engines": { - "node": ">=10.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { + "node_modules/@eslint/eslintrc/node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0", "concat-map": "0.0.1" } }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^1.1.7" }, @@ -2454,6 +2464,26 @@ "node": "*" } }, + "node_modules/@eslint/js": { + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.4.0.tgz", + "integrity": "sha512-fdI7VJjP3Rvc70lC4xkFXHB0fiPeojiL1PxVG6t1ZvXQrarj893PweuBTujxDUFk0Fxj4R7PIIAZ/aiiyZPZcg==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.3.tgz", + "integrity": "sha512-HAbhAYKfsAC2EkTqve00ibWIZlaU74Z1EHwAjYr4PXF0YU2VEA1zSIKSSpKszRLRWwHzzRZXvK632u+uXzvsvw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@humanwhocodes/module-importer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", @@ -2467,11 +2497,19 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.2.tgz", - "integrity": "sha512-6EwiSjwWYP7pTckG6I5eyFANjPhmPjUX9JRLUSfNPC7FX7zK9gyZAfUEaECL6ALTpGX5AjnBq3C9XmVWPitNpw==", - "dev": true + "node_modules/@humanwhocodes/retry": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.0.tgz", + "integrity": "sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -2934,6 +2972,18 @@ "vite": "^5.0.0" } }, + "node_modules/@sveltejs/vite-plugin-svelte/node_modules/svelte-hmr": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz", + "integrity": "sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==", + "dev": true, + "engines": { + "node": "^12.20 || ^14.13.1 || >= 16" + }, + "peerDependencies": { + "svelte": "^3.19.0 || ^4.0.0" + } + }, "node_modules/@types/cookie": { "version": "0.6.0", "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", @@ -2941,10 +2991,11 @@ "dev": true }, "node_modules/@types/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-FlsN0p4FhuYRjIxpbdXovvHQhtlG05O1GG/RNWvdAxTboR438IOTwmrY/vLA+Xfgg06BTkP045M3vpFwTMv1dg==", + "version": "8.56.10", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.10.tgz", + "integrity": "sha512-Shavhk87gCtY2fhXDctcfS3e6FdxWkCx1iUZ9eEUbh7rTqlZT0/IzOkCOVt0fCjcFuZ9FPYfuezTBImfHCDBGQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -2985,12 +3036,6 @@ "@types/node": "*" } }, - "node_modules/@types/semver": { - "version": "7.5.7", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.7.tgz", - "integrity": "sha512-/wdoPq1QqkSj9/QOeKkFquEuPzQbHTWAMPH/PaUMB+JuR31lXhlWXRZ52IpfDYVlDOUBvX09uBrPwxGT1hjNBg==", - "dev": true - }, "node_modules/@types/trusted-types": { "version": "2.0.7", "resolved": "https://registry.npmjs.org/@types/trusted-types/-/trusted-types-2.0.7.tgz", @@ -2998,33 +3043,32 @@ "dev": true }, "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.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.0.0-alpha.29.tgz", + "integrity": "sha512-lEjQc/jfr3MePgq0mxbAIvAvzInotE48L8bAwfoHkdwBTJxpwN9ywjEvgBIZ8dRssvdm49stItPFazDnZnMWMA==", "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.0.0-alpha.29", + "@typescript-eslint/type-utils": "8.0.0-alpha.29", + "@typescript-eslint/utils": "8.0.0-alpha.29", + "@typescript-eslint/visitor-keys": "8.0.0-alpha.29", "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" }, "peerDependenciesMeta": { "typescript": { @@ -3033,26 +3077,27 @@ } }, "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.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.0.0-alpha.29.tgz", + "integrity": "sha512-WB5SMIFoEAco8rzfqFbVncbZobvigOePjpbDbRAvOn4dHGcYLvyNv6hy0vFOv52ngfCGjIEznDhUOKfKTVohJw==", "dev": true, + "license": "BSD-2-Clause", "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.0.0-alpha.29", + "@typescript-eslint/types": "8.0.0-alpha.29", + "@typescript-eslint/typescript-estree": "8.0.0-alpha.29", + "@typescript-eslint/visitor-keys": "8.0.0-alpha.29", "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" + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -3061,16 +3106,17 @@ } }, "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==", + "version": "8.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.0.0-alpha.29.tgz", + "integrity": "sha512-DqTnaDI3ULPE5xXeWTKzdBqcOScDyFna6oqaQAIKaNjTGCBB75MmvLl3+G1SbpFGQMlhTilkCcjvKkAr0Av1Rw==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0" + "@typescript-eslint/types": "8.0.0-alpha.29", + "@typescript-eslint/visitor-keys": "8.0.0-alpha.29" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -3078,26 +3124,24 @@ } }, "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==", + "version": "8.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.0.0-alpha.29.tgz", + "integrity": "sha512-12PYg3bgUCMsl5jvUC6A2x2gT25jULiCdV/58I1uweUxCYcQC6rh8FN+h5zx6LKnxQr79MJhgfh3vLk6rD+VZQ==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "6.21.0", - "@typescript-eslint/utils": "6.21.0", + "@typescript-eslint/typescript-estree": "8.0.0-alpha.29", + "@typescript-eslint/utils": "8.0.0-alpha.29", "debug": "^4.3.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": { - "eslint": "^7.0.0 || ^8.0.0" - }, "peerDependenciesMeta": { "typescript": { "optional": true @@ -3105,12 +3149,13 @@ } }, "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==", + "version": "8.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.0.0-alpha.29.tgz", + "integrity": "sha512-RG0/ZUiX3H0Dgjt9/3CYkAgQeUoo4AVZxi5xot/JI4t5Wfx+4gn4J3ywAf+AcNokplPZYdGsc/awqwqBgUQhtA==", "dev": true, + "license": "MIT", "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -3118,22 +3163,23 @@ } }, "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==", + "version": "8.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.0.0-alpha.29.tgz", + "integrity": "sha512-O2BkauDJjjprmTSJR+3fcnFtTEu6/t0Aku1v8momFg3FT8t4Bym8DrBz3wHO5/T746aa/TkOH/rXgYD6DLd8Bg==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "@typescript-eslint/visitor-keys": "6.21.0", + "@typescript-eslint/types": "8.0.0-alpha.29", + "@typescript-eslint/visitor-keys": "8.0.0-alpha.29", "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" + "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", @@ -3146,53 +3192,46 @@ } }, "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==", + "version": "8.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.0.0-alpha.29.tgz", + "integrity": "sha512-zBlyvo4GhuTiJ1At3h9fsnOrUSUgQHG9mYtamxIsTVDVFd0Jbkl/yKgzhi43OpQTIiPkMDnZF/M4/7RbytRKlA==", "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" + "@typescript-eslint/scope-manager": "8.0.0-alpha.29", + "@typescript-eslint/types": "8.0.0-alpha.29", + "@typescript-eslint/typescript-estree": "8.0.0-alpha.29" }, "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" + "eslint": "^8.57.0 || ^9.0.0" } }, "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==", + "version": "8.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.0.0-alpha.29.tgz", + "integrity": "sha512-6Ubt9zHVMg2t+vljk50T5vdsk72OHimtlmdQ2IiGoNhYZu9YxtlPSh/Mdw+PDYvNpjvSec1zDg+o8uN2/wQKQQ==", "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "6.21.0", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "8.0.0-alpha.29", + "eslint-visitor-keys": "^3.4.3" }, "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/@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 - }, "node_modules/@vite-pwa/assets-generator": { "version": "0.2.4", "resolved": "https://registry.npmjs.org/@vite-pwa/assets-generator/-/assets-generator-0.2.4.tgz", @@ -3347,10 +3386,19 @@ "resolved": "https://registry.npmjs.org/acorn-jsx/-/acorn-jsx-5.3.2.tgz", "integrity": "sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==", "dev": true, + "license": "MIT", "peerDependencies": { "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-typescript": { + "version": "1.4.13", + "resolved": "https://registry.npmjs.org/acorn-typescript/-/acorn-typescript-1.4.13.tgz", + "integrity": "sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==", + "peerDependencies": { + "acorn": ">=8.9.0" + } + }, "node_modules/acorn-walk": { "version": "8.3.2", "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-8.3.2.tgz", @@ -3365,6 +3413,7 @@ "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, + "license": "MIT", "dependencies": { "fast-deep-equal": "^3.1.1", "fast-json-stable-stringify": "^2.0.0", @@ -3429,7 +3478,8 @@ "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", - "dev": true + "dev": true, + "license": "Python-2.0" }, "node_modules/aria-query": { "version": "5.3.0", @@ -3460,6 +3510,7 @@ "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3962,18 +4013,6 @@ "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", "dev": true }, - "node_modules/code-red": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", - "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15", - "@types/estree": "^1.0.1", - "acorn": "^8.10.0", - "estree-walker": "^3.0.3", - "periscopic": "^3.1.0" - } - }, "node_modules/color": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", @@ -4115,18 +4154,6 @@ "fastparse": "^1.1.2" } }, - "node_modules/css-tree": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", - "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" - } - }, "node_modules/cssesc": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", @@ -4354,6 +4381,7 @@ "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", "dev": true, + "license": "MIT", "dependencies": { "path-type": "^4.0.0" }, @@ -4367,18 +4395,6 @@ "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", "dev": true }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -4594,41 +4610,38 @@ } }, "node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.4.0.tgz", + "integrity": "sha512-sjc7Y8cUD1IlwYcTS9qPSvGjAC8Ne9LctpxKKu3x/1IC9bnOg98Zy6GxEJUfr1NojMgVPlyANXYns8oE2c1TAA==", "dev": true, + "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint/config-array": "^0.15.1", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.4.0", "@humanwhocodes/module-importer": "^1.0.1", + "@humanwhocodes/retry": "^0.3.0", "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", - "doctrine": "^3.0.0", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", + "eslint-scope": "^8.0.1", + "eslint-visitor-keys": "^4.0.0", + "espree": "^10.0.1", "esquery": "^1.4.2", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "find-up": "^5.0.0", "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", "json-stable-stringify-without-jsonify": "^1.0.1", "levn": "^0.4.1", "lodash.merge": "^4.6.2", @@ -4642,17 +4655,18 @@ "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-compat-utils": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.4.1.tgz", - "integrity": "sha512-5N7ZaJG5pZxUeNNJfUchurLVrunD1xJvyg5kYOIVF8kg1f3ajTikmAu/5fZ9w100omNPOoMjngRszh/Q/uFGMg==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", + "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^7.5.4" }, @@ -4676,23 +4690,23 @@ } }, "node_modules/eslint-plugin-svelte": { - "version": "2.36.0-next.5", - "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.36.0-next.5.tgz", - "integrity": "sha512-vIeYF5C8BicYiUcfuDze2E2y29g6oERFIr2UOfkfKPukVyqvIjuqgRnBUHHZBkkNTXLauMg1wLB2hzOvN6z2rw==", + "version": "2.39.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-svelte/-/eslint-plugin-svelte-2.39.3.tgz", + "integrity": "sha512-uXsHW+VOSHRI3VgoDit4CURKos9wDque6CuaBNw8z6UyF5Rfc2XHmNEsRvvOd+VmMUtS+wC9bvwArv2tt4TFGA==", "dev": true, + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@jridgewell/sourcemap-codec": "^1.4.14", - "debug": "^4.3.1", - "eslint-compat-utils": "^0.4.1", + "@eslint-community/eslint-utils": "^4.4.0", + "@jridgewell/sourcemap-codec": "^1.4.15", + "eslint-compat-utils": "^0.5.0", "esutils": "^2.0.3", - "known-css-properties": "^0.29.0", - "postcss": "^8.4.5", + "known-css-properties": "^0.31.0", + "postcss": "^8.4.38", "postcss-load-config": "^3.1.4", "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.11", - "semver": "^7.5.3", - "svelte-eslint-parser": ">=0.34.0-next.4 <1.0.0" + "postcss-selector-parser": "^6.0.16", + "semver": "^7.6.2", + "svelte-eslint-parser": "^0.37.0" }, "engines": { "node": "^14.17.0 || >=16.0.0" @@ -4702,7 +4716,7 @@ }, "peerDependencies": { "eslint": "^7.0.0 || ^8.0.0-0 || ^9.0.0-0", - "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0-next.33" + "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0-next.112" }, "peerDependenciesMeta": { "svelte": { @@ -4711,16 +4725,17 @@ } }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.0.1.tgz", + "integrity": "sha512-pL8XjgP4ZOmmwfFE8mEhSxA7ZY4C+LWyqjQ3o4yWkkmD0qcMT9kkW3zWHOczhWcjTSgqycYAgwSlXvZltv65og==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -4748,6 +4763,19 @@ "concat-map": "0.0.1" } }, + "node_modules/eslint/node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "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/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -4763,21 +4791,34 @@ "node_modules/esm-env": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.0.0.tgz", - "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==", - "dev": true + "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==" }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.0.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.0.1.tgz", + "integrity": "sha512-MWkrWZbJsL2UwnjxTX3gG8FneachS/Mwg7tdGXce011sJd5b0JG54vat5KHnfSBODZ3Wvzd2WnjxyzsRoVv+ww==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.11.3", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/espree/node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -4795,11 +4836,21 @@ "node": ">=0.10" } }, + "node_modules/esrap": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.2.2.tgz", + "integrity": "sha512-F2pSJklxx1BlQIQgooczXCPHmcWpn6EsP5oo73LQfonG9fIlIENQ8vMmfGXeojP9MrkzUNAfyU5vdFlR9shHAw==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15", + "@types/estree": "^1.0.1" + } + }, "node_modules/esrecurse": { "version": "4.3.0", "resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz", "integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "estraverse": "^5.2.0" }, @@ -4820,6 +4871,7 @@ "version": "3.0.3", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, "dependencies": { "@types/estree": "^1.0.0" } @@ -4933,15 +4985,16 @@ } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, + "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/filelist": { @@ -4994,24 +5047,25 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, + "license": "MIT", "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", - "dev": true + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", + "dev": true, + "license": "ISC" }, "node_modules/for-each": { "version": "0.3.3", @@ -5261,15 +5315,13 @@ } }, "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "15.4.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.4.0.tgz", + "integrity": "sha512-unnwvMZpv0eDUyjNyh9DH/yxUaRYrEjW/qK4QcdrHg3oO11igUQrCSgODHEqxlKg8v2CD2Sd7UkqqEBoz5U7TQ==", "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -5301,6 +5353,7 @@ "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -5962,6 +6015,7 @@ "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-4.1.0.tgz", "integrity": "sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^2.0.1" }, @@ -5985,7 +6039,8 @@ "version": "3.0.1", "resolved": "https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz", "integrity": "sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-schema": { "version": "0.4.0", @@ -5997,7 +6052,8 @@ "version": "0.4.1", "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stable-stringify-without-jsonify": { "version": "1.0.1", @@ -6049,6 +6105,7 @@ "resolved": "https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz", "integrity": "sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==", "dev": true, + "license": "MIT", "dependencies": { "json-buffer": "3.0.1" } @@ -6063,10 +6120,11 @@ } }, "node_modules/known-css-properties": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", - "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", - "dev": true + "version": "0.31.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.31.0.tgz", + "integrity": "sha512-sBPIUGTNF0czz0mwGGUoKKJC8Q7On1GPbCSFPfyEsfHb2DyBG0Y4QtV+EVWpINSaiGKZblDNuF5AezxSgOhesQ==", + "dev": true, + "license": "MIT" }, "node_modules/kolorist": { "version": "1.8.0", @@ -6180,18 +6238,6 @@ "get-func-name": "^2.0.1" } }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/magic-string": { "version": "0.30.7", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", @@ -6203,11 +6249,6 @@ "node": ">=12" } }, - "node_modules/mdn-data": { - "version": "2.0.30", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", - "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" - }, "node_modules/merge-stream": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/merge-stream/-/merge-stream-2.0.0.tgz", @@ -6278,10 +6319,11 @@ } }, "node_modules/minimatch": { - "version": "9.0.3", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", - "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -6674,6 +6716,7 @@ "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -6693,16 +6736,6 @@ "node": "*" } }, - "node_modules/periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" - } - }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -6751,9 +6784,9 @@ } }, "node_modules/postcss": { - "version": "8.4.35", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.35.tgz", - "integrity": "sha512-u5U8qYpBCpN13BsiEB0CbR1Hhh4Gc0zLFuedrHJKMctHCHAGrMdG0PRM/KErzAL3CU6/eckEtmHNB3x6e3c0vA==", + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", "dev": true, "funding": [ { @@ -6769,10 +6802,11 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "dependencies": { "nanoid": "^3.3.7", "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" @@ -6897,6 +6931,7 @@ "url": "https://github.com/sponsors/ai" } ], + "license": "MIT", "engines": { "node": ">=12.0" }, @@ -6905,10 +6940,11 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.15", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", - "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", + "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", "dev": true, + "license": "MIT", "dependencies": { "cssesc": "^3.0.0", "util-deprecate": "^1.0.2" @@ -7371,21 +7407,6 @@ "node": ">=0.10.0" } }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/rollup": { "version": "4.12.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.12.0.tgz", @@ -7550,13 +7571,11 @@ } }, "node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "version": "7.6.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz", + "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, + "license": "ISC", "bin": { "semver": "bin/semver.js" }, @@ -7774,6 +7793,7 @@ "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -7814,9 +7834,11 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } @@ -8088,6 +8110,7 @@ "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", "integrity": "sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -8176,27 +8199,26 @@ } }, "node_modules/svelte": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.11.tgz", - "integrity": "sha512-YIQk3J4X89wOLhjsqIW8tqY3JHPuBdtdOIkASP2PZeAMcSW9RsIjQzMesCrxOF3gdWYC0mKknlKF7OqmLM+Zqg==", + "version": "5.0.0-next.152", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.0.0-next.152.tgz", + "integrity": "sha512-/qepboI/elf4Jg/pRM/0drsF9vwXBYqOwSpZOq+cduddU9413pDlHZODBqwrDy9xVt24tQb+1x1EMSbwI9eizA==", "dependencies": { "@ampproject/remapping": "^2.2.1", "@jridgewell/sourcemap-codec": "^1.4.15", - "@jridgewell/trace-mapping": "^0.3.18", - "@types/estree": "^1.0.1", - "acorn": "^8.9.0", + "@types/estree": "^1.0.5", + "acorn": "^8.11.3", + "acorn-typescript": "^1.4.13", "aria-query": "^5.3.0", "axobject-query": "^4.0.0", - "code-red": "^1.0.3", - "css-tree": "^2.3.1", - "estree-walker": "^3.0.3", - "is-reference": "^3.0.1", + "esm-env": "^1.0.0", + "esrap": "^1.2.2", + "is-reference": "^3.0.2", "locate-character": "^3.0.0", - "magic-string": "^0.30.4", - "periscopic": "^3.1.0" + "magic-string": "^0.30.5", + "zimmerframe": "^1.1.2" }, "engines": { - "node": ">=16" + "node": ">=18" } }, "node_modules/svelte-check": { @@ -8222,15 +8244,16 @@ } }, "node_modules/svelte-eslint-parser": { - "version": "0.34.0-next.8", - "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.34.0-next.8.tgz", - "integrity": "sha512-FuSZ/vRoNnxaLt/Z1anxT3JVN0oZdLgsVE/EwReqTFmiA5d5you4rPcZV7VerJwbI1AgWfmsjWMR7ZStX1QQZA==", + "version": "0.37.0", + "resolved": "https://registry.npmjs.org/svelte-eslint-parser/-/svelte-eslint-parser-0.37.0.tgz", + "integrity": "sha512-AXd5ar7dcOK+H86JomxcSaWevhs2J7o/xOwg+kDQu98uuATpm+tE5Twp7u8UQCdbWKB34Idu/CZyHmTOxfSQMw==", "dev": true, + "license": "MIT", "dependencies": { "eslint-scope": "^7.2.2", "eslint-visitor-keys": "^3.4.3", "espree": "^9.6.1", - "postcss": "^8.4.32", + "postcss": "^8.4.38", "postcss-scss": "^4.0.9" }, "engines": { @@ -8240,7 +8263,7 @@ "url": "https://github.com/sponsors/ota-meshi" }, "peerDependencies": { - "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0-next.37" + "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0-next.115" }, "peerDependenciesMeta": { "svelte": { @@ -8248,16 +8271,39 @@ } } }, - "node_modules/svelte-hmr": { - "version": "0.15.3", - "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz", - "integrity": "sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==", + "node_modules/svelte-eslint-parser/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, "engines": { - "node": "^12.20 || ^14.13.1 || >= 16" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "peerDependencies": { - "svelte": "^3.19.0 || ^4.0.0" + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/svelte-eslint-parser/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/svelte-preprocess": { @@ -8623,10 +8669,11 @@ } }, "node_modules/ts-api-utils": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.2.1.tgz", - "integrity": "sha512-RIYA36cJn2WiH9Hy77hdF9r7oEwxAtB/TS9/S4Qd90Ap4z5FSiin5zEiTL44OII1Y3IIlEvxwxFUVgrHSZ/UpA==", + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=16" }, @@ -8679,18 +8726,6 @@ "node": ">=4" } }, - "node_modules/type-fest": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.20.2.tgz", - "integrity": "sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/typed-array-buffer": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz", @@ -8770,6 +8805,30 @@ "node": ">=14.17" } }, + "node_modules/typescript-eslint": { + "version": "8.0.0-alpha.29", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.0.0-alpha.29.tgz", + "integrity": "sha512-NASQjd4tP+wukSs/Cj8vHjK/Ogk0nhVOr/kwzwg0AaXOWiz0g+rtE+lvqAaV+nhsCfMskuzKzc1TywFrhJlbvw==", + "dev": true, + "license": "MIT", + "dependencies": { + "@typescript-eslint/eslint-plugin": "8.0.0-alpha.29", + "@typescript-eslint/parser": "8.0.0-alpha.29", + "@typescript-eslint/utils": "8.0.0-alpha.29" + }, + "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/ufo": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.4.0.tgz", @@ -9671,12 +9730,6 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/yaml": { "version": "1.10.2", "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", @@ -9697,6 +9750,11 @@ "funding": { "url": "https://github.com/sponsors/sindresorhus" } + }, + "node_modules/zimmerframe": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz", + "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==" } } } diff --git a/package.json b/package.json index 18947b4..8a6d506 100644 --- a/package.json +++ b/package.json @@ -25,28 +25,28 @@ "@sveltejs/adapter-static": "^3.0.1", "@sveltejs/kit": "^2.5.0", "@sveltejs/vite-plugin-svelte": "^3.0.1", - "@types/eslint": "8.56.0", - "@typescript-eslint/eslint-plugin": "^6.0.0", - "@typescript-eslint/parser": "^6.0.0", + "@types/eslint": "^8.56.7", "@vite-pwa/assets-generator": "^0.2.3", "@vite-pwa/sveltekit": "^0.3.0", "autoprefixer": "^10.4.17", "daisyui": "^4.7.1", - "eslint": "^8.56.0", + "eslint": "^9.0.0", "eslint-config-prettier": "^9.1.0", - "eslint-plugin-svelte": "^2.36.0-next.4", + "eslint-plugin-svelte": "^2.36.0", + "globals": "^15.0.0", "postcss": "^8.4.35", "prettier": "^3.2.5", "prettier-plugin-svelte": "^3.1.2", "prettier-plugin-tailwindcss": "^0.5.11", "sass": "^1.70.0", - "svelte": "^4.2.8", + "svelte": "^5.0.0-next.152", "svelte-check": "^3.6.3", "tailwindcss": "^3.4.1", "tslib": "^2.4.1", "typescript": "^5.3.3", + "typescript-eslint": "^8.0.0-alpha.20", "vite": "^5.0.11", "vite-plugin-pwa": "^0.17.4", "vitest": "^1.2.2" } -} +} \ No newline at end of file diff --git a/src/lib/canvas/Canvas.svelte b/src/lib/canvas/Canvas.svelte index f649e08..1b98a3b 100644 --- a/src/lib/canvas/Canvas.svelte +++ b/src/lib/canvas/Canvas.svelte @@ -1,19 +1,23 @@ -{#if canvas} - -{/if} +> +{@render children()} diff --git a/src/lib/canvas/elements/Circle.svelte b/src/lib/canvas/elements/Circle.svelte index a14a466..4fc3200 100644 --- a/src/lib/canvas/elements/Circle.svelte +++ b/src/lib/canvas/elements/Circle.svelte @@ -1,13 +1,26 @@ diff --git a/src/lib/canvas/elements/Clip.svelte b/src/lib/canvas/elements/Clip.svelte index bd11ddd..8b8482c 100644 --- a/src/lib/canvas/elements/Clip.svelte +++ b/src/lib/canvas/elements/Clip.svelte @@ -1,11 +1,12 @@ {#if offscreenCanvas} - + {@render children()} {#if debug} import { onCanvasRender } from '..'; - import HitRegion from './HitRegion.svelte'; + import HitRegion, { type ForwardHitRegionProps } from './HitRegion.svelte'; - export let active: boolean = false; - export let x: number; - export let y: number; - export let radiusX: number; - export let radiusY: number; - export let rotation: number = 0; - export let startAngle: number = 0; - export let endAngle: number = 2 * Math.PI; - export let counterclockwise: boolean = false; - export let fillStyle: CanvasStyle = '#000'; - export let strokeStyle: CanvasStyle = '#000'; - export let lineWidth: number = 1; + interface EllipseProps { + x: number; + y: number; + radiusX: number; + radiusY: number; + rotation?: number; + startAngle?: number; + endAngle?: number; + counterclockwise?: boolean; + fillStyle?: CanvasStyle; + strokeStyle?: CanvasStyle; + lineWidth?: number; + } + + const { + x, + y, + radiusX, + radiusY, + rotation = 0, + startAngle = 0, + endAngle = 2 * Math.PI, + counterclockwise = false, + fillStyle = '#000', + strokeStyle = '#000', + lineWidth = 1, + active = false, + ...rest + }: EllipseProps & ForwardHitRegionProps = $props(); const render = (ctx: CanvasRenderingContext2D | OffscreenCanvasRenderingContext2D) => { ctx.lineWidth = lineWidth; @@ -30,4 +47,4 @@ }); - + diff --git a/src/lib/canvas/elements/HitRegion.svelte b/src/lib/canvas/elements/HitRegion.svelte index d04313c..5cfe0ff 100644 --- a/src/lib/canvas/elements/HitRegion.svelte +++ b/src/lib/canvas/elements/HitRegion.svelte @@ -1,21 +1,54 @@ + + diff --git a/src/lib/canvas/elements/Line.svelte b/src/lib/canvas/elements/Line.svelte index 44fd61a..8aa56f3 100644 --- a/src/lib/canvas/elements/Line.svelte +++ b/src/lib/canvas/elements/Line.svelte @@ -1,12 +1,21 @@ - + diff --git a/src/lib/canvas/elements/Rectangle.svelte b/src/lib/canvas/elements/Rectangle.svelte index 17f3261..7472731 100644 --- a/src/lib/canvas/elements/Rectangle.svelte +++ b/src/lib/canvas/elements/Rectangle.svelte @@ -1,15 +1,28 @@ - + diff --git a/src/lib/canvas/elements/Text.svelte b/src/lib/canvas/elements/Text.svelte index 5191d4a..14cce46 100644 --- a/src/lib/canvas/elements/Text.svelte +++ b/src/lib/canvas/elements/Text.svelte @@ -1,24 +1,43 @@ - + diff --git a/src/lib/guitar/finger-board/FingerBoard.svelte b/src/lib/guitar/finger-board/FingerBoard.svelte index c76cf86..48f2cb8 100644 --- a/src/lib/guitar/finger-board/FingerBoard.svelte +++ b/src/lib/guitar/finger-board/FingerBoard.svelte @@ -142,10 +142,10 @@ { - if (ev.detail.button === 0) { + onclick={({ button }) => { + if (button === 0) { dispatch('click', { fret: fretNum, line: lineNum }); - } else if (ev.detail.button === 2) { + } else if (button === 2) { dispatch('click', { fret: 'mute', line: lineNum }); } }} @@ -158,10 +158,10 @@ {@const lineNum = j + 1} {@const centerY = getYFromStringNumber(lineNum)} { - if (ev.detail.button === 0) { + onclick={({ button }) => { + if (button === 0) { dispatch('click', { fret: 'open', line: lineNum }); - } else if (ev.detail.button === 2) { + } else if (button === 2) { dispatch('click', { fret: 'mute', line: lineNum }); } }} diff --git a/src/lib/guitar/finger-board/components/FingerBoardPoisitionIndicator.svelte b/src/lib/guitar/finger-board/components/FingerBoardPoisitionIndicator.svelte index 1ad83e2..434d842 100644 --- a/src/lib/guitar/finger-board/components/FingerBoardPoisitionIndicator.svelte +++ b/src/lib/guitar/finger-board/components/FingerBoardPoisitionIndicator.svelte @@ -29,11 +29,10 @@ const height = STRING_GAP; ctx.fillRect(leftX, centerY - height / 2, width, height); }} - on:click - on:out={() => { + onout={() => { hovering = false; }} - on:over={() => { + onover={() => { hovering = true; }} > From d99c055121d489d0e9b8a3655b20f5cf96fa1cc2 Mon Sep 17 00:00:00 2001 From: Kim Jeong-won Date: Tue, 11 Jun 2024 23:15:20 +0900 Subject: [PATCH 2/8] refact: migrate finger-board to runes --- .../guitar/finger-board/FingerBoard.svelte | 91 ++++++++++++------- .../components/FingerBoardBackground.svelte | 7 +- .../components/FingerBoardInlay.svelte | 10 +- .../FingerBoardPoisitionIndicator.svelte | 19 +++- src/lib/guitar/finger-board/context.ts | 39 ++++---- src/routes/tools/chord-finder/+page.svelte | 14 +-- src/routes/tools/chord-finder/Board.svelte | 22 ++++- 7 files changed, 131 insertions(+), 71 deletions(-) diff --git a/src/lib/guitar/finger-board/FingerBoard.svelte b/src/lib/guitar/finger-board/FingerBoard.svelte index 48f2cb8..700357d 100644 --- a/src/lib/guitar/finger-board/FingerBoard.svelte +++ b/src/lib/guitar/finger-board/FingerBoard.svelte @@ -38,55 +38,80 @@ end: number; visibility: 'none' | 'all' | 'start' | 'end'; } + export type OnFingerBoardClick = (fingerPosition: FingerPosition) => void; @@ -144,9 +169,9 @@ {centerY} onclick={({ button }) => { if (button === 0) { - dispatch('click', { fret: fretNum, line: lineNum }); + onclick({ fret: fretNum, line: lineNum }); } else if (button === 2) { - dispatch('click', { fret: 'mute', line: lineNum }); + onclick({ fret: 'mute', line: lineNum }); } }} /> @@ -160,9 +185,9 @@ { if (button === 0) { - dispatch('click', { fret: 'open', line: lineNum }); + onclick({ fret: 'open', line: lineNum }); } else if (button === 2) { - dispatch('click', { fret: 'mute', line: lineNum }); + onclick({ fret: 'mute', line: lineNum }); } }} render={(ctx) => { diff --git a/src/lib/guitar/finger-board/components/FingerBoardBackground.svelte b/src/lib/guitar/finger-board/components/FingerBoardBackground.svelte index 5c21715..3458f1d 100644 --- a/src/lib/guitar/finger-board/components/FingerBoardBackground.svelte +++ b/src/lib/guitar/finger-board/components/FingerBoardBackground.svelte @@ -1,12 +1,13 @@ diff --git a/src/lib/guitar/finger-board/components/FingerBoardPoisitionIndicator.svelte b/src/lib/guitar/finger-board/components/FingerBoardPoisitionIndicator.svelte index 434d842..d279f0c 100644 --- a/src/lib/guitar/finger-board/components/FingerBoardPoisitionIndicator.svelte +++ b/src/lib/guitar/finger-board/components/FingerBoardPoisitionIndicator.svelte @@ -1,18 +1,26 @@ { hovering = false; }} diff --git a/src/lib/guitar/finger-board/context.ts b/src/lib/guitar/finger-board/context.ts index 08e8b05..e18ba38 100644 --- a/src/lib/guitar/finger-board/context.ts +++ b/src/lib/guitar/finger-board/context.ts @@ -1,6 +1,6 @@ import { getContext, setContext } from 'svelte'; -interface FingerBoardContext { +interface FingerBoardState { FRET_START: number; FRET_GAP: number; FRET_WIDTH: number; @@ -13,9 +13,13 @@ interface FingerBoardContext { INLAY_STROKE_STYLE: string; INLAY_FILL_STYLE: string; } +interface FingerBoardContext extends FingerBoardState { + getXFromFretNumber: (fret: number) => number; + getYFromStringNumber: (string: number) => number; +} -export const setFingerBoardContext = (context?: Partial) => { - const defaultContext: FingerBoardContext = { +export const createFingerBoardState = (state?: Partial) => { + return { FRET_START: 30, FRET_GAP: 50, FRET_WIDTH: 4, @@ -26,19 +30,22 @@ export const setFingerBoardContext = (context?: Partial) => FINGER_RADIUS: 7, INLAY_RADIUS: 3, INLAY_STROKE_STYLE: '#555', - INLAY_FILL_STYLE: '#eee' - }; - if (context) Object.assign(defaultContext, context); - return setContext('fingerboard', defaultContext); + INLAY_FILL_STYLE: '#eee', + ...state + } as FingerBoardState; }; -export const getFingerBoardContext = () => getContext('fingerboard'); - -export const getXFromFretNumber = (fret: number) => { - const fc = getFingerBoardContext(); - return fc.FRET_START + fret * fc.FRET_GAP; -}; -export const getYFromStringNumber = (string: number) => { - const fc = getFingerBoardContext(); - return fc.STRING_START + (string - 1) * fc.STRING_GAP; +export const setFingerBoardContext = (state?: Partial) => { + const contextState = createFingerBoardState(state); + return setContext('fingerboard', { + ...contextState, + getXFromFretNumber(fret) { + return contextState.FRET_START + fret * contextState.FRET_GAP; + }, + getYFromStringNumber(string) { + return contextState.STRING_START + (string - 1) * contextState.STRING_GAP; + } + }); }; + +export const getFingerBoardContext = () => getContext('fingerboard'); diff --git a/src/routes/tools/chord-finder/+page.svelte b/src/routes/tools/chord-finder/+page.svelte index 6f27179..98bd9a9 100644 --- a/src/routes/tools/chord-finder/+page.svelte +++ b/src/routes/tools/chord-finder/+page.svelte @@ -1,23 +1,23 @@
{ + fingers={[...fingers.values()]} + onclick={({ fret, line }) => { updateFingerPosition({ fret, line }); }} > diff --git a/src/routes/tools/chord-finder/Board.svelte b/src/routes/tools/chord-finder/Board.svelte index 721a117..880f5c5 100644 --- a/src/routes/tools/chord-finder/Board.svelte +++ b/src/routes/tools/chord-finder/Board.svelte @@ -1,5 +1,8 @@
@@ -65,5 +77,5 @@ class="mb-28 w-screen lg:w-[calc(100vw-14rem)]" {fingers} fretRange={{ start: 0, end: 12, visibility: 'all' }} - on:click + {onclick} /> From dd54440fc72582a3a1d3f9badcfb3869e4014929 Mon Sep 17 00:00:00 2001 From: Kim Jeong-won Date: Wed, 12 Jun 2024 15:21:57 +0900 Subject: [PATCH 3/8] refact: migrate chord/pitch notation to runes --- src/lib/notation/ChordNotation.svelte | 19 ++++++++++++------- src/lib/notation/PitchNotation.svelte | 11 ++++++++--- .../chord/ChordExtensionNotation.svelte | 9 ++++++--- .../chord/ChordQualityNotation.svelte | 5 ++++- .../notation/chord/ChordRootNotation.svelte | 5 ++++- .../chord/ChordTensionNotation .svelte | 6 +++++- src/lib/notation/chord/chord-map.ts | 2 +- 7 files changed, 40 insertions(+), 17 deletions(-) diff --git a/src/lib/notation/ChordNotation.svelte b/src/lib/notation/ChordNotation.svelte index 8825e4d..b7f8928 100644 --- a/src/lib/notation/ChordNotation.svelte +++ b/src/lib/notation/ChordNotation.svelte @@ -11,14 +11,19 @@ import ChordRootNotation from './chord/ChordRootNotation.svelte'; import ChordTensionNotation from './chord/ChordTensionNotation .svelte'; - export let root: ChordRoot; - export let quality: ChordQuality | undefined = undefined; - export let extension: ChordExtension | undefined | null = undefined; - export let tensions: number[] = []; - export let bass: ChordBass | undefined = undefined; + interface ChordNotationProps { + root: ChordRoot; + quality?: ChordQuality; + extension?: ChordExtension | null; + tensions?: number[]; + bass?: ChordBass; + } - $: needsToSwitch = - (quality === 'sus2' || quality === 'sus4') && extension !== 'b6' && extension !== 'maj7'; + const { root, quality, extension, tensions = [], bass }: ChordNotationProps = $props(); + + const needsToSwitch = $derived( + (quality === 'sus2' || quality === 'sus4') && extension !== 'b6' && extension !== 'maj7' + ); {chordNotation}{octave} diff --git a/src/lib/notation/chord/ChordExtensionNotation.svelte b/src/lib/notation/chord/ChordExtensionNotation.svelte index 36a0a8a..c5e34ce 100644 --- a/src/lib/notation/chord/ChordExtensionNotation.svelte +++ b/src/lib/notation/chord/ChordExtensionNotation.svelte @@ -2,15 +2,18 @@ import { type ChordExtension } from '$/utils/music/chords'; import { stringifyFinaleJazzChordSigns } from '$/utils/music/font'; import { chordExtensionToFinaleJazzChordSignMap } from './chord-map'; - export let extension: ChordExtension | undefined | null = undefined; + interface ChordExtensionNotationProps { + extension?: ChordExtension | null; + } + const { extension }: ChordExtensionNotationProps = $props(); {#if extension !== undefined && extension !== null}{#if extension === '7, maj7'}{stringifyFinaleJazzChordSigns( ['7'] - )},{stringifyFinaleJazzChordSigns([ + )},{stringifyFinaleJazzChordSigns([ 'Major', '7' - ])}{:else if extension === 'b6'}{stringifyFinaleJazzChordSigns(['Flat'])}{stringifyFinaleJazzChordSigns(['6'])}{:else}{stringifyFinaleJazzChordSigns( chordExtensionToFinaleJazzChordSignMap[extension] diff --git a/src/lib/notation/chord/ChordQualityNotation.svelte b/src/lib/notation/chord/ChordQualityNotation.svelte index dc496d6..3cec67a 100644 --- a/src/lib/notation/chord/ChordQualityNotation.svelte +++ b/src/lib/notation/chord/ChordQualityNotation.svelte @@ -3,7 +3,10 @@ import { stringifyFinaleJazzChordSigns } from '$/utils/music/font'; import { chordQualityToFinaleJazzChordSignMap } from './chord-map'; - export let quality: ChordQuality | undefined = undefined; + interface ChordQualityNotationProps { + quality?: ChordQuality; + } + const { quality }: ChordQualityNotationProps = $props(); {#if quality !== undefined && quality !== 'major'}{stringifyFinaleJazzChordSigns([ diff --git a/src/lib/notation/chord/ChordRootNotation.svelte b/src/lib/notation/chord/ChordRootNotation.svelte index f98226f..9f8d23c 100644 --- a/src/lib/notation/chord/ChordRootNotation.svelte +++ b/src/lib/notation/chord/ChordRootNotation.svelte @@ -3,7 +3,10 @@ import { stringifyFinaleJazzChordSigns } from '$/utils/music/font'; import { chordRootToFinaleJazzChordSignMap } from './chord-map'; - export let root: ChordRoot; + interface ChordRootNotationProps { + root: ChordRoot; + } + const { root }: ChordRootNotationProps = $props(); {stringifyFinaleJazzChordSigns(chordRootToFinaleJazzChordSignMap[root])} diff --git a/src/lib/notation/chord/ChordTensionNotation .svelte b/src/lib/notation/chord/ChordTensionNotation .svelte index 7f63fd9..2950b70 100644 --- a/src/lib/notation/chord/ChordTensionNotation .svelte +++ b/src/lib/notation/chord/ChordTensionNotation .svelte @@ -1,7 +1,11 @@ {#if tensions.length > 0}{#if tensions.length === 1}add Date: Wed, 12 Jun 2024 15:52:39 +0900 Subject: [PATCH 4/8] refact: upgrade prittier for better runes formatting --- .prettierrc | 3 +- .vscode/extensions.json | 7 +- package-lock.json | 67 ++++++++++++------ package.json | 8 +-- src/app.css | 6 +- src/app.d.ts | 2 +- src/assets/fonts/FinaleJazz/FinaleJazz.css | 10 +-- .../fonts/SpoqaHanSans/SpoqaHanSansNeo.css | 70 ++++++++++--------- src/lib/canvas/Canvas.svelte | 9 ++- .../(practice)/[category]/+page.svelte | 2 +- test/music/chords.test.ts | 4 +- 11 files changed, 110 insertions(+), 78 deletions(-) diff --git a/.prettierrc b/.prettierrc index 2ceb50c..46f0514 100644 --- a/.prettierrc +++ b/.prettierrc @@ -5,5 +5,6 @@ "printWidth": 100, "tabWidth": 2, "plugins": ["prettier-plugin-svelte", "prettier-plugin-tailwindcss"], - "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }] + "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }], + "endOfLine": "auto" } diff --git a/.vscode/extensions.json b/.vscode/extensions.json index 78be5f0..42ca69c 100644 --- a/.vscode/extensions.json +++ b/.vscode/extensions.json @@ -1,6 +1,3 @@ { - "recommendations": [ - "svelte.svelte-vscode", - "bradlc.vscode-tailwindcss" - ] -} \ No newline at end of file + "recommendations": ["svelte.svelte-vscode", "bradlc.vscode-tailwindcss"] +} diff --git a/package-lock.json b/package-lock.json index 70150e3..d979f62 100644 --- a/package-lock.json +++ b/package-lock.json @@ -29,9 +29,9 @@ "eslint-plugin-svelte": "^2.36.0", "globals": "^15.0.0", "postcss": "^8.4.35", - "prettier": "^3.2.5", - "prettier-plugin-svelte": "^3.1.2", - "prettier-plugin-tailwindcss": "^0.5.11", + "prettier": "^3.3.2", + "prettier-plugin-svelte": "^3.2.4", + "prettier-plugin-tailwindcss": "^0.6.3", "sass": "^1.70.0", "svelte": "^5.0.0-next.152", "svelte-check": "^3.6.3", @@ -69,6 +69,7 @@ "version": "2.2.1", "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dev": true, "dependencies": { "@jridgewell/gen-mapping": "^0.3.0", "@jridgewell/trace-mapping": "^0.3.9" @@ -2571,6 +2572,7 @@ "version": "0.3.3", "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dev": true, "dependencies": { "@jridgewell/set-array": "^1.0.1", "@jridgewell/sourcemap-codec": "^1.4.10", @@ -2584,6 +2586,7 @@ "version": "3.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, "engines": { "node": ">=6.0.0" } @@ -2592,6 +2595,7 @@ "version": "1.1.2", "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "dev": true, "engines": { "node": ">=6.0.0" } @@ -2609,12 +2613,14 @@ "node_modules/@jridgewell/sourcemap-codec": { "version": "1.4.15", "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", - "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true }, "node_modules/@jridgewell/trace-mapping": { "version": "0.3.22", "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", + "dev": true, "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -3004,7 +3010,8 @@ "node_modules/@types/estree": { "version": "1.0.5", "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", - "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true }, "node_modules/@types/json-schema": { "version": "7.0.15", @@ -3374,6 +3381,7 @@ "version": "8.11.3", "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "dev": true, "bin": { "acorn": "bin/acorn" }, @@ -3395,6 +3403,7 @@ "version": "1.4.13", "resolved": "https://registry.npmjs.org/acorn-typescript/-/acorn-typescript-1.4.13.tgz", "integrity": "sha512-xsc9Xv0xlVfwp2o7sQ+GCQ1PgbkdcpWdTzrwXxO3xDMTAywVS3oXVOcOHuRjAPkS4P9b+yc/qNF15460v+jp4Q==", + "dev": true, "peerDependencies": { "acorn": ">=8.9.0" } @@ -3485,6 +3494,7 @@ "version": "5.3.0", "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dev": true, "dependencies": { "dequal": "^2.0.3" } @@ -3614,6 +3624,7 @@ "version": "4.0.0", "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", + "dev": true, "dependencies": { "dequal": "^2.0.3" } @@ -4333,6 +4344,7 @@ "version": "2.0.3", "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "dev": true, "engines": { "node": ">=6" } @@ -4791,7 +4803,8 @@ "node_modules/esm-env": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.0.0.tgz", - "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==" + "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==", + "dev": true }, "node_modules/espree": { "version": "10.0.1", @@ -4840,6 +4853,7 @@ "version": "1.2.2", "resolved": "https://registry.npmjs.org/esrap/-/esrap-1.2.2.tgz", "integrity": "sha512-F2pSJklxx1BlQIQgooczXCPHmcWpn6EsP5oo73LQfonG9fIlIENQ8vMmfGXeojP9MrkzUNAfyU5vdFlR9shHAw==", + "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15", "@types/estree": "^1.0.1" @@ -5801,6 +5815,7 @@ "version": "3.0.2", "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", + "dev": true, "dependencies": { "@types/estree": "*" } @@ -6188,7 +6203,8 @@ "node_modules/locate-character": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", - "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==" + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==", + "dev": true }, "node_modules/locate-path": { "version": "6.0.0", @@ -6242,6 +6258,7 @@ "version": "0.30.7", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", + "dev": true, "dependencies": { "@jridgewell/sourcemap-codec": "^1.4.15" }, @@ -7023,10 +7040,11 @@ } }, "node_modules/prettier": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.2.5.tgz", - "integrity": "sha512-3/GWa9aOC0YeD7LUfvOG2NiDyhOWRvt1k+rcKhOuYnMY24iiCphgneUfJDyFXd6rZCAnuLBv6UeAULtrhT/F4A==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.3.2.tgz", + "integrity": "sha512-rAVeHYMcv8ATV5d508CFdn+8/pHPpXeIid1DdrPwXnaAdH7cqjVbpJaT5eq4yRAFU/lsbwYwSF/n5iNrdJHPQA==", "dev": true, + "license": "MIT", "bin": { "prettier": "bin/prettier.cjs" }, @@ -7038,20 +7056,22 @@ } }, "node_modules/prettier-plugin-svelte": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.2.1.tgz", - "integrity": "sha512-ENAPbIxASf2R79IZwgkG5sBdeNA9kLRlXVvKKmTXh79zWTy0KKoT86XO2pHrTitUPINd+iXWy12MRmgzKGVckA==", + "version": "3.2.4", + "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.2.4.tgz", + "integrity": "sha512-tZv+ADfeOWFNQkXkRh6zUXE16w3Vla8x2Ug0B/EnSmjR4EnwdwZbGgL/liSwR1kcEALU5mAAyua98HBxheCxgg==", "dev": true, + "license": "MIT", "peerDependencies": { "prettier": "^3.0.0", "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0" } }, "node_modules/prettier-plugin-tailwindcss": { - "version": "0.5.11", - "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.5.11.tgz", - "integrity": "sha512-AvI/DNyMctyyxGOjyePgi/gqj5hJYClZ1avtQvLlqMT3uDZkRbi4HhGUpok3DRzv9z7Lti85Kdj3s3/1CeNI0w==", + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/prettier-plugin-tailwindcss/-/prettier-plugin-tailwindcss-0.6.3.tgz", + "integrity": "sha512-GeJ9bqXN4APAP0V5T2a1J/o6a50MWevEUCPWxijpdXFDQkBCoAfz4pQfv+YMXSqZ5GXLMDYio0mUOfrYL7gf4w==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.21.3" }, @@ -7060,6 +7080,7 @@ "@prettier/plugin-pug": "*", "@shopify/prettier-plugin-liquid": "*", "@trivago/prettier-plugin-sort-imports": "*", + "@zackad/prettier-plugin-twig-melody": "*", "prettier": "^3.0", "prettier-plugin-astro": "*", "prettier-plugin-css-order": "*", @@ -7068,6 +7089,7 @@ "prettier-plugin-marko": "*", "prettier-plugin-organize-attributes": "*", "prettier-plugin-organize-imports": "*", + "prettier-plugin-sort-imports": "*", "prettier-plugin-style-order": "*", "prettier-plugin-svelte": "*" }, @@ -7084,6 +7106,9 @@ "@trivago/prettier-plugin-sort-imports": { "optional": true }, + "@zackad/prettier-plugin-twig-melody": { + "optional": true + }, "prettier-plugin-astro": { "optional": true }, @@ -7105,13 +7130,13 @@ "prettier-plugin-organize-imports": { "optional": true }, - "prettier-plugin-style-order": { + "prettier-plugin-sort-imports": { "optional": true }, - "prettier-plugin-svelte": { + "prettier-plugin-style-order": { "optional": true }, - "prettier-plugin-twig-melody": { + "prettier-plugin-svelte": { "optional": true } } @@ -8202,6 +8227,7 @@ "version": "5.0.0-next.152", "resolved": "https://registry.npmjs.org/svelte/-/svelte-5.0.0-next.152.tgz", "integrity": "sha512-/qepboI/elf4Jg/pRM/0drsF9vwXBYqOwSpZOq+cduddU9413pDlHZODBqwrDy9xVt24tQb+1x1EMSbwI9eizA==", + "dev": true, "dependencies": { "@ampproject/remapping": "^2.2.1", "@jridgewell/sourcemap-codec": "^1.4.15", @@ -9754,7 +9780,8 @@ "node_modules/zimmerframe": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/zimmerframe/-/zimmerframe-1.1.2.tgz", - "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==" + "integrity": "sha512-rAbqEGa8ovJy4pyBxZM70hg4pE6gDgaQ0Sl9M3enG3I0d6H4XSAM3GeNGLKnsBpuijUow064sf7ww1nutC5/3w==", + "dev": true } } } diff --git a/package.json b/package.json index 8a6d506..2620914 100644 --- a/package.json +++ b/package.json @@ -35,9 +35,9 @@ "eslint-plugin-svelte": "^2.36.0", "globals": "^15.0.0", "postcss": "^8.4.35", - "prettier": "^3.2.5", - "prettier-plugin-svelte": "^3.1.2", - "prettier-plugin-tailwindcss": "^0.5.11", + "prettier": "^3.3.2", + "prettier-plugin-svelte": "^3.2.4", + "prettier-plugin-tailwindcss": "^0.6.3", "sass": "^1.70.0", "svelte": "^5.0.0-next.152", "svelte-check": "^3.6.3", @@ -49,4 +49,4 @@ "vite-plugin-pwa": "^0.17.4", "vitest": "^1.2.2" } -} \ No newline at end of file +} diff --git a/src/app.css b/src/app.css index 817ccd4..746b465 100644 --- a/src/app.css +++ b/src/app.css @@ -19,12 +19,10 @@ @layer components { [data-theme='dalpeng'] .select { - @apply hover:border-primary-light focus:border-primary rounded-none border-0 border-b-2 border-gray-300 ring-0 - transition ease-in-out focus:text-gray-700 focus:outline-none focus:ring-0; + @apply rounded-none border-0 border-b-2 border-gray-300 ring-0 transition ease-in-out hover:border-primary-light focus:border-primary focus:text-gray-700 focus:outline-none focus:ring-0; } [data-theme='dalpeng'] .input { - @apply hover:border-primary-light focus:border-primary min-h-12 rounded-none border-0 border-b-2 border-gray-300 ring-0 - transition ease-in-out focus:text-gray-700 focus:outline-none focus:ring-0; + @apply min-h-12 rounded-none border-0 border-b-2 border-gray-300 ring-0 transition ease-in-out hover:border-primary-light focus:border-primary focus:text-gray-700 focus:outline-none focus:ring-0; } [data-theme='dalpeng'] input[type='number'] { -webkit-appearance: textfield; diff --git a/src/app.d.ts b/src/app.d.ts index 1ff381a..6dd46dd 100644 --- a/src/app.d.ts +++ b/src/app.d.ts @@ -20,4 +20,4 @@ declare global { } } -export { }; +export {}; diff --git a/src/assets/fonts/FinaleJazz/FinaleJazz.css b/src/assets/fonts/FinaleJazz/FinaleJazz.css index 5972682..939b1a3 100644 --- a/src/assets/fonts/FinaleJazz/FinaleJazz.css +++ b/src/assets/fonts/FinaleJazz/FinaleJazz.css @@ -1,9 +1,9 @@ @font-face { - font-family: FinaleJazz; - src: url(FinaleJazzText.woff2); + font-family: FinaleJazz; + src: url(FinaleJazzText.woff2); } @font-face { - font-family: FinaleJazzChord; - src: url(FinaleJazzChord.woff2); -} \ No newline at end of file + font-family: FinaleJazzChord; + src: url(FinaleJazzChord.woff2); +} diff --git a/src/assets/fonts/SpoqaHanSans/SpoqaHanSansNeo.css b/src/assets/fonts/SpoqaHanSans/SpoqaHanSansNeo.css index d5c6619..6702422 100644 --- a/src/assets/fonts/SpoqaHanSans/SpoqaHanSansNeo.css +++ b/src/assets/fonts/SpoqaHanSans/SpoqaHanSansNeo.css @@ -21,48 +21,52 @@ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. */ - @font-face { - font-family: 'Spoqa Han Sans Neo'; - font-weight: 700; - src: local('Spoqa Han Sans Neo Bold'), - url('./SpoqaHanSansNeo-Bold.woff2') format('woff2'), - url('./SpoqaHanSansNeo-Bold.woff') format('woff'), - url('./SpoqaHanSansNeo-Bold.ttf') format('truetype'); +@font-face { + font-family: 'Spoqa Han Sans Neo'; + font-weight: 700; + src: + local('Spoqa Han Sans Neo Bold'), + url('./SpoqaHanSansNeo-Bold.woff2') format('woff2'), + url('./SpoqaHanSansNeo-Bold.woff') format('woff'), + url('./SpoqaHanSansNeo-Bold.ttf') format('truetype'); } - @font-face { - font-family: 'Spoqa Han Sans Neo'; - font-weight: 500; - src: local('Spoqa Han Sans Neo Medium'), - url('./SpoqaHanSansNeo-Medium.woff2') format('woff2'), - url('./SpoqaHanSansNeo-Medium.woff') format('woff'), - url('./SpoqaHanSansNeo-Medium.ttf') format('truetype'); + font-family: 'Spoqa Han Sans Neo'; + font-weight: 500; + src: + local('Spoqa Han Sans Neo Medium'), + url('./SpoqaHanSansNeo-Medium.woff2') format('woff2'), + url('./SpoqaHanSansNeo-Medium.woff') format('woff'), + url('./SpoqaHanSansNeo-Medium.ttf') format('truetype'); } @font-face { - font-family: 'Spoqa Han Sans Neo'; - font-weight: 400; - src: local('Spoqa Han Sans Neo Regular'), - url('./SpoqaHanSansNeo-Regular.woff2') format('woff2'), - url('./SpoqaHanSansNeo-Regular.woff') format('woff'), - url('./SpoqaHanSansNeo-Regular.ttf') format('truetype'); + font-family: 'Spoqa Han Sans Neo'; + font-weight: 400; + src: + local('Spoqa Han Sans Neo Regular'), + url('./SpoqaHanSansNeo-Regular.woff2') format('woff2'), + url('./SpoqaHanSansNeo-Regular.woff') format('woff'), + url('./SpoqaHanSansNeo-Regular.ttf') format('truetype'); } @font-face { - font-family: 'Spoqa Han Sans Neo'; - font-weight: 300; - src: local('Spoqa Han Sans Neo Light'), - url('./SpoqaHanSansNeo-Light.woff2') format('woff2'), - url('./SpoqaHanSansNeo-Light.woff') format('woff'), - url('./SpoqaHanSansNeo-Light.ttf') format('truetype'); + font-family: 'Spoqa Han Sans Neo'; + font-weight: 300; + src: + local('Spoqa Han Sans Neo Light'), + url('./SpoqaHanSansNeo-Light.woff2') format('woff2'), + url('./SpoqaHanSansNeo-Light.woff') format('woff'), + url('./SpoqaHanSansNeo-Light.ttf') format('truetype'); } @font-face { - font-family: 'Spoqa Han Sans Neo'; - font-weight: 100; - src: local('Spoqa Han Sans Neo Thin'), - url('./SpoqaHanSansNeo-Thin.woff2') format('woff2'), - url('./SpoqaHanSansNeo-Thin.woff') format('woff'), - url('./SpoqaHanSansNeo-Thin.ttf') format('truetype'); -} \ No newline at end of file + font-family: 'Spoqa Han Sans Neo'; + font-weight: 100; + src: + local('Spoqa Han Sans Neo Thin'), + url('./SpoqaHanSansNeo-Thin.woff2') format('woff2'), + url('./SpoqaHanSansNeo-Thin.woff') format('woff'), + url('./SpoqaHanSansNeo-Thin.ttf') format('truetype'); +} diff --git a/src/lib/canvas/Canvas.svelte b/src/lib/canvas/Canvas.svelte index 1b98a3b..bc4a5e4 100644 --- a/src/lib/canvas/Canvas.svelte +++ b/src/lib/canvas/Canvas.svelte @@ -4,10 +4,15 @@ import type { Snippet } from 'svelte'; interface CanvasProps { - children: Snippet + children: Snippet; } - const { width = 100, height = 100, children, ...rest }: CanvasProps & HTMLCanvasAttributes = $props(); + const { + width = 100, + height = 100, + children, + ...rest + }: CanvasProps & HTMLCanvasAttributes = $props(); let canvas: HTMLCanvasElement; setCanvasContext(() => canvas); diff --git a/src/routes/practice/(practice)/[category]/+page.svelte b/src/routes/practice/(practice)/[category]/+page.svelte index 8c76075..46e72f3 100644 --- a/src/routes/practice/(practice)/[category]/+page.svelte +++ b/src/routes/practice/(practice)/[category]/+page.svelte @@ -1 +1 @@ -category \ No newline at end of file +category diff --git a/test/music/chords.test.ts b/test/music/chords.test.ts index 2630610..0626844 100644 --- a/test/music/chords.test.ts +++ b/test/music/chords.test.ts @@ -2,6 +2,6 @@ import { describe, it } from 'vitest'; describe('hi', () => { it('hi', () => { - console.log('hi') - }); + console.log('hi'); + }); }); From 666e80158e1c7cfb0cbc6d70e9c5d80e7c8c6b9d Mon Sep 17 00:00:00 2001 From: Kim Jeong-won Date: Wed, 12 Jun 2024 15:58:39 +0900 Subject: [PATCH 5/8] fix: prevent from showing tailwind at rules warning --- .vscode/settings.json | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .vscode/settings.json diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..bc31e15 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,5 @@ +{ + "files.associations": { + "*.css": "tailwindcss" + } +} From c42cae0b75f5a12e79fcfeebf3eeb3cf49f2d21c Mon Sep 17 00:00:00 2001 From: Kim Jeong-won Date: Wed, 12 Jun 2024 16:03:46 +0900 Subject: [PATCH 6/8] refact: migrate Metronome to runes --- .../device/metronome/MetronomeBeats.svelte | 8 +++--- .../device/metronome/MetronomeOptions.svelte | 22 ++++++++++++---- .../metronome/MetronomePlayButton.svelte | 12 ++++++--- .../device/metronome/MetronomeProvider.svelte | 11 +++++--- src/lib/ui/PlusMinusBarButton.svelte | 25 +++++++++++++------ src/routes/tools/metronome/+layout.svelte | 10 ++++++-- 6 files changed, 63 insertions(+), 25 deletions(-) diff --git a/src/lib/device/metronome/MetronomeBeats.svelte b/src/lib/device/metronome/MetronomeBeats.svelte index 442c27e..e11f878 100644 --- a/src/lib/device/metronome/MetronomeBeats.svelte +++ b/src/lib/device/metronome/MetronomeBeats.svelte @@ -20,14 +20,14 @@ {#each new Array(beatPerBar) as _, i} {#if i === 0} {#if i === currentBeat - 1} -
+
{:else} -
+
{/if} {:else if i === currentBeat - 1} -
+
{:else} -
+
{/if} {/each}
diff --git a/src/lib/device/metronome/MetronomeOptions.svelte b/src/lib/device/metronome/MetronomeOptions.svelte index 097a277..4256822 100644 --- a/src/lib/device/metronome/MetronomeOptions.svelte +++ b/src/lib/device/metronome/MetronomeOptions.svelte @@ -2,9 +2,17 @@ import PlusMinusBarButton from '$/lib/ui/PlusMinusBarButton.svelte'; import { getMetronomeContext } from './context'; + interface MetronomeOptionsProps { + bpm?: number; + beatPerBar?: number; + } + const metronome = getMetronomeContext(); - export let bpm = metronome.timer.bpm; - export let beatPerBar = metronome.timer.beatPerBar; + + let { + bpm = metronome.timer.bpm, + beatPerBar = metronome.timer.beatPerBar + }: MetronomeOptionsProps = $props(); metronome.timer.onTempoChanged((state) => { bpm = state.bpm; @@ -14,8 +22,12 @@ let lastTapTimestamp = -1; let tapIntervalStore: number[] = []; - $: metronome.timer.bpm = bpm; - $: metronome.timer.beatPerBar = beatPerBar; + $effect(() => { + metronome.timer.bpm = bpm; + }); + $effect(() => { + metronome.timer.beatPerBar = beatPerBar; + });
@@ -41,7 +53,7 @@