feat(web): infra IDE réutilisable (persisted-ref, splitter, bootstrap temps réel)
Some checks failed
CI / Build & test (Node 24) (push) Has been cancelled
CI / Pack & boot smoke (Node 22) (push) Has been cancelled
CI / No em/en dashes (push) Has been cancelled
CI / Build & test (Node 22) (push) Has been cancelled

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:
2026-07-17 16:55:14 +02:00
parent 9a496abd00
commit cf60fa3a56
10 changed files with 244 additions and 55 deletions

View File

@@ -0,0 +1,29 @@
<template>
<div
class="shrink-0 bg-transparent transition-colors hover:bg-accent/40"
:class="axis === 'x' ? 'w-1 cursor-col-resize' : 'h-1 cursor-row-resize'"
role="separator"
:aria-orientation="axis === 'x' ? 'vertical' : 'horizontal'"
@pointerdown="onPointerDown"
/>
</template>
<script setup lang="ts">
// Poignée de redimensionnement réutilisable pour les panneaux de l'IDE.
// La taille est un v-model (px) que le parent persiste via le store IDE.
import { useSplitter } from '../../composables/useSplitter';
const size = defineModel<number>({ required: true });
const props = defineProps<{ axis: 'x' | 'y'; min: number; max: number; invert?: boolean }>();
const { onPointerDown } = useSplitter({
axis: props.axis,
min: props.min,
max: props.max,
invert: props.invert,
get: () => size.value,
set: (v) => {
size.value = v;
},
});
</script>