diff --git a/apps/web/src/components/MermaidCodeBlock.tsx b/apps/web/src/components/MermaidCodeBlock.tsx index db684990..f36c2df6 100644 --- a/apps/web/src/components/MermaidCodeBlock.tsx +++ b/apps/web/src/components/MermaidCodeBlock.tsx @@ -1,9 +1,10 @@ import { useEffect, useState } from "react"; import { NodeViewContent, NodeViewWrapper, type NodeViewProps } from "@tiptap/react"; import { useTranslation } from "react-i18next"; -import { Check, CircleAlert, Code2, Copy, Maximize2, Workflow } from "lucide-react"; +import { Check, CircleAlert, Code2, Copy, Maximize2 } from "lucide-react"; import { MERMAID_THEME_PALETTES, useMermaidTheme } from "./ThemeProvider"; import { MermaidViewer } from "./MermaidViewer"; +import { Tooltip, TooltipContent, TooltipProvider, TooltipTrigger } from "@/components/ui/tooltip"; import { copyTextToClipboard } from "@/lib/clipboard"; import { renderMermaidWithFallback } from "@/lib/mermaid-renderer"; import { getOfficialMermaidThemeVariables } from "@/lib/mermaid-theme"; @@ -34,7 +35,7 @@ const loadBeautifulMermaid = () => { export const MermaidCodeBlock = ({ editor, node }: NodeViewProps) => { const { t } = useTranslation(); - const { mermaidRenderer, mermaidTheme, setMermaidRenderer } = useMermaidTheme(); + const { mermaidTheme } = useMermaidTheme(); const language = typeof node.attrs.language === "string" ? node.attrs.language.toLowerCase() : "plaintext"; const source = node.textContent.trim(); const isMermaid = language === "mermaid"; @@ -90,7 +91,6 @@ export const MermaidCodeBlock = ({ editor, node }: NodeViewProps) => { return renderedSvg; }); const renderPromise = renderMermaidWithFallback({ - renderer: mermaidRenderer, renderBeautiful, renderOfficial, }); @@ -114,7 +114,7 @@ export const MermaidCodeBlock = ({ editor, node }: NodeViewProps) => { cancelled = true; window.clearTimeout(timer); }; - }, [isMermaid, mermaidRenderer, mermaidTheme, source]); + }, [isMermaid, mermaidTheme, source]); return ( { data-language={language} > {isMermaid ? ( -
- - - {editor.isEditable && ( - - )} - {svg && ( - - )} -
+ +
+ + + + + + {t(copyState === "copied" ? "editorToolbar.codeCopied" : copyState === "error" ? "editorToolbar.codeCopyFailed" : "editorToolbar.copyCode")} + + + {editor.isEditable && ( + + + + + + {t(sourceVisible ? "editorToolbar.mermaidHideSource" : "editorToolbar.mermaidShowSource")} + + + )} + {svg && ( + + + + + {t("editorToolbar.mermaidOpenViewer")} + + )} +
+
) : ( - + + + + + + + {t(copyState === "copied" ? "editorToolbar.codeCopied" : copyState === "error" ? "editorToolbar.codeCopyFailed" : "editorToolbar.copyCode")} + + + )} {isMermaid && (
zoomRef.current?.changeZoom(1)} - > -