diff options
| author | Adam Soltys <[email protected]> | 2024-03-19 10:23:34 -0700 |
|---|---|---|
| committer | Adam Soltys <[email protected]> | 2024-03-19 10:23:34 -0700 |
| commit | a4685f61e656ed0e3cd343073931867955be3281 (patch) | |
| tree | c28c446ef0f6d5cbc37a7c58f954c145bd18ef80 | |
| parent | c6c2ac113186ba304c46580320df91c119ab5314 (diff) | |
| parent | e2bb9d704878070054fa8ef81da73b248e2c4f97 (diff) | |
| download | coinos-ui-a4685f61e656ed0e3cd343073931867955be3281.tar.gz coinos-ui-a4685f61e656ed0e3cd343073931867955be3281.zip | |
Merge remote-tracking branch 'muriwolf/swapee' into swapee
77 files changed, 6653 insertions, 570 deletions
| Binary files differ diff --git a/components.json b/components.json new file mode 100644 index 00000000..bb687df1 --- /dev/null +++ b/components.json @@ -0,0 +1,14 @@ +{ + "$schema": "https://shadcn-svelte.com/schema.json", + "style": "default", + "tailwind": { + "config": "tailwind.config.js", + "css": "src/app.css", + "baseColor": "gray" + }, + "aliases": { + "components": "$lib/shadcn/components", + "utils": "$lib/shadcn/utils" + }, + "typescript": false +}
\ No newline at end of file diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 00000000..b5c9de5b --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4552 @@ +{ + "name": "my-app", + "version": "0.0.1", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "my-app", + "version": "0.0.1", + "dependencies": { + "@types/gsap": "^3.0.0", + "bits-ui": "^0.17.0", + "bun": "^1.0.26", + "clsx": "^2.1.0", + "gsap": "^3.12.5", + "lucide-svelte": "^0.323.0", + "tailwind-merge": "^2.2.1", + "tailwind-variants": "^0.1.20" + }, + "devDependencies": { + "@scure/base": "^1.1.1", + "@scure/bip39": "^1.2.1", + "@sveltejs/adapter-node": "^2.0.0", + "@sveltejs/kit": "^2.0.0", + "@sveltejs/vite-plugin-svelte": "^3.0.0", + "@tailwindcss/line-clamp": "^0.4.2", + "@zerodevx/svelte-toast": "^0.7.2", + "autoprefixer": "^10.4.13", + "bech32": "^2.0.0", + "bip21": "^2.0.3", + "bitcoin-address-validation": "^2.2.1", + "buffer": "^6.0.3", + "date-fns": "^2.29.3", + "html5-qrcode": "^2.3.8", + "leaflet": "^1.9.3", + "leaflet.markercluster": "^1.5.3", + "maplibre-gl": "^3.3.1", + "nostr-tools": "^1.14.2", + "postcss": "^8.4.20", + "prettier": "2", + "prettier-plugin-svelte": "^2.10.1", + "qr-code-styling": "1.6.0-rc.1", + "qr-scanner": "^1.4.2", + "qrcode-base64": "^1.0.1", + "rollup": "^2.79.1", + "sass": "^1.71.1", + "screenfull": "^6.0.2", + "svelte": "^4.0.0", + "svelte-adapter-bun": "^0.5.1", + "svelte-outclick": "^3.3.3", + "svelte-preprocess": "^5.0.3", + "svelte-virtual-scroll-list": "^1.1.0", + "sveltekit-i18n": "^2.2.2", + "tailwind-scrollbar": "^2.1.0", + "tailwindcss": "^3.2.4", + "uint8array-extras": "^1.0.0", + "unique-names-generator": "^4.7.1", + "uuid": "^9.0.0", + "vite": "^5.0.0" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@ampproject/remapping": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", + "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.0", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@babel/runtime": { + "version": "7.23.9", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", + "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", + "dependencies": { + "regenerator-runtime": "^0.14.0" + }, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.19.12.tgz", + "integrity": "sha512-bmoCYyWdEL3wDQIVbcyzRyeKLgk2WtWLTWz1ZIAZF/EGbNOwSA6ew3PftJ1PqMiOOGu0OyFMzG53L0zqIpPeNA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.12.tgz", + "integrity": "sha512-qg/Lj1mu3CdQlDEEiWrlC4eaPZ1KztwGJ9B6J+/6G+/4ewxJg7gqj8eVYWvao1bXrqGiW2rsBZFSX3q2lcW05w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.12.tgz", + "integrity": "sha512-P0UVNGIienjZv3f5zq0DP3Nt2IE/3plFzuaS96vihvD0Hd6H/q4WXUGpCxD/E8YrSXfNyRPbpTq+T8ZQioSuPA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.12.tgz", + "integrity": "sha512-3k7ZoUW6Q6YqhdhIaq/WZ7HwBpnFBlW905Fa4s4qWJyiNOgT1dOqDiVAQFwBH7gBRZr17gLrlFCRzF6jFh7Kew==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.19.12.tgz", + "integrity": "sha512-B6IeSgZgtEzGC42jsI+YYu9Z3HKRxp8ZT3cqhvliEHovq8HSX2YX8lNocDn79gCKJXOSaEot9MVYky7AKjCs8g==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.12.tgz", + "integrity": "sha512-hKoVkKzFiToTgn+41qGhsUJXFlIjxI/jSYeZf3ugemDYZldIXIxhvwN6erJGlX4t5h417iFuheZ7l+YVn05N3A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.12.tgz", + "integrity": "sha512-4aRvFIXmwAcDBw9AueDQ2YnGmz5L6obe5kmPT8Vd+/+x/JMVKCgdcRwH6APrbpNXsPz+K653Qg8HB/oXvXVukA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.12.tgz", + "integrity": "sha512-EYoXZ4d8xtBoVN7CEwWY2IN4ho76xjYXqSXMNccFSx2lgqOG/1TBPW0yPx1bJZk94qu3tX0fycJeeQsKovA8gg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.12.tgz", + "integrity": "sha512-J5jPms//KhSNv+LO1S1TX1UWp1ucM6N6XuL6ITdKWElCu8wXP72l9MM0zDTzzeikVyqFE6U8YAV9/tFyj0ti+w==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.12.tgz", + "integrity": "sha512-EoTjyYyLuVPfdPLsGVVVC8a0p1BFFvtpQDB/YLEhaXyf/5bczaGeN15QkR+O4S5LeJ92Tqotve7i1jn35qwvdA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.12.tgz", + "integrity": "sha512-Thsa42rrP1+UIGaWz47uydHSBOgTUnwBwNq59khgIwktK6x60Hivfbux9iNR0eHCHzOLjLMLfUMLCypBkZXMHA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.12.tgz", + "integrity": "sha512-LiXdXA0s3IqRRjm6rV6XaWATScKAXjI4R4LoDlvO7+yQqFdlr1Bax62sRwkVvRIrwXxvtYEHHI4dm50jAXkuAA==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.12.tgz", + "integrity": "sha512-fEnAuj5VGTanfJ07ff0gOA6IPsvrVHLVb6Lyd1g2/ed67oU1eFzL0r9WL7ZzscD+/N6i3dWumGE1Un4f7Amf+w==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.12.tgz", + "integrity": "sha512-nYJA2/QPimDQOh1rKWedNOe3Gfc8PabU7HT3iXWtNUbRzXS9+vgB0Fjaqr//XNbd82mCxHzik2qotuI89cfixg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.12.tgz", + "integrity": "sha512-2MueBrlPQCw5dVJJpQdUYgeqIzDQgw3QtiAHUC4RBz9FXPrskyyU3VI1hw7C0BSKB9OduwSJ79FTCqtGMWqJHg==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.12.tgz", + "integrity": "sha512-+Pil1Nv3Umes4m3AZKqA2anfhJiVmNCYkPchwFJNEJN5QxmTs1uzyy4TvmDrCRNT2ApwSari7ZIgrPeUx4UZDg==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.12.tgz", + "integrity": "sha512-B71g1QpxfwBvNrfyJdVDexenDIt1CiDN1TIXLbhOw0KhJzE78KIFGX6OJ9MrtC0oOqMWf+0xop4qEU8JrJTwCg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.12.tgz", + "integrity": "sha512-3ltjQ7n1owJgFbuC61Oj++XhtzmymoCihNFgT84UAmJnxJfm4sYCiSLTXZtE00VWYpPMYc+ZQmB6xbSdVh0JWA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.12.tgz", + "integrity": "sha512-RbrfTB9SWsr0kWmb9srfF+L933uMDdu9BIzdA7os2t0TXhCRjrQyCeOt6wVxr79CKD4c+p+YhCj31HBkYcXebw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.12.tgz", + "integrity": "sha512-HKjJwRrW8uWtCQnQOz9qcU3mUZhTUQvi56Q8DPTLLB+DawoiQdjsYq+j+D3s9I8VFtDr+F9CjgXKKC4ss89IeA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.12.tgz", + "integrity": "sha512-URgtR1dJnmGvX864pn1B2YUYNzjmXkuJOIqG2HdU62MVS4EHpU2946OZoTMnRUHklGtJdJZ33QfzdjGACXhn1A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.12.tgz", + "integrity": "sha512-+ZOE6pUkMOJfmxmBZElNOx72NKpIa/HFOMGzu8fqzQJ5kgf6aTGrcJaFsNiVMH4JKpMipyK+7k0n2UXN7a8YKQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.12.tgz", + "integrity": "sha512-T1QyPSDCyMXaO3pzBkF96E8xMkiRYbUEZADd29SyPGabqxMViNoii+NcK7eWJAEoU6RZyEm5lVSIjTmcdoB9HA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.6.0.tgz", + "integrity": "sha512-PcF++MykgmTj3CIyOQbKA/hDzOAiqI3mhuoN44WRCopIs1sgoDoU4oty4Jtqaj/y3oDU6fnVSm4QG0a3t5i0+g==", + "dependencies": { + "@floating-ui/utils": "^0.2.1" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.6.3", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.6.3.tgz", + "integrity": "sha512-RnDthu3mzPlQ31Ss/BTwQ1zjzIhr3lk1gZB1OC56h/1vEtaXkESrOqL5fQVMfXpwGtRwX+YsZBdyHtJMQnkArw==", + "dependencies": { + "@floating-ui/core": "^1.0.0", + "@floating-ui/utils": "^0.2.0" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.1.tgz", + "integrity": "sha512-9TANp6GPoMtYzQdt54kfAyMmz1+osLlXdg2ENroU7zzrtflTLrrC/lgrIfaSe+Wu0b89GKccT7vxXA0MoAIO+Q==" + }, + "node_modules/@internationalized/date": { + "version": "3.5.2", + "resolved": "https://registry.npmjs.org/@internationalized/date/-/date-3.5.2.tgz", + "integrity": "sha512-vo1yOMUt2hzp63IutEaTUxROdvQg1qlMRsbCvbay2AK2Gai7wIgCyK5weEX3nHkiLgo4qCXHijFNC/ILhlRpOQ==", + "dependencies": { + "@swc/helpers": "^0.5.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.3", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", + "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "dependencies": { + "@jridgewell/set-array": "^1.0.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.9" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", + "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", + "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.22", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", + "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@mapbox/geojson-rewind": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/@mapbox/geojson-rewind/-/geojson-rewind-0.5.2.tgz", + "integrity": "sha512-tJaT+RbYGJYStt7wI3cq4Nl4SXxG8W7JDG5DMJu97V25RnbNg3QtQtf+KD+VLjNpWKYsRvXDNmNrBgEETr1ifA==", + "dev": true, + "dependencies": { + "get-stream": "^6.0.1", + "minimist": "^1.2.6" + }, + "bin": { + "geojson-rewind": "geojson-rewind" + } + }, + "node_modules/@mapbox/jsonlint-lines-primitives": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/@mapbox/jsonlint-lines-primitives/-/jsonlint-lines-primitives-2.0.2.tgz", + "integrity": "sha512-rY0o9A5ECsTQRVhv7tL/OyDpGAoUB4tTvLiW1DSzQGq4bvTPhNw1VpSNjDJc5GFZ2XuyOtSWSVN05qOtcD71qQ==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/@mapbox/point-geometry": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/point-geometry/-/point-geometry-0.1.0.tgz", + "integrity": "sha512-6j56HdLTwWGO0fJPlrZtdU/B13q8Uwmo18Ck2GnGgN9PCFyKTZ3UbXeEdRFh18i9XQ92eH2VdtpJHpBD3aripQ==", + "dev": true + }, + "node_modules/@mapbox/tiny-sdf": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/@mapbox/tiny-sdf/-/tiny-sdf-2.0.6.tgz", + "integrity": "sha512-qMqa27TLw+ZQz5Jk+RcwZGH7BQf5G/TrutJhspsca/3SHwmgKQ1iq+d3Jxz5oysPVYTGP6aXxCo5Lk9Er6YBAA==", + "dev": true + }, + "node_modules/@mapbox/unitbezier": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/@mapbox/unitbezier/-/unitbezier-0.0.1.tgz", + "integrity": "sha512-nMkuDXFv60aBr9soUG5q+GvZYL+2KZHVvsqFCzqnkGEf46U2fvmytHaEVc1/YZbiLn8X+eR3QzX1+dwDO1lxlw==", + "dev": true + }, + "node_modules/@mapbox/vector-tile": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@mapbox/vector-tile/-/vector-tile-1.3.1.tgz", + "integrity": "sha512-MCEddb8u44/xfQ3oD+Srl/tNcQoqTw3goGk2oLsrFxOTc3dUp+kAnby3PvAeeBYSMSjSPD1nd1AJA6W49WnoUw==", + "dev": true, + "dependencies": { + "@mapbox/point-geometry": "~0.1.0" + } + }, + "node_modules/@mapbox/whoots-js": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@mapbox/whoots-js/-/whoots-js-3.1.0.tgz", + "integrity": "sha512-Es6WcD0nO5l+2BOQS4uLfNPYQaNDfbot3X1XUoloz+x0mPDS3eeORZJl06HXjwBG1fOGwCRnzK88LMdxKRrd6Q==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@maplibre/maplibre-gl-style-spec": { + "version": "19.3.3", + "resolved": "https://registry.npmjs.org/@maplibre/maplibre-gl-style-spec/-/maplibre-gl-style-spec-19.3.3.tgz", + "integrity": "sha512-cOZZOVhDSulgK0meTsTkmNXb1ahVvmTmWmfx9gRBwc6hq98wS9JP35ESIoNq3xqEan+UN+gn8187Z6E4NKhLsw==", + "dev": true, + "dependencies": { + "@mapbox/jsonlint-lines-primitives": "~2.0.2", + "@mapbox/unitbezier": "^0.0.1", + "json-stringify-pretty-compact": "^3.0.0", + "minimist": "^1.2.8", + "rw": "^1.3.3", + "sort-object": "^3.0.3" + }, + "bin": { + "gl-style-format": "dist/gl-style-format.mjs", + "gl-style-migrate": "dist/gl-style-migrate.mjs", + "gl-style-validate": "dist/gl-style-validate.mjs" + } + }, + "node_modules/@melt-ui/svelte": { + "version": "0.71.2", + "resolved": "https://registry.npmjs.org/@melt-ui/svelte/-/svelte-0.71.2.tgz", + "integrity": "sha512-GDUErhAphEoEOLpcBjQ84BgzRR6M3344fQE4QYFffwT7aedWak7CvNsECgeig1Y5xvfDmeEaFnGlOQXIBucJYw==", + "dependencies": { + "@floating-ui/core": "^1.3.1", + "@floating-ui/dom": "^1.4.5", + "@internationalized/date": "^3.5.0", + "dequal": "^2.0.3", + "focus-trap": "^7.5.2", + "nanoid": "^5.0.4" + }, + "peerDependencies": { + "svelte": ">=3 <5" + } + }, + "node_modules/@melt-ui/svelte/node_modules/nanoid": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.6.tgz", + "integrity": "sha512-rRq0eMHoGZxlvaFOUdK1Ev83Bd1IgzzR+WJ3IbDJ7QOSdAxYjlurSPqFs9s4lJg29RT6nPwizFtJhQS6V5xgiA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/@noble/ciphers": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/@noble/ciphers/-/ciphers-0.2.0.tgz", + "integrity": "sha512-6YBxJDAapHSdd3bLDv6x2wRPwq4QFMUaB3HvljNBUTThDd12eSm7/3F+2lnfzx2jvM+S6Nsy0jEt9QbPqSwqRw==", + "dev": true, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@noble/curves/-/curves-1.1.0.tgz", + "integrity": "sha512-091oBExgENk/kGj3AZmtBDMpxQPDtxQABR2B9lb1JbVTs6ytdzZNwvhxQ4MWasRNEzlbEH8jCWFCwhF/Obj5AA==", + "dev": true, + "dependencies": { + "@noble/hashes": "1.3.1" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/curves/node_modules/@noble/hashes": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "dev": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@noble/hashes": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.3.tgz", + "integrity": "sha512-V7/fPHgl+jsVPXqqeOzT8egNj2iBIVt+ECeMMG8TdcnTikP3oaBtUVqpT/gYCR68aEBJSF+XbYUxStjbFMqIIA==", + "dev": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@oven/bun-darwin-aarch64": { + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/@oven/bun-darwin-aarch64/-/bun-darwin-aarch64-1.0.26.tgz", + "integrity": "sha512-7FgUZz2EpMgFdEI9sA68bnHhrnrDBmCwcewpm6641HK0x2RIO1EcFl/7GKSGsD1JmbNfGqxYU16Sc+rgKFtXAg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oven/bun-darwin-x64": { + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/@oven/bun-darwin-x64/-/bun-darwin-x64-1.0.26.tgz", + "integrity": "sha512-kWO6ThQEMm4OPfqlhFlWrDRiIFtaUl//bRJfomOHE4BABaP9bdgHjDsaxt0pUWiKP9j9YnPFXtMw91iUbTbCWg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oven/bun-darwin-x64-baseline": { + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/@oven/bun-darwin-x64-baseline/-/bun-darwin-x64-baseline-1.0.26.tgz", + "integrity": "sha512-ssVJJs6tAvVZKnCx5bXAXZ05nSbfLHJ4qD/XFlVYb+3aue81YhXzQpbsOr9DShv209rBp9756SqHs9KZH66cbQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@oven/bun-linux-aarch64": { + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/@oven/bun-linux-aarch64/-/bun-linux-aarch64-1.0.26.tgz", + "integrity": "sha512-YSG6pOFMpXquGf3i4/Ta05NAlsSkiZVk5P5EAlfO1fnJANlkcu1QfD/IYvddQ5YY4aOTwlQFqA29pYxYj+2A/A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oven/bun-linux-x64": { + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/@oven/bun-linux-x64/-/bun-linux-x64-1.0.26.tgz", + "integrity": "sha512-ErEH7yBkWIt01qROMysM6ZQqz8epY+2DtQW0rfjKbaPm8JuEdZVyeA5zoKES3e2J37FUY073MdbwdzE5KPX2cQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@oven/bun-linux-x64-baseline": { + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/@oven/bun-linux-x64-baseline/-/bun-linux-x64-baseline-1.0.26.tgz", + "integrity": "sha512-1EjD6t6BFkspGqTRqYGVSQw5eIktDsappweG+1yh/QpmhV95/vDKKoPGXCwoyeSoJIjJMl9VaApX8Fr1vpnUfA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@polka/url": { + "version": "1.0.0-next.24", + "resolved": "https://registry.npmjs.org/@polka/url/-/url-1.0.0-next.24.tgz", + "integrity": "sha512-2LuNTFBIO0m7kKIQvvPHN6UE63VjpmL9rnEEaOOaiSPbZK+zUOYIzBAWcED+3XYzhYsd/0mD57VdxAEqqV52CQ==", + "dev": true + }, + "node_modules/@rollup/plugin-commonjs": { + "version": "25.0.7", + "resolved": "https://registry.npmjs.org/@rollup/plugin-commonjs/-/plugin-commonjs-25.0.7.tgz", + "integrity": "sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "commondir": "^1.0.1", + "estree-walker": "^2.0.2", + "glob": "^8.0.3", + "is-reference": "1.2.1", + "magic-string": "^0.30.3" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.68.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-json": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/@rollup/plugin-json/-/plugin-json-6.1.0.tgz", + "integrity": "sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.1.0" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/plugin-node-resolve": { + "version": "15.2.3", + "resolved": "https://registry.npmjs.org/@rollup/plugin-node-resolve/-/plugin-node-resolve-15.2.3.tgz", + "integrity": "sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==", + "dev": true, + "dependencies": { + "@rollup/pluginutils": "^5.0.1", + "@types/resolve": "1.20.2", + "deepmerge": "^4.2.2", + "is-builtin-module": "^3.2.1", + "is-module": "^1.0.0", + "resolve": "^1.22.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^2.78.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/pluginutils": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", + "integrity": "sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==", + "dev": true, + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^2.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "rollup": "^1.20.0||^2.0.0||^3.0.0||^4.0.0" + }, + "peerDependenciesMeta": { + "rollup": { + "optional": true + } + } + }, + "node_modules/@rollup/rollup-android-arm-eabi": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm-eabi/-/rollup-android-arm-eabi-4.9.6.tgz", + "integrity": "sha512-MVNXSSYN6QXOulbHpLMKYi60ppyO13W9my1qogeiAqtjb2yR4LSmfU2+POvDkLzhjYLXz9Rf9+9a3zFHW1Lecg==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-android-arm64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-android-arm64/-/rollup-android-arm64-4.9.6.tgz", + "integrity": "sha512-T14aNLpqJ5wzKNf5jEDpv5zgyIqcpn1MlwCrUXLrwoADr2RkWA0vOWP4XxbO9aiO3dvMCQICZdKeDrFl7UMClw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ] + }, + "node_modules/@rollup/rollup-darwin-arm64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-arm64/-/rollup-darwin-arm64-4.9.6.tgz", + "integrity": "sha512-CqNNAyhRkTbo8VVZ5R85X73H3R5NX9ONnKbXuHisGWC0qRbTTxnF1U4V9NafzJbgGM0sHZpdO83pLPzq8uOZFw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-darwin-x64": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-darwin-x64/-/rollup-darwin-x64-4.9.6.tgz", + "integrity": "sha512-zRDtdJuRvA1dc9Mp6BWYqAsU5oeLixdfUvkTHuiYOHwqYuQ4YgSmi6+/lPvSsqc/I0Omw3DdICx4Tfacdzmhog==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ] + }, + "node_modules/@rollup/rollup-linux-arm-gnueabihf": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm-gnueabihf/-/rollup-linux-arm-gnueabihf-4.9.6.tgz", + "integrity": "sha512-oNk8YXDDnNyG4qlNb6is1ojTOGL/tRhbbKeE/YuccItzerEZT68Z9gHrY3ROh7axDc974+zYAPxK5SH0j/G+QQ==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-gnu/-/rollup-linux-arm64-gnu-4.9.6.tgz", + "integrity": "sha512-Z3O60yxPtuCYobrtzjo0wlmvDdx2qZfeAWTyfOjEDqd08kthDKexLpV97KfAeUXPosENKd8uyJMRDfFMxcYkDQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-arm64-musl": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-arm64-musl/-/rollup-linux-arm64-musl-4.9.6.tgz", + "integrity": "sha512-gpiG0qQJNdYEVad+1iAsGAbgAnZ8j07FapmnIAQgODKcOTjLEWM9sRb+MbQyVsYCnA0Im6M6QIq6ax7liws6eQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-riscv64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-riscv64-gnu/-/rollup-linux-riscv64-gnu-4.9.6.tgz", + "integrity": "sha512-+uCOcvVmFUYvVDr27aiyun9WgZk0tXe7ThuzoUTAukZJOwS5MrGbmSlNOhx1j80GdpqbOty05XqSl5w4dQvcOA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-gnu": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-gnu/-/rollup-linux-x64-gnu-4.9.6.tgz", + "integrity": "sha512-HUNqM32dGzfBKuaDUBqFB7tP6VMN74eLZ33Q9Y1TBqRDn+qDonkAUyKWwF9BR9unV7QUzffLnz9GrnKvMqC/fw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-linux-x64-musl": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-linux-x64-musl/-/rollup-linux-x64-musl-4.9.6.tgz", + "integrity": "sha512-ch7M+9Tr5R4FK40FHQk8VnML0Szi2KRujUgHXd/HjuH9ifH72GUmw6lStZBo3c3GB82vHa0ZoUfjfcM7JiiMrQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ] + }, + "node_modules/@rollup/rollup-win32-arm64-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-arm64-msvc/-/rollup-win32-arm64-msvc-4.9.6.tgz", + "integrity": "sha512-VD6qnR99dhmTQ1mJhIzXsRcTBvTjbfbGGwKAHcu+52cVl15AC/kplkhxzW/uT0Xl62Y/meBKDZvoJSJN+vTeGA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-ia32-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-ia32-msvc/-/rollup-win32-ia32-msvc-4.9.6.tgz", + "integrity": "sha512-J9AFDq/xiRI58eR2NIDfyVmTYGyIZmRcvcAoJ48oDld/NTR8wyiPUu2X/v1navJ+N/FGg68LEbX3Ejd6l8B7MQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@rollup/rollup-win32-x64-msvc": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/@rollup/rollup-win32-x64-msvc/-/rollup-win32-x64-msvc-4.9.6.tgz", + "integrity": "sha512-jqzNLhNDvIZOrt69Ce4UjGRpXJBzhUBzawMwnaDAwyHriki3XollsewxWzOzz+4yOFDkuJHtTsZFwMxhYJWmLQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ] + }, + "node_modules/@scure/base": { + "version": "1.1.5", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.5.tgz", + "integrity": "sha512-Brj9FiG2W1MRQSTB212YVPRrcbjkv48FoZi/u4l/zds/ieRrqsh7aUf6CLwkAq61oKXr/ZlTzlY66gLIj3TFTQ==", + "dev": true, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip32": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@scure/bip32/-/bip32-1.3.1.tgz", + "integrity": "sha512-osvveYtyzdEVbt3OfwwXFr4P2iVBL5u1Q3q4ONBfDY/UpOuXmOlbgwc1xECEboY8wIays8Yt6onaWMUdUbfl0A==", + "dev": true, + "dependencies": { + "@noble/curves": "~1.1.0", + "@noble/hashes": "~1.3.1", + "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@scure/bip39": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.2.tgz", + "integrity": "sha512-HYf9TUXG80beW+hGAt3TRM8wU6pQoYur9iNypTROm42dorCGmLnFe3eWjz3gOq6G62H2WRh0FCzAR1PI+29zIA==", + "dev": true, + "dependencies": { + "@noble/hashes": "~1.3.2", + "@scure/base": "~1.1.4" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/@sveltejs/adapter-node": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/@sveltejs/adapter-node/-/adapter-node-2.1.2.tgz", + "integrity": "sha512-ZfVY5buBclWHoBT+RbkMUViJGEIZ3IfT/0Hvhlgp+qC3LRZwp+wS1Zsw5dgkB2sFDZXctbLNXJtwlkjSp1mw0g==", + "dev": true, + "dependencies": { + "@rollup/plugin-commonjs": "^25.0.7", + "@rollup/plugin-json": "^6.1.0", + "@rollup/plugin-node-resolve": "^15.2.3", + "rollup": "^4.8.0" + }, + "peerDependencies": { + "@sveltejs/kit": "^2.0.0" + } + }, + "node_modules/@sveltejs/adapter-node/node_modules/rollup": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz", + "integrity": "sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.9.6", + "@rollup/rollup-android-arm64": "4.9.6", + "@rollup/rollup-darwin-arm64": "4.9.6", + "@rollup/rollup-darwin-x64": "4.9.6", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.6", + "@rollup/rollup-linux-arm64-gnu": "4.9.6", + "@rollup/rollup-linux-arm64-musl": "4.9.6", + "@rollup/rollup-linux-riscv64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-musl": "4.9.6", + "@rollup/rollup-win32-arm64-msvc": "4.9.6", + "@rollup/rollup-win32-ia32-msvc": "4.9.6", + "@rollup/rollup-win32-x64-msvc": "4.9.6", + "fsevents": "~2.3.2" + } + }, + "node_modules/@sveltejs/kit": { + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/@sveltejs/kit/-/kit-2.5.0.tgz", + "integrity": "sha512-1uyXvzC2Lu1FZa30T4y5jUAC21R309ZMRG0TPt+PPPbNUoDpy8zSmSNVWYaBWxYDqLGQ5oPNWvjvvF2IjJ1jmA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@types/cookie": "^0.6.0", + "cookie": "^0.6.0", + "devalue": "^4.3.2", + "esm-env": "^1.0.0", + "import-meta-resolve": "^4.0.0", + "kleur": "^4.1.5", + "magic-string": "^0.30.5", + "mrmime": "^2.0.0", + "sade": "^1.8.1", + "set-cookie-parser": "^2.6.0", + "sirv": "^2.0.4", + "tiny-glob": "^0.2.9" + }, + "bin": { + "svelte-kit": "svelte-kit.js" + }, + "engines": { + "node": ">=18.13" + }, + "peerDependencies": { + "@sveltejs/vite-plugin-svelte": "^3.0.0", + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.3" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte/-/vite-plugin-svelte-3.0.2.tgz", + "integrity": "sha512-MpmF/cju2HqUls50WyTHQBZUV3ovV/Uk8k66AN2gwHogNAG8wnW8xtZDhzNBsFJJuvmq1qnzA5kE7YfMJNFv2Q==", + "dev": true, + "dependencies": { + "@sveltejs/vite-plugin-svelte-inspector": "^2.0.0", + "debug": "^4.3.4", + "deepmerge": "^4.3.1", + "kleur": "^4.1.5", + "magic-string": "^0.30.5", + "svelte-hmr": "^0.15.3", + "vitefu": "^0.2.5" + }, + "engines": { + "node": "^18.0.0 || >=20" + }, + "peerDependencies": { + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.0" + } + }, + "node_modules/@sveltejs/vite-plugin-svelte-inspector": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@sveltejs/vite-plugin-svelte-inspector/-/vite-plugin-svelte-inspector-2.0.0.tgz", + "integrity": "sha512-gjr9ZFg1BSlIpfZ4PRewigrvYmHWbDrq2uvvPB1AmTWKuM+dI1JXQSUu2pIrYLb/QncyiIGkFDFKTwJ0XqQZZg==", + "dev": true, + "dependencies": { + "debug": "^4.3.4" + }, + "engines": { + "node": "^18.0.0 || >=20" + }, + "peerDependencies": { + "@sveltejs/vite-plugin-svelte": "^3.0.0", + "svelte": "^4.0.0 || ^5.0.0-next.0", + "vite": "^5.0.0" + } + }, + "node_modules/@sveltekit-i18n/base": { + "version": "1.3.7", + "resolved": "https://registry.npmjs.org/@sveltekit-i18n/base/-/base-1.3.7.tgz", + "integrity": "sha512-kg1kql1/ro/lIudwFiWrv949Q07gmweln87tflUZR51MNdXXzK4fiJQv5Mw50K/CdQ5BOk/dJ0WOH2vOtBI6yw==", + "dev": true, + "peerDependencies": { + "svelte": ">=3.49.0" + } + }, + "node_modules/@sveltekit-i18n/parser-default": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@sveltekit-i18n/parser-default/-/parser-default-1.1.1.tgz", + "integrity": "sha512-/gtzLlqm/sox7EoPKD56BxGZktK/syGc79EbJAPWY5KVitQD9SM0TP8yJCqDxTVPk7Lk0WJhrBGUE2Nn0f5M1w==", + "dev": true + }, + "node_modules/@swc/helpers": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.5.6.tgz", + "integrity": "sha512-aYX01Ke9hunpoCexYAgQucEpARGQ5w/cqHFrIR+e9gdKb1QWTsVJuTJ2ozQzIAxLyRQe/m+2RqzkyOOGiMKRQA==", + "dependencies": { + "tslib": "^2.4.0" + } + }, + "node_modules/@tailwindcss/line-clamp": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@tailwindcss/line-clamp/-/line-clamp-0.4.4.tgz", + "integrity": "sha512-5U6SY5z8N42VtrCrKlsTAA35gy2VSyYtHWCsg1H87NU1SXnEfekTVlrga9fzUDrrHcGi2Lb5KenUWb4lRQT5/g==", + "dev": true, + "peerDependencies": { + "tailwindcss": ">=2.0.0 || >=3.0.0 || >=3.0.0-alpha.1" + } + }, + "node_modules/@types/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/@types/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==", + "dev": true + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==" + }, + "node_modules/@types/geojson": { + "version": "7946.0.14", + "resolved": "https://registry.npmjs.org/@types/geojson/-/geojson-7946.0.14.tgz", + "integrity": "sha512-WCfD5Ht3ZesJUsONdhvm84dmzWOiOzOAqOncN0++w0lBw1o8OuDNJF2McvvCef/yBqb/HYRahp1BYtODFQ8bRg==", + "dev": true + }, + "node_modules/@types/gsap": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/gsap/-/gsap-3.0.0.tgz", + "integrity": "sha512-BbWLi4WRHGze4C8NV7U7yRevuBFiPkPZZyGa0rryanvh/9HPUFXTNBXsGQxJZJq7Ix7j4RXMYodP3s+OsqCErg==", + "deprecated": "This is a stub types definition. gsap provides its own type definitions, so you do not need this installed.", + "dependencies": { + "gsap": "*" + } + }, + "node_modules/@types/mapbox__point-geometry": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/@types/mapbox__point-geometry/-/mapbox__point-geometry-0.1.4.tgz", + "integrity": "sha512-mUWlSxAmYLfwnRBmgYV86tgYmMIICX4kza8YnE/eIlywGe2XoOxlpVnXWwir92xRLjwyarqwpu2EJKD2pk0IUA==", + "dev": true + }, + "node_modules/@types/mapbox__vector-tile": { + "version": "1.3.4", + "resolved": "https://registry.npmjs.org/@types/mapbox__vector-tile/-/mapbox__vector-tile-1.3.4.tgz", + "integrity": "sha512-bpd8dRn9pr6xKvuEBQup8pwQfD4VUyqO/2deGjfpe6AwC8YRlyEipvefyRJUSiCJTZuCb8Pl1ciVV5ekqJ96Bg==", + "dev": true, + "dependencies": { + "@types/geojson": "*", + "@types/mapbox__point-geometry": "*", + "@types/pbf": "*" + } + }, + "node_modules/@types/offscreencanvas": { + "version": "2019.7.3", + "resolved": "https://registry.npmjs.org/@types/offscreencanvas/-/offscreencanvas-2019.7.3.tgz", + "integrity": "sha512-ieXiYmgSRXUDeOntE1InxjWyvEelZGP63M+cGuquuRLuIKKT1osnkXjxev9B7d1nXSug5vpunx+gNlbVxMlC9A==", + "dev": true + }, + "node_modules/@types/pbf": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/@types/pbf/-/pbf-3.0.5.tgz", + "integrity": "sha512-j3pOPiEcWZ34R6a6mN07mUkM4o4Lwf6hPNt8eilOeZhTFbxFXmKhvXl9Y28jotFPaI1bpPDJsbCprUoNke6OrA==", + "dev": true + }, + "node_modules/@types/pug": { + "version": "2.0.10", + "resolved": "https://registry.npmjs.org/@types/pug/-/pug-2.0.10.tgz", + "integrity": "sha512-Sk/uYFOBAB7mb74XcpizmH0KOR2Pv3D2Hmrh1Dmy5BmK3MpdSa5kqZcg6EKBdklU0bFXX9gCfzvpnyUehrPIuA==", + "dev": true + }, + "node_modules/@types/resolve": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/@types/resolve/-/resolve-1.20.2.tgz", + "integrity": "sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==", + "dev": true + }, + "node_modules/@types/supercluster": { + "version": "7.1.3", + "resolved": "https://registry.npmjs.org/@types/supercluster/-/supercluster-7.1.3.tgz", + "integrity": "sha512-Z0pOY34GDFl3Q6hUFYf3HkTwKEE02e7QgtJppBt+beEAxnyOpJua+voGFvxINBHa06GwLFFym7gRPY2SiKIfIA==", + "dev": true, + "dependencies": { + "@types/geojson": "*" + } + }, + "node_modules/@zerodevx/svelte-toast": { + "version": "0.7.2", + "resolved": "https://registry.npmjs.org/@zerodevx/svelte-toast/-/svelte-toast-0.7.2.tgz", + "integrity": "sha512-vWiY6IqsstcOoQ8PFBuFuxgPkj1JFAGhUF9gC7wLx7c5A9SSfdtxWs/39ekGSIeyJK0yqWhTcmzGrCEWSELzDw==", + "dev": true + }, + "node_modules/acorn": { + "version": "8.11.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", + "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "bin": { + "acorn": "bin/acorn" + }, + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==" + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "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==" + }, + "node_modules/aria-query": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/aria-query/-/aria-query-5.3.0.tgz", + "integrity": "sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/arr-union": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/arr-union/-/arr-union-3.1.0.tgz", + "integrity": "sha512-sKpyeERZ02v1FeCZT8lrfJq5u6goHCtpTAzPwJYe7c8SPFOboNjNg1vz2L4VTn9T4PQxEx13TbXLmYUcS6Ug7Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/assign-symbols": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", + "integrity": "sha512-Q+JC7Whu8HhmTdBph/Tq59IoRtoy6KAm5zzPv00WdujX82lbAL8K7WVjne7vdCsAmbF4AYaDOPyO3k0kl8qIrw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.17", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.17.tgz", + "integrity": "sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.22.2", + "caniuse-lite": "^1.0.30001578", + "fraction.js": "^4.3.7", + "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/axobject-query": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/axobject-query/-/axobject-query-4.0.0.tgz", + "integrity": "sha512-+60uv1hiVFhHZeO+Lz0RYzsVHy5Wr1ayX0mwda9KPDVLNJgZ1T9Ny7VmFbLDzxsH0D87I86vgj3gFrjTJUYznw==", + "dependencies": { + "dequal": "^2.0.3" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==" + }, + "node_modules/base58-js": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/base58-js/-/base58-js-1.0.5.tgz", + "integrity": "sha512-LkkAPP8Zu+c0SVNRTRVDyMfKVORThX+rCViget00xdgLRrKkClCTz1T7cIrpr69ShwV5XJuuoZvMvJ43yURwkA==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/base64-js": { + "version": "1.5.1", + "resolved": "https://registry.npmjs.org/base64-js/-/base64-js-1.5.1.tgz", + "integrity": "sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/bech32": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/bech32/-/bech32-2.0.0.tgz", + "integrity": "sha512-LcknSilhIGatDAsY1ak2I8VtGaHNhgMSYVxFrGLXv+xLHytaKZKcaUJJUE7qmBr7h33o5YQwP55pMI0xmkpJwg==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.2.0.tgz", + "integrity": "sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==", + "engines": { + "node": ">=8" + } + }, + "node_modules/bip21": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/bip21/-/bip21-2.0.3.tgz", + "integrity": "sha512-L4ODmASLjsHYAU+TG7xffkYNMvHzAe4mkVX7mcvOUyKAr/MDBPrsRgqUhE8EmKdeEKHk5SYpX1Aexzvm/6WdbQ==", + "dev": true, + "dependencies": { + "qs": "^6.3.0" + } + }, + "node_modules/bitcoin-address-validation": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/bitcoin-address-validation/-/bitcoin-address-validation-2.2.3.tgz", + "integrity": "sha512-1uGCGl26Ye8JG5qcExtFLQfuib6qEZWNDo1ZlLlwp/z7ygUFby3IxolgEfgMGaC+LG9csbVASLcH8fRLv7DIOg==", + "dev": true, + "dependencies": { + "base58-js": "^1.0.0", + "bech32": "^2.0.0", + "sha256-uint8array": "^0.10.3" + } + }, + "node_modules/bits-ui": { + "version": "0.17.0", + "resolved": "https://registry.npmjs.org/bits-ui/-/bits-ui-0.17.0.tgz", + "integrity": "sha512-K73jjco1qPmvGXMQtTkZG6K36UmNrPR21u+C1jzoRWmF3NnUfDP4hPJnAci0LosUycfvOxtaHB1M4awvLvQXyQ==", + "dependencies": { + "@internationalized/date": "^3.5.1", + "@melt-ui/svelte": "0.71.2", + "nanoid": "^5.0.4" + }, + "peerDependencies": { + "svelte": "^4.0.0" + } + }, + "node_modules/bits-ui/node_modules/nanoid": { + "version": "5.0.6", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-5.0.6.tgz", + "integrity": "sha512-rRq0eMHoGZxlvaFOUdK1Ev83Bd1IgzzR+WJ3IbDJ7QOSdAxYjlurSPqFs9s4lJg29RT6nPwizFtJhQS6V5xgiA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.js" + }, + "engines": { + "node": "^18 || >=20" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", + "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "dependencies": { + "fill-range": "^7.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.22.3", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", + "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "caniuse-lite": "^1.0.30001580", + "electron-to-chromium": "^1.4.648", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/buffer": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/buffer/-/buffer-6.0.3.tgz", + "integrity": "sha512-FTiCpNxtwiZZHEZbcbTIcZjERVICn9yq/pDFkTl95/AxzD1naBctN7YO68riM/gLSDY7sdrMby8hofADYuuqOA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.2.1" + } + }, + "node_modules/buffer-crc32": { + "version": "0.2.13", + "resolved": "https://registry.npmjs.org/buffer-crc32/-/buffer-crc32-0.2.13.tgz", + "integrity": "sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==", + "dev": true, + "engines": { + "node": "*" + } + }, + "node_modules/builtin-modules": { + "version": "3.3.0", + "resolved": "https://registry.npmjs.org/builtin-modules/-/builtin-modules-3.3.0.tgz", + "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/bun": { + "version": "1.0.26", + "resolved": "https://registry.npmjs.org/bun/-/bun-1.0.26.tgz", + "integrity": "sha512-+aSzKvGLE9hWwCRDwvnhoMTDntCYEk5bKn16L0QGD0v630WJMPhazAMxaSJmfq6dSAtiqPpauPpmHbzwoGPjlQ==", + "cpu": [ + "arm64", + "x64" + ], + "hasInstallScript": true, + "os": [ + "darwin", + "linux" + ], + "bin": { + "bun": "bin/bun", + "bunx": "bin/bun" + }, + "optionalDependencies": { + "@oven/bun-darwin-aarch64": "1.0.26", + "@oven/bun-darwin-x64": "1.0.26", + "@oven/bun-darwin-x64-baseline": "1.0.26", + "@oven/bun-linux-aarch64": "1.0.26", + "@oven/bun-linux-x64": "1.0.26", + "@oven/bun-linux-x64-baseline": "1.0.26" + } + }, + "node_modules/bytewise": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/bytewise/-/bytewise-1.1.0.tgz", + "integrity": "sha512-rHuuseJ9iQ0na6UDhnrRVDh8YnWVlU6xM3VH6q/+yHDeUH2zIhUzP+2/h3LIrhLDBtTqzWpE3p3tP/boefskKQ==", + "dev": true, + "dependencies": { + "bytewise-core": "^1.2.2", + "typewise": "^1.0.3" + } + }, + "node_modules/bytewise-core": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/bytewise-core/-/bytewise-core-1.2.3.tgz", + "integrity": "sha512-nZD//kc78OOxeYtRlVk8/zXqTB4gf/nlguL1ggWA8FuchMyOxcyHR4QPQZMUmA7czC+YnaBrPUCubqAWe50DaA==", + "dev": true, + "dependencies": { + "typewise-core": "^1.2" + } + }, + "node_modules/call-bind": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", + "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "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==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001582", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001582.tgz", + "integrity": "sha512-vsJG3V5vgfduaQGVxL53uSX/HUzxyr2eA8xCo36OLal7sRcSZbibJtLeh0qja4sFOr/QQGt4opB4tOy+eOgAxg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chokidar": { + "version": "3.5.3", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.5.3.tgz", + "integrity": "sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==", + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/clsx": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/clsx/-/clsx-2.1.0.tgz", + "integrity": "sha512-m3iNNWpd9rl3jvvcBnu70ylMdrXt8Vlq4HYadnU5fwcOtvkSQWPmj7amUcDT2qYI7risszBjI5AUIUox9D16pg==", + "engines": { + "node": ">=6" + } + }, + "node_modules/code-red": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/code-red/-/code-red-1.0.4.tgz", + "integrity": "sha512-7qJWqItLA8/VPVlKJlFXU+NBlo/qyfs39aJcuMT/2ere32ZqvF5OSxgdM5xOfJJ7O429gg2HM47y8v9P+9wrNw==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15", + "@types/estree": "^1.0.1", + "acorn": "^8.10.0", + "estree-walker": "^3.0.3", + "periscopic": "^3.1.0" + } + }, + "node_modules/code-red/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==" + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/commondir": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/commondir/-/commondir-1.0.1.tgz", + "integrity": "sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==", + "dev": true + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "dev": true, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cross-spawn/node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/css-tree": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/css-tree/-/css-tree-2.3.1.tgz", + "integrity": "sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==", + "dependencies": { + "mdn-data": "2.0.30", + "source-map-js": "^1.0.1" + }, + "engines": { + "node": "^10 || ^12.20.0 || ^14.13.0 || >=15.0.0" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/debug": { + "version": "4.3.4", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", + "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "dev": true, + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", + "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/dequal": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/dequal/-/dequal-2.0.3.tgz", + "integrity": "sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==", + "engines": { + "node": ">=6" + } + }, + "node_modules/detect-indent": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", + "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/devalue": { + "version": "4.3.2", + "resolved": "https://registry.npmjs.org/devalue/-/devalue-4.3.2.tgz", + "integrity": "sha512-KqFl6pOgOW+Y6wJgu80rHpo2/3H07vr8ntR9rkkFIRETewbf5GaYYcakYfiKz89K+sLsuPkQIZaXDMjUObZwWg==", + "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==" + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==" + }, + "node_modules/earcut": { + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/earcut/-/earcut-2.2.4.tgz", + "integrity": "sha512-/pjZsA1b4RPHbeWZQn66SWS8nZZWLQQ23oE3Eam7aroEFGEvwKAsJfZ9ytiEMycfzXWpca4FA9QIOehf7PocBQ==", + "dev": true + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==" + }, + "node_modules/electron-to-chromium": { + "version": "1.4.653", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.653.tgz", + "integrity": "sha512-wA2A2LQCqnEwQAvwADQq3KpMpNwgAUBnRmrFgRzHnPhbQUFArTR32Ab46f4p0MovDLcg4uqd4nCsN2hTltslpA==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==" + }, + "node_modules/es6-promise": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/es6-promise/-/es6-promise-3.3.1.tgz", + "integrity": "sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==", + "dev": true + }, + "node_modules/esbuild": { + "version": "0.19.12", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.12.tgz", + "integrity": "sha512-aARqgq8roFBj054KvQr5f1sFu0D65G+miZRCuJyJ0G13Zwx7vRar5Zhn2tkQNzIXcBrNVsv/8stehpj+GAjgbg==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.12", + "@esbuild/android-arm": "0.19.12", + "@esbuild/android-arm64": "0.19.12", + "@esbuild/android-x64": "0.19.12", + "@esbuild/darwin-arm64": "0.19.12", + "@esbuild/darwin-x64": "0.19.12", + "@esbuild/freebsd-arm64": "0.19.12", + "@esbuild/freebsd-x64": "0.19.12", + "@esbuild/linux-arm": "0.19.12", + "@esbuild/linux-arm64": "0.19.12", + "@esbuild/linux-ia32": "0.19.12", + "@esbuild/linux-loong64": "0.19.12", + "@esbuild/linux-mips64el": "0.19.12", + "@esbuild/linux-ppc64": "0.19.12", + "@esbuild/linux-riscv64": "0.19.12", + "@esbuild/linux-s390x": "0.19.12", + "@esbuild/linux-x64": "0.19.12", + "@esbuild/netbsd-x64": "0.19.12", + "@esbuild/openbsd-x64": "0.19.12", + "@esbuild/sunos-x64": "0.19.12", + "@esbuild/win32-arm64": "0.19.12", + "@esbuild/win32-ia32": "0.19.12", + "@esbuild/win32-x64": "0.19.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/esm-env": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/esm-env/-/esm-env-1.0.0.tgz", + "integrity": "sha512-Cf6VksWPsTuW01vU9Mk/3vRue91Zevka5SjyNf3nEpokFRuqt/KjUQoGAwq9qMmhpLTHmXzSIrFRw8zxWzmFBA==", + "dev": true + }, + "node_modules/estree-walker": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-2.0.2.tgz", + "integrity": "sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==", + "dev": true + }, + "node_modules/extend-shallow": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-2.0.1.tgz", + "integrity": "sha512-zCnTtlxNoAiDc3gqY2aYAWFx7XWWiasuF2K8Me5WbN8otHKTUKBwjPtNpRs/rbUZm7KxWAaNj7P1a/p52GbVug==", + "dev": true, + "dependencies": { + "is-extendable": "^0.1.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.0.tgz", + "integrity": "sha512-zGygtijUMT7jnk3h26kUms3BkSDp4IfIKjmnqI2tvx6nuBfiF1UqOxbnLfzdv+apBy+53oaImsKtMw/xYbW+1w==", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fill-range": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", + "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/focus-trap": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.5.4.tgz", + "integrity": "sha512-N7kHdlgsO/v+iD/dMoJKtsSqs5Dz/dXZVebRgJw23LDk+jMi/974zyiOYDziY2JPp8xivq9BmUGwIJMiuSBi7w==", + "dependencies": { + "tabbable": "^6.2.0" + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/fs.realpath": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", + "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", + "dev": true + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/geojson-vt": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/geojson-vt/-/geojson-vt-3.2.1.tgz", + "integrity": "sha512-EvGQQi/zPrDA6zr6BnJD/YhwAkBP8nnJ9emh3EnHQKVMfg/MRVtPbMYdgVy/IaEmn4UfagD2a6fafPDL5hbtwg==", + "dev": true + }, + "node_modules/get-intrinsic": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", + "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", + "dev": true, + "dependencies": { + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-stream": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-6.0.1.tgz", + "integrity": "sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-value": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/get-value/-/get-value-2.0.6.tgz", + "integrity": "sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/gl-matrix": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/gl-matrix/-/gl-matrix-3.4.3.tgz", + "integrity": "sha512-wcCp8vu8FT22BnvKVPjXa/ICBWRq/zjFfdofZy1WSpQZpphblv12/bOQLBC1rMM7SGOFS9ltVmKOHil5+Ml7gA==", + "dev": true + }, + "node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/global-prefix": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", + "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", + "dev": true, + "dependencies": { + "ini": "^1.3.5", + "kind-of": "^6.0.2", + "which": "^1.3.1" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/globalyzer": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/globalyzer/-/globalyzer-0.1.0.tgz", + "integrity": "sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==", + "dev": true + }, + "node_modules/globrex": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/globrex/-/globrex-0.1.2.tgz", + "integrity": "sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==", + "dev": true + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/gsap": { + "version": "3.12.5", + "resolved": "https://registry.npmjs.org/gsap/-/gsap-3.12.5.tgz", + "integrity": "sha512-srBfnk4n+Oe/ZnMIOXt3gT605BX9x5+rh/prT2F1SsNJsU1XuMiP0E2aptW481OnonOGACZWBqseH5Z7csHxhQ==" + }, + "node_modules/has-property-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", + "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "dev": true, + "dependencies": { + "get-intrinsic": "^1.2.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", + "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.0.tgz", + "integrity": "sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/html5-qrcode": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/html5-qrcode/-/html5-qrcode-2.3.8.tgz", + "integrity": "sha512-jsr4vafJhwoLVEDW3n1KvPnCCXWaQfRng0/EEYk1vNcQGcG/htAdhJX0be8YyqMoSz7+hZvOZSTAepsabiuhiQ==", + "dev": true + }, + "node_modules/ieee754": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/ieee754/-/ieee754-1.2.1.tgz", + "integrity": "sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/immutable": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-4.3.5.tgz", + "integrity": "sha512-8eabxkth9gZatlwl5TBuJnCsoTADlL6ftEr7A4qgdaTsPyreilDSnUk57SO+jfKcNtxPa22U5KK6DSeAYhpBJw==", + "dev": true + }, + "node_modules/import-meta-resolve": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.0.0.tgz", + "integrity": "sha512-okYUR7ZQPH+efeuMJGlq4f8ubUgO50kByRPyt/Cy1Io4PSRsPjxME+YlVaCOx+NIToW7hCsZNFJyTPFFKepRSA==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, + "node_modules/inflight": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", + "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", + "dev": true, + "dependencies": { + "once": "^1.3.0", + "wrappy": "1" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", + "dev": true + }, + "node_modules/ini": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", + "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", + "dev": true + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-builtin-module": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/is-builtin-module/-/is-builtin-module-3.2.1.tgz", + "integrity": "sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==", + "dev": true, + "dependencies": { + "builtin-modules": "^3.3.0" + }, + "engines": { + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extendable": { + "version": "0.1.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-0.1.1.tgz", + "integrity": "sha512-5BMULNob1vgFX6EjQw5izWDxrecWK9AM72rugNr0TFldMOi0fj6Jk+zeKIt0xGj4cEfQIJth4w3OKWOJ4f+AFw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-module": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-module/-/is-module-1.0.0.tgz", + "integrity": "sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==", + "dev": true + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-object": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", + "integrity": "sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og==", + "dev": true, + "dependencies": { + "isobject": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-reference": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-1.2.1.tgz", + "integrity": "sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==", + "dev": true, + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==" + }, + "node_modules/isobject": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/isobject/-/isobject-3.0.1.tgz", + "integrity": "sha512-WhB9zCku7EGTj/HQQRz5aUQEUeoQZH2bWcltRErOpymJ4boYE6wL9Tbr23krRPSZ+C5zqNSrSw+Cc7sZZ4b7vg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/jackspeak": { + "version": "2.3.6", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-2.3.6.tgz", + "integrity": "sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==", + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "1.21.0", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.0.tgz", + "integrity": "sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==", + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/json-stringify-pretty-compact": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/json-stringify-pretty-compact/-/json-stringify-pretty-compact-3.0.0.tgz", + "integrity": "sha512-Rc2suX5meI0S3bfdZuA7JMFBGkJ875ApfVyq2WHELjBiiG22My/l7/8zPpH/CfFVQHuVLd8NLR0nv6vi0BYYKA==", + "dev": true + }, + "node_modules/kdbush": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/kdbush/-/kdbush-4.0.2.tgz", + "integrity": "sha512-WbCVYJ27Sz8zi9Q7Q0xHC+05iwkm3Znipc2XTlrnJbsHMYktW4hPhXUE8Ys1engBrvffoSCqbil1JQAa7clRpA==", + "dev": true + }, + "node_modules/kind-of": { + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", + "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/kleur": { + "version": "4.1.5", + "resolved": "https://registry.npmjs.org/kleur/-/kleur-4.1.5.tgz", + "integrity": "sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/leaflet": { + "version": "1.9.4", + "resolved": "https://registry.npmjs.org/leaflet/-/leaflet-1.9.4.tgz", + "integrity": "sha512-nxS1ynzJOmOlHp+iL3FyWqK89GtNL8U8rvlMOsQdTTssxZwCXh8N2NB3GDQOL+YR3XnWyZAxwQixURb+FA74PA==", + "dev": true + }, + "node_modules/leaflet.markercluster": { + "version": "1.5.3", + "resolved": "https://registry.npmjs.org/leaflet.markercluster/-/leaflet.markercluster-1.5.3.tgz", + "integrity": "sha512-vPTw/Bndq7eQHjLBVlWpnGeLa3t+3zGiuM7fJwCkiMFq+nmRuG3RI3f7f4N4TDX7T4NpbAXpR2+NTRSEGfCSeA==", + "dev": true, + "peerDependencies": { + "leaflet": "^1.3.1" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==" + }, + "node_modules/locate-character": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/locate-character/-/locate-character-3.0.0.tgz", + "integrity": "sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA==" + }, + "node_modules/lru-cache": { + "version": "10.2.0", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.0.tgz", + "integrity": "sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==", + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/lucide-svelte": { + "version": "0.323.0", + "resolved": "https://registry.npmjs.org/lucide-svelte/-/lucide-svelte-0.323.0.tgz", + "integrity": "sha512-3GEFk1vCwB8BtHTHZTocFJfX6AtTLQw9a74JSuihAGx+MzhxqeWk8W1TkM4WUlvE0x9UdONM2rJGRyx9IyjkJg==", + "peerDependencies": { + "svelte": "^3 || ^4 || ^5.0.0-next.42" + } + }, + "node_modules/magic-string": { + "version": "0.30.6", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.6.tgz", + "integrity": "sha512-n62qCLbPjNjyo+owKtveQxZFZTBm+Ms6YoGD23Wew6Vw337PElFNifQpknPruVRQV57kVShPnLGo9vWxVhpPvA==", + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.15" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/maplibre-gl": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/maplibre-gl/-/maplibre-gl-3.6.2.tgz", + "integrity": "sha512-krg2KFIdOpLPngONDhP6ixCoWl5kbdMINP0moMSJFVX7wX1Clm2M9hlNKXS8vBGlVWwR5R3ZfI6IPrYz7c+aCQ==", + "dev": true, + "dependencies": { + "@mapbox/geojson-rewind": "^0.5.2", + "@mapbox/jsonlint-lines-primitives": "^2.0.2", + "@mapbox/point-geometry": "^0.1.0", + "@mapbox/tiny-sdf": "^2.0.6", + "@mapbox/unitbezier": "^0.0.1", + "@mapbox/vector-tile": "^1.3.1", + "@mapbox/whoots-js": "^3.1.0", + "@maplibre/maplibre-gl-style-spec": "^19.3.3", + "@types/geojson": "^7946.0.13", + "@types/mapbox__point-geometry": "^0.1.4", + "@types/mapbox__vector-tile": "^1.3.4", + "@types/pbf": "^3.0.5", + "@types/supercluster": "^7.1.3", + "earcut": "^2.2.4", + "geojson-vt": "^3.2.1", + "gl-matrix": "^3.4.3", + "global-prefix": "^3.0.0", + "kdbush": "^4.0.2", + "murmurhash-js": "^1.0.0", + "pbf": "^3.2.1", + "potpack": "^2.0.0", + "quickselect": "^2.0.0", + "supercluster": "^8.0.1", + "tinyqueue": "^2.0.3", + "vt-pbf": "^3.1.3" + }, + "engines": { + "node": ">=16.14.0", + "npm": ">=8.1.0" + }, + "funding": { + "url": "https://github.com/maplibre/maplibre-gl-js?sponsor=1" + } + }, + "node_modules/mdn-data": { + "version": "2.0.30", + "resolved": "https://registry.npmjs.org/mdn-data/-/mdn-data-2.0.30.tgz", + "integrity": "sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "engines": { + "node": ">= 8" + } + }, + "node_modules/micromatch": { + "version": "4.0.5", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", + "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "dependencies": { + "braces": "^3.0.2", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/min-indent": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", + "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "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": "7.0.4", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", + "integrity": "sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==", + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/mkdirp": { + "version": "0.5.6", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-0.5.6.tgz", + "integrity": "sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==", + "dev": true, + "dependencies": { + "minimist": "^1.2.6" + }, + "bin": { + "mkdirp": "bin/cmd.js" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/mrmime": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", + "integrity": "sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", + "dev": true + }, + "node_modules/murmurhash-js": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/murmurhash-js/-/murmurhash-js-1.0.0.tgz", + "integrity": "sha512-TvmkNhkv8yct0SVBSy+o8wYzXjE4Zz3PCesbfs8HiCXXdcTuocApFv11UWlNFWKYsP2okqrhb7JNlSm9InBhIw==", + "dev": true + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-releases": { + "version": "2.0.14", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.14.tgz", + "integrity": "sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==", + "dev": true + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "engines": { + "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/nostr-tools": { + "version": "1.17.0", + "resolved": "https://registry.npmjs.org/nostr-tools/-/nostr-tools-1.17.0.tgz", + "integrity": "sha512-LZmR8GEWKZeElbFV5Xte75dOeE9EFUW/QLI1Ncn3JKn0kFddDKEfBbFN8Mu4TMs+L4HR/WTPha2l+PPuRnJcMw==", + "dev": true, + "dependencies": { + "@noble/ciphers": "0.2.0", + "@noble/curves": "1.1.0", + "@noble/hashes": "1.3.1", + "@scure/base": "1.1.1", + "@scure/bip32": "1.3.1", + "@scure/bip39": "1.2.1" + }, + "peerDependencies": { + "typescript": ">=5.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } + } + }, + "node_modules/nostr-tools/node_modules/@noble/hashes": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/@noble/hashes/-/hashes-1.3.1.tgz", + "integrity": "sha512-EbqwksQwz9xDRGfDST86whPBgM65E0OH/pCgqW0GBVzO22bNE+NuIbeTb714+IfSjU3aRk47EUvXIb5bTsenKA==", + "dev": true, + "engines": { + "node": ">= 16" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/nostr-tools/node_modules/@scure/base": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/@scure/base/-/base-1.1.1.tgz", + "integrity": "sha512-ZxOhsSyxYwLJj3pLZCefNitxsj093tb2vq90mp2txoYeBqbcjDjqFhyM8eUjq/uFm6zJ+mUuqxlS2FkuSY1MTA==", + "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ] + }, + "node_modules/nostr-tools/node_modules/@scure/bip39": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@scure/bip39/-/bip39-1.2.1.tgz", + "integrity": "sha512-Z3/Fsz1yr904dduJD0NpiyRHhRYHdcnyh73FZWiV+/qhWi83wNJ3NWolYqCEN+ZWsUz2TWwajJggcRE9r1zUYg==", + "dev": true, + "dependencies": { + "@noble/hashes": "~1.3.0", + "@scure/base": "~1.1.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "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==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "dev": true, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/once": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", + "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", + "dev": true, + "dependencies": { + "wrappy": "1" + } + }, + "node_modules/path-is-absolute": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", + "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==" + }, + "node_modules/path-scurry": { + "version": "1.10.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.10.1.tgz", + "integrity": "sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==", + "dependencies": { + "lru-cache": "^9.1.1 || ^10.0.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/pbf": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/pbf/-/pbf-3.2.1.tgz", + "integrity": "sha512-ClrV7pNOn7rtmoQVF4TS1vyU0WhYRnP92fzbfF75jAIwpnzdJXf8iTd4CMEqO4yUenH6NDqLiwjqlh6QgZzgLQ==", + "dev": true, + "dependencies": { + "ieee754": "^1.1.12", + "resolve-protobuf-schema": "^2.1.0" + }, + "bin": { + "pbf": "bin/pbf" + } + }, + "node_modules/periscopic": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/periscopic/-/periscopic-3.1.0.tgz", + "integrity": "sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw==", + "dependencies": { + "@types/estree": "^1.0.0", + "estree-walker": "^3.0.0", + "is-reference": "^3.0.0" + } + }, + "node_modules/periscopic/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/periscopic/node_modules/is-reference": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", + "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/picocolors": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", + "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==" + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "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==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.33", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", + "integrity": "sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", + "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "engines": { + "node": ">=14" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "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.15", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", + "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "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==" + }, + "node_modules/potpack": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/potpack/-/potpack-2.0.0.tgz", + "integrity": "sha512-Q+/tYsFU9r7xoOJ+y/ZTtdVQwTWfzjbiXBDMM/JKUux3+QPP02iUuIoeBQ+Ot6oEDlC+/PGjB/5A3K7KKb7hcw==", + "dev": true + }, + "node_modules/prettier": { + "version": "2.8.8", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-2.8.8.tgz", + "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", + "dev": true, + "bin": { + "prettier": "bin-prettier.js" + }, + "engines": { + "node": ">=10.13.0" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/prettier-plugin-svelte": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/prettier-plugin-svelte/-/prettier-plugin-svelte-2.10.1.tgz", + "integrity": "sha512-Wlq7Z5v2ueCubWo0TZzKc9XHcm7TDxqcuzRuGd0gcENfzfT4JZ9yDlCbEgxWgiPmLHkBjfOtpAWkcT28MCDpUQ==", + "dev": true, + "peerDependencies": { + "prettier": "^1.16.4 || ^2.0.0", + "svelte": "^3.2.0 || ^4.0.0-next.0" + } + }, + "node_modules/protocol-buffers-schema": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/protocol-buffers-schema/-/protocol-buffers-schema-3.6.0.tgz", + "integrity": "sha512-TdDRD+/QNdrCGCE7v8340QyuXd4kIWIgapsE2+n/SaGiSSbomYl4TjHlvIoCWRpE7wFt02EpB35VVA2ImcBVqw==", + "dev": true + }, + "node_modules/qr-code-styling": { + "version": "1.6.0-rc.1", + "resolved": "https://registry.npmjs.org/qr-code-styling/-/qr-code-styling-1.6.0-rc.1.tgz", + "integrity": "sha512-ModRIiW6oUnsP18QzrRYZSc/CFKFKIdj7pUs57AEVH20ajlglRpN3HukjHk0UbNMTlKGuaYl7Gt6/O5Gg2NU2Q==", + "dev": true, + "dependencies": { + "qrcode-generator": "^1.4.3" + } + }, + "node_modules/qr-scanner": { + "version": "1.4.2", + "resolved": "https://registry.npmjs.org/qr-scanner/-/qr-scanner-1.4.2.tgz", + "integrity": "sha512-kV1yQUe2FENvn59tMZW6mOVfpq9mGxGf8l6+EGaXUOd4RBOLg7tRC83OrirM5AtDvZRpdjdlXURsHreAOSPOUw==", + "dev": true, + "dependencies": { + "@types/offscreencanvas": "^2019.6.4" + } + }, + "node_modules/qrcode-base64": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/qrcode-base64/-/qrcode-base64-1.0.1.tgz", + "integrity": "sha512-B0BDmnRSvbj47Nq/+IeZjj22afNrf4rwIloNrSXN6OwnkoO+Q0hsUa53gCEfqNQjx+OcytF3azvQhi6wV2Tk6g==", + "dev": true + }, + "node_modules/qrcode-generator": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/qrcode-generator/-/qrcode-generator-1.4.4.tgz", + "integrity": "sha512-HM7yY8O2ilqhmULxGMpcHSF1EhJJ9yBj8gvDEuZ6M+KGJ0YY2hKpnXvRD+hZPLrDVck3ExIGhmPtSdcjC+guuw==", + "dev": true + }, + "node_modules/qs": { + "version": "6.11.2", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.2.tgz", + "integrity": "sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==", + "dev": true, + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "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/quickselect": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/quickselect/-/quickselect-2.0.0.tgz", + "integrity": "sha512-RKJ22hX8mHe3Y6wH/N3wCM6BWtjaxIyyUIkpHOvfFnxdI4yD4tBXEBKSbriGujF6jnSVkJrffuo6vxACiSSxIw==", + "dev": true + }, + "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==", + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/regenerator-runtime": { + "version": "0.14.1", + "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", + "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/resolve-protobuf-schema": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/resolve-protobuf-schema/-/resolve-protobuf-schema-2.1.0.tgz", + "integrity": "sha512-kI5ffTiZWmJaS/huM8wZfEMer1eRd7oJQhDuxeCLe3t7N7mX3z94CN0xPxBQxFYQTSNz9T0i+v6inKqSdK8xrQ==", + "dev": true, + "dependencies": { + "protocol-buffers-schema": "^3.3.1" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/rimraf": { + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-2.7.1.tgz", + "integrity": "sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==", + "dev": true, + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + } + }, + "node_modules/rimraf/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/rimraf/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dev": true, + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/rimraf/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/rollup": { + "version": "2.79.1", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", + "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", + "dev": true, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=10.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/rw": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/rw/-/rw-1.3.3.tgz", + "integrity": "sha512-PdhdWy89SiZogBLaw42zdeqtRJ//zFd2PgQavcICDUgJT5oW10QCRKbJ6bg4r0/UY2M6BWd5tkxuGFRvCkgfHQ==", + "dev": true + }, + "node_modules/sade": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/sade/-/sade-1.8.1.tgz", + "integrity": "sha512-xal3CZX1Xlo/k4ApwCFrHVACi9fBqJ7V+mwhBsuf/1IOKbBy098Fex+Wa/5QMubw09pSZ/u8EY8PWgevJsXp1A==", + "dev": true, + "dependencies": { + "mri": "^1.1.0" + }, + "engines": { + "node": ">=6" + } + }, + "node_modules/sander": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/sander/-/sander-0.5.1.tgz", + "integrity": "sha512-3lVqBir7WuKDHGrKRDn/1Ye3kwpXaDOMsiRP1wd6wpZW56gJhsbp5RqQpA6JG/P+pkXizygnr1dKR8vzWaVsfA==", + "dev": true, + "dependencies": { + "es6-promise": "^3.1.2", + "graceful-fs": "^4.1.3", + "mkdirp": "^0.5.1", + "rimraf": "^2.5.2" + } + }, + "node_modules/sass": { + "version": "1.71.1", + "resolved": "https://registry.npmjs.org/sass/-/sass-1.71.1.tgz", + "integrity": "sha512-wovtnV2PxzteLlfNzbgm1tFXPLoZILYAMJtvoXXkD7/+1uP41eKkIt1ypWq5/q2uT94qHjXehEYfmjKOvjL9sg==", + "dev": true, + "dependencies": { + "chokidar": ">=3.0.0 <4.0.0", + "immutable": "^4.0.0", + "source-map-js": ">=0.6.2 <2.0.0" + }, + "bin": { + "sass": "sass.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/screenfull": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/screenfull/-/screenfull-6.0.2.tgz", + "integrity": "sha512-AQdy8s4WhNvUZ6P8F6PB21tSPIYKniic+Ogx0AacBMjKP1GUHN2E9URxQHtCusiwxudnCKkdy4GrHXPPJSkCCw==", + "dev": true, + "engines": { + "node": "^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/set-cookie-parser": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/set-cookie-parser/-/set-cookie-parser-2.6.0.tgz", + "integrity": "sha512-RVnVQxTXuerk653XfuliOxBP81Sf0+qfQE73LIYKcyMYHG94AuH0kgrQpRDuTZnSmjpysHmzxJXKNfa6PjFhyQ==", + "dev": true + }, + "node_modules/set-function-length": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.0.tgz", + "integrity": "sha512-4DBHDoyHlM1IRPGYcoxexgh67y4ueR53FKV1yyxwFMY7aCqcN/38M1+SwZ/qJQ8iLv7+ck385ot4CcisOAPT9w==", + "dev": true, + "dependencies": { + "define-data-property": "^1.1.1", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.2", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/set-value": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/set-value/-/set-value-2.0.1.tgz", + "integrity": "sha512-JxHc1weCN68wRY0fhCoXpyK55m/XPHafOmK4UWD7m2CI14GMcFypt4w/0+NV5f/ZMby2F6S2wwA7fgynh9gWSw==", + "dev": true, + "dependencies": { + "extend-shallow": "^2.0.1", + "is-extendable": "^0.1.1", + "is-plain-object": "^2.0.3", + "split-string": "^3.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sha256-uint8array": { + "version": "0.10.7", + "resolved": "https://registry.npmjs.org/sha256-uint8array/-/sha256-uint8array-0.10.7.tgz", + "integrity": "sha512-1Q6JQU4tX9NqsDGodej6pkrUVQVNapLZnvkwIhddH/JqzBZF1fSaxSWNY6sziXBE8aEa2twtGkXUrwzGeZCMpQ==", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", + "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", + "dev": true, + "dependencies": { + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sirv": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/sirv/-/sirv-2.0.4.tgz", + "integrity": "sha512-94Bdh3cC2PKrbgSOUqTiGPWVZeSiXfKOVZNJniWoqrWrRkB1CJzBU3NEbiTsPcYy1lDsANA/THzS+9WBiy5nfQ==", + "dev": true, + "dependencies": { + "@polka/url": "^1.0.0-next.24", + "mrmime": "^2.0.0", + "totalist": "^3.0.0" + }, + "engines": { + "node": ">= 10" + } + }, + "node_modules/sorcery": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/sorcery/-/sorcery-0.11.0.tgz", + "integrity": "sha512-J69LQ22xrQB1cIFJhPfgtLuI6BpWRiWu1Y3vSsIwK/eAScqJxd/+CJlUuHQRdX2C9NGFamq+KqNywGgaThwfHw==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.4.14", + "buffer-crc32": "^0.2.5", + "minimist": "^1.2.0", + "sander": "^0.5.0" + }, + "bin": { + "sorcery": "bin/sorcery" + } + }, + "node_modules/sort-asc": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/sort-asc/-/sort-asc-0.2.0.tgz", + "integrity": "sha512-umMGhjPeHAI6YjABoSTrFp2zaBtXBej1a0yKkuMUyjjqu6FJsTF+JYwCswWDg+zJfk/5npWUUbd33HH/WLzpaA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-desc": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/sort-desc/-/sort-desc-0.2.0.tgz", + "integrity": "sha512-NqZqyvL4VPW+RAxxXnB8gvE1kyikh8+pR+T+CXLksVRN9eiQqkQlPwqWYU0mF9Jm7UnctShlxLyAt1CaBOTL1w==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/sort-object": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/sort-object/-/sort-object-3.0.3.tgz", + "integrity": "sha512-nK7WOY8jik6zaG9CRwZTaD5O7ETWDLZYMM12pqY8htll+7dYeqGfEUPcUBHOpSJg2vJOrvFIY2Dl5cX2ih1hAQ==", + "dev": true, + "dependencies": { + "bytewise": "^1.1.0", + "get-value": "^2.0.2", + "is-extendable": "^0.1.1", + "sort-asc": "^0.2.0", + "sort-desc": "^0.2.0", + "union-value": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-js": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", + "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/split-string/-/split-string-3.1.0.tgz", + "integrity": "sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==", + "dev": true, + "dependencies": { + "extend-shallow": "^3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/extend-shallow": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", + "integrity": "sha512-BwY5b5Ql4+qZoefgMj2NUmx+tehVTH/Kf4k1ZEtOHNFcm2wSxMRo992l6X3TIgni2eZVTZ85xMOjF31fwZAj6Q==", + "dev": true, + "dependencies": { + "assign-symbols": "^1.0.0", + "is-extendable": "^1.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/split-string/node_modules/is-extendable": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/is-extendable/-/is-extendable-1.0.1.tgz", + "integrity": "sha512-arnXMxT1hhoKo9k1LZdmlNyJdDDfy2v0fXjFlmok4+i8ul/6WlbVge9bhM74OpNPQPMGUToDtz+KXa1PneJxOA==", + "dev": true, + "dependencies": { + "is-plain-object": "^2.0.4" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-indent": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", + "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", + "dev": true, + "dependencies": { + "min-indent": "^1.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/sucrase/node_modules/glob": { + "version": "10.3.10", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.3.10.tgz", + "integrity": "sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==", + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^2.3.5", + "minimatch": "^9.0.1", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0", + "path-scurry": "^1.10.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/sucrase/node_modules/minimatch": { + "version": "9.0.3", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz", + "integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/supercluster": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/supercluster/-/supercluster-8.0.1.tgz", + "integrity": "sha512-IiOea5kJ9iqzD2t7QJq/cREyLHTtSmUT6gQsweojg9WH2sYJqZK9SswTu6jrscO6D1G5v5vYZ9ru/eq85lXeZQ==", + "dev": true, + "dependencies": { + "kdbush": "^4.0.2" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/svelte": { + "version": "4.2.9", + "resolved": "https://registry.npmjs.org/svelte/-/svelte-4.2.9.tgz", + "integrity": "sha512-hsoB/WZGEPFXeRRLPhPrbRz67PhP6sqYgvwcAs+gWdSQSvNDw+/lTeUJSWe5h2xC97Fz/8QxAOqItwBzNJPU8w==", + "dependencies": { + "@ampproject/remapping": "^2.2.1", + "@jridgewell/sourcemap-codec": "^1.4.15", + "@jridgewell/trace-mapping": "^0.3.18", + "@types/estree": "^1.0.1", + "acorn": "^8.9.0", + "aria-query": "^5.3.0", + "axobject-query": "^4.0.0", + "code-red": "^1.0.3", + "css-tree": "^2.3.1", + "estree-walker": "^3.0.3", + "is-reference": "^3.0.1", + "locate-character": "^3.0.0", + "magic-string": "^0.30.4", + "periscopic": "^3.1.0" + }, + "engines": { + "node": ">=16" + } + }, + "node_modules/svelte-adapter-bun": { + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/svelte-adapter-bun/-/svelte-adapter-bun-0.5.1.tgz", + "integrity": "sha512-eLbkKuoCaZPzVN20dg/oZOUybO16oEQCOQuzAI2jVLU90VbJ1P099bAlA+7H4KPGI2r2sdkfD1MppGAbk7PdMw==", + "dev": true, + "dependencies": { + "tiny-glob": "^0.2.9" + } + }, + "node_modules/svelte-hmr": { + "version": "0.15.3", + "resolved": "https://registry.npmjs.org/svelte-hmr/-/svelte-hmr-0.15.3.tgz", + "integrity": "sha512-41snaPswvSf8TJUhlkoJBekRrABDXDMdpNpT2tfHIv4JuhgvHqLMhEPGtaQn0BmbNSTkuz2Ed20DF2eHw0SmBQ==", + "dev": true, + "engines": { + "node": "^12.20 || ^14.13.1 || >= 16" + }, + "peerDependencies": { + "svelte": "^3.19.0 || ^4.0.0" + } + }, + "node_modules/svelte-outclick": { + "version": "3.7.0", + "resolved": "https://registry.npmjs.org/svelte-outclick/-/svelte-outclick-3.7.0.tgz", + "integrity": "sha512-BIFbIrAJu7P2IOJByjCe1iAtJkKQNRDkl/9YYiNtIclg/ZOerDAcW5DNtkJIFoiDrNvM9GcXi5NZXGgeOTTLxg==", + "dev": true, + "peerDependencies": { + "@sveltejs/kit": "1.x || 2.x", + "svelte": "3.x || 4.x" + }, + "peerDependenciesMeta": { + "@sveltejs/kit": { + "optional": true + } + } + }, + "node_modules/svelte-preprocess": { + "version": "5.1.3", + "resolved": "https://registry.npmjs.org/svelte-preprocess/-/svelte-preprocess-5.1.3.tgz", + "integrity": "sha512-xxAkmxGHT+J/GourS5mVJeOXZzne1FR5ljeOUAMXUkfEhkLEllRreXpbl3dIYJlcJRfL1LO1uIAPpBpBfiqGPw==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "@types/pug": "^2.0.6", + "detect-indent": "^6.1.0", + "magic-string": "^0.30.5", + "sorcery": "^0.11.0", + "strip-indent": "^3.0.0" + }, + "engines": { + "node": ">= 16.0.0", + "pnpm": "^8.0.0" + }, + "peerDependencies": { + "@babel/core": "^7.10.2", + "coffeescript": "^2.5.1", + "less": "^3.11.3 || ^4.0.0", + "postcss": "^7 || ^8", + "postcss-load-config": "^2.1.0 || ^3.0.0 || ^4.0.0 || ^5.0.0", + "pug": "^3.0.0", + "sass": "^1.26.8", + "stylus": "^0.55.0", + "sugarss": "^2.0.0 || ^3.0.0 || ^4.0.0", + "svelte": "^3.23.0 || ^4.0.0-next.0 || ^4.0.0 || ^5.0.0-next.0", + "typescript": ">=3.9.5 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "@babel/core": { + "optional": true + }, + "coffeescript": { + "optional": true + }, + "less": { + "optional": true + }, + "postcss": { + "optional": true + }, + "postcss-load-config": { + "optional": true + }, + "pug": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "typescript": { + "optional": true + } + } + }, + "node_modules/svelte-virtual-scroll-list": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/svelte-virtual-scroll-list/-/svelte-virtual-scroll-list-1.3.0.tgz", + "integrity": "sha512-rkU993mMsTboFRlygExhYeLJwysaFxyzfTsAfOtDklGIyd0wB31eZtYSAHAcz/WaZCEwjn+GKXfx5jM1xUv3GQ==", + "dev": true, + "peerDependencies": { + "svelte": ">=3.5.0" + } + }, + "node_modules/svelte/node_modules/estree-walker": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/estree-walker/-/estree-walker-3.0.3.tgz", + "integrity": "sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==", + "dependencies": { + "@types/estree": "^1.0.0" + } + }, + "node_modules/svelte/node_modules/is-reference": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/is-reference/-/is-reference-3.0.2.tgz", + "integrity": "sha512-v3rht/LgVcsdZa3O2Nqs+NMowLOxeOm7Ay9+/ARQ2F+qEoANRcqrjAZKGN0v8ymUetZGgkp26LTnGT7H0Qo9Pg==", + "dependencies": { + "@types/estree": "*" + } + }, + "node_modules/sveltekit-i18n": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/sveltekit-i18n/-/sveltekit-i18n-2.4.2.tgz", + "integrity": "sha512-hjRWn4V4DBL8JQKJoJa3MRvn6d32Zo+rWkoSP5bsQ/XIAguPdQUZJ8LMe6Nc1rST8WEVdu9+vZI3aFdKYGR3+Q==", + "dev": true, + "dependencies": { + "@sveltekit-i18n/base": "~1.3.0", + "@sveltekit-i18n/parser-default": "~1.1.0" + }, + "peerDependencies": { + "svelte": ">=3.49.0" + } + }, + "node_modules/tabbable": { + "version": "6.2.0", + "resolved": "https://registry.npmjs.org/tabbable/-/tabbable-6.2.0.tgz", + "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==" + }, + "node_modules/tailwind-merge": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-2.2.1.tgz", + "integrity": "sha512-o+2GTLkthfa5YUt4JxPfzMIpQzZ3adD1vLVkvKE1Twl9UAhGsEbIZhHHZVRttyW177S8PDJI3bTQNaebyofK3Q==", + "dependencies": { + "@babel/runtime": "^7.23.7" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwind-scrollbar": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/tailwind-scrollbar/-/tailwind-scrollbar-2.1.0.tgz", + "integrity": "sha512-zpvY5mDs0130YzYjZKBiDaw32rygxk5RyJ4KmeHjGnwkvbjm/PszON1m4Bbt2DkMRIXlXsfNevykAESgURN4KA==", + "dev": true, + "engines": { + "node": ">=12.13.0" + }, + "peerDependencies": { + "tailwindcss": "3.x" + } + }, + "node_modules/tailwind-variants": { + "version": "0.1.20", + "resolved": "https://registry.npmjs.org/tailwind-variants/-/tailwind-variants-0.1.20.tgz", + "integrity": "sha512-AMh7x313t/V+eTySKB0Dal08RHY7ggYK0MSn/ad8wKWOrDUIzyiWNayRUm2PIJ4VRkvRnfNuyRuKbLV3EN+ewQ==", + "dependencies": { + "tailwind-merge": "^1.14.0" + }, + "engines": { + "node": ">=16.x", + "pnpm": ">=7.x" + }, + "peerDependencies": { + "tailwindcss": "*" + } + }, + "node_modules/tailwind-variants/node_modules/tailwind-merge": { + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/tailwind-merge/-/tailwind-merge-1.14.0.tgz", + "integrity": "sha512-3mFKyCo/MBcgyOTlrY8T7odzZFx+w+qKSMAmdFzRvqBfLlSigU6TZnlFHK0lkMwj9Bj8OYU+9yW9lmGuS0QEnQ==", + "funding": { + "type": "github", + "url": "https://github.com/sponsors/dcastil" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.1", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.1.tgz", + "integrity": "sha512-qAYmXRfk3ENzuPBakNK0SRrUDipP8NQnEY6772uDhflcQz5EhRdD7JNZxyrFHVQNCwULPBn6FNPp9brpO7ctcA==", + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.19.1", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/tiny-glob": { + "version": "0.2.9", + "resolved": "https://registry.npmjs.org/tiny-glob/-/tiny-glob-0.2.9.tgz", + "integrity": "sha512-g/55ssRPUjShh+xkfx9UPDXqhckHEsHr4Vd9zX55oSdGZc/MD0m3sferOkwWtp98bv+kcVfEHtRJgBVJzelrzg==", + "dev": true, + "dependencies": { + "globalyzer": "0.1.0", + "globrex": "^0.1.2" + } + }, + "node_modules/tinyqueue": { + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/tinyqueue/-/tinyqueue-2.0.3.tgz", + "integrity": "sha512-ppJZNDuKGgxzkHihX8v9v9G5f+18gzaTfrukGrq6ueg0lmH4nqVnA2IPG0AEH3jKEk2GRJCUhDoqpoiw3PHLBA==", + "dev": true + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/totalist": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/totalist/-/totalist-3.0.1.tgz", + "integrity": "sha512-sf4i37nQ2LBx4m3wB74y+ubopq6W/dIzXg0FDGjsYnZHVa1Da8FH853wlL2gtUhg+xJXjfk3kUZS3BRoQeoQBQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==" + }, + "node_modules/tslib": { + "version": "2.6.2", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.6.2.tgz", + "integrity": "sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q==" + }, + "node_modules/typewise": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/typewise/-/typewise-1.0.3.tgz", + "integrity": "sha512-aXofE06xGhaQSPzt8hlTY+/YWQhm9P0jYUp1f2XtmW/3Bk0qzXcyFWAtPoo2uTGQj1ZwbDuSyuxicq+aDo8lCQ==", + "dev": true, + "dependencies": { + "typewise-core": "^1.2.0" + } + }, + "node_modules/typewise-core": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/typewise-core/-/typewise-core-1.2.0.tgz", + "integrity": "sha512-2SCC/WLzj2SbUwzFOzqMCkz5amXLlxtJqDKTICqg30x+2DZxcfZN2MvQZmGfXWKNWaKK9pBPsvkcwv8bF/gxKg==", + "dev": true + }, + "node_modules/uint8array-extras": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/uint8array-extras/-/uint8array-extras-1.1.0.tgz", + "integrity": "sha512-CVaBSyOmGoFHu+zOVPbetXEXykOd8KHVBHLlqvmaMWpwcq3rewj18xVNbU5uzf48hclnNQhfNaNany2cMHFK/g==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/union-value": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/union-value/-/union-value-1.0.1.tgz", + "integrity": "sha512-tJfXmxMeWYnczCVs7XAEvIV7ieppALdyepWMkHkwciRpZraG/xwT+s2JN8+pr1+8jCRf80FFzvr+MpQeeoF4Xg==", + "dev": true, + "dependencies": { + "arr-union": "^3.1.0", + "get-value": "^2.0.6", + "is-extendable": "^0.1.1", + "set-value": "^2.0.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/unique-names-generator": { + "version": "4.7.1", + "resolved": "https://registry.npmjs.org/unique-names-generator/-/unique-names-generator-4.7.1.tgz", + "integrity": "sha512-lMx9dX+KRmG8sq6gulYYpKWZc9RlGsgBR6aoO8Qsm3qvkSJ+3rAymr+TnV8EDMrIrwuFJ4kruzMWM/OpYzPoow==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", + "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.1.1", + "picocolors": "^1.0.0" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" + }, + "node_modules/uuid": { + "version": "9.0.1", + "resolved": "https://registry.npmjs.org/uuid/-/uuid-9.0.1.tgz", + "integrity": "sha512-b+1eJOlsR9K8HJpow9Ok3fiWOWSIcIzXodvv0rQjVoOVNpWMpxf1wZNpt4y9h10odCNrqnYp1OBzRktckBe3sA==", + "dev": true, + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/vite": { + "version": "5.0.12", + "resolved": "https://registry.npmjs.org/vite/-/vite-5.0.12.tgz", + "integrity": "sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==", + "dev": true, + "dependencies": { + "esbuild": "^0.19.3", + "postcss": "^8.4.32", + "rollup": "^4.2.0" + }, + "bin": { + "vite": "bin/vite.js" + }, + "engines": { + "node": "^18.0.0 || >=20.0.0" + }, + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.3" + }, + "peerDependencies": { + "@types/node": "^18.0.0 || >=20.0.0", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } + } + }, + "node_modules/vite/node_modules/rollup": { + "version": "4.9.6", + "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.9.6.tgz", + "integrity": "sha512-05lzkCS2uASX0CiLFybYfVkwNbKZG5NFQ6Go0VWyogFTXXbR039UVsegViTntkk4OglHBdF54ccApXRRuXRbsg==", + "dev": true, + "dependencies": { + "@types/estree": "1.0.5" + }, + "bin": { + "rollup": "dist/bin/rollup" + }, + "engines": { + "node": ">=18.0.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "@rollup/rollup-android-arm-eabi": "4.9.6", + "@rollup/rollup-android-arm64": "4.9.6", + "@rollup/rollup-darwin-arm64": "4.9.6", + "@rollup/rollup-darwin-x64": "4.9.6", + "@rollup/rollup-linux-arm-gnueabihf": "4.9.6", + "@rollup/rollup-linux-arm64-gnu": "4.9.6", + "@rollup/rollup-linux-arm64-musl": "4.9.6", + "@rollup/rollup-linux-riscv64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-gnu": "4.9.6", + "@rollup/rollup-linux-x64-musl": "4.9.6", + "@rollup/rollup-win32-arm64-msvc": "4.9.6", + "@rollup/rollup-win32-ia32-msvc": "4.9.6", + "@rollup/rollup-win32-x64-msvc": "4.9.6", + "fsevents": "~2.3.2" + } + }, + "node_modules/vitefu": { + "version": "0.2.5", + "resolved": "https://registry.npmjs.org/vitefu/-/vitefu-0.2.5.tgz", + "integrity": "sha512-SgHtMLoqaeeGnd2evZ849ZbACbnwQCIwRH57t18FxcXoZop0uQu0uzlIhJBlF/eWVzuce0sHeqPcDo+evVcg8Q==", + "dev": true, + "peerDependencies": { + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0" + }, + "peerDependenciesMeta": { + "vite": { + "optional": true + } + } + }, + "node_modules/vt-pbf": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/vt-pbf/-/vt-pbf-3.1.3.tgz", + "integrity": "sha512-2LzDFzt0mZKZ9IpVF2r69G9bXaP2Q2sArJCmcCgvfTdCCZzSyz4aCLoQyUilu37Ll56tCblIZrXFIjNUpGIlmA==", + "dev": true, + "dependencies": { + "@mapbox/point-geometry": "0.1.0", + "@mapbox/vector-tile": "^1.3.1", + "pbf": "^3.2.1" + } + }, + "node_modules/which": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", + "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "which": "bin/which" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==" + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrappy": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", + "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", + "dev": true + }, + "node_modules/yaml": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", + "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "engines": { + "node": ">= 14" + } + } + } +} diff --git a/package.json b/package.json index 1a3f9638..885d5495 100644 --- a/package.json +++ b/package.json @@ -6,6 +6,7 @@ "build": "vite build", "docker": "docker build . -t coinos-ui", "preview": "vite preview", + "sync": "bun svelte-kit sync", "lint": "prettier --check --plugin-search-dir=. .", "format": "prettier --write --plugin-search-dir=. ." }, @@ -35,6 +36,7 @@ "qr-scanner": "^1.4.2", "qrcode-base64": "^1.0.1", "rollup": "^2.79.1", + "sass": "^1.71.1", "screenfull": "^6.0.2", "svelte": "^4.0.0", "svelte-adapter-bun": "^0.5.1", @@ -49,5 +51,15 @@ "uuid": "^9.0.0", "vite": "^5.0.0" }, - "type": "module" + "type": "module", + "dependencies": { + "@types/gsap": "^3.0.0", + "bits-ui": "^0.17.0", + "bun": "^1.0.26", + "clsx": "^2.1.0", + "gsap": "^3.12.5", + "lucide-svelte": "^0.323.0", + "tailwind-merge": "^2.2.1", + "tailwind-variants": "^0.1.20" + } } diff --git a/src/app.css b/src/app.css index 3f0cbbd0..bcd5421c 100644 --- a/src/app.css +++ b/src/app.css @@ -1,6 +1,89 @@ +@import url('https://fonts.googleapis.com/css2?family=Bebas+Neue&display=swap'); +@import url('https://fonts.googleapis.com/css2?family=Bebas+Neue&family=Inter:wght@100;200;300;400;500;600;700;800;900&family=Work+Sans:ital,wght@0,100;0,200;0,300;0,400;0,500;0,600;0,700;0,800;0,900;1,100;1,200;1,300;1,400;1,500;1,600;1,700;1,800;1,900&display=swap'); @tailwind base; @tailwind components; @tailwind utilities; + +@layer base { + :root { + --background: 0 0% 100%; + --foreground: 224 71.4% 4.1%; + + --muted: 220 14.3% 95.9%; + --muted-foreground: 220 8.9% 46.1%; + + --popover: 0 0% 100%; + --popover-foreground: 224 71.4% 4.1%; + + --card: 0 0% 100%; + --card-foreground: 224 71.4% 4.1%; + + --border: 220 13% 91%; + --input: 220 13% 91%; + + --primary: 220.9 39.3% 11%; + --primary-foreground: 210 20% 98%; + + --secondary: 220 14.3% 95.9%; + --secondary-foreground: 220.9 39.3% 11%; + + --accent: 220 14.3% 95.9%; + --accent-foreground: 220.9 39.3% 11%; + + --destructive: 0 72.2% 50.6%; + --destructive-foreground: 210 20% 98%; + + --ring: 224 71.4% 4.1%; + + --radius: 0.5rem; + } + + .dark { + --background: 224 71.4% 4.1%; + --foreground: 210 20% 98%; + + --muted: 215 27.9% 16.9%; + --muted-foreground: 217.9 10.6% 64.9%; + + --popover: 224 71.4% 4.1%; + --popover-foreground: 210 20% 98%; + + --card: 224 71.4% 4.1%; + --card-foreground: 210 20% 98%; + + --border: 215 27.9% 16.9%; + --input: 215 27.9% 16.9%; + + --primary: 210 20% 98%; + --primary-foreground: 220.9 39.3% 11%; + + --secondary: 215 27.9% 16.9%; + --secondary-foreground: 210 20% 98%; + + --accent: 215 27.9% 16.9%; + --accent-foreground: 210 20% 98%; + + --destructive: 0 62.8% 30.6%; + --destructive-foreground: 210 20% 98%; + + --ring: 216 12.2% 83.9%; + } +} + +@layer base { + * { + @apply border-border; + } + body { + @apply bg-background text-foreground; + } +} + +@layer components { + .input-swapee { + @apply bg-primary text-gray-700 dark:text-gray-100 dark:bg-stone-700 border-0 focus:outline-none focus:ring-2 hover:ring-2 ring-swapee-purple ring-offset-swapee-purple ease-in-out transition-all duration-500; + } +} @font-face { font-family: "PublicSans"; @@ -9,7 +92,7 @@ } html { - font-family: PublicSans, sans-serif; + font-family: 'Inter', sans-serif; } :root { @@ -29,6 +112,46 @@ html { background-color: white; } +/* SCROLL BAR */ +::-webkit-scrollbar { + width: 4px; + scrollbar-width: thin; + scrollbar-color: #f7f7f7; +} + +@media (min-width: 720px) { + ::-webkit-scrollbar { + width: 12px; + } +} + +::-webkit-scrollbar-thumb { + background-color: #222; +} + +.dark > body { + background-color: #000 +} + +.dark > body::-webkit-scrollbar-thumb { + background-color: #fff; +} + +/* to paint the profile page, because the way the page is built, the only way is to paint the body tag :/ */ +.dark > body::-webkit-scrollbar-track { + background-color: #000; +} + +input:-webkit-autofill, +input:-webkit-autofill:focus { + transition: background-color 600000s 0s, color 600000s 0s; +} +input[data-autocompleted] { + background-color: transparent !important; +} + +/* SCROLL BAR */ + input, textarea { @apply block border rounded-2xl px-5 py-4 w-full; diff --git a/src/app.html b/src/app.html index 28f07d06..475a15fb 100644 --- a/src/app.html +++ b/src/app.html @@ -2,7 +2,7 @@ <html lang="en"> <head> <meta charset="utf-8" /> - <link rel="icon" href="%sveltekit.assets%/favicon.svg" /> + <link rel="icon" href="%sveltekit.assets%/favicon.png" /> <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no" diff --git a/src/components/AppHeader.svelte b/src/components/AppHeader.svelte index 26982456..42536e62 100644 --- a/src/components/AppHeader.svelte +++ b/src/components/AppHeader.svelte @@ -41,36 +41,45 @@ {#if !$loading} <header - class="bg-gradient-to-r {$colorTheme} h-[175px] w-full relative bg-cover mb-20" + class="bg-gradient-to-r {$colorTheme} dark:!from-violet-600 dark:!to-swapee-purple h-[175px] w-full relative bg-cover mb-20" style:background-image={bg} > - <nav class="flex justify-end items-center space-x-4 p-5"> + <nav class="flex justify-end items-center gap-x-2 xs:gap-x-4 p-5"> {#if user} <a href={`/${user.username}`}> <button - class="bg-white p-2 rounded-full w-12 h-12 md:w-16 md:h-16 drop-shadow-xl border border-black/10 {$page + class="bg-white dark:bg-black p-2 rounded-full w-12 h-12 md:w-16 md:h-16 drop-shadow-xl border border-black/10 {$page .url.pathname === `/${user.username}` ? 'opacity-100' : 'opacity-70 hover:opacity-80'}" - ><Icon icon="home" style="mx-auto w-6 md:w-8" /> + ><Icon icon="home" style="mx-auto w-6 md:w-8 dark:invert" /> + </button> + </a> + <a href={`/${user.username}/buy`}> + <button + class="bg-white dark:bg-black p-2 rounded-full w-12 h-12 md:w-16 md:h-16 drop-shadow-xl border border-black/10 {$page + .url.pathname === `/${user.username}/buy` + ? 'opacity-100' + : 'opacity-70 hover:opacity-80'}" + ><Icon icon="shop" style="mx-auto w-6 md:w-8 dark:invert" /> </button> </a> <a href={`/${user.username}/receive`}> <button - class="bg-white p-2 rounded-full w-12 h-12 md:w-16 md:h-16 drop-shadow-xl border border-black/10 {$page + class="bg-white dark:bg-black p-2 rounded-full w-12 h-12 md:w-16 md:h-16 drop-shadow-xl border border-black/10 {$page .url.pathname === `/${user.username}/receive` ? 'opacity-100' : 'opacity-70 hover:opacity-80'}" - ><Icon icon="numpad" style="mx-auto w-6 md:w-8" /> + ><Icon icon="numpad" style="mx-auto w-6 md:w-8 dark:invert" /> </button> </a> <a href={`/${user.username}/payments`}> <button - class="bg-white p-2 rounded-full w-12 h-12 md:w-16 md:h-16 drop-shadow-xl border border-black/10 {$page + class="bg-white dark:bg-black p-2 rounded-full w-12 h-12 md:w-16 md:h-16 drop-shadow-xl border border-black/10 {$page .url.pathname === `/${user.username}/payments` ? 'opacity-100' : 'opacity-70 hover:opacity-80'} relative" - ><Icon icon="clock" style="mx-auto w-6 md:w-8" /> + ><Icon icon="clock" style="mx-auto w-6 md:w-8 dark:invert" /> {#if $newPayment} <span class="absolute top-0 right-0"> <span class="flex h-3 w-3"> @@ -87,17 +96,17 @@ </a> <a href={`/send`}> <button - class="bg-white p-2 rounded-full w-12 h-12 md:w-16 md:h-16 drop-shadow-xl border border-black/10 {$page + class="bg-white dark:bg-black p-2 rounded-full w-12 h-12 md:w-16 md:h-16 drop-shadow-xl border border-black/10 {$page .url.pathname === `/send` ? 'opacity-100' : 'opacity-70 hover:opacity-80'}" - ><Icon icon="send" style="mx-auto w-6 md:w-8" /> + ><Icon icon="send" style="mx-auto w-6 md:w-8 dark:invert" /> </button> </a> <div class="relative"> <OutClick on:outclick={() => (showMenu = false)}> <button - class="bg-white p-2 rounded-full w-12 h-12 md:w-16 md:h-16 drop-shadow-xl border border-black/10 {$page + class="bg-white dark:bg-black p-2 rounded-full w-12 h-12 md:w-16 md:h-16 drop-shadow-xl border border-black/10 {$page .url.pathname === `/${user.username}` || $page.url.pathname === `/${user.username}/settings` || $page.url.pathname === `/support` @@ -106,36 +115,37 @@ showMenu ? 'opacity-80' : '' }`}" on:click={() => (showMenu = !showMenu)} - ><Icon icon="menu" style="mx-auto w-6 md:w-8" /> + ><Icon icon="menu" style="mx-auto w-6 md:w-8 dark:invert" /> </button> <div class="{showMenu ? 'block' - : 'hidden'} absolute top-14 right-0 bg-white rounded-3xl p-8 shadow-xl z-50" + : 'hidden'} absolute top-14 right-0 bg-white dark:bg-black dark:border-2 dark:border-gray-50 rounded-3xl p-8 shadow-xl z-50" > <ul class="space-y-5 w-48"> {#each menuButtons as { href, icon, key }} <li> <a {href} data-sveltekit-prefetch="off"> <button - class="flex justify-center items-center font-semibold hover:opacity-80" - ><Icon {icon} style="mr-2 w-6 md:w-8" /> {$t(key)} + class="flex justify-center items-center font-semibold hover:opacity-80 dark:hover:opacity-70" + ><Icon {icon} style="mr-2 w-6 md:w-8 dark:invert" /> {$t(key)} </button> </a> </li> {/each} </ul> - <hr class="my-4" /> - <a href="/" - ><img src="/images/logo.svg" alt="Swapee" class="w-32" /></a - > + <hr class="my-4 dark:border-white" /> + <a href="/"> + <img src="/images/logo.svg" alt="Swapee" class="w-32 dark:hidden" /> + <img src="/images/logo-white.png" alt="Swapee" class="w-32 hidden dark:block" /> + </a> </div> </OutClick> </div> {:else} <a href={`/login?redirect=${$page.url.pathname}`}> - <button class="bg-white px-5 py-2 rounded-xl font-semibold text-sm" + <button class="bg-white dark:bg-black px-5 py-2 rounded-xl font-semibold text-sm" >{$t("nav.signIn")}</button > </a> diff --git a/src/components/Balance.svelte b/src/components/Balance.svelte index 98a04ef6..d72f10e6 100644 --- a/src/components/Balance.svelte +++ b/src/components/Balance.svelte @@ -21,13 +21,13 @@ {:else} <div class="text-5xl font-bold tabular-nums"> {#if isNaN(rate)} - <div class="text-gray-200">—</div> + <div class="text-gray-200 ">—</div> {:else} {f((user.balance * rate) / sats, user.currency)} {/if} </div> - <div class="text-secondary text-2xl"> + <div class="text-secondary dark:text-gray-300 text-2xl"> ⚡️{s(user.balance)} </div> {/if} diff --git a/src/components/Code.svelte b/src/components/Code.svelte index c8c1058a..9d54cc7b 100644 --- a/src/components/Code.svelte +++ b/src/components/Code.svelte @@ -6,7 +6,7 @@ </script> <div - class="bg-black text-white rounded-lg p-4 flex gap-4 whitespace-pre-wrap font-mono" + class="bg-stone-900 dark:bg-stone-800 text-white rounded-lg p-4 px-5 flex gap-4 whitespace-pre-wrap font-mono shadow-inner shadow-stone-950 dark:shadow-stone-900" > <div class="overflow-x-scroll max-w-full scrollbar-hide"> <div class="break-all min-w-[800px]">{samples[sample]}</div> diff --git a/src/components/Footer.svelte b/src/components/Footer.svelte index 92fb23c6..12977900 100644 --- a/src/components/Footer.svelte +++ b/src/components/Footer.svelte @@ -14,62 +14,50 @@ { url: "/support", titleID: "support" }, ]; </script> +<footer class="pt-16 bg-black"> + <div class="max-w-[1296px] mx-auto px-8"> + <!-- footer_top --> + <div class="footer_top pb-4"> + <div class="flex-col md:flex-row flex md:items-center justify-between"> + <div class="flex-1 mb-12 sm:mb-5"> + <a href="#" class="footer_logo"><img src="images/footer-logo.png" alt="" /></a> + <p class="text-gray-200 mt-10">Copyright © 2023. Swapee.me</p> + <p class="text-gray-200 mt-3">All rights reserved.</p> + <a href="#" class="btn_language inline-block mt-6 font-bold !text-white hover:!text-black">English</a> + </div> + <div + class="flex-1 footer_top_right flex items-center justify-start md:justify-center " + > + <div class="flex max-sm:flex-col md:justify-end gap-x-6"> + <div class="flex-1 xl:mb-0 mb-4 md:pr-0 sm:pr-5"> + <h6 class="!text-white/80 mb-0">Business enquiries</h6> + <a href="mailto:[email protected]">[email protected]</a> + </div> + <div class="flex-1 xs:pr-5 mb-4 md:pr-0 sm:pr-5"> + <h6 class="!text-white/80 mb-0">Support enquiries</h6> + <a href="mailto:[email protected]">[email protected]</a> + </div> + </div> + </div> + </div> -<footer - class="space-y-10 md:space-y-0 text-xl block md:flex justify-around mb-20" -> - <div class="space-y-5"> - <div class="text-center w-full"> - <a href="/"><Icon icon="logo" style="w-48 mx-auto md:mx-0" /></a> - </div> - <div class="flex gap-2 justify-center sm:hidden"> - <div> - <a href="/register"> - <button - class="bg-black text-white border rounded-full px-4 py-2 font-bold hover:opacity-80 text-lg" - > - {$t("nav.startInSeconds")} - </button> - </a> - </div> - </div> - <div class="w-full flex"> - <div class="mx-auto"> - <LocaleSelector - style="p-2 text-center hover:opacity-80 cursor-pointer border rounded-full" - /> - </div> - </div> - </div> - - <div class="text-center md:text-left"> - <p class="font-semibold">{$t("footer.followUs")}</p> - <ul class="mt-5 text-secondary space-y-3 font-medium"> - {#each followLinks as link} - <li> - <a - href={link.url} - target="_blank" - rel="noreferrer" - class="hover:opacity-80">{$t("footer." + link.titleID)}</a - > - </li> - {/each} - </ul> - </div> - - <div class="text-center md:text-left"> - <p class="font-semibold">{$t("footer.company")}</p> - <ul class="mt-5 text-secondary space-y-3"> - {#each companyLinks as link} - <li> - <a href={link.url} class="hover:opacity-80" - >{$t("footer." + link.titleID)}</a - > - </li> - {/each} - </ul> - </div> - - <Icon icon="shield" style="mx-auto md:mx-0" /> + <!-- footer_bottom --> + <div class="footer_bottom pt-4 pb-2"> + <ul class="list-unstyled mb-0 ps-0"> + <li class="pb-3 "> + <a href="/docs" class="!text-white/80 opacity-100 hover:!text-swapee-purple/100 font-semibold">Documentation</a> + </li> + <li class="pb-3"> + <a href="/privacy" class="!text-white/80 opacity-100 hover:!text-swapee-purple/100 font-semibold">Privacy Policy</a> + </li> + <li class="pb-3"> + <a href="/support" class="!text-white/80 opacity-100 hover:!text-swapee-purple/100 font-semibold">Support</a> + </li> + <li class="pb-3"> + <a href="/sitemap" class="!text-white/80 opacity-100 hover:!text-swapee-purple/100 font-semibold">Sitemap</a> + </li> + </ul> + </div> + </div> + </div> </footer> diff --git a/src/components/LandingHeader.svelte b/src/components/LandingHeader.svelte index 009ab063..e0a2aad0 100644 --- a/src/components/LandingHeader.svelte +++ b/src/components/LandingHeader.svelte @@ -19,13 +19,14 @@ </script> <header - class="w-full lg:w-5/6 py-5 mx-auto fixed md:sticky z-10 top-0 bg-white/90" + class="w-full container px-10 lg:px-40 md:pb-5 pt-5 mx-auto fixed md:sticky z-10 top-0 bg-white/80 dark:bg-black/80 backdrop-blur-sm" bind:this={header} > - <nav class="block xl:flex flex-wrap justify-between items-center"> + <nav class="reltive flex flex-wrap justify-between items-center max-md:pb-4"> <div class="flex justify-start md:justify-center items-center md:space-x-10"> - <a href="/" on:click={() => scroll(header)}> - <img src="images/logo.png" class="max-w-[140px]" /> + <a href="/" on:click={() => scroll(header)} class=""> + <img src="images/logo.png" class="max-w-[140px] dark:hidden" alt="swapee logo" /> + <img src="images/logo-white.png" class="max-w-[140px] hidden dark:inline-block" alt="swapee logo" /> </a> </div> @@ -46,24 +47,24 @@ {/if} {#if user} <button - class="border rounded-full px-6 py-2 font-bold" + class="dark:!bg-black dark:!text-white border-black dark:!border-white !border-2 !font-bold px-6 py-2 rounded-full" on:click={() => goto(`/${user.username}`)} - >Home + >Home </button> <button - class="bg-black text-white border rounded-full px-6 py-2 font-bold" + class="bg-black dark:!bg-white dark:!text-black !text-white border-2 border-black rounded-full px-6 py-2 font-bold" on:click={() => goto("/logout")} > {$t("nav.signOut")} </button> {:else} <button - class="border rounded-full px-6 py-2 font-bold hover:opacity-80" + class="dark:!bg-black dark:!text-white border-black dark:!border-white !border-2 !font-bold px-6 py-2 rounded-full hover:opacity-80" on:click={() => goto("/register")} >{$t("nav.startInSeconds")} </button> <button - class="bg-black text-white border rounded-full px-6 py-2 font-bold hover:opacity-80" + class="bg-black dark:!bg-white dark:!text-black !text-white border-2 border-black rounded-full px-6 py-2 font-bold hover:opacity-80" on:click={() => goto("/login")} > {$t("nav.signIn")} @@ -73,46 +74,46 @@ <!-- mobile nav --> <button - class="block md:hidden absolute top-[34.5px] right-10 z" + class="scale-125 z-50 md:hidden" on:click={() => (showMobileMenu = !showMobileMenu)} - ><Icon icon={!showMobileMenu ? "menu" : "close"} /> + ><Icon icon={!showMobileMenu ? "menu" : "close"} style="dark:invert" /> </button> <div class="container w-full px-10 md:hidden absolute top-0 {showMobileMenu ? 'right-0' - : 'right-[-100%]'} transition-all ease-in-out duration-300 h-[100vh] w-full bg-white" + : 'right-[-100%]'} transition-all ease-in-out duration-300 h-[100vh] w-full bg-white dark:bg-black" > <div class="space-y-8 mt-24 font-bold text-xl"> - <button on:click={() => mobileMenuButtonClick(howItWorks)} class="block" + <button on:click={() => mobileMenuButtonClick(howItWorks)} class="block dark:!text-gray-200" >{$t("howItWorks.header")}</button > - <button on:click={() => mobileMenuButtonClick(faq)} class="block" + <button on:click={() => mobileMenuButtonClick(faq)} class="block dark:!text-gray-200" >{$t("faq.header")}</button > - <button on:click={() => mobileMenuButtonClick(about)} class="block" + <button on:click={() => mobileMenuButtonClick(about)} class="block dark:!text-gray-200" >{$t("about.header")}</button > {#if !user} <button - class="border rounded-full px-6 py-2 font-bold block w-full" + class="dark:!bg-black dark:!text-white border-black dark:!border-white !border-2 !font-bold px-6 py-2 rounded-full w-full" on:click={() => goto("/register")} >{$t("nav.startInSeconds")} </button> <button - class="bg-black text-white border rounded-full px-6 py-2 font-bold block w-full" + class="bg-black dark:!bg-white dark:!text-black !text-white border-2 border-black rounded-full px-6 py-2 font-bold w-full" on:click={() => goto("/login")} > {$t("nav.signIn")} </button> {:else} <button - class="border rounded-full px-6 py-2 font-bold block" + class="dark:!bg-black dark:!text-white border-black dark:!border-white !border-2 !font-bold px-6 py-2 rounded-full" on:click={() => goto(`/${user.username}`)} >{$t("nav.account")} </button> <button - class="bg-black text-white border rounded-full px-6 py-2 font-bold block" + class="bg-black dark:!bg-white dark:!text-black !text-white border-2 border-black rounded-full px-6 py-2 font-bold w-full" on:click={() => goto("/logout")} > {$t("nav.signOut")} @@ -124,6 +125,7 @@ </header> <style> + @import '../../static/style.css'; .z { z-index: 100; } diff --git a/src/components/Numpad.svelte b/src/components/Numpad.svelte index 901d11ba..aa109f7e 100644 --- a/src/components/Numpad.svelte +++ b/src/components/Numpad.svelte @@ -183,7 +183,7 @@ <div class="text-5xl md:text-6xl font-semibold tracking-widest flex justify-center" > - <div class="my-auto" class:text-5xl={!fiat}> + <div class="my-auto font-bebasNeue tracking-[0.2rem]" class:text-5xl={!fiat}> {fiat ? symbol : "⚡️"} </div> <div @@ -194,11 +194,11 @@ on:blur={blur} on:input={input} on:keydown={keydown} - class="outline-none my-auto" + class="outline-none my-auto font-bebasNeue tracking-[0.4rem] mt-2" /> </div> <div class="mt-2"> - <span class="text-secondary mr-1" + <span class="text-secondary dark:text-gray-300 mr-1" >{fiat ? sat(amount) : f(amountFiat, currency)}</span > <button @@ -213,7 +213,7 @@ : 0; } fiat = !fiat; - }}><Icon icon="swap" style="inline hover:opacity-80" /></button + }}><Icon icon="swap" style="inline hover:opacity-80 dark:invert" /></button > </div> </div> @@ -223,7 +223,7 @@ {#if value === arrow} <button type="button" - class="bg-gray-100 rounded-xl py-4 px-8 font-semibold active:bg-black active:flex justify-center items-center hover:opacity-80" + class="bg-gray-100 dark:bg-stone-800 rounded-xl py-4 px-8 font-semibold active:bg-black dark:active:bg-stone-900 active:flex justify-center items-center hover:opacity-80" on:click={() => handleInput(value)} > <Left /> @@ -231,7 +231,7 @@ {:else} <button type="button" - class="bg-gray-100 rounded-xl py-4 px-8 font-semibold active:bg-black active:text-white hover:opacity-80" + class="bg-gray-100 dark:bg-stone-800 rounded-xl py-4 px-8 font-semibold active:bg-black dark:active:bg-stone-900 active:text-white hover:opacity-80" on:click={() => handleInput(value)}>{value}</button > {/if} diff --git a/src/components/Password.svelte b/src/components/Password.svelte index da65d718..81714904 100644 --- a/src/components/Password.svelte +++ b/src/components/Password.svelte @@ -23,10 +23,10 @@ </script> <div - class="fixed inset-0 bg-gray-600 bg-opacity-50 overflow-y-auto h-full w-full z-20" + class="fixed inset-0 bg-gray-600 dark:bg-stone-950 dark:bg-opacity-90 bg-opacity-50 overflow-y-auto h-full w-full z-20" > <div - class="relative top-1/3 mx-auto p-5 border w-96 shadow-lg rounded-md bg-white space-y-5" + class="relative top-1/3 mx-auto p-5 border w-96 shadow-lg rounded-md bg-white dark:bg-stone-800 dark:border-0 space-y-5" > <h1 class="text-center text-2xl font-semibold"> Please enter your password @@ -38,7 +38,7 @@ name="password" type="text" required - class="bg-primary" + class="bg-primary dark:bg-stone-700 dark:border-gray-50" bind:value={password} autocapitalize="none" use:focus @@ -48,7 +48,7 @@ name="password" type="password" required - class="bg-primary" + class="bg-primary dark:bg-stone-700 dark:border-gray-50" bind:value={password} autocapitalize="none" use:focus @@ -57,7 +57,7 @@ <button type="button" on:click={() => (revealPassword = !revealPassword)} - class="absolute right-5 top-6" + class="absolute right-5 dark:invert {revealPassword ? 'top-[18px]' : 'top-[16px]'}" > <Icon icon={revealPassword ? "eye" : "eye-off"} /> </button> @@ -65,7 +65,7 @@ <div class="w-full flex"> <button type="button" - class="border-2 border-black rounded-xl font-semibold mx-auto py-3 w-40 hover:opacity-80 mx-auto" + class="border-2 border-black dark:border-gray-50 dark:text-gray-50 rounded-xl font-semibold py-3 w-40 hover:opacity-80 mx-auto" on:click={cancel} on:keydown={cancel} > @@ -73,7 +73,7 @@ </button> <button type="submit" - class="border-2 border-black rounded-xl font-semibold mx-auto py-3 w-40 hover:opacity-80 mx-auto" + class="border-2 border-black dark:border-gray-50 bg-black text-white dark:bg-gray-50 dark:text-black rounded-xl font-semibold py-3 w-40 hover:opacity-80 mx-auto" > <div class="my-auto">Submit</div> </button> diff --git a/src/components/Pin.svelte b/src/components/Pin.svelte index 9938f9a1..58a669e8 100644 --- a/src/components/Pin.svelte +++ b/src/components/Pin.svelte @@ -43,16 +43,16 @@ {#if loaded} <div - class="fixed inset-0 bg-gray-600 bg-opacity-50 overflow-y-auto h-full w-full z-50" + class="fixed inset-0 bg-gray-600 dark:bg-stone-950 dark:bg-opacity-90 bg-opacity-50 overflow-y-auto h-full w-full z-50" > <div - class="relative top-40 mx-auto p-5 border w-96 shadow-lg rounded-md bg-white space-y-5" + class="relative top-40 mx-auto p-5 border w-96 shadow-lg rounded-lg bg-white dark:bg-stone-800 dark:border-0 space-y-5" > <h1 class="text-center text-2xl font-semibold">{title}</h1> <Pinpad bind:v={p} {cancel} /> <div class="w-full flex"> <button - class="border-2 border-black rounded-xl font-semibold mx-auto py-3 w-40 hover:opacity-80 mx-auto" + class="border-2 border-black dark:border-gray-50 dark:text-gray-50 rounded-xl font-semibold mx-auto py-3 w-40 hover:opacity-80" on:click|preventDefault={cancel} > <div class="my-auto">Cancel</div> diff --git a/src/components/Pinpad.svelte b/src/components/Pinpad.svelte index 641ddb2b..1dc20366 100644 --- a/src/components/Pinpad.svelte +++ b/src/components/Pinpad.svelte @@ -45,14 +45,14 @@ use:focus bind:value={v} type="password" - class="outline-none border-0 text-center py-0" + class="outline-none border-0 text-center py-0 dark:bg-stone-800 dark:text-white" pattern="[0-9]+" /> {:else} <input on:keydown={validate} bind:value={v} - class="outline-none border-0 text-center py-0" + class="outline-none border-0 text-center py-0 dark:bg-stone-800 dark:text-white" type="text" pattern="[0-9]+" /> @@ -60,18 +60,18 @@ <button type="button" on:click={() => (hide = !hide)} - class="absolute -right-5 top-5" + class="absolute -right-5 dark:invert {hide ? 'top-5' : 'top-[22px]'}" > <Icon icon={hide ? "eye-off" : "eye"} style="w-8" /> </button> </div> - <div class="grid grid-cols-3 gap-2 w-[300px] mx-auto grayscale"> + <div class="grid grid-cols-3 gap-2 w-[300px] mx-auto"> {#each numPad as value} {#if value === arrow} <button type="button" - class="bg-primary rounded-xl py-4 px-8 font-semibold active:bg-black active:text-white flex justify-center items-center hover:opacity-80" + class="bg-primary dark:bg-stone-700 rounded-xl py-4 px-8 font-semibold dark:text-gray-50 active:bg-black active:text-white flex justify-center items-center hover:opacity-80" on:click={() => handleInput(value)} > <Left /> @@ -79,7 +79,7 @@ {:else} <button type="button" - class="bg-primary rounded-xl py-4 px-8 font-semibold active:bg-black active:text-white hover:opacity-80" + class="bg-primary dark:bg-stone-700 rounded-xl py-4 px-8 font-semibold dark:text-gray-50 active:bg-black dark:active:bg-stone-900 active:text-white hover:opacity-80" on:click={() => handleInput(value)}>{value}</button > {/if} diff --git a/src/components/Toggle.svelte b/src/components/Toggle.svelte index 2f92837d..1d34ccd6 100644 --- a/src/components/Toggle.svelte +++ b/src/components/Toggle.svelte @@ -3,7 +3,9 @@ export let value; </script> -<label for={id} class="inline-flex relative items-center mr-5 cursor-pointer"> +<!-- svelte-ignore a11y-click-events-have-key-events --> +<!-- svelte-ignore a11y-no-noninteractive-element-interactions --> +<label for={id} class="inline-flex relative items-center mr-5 cursor-pointer" on:click> <input type="checkbox" bind:checked={value} @@ -12,6 +14,6 @@ class="sr-only peer" /> <div - class="w-11 h-6 bg-gray-200 rounded-full peer dark:bg-gray-700 peer-focus:ring-4 peer-focus:ring-gray-300 dark:peer-focus:ring-gray-800 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-0.5 after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-green-500" + class="w-11 h-6 bg-gray-200 rounded-full peer dark:bg-stone-800 peer-focus:ring-4 peer-focus:ring-gray-300 dark:peer-focus:ring-gray-800 peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-0.5 after:left-[2px] after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 peer-checked:bg-green-500" /> </label> diff --git a/src/components/buttons/ThemeToggle.svelte b/src/components/buttons/ThemeToggle.svelte new file mode 100644 index 00000000..7b9a06e4 --- /dev/null +++ b/src/components/buttons/ThemeToggle.svelte @@ -0,0 +1,28 @@ +<!-- <button {...$$restProps}>toggle</button> --> +<button + class="text-white dark:!text-black hover:bg-gray-100 dark:!hover:bg-gray-700 focus:outline-none focus:ring-4 focus:ring-gray-200 border-2 border-gray-600 bg-black dark:!bg-white dark:!border-gray-300 dark:!focus:ring-gray-700 rounded-full text-sm p-2.5 transition-all" + {...$$restProps} +> + <svg + class="w-5 h-5 dark:hidden" + fill="currentColor" + viewBox="0 0 20 20" + xmlns="http://www.w3.org/2000/svg" + > + <path + d="M17.293 13.293A8 8 0 016.707 2.707a8.001 8.001 0 1010.586 10.586z" + ></path> + </svg> + <svg + class="w-5 h-5 hidden dark:!block" + fill="currentColor" + viewBox="0 0 20 20" + xmlns="http://www.w3.org/2000/svg" + > + <path + d="M10 2a1 1 0 011 1v1a1 1 0 11-2 0V3a1 1 0 011-1zm4 8a4 4 0 11-8 0 4 4 0 018 0zm-.464 4.95l.707.707a1 1 0 001.414-1.414l-.707-.707a1 1 0 00-1.414 1.414zm2.12-10.607a1 1 0 010 1.414l-.706.707a1 1 0 11-1.414-1.414l.707-.707a1 1 0 011.414 0zM17 11a1 1 0 100-2h-1a1 1 0 100 2h1zm-7 4a1 1 0 011 1v1a1 1 0 11-2 0v-1a1 1 0 011-1zM5.05 6.464A1 1 0 106.465 5.05l-.708-.707a1 1 0 00-1.414 1.414l.707.707zm1.414 8.486l-.707.707a1 1 0 01-1.414-1.414l.707-.707a1 1 0 011.414 1.414zM4 11a1 1 0 100-2H3a1 1 0 000 2h1z" + fill-rule="evenodd" + clip-rule="evenodd" + ></path> + </svg> +</button>
\ No newline at end of file diff --git a/src/hooks.server.js b/src/hooks.server.js new file mode 100644 index 00000000..dca44977 --- /dev/null +++ b/src/hooks.server.js @@ -0,0 +1,29 @@ + +export const handle = (async ({ event, resolve }) => { + let theme = "dark"; + + const newTheme = event.url.searchParams.get("theme"); + const cookieTheme = event.cookies.get("colortheme"); + + if (newTheme) { + theme = newTheme; + } else if (cookieTheme) { + theme = cookieTheme; + } + + if (theme) { + return await resolve(event, { + transformPageChunk: ({ html }) => { + const modifiedHtml = html.replace(/<html[^>]*>/, (match) => { + // Ensure the class attribute exists or add it if missing + return match.includes('class="') + ? match.replace(/class="[^"]*"/, `class="${theme}"`) + : match.replace('>', ` class="${theme}">`); + }); + return modifiedHtml; + } + }); + } + + return await resolve(event); +})
\ No newline at end of file diff --git a/src/lib/shadcn/components/ui/accordion/accordion-content.svelte b/src/lib/shadcn/components/ui/accordion/accordion-content.svelte new file mode 100644 index 00000000..14328e88 --- /dev/null +++ b/src/lib/shadcn/components/ui/accordion/accordion-content.svelte @@ -0,0 +1,22 @@ +<script> + import { Accordion as AccordionPrimitive } from "bits-ui"; + import { cn } from "$lib/shadcn/utils"; + import { slide } from "svelte/transition"; + let className = undefined; + export let transition = slide; + export let transitionConfig = { + duration: 200, + }; + export { className as class }; +</script> + +<AccordionPrimitive.Content + class={cn("overflow-hidden text-sm transition-all", className)} + {transition} + {transitionConfig} + {...$$restProps} +> + <div class="pb-4 pt-0"> + <slot /> + </div> +</AccordionPrimitive.Content> diff --git a/src/lib/shadcn/components/ui/accordion/accordion-item.svelte b/src/lib/shadcn/components/ui/accordion/accordion-item.svelte new file mode 100644 index 00000000..b0887d7e --- /dev/null +++ b/src/lib/shadcn/components/ui/accordion/accordion-item.svelte @@ -0,0 +1,11 @@ +<script> + import { Accordion as AccordionPrimitive } from "bits-ui"; + import { cn } from "$lib/shadcn/utils"; + let className = undefined; + export let value; + export { className as class }; +</script> + +<AccordionPrimitive.Item {value} class={cn("border-b", className)} {...$$restProps}> + <slot /> +</AccordionPrimitive.Item> diff --git a/src/lib/shadcn/components/ui/accordion/accordion-trigger.svelte b/src/lib/shadcn/components/ui/accordion/accordion-trigger.svelte new file mode 100644 index 00000000..8acf4675 --- /dev/null +++ b/src/lib/shadcn/components/ui/accordion/accordion-trigger.svelte @@ -0,0 +1,22 @@ +<script> + import { Accordion as AccordionPrimitive } from "bits-ui"; + import { ChevronDown } from "lucide-svelte"; + import { cn } from "$lib/shadcn/utils"; + let className = undefined; + export let level = 3; + export { className as class }; +</script> + +<AccordionPrimitive.Header {level} class="flex"> + <AccordionPrimitive.Trigger + class={cn( + "flex flex-1 items-center justify-between py-2 font-medium transition-all [&[data-state=open]>svg]:rotate-180", + className + )} + {...$$restProps} + on:click + > + <slot /> + <ChevronDown class="h-4 w-4 transition-transform duration-200" /> + </AccordionPrimitive.Trigger> +</AccordionPrimitive.Header> diff --git a/src/lib/shadcn/components/ui/accordion/index.js b/src/lib/shadcn/components/ui/accordion/index.js new file mode 100644 index 00000000..d75ea273 --- /dev/null +++ b/src/lib/shadcn/components/ui/accordion/index.js @@ -0,0 +1,16 @@ +import { Accordion as AccordionPrimitive } from "bits-ui"; +import Content from "./accordion-content.svelte"; +import Item from "./accordion-item.svelte"; +import Trigger from "./accordion-trigger.svelte"; +const Root = AccordionPrimitive.Root; +export { + Root, + Content, + Item, + Trigger, + // + Root as Accordion, + Content as AccordionContent, + Item as AccordionItem, + Trigger as AccordionTrigger, +}; diff --git a/src/lib/shadcn/components/ui/button/button.svelte b/src/lib/shadcn/components/ui/button/button.svelte new file mode 100644 index 00000000..775b9f09 --- /dev/null +++ b/src/lib/shadcn/components/ui/button/button.svelte @@ -0,0 +1,21 @@ +<script> + import { Button as ButtonPrimitive } from "bits-ui"; + import { cn } from "$lib/shadcn/utils"; + import { buttonVariants } from "."; + let className = undefined; + export let variant = "default"; + export let size = "default"; + export let builders = []; + export { className as class }; +</script> + +<ButtonPrimitive.Root + {builders} + class={cn(buttonVariants({ variant, size, className }))} + type="button" + {...$$restProps} + on:click + on:keydown +> + <slot /> +</ButtonPrimitive.Root> diff --git a/src/lib/shadcn/components/ui/button/index.js b/src/lib/shadcn/components/ui/button/index.js new file mode 100644 index 00000000..96d93665 --- /dev/null +++ b/src/lib/shadcn/components/ui/button/index.js @@ -0,0 +1,32 @@ +import Root from "./button.svelte"; +import { tv } from "tailwind-variants"; +const buttonVariants = tv({ + base: "inline-flex items-center justify-center rounded-md text-sm font-medium whitespace-nowrap ring-offset-background transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50", + variants: { + variant: { + default: "bg-primary text-primary-foreground hover:bg-primary/90", + destructive: "bg-destructive text-destructive-foreground hover:bg-destructive/90", + outline: + "border border-input bg-background hover:bg-accent hover:text-accent-foreground", + secondary: "bg-secondary text-secondary-foreground hover:bg-secondary/80", + ghost: "hover:bg-accent hover:text-accent-foreground", + link: "text-primary underline-offset-4 hover:underline", + }, + size: { + default: "h-10 px-4 py-2", + sm: "h-9 rounded-md px-3", + lg: "h-11 rounded-md px-8", + icon: "h-10 w-10", + }, + }, + defaultVariants: { + variant: "default", + size: "default", + }, +}); +export { + Root, + // + Root as Button, + buttonVariants, +}; diff --git a/src/lib/shadcn/components/ui/separator/index.js b/src/lib/shadcn/components/ui/separator/index.js new file mode 100644 index 00000000..073c5c4c --- /dev/null +++ b/src/lib/shadcn/components/ui/separator/index.js @@ -0,0 +1,6 @@ +import Root from "./separator.svelte"; +export { + Root, + // + Root as Separator, +}; diff --git a/src/lib/shadcn/components/ui/separator/separator.svelte b/src/lib/shadcn/components/ui/separator/separator.svelte new file mode 100644 index 00000000..b07c93ea --- /dev/null +++ b/src/lib/shadcn/components/ui/separator/separator.svelte @@ -0,0 +1,19 @@ +<script> + import { Separator as SeparatorPrimitive } from "bits-ui"; + import { cn } from "$lib/shadcn/utils"; + let className = undefined; + export let orientation = "horizontal"; + export let decorative = undefined; + export { className as class }; +</script> + +<SeparatorPrimitive.Root + class={cn( + "shrink-0 bg-border", + orientation === "horizontal" ? "h-[1px] w-full" : "h-full w-[1px]", + className + )} + {orientation} + {decorative} + {...$$restProps} +/> diff --git a/src/lib/shadcn/components/ui/sheet/index.js b/src/lib/shadcn/components/ui/sheet/index.js new file mode 100644 index 00000000..c892767c --- /dev/null +++ b/src/lib/shadcn/components/ui/sheet/index.js @@ -0,0 +1,99 @@ +import { Dialog as SheetPrimitive } from "bits-ui"; +import { tv } from "tailwind-variants"; +import Portal from "./sheet-portal.svelte"; +import Overlay from "./sheet-overlay.svelte"; +import Content from "./sheet-content.svelte"; +import Header from "./sheet-header.svelte"; +import Footer from "./sheet-footer.svelte"; +import Title from "./sheet-title.svelte"; +import Description from "./sheet-description.svelte"; +const Root = SheetPrimitive.Root; +const Close = SheetPrimitive.Close; +const Trigger = SheetPrimitive.Trigger; +export { + Root, + Close, + Trigger, + Portal, + Overlay, + Content, + Header, + Footer, + Title, + Description, + // + Root as Sheet, + Close as SheetClose, + Trigger as SheetTrigger, + Portal as SheetPortal, + Overlay as SheetOverlay, + Content as SheetContent, + Header as SheetHeader, + Footer as SheetFooter, + Title as SheetTitle, + Description as SheetDescription, +}; +export const sheetVariants = tv({ + base: "fixed z-50 gap-4 bg-background p-6 shadow-lg", + variants: { + side: { + top: "inset-x-0 top-0 border-b", + bottom: "inset-x-0 bottom-0 border-t", + left: "inset-y-0 left-0 h-full w-3/4 border-r sm:max-w-sm", + right: "inset-y-0 right-0 h-full w-3/4 border-l sm:max-w-sm", + }, + }, + defaultVariants: { + side: "right", + }, +}); +export const sheetTransitions = { + top: { + in: { + y: "-100%", + duration: 500, + opacity: 1, + }, + out: { + y: "-100%", + duration: 300, + opacity: 1, + }, + }, + bottom: { + in: { + y: "100%", + duration: 500, + opacity: 1, + }, + out: { + y: "100%", + duration: 300, + opacity: 1, + }, + }, + left: { + in: { + x: "-100%", + duration: 500, + opacity: 1, + }, + out: { + x: "-100%", + duration: 300, + opacity: 1, + }, + }, + right: { + in: { + x: "100%", + duration: 500, + opacity: 1, + }, + out: { + x: "100%", + duration: 300, + opacity: 1, + }, + }, +}; diff --git a/src/lib/shadcn/components/ui/sheet/sheet-content.svelte b/src/lib/shadcn/components/ui/sheet/sheet-content.svelte new file mode 100644 index 00000000..8e7a0ffd --- /dev/null +++ b/src/lib/shadcn/components/ui/sheet/sheet-content.svelte @@ -0,0 +1,34 @@ +<script> + import { Dialog as SheetPrimitive } from "bits-ui"; + import X from "lucide-svelte/icons/x"; + import { SheetOverlay, SheetPortal, sheetTransitions, sheetVariants } from "."; + import { cn } from "$lib/shadcn/utils"; + import { fly } from "svelte/transition"; + let className = undefined; + export let side = "right"; + export { className as class }; + export let inTransition = fly; + export let inTransitionConfig = sheetTransitions[side ? side : "right"]["in"]; + export let outTransition = fly; + export let outTransitionConfig = sheetTransitions[side ? side : "right"]["out"]; +</script> + +<SheetPortal> + <SheetOverlay /> + <SheetPrimitive.Content + {inTransition} + {inTransitionConfig} + {outTransition} + {outTransitionConfig} + class={cn(sheetVariants({ side }), className)} + {...$$restProps} + > + <slot /> + <SheetPrimitive.Close + class="absolute right-4 top-4 rounded-sm opacity-100 ring-offset-background hover:bg-swapee-purple transition-all focus:outline-none focus:ring-2 focus:ring-ring focus:ring-offset-2 disabled:pointer-events-none data-[state=open]:bg-black dark:data-[state=open]:bg-white" + > + <X class="h-8 w-8" /> + <span class="sr-only">Close</span> + </SheetPrimitive.Close> + </SheetPrimitive.Content> +</SheetPortal> diff --git a/src/lib/shadcn/components/ui/sheet/sheet-description.svelte b/src/lib/shadcn/components/ui/sheet/sheet-description.svelte new file mode 100644 index 00000000..9f75b9f4 --- /dev/null +++ b/src/lib/shadcn/components/ui/sheet/sheet-description.svelte @@ -0,0 +1,10 @@ +<script> + import { Dialog as SheetPrimitive } from "bits-ui"; + import { cn } from "$lib/shadcn/utils"; + let className = undefined; + export { className as class }; +</script> + +<SheetPrimitive.Description class={cn("text-sm text-muted-foreground", className)} {...$$restProps}> + <slot /> +</SheetPrimitive.Description> diff --git a/src/lib/shadcn/components/ui/sheet/sheet-footer.svelte b/src/lib/shadcn/components/ui/sheet/sheet-footer.svelte new file mode 100644 index 00000000..3a958ac9 --- /dev/null +++ b/src/lib/shadcn/components/ui/sheet/sheet-footer.svelte @@ -0,0 +1,12 @@ +<script> + import { cn } from "$lib/shadcn/utils"; + let className = undefined; + export { className as class }; +</script> + +<div + class={cn("flex flex-col-reverse sm:flex-row sm:justify-end sm:space-x-2", className)} + {...$$restProps} +> + <slot /> +</div> diff --git a/src/lib/shadcn/components/ui/sheet/sheet-header.svelte b/src/lib/shadcn/components/ui/sheet/sheet-header.svelte new file mode 100644 index 00000000..c6c098a4 --- /dev/null +++ b/src/lib/shadcn/components/ui/sheet/sheet-header.svelte @@ -0,0 +1,9 @@ +<script> + import { cn } from "$lib/shadcn/utils"; + let className = undefined; + export { className as class }; +</script> + +<div class={cn("flex flex-col space-y-2 text-center sm:text-left", className)} {...$$restProps}> + <slot /> +</div> diff --git a/src/lib/shadcn/components/ui/sheet/sheet-overlay.svelte b/src/lib/shadcn/components/ui/sheet/sheet-overlay.svelte new file mode 100644 index 00000000..8f308ce9 --- /dev/null +++ b/src/lib/shadcn/components/ui/sheet/sheet-overlay.svelte @@ -0,0 +1,18 @@ +<script> + import { Dialog as SheetPrimitive } from "bits-ui"; + import { cn } from "$lib/shadcn/utils"; + import { fade } from "svelte/transition"; + let className = undefined; + export let transition = fade; + export let transitionConfig = { + duration: 150, + }; + export { className as class }; +</script> + +<SheetPrimitive.Overlay + {transition} + {transitionConfig} + class={cn("fixed inset-0 z-50 bg-background/80 backdrop-blur-sm ", className)} + {...$$restProps} +/> diff --git a/src/lib/shadcn/components/ui/sheet/sheet-portal.svelte b/src/lib/shadcn/components/ui/sheet/sheet-portal.svelte new file mode 100644 index 00000000..c7384693 --- /dev/null +++ b/src/lib/shadcn/components/ui/sheet/sheet-portal.svelte @@ -0,0 +1,10 @@ +<script> + import { Dialog as SheetPrimitive } from "bits-ui"; + import { cn } from "$lib/shadcn/utils"; + let className = undefined; + export { className as class }; +</script> + +<SheetPrimitive.Portal class={cn(className)} {...$$restProps}> + <slot /> +</SheetPrimitive.Portal> diff --git a/src/lib/shadcn/components/ui/sheet/sheet-title.svelte b/src/lib/shadcn/components/ui/sheet/sheet-title.svelte new file mode 100644 index 00000000..1a285c75 --- /dev/null +++ b/src/lib/shadcn/components/ui/sheet/sheet-title.svelte @@ -0,0 +1,13 @@ +<script> + import { Dialog as SheetPrimitive } from "bits-ui"; + import { cn } from "$lib/shadcn/utils"; + let className = undefined; + export { className as class }; +</script> + +<SheetPrimitive.Title + class={cn("text-lg font-semibold text-foreground", className)} + {...$$restProps} +> + <slot /> +</SheetPrimitive.Title> diff --git a/src/lib/shadcn/components/ui/switch/index.js b/src/lib/shadcn/components/ui/switch/index.js new file mode 100644 index 00000000..7745ca39 --- /dev/null +++ b/src/lib/shadcn/components/ui/switch/index.js @@ -0,0 +1,6 @@ +import Root from "./switch.svelte"; +export { + Root, + // + Root as Switch, +}; diff --git a/src/lib/shadcn/components/ui/switch/switch.svelte b/src/lib/shadcn/components/ui/switch/switch.svelte new file mode 100644 index 00000000..69c08b03 --- /dev/null +++ b/src/lib/shadcn/components/ui/switch/switch.svelte @@ -0,0 +1,22 @@ +<script> + import { Switch as SwitchPrimitive } from "bits-ui"; + import { cn } from "$lib/shadcn/utils"; + let className = undefined; + export let checked = undefined; + export { className as class }; +</script> + +<SwitchPrimitive.Root + bind:checked + class={cn( + "peer inline-flex h-[24px] w-[44px] shrink-0 cursor-pointer items-center rounded-full border-2 border-transparent transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background disabled:cursor-not-allowed disabled:opacity-50 data-[state=checked]:bg-primary data-[state=unchecked]:bg-input", + className + )} + {...$$restProps} +> + <SwitchPrimitive.Thumb + class={cn( + "pointer-events-none block h-5 w-5 rounded-full bg-background shadow-lg ring-0 transition-transform data-[state=checked]:translate-x-5 data-[state=unchecked]:translate-x-0" + )} + /> +</SwitchPrimitive.Root> diff --git a/src/lib/shadcn/utils.js b/src/lib/shadcn/utils.js new file mode 100644 index 00000000..08747b8f --- /dev/null +++ b/src/lib/shadcn/utils.js @@ -0,0 +1,48 @@ +import { clsx } from "clsx"; +import { twMerge } from "tailwind-merge"; +import { cubicOut } from "svelte/easing"; + +export function cn(...inputs) { + return twMerge(clsx(inputs)); +} + +export const flyAndScale = ( + node, + params = { y: -8, x: 0, start: 0.95, duration: 150 } +) => { + const style = getComputedStyle(node); + const transform = style.transform === "none" ? "" : style.transform; + + const scaleConversion = (valueA, scaleA, scaleB) => { + const [minA, maxA] = scaleA; + const [minB, maxB] = scaleB; + + const percentage = (valueA - minA) / (maxA - minA); + const valueB = percentage * (maxB - minB) + minB; + + return valueB; + }; + + const styleToString = (style) => { + return Object.keys(style).reduce((str, key) => { + if (style[key] === undefined) return str; + return str + `${key}:${style[key]};`; + }, ""); + }; + + return { + duration: params.duration ?? 200, + delay: 0, + css: (t) => { + const y = scaleConversion(t, [0, 1], [params.y ?? 5, 0]); + const x = scaleConversion(t, [0, 1], [params.x ?? 0, 0]); + const scale = scaleConversion(t, [0, 1], [params.start ?? 0.95, 1]); + + return styleToString({ + transform: `${transform} translate3d(${x}px, ${y}px, 0) scale(${scale})`, + opacity: t + }); + }, + easing: cubicOut + }; +}; diff --git a/src/lib/utils.js b/src/lib/utils.js index 738413bf..434ca268 100644 --- a/src/lib/utils.js +++ b/src/lib/utils.js @@ -300,4 +300,4 @@ export let isLiquid = (text) => (text.startsWith("ert1q") && text.length === 43) || (text.startsWith("ex1q") && text.length === 42) || text.startsWith("el1qq") || - text.startsWith("lq1qq"); + text.startsWith("lq1qq");
\ No newline at end of file diff --git a/src/locales/en.json b/src/locales/en.json index 1afa0f22..292c669a 100644 --- a/src/locales/en.json +++ b/src/locales/en.json @@ -199,7 +199,7 @@ "scan": "Scan", "paste": "Paste", "next": "Next", - "placeholder": "Paste a bitcoin address, lightning invoice or coinos username" + "placeholder": "Paste a bitcoin address, lightning invoice or Swapee username" }, "settings": { "notifications": "Payment notifications", diff --git a/src/routes/(app)/[username]/(profile)/+layout.svelte b/src/routes/(app)/[username]/(profile)/+layout.svelte index ff7ef7dd..a780f994 100644 --- a/src/routes/(app)/[username]/(profile)/+layout.svelte +++ b/src/routes/(app)/[username]/(profile)/+layout.svelte @@ -75,9 +75,8 @@ }; </script> -<div class="container mx-auto w-full px-4 flex flex-wrap lg:flex-nowrap"> - <div class="hidden lg:block lg:w-[300px]" /> - <div class="lg:w-[300px] lg:absolute space-y-5 left-20 mx-auto max-w-sm"> +<div class="mx-auto w-full px-4 flex flex-col lg:flex-row"> + <div class="lg:w-[300px] space-y-5 mx-auto max-w-sm lg:ml-24"> <div class="flex text-3xl font-bold text-center mx-auto justify-center gap-2" > @@ -152,11 +151,11 @@ <div class="flex justify-center gap-2"> <a href={`/${subject.pubkey}/follows`} ><b>{subject.follows.length}</b> - <span class="text-secondary">{$t("user.following")}</span></a + <span class="text-secondary dark:text-gray-300">{$t("user.following")}</span></a > <a href={`/${subject.pubkey}/followers`} ><b>{subject.followers.length}</b> - <span class="text-secondary">{$t("user.followers")}</span></a + <span class="text-secondary dark:text-gray-300">{$t("user.followers")}</span></a > </div> @@ -242,7 +241,7 @@ </div> <div class="w-full"> - <div class="mx-auto space-y-5 lg:max-w-xl lg:pl-10 xl:max-w-2xl lg:pl-10"> + <div class="mx-auto space-y-5 lg:max-w-xl xl:max-w-2xl lg:pl-10"> <slot /> </div> </div> @@ -250,16 +249,16 @@ {#if currency} <div - class="flex fixed w-full px-4 bg-white py-2 pb-3 bottom-0 bg-opacity-90 tabular-nums" + class="flex fixed w-full px-4 bg-white dark:bg-black py-2 pb-3 bottom-0 bg-opacity-90 tabular-nums" > - <div class="text-secondary flex mr-auto"> + <div class="text-secondary dark:text-gray-300 flex mr-auto"> <div class="flex mr-1"> <div class="my-auto mr-1">1</div> <img src="/images/bitcoin.svg" class="w-5 my-auto" alt="Bitcoin" /> </div> <div>= {f(rates[currency], currency)}</div> </div> - <div class="text-secondary flex ml-auto"> + <div class="text-secondary dark:text-gray-300 flex ml-auto"> <div class="flex"> <div class="mr-1">⚡️{s((1 * sats) / rates[currency])} =</div> <div>{f(1, currency)}</div> diff --git a/src/routes/(app)/[username]/(profile)/+page.svelte b/src/routes/(app)/[username]/(profile)/+page.svelte index 337e80d8..2812100c 100644 --- a/src/routes/(app)/[username]/(profile)/+page.svelte +++ b/src/routes/(app)/[username]/(profile)/+page.svelte @@ -84,8 +84,8 @@ </div> <div class="space-y-8 mt-8"> {#if !user.balance} - <p class="text-secondary text-lg"> - {$t("user.welcome")} + <p class="text-secondary dark:text-gray-300 text-lg max-w-2xl text-center lg:text-start mx-auto"> + {$t("user.welcome")} </p> {/if} @@ -94,10 +94,10 @@ > <a href={`/send`} class="w-full md:w-40"> <button - class="rounded-full border py-3 px-6 font-bold hover:opacity-80 flex h-14 w-full" + class="rounded-full border py-3 px-6 font-bold hover:opacity-80 flex h-14 w-full " > <div class="mx-auto my-auto flex"> - <Icon icon="send" style="my-auto h-6 mr-2" /> + <Icon icon="send" style="my-auto h-6 mr-2 text-red-300 dark:invert" /> <div class="my-auto">{$t("user.dashboard.send")}</div> </div> </button> @@ -108,7 +108,7 @@ class="rounded-full border py-3 px-6 font-bold hover:opacity-80 flex h-14 w-full" > <div class="mx-auto flex"> - <Icon icon="numpad" style="my-auto h-6 mr-2" /> + <Icon icon="numpad" style="my-auto h-6 mr-2 dark:invert" /> <div class="my-auto mt-1">{$t("user.dashboard.receive")}</div> </div> </button> diff --git a/src/routes/(app)/buy/+page.server.js b/src/routes/(app)/[username]/buy/+page.server.js index 903fec0e..903fec0e 100644 --- a/src/routes/(app)/buy/+page.server.js +++ b/src/routes/(app)/[username]/buy/+page.server.js diff --git a/src/routes/(app)/[username]/buy/+page.svelte b/src/routes/(app)/[username]/buy/+page.svelte new file mode 100644 index 00000000..48bab6ce --- /dev/null +++ b/src/routes/(app)/[username]/buy/+page.svelte @@ -0,0 +1,69 @@ +<script> + import { enhance } from "$app/forms"; + import { PUBLIC_ONRAMPER } from '$env/static/public'; + import Icon from "$comp/Icon.svelte"; + import Lock from "$comp/Lock.svelte"; + import Card from "$comp/Card.svelte"; + import Calendar from "$comp/Calendar.svelte"; + import Spinner from "$comp/Spinner.svelte"; + import { f } from "$lib/utils"; + + export let data, form, address; + + let { username, currency } = data.user; + let loading; + + let amount, n, d, cvc; +</script> + +<div class="container px-4 max-w-xl mx-auto "> + <!-- <div class="w-full flex"> + <a href="/" class="mx-auto"> + <img src="images/logo.png" alt="" class="dark:hidden block" /> + <img src="images/logo-white.png" alt="" class="hidden dark:block" /> + </a> + </div> --> + <h1 class="px-3 md:px-0 text-center text-4xl md:text-5xl font-semibold font-bebasNeue tracking-[0.2rem] mb-4"> + Buy + </h1> + + <div class="mb-6"> + <div class="flex w-full justify-center">Your bitcoin address</div> + <div class="flex w-full justify-center font-bold"> + <div> + {address} + <!-- fs5werw748272asfds584927jhjk3458927sdfs38972 --> + </div> + </div> + <!-- on:click={() => copy(address)} --> + <button class="flex mx-auto mt-5 gap-2" on:click={() => copy(address)} > + <Icon icon="copy" style="w-10 max-w-none dark:invert" /> + <div class="my-auto">Copy</div> + </button> + </div> + + <div class="flex justify-center items-center"> + <div class=""> + <iframe + style="border-radius: 10px; border: 1px solid #58585f; margin: auto;max-width: 420px;" + class="dark:hidden" + src={`https://buy.onramper.com/?apiKey=${PUBLIC_ONRAMPER}&themeName=light&containerColor=ffffff&primaryColor=7105f3ff&secondaryColor=ffffff&cardColor=f6f7f9&primaryTextColor=141519&secondaryTextColor=6b6f80&borderRadius=2&wgBorderRadius=1`} + height="630px" + width="420px" + title="Onramper widget" + allow="accelerometer; autoplay; camera; gyroscope; payment" + /> + <iframe + style="border-radius: 10px; border: 1px solid #58585f; margin: auto;max-width: 420px;" + class="hidden dark:block" + src={`https://buy.onramper.com/?apiKey=${PUBLIC_ONRAMPER}&themeName=dark&containerColor=292524ff&primaryColor=7105f3ff&secondaryColor=292524ff&cardColor=44403cff&primaryTextColor=ffffff&secondaryTextColor=ffffffff&borderRadius=2&wgBorderRadius=1`} + height="630px" + width="420px" + title="Onramper widget" + allow="accelerometer; autoplay; camera; gyroscope; payment" + /> + </div> + </div> +</div> + +<!-- src/routes/(app)/buy -->
\ No newline at end of file diff --git a/src/routes/(app)/[username]/payments/[...page]/+page.svelte b/src/routes/(app)/[username]/payments/[...page]/+page.svelte index 3237011b..b98e2cd8 100644 --- a/src/routes/(app)/[username]/payments/[...page]/+page.svelte +++ b/src/routes/(app)/[username]/payments/[...page]/+page.svelte @@ -122,20 +122,20 @@ </script> <div class="mt-24 mb-20 payments"> - <h1 class="px-3 md:px-0 text-center text-3xl md:text-4xl font-semibold mb-10"> + <h1 class="px-3 md:px-0 text-center text-4xl md:text-5xl font-semibold mb-8 font-bebasNeue tracking-[0.2rem]"> {$t("payments.header")} </h1> <div class="container w-full mx-auto text-lg px-4 max-w-xl space-y-5"> - <div class="flex text-md text-secondary relative"> - <div class="mx-auto flex justify-center w-full gap-1"> + <div class="flex text-md text-secondary dark:text-gray-200 relative"> + <div class="mx-auto flex justify-center w-full gap-3"> {#each presets as { start, end, title }, i} <a class:active={selection === i} href={`/${user.username}/payments/${getUnixTime(start) + "/"}1`} > <button - class="text-sm md:text-lg rounded-full border py-2 px-4 hover:opacity-80 min-w-[72px]" + class="text-sm md:text-lg rounded-full border dark:border-white py-2 px-4 hover:opacity-80 min-w-[72px]" > <div class="my-auto">{title}</div> </button> @@ -153,7 +153,7 @@ class:active={parseInt(p) === i + 1} > <div - class="border py-2 rounded-full border-2 w-12 h-12 hover:opacity-80 text-center" + class="py-2 rounded-full border-2 w-12 h-12 hover:opacity-80 text-center" > {i + 1} </div> @@ -170,13 +170,13 @@ <div class="font-bold" class:text-red-800={p.amount < 0}> {f(Math.abs(p.amount) * (p.rate / sats), p.currency)} {#if p.tip} - <span class="text-sm text-secondary"> + <span class="text-sm text-secondary dark:text-gray-200"> +{Math.round((p.tip / Math.abs(p.amount)) * 100)}% </span> {/if} </div> - <div class="text-secondary"> + <div class="text-secondary dark:text-gray-200"> {sat(Math.abs(p.amount) + (p.tip || 0))} </div> </div> @@ -184,7 +184,7 @@ <div class="flex my-auto"> {#if p.type === types.pot} <a href={`/pot/${p.memo}`}> - <div class="text-secondary flex"> + <div class="text-secondary dark:text-gray-200 flex"> <div class="my-auto mr-1"> <img src="/images/moneypot.png" class="w-12" alt="Pot" /> </div> @@ -197,7 +197,7 @@ <div class="my-auto"> <Avatar user={p.with} size={16} disabled={true} /> </div> - <div class="my-auto ml-1 text-secondary"> + <div class="my-auto ml-1 text-secondary dark:text-gray-200"> {p.with.username} </div> </div> @@ -207,9 +207,9 @@ class="w-24 border-4 border-transparent mr-1" alt="Bitcoin" /> - <div class="my-auto text-secondary">{p.memo}</div> + <div class="my-auto text-secondary dark:text-gray-200">{p.memo}</div> {:else} - <div class="text-secondary flex"> + <div class="text-secondary dark:text-gray-200 flex"> {#if p.type === types.lightning} <div class="text-3xl">⚡️</div> {:else if p.type === types.bitcoin} @@ -241,7 +241,7 @@ {/if} </div> - <div class="text-secondary text-right text-sm my-auto"> + <div class="text-secondary dark:text-gray-200 text-right text-sm my-auto"> <div> {format(new Date(p.created), "h:mm aaa")} </div> @@ -252,14 +252,14 @@ </div> </a> {:else} - <p class="text-secondary text-lg text-center">{$t("payments.empty")}</p> + <p class="text-secondary dark:text-gray-100 text-lg text-center">{$t("payments.empty")}</p> {/each} </div> <div class="grid grid-cols-3 w-full text-center"> - <span class="text-lg text-secondary">{$t("payments.total")}</span> - <span class="text-lg text-secondary">{$t("payments.presentValue")}</span> - <span class="text-lg text-secondary">{$t("payments.gainLoss")}</span> + <span class="text-lg text-secondary dark:text-gray-200">{$t("payments.total")}</span> + <span class="text-lg text-secondary dark:text-gray-200">{$t("payments.presentValue")}</span> + <span class="text-lg text-secondary dark:text-gray-200">{$t("payments.gainLoss")}</span> {#each Object.keys(totals) as c} {@const total = totals[c]["fiat"]} @@ -274,10 +274,10 @@ </div> <button - class="ml-auto rounded-full border py-2 px-4 w-36 hover:opacity-80 flex mx-auto" + class="ml-auto rounded-full border dark:border-white py-2 px-4 hover:opacity-80 flex mx-auto" on:click={csv} > - <Icon icon="save" style="opacity-50 mr-2 my-auto" /> + <Icon icon="save" style="opacity-50 mr-2 my-auto dark:opacity-80 dark:invert" /> <div class="my-auto">{$t("payments.export")}</div> </button> </div> @@ -285,7 +285,7 @@ <style> .active * { - @apply bg-black text-white border-black; + @apply !bg-black dark:!bg-white !text-white dark:!text-black border-black; } .payments { diff --git a/src/routes/(app)/[username]/receive/[...param]/+page.svelte b/src/routes/(app)/[username]/receive/[...param]/+page.svelte index 7a27bd67..149c762e 100644 --- a/src/routes/(app)/[username]/receive/[...param]/+page.svelte +++ b/src/routes/(app)/[username]/receive/[...param]/+page.svelte @@ -48,7 +48,7 @@ <button bind:this={submit} type="submit" - class="bg-black text-white rounded-xl w-full h-[48px] flex justify-center items-center font-semibold + class="bg-black dark:bg-swapee-purple text-white rounded-xl w-full h-[48px] flex justify-center items-center font-semibold opacity-100 hover:opacity-80" > {$t("payments.next")} diff --git a/src/routes/(app)/[username]/settings/[...tab]/+page.server.js b/src/routes/(app)/[username]/settings/[...tab]/+page.server.js index b9717b82..49b2ba0a 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/+page.server.js +++ b/src/routes/(app)/[username]/settings/[...tab]/+page.server.js @@ -12,12 +12,21 @@ export const actions = { default: async ({ cookies, request }) => { let form = await fd(request); + let currentTheme = form.currentTheme; + if (form.tab === "pos") { form.notify = form.notify === "on"; form.nip5 = form.nip5 === "on"; form.prompt = form.prompt === "on"; } + if (currentTheme) { + cookies.set("colortheme", currentTheme, { + path: "/", + maxAge: 60 * 60 * 24 * 365, + }); + } + let user = { ...(await get("/me", auth(cookies))), ...form }; try { @@ -27,5 +36,5 @@ export const actions = { } return { user, success: true }; - }, + } }; diff --git a/src/routes/(app)/[username]/settings/[...tab]/+page.svelte b/src/routes/(app)/[username]/settings/[...tab]/+page.svelte index 54a2d71c..26c2830a 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/+page.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/+page.svelte @@ -30,6 +30,7 @@ let { user, token, rates, tab, cookies } = data; let prev; + let currentTheme = ""; $: update(data); let update = () => { @@ -189,21 +190,22 @@ > <input type="hidden" name="pin" value={$pin} /> <input type="hidden" name="tab" value={tab} /> + <input type="hidden" name="currentTheme" value={currentTheme} /> <div class="mt-24 mb-20 px-3 md:px-0 w-full md:w-[400px] mx-auto space-y-8"> <div class="header"> - <h1 class="text-center text-3xl md:text-4xl font-semibold mb-10"> + <h1 class="text-center text-4xl md:text-5xl font-semibold mb-8 font-bebasNeue tracking-[0.2rem]"> {$t("user.settings.header")} </h1> <div - class="font-bold flex justify-around items-center border-b pb-3 text-secondary" + class="font-bold flex justify-around items-center border-b dark:border-b-gray-50 pb-3 text-secondary" > {#each tabs.filter((t) => t.name !== "shopify") as { name, key }} <a href={`/${user.username}/settings/${name}`}> <button type="button" - class="hover:opacity-80" + class="hover:opacity-80 dark:text-gray-100" class:text-black={tab === name || (tab === "shopify" && name === "pos")} >{$t(`user.settings.${key}`)}</button @@ -213,16 +215,16 @@ </div> </div> - <svelte:component this={comp} {user} {rates} {submit} /> + <svelte:component this={comp} {user} {rates} {submit} on:changeTheme={(e) => currentTheme = e.detail }/> </div> <div - class="z-10 fixed bottom-0 bg-white shadow border-t w-full flex justify-center items-center py-3" + class="z-10 fixed bottom-0 bg-white dark:bg-black shadow border-t dark:border-t-gray-50 w-full flex justify-center items-center py-3" > <button bind:this={submit} type="submit" - class="border-2 border-black rounded-xl font-semibold mx-auto py-3 w-40 hover:opacity-80" + class="border-2 border-black dark:bg-white dark:text-black rounded-xl font-semibold mx-auto py-3 w-40 hover:opacity-80" class:bg-black={submitting} > {#if submitting} diff --git a/src/routes/(app)/[username]/settings/[...tab]/_account.svelte b/src/routes/(app)/[username]/settings/[...tab]/_account.svelte index 15ee7b0c..a4bb2b68 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/_account.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/_account.svelte @@ -73,7 +73,7 @@ </script> <div> - <label for="username" class="font-bold mb-1 block" + <label for="username" class="font-bold mb-3 block" >{$t("user.settings.username")}</label > <div class="flex mb-2"> @@ -81,26 +81,26 @@ type="text" name="username" bind:value={user.username} - class="w-auto min-w-0 pr-1 grow" + class="w-auto min-w-0 pr-1 grow dark:bg-stone-800 dark:border-0" /> </div> </div> <div> - <label for="display" class="font-bold mb-1 block" + <label for="display" class="font-bold mb-3 block" >{$t("user.settings.displayName")}</label > - <input type="text" name="display" bind:value={user.display} /> + <input type="text" name="display" bind:value={user.display} class="dark:bg-stone-800 dark:border-0" /> </div> <div class="space-y-1 relative"> <label for="email" class="font-bold block">{$t("user.settings.email")}</label> - <p class="text-secondary"> + <p class="text-secondary dark:text-gray-200"> {$t("user.settings.emailDescription")} </p> <div class="relative"> - <input type="text" name="email" bind:value={user.email} /> + <input type="text" name="email" bind:value={user.email} class="dark:bg-stone-800 dark:border-0" /> {#if user.verified} <Icon icon="check" style="absolute right-5 top-3 w-8" /> {:else if user.email} @@ -114,6 +114,7 @@ <div class="flex"> {#if $avatar || user.profile} + <!-- svelte-ignore a11y-no-static-element-interactions --> <div class="relative rounded-full overflow-hidden text-center w-20 h-20 my-auto hover:opacity-80 cursor-pointer" on:click={selectAvatar} @@ -121,11 +122,12 @@ > <img src={$avatar?.src || `/api/public/${user.profile}.webp`} - class="absolute w-full h-full object-cover object-center visible overflow-hidden" + class="absolute w-full h-full object-cover object-center visible overflow-hidden " alt={user.username} /> </div> {:else} + <!-- svelte-ignore a11y-no-static-element-interactions --> <div class="rounded-full border-4 border-white p-4 bg-gradient-to-r {$colorTheme} w-24 my-auto hover:opacity-80 cursor-pointer" on:click={selectAvatar} @@ -138,7 +140,7 @@ <!-- found missing translation --> <button type="button" - class="border rounded-2xl font-bold w-24 text-center px-0 py-2 hover:opacity-80" + class="border rounded-2xl font-bold w-24 text-center px-0 py-2 hover:opacity-80 dark:border-white" on:click={selectAvatar} on:keydown={selectAvatar}>{$t("user.settings.select")}</button > @@ -157,11 +159,12 @@ </div> <div> - <div class="flex justify-between items-center"> + <div class="flex justify-between items-center mb-3"> <span class="font-bold">{$t("user.settings.bannerImage")}</span> </div> {#if $banner || user.banner} + <!-- svelte-ignore a11y-no-noninteractive-element-interactions --> <img src={$banner ? $banner.src : `/api/public/${user.banner}.webp`} class="w-full object-cover object-center visible overflow-hidden h-48 mb-4 hover:opacity-80" @@ -170,8 +173,9 @@ alt="Banner" /> {:else} + <!-- svelte-ignore a11y-no-static-element-interactions --> <div - class="bg-gradient-to-r {$colorTheme} w-full h-48 mb-4 cursor-pointer hover:opacity-80" + class="bg-gradient-to-r {$colorTheme} dark:!from-stone-800 dark:!to-stone-800 w-full h-48 mb-4 cursor-pointer hover:opacity-80" on:click={selectBanner} on:keydown={selectBanner} alt="Banner" @@ -180,7 +184,7 @@ <button type="button" - class="border rounded-2xl font-bold w-24 text-center px-0 py-2 hover:opacity-80" + class="border dark:border-white rounded-2xl font-bold w-24 text-center px-0 py-2 hover:opacity-80 " on:click={selectBanner} on:keydown={selectBanner}>{$t("user.settings.select")}</button > @@ -197,7 +201,7 @@ </div> <div> - <label for="address" class="font-bold mb-1 block" + <label for="address" class="font-bold mb-3 block" >{$t("user.settings.about")}</label > <textarea @@ -205,5 +209,6 @@ name="address" bind:value={user.address} placeholder={$t("user.settings.aboutPlaceholder")} + class="dark:bg-stone-800 dark:border-0 dark:placeholder:text-gray-300" /> </div> diff --git a/src/routes/(app)/[username]/settings/[...tab]/_pos.svelte b/src/routes/(app)/[username]/settings/[...tab]/_pos.svelte index 539cfd5e..68b5e05f 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/_pos.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/_pos.svelte @@ -1,30 +1,59 @@ <script> + import { enhance } from '$app/forms'; import Icon from "$comp/Icon.svelte"; import LocaleSelector from "$comp/LocaleSelector.svelte"; import Toggle from "$comp/Toggle.svelte"; import { t } from "$lib/translations"; import { success, fail } from "$lib/utils"; import { page } from "$app/stores"; + import { onMount } from 'svelte'; + import ThemeToggle from '../../../../../components/buttons/ThemeToggle.svelte'; + import { createEventDispatcher } from 'svelte' + const dispatch = createEventDispatcher() export let user, rates, submit; let fiats = Object.keys(rates); + + let themeSelected; + let toggleThemeForm; + + onMount(() => { + themeSelected = document.documentElement.classList[0]; + }) + + function toggleThemeSelected() { + themeSelected = themeSelected == "dark" ? "light" : "dark"; + submitUpdateTheme(themeSelected); + } + + function submitUpdateTheme(theme) { + const htmlClasses = document.documentElement.classList; + if (theme == "dark" && !(htmlClasses.contains("dark"))) { + htmlClasses.add("dark"); + htmlClasses.remove("light"); + } else if (theme == "light" && !(htmlClasses.contains("light"))) { + htmlClasses.add("light"); + htmlClasses.remove("dark"); + } + dispatch("changeTheme", theme) + } </script> <div> - <label for="language" class="font-bold block mb-1" + <label for="language" class="font-bold block mb-3" >{$t("user.settings.locale")}</label > - <LocaleSelector style="select-styles block py-3 w-full" /> + <LocaleSelector style="select-styles block py-3 w-full dark:bg-stone-800 dark:border-0" /> </div> <div> - <label for="currency" class="font-bold block mb-1" + <label for="currency" class="font-bold block mb-3 " >{$t("user.settings.localCurrency")}</label > <select name="currency" - class="select-styles block py-3 w-full" + class="select-styles block py-3 w-full dark:bg-stone-800 dark:border-0" value={user.currency} > {#each fiats as fiat} @@ -35,10 +64,23 @@ <div> <div class="flex justify-between items-center"> + <span class="font-bold">Dark Theme</span> + {#if themeSelected} + <button type="button" on:click={toggleThemeSelected} class="focus:ring-4 ring-gray-300 dark:ring-gray-800 rounded-full inline-flex relative items-center mr-5 cursor-pointer "> + <div + class="w-11 h-6 rounded-full peer peer-checked:after:translate-x-full peer-checked:after:border-white after:content-[''] after:absolute after:top-0.5 {themeSelected == 'dark' ? ' dark:bg-green-500' : 'bg-gray-200 after:-translate-x-full'} after:bg-white after:border-gray-300 after:border after:rounded-full after:h-5 after:w-5 after:transition-all dark:border-gray-600 " + /> + </button> + {/if} + </div> +</div> + +<div> + <div class="flex justify-between items-center"> <span class="font-bold">{$t("user.settings.notifications")}</span> <Toggle id="notify" bind:value={user.notify} /> </div> - <p class="text-secondary mt-1 w-9/12"> + <p class="text-secondary dark:text-gray-200 mt-1 w-9/12"> {$t("user.settings.notificationsDesc")} </p> </div> @@ -48,7 +90,7 @@ <span class="font-bold">{$t("user.settings.tipPrompt")}</span> <Toggle id="prompt" bind:value={user.prompt} /> </div> - <p class="text-secondary mt-1 w-9/12"> + <p class="text-secondary dark:text-gray-200 mt-1 w-9/12"> {$t("user.settings.tipPromptDescription")} </p> </div> @@ -58,7 +100,7 @@ <span class="font-bold">{$t("user.settings.publishNip5")}</span> <Toggle id="nip5" bind:value={user.nip5} /> </div> - <p class="text-secondary mt-1 w-9/12"> + <p class="text-secondary dark:text-gray-200 mt-1 w-9/12"> {$t("user.settings.nip5a")} <span class="font-bold">{user.username}@{$page.url.host}</span> {$t("user.settings.nip5b")} @@ -70,7 +112,7 @@ type="button" class="flex rounded-full border py-2 px-4 font-bold hover:opacity-80 w-full gap-2 my-5 justify-center" > - <img src="/icons/shopify.svg" class="w-8" /> + <img src="/icons/shopify.svg" alt="" class="w-8" /> <div class="my-auto">Shopify Integration</div> </button> </a> diff --git a/src/routes/(app)/[username]/settings/[...tab]/_security.svelte b/src/routes/(app)/[username]/settings/[...tab]/_security.svelte index 38bf726c..52565af8 100644 --- a/src/routes/(app)/[username]/settings/[...tab]/_security.svelte +++ b/src/routes/(app)/[username]/settings/[...tab]/_security.svelte @@ -155,19 +155,19 @@ <input type="hidden" name="confirm" bind:value={password} /> <div class="relative mb-5"> - <label for="password" class="block font-bold block mb-1" + <label for="password" class="block font-bold mb-3 " >{$t("user.settings.newPassword")}</label > {#if revealPassword} - <input name="password" type="text" bind:value={password} /> + <input name="password" type="text" bind:value={password} class="dark:bg-stone-800 dark:border-0" /> {:else} - <input name="password" type="password" bind:value={password} /> + <input name="password" type="password" bind:value={password} class="dark:bg-stone-800 dark:border-0" /> {/if} <button type="button" on:click={togglePassword} on:keydown={togglePassword} - class="absolute right-5 top-11" + class="absolute right-5 dark:invert-[95%] {revealPassword ? 'top-[54px]' : 'top-[52px]'} " > <Icon icon={revealPassword ? "eye" : "eye-off"} /> </button> @@ -179,7 +179,7 @@ ? $t("user.settings.verifyPIN") : $t("user.settings.securityPIN")}</span > - <p class="text-secondary mb-1"> + <p class="text-secondary dark:text-gray-200 mb-4"> {$t("user.settings.securityPINDescription")} </p> {#if verifying} @@ -192,8 +192,8 @@ notify={false} /> {:else} - <button type="button" class="primary" on:click={togglePin} - ><Icon icon="lock" style="mr-1" /> + <button type="button" class="py-2 px-4 font-bold rounded-full mx-auto border-[1px] flex border-gray-200 dark:border-gray-50" on:click={togglePin} + ><Icon icon="lock" style="mr-1 dark:invert" /> {user.haspin ? $t("user.settings.disablePIN") : $t("user.settings.enablePIN")}</button @@ -206,7 +206,7 @@ <label for="locktime" class="font-bold mb-1" >{$t("user.settings.autoLock")}</label > - <p class="text-secondary mb-1"> + <p class="text-secondary dark:text-gray-200 mb-1"> {$t("user.settings.autoLockDescription")} </p> <select @@ -224,8 +224,8 @@ {/if} <div> - <span class="font-bold mb-1">{$t("user.settings.twofa")}</span> - <p class="text-secondary mb-4"> + <span class="font-bold mb-4">{$t("user.settings.twofa")}</span> + <p class="text-secondary dark:text-gray-200 mb-4"> {$t("user.settings.twofaDescription")} </p> @@ -239,18 +239,18 @@ <b>{otp.secret}</b> </div> - <button type="button" class="primary" on:click={startConfirming2fa}> - <Icon icon="mobile" style="mr-1" /> + <button type="button" class="py-2 px-4 font-bold rounded-full mx-auto border-[1px] flex border-gray-200 dark:border-gray-50" on:click={startConfirming2fa}> + <Icon icon="mobile" style="mr-1 dark:invert" /> Confirm </button> {:else if user.twofa} - <button type="button" class="primary" on:click={startDisabling2fa}> - <Icon icon="mobile" style="mr-1" /> + <button type="button" class="py-2 px-4 font-bold rounded-full mx-auto border-[1px] flex border-gray-200 dark:border-gray-50" on:click={startDisabling2fa}> + <Icon icon="mobile" style="mr-1 dark:invert" /> {$t("user.settings.twofaDisable")} </button> {:else} - <button type="button" class="primary" on:click={startEnabling2fa}> - <Icon icon="mobile" style="mr-1" /> + <button type="button" class="py-2 px-4 font-bold rounded-full mx-auto border-[1px] flex border-gray-200 dark:border-gray-50" on:click={startEnabling2fa}> + <Icon icon="mobile" style="mr-1 dark:invert" /> {$t("user.settings.twofaSetup")} </button> {/if} @@ -271,22 +271,22 @@ >{$t("user.settings.seedPhrase")}</label > - <p class="text-secondary mb-1"> + <p class="text-secondary dark:text-gray-200 mb-4"> {$t("user.settings.seedDescription")} </p> - <button type="button" class="primary" on:click={toggleSeed}> - <Icon icon="warning" style="mr-1 w-6 my-auto" /> + <button type="button" class="py-2 px-4 font-bold rounded-full mx-auto border-[1px] flex border-gray-200 dark:border-gray-50" on:click={toggleSeed}> + <Icon icon="warning" style="mr-2 w-6 my-auto dark:invert" /> {revealSeed ? $t("user.settings.hideSeed") : $t("user.settings.revealSeed")} </button> {#if revealSeed} - <div class="text-lg"> + <div class="text-lg my-6"> {mnemonic} </div> - <button type="button" class="primary" on:click={() => copy(mnemonic)}> - <Icon icon="copy" style="mr-1 w-6 my-auto" /> + <button type="button" class="py-2 px-4 font-bold rounded-full mx-auto border-[1px] flex border-gray-200 dark:border-gray-50" on:click={() => copy(mnemonic)}> + <Icon icon="copy" style="mr-1 w-6 my-auto dark:invert" /> Copy </button> {/if} @@ -297,22 +297,22 @@ >{$t("user.settings.nostrKeys")}</label > - <p class="text-secondary mb-1"> + <p class="text-secondary dark:text-gray-200 mb-4"> {$t("user.settings.nostrDescription")} </p> - <button type="button" class="primary" on:click={toggleNsec}> - <Icon icon="warning" style="mr-1 w-6 my-auto" /> + <button type="button" class="py-2 px-4 font-bold rounded-full mx-auto border-[1px] flex border-gray-200 dark:border-gray-50" on:click={toggleNsec}> + <Icon icon="warning" style="mr-2 w-6 my-auto dark:invert" /> {revealNsec ? $t("user.settings.hideNsec") : $t("user.settings.revealNsec")} </button> {#if revealNsec} - <div class="text-lg break-all"> + <div class="text-lg break-all my-6"> {nsec} </div> - <button type="button" class="primary" on:click={() => copy(nsec)}> - <Icon icon="copy" style="mr-1 w-6 my-auto" /> + <button type="button" class="py-2 px-4 font-bold rounded-full mx-auto border-[1px] flex border-gray-200 dark:border-gray-50" on:click={() => copy(nsec)}> + <Icon icon="copy" style="mr-1 w-6 my-auto dark:invert" /> Copy </button> {/if} diff --git a/src/routes/(app)/buy/+page.svelte b/src/routes/(app)/buy/+page.svelte deleted file mode 100644 index caed8f83..00000000 --- a/src/routes/(app)/buy/+page.svelte +++ /dev/null @@ -1,52 +0,0 @@ -<script> - import { enhance } from "$app/forms"; - import { PUBLIC_ONRAMPER } from '$env/static/public'; - import Icon from "$comp/Icon.svelte"; - import Lock from "$comp/Lock.svelte"; - import Card from "$comp/Card.svelte"; - import Calendar from "$comp/Calendar.svelte"; - import Spinner from "$comp/Spinner.svelte"; - import { copy, f } from "$lib/utils"; - - export let data; - - let { address } = data; - let { username, currency } = data.user; - let loading; - - let amount, n, d, cvc; -</script> - -<div class="container px-4 max-w-xl mx-auto mt-10 space-y-5"> - <div class="w-full flex"> - <a href="/" class="mx-auto"> - <Icon icon="logo" /> - </a> - </div> - - <div class="pt-10"> - <div class="flex w-full justify-center">Your bitcoin address</div> - <div class="flex w-full justify-center font-bold"> - <div> - {address} - </div> - </div> - <button class="flex mx-auto mt-5" on:click={() => copy(address)} - ><Icon icon="copy" style="w-10 max-w-none" /> - <div class="my-auto">Copy</div></button - > - </div> - - <div class="flex justify-center items-center"> - <div class="shadow-xl rounded-3xl px-10 pt-5 pb-10 space-y-5 w-full mx-5"> - <iframe - style="border-radius: 4px; border: 1px solid #58585f; margin: auto;max-width: 420px" - src={`https://buy.onramper.com/?apiKey=${PUBLIC_ONRAMPER}`} - height="630px" - width="420px" - title="Onramper widget" - allow="accelerometer; autoplay; camera; gyroscope; payment" - /> - </div> - </div> -</div> diff --git a/src/routes/(app)/forgot/+page.svelte b/src/routes/(app)/forgot/+page.svelte index 378262cc..127241ce 100644 --- a/src/routes/(app)/forgot/+page.svelte +++ b/src/routes/(app)/forgot/+page.svelte @@ -14,15 +14,16 @@ <div class="pt-10"> <div class="w-[243px] mx-auto mb-10"> <a href="/"> - <Icon icon="logo" /> + <img src="images/logo.png" alt="" class="dark:hidden block" /> + <img src="images/logo-white.png" alt="" class="hidden dark:block" /> </a> </div> <div class="flex justify-center items-center"> <div - class="shadow-xl rounded-3xl p-10 pb-12 space-y-5 w-full mx-5 md:mx-0 md:w-[400px]" + class="shadow-xl dark:bg-stone-800 rounded-3xl p-10 pb-12 space-y-5 w-full mx-5 md:mx-0 md:w-[400px]" > - <h1 class="text-2xl font-bold text-center">{$t("login.reset")}</h1> + <h1 class="text-4xl font-bebasNeue tracking-[0.25rem] font-bold text-center dark:text-gray-50">{$t("login.reset")}</h1> {#if form?.error} <div class="text-red-600 text-center" in:fly> @@ -31,7 +32,7 @@ {/if} {#if form?.success} - <div class="text-secondary"> + <div class="text-secondary dark:text-gray-200"> A password reset link will be sent to your email if we have it on file. </div> @@ -39,7 +40,7 @@ <div class="flex w-full"> <a href="/login" - class="bg-black text-white w-full rounded-2xl p-4 font-semibold hover:opacity-80 text-center" + class="bg-black text-white w-full rounded-2xl p-4 font-semibold hover:opacity-80 text-center dark:bg-swapee-purple active:scale-95 transition-all" > Continue </a> @@ -52,7 +53,7 @@ name="email" type="text" required - class="bg-primary" + class="input-swapee mt-1" bind:value={email} use:focus autocapitalize="none" @@ -61,7 +62,7 @@ <button type="submit" - class="bg-black text-white w-full rounded-2xl p-4 font-semibold hover:opacity-80" + class="bg-black dark:bg-swapee-purple active:scale-95 transition-all text-white w-full rounded-2xl p-4 font-semibold hover:opacity-80" disabled={loading} > {#if loading} diff --git a/src/routes/(app)/login/+page.svelte b/src/routes/(app)/login/+page.svelte index cebbf41c..e10bc206 100644 --- a/src/routes/(app)/login/+page.svelte +++ b/src/routes/(app)/login/+page.svelte @@ -67,8 +67,11 @@ applyAction(result); loading = false; } + + </script> + {#if need2fa} <Pin bind:value={token} title="Enter 2FA Code" {cancel} notify={false} /> {/if} @@ -76,15 +79,16 @@ <div class="pt-10"> <div class="w-[243px] mx-auto mb-10"> <a href="/"> - <Icon icon="logo" /> + <img src="images/logo.png" alt="" class="dark:hidden block" /> + <img src="images/logo-white.png" alt="" class="hidden dark:block" /> </a> </div> <div class="flex justify-center items-center"> <div - class="shadow-xl rounded-3xl p-10 pb-12 space-y-5 w-full mx-5 md:mx-0 md:w-[400px]" + class="shadow-xl dark:bg-stone-800 rounded-3xl p-5 sm:p-10 pb-8 sm:pb-12 space-y-5 w-full mx-5 md:mx-0 md:w-[400px] " > - <h1 class="text-2xl font-bold text-center">{$t("login.signIn")}</h1> + <h1 class="text-4xl text-center dark:text-gray-50 font-bold font-bebasNeue tracking-[0.25rem]">{$t("login.signIn")}</h1> {#if form?.error} <div class="text-red-600 text-center" in:fly> @@ -112,7 +116,7 @@ name="username" type="text" required - class="bg-primary" + class="input-swapee mt-1" bind:value={username} use:focus autocapitalize="none" @@ -128,7 +132,7 @@ name="password" type="text" required - class="bg-primary" + class="input-swapee mt-1" bind:value={$password} autocapitalize="none" /> @@ -137,7 +141,7 @@ name="password" type="password" required - class="bg-primary" + class="input-swapee mt-1" bind:value={$password} autocapitalize="none" /> @@ -145,21 +149,21 @@ <button type="button" on:click={() => (revealPassword = !revealPassword)} - class="absolute right-5 top-10" + class="absolute right-5 {revealPassword ? 'top-[46px]' : 'top-11'} dark:invert" > <Icon icon={revealPassword ? "eye" : "eye-off"} /> </button> </div> <div class="flex justify-end items-center"> - <a href="/forgot" class="underline underline-offset-4 text-black" + <a href="/forgot" class="underline underline-offset-4 text-black dark:text-white decoration-swapee-purple hover:opacity-75 decoration-2 " >{$t("login.forgotUserOrPassword")}</a > </div> <button type="submit" - class="bg-black text-white w-full rounded-2xl p-4 font-semibold hover:opacity-80" + class="bg-black text-white w-full rounded-2xl p-4 font-semibold hover:opacity-80 dark:bg-swapee-purple active:scale-95 transition-all " disabled={loading} bind:this={btn} > @@ -171,11 +175,11 @@ </button> </form> - <p class="text-secondary text-center font-medium"> + <p class="text-secondary dark:text-gray-200 text-center font-medium"> {$t("login.haveAccount")} <a href={"/register"} - class="block md:inline text-black underline underline-offset-4 hover:opacity-80" + class="block md:inline-block underline underline-offset-4 text-black dark:text-white decoration-swapee-purple hover:opacity-75 decoration-2" > {$t("login.register")} </a> diff --git a/src/routes/(app)/payment/[id]/+page.svelte b/src/routes/(app)/payment/[id]/+page.svelte index dbaea042..7c8c78e0 100644 --- a/src/routes/(app)/payment/[id]/+page.svelte +++ b/src/routes/(app)/payment/[id]/+page.svelte @@ -70,8 +70,8 @@ </a> <div class="container mx-auto max-w-lg px-4 space-y-8 break-all text-2xl"> - <h1 class="px-3 md:px-0 text-center text-3xl md:text-4xl font-semibold mb-10"> - {$t(amount < 0 ? "payments.sent" : "payments.received")} + <h1 class="px-3 md:px-0 text-center text-4xl md:text-5xl font-semibold mb-8 font-bebasNeue tracking-[0.2rem]"> + {$t(amount < 0 ? "payments.sent" : "payments.received")} </h1> {#if p.with} diff --git a/src/routes/(app)/register/+page.svelte b/src/routes/(app)/register/+page.svelte index 5783059a..82bfbde4 100644 --- a/src/routes/(app)/register/+page.svelte +++ b/src/routes/(app)/register/+page.svelte @@ -155,15 +155,16 @@ {/if} <div class="pt-4"> - <div class="w-[243px] mx-auto"> + <div class="w-[243px] mx-auto mb-10 mt-6"> <a href="/"> - <Icon icon="logo" /> + <img src="images/logo.png" alt="" class="dark:hidden block" /> + <img src="images/logo-white.png" alt="" class="hidden dark:block mb-5" /> </a> </div> <div class="flex justify-center items-center"> <div - class="shadow-xl rounded-3xl p-4 pt-0 space-y-5 w-full mx-5 md:mx-0 md:w-[400px]" + class="shadow-xl dark:bg-stone-800 rounded-3xl p-5 sm:p-10 pb-8 sm:pb-12 pt-3 sm:pt-6 space-y-5 w-full mx-5 md:mx-0 md:w-[400px]" > <input type="file" @@ -174,11 +175,13 @@ <div class="relative"> <button - class="absolute w-8 h-12 left-12 bg-white rounded top-12" + class="absolute w-8 h-12 left-[5%] min-[400px]:left-12 bg-white dark:bg-stone-700 rounded top-12" on:click={decr} > - <Icon icon="chevron-left" style="w-8 " /> + <Icon icon="chevron-left" style="w-8 dark:invert" /> </button> + <!-- svelte-ignore a11y-click-events-have-key-events --> + <!-- svelte-ignore a11y-no-static-element-interactions --> <div class="relative w-32 mx-auto" on:click={selectAvatar}> <button class="w-32 h-32 rounded-full border-4 border-white overflow-hidden flex mx-auto relative" @@ -190,16 +193,16 @@ /> </button> <button - class="absolute bg-white rounded-full p-2 mx-auto right-0 bottom-0 z-10 bg-opacity-80" + class="absolute bg-white dark:bg-stone-700 rounded-full p-2 mx-auto right-0 bottom-0 z-10 bg-opacity-80" > - <Icon icon="upload" style="w-8" /> + <Icon icon="upload" style="w-8 dark:invert" /> </button> </div> <button - class="absolute w-8 h-12 right-12 bg-white rounded top-12" + class="absolute w-8 h-12 right-[5%] min-[400px]:right-12 bg-white dark:bg-stone-700 rounded top-12" on:click={incr} > - <Icon icon="chevron-left" style="w-8 rotate-180" /> + <Icon icon="chevron-left" style="w-8 rotate-180 dark:invert" /> </button> </div> @@ -231,7 +234,7 @@ name="username" type="text" required - class="bg-primary" + class="input-swapee mt-1" bind:value={username} on:focus={clear} autocapitalize="none" @@ -239,10 +242,10 @@ <button type="button" on:click={refresh} - class="absolute right-0 top-4" + class="absolute right-0 top-5" tabindex="5" > - <Icon icon="random" style="w-10 m-4" /> + <Icon icon="random" style="w-10 m-4 dark:invert" /> </button> </div> @@ -256,7 +259,7 @@ name="password" type="text" required - class="bg-primary" + class="input-swapee mt-1" bind:value={$password} autocapitalize="none" /> @@ -266,7 +269,7 @@ name="password" type="password" required - class="bg-primary" + class="input-swapee mt-1" bind:value={$password} autocapitalize="none" on:focus={clear} @@ -276,20 +279,20 @@ type="button" tabindex="4" on:click={() => (revealPassword = !revealPassword)} - class="absolute right-0 top-4" + class="absolute right-0 {revealPassword ? 'top-[22px]' : 'top-5'}" > - <Icon icon={revealPassword ? "eye" : "eye-off"} style="m-6" /> + <Icon icon={revealPassword ? "eye" : "eye-off"} style="m-6 dark:invert" /> </button> </div> - <p class="text-secondary text-sm"> + <p class="text-secondary dark:text-gray-200 text-sm"> {$t("login.passwordRecommendation")} </p> <button tabindex="3" - type="submit" - class="bg-black text-white w-full rounded-2xl p-4 font-semibold hover:opacity-80" + type="button" + class="bg-black dark:bg-swapee-purple text-white w-full rounded-2xl p-4 font-semibold hover:opacity-80 active:scale-95 transition-all" disabled={loading} bind:this={btn} > @@ -301,11 +304,11 @@ </button> </form> - <p class="text-secondary text-center font-medium"> + <p class="text-secondary dark:text-gray-200 text-center font-medium"> {$t("login.haveAccount")} <a href={"/login"} - class="block md:inline text-black underline underline-offset-4 hover:opacity-80" + class="block md:inline underline underline-offset-4 text-black dark:text-white decoration-swapee-purple hover:opacity-75 decoration-2" > {$t("login.signIn")} </a> diff --git a/src/routes/(app)/send/+layout.svelte b/src/routes/(app)/send/+layout.svelte index 5e379c32..0f412759 100644 --- a/src/routes/(app)/send/+layout.svelte +++ b/src/routes/(app)/send/+layout.svelte @@ -13,4 +13,4 @@ <Pin bind:value={$pin} {cancel} /> {/if} -<slot /> +<slot />
\ No newline at end of file diff --git a/src/routes/(app)/send/[...text]/+page.svelte b/src/routes/(app)/send/[...text]/+page.svelte index 343bffd5..96df35ad 100644 --- a/src/routes/(app)/send/[...text]/+page.svelte +++ b/src/routes/(app)/send/[...text]/+page.svelte @@ -32,8 +32,8 @@ <svelte:window bind:innerWidth={w} /> <AppHeader {data} /> -<div class="container px-4 max-w-lg mx-auto space-y-5 mt-20"> - <h1 class="px-3 md:px-0 text-center text-3xl md:text-4xl font-semibold"> +<div class="container px-4 max-w-xl mx-auto space-y-7 mt-24"> + <h1 class="px-3 md:px-0 text-center text-4xl md:text-5xl font-semibold font-bebasNeue tracking-[0.2rem]"> {$t("payments.send")} </h1> @@ -46,28 +46,28 @@ </div> {/if} - <div class="mb-2"> + <div class="mb-4"> <input type="hidden" name="text" bind:value={text} /> <textarea {placeholder} on:keypress={keypress} - class="w-full p-4 border rounded-xl h-48" + class="w-full p-4 border border-stone-400 focus:outline-none focus:ring-2 hover:ring-2 ring-stone-900 dark:ring-white transition-all duration-500 rounded-xl h-48 dark:bg-stone-800 placeholder:text-stone-300" bind:value={text} bind:this={textarea} /> </div> - <div class="grid grid-cols-2 md:grid-cols-4 gap-2"> + <div class="grid grid-cols-2 md:grid-cols-4 gap-3"> <a href={`/qr/${encodeURIComponent(text)}`} class:invisible={!text?.length} > <button type="button" - class="flex border rounded-full px-6 py-2 font-bold hover:opacity-80 mr-1 w-full" + class="flex border dark:border-white rounded-full px-6 py-2 font-bold hover:opacity-80 mr-1 w-full" > - <Icon icon="qr" style="mr-2 w-6 my-auto invert" /> + <Icon icon="qr" style="mr-2 w-6 my-auto invert dark:invert-0" /> <div class="my-auto">{$t("user.send.makeQR")}</div> </button> </a> @@ -75,19 +75,19 @@ <a href="/scan" class="w-full"> <button type="button" - class="flex border rounded-full px-6 py-2 font-bold hover:opacity-80 mr-1 w-full" + class="flex border dark:border-white rounded-full px-6 py-2 font-bold hover:opacity-80 mr-1 w-full" > - <Icon icon="camera" style="mr-2 w-6 my-auto" /> + <Icon icon="camera" style="mr-2 w-6 my-auto dark:invert" /> <div class="my-auto">{$t("user.send.scan")}</div> </button> </a> <button type="button" - class="flex border rounded-full px-6 py-2 font-bold hover:opacity-80 mr-1" + class="flex border dark:border-white rounded-full px-6 py-2 font-bold hover:opacity-80 " on:click={paste} > - <Icon icon="paste" style="mr-2 w-6 my-auto" /> + <Icon icon="paste" style="mr-2 w-6 my-auto dark:invert" /> <div class="my-auto">{$t("user.send.paste")}</div> </button> @@ -96,7 +96,7 @@ type="submit" class="{!text ? 'opacity-50' - : 'opacity-100 hover:opacity-80'} bg-black text-white border rounded-full px-6 py-2 font-bold" + : 'opacity-100 hover:opacity-80'} bg-black dark:bg-swapee-purple text-white border rounded-full px-6 py-2 font-bold" > {$t("user.send.next")} </button> diff --git a/src/routes/(app)/support/+page.svelte b/src/routes/(app)/support/+page.svelte index 4dc2e4d1..87cdc259 100644 --- a/src/routes/(app)/support/+page.svelte +++ b/src/routes/(app)/support/+page.svelte @@ -57,7 +57,7 @@ <AppHeader {data} /> {/if} -<div class="container px-4 max-w-lg mx-auto mt-20 space-y-8"> +<div class="container px-4 max-w-lg mx-auto mt-24 space-y-8"> {#if sent} <h1 class="text-center text-3xl md:text-4xl font-semibold">Thank you!</h1> <div class="text-center text-lg text-secondary"> @@ -73,11 +73,11 @@ </a> </div> {:else} - <h1 class="text-center text-3xl md:text-4xl font-semibold mb-8"> + <h1 class="text-center text-4xl md:text-5xl font-semibold mb-8 font-bebasNeue tracking-[0.2rem]"> {$t("user.support.header")} </h1> - <p class="text-secondary text-lg"> + <p class="text-secondary dark:text-gray-200 text-lg"> Fill out this form or email us directly at <a class="underline" href="mailto:[email protected]">[email protected]</a @@ -85,12 +85,12 @@ </p> <form on:submit={submit}> - <div class="mb-4"> + <div class="mb-6"> <label for="account" class="font-semibold" >{$t("user.support.accountName")}</label > <input - class="bg-primary" + class="input-swapee mt-3" type="text" name="account" required @@ -98,12 +98,12 @@ /> </div> - <div class="mb-4"> + <div class="mb-6"> <label for="email" class="font-semibold" >{$t("user.support.email")}</label > <input - class="bg-primary" + class="input-swapee mt-3" type="email" name="email" bind:value={email} @@ -111,13 +111,13 @@ /> </div> - <div class="mb-4"> + <div class="mb-6"> <label for="message" class="font-semibold" >{$t("user.support.message")}</label > <textarea rows={5} - class="bg-primary" + class="input-swapee mt-3" type="text" name="message" bind:value={message} @@ -130,7 +130,7 @@ disabled={!email || !message} class="g-recaptcha {!email || !message ? 'opacity-50' - : 'opacity-100'} bg-black text-white font-bold rounded-xl py-3 w-full mx-auto {email && + : 'opacity-100'} bg-black dark:bg-swapee-purple text-white font-bold rounded-xl py-3 w-full mx-auto {email && message ? 'hover:opacity-80' : ''}">{$t("user.support.send")}</button diff --git a/src/routes/(static)/+layout.svelte b/src/routes/(static)/+layout.svelte index 13073d5a..cfee0dd1 100644 --- a/src/routes/(static)/+layout.svelte +++ b/src/routes/(static)/+layout.svelte @@ -9,7 +9,11 @@ <SvelteToast options={{ reversed: true, intro: { y: 192 } }} /> <LandingHeader {user} /> -<main class="container flex px-10 md:px-40 mx-auto min-h-[600px] pb-20"> +<main class="container flex px-10 lg:px-40 mx-auto min-h-[600px] pb-20"> <slot /> </main> <Footer /> + +<style> + +</style>
\ No newline at end of file diff --git a/src/routes/(static)/docs/+page.svelte b/src/routes/(static)/docs/+page.svelte index 451b57f3..0f5e20cf 100644 --- a/src/routes/(static)/docs/+page.svelte +++ b/src/routes/(static)/docs/+page.svelte @@ -15,23 +15,23 @@ </script> <div class="space-y-8 lg:text-xl mt-20 pt-20 md:pt-0 w-full max-w-full"> - <h1 class="text-4xl">Documentation</h1> + <h1 class="text-5xl f_bebas_neue tracking-[0.2rem] font-bold">Documentation</h1> - <p class="text-secondary"> + <p class="text-secondary dark:text-gray-200"> Swapee has a simple REST API that can be used to register accounts and make payments and queries. </p> - <h2 class="text-2xl">API Base URL</h2> - <div class="bg-black text-white rounded-lg p-4 flex gap-4"> + <h2 class="text-3xl font-semibold f_bebas_neue tracking-[0.2rem]">API Base URL</h2> + <div class="bg-stone-900 dark:bg-stone-800 text-white rounded-lg p-4 px-5 flex gap-4"> <div>{api}</div> <button class="ml-auto my-auto invert opacity-90" on:click={() => copy(api)} ><Icon icon="copy" style="w-10 max-w-none" /></button > </div> - <h2 class="text-2xl">Auth Token</h2> - <p class="text-secondary"> + <h2 class="text-3xl font-semibold f_bebas_neue tracking-[0.2rem]">Auth Token</h2> + <p class="text-secondary dark:text-gray-200"> {#if user && token} This token authorizes you to use the API as <b>{user.username}</b>. {:else} @@ -42,7 +42,7 @@ Save it in a variable called <b>$token</b> to run the examples. </p> - <div class="bg-black text-white rounded-lg p-4 flex gap-4"> + <div class="bg-stone-900 dark:bg-stone-800 text-white rounded-lg p-4 px-5 flex gap-4"> <div class="w-full break-all">{tokenSample}</div> <button class="ml-auto my-auto invert opacity-90" @@ -51,20 +51,20 @@ > </div> - <h2 class="text-2xl">POST /register</h2> - <p class="text-secondary"> + <h2 class="text-3xl font-semibold f_bebas_neue tracking-[0.2rem]">POST /register</h2> + <p class="text-secondary dark:text-gray-200"> Register a new user account with a username and password </p> <Code sample="register" /> - <h2 class="text-2xl">POST /login</h2> - <p class="text-secondary">Login to an account to get its auth token</p> + <h2 class="text-3xl font-semibold f_bebas_neue tracking-[0.2rem]">POST /login</h2> + <p class="text-secondary dark:text-gray-200">Login to an account to get its auth token</p> <Code sample="login" /> - <h2 class="text-2xl">POST /invoice</h2> - <p class="text-secondary">Create an invoice.</p> + <h2 class="text-3xl font-semibold f_bebas_neue tracking-[0.2rem]">POST /invoice</h2> + <p class="text-secondary dark:text-gray-200">Create an invoice.</p> - <div class="text-secondary"> + <div class="text-secondary dark:text-gray-200"> <div>Request params</div> <div class="grid grid-cols-3 ml-2"> <div class="font-bold">type</div> @@ -93,28 +93,28 @@ <p>Specify a webhook to be called when an invoice is paid</p> <Code sample="webhook" /> - <h2 class="text-2xl">GET /invoice/:hash</h2> - <p class="text-secondary"> + <h2 class="text-3xl font-semibold f_bebas_neue tracking-[0.2rem]">GET /invoice/:hash</h2> + <p class="text-secondary dark:text-gray-200"> Fetch an invoice by passing a bitcoin address or lightning payment hash </p> <Code sample="fetchInvoice" /> - <h2 class="text-2xl">POST /payments</h2> - <p class="text-secondary">Send a lightning payment</p> + <h2 class="text-3xl font-semibold f_bebas_neue tracking-[0.2rem]">POST /payments</h2> + <p class="text-secondary dark:text-gray-200">Send a lightning payment</p> <Code sample="lightning" /> - <p class="text-secondary">Send a bitcoin payment</p> + <p class="text-secondary dark:text-gray-200">Send a bitcoin payment</p> <Code sample="bitcoin" /> - <p class="text-secondary">Send an internal payment to another user</p> + <p class="text-secondary dark:text-gray-200">Send an internal payment to another user</p> <Code sample="internal" /> - <h2 class="text-2xl">GET /payments</h2> - <p class="text-secondary"> + <h2 class="text-3xl font-semibold f_bebas_neue tracking-[0.2rem]">GET /payments</h2> + <p class="text-secondary dark:text-gray-200"> Get all payments sent or received by the current user </p> - <div class="text-secondary"> + <div class="text-secondary dark:text-gray-200"> <div>Query params</div> <div class="grid grid-cols-3 ml-2"> <div class="font-bold">start</div> @@ -129,3 +129,27 @@ </div> <Code sample="payments" /> </div> + +<style> + h2 + p { + margin-top: 0.75rem !important; + } + + h2 { + display: inline-block; + position: relative; + } + + h2::after{ + content: ''; + position: absolute; + bottom: 0; + right: 0; + width: 100%; + left: 50%; + height: 3px; + border-radius: 2px; + background: #7105f3; + transform: translateX(-50%); +} +</style>
\ No newline at end of file diff --git a/src/routes/(static)/privacy/+page.svelte b/src/routes/(static)/privacy/+page.svelte index 4e1e30fa..ffd99f38 100644 --- a/src/routes/(static)/privacy/+page.svelte +++ b/src/routes/(static)/privacy/+page.svelte @@ -1,5 +1,5 @@ -<div class="block space-y-5"> - <h1 class="text-2xl">Privacy Policy</h1> +<div class="block space-y-5 mt-28 md:mt-8"> + <h1 class="text-5xl f_bebas_neue tracking-[0.2rem] font-bold">Privacy Policy</h1> <p> At Swapee.me, creators of the mystical Lightning Wallet, we hold your privacy and personal information in the highest regard. This unique privacy policy outlines our commitment to @@ -65,3 +65,30 @@ these mystifying worlds, for we bear no responsibility for their mystical ways. </p> </div> + +<style> + h2 + p { + margin-top: 0.4rem !important; + margin-bottom: 1rem !important; + } + + h2 { + display: inline-block; + position: relative; + font-weight: 700; + text-transform: uppercase; + } + + /* h2::after{ + content: ''; + position: absolute; + bottom: 0; + right: 0; + width: 100%; + left: 50%; + height: 3px; + border-radius: 2px; + background: #7105f3; + transform: translateX(-50%); + } */ + </style>
\ No newline at end of file diff --git a/src/routes/(static)/sitemap/+page.svelte b/src/routes/(static)/sitemap/+page.svelte new file mode 100644 index 00000000..c1c64da1 --- /dev/null +++ b/src/routes/(static)/sitemap/+page.svelte @@ -0,0 +1,34 @@ +<div class="space-y-5 mt-28 md:mt-8 flex flex-col gap-1 dark:text-red-50"> + <h1 class="text-5xl f_bebas_neue tracking-[0.2rem] font-bold">Sitemap</h1> + <a href="/"> + <h2 class="text-xl">Home</h2> + </a> + <a href="/register"> + <h2 class="text-xl">Register</h2> + </a> + <a href="/login"> + <h2 class="text-xl">Login</h2> + </a> + <a href="/docs"> + <h2 class="text-xl">docs</h2> + </a> + <a href="/privacy"> + <h2 class="text-xl">Privacy</h2> + </a> + <a href="/forgot"> + <h2 class="text-xl">Forgot</h2> + </a> +</div> + +<style> + a { + transition: all 100ms ease-in-out; + } + + a:hover { + color: rgb(113, 5, 243); + text-decoration: underline; + filter: brightness(1.25); + } + +</style>
\ No newline at end of file diff --git a/src/routes/+layout.svelte b/src/routes/+layout.svelte index 055c5956..e14911c9 100644 --- a/src/routes/+layout.svelte +++ b/src/routes/+layout.svelte @@ -1,6 +1,7 @@ <script> import { PUBLIC_DOMAIN } from "$env/static/public"; import "../app.css"; + import "../swapee/css/animation.css"; import { loading, t } from "$lib/translations"; export let data; diff --git a/src/routes/+page.server.js b/src/routes/+page.server.js index 904e543d..aac596a2 100644 --- a/src/routes/+page.server.js +++ b/src/routes/+page.server.js @@ -1,4 +1,27 @@ // export const prerender = true; -export let load = async () => { - return { faqs: ["cost", "compatibility", "safety", "pos", "bitcoin"] }; +import { redirect } from "@sveltejs/kit"; + +export let load = async ({ cookies }) => { + let colorThemeSelected = "dark"; + if (cookies.get("colortheme")) { + colorThemeSelected = cookies.get("colortheme"); + } + + return { faqs: ["cost", "compatibility", "safety", "pos", "bitcoin"], colorThemeSelected: colorThemeSelected }; }; + +export const actions = { + setTheme: async ({ url, cookies }) => { + const theme = url.searchParams.get("theme"); + const redirectTo = url.searchParams.get("redirectTo"); + + if (theme) { + cookies.set("colortheme", theme, { + path: "/", + maxAge: 60 * 60 * 24 * 365, + }); + } + + throw redirect(303, redirectTo ?? "/"); + }, +};
\ No newline at end of file diff --git a/src/routes/+page.svelte b/src/routes/+page.svelte index 87a933ae..a5ffc3d8 100644 --- a/src/routes/+page.svelte +++ b/src/routes/+page.svelte @@ -1,6 +1,63 @@ <script> + import { gsap } from "gsap"; + import { enhance } from "$app/forms"; + import * as Accordion from "$lib/shadcn/components/ui/accordion"; + import * as Sheet from "$lib/shadcn/components/ui/sheet"; + import { Button } from "$lib/shadcn/components/ui/button"; + import { Separator } from "$lib/shadcn/components/ui/separator"; + import { page } from '$app/stores'; + import { t } from "$lib/translations"; import { scroll } from '$lib/utils'; - let about, faq; + import ThemeToggle from "../components/buttons/ThemeToggle.svelte"; + import Footer from "../components/Footer.svelte"; + import { browser } from "$app/environment"; + import { onMount } from "svelte"; + + export let data; + let about, faq, s + let askedQuestionsAccordionValue = "item-0" + + let askedQuestionsAccordion = [ + {id: 0, title: "What does it cost?", description: "It's free to register an account and receive payments. We charge a 0.1% conversion fee if you withdraw regular bitcoin to lightning or vice versa."}, + {id: 1, title: "Do I need any special device or software?", description: "It's free to register an account and receive payments. We charge a 0.1% conversion fee if you withdraw regular bitcoin to lightning or vice versa."}, + {id: 2, title: "When do my funds settle?", description: "It's free to register an account and receive payments. We charge a 0.1% conversion fee if you withdraw regular bitcoin to lightning or vice versa."} + ] + + let themeSelected = data.colorThemeSelected; + let toggleThemeForm; + let homeNav; + let homeNavActiveLeft = 32; + let homeNavActiveTranslate = 0; + let NavHowItWorksEl; + + function toggleThemeSelected() { + themeSelected = themeSelected === "light" ? "dark" : "light"; + } + + function submitUpdateTheme ({ action }) { + const theme = action.searchParams.get('theme'); + const htmlClasses = document.documentElement.classList; + if (theme == "dark" && !(htmlClasses.contains("dark"))) { + htmlClasses.add("dark"); + htmlClasses.remove("light"); + } else if (theme == "light" && !(htmlClasses.contains("light"))) { + htmlClasses.add("light"); + htmlClasses.remove("dark"); + } + toggleThemeSelected() + } + + function defineHomeNavActive(element) { + homeNavActiveTranslate = element.getBoundingClientRect().width; + homeNavActiveLeft = element.getBoundingClientRect().left - homeNav.getBoundingClientRect().left + } + + onMount(() => { + if (NavHowItWorksEl) { + defineHomeNavActive(NavHowItWorksEl) + } + }) + </script> <svelte:head> @@ -39,94 +96,140 @@ </div> <!-- nav --> -<nav class="navbar navbar-expand-lg bg-transparent py-3"> - <div class="container-xxl px-lg-5 px-sm-4 px-3"> - <a class="navbar-brand site_logo" href="#"><img src="images/logo.png" alt="" /></a> - <button - class="navbar-toggler border-0 shadow-none" - type="button" - data-bs-toggle="offcanvas" - data-bs-target="#offcanvas" - > - <span class="navbar-toggler-icon" /> - </button> - <div class="offcanvas offcanvas-start flex-lg-row flex-column" id="offcanvas"> - <div class="py-4 pb-5 px-3 d-lg-none d-flex justify-content-end w-100"> - <button type="button" class="btn-close" data-bs-dismiss="offcanvas" aria-label="Close" /> - </div> - <ul class="navbar-nav text-lg-start text-center mx-auto mb-2 mb-lg-0"> - <li class="nav-item me-lg-5 mb-lg-0 mb-4"> - <a class="nav-link active" href="#">How it works</a> +<nav class="navbar navbar-expand-lg dark:bg-black py-3 "> + <div class="container-xxl px-lg-5 px-sm-4 px-3"> + <a class="navbar-brand site_logo max-lg:ml-1" href="#"> + {#if data.colorThemeSelected == "light"} + <img src="images/logo.png" alt="" /> + {:else} + <img src="images/logo-white.png" alt="" /> + {/if} + </a> + <Sheet.Root > + <Sheet.Trigger asChild let:builder> + <Button builders={[builder]} variant="ghost" class="lg:hidden dark:hover:bg-stone-800 px-1"> + <svg class="w-8 h-8 text-gray-800 dark:text-white" aria-hidden="true" xmlns="http://www.w3.org/2000/svg" fill="none" viewBox="0 0 24 24"> + <path stroke="currentColor" stroke-linecap="round" stroke-width="2" d="M5 7h14M5 12h14M5 17h14"/> + </svg> + </Button> + </Sheet.Trigger> + <Sheet.Content side="left" id="offcanvas" class="bg-white dark:!bg-black border-r-2 border-black dark:!border-white"> + <ul class=" text-lg-start text-center mx-auto mb-2 dark:text-white mt-16 pl-0"> + <li class="nav-item mb-4"> + <a class="nav-link dark:!text-white" href="#">How it works</a> </li> - <li class="nav-item me-lg-5 mb-lg-0 mb-4"> - <a class="nav-link" href="" on:click={() => scroll(faq)}>F.A.Q.</a> + <li class="nav-item mb-4"> + <a class="nav-link dark:!text-white" href="" on:click={() => scroll(faq)}>F.A.Q.</a> </li> <li class="nav-item"> - <a class="nav-link" href="" on:click={() => scroll(about)}>About</a> + <a class="nav-link dark:!text-white" href="" on:click={() => scroll(about)}>About</a> </li> + </ul> + <div + class="flex flex-wrap items-center gap-4 lg:pt-0 justify-center mt-4" + role="search" + > + <a href="/register" class="btn_black flex-1 w-full text-center text-nowrap"><span class=" dark:!bg-white dark:!text-black dark:!border-black dark:!border-2">get started</span></a> + <a href="/login" class="btn_white flex-1 w-full text-center text-nowrap"><span class=" dark:!bg-black dark:!text-white dark:!border-white dark:!border-2">sign in</span></a> + </div> + <form method="POST" bind:this={toggleThemeForm} use:enhance={submitUpdateTheme} class="mx-auto flex justify-center mt-4" > + {#if themeSelected && themeSelected == "dark"} + <ThemeToggle on:click={toggleThemeSelected} formaction="/?/setTheme&theme=light&redirectTo={$page.url.pathname}" /> + {:else if themeSelected && themeSelected == "light"} + <ThemeToggle on:click={toggleThemeSelected} formaction="/?/setTheme&theme=dark&redirectTo={$page.url.pathname}" /> + {/if} + </form> + </Sheet.Content> + </Sheet.Root> + <div class="hidden lg:flex justify-between items-center !border-r-2 !border-r-white"> + <ul class="flex gap-x-8 relative text-center mx-auto mb-2 dark:text-white uppercase font-semibold" bind:this={homeNav}> + <li class=""> + <a class="text-black dark:!text-white no-underline" href="#" bind:this={NavHowItWorksEl} on:click={(e) => {defineHomeNavActive(e.target)}}>How it works</a> + </li> + <li class=""> + <a class="text-black dark:!text-white no-underline" href="" on:click={(e) => { + defineHomeNavActive(e.target) + scroll(faq) + }}>F.A.Q.</a> + </li> + <li class=""> + <a class="text-black dark:!text-white no-underline" href="" on:click={(e) => { + defineHomeNavActive(e.target) + scroll(faq) + }}>About</a> + </li> + <div class="home-nav-active absolute top-8 h-1 w-10 rounded-sm bg-swapee-purple transition-all duration-300 ease-in-out" style={`left: ${homeNavActiveLeft}px; transform: translate(${(homeNavActiveTranslate / 2) - 20}px, 0px);`}></div> </ul> - <div - class="d-flex justify-content-lg-end justify-content-center nav_btn pt-lg-0 pt-5" - role="search" - > - <a href="/register" class="btn_black"><span>get started</span></a> - <a href="/login" class="btn_white"><span>sign in</span></a> - </div> + </div> + <div + class="hidden lg:flex items-center gap-4 lg:pt-0" + role="search" + > + <a href="/register" class="btn_black"><span class="dark:!bg-white dark:!text-black dark:!border-black dark:!border-2">get started</span></a> + <a href="/login" class="btn_white"><span class="dark:!bg-black dark:!text-white dark:!border-white dark:!border-2">sign in</span></a> + <form method="POST" bind:this={toggleThemeForm} use:enhance={submitUpdateTheme} > + {#if themeSelected && themeSelected == "dark"} + <ThemeToggle on:click={toggleThemeSelected} formaction="/?/setTheme&theme=light&redirectTo={$page.url.pathname}" /> + {:else if themeSelected && themeSelected == "light"} + <ThemeToggle on:click={toggleThemeSelected} formaction="/?/setTheme&theme=dark&redirectTo={$page.url.pathname}" /> + {/if} + </form> </div> </div> </nav> <!-- hero --> -<div class="site_hero pt-md-5 pt-4"> - <div class="container-lg px-sm-4 px-3 pt-md-5 text-center"> +<div class="site_hero pt-md-5 pt-4 dark:bg-black"> + <div class="container-lg px-sm-4 px-3 pt-md-5 mb-16 text-center"> <h1 - class="text-center text-black f_bebas_neue text-uppercase fw-bold letter_space_2 display-3 lh-1" + class="text-center dark:text-white f_bebas_neue text-uppercase fw-bold letter_space_2 display-3 lh-1" > The easiest way to get <br /> started with bitcoin. </h1> - <p class="text-center txt_slate_blue mb-4"> + <p class="text-center txt_slate_blue dark:!text-gray-200 mb-4"> A simple but powerful web wallet for everyone. *No software or hardware required.* </p> <a href="/register" class="btn_purple"><span class="px-5">Start in Seconds</span></a> </div> <div class="container-xxl px-lg-5 px-sm-4 px-3"> <div class="w-100"> - <img class="w-100" src="images/hero_bg.png" alt="" /> + <img src="images/hero_bg.png" alt="" class="w-full slide-top" /> </div> </div> </div> <!-- first grid --> -<section class="py-4"> +<section class="py-4 dark:bg-black"> <div class="container-lg px-sm-4 px-3"> <div class="row justify-content-center"> <div class="col-lg-4 col-md-6 mb-lg-0 mb-4"> <div class="swapee_3_grids h-100 text-center col-md-10 mx-auto"> - <img src="images/swapee-grid-1-3.png" alt="" /> - <h5 class="f_bebas_neue fw-bold letter_space_1">Create your account</h5> - <p class="txt_slate_blue lh-base"> + <img src="images/swapee-grid-1-3.png" class="mx-auto hover:scale-[1.025] transition-all duration-500 ease-in-out" alt="" /> + <h5 class="f_bebas_neue fw-bold letter_space_1 dark:text-white">Create your account</h5> + <p class="txt_slate_blue dark:!text-gray-200 lh-base max-w-[425px] mx-auto"> A username and password is all you need to get started. <a href="#" - class="swapee_grid_link">Don’t forget it!</a + class="swapee_grid_link dark:!text-gray-200">Don’t forget it!</a > </p> </div> + </div> <div class="col-lg-4 col-md-6 mb-lg-0 mb-4"> <div class="swapee_3_grids h-100 text-center col-md-10 mx-auto"> - <img src="images/swapee-grid-2-3.png" alt="" /> - <h5 class="f_bebas_neue fw-bold letter_space_1">Ask for payments</h5> - <p class="txt_slate_blue lh-base"> + <img src="images/swapee-grid-2-3.png" class="mx-auto hover:scale-[1.025] transition-all duration-500 ease-in-out" alt="" /> + <h5 class="f_bebas_neue fw-bold letter_space_1 dark:text-white">Ask for payments</h5> + <p class="txt_slate_blue dark:!text-gray-200 lh-base max-w-[425px] mx-auto"> It’s the same as you normally would traditionally, but with bitcoin. </p> </div> </div> <div class="col-lg-4 col-md-6"> <div class="swapee_3_grids h-100 text-center col-md-10 mx-auto"> - <img src="images/swapee-grid-3-3.png" alt="" /> - <h5 class="f_bebas_neue fw-bold letter_space_1">That's all!</h5> - <p class="txt_slate_blue lh-base"> + <img src="images/swapee-grid-3-3.png" class="mx-auto hover:scale-[1.025] transition-all duration-500 ease-in-out" alt="" /> + <h5 class="f_bebas_neue fw-bold letter_space_1 dark:text-white">That's all!</h5> + <p class="txt_slate_blue dark:!text-gray-200 lh-base max-w-[425px] mx-auto"> Spend your coins immediately or save it and watch it grow, the choice is yours. </p> </div> @@ -136,62 +239,62 @@ </section> <!-- lightning network --> -<section class="pt-md-5" bind:this={about}> +<section class="pt-md-5 dark:bg-black" bind:this={about}> <div class="container-lg px-sm-4 px-3"> <div class="row align-items-center justify-content-center flex-md-row flex-column-reverse"> <div class="col-md-7 mb-md-0 mb-4"> <div> <h6 class="f_bebas_neue txt_purple">Say Goodbye to Waiting</h6> - <h2 class="h1 letter_space_2 f_bebas_neue fw-bold text-black br_md_none mb-3 lh-1"> + <h2 class="h1 letter_space_2 f_bebas_neue fw-bold dark:text-white br_md_none mb-3 lh-1"> Lightning Network <br /> Brings Instant Payments </h2> - <p class="txt_slate_blue"> + <p class="txt_slate_blue dark:!text-gray-200"> Say goodbye to the headaches of waiting for bank settlements and dealing with chargebacks with our payment solution. With instant settlement and no 3% credit card processing fees, merchants can enjoy hassle-free retail payments. </p> - <div class="mt-4 sec_btn"> - <a href="#" class="btn_white f_bebas_neue"><span>Learn More</span></a> - <a href="#" class="btn_black f_bebas_neue"><span>Get Started</span></a> + <div class="mt-4 sec_btn flex gap-x-3 gap-y-3 flex-wrap"> + <a href="#" class="btn_white f_bebas_neue"><span class="dark:!bg-black dark:!text-white dark:!border-white dark:!border-2">Learn More</span></a> + <a href="/register" class="btn_black f_bebas_neue"><span class="dark:!bg-white dark:!text-black dark:!border-black dark:!border-2">Get Started</span></a> </div> </div> </div> - <div class="col-md-5 mb-md-0 mb-5 scale_img_right"> + <div class="col-md-5 mb-md-0 mb-5 scale_img_rig"> <div> - <img src="images/swapee-sec-calculator.png" class="w-100" alt="" /> + <img src={data.colorThemeSelected == "light" ? "images/swapee-sec-calculator.png" : "images/swapee-sec-calculator-dark.png"} class="hover:scale-[1.015] transition-all duration-500 ease-in-out" alt="" /> </div> </div> </div> </div> </section> -<section class="pt-5 bg_light"> +<section class="pt-5 bg_light dark:!bg-[#0D0D0D]"> <div class="container-lg px-sm-4 px-3"> <div class="row align-items-center justify-content-center"> - <div class="col-md-5 scale_img_left"> + <div class="col-md-5"> <div> - <img src="images/swapee-sec-2-img.png" class="w-100" alt="" /> + <img src="images/swapee-sec-2-img.png" class="slide-top" alt="" /> </div> </div> <div class="col-md-7 mb-md-0 mb-4"> <div> <h6 class="f_bebas_neue txt_purple">Quick and painless</h6> - <h2 class="h1 f_bebas_neue fw-bold text-black br_md_none mb-3 letter_space_2 lh-1"> - Simple to use + <h2 class="h1 f_bebas_neue fw-bold dark:text-white br_md_none mb-3 letter_space_2 lh-1"> + Simple to uses </h2> - <p class="txt_slate_blue mb-4"> + <p class="txt_slate_blue dark:!text-gray-200 mb-4"> Just enter an amount in your local currency, share the QR code and you’re done. We do all the heavy lifting so you can focus on your business. You always have the option of taking custody of your funds by withdrawing instantly at any time. </p> - <div class="mt-4 sec_btn"> - <a href="#" class="btn_white f_bebas_neue"><span>Learn More</span></a> - <a href="/register" class="btn_purple f_bebas_neue"><span>Get Started</span></a> + <div class="mt-4 sec_btn flex gap-x-3 gap-y-3 flex-wrap"> + <a href="#" class="btn_white f_bebas_neue"><span >Learn More</span></a> + <a href="/register" class="btn_purple f_bebas_neue"><span >Get Started</span></a> </div> </div> </div> @@ -199,116 +302,74 @@ </div> </section> -<section class="sec_3 position-relative"> +<section class="sec_3 position-relative dark:bg-black"> <div class="col-md-5 d-xxl-none d-md-block d-none position-absolute img_position"> <div> - <img src="images/swapee-sec-3-img.png" class="w-100" alt="" /> + <img src={data.colorThemeSelected == "light" ? "images/swapee-sec-3-img.png" : "images/swapee-sec-3-img-dark.png"} alt="" class="hover:scale-[0.985] transition-all duration-500 ease-in-out" /> </div> </div> <div class="container-lg px-sm-4 px-3"> <div class="row align-items-center justify-content-center flex-md-row flex-column-reverse"> - <div class="col-md-6 mb-md-0 mb-4"> + <div class="col-md-6 mb-md-0"> <div> <h6 class="f_bebas_neue txt_purple">Customized & Personalized</h6> - <h2 class="h1 letter_space_2 f_bebas_neue fw-bold text-black br_md_none mb-3 lh-1"> + <h2 class="h1 letter_space_2 f_bebas_neue fw-bold dark:text-white br_md_none mb-3 lh-1"> Brand it your way! </h2> - <p class="txt_slate_blue"> + <p class="txt_slate_blue dark:!text-gray-200"> You have complete control over your profile page's aesthetic. Customize it with your preferred color scheme, avatar, and banner to reflect your brand, personality and interests. </p> - <div class="mt-4 sec_btn"> - <a href="#" class="btn_white f_bebas_neue mb-3"><span>Learn More</span></a> - <a href="#" class="btn_black f_bebas_neue mb-3"><span>Get Started</span></a> + <div class="sec_btn mt-4 flex gap-x-3 flex-wrap"> + <a href="#" class="btn_white f_bebas_neue mb-3"><span class="dark:!bg-black dark:!text-white dark:!border-white dark:!border-2">Learn More</span></a> + <a href="/register" class="btn_black f_bebas_neue mb-3"><span class="dark:!bg-white dark:!text-black dark:!border-black dark:!border-2">Get Started</span></a> </div> </div> </div> - <div class="col-md-6 mb-md-0 mb-4 sec_3_img"> + <div class="col-md-6 mb-md-0 mb-4 overflow-hidden"> <div class="d-xxl-block d-md-none d-block"> - <img src="images/swapee-sec-3-img.png" class="w-100" alt="" /> + <img src={data.colorThemeSelected == "light" ? "images/swapee-sec-3-img.png" : "images/swapee-sec-3-img-dark.png"} alt="" class="hover:scale-[0.985] transition-all duration-500 ease-in-out" /> </div> </div> </div> </div> </section> -<section class="py-5 bg_light"> +<section class="py-5 bg_light dark:!bg-[#0D0D0D]"> <div class="container-lg px-sm-4 px-3" bind:this={faq}> <div class="row align-items-center justify-content-center"> <div class="col-12 text-center"> <h6 class="f_bebas_neue txt_purple">This might help</h6> - <h2 class="h1 letter_space_2 f_bebas_neue fw-bold text-black br_md_none mb-5 lh-1"> + <h2 class="h1 letter_space_2 f_bebas_neue fw-bold dark:text-white br_md_none mb-5 lh-1"> Frequently asked <br /> questions </h2> </div> - <div class="accordion" id="accordionExample"> - <div class="accordion-item swapee_accordion"> - <h2 class="" id="headingOne"> - <button class="accordion-button shadow-none" type="button"> - <span class="line"> What does it cost? </span> - </button> - </h2> - <div id="collapseOne"> - <div class="accordion-body"> - <p class="txt_slate_blue"> - Registering an account and receiving payments on Swapee.me is completely free. Our - aim is to offer a smooth user experience without any financial barriers. However, - when converting regular Bitcoin to Lightning or vice versa, we apply a modest 0.1% - conversion fee to ensure secure and efficient transactions. - </p> - </div> - </div> - </div> - - <div class="accordion-item swapee_accordion"> - <h2 class="accordion-header" id="headingTwo"> - <button class="accordion-button shadow-none" type="button"> - <span class="line"> Do I need any special device or software? </span> - </button> - </h2> - <div id="collapseTwo"> - <div class="accordion-body"> - <p class="txt_slate_blue"> - No, Swapee.me is designed to be incredibly user-friendly. You can access our - platform using any device that can connect to a web browser - whether it's your - mobile phone, PC, tablet, or any other compatible device. Swapee.me prioritizes - accessibility and ease of use for all users, regardless of their chosen device. - </p> - </div> - </div> - </div> - - <div class="accordion-item swapee_accordion"> - <h2 class="accordion-header" id="headingThree"> - <button class="accordion-button shadow-none " type="button"> - <span class="line"> When do my funds settle? </span> - </button> - </h2> - <div id="collapseThree" aria-labelledby="headingThree" data-bs-parent="#accordionExample"> - <div class="accordion-body"> - <p class="txt_slate_blue"> - At Swapee.me, we value your time. Lightning payments on our platform settle - instantly, reflecting our commitment to efficiency and user satisfaction. Forget - waiting for extended transaction confirmations; with Swapee.me, you can experience - the speed and efficiency of the Lightning Network firsthand. - </p> - </div> - </div> - </div> - </div> + <Accordion.Root class="w-full flex flex-col gap-3" bind:value={askedQuestionsAccordionValue} > + {#each askedQuestionsAccordion as askedQuestionAccordion } + <Accordion.Item value={`item-${askedQuestionAccordion.id}`} class="bg-white dark:!bg-black rounded-[10px] border-[1px] border-gray-300 px-4"> + <Accordion.Trigger class="py-0"> + <h2 class="text-base pt-3 pb-3 font-bold border-b-black dark:!border-b-swapee-purple {askedQuestionsAccordionValue == `item-${askedQuestionAccordion.id}` ? 'border-b-2' : ''}">{askedQuestionAccordion.title}</h2> + </Accordion.Trigger> + <Accordion.Content class="text-base text-slate-500 dark:text-gray-200 mt-0"> + <Separator orientation="horizontal" class="mt-0 mb-3 bg-purple-950" /> + <p class="mb-0">{askedQuestionAccordion.description}</p> + </Accordion.Content> + </Accordion.Item> + {/each} + </Accordion.Root> </div> </div> </section> <!-- bitcoin_location --> -<div class="bitcoin_location"> +<div class="bitcoin_location dark:bg-black bg-map-light dark:!bg-map-dark bg-no-repeat"> <div class="container-lg px-sm-4 px-3"> - <h2 class="h3 text-center text-black f_bebas_neue fw-bold letter_space_2"> + <h2 class="h3 text-center dark:text-white f_bebas_neue fw-bold letter_space_2"> Real-World Bitcoin Locations </h2> <p class="text-center opacity-75 mb-md-5 mb-4"> @@ -317,56 +378,14 @@ with <span class="fs_18 fw-bold">Swapee!</span> </p> <div class="d-flex justify-content-center align-items-start flex-wrap"> - <a href="#" class="btn_line me-sm-3 me-2 mb-4">Business Listings</a> - <a href="#" class="btn_black"><span class="px-sm-5">Get Listed</span></a> + <a href="#" class="btn_line me-sm-3 me-2 mb-4 dark:!text-white">Business Listings</a> + <a href="#" class="btn_black"><span class="px-sm-5 dark:!bg-white dark:!text-black dark:!border-black dark:!border-2">Get Listed</span></a> </div> </div> </div> -<!-- footer --> -<footer class="site_footer"> - <div class="container-lg px-4"> - <!-- footer_top --> - <div class="footer_top pb-4"> - <div class="row align-items-center justify-content-between"> - <div class="col-md-5 mb-md-0 mb-5"> - <a href="#" class="footer_logo"><img src="images/footer-logo.png" alt="" /></a> - <!-- <p class="text-white-50 mt-5 mb-4"> --> - <!-- Copyright © 2023. Swapee.me is a Registered Cryptoasset firm and is registered with the --> - <!-- UK Financial Conduct Authority. --> - <!-- <br /> --> - <!-- <br /> --> - <!-- All rights reserved. --> - <!-- </p> --> - <a class="btn_language" href="#">English</a> - </div> - <div - class="ps-md-4 footer_top_right col-md-6 d-flex align-items-center justify-content-end justify-content-sm-center justify-content-between" - > - <div class="row justify-content-md-end"> - <div class="col-sm-6 mb-xl-0 mb-4 pe-md-0 pe-sm-5"> - <h6 class="text-white opacity-75 mb-0">Business enquiries</h6> - <a href="mailto:[email protected]">[email protected]</a> - </div> - <div class="col-sm-6 pe-xl-5 mb-4 pe-md-0 pe-sm-5"> - <h6 class="text-white opacity-75 mb-0">Support enquiries</h6> - <a href="mailto:[email protected]">[email protected]</a> - </div> - </div> - </div> - </div> +<Footer /> - <!-- footer_bottom --> - <div class="footer_bottom pt-4 pb-2"> - <ul class="list-unstyled mb-0 ps-0"> - <li class="pb-3"> - <a href="/docs">Documentation</a> - </li> - <li class="pb-3"> - <a href="/privacy">Privacy Policy</a> - </li> - </ul> - </div> - </div> - </div> -</footer> +<style> + +</style>
\ No newline at end of file diff --git a/src/swapee/css/animation.css b/src/swapee/css/animation.css new file mode 100644 index 00000000..4ef62b82 --- /dev/null +++ b/src/swapee/css/animation.css @@ -0,0 +1,32 @@ +/* ---------------------------------------------- + * Generated by Animista on 2024-2-6 22:17:3 + * Licensed under FreeBSD License. + * See http://animista.net/license for more info. + * w: http://animista.net, t: @cssanimista + * ---------------------------------------------- */ + + @-webkit-keyframes slide-top { + 0% { + -webkit-transform: translateY(0) scale(1.015); + transform: translateY(0) scale(1.015); + } + 100% { + -webkit-transform: translateY(-20px); + transform: translateY(-20px); + } + } + @keyframes slide-top { + 0% { + -webkit-transform: translateY(0) scale(1.015); + transform: translateY(0) scale(1.015); + } + 100% { + -webkit-transform: translateY(-20px); + transform: translateY(-20px); + } +} + +.slide-top { + -webkit-animation: slide-top 4s infinite alternate cubic-bezier(0.250, 0.460, 0.450, 0.940) both; + animation: slide-top 4s infinite alternate cubic-bezier(0.250, 0.460, 0.450, 0.940) both; +}
\ No newline at end of file diff --git a/src/swapee/css/style.css b/src/swapee/css/style.css index 69996058..06633f62 100644 --- a/src/swapee/css/style.css +++ b/src/swapee/css/style.css @@ -91,7 +91,6 @@ body{ #offcanvas ul li a{ font-size: 14px; font-weight: 600; - color: var(--bs-black); text-transform: uppercase; font-family: 'Work Sans', sans-serif; position: relative; @@ -104,7 +103,7 @@ body{ left: 50%; width: 0; height: 2px; - background: #7005f38a; + background: #7105f3; transform: translateX(-50%); -webkit-transform: translateX(-50%); -moz-transform: translateX(-50%); @@ -117,7 +116,6 @@ body{ -o-transition: var(--transition_3s); } -#offcanvas ul li a.active::after, #offcanvas ul li a:hover::after{ width: 50px; } @@ -231,7 +229,7 @@ body{ align-items: center; padding-top: 90px; padding-bottom: 90px; - background: url("../img/map.png") no-repeat; + background: url("../img/footer-logo.png") no-repeat; background-size: cover; } @@ -313,7 +311,7 @@ body{ padding-bottom: 12vw; } -/* accordion */ +/* accordion NOT MORE BEING USED (AFTER ALTERATIONS, NOW THE ACCORDION IS BUILT WITH TAILWIND + SHADCN) */ .swapee_accordion { border-radius: 10px; -webkit-border-radius: 10px; diff --git a/src/swapee/img/map-dark.png b/src/swapee/img/map-dark.png Binary files differnew file mode 100644 index 00000000..08a00dd5 --- /dev/null +++ b/src/swapee/img/map-dark.png diff --git a/static/favicon.png b/static/favicon.png Binary files differnew file mode 100644 index 00000000..ed0fc6c6 --- /dev/null +++ b/static/favicon.png diff --git a/static/favicon.svg b/static/favicon.svg index 7d7d8ece..45af7dbb 100644 --- a/static/favicon.svg +++ b/static/favicon.svg @@ -2,5 +2,5 @@ <path d="M69.8824 36C69.8824 54.7127 54.7127 69.8824 36 69.8824C17.2873 69.8824 2.11765 54.7127 2.11765 36C2.11765 17.2873 17.2873 2.11765 36 2.11765C54.7127 2.11765 69.8824 17.2873 69.8824 36Z" fill="white"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M36 4.23529C18.4568 4.23529 4.23529 18.4568 4.23529 36C4.23529 53.5432 18.4568 67.7647 36 67.7647C53.5432 67.7647 67.7647 53.5432 67.7647 36C67.7647 18.4568 53.5432 4.23529 36 4.23529ZM0 36C0 16.1177 16.1177 0 36 0C55.8823 0 72 16.1177 72 36C72 55.8823 55.8823 72 36 72C16.1177 72 0 55.8823 0 36Z" fill="black"/> <path fill-rule="evenodd" clip-rule="evenodd" d="M36 58.5882C48.4751 58.5882 58.5882 48.4751 58.5882 36C58.5882 23.5248 48.4751 13.4117 36 13.4117C23.5249 13.4117 13.4118 23.5248 13.4118 36C13.4118 48.4751 23.5249 58.5882 36 58.5882ZM36 54C45.9411 54 54 45.9411 54 36C54 26.0589 45.9411 18 36 18C26.0589 18 18 26.0589 18 36C18 45.9411 26.0589 54 36 54Z" fill="black"/> -<path fill-rule="evenodd" clip-rule="evenodd" d="M36.0001 22.8988C36.0001 22.8988 36 22.8988 36 22.8988C28.7644 22.8988 22.8988 28.7644 22.8988 36C22.8988 43.2356 28.7644 49.1012 36 49.1012C36 49.1012 36.0001 49.1012 36.0001 49.1012V22.8988Z" fill="black"/> +<path fill-rule="evenodd" clip-rule="evenodd" d="M36.0001 22.8988C36.0001 22.8988 36 22.8988 36 22.8988C28.7644 22.8988 22.8988 28.7644 22.8988 36C22.8988 43.2356 28.7644 49.1012 36 49.1012C36 49.1012 36.0001 49.1012 36.0001 49.1012V22.8 988Z" fill="black"/> </svg> diff --git a/static/icons/logo-dark.svg b/static/icons/logo-dark.svg new file mode 100644 index 00000000..df6377ea --- /dev/null +++ b/static/icons/logo-dark.svg @@ -0,0 +1,565 @@ +<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px" + width="100%" viewBox="0 0 4202 1033" enable-background="new 0 0 4202 1033" xml:space="preserve"> +<path fill="#000000" opacity="1.000000" stroke="none" + d=" +M3050.000000,1036.000000 + C2033.430176,1036.000000 1017.860291,1036.000000 2.145202,1036.000000 + C2.145202,691.463013 2.145202,346.925995 2.145202,2.194476 + C1402.666626,2.194476 2803.333252,2.194476 4203.944336,2.194476 + C4203.944336,346.806976 4203.944336,691.403503 4203.944336,1036.000000 + C3819.592041,1036.000000 3435.296143,1036.000000 3050.000000,1036.000000 +M982.125610,583.000000 + C982.192139,458.672485 982.308655,334.344971 982.230530,210.017548 + C982.224304,200.071426 981.960083,189.903961 979.974670,180.216690 + C967.432373,119.019875 932.031555,77.552933 872.233337,57.937878 + C850.724670,50.882610 828.279419,50.780220 805.957520,50.761009 + C659.631836,50.635086 513.305786,50.494091 366.980133,50.654396 + C309.660217,50.717190 252.334564,51.165169 195.023666,52.146252 + C150.949707,52.900742 114.759514,71.362221 85.535316,103.979210 + C57.670280,135.079239 46.445118,172.118057 46.445919,213.235306 + C46.449718,407.892914 46.369556,602.550537 46.415398,797.208130 + C46.419006,812.527161 46.681290,827.876038 47.642170,843.159607 + C50.964561,896.004822 76.825188,935.554321 120.601089,963.908508 + C148.077576,981.705261 178.983810,987.226196 211.185684,987.210693 + C413.508667,987.113464 615.831665,987.050293 818.154602,986.848694 + C829.459778,986.837402 840.956787,986.814636 852.038025,984.903870 + C943.873779,969.068054 983.398071,890.224609 982.589050,829.985107 + C981.492615,748.336060 982.195679,666.662842 982.125610,583.000000 +M2013.999634,586.936462 + C2013.328735,589.165405 2012.664429,591.396362 2011.985962,593.622986 + C2005.102905,616.205139 1998.312622,638.816406 1991.229736,661.335754 + C1990.173584,664.693665 1990.572021,669.757507 1984.114990,670.123230 + C1982.663940,666.223694 1981.063599,662.268616 1979.709229,658.231079 + C1956.439697,588.855164 1933.193726,519.471436 1909.958374,450.084106 + C1902.563843,428.001556 1895.248413,405.892548 1887.830811,383.817810 + C1884.783569,374.749023 1880.181396,366.829529 1871.186035,362.304443 + C1850.676514,351.987213 1826.767212,360.907684 1818.280884,382.110352 + C1817.293701,384.576935 1816.515259,387.129150 1815.688477,389.657532 + C1786.545776,478.776703 1757.431763,567.905212 1728.213623,656.999634 + C1726.505615,662.208008 1723.961670,667.142273 1721.806763,672.204102 + C1718.565552,668.331177 1717.182007,664.675293 1716.012817,660.952026 + C1688.020630,571.811646 1660.066772,482.659241 1632.044189,393.528412 + C1630.152710,387.512390 1628.312134,381.382019 1625.519043,375.766876 + C1618.053101,360.758179 1600.656982,354.804138 1583.456299,360.868988 + C1567.936035,366.341370 1559.413940,381.064514 1562.583496,397.286133 + C1563.344971,401.183563 1564.634644,404.995758 1565.899536,408.774139 + C1600.630005,512.517151 1635.347534,616.264648 1670.221191,719.959534 + C1672.964478,728.116699 1676.199463,736.240417 1680.316406,743.772583 + C1686.355835,754.821716 1696.000122,761.768311 1708.552124,764.062317 + C1735.545410,768.995605 1757.694458,759.921448 1767.714722,731.264709 + C1771.225830,721.223450 1774.635132,711.146484 1778.098633,701.088501 + C1801.375366,633.492859 1824.646606,565.895203 1847.957520,498.311371 + C1848.991943,495.312592 1850.396729,492.441650 1852.477295,487.493744 + C1855.525635,495.216827 1857.988525,500.874786 1860.017090,506.684387 + C1886.106079,581.400208 1912.237183,656.101562 1938.113281,730.891174 + C1945.967407,753.591919 1961.960083,768.210693 1994.063110,764.624451 + C2010.448608,762.793945 2021.895508,754.232239 2028.849365,739.661560 + C2032.276245,732.480835 2035.131226,724.975464 2037.640381,717.416260 + C2070.839844,617.399841 2103.959473,517.356873 2136.994873,417.286163 + C2139.490234,409.727325 2141.751465,402.006012 2143.134766,394.185669 + C2145.065918,383.269867 2141.855469,373.506989 2133.079590,366.471252 + C2117.699951,354.141541 2088.533447,353.824677 2077.924316,379.529877 + C2075.520752,385.353363 2073.715332,391.438141 2071.865479,397.473389 + C2052.672119,460.099182 2033.525635,522.739441 2013.999634,586.936462 +M3539.000000,760.195190 + C3561.664795,760.173157 3584.329834,760.230225 3606.993652,760.066895 + C3611.959473,760.031128 3616.938965,759.362854 3621.877930,758.722046 + C3635.555908,756.947266 3645.599854,745.096069 3645.189941,728.480652 + C3644.825684,713.720093 3633.510986,702.729736 3618.274170,701.345093 + C3614.632324,701.014038 3610.951416,701.021912 3607.288574,701.020752 + C3551.292969,701.003113 3495.297607,701.053589 3439.302002,700.964844 + C3430.731201,700.951233 3422.161621,700.321533 3412.507324,699.933105 + C3411.765381,663.038757 3410.496094,626.991150 3414.016602,589.982666 + C3419.118652,589.982666 3423.063721,589.983887 3427.009033,589.982483 + C3477.671631,589.965027 3528.334229,589.948792 3578.996826,589.925476 + C3582.329346,589.923950 3585.662842,589.907166 3588.994141,589.829163 + C3596.894775,589.644226 3603.018799,586.025085 3607.684326,579.841125 + C3615.148682,569.947876 3616.788574,559.190735 3611.267578,547.968628 + C3605.934082,537.127075 3597.133057,531.960449 3584.736816,532.011902 + C3532.075195,532.230530 3479.412109,532.147766 3426.749756,532.084106 + C3422.607422,532.079102 3418.466064,531.375000 3413.542480,530.924194 + C3411.358887,494.057922 3410.798584,458.347717 3414.029297,422.047302 + C3418.398682,422.047302 3421.692383,422.048370 3424.986328,422.047119 + C3485.981201,422.023651 3546.976074,422.031250 3607.970947,421.920898 + C3613.262207,421.911346 3618.708008,421.779205 3623.812012,420.567200 + C3636.635254,417.522247 3644.870605,407.015991 3645.516846,393.934631 + C3646.120850,381.706909 3637.821045,369.624603 3625.512695,365.922821 + C3620.839111,364.517181 3615.702881,364.164886 3610.776367,364.158203 + C3535.448975,364.056000 3460.121582,364.090271 3384.794189,364.094727 + C3382.461182,364.094849 3380.122070,364.010681 3377.796143,364.144592 + C3360.579834,365.135895 3349.308838,375.351807 3346.804932,392.406555 + C3346.324219,395.680176 3346.421875,399.053345 3346.421387,402.380585 + C3346.405273,508.372192 3346.402588,614.363770 3346.440918,720.355408 + C3346.442383,724.335266 3346.519531,728.374512 3347.171875,732.284180 + C3349.641846,747.089905 3357.312744,755.211853 3372.194824,758.291077 + C3378.011475,759.494629 3384.064941,760.031799 3390.012939,760.050903 + C3439.008301,760.208313 3488.004150,760.172485 3539.000000,760.195190 +M4083.000000,421.926849 + C4094.328613,421.939087 4105.661621,422.137726 4116.983887,421.881195 + C4122.265137,421.761536 4127.671875,421.334412 4132.764160,420.036713 + C4142.780762,417.484283 4148.538086,410.568634 4150.172363,400.395386 + C4153.773438,377.982788 4142.144531,364.302612 4119.428711,364.099518 + C4118.095703,364.087585 4116.763184,364.094940 4115.430176,364.094971 + C4040.793701,364.095764 3966.156982,364.095551 3891.520508,364.102112 + C3888.522461,364.102386 3885.506104,363.967377 3882.529053,364.235504 + C3867.975586,365.546051 3856.541748,375.077698 3854.136230,388.201630 + C3853.362061,392.425995 3853.325928,396.825714 3853.322510,401.145508 + C3853.241699,508.434753 3853.204590,615.723999 3853.197510,723.013306 + C3853.197266,726.336060 3853.390137,729.687988 3853.849365,732.976562 + C3855.645020,745.836853 3863.809082,755.022461 3876.479492,757.819092 + C3882.291748,759.102051 3888.327881,759.984680 3894.264648,759.996338 + C3967.900146,760.140869 4041.536133,760.140442 4115.171875,759.993713 + C4120.763672,759.982544 4126.537598,759.224609 4131.902344,757.682312 + C4141.924805,754.800903 4148.375488,748.201416 4150.306641,737.514648 + C4154.595703,713.776978 4138.687988,700.829407 4121.506836,701.079529 + C4119.510742,701.108582 4117.513184,700.965942 4115.516113,700.966492 + C4069.534912,700.978394 4023.553955,700.978943 3977.572754,701.029297 + C3961.585693,701.046814 3945.598633,701.231628 3929.611572,701.260559 + C3921.820068,701.274658 3920.110596,699.903992 3919.674805,693.466370 + C3917.577637,662.508606 3917.554443,631.557434 3920.240967,600.631409 + C3920.544678,597.135254 3921.435547,593.690002 3922.106689,589.927551 + C3925.220703,589.927551 3927.534424,589.927063 3929.848145,589.927673 + C3981.493896,589.940369 4033.139648,589.956055 4084.785400,589.959229 + C4088.115967,589.959412 4091.468018,590.087891 4094.773438,589.772888 + C4109.757812,588.344666 4120.312012,577.277710 4121.332520,562.103210 + C4122.223633,548.853149 4112.651367,536.277710 4098.792480,533.045959 + C4094.967285,532.153870 4090.882324,532.131531 4086.916016,532.127869 + C4034.937012,532.079834 3982.957764,532.126343 3930.978760,532.099182 + C3920.193848,532.093567 3919.683838,531.535461 3919.675293,520.777222 + C3919.652100,491.455688 3919.671875,462.134155 3919.675537,432.812622 + C3919.675781,431.146667 3919.660889,429.480133 3919.697754,427.814850 + C3919.789062,423.669769 3922.016113,421.837097 3926.062744,421.925140 + C3928.393799,421.975891 3930.727295,421.927185 3933.059570,421.927185 + C3982.373047,421.926727 4031.686523,421.926819 4083.000000,421.926849 +M2893.662109,732.091675 + C2893.662109,699.544983 2893.662109,666.998291 2893.662109,633.343689 + C2907.295410,633.343689 2919.546631,633.374573 2931.797852,633.337585 + C2963.099609,633.243164 2994.483154,634.601990 3025.587646,629.955994 + C3066.258057,623.881165 3097.507568,603.664001 3117.882568,567.383972 + C3138.533691,530.612915 3140.058350,492.104370 3128.632324,452.430084 + C3118.854248,418.476898 3097.427246,394.216858 3066.022705,378.521423 + C3046.625732,368.826965 3025.983398,364.180450 3004.365723,364.127136 + C2957.047119,364.010437 2909.728271,364.085449 2862.409424,364.082642 + C2861.076416,364.082581 2859.741699,364.041504 2858.410889,364.098267 + C2841.559814,364.817230 2830.940186,373.870575 2828.228760,390.416412 + C2827.155762,396.962158 2826.594482,403.666992 2826.584961,410.300476 + C2826.432373,514.934753 2826.390869,619.569275 2826.409424,724.203674 + C2826.410400,728.830139 2826.889160,733.519287 2827.728516,738.071716 + C2830.749512,754.452881 2843.090820,764.766235 2859.866943,765.245483 + C2875.596680,765.694824 2888.428955,755.645447 2892.403076,739.731384 + C2892.885498,737.799377 2893.214600,735.829041 2893.662109,732.091675 +M2630.077393,729.591675 + C2627.100342,719.747803 2624.687988,709.690247 2621.057617,700.093384 + C2588.472900,613.952515 2555.745605,527.865234 2522.885010,441.829254 + C2515.177979,421.651489 2507.358154,401.481659 2498.568604,381.763458 + C2491.177246,365.180878 2476.981201,358.184937 2459.147949,357.782654 + C2440.981445,357.372833 2426.663818,364.031708 2417.630859,380.213562 + C2414.727295,385.415436 2412.404541,390.987213 2410.259277,396.560425 + C2379.563965,476.307678 2348.934814,556.080261 2318.313721,635.856079 + C2307.829102,663.171448 2297.188965,690.431152 2287.122070,717.900208 + C2284.660889,724.616272 2282.570801,732.186279 2283.130127,739.136719 + C2284.186035,752.256409 2292.121826,760.882019 2305.134521,764.457031 + C2318.965576,768.256958 2331.014404,765.419250 2340.306641,754.343262 + C2343.646484,750.362549 2346.054199,745.362793 2347.974121,740.469910 + C2355.138672,722.211121 2362.020020,703.839050 2368.819580,685.440063 + C2373.635498,672.409973 2373.600342,671.983154 2387.022949,671.961121 + C2434.664795,671.882812 2482.307861,672.144531 2529.948975,671.953552 + C2536.357422,671.927795 2539.805176,674.272949 2541.719482,680.040039 + C2542.974609,683.821777 2544.619873,687.473328 2546.072998,691.190002 + C2552.731689,708.221008 2559.119141,725.365723 2566.192627,742.222351 + C2568.453369,747.609253 2571.783936,752.986816 2575.910400,757.069763 + C2589.050781,770.072754 2613.400391,768.272217 2625.222900,754.142517 + C2630.905273,747.351440 2630.604980,739.412537 2630.077393,729.591675 +M1244.814941,765.607300 + C1262.527100,765.167664 1280.059570,763.248962 1297.011353,757.917786 + C1344.485962,742.987305 1377.631470,714.378296 1385.055298,662.674927 + C1391.664917,616.642883 1376.415527,578.706726 1334.251465,554.572205 + C1318.875122,545.770874 1302.472046,539.492493 1285.750488,533.795166 + C1259.011230,524.684570 1232.379150,515.251404 1205.802246,505.675720 + C1195.622803,502.008026 1186.908936,495.835693 1179.949097,487.470764 + C1165.982422,470.684662 1167.646851,448.060699 1184.374512,434.050720 + C1189.370117,429.866669 1195.377075,426.048889 1201.555542,424.276031 + C1220.200806,418.925903 1239.272949,416.234192 1258.785156,419.055786 + C1276.025146,421.548828 1292.298584,427.314087 1308.669189,432.937103 + C1318.057983,436.161987 1327.684814,439.244171 1337.455933,440.683044 + C1353.767090,443.084991 1367.739746,431.868652 1370.421265,415.713623 + C1372.694214,402.021057 1367.927979,391.057678 1356.227173,384.198975 + C1346.549316,378.526001 1336.262695,373.308472 1325.588867,370.023529 + C1289.179932,358.818542 1251.853638,355.404175 1213.992920,360.316833 + C1193.131836,363.023682 1172.747681,367.734650 1154.053345,378.020233 + C1117.051758,398.378265 1099.718872,430.674164 1101.079224,471.820923 + C1102.446167,513.158508 1124.365479,542.336304 1161.627563,559.805725 + C1171.540894,564.453308 1181.884888,568.241150 1192.194214,571.973389 + C1218.445068,581.476807 1244.776855,590.757324 1271.098877,600.063110 + C1283.909180,604.592102 1295.086670,611.496887 1303.898682,621.979492 + C1309.391479,628.513855 1312.886230,635.951904 1313.768555,644.475342 + C1316.244995,668.397827 1304.544800,688.719177 1282.449951,698.302490 + C1266.611328,705.172119 1249.867188,707.616150 1232.697388,706.826111 + C1210.370361,705.798706 1189.654419,699.226501 1169.988281,688.664368 + C1160.647461,683.647766 1150.943848,679.066284 1140.962158,675.540161 + C1126.269409,670.349854 1113.094727,675.431580 1104.464966,688.316162 + C1096.598999,700.060547 1097.408936,713.537170 1107.445557,725.042114 + C1111.315308,729.478027 1116.071655,733.449951 1121.117676,736.476990 + C1128.500610,740.905884 1136.338989,744.692993 1144.279053,748.054871 + C1175.781616,761.393494 1209.011841,765.385742 1244.814941,765.607300 +z"/> +<path fill="#FCFCFC" opacity="1.000000" stroke="none" + d=" +M982.126221,584.000000 + C982.195679,666.662842 981.492615,748.336060 982.589050,829.985107 + C983.398071,890.224609 943.873779,969.068054 852.038025,984.903870 + C840.956787,986.814636 829.459778,986.837402 818.154602,986.848694 + C615.831665,987.050293 413.508667,987.113464 211.185684,987.210693 + C178.983810,987.226196 148.077576,981.705261 120.601089,963.908508 + C76.825188,935.554321 50.964561,896.004822 47.642170,843.159607 + C46.681290,827.876038 46.419006,812.527161 46.415398,797.208130 + C46.369556,602.550537 46.449718,407.892914 46.445919,213.235306 + C46.445118,172.118057 57.670280,135.079239 85.535316,103.979210 + C114.759514,71.362221 150.949707,52.900742 195.023666,52.146252 + C252.334564,51.165169 309.660217,50.717190 366.980133,50.654396 + C513.305786,50.494091 659.631836,50.635086 805.957520,50.761009 + C828.279419,50.780220 850.724670,50.882610 872.233337,57.937878 + C932.031555,77.552933 967.432373,119.019875 979.974670,180.216690 + C981.960083,189.903961 982.224304,200.071426 982.230530,210.017548 + C982.308655,334.344971 982.192139,458.672485 982.126221,584.000000 +M676.198364,673.253540 + C622.363892,704.286499 568.529480,735.319397 515.019287,766.165405 + C496.600647,755.826111 478.983948,745.937012 461.682831,736.225037 + C446.538605,745.124268 432.269775,753.509094 416.890808,762.546265 + C449.673828,784.223877 482.342865,803.178833 515.852295,820.068115 + C517.357727,819.318054 518.267029,818.924011 519.119690,818.431824 + C602.403992,770.360840 685.643066,722.210999 769.059387,674.370117 + C774.440735,671.283875 775.396484,667.747375 775.390625,662.346313 + C775.286804,567.019470 775.244629,471.692261 775.469849,376.365814 + C775.485291,369.822449 773.581482,366.358765 767.788330,363.107910 + C737.901917,346.336914 708.328979,329.007294 678.633057,311.896332 + C676.085571,310.428436 673.438171,309.134064 670.680664,307.676392 + C583.716858,357.881348 496.996429,407.945831 410.321930,457.983795 + C410.321930,476.453217 410.219788,494.092377 410.383759,511.729034 + C410.433411,517.070129 412.440430,518.284546 417.268707,516.002502 + C422.974945,513.305481 428.534210,510.264313 434.007324,507.112152 + C508.688904,464.100250 583.345032,421.044128 658.005310,377.995300 + C662.902039,375.171844 667.765869,372.290924 672.674500,369.488373 + C676.773682,367.147980 680.570068,367.275574 684.821899,369.838104 + C699.045349,378.410522 713.483704,386.626312 728.110779,395.136353 + C728.474731,399.561707 729.143372,403.853973 729.133850,408.144775 + C728.966675,483.472839 728.647034,558.800659 728.607361,634.128723 + C728.603943,640.645264 726.409973,644.590454 720.764648,647.692566 + C706.185608,655.703369 691.849365,664.156067 676.198364,673.253540 +M331.720276,322.706024 + C308.326752,336.741547 285.045746,350.970612 261.464233,364.682800 + C255.201813,368.324341 253.086975,372.605591 253.106537,379.795319 + C253.347778,468.426514 253.264175,557.058594 253.264420,645.690430 + C253.264450,653.972412 253.264450,662.254456 253.264450,670.134460 + C289.254456,690.826660 324.053955,710.834412 358.563049,730.675171 + C361.501617,728.946533 363.493134,727.756226 365.502075,726.596069 + C426.573364,691.329285 487.650818,656.073242 548.716614,620.797119 + C570.032104,608.483826 591.307800,596.101501 612.629883,583.799683 + C616.857910,581.360352 620.020874,578.684570 619.877930,573.011780 + C619.550903,560.027283 619.887939,547.026978 619.640564,534.039124 + C619.564392,530.039673 618.469604,526.059692 617.724304,521.328552 + C613.511292,523.708923 610.622009,525.311890 607.760254,526.962708 + C563.962158,552.227417 520.165955,577.495544 476.372803,602.768860 + C438.052704,624.883606 399.746765,647.023010 361.403076,669.096802 + C357.809631,671.165405 354.621307,674.113647 349.623322,671.092285 + C333.984558,661.638550 318.065613,652.648315 302.640259,643.701843 + C302.640259,560.163635 302.640259,477.301239 302.640259,394.253387 + C373.471985,353.369537 444.038391,312.638855 514.501221,271.967957 + C532.523071,282.166077 550.096497,292.110443 567.739075,302.093933 + C581.451782,293.978119 594.603149,286.186981 607.765015,278.413818 + C609.463684,277.410675 611.217529,276.501038 614.410339,274.740570 + C579.643005,254.683975 547.502197,236.142593 514.598633,217.161194 + C453.973663,252.162445 393.487976,287.083282 331.720276,322.706024 +z"/> +<path fill="#F8F8F8" opacity="1.000000" stroke="none" + d=" +M2014.182983,586.156067 + C2033.525635,522.739441 2052.672119,460.099182 2071.865479,397.473389 + C2073.715332,391.438141 2075.520752,385.353363 2077.924316,379.529877 + C2088.533447,353.824677 2117.699951,354.141541 2133.079590,366.471252 + C2141.855469,373.506989 2145.065918,383.269867 2143.134766,394.185669 + C2141.751465,402.006012 2139.490234,409.727325 2136.994873,417.286163 + C2103.959473,517.356873 2070.839844,617.399841 2037.640381,717.416260 + C2035.131226,724.975464 2032.276245,732.480835 2028.849365,739.661560 + C2021.895508,754.232239 2010.448608,762.793945 1994.063110,764.624451 + C1961.960083,768.210693 1945.967407,753.591919 1938.113281,730.891174 + C1912.237183,656.101562 1886.106079,581.400208 1860.017090,506.684387 + C1857.988525,500.874786 1855.525635,495.216827 1852.477295,487.493744 + C1850.396729,492.441650 1848.991943,495.312592 1847.957520,498.311371 + C1824.646606,565.895203 1801.375366,633.492859 1778.098633,701.088501 + C1774.635132,711.146484 1771.225830,721.223450 1767.714722,731.264709 + C1757.694458,759.921448 1735.545410,768.995605 1708.552124,764.062317 + C1696.000122,761.768311 1686.355835,754.821716 1680.316406,743.772583 + C1676.199463,736.240417 1672.964478,728.116699 1670.221191,719.959534 + C1635.347534,616.264648 1600.630005,512.517151 1565.899536,408.774139 + C1564.634644,404.995758 1563.344971,401.183563 1562.583496,397.286133 + C1559.413940,381.064514 1567.936035,366.341370 1583.456299,360.868988 + C1600.656982,354.804138 1618.053101,360.758179 1625.519043,375.766876 + C1628.312134,381.382019 1630.152710,387.512390 1632.044189,393.528412 + C1660.066772,482.659241 1688.020630,571.811646 1716.012817,660.952026 + C1717.182007,664.675293 1718.565552,668.331177 1721.806763,672.204102 + C1723.961670,667.142273 1726.505615,662.208008 1728.213623,656.999634 + C1757.431763,567.905212 1786.545776,478.776703 1815.688477,389.657532 + C1816.515259,387.129150 1817.293701,384.576935 1818.280884,382.110352 + C1826.767212,360.907684 1850.676514,351.987213 1871.186035,362.304443 + C1880.181396,366.829529 1884.783569,374.749023 1887.830811,383.817810 + C1895.248413,405.892548 1902.563843,428.001556 1909.958374,450.084106 + C1933.193726,519.471436 1956.439697,588.855164 1979.709229,658.231079 + C1981.063599,662.268616 1982.663940,666.223694 1984.114990,670.123230 + C1990.572021,669.757507 1990.173584,664.693665 1991.229736,661.335754 + C1998.312622,638.816406 2005.102905,616.205139 2011.985962,593.622986 + C2012.664429,591.396362 2013.328735,589.165405 2014.182983,586.156067 +z"/> +<path fill="#F8FAFA" opacity="1.000000" stroke="none" + d=" +M3538.000000,760.195190 + C3488.004150,760.172485 3439.008301,760.208313 3390.012939,760.050903 + C3384.064941,760.031799 3378.011475,759.494629 3372.194824,758.291077 + C3357.312744,755.211853 3349.641846,747.089905 3347.171875,732.284180 + C3346.519531,728.374512 3346.442383,724.335266 3346.440918,720.355408 + C3346.402588,614.363770 3346.405273,508.372192 3346.421387,402.380585 + C3346.421875,399.053345 3346.324219,395.680176 3346.804932,392.406555 + C3349.308838,375.351807 3360.579834,365.135895 3377.796143,364.144592 + C3380.122070,364.010681 3382.461182,364.094849 3384.794189,364.094727 + C3460.121582,364.090271 3535.448975,364.056000 3610.776367,364.158203 + C3615.702881,364.164886 3620.839111,364.517181 3625.512695,365.922821 + C3637.821045,369.624603 3646.120850,381.706909 3645.516846,393.934631 + C3644.870605,407.015991 3636.635254,417.522247 3623.812012,420.567200 + C3618.708008,421.779205 3613.262207,421.911346 3607.970947,421.920898 + C3546.976074,422.031250 3485.981201,422.023651 3424.986328,422.047119 + C3421.692383,422.048370 3418.398682,422.047302 3414.029297,422.047302 + C3410.798584,458.347717 3411.358887,494.057922 3413.542480,530.924194 + C3418.466064,531.375000 3422.607422,532.079102 3426.749756,532.084106 + C3479.412109,532.147766 3532.075195,532.230530 3584.736816,532.011902 + C3597.133057,531.960449 3605.934082,537.127075 3611.267578,547.968628 + C3616.788574,559.190735 3615.148682,569.947876 3607.684326,579.841125 + C3603.018799,586.025085 3596.894775,589.644226 3588.994141,589.829163 + C3585.662842,589.907166 3582.329346,589.923950 3578.996826,589.925476 + C3528.334229,589.948792 3477.671631,589.965027 3427.009033,589.982483 + C3423.063721,589.983887 3419.118652,589.982666 3414.016602,589.982666 + C3410.496094,626.991150 3411.765381,663.038757 3412.507324,699.933105 + C3422.161621,700.321533 3430.731201,700.951233 3439.302002,700.964844 + C3495.297607,701.053589 3551.292969,701.003113 3607.288574,701.020752 + C3610.951416,701.021912 3614.632324,701.014038 3618.274170,701.345093 + C3633.510986,702.729736 3644.825684,713.720093 3645.189941,728.480652 + C3645.599854,745.096069 3635.555908,756.947266 3621.877930,758.722046 + C3616.938965,759.362854 3611.959473,760.031128 3606.993652,760.066895 + C3584.329834,760.230225 3561.664795,760.173157 3538.000000,760.195190 +z"/> +<path fill="#FAFCFC" opacity="1.000000" stroke="none" + d=" +M4082.000000,421.926819 + C4031.686523,421.926819 3982.373047,421.926727 3933.059570,421.927185 + C3930.727295,421.927185 3928.393799,421.975891 3926.062744,421.925140 + C3922.016113,421.837097 3919.789062,423.669769 3919.697754,427.814850 + C3919.660889,429.480133 3919.675781,431.146667 3919.675537,432.812622 + C3919.671875,462.134155 3919.652100,491.455688 3919.675293,520.777222 + C3919.683838,531.535461 3920.193848,532.093567 3930.978760,532.099182 + C3982.957764,532.126343 4034.937012,532.079834 4086.916016,532.127869 + C4090.882324,532.131531 4094.967285,532.153870 4098.792480,533.045959 + C4112.651367,536.277710 4122.223633,548.853149 4121.332520,562.103210 + C4120.312012,577.277710 4109.757812,588.344666 4094.773438,589.772888 + C4091.468018,590.087891 4088.115967,589.959412 4084.785400,589.959229 + C4033.139648,589.956055 3981.493896,589.940369 3929.848145,589.927673 + C3927.534424,589.927063 3925.220703,589.927551 3922.106689,589.927551 + C3921.435547,593.690002 3920.544678,597.135254 3920.240967,600.631409 + C3917.554443,631.557434 3917.577637,662.508606 3919.674805,693.466370 + C3920.110596,699.903992 3921.820068,701.274658 3929.611572,701.260559 + C3945.598633,701.231628 3961.585693,701.046814 3977.572754,701.029297 + C4023.553955,700.978943 4069.534912,700.978394 4115.516113,700.966492 + C4117.513184,700.965942 4119.510742,701.108582 4121.506836,701.079529 + C4138.687988,700.829407 4154.595703,713.776978 4150.306641,737.514648 + C4148.375488,748.201416 4141.924805,754.800903 4131.902344,757.682312 + C4126.537598,759.224609 4120.763672,759.982544 4115.171875,759.993713 + C4041.536133,760.140442 3967.900146,760.140869 3894.264648,759.996338 + C3888.327881,759.984680 3882.291748,759.102051 3876.479492,757.819092 + C3863.809082,755.022461 3855.645020,745.836853 3853.849365,732.976562 + C3853.390137,729.687988 3853.197266,726.336060 3853.197510,723.013306 + C3853.204590,615.723999 3853.241699,508.434753 3853.322510,401.145508 + C3853.325928,396.825714 3853.362061,392.425995 3854.136230,388.201630 + C3856.541748,375.077698 3867.975586,365.546051 3882.529053,364.235504 + C3885.506104,363.967377 3888.522461,364.102386 3891.520508,364.102112 + C3966.156982,364.095551 4040.793701,364.095764 4115.430176,364.094971 + C4116.763184,364.094940 4118.095703,364.087585 4119.428711,364.099518 + C4142.144531,364.302612 4153.773438,377.982788 4150.172363,400.395386 + C4148.538086,410.568634 4142.780762,417.484283 4132.764160,420.036713 + C4127.671875,421.334412 4122.265137,421.761536 4116.983887,421.881195 + C4105.661621,422.137726 4094.328613,421.939087 4082.000000,421.926819 +z"/> +<path fill="#F6F6F6" opacity="1.000000" stroke="none" + d=" +M2893.638428,732.984131 + C2893.214600,735.829041 2892.885498,737.799377 2892.403076,739.731384 + C2888.428955,755.645447 2875.596680,765.694824 2859.866943,765.245483 + C2843.090820,764.766235 2830.749512,754.452881 2827.728516,738.071716 + C2826.889160,733.519287 2826.410400,728.830139 2826.409424,724.203674 + C2826.390869,619.569275 2826.432373,514.934753 2826.584961,410.300476 + C2826.594482,403.666992 2827.155762,396.962158 2828.228760,390.416412 + C2830.940186,373.870575 2841.559814,364.817230 2858.410889,364.098267 + C2859.741699,364.041504 2861.076416,364.082581 2862.409424,364.082642 + C2909.728271,364.085449 2957.047119,364.010437 3004.365723,364.127136 + C3025.983398,364.180450 3046.625732,368.826965 3066.022705,378.521423 + C3097.427246,394.216858 3118.854248,418.476898 3128.632324,452.430084 + C3140.058350,492.104370 3138.533691,530.612915 3117.882568,567.383972 + C3097.507568,603.664001 3066.258057,623.881165 3025.587646,629.955994 + C2994.483154,634.601990 2963.099609,633.243164 2931.797852,633.337585 + C2919.546631,633.374573 2907.295410,633.343689 2893.662109,633.343689 + C2893.662109,666.998291 2893.662109,699.544983 2893.638428,732.984131 +M3045.931396,554.994385 + C3054.269287,547.378845 3059.346191,537.658386 3063.259766,527.330200 + C3080.012695,483.116669 3058.034912,437.115692 3014.159424,425.131775 + C3006.238281,422.968231 2997.772705,422.035645 2989.539062,421.919739 + C2961.898438,421.530548 2934.249268,421.740265 2906.603271,421.794617 + C2902.424805,421.802826 2898.246582,422.204163 2893.649902,422.445648 + C2893.913574,473.555664 2892.417725,523.375488 2893.941162,572.497620 + C2896.036377,573.414307 2896.623535,573.898193 2897.207031,573.894104 + C2932.156250,573.648926 2967.111572,573.669556 3002.051270,572.945496 + C3018.167480,572.611633 3032.364746,566.098511 3045.931396,554.994385 +z"/> +<path fill="#F7F9F9" opacity="1.000000" stroke="none" + d=" +M2630.159180,730.484863 + C2630.604980,739.412537 2630.905273,747.351440 2625.222900,754.142517 + C2613.400391,768.272217 2589.050781,770.072754 2575.910400,757.069763 + C2571.783936,752.986816 2568.453369,747.609253 2566.192627,742.222351 + C2559.119141,725.365723 2552.731689,708.221008 2546.072998,691.190002 + C2544.619873,687.473328 2542.974609,683.821777 2541.719482,680.040039 + C2539.805176,674.272949 2536.357422,671.927795 2529.948975,671.953552 + C2482.307861,672.144531 2434.664795,671.882812 2387.022949,671.961121 + C2373.600342,671.983154 2373.635498,672.409973 2368.819580,685.440063 + C2362.020020,703.839050 2355.138672,722.211121 2347.974121,740.469910 + C2346.054199,745.362793 2343.646484,750.362549 2340.306641,754.343262 + C2331.014404,765.419250 2318.965576,768.256958 2305.134521,764.457031 + C2292.121826,760.882019 2284.186035,752.256409 2283.130127,739.136719 + C2282.570801,732.186279 2284.660889,724.616272 2287.122070,717.900208 + C2297.188965,690.431152 2307.829102,663.171448 2318.313721,635.856079 + C2348.934814,556.080261 2379.563965,476.307678 2410.259277,396.560425 + C2412.404541,390.987213 2414.727295,385.415436 2417.630859,380.213562 + C2426.663818,364.031708 2440.981445,357.372833 2459.147949,357.782654 + C2476.981201,358.184937 2491.177246,365.180878 2498.568604,381.763458 + C2507.358154,401.481659 2515.177979,421.651489 2522.885010,441.829254 + C2555.745605,527.865234 2588.472900,613.952515 2621.057617,700.093384 + C2624.687988,709.690247 2627.100342,719.747803 2630.159180,730.484863 +M2422.414795,535.440430 + C2412.693359,562.428833 2401.604004,588.936462 2392.520996,617.008484 + C2397.128418,617.369995 2400.417236,617.844971 2403.707031,617.852783 + C2439.000488,617.936584 2474.293701,617.979370 2509.587158,617.925598 + C2513.061523,617.920288 2516.534668,617.198730 2521.115967,616.685608 + C2501.566162,558.968567 2480.777832,503.252899 2457.475342,448.493378 + C2456.780273,448.501404 2456.085449,448.509399 2455.390381,448.517395 + C2444.622559,477.024475 2433.854736,505.531555 2422.414795,535.440430 +z"/> +<path fill="#F7F9F9" opacity="1.000000" stroke="none" + d=" +M1243.847168,765.630066 + C1209.011841,765.385742 1175.781616,761.393494 1144.279053,748.054871 + C1136.338989,744.692993 1128.500610,740.905884 1121.117676,736.476990 + C1116.071655,733.449951 1111.315308,729.478027 1107.445557,725.042114 + C1097.408936,713.537170 1096.598999,700.060547 1104.464966,688.316162 + C1113.094727,675.431580 1126.269409,670.349854 1140.962158,675.540161 + C1150.943848,679.066284 1160.647461,683.647766 1169.988281,688.664368 + C1189.654419,699.226501 1210.370361,705.798706 1232.697388,706.826111 + C1249.867188,707.616150 1266.611328,705.172119 1282.449951,698.302490 + C1304.544800,688.719177 1316.244995,668.397827 1313.768555,644.475342 + C1312.886230,635.951904 1309.391479,628.513855 1303.898682,621.979492 + C1295.086670,611.496887 1283.909180,604.592102 1271.098877,600.063110 + C1244.776855,590.757324 1218.445068,581.476807 1192.194214,571.973389 + C1181.884888,568.241150 1171.540894,564.453308 1161.627563,559.805725 + C1124.365479,542.336304 1102.446167,513.158508 1101.079224,471.820923 + C1099.718872,430.674164 1117.051758,398.378265 1154.053345,378.020233 + C1172.747681,367.734650 1193.131836,363.023682 1213.992920,360.316833 + C1251.853638,355.404175 1289.179932,358.818542 1325.588867,370.023529 + C1336.262695,373.308472 1346.549316,378.526001 1356.227173,384.198975 + C1367.927979,391.057678 1372.694214,402.021057 1370.421265,415.713623 + C1367.739746,431.868652 1353.767090,443.084991 1337.455933,440.683044 + C1327.684814,439.244171 1318.057983,436.161987 1308.669189,432.937103 + C1292.298584,427.314087 1276.025146,421.548828 1258.785156,419.055786 + C1239.272949,416.234192 1220.200806,418.925903 1201.555542,424.276031 + C1195.377075,426.048889 1189.370117,429.866669 1184.374512,434.050720 + C1167.646851,448.060699 1165.982422,470.684662 1179.949097,487.470764 + C1186.908936,495.835693 1195.622803,502.008026 1205.802246,505.675720 + C1232.379150,515.251404 1259.011230,524.684570 1285.750488,533.795166 + C1302.472046,539.492493 1318.875122,545.770874 1334.251465,554.572205 + C1376.415527,578.706726 1391.664917,616.642883 1385.055298,662.674927 + C1377.631470,714.378296 1344.485962,742.987305 1297.011353,757.917786 + C1280.059570,763.248962 1262.527100,765.167664 1243.847168,765.630066 +z"/> +<path fill="#0A0909" opacity="1.000000" stroke="none" + d=" +M676.807251,672.842896 + C691.849365,664.156067 706.185608,655.703369 720.764648,647.692566 + C726.409973,644.590454 728.603943,640.645264 728.607361,634.128723 + C728.647034,558.800659 728.966675,483.472839 729.133850,408.144775 + C729.143372,403.853973 728.474731,399.561707 728.110779,395.136353 + C713.483704,386.626312 699.045349,378.410522 684.821899,369.838104 + C680.570068,367.275574 676.773682,367.147980 672.674500,369.488373 + C667.765869,372.290924 662.902039,375.171844 658.005310,377.995300 + C583.345032,421.044128 508.688904,464.100250 434.007324,507.112152 + C428.534210,510.264313 422.974945,513.305481 417.268707,516.002502 + C412.440430,518.284546 410.433411,517.070129 410.383759,511.729034 + C410.219788,494.092377 410.321930,476.453217 410.321930,457.983795 + C496.996429,407.945831 583.716858,357.881348 670.680664,307.676392 + C673.438171,309.134064 676.085571,310.428436 678.633057,311.896332 + C708.328979,329.007294 737.901917,346.336914 767.788330,363.107910 + C773.581482,366.358765 775.485291,369.822449 775.469849,376.365814 + C775.244629,471.692261 775.286804,567.019470 775.390625,662.346313 + C775.396484,667.747375 774.440735,671.283875 769.059387,674.370117 + C685.643066,722.210999 602.403992,770.360840 519.119690,818.431824 + C518.267029,818.924011 517.357727,819.318054 515.852295,820.068115 + C482.342865,803.178833 449.673828,784.223877 416.890808,762.546265 + C432.269775,753.509094 446.538605,745.124268 461.682831,736.225037 + C478.983948,745.937012 496.600647,755.826111 515.019287,766.165405 + C568.529480,735.319397 622.363892,704.286499 676.807251,672.842896 +z"/> +<path fill="#0A0808" opacity="1.000000" stroke="none" + d=" +M332.361267,322.355072 + C393.487976,287.083282 453.973663,252.162445 514.598633,217.161194 + C547.502197,236.142593 579.643005,254.683975 614.410339,274.740570 + C611.217529,276.501038 609.463684,277.410675 607.765015,278.413818 + C594.603149,286.186981 581.451782,293.978119 567.739075,302.093933 + C550.096497,292.110443 532.523071,282.166077 514.501221,271.967957 + C444.038391,312.638855 373.471985,353.369537 302.640259,394.253387 + C302.640259,477.301239 302.640259,560.163635 302.640259,643.701843 + C318.065613,652.648315 333.984558,661.638550 349.623322,671.092285 + C354.621307,674.113647 357.809631,671.165405 361.403076,669.096802 + C399.746765,647.023010 438.052704,624.883606 476.372803,602.768860 + C520.165955,577.495544 563.962158,552.227417 607.760254,526.962708 + C610.622009,525.311890 613.511292,523.708923 617.724304,521.328552 + C618.469604,526.059692 619.564392,530.039673 619.640564,534.039124 + C619.887939,547.026978 619.550903,560.027283 619.877930,573.011780 + C620.020874,578.684570 616.857910,581.360352 612.629883,583.799683 + C591.307800,596.101501 570.032104,608.483826 548.716614,620.797119 + C487.650818,656.073242 426.573364,691.329285 365.502075,726.596069 + C363.493134,727.756226 361.501617,728.946533 358.563049,730.675171 + C324.053955,710.834412 289.254456,690.826660 253.264450,670.134460 + C253.264450,662.254456 253.264450,653.972412 253.264420,645.690430 + C253.264175,557.058594 253.347778,468.426514 253.106537,379.795319 + C253.086975,372.605591 255.201813,368.324341 261.464233,364.682800 + C285.045746,350.970612 308.326752,336.741547 332.361267,322.355072 +z"/> +<path fill="#040303" opacity="1.000000" stroke="none" + d=" +M3045.390625,555.467651 + C3032.364746,566.098511 3018.167480,572.611633 3002.051270,572.945496 + C2967.111572,573.669556 2932.156250,573.648926 2897.207031,573.894104 + C2896.623535,573.898193 2896.036377,573.414307 2893.941162,572.497620 + C2892.417725,523.375488 2893.913574,473.555664 2893.649902,422.445648 + C2898.246582,422.204163 2902.424805,421.802826 2906.603271,421.794617 + C2934.249268,421.740265 2961.898438,421.530548 2989.539062,421.919739 + C2997.772705,422.035645 3006.238281,422.968231 3014.159424,425.131775 + C3058.034912,437.115692 3080.012695,483.116669 3063.259766,527.330200 + C3059.346191,537.658386 3054.269287,547.378845 3045.390625,555.467651 +z"/> +<path fill="#090808" opacity="1.000000" stroke="none" + d=" +M2422.750977,534.739502 + C2433.854736,505.531555 2444.622559,477.024475 2455.390381,448.517395 + C2456.085449,448.509399 2456.780273,448.501404 2457.475342,448.493378 + C2480.777832,503.252899 2501.566162,558.968567 2521.115967,616.685608 + C2516.534668,617.198730 2513.061523,617.920288 2509.587158,617.925598 + C2474.293701,617.979370 2439.000488,617.936584 2403.707031,617.852783 + C2400.417236,617.844971 2397.128418,617.369995 2392.520996,617.008484 + C2401.604004,588.936462 2412.693359,562.428833 2422.750977,534.739502 +z"/> +</svg>
\ No newline at end of file diff --git a/static/images/logo-dark.png b/static/images/logo-dark.png Binary files differnew file mode 100644 index 00000000..325b13f3 --- /dev/null +++ b/static/images/logo-dark.png diff --git a/static/images/logo-white.png b/static/images/logo-white.png Binary files differnew file mode 100644 index 00000000..5728abb5 --- /dev/null +++ b/static/images/logo-white.png diff --git a/static/style.css b/static/style.css index 5714df89..d57dbf3d 100644 --- a/static/style.css +++ b/static/style.css @@ -104,7 +104,7 @@ body{ left: 50%; width: 0; height: 2px; - background: #7005f38a; + background: #7105f3; transform: translateX(-50%); -webkit-transform: translateX(-50%); -moz-transform: translateX(-50%); @@ -231,7 +231,6 @@ body{ align-items: center; padding-top: 90px; padding-bottom: 90px; - background: url("../img/map.png") no-repeat; background-size: cover; } @@ -477,7 +476,8 @@ body{ .footer_top_right a{ text-decoration: none; - color: var(--purple); + color: #7105f3; + font-weight: 600; transition: var(--transition_3s); -webkit-transition: var(--transition_3s); -moz-transition: var(--transition_3s); @@ -509,7 +509,9 @@ body{ } .footer_top_right .social_links a:hover{ - background: var(--purple); + background: #7105f3; + opacity: 1; + } .footer_top_right .social_links a img{ @@ -534,7 +536,7 @@ body{ .footer_bottom ul li a{ padding: 6px 10px; color: var(--bs-white); - opacity: 0.20; + opacity: 1; text-decoration: none; transition: var(--transition_3s); -webkit-transition: var(--transition_3s); @@ -544,5 +546,5 @@ body{ } .footer_bottom ul li a:hover{ - opacity: .50; + opacity: 1; } diff --git a/tailwind.config.cjs b/tailwind.config.cjs deleted file mode 100644 index e9b23354..00000000 --- a/tailwind.config.cjs +++ /dev/null @@ -1,18 +0,0 @@ -/** @type {import('tailwindcss').Config} */ -module.exports = { - content: ['./src/**/*.{html,js,svelte}'], - theme: { - extend: { - colors: { - primary: '#eee', - secondary: '#70757E', - yellow: '#FFEA01', - gradient: '#C3CFE2', - lightgrey: '#EAECEF', - grey: '#70757E' - } - } - }, - plugins: [require('tailwind-scrollbar')], - safelist: ['w-16', 'h-16', 'w-20', 'h-20', 'w-24', 'h-24'] -}; diff --git a/tailwind.config.js b/tailwind.config.js new file mode 100644 index 00000000..348264ce --- /dev/null +++ b/tailwind.config.js @@ -0,0 +1,82 @@ +import { fontFamily } from "tailwindcss/defaultTheme"; + +/** @type {import('tailwindcss').Config} */ +const config = { + darkMode: ["class"], + // darkMode: ['class', '[data-mode="dark"]'], + content: ["./src/**/*.{html,js,svelte,ts}"], + // safelist: ["dark"], + theme: { + container: { + center: true, + padding: "2rem", + screens: { + "2xl": "1400px" + } + }, + extend: { + colors: { + border: "hsl(var(--border) / <alpha-value>)", + input: "hsl(var(--input) / <alpha-value>)", + ring: "hsl(var(--ring) / <alpha-value>)", + background: "hsl(var(--background) / <alpha-value>)", + foreground: "hsl(var(--foreground) / <alpha-value>)", + primary: { + DEFAULT: "hsl(var(--primary) / <alpha-value>)", + foreground: "hsl(var(--primary-foreground) / <alpha-value>)" + }, + secondary: { + DEFAULT: "hsl(var(--secondary) / <alpha-value>)", + foreground: "hsl(var(--secondary-foreground) / <alpha-value>)" + }, + destructive: { + DEFAULT: "hsl(var(--destructive) / <alpha-value>)", + foreground: "hsl(var(--destructive-foreground) / <alpha-value>)" + }, + muted: { + DEFAULT: "hsl(var(--muted) / <alpha-value>)", + foreground: "hsl(var(--muted-foreground) / <alpha-value>)" + }, + accent: { + DEFAULT: "hsl(var(--accent) / <alpha-value>)", + foreground: "hsl(var(--accent-foreground) / <alpha-value>)" + }, + popover: { + DEFAULT: "hsl(var(--popover) / <alpha-value>)", + foreground: "hsl(var(--popover-foreground) / <alpha-value>)" + }, + card: { + DEFAULT: "hsl(var(--card) / <alpha-value>)", + foreground: "hsl(var(--card-foreground) / <alpha-value>)" + }, + primary: '#eee', + secondary: '#70757E', + yellow: '#FFEA01', + gradient: '#C3CFE2', + lightgrey: '#EAECEF', + grey: '#70757E', + 'swapee-purple': '#7105f3' + }, + backgroundImage: { + 'map-light': 'url(src/swapee/img/map.png)', + 'map-dark': 'url(src/swapee/img/map-dark.png)', + }, + borderRadius: { + lg: "var(--radius)", + md: "calc(var(--radius) - 2px)", + sm: "calc(var(--radius) - 4px)" + }, + fontFamily: { + sans: [...fontFamily.sans], + "bebasNeue": ['"Bebas Neue"', 'sans-serif'] + }, + screens: { + xs: "360px" + } + } + }, + plugins: [require('tailwind-scrollbar')], + safelist: ['w-16', 'h-16', 'w-20', 'h-20', 'w-24', 'h-24'] +}; + +export default config;
\ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json new file mode 100644 index 00000000..e7a6a631 --- /dev/null +++ b/tsconfig.json @@ -0,0 +1,18 @@ +{ + "extends": "./.svelte-kit/tsconfig.json", + "compilerOptions": { + "allowJs": true, + "checkJs": false, + "esModuleInterop": true, + "forceConsistentCasingInFileNames": true, + "resolveJsonModule": true, + "skipLibCheck": true, + "sourceMap": true, + "strict": true, + "moduleResolution": "bundler" + } + // Path aliases are handled by https://kit.svelte.dev/docs/configuration#alias + // + // If you want to overwrite includes/excludes, make sure to copy over the relevant includes/excludes + // from the referenced tsconfig.json - TypeScript does not merge them in +} |
