import { createRoot } from 'react-dom/client'; import { App } from './app/App'; import { initPanes, wirePanes } from './app/orchestration/panes'; import { initPreviewFitMode, wirePreviewFitMode } from './app/orchestration/preferences'; import { initSettings, wireSettings } from './app/orchestration/settings'; import { initSnippetSort, wireSnippetSort } from './app/orchestration/snippet-sort'; import { initPersistentStorage, registerServiceWorker } from './app/orchestration/pwa'; import { initApp } from './app/orchestration/startup'; import { initTheme, wireTheme } from './app/orchestration/theme'; import '../styles/base.css'; // Hydrate the persisted theme onto before first paint (no // FOUC), then keep store ↔ DOM ↔ localStorage in sync. Store stays DOM-free; // all browser access funnels through the orchestration + adapter. initTheme(); wireTheme(); // Hydrate + persist the small UI preferences (preview fit mode, pane widths) the // same way. Pane widths hydrate before render so the layout opens as left. initPreviewFitMode(); wirePreviewFitMode(); initPanes(); wirePanes(); // Hydrate + persist the library sort (spec §02 → Sort) so the list opens ordered // the way the user left it. Hydrate before render; persist on change. initSnippetSort(); wireSnippetSort(); // Hydrate + persist the full UserSettings record (editor / performance / // formatting) before render, so the editor, preview, and library read the user's // settings from the first paint (spec §07 → Startup load). initSettings(); wireSettings(); // Load the library from IndexedDB (seeding a sample on first run) and wire // persistence. Fire-and-forget: the UI renders immediately and fills in when // hydration resolves. void initApp(); // PWA: register the service worker (prompt the user to reload on an update) and // request persistent storage so the local-first workspace isn't evicted (web.dev). registerServiceWorker(); initPersistentStorage(); createRoot(document.getElementById('app')!).render();