Fix frontend HMR so the page doesn't break upon saving TS files and restructure frontend architecture (#3871)

* Clean up component setup/tear-down side effects

* Clean up more component setup/tear-down side effects

* Remove nonfunctional debouncer

* Clean up even more component setup/tear-down side effects

* Reuse backend state

* Fix HMR for IO Managers and for State Providers

* Rename IO Managers -> Managers and State Providers -> Stores

* Restructure and partially flatten managers/stores

* Code review fixes

* Review fixes
This commit is contained in:
Keavon Chambers
2026-03-19 13:38:41 -07:00
committed by GitHub
parent eb562146ce
commit 124b17f609
54 changed files with 1385 additions and 931 deletions
+6 -16
View File
@@ -1,20 +1,13 @@
import type { Editor } from "@graphite/editor";
let resizeObserver: ResizeObserver | undefined;
export function setupViewportResizeObserver(editor: Editor) {
// Clean up existing observer if any
if (resizeObserver) {
resizeObserver.disconnect();
}
export function setupViewportResizeObserver(editor: Editor): () => void {
const viewports = Array.from(window.document.querySelectorAll("[data-viewport-container]"));
if (viewports.length <= 0) return;
if (viewports.length <= 0) return () => {};
const viewport = viewports[0];
if (!(viewport instanceof HTMLElement)) return;
if (!(viewport instanceof HTMLElement)) return () => {};
resizeObserver = new ResizeObserver((entries) => {
const resizeObserver = new ResizeObserver((entries) => {
for (const entry of entries) {
const devicePixelRatio = window.devicePixelRatio || 1;
@@ -52,11 +45,8 @@ export function setupViewportResizeObserver(editor: Editor) {
});
resizeObserver.observe(viewport);
}
export function cleanupViewportResizeObserver() {
if (resizeObserver) {
return () => {
resizeObserver.disconnect();
resizeObserver = undefined;
}
};
}