browse the protocol like its 2008 ibex.desertthunder.dev
ubuntu atproto svelte
7

Configure Feed

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

feat: add tray action to reset window geometry

Owais Jamil (Jun 22, 2026, 12:35 AM -0500) 8b4bae5e 5e9d8a4f

+52 -26
+5
.changeset/ten-heads-melt.md
··· 1 + --- 2 + 'intrepid-ibex': minor 3 + --- 4 + 5 + remove about computer from welcome
+5
.changeset/wet-wolves-lick.md
··· 1 + --- 2 + 'intrepid-ibex': minor 3 + --- 4 + 5 + allow resetting of window position
+21 -10
src/lib/components/AppWindow.svelte
··· 59 59 onMount(() => { 60 60 if (!browser || !storageKey) return; 61 61 62 + const resetStoredGeometry = () => { 63 + x = 0; 64 + y = 0; 65 + width = null; 66 + height = null; 67 + }; 68 + 69 + window.addEventListener('intrepid-ibex:reset-window-geometry', resetStoredGeometry); 70 + 62 71 const storedGeometry = localStorage.getItem(storageKey); 63 - if (!storedGeometry) return; 72 + if (storedGeometry) { 73 + try { 74 + const geometry = JSON.parse(storedGeometry) as { x?: number; y?: number; width?: number; height?: number }; 75 + x = typeof geometry.x === 'number' ? geometry.x : 0; 76 + y = typeof geometry.y === 'number' ? geometry.y : 0; 77 + width = typeof geometry.width === 'number' ? geometry.width : null; 78 + height = typeof geometry.height === 'number' ? geometry.height : null; 79 + } catch { 80 + localStorage.removeItem(storageKey); 81 + } 82 + } 64 83 65 - try { 66 - const geometry = JSON.parse(storedGeometry) as { x?: number; y?: number; width?: number; height?: number }; 67 - x = typeof geometry.x === 'number' ? geometry.x : 0; 68 - y = typeof geometry.y === 'number' ? geometry.y : 0; 69 - width = typeof geometry.width === 'number' ? geometry.width : null; 70 - height = typeof geometry.height === 'number' ? geometry.height : null; 71 - } catch { 72 - localStorage.removeItem(storageKey); 73 - } 84 + return () => window.removeEventListener('intrepid-ibex:reset-window-geometry', resetStoredGeometry); 74 85 }); 75 86 76 87 function startDrag(event: PointerEvent) {
+15
src/lib/components/GnomeTray.svelte
··· 47 47 48 48 startupSound.setMuted(target.checked); 49 49 } 50 + 51 + function resetWindowGeometry() { 52 + const geometryKeyPrefix = 'intrepid-ibex:window-geometry:'; 53 + 54 + for (const key of Object.keys(localStorage)) { 55 + if (key.startsWith(geometryKeyPrefix)) { 56 + localStorage.removeItem(key); 57 + } 58 + } 59 + 60 + window.dispatchEvent(new Event('intrepid-ibex:reset-window-geometry')); 61 + } 50 62 </script> 51 63 52 64 <aside class="panel-tray" aria-label="Status tray"> ··· 65 77 <span>@{accountSetup.identity.handle}</span> 66 78 </a> 67 79 {/if} 80 + <button class="tray-button" type="button" onclick={resetWindowGeometry} title="Reset window positions"> 81 + <img src="/icons/ui/reload.svg" alt="Reset window positions" width="16" height="16" /> 82 + </button> 68 83 <button class="tray-button" type="button" onclick={() => desktopSession.lock()} title="Lock screen"> 69 84 <img src="/icons/humanity/status/network-wireless-encrypted.svg" alt="Lock screen" width="16" height="16" /> 70 85 </button>
+1 -16
src/lib/components/WelcomeScreen.svelte
··· 2 2 import { goto } from '$app/navigation'; 3 3 import { resolve } from '$app/paths'; 4 4 import { accountSetup } from '$lib/atproto/setup.svelte'; 5 - import AboutComputer from '$lib/components/AboutComputer.svelte'; 6 5 import { REPO_URL } from '$lib/constants'; 7 6 8 7 const quickLinks = [ ··· 93 92 </p> 94 93 </section> 95 94 </div> 96 - 97 - <div class="about-embed"> 98 - <AboutComputer /> 99 - </div> 100 95 </section> 101 96 102 97 <style> ··· 115 110 116 111 .welcome-banner, 117 112 .start-panel, 118 - .notes-panel, 119 - .about-embed { 113 + .notes-panel { 120 114 border: 1px solid #8e6d43; 121 115 border-radius: var(--radius-3); 122 116 box-shadow: ··· 296 290 background: #ead7b8; 297 291 border: 1px solid #d2b991; 298 292 border-radius: var(--radius-1); 299 - } 300 - 301 - .about-embed { 302 - overflow: visible; 303 - } 304 - 305 - .about-embed :global(.about-computer) { 306 - height: auto; 307 - min-height: 0; 308 293 } 309 294 310 295 @media (max-width: 820px) {
+4
static/icons/ui/reload.svg
··· 1 + <svg xmlns="http://www.w3.org/2000/svg" width="1em" height="1em" viewBox="0 0 8 8"> 2 + <path d="M0 0h8v8H0z" fill="none" /> 3 + <path fill="#fff" d="M8 0v4H4l2-2c-6-5-7 9 0 4l1 1c-9 5-9-11 0-6" /> 4 + </svg>
+1
vite.config.ts
··· 4 4 5 5 export default defineConfig({ 6 6 plugins: [sveltekit()], 7 + server: { open: true }, 7 8 build: { 8 9 rolldownOptions: { 9 10 onLog(level, log, defaultHandler) {