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,25 @@
// nextSize : calcul de la nouvelle taille d'un panneau (delta, inversion, clamp min/max).
import { describe, it, expect } from 'vitest';
import { nextSize } from '../src/composables/useSplitter';
describe('useSplitter · nextSize', () => {
it('ajoute le delta de position (sens direct)', () => {
expect(nextSize(200, 100, 150, { min: 100, max: 400 })).toBe(250);
});
it('soustrait le delta quand invert (poignée à droite/bas)', () => {
expect(nextSize(200, 100, 150, { min: 100, max: 400, invert: true })).toBe(150);
});
it('clampe au maximum', () => {
expect(nextSize(380, 100, 200, { min: 100, max: 400 })).toBe(400);
});
it('clampe au minimum', () => {
expect(nextSize(120, 200, 100, { min: 100, max: 400 })).toBe(100);
});
it('taille inchangée si la position ne bouge pas', () => {
expect(nextSize(300, 150, 150, { min: 100, max: 400 })).toBe(300);
});
});