Skip to content

Commit fce5ddf

Browse files
nsheapsclaude
andauthored
feat(ui): default sidebar to closed on mobile viewports (#31)
On mobile (<768px), users expect the content area to be visible first. The sidebar can still be opened via the hamburger toggle. https://claude.ai/code/session_01BsmRarsK1A5aX9VezT3Unb Co-authored-by: Claude <noreply@anthropic.com>
1 parent 430b591 commit fce5ddf

2 files changed

Lines changed: 20 additions & 1 deletion

File tree

packages/ui/src/components/App.test.tsx

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -111,6 +111,23 @@ describe('App', () => {
111111
fireEvent.click(toggle);
112112
});
113113

114+
it('sidebar starts closed on mobile viewport', async () => {
115+
const originalInnerWidth = window.innerWidth;
116+
Object.defineProperty(window, 'innerWidth', { value: 375, writable: true, configurable: true });
117+
try {
118+
const backend = new MemoryBackend();
119+
seedDemoMode(backend);
120+
renderApp(backend);
121+
await waitFor(() => {
122+
expect(screen.getByTestId('sidebar-toggle')).toBeDefined();
123+
});
124+
// Sidebar should be closed by default on mobile
125+
expect(screen.queryByTestId('sidebar-backdrop')).toBeNull();
126+
} finally {
127+
Object.defineProperty(window, 'innerWidth', { value: originalInnerWidth, writable: true, configurable: true });
128+
}
129+
});
130+
114131
it('opens command palette with keyboard shortcut', async () => {
115132
const backend = new MemoryBackend();
116133
seedDemoMode(backend);

packages/ui/src/components/App.tsx

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,9 @@ export function App() {
8989
const [pageContents, setPageContents] = useState<Record<string, string>>({});
9090
const [commandPaletteOpen, setCommandPaletteOpen] = useState(false);
9191
const [searchOpen, setSearchOpen] = useState(false);
92-
const [sidebarOpen, setSidebarOpen] = useState(true);
92+
const [sidebarOpen, setSidebarOpen] = useState(
93+
() => typeof window === 'undefined' || window.innerWidth >= 768,
94+
);
9395
const [hasStarted, setHasStarted] = useState(false);
9496
const [spaceName, setSpaceName] = useState<string>('My Space');
9597
const [trash, setTrash] = useState<SidebarPageRef[]>([]);

0 commit comments

Comments
 (0)