diff --git a/frontend/src/components/EmailRow.jsx b/frontend/src/components/EmailRow.jsx
index d7819b5..eb00ca8 100644
--- a/frontend/src/components/EmailRow.jsx
+++ b/frontend/src/components/EmailRow.jsx
@@ -16,7 +16,7 @@ const fmtSize = (b) => {
return `${(b / 1048576).toFixed(1)} MB`;
};
-export default function EmailRow({ email: initial, onRemove, selected, onToggleSelect }) {
+export default function EmailRow({ email: initial, onRemove, selected, onToggleSelect, focused }) {
const [email, setEmail] = useState(initial);
const [acting, setActing] = useState(false);
@@ -68,7 +68,7 @@ export default function EmailRow({ email: initial, onRemove, selected, onToggleS
return (
diff --git a/frontend/src/components/Layout.jsx b/frontend/src/components/Layout.jsx
index 777883c..112c6cc 100644
--- a/frontend/src/components/Layout.jsx
+++ b/frontend/src/components/Layout.jsx
@@ -1,5 +1,5 @@
import { Link, Outlet, useLocation, useNavigate, useSearchParams } from 'react-router-dom';
-import { useEffect, useState, useCallback } from 'react';
+import { useEffect, useState, useCallback, useRef } from 'react';
import { AuthApi, SyncApi, AnalyticsApi } from '../api/client.js';
import Logo from './Logo.jsx';
import DevBanner from './DevBanner.jsx';
@@ -129,9 +129,23 @@ export default function Layout() {
const loc = useLocation();
const navigate = useNavigate();
+ const searchInputRef = useRef(null);
useEffect(() => { AuthApi.me().then(setUser).catch(() => {}); }, []);
+ // "/" focuses the search bar from anywhere, unless already typing in a field.
+ useEffect(() => {
+ const handler = (e) => {
+ if (e.key !== '/') return;
+ const tag = document.activeElement?.tagName;
+ if (tag === 'INPUT' || tag === 'TEXTAREA' || tag === 'SELECT') return;
+ e.preventDefault();
+ searchInputRef.current?.focus();
+ };
+ window.addEventListener('keydown', handler);
+ return () => window.removeEventListener('keydown', handler);
+ }, []);
+
useEffect(() => {
AnalyticsApi.sidebarCounts().then(setCounts).catch(() => {});
}, []);
@@ -227,6 +241,7 @@ export default function Layout() {