feat(web): infra IDE réutilisable (persisted-ref, splitter, bootstrap temps réel)
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).
This commit is contained in:
@@ -15,6 +15,7 @@
|
||||
import { computed } from 'vue';
|
||||
import { useRoute } from 'vue-router';
|
||||
import { wsClient } from './lib/ws-client';
|
||||
import { useRealtimeBootstrap } from './composables/useRealtimeBootstrap';
|
||||
import WsBanner from './components/layout/WsBanner.vue';
|
||||
import AppShell from './components/layout/AppShell.vue';
|
||||
import ToastContainer from './components/ToastContainer.vue';
|
||||
@@ -23,4 +24,8 @@ import CommandPalette from './components/CommandPalette.vue';
|
||||
const route = useRoute();
|
||||
const layout = computed(() => route.meta.layout ?? 'shell');
|
||||
const wsReconnecting = computed(() => wsClient.status.value === 'reconnecting');
|
||||
|
||||
// Propriétaire unique du chargement initial + temps réel : hissé ici (App.vue toujours monté)
|
||||
// pour couvrir TOUS les layouts, y compris la vue IDE plein écran sans AppShell.
|
||||
useRealtimeBootstrap();
|
||||
</script>
|
||||
|
||||
Reference in New Issue
Block a user