import type { App } from '../shared/types' // UI state (survives re-renders) export let currentView: 'dashboard' | 'settings' = 'dashboard' export let isNarrow: boolean = window.matchMedia('(max-width: 768px)').matches export let selectedApp: string | null = localStorage.getItem('selectedApp') export let sidebarCollapsed: boolean = localStorage.getItem('sidebarCollapsed') === 'true' export let sidebarSection: 'apps' | 'tools' = (localStorage.getItem('sidebarSection') as 'apps' | 'tools') || 'apps' // Server state (from SSE) export let apps: App[] = [] export let setupMode: boolean = false // Tab state export let appTabs: Record = JSON.parse(localStorage.getItem('appTabs') || '{}') // State setters export function setCurrentView(view: 'dashboard' | 'settings') { currentView = view } export function setSelectedApp(name: string | null) { selectedApp = name if (name) { localStorage.setItem('selectedApp', name) } else { localStorage.removeItem('selectedApp') } } export function setIsNarrow(narrow: boolean) { isNarrow = narrow } export function setSidebarCollapsed(collapsed: boolean) { sidebarCollapsed = collapsed localStorage.setItem('sidebarCollapsed', String(collapsed)) } export function setSidebarSection(section: 'apps' | 'tools') { sidebarSection = section localStorage.setItem('sidebarSection', section) } export function setApps(newApps: App[]) { apps = newApps } export function setSetupMode(mode: boolean) { setupMode = mode } export const getSelectedTab = (appName: string | null) => appName ? appTabs[appName] || 'overview' : 'overview' export function setSelectedTab(appName: string | null, tab: string) { if (!appName) return appTabs[appName] = tab localStorage.setItem('appTabs', JSON.stringify(appTabs)) }