tracks lexicons and how many times they appeared on the jetstream

feat: add connection spinner

ptr.pet fc2b671d c3346a41

verified
+4
client/src/app.css
··· 28 28 overflow-y: overlay; 29 29 overflow-y: auto; /* Fallback for browsers that don't support overlay */ 30 30 } 31 + 32 + .wsbadge { 33 + @apply text-sm font-semibold mt-1.5 px-2.5 py-0.5 rounded-full border; 34 + }
-7
client/src/lib/components/BskyToggle.svelte
··· 16 16 <input checked={dontShowBsky} type="checkbox" /> 17 17 <span class="ml-0.5"> hide app.bsky.* </span> 18 18 </button> 19 - 20 - <style lang="postcss"> 21 - @reference "../../app.css"; 22 - .wsbadge { 23 - @apply text-sm font-semibold mt-1.5 px-2.5 py-0.5 rounded-full border; 24 - } 25 - </style>
-7
client/src/lib/components/FilterControls.svelte
··· 20 20 class="bg-blue-50 text-blue-900 placeholder-blue-400 border border-blue-200 rounded-full px-1 outline-none focus:bg-white focus:border-blue-400 min-w-0 w-24" 21 21 /> 22 22 </div> 23 - 24 - <style lang="postcss"> 25 - @reference "../../app.css"; 26 - .wsbadge { 27 - @apply text-sm font-semibold mt-1.5 px-2.5 py-0.5 rounded-full border; 28 - } 29 - </style>
-7
client/src/lib/components/RefreshControl.svelte
··· 28 28 /> 29 29 <span class="text-green-700">s</span> 30 30 </div> 31 - 32 - <style lang="postcss"> 33 - @reference "../../app.css"; 34 - .wsbadge { 35 - @apply text-sm font-semibold mt-1.5 px-2.5 py-0.5 rounded-full border; 36 - } 37 - </style>
-7
client/src/lib/components/SortControls.svelte
··· 32 32 {/each} 33 33 </select> 34 34 </div> 35 - 36 - <style lang="postcss"> 37 - @reference "../../app.css"; 38 - .wsbadge { 39 - @apply text-sm font-semibold mt-1.5 px-2.5 py-0.5 rounded-full border; 40 - } 41 - </style>
+10 -10
client/src/lib/components/StatusBadge.svelte
··· 27 27 const config = $derived(statusConfig[status]); 28 28 </script> 29 29 30 - <span class="wsbadge {config.classes}"> 31 - {config.text} 32 - </span> 33 - 34 - <style lang="postcss"> 35 - @reference "../../app.css"; 36 - .wsbadge { 37 - @apply text-sm font-semibold mt-1.5 px-2.5 py-0.5 rounded-full border; 38 - } 39 - </style> 30 + <div class="flex flex-row items-center gap-2 wsbadge {config.classes}"> 31 + <!-- connecting spinner --> 32 + {#if status === "connecting"} 33 + <div 34 + class="animate-spin rounded-full h-4 w-4 border-b-2 border-yellow-800" 35 + ></div> 36 + {/if} 37 + <!-- status text --> 38 + <span>{config.text}</span> 39 + </div>