// Defensive fix for environments or extensions that attempt to assign window.fetch // when window.fetch only has a getter defined. (function() { if (typeof window !== 'undefined') { try { let _fetch = window.fetch; Object.defineProperty(window, 'fetch', { get() { return _fetch; }, set(fn) { _fetch = fn; }, configurable: true, enumerable: true }); } catch (_) { try { let _fetch = window.fetch; Object.defineProperty(Window.prototype, 'fetch', { get() { return _fetch; }, set(fn) { _fetch = fn; }, configurable: true, enumerable: true }); } catch (_) {} } window.addEventListener('error', (event) => { if ( event?.message && (event.message.includes('fetch') || event.message.includes('only a getter')) ) { event.preventDefault(); } }, true); } })(); import { StrictMode } from 'react'; import { createRoot } from 'react-dom/client'; import App from './App.tsx'; import { TariffProvider } from './context/TariffContext.tsx'; import { Header } from './components/Header.tsx'; import { Footer } from './components/Footer.tsx'; import { OwnerAdminBar } from './components/OwnerAdminBar.tsx'; import { OwnerAuthModal } from './components/OwnerAuthModal.tsx'; import { TariffEditorModal } from './components/TariffEditorModal.tsx'; import { FloatingActions } from './components/FloatingActions.tsx'; import './index.css'; // 1. Homepage SPA full application mount const rootElement = document.getElementById('root'); if (rootElement) { createRoot(rootElement).render( ); } // 2. Shared Universal Header Mount (Used across all subpages) const headerRoot = document.getElementById('site-header-root'); if (headerRoot) { createRoot(headerRoot).render(
); } // 3. Shared Universal Footer & Floating Actions Mount (Used across all subpages) const footerRoot = document.getElementById('site-footer-root'); if (footerRoot) { createRoot(footerRoot).render(