diff --git a/client/.prettierrc b/client/.prettierrc index eefba5a..bfc7ceb 100644 --- a/client/.prettierrc +++ b/client/.prettierrc @@ -6,7 +6,13 @@ "printWidth": 100, "arrowParens": "avoid", "plugins": ["prettier-plugin-svelte"], - "pluginSearchDirs": ["."], - "overrides": [{ "files": "*.svelte", "options": { "parser": "svelte" } }], + "overrides": [ + { + "files": "*.svelte", + "options": { + "parser": "svelte" + } + } + ], "htmlWhitespaceSensitivity": "ignore" } diff --git a/client/index.html b/client/index.html index f816ce6..8b31fb4 100644 --- a/client/index.html +++ b/client/index.html @@ -1,24 +1,36 @@ - + - - - - - - - DDNet Map Editor - - - - - - - - - - - - - - - \ No newline at end of file + + + + + + DDNet Map Editor + + + + + + + + + + + + + diff --git a/client/package-lock.json b/client/package-lock.json index 2ad4b0d..769b26b 100644 --- a/client/package-lock.json +++ b/client/package-lock.json @@ -1,106 +1,143 @@ { "name": "twwe-client", - "version": "1.0.0", - "lockfileVersion": 2, + "version": "0.1.1", + "lockfileVersion": 3, "requires": true, "packages": { "": { "name": "twwe-client", - "version": "1.0.0", + "version": "0.1.1", + "dependencies": { + "@sveltejs/vite-plugin-svelte": "^3.1.2", + "sass-embedded": "^1.80.3" + }, "devDependencies": { - "@carbon/styles": "^1.37.0", - "@poppanator/sveltekit-svg": "^4.1.3", - "@sveltejs/vite-plugin-svelte": "^2.4.5", - "@tsconfig/svelte": "^5.0.2", - "@types/js-md5": "^0.7.0", - "@types/pako": "^2.0.0", - "carbon-components": "^10.58.10", - "carbon-components-svelte": "^0.80.0", - "carbon-icons-svelte": "^12.3.0", - "carbon-preprocess-svelte": "^0.10.0", + "@carbon/styles": "^1.67.0", + "@carbon/themes": "^11.42.0", + "@codemirror/language": "^6.10.3", + "@codemirror/lint": "^6.8.2", + "@lezer/highlight": "^1.2.1", + "@lezer/lr": "^1.4.2", + "@poppanator/sveltekit-svg": "^4.2.1", + "@tsconfig/svelte": "^5.0.4", + "@types/js-md5": "^0.7.2", + "@types/pako": "^2.0.3", + "carbon-components-svelte": "^0.85.2", + "carbon-icons-svelte": "^12.12.0", + "carbon-preprocess-svelte": "^0.11.7", "codemirror": "^6.0.1", "crc": "^4.3.2", "gl-matrix": "^3.4.3", - "js-md5": "^0.7.3", + "js-md5": "^0.8.3", "pako": "^2.1.0", - "prettier": "^3.0.3", - "prettier-plugin-svelte": "^3.0.3", - "random-words": "^2.0.0", - "sass": "^1.66.1", - "svelte": "^4.2.0", - "svelte-check": "^3.5.1", - "svelte-preprocess": "^5.0.4", - "svelte-preprocess-import-assets": "^1.0.1", - "svelte-routing": "^2.2.0", - "svelte-sequential-preprocessor": "^2.0.1", - "svelte-splitpanes": "^0.8.0", - "svgo": "^3.0.2", - "tslib": "^2.6.2", - "typescript": "^5.2.2", - "vite": "^4.4.9", - "vite-imagetools": "^5.0.8" + "prettier": "^3.3.3", + "prettier-plugin-svelte": "^3.2.7", + "random-words": "^2.0.1", + "svelte": "^4.2.19", + "svelte-check": "^4.0.5", + "svelte-preprocess": "^6.0.3", + "svelte-preprocess-import-assets": "^1.1.0", + "svelte-routing": "^2.13.0", + "svelte-sequential-preprocessor": "^2.0.2", + "svelte-splitpanes": "^8.0.3", + "svgo": "^3.3.2", + "typescript": "^5.6.3", + "vite": "^5.4.9", + "vite-imagetools": "^7.0.4" } }, "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", + "license": "Apache-2.0", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, + "node_modules/@bufbuild/protobuf": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@bufbuild/protobuf/-/protobuf-2.2.0.tgz", + "integrity": "sha512-+imAQkHf7U/Rwvu0wk1XWgsP3WnpCWmK7B48f0XqSNzgk64+grljTKC7pnO/xBiEMUziF7vKRfbBnOQhg126qQ==", + "license": "(Apache-2.0 AND BSD-3-Clause)" + }, "node_modules/@carbon/colors": { - "version": "11.19.0", - "resolved": "https://registry.npmjs.org/@carbon/colors/-/colors-11.19.0.tgz", - "integrity": "sha512-cRDnv9GfktZo+p/t/Lsy2B3yvMbDI1Ht2ECU0rAikClQHVnOffz791Q4m2gy2STPdISnzjFSPmoRxGKLfYhLRA==", - "dev": true + "version": "11.27.0", + "resolved": "https://registry.npmjs.org/@carbon/colors/-/colors-11.27.0.tgz", + "integrity": "sha512-4H1Lfuw1WJYndoCSn+HOoA8JPW0old41FtuKgK+okc/QXmTpw21tK7KL6D+Yu68JEWAksEPssKUeggLAgWkYjA==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@ibm/telemetry-js": "^1.5.0" + } }, "node_modules/@carbon/feature-flags": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@carbon/feature-flags/-/feature-flags-0.16.0.tgz", - "integrity": "sha512-hCrfVZ6oVnPjjupelbvQX4D0i6GlZuKVverAf0LkOydXHrPjSyuEmg+czsylyCBg4r/hxtSTu91Tq6aqz/DsHg==", - "dev": true + "version": "0.23.0", + "resolved": "https://registry.npmjs.org/@carbon/feature-flags/-/feature-flags-0.23.0.tgz", + "integrity": "sha512-p98iYUNHPvBQ543hAZ2fbBedYegy3N58eemcqsexWaX0mDdbJNwZCc1fN/HtLvrgKqt70Mal/FKJHlocNRyaNA==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@ibm/telemetry-js": "^1.5.0" + } }, "node_modules/@carbon/grid": { - "version": "11.19.0", - "resolved": "https://registry.npmjs.org/@carbon/grid/-/grid-11.19.0.tgz", - "integrity": "sha512-Ie8C0yifTPOF58rhkeRhINJ6KPiTVbdJwPCE+aEWTpUrwGSnuqIYZ8zQBlYQtNGQX72TSfnGY0qijPmpnIwNsg==", + "version": "11.28.0", + "resolved": "https://registry.npmjs.org/@carbon/grid/-/grid-11.28.0.tgz", + "integrity": "sha512-J0E8gGYOOlNfKB4Omks9fJdAI5CmzWF6JvCDndTCcpq58By1atQt9n1C1jvo8iHf84ZDoU1Vd6+ZB9u4fXKdNg==", "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { - "@carbon/layout": "^11.19.0" + "@carbon/layout": "^11.27.0", + "@ibm/telemetry-js": "^1.5.0" } }, "node_modules/@carbon/layout": { - "version": "11.19.0", - "resolved": "https://registry.npmjs.org/@carbon/layout/-/layout-11.19.0.tgz", - "integrity": "sha512-BI9ct+yVKrgL90l4nijMhj8dokXGBJu1Xtve9fz/lcveTyxxn7YvRu8mosGhCyw77KSU6vN2yRLJnQwqwqrLJQ==", - "dev": true + "version": "11.27.0", + "resolved": "https://registry.npmjs.org/@carbon/layout/-/layout-11.27.0.tgz", + "integrity": "sha512-o2++xUe2Wfg1nzneLl8ucbep9ObUE6vEgwlifVdOpvCti6zlsRjti5ojtYpx3v0yW2Qh7TJH8OYN7CyZDLeZUw==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@ibm/telemetry-js": "^1.5.0" + } }, "node_modules/@carbon/motion": { - "version": "11.15.0", - "resolved": "https://registry.npmjs.org/@carbon/motion/-/motion-11.15.0.tgz", - "integrity": "sha512-l7SIZMwTmv8BHPvDsQ26Y/dBLKnLGZUvD5bGcDppoUInUcKv2Dg4J0r5JONUsB2OagpBmbj/a5skcahzlaL1JQ==", - "dev": true + "version": "11.23.0", + "resolved": "https://registry.npmjs.org/@carbon/motion/-/motion-11.23.0.tgz", + "integrity": "sha512-zPxO/lp9FaHET967NHTbQ7pvmqATIQcsiM8WxzNuF2UUNlw6oRL/LMro1eZC9OgKAnyTXRUoxdtYphMhFOXWpA==", + "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@ibm/telemetry-js": "^1.5.0" + } }, "node_modules/@carbon/styles": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/@carbon/styles/-/styles-1.37.0.tgz", - "integrity": "sha512-CnyogtEBGr4F6yrXntLYCcdiBEjJ+dUqpycOWZbrqa6b2X/3hRpr8xgTc39Af0u/HyTQ1MJf3ck5QFPy9bwTRg==", + "version": "1.67.0", + "resolved": "https://registry.npmjs.org/@carbon/styles/-/styles-1.67.0.tgz", + "integrity": "sha512-enFC5f4VS9pxGZBe1GkUfcbHIgXUAGkRxijN2f5fNtes3/TcPWR1/RGVIelrgjolX5R4keokrrViEOclCsRLmQ==", "dev": true, - "dependencies": { - "@carbon/colors": "^11.19.0", - "@carbon/feature-flags": "^0.16.0", - "@carbon/grid": "^11.19.0", - "@carbon/layout": "^11.19.0", - "@carbon/motion": "^11.15.0", - "@carbon/themes": "^11.24.0", - "@carbon/type": "^11.23.0", - "@ibm/plex": "6.0.0-next.6" + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { + "@carbon/colors": "^11.27.0", + "@carbon/feature-flags": "^0.23.0", + "@carbon/grid": "^11.28.0", + "@carbon/layout": "^11.27.0", + "@carbon/motion": "^11.23.0", + "@carbon/themes": "^11.42.0", + "@carbon/type": "^11.32.0", + "@ibm/plex": "6.0.0-next.6", + "@ibm/telemetry-js": "^1.5.0" }, "peerDependencies": { "sass": "^1.33.0" @@ -111,46 +148,44 @@ } } }, - "node_modules/@carbon/telemetry": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@carbon/telemetry/-/telemetry-0.1.0.tgz", - "integrity": "sha512-kNWt0bkgPwGW0i5h7HFuljbKRXPvIhsKbB+1tEURAYLXoJg9iJLF1eGvWN5iVoFCS2zje4GR3OGOsvvKVe7Hlg==", - "dev": true, - "bin": { - "carbon-telemetry": "bin/carbon-telemetry.js" - } - }, "node_modules/@carbon/themes": { - "version": "11.24.0", - "resolved": "https://registry.npmjs.org/@carbon/themes/-/themes-11.24.0.tgz", - "integrity": "sha512-afVMSQ8by3yR4646UNwOmVGeyI8n0dIvehpuy4IUGQ52WXsRuveMY/F6KpATy0OadJR/C/7SZo2mqI7L8aTREA==", + "version": "11.42.0", + "resolved": "https://registry.npmjs.org/@carbon/themes/-/themes-11.42.0.tgz", + "integrity": "sha512-f9MslPl8tti9lfx3PLK9GwkJH2D1BXd2nqdLQu0yOELoN92aQiv2eU7ZfJZm6Kuvn1vNoKJpbBey8MmWhEGA8Q==", "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { - "@carbon/colors": "^11.19.0", - "@carbon/layout": "^11.19.0", - "@carbon/type": "^11.23.0", + "@carbon/colors": "^11.27.0", + "@carbon/layout": "^11.27.0", + "@carbon/type": "^11.32.0", + "@ibm/telemetry-js": "^1.5.0", "color": "^4.0.0" } }, "node_modules/@carbon/type": { - "version": "11.23.0", - "resolved": "https://registry.npmjs.org/@carbon/type/-/type-11.23.0.tgz", - "integrity": "sha512-bp3D2q7Su03B2Re5CHt0OdNNmAbTOJaBgKgRKKdLP97F+M27y/kk9iOAFctC0pCgmQ2qSndWRTSb3zVg5TmiEw==", + "version": "11.32.0", + "resolved": "https://registry.npmjs.org/@carbon/type/-/type-11.32.0.tgz", + "integrity": "sha512-av09976fl4YlaO4HEDs0RG17sg5X0TJbb9m9HfugZjNKDHFbWo87oGLmvgh4J+/ewkC40Wnp24rAewPEaYKFGw==", "dev": true, + "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { - "@carbon/grid": "^11.19.0", - "@carbon/layout": "^11.19.0" + "@carbon/grid": "^11.28.0", + "@carbon/layout": "^11.27.0", + "@ibm/telemetry-js": "^1.5.0" } }, "node_modules/@codemirror/autocomplete": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.9.0.tgz", - "integrity": "sha512-Fbwm0V/Wn3BkEJZRhr0hi5BhCo5a7eBL6LYaliPjOSwCyfOpnjXY59HruSxOUNV+1OYer0Tgx1zRNQttjXyDog==", + "version": "6.18.1", + "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.18.1.tgz", + "integrity": "sha512-iWHdj/B1ethnHRTwZj+C1obmmuCzquH29EbcKr0qIjA9NfDeBDJ7vs+WOHsFeLeflE4o+dHfYndJloMKHUkWUA==", "dev": true, + "license": "MIT", "dependencies": { "@codemirror/language": "^6.0.0", "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.6.0", + "@codemirror/view": "^6.17.0", "@lezer/common": "^1.0.0" }, "peerDependencies": { @@ -161,36 +196,39 @@ } }, "node_modules/@codemirror/commands": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.2.4.tgz", - "integrity": "sha512-42lmDqVH0ttfilLShReLXsDfASKLXzfyC36bzwcqzox9PlHulMcsUOfHXNo2X2aFMVNUoQ7j+d4q5bnfseYoOA==", + "version": "6.7.1", + "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.7.1.tgz", + "integrity": "sha512-llTrboQYw5H4THfhN4U3qCnSZ1SOJ60ohhz+SzU0ADGtwlc533DtklQP0vSFaQuCPDn3BPpOd1GbbnUtwNjsrw==", "dev": true, + "license": "MIT", "dependencies": { "@codemirror/language": "^6.0.0", - "@codemirror/state": "^6.2.0", - "@codemirror/view": "^6.0.0", - "@lezer/common": "^1.0.0" + "@codemirror/state": "^6.4.0", + "@codemirror/view": "^6.27.0", + "@lezer/common": "^1.1.0" } }, "node_modules/@codemirror/language": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.8.0.tgz", - "integrity": "sha512-r1paAyWOZkfY0RaYEZj3Kul+MiQTEbDvYqf8gPGaRvNneHXCmfSaAVFjwRUPlgxS8yflMxw2CTu6uCMp8R8A2g==", + "version": "6.10.3", + "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.10.3.tgz", + "integrity": "sha512-kDqEU5sCP55Oabl6E7m5N+vZRoc0iWqgDVhEKifcHzPzjqCegcO4amfrYVL9PmPZpl4G0yjkpTpUO/Ui8CzO8A==", "dev": true, + "license": "MIT", "dependencies": { "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.0.0", - "@lezer/common": "^1.0.0", + "@codemirror/view": "^6.23.0", + "@lezer/common": "^1.1.0", "@lezer/highlight": "^1.0.0", "@lezer/lr": "^1.0.0", "style-mod": "^4.0.0" } }, "node_modules/@codemirror/lint": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.4.0.tgz", - "integrity": "sha512-6VZ44Ysh/Zn07xrGkdtNfmHCbGSHZzFBdzWi0pbd7chAQ/iUcpLGX99NYRZTa7Ugqg4kEHCqiHhcZnH0gLIgSg==", + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.8.2.tgz", + "integrity": "sha512-PDFG5DjHxSEjOXk9TQYYVjZDqlZTFaDBfhQixHnQOEVDDNHUbEh/hstAjcQJaA6FQdZTD1hquXTK0rVBLADR1g==", "dev": true, + "license": "MIT", "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", @@ -198,10 +236,11 @@ } }, "node_modules/@codemirror/search": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.1.tgz", - "integrity": "sha512-4jupk4JwkeVbrN2pStY74q6OJEYqwosB4koA66nyLeVedadtX9MHI38j2vbYmnfDGurDApP3OZO46MrWalcjiQ==", + "version": "6.5.6", + "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.6.tgz", + "integrity": "sha512-rpMgcsh7o0GuCDUXKPvww+muLA1pDJaFrpq/CCHtpQJYz8xopu4D1hPcKRoDD0YlF8gZaqTNIRa4VRBWyhyy7Q==", "dev": true, + "license": "MIT", "dependencies": { "@codemirror/state": "^6.0.0", "@codemirror/view": "^6.0.0", @@ -209,30 +248,59 @@ } }, "node_modules/@codemirror/state": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.2.1.tgz", - "integrity": "sha512-RupHSZ8+OjNT38zU9fKH2sv+Dnlr8Eb8sl4NOnnqz95mCFTZUaiRP8Xv5MeeaG0px2b8Bnfe7YGwCV3nsBhbuw==", - "dev": true + "version": "6.4.1", + "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.4.1.tgz", + "integrity": "sha512-QkEyUiLhsJoZkbumGZlswmAhA7CBU02Wrz7zvH4SrcifbsqwlXShVXg65f3v/ts57W3dqyamEriMhij1Z3Zz4A==", + "dev": true, + "license": "MIT" }, "node_modules/@codemirror/view": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.16.0.tgz", - "integrity": "sha512-1Z2HkvkC3KR/oEZVuW9Ivmp8TWLzGEd8T8TA04TTwPvqogfkHBdYSlflytDOqmkUxM2d1ywTg7X2dU5mC+SXvg==", + "version": "6.34.1", + "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.34.1.tgz", + "integrity": "sha512-t1zK/l9UiRqwUNPm+pdIT0qzJlzuVckbTEMVNFhfWkGiBQClstzg+78vedCvLSX0xJEZ6lwZbPpnljL7L6iwMQ==", "dev": true, + "license": "MIT", "dependencies": { - "@codemirror/state": "^6.1.4", - "style-mod": "^4.0.0", + "@codemirror/state": "^6.4.0", + "style-mod": "^4.1.0", "w3c-keyname": "^2.2.4" } }, + "node_modules/@emnapi/runtime": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@emnapi/runtime/-/runtime-1.3.1.tgz", + "integrity": "sha512-kEBmG8KyqtxJZv+ygbEim+KCGtIq1fC22Ms3S4ziXmYKm8uyoLX0MHONVKwp+9opg390VaKRNt4a7A9NwmpNhw==", + "dev": true, + "license": "MIT", + "optional": true, + "dependencies": { + "tslib": "^2.4.0" + } + }, + "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" + ], + "license": "MIT", + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", + "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" @@ -242,13 +310,13 @@ } }, "node_modules/@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", + "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" @@ -258,13 +326,13 @@ } }, "node_modules/@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", + "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" @@ -274,13 +342,13 @@ } }, "node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "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" @@ -290,13 +358,13 @@ } }, "node_modules/@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", + "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" @@ -306,13 +374,13 @@ } }, "node_modules/@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", + "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" @@ -322,13 +390,13 @@ } }, "node_modules/@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", + "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" @@ -338,13 +406,13 @@ } }, "node_modules/@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", + "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" @@ -354,13 +422,13 @@ } }, "node_modules/@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", + "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" @@ -370,13 +438,13 @@ } }, "node_modules/@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", + "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" @@ -386,13 +454,13 @@ } }, "node_modules/@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", + "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" @@ -402,13 +470,13 @@ } }, "node_modules/@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", + "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" @@ -418,13 +486,13 @@ } }, "node_modules/@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", + "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" @@ -434,13 +502,13 @@ } }, "node_modules/@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", + "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" @@ -450,13 +518,13 @@ } }, "node_modules/@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", + "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" @@ -466,13 +534,13 @@ } }, "node_modules/@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", + "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", "optional": true, "os": [ "linux" @@ -482,13 +550,13 @@ } }, "node_modules/@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", + "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": "MIT", "optional": true, "os": [ "netbsd" @@ -498,13 +566,13 @@ } }, "node_modules/@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", + "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", "optional": true, "os": [ "openbsd" @@ -514,13 +582,13 @@ } }, "node_modules/@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", + "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", "optional": true, "os": [ "sunos" @@ -530,13 +598,13 @@ } }, "node_modules/@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", + "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", "optional": true, "os": [ "win32" @@ -546,13 +614,13 @@ } }, "node_modules/@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", + "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", "optional": true, "os": [ "win32" @@ -562,13 +630,13 @@ } }, "node_modules/@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", + "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": "MIT", "optional": true, "os": [ "win32" @@ -582,2385 +650,784 @@ "resolved": "https://registry.npmjs.org/@ibm/plex/-/plex-6.0.0-next.6.tgz", "integrity": "sha512-B3uGruTn2rS5gweynLmfSe7yCawSRsJguJJQHVQiqf4rh2RNgJFu8YLE2Zd/JHV0ZXoVMOslcXP2k3hMkxKEyA==", "dev": true, + "license": "OFL-1.1", "engines": { "node": ">=14" } }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "node_modules/@ibm/telemetry-js": { + "version": "1.6.1", + "resolved": "https://registry.npmjs.org/@ibm/telemetry-js/-/telemetry-js-1.6.1.tgz", + "integrity": "sha512-ds45f2bz4qVvJPK84VcSMJTvTZI+qXu6wVlBcy9/hAlmzOcxeX6rh8W0De4H133HPONsZWvs0lV/H2aUcznCxw==", "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" + "license": "Apache-2.0", + "bin": { + "ibmtelemetry": "dist/collect.js" } }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "node_modules/@img/sharp-darwin-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-arm64/-/sharp-darwin-arm64-0.33.5.tgz", + "integrity": "sha512-UT4p+iz/2H4twwAoLCqfA9UH5pI6DggwKEGuaPy7nCVQ8ZsiY5PIcrRvD1DzuY3qYL07NtIQcWnBSY/heikIFQ==", + "cpu": [ + "arm64" + ], "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=6.0.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-arm64": "1.0.4" } }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "node_modules/@img/sharp-darwin-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-darwin-x64/-/sharp-darwin-x64-0.33.5.tgz", + "integrity": "sha512-fyHac4jIc1ANYGRDxtiqelIbdWkIuQaI84Mv45KvGRRxSAa7o7d1ZKAOBaYbnepLC1WqxfpimdeWfvqqSGwR2Q==", + "cpu": [ + "x64" + ], "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=6.0.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-darwin-x64": "1.0.4" } }, - "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==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", + "node_modules/@img/sharp-libvips-darwin-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-arm64/-/sharp-libvips-darwin-arm64-1.0.4.tgz", + "integrity": "sha512-XblONe153h0O2zuFfTAbQYAX2JhYmDHeWikp1LM9Hul9gVPjFY427k6dFEcOL72O01QxQsWi761svJ/ev9xEDg==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@lezer/common": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.0.3.tgz", - "integrity": "sha512-JH4wAXCgUOcCGNekQPLhVeUtIqjH0yPBs7vvUdSjyQama9618IOKFJwkv2kcqdhF0my8hQEgCTEJU0GIgnahvA==", - "dev": true + "node_modules/@img/sharp-libvips-darwin-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-darwin-x64/-/sharp-libvips-darwin-x64-1.0.4.tgz", + "integrity": "sha512-xnGR8YuZYfJGmWPvmlunFaWJsb9T/AO2ykoP3Fz/0X5XV2aoYBPkX6xqCQvUTKKiLddarLaxpzNe+b1hjeWHAQ==", + "cpu": [ + "x64" + ], + "dev": true, + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "darwin" + ], + "funding": { + "url": "https://opencollective.com/libvips" + } }, - "node_modules/@lezer/highlight": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.1.6.tgz", - "integrity": "sha512-cmSJYa2us+r3SePpRCjN5ymCqCPv+zyXmDl0ciWtVaNiORT/MxM7ZgOMQZADD0o51qOaOg24qc/zBViOIwAjJg==", + "node_modules/@img/sharp-libvips-linux-arm": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm/-/sharp-libvips-linux-arm-1.0.5.tgz", + "integrity": "sha512-gvcC4ACAOPRNATg/ov8/MnbxFDJqf/pDePbBnuBDcjsI8PssmjoKMAz4LtLaVi+OnSb5FK/yIOamqDwGmXW32g==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@lezer/common": "^1.0.0" + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@lezer/lr": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.3.9.tgz", - "integrity": "sha512-XPz6dzuTHlnsbA5M2DZgjflNQ+9Hi5Swhic0RULdp3oOs3rh6bqGZolosVqN/fQIT8uNiepzINJDnS39oweTHQ==", + "node_modules/@img/sharp-libvips-linux-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-arm64/-/sharp-libvips-linux-arm64-1.0.4.tgz", + "integrity": "sha512-9B+taZ8DlyyqzZQnoeIvDVR/2F4EbMepXMc/NdVbkzsJbzkUjhXv/70GQJ7tdLA4YJgNP25zukcxpX2/SueNrA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@lezer/common": "^1.0.0" + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "node_modules/@img/sharp-libvips-linux-s390x": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-s390x/-/sharp-libvips-linux-s390x-1.0.4.tgz", + "integrity": "sha512-u7Wz6ntiSSgGSGcjZ55im6uvTrOxSIS8/dgoVMoiGE9I6JAfU50yH5BoDlYA1tcuGS7g/QNtetJnxA6QEsCVTA==", + "cpu": [ + "s390x" + ], "dev": true, - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "node_modules/@img/sharp-libvips-linux-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linux-x64/-/sharp-libvips-linux-x64-1.0.4.tgz", + "integrity": "sha512-MmWmQ3iPFZr0Iev+BAgVMb3ZyC4KeFc3jFxnNbEPas60e1cIfevbtuyf9nDGIzOaW9PdnDciJm+wFFaTlj5xYw==", + "cpu": [ + "x64" + ], "dev": true, - "engines": { - "node": ">= 8" + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "node_modules/@img/sharp-libvips-linuxmusl-arm64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-arm64/-/sharp-libvips-linuxmusl-arm64-1.0.4.tgz", + "integrity": "sha512-9Ti+BbTYDcsbp4wfYib8Ctm1ilkugkA/uscUn6UXK1ldpC1JjiXbLfFZtRlBhjPZ5o1NCLiDbg8fhUPKStHoTA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@poppanator/sveltekit-svg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@poppanator/sveltekit-svg/-/sveltekit-svg-4.1.3.tgz", - "integrity": "sha512-cKdFxFPPzS470xy2XFQ2m/URa9On4fw7n5wvBqAwVO4sY8dmski+2N3GKFELt4tvzM3JPjAqz76Ex7U5IpKeIg==", + "node_modules/@img/sharp-libvips-linuxmusl-x64": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/@img/sharp-libvips-linuxmusl-x64/-/sharp-libvips-linuxmusl-x64-1.0.4.tgz", + "integrity": "sha512-viYN1KX9m+/hGkJtvYYp+CCLgnJXwiQB39damAO7WMdKWlIhmYTfHjwSbQeUK/20vY154mwezd9HflVFM1wVSw==", + "cpu": [ + "x64" + ], "dev": true, - "peerDependencies": { - "svelte": ">=4.x", - "svgo": ">=3.x", - "vite": ">=4.x" + "license": "LGPL-3.0-or-later", + "optional": true, + "os": [ + "linux" + ], + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/@sveltejs/vite-plugin-svelte": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.5.tgz", - "integrity": "sha512-UJKsFNwhzCVuiZd06jM/psscyNJNDwjQC+qIeb7GBJK9iWeQCcIyfcPWDvbCudfcJggY9jtxJeeaZH7uny93FQ==", + "node_modules/@img/sharp-linux-arm": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm/-/sharp-linux-arm-0.33.5.tgz", + "integrity": "sha512-JTS1eldqZbJxjvKaAkxhZmBqPRGmxgu+qFKSInv8moZ2AmT5Yib3EQ1c6gp493HvrvV8QgdOXdyaIBrhvFhBMQ==", + "cpu": [ + "arm" + ], "dev": true, - "dependencies": { - "@sveltejs/vite-plugin-svelte-inspector": "^1.0.3", - "debug": "^4.3.4", - "deepmerge": "^4.3.1", - "kleur": "^4.1.5", - "magic-string": "^0.30.2", - "svelte-hmr": "^0.15.3", - "vitefu": "^0.2.4" - }, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^14.18.0 || >= 16" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, - "peerDependencies": { - "svelte": "^3.54.0 || ^4.0.0", - "vite": "^4.0.0" + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm": "1.0.5" } }, - "node_modules/@sveltejs/vite-plugin-svelte-inspector": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.4.tgz", - "integrity": "sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==", + "node_modules/@img/sharp-linux-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-arm64/-/sharp-linux-arm64-0.33.5.tgz", + "integrity": "sha512-JMVv+AMRyGOHtO1RFBiJy/MBsgz0x4AWrT6QoEVVTyh1E39TrCUpTRI7mx9VksGX4awWASxqCYLCV4wBZHAYxA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "debug": "^4.3.4" - }, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "^14.18.0 || >= 16" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, - "peerDependencies": { - "@sveltejs/vite-plugin-svelte": "^2.2.0", - "svelte": "^3.54.0 || ^4.0.0", - "vite": "^4.0.0" + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-arm64": "1.0.4" } }, - "node_modules/@trysound/sax": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", - "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", + "node_modules/@img/sharp-linux-s390x": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-s390x/-/sharp-linux-s390x-0.33.5.tgz", + "integrity": "sha512-y/5PCd+mP4CA/sPDKl2961b+C9d+vPAveS33s6Z3zfASk2j5upL6fXVPZi7ztePZ5CuH+1kW8JtvxgbuXHRa4Q==", + "cpu": [ + "s390x" + ], "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10.13.0" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-s390x": "1.0.4" } }, - "node_modules/@tsconfig/svelte": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-5.0.2.tgz", - "integrity": "sha512-BRbo1fOtyVbhfLyuCWw6wAWp+U8UQle+ZXu84MYYWzYSEB28dyfnRBIE99eoG+qdAC0po6L2ScIEivcT07UaMA==", - "dev": true - }, - "node_modules/@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "dev": true - }, - "node_modules/@types/js-md5": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@types/js-md5/-/js-md5-0.7.0.tgz", - "integrity": "sha512-4mN02EhCni6MlvCUl9bpcbMfu7R3G+ac+J37b7gKCu3tWhZc5/Ya41T+2QNR2aFt6vnMe+uTa5rFQ+nT2kl6cA==", - "dev": true - }, - "node_modules/@types/node": { - "version": "17.0.35", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.35.tgz", - "integrity": "sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg==", + "node_modules/@img/sharp-linux-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linux-x64/-/sharp-linux-x64-0.33.5.tgz", + "integrity": "sha512-opC+Ok5pRNAzuvq1AG0ar+1owsu842/Ab+4qvU879ippJBHvyY5n2mxF1izXqkPYlGuP/M556uh53jRLJmzTWA==", + "cpu": [ + "x64" + ], "dev": true, + "license": "Apache-2.0", "optional": true, - "peer": true - }, - "node_modules/@types/pako": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/pako/-/pako-2.0.0.tgz", - "integrity": "sha512-10+iaz93qR5WYxTo+PMifD5TSxiOtdRaxBf7INGGXMQgTCu8Z/7GYWYFUOS3q/G0nE5boj1r4FEB+WSy7s5gbA==", - "dev": true - }, - "node_modules/@types/pug": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz", - "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==", - "dev": true - }, - "node_modules/acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true, - "bin": { - "acorn": "bin/acorn" - }, + "os": [ + "linux" + ], "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", - "dev": true, - "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/aria-query": { - "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" + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linux-x64": "1.0.4" } }, - "node_modules/axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "node_modules/@img/sharp-linuxmusl-arm64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-arm64/-/sharp-linuxmusl-arm64-0.33.5.tgz", + "integrity": "sha512-XrHMZwGQGvJg2V/oRSUfSAfjfPxO+4DkiRh6p2AFjLQztWUuY/o8Mq0eMQVIY7HJ1CDQUJlxGGZRw1a5bqmd1g==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "dequal": "^2.0.3" + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4" } }, - "node_modules/b4a": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", - "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", - "dev": true - }, - "node_modules/balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true - }, - "node_modules/base64-js": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", - "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "node_modules/@img/sharp-linuxmusl-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-linuxmusl-x64/-/sharp-linuxmusl-x64-0.33.5.tgz", + "integrity": "sha512-WT+d/cgqKkkKySYmqoZ8y3pxx7lx9vVejxW/W4DOFMYVSkErR+w7mf2u8m/y4+xHe7yY9DAXQMWQhpnMuFfScw==", + "cpu": [ + "x64" + ], "dev": true, + "license": "Apache-2.0", + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-libvips-linuxmusl-x64": "1.0.4" } }, - "node_modules/bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", + "node_modules/@img/sharp-wasm32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-wasm32/-/sharp-wasm32-0.33.5.tgz", + "integrity": "sha512-ykUW4LVGaMcU9lu9thv85CbRMAwfeadCJHRsg2GmeRa/cJxsVY9Rbd57JcMxBkKHag5U/x7TSBpScF4U8ElVzg==", + "cpu": [ + "wasm32" + ], "dev": true, + "license": "Apache-2.0 AND LGPL-3.0-or-later AND MIT", + "optional": true, "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" + "@emnapi/runtime": "^1.2.0" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/bl/node_modules/buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", + "node_modules/@img/sharp-win32-ia32": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-ia32/-/sharp-win32-ia32-0.33.5.tgz", + "integrity": "sha512-T36PblLaTwuVJ/zw/LaH0PdZkRz5rd3SmMHX8GSmR7vtNSP5Z6bQkExdSK7xGWyxLw4sUknBuugTelgw2faBbQ==", + "cpu": [ + "ia32" + ], "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" ], - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/boolbase": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", - "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "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==", + "node_modules/@img/sharp-win32-x64": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/@img/sharp-win32-x64/-/sharp-win32-x64-0.33.5.tgz", + "integrity": "sha512-MpY/o8/8kj+EcnxwvrP4aTJSWw/aZ7JIGR4aBeZkZw5B7/Jn+tY9/VNwtcoGmdT7GfggGIU4kygOMSbYnOrAbg==", + "cpu": [ + "x64" + ], "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "license": "Apache-2.0 AND LGPL-3.0-or-later", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" } }, - "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, + "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==", + "license": "MIT", "dependencies": { - "fill-range": "^7.0.1" + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { - "node": ">=8" - } - }, - "node_modules/buffer": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", - "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "optional": true, - "peer": true, - "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.2.1" + "node": ">=6.0.0" } }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "license": "MIT", "engines": { - "node": "*" + "node": ">=6.0.0" } }, - "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, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=6.0.0" } }, - "node_modules/carbon-components": { - "version": "10.58.10", - "resolved": "https://registry.npmjs.org/carbon-components/-/carbon-components-10.58.10.tgz", - "integrity": "sha512-RnTFB5s27rTKiGELIZVF72CKCFNy6Mz3x4cU6wVifbgjYKRDVlFCyXsmo56pNIhfGi5LPFHfLl/+sc/+ImkOsg==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@carbon/telemetry": "0.1.0", - "flatpickr": "4.6.1", - "lodash.debounce": "^4.0.8", - "warning": "^3.0.0" - } + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.0.tgz", + "integrity": "sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==", + "license": "MIT" }, - "node_modules/carbon-components-svelte": { - "version": "0.80.0", - "resolved": "https://registry.npmjs.org/carbon-components-svelte/-/carbon-components-svelte-0.80.0.tgz", - "integrity": "sha512-OTk75KJGEQQLEKSvsZUk4GEYtg6ClSKVyTJPvqiBIOUJ1LVW9ZZppCAieWeBvff1GqVrPm1EDthl6YS730lONA==", - "dev": true, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "license": "MIT", "dependencies": { - "flatpickr": "4.6.9" + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" } }, - "node_modules/carbon-components/node_modules/flatpickr": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/flatpickr/-/flatpickr-4.6.1.tgz", - "integrity": "sha512-3ULSxbXmcMIRzer/2jLNweoqHpwDvsjEawO2FUd9UFR8uPwLM+LruZcPDpuZStcEgbQKhuFOfXo4nYdGladSNw==", - "dev": true - }, - "node_modules/carbon-icons-svelte": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/carbon-icons-svelte/-/carbon-icons-svelte-12.3.0.tgz", - "integrity": "sha512-RZI1nJEjnpgBka4A6zwEkNNqYfV9H7WjcyQ4JYPLoMO8a7N7mAVbaG9ngHUEahxf/byaHBp+EJD3Natf1dkylQ==", - "dev": true + "node_modules/@lezer/common": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.2.3.tgz", + "integrity": "sha512-w7ojc8ejBqr2REPsWxJjrMFsA/ysDCFICn8zEOR9mrqzOu2amhITYuLD8ag6XZf0CFXDrhKqw7+tW8cX66NaDA==", + "dev": true, + "license": "MIT" }, - "node_modules/carbon-preprocess-svelte": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/carbon-preprocess-svelte/-/carbon-preprocess-svelte-0.10.0.tgz", - "integrity": "sha512-jsmVvLcCKuxyoEkyRXvBux4JdatglTuqlDt95TiXiXmOS4XCcrHYSNiBzJ9vsOHpQIaRy8lGQxx6mh6G1lr6FQ==", + "node_modules/@lezer/highlight": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.2.1.tgz", + "integrity": "sha512-Z5duk4RN/3zuVO7Jq0pGLJ3qynpxUVsh7IbUbGj88+uV2ApSAn6kWg2au3iJb+0Zi7kKtqffIESgNcRXWZWmSA==", "dev": true, + "license": "MIT", "dependencies": { - "purgecss": "^4.1.3", - "svelte-preprocess": "^5.0.3", - "typescript": "^4.7.4" + "@lezer/common": "^1.0.0" } }, - "node_modules/carbon-preprocess-svelte/node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", + "node_modules/@lezer/lr": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.4.2.tgz", + "integrity": "sha512-pu0K1jCIdnQ12aWNaAVU5bzi7Bd1w54J3ECgANPmYLtQKP0HBj2cE/5coBD66MT10xbtIuUr7tg0Shbsvk0mDA==", "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" + "license": "MIT", + "dependencies": { + "@lezer/common": "^1.0.0" } }, - "node_modules/chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], + "node_modules/@parcel/watcher": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.4.1.tgz", + "integrity": "sha512-HNjmfLQEVRZmHRET336f20H/8kOozUGwk7yajvsonjNxbj2wBTK1WsQuHkD5yYh9RxFGL2EyDHryOihOwUoKDA==", + "license": "MIT", + "optional": true, + "peer": true, "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" }, "engines": { - "node": ">= 8.10.0" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" }, "optionalDependencies": { - "fsevents": "~2.3.2" + "@parcel/watcher-android-arm64": "2.4.1", + "@parcel/watcher-darwin-arm64": "2.4.1", + "@parcel/watcher-darwin-x64": "2.4.1", + "@parcel/watcher-freebsd-x64": "2.4.1", + "@parcel/watcher-linux-arm-glibc": "2.4.1", + "@parcel/watcher-linux-arm64-glibc": "2.4.1", + "@parcel/watcher-linux-arm64-musl": "2.4.1", + "@parcel/watcher-linux-x64-glibc": "2.4.1", + "@parcel/watcher-linux-x64-musl": "2.4.1", + "@parcel/watcher-win32-arm64": "2.4.1", + "@parcel/watcher-win32-ia32": "2.4.1", + "@parcel/watcher-win32-x64": "2.4.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.4.1.tgz", + "integrity": "sha512-LOi/WTbbh3aTn2RYddrO8pnapixAziFl6SMxHM69r3tvdSm94JtCenaKgk1GRg5FJ5wpMCpHeW+7yqPlvZv7kg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "peer": true, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "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==", - "dev": true, - "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/code-red/node_modules/estree-walker": { - "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" - } - }, - "node_modules/codemirror": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz", - "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==", - "dev": true, - "dependencies": { - "@codemirror/autocomplete": "^6.0.0", - "@codemirror/commands": "^6.0.0", - "@codemirror/language": "^6.0.0", - "@codemirror/lint": "^6.0.0", - "@codemirror/search": "^6.0.0", - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.0.0" - } - }, - "node_modules/color": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", - "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", - "dev": true, - "dependencies": { - "color-convert": "^2.0.1", - "color-string": "^1.9.0" - }, - "engines": { - "node": ">=12.5.0" - } - }, - "node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", - "dev": true, - "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" - } - }, - "node_modules/color-name": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", - "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true - }, - "node_modules/color-string": { - "version": "1.9.1", - "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", - "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", - "dev": true, - "dependencies": { - "color-name": "^1.0.0", - "simple-swizzle": "^0.2.2" - } - }, - "node_modules/commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true, - "engines": { - "node": ">= 12" - } - }, - "node_modules/concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true - }, - "node_modules/crc": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/crc/-/crc-4.3.2.tgz", - "integrity": "sha512-uGDHf4KLLh2zsHa8D8hIQ1H/HtFQhyHrc0uhHBcoKGol/Xnb+MPYfUMw7cvON6ze/GUESTudKayDcJC5HnJv1A==", - "dev": true, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.4.1.tgz", + "integrity": "sha512-ln41eihm5YXIY043vBrrHfn94SIBlqOWmoROhsMVTSXGh0QahKGy77tfEywQ7v3NywyxBBkGIfrWRHm0hsKtzA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, "engines": { - "node": ">=12" - }, - "peerDependencies": { - "buffer": ">=6.0.3" - }, - "peerDependenciesMeta": { - "buffer": { - "optional": true - } - } - }, - "node_modules/crelt": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", - "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", - "dev": true - }, - "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", - "nth-check": "^2.0.1" + "node": ">= 10.0.0" }, "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "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==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.30", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/css-what": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", - "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.4.1.tgz", + "integrity": "sha512-yrw81BRLjjtHyDu7J61oPuSoeYWR3lDElcPGJyOvIXmor6DEo7/G2u1o7I38cwlcoBHQFULqF6nesIX3tsEXMg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "peer": true, "engines": { - "node": ">= 6" + "node": ">= 10.0.0" }, "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true, - "bin": { - "cssesc": "bin/cssesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/csso": { - "version": "5.0.5", - "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", - "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", - "dev": true, - "dependencies": { - "css-tree": "~2.2.0" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" - } - }, - "node_modules/csso/node_modules/css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", - "dev": true, - "dependencies": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - }, - "engines": { - "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", - "npm": ">=7.0.0" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/csso/node_modules/mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.4.1.tgz", + "integrity": "sha512-TJa3Pex/gX3CWIx/Co8k+ykNdDCLx+TuZj3f3h7eOjgpdKM+Mnix37RYsYU4LHhiYJz3DK5nFCCra81p6g050w==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "freebsd" + ], + "peer": true, "engines": { - "node": ">=6.0" + "node": ">= 10.0.0" }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", - "dev": true, - "dependencies": { - "mimic-response": "^3.1.0" - }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.4.1.tgz", + "integrity": "sha512-4rVYDlsMEYfa537BRXxJ5UF4ddNwnr2/1O4MHM5PjI9cvV2qymvhwZSFgXqbS8YoTk5i/JR0L0JDs69BUn45YA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true, "engines": { - "node": ">=10" + "node": ">= 10.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true, - "engines": { - "node": ">=6" + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.4.1.tgz", + "integrity": "sha512-BJ7mH985OADVLpbrzCLgrJ3TOpiZggE9FMblfO65PlOCdG++xJpKUJ0Aol74ZUIYfb8WsRlUdgrZxKkz3zXWYA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true, "engines": { - "node": ">=8" - } - }, - "node_modules/detect-libc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/domelementtype": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", - "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ] - }, - "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", - "dev": true, - "dependencies": { - "domelementtype": "^2.3.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", - "dev": true, - "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "dependencies": { - "once": "^1.4.0" - } - }, - "node_modules/entities": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", - "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true, - "engines": { - "node": ">=0.12" - }, - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", - "dev": true - }, - "node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" - } - }, - "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 - }, - "node_modules/esm-env-robust": { - "version": "0.0.3", - "resolved": "https://registry.npmjs.org/esm-env-robust/-/esm-env-robust-0.0.3.tgz", - "integrity": "sha512-90Gnuw2DALOqlL1581VxP3GHPUNHX9U+fQ+8FNcTTFClhY5gEggAAnJ3q1b2Oq23knRsjv8YpNeMRPaMLUymOA==", - "dev": true, - "dependencies": { - "esm-env": "^1.0.0" - } - }, - "node_modules/estree-walker": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", - "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "node_modules/expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "dev": true - }, - "node_modules/fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", - "dev": true, - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, - "engines": { - "node": ">=8.6.0" - } - }, - "node_modules/fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "dependencies": { - "to-regex-range": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/flatpickr": { - "version": "4.6.9", - "resolved": "https://registry.npmjs.org/flatpickr/-/flatpickr-4.6.9.tgz", - "integrity": "sha512-F0azNNi8foVWKSF+8X+ZJzz8r9sE1G4hl06RyceIaLvyltKvDl6vqk9Lm/6AUUCi5HWaIjiUbk7UpeE/fOXOpw==", - "dev": true - }, - "node_modules/fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "dev": true - }, - "node_modules/gl-matrix": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", - "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==", - "dev": true - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "dependencies": { - "is-glob": "^4.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "node_modules/ieee754": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", - "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/imagetools-core": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/imagetools-core/-/imagetools-core-4.0.5.tgz", - "integrity": "sha512-sNRVfUwkUcsVWNn5inTHDXWzpPRWPWbSgGkuQmlsFCWXAR2+K5R5vG5tC3Qs4LeJaMugKB8hGVm6rvZjFHQrUw==", - "dev": true, - "dependencies": { - "sharp": "^0.32.4" - }, - "engines": { - "node": ">=12.0.0" - } - }, - "node_modules/immutable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", - "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", - "dev": true - }, - "node_modules/import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", - "dev": true, - "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "node_modules/ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true - }, - "node_modules/is-arrayish": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", - "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - }, - "node_modules/is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", - "dev": true, - "dependencies": { - "binary-extensions": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-extglob": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-glob": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", - "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "dependencies": { - "is-extglob": "^2.1.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/is-number": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", - "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true, - "engines": { - "node": ">=0.12.0" - } - }, - "node_modules/is-reference": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.1.tgz", - "integrity": "sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==", - "dev": true, - "dependencies": { - "@types/estree": "*" - } - }, - "node_modules/js-md5": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/js-md5/-/js-md5-0.7.3.tgz", - "integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==", - "dev": true - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true - }, - "node_modules/kleur": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", - "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "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==", - "dev": true - }, - "node_modules/lodash.debounce": { - "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dev": true, - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "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.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.3.tgz", - "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, - "engines": { - "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==", - "dev": true - }, - "node_modules/merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true, - "engines": { - "node": ">= 8" - } - }, - "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" - }, - "engines": { - "node": ">=8.6" - } - }, - "node_modules/mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "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, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", - "dev": true, - "dependencies": { - "minimist": "^1.2.6" - }, - "bin": { - "mkdirp": "bin/cmd.js" - } - }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true - }, - "node_modules/mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "dev": true - }, - "node_modules/node-abi": { - "version": "3.47.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.47.0.tgz", - "integrity": "sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A==", - "dev": true, - "dependencies": { - "semver": "^7.3.5" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/node-addon-api": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", - "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", - "dev": true - }, - "node_modules/normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0" - }, - "funding": { - "url": "https://github.com/fb55/nth-check?sponsor=1" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, - "node_modules/pako": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", - "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", - "dev": true - }, - "node_modules/parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "dev": true, - "dependencies": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" - } - }, - "node_modules/periscopic/node_modules/estree-walker": { - "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" - } - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true, - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "dependencies": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, - "dependencies": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", - "dev": true, - "dependencies": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "bin": { - "prebuild-install": "bin.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/prebuild-install/node_modules/tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "dependencies": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "node_modules/prebuild-install/node_modules/tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/prettier": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", - "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", - "dev": true, - "bin": { - "prettier": "bin/prettier.cjs" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/prettier-plugin-svelte": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.0.3.tgz", - "integrity": "sha512-dLhieh4obJEK1hnZ6koxF+tMUrZbV5YGvRpf2+OADyanjya5j0z1Llo8iGwiHmFWZVG/hLEw/AJD5chXd9r3XA==", - "dev": true, - "peerDependencies": { - "prettier": "^3.0.0", - "svelte": "^3.2.0 || ^4.0.0-next.0" - } - }, - "node_modules/pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" - } - }, - "node_modules/purgecss": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.1.3.tgz", - "integrity": "sha512-99cKy4s+VZoXnPxaoM23e5ABcP851nC2y2GROkkjS8eJaJtlciGavd7iYAw2V84WeBqggZ12l8ef44G99HmTaw==", - "dev": true, - "dependencies": { - "commander": "^8.0.0", - "glob": "^7.1.7", - "postcss": "^8.3.5", - "postcss-selector-parser": "^6.0.6" - }, - "bin": { - "purgecss": "bin/purgecss.js" - } - }, - "node_modules/queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/queue-tick": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", - "dev": true - }, - "node_modules/random-words": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/random-words/-/random-words-2.0.0.tgz", - "integrity": "sha512-uqpnDqFnYrZajgmvgjmBrSZL2V1UA/9bNPGrilo12CmBeBszoff/avElutUlwWxG12gvmCk/8dUhvHefYxzYjw==", - "dev": true, - "dependencies": { - "seedrandom": "^3.0.5" - } - }, - "node_modules/rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "dependencies": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" - }, - "bin": { - "rc": "cli.js" - } - }, - "node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "dependencies": { - "picomatch": "^2.2.1" - }, - "engines": { - "node": ">=8.10.0" - } - }, - "node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true, - "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" - } - }, - "node_modules/rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - } - }, - "node_modules/rollup": { - "version": "3.28.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.1.tgz", - "integrity": "sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "queue-microtask": "^1.2.2" - } - }, - "node_modules/sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dev": true, - "dependencies": { - "mri": "^1.1.0" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/sander": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", - "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", - "dev": true, - "dependencies": { - "es6-promise": "^3.1.2", - "graceful-fs": "^4.1.3", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.2" - } - }, - "node_modules/sass": { - "version": "1.66.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.66.1.tgz", - "integrity": "sha512-50c+zTsZOJVgFfTgwwEzkjA3/QACgdNsKueWPyAR0mRINIvLAStVQBbPg14iuqEQ74NPDbXzJARJ/O4SI1zftA==", - "dev": true, - "dependencies": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" - }, - "bin": { - "sass": "sass.js" - }, - "engines": { - "node": ">=14.0.0" - } - }, - "node_modules/seedrandom": { - "version": "3.0.5", - "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", - "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", - "dev": true - }, - "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/sharp": { - "version": "0.32.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.5.tgz", - "integrity": "sha512-0dap3iysgDkNaPOaOL4X/0akdu0ma62GcdC2NBQ+93eqpePdDdr2/LM0sFdDSMmN7yS+odyZtPsb7tx/cYBKnQ==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "color": "^4.2.3", - "detect-libc": "^2.0.2", - "node-addon-api": "^6.1.0", - "prebuild-install": "^7.1.1", - "semver": "^7.5.4", - "simple-get": "^4.0.1", - "tar-fs": "^3.0.4", - "tunnel-agent": "^0.6.0" - }, - "engines": { - "node": ">=14.15.0" - }, - "funding": { - "url": "https://opencollective.com/libvips" - } - }, - "node_modules/simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ] - }, - "node_modules/simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "dependencies": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" - } - }, - "node_modules/simple-swizzle": { - "version": "0.2.2", - "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", - "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", - "dev": true, - "dependencies": { - "is-arrayish": "^0.3.1" - } - }, - "node_modules/sorcery": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz", - "integrity": "sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.14", - "buffer-crc32": "^0.2.5", - "minimist": "^1.2.0", - "sander": "^0.5.0" - }, - "bin": { - "sorcery": "bin/sorcery" - } - }, - "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==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/streamx": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.1.tgz", - "integrity": "sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA==", - "dev": true, - "dependencies": { - "fast-fifo": "^1.1.0", - "queue-tick": "^1.0.1" - } - }, - "node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", - "dev": true, - "dependencies": { - "safe-buffer": "~5.2.0" - } - }, - "node_modules/strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/style-mod": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.3.tgz", - "integrity": "sha512-78Jv8kYJdjbvRwwijtCevYADfsI0lGzYJe4mMFdceO8l75DFFDoqBhR1jVDicDRRaX4//g1u9wKeo+ztc2h1Rw==", - "dev": true - }, - "node_modules/svelte": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.0.tgz", - "integrity": "sha512-kVsdPjDbLrv74SmLSUzAsBGquMs4MPgWGkGLpH+PjOYnFOziAvENVzgJmyOCV2gntxE32aNm8/sqNKD6LbIpeQ==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.1", - "@jridgewell/sourcemap-codec": "^1.4.15", - "@jridgewell/trace-mapping": "^0.3.18", - "acorn": "^8.9.0", - "aria-query": "^5.3.0", - "axobject-query": "^3.2.1", - "code-red": "^1.0.3", - "css-tree": "^2.3.1", - "estree-walker": "^3.0.3", - "is-reference": "^3.0.1", - "locate-character": "^3.0.0", - "magic-string": "^0.30.0", - "periscopic": "^3.1.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/svelte-check": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.5.1.tgz", - "integrity": "sha512-+Zb4iHxAhdUtcUg/WJPRjlS1RJalIsWAe9Mz6G1zyznSs7dDkT7VUBdXc3q7Iwg49O/VrZgyJRvOJkjuBfKjFA==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "chokidar": "^3.4.1", - "fast-glob": "^3.2.7", - "import-fresh": "^3.2.1", - "picocolors": "^1.0.0", - "sade": "^1.7.4", - "svelte-preprocess": "^5.0.4", - "typescript": "^5.0.3" - }, - "bin": { - "svelte-check": "bin/svelte-check" - }, - "peerDependencies": { - "svelte": "^3.55.0 || ^4.0.0-next.0 || ^4.0.0" - } - }, - "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/svelte-parse-markup": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/svelte-parse-markup/-/svelte-parse-markup-0.1.2.tgz", - "integrity": "sha512-DycY7DJr7VqofiJ63ut1/NEG92HrWWL56VWITn/cJCu+LlZhMoBkBXT4opUitPEEwbq1nMQbv4vTKUfbOqIW1g==", - "dev": true, - "funding": { - "url": "https://bjornlu.com/sponsor" - }, - "peerDependencies": { - "svelte": "^3.0.0 || ^4.0.0" - } - }, - "node_modules/svelte-preprocess": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.4.tgz", - "integrity": "sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==", - "dev": true, - "hasInstallScript": true, - "dependencies": { - "@types/pug": "^2.0.6", - "detect-indent": "^6.1.0", - "magic-string": "^0.27.0", - "sorcery": "^0.11.0", - "strip-indent": "^3.0.0" - }, - "engines": { - "node": ">= 14.10.0" - }, - "peerDependencies": { - "@babel/core": "^7.10.2", - "coffeescript": "^2.5.1", - "less": "^3.11.3 || ^4.0.0", - "postcss": "^7 || ^8", - "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0", - "pug": "^3.0.0", - "sass": "^1.26.8", - "stylus": "^0.55.0", - "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", - "svelte": "^3.23.0 || ^4.0.0-next.0 || ^4.0.0", - "typescript": ">=3.9.5 || ^4.0.0 || ^5.0.0" - }, - "peerDependenciesMeta": { - "@babel/core": { - "optional": true - }, - "coffeescript": { - "optional": true - }, - "less": { - "optional": true - }, - "postcss": { - "optional": true - }, - "postcss-load-config": { - "optional": true - }, - "pug": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "typescript": { - "optional": true - } - } - }, - "node_modules/svelte-preprocess-import-assets": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/svelte-preprocess-import-assets/-/svelte-preprocess-import-assets-1.0.1.tgz", - "integrity": "sha512-aHPd8SQhWfzC+Av6/nnlBdIj8zBdfbp5sC26/tXvZD3sBl4+x+rgf9qSgHI8aAi3gO7QyTu3xsvVc//VPsipHQ==", - "dev": true, - "dependencies": { - "magic-string": "^0.30.0", - "svelte-parse-markup": "^0.1.1" - }, - "peerDependencies": { - "svelte": "^3.37.0 || ^4.0.0" - } - }, - "node_modules/svelte-preprocess/node_modules/magic-string": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", - "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", - "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.13" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/svelte-routing": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/svelte-routing/-/svelte-routing-2.2.0.tgz", - "integrity": "sha512-aTzrGA/T4dDWUmRZF4skIoiD6jpYb9X8lOph0g30bkEt13BN9D/u++hICKEVqrma5mt5CyiXsCM7t//D+SMFLg==", - "dev": true - }, - "node_modules/svelte-sequential-preprocessor": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/svelte-sequential-preprocessor/-/svelte-sequential-preprocessor-2.0.1.tgz", - "integrity": "sha512-N5JqlBni6BzElxmuFrOPxOJnjsxh1cFDACLEVKs8OHBcx8ZNRO1p5SxuQex1m3qbLzAC8G99EHeWcxGkjyKjLQ==", - "dev": true, - "dependencies": { - "svelte": "^4.0.1", - "tslib": "~2.6.0" - }, - "engines": { - "node": ">=16" - } - }, - "node_modules/svelte-splitpanes": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/svelte-splitpanes/-/svelte-splitpanes-0.8.0.tgz", - "integrity": "sha512-cdtSUG8GE8eCAY+TiIGJmnEqV0GC1k/7lwWqovN0qTbw7OIAKEA2BWvqnZ/jk7UzSLlzdI2Uxxm4shXgCdN1kQ==", - "dev": true, - "dependencies": { - "esm-env-robust": "0.0.3" - }, - "peerDependencies": { - "svelte": "^4.0.2" - } - }, - "node_modules/svelte/node_modules/estree-walker": { - "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" - } - }, - "node_modules/svgo": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz", - "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==", - "dev": true, - "dependencies": { - "@trysound/sax": "0.2.0", - "commander": "^7.2.0", - "css-select": "^5.1.0", - "css-tree": "^2.2.1", - "csso": "^5.0.5", - "picocolors": "^1.0.0" - }, - "bin": { - "svgo": "bin/svgo" - }, - "engines": { - "node": ">=14.0.0" + "node": ">= 10.0.0" }, "funding": { "type": "opencollective", - "url": "https://opencollective.com/svgo" + "url": "https://opencollective.com/parcel" } }, - "node_modules/svgo/node_modules/commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.4.1.tgz", + "integrity": "sha512-p4Xb7JGq3MLgAfYhslU2SjoV9G0kI0Xry0kuxeG/41UfpjHGOhv7UoUDAz/jb1u2elbhazy4rRBL8PegPJFBhA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true, "engines": { - "node": ">= 10" - } - }, - "node_modules/tar-fs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", - "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", - "dev": true, - "dependencies": { - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^3.1.5" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/tar-stream": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", - "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", - "dev": true, - "dependencies": { - "b4a": "^1.6.4", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.4.1.tgz", + "integrity": "sha512-s9O3fByZ/2pyYDPoLM6zt92yu6P4E39a03zvO0qCHOTjxmt3GHRMLuRZEWhWLASTMSrrnVNWdVI/+pUElJBBBg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", - "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "dependencies": { - "is-number": "^7.0.0" - }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.4.1.tgz", + "integrity": "sha512-L2nZTYR1myLNST0O632g0Dx9LyMNHrn6TOt76sYxWLdff3cB22/GZX2UPtJnaqQPdCRoszoY5rcOj4oMTtp5fQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "peer": true, "engines": { - "node": ">=8.0" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true - }, - "node_modules/tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "dependencies": { - "safe-buffer": "^5.0.1" - }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.4.1.tgz", + "integrity": "sha512-Uq2BPp5GWhrq/lcuItCHoqxjULU1QYEcyjSO5jqqOK8RNFDBQnenMMx4gAl3v8GiWa59E9+uDM7yZ6LxwUIfRg==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true, "engines": { - "node": "*" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.4.1.tgz", + "integrity": "sha512-maNRit5QQV2kgHFSYwftmPBxiuK5u4DXjbXx7q6eKjq5dsLXZ4FJiVvlcw35QXzk0KrUecJmuVFbj4uV9oYrcw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true, "engines": { - "node": ">=14.17" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "node_modules/vite": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", - "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", - "dev": true, - "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" - }, - "bin": { - "vite": "bin/vite.js" - }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.4.1.tgz", + "integrity": "sha512-+DvS92F9ezicfswqrvIRM2njcYJbd5mb9CUgtrHCHmvn7pPPa+nMDRu1o1bYYz/l5IB2NVGNJWiH7h1E58IF2A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "peer": true, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">= 10.0.0" }, "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/vite-imagetools": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/vite-imagetools/-/vite-imagetools-5.0.8.tgz", - "integrity": "sha512-oFNfc58iLz1lHFsIKQy+wp0RNcZjiaDeHYTexYowpf4RYx9tZ97eWEcw8lQ1jDT8AnOso6XZi5iGjLNAeTR9Tw==", + "node_modules/@poppanator/sveltekit-svg": { + "version": "4.2.1", + "resolved": "https://registry.npmjs.org/@poppanator/sveltekit-svg/-/sveltekit-svg-4.2.1.tgz", + "integrity": "sha512-w7jl4EVOOF+X+uv2BEUiMDJwds+GfbczwGpcS0+rsjIsKYmqmwMi4ts3bVZR9ZvdFHWy5rS84U+pSBClz6cbBg==", "dev": true, + "license": "MIT", "dependencies": { - "@rollup/pluginutils": "^5.0.2", - "imagetools-core": "^4.0.5" + "@rollup/pluginutils": "^5.1.0" }, - "engines": { - "node": ">=12.0.0" + "peerDependencies": { + "svelte": ">=4.x", + "svgo": ">=3.x", + "vite": ">=4.x" } }, - "node_modules/vite-imagetools/node_modules/@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", + "node_modules/@rollup/pluginutils": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.2.tgz", + "integrity": "sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==", "dev": true, + "license": "MIT", "dependencies": { "@types/estree": "^1.0.0", "estree-walker": "^2.0.2", @@ -2970,781 +1437,482 @@ "node": ">=14.0.0" }, "peerDependencies": { - "rollup": "^1.20.0||^2.0.0||^3.0.0" - }, - "peerDependenciesMeta": { - "rollup": { - "optional": true - } - } - }, - "node_modules/vitefu": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz", - "integrity": "sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==", - "dev": true, - "peerDependencies": { - "vite": "^3.0.0 || ^4.0.0" + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" }, "peerDependenciesMeta": { - "vite": { - "optional": true - } - } - }, - "node_modules/w3c-keyname": { - "version": "2.2.8", - "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", - "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", - "dev": true - }, - "node_modules/warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha512-jMBt6pUrKn5I+OGgtQ4YZLdhIeJmObddh6CsibPxyQ5yPZm1XExSyzC1LCNX7BzhxWgiHmizBWJTHJIjMjTQYQ==", - "dev": true, - "dependencies": { - "loose-envify": "^1.0.0" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "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 - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", - "dev": true, - "requires": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@carbon/colors": { - "version": "11.19.0", - "resolved": "https://registry.npmjs.org/@carbon/colors/-/colors-11.19.0.tgz", - "integrity": "sha512-cRDnv9GfktZo+p/t/Lsy2B3yvMbDI1Ht2ECU0rAikClQHVnOffz791Q4m2gy2STPdISnzjFSPmoRxGKLfYhLRA==", - "dev": true - }, - "@carbon/feature-flags": { - "version": "0.16.0", - "resolved": "https://registry.npmjs.org/@carbon/feature-flags/-/feature-flags-0.16.0.tgz", - "integrity": "sha512-hCrfVZ6oVnPjjupelbvQX4D0i6GlZuKVverAf0LkOydXHrPjSyuEmg+czsylyCBg4r/hxtSTu91Tq6aqz/DsHg==", - "dev": true - }, - "@carbon/grid": { - "version": "11.19.0", - "resolved": "https://registry.npmjs.org/@carbon/grid/-/grid-11.19.0.tgz", - "integrity": "sha512-Ie8C0yifTPOF58rhkeRhINJ6KPiTVbdJwPCE+aEWTpUrwGSnuqIYZ8zQBlYQtNGQX72TSfnGY0qijPmpnIwNsg==", - "dev": true, - "requires": { - "@carbon/layout": "^11.19.0" - } - }, - "@carbon/layout": { - "version": "11.19.0", - "resolved": "https://registry.npmjs.org/@carbon/layout/-/layout-11.19.0.tgz", - "integrity": "sha512-BI9ct+yVKrgL90l4nijMhj8dokXGBJu1Xtve9fz/lcveTyxxn7YvRu8mosGhCyw77KSU6vN2yRLJnQwqwqrLJQ==", - "dev": true - }, - "@carbon/motion": { - "version": "11.15.0", - "resolved": "https://registry.npmjs.org/@carbon/motion/-/motion-11.15.0.tgz", - "integrity": "sha512-l7SIZMwTmv8BHPvDsQ26Y/dBLKnLGZUvD5bGcDppoUInUcKv2Dg4J0r5JONUsB2OagpBmbj/a5skcahzlaL1JQ==", - "dev": true - }, - "@carbon/styles": { - "version": "1.37.0", - "resolved": "https://registry.npmjs.org/@carbon/styles/-/styles-1.37.0.tgz", - "integrity": "sha512-CnyogtEBGr4F6yrXntLYCcdiBEjJ+dUqpycOWZbrqa6b2X/3hRpr8xgTc39Af0u/HyTQ1MJf3ck5QFPy9bwTRg==", - "dev": true, - "requires": { - "@carbon/colors": "^11.19.0", - "@carbon/feature-flags": "^0.16.0", - "@carbon/grid": "^11.19.0", - "@carbon/layout": "^11.19.0", - "@carbon/motion": "^11.15.0", - "@carbon/themes": "^11.24.0", - "@carbon/type": "^11.23.0", - "@ibm/plex": "6.0.0-next.6" - } - }, - "@carbon/telemetry": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@carbon/telemetry/-/telemetry-0.1.0.tgz", - "integrity": "sha512-kNWt0bkgPwGW0i5h7HFuljbKRXPvIhsKbB+1tEURAYLXoJg9iJLF1eGvWN5iVoFCS2zje4GR3OGOsvvKVe7Hlg==", - "dev": true - }, - "@carbon/themes": { - "version": "11.24.0", - "resolved": "https://registry.npmjs.org/@carbon/themes/-/themes-11.24.0.tgz", - "integrity": "sha512-afVMSQ8by3yR4646UNwOmVGeyI8n0dIvehpuy4IUGQ52WXsRuveMY/F6KpATy0OadJR/C/7SZo2mqI7L8aTREA==", - "dev": true, - "requires": { - "@carbon/colors": "^11.19.0", - "@carbon/layout": "^11.19.0", - "@carbon/type": "^11.23.0", - "color": "^4.0.0" - } - }, - "@carbon/type": { - "version": "11.23.0", - "resolved": "https://registry.npmjs.org/@carbon/type/-/type-11.23.0.tgz", - "integrity": "sha512-bp3D2q7Su03B2Re5CHt0OdNNmAbTOJaBgKgRKKdLP97F+M27y/kk9iOAFctC0pCgmQ2qSndWRTSb3zVg5TmiEw==", - "dev": true, - "requires": { - "@carbon/grid": "^11.19.0", - "@carbon/layout": "^11.19.0" - } - }, - "@codemirror/autocomplete": { - "version": "6.9.0", - "resolved": "https://registry.npmjs.org/@codemirror/autocomplete/-/autocomplete-6.9.0.tgz", - "integrity": "sha512-Fbwm0V/Wn3BkEJZRhr0hi5BhCo5a7eBL6LYaliPjOSwCyfOpnjXY59HruSxOUNV+1OYer0Tgx1zRNQttjXyDog==", - "dev": true, - "requires": { - "@codemirror/language": "^6.0.0", - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.6.0", - "@lezer/common": "^1.0.0" - } - }, - "@codemirror/commands": { - "version": "6.2.4", - "resolved": "https://registry.npmjs.org/@codemirror/commands/-/commands-6.2.4.tgz", - "integrity": "sha512-42lmDqVH0ttfilLShReLXsDfASKLXzfyC36bzwcqzox9PlHulMcsUOfHXNo2X2aFMVNUoQ7j+d4q5bnfseYoOA==", - "dev": true, - "requires": { - "@codemirror/language": "^6.0.0", - "@codemirror/state": "^6.2.0", - "@codemirror/view": "^6.0.0", - "@lezer/common": "^1.0.0" - } - }, - "@codemirror/language": { - "version": "6.8.0", - "resolved": "https://registry.npmjs.org/@codemirror/language/-/language-6.8.0.tgz", - "integrity": "sha512-r1paAyWOZkfY0RaYEZj3Kul+MiQTEbDvYqf8gPGaRvNneHXCmfSaAVFjwRUPlgxS8yflMxw2CTu6uCMp8R8A2g==", - "dev": true, - "requires": { - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.0.0", - "@lezer/common": "^1.0.0", - "@lezer/highlight": "^1.0.0", - "@lezer/lr": "^1.0.0", - "style-mod": "^4.0.0" - } - }, - "@codemirror/lint": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/@codemirror/lint/-/lint-6.4.0.tgz", - "integrity": "sha512-6VZ44Ysh/Zn07xrGkdtNfmHCbGSHZzFBdzWi0pbd7chAQ/iUcpLGX99NYRZTa7Ugqg4kEHCqiHhcZnH0gLIgSg==", - "dev": true, - "requires": { - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.0.0", - "crelt": "^1.0.5" - } - }, - "@codemirror/search": { - "version": "6.5.1", - "resolved": "https://registry.npmjs.org/@codemirror/search/-/search-6.5.1.tgz", - "integrity": "sha512-4jupk4JwkeVbrN2pStY74q6OJEYqwosB4koA66nyLeVedadtX9MHI38j2vbYmnfDGurDApP3OZO46MrWalcjiQ==", - "dev": true, - "requires": { - "@codemirror/state": "^6.0.0", - "@codemirror/view": "^6.0.0", - "crelt": "^1.0.5" - } - }, - "@codemirror/state": { - "version": "6.2.1", - "resolved": "https://registry.npmjs.org/@codemirror/state/-/state-6.2.1.tgz", - "integrity": "sha512-RupHSZ8+OjNT38zU9fKH2sv+Dnlr8Eb8sl4NOnnqz95mCFTZUaiRP8Xv5MeeaG0px2b8Bnfe7YGwCV3nsBhbuw==", - "dev": true - }, - "@codemirror/view": { - "version": "6.16.0", - "resolved": "https://registry.npmjs.org/@codemirror/view/-/view-6.16.0.tgz", - "integrity": "sha512-1Z2HkvkC3KR/oEZVuW9Ivmp8TWLzGEd8T8TA04TTwPvqogfkHBdYSlflytDOqmkUxM2d1ywTg7X2dU5mC+SXvg==", - "dev": true, - "requires": { - "@codemirror/state": "^6.1.4", - "style-mod": "^4.0.0", - "w3c-keyname": "^2.2.4" - } - }, - "@esbuild/android-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.18.20.tgz", - "integrity": "sha512-fyi7TDI/ijKKNZTUJAQqiG5T7YjJXgnzkURqmGj13C6dCqckZBLdl4h7bkhHt/t0WP+zO9/zwroDvANaOqO5Sw==", - "dev": true, - "optional": true - }, - "@esbuild/android-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.18.20.tgz", - "integrity": "sha512-Nz4rJcchGDtENV0eMKUNa6L12zz2zBDXuhj/Vjh18zGqB44Bi7MBMSXjgunJgjRhCmKOjnPuZp4Mb6OKqtMHLQ==", - "dev": true, - "optional": true - }, - "@esbuild/android-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.18.20.tgz", - "integrity": "sha512-8GDdlePJA8D6zlZYJV/jnrRAi6rOiNaCC/JclcXpB+KIuvfBN4owLtgzY2bsxnx666XjJx2kDPUmnTtR8qKQUg==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", - "dev": true, - "optional": true - }, - "@esbuild/darwin-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.18.20.tgz", - "integrity": "sha512-pc5gxlMDxzm513qPGbCbDukOdsGtKhfxD1zJKXjCCcU7ju50O7MeAZ8c4krSJcOIJGFR+qx21yMMVYwiQvyTyQ==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.18.20.tgz", - "integrity": "sha512-yqDQHy4QHevpMAaxhhIwYPMv1NECwOvIpGCZkECn8w2WFHXjEwrBn3CeNIYsibZ/iZEUemj++M26W3cNR5h+Tw==", - "dev": true, - "optional": true - }, - "@esbuild/freebsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.18.20.tgz", - "integrity": "sha512-tgWRPPuQsd3RmBZwarGVHZQvtzfEBOreNuxEMKFcd5DaDn2PbBxfwLcj4+aenoh7ctXcbXmOQIn8HI6mCSw5MQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.18.20.tgz", - "integrity": "sha512-/5bHkMWnq1EgKr1V+Ybz3s1hWXok7mDFUMQ4cG10AfW3wL02PSZi5kFpYKrptDsgb2WAJIvRcDm+qIvXf/apvg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.18.20.tgz", - "integrity": "sha512-2YbscF+UL7SQAVIpnWvYwM+3LskyDmPhe31pE7/aoTMFKKzIc9lLbyGUpmmb8a8AixOL61sQ/mFh3jEjHYFvdA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.18.20.tgz", - "integrity": "sha512-P4etWwq6IsReT0E1KHU40bOnzMHoH73aXp96Fs8TIT6z9Hu8G6+0SHSw9i2isWrD2nbx2qo5yUqACgdfVGx7TA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-loong64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.18.20.tgz", - "integrity": "sha512-nXW8nqBTrOpDLPgPY9uV+/1DjxoQ7DoB2N8eocyq8I9XuqJ7BiAMDMf9n1xZM9TgW0J8zrquIb/A7s3BJv7rjg==", - "dev": true, - "optional": true - }, - "@esbuild/linux-mips64el": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.18.20.tgz", - "integrity": "sha512-d5NeaXZcHp8PzYy5VnXV3VSd2D328Zb+9dEq5HE6bw6+N86JVPExrA6O68OPwobntbNJ0pzCpUFZTo3w0GyetQ==", - "dev": true, - "optional": true - }, - "@esbuild/linux-ppc64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.18.20.tgz", - "integrity": "sha512-WHPyeScRNcmANnLQkq6AfyXRFr5D6N2sKgkFo2FqguP44Nw2eyDlbTdZwd9GYk98DZG9QItIiTlFLHJHjxP3FA==", - "dev": true, - "optional": true - }, - "@esbuild/linux-riscv64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.18.20.tgz", - "integrity": "sha512-WSxo6h5ecI5XH34KC7w5veNnKkju3zBRLEQNY7mv5mtBmrP/MjNBCAlsM2u5hDBlS3NGcTQpoBvRzqBcRtpq1A==", - "dev": true, - "optional": true + "rollup": { + "optional": true + } + } }, - "@esbuild/linux-s390x": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.18.20.tgz", - "integrity": "sha512-+8231GMs3mAEth6Ja1iK0a1sQ3ohfcpzpRLH8uuc5/KVDFneH6jtAJLFGafpzpMRO6DzJ6AvXKze9LfFMrIHVQ==", - "dev": true, - "optional": true + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.24.0.tgz", + "integrity": "sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] }, - "@esbuild/linux-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.18.20.tgz", - "integrity": "sha512-UYqiqemphJcNsFEskc73jQ7B9jgwjWrSayxawS6UVFZGWrAAtkzjxSqnoclCXxWtfwLdzU+vTpcNYhpn43uP1w==", - "dev": true, - "optional": true + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.24.0.tgz", + "integrity": "sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ] }, - "@esbuild/netbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.18.20.tgz", - "integrity": "sha512-iO1c++VP6xUBUmltHZoMtCUdPlnPGdBom6IrO4gyKPFFVBKioIImVooR5I83nTew5UOYrk3gIJhbZh8X44y06A==", - "dev": true, - "optional": true + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.24.0.tgz", + "integrity": "sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] }, - "@esbuild/openbsd-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.18.20.tgz", - "integrity": "sha512-e5e4YSsuQfX4cxcygw/UCPIEP6wbIL+se3sxPdCiMbFLBWu0eiZOJ7WoD+ptCLrmjZBK1Wk7I6D/I3NglUGOxg==", - "dev": true, - "optional": true + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.24.0.tgz", + "integrity": "sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ] }, - "@esbuild/sunos-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.18.20.tgz", - "integrity": "sha512-kDbFRFp0YpTQVVrqUd5FTYmWo45zGaXe0X8E1G/LKFC0v8x0vWrhOWSLITcCn63lmZIxfOMXtCfti/RxN/0wnQ==", - "dev": true, - "optional": true + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.24.0.tgz", + "integrity": "sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "@esbuild/win32-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.18.20.tgz", - "integrity": "sha512-ddYFR6ItYgoaq4v4JmQQaAI5s7npztfV4Ag6NrhiaW0RrnOXqBkgwZLofVTlq1daVTQNhtI5oieTvkRPfZrePg==", - "dev": true, - "optional": true + "node_modules/@rollup/rollup-linux-arm-musleabihf": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-musleabihf/-/rollup-linux-arm-musleabihf-4.24.0.tgz", + "integrity": "sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "@esbuild/win32-ia32": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.18.20.tgz", - "integrity": "sha512-Wv7QBi3ID/rROT08SABTS7eV4hX26sVduqDOTe1MvGMjNd3EjOz4b7zeexIR62GTIEKrfJXKL9LFxTYgkyeu7g==", - "dev": true, - "optional": true + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.24.0.tgz", + "integrity": "sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "@esbuild/win32-x64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.18.20.tgz", - "integrity": "sha512-kTdfRcSiDfQca/y9QIkng02avJ+NCaQvrMejlsB3RRv5sE9rRoeBPISaZpKxHELzRxZyLvNts1P27W3wV+8geQ==", - "dev": true, - "optional": true + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.24.0.tgz", + "integrity": "sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "@ibm/plex": { - "version": "6.0.0-next.6", - "resolved": "https://registry.npmjs.org/@ibm/plex/-/plex-6.0.0-next.6.tgz", - "integrity": "sha512-B3uGruTn2rS5gweynLmfSe7yCawSRsJguJJQHVQiqf4rh2RNgJFu8YLE2Zd/JHV0ZXoVMOslcXP2k3hMkxKEyA==", - "dev": true + "node_modules/@rollup/rollup-linux-powerpc64le-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-powerpc64le-gnu/-/rollup-linux-powerpc64le-gnu-4.24.0.tgz", + "integrity": "sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==", + "cpu": [ + "ppc64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "@jridgewell/gen-mapping": { - "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, - "requires": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - } - }, - "@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", - "dev": true - }, - "@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true - }, - "@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==", - "dev": true - }, - "@jridgewell/trace-mapping": { - "version": "0.3.19", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.19.tgz", - "integrity": "sha512-kf37QtfW+Hwx/buWGMPcR60iF9ziHa6r/CZJIHbmcm4+0qrXiVdxegAH0F6yddEVQ7zdkjcGCgCzUu+BcbhQxw==", - "dev": true, - "requires": { - "@jridgewell/resolve-uri": "^3.1.0", - "@jridgewell/sourcemap-codec": "^1.4.14" - } + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.24.0.tgz", + "integrity": "sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "@lezer/common": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/@lezer/common/-/common-1.0.3.tgz", - "integrity": "sha512-JH4wAXCgUOcCGNekQPLhVeUtIqjH0yPBs7vvUdSjyQama9618IOKFJwkv2kcqdhF0my8hQEgCTEJU0GIgnahvA==", - "dev": true - }, - "@lezer/highlight": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/@lezer/highlight/-/highlight-1.1.6.tgz", - "integrity": "sha512-cmSJYa2us+r3SePpRCjN5ymCqCPv+zyXmDl0ciWtVaNiORT/MxM7ZgOMQZADD0o51qOaOg24qc/zBViOIwAjJg==", - "dev": true, - "requires": { - "@lezer/common": "^1.0.0" - } + "node_modules/@rollup/rollup-linux-s390x-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-s390x-gnu/-/rollup-linux-s390x-gnu-4.24.0.tgz", + "integrity": "sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==", + "cpu": [ + "s390x" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "@lezer/lr": { - "version": "1.3.9", - "resolved": "https://registry.npmjs.org/@lezer/lr/-/lr-1.3.9.tgz", - "integrity": "sha512-XPz6dzuTHlnsbA5M2DZgjflNQ+9Hi5Swhic0RULdp3oOs3rh6bqGZolosVqN/fQIT8uNiepzINJDnS39oweTHQ==", - "dev": true, - "requires": { - "@lezer/common": "^1.0.0" - } + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.24.0.tgz", + "integrity": "sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "@nodelib/fs.scandir": { - "version": "2.1.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", - "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", - "dev": true, - "requires": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - } + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.24.0.tgz", + "integrity": "sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ] }, - "@nodelib/fs.stat": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", - "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", - "dev": true + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.24.0.tgz", + "integrity": "sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] }, - "@nodelib/fs.walk": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", - "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", - "dev": true, - "requires": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - } + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.24.0.tgz", + "integrity": "sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] }, - "@poppanator/sveltekit-svg": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/@poppanator/sveltekit-svg/-/sveltekit-svg-4.1.3.tgz", - "integrity": "sha512-cKdFxFPPzS470xy2XFQ2m/URa9On4fw7n5wvBqAwVO4sY8dmski+2N3GKFELt4tvzM3JPjAqz76Ex7U5IpKeIg==", - "dev": true, - "requires": {} + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.24.0.tgz", + "integrity": "sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ] }, - "@sveltejs/vite-plugin-svelte": { - "version": "2.4.5", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-2.4.5.tgz", - "integrity": "sha512-UJKsFNwhzCVuiZd06jM/psscyNJNDwjQC+qIeb7GBJK9iWeQCcIyfcPWDvbCudfcJggY9jtxJeeaZH7uny93FQ==", - "dev": true, - "requires": { - "@sveltejs/vite-plugin-svelte-inspector": "^1.0.3", + "node_modules/@sveltejs/vite-plugin-svelte": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.1.2.tgz", + "integrity": "sha512-Txsm1tJvtiYeLUVRNqxZGKR/mI+CzuIQuc2gn+YCs9rMTowpNZ2Nqt53JdL8KF9bLhAf2ruR/dr9eZCwdTriRA==", + "license": "MIT", + "dependencies": { + "@sveltejs/vite-plugin-svelte-inspector": "^2.1.0", "debug": "^4.3.4", "deepmerge": "^4.3.1", "kleur": "^4.1.5", - "magic-string": "^0.30.2", - "svelte-hmr": "^0.15.3", - "vitefu": "^0.2.4" + "magic-string": "^0.30.10", + "svelte-hmr": "^0.16.0", + "vitefu": "^0.2.5" + }, + "engines": { + "node": "^18.0.0 || >=20" + }, + "peerDependencies": { + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.0" } }, - "@sveltejs/vite-plugin-svelte-inspector": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-1.0.4.tgz", - "integrity": "sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ==", - "dev": true, - "requires": { + "node_modules/@sveltejs/vite-plugin-svelte-inspector": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-2.1.0.tgz", + "integrity": "sha512-9QX28IymvBlSCqsCll5t0kQVxipsfhFFL+L2t3nTWfXnddYwxBuAEtTtlaVQpRz9c37BhJjltSeY4AJSC03SSg==", + "license": "MIT", + "dependencies": { "debug": "^4.3.4" + }, + "engines": { + "node": "^18.0.0 || >=20" + }, + "peerDependencies": { + "@sveltejs/vite-plugin-svelte": "^3.0.0", + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.0" } }, - "@trysound/sax": { + "node_modules/@trysound/sax": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/@trysound/sax/-/sax-0.2.0.tgz", "integrity": "sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==", - "dev": true - }, - "@tsconfig/svelte": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-5.0.2.tgz", - "integrity": "sha512-BRbo1fOtyVbhfLyuCWw6wAWp+U8UQle+ZXu84MYYWzYSEB28dyfnRBIE99eoG+qdAC0po6L2ScIEivcT07UaMA==", - "dev": true - }, - "@types/estree": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.1.tgz", - "integrity": "sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA==", - "dev": true - }, - "@types/js-md5": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/@types/js-md5/-/js-md5-0.7.0.tgz", - "integrity": "sha512-4mN02EhCni6MlvCUl9bpcbMfu7R3G+ac+J37b7gKCu3tWhZc5/Ya41T+2QNR2aFt6vnMe+uTa5rFQ+nT2kl6cA==", - "dev": true - }, - "@types/node": { - "version": "17.0.35", - "resolved": "https://registry.npmjs.org/@types/node/-/node-17.0.35.tgz", - "integrity": "sha512-vu1SrqBjbbZ3J6vwY17jBs8Sr/BKA+/a/WtjRG+whKg1iuLFOosq872EXS0eXWILdO36DHQQeku/ZcL6hz2fpg==", "dev": true, - "optional": true, - "peer": true + "license": "ISC", + "engines": { + "node": ">=10.13.0" + } }, - "@types/pako": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@types/pako/-/pako-2.0.0.tgz", - "integrity": "sha512-10+iaz93qR5WYxTo+PMifD5TSxiOtdRaxBf7INGGXMQgTCu8Z/7GYWYFUOS3q/G0nE5boj1r4FEB+WSy7s5gbA==", - "dev": true - }, - "@types/pug": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.6.tgz", - "integrity": "sha512-SnHmG9wN1UVmagJOnyo/qkk0Z7gejYxOYYmaAwr5u2yFYfsupN3sg10kyzN8Hep/2zbHxCnsumxOoRIRMBwKCg==", - "dev": true - }, - "acorn": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.10.0.tgz", - "integrity": "sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==", - "dev": true - }, - "anymatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.2.tgz", - "integrity": "sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==", + "node_modules/@tsconfig/svelte": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/@tsconfig/svelte/-/svelte-5.0.4.tgz", + "integrity": "sha512-BV9NplVgLmSi4mwKzD8BD/NQ8erOY/nUE/GpgWe2ckx+wIQF5RyRirn/QsSSCPeulVpc3RA/iJt6DpfTIZps0Q==", "dev": true, - "requires": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" - } + "license": "MIT" + }, + "node_modules/@types/estree": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.6.tgz", + "integrity": "sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==", + "license": "MIT" }, - "aria-query": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", - "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "node_modules/@types/js-md5": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@types/js-md5/-/js-md5-0.7.2.tgz", + "integrity": "sha512-IwcFIov1JbiEToo3DgrVEwkMUR1BVlVyLjk245AzGHyyOlyddDFIeSIZO+WlhTortOa4P1PdCS8cDrTl7RW1HA==", "dev": true, - "requires": { - "dequal": "^2.0.3" - } + "license": "MIT" }, - "axobject-query": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-3.2.1.tgz", - "integrity": "sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==", + "node_modules/@types/pako": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@types/pako/-/pako-2.0.3.tgz", + "integrity": "sha512-bq0hMV9opAcrmE0Byyo0fY3Ew4tgOevJmQ9grUhpXQhYfyLJ1Kqg3P33JT5fdbT2AjeAjR51zqqVjAL/HMkx7Q==", "dev": true, - "requires": { - "dequal": "^2.0.3" + "license": "MIT" + }, + "node_modules/acorn": { + "version": "8.13.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.13.0.tgz", + "integrity": "sha512-8zSiw54Oxrdym50NlZ9sUusyO1Z1ZchgRLWRaK6c86XJFClyCgFKetdowBg5bKxyp/u+CDBJG4Mpp0m3HLZl9w==", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" } }, - "b4a": { - "version": "1.6.4", - "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.4.tgz", - "integrity": "sha512-fpWrvyVHEKyeEvbKZTVOeZF3VSKKWtJxFIxX/jaVPf+cLbGUSitjb49pHLqPV2BUNNZ0LcoeEGfE/YCpyDYHIw==", - "dev": true + "node_modules/aria-query": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.2.tgz", + "integrity": "sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } }, - "balanced-match": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", - "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", - "dev": true + "node_modules/axobject-query": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.1.0.tgz", + "integrity": "sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==", + "license": "Apache-2.0", + "engines": { + "node": ">= 0.4" + } }, - "base64-js": { + "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", - "dev": true - }, - "binary-extensions": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", - "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", - "dev": true - }, - "bl": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/bl/-/bl-4.1.0.tgz", - "integrity": "sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==", "dev": true, - "requires": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - }, - "dependencies": { - "buffer": { - "version": "5.7.1", - "resolved": "https://registry.npmjs.org/buffer/-/buffer-5.7.1.tgz", - "integrity": "sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ==", - "dev": true, - "requires": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" } - } + ], + "license": "MIT", + "optional": true, + "peer": true }, - "boolbase": { + "node_modules/boolbase": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/boolbase/-/boolbase-1.0.0.tgz", "integrity": "sha512-JZOSA7Mo9sNGB8+UjSgzdLtokWAky1zbztM3WRLCbZ70/3cTANmQmOdR7y2g+J0e2WXywy1yS468tY+IruqEww==", - "dev": true - }, - "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, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } + "license": "ISC" }, - "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", - "dev": true, - "requires": { - "fill-range": "^7.0.1" + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" } }, - "buffer": { + "node_modules/buffer": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "MIT", "optional": true, "peer": true, - "requires": { + "dependencies": { "base64-js": "^1.3.1", "ieee754": "^1.2.1" } }, - "buffer-crc32": { - "version": "0.2.13", - "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", - "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", - "dev": true + "node_modules/buffer-builder": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/buffer-builder/-/buffer-builder-0.2.0.tgz", + "integrity": "sha512-7VPMEPuYznPSoR21NE1zvd2Xna6c/CloiZCfcMXR1Jny6PjX0N4Nsa38zcBFo/FMK+BlA+FLKbJCQ0i2yxp+Xg==", + "license": "MIT/X11" }, - "callsites": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", - "dev": true - }, - "carbon-components": { - "version": "10.58.10", - "resolved": "https://registry.npmjs.org/carbon-components/-/carbon-components-10.58.10.tgz", - "integrity": "sha512-RnTFB5s27rTKiGELIZVF72CKCFNy6Mz3x4cU6wVifbgjYKRDVlFCyXsmo56pNIhfGi5LPFHfLl/+sc/+ImkOsg==", + "node_modules/carbon-components-svelte": { + "version": "0.85.2", + "resolved": "https://registry.npmjs.org/carbon-components-svelte/-/carbon-components-svelte-0.85.2.tgz", + "integrity": "sha512-+ta2wP9jugeDoDDHdzqbSomyEwtOaVyqVeCy5Z/q8WxdnahKOMDeIgPBi/QnsmsDIgS3+79svGG0BcBMBbCfYw==", "dev": true, - "requires": { - "@carbon/telemetry": "0.1.0", - "flatpickr": "4.6.1", - "lodash.debounce": "^4.0.8", - "warning": "^3.0.0" - }, + "hasInstallScript": true, + "license": "Apache-2.0", "dependencies": { - "flatpickr": { - "version": "4.6.1", - "resolved": "https://registry.npmjs.org/flatpickr/-/flatpickr-4.6.1.tgz", - "integrity": "sha512-3ULSxbXmcMIRzer/2jLNweoqHpwDvsjEawO2FUd9UFR8uPwLM+LruZcPDpuZStcEgbQKhuFOfXo4nYdGladSNw==", - "dev": true - } - } - }, - "carbon-components-svelte": { - "version": "0.80.0", - "resolved": "https://registry.npmjs.org/carbon-components-svelte/-/carbon-components-svelte-0.80.0.tgz", - "integrity": "sha512-OTk75KJGEQQLEKSvsZUk4GEYtg6ClSKVyTJPvqiBIOUJ1LVW9ZZppCAieWeBvff1GqVrPm1EDthl6YS730lONA==", - "dev": true, - "requires": { + "@ibm/telemetry-js": "^1.5.0", "flatpickr": "4.6.9" } }, - "carbon-icons-svelte": { - "version": "12.3.0", - "resolved": "https://registry.npmjs.org/carbon-icons-svelte/-/carbon-icons-svelte-12.3.0.tgz", - "integrity": "sha512-RZI1nJEjnpgBka4A6zwEkNNqYfV9H7WjcyQ4JYPLoMO8a7N7mAVbaG9ngHUEahxf/byaHBp+EJD3Natf1dkylQ==", - "dev": true + "node_modules/carbon-icons-svelte": { + "version": "12.12.0", + "resolved": "https://registry.npmjs.org/carbon-icons-svelte/-/carbon-icons-svelte-12.12.0.tgz", + "integrity": "sha512-fJIys9CKr1tu/oWp/zVWyL6yZURuFWehyWJik1Y/GIN10KRI2iwXQOWfUemLiUNEhEjQNXpb54Qw6N1WX+C26g==", + "dev": true, + "license": "Apache-2.0" }, - "carbon-preprocess-svelte": { - "version": "0.10.0", - "resolved": "https://registry.npmjs.org/carbon-preprocess-svelte/-/carbon-preprocess-svelte-0.10.0.tgz", - "integrity": "sha512-jsmVvLcCKuxyoEkyRXvBux4JdatglTuqlDt95TiXiXmOS4XCcrHYSNiBzJ9vsOHpQIaRy8lGQxx6mh6G1lr6FQ==", + "node_modules/carbon-preprocess-svelte": { + "version": "0.11.7", + "resolved": "https://registry.npmjs.org/carbon-preprocess-svelte/-/carbon-preprocess-svelte-0.11.7.tgz", + "integrity": "sha512-ipqnoliKaBCT8WNyLzKkbpyAP4mO0QP+tjeYGndBbsBuf9+QpI3ghtV6cQ74FEOflgUDU3pABml+aXmoUd5DTQ==", "dev": true, - "requires": { - "purgecss": "^4.1.3", - "svelte-preprocess": "^5.0.3", - "typescript": "^4.7.4" - }, + "license": "Apache-2.0", "dependencies": { - "typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true - } + "estree-walker": "^2.0.2", + "magic-string": "^0.30.11", + "postcss": "^8.4.47", + "postcss-discard-empty": "^7.0.0" } }, - "chokidar": { - "version": "3.5.3", - "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", - "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", - "dev": true, - "requires": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "fsevents": "~2.3.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - } - }, - "chownr": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/chownr/-/chownr-1.1.4.tgz", - "integrity": "sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==", - "dev": true + "node_modules/chokidar": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-4.0.1.tgz", + "integrity": "sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==", + "devOptional": true, + "license": "MIT", + "dependencies": { + "readdirp": "^4.0.1" + }, + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } }, - "code-red": { + "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==", - "dev": true, - "requires": { + "license": "MIT", + "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/code-red/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", "dependencies": { - "estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "requires": { - "@types/estree": "^1.0.0" - } - } + "@types/estree": "^1.0.0" } }, - "codemirror": { + "node_modules/codemirror": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/codemirror/-/codemirror-6.0.1.tgz", "integrity": "sha512-J8j+nZ+CdWmIeFIGXEFbFPtpiYacFMDR8GlHK3IyHQJMCaVRfGx9NT+Hxivv1ckLWPvNdZqndbr/7lVhrf/Svg==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "@codemirror/autocomplete": "^6.0.0", "@codemirror/commands": "^6.0.0", "@codemirror/language": "^6.0.0", @@ -3754,1348 +1922,1671 @@ "@codemirror/view": "^6.0.0" } }, - "color": { + "node_modules/color": { "version": "4.2.3", "resolved": "https://registry.npmjs.org/color/-/color-4.2.3.tgz", "integrity": "sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "color-convert": "^2.0.1", "color-string": "^1.9.0" + }, + "engines": { + "node": ">=12.5.0" } }, - "color-convert": { + "node_modules/color-convert": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "color-name": { + "node_modules/color-name": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", - "dev": true + "dev": true, + "license": "MIT" }, - "color-string": { + "node_modules/color-string": { "version": "1.9.1", "resolved": "https://registry.npmjs.org/color-string/-/color-string-1.9.1.tgz", "integrity": "sha512-shrVawQFojnZv6xM40anx4CkoDP+fZsw/ZerEMsW/pyzsRbElpsL/DBVW7q3ExxwusdNXI3lXpuhEZkzs8p5Eg==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "color-name": "^1.0.0", "simple-swizzle": "^0.2.2" } }, - "commander": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-8.3.0.tgz", - "integrity": "sha512-OkTL9umf+He2DZkUq8f8J9of7yL6RJKI24dVITBmNfZBmri9zYZQrKkuXiKhyfPSu8tUhnVBB1iKXevvnlR4Ww==", - "dev": true + "node_modules/colorjs.io": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/colorjs.io/-/colorjs.io-0.5.2.tgz", + "integrity": "sha512-twmVoizEW7ylZSN32OgKdXRmo1qg+wT5/6C3xu5b9QsWzSFAhHLn2xd8ro0diCsKfCj1RdaTP/nrcW+vAoQPIw==", + "license": "MIT" }, - "concat-map": { - "version": "0.0.1", - "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", - "integrity": "sha1-2Klr13/Wjfd5OnMDajug1UBdR3s=", - "dev": true + "node_modules/commander": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", + "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", + "dev": true, + "license": "MIT", + "engines": { + "node": ">= 10" + } }, - "crc": { + "node_modules/crc": { "version": "4.3.2", "resolved": "https://registry.npmjs.org/crc/-/crc-4.3.2.tgz", "integrity": "sha512-uGDHf4KLLh2zsHa8D8hIQ1H/HtFQhyHrc0uhHBcoKGol/Xnb+MPYfUMw7cvON6ze/GUESTudKayDcJC5HnJv1A==", "dev": true, - "requires": {} + "license": "MIT", + "engines": { + "node": ">=12" + }, + "peerDependencies": { + "buffer": ">=6.0.3" + }, + "peerDependenciesMeta": { + "buffer": { + "optional": true + } + } }, - "crelt": { + "node_modules/crelt": { "version": "1.0.6", "resolved": "https://registry.npmjs.org/crelt/-/crelt-1.0.6.tgz", "integrity": "sha512-VQ2MBenTq1fWZUH9DJNGti7kKv6EeAuYr3cLwxUWhIu1baTaXh4Ib5W2CqHVqib4/MqbYGJqiL3Zb8GJZr3l4g==", - "dev": true + "dev": true, + "license": "MIT" }, - "css-select": { + "node_modules/css-select": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", "dev": true, - "requires": { + "license": "BSD-2-Clause", + "dependencies": { "boolbase": "^1.0.0", "css-what": "^6.1.0", "domhandler": "^5.0.2", "domutils": "^3.0.1", "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" } }, - "css-tree": { + "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==", - "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "mdn-data": "2.0.30", "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" } }, - "css-what": { + "node_modules/css-what": { "version": "6.1.0", "resolved": "https://registry.npmjs.org/css-what/-/css-what-6.1.0.tgz", "integrity": "sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==", - "dev": true - }, - "cssesc": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", - "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", - "dev": true + "dev": true, + "license": "BSD-2-Clause", + "engines": { + "node": ">= 6" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } }, - "csso": { + "node_modules/csso": { "version": "5.0.5", "resolved": "https://registry.npmjs.org/csso/-/csso-5.0.5.tgz", "integrity": "sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "css-tree": "~2.2.0" }, - "dependencies": { - "css-tree": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", - "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", - "dev": true, - "requires": { - "mdn-data": "2.0.28", - "source-map-js": "^1.0.1" - } - }, - "mdn-data": { - "version": "2.0.28", - "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", - "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", - "dev": true - } + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" } }, - "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "node_modules/csso/node_modules/css-tree": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.2.1.tgz", + "integrity": "sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==", "dev": true, - "requires": { - "ms": "2.1.2" + "license": "MIT", + "dependencies": { + "mdn-data": "2.0.28", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0", + "npm": ">=7.0.0" } }, - "decompress-response": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/decompress-response/-/decompress-response-6.0.0.tgz", - "integrity": "sha512-aW35yZM6Bb/4oJlZncMH2LCoZtJXTRxES17vE3hoRiowU2kWHaJKFkSBDnDR+cm9J+9QhXmREyIfv0pji9ejCQ==", + "node_modules/csso/node_modules/mdn-data": { + "version": "2.0.28", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.28.tgz", + "integrity": "sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==", "dev": true, - "requires": { - "mimic-response": "^3.1.0" - } + "license": "CC0-1.0" }, - "deep-extend": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true + "node_modules/debug": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.7.tgz", + "integrity": "sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==", + "license": "MIT", + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } }, - "deepmerge": { + "node_modules/deepmerge": { "version": "4.3.1", "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", - "dev": true - }, - "dequal": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", - "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", - "dev": true - }, - "detect-indent": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", - "dev": true + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } }, - "detect-libc": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.2.tgz", - "integrity": "sha512-UX6sGumvvqSaXgdKGUsgZWqcUyIXZ/vZTrlRT/iobiKhGL0zL4d3osHj3uqllWJK+i+sixDS/3COVEOFbupFyw==", - "dev": true + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "license": "Apache-2.0", + "optional": true, + "peer": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } }, - "dom-serializer": { + "node_modules/dom-serializer": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "domelementtype": "^2.3.0", "domhandler": "^5.0.2", "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, - "domelementtype": { + "node_modules/domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", "integrity": "sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==", - "dev": true + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/fb55" + } + ], + "license": "BSD-2-Clause" }, - "domhandler": { + "node_modules/domhandler": { "version": "5.0.3", "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", "dev": true, - "requires": { + "license": "BSD-2-Clause", + "dependencies": { "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" } }, - "domutils": { + "node_modules/domutils": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", "dev": true, - "requires": { + "license": "BSD-2-Clause", + "dependencies": { "dom-serializer": "^2.0.0", "domelementtype": "^2.3.0", "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "end-of-stream": { - "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", - "dev": true, - "requires": { - "once": "^1.4.0" - } - }, - "entities": { + "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", - "dev": true - }, - "es6-promise": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", - "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", - "dev": true - }, - "esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", "dev": true, - "requires": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" - } - }, - "esm-env": { + "license": "BSD-2-Clause", + "engines": { + "node": ">=0.12" + }, + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "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==", + "hasInstallScript": true, + "license": "MIT", + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "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" + } + }, + "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 + "dev": true, + "license": "MIT" }, - "esm-env-robust": { + "node_modules/esm-env-robust": { "version": "0.0.3", "resolved": "https://registry.npmjs.org/esm-env-robust/-/esm-env-robust-0.0.3.tgz", "integrity": "sha512-90Gnuw2DALOqlL1581VxP3GHPUNHX9U+fQ+8FNcTTFClhY5gEggAAnJ3q1b2Oq23knRsjv8YpNeMRPaMLUymOA==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "esm-env": "^1.0.0" } }, - "estree-walker": { + "node_modules/estree-walker": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", - "dev": true - }, - "expand-template": { - "version": "2.0.3", - "resolved": "https://registry.npmjs.org/expand-template/-/expand-template-2.0.3.tgz", - "integrity": "sha512-XYfuKMvj4O35f/pOXLObndIRvyQ+/+6AhODh+OKWj9S9498pHHn/IMszH+gt0fBCRWMNfk1ZSp5x3AifmnI2vg==", - "dev": true - }, - "fast-fifo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/fast-fifo/-/fast-fifo-1.3.2.tgz", - "integrity": "sha512-/d9sfos4yxzpwkDkuN7k2SqFKtYNmCTzgfEpz82x34IM9/zc8KGxQoXg1liNC/izpRM/MBdt44Nmx41ZWqk+FQ==", - "dev": true - }, - "fast-glob": { - "version": "3.2.11", - "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.11.tgz", - "integrity": "sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==", "dev": true, - "requires": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - } - }, - "fastq": { - "version": "1.13.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.13.0.tgz", - "integrity": "sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==", - "dev": true, - "requires": { - "reusify": "^1.0.4" - } + "license": "MIT" }, - "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", - "dev": true, - "requires": { + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "flatpickr": { + "node_modules/flatpickr": { "version": "4.6.9", "resolved": "https://registry.npmjs.org/flatpickr/-/flatpickr-4.6.9.tgz", "integrity": "sha512-F0azNNi8foVWKSF+8X+ZJzz8r9sE1G4hl06RyceIaLvyltKvDl6vqk9Lm/6AUUCi5HWaIjiUbk7UpeE/fOXOpw==", - "dev": true - }, - "fs-constants": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs-constants/-/fs-constants-1.0.0.tgz", - "integrity": "sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==", - "dev": true - }, - "fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha1-FQStJSMVjKpA20onh8sBQRmU6k8=", - "dev": true - }, - "fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", "dev": true, - "optional": true + "license": "MIT" }, - "github-from-package": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/github-from-package/-/github-from-package-0.0.0.tgz", - "integrity": "sha512-SyHy3T1v2NUXn29OsWdxmK6RwHD+vkj3v8en8AOBZ1wBQ/hCAQ5bAQTD02kW4W9tUp/3Qh6J8r9EvntiyCmOOw==", - "dev": true + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } }, - "gl-matrix": { + "node_modules/gl-matrix": { "version": "3.4.3", "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==", - "dev": true - }, - "glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } + "license": "MIT" }, - "glob-parent": { - "version": "5.1.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", - "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", - "dev": true, - "requires": { - "is-glob": "^4.0.1" + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "license": "MIT", + "engines": { + "node": ">=8" } }, - "graceful-fs": { - "version": "4.2.11", - "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", - "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", - "dev": true - }, - "ieee754": { + "node_modules/ieee754": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", - "dev": true - }, - "imagetools-core": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/imagetools-core/-/imagetools-core-4.0.5.tgz", - "integrity": "sha512-sNRVfUwkUcsVWNn5inTHDXWzpPRWPWbSgGkuQmlsFCWXAR2+K5R5vG5tC3Qs4LeJaMugKB8hGVm6rvZjFHQrUw==", - "dev": true, - "requires": { - "sharp": "^0.32.4" - } - }, - "immutable": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.0.0.tgz", - "integrity": "sha512-zIE9hX70qew5qTUjSS7wi1iwj/l7+m54KWU247nhM3v806UdGj1yDndXj+IOYxxtW9zyLI+xqFNZjTuDaLUqFw==", - "dev": true - }, - "import-fresh": { - "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, - "requires": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - } + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "license": "BSD-3-Clause", + "optional": true, + "peer": true }, - "inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha1-Sb1jMdfQLQwJvJEKEHW6gWW1bfk=", + "node_modules/imagetools-core": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/imagetools-core/-/imagetools-core-7.0.1.tgz", + "integrity": "sha512-XDUx3Ac1VrZ4XF5eAJNYdHbFXRPNyebHFrwJsZ4WHb7X2MitOVW23cFphSDByT3MH5rdWdxKr4edSW2agChvDg==", "dev": true, - "requires": { - "once": "^1.3.0", - "wrappy": "1" + "license": "MIT", + "engines": { + "node": ">=18.0.0" } }, - "inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, - "ini": { - "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "node_modules/immutable": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.7.tgz", + "integrity": "sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==", + "license": "MIT" }, - "is-arrayish": { + "node_modules/is-arrayish": { "version": "0.3.2", "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.3.2.tgz", "integrity": "sha512-eVRqCvVlZbuw3GrM63ovNSNAeA1K16kaR/LRY/92w0zxQ5/1YzwblUX652i4Xs9RwAGjW9d9y6X88t8OaAJfWQ==", - "dev": true - }, - "is-binary-path": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", - "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", "dev": true, - "requires": { - "binary-extensions": "^2.0.0" - } + "license": "MIT" }, - "is-extglob": { + "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", - "integrity": "sha1-qIwCU1eR8C7TfHahueqXc8gz+MI=", - "dev": true + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.10.0" + } }, - "is-glob": { + "node_modules/is-glob": { "version": "4.0.3", "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", - "dev": true, - "requires": { + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" } }, - "is-number": { + "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", - "dev": true + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=0.12.0" + } }, - "is-reference": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.1.tgz", - "integrity": "sha512-baJJdQLiYaJdvFbJqXrcGv3WU3QCzBlUcI5QhbesIm6/xPsvmO+2CDoi/GMOFBQEQm+PXkwOPrp9KK5ozZsp2w==", - "dev": true, - "requires": { + "node_modules/is-reference": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", + "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", + "license": "MIT", + "dependencies": { "@types/estree": "*" } }, - "js-md5": { - "version": "0.7.3", - "resolved": "https://registry.npmjs.org/js-md5/-/js-md5-0.7.3.tgz", - "integrity": "sha512-ZC41vPSTLKGwIRjqDh8DfXoCrdQIyBgspJVPXHBGu4nZlAEvG3nf+jO9avM9RmLiGakg7vz974ms99nEV0tmTQ==", - "dev": true - }, - "js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==", - "dev": true + "node_modules/js-md5": { + "version": "0.8.3", + "resolved": "https://registry.npmjs.org/js-md5/-/js-md5-0.8.3.tgz", + "integrity": "sha512-qR0HB5uP6wCuRMrWPTrkMaev7MJZwJuuw4fnwAzRgP4J4/F8RwtodOKpGp4XpqsLBFzzgqIO42efFAyz2Et6KQ==", + "dev": true, + "license": "MIT" }, - "kleur": { + "node_modules/kleur": { "version": "4.1.5", "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", - "dev": true + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "locate-character": { + "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==", - "dev": true + "license": "MIT" + }, + "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==", + "license": "MIT", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0" + } + }, + "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==", + "license": "CC0-1.0" }, - "lodash.debounce": { + "node_modules/micromatch": { "version": "4.0.8", - "resolved": "https://registry.npmjs.org/lodash.debounce/-/lodash.debounce-4.0.8.tgz", - "integrity": "sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==", - "dev": true - }, - "loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", "dev": true, - "requires": { - "js-tokens": "^3.0.0 || ^4.0.0" + "license": "MIT", + "engines": { + "node": ">=4" } }, - "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==", + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "license": "MIT" + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "license": "MIT", + "optional": true, + "peer": true + }, + "node_modules/nth-check": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", + "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", "dev": true, - "requires": { - "yallist": "^4.0.0" + "license": "BSD-2-Clause", + "dependencies": { + "boolbase": "^1.0.0" + }, + "funding": { + "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "magic-string": { - "version": "0.30.3", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.3.tgz", - "integrity": "sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==", + "node_modules/pako": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", + "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", "dev": true, - "requires": { - "@jridgewell/sourcemap-codec": "^1.4.15" + "license": "(MIT AND Zlib)" + }, + "node_modules/periscopic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", + "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^3.0.0", + "is-reference": "^3.0.0" } }, - "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==", - "dev": true + "node_modules/periscopic/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } }, - "merge2": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", - "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", - "dev": true + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "license": "ISC" }, - "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", - "dev": true, - "requires": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "mimic-response": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/mimic-response/-/mimic-response-3.1.0.tgz", - "integrity": "sha512-z0yWI+4FDrrweS8Zmt4Ej5HdJmky15+L2e6Wgn3+iK5fWzb6T3fhNFq2+MeTRb064c6Wr4N/wv0DzQTjNzHNGQ==", - "dev": true + "node_modules/postcss": { + "version": "8.4.47", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.47.tgz", + "integrity": "sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.1.0", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } }, - "min-indent": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", - "dev": true + "node_modules/postcss-discard-empty": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-7.0.0.tgz", + "integrity": "sha512-e+QzoReTZ8IAwhnSdp/++7gBZ/F+nBq9y6PomfwORfP7q9nBpK5AMP64kOt0bA+lShBFbBDcgpJ3X4etHg4lzA==", + "dev": true, + "license": "MIT", + "engines": { + "node": "^18.12.0 || ^20.9.0 || >=22.0" + }, + "peerDependencies": { + "postcss": "^8.4.31" + } }, - "minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "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==", "dev": true, - "requires": { - "brace-expansion": "^1.1.7" + "license": "MIT", + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true + "node_modules/prettier-plugin-svelte": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.2.7.tgz", + "integrity": "sha512-/Dswx/ea0lV34If1eDcG3nulQ63YNr5KPDfMsjbdtpSWOxKKJ7nAc2qlVuYwEvCr4raIuredNoR7K4JCkmTGaQ==", + "dev": true, + "license": "MIT", + "peerDependencies": { + "prettier": "^3.0.0", + "svelte": "^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0" + } }, - "mkdirp": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", - "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "node_modules/random-words": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/random-words/-/random-words-2.0.1.tgz", + "integrity": "sha512-nZNJAmgcFmtJMTDDIUCm/iK4R6RydC6NvALvWhYItXQrgYGk1F7Gww416LpVROFQtfVd5TaLEf4WuSsko03N7w==", "dev": true, - "requires": { - "minimist": "^1.2.6" + "license": "MIT", + "dependencies": { + "seedrandom": "^3.0.5" } }, - "mkdirp-classic": { - "version": "0.5.3", - "resolved": "https://registry.npmjs.org/mkdirp-classic/-/mkdirp-classic-0.5.3.tgz", - "integrity": "sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==", - "dev": true + "node_modules/readdirp": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-4.0.2.tgz", + "integrity": "sha512-yDMz9g+VaZkqBYS/ozoBJwaBhTbZo3UNYQHNRw1D3UFQB8oHB4uS/tAODO+ZLjGWmUbKnIlOWO+aaIiAxrUWHA==", + "devOptional": true, + "license": "MIT", + "engines": { + "node": ">= 14.16.0" + }, + "funding": { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } }, - "mri": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", - "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", - "dev": true - }, - "ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "nanoid": { - "version": "3.3.6", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.6.tgz", - "integrity": "sha512-BGcqMMJuToF7i1rt+2PWSNVnWIkGCU78jBG3RxO/bZlnZPK2Cmi2QaffxGO/2RvWi9sL+FAiRiXMgsyxQ1DIDA==", - "dev": true - }, - "napi-build-utils": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/napi-build-utils/-/napi-build-utils-1.0.2.tgz", - "integrity": "sha512-ONmRUqK7zj7DWX0D9ADe03wbwOBZxNAfF20PlGfCWQcD3+/MakShIHrMqx9YwPTfxDdF1zLeL+RGZiR9kGMLdg==", - "dev": true - }, - "node-abi": { - "version": "3.47.0", - "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.47.0.tgz", - "integrity": "sha512-2s6B2CWZM//kPgwnuI0KrYwNjfdByE25zvAaEpq9IH4zcNsarH8Ihu/UuX6XMPEogDAxkuUFeZn60pXNHAqn3A==", + "node_modules/rollup": { + "version": "4.24.0", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz", + "integrity": "sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==", + "license": "MIT", + "dependencies": { + "@types/estree": "1.0.6" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.24.0", + "@rollup/rollup-android-arm64": "4.24.0", + "@rollup/rollup-darwin-arm64": "4.24.0", + "@rollup/rollup-darwin-x64": "4.24.0", + "@rollup/rollup-linux-arm-gnueabihf": "4.24.0", + "@rollup/rollup-linux-arm-musleabihf": "4.24.0", + "@rollup/rollup-linux-arm64-gnu": "4.24.0", + "@rollup/rollup-linux-arm64-musl": "4.24.0", + "@rollup/rollup-linux-powerpc64le-gnu": "4.24.0", + "@rollup/rollup-linux-riscv64-gnu": "4.24.0", + "@rollup/rollup-linux-s390x-gnu": "4.24.0", + "@rollup/rollup-linux-x64-gnu": "4.24.0", + "@rollup/rollup-linux-x64-musl": "4.24.0", + "@rollup/rollup-win32-arm64-msvc": "4.24.0", + "@rollup/rollup-win32-ia32-msvc": "4.24.0", + "@rollup/rollup-win32-x64-msvc": "4.24.0", + "fsevents": "~2.3.2" + } + }, + "node_modules/rxjs": { + "version": "7.8.1", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.1.tgz", + "integrity": "sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg==", + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", "dev": true, - "requires": { - "semver": "^7.3.5" + "license": "MIT", + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" } }, - "node-addon-api": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-6.1.0.tgz", - "integrity": "sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==", - "dev": true + "node_modules/sass": { + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.80.3.tgz", + "integrity": "sha512-ptDWyVmDMVielpz/oWy3YP3nfs7LpJTHIJZboMVs8GEC9eUmtZTZhMHlTW98wY4aEorDfjN38+Wr/XjskFWcfA==", + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "@parcel/watcher": "^2.4.1", + "chokidar": "^4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } }, - "normalize-path": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", - "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", - "dev": true + "node_modules/sass-embedded": { + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded/-/sass-embedded-1.80.3.tgz", + "integrity": "sha512-aTxTl4ToSAWg7ILFgAe+kMenj+zNlwHmHK/ZNPrOM8+HTef1Q6zuxolptYLijmHdZHKSMOkWYHgo5MMN6+GIyg==", + "license": "MIT", + "dependencies": { + "@bufbuild/protobuf": "^2.0.0", + "buffer-builder": "^0.2.0", + "colorjs.io": "^0.5.0", + "immutable": "^4.0.0", + "rxjs": "^7.4.0", + "supports-color": "^8.1.1", + "varint": "^6.0.0" + }, + "bin": { + "sass": "dist/bin/sass.js" + }, + "engines": { + "node": ">=16.0.0" + }, + "optionalDependencies": { + "sass-embedded-android-arm": "1.80.3", + "sass-embedded-android-arm64": "1.80.3", + "sass-embedded-android-ia32": "1.80.3", + "sass-embedded-android-riscv64": "1.80.3", + "sass-embedded-android-x64": "1.80.3", + "sass-embedded-darwin-arm64": "1.80.3", + "sass-embedded-darwin-x64": "1.80.3", + "sass-embedded-linux-arm": "1.80.3", + "sass-embedded-linux-arm64": "1.80.3", + "sass-embedded-linux-ia32": "1.80.3", + "sass-embedded-linux-musl-arm": "1.80.3", + "sass-embedded-linux-musl-arm64": "1.80.3", + "sass-embedded-linux-musl-ia32": "1.80.3", + "sass-embedded-linux-musl-riscv64": "1.80.3", + "sass-embedded-linux-musl-x64": "1.80.3", + "sass-embedded-linux-riscv64": "1.80.3", + "sass-embedded-linux-x64": "1.80.3", + "sass-embedded-win32-arm64": "1.80.3", + "sass-embedded-win32-ia32": "1.80.3", + "sass-embedded-win32-x64": "1.80.3" + } + }, + "node_modules/sass-embedded-android-arm": { + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm/-/sass-embedded-android-arm-1.80.3.tgz", + "integrity": "sha512-i87crav7sfShzY7AyUneXvs4SWdJ93QlYIpo/2OQPTJV5MjJF8wUp0o9NT8Oo6sUJ26kfgsb64FwqQh1wO5uBg==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" + } }, - "nth-check": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/nth-check/-/nth-check-2.1.1.tgz", - "integrity": "sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==", - "dev": true, - "requires": { - "boolbase": "^1.0.0" + "node_modules/sass-embedded-android-arm64": { + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-android-arm64/-/sass-embedded-android-arm64-1.80.3.tgz", + "integrity": "sha512-uaEKdi+PaFc1V87vj2eCUB8B2ThNvEYYu9Qs5sCtx1atEQDtvp/smHYlXOVrg2M4+g2YASkDBQewyk+auZtG0g==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" } }, - "once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha1-WDsap3WWHUsROsF9nFC6753Xa9E=", - "dev": true, - "requires": { - "wrappy": "1" + "node_modules/sass-embedded-android-ia32": { + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-android-ia32/-/sass-embedded-android-ia32-1.80.3.tgz", + "integrity": "sha512-XCa4Se7vqWuV5tFLZuYWidPLUCeK7n1AgugircJl/9QPThCGZ2mSRF0Ipj3lv+Qw4GG9kkhCqJIrksTGbSFypw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" } }, - "pako": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pako/-/pako-2.1.0.tgz", - "integrity": "sha512-w+eufiZ1WuJYgPXbV/PO3NCMEc3xqylkKHzp8bxp1uW4qaSNQUkwmLLEc3kKsfz8lpV1F8Ht3U1Cm+9Srog2ug==", - "dev": true - }, - "parent-module": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", - "dev": true, - "requires": { - "callsites": "^3.0.0" + "node_modules/sass-embedded-android-riscv64": { + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-android-riscv64/-/sass-embedded-android-riscv64-1.80.3.tgz", + "integrity": "sha512-Dn3hYh5rchfivnPrHoff2pWutuFYJRddzEXcjfb0JhgF7JmTA/6Dxaym0pqVpS1RmYDiAYnmoX5OeFtEkdVytA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" } }, - "path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha1-F0uSaHNVNP+8es5r9TpanhtcX18=", - "dev": true - }, - "periscopic": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", - "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", - "dev": true, - "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^3.0.0", - "is-reference": "^3.0.0" - }, - "dependencies": { - "estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "requires": { - "@types/estree": "^1.0.0" - } - } + "node_modules/sass-embedded-android-x64": { + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-android-x64/-/sass-embedded-android-x64-1.80.3.tgz", + "integrity": "sha512-QWOTHKPznYJnrP3HrlFYnAQOZ/c2am4ctK1cFIMtjQNGaFra8z94LZSQzAd6eeu6mITKwQbJuff36RpICZpgHA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=14.0.0" } }, - "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "picomatch": { - "version": "2.3.1", - "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", - "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", - "dev": true - }, - "postcss": { - "version": "8.4.31", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.31.tgz", - "integrity": "sha512-PS08Iboia9mts/2ygV3eLpY5ghnUcfLV/EXTOW1E2qYxJKGGBUtNjN76FYHnMs36RmARn41bC0AZmn+rR0OVpQ==", - "dev": true, - "requires": { - "nanoid": "^3.3.6", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "node_modules/sass-embedded-darwin-arm64": { + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-arm64/-/sass-embedded-darwin-arm64-1.80.3.tgz", + "integrity": "sha512-NqJXHzZGqVOarr36X5MIv0UCQHYVhOFXGe7kDhNqMQCiNApkVydseB5TM1C2lVaiWy2JaseRD/dUNS/o2ICKXw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" } }, - "postcss-selector-parser": { - "version": "6.0.10", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.10.tgz", - "integrity": "sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==", - "dev": true, - "requires": { - "cssesc": "^3.0.0", - "util-deprecate": "^1.0.2" + "node_modules/sass-embedded-darwin-x64": { + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-darwin-x64/-/sass-embedded-darwin-x64-1.80.3.tgz", + "integrity": "sha512-6dmNn+oNxXE5uGThfAsHgz7Jg1oDhXHHQyPAnIIaMOM5dXv0D/nLmrlFbFajK0HtbzGaTVBTE6wkJwjASuP0Uw==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=14.0.0" } }, - "prebuild-install": { - "version": "7.1.1", - "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.1.tgz", - "integrity": "sha512-jAXscXWMcCK8GgCoHOfIr0ODh5ai8mj63L2nWrjuAgXE6tDyYGnx4/8o/rCgU+B4JSyZBKbeZqzhtwtC3ovxjw==", - "dev": true, - "requires": { - "detect-libc": "^2.0.0", - "expand-template": "^2.0.3", - "github-from-package": "0.0.0", - "minimist": "^1.2.3", - "mkdirp-classic": "^0.5.3", - "napi-build-utils": "^1.0.1", - "node-abi": "^3.3.0", - "pump": "^3.0.0", - "rc": "^1.2.7", - "simple-get": "^4.0.0", - "tar-fs": "^2.0.0", - "tunnel-agent": "^0.6.0" - }, - "dependencies": { - "tar-fs": { - "version": "2.1.1", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-2.1.1.tgz", - "integrity": "sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==", - "dev": true, - "requires": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" - } - }, - "tar-stream": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", - "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", - "dev": true, - "requires": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - } - } + "node_modules/sass-embedded-linux-arm": { + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm/-/sass-embedded-linux-arm-1.80.3.tgz", + "integrity": "sha512-nZ7Y8gZgr+/fYrbsX3L8BfIafWXGVBcc0gKLoujad+axlFGv1MetO17S3vzrOQ1wuhjvDLVxceA/jtcta1qxoA==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" } }, - "prettier": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.0.3.tgz", - "integrity": "sha512-L/4pUDMxcNa8R/EthV08Zt42WBO4h1rarVtK0K+QJG0X187OLo7l699jWw0GKuwzkPQ//jMFA/8Xm6Fh3J/DAg==", - "dev": true - }, - "prettier-plugin-svelte": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-3.0.3.tgz", - "integrity": "sha512-dLhieh4obJEK1hnZ6koxF+tMUrZbV5YGvRpf2+OADyanjya5j0z1Llo8iGwiHmFWZVG/hLEw/AJD5chXd9r3XA==", - "dev": true, - "requires": {} - }, - "pump": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", - "dev": true, - "requires": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "node_modules/sass-embedded-linux-arm64": { + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-arm64/-/sass-embedded-linux-arm64-1.80.3.tgz", + "integrity": "sha512-a9IILen4I6oFFb5qMHOiFqIAoztPuvJ6VHNaFbktP8SUvH4FX63ZutR/qKisN9DoudzSXMZijv/aG/bTh0Kccw==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" } }, - "purgecss": { - "version": "4.1.3", - "resolved": "https://registry.npmjs.org/purgecss/-/purgecss-4.1.3.tgz", - "integrity": "sha512-99cKy4s+VZoXnPxaoM23e5ABcP851nC2y2GROkkjS8eJaJtlciGavd7iYAw2V84WeBqggZ12l8ef44G99HmTaw==", - "dev": true, - "requires": { - "commander": "^8.0.0", - "glob": "^7.1.7", - "postcss": "^8.3.5", - "postcss-selector-parser": "^6.0.6" + "node_modules/sass-embedded-linux-ia32": { + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-ia32/-/sass-embedded-linux-ia32-1.80.3.tgz", + "integrity": "sha512-yKy4N0L9WfGokpBMHOhxzaS3jyzrHUg1+5Idi6J88onwxfpEhqOgdMcoqgOqvryMPrmKN7kW5d3iNpUYOniPnw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" } }, - "queue-microtask": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", - "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", - "dev": true - }, - "queue-tick": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/queue-tick/-/queue-tick-1.0.1.tgz", - "integrity": "sha512-kJt5qhMxoszgU/62PLP1CJytzd2NKetjSRnyuj31fDd3Rlcz3fzlFdFLD1SItunPwyqEOkca6GbV612BWfaBag==", - "dev": true - }, - "random-words": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/random-words/-/random-words-2.0.0.tgz", - "integrity": "sha512-uqpnDqFnYrZajgmvgjmBrSZL2V1UA/9bNPGrilo12CmBeBszoff/avElutUlwWxG12gvmCk/8dUhvHefYxzYjw==", - "dev": true, - "requires": { - "seedrandom": "^3.0.5" + "node_modules/sass-embedded-linux-musl-arm": { + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm/-/sass-embedded-linux-musl-arm-1.80.3.tgz", + "integrity": "sha512-yB7iSoS/phNHKFsZRW0rTRwoCTtOBELG/UYpIa2qATWZsDASSjdBitGsKS3nEliweveuGIVlUqG2kUKaq9M39g==", + "cpu": [ + "arm" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" } }, - "rc": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", - "dev": true, - "requires": { - "deep-extend": "^0.6.0", - "ini": "~1.3.0", - "minimist": "^1.2.0", - "strip-json-comments": "~2.0.1" + "node_modules/sass-embedded-linux-musl-arm64": { + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-arm64/-/sass-embedded-linux-musl-arm64-1.80.3.tgz", + "integrity": "sha512-mw4BPe42wlAwg6vgmGkg+MDDyXZBexvAWC+QigtfMjTVHuSAB527UVWhIyv4jAkKLp71mPowsXXsfa4UHzyBaA==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" } }, - "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "node_modules/sass-embedded-linux-musl-ia32": { + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-ia32/-/sass-embedded-linux-musl-ia32-1.80.3.tgz", + "integrity": "sha512-eyg5L9IFisCYYMXEZ/56X8k8wdhpfK06/j9MFAINE9U4C5NxQXrVWmMTEqgyfpmca8hziBlvbRrjdquteyXWfw==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" } }, - "readdirp": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", - "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", - "dev": true, - "requires": { - "picomatch": "^2.2.1" + "node_modules/sass-embedded-linux-musl-riscv64": { + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-riscv64/-/sass-embedded-linux-musl-riscv64-1.80.3.tgz", + "integrity": "sha512-0VThiW7Gwo5UNgKyETYID6F2prHvOCH8fQQKM0sS/JSbTu1poTwD35yEptVxBpiTvyWwxI7K5Cbn0gtxobaqzA==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" } }, - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - }, - "reusify": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", - "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", - "dev": true - }, - "rimraf": { - "version": "2.7.1", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", - "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", - "dev": true, - "requires": { - "glob": "^7.1.3" + "node_modules/sass-embedded-linux-musl-x64": { + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-musl-x64/-/sass-embedded-linux-musl-x64-1.80.3.tgz", + "integrity": "sha512-ALSKlhTQdNS0cayyaXD8huNd+DRjWgCjDqyjvwSgemfLL+wtmVCO8h9rGu1MCwR8GHP6ceZCT2fBmjfcGHk0DQ==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" } }, - "rollup": { - "version": "3.28.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-3.28.1.tgz", - "integrity": "sha512-R9OMQmIHJm9znrU3m3cpE8uhN0fGdXiawME7aZIpQqvpS/85+Vt1Hq1/yVIcYfOmaQiHjvXkQAoJukvLpau6Yw==", - "dev": true, - "requires": { - "fsevents": "~2.3.2" + "node_modules/sass-embedded-linux-riscv64": { + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-riscv64/-/sass-embedded-linux-riscv64-1.80.3.tgz", + "integrity": "sha512-/1JvuQi137BNO7iTvNNraGYEt9mh3ch44cabJBTxLn3IZV5vNblENI+Hrj9J8/VWIsJumwPQGZSUrMbZcgB0tg==", + "cpu": [ + "riscv64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" } }, - "run-parallel": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", - "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", - "dev": true, - "requires": { - "queue-microtask": "^1.2.2" + "node_modules/sass-embedded-linux-x64": { + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-linux-x64/-/sass-embedded-linux-x64-1.80.3.tgz", + "integrity": "sha512-ISQUnl9oFA0PFPtgOpgotfKQ8guUBIYcTpkHEF9lQ4PyFIxkXppk5CwQ8l0VQcQaKhOD2HQAucoqM51U7FABqA==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=14.0.0" } }, - "sade": { - "version": "1.8.1", - "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", - "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", - "dev": true, - "requires": { - "mri": "^1.1.0" + "node_modules/sass-embedded-win32-arm64": { + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-arm64/-/sass-embedded-win32-arm64-1.80.3.tgz", + "integrity": "sha512-RFT/OsWHVagPYa/9v+KfVM99QgzwzwnT2maapRfulEH39v0uPGOIFNXmnhaN3E5gNLIjIn3CTnR9KjTC145E8Q==", + "cpu": [ + "arm64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" } }, - "safe-buffer": { - "version": "5.2.1", - "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", - "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", - "dev": true - }, - "sander": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", - "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", - "dev": true, - "requires": { - "es6-promise": "^3.1.2", - "graceful-fs": "^4.1.3", - "mkdirp": "^0.5.1", - "rimraf": "^2.5.2" + "node_modules/sass-embedded-win32-ia32": { + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-ia32/-/sass-embedded-win32-ia32-1.80.3.tgz", + "integrity": "sha512-Is0eeX+UlWW7yPfDqc2Z2n9ql2rkA1uDaAkbHWWx5APc8CKYtds1w4B3Tyoy6lHnopEifgzgsnp6QSyOHHzPBg==", + "cpu": [ + "ia32" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" } }, - "sass": { - "version": "1.66.1", - "resolved": "https://registry.npmjs.org/sass/-/sass-1.66.1.tgz", - "integrity": "sha512-50c+zTsZOJVgFfTgwwEzkjA3/QACgdNsKueWPyAR0mRINIvLAStVQBbPg14iuqEQ74NPDbXzJARJ/O4SI1zftA==", - "dev": true, - "requires": { - "chokidar": ">=3.0.0 <4.0.0", - "immutable": "^4.0.0", - "source-map-js": ">=0.6.2 <2.0.0" + "node_modules/sass-embedded-win32-x64": { + "version": "1.80.3", + "resolved": "https://registry.npmjs.org/sass-embedded-win32-x64/-/sass-embedded-win32-x64-1.80.3.tgz", + "integrity": "sha512-wehVA0atPloc6NKof/ctpW0agM+k7kiBLIpQs3/mi9FAlmTjxNnvntBPZIbl8n7AAExiLEir+x/LHC0yGhTfkg==", + "cpu": [ + "x64" + ], + "license": "MIT", + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=14.0.0" } }, - "seedrandom": { + "node_modules/seedrandom": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/seedrandom/-/seedrandom-3.0.5.tgz", "integrity": "sha512-8OwmbklUNzwezjGInmZ+2clQmExQPvomqjL7LFqOYqtmuxRgQYqOD3mHaU+MvZn5FLUeVxVfQjwLZW/n/JFuqg==", - "dev": true + "dev": true, + "license": "MIT" }, - "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "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, - "requires": { - "lru-cache": "^6.0.0" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "sharp": { - "version": "0.32.5", - "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.5.tgz", - "integrity": "sha512-0dap3iysgDkNaPOaOL4X/0akdu0ma62GcdC2NBQ+93eqpePdDdr2/LM0sFdDSMmN7yS+odyZtPsb7tx/cYBKnQ==", + "node_modules/sharp": { + "version": "0.33.5", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.33.5.tgz", + "integrity": "sha512-haPVm1EkS9pgvHrQ/F3Xy+hgcuMV0Wm9vfIBSiwZ05k+xgb0PkBQpGsAA/oWdDobNaZTH5ppvHtzCFbnSEwHVw==", "dev": true, - "requires": { + "hasInstallScript": true, + "license": "Apache-2.0", + "dependencies": { "color": "^4.2.3", - "detect-libc": "^2.0.2", - "node-addon-api": "^6.1.0", - "prebuild-install": "^7.1.1", - "semver": "^7.5.4", - "simple-get": "^4.0.1", - "tar-fs": "^3.0.4", - "tunnel-agent": "^0.6.0" - } - }, - "simple-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/simple-concat/-/simple-concat-1.0.1.tgz", - "integrity": "sha512-cSFtAPtRhljv69IK0hTVZQ+OfE9nePi/rtJmw5UjHeVyVroEqJXP1sFztKUy1qU+xvz3u/sfYJLa947b7nAN2Q==", - "dev": true - }, - "simple-get": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/simple-get/-/simple-get-4.0.1.tgz", - "integrity": "sha512-brv7p5WgH0jmQJr1ZDDfKDOSeWWg+OVypG99A/5vYGPqJ6pxiaHLy8nxtFjBA7oMa01ebA9gfh1uMCFqOuXxvA==", + "detect-libc": "^2.0.3", + "semver": "^7.6.3" + }, + "engines": { + "node": "^18.17.0 || ^20.3.0 || >=21.0.0" + }, + "funding": { + "url": "https://opencollective.com/libvips" + }, + "optionalDependencies": { + "@img/sharp-darwin-arm64": "0.33.5", + "@img/sharp-darwin-x64": "0.33.5", + "@img/sharp-libvips-darwin-arm64": "1.0.4", + "@img/sharp-libvips-darwin-x64": "1.0.4", + "@img/sharp-libvips-linux-arm": "1.0.5", + "@img/sharp-libvips-linux-arm64": "1.0.4", + "@img/sharp-libvips-linux-s390x": "1.0.4", + "@img/sharp-libvips-linux-x64": "1.0.4", + "@img/sharp-libvips-linuxmusl-arm64": "1.0.4", + "@img/sharp-libvips-linuxmusl-x64": "1.0.4", + "@img/sharp-linux-arm": "0.33.5", + "@img/sharp-linux-arm64": "0.33.5", + "@img/sharp-linux-s390x": "0.33.5", + "@img/sharp-linux-x64": "0.33.5", + "@img/sharp-linuxmusl-arm64": "0.33.5", + "@img/sharp-linuxmusl-x64": "0.33.5", + "@img/sharp-wasm32": "0.33.5", + "@img/sharp-win32-ia32": "0.33.5", + "@img/sharp-win32-x64": "0.33.5" + } + }, + "node_modules/sharp/node_modules/detect-libc": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.0.3.tgz", + "integrity": "sha512-bwy0MGW55bG41VqxxypOsdSdGqLwXPI/focwgTYCFMbdUiBAxLg9CFzG08sz2aqzknwiX7Hkl0bQENjg8iLByw==", "dev": true, - "requires": { - "decompress-response": "^6.0.0", - "once": "^1.3.1", - "simple-concat": "^1.0.0" + "license": "Apache-2.0", + "engines": { + "node": ">=8" } }, - "simple-swizzle": { + "node_modules/simple-swizzle": { "version": "0.2.2", "resolved": "https://registry.npmjs.org/simple-swizzle/-/simple-swizzle-0.2.2.tgz", "integrity": "sha512-JA//kQgZtbuY83m+xT+tXJkmJncGMTFT+C+g2h2R9uxkYIrE2yy9sgmcLhCnw57/WSD+Eh3J97FPEDFnbXnDUg==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "is-arrayish": "^0.3.1" } }, - "sorcery": { - "version": "0.11.0", - "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz", - "integrity": "sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==", - "dev": true, - "requires": { - "@jridgewell/sourcemap-codec": "^1.4.14", - "buffer-crc32": "^0.2.5", - "minimist": "^1.2.0", - "sander": "^0.5.0" - } - }, - "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==", - "dev": true - }, - "streamx": { - "version": "2.15.1", - "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.15.1.tgz", - "integrity": "sha512-fQMzy2O/Q47rgwErk/eGeLu/roaFWV0jVsogDmrszM9uIw8L5OA+t+V93MgYlufNptfjmYR1tOMWhei/Eh7TQA==", - "dev": true, - "requires": { - "fast-fifo": "^1.1.0", - "queue-tick": "^1.0.1" + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.10.0" } }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "node_modules/style-mod": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.1.2.tgz", + "integrity": "sha512-wnD1HyVqpJUI2+eKZ+eo1UwghftP6yuFheBqqe+bWCotBjC2K1YnteJILRMs3SM4V/0dLEW1SC27MWP5y+mwmw==", "dev": true, - "requires": { - "safe-buffer": "~5.2.0" - } + "license": "MIT" }, - "strip-indent": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", - "dev": true, - "requires": { - "min-indent": "^1.0.0" + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "strip-json-comments": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha512-4gB8na07fecVVkOI6Rs4e7T6NOTki5EmL7TUduTs6bu3EdnSycntVJ4re8kgZA+wx9IueI2Y11bfbgwtzuE0KQ==", - "dev": true - }, - "style-mod": { - "version": "4.0.3", - "resolved": "https://registry.npmjs.org/style-mod/-/style-mod-4.0.3.tgz", - "integrity": "sha512-78Jv8kYJdjbvRwwijtCevYADfsI0lGzYJe4mMFdceO8l75DFFDoqBhR1jVDicDRRaX4//g1u9wKeo+ztc2h1Rw==", - "dev": true - }, - "svelte": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.0.tgz", - "integrity": "sha512-kVsdPjDbLrv74SmLSUzAsBGquMs4MPgWGkGLpH+PjOYnFOziAvENVzgJmyOCV2gntxE32aNm8/sqNKD6LbIpeQ==", - "dev": true, - "requires": { + "node_modules/svelte": { + "version": "4.2.19", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.19.tgz", + "integrity": "sha512-IY1rnGr6izd10B0A8LqsBfmlT5OILVuZ7XsI0vdGPEvuonFV7NYEUK4dAkm9Zg2q0Um92kYjTpS1CAP3Nh/KWw==", + "license": "MIT", + "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", "aria-query": "^5.3.0", - "axobject-query": "^3.2.1", + "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", "locate-character": "^3.0.0", - "magic-string": "^0.30.0", + "magic-string": "^0.30.4", "periscopic": "^3.1.0" }, - "dependencies": { - "estree-walker": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", - "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", - "dev": true, - "requires": { - "@types/estree": "^1.0.0" - } - } + "engines": { + "node": ">=16" } }, - "svelte-check": { - "version": "3.5.1", - "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-3.5.1.tgz", - "integrity": "sha512-+Zb4iHxAhdUtcUg/WJPRjlS1RJalIsWAe9Mz6G1zyznSs7dDkT7VUBdXc3q7Iwg49O/VrZgyJRvOJkjuBfKjFA==", + "node_modules/svelte-check": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/svelte-check/-/svelte-check-4.0.5.tgz", + "integrity": "sha512-icBTBZ3ibBaywbXUat3cK6hB5Du+Kq9Z8CRuyLmm64XIe2/r+lQcbuBx/IQgsbrC+kT2jQ0weVpZSSRIPwB6jQ==", "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.17", - "chokidar": "^3.4.1", - "fast-glob": "^3.2.7", - "import-fresh": "^3.2.1", + "license": "MIT", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.25", + "chokidar": "^4.0.1", + "fdir": "^6.2.0", "picocolors": "^1.0.0", - "sade": "^1.7.4", - "svelte-preprocess": "^5.0.4", - "typescript": "^5.0.3" + "sade": "^1.7.4" + }, + "bin": { + "svelte-check": "bin/svelte-check" + }, + "engines": { + "node": ">= 18.0.0" + }, + "peerDependencies": { + "svelte": "^4.0.0 || ^5.0.0-next.0", + "typescript": ">=5.0.0" } }, - "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-check/node_modules/fdir": { + "version": "6.4.2", + "resolved": "https://registry.npmjs.org/fdir/-/fdir-6.4.2.tgz", + "integrity": "sha512-KnhMXsKSPZlAhp7+IjUkRZKPb4fUyccpDrdFXbi4QL1qkmFh9kVY09Yox+n4MaOb3lHZ1Tv829C3oaaXoMYPDQ==", "dev": true, - "requires": {} + "license": "MIT", + "peerDependencies": { + "picomatch": "^3 || ^4" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } + } }, - "svelte-parse-markup": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/svelte-parse-markup/-/svelte-parse-markup-0.1.2.tgz", - "integrity": "sha512-DycY7DJr7VqofiJ63ut1/NEG92HrWWL56VWITn/cJCu+LlZhMoBkBXT4opUitPEEwbq1nMQbv4vTKUfbOqIW1g==", + "node_modules/svelte-check/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", "dev": true, - "requires": {} + "license": "MIT", + "optional": true, + "peer": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "svelte-preprocess": { - "version": "5.0.4", - "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.0.4.tgz", - "integrity": "sha512-ABia2QegosxOGsVlsSBJvoWeXy1wUKSfF7SWJdTjLAbx/Y3SrVevvvbFNQqrSJw89+lNSsM58SipmZJ5SRi5iw==", + "node_modules/svelte-hmr": { + "version": "0.16.0", + "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.16.0.tgz", + "integrity": "sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==", + "license": "ISC", + "engines": { + "node": "^12.20 || ^14.13.1 || >= 16" + }, + "peerDependencies": { + "svelte": "^3.19.0 || ^4.0.0" + } + }, + "node_modules/svelte-parse-markup": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/svelte-parse-markup/-/svelte-parse-markup-0.1.5.tgz", + "integrity": "sha512-T6mqZrySltPCDwfKXWQ6zehipVLk4GWfH1zCMGgRtLlOIFPuw58ZxVYxVvotMJgJaurKi1i14viB2GIRKXeJTQ==", + "dev": true, + "license": "MIT", + "funding": { + "url": "https://bjornlu.com/sponsor" + }, + "peerDependencies": { + "svelte": "^3.0.0 || ^4.0.0 || ^5.0.0-next.1" + } + }, + "node_modules/svelte-preprocess": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-6.0.3.tgz", + "integrity": "sha512-PLG2k05qHdhmRG7zR/dyo5qKvakhm8IJ+hD2eFRQmMLHp7X3eJnjeupUtvuRpbNiF31RjVw45W+abDwHEmP5OA==", "dev": true, - "requires": { - "@types/pug": "^2.0.6", - "detect-indent": "^6.1.0", - "magic-string": "^0.27.0", - "sorcery": "^0.11.0", - "strip-indent": "^3.0.0" + "hasInstallScript": true, + "license": "MIT", + "engines": { + "node": ">= 18.0.0" }, - "dependencies": { - "magic-string": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.27.0.tgz", - "integrity": "sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==", - "dev": true, - "requires": { - "@jridgewell/sourcemap-codec": "^1.4.13" - } + "peerDependencies": { + "@babel/core": "^7.10.2", + "coffeescript": "^2.5.1", + "less": "^3.11.3 || ^4.0.0", + "postcss": "^7 || ^8", + "postcss-load-config": ">=3", + "pug": "^3.0.0", + "sass": "^1.26.8", + "stylus": ">=0.55", + "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "svelte": "^4.0.0 || ^5.0.0-next.100 || ^5.0.0", + "typescript": "^5.0.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "coffeescript": { + "optional": true + }, + "less": { + "optional": true + }, + "postcss": { + "optional": true + }, + "postcss-load-config": { + "optional": true + }, + "pug": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "typescript": { + "optional": true } } }, - "svelte-preprocess-import-assets": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/svelte-preprocess-import-assets/-/svelte-preprocess-import-assets-1.0.1.tgz", - "integrity": "sha512-aHPd8SQhWfzC+Av6/nnlBdIj8zBdfbp5sC26/tXvZD3sBl4+x+rgf9qSgHI8aAi3gO7QyTu3xsvVc//VPsipHQ==", + "node_modules/svelte-preprocess-import-assets": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/svelte-preprocess-import-assets/-/svelte-preprocess-import-assets-1.1.0.tgz", + "integrity": "sha512-pWjoceFcGAG6vUg50JZXfhr5V4amxI2aYbcsn6CJrytcA528NNgaHnvMR1EwJYBIpZEf302I8Pyw0YeEta1zbg==", "dev": true, - "requires": { - "magic-string": "^0.30.0", - "svelte-parse-markup": "^0.1.1" + "license": "MIT", + "dependencies": { + "estree-walker": "^3.0.3", + "magic-string": "^0.30.5", + "svelte-parse-markup": "^0.1.2" + }, + "peerDependencies": { + "svelte": "^3.37.0 || ^4.0.0 || ^5.0.0-next.1" } }, - "svelte-routing": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/svelte-routing/-/svelte-routing-2.2.0.tgz", - "integrity": "sha512-aTzrGA/T4dDWUmRZF4skIoiD6jpYb9X8lOph0g30bkEt13BN9D/u++hICKEVqrma5mt5CyiXsCM7t//D+SMFLg==", - "dev": true + "node_modules/svelte-preprocess-import-assets/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dev": true, + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } }, - "svelte-sequential-preprocessor": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/svelte-sequential-preprocessor/-/svelte-sequential-preprocessor-2.0.1.tgz", - "integrity": "sha512-N5JqlBni6BzElxmuFrOPxOJnjsxh1cFDACLEVKs8OHBcx8ZNRO1p5SxuQex1m3qbLzAC8G99EHeWcxGkjyKjLQ==", + "node_modules/svelte-routing": { + "version": "2.13.0", + "resolved": "https://registry.npmjs.org/svelte-routing/-/svelte-routing-2.13.0.tgz", + "integrity": "sha512-/NTxqTwLc7Dq306hARJrH2HLXOBtKd7hu8nxgoFDlK0AC4SOKnzisiX/9m8Uksei1QAWtlAEdF91YphNM8iDMg==", + "dev": true, + "license": "MIT" + }, + "node_modules/svelte-sequential-preprocessor": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/svelte-sequential-preprocessor/-/svelte-sequential-preprocessor-2.0.2.tgz", + "integrity": "sha512-DIFm0kSNscVxtBmKkBiygAHB5otoqN1aVmJ3t57jZhJfCB7Np/lUSoTtSrvPFjmlBbMeOsb1VQ06cut1+rBYOg==", "dev": true, - "requires": { - "svelte": "^4.0.1", - "tslib": "~2.6.0" + "license": "MIT", + "dependencies": { + "svelte": "^4.2.19", + "tslib": "~2.7.0" + }, + "engines": { + "node": ">=16" } }, - "svelte-splitpanes": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/svelte-splitpanes/-/svelte-splitpanes-0.8.0.tgz", - "integrity": "sha512-cdtSUG8GE8eCAY+TiIGJmnEqV0GC1k/7lwWqovN0qTbw7OIAKEA2BWvqnZ/jk7UzSLlzdI2Uxxm4shXgCdN1kQ==", + "node_modules/svelte-splitpanes": { + "version": "8.0.8", + "resolved": "https://registry.npmjs.org/svelte-splitpanes/-/svelte-splitpanes-8.0.8.tgz", + "integrity": "sha512-GmEXRNOqsNouUxWbrM/b88Q7eHLzbt8lspXU6Z5xSnzfL38xP/TnKct+m9t1GW2WF2NxGcXAJ/SPU9EcmgD6Qw==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "esm-env-robust": "0.0.3" + }, + "peerDependencies": { + "svelte": "^4.2.19" } }, - "svgo": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.0.2.tgz", - "integrity": "sha512-Z706C1U2pb1+JGP48fbazf3KxHrWOsLme6Rv7imFBn5EnuanDW1GPaA/P1/dvObE670JDePC3mnj0k0B7P0jjQ==", + "node_modules/svelte/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "license": "MIT", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/svgo": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-3.3.2.tgz", + "integrity": "sha512-OoohrmuUlBs8B8o6MB2Aevn+pRIH9zDALSR+6hhqVfa6fRwG/Qw9VUMSMW9VNg2CFc/MTIfabtdOVl9ODIJjpw==", "dev": true, - "requires": { + "license": "MIT", + "dependencies": { "@trysound/sax": "0.2.0", "commander": "^7.2.0", "css-select": "^5.1.0", - "css-tree": "^2.2.1", + "css-tree": "^2.3.1", + "css-what": "^6.1.0", "csso": "^5.0.5", "picocolors": "^1.0.0" }, - "dependencies": { - "commander": { - "version": "7.2.0", - "resolved": "https://registry.npmjs.org/commander/-/commander-7.2.0.tgz", - "integrity": "sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==", - "dev": true - } - } - }, - "tar-fs": { - "version": "3.0.4", - "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.4.tgz", - "integrity": "sha512-5AFQU8b9qLfZCX9zp2duONhPmZv0hGYiBPJsyUdqMjzq/mqVpy/rEUSeHk1+YitmxugaptgBh5oDGU3VsAJq4w==", - "dev": true, - "requires": { - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^3.1.5" - } - }, - "tar-stream": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.6.tgz", - "integrity": "sha512-B/UyjYwPpMBv+PaFSWAmtYjwdrlEaZQEhMIBFNC5oEG8lpiW8XjcSdmEaClj28ArfKScKHs2nshz3k2le6crsg==", - "dev": true, - "requires": { - "b4a": "^1.6.4", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" + "bin": { + "svgo": "bin/svgo" + }, + "engines": { + "node": ">=14.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/svgo" } }, - "to-regex-range": { + "node_modules/to-regex-range": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", - "dev": true, - "requires": { + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" } }, - "tslib": { - "version": "2.6.2", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", - "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==", - "dev": true + "node_modules/tslib": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.7.0.tgz", + "integrity": "sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==", + "license": "0BSD" }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w==", - "dev": true, - "requires": { - "safe-buffer": "^5.0.1" - } - }, - "typescript": { - "version": "5.2.2", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.2.2.tgz", - "integrity": "sha512-mI4WrpHsbCIcwT9cF4FZvr80QUeKvsUsUvKDoR+X/7XHQH98xYD8YHZg7ANtz2GtZt/CBq2QJ0thkGJMHfqc1w==", - "dev": true - }, - "util-deprecate": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", - "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", - "dev": true - }, - "vite": { - "version": "4.4.9", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.4.9.tgz", - "integrity": "sha512-2mbUn2LlUmNASWwSCNSJ/EG2HuSRTnVNaydp6vMCm5VIqJsjMfbIWtbH2kDuwUVW5mMUKKZvGPX/rqeqVvv1XA==", + "node_modules/typescript": { + "version": "5.6.3", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.6.3.tgz", + "integrity": "sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==", "dev": true, - "requires": { - "esbuild": "^0.18.10", - "fsevents": "~2.3.2", - "postcss": "^8.4.27", - "rollup": "^3.27.1" + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" } }, - "vite-imagetools": { - "version": "5.0.8", - "resolved": "https://registry.npmjs.org/vite-imagetools/-/vite-imagetools-5.0.8.tgz", - "integrity": "sha512-oFNfc58iLz1lHFsIKQy+wp0RNcZjiaDeHYTexYowpf4RYx9tZ97eWEcw8lQ1jDT8AnOso6XZi5iGjLNAeTR9Tw==", - "dev": true, - "requires": { - "@rollup/pluginutils": "^5.0.2", - "imagetools-core": "^4.0.5" - }, + "node_modules/varint": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/varint/-/varint-6.0.0.tgz", + "integrity": "sha512-cXEIW6cfr15lFv563k4GuVuW/fiwjknytD37jIOLSdSWuOI6WnO/oKwmP2FQTU2l01LP8/M5TSAJpzUaGe3uWg==", + "license": "MIT" + }, + "node_modules/vite": { + "version": "5.4.9", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.4.9.tgz", + "integrity": "sha512-20OVpJHh0PAM0oSOELa5GaZNWeDjcAvQjGXy2Uyr+Tp+/D2/Hdz6NLgpJLsarPTA2QJ6v8mX2P1ZfbsSKvdMkg==", + "license": "MIT", "dependencies": { - "@rollup/pluginutils": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.0.2.tgz", - "integrity": "sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==", - "dev": true, - "requires": { - "@types/estree": "^1.0.0", - "estree-walker": "^2.0.2", - "picomatch": "^2.3.1" - } + "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 } } }, - "vitefu": { - "version": "0.2.4", - "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.4.tgz", - "integrity": "sha512-fanAXjSaf9xXtOOeno8wZXIhgia+CZury481LsDaV++lSvcU2R9Ch2bPh3PYFyoHW+w9LqAeYRISVQjUIew14g==", + "node_modules/vite-imagetools": { + "version": "7.0.4", + "resolved": "https://registry.npmjs.org/vite-imagetools/-/vite-imagetools-7.0.4.tgz", + "integrity": "sha512-C9C7b2p/8/TCN2g26tE9haoer2i8K4x0v2RXUiHsIjiz221vQuKItCQ+VyiVCsUMPXfJC/tlZsmCZVBz5jh7uA==", "dev": true, - "requires": {} + "license": "MIT", + "dependencies": { + "@rollup/pluginutils": "^5.0.5", + "imagetools-core": "^7.0.1", + "sharp": "^0.33.4" + }, + "engines": { + "node": ">=18.0.0" + } }, - "w3c-keyname": { + "node_modules/vitefu": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", + "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==", + "license": "MIT", + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/w3c-keyname": { "version": "2.2.8", "resolved": "https://registry.npmjs.org/w3c-keyname/-/w3c-keyname-2.2.8.tgz", "integrity": "sha512-dpojBhNsCNN7T82Tm7k26A6G9ML3NkhDsnw9n/eoxSRlVBB4CEtIQ/KTCLI2Fwf3ataSXRhYFkQi3SlnFwPvPQ==", - "dev": true - }, - "warning": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/warning/-/warning-3.0.0.tgz", - "integrity": "sha512-jMBt6pUrKn5I+OGgtQ4YZLdhIeJmObddh6CsibPxyQ5yPZm1XExSyzC1LCNX7BzhxWgiHmizBWJTHJIjMjTQYQ==", "dev": true, - "requires": { - "loose-envify": "^1.0.0" - } - }, - "wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8=", - "dev": true - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true + "license": "MIT" } } } diff --git a/client/package.json b/client/package.json index e542c89..b84c365 100644 --- a/client/package.json +++ b/client/package.json @@ -8,7 +8,7 @@ "build": "sass --load-path=node_modules styles/carbon-style.scss styles/carbon-style-compiled.css && vite build", "preview": "vite preview", "check": "svelte-check --tsconfig ./tsconfig.json", - "format": "prettier --plugin-search-dir . --write .", + "format": "prettier --write .", "preprocess": "sass --load-path=node_modules styles/carbon-style.scss styles/carbon-style-compiled.css" }, "repository": { @@ -21,36 +21,41 @@ }, "homepage": "https://github.com/k2d222/twwe#readme", "devDependencies": { - "@carbon/styles": "^1.37.0", - "@poppanator/sveltekit-svg": "^4.1.3", - "@sveltejs/vite-plugin-svelte": "^2.4.5", - "@tsconfig/svelte": "^5.0.2", - "@types/js-md5": "^0.7.0", - "@types/pako": "^2.0.0", - "carbon-components": "^10.58.10", - "carbon-components-svelte": "^0.80.0", - "carbon-icons-svelte": "^12.3.0", - "carbon-preprocess-svelte": "^0.10.0", + "@carbon/styles": "^1.67.0", + "@carbon/themes": "^11.42.0", + "@codemirror/language": "^6.10.3", + "@codemirror/lint": "^6.8.2", + "@lezer/highlight": "^1.2.1", + "@lezer/lr": "^1.4.2", + "@poppanator/sveltekit-svg": "^4.2.1", + "@tsconfig/svelte": "^5.0.4", + "@types/js-md5": "^0.7.2", + "@types/pako": "^2.0.3", + "carbon-components-svelte": "^0.85.2", + "carbon-icons-svelte": "^12.12.0", + "carbon-preprocess-svelte": "^0.11.7", "codemirror": "^6.0.1", "crc": "^4.3.2", "gl-matrix": "^3.4.3", - "js-md5": "^0.7.3", + "js-md5": "^0.8.3", "pako": "^2.1.0", - "prettier": "^3.0.3", - "prettier-plugin-svelte": "^3.0.3", - "random-words": "^2.0.0", - "sass": "^1.66.1", - "svelte": "^4.2.0", - "svelte-check": "^3.5.1", - "svelte-preprocess": "^5.0.4", - "svelte-preprocess-import-assets": "^1.0.1", - "svelte-routing": "^2.2.0", - "svelte-sequential-preprocessor": "^2.0.1", - "svelte-splitpanes": "^0.8.0", - "svgo": "^3.0.2", - "tslib": "^2.6.2", - "typescript": "^5.2.2", - "vite": "^4.4.9", - "vite-imagetools": "^5.0.8" + "prettier": "^3.3.3", + "prettier-plugin-svelte": "^3.2.7", + "random-words": "^2.0.1", + "svelte": "^4.2.19", + "svelte-check": "^4.0.5", + "svelte-preprocess": "^6.0.3", + "svelte-preprocess-import-assets": "^1.1.0", + "svelte-routing": "^2.13.0", + "svelte-sequential-preprocessor": "^2.0.2", + "svelte-splitpanes": "^8.0.3", + "svgo": "^3.3.2", + "typescript": "^5.6.3", + "vite": "^5.4.9", + "vite-imagetools": "^7.0.4" + }, + "dependencies": { + "@sveltejs/vite-plugin-svelte": "^3.1.2", + "sass-embedded": "^1.80.3" } -} \ No newline at end of file +} diff --git a/client/src/gl/global.ts b/client/src/gl/global.ts index c4846ef..4f6d9f8 100644 --- a/client/src/gl/global.ts +++ b/client/src/gl/global.ts @@ -22,4 +22,3 @@ export function setContext(ctx: Context) { export function getContext(): Context { return { renderer, viewport } } - diff --git a/client/src/gl/renderMap.ts b/client/src/gl/renderMap.ts index 28d1a22..17566c8 100644 --- a/client/src/gl/renderMap.ts +++ b/client/src/gl/renderMap.ts @@ -33,7 +33,14 @@ import { Image } from '../twmap/image' import { Texture } from './texture' import { isPhysicsLayer, type Ctor } from '../ui/lib/util' import { type Config as AutomapperConfig, automap } from '../twmap/automap' -import { colorFromJson, coordFromJson, curveTypeFromString, fromFixedNum, stringToResIndex, uvFromJson } from '../server/convert' +import { + colorFromJson, + coordFromJson, + curveTypeFromString, + fromFixedNum, + stringToResIndex, + uvFromJson, +} from '../server/convert' import type { Brush } from '../ui/lib/editor' import type { EditTile, Recv } from '../server/protocol' @@ -81,8 +88,7 @@ export class RenderMap { brushEnv: ColorEnvelope constructor(map: Map) { - if (!gl) - throw "no GL context was initialized" + if (!gl) throw 'no GL context was initialized' this.map = map this.textures = map.images.map(img => new Texture(img)) @@ -157,7 +163,7 @@ export class RenderMap { const layer = rlayer.layer as AnyTilesLayer const w = blayer.tiles[0].length const h = blayer.tiles.length - + const fill = (i: number) => { const x = i % w const y = Math.floor(i / w) @@ -212,19 +218,15 @@ export class RenderMap { createEnvelope(part: Recv['create/envelope']) { let env: Envelope - if (part.type === 'color') - env = new ColorEnvelope() - else if (part.type === 'position') - env = new PositionEnvelope() - else if (part.type === 'sound') - env = new SoundEnvelope() - else { - const _unreachable: never = part - return _unreachable - } + if (part.type === 'color') env = new ColorEnvelope() + else if (part.type === 'position') env = new PositionEnvelope() + else if (part.type === 'sound') env = new SoundEnvelope() + else { + const _unreachable: never = part + return _unreachable + } - if (part.name !== undefined) - env.name = part.name + if (part.name !== undefined) env.name = part.name this.addEnvelope(env) } @@ -267,8 +269,7 @@ export class RenderMap { const rlayer = rgroup.layers[e.l] as RenderAnyTilesLayer const layer = rlayer.layer - if (e.x < 0 || e.y < 0 || e.x >= layer.width || e.y >= layer.height) - return false + if (e.x < 0 || e.y < 0 || e.x >= layer.width || e.y >= layer.height) return false const tile = layer.getTile(e.x, e.y) @@ -298,10 +299,14 @@ export class RenderMap { colors: part.colors, texCoords: part.texture_coords.map(p => uvFromJson(p, 10)), posEnv: - part.position_env === null ? null : (this.map.envelopes[stringToResIndex(part.position_env)[0]] as PositionEnvelope), + part.position_env === null + ? null + : (this.map.envelopes[stringToResIndex(part.position_env)[0]] as PositionEnvelope), posEnvOffset: part.position_env_offset, colorEnv: - part.color_env === null ? null : (this.map.envelopes[stringToResIndex(part.color_env)[0]] as ColorEnvelope), + part.color_env === null + ? null + : (this.map.envelopes[stringToResIndex(part.color_env)[0]] as ColorEnvelope), colorEnvOffset: part.color_env_offset, } @@ -314,22 +319,23 @@ export class RenderMap { const rlayer = rgroup.layers[l] as RenderQuadsLayer const quad = rlayer.layer.quads[q] - if ('position' in part) - quad.points[4] = coordFromJson(part.position, 15) + if ('position' in part) quad.points[4] = coordFromJson(part.position, 15) if ('corners' in part) quad.points = [...part.corners.map(c => coordFromJson(c, 15)), quad.points[4]] - if ('colors' in part) - quad.colors = part.colors - if ('texture_coords' in part) - quad.texCoords = part.texture_coords.map(p => uvFromJson(p, 10)) + if ('colors' in part) quad.colors = part.colors + if ('texture_coords' in part) quad.texCoords = part.texture_coords.map(p => uvFromJson(p, 10)) if ('posEnv' in part) - quad.posEnv = part.position_env === null ? null : (this.map.envelopes[stringToResIndex(part.position_env)[0]] as PositionEnvelope) - if ('position_env_offset' in part) - quad.posEnvOffset = part.position_env_offset + quad.posEnv = + part.position_env === null + ? null + : (this.map.envelopes[stringToResIndex(part.position_env)[0]] as PositionEnvelope) + if ('position_env_offset' in part) quad.posEnvOffset = part.position_env_offset if ('colorEnv' in part) - quad.colorEnv = part.color_env === null ? null : (this.map.envelopes[stringToResIndex(part.color_env)[0]] as ColorEnvelope) - if ('color_env_offset' in part) - quad.colorEnvOffset = part.color_env_offset + quad.colorEnv = + part.color_env === null + ? null + : (this.map.envelopes[stringToResIndex(part.color_env)[0]] as ColorEnvelope) + if ('color_env_offset' in part) quad.colorEnvOffset = part.color_env_offset rlayer.recompute() } @@ -347,21 +353,19 @@ export class RenderMap { if (part.offset !== undefined) { rgroup.group.offX = fromFixedNum(part.offset.x, 5) rgroup.group.offY = fromFixedNum(part.offset.y, 5) - } + } if (part.parallax !== undefined) { rgroup.group.paraX = part.parallax.x rgroup.group.paraY = part.parallax.y - } - if (part.clipping !== undefined) - rgroup.group.clipping = part.clipping + } + if (part.clipping !== undefined) rgroup.group.clipping = part.clipping if (part.clip !== undefined) { rgroup.group.clipX = fromFixedNum(part.clip.x, 5) rgroup.group.clipY = fromFixedNum(part.clip.y, 5) rgroup.group.clipW = fromFixedNum(part.clip.w, 5) rgroup.group.clipH = fromFixedNum(part.clip.h, 5) } - if (part.name !== undefined) - rgroup.group.name = part.name + if (part.name !== undefined) rgroup.group.name = part.name } reorderGroup(...[src, tgt]: Recv['move/group']) { @@ -381,30 +385,26 @@ export class RenderMap { const rgroup = this.groups[g] const rlayer = rgroup.layers[l] - if (part.detail !== undefined) - rlayer.layer.detail = part.detail - if (part.name !== undefined) - rlayer.layer.name = part.name + if (part.detail !== undefined) rlayer.layer.detail = part.detail + if (part.name !== undefined) rlayer.layer.name = part.name if (rlayer instanceof RenderAnyTilesLayer) { - if ('width' in part) - this.setLayerWidth(rgroup, rlayer, part.width) - if ('height' in part) - this.setLayerHeight(rgroup, rlayer, part.height) + if ('width' in part) this.setLayerWidth(rgroup, rlayer, part.width) + if ('height' in part) this.setLayerHeight(rgroup, rlayer, part.height) } if (rlayer instanceof RenderTilesLayer && part.type === MapDir.LayerKind.Tiles) { - if (part.color !== undefined) - rlayer.layer.color = part.color + if (part.color !== undefined) rlayer.layer.color = part.color if (part.color_env !== undefined) - rlayer.layer.colorEnv = part.color_env === null ? null : this.map.envelopes[stringToResIndex(part.color_env)[0]] as ColorEnvelope - if (part.color_env_offset !== undefined) - rlayer.layer.colorEnvOffset = part.color_env_offset + rlayer.layer.colorEnv = + part.color_env === null + ? null + : (this.map.envelopes[stringToResIndex(part.color_env)[0]] as ColorEnvelope) + if (part.color_env_offset !== undefined) rlayer.layer.colorEnvOffset = part.color_env_offset if (part.image !== undefined) { if (part.image === null) { rlayer.layer.image = null rlayer.texture = this.blankTexture - } - else { + } else { const index = stringToResIndex(part.image)[0] rlayer.layer.image = this.map.images[index] rlayer.texture = this.textures[index] @@ -412,18 +412,17 @@ export class RenderMap { rlayer.recompute() } if (part.automapper_config !== undefined) { - rlayer.layer.automapper.config = part.automapper_config.config === null ? -1 : part.automapper_config.config + rlayer.layer.automapper.config = + part.automapper_config.config === null ? -1 : part.automapper_config.config rlayer.layer.automapper.seed = part.automapper_config.seed rlayer.layer.automapper.automatic = part.automapper_config.automatic } - } - else if (rlayer instanceof RenderQuadsLayer && part.type === MapDir.LayerKind.Quads) { + } else if (rlayer instanceof RenderQuadsLayer && part.type === MapDir.LayerKind.Quads) { if (part.image !== undefined) { if (part.image === null) { rlayer.layer.image = null rlayer.texture = this.blankTexture - } - else { + } else { rlayer.layer.image = this.map.images[stringToResIndex(part.image)[0]] rlayer.texture = this.textures[stringToResIndex(part.image)[0]] } @@ -454,7 +453,9 @@ export class RenderMap { return rgroup } - private instLayer(kind: MapDir.LayerKind): RenderTilesLayer | RenderPhysicsLayer | RenderQuadsLayer { + private instLayer( + kind: MapDir.LayerKind + ): RenderTilesLayer | RenderPhysicsLayer | RenderQuadsLayer { if (kind === 'tiles') return new RenderTilesLayer(this, new TilesLayer()) else if (kind === 'quads') return new RenderQuadsLayer(this, new QuadsLayer()) else if (kind === 'front') return new RenderFrontLayer(this, new FrontLayer()) diff --git a/client/src/gl/renderTilesLayer.ts b/client/src/gl/renderTilesLayer.ts index 419097c..8113966 100644 --- a/client/src/gl/renderTilesLayer.ts +++ b/client/src/gl/renderTilesLayer.ts @@ -16,7 +16,7 @@ import { Image } from '../twmap/image' import { Texture } from './texture' export class RenderAnyTilesLayer< - T extends AnyTilesLayer<{ id: number; flags?: number }> + T extends AnyTilesLayer<{ id: number; flags?: number }>, > extends RenderLayer { layer: T texture: Texture @@ -202,8 +202,7 @@ export class RenderAnyTilesLayer< private initBuffers() { for (let y = 0; y < this.buffers.length; y++) - for (let x = 0; x < this.buffers[0].length; x++) - this.initChunkBuffer(x, y) + for (let x = 0; x < this.buffers[0].length; x++) this.initChunkBuffer(x, y) } } @@ -474,7 +473,8 @@ export class RenderSpeedupLayer extends RenderAnyTilesLayer { // skip tiles with id 0 continue - { // force + { + // force const split = splitNumber(tile.force) const vertices = makeNumberVertices(x, y, split) vertexArr.set(vertices, t * 12 * 3) @@ -484,7 +484,8 @@ export class RenderSpeedupLayer extends RenderAnyTilesLayer { t++ } - { // max speed + { + // max speed const split = splitNumber(tile.maxSpeed) const vertices = makeNumberVertices(x, y, split, true) vertexArr.set(vertices, t * 12 * 3) @@ -584,7 +585,8 @@ export class RenderSwitchLayer extends RenderAnyTilesLayer { // skip tiles with id 0 continue - { // number + { + // number const split = splitNumber(tile.number) const vertices = makeNumberVertices(x, y, split) vertexArr.set(vertices, t * 12 * 3) @@ -594,7 +596,8 @@ export class RenderSwitchLayer extends RenderAnyTilesLayer { t++ } - { // delay + { + // delay const split = splitNumber(tile.delay) const vertices = makeNumberVertices(x, y, split, true) vertexArr.set(vertices, t * 12 * 3) @@ -731,10 +734,10 @@ function makeTexCoords(tile: { id: number; flags?: number }, atlasSize: number) } function makeArrowTexCoords(tile: { angle: number }) { - const cos = Math.cos(tile.angle / 180 * Math.PI) - const sin = -Math.sin(tile.angle / 180 * Math.PI) - const x = (cos - sin) / Math.sqrt(2) * 0.5 - const y = (sin + cos) / Math.sqrt(2) * 0.5 + const cos = Math.cos((tile.angle / 180) * Math.PI) + const sin = -Math.sin((tile.angle / 180) * Math.PI) + const x = ((cos - sin) / Math.sqrt(2)) * 0.5 + const y = ((sin + cos) / Math.sqrt(2)) * 0.5 let p1x = -x + 0.5 let p1y = -y + 0.5 @@ -757,14 +760,19 @@ function splitNumber(num: number): [number, number, number] { ] } -function makeNumberVertices(x: number, y: number, digits: [number, number, number], bottom = false) { +function makeNumberVertices( + x: number, + y: number, + digits: [number, number, number], + bottom = false +) { // tweaking the font appearance const w = 0.7 const spacing = -0.4 // distance beetween numbers y -= 0.05 x -= 0.17 - if(bottom) { + if (bottom) { y += 0.5 - 0.05 } @@ -791,7 +799,8 @@ function makeNumberTexCoords(digits: [number, number, number]) { for (let i = 0; i < digits.length; i++) { const digit = digits[i] - let tx = 0, ty = 0 + let tx = 0, + ty = 0 // avoid drawing leading zeros if (digit !== 0 || !leadingZero || i === digits.length - 1) { diff --git a/client/src/gl/shader.ts b/client/src/gl/shader.ts index 5eb65aa..42fe94f 100644 --- a/client/src/gl/shader.ts +++ b/client/src/gl/shader.ts @@ -10,8 +10,8 @@ export const UniformLocations = [ ] as const type ProgLocations = { - attrs: { [k in typeof AttributeLocations[number]]: number } - unifs: { [k in typeof UniformLocations[number]]: WebGLUniformLocation | null } + attrs: { [k in (typeof AttributeLocations)[number]]: number } + unifs: { [k in (typeof UniformLocations)[number]]: WebGLUniformLocation | null } } type WebGLCtx = WebGL2RenderingContext | WebGLRenderingContext diff --git a/client/src/main.ts b/client/src/main.ts index 088c239..f3fa8ef 100644 --- a/client/src/main.ts +++ b/client/src/main.ts @@ -6,9 +6,11 @@ function main() { new Svelte({ target: document.body, }) - setDialog(new Dialog({ - target: document.body - })) + setDialog( + new Dialog({ + target: document.body, + }) + ) } main() diff --git a/client/src/server/convert.ts b/client/src/server/convert.ts index e4111a0..f89e674 100644 --- a/client/src/server/convert.ts +++ b/client/src/server/convert.ts @@ -90,32 +90,32 @@ export function colorFromJson(coord: MapDir.Color, floating: number): In // see https://developer.mozilla.org/en-US/docs/Glossary/Base64 export function base64ToBytes(base64: string): Uint8Array { - const binString = window.atob(base64); - return Uint8Array.from(binString, (m) => m.codePointAt(0)); + const binString = window.atob(base64) + return Uint8Array.from(binString, m => m.codePointAt(0)) } export function bytesToBase64(bytes: Uint8Array): string { - const binString = Array.from(bytes, (x) => String.fromCodePoint(x)).join(""); - return window.btoa(binString); + const binString = Array.from(bytes, x => String.fromCodePoint(x)).join('') + return window.btoa(binString) } export function tilesToData(tiles: Info.AnyTile[]): string { let arr = [] for (const tile of tiles) { - if ('force' in tile) { // speedup + if ('force' in tile) { + // speedup arr.push(tile.force, tile.maxSpeed, tile.id, 0, tile.angle & 0xff, (tile.angle >> 8) & 0xff) // little endian for angle - } - else if ('delay' in tile) { // switch + } else if ('delay' in tile) { + // switch arr.push(tile.number, tile.id, tile.flags, tile.delay) - } - else if ('flags' in tile) { // tiles | game | front + } else if ('flags' in tile) { + // tiles | game | front arr.push(tile.id, tile.flags, 0, 0) - } - else if ('number' in tile) { // tele | tune + } else if ('number' in tile) { + // tele | tune arr.push(tile.number, tile.id) - } - else { + } else { throw 'unsupported tile type' } } @@ -132,20 +132,15 @@ export function dataToTiles(data: string, kind: MapDir.LayerKind): Info.AnyTile[ if (kind === 'tiles' || kind === 'game' || kind === 'front') { return Parser.parseTiles(arr, arr.byteLength / 4) - } - else if (kind === 'tele') { + } else if (kind === 'tele') { return Parser.parseTeleTiles(arr, arr.byteLength / 2) - } - else if (kind === 'speedup') { + } else if (kind === 'speedup') { return Parser.parseSpeedupTiles(arr, arr.byteLength / 6) - } - else if (kind === 'switch') { + } else if (kind === 'switch') { return Parser.parseSwitchTiles(arr, arr.byteLength / 4) - } - else if (kind === 'tune') { + } else if (kind === 'tune') { return Parser.parseTuneTiles(arr, arr.byteLength / 2) - } - else { + } else { throw 'unsupported tile type ' + kind } } @@ -169,7 +164,7 @@ export function layerKindToTilesLayerFlags(kind: MapDir.LayerKind) { else if (kind === MapDir.LayerKind.Tele) return Info.TilesLayerFlags.TELE else if (kind === MapDir.LayerKind.Tiles) return Info.TilesLayerFlags.TILES else if (kind === MapDir.LayerKind.Tune) return Info.TilesLayerFlags.TUNE - else throw "not a tile layer" + else throw 'not a tile layer' } export function resIndexToString(index: number, _name?: string): string { diff --git a/client/src/server/history.ts b/client/src/server/history.ts index c194694..903c81e 100644 --- a/client/src/server/history.ts +++ b/client/src/server/history.ts @@ -4,12 +4,30 @@ import { AnyTilesLayer, TilesLayer } from '../twmap/tilesLayer' import * as MapDir from '../twmap/mapdir' import type * as Info from '../twmap/types' import type { Map } from '../twmap/map' -import { colorToJson, coordToJson, curveTypeToString, resIndexToString, tilesToData, toFixedNum, uvToJson } from './convert' -import type { Recv, RecvKey, RecvPacket, Req, ReqKey, RespPacket, Send, SendKey, SendPacket, Tiles } from './protocol' +import { + colorToJson, + coordToJson, + curveTypeToString, + resIndexToString, + tilesToData, + toFixedNum, + uvToJson, +} from './convert' +import type { + Recv, + RecvKey, + RecvPacket, + Req, + ReqKey, + RespPacket, + Send, + SendKey, + SendPacket, + Tiles, +} from './protocol' import { map } from '../ui/global' import { get } from 'svelte/store' - function rev_edit_envelope(map: Map, ...[e, part]: Recv['edit/envelope']): Send['edit/envelope'] { const env = map.envelopes[e] const rev_part: typeof part = { type: part.type } @@ -23,8 +41,7 @@ function rev_edit_envelope(map: Map, ...[e, part]: Recv['edit/envelope']): Send[ content: colorToJson(p.content, 10), type: curveTypeToString(p.type), })) - } - else if (env instanceof PositionEnvelope) { + } else if (env instanceof PositionEnvelope) { rev_part.points = env.points.map(p => ({ time: p.time, content: { @@ -34,12 +51,11 @@ function rev_edit_envelope(map: Map, ...[e, part]: Recv['edit/envelope']): Send[ }, type: curveTypeToString(p.type), })) - } - else if (env instanceof SoundEnvelope) { + } else if (env instanceof SoundEnvelope) { rev_part.points = env.points.map(p => ({ time: p.time, content: toFixedNum(p.content, 10), - type: curveTypeToString(p.type) + type: curveTypeToString(p.type), })) } } @@ -63,8 +79,7 @@ function rev_edit_group(map: Map, ...[g, part]: Recv['edit/group']): Send['edit/ y: group.paraY, } } - if ('clipping' in part) - rev_part.clipping = group.clipping + if ('clipping' in part) rev_part.clipping = group.clipping if ('clip' in part) { rev_part.clip = { x: toFixedNum(group.clipX, 5), @@ -73,8 +88,7 @@ function rev_edit_group(map: Map, ...[g, part]: Recv['edit/group']): Send['edit/ h: toFixedNum(group.clipH, 5), } } - if ('name' in part) - rev_part.name = group.name + if ('name' in part) rev_part.name = group.name return [g, rev_part] } @@ -83,24 +97,24 @@ function rev_edit_layer(map: Map, ...[g, l, part]: Recv['edit/layer']): Send['ed const layer = map.groups[g].layers[l] const rev_part: typeof part = { type: part.type } - if ('detail' in part) - rev_part.detail = layer.detail - if ('name' in part) - rev_part.name = layer.name + if ('detail' in part) rev_part.detail = layer.detail + if ('name' in part) rev_part.name = layer.name if (layer instanceof TilesLayer && rev_part.type === MapDir.LayerKind.Tiles) { - if ('color' in part) - rev_part.color = layer.color - if ('width' in part) - rev_part.width = layer.width - if ('height' in part) - rev_part.height = layer.height + if ('color' in part) rev_part.color = layer.color + if ('width' in part) rev_part.width = layer.width + if ('height' in part) rev_part.height = layer.height if ('color_env' in part) - rev_part.color_env = layer.colorEnv === null ? null : resIndexToString(map.envelopes.indexOf(layer.colorEnv), layer.colorEnv.name) - if ('color_env_offset' in part) - rev_part.color_env_offset = layer.colorEnvOffset + rev_part.color_env = + layer.colorEnv === null + ? null + : resIndexToString(map.envelopes.indexOf(layer.colorEnv), layer.colorEnv.name) + if ('color_env_offset' in part) rev_part.color_env_offset = layer.colorEnvOffset if ('image' in part) - rev_part.image = layer.image === null ? null : resIndexToString(map.images.indexOf(layer.image), layer.image.name) + rev_part.image = + layer.image === null + ? null + : resIndexToString(map.images.indexOf(layer.image), layer.image.name) if ('automapper_config' in part) { rev_part.automapper_config = { config: layer.automapper.config === -1 ? null : layer.automapper.config, @@ -108,10 +122,12 @@ function rev_edit_layer(map: Map, ...[g, l, part]: Recv['edit/layer']): Send['ed automatic: layer.automapper.automatic, } } - } - else if (layer instanceof QuadsLayer && rev_part.type === MapDir.LayerKind.Quads) { + } else if (layer instanceof QuadsLayer && rev_part.type === MapDir.LayerKind.Quads) { if ('image' in part) - rev_part.image = layer.image === null ? null : resIndexToString(map.images.indexOf(layer.image), layer.image.name) + rev_part.image = + layer.image === null + ? null + : resIndexToString(map.images.indexOf(layer.image), layer.image.name) } return [g, l, rev_part] @@ -120,14 +136,20 @@ function rev_edit_layer(map: Map, ...[g, l, part]: Recv['edit/layer']): Send['ed function rev_edit_quad(map: Map, ...[g, l, q, part]: Recv['edit/quad']): Send['edit/quad'] { const quad = (map.groups[g].layers[l] as QuadsLayer).quads[q] const rev_part: typeof part = { - corners: quad.points.slice(0, 4).map(p => coordToJson(p, 15)), - position: coordToJson(quad.points[4], 15), - colors: quad.colors, - texture_coords: quad.texCoords.map(p => uvToJson(p, 10)), - position_env: quad.posEnv === null ? null : resIndexToString(map.envelopes.indexOf(quad.posEnv), quad.posEnv.name), - position_env_offset: quad.posEnvOffset, - color_env: quad.colorEnv === null ? null : resIndexToString(map.envelopes.indexOf(quad.colorEnv), quad.colorEnv.name), - color_env_offset: quad.colorEnvOffset + corners: quad.points.slice(0, 4).map(p => coordToJson(p, 15)), + position: coordToJson(quad.points[4], 15), + colors: quad.colors, + texture_coords: quad.texCoords.map(p => uvToJson(p, 10)), + position_env: + quad.posEnv === null + ? null + : resIndexToString(map.envelopes.indexOf(quad.posEnv), quad.posEnv.name), + position_env_offset: quad.posEnvOffset, + color_env: + quad.colorEnv === null + ? null + : resIndexToString(map.envelopes.indexOf(quad.colorEnv), quad.colorEnv.name), + color_env_offset: quad.colorEnvOffset, } return [g, l, q, rev_part] @@ -177,134 +199,107 @@ export function reverse(map: Map, pkt: SendPacket): [ReqKey, Req[ReqKey] if (pkt.type === 'create/image') { const i = map.images.length return ['delete/image', i] - } - else if (pkt.type === 'create/envelope') { + } else if (pkt.type === 'create/envelope') { const e = map.envelopes.length return ['delete/envelope', e] - } - else if (pkt.type === 'create/group') { + } else if (pkt.type === 'create/group') { const g = map.groups.length return ['delete/group', g] - } - else if (pkt.type === 'create/layer') { - const [g, ] = pkt.content as Send['create/layer'] + } else if (pkt.type === 'create/layer') { + const [g] = pkt.content as Send['create/layer'] const l = map.groups[g].layers.length return ['delete/layer', [g, l]] - } - else if (pkt.type === 'create/quad') { - const [g, l, ] = pkt.content as Send['create/quad'] + } else if (pkt.type === 'create/quad') { + const [g, l] = pkt.content as Send['create/quad'] const q = (map.groups[g].layers[l] as QuadsLayer).quads.length return ['delete/quad', [g, l, q]] - } - else if (pkt.type === 'create/automapper') { + } else if (pkt.type === 'create/automapper') { return null // this is handled by codemirror } // TODO else if (pkt.type === 'edit/config') { return null - } - else if (pkt.type === 'edit/info') { + } else if (pkt.type === 'edit/info') { const part = pkt.content as Send['edit/info'] - const rev_part = Object.fromEntries(Object.keys(part).map(k => - [k, map.info[k]] - )) + const rev_part = Object.fromEntries(Object.keys(part).map(k => [k, map.info[k]])) return ['edit/info', rev_part] - } - else if (pkt.type === 'edit/envelope') { + } else if (pkt.type === 'edit/envelope') { const [e, part] = pkt.content as Send['edit/envelope'] return ['edit/envelope', rev_edit_envelope(map, e, part)] - } - else if (pkt.type === 'edit/group') { + } else if (pkt.type === 'edit/group') { const [g, part] = pkt.content as Send['edit/group'] return ['edit/group', rev_edit_group(map, g, part)] - } - else if (pkt.type === 'edit/layer') { + } else if (pkt.type === 'edit/layer') { const [g, l, part] = pkt.content as Send['edit/layer'] return ['edit/layer', rev_edit_layer(map, g, l, part)] - } - else if (pkt.type === 'edit/tiles') { + } else if (pkt.type === 'edit/tiles') { const [g, l, tiles] = pkt.content as Send['edit/tiles'] return ['edit/tiles', rev_edit_tiles(map, g, l, tiles)] - } - else if (pkt.type === 'edit/quad') { + } else if (pkt.type === 'edit/quad') { const [g, l, q, part] = pkt.content as Send['edit/quad'] return ['edit/quad', rev_edit_quad(map, g, l, q, part)] - } - else if (pkt.type === 'edit/automap') { + } else if (pkt.type === 'edit/automap') { const [g, l] = pkt.content as Send['edit/automap'] return ['edit/tiles', rev_automap(map, g, l)] - } - else if (pkt.type === 'move/envelope') { + } else if (pkt.type === 'move/envelope') { const [src, tgt] = pkt.content as Send['move/envelope'] return ['move/envelope', [tgt, src]] - } - else if (pkt.type === 'move/group') { + } else if (pkt.type === 'move/group') { const [src, tgt] = pkt.content as Send['move/group'] return ['move/group', [tgt, src]] - } - else if (pkt.type === 'move/layer') { + } else if (pkt.type === 'move/layer') { const [src, tgt] = pkt.content as Send['move/layer'] return ['move/layer', [tgt, src]] - } - else if (pkt.type === 'delete/image') { + } else if (pkt.type === 'delete/image') { return null - } - else if (pkt.type === 'delete/envelope') { + } else if (pkt.type === 'delete/envelope') { return null - } - else if (pkt.type === 'delete/group') { + } else if (pkt.type === 'delete/group') { return null - } - else if (pkt.type === 'delete/layer') { + } else if (pkt.type === 'delete/layer') { return null - } - else if (pkt.type === 'delete/quad') { + } else if (pkt.type === 'delete/quad') { return null - } - else if (pkt.type === 'delete/automapper') { + } else if (pkt.type === 'delete/automapper') { return null - } - else if (pkt.type === 'edit/map') { + } else if (pkt.type === 'edit/map') { return null - } - else if (pkt.type === 'delete/map') { + } else if (pkt.type === 'delete/map') { return null - } - - else { + } else { const _exhaustive: never = pkt.type // typescript: ensure exhaustive check return _exhaustive } } const recvKeys: RecvKey[] = [ - "create/image", - "create/envelope", - "create/group", - "create/layer", - "create/quad", - "create/automapper", - "edit/config", - "edit/info", - "edit/envelope", - "edit/group", - "edit/layer", - "edit/tiles", - "edit/quad", - "edit/automap", - "move/envelope", - "move/group", - "move/layer", - "delete/image", - "delete/envelope", - "delete/group", - "delete/layer", - "delete/quad", - "delete/automapper", - "map_created", - "map_deleted", - "users", - "saved", + 'create/image', + 'create/envelope', + 'create/group', + 'create/layer', + 'create/quad', + 'create/automapper', + 'edit/config', + 'edit/info', + 'edit/envelope', + 'edit/group', + 'edit/layer', + 'edit/tiles', + 'edit/quad', + 'edit/automap', + 'move/envelope', + 'move/group', + 'move/layer', + 'delete/image', + 'delete/envelope', + 'delete/group', + 'delete/layer', + 'delete/quad', + 'delete/automapper', + 'map_created', + 'map_deleted', + 'users', + 'saved', ] function isRequest(pkt: SendPacket | RecvPacket): pkt is SendPacket { @@ -337,7 +332,7 @@ export class History { this.skip = 0 } - clear () { + clear() { this.history = [] this.index = 0 } @@ -345,8 +340,7 @@ export class History { send(pkt: SendPacket) { if (isRequest(pkt)) { const rev = reverse(get(map), pkt) - if (rev === null) - return + if (rev === null) return const pending: Operation = { forward: [pkt.type, pkt.content], @@ -357,13 +351,11 @@ export class History { if (this.skip) { // skip push to history this.skip-- - } - else if (this.index !== this.history.length) { + } else if (this.index !== this.history.length) { // discard forward history and push pending this.history.splice(this.index, this.history.length, pending) this.index = this.history.length - } - else { + } else { this.history.push(pending) if (this.history.length > this.maxLen) { this.history.shift() @@ -375,8 +367,7 @@ export class History { resp(pkt: RespPacket): Op[] | null { const index = this.pending.findIndex(p => p.id === pkt.id) - if (index === -1) - return null + if (index === -1) return null // note: because websocket is ordered, response must be for the 1st pending request. if (index !== 0) { @@ -400,8 +391,7 @@ export class History { this.skip += rev.length + redo.length return [...rev, ...redo] - } - else { + } else { this.pending.shift() } @@ -431,8 +421,7 @@ export class History { undo(): Op | null { const pkt = this.history[this.index - 1] - if (!pkt) - return null + if (!pkt) return null this.index -= 1 this.skip++ // mark to skip the next send @@ -441,8 +430,7 @@ export class History { redo(): Op | null { const pkt = this.history[this.index] - if (!pkt) - return null + if (!pkt) return null this.index += 1 this.skip++ // mark to skip the next send diff --git a/client/src/server/protocol.ts b/client/src/server/protocol.ts index 1287e0c..81d9c7b 100644 --- a/client/src/server/protocol.ts +++ b/client/src/server/protocol.ts @@ -6,14 +6,17 @@ import type * as MapDir from '../twmap/mapdir' // MAPS -export type RecPartial = T extends Array ? T : T extends Object ? { [K in keyof T]?: RecPartial } : T +export type RecPartial = + T extends Array ? T : T extends Object ? { [K in keyof T]?: RecPartial } : T export type Require = Partial & Pick -type Base64 = string +type Base64 = string export interface Config { name: string - access: 'public' | 'unlisted' + public: boolean + password: string | boolean + version: 'ddnet06' | 'teeworlds07' } export interface MapDetail { @@ -26,7 +29,7 @@ export interface Tiles { y: number w: number h: number - tiles: Base64 + tiles: Base64 } // TODO @@ -74,22 +77,33 @@ export interface AutomapperDiagnostic { export type MapCreation = { version: 'ddnet06' | 'teeworlds07' - access: 'public' | 'unlisted' -} & ({ - clone: string -} | { - blank: { - w: number, - h: number - } -} | { - upload: Base64 -}) + public: boolean + password: string +} & ( + | { + clone: string + } + | { + blank: { + w: number + h: number + } + } + | { + upload: Base64 + } +) + +export interface JoinReq { + name: string + password: string +} export interface MapGetReq { users: undefined cursors: undefined map: undefined + info: undefined images: undefined image: number envelopes: undefined @@ -107,26 +121,27 @@ export interface MapGetReq { export interface MapGetResp { users: number cursors: Cursors - map: Base64 + map: Base64 + info: MapDir.Info images: string[] - image: Base64 + image: Base64 envelopes: string[] envelope: MapDir.Envelope groups: string[] group: MapDir.Group layers: string[] layer: MapDir.Layer - tiles: Base64 + tiles: Base64 quad: MapDir.Quad automappers: AutomapperDetail[] automapper: string } export interface MapCreateReq { - image: [string, Base64 | MapDir.ExternalImage] - envelope: Require + image: [string, Base64 | MapDir.ExternalImage] + envelope: Require group: Partial - layer: [number, Require] + layer: [number, Require] quad: [number, number, MapDir.Quad] automapper: [string, string] } @@ -134,9 +149,9 @@ export interface MapCreateReq { export interface MapEditReq { config: Partial info: Partial - envelope: [number, Require] + envelope: [number, Require] group: [number, Partial] - layer: [number, number, Require] + layer: [number, number, Require] tiles: [number, number, Tiles] quad: [number, number, number, MapDir.Quad] automap: [number, number] @@ -174,7 +189,7 @@ export interface GetReq { } export interface GetResp { - map: Base64 + map: Base64 } export interface EditReq { @@ -201,136 +216,142 @@ export interface Broadcast { saved: undefined } -export type Result = { - ok: T -} | { - err: string -} +export type Result = + | { + ok: T + } + | { + err: string + } export interface Send { - "get/users": MapGetReq['users'] - "get/cursors": MapGetReq['cursors'] - "get/map": MapGetReq['map'] - "get/images": MapGetReq['images'] - "get/image": MapGetReq['image'] - "get/envelopes": MapGetReq['envelopes'] - "get/envelope": MapGetReq['envelope'] - "get/groups": MapGetReq['groups'] - "get/group": MapGetReq['group'] - "get/layers": MapGetReq['layers'] - "get/layer": MapGetReq['layer'] - "get/tiles": MapGetReq['tiles'] - "get/quad": MapGetReq['quad'] - "get/automappers": MapGetReq['automappers'] - "get/automapper": MapGetReq['automapper'] - "create/image": MapCreateReq['image'] - "create/envelope": MapCreateReq['envelope'] - "create/group": MapCreateReq['group'] - "create/layer": MapCreateReq['layer'] - "create/quad": MapCreateReq['quad'] - "create/automapper": MapCreateReq['automapper'] - "edit/config": MapEditReq['config'] - "edit/info": MapEditReq['info'] - "edit/envelope": MapEditReq['envelope'] - "edit/group": MapEditReq['group'] - "edit/layer": MapEditReq['layer'] - "edit/tiles": MapEditReq['tiles'] - "edit/quad": MapEditReq['quad'] - "edit/automap": MapEditReq['automap'] - "move/envelope": MapReorderReq['envelope'] - "move/group": MapReorderReq['group'] - "move/layer": MapReorderReq['layer'] - "move/quad": MapReorderReq['quad'] - "delete/image": MapDelReq['image'] - "delete/envelope": MapDelReq['envelope'] - "delete/group": MapDelReq['group'] - "delete/layer": MapDelReq['layer'] - "delete/quad": MapDelReq['quad'] - "delete/automapper": MapDelReq['automapper'] - "cursor": Cursor - "save": undefined - "join": string - "leave": string - "create": EditReq['map'] - "delete": DeleteReq['map'] + 'get/users': MapGetReq['users'] + 'get/cursors': MapGetReq['cursors'] + 'get/map': MapGetReq['map'] + 'get/info': MapGetReq['info'] + 'get/images': MapGetReq['images'] + 'get/image': MapGetReq['image'] + 'get/envelopes': MapGetReq['envelopes'] + 'get/envelope': MapGetReq['envelope'] + 'get/groups': MapGetReq['groups'] + 'get/group': MapGetReq['group'] + 'get/layers': MapGetReq['layers'] + 'get/layer': MapGetReq['layer'] + 'get/tiles': MapGetReq['tiles'] + 'get/quad': MapGetReq['quad'] + 'get/automappers': MapGetReq['automappers'] + 'get/automapper': MapGetReq['automapper'] + 'create/image': MapCreateReq['image'] + 'create/envelope': MapCreateReq['envelope'] + 'create/group': MapCreateReq['group'] + 'create/layer': MapCreateReq['layer'] + 'create/quad': MapCreateReq['quad'] + 'create/automapper': MapCreateReq['automapper'] + 'edit/config': MapEditReq['config'] + 'edit/info': MapEditReq['info'] + 'edit/envelope': MapEditReq['envelope'] + 'edit/group': MapEditReq['group'] + 'edit/layer': MapEditReq['layer'] + 'edit/tiles': MapEditReq['tiles'] + 'edit/quad': MapEditReq['quad'] + 'edit/automap': MapEditReq['automap'] + 'move/envelope': MapReorderReq['envelope'] + 'move/group': MapReorderReq['group'] + 'move/layer': MapReorderReq['layer'] + 'move/quad': MapReorderReq['quad'] + 'delete/image': MapDelReq['image'] + 'delete/envelope': MapDelReq['envelope'] + 'delete/group': MapDelReq['group'] + 'delete/layer': MapDelReq['layer'] + 'delete/quad': MapDelReq['quad'] + 'delete/automapper': MapDelReq['automapper'] + config: string + cursor: Cursor + save: undefined + join: JoinReq + leave: string + create: EditReq['map'] + delete: DeleteReq['map'] } export interface Resp { - "get/users": MapGetResp['users'] - "get/cursors": MapGetResp['cursors'] - "get/map": MapGetResp['map'] - "get/images": MapGetResp['images'] - "get/image": MapGetResp['image'] - "get/envelopes": MapGetResp['envelopes'] - "get/envelope": MapGetResp['envelope'] - "get/groups": MapGetResp['groups'] - "get/group": MapGetResp['group'] - "get/layers": MapGetResp['layers'] - "get/layer": MapGetResp['layer'] - "get/tiles": MapGetResp['tiles'] - "get/quad": MapGetResp['quad'] - "get/automappers": MapGetResp['automappers'] - "get/automapper": MapGetResp['automapper'] - "create/image": undefined - "create/envelope": undefined - "create/group": undefined - "create/layer": undefined - "create/quad": undefined - "create/automapper": AutomapperDiagnostic[] - "edit/config": undefined - "edit/info": undefined - "edit/envelope": undefined - "edit/group": undefined - "edit/layer": undefined - "edit/tiles": undefined - "edit/quad": undefined - "edit/automap": undefined - "move/envelope": undefined - "move/group": undefined - "move/layer": undefined - "move/quad": undefined - "delete/image": undefined - "delete/envelope": undefined - "delete/group": undefined - "delete/layer": undefined - "delete/quad": undefined - "delete/automapper": undefined - "cursor": undefined - "save": undefined - "join": undefined - "leave": undefined - "create": undefined - "delete": undefined + 'get/users': MapGetResp['users'] + 'get/cursors': MapGetResp['cursors'] + 'get/map': MapGetResp['map'] + 'get/info': MapGetResp['info'] + 'get/images': MapGetResp['images'] + 'get/image': MapGetResp['image'] + 'get/envelopes': MapGetResp['envelopes'] + 'get/envelope': MapGetResp['envelope'] + 'get/groups': MapGetResp['groups'] + 'get/group': MapGetResp['group'] + 'get/layers': MapGetResp['layers'] + 'get/layer': MapGetResp['layer'] + 'get/tiles': MapGetResp['tiles'] + 'get/quad': MapGetResp['quad'] + 'get/automappers': MapGetResp['automappers'] + 'get/automapper': MapGetResp['automapper'] + 'create/image': undefined + 'create/envelope': undefined + 'create/group': undefined + 'create/layer': undefined + 'create/quad': undefined + 'create/automapper': AutomapperDiagnostic[] + 'edit/config': undefined + 'edit/info': undefined + 'edit/envelope': undefined + 'edit/group': undefined + 'edit/layer': undefined + 'edit/tiles': undefined + 'edit/quad': undefined + 'edit/automap': undefined + 'move/envelope': undefined + 'move/group': undefined + 'move/layer': undefined + 'move/quad': undefined + 'delete/image': undefined + 'delete/envelope': undefined + 'delete/group': undefined + 'delete/layer': undefined + 'delete/quad': undefined + 'delete/automapper': undefined + config: Config + cursor: undefined + save: undefined + join: string + leave: undefined + create: undefined + delete: undefined } export interface Recv { - "create/image": MapCreateReq['image'] - "create/envelope": MapCreateReq['envelope'] - "create/group": MapCreateReq['group'] - "create/layer": MapCreateReq['layer'] - "create/quad": MapCreateReq['quad'] - "create/automapper": MapCreateReq['automapper'] - "edit/config": MapEditReq['config'] - "edit/info": MapEditReq['info'] - "edit/envelope": MapEditReq['envelope'] - "edit/group": MapEditReq['group'] - "edit/layer": MapEditReq['layer'] - "edit/tiles": MapEditReq['tiles'] - "edit/quad": MapEditReq['quad'] - "edit/automap": MapEditReq['automap'] - "move/envelope": MapReorderReq['envelope'] - "move/group": MapReorderReq['group'] - "move/layer": MapReorderReq['layer'] - "delete/image": MapDelReq['image'] - "delete/envelope": MapDelReq['envelope'] - "delete/group": MapDelReq['group'] - "delete/layer": MapDelReq['layer'] - "delete/quad": MapDelReq['quad'] - "delete/automapper": MapDelReq['automapper'] - "map_created": string - "map_deleted": string - "users": number - "saved": undefined + 'create/image': MapCreateReq['image'] + 'create/envelope': MapCreateReq['envelope'] + 'create/group': MapCreateReq['group'] + 'create/layer': MapCreateReq['layer'] + 'create/quad': MapCreateReq['quad'] + 'create/automapper': MapCreateReq['automapper'] + 'edit/config': MapEditReq['config'] + 'edit/info': MapEditReq['info'] + 'edit/envelope': MapEditReq['envelope'] + 'edit/group': MapEditReq['group'] + 'edit/layer': MapEditReq['layer'] + 'edit/tiles': MapEditReq['tiles'] + 'edit/quad': MapEditReq['quad'] + 'edit/automap': MapEditReq['automap'] + 'move/envelope': MapReorderReq['envelope'] + 'move/group': MapReorderReq['group'] + 'move/layer': MapReorderReq['layer'] + 'delete/image': MapDelReq['image'] + 'delete/envelope': MapDelReq['envelope'] + 'delete/group': MapDelReq['group'] + 'delete/layer': MapDelReq['layer'] + 'delete/quad': MapDelReq['quad'] + 'delete/automapper': MapDelReq['automapper'] + map_created: string + map_deleted: string + users: number + saved: undefined } export type Req = Send | Recv @@ -342,6 +363,7 @@ export type ReqKey = keyof Req export interface SendPacket { timestamp: number id: number + token?: number type: K content: Send[K] } @@ -349,7 +371,7 @@ export interface SendPacket { export type RespPacket = { timestamp: number id: number -} & Result +} & Result export interface RecvPacket { timestamp: number diff --git a/client/src/server/server.ts b/client/src/server/server.ts index dd3e9a1..faf17a9 100755 --- a/client/src/server/server.ts +++ b/client/src/server/server.ts @@ -1,9 +1,23 @@ -import type { SendPacket, Result, SendKey, RecvKey, Recv, Send, Resp, RecvPacket, RespPacket } from './protocol' +import type { + SendPacket, + Result, + SendKey, + RecvKey, + Recv, + Send, + Resp, + RecvPacket, + RespPacket, +} from './protocol' import { History } from './history' type QueryFn = (resp: Result) => unknown type ListenFn = (resp: Recv[K]) => unknown +export interface Options { + timeout?: number +} + export interface Server { // subscribe to a server event with a callback function on(type: K, fn: ListenFn): void @@ -12,10 +26,10 @@ export interface Server { off(type: K, fn: ListenFn): void // send a request to the server - send(type: K, content?: Send[K]): void + send(type: K, content?: Send[K], options?: Partial): void // send a request to the server and capture the reply - query(type: K, content: Send[K], timeout?: number): Promise + query(type: K, content: Send[K], options?: Partial): Promise } type Listener = (evt: E, promise: Promise) => unknown @@ -28,24 +42,18 @@ export class EventDispatcher> { } on(type: K, fn: Listener, priority: boolean = false) { - if (this.listeners[type] === undefined) - this.listeners[type] = [] + if (this.listeners[type] === undefined) this.listeners[type] = [] - if (priority) - this.listeners[type].unshift(fn) - else - this.listeners[type].push(fn) + if (priority) this.listeners[type].unshift(fn) + else this.listeners[type].push(fn) } off(type: K, fn: Listener) { - if (this.listeners[type] === undefined) - console.error('server.off(): could not find listener') + if (this.listeners[type] === undefined) console.error('server.off(): could not find listener') const index = this.listeners[type].indexOf(fn) - if (index !== -1) - this.listeners[type].splice(index, 1) - else - console.error('server.off(): could not find listener') + if (index !== -1) this.listeners[type].splice(index, 1) + else console.error('server.off(): could not find listener') } dispatch(type: K, evt: E[K], promise: Promise = Promise.resolve()) { @@ -57,50 +65,48 @@ export class EventDispatcher> { } } +export interface ServerConfig { + name: string + host: string + port: number + encrypted: boolean + path?: string +} + +export function serverHttpUrl(conf: ServerConfig) { + return `http${conf.encrypted ? 's' : ''}://${conf.host}:${conf.port}${conf.path ?? ''}` +} + +export function serverWsUrl(conf: ServerConfig) { + return `ws${conf.encrypted ? 's' : ''}://${conf.host}:${conf.port}${conf.path ?? ''}/ws` +} + // a server using a websocket export class WebSocketServer extends EventDispatcher implements Server { socket: WebSocket + httpUrl: string errorListener: (e: string) => unknown queryListeners: { [key: number]: QueryFn } history: History - private socketSend: (data: any) => void - private deferredData: any[] + token: string | null = null - constructor(wsUrl: string | URL) { + constructor(cfg:ServerConfig) { super() + const wsUrl = serverWsUrl(cfg) this.socket = new WebSocket(wsUrl) this.socket.binaryType = 'arraybuffer' - this.socket.onmessage = e => this.handleMessage(e) + this.socket.onmessage = e => this.handleWsMessage(e) + + this.httpUrl = serverHttpUrl(cfg) this.errorListener = () => {} this.queryListeners = {} this.history = new History() - - this.deferredData = [] - this.makeDeferred() - } - - private makeDeferred() { - // while the server is connecting, put all requests in a cache. - this.socketSend = this.socketDeferredSend.bind(this) - this.socket.addEventListener('open', this.makeDirect.bind(this), { once: true }) - } - - private makeDirect() { - for (const data of this.deferredData) { - this.socket.send(data) - } - // this.socketSend = (x) => setTimeout(() => this.socket.send(x), 1000) - this.socketSend = this.socket.send.bind(this.socket) - } - - private socketDeferredSend(data: any) { - this.deferredData.push(data) } private generateID() { @@ -111,7 +117,15 @@ export class WebSocketServer extends EventDispatcher implements Server { this.errorListener = fn } - query(type: K, content: Send[K], timeout?: number): Promise { + fetch(path: string, init: RequestInit = {}) { + init.headers = { + ...init.headers, + ...(this.token && { 'Authorization': 'Bearer ' + this.token }) + } + return fetch(`${this.httpUrl}/${path}`, init) + } + + query(type: K, content: Send[K], options: Partial = {}): Promise { let timeoutID = -1 let id = this.generateID() @@ -122,9 +136,11 @@ export class WebSocketServer extends EventDispatcher implements Server { content, } + const message = JSON.stringify(packet) + this.history.send(packet) - const promise: Promise = new Promise((resolve, reject) => { + let promise: Promise = new Promise((resolve, reject) => { const listener: QueryFn = (x: Result) => { window.clearTimeout(timeoutID) delete this.queryListeners[id] @@ -136,68 +152,64 @@ export class WebSocketServer extends EventDispatcher implements Server { this.queryListeners[id] = listener - if (timeout) { + if (options.timeout) { timeoutID = window.setTimeout(() => { delete this.queryListeners[id] reject('timeout reached') - }, timeout) + }, options.timeout) } }) // we predict an ok response from the server and dispatch right away. this.dispatch(type as any, content, promise.then()) - const message = JSON.stringify(packet) - this.socketSend.call(undefined, message) + this.socket.send(message) return promise } - private handleResp(resp: RespPacket) { - const listener = this.queryListeners[resp.id] - if (listener) { - listener.call(undefined, resp) - - if ('err' in resp) { - this.errorListener.call(undefined, resp.err) - } - } - else { - console.error('query response with no listener', resp) - } - } - - private handleMessage(e: MessageEvent) { + private handleWsMessage(e: MessageEvent) { if (e.data instanceof ArrayBuffer) { console.warn('received binary data from the ws server, is the server outdated?') return } const data = JSON.parse(e.data) as RespPacket | RecvPacket - - if ('id' in data) { - const ops = this.history.resp(data) - if (ops) - for (const [type, content] of ops) - this.dispatch(type, content) + this.handleMessage(data) + } + private handleMessage(data: RespPacket | RecvPacket) { + if ('token' in data) { + this.token = data['token'] as string + } else if ('id' in data) { + const ops = this.history.resp(data) + if (ops) for (const [type, content] of ops) this.dispatch(type, content) this.handleResp(data) - } - else if ('err' in data) { + } else if ('err' in data) { this.errorListener.call(undefined, data.err) - } - else { + } else { const ops = this.history.recv(data) - if (ops) - for (const [type, content] of ops) - this.dispatch(type, content) - else - this.dispatch(data.type, data.content) + if (ops) for (const [type, content] of ops) this.dispatch(type, content) + else this.dispatch(data.type, data.content) } } - send(type: K, content: Send[K]) { - this.query(type, content) + private handleResp(resp: RespPacket) { + const listener = this.queryListeners[resp.id] + if (listener) { + listener.call(undefined, resp) + + if ('err' in resp) { + this.errorListener.call(undefined, resp.err) + } + } else { + console.error('query response with no listener', resp) + } + } + + + send(type: K, content: Send[K], options: Partial = {}) { + this.query(type, content, options) } undo() { diff --git a/client/src/server/util.ts b/client/src/server/util.ts index dc2af93..9825db7 100644 --- a/client/src/server/util.ts +++ b/client/src/server/util.ts @@ -1,15 +1,6 @@ -import type { ServerConfig } from "../storage" -import type { Readable, Writable } from "svelte/store" -import type { Recv, RecvKey, Send, SendKey } from "./protocol" -import type { Server } from "./server" - -export function serverHttpUrl(conf: ServerConfig) { - return `http${conf.encrypted ? 's' : ''}://${conf.host}:${conf.port}${conf.path ?? ''}` -} - -export function serverWsUrl(conf: ServerConfig) { - return `ws${conf.encrypted ? 's' : ''}://${conf.host}:${conf.port}${conf.path ?? ''}/ws` -} +import type { Readable, Writable } from 'svelte/store' +import type { Recv, RecvKey, Send, SendKey } from './protocol' +import type { Server } from './server' export const skip: unique symbol = Symbol() type Skip = typeof skip @@ -24,27 +15,21 @@ export const _: Cont = cont // alias for placeholder function patternValue(pat: any, val: any): any { if (pat === pick) { return val - } - else if (pat === skip || pat === cont) { + } else if (pat === skip || pat === cont) { return pat - } - else if (typeof val !== typeof pat) { + } else if (typeof val !== typeof pat) { return skip - } - else if (typeof val === 'object') { + } else if (typeof val === 'object') { for (const k in pat) { if (k in val) { const v = patternValue(pat[k], val[k]) - if (v !== cont) - return v + if (v !== cont) return v } } return cont - } - else if (val === pat) { + } else if (val === pat) { return cont - } - else { + } else { return skip } } @@ -52,8 +37,8 @@ function patternValue(pat: any, val: any): any { type Pattern = Skip | Pick | Cont | (T extends Object ? { [K in keyof T]?: Pattern } : T) type ReadOpt = { - query: Q, - match?: Pattern, + query: Q + match?: Pattern apply?: (v: any) => T } @@ -66,20 +51,15 @@ type ReadOpt = { export function read( server: Server, val: T, - opts: ReadOpt | ReadOpt[]): Readable -{ - if (!Array.isArray(opts)) - opts = [opts] + opts: ReadOpt | ReadOpt[] +): Readable { + if (!Array.isArray(opts)) opts = [opts] - for (const opt of opts) - if (!opt.apply) - opt.apply = (v: any) => v + for (const opt of opts) if (!opt.apply) opt.apply = (v: any) => v - for (const opt of opts) - if (!opt.match) - opt.match = pick + for (const opt of opts) if (!opt.match) opt.match = pick - function cb (opt: ReadOpt) { + function cb(opt: ReadOpt) { return (e: Recv[Q]) => { let val = patternValue(opt.match, e) if (val !== skip && val !== cont) { @@ -105,14 +85,12 @@ export function read( let subs: ((val: T) => void)[] = [] function subscribe(sub: (val: T) => void) { - if (subs.length === 0) - on() + if (subs.length === 0) on() sub(val) subs.push(sub) return () => { subs.splice(subs.indexOf(sub), 1) - if (subs.length === 0) - off() + if (subs.length === 0) off() } } @@ -120,10 +98,10 @@ export function read( } type SyncOpt = { - query: Q, - match?: Pattern, - apply?: (v: any) => T, - send?: (val: T) => Send[Q] | Skip, + query: Q + match?: Pattern + apply?: (v: any) => T + send?: (val: T) => Send[Q] | Skip } export type Syncable = Writable & { @@ -140,16 +118,13 @@ export type Syncable = Writable & { export function sync( server: Server, val: T, - opt: SyncOpt): Syncable -{ - if (!opt.match) - opt.match = pick + opt: SyncOpt +): Syncable { + if (!opt.match) opt.match = pick - if (!opt.apply) - opt.apply = (v: any) => v + if (!opt.apply) opt.apply = (v: any) => v - if (!opt.send) - opt.send = (v: T) => v as any + if (!opt.send) opt.send = (v: T) => v as any const cb = (e: Recv[Q]) => { let val = patternValue(opt.match, e) @@ -169,14 +144,12 @@ export function sync( let subs: ((val: T) => void)[] = [] function subscribe(sub: (val: T) => void) { - if (subs.length === 0) - on() + if (subs.length === 0) on() sub(val) subs.push(sub) return () => { subs.splice(subs.indexOf(sub), 1) - if (subs.length === 0) - off() + if (subs.length === 0) off() } } @@ -192,8 +165,7 @@ export function sync( if (query !== skip) { try { await server.query(opt.query, query) - } - catch { + } catch { val = oldVal subs.forEach(sub => sub(val)) } @@ -208,8 +180,7 @@ export function sync( if (query !== skip) { try { await server.query(opt.query, query) - } - catch { + } catch { val = oldVal subs.forEach(sub => sub(val)) } diff --git a/client/src/storage.ts b/client/src/storage.ts index fb50cf0..c5321e2 100644 --- a/client/src/storage.ts +++ b/client/src/storage.ts @@ -1,12 +1,6 @@ -const { VITE_SERVER_URLS } = import.meta.env +import type { ServerConfig } from "./server/server" -export interface ServerConfig { - name: string - host: string - port: number - encrypted: boolean - path?: string -} +const { VITE_SERVER_URLS } = import.meta.env interface StorageSpec { servers: ServerConfig[] @@ -22,22 +16,29 @@ interface StorageEntry { type StorageEntries = { [K in keyof StorageSpec]: StorageEntry } function isServerConfig(entry: any): entry is ServerConfig { - return typeof entry === 'object' && ['name', 'host', 'port', 'encrypted'].every(k => entry.hasOwnProperty(k)) + return ( + typeof entry === 'object' && + ['name', 'host', 'port', 'encrypted'].every(k => entry.hasOwnProperty(k)) + ) } const entries: StorageEntries = { servers: { clone: (confs: ServerConfig[]) => confs.map(c => ({ ...c })), - default: VITE_SERVER_URLS - .split(',') + default: VITE_SERVER_URLS.split(',') .map(url => url.split(':')) - .map(([name, host, port, ssl]) => ({ name, host, port: parseInt(port), encrypted: ssl === '1' })), - sanitize: (entry: any) => Array.isArray(entry) && entry.every(e => isServerConfig(e)) + .map(([name, host, port, ssl]) => ({ + name, + host, + port: parseInt(port), + encrypted: ssl === '1', + })), + sanitize: (entry: any) => Array.isArray(entry) && entry.every(e => isServerConfig(e)), }, currentServer: { clone: x => x, default: 0, - sanitize: (entry: any) => typeof entry === 'number' && entry < storage.load('servers').length + sanitize: (entry: any) => typeof entry === 'number' && entry < storage.load('servers').length, }, } @@ -63,24 +64,25 @@ const storage = { const res = JSON.parse(item) if (entries[key].sanitize(res)) { return res - } - else { + } else { throw 'sanitization failed' } - } - catch (e) { + } catch (e) { console.error('localstorage failure:', e) storage.reset() return storage.load(key) } }, - save: function (key: K, val: StorageSpec[K], { persistent } = { persistent: true }) { + save: function ( + key: K, + val: StorageSpec[K], + { persistent } = { persistent: true } + ) { if (persistent) { localStorage.setItem(key, JSON.stringify(val)) sessionStorage.removeItem(key) - } - else { + } else { sessionStorage.setItem(key, JSON.stringify(val)) } }, diff --git a/client/src/svg.d.ts b/client/src/svg.d.ts index b4ff607..6bcc088 100644 --- a/client/src/svg.d.ts +++ b/client/src/svg.d.ts @@ -2,9 +2,7 @@ declare module '*.svg?component' { import type { ComponentType, SvelteComponentTyped } from 'svelte' import type { SVGAttributes } from 'svelte/elements' - const content: ComponentType< - SvelteComponentTyped> - > + const content: ComponentType>> export default content } @@ -38,4 +36,3 @@ declare module '*.svg?dataurl=unenc' { const content: string export default content } - diff --git a/client/src/twmap/automap.ts b/client/src/twmap/automap.ts index c6316b9..71e828f 100644 --- a/client/src/twmap/automap.ts +++ b/client/src/twmap/automap.ts @@ -501,7 +501,14 @@ function lintAutomapper(reader: FileReader): Lint[] { ) else if (tok.content.word === 'NoLayerCopy') { if (indexRule) - errs.push(lintWarn('Misplaced "NoLayerCopy"', reader.state.line, tok.content.range, 'For readability, "NoLayerCopy" should be placed at the start of the run.')) + errs.push( + lintWarn( + 'Misplaced "NoLayerCopy"', + reader.state.line, + tok.content.range, + 'For readability, "NoLayerCopy" should be placed at the start of the run.' + ) + ) if (noLayerCopy) errs.push(lintWarn('Duplicate "NoLayerCopy"', reader.state.line, tok.content.range)) else noLayerCopy = true @@ -552,8 +559,7 @@ export function lint(content: string): Lint[] { export function lintToString(lint: Lint): string { const level = lint.level === LintLevel.Error ? 'error' : 'warning' let str = `[${level}] line ${lint.line + 1}, chars ${lint.range[0]}-${lint.range[1]}: ${lint.reason}.` - if (lint.note) - str += ` Note: ${lint.note}` + if (lint.note) str += ` Note: ${lint.note}` return str } @@ -600,18 +606,12 @@ export function parse(content: string): Config[] | null { if ('header' in tok.content) { const name = tok.content.header newConfig(name) - } - - else if (!('word' in tok.content) || !automapper) { + } else if (!('word' in tok.content) || !automapper) { // invalid line, skip continue - } - - else if (tok.content.word === 'NewRun') { + } else if (tok.content.word === 'NewRun') { newRun() - } - - else if (tok.content.word === 'Index') { + } else if (tok.content.word === 'Index') { // id tok = reader.token() if (!tok.success || !('int' in tok.content)) return null @@ -630,9 +630,7 @@ export function parse(content: string): Config[] | null { const tile: Info.Tile = { id, flags } newIndexRule(tile) - } - - else if (indexRule !== null && tok.content.word === 'Pos') { + } else if (indexRule !== null && tok.content.word === 'Pos') { // offset tok = reader.token() if (!tok.success || !('int' in tok.content)) return null @@ -658,9 +656,7 @@ export function parse(content: string): Config[] | null { } indexRule.rules.push(rule) - } - - else if (['INDEX', 'NOTINDEX'].includes(tok.content.word)) { + } else if (['INDEX', 'NOTINDEX'].includes(tok.content.word)) { const invert = tok.content.word === 'NOTINDEX' // id @@ -705,22 +701,16 @@ export function parse(content: string): Config[] | null { const rule: PosRule = { offset, states, invert } indexRule.rules.push(rule) } - } - - else if (indexRule !== null && tok.content.word === 'Random') { + } else if (indexRule !== null && tok.content.word === 'Random') { tok = reader.token() let coef = 1.0 if (tok.success && 'float' in tok.content) coef = tok.content.float else if (tok.success && 'int' in tok.content) coef = 1.0 / tok.content.int const rule: RandomRule = { coef } indexRule.rules.push(rule) - } - - else if (indexRule !== null && tok.content.word === 'NoDefaultRule') { + } else if (indexRule !== null && tok.content.word === 'NoDefaultRule') { defaultRule = false - } - - else if (run !== null && tok.content.word === 'NoLayerCopy') { + } else if (run !== null && tok.content.word === 'NoLayerCopy') { run.layerCopy = false } @@ -794,9 +784,7 @@ function posRuleMatches(rule: PosRule, layer: TilesLayer, x: number, y: number) const xx = x + rule.offset.x const yy = y + rule.offset.y - const tile = inBounds(xx, yy, layer.width, layer.height) - ? layer.getTile(xx, yy) - : outTile + const tile = inBounds(xx, yy, layer.width, layer.height) ? layer.getTile(xx, yy) : outTile return rule.invert ? rule.states.every(s => !tileMatches(tile, s)) @@ -822,8 +810,7 @@ export function automap(layer: TilesLayer, automapper: Config, seed: number) { } else { match = posRuleMatches(rule, srcLayer, x, y) } - if (!match) - break + if (!match) break } if (match) { diff --git a/client/src/twmap/datafile.ts b/client/src/twmap/datafile.ts index 6776c08..89d1f86 100644 --- a/client/src/twmap/datafile.ts +++ b/client/src/twmap/datafile.ts @@ -92,7 +92,6 @@ export class DataFile { // calculate checksum this.crc = crc32(new Uint8Array(this.data)) - console.info('map crc', this.crc.toString(16)) // we only support datafile version 4 if (this.version != 4) { diff --git a/client/src/twmap/image.ts b/client/src/twmap/image.ts index 8e7085e..48aac22 100644 --- a/client/src/twmap/image.ts +++ b/client/src/twmap/image.ts @@ -2,7 +2,7 @@ import type { DataFile } from './datafile' import type * as Info from './types' import { parseString } from './parser' -export type ImageSource = TexImageSource & { width: number, height: number } +export type ImageSource = TexImageSource & { width: number; height: number } export class Image { name: string diff --git a/client/src/twmap/map.ts b/client/src/twmap/map.ts index e746e6d..c848e05 100644 --- a/client/src/twmap/map.ts +++ b/client/src/twmap/map.ts @@ -112,10 +112,16 @@ export class Map { } imageInUse(image: number | Image) { - if (typeof image === 'number') - image = this.images[image] - - return this.groups.findIndex(g => g.layers.findIndex(l => (l instanceof TilesLayer || l instanceof QuadsLayer) && l.image === image) !== -1) !== -1 + if (typeof image === 'number') image = this.images[image] + + return ( + this.groups.findIndex( + g => + g.layers.findIndex( + l => (l instanceof TilesLayer || l instanceof QuadsLayer) && l.image === image + ) !== -1 + ) !== -1 + ) } private loadInfo(df: DataFile) { diff --git a/client/src/twmap/mapdir.ts b/client/src/twmap/mapdir.ts index 1932e17..9e53ed1 100644 --- a/client/src/twmap/mapdir.ts +++ b/client/src/twmap/mapdir.ts @@ -154,14 +154,14 @@ export interface TuneLayer extends TilesLayerCommon { } export type Layer = - QuadsLayer | - TilesLayer | - GameLayer | - TeleLayer | - SpeedupLayer | - FrontLayer | - SwitchLayer | - TuneLayer + | QuadsLayer + | TilesLayer + | GameLayer + | TeleLayer + | SpeedupLayer + | FrontLayer + | SwitchLayer + | TuneLayer export enum EnvelopeType { Color = 'color', diff --git a/client/src/twmap/tilesLayer.ts b/client/src/twmap/tilesLayer.ts index 4e45ba6..c6fdf66 100644 --- a/client/src/twmap/tilesLayer.ts +++ b/client/src/twmap/tilesLayer.ts @@ -13,22 +13,14 @@ import { } from './parser' export function createLayer(flags: Info.TilesLayerFlags) { - if (flags === Info.TilesLayerFlags.TILES) - return new TilesLayer() - else if (flags === Info.TilesLayerFlags.GAME) - return new GameLayer() - else if (flags === Info.TilesLayerFlags.FRONT) - return new FrontLayer() - else if (flags === Info.TilesLayerFlags.TELE) - return new TeleLayer() - else if (flags === Info.TilesLayerFlags.SPEEDUP) - return new SpeedupLayer() - else if (flags === Info.TilesLayerFlags.SWITCH) - return new SwitchLayer() - else if (flags === Info.TilesLayerFlags.TUNE) - return new TuneLayer() - else - throw 'unknown layer type: ' + flags + if (flags === Info.TilesLayerFlags.TILES) return new TilesLayer() + else if (flags === Info.TilesLayerFlags.GAME) return new GameLayer() + else if (flags === Info.TilesLayerFlags.FRONT) return new FrontLayer() + else if (flags === Info.TilesLayerFlags.TELE) return new TeleLayer() + else if (flags === Info.TilesLayerFlags.SPEEDUP) return new SpeedupLayer() + else if (flags === Info.TilesLayerFlags.SWITCH) return new SwitchLayer() + else if (flags === Info.TilesLayerFlags.TUNE) return new TuneLayer() + else throw 'unknown layer type: ' + flags } export abstract class AnyTilesLayer extends Layer { diff --git a/client/src/twmap/uuid.ts b/client/src/twmap/uuid.ts index 81b56d0..8217256 100644 --- a/client/src/twmap/uuid.ts +++ b/client/src/twmap/uuid.ts @@ -1,6 +1,6 @@ // Implementation taken from ddnet client. -import md5 from 'js-md5' +import { md5 } from 'js-md5' export type UUID = Uint8Array // an uuid is 16 bytes. diff --git a/client/src/ui/actions.ts b/client/src/ui/actions.ts index 17d70dd..d955b0c 100644 --- a/client/src/ui/actions.ts +++ b/client/src/ui/actions.ts @@ -1,9 +1,8 @@ -import { clearDialog, showDialog, showError, showInfo } from "./lib/dialog" -import { server, serverCfg, rmap, peers } from "./global" -import { get } from "svelte/store" +import { clearDialog, showDialog, showError, showInfo } from './lib/dialog' +import { server, rmap, peers } from './global' +import { get } from 'svelte/store' import { navigate } from 'svelte-routing' -import { download } from "./lib/util" -import { serverHttpUrl } from "../server/util" +import { download } from './lib/util' export async function saveMap() { const server_ = get(server) @@ -18,11 +17,9 @@ export async function saveMap() { } export async function downloadMap() { - const serverConf_ = get(serverCfg) const rmap_ = get(rmap) - - const httpUrl = serverHttpUrl(serverConf_) - + const server_ = get(server) + const httpUrl = server_.httpUrl download(`${httpUrl}/maps/${rmap_.map.name}`, `${rmap_.map.name}.map`) } @@ -40,8 +37,8 @@ export async function deleteMap() { if (res) { try { - await server_.query('leave', rmap_.map.name) await server_.query('delete', rmap_.map.name) + await server_.query('leave', rmap_.map.name) navigate('/') } catch (e) { showError('Map deletion failed: ' + e) diff --git a/client/src/ui/global.ts b/client/src/ui/global.ts index c44c21a..f27647a 100644 --- a/client/src/ui/global.ts +++ b/client/src/ui/global.ts @@ -1,12 +1,16 @@ -import type { WebSocketServer } from '../server/server' -import type { ServerConfig } from '../storage' +import type { ServerConfig, WebSocketServer } from '../server/server' import type { Map } from '../twmap/map' import { writable, type Writable } from 'svelte/store' import { RenderMap } from '../gl/renderMap' import type { AutomapperDetail } from '../server/protocol' export enum View { - Layers, Automappers, Images, Sounds, Envelopes, Settings // TODO + Layers, + Automappers, + Images, + Sounds, + Envelopes, + Settings, // TODO } export const server: Writable = writable(null) diff --git a/client/src/ui/index.svelte b/client/src/ui/index.svelte index 17f35d1..18b2dc3 100644 --- a/client/src/ui/index.svelte +++ b/client/src/ui/index.svelte @@ -6,29 +6,43 @@ import storage from '../storage' import { WebSocketServer } from '../server/server' import { server, serverCfg } from './global' - import { serverWsUrl } from '../server/util' + import { queryConfig } from './lib/util' export let url = '' - function joinServer() { + async function joinServer(params: { [name: string]: string }) { const serverCfgs = storage.load('servers') const serverId = storage.load('currentServer') $serverCfg = serverCfgs[serverId] - const wsUrl = serverWsUrl($serverCfg) - $server = new WebSocketServer(wsUrl) + console.log('joining server', $serverCfg) + $server = new WebSocketServer($serverCfg) - return new Promise((resolve, reject) => { + const connected = new Promise((resolve, reject) => { $server.socket.addEventListener('open', resolve, { once: true }) - $server.socket.addEventListener('error', () => reject("Failed to connect to the server"), { once: true }) + $server.socket.addEventListener('error', () => reject('Failed to connect to the server'), { + once: true, + }) }) + await connected + + // let config = await queryConfig($serverCfg, params.mapName) + let config = await $server.query('config', params.mapName) + console.log('joining map', config) + + if (config.password) { + return prompt('enter password') + } else { + return '' + } } - - + {@const signal = joinServer(params)} + + diff --git a/client/src/ui/lib/automapper.svelte b/client/src/ui/lib/automapper.svelte index 609d1e6..2731b51 100644 --- a/client/src/ui/lib/automapper.svelte +++ b/client/src/ui/lib/automapper.svelte @@ -1,10 +1,6 @@ - -
{#each messages as { type, controls, message, id } (id)} -
{#if controls === 'yesno'} - onNo(id)} - on:submit={() => onYes(id)} - on:click:button--secondary={() => onNo(id)} - /> + onNo(id)} + on:submit={() => onYes(id)} + on:click:button--secondary={() => onNo(id)} + /> {:else} - onClose(id)} - hideCloseButton={controls !== 'closable'} - > - - + onClose(id)} + hideCloseButton={controls !== 'closable'} + > + + {/if}
{/each} diff --git a/client/src/ui/lib/dialog.ts b/client/src/ui/lib/dialog.ts index b62df88..6aafe30 100644 --- a/client/src/ui/lib/dialog.ts +++ b/client/src/ui/lib/dialog.ts @@ -18,8 +18,7 @@ export function setDialog(d: Dialog) { export function clearDialog(id: number | 'all' = 'all') { if (id === 'all') { dialog.$set({ messages: [] }) - } - else { + } else { dialog.$set({ messages: dialog.messages.filter(m => m.id !== id) }) } } @@ -32,16 +31,28 @@ export function showDialog( ): Promise | number { const id = Math.random() dialog.$set({ - messages: [{ - type, - message, - controls, - id - }, ...dialog.messages] + messages: [ + { + type, + message, + controls, + id, + }, + ...dialog.messages, + ], }) - if (controls === 'none') - return id + if (controls !== 'yesno') { + if (type === 'info') { + console.info(`[%c%s%c] ${message}`, 'color: green', 'INFO', 'color: unset') + } else if (type === 'warning') { + console.warn(`[%c%s%c] ${message}`, 'color: orange', 'WARN', 'color: unset') + } else if (type === 'error') { + console.error(`[%c%s%c] ${message}`, 'color: red', 'ERROR', 'color: unset') + } + } + + if (controls === 'none') return id else return new Promise(resolve => { let timeout_id = 0 @@ -60,23 +71,23 @@ export function showDialog( }) } -export function showInfo(msg: string): Promise; -export function showInfo(msg: string, controls: 'none'): number; -export function showInfo(msg: string, controls: DialogControls): Promise; +export function showInfo(msg: string): Promise +export function showInfo(msg: string, controls: 'none'): number +export function showInfo(msg: string, controls: DialogControls): Promise export function showInfo(msg: string, controls: DialogControls = 'closable') { return showDialog('info', msg, controls) } -export function showWarning(msg: string): Promise; -export function showWarning(msg: string, controls: 'none'): number; -export function showWarning(msg: string, controls: DialogControls): Promise; +export function showWarning(msg: string): Promise +export function showWarning(msg: string, controls: 'none'): number +export function showWarning(msg: string, controls: DialogControls): Promise export function showWarning(msg: string, controls: DialogControls = 'closable') { return showDialog('warning', msg, controls) } -export function showError(msg: string): Promise; -export function showError(msg: string, controls: 'none'): number; -export function showError(msg: string, controls: DialogControls): Promise; +export function showError(msg: string): Promise +export function showError(msg: string, controls: 'none'): number +export function showError(msg: string, controls: DialogControls): Promise export function showError(msg: string, controls: DialogControls = 'closable') { return showDialog('error', msg, controls) } diff --git a/client/src/ui/lib/editAutomapper.svelte b/client/src/ui/lib/editAutomapper.svelte index d2439c9..333176d 100644 --- a/client/src/ui/lib/editAutomapper.svelte +++ b/client/src/ui/lib/editAutomapper.svelte @@ -1,28 +1,28 @@
-
- {#each Object.entries($automappers).sort(([f1], [f2]) => f1.localeCompare(f2)) as [file, am]} + {#each Object.entries($automappers).sort( ([f1], [f2]) => f1.localeCompare(f2) ) as [file, am]}
New automapper + > + New automapper +
- -
-
- {changed ? '*' : ''}{selected ?? ''} - - - + +
+
+ {changed ? '*' : ''}{selected ?? ''} + + + +
+
-
-
- - - -
- -
-
+ + +
+ +
+
@@ -342,7 +358,13 @@
- +
diff --git a/client/src/ui/lib/editBrush.svelte b/client/src/ui/lib/editBrush.svelte index f0a4ad3..723de34 100644 --- a/client/src/ui/lib/editBrush.svelte +++ b/client/src/ui/lib/editBrush.svelte @@ -34,10 +34,8 @@ }) function clamp(cur: number, min: number, max: number) { - if (isNaN(cur)) - return min - else - return Math.min(Math.max(min, cur), max) + if (isNaN(cur)) return min + else return Math.min(Math.max(min, cur), max) } function brushRotateCW(sel: Info.AnyTile[][]) { @@ -68,25 +66,31 @@ function tilesFlipV(layer: AnyTilesLayer, tiles: Info.AnyTile[][]) { const flipFn: ((tile: Info.AnyTile) => void) | false = - layer instanceof TilesLayer ? (tile: Info.Tile) => { - if (tile.flags & TileFlags.ROTATE) tile.flags ^= TileFlags.VFLIP - else tile.flags ^= TileFlags.HFLIP - } : - layer instanceof GameLayer ? (tile: Info.Tile) => { - if (isDirectionalGameTile(tile.id)) { - if (!(tile.flags & TileFlags.ROTATE)) tile.flags ^= TileFlags.HFLIP | TileFlags.VFLIP - } - } : - layer instanceof SwitchLayer ? (tile: Info.Switch) => { - if (isDirectionalSwitchTile(tile.id)) { - if (!(tile.flags & TileFlags.ROTATE)) tile.flags ^= TileFlags.HFLIP | TileFlags.VFLIP - } - } : - layer instanceof SpeedupLayer ? (tile: Info.Speedup) => { - tile.angle = (360 - tile.angle) % 360 - } : - false - + layer instanceof TilesLayer + ? (tile: Info.Tile) => { + if (tile.flags & TileFlags.ROTATE) tile.flags ^= TileFlags.VFLIP + else tile.flags ^= TileFlags.HFLIP + } + : layer instanceof GameLayer + ? (tile: Info.Tile) => { + if (isDirectionalGameTile(tile.id)) { + if (!(tile.flags & TileFlags.ROTATE)) + tile.flags ^= TileFlags.HFLIP | TileFlags.VFLIP + } + } + : layer instanceof SwitchLayer + ? (tile: Info.Switch) => { + if (isDirectionalSwitchTile(tile.id)) { + if (!(tile.flags & TileFlags.ROTATE)) + tile.flags ^= TileFlags.HFLIP | TileFlags.VFLIP + } + } + : layer instanceof SpeedupLayer + ? (tile: Info.Speedup) => { + tile.angle = (360 - tile.angle) % 360 + } + : false + if (flipFn) { for (let row of tiles) { for (let tile of row) { @@ -98,24 +102,28 @@ function tilesFlipH(layer: AnyTilesLayer, tiles: Info.AnyTile[][]) { const flipFn: ((tile: Info.AnyTile) => void) | false = - layer instanceof TilesLayer ? (tile: Info.Tile) => { - if (tile.flags & TileFlags.ROTATE) tile.flags ^= TileFlags.HFLIP - else tile.flags ^= TileFlags.VFLIP - } : - layer instanceof GameLayer ? (tile: Info.Tile) => { - if (isDirectionalGameTile(tile.id)) { - if (tile.flags & TileFlags.ROTATE) tile.flags ^= TileFlags.HFLIP | TileFlags.VFLIP - } - } : - layer instanceof SwitchLayer ? (tile: Info.Switch) => { - if (isDirectionalSwitchTile(tile.id)) { - if (tile.flags & TileFlags.ROTATE) tile.flags ^= TileFlags.HFLIP | TileFlags.VFLIP - } - } : - layer instanceof SpeedupLayer ? (tile: Info.Speedup) => { - tile.angle = (540 - tile.angle) % 360 - } : - false + layer instanceof TilesLayer + ? (tile: Info.Tile) => { + if (tile.flags & TileFlags.ROTATE) tile.flags ^= TileFlags.HFLIP + else tile.flags ^= TileFlags.VFLIP + } + : layer instanceof GameLayer + ? (tile: Info.Tile) => { + if (isDirectionalGameTile(tile.id)) { + if (tile.flags & TileFlags.ROTATE) tile.flags ^= TileFlags.HFLIP | TileFlags.VFLIP + } + } + : layer instanceof SwitchLayer + ? (tile: Info.Switch) => { + if (isDirectionalSwitchTile(tile.id)) { + if (tile.flags & TileFlags.ROTATE) tile.flags ^= TileFlags.HFLIP | TileFlags.VFLIP + } + } + : layer instanceof SpeedupLayer + ? (tile: Info.Speedup) => { + tile.angle = (540 - tile.angle) % 360 + } + : false if (flipFn) { for (let row of tiles) { @@ -138,19 +146,23 @@ } const rotateFn: ((tile: Info.AnyTile) => void) | false = - layer instanceof TilesLayer ? (tile: Info.Tile) => { - doRotate(tile) - } : - layer instanceof GameLayer ? (tile: Info.Tile) => { - if (isDirectionalGameTile(tile.id)) doRotate(tile) - } : - layer instanceof SwitchLayer ? (tile: Info.Switch) => { - if (isDirectionalSwitchTile(tile.id)) doRotate(tile) - } : - layer instanceof SpeedupLayer ? (tile: Info.Speedup) => { - tile.angle = (tile.angle + 90) % 360 - } : - false + layer instanceof TilesLayer + ? (tile: Info.Tile) => { + doRotate(tile) + } + : layer instanceof GameLayer + ? (tile: Info.Tile) => { + if (isDirectionalGameTile(tile.id)) doRotate(tile) + } + : layer instanceof SwitchLayer + ? (tile: Info.Switch) => { + if (isDirectionalSwitchTile(tile.id)) doRotate(tile) + } + : layer instanceof SpeedupLayer + ? (tile: Info.Speedup) => { + tile.angle = (tile.angle + 90) % 360 + } + : false if (rotateFn) { for (let row of tiles) { @@ -173,19 +185,23 @@ } const rotateFn: ((tile: Info.AnyTile) => void) | false = - layer instanceof TilesLayer ? (tile: Info.Tile) => { - doRotate(tile) - } : - layer instanceof GameLayer ? (tile: Info.Tile) => { - if (isDirectionalGameTile(tile.id)) doRotate(tile) - } : - layer instanceof SwitchLayer ? (tile: Info.Switch) => { - if (isDirectionalSwitchTile(tile.id)) doRotate(tile) - } : - layer instanceof SpeedupLayer ? (tile: Info.Speedup) => { - tile.angle = (tile.angle + 270) % 360 - } : - false + layer instanceof TilesLayer + ? (tile: Info.Tile) => { + doRotate(tile) + } + : layer instanceof GameLayer + ? (tile: Info.Tile) => { + if (isDirectionalGameTile(tile.id)) doRotate(tile) + } + : layer instanceof SwitchLayer + ? (tile: Info.Switch) => { + if (isDirectionalSwitchTile(tile.id)) doRotate(tile) + } + : layer instanceof SpeedupLayer + ? (tile: Info.Speedup) => { + tile.angle = (tile.angle + 270) % 360 + } + : false if (rotateFn) { for (let row of tiles) { @@ -196,7 +212,6 @@ } } - function onFlipV() { for (const layer of brush.layers) { const rlayer = $rmap.groups[brush.group].layers[layer.layer] @@ -268,8 +283,7 @@ if (prop in tile) { if (res === undefined) { res = tile[prop] - } - else if (tile[prop] !== res) { + } else if (tile[prop] !== res) { return undefined } } @@ -280,14 +294,17 @@ } function onSetProperty(prop: string, val: number) { - brush.layers.forEach(l => l.tiles.forEach(r => r.forEach(t => { - if (prop in t) { - t[prop] = val - } - }))) + brush.layers.forEach(l => + l.tiles.forEach(r => + r.forEach(t => { + if (prop in t) { + t[prop] = val + } + }) + ) + ) dispatch('change', brush) } -
@@ -309,12 +326,24 @@ {#if layer.kind === LayerKind.Tele} {:else if layer.kind === LayerKind.Speedup} {:else if layer.kind === LayerKind.Switch} {:else if layer.kind === LayerKind.Tune} {/if} {/if}
- diff --git a/client/src/ui/lib/editGroup.svelte b/client/src/ui/lib/editGroup.svelte index 8b87cce..0c838fa 100644 --- a/client/src/ui/lib/editGroup.svelte +++ b/client/src/ui/lib/editGroup.svelte @@ -69,25 +69,65 @@ query: 'edit/group', match: [g, { clip: { x: pick } }], apply: s => fromFixedNum(s, 5), - send: s => [g, { clip: { x: toFixedNum(s, 5), y: toFixedNum($syncClipY, 5), w: toFixedNum($syncClipW, 5), h: toFixedNum($syncClipH, 5) } }], + send: s => [ + g, + { + clip: { + x: toFixedNum(s, 5), + y: toFixedNum($syncClipY, 5), + w: toFixedNum($syncClipW, 5), + h: toFixedNum($syncClipH, 5), + }, + }, + ], }) syncClipY = sync($server, group.clipY, { query: 'edit/group', match: [g, { clip: { y: pick } }], apply: s => fromFixedNum(s, 5), - send: s => [g, { clip: { x: toFixedNum($syncClipX, 5), y: toFixedNum(s, 5), w: toFixedNum($syncClipW, 5), h: toFixedNum($syncClipH, 5) } }], + send: s => [ + g, + { + clip: { + x: toFixedNum($syncClipX, 5), + y: toFixedNum(s, 5), + w: toFixedNum($syncClipW, 5), + h: toFixedNum($syncClipH, 5), + }, + }, + ], }) syncClipW = sync($server, group.clipW, { query: 'edit/group', match: [g, { clip: { w: pick } }], apply: s => fromFixedNum(s, 5), - send: s => [g, { clip: { x: toFixedNum($syncClipX, 5), y: toFixedNum($syncClipY, 5), w: toFixedNum(s, 5), h: toFixedNum($syncClipH, 5) } }], + send: s => [ + g, + { + clip: { + x: toFixedNum($syncClipX, 5), + y: toFixedNum($syncClipY, 5), + w: toFixedNum(s, 5), + h: toFixedNum($syncClipH, 5), + }, + }, + ], }) syncClipH = sync($server, group.clipH, { query: 'edit/group', match: [g, { clip: { h: pick } }], apply: s => fromFixedNum(s, 5), - send: s => [g, { clip: { x: toFixedNum($syncClipX, 5), y: toFixedNum($syncClipY, 5), w: toFixedNum($syncClipW, 5), h: toFixedNum(s, 5) } }], + send: s => [ + g, + { + clip: { + x: toFixedNum($syncClipX, 5), + y: toFixedNum($syncClipY, 5), + w: toFixedNum($syncClipW, 5), + h: toFixedNum(s, 5), + }, + }, + ], }) } @@ -115,66 +155,70 @@ function onDeleteGroup() { $server.query('delete/group', g) } - {#key sync_} -
-

Group #{g} {$syncName}

- - {#if group !== $map.physicsGroup()} - - - - - - - - - - - {/if} - - - {#if group === $map.physicsGroup()} - {#if !$map.physicsLayer(SwitchLayer)} - - {/if} - {#if !$map.physicsLayer(FrontLayer)} - - {/if} - {#if !$map.physicsLayer(TuneLayer)} - +
+

Group #{g} {$syncName}

+ + {#if group !== $map.physicsGroup()} + + + + + + + + + + {/if} - {#if !$map.physicsLayer(SpeedupLayer)} - + + + {#if group === $map.physicsGroup()} + {#if !$map.physicsLayer(SwitchLayer)} + + {/if} + {#if !$map.physicsLayer(FrontLayer)} + + {/if} + {#if !$map.physicsLayer(TuneLayer)} + + {/if} + {#if !$map.physicsLayer(SpeedupLayer)} + + {/if} + {#if !$map.physicsLayer(TeleLayer)} + + {/if} {/if} - {#if !$map.physicsLayer(TeleLayer)} - + {#if $map.groups[g] !== $map.physicsGroup()} + {/if} - {/if} - {#if $map.groups[g] !== $map.physicsGroup()} - - {/if} -
+
{/key} diff --git a/client/src/ui/lib/editInfo.svelte b/client/src/ui/lib/editInfo.svelte index 50fdab1..408f6f6 100644 --- a/client/src/ui/lib/editInfo.svelte +++ b/client/src/ui/lib/editInfo.svelte @@ -3,8 +3,7 @@ import { sync } from '../../server/util' import { server, map } from '../global' - - $: syncInfo = sync($server, cloneInfo($map.info), { query: 'edit/info' }) + $: syncInfo = sync($server, cloneInfo($map.info), { query: 'edit/info' }) function cloneInfo(info: MapInfo): MapInfo { return { ...info } diff --git a/client/src/ui/lib/editLayer.svelte b/client/src/ui/lib/editLayer.svelte index 405ee09..c59c9a5 100644 --- a/client/src/ui/lib/editLayer.svelte +++ b/client/src/ui/lib/editLayer.svelte @@ -28,7 +28,7 @@ $: rgroup = g === -1 ? null : $rmap.groups[g] $: rlayer = l === -1 ? null : rgroup.layers[l] $: group = rgroup === null ? null : rgroup.group - $: layer = rlayer === null ? null : rlayer.layer as TilesLayer | QuadsLayer + $: layer = rlayer === null ? null : (rlayer.layer as TilesLayer | QuadsLayer) function clamp(cur: number, min: number, max: number) { return Math.min(Math.max(min, cur), max) @@ -86,8 +86,7 @@ let automapperOpen = false async function onImagePick(e: Event & { detail: File | Image | string | null }) { - if (!layer) - return + if (!layer) return imagePickerOpen = false // no image used @@ -97,7 +96,11 @@ // use existing image else if (e.detail instanceof Image) { const index = $rmap.map.images.indexOf(e.detail) - await $server.query('edit/layer', [g, l, { type: layerKind(layer), image: resIndexToString(index, e.detail.name) }]) + await $server.query('edit/layer', [ + g, + l, + { type: layerKind(layer), image: resIndexToString(index, e.detail.name) }, + ]) } // new uploaded image else if (e.detail instanceof File) { @@ -110,17 +113,20 @@ const url = externalImageUrl(e.detail) const embed = await showInfo('Do you wish to embed this image?', 'yesno') if (embed) { - const resp = await fetch(url) + const resp = await $server.fetch(url) const file = await resp.blob() const name = e.detail uploadImageAndPick(file, name) - } - else { + } else { try { showInfo('Creating image...', 'none') await $server.query('create/image', [name, { size: { w: 1024, h: 1024 } }]) const index = $rmap.map.images.length - 1 - await $server.query('edit/layer', [g, l, { type: layerKind(layer), image: resIndexToString(index, name) }]) + await $server.query('edit/layer', [ + g, + l, + { type: layerKind(layer), image: resIndexToString(index, name) }, + ]) clearDialog() } catch (e) { showError('Failed to create external image: ' + e) @@ -130,14 +136,17 @@ } async function uploadImageAndPick(file: Blob, name: string) { - if (!layer) - return + if (!layer) return try { // await uploadImage($serverCfg.httpUrl, $rmap.map.name, name, file) // TODO return index const buf = new Uint8Array(await file.arrayBuffer()) await $server.query('create/image', [name, bytesToBase64(buf)]) const index = $rmap.map.images.length - 1 - await $server.query('edit/layer', [g, l, { type: layerKind(layer), image: resIndexToString(index, name) }]) + await $server.query('edit/layer', [ + g, + l, + { type: layerKind(layer), image: resIndexToString(index, name) }, + ]) } catch (e) { showError('Failed to upload image: ' + e) } @@ -168,13 +177,25 @@ $: syncGroup = sync($server, g, { query: 'move/layer', - match: [[g, l], [pick, _]], - send: s => [[g, l], [s, 0]], + match: [ + [g, l], + [pick, _], + ], + send: s => [ + [g, l], + [s, 0], + ], }) $: syncOrder = sync($server, l, { query: 'move/layer', - match: [[g, l], [_, pick]], - send: s => [[g, l], [g, s]], + match: [ + [g, l], + [_, pick], + ], + send: s => [ + [g, l], + [g, s], + ], }) $: if (layer) { syncName = sync($server, layer.name, { @@ -215,8 +236,15 @@ syncColorEnv = sync($server, $rmap.map.envelopes.indexOf(layer.colorEnv), { query: 'edit/layer', match: [g, l, { color_env: pick }], - apply: s => s === null ? -1 : stringToResIndex(s)[0], - send: s => [g, l, { type: layerKind(layer), color_env: s === -1 ? null : resIndexToString(s, $rmap.map.envelopes[s].name) }], + apply: s => (s === null ? -1 : stringToResIndex(s)[0]), + send: s => [ + g, + l, + { + type: layerKind(layer), + color_env: s === -1 ? null : resIndexToString(s, $rmap.map.envelopes[s].name), + }, + ], }) } $: if (layer && layer instanceof AnyTilesLayer) { @@ -226,22 +254,25 @@ send: s => [g, l, { type: layerKind(layer), color_env_offset: s }], }) } - $: if (layer && layer instanceof TilesLayer || layer instanceof QuadsLayer) { + $: if ((layer && layer instanceof TilesLayer) || layer instanceof QuadsLayer) { syncImg = read($server, layer.image, { query: 'edit/layer', match: [g, l, { image: pick }], apply: () => layer.image, }) } - $: syncImgs = read($server, $rmap.map.images, [{ - query: 'create/image', - match: pick, - apply: () => $rmap.map.images, - }, { - query: 'delete/image', - match: pick, - apply: () => $rmap.map.images, - }]) + $: syncImgs = read($server, $rmap.map.images, [ + { + query: 'create/image', + match: pick, + apply: () => $rmap.map.images, + }, + { + query: 'delete/image', + match: pick, + apply: () => $rmap.map.images, + }, + ]) $: if (layer && layer instanceof TilesLayer) { syncAmCfg = read($server, layer.automapper.config === -1 ? null : layer.automapper.config, { query: 'edit/layer', @@ -249,19 +280,27 @@ }) } $: if (layer && layer instanceof TilesLayer) { - syncColEnvs = read($server, $rmap.map.envelopes.filter(e => e instanceof ColorEnvelope), [{ - query: 'create/envelope', - match: pick, - apply: () => $rmap.map.envelopes.filter(e => e instanceof ColorEnvelope), - }, { - query: 'delete/envelope', - match: pick, - apply: () => $rmap.map.envelopes.filter(e => e instanceof ColorEnvelope), - }, { - query: 'edit/envelope', - match: pick, - apply: () => $rmap.map.envelopes.filter(e => e instanceof ColorEnvelope), - }]) + syncColEnvs = read( + $server, + $rmap.map.envelopes.filter(e => e instanceof ColorEnvelope), + [ + { + query: 'create/envelope', + match: pick, + apply: () => $rmap.map.envelopes.filter(e => e instanceof ColorEnvelope), + }, + { + query: 'delete/envelope', + match: pick, + apply: () => $rmap.map.envelopes.filter(e => e instanceof ColorEnvelope), + }, + { + query: 'edit/envelope', + match: pick, + apply: () => $rmap.map.envelopes.filter(e => e instanceof ColorEnvelope), + }, + ] + ) } function onEditColor(e: FormInputEvent) { @@ -286,14 +325,18 @@ async function onAutomapperChange() { if (!layer) return const automapper = (layer as TilesLayer).automapper - await $server.query('edit/layer', [g, l, { - type: layerKind(layer), - automapper_config: { - config: automapper.config === -1 ? null : automapper.config, - seed: automapper.seed, - automatic: automapper.automatic, - } - }]) + await $server.query('edit/layer', [ + g, + l, + { + type: layerKind(layer), + automapper_config: { + config: automapper.config === -1 ? null : automapper.config, + seed: automapper.seed, + automatic: automapper.automatic, + }, + }, + ]) } @@ -317,7 +360,11 @@ {/if} {#if layer instanceof TilesLayer} @@ -335,7 +382,7 @@ {#each $syncColEnvs as env} {@const i = $rmap.map.envelopes.indexOf(env)} - + {/each} @@ -343,27 +390,45 @@ - + - + {/if} {#if layer instanceof TilesLayer || layer instanceof QuadsLayer} {/if} {#if !(layer instanceof GameLayer)} @@ -384,4 +449,3 @@ /> - diff --git a/client/src/ui/lib/editSharing.svelte b/client/src/ui/lib/editSharing.svelte index 808a760..5b88070 100644 --- a/client/src/ui/lib/editSharing.svelte +++ b/client/src/ui/lib/editSharing.svelte @@ -1,10 +1,10 @@ -
-

In this dialog you can open access to your map on the internet, so other tees can connect and edit with you.

+

+ In this dialog you can open access to your map on the internet, so other tees can connect and + edit with you. +

- + {/if}
- diff --git a/client/src/ui/lib/editor.svelte b/client/src/ui/lib/editor.svelte index 2369c57..79f5ba4 100644 --- a/client/src/ui/lib/editor.svelte +++ b/client/src/ui/lib/editor.svelte @@ -12,12 +12,8 @@ import LayerEditor from './editLayer.svelte' import GroupEditor from './editGroup.svelte' import MapEditor from './mapEditor.svelte' - import { - Add as CreateGroupIcon, - } from 'carbon-icons-svelte' - import { - Button, - } from 'carbon-components-svelte' + import { Add as CreateGroupIcon } from 'carbon-icons-svelte' + import { Button } from 'carbon-components-svelte' import { navigate } from 'svelte-routing' import { dataToTiles, tilesLayerFlagsToLayerKind } from '../../server/convert' import * as Actions from '../actions' @@ -35,13 +31,13 @@ let closedPaneThreshold = px2vw(rem2px(2)) // computed (readonly) - let g: number = -1, l: number = -1 + let g: number = -1, + l: number = -1 $: { if ($selected.length === 0) { g = -1 l = -1 - } - else { + } else { g = $selected[$selected.length - 1][0] l = $selected[$selected.length - 1][1] } @@ -120,8 +116,7 @@ $server.on('edit/automap', serverOnApplyAutomapper) $server.on('delete/automapper', serverOnDeleteAutomapper) $server.on('create/automapper', serverOnUploadAutomapper) - $server.query('get/users', undefined) - .then(u => $peers = u) + $server.query('get/users', undefined).then(u => ($peers = u)) viewport.canvas.addEventListener('mouseenter', onHoverCanvas) @@ -140,13 +135,16 @@ }) function onHoverCanvas() { - if (document.activeElement instanceof HTMLElement) - document.activeElement.blur() + if (document.activeElement instanceof HTMLElement) document.activeElement.blur() viewport.canvas.focus() } function onTogglePanes() { - if (layerPaneSize < closedPaneThreshold && propsPaneSize < closedPaneThreshold && envPaneSize < closedPaneThreshold) { + if ( + layerPaneSize < closedPaneThreshold && + propsPaneSize < closedPaneThreshold && + envPaneSize < closedPaneThreshold + ) { layerPaneSize = lastLayerPaneSize propsPaneSize = lastPropsPaneSize envPaneSize = lastEnvPaneSize @@ -190,8 +188,7 @@ } else if (e.key === 'y') { onRedo() } - } - else if (['Tab'].includes(e.key)) { + } else if (['Tab'].includes(e.key)) { e.preventDefault() if (e.key === 'Tab') { @@ -213,14 +210,11 @@ Editor.fire('keypress', e) } - -
- @@ -249,10 +243,16 @@

Multiple selection

{#if selectedTileLayers.length > 1} You selected {selectedTileLayers.length} tile layers. - You can edit the tiles from these layers together with your brush (clone, delete and repeat). + + You can edit the tiles from these layers together with your brush (clone, delete + and repeat). + {:else} You selected multiple layers. - Editing quad layers together is not implemented yet. You can only edit tiles layers together. + + Editing quad layers together is not implemented yet. You can only edit tiles + layers together. + {/if}
{:else if l !== -1} @@ -273,5 +273,4 @@
-
diff --git a/client/src/ui/lib/editor.ts b/client/src/ui/lib/editor.ts index 4a5b30f..79531ab 100644 --- a/client/src/ui/lib/editor.ts +++ b/client/src/ui/lib/editor.ts @@ -10,11 +10,11 @@ import { layerKind } from './util' // list of layers -> 2d array of tiles export type Brush = { - group: number, + group: number layers: { - layer: number, - kind: MapDir.LayerKind, - tiles: Info.AnyTile[][], + layer: number + kind: MapDir.LayerKind + tiles: Info.AnyTile[][] }[] } @@ -110,7 +110,7 @@ export function makeBoxSelection(map: Map, g: number, ll: number[], sel: Range): res.layers.push({ layer: l, kind: layerKind(layer), - tiles + tiles, }) } @@ -140,7 +140,7 @@ export function makeEmptySelection(map: Map, g: number, ll: number[], sel: Range res.layers.push({ layer: l, kind: layerKind(layer), - tiles + tiles, }) } @@ -148,33 +148,31 @@ export function makeEmptySelection(map: Map, g: number, ll: number[], sel: Range } function tileKind(tile: Info.AnyTile): MapDir.LayerKind { - if ('force' in tile) - return MapDir.LayerKind.Speedup - else if ('delay' in tile) - return MapDir.LayerKind.Switch + if ('force' in tile) return MapDir.LayerKind.Speedup + else if ('delay' in tile) return MapDir.LayerKind.Switch else if ('flags' in tile) return MapDir.LayerKind.Tiles // or Game or Front - else - return MapDir.LayerKind.Tele // or Tune + else return MapDir.LayerKind.Tele // or Tune } function adaptTile(tile: Info.AnyTile, kind: MapDir.LayerKind): Info.AnyTile { - if (tileKind(tile) === kind) { // COMBAK + if (tileKind(tile) === kind) { + // COMBAK return tile } else if (kind === MapDir.LayerKind.Tiles) { return { id: tile.id, - flags: 0 + flags: 0, } } else if (kind === MapDir.LayerKind.Front) { return { id: tile.id, - flags: 0 + flags: 0, } } else if (kind === MapDir.LayerKind.Game) { return { id: tile.id, - flags: 0 + flags: 0, } } else if (kind === MapDir.LayerKind.Speedup) { return { @@ -206,9 +204,7 @@ function adaptTile(tile: Info.AnyTile, kind: MapDir.LayerKind): Info.AnyTile { } export function adaptTiles(tiles: Info.AnyTile[][], kind: MapDir.LayerKind): Info.AnyTile[][] { - return tiles.map(row => - row.map(tile => adaptTile(tile, kind)) - ) + return tiles.map(row => row.map(tile => adaptTile(tile, kind))) } export function adaptBrushToLayers(map: Map, brush: Brush, g: number, ll: number[]): Brush { @@ -218,45 +214,41 @@ export function adaptBrushToLayers(map: Map, brush: Brush, g: number, ll: number const layer = brush.layers.find(x => brush.group === g && x.layer === l) if (layer) { return layer - } - else { + } else { const kind = layerKind(map.groups[g].layers[l]) return { layer: l, kind, - tiles: adaptTiles(brush.layers[0].tiles, kind) + tiles: adaptTiles(brush.layers[0].tiles, kind), } } - }) + }), } } // truncate 2D array left-right-top-bottom export function truncate(arr: T[][], range: Range) { - return arr.slice(range.start.y, range.end.y) - .map(arr => arr.slice(range.start.x, range.end.x)) + return arr.slice(range.start.y, range.end.y).map(arr => arr.slice(range.start.x, range.end.x)) } // periodic repetition of 2D array export function repeat(arr: T[][], size: Coord) { const w = arr[0].length const h = arr.length - return Array.from({ length: size.y }, (_, y) => Array.from({ length: size.x }, (_, x) => arr[y % h][x % w])) + return Array.from({ length: size.y }, (_, y) => + Array.from({ length: size.x }, (_, x) => arr[y % h][x % w]) + ) } function clamp(cur: number, min: number, max: number) { return Math.min(Math.max(min, cur), max) } -export function placeTiles( - server: WebSocketServer, - rmap: RenderMap, - pos: Coord, - brush: Brush -) { +export function placeTiles(server: WebSocketServer, rmap: RenderMap, pos: Coord, brush: Brush) { for (let i = 0; i < brush.layers.length; ++i) { const brushLayer = brush.layers[i] - const targetLayer = rmap.groups[brush.group].layers[brushLayer.layer].layer as AnyTilesLayer + const targetLayer = rmap.groups[brush.group].layers[brushLayer.layer] + .layer as AnyTilesLayer // make sure the brush is truncated on the edges of the layer const width = brushLayer.tiles[0].length @@ -264,12 +256,12 @@ export function placeTiles( const range = { start: { x: clamp(pos.x, 0, targetLayer.width) - pos.x, - y: clamp(pos.y, 0, targetLayer.height) - pos.y + y: clamp(pos.y, 0, targetLayer.height) - pos.y, }, end: { x: clamp(pos.x + width, 0, targetLayer.width) - pos.x, y: clamp(pos.y + height, 0, targetLayer.height) - pos.y, - } + }, } const tiles = truncate(brushLayer.tiles, range) @@ -296,17 +288,12 @@ export function placeTiles( if (isChanged()) { const data = tilesToData(tiles.flat()) - server.send('edit/tiles', [brush.group, brushLayer.layer, { x, y, w, h, tiles: data, }]) + server.send('edit/tiles', [brush.group, brushLayer.layer, { x, y, w, h, tiles: data }]) } } } -export function fill( - server: WebSocketServer, - rmap: RenderMap, - range: Range, - brush: Brush -) { +export function fill(server: WebSocketServer, rmap: RenderMap, range: Range, brush: Brush) { const size = { x: range.end.x - range.start.x + 1, y: range.end.y - range.start.y + 1, @@ -317,7 +304,7 @@ export function fill( layer: l.layer, kind: l.kind, tiles: repeat(l.tiles, size), - })) + })), } placeTiles(server, rmap, range.start, expanded) } diff --git a/client/src/ui/lib/envelopeEditor.svelte b/client/src/ui/lib/envelopeEditor.svelte index d0b1774..7f797d9 100644 --- a/client/src/ui/lib/envelopeEditor.svelte +++ b/client/src/ui/lib/envelopeEditor.svelte @@ -1,9 +1,23 @@ @@ -154,7 +151,7 @@ labelDescription="Only png files are accepted." accept={['.png']} status="complete" - on:change={(e) => selectFile(e.detail.length === 1 ? e.detail[0] : null)} + on:change={e => selectFile(e.detail.length === 1 ? e.detail[0] : null)} files={file === null ? [] : [file]} /> diff --git a/client/src/ui/lib/lang-ddnet_rules/index.d.ts b/client/src/ui/lib/lang-ddnet_rules/index.d.ts index d937a62..6ad2fc2 100644 --- a/client/src/ui/lib/lang-ddnet_rules/index.d.ts +++ b/client/src/ui/lib/lang-ddnet_rules/index.d.ts @@ -1,4 +1,4 @@ -import { LRLanguage, LanguageSupport } from "@codemirror/language"; -declare const DDNetRulesLanguage: LRLanguage; -declare function DDNetRules(): LanguageSupport; -export { DDNetRulesLanguage, DDNetRules }; +import { LRLanguage, LanguageSupport } from '@codemirror/language' +declare const DDNetRulesLanguage: LRLanguage +declare function DDNetRules(): LanguageSupport +export { DDNetRulesLanguage, DDNetRules } diff --git a/client/src/ui/lib/lang-ddnet_rules/index.js b/client/src/ui/lib/lang-ddnet_rules/index.js index 0d95fd4..d29d93e 100644 --- a/client/src/ui/lib/lang-ddnet_rules/index.js +++ b/client/src/ui/lib/lang-ddnet_rules/index.js @@ -1,69 +1,76 @@ -import { LRParser } from '@lezer/lr'; -import { LRLanguage, foldNodeProp, LanguageSupport } from '@codemirror/language'; -import { styleTags, tags } from '@lezer/highlight'; +import { LRParser } from '@lezer/lr' +import { LRLanguage, foldNodeProp, LanguageSupport } from '@codemirror/language' +import { styleTags, tags } from '@lezer/highlight' // This file was generated by lezer-generator. You probably shouldn't edit it. const parser = LRParser.deserialize({ version: 14, - states: "(QQYQPOOO_QPO'#C`OdQPO'#C_OOQO'#DQ'#DQQYQPOOOOQO,58z,58zOrQPO'#CeOOQO'#DR'#DROwQPO'#CdO!PQPO'#ChO!UQPO'#CgOOQO'#Cd'#CdO!mQPO'#CcOOQO,58y,58yOOQO-E7O-E7OOOQO,59P,59POOQO-E7P-E7POOQO,59O,59OO!xQPO,59SO#WQPO'#CpO#]QQO'#CzO#bQPO'#C}OOQO'#DT'#DTO#gQPO,59RO$OQPO'#DPOwQPO'#DUO$TQPO,58}OOQO'#Cl'#ClOOQO'#DS'#DSO$`QPO'#CkOOQO1G.n1G.nO$qQPO1G.nO$vQPO,59[O${QPO,59fOOQO,59i,59iOOQO-E7R-E7ROOQO,59k,59kOOQO,59p,59pOOQO-E7S-E7SOOQO-E7Q-E7QOOQO7+$Y7+$YO%QQPO1G.vOOQO1G/Q1G/QO%`QPO'#CuOOQO'#Cr'#CrO%eQPO7+$bO%jQPO'#CxOOQO,59a,59aOOQO< { const str = view.state.doc.toString() diff --git a/client/src/ui/lib/lang-rpp/index.d.ts b/client/src/ui/lib/lang-rpp/index.d.ts index 9f7c43c..111f03f 100644 --- a/client/src/ui/lib/lang-rpp/index.d.ts +++ b/client/src/ui/lib/lang-rpp/index.d.ts @@ -1,4 +1,4 @@ -import { LRLanguage, LanguageSupport } from "@codemirror/language"; -declare const RppLanguage: LRLanguage; -declare function Rpp(): LanguageSupport; -export { RppLanguage, Rpp }; +import { LRLanguage, LanguageSupport } from '@codemirror/language' +declare const RppLanguage: LRLanguage +declare function Rpp(): LanguageSupport +export { RppLanguage, Rpp } diff --git a/client/src/ui/lib/lang-rpp/index.js b/client/src/ui/lib/lang-rpp/index.js index a04eb4a..4cc797b 100644 --- a/client/src/ui/lib/lang-rpp/index.js +++ b/client/src/ui/lib/lang-rpp/index.js @@ -1,61 +1,124 @@ -import { LRParser } from '@lezer/lr'; -import { LRLanguage, foldNodeProp, LanguageSupport } from '@codemirror/language'; -import { styleTags, tags } from '@lezer/highlight'; +import { LRParser } from '@lezer/lr' +import { LRLanguage, foldNodeProp, LanguageSupport } from '@codemirror/language' +import { styleTags, tags } from '@lezer/highlight' // This file was generated by lezer-generator. You probably shouldn't edit it. -const spec_Ident = {__proto__:null,anchor:32, and:34, assert:36, automapper:38, break:40, continue:42, count:44, empty:46, end:48, error:50, false:52, for:54, full:56, function:58, group:60, if:62, index:64, insert:66, invoke:68, last:70, nested:72, newrule:74, newrun:76, nocopy:78, nodefault:80, not:82, notindex:84, null:86, operator:88, or:90, pos:92, preset:94, random:96, return:98, rotate:100, rule:102, to:104, true:106, type:108, warning:110, array:112, bool:114, coord:116, float:118, int:120, object:122, range:124, string:126, N:128, V:130, H:132, R:134, VR:136, VH:138, HR:140, VHR:142}; +const spec_Ident = { + __proto__: null, + anchor: 32, + and: 34, + assert: 36, + automapper: 38, + break: 40, + continue: 42, + count: 44, + empty: 46, + end: 48, + error: 50, + false: 52, + for: 54, + full: 56, + function: 58, + group: 60, + if: 62, + index: 64, + insert: 66, + invoke: 68, + last: 70, + nested: 72, + newrule: 74, + newrun: 76, + nocopy: 78, + nodefault: 80, + not: 82, + notindex: 84, + null: 86, + operator: 88, + or: 90, + pos: 92, + preset: 94, + random: 96, + return: 98, + rotate: 100, + rule: 102, + to: 104, + true: 106, + type: 108, + warning: 110, + array: 112, + bool: 114, + coord: 116, + float: 118, + int: 120, + object: 122, + range: 124, + string: 126, + N: 128, + V: 130, + H: 132, + R: 134, + VR: 136, + VH: 138, + HR: 140, + VHR: 142, +} const parser = LRParser.deserialize({ version: 14, states: "!QQYQPOOOOQO'#Cb'#CbOOQO'#Cd'#CdOOQO'#Ce'#CeOOQO'#Ck'#CkOOQO'#Cg'#CgQYQPOOOOQO-E6e-E6e", - stateData: "%Z~O^OSPOS~ORSOSSOTSOVSOYSO`POaPObPOcPOdPOePOfPOgPOhPOiPOjPOkPOlPOmPOnPOoPOpPOqPOrPOsPOtPOuPOvPOwPOxPOyPOzPO{PO|PO}PO!OPO!PPO!QPO!RPO!SPO!TPO!UPO!VPO!WPO!XPO!YQO!ZQO![QO!]QO!^QO!_QO!`QO!aQO!bRO!cRO!dRO!eRO!fRO!gRO!hRO!iRO~O", - goto: "o`PPPPPPaPaaPePPPkTSOUQUORVUTTOU", - nodeNames: "âš  LineComment file Preprocessor Literal String Keyword Ident Type Rotation Function", + stateData: + '%Z~O^OSPOS~ORSOSSOTSOVSOYSO`POaPObPOcPOdPOePOfPOgPOhPOiPOjPOkPOlPOmPOnPOoPOpPOqPOrPOsPOtPOuPOvPOwPOxPOyPOzPO{PO|PO}PO!OPO!PPO!QPO!RPO!SPO!TPO!UPO!VPO!WPO!XPO!YQO!ZQO![QO!]QO!^QO!_QO!`QO!aQO!bRO!cRO!dRO!eRO!fRO!gRO!hRO!iRO~O', + goto: 'o`PPPPPPaPaaPePPPkTSOUQUORVUTTOU', + nodeNames: 'âš  LineComment file Preprocessor Literal String Keyword Ident Type Rotation Function', maxTerm: 71, - skippedNodes: [0,1], + skippedNodes: [0, 1], repeatNodeCount: 1, - tokenData: "'g~RdX^!apq!ars#Ust$|{|%h}!O%h!O!P%q!P!Q&[!Q![&P![!]&y!c!}'X#T#o&y#y#z!a$f$g!a#BY#BZ!a$IS$I_!a$I|$JO!a$JT$JU!a$KV$KW!a&FU&FV!a~!fY^~X^!apq!a#y#z!a$f$g!a#BY#BZ!a$IS$I_!a$I|$JO!a$JT$JU!a$KV$KW!a&FU&FV!a~#ZWT~OY#UZr#Urs#ss#O#U#O#P#x#P;'S#U;'S;=`$v<%lO#U~#xOT~~#{RO;'S#U;'S;=`$U;=`O#U~$ZXT~OY#UZr#Urs#ss#O#U#O#P#x#P;'S#U;'S;=`$v;=`<%l#U<%lO#U~$yP;=`<%l#U~%RTR~OY$|Zr$|s;'S$|;'S;=`%b<%lO$|~%eP;=`<%l$|~%kQ!O!P%q!Q![&P~%tP!Q![%w~%|PS~!Q![%w~&UQS~!O!P%w!Q![&P~&_P!P!Q&b~&gSP~OY&bZ;'S&b;'S;=`&s<%lO&b~&vP;=`<%l&b~'ORV~![!]&y!c!}&y#T#o&y~'^RY~![!]'X!c!}'X#T#o'X", + tokenData: + "'g~RdX^!apq!ars#Ust$|{|%h}!O%h!O!P%q!P!Q&[!Q![&P![!]&y!c!}'X#T#o&y#y#z!a$f$g!a#BY#BZ!a$IS$I_!a$I|$JO!a$JT$JU!a$KV$KW!a&FU&FV!a~!fY^~X^!apq!a#y#z!a$f$g!a#BY#BZ!a$IS$I_!a$I|$JO!a$JT$JU!a$KV$KW!a&FU&FV!a~#ZWT~OY#UZr#Urs#ss#O#U#O#P#x#P;'S#U;'S;=`$v<%lO#U~#xOT~~#{RO;'S#U;'S;=`$U;=`O#U~$ZXT~OY#UZr#Urs#ss#O#U#O#P#x#P;'S#U;'S;=`$v;=`<%l#U<%lO#U~$yP;=`<%l#U~%RTR~OY$|Zr$|s;'S$|;'S;=`%b<%lO$|~%eP;=`<%l$|~%kQ!O!P%q!Q![&P~%tP!Q![%w~%|PS~!Q![%w~&UQS~!O!P%w!Q![&P~&_P!P!Q&b~&gSP~OY&bZ;'S&b;'S;=`&s<%lO&b~&vP;=`<%l&b~'ORV~![!]&y!c!}&y#T#o&y~'^RY~![!]'X!c!}'X#T#o'X", tokenizers: [0], - topRules: {"file":[0,2]}, - specialized: [{term: 7, get: value => spec_Ident[value] || -1}], - tokenPrec: 0 -}); + topRules: { file: [0, 2] }, + specialized: [{ term: 7, get: value => spec_Ident[value] || -1 }], + tokenPrec: 0, +}) function foldRppConfig(node) { - var _a, _b; - const from = (_b = (_a = node.firstChild) === null || _a === void 0 ? void 0 : _a.firstChild) === null || _b === void 0 ? void 0 : _b.to; // end of HeaderTok - const to = node.to - 1; // before newline - if (from) { - return { from, to }; - } - else { - return null; - } + var _a, _b + const from = + (_b = (_a = node.firstChild) === null || _a === void 0 ? void 0 : _a.firstChild) === null || + _b === void 0 + ? void 0 + : _b.to // end of HeaderTok + const to = node.to - 1 // before newline + if (from) { + return { from, to } + } else { + return null + } } const RppLanguage = LRLanguage.define({ - parser: parser.configure({ - props: [ - foldNodeProp.add({ - Config: foldRppConfig - }), - styleTags({ - LineComment: tags.lineComment, - String: tags.string, - Preprocessor: tags.meta, - Rotation: tags.keyword, - Literal: tags.number, - Keyword: tags.keyword, - Ident: tags.variableName, - Type: tags.typeName, - Function: tags.definition(tags.variableName), // not really but I want colors - }) - ] - }), - languageData: { - commentTokens: { line: "#" } - } -}); + parser: parser.configure({ + props: [ + foldNodeProp.add({ + Config: foldRppConfig, + }), + styleTags({ + LineComment: tags.lineComment, + String: tags.string, + Preprocessor: tags.meta, + Rotation: tags.keyword, + Literal: tags.number, + Keyword: tags.keyword, + Ident: tags.variableName, + Type: tags.typeName, + Function: tags.definition(tags.variableName), // not really but I want colors + }), + ], + }), + languageData: { + commentTokens: { line: '#' }, + }, +}) function Rpp() { - return new LanguageSupport(RppLanguage); + return new LanguageSupport(RppLanguage) } -export { Rpp, RppLanguage }; +export { Rpp, RppLanguage } diff --git a/client/src/ui/lib/lang-rpp/lint.ts b/client/src/ui/lib/lang-rpp/lint.ts index 93d6fe5..16f8e18 100644 --- a/client/src/ui/lib/lang-rpp/lint.ts +++ b/client/src/ui/lib/lang-rpp/lint.ts @@ -1,9 +1,6 @@ -import { linter } from "@codemirror/lint" +import { linter } from '@codemirror/lint' -import { - lint as lintAutomapper, - LintLevel, -} from '../../../twmap/automap' +import { lint as lintAutomapper, LintLevel } from '../../../twmap/automap' export const DDNetRulesLinter = linter(view => { const str = view.state.doc.toString() diff --git a/client/src/ui/lib/mapEditor.svelte b/client/src/ui/lib/mapEditor.svelte index 473e902..4bf3eba 100644 --- a/client/src/ui/lib/mapEditor.svelte +++ b/client/src/ui/lib/mapEditor.svelte @@ -1,19 +1,18 @@ - - -
-
@@ -566,28 +561,23 @@
{#each Object.values($cursorAnim) as cur} - {/each}
- {#if brushBuffer !== null} - + {/if} {#if rlayer instanceof RenderAnyTilesLayer} - + {:else if rlayer && rlayer.layer instanceof QuadsLayer}
{/if} -
{#if import.meta.env.MODE === 'development'} diff --git a/client/src/ui/lib/mapView.svelte b/client/src/ui/lib/mapView.svelte index 34183c7..298ddea 100644 --- a/client/src/ui/lib/mapView.svelte +++ b/client/src/ui/lib/mapView.svelte @@ -1,9 +1,9 @@ diff --git a/client/src/ui/lib/quadsView.svelte b/client/src/ui/lib/quadsView.svelte index 600bb64..36d164b 100644 --- a/client/src/ui/lib/quadsView.svelte +++ b/client/src/ui/lib/quadsView.svelte @@ -66,7 +66,7 @@ $server.on('edit/quad', onSync) $server.on('create/quad', onSync) $server.on('delete/quad', onSync) - + const updateForever = () => { viewBox = makeViewBox() circleRadius = 100 / viewport.scale @@ -197,7 +197,8 @@ // TODO: use defaults const create: Send['create/quad'] = [ - g, l, + g, + l, { position: coordToJson({ x: mx, y: my }, 15), corners: [ @@ -222,7 +223,7 @@ position_env_offset: 0, color_env: null, color_env_offset: 0, - } + }, ] hideCM() @@ -233,7 +234,7 @@ const copy: Quad = { ...quad, points: quad.points.map(({ x, y }) => ({ x, y })), - colors: quad.colors.map(({ r, g, b, a}) => ({ r, g, b, a })), + colors: quad.colors.map(({ r, g, b, a }) => ({ r, g, b, a })), texCoords: quad.texCoords.map(({ x, y }) => ({ x, y })), } @@ -247,7 +248,9 @@ const colorEnv_ = $rmap.map.envelopes.indexOf(colorEnv) return [ - g, l, q, + g, + l, + q, { position: coordToJson(points[4], 15), corners: points.slice(0, 4).map(p => coordToJson(p, 15)), @@ -257,7 +260,7 @@ position_env_offset: posEnvOffset, color_env: colorEnv_ === -1 ? null : resIndexToString(colorEnv_, colorEnv.name), color_env_offset: colorEnvOffset, - } + }, ] } @@ -271,7 +274,8 @@ }) const change: Send['create/quad'] = [ - g, l, + g, + l, { position: coordToJson(points[4], 15), corners: points.slice(0, 4).map(p => coordToJson(p, 15)), @@ -281,7 +285,7 @@ position_env_offset: posEnvOffset, color_env: colorEnv_ === -1 ? null : resIndexToString(colorEnv_, colorEnv.name), color_env_offset: colorEnvOffset, - } + }, ] hideCM() @@ -295,97 +299,97 @@ {#key sync_} -
- - - {#each quadPoints as _, q} - {@const points = quadPoints[q]} - onMouseDown(e, q, [0, 1, 2, 3, 4])} - /> - onMouseDown(e, q, [0, 1])} - /> - onMouseDown(e, q, [1, 3])} - /> - onMouseDown(e, q, [3, 2])} - /> - onMouseDown(e, q, [2, 0])} - /> - onMouseDown(e, q, [0])} - on:contextmenu={e => showCM(e, q, 0)} - /> - onMouseDown(e, q, [1])} - on:contextmenu={e => showCM(e, q, 1)} - /> - onMouseDown(e, q, [2])} - on:contextmenu={e => showCM(e, q, 2)} - /> - onMouseDown(e, q, [3])} - on:contextmenu={e => showCM(e, q, 3)} - /> - onMouseDown(e, q, [4])} - on:contextmenu={e => showCM(e, q, 4)} - /> - {/each} - - {#if cm_q !== -1} - {@const quad = layer.quads[cm_q]} - - onChange(cm_q)} - on:delete={() => onDelete(cm_q)} - on:duplicate={() => onDuplicate(cm_q)} - /> - - {/if} -
+
+ + + {#each quadPoints as _, q} + {@const points = quadPoints[q]} + onMouseDown(e, q, [0, 1, 2, 3, 4])} + /> + onMouseDown(e, q, [0, 1])} + /> + onMouseDown(e, q, [1, 3])} + /> + onMouseDown(e, q, [3, 2])} + /> + onMouseDown(e, q, [2, 0])} + /> + onMouseDown(e, q, [0])} + on:contextmenu={e => showCM(e, q, 0)} + /> + onMouseDown(e, q, [1])} + on:contextmenu={e => showCM(e, q, 1)} + /> + onMouseDown(e, q, [2])} + on:contextmenu={e => showCM(e, q, 2)} + /> + onMouseDown(e, q, [3])} + on:contextmenu={e => showCM(e, q, 3)} + /> + onMouseDown(e, q, [4])} + on:contextmenu={e => showCM(e, q, 4)} + /> + {/each} + + {#if cm_q !== -1} + {@const quad = layer.quads[cm_q]} + + onChange(cm_q)} + on:delete={() => onDelete(cm_q)} + on:duplicate={() => onDuplicate(cm_q)} + /> + + {/if} +
{/key} diff --git a/client/src/ui/lib/stats.svelte b/client/src/ui/lib/stats.svelte index 427e852..607880d 100644 --- a/client/src/ui/lib/stats.svelte +++ b/client/src/ui/lib/stats.svelte @@ -9,12 +9,11 @@ frames++ if (time >= startTime + 1000) { - fps = Math.round(frames * 1000 / (time - startTime)) + fps = Math.round((frames * 1000) / (time - startTime)) startTime = time frames = 0 } } -
diff --git a/client/src/ui/lib/tilePicker.svelte b/client/src/ui/lib/tilePicker.svelte index f59409b..208615d 100644 --- a/client/src/ui/lib/tilePicker.svelte +++ b/client/src/ui/lib/tilePicker.svelte @@ -52,13 +52,34 @@ $: normSelection = normalizeRange(selection) // this is a bit monolithic but hey typescript - let currentTile: { kind: MapDir.LayerKind.Tiles } & Tile = { kind: MapDir.LayerKind.Tiles, ...TilesLayer.defaultTile() } - let currentGame: { kind: MapDir.LayerKind.Game } & Tile = { kind: MapDir.LayerKind.Game, ...GameLayer.defaultTile() } - let currentFront: { kind: MapDir.LayerKind.Front } & Tile = { kind: MapDir.LayerKind.Front, ...FrontLayer.defaultTile() } - let currentTele: { kind: MapDir.LayerKind.Tele } & Tele = { kind: MapDir.LayerKind.Tele, ...TeleLayer.defaultTile() } - let currentSwitch: { kind: MapDir.LayerKind.Switch } & Switch = { kind: MapDir.LayerKind.Switch, ...SwitchLayer.defaultTile() } - let currentSpeedup: { kind: MapDir.LayerKind.Speedup } & Speedup = { kind: MapDir.LayerKind.Speedup, ...SpeedupLayer.defaultTile() } - let currentTune: { kind: MapDir.LayerKind.Tune } & Tune = { kind: MapDir.LayerKind.Tune, ...TuneLayer.defaultTile() } + let currentTile: { kind: MapDir.LayerKind.Tiles } & Tile = { + kind: MapDir.LayerKind.Tiles, + ...TilesLayer.defaultTile(), + } + let currentGame: { kind: MapDir.LayerKind.Game } & Tile = { + kind: MapDir.LayerKind.Game, + ...GameLayer.defaultTile(), + } + let currentFront: { kind: MapDir.LayerKind.Front } & Tile = { + kind: MapDir.LayerKind.Front, + ...FrontLayer.defaultTile(), + } + let currentTele: { kind: MapDir.LayerKind.Tele } & Tele = { + kind: MapDir.LayerKind.Tele, + ...TeleLayer.defaultTile(), + } + let currentSwitch: { kind: MapDir.LayerKind.Switch } & Switch = { + kind: MapDir.LayerKind.Switch, + ...SwitchLayer.defaultTile(), + } + let currentSpeedup: { kind: MapDir.LayerKind.Speedup } & Speedup = { + kind: MapDir.LayerKind.Speedup, + ...SpeedupLayer.defaultTile(), + } + let currentTune: { kind: MapDir.LayerKind.Tune } & Tune = { + kind: MapDir.LayerKind.Tune, + ...TuneLayer.defaultTile(), + } function onInputChanged() { currentTele.number = clamp(currentTele.number, 0, 255) @@ -76,18 +97,18 @@ rlayer.layer instanceof TilesLayer ? currentTile : rlayer.layer instanceof GameLayer - ? currentGame - : rlayer.layer instanceof FrontLayer - ? currentFront - : rlayer.layer instanceof TeleLayer - ? currentTele - : rlayer.layer instanceof SwitchLayer - ? currentSwitch - : rlayer.layer instanceof SpeedupLayer - ? currentSpeedup - : rlayer.layer instanceof TuneLayer - ? currentTune - : null + ? currentGame + : rlayer.layer instanceof FrontLayer + ? currentFront + : rlayer.layer instanceof TeleLayer + ? currentTele + : rlayer.layer instanceof SwitchLayer + ? currentSwitch + : rlayer.layer instanceof SpeedupLayer + ? currentSpeedup + : rlayer.layer instanceof TuneLayer + ? currentTune + : null let mounted = false onMount(() => { @@ -109,8 +130,7 @@ async function drawLayer(image: Image) { const img = await getCanvasImage(image) - if (!mounted) - return + if (!mounted) return canvas.width = img.width as number canvas.height = img.height as number ctx.globalCompositeOperation = 'copy' @@ -129,7 +149,7 @@ ctx.clearRect(0, 0, canvas.width / tileCount, canvas.height / tileCount) } - type ImageSource = CanvasImageSource & { width: number, height: number } + type ImageSource = CanvasImageSource & { width: number; height: number } async function getCanvasImage(image: Image): Promise { if (image.data instanceof HTMLImageElement) { ctx.drawImage(image.data, 0, 0) @@ -251,18 +271,28 @@
-
-
{#if rlayer.layer instanceof TeleLayer} {:else if rlayer.layer instanceof SpeedupLayer} {:else if rlayer.layer instanceof SwitchLayer} {:else if rlayer.layer instanceof TuneLayer} {:else} Select tiles to place on the map. @@ -302,7 +356,6 @@
-
@@ -316,5 +369,4 @@ kind="secondary" />
-
diff --git a/client/src/ui/lib/treeView.svelte b/client/src/ui/lib/treeView.svelte index 65e019c..1a96ed1 100644 --- a/client/src/ui/lib/treeView.svelte +++ b/client/src/ui/lib/treeView.svelte @@ -26,8 +26,7 @@ if ($selected.length === 0) { active_g = -1 active_l = -1 - } - else { + } else { active_g = $selected[$selected.length - 1][0] active_l = $selected[$selected.length - 1][1] } @@ -104,17 +103,16 @@ return layer instanceof TilesLayer ? TilesLayerIcon : layer instanceof AnyTilesLayer - ? GameLayerIcon - : layer instanceof QuadsLayer - ? QuadsLayerIcon - : UnknownLayerIcon + ? GameLayerIcon + : layer instanceof QuadsLayer + ? QuadsLayerIcon + : UnknownLayerIcon } function select(g: number, l: number, e: MouseEvent | KeyboardEvent) { if (e.shiftKey && g === active_g) { $selected = [...$selected.filter(([_, l2]) => l2 !== -1 && l2 !== l), [g, l]] - } - else { + } else { $selected = [[g, l]] } } @@ -158,58 +156,58 @@ {#key sync_} -
    - {#each $rmap.groups as rgroup, g (rgroup)} - {@const group = rgroup.group} -
  • -
    select(g, -1, e)} - on:keydown={e => onKeyDown(g, -1, e)} - > - - - {groupName(group)} - -
    - -
      - {#each rgroup.layers as rlayer, l (rlayer)} - {@const layer = rlayer.layer} -
    • -
      select(g, l, e)} - on:keydown={e => onKeyDown(g, l, e)} - > - - {@html layerName(layer)} -
      +
    • + {/each} +
    +
  • + {/each} +
{/key} diff --git a/client/src/ui/lib/util.ts b/client/src/ui/lib/util.ts index 93bfbe8..128edd9 100644 --- a/client/src/ui/lib/util.ts +++ b/client/src/ui/lib/util.ts @@ -1,10 +1,19 @@ import type { Layer } from '../../twmap/layer' import { Map, type PhysicsLayer } from '../../twmap/map' import { Image } from '../../twmap/image' -import { AnyTilesLayer, FrontLayer, GameLayer, SpeedupLayer, SwitchLayer, TeleLayer, TilesLayer, TuneLayer } from '../../twmap/tilesLayer' +import { + AnyTilesLayer, + FrontLayer, + GameLayer, + SpeedupLayer, + SwitchLayer, + TeleLayer, + TilesLayer, + TuneLayer, +} from '../../twmap/tilesLayer' import { TilesLayerFlags } from '../../twmap/types' import type { WebSocketServer } from '../../server/server' -import type { MapCreation, MapDetail } from '../../server/protocol' +import type { Config, MapCreation, MapDetail } from '../../server/protocol' import * as MapDir from '../../twmap/mapdir' import { QuadsLayer } from '../../twmap/quadsLayer' import { clearDialog, showInfo } from './dialog' @@ -14,10 +23,10 @@ export type Ctor = new (...args: any[]) => T export type FormEvent = Event & { currentTarget: EventTarget & T } export type FormInputEvent = FormEvent -export async function download(file: string, name: string) { +export async function download(path: string, name: string) { const id = showInfo(`Downloading '${name}'…`, 'none') try { - const resp = await fetch(file) + const resp = await fetch(path) const data = await resp.blob() const url = URL.createObjectURL(data) @@ -29,40 +38,30 @@ export async function download(file: string, name: string) { link.click() link.remove() showInfo(`Downloaded '${name}'.`) - } - finally { + } finally { clearDialog(id) } } -export async function uploadMap(httpRoot: string, name: string, file: Blob) { - const resp = await fetch(`${httpRoot}/maps/${name}`, { +export async function uploadMap(url: string, name: string, file: Blob) { + const resp = await fetch(`${url}/maps/${name}`, { method: 'PUT', - body: file + body: file, }) - if (!resp.ok) - throw await resp.text() + if (!resp.ok) throw await resp.text() } -export async function createMap(httpRoot: string, name: string, create: MapCreation) { - const resp = await fetch(`${httpRoot}/maps/${name}`, { +export async function createMap(url: string, name: string, create: MapCreation) { + const resp = await fetch(`${url}/maps/${name}`, { method: 'POST', headers: { 'Content-Type': 'application/json' }, - body: JSON.stringify(create) + body: JSON.stringify(create), }) - if (!resp.ok) - throw await resp.text() + if (!resp.ok) throw await resp.text() } -// export async function uploadImage(httpRoot: string, mapName: string, imageName: string, file: Blob) { -// await fetch(`${httpRoot}/maps/${mapName}/map/images/${imageName}`, { -// method: 'POST', -// body: file -// }) -// } - export async function decodePng(file: Blob): Promise { return new Promise((resolve, reject) => { const img = document.createElement('img') @@ -88,7 +87,7 @@ export function externalImageUrl(name: string) { return '/mapres/' + name + '.png' } -export async function queryMaps(httpRoot: string): Promise { +export async function queryMaps(url: string): Promise { function sortMaps(maps: MapDetail[]): MapDetail[] { return maps.sort((a, b) => { if (a.users === b.users) return a.name.localeCompare(b.name) @@ -96,29 +95,43 @@ export async function queryMaps(httpRoot: string): Promise { }) } - const resp = await fetch(`${httpRoot}/maps`) + const resp = await fetch(`${url}/maps`) const maps: MapDetail[] = await resp.json() sortMaps(maps) return maps } -export async function queryMap(httpRoot: string, mapName: string): Promise { - const resp = await fetch(`${httpRoot}/maps/${mapName}`) +export async function queryConfig(server: WebSocketServer, mapName: string): Promise { + const resp = await server.fetch(`maps/${mapName}/config`) + const config: Config = await resp.json() + return config +} + +export async function queryMap(server: WebSocketServer, mapName: string): Promise { + const resp = await server.fetch(`maps/${mapName}`) const data = await resp.arrayBuffer() const map = new Map() map.load(mapName, data) return map } -export async function queryImageData(httpRoot: string, mapName: string, imageIndex: number): Promise { - const resp = await fetch(`${httpRoot}/maps/${mapName}/images/${imageIndex}`) +export async function queryImageData( + server: WebSocketServer, + mapName: string, + imageIndex: number +): Promise { + const resp = await server.fetch(`maps/${mapName}/images/${imageIndex}`) const data = await resp.blob() const image = await decodePng(data) return image } -export async function queryImage(server: WebSocketServer, httpRoot: string, mapName: string, imageIndex: number): Promise { - const data = await queryImageData(httpRoot, mapName, imageIndex) +export async function queryImage( + server: WebSocketServer, + mapName: string, + imageIndex: number +): Promise { + const data = await queryImageData(server, mapName, imageIndex) const img = new Image() const images = await server.query('get/images', undefined) img.loadEmbedded(data) diff --git a/client/src/ui/routes/edit.svelte b/client/src/ui/routes/edit.svelte index 1f4dc10..2ca5ccf 100644 --- a/client/src/ui/routes/edit.svelte +++ b/client/src/ui/routes/edit.svelte @@ -7,16 +7,15 @@ import Fence from '../lib/fence.svelte' import { onDestroy, onMount } from 'svelte' import { showError } from '../lib/dialog' - import { serverHttpUrl } from '../../server/util' export let name: string + export let password: string let loadingSignal = (async () => { reset() - await $server.query('join', name) - const httpUrl = serverHttpUrl($serverCfg) - const map_ = await queryMap(httpUrl, name) + await $server.query('join', { name, password }) + const map_ = await queryMap($server, name) const ams = await $server.query('get/automappers', undefined) $automappers = Object.fromEntries(ams.map(am => [am.name, am])) $map = map_ @@ -34,16 +33,13 @@ $server.onError(() => {}) $server.query('leave', name) }) - {name} - DDNet Map Editor -
- @@ -53,5 +49,4 @@ {/if} -
diff --git a/client/src/ui/routes/lobby.svelte b/client/src/ui/routes/lobby.svelte index eafd880..bbfd862 100644 --- a/client/src/ui/routes/lobby.svelte +++ b/client/src/ui/routes/lobby.svelte @@ -27,7 +27,7 @@ RadioButton, ComboBox, } from 'carbon-components-svelte' - import storage, { type ServerConfig } from '../../storage' + import storage from '../../storage' import { Help as AboutIcon, LogoGithub as GitHubIcon, @@ -37,10 +37,10 @@ Password as KeyIcon, } from 'carbon-icons-svelte' import { createMap, download, queryMaps, uploadMap } from '../lib/util' - import type { ComboBoxItem } from 'carbon-components-svelte/types/ComboBox/ComboBox.svelte' + import type { ComboBoxItem } from 'carbon-components-svelte/src/ComboBox/ComboBox.svelte' import type { MapDetail } from '../../server/protocol' import { onMount } from 'svelte' - import { serverHttpUrl } from '../../server/util' + import { serverHttpUrl, type ServerConfig } from '../../server/server' type SpinnerStatus = 'active' | 'inactive' | 'finished' | 'error' type ServerStatus = 'unknown' | 'connecting' | 'connected' | 'error' | 'online' @@ -70,6 +70,7 @@ open: boolean name: string public: boolean + password: string method: 'upload' | 'blank' | 'clone' clone: number | undefined cloneItems: { id: number; text: string }[] @@ -82,6 +83,7 @@ open: false, name: 'My Map', public: true, + password: '', method: 'upload', clone: undefined, cloneItems: [], @@ -109,7 +111,7 @@ online: ['finished', 'Online'], } - $: serverStatuses = serverCfgs.map(_ => 'unknown') + $: serverStatuses = serverCfgs.map(_ => 'unknown') $: serverCfg = serverCfgs[serverId] $: httpUrl = serverHttpUrl(serverCfg) @@ -134,8 +136,7 @@ serverId = id maps = [] - if (serverId >= serverCfgs.length) - serverId = 0 + if (serverId >= serverCfgs.length) serverId = 0 setServerStatus(id, 'connecting') @@ -166,7 +167,7 @@ const cfg: ServerConfig = { ...serverCfg, name: 'remote: ' + key, - path: (serverCfg.path ?? '') + '/bridge/' + key + path: (serverCfg.path ?? '') + '/bridge/' + key, } serverCfgs.push(cfg) @@ -185,11 +186,15 @@ modalConfirmDelete.open = true modalConfirmDelete.onConfirm = async () => { try { - await fetch(`${httpUrl}/maps/${mapName}`, { - method: 'DELETE' + let resp = await fetch(`${httpUrl}/maps/${mapName}`, { + method: 'DELETE', }) + if (!resp.ok) { + throw await resp.text() + } } catch (e) { showError('Map deletion failed: ' + e) + console.error(e) } modalConfirmDelete.open = false selectServer(serverId) @@ -231,39 +236,41 @@ async function onCreateMap() { const { name, method } = modalCreateMap - const access = modalCreateMap.public ? 'public' : 'unlisted' const id = showInfo('Querying the server…', 'none') try { if (method === 'upload' && modalCreateMap.uploadFile !== null) { await uploadMap(httpUrl, name, modalCreateMap.uploadFile) - } - else if (method === 'blank') { + } else if (method === 'blank') { await createMap(httpUrl, name, { version: 'ddnet06', // TODO - access, + public: modalCreateMap.public, + password: modalCreateMap.password, blank: { w: modalCreateMap.blankWidth, h: modalCreateMap.blankHeight, - } + }, }) - } - else if (method === 'clone' && modalCreateMap.clone !== undefined) { + } else if (method === 'clone' && modalCreateMap.clone !== undefined) { await createMap(httpUrl, name, { version: 'ddnet06', - access, - clone: maps[modalCreateMap.clone].name + public: modalCreateMap.public, + password: modalCreateMap.password, + clone: maps[modalCreateMap.clone].name, }) } clearDialog(id) - if (access === 'unlisted') { - showWarning("You created a map that won't be publicly listed. To access it in the future, use the access key '" + name + "'.") + if (!modalCreateMap.public) { + showWarning( + "You created a map that won't be publicly listed. To access it in the future, use the access key '" + + name + + "'." + ) } navigate('/edit/' + name) - } - catch (e) { + } catch (e) { clearDialog(id) showError('Map creation failed: ' + e) } @@ -275,6 +282,10 @@ } + + DDNet Map Editor + +