From 3bc8dfdf8cb5fc39cf811c344947ebaa2e187cf1 Mon Sep 17 00:00:00 2001 From: lizhixuan Date: Sun, 2 Mar 2025 11:42:08 +0800 Subject: [PATCH] feat: Enhance Styled Components configuration and prop handling - Add Babel plugin for styled-components with performance and naming optimizations - Integrate @emotion/is-prop-valid for improved prop filtering in StyleSheetManager - Update Antd Input components to use variant="borderless" instead of deprecated bordered prop - Add new dependencies for styled-components configuration --- electron.vite.config.ts | 19 +++++- package.json | 2 + src/renderer/src/App.tsx | 63 +++++++++++-------- .../components/Popups/AddAssistantPopup.tsx | 2 +- .../components/Popups/SelectModelPopup.tsx | 2 +- .../windows/mini/home/components/InputBar.tsx | 2 +- yarn.lock | 55 +++++++++++++++- 7 files changed, 114 insertions(+), 31 deletions(-) diff --git a/electron.vite.config.ts b/electron.vite.config.ts index 08708635..c5f0e76b 100644 --- a/electron.vite.config.ts +++ b/electron.vite.config.ts @@ -43,7 +43,24 @@ export default defineConfig({ plugins: [externalizeDepsPlugin()] }, renderer: { - plugins: [react(), ...visualizerPlugin('renderer')], + plugins: [ + react({ + babel: { + plugins: [ + [ + 'styled-components', + { + displayName: true, // 开发环境下启用组件名称 + fileName: false, // 不在类名中包含文件名 + pure: true, // 优化性能 + ssr: false // 不需要服务端渲染 + } + ] + ] + } + }), + ...visualizerPlugin('renderer') + ], resolve: { alias: { '@renderer': resolve('src/renderer/src'), diff --git a/package.json b/package.json index e3342288..a4827a5b 100644 --- a/package.json +++ b/package.json @@ -51,6 +51,7 @@ "@electron-toolkit/preload": "^3.0.0", "@electron-toolkit/utils": "^3.0.0", "@electron/notarize": "^2.5.0", + "@emotion/is-prop-valid": "^1.3.1", "@google/generative-ai": "^0.21.0", "@llm-tools/embedjs": "patch:@llm-tools/embedjs@npm%3A0.1.28#~/.yarn/patches/@llm-tools-embedjs-npm-0.1.28-8e4393fa2d.patch", "@llm-tools/embedjs-libsql": "^0.1.28", @@ -104,6 +105,7 @@ "antd": "^5.22.5", "applescript": "^1.0.0", "axios": "^1.7.3", + "babel-plugin-styled-components": "^2.1.4", "browser-image-compression": "^2.0.2", "dayjs": "^1.11.11", "dexie": "^4.0.8", diff --git a/src/renderer/src/App.tsx b/src/renderer/src/App.tsx index 84d877c6..3ea5c8de 100644 --- a/src/renderer/src/App.tsx +++ b/src/renderer/src/App.tsx @@ -1,9 +1,11 @@ import '@renderer/databases' +import isPropValid from '@emotion/is-prop-valid' import store, { persistor } from '@renderer/store' import { Provider } from 'react-redux' import { HashRouter, Route, Routes } from 'react-router-dom' import { PersistGate } from 'redux-persist/integration/react' +import { StyleSheetManager } from 'styled-components' import Sidebar from './components/app/Sidebar' import TopViewContainer from './components/TopView' @@ -19,35 +21,44 @@ import KnowledgePage from './pages/knowledge/KnowledgePage' import PaintingsPage from './pages/paintings/PaintingsPage' import SettingsPage from './pages/settings/SettingsPage' import TranslatePage from './pages/translate/TranslatePage' - function App(): JSX.Element { return ( - - - - - - - - {/* 添加导航处理组件 */} - - - } /> - } /> - } /> - } /> - } /> - } /> - } /> - } /> - - - - - - - + { + // 对于 HTML 元素,使用 isPropValid 检查 + if (typeof element === 'string') { + return isPropValid(prop) + } + // 对于自定义组件,允许所有非特殊属性通过 + return prop !== '$' && !prop.startsWith('$') + }}> + + + + + + + + {/* 添加导航处理组件 */} + + + } /> + } /> + } /> + } /> + } /> + } /> + } /> + } /> + + + + + + + + ) } diff --git a/src/renderer/src/components/Popups/AddAssistantPopup.tsx b/src/renderer/src/components/Popups/AddAssistantPopup.tsx index 0b785d3f..e33c534b 100644 --- a/src/renderer/src/components/Popups/AddAssistantPopup.tsx +++ b/src/renderer/src/components/Popups/AddAssistantPopup.tsx @@ -110,7 +110,7 @@ const PopupContainer: React.FC = ({ resolve }) => { allowClear autoFocus style={{ paddingLeft: 0 }} - bordered={false} + variant="borderless" size="middle" /> diff --git a/src/renderer/src/components/Popups/SelectModelPopup.tsx b/src/renderer/src/components/Popups/SelectModelPopup.tsx index e985c8ba..f7811dd5 100644 --- a/src/renderer/src/components/Popups/SelectModelPopup.tsx +++ b/src/renderer/src/components/Popups/SelectModelPopup.tsx @@ -295,7 +295,7 @@ const PopupContainer: React.FC = ({ model, resolve }) => { allowClear autoFocus style={{ paddingLeft: 0 }} - bordered={false} + variant="borderless" size="middle" onKeyDown={(e) => { // 防止上下键移动光标 diff --git a/src/renderer/src/windows/mini/home/components/InputBar.tsx b/src/renderer/src/windows/mini/home/components/InputBar.tsx index 4f218a48..cb29c6af 100644 --- a/src/renderer/src/windows/mini/home/components/InputBar.tsx +++ b/src/renderer/src/windows/mini/home/components/InputBar.tsx @@ -27,7 +27,7 @@ const InputBar = forwardRef( = 2" + checksum: 10c0/553f35f5feb4b51fda9c9aeef8a31c1b66f430687ab17830b7cdacfe7e93f912aef55bf59e402f4e0a1fa7ad039768ab3626512bbb9bf1f76fcc67ba47e7a56e + languageName: node + linkType: hard + "bail@npm:^2.0.0": version: 2.0.2 resolution: "bail@npm:2.0.2"