Files
OpenJarvis/frontend/src/main.tsx
T

45 lines
1.4 KiB
TypeScript

import { StrictMode } from 'react';
import { createRoot } from 'react-dom/client';
import { BrowserRouter } from 'react-router';
import { ErrorBoundary } from './components/ErrorBoundary';
import App from './App';
import { initApiBase } from './lib/api';
import { initAnalytics } from './lib/analytics';
import './index.css';
function applyTheme() {
try {
const raw = localStorage.getItem('openjarvis-settings');
const settings = raw ? JSON.parse(raw) : {};
const theme = settings.theme || 'system';
if (theme === 'dark') {
document.documentElement.classList.add('dark');
document.documentElement.classList.remove('light');
} else if (theme === 'light') {
document.documentElement.classList.add('light');
document.documentElement.classList.remove('dark');
}
} catch { /* use system default */ }
}
applyTheme();
// Fetch the API base URL from the Tauri backend before rendering.
// This ensures JARVIS_PORT is defined in one place (the Rust backend).
// In non-Tauri environments this is a no-op.
initApiBase().finally(() => {
// Kick off analytics init in the background — it's never awaited so
// a slow/failed identity fetch never delays UI render.
void initAnalytics();
createRoot(document.getElementById('root')!).render(
<StrictMode>
<ErrorBoundary>
<BrowserRouter>
<App />
</BrowserRouter>
</ErrorBoundary>
</StrictMode>,
);
});