import React from 'react'; import ReactDOM from 'react-dom/client'; import {App as AntdApp} from 'antd'; import App from './App'; import {ThemeProvider} from './components/providers/ThemeProvider'; import {AppProvider} from './components/providers/AppProvider'; import {SettingsProvider} from './components/providers/SettingsProvider'; // 全局样式(包含 Tailwind 指令 + 主题扩展 + 重置) import './theme/globals.css'; ReactDOM.createRoot(document.getElementById('root')!).render( {/* AppProvider — 全局应用状态(平台/版本/登录态) */} {/* ThemeProvider 内部管理 ConfigProvider(亮色/暗色切换) */} {/* SettingsProvider — 集中管理设置项(存储路径等) */} {/* AntdApp 提供 message / notification / modal 的静态方法上下文 */} , ); // 仅在 Electron 环境中监听主进程消息(浏览器预览时跳过) import { safeIpcOn } from './utils/ipc'; safeIpcOn('main-process-message', (_event: unknown, message: unknown) => { console.log('[Main Process Message]:', message); }); // 渲染进程全局未捕获错误(兜底记录到日志文件) import {logger} from './utils/logger'; window.addEventListener('error', (event) => { logger.error('ui', 'Uncaught error (renderer)', event.error, { filename: event.filename, lineno: event.lineno, colno: event.colno, }); }); window.addEventListener('unhandledrejection', (event) => { const error = event.reason instanceof Error ? event.reason : new Error(String(event.reason)); logger.error('ui', 'Unhandled promise rejection (renderer)', error); });