Files
server-configs/siyuan/data/widgets/Kmind/js/chunk-1ab5e92d.js
2026-02-13 22:24:27 +08:00

1 line
73 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
(window["webpackJsonp"]=window["webpackJsonp"]||[]).push([["chunk-1ab5e92d"],{"19aa":function(t,e,a){"use strict";var i=a("3a9b"),s=TypeError;t.exports=function(t,e){if(i(e,t))return t;throw new s("Incorrect invocation")}},"63d9":function(t,e,a){},8776:function(t,e,a){"use strict";a("63d9")},b7ef:function(t,e,a){"use strict";var i=a("23e7"),s=a("da84"),o=a("d066"),n=a("5c6c"),l=a("9bf2").f,r=a("1a2d"),d=a("19aa"),c=a("7156"),h=a("e391"),u=a("cf98"),p=a("0d26"),m=a("83ab"),g=a("c430"),y="DOMException",v=o("Error"),b=o(y),f=function(){d(this,w);var t=arguments.length,e=h(t<1?void 0:arguments[0]),a=h(t<2?void 0:arguments[1],"Error"),i=new b(e,a),s=new v(e);return s.name=y,l(i,"stack",n(1,p(s.stack,1))),c(i,this,f),i},w=f.prototype=b.prototype,x="stack"in new v(y),L="stack"in new b(1,2),M=b&&m&&Object.getOwnPropertyDescriptor(s,y),C=!!M&&!(M.writable&&M.configurable),_=x&&!C&&!L;i({global:!0,constructor:!0,forced:g||_},{DOMException:_?f:b});var S=o(y),D=S.prototype;if(D.constructor!==S)for(var T in g||l(D,"constructor",n(1,S)),u)if(r(u,T)){var k=u[T],R=k.s;r(S,R)||l(S,R,n(6,k.c))}},bd8c:function(t,e,a){"use strict";a.r(e);var i=function(){var t=this,e=t._self._c;return e("div",{staticClass:"test-container"},[e("div",{staticClass:"test-main"},[e("div",{staticClass:"control-panel"},[e("div",{staticClass:"panel-section"},[e("h3",[t._v("基础操作")]),e("div",{staticClass:"button-group"},[e("el-button",{attrs:{type:"primary"},on:{click:t.initMindMap}},[t._v("重新初始化")]),e("el-button",{attrs:{type:"success"},on:{click:t.loadSingleRoot}},[t._v("加载单根")]),e("el-button",{attrs:{type:"warning"},on:{click:t.loadMultiRoot}},[t._v("加载多根")]),e("el-button",{attrs:{type:"info"},on:{click:t.toggleMultiRootMode}},[t._v("切换模式")])],1)]),e("div",{staticClass:"panel-section"},[e("h3",[t._v("根节点操作")]),e("div",{staticClass:"button-group"},[e("el-button",{on:{click:t.addNewRoot}},[t._v("添加根节点")]),e("el-button",{on:{click:t.removeLastRoot}},[t._v("删除最后根节点")]),e("el-button",{on:{click:t.addRootWithCustomPosition}},[t._v("添加自定义位置根节点")])],1)]),e("div",{staticClass:"panel-section"},[e("h3",[t._v("关联线测试")]),e("div",{staticClass:"button-group"},[e("el-button",{attrs:{type:"primary"},on:{click:t.enterAssociativeMode}},[t._v("进入关联线模式")]),e("el-button",{attrs:{type:"success"},on:{click:t.createCrossRootAssociation}},[t._v("创建跨根关联线")]),e("el-button",{attrs:{type:"warning"},on:{click:t.showAllAssociations}},[t._v("显示所有关联线")]),e("el-button",{attrs:{type:"danger"},on:{click:t.clearAllAssociations}},[t._v("清除所有关联线")])],1)]),e("div",{staticClass:"panel-section"},[e("h3",[t._v("日志系统测试")]),e("div",{staticClass:"button-group"},[e("el-button",{attrs:{type:"primary"},on:{click:t.testLoggerDebug}},[t._v("测试 DEBUG")]),e("el-button",{attrs:{type:"success"},on:{click:t.testLoggerInfo}},[t._v("测试 INFO")]),e("el-button",{attrs:{type:"warning"},on:{click:t.testLoggerWarn}},[t._v("测试 WARN")]),e("el-button",{attrs:{type:"danger"},on:{click:t.testLoggerError}},[t._v("测试 ERROR")])],1),e("div",{staticClass:"button-group",staticStyle:{"margin-top":"10px"}},[e("el-button",{attrs:{type:"info"},on:{click:t.testClickableLinks}},[t._v("测试链接格式")]),e("el-button",{attrs:{type:"primary"},on:{click:t.detectEnvironment}},[t._v("检测环境")])],1),e("div",{staticClass:"association-tips"},[e("el-alert",{attrs:{title:"关联线使用提示",type:"info",closable:!1,"show-icon":""}},[e("p",[t._v("1. 先点击选择起始节点")]),e("p",[t._v('2. 点击"进入关联线模式"')]),e("p",[t._v("3. 再点击目标节点创建关联线")]),e("p",[t._v("4. 支持跨根节点创建关联线")]),e("p",[t._v("5. 按ESC退出关联线模式")])])],1)]),e("div",{staticClass:"panel-section"},[e("h3",[t._v("状态信息")]),e("div",{staticClass:"status-info"},[e("el-tag",{attrs:{type:t.isMultiRoot?"success":"info"}},[t._v(" 模式: "+t._s(t.isMultiRoot?"多根节点":"单根节点")+" ")]),e("el-tag",{attrs:{type:"primary"}},[t._v("根节点数: "+t._s(t.rootCount))]),e("el-tag",{attrs:{type:"warning"}},[t._v("关联线数: "+t._s(t.associationCount))]),e("el-tag",{attrs:{type:t.isAssociativeMode?"danger":"info"}},[t._v(" "+t._s(t.isAssociativeMode?"关联线模式":"普通模式")+" ")])],1)]),e("div",{staticClass:"panel-section"},[e("h3",[t._v("主题设置")]),e("div",{staticClass:"theme-controls"},[t.isMultiRoot?e("div",[e("el-select",{staticStyle:{width:"100%","margin-bottom":"8px"},attrs:{placeholder:"选择根节点",size:"small"},model:{value:t.selectedRootIndex,callback:function(e){t.selectedRootIndex=e},expression:"selectedRootIndex"}},t._l(t.rootsInfo,(function(t,a){return e("el-option",{key:a,attrs:{label:`根节点 ${a+1}: ${t.text}`,value:a}})})),1)],1):t._e(),e("el-select",{staticStyle:{width:"100%","margin-bottom":"8px"},attrs:{placeholder:"选择主题",size:"small"},on:{change:t.applyTheme},model:{value:t.selectedTheme,callback:function(e){t.selectedTheme=e},expression:"selectedTheme"}},t._l(t.availableThemes,(function(t){return e("el-option",{key:t,attrs:{label:t,value:t}})})),1),e("el-button",{staticStyle:{width:"100%"},attrs:{size:"small",type:"primary"},on:{click:t.resetTheme}},[t._v(" 重置为默认主题 ")])],1)]),e("div",{staticClass:"panel-section"},[e("h3",[t._v("布局设置")]),e("div",{staticClass:"layout-controls"},[t.isMultiRoot?e("div",[e("el-select",{staticStyle:{width:"100%","margin-bottom":"8px"},attrs:{placeholder:"选择根节点",size:"small"},model:{value:t.selectedLayoutRootIndex,callback:function(e){t.selectedLayoutRootIndex=e},expression:"selectedLayoutRootIndex"}},t._l(t.rootsInfo,(function(t,a){return e("el-option",{key:a,attrs:{label:`根节点 ${a+1}: ${t.text}`,value:a}})})),1)],1):t._e(),e("el-select",{staticStyle:{width:"100%","margin-bottom":"8px"},attrs:{placeholder:"选择布局",size:"small"},on:{change:t.applyLayout},model:{value:t.selectedLayout,callback:function(e){t.selectedLayout=e},expression:"selectedLayout"}},t._l(t.availableLayouts,(function(t){return e("el-option",{key:t.value,attrs:{label:t.label,value:t.value}})})),1),e("el-button",{staticStyle:{width:"100%"},attrs:{size:"small",type:"primary"},on:{click:t.resetLayout}},[t._v(" 重置为默认布局 ")])],1)]),e("div",{staticClass:"panel-section"},[e("h3",[t._v("测试功能")]),e("div",{staticClass:"button-group"},[e("el-button",{on:{click:t.testDragToEmptySpace}},[t._v("测试拖拽到空白")]),e("el-button",{on:{click:t.testDoubleClickCreate}},[t._v("测试双击创建")]),e("el-button",{on:{click:t.testCrossRootDrag}},[t._v("测试跨根拖拽")]),e("el-button",{on:{click:t.testGeneralizationWithChildren}},[t._v("测试概要子节点")]),e("el-button",{on:{click:t.testPerRootThemes}},[t._v("测试多主题")]),e("el-button",{attrs:{type:"warning"},on:{click:t.testRadialLayout}},[t._v("测试径向布局")]),e("el-button",{attrs:{type:"primary"},on:{click:t.testRadialLayoutStrategies}},[t._v("测试径向策略")]),e("el-button",{on:{click:t.resetAll}},[t._v("重置所有")])],1)]),e("div",{staticClass:"panel-section"},[e("h3",[t._v("Markdown 导入测试")]),e("div",{staticClass:"markdown-test-panel"},[e("el-input",{staticStyle:{"margin-bottom":"8px"},attrs:{type:"textarea",rows:8,placeholder:"在此输入 Markdown 文本进行解析测试"},model:{value:t.markdownTestText,callback:function(e){t.markdownTestText=e},expression:"markdownTestText"}}),e("input",{ref:"markdownFileInput",staticStyle:{display:"none"},attrs:{type:"file",accept:".md,text/markdown"},on:{change:t.handleMarkdownFileChange}}),e("div",{staticClass:"button-group"},[e("el-button",{attrs:{size:"small"},on:{click:t.parseMarkdownOld}},[t._v("旧 Markdown 解析")]),e("el-button",{attrs:{size:"small",type:"primary"},on:{click:t.parseMarkdownNew}},[t._v("新 Markdown 解析")]),e("el-button",{attrs:{size:"small"},on:{click:t.triggerMarkdownFileSelect}},[t._v("导入 Markdown 文件")])],1)],1)]),e("div",{staticClass:"panel-section"},[e("h3",[t._v("思源 → KMind 转换测试")]),e("div",{staticClass:"markdown-test-panel"},[e("el-input",{staticStyle:{"margin-bottom":"8px"},attrs:{type:"textarea",rows:6,placeholder:"在此粘贴思源源数据 JSON"},model:{value:t.sySourceText,callback:function(e){t.sySourceText=e},expression:"sySourceText"}}),e("el-input",{staticStyle:{"margin-bottom":"8px"},attrs:{type:"textarea",rows:6,placeholder:"转换后的 KMind 数据(只用于查看和手动修改)"},model:{value:t.kmindJsonText,callback:function(e){t.kmindJsonText=e},expression:"kmindJsonText"}}),e("el-input",{staticStyle:{"margin-bottom":"8px"},attrs:{placeholder:"Host例如 127.0.0.1:6806留空则使用当前页面 host"},model:{value:t.testHost,callback:function(e){t.testHost=e},expression:"testHost"}}),e("div",{staticClass:"button-group"},[e("el-button",{attrs:{size:"small",type:"primary"},on:{click:t.runSyToKMindTest}},[t._v(" 转换并预览 ")])],1)],1)]),e("div",{staticClass:"panel-section"},[e("h3",[t._v("连接线样式测试")]),e("div",{staticClass:"button-group"},[e("el-button",{attrs:{type:"primary"},on:{click:t.testBraceLineStyle}},[t._v("测试大括号连线")]),e("el-button",{attrs:{type:"success"},on:{click:function(e){return t.setLineStyle("curve")}}},[t._v("曲线样式")]),e("el-button",{attrs:{type:"warning"},on:{click:function(e){return t.setLineStyle("straight")}}},[t._v("直线样式")]),e("el-button",{attrs:{type:"info"},on:{click:function(e){return t.setLineStyle("direct")}}},[t._v("直连样式")]),e("el-button",{on:{click:function(e){return t.setLineStyle("brace")}}},[t._v("大括号样式")])],1),e("div",{staticClass:"line-style-settings",staticStyle:{"margin-top":"10px"}},[e("div",{staticStyle:{display:"flex","align-items":"center","margin-bottom":"8px"}},[e("span",{staticStyle:{"margin-right":"10px"}},[t._v("布局切换: ")]),e("el-select",{staticStyle:{width:"180px"},attrs:{placeholder:"选择布局",size:"small"},on:{change:t.changeLineTestLayout},model:{value:t.lineTestLayout,callback:function(e){t.lineTestLayout=e},expression:"lineTestLayout"}},t._l(t.availableLayouts,(function(t){return e("el-option",{key:t.value,attrs:{label:t.label,value:t.value}})})),1)],1),e("div",{staticStyle:{display:"flex","align-items":"center"}},[e("span",{staticStyle:{"margin-right":"10px"}},[t._v("大括号曲线弧度: ")]),e("el-slider",{staticStyle:{width:"150px",margin:"0 10px"},attrs:{min:5,max:30,step:1},on:{change:t.updateBraceCurveSize},model:{value:t.braceCurveSize,callback:function(e){t.braceCurveSize=e},expression:"braceCurveSize"}}),e("span",[t._v(t._s(t.braceCurveSize)+"px")])],1)])]),e("div",{staticClass:"panel-section"},[e("h3",[t._v("主题预览图生成")]),e("div",{staticClass:"button-group"},[e("el-button",{attrs:{type:"primary"},on:{click:t.showThemeGeneratorDialog}},[t._v("批量生成主题预览图")]),e("el-button",{attrs:{type:"success"},on:{click:t.showLayoutGeneratorDialog}},[t._v("批量生成布局预览图")])],1)]),e("div",{staticClass:"panel-section"},[e("h3",[t._v("流程图功能")]),e("div",{staticClass:"button-group"},[e("el-button",{attrs:{type:"primary"},on:{click:function(e){return t.createFlowChartNode("process")}}},[t._v("创建流程节点")]),e("el-button",{attrs:{type:"warning"},on:{click:function(e){return t.createFlowChartNode("decision")}}},[t._v("创建决策节点")]),e("el-button",{attrs:{type:"success"},on:{click:function(e){return t.createFlowChartNode("start")}}},[t._v("创建开始节点")]),e("el-button",{attrs:{type:"danger"},on:{click:function(e){return t.createFlowChartNode("end")}}},[t._v("创建结束节点")]),e("el-button",{on:{click:t.convertToFlowChart}},[t._v("转为流程图节点")]),e("el-button",{on:{click:t.convertToNormal}},[t._v("转为普通节点")]),e("el-button",{on:{click:t.testFlowChartMode}},[t._v("测试混合模式")]),e("el-button",{on:{click:t.testConnectorEvents}},[t._v("测试连接点事件")]),e("el-button",{attrs:{type:"info"},on:{click:t.testOrthogonalLines}},[t._v("测试正交连线")]),e("el-button",{attrs:{type:"success"},on:{click:t.testSnapAndDrag}},[t._v("测试吸附和拖拽创建")])],1)])]),e("div",{staticClass:"mindmap-area"},[e("div",{staticClass:"mindmap-header"},[e("span",[t._v("思维导图")]),e("el-button",{attrs:{size:"small"},on:{click:t.fitView}},[t._v("适应视图")])],1),e("div",{staticClass:"mindmap-container"},[e("div",{ref:"mindMapContainer",staticClass:"mindMapContainer",attrs:{id:"testMindMapContainer"}})])]),e("el-dialog",{attrs:{title:"批量生成主题预览图",visible:t.themeGeneratorDialogVisible,width:"80%","close-on-click-modal":!1},on:{"update:visible":function(e){t.themeGeneratorDialogVisible=e}}},[e("div",{staticClass:"theme-generator-content"},[e("div",{staticClass:"generator-header"},[e("el-alert",{attrs:{title:`共有 ${t.allThemes.length} 个主题,已生成 ${t.generatedCount}`,type:"info",closable:!1}}),e("div",{staticClass:"quality-settings"},[e("div",{staticClass:"quality-item"},[e("label",[t._v("WebP 质量:")]),e("el-slider",{staticStyle:{width:"200px",margin:"0 10px"},attrs:{min:.1,max:1,step:.05,"show-tooltip":!0,"format-tooltip":t=>Math.round(100*t)+"%"},model:{value:t.webpQuality,callback:function(e){t.webpQuality=e},expression:"webpQuality"}}),e("span",{staticClass:"quality-value"},[t._v(t._s(Math.round(100*t.webpQuality))+"%")]),e("el-tooltip",{attrs:{content:"较低的质量会减小文件大小,但可能降低图像质量"}},[e("i",{staticClass:"el-icon-question",staticStyle:{"margin-left":"5px",color:"#909399"}})])],1),e("div",{staticClass:"quality-item"},[e("label",[t._v("JPG 质量:")]),e("el-slider",{staticStyle:{width:"200px",margin:"0 10px"},attrs:{min:.1,max:1,step:.05,"show-tooltip":!0,"format-tooltip":t=>Math.round(100*t)+"%"},model:{value:t.jpgQuality,callback:function(e){t.jpgQuality=e},expression:"jpgQuality"}}),e("span",{staticClass:"quality-value"},[t._v(t._s(Math.round(100*t.jpgQuality))+"%")]),e("el-tooltip",{attrs:{content:"JPG不支持透明度会添加白色背景"}},[e("i",{staticClass:"el-icon-question",staticStyle:{"margin-left":"5px",color:"#909399"}})])],1),e("div",{staticClass:"quality-presets"},[e("label",[t._v("快速预设:")]),e("el-button-group",{attrs:{size:"small"}},[e("el-button",{on:{click:function(e){return t.setQualityPreset("high")}}},[t._v("高质量")]),e("el-button",{on:{click:function(e){return t.setQualityPreset("medium")}}},[t._v("平衡")]),e("el-button",{on:{click:function(e){return t.setQualityPreset("low")}}},[t._v("小文件")]),e("el-button",{on:{click:function(e){return t.setQualityPreset("tiny")}}},[t._v("极限压缩")])],1)],1)]),e("div",{staticClass:"generator-actions"},[e("el-button",{attrs:{type:"primary",loading:t.isGenerating,disabled:t.isGenerating},on:{click:t.startGenerating}},[t._v(" "+t._s(t.isGenerating?"生成中...":"开始生成")+" ")]),e("el-button",{attrs:{disabled:0===t.generatedSVGs.length},on:{click:t.downloadAllSVGs}},[t._v(" 下载所有SVG ("+t._s(t.generatedSVGs.length)+") ")]),e("el-button",{attrs:{disabled:0===t.generatedSVGs.length,type:"success"},on:{click:t.downloadAllPNGs}},[t._v(" 下载所有PNG ("+t._s(t.generatedSVGs.filter(t=>t.pngDataUrl).length)+") ")]),e("el-button",{attrs:{disabled:0===t.generatedSVGs.length,type:"warning"},on:{click:t.downloadAllWebPs}},[t._v(" 下载所有WebP ("+t._s(t.generatedSVGs.filter(t=>t.webpDataUrl).length)+") ")]),e("el-button",{attrs:{disabled:0===t.generatedSVGs.length,type:"danger"},on:{click:t.downloadAllJPGs}},[t._v(" 下载所有JPG ("+t._s(t.generatedSVGs.filter(t=>t.jpgDataUrl).length)+") ")]),e("el-button",{on:{click:t.clearGenerated}},[t._v("清空")])],1)],1),t.isGenerating?e("div",{staticClass:"generator-progress"},[e("el-progress",{attrs:{percentage:Math.round(t.generatedCount/t.allThemes.length*100),status:t.generatedCount===t.allThemes.length?"success":""}}),e("p",[t._v("正在生成: "+t._s(t.currentThemeName))])],1):t._e(),t.previewMindMapEl?e("div",{staticClass:"preview-container"},[e("div",{ref:"previewMindMapEl",attrs:{id:"themePreviewMindMap"}})]):t._e(),e("div",{staticClass:"generated-list"},[e("el-table",{staticStyle:{width:"100%"},attrs:{data:t.generatedSVGs,height:"400"}},[e("el-table-column",{attrs:{prop:"name",label:"主题名称",width:"150",fixed:""},scopedSlots:t._u([{key:"default",fn:function(a){return[e("div",{staticStyle:{display:"flex","align-items":"center"}},[e("span",[t._v(t._s(a.row.name))]),a.row.isDefault?e("el-tag",{staticStyle:{"margin-left":"8px"},attrs:{type:"primary",size:"mini"}},[t._v(" 默认 ")]):t._e()],1)]}}])}),e("el-table-column",{attrs:{prop:"value",label:"主题值",width:"120"}}),e("el-table-column",{attrs:{prop:"type",label:"类型",width:"70"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-tag",{attrs:{type:a.row.dark?"info":"warning",size:"small"}},[t._v(" "+t._s(a.row.dark?"深色":"浅色")+" ")])]}}])}),e("el-table-column",{attrs:{label:"预览",width:"200"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("el-tabs",{staticStyle:{height:"100px"},attrs:{type:"card"}},[e("el-tab-pane",{attrs:{label:"SVG"}},[a.row.svgContent?e("div",{staticStyle:{width:"180px",height:"80px",overflow:"hidden"},domProps:{innerHTML:t._s(a.row.svgContent)}}):t._e()]),a.row.pngDataUrl?e("el-tab-pane",{attrs:{label:"PNG"}},[e("img",{staticStyle:{width:"180px",height:"auto","max-height":"80px","object-fit":"contain"},attrs:{src:a.row.pngDataUrl}})]):t._e(),a.row.webpDataUrl?e("el-tab-pane",{attrs:{label:"WebP"}},[e("img",{staticStyle:{width:"180px",height:"auto","max-height":"80px","object-fit":"contain"},attrs:{src:a.row.webpDataUrl}})]):t._e(),a.row.jpgDataUrl?e("el-tab-pane",{attrs:{label:"JPG"}},[e("img",{staticStyle:{width:"180px",height:"auto","max-height":"80px","object-fit":"contain"},attrs:{src:a.row.jpgDataUrl}})]):t._e()],1)]}}])}),e("el-table-column",{attrs:{label:"文件大小",width:"200"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("div",{staticClass:"size-info"},[a.row.svgSize?e("div",[e("el-tag",{attrs:{size:"small"}},[t._v("SVG: "+t._s(t.formatFileSize(a.row.svgSize)))])],1):t._e(),a.row.pngSize?e("div",[e("el-tag",{attrs:{size:"small",type:"success"}},[t._v("PNG: "+t._s(t.formatFileSize(a.row.pngSize)))])],1):t._e(),a.row.webpSize?e("div",[e("el-tag",{attrs:{size:"small",type:"warning"}},[t._v("WebP: "+t._s(t.formatFileSize(a.row.webpSize)))])],1):t._e(),a.row.jpgSize?e("div",[e("el-tag",{attrs:{size:"small",type:"danger"}},[t._v("JPG: "+t._s(t.formatFileSize(a.row.jpgSize)))])],1):t._e()])]}}])}),e("el-table-column",{attrs:{label:"操作",fixed:"right",width:"240"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("div",{staticClass:"action-buttons"},[e("el-button-group",[e("el-button",{attrs:{size:"mini",title:"下载SVG"},on:{click:function(e){return t.downloadSingleSVG(a.row)}}},[t._v(" SVG ")]),e("el-button",{attrs:{size:"mini",disabled:!a.row.pngDataUrl,type:"success",title:"下载PNG"},on:{click:function(e){return t.downloadSinglePNG(a.row)}}},[t._v(" PNG ")]),e("el-button",{attrs:{size:"mini",disabled:!a.row.webpDataUrl,type:"warning",title:"下载WebP"},on:{click:function(e){return t.downloadSingleWebP(a.row)}}},[t._v(" WebP ")]),e("el-button",{attrs:{size:"mini",disabled:!a.row.jpgDataUrl,type:"danger",title:"下载JPG"},on:{click:function(e){return t.downloadSingleJPG(a.row)}}},[t._v(" JPG ")])],1),e("el-button",{staticStyle:{"margin-left":"10px"},attrs:{size:"mini",type:"text"},on:{click:function(e){return t.removeGenerated(a.$index)}}},[t._v(" 删除 ")])],1)]}}])})],1)],1)])]),e("el-dialog",{attrs:{title:"批量生成布局预览图",visible:t.layoutGeneratorDialogVisible,width:"80%","close-on-click-modal":!1},on:{"update:visible":function(e){t.layoutGeneratorDialogVisible=e}}},[e("div",{staticClass:"layout-generator-content"},[e("div",{staticClass:"generator-header"},[e("el-alert",{attrs:{title:`共有 ${t.allLayouts.length} 个布局,已生成 ${t.generatedLayoutCount}`,type:"info",closable:!1}}),e("div",{staticClass:"generator-controls"},[e("div",{staticClass:"quality-controls"},[e("div",{staticClass:"quality-item"},[e("span",[t._v("WebP质量:")]),e("el-slider",{staticStyle:{width:"150px",margin:"0 10px"},attrs:{min:.1,max:1,step:.05,"format-tooltip":t=>Math.round(100*t)+"%"},model:{value:t.layoutWebpQuality,callback:function(e){t.layoutWebpQuality=e},expression:"layoutWebpQuality"}}),e("el-button-group",{attrs:{size:"mini"}},[e("el-button",{on:{click:function(e){t.layoutWebpQuality=.3}}},[t._v("低")]),e("el-button",{on:{click:function(e){t.layoutWebpQuality=.6}}},[t._v("中")]),e("el-button",{on:{click:function(e){t.layoutWebpQuality=.8}}},[t._v("高")]),e("el-button",{on:{click:function(e){t.layoutWebpQuality=1}}},[t._v("最高")])],1)],1),e("div",{staticClass:"quality-item"},[e("span",[t._v("JPG质量:")]),e("el-slider",{staticStyle:{width:"150px",margin:"0 10px"},attrs:{min:.1,max:1,step:.05,"format-tooltip":t=>Math.round(100*t)+"%"},model:{value:t.layoutJpgQuality,callback:function(e){t.layoutJpgQuality=e},expression:"layoutJpgQuality"}}),e("el-button-group",{attrs:{size:"mini"}},[e("el-button",{on:{click:function(e){t.layoutJpgQuality=.3}}},[t._v("低")]),e("el-button",{on:{click:function(e){t.layoutJpgQuality=.6}}},[t._v("中")]),e("el-button",{on:{click:function(e){t.layoutJpgQuality=.85}}},[t._v("高")]),e("el-button",{on:{click:function(e){t.layoutJpgQuality=1}}},[t._v("最高")])],1)],1)]),e("div",{staticClass:"action-buttons"},[e("el-button",{attrs:{type:"primary",loading:t.isGeneratingLayouts,disabled:t.isGeneratingLayouts},on:{click:t.generateAllLayoutPreviews}},[t._v(" "+t._s(t.isGeneratingLayouts?`正在生成 ${t.currentLayoutName}...`:"生成所有布局预览图")+" ")]),e("el-button",{on:{click:t.clearGeneratedLayouts}},[t._v("清空已生成")]),e("el-button",{attrs:{disabled:0===t.generatedLayoutSVGs.length},on:{click:t.downloadAllLayoutSVGs}},[t._v(" 下载所有SVG ("+t._s(t.generatedLayoutSVGs.length)+") ")]),e("el-button",{attrs:{disabled:0===t.generatedLayoutSVGs.length,type:"success"},on:{click:t.downloadAllLayoutPNGs}},[t._v(" 下载所有PNG ("+t._s(t.generatedLayoutSVGs.filter(t=>t.pngDataUrl).length)+") ")]),e("el-button",{attrs:{disabled:0===t.generatedLayoutSVGs.length,type:"warning"},on:{click:t.downloadAllLayoutWebPs}},[t._v(" 下载所有WebP ("+t._s(t.generatedLayoutSVGs.filter(t=>t.webpDataUrl).length)+") ")]),e("el-button",{attrs:{disabled:0===t.generatedLayoutSVGs.length,type:"danger"},on:{click:t.downloadAllLayoutJPGs}},[t._v(" 下载所有JPG ("+t._s(t.generatedLayoutSVGs.filter(t=>t.jpgDataUrl).length)+") ")])],1)])],1),e("div",{staticClass:"layout-generator-list"},[e("el-table",{staticStyle:{width:"100%"},attrs:{data:t.allLayouts,height:"400",border:""}},[e("el-table-column",{attrs:{prop:"name",label:"布局名称",width:"150"}}),e("el-table-column",{attrs:{prop:"value",label:"布局值",width:"180"}}),e("el-table-column",{attrs:{label:"SVG预览",width:"150",align:"center"},scopedSlots:t._u([{key:"default",fn:function(a){return[a.row.svgData?e("div",{staticClass:"preview-image"},[e("img",{staticStyle:{"max-width":"120px","max-height":"80px"},attrs:{src:a.row.svgData,alt:"SVG预览"}}),e("div",{staticClass:"file-size"},[t._v(t._s(a.row.svgSize))])]):e("span",[t._v("未生成")])]}}])}),e("el-table-column",{attrs:{label:"PNG预览",width:"150",align:"center"},scopedSlots:t._u([{key:"default",fn:function(a){return[a.row.pngData?e("div",{staticClass:"preview-image"},[e("img",{staticStyle:{"max-width":"120px","max-height":"80px"},attrs:{src:a.row.pngData,alt:"PNG预览"}}),e("div",{staticClass:"file-size"},[t._v(t._s(a.row.pngSize))])]):e("span",[t._v("未生成")])]}}])}),e("el-table-column",{attrs:{label:"WebP预览",width:"150",align:"center"},scopedSlots:t._u([{key:"default",fn:function(a){return[a.row.webpData?e("div",{staticClass:"preview-image"},[e("img",{staticStyle:{"max-width":"120px","max-height":"80px"},attrs:{src:a.row.webpData,alt:"WebP预览"}}),e("div",{staticClass:"file-size"},[t._v(t._s(a.row.webpSize))])]):e("span",[t._v("未生成")])]}}])}),e("el-table-column",{attrs:{label:"JPG预览",width:"150",align:"center"},scopedSlots:t._u([{key:"default",fn:function(a){return[a.row.jpgData?e("div",{staticClass:"preview-image"},[e("img",{staticStyle:{"max-width":"120px","max-height":"80px"},attrs:{src:a.row.jpgData,alt:"JPG预览"}}),e("div",{staticClass:"file-size"},[t._v(t._s(a.row.jpgSize))])]):e("span",[t._v("未生成")])]}}])}),e("el-table-column",{attrs:{label:"操作",width:"200",fixed:"right"},scopedSlots:t._u([{key:"default",fn:function(a){return[e("div",{staticClass:"action-buttons"},[e("el-button",{attrs:{size:"mini",type:"primary",disabled:t.isGeneratingLayouts},on:{click:function(e){return t.generateLayoutPreview(a.row)}}},[t._v(" 生成 ")]),e("el-button",{attrs:{size:"mini",type:"success",disabled:!a.row.svgData},on:{click:function(e){return t.downloadLayoutPreview(a.row)}}},[t._v(" 下载 ")])],1)]}}])})],1)],1)])]),e("div",{staticClass:"panel-header"},[e("span",[t._v("实时数据")]),e("el-button",{attrs:{size:"small"},on:{click:t.refreshData}},[t._v("刷新")])],1),e("el-tabs",{attrs:{type:"border-card"},model:{value:t.activeTab,callback:function(e){t.activeTab=e},expression:"activeTab"}},[e("el-tab-pane",{attrs:{label:"数据结构",name:"data"}},[e("div",{staticClass:"data-content"},[e("pre",[t._v(t._s(t.formattedData))])])]),e("el-tab-pane",{attrs:{label:"关联线数据",name:"associations"}},[e("div",{staticClass:"data-content"},[0===t.associationsData.length?e("div",{staticClass:"no-data"},[t._v(" 暂无关联线数据 ")]):e("div",t._l(t.associationsData,(function(a,i){return e("div",{key:i,staticClass:"association-item"},[e("div",{staticClass:"association-info"},[e("strong",[t._v("关联线 "+t._s(i+1))]),e("p",[t._v("起始: "+t._s(a.fromNodeText))]),e("p",[t._v("目标: "+t._s(a.toNodeText))]),e("p",[t._v("文本: "+t._s(a.text||"无"))])]),e("el-button",{attrs:{size:"small",type:"danger"},on:{click:function(e){return t.removeAssociation(i)}}},[t._v("删除")])],1)})),0)])]),e("el-tab-pane",{attrs:{label:"操作日志",name:"logs"}},[e("div",{staticClass:"data-content"},t._l(t.operationLogs,(function(a,i){return e("div",{key:i,staticClass:"log-item"},[e("span",{staticClass:"log-time"},[t._v(t._s(a.time))]),e("span",{staticClass:"log-message"},[t._v(t._s(a.message))])])})),0)])],1)],1)])},s=[],o=(a("d9e2"),a("14d9"),a("b7ef"),a("88a7"),a("271a"),a("5494"),a("92ee")),n=a("fbbc"),l=a("7145"),r=a("4db5"),d=a("43cc"),c=a("a832"),h=a("364c"),u=a("3041"),p=a("67c2"),m=a("99e0"),g=a("cbc1"),y=a("5d70"),v=a("a87c"),b=a("fa22"),f=a("73c1"),w=a("49ee"),x=a("f904"),L=a("f136"),M=a("1e64"),C=a("3b44"),_=a("135f"),S=a("13cc"),D=a("68b3"),T=a("8a19");class k{constructor(t){this.mindMap=t.mindMap,this.draw=this.mindMap.draw,this.isDragging=!1,this.startNode=null,this.startPosition=null,this.tempLine=null,this.startPoint={x:0,y:0},this.endPoint={x:0,y:0},this.bindEvents()}bindEvents(){this.mindMap.on("flowchart_connector_drag_start",this.handleDragStart.bind(this)),this.mindMap.on("mousemove",this.handleMouseMove.bind(this)),this.mindMap.on("mouseup",this.handleMouseUp.bind(this)),this.mindMap.on("node_mouseenter",this.handleNodeMouseEnter.bind(this))}handleDragStart(t){const{node:e,position:a,event:i}=t;if(!e.nodeData.data.isFlowChart)return;this.isDragging=!0,this.startNode=e,this.startPosition=a;const s=e._flowChartConnector.getConnectorAbsolutePosition(a);s&&(this.startPoint={x:s.x,y:s.y},this.createTempLine(),i.preventDefault(),i.stopPropagation())}createTempLine(){this.tempLine=(new T["f"]).fill("none").stroke({color:"#2196f3",width:2,dasharray:"5,5"}).css({"pointer-events":"none"}),this.mindMap.associativeLineDraw.add(this.tempLine),this.tempLine.front(),this.updateTempLine(this.startPoint.x,this.startPoint.y)}updateTempLine(t,e){if(!this.tempLine)return;const a=this.calculatePath(this.startPoint,{x:t,y:e});this.tempLine.plot(a)}calculatePath(t,e){const a=[`M ${t.x} ${t.y}`],i=e.x-t.x,s=e.y-t.y;if(Math.abs(i)>Math.abs(s)){const s=t.x+i/2;a.push(`L ${s} ${t.y}`),a.push(`L ${s} ${e.y}`),a.push(`L ${e.x} ${e.y}`)}else{const i=t.y+s/2;a.push(`L ${t.x} ${i}`),a.push(`L ${e.x} ${i}`),a.push(`L ${e.x} ${e.y}`)}return a.join(" ")}handleMouseMove(t){if(!this.isDragging||!this.tempLine)return;const{x:e,y:a}=this.mindMap.toPos(t.clientX,t.clientY),i=this.mindMap.draw.transform(),s={x:(e-i.translateX)/i.scaleX,y:(a-i.translateY)/i.scaleY},o=this.checkSnapToConnector(s,t.clientX,t.clientY);o?(this.endPoint=o.point,o.connector&&o.connector.animate(100).attr({opacity:1,r:this.mindMap.opt.flowChartConnectorSize||8})):(this.endPoint=s,this.unhighlightAllConnectors()),this.updateTempLine(this.endPoint.x,this.endPoint.y)}handleNodeMouseEnter(t){this.isDragging&&t.nodeData.data.isFlowChart&&t.uid!==this.startNode.uid&&t._flowChartConnector&&t._flowChartConnector.showConnectors()}handleMouseUp(t){if(!this.isDragging)return;const{x:e,y:a}=this.mindMap.toPos(t.clientX,t.clientY),i=this.mindMap.draw.transform(),s={x:(e-i.translateX)/i.scaleX,y:(a-i.translateY)/i.scaleY},o=this.checkSnapToConnector(s,t.clientX,t.clientY);if(o&&o.node)this.createAssociationLine(this.startNode,this.startPosition,o.node,o.position);else{const e=this.findNodeAtPosition(t.clientX,t.clientY);if(!e&&!1!==this.mindMap.opt.enableDragCreateFlowChartNode)return this.createNewFlowChartNode(s),void setTimeout(()=>{this.cleanup(),this.unhighlightAllConnectors()},200)}this.cleanup(),this.unhighlightAllConnectors()}findNodeAtPosition(t,e){let a=null;const i=document.elementsFromPoint(t,e);for(let s of i){const t=s.closest(".smm-node");if(t){if(t._node){a=t._node;break}const e=[],i=t=>{t&&(e.push(t),t.children&&t.children.length>0&&t.children.forEach(t=>i(t)))};this.mindMap.renderer.renderTree&&(Array.isArray(this.mindMap.renderer.renderTree)?this.mindMap.renderer.renderTree.forEach(t=>{t&&t._node&&i(t._node)}):this.mindMap.renderer.root&&i(this.mindMap.renderer.root));for(let s of e)if(s.group&&s.group.node===t){a=s;break}if(a)break}}return a}checkSnapToConnector(t,e,a){const i=20,s=this.findNodeAtPosition(e,a);if(s&&s.nodeData.data.isFlowChart&&s.uid!==this.startNode.uid&&s._flowChartConnector){const e=["top","right","bottom","left"];let a=null,o=1/0,n=null,l=null;if(e.forEach(e=>{const r=s._flowChartConnector.getConnectorByPosition(e);if(!r)return;const d=s._flowChartConnector.getConnectorAbsolutePosition(e);if(!d)return;const c=Math.sqrt(Math.pow(d.x-t.x,2)+Math.pow(d.y-t.y,2));c<i&&c<o&&(o=c,a=r,n=d,l=e)}),a)return{point:n,connector:a,node:s,position:l}}return null}unhighlightAllConnectors(){const t=[],e=a=>{a&&(t.push(a),a.children&&a.children.length>0&&a.children.forEach(t=>e(t)))};this.mindMap.renderer.renderTree&&(Array.isArray(this.mindMap.renderer.renderTree)?this.mindMap.renderer.renderTree.forEach(t=>{t&&t._node&&e(t._node)}):this.mindMap.renderer.root&&e(this.mindMap.renderer.root)),t.forEach(t=>{t._flowChartConnector&&t._flowChartConnector.hideConnectors()})}findNearestConnector(t,e){if(!t._flowChartConnector)return null;let a=1/0,i=null;const s=["top","right","bottom","left"];return s.forEach(s=>{const o=t._flowChartConnector.getConnectorAbsolutePosition(s);if(!o)return;const n=Math.sqrt(Math.pow(o.x-e.x,2)+Math.pow(o.y-e.y,2));n<a&&(a=n,i=s)}),i}createAssociationLine(t,e,a,i){if(t&&a){if(this.mindMap.associativeLine){this.mindMap.associativeLine.addLine(t,a);const s=t.getData("associativeLineTargets")||[],o=s.findIndex(t=>t===a.getData("uid"));if(-1!==o){const a=t.getData("associativeLinePoint")||[];while(a.length<=o)a.push({});a[o]={startPoint:{dir:e,range:0},endPoint:{dir:i,range:0}},this.mindMap.execCommand("SET_NODE_DATA",t,{associativeLinePoint:a}),setTimeout(()=>{this.mindMap.associativeLine.renderAllLines()},0)}this.mindMap.emit("flowchart_line_created",{startNode:t,startPosition:e,endNode:a,endPosition:i})}}else console.warn("createAssociationLine: 无效的节点参数",t,a)}createNewFlowChartNode(t){const e="process",a={data:{text:"新节点",isFlowChart:!0,flowchart:{nodeType:e},customLeft:t.x-50,customTop:t.y-25},children:[]},i=this.startNode,s=this.startPosition;this.mindMap.addRootNode(a,-1,e=>{if(e){const a=t.x-this.startPoint.x,o=t.y-this.startPoint.y;let n="left";n=Math.abs(a)>Math.abs(o)?a>0?"left":"right":o>0?"top":"bottom",setTimeout(()=>{e&&e.getData?(this.createAssociationLine(i,s,e,n),e.active(),this.mindMap.emit("flowchart_node_created",{node:e,fromNode:i,position:t})):console.warn("新创建的节点尚未完全初始化")},100)}})}cleanup(){this.tempLine&&(this.tempLine.remove(),this.tempLine=null),this.isDragging=!1,this.startNode=null,this.startPosition=null,this.startPoint={x:0,y:0},this.endPoint={x:0,y:0}}destroy(){this.cleanup(),this.mindMap.off("flowchart_connector_drag_start",this.handleDragStart),this.mindMap.off("mousemove",this.handleMouseMove),this.mindMap.off("mouseup",this.handleMouseUp),this.mindMap.off("node_mouseenter",this.handleNodeMouseEnter)}}k.pluginName="flowChartLine";var R=k,A=a("0908");const E=Object(n["a"])(),P=["# 一级标题A","","简单说明段落。","","## 二级标题A-1","","- 列表项1","- 列表项2","","### 三级标题A-1-1","","# 一级标题B","","## 二级标题B-1"].join("\n");l["a"].usePlugin(r["a"]).usePlugin(d["a"]).usePlugin(m["a"]).usePlugin(c["a"]).usePlugin(h["a"]).usePlugin(u["a"]).usePlugin(p["a"]).usePlugin(g["a"]).usePlugin(y["a"]).usePlugin(b["a"]).usePlugin(v["a"]).usePlugin(f["a"]).usePlugin(w["a"]).usePlugin(x["a"]).usePlugin(L["a"]).usePlugin(M["a"]).usePlugin(C["a"]).usePlugin(_["a"]).usePlugin(R),S["a"].init(l["a"]);var G={name:"Test",data(){return{mindMap:null,isMultiRoot:!1,rootCount:1,associationCount:0,isAssociativeMode:!1,activeTab:"data",currentData:null,associationsData:[],operationLogs:[],selectedRootIndex:null,selectedTheme:"",rootsInfo:[],selectedLayoutRootIndex:null,selectedLayout:"",braceCurveSize:12,lineTestLayout:"mindMap",availableLayouts:[{label:"逻辑结构图",value:"logicalStructure"},{label:"逻辑结构图(向左)",value:"logicalStructureLeft"},{label:"思维导图",value:"mindMap"},{label:"组织结构图",value:"organizationStructure"},{label:"目录组织图",value:"catalogOrganization"},{label:"时间轴",value:"timeline"},{label:"时间轴2",value:"timeline2"},{label:"鱼骨图",value:"fishbone"},{label:"竖向时间轴",value:"verticalTimeline"},{label:"径向布局",value:"radial"}],availableThemes:["default","classic","classic2","classic3","classic4","classic5","classic6","classic7","classic8","classic9","classic10","dark","dark2","dark3","dark4","freshGreen","freshBlue","freshRed","freshPurple","freshPink","freshYellow"],themeGeneratorDialogVisible:!1,previewMindMap:null,previewMindMapEl:null,allThemes:[],generatedSVGs:[],generatedCount:0,currentThemeName:"",isGenerating:!1,webpQuality:.8,jpgQuality:.85,layoutGeneratorDialogVisible:!1,allLayouts:[],generatedLayoutSVGs:[],generatedLayoutCount:0,currentLayoutName:"",isGeneratingLayouts:!1,layoutWebpQuality:.8,layoutJpgQuality:.85,layoutPreviewMindMap:null,layoutPreviewMindMapEl:null,markdownTestText:P,sySourceText:"",kmindJsonText:"",testHost:""}},computed:{formattedData(){return this.currentData?JSON.stringify(this.currentData,null,2):"暂无数据"}},mounted(){this.$nextTick(()=>{this.initMindMap()})},beforeDestroy(){this.mindMap&&this.mindMap.destroy()},methods:{addLog(t){this.operationLogs.unshift({time:(new Date).toLocaleTimeString(),message:t}),this.operationLogs.length>20&&(this.operationLogs=this.operationLogs.slice(0,20))},initMindMap(){this.mindMap&&this.mindMap.destroy();try{this.mindMap=new l["a"]({el:this.$refs.mindMapContainer,data:this.getMultiRootData(),layout:"logicalStructure",theme:"classic7",fit:!0,nodeTextEditZIndex:1e3,nodeNoteTooltipZIndex:1e3,enableDblclickCreateRootNode:!0,dragToEmptySpaceCreateRootTime:300,allowRootNodeCollapse:!0,dragCreateRootHintText:this.$t("kmind.dragCreateRootHint"),dragCreateRootTipConfig:{borderColor:"#bbb",textColor:"#999",borderAnimationDuration:1.2}}),this.addLog("思维导图初始化成功"),this.bindEvents(),this.updateAllInfo()}catch(t){console.error("思维导图初始化失败:",t),this.addLog("初始化失败: "+t.message)}},parseMarkdownOld(){if(!this.mindMap)return;const t=this.markdownTestText||"",e=A["a"].transformMarkdownTo(t);e?(this.mindMap.setData(e),this.mindMap.view.fit(),this.addLog("使用旧 Markdown 解析结果渲染导图")):this.$message.warning("旧解析结果为空(可能没有有效的标题)")},parseMarkdownNew(){if(!this.mindMap)return;const t=this.markdownTestText||"",e=A["a"].transformMarkdownToNodeTree(t,{rootText:"测试文档"});e?(this.mindMap.setData(e),this.mindMap.view.fit(),this.addLog("使用新 Markdown 解析结果渲染导图(根节点为“测试文档”)")):this.$message.warning("新解析结果为空")},async runSyToKMindTest(){if(this.mindMap)if(this.sySourceText)try{const t=JSON.parse(this.sySourceText),e=this.testHost&&this.testHost.trim()||globalThis.location&&globalThis.location.host||"",a=await E.handleSYToKMind5(t,e),i={layout:"logicalStructure",root:a,theme:{template:this.selectedTheme||"classic7",config:{}},view:{transform:this.mindMap.view.transformData||{scaleX:1,scaleY:1,shear:0,rotate:0,translateX:0,translateY:0,originX:0,originY:0,a:1,b:0,c:0,d:1,e:0,f:0},state:{scale:1,x:0,y:0,sx:0,sy:0}},smmVersion:"0.13.1"};this.kmindJsonText=JSON.stringify(i,null,2),this.mindMap.setFullData(i),this.mindMap.view.fit(),this.addLog("思源 → KMind 转换测试完成并渲染导图")}catch(t){console.error("思源 → KMind 转换测试失败:",t),this.$message.error("转换失败: "+(t.message||t))}else this.$message.warning("请先在输入框1粘贴思源源数据 JSON");else this.$message.warning("思维导图尚未初始化")},triggerMarkdownFileSelect(){const t=this.$refs.markdownFileInput;t&&t.click&&t.click()},handleMarkdownFileChange(t){const e=t.target,a=e.files&&e.files[0];if(!a)return;const i=new FileReader;i.readAsText(a),i.onload=t=>{this.markdownTestText=t.target.result||"",this.$message.success("已从文件加载 Markdown 到输入框"),this.addLog("从文件导入 Markdown"+a.name)},i.onerror=t=>{console.error("读取 Markdown 文件失败:",t),this.$message.error("读取 Markdown 文件失败")},e.value=""},bindEvents(){this.mindMap.on("node_active",(t,e)=>{t&&t.getData?this.addLog("激活节点: "+t.getData("text")):e&&0===e.length?this.addLog("清除所有激活节点"):t?this.addLog("激活节点: 数据异常"):this.addLog("激活节点已清除")}),this.mindMap.on("data_change",()=>{this.updateAllInfo()}),this.mindMap.on("node_created",t=>{t&&t.getData?this.addLog("创建节点: "+t.getData("text")):this.addLog("创建节点: 数据异常")}),this.mindMap.on("node_dragged",t=>{t&&t.getData?this.addLog("拖拽节点: "+t.getData("text")):this.addLog("拖拽节点: 数据异常")}),this.mindMap.on("associative_line_click",(t,e,a,i)=>{try{const t=a&&a.getData?a.getData("text"):"未知",e=i&&i.getData?i.getData("text"):"未知";this.addLog(`点击关联线: ${t} -> ${e}`)}catch(s){console.warn("关联线点击事件处理错误:",s),this.addLog("点击关联线: 数据异常")}}),this.mindMap.on("associative_line_deactivate",()=>{this.addLog("关联线取消激活")}),this.mindMap.on("data_change",()=>{this.updateAssociationsData()}),this.mindMap.on("draw_click",()=>{this.isAssociativeMode&&this.mindMap.associativeLine&&!this.mindMap.associativeLine.isCreatingLine&&(this.isAssociativeMode=!1,this.addLog("退出关联线创建模式"))})},getSingleRootData(){return{data:{text:"A"},children:[{data:{text:"A1"},children:[{data:{text:"A1-1"}},{data:{text:"A1-2"}}]},{data:{text:"A2"},children:[{data:{text:"A2-1"}},{data:{text:"A2-2"}}]}]}},getMultiRootData(){return{multiRoot:!0,roots:[{data:{text:"A",layout:"logicalStructure",theme:"classic7"},children:[{data:{text:"A1"},children:[{data:{text:"A1-1"}},{data:{text:"A1-2"}}]},{data:{text:"A2"}}]},{data:{text:"B",layout:"mindMap",theme:"dark2"},children:[{data:{text:"B1"},children:[{data:{text:"B1-1"}},{data:{text:"B1-2"}}]},{data:{text:"B2"}},{data:{text:"B3"}}]},{data:{text:"C",theme:"freshGreen"},children:[{data:{text:"C1"}},{data:{text:"C2"}},{data:{text:"C3"}}]}]}},loadSingleRoot(){this.mindMap&&(this.mindMap.setData(this.getSingleRootData()),this.addLog("加载单根节点数据"))},loadMultiRoot(){this.mindMap&&(this.mindMap.setData(this.getMultiRootData()),this.addLog("加载多根节点数据"))},toggleMultiRootMode(){if(!this.mindMap)return;const t=this.mindMap.isMultiRoot;this.mindMap.setMultiRootMode(!t),this.addLog(`切换到${t?"单根":"多根"}节点模式`)},addNewRoot(){if(!this.mindMap)return;const t=this.mindMap.getRootNodes().length,e=String.fromCharCode(65+t);this.mindMap.addRootNode({data:{text:e,layout:t%2===0?"logicalStructure":"mindMap"},children:[{data:{text:e+"1"}},{data:{text:e+"2"}}]}),this.addLog("添加新根节点 "+e)},removeLastRoot(){if(!this.mindMap)return;const t=this.mindMap.getRootNodes();t.length>1?(this.mindMap.removeRootNode(t.length-1),this.addLog("删除最后一个根节点")):this.$message.warning("至少需要保留一个根节点")},addRootWithCustomPosition(){if(!this.mindMap)return;const t=this.mindMap.getRootNodes().length,e=String.fromCharCode(65+t);this.mindMap.addRootNode({data:{text:e,layout:"mindMap",customLeft:100+50*t,customTop:100+50*t},children:[{data:{text:e+"1"}}]}),this.addLog("添加自定义位置根节点 "+e)},enterAssociativeMode(){if(!this.mindMap||!this.mindMap.associativeLine)return void this.$message.error("关联线插件未启用");const t=this.mindMap.renderer.activeNodeList;0!==t.length?(this.mindMap.associativeLine.createLineFromActiveNode(),this.isAssociativeMode=!0,this.addLog("进入关联线创建模式"),this.$message.info("现在请点击目标节点创建关联线按ESC取消"),this.checkAssociativeLineStatus()):this.$message.warning("请先选择一个起始节点")},createCrossRootAssociation(){this.mindMap.isMultiRoot?(this.enterAssociativeMode(),this.$message.info("现在可以在不同根节点之间创建关联线")):this.$message.warning("请先切换到多根模式")},showAllAssociations(){if(!this.mindMap||!this.mindMap.associativeLine)return;const t=this.mindMap.associativeLine.lineList;this.addLog(`显示所有关联线,共 ${t.length}`),this.updateAssociationsData()},clearAllAssociations(){this.mindMap&&this.mindMap.associativeLine&&(this.mindMap.associativeLine.removeAllLines(),this.addLog("清除所有关联线"),this.updateAssociationsData())},testLoggerDebug(){o["b"].debug("test","Debug 日志测试消息",{timestamp:Date.now(),testData:"这是 DEBUG 级别的测试数据"}),this.addLog("发送了 DEBUG 日志")},testLoggerInfo(){o["b"].info("test","Info 日志测试消息",{user:"TestUser",action:"点击测试按钮",details:"这是 INFO 级别的测试"}),this.addLog("发送了 INFO 日志")},testLoggerWarn(){o["b"].warn("test","Warning 日志测试消息",{warning:"这是一个警告",level:"medium",suggestion:"建议检查配置"}),this.addLog("发送了 WARN 日志")},testLoggerError(){o["b"].error("test","Error 日志测试消息",{error:new Error("模拟错误"),code:"TEST_ERROR",message:"这是 ERROR 级别的测试"}),this.addLog("发送了 ERROR 日志")},testClickableLinks(){console.log("========== 测试可点击链接格式 ==========");const t=["webpack-internal:///./src/pages/test.vue:1150:5","webpack-internal:///node_modules/vue/dist/vue.js:100:10","webpack:///src/pages/test.vue:1150:5","webpack://kmind-plugin/src/pages/test.vue:1150:5","webpack://kmind-plugin/./src/pages/test.vue:1150:5","file:///Users/test/project/src/test.js:10:5","http://localhost:8080/src/test.js:10:5"];console.log("直接输出路径:"),t.forEach(t=>{console.log(` at testFunction (${t})`)}),console.log("\n使用 console.trace:"),console.trace("这会生成一个可点击的堆栈跟踪"),console.log("\n使用 Error.stack:");try{throw new Error("测试错误")}catch(e){console.log(e.stack)}this.addLog("测试了多种链接格式,查看控制台")},detectEnvironment(){const t=!("undefined"===typeof window||!window.process||!window.process.type),e=!1,i=window.parent!==window,s=!!globalThis.kmindApi,o={isElectron:t,isDevelopment:e,isIframe:i,hasPluginApi:s,userAgent:navigator.userAgent,platform:navigator.platform,webpack:"undefined"!==typeof a,nodeEnv:"production",buildMode:Object({VUE_APP_KMIND_ENV:"pro",NODE_ENV:"production",VUE_APP_SIYUAN_WIDGET:"true",BASE_URL:""}).VUE_APP_BUILD_MODE};console.group("环境检测结果"),console.table(o),console.log("详细信息:",o),console.groupEnd(),this.addLog(`环境: ${t?"Electron":"Browser"}, ${e?"Dev":"Prod"}`)},removeAssociation(t){if(!this.mindMap||!this.mindMap.associativeLine)return;const e=this.mindMap.associativeLine.lineList;if(t>=0&&t<e.length){const a=e[t];a[0].remove(),a[1].remove(),a[2].remove(),e.splice(t,1),this.addLog("删除关联线"),this.updateAssociationsData()}},testDragToEmptySpace(){this.addLog("测试拖拽到空白处创建根节点功能"),this.$message.info("请拖拽任意子节点到空白处停留2秒后放开鼠标")},testDoubleClickCreate(){this.addLog("测试双击创建根节点功能"),this.$message.info("请在空白处双击鼠标创建新根节点")},testCrossRootDrag(){this.addLog("测试跨根节点拖拽功能"),this.$message.info("请拖拽节点到其他根节点下成为子节点")},testGeneralizationWithChildren(){if(!this.mindMap)return;const t={data:{text:"A"},children:[{data:{text:"A1"},children:[{data:{text:"A1-1"}},{data:{text:"A1-2"}}]},{data:{text:"A2"},children:[{data:{text:"A2-1"}},{data:{text:"A2-2"}}]},{data:{text:"A3"}}]};this.mindMap.setData(t),setTimeout(()=>{const t=this.mindMap.renderer.root;if(t&&t.children&&t.children.length>=2){const e=[t.children[0],t.children[1]];this.mindMap.renderer.clearActiveNodeList(),e.forEach(t=>{this.mindMap.renderer.addNodeToActiveList(t)}),this.mindMap.execCommand("ADD_GENERALIZATION",{text:"G1",children:[{data:{text:"G1-1"},children:[{data:{text:"G1-1-1"}},{data:{text:"G1-1-2"}}]},{data:{text:"G1-2"}}]}),this.addLog("添加了带子节点的概要"),this.$message.success("已创建带子节点的概要可以在概要节点上使用Tab键添加更多子节点")}},500),this.addLog("加载概要子节点测试数据")},updateAllInfo(){this.updateBasicInfo(),this.updateCurrentData(),this.updateAssociationsData()},updateBasicInfo(){if(this.mindMap){this.isMultiRoot=this.mindMap.isMultiRoot;const t=this.mindMap.getRootNodes();if(this.rootCount=t.length,this.rootsInfo=t.map((t,e)=>{const a=t.nodeData||t.getData();return{text:a.data?a.data.text:"根节点",theme:a.data&&a.data.theme||"default",layout:a.data&&a.data.layout||"logicalStructure"}}),this.isMultiRoot&&null===this.selectedRootIndex&&this.rootsInfo.length>0?(this.selectedRootIndex=0,this.selectedTheme=this.rootsInfo[0].theme):this.isMultiRoot||(this.selectedTheme=this.mindMap.getTheme()||"default"),this.isMultiRoot&&null===this.selectedLayoutRootIndex&&this.rootsInfo.length>0){this.selectedLayoutRootIndex=0;const e=t[0].nodeData||t[0].getData();this.selectedLayout=e.data&&e.data.layout||"logicalStructure"}else this.isMultiRoot||(this.selectedLayout=this.mindMap.getLayout()||"logicalStructure")}},updateCurrentData(){this.mindMap&&(this.currentData=this.mindMap.getData())},updateAssociationsData(){if(this.mindMap&&this.mindMap.associativeLine){const t=this.mindMap.associativeLine.lineList;this.associationCount=t.length,this.associationsData=t.map((t,e)=>{const[a,i,s,o,n]=t;return{id:e,fromNodeText:o&&o.getData?o.getData("text"):"未知",toNodeText:n&&n.getData?n.getData("text"):"未知",text:s&&s.text?s.text():"无"}}).filter(t=>"未知"!==t.fromNodeText||"未知"!==t.toNodeText)}else this.associationCount=0,this.associationsData=[]},refreshData(){this.updateAllInfo(),this.addLog("刷新数据")},fitView(){this.mindMap&&this.mindMap.view&&(this.mindMap.view.fit(),this.addLog("适应视图"))},checkAssociativeLineStatus(){const t=()=>{if(this.isAssociativeMode&&this.mindMap&&this.mindMap.associativeLine){if(!this.mindMap.associativeLine.isCreatingLine)return this.isAssociativeMode=!1,void this.addLog("关联线创建完成,退出创建模式");setTimeout(t,300)}};setTimeout(t,300)},applyTheme(){this.mindMap&&this.selectedTheme&&(this.isMultiRoot&&null!==this.selectedRootIndex?(this.mindMap.setRootTheme(this.selectedRootIndex,this.selectedTheme),this.addLog(`设置根节点 ${this.selectedRootIndex+1} 主题为: ${this.selectedTheme}`)):this.isMultiRoot||(this.mindMap.setTheme(this.selectedTheme),this.addLog("设置主题为: "+this.selectedTheme)),this.updateBasicInfo())},resetTheme(){this.mindMap&&(this.isMultiRoot&&null!==this.selectedRootIndex?(this.mindMap.setRootTheme(this.selectedRootIndex,"default"),this.addLog(`重置根节点 ${this.selectedRootIndex+1} 主题为默认`)):this.isMultiRoot||(this.mindMap.setTheme("default"),this.addLog("重置主题为默认")),this.selectedTheme="default",this.updateBasicInfo())},applyLayout(){this.mindMap&&this.selectedLayout&&(this.isMultiRoot&&null!==this.selectedLayoutRootIndex?(this.mindMap.setRootLayout(this.selectedLayoutRootIndex,this.selectedLayout),this.addLog(`设置根节点 ${this.selectedLayoutRootIndex+1} 布局为: ${this.selectedLayout}`)):this.isMultiRoot||(this.mindMap.setLayout(this.selectedLayout),this.addLog("设置布局为: "+this.selectedLayout)),this.updateBasicInfo())},resetLayout(){if(!this.mindMap)return;const t="logicalStructure";this.isMultiRoot&&null!==this.selectedLayoutRootIndex?(this.mindMap.setRootLayout(this.selectedLayoutRootIndex,t),this.addLog(`重置根节点 ${this.selectedLayoutRootIndex+1} 布局为默认`)):this.isMultiRoot||(this.mindMap.setLayout(t),this.addLog("重置布局为默认")),this.selectedLayout=t,this.updateBasicInfo()},testPerRootThemes(){if(!this.mindMap)return;const t={multiRoot:!0,roots:[{data:{text:"A",layout:"logicalStructure",theme:"classic"},children:[{data:{text:"A1"}},{data:{text:"A2"}}]},{data:{text:"B",layout:"mindMap",theme:"dark"},children:[{data:{text:"B1"}},{data:{text:"B2"}}]},{data:{text:"C",theme:"freshGreen"},children:[{data:{text:"C1"}},{data:{text:"C2"}}]},{data:{text:"D",theme:"freshBlue"},children:[{data:{text:"D1"}},{data:{text:"D2"}}]}]};this.mindMap.setData(t),this.addLog("加载多主题测试数据"),this.$message.success("已加载不同主题的多根节点!")},createFlowChartNode(t){if(!this.mindMap)return;a("8d8b").default;const{FLOWCHART_NODE_TYPES:e,FLOWCHART_NODE_STYLES:i}=a("6f5e"),s=i[t]||i[e.PROCESS],o=this.mindMap.getRootNodes(),n=200,l=100,r=200*o.length,d={data:{text:this.getNodeTypeText(t),isFlowChart:!0,customLeft:n+r,customTop:l+200*Math.random(),flowchart:{nodeType:t,showConnectors:!0,connectorPositions:["top","right","bottom","left"],preventOverlap:!0,hideExpandBtn:!0,hideAddBtn:!0},...s},children:[]};this.mindMap.addRootNode(d),this.addLog(`创建${this.getNodeTypeText(t)}节点`),this.$message.success(`已创建${this.getNodeTypeText(t)}!`)},getNodeTypeText(t){const e={process:"流程",decision:"决策",start:"开始",end:"结束",subprocess:"子流程",data:"数据",document:"文档",database:"数据库",preparation:"准备"};return e[t]||"流程"},convertToFlowChart(){if(!this.mindMap)return;const t=this.mindMap.renderer.activeNodeList[0];t?(this.mindMap.convertNodeToFlowChart(t,"process"),this.addLog("节点转换为流程图节点"),this.$message.success("已转换为流程图节点")):this.$message.warning("请先选择一个节点")},convertToNormal(){if(!this.mindMap)return;const t=this.mindMap.renderer.activeNodeList[0];t?t.nodeData.data.isFlowChart?(this.mindMap.convertNodeToNormal(t),this.addLog("转换为普通节点"),this.$message.success("已转换为普通节点")):this.$message.warning("只有流程图节点才能转换为普通节点"):this.$message.warning("请先选择一个节点")},testFlowChartMode(){if(!this.mindMap)return;const t={multiRoot:!0,roots:[{data:{text:"项目规划",layout:"mindMap"},children:[{data:{text:"需求分析"}},{data:{text:"技术选型"}},{data:{text:"时间规划"}}]},{data:{text:"开始",isFlowChart:!0,customLeft:400,customTop:50,flowchart:{nodeType:"start",showConnectors:!0,connectorPositions:["bottom"]},shape:"circle",backgroundColor:"#e8f5e9",borderColor:"#1b5e20"},children:[]},{data:{text:"需求评审",isFlowChart:!0,customLeft:400,customTop:150,flowchart:{nodeType:"process",showConnectors:!0,connectorPositions:["top","bottom"]},shape:"rectangle",backgroundColor:"#e1f5fe",borderColor:"#01579b"},children:[]},{data:{text:"是否通过",isFlowChart:!0,customLeft:400,customTop:250,flowchart:{nodeType:"decision",showConnectors:!0,connectorPositions:["top","right","bottom","left"]},shape:"diamond",backgroundColor:"#fff3e0",borderColor:"#e65100"},children:[]}]};this.mindMap.setData(t),this.addLog("加载混合模式测试数据"),this.$message.success("已加载流程图混合模式测试数据!")},testOrthogonalLines(){if(!this.mindMap)return;const t={multiRoot:!0,roots:[{data:{text:"开始",isFlowChart:!0,flowchart:{nodeType:"start"},customLeft:100,customTop:200},children:[]},{data:{text:"处理数据",isFlowChart:!0,flowchart:{nodeType:"process"},customLeft:300,customTop:200},children:[]},{data:{text:"判断条件",isFlowChart:!0,flowchart:{nodeType:"decision"},customLeft:500,customTop:200},children:[]},{data:{text:"分支处理1",isFlowChart:!0,flowchart:{nodeType:"process"},customLeft:700,customTop:100},children:[]},{data:{text:"分支处理2",isFlowChart:!0,flowchart:{nodeType:"process"},customLeft:700,customTop:300},children:[]},{data:{text:"结束",isFlowChart:!0,flowchart:{nodeType:"end"},customLeft:900,customTop:200},children:[]}]};this.mindMap.setData(t),setTimeout(()=>{let t=[];this.mindMap.renderer.renderTree&&(Array.isArray(this.mindMap.renderer.renderTree)?t=this.mindMap.renderer.renderTree.map(t=>t._node).filter(t=>t):this.mindMap.renderer.root&&(t=[this.mindMap.renderer.root])),t.length>=6&&(this.mindMap.associativeLine.addLine(t[0],t[1]),this.mindMap.associativeLine.addLine(t[1],t[2]),this.mindMap.associativeLine.addLine(t[2],t[3]),this.mindMap.associativeLine.addLine(t[2],t[4]),this.mindMap.associativeLine.addLine(t[3],t[5]),this.mindMap.associativeLine.addLine(t[4],t[5]),this.addLog("创建正交连线测试数据"),this.$message.success("已创建正交连线测试注意观察连线是90度转角的正交路径"))},500)},testRadialLayout(){if(!this.mindMap)return;const t={data:{text:"知识图谱",layout:"radial"},children:[{data:{text:"前端技术"},children:[{data:{text:"JavaScript"},children:[{data:{text:"ES6+"}},{data:{text:"TypeScript"}},{data:{text:"Node.js"}},{data:{text:"Deno"}}]},{data:{text:"CSS"},children:[{data:{text:"Flexbox"}},{data:{text:"Grid"}},{data:{text:"Animation"}}]},{data:{text:"HTML5"}},{data:{text:"WebAssembly"}}]},{data:{text:"框架"},children:[{data:{text:"Vue"}},{data:{text:"React"}},{data:{text:"Angular"}},{data:{text:"Svelte"}},{data:{text:"Solid"}}]},{data:{text:"工具链"},children:[{data:{text:"Webpack"}},{data:{text:"Vite"}},{data:{text:"Rollup"}},{data:{text:"Parcel"}},{data:{text:"ESBuild"}},{data:{text:"SWC"}}]},{data:{text:"后端技术"},children:[{data:{text:"Python"}},{data:{text:"Java"}},{data:{text:"Go"}},{data:{text:"Rust"}},{data:{text:"C++"}}]},{data:{text:"数据库"},children:[{data:{text:"MySQL"}},{data:{text:"PostgreSQL"}},{data:{text:"MongoDB"}},{data:{text:"Redis"}},{data:{text:"Elasticsearch"}}]},{data:{text:"云服务"},children:[{data:{text:"AWS"}},{data:{text:"Azure"}},{data:{text:"Google Cloud"}},{data:{text:"阿里云"}},{data:{text:"腾讯云"}}]},{data:{text:"DevOps"},children:[{data:{text:"Docker"}},{data:{text:"Kubernetes"}},{data:{text:"CI/CD"}},{data:{text:"Jenkins"}}]},{data:{text:"AI/ML"},children:[{data:{text:"TensorFlow"}},{data:{text:"PyTorch"}},{data:{text:"Scikit-learn"}},{data:{text:"Keras"}}]}]};this.mindMap.setLayout("radial"),this.mindMap.setData(t),this.addLog("加载径向布局测试数据(多节点)"),this.$message.success("已切换到径向布局模式!注意观察自动调整的半径")},testRadialLayoutStrategies(){this.mindMap&&this.$confirm("选择要测试的径向布局策略","径向布局策略测试",{distinguishCancelAndClose:!0,confirmButtonText:"固定增量",cancelButtonText:"指数增长",closeButtonText:"加权分配",type:"info"}).then(()=>{this.mindMap.opt.radialLayoutConfig={startRadius:150,radiusIncrement:100,radiusGrowthStrategy:"fixed",angleDistribution:"uniform"},this.testRadialLayout(),this.addLog("使用固定增量策略"),this.$message.success("已切换到固定增量策略")}).catch(t=>{"cancel"===t?(this.mindMap.opt.radialLayoutConfig={startRadius:100,radiusGrowthStrategy:"exponential",exponentialGrowthFactor:1.6,angleDistribution:"uniform"},this.testRadialLayout(),this.addLog("使用指数增长策略"),this.$message.success("已切换到指数增长策略")):"close"===t&&(this.mindMap.opt.radialLayoutConfig={startRadius:120,radiusIncrement:150,radiusGrowthStrategy:"auto",angleDistribution:"weighted",autoAdjustRadius:!0},this.testRadialLayout(),this.addLog("使用加权分配策略"),this.$message.success("已切换到加权分配策略(根据子树大小分配角度)"))})},resetAll(){this.operationLogs=[],this.selectedRootIndex=null,this.selectedTheme="",this.selectedLayoutRootIndex=null,this.selectedLayout="",this.addLog("重置所有状态"),this.initMindMap()},testBraceLineStyle(){if(!this.mindMap)return;const t={data:{text:"A"},children:[{data:{text:"A1"},children:[{data:{text:"A1-1"}},{data:{text:"A1-2"}},{data:{text:"A1-3"}}]},{data:{text:"A2"},children:[{data:{text:"A2-1"}},{data:{text:"A2-2"}}]},{data:{text:"A3"},children:[{data:{text:"A3-1"}},{data:{text:"A3-2"}},{data:{text:"A3-3"}},{data:{text:"A3-4"}}]}]};this.mindMap.setLayout(this.lineTestLayout),this.mindMap.setThemeConfig({lineStyle:"brace",braceCurveSize:this.braceCurveSize}),this.mindMap.setData(t),this.addLog("加载大括号连接线测试数据,布局: "+this.lineTestLayout),this.$message.success("已切换到大括号连接线样式!")},changeLineTestLayout(t){this.mindMap&&(this.mindMap.setLayout(t),this.addLog("切换布局为: "+t))},setLineStyle(t){this.mindMap&&(this.mindMap.setThemeConfig({lineStyle:t}),this.mindMap.render(),this.addLog("切换连线样式为: "+t),this.$message.success(`已切换到${t}连线样式`))},updateBraceCurveSize(){if(!this.mindMap)return;const t=this.mindMap.themeConfig.lineStyle;"brace"===t&&(this.mindMap.setThemeConfig({braceCurveSize:this.braceCurveSize}),this.mindMap.render(),this.addLog(`更新大括号曲线弧度为: ${this.braceCurveSize}px`))},showThemeGeneratorDialog(){this.themeGeneratorDialogVisible=!0;const t=[...D["a"]],e={name:"Default Theme",value:"default",dark:!1,isBuiltin:!0},a=t.some(t=>"default"===t.value);a||t.unshift(e),this.allThemes=t,this.generatedSVGs=[],this.generatedCount=0,this.currentThemeName="",this.isGenerating=!1,this.webpQuality=.8,this.jpgQuality=.85},setQualityPreset(t){switch(t){case"high":this.webpQuality=.95,this.jpgQuality=.95,this.$message.success("已设置为高质量模式(文件较大,质量最佳)");break;case"medium":this.webpQuality=.8,this.jpgQuality=.85,this.$message.success("已设置为平衡模式(质量和大小平衡)");break;case"low":this.webpQuality=.6,this.jpgQuality=.7,this.$message.success("已设置为小文件模式(文件更小,质量尚可)");break;case"tiny":this.webpQuality=.3,this.jpgQuality=.5,this.$message.warning("已设置为极限压缩模式(文件最小,质量较低)");break}},async startGenerating(){if(this.isGenerating)return;this.isGenerating=!0,this.generatedSVGs=[],this.generatedCount=0;const t=document.createElement("div");t.style.position="fixed",t.style.left="-9999px",t.style.width="800px",t.style.height="600px",document.body.appendChild(t);const e={data:{text:"KMIND"},children:[{data:{text:"Subtopic",generalization:{text:"Summary"}},children:[{data:{text:"Add Content"},children:[]},{data:{text:"Add Content"},children:[]}]},{data:{text:"Subtopic"},children:[{data:{text:"Add Content"},children:[]},{data:{text:"Add Content"},children:[]}]}]};try{const s=new l["a"]({el:t,data:e,theme:"default",layout:"logicalStructure",readonly:!0,isShowCreateChildBtnIcon:!1,mousewheelAction:"zoom"});for(let t=0;t<this.allThemes.length;t++){const e=this.allThemes[t];this.currentThemeName=e.name;const o="default"===e.value;s.setTheme(e.value),await new Promise(t=>setTimeout(t,100));try{const t=await s.export("svg",!1,"preview");let n="";if(t.startsWith("data:image/svg+xml;base64,")){const e=t.replace("data:image/svg+xml;base64,","");n=atob(e)}else t.startsWith("data:image/svg+xml;charset=utf-8,")?n=decodeURIComponent(t.replace("data:image/svg+xml;charset=utf-8,","")):t.startsWith("data:image/svg+xml,")&&(n=decodeURIComponent(t.replace("data:image/svg+xml,","")));const l=new DOMParser,r=l.parseFromString(n,"image/svg+xml"),d=r.documentElement;d.setAttribute("xmlns","http://www.w3.org/2000/svg"),d.setAttribute("width","400"),d.setAttribute("height","300"),d.setAttribute("viewBox","0 0 800 600");const c=new XMLSerializer,h=c.serializeToString(d),u=new Blob([h]).size;let p=null,m=0;try{if(p=await s.export("png",!1,"preview"),p){const t=atob(p.split(",")[1]);m=t.length}}catch(a){console.warn("生成PNG失败: "+e.name,a)}let g=null,y=0,v=null,b=0;try{const t=document.createElement("canvas"),e=t.getContext("2d");if(p){const a=new Image;if(await new Promise((t,e)=>{a.onload=t,a.onerror=e,a.src=p}),t.width=a.width,t.height=a.height,e.drawImage(a,0,0),g=t.toDataURL("image/webp",this.webpQuality),g&&g.startsWith("data:image/webp")){const t=atob(g.split(",")[1]);y=t.length}else g=null;e.fillStyle="#FFFFFF",e.fillRect(0,0,t.width,t.height),e.drawImage(a,0,0),v=t.toDataURL("image/jpeg",this.jpgQuality);const i=atob(v.split(",")[1]);b=i.length}}catch(i){console.warn("生成WebP/JPG失败: "+e.name,i)}this.generatedSVGs.push({name:e.name,value:e.value,dark:e.dark||!1,isDefault:o,svgContent:h,svgSize:u,pngDataUrl:p,pngSize:m,webpDataUrl:g,webpSize:y,jpgDataUrl:v,jpgSize:b}),this.generatedCount++}catch(i){console.error(`生成主题 ${e.name} 失败:`,i),this.$message.error(`生成主题 ${e.name} 失败`)}t%5===0&&await new Promise(t=>setTimeout(t,50))}s.destroy(),document.body.removeChild(t),this.$message.success(`成功生成 ${this.generatedCount} 个主题预览图`)}catch(i){console.error("批量生成失败:",i),this.$message.error("批量生成失败: "+i.message)}finally{this.isGenerating=!1,this.currentThemeName=""}},downloadSingleSVG(t){const e=new Blob([t.svgContent],{type:"image/svg+xml;charset=utf-8"}),a=URL.createObjectURL(e),i=document.createElement("a");i.href=a,i.download=t.value+".svg",document.body.appendChild(i),i.click(),document.body.removeChild(i),URL.revokeObjectURL(a)},downloadSinglePNG(t){if(!t.pngDataUrl)return;const e=document.createElement("a");e.href=t.pngDataUrl,e.download=t.value+".png",document.body.appendChild(e),e.click(),document.body.removeChild(e)},downloadAllSVGs(){0!==this.generatedSVGs.length&&(this.generatedSVGs.forEach((t,e)=>{setTimeout(()=>{this.downloadSingleSVG(t)},200*e)}),this.$message.success(`开始下载 ${this.generatedSVGs.length} 个SVG文件`))},downloadAllPNGs(){const t=this.generatedSVGs.filter(t=>t.pngDataUrl);0!==t.length&&(t.forEach((t,e)=>{setTimeout(()=>{this.downloadSinglePNG(t)},200*e)}),this.$message.success(`开始下载 ${t.length} 个PNG文件`))},clearGenerated(){this.generatedSVGs=[],this.generatedCount=0,this.$message.success("已清空生成的预览图")},removeGenerated(t){this.generatedSVGs.splice(t,1),this.generatedCount=this.generatedSVGs.length},formatFileSize(t){if(0===t)return"0 B";const e=1024,a=["B","KB","MB","GB"],i=Math.floor(Math.log(t)/Math.log(e));return parseFloat((t/Math.pow(e,i)).toFixed(2))+" "+a[i]},downloadSingleWebP(t){if(!t.webpDataUrl)return;const e=document.createElement("a");e.href=t.webpDataUrl,e.download=t.value+".webp",document.body.appendChild(e),e.click(),document.body.removeChild(e)},downloadSingleJPG(t){if(!t.jpgDataUrl)return;const e=document.createElement("a");e.href=t.jpgDataUrl,e.download=t.value+".jpg",document.body.appendChild(e),e.click(),document.body.removeChild(e)},downloadAllWebPs(){const t=this.generatedSVGs.filter(t=>t.webpDataUrl);0!==t.length&&(t.forEach((t,e)=>{setTimeout(()=>{this.downloadSingleWebP(t)},200*e)}),this.$message.success(`开始下载 ${t.length} 个WebP文件`))},downloadAllJPGs(){const t=this.generatedSVGs.filter(t=>t.jpgDataUrl);0!==t.length&&(t.forEach((t,e)=>{setTimeout(()=>{this.downloadSingleJPG(t)},200*e)}),this.$message.success(`开始下载 ${t.length} 个JPG文件`))},showLayoutGeneratorDialog(){this.layoutGeneratorDialogVisible=!0,this.allLayouts=this.availableLayouts.map(t=>({...t,svgData:null,svgSize:null,pngData:null,pngSize:null,webpData:null,webpSize:null,jpgData:null,jpgSize:null})),this.generatedLayoutSVGs=[],this.generatedLayoutCount=0},async generateAllLayoutPreviews(){if(!this.isGeneratingLayouts){this.isGeneratingLayouts=!0,this.generatedLayoutCount=0,this.generatedLayoutSVGs=[];try{const e=document.createElement("div");e.style.position="absolute",e.style.left="-9999px",e.style.width="800px",e.style.height="600px",document.body.appendChild(e);const a={data:{text:"KMind"},children:[{data:{text:"Subtopic 1"},children:[{data:{text:"Detail 1-1"}},{data:{text:"Detail 1-2"}}]},{data:{text:"Subtopic 2"},children:[{data:{text:"Detail 2-1"}},{data:{text:"Detail 2-2"}}]},{data:{text:"Subtopic 3"},children:[{data:{text:"Detail 3-1"}},{data:{text:"Detail 3-2"}}]}]};for(let i=0;i<this.allLayouts.length;i++){const s=this.allLayouts[i];this.currentLayoutName=s.name;try{const i=new l["a"]({el:e,data:a,layout:s.value,theme:"default"});await new Promise(t=>setTimeout(t,200));const o=await i.export("svg",!1,"default"),n=new Blob([o],{type:"image/svg+xml"}),r=n.size,d="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(o))),c=await i.export("png",!1,"default"),h=atob(c.split(",")[1]),u=h.length;let p=null,m=0,g=null,y=0;try{const t=new Image;await new Promise((e,a)=>{t.onload=e,t.onerror=a,t.src=c});const e=document.createElement("canvas");e.width=t.width,e.height=t.height;const a=e.getContext("2d");if(a.drawImage(t,0,0),e.toDataURL("image/webp").indexOf("image/webp")>-1){p=e.toDataURL("image/webp",this.layoutWebpQuality);const t=atob(p.split(",")[1]);m=t.length}g=e.toDataURL("image/jpeg",this.layoutJpgQuality);const i=atob(g.split(",")[1]);y=i.length}catch(t){console.warn("生成WebP/JPG失败: "+s.name,t)}this.$set(s,"svgData",d),this.$set(s,"svgSize",this.formatFileSize(r)),this.$set(s,"pngData",c),this.$set(s,"pngSize",this.formatFileSize(u)),this.$set(s,"webpData",p),this.$set(s,"webpSize",this.formatFileSize(m)),this.$set(s,"jpgData",g),this.$set(s,"jpgSize",this.formatFileSize(y)),this.generatedLayoutSVGs.push({...s,svgContent:o,svgDataUrl:d,pngDataUrl:c,webpDataUrl:p,jpgDataUrl:g}),this.generatedLayoutCount++,i.destroy()}catch(t){console.error(`生成布局 ${s.name} 失败:`,t),this.$message.error(`生成布局 ${s.name} 失败`)}i%3===0&&await new Promise(t=>setTimeout(t,50))}document.body.removeChild(e),this.$message.success(`成功生成 ${this.generatedLayoutCount} 个布局预览图`)}catch(t){console.error("批量生成布局失败:",t),this.$message.error("批量生成失败: "+t.message)}finally{this.isGeneratingLayouts=!1,this.currentLayoutName=""}}},async generateLayoutPreview(t){if(!this.isGeneratingLayouts){this.isGeneratingLayouts=!0,this.currentLayoutName=t.name;try{const a=document.createElement("div");a.style.position="absolute",a.style.left="-9999px",a.style.width="800px",a.style.height="600px",document.body.appendChild(a);const i={data:{text:"Main Topic"},children:[{data:{text:"Subtopic 1"},children:[{data:{text:"Detail 1-1"}},{data:{text:"Detail 1-2"}}]},{data:{text:"Subtopic 2"},children:[{data:{text:"Detail 2-1"}},{data:{text:"Detail 2-2"}}]}]},s=new l["a"]({el:a,data:i,layout:t.value,theme:"default"});await new Promise(t=>setTimeout(t,200));const o=await s.export("svg",!1,"default"),n=new Blob([o],{type:"image/svg+xml"}),r=n.size,d="data:image/svg+xml;base64,"+btoa(unescape(encodeURIComponent(o))),c=await s.export("png",!1,"default"),h=atob(c.split(",")[1]),u=h.length;let p=null,m=0,g=null,y=0;try{const t=new Image;await new Promise((e,a)=>{t.onload=e,t.onerror=a,t.src=c});const e=document.createElement("canvas");e.width=t.width,e.height=t.height;const a=e.getContext("2d");if(a.drawImage(t,0,0),e.toDataURL("image/webp").indexOf("image/webp")>-1){p=e.toDataURL("image/webp",this.layoutWebpQuality);const t=atob(p.split(",")[1]);m=t.length}g=e.toDataURL("image/jpeg",this.layoutJpgQuality);const i=atob(g.split(",")[1]);y=i.length}catch(e){console.warn("生成WebP/JPG失败:",e)}this.$set(t,"svgData",d),this.$set(t,"svgSize",this.formatFileSize(r)),this.$set(t,"pngData",c),this.$set(t,"pngSize",this.formatFileSize(u)),this.$set(t,"webpData",p),this.$set(t,"webpSize",this.formatFileSize(m)),this.$set(t,"jpgData",g),this.$set(t,"jpgSize",this.formatFileSize(y)),s.destroy(),document.body.removeChild(a),this.$message.success(`成功生成布局 ${t.name} 的预览图`)}catch(e){console.error("生成布局预览失败:",e),this.$message.error("生成失败: "+e.message)}finally{this.isGeneratingLayouts=!1,this.currentLayoutName=""}}},downloadLayoutPreview(t){if(!t.svgData)return;const e=[];if(t.svgData){const a=document.createElement("a");a.href=t.svgData,a.download=t.value+".svg",document.body.appendChild(a),a.click(),document.body.removeChild(a),e.push("SVG")}t.pngData&&(setTimeout(()=>{const e=document.createElement("a");e.href=t.pngData,e.download=t.value+".png",document.body.appendChild(e),e.click(),document.body.removeChild(e)},200),e.push("PNG")),t.webpData&&(setTimeout(()=>{const e=document.createElement("a");e.href=t.webpData,e.download=t.value+".webp",document.body.appendChild(e),e.click(),document.body.removeChild(e)},400),e.push("WebP")),t.jpgData&&(setTimeout(()=>{const e=document.createElement("a");e.href=t.jpgData,e.download=t.value+".jpg",document.body.appendChild(e),e.click(),document.body.removeChild(e)},600),e.push("JPG")),this.$message.success(`开始下载 ${t.name}${e.join("、")}格式`)},downloadAllLayoutSVGs(){0!==this.generatedLayoutSVGs.length&&(this.generatedLayoutSVGs.forEach((t,e)=>{t.svgDataUrl&&setTimeout(()=>{const e=document.createElement("a");e.href=t.svgDataUrl,e.download=t.value+".svg",document.body.appendChild(e),e.click(),document.body.removeChild(e)},200*e)}),this.$message.success(`开始下载 ${this.generatedLayoutSVGs.length} 个SVG文件`))},downloadAllLayoutPNGs(){const t=this.generatedLayoutSVGs.filter(t=>t.pngDataUrl);0!==t.length&&(t.forEach((t,e)=>{setTimeout(()=>{const e=document.createElement("a");e.href=t.pngDataUrl,e.download=t.value+".png",document.body.appendChild(e),e.click(),document.body.removeChild(e)},200*e)}),this.$message.success(`开始下载 ${t.length} 个PNG文件`))},downloadAllLayoutWebPs(){const t=this.generatedLayoutSVGs.filter(t=>t.webpDataUrl);0!==t.length&&(t.forEach((t,e)=>{setTimeout(()=>{const e=document.createElement("a");e.href=t.webpDataUrl,e.download=t.value+".webp",document.body.appendChild(e),e.click(),document.body.removeChild(e)},200*e)}),this.$message.success(`开始下载 ${t.length} 个WebP文件`))},downloadAllLayoutJPGs(){const t=this.generatedLayoutSVGs.filter(t=>t.jpgDataUrl);0!==t.length&&(t.forEach((t,e)=>{setTimeout(()=>{const e=document.createElement("a");e.href=t.jpgDataUrl,e.download=t.value+".jpg",document.body.appendChild(e),e.click(),document.body.removeChild(e)},200*e)}),this.$message.success(`开始下载 ${t.length} 个JPG文件`))},clearGeneratedLayouts(){this.allLayouts.forEach(t=>{this.$set(t,"svgData",null),this.$set(t,"svgSize",null),this.$set(t,"pngData",null),this.$set(t,"pngSize",null),this.$set(t,"webpData",null),this.$set(t,"webpSize",null),this.$set(t,"jpgData",null),this.$set(t,"jpgSize",null)}),this.generatedLayoutSVGs=[],this.generatedLayoutCount=0,this.$message.success("已清空生成的布局预览图")},testSnapAndDrag(){if(!this.mindMap)return;const t={multiRoot:!0,roots:[{data:{text:"拖拽起点",isFlowChart:!0,flowchart:{nodeType:"start"},customLeft:200,customTop:200},children:[]},{data:{text:"目标节点1",isFlowChart:!0,flowchart:{nodeType:"process"},customLeft:400,customTop:100},children:[]},{data:{text:"目标节点2",isFlowChart:!0,flowchart:{nodeType:"process"},customLeft:400,customTop:300},children:[]}]};this.mindMap.setData(t),this.$message.info({message:"测试说明1. 从节点的连接点拖拽到其他节点会吸附到最近的连接点2. 拖拽到空白处会创建新节点",duration:5e3}),this.addLog("加载吸附和拖拽创建测试数据")},testConnectorEvents(){this.mindMap&&(this.mindMap.on("flowchart_connector_click",t=>{this.addLog(`连接点点击: 节点 ${t.node.getData("text")}, 位置 ${t.position}`),this.$message.info(`点击了 ${t.position} 连接点`)}),this.mindMap.on("flowchart_connector_drag_start",t=>{this.addLog(`连接点拖拽开始: 节点 ${t.node.getData("text")}, 位置 ${t.position}`),this.$message.success("连接点拖拽开始,可以拖拽创建关联线")}),this.addLog("已启用连接点事件监听"),this.$message.success("连接点事件监听已启用,请将鼠标悬停在流程图节点上查看连接点"),this.mindMap.on("flowchart_line_created",t=>{this.addLog(`流程图连线创建: 从 ${t.startNode.getData("text")}${t.endNode.getData("text")}`),this.$message.success("流程图连线创建成功!")}))}}},$=G,N=(a("8776"),a("2877")),I=Object(N["a"])($,i,s,!1,null,"8593ad40",null);e["default"]=I.exports},cf98:function(t,e,a){"use strict";t.exports={IndexSizeError:{s:"INDEX_SIZE_ERR",c:1,m:1},DOMStringSizeError:{s:"DOMSTRING_SIZE_ERR",c:2,m:0},HierarchyRequestError:{s:"HIERARCHY_REQUEST_ERR",c:3,m:1},WrongDocumentError:{s:"WRONG_DOCUMENT_ERR",c:4,m:1},InvalidCharacterError:{s:"INVALID_CHARACTER_ERR",c:5,m:1},NoDataAllowedError:{s:"NO_DATA_ALLOWED_ERR",c:6,m:0},NoModificationAllowedError:{s:"NO_MODIFICATION_ALLOWED_ERR",c:7,m:1},NotFoundError:{s:"NOT_FOUND_ERR",c:8,m:1},NotSupportedError:{s:"NOT_SUPPORTED_ERR",c:9,m:1},InUseAttributeError:{s:"INUSE_ATTRIBUTE_ERR",c:10,m:1},InvalidStateError:{s:"INVALID_STATE_ERR",c:11,m:1},SyntaxError:{s:"SYNTAX_ERR",c:12,m:1},InvalidModificationError:{s:"INVALID_MODIFICATION_ERR",c:13,m:1},NamespaceError:{s:"NAMESPACE_ERR",c:14,m:1},InvalidAccessError:{s:"INVALID_ACCESS_ERR",c:15,m:1},ValidationError:{s:"VALIDATION_ERR",c:16,m:0},TypeMismatchError:{s:"TYPE_MISMATCH_ERR",c:17,m:1},SecurityError:{s:"SECURITY_ERR",c:18,m:1},NetworkError:{s:"NETWORK_ERR",c:19,m:1},AbortError:{s:"ABORT_ERR",c:20,m:1},URLMismatchError:{s:"URL_MISMATCH_ERR",c:21,m:1},QuotaExceededError:{s:"QUOTA_EXCEEDED_ERR",c:22,m:1},TimeoutError:{s:"TIMEOUT_ERR",c:23,m:1},InvalidNodeTypeError:{s:"INVALID_NODE_TYPE_ERR",c:24,m:1},DataCloneError:{s:"DATA_CLONE_ERR",c:25,m:1}}}}]);