- Restyle: ink 'blueprint' surfaces + IBM Plex Mono / Major Mono Display, hairline borders, restrained motion, 12px radii. Fabric purple accent kept. Layout unchanged. - Brand override (build-time VITE_ only): VITE_APP_NAME / VITE_LOGO_URL / VITE_FAVICON_URL via src/lib/brand.ts (applyBrand in main.tsx); login wordmark/logo + title + favicon. .env.example documented. - dm x-type: create modal participant becomes single-select (radio) for dm and forces private; member right-click menu gains 'Create new DM channel' (non-unique, fresh channel each time). - Channels sidebar grouped by x-type with group headers. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
25 lines
783 B
TypeScript
25 lines
783 B
TypeScript
import { StrictMode } from 'react'
|
|
import { createRoot } from 'react-dom/client'
|
|
import { BrowserRouter, HashRouter } from 'react-router-dom'
|
|
import './index.css'
|
|
import App from './App.tsx'
|
|
import { AuthProvider } from './auth/AuthContext'
|
|
import { applyBrand } from './lib/brand'
|
|
|
|
applyBrand()
|
|
|
|
// The packaged desktop app loads the bundled SPA over file://, where the
|
|
// History API has no server to back path routing — use HashRouter there.
|
|
// The web build (served over http behind nginx) keeps clean BrowserRouter URLs.
|
|
const Router = window.location.protocol === 'file:' ? HashRouter : BrowserRouter
|
|
|
|
createRoot(document.getElementById('root')!).render(
|
|
<StrictMode>
|
|
<Router>
|
|
<AuthProvider>
|
|
<App />
|
|
</AuthProvider>
|
|
</Router>
|
|
</StrictMode>,
|
|
)
|