Set up React

This commit is contained in:
2025-08-29 15:01:19 +03:00
Unverified
parent 9f2af12374
commit a69cf6e5ec
7 changed files with 50 additions and 61 deletions
+7 -12
View File
@@ -7,18 +7,17 @@
<link rel="icon" href="./src/resources/images/logo.png" />
</head>
<body>
<div id="electron-title-bar">
<!-- <div id="electron-title-bar">
<div class="macos-padding"></div>
<div id="window-title"></div>
<!-- <div class="window-controls">
<div class="window-controls">
<mdui-button-icon icon="remove" id="window-minimize"></mdui-button-icon>
<mdui-button-icon icon="stack--outlined" id="window-restore" class="hidden"></mdui-button-icon>
<mdui-button-icon icon="ad--outlined" id="window-maximize"></mdui-button-icon>
<mdui-button-icon icon="close" id="window-close"></mdui-button-icon>
</div> -->
</div>
</div>
<div id="main-wrapper">
<!-- Login Form -->
<div id="login-form" class="auth-container">
<div class="auth-card fade-in">
<div class="auth-header">
@@ -62,8 +61,6 @@
</div>
</div>
</div>
<!-- Register Form -->
<div id="register-form" class="auth-container" style="display: none;">
<div class="auth-card fade-in">
<div class="auth-header">
@@ -123,8 +120,6 @@
</div>
</div>
</div>
<!-- Chat Interface -->
<div id="chat-interface" style="display: none;">
<div class="all-container">
<div class="chat-list" id="chat-list">
@@ -192,7 +187,6 @@
</div>
<div class="chat-messages" id="chat-messages">
<!-- Messages will be loaded here dynamically -->
</div>
<div class="chat-input-wrapper">
@@ -239,7 +233,6 @@
</div>
</mdui-dialog>
<!-- Profile Picture Cropper Dialog -->
<mdui-dialog id="cropper-dialog" close-on-overlay-click close-on-esc>
<div class="cropper-dialog-content">
<div class="cropper-header">
@@ -425,8 +418,10 @@
</div>
</div>
</div>
</mdui-dialog>
</mdui-dialog> -->
<script src="src/main.ts" type="module"></script>
<div id="root"></div>
<script src="src/main.tsx" type="module"></script>
</body>
</html>
-21
View File
@@ -1,21 +0,0 @@
/**
* @fileoverview Application entry point for FromChat frontend
* @description Main module that initializes all required components and styles
* @author Cursor
* @version 1.0.0
*/
import './resources/css/style.scss';
import "mdui/mdui.css";
import "./utils/material";
import "./chat/chat";
import "./userPanel/settings";
import "./userPanel/userpanel";
import "./core/init";
import "./userPanel/profile/profile";
import "./chat/contextMenu";
import "./chat/profileDialog";
import "./electron/electron";
import "./chat/panel";
import "./chat/dm";
+26
View File
@@ -0,0 +1,26 @@
/**
* @fileoverview Application entry point for FromChat frontend
* @description Main module that initializes all required components and styles
* @author Cursor
* @version 1.0.0
*/
import './resources/css/style.scss';
import "mdui/mdui.css";
import "./utils/material";
// import "./chat/chat";
// import "./userPanel/settings";
// import "./userPanel/userpanel";
// import "./core/init";
// import "./userPanel/profile/profile";
// import "./chat/contextMenu";
// import "./chat/profileDialog";
// import "./electron/electron";
// import "./chat/panel";
// import "./chat/dm";
import { createRoot } from 'react-dom/client';
import App from './ui/App';
// Initialize React app
createRoot(document.getElementById("root")!).render(<App />);
+3
View File
@@ -0,0 +1,3 @@
export default function App() {
return <></>
}
+5 -1
View File
@@ -17,7 +17,11 @@
"strict": true,
"erasableSyntaxOnly": true,
"noFallthroughCasesInSwitch": true,
"noUncheckedSideEffectImports": true
"noUncheckedSideEffectImports": true,
/* React JSX Support */
"jsx": "react-jsx",
"jsxImportSource": "react"
},
"include": ["src", "electron.d.ts"]
}
+2 -25
View File
@@ -2,33 +2,10 @@ import { defineConfig, PluginOption } from "vite";
import { createHtmlPlugin } from "vite-plugin-html";
import autoprefixer from "autoprefixer";
import electron from "vite-plugin-electron/simple";
function hmrAutoAcceptPlugin(): PluginOption {
const injectionLine = "if(import.meta.hot){import.meta.hot.accept()}";
const fileRegex = /\.(m?jsx?|tsx?)$/;
return {
name: "hmr-auto-accept",
apply: "serve",
enforce: "post",
transform(code, id) {
if (!fileRegex.test(id)) return null;
if (id.endsWith(".d.ts")) return null;
if (id.includes("node_modules")) return null;
if (id.startsWith("\0") || id.includes("virtual:") || id.includes("/@vite/")) return null;
if (code.includes("import.meta.hot.accept()")) return null;
if (!code.endsWith("\n")) {
code += "\n";
}
code += injectionLine;
return { code: code, map: null };
},
};
}
import react from "@vitejs/plugin-react";
const plugins: PluginOption[] = [
hmrAutoAcceptPlugin(),
react(),
createHtmlPlugin({
minify: {
collapseWhitespace: true,
+7 -2
View File
@@ -41,10 +41,15 @@
"vite": "^7.1.2",
"vite-plugin-electron": "^0.29.0",
"vite-plugin-electron-renderer": "^0.14.6",
"vite-plugin-html": "^3.2.2"
"vite-plugin-html": "^3.2.2",
"@vitejs/plugin-react": "^5.0.2",
"@types/react": "^19.1.12",
"@types/react-dom": "^19.1.9"
},
"dependencies": {
"mdui": "^2.1.4",
"tweetnacl": "^1.0.3"
"tweetnacl": "^1.0.3",
"react": "^19.1.1",
"react-dom": "^19.1.1"
}
}