diff --git a/nuxt4-app/app/composables/useSidebarState.ts b/nuxt4-app/app/composables/useSidebarState.ts index d0a272f..5ebddfe 100644 --- a/nuxt4-app/app/composables/useSidebarState.ts +++ b/nuxt4-app/app/composables/useSidebarState.ts @@ -30,12 +30,20 @@ const sidebarState = ref(null) export function useSidebarState() { const route = useRoute() + // Detectar si estamos en mobile (debe hacerse antes de leer el estado) + const isMobile = computed(() => { + if (import.meta.server) return false + return window.innerWidth < 1024 // lg breakpoint + }) + // Inicializar estado solo una vez (singleton) if (!sidebarState.value) { // Leer de cookie si existe const savedState = useCookie(STORAGE_KEY, { default: () => ({ - open: true, + // En desktop, open=false porque no hay overlay (la sidebar siempre está visible) + // En mobile, open=false significa que el overlay está cerrado (comportamiento correcto) + open: false, collapsed: false, size: 28 // defaultSize }) @@ -46,7 +54,7 @@ export function useSidebarState() { // Referencias reactivas al estado const open = computed({ - get: () => sidebarState.value?.open ?? true, + get: () => sidebarState.value?.open ?? false, set: (value: boolean) => { if (sidebarState.value) { sidebarState.value.open = value @@ -98,12 +106,6 @@ export function useSidebarState() { collapsed.value = value } - // Detectar si estamos en mobile - const isMobile = computed(() => { - if (import.meta.server) return false - return window.innerWidth < 1024 // lg breakpoint - }) - // Auto-cerrar en navegación solo en mobile if (import.meta.client) { watch(() => route.fullPath, () => {