|
2 | 2 | import "../styles/main.css"; |
3 | 3 |
|
4 | 4 | import { onDestroy, onMount } from "svelte"; |
| 5 | + import { browser } from "$app/environment"; |
5 | 6 | import { goto } from "$app/navigation"; |
6 | 7 | import { base } from "$app/paths"; |
7 | 8 | import { page } from "$app/state"; |
|
101 | 102 | settings.set({ welcomeModalSeen: true }); |
102 | 103 | } |
103 | 104 |
|
| 105 | + // Global keyboard shortcut: New Chat (Ctrl/Cmd + Shift + O) |
| 106 | + const onKeydown = (e: KeyboardEvent) => { |
| 107 | + // Ignore when a modal has focus (app is inert) |
| 108 | + const appEl = document.getElementById("app"); |
| 109 | + if (appEl?.hasAttribute("inert")) return; |
| 110 | +
|
| 111 | + const oPressed = e.key?.toLowerCase() === "o"; |
| 112 | + const metaOrCtrl = e.metaKey || e.ctrlKey; |
| 113 | + if (oPressed && e.shiftKey && metaOrCtrl) { |
| 114 | + e.preventDefault(); |
| 115 | + isAborted.set(true); |
| 116 | + if (requireAuthUser()) return; |
| 117 | + goto(`${base}/`, { invalidateAll: true }); |
| 118 | + } |
| 119 | + }; |
| 120 | +
|
104 | 121 | onDestroy(() => { |
105 | 122 | clearTimeout(errorToastTimeout); |
| 123 | + if (browser) window.removeEventListener("keydown", onKeydown, { capture: true }); |
106 | 124 | }); |
107 | 125 |
|
108 | 126 | $effect(() => { |
|
161 | 179 | }); |
162 | 180 | } |
163 | 181 |
|
164 | | - // Global keyboard shortcut: New Chat (Ctrl/Cmd + Shift + O) |
165 | | - const onKeydown = (e: KeyboardEvent) => { |
166 | | - // Ignore when a modal has focus (app is inert) |
167 | | - const appEl = document.getElementById("app"); |
168 | | - if (appEl?.hasAttribute("inert")) return; |
169 | | -
|
170 | | - const oPressed = e.key?.toLowerCase() === "o"; |
171 | | - const metaOrCtrl = e.metaKey || e.ctrlKey; |
172 | | - if (oPressed && e.shiftKey && metaOrCtrl) { |
173 | | - e.preventDefault(); |
174 | | - isAborted.set(true); |
175 | | - if (requireAuthUser()) return; |
176 | | - goto(`${base}/`, { invalidateAll: true }); |
177 | | - } |
178 | | - }; |
179 | | -
|
180 | 182 | window.addEventListener("keydown", onKeydown, { capture: true }); |
181 | | - onDestroy(() => window.removeEventListener("keydown", onKeydown, { capture: true })); |
182 | 183 | }); |
183 | 184 |
|
184 | 185 | let mobileNavTitle = $derived( |
|
0 commit comments