From a4aab3fd4ee272bfa227dcaa7cf9b41e93119d34 Mon Sep 17 00:00:00 2001 From: Zhaker <0x149527@gmail.com> Date: Wed, 4 Jun 2025 18:28:59 +0800 Subject: [PATCH 1/4] fix: correct variable name obsidianVault in Obsidian export (#6796) --- src/renderer/src/utils/export.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/renderer/src/utils/export.ts b/src/renderer/src/utils/export.ts index cc4916857..ef52156fb 100644 --- a/src/renderer/src/utils/export.ts +++ b/src/renderer/src/utils/export.ts @@ -405,11 +405,11 @@ export const exportMarkdownToYuque = async (title: string, content: string) => { export const exportMarkdownToObsidian = async (attributes: any) => { try { // 从参数获取Vault名称 - const obsidianValut = attributes.vault + const obsidianVault = attributes.vault let obsidianFolder = attributes.folder || '' let isMarkdownFile = false - if (!obsidianValut) { + if (!obsidianVault) { window.message.error(i18n.t('chat.topics.export.obsidian_not_configured')) return } @@ -441,7 +441,7 @@ export const exportMarkdownToObsidian = async (attributes: any) => { filePath = obsidianFolder + fileName + '.md' } - let obsidianUrl = `obsidian://new?file=${encodeURIComponent(filePath)}&vault=${encodeURIComponent(obsidianValut)}&clipboard` + let obsidianUrl = `obsidian://new?file=${encodeURIComponent(filePath)}&vault=${encodeURIComponent(obsidianVault)}&clipboard` if (attributes.processingMethod === '3') { obsidianUrl += '&overwrite=true' From 345c4f096e8ed9e7516df3404ac2e1741b7698a8 Mon Sep 17 00:00:00 2001 From: fullex <106392080+0xfullex@users.noreply.github.com> Date: Wed, 4 Jun 2025 19:07:07 +0800 Subject: [PATCH 2/4] fix: transparent window flashing when show (#6755) * fix: avoid SelectionAssistant toolbar flashing * add comments --- src/main/index.ts | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/src/main/index.ts b/src/main/index.ts index d67a8f018..e53fbb4b4 100644 --- a/src/main/index.ts +++ b/src/main/index.ts @@ -6,7 +6,7 @@ import { app } from 'electron' import installExtension, { REACT_DEVELOPER_TOOLS, REDUX_DEVTOOLS } from 'electron-devtools-installer' import Logger from 'electron-log' -import { isDev } from './constant' +import { isDev, isWin } from './constant' import { registerIpc } from './ipc' import { configManager } from './services/ConfigManager' import mcpService from './services/MCPService' @@ -24,6 +24,16 @@ import { setUserDataDir } from './utils/file' Logger.initialize() +/** + * Disable chromium's window animations + * main purpose for this is to avoid the transparent window flashing when it is shown + * (especially on Windows for SelectionAssistant Toolbar) + * Know Issue: https://github.com/electron/electron/issues/12130#issuecomment-627198990 + */ +if (isWin) { + app.commandLine.appendSwitch('wm-window-animations-disabled') +} + // in production mode, handle uncaught exception and unhandled rejection globally if (!isDev) { // handle uncaught exception From 77eb70626c0a8ce3cf0000d3d16344571b08f023 Mon Sep 17 00:00:00 2001 From: fullex <0xfullex@gmail.com> Date: Tue, 3 Jun 2025 22:33:24 +0800 Subject: [PATCH 3/4] feat(SelectionAssistant): fullscreen game/presentation mode --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index ce04d03a3..7893decc8 100644 --- a/package.json +++ b/package.json @@ -92,7 +92,7 @@ "officeparser": "^4.1.1", "os-proxy-config": "^1.1.2", "proxy-agent": "^6.5.0", - "selection-hook": "^0.9.19", + "selection-hook": "^0.9.20", "tar": "^7.4.3", "turndown": "^7.2.0", "webdav": "^5.8.0", diff --git a/yarn.lock b/yarn.lock index e7ce553c4..7de5966dc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5667,7 +5667,7 @@ __metadata: remark-math: "npm:^6.0.0" rollup-plugin-visualizer: "npm:^5.12.0" sass: "npm:^1.88.0" - selection-hook: "npm:^0.9.19" + selection-hook: "npm:^0.9.20" shiki: "npm:^3.4.2" string-width: "npm:^7.2.0" styled-components: "npm:^6.1.11" @@ -16400,13 +16400,13 @@ __metadata: languageName: node linkType: hard -"selection-hook@npm:^0.9.19": - version: 0.9.19 - resolution: "selection-hook@npm:0.9.19" +"selection-hook@npm:^0.9.20": + version: 0.9.20 + resolution: "selection-hook@npm:0.9.20" dependencies: node-gyp: "npm:latest" node-gyp-build: "npm:^4.8.4" - checksum: 10c0/e90889b5b76e96b45a7c04429621346b5296e41d821e57b72178e6f93e622298288cd9586bd79273320fd26f98cc7ffb44496e0b66430b6dfcdc9b875c2c0d3f + checksum: 10c0/2508fc5093a735467bd7082ae84432e2b7d8675d194f9bcf74dab755a63f72ffcbbeee2784297402fbb295faddd590b0333ca290b37047d8af25ed584cd04e60 languageName: node linkType: hard From d3e51ffb1c9f00515a229ae9f865dd1023571930 Mon Sep 17 00:00:00 2001 From: one Date: Wed, 4 Jun 2025 19:56:31 +0800 Subject: [PATCH 4/4] fix: codeblock overflow in bubble style (#6773) * refactor: revert CodeBlockView style change * fix: codeblock width and overflow * refactor: improve CodeEditor border * revert: context-menu-container width for message group --- src/renderer/src/assets/styles/container.scss | 4 ++++ src/renderer/src/assets/styles/markdown.scss | 7 ++++++- .../src/components/CodeBlockView/CodePreview.tsx | 6 ++---- src/renderer/src/components/CodeBlockView/index.tsx | 9 +++------ src/renderer/src/components/CodeEditor/index.tsx | 5 ++--- src/renderer/src/pages/home/Messages/Message.tsx | 2 +- src/renderer/src/pages/home/Messages/MessageSelect.tsx | 1 + 7 files changed, 19 insertions(+), 15 deletions(-) diff --git a/src/renderer/src/assets/styles/container.scss b/src/renderer/src/assets/styles/container.scss index aa05ce010..ab5e8a7de 100644 --- a/src/renderer/src/assets/styles/container.scss +++ b/src/renderer/src/assets/styles/container.scss @@ -10,3 +10,7 @@ width: 100%; } } + +.context-menu-container { + max-width: 100%; +} diff --git a/src/renderer/src/assets/styles/markdown.scss b/src/renderer/src/assets/styles/markdown.scss index 86318ada3..569fa9f1d 100644 --- a/src/renderer/src/assets/styles/markdown.scss +++ b/src/renderer/src/assets/styles/markdown.scss @@ -306,9 +306,14 @@ mjx-container { /* CodeMirror 相关样式 */ .cm-editor { + border-radius: 5px; + + &.cm-focused { + outline: none; + } + .cm-scroller { font-family: var(--code-font-family); - padding: 1px; border-radius: 5px; .cm-gutters { diff --git a/src/renderer/src/components/CodeBlockView/CodePreview.tsx b/src/renderer/src/components/CodeBlockView/CodePreview.tsx index 1e2480078..c0ebcd9a7 100644 --- a/src/renderer/src/components/CodeBlockView/CodePreview.tsx +++ b/src/renderer/src/components/CodeBlockView/CodePreview.tsx @@ -231,7 +231,6 @@ const ContentContainer = styled.div<{ $wrap: boolean $fadeIn: boolean }>` - display: block; position: relative; overflow: auto; border: 0.5px solid transparent; @@ -239,12 +238,11 @@ const ContentContainer = styled.div<{ margin-top: 0; .shiki { - display: flex; - min-width: 100%; padding: 1em; code { - display: block; + display: flex; + flex-direction: column; .line { display: block; diff --git a/src/renderer/src/components/CodeBlockView/index.tsx b/src/renderer/src/components/CodeBlockView/index.tsx index 6d404dada..944e6f66e 100644 --- a/src/renderer/src/components/CodeBlockView/index.tsx +++ b/src/renderer/src/components/CodeBlockView/index.tsx @@ -249,8 +249,8 @@ const CodeBlockView: React.FC = ({ children, language, onSave }) => { } const CodeBlockWrapper = styled.div<{ $isInSpecialView: boolean }>` - /* FIXME: 在 bubble style 中撑开一些宽度*/ position: relative; + width: 100%; .code-toolbar { background-color: ${(props) => (props.$isInSpecialView ? 'transparent' : 'var(--color-background-mute)')}; @@ -285,13 +285,10 @@ const CodeHeader = styled.div<{ $isInSpecialView: boolean }>` const SplitViewWrapper = styled.div` display: flex; - width: 100%; > * { - flex: 1 1 0; - width: 0; - min-width: 0; - max-width: 100%; + flex: 1 1 auto; + width: 100%; } ` diff --git a/src/renderer/src/components/CodeEditor/index.tsx b/src/renderer/src/components/CodeEditor/index.tsx index 956a66b0f..c10fc5e8a 100644 --- a/src/renderer/src/components/CodeEditor/index.tsx +++ b/src/renderer/src/components/CodeEditor/index.tsx @@ -224,11 +224,10 @@ const CodeEditor = ({ ...customBasicSetup // override basicSetup }} style={{ + ...style, fontSize: `${fontSize - 1}px`, border: '0.5px solid transparent', - borderRadius: '5px', - marginTop: 0, - ...style + marginTop: 0 }} /> ) diff --git a/src/renderer/src/pages/home/Messages/Message.tsx b/src/renderer/src/pages/home/Messages/Message.tsx index 6f0a362b9..864815045 100644 --- a/src/renderer/src/pages/home/Messages/Message.tsx +++ b/src/renderer/src/pages/home/Messages/Message.tsx @@ -7,6 +7,7 @@ import { useMessageStyle, useSettings } from '@renderer/hooks/useSettings' import { EVENT_NAMES, EventEmitter } from '@renderer/services/EventService' import { getMessageModelId } from '@renderer/services/MessagesService' import { getModelUniqId } from '@renderer/services/ModelService' +import { estimateMessageUsage } from '@renderer/services/TokenService' import { Assistant, Topic } from '@renderer/types' import type { Message, MessageBlock } from '@renderer/types/newMessage' import { classNames } from '@renderer/utils' @@ -21,7 +22,6 @@ import MessageErrorBoundary from './MessageErrorBoundary' import MessageHeader from './MessageHeader' import MessageMenubar from './MessageMenubar' import MessageTokens from './MessageTokens' -import { estimateMessageUsage } from '@renderer/services/TokenService' interface Props { message: Message diff --git a/src/renderer/src/pages/home/Messages/MessageSelect.tsx b/src/renderer/src/pages/home/Messages/MessageSelect.tsx index 88ffeb7f4..d3d67fb7f 100644 --- a/src/renderer/src/pages/home/Messages/MessageSelect.tsx +++ b/src/renderer/src/pages/home/Messages/MessageSelect.tsx @@ -59,6 +59,7 @@ const CheckboxWrapper = styled.div` const MessageContent = styled.div<{ isMultiSelectMode: boolean }>` flex: 1; + min-width: 0; ${(props) => props.isMultiSelectMode && 'margin-left: 8px;'} `