52 lines
1.4 KiB
TypeScript
52 lines
1.4 KiB
TypeScript
import ReactDOM from 'react-dom/client'
|
|
import { RouterProvider, createRouter } from '@tanstack/react-router'
|
|
import { QueryClientProvider } from '@tanstack/react-query'
|
|
import { Toaster } from 'sonner'
|
|
import { queryClient } from '@lib/query-client'
|
|
import { routeTree } from './routeTree.gen'
|
|
import '@/lib/i18n'
|
|
import './styles.css'
|
|
|
|
const initializeTheme = () => {
|
|
const stored = localStorage.getItem('theme-storage')
|
|
if (stored) {
|
|
const { state } = JSON.parse(stored)
|
|
const theme = state?.theme ?? 'dark'
|
|
const resolved =
|
|
theme === 'system'
|
|
? window.matchMedia('(prefers-color-scheme: dark)').matches
|
|
? 'dark'
|
|
: 'light'
|
|
: theme
|
|
document.documentElement.classList.add(resolved)
|
|
} else {
|
|
document.documentElement.classList.add('dark')
|
|
}
|
|
}
|
|
initializeTheme()
|
|
|
|
const router = createRouter({
|
|
routeTree,
|
|
context: {},
|
|
defaultPreload: 'intent',
|
|
scrollRestoration: true,
|
|
defaultStructuralSharing: true,
|
|
defaultPreloadStaleTime: 0,
|
|
})
|
|
|
|
declare module '@tanstack/react-router' {
|
|
interface Register {
|
|
router: typeof router
|
|
}
|
|
}
|
|
|
|
const rootElement = document.getElementById('app')
|
|
if (rootElement && !rootElement.innerHTML) {
|
|
const root = ReactDOM.createRoot(rootElement)
|
|
root.render(
|
|
<QueryClientProvider client={queryClient}>
|
|
<RouterProvider router={router} />
|
|
<Toaster position="top-right" richColors />
|
|
</QueryClientProvider>,
|
|
)
|
|
}
|