From 076ceda42f170635cea9f5852586f1b0a5b058e6 Mon Sep 17 00:00:00 2001 From: Craig Kaiser Date: Mon, 14 Oct 2024 20:43:41 -0400 Subject: [PATCH] generate assets --- package-lock.json | 560 ++++++++++++++++++++++++++++ package.json | 4 +- static/apple-touch-icon-180x180.png | Bin 0 -> 2541 bytes static/favicon.ico | Bin 0 -> 1145 bytes static/manifest.json | 19 +- static/maskable-icon-512x512.png | Bin 0 -> 7463 bytes static/pwa-192x192.png | Bin 0 -> 3191 bytes static/pwa-512x512.png | Bin 0 -> 8271 bytes static/pwa-64x64.png | Bin 0 -> 1088 bytes 9 files changed, 580 insertions(+), 3 deletions(-) create mode 100644 static/apple-touch-icon-180x180.png create mode 100644 static/favicon.ico create mode 100644 static/maskable-icon-512x512.png create mode 100644 static/pwa-192x192.png create mode 100644 static/pwa-512x512.png create mode 100644 static/pwa-64x64.png diff --git a/package-lock.json b/package-lock.json index b49ea46..1eb3171 100644 --- a/package-lock.json +++ b/package-lock.json @@ -33,6 +33,7 @@ "@typescript-eslint/eslint-plugin": "^8.8.1", "@typescript-eslint/parser": "^8.8.1", "@vercel/analytics": "^1.3.1", + "@vite-pwa/assets-generator": "^0.2.6", "autoprefixer": "^10.4.20", "bits-ui": "^0.21.16", "class-variance-authority": "^0.7.0", @@ -107,6 +108,15 @@ "node": ">=6.0.0" } }, + "node_modules/@antfu/utils": { + "version": "0.7.10", + "resolved": "https://registry.npmjs.org/@antfu/utils/-/utils-0.7.10.tgz", + "integrity": "sha512-+562v9k4aI80m1+VuMHehNJWLOFjBnXn3tdOitzD0il5b7smkSBal4+a3oKiQTbrwMmN/TBUMDvbdoWDehgOww==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/@apideck/better-ajv-errors": { "version": "0.3.6", "resolved": "https://registry.npmjs.org/@apideck/better-ajv-errors/-/better-ajv-errors-0.3.6.tgz", @@ -1917,6 +1927,12 @@ "node": ">=6.9.0" } }, + "node_modules/@canvas/image-data": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/@canvas/image-data/-/image-data-1.0.0.tgz", + "integrity": "sha512-BxOqI5LgsIQP1odU5KMwV9yoijleOPzHL18/YvNqF9KFSGF2K/DLlYAbDQsWqd/1nbaFuSkYD/191dpMtNh4vw==", + "dev": true + }, "node_modules/@esbuild/aix-ppc64": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.21.5.tgz", @@ -4799,6 +4815,29 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/@vite-pwa/assets-generator": { + "version": "0.2.6", + "resolved": "https://registry.npmjs.org/@vite-pwa/assets-generator/-/assets-generator-0.2.6.tgz", + "integrity": "sha512-kK44dXltvoubEo5B+6tCGjUrOWOE1+dA4DForbFpO1rKy2wSkAVGrs8tyfN6DzTig89/QKyV8XYodgmaKyrYng==", + "dev": true, + "dependencies": { + "cac": "^6.7.14", + "colorette": "^2.0.20", + "consola": "^3.2.3", + "sharp": "^0.32.6", + "sharp-ico": "^0.1.5", + "unconfig": "^0.3.11" + }, + "bin": { + "pwa-assets-generator": "bin/pwa-assets-generator.mjs" + }, + "engines": { + "node": ">=16.14.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/@vitest/expect": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-2.1.3.tgz", @@ -5251,6 +5290,12 @@ "dequal": "^2.0.3" } }, + "node_modules/b4a": { + "version": "1.6.7", + "resolved": "https://registry.npmjs.org/b4a/-/b4a-1.6.7.tgz", + "integrity": "sha512-OnAYlL5b7LEkALw87fUVafQw5rVR9RjwGd4KUwNQ6DrrNmaVaUCgLipfVlzrPQ4tWOR9P0IXGNOx50jYCCdSJg==", + "dev": true + }, "node_modules/babel-plugin-istanbul": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/babel-plugin-istanbul/-/babel-plugin-istanbul-6.1.1.tgz", @@ -5347,6 +5392,53 @@ "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", "dev": true }, + "node_modules/bare-events": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/bare-events/-/bare-events-2.5.0.tgz", + "integrity": "sha512-/E8dDe9dsbLyh2qrZ64PEPadOQ0F4gbl1sUJOrmph7xOiIxfY8vwab/4bFLh4Y88/Hk/ujKcrQKc+ps0mv873A==", + "dev": true, + "optional": true + }, + "node_modules/bare-fs": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/bare-fs/-/bare-fs-2.3.5.tgz", + "integrity": "sha512-SlE9eTxifPDJrT6YgemQ1WGFleevzwY+XAP1Xqgl56HtcrisC2CHCZ2tq6dBpcH2TnNxwUEUGhweo+lrQtYuiw==", + "dev": true, + "optional": true, + "dependencies": { + "bare-events": "^2.0.0", + "bare-path": "^2.0.0", + "bare-stream": "^2.0.0" + } + }, + "node_modules/bare-os": { + "version": "2.4.4", + "resolved": "https://registry.npmjs.org/bare-os/-/bare-os-2.4.4.tgz", + "integrity": "sha512-z3UiI2yi1mK0sXeRdc4O1Kk8aOa/e+FNWZcTiPB/dfTWyLypuE99LibgRaQki914Jq//yAWylcAt+mknKdixRQ==", + "dev": true, + "optional": true + }, + "node_modules/bare-path": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/bare-path/-/bare-path-2.1.3.tgz", + "integrity": "sha512-lh/eITfU8hrj9Ru5quUp0Io1kJWIk1bTjzo7JH1P5dWmQ2EL4hFUlfI8FonAhSlgIfhn63p84CDY/x+PisgcXA==", + "dev": true, + "optional": true, + "dependencies": { + "bare-os": "^2.1.0" + } + }, + "node_modules/bare-stream": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/bare-stream/-/bare-stream-2.3.0.tgz", + "integrity": "sha512-pVRWciewGUeCyKEuRxwv06M079r+fRjAQjBEK2P6OYGrO43O+Z0LrPZZEjlc4mB6C2RpZ9AxJ1s7NLEtOHO6eA==", + "dev": true, + "optional": true, + "dependencies": { + "b4a": "^1.6.6", + "streamx": "^2.20.0" + } + }, "node_modules/base64-js": { "version": "1.5.1", "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", @@ -5798,6 +5890,19 @@ "node": ">=6" } }, + "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", @@ -5816,6 +5921,16 @@ "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/color-support": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/color-support/-/color-support-1.1.3.tgz", @@ -5825,6 +5940,12 @@ "color-support": "bin.js" } }, + "node_modules/colorette": { + "version": "2.0.20", + "resolved": "https://registry.npmjs.org/colorette/-/colorette-2.0.20.tgz", + "integrity": "sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==", + "dev": true + }, "node_modules/combined-stream": { "version": "1.0.8", "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", @@ -5861,6 +5982,15 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/consola": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/consola/-/consola-3.2.3.tgz", + "integrity": "sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==", + "dev": true, + "engines": { + "node": "^14.18.0 || >=16.10.0" + } + }, "node_modules/console-control-strings": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", @@ -6072,6 +6202,48 @@ "integrity": "sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==", "dev": true }, + "node_modules/decode-bmp": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/decode-bmp/-/decode-bmp-0.2.1.tgz", + "integrity": "sha512-NiOaGe+GN0KJqi2STf24hfMkFitDUaIoUU3eKvP/wAbLe8o6FuW5n/x7MHPR0HKvBokp6MQY/j7w8lewEeVCIA==", + "dev": true, + "dependencies": { + "@canvas/image-data": "^1.0.0", + "to-data-view": "^1.1.0" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/decode-ico": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/decode-ico/-/decode-ico-0.4.1.tgz", + "integrity": "sha512-69NZfbKIzux1vBOd31al3XnMnH+2mqDhEgLdpygErm4d60N+UwA5Sq5WFjmEDQzumgB9fElojGwWG0vybVfFmA==", + "dev": true, + "dependencies": { + "@canvas/image-data": "^1.0.0", + "decode-bmp": "^0.2.0", + "to-data-view": "^1.1.0" + }, + "engines": { + "node": ">=8.6" + } + }, + "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" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/deep-eql": { "version": "5.0.2", "resolved": "https://registry.npmjs.org/deep-eql/-/deep-eql-5.0.2.tgz", @@ -6081,6 +6253,15 @@ "node": ">=6" } }, + "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/deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -6142,6 +6323,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/defu": { + "version": "6.1.4", + "resolved": "https://registry.npmjs.org/defu/-/defu-6.1.4.tgz", + "integrity": "sha512-mEQCMmwJu317oSz8CwdIOdwf3xMif1ttiM8LTufzc3g6kR+9Pe236twL8j3IYT1F7GfRgGcW6MWxzZjLIkuHIg==", + "dev": true + }, "node_modules/delayed-stream": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", @@ -6244,6 +6431,15 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "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", @@ -6822,6 +7018,15 @@ "node": ">=0.10.0" } }, + "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/expect": { "version": "29.7.0", "resolved": "https://registry.npmjs.org/expect/-/expect-29.7.0.tgz", @@ -6909,6 +7114,12 @@ "integrity": "sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==", "dev": true }, + "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.3.2", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", @@ -7208,6 +7419,12 @@ } } }, + "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-extra": { "version": "9.1.0", "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-9.1.0.tgz", @@ -7390,6 +7607,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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/glob": { "version": "7.2.3", "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", @@ -7675,6 +7898,12 @@ "node": ">=0.4" } }, + "node_modules/ico-endec": { + "version": "0.1.6", + "resolved": "https://registry.npmjs.org/ico-endec/-/ico-endec-0.1.6.tgz", + "integrity": "sha512-ZdLU38ZoED3g1j3iEyzcQj+wAkY2xfWNkymszfJPoxucIUhK7NayQ+/C4Kv0nDFMIsbtbEHldv3V8PU494/ueQ==", + "dev": true + }, "node_modules/iconv-lite": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz", @@ -7811,6 +8040,12 @@ "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/inquirer": { "version": "8.2.6", "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-8.2.6.tgz", @@ -7881,6 +8116,12 @@ "url": "https://github.com/sponsors/ljharb" } }, + "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-bigint": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", @@ -9167,6 +9408,18 @@ "node": ">=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/minimatch": { "version": "9.0.5", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", @@ -9182,6 +9435,15 @@ "url": "https://github.com/sponsors/isaacs" } }, + "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/minipass": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/minipass/-/minipass-5.0.0.tgz", @@ -9222,6 +9484,12 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", "dev": true }, + "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/mode-watcher": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/mode-watcher/-/mode-watcher-0.4.1.tgz", @@ -9290,6 +9558,12 @@ "node": "^18 || >=20" } }, + "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/natural-compare": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", @@ -9313,6 +9587,18 @@ "node": ">= 4.4.x" } }, + "node_modules/node-abi": { + "version": "3.69.0", + "resolved": "https://registry.npmjs.org/node-abi/-/node-abi-3.69.0.tgz", + "integrity": "sha512-H/k5/+HXto3xXTcqTIl3DAWaelvNVYSoZ2IJVDFJEoYyZYcoRhcRy+1WMMhsKAG+UU7wSCI3DRurJ0DxFMXvyg==", + "dev": true, + "dependencies": { + "semver": "^7.3.5" + }, + "engines": { + "node": ">=10" + } + }, "node_modules/node-addon-api": { "version": "7.1.1", "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", @@ -10019,6 +10305,66 @@ "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, + "node_modules/prebuild-install": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/prebuild-install/-/prebuild-install-7.1.2.tgz", + "integrity": "sha512-UnNke3IQb6sgarcZIDU3gbMeTp/9SSU1DAIkil7PrqG1vZlBtY5msYccSKSHDqa3hNg436IXK+SNImReuA1wEQ==", + "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/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/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/prelude-ls": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz", @@ -10183,6 +10529,16 @@ "dev": true, "optional": true }, + "node_modules/pump": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.2.tgz", + "integrity": "sha512-tUPXtzlGM8FE3P0ZL6DVs/3P58k9nk8/jZeQCurTJylQA8qFYzHFfhBJkuqyE0FifOsQ0uKWekiZ5g8wtr28cw==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.1.0", + "once": "^1.3.1" + } + }, "node_modules/punycode": { "version": "2.3.1", "resolved": "https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz", @@ -10221,6 +10577,12 @@ } ] }, + "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/radix-svelte": { "version": "0.9.0", "resolved": "https://registry.npmjs.org/radix-svelte/-/radix-svelte-0.9.0.tgz", @@ -10246,6 +10608,30 @@ "safe-buffer": "^5.1.0" } }, + "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/rc/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/react-is": { "version": "18.3.1", "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.3.1.tgz", @@ -10738,6 +11124,46 @@ "node": ">= 0.4" } }, + "node_modules/sharp": { + "version": "0.32.6", + "resolved": "https://registry.npmjs.org/sharp/-/sharp-0.32.6.tgz", + "integrity": "sha512-KyLTWwgcR9Oe4d9HwCwNM2l7+J0dUQwn/yf7S0EnTtb0eVS4RxO0eUSvxPtzT4F3SY+C4K6fqdv/DO27sJ/v/w==", + "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/sharp-ico": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/sharp-ico/-/sharp-ico-0.1.5.tgz", + "integrity": "sha512-a3jODQl82NPp1d5OYb0wY+oFaPk7AvyxipIowCHk7pBsZCWgbe0yAkU2OOXdoH0ENyANhyOQbs9xkAiRHcF02Q==", + "dev": true, + "dependencies": { + "decode-ico": "*", + "ico-endec": "*", + "sharp": "*" + } + }, + "node_modules/sharp/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/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -10800,6 +11226,60 @@ "integrity": "sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==", "dev": true }, + "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/sirv": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", @@ -10903,6 +11383,20 @@ "integrity": "sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==", "dev": true }, + "node_modules/streamx": { + "version": "2.20.1", + "resolved": "https://registry.npmjs.org/streamx/-/streamx-2.20.1.tgz", + "integrity": "sha512-uTa0mU6WUC65iUvzKH4X9hEdvSW7rbPxPtwfWiLMSj3qTdQbAiUboZTxauKfpFuGIGa1C2BYijZ7wgdUXICJhA==", + "dev": true, + "dependencies": { + "fast-fifo": "^1.3.2", + "queue-tick": "^1.0.1", + "text-decoder": "^1.1.0" + }, + "optionalDependencies": { + "bare-events": "^2.2.0" + } + }, "node_modules/string_decoder": { "version": "1.3.0", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", @@ -11694,6 +12188,31 @@ "node": ">=10" } }, + "node_modules/tar-fs": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/tar-fs/-/tar-fs-3.0.6.tgz", + "integrity": "sha512-iokBDQQkUyeXhgPYaZxmczGPhnhXZ0CmrqI+MOb/WFGS9DW5wnfrLgtjUJBvz50vQ3qfRwJ62QVoCFu8mPVu5w==", + "dev": true, + "dependencies": { + "pump": "^3.0.0", + "tar-stream": "^3.1.5" + }, + "optionalDependencies": { + "bare-fs": "^2.1.1", + "bare-path": "^2.1.0" + } + }, + "node_modules/tar-stream": { + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-3.1.7.tgz", + "integrity": "sha512-qJj60CXt7IU1Ffyc3NJMjh6EkuCFej46zUqJ4J7pqYlThyd9bO0XBTmcOIhSzZJVWfsLks0+nle/j538YAW9RQ==", + "dev": true, + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" + } + }, "node_modules/tar/node_modules/mkdirp": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", @@ -11811,6 +12330,15 @@ "node": "*" } }, + "node_modules/text-decoder": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/text-decoder/-/text-decoder-1.2.0.tgz", + "integrity": "sha512-n1yg1mOj9DNpk3NeZOx7T6jchTbyJS3i3cucbNN6FcdPriMZx7NsgrGpWWdWZZGxD7ES1XB+3uoqHMgOKaN+fg==", + "dev": true, + "dependencies": { + "b4a": "^1.6.4" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -11989,6 +12517,12 @@ "integrity": "sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==", "dev": true }, + "node_modules/to-data-view": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/to-data-view/-/to-data-view-1.1.0.tgz", + "integrity": "sha512-1eAdufMg6mwgmlojAx3QeMnzB/BTVp7Tbndi3U7ftcT2zCZadjxkkmLmd97zmaxWi+sgGcgWrokmpEoy0Dn0vQ==", + "dev": true + }, "node_modules/to-fast-properties": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", @@ -12170,6 +12704,18 @@ "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", "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" + }, + "engines": { + "node": "*" + } + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -12370,6 +12916,20 @@ "url": "https://github.com/sponsors/ljharb" } }, + "node_modules/unconfig": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/unconfig/-/unconfig-0.3.13.tgz", + "integrity": "sha512-N9Ph5NC4+sqtcOjPfHrRcHekBCadCXWTBzp2VYYbySOHW0PfD9XLCeXshTXjkPYwLrBr9AtSeU0CZmkYECJhng==", + "dev": true, + "dependencies": { + "@antfu/utils": "^0.7.7", + "defu": "^6.1.4", + "jiti": "^1.21.0" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" + } + }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", diff --git a/package.json b/package.json index 8cce833..3a33fa6 100644 --- a/package.json +++ b/package.json @@ -11,7 +11,8 @@ "check:watch": "svelte-kit sync && svelte-check --tsconfig ./tsconfig.json --watch", "test:unit": "vitest", "lint": "prettier --check . && eslint .", - "format": "prettier --write ." + "format": "prettier --write .", + "generate-pwa-assets": "pwa-assets-generator --preset minimal-2023 static/vball.svg" }, "devDependencies": { "@eslint/eslintrc": "^3.1.0", @@ -35,6 +36,7 @@ "@typescript-eslint/eslint-plugin": "^8.8.1", "@typescript-eslint/parser": "^8.8.1", "@vercel/analytics": "^1.3.1", + "@vite-pwa/assets-generator": "^0.2.6", "autoprefixer": "^10.4.20", "bits-ui": "^0.21.16", "class-variance-authority": "^0.7.0", diff --git a/static/apple-touch-icon-180x180.png b/static/apple-touch-icon-180x180.png new file mode 100644 index 0000000000000000000000000000000000000000..a5885b9c04add95e46ce68e276dddd00eff3e6a8 GIT binary patch literal 2541 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 D7A5Fc literal 0 HcmV?d00001 diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..11b89ff8c04f80524541b32af1e239f0673800f8 GIT binary patch literal 1145 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 literal 0 HcmV?d00001 diff --git a/static/pwa-512x512.png b/static/pwa-512x512.png new file mode 100644 index 0000000000000000000000000000000000000000..b4822ab8e1a9040190fcf5c373257cce7e49c675 GIT binary patch literal 8271 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 literal 0 HcmV?d00001 diff --git a/static/pwa-64x64.png b/static/pwa-64x64.png new file mode 100644 index 0000000000000000000000000000000000000000..81cd6b4c2342b456fdf4a2c47c0d1fcfbaad5d9b GIT binary patch literal 1088 zcmV-G1i$-kAm0000000000000000000000000000000000000004GNG3M000eiQchF<02S?8 zDzHJAblb#-{vEu#00009a7bBm000B%000B%0kwNlYXATPrb$FWRCwC8SJ{FiAqXUj zxBvgW3(^YOoor^0ewax*T3khm@cPRK{vSZV9IN->Yl|J-4*@WH*q;1)rLO^8zjkAC z^n_IC0ANu~m68G;*K<`0RcQP{?{DZv*(bH~<9xpCUovXMoTE+6Xp6 zpD*L`W&9jI0HB{H$f|L`Z7b4S07_Q8)^>=RfoxMmag;XzoW1E^g=xp>%Vj1%0(9En zuFnaoS>O8RHG<~H0MJ6eoXfhT4NCZ&HiU8m;Fp@MJp#;?F}gF0@c?jSJ*^0c1nSs$ z89HO+u)>`zf#qm4exuePE^nDfFsT^l3Yc~Xu`R!K*UOt41g=wG9vcAqN-;g9zyveC zk{30JlM)1Ix0tmGg)1*Jka{`M#05~Upvj?OK|b3pOFtxW0c2I&)^0hxcQ84@{U9!Y zBq|N$ayQE~YNwF6#yk+Vg7P*la&+Zkg~7xeZebL$3(8xqV&1CgaJZ4qj_RXLVOR+Q z5LV#0*CVjT?n=U~&z^&puf7MMu!q#Sy(jrc(42n+5V749v9NA4z)aaAfH!i+G_+1+ zrWELMn?!tSg(2Bi5xJv4Ek9O4yJE?*hQa-B04xs-k?_WVMG~ewXqajjtt6N8BdF8p@sqIoFhW79qgY#7mXmJUaFWLQ_KeDeK+l z_lW)&tAe(YjA8IN#aIp6WNcIuXGb`5Ha@wqo#%6ZrP1IL@w}bRXBI-K=k~Ebkn8Ps zI#Z#lU7AYUXPU_-+ApKQF&}VCN)Rq!7ed|WlqM6|c%0P$&2DV1USoRA_X|Q-O{Yk% zMC?w%fXVH0e8OGaA{XKycX9{La4>u!FZdf+%T z;yH{k9V&h|t&dFF#lpo}-nG`#jioLzb2#|W@Iz}o-I@3lh?7ipleTeZD&O7OhBy_w zTcozT@9&MIZkWQjH(n0;?*9Ddy5Bf{c6at~*!_=g@4o