aboutsummaryrefslogtreecommitdiffstats
path: root/frontend/src/App.tsx
diff options
context:
space:
mode:
authorAdam Mathes <adam@adammathes.com>2026-02-14 14:49:09 -0800
committerAdam Mathes <adam@adammathes.com>2026-02-14 14:49:09 -0800
commit490edf9e9f2911231df6c76ef4afeb3b1fb763d2 (patch)
treeab3ed784ecb79f93af52714a993096e09040a455 /frontend/src/App.tsx
parentafa87af01c79a9baa539f2992d32154d2a4739bd (diff)
downloadneko-490edf9e9f2911231df6c76ef4afeb3b1fb763d2.tar.gz
neko-490edf9e9f2911231df6c76ef4afeb3b1fb763d2.tar.bz2
neko-490edf9e9f2911231df6c76ef4afeb3b1fb763d2.zip
task: improve mobile responsiveness of React UI\n\n- Added media queries to App.css to handle mobile sidebar layout (overlay with backdrop)\n- Implemented auto-hiding sidebar on mobile when links are clicked\n- Reduced padding and adjusted max-widths for smaller screens in App.css, FeedItem.css, and Settings.css\n- Added window resize listener to Dashboard to manage sidebar visibility based on width\n- Verified all existing tests pass\n\nFixes NK-g818qn
Diffstat (limited to 'frontend/src/App.tsx')
-rw-r--r--frontend/src/App.tsx33
1 files changed, 28 insertions, 5 deletions
diff --git a/frontend/src/App.tsx b/frontend/src/App.tsx
index 1812451..478444c 100644
--- a/frontend/src/App.tsx
+++ b/frontend/src/App.tsx
@@ -44,24 +44,47 @@ interface DashboardProps {
}
function Dashboard({ theme, setTheme, fontTheme, setFontTheme }: DashboardProps) {
- const [sidebarVisible, setSidebarVisible] = useState(true);
+ const [sidebarVisible, setSidebarVisible] = useState(window.innerWidth > 768);
+
+ useEffect(() => {
+ const handleResize = () => {
+ if (window.innerWidth > 768) {
+ setSidebarVisible(true);
+ } else {
+ setSidebarVisible(false);
+ }
+ };
+ window.addEventListener('resize', handleResize);
+ return () => window.removeEventListener('resize', handleResize);
+ }, []);
return (
<div
className={`dashboard ${sidebarVisible ? 'sidebar-visible' : 'sidebar-hidden'} theme-${theme} font-${fontTheme}`}
>
<div className="dashboard-content">
- {!sidebarVisible && (
+ {(!sidebarVisible || window.innerWidth <= 768) && (
<button
className="sidebar-toggle fixed-toggle"
- onClick={() => setSidebarVisible(true)}
- title="Show Sidebar"
+ onClick={() => setSidebarVisible(!sidebarVisible)}
+ title={sidebarVisible ? "Hide Sidebar" : "Show Sidebar"}
>
🐱
</button>
)}
+ {sidebarVisible && (
+ <div
+ className="sidebar-backdrop"
+ onClick={() => setSidebarVisible(false)}
+ />
+ )}
<aside className={`dashboard-sidebar ${sidebarVisible ? '' : 'hidden'}`}>
- <FeedList theme={theme} setTheme={setTheme} setSidebarVisible={setSidebarVisible} />
+ <FeedList
+ theme={theme}
+ setTheme={setTheme}
+ setSidebarVisible={setSidebarVisible}
+ isMobile={window.innerWidth <= 768}
+ />
</aside>
<main className="dashboard-main">
<Routes>