Merge branch 'master' into master-nj

Keep Win7 flowchart SVG labels and bring over Mermaid syntax repair plus HTML chart color downleveling.

Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
董宏凯andCursor committed 2026-08-30 09:28:52 +08:00
commit 9afb9750e5
11 files changed
+729 -22

No files matched your search

@@ -1,6 +1,6 @@
import { useEffect, useState } from "react";
import { injectInPageAnchorHandler } from "@/core/utils/markdown";
import { prepareGeneratedHtml } from "@/core/utils/legacy-html-preview";
/**
* Sandboxed preview of a generated HTML document.
@@ -26,7 +26,7 @@ export function HtmlPreviewFrame({
const [url, setUrl] = useState<string>();
useEffect(() => {
const blob = new Blob([injectInPageAnchorHandler(html ?? "")], {
const blob = new Blob([prepareGeneratedHtml(html ?? "")], {
type: "text/html;charset=utf-8",
});
const objectUrl = URL.createObjectURL(blob);
@@ -97,9 +97,9 @@ import {
openMermaidSvgInNewTab,
renderMermaidToSvg,
} from "@/core/utils/mermaid";
import { prepareGeneratedHtml } from "@/core/utils/legacy-html-preview";
import {
createMarkdownAnchorResolver,
injectInPageAnchorHandler,
isInPageAnchor,
scrollToInPageAnchor,
} from "@/core/utils/markdown";
@@ -1422,7 +1422,9 @@ export function ArtifactFileDetail({
toast.error("文件内容为空,暂时无法在新窗口打开");
return;
}
const blob = new Blob([source], { type: "text/html;charset=utf-8" });
const blob = new Blob([prepareGeneratedHtml(source)], {
type: "text/html;charset=utf-8",
});
const url = URL.createObjectURL(blob);
window.open(url, "_blank", "noopener,noreferrer");
window.setTimeout(() => URL.revokeObjectURL(url), 60_000);
@@ -1460,7 +1462,7 @@ export function ArtifactFileDetail({
return (
<Artifact className={cn(className)}>
<ArtifactHeader className="relative flex flex-wrap items-center gap-3 px-4 py-3 pr-14">
<ArtifactHeader className="relative flex flex-wrap items-center gap-3 px-4 py-3 pr-14">
<div className="flex min-w-0 items-center gap-2">
<div
className={cn(
@@ -1554,8 +1556,8 @@ export function ArtifactFileDetail({
</div>
)}
</div>
<div className="flex min-w-0 w-full items-center justify-end gap-2 md:ml-auto md:w-auto">
<ArtifactActions className="bg-muted/45 min-w-0 max-w-full flex-wrap justify-end rounded-3xl border border-black/6 p-1 dark:border-white/8">
<div className="flex min-w-0 w-full items-center justify-end gap-2 md:ml-auto md:w-auto">
<ArtifactActions className="bg-muted/45 min-w-0 max-w-full flex-wrap justify-end rounded-3xl border border-black/6 p-1 dark:border-white/8">
{canPublishToKnowledge && (
<ArtifactAction
icon={isPublishingToKnowledge ? LoaderIcon : UploadCloudIcon}
@@ -1683,18 +1685,18 @@ export function ArtifactFileDetail({
}
}}
/>
</ArtifactActions>
</div>
{/* 文件目录会压缩详情区宽度。关闭入口固定在右上角,不再跟随可换行的
动作组,避免工具较多或面板较窄时最右侧按钮被裁掉。 */}
<ArtifactAction
className="bg-background/90 hover:bg-accent absolute top-3 right-3 z-10 border shadow-sm"
icon={XIcon}
label="收起文件面板"
onClick={() => (onClose ? onClose() : setOpen(false))}
tooltip="收起文件面板"
/>
</ArtifactHeader>
</ArtifactActions>
</div>
{/* 文件目录会压缩详情区宽度。关闭入口固定在右上角,不再跟随可换行的
动作组,避免工具较多或面板较窄时最右侧按钮被裁掉。 */}
<ArtifactAction
className="bg-background/90 hover:bg-accent absolute top-3 right-3 z-10 border shadow-sm"
icon={XIcon}
label="收起文件面板"
onClick={() => (onClose ? onClose() : setOpen(false))}
tooltip="收起文件面板"
/>
</ArtifactHeader>
<ArtifactContent
ref={artifactContentRef}
className="relative p-0"
@@ -2084,7 +2086,7 @@ export function ArtifactFilePreview({
// <meta charset> 就会中文乱码。与下方下载/新窗口打开的 blobType 保持一致。
// Intercept in-page anchor clicks so they scroll within the iframe instead
// of navigating the sandboxed blob: document (which blanks the frame).
const blob = new Blob([injectInPageAnchorHandler(content ?? "")], {
const blob = new Blob([prepareGeneratedHtml(content ?? "")], {
type: "text/html;charset=utf-8",
});
const url = URL.createObjectURL(blob);
@@ -143,6 +143,7 @@ export function MarkdownContent({
className={className}
remarkPlugins={remarkPlugins}
rehypePlugins={rehypePlugins}
mermaidConfig={streamdownPlugins.mermaidConfig}
components={components}
>
{content}