appview-less bluesky client
27
fork

Configure Feed

Select the types of activity you want to include in your feed.

feat: make the header a footer

dusk 74dfbdb1 11a6e632

+305 -295
+158 -164
deno.lock
··· 1 1 { 2 2 "version": "5", 3 3 "specifiers": { 4 - "npm:@atcute/atproto@^3.1.7": "3.1.8", 5 - "npm:@atcute/bluesky@^3.2.7": "3.2.9", 4 + "npm:@atcute/atproto@^3.1.8": "3.1.8", 5 + "npm:@atcute/bluesky@^3.2.9": "3.2.9", 6 6 "npm:@atcute/client@^4.0.5": "4.0.5", 7 7 "npm:@atcute/identity-resolver@^1.1.4": "1.1.4_@atcute+identity@1.1.1", 8 8 "npm:@atcute/identity@^1.1.1": "1.1.1", 9 9 "npm:@atcute/lexicons@^1.2.2": "1.2.2", 10 10 "npm:@atcute/oauth-browser-client@^2.0.1": "2.0.1_@atcute+identity@1.1.1", 11 11 "npm:@atcute/tid@^1.0.3": "1.0.3", 12 - "npm:@eslint/compat@^1.4.0": "1.4.1_eslint@9.38.0", 13 - "npm:@eslint/js@^9.36.0": "9.38.0", 14 - "npm:@iconify/svelte@^5.0.2": "5.0.2_svelte@5.43.1__acorn@8.15.0", 12 + "npm:@eslint/compat@^1.4.1": "1.4.1_eslint@9.39.0", 13 + "npm:@eslint/js@^9.39.0": "9.39.0", 14 + "npm:@iconify/svelte@^5.1.0": "5.1.0_svelte@5.43.2__acorn@8.15.0", 15 15 "npm:@soffinal/websocket@~0.2.1": "0.2.1_typescript@5.9.3", 16 - "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", 17 - "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", 18 - "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", 16 + "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", 17 + "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", 18 + "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", 19 19 "npm:@tailwindcss/forms@~0.5.10": "0.5.10_tailwindcss@4.1.16", 20 - "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", 21 - "npm:@types/node@24": "24.9.2", 20 + "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", 21 + "npm:@types/node@^24.10.0": "24.10.0", 22 22 "npm:@wora/cache-persist@^2.2.1": "2.2.1", 23 - "npm:eslint-config-prettier@^10.1.8": "10.1.8_eslint@9.38.0", 24 - "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", 25 - "npm:eslint@^9.36.0": "9.38.0", 26 - "npm:globals@^16.4.0": "16.4.0", 23 + "npm:eslint-config-prettier@^10.1.8": "10.1.8_eslint@9.39.0", 24 + "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", 25 + "npm:eslint@^9.39.0": "9.39.0", 26 + "npm:globals@^16.5.0": "16.5.0", 27 27 "npm:hash-wasm@^4.12.0": "4.12.0", 28 28 "npm:lru-cache@^11.2.2": "11.2.2", 29 - "npm:prettier-plugin-svelte@^3.4.0": "3.4.0_prettier@3.6.2_svelte@5.43.1__acorn@8.15.0", 30 - "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", 29 + "npm:prettier-plugin-svelte@^3.4.0": "3.4.0_prettier@3.6.2_svelte@5.43.2__acorn@8.15.0", 30 + "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", 31 31 "npm:prettier@^3.6.2": "3.6.2", 32 - "npm:svelte-awesome-color-picker@^4.0.2": "4.1.0_svelte@5.43.1__acorn@8.15.0", 33 - "npm:svelte-check@^4.3.2": "4.3.3_svelte@5.43.1__acorn@8.15.0_typescript@5.9.3", 34 - "npm:svelte-infinite@0.5": "0.5.1_svelte@5.43.1__acorn@8.15.0", 35 - "npm:svelte@^5.39.5": "5.43.1_acorn@8.15.0", 36 - "npm:tailwindcss@^4.1.13": "4.1.16", 37 - "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", 38 - "npm:typescript@^5.9.2": "5.9.3", 39 - "npm:vite@^7.1.7": "7.1.12_@types+node@24.9.2_picomatch@4.0.3" 32 + "npm:svelte-awesome-color-picker@^4.1.0": "4.1.0_svelte@5.43.2__acorn@8.15.0", 33 + "npm:svelte-check@^4.3.3": "4.3.3_svelte@5.43.2__acorn@8.15.0_typescript@5.9.3", 34 + "npm:svelte-infinite@~0.5.1": "0.5.1_svelte@5.43.2__acorn@8.15.0", 35 + "npm:svelte@^5.43.2": "5.43.2_acorn@8.15.0", 36 + "npm:tailwindcss@^4.1.16": "4.1.16", 37 + "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", 38 + "npm:typescript@^5.9.3": "5.9.3", 39 + "npm:vite@^7.1.12": "7.1.12_@types+node@24.10.0_picomatch@4.0.3" 40 40 }, 41 41 "npm": { 42 42 "@atcute/atproto@3.1.8": { ··· 115 115 "@badrap/valita@0.4.6": { 116 116 "integrity": "sha512-4kdqcjyxo/8RQ8ayjms47HCWZIF5981oE5nIenbfThKDxWXtEHKipAOWlflpPJzZx9y/JWYQkp18Awr7VuepFg==" 117 117 }, 118 - "@esbuild/aix-ppc64@0.25.11": { 119 - "integrity": "sha512-Xt1dOL13m8u0WE8iplx9Ibbm+hFAO0GsU2P34UNoDGvZYkY8ifSiy6Zuc1lYxfG7svWE2fzqCUmFp5HCn51gJg==", 118 + "@esbuild/aix-ppc64@0.25.12": { 119 + "integrity": "sha512-Hhmwd6CInZ3dwpuGTF8fJG6yoWmsToE+vYgD4nytZVxcu1ulHpUQRAB1UJ8+N1Am3Mz4+xOByoQoSZf4D+CpkA==", 120 120 "os": ["aix"], 121 121 "cpu": ["ppc64"] 122 122 }, 123 - "@esbuild/android-arm64@0.25.11": { 124 - "integrity": "sha512-9slpyFBc4FPPz48+f6jyiXOx/Y4v34TUeDDXJpZqAWQn/08lKGeD8aDp9TMn9jDz2CiEuHwfhRmGBvpnd/PWIQ==", 123 + "@esbuild/android-arm64@0.25.12": { 124 + "integrity": "sha512-6AAmLG7zwD1Z159jCKPvAxZd4y/VTO0VkprYy+3N2FtJ8+BQWFXU+OxARIwA46c5tdD9SsKGZ/1ocqBS/gAKHg==", 125 125 "os": ["android"], 126 126 "cpu": ["arm64"] 127 127 }, 128 - "@esbuild/android-arm@0.25.11": { 129 - "integrity": "sha512-uoa7dU+Dt3HYsethkJ1k6Z9YdcHjTrSb5NUy66ZfZaSV8hEYGD5ZHbEMXnqLFlbBflLsl89Zke7CAdDJ4JI+Gg==", 128 + "@esbuild/android-arm@0.25.12": { 129 + "integrity": "sha512-VJ+sKvNA/GE7Ccacc9Cha7bpS8nyzVv0jdVgwNDaR4gDMC/2TTRc33Ip8qrNYUcpkOHUT5OZ0bUcNNVZQ9RLlg==", 130 130 "os": ["android"], 131 131 "cpu": ["arm"] 132 132 }, 133 - "@esbuild/android-x64@0.25.11": { 134 - "integrity": "sha512-Sgiab4xBjPU1QoPEIqS3Xx+R2lezu0LKIEcYe6pftr56PqPygbB7+szVnzoShbx64MUupqoE0KyRlN7gezbl8g==", 133 + "@esbuild/android-x64@0.25.12": { 134 + "integrity": "sha512-5jbb+2hhDHx5phYR2By8GTWEzn6I9UqR11Kwf22iKbNpYrsmRB18aX/9ivc5cabcUiAT/wM+YIZ6SG9QO6a8kg==", 135 135 "os": ["android"], 136 136 "cpu": ["x64"] 137 137 }, 138 - "@esbuild/darwin-arm64@0.25.11": { 139 - "integrity": "sha512-VekY0PBCukppoQrycFxUqkCojnTQhdec0vevUL/EDOCnXd9LKWqD/bHwMPzigIJXPhC59Vd1WFIL57SKs2mg4w==", 138 + "@esbuild/darwin-arm64@0.25.12": { 139 + "integrity": "sha512-N3zl+lxHCifgIlcMUP5016ESkeQjLj/959RxxNYIthIg+CQHInujFuXeWbWMgnTo4cp5XVHqFPmpyu9J65C1Yg==", 140 140 "os": ["darwin"], 141 141 "cpu": ["arm64"] 142 142 }, 143 - "@esbuild/darwin-x64@0.25.11": { 144 - "integrity": "sha512-+hfp3yfBalNEpTGp9loYgbknjR695HkqtY3d3/JjSRUyPg/xd6q+mQqIb5qdywnDxRZykIHs3axEqU6l1+oWEQ==", 143 + "@esbuild/darwin-x64@0.25.12": { 144 + "integrity": "sha512-HQ9ka4Kx21qHXwtlTUVbKJOAnmG1ipXhdWTmNXiPzPfWKpXqASVcWdnf2bnL73wgjNrFXAa3yYvBSd9pzfEIpA==", 145 145 "os": ["darwin"], 146 146 "cpu": ["x64"] 147 147 }, 148 - "@esbuild/freebsd-arm64@0.25.11": { 149 - "integrity": "sha512-CmKjrnayyTJF2eVuO//uSjl/K3KsMIeYeyN7FyDBjsR3lnSJHaXlVoAK8DZa7lXWChbuOk7NjAc7ygAwrnPBhA==", 148 + "@esbuild/freebsd-arm64@0.25.12": { 149 + "integrity": "sha512-gA0Bx759+7Jve03K1S0vkOu5Lg/85dou3EseOGUes8flVOGxbhDDh/iZaoek11Y8mtyKPGF3vP8XhnkDEAmzeg==", 150 150 "os": ["freebsd"], 151 151 "cpu": ["arm64"] 152 152 }, 153 - "@esbuild/freebsd-x64@0.25.11": { 154 - "integrity": "sha512-Dyq+5oscTJvMaYPvW3x3FLpi2+gSZTCE/1ffdwuM6G1ARang/mb3jvjxs0mw6n3Lsw84ocfo9CrNMqc5lTfGOw==", 153 + "@esbuild/freebsd-x64@0.25.12": { 154 + "integrity": "sha512-TGbO26Yw2xsHzxtbVFGEXBFH0FRAP7gtcPE7P5yP7wGy7cXK2oO7RyOhL5NLiqTlBh47XhmIUXuGciXEqYFfBQ==", 155 155 "os": ["freebsd"], 156 156 "cpu": ["x64"] 157 157 }, 158 - "@esbuild/linux-arm64@0.25.11": { 159 - "integrity": "sha512-Qr8AzcplUhGvdyUF08A1kHU3Vr2O88xxP0Tm8GcdVOUm25XYcMPp2YqSVHbLuXzYQMf9Bh/iKx7YPqECs6ffLA==", 158 + "@esbuild/linux-arm64@0.25.12": { 159 + "integrity": "sha512-8bwX7a8FghIgrupcxb4aUmYDLp8pX06rGh5HqDT7bB+8Rdells6mHvrFHHW2JAOPZUbnjUpKTLg6ECyzvas2AQ==", 160 160 "os": ["linux"], 161 161 "cpu": ["arm64"] 162 162 }, 163 - "@esbuild/linux-arm@0.25.11": { 164 - "integrity": "sha512-TBMv6B4kCfrGJ8cUPo7vd6NECZH/8hPpBHHlYI3qzoYFvWu2AdTvZNuU/7hsbKWqu/COU7NIK12dHAAqBLLXgw==", 163 + "@esbuild/linux-arm@0.25.12": { 164 + "integrity": "sha512-lPDGyC1JPDou8kGcywY0YILzWlhhnRjdof3UlcoqYmS9El818LLfJJc3PXXgZHrHCAKs/Z2SeZtDJr5MrkxtOw==", 165 165 "os": ["linux"], 166 166 "cpu": ["arm"] 167 167 }, 168 - "@esbuild/linux-ia32@0.25.11": { 169 - "integrity": "sha512-TmnJg8BMGPehs5JKrCLqyWTVAvielc615jbkOirATQvWWB1NMXY77oLMzsUjRLa0+ngecEmDGqt5jiDC6bfvOw==", 168 + "@esbuild/linux-ia32@0.25.12": { 169 + "integrity": "sha512-0y9KrdVnbMM2/vG8KfU0byhUN+EFCny9+8g202gYqSSVMonbsCfLjUO+rCci7pM0WBEtz+oK/PIwHkzxkyharA==", 170 170 "os": ["linux"], 171 171 "cpu": ["ia32"] 172 172 }, 173 - "@esbuild/linux-loong64@0.25.11": { 174 - "integrity": "sha512-DIGXL2+gvDaXlaq8xruNXUJdT5tF+SBbJQKbWy/0J7OhU8gOHOzKmGIlfTTl6nHaCOoipxQbuJi7O++ldrxgMw==", 173 + "@esbuild/linux-loong64@0.25.12": { 174 + "integrity": "sha512-h///Lr5a9rib/v1GGqXVGzjL4TMvVTv+s1DPoxQdz7l/AYv6LDSxdIwzxkrPW438oUXiDtwM10o9PmwS/6Z0Ng==", 175 175 "os": ["linux"], 176 176 "cpu": ["loong64"] 177 177 }, 178 - "@esbuild/linux-mips64el@0.25.11": { 179 - "integrity": "sha512-Osx1nALUJu4pU43o9OyjSCXokFkFbyzjXb6VhGIJZQ5JZi8ylCQ9/LFagolPsHtgw6himDSyb5ETSfmp4rpiKQ==", 178 + "@esbuild/linux-mips64el@0.25.12": { 179 + "integrity": "sha512-iyRrM1Pzy9GFMDLsXn1iHUm18nhKnNMWscjmp4+hpafcZjrr2WbT//d20xaGljXDBYHqRcl8HnxbX6uaA/eGVw==", 180 180 "os": ["linux"], 181 181 "cpu": ["mips64el"] 182 182 }, 183 - "@esbuild/linux-ppc64@0.25.11": { 184 - "integrity": "sha512-nbLFgsQQEsBa8XSgSTSlrnBSrpoWh7ioFDUmwo158gIm5NNP+17IYmNWzaIzWmgCxq56vfr34xGkOcZ7jX6CPw==", 183 + "@esbuild/linux-ppc64@0.25.12": { 184 + "integrity": "sha512-9meM/lRXxMi5PSUqEXRCtVjEZBGwB7P/D4yT8UG/mwIdze2aV4Vo6U5gD3+RsoHXKkHCfSxZKzmDssVlRj1QQA==", 185 185 "os": ["linux"], 186 186 "cpu": ["ppc64"] 187 187 }, 188 - "@esbuild/linux-riscv64@0.25.11": { 189 - "integrity": "sha512-HfyAmqZi9uBAbgKYP1yGuI7tSREXwIb438q0nqvlpxAOs3XnZ8RsisRfmVsgV486NdjD7Mw2UrFSw51lzUk1ww==", 188 + "@esbuild/linux-riscv64@0.25.12": { 189 + "integrity": "sha512-Zr7KR4hgKUpWAwb1f3o5ygT04MzqVrGEGXGLnj15YQDJErYu/BGg+wmFlIDOdJp0PmB0lLvxFIOXZgFRrdjR0w==", 190 190 "os": ["linux"], 191 191 "cpu": ["riscv64"] 192 192 }, 193 - "@esbuild/linux-s390x@0.25.11": { 194 - "integrity": "sha512-HjLqVgSSYnVXRisyfmzsH6mXqyvj0SA7pG5g+9W7ESgwA70AXYNpfKBqh1KbTxmQVaYxpzA/SvlB9oclGPbApw==", 193 + "@esbuild/linux-s390x@0.25.12": { 194 + "integrity": "sha512-MsKncOcgTNvdtiISc/jZs/Zf8d0cl/t3gYWX8J9ubBnVOwlk65UIEEvgBORTiljloIWnBzLs4qhzPkJcitIzIg==", 195 195 "os": ["linux"], 196 196 "cpu": ["s390x"] 197 197 }, 198 - "@esbuild/linux-x64@0.25.11": { 199 - "integrity": "sha512-HSFAT4+WYjIhrHxKBwGmOOSpphjYkcswF449j6EjsjbinTZbp8PJtjsVK1XFJStdzXdy/jaddAep2FGY+wyFAQ==", 198 + "@esbuild/linux-x64@0.25.12": { 199 + "integrity": "sha512-uqZMTLr/zR/ed4jIGnwSLkaHmPjOjJvnm6TVVitAa08SLS9Z0VM8wIRx7gWbJB5/J54YuIMInDquWyYvQLZkgw==", 200 200 "os": ["linux"], 201 201 "cpu": ["x64"] 202 202 }, 203 - "@esbuild/netbsd-arm64@0.25.11": { 204 - "integrity": "sha512-hr9Oxj1Fa4r04dNpWr3P8QKVVsjQhqrMSUzZzf+LZcYjZNqhA3IAfPQdEh1FLVUJSiu6sgAwp3OmwBfbFgG2Xg==", 203 + "@esbuild/netbsd-arm64@0.25.12": { 204 + "integrity": "sha512-xXwcTq4GhRM7J9A8Gv5boanHhRa/Q9KLVmcyXHCTaM4wKfIpWkdXiMog/KsnxzJ0A1+nD+zoecuzqPmCRyBGjg==", 205 205 "os": ["netbsd"], 206 206 "cpu": ["arm64"] 207 207 }, 208 - "@esbuild/netbsd-x64@0.25.11": { 209 - "integrity": "sha512-u7tKA+qbzBydyj0vgpu+5h5AeudxOAGncb8N6C9Kh1N4n7wU1Xw1JDApsRjpShRpXRQlJLb9wY28ELpwdPcZ7A==", 208 + "@esbuild/netbsd-x64@0.25.12": { 209 + "integrity": "sha512-Ld5pTlzPy3YwGec4OuHh1aCVCRvOXdH8DgRjfDy/oumVovmuSzWfnSJg+VtakB9Cm0gxNO9BzWkj6mtO1FMXkQ==", 210 210 "os": ["netbsd"], 211 211 "cpu": ["x64"] 212 212 }, 213 - "@esbuild/openbsd-arm64@0.25.11": { 214 - "integrity": "sha512-Qq6YHhayieor3DxFOoYM1q0q1uMFYb7cSpLD2qzDSvK1NAvqFi8Xgivv0cFC6J+hWVw2teCYltyy9/m/14ryHg==", 213 + "@esbuild/openbsd-arm64@0.25.12": { 214 + "integrity": "sha512-fF96T6KsBo/pkQI950FARU9apGNTSlZGsv1jZBAlcLL1MLjLNIWPBkj5NlSz8aAzYKg+eNqknrUJ24QBybeR5A==", 215 215 "os": ["openbsd"], 216 216 "cpu": ["arm64"] 217 217 }, 218 - "@esbuild/openbsd-x64@0.25.11": { 219 - "integrity": "sha512-CN+7c++kkbrckTOz5hrehxWN7uIhFFlmS/hqziSFVWpAzpWrQoAG4chH+nN3Be+Kzv/uuo7zhX716x3Sn2Jduw==", 218 + "@esbuild/openbsd-x64@0.25.12": { 219 + "integrity": "sha512-MZyXUkZHjQxUvzK7rN8DJ3SRmrVrke8ZyRusHlP+kuwqTcfWLyqMOE3sScPPyeIXN/mDJIfGXvcMqCgYKekoQw==", 220 220 "os": ["openbsd"], 221 221 "cpu": ["x64"] 222 222 }, 223 - "@esbuild/openharmony-arm64@0.25.11": { 224 - "integrity": "sha512-rOREuNIQgaiR+9QuNkbkxubbp8MSO9rONmwP5nKncnWJ9v5jQ4JxFnLu4zDSRPf3x4u+2VN4pM4RdyIzDty/wQ==", 223 + "@esbuild/openharmony-arm64@0.25.12": { 224 + "integrity": "sha512-rm0YWsqUSRrjncSXGA7Zv78Nbnw4XL6/dzr20cyrQf7ZmRcsovpcRBdhD43Nuk3y7XIoW2OxMVvwuRvk9XdASg==", 225 225 "os": ["openharmony"], 226 226 "cpu": ["arm64"] 227 227 }, 228 - "@esbuild/sunos-x64@0.25.11": { 229 - "integrity": "sha512-nq2xdYaWxyg9DcIyXkZhcYulC6pQ2FuCgem3LI92IwMgIZ69KHeY8T4Y88pcwoLIjbed8n36CyKoYRDygNSGhA==", 228 + "@esbuild/sunos-x64@0.25.12": { 229 + "integrity": "sha512-3wGSCDyuTHQUzt0nV7bocDy72r2lI33QL3gkDNGkod22EsYl04sMf0qLb8luNKTOmgF/eDEDP5BFNwoBKH441w==", 230 230 "os": ["sunos"], 231 231 "cpu": ["x64"] 232 232 }, 233 - "@esbuild/win32-arm64@0.25.11": { 234 - "integrity": "sha512-3XxECOWJq1qMZ3MN8srCJ/QfoLpL+VaxD/WfNRm1O3B4+AZ/BnLVgFbUV3eiRYDMXetciH16dwPbbHqwe1uU0Q==", 233 + "@esbuild/win32-arm64@0.25.12": { 234 + "integrity": "sha512-rMmLrur64A7+DKlnSuwqUdRKyd3UE7oPJZmnljqEptesKM8wx9J8gx5u0+9Pq0fQQW8vqeKebwNXdfOyP+8Bsg==", 235 235 "os": ["win32"], 236 236 "cpu": ["arm64"] 237 237 }, 238 - "@esbuild/win32-ia32@0.25.11": { 239 - "integrity": "sha512-3ukss6gb9XZ8TlRyJlgLn17ecsK4NSQTmdIXRASVsiS2sQ6zPPZklNJT5GR5tE/MUarymmy8kCEf5xPCNCqVOA==", 238 + "@esbuild/win32-ia32@0.25.12": { 239 + "integrity": "sha512-HkqnmmBoCbCwxUKKNPBixiWDGCpQGVsrQfJoVGYLPT41XWF8lHuE5N6WhVia2n4o5QK5M4tYr21827fNhi4byQ==", 240 240 "os": ["win32"], 241 241 "cpu": ["ia32"] 242 242 }, 243 - "@esbuild/win32-x64@0.25.11": { 244 - "integrity": "sha512-D7Hpz6A2L4hzsRpPaCYkQnGOotdUpDzSGRIv9I+1ITdHROSFUWW95ZPZWQmGka1Fg7W3zFJowyn9WGwMJ0+KPA==", 243 + "@esbuild/win32-x64@0.25.12": { 244 + "integrity": "sha512-alJC0uCZpTFrSL0CCDjcgleBXPnCrEAhTBILpeAp7M/OFgoqtAetfBzX0xM00MUsVVPpVjlPuMbREqnZCXaTnA==", 245 245 "os": ["win32"], 246 246 "cpu": ["x64"] 247 247 }, 248 - "@eslint-community/eslint-utils@4.9.0_eslint@9.38.0": { 248 + "@eslint-community/eslint-utils@4.9.0_eslint@9.39.0": { 249 249 "integrity": "sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==", 250 250 "dependencies": [ 251 251 "eslint", ··· 255 255 "@eslint-community/regexpp@4.12.2": { 256 256 "integrity": "sha512-EriSTlt5OC9/7SXkRSCAhfSxxoSUgBm33OH+IkwbdpgoqsSsUg7y3uh+IICI/Qg4BBWr3U2i39RpmycbxMq4ew==" 257 257 }, 258 - "@eslint/compat@1.4.1_eslint@9.38.0": { 258 + "@eslint/compat@1.4.1_eslint@9.39.0": { 259 259 "integrity": "sha512-cfO82V9zxxGBxcQDr1lfaYB7wykTa0b00mGa36FrJl7iTFd0Z2cHfEYuxcBRP/iNijCsWsEkA+jzT8hGYmv33w==", 260 260 "dependencies": [ 261 - "@eslint/core@0.17.0", 261 + "@eslint/core", 262 262 "eslint" 263 263 ], 264 264 "optionalPeers": [ ··· 276 276 "@eslint/config-helpers@0.4.2": { 277 277 "integrity": "sha512-gBrxN88gOIf3R7ja5K9slwNayVcZgK6SOUORm2uBzTeIEfeVaIhOpCtTox3P6R7o2jLFwLFTLnC7kU/RGcYEgw==", 278 278 "dependencies": [ 279 - "@eslint/core@0.17.0" 280 - ] 281 - }, 282 - "@eslint/core@0.16.0": { 283 - "integrity": "sha512-nmC8/totwobIiFcGkDza3GIKfAw1+hLiYVrh3I1nIomQ8PEr5cxg34jnkmGawul/ep52wGRAcyeDCNtWKSOj4Q==", 284 - "dependencies": [ 285 - "@types/json-schema" 279 + "@eslint/core" 286 280 ] 287 281 }, 288 282 "@eslint/core@0.17.0": { ··· 305 299 "strip-json-comments" 306 300 ] 307 301 }, 308 - "@eslint/js@9.38.0": { 309 - "integrity": "sha512-UZ1VpFvXf9J06YG9xQBdnzU+kthors6KjhMAl6f4gH4usHyh31rUf2DLGInT8RFYIReYXNSydgPY0V2LuWgl7A==" 302 + "@eslint/js@9.39.0": { 303 + "integrity": "sha512-BIhe0sW91JGPiaF1mOuPy5v8NflqfjIcDNpC+LbW9f609WVRX1rArrhi6Z2ymvrAry9jw+5POTj4t2t62o8Bmw==" 310 304 }, 311 305 "@eslint/object-schema@2.1.7": { 312 306 "integrity": "sha512-VtAOaymWVfZcmZbp6E2mympDIHvyjXs/12LqWYjVw6qjrfF+VK+fyG33kChz3nnK+SU5/NeHOqrTEHS8sXO3OA==" ··· 314 308 "@eslint/plugin-kit@0.4.1": { 315 309 "integrity": "sha512-43/qtrDUokr7LJqoF2c3+RInu/t4zfrpYdoSDfYyhg52rwLV6TnOvdG4fXm7IkSB3wErkcmJS9iEhjVtOSEjjA==", 316 310 "dependencies": [ 317 - "@eslint/core@0.17.0", 311 + "@eslint/core", 318 312 "levn" 319 313 ] 320 314 }, ··· 334 328 "@humanwhocodes/retry@0.4.3": { 335 329 "integrity": "sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==" 336 330 }, 337 - "@iconify/svelte@5.0.2_svelte@5.43.1__acorn@8.15.0": { 338 - "integrity": "sha512-1iWUT+1veS/QOAzKDG0NPgBtJYGoJqEPwF97voTm8jw6PQ6yU0hL73lEwFoTGMrZmatLvh9cjRBmeSHHaltmrg==", 331 + "@iconify/svelte@5.1.0_svelte@5.43.2__acorn@8.15.0": { 332 + "integrity": "sha512-I14nSqo0pNXO5OKsT61ZO3XIPF4yRHA2ErgPsaZ1sPJdKXn80o7o8jOe1xpWphbb9FihdX6by9zlKKBss61mFw==", 339 333 "dependencies": [ 340 334 "@iconify/types", 341 335 "svelte" ··· 523 517 "acorn" 524 518 ] 525 519 }, 526 - "@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": { 520 + "@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": { 527 521 "integrity": "sha512-7D9lYFWJmB7zxZyTE/qxjksvMqzMuYrrsyh1f4AlZqeZeACPRySjbC3aFiY55wb1tWUaKOQG9PVbm74JcN2Iew==", 528 522 "dependencies": [ 529 523 "@sveltejs/kit" 530 524 ] 531 525 }, 532 - "@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": { 533 - "integrity": "sha512-jf8mx3yctRXE9hvixgcqqK94YI2hDnbxI/12Upkz99XFMvxnJKCMzvz0j7lmbXSyBSNEycWO5xHvi7b73y9qkQ==", 526 + "@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": { 527 + "integrity": "sha512-TGFX1pZUt9qqY20Cv5NyYvy0iLWHf2jXi8s+eCGsig7jQMdwZWKUFMR6TbvFNhfDSUpc1sH/Y5EHv20g3HHA3g==", 534 528 "dependencies": [ 535 529 "@standard-schema/spec", 536 530 "@sveltejs/acorn-typescript", ··· 551 545 ], 552 546 "bin": true 553 547 }, 554 - "@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": { 548 + "@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": { 555 549 "integrity": "sha512-ubWshlMk4bc8mkwWbg6vNvCeT7lGQojE3ijDh3QTR6Zr/R+GXxsGbyH4PExEPpiFmqPhYiVSVmHBjUcVc1JIrA==", 556 550 "dependencies": [ 557 551 "@sveltejs/vite-plugin-svelte", ··· 560 554 "vite" 561 555 ] 562 556 }, 563 - "@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": { 557 + "@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": { 564 558 "integrity": "sha512-YZs/OSKOQAQCnJvM/P+F1URotNnYNeU3P2s4oIpzm1uFaqUEqRxUB0g5ejMjEb5Gjb9/PiBI5Ktrq4rUUF8UVQ==", 565 559 "dependencies": [ 566 560 "@sveltejs/vite-plugin-svelte-inspector", ··· 667 661 "@tailwindcss/oxide-win32-x64-msvc" 668 662 ] 669 663 }, 670 - "@tailwindcss/vite@4.1.16_vite@7.1.12__@types+node@24.9.2__picomatch@4.0.3_@types+node@24.9.2": { 664 + "@tailwindcss/vite@4.1.16_vite@7.1.12__@types+node@24.10.0__picomatch@4.0.3_@types+node@24.10.0": { 671 665 "integrity": "sha512-bbguNBcDxsRmi9nnlWJxhfDWamY3lmcyACHcdO1crxfzuLpOhHLLtEIN/nCbbAtj5rchUgQD17QVAKi1f7IsKg==", 672 666 "dependencies": [ 673 667 "@tailwindcss/node", ··· 685 679 "@types/json-schema@7.0.15": { 686 680 "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==" 687 681 }, 688 - "@types/node@24.9.2": { 689 - "integrity": "sha512-uWN8YqxXxqFMX2RqGOrumsKeti4LlmIMIyV0lgut4jx7KQBcBiW6vkDtIBvHnHIquwNfJhk8v2OtmO8zXWHfPA==", 682 + "@types/node@24.10.0": { 683 + "integrity": "sha512-qzQZRBqkFsYyaSWXuEHc2WR9c0a0CXwiE5FWUvn7ZM+vdy1uZLfCunD38UzhuB7YN/J11ndbDBcTmOdxJo9Q7A==", 690 684 "dependencies": [ 691 685 "undici-types" 692 686 ] 693 687 }, 694 - "@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": { 695 - "integrity": "sha512-ZGBMToy857/NIPaaCucIUQgqueOiq7HeAKkhlvqVV4lm089zUFW6ikRySx2v+cAhKeUCPuWVHeimyk6Dw1iY3w==", 688 + "@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": { 689 + "integrity": "sha512-sbaQ27XBUopBkRiuY/P9sWGOWUW4rl8fDoHIUmLpZd8uldsTyB4/Zg6bWTegPoTLnKj9Hqgn3QD6cjPNB32Odw==", 696 690 "dependencies": [ 697 691 "@eslint-community/regexpp", 698 692 "@typescript-eslint/parser", ··· 708 702 "typescript" 709 703 ] 710 704 }, 711 - "@typescript-eslint/parser@8.46.2_eslint@9.38.0_typescript@5.9.3": { 712 - "integrity": "sha512-BnOroVl1SgrPLywqxyqdJ4l3S2MsKVLDVxZvjI1Eoe8ev2r3kGDo+PcMihNmDE+6/KjkTubSJnmqGZZjQSBq/g==", 705 + "@typescript-eslint/parser@8.46.3_eslint@9.39.0_typescript@5.9.3": { 706 + "integrity": "sha512-6m1I5RmHBGTnUGS113G04DMu3CpSdxCAU/UvtjNWL4Nuf3MW9tQhiJqRlHzChIkhy6kZSAQmc+I1bcGjE3yNKg==", 713 707 "dependencies": [ 714 708 "@typescript-eslint/scope-manager", 715 709 "@typescript-eslint/types", ··· 720 714 "typescript" 721 715 ] 722 716 }, 723 - "@typescript-eslint/project-service@8.46.2_typescript@5.9.3": { 724 - "integrity": "sha512-PULOLZ9iqwI7hXcmL4fVfIsBi6AN9YxRc0frbvmg8f+4hQAjQ5GYNKK0DIArNo+rOKmR/iBYwkpBmnIwin4wBg==", 717 + "@typescript-eslint/project-service@8.46.3_typescript@5.9.3": { 718 + "integrity": "sha512-Fz8yFXsp2wDFeUElO88S9n4w1I4CWDTXDqDr9gYvZgUpwXQqmZBr9+NTTql5R3J7+hrJZPdpiWaB9VNhAKYLuQ==", 725 719 "dependencies": [ 726 720 "@typescript-eslint/tsconfig-utils", 727 721 "@typescript-eslint/types", ··· 729 723 "typescript" 730 724 ] 731 725 }, 732 - "@typescript-eslint/scope-manager@8.46.2": { 733 - "integrity": "sha512-LF4b/NmGvdWEHD2H4MsHD8ny6JpiVNDzrSZr3CsckEgCbAGZbYM4Cqxvi9L+WqDMT+51Ozy7lt2M+d0JLEuBqA==", 726 + "@typescript-eslint/scope-manager@8.46.3": { 727 + "integrity": "sha512-FCi7Y1zgrmxp3DfWfr+3m9ansUUFoy8dkEdeQSgA9gbm8DaHYvZCdkFRQrtKiedFf3Ha6VmoqoAaP68+i+22kg==", 734 728 "dependencies": [ 735 729 "@typescript-eslint/types", 736 730 "@typescript-eslint/visitor-keys" 737 731 ] 738 732 }, 739 - "@typescript-eslint/tsconfig-utils@8.46.2_typescript@5.9.3": { 740 - "integrity": "sha512-a7QH6fw4S57+F5y2FIxxSDyi5M4UfGF+Jl1bCGd7+L4KsaUY80GsiF/t0UoRFDHAguKlBaACWJRmdrc6Xfkkag==", 733 + "@typescript-eslint/tsconfig-utils@8.46.3_typescript@5.9.3": { 734 + "integrity": "sha512-GLupljMniHNIROP0zE7nCcybptolcH8QZfXOpCfhQDAdwJ/ZTlcaBOYebSOZotpti/3HrHSw7D3PZm75gYFsOA==", 741 735 "dependencies": [ 742 736 "typescript" 743 737 ] 744 738 }, 745 - "@typescript-eslint/type-utils@8.46.2_eslint@9.38.0_typescript@5.9.3": { 746 - "integrity": "sha512-HbPM4LbaAAt/DjxXaG9yiS9brOOz6fabal4uvUmaUYe6l3K1phQDMQKBRUrr06BQkxkvIZVVHttqiybM9nJsLA==", 739 + "@typescript-eslint/type-utils@8.46.3_eslint@9.39.0_typescript@5.9.3": { 740 + "integrity": "sha512-ZPCADbr+qfz3aiTTYNNkCbUt+cjNwI/5McyANNrFBpVxPt7GqpEYz5ZfdwuFyGUnJ9FdDXbGODUu6iRCI6XRXw==", 747 741 "dependencies": [ 748 742 "@typescript-eslint/types", 749 743 "@typescript-eslint/typescript-estree", ··· 754 748 "typescript" 755 749 ] 756 750 }, 757 - "@typescript-eslint/types@8.46.2": { 758 - "integrity": "sha512-lNCWCbq7rpg7qDsQrd3D6NyWYu+gkTENkG5IKYhUIcxSb59SQC/hEQ+MrG4sTgBVghTonNWq42bA/d4yYumldQ==" 751 + "@typescript-eslint/types@8.46.3": { 752 + "integrity": "sha512-G7Ok9WN/ggW7e/tOf8TQYMaxgID3Iujn231hfi0Pc7ZheztIJVpO44ekY00b7akqc6nZcvregk0Jpah3kep6hA==" 759 753 }, 760 - "@typescript-eslint/typescript-estree@8.46.2_typescript@5.9.3": { 761 - "integrity": "sha512-f7rW7LJ2b7Uh2EiQ+7sza6RDZnajbNbemn54Ob6fRwQbgcIn+GWfyuHDHRYgRoZu1P4AayVScrRW+YfbTvPQoQ==", 754 + "@typescript-eslint/typescript-estree@8.46.3_typescript@5.9.3": { 755 + "integrity": "sha512-f/NvtRjOm80BtNM5OQtlaBdM5BRFUv7gf381j9wygDNL+qOYSNOgtQ/DCndiYi80iIOv76QqaTmp4fa9hwI0OA==", 762 756 "dependencies": [ 763 757 "@typescript-eslint/project-service", 764 758 "@typescript-eslint/tsconfig-utils", ··· 773 767 "typescript" 774 768 ] 775 769 }, 776 - "@typescript-eslint/utils@8.46.2_eslint@9.38.0_typescript@5.9.3": { 777 - "integrity": "sha512-sExxzucx0Tud5tE0XqR0lT0psBQvEpnpiul9XbGUB1QwpWJJAps1O/Z7hJxLGiZLBKMCutjTzDgmd1muEhBnVg==", 770 + "@typescript-eslint/utils@8.46.3_eslint@9.39.0_typescript@5.9.3": { 771 + "integrity": "sha512-VXw7qmdkucEx9WkmR3ld/u6VhRyKeiF1uxWwCy/iuNfokjJ7VhsgLSOTjsol8BunSw190zABzpwdNsze2Kpo4g==", 778 772 "dependencies": [ 779 773 "@eslint-community/eslint-utils", 780 774 "@typescript-eslint/scope-manager", ··· 784 778 "typescript" 785 779 ] 786 780 }, 787 - "@typescript-eslint/visitor-keys@8.46.2": { 788 - "integrity": "sha512-tUFMXI4gxzzMXt4xpGJEsBsTox0XbNQ1y94EwlD/CuZwFcQP79xfQqMhau9HsRc/J0cAPA/HZt1dZPtGn9V/7w==", 781 + "@typescript-eslint/visitor-keys@8.46.3": { 782 + "integrity": "sha512-uk574k8IU0rOF/AjniX8qbLSGURJVUCeM5e4MIMKBFFi8weeiLrG1fyQejyLXQpRZbU/1BuQasleV/RfHC3hHg==", 789 783 "dependencies": [ 790 784 "@typescript-eslint/types", 791 785 "eslint-visitor-keys@4.2.1" ··· 927 921 "tapable" 928 922 ] 929 923 }, 930 - "esbuild@0.25.11": { 931 - "integrity": "sha512-KohQwyzrKTQmhXDW1PjCv3Tyspn9n5GcY2RTDqeORIdIJY8yKIF7sTSopFmn/wpMPW4rdPXI0UE5LJLuq3bx0Q==", 924 + "esbuild@0.25.12": { 925 + "integrity": "sha512-bbPBYYrtZbkt6Os6FiTLCTFxvq4tt3JKall1vRwshA3fdVztsLAatFaZobhkBC8/BrPetoa0oksYoKXoG4ryJg==", 932 926 "optionalDependencies": [ 933 927 "@esbuild/aix-ppc64", 934 928 "@esbuild/android-arm", ··· 963 957 "escape-string-regexp@4.0.0": { 964 958 "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==" 965 959 }, 966 - "eslint-config-prettier@10.1.8_eslint@9.38.0": { 960 + "eslint-config-prettier@10.1.8_eslint@9.39.0": { 967 961 "integrity": "sha512-82GZUjRS0p/jganf6q1rEO25VSoHH0hKPCTrgillPjdI/3bgBhAE1QzHrHTizjpRvy6pGAvKjDJtk2pF9NDq8w==", 968 962 "dependencies": [ 969 963 "eslint" 970 964 ], 971 965 "bin": true 972 966 }, 973 - "eslint-plugin-svelte@3.13.0_eslint@9.38.0_svelte@5.43.1__acorn@8.15.0_postcss@8.5.6": { 967 + "eslint-plugin-svelte@3.13.0_eslint@9.39.0_svelte@5.43.2__acorn@8.15.0_postcss@8.5.6": { 974 968 "integrity": "sha512-2ohCCQJJTNbIpQCSDSTWj+FN0OVfPmSO03lmSNT7ytqMaWF6kpT86LdzDqtm4sh7TVPl/OEWJ/d7R87bXP2Vjg==", 975 969 "dependencies": [ 976 970 "@eslint-community/eslint-utils", 977 971 "@jridgewell/sourcemap-codec", 978 972 "eslint", 979 973 "esutils", 980 - "globals@16.4.0", 974 + "globals@16.5.0", 981 975 "known-css-properties", 982 976 "postcss", 983 977 "postcss-load-config", ··· 1003 997 "eslint-visitor-keys@4.2.1": { 1004 998 "integrity": "sha512-Uhdk5sfqcee/9H/rCOJikYz67o0a2Tw2hGRPOG2Y1R2dg7brRe1uG0yaNQDHu+TO/uQPF/5eCapvYSmHUjt7JQ==" 1005 999 }, 1006 - "eslint@9.38.0": { 1007 - "integrity": "sha512-t5aPOpmtJcZcz5UJyY2GbvpDlsK5E8JqRqoKtfiKE3cNh437KIqfJr3A3AKf5k64NPx6d0G3dno6XDY05PqPtw==", 1000 + "eslint@9.39.0": { 1001 + "integrity": "sha512-iy2GE3MHrYTL5lrCtMZ0X1KLEKKUjmK0kzwcnefhR66txcEmXZD2YWgR5GNdcEwkNx3a0siYkSvl0vIC+Svjmg==", 1008 1002 "dependencies": [ 1009 1003 "@eslint-community/eslint-utils", 1010 1004 "@eslint-community/regexpp", 1011 1005 "@eslint/config-array", 1012 1006 "@eslint/config-helpers", 1013 - "@eslint/core@0.16.0", 1007 + "@eslint/core", 1014 1008 "@eslint/eslintrc", 1015 1009 "@eslint/js", 1016 1010 "@eslint/plugin-kit", ··· 1060 1054 "estraverse" 1061 1055 ] 1062 1056 }, 1063 - "esrap@2.1.1": { 1064 - "integrity": "sha512-ebTT9B6lOtZGMgJ3o5r12wBacHctG7oEWazIda8UlPfA3HD/Wrv8FdXoVo73vzdpwCxNyXjPauyN2bbJzMkB9A==", 1057 + "esrap@2.1.2": { 1058 + "integrity": "sha512-DgvlIQeowRNyvLPWW4PT7Gu13WznY288Du086E751mwwbsgr29ytBiYeLzAGIo0qk3Ujob0SDk8TiSaM5WQzNg==", 1065 1059 "dependencies": [ 1066 1060 "@jridgewell/sourcemap-codec" 1067 1061 ] ··· 1161 1155 "globals@14.0.0": { 1162 1156 "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==" 1163 1157 }, 1164 - "globals@16.4.0": { 1165 - "integrity": "sha512-ob/2LcVVaVGCYN+r14cnwnoDPUufjiYgSqRhiFD0Q1iI4Odora5RE8Iv1D24hAz5oMophRGkGz+yuvQmmUMnMw==" 1158 + "globals@16.5.0": { 1159 + "integrity": "sha512-c/c15i26VrJ4IRt5Z89DnIzCGDn9EcebibhAOjw5ibqEHsE1wLUgkPn9RDmNcUKyU87GeaL633nyJ+pplFR2ZQ==" 1166 1160 }, 1167 1161 "graceful-fs@4.2.11": { 1168 1162 "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==" ··· 1484 1478 "prelude-ls@1.2.1": { 1485 1479 "integrity": "sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==" 1486 1480 }, 1487 - "prettier-plugin-svelte@3.4.0_prettier@3.6.2_svelte@5.43.1__acorn@8.15.0": { 1481 + "prettier-plugin-svelte@3.4.0_prettier@3.6.2_svelte@5.43.2__acorn@8.15.0": { 1488 1482 "integrity": "sha512-pn1ra/0mPObzqoIQn/vUTR3ZZI6UuZ0sHqMK5x2jMLGrs53h0sXhkVuDcrlssHwIMk7FYrMjHBPoUSyyEEDlBQ==", 1489 1483 "dependencies": [ 1490 1484 "prettier", 1491 1485 "svelte" 1492 1486 ] 1493 1487 }, 1494 - "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": { 1488 + "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": { 1495 1489 "integrity": "sha512-pi2e/+ZygeIqntN+vC573BcW5Cve8zUB0SSAGxqpB4f96boZF4M3phPVoOFCeypwkpRYdi7+jQ5YJJUwrkGUAg==", 1496 1490 "dependencies": [ 1497 1491 "prettier", ··· 1600 1594 "has-flag" 1601 1595 ] 1602 1596 }, 1603 - "svelte-awesome-color-picker@4.1.0_svelte@5.43.1__acorn@8.15.0": { 1597 + "svelte-awesome-color-picker@4.1.0_svelte@5.43.2__acorn@8.15.0": { 1604 1598 "integrity": "sha512-afiSB3eTBlqu96f4+rjBvqG3eCaLwuneNYHe587Wr4Ien6yQWeztGZunPT0FmiI7wFFBVNUlJQLYutII8LfQUg==", 1605 1599 "dependencies": [ 1606 1600 "colord", ··· 1608 1602 "svelte-awesome-slider" 1609 1603 ] 1610 1604 }, 1611 - "svelte-awesome-slider@2.0.0_svelte@5.43.1__acorn@8.15.0": { 1605 + "svelte-awesome-slider@2.0.0_svelte@5.43.2__acorn@8.15.0": { 1612 1606 "integrity": "sha512-YBkOdYm1Feaqsn2JkJBRs+Kc/X3Qy/3GuVmI7GmoYDjBaHkjx9uH4khTuED22z57Hg3gGWeDhp/clIjWDdLNaw==", 1613 1607 "dependencies": [ 1614 1608 "svelte" 1615 1609 ] 1616 1610 }, 1617 - "svelte-check@4.3.3_svelte@5.43.1__acorn@8.15.0_typescript@5.9.3": { 1611 + "svelte-check@4.3.3_svelte@5.43.2__acorn@8.15.0_typescript@5.9.3": { 1618 1612 "integrity": "sha512-RYP0bEwenDXzfv0P1sKAwjZSlaRyqBn0Fz1TVni58lqyEiqgwztTpmodJrGzP6ZT2aHl4MbTvWP6gbmQ3FOnBg==", 1619 1613 "dependencies": [ 1620 1614 "@jridgewell/trace-mapping", ··· 1627 1621 ], 1628 1622 "bin": true 1629 1623 }, 1630 - "svelte-eslint-parser@1.4.0_svelte@5.43.1__acorn@8.15.0_postcss@8.5.6": { 1624 + "svelte-eslint-parser@1.4.0_svelte@5.43.2__acorn@8.15.0_postcss@8.5.6": { 1631 1625 "integrity": "sha512-fjPzOfipR5S7gQ/JvI9r2H8y9gMGXO3JtmrylHLLyahEMquXI0lrebcjT+9/hNgDej0H7abTyox5HpHmW1PSWA==", 1632 1626 "dependencies": [ 1633 1627 "eslint-scope", ··· 1642 1636 "svelte" 1643 1637 ] 1644 1638 }, 1645 - "svelte-infinite@0.5.1_svelte@5.43.1__acorn@8.15.0": { 1639 + "svelte-infinite@0.5.1_svelte@5.43.2__acorn@8.15.0": { 1646 1640 "integrity": "sha512-NvpYWrHPcLHZQMnqUXgKGpOSMq9kMQ6sa8+WO80jLrgBFX+LWoKvAsrc1d1g+eiaagNAE9HalWWJ4KDtYi/+sw==", 1647 1641 "dependencies": [ 1648 1642 "svelte" 1649 1643 ] 1650 1644 }, 1651 - "svelte@5.43.1_acorn@8.15.0": { 1652 - "integrity": "sha512-HwXMvQbSFZD5AqmjXzc1bJ1qPFM+iMyUwttmZjtCruIPLz7tG3RYFfzICotaf9HaR5qszzzTRe2rE/ps4mxGLg==", 1645 + "svelte@5.43.2_acorn@8.15.0": { 1646 + "integrity": "sha512-ro1umEzX8rT5JpCmlf0PPv7ncD8MdVob9e18bhwqTKNoLjS8kDvhVpaoYVPc+qMwDAOfcwJtyY7ZFSDbOaNPgA==", 1653 1647 "dependencies": [ 1654 1648 "@jridgewell/remapping", 1655 1649 "@jridgewell/sourcemap-codec", ··· 1701 1695 "prelude-ls" 1702 1696 ] 1703 1697 }, 1704 - "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": { 1705 - "integrity": "sha512-vbw8bOmiuYNdzzV3lsiWv6sRwjyuKJMQqWulBOU7M0RrxedXledX8G8kBbQeiOYDnTfiXz0Y4081E1QMNB6iQg==", 1698 + "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": { 1699 + "integrity": "sha512-bAfgMavTuGo+8n6/QQDVQz4tZ4f7Soqg53RbrlZQEoAltYop/XR4RAts/I0BrO3TTClTSTFJ0wYbla+P8cEWJA==", 1706 1700 "dependencies": [ 1707 1701 "@typescript-eslint/eslint-plugin", 1708 1702 "@typescript-eslint/parser", ··· 1728 1722 "util-deprecate@1.0.2": { 1729 1723 "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==" 1730 1724 }, 1731 - "vite@7.1.12_@types+node@24.9.2_picomatch@4.0.3": { 1725 + "vite@7.1.12_@types+node@24.10.0_picomatch@4.0.3": { 1732 1726 "integrity": "sha512-ZWyE8YXEXqJrrSLvYgrRP7p62OziLW7xI5HYGWFzOvupfAlrLvURSzv/FyGyy0eidogEM3ujU+kUG1zuHgb6Ug==", 1733 1727 "dependencies": [ 1734 1728 "@types/node", ··· 1747 1741 ], 1748 1742 "bin": true 1749 1743 }, 1750 - "vitefu@1.1.1_vite@7.1.12__@types+node@24.9.2__picomatch@4.0.3_@types+node@24.9.2": { 1744 + "vitefu@1.1.1_vite@7.1.12__@types+node@24.10.0__picomatch@4.0.3_@types+node@24.10.0": { 1751 1745 "integrity": "sha512-B/Fegf3i8zh0yFbpzZ21amWzHmuNlLlmJT6n7bu5e+pCHUKQIfXSYokrqOBGEMMe9UG2sostKQF9mml/vYaWJQ==", 1752 1746 "dependencies": [ 1753 1747 "vite" ··· 1779 1773 "workspace": { 1780 1774 "packageJson": { 1781 1775 "dependencies": [ 1782 - "npm:@atcute/atproto@^3.1.7", 1783 - "npm:@atcute/bluesky@^3.2.7", 1776 + "npm:@atcute/atproto@^3.1.8", 1777 + "npm:@atcute/bluesky@^3.2.9", 1784 1778 "npm:@atcute/client@^4.0.5", 1785 1779 "npm:@atcute/identity-resolver@^1.1.4", 1786 1780 "npm:@atcute/identity@^1.1.1", 1787 1781 "npm:@atcute/lexicons@^1.2.2", 1788 1782 "npm:@atcute/oauth-browser-client@^2.0.1", 1789 1783 "npm:@atcute/tid@^1.0.3", 1790 - "npm:@eslint/compat@^1.4.0", 1791 - "npm:@eslint/js@^9.36.0", 1792 - "npm:@iconify/svelte@^5.0.2", 1784 + "npm:@eslint/compat@^1.4.1", 1785 + "npm:@eslint/js@^9.39.0", 1786 + "npm:@iconify/svelte@^5.1.0", 1793 1787 "npm:@soffinal/websocket@~0.2.1", 1794 1788 "npm:@sveltejs/adapter-static@^3.0.10", 1795 - "npm:@sveltejs/kit@^2.43.2", 1796 - "npm:@sveltejs/vite-plugin-svelte@^6.2.0", 1789 + "npm:@sveltejs/kit@^2.48.4", 1790 + "npm:@sveltejs/vite-plugin-svelte@^6.2.1", 1797 1791 "npm:@tailwindcss/forms@~0.5.10", 1798 - "npm:@tailwindcss/vite@^4.1.13", 1799 - "npm:@types/node@24", 1792 + "npm:@tailwindcss/vite@^4.1.16", 1793 + "npm:@types/node@^24.10.0", 1800 1794 "npm:@wora/cache-persist@^2.2.1", 1801 1795 "npm:eslint-config-prettier@^10.1.8", 1802 - "npm:eslint-plugin-svelte@^3.12.4", 1803 - "npm:eslint@^9.36.0", 1804 - "npm:globals@^16.4.0", 1796 + "npm:eslint-plugin-svelte@^3.13.0", 1797 + "npm:eslint@^9.39.0", 1798 + "npm:globals@^16.5.0", 1805 1799 "npm:hash-wasm@^4.12.0", 1806 1800 "npm:lru-cache@^11.2.2", 1807 1801 "npm:prettier-plugin-svelte@^3.4.0", 1808 1802 "npm:prettier-plugin-tailwindcss@~0.6.14", 1809 1803 "npm:prettier@^3.6.2", 1810 - "npm:svelte-awesome-color-picker@^4.0.2", 1811 - "npm:svelte-check@^4.3.2", 1812 - "npm:svelte-infinite@0.5", 1813 - "npm:svelte@^5.39.5", 1814 - "npm:tailwindcss@^4.1.13", 1815 - "npm:typescript-eslint@^8.44.1", 1816 - "npm:typescript@^5.9.2", 1817 - "npm:vite@^7.1.7" 1804 + "npm:svelte-awesome-color-picker@^4.1.0", 1805 + "npm:svelte-check@^4.3.3", 1806 + "npm:svelte-infinite@~0.5.1", 1807 + "npm:svelte@^5.43.2", 1808 + "npm:tailwindcss@^4.1.16", 1809 + "npm:typescript-eslint@^8.46.3", 1810 + "npm:typescript@^5.9.3", 1811 + "npm:vite@^7.1.12" 1818 1812 ] 1819 1813 } 1820 1814 }
+21 -21
package.json
··· 4 4 "version": "0.0.1", 5 5 "type": "module", 6 6 "scripts": { 7 - "dev": "vite dev", 7 + "dev": "vite", 8 8 "build": "vite build", 9 9 "preview": "vite preview", 10 10 "prepare": "svelte-kit sync || echo ''", ··· 14 14 "lint": "prettier --check . && eslint ." 15 15 }, 16 16 "dependencies": { 17 - "@atcute/atproto": "^3.1.7", 18 - "@atcute/bluesky": "^3.2.7", 17 + "@atcute/atproto": "^3.1.8", 18 + "@atcute/bluesky": "^3.2.9", 19 19 "@atcute/client": "^4.0.5", 20 20 "@atcute/identity": "^1.1.1", 21 21 "@atcute/identity-resolver": "^1.1.4", ··· 26 26 "@wora/cache-persist": "^2.2.1", 27 27 "hash-wasm": "^4.12.0", 28 28 "lru-cache": "^11.2.2", 29 - "svelte-infinite": "^0.5.0" 29 + "svelte-infinite": "^0.5.1" 30 30 }, 31 31 "devDependencies": { 32 - "@eslint/compat": "^1.4.0", 33 - "@eslint/js": "^9.36.0", 34 - "@iconify/svelte": "^5.0.2", 32 + "@eslint/compat": "^1.4.1", 33 + "@eslint/js": "^9.39.0", 34 + "@iconify/svelte": "^5.1.0", 35 35 "@sveltejs/adapter-static": "^3.0.10", 36 - "@sveltejs/kit": "^2.43.2", 37 - "@sveltejs/vite-plugin-svelte": "^6.2.0", 36 + "@sveltejs/kit": "^2.48.4", 37 + "@sveltejs/vite-plugin-svelte": "^6.2.1", 38 38 "@tailwindcss/forms": "^0.5.10", 39 - "@tailwindcss/vite": "^4.1.13", 40 - "@types/node": "^24", 41 - "eslint": "^9.36.0", 39 + "@tailwindcss/vite": "^4.1.16", 40 + "@types/node": "^24.10.0", 41 + "eslint": "^9.39.0", 42 42 "eslint-config-prettier": "^10.1.8", 43 - "eslint-plugin-svelte": "^3.12.4", 44 - "globals": "^16.4.0", 43 + "eslint-plugin-svelte": "^3.13.0", 44 + "globals": "^16.5.0", 45 45 "prettier": "^3.6.2", 46 46 "prettier-plugin-svelte": "^3.4.0", 47 47 "prettier-plugin-tailwindcss": "^0.6.14", 48 - "svelte": "^5.39.5", 49 - "svelte-awesome-color-picker": "^4.0.2", 50 - "svelte-check": "^4.3.2", 51 - "tailwindcss": "^4.1.13", 52 - "typescript": "^5.9.2", 53 - "typescript-eslint": "^8.44.1", 54 - "vite": "^7.1.7" 48 + "svelte": "^5.43.2", 49 + "svelte-awesome-color-picker": "^4.1.0", 50 + "svelte-check": "^4.3.3", 51 + "tailwindcss": "^4.1.16", 52 + "typescript": "^5.9.3", 53 + "typescript-eslint": "^8.46.3", 54 + "vite": "^7.1.12" 55 55 } 56 56 }
+1
src/app.css
··· 1 1 @import 'tailwindcss'; 2 + 2 3 @plugin '@tailwindcss/forms'; 3 4 4 5 @theme {
+4 -4
src/components/AccountSelector.svelte
··· 96 96 <div class="relative"> 97 97 <button 98 98 onclick={toggleDropdown} 99 - class="flex h-16 w-16 items-center justify-center rounded-sm shadow-lg transition-all hover:scale-105 hover:shadow-xl" 99 + 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" 100 100 > 101 101 {#if selectedDid} 102 - <ProfilePicture {client} did={selectedDid} size={15} /> 102 + <ProfilePicture {client} did={selectedDid} size={13} /> 103 103 {:else} 104 - <PfpPlaceholder color="var(--nucleus-accent)" size={15} /> 104 + <PfpPlaceholder color="var(--nucleus-accent)" size={13} /> 105 105 {/if} 106 106 </button> 107 107 ··· 109 109 <!-- svelte-ignore a11y_click_events_have_key_events --> 110 110 <!-- svelte-ignore a11y_no_static_element_interactions --> 111 111 <div 112 - 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" 112 + 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" 113 113 onclick={(e) => e.stopPropagation()} 114 114 > 115 115 {#if accounts.length > 0}
+2 -4
src/components/BskyPost.svelte
··· 82 82 const element = document.getElementById(targetId); 83 83 if (!element) return; 84 84 85 - // Smooth scroll to the target 86 85 element.scrollIntoView({ behavior: 'smooth', block: 'center' }); 87 86 88 - // Trigger pulse after scroll completes 89 87 setTimeout(() => { 90 88 document.documentElement.style.setProperty( 91 89 '--nucleus-selected-post', ··· 93 91 ); 94 92 pulsingPostId.set(targetId); 95 93 // Clear pulse after animation 96 - setTimeout(() => pulsingPostId.set(null), 2000); 97 - }, 500); 94 + setTimeout(() => pulsingPostId.set(null), 1200); 95 + }, 400); 98 96 }; 99 97 100 98 const getEmbedText = (embedType: string) => {
+29 -29
src/components/PostComposer.svelte
··· 23 23 }: Props = $props(); 24 24 25 25 let color = $derived( 26 - client.didDoc?.did ? generateColorForDid(client.didDoc?.did) : 'var(--nucleus-accent)' 26 + client.didDoc?.did ? generateColorForDid(client.didDoc?.did) : 'var(--nucleus-accent2)' 27 27 ); 28 28 29 29 const post = async (text: string): Promise<Result<PostWithUri, string>> => { ··· 119 119 {/snippet} 120 120 121 121 {#snippet composer()} 122 - {#if replying} 123 - {@render renderPost(replying)} 124 - {/if} 125 - <textarea 126 - bind:this={textareaEl} 127 - bind:value={postText} 128 - onfocus={() => (isFocused = true)} 129 - onblur={unfocus} 130 - onkeydown={(event) => { 131 - if (event.key === 'Escape') unfocus(); 132 - if (event.key === 'Enter' && (event.metaKey || event.ctrlKey)) doPost(); 133 - }} 134 - placeholder="what's on your mind?" 135 - rows="4" 136 - class="field-sizing-content single-line-input resize-none bg-(--nucleus-bg)/40 focus:scale-100" 137 - style="border-color: color-mix(in srgb, {color} 27%, transparent);" 138 - ></textarea> 139 - {#if quoting} 140 - {@render renderPost(quoting)} 141 - {/if} 142 122 <div class="flex items-center gap-2"> 143 123 <div class="grow"></div> 144 124 <span ··· 161 141 post 162 142 </button> 163 143 </div> 144 + {#if replying} 145 + {@render renderPost(replying)} 146 + {/if} 147 + <textarea 148 + bind:this={textareaEl} 149 + bind:value={postText} 150 + onfocus={() => (isFocused = true)} 151 + onblur={unfocus} 152 + onkeydown={(event) => { 153 + if (event.key === 'Escape') unfocus(); 154 + if (event.key === 'Enter' && (event.metaKey || event.ctrlKey)) doPost(); 155 + }} 156 + placeholder="what's on your mind?" 157 + rows="4" 158 + class="field-sizing-content single-line-input resize-none bg-(--nucleus-bg)/40 focus:scale-100" 159 + style="border-color: color-mix(in srgb, {color} 27%, transparent);" 160 + ></textarea> 161 + {#if quoting} 162 + {@render renderPost(quoting)} 163 + {/if} 164 164 {/snippet} 165 165 166 - <div class="relative min-h-16"> 166 + <div class="relative min-h-13"> 167 167 <!-- Spacer to maintain layout when focused --> 168 168 {#if isFocused} 169 - <div class="min-h-16"></div> 169 + <div class="min-h-13"></div> 170 170 {/if} 171 171 172 172 <!-- svelte-ignore a11y_no_static_element_interactions --> ··· 177 177 } 178 178 }} 179 179 class="flex max-w-full rounded-sm border-2 shadow-lg transition-all duration-300 180 - {!isFocused ? 'min-h-16 items-center' : ''} 181 - {isFocused ? 'absolute top-0 right-0 left-0 z-50 shadow-2xl' : ''}" 180 + {!isFocused ? 'min-h-13 items-center' : ''} 181 + {isFocused ? 'absolute right-0 bottom-0 left-0 z-50 shadow-2xl' : ''}" 182 182 style="background: {isFocused 183 - ? `color-mix(in srgb, var(--nucleus-bg) 80%, ${color} 20%)` 184 - : `color-mix(in srgb, ${color} 9%, transparent)`}; 183 + ? `color-mix(in srgb, var(--nucleus-bg) 75%, ${color})` 184 + : `color-mix(in srgb, color-mix(in srgb, var(--nucleus-bg) 85%, ${color}) 70%, transparent)`}; 185 185 border-color: color-mix(in srgb, {color} {isFocused ? '100' : '40'}%, transparent);" 186 186 > 187 - <div class="w-full p-2" class:py-3={isFocused}> 187 + <div class="w-full p-1.5 px-2"> 188 188 {#if info.length > 0} 189 189 <div 190 190 class="rounded-sm px-3 py-1.5 text-center font-medium text-nowrap overflow-ellipsis" ··· 202 202 onfocus={() => (isFocused = true)} 203 203 type="text" 204 204 placeholder="what's on your mind?" 205 - class="single-line-input flex-1 bg-(--nucleus-bg)/40" 205 + class="single-line-input flex-1 bg-(--nucleus-bg)/40 p-1 px-2" 206 206 style="border-color: color-mix(in srgb, {color} 27%, transparent);" 207 207 /> 208 208 {/if}
+90 -73
src/routes/+page.svelte
··· 241 241 </script> 242 242 243 243 <div class="mx-auto max-w-2xl"> 244 + <!-- thread list (page scrolls as a whole) --> 245 + <div 246 + class="mb-4 min-h-screen p-2 [scrollbar-color:var(--nucleus-accent)_transparent]" 247 + bind:this={scrollContainer} 248 + > 249 + {#if $accounts.length > 0} 250 + {@render renderThreads()} 251 + {:else} 252 + <div class="flex justify-center py-4"> 253 + <p class="text-xl opacity-80"> 254 + <span class="text-4xl">x_x</span> <br /> no accounts are logged in! 255 + </p> 256 + </div> 257 + {/if} 258 + </div> 244 259 <!-- header --> 245 - <div class="sticky top-0 z-10 bg-(--nucleus-bg) pb-2"> 246 - <div class="mb-6 flex items-center justify-between"> 247 - <div> 248 - <h1 class="text-3xl font-bold tracking-tight">nucleus</h1> 249 - <div class="mt-1 flex gap-2"> 250 - <div class="h-1 w-11 rounded-full bg-(--nucleus-accent)"></div> 251 - <div class="h-1 w-8 rounded-full bg-(--nucleus-accent2)"></div> 260 + <div class="sticky bottom-0 z-10"> 261 + {#if errors.length > 0} 262 + <div class="relative m-3 mb-1 error-disclaimer"> 263 + <div class="flex items-center gap-2 text-red-500"> 264 + <Icon class="inline h-10 w-10" icon="heroicons:exclamation-triangle-16-solid" /> 265 + there are ({errors.length}) errors 266 + <div class="grow"></div> 267 + <button onclick={() => (errorsOpen = !errorsOpen)} class="action-button p-1 px-1.5" 268 + >{errorsOpen ? 'hide details' : 'see details'}</button 269 + > 252 270 </div> 253 - </div> 254 - <button 255 - onclick={() => (isSettingsOpen = true)} 256 - class="group rounded-sm bg-(--nucleus-accent)/7 p-2 text-(--nucleus-accent) transition-all hover:scale-110 hover:shadow-lg" 257 - aria-label="settings" 258 - > 259 - <Icon class="group-hover:hidden" icon="heroicons:cog-6-tooth" width={28} /> 260 - <Icon class="hidden group-hover:block" icon="heroicons:cog-6-tooth-solid" width={28} /> 261 - </button> 262 - </div> 263 - 264 - <!-- composer and error disclaimer (above thread list, not scrollable) --> 265 - <div class="space-y-4"> 266 - <div class="flex min-h-16 items-stretch gap-2"> 267 - <AccountSelector 268 - client={viewClient} 269 - accounts={$accounts} 270 - bind:selectedDid 271 - onAccountSelected={handleAccountSelected} 272 - onLogout={handleLogout} 273 - /> 274 - 275 - {#if selectedClient} 276 - <div class="flex-1"> 277 - <PostComposer 278 - client={selectedClient} 279 - onPostSent={(post) => posts.get(selectedDid!)?.set(post.uri, post)} 280 - bind:quoting 281 - bind:replying 282 - /> 283 - </div> 284 - {:else} 271 + {#if errorsOpen} 285 272 <div 286 - 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" 273 + 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" 287 274 > 288 - <p class="text-sm opacity-80">select or add an account to post</p> 275 + {#each errors as error, idx (idx)} 276 + <p>• {error}</p> 277 + {/each} 289 278 </div> 290 279 {/if} 291 280 </div> 281 + {/if} 292 282 293 - {#if errors.length > 0} 294 - <div class="relative error-disclaimer"> 295 - <div class="flex items-center gap-2 text-red-500"> 296 - <Icon class="inline h-10 w-10" icon="heroicons:exclamation-triangle-16-solid" /> 297 - there are ({errors.length}) errors 298 - <div class="grow"></div> 299 - <button onclick={() => (errorsOpen = !errorsOpen)} class="action-button p-1 px-1.5" 300 - >{errorsOpen ? 'hide details' : 'see details'}</button 301 - > 302 - </div> 303 - {#if errorsOpen} 283 + <div 284 + class="rounded-t-sm px-0.5 pt-0.5" 285 + style="background: linear-gradient(to right, var(--nucleus-accent), var(--nucleus-accent2));" 286 + > 287 + <div 288 + class="rounded-t-sm" 289 + style=" 290 + 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))); 291 + " 292 + > 293 + <!-- composer and error disclaimer (above thread list, not scrollable) --> 294 + <div class="flex gap-2 px-2 pt-2 pb-1"> 295 + <AccountSelector 296 + client={viewClient} 297 + accounts={$accounts} 298 + bind:selectedDid 299 + onAccountSelected={handleAccountSelected} 300 + onLogout={handleLogout} 301 + /> 302 + 303 + {#if selectedClient} 304 + <div class="flex-1"> 305 + <PostComposer 306 + client={selectedClient} 307 + onPostSent={(post) => posts.get(selectedDid!)?.set(post.uri, post)} 308 + bind:quoting 309 + bind:replying 310 + /> 311 + </div> 312 + {:else} 304 313 <div 305 - 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" 314 + 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" 306 315 > 307 - {#each errors as error, idx (idx)} 308 - <p>• {error}</p> 309 - {/each} 316 + <p class="text-sm opacity-80">select or add an account to post</p> 310 317 </div> 311 318 {/if} 312 319 </div> 313 - {/if} 320 + 321 + <div 322 + class="opacity- mt-1 h-px w-full rounded-full border-0 opacity-70" 323 + style="background: linear-gradient(to right, var(--nucleus-accent), var(--nucleus-accent2));" 324 + ></div> 314 325 315 - <!-- <hr 316 - class="h-[4px] w-full rounded-full border-0" 317 - style="background: linear-gradient(to right, var(--nucleus-accent), var(--nucleus-accent2));" 318 - /> --> 319 - </div> 320 - </div> 326 + <div class="flex items-center justify-between px-2 py-1"> 327 + <div class="mb-2"> 328 + <h1 class="text-3xl font-bold tracking-tight">nucleus</h1> 329 + <div class="mt-1 flex gap-2"> 330 + <div class="h-1 w-11 rounded-full bg-(--nucleus-accent)"></div> 331 + <div class="h-1 w-8 rounded-full bg-(--nucleus-accent2)"></div> 332 + </div> 333 + </div> 334 + <button 335 + onclick={() => (isSettingsOpen = true)} 336 + class="group rounded-sm bg-(--nucleus-accent)/15 p-2 text-(--nucleus-accent) transition-all hover:scale-110 hover:shadow-lg" 337 + aria-label="settings" 338 + > 339 + <Icon class="group-hover:hidden" icon="heroicons:cog-6-tooth" width={28} /> 340 + <Icon class="hidden group-hover:block" icon="heroicons:cog-6-tooth-solid" width={28} /> 341 + </button> 342 + </div> 321 343 322 - <!-- thread list (page scrolls as a whole) --> 323 - <div class="mt-4 [scrollbar-color:var(--nucleus-accent)_transparent]" bind:this={scrollContainer}> 324 - {#if $accounts.length > 0} 325 - {@render renderThreads()} 326 - {:else} 327 - <div class="flex justify-center py-4"> 328 - <p class="text-xl opacity-80"> 329 - <span class="text-4xl">x_x</span> <br /> no accounts are logged in! 330 - </p> 344 + <!-- <hr 345 + class="h-[4px] w-full rounded-full border-0" 346 + style="background: linear-gradient(to right, var(--nucleus-accent), var(--nucleus-accent2));" 347 + /> --> 331 348 </div> 332 - {/if} 349 + </div> 333 350 </div> 334 351 </div> 335 352