From e8d4614fbe6fadeb3a34f94a5b91a4b22825e2a4 Mon Sep 17 00:00:00 2001 From: Florian Rupprecht <33600480+nx10@users.noreply.github.com> Date: Sat, 27 Aug 2022 19:42:53 +0200 Subject: [PATCH] Initial commit --- package-lock.json | 1111 ++++++++++++++++++++++++----- package.json | 11 +- postcss.config.cjs | 6 + src/app.css | 3 + src/app.html | 9 +- src/routes/+layout.svelte | 5 + src/routes/+page.svelte | 107 ++- src/routes/about/+page.svelte | 72 ++ src/routes/pkg/+page.svelte | 113 +++ src/server_data.ts | 212 ++++++ src/stores.ts | 19 + src/types.d.ts | 30 + src/utils.ts | 22 + static/about.txt | 6 + static/android-chrome-192x192.png | Bin 0 -> 7292 bytes static/android-chrome-512x512.png | Bin 0 -> 21115 bytes static/apple-touch-icon.png | Bin 0 -> 6553 bytes static/favicon-16x16.png | Bin 0 -> 523 bytes static/favicon-32x32.png | Bin 0 -> 991 bytes static/favicon.ico | Bin 0 -> 15406 bytes static/favicon.png | Bin 1571 -> 0 bytes static/site.webmanifest | 1 + svelte.config.js | 6 +- tailwind.config.cjs | 8 + 24 files changed, 1560 insertions(+), 181 deletions(-) create mode 100644 postcss.config.cjs create mode 100644 src/app.css create mode 100644 src/routes/+layout.svelte create mode 100644 src/routes/about/+page.svelte create mode 100644 src/routes/pkg/+page.svelte create mode 100644 src/server_data.ts create mode 100644 src/stores.ts create mode 100644 src/types.d.ts create mode 100644 src/utils.ts create mode 100644 static/about.txt create mode 100644 static/android-chrome-192x192.png create mode 100644 static/android-chrome-512x512.png create mode 100644 static/apple-touch-icon.png create mode 100644 static/favicon-16x16.png create mode 100644 static/favicon-32x32.png create mode 100644 static/favicon.ico delete mode 100644 static/favicon.png create mode 100644 static/site.webmanifest create mode 100644 tailwind.config.cjs diff --git a/package-lock.json b/package-lock.json index e60eabe..85dd228 100644 --- a/package-lock.json +++ b/package-lock.json @@ -7,19 +7,26 @@ "": { "name": "cran-upcoming", "version": "0.0.1", + "dependencies": { + "luxon": "^3.0.1" + }, "devDependencies": { "@sveltejs/adapter-auto": "next", "@sveltejs/kit": "next", + "@types/luxon": "^3.0.0", "@typescript-eslint/eslint-plugin": "^5.27.0", "@typescript-eslint/parser": "^5.27.0", + "autoprefixer": "^10.4.8", "eslint": "^8.16.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-svelte3": "^4.0.0", + "postcss": "^8.4.16", "prettier": "^2.6.2", "prettier-plugin-svelte": "^2.7.0", "svelte": "^3.44.0", "svelte-check": "^2.7.1", - "svelte-preprocess": "^4.10.6", + "svelte-preprocess": "^4.10.7", + "tailwindcss": "^3.1.8", "tslib": "^2.3.1", "typescript": "^4.7.4", "vite": "^3.0.4" @@ -48,14 +55,14 @@ } }, "node_modules/@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.1.tgz", + "integrity": "sha512-OhSY22oQQdw3zgPOOwdoj01l/Dzl1Z+xyUP33tkSN+aqyEhymJCcPHyXt+ylW8FSe0TfRC2VG+ROQOapD0aZSQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.2", + "espree": "^9.4.0", "globals": "^13.15.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -65,6 +72,9 @@ }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, "node_modules/@humanwhocodes/config-array": { @@ -91,6 +101,19 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true, + "engines": { + "node": ">=12.22" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -223,20 +246,20 @@ } }, "node_modules/@sveltejs/adapter-auto": { - "version": "1.0.0-next.65", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-1.0.0-next.65.tgz", - "integrity": "sha512-wYEcOeuCrswcmeOdmbaq+WxTp7vWN1fG1yPvmdzqe2LoUchOw6FQb6X/fR8miX6L8MXQXJteA0ntqE3FKqaBsw==", + "version": "1.0.0-next.66", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-1.0.0-next.66.tgz", + "integrity": "sha512-p78AQaSDHkLS5EFGqCF2xrLHMjKxx6wTLUvnP26cu2llh/VV4NihQ0rheVNgPWL+tGZpVznhrUG8fWmJxPciug==", "dev": true, "dependencies": { - "@sveltejs/adapter-cloudflare": "1.0.0-next.31", - "@sveltejs/adapter-netlify": "1.0.0-next.71", - "@sveltejs/adapter-vercel": "1.0.0-next.67" + "@sveltejs/adapter-cloudflare": "1.0.0-next.32", + "@sveltejs/adapter-netlify": "1.0.0-next.72", + "@sveltejs/adapter-vercel": "1.0.0-next.68" } }, "node_modules/@sveltejs/adapter-cloudflare": { - "version": "1.0.0-next.31", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-cloudflare/-/adapter-cloudflare-1.0.0-next.31.tgz", - "integrity": "sha512-HhEFZP72GJ8AZGgFECKIiayDcLaAWi65pI0AnBfiNhCifYSlH/mPNWNVD4AWRDnXnH6XU+FLwhGDnIDwytTyYg==", + "version": "1.0.0-next.32", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-cloudflare/-/adapter-cloudflare-1.0.0-next.32.tgz", + "integrity": "sha512-tzkUsdQlBk9xUjcGUOBYos4HKaeaXvz9v4TQ1QS2yIHEtL5xvMEDPZ94/DB2gPL4LZCnYbdY2lsy5HCsoN0hkQ==", "dev": true, "dependencies": { "@cloudflare/workers-types": "^3.14.0", @@ -245,9 +268,9 @@ } }, "node_modules/@sveltejs/adapter-netlify": { - "version": "1.0.0-next.71", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-netlify/-/adapter-netlify-1.0.0-next.71.tgz", - "integrity": "sha512-la1CGtWO1xul1L3zEoFAoc4EX2uxZjrZcOMS3tkKB8drxhbQsNbnTE6fmSSMFiZXhxaikczrBgQwqIaDkLTmZg==", + "version": "1.0.0-next.72", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-netlify/-/adapter-netlify-1.0.0-next.72.tgz", + "integrity": "sha512-g570hYAMkgrJfo/TRg3DZFmlR7bNFHECFPOMgc8R+f28ROap/nXA8ICbiSBF7+zJ5JXvJbqHGjERSsyhEq+59g==", "dev": true, "dependencies": { "@iarna/toml": "^2.2.5", @@ -257,9 +280,9 @@ } }, "node_modules/@sveltejs/adapter-vercel": { - "version": "1.0.0-next.67", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-vercel/-/adapter-vercel-1.0.0-next.67.tgz", - "integrity": "sha512-xg85d/vlivbTaZu70zmaPNkrY1YZhDrcxljuwVWO0LCzA4DACIA7CnXI9klUiXM5SPpsB8BhY6dS8sW5cDYWzw==", + "version": "1.0.0-next.68", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-vercel/-/adapter-vercel-1.0.0-next.68.tgz", + "integrity": "sha512-ImM+fDwGkVaf920Wzh284nfAfu/WoPXCpMwog0kveIODVgCozbpJY55fO860LccqdS0YDyeFqOUrZJCqcYNx4w==", "dev": true, "dependencies": { "@vercel/nft": "^0.21.0", @@ -267,9 +290,9 @@ } }, "node_modules/@sveltejs/kit": { - "version": "1.0.0-next.428", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.428.tgz", - "integrity": "sha512-CVp7zltQ+3VOII1s7KuvgvGEFwD0PSqts9R3q4eaj0CNoC3gpdzcbEZayyQwXX/3lI1HdSNSF8gxbX0TRUoFuA==", + "version": "1.0.0-next.444", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.444.tgz", + "integrity": "sha512-B9ekUK5r/3IODxyXjAmEWFC1ytxRlsnApgF8qV/2IJWvWXvj62PjB8qK7UBvMM9A1codfx94RMvj9r6wTKRIAA==", "dev": true, "hasInstallScript": true, "dependencies": { @@ -330,10 +353,16 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "node_modules/@types/luxon": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.0.0.tgz", + "integrity": "sha512-Lx+EZoJxUKw4dp8uei9XiUVNlgkYmax5+ovqt6Xf3LzJOnWhlfJw/jLBmqfGVwOP/pDr4HT8bI1WtxK0IChMLw==", + "dev": true + }, "node_modules/@types/node": { - "version": "18.7.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.8.tgz", - "integrity": "sha512-/YP55EMK2341JkODUb8DM9O0x1SIz2aBvyF33Uf1c76St3VpsMXEIW0nxuKkq/5cxnbz0RD9cfwNZHEAZQD3ag==", + "version": "18.7.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz", + "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==", "dev": true }, "node_modules/@types/pug": { @@ -352,14 +381,14 @@ } }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.33.1.tgz", - "integrity": "sha512-S1iZIxrTvKkU3+m63YUOxYPKaP+yWDQrdhxTglVDVEVBf+aCSw85+BmJnyUaQQsk5TXFG/LpBu9fa+LrAQ91fQ==", + "version": "5.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.35.1.tgz", + "integrity": "sha512-RBZZXZlI4XCY4Wzgy64vB+0slT9+yAPQRjj/HSaRwUot33xbDjF1oN9BLwOLTewoOI0jothIltZRe9uJCHf8gg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.33.1", - "@typescript-eslint/type-utils": "5.33.1", - "@typescript-eslint/utils": "5.33.1", + "@typescript-eslint/scope-manager": "5.35.1", + "@typescript-eslint/type-utils": "5.35.1", + "@typescript-eslint/utils": "5.35.1", "debug": "^4.3.4", "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", @@ -385,14 +414,14 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.33.1.tgz", - "integrity": "sha512-IgLLtW7FOzoDlmaMoXdxG8HOCByTBXrB1V2ZQYSEV1ggMmJfAkMWTwUjjzagS6OkfpySyhKFkBw7A9jYmcHpZA==", + "version": "5.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.35.1.tgz", + "integrity": "sha512-XL2TBTSrh3yWAsMYpKseBYTVpvudNf69rPOWXWVBI08My2JVT5jR66eTt4IgQFHA/giiKJW5dUD4x/ZviCKyGg==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.33.1", - "@typescript-eslint/types": "5.33.1", - "@typescript-eslint/typescript-estree": "5.33.1", + "@typescript-eslint/scope-manager": "5.35.1", + "@typescript-eslint/types": "5.35.1", + "@typescript-eslint/typescript-estree": "5.35.1", "debug": "^4.3.4" }, "engines": { @@ -412,13 +441,13 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.33.1.tgz", - "integrity": "sha512-8ibcZSqy4c5m69QpzJn8XQq9NnqAToC8OdH/W6IXPXv83vRyEDPYLdjAlUx8h/rbusq6MkW4YdQzURGOqsn3CA==", + "version": "5.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.35.1.tgz", + "integrity": "sha512-kCYRSAzIW9ByEIzmzGHE50NGAvAP3wFTaZevgWva7GpquDyFPFcmvVkFJGWJJktg/hLwmys/FZwqM9EKr2u24Q==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.33.1", - "@typescript-eslint/visitor-keys": "5.33.1" + "@typescript-eslint/types": "5.35.1", + "@typescript-eslint/visitor-keys": "5.35.1" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -429,12 +458,12 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.33.1.tgz", - "integrity": "sha512-X3pGsJsD8OiqhNa5fim41YtlnyiWMF/eKsEZGsHID2HcDqeSC5yr/uLOeph8rNF2/utwuI0IQoAK3fpoxcLl2g==", + "version": "5.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.35.1.tgz", + "integrity": "sha512-8xT8ljvo43Mp7BiTn1vxLXkjpw8wS4oAc00hMSB4L1/jIiYbjjnc3Qp2GAUOG/v8zsNCd1qwcqfCQ0BuishHkw==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "5.33.1", + "@typescript-eslint/utils": "5.35.1", "debug": "^4.3.4", "tsutils": "^3.21.0" }, @@ -455,9 +484,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz", - "integrity": "sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ==", + "version": "5.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.35.1.tgz", + "integrity": "sha512-FDaujtsH07VHzG0gQ6NDkVVhi1+rhq0qEvzHdJAQjysN+LHDCKDKCBRlZFFE0ec0jKxiv0hN63SNfExy0KrbQQ==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" @@ -468,13 +497,13 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.1.tgz", - "integrity": "sha512-JOAzJ4pJ+tHzA2pgsWQi4804XisPHOtbvwUyqsuuq8+y5B5GMZs7lI1xDWs6V2d7gE/Ez5bTGojSK12+IIPtXA==", + "version": "5.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.35.1.tgz", + "integrity": "sha512-JUqE1+VRTGyoXlDWWjm6MdfpBYVq+hixytrv1oyjYIBEOZhBCwtpp5ZSvBt4wIA1MKWlnaC2UXl2XmYGC3BoQA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.33.1", - "@typescript-eslint/visitor-keys": "5.33.1", + "@typescript-eslint/types": "5.35.1", + "@typescript-eslint/visitor-keys": "5.35.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -495,15 +524,15 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.33.1.tgz", - "integrity": "sha512-uphZjkMaZ4fE8CR4dU7BquOV6u0doeQAr8n6cQenl/poMaIyJtBu8eys5uk6u5HiDH01Mj5lzbJ5SfeDz7oqMQ==", + "version": "5.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.35.1.tgz", + "integrity": "sha512-v6F8JNXgeBWI4pzZn36hT2HXXzoBBBJuOYvoQiaQaEEjdi5STzux3Yj8v7ODIpx36i/5s8TdzuQ54TPc5AITQQ==", "dev": true, "dependencies": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.33.1", - "@typescript-eslint/types": "5.33.1", - "@typescript-eslint/typescript-estree": "5.33.1", + "@typescript-eslint/scope-manager": "5.35.1", + "@typescript-eslint/types": "5.35.1", + "@typescript-eslint/typescript-estree": "5.35.1", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" }, @@ -519,12 +548,12 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.1.tgz", - "integrity": "sha512-nwIxOK8Z2MPWltLKMLOEZwmfBZReqUdbEoHQXeCpa+sRVARe5twpJGHCB4dk9903Yaf0nMAlGbQfaAH92F60eg==", + "version": "5.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.35.1.tgz", + "integrity": "sha512-cEB1DvBVo1bxbW/S5axbGPE6b7FIMAbo3w+AGq6zNDA7+NYJOIkKj/sInfTv4edxd4PxJSgdN4t6/pbvgA+n5g==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.33.1", + "@typescript-eslint/types": "5.35.1", "eslint-visitor-keys": "^3.3.0" }, "engines": { @@ -584,6 +613,38 @@ "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, + "node_modules/acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "dependencies": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + } + }, + "node_modules/acorn-node/node_modules/acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true, + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true, + "engines": { + "node": ">=0.4.0" + } + }, "node_modules/agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -668,6 +729,12 @@ "node": ">=10" } }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, "node_modules/argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -689,6 +756,39 @@ "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==", "dev": true }, + "node_modules/autoprefixer": { + "version": "10.4.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.8.tgz", + "integrity": "sha512-75Jr6Q/XpTqEf6D2ltS5uMewJIx5irCU1oBYJrWjFenq/m12WRRrz6g15L1EIoYvPLXTbEry7rDOwrcYNj77xw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + } + ], + "dependencies": { + "browserslist": "^4.21.3", + "caniuse-lite": "^1.0.30001373", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -735,6 +835,34 @@ "node": ">=8" } }, + "node_modules/browserslist": { + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, "node_modules/buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -753,6 +881,31 @@ "node": ">=6" } }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001383", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001383.tgz", + "integrity": "sha512-swMpEoTp5vDoGBZsYZX7L7nXHe6dsHxi9o6/LKf/f0LukVtnrxly5GVb/fWdCDTqi/yw6Km6tiJ0pmBacm0gbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + } + ] + }, "node_modules/chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -879,6 +1032,18 @@ "node": ">= 8" } }, + "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/data-uri-to-buffer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", @@ -920,6 +1085,12 @@ "node": ">=0.10.0" } }, + "node_modules/defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==", + "dev": true + }, "node_modules/delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -944,12 +1115,35 @@ "node": ">=8" } }, + "node_modules/detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dev": true, + "dependencies": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + }, + "bin": { + "detective": "bin/detective.js" + }, + "engines": { + "node": ">=0.8.0" + } + }, "node_modules/devalue": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/devalue/-/devalue-2.0.1.tgz", "integrity": "sha512-I2TiqT5iWBEyB8GRfTDP0hiLZ0YeDJZ+upDxjBfOC2lebO5LezQMv7QvIUTzdb64jQyAKLf1AHADtGN+jw6v8Q==", "dev": true }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, "node_modules/dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -962,6 +1156,12 @@ "node": ">=8" } }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, "node_modules/doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -974,6 +1174,12 @@ "node": ">=6.0.0" } }, + "node_modules/electron-to-chromium": { + "version": "1.4.233", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.233.tgz", + "integrity": "sha512-ejwIKXTg1wqbmkcRJh9Ur3hFGHFDZDw1POzdsVrB2WZjgRuRMHIQQKNpe64N/qh3ZtH2otEoRoS+s6arAAuAAw==", + "dev": true + }, "node_modules/emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -1342,6 +1548,15 @@ "node": ">=12" } }, + "node_modules/escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -1355,14 +1570,15 @@ } }, "node_modules/eslint": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz", - "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==", + "version": "8.23.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.0.tgz", + "integrity": "sha512-pBG/XOn0MsJcKcTRLr27S5HpzQo4kLr+HjLQIyK4EiCsijDl/TB+h5uEuJU6bQ8Edvwz1XWOjpaP2qgnXGpTcA==", "dev": true, "dependencies": { - "@eslint/eslintrc": "^1.3.0", + "@eslint/eslintrc": "^1.3.1", "@humanwhocodes/config-array": "^0.10.4", "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@humanwhocodes/module-importer": "^1.0.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -1372,7 +1588,7 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.3", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -1397,8 +1613,7 @@ "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" @@ -1504,9 +1719,9 @@ } }, "node_modules/espree": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", - "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", + "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", "dev": true, "dependencies": { "acorn": "^8.8.0", @@ -1741,6 +1956,19 @@ "node": ">=12.20.0" } }, + "node_modules/fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://www.patreon.com/infusion" + } + }, "node_modules/fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -2110,6 +2338,15 @@ "node": ">= 0.8.0" } }, + "node_modules/lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "dev": true, + "engines": { + "node": ">=10" + } + }, "node_modules/locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -2143,6 +2380,14 @@ "node": ">=10" } }, + "node_modules/luxon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.0.1.tgz", + "integrity": "sha512-hF3kv0e5gwHQZKz4wtm4c+inDtyc7elkanAsBq+fundaCdUBNJB1dHEGUZIM6SfSBUlbVFduPwEtNjFK8wLtcw==", + "engines": { + "node": ">=12" + } + }, "node_modules/magic-string": { "version": "0.26.2", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz", @@ -2367,6 +2612,12 @@ "node-gyp-build-test": "build-test.js" } }, + "node_modules/node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, "node_modules/nopt": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", @@ -2391,6 +2642,15 @@ "node": ">=0.10.0" } }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/npmlog": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", @@ -2412,6 +2672,15 @@ "node": ">=0.10.0" } }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -2540,6 +2809,15 @@ "url": "https://github.com/sponsors/jonschlinkert" } }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/postcss": { "version": "8.4.16", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", @@ -2564,6 +2842,109 @@ "node": "^10 || ^12 || >=14" } }, + "node_modules/postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=10.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, + "node_modules/postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "dependencies": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + }, + "engines": { + "node": ">= 10" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-nested": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.6" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.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/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, "node_modules/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -2627,6 +3008,27 @@ } ] }, + "node_modules/quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, "node_modules/readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -3142,6 +3544,46 @@ "sourcemap-codec": "^1.4.8" } }, + "node_modules/tailwindcss": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.8.tgz", + "integrity": "sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==", + "dev": true, + "dependencies": { + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.1", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.6", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.14", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "5.0.6", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.1" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "postcss": "^8.0.9" + } + }, "node_modules/tar": { "version": "6.1.11", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", @@ -3266,9 +3708,9 @@ } }, "node_modules/typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", + "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==", "dev": true, "bin": { "tsc": "bin/tsc", @@ -3279,14 +3721,40 @@ } }, "node_modules/undici": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.9.1.tgz", - "integrity": "sha512-6fB3a+SNnWEm4CJbgo0/CWR8RGcOCQP68SF4X0mxtYTq2VNN8T88NYrWVBAeSX+zb7bny2dx2iYhP3XHi00omg==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.10.0.tgz", + "integrity": "sha512-c8HsD3IbwmjjbLvoZuRI26TZic+TSEe8FPMLLOkN1AfYRhdjnKBU6yL+IwcSCbdZiX4e5t0lfMDLDCqj4Sq70g==", "dev": true, "engines": { "node": ">=12.18" } }, + "node_modules/update-browserslist-db": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", + "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "browserslist-lint": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, "node_modules/uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -3302,12 +3770,6 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "node_modules/vite": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/vite/-/vite-3.0.9.tgz", @@ -3426,12 +3888,30 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "node_modules/xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "dev": true, + "engines": { + "node": ">=0.4" + } + }, "node_modules/yallist": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "node_modules/yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, "node_modules/yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", @@ -3460,14 +3940,14 @@ "optional": true }, "@eslint/eslintrc": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.0.tgz", - "integrity": "sha512-UWW0TMTmk2d7hLcWD1/e2g5HDM/HQ3csaLSqXCfqwh4uNDuNqlaKWXmEsL4Cs41Z0KnILNvwbHAah3C2yt06kw==", + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-1.3.1.tgz", + "integrity": "sha512-OhSY22oQQdw3zgPOOwdoj01l/Dzl1Z+xyUP33tkSN+aqyEhymJCcPHyXt+ylW8FSe0TfRC2VG+ROQOapD0aZSQ==", "dev": true, "requires": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.3.2", + "espree": "^9.4.0", "globals": "^13.15.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", @@ -3493,6 +3973,12 @@ "integrity": "sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==", "dev": true }, + "@humanwhocodes/module-importer": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/module-importer/-/module-importer-1.0.1.tgz", + "integrity": "sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==", + "dev": true + }, "@humanwhocodes/object-schema": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-1.2.1.tgz", @@ -3598,20 +4084,20 @@ } }, "@sveltejs/adapter-auto": { - "version": "1.0.0-next.65", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-1.0.0-next.65.tgz", - "integrity": "sha512-wYEcOeuCrswcmeOdmbaq+WxTp7vWN1fG1yPvmdzqe2LoUchOw6FQb6X/fR8miX6L8MXQXJteA0ntqE3FKqaBsw==", + "version": "1.0.0-next.66", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-auto/-/adapter-auto-1.0.0-next.66.tgz", + "integrity": "sha512-p78AQaSDHkLS5EFGqCF2xrLHMjKxx6wTLUvnP26cu2llh/VV4NihQ0rheVNgPWL+tGZpVznhrUG8fWmJxPciug==", "dev": true, "requires": { - "@sveltejs/adapter-cloudflare": "1.0.0-next.31", - "@sveltejs/adapter-netlify": "1.0.0-next.71", - "@sveltejs/adapter-vercel": "1.0.0-next.67" + "@sveltejs/adapter-cloudflare": "1.0.0-next.32", + "@sveltejs/adapter-netlify": "1.0.0-next.72", + "@sveltejs/adapter-vercel": "1.0.0-next.68" } }, "@sveltejs/adapter-cloudflare": { - "version": "1.0.0-next.31", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-cloudflare/-/adapter-cloudflare-1.0.0-next.31.tgz", - "integrity": "sha512-HhEFZP72GJ8AZGgFECKIiayDcLaAWi65pI0AnBfiNhCifYSlH/mPNWNVD4AWRDnXnH6XU+FLwhGDnIDwytTyYg==", + "version": "1.0.0-next.32", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-cloudflare/-/adapter-cloudflare-1.0.0-next.32.tgz", + "integrity": "sha512-tzkUsdQlBk9xUjcGUOBYos4HKaeaXvz9v4TQ1QS2yIHEtL5xvMEDPZ94/DB2gPL4LZCnYbdY2lsy5HCsoN0hkQ==", "dev": true, "requires": { "@cloudflare/workers-types": "^3.14.0", @@ -3620,9 +4106,9 @@ } }, "@sveltejs/adapter-netlify": { - "version": "1.0.0-next.71", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-netlify/-/adapter-netlify-1.0.0-next.71.tgz", - "integrity": "sha512-la1CGtWO1xul1L3zEoFAoc4EX2uxZjrZcOMS3tkKB8drxhbQsNbnTE6fmSSMFiZXhxaikczrBgQwqIaDkLTmZg==", + "version": "1.0.0-next.72", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-netlify/-/adapter-netlify-1.0.0-next.72.tgz", + "integrity": "sha512-g570hYAMkgrJfo/TRg3DZFmlR7bNFHECFPOMgc8R+f28ROap/nXA8ICbiSBF7+zJ5JXvJbqHGjERSsyhEq+59g==", "dev": true, "requires": { "@iarna/toml": "^2.2.5", @@ -3632,9 +4118,9 @@ } }, "@sveltejs/adapter-vercel": { - "version": "1.0.0-next.67", - "resolved": "https://registry.npmjs.org/@sveltejs/adapter-vercel/-/adapter-vercel-1.0.0-next.67.tgz", - "integrity": "sha512-xg85d/vlivbTaZu70zmaPNkrY1YZhDrcxljuwVWO0LCzA4DACIA7CnXI9klUiXM5SPpsB8BhY6dS8sW5cDYWzw==", + "version": "1.0.0-next.68", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-vercel/-/adapter-vercel-1.0.0-next.68.tgz", + "integrity": "sha512-ImM+fDwGkVaf920Wzh284nfAfu/WoPXCpMwog0kveIODVgCozbpJY55fO860LccqdS0YDyeFqOUrZJCqcYNx4w==", "dev": true, "requires": { "@vercel/nft": "^0.21.0", @@ -3642,9 +4128,9 @@ } }, "@sveltejs/kit": { - "version": "1.0.0-next.428", - "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.428.tgz", - "integrity": "sha512-CVp7zltQ+3VOII1s7KuvgvGEFwD0PSqts9R3q4eaj0CNoC3gpdzcbEZayyQwXX/3lI1HdSNSF8gxbX0TRUoFuA==", + "version": "1.0.0-next.444", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-1.0.0-next.444.tgz", + "integrity": "sha512-B9ekUK5r/3IODxyXjAmEWFC1ytxRlsnApgF8qV/2IJWvWXvj62PjB8qK7UBvMM9A1codfx94RMvj9r6wTKRIAA==", "dev": true, "requires": { "@sveltejs/vite-plugin-svelte": "^1.0.1", @@ -3681,10 +4167,16 @@ "integrity": "sha512-wOuvG1SN4Us4rez+tylwwwCV1psiNVOkJeM3AUWUNWg/jDQY2+HE/444y5gc+jBmRqASOm2Oeh5c1axHobwRKQ==", "dev": true }, + "@types/luxon": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/luxon/-/luxon-3.0.0.tgz", + "integrity": "sha512-Lx+EZoJxUKw4dp8uei9XiUVNlgkYmax5+ovqt6Xf3LzJOnWhlfJw/jLBmqfGVwOP/pDr4HT8bI1WtxK0IChMLw==", + "dev": true + }, "@types/node": { - "version": "18.7.8", - "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.8.tgz", - "integrity": "sha512-/YP55EMK2341JkODUb8DM9O0x1SIz2aBvyF33Uf1c76St3VpsMXEIW0nxuKkq/5cxnbz0RD9cfwNZHEAZQD3ag==", + "version": "18.7.13", + "resolved": "https://registry.npmjs.org/@types/node/-/node-18.7.13.tgz", + "integrity": "sha512-46yIhxSe5xEaJZXWdIBP7GU4HDTG8/eo0qd9atdiL+lFpA03y8KS+lkTN834TWJj5767GbWv4n/P6efyTFt1Dw==", "dev": true }, "@types/pug": { @@ -3703,14 +4195,14 @@ } }, "@typescript-eslint/eslint-plugin": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.33.1.tgz", - "integrity": "sha512-S1iZIxrTvKkU3+m63YUOxYPKaP+yWDQrdhxTglVDVEVBf+aCSw85+BmJnyUaQQsk5TXFG/LpBu9fa+LrAQ91fQ==", + "version": "5.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.35.1.tgz", + "integrity": "sha512-RBZZXZlI4XCY4Wzgy64vB+0slT9+yAPQRjj/HSaRwUot33xbDjF1oN9BLwOLTewoOI0jothIltZRe9uJCHf8gg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.33.1", - "@typescript-eslint/type-utils": "5.33.1", - "@typescript-eslint/utils": "5.33.1", + "@typescript-eslint/scope-manager": "5.35.1", + "@typescript-eslint/type-utils": "5.35.1", + "@typescript-eslint/utils": "5.35.1", "debug": "^4.3.4", "functional-red-black-tree": "^1.0.1", "ignore": "^5.2.0", @@ -3720,52 +4212,52 @@ } }, "@typescript-eslint/parser": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.33.1.tgz", - "integrity": "sha512-IgLLtW7FOzoDlmaMoXdxG8HOCByTBXrB1V2ZQYSEV1ggMmJfAkMWTwUjjzagS6OkfpySyhKFkBw7A9jYmcHpZA==", + "version": "5.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.35.1.tgz", + "integrity": "sha512-XL2TBTSrh3yWAsMYpKseBYTVpvudNf69rPOWXWVBI08My2JVT5jR66eTt4IgQFHA/giiKJW5dUD4x/ZviCKyGg==", "dev": true, "requires": { - "@typescript-eslint/scope-manager": "5.33.1", - "@typescript-eslint/types": "5.33.1", - "@typescript-eslint/typescript-estree": "5.33.1", + "@typescript-eslint/scope-manager": "5.35.1", + "@typescript-eslint/types": "5.35.1", + "@typescript-eslint/typescript-estree": "5.35.1", "debug": "^4.3.4" } }, "@typescript-eslint/scope-manager": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.33.1.tgz", - "integrity": "sha512-8ibcZSqy4c5m69QpzJn8XQq9NnqAToC8OdH/W6IXPXv83vRyEDPYLdjAlUx8h/rbusq6MkW4YdQzURGOqsn3CA==", + "version": "5.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.35.1.tgz", + "integrity": "sha512-kCYRSAzIW9ByEIzmzGHE50NGAvAP3wFTaZevgWva7GpquDyFPFcmvVkFJGWJJktg/hLwmys/FZwqM9EKr2u24Q==", "dev": true, "requires": { - "@typescript-eslint/types": "5.33.1", - "@typescript-eslint/visitor-keys": "5.33.1" + "@typescript-eslint/types": "5.35.1", + "@typescript-eslint/visitor-keys": "5.35.1" } }, "@typescript-eslint/type-utils": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.33.1.tgz", - "integrity": "sha512-X3pGsJsD8OiqhNa5fim41YtlnyiWMF/eKsEZGsHID2HcDqeSC5yr/uLOeph8rNF2/utwuI0IQoAK3fpoxcLl2g==", + "version": "5.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.35.1.tgz", + "integrity": "sha512-8xT8ljvo43Mp7BiTn1vxLXkjpw8wS4oAc00hMSB4L1/jIiYbjjnc3Qp2GAUOG/v8zsNCd1qwcqfCQ0BuishHkw==", "dev": true, "requires": { - "@typescript-eslint/utils": "5.33.1", + "@typescript-eslint/utils": "5.35.1", "debug": "^4.3.4", "tsutils": "^3.21.0" } }, "@typescript-eslint/types": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.33.1.tgz", - "integrity": "sha512-7K6MoQPQh6WVEkMrMW5QOA5FO+BOwzHSNd0j3+BlBwd6vtzfZceJ8xJ7Um2XDi/O3umS8/qDX6jdy2i7CijkwQ==", + "version": "5.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.35.1.tgz", + "integrity": "sha512-FDaujtsH07VHzG0gQ6NDkVVhi1+rhq0qEvzHdJAQjysN+LHDCKDKCBRlZFFE0ec0jKxiv0hN63SNfExy0KrbQQ==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.33.1.tgz", - "integrity": "sha512-JOAzJ4pJ+tHzA2pgsWQi4804XisPHOtbvwUyqsuuq8+y5B5GMZs7lI1xDWs6V2d7gE/Ez5bTGojSK12+IIPtXA==", + "version": "5.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.35.1.tgz", + "integrity": "sha512-JUqE1+VRTGyoXlDWWjm6MdfpBYVq+hixytrv1oyjYIBEOZhBCwtpp5ZSvBt4wIA1MKWlnaC2UXl2XmYGC3BoQA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.33.1", - "@typescript-eslint/visitor-keys": "5.33.1", + "@typescript-eslint/types": "5.35.1", + "@typescript-eslint/visitor-keys": "5.35.1", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", @@ -3774,26 +4266,26 @@ } }, "@typescript-eslint/utils": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.33.1.tgz", - "integrity": "sha512-uphZjkMaZ4fE8CR4dU7BquOV6u0doeQAr8n6cQenl/poMaIyJtBu8eys5uk6u5HiDH01Mj5lzbJ5SfeDz7oqMQ==", + "version": "5.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.35.1.tgz", + "integrity": "sha512-v6F8JNXgeBWI4pzZn36hT2HXXzoBBBJuOYvoQiaQaEEjdi5STzux3Yj8v7ODIpx36i/5s8TdzuQ54TPc5AITQQ==", "dev": true, "requires": { "@types/json-schema": "^7.0.9", - "@typescript-eslint/scope-manager": "5.33.1", - "@typescript-eslint/types": "5.33.1", - "@typescript-eslint/typescript-estree": "5.33.1", + "@typescript-eslint/scope-manager": "5.35.1", + "@typescript-eslint/types": "5.35.1", + "@typescript-eslint/typescript-estree": "5.35.1", "eslint-scope": "^5.1.1", "eslint-utils": "^3.0.0" } }, "@typescript-eslint/visitor-keys": { - "version": "5.33.1", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.33.1.tgz", - "integrity": "sha512-nwIxOK8Z2MPWltLKMLOEZwmfBZReqUdbEoHQXeCpa+sRVARe5twpJGHCB4dk9903Yaf0nMAlGbQfaAH92F60eg==", + "version": "5.35.1", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.35.1.tgz", + "integrity": "sha512-cEB1DvBVo1bxbW/S5axbGPE6b7FIMAbo3w+AGq6zNDA7+NYJOIkKj/sInfTv4edxd4PxJSgdN4t6/pbvgA+n5g==", "dev": true, "requires": { - "@typescript-eslint/types": "5.33.1", + "@typescript-eslint/types": "5.35.1", "eslint-visitor-keys": "^3.3.0" } }, @@ -3835,6 +4327,31 @@ "dev": true, "requires": {} }, + "acorn-node": { + "version": "1.8.2", + "resolved": "https://registry.npmjs.org/acorn-node/-/acorn-node-1.8.2.tgz", + "integrity": "sha512-8mt+fslDufLYntIoPAaIMUe/lrbrehIiwmR3t2k9LljIzoigEPF27eLk2hy8zSGzmR/ogr7zbRKINMo1u0yh5A==", + "dev": true, + "requires": { + "acorn": "^7.0.0", + "acorn-walk": "^7.0.0", + "xtend": "^4.0.2" + }, + "dependencies": { + "acorn": { + "version": "7.4.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-7.4.1.tgz", + "integrity": "sha512-nQyp0o1/mNdbTO1PO6kHkwSrmgZ0MT/jCCpNiwbUjGoRN4dlBhqJtoQuCnEOKzgTVwg0ZWiCoQy6SxMebQVh8A==", + "dev": true + } + } + }, + "acorn-walk": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/acorn-walk/-/acorn-walk-7.2.0.tgz", + "integrity": "sha512-OPdCF6GsMIP+Az+aWfAAOEt2/+iVDKE7oy6lJ098aoe59oAmK76qV6Gw60SbZ8jHuG2wH058GF4pLFbYamYrVA==", + "dev": true + }, "agent-base": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", @@ -3897,6 +4414,12 @@ "readable-stream": "^3.6.0" } }, + "arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, "argparse": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/argparse/-/argparse-2.0.1.tgz", @@ -3915,6 +4438,20 @@ "integrity": "sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==", "dev": true }, + "autoprefixer": { + "version": "10.4.8", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.8.tgz", + "integrity": "sha512-75Jr6Q/XpTqEf6D2ltS5uMewJIx5irCU1oBYJrWjFenq/m12WRRrz6g15L1EIoYvPLXTbEry7rDOwrcYNj77xw==", + "dev": true, + "requires": { + "browserslist": "^4.21.3", + "caniuse-lite": "^1.0.30001373", + "fraction.js": "^4.2.0", + "normalize-range": "^0.1.2", + "picocolors": "^1.0.0", + "postcss-value-parser": "^4.2.0" + } + }, "balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -3955,6 +4492,18 @@ "fill-range": "^7.0.1" } }, + "browserslist": { + "version": "4.21.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.3.tgz", + "integrity": "sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==", + "dev": true, + "requires": { + "caniuse-lite": "^1.0.30001370", + "electron-to-chromium": "^1.4.202", + "node-releases": "^2.0.6", + "update-browserslist-db": "^1.0.5" + } + }, "buffer-crc32": { "version": "0.2.13", "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", @@ -3967,6 +4516,18 @@ "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, + "camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true + }, + "caniuse-lite": { + "version": "1.0.30001383", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001383.tgz", + "integrity": "sha512-swMpEoTp5vDoGBZsYZX7L7nXHe6dsHxi9o6/LKf/f0LukVtnrxly5GVb/fWdCDTqi/yw6Km6tiJ0pmBacm0gbg==", + "dev": true + }, "chalk": { "version": "4.1.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", @@ -4060,6 +4621,12 @@ "which": "^2.0.1" } }, + "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 + }, "data-uri-to-buffer": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/data-uri-to-buffer/-/data-uri-to-buffer-4.0.0.tgz", @@ -4087,6 +4654,12 @@ "integrity": "sha512-FJ3UgI4gIl+PHZm53knsuSFpE+nESMr7M4v9QcgB7S63Kj/6WqMiFQJpBBYz1Pt+66bZpP3Q7Lye0Oo9MPKEdg==", "dev": true }, + "defined": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/defined/-/defined-1.0.0.tgz", + "integrity": "sha512-Y2caI5+ZwS5c3RiNDJ6u53VhQHv+hHKwhkI1iHvceKUHw9Df6EK2zRLfjejRgMuCuxK7PfSWIMwWecceVvThjQ==", + "dev": true + }, "delegates": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delegates/-/delegates-1.0.0.tgz", @@ -4105,12 +4678,29 @@ "integrity": "sha512-463v3ZeIrcWtdgIg6vI6XUncguvr2TnGl4SzDXinkt9mSLpBJKXT3mW6xT3VQdDN11+WVs29pgvivTc4Lp8v+w==", "dev": true }, + "detective": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/detective/-/detective-5.2.1.tgz", + "integrity": "sha512-v9XE1zRnz1wRtgurGu0Bs8uHKFSTdteYZNbIPFVhUZ39L/S79ppMpdmVOZAnoz1jfEFodc48n6MX483Xo3t1yw==", + "dev": true, + "requires": { + "acorn-node": "^1.8.2", + "defined": "^1.0.0", + "minimist": "^1.2.6" + } + }, "devalue": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/devalue/-/devalue-2.0.1.tgz", "integrity": "sha512-I2TiqT5iWBEyB8GRfTDP0hiLZ0YeDJZ+upDxjBfOC2lebO5LezQMv7QvIUTzdb64jQyAKLf1AHADtGN+jw6v8Q==", "dev": true }, + "didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, "dir-glob": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", @@ -4120,6 +4710,12 @@ "path-type": "^4.0.0" } }, + "dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, "doctrine": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", @@ -4129,6 +4725,12 @@ "esutils": "^2.0.2" } }, + "electron-to-chromium": { + "version": "1.4.233", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.233.tgz", + "integrity": "sha512-ejwIKXTg1wqbmkcRJh9Ur3hFGHFDZDw1POzdsVrB2WZjgRuRMHIQQKNpe64N/qh3ZtH2otEoRoS+s6arAAuAAw==", + "dev": true + }, "emoji-regex": { "version": "8.0.0", "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", @@ -4310,6 +4912,12 @@ "dev": true, "optional": true }, + "escalade": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", + "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "dev": true + }, "escape-string-regexp": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", @@ -4317,14 +4925,15 @@ "dev": true }, "eslint": { - "version": "8.22.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.22.0.tgz", - "integrity": "sha512-ci4t0sz6vSRKdmkOGmprBo6fmI4PrphDFMy5JEq/fNS0gQkJM3rLmrqcp8ipMcdobH3KtUP40KniAE9W19S4wA==", + "version": "8.23.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.23.0.tgz", + "integrity": "sha512-pBG/XOn0MsJcKcTRLr27S5HpzQo4kLr+HjLQIyK4EiCsijDl/TB+h5uEuJU6bQ8Edvwz1XWOjpaP2qgnXGpTcA==", "dev": true, "requires": { - "@eslint/eslintrc": "^1.3.0", + "@eslint/eslintrc": "^1.3.1", "@humanwhocodes/config-array": "^0.10.4", "@humanwhocodes/gitignore-to-minimatch": "^1.0.2", + "@humanwhocodes/module-importer": "^1.0.1", "ajv": "^6.10.0", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", @@ -4334,7 +4943,7 @@ "eslint-scope": "^7.1.1", "eslint-utils": "^3.0.0", "eslint-visitor-keys": "^3.3.0", - "espree": "^9.3.3", + "espree": "^9.4.0", "esquery": "^1.4.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -4359,8 +4968,7 @@ "regexpp": "^3.2.0", "strip-ansi": "^6.0.1", "strip-json-comments": "^3.1.0", - "text-table": "^0.2.0", - "v8-compile-cache": "^2.0.3" + "text-table": "^0.2.0" }, "dependencies": { "eslint-scope": { @@ -4429,9 +5037,9 @@ "dev": true }, "espree": { - "version": "9.3.3", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.3.3.tgz", - "integrity": "sha512-ORs1Rt/uQTqUKjDdGCyrtYxbazf5umATSf/K4qxjmZHORR6HJk+2s/2Pqe+Kk49HHINC/xNIrGfgh8sZcll0ng==", + "version": "9.4.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.4.0.tgz", + "integrity": "sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==", "dev": true, "requires": { "acorn": "^8.8.0", @@ -4611,6 +5219,12 @@ "fetch-blob": "^3.1.2" } }, + "fraction.js": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.2.0.tgz", + "integrity": "sha512-MhLuK+2gUcnZe8ZHlaaINnQLl0xRIGRfcGk2yl8xoQAfHrSsL3rYu6FCmBdkdbhc9EPlwyGHewaRsvwRMJtAlA==", + "dev": true + }, "fs-minipass": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/fs-minipass/-/fs-minipass-2.1.0.tgz", @@ -4897,6 +5511,12 @@ "type-check": "~0.4.0" } }, + "lilconfig": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.0.6.tgz", + "integrity": "sha512-9JROoBW7pobfsx+Sq2JsASvCo6Pfo6WWoUW79HuB1BCoBXD4PLWJPqDF6fNj67pqBYTbAHkE57M1kS/+L1neOg==", + "dev": true + }, "locate-path": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", @@ -4921,6 +5541,11 @@ "yallist": "^4.0.0" } }, + "luxon": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/luxon/-/luxon-3.0.1.tgz", + "integrity": "sha512-hF3kv0e5gwHQZKz4wtm4c+inDtyc7elkanAsBq+fundaCdUBNJB1dHEGUZIM6SfSBUlbVFduPwEtNjFK8wLtcw==" + }, "magic-string": { "version": "0.26.2", "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.2.tgz", @@ -5071,6 +5696,12 @@ "integrity": "sha512-2iGbaQBV+ITgCz76ZEjmhUKAKVf7xfY1sRl4UiKQspfZMH2h06SyhNsnSVy50cwkFQDGLyif6m/6uFXHkOZ6rg==", "dev": true }, + "node-releases": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.6.tgz", + "integrity": "sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==", + "dev": true + }, "nopt": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-5.0.0.tgz", @@ -5086,6 +5717,12 @@ "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", "dev": true }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, "npmlog": { "version": "5.0.1", "resolved": "https://registry.npmjs.org/npmlog/-/npmlog-5.0.1.tgz", @@ -5104,6 +5741,12 @@ "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", "dev": true }, + "object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true + }, "once": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", @@ -5196,6 +5839,12 @@ "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", "dev": true }, + "pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true + }, "postcss": { "version": "8.4.16", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.16.tgz", @@ -5207,6 +5856,61 @@ "source-map-js": "^1.0.2" } }, + "postcss-import": { + "version": "14.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-14.1.0.tgz", + "integrity": "sha512-flwI+Vgm4SElObFVPpTIT7SU7R3qk2L7PyduMcokiaVKuWv9d/U+Gm/QAd8NDLuykTWTkcrjOeD2Pp1rMeBTGw==", + "dev": true, + "requires": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + } + }, + "postcss-js": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.0.tgz", + "integrity": "sha512-77QESFBwgX4irogGVPgQ5s07vLvFqWr228qZY+w6lW599cRlK/HmnlivnnVUxkjHnCu4J16PDMHcH+e+2HbvTQ==", + "dev": true, + "requires": { + "camelcase-css": "^2.0.1" + } + }, + "postcss-load-config": { + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-3.1.4.tgz", + "integrity": "sha512-6DiM4E7v4coTE4uzA8U//WhtPwyhiim3eyjEMFCnUpzbrkK9wJHgKDT2mR+HbtSrd/NubVaYTOpSpjUl8NQeRg==", + "dev": true, + "requires": { + "lilconfig": "^2.0.5", + "yaml": "^1.10.2" + } + }, + "postcss-nested": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-5.0.6.tgz", + "integrity": "sha512-rKqm2Fk0KbA8Vt3AdGN0FB9OBOMDVajMG6ZCf/GoHgdxUJ4sBFp0A/uMIRm+MJUdo33YXEtjqIz8u7DAp8B7DA==", + "dev": true, + "requires": { + "postcss-selector-parser": "^6.0.6" + } + }, + "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" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, "prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -5238,6 +5942,21 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, + "quick-lru": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", + "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", + "dev": true + }, + "read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "requires": { + "pify": "^2.3.0" + } + }, "readable-stream": { "version": "3.6.0", "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", @@ -5571,6 +6290,36 @@ } } }, + "tailwindcss": { + "version": "3.1.8", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.1.8.tgz", + "integrity": "sha512-YSneUCZSFDYMwk+TGq8qYFdCA3yfBRdBlS7txSq0LUmzyeqRe3a8fBQzbz9M3WS/iFT4BNf/nmw9mEzrnSaC0g==", + "dev": true, + "requires": { + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "color-name": "^1.1.4", + "detective": "^5.2.1", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.2.11", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "lilconfig": "^2.0.6", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.14", + "postcss-import": "^14.1.0", + "postcss-js": "^4.0.0", + "postcss-load-config": "^3.1.4", + "postcss-nested": "5.0.6", + "postcss-selector-parser": "^6.0.10", + "postcss-value-parser": "^4.2.0", + "quick-lru": "^5.1.1", + "resolve": "^1.22.1" + } + }, "tar": { "version": "6.1.11", "resolved": "https://registry.npmjs.org/tar/-/tar-6.1.11.tgz", @@ -5669,17 +6418,27 @@ "dev": true }, "typescript": { - "version": "4.7.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", - "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "version": "4.8.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.8.2.tgz", + "integrity": "sha512-C0I1UsrrDHo2fYI5oaCGbSejwX4ch+9Y5jTQELvovfmFkK3HHSZJB8MSJcWLmCUBzQBchCrZ9rMRV6GuNrvGtw==", "dev": true }, "undici": { - "version": "5.9.1", - "resolved": "https://registry.npmjs.org/undici/-/undici-5.9.1.tgz", - "integrity": "sha512-6fB3a+SNnWEm4CJbgo0/CWR8RGcOCQP68SF4X0mxtYTq2VNN8T88NYrWVBAeSX+zb7bny2dx2iYhP3XHi00omg==", + "version": "5.10.0", + "resolved": "https://registry.npmjs.org/undici/-/undici-5.10.0.tgz", + "integrity": "sha512-c8HsD3IbwmjjbLvoZuRI26TZic+TSEe8FPMLLOkN1AfYRhdjnKBU6yL+IwcSCbdZiX4e5t0lfMDLDCqj4Sq70g==", "dev": true }, + "update-browserslist-db": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.5.tgz", + "integrity": "sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==", + "dev": true, + "requires": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + } + }, "uri-js": { "version": "4.4.1", "resolved": "https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz", @@ -5695,12 +6454,6 @@ "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", "dev": true }, - "v8-compile-cache": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-2.3.0.tgz", - "integrity": "sha512-l8lCEmLcLYZh4nbunNZvQCJc5pv7+RCwa8q/LdUx8u7lsWvPDKmpodJAJNwkAhJC//dFY48KuIEmjtd4RViDrA==", - "dev": true - }, "vite": { "version": "3.0.9", "resolved": "https://registry.npmjs.org/vite/-/vite-3.0.9.tgz", @@ -5776,12 +6529,24 @@ "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", "dev": true }, + "xtend": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", + "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", + "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 }, + "yaml": { + "version": "1.10.2", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-1.10.2.tgz", + "integrity": "sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==", + "dev": true + }, "yocto-queue": { "version": "0.1.0", "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", diff --git a/package.json b/package.json index e471da4..506121f 100644 --- a/package.json +++ b/package.json @@ -14,19 +14,26 @@ "devDependencies": { "@sveltejs/adapter-auto": "next", "@sveltejs/kit": "next", + "@types/luxon": "^3.0.0", "@typescript-eslint/eslint-plugin": "^5.27.0", "@typescript-eslint/parser": "^5.27.0", + "autoprefixer": "^10.4.8", "eslint": "^8.16.0", "eslint-config-prettier": "^8.3.0", "eslint-plugin-svelte3": "^4.0.0", + "postcss": "^8.4.16", "prettier": "^2.6.2", "prettier-plugin-svelte": "^2.7.0", "svelte": "^3.44.0", "svelte-check": "^2.7.1", - "svelte-preprocess": "^4.10.6", + "svelte-preprocess": "^4.10.7", + "tailwindcss": "^3.1.8", "tslib": "^2.3.1", "typescript": "^4.7.4", "vite": "^3.0.4" }, - "type": "module" + "type": "module", + "dependencies": { + "luxon": "^3.0.1" + } } diff --git a/postcss.config.cjs b/postcss.config.cjs new file mode 100644 index 0000000..33ad091 --- /dev/null +++ b/postcss.config.cjs @@ -0,0 +1,6 @@ +module.exports = { + plugins: { + tailwindcss: {}, + autoprefixer: {}, + }, +} diff --git a/src/app.css b/src/app.css new file mode 100644 index 0000000..bd6213e --- /dev/null +++ b/src/app.css @@ -0,0 +1,3 @@ +@tailwind base; +@tailwind components; +@tailwind utilities; \ No newline at end of file diff --git a/src/app.html b/src/app.html index 5b53ef7..23baacf 100644 --- a/src/app.html +++ b/src/app.html @@ -2,11 +2,14 @@ - - + + + + + %sveltekit.head% - +
%sveltekit.body%
diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte new file mode 100644 index 0000000..2e511e0 --- /dev/null +++ b/src/routes/+layout.svelte @@ -0,0 +1,5 @@ + + + diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 5982b0a..765bacd 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,2 +1,105 @@ -

Welcome to SvelteKit

-

Visit kit.svelte.dev to read the documentation

+ + + + CRAN sub tracker + + +
+
+ CRAN submission tracker +
+ +
+ + + + +
+ + {#await subrepo_filtered} +

Fetching snapshot...

+ {:then subrepo} + {#each subrepo.queues as queue} +
+
{queue.info.name}
+
{queue.queue.length} packages
+
+

{queue.info.description}

+
+ {#each queue.queue as sub, idx_sub} + {#if expand.indexOf(queue) !== -1 || idx_sub < 5 || idx_sub > queue.queue.length - 6} + +
#{idx_sub + 1}
+
+ {sub.pkg_name} +
+
{sub.pkg_version}
+
{iso2ago(sub.file_time)}
+
+ {:else if idx_sub == 5} +
+
Show {queue.queue.length - 10} more...
+
+ {/if} + {/each} +
+ {:else} +

No submissions match the search query.

+ {/each} + +
+ About this page + + Updated {iso2ago(subrepo.capture_time)} in {subrepo.capture_duration / 1000} seconds. Updating + every {subrepo.update_interval / 60} minutes. +
+ {:catch error} +

{error.message}

+ {/await} +
diff --git a/src/routes/about/+page.svelte b/src/routes/about/+page.svelte new file mode 100644 index 0000000..d3d4de0 --- /dev/null +++ b/src/routes/about/+page.svelte @@ -0,0 +1,72 @@ + + CRAN sub tracker: About + + +
+
+ CRAN submission tracker +
+

Please report issues with this site via the GitHub issue tracker or contact me directly.

+

About

+ +

Alternatives

+ + +

References

+ + + +
diff --git a/src/routes/pkg/+page.svelte b/src/routes/pkg/+page.svelte new file mode 100644 index 0000000..d95cb3f --- /dev/null +++ b/src/routes/pkg/+page.svelte @@ -0,0 +1,113 @@ + + + + CRAN sub tracker + + +
+
+ CRAN submission tracker +
+ + {#await pkg} +

Fetching snapshot...

+ {:then pkg} + {#if pkg} +

+ {pkg[0].pkg_name} + {pkg[0].pkg_version} +

+ +
+
+

Submitted

+

{iso2ago(pkg[0].file_time)}

+

Oldest: {iso2ago(pkg[1].queue[0].file_time)}

+
+
+

Status

+

{pkg[1].info.name}

+

+ #{pkg[1].queue.indexOf(pkg[0]) + 1} of {pkg[1].queue.length} +

+
+
+

Size

+ {humanRedableMemoryUnits(pkg[0].file_bytes)} +

.tar.gz

+
+
+ +
+ {pkg[1].info.longdescription} + + ({pkg[1].info.reference_label}) + +
+ +

Track this submission:

+ +

Track the newest submission with this name:

+ + +
+ {#if pkg[0].folder !== 'newbies'} +

+ Find on CRAN (previous version) +

+ {/if} +

+ Find on CRAN_incoming +

+
+ +
+ Updated {iso2ago(pkg[0].request_time)}. + About this page +
+ {:else} + Package does not exist (anymore?) + {/if} + {:catch error} +

{error.message}

+ {/await} + + +
diff --git a/src/server_data.ts b/src/server_data.ts new file mode 100644 index 0000000..8fb64a0 --- /dev/null +++ b/src/server_data.ts @@ -0,0 +1,212 @@ + +// https://journal.r-project.org/archive/2018-1/cran.pdf + +import { DateTime } from "luxon"; + +// https://stat.ethz.ch/pipermail/r-package-devel/2019q1/003631.html +export const CRAN_QUEUES: { [qid: string]: CranQueueInfo } = { + newbies: { + order: 0, + name: 'Newbies', + description: 'First time submission.', + longdescription: 'This is a new package. New packages are queued ' + + 'for manual first time inspection.', + reference: 'https://journal.r-project.org/archive/2018-1/cran.pdf', + reference_label: 'Learn more: Hornik, K., Ligges, U., & Zeileis, A. (2018). Changes on CRAN. 2018-07-01 to 2018-12-31. The R Journal, 10(2), 1-3.', + }, + inspect: { + order: 1, + name: 'Inspect', + description: 'Manual inspection.', + longdescription: + '"Manual inspection of the package, this always happens for first time ' + + 'submissions and also for packages that show possible problems that are likely to be ' + + 'false positives. In both cases some human action is required."', + reference: 'https://journal.r-project.org/archive/2018-1/cran.pdf', + reference_label: 'Hornik, K., Ligges, U., & Zeileis, A. (2018). Changes on CRAN. 2018-07-01 to 2018-12-31. The R Journal, 10(2), 1-3.', + }, + pretest: { + order: 2, + name: 'Pretest', + description: 'Automated checking.', + longdescription: '"During a manual inspection, a human may trigger a new auto-check of ' + + 'the package for various reasons, e.g., after problems in the initial check or after updates of ' + + 'dependencies."', + reference: 'https://journal.r-project.org/archive/2018-1/cran.pdf', + reference_label: 'Hornik, K., Ligges, U., & Zeileis, A. (2018). Changes on CRAN. 2018-07-01 to 2018-12-31. The R Journal, 10(2), 1-3.', + }, + recheck: { + order: 3, + name: 'Recheck', + description: 'Reverse dependency checking.', + longdescription: '"If the package cleanly passes the checks and has at least one reverse dependency, ' + + 'this action moves the package into a queue for auto-checking the package\'s reverse ' + + 'dependencies. If the check status of at least one of the package\'s reverse dependencies ' + + 'changes to a worse state, the maintainer is asked whether this is expected and the ' + + 'other maintainers of affected packages have been informed and hence action pending ' + + 'is triggered. If no change to a worse state is discovered, the next action is publish."', + reference: 'https://journal.r-project.org/archive/2018-1/cran.pdf', + reference_label: 'Hornik, K., Ligges, U., & Zeileis, A. (2018). Changes on CRAN. 2018-07-01 to 2018-12-31. The R Journal, 10(2), 1-3.', + }, + pending: { + order: 4, + name: 'Pending', + description: 'Closer manual inspection.', + longdescription: '"A CRAN team member has to do a closer inspection and needs more time."', + reference: 'https://stat.ethz.ch/pipermail/r-package-devel/2019q1/003631.html', + reference_label: '[R-pkg-devel] Meaning and consequences of action pending in the submission pipeline', + }, + waiting: { + order: 5, + name: 'Waiting', + description: 'Waiting for maintainer response.', + longdescription: + '"CRAN\'s decision is waiting for a response from the package maintainer, e.g. when issues are present that CRAN cannot check for in the incoming checks."', + reference: 'https://journal.r-project.org/archive/2018-1/cran.pdf', + reference_label: 'Hornik, K., Ligges, U., & Zeileis, A. (2018). Changes on CRAN. 2018-07-01 to 2018-12-31. The R Journal, 10(2), 1-3.', + }, + publish: { + order: 6, + name: 'Publish', + description: 'Awaiting publication.', + longdescription: '"Publish the package, if the package is already well established on CRAN, passes ' + + 'the checks cleanly, and does not have any reverse dependencies."', + reference: 'https://journal.r-project.org/archive/2018-1/cran.pdf', + reference_label: 'Hornik, K., Ligges, U., & Zeileis, A. (2018). Changes on CRAN. 2018-07-01 to 2018-12-31. The R Journal, 10(2), 1-3.', + }, + archive: { + order: 7, + name: 'Archive', + description: 'Rejected packages.', + longdescription: + '"This package was rejected. The package does not ' + + 'pass the checks cleanly and the problem are not likely to be false positives."', + reference: 'https://journal.r-project.org/archive/2018-1/cran.pdf', + reference_label: 'Hornik, K., Ligges, U., & Zeileis, A. (2018). Changes on CRAN. 2018-07-01 to 2018-12-31. The R Journal, 10(2), 1-3.', + }, + other: { + order: 999, + name: 'Other', + description: 'Other inspection.', + longdescription: + 'Your package has been assigned to a specific CRAN member for further inspection.', + reference: 'https://journal.r-project.org/archive/2018-1/cran.pdf', + reference_label: 'Learn more: Hornik, K., Ligges, U., & Zeileis, A. (2018). Changes on CRAN. 2018-07-01 to 2018-12-31. The R Journal, 10(2), 1-3.', + } +}; + +export function find_key(folder: string) { + if (CRAN_QUEUES[folder] === undefined) { + return 'other'; + } + return folder; +} + +export function find_queue(folder: string) { + return CRAN_QUEUES[find_key(folder)]; +} + +export async function getSnap() { + let response = await fetch('https://cransubs.fly.dev/snap'); + return (await response.json()) as Promise; +} + +export class SubmissionRepo { + public queues: CranQueue[] = []; + + public update_interval: number = 0; + public capture_duration: number = 0; + public capture_time: string = ''; + + constructor(snapContainer?: SnapshotContainer, subRepo?: SubmissionRepo) { + if (snapContainer) { + this.update_interval = snapContainer.update_interval; + this.capture_duration = snapContainer.snapshot.capture_duration; + this.capture_time = snapContainer.snapshot.capture_time; + + + let dict: { [folder: string]: Submission[] } = {}; + snapContainer.snapshot.submissions.forEach((sub) => { + const folder_key = find_key(sub.folder); + if (dict[folder_key] === undefined) { + dict[folder_key] = []; + } + dict[folder_key].push(sub); + }); + + this.queues = Object.keys(dict).map((folder) => ({ + info: find_queue(folder), + queue: dict[folder] + })); + + this.sort_queues(); + } else if (subRepo) { + this.update_interval = subRepo.update_interval; + this.capture_duration = subRepo.capture_duration; + this.capture_time = subRepo.capture_time; + } + } + + private sort_queues() { + this.queues.sort((sub_a, sub_b) => { + const a = sub_a.info.order; + const b = sub_b.info.order; + return a < b ? -1 : a > b ? 1 : 0; + }); + + for (const qu of this.queues) { + qu.queue.sort((sub_a, sub_b) => { + const a = DateTime.fromISO(sub_a.file_time); + const b = DateTime.fromISO(sub_b.file_time); + return a < b ? -1 : a > b ? 1 : 0; + }); + } + } + + public find_pkg(name: string, file_time?: string): [Submission, CranQueue] | undefined { + if (file_time === undefined) { + let pot_subs: [Submission, CranQueue][] = []; + for (const qu of this.queues) { + for (const sub of qu.queue) { + if ((sub.pkg_name === name)) { + pot_subs.push([sub, qu]); + } + } + } + return pot_subs.sort((sub_a, sub_b) => { + const a = DateTime.fromISO(sub_a[0].file_time); + const b = DateTime.fromISO(sub_b[0].file_time); + return a > b ? -1 : a < b ? 1 : 0; + }).at(0); + } else { + for (const qu of this.queues) { + for (const sub of qu.queue) { + if ((sub.pkg_name === name) && (sub.file_time === file_time)) { + return [sub, qu]; + } + } + } + } + return undefined; + } + + public filter(str: string): SubmissionRepo { + + const re = new SubmissionRepo(undefined, this); + + const str_lower = str.toLowerCase(); + re.queues = this.queues.map((qu) => ({ + info: qu.info, + queue: qu.queue.filter((sub) => sub.pkg_name.toLowerCase().search(str_lower) > -1) + })).filter((qu) => qu.queue.length > 0); + return re; + } +} + +export function pkg_url_full(sub: Submission) { + return '/pkg#' + encodeURIComponent(sub.pkg_name + '_' + sub.file_time); +} + +export function pkg_url_name(sub: Submission) { + return '/pkg#' + encodeURIComponent(sub.pkg_name); +} diff --git a/src/stores.ts b/src/stores.ts new file mode 100644 index 0000000..53fecb3 --- /dev/null +++ b/src/stores.ts @@ -0,0 +1,19 @@ +import { derived, writable } from 'svelte/store'; +import {getSnap, SubmissionRepo} from './server_data'; + +const UPDATE_INTERVAL = 1000 * (60 * 5 + 1); + +export const snapshot = writable(getSnap(), function start(set) { + const interval = setInterval(() => { + set(getSnap()); + }, UPDATE_INTERVAL); + + return function stop() { + clearInterval(interval); + }; +}); + +export const subrepo = derived( + snapshot, + $snapshot => $snapshot.then((snap) => new SubmissionRepo(snap)) +); \ No newline at end of file diff --git a/src/types.d.ts b/src/types.d.ts new file mode 100644 index 0000000..97b025d --- /dev/null +++ b/src/types.d.ts @@ -0,0 +1,30 @@ +interface CranQueueInfo { + order: number; + name: string; + description: string; + longdescription: string; + reference: string; + reference_label: string; +} +interface Submission { + file_bytes: number; + //file_name: string; + file_time: string; + folder: string; + pkg_name: string; + pkg_version: string; + request_time: string; +} +interface Snapshot { + capture_duration: number; + capture_time: string; + submissions: Submission[]; +} +interface SnapshotContainer { + update_interval: number; + snapshot: Snapshot; +} +interface CranQueue { + info: CranQueueInfo; + queue: Submission[]; +} \ No newline at end of file diff --git a/src/utils.ts b/src/utils.ts new file mode 100644 index 0000000..dfd8357 --- /dev/null +++ b/src/utils.ts @@ -0,0 +1,22 @@ +import { DateTime } from "luxon"; + +export function humanRedableMemoryUnits(bytes: number) { + const units = ['kB', 'MB', 'GB', 'TB']; + let size = bytes; + let i = 0; + for (; i < units.length - 1; i++) { + size /= 1024; + if (size <= 1024) { + break; + } + } + return Math.max(size, 0.1).toFixed(1) + ' ' + units[i]; +} + +export function iso2locale(iso: string) { + return DateTime.fromISO(iso).toLocaleString(DateTime.DATETIME_FULL); +} + +export function iso2ago(iso: string) { + return DateTime.fromISO(iso).toRelative(); +} diff --git a/static/about.txt b/static/about.txt new file mode 100644 index 0000000..177de89 --- /dev/null +++ b/static/about.txt @@ -0,0 +1,6 @@ +This favicon was generated using the following font: + +- Font Title: Roboto +- Font Author: Copyright 2011 Google Inc. All Rights Reserved. +- Font Source: http://fonts.gstatic.com/s/roboto/v30/KFOlCnqEu92Fr1MmWUlvAx05IsDqlA.ttf +- Font License: Apache License, version 2.0 (http://www.apache.org/licenses/LICENSE-2.0.html)) diff --git a/static/android-chrome-192x192.png b/static/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..81d6def81d951444414ff7611655ec9d49694390 GIT binary patch literal 7292 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 literal 0 HcmV?d00001 diff --git a/static/android-chrome-512x512.png b/static/android-chrome-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..5842c6e635bba6551c050f294d1b21b82069619b GIT binary patch literal 21115 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 Kc~*O{QvL-38qp*G literal 0 HcmV?d00001 diff --git a/static/apple-touch-icon.png b/static/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..085b531e1372320525e4f3f35e333a9ccfc3b003 GIT binary patch literal 6553 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 LNkvXXu0mjfV$Ey| literal 0 HcmV?d00001 diff --git a/static/favicon-16x16.png b/static/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..d637635363503be0f75ddc045884923fc50db3e2 GIT binary patch literal 523 zcmV+m0`&cfP)Px$#Ysd#R5(v#WC&eV$H2f)&A`CG#y}eQ#lXPO%E%D9>L(eRVOISD8So#Q#q2Ch z3|g{$3@l7c4A-7~V)**=4_5bKH6X@To?&950fP_^#8=;b{$Xfee}kcA-E|B@FbvR> z=Vv(A>B?~V(MN`+HP;w^{{G95>88TqV=T!KKlK#DqJs}n48brU*HeXIQlcS4aL+M@ zb*G+!74vYgFnm}Lz_9be3kL6wBlr#QG>~A}R%Oeu_wp--@!#mD>D;Amb)^;gaiYI z`TOrPBuzhq-+-+ZHVhsH5)8u08yP-){S8*k#K^$#ZAmc0sXK2O?CKBTHz3kRj$v7z zIm5wguNfw6yUpPx&nMp)JR9HvVmupB-o6z?En1U z_kAw!O92Huq)2i=;RrwnVor?e0SzUpTZ<{ARGk1t70pT9UxUze9)%q@djN>%1prhJ z0ifq6_*B&Y6JW8=LabZni(p>?TzC}phH*519E7@k$l=X&Xa}N}c%gK!6!MiKP!#oB zuyUjre5Y7PGVuDbau@(#6UF?cqZqOmEOa+=lc5wm-7kl7MX*>jcS0=cH zrqS5a50&mKCQKHDiael@1;R_<#=>P)s8MpK%`Pk_0Odg$(&b@{*rdq<#i^&LSNF{l z_ZRZ-8Yi9aJm zN=}yDfDZkrRpG6&K)Ab1RY+U65!x=J^8l%vLvZl1Cjg>K>i_(KXzY&*ft4P_lp{&d zq8cqUod(VzoB^g4Nej+OT+Y(8^E8I6=_ZeYB;@#kwV|65~=;7THVJlq-o zk~{B^Rq@t2fZgkZaU)|bE3zrS5l^&wtD<~29tN*&XD4Q1wFdb&Tb%Tm@{Mv&HtMfO8e(CPkufrvzlB_N;SY6q^g1@V;l*o~vVhV9in= z(Nv}73MqX75$h_cUoOfWRSb&g^^%1@Z30MTan+uF%llag(jOT3w z%tgcz`zruP0@(BYCjjR0X@=f^;Bm@4&m(g{QAg+Sk=hHIK96c`@eh~IV7_zKIIjQz N002ovPDHLkV1ixP#{B>Q literal 0 HcmV?d00001 diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..29f15a9cf0d256c5146424795989334c164e2250 GIT binary patch literal 15406 zcmeHOc~De!9Di!1U1l?OTQN=dVfIJoR8!M6*-Tk^K%QkLR%WF&nnz`sSyNhRqn2i; z!Ez`dh#~LU#pAn`p&3O!4b?vW%ZDCqR>n=h86)%aupl5{ioVGxEm{hn`jTlffR z9$zhdk&72#+=Z2C>C%k|KASeZH-xs#zMs}l94PlUbkAG$CN-ZtN^c0A^)dof__=@YURDNvDz}{0V?PI&GoecwxMb-#f4sN0KOOP+q7K3 zK#tno+bD0j27lU`Pto6N=NN*O z`HKkYOPk)mi;`yEO;KaccLb}u24q|g?w+hc0c&?taN#BPnIOI%;S2kdUi(OrdWQ{{ z=CCYP4&-s9CwIP8fu@SKJ2*Us@q^r2o_(ovE$x8)y?)}Ql>Wsq%3t#i?fiWv<^K2v zrGEM(VL$Tb98UV+UaHKC7yFp938^01Tbihp_vrN#FX?tZ{$4vP>s%zE=9-Ve7)7HvL@HMdspQE1b#m9@51b@ls#H9FSYF>0{l# zM)@fEbFPd|;0_gn0B9m3_g}=V%722@759h3-j`lW% zmiocc)=J)>4I3SHE_HOM$tlm!!GZL(wDFx=yIpSVBh`h83N85oYwhs%7}~yk60PGo z;ORWlg9m zzUW!2vrXp3-o1453UYQ%8KtZ4mpJ_ns>n!BqLn7_b06oqmPm*qgWHD~Vh{ ztxffY_|@yw+E_=qD<}JO3{1giQNb_M?Xm>Dws0=E@klAv^L(n?U%>Yg{#_<=eE6#DSD5au;v&B!^#P98*%6SN~j&JnShtqY%_{i#3O_{)$9 zzOm7qttawCzSNKQCVa>1)LM_wIeb^dsvY5v8h4@KRV)0-!@CXTiyh%M@(rLg9m+1ldvZ_U{EIqo0XdK>j}0B<677bneOeXp8hFqp9PY@0 zSc^8+i`ZlM2-o(&=K3Qx{3DO%4o|MY#7w$^N+LhCx?GBhah^q+&wwBpQ;e-Ey!g6r zM9A5qz5@HIw$<)VC*&@C&66Q|taI2!2h;!LIw7u)(Zuk~0}fu+z@@7&DuH%U)pc!i=HF+-RcH^a?5OE=crtBtA zBX8cZ?_<8G8_rYgmC@rb(&YiMp3Pie+gP(-4Jzz8)z1)9y@T!L+hW%jF^Vu|BhuE7C zFR4FNB4Q{fEB8>-u|phpFxzy;i#@Sli5P_*EpNStzba}-H1@n*ChfdzZ#C1wZDC5B z#an#p;l(_{xYzRk3Aoy@e-@kOQ}oLh>#i3)y50JoZ3*~&xg5X6{~W-^bkty9l&7pA ztOwXo-O7uHJ{j!cl#d=|y?#s;nc-AZoXYB8?MZq$!;8!R zE9J|1-IMDDoaq6)X9n>6$`Cnt&cz3y3}(5GgKKt{q9!7MWH1Y!xo!qED5&Fz7%A#! aPz%wM*8_OV=;T%K4*t)yGa7JL1OEc-eHk_Y literal 0 HcmV?d00001 diff --git a/static/favicon.png b/static/favicon.png deleted file mode 100644 index 825b9e65af7c104cfb07089bb28659393b4f2097..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1571 zcmV+;2Hg3HP)Px)-AP12RCwC$UE6KzI1p6{F2N z1VK2vi|pOpn{~#djwYcWXTI_im_u^TJgMZ4JMOsSj!0ma>B?-(Hr@X&W@|R-$}W@Z zgj#$x=!~7LGqHW?IO8+*oE1MyDp!G=L0#^lUx?;!fXv@l^6SvTnf^ac{5OurzC#ZMYc20lI%HhX816AYVs1T3heS1*WaWH z%;x>)-J}YB5#CLzU@GBR6sXYrD>Vw(Fmt#|JP;+}<#6b63Ike{Fuo!?M{yEffez;| zp!PfsuaC)>h>-AdbnwN13g*1LowNjT5?+lFVd#9$!8Z9HA|$*6dQ8EHLu}U|obW6f z2%uGv?vr=KNq7YYa2Roj;|zooo<)lf=&2yxM@e`kM$CmCR#x>gI>I|*Ubr({5Y^rb zghxQU22N}F51}^yfDSt786oMTc!W&V;d?76)9KXX1 z+6Okem(d}YXmmOiZq$!IPk5t8nnS{%?+vDFz3BevmFNgpIod~R{>@#@5x9zJKEHLHv!gHeK~n)Ld!M8DB|Kfe%~123&Hz1Z(86nU7*G5chmyDe ziV7$pB7pJ=96hpxHv9rCR29%bLOXlKU<_13_M8x)6;P8E1Kz6G<&P?$P^%c!M5`2` zfY2zg;VK5~^>TJGQzc+33-n~gKt{{of8GzUkWmU110IgI0DLxRIM>0US|TsM=L|@F z0Bun8U!cRB7-2apz=y-7*UxOxz@Z0)@QM)9wSGki1AZ38ceG7Q72z5`i;i=J`ILzL z@iUO?SBBG-0cQuo+an4TsLy-g-x;8P4UVwk|D8{W@U1Zi z!M)+jqy@nQ$p?5tsHp-6J304Q={v-B>66$P0IDx&YT(`IcZ~bZfmn11#rXd7<5s}y zBi9eim&zQc0Dk|2>$bs0PnLmDfMP5lcXRY&cvJ=zKxI^f0%-d$tD!`LBf9^jMSYUA zI8U?CWdY@}cRq6{5~y+)#h1!*-HcGW@+gZ4B};0OnC~`xQOyH19z*TA!!BJ%9s0V3F?CAJ{hTd#*tf+ur-W9MOURF-@B77_-OshsY}6 zOXRY=5%C^*26z?l)1=$bz30!so5tfABdSYzO+H=CpV~aaUefmjvfZ3Ttu9W&W3Iu6 zROlh0MFA5h;my}8lB0tAV-Rvc2Zs_CCSJnx@d`**$idgy-iMob4dJWWw|21b4NB=LfsYp0Aeh{Ov)yztQi;eL4y5 zMi>8^SzKqk8~k?UiQK^^-5d8c%bV?$F8%X~czyiaKCI2=UH