diff --git a/frontend/src/components/layout/AppLayout.tsx b/frontend/src/components/layout/AppLayout.tsx index d03345a..707caec 100644 --- a/frontend/src/components/layout/AppLayout.tsx +++ b/frontend/src/components/layout/AppLayout.tsx @@ -1,14 +1,20 @@ -import { type ReactNode } from 'react' +import { type ReactNode, useEffect } from 'react' import { Sidebar } from './Sidebar' import { ShortcutsDialog } from './ShortcutsDialog' import { CommandPalette } from '@/components/command-palette/CommandPalette' import { Toaster } from '@/components/ui/toast' +import { useUIStore } from '@/lib/store' interface AppLayoutProps { children: ReactNode } export function AppLayout({ children }: AppLayoutProps) { + // Apply persisted UI scale on mount + const uiScale = useUIStore((s) => s.uiScale) + useEffect(() => { + document.documentElement.style.zoom = `${uiScale}%` + }, [uiScale]) return (
+ {/* Scale selector */} +
+ {([100, 110, 125] as const).map((s) => ( + + ))} +
{/* Connection + version row */}
void setSidebarCollapsed: (collapsed: boolean) => void toggleSidebar: () => void setMobileSidebarOpen: (open: boolean) => void setTheme: (theme: 'dark' | 'light') => void + setUIScale: (scale: UIScale) => void } export const useUIStore = create()( @@ -22,6 +26,7 @@ export const useUIStore = create()( sidebarCollapsed: false, mobileSidebarOpen: false, theme: 'dark', + uiScale: 100, setSelectedTenantId: (id) => set({ selectedTenantId: id }), setSidebarCollapsed: (collapsed) => set({ sidebarCollapsed: collapsed }), @@ -31,6 +36,10 @@ export const useUIStore = create()( applyTheme(theme) set({ theme }) }, + setUIScale: (scale) => { + document.documentElement.style.zoom = `${scale}%` + set({ uiScale: scale }) + }, }), { name: 'tod-ui-state', @@ -38,6 +47,7 @@ export const useUIStore = create()( sidebarCollapsed: state.sidebarCollapsed, theme: state.theme, selectedTenantId: state.selectedTenantId, + uiScale: state.uiScale, }), }, ),