remons-render-markdown 1.0.0-beta.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/MermaidRenderer-DupOXIdE.js +1889 -0
- package/dist/MermaidRenderer-DupOXIdE.js.map +1 -0
- package/dist/RenderMarkdown-TzdhCUFl.js +4521 -0
- package/dist/RenderMarkdown-TzdhCUFl.js.map +1 -0
- package/dist/components/CustomBackTop/index.d.ts +16 -0
- package/dist/components/CustomDropdown/index.d.ts +31 -0
- package/dist/components/CustomMessage/index.d.ts +26 -0
- package/dist/components/CustomModal/index.d.ts +28 -0
- package/dist/components/CustomTooltip/index.d.ts +20 -0
- package/dist/components/Empty/index.d.ts +5 -0
- package/dist/components/MermaidRenderer/index.d.ts +16 -0
- package/dist/components/MermaidRenderer/useMermaidRender.d.ts +18 -0
- package/dist/components/MermaidRenderer/usePanzoom.d.ts +17 -0
- package/dist/components/RenderMarkdown/index.d.ts +12 -0
- package/dist/components/RenderMarkdown/utils/render-markdown/index.d.ts +11 -0
- package/dist/components/RenderMarkdown/utils/render-markdown/render-alert.d.ts +4 -0
- package/dist/components/RenderMarkdown/utils/render-markdown/render-tab.d.ts +7 -0
- package/dist/hooks/useLoadMermaid.d.ts +10 -0
- package/dist/hooks/useTheme.d.ts +16 -0
- package/dist/index.css +2 -0
- package/dist/index.d.ts +4 -0
- package/dist/index.mjs +7 -0
- package/dist/index.mjs.map +1 -0
- package/dist/main.d.ts +2 -0
- package/dist/utils/cdn.d.ts +5 -0
- package/dist/utils/download.d.ts +21 -0
- package/dist/utils/driver.d.ts +19 -0
- package/dist/utils/preload.d.ts +2 -0
- package/package.json +83 -0
- package/readme.md +36 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MermaidRenderer-DupOXIdE.js","names":[],"sources":["../src/utils/download.ts","../src/hooks/useTheme.ts","../src/components/CustomTooltip/index.module.less","../src/components/CustomTooltip/index.tsx","../src/components/CustomDropdown/index.module.less","../src/components/CustomDropdown/index.tsx","../src/components/CustomModal/index.module.less","../src/components/CustomModal/index.tsx","../src/utils/cdn.ts","../src/utils/preload.ts","../src/hooks/useLoadMermaid.ts","../src/components/MermaidRenderer/useMermaidRender.ts","../node_modules/.store/@panzoom+panzoom@4.6.2/node_modules/@panzoom/panzoom/dist/panzoom.es.js","../src/components/MermaidRenderer/usePanzoom.ts","../src/components/MermaidRenderer/index.module.less","../src/assets/svg/mermaid.svg","../node_modules/.store/driver.js@1.8.0/node_modules/driver.js/dist/driver.js.mjs","../src/utils/driver.ts","../src/components/MermaidRenderer/index.tsx"],"sourcesContent":["import customMessage from '@/components/CustomMessage';\r\n\r\n/**\r\n * 通用下载:将 Blob 或 URL 作为文件下载\r\n * @param {Blob|string} data - Blob 对象或 URL 字符串\r\n * @param {string} filename - 下载文件名\r\n * @param {object} [options] - 可选配置\r\n * @param {string} [options.type] - MIME 类型(data 为 Blob 时自动识别)\r\n */\r\nexport function downloadFile(data: Blob | string, filename: string) {\r\n let url;\r\n if (data instanceof Blob) {\r\n url = URL.createObjectURL(data);\r\n } else if (typeof data === \"string\") {\r\n url = data;\r\n } else {\r\n customMessage.error(\"不支持的下载格式\");\r\n return;\r\n }\r\n\r\n const a = document.createElement(\"a\");\r\n a.href = url;\r\n a.download = filename;\r\n a.click();\r\n URL.revokeObjectURL(url);\r\n customMessage.success(`${filename} 已下载`);\r\n}\r\n\r\n/**\r\n * 下载 SVG 字符串为 .svg 文件\r\n * @param {string} svgStr - SVG 内容\r\n * @param {string} filename - 文件名(不含后缀)\r\n */\r\nexport function downloadSVG(svgStr: string, filename = \"image\") {\r\n const blob = new Blob([svgStr], { type: \"image/svg+xml;charset=utf-8\" });\r\n downloadFile(blob, `${filename}.svg`);\r\n}\r\n\r\n/**\r\n * 将 SVG 渲染为 PNG 并下载\r\n * @param {string} svgStr - SVG 内容\r\n * @param {string} filename - 文件名(不含后缀)\r\n * @param {number} [scale=2] - 缩放倍数(提高清晰度)\r\n */\r\nexport function downloadSVGAsPNG(svgStr: string, filename = \"image\", scale = 2) {\r\n const { w, h } = getSvgSize(svgStr);\r\n const encoded = btoa(unescape(encodeURIComponent(svgStr)));\r\n const url = `data:image/svg+xml;base64,${encoded}`;\r\n\r\n const img = new Image();\r\n img.crossOrigin = \"anonymous\";\r\n img.src = url;\r\n img.onload = () => {\r\n const canvas = document.createElement(\"canvas\");\r\n canvas.width = Math.max(1, Math.round(w * scale));\r\n canvas.height = Math.max(1, Math.round(h * scale));\r\n const ctx = canvas.getContext(\"2d\")!;\r\n ctx.fillStyle = \"#ffffff\";\r\n ctx.fillRect(0, 0, canvas.width, canvas.height);\r\n ctx.scale(scale, scale);\r\n ctx.drawImage(img, 0, 0, w, h);\r\n canvas.toBlob((pngBlob) => {\r\n if (!pngBlob) {\r\n customMessage.error(\"PNG 生成失败\");\r\n return;\r\n }\r\n downloadFile(pngBlob, `${filename}.png`);\r\n }, \"image/png\");\r\n };\r\n img.onerror = () => {\r\n customMessage.error(\"PNG 生成失败:图片加载失败\");\r\n };\r\n}\r\n\r\n/**\r\n * 更健壮的 SVG 尺寸解析器\r\n */\r\nfunction getSvgSize(svgStr: string) {\r\n // 1. 尝试提取 viewBox (这是最准确的“相对比例”来源)\r\n const vbMatch = svgStr.match(/viewBox=[\"']?([^\"']+)[\"']/i);\r\n let vbW = 0, vbH = 0;\r\n \r\n if (vbMatch) {\r\n // 处理逗号或空格分隔的情况: \"0 0 100 100\" 或 \"0,0,100,100\"\r\n const parts = vbMatch[1].split(/[\\s,]+/).map(Number);\r\n if (parts.length === 4) {\r\n vbW = parts[2];\r\n vbH = parts[3];\r\n }\r\n }\r\n\r\n // 2. 尝试提取 width/height 属性\r\n // 改进正则:支持单引号、支持单位前的空格、支持百分号\r\n const wMatch = svgStr.match(/width=[\"']?\\s*([\\d.]+)\\s*(?:px|pt|cm|mm|in|%)*[\"']/i);\r\n const hMatch = svgStr.match(/height=[\"']?\\s*([\\d.]+)\\s*(?:px|pt|cm|mm|in|%)*/i);\r\n\r\n const w = wMatch ? parseFloat(wMatch[1]) : 0;\r\n const h = hMatch ? parseFloat(hMatch[1]) : 0;\r\n\r\n // 3. 智能修正逻辑\r\n \r\n // 情况 A: 如果宽高都没读到,直接使用 viewBox\r\n if (vbW && vbH) {\r\n return { w: vbW, h: vbH };\r\n }\r\n\r\n // 情况 C: 如果一切正常,返回解析值;如果还是不行,给个默认值防止崩溃\r\n return { \r\n w: w || vbW || 800, \r\n h: h || vbH || 600 \r\n };\r\n}","import React, { createContext, useContext, useState, useEffect, useCallback, useMemo } from \"react\";\n\nexport interface UseThemeReturn {\n theme: string;\n mode: string;\n isDark: boolean;\n setMode: (mode: string) => void;\n}\n\nexport interface ThemeProviderProps {\n children: React.ReactNode;\n}\n\nconst THEME_KEY = \"app-theme-mode\";\nconst THEME_LIGHT = \"light\";\nconst THEME_DARK = \"dark\";\nconst THEME_SYSTEM = \"system\";\n\nfunction getSystemTheme() {\n if (typeof window === \"undefined\") return THEME_LIGHT;\n return window.matchMedia(\"(prefers-color-scheme: dark)\").matches ? THEME_DARK : THEME_LIGHT;\n}\n\nfunction getStoredMode() {\n try {\n const stored = localStorage.getItem(THEME_KEY);\n if (stored === THEME_LIGHT || stored === THEME_DARK || stored === THEME_SYSTEM) return stored;\n } catch {}\n return THEME_SYSTEM;\n}\n\nfunction resolveTheme(mode: string) {\n return mode === THEME_SYSTEM ? getSystemTheme() : mode;\n}\n\nfunction applyTheme(theme: string) {\n if (typeof document === \"undefined\") return;\n document.documentElement.dataset.theme = theme;\n}\n\n// 初始化脚本:在 React 加载前执行,防 FOUC(也内联在 index.ejs 中)\nif (typeof window !== \"undefined\") {\n const mode = getStoredMode();\n const theme = resolveTheme(mode);\n applyTheme(theme);\n}\n\nconst ThemeContext = createContext<UseThemeReturn | null>(null);\n\nexport function ThemeProvider({ children }: ThemeProviderProps) {\n const [mode, setModeState] = useState(() => getStoredMode());\n const [theme, setTheme] = useState(() => resolveTheme(mode));\n\n const setMode = useCallback((newMode: string) => {\n setModeState(newMode);\n try {\n localStorage.setItem(THEME_KEY, newMode);\n window.dispatchEvent(new Event(\"storage\"));\n } catch {}\n }, []);\n\n useEffect(() => {\n const resolved = resolveTheme(mode);\n setTheme(resolved);\n applyTheme(resolved);\n }, [mode]);\n\n useEffect(() => {\n if (mode !== THEME_SYSTEM) return;\n const mq = window.matchMedia(\"(prefers-color-scheme: dark)\");\n const handler = (e: MediaQueryListEvent) => {\n const t = e.matches ? THEME_DARK : THEME_LIGHT;\n setTheme(t);\n applyTheme(t);\n };\n mq.addEventListener(\"change\", handler);\n return () => mq.removeEventListener(\"change\", handler);\n }, [mode]);\n\n useEffect(() => {\n const handleStorage = () => {\n const newMode = getStoredMode();\n if (newMode !== mode) {\n setModeState(newMode);\n }\n };\n window.addEventListener(\"storage\", handleStorage);\n\n const observer = new MutationObserver(() => {\n const currentTheme = document.documentElement.dataset.theme;\n if (currentTheme && currentTheme !== theme) {\n setTheme(currentTheme);\n const newMode = getStoredMode();\n if (newMode !== mode) {\n setModeState(newMode);\n }\n }\n });\n observer.observe(document.documentElement, { attributes: true, attributeFilter: [\"data-theme\"] });\n\n return () => {\n window.removeEventListener(\"storage\", handleStorage);\n observer.disconnect();\n };\n }, [mode, theme]);\n\n const isDark = theme === THEME_DARK;\n const value = useMemo(() => ({ theme, mode, isDark, setMode }), [theme, mode, isDark, setMode]);\n\n return React.createElement(ThemeContext.Provider, { value }, children);\n}\n\nexport function useTheme(): UseThemeReturn {\n const ctx = useContext(ThemeContext);\n if (!ctx) throw new Error(\"useTheme must be used within a ThemeProvider\");\n return ctx;\n}\n\nexport { THEME_LIGHT, THEME_DARK, THEME_SYSTEM };\n","/**\n * Tooltip 组件样式\n */\n\n.tooltip {\n display: inline-block;\n}\n\n.tooltip-trigger {\n display: inline-block;\n cursor: pointer;\n}\n\n.tooltip-inner {\n position: fixed;\n transform: translate(-50%, -100%) translateY(0px);\n padding: 6px 10px;\n background: rgba(0, 0, 0, 0.75);\n color: #fff;\n font-size: 12px;\n line-height: 1.5;\n border-radius: 4px;\n white-space: nowrap;\n z-index: 1070;\n opacity: 0;\n transition: opacity 0.2s;\n pointer-events: none;\n margin-left: -5px;\n}\n\n.tooltip-inner-visible {\n opacity: 1;\n}\n\n.tooltip-content {\n max-width: 250px;\n overflow: hidden;\n text-overflow: ellipsis;\n white-space: nowrap;\n}\n\n.tooltip-arrow {\n position: absolute;\n top: 100%;\n left: 50%;\n transform: translateX(-50%);\n width: 0;\n height: 0;\n border: 5px solid transparent;\n border-top-color: rgba(0, 0, 0, 0.75);\n}\n","import React, { useState, useRef, useEffect, ReactNode } from 'react';\nimport { createPortal } from 'react-dom';\nimport classNames from 'classnames/bind';\nimport style from './index.module.less';\n\nconst cx = classNames.bind(style);\n\n/**\n * Tooltip 组件的属性接口\n */\ninterface TooltipProps {\n /** 提示文本 */\n title: string;\n /** 子元素 */\n children: ReactNode;\n /** 是否可见(受控模式) */\n visible?: boolean;\n /** 可见状态改变时的回调 */\n onVisibleChange?: (visible: boolean) => void;\n}\n\n/**\n * 自定义 Tooltip 组件\n * 使用 Portal 将提示框渲染到 body,避免被父元素 overflow 裁剪\n */\nconst CustomTooltip: React.FC<TooltipProps> = ({ title, children, visible: controlledVisible, onVisibleChange }) => {\n const [internalVisible, setInternalVisible] = useState(false);\n const timerRef = useRef<number | null>(null);\n const triggerRef = useRef<HTMLDivElement>(null);\n const [position, setPosition] = useState({ top: 0, left: 0 });\n\n // 使用受控或非受控模式\n const isVisible = controlledVisible !== undefined ? controlledVisible : internalVisible;\n\n /**\n * 计算提示框位置\n */\n const updatePosition = () => {\n if (triggerRef.current) {\n const rect = triggerRef.current.getBoundingClientRect();\n setPosition({\n top: rect.top - 8,\n left: rect.left + rect.width / 2,\n });\n }\n };\n\n /**\n * 显示提示框\n */\n const show = () => {\n updatePosition();\n setInternalVisible(true);\n onVisibleChange?.(true);\n };\n\n /**\n * 隐藏提示框\n */\n const hide = () => {\n setInternalVisible(false);\n onVisibleChange?.(false);\n };\n\n /**\n * 鼠标进入时延迟显示\n */\n const handleMouseEnter = () => {\n if (timerRef.current) {\n window.clearTimeout(timerRef.current);\n }\n timerRef.current = window.setTimeout(() => {\n show();\n }, 150);\n };\n\n /**\n * 鼠标离开时延迟隐藏\n */\n const handleMouseLeave = () => {\n if (timerRef.current) {\n window.clearTimeout(timerRef.current);\n timerRef.current = null;\n }\n hide();\n };\n\n // 监听 visibility 变化,更新位置\n useEffect(() => {\n if (!isVisible) return;\n\n const handleResize = () => updatePosition();\n const handleScroll = () => updatePosition();\n\n window.addEventListener('resize', handleResize, { passive: true });\n window.addEventListener('scroll', handleScroll, { passive: true });\n\n // 初始更新位置\n updatePosition();\n\n return () => {\n window.removeEventListener('resize', handleResize);\n window.removeEventListener('scroll', handleScroll);\n };\n }, [isVisible]);\n\n // 清理定时器\n useEffect(() => {\n return () => {\n if (timerRef.current) {\n window.clearTimeout(timerRef.current);\n }\n };\n }, []);\n\n // 提示框内容,使用 Portal 渲染到 body\n const tooltipContent = isVisible && title ? createPortal(\n <div\n className={cx('tooltip-inner', 'tooltip-inner-visible')}\n style={{ top: position.top, left: position.left }}\n >\n <span className={cx('tooltip-content')}>{title}</span>\n <span className={cx('tooltip-arrow')} />\n </div>,\n document.body\n ) : null;\n\n return (\n <div\n ref={triggerRef}\n className={cx('tooltip')}\n onMouseEnter={handleMouseEnter}\n onMouseLeave={handleMouseLeave}\n >\n {/* 触发元素 */}\n <div className={cx('tooltip-trigger')}>\n {children}\n </div>\n\n {/* 提示框通过 Portal 渲染 */}\n {tooltipContent}\n </div>\n );\n};\n\nexport default CustomTooltip;\n","/**\n * Dropdown 组件样式\n */\n\n.dropdown {\n position: relative;\n display: inline-block;\n}\n\n.dropdown-trigger {\n display: inline-block;\n cursor: pointer;\n}\n\n.dropdown-menu {\n position: absolute;\n top: 100%;\n right: 0;\n min-width: 120px;\n background: #fff;\n border-radius: 6px;\n box-shadow: 0 4px 12px rgba(0, 0, 0, 0.15);\n padding: 4px 0;\n z-index: 1050;\n opacity: 0;\n transform: translateY(8px);\n transition: opacity 0.2s, transform 0.2s;\n margin-top: 4px;\n}\n\n.dropdown-menu-visible {\n opacity: 1;\n transform: translateY(0);\n}\n\n.dropdown-item {\n padding: 8px 16px;\n font-size: 14px;\n color: #333;\n cursor: pointer;\n transition: background-color 0.2s;\n\n &:hover {\n background-color: #f5f5f5;\n }\n\n &:active {\n background-color: #e8e8e8;\n }\n}\n","import React, { useState, useRef, useEffect, ReactNode } from 'react';\nimport classNames from 'classnames/bind';\nimport style from './index.module.less';\n\nconst cx = classNames.bind(style);\n\n/**\n * 下拉菜单项接口\n */\ninterface DropdownItem {\n /** 选项的唯一标识 */\n key: string;\n /** 选项显示的标签文本 */\n label: ReactNode;\n}\n\n/**\n * Dropdown 组件的属性接口\n */\ninterface DropdownProps {\n /** 下拉菜单项列表 */\n items: DropdownItem[];\n /** 子元素(触发元素) */\n children: ReactNode;\n /** 点击选项时的回调 */\n onClick: ({ key }: { key: string }) => void;\n /** 自定义 className */\n className?: string;\n}\n\n/**\n * 自定义 Dropdown 组件\n * 点击触发元素显示下拉菜单,选择后关闭\n */\nconst CustomDropdown: React.FC<DropdownProps> = ({ items, children, onClick, className = '' }) => {\n const [visible, setVisible] = useState(false);\n const dropdownRef = useRef<HTMLDivElement>(null);\n\n /**\n * 切换下拉菜单显示状态\n */\n const toggleVisible = () => {\n setVisible((prev) => !prev);\n };\n\n /**\n * 关闭下拉菜单\n */\n const close = () => {\n setVisible(false);\n };\n\n /**\n * 处理选项点击\n */\n const handleItemClick = (item: DropdownItem) => {\n onClick({ key: item.key });\n close();\n };\n\n // 点击外部区域关闭下拉菜单\n useEffect(() => {\n /**\n * 处理文档点击事件\n */\n const handleDocumentClick = (event: MouseEvent) => {\n if (dropdownRef.current && !dropdownRef.current.contains(event.target as Node)) {\n close();\n }\n };\n\n if (visible) {\n document.addEventListener('mousedown', handleDocumentClick);\n }\n\n return () => {\n document.removeEventListener('mousedown', handleDocumentClick);\n };\n }, [visible]);\n\n return (\n <div\n ref={dropdownRef}\n className={cx('dropdown', className)}\n >\n {/* 触发元素 */}\n <div className={cx('dropdown-trigger')} onClick={toggleVisible}>\n {children}\n </div>\n\n {/* 下拉菜单 */}\n {visible && (\n <div className={cx('dropdown-menu', 'dropdown-menu-visible')}>\n {items.map((item) => (\n <div\n key={item.key}\n className={cx('dropdown-item')}\n onClick={() => handleItemClick(item)}\n >\n {item.label}\n </div>\n ))}\n </div>\n )}\n </div>\n );\n};\n\nexport default CustomDropdown;\n","/**\n * Modal 组件样式\n */\n\n.modal-mask {\n position: fixed;\n top: 0;\n right: 0;\n bottom: 0;\n left: 0;\n z-index: 1000;\n display: flex;\n align-items: center;\n justify-content: center;\n background-color: rgba(0, 0, 0, 0.45);\n opacity: 0;\n transition: opacity 0.3s;\n}\n\n.modal-mask-visible {\n opacity: 1;\n}\n\n.modal {\n background: #fff;\n border-radius: 8px;\n box-shadow: 0 6px 16px rgba(0, 0, 0, 0.15);\n display: flex;\n flex-direction: column;\n max-height: 90vh;\n transform: scale(0.9);\n transition: transform 0.3s;\n}\n\n.modal-mask-visible .modal {\n transform: scale(1);\n}\n\n.modal-header {\n display: flex;\n align-items: center;\n justify-content: space-between;\n padding: 10px;\n border-bottom: 1px solid #f0f0f0;\n}\n\n.modal-title {\n font-size: 16px;\n font-weight: 500;\n color: #333;\n}\n\n.modal-close {\n width: 32px;\n height: 32px;\n display: flex;\n align-items: center;\n justify-content: center;\n font-size: 20px;\n color: #999;\n cursor: pointer;\n border-radius: 4px;\n transition: all 0.2s;\n\n &:hover {\n color: #333;\n background-color: #f5f5f5;\n }\n}\n\n.modal-body {\n padding: 6px;\n overflow: auto;\n flex: 1;\n}\n\n.modal-footer {\n padding: 16px 24px;\n border-top: 1px solid #f0f0f0;\n text-align: right;\n}\n","import React, { useEffect, ReactNode } from 'react';\nimport classNames from 'classnames/bind';\nimport { createPortal } from 'react-dom';\nimport style from './index.module.less';\n\nconst cx = classNames.bind(style);\n\n/**\n * Modal 组件的属性接口\n */\ninterface ModalProps {\n /** 是否显示弹窗 */\n open: boolean;\n /** 弹窗标题 */\n title: string;\n /** 弹窗宽度 */\n width?: number;\n /** 关闭回调 */\n onCancel?: () => void;\n /** 底部内容 */\n footer?: ReactNode | null;\n /** 关闭时是否销毁子元素 */\n destroyOnClose?: boolean;\n /** 自定义类名 */\n className?: string;\n /** 弹窗内容 */\n children?: ReactNode;\n}\n\n/**\n * 自定义 Modal 组件\n * 使用 Portal 渲染到 body,实现模态对话框\n */\nconst CustomModal: React.FC<ModalProps> = ({\n open,\n title,\n width = 520,\n onCancel,\n footer,\n destroyOnClose = false,\n className = '',\n children,\n}) => {\n /**\n * 处理关闭按钮点击\n */\n const handleCancel = () => {\n onCancel?.();\n };\n\n /**\n * 处理遮罩层点击\n */\n const handleMaskClick = (e: React.MouseEvent) => {\n if (e.target === e.currentTarget) {\n handleCancel();\n }\n };\n\n /**\n * 点击弹窗内部不关闭\n */\n const handleModalClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n };\n\n // 监听 ESC 键关闭弹窗\n useEffect(() => {\n if (!open) return;\n\n /**\n * 处理键盘事件\n */\n const handleKeyDown = (e: KeyboardEvent) => {\n if (e.key === 'Escape') {\n handleCancel();\n }\n };\n\n document.addEventListener('keydown', handleKeyDown);\n // 禁止背景滚动\n document.body.style.overflow = 'hidden';\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown);\n document.body.style.overflow = '';\n };\n }, [open]);\n\n // 不渲染未打开的弹窗\n if (!open) return null;\n\n // destroyOnClose 时条件渲染内容\n const content = destroyOnClose && !open ? null : children;\n\n const modalContent = (\n <div\n className={cx('modal-mask', 'modal-mask-visible')}\n onClick={handleMaskClick}\n >\n <div\n className={cx('modal', className)}\n style={{ width }}\n onClick={handleModalClick}\n >\n {/* 标题栏 */}\n <div className={cx('modal-header')}>\n <span className={cx('modal-title')}>{title}</span>\n <div className={cx('modal-close')} onClick={handleCancel}>\n ×\n </div>\n </div>\n\n {/* 内容区域 */}\n <div className={cx('modal-body')}>\n {content}\n </div>\n\n {/* 底部区域 */}\n {footer !== undefined && footer !== null && (\n <div className={cx('modal-footer')}>\n {footer}\n </div>\n )}\n </div>\n </div>\n );\n\n // 使用 Portal 渲染到 body\n return createPortal(modalContent, document.body);\n};\n\nexport default CustomModal;\n","const js = [\r\n { externalsName: 'mermaid', url: \"https://registry.npmmirror.com/mermaid/11.16.0/files/dist/mermaid.min.js\" },\r\n];\r\n\r\nexport default js;","import cdn from './cdn';\r\n\r\nexport const jsMap: Record<string, string> = cdn.reduce((acc, item) => {\r\n acc[item.externalsName as string] = item.url;\r\n return acc;\r\n}, {} as Record<string, string>);\r\n\r\nconst delay = 5000;\r\n\r\nexport function preload(cdnName: string | string[]) {\r\n\t// 统一转为数组处理\r\n\tconst cdnNames = Array.isArray(cdnName) ? cdnName : [cdnName];\r\n\r\n\t// 页面加载完成后,空闲时静默预加载\r\n\tfunction loadScripts() {\r\n\t\tcdnNames.forEach((cdnName) => {\r\n\t\t\tconst href = jsMap[cdnName];\r\n\t\t\tif (!href) return;\r\n\t\t\tconst link = document.createElement('link');\r\n\t\t\tlink.rel = 'preload';\r\n\t\t\tlink.href = href;\r\n\t\t\tlink.as = 'script';\r\n\t\t\tdocument.head.appendChild(link);\r\n\t\t});\r\n\t}\r\n\r\n\t// 方式 A:浏览器空闲时执行(优先)\r\n\tif ('requestIdleCallback' in window) {\r\n\t\trequestIdleCallback(loadScripts);\r\n\t} else {\r\n\t\t// 降级:延迟 5 秒后执行\r\n\t\tsetTimeout(loadScripts, delay);\r\n\t}\r\n}","// hooks/useLoadMermaid.ts\r\nimport { useState, useEffect } from 'react';\r\nimport { jsMap } from '@/utils/preload';\r\n\r\ndeclare global {\r\n interface Window {\r\n mermaid: any;\r\n }\r\n}\r\n\r\nlet mermaidPromise: Promise<any> | null = null;\r\n\r\nfunction loadMermaidScript() {\r\n if (!mermaidPromise) {\r\n mermaidPromise = new Promise((resolve, reject) => {\r\n if (window.mermaid) {\r\n resolve(window.mermaid);\r\n return;\r\n }\r\n const script = document.createElement('script');\r\n script.src = jsMap.mermaid;\r\n script.onload = () => resolve(window.mermaid);\r\n script.onerror = () => reject(new Error('Mermaid 脚本加载失败'));\r\n document.head.appendChild(script);\r\n });\r\n }\r\n return mermaidPromise;\r\n}\r\n\r\nexport default function useLoadMermaid() {\r\n const [mermaid, setMermaid] = useState<any>(null);\r\n const [loading, setLoading] = useState(true);\r\n const [error, setError] = useState<Error | null>(null);\r\n\r\n useEffect(() => {\r\n let cancelled = false;\r\n\r\n loadMermaidScript()\r\n .then((instance) => {\r\n if (!cancelled) {\r\n instance.initialize({ startOnLoad: false });\r\n setMermaid(() => instance);\r\n setLoading(false);\r\n }\r\n })\r\n .catch((err) => {\r\n if (!cancelled) {\r\n setError(err);\r\n setLoading(false);\r\n }\r\n });\r\n\r\n return () => { cancelled = true; };\r\n }, []);\r\n\r\n return { mermaid, loading, error };\r\n}","import { useState, useRef, useEffect } from \"react\";\nimport useLoadMermaid from \"@/hooks/useLoadMermaid\";\n\nlet renderIdSeq = 0;\n\n/**\n * 共享 Mermaid 渲染逻辑\n * - 加载 mermaid 库\n * - 根据主题初始化\n * - 防抖渲染 SVG\n * - 返回 { svg, error, loading }\n */\ninterface UseMermaidRenderParams {\n source: string;\n debounceMs?: number;\n isDark: boolean;\n}\n\nexport default function useMermaidRender({ source, debounceMs = 300, isDark }: UseMermaidRenderParams) {\n const { mermaid, loading } = useLoadMermaid();\n const [svg, setSvg] = useState(\"\");\n const [error, setError] = useState(\"\");\n const renderSeqRef = useRef(0);\n\n // 主题变化时重新初始化 mermaid\n useEffect(() => {\n if (!mermaid) return;\n mermaid.initialize({\n startOnLoad: false,\n theme: isDark ? \"dark\" : \"default\",\n securityLevel: \"loose\",\n });\n }, [mermaid, isDark]);\n\n // 防抖渲染 SVG\n useEffect(() => {\n if (!mermaid) return;\n const text = (source || \"\").trim();\n if (!text) {\n setSvg(\"\");\n setError(\"\");\n return;\n }\n setError(\"\");\n const seq = ++renderSeqRef.current;\n const timer = setTimeout(async () => {\n const id = `mermaid-render-${renderIdSeq++}`;\n try {\n const { svg: svgStr } = await mermaid.render(id, text);\n if (seq !== renderSeqRef.current) return;\n setSvg(svgStr);\n setError(\"\");\n } catch (err: unknown) {\n if (seq !== renderSeqRef.current) return;\n console.error(\"Mermaid render error:\", err);\n const message = err instanceof Error ? err.message : String(err);\n setError(message?.split(\"\\n\")[0] || message);\n } finally {\n const leftover = document.getElementById(id) || document.getElementById(`d${id}`);\n if (leftover && leftover.parentNode) leftover.parentNode.removeChild(leftover);\n }\n }, debounceMs);\n return () => clearTimeout(timer);\n }, [source, isDark, mermaid, debounceMs]);\n\n return { svg, error, loading };\n}\n","/**\n* Panzoom 4.6.2 for panning and zooming elements using CSS transforms\n* Copyright Timmy Willison and other contributors\n* https://github.com/timmywil/panzoom/blob/main/MIT-License.txt\n*/\nif (typeof window !== 'undefined') {\n // Support: IE11 only\n if (window.NodeList && !NodeList.prototype.forEach) {\n NodeList.prototype.forEach = Array.prototype.forEach;\n }\n // Support: IE11 only\n // CustomEvent is an object instead of a constructor\n if (typeof window.CustomEvent !== 'function') {\n window.CustomEvent = function CustomEvent(event, params) {\n params = params || { bubbles: false, cancelable: false, detail: null };\n var evt = document.createEvent('CustomEvent');\n evt.initCustomEvent(event, params.bubbles, params.cancelable, params.detail);\n return evt\n };\n }\n}\n\nconst isIE = typeof document !== 'undefined' && !!document.documentMode;\n/**\n * Lazy creation of a CSS style declaration\n */\nlet divStyle;\nfunction createStyle() {\n if (divStyle) {\n return divStyle;\n }\n return (divStyle = document.createElement('div').style);\n}\n/**\n * Proper prefixing for cross-browser compatibility\n */\nconst prefixes = ['webkit', 'moz', 'ms'];\nconst prefixCache = {};\nfunction getPrefixedName(name) {\n if (prefixCache[name]) {\n return prefixCache[name];\n }\n const divStyle = createStyle();\n if (name in divStyle) {\n return (prefixCache[name] = name);\n }\n const capName = name[0].toUpperCase() + name.slice(1);\n let i = prefixes.length;\n while (i--) {\n const prefixedName = `${prefixes[i]}${capName}`;\n if (prefixedName in divStyle) {\n return (prefixCache[name] = prefixedName);\n }\n }\n}\n/**\n * Gets a style value expected to be a number\n */\nfunction getCSSNum(name, style) {\n return parseFloat(style[getPrefixedName(name)]) || 0;\n}\nfunction getBoxStyle(elem, name, style = window.getComputedStyle(elem)) {\n // Support: FF 68+\n // Firefox requires specificity for border\n const suffix = name === 'border' ? 'Width' : '';\n return {\n left: getCSSNum(`${name}Left${suffix}`, style),\n right: getCSSNum(`${name}Right${suffix}`, style),\n top: getCSSNum(`${name}Top${suffix}`, style),\n bottom: getCSSNum(`${name}Bottom${suffix}`, style)\n };\n}\n/**\n * Set a style using the properly prefixed name\n */\nfunction setStyle(elem, name, value) {\n elem.style[getPrefixedName(name)] = value;\n}\n/**\n * Constructs the transition from panzoom options\n * and takes care of prefixing the transition and transform\n */\nfunction setTransition(elem, options) {\n const transform = getPrefixedName('transform');\n setStyle(elem, 'transition', `${transform} ${options.duration}ms ${options.easing}`);\n}\n/**\n * Set the transform using the proper prefix\n *\n * Override the transform setter.\n * This is exposed mostly so the user could\n * set other parts of a transform\n * aside from scale and translate.\n * Default is defined in src/css.ts.\n *\n * ```js\n * // This example always sets a rotation\n * // when setting the scale and translation\n * const panzoom = Panzoom(elem, {\n * setTransform: (elem, { scale, x, y }) => {\n * panzoom.setStyle('transform', `rotate(0.5turn) scale(${scale}) translate(${x}px, ${y}px)`)\n * }\n * })\n * ```\n */\nfunction setTransform(elem, { x, y, scale, isSVG }, _options) {\n setStyle(elem, 'transform', `scale(${scale}) translate(${x}px, ${y}px)`);\n if (isSVG && isIE) {\n const matrixValue = window.getComputedStyle(elem).getPropertyValue('transform');\n elem.setAttribute('transform', matrixValue);\n }\n}\n/**\n * Dimensions used in containment and focal point zooming\n */\nfunction getDimensions(elem) {\n let parent = elem.parentNode;\n if (!parent || parent.nodeType !== 1) {\n parent = document.documentElement;\n }\n const style = window.getComputedStyle(elem);\n const parentStyle = window.getComputedStyle(parent);\n const rectElem = elem.getBoundingClientRect();\n const rectParent = parent.getBoundingClientRect();\n return {\n elem: {\n style,\n width: rectElem.width,\n height: rectElem.height,\n top: rectElem.top,\n bottom: rectElem.bottom,\n left: rectElem.left,\n right: rectElem.right,\n margin: getBoxStyle(elem, 'margin', style),\n border: getBoxStyle(elem, 'border', style)\n },\n parent: {\n style: parentStyle,\n width: rectParent.width,\n height: rectParent.height,\n top: rectParent.top,\n bottom: rectParent.bottom,\n left: rectParent.left,\n right: rectParent.right,\n padding: getBoxStyle(parent, 'padding', parentStyle),\n border: getBoxStyle(parent, 'border', parentStyle)\n }\n };\n}\n\nlet events = {\n down: 'mousedown',\n move: 'mousemove',\n up: 'mouseup mouseleave'\n};\nif (typeof window !== 'undefined') {\n if (typeof window.PointerEvent === 'function') {\n events = {\n down: 'pointerdown',\n move: 'pointermove',\n up: 'pointerup pointerleave pointercancel'\n };\n }\n else if (typeof window.TouchEvent === 'function') {\n events = {\n down: 'touchstart',\n move: 'touchmove',\n up: 'touchend touchcancel'\n };\n }\n}\nfunction onPointer(event, elem, handler, eventOpts) {\n events[event].split(' ').forEach((name) => {\n elem.addEventListener(name, handler, eventOpts);\n });\n}\nfunction destroyPointer(event, elem, handler) {\n events[event].split(' ').forEach((name) => {\n elem.removeEventListener(name, handler);\n });\n}\n\n/**\n * Utilites for working with multiple pointer events\n */\nfunction findEventIndex(pointers, event) {\n let i = pointers.length;\n while (i--) {\n if (pointers[i].pointerId === event.pointerId) {\n return i;\n }\n }\n return -1;\n}\nfunction addPointer(pointers, event) {\n let i;\n // Add touches if applicable\n if (event.touches) {\n i = 0;\n for (const touch of event.touches) {\n touch.pointerId = i++;\n addPointer(pointers, touch);\n }\n return;\n }\n i = findEventIndex(pointers, event);\n // Update if already present\n if (i > -1) {\n pointers.splice(i, 1);\n }\n pointers.push(event);\n}\nfunction removePointer(pointers, event) {\n // Add touches if applicable\n if (event.touches) {\n // Remove all touches\n while (pointers.length) {\n pointers.pop();\n }\n return;\n }\n const i = findEventIndex(pointers, event);\n if (i > -1) {\n pointers.splice(i, 1);\n }\n}\n/**\n * Calculates a center point between\n * the given pointer events, for panning\n * with multiple pointers.\n */\nfunction getMiddle(pointers) {\n // Copy to avoid changing by reference\n pointers = pointers.slice(0);\n let event1 = pointers.pop();\n let event2;\n while ((event2 = pointers.pop())) {\n event1 = {\n clientX: (event2.clientX - event1.clientX) / 2 + event1.clientX,\n clientY: (event2.clientY - event1.clientY) / 2 + event1.clientY\n };\n }\n return event1;\n}\n/**\n * Calculates the distance between two points\n * for pinch zooming.\n * Limits to the first 2\n */\nfunction getDistance(pointers) {\n if (pointers.length < 2) {\n return 0;\n }\n const event1 = pointers[0];\n const event2 = pointers[1];\n return Math.sqrt(Math.pow(Math.abs(event2.clientX - event1.clientX), 2) +\n Math.pow(Math.abs(event2.clientY - event1.clientY), 2));\n}\n\n/**\n * Determine if an element is attached to the DOM\n * Panzoom requires this so events work properly\n */\nfunction isAttached(node) {\n let currentNode = node;\n while (currentNode && currentNode.parentNode) {\n if (currentNode.parentNode === document)\n return true;\n currentNode =\n currentNode.parentNode instanceof ShadowRoot\n ? currentNode.parentNode.host\n : currentNode.parentNode;\n }\n return false;\n}\n\nfunction getClass(elem) {\n return (elem.getAttribute('class') || '').trim();\n}\nfunction hasClass(elem, className) {\n return elem.nodeType === 1 && ` ${getClass(elem)} `.indexOf(` ${className} `) > -1;\n}\nfunction isExcluded(elem, options) {\n for (let cur = elem; cur != null; cur = cur.parentNode) {\n if (hasClass(cur, options.excludeClass) || options.exclude.indexOf(cur) > -1) {\n return true;\n }\n }\n return false;\n}\n\n/**\n * Determine if an element is SVG by checking the namespace\n * Exception: the <svg> element itself should be treated like HTML\n */\nconst rsvg = /^http:[\\w\\.\\/]+svg$/;\nfunction isSVGElement(elem) {\n return rsvg.test(elem.namespaceURI) && elem.nodeName.toLowerCase() !== 'svg';\n}\n\nfunction shallowClone(obj) {\n const clone = {};\n for (const key in obj) {\n if (obj.hasOwnProperty(key)) {\n clone[key] = obj[key];\n }\n }\n return clone;\n}\n\n/**\n * Panzoom for panning and zooming elements using CSS transforms\n * https://github.com/timmywil/panzoom\n *\n * Copyright Timmy Willison and other contributors\n * Released under the MIT license\n * https://github.com/timmywil/panzoom/blob/main/MIT-License.txt\n *\n */\nconst defaultOptions = {\n animate: false,\n canvas: false,\n cursor: 'move',\n disablePan: false,\n disableZoom: false,\n disableXAxis: false,\n disableYAxis: false,\n duration: 200,\n easing: 'ease-in-out',\n exclude: [],\n excludeClass: 'panzoom-exclude',\n handleStartEvent: (e) => {\n e.preventDefault();\n e.stopPropagation();\n },\n maxScale: 4,\n minScale: 0.125,\n overflow: 'hidden',\n panOnlyWhenZoomed: false,\n pinchAndPan: false,\n relative: false,\n setTransform,\n startX: 0,\n startY: 0,\n startScale: 1,\n step: 0.3,\n touchAction: 'none'\n};\nfunction Panzoom(elem, options) {\n if (!elem) {\n throw new Error('Panzoom requires an element as an argument');\n }\n if (elem.nodeType !== 1) {\n throw new Error('Panzoom requires an element with a nodeType of 1');\n }\n if (!isAttached(elem)) {\n throw new Error('Panzoom should be called on elements that have been attached to the DOM');\n }\n options = { ...defaultOptions, ...options };\n const isSVG = isSVGElement(elem);\n const parent = elem.parentNode;\n // Set parent styles\n parent.style.overflow = options.overflow;\n parent.style.userSelect = 'none';\n // This is important for mobile to\n // prevent scrolling while panning\n parent.style.touchAction = options.touchAction;\n (options.canvas ? parent : elem).style.cursor = options.cursor;\n // Set element styles\n elem.style.userSelect = 'none';\n elem.style.touchAction = options.touchAction;\n // The default for HTML is '50% 50%'\n // The default for SVG is '0 0'\n // SVG can't be changed in IE\n setStyle(elem, 'transformOrigin', typeof options.origin === 'string' ? options.origin : isSVG ? '0 0' : '50% 50%');\n function resetStyle() {\n parent.style.overflow = '';\n parent.style.userSelect = '';\n parent.style.touchAction = '';\n parent.style.cursor = '';\n elem.style.cursor = '';\n elem.style.userSelect = '';\n elem.style.touchAction = '';\n setStyle(elem, 'transformOrigin', '');\n }\n function setOptions(opts = {}) {\n for (const key in opts) {\n if (opts.hasOwnProperty(key)) {\n options[key] = opts[key];\n }\n }\n // Handle option side-effects\n if (opts.hasOwnProperty('cursor') || opts.hasOwnProperty('canvas')) {\n parent.style.cursor = elem.style.cursor = '';\n (options.canvas ? parent : elem).style.cursor = options.cursor;\n }\n if (opts.hasOwnProperty('overflow')) {\n parent.style.overflow = opts.overflow;\n }\n if (opts.hasOwnProperty('touchAction')) {\n parent.style.touchAction = opts.touchAction;\n elem.style.touchAction = opts.touchAction;\n }\n }\n let x = 0;\n let y = 0;\n let scale = 1;\n let isPanning = false;\n zoom(options.startScale, { animate: false, force: true });\n // Wait for scale to update\n // for accurate dimensions\n // to constrain initial values\n setTimeout(() => {\n pan(options.startX, options.startY, { animate: false, force: true });\n });\n function trigger(eventName, detail, opts) {\n if (opts.silent) {\n return;\n }\n const event = new CustomEvent(eventName, { detail });\n elem.dispatchEvent(event);\n }\n function setTransformWithEvent(eventName, opts, originalEvent) {\n const value = { x, y, scale, isSVG, originalEvent };\n requestAnimationFrame(() => {\n if (typeof opts.animate === 'boolean') {\n if (opts.animate) {\n setTransition(elem, opts);\n }\n else {\n setStyle(elem, 'transition', 'none');\n }\n }\n opts.setTransform(elem, value, opts);\n trigger(eventName, value, opts);\n trigger('panzoomchange', value, opts);\n });\n return value;\n }\n function constrainXY(toX, toY, toScale, panOptions) {\n const opts = { ...options, ...panOptions };\n const result = { x, y, opts };\n if (!panOptions?.force &&\n (opts.disablePan || (opts.panOnlyWhenZoomed && scale === opts.startScale))) {\n return result;\n }\n toX = parseFloat(toX);\n toY = parseFloat(toY);\n if (!opts.disableXAxis) {\n result.x = (opts.relative ? x : 0) + toX;\n }\n if (!opts.disableYAxis) {\n result.y = (opts.relative ? y : 0) + toY;\n }\n if (opts.contain) {\n const dims = getDimensions(elem);\n const realWidth = dims.elem.width / scale;\n const realHeight = dims.elem.height / scale;\n const scaledWidth = realWidth * toScale;\n const scaledHeight = realHeight * toScale;\n const diffHorizontal = (scaledWidth - realWidth) / 2;\n const diffVertical = (scaledHeight - realHeight) / 2;\n if (opts.contain === 'inside') {\n const minX = (-dims.elem.margin.left - dims.parent.padding.left + diffHorizontal) / toScale;\n const maxX = (dims.parent.width -\n scaledWidth -\n dims.parent.padding.left -\n dims.elem.margin.left -\n dims.parent.border.left -\n dims.parent.border.right +\n diffHorizontal) /\n toScale;\n result.x = Math.max(Math.min(result.x, maxX), minX);\n const minY = (-dims.elem.margin.top - dims.parent.padding.top + diffVertical) / toScale;\n const maxY = (dims.parent.height -\n scaledHeight -\n dims.parent.padding.top -\n dims.elem.margin.top -\n dims.parent.border.top -\n dims.parent.border.bottom +\n diffVertical) /\n toScale;\n result.y = Math.max(Math.min(result.y, maxY), minY);\n }\n else if (opts.contain === 'outside') {\n const minX = (-(scaledWidth - dims.parent.width) -\n dims.parent.padding.left -\n dims.parent.border.left -\n dims.parent.border.right +\n diffHorizontal) /\n toScale;\n const maxX = (diffHorizontal - dims.parent.padding.left) / toScale;\n result.x = Math.max(Math.min(result.x, maxX), minX);\n const minY = (-(scaledHeight - dims.parent.height) -\n dims.parent.padding.top -\n dims.parent.border.top -\n dims.parent.border.bottom +\n diffVertical) /\n toScale;\n const maxY = (diffVertical - dims.parent.padding.top) / toScale;\n result.y = Math.max(Math.min(result.y, maxY), minY);\n }\n }\n if (opts.roundPixels) {\n result.x = Math.round(result.x);\n result.y = Math.round(result.y);\n }\n return result;\n }\n function constrainScale(toScale, zoomOptions) {\n const opts = { ...options, ...zoomOptions };\n const result = { scale, opts };\n if (!zoomOptions?.force && opts.disableZoom) {\n return result;\n }\n let minScale = options.minScale;\n let maxScale = options.maxScale;\n if (opts.contain) {\n const dims = getDimensions(elem);\n const elemWidth = dims.elem.width / scale;\n const elemHeight = dims.elem.height / scale;\n if (elemWidth > 1 && elemHeight > 1) {\n const parentWidth = dims.parent.width - dims.parent.border.left - dims.parent.border.right;\n const parentHeight = dims.parent.height - dims.parent.border.top - dims.parent.border.bottom;\n const elemScaledWidth = parentWidth / elemWidth;\n const elemScaledHeight = parentHeight / elemHeight;\n if (options.contain === 'inside') {\n maxScale = Math.min(maxScale, elemScaledWidth, elemScaledHeight);\n }\n else if (options.contain === 'outside') {\n minScale = Math.max(minScale, elemScaledWidth, elemScaledHeight);\n }\n }\n }\n result.scale = Math.min(Math.max(toScale, minScale), maxScale);\n return result;\n }\n function pan(toX, toY, panOptions, originalEvent) {\n const result = constrainXY(toX, toY, scale, panOptions);\n // Only try to set if the result is somehow different\n if (x !== result.x || y !== result.y) {\n x = result.x;\n y = result.y;\n return setTransformWithEvent('panzoompan', result.opts, originalEvent);\n }\n return { x, y, scale, isSVG, originalEvent };\n }\n function zoom(toScale, zoomOptions, originalEvent) {\n const result = constrainScale(toScale, zoomOptions);\n const opts = result.opts;\n if (!zoomOptions?.force && opts.disableZoom) {\n return;\n }\n toScale = result.scale;\n let toX = x;\n let toY = y;\n if (opts.focal) {\n // The difference between the point after the scale and the point before the scale\n // plus the current translation after the scale\n // neutralized to no scale (as the transform scale will apply to the translation)\n const focal = opts.focal;\n toX = (focal.x / toScale - focal.x / scale + x * toScale) / toScale;\n toY = (focal.y / toScale - focal.y / scale + y * toScale) / toScale;\n }\n const panResult = constrainXY(toX, toY, toScale, { relative: false, force: true });\n x = panResult.x;\n y = panResult.y;\n scale = toScale;\n return setTransformWithEvent('panzoomzoom', opts, originalEvent);\n }\n function zoomInOut(isIn, zoomOptions) {\n const opts = { ...options, animate: true, ...zoomOptions };\n return zoom(scale * Math.exp((isIn ? 1 : -1) * opts.step), opts);\n }\n function zoomIn(zoomOptions) {\n return zoomInOut(true, zoomOptions);\n }\n function zoomOut(zoomOptions) {\n return zoomInOut(false, zoomOptions);\n }\n function zoomToPoint(toScale, point, zoomOptions, originalEvent) {\n const dims = getDimensions(elem);\n // Instead of thinking of operating on the panzoom element,\n // think of operating on the area inside the panzoom\n // element's parent\n // Subtract padding and border\n const effectiveArea = {\n width: dims.parent.width -\n dims.parent.padding.left -\n dims.parent.padding.right -\n dims.parent.border.left -\n dims.parent.border.right,\n height: dims.parent.height -\n dims.parent.padding.top -\n dims.parent.padding.bottom -\n dims.parent.border.top -\n dims.parent.border.bottom\n };\n // Adjust the clientX/clientY to ignore the area\n // outside the effective area\n let clientX = point.clientX -\n dims.parent.left -\n dims.parent.padding.left -\n dims.parent.border.left -\n dims.elem.margin.left;\n let clientY = point.clientY -\n dims.parent.top -\n dims.parent.padding.top -\n dims.parent.border.top -\n dims.elem.margin.top;\n // Adjust the clientX/clientY for HTML elements,\n // because they have a transform-origin of 50% 50%\n if (!isSVG) {\n clientX -= dims.elem.width / scale / 2;\n clientY -= dims.elem.height / scale / 2;\n }\n // Convert the mouse point from it's position over the\n // effective area before the scale to the position\n // over the effective area after the scale.\n const focal = {\n x: (clientX / effectiveArea.width) * (effectiveArea.width * toScale),\n y: (clientY / effectiveArea.height) * (effectiveArea.height * toScale)\n };\n return zoom(toScale, { ...zoomOptions, animate: false, focal }, originalEvent);\n }\n function zoomWithWheel(event, zoomOptions) {\n // Need to prevent the default here\n // or it conflicts with regular page scroll\n event.preventDefault();\n const opts = { ...options, ...zoomOptions, animate: false };\n // Normalize to deltaX in case shift modifier is used on Mac\n const delta = event.deltaY === 0 && event.deltaX ? event.deltaX : event.deltaY;\n const wheel = delta < 0 ? 1 : -1;\n const toScale = constrainScale(scale * Math.exp((wheel * opts.step) / 3), opts).scale;\n return zoomToPoint(toScale, event, opts, event);\n }\n function reset(resetOptions) {\n const opts = { ...options, animate: true, force: true, ...resetOptions };\n scale = constrainScale(opts.startScale, opts).scale;\n const panResult = constrainXY(opts.startX, opts.startY, scale, opts);\n x = panResult.x;\n y = panResult.y;\n return setTransformWithEvent('panzoomreset', opts);\n }\n let origX;\n let origY;\n let startClientX;\n let startClientY;\n let startScale;\n let startDistance;\n const pointers = [];\n function handleDown(event) {\n // Don't handle this event if the target is excluded\n if (isExcluded(event.target, options)) {\n return;\n }\n addPointer(pointers, event);\n isPanning = true;\n options.handleStartEvent(event);\n origX = x;\n origY = y;\n trigger('panzoomstart', { x, y, scale, isSVG, originalEvent: event }, options);\n // This works whether there are multiple\n // pointers or not\n const point = getMiddle(pointers);\n startClientX = point.clientX;\n startClientY = point.clientY;\n startScale = scale;\n startDistance = getDistance(pointers);\n }\n function handleMove(event) {\n if (!isPanning ||\n origX === undefined ||\n origY === undefined ||\n startClientX === undefined ||\n startClientY === undefined) {\n return;\n }\n addPointer(pointers, event);\n const current = getMiddle(pointers);\n const hasMultiple = pointers.length > 1;\n let toScale = scale;\n if (hasMultiple) {\n // A startDistance of 0 means\n // that there weren't 2 pointers\n // handled on start\n if (startDistance === 0) {\n startDistance = getDistance(pointers);\n }\n // Use the distance between the first 2 pointers\n // to determine the current scale\n const diff = getDistance(pointers) - startDistance;\n toScale = constrainScale((diff * options.step) / 80 + startScale).scale;\n zoomToPoint(toScale, current, { animate: false }, event);\n }\n // Pan during pinch if pinchAndPan is true.\n // Note: some calculations may be off because the zoom\n // above has not yet rendered. However, the behavior\n // was removed before the new scale was used in the following\n // pan calculation.\n // See https://github.com/timmywil/panzoom/issues/512\n // and https://github.com/timmywil/panzoom/issues/606\n if (!hasMultiple || options.pinchAndPan) {\n pan(origX + (current.clientX - startClientX) / toScale, origY + (current.clientY - startClientY) / toScale, { animate: false }, event);\n }\n }\n function handleUp(event) {\n // Don't call panzoomend when panning with 2 touches\n // until both touches end\n if (pointers.length === 1) {\n trigger('panzoomend', { x, y, scale, isSVG, originalEvent: event }, options);\n }\n // Note: don't remove all pointers\n // Can restart without having to reinitiate all of them\n // Remove the pointer regardless of the isPanning state\n removePointer(pointers, event);\n if (!isPanning) {\n return;\n }\n isPanning = false;\n origX = origY = startClientX = startClientY = undefined;\n }\n let bound = false;\n function bind() {\n if (bound) {\n return;\n }\n bound = true;\n onPointer('down', options.canvas ? parent : elem, handleDown);\n onPointer('move', document, handleMove, { passive: true });\n onPointer('up', document, handleUp, { passive: true });\n }\n function destroy() {\n bound = false;\n destroyPointer('down', options.canvas ? parent : elem, handleDown);\n destroyPointer('move', document, handleMove);\n destroyPointer('up', document, handleUp);\n }\n if (!options.noBind) {\n bind();\n }\n return {\n bind,\n destroy,\n eventNames: events,\n getPan: () => ({ x, y }),\n getScale: () => scale,\n getOptions: () => shallowClone(options),\n handleDown,\n handleMove,\n handleUp,\n pan,\n reset,\n resetStyle,\n setOptions,\n setStyle: (name, value) => setStyle(elem, name, value),\n zoom,\n zoomIn,\n zoomOut,\n zoomToPoint,\n zoomWithWheel\n };\n}\nPanzoom.defaultOptions = defaultOptions;\n\nexport { Panzoom as default };\n","import { useRef, useEffect, RefObject } from \"react\";\nimport Panzoom from \"@panzoom/panzoom\";\n\ninterface PanzoomRefType {\n destroy: () => void;\n zoomWithWheel: (e: WheelEvent) => void;\n zoomIn: () => void;\n zoomOut: () => void;\n reset: () => void;\n}\n\ninterface UsePanzoomParams {\n contentRef: RefObject<HTMLElement | null>;\n wrapperRef: RefObject<HTMLElement | null>;\n enabled: boolean;\n svg: string;\n isFullscreen: boolean;\n}\n\nexport default function usePanzoom({ contentRef, wrapperRef, enabled, svg, isFullscreen }: UsePanzoomParams) {\n const panzoomRef = useRef<PanzoomRefType | null>(null);\n\n useEffect(() => {\n if (!enabled || !contentRef.current || !svg) {\n if (panzoomRef.current) {\n panzoomRef.current.destroy();\n panzoomRef.current = null;\n }\n return;\n }\n if (panzoomRef.current) {\n panzoomRef.current.destroy();\n panzoomRef.current = null;\n }\n const elem = contentRef.current;\n const panzoomInstance = Panzoom(elem, {\n maxScale: 5,\n minScale: 0.1,\n startScale: 1,\n contain: 'outside' as const,\n });\n panzoomRef.current = {\n destroy: () => panzoomInstance.destroy(),\n zoomWithWheel: panzoomInstance.zoomWithWheel,\n zoomIn: () => panzoomInstance.zoomIn(),\n zoomOut: () => panzoomInstance.zoomOut(),\n reset: () => panzoomInstance.reset(),\n };\n const wheelTarget = wrapperRef.current;\n const handleWheel = panzoomRef.current!.zoomWithWheel;\n wheelTarget?.addEventListener(\"wheel\", handleWheel);\n return () => {\n wheelTarget?.removeEventListener(\"wheel\", handleWheel);\n if (panzoomRef.current) {\n panzoomRef.current.destroy();\n panzoomRef.current = null;\n }\n };\n }, [svg, isFullscreen, enabled, contentRef, wrapperRef]);\n\n return panzoomRef;\n}\n","@import (reference) \"../../assets/css/variables.css\";\n\n/* 预览区域 */\n.previewArea {\n width: 100%;\n height: 100%;\n overflow: hidden;\n position: relative;\n background: var(--color-bg-card, #f8f9fa);\n cursor: grab;\n border-radius: var(--radius-base);\n\n &:active {\n cursor: grabbing;\n }\n\n &:fullscreen {\n width: 100vw;\n height: 100vh;\n cursor: grab;\n }\n}\n\n:global(.mermaid-mini) {\n .previewArea {\n visibility: hidden;\n }\n}\n\n.previewContent {\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n transform-origin: center center;\n touch-action: none;\n\n :global(svg) {\n max-width: 100%;\n max-height: 100%;\n display: block;\n font-family: var(--font-family-base) !important;\n }\n}\n\n/* 错误提示 */\n.errorTip {\n padding: 8px 12px;\n font-size: 12px;\n color: var(--color-danger, #ef4444);\n background: #fef2f2;\n border-bottom: 1px solid #fee2e2;\n flex-shrink: 0;\n word-break: break-all;\n max-height: 120px;\n overflow: auto;\n}\n\n/* 空状态 / 加载中 */\n.emptyTip {\n position: absolute;\n inset: 0;\n display: flex;\n align-items: center;\n justify-content: center;\n color: var(--color-text-light, #9ca3af);\n font-size: 14px;\n pointer-events: none;\n}\n\n\n\n:global {\n .mermaid-react-root {\n min-height: 36px;\n margin: 10px 0;\n }\n\n .mermaid-wrapper,\n .mermaid-loading {\n overflow: hidden;\n background-color: var(--color-bg-card, #f8f9fa);\n border-radius: 8px;\n position: relative;\n border: 1px solid var(--color-border, #e4e4e4);\n box-sizing: border-box;\n transition: all 0.3s ease-in-out;\n\n &.mermaid-mini {\n max-height: 36px;\n }\n\n .mermaid-content.disabled-move {\n cursor: initial !important;\n }\n\n &.mermaid-collapsed {\n max-height: 200px;\n\n &::after {\n position: absolute;\n right: 0;\n bottom: 0;\n left: 0;\n height: 28px;\n pointer-events: none;\n content: \"\";\n background: linear-gradient(to bottom, transparent, var(--color-bg, #ebebeb));\n }\n }\n }\n\n .mermaid-loading {\n height: 200px;\n display: flex;\n align-items: center;\n justify-content: center;\n }\n\n .mermaid-wrapper svg {\n display: block;\n }\n\n .mermaid-title {\n position: absolute;\n line-height: 34px;\n left: 6px;\n display: flex;\n align-items: center;\n\n .mermaid-title-tag {\n display: flex;\n align-items: center;\n border-radius: 4px;\n overflow: hidden;\n background: #fdf1f6;\n color: #fc366e;\n margin-right: 4px;\n }\n\n .mermaid-title-text {\n font-size: 12px;\n border: 1px #fc366e solid;\n box-sizing: border-box;\n border-left: 0;\n border-radius: 0 4px 4px 0;\n padding-right: 4px;\n padding-left: 5px;\n display: inline-block;\n height: 20px;\n line-height: 18px;\n margin-left: -1px;\n }\n\n img {\n width: auto;\n height: 20px;\n margin: 0;\n display: inline-block;\n }\n }\n\n .mermaid-toolbar,\n .mermaid-toolbar-loading {\n gap: 4px;\n z-index: 1;\n right: 0;\n position: absolute;\n opacity: 0.8;\n top: 4px;\n\n .circle {\n height: 24px;\n width: 24px;\n line-height: 24px;\n font-size: 12px;\n }\n }\n\n .mermaid-toolbar-loading {\n margin-right: 10px;\n }\n\n .mermaid-fullscreen-target:fullscreen {\n background: var(--color-bg-white, #fff);\n width: 100vw;\n height: 100vh;\n overflow: hidden;\n\n .mermaid-content {\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .mermaid-toolbar {\n top: 4px;\n right: 8px;\n }\n }\n\n .mermaid-content {\n width: 100%;\n height: 100%;\n display: flex;\n justify-content: center;\n align-items: center;\n }\n\n .driver-popover {\n button {\n box-shadow: none !important;\n }\n }\n\n .mermaid-code-modal {\n .ant-modal-header {\n margin: 0;\n }\n\n .ant-modal-content {\n padding: 20px 10px;\n\n .markdown {\n padding: 0;\n }\n }\n }\n}","export default \"data:image/svg+xml,%3csvg%20t='1784097187016'%20class='icon'%20viewBox='0%200%201024%201024'%20version='1.1'%20xmlns='http://www.w3.org/2000/svg'%20p-id='5199'%20width='200'%20height='200'%3e%3cpath%20d='M0%200m125.754386%200l772.491228%200q125.754386%200%20125.754386%20125.754386l0%20772.491228q0%20125.754386-125.754386%20125.754386l-772.491228%200q-125.754386%200-125.754386-125.754386l0-772.491228q0-125.754386%20125.754386-125.754386Z'%20fill='%23FC366E'%20p-id='5200'%3e%3c/path%3e%3cpath%20d='M921.150877%20174.547088a417.091368%20417.091368%200%200%200-409.168842%20274.198456%20417.235088%20417.235088%200%200%200-409.150877-274.198456%20417.360842%20417.360842%200%200%200%20181.625263%20361.992982%20223.914667%20223.914667%200%200%201%2097.010526%20185.038597v128.143719h261.084071v-128.07186a223.914667%20223.914667%200%200%201%2097.010526-185.038596%20417.181193%20417.181193%200%200%200%20181.553403-361.921123z'%20fill='%23FFFFFF'%20p-id='5201'%3e%3c/path%3e%3c/svg%3e\"","const e=[`pointerdown`,`mousedown`,`pointerup`,`mouseup`,`click`],t=new WeakMap;function n(n,i,a){r(n);let o=e=>{let t=e.target;n.contains(t)&&((!a||a(t))&&(e.preventDefault(),e.stopPropagation(),e.stopImmediatePropagation()),e.type===`click`&&i?.(e))};for(let t of e)document.addEventListener(t,o,!0);t.set(n,o)}function r(n){let r=t.get(n);if(r){for(let t of e)document.removeEventListener(t,r,!0);t.delete(n)}}function i(e,t){let n=e.wrapper.getBoundingClientRect();return{width:n.width+t,height:n.height+t,realWidth:n.width,realHeight:n.height}}function a(e,t){let{elementDimensions:n,popoverDimensions:r,popoverPadding:i,popoverArrowDimensions:a}=t;return e===`start`?Math.max(Math.min(n.top-i,window.innerHeight-r.realHeight-a.width),a.width):e===`end`?Math.max(Math.min(n.top-r?.realHeight+n.height+i,window.innerHeight-r?.realHeight-a.width),a.width):e===`center`?Math.max(Math.min(n.top+n.height/2-r?.realHeight/2,window.innerHeight-r?.realHeight-a.width),a.width):0}function o(e,t){let{elementDimensions:n,popoverDimensions:r,popoverPadding:i,popoverArrowDimensions:a}=t;return e===`start`?Math.max(Math.min(n.left-i,window.innerWidth-r.realWidth-a.width),a.width):e===`end`?Math.max(Math.min(n.left-r?.realWidth+n.width+i,window.innerWidth-r?.realWidth-a.width),a.width):e===`center`?Math.max(Math.min(n.left+n.width/2-r?.realWidth/2,window.innerWidth-r?.realWidth-a.width),a.width):0}function s(e,t,n){let{align:r,side:s}=n,c=n.centered?`over`:s,l=n.padding,u=i(e,n.offset),f=e.arrow.getBoundingClientRect(),p=t.getBoundingClientRect(),m=p.top-u.height,h=m>=0,g=window.innerHeight-(p.bottom+u.height),_=g>=0,v=p.left-u.width,y=v>=0,b=window.innerWidth-(p.right+u.width),x=b>=0,S=!h&&!_&&!y&&!x,C=c;if(c===`top`&&h?x=y=_=!1:c===`bottom`&&_?x=y=h=!1:c===`left`&&y?x=h=_=!1:c===`right`&&x&&(y=h=_=!1),c===`over`){let t=window.innerWidth/2-u.realWidth/2,n=window.innerHeight/2-u.realHeight/2;e.wrapper.style.left=`${t}px`,e.wrapper.style.right=`auto`,e.wrapper.style.top=`${n}px`,e.wrapper.style.bottom=`auto`}else if(S){let t=window.innerWidth/2-u?.realWidth/2;e.wrapper.style.left=`${t}px`,e.wrapper.style.right=`auto`,e.wrapper.style.bottom=`10px`,e.wrapper.style.top=`auto`}else if(y){let t=Math.min(v,window.innerWidth-u?.realWidth-f.width),n=a(r,{elementDimensions:p,popoverDimensions:u,popoverPadding:l,popoverArrowDimensions:f});e.wrapper.style.left=`${t}px`,e.wrapper.style.top=`${n}px`,e.wrapper.style.bottom=`auto`,e.wrapper.style.right=`auto`,C=`left`}else if(x){let t=Math.min(b,window.innerWidth-u?.realWidth-f.width),n=a(r,{elementDimensions:p,popoverDimensions:u,popoverPadding:l,popoverArrowDimensions:f});e.wrapper.style.right=`${t}px`,e.wrapper.style.top=`${n}px`,e.wrapper.style.bottom=`auto`,e.wrapper.style.left=`auto`,C=`right`}else if(h){let t=Math.min(m,window.innerHeight-u.realHeight-f.width),n=o(r,{elementDimensions:p,popoverDimensions:u,popoverPadding:l,popoverArrowDimensions:f});e.wrapper.style.top=`${t}px`,e.wrapper.style.left=`${n}px`,e.wrapper.style.bottom=`auto`,e.wrapper.style.right=`auto`,C=`top`}else if(_){let t=Math.min(g,window.innerHeight-u?.realHeight-f.width),n=o(r,{elementDimensions:p,popoverDimensions:u,popoverPadding:l,popoverArrowDimensions:f});e.wrapper.style.left=`${n}px`,e.wrapper.style.bottom=`${t}px`,e.wrapper.style.top=`auto`,e.wrapper.style.right=`auto`,C=`bottom`}d(e,S?`over`:C,r,t),[...e.wrapper.classList].filter(e=>e.startsWith(`driver-popover-side-`)||e.startsWith(`driver-popover-align-`)).forEach(t=>e.wrapper.classList.remove(t)),e.wrapper.classList.add(`driver-popover-side-${C}`),e.wrapper.classList.add(`driver-popover-align-${r}`)}function c(e,t,n,r,i,a=10){let o=r-n;return e<=n&&t>=r?i===`start`?15+a/2:i===`end`?o-15-a/2:o/2:(Math.min(Math.max(e,n),r)+Math.min(Math.max(t,n),r))/2-n}function l(e,t,n=10){let r=t-15-n;if(r<15)return Math.max(0,(t-n)/2);let i=e-n/2;return Math.min(Math.max(i,15),r)}function u(e,t,n){return e===`left`||e===`right`?t.bottom>n.top&&t.top<n.bottom?e:t.bottom<=n.top?`bottom`:`top`:t.right>n.left&&t.left<n.right?e:t.right<=n.left?`right`:`left`}function d(e,t,n,r){let i=e.arrow;if(i.className=`driver-popover-arrow`,i.style.top=``,i.style.right=``,i.style.bottom=``,i.style.left=``,t===`over`){i.classList.add(`driver-popover-arrow-none`);return}let a=r.getBoundingClientRect(),o=e.wrapper.getBoundingClientRect(),s=u(t,a,o);i.classList.add(`driver-popover-arrow-side-${s}`);let d=i.getBoundingClientRect().width||10;if(s===`left`||s===`right`){let e=c(a.top,a.bottom,o.top,o.bottom,n,d);i.style.top=`${l(e,o.height,d)}px`}else{let e=c(a.left,a.right,o.left,o.right,n,d);i.style.left=`${l(e,o.width,d)}px`}}function f(e){return typeof e==`function`?e():typeof e==`string`?document.querySelector(e):e}function p(e){let t=window.getComputedStyle(e);return[t.overflow,t.overflowX,t.overflowY].some(e=>e===`auto`||e===`scroll`)}function m(e,t,n,r){return(e/=r/2)<1?n/2*e*e+t:-n/2*(--e*(e-2)-1)+t}function h(e){let t=`a[href]:not([disabled]), button:not([disabled]), textarea:not([disabled]), input[type=\"text\"]:not([disabled]), input[type=\"radio\"]:not([disabled]), input[type=\"checkbox\"]:not([disabled]), select:not([disabled])`;return e.flatMap(e=>{let n=e.matches(t),r=Array.from(e.querySelectorAll(t));return[...n?[e]:[],...r]}).filter(e=>getComputedStyle(e).pointerEvents!==`none`&&y(e))}function g(e,t){if(!e||v(e))return;let n=e.offsetHeight>window.innerHeight;e.scrollIntoView({behavior:!t||_(e)?`auto`:`smooth`,inline:`center`,block:n?`start`:`center`})}function _(e){if(!e||!e.parentElement)return;let t=e.parentElement;return t.scrollHeight>t.clientHeight}function v(e){let t=e.getBoundingClientRect();return t.top>=0&&t.left>=0&&t.bottom<=(window.innerHeight||document.documentElement.clientHeight)&&t.right<=(window.innerWidth||document.documentElement.clientWidth)}function y(e){return!!(e.offsetWidth||e.offsetHeight||e.getClientRects().length)}function b(e){e&&(e.wrapper.style.display=`none`)}function x(e,t){let r=C();document.body.appendChild(r.wrapper);let{title:i,description:a,showButtons:o,disableButtons:c,showProgress:l,nextBtnText:u,prevBtnText:d,progressText:f}=t;r.nextButton.innerHTML=u,r.previousButton.innerHTML=d,r.progress.innerHTML=f,t.doneButton&&r.nextButton.classList.add(`driver-popover-done-btn`),i?(r.title.innerHTML=i,r.title.style.display=`block`):r.title.style.display=`none`,a?(r.description.innerHTML=a,r.description.style.display=`block`):r.description.style.display=`none`;let p=o.includes(`next`)||o.includes(`previous`)||l;r.closeButton.style.display=o.includes(`close`)?`block`:`none`,p?(r.footer.style.display=`flex`,r.progress.style.display=l?`block`:`none`,r.nextButton.style.display=o.includes(`next`)?`block`:`none`,r.previousButton.style.display=o.includes(`previous`)?`block`:`none`):r.footer.style.display=`none`,c.includes(`next`)&&(r.nextButton.disabled=!0,r.nextButton.classList.add(`driver-popover-btn-disabled`)),c.includes(`previous`)&&(r.previousButton.disabled=!0,r.previousButton.classList.add(`driver-popover-btn-disabled`)),c.includes(`close`)&&(r.closeButton.disabled=!0,r.closeButton.classList.add(`driver-popover-btn-disabled`));let m=r.wrapper;m.style.display=`block`,m.style.left=``,m.style.top=``,m.style.bottom=``,m.style.right=``,m.id=`driver-popover-content`,m.setAttribute(`role`,`dialog`),m.setAttribute(`aria-labelledby`,`driver-popover-title`),m.setAttribute(`aria-describedby`,`driver-popover-description`);let _=r.arrow;_.className=`driver-popover-arrow`,m.className=`driver-popover ${t.popoverClass||``}`.trim(),n(r.wrapper,e=>{let n=e.target;if(n.closest(`.driver-popover-next-btn`))return t.onNextClick?.();if(n.closest(`.driver-popover-prev-btn`))return t.onPrevClick?.();if(n.closest(`.driver-popover-close-btn`))return t.onCloseClick?.()},e=>r.description.contains(e)||r.title.contains(e)?!1:!!e.closest(`.driver-popover-prev-btn, .driver-popover-next-btn, .driver-popover-close-btn`)),t.onRender?.(r),s(r,e,t.position),S(r,e,t.position),g(m,t.smoothScroll);let v=h([m,e]);return v.length>0&&v[0].focus(),r}function S(e,t,n){e.wrapper.querySelectorAll(`img`).forEach(r=>{if(r.complete)return;let i=()=>s(e,t,n);r.addEventListener(`load`,i,{once:!0}),r.addEventListener(`error`,i,{once:!0})})}function C(){let e=document.createElement(`div`);e.classList.add(`driver-popover`);let t=document.createElement(`div`);t.classList.add(`driver-popover-arrow`);let n=document.createElement(`header`);n.id=`driver-popover-title`,n.classList.add(`driver-popover-title`),n.style.display=`none`,n.innerText=`Popover Title`;let r=document.createElement(`div`);r.id=`driver-popover-description`,r.classList.add(`driver-popover-description`),r.style.display=`none`,r.innerText=`Popover description is here`;let i=document.createElement(`button`);i.type=`button`,i.classList.add(`driver-popover-close-btn`),i.setAttribute(`aria-label`,`Close`),i.innerHTML=`×`;let a=document.createElement(`footer`);a.classList.add(`driver-popover-footer`);let o=document.createElement(`span`);o.classList.add(`driver-popover-progress-text`),o.innerText=``;let s=document.createElement(`span`);s.classList.add(`driver-popover-navigation-btns`);let c=document.createElement(`button`);c.type=`button`,c.classList.add(`driver-popover-prev-btn`,`driver-popover-footer-btn`),c.innerHTML=`Previous`;let l=document.createElement(`button`);return l.type=`button`,l.classList.add(`driver-popover-next-btn`,`driver-popover-footer-btn`),l.innerHTML=`Next`,s.appendChild(c),s.appendChild(l),a.appendChild(o),a.appendChild(s),e.appendChild(i),e.appendChild(t),e.appendChild(n),e.appendChild(r),e.appendChild(a),{wrapper:e,arrow:t,title:n,description:r,footer:a,previousButton:c,nextButton:l,closeButton:i,footerButtons:s,progress:o}}function w(e){e&&(r(e.wrapper),e.wrapper.parentElement?.removeChild(e.wrapper))}function T(e,t){let n=window.innerWidth,r=window.innerHeight,i=t.padding,a=t.radius,o=e.width+i*2,s=e.height+i*2,c=Math.min(a,o/2,s/2),l=Math.floor(Math.max(c,0)),u=e.x-i+l,d=e.y-i,f=o-l*2,p=s-l*2;return`M${n},0L0,0L0,${r}L${n},${r}L${n},0Z\n M${u},${d} h${f} a${l},${l} 0 0 1 ${l},${l} v${p} a${l},${l} 0 0 1 -${l},${l} h-${f} a${l},${l} 0 0 1 -${l},-${l} v-${p} a${l},${l} 0 0 1 ${l},-${l} z`}function E(e,t,n,r,i){let a=e.getState(`__activeStagePosition`),o=a||r.getBoundingClientRect(),s=i.getBoundingClientRect();a={x:m(t,o.x,s.x-o.x,n),y:m(t,o.y,s.y-o.y,n),width:m(t,o.width,s.width-o.width,n),height:m(t,o.height,s.height-o.height,n)},A(e,a),e.setState(`__activeStagePosition`,a)}function D(e,t){if(!t)return;let n=t.getBoundingClientRect(),r={x:n.x,y:n.y,width:n.width,height:n.height};e.setState(`__activeStagePosition`,r),A(e,r)}function O(e){let t=e.getState(`__activeStagePosition`),n=e.getState(`__overlaySvg`);if(!t)return;if(!n){console.warn(`No stage svg found.`);return}let r=window.innerWidth,i=window.innerHeight;n.setAttribute(`viewBox`,`0 0 ${r} ${i}`)}function k(e,t){let r=M(e,t);document.body.appendChild(r),n(r,t=>{t.target.tagName===`path`&&e.emit(`overlayClick`)}),e.setState(`__overlaySvg`,r)}function A(e,t){let n=e.getState(`__overlaySvg`);if(!n){k(e,t);return}let r=n.firstElementChild;if(r?.tagName!==`path`)throw Error(`no path element found in stage svg`);r.setAttribute(`d`,T(t,j(e)))}function j(e){return{padding:e.getConfig(`stagePadding`)||0,radius:e.getConfig(`stageRadius`)||0}}function M(e,t){let n=window.innerWidth,r=window.innerHeight,i=document.createElementNS(`http://www.w3.org/2000/svg`,`svg`);i.classList.add(`driver-overlay`,`driver-overlay-animated`),i.setAttribute(`viewBox`,`0 0 ${n} ${r}`),i.setAttribute(`xmlSpace`,`preserve`),i.setAttribute(`xmlnsXlink`,`http://www.w3.org/1999/xlink`),i.setAttribute(`version`,`1.1`),i.setAttribute(`preserveAspectRatio`,`xMinYMin slice`),i.style.fillRule=`evenodd`,i.style.clipRule=`evenodd`,i.style.strokeLinejoin=`round`,i.style.strokeMiterlimit=`2`,i.style.zIndex=`10000`,i.style.position=`fixed`,i.style.top=`0`,i.style.left=`0`,i.style.width=`100%`,i.style.height=`100%`;let a=document.createElementNS(`http://www.w3.org/2000/svg`,`path`);return a.setAttribute(`d`,T(t,j(e))),a.style.fill=e.getConfig(`overlayColor`)||`rgb(0,0,0)`,a.style.opacity=`${e.getConfig(`overlayOpacity`)}`,a.style.pointerEvents=`auto`,a.style.cursor=`auto`,i.appendChild(a),i}function N(e){let t=e.getState(`__overlaySvg`);t&&(r(t),t.remove())}const P=`{{current}} of {{total}}`;function F(e,t){return!(t.skipMissingElement??e.getConfig(`skipMissingElement`))||!t.element?!1:!f(t.element)}function I(e,t,n){let r=e.getConfig(`steps`)||[];for(let i=t;i>=0&&i<r.length;i+=n)if(!F(e,r[i]))return i}function L(e,t){let n=e.getState(`activeIndex`),r=n!==void 0&&I(e,n+1,1)===void 0,i=t?.popover?.onDoneClick||e.getConfig(`onDoneClick`);return r&&i?i:t?.popover?.onNextClick||e.getConfig(`onNextClick`)}function R(e,t){return t?.popover?.onPrevClick||e.getConfig(`onPrevClick`)}function z(e,t){return t?.popover?.onCloseClick||e.getConfig(`onCloseClick`)}function B(e,t,n){let r=e.getConfig(`steps`)||[],i=r[t],a=i.popover||{},o=I(e,t+1,1)!==void 0,s=I(e,t-1,-1)!==void 0,c=a.doneBtnText||e.getConfig(`doneBtnText`)||`Done`,l=e.getConfig(`allowClose`),u=a.showProgress===void 0?e.getConfig(`showProgress`):a.showProgress,d=(a.progressText||e.getConfig(`progressText`)||P).replace(`{{current}}`,`${t+1}`).replace(`{{total}}`,`${r.length}`),f=a.showButtons||e.getConfig(`showButtons`),p=[`next`,`previous`,...l?[`close`]:[]].filter(e=>!f?.length||f.includes(e)),m=a.onNextClick||e.getConfig(`onNextClick`),h=a.onPrevClick||e.getConfig(`onPrevClick`),g=a.onCloseClick||e.getConfig(`onCloseClick`);return{...i,popover:{showButtons:p,nextBtnText:o?void 0:c,disableButtons:[...s?[]:[`previous`]],showProgress:u,onNextClick:m||n.onNextClick,onPrevClick:h||n.onPrevClick,onCloseClick:g||n.onCloseClick,...a,progressText:d}}}function V(e,t,n){let r=e.getConfig(`stagePadding`)||0;return{side:n.popover?.side||`bottom`,align:n.popover?.align||`start`,offset:r+(e.getConfig(`popoverOffset`)||0),padding:r,centered:t.id===`driver-dummy-element`}}function H(e,t,n){let r=n.popover||{},i=e.getState(`activeIndex`),a=i!==void 0&&I(e,i+1,1)===void 0;return{title:r.title,description:r.description,showButtons:r.showButtons||e.getConfig(`showButtons`),disableButtons:r.disableButtons||e.getConfig(`disableButtons`)||[],showProgress:r.showProgress||e.getConfig(`showProgress`)||!1,progressText:r.progressText??(e.getConfig(`progressText`)||P),nextBtnText:r.nextBtnText??(e.getConfig(`nextBtnText`)||`Next`),prevBtnText:r.prevBtnText??(e.getConfig(`prevBtnText`)||`Previous`),doneButton:a,popoverClass:r.popoverClass||e.getConfig(`popoverClass`)||``,smoothScroll:e.getConfig(`smoothScroll`),onNextClick:()=>{let r=L(e,n);return r?r(t,n,e.getHookOpts()):e.emit(`nextClick`)},onPrevClick:()=>{let r=R(e,n);return r?r(t,n,e.getHookOpts()):e.emit(`prevClick`)},onCloseClick:()=>{let r=z(e,n);return r?r(t,n,e.getHookOpts()):e.emit(`closeClick`)},onRender:t=>{e.setState(`popover`,t),(r.onPopoverRender||e.getConfig(`onPopoverRender`))?.(t,e.getHookOpts())},position:V(e,t,n)}}function U(e,t,n){w(e.getState(`popover`)),x(t,H(e,t,n))}function W(e,t,n){let r=e.getState(`popover`);r&&s(r,t,V(e,t,n))}function G(){let e=document.getElementById(`driver-dummy-element`);if(e)return e;let t=document.createElement(`div`);return t.id=`driver-dummy-element`,t.style.width=`0`,t.style.height=`0`,t.style.pointerEvents=`none`,t.style.opacity=`0`,t.style.position=`fixed`,t.style.top=`50%`,t.style.left=`50%`,document.body.appendChild(t),t}function K(e,t){let n=f(t.element);n||(n=G()),J(e,n,t)}function q(e){let t=e.getState(`__activeElement`),n=e.getState(`__activeStep`);t&&(D(e,t),O(e),W(e,t,n))}function J(e,t,n){let r=e.getConfig(`duration`)||400,i=Date.now(),a=e.getState(`__activeStep`),o=e.getState(`__activeElement`)||t,s=!o||o===t,c=t.id===`driver-dummy-element`,l=o.id===`driver-dummy-element`,u=e.getConfig(`animate`),d=n.onHighlightStarted||e.getConfig(`onHighlightStarted`),f=n?.onHighlighted||e.getConfig(`onHighlighted`),m=a?.onDeselected||e.getConfig(`onDeselected`),h=e.getHookOpts();!s&&m&&m(l?void 0:o,a,h),d&&d(c?void 0:t,n,h);let _=!s&&u,v=!1;b(e.getState(`popover`)),e.setState(`previousStep`,a),e.setState(`previousElement`,o),e.setState(`activeStep`,n),e.setState(`activeElement`,t);let y=()=>{if(e.getState(`__transitionCallback`)!==y)return;let s=Date.now()-i,l=r-s<=r/2;n.popover&&l&&!v&&_&&(U(e,t,n),v=!0),e.getConfig(`animate`)&&s<r?E(e,s,r,o,t):(D(e,t),f&&f(c?void 0:t,n,e.getHookOpts()),e.setState(`__transitionCallback`,void 0),e.setState(`__previousStep`,a),e.setState(`__previousElement`,o),e.setState(`__activeStep`,n),e.setState(`__activeElement`,t)),window.requestAnimationFrame(y)};e.setState(`__transitionCallback`,y),window.requestAnimationFrame(y),g(t,e.getConfig(`smoothScroll`)),!_&&n.popover&&U(e,t,n),document.querySelectorAll(`.driver-active-element-parent`).forEach(e=>{e.classList.remove(`driver-active-element-parent`,`driver-active-element-parent-no-scroll`)}),o.classList.remove(`driver-active-element`,`driver-no-interaction`),o.removeAttribute(`aria-haspopup`),o.removeAttribute(`aria-expanded`),o.removeAttribute(`aria-controls`),(n.disableActiveInteraction??e.getConfig(`disableActiveInteraction`))&&t.classList.add(`driver-no-interaction`);let x=t.parentElement;x&&x!==document.body&&(x.classList.add(`driver-active-element-parent`),p(x)&&x.classList.add(`driver-active-element-parent-no-scroll`)),t.classList.add(`driver-active-element`),t.setAttribute(`aria-haspopup`,`dialog`),t.setAttribute(`aria-expanded`,`true`),t.setAttribute(`aria-controls`,`driver-popover-content`)}function Y(){document.getElementById(`driver-dummy-element`)?.remove(),document.querySelectorAll(`.driver-active-element`).forEach(e=>{let t=e.parentElement;t&&t!==document.body&&t.classList.remove(`driver-active-element-parent`,`driver-active-element-parent-no-scroll`),e.classList.remove(`driver-active-element`,`driver-no-interaction`),e.removeAttribute(`aria-haspopup`),e.removeAttribute(`aria-expanded`),e.removeAttribute(`aria-controls`)})}function X(e){let t=e.getState(`__resizeTimeout`);t&&window.cancelAnimationFrame(t),e.setState(`__resizeTimeout`,window.requestAnimationFrame(()=>q(e)))}function Z(e,t){if(!e.getState(`isInitialized`)||!(t.key===`Tab`||t.keyCode===9))return;let n=e.getState(`__activeElement`),r=e.getState(`popover`)?.wrapper,i=h([...r?[r]:[],...n?[n]:[]]),a=i[0],o=i[i.length-1];t.preventDefault(),t.shiftKey?(i[i.indexOf(document.activeElement)-1]||o)?.focus():(i[i.indexOf(document.activeElement)+1]||a)?.focus()}function Q(e,t){(e.getConfig(`allowKeyboardControl`)??!0)&&(t.key===`Escape`?e.emit(`escapePress`):t.key===`ArrowRight`?e.emit(`arrowRightPress`):t.key===`ArrowLeft`&&e.emit(`arrowLeftPress`))}function $(e,t){let n=e.getState(`__activeElement`),r=t.target;!n||!r||!n.contains(r)||e.emit(`activeElementClick`)}function ee(e){let t=t=>Q(e,t),n=t=>Z(e,t),r=()=>X(e),i=()=>X(e),a=t=>$(e,t);e.setState(`__events`,{onKeyup:t,onKeydown:n,onResize:r,onScroll:i,onClick:a}),window.addEventListener(`keyup`,t,!1),window.addEventListener(`keydown`,n,!1),window.addEventListener(`resize`,r),window.addEventListener(`scroll`,i),document.addEventListener(`click`,a,!1)}function te(e){let t=e.getState(`__events`);t&&(window.removeEventListener(`keyup`,t.onKeyup),window.removeEventListener(`keydown`,t.onKeydown),window.removeEventListener(`resize`,t.onResize),window.removeEventListener(`scroll`,t.onScroll),document.removeEventListener(`click`,t.onClick,!1))}function ne(){let e={};function t(t={}){e={animate:!0,duration:400,allowClose:!0,allowScroll:!0,overlayClickBehavior:`close`,overlayOpacity:.7,smoothScroll:!1,disableActiveInteraction:!1,advanceOnClick:!1,skipMissingElement:!1,waitForElement:0,showProgress:!1,stagePadding:10,stageRadius:5,popoverOffset:10,showButtons:[`next`,`previous`,`close`],disableButtons:[],overlayColor:`#000`,...t}}return t(),{getConfig:(t=>t?e[t]:e),configure:t}}function re(){let e={},t=(t=>t?e[t]:e),n=(t,n)=>{e[t]=n};function r(){e={}}return{getState:t,setState:n,resetState:r}}function ie(){let e={};function t(t,n){e[t]=n}function n(t){e[t]?.()}function r(){e={}}return{listen:t,emit:n,reset:r}}function ae(e={}){let t=ne();t.configure(e);let n=re(),r=ie(),i;return{getConfig:t.getConfig,setConfig:t.configure,getState:n.getState,setState:n.setState,resetState:n.resetState,listen:r.listen,emit:r.emit,resetEmitter:r.reset,getDriver:()=>i,setDriver:e=>{i=e},getHookOpts:e=>{let r=e||n.getState();return{config:t.getConfig(),state:r,driver:i,index:r.activeIndex}}}}function oe(e={}){let t=ae(e);function n(){t.getConfig(`allowClose`)&&h()}function r(){let e=t.getConfig(`overlayClickBehavior`);if(t.getConfig(`allowClose`)&&e===`close`){h();return}if(typeof e==`function`){let n=t.getState(`__activeStep`);e(t.getState(`__activeElement`),n,t.getHookOpts());return}if(e===`nextStep`){let e=t.getState(`activeStep`),n=t.getState(`activeElement`),r=L(t,e);if(r){r(n,e,t.getHookOpts());return}i()}}function i(){let e=t.getState(`activeIndex`),n=t.getConfig(`steps`)||[];if(e===void 0)return;let r=e+1;n[r]?m(r):h()}function a(){let e=t.getState(`activeIndex`),n=t.getConfig(`steps`)||[];if(e===void 0)return;let r=e-1;n[r]?m(r):h()}function o(e){(t.getConfig(`steps`)||[])[e]?m(e):h()}function s(){if(t.getState(`__transitionCallback`))return;let e=t.getState(`__activeStep`);if(!e||!(e.advanceOnClick??t.getConfig(`advanceOnClick`)))return;let n=t.getState(`__activeElement`),r=L(t,e);if(r){r(n,e,t.getHookOpts());return}i()}function c(){if(t.getState(`__transitionCallback`))return;let e=t.getState(`activeIndex`),n=t.getState(`__activeStep`),r=t.getState(`__activeElement`);if(e===void 0||n===void 0||!(t.getConfig(`steps`)||[])[e-1])return;let i=R(t,n);if(i)return i(r,n,t.getHookOpts());a()}function l(){if(t.getState(`__transitionCallback`))return;let e=t.getState(`activeIndex`),n=t.getState(`__activeStep`),r=t.getState(`__activeElement`);if(e===void 0||n===void 0)return;let a=L(t,n);if(a)return a(r,n,t.getHookOpts());i()}function u(){t.getState(`isInitialized`)||(t.setState(`isInitialized`,!0),document.body.classList.add(`driver-active`,t.getConfig(`animate`)?`driver-fade`:`driver-simple`),t.getConfig(`allowScroll`)||document.body.classList.add(`driver-no-scroll`),document.body.style.setProperty(`--driver-animation-duration`,`${t.getConfig(`duration`)||400}ms`),ee(t),t.listen(`overlayClick`,r),t.listen(`activeElementClick`,s),t.listen(`escapePress`,n),t.listen(`closeClick`,n),t.listen(`arrowLeftPress`,c),t.listen(`arrowRightPress`,l))}function d(){let e=t.getState(`__pendingWaitCancel`);e&&(t.setState(`__pendingWaitCancel`,void 0),e())}function p(e,n,r){let i=()=>{a.disconnect(),window.clearTimeout(o),t.setState(`__pendingWaitCancel`,void 0),r()},a=new MutationObserver(()=>{f(e.element)&&i()}),o=window.setTimeout(i,n);t.setState(`__pendingWaitCancel`,()=>{a.disconnect(),window.clearTimeout(o)}),a.observe(document.documentElement,{childList:!0,subtree:!0,attributes:!0})}function m(e=0,n=!1){d();let r=t.getConfig(`steps`);if(!r){console.error(`No steps to drive through`),h();return}if(!r[e]){h();return}let i=r[e],a=i.waitForElement??t.getConfig(`waitForElement`)??0;if(!n&&a>0&&i.element&&!f(i.element)){p(i,a,()=>m(e,!0));return}if(F(t,i)){let n=t.getState(`activeIndex`),i=typeof n==`number`&&e<n?-1:1;r[e+i]?m(e+i):i===1&&h();return}t.setState(`__activeOnDestroyed`,document.activeElement),t.setState(`activeIndex`,e);let o=r[e+1];K(t,B(t,e,{onNextClick:()=>{o?m(e+1):h()},onPrevClick:()=>{m(e-1)},onCloseClick:()=>{h()}}))}function h(e=!0){let n=t.getState(`__activeElement`),r=t.getState(`__activeStep`),i=t.getState(`__activeOnDestroyed`),a=t.getConfig(`onDestroyStarted`);if(e&&a){a(!n||n?.id===`driver-dummy-element`?void 0:n,r,t.getHookOpts());return}let o=r?.onDeselected||t.getConfig(`onDeselected`),s=t.getConfig(`onDestroyed`);document.body.classList.remove(`driver-active`,`driver-fade`,`driver-simple`,`driver-no-scroll`),document.body.style.removeProperty(`--driver-animation-duration`),d(),te(t),w(t.getState(`popover`)),Y(),N(t),t.resetEmitter();let c=t.getState();if(t.resetState(),n&&r){let e=n.id===`driver-dummy-element`;o&&o(e?void 0:n,r,t.getHookOpts(c)),s&&s(e?void 0:n,r,t.getHookOpts(c))}i&&i.focus()}let g={isActive:()=>t.getState(`isInitialized`)||!1,refresh:()=>X(t),drive:(e=0)=>{u(),m(e)},setConfig:t.setConfig,setSteps:e=>{d(),t.resetState(),t.setConfig({...t.getConfig(),steps:e})},getConfig:t.getConfig,getState:t.getState,getActiveIndex:()=>t.getState(`activeIndex`),isFirstStep:()=>{let e=t.getState(`activeIndex`);return e!==void 0&&I(t,e-1,-1)===void 0},isLastStep:()=>{let e=t.getState(`activeIndex`);return e!==void 0&&I(t,e+1,1)===void 0},getActiveStep:()=>t.getState(`activeStep`),getActiveElement:()=>t.getState(`activeElement`),getPreviousElement:()=>t.getState(`previousElement`),getPreviousStep:()=>t.getState(`previousStep`),getNextStep:()=>{let e=t.getConfig(`steps`)||[],n=t.getState(`activeIndex`);if(n===void 0)return;let r=I(t,n+1,1);return r===void 0?void 0:e[r]},moveNext:i,movePrevious:a,moveTo:o,hasNextStep:()=>{let e=t.getState(`activeIndex`);return e!==void 0&&I(t,e+1,1)!==void 0},hasPreviousStep:()=>{let e=t.getState(`activeIndex`);return e!==void 0&&I(t,e-1,-1)!==void 0},highlight:e=>{u(),K(t,{...e,popover:e.popover?{showButtons:[],showProgress:!1,progressText:``,...e.popover}:void 0})},destroy:()=>{h(!1)}};return t.setDriver(g),g}export{oe as driver};","import { driver } from 'driver.js';\nimport \"driver.js/dist/driver.css\";\n\ntype StepItem = {\n // 引导元素\n element: string;\n popover: {\n // 标题\n title: string;\n // 描述\n description: string;\n }\n}\n\ntype Data = Array<{\n // 当前引导的步骤\n steps: Array<StepItem>;\n // 当前引导的条件,成立则运行引导,否则进行下一个引导\n condition?: () => boolean;\n // 引导打开时调用\n onOpen?: () => void;\n id: String;\n}>\n\n/** 当前正在展示的 driver 实例与索引,防止重复调用导致多个引导同时打开 */\nlet activeDriver: ReturnType<typeof driver> | null = null;\n\n/** \n * ✅ 新增:在模块作用域保存最新的 data \n * 这样即使 driverRender 被拦截,onDestroyed 也能拿到最新的数据\n */\nlet latestData: Data = [];\n\n/**\n * 用于渲染引导\n * @param data 引导数据,数组结构,每一项为一个引导\n */\nexport default function driverRender(data: Data) {\n // ✅ 每次调用时,无论是否被拦截,都先更新最新的 data\n latestData = data;\n\n // 已有引导正在展示\n if (activeDriver) {\n return;\n }\n\n const renderGuide = (index: number) => {\n // ✅ 每次执行时,都从外部读取最新的 data\n const currentData = latestData;\n\n if (index >= currentData.length) {\n activeDriver = null;\n return;\n }\n\n const current = currentData[index];\n\n // 检查 condition,若不成立则跳过当前引导,渲染下一个\n if (current.condition && !current.condition()) {\n renderGuide(index + 1);\n return;\n }\n\n current?.onOpen?.();\n\n const driverObj = driver({\n nextBtnText: '下一步',\n prevBtnText: '上一步',\n doneBtnText: '我知道了',\n showProgress: true,\n allowClose: false,\n progressText: '第 {{current}} 步,共 {{total}} 步',\n onDestroyed: () => {\n activeDriver = null;\n renderGuide(index + 1);\n },\n steps: current.steps,\n });\n activeDriver = driverObj;\n driverObj.drive();\n };\n\n renderGuide(0);\n}\n","import React, { useState, useRef, useEffect, useCallback, forwardRef } from \"react\";\nimport { createRoot } from \"react-dom/client\";\nimport { downloadSVG, downloadSVGAsPNG } from \"@/utils/download\";\nimport {\n PlusOutlined, MinusOutlined,\n FullscreenOutlined, FullscreenExitOutlined,\n DownloadOutlined, ReloadOutlined, CodeOutlined,\n UpOutlined, DownOutlined,\n ImportOutlined, ExportOutlined, LoadingOutlined\n} from \"@ant-design/icons\";\nimport { useTheme, ThemeProvider } from \"@/hooks/useTheme\";\nimport customMessage from \"@/components/CustomMessage\";\nimport CustomTooltip from \"@/components/CustomTooltip\";\nimport CustomDropdown from \"@/components/CustomDropdown\";\nimport CustomModal from \"@/components/CustomModal\";\nimport useMermaidRender from \"./useMermaidRender\";\nimport usePanzoom from \"./usePanzoom\";\nimport style from \"./index.module.less\";\nimport '@/assets/css/index.global.less';\nimport classNames from \"classnames/bind\";\nimport { IsPC } from 'methods-r';\nimport mermaidSvg from '../../assets/svg/mermaid.svg'\nimport driverRender from \"../../utils/driver\";\nimport RenderMarkdown from \"../RenderMarkdown\";\n\nconst mermaidDriverKey = 'docList-mermaid-driver';\nconst menuDriverKey = 'docList-menu-driver';\nconst menuPcDriverKey = 'docList-pc-menu-driver';\n\n/**\n * 工具栏按钮项接口\n */\ninterface ToolbarItem {\n /** 是否显示 */\n isShow?: boolean;\n /** 图标 */\n icon: React.ReactNode;\n /** 提示文本 */\n tooltip: string;\n /** 点击回调 */\n onClick?: () => void;\n /** 下拉菜单配置 */\n dropdown?: {\n items: Array<{ key: string; label: string }>;\n onClick: ({ key }: { key: string }) => void;\n };\n /** 自定义类名 */\n className?: string;\n}\n\ninterface MermaidRendererProps {\n source: string;\n debounceMs?: number;\n enablePanzoom?: boolean;\n showDownload?: boolean;\n showSourceView?: boolean;\n showCollapse?: boolean;\n defaultCollapsed?: boolean;\n className?: string;\n minHeight?: number;\n}\n\n// ==================== 统一 Mermaid 渲染组件 ====================\nconst MermaidRenderer = forwardRef<null, MermaidRendererProps>(function MermaidRenderer({\n source,\n debounceMs = 300,\n enablePanzoom = true,\n showDownload = true,\n showSourceView = false,\n showCollapse = false,\n defaultCollapsed = true,\n className = \"\",\n minHeight = 200,\n}) {\n\n const titleMatch = source.match(/---\\s*\\n\\s*title:\\s*(.+)\\s*\\n\\s*---/);\n const title = titleMatch ? titleMatch[1].trim() : 'mermaid 图表';\n const { isDark } = useTheme();\n\n const { svg, error, loading } = useMermaidRender({ source, debounceMs, isDark });\n const [isFullscreen, setIsFullscreen] = useState(false);\n const [isCollapsed, setIsCollapsed] = useState(defaultCollapsed);\n const [showSource, setShowSource] = useState(false);\n const [isMinimize, setIsMinimize] = useState(showSourceView);\n\n const wrapperRef = useRef<HTMLDivElement>(null);\n const contentRef = useRef<HTMLDivElement>(null);\n const isPanzoomActive = enablePanzoom && (isFullscreen || !isCollapsed || !showCollapse);\n const panzoomRef = usePanzoom({\n contentRef, wrapperRef,\n enabled: isPanzoomActive && !!svg,\n svg, isFullscreen,\n });\n\n useEffect(() => {\n driverRender([\n {\n id: menuDriverKey,\n condition: () => !localStorage[menuDriverKey] && showSourceView && !IsPC() && localStorage.docListMenuVisible !== 'true',\n onOpen: () => localStorage[menuDriverKey] = 1,\n steps: [\n { element: '.docList-menu-anchor', popover: { title: '大纲', description: '点击此处您可查看大纲' } },\n { element: '.docList-menu-list', popover: { title: '列表', description: '点击此处您可查看当前分类下文章列表' } },\n { element: '.docList-menu-copyHtml', popover: { title: '复制', description: '点击此处您可复制 HTML 渲染的格式内容' } },\n { element: '.docList-menu-copyMarkdown', popover: { title: '复制', description: '点击此处您可复制 markdown 源码' } },\n ]\n },\n {\n id: menuPcDriverKey,\n condition: () => !localStorage[menuPcDriverKey] && IsPC() && showSourceView,\n onOpen: () => localStorage[menuPcDriverKey] = 1,\n steps: [\n { element: '.docList-menu-copyHtml', popover: { title: '复制', description: '点击此处您可复制 HTML 渲染的格式内容' } },\n { element: '.docList-menu-copyMarkdown', popover: { title: '复制', description: '点击此处您可复制 markdown 源码' } },\n ]\n },\n {\n id: mermaidDriverKey,\n condition: () => {\n const result = svg && !localStorage[mermaidDriverKey] && showSourceView;\n return result\n },\n onOpen: () => localStorage[mermaidDriverKey] = 1,\n steps: [\n { element: '.mermaid-react-root .mermaid-mini', popover: { title: 'mermaid', description: '恭喜您解锁 Mermaid 渲染图表' } },\n { element: '.mermaid-react-root .mermaid-mini .mermaid-minimize-btn', popover: { title: '缩略图', description: '点击此处按钮可查看缩略图' } },\n { element: '.mermaid-react-root .mermaid-mini .mermaid-fullscreen-btn', popover: { title: '全屏', description: '点击此处按钮可切换为全屏展示' } },\n { element: '.mermaid-react-root .mermaid-mini .mermaid-showcode-btn', popover: { title: '源码', description: '点击此处按钮查看源码弹窗' } },\n { element: '.mermaid-react-root .mermaid-mini .mermaid-collapsed-btn', popover: { title: '展开', description: '点击此处按钮展开大图' } },\n ]\n }\n ])\n }, [svg])\n\n // 监听原生全屏状态\n useEffect(() => {\n const handler = () => {\n setIsFullscreen(!!document.fullscreenElement);\n if (!document.fullscreenElement && showCollapse) {\n setIsCollapsed(true);\n }\n };\n document.addEventListener(\"fullscreenchange\", handler);\n return () => document.removeEventListener(\"fullscreenchange\", handler);\n }, [showCollapse]);\n\n const handleDownloadSVG = useCallback(() => {\n if (!svg) { customMessage.warning(\"暂无图表\"); return; }\n downloadSVG(svg, title);\n }, [svg]);\n\n const handleDownloadPNG = useCallback(() => {\n if (!svg) { customMessage.warning(\"暂无图表\"); return; }\n downloadSVGAsPNG(svg, title, 2);\n }, [svg]);\n\n const downloadMenu = {\n items: [\n { key: \"svg\", label: \"下载 SVG\" },\n { key: \"png\", label: \"下载 PNG\" },\n ],\n onClick: ({ key }: { key: string }) => (key === \"svg\" ? handleDownloadSVG() : handleDownloadPNG()),\n };\n\n const hasDiagram = !!svg;\n\n return (\n <div\n ref={wrapperRef}\n className={\n classNames.bind(style)(\n showCollapse ? \"mermaid-wrapper\" : \"\",\n isCollapsed && showCollapse && !isMinimize ? \" mermaid-collapsed\" : \"\",\n className,\n isMinimize && isCollapsed && !isFullscreen ? 'mermaid-mini' : ''\n )\n }\n style={{ minHeight: isMinimize ? 0 : minHeight, position: \"relative\", height: '100%' }}\n >\n {/* 工具栏 */}\n {\n showSourceView && <div className=\"mermaid-title\">\n <span className=\"mermaid-title-tag\">\n <img src={mermaidSvg} alt=\"\" />\n <span className=\"mermaid-title-text\">Mermaid</span>\n </span>\n {title}\n </div>\n }\n {!hasDiagram && <div className=\"mermaid-toolbar-loading\"><LoadingOutlined /> </div>}\n {hasDiagram && (\n <div className=\"mermaid-toolbar\">\n {[\n {\n isShow: showSourceView && isCollapsed && !isFullscreen,\n icon: isMinimize ? <ExportOutlined /> : <ImportOutlined />,\n tooltip: isMinimize ? '缩略图' : '最小化',\n onClick: () => setIsMinimize((prev: boolean) => !prev),\n className: 'mermaid-minimize-btn',\n },\n {\n isShow: isPanzoomActive,\n icon: <PlusOutlined />,\n tooltip: '放大',\n onClick: () => panzoomRef.current?.zoomIn(),\n },\n {\n isShow: isPanzoomActive,\n icon: <MinusOutlined />,\n tooltip: '缩小',\n onClick: () => panzoomRef.current?.zoomOut(),\n },\n {\n isShow: isPanzoomActive,\n icon: <ReloadOutlined />,\n tooltip: '重置',\n onClick: () => panzoomRef.current?.reset(),\n },\n {\n isShow: showDownload && isPanzoomActive,\n icon: <DownloadOutlined />,\n tooltip: '下载',\n dropdown: downloadMenu,\n },\n {\n isShow: true,\n icon: isFullscreen ? <FullscreenExitOutlined /> : <FullscreenOutlined />,\n tooltip: isFullscreen ? '退出全屏' : '全屏',\n onClick: () => {\n panzoomRef.current?.reset()\n if (document.fullscreenElement) document.exitFullscreen();\n else wrapperRef.current?.requestFullscreen?.();\n },\n className: 'mermaid-fullscreen-btn',\n },\n {\n isShow: showSourceView && !isFullscreen,\n icon: <CodeOutlined />,\n tooltip: '查看源码',\n onClick: () => setShowSource(true),\n className: 'mermaid-showcode-btn',\n },\n {\n isShow: showCollapse && !isFullscreen,\n icon: isCollapsed ? <DownOutlined /> : <UpOutlined />,\n tooltip: isCollapsed ? '展开' : '收起',\n onClick: () => setIsCollapsed((prev: boolean) => !prev),\n className: 'mermaid-collapsed-btn',\n },\n ].filter(Boolean).map((item: ToolbarItem, index: number) => {\n if (item.isShow === false) return null;\n const btn = item.dropdown ? (\n <CustomDropdown key={index} items={item.dropdown.items} onClick={item.dropdown.onClick}>\n <div className={`circle ${item.className ? ` ${item.className}` : ''}`}>{item.icon}</div>\n </CustomDropdown>\n ) : (\n <div key={index} className={`circle ${item.className ? ` ${item.className}` : ''}`} onClick={item.onClick}>\n {item.icon}\n </div>\n );\n return item.tooltip && IsPC() ? (\n <CustomTooltip key={index} title={item.tooltip}>\n {btn}\n </CustomTooltip>\n ) : btn;\n })}\n </div>\n )}\n\n {/* 错误提示 */}\n {error && <div className={style.errorTip}>⚠️ {error}</div>}\n\n {/* 预览区域 */}\n <div className={style.previewArea} style={{ minHeight: hasDiagram ? \"auto\" : minHeight }}>\n <div\n ref={contentRef}\n className={style.previewContent}\n dangerouslySetInnerHTML={{ __html: svg || \"\" }}\n />\n {((!hasDiagram && !error) || loading) && (\n <div className={style.emptyTip}>\n {source?.trim() ? \"渲染中...\" : \"\\u2190 输入 Mermaid 源码\"}\n </div>\n )}\n </div>\n\n {/* 源码弹窗 */}\n {showSourceView && (\n <CustomModal\n open={showSource}\n title=\"Mermaid 源码\"\n className=\"mermaid-code-modal\"\n width={800}\n destroyOnClose\n onCancel={() => setShowSource(false)}\n footer={null}\n >\n <RenderMarkdown isShowCollapsed={false} isSlotMermaid={false} codeType='mermaid' content={source} />\n </CustomModal>\n )}\n </div>\n );\n});\n\n// ==================== DOM 扫描入口(文档页使用) ====================\nasync function renderMermaidWithControls() {\n const blocks = document.querySelectorAll(\"code.language-mermaid\");\n\n\n for (const block of blocks) {\n const pre = block.parentElement;\n if (!pre) return;\n const source = block.textContent.trim();\n\n const container = document.createElement(\"div\");\n container.className = \"mermaid-react-root\";\n pre.replaceWith(container);\n\n const root = createRoot(container);\n\n root.render(\n <React.StrictMode>\n <ThemeProvider>\n <MermaidRenderer\n source={source}\n enablePanzoom\n showDownload\n showSourceView\n showCollapse\n defaultCollapsed\n minHeight={200}\n />\n </ThemeProvider>\n </React.StrictMode>\n );\n }\n}\n\nexport default MermaidRenderer;\nexport { renderMermaidWithControls };\n"],"x_google_ignoreList":[12,16],"mappings":"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"}
|