feat(a11y): add a11y infrastructure — skip-nav, announcer, touch CSS, eslint-jsx-a11y

This commit is contained in:
DrSmoothl
2026-03-05 21:57:27 +08:00
parent 34bd115fa1
commit c12d1ca42a
11 changed files with 372 additions and 43 deletions

View File

@@ -1,17 +1,19 @@
import { StrictMode, useEffect, useState } from 'react'
import { createRoot } from 'react-dom/client'
import { RouterProvider } from '@tanstack/react-router'
import './index.css'
import './i18n'
import { router } from './router'
import { AnnouncerProvider } from './components/ui/announcer'
import { AssetStoreProvider } from './components/asset-provider'
import { ThemeProvider } from './components/theme-provider'
import { AnimationProvider } from './components/animation-provider'
import { ThemeProvider } from './components/theme-provider'
import { TourProvider, TourRenderer } from './components/tour'
import { Toaster } from './components/ui/toaster'
import { ErrorBoundary } from './components/error-boundary'
import { BackendSetupWizard } from './components/electron/BackendSetupWizard'
import { Toaster } from './components/ui/toaster'
import { isElectron } from './lib/runtime'
import { router } from './router'
function ElectronShell() {
const [isFirstLaunch, setIsFirstLaunch] = useState(false)
@@ -26,18 +28,20 @@ function ElectronShell() {
createRoot(document.getElementById('root')!).render(
<StrictMode>
<ErrorBoundary>
<AssetStoreProvider>
<ThemeProvider defaultTheme="system">
<AnimationProvider>
<TourProvider>
{isElectron() && <ElectronShell />}
<RouterProvider router={router} />
<TourRenderer />
<Toaster />
</TourProvider>
</AnimationProvider>
</ThemeProvider>
</AssetStoreProvider>
<AnnouncerProvider>
<AssetStoreProvider>
<ThemeProvider defaultTheme="system">
<AnimationProvider>
<TourProvider>
{isElectron() && <ElectronShell />}
<RouterProvider router={router} />
<TourRenderer />
<Toaster />
</TourProvider>
</AnimationProvider>
</ThemeProvider>
</AssetStoreProvider>
</AnnouncerProvider>
</ErrorBoundary>
</StrictMode>
)