replies timeline only, appview-less bluesky client

feat: make the header a footer

ptr.pet 74dfbdb1 11a6e632

verified
+158 -164
deno.lock
···
{
"version": "5",
"specifiers": {
-
"npm:@atcute/atproto@^3.1.7": "3.1.8",
-
"npm:@atcute/bluesky@^3.2.7": "3.2.9",
+
"npm:@atcute/atproto@^3.1.8": "3.1.8",
+
"npm:@atcute/bluesky@^3.2.9": "3.2.9",
"npm:@atcute/client@^4.0.5": "4.0.5",
"npm:@atcute/identity-resolver@^1.1.4": "1.1.4_@atcute+identity@1.1.1",
"npm:@atcute/identity@^1.1.1": "1.1.1",
"npm:@atcute/lexicons@^1.2.2": "1.2.2",
"npm:@atcute/oauth-browser-client@^2.0.1": "2.0.1_@atcute+identity@1.1.1",
"npm:@atcute/tid@^1.0.3": "1.0.3",
-
"npm:@eslint/compat@^1.4.0": "1.4.1_eslint@9.38.0",
-
"npm:@eslint/js@^9.36.0": "9.38.0",
-
"npm:@iconify/svelte@^5.0.2": "5.0.2_svelte@5.43.1__acorn@8.15.0",
+
"npm:@eslint/compat@^1.4.1": "1.4.1_eslint@9.39.0",
+
"npm:@eslint/js@^9.39.0": "9.39.0",
+
"npm:@iconify/svelte@^5.1.0": "5.1.0_svelte@5.43.2__acorn@8.15.0",
"npm:@soffinal/websocket@~0.2.1": "0.2.1_typescript@5.9.3",
-
"npm:@sveltejs/adapter-static@^3.0.10": "3.0.10_@sveltejs+kit@2.48.3__@sveltejs+vite-plugin-svelte@6.2.1___svelte@5.43.1____acorn@8.15.0___vite@7.1.12____@types+node@24.9.2____picomatch@4.0.3___@types+node@24.9.2__svelte@5.43.1___acorn@8.15.0__vite@7.1.12___@types+node@24.9.2___picomatch@4.0.3__acorn@8.15.0__@types+node@24.9.2_@sveltejs+vite-plugin-svelte@6.2.1__svelte@5.43.1___acorn@8.15.0__vite@7.1.12___@types+node@24.9.2___picomatch@4.0.3__@types+node@24.9.2_svelte@5.43.1__acorn@8.15.0_vite@7.1.12__@types+node@24.9.2__picomatch@4.0.3_@types+node@24.9.2",
-
"npm:@sveltejs/kit@^2.43.2": "2.48.3_@sveltejs+vite-plugin-svelte@6.2.1__svelte@5.43.1___acorn@8.15.0__vite@7.1.12___@types+node@24.9.2___picomatch@4.0.3__@types+node@24.9.2_svelte@5.43.1__acorn@8.15.0_vite@7.1.12__@types+node@24.9.2__picomatch@4.0.3_acorn@8.15.0_@types+node@24.9.2",
-
"npm:@sveltejs/vite-plugin-svelte@^6.2.0": "6.2.1_svelte@5.43.1__acorn@8.15.0_vite@7.1.12__@types+node@24.9.2__picomatch@4.0.3_@types+node@24.9.2",
+
"npm:@sveltejs/adapter-static@^3.0.10": "3.0.10_@sveltejs+kit@2.48.4__@sveltejs+vite-plugin-svelte@6.2.1___svelte@5.43.2____acorn@8.15.0___vite@7.1.12____@types+node@24.10.0____picomatch@4.0.3___@types+node@24.10.0__svelte@5.43.2___acorn@8.15.0__vite@7.1.12___@types+node@24.10.0___picomatch@4.0.3__acorn@8.15.0__@types+node@24.10.0_@sveltejs+vite-plugin-svelte@6.2.1__svelte@5.43.2___acorn@8.15.0__vite@7.1.12___@types+node@24.10.0___picomatch@4.0.3__@types+node@24.10.0_svelte@5.43.2__acorn@8.15.0_vite@7.1.12__@types+node@24.10.0__picomatch@4.0.3_@types+node@24.10.0",
+
"npm:@sveltejs/kit@^2.48.4": "2.48.4_@sveltejs+vite-plugin-svelte@6.2.1__svelte@5.43.2___acorn@8.15.0__vite@7.1.12___@types+node@24.10.0___picomatch@4.0.3__@types+node@24.10.0_svelte@5.43.2__acorn@8.15.0_vite@7.1.12__@types+node@24.10.0__picomatch@4.0.3_acorn@8.15.0_@types+node@24.10.0",
+
"npm:@sveltejs/vite-plugin-svelte@^6.2.1": "6.2.1_svelte@5.43.2__acorn@8.15.0_vite@7.1.12__@types+node@24.10.0__picomatch@4.0.3_@types+node@24.10.0",
"npm:@tailwindcss/forms@~0.5.10": "0.5.10_tailwindcss@4.1.16",
-
"npm:@tailwindcss/vite@^4.1.13": "4.1.16_vite@7.1.12__@types+node@24.9.2__picomatch@4.0.3_@types+node@24.9.2",
-
"npm:@types/node@24": "24.9.2",
+
"npm:@tailwindcss/vite@^4.1.16": "4.1.16_vite@7.1.12__@types+node@24.10.0__picomatch@4.0.3_@types+node@24.10.0",
+
"npm:@types/node@^24.10.0": "24.10.0",
"npm:@wora/cache-persist@^2.2.1": "2.2.1",
-
"npm:eslint-config-prettier@^10.1.8": "10.1.8_eslint@9.38.0",
-
"npm:eslint-plugin-svelte@^3.12.4": "3.13.0_eslint@9.38.0_svelte@5.43.1__acorn@8.15.0_postcss@8.5.6",
-
"npm:eslint@^9.36.0": "9.38.0",
-
"npm:globals@^16.4.0": "16.4.0",
+
"npm:eslint-config-prettier@^10.1.8": "10.1.8_eslint@9.39.0",
+
"npm:eslint-plugin-svelte@^3.13.0": "3.13.0_eslint@9.39.0_svelte@5.43.2__acorn@8.15.0_postcss@8.5.6",
+
"npm:eslint@^9.39.0": "9.39.0",
+
"npm:globals@^16.5.0": "16.5.0",
"npm:hash-wasm@^4.12.0": "4.12.0",
"npm:lru-cache@^11.2.2": "11.2.2",
-
"npm:prettier-plugin-svelte@^3.4.0": "3.4.0_prettier@3.6.2_svelte@5.43.1__acorn@8.15.0",
-
"npm:prettier-plugin-tailwindcss@~0.6.14": "0.6.14_prettier@3.6.2_prettier-plugin-svelte@3.4.0__prettier@3.6.2__svelte@5.43.1___acorn@8.15.0_svelte@5.43.1__acorn@8.15.0",
+
"npm:prettier-plugin-svelte@^3.4.0": "3.4.0_prettier@3.6.2_svelte@5.43.2__acorn@8.15.0",
+
"npm:prettier-plugin-tailwindcss@~0.6.14": "0.6.14_prettier@3.6.2_prettier-plugin-svelte@3.4.0__prettier@3.6.2__svelte@5.43.2___acorn@8.15.0_svelte@5.43.2__acorn@8.15.0",
"npm:prettier@^3.6.2": "3.6.2",
-
"npm:svelte-awesome-color-picker@^4.0.2": "4.1.0_svelte@5.43.1__acorn@8.15.0",
-
"npm:svelte-check@^4.3.2": "4.3.3_svelte@5.43.1__acorn@8.15.0_typescript@5.9.3",
-
"npm:svelte-infinite@0.5": "0.5.1_svelte@5.43.1__acorn@8.15.0",
-
"npm:svelte@^5.39.5": "5.43.1_acorn@8.15.0",
-
"npm:tailwindcss@^4.1.13": "4.1.16",
-
"npm:typescript-eslint@^8.44.1": "8.46.2_eslint@9.38.0_typescript@5.9.3_@typescript-eslint+parser@8.46.2__eslint@9.38.0__typescript@5.9.3",
-
"npm:typescript@^5.9.2": "5.9.3",
-
"npm:vite@^7.1.7": "7.1.12_@types+node@24.9.2_picomatch@4.0.3"
+
"npm:svelte-awesome-color-picker@^4.1.0": "4.1.0_svelte@5.43.2__acorn@8.15.0",
+
"npm:svelte-check@^4.3.3": "4.3.3_svelte@5.43.2__acorn@8.15.0_typescript@5.9.3",
+
"npm:svelte-infinite@~0.5.1": "0.5.1_svelte@5.43.2__acorn@8.15.0",
+
"npm:svelte@^5.43.2": "5.43.2_acorn@8.15.0",
+
"npm:tailwindcss@^4.1.16": "4.1.16",
+
"npm:typescript-eslint@^8.46.3": "8.46.3_eslint@9.39.0_typescript@5.9.3_@typescript-eslint+parser@8.46.3__eslint@9.39.0__typescript@5.9.3",
+
"npm:typescript@^5.9.3": "5.9.3",
+
"npm:vite@^7.1.12": "7.1.12_@types+node@24.10.0_picomatch@4.0.3"
},
"npm": {
"@atcute/atproto@3.1.8": {
···
"@badrap/valita@0.4.6": {
"integrity": "sha512-4kdqcjyxo/8RQ8ayjms47HCWZIF5981oE5nIenbfThKDxWXtEHKipAOWlflpPJzZx9y/JWYQkp18Awr7VuepFg=="
},
-
"@esbuild/aix-ppc64@0.25.11": {
-
"integrity": "sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==",
+
"@esbuild/aix-ppc64@0.25.12": {
+
"integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==",
"os": ["aix"],
"cpu": ["ppc64"]
},
-
"@esbuild/android-arm64@0.25.11": {
-
"integrity": "sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==",
+
"@esbuild/android-arm64@0.25.12": {
+
"integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==",
"os": ["android"],
"cpu": ["arm64"]
},
-
"@esbuild/android-arm@0.25.11": {
-
"integrity": "sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==",
+
"@esbuild/android-arm@0.25.12": {
+
"integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==",
"os": ["android"],
"cpu": ["arm"]
},
-
"@esbuild/android-x64@0.25.11": {
-
"integrity": "sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==",
+
"@esbuild/android-x64@0.25.12": {
+
"integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==",
"os": ["android"],
"cpu": ["x64"]
},
-
"@esbuild/darwin-arm64@0.25.11": {
-
"integrity": "sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==",
+
"@esbuild/darwin-arm64@0.25.12": {
+
"integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==",
"os": ["darwin"],
"cpu": ["arm64"]
},
-
"@esbuild/darwin-x64@0.25.11": {
-
"integrity": "sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==",
+
"@esbuild/darwin-x64@0.25.12": {
+
"integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==",
"os": ["darwin"],
"cpu": ["x64"]
},
-
"@esbuild/freebsd-arm64@0.25.11": {
-
"integrity": "sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==",
+
"@esbuild/freebsd-arm64@0.25.12": {
+
"integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==",
"os": ["freebsd"],
"cpu": ["arm64"]
},
-
"@esbuild/freebsd-x64@0.25.11": {
-
"integrity": "sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==",
+
"@esbuild/freebsd-x64@0.25.12": {
+
"integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==",
"os": ["freebsd"],
"cpu": ["x64"]
},
-
"@esbuild/linux-arm64@0.25.11": {
-
"integrity": "sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==",
+
"@esbuild/linux-arm64@0.25.12": {
+
"integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==",
"os": ["linux"],
"cpu": ["arm64"]
},
-
"@esbuild/linux-arm@0.25.11": {
-
"integrity": "sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==",
+
"@esbuild/linux-arm@0.25.12": {
+
"integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==",
"os": ["linux"],
"cpu": ["arm"]
},
-
"@esbuild/linux-ia32@0.25.11": {
-
"integrity": "sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==",
+
"@esbuild/linux-ia32@0.25.12": {
+
"integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==",
"os": ["linux"],
"cpu": ["ia32"]
},
-
"@esbuild/linux-loong64@0.25.11": {
-
"integrity": "sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==",
+
"@esbuild/linux-loong64@0.25.12": {
+
"integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==",
"os": ["linux"],
"cpu": ["loong64"]
},
-
"@esbuild/linux-mips64el@0.25.11": {
-
"integrity": "sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==",
+
"@esbuild/linux-mips64el@0.25.12": {
+
"integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==",
"os": ["linux"],
"cpu": ["mips64el"]
},
-
"@esbuild/linux-ppc64@0.25.11": {
-
"integrity": "sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==",
+
"@esbuild/linux-ppc64@0.25.12": {
+
"integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==",
"os": ["linux"],
"cpu": ["ppc64"]
},
-
"@esbuild/linux-riscv64@0.25.11": {
-
"integrity": "sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==",
+
"@esbuild/linux-riscv64@0.25.12": {
+
"integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==",
"os": ["linux"],
"cpu": ["riscv64"]
},
-
"@esbuild/linux-s390x@0.25.11": {
-
"integrity": "sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==",
+
"@esbuild/linux-s390x@0.25.12": {
+
"integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==",
"os": ["linux"],
"cpu": ["s390x"]
},
-
"@esbuild/linux-x64@0.25.11": {
-
"integrity": "sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==",
+
"@esbuild/linux-x64@0.25.12": {
+
"integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==",
"os": ["linux"],
"cpu": ["x64"]
},
-
"@esbuild/netbsd-arm64@0.25.11": {
-
"integrity": "sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==",
+
"@esbuild/netbsd-arm64@0.25.12": {
+
"integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==",
"os": ["netbsd"],
"cpu": ["arm64"]
},
-
"@esbuild/netbsd-x64@0.25.11": {
-
"integrity": "sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==",
+
"@esbuild/netbsd-x64@0.25.12": {
+
"integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==",
"os": ["netbsd"],
"cpu": ["x64"]
},
-
"@esbuild/openbsd-arm64@0.25.11": {
-
"integrity": "sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==",
+
"@esbuild/openbsd-arm64@0.25.12": {
+
"integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==",
"os": ["openbsd"],
"cpu": ["arm64"]
},
-
"@esbuild/openbsd-x64@0.25.11": {
-
"integrity": "sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==",
+
"@esbuild/openbsd-x64@0.25.12": {
+
"integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==",
"os": ["openbsd"],
"cpu": ["x64"]
},
-
"@esbuild/openharmony-arm64@0.25.11": {
-
"integrity": "sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==",
+
"@esbuild/openharmony-arm64@0.25.12": {
+
"integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==",
"os": ["openharmony"],
"cpu": ["arm64"]
},
-
"@esbuild/sunos-x64@0.25.11": {
-
"integrity": "sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==",
+
"@esbuild/sunos-x64@0.25.12": {
+
"integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==",
"os": ["sunos"],
"cpu": ["x64"]
},
-
"@esbuild/win32-arm64@0.25.11": {
-
"integrity": "sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==",
+
"@esbuild/win32-arm64@0.25.12": {
+
"integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==",
"os": ["win32"],
"cpu": ["arm64"]
},
-
"@esbuild/win32-ia32@0.25.11": {
-
"integrity": "sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==",
+
"@esbuild/win32-ia32@0.25.12": {
+
"integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==",
"os": ["win32"],
"cpu": ["ia32"]
},
-
"@esbuild/win32-x64@0.25.11": {
-
"integrity": "sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==",
+
"@esbuild/win32-x64@0.25.12": {
+
"integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==",
"os": ["win32"],
"cpu": ["x64"]
},
-
"@eslint-community/eslint-utils@4.9.0_eslint@9.38.0": {
+
"@eslint-community/eslint-utils@4.9.0_eslint@9.39.0": {
"integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==",
"dependencies": [
"eslint",
···
"@eslint-community/regexpp@4.12.2": {
"integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew=="
},
-
"@eslint/compat@1.4.1_eslint@9.38.0": {
+
"@eslint/compat@1.4.1_eslint@9.39.0": {
"integrity": "sha512-cfO82V9zxxGBxcQDr1lfaYB7wykTa0b00mGa36FrJl7iTFd0Z2cHfEYuxcBRP/iNijCsWsEkA+jzT8hGYmv33w==",
"dependencies": [
-
"@eslint/core@0.17.0",
+
"@eslint/core",
"eslint"
],
"optionalPeers": [
···
"@eslint/config-helpers@0.4.2": {
"integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==",
"dependencies": [
-
"@eslint/core@0.17.0"
-
]
-
},
-
"@eslint/core@0.16.0": {
-
"integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==",
-
"dependencies": [
-
"@types/json-schema"
+
"@eslint/core"
]
},
"@eslint/core@0.17.0": {
···
"strip-json-comments"
]
},
-
"@eslint/js@9.38.0": {
-
"integrity": "sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A=="
+
"@eslint/js@9.39.0": {
+
"integrity": "sha512-BIhe0sW91JGPiaF1mOuPy5v8NflqfjIcDNpC+LbW9f609WVRX1rArrhi6Z2ymvrAry9jw+5POTj4t2t62o8Bmw=="
},
"@eslint/object-schema@2.1.7": {
"integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA=="
···
"@eslint/plugin-kit@0.4.1": {
"integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==",
"dependencies": [
-
"@eslint/core@0.17.0",
+
"@eslint/core",
"levn"
]
},
···
"@humanwhocodes/retry@0.4.3": {
"integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ=="
},
-
"@iconify/svelte@5.0.2_svelte@5.43.1__acorn@8.15.0": {
-
"integrity": "sha512-1iWUT+1veS/QOAzKDG0NPgBtJYGoJqEPwF97voTm8jw6PQ6yU0hL73lEwFoTGMrZmatLvh9cjRBmeSHHaltmrg==",
+
"@iconify/svelte@5.1.0_svelte@5.43.2__acorn@8.15.0": {
+
"integrity": "sha512-I14nSqo0pNXO5OKsT61ZO3XIPF4yRHA2ErgPsaZ1sPJdKXn80o7o8jOe1xpWphbb9FihdX6by9zlKKBss61mFw==",
"dependencies": [
"@iconify/types",
"svelte"
···
"acorn"
]
},
-
"@sveltejs/adapter-static@3.0.10_@sveltejs+kit@2.48.3__@sveltejs+vite-plugin-svelte@6.2.1___svelte@5.43.1____acorn@8.15.0___vite@7.1.12____@types+node@24.9.2____picomatch@4.0.3___@types+node@24.9.2__svelte@5.43.1___acorn@8.15.0__vite@7.1.12___@types+node@24.9.2___picomatch@4.0.3__acorn@8.15.0__@types+node@24.9.2_@sveltejs+vite-plugin-svelte@6.2.1__svelte@5.43.1___acorn@8.15.0__vite@7.1.12___@types+node@24.9.2___picomatch@4.0.3__@types+node@24.9.2_svelte@5.43.1__acorn@8.15.0_vite@7.1.12__@types+node@24.9.2__picomatch@4.0.3_@types+node@24.9.2": {
+
"@sveltejs/adapter-static@3.0.10_@sveltejs+kit@2.48.4__@sveltejs+vite-plugin-svelte@6.2.1___svelte@5.43.2____acorn@8.15.0___vite@7.1.12____@types+node@24.10.0____picomatch@4.0.3___@types+node@24.10.0__svelte@5.43.2___acorn@8.15.0__vite@7.1.12___@types+node@24.10.0___picomatch@4.0.3__acorn@8.15.0__@types+node@24.10.0_@sveltejs+vite-plugin-svelte@6.2.1__svelte@5.43.2___acorn@8.15.0__vite@7.1.12___@types+node@24.10.0___picomatch@4.0.3__@types+node@24.10.0_svelte@5.43.2__acorn@8.15.0_vite@7.1.12__@types+node@24.10.0__picomatch@4.0.3_@types+node@24.10.0": {
"integrity": "sha512-7D9lYFWJmB7zxZyTE/qxjksvMqzMuYrrsyh1f4AlZqeZeACPRySjbC3aFiY55wb1tWUaKOQG9PVbm74JcN2Iew==",
"dependencies": [
"@sveltejs/kit"
]
},
-
"@sveltejs/kit@2.48.3_@sveltejs+vite-plugin-svelte@6.2.1__svelte@5.43.1___acorn@8.15.0__vite@7.1.12___@types+node@24.9.2___picomatch@4.0.3__@types+node@24.9.2_svelte@5.43.1__acorn@8.15.0_vite@7.1.12__@types+node@24.9.2__picomatch@4.0.3_acorn@8.15.0_@types+node@24.9.2": {
-
"integrity": "sha512-jf8mx3yctRXE9hvixgcqqK94YI2hDnbxI/12Upkz99XFMvxnJKCMzvz0j7lmbXSyBSNEycWO5xHvi7b73y9qkQ==",
+
"@sveltejs/kit@2.48.4_@sveltejs+vite-plugin-svelte@6.2.1__svelte@5.43.2___acorn@8.15.0__vite@7.1.12___@types+node@24.10.0___picomatch@4.0.3__@types+node@24.10.0_svelte@5.43.2__acorn@8.15.0_vite@7.1.12__@types+node@24.10.0__picomatch@4.0.3_acorn@8.15.0_@types+node@24.10.0": {
+
"integrity": "sha512-TGFX1pZUt9qqY20Cv5NyYvy0iLWHf2jXi8s+eCGsig7jQMdwZWKUFMR6TbvFNhfDSUpc1sH/Y5EHv20g3HHA3g==",
"dependencies": [
"@standard-schema/spec",
"@sveltejs/acorn-typescript",
···
],
"bin": true
},
-
"@sveltejs/vite-plugin-svelte-inspector@5.0.1_@sveltejs+vite-plugin-svelte@6.2.1__svelte@5.43.1___acorn@8.15.0__vite@7.1.12___@types+node@24.9.2___picomatch@4.0.3__@types+node@24.9.2_svelte@5.43.1__acorn@8.15.0_vite@7.1.12__@types+node@24.9.2__picomatch@4.0.3_@types+node@24.9.2": {
+
"@sveltejs/vite-plugin-svelte-inspector@5.0.1_@sveltejs+vite-plugin-svelte@6.2.1__svelte@5.43.2___acorn@8.15.0__vite@7.1.12___@types+node@24.10.0___picomatch@4.0.3__@types+node@24.10.0_svelte@5.43.2__acorn@8.15.0_vite@7.1.12__@types+node@24.10.0__picomatch@4.0.3_@types+node@24.10.0": {
"integrity": "sha512-ubWshlMk4bc8mkwWbg6vNvCeT7lGQojE3ijDh3QTR6Zr/R+GXxsGbyH4PExEPpiFmqPhYiVSVmHBjUcVc1JIrA==",
"dependencies": [
"@sveltejs/vite-plugin-svelte",
···
"vite"
]
},
-
"@sveltejs/vite-plugin-svelte@6.2.1_svelte@5.43.1__acorn@8.15.0_vite@7.1.12__@types+node@24.9.2__picomatch@4.0.3_@types+node@24.9.2": {
+
"@sveltejs/vite-plugin-svelte@6.2.1_svelte@5.43.2__acorn@8.15.0_vite@7.1.12__@types+node@24.10.0__picomatch@4.0.3_@types+node@24.10.0": {
"integrity": "sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ==",
"dependencies": [
"@sveltejs/vite-plugin-svelte-inspector",
···
"@tailwindcss/oxide-win32-x64-msvc"
]
},
-
"@tailwindcss/vite@4.1.16_vite@7.1.12__@types+node@24.9.2__picomatch@4.0.3_@types+node@24.9.2": {
+
"@tailwindcss/vite@4.1.16_vite@7.1.12__@types+node@24.10.0__picomatch@4.0.3_@types+node@24.10.0": {
"integrity": "sha512-bbguNBcDxsRmi9nnlWJxhfDWamY3lmcyACHcdO1crxfzuLpOhHLLtEIN/nCbbAtj5rchUgQD17QVAKi1f7IsKg==",
"dependencies": [
"@tailwindcss/node",
···
"@types/json-schema@7.0.15": {
"integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA=="
},
-
"@types/node@24.9.2": {
-
"integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==",
+
"@types/node@24.10.0": {
+
"integrity": "sha512-qzQZRBqkFsYyaSWXuEHc2WR9c0a0CXwiE5FWUvn7ZM+vdy1uZLfCunD38UzhuB7YN/J11ndbDBcTmOdxJo9Q7A==",
"dependencies": [
"undici-types"
]
},
-
"@typescript-eslint/eslint-plugin@8.46.2_@typescript-eslint+parser@8.46.2__eslint@9.38.0__typescript@5.9.3_eslint@9.38.0_typescript@5.9.3": {
-
"integrity": "sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==",
+
"@typescript-eslint/eslint-plugin@8.46.3_@typescript-eslint+parser@8.46.3__eslint@9.39.0__typescript@5.9.3_eslint@9.39.0_typescript@5.9.3": {
+
"integrity": "sha512-sbaQ27XBUopBkRiuY/P9sWGOWUW4rl8fDoHIUmLpZd8uldsTyB4/Zg6bWTegPoTLnKj9Hqgn3QD6cjPNB32Odw==",
"dependencies": [
"@eslint-community/regexpp",
"@typescript-eslint/parser",
···
"typescript"
]
},
-
"@typescript-eslint/parser@8.46.2_eslint@9.38.0_typescript@5.9.3": {
-
"integrity": "sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==",
+
"@typescript-eslint/parser@8.46.3_eslint@9.39.0_typescript@5.9.3": {
+
"integrity": "sha512-6m1I5RmHBGTnUGS113G04DMu3CpSdxCAU/UvtjNWL4Nuf3MW9tQhiJqRlHzChIkhy6kZSAQmc+I1bcGjE3yNKg==",
"dependencies": [
"@typescript-eslint/scope-manager",
"@typescript-eslint/types",
···
"typescript"
]
},
-
"@typescript-eslint/project-service@8.46.2_typescript@5.9.3": {
-
"integrity": "sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==",
+
"@typescript-eslint/project-service@8.46.3_typescript@5.9.3": {
+
"integrity": "sha512-Fz8yFXsp2wDFeUElO88S9n4w1I4CWDTXDqDr9gYvZgUpwXQqmZBr9+NTTql5R3J7+hrJZPdpiWaB9VNhAKYLuQ==",
"dependencies": [
"@typescript-eslint/tsconfig-utils",
"@typescript-eslint/types",
···
"typescript"
]
},
-
"@typescript-eslint/scope-manager@8.46.2": {
-
"integrity": "sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==",
+
"@typescript-eslint/scope-manager@8.46.3": {
+
"integrity": "sha512-FCi7Y1zgrmxp3DfWfr+3m9ansUUFoy8dkEdeQSgA9gbm8DaHYvZCdkFRQrtKiedFf3Ha6VmoqoAaP68+i+22kg==",
"dependencies": [
"@typescript-eslint/types",
"@typescript-eslint/visitor-keys"
]
},
-
"@typescript-eslint/tsconfig-utils@8.46.2_typescript@5.9.3": {
-
"integrity": "sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==",
+
"@typescript-eslint/tsconfig-utils@8.46.3_typescript@5.9.3": {
+
"integrity": "sha512-GLupljMniHNIROP0zE7nCcybptolcH8QZfXOpCfhQDAdwJ/ZTlcaBOYebSOZotpti/3HrHSw7D3PZm75gYFsOA==",
"dependencies": [
"typescript"
]
},
-
"@typescript-eslint/type-utils@8.46.2_eslint@9.38.0_typescript@5.9.3": {
-
"integrity": "sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==",
+
"@typescript-eslint/type-utils@8.46.3_eslint@9.39.0_typescript@5.9.3": {
+
"integrity": "sha512-ZPCADbr+qfz3aiTTYNNkCbUt+cjNwI/5McyANNrFBpVxPt7GqpEYz5ZfdwuFyGUnJ9FdDXbGODUu6iRCI6XRXw==",
"dependencies": [
"@typescript-eslint/types",
"@typescript-eslint/typescript-estree",
···
"typescript"
]
},
-
"@typescript-eslint/types@8.46.2": {
-
"integrity": "sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ=="
+
"@typescript-eslint/types@8.46.3": {
+
"integrity": "sha512-G7Ok9WN/ggW7e/tOf8TQYMaxgID3Iujn231hfi0Pc7ZheztIJVpO44ekY00b7akqc6nZcvregk0Jpah3kep6hA=="
},
-
"@typescript-eslint/typescript-estree@8.46.2_typescript@5.9.3": {
-
"integrity": "sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==",
+
"@typescript-eslint/typescript-estree@8.46.3_typescript@5.9.3": {
+
"integrity": "sha512-f/NvtRjOm80BtNM5OQtlaBdM5BRFUv7gf381j9wygDNL+qOYSNOgtQ/DCndiYi80iIOv76QqaTmp4fa9hwI0OA==",
"dependencies": [
"@typescript-eslint/project-service",
"@typescript-eslint/tsconfig-utils",
···
"typescript"
]
},
-
"@typescript-eslint/utils@8.46.2_eslint@9.38.0_typescript@5.9.3": {
-
"integrity": "sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==",
+
"@typescript-eslint/utils@8.46.3_eslint@9.39.0_typescript@5.9.3": {
+
"integrity": "sha512-VXw7qmdkucEx9WkmR3ld/u6VhRyKeiF1uxWwCy/iuNfokjJ7VhsgLSOTjsol8BunSw190zABzpwdNsze2Kpo4g==",
"dependencies": [
"@eslint-community/eslint-utils",
"@typescript-eslint/scope-manager",
···
"typescript"
]
},
-
"@typescript-eslint/visitor-keys@8.46.2": {
-
"integrity": "sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==",
+
"@typescript-eslint/visitor-keys@8.46.3": {
+
"integrity": "sha512-uk574k8IU0rOF/AjniX8qbLSGURJVUCeM5e4MIMKBFFi8weeiLrG1fyQejyLXQpRZbU/1BuQasleV/RfHC3hHg==",
"dependencies": [
"@typescript-eslint/types",
"eslint-visitor-keys@4.2.1"
···
"tapable"
]
},
-
"esbuild@0.25.11": {
-
"integrity": "sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==",
+
"esbuild@0.25.12": {
+
"integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==",
"optionalDependencies": [
"@esbuild/aix-ppc64",
"@esbuild/android-arm",
···
"escape-string-regexp@4.0.0": {
"integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA=="
},
-
"eslint-config-prettier@10.1.8_eslint@9.38.0": {
+
"eslint-config-prettier@10.1.8_eslint@9.39.0": {
"integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==",
"dependencies": [
"eslint"
],
"bin": true
},
-
"eslint-plugin-svelte@3.13.0_eslint@9.38.0_svelte@5.43.1__acorn@8.15.0_postcss@8.5.6": {
+
"eslint-plugin-svelte@3.13.0_eslint@9.39.0_svelte@5.43.2__acorn@8.15.0_postcss@8.5.6": {
"integrity": "sha512-2ohCCQJJTNbIpQCSDSTWj+FN0OVfPmSO03lmSNT7ytqMaWF6kpT86LdzDqtm4sh7TVPl/OEWJ/d7R87bXP2Vjg==",
"dependencies": [
"@eslint-community/eslint-utils",
"@jridgewell/sourcemap-codec",
"eslint",
"esutils",
-
"globals@16.4.0",
+
"globals@16.5.0",
"known-css-properties",
"postcss",
"postcss-load-config",
···
"eslint-visitor-keys@4.2.1": {
"integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ=="
},
-
"eslint@9.38.0": {
-
"integrity": "sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==",
+
"eslint@9.39.0": {
+
"integrity": "sha512-iy2GE3MHrYTL5lrCtMZ0X1KLEKKUjmK0kzwcnefhR66txcEmXZD2YWgR5GNdcEwkNx3a0siYkSvl0vIC+Svjmg==",
"dependencies": [
"@eslint-community/eslint-utils",
"@eslint-community/regexpp",
"@eslint/config-array",
"@eslint/config-helpers",
-
"@eslint/core@0.16.0",
+
"@eslint/core",
"@eslint/eslintrc",
"@eslint/js",
"@eslint/plugin-kit",
···
"estraverse"
},
-
"esrap@2.1.1": {
-
"integrity": "sha512-ebTT9B6lOtZGMgJ3o5r12wBacHctG7oEWazIda8UlPfA3HD/Wrv8FdXoVo73vzdpwCxNyXjPauyN2bbJzMkB9A==",
+
"esrap@2.1.2": {
+
"integrity": "sha512-DgvlIQeowRNyvLPWW4PT7Gu13WznY288Du086E751mwwbsgr29ytBiYeLzAGIo0qk3Ujob0SDk8TiSaM5WQzNg==",
"dependencies": [
"@jridgewell/sourcemap-codec"
···
"globals@14.0.0": {
"integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ=="
},
-
"globals@16.4.0": {
-
"integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw=="
+
"globals@16.5.0": {
+
"integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ=="
},
"graceful-fs@4.2.11": {
"integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ=="
···
"prelude-ls@1.2.1": {
"integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g=="
},
-
"prettier-plugin-svelte@3.4.0_prettier@3.6.2_svelte@5.43.1__acorn@8.15.0": {
+
"prettier-plugin-svelte@3.4.0_prettier@3.6.2_svelte@5.43.2__acorn@8.15.0": {
"integrity": "sha512-pn1ra/0mPObzqoIQn/vUTR3ZZI6UuZ0sHqMK5x2jMLGrs53h0sXhkVuDcrlssHwIMk7FYrMjHBPoUSyyEEDlBQ==",
"dependencies": [
"prettier",
"svelte"
},
-
"prettier-plugin-tailwindcss@0.6.14_prettier@3.6.2_prettier-plugin-svelte@3.4.0__prettier@3.6.2__svelte@5.43.1___acorn@8.15.0_svelte@5.43.1__acorn@8.15.0": {
+
"prettier-plugin-tailwindcss@0.6.14_prettier@3.6.2_prettier-plugin-svelte@3.4.0__prettier@3.6.2__svelte@5.43.2___acorn@8.15.0_svelte@5.43.2__acorn@8.15.0": {
"integrity": "sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==",
"dependencies": [
"prettier",
···
"has-flag"
},
-
"svelte-awesome-color-picker@4.1.0_svelte@5.43.1__acorn@8.15.0": {
+
"svelte-awesome-color-picker@4.1.0_svelte@5.43.2__acorn@8.15.0": {
"integrity": "sha512-afiSB3eTBlqu96f4+rjBvqG3eCaLwuneNYHe587Wr4Ien6yQWeztGZunPT0FmiI7wFFBVNUlJQLYutII8LfQUg==",
"dependencies": [
"colord",
···
"svelte-awesome-slider"
},
-
"svelte-awesome-slider@2.0.0_svelte@5.43.1__acorn@8.15.0": {
+
"svelte-awesome-slider@2.0.0_svelte@5.43.2__acorn@8.15.0": {
"integrity": "sha512-YBkOdYm1Feaqsn2JkJBRs+Kc/X3Qy/3GuVmI7GmoYDjBaHkjx9uH4khTuED22z57Hg3gGWeDhp/clIjWDdLNaw==",
"dependencies": [
"svelte"
},
-
"svelte-check@4.3.3_svelte@5.43.1__acorn@8.15.0_typescript@5.9.3": {
+
"svelte-check@4.3.3_svelte@5.43.2__acorn@8.15.0_typescript@5.9.3": {
"integrity": "sha512-RYP0bEwenDXzfv0P1sKAwjZSlaRyqBn0Fz1TVni58lqyEiqgwztTpmodJrGzP6ZT2aHl4MbTvWP6gbmQ3FOnBg==",
"dependencies": [
"@jridgewell/trace-mapping",
···
],
"bin": true
},
-
"svelte-eslint-parser@1.4.0_svelte@5.43.1__acorn@8.15.0_postcss@8.5.6": {
+
"svelte-eslint-parser@1.4.0_svelte@5.43.2__acorn@8.15.0_postcss@8.5.6": {
"integrity": "sha512-fjPzOfipR5S7gQ/JvI9r2H8y9gMGXO3JtmrylHLLyahEMquXI0lrebcjT+9/hNgDej0H7abTyox5HpHmW1PSWA==",
"dependencies": [
"eslint-scope",
···
"svelte"
},
-
"svelte-infinite@0.5.1_svelte@5.43.1__acorn@8.15.0": {
+
"svelte-infinite@0.5.1_svelte@5.43.2__acorn@8.15.0": {
"integrity": "sha512-NvpYWrHPcLHZQMnqUXgKGpOSMq9kMQ6sa8+WO80jLrgBFX+LWoKvAsrc1d1g+eiaagNAE9HalWWJ4KDtYi/+sw==",
"dependencies": [
"svelte"
},
-
"svelte@5.43.1_acorn@8.15.0": {
-
"integrity": "sha512-HwXMvQbSFZD5AqmjXzc1bJ1qPFM+iMyUwttmZjtCruIPLz7tG3RYFfzICotaf9HaR5qszzzTRe2rE/ps4mxGLg==",
+
"svelte@5.43.2_acorn@8.15.0": {
+
"integrity": "sha512-ro1umEzX8rT5JpCmlf0PPv7ncD8MdVob9e18bhwqTKNoLjS8kDvhVpaoYVPc+qMwDAOfcwJtyY7ZFSDbOaNPgA==",
"dependencies": [
"@jridgewell/remapping",
"@jridgewell/sourcemap-codec",
···
"prelude-ls"
},
-
"typescript-eslint@8.46.2_eslint@9.38.0_typescript@5.9.3_@typescript-eslint+parser@8.46.2__eslint@9.38.0__typescript@5.9.3": {
-
"integrity": "sha512-vbw8bOmiuYNdzzV3lsiWv6sRwjyuKJMQqWulBOU7M0RrxedXledX8G8kBbQeiOYDnTfiXz0Y4081E1QMNB6iQg==",
+
"typescript-eslint@8.46.3_eslint@9.39.0_typescript@5.9.3_@typescript-eslint+parser@8.46.3__eslint@9.39.0__typescript@5.9.3": {
+
"integrity": "sha512-bAfgMavTuGo+8n6/QQDVQz4tZ4f7Soqg53RbrlZQEoAltYop/XR4RAts/I0BrO3TTClTSTFJ0wYbla+P8cEWJA==",
"dependencies": [
"@typescript-eslint/eslint-plugin",
"@typescript-eslint/parser",
···
"util-deprecate@1.0.2": {
"integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw=="
},
-
"vite@7.1.12_@types+node@24.9.2_picomatch@4.0.3": {
+
"vite@7.1.12_@types+node@24.10.0_picomatch@4.0.3": {
"integrity": "sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==",
"dependencies": [
"@types/node",
···
],
"bin": true
},
-
"vitefu@1.1.1_vite@7.1.12__@types+node@24.9.2__picomatch@4.0.3_@types+node@24.9.2": {
+
"vitefu@1.1.1_vite@7.1.12__@types+node@24.10.0__picomatch@4.0.3_@types+node@24.10.0": {
"integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==",
"dependencies": [
"vite"
···
"workspace": {
"packageJson": {
"dependencies": [
-
"npm:@atcute/atproto@^3.1.7",
-
"npm:@atcute/bluesky@^3.2.7",
+
"npm:@atcute/atproto@^3.1.8",
+
"npm:@atcute/bluesky@^3.2.9",
"npm:@atcute/client@^4.0.5",
"npm:@atcute/identity-resolver@^1.1.4",
"npm:@atcute/identity@^1.1.1",
"npm:@atcute/lexicons@^1.2.2",
"npm:@atcute/oauth-browser-client@^2.0.1",
"npm:@atcute/tid@^1.0.3",
-
"npm:@eslint/compat@^1.4.0",
-
"npm:@eslint/js@^9.36.0",
-
"npm:@iconify/svelte@^5.0.2",
+
"npm:@eslint/compat@^1.4.1",
+
"npm:@eslint/js@^9.39.0",
+
"npm:@iconify/svelte@^5.1.0",
"npm:@soffinal/websocket@~0.2.1",
"npm:@sveltejs/adapter-static@^3.0.10",
-
"npm:@sveltejs/kit@^2.43.2",
-
"npm:@sveltejs/vite-plugin-svelte@^6.2.0",
+
"npm:@sveltejs/kit@^2.48.4",
+
"npm:@sveltejs/vite-plugin-svelte@^6.2.1",
"npm:@tailwindcss/forms@~0.5.10",
-
"npm:@tailwindcss/vite@^4.1.13",
-
"npm:@types/node@24",
+
"npm:@tailwindcss/vite@^4.1.16",
+
"npm:@types/node@^24.10.0",
"npm:@wora/cache-persist@^2.2.1",
"npm:eslint-config-prettier@^10.1.8",
-
"npm:eslint-plugin-svelte@^3.12.4",
-
"npm:eslint@^9.36.0",
-
"npm:globals@^16.4.0",
+
"npm:eslint-plugin-svelte@^3.13.0",
+
"npm:eslint@^9.39.0",
+
"npm:globals@^16.5.0",
"npm:hash-wasm@^4.12.0",
"npm:lru-cache@^11.2.2",
"npm:prettier-plugin-svelte@^3.4.0",
"npm:prettier-plugin-tailwindcss@~0.6.14",
"npm:prettier@^3.6.2",
-
"npm:svelte-awesome-color-picker@^4.0.2",
-
"npm:svelte-check@^4.3.2",
-
"npm:svelte-infinite@0.5",
-
"npm:svelte@^5.39.5",
-
"npm:tailwindcss@^4.1.13",
-
"npm:typescript-eslint@^8.44.1",
-
"npm:typescript@^5.9.2",
-
"npm:vite@^7.1.7"
+
"npm:svelte-awesome-color-picker@^4.1.0",
+
"npm:svelte-check@^4.3.3",
+
"npm:svelte-infinite@~0.5.1",
+
"npm:svelte@^5.43.2",
+
"npm:tailwindcss@^4.1.16",
+
"npm:typescript-eslint@^8.46.3",
+
"npm:typescript@^5.9.3",
+
"npm:vite@^7.1.12"
+21 -21
package.json
···
"version": "0.0.1",
"type": "module",
"scripts": {
-
"dev": "vite dev",
+
"dev": "vite",
"build": "vite build",
"preview": "vite preview",
"prepare": "svelte-kit sync || echo ''",
···
"lint": "prettier --check . && eslint ."
},
"dependencies": {
-
"@atcute/atproto": "^3.1.7",
-
"@atcute/bluesky": "^3.2.7",
+
"@atcute/atproto": "^3.1.8",
+
"@atcute/bluesky": "^3.2.9",
"@atcute/client": "^4.0.5",
"@atcute/identity": "^1.1.1",
"@atcute/identity-resolver": "^1.1.4",
···
"@wora/cache-persist": "^2.2.1",
"hash-wasm": "^4.12.0",
"lru-cache": "^11.2.2",
-
"svelte-infinite": "^0.5.0"
+
"svelte-infinite": "^0.5.1"
},
"devDependencies": {
-
"@eslint/compat": "^1.4.0",
-
"@eslint/js": "^9.36.0",
-
"@iconify/svelte": "^5.0.2",
+
"@eslint/compat": "^1.4.1",
+
"@eslint/js": "^9.39.0",
+
"@iconify/svelte": "^5.1.0",
"@sveltejs/adapter-static": "^3.0.10",
-
"@sveltejs/kit": "^2.43.2",
-
"@sveltejs/vite-plugin-svelte": "^6.2.0",
+
"@sveltejs/kit": "^2.48.4",
+
"@sveltejs/vite-plugin-svelte": "^6.2.1",
"@tailwindcss/forms": "^0.5.10",
-
"@tailwindcss/vite": "^4.1.13",
-
"@types/node": "^24",
-
"eslint": "^9.36.0",
+
"@tailwindcss/vite": "^4.1.16",
+
"@types/node": "^24.10.0",
+
"eslint": "^9.39.0",
"eslint-config-prettier": "^10.1.8",
-
"eslint-plugin-svelte": "^3.12.4",
-
"globals": "^16.4.0",
+
"eslint-plugin-svelte": "^3.13.0",
+
"globals": "^16.5.0",
"prettier": "^3.6.2",
"prettier-plugin-svelte": "^3.4.0",
"prettier-plugin-tailwindcss": "^0.6.14",
-
"svelte": "^5.39.5",
-
"svelte-awesome-color-picker": "^4.0.2",
-
"svelte-check": "^4.3.2",
-
"tailwindcss": "^4.1.13",
-
"typescript": "^5.9.2",
-
"typescript-eslint": "^8.44.1",
-
"vite": "^7.1.7"
+
"svelte": "^5.43.2",
+
"svelte-awesome-color-picker": "^4.1.0",
+
"svelte-check": "^4.3.3",
+
"tailwindcss": "^4.1.16",
+
"typescript": "^5.9.3",
+
"typescript-eslint": "^8.46.3",
+
"vite": "^7.1.12"
}
}
+1
src/app.css
···
@import 'tailwindcss';
+
@plugin '@tailwindcss/forms';
@theme {
+4 -4
src/components/AccountSelector.svelte
···
<div class="relative">
<button
onclick={toggleDropdown}
-
class="flex h-16 w-16 items-center justify-center rounded-sm shadow-lg transition-all hover:scale-105 hover:shadow-xl"
+
class="flex h-13 w-13 items-center justify-center rounded-sm shadow-md transition-all hover:shadow-xl hover:brightness-125 hover:saturate-150"
>
{#if selectedDid}
-
<ProfilePicture {client} did={selectedDid} size={15} />
+
<ProfilePicture {client} did={selectedDid} size={13} />
{:else}
-
<PfpPlaceholder color="var(--nucleus-accent)" size={15} />
+
<PfpPlaceholder color="var(--nucleus-accent)" size={13} />
{/if}
</button>
···
<!-- svelte-ignore a11y_click_events_have_key_events -->
<!-- svelte-ignore a11y_no_static_element_interactions -->
<div
-
class="absolute left-0 z-20 mt-3 min-w-52 animate-fade-in-scale-fast overflow-hidden rounded-sm border-2 border-(--nucleus-accent) bg-(--nucleus-bg)/94 shadow-2xl backdrop-blur-lg transition-all"
+
class="absolute bottom-full z-20 mb-1 min-w-52 animate-fade-in-scale-fast overflow-hidden rounded-sm border-2 border-(--nucleus-accent) bg-(--nucleus-bg)/94 shadow-2xl backdrop-blur-lg transition-all"
onclick={(e) => e.stopPropagation()}
>
{#if accounts.length > 0}
+2 -4
src/components/BskyPost.svelte
···
const element = document.getElementById(targetId);
if (!element) return;
-
// Smooth scroll to the target
element.scrollIntoView({ behavior: 'smooth', block: 'center' });
-
// Trigger pulse after scroll completes
setTimeout(() => {
document.documentElement.style.setProperty(
'--nucleus-selected-post',
···
);
pulsingPostId.set(targetId);
// Clear pulse after animation
-
setTimeout(() => pulsingPostId.set(null), 2000);
-
}, 500);
+
setTimeout(() => pulsingPostId.set(null), 1200);
+
}, 400);
};
const getEmbedText = (embedType: string) => {
+29 -29
src/components/PostComposer.svelte
···
}: Props = $props();
let color = $derived(
-
client.didDoc?.did ? generateColorForDid(client.didDoc?.did) : 'var(--nucleus-accent)'
+
client.didDoc?.did ? generateColorForDid(client.didDoc?.did) : 'var(--nucleus-accent2)'
);
const post = async (text: string): Promise<Result<PostWithUri, string>> => {
···
{/snippet}
{#snippet composer()}
-
{#if replying}
-
{@render renderPost(replying)}
-
{/if}
-
<textarea
-
bind:this={textareaEl}
-
bind:value={postText}
-
onfocus={() => (isFocused = true)}
-
onblur={unfocus}
-
onkeydown={(event) => {
-
if (event.key === 'Escape') unfocus();
-
if (event.key === 'Enter' && (event.metaKey || event.ctrlKey)) doPost();
-
}}
-
placeholder="what's on your mind?"
-
rows="4"
-
class="field-sizing-content single-line-input resize-none bg-(--nucleus-bg)/40 focus:scale-100"
-
style="border-color: color-mix(in srgb, {color} 27%, transparent);"
-
></textarea>
-
{#if quoting}
-
{@render renderPost(quoting)}
-
{/if}
<div class="flex items-center gap-2">
<div class="grow"></div>
<span
···
post
</button>
</div>
+
{#if replying}
+
{@render renderPost(replying)}
+
{/if}
+
<textarea
+
bind:this={textareaEl}
+
bind:value={postText}
+
onfocus={() => (isFocused = true)}
+
onblur={unfocus}
+
onkeydown={(event) => {
+
if (event.key === 'Escape') unfocus();
+
if (event.key === 'Enter' && (event.metaKey || event.ctrlKey)) doPost();
+
}}
+
placeholder="what's on your mind?"
+
rows="4"
+
class="field-sizing-content single-line-input resize-none bg-(--nucleus-bg)/40 focus:scale-100"
+
style="border-color: color-mix(in srgb, {color} 27%, transparent);"
+
></textarea>
+
{#if quoting}
+
{@render renderPost(quoting)}
+
{/if}
{/snippet}
-
<div class="relative min-h-16">
+
<div class="relative min-h-13">
<!-- Spacer to maintain layout when focused -->
{#if isFocused}
-
<div class="min-h-16"></div>
+
<div class="min-h-13"></div>
{/if}
<!-- svelte-ignore a11y_no_static_element_interactions -->
···
}
}}
class="flex max-w-full rounded-sm border-2 shadow-lg transition-all duration-300
-
{!isFocused ? 'min-h-16 items-center' : ''}
-
{isFocused ? 'absolute top-0 right-0 left-0 z-50 shadow-2xl' : ''}"
+
{!isFocused ? 'min-h-13 items-center' : ''}
+
{isFocused ? 'absolute right-0 bottom-0 left-0 z-50 shadow-2xl' : ''}"
style="background: {isFocused
-
? `color-mix(in srgb, var(--nucleus-bg) 80%, ${color} 20%)`
-
: `color-mix(in srgb, ${color} 9%, transparent)`};
+
? `color-mix(in srgb, var(--nucleus-bg) 75%, ${color})`
+
: `color-mix(in srgb, color-mix(in srgb, var(--nucleus-bg) 85%, ${color}) 70%, transparent)`};
border-color: color-mix(in srgb, {color} {isFocused ? '100' : '40'}%, transparent);"
>
-
<div class="w-full p-2" class:py-3={isFocused}>
+
<div class="w-full p-1.5 px-2">
{#if info.length > 0}
<div
class="rounded-sm px-3 py-1.5 text-center font-medium text-nowrap overflow-ellipsis"
···
onfocus={() => (isFocused = true)}
type="text"
placeholder="what's on your mind?"
-
class="single-line-input flex-1 bg-(--nucleus-bg)/40"
+
class="single-line-input flex-1 bg-(--nucleus-bg)/40 p-1 px-2"
style="border-color: color-mix(in srgb, {color} 27%, transparent);"
/>
{/if}
+90 -73
src/routes/+page.svelte
···
</script>
<div class="mx-auto max-w-2xl">
+
<!-- thread list (page scrolls as a whole) -->
+
<div
+
class="mb-4 min-h-screen p-2 [scrollbar-color:var(--nucleus-accent)_transparent]"
+
bind:this={scrollContainer}
+
>
+
{#if $accounts.length > 0}
+
{@render renderThreads()}
+
{:else}
+
<div class="flex justify-center py-4">
+
<p class="text-xl opacity-80">
+
<span class="text-4xl">x_x</span> <br /> no accounts are logged in!
+
</p>
+
</div>
+
{/if}
+
</div>
<!-- header -->
-
<div class="sticky top-0 z-10 bg-(--nucleus-bg) pb-2">
-
<div class="mb-6 flex items-center justify-between">
-
<div>
-
<h1 class="text-3xl font-bold tracking-tight">nucleus</h1>
-
<div class="mt-1 flex gap-2">
-
<div class="h-1 w-11 rounded-full bg-(--nucleus-accent)"></div>
-
<div class="h-1 w-8 rounded-full bg-(--nucleus-accent2)"></div>
+
<div class="sticky bottom-0 z-10">
+
{#if errors.length > 0}
+
<div class="relative m-3 mb-1 error-disclaimer">
+
<div class="flex items-center gap-2 text-red-500">
+
<Icon class="inline h-10 w-10" icon="heroicons:exclamation-triangle-16-solid" />
+
there are ({errors.length}) errors
+
<div class="grow"></div>
+
<button onclick={() => (errorsOpen = !errorsOpen)} class="action-button p-1 px-1.5"
+
>{errorsOpen ? 'hide details' : 'see details'}</button
+
>
</div>
-
</div>
-
<button
-
onclick={() => (isSettingsOpen = true)}
-
class="group rounded-sm bg-(--nucleus-accent)/7 p-2 text-(--nucleus-accent) transition-all hover:scale-110 hover:shadow-lg"
-
aria-label="settings"
-
>
-
<Icon class="group-hover:hidden" icon="heroicons:cog-6-tooth" width={28} />
-
<Icon class="hidden group-hover:block" icon="heroicons:cog-6-tooth-solid" width={28} />
-
</button>
-
</div>
-
-
<!-- composer and error disclaimer (above thread list, not scrollable) -->
-
<div class="space-y-4">
-
<div class="flex min-h-16 items-stretch gap-2">
-
<AccountSelector
-
client={viewClient}
-
accounts={$accounts}
-
bind:selectedDid
-
onAccountSelected={handleAccountSelected}
-
onLogout={handleLogout}
-
/>
-
-
{#if selectedClient}
-
<div class="flex-1">
-
<PostComposer
-
client={selectedClient}
-
onPostSent={(post) => posts.get(selectedDid!)?.set(post.uri, post)}
-
bind:quoting
-
bind:replying
-
/>
-
</div>
-
{:else}
+
{#if errorsOpen}
<div
-
class="flex flex-1 items-center justify-center rounded-sm border-2 border-(--nucleus-accent)/20 bg-(--nucleus-accent)/4 px-4 py-2.5 backdrop-blur-sm"
+
class="absolute right-0 bottom-full left-0 z-10 mb-2 flex animate-fade-in-scale-fast flex-col gap-1 error-disclaimer shadow-lg transition-all"
>
-
<p class="text-sm opacity-80">select or add an account to post</p>
+
{#each errors as error, idx (idx)}
+
<p>• {error}</p>
+
{/each}
</div>
{/if}
</div>
+
{/if}
-
{#if errors.length > 0}
-
<div class="relative error-disclaimer">
-
<div class="flex items-center gap-2 text-red-500">
-
<Icon class="inline h-10 w-10" icon="heroicons:exclamation-triangle-16-solid" />
-
there are ({errors.length}) errors
-
<div class="grow"></div>
-
<button onclick={() => (errorsOpen = !errorsOpen)} class="action-button p-1 px-1.5"
-
>{errorsOpen ? 'hide details' : 'see details'}</button
-
>
-
</div>
-
{#if errorsOpen}
+
<div
+
class="rounded-t-sm px-0.5 pt-0.5"
+
style="background: linear-gradient(to right, var(--nucleus-accent), var(--nucleus-accent2));"
+
>
+
<div
+
class="rounded-t-sm"
+
style="
+
background: linear-gradient(to right, color-mix(in srgb, var(--nucleus-accent) 16%, var(--nucleus-bg)), color-mix(in srgb, var(--nucleus-accent2) 10%, var(--nucleus-bg)));
+
"
+
>
+
<!-- composer and error disclaimer (above thread list, not scrollable) -->
+
<div class="flex gap-2 px-2 pt-2 pb-1">
+
<AccountSelector
+
client={viewClient}
+
accounts={$accounts}
+
bind:selectedDid
+
onAccountSelected={handleAccountSelected}
+
onLogout={handleLogout}
+
/>
+
+
{#if selectedClient}
+
<div class="flex-1">
+
<PostComposer
+
client={selectedClient}
+
onPostSent={(post) => posts.get(selectedDid!)?.set(post.uri, post)}
+
bind:quoting
+
bind:replying
+
/>
+
</div>
+
{:else}
<div
-
class="absolute top-full right-0 left-0 z-10 mt-2 flex animate-fade-in-scale-fast flex-col gap-1 error-disclaimer shadow-lg transition-all"
+
class="flex flex-1 items-center justify-center rounded-sm border-2 border-(--nucleus-accent)/20 bg-(--nucleus-accent)/4 px-4 py-2.5 backdrop-blur-sm"
>
-
{#each errors as error, idx (idx)}
-
<p>• {error}</p>
-
{/each}
+
<p class="text-sm opacity-80">select or add an account to post</p>
</div>
{/if}
</div>
-
{/if}
+
+
<div
+
class="opacity- mt-1 h-px w-full rounded-full border-0 opacity-70"
+
style="background: linear-gradient(to right, var(--nucleus-accent), var(--nucleus-accent2));"
+
></div>
-
<!-- <hr
-
class="h-[4px] w-full rounded-full border-0"
-
style="background: linear-gradient(to right, var(--nucleus-accent), var(--nucleus-accent2));"
-
/> -->
-
</div>
-
</div>
+
<div class="flex items-center justify-between px-2 py-1">
+
<div class="mb-2">
+
<h1 class="text-3xl font-bold tracking-tight">nucleus</h1>
+
<div class="mt-1 flex gap-2">
+
<div class="h-1 w-11 rounded-full bg-(--nucleus-accent)"></div>
+
<div class="h-1 w-8 rounded-full bg-(--nucleus-accent2)"></div>
+
</div>
+
</div>
+
<button
+
onclick={() => (isSettingsOpen = true)}
+
class="group rounded-sm bg-(--nucleus-accent)/15 p-2 text-(--nucleus-accent) transition-all hover:scale-110 hover:shadow-lg"
+
aria-label="settings"
+
>
+
<Icon class="group-hover:hidden" icon="heroicons:cog-6-tooth" width={28} />
+
<Icon class="hidden group-hover:block" icon="heroicons:cog-6-tooth-solid" width={28} />
+
</button>
+
</div>
-
<!-- thread list (page scrolls as a whole) -->
-
<div class="mt-4 [scrollbar-color:var(--nucleus-accent)_transparent]" bind:this={scrollContainer}>
-
{#if $accounts.length > 0}
-
{@render renderThreads()}
-
{:else}
-
<div class="flex justify-center py-4">
-
<p class="text-xl opacity-80">
-
<span class="text-4xl">x_x</span> <br /> no accounts are logged in!
-
</p>
+
<!-- <hr
+
class="h-[4px] w-full rounded-full border-0"
+
style="background: linear-gradient(to right, var(--nucleus-accent), var(--nucleus-accent2));"
+
/> -->
</div>
-
{/if}
+
</div>
</div>
</div>