HMR / rechargement à chaud
En mode dev, le runtime client de bext fait du rechargement à chaud avec préservation de l'état : à chaque rebuild, les blocs <style> sont échangés à chaud (CSS instantané), le contenu de <main> est remplacé, et l'état vivant des îlots à reprise (valeurs des signaux) est capturé puis restauré — votre compteur, vos champs, votre défilement survivent à l'édition.
Astuce
Essayez ici : ouvrez la console et tapez window.__bextHmr.snapshot(), incrémentez le compteur de la page « Reprise », puis rechargez — la valeur est conservée (un seul coup : un second rechargement repart à zéro). C'est la moitié difficile du HMR (la préservation de l'état), entièrement côté client, sans risque pour le bundle.
Ce qui marche aujourd'hui
- Échange de module en place (window.__bextHmr.swapIsland) : éditez un îlot → le nouveau code est actif, l'état préservé, SANS rechargement.
- CSS à chaud : les blocs <style> sont remplacés sans rechargement.
- Échange de contenu : <main> est remplacé en place, les îlots se re-montent avec le nouveau code.
- Préservation de l'état : les signaux des îlots survivent (snapshot → restore, un seul coup).
- Événement bext:navigated pour ré-initialiser les scripts de contenu.
Ce qui reste (l'arc plus profond)
- Hot-swap des modules SSR côté serveur (live-binding via thunks __bextRebind dans le contexte V8 chaud) — ~60 % construit, BEXT_DEV_MODE ; le plan le juge marginal (bext recompile déjà en incrémental).
Activation
import { clientRuntimeBody } from "@bext-stack/framework/client";
// Dev mode: live-reload with state preservation.
<script dangerouslySetInnerHTML={{ __html:
clientRuntimeBody({ navigation: true, liveReload: true })
}} />
// On a rebuild event the runtime:
// 1. hot-swaps <style> blocks (CSS edits are instant, no flash)
// 2. swaps the <main> content in place
// 3. snapshots each resumable island's LIVE signal values, and on the
// next mount restores them — so your counter / form / scroll survive
// the edit instead of resetting.
// The snapshot channel is also exposed for manual use:
window.__bextHmr.snapshot(); // before a reload