import { configure } from 'mobx'; import React from 'react'; import { type Root, createRoot } from 'react-dom/client'; import App from './App'; import RootStore from './RootStore'; const initialValue = `class Family { contains Person[] members } class Person { Person[] children opposite parent Person[0..1] parent opposite children int age TaxStatus taxStatus } enum TaxStatus { child, student, adult, retired } % A child cannot have any dependents. pred invalidTaxStatus(Person p) <-> taxStatus(p, child), children(p, _q) ; taxStatus(p, retired), parent(p, q), !taxStatus(q, retired). indiv family. Family(family). members(family, anne). members(family, bob). members(family, ciri). children(anne, ciri). ?children(bob, ciri). default children(ciri, *): false. taxStatus(anne, adult). age(anne, 35). bobAge: 27. age(bob, bobAge). !age(ciri, bobAge). scope Family = 1, Person += 5..10. `; configure({ enforceActions: 'always', }); let HotRootStore = RootStore; let HotApp = App; function createStore(): RootStore { return new HotRootStore(initialValue); } let rootStore = createStore(); let root: Root | undefined; function render(): void { root?.render(); } if (import.meta.hot) { import.meta.hot.accept('./App', (module) => { if (module === undefined) { return; } ({ default: HotApp } = module as unknown as typeof import('./App')); render(); }); import.meta.hot.accept('./RootStore', (module) => { if (module === undefined) { return; } ({ default: HotRootStore } = module as unknown as typeof import('./RootStore')); rootStore.dispose(); rootStore = createStore(); render(); }); } document.addEventListener('DOMContentLoaded', () => { const rootElement = document.getElementById('app'); if (rootElement !== null) { root = createRoot(rootElement); render(); } });