From 8817a12ede30bd01ae4c5cbef53e57e098a26abd Mon Sep 17 00:00:00 2001 From: MotorTruck1221 Date: Sun, 29 Sep 2024 04:41:28 -0600 Subject: [PATCH] Feat: Tab cloaking --- package.json | 3 +- pnpm-lock.yaml | 115 +++++++++++++++------ public/cloaks/canvas.ico | Bin 0 -> 32988 bytes public/cloaks/classroom.png | Bin 0 -> 3653 bytes public/cloaks/google.png | Bin 0 -> 615 bytes public/cloaks/ps.ico | Bin 0 -> 15086 bytes public/cloaks/wikipedia.ico | Bin 0 -> 2734 bytes src/components/settings/Loader.astro | 7 ++ src/components/settings/SettingsCard.astro | 2 +- src/components/toasts/Toast.svelte | 41 ++++++++ src/components/toasts/ToastWrapper.svelte | 6 ++ src/layouts/Layout.astro | 15 +-- src/pages/[lang]/index.astro | 1 - src/pages/[lang]/settings/tab.astro | 53 ++++++++-- src/utils/settings.ts | 35 +++++++ src/utils/toast.ts | 20 ++++ 16 files changed, 250 insertions(+), 48 deletions(-) create mode 100644 public/cloaks/canvas.ico create mode 100644 public/cloaks/classroom.png create mode 100644 public/cloaks/google.png create mode 100644 public/cloaks/ps.ico create mode 100644 public/cloaks/wikipedia.ico create mode 100644 src/components/settings/Loader.astro create mode 100644 src/components/toasts/Toast.svelte create mode 100644 src/components/toasts/ToastWrapper.svelte create mode 100644 src/utils/settings.ts create mode 100644 src/utils/toast.ts diff --git a/package.json b/package.json index 660ded9..99b6001 100644 --- a/package.json +++ b/package.json @@ -19,8 +19,8 @@ "@fastify/static": "^7.0.4", "@iconify-json/ph": "^1.2.0", "@mercuryworkshop/bare-mux": "1.1.1", - "@mercuryworkshop/epoxy-tls-new": "npm:@mercuryworkshop/epoxy-tls@^2.1.4-1", "@mercuryworkshop/epoxy-tls": "2.0.0-3", + "@mercuryworkshop/epoxy-tls-new": "npm:@mercuryworkshop/epoxy-tls@^2.1.4-1", "@mercuryworkshop/epoxy-transport": "2.0.1", "@titaniumnetwork-dev/ultraviolet": "3.1.2", "astro": "^4.15.9", @@ -35,6 +35,7 @@ "sequelize": "^6.37.3", "sqlite3": "^5.1.7", "svelte": "^4.2.19", + "svelte-french-toast": "^1.2.0", "tailwindcss": "^3.4.13", "typescript": "^5.6.2", "vite-plugin-static-copy": "^1.0.6", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 0f1f159..1397012 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,13 +13,13 @@ importers: version: 0.8.3(typescript@5.6.2) '@astrojs/node': specifier: ^8.3.4 - version: 8.3.4(astro@4.15.9(@types/node@22.7.4)(rollup@4.22.5)(typescript@5.6.2)) + version: 8.3.4(astro@4.15.9(@types/node@22.7.4)(rollup@4.22.5)(sass@1.79.4)(typescript@5.6.2)) '@astrojs/svelte': specifier: ^5.7.1 - version: 5.7.1(astro@4.15.9(@types/node@22.7.4)(rollup@4.22.5)(typescript@5.6.2))(svelte@4.2.19)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)) + version: 5.7.1(astro@4.15.9(@types/node@22.7.4)(rollup@4.22.5)(sass@1.79.4)(typescript@5.6.2))(svelte@4.2.19)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)) '@astrojs/tailwind': specifier: ^5.1.1 - version: 5.1.1(astro@4.15.9(@types/node@22.7.4)(rollup@4.22.5)(typescript@5.6.2))(tailwindcss@3.4.13) + version: 5.1.1(astro@4.15.9(@types/node@22.7.4)(rollup@4.22.5)(sass@1.79.4)(typescript@5.6.2))(tailwindcss@3.4.13) '@fastify/compress': specifier: ^7.0.3 version: 7.0.3 @@ -46,7 +46,7 @@ importers: version: 3.1.2 astro: specifier: ^4.15.9 - version: 4.15.9(@types/node@22.7.4)(rollup@4.22.5)(typescript@5.6.2) + version: 4.15.9(@types/node@22.7.4)(rollup@4.22.5)(sass@1.79.4)(typescript@5.6.2) astro-icon: specifier: ^1.1.1 version: 1.1.1 @@ -80,6 +80,9 @@ importers: svelte: specifier: ^4.2.19 version: 4.2.19 + svelte-french-toast: + specifier: ^1.2.0 + version: 1.2.0(svelte@4.2.19) tailwindcss: specifier: ^3.4.13 version: 3.4.13 @@ -88,7 +91,7 @@ importers: version: 5.6.2 vite-plugin-static-copy: specifier: ^1.0.6 - version: 1.0.6(vite@5.4.8(@types/node@22.7.4)) + version: 1.0.6(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)) wisp-server-node: specifier: ^1.1.7 version: 1.1.7 @@ -1122,6 +1125,10 @@ packages: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} + chokidar@4.0.1: + resolution: {integrity: sha512-n8enUVCED/KVRQlab1hr3MVpcVMvxtZjmEa956u+4YijlmQED223XMSYj2tLuKvr4jcCTzNNMpQDUer72MMmzA==} + engines: {node: '>= 14.16.0'} + chownr@1.1.4: resolution: {integrity: sha512-jJ0bqzaylmJtVnNgzTeSOs8DPavpbYgEr/b0YL8/2GO3xJEhInFmhKMUnEJQjZumK7KXGFhUy89PrsJWlakBVg==} @@ -1804,6 +1811,9 @@ packages: ieee754@1.2.1: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} + immutable@4.3.7: + resolution: {integrity: sha512-1hqclzwYwjRDFLjcFxOM5AYkkG0rpFPpr1RLPMEuGczoS7YA8gLhy8SWXYRAA/XwfEHpfo3cw5JGioS32fnMRw==} + import-meta-resolve@4.1.0: resolution: {integrity: sha512-I6fiaX09Xivtk+THaMfAwnA3MVA5Big1WHF1Dfx9hFuvNIWpXnorlkzhcQf6ehrqQiiZECRt1poOAkPmer3ruw==} @@ -2688,6 +2698,10 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} + readdirp@4.0.1: + resolution: {integrity: sha512-GkMg9uOTpIWWKbSsgwb5fA4EavTR+SG/PMPoAY8hkhHfEEY0/vqljY+XHqtDf2cr2IJtoNRDbrrEpZUiZCkYRw==} + engines: {node: '>= 14.16.0'} + real-require@0.2.0: resolution: {integrity: sha512-57frrGM/OCTLqLOAh0mhVA9VBMHd+9U7Zb2THMGdBUoZVOtGbJzjxsYGDJ3A9AYYCP4hn6y1TVbaOfzWtm5GFg==} engines: {node: '>= 12.13.0'} @@ -2825,6 +2839,11 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + sass@1.79.4: + resolution: {integrity: sha512-K0QDSNPXgyqO4GZq2HO5Q70TLxTH6cIT59RdoCHMivrC8rqzaTw5ab9prjz9KUN1El4FLXrBXJhik61JR4HcGg==} + engines: {node: '>=14.0.0'} + hasBin: true + section-matter@1.0.0: resolution: {integrity: sha512-vfD3pmTzGpufjScBh50YHKzEu2lxBWhVEHsNGoEXmCmn2hKGfeNLYMzCJpe8cD7gqX7TJluOVpBkAequ6dgMmA==} engines: {node: '>=4'} @@ -3062,12 +3081,22 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} + svelte-french-toast@1.2.0: + resolution: {integrity: sha512-5PW+6RFX3xQPbR44CngYAP1Sd9oCq9P2FOox4FZffzJuZI2mHOB7q5gJBVnOiLF5y3moVGZ7u2bYt7+yPAgcEQ==} + peerDependencies: + svelte: ^3.57.0 || ^4.0.0 + svelte-hmr@0.16.0: resolution: {integrity: sha512-Gyc7cOS3VJzLlfj7wKS0ZnzDVdv3Pn2IuVeJPk9m2skfhcu5bq3wtIZyQGggr7/Iim5rH5cncyQft/kRLupcnA==} engines: {node: ^12.20 || ^14.13.1 || >= 16} peerDependencies: svelte: ^3.19.0 || ^4.0.0 + svelte-writable-derived@3.1.1: + resolution: {integrity: sha512-w4LR6/bYZEuCs7SGr+M54oipk/UQKtiMadyOhW0PTwAtJ/Ai12QS77sLngEcfBx2q4H8ZBQucc9ktSA5sUGZWw==} + peerDependencies: + svelte: ^3.2.1 || ^4.0.0-next.1 || ^5.0.0-next.94 + svelte2tsx@0.7.21: resolution: {integrity: sha512-cdYR5gYBK0Ys3/jzGu9yfW9oxGLtLAnxcKtS7oJy2pjLhLLYSZcWeeeuaY9SMULwlqMZ1HfngGH3n5VdquRC3Q==} peerDependencies: @@ -3656,9 +3685,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@astrojs/node@8.3.4(astro@4.15.9(@types/node@22.7.4)(rollup@4.22.5)(typescript@5.6.2))': + '@astrojs/node@8.3.4(astro@4.15.9(@types/node@22.7.4)(rollup@4.22.5)(sass@1.79.4)(typescript@5.6.2))': dependencies: - astro: 4.15.9(@types/node@22.7.4)(rollup@4.22.5)(typescript@5.6.2) + astro: 4.15.9(@types/node@22.7.4)(rollup@4.22.5)(sass@1.79.4)(typescript@5.6.2) send: 0.19.0 server-destroy: 1.0.1 transitivePeerDependencies: @@ -3668,10 +3697,10 @@ snapshots: dependencies: prismjs: 1.29.0 - '@astrojs/svelte@5.7.1(astro@4.15.9(@types/node@22.7.4)(rollup@4.22.5)(typescript@5.6.2))(svelte@4.2.19)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4))': + '@astrojs/svelte@5.7.1(astro@4.15.9(@types/node@22.7.4)(rollup@4.22.5)(sass@1.79.4)(typescript@5.6.2))(svelte@4.2.19)(typescript@5.6.2)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4))': dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.4)) - astro: 4.15.9(@types/node@22.7.4)(rollup@4.22.5)(typescript@5.6.2) + '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)) + astro: 4.15.9(@types/node@22.7.4)(rollup@4.22.5)(sass@1.79.4)(typescript@5.6.2) svelte: 4.2.19 svelte2tsx: 0.7.21(svelte@4.2.19)(typescript@5.6.2) typescript: 5.6.2 @@ -3679,9 +3708,9 @@ snapshots: - supports-color - vite - '@astrojs/tailwind@5.1.1(astro@4.15.9(@types/node@22.7.4)(rollup@4.22.5)(typescript@5.6.2))(tailwindcss@3.4.13)': + '@astrojs/tailwind@5.1.1(astro@4.15.9(@types/node@22.7.4)(rollup@4.22.5)(sass@1.79.4)(typescript@5.6.2))(tailwindcss@3.4.13)': dependencies: - astro: 4.15.9(@types/node@22.7.4)(rollup@4.22.5)(typescript@5.6.2) + astro: 4.15.9(@types/node@22.7.4)(rollup@4.22.5)(sass@1.79.4)(typescript@5.6.2) autoprefixer: 10.4.20(postcss@8.4.47) postcss: 8.4.47 postcss-load-config: 4.0.2(postcss@8.4.47) @@ -4266,26 +4295,26 @@ snapshots: '@shikijs/vscode-textmate@9.2.2': {} - '@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.4)))(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.4))': + '@sveltejs/vite-plugin-svelte-inspector@2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)))(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4))': dependencies: - '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.4)) + '@sveltejs/vite-plugin-svelte': 3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)) debug: 4.3.7 svelte: 4.2.19 - vite: 5.4.8(@types/node@22.7.4) + vite: 5.4.8(@types/node@22.7.4)(sass@1.79.4) transitivePeerDependencies: - supports-color - '@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.4))': + '@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4))': dependencies: - '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.4)))(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.4)) + '@sveltejs/vite-plugin-svelte-inspector': 2.1.0(@sveltejs/vite-plugin-svelte@3.1.2(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)))(svelte@4.2.19)(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)) debug: 4.3.7 deepmerge: 4.3.1 kleur: 4.1.5 magic-string: 0.30.11 svelte: 4.2.19 svelte-hmr: 0.16.0(svelte@4.2.19) - vite: 5.4.8(@types/node@22.7.4) - vitefu: 0.2.5(vite@5.4.8(@types/node@22.7.4)) + vite: 5.4.8(@types/node@22.7.4)(sass@1.79.4) + vitefu: 0.2.5(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)) transitivePeerDependencies: - supports-color @@ -4523,7 +4552,7 @@ snapshots: - debug - supports-color - astro@4.15.9(@types/node@22.7.4)(rollup@4.22.5)(typescript@5.6.2): + astro@4.15.9(@types/node@22.7.4)(rollup@4.22.5)(sass@1.79.4)(typescript@5.6.2): dependencies: '@astrojs/compiler': 2.10.3 '@astrojs/internal-helpers': 0.4.1 @@ -4582,8 +4611,8 @@ snapshots: tsconfck: 3.1.3(typescript@5.6.2) unist-util-visit: 5.0.0 vfile: 6.0.3 - vite: 5.4.8(@types/node@22.7.4) - vitefu: 1.0.2(vite@5.4.8(@types/node@22.7.4)) + vite: 5.4.8(@types/node@22.7.4)(sass@1.79.4) + vitefu: 1.0.2(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)) which-pm: 3.0.0 xxhash-wasm: 1.0.2 yargs-parser: 21.1.1 @@ -4825,6 +4854,11 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + chokidar@4.0.1: + dependencies: + readdirp: 4.0.1 + optional: true + chownr@1.1.4: {} chownr@2.0.0: {} @@ -5617,6 +5651,9 @@ snapshots: ieee754@1.2.1: {} + immutable@4.3.7: + optional: true + import-meta-resolve@4.1.0: {} imurmurhash@0.1.4: @@ -6688,6 +6725,9 @@ snapshots: dependencies: picomatch: 2.3.1 + readdirp@4.0.1: + optional: true + real-require@0.2.0: {} regenerator-runtime@0.14.1: {} @@ -6885,6 +6925,13 @@ snapshots: safer-buffer@2.1.2: {} + sass@1.79.4: + dependencies: + chokidar: 4.0.1 + immutable: 4.3.7 + source-map-js: 1.2.1 + optional: true + section-matter@1.0.0: dependencies: extend-shallow: 2.0.1 @@ -7166,10 +7213,19 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} + svelte-french-toast@1.2.0(svelte@4.2.19): + dependencies: + svelte: 4.2.19 + svelte-writable-derived: 3.1.1(svelte@4.2.19) + svelte-hmr@0.16.0(svelte@4.2.19): dependencies: svelte: 4.2.19 + svelte-writable-derived@3.1.1(svelte@4.2.19): + dependencies: + svelte: 4.2.19 + svelte2tsx@0.7.21(svelte@4.2.19)(typescript@5.6.2): dependencies: dedent-js: 1.0.1 @@ -7430,15 +7486,15 @@ snapshots: '@types/unist': 3.0.3 vfile-message: 4.0.2 - vite-plugin-static-copy@1.0.6(vite@5.4.8(@types/node@22.7.4)): + vite-plugin-static-copy@1.0.6(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)): dependencies: chokidar: 3.6.0 fast-glob: 3.3.2 fs-extra: 11.2.0 picocolors: 1.1.0 - vite: 5.4.8(@types/node@22.7.4) + vite: 5.4.8(@types/node@22.7.4)(sass@1.79.4) - vite@5.4.8(@types/node@22.7.4): + vite@5.4.8(@types/node@22.7.4)(sass@1.79.4): dependencies: esbuild: 0.21.5 postcss: 8.4.47 @@ -7446,14 +7502,15 @@ snapshots: optionalDependencies: '@types/node': 22.7.4 fsevents: 2.3.3 + sass: 1.79.4 - vitefu@0.2.5(vite@5.4.8(@types/node@22.7.4)): + vitefu@0.2.5(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)): optionalDependencies: - vite: 5.4.8(@types/node@22.7.4) + vite: 5.4.8(@types/node@22.7.4)(sass@1.79.4) - vitefu@1.0.2(vite@5.4.8(@types/node@22.7.4)): + vitefu@1.0.2(vite@5.4.8(@types/node@22.7.4)(sass@1.79.4)): optionalDependencies: - vite: 5.4.8(@types/node@22.7.4) + vite: 5.4.8(@types/node@22.7.4)(sass@1.79.4) volar-service-css@0.0.61(@volar/language-service@2.4.5): dependencies: diff --git a/public/cloaks/canvas.ico b/public/cloaks/canvas.ico new file mode 100644 index 0000000000000000000000000000000000000000..7798ef1356cead34977de1742a57511c75b36605 GIT binary patch literal 32988 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 RDA-?Jn-lgHFU&mS{tKZf!_@!) literal 0 HcmV?d00001 diff --git a/public/cloaks/google.png b/public/cloaks/google.png new file mode 100644 index 0000000000000000000000000000000000000000..8642fc1d3d641a6f3bd885e4c25ceedd98930d27 GIT binary patch literal 615 zcmV-t0+{`YP){`B{{H^||NsC0 z|NsC0H>y|bLo@77K}U%7C8kR=fAm0w_4>O2{J;{{;{1@a`2FbJ|N8Uc@#K8Kn1`+S z@|KWcxp(bfO3~=n`qRktsH1S9@Jg^{v&;JPpPBTdp6+vR{otPb%vSfix2)E%y3hK@ zxiFQmEj*%zptpD}0000JbW%=J0Mo%6;ze*erumUx6hSOn@AQ38jrq>?9O&aTaKy$N&FXZONV-rZ3%>NZuW3WyOxu#Z%yU!ISd` zf{?@j5(baxN!-E2l7#U9VV|E2d0FHUzdzLVVQ(u&cyeJH7tBY7pFz4_vZV%NYdD%| z0aj<4lV7&oU=8G-Rk&fm*0)>D*wz?*X&qh_f5zi;f08j6$RvNTXB``h?^(XR+C12t zs^BBfGn~JAMN})5P0b}|Qh?4yiV$z+!iRzck@f|-6s&axA(Tjb8o>fQWO;T6!Ajwn zCIUPxq`<=|z9?I>Oe3d5YvAt{9<(*5#X{W-XR0W^|?h|^%jTBH$ zo94v%Pa>+egX6d=CMQ)xgJT0%uX~K0OQYbtY&QY$F)vCEC=1N}_MeN4|6;c*OdNIp z+PS^R`QY7W literal 0 HcmV?d00001 diff --git a/public/cloaks/ps.ico b/public/cloaks/ps.ico new file mode 100644 index 0000000000000000000000000000000000000000..22d60e3111e85cebc19539fd571d46815628bfb4 GIT binary patch literal 15086 zcmeI33viUx6~{jkLqv)R2vmwCTL={_V#EglHY}FG7HlhhFjB1@KrC1yE85nfA}MOA zRjh!{*eWH=D3#IT)M>>>snSxLNGpuATEqu|sG-${M_@5SVEg-jd++k?vYY)jyBRvu z?97jIALrh4?)&cD;5gl!LZ_m_K?a<4LmlT*$8iDy6EAg~cS$QnDu3>2jEC@DoN@41xXS7h?g#7OAF$oS-w8hr=UClSE%9X@MB%5_7s3_L49DRR zv>18J$e`6d)e?W^gZ#h8`a*aV90c|ML>LVr&^UbzRaW;@OMFS^zxuo$&XkYH9i_)pWk+iIfA4?VUjS!9sX^g0ps*wTnQa;D znTuvfnOin)1#hz`M)%k9qK;~ zhQN*RDySVza1)%7s!TR%)R8a$e?eX4PzJr>r1eYM0H}cvp%qpF-^M!rp?t3X+xdT( zy7s~z*a~amdiV@`-?pd>iyVRO8VAU-FhAuJKbF)xJ-9^ZbM<(`o)&``8!;8^E?9{{53Q zoz>c7l^3>U{7TB?V08#<9%&Bg?CxjN{Ydn4 z^?xpPXnxBt$&cVSa5?Zob>c(30^R}X-ez+M7sGlu3R7*mABldh{tu^)6;KOLfcBtc z&r9saJD|+w5!O0U`hzyjk3>Hw|GhS-s}Kf){QfsYV0My@=8@VcUuW1n z!dfGHp&m+XdM1f(-u$<=sIwbf19}773A}oq_z>5bCI4%|J=>7I;AK!7K6^sD{Sdl& z_g@yNSLebbAU_v)y&yi*q}L(s`&a>Co!MEv@1fr*{+l*jLH#;kpM>~YCagC}?fGxR zK-)IL%RzfU!Wm)nQ%Q6?)Bh3F-wc0-Pgwhe$Aaz{I(q}2^m~YFynOFL=ys<67gN99 zQ8z*Su1whWzt)EL9Jrsj`u~5${~Pc{{kaOfcThY3H7@SmQ~B^HXueIdW0Fat+bR7| zz1l~$7s{XM)(^t+^XH&;J>*I6NnH0mox>N}^h^@ny!%g`13-N#A2&iD>j&WgXx^w@ z-rszN5`Q0buAOc5Gf8xF@}KgBvIk|L^?DuXE-ByT=NPXK#21>pt;o2agr}SIguTjJ zHdUB1x%&S_>UaYh;Xk0egV+q?yf%qf!X8k5wap`31ls%6=I`2cKN9_1{lCrF)xAyM z!Swsy97wp!6E6p?SNZr1^tS#Hz7#$Lwe4J+?nk1ZtN)9rLq08mK9F!AOsY^^I_M_$4S$_rR>)RnX6u{|R>l<99#muZDL({%L&T-(8H(G|~>iZn(g<%dezN zzWiTIU1z~yxD0NGzrj(^Uh^Cz?2C$ny>EZtug_jR%IC{}-IsU3dvFBQ-|}01t~>u( zNp^>kX4k_y!oKg!N%iFF|FziG+C5;{i`)*sf|+m*#Lr&YCO!sU0k!cZ2zY(UCQR8} z{qI2?BS33Z^Wj|R3-SA=^@p@l(0b5Zm+vn?R{M>u%Sy`UV~J=pIT>gSE1ep4Bp_v-6ZXgoqN3-nz}d#3z8 z23z4I=3>LPyGPJ)nCfgRpH=6QwF&Qi|^@ohT<3ZP6mGP&__!lfZ5Ow`A z{)eKm_JpD(Zh9!z-eM=#{$i(4{h+_o3cv)2|D9HbQDxkN@O#jmUUNuuN^?thbGAsb?4O)kzI>k7ZQg^a_?Ex!g4>=xmUY|<)8iy|XoiqXH z+f3u%)&FMx(N{Xlrx>x|2KuH-P&_i0lo^Kzrub(%JN;qvy-M%Al)zqx7eN`d$9$e)cL{0rFAz zxcguSjP%+{6-LLm{p9kLErKziewQEDNC(*mG*8w7r*!%c`M&L=t20vbTsHgKS_x|| ztONDC`zC~(1RAFaRxgz#KO6gt(6@I3_4zDt+lLImYw$Gm0F8sz#mZE6Z5sL6*jK-5 z4vYhh@m{zY+_{dN3%dWhZx~3;kyjw?cW3f^+qXVTQmz1Gdl$IxBFLfeJ}fjkml1v& z(td{|uS51t{Tg@uO_lq$gX{%cpw{FMC;S$SRXo*)yj<)TQC{C6?o-`Jjr$+raT6~m zyc0sHY#W_i?CX2H+JCF5OY>tpJYeD@3BL<@Z$EWvuc-#DxzWbnXu==COcS3%SoYKY zUPzwr_M_Vq2EhezCuq-+ECl&;KWILd8~b+9v;}CO;ed zkE6fF)Zd-(dGKRUyS3lje%C$eb|bR4N8cTDPh4|< z2>cKlpbpv{b6ZvtUD?-~T>|srO;~R7#uL_gqO;~YxZZ=#ni^OS8WYVwt+%Y+f6%W2 z?I8zXzme`+HDT>vYSR%ooWvpG8vhsJRu~5EIC$HaDjX?^Mk7~3xE-pCqmk+Z&<2BQ zBH_AFB-~OP3AgTw%nxphgjes2gquY;68-=r6<@Z^&96qUy0JD=T^x$cA5ZzV=)pO= zqx&05qI##$vqS*m?-XfP32nLvz5`dm@8GwP@b?;2llFsdCFmY-Elh(&Fd}V%qzrVu z<);$YJj+XY>T&NaNhTAbDeNyK?GjL%G-q`OnFR5_Kk!ySdb0m2uX(M#M1A@N2*Xlv z_b(siWq$$u1bznUmk`_w@xK>PJ;amktN+f2a?t%mQsp#0SHe6W_O;J^15{3HQhVOR za3S0U@!wJir?T&kA9<(4k6;w2J+iOCIN}nsI6z e9^8p@+luZ2W=ixWkj|6j9ffBJqf=kzIR6D&Z~OiL literal 0 HcmV?d00001 diff --git a/public/cloaks/wikipedia.ico b/public/cloaks/wikipedia.ico new file mode 100644 index 0000000000000000000000000000000000000000..e70021849bdf154b79a9eb6fd1621e5c51571d40 GIT binary patch literal 2734 zcmeHJO-x)>6#icME0yMrnt&J!#2O%}Z6`$BAc%p4keH$FAdM{>f^5dd1%YVFm>6JT zM%si#HneU~HbX0k>~M4;F313Fk+7K*m>K5p9VnWJ#?1Ac_vSG(Fvc{-xbYOx?If>cXSu89pU}d`#=nsn`8&@-kCEalgj}}|nQExb3 z6#0=BID$+efg<4(@S5sT_XzOu^j+%W5o8K0>e*(ZIJDn#@%QziQlfR7emMs>s-G-2 z1nC|w-Z1xT5AN<4(j70g!n@XDW5T!eO4>P>#6cijmW_X=S}0KzQYDlu%*Gv>m#B3D zZ*U*T48(E3iXU(jeS0l~Z|fzjgmEfByi5ka4^cvpsKtKG;H?m6ziyg77qkbG4v5@^ zmjv;6r5B3mzi^+d*36i$T@p;_f%=2{FpA&uG2i7tS>!@PFkREwAET;TsH69JEidE(?3oa6XdILFnFvmJMNXKJ{$ajcWt3zXBqxshK^z@*wuMa~*Ll_?)$JEpmd_EtRmzT|VCKiijy))T)!3UqMo_r^c z=jmRqd0N}x+nV%dhI+3NZJ#;P4RFz%v&)EFU@k;XJzyKG9n1yd_{44N6Q$ek(3ALC zTX$5&%T^BQg|r^u_fqZkD*8CB?`T1~%Y|We+5+x!J=tO`(qiddJkctb(1f+4q!iB) zDXFiS<6#8Ia9j!S7P+x0Z*&(A*l5cw`UqFCwUYQVj7q&Vs(IQQXNgOS!Ih1o%14Io zra2$cJ3%(pd1Wq?D_q*Hze_v1Dx%A(GFq*sZ!5*K{xeGDx}P|o3+^c z52u+lJHP%dZm;9#HDztdbIIizZg!sgS+*%V&*gtg^1P|337wst7#JA9@bEB3M@P;7 zshOD>%+Jr8dA_;1iAW@p$#W}CcCq8UO%n0(@Tq#kF5wfd)h6M!UwyF7EM69>46{MV z6|PFS`F&p8zC + import { cloakTab } from "@utils/settings.ts"; + // This loads the settings in a nice way + document.addEventListener("astro:after-swap", function() { + cloakTab(localStorage.getItem("nebula||tabCloak") as string || "default"); + }); + diff --git a/src/components/settings/SettingsCard.astro b/src/components/settings/SettingsCard.astro index 6aaa0f0..a2f31c1 100644 --- a/src/components/settings/SettingsCard.astro +++ b/src/components/settings/SettingsCard.astro @@ -40,7 +40,7 @@ const { title, description, input, select, button } = Astro.props; } {select.select && - {select.options!.map((option) => ( ))} diff --git a/src/components/toasts/Toast.svelte b/src/components/toasts/Toast.svelte new file mode 100644 index 0000000..6fc1c1a --- /dev/null +++ b/src/components/toasts/Toast.svelte @@ -0,0 +1,41 @@ + + + diff --git a/src/components/toasts/ToastWrapper.svelte b/src/components/toasts/ToastWrapper.svelte new file mode 100644 index 0000000..50495ff --- /dev/null +++ b/src/components/toasts/ToastWrapper.svelte @@ -0,0 +1,6 @@ + + + + diff --git a/src/layouts/Layout.astro b/src/layouts/Layout.astro index 4192508..c841e8d 100644 --- a/src/layouts/Layout.astro +++ b/src/layouts/Layout.astro @@ -2,7 +2,7 @@ import Header from "@components/Header.astro"; import { ViewTransitions } from "astro:transitions"; import MobileNavigation from "@components/MobileNavigation.astro"; - +import SettingsLoader from '@components/settings/Loader.astro'; interface Props { title: string; } @@ -13,10 +13,11 @@ const { title } = Astro.props; + - +