import React, { Suspense } from 'react'; import { createRoot } from 'react-dom/client'; import { RouterProvider } from 'react-router-dom'; import { Toaster } from 'react-hot-toast'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { TamaguiProvider, Theme } from '@tamagui/core'; import { setNonce } from '@tamagui/web'; import '@tamagui/core/reset.css'; import tamaguiConfig from '../../../tamagui.config'; import { AuthProvider } from './auth/context'; import { router } from './router'; import '../../css/app.css'; import './i18n'; import './dev-tools'; import { AppearanceProvider, useAppearance, initializeTheme } from '@/hooks/use-appearance'; import { EventProvider } from './context/EventContext'; import MatomoTracker from '@/components/analytics/MatomoTracker'; import { ConsentProvider } from '@/contexts/consent'; import CookieBanner from '@/components/consent/CookieBanner'; import { Sentry, initSentry } from '@/lib/sentry'; import { prefetchMobileRoutes } from './mobile/prefetch'; const DevTenantSwitcher = React.lazy(() => import('./DevTenantSwitcher')); const enableDevSwitcher = import.meta.env.DEV || import.meta.env.VITE_ENABLE_TENANT_SWITCHER === 'true'; const styleNonce = document .querySelector('meta[name="csp-style-nonce"]') ?.getAttribute('content'); if (styleNonce) { setNonce(styleNonce); } initializeTheme(); initSentry('admin'); const rootEl = document.getElementById('root')!; const queryClient = new QueryClient({ defaultOptions: { queries: { staleTime: 1000 * 60, // 1 minute refetchOnWindowFocus: false, refetchOnReconnect: false, retry: 1, }, mutations: { retry: 1, }, }, }); if ('serviceWorker' in navigator) { window.addEventListener('load', () => { navigator.serviceWorker.register('/admin-sw.js').catch(() => {}); }); } const AdminFallback: React.FC<{ message: string }> = ({ message }) => (