feat(web): migrate application shell to TanStack Start

- replace the legacy client-only Vite bootstrap with TanStack Router routes, Start SSR, and Nitro output

- compose the reusable layout, navigation, appearance, chats, and notifications blocks with application-owned data

- persist UI preferences through server functions and initialize theme, sidebar, and breakpoint state before hydration

- add React Query, hotkey, toaster, and responsive dashboard integration

- add application-owned Lingui configuration and catalogs, mount the runtime provider, and lazily enable I18nDevtool in development

- remove superseded HTML, main entry, theme provider, and application ESLint configuration
This commit is contained in:
Maofeng
2026-07-29 21:23:17 +08:00
parent 9e3f1d6b59
commit a9480ad9aa
32 changed files with 1555 additions and 309 deletions
+51
View File
@@ -0,0 +1,51 @@
import { lazy, Suspense, type PropsWithChildren } from "react"
import { I18nProvider, type LocaleDefinition } from "@workspace/i18n"
import { messages as englishMessages } from "@/locales/en/messages"
import { messages as simplifiedChineseMessages } from "@/locales/zh-Hans/messages"
const I18nDevtool = import.meta.env.DEV
? lazy(() =>
import("@workspace/i18n/devtool").then((module) => ({
default: module.I18nDevtool,
}))
)
: null
export const appLocales = [
{
label: "English",
locale: "en",
},
{
label: "简体中文",
locale: "zh-Hans",
},
] as const satisfies readonly LocaleDefinition[]
export type AppLocale = (typeof appLocales)[number]["locale"]
const appCatalogs = {
en: englishMessages,
"zh-Hans": simplifiedChineseMessages,
}
export interface AppI18nProviderProps extends PropsWithChildren {
locale?: AppLocale
}
export function AppI18nProvider({
children,
locale = "zh-Hans",
}: AppI18nProviderProps) {
return (
<I18nProvider catalogs={appCatalogs} locale={locale} locales={appLocales}>
{children}
{I18nDevtool && (
<Suspense fallback={null}>
<I18nDevtool dark={"ui\\:dark"} />
</Suspense>
)}
</I18nProvider>
)
}