blob: 716d5ad35044de0abb9787a9e28182270fcf9564 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
|
import { useLayoutEffect, useState } from 'react'
import { Outlet, useHref, useNavigate, type NavigateOptions } from 'react-router'
import { Provider } from '@react-spectrum/s2/Provider'
import BasicLayout from './components/layout-basic'
import { getInitialColorScheme, ThemeContext, themeStorageKey } from './theme'
// Configure the type of the `routerOptions` prop on all React Spectrum components.
declare module '@react-spectrum/s2/Provider' {
interface RouterConfig {
routerOptions: NavigateOptions
}
}
function App() {
const navigate = useNavigate()
const [colorScheme, setColorScheme] = useState(getInitialColorScheme)
useLayoutEffect(() => {
document.documentElement.dataset.theme = colorScheme
try {
localStorage.setItem(themeStorageKey, colorScheme)
} catch {
// Keep applying the theme even when browser storage is unavailable.
}
}, [colorScheme])
return (
<ThemeContext value={{ colorScheme, setColorScheme }}>
<Provider background="base" colorScheme={colorScheme} router={{ navigate, useHref }}>
<BasicLayout>
<Outlet />
</BasicLayout>
</Provider>
</ThemeContext>
)
}
export default App
|