Extrait persistedRef dans lib/persisted-ref.ts (partagé, testable en node). Ajoute useSplitter + components/ide/PanelSplitter.vue (poignée de resize générique par pointer events, largeur/hauteur persistable), généralisant le resize souris de WorkspaceView. Hisse le chargement initial et les abonnements temps réel dans useRealtimeBootstrap (monté par App.vue) : un seul propriétaire actif sur TOUS les layouts, y compris la vue IDE plein écran. AppShell et WorkspaceView n'en portent plus la responsabilité. Tests unitaires persisted-ref et useSplitter (10).
29 lines
1.1 KiB
Vue
29 lines
1.1 KiB
Vue
<template>
|
|
<div class="flex min-h-0 w-full flex-1 overflow-hidden">
|
|
<AppSidebar />
|
|
<div class="flex min-h-0 min-w-0 flex-1 flex-col">
|
|
<!-- fullbleed (terminal) : pas de tabbar mobile ni de padding bas → terminal réellement plein écran
|
|
(la navigation reste accessible via le lien « ← retour » du header de la vue). -->
|
|
<main v-if="fullbleed" class="flex min-h-0 flex-1 flex-col">
|
|
<slot />
|
|
</main>
|
|
<main v-else class="flex-1 overflow-y-auto pb-14 md:pb-0">
|
|
<div class="mx-auto flex w-full max-w-3xl flex-col gap-4 px-4 py-4 md:py-6">
|
|
<slot />
|
|
</div>
|
|
</main>
|
|
<MobileTabBar v-if="!fullbleed" />
|
|
</div>
|
|
</div>
|
|
</template>
|
|
|
|
<script setup lang="ts">
|
|
// Coquille des vues authentifiées (sidebar + contenu). Le chargement initial et les abonnements
|
|
// temps réel sont désormais possédés par useRealtimeBootstrap (monté dans App.vue), pour couvrir
|
|
// aussi la vue IDE plein écran qui n'utilise pas cette coquille.
|
|
import AppSidebar from './AppSidebar.vue';
|
|
import MobileTabBar from './MobileTabBar.vue';
|
|
|
|
defineProps<{ fullbleed?: boolean }>();
|
|
</script>
|