diff options
| author | Adam Mathes <adam@adammathes.com> | 2026-02-14 14:49:09 -0800 |
|---|---|---|
| committer | Adam Mathes <adam@adammathes.com> | 2026-02-14 14:49:09 -0800 |
| commit | 490edf9e9f2911231df6c76ef4afeb3b1fb763d2 (patch) | |
| tree | ab3ed784ecb79f93af52714a993096e09040a455 /frontend/src/App.tsx | |
| parent | afa87af01c79a9baa539f2992d32154d2a4739bd (diff) | |
| download | neko-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.tsx | 33 |
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> |
