[{"data":1,"prerenderedAt":6817},["ShallowReactive",2],{"msfe-doc:\u002Fguide\u002Fmd-editor":3},{"id":4,"title":5,"body":6,"description":6803,"extension":6804,"keywords":6805,"locale":1825,"meta":6811,"navigation":319,"order":376,"path":6812,"section":6813,"seo":6814,"stem":6815,"__hash__":6816},"docs\u002Fguide\u002Fmd-editor.zh-CN.md","MD Editor 产品组件",{"type":7,"value":8,"toc":6764},"minimark",[9,13,27,38,42,86,89,101,125,128,131,134,137,152,155,224,231,290,293,439,447,458,462,465,472,559,569,572,575,586,589,607,904,926,933,972,983,986,997,1080,1090,1108,1127,1130,1133,1136,1159,1162,1172,1179,1186,1189,1192,1221,1228,1285,1303,1306,1309,1320,1335,1342,1363,1373,1377,1738,1762,1765,1782,1797,1800,2186,2197,2248,2255,2401,2404,2469,2479,2663,2702,2705,2719,2735,2756,2785,2804,2808,2822,2825,3161,3176,3194,3230,3233,3249,3581,3612,3615,3634,4054,4070,4092,4104,4121,4179,4204,4208,4244,4270,4273,4284,4386,4438,4472,4475,4478,4561,4564,4655,4666,4689,4692,4703,4752,4770,4773,4787,4794,4801,4846,4850,4853,4883,4886,4901,4910,5011,5053,5056,5059,5299,5309,5320,5323,5333,5340,5345,5348,5352,5369,5413,5420,5423,5430,5433,5440,5518,5554,5611,5615,5621,5669,5672,5680,5698,5742,5745,5748,5754,5889,5906,5915,5950,5957,5964,5971,5974,5977,5980,5989,6049,6052,6055,6067,6070,6183,6200,6207,6211,6251,6258,6261,6489,6522,6526,6538,6635,6652,6687,6691,6704,6725,6728,6760],[10,11,12],"h2",{"id":12},"先体验完整文档",[14,15,16,21,22,26],"p",{},[17,18,20],"a",{"href":19},"\u002Fmd-editor","打开 MD Editor 独立示例","。同一份文档可以编辑、查看源码、只读浏览，\n也可以通过 ",[23,24,25],"code",{},"MdProse"," 查看静态阅读快照。示例包含嵌套提示块、折叠块、任务、列表、\n引用、代码、表格、公式、流程图、思维导图、定义列表和脚注。模式切换保留编辑实例、选区与撤销历史。",[14,28,29,32,33,37],{},[23,30,31],{},"@quirekit\u002Fmd-editor"," 组合 MSFE 能力与 QuireKit 公共组件。源码、事务与解析仍属于\nMSFE；正文外观由 Prose 定义。需要自己组合整个界面时，继续使用 ",[17,34,36],{"href":35},"\u002Fguide\u002Fvue","Vue 接入","。",[10,39,41],{"id":40},"先选保存模型再选编辑器","先选保存模型，再选编辑器",[43,44,45,58],"table",{},[46,47,48],"thead",{},[49,50,51,55],"tr",{},[52,53,54],"th",{},"需求",[52,56,57],{},"选择与边界",[59,60,61,70,78],"tbody",{},[49,62,63,67],{},[64,65,66],"td",{},"README、技术文章、Git 审阅、跨工具 Markdown",[64,68,69],{},"MD Editor 以源码为权威；文档和源码视图共享文本与历史",[49,71,72,75],{},[64,73,74],{},"富文档、可视块、更丰富的表格和格式",[64,76,77],{},"Block Editor 使用 PM 结构文档与产品界面；按当前已交付能力接入，导出 Markdown 是有损风险的转换",[49,79,80,83],{},[64,81,82],{},"自定义 schema、节点视图、已有 Tiptap 生态",[64,84,85],{},"原生 Tiptap 提供框架与扩展，宿主组合 UI 和服务；结构能力由 schema 与扩展决定",[14,87,88],{},"GFM 表格支持粗体、斜体、删除线、链接和行内代码；不支持嵌套表格、列表、代码块、多个段落、\n合并单元格和任意列宽。多种行内样式可以嵌套，但标记前后的标点与文字决定实际解析。\n行内代码内容按字面解释。不要把当前尚未实现的局部格式拆分，混同为 Markdown 禁止样式叠加。",[14,90,91,92,96,97,100],{},"可视格式命令共用 ",[17,93,95],{"href":94},"\u002Fapi\u002Fcommands#%E8%AF%AD%E4%B9%89%E6%A0%BC%E5%BC%8F%E5%91%BD%E4%BB%A4","语法保真规划","：保留既有样式并确认目标样式成立，\n否则拒绝并保留原文；不会偷偷添加空格。单元格内允许行内格式，禁用标题、列表和块插入。\n源码输入保持自由，不自动修复未完成或自定义语法。未知结构仍走源码回退。\n扩展语法需要对应阅读器；仅保存 ",[23,98,99],{},".md"," 不会自动包含评论、协作等外部状态。",[14,102,103,104,107,108,114,115,114,120,37],{},"完整对照与可编辑例子见 ",[17,105,106],{"href":19},"固定默认文档","。规范依据：\n",[17,109,113],{"href":110,"rel":111},"https:\u002F\u002Fgithub.github.com\u002Fgfm\u002F#tables-extension-",[112],"nofollow","GFM 表格","、\n",[17,116,119],{"href":117,"rel":118},"https:\u002F\u002Fspec.commonmark.org\u002F0.31.2\u002F#emphasis-and-strong-emphasis",[112],"CommonMark 强调",[17,121,124],{"href":122,"rel":123},"https:\u002F\u002Ftiptap.dev\u002Fdocs\u002Feditor\u002Fcore-concepts\u002Fschema",[112],"Tiptap schema",[10,126,127],{"id":127},"四种视图",[14,129,130],{},"桌面的代码语言使用紧凑下拉列表，可通过方向键和标签前缀选择；文字样式使用按钮旁的\n选择面板。窄屏代码语言保留可搜索的底部面板，文字样式整合到底部文字格式任务。\n未知的现有语言仍会列出，选择“纯文本”会清除围栏的语言标记。\n代码语言选择立即写回，可一次撤销；取消选择保留原文。文字格式按钮也立即应用，\n关闭面板不会撤销已应用的设置。\n示例页在窄屏使用同样的面板切换文档视图，回到编辑时保留选区与撤销历史。",[14,132,133],{},"窄于 768px 时，正文使用紧凑留白，底部工具栏提供撤销、重做、插入、文字样式、列表和\n导入\u002F导出。底栏使用公共 Toolbar 移动模式，不显示 Tooltip；当前表格动作只有放不下时才\n收进“更多”，点击打开底部动作面板。插入目录先展示图片、链接、表格等常用内容，再展示\n图表、结构和文字格式；搜索和参数表单提供输入提示。文字格式提供“全选、选中当前块”，后者选择光标所在的\n最近完整 Markdown 块。空行与不完整围栏不提供块选择，选择动作不写源码或进入历史。\n打开设置面板后，已聚焦过的正文保留静止光标或范围选区。\n源文档替换、只读\u002Flocked 会清理或隐藏静止光标。移动 live 的键盘关闭或窗口失焦保留\n被禁用的自绘端点；点击已有选区只切换操作菜单，不重新聚焦或唤起键盘。",[14,135,136],{},"选区菜单使用公共 Toolbar，提供复制、剪切、粘贴和全选，执行后自动收起。\n粘贴读取系统剪贴板中的纯文本；浏览器不允许读取或使用局域网 HTTP 时，会打开粘贴面板，\n可在“粘贴内容”输入框中调用系统粘贴，再点击“粘贴”替换原选区。取消或空内容不改动正文。\n粘贴和剪切均可一次撤销；等待读取期间若选区或文档已改变，旧请求会取消。",[14,138,139,140,143,144,147,148,151],{},"窄屏触摸设备聚焦可编辑正文后显示公共 ",[23,141,142],{},"SelectionHandles"," 光标手柄：\n拖动圆点移动光标；长按正文或圆点先保留插入点，实际拖动才扩大选区，不预选词语。松手后可拖动任一端点，\n跨行或反向调整时保持端点身份。选区移动不增加文本撤销记录。移动 ",[23,145,146],{},"live"," 模式的正文\n退出原生可编辑状态，由独立输入代理和共享 ",[23,149,150],{},"@quirekit\u002Fime"," 接收键盘与中文组合输入，\n光标和选区由产品绘制，避免系统菜单、光标和选区重叠。预编辑文字临时显示在正文中，\n确认只提交一笔 CodeMirror 事务并可一次撤销；组合输入时光标继续显示，但手柄暂不可拖动。\n源码、桌面、只读和独立嵌入编辑器保留各自的输入方式。文档、选区、命令和历史始终由 MSFE\u002FCM 持有。\n隐藏语法和零高度间隙只接受两侧的可见光标位置。点击或拖动到表格分隔线时，光标会\n落到相邻单元格的文字插入点，空单元格仍可输入；边界处的中文预编辑保留在对应单元格内。\n拖选靠近可用区域边缘时自动滚动，\n松手立即停止。键盘缩小可用区域后，光标与圆点一起滚到工具栏上方；已可见的连续输入\n不重复滚动，用户手动滚动也不会被拉回原位置。\n工具栏消费当前可视视口，键盘遮挡时不重复加入底部安全区；示例编辑器 route 禁用 pinch，\n原生输入至少使用 16px 字体以减少聚焦缩放。真实 iOS 的键盘附件条和候选窗仍需设备验证。",[14,153,154],{},"MD Editor 有四种视图，编辑和显示的都是同一份 Markdown 原文，中间不经过任何格式转换：",[43,156,157,170],{},[46,158,159],{},[49,160,161,164,167],{},[52,162,163],{},"视图",[52,165,166],{},"设置",[52,168,169],{},"行为",[59,171,172,185,198,211],{},[49,173,174,177,182],{},[64,175,176],{},"文档视图（默认）",[64,178,179],{},[23,180,181],{},"view=\"document\"",[64,183,184],{},"点击后仍隐藏已识别的标记，直接编辑正文；表格保持单元格，代码保留工具栏，容器保持连续结构",[49,186,187,190,195],{},[64,188,189],{},"实时预览",[64,191,192],{},[23,193,194],{},"view=\"preview\"",[64,196,197],{},"段落或列表项的标记一起显露；活动表格显示结构源码、所选单元格显示行内标记，容器首尾围栏对齐",[49,199,200,203,208],{},[64,201,202],{},"源码视图",[64,204,205],{},[23,206,207],{},"view=\"source\"",[64,209,210],{},"查看和编辑全部原文",[49,212,213,216,221],{},[64,214,215],{},"阅读视图",[64,217,218],{},[23,219,220],{},"view=\"reading\"",[64,222,223],{},"用组件渲染当前文档，不可编辑；编辑器保持挂载，切回后选区和历史不变",[14,225,226,227,230],{},"只读不是单独的视图，而是叠加在前三种视图上的 ",[23,228,229],{},"readOnly","：只停止输入，链接、折叠和复制照常可用，切换视图时保持不变。\n四种视图共用一份 Markdown、选区、历史和 Prose 样式。示例页列出全部四种视图和只读开关，宿主也可以只提供其中几种。",[232,233,238],"pre",{"className":234,"code":235,"language":236,"meta":237,"style":237},"language-vue shiki shiki-themes github-light github-light github-dark","\u003CMdEditor :markdown=\"initialMarkdown\" view=\"document\" \u002F>\n\u003C!-- 改为 preview、source 或 reading 即切换视图，更新该属性无需重新挂载。 -->\n","vue","",[23,239,240,283],{"__ignoreMap":237},[241,242,245,249,253,256,260,263,267,270,272,275,277,280],"span",{"class":243,"line":244},"line",1,[241,246,248],{"class":247},"sVPnS","\u003C",[241,250,252],{"class":251},"su0ou","MdEditor",[241,254,255],{"class":247}," :",[241,257,259],{"class":258},"sgQzM","markdown",[241,261,262],{"class":247},"=",[241,264,266],{"class":265},"s-HEn","\"",[241,268,269],{"class":247},"initialMarkdown",[241,271,266],{"class":265},[241,273,274],{"class":258}," view",[241,276,262],{"class":247},[241,278,279],{"class":265},"\"document\"",[241,281,282],{"class":247}," \u002F>\n",[241,284,286],{"class":243,"line":285},2,[241,287,289],{"class":288},"sqmzS","\u003C!-- 改为 preview、source 或 reading 即切换视图，更新该属性无需重新挂载。 -->\n",[14,291,292],{},"无框架实例只包含三种可编辑视图（阅读视图是 Vue 组件里的渲染），通过公开方法切换：",[232,294,298],{"className":295,"code":296,"language":297,"meta":237,"style":237},"language-ts shiki shiki-themes github-light github-light github-dark","import { createMdEditor, getMdView, setMdView } from '@quirekit\u002Fmd-editor'\n\nconst editor = createMdEditor({ parent, markdown: '# 标题', view: 'document' })\nconst result = setMdView(editor, 'preview')\nif (!result.ok) console.error(result.reason)\nconsole.log(getMdView(editor)) \u002F\u002F 当前视图\nsetMdView(editor, 'source', true) \u002F\u002F 第三个参数设置只读\n","ts",[23,299,300,315,321,352,374,395,416],{"__ignoreMap":237},[241,301,302,306,309,312],{"class":243,"line":244},[241,303,305],{"class":304},"sDD9d","import",[241,307,308],{"class":247}," { createMdEditor, getMdView, setMdView } ",[241,310,311],{"class":304},"from",[241,313,314],{"class":265}," '@quirekit\u002Fmd-editor'\n",[241,316,317],{"class":243,"line":285},[241,318,320],{"emptyLinePlaceholder":319},true,"\n",[241,322,324,327,331,334,337,340,343,346,349],{"class":243,"line":323},3,[241,325,326],{"class":304},"const",[241,328,330],{"class":329},"sUNQB"," editor",[241,332,333],{"class":304}," =",[241,335,336],{"class":258}," createMdEditor",[241,338,339],{"class":247},"({ parent, markdown: ",[241,341,342],{"class":265},"'# 标题'",[241,344,345],{"class":247},", view: ",[241,347,348],{"class":265},"'document'",[241,350,351],{"class":247}," })\n",[241,353,355,357,360,362,365,368,371],{"class":243,"line":354},4,[241,356,326],{"class":304},[241,358,359],{"class":329}," result",[241,361,333],{"class":304},[241,363,364],{"class":258}," setMdView",[241,366,367],{"class":247},"(editor, ",[241,369,370],{"class":265},"'preview'",[241,372,373],{"class":247},")\n",[241,375,377,380,383,386,389,392],{"class":243,"line":376},5,[241,378,379],{"class":304},"if",[241,381,382],{"class":247}," (",[241,384,385],{"class":304},"!",[241,387,388],{"class":247},"result.ok) console.",[241,390,391],{"class":258},"error",[241,393,394],{"class":247},"(result.reason)\n",[241,396,398,401,404,407,410,413],{"class":243,"line":397},6,[241,399,400],{"class":247},"console.",[241,402,403],{"class":258},"log",[241,405,406],{"class":247},"(",[241,408,409],{"class":258},"getMdView",[241,411,412],{"class":247},"(editor)) ",[241,414,415],{"class":288},"\u002F\u002F 当前视图\n",[241,417,419,422,424,427,430,433,436],{"class":243,"line":418},7,[241,420,421],{"class":258},"setMdView",[241,423,367],{"class":247},[241,425,426],{"class":265},"'source'",[241,428,429],{"class":247},", ",[241,431,432],{"class":329},"true",[241,434,435],{"class":247},") ",[241,437,438],{"class":288},"\u002F\u002F 第三个参数设置只读\n",[14,440,441,442,446],{},"切换不修改源码、不进入撤销栈；拖选或组合输入期间延迟应用，避免改变正在输入的 DOM。\n已隐藏的标记参与原生原子导航，列表回车继续列表，行首退格可以移除列表标记。\n未知或不完整的语法仍保留可编辑源码；自定义投影应遵循 ",[17,443,445],{"href":444},"\u002Fapi\u002Frendering#%E6%BA%90%E7%A0%81%E6%98%BE%E9%9C%B2","源码显露合同","。\n这不意味着任意 Markdown 插件自动拥有可编辑的文档 UI；复杂节点仍需声明投影、命令和回退。",[14,448,449,450,453,454,457],{},"实时预览按语义范围显露：跨行段落一起显示粗体、斜体、链接和行内代码的原始拼写；\n任务项的列表前缀与 ",[23,451,452],{},"[x]"," \u002F ",[23,455,456],{},"[ ]"," 同步显示，同级其他项保持阅读呈现。嵌套列表分别判断\n各层列表项；容器里的段落独立判断，编辑一段不会显露其他段落的行内标记。\n表格进入源码呈现时显示所有竖线和分隔行，但只显露所选单元格的行内标记。\n输入法预编辑沿用这些范围，前后无关的标题、表格、代码、公式和图表继续保留呈现。",[459,460,461],"h3",{"id":461},"回车与块后输入",[14,463,464],{},"光标所在块会显示浅灰圆角背景，帮助识别当前段落、列表或引用的边界。容器内的正文按内部块\n显示提示；这个提示不改源码、不增加间距，也不拦截鼠标。源码视图、只读和 阅读视图不显示它。",[14,466,467,468,471],{},"两种编辑体验都保留新建空段落的高度。被压缩的块间结构分隔行不接受正文光标，导航会落到\n相邻真实内容；源码视图可以在这些行输入，切回后按新语法正常显示正文。\n正文、ATX 标题及嵌套\n容器里的段落按 ",[23,469,470],{},"Enter"," 会插入 Markdown 段落分隔，中间输入会拆分段落；空文档、连续回车和退出空列表后\n都可以直接继续输入。块间纯排版分隔仍由 Prose 控制，编辑动作不重新序列化整篇文档。",[43,473,474,483],{},[46,475,476],{},[49,477,478,481],{},[52,479,480],{},"位置或按键",[52,482,169],{},[59,484,485,495,505,515,532,545],{},[49,486,487,492],{},[64,488,489,490],{},"正文、ATX 标题里的 ",[23,491,470],{},[64,493,494],{},"从光标处分段；末尾开始新段落，标题后恢复正文",[49,496,497,502],{},[64,498,499,500],{},"列表、引用里的 ",[23,501,470],{},[64,503,504],{},"续写当前标记；空列表项或空引用行直接退出一层，退出到正文时保留段落分隔",[49,506,507,512],{},[64,508,509,510],{},"代码正文里的 ",[23,511,470],{},[64,513,514],{},"在当前代码块内换行",[49,516,517,522],{},[64,518,519,520],{},"文档视图的表格单元格里 ",[23,521,470],{},[64,523,524,525,453,528,531],{},"在当前行后新增一行，保留列数与对齐；",[23,526,527],{},"Tab",[23,529,530],{},"Shift+Tab"," 继续切换单元格",[49,533,534,542],{},[64,535,536,453,539],{},[23,537,538],{},"⌘+Enter",[23,540,541],{},"Ctrl+Enter",[64,543,544],{},"在当前代码块、容器、表格、列表或引用后开始段落；嵌套块保留外层引用和列表缩进",[49,546,547,553],{},[64,548,549,550],{},"正文里的 ",[23,551,552],{},"Shift+Enter",[64,554,555,556],{},"插入两个尾随空格加换行的 Markdown 硬换行；保留外层列表缩进与引用前缀，不插入 ",[23,557,558],{},"\u003Cbr>",[14,560,561,562,565,566,568],{},"这些换段规则由 ",[23,563,564],{},"document"," 与 ",[23,567,259],{}," 共用；纯源码视图保持原生源码输入。\n引用末尾第一次回车立即显示引用内的可编辑空行，再按一次退出当前引用层级；嵌套引用逐层退出。\n代码正文保留字面换行，实时预览中的表格保留源码操作；Setext 标题末尾在下划线之后换段。\n换段可以单独撤销，只读与输入法组合状态继续由同一编辑实例管理。",[10,570,571],{"id":571},"光标与编辑边界",[14,573,574],{},"文档模式下，正文光标只能进入可编辑内容。功能插件声明完整结构范围和内部正文范围，\n公共运行时据此处理方向键、Home\u002FEnd、点击、拖选、删除和跨边界替换。所有范围使用\nMarkdown 源码偏移；隐藏标记和压缩空行不会产生第二套行号或文档。",[14,576,577,578,581,582,37],{},"默认行内代码保留样式外侧与内侧两个插入位置，加粗、斜体、高亮等直接进入内容。\n代码围栏和语言信息受保护，代码正文可编辑；部分跨块删除保留外壳，完整选中块可以\n整体删除。属性面板、图表等已投影的块组件按整体对象处理，边缘删除先选中整体。\n正常回车、显式换行与退出块继续使用 ",[23,579,580],{},"addBlockInput()","，见 ",[17,583,585],{"href":584},"\u002Fapi\u002Fcommands#%E5%9D%97%E7%BA%A7%E5%9B%9E%E8%BD%A6","块级回车 API",[459,587,588],{"id":588},"覆盖产品默认规则",[14,590,591,594,595,598,599,602,603,606],{},[23,592,593],{},"editingBoundaries"," 按解析树节点名称覆盖规则。下面把行内代码改为直接进入内容；\n将 ",[23,596,597],{},"navigation"," 改为 ",[23,600,601],{},"split"," 可以恢复默认的内外两侧停留。宿主须先准备 ",[23,604,605],{},"#editor"," 容器。",[232,608,610],{"className":295,"code":609,"language":297,"meta":237,"style":237},"import type { EditingBoundaryRule } from '@quirekit\u002Fmsfe-core'\nimport { createMdEditor } from '@quirekit\u002Fmd-editor'\n\nconst inlineCodeRule: EditingBoundaryRule = {\n  nodes: ['InlineCode'],\n  \u002F** @param context - 当前已确认的语法。@returns 成对标记及可编辑正文，未闭合时返回 null。 *\u002F\n  resolve({ node }) {\n    const [opening, closing] = node.getChildren('CodeMark')\n    if (!opening || !closing) return null\n    return {\n      from: node.from, to: node.to,\n      contentFrom: opening.to, contentTo: closing.from,\n      kind: 'style', navigation: 'content', deletion: 'unwrap',\n    }\n  },\n}\n\nconst editor = createMdEditor({\n  parent: document.getElementById('editor')!,\n  markdown: '正文 `code` 正文',\n  view: 'document',\n  editingBoundaries: [inlineCodeRule],\n})\n",[23,611,612,627,638,642,660,671,691,706,741,769,777,783,789,813,819,825,831,836,850,871,882,892,898],{"__ignoreMap":237},[241,613,614,616,619,622,624],{"class":243,"line":244},[241,615,305],{"class":304},[241,617,618],{"class":304}," type",[241,620,621],{"class":247}," { EditingBoundaryRule } ",[241,623,311],{"class":304},[241,625,626],{"class":265}," '@quirekit\u002Fmsfe-core'\n",[241,628,629,631,634,636],{"class":243,"line":285},[241,630,305],{"class":304},[241,632,633],{"class":247}," { createMdEditor } ",[241,635,311],{"class":304},[241,637,314],{"class":265},[241,639,640],{"class":243,"line":323},[241,641,320],{"emptyLinePlaceholder":319},[241,643,644,646,649,652,655,657],{"class":243,"line":354},[241,645,326],{"class":304},[241,647,648],{"class":329}," inlineCodeRule",[241,650,651],{"class":304},":",[241,653,654],{"class":258}," EditingBoundaryRule",[241,656,333],{"class":304},[241,658,659],{"class":247}," {\n",[241,661,662,665,668],{"class":243,"line":376},[241,663,664],{"class":247},"  nodes: [",[241,666,667],{"class":265},"'InlineCode'",[241,669,670],{"class":247},"],\n",[241,672,673,676,679,682,685,688],{"class":243,"line":397},[241,674,675],{"class":288},"  \u002F** ",[241,677,678],{"class":304},"@param",[241,680,681],{"class":247}," context",[241,683,684],{"class":288}," - 当前已确认的语法。",[241,686,687],{"class":304},"@returns",[241,689,690],{"class":288}," 成对标记及可编辑正文，未闭合时返回 null。 *\u002F\n",[241,692,693,696,699,703],{"class":243,"line":418},[241,694,695],{"class":258},"  resolve",[241,697,698],{"class":247},"({ ",[241,700,702],{"class":701},"sde8i","node",[241,704,705],{"class":247}," }) {\n",[241,707,709,712,715,718,720,723,726,728,731,734,736,739],{"class":243,"line":708},8,[241,710,711],{"class":304},"    const",[241,713,714],{"class":247}," [",[241,716,717],{"class":329},"opening",[241,719,429],{"class":247},[241,721,722],{"class":329},"closing",[241,724,725],{"class":247},"] ",[241,727,262],{"class":304},[241,729,730],{"class":247}," node.",[241,732,733],{"class":258},"getChildren",[241,735,406],{"class":247},[241,737,738],{"class":265},"'CodeMark'",[241,740,373],{"class":247},[241,742,744,747,749,751,754,757,760,763,766],{"class":243,"line":743},9,[241,745,746],{"class":304},"    if",[241,748,382],{"class":247},[241,750,385],{"class":304},[241,752,753],{"class":247},"opening ",[241,755,756],{"class":304},"||",[241,758,759],{"class":304}," !",[241,761,762],{"class":247},"closing) ",[241,764,765],{"class":304},"return",[241,767,768],{"class":329}," null\n",[241,770,772,775],{"class":243,"line":771},10,[241,773,774],{"class":304},"    return",[241,776,659],{"class":247},[241,778,780],{"class":243,"line":779},11,[241,781,782],{"class":247},"      from: node.from, to: node.to,\n",[241,784,786],{"class":243,"line":785},12,[241,787,788],{"class":247},"      contentFrom: opening.to, contentTo: closing.from,\n",[241,790,792,795,798,801,804,807,810],{"class":243,"line":791},13,[241,793,794],{"class":247},"      kind: ",[241,796,797],{"class":265},"'style'",[241,799,800],{"class":247},", navigation: ",[241,802,803],{"class":265},"'content'",[241,805,806],{"class":247},", deletion: ",[241,808,809],{"class":265},"'unwrap'",[241,811,812],{"class":247},",\n",[241,814,816],{"class":243,"line":815},14,[241,817,818],{"class":247},"    }\n",[241,820,822],{"class":243,"line":821},15,[241,823,824],{"class":247},"  },\n",[241,826,828],{"class":243,"line":827},16,[241,829,830],{"class":247},"}\n",[241,832,834],{"class":243,"line":833},17,[241,835,320],{"emptyLinePlaceholder":319},[241,837,839,841,843,845,847],{"class":243,"line":838},18,[241,840,326],{"class":304},[241,842,330],{"class":329},[241,844,333],{"class":304},[241,846,336],{"class":258},[241,848,849],{"class":247},"({\n",[241,851,853,856,859,861,864,867,869],{"class":243,"line":852},19,[241,854,855],{"class":247},"  parent: document.",[241,857,858],{"class":258},"getElementById",[241,860,406],{"class":247},[241,862,863],{"class":265},"'editor'",[241,865,866],{"class":247},")",[241,868,385],{"class":304},[241,870,812],{"class":247},[241,872,874,877,880],{"class":243,"line":873},20,[241,875,876],{"class":247},"  markdown: ",[241,878,879],{"class":265},"'正文 `code` 正文'",[241,881,812],{"class":247},[241,883,885,888,890],{"class":243,"line":884},21,[241,886,887],{"class":247},"  view: ",[241,889,348],{"class":265},[241,891,812],{"class":247},[241,893,895],{"class":243,"line":894},22,[241,896,897],{"class":247},"  editingBoundaries: [inlineCodeRule],\n",[241,899,901],{"class":243,"line":900},23,[241,902,903],{"class":247},"})\n",[14,905,906,909,910,913,914,917,918,921,922,925],{},[23,907,908],{},"nodes"," 是解析树名称，",[23,911,912],{},"from\u002Fto"," 覆盖反引号及文字，",[23,915,916],{},"contentFrom\u002FcontentTo"," 只覆盖代码\n内容；",[23,919,920],{},"deletion: 'unwrap'"," 使边缘删除成对移除标记。规则查询不提交事务，也不改变\n光标像素坐标。宿主离开时调用 ",[23,923,924],{},"editor.destroy()"," 释放实例。",[14,927,928,929,932],{},"Vue 沿用同一个 ",[23,930,931],{},"inlineCodeRule","，通过组件属性传入：",[232,934,936],{"className":234,"code":935,"language":236,"meta":237,"style":237},"\u003CMdEditor :markdown=\"initialMarkdown\" :editing-boundaries=\"[inlineCodeRule]\" \u002F>\n",[23,937,938],{"__ignoreMap":237},[241,939,940,942,944,946,948,950,952,954,956,958,961,963,965,968,970],{"class":243,"line":244},[241,941,248],{"class":247},[241,943,252],{"class":251},[241,945,255],{"class":247},[241,947,259],{"class":258},[241,949,262],{"class":247},[241,951,266],{"class":265},[241,953,269],{"class":247},[241,955,266],{"class":265},[241,957,255],{"class":247},[241,959,960],{"class":258},"editing-boundaries",[241,962,262],{"class":247},[241,964,266],{"class":265},[241,966,967],{"class":247},"[inlineCodeRule]",[241,969,266],{"class":265},[241,971,282],{"class":247},[14,973,974,975,978,979,982],{},"规则在创建\u002F挂载时读取；改变规则集合需要重建实例，并由宿主保留需要的文档。\n",[23,976,977],{},"editingBoundaries: []"," 表示没有宿主覆盖，内置规则继续生效。同一节点采用最高优先级\n的第一条规则；该规则返回 ",[23,980,981],{},"null"," 表示退出该节点的语法边界处理，不再回退到默认规则。\n已投影组件的整体对象保护独立保留。",[459,984,985],{"id":985},"在功能插件中声明",[14,987,988,989,992,993,996],{},"属于功能自身的规则放在 ",[23,990,991],{},"addEditingBoundaries()","。以已有的行内代码语法为例，沿用\n上面的规则声明一个扩展；宿主可以通过 ",[23,994,995],{},"extensions: [InlineCodeBoundaries]"," 安装它：",[232,998,1000],{"className":295,"code":999,"language":297,"meta":237,"style":237},"import { Extension } from '@quirekit\u002Fmsfe-core'\n\nconst InlineCodeBoundaries = Extension.create({\n  name: 'inline-code-boundaries',\n  priority: 1000,\n  \u002F** @returns 导航、选区和编辑共用的语法范围。 *\u002F\n  addEditingBoundaries() { return [inlineCodeRule] },\n})\n",[23,1001,1002,1013,1017,1034,1044,1054,1063,1076],{"__ignoreMap":237},[241,1003,1004,1006,1009,1011],{"class":243,"line":244},[241,1005,305],{"class":304},[241,1007,1008],{"class":247}," { Extension } ",[241,1010,311],{"class":304},[241,1012,626],{"class":265},[241,1014,1015],{"class":243,"line":285},[241,1016,320],{"emptyLinePlaceholder":319},[241,1018,1019,1021,1024,1026,1029,1032],{"class":243,"line":323},[241,1020,326],{"class":304},[241,1022,1023],{"class":329}," InlineCodeBoundaries",[241,1025,333],{"class":304},[241,1027,1028],{"class":247}," Extension.",[241,1030,1031],{"class":258},"create",[241,1033,849],{"class":247},[241,1035,1036,1039,1042],{"class":243,"line":354},[241,1037,1038],{"class":247},"  name: ",[241,1040,1041],{"class":265},"'inline-code-boundaries'",[241,1043,812],{"class":247},[241,1045,1046,1049,1052],{"class":243,"line":376},[241,1047,1048],{"class":247},"  priority: ",[241,1050,1051],{"class":329},"1000",[241,1053,812],{"class":247},[241,1055,1056,1058,1060],{"class":243,"line":397},[241,1057,675],{"class":288},[241,1059,687],{"class":304},[241,1061,1062],{"class":288}," 导航、选区和编辑共用的语法范围。 *\u002F\n",[241,1064,1065,1068,1071,1073],{"class":243,"line":418},[241,1066,1067],{"class":258},"  addEditingBoundaries",[241,1069,1070],{"class":247},"() { ",[241,1072,765],{"class":304},[241,1074,1075],{"class":247}," [inlineCodeRule] },\n",[241,1077,1078],{"class":243,"line":708},[241,1079,903],{"class":247},[14,1081,1082,1083,1085,1086,1089],{},"插件接入时使用此扩展承担规则，产品的 ",[23,1084,593],{}," 留给业务宿主覆盖。\n已有插件可在自身 hook 中返回规则，或通过 ",[23,1087,1088],{},".extend()"," 与父 hook 组合；同一节点的覆盖\n规则应排在父规则前。该 hook 只描述边界，新增语法仍需由插件注册解析和投影。",[14,1091,1092,1095,1096,1099,1100,1103,1104,1107],{},[23,1093,1094],{},"when"," 默认是 ",[23,1097,1098],{},"hidden","，只在整体隐藏语法的呈现中启用；",[23,1101,1102],{},"prose"," 可在 实时预览\n呈现中查询，规则应使用 ",[23,1105,1106],{},"isSourceRevealed(state, node)"," 判断具体结构是否已经显露。\n源码视图关闭边界约束；在源码分隔行输入文字后，切回文档模式会按新语法把它作为正文。",[14,1109,1110,1111,1114,1115,1118,1119,1122,1123,37],{},"当前 ",[23,1112,1113],{},"navigation: 'native'"," 会退出整条语法边界规则；若希望保留导航约束、将正文修改\n交给原生处理，应使用 ",[23,1116,1117],{},"deletion: 'native'","。旧 ",[23,1120,1121],{},"inlineBoundaries"," 通过同一个运行时兼容，\n只替换原行内规则列表。六类边界、完整字段与高级 CM 接入见 ",[17,1124,1126],{"href":1125},"\u002Fapi\u002Fcommands#%E7%BC%96%E8%BE%91%E8%BE%B9%E7%95%8C","编辑边界 API",[10,1128,1129],{"id":1129},"标题折叠",[14,1131,1132],{},"有正文的标题在左侧正文区域外提供折叠箭头，不挤占标题宽度。展开时悬停或键盘聚焦才显示，\n收起后一直显示；触摸设备保留入口。点击后保留标题，收起到下一个同级或更高级标题之前的内容；\n再次展开会保留子标题各自的折叠选择。支持 ATX 和 Setext 标题，容器、引用及列表项内的标题\n以所在容器为边界。",[14,1134,1135],{},"文档视图、实时预览、只读与源码视图共用同一份折叠状态，折叠不改 Markdown，也不占用\n文本撤销记录。查找定位到隐藏正文时会自动展开；改变标题层级导致旧范围失效时也会展开。\n折叠选择不写入文件，刷新或替换文档后重置；Prose 静态阅读继续展示完整内容。",[14,1137,1138,1139,1142,1143,1146,1147,1150,1151,1154,1155,1158],{},"该能力归 ",[23,1140,1141],{},"@quirekit\u002Fmsfe-heading","，基础 MSFE 接入可通过 ",[23,1144,1145],{},"Heading.configure({ folding: false })","\n关闭标题控件及章节校验，原有 CodeMirror 源码折叠仍可使用。宿主可用 ",[23,1148,1149],{},"controls"," 和 ",[23,1152,1153],{},"toggleLabel","\n接入自己的组件与文案；MD Editor 默认使用公共 ",[23,1156,1157],{},"QuireIconButton"," 和统一图标。",[10,1160,1161],{"id":1161},"块手柄与菜单",[14,1163,1164,1165,453,1168,1171],{},"将鼠标移到块上，左侧会显示灰底描边的块类型与拖柄按钮，位于标题折叠箭头的外侧。点击打开菜单，或在正文中按\n",[23,1166,1167],{},"⌘+Alt+B",[23,1169,1170],{},"Ctrl+Alt+B","。菜单使用公共 QuireKit 组件，可转换正文、标题和列表，\n在上下插入内容，以及复制 Markdown、剪切、创建副本和删除。转换区只展示当前块可以执行的选项：\n列表显示列表类型转换，代码、表格和公式等复杂块隐藏转换区，避免丢失结构。\n窄屏触摸设备隐藏桌面悬停拖柄，插入入口保留在工具栏中；已经打开的块菜单继续保留锚点。",[14,1173,1174,1175,1178],{},"上下插入菜单按功能分组，在公共 ",[23,1176,1177],{},"QuireScrollArea"," 内滚动，包含当前安装的标题、Markdown 块、\n公式、流程图、思维导图、白板、文本绘图，以及日期、表情和宿主提供的联系人。\n图片、链接、公式和图表等先打开参数编辑器，确认后在原块前后一次插入；取消不会留下空块。\n期间原块被改写、文档被替换或权限变为只读时，过时提交会被拒绝。",[14,1180,1181,1182,1185],{},"“流程图”“思维导图”和“白板”分别打开共享 Flow Editor、Mind Editor 和 Whiteboard Editor。\n“文本绘图”打开共享源码绘图工作台，可选择 Mermaid、PlantUML 或 Graphviz \u002F DOT。\nMermaid 的流程图、思维导图、时序图等在文本绘图里选择模板编写，保存为 Mermaid 代码块；\n可拖拽编辑的流程图和思维导图保留各自的可编辑数据。\n工具栏、空行加号和 ",[23,1183,1184],{},"\u002F"," 菜单共用这些入口，图表分组放在段落列表之前。",[14,1187,1188],{},"默认示例文档直接包含项目交付流程、项目计划思维导图和灵感白板，保留完整可编辑数据及\n从同一数据保存的 PNG 预览；双击即可继续编辑。单击会整体选中图形并浮出操作栏，\n可编辑、预览、下载 PNG、复制、剪切或删除，白板还可重命名；选中后按 Delete 删除、Esc 取消。\n预览会把文档里的图片和这几类图形按顺序放进同一图集，可左右切换。文本绘图部分还包含 PlantUML 时序图和\nGraphviz \u002F DOT 交付图，与公式一样单击整体选中、双击打开编辑；预览与下载 SVG 也在操作栏里。切换到 阅读视图可查看同一份内容。",[14,1190,1191],{},"光标进入或鼠标悬停可编辑空行时，左侧显示灰底描边的“＋”，点击直接打开同一插入目录。\n选择内容后替换该空行并保留必要的段落分隔，一次撤销恢复原文；取消菜单或参数编辑不改变源码。\n代码、公式、列表内部的空白不作为独立插入位置；已声明子流的容器可在其空行内插入。",[14,1193,1194,1195,1197,1198,1201,1202,1201,1205,1208,1209,1212,1213,1216,1217,1220],{},"空段落中输入 ",[23,1196,1184],{}," 也可打开同一目录，继续输入中文名称、英文别名或拼音首字母搜索，\n例如 ",[23,1199,1200],{},"\u002F表格","、",[23,1203,1204],{},"\u002Ftable",[23,1206,1207],{},"\u002Fbg"," 或 ",[23,1210,1211],{},"\u002Fh2","。上下方向键选择、Enter 插入，Esc 关闭并保留输入的文字。\n图片、公式等复用同一个参数编辑器，取消保留 ",[23,1214,1215],{},"\u002F查询","，确认后一次撤销可恢复它。\n菜单保留正文输入焦点，支持中文输入；普通正文、URL、代码、引用和列表内部不触发。\n此入口独立于块拖柄，默认开启，可通过 ",[23,1218,1219],{},":slash-menu=\"false\""," 动态关闭。",[14,1222,1223,1224,1227],{},"拖动手柄时显示原块摘要与插入线，松手才移动源码；一次撤销恢复整个操作。列表、引用、代码、\n表格、公式与容器整体移动，容器内部的直接子块可在同一容器中排序。当前不做跨容器移动或\n列表内部逐项拖动；会破坏外层围栏的插入不可用。",[23,1225,1226],{},"Escape"," 或失焦取消拖动，源码更新会关闭旧菜单。\n源码视图、只读和 阅读视图不显示操作手柄。行内公式直接点击公式编辑，不再附带铅笔按钮。",[14,1229,1230,1231,1234,1235,1238,1239,1242,1243,1246,1247,1150,1250,1253,1254,1257,1258,1261,1262,1265,1266,1269,1270,1273,1274,1276,1277,565,1281,37],{},"Vue 组件默认开启，可在挂载时用 ",[23,1232,1233],{},":block-controls=\"false\""," 关闭。自建界面可使用\n",[23,1236,1237],{},"@quirekit\u002Fmsfe-core"," 的 ",[23,1240,1241],{},"createSourceBlockControls","，让核心提供当前块、视口几何、拖动状态及\n版本化命令目标；宿主负责用自己的组件展示。自定义嵌套语法通过 ",[23,1244,1245],{},"sourceBlockScopes"," 声明子流。\n空行通过可选的 ",[23,1248,1249],{},"insertionChange",[23,1251,1252],{},"openInsertionMenu"," 回调提供 ",[23,1255,1256],{},"SourceInsertionControls","；\n",[23,1259,1260],{},"sourceBlankLineAt"," 查询当前位置，",[23,1263,1264],{},"insertAtSourceBlankLine"," 负责受保护的空行插入，不构造虚假块节点。\n",[23,1267,1268],{},"rect"," 是整块边界，",[23,1271,1272],{},"firstLine"," 是首个可见原生文本行的矩形，可用于让控件对齐换行标题的首行；\n不含原生文本行的块组件返回 ",[23,1275,981],{},"，宿主可退回块顶部定位。\n见 ",[17,1278,1280],{"href":1279},"\u002Fapi\u002Frendering#%E5%9D%97%E6%8E%A7%E5%88%B6%E5%8D%8F%E8%AE%AE","块控制协议",[17,1282,1284],{"href":1283},"\u002Fapi\u002Fcommands#%E6%BA%90%E7%A0%81%E5%9D%97%E5%91%BD%E4%BB%A4","源码块命令",[14,1286,1287,1288,1290,1291,1294,1295,1298,1299,1302],{},"每个 ",[23,1289,252],{}," 有独立的文档浮层，容纳块控件、块菜单、提及及工具栏插入面板。后代组件可从\n",[23,1292,1293],{},"@quirekit\u002Fmd-editor\u002Fvue"," 调用 ",[23,1296,1297],{},"useMdOverlayTarget()","，将返回的只读 ref 传给公共 Menu 的\n",[23,1300,1301],{},"portalTarget","；子菜单自动继承同一目标。Menu 仍负责定位、视口避让与关闭，模态编辑器继续使用\n公共 Dialog。该接口只提供挂载容器，不负责块命令或右键菜单的业务行为。",[10,1304,1305],{"id":1305},"安装与宿主准备",[14,1307,1308],{},"当前包通过工作区或本地打包产物使用，尚未承诺公共 npm 稳定发布。",[232,1310,1314],{"className":1311,"code":1312,"language":1313,"meta":237,"style":237},"language-sh shiki shiki-themes github-light github-light github-dark","pnpm add '@quirekit\u002Fmd-editor@workspace:*' '@quirekit\u002Fui@workspace:*' '@quirekit\u002Funocss-preset@workspace:*'\n","sh",[23,1315,1316],{"__ignoreMap":237},[241,1317,1318],{"class":243,"line":244},[241,1319,1312],{},[14,1321,1322,1323,1327,1328,1330,1331,1334],{},"沿用应用的 QuireKit 主题、图标 Provider 和 UnoCSS \u002F 独立样式入口。产品包没有第二套\n颜色或正文 CSS。配置方法见 ",[17,1324,1326],{"href":1325},"\u002Fcustomization\u002Ftheme","UI 与主题","。SSR 应用应在客户端挂载\n",[23,1329,252],{},"，例如在 Nuxt 的 ",[23,1332,1333],{},"ClientOnly"," 中使用。",[14,1336,1337,1338,1341],{},"产品打包时另有 ",[23,1339,1340],{},"@quirekit\u002Fmd-editor\u002Fstyles.css","，只负责工具栏和文档区域的布局，需显式\n引入。正文的字体、间距和块外观仍来自公共 Prose 样式。",[14,1343,1344,1345,565,1348,1351,1352,1355,1356,1358,1359,1362],{},"编辑底层使用源码维护的 ",[23,1346,1347],{},"@quirekit\u002Fcm-*",[23,1349,1350],{},"@quirekit\u002Flezer-markdown","。相邻块间距的\n高度测量、旧视图清理与语法复用观察随包构建交付，无需额外安装 CodeMirror\u002FLezer 补丁。\n每个包的 ",[23,1353,1354],{},"UPSTREAM.json"," 记录上游版本、commit 与本地差异，原始 MIT 许可随包保留。\n原生 CodeMirror 扩展也必须从同一组 ",[23,1357,1347],{}," 导入；依赖官方 ",[23,1360,1361],{},"@codemirror\u002F*","\n的第三方扩展需适配后使用，避免在同一编辑器混入两套 State、View 或 Facet。",[14,1364,1365,1366,565,1369,1372],{},"Mermaid 使用 ",[23,1367,1368],{},"mermaid@12.1.0",[23,1370,1371],{},"patches\u002Fmermaid@12.1.0.patch","，修复纯 SVG\n模式下圆形等思维导图节点文字向右偏移的问题。编辑、阅读和 Word 图片导出共用此修复。\n独立打包时仍需保留该 Mermaid 补丁；它针对默认 ESM 入口，不适用于独立浏览器脚本。",[10,1374,1376],{"id":1375},"挂载编辑与保存","挂载、编辑与保存",[232,1378,1380],{"className":234,"code":1379,"language":236,"meta":237,"style":237},"\u003Cscript setup lang=\"ts\">\nimport { shallowRef, ref } from 'vue'\nimport { MdEditor, type MdEditorInstance } from '@quirekit\u002Fmd-editor\u002Fvue'\nimport '@quirekit\u002Fmd-editor\u002Fstyles.css'\nimport { QuireButton } from '@quirekit\u002Fui\u002Fvue'\n\nconst product = shallowRef\u003CMdEditorInstance | null>(null)\nconst dirty = ref(false)\nconst initialMarkdown = '# 发布计划\\n\\n- [ ] 验证当前版本\\n'\n\nfunction save() {\n  const editor = product.value?.editor\n  if (!editor) return\n  const markdown = editor.getMarkdown()\n  \u002F\u002F 将 markdown 交给应用自己的保存接口；成功后清除 dirty。\n  console.log(markdown)\n}\n\u003C\u002Fscript>\n\n\u003Ctemplate>\n  \u003CMdEditor ref=\"product\" :markdown=\"initialMarkdown\" locale=\"zh-CN\" @change=\"dirty = true\" \u002F>\n  \u003CQuireButton :disabled=\"!dirty\" @click=\"save\">保存\u003C\u002FQuireButton>\n\u003C\u002Ftemplate>\n",[23,1381,1382,1403,1415,1433,1440,1452,1456,1486,1505,1529,1533,1544,1556,1571,1589,1594,1604,1608,1617,1621,1630,1686,1730],{"__ignoreMap":237},[241,1383,1384,1386,1389,1392,1395,1397,1400],{"class":243,"line":244},[241,1385,248],{"class":247},[241,1387,1388],{"class":251},"script",[241,1390,1391],{"class":258}," setup",[241,1393,1394],{"class":258}," lang",[241,1396,262],{"class":247},[241,1398,1399],{"class":265},"\"ts\"",[241,1401,1402],{"class":247},">\n",[241,1404,1405,1407,1410,1412],{"class":243,"line":285},[241,1406,305],{"class":304},[241,1408,1409],{"class":247}," { shallowRef, ref } ",[241,1411,311],{"class":304},[241,1413,1414],{"class":265}," 'vue'\n",[241,1416,1417,1419,1422,1425,1428,1430],{"class":243,"line":323},[241,1418,305],{"class":304},[241,1420,1421],{"class":247}," { MdEditor, ",[241,1423,1424],{"class":304},"type",[241,1426,1427],{"class":247}," MdEditorInstance } ",[241,1429,311],{"class":304},[241,1431,1432],{"class":265}," '@quirekit\u002Fmd-editor\u002Fvue'\n",[241,1434,1435,1437],{"class":243,"line":354},[241,1436,305],{"class":304},[241,1438,1439],{"class":265}," '@quirekit\u002Fmd-editor\u002Fstyles.css'\n",[241,1441,1442,1444,1447,1449],{"class":243,"line":376},[241,1443,305],{"class":304},[241,1445,1446],{"class":247}," { QuireButton } ",[241,1448,311],{"class":304},[241,1450,1451],{"class":265}," '@quirekit\u002Fui\u002Fvue'\n",[241,1453,1454],{"class":243,"line":397},[241,1455,320],{"emptyLinePlaceholder":319},[241,1457,1458,1460,1463,1465,1468,1470,1473,1476,1479,1482,1484],{"class":243,"line":418},[241,1459,326],{"class":304},[241,1461,1462],{"class":329}," product",[241,1464,333],{"class":304},[241,1466,1467],{"class":258}," shallowRef",[241,1469,248],{"class":247},[241,1471,1472],{"class":258},"MdEditorInstance",[241,1474,1475],{"class":304}," |",[241,1477,1478],{"class":329}," null",[241,1480,1481],{"class":247},">(",[241,1483,981],{"class":329},[241,1485,373],{"class":247},[241,1487,1488,1490,1493,1495,1498,1500,1503],{"class":243,"line":708},[241,1489,326],{"class":304},[241,1491,1492],{"class":329}," dirty",[241,1494,333],{"class":304},[241,1496,1497],{"class":258}," ref",[241,1499,406],{"class":247},[241,1501,1502],{"class":329},"false",[241,1504,373],{"class":247},[241,1506,1507,1509,1512,1514,1517,1520,1523,1526],{"class":243,"line":743},[241,1508,326],{"class":304},[241,1510,1511],{"class":329}," initialMarkdown",[241,1513,333],{"class":304},[241,1515,1516],{"class":265}," '# 发布计划",[241,1518,1519],{"class":329},"\\n\\n",[241,1521,1522],{"class":265},"- [ ] 验证当前版本",[241,1524,1525],{"class":329},"\\n",[241,1527,1528],{"class":265},"'\n",[241,1530,1531],{"class":243,"line":771},[241,1532,320],{"emptyLinePlaceholder":319},[241,1534,1535,1538,1541],{"class":243,"line":779},[241,1536,1537],{"class":304},"function",[241,1539,1540],{"class":258}," save",[241,1542,1543],{"class":247},"() {\n",[241,1545,1546,1549,1551,1553],{"class":243,"line":785},[241,1547,1548],{"class":304},"  const",[241,1550,330],{"class":329},[241,1552,333],{"class":304},[241,1554,1555],{"class":247}," product.value?.editor\n",[241,1557,1558,1561,1563,1565,1568],{"class":243,"line":791},[241,1559,1560],{"class":304},"  if",[241,1562,382],{"class":247},[241,1564,385],{"class":304},[241,1566,1567],{"class":247},"editor) ",[241,1569,1570],{"class":304},"return\n",[241,1572,1573,1575,1578,1580,1583,1586],{"class":243,"line":815},[241,1574,1548],{"class":304},[241,1576,1577],{"class":329}," markdown",[241,1579,333],{"class":304},[241,1581,1582],{"class":247}," editor.",[241,1584,1585],{"class":258},"getMarkdown",[241,1587,1588],{"class":247},"()\n",[241,1590,1591],{"class":243,"line":821},[241,1592,1593],{"class":288},"  \u002F\u002F 将 markdown 交给应用自己的保存接口；成功后清除 dirty。\n",[241,1595,1596,1599,1601],{"class":243,"line":827},[241,1597,1598],{"class":247},"  console.",[241,1600,403],{"class":258},[241,1602,1603],{"class":247},"(markdown)\n",[241,1605,1606],{"class":243,"line":833},[241,1607,830],{"class":247},[241,1609,1610,1613,1615],{"class":243,"line":838},[241,1611,1612],{"class":247},"\u003C\u002F",[241,1614,1388],{"class":251},[241,1616,1402],{"class":247},[241,1618,1619],{"class":243,"line":852},[241,1620,320],{"emptyLinePlaceholder":319},[241,1622,1623,1625,1628],{"class":243,"line":873},[241,1624,248],{"class":247},[241,1626,1627],{"class":251},"template",[241,1629,1402],{"class":247},[241,1631,1632,1635,1637,1639,1641,1644,1646,1648,1650,1652,1654,1656,1659,1661,1664,1667,1670,1672,1674,1677,1679,1682,1684],{"class":243,"line":884},[241,1633,1634],{"class":247},"  \u003C",[241,1636,252],{"class":251},[241,1638,1497],{"class":258},[241,1640,262],{"class":247},[241,1642,1643],{"class":265},"\"product\"",[241,1645,255],{"class":247},[241,1647,259],{"class":258},[241,1649,262],{"class":247},[241,1651,266],{"class":265},[241,1653,269],{"class":247},[241,1655,266],{"class":265},[241,1657,1658],{"class":258}," locale",[241,1660,262],{"class":247},[241,1662,1663],{"class":265},"\"zh-CN\"",[241,1665,1666],{"class":247}," @",[241,1668,1669],{"class":258},"change",[241,1671,262],{"class":247},[241,1673,266],{"class":265},[241,1675,1676],{"class":247},"dirty ",[241,1678,262],{"class":304},[241,1680,1681],{"class":329}," true",[241,1683,266],{"class":265},[241,1685,282],{"class":247},[241,1687,1688,1690,1693,1695,1698,1700,1702,1704,1707,1709,1711,1714,1716,1718,1721,1723,1726,1728],{"class":243,"line":894},[241,1689,1634],{"class":247},[241,1691,1692],{"class":251},"QuireButton",[241,1694,255],{"class":247},[241,1696,1697],{"class":258},"disabled",[241,1699,262],{"class":247},[241,1701,266],{"class":265},[241,1703,385],{"class":304},[241,1705,1706],{"class":247},"dirty",[241,1708,266],{"class":265},[241,1710,1666],{"class":247},[241,1712,1713],{"class":258},"click",[241,1715,262],{"class":247},[241,1717,266],{"class":265},[241,1719,1720],{"class":247},"save",[241,1722,266],{"class":265},[241,1724,1725],{"class":247},">保存\u003C\u002F",[241,1727,1692],{"class":251},[241,1729,1402],{"class":247},[241,1731,1732,1734,1736],{"class":243,"line":900},[241,1733,1612],{"class":247},[241,1735,1627],{"class":251},[241,1737,1402],{"class":247},[14,1739,1740,1742,1743,1745,1746,1749,1750,1753,1754,1757,1758,37],{},[23,1741,259],{}," 只作为挂载时的初始值，不是双向绑定。",[23,1744,1669],{}," 发出原始 ",[23,1747,1748],{},"MsfeChangeEvent","\n增量事件，不在每次输入后复制全文。换文档使用公开实例的 ",[23,1751,1752],{},"replaceDocument()","；\n版本化外部更新使用 ",[23,1755,1756],{},"applyChanges()","。完整规则见 ",[17,1759,1761],{"href":1760},"\u002Fguide\u002Fsaving","读取与保存",[10,1763,1764],{"id":1764},"错误提示与原文保留",[14,1766,1767,1769,1770,1773,1774,1777,1778,1781],{},[23,1768,252],{}," 用公共 ",[23,1771,1772],{},"QuireAlert"," 显示创建或运行错误，提示文案跟随 ",[23,1775,1776],{},"locale","。\n创建失败时不会展示空白编辑器，而是通过 ",[23,1779,1780],{},"QuireProseSource"," 展示可复制的初始 Markdown。\n已经创建的实例遇到扩展或监听器错误时保留当前文档、选区与撤销历史；关闭提示不会重建实例。\n请先保存原文，再由应用决定是否在修正配置后重新挂载。",[14,1783,1784,1785,1788,1789,1792,1793,1796],{},"通过 ",[23,1786,1787],{},"@error=\"handleEditorError\""," 接收原始异常并接入应用自己的诊断服务。这个事件的参数\n为 ",[23,1790,1791],{},"unknown","，不把内部错误代码或堆栈当作用户提示。组件处理的是编辑器创建与 MSFE\n",[23,1794,1795],{},"onError"," 上报的错误，不会屏蔽应用其他位置的 Vue 错误或构建工具诊断。",[10,1798,1799],{"id":1799},"配置产品能力",[43,1801,1802,1812],{},[46,1803,1804],{},[49,1805,1806,1809],{},[52,1807,1808],{},"属性",[52,1810,1811],{},"用途",[59,1813,1814,1830,1840,1862,1871,1885,1918,1944,1954,1964,1976,1986,2003,2017,2033,2046,2064,2074,2091,2135,2145,2159,2174],{},[49,1815,1816,1820],{},[64,1817,1818],{},[23,1819,1776],{},[64,1821,1822,1823,1208,1826,1829],{},"控件语言，",[23,1824,1825],{},"zh-CN",[23,1827,1828],{},"en","；不翻译文档正文",[49,1831,1832,1837],{},[64,1833,1834],{},[23,1835,1836],{},"label",[64,1838,1839],{},"编辑区的可访问名称",[49,1841,1842,1847],{},[64,1843,1844],{},[23,1845,1846],{},"view",[64,1848,1849,1851,1852,1201,1855,1208,1858,1861],{},[23,1850,564],{},"（默认）、",[23,1853,1854],{},"preview",[23,1856,1857],{},"source",[23,1859,1860],{},"reading","；四种视图共用一份源码与历史，可响应式更新",[49,1863,1864,1868],{},[64,1865,1866],{},[23,1867,229],{},[64,1869,1870],{},"叠加在前三种视图上的只读；只读时仍可展开折叠块和复制",[49,1872,1873,1878],{},[64,1874,1875],{},[23,1876,1877],{},"mentions",[64,1879,1880,1881,1884],{},"静态联系人数组或可取消的异步搜索函数；提供后启用提及菜单和输入 ",[23,1882,1883],{},"@"," 的候选面板",[49,1886,1887,1892],{},[64,1888,1889],{},[23,1890,1891],{},"documentLinks",[64,1893,1894,1895,1898,1899,1902,1903,1906,1907,1910,1911,1913,1914,1917],{},"宿主文档链接配置：",[23,1896,1897],{},"search"," 为静态文档数组或可取消的异步搜索（关键词为空时可返回最近文档），提供后输入 ",[23,1900,1901],{},"[["," 弹出文档搜索并插入标准链接 ",[23,1904,1905],{},"[标题](地址)","，“链接”对话框里也能搜索文档；",[23,1908,1909],{},"recognize"," 识别指向宿主文档的地址，这类链接显示为带文档图标的引用；",[23,1912,1854],{}," 返回文档的 Markdown 摘要，悬停引用时以缩略正文预览；",[23,1915,1916],{},"exportUrl"," 决定导出 Markdown、Word 等文件时文档链接写成的地址，例如补全为完整网址",[49,1919,1920,1925],{},[64,1921,1922],{},[23,1923,1924],{},"toolbar",[64,1926,1927,1928,1208,1930,1933,1934,1937,1938,1940,1941,1943],{},"内置工具栏：",[23,1929,432],{},[23,1931,1932],{},"'fixed'","（默认）常驻正文上方；",[23,1935,1936],{},"'floating'"," 在桌面端选中文字时于选区上方浮出样式、行内格式与链接；",[23,1939,1502],{}," 不显示。窄屏在非 ",[23,1942,1502],{}," 时都使用底部工具坞",[49,1945,1946,1951],{},[64,1947,1948],{},[23,1949,1950],{},"selectionToolbar",[64,1952,1953],{},"固定工具栏时，桌面端选中文字也在选区上方浮出样式、行内格式、链接与“添加评论”，默认开启；只读时只保留“添加评论”",[49,1955,1956,1961],{},[64,1957,1958],{},[23,1959,1960],{},"blockControls",[64,1962,1963],{},"挂载时启用块手柄、菜单与拖动排序，默认开启",[49,1965,1966,1971],{},[64,1967,1968],{},[23,1969,1970],{},"slashMenu",[64,1972,1194,1973,1975],{},[23,1974,1184],{}," 搜索并插入内容，默认开启，可动态关闭",[49,1977,1978,1983],{},[64,1979,1980],{},[23,1981,1982],{},"placeholder",[64,1984,1985],{},"可编辑的空文档中显示的提示，默认「输入 \u002F 插入内容，或直接开始写作」；传空字符串隐藏，挂载时读取",[49,1987,1988,1993],{},[64,1989,1990],{},[23,1991,1992],{},"docx",[64,1994,1995,1996,1999,2000,2002],{},"Word 转换器与转换策略、图片回调，如 ",[23,1997,1998],{},"{ converter: mdDocx() }","；未提供或 ",[23,2001,1502],{}," 时隐藏 Word 导入、导出项",[49,2004,2005,2010],{},[64,2006,2007],{},[23,2008,2009],{},"exporters",[64,2011,2012,2013,2016],{},"宿主安装的导出格式（",[23,2014,2015],{},"MdExporter"," 列表），如 PDF、OFD；每项在“导出”菜单中增加一个条目，复用所选模板和节点转换策略",[49,2018,2019,2024],{},[64,2020,2021],{},[23,2022,2023],{},"layout",[64,2025,2026,2029,2030,2032],{},[23,2027,2028],{},"embedded"," 为嵌入式边框；",[23,2031,564],{}," 为全宽工具栏与居中文档",[49,2034,2035,2040],{},[64,2036,2037],{},[23,2038,2039],{},"outline",[64,2041,2042,2043,2045],{},"在 ",[23,2044,564],{}," 布局中显示跟随阅读位置的标题大纲，默认关闭；宽度足够时固定在编辑区边缘，可收起成按钮再展开，宽度不足时点按钮弹出；正文独立居中，空间不足时避让大纲和评论",[49,2047,2048,2053],{},[64,2049,2050],{},[23,2051,2052],{},"outlinePosition",[64,2054,2055,2056,2059,2060,2063],{},"大纲位置：",[23,2057,2058],{},"start","（默认，正文左侧，右侧留给评论栏）或 ",[23,2061,2062],{},"end","（正文右侧，在评论栏之后）",[49,2065,2066,2071],{},[64,2067,2068],{},[23,2069,2070],{},"features",[64,2072,2073],{},"按 StarterKit 的同名选项替换或关闭功能",[49,2075,2076,2081],{},[64,2077,2078],{},[23,2079,2080],{},"containers",[64,2082,2083,2084,2086,2087,2090],{},"容器配置，",[23,2085,1502],{}," 关闭；",[23,2088,2089],{},"types"," 替换完整名称列表",[49,2092,2093,2098],{},[64,2094,2095],{},[23,2096,2097],{},"extras",[64,2099,2100,2101,1201,2104,1201,2107,1201,2110,1201,2113,1201,2116,1201,2119,1201,2122,1201,2125,1201,2128,2131,2132,2134],{},"按 ",[23,2102,2103],{},"math",[23,2105,2106],{},"mermaid",[23,2108,2109],{},"textDiagram",[23,2111,2112],{},"footnotes",[23,2114,2115],{},"definitionList",[23,2117,2118],{},"subscript",[23,2120,2121],{},"superscript",[23,2123,2124],{},"insertedText",[23,2126,2127],{},"highlight",[23,2129,2130],{},"frontmatter"," 替换或关闭默认扩展；",[23,2133,1502],{}," 全部关闭",[49,2136,2137,2142],{},[64,2138,2139],{},[23,2140,2141],{},"extensions",[64,2143,2144],{},"额外 MSFE 扩展；不要重复安装已由产品提供的同名扩展",[49,2146,2147,2152],{},[64,2148,2149],{},[23,2150,2151],{},"codeLanguages",[64,2153,2154,2155,2158],{},"默认内置按需语言目录；传入后替换目录，",[23,2156,2157],{},"[]"," 禁用，未注册语言保留纯文本",[49,2160,2161,2165],{},[64,2162,2163],{},[23,2164,593],{},[64,2166,2167,2168,2170,2171],{},"挂载时按语法节点覆盖或新增边界规则；",[23,2169,2157],{}," 保留功能默认策略，详见 ",[17,2172,571],{"href":2173},"#%E5%85%89%E6%A0%87%E4%B8%8E%E7%BC%96%E8%BE%91%E8%BE%B9%E7%95%8C",[49,2175,2176,2180],{},[64,2177,2178],{},[23,2179,1121],{},[64,2181,2182,2183,2185],{},"兼容的行内规则列表；默认代码内外分离，其他格式直接进入正文；",[23,2184,2157],{}," 移除此列表，链接、块和组件规则仍生效",[14,2187,2188,2189,1201,2191,2193,2194,37],{},"能力与语言目录在挂载时安装。切换功能集合时显式重新挂载，并由宿主保留需要的文档；\n",[23,2190,1846],{},[23,2192,229],{}," 可直接更新。更换整套界面语言建议按 locale 设置组件 ",[23,2195,2196],{},"key",[14,2198,2199,2200,2203,2204,2206,2207,2210,2211,2214,2215,2217,2218,2221,2222,2225,2226,2229,2230,2232,2233,2236,2237,2240,2241,2243,2244,37],{},"行内边界配置接受 ",[23,2201,2202],{},"InlineBoundaryRule[]","，每条声明语法 ",[23,2205,908],{},"、开闭标记 ",[23,2208,2209],{},"marker"," 和\n",[23,2212,2213],{},"behavior","：",[23,2216,601],{}," 保留内外插入位置，",[23,2219,2220],{},"content"," 跳过重叠的边界停顿，",[23,2223,2224],{},"native"," 使对应行内规则退出公共边界处理。\n默认目录 ",[23,2227,2228],{},"mdInlineBoundaries"," 可从 ",[23,2231,31],{}," 导入后复制修改；Vue 组件与\n",[23,2234,2235],{},"createMdEditor"," 使用同一选项。文档模式隐藏标记时生效，源码揭示、拖选与组合输入保持原有行为。\n该选项和底层 ",[23,2238,2239],{},"inlineBoundaryNavigation(rules)"," 现在均适配到公共编辑边界运行时；新功能优先使用 ",[23,2242,991],{},"。\n空代码块的输入占位和默认语言列表见 ",[17,2245,2247],{"href":2246},"\u002Fextensions\u002Fcode-blocks","代码块定制",[14,2249,2250,2251,2254],{},"内置工具栏直接使用公共 ",[23,2252,2253],{},"QuireToolbar","，与 Classic 共用分组、提示、选中态、方向键导航和\n窄屏滚动。正文\u002F标题使用与 Classic 相同的带边框选择器，文字格式平铺；插入菜单分组展示，\n每项复用公共图标。菜单打开时捕获可映射的源码锚点，操作回到同一份 Markdown，参与原有撤销历史。",[43,2256,2257,2267],{},[46,2258,2259],{},[49,2260,2261,2264],{},[52,2262,2263],{},"功能",[52,2265,2266],{},"实际写入与交互",[59,2268,2269,2277,2298,2306,2318,2326,2334,2350,2358,2366,2381,2393],{},[49,2270,2271,2274],{},[64,2272,2273],{},"正文与标题",[64,2275,2276],{},"正文、六级标题，保留原始 Markdown 文本",[49,2278,2279,2282],{},[64,2280,2281],{},"行内格式",[64,2283,2284,2285,1201,2288,1201,2291,1201,2294,2297],{},"粗体、斜体、删除线、行内代码，以及 ",[23,2286,2287],{},"++下划线++",[23,2289,2290],{},"==高亮==",[23,2292,2293],{},"H~2~O",[23,2295,2296],{},"x^2^"," 扩展",[49,2299,2300,2303],{},[64,2301,2302],{},"列表",[64,2304,2305],{},"对当前段落或选中行切换项目、编号、任务列表；嵌套缩进、回车继续列表、退格退出",[49,2307,2308,2311],{},[64,2309,2310],{},"链接与图片",[64,2312,2313,2314,2317],{},"对话框编辑地址、文字与标题；图片使用 ",[23,2315,2316],{},"QuireProseImage","，不把资源内容写进文档",[49,2319,2320,2323],{},[64,2321,2322],{},"表格",[64,2324,2325],{},"在当前行上方\u002F下方插入、删除当前行；在当前列左侧\u002F右侧插入、删除当前列；按列设置左\u002F中\u002F右\u002F默认对齐",[49,2327,2328,2331],{},[64,2329,2330],{},"代码与容器",[64,2332,2333],{},"代码语言、复制；提示、警告、折叠、高亮块和嵌套容器，内部正文直接编辑",[49,2335,2336,2339],{},[64,2337,2338],{},"公式",[64,2340,2341,2342,2345,2346,2349],{},"行内 ",[23,2343,2344],{},"$…$"," 与块级 ",[23,2347,2348],{},"$$…$$","；复用公共公式编辑器进行结构化输入",[49,2351,2352,2355],{},[64,2353,2354],{},"文本绘图",[64,2356,2357],{},"Mermaid、PlantUML、Graphviz\u002FDOT 共用源码工作区；基础模板、实时预览、SVG\u002FPNG 下载",[49,2359,2360,2363],{},[64,2361,2362],{},"注释与术语",[64,2364,2365],{},"原子插入脚注引用和定义，引用\u002F定义之间跳转；支持定义列表",[49,2367,2368,2371],{},[64,2369,2370],{},"分隔线、日期与表情",[64,2372,2373,2376,2377,2380],{},[23,2374,2375],{},"---"," 块、日历选择的 ",[23,2378,2379],{},"YYYY-MM-DD"," 普通日期、原始 Unicode 表情字符",[49,2382,2383,2386],{},[64,2384,2385],{},"提及",[64,2387,2388,2389,2392],{},"联系人由宿主提供；写入可移植的 ",[23,2390,2391],{},"[@姓名](\u003C地址>)"," 链接",[49,2394,2395,2398],{},[64,2396,2397],{},"文件",[64,2399,2400],{},"Markdown、Word 共用导入预览，可替换全文或追加末尾；导出 Markdown、Word 或宿主启用的 PDF\u002FOFD",[14,2402,2403],{},"下划线、高亮、公式、脚注和自定义容器属于扩展语法，接收 Markdown 的其他应用也需要\n相应插件。GFM 表格没有合并单元格语法；本产品不会把合并、列宽、字体大小或文字颜色\n伪装成标准 Markdown。云文档、评论、投票等服务也不属于这些源码命令。",[14,2405,2406,2408,2409,2412,2413,2416,2417,2420,2421,2424,2425,2428,2429,2432,2433,2436,2437,2440,2441,2444,2445,1201,2448,1201,2451,1208,2454,2457,2458,2461,2462,1201,2465,2468],{},[23,2407,564],{}," 布局用 ",[23,2410,2411],{},"--md-editor-toolbar-top"," 避开宿主固定页头，默认 ",[23,2414,2415],{},"0px","；\n工具栏吸附在宿主自己的滚动区内时，用 ",[23,2418,2419],{},"--md-editor-panel-top"," 单独指定右侧面板的顶部位置（默认同前者）；\n",[23,2422,2423],{},"--md-editor-document-width"," 控制正文最大宽度，默认 ",[23,2426,2427],{},"960px","。外部工具栏可设置\n",[23,2430,2431],{},":toolbar=\"false\"","，经 ",[23,2434,2435],{},"product.editor"," 调用公开命令；不要直接修改内容 DOM。\n宿主自己的菜单可调用实例的 ",[23,2438,2439],{},"openFile(mode, exporter?)","，打开与内置“导入 \u002F 导出”相同的窗口：\n",[23,2442,2443],{},"mode"," 为 ",[23,2446,2447],{},"markdownImport",[23,2449,2450],{},"wordImport",[23,2452,2453],{},"wordExport",[23,2455,2456],{},"formatExport","（后者用 ",[23,2459,2460],{},"exporter"," 指定已安装的\n导出插件，如 ",[23,2463,2464],{},"pdf",[23,2466,2467],{},"ofd","）；有其他任务打开或该项未启用时忽略。",[14,2470,2471,2474,2475,2478],{},[23,2472,2473],{},"header"," 插槽在正文上方、与正文同宽对齐的位置放置宿主内容，如文档标题输入框或作者信息；\n",[23,2476,2477],{},"footer"," 插槽对应地放在正文下方，如点赞或评论入口。两者都随正文一起滚动，不属于可编辑文档，也不写入 Markdown。",[232,2480,2482],{"className":234,"code":2481,"language":236,"meta":237,"style":237},"\u003CMdEditor\n  :markdown=\"initialMarkdown\"\n  :containers=\"{ types: ['note', 'warning', 'details', 'decision'] }\"\n  :features=\"{ image: false }\"\n  :extras=\"{ mermaid: false }\"\n  :code-languages=\"[\n    { name: 'typescript', load: () => import('@quirekit\u002Fcm-lang-javascript').then(m => m.javascript({ typescript: true })) },\n  ]\"\n\u002F>\n",[23,2483,2484,2491,2507,2543,2563,2582,2596,2651,2658],{"__ignoreMap":237},[241,2485,2486,2488],{"class":243,"line":244},[241,2487,248],{"class":247},[241,2489,2490],{"class":251},"MdEditor\n",[241,2492,2493,2496,2498,2500,2502,2504],{"class":243,"line":285},[241,2494,2495],{"class":247},"  :",[241,2497,259],{"class":258},[241,2499,262],{"class":247},[241,2501,266],{"class":265},[241,2503,269],{"class":247},[241,2505,2506],{"class":265},"\"\n",[241,2508,2509,2511,2513,2515,2517,2520,2523,2525,2528,2530,2533,2535,2538,2541],{"class":243,"line":323},[241,2510,2495],{"class":247},[241,2512,2080],{"class":258},[241,2514,262],{"class":247},[241,2516,266],{"class":265},[241,2518,2519],{"class":247},"{ types: [",[241,2521,2522],{"class":265},"'note'",[241,2524,429],{"class":247},[241,2526,2527],{"class":265},"'warning'",[241,2529,429],{"class":247},[241,2531,2532],{"class":265},"'details'",[241,2534,429],{"class":247},[241,2536,2537],{"class":265},"'decision'",[241,2539,2540],{"class":247},"] }",[241,2542,2506],{"class":265},[241,2544,2545,2547,2549,2551,2553,2556,2558,2561],{"class":243,"line":354},[241,2546,2495],{"class":247},[241,2548,2070],{"class":258},[241,2550,262],{"class":247},[241,2552,266],{"class":265},[241,2554,2555],{"class":247},"{ image: ",[241,2557,1502],{"class":329},[241,2559,2560],{"class":247}," }",[241,2562,2506],{"class":265},[241,2564,2565,2567,2569,2571,2573,2576,2578,2580],{"class":243,"line":376},[241,2566,2495],{"class":247},[241,2568,2097],{"class":258},[241,2570,262],{"class":247},[241,2572,266],{"class":265},[241,2574,2575],{"class":247},"{ mermaid: ",[241,2577,1502],{"class":329},[241,2579,2560],{"class":247},[241,2581,2506],{"class":265},[241,2583,2584,2586,2589,2591,2593],{"class":243,"line":397},[241,2585,2495],{"class":247},[241,2587,2588],{"class":258},"code-languages",[241,2590,262],{"class":247},[241,2592,266],{"class":265},[241,2594,2595],{"class":247},"[\n",[241,2597,2598,2601,2604,2606,2609,2612,2615,2618,2620,2623,2626,2629,2631,2634,2637,2640,2643,2646,2648],{"class":243,"line":418},[241,2599,2600],{"class":247},"    { name: ",[241,2602,2603],{"class":265},"'typescript'",[241,2605,429],{"class":247},[241,2607,2608],{"class":258},"load",[241,2610,2611],{"class":247},": () ",[241,2613,2614],{"class":304},"=>",[241,2616,2617],{"class":304}," import",[241,2619,406],{"class":247},[241,2621,2622],{"class":265},"'@quirekit\u002Fcm-lang-javascript'",[241,2624,2625],{"class":247},").",[241,2627,2628],{"class":258},"then",[241,2630,406],{"class":247},[241,2632,2633],{"class":701},"m",[241,2635,2636],{"class":304}," =>",[241,2638,2639],{"class":247}," m.",[241,2641,2642],{"class":258},"javascript",[241,2644,2645],{"class":247},"({ typescript: ",[241,2647,432],{"class":329},[241,2649,2650],{"class":247}," })) },\n",[241,2652,2653,2656],{"class":243,"line":708},[241,2654,2655],{"class":247},"  ]",[241,2657,2506],{"class":265},[241,2659,2660],{"class":243,"line":743},[241,2661,2662],{"class":247},"\u002F>\n",[14,2664,2665,2666,2669,2670,2673,2674,453,2677,453,2680,2683,2684,2686,2687,2689,2690,1201,2693,2697,2698,37],{},"自定义代码 UI 可通过 ",[23,2667,2668],{},"features.codeBlock"," 传入 ",[23,2671,2672],{},"ProseCodeBlock.extend({ addNodeView() { … } })","，\n保留产品的 Prose 框架和源语言命令，再替换控制组件。默认公式和文本绘图的替换应放在\n",[23,2675,2676],{},"extras.math",[23,2678,2679],{},"extras.mermaid",[23,2681,2682],{},"extras.textDiagram","，不要在 ",[23,2685,2141],{}," 重复安装同名功能。新的图表语言\n如 ECharts 则经 ",[23,2688,2141],{}," 加入，详见 ",[17,2691,2692],{"href":2246},"代码块",[17,2694,2696],{"href":2695},"\u002Fextensions\u002Fdiagrams","图表"," 与\n",[17,2699,2701],{"href":2700},"\u002Fextensions\u002Fmarkdown-plugins","Markdown 插件",[10,2703,2704],{"id":2704},"高亮块",[14,2706,2707,2708,2711,2712,1201,2715,2718],{},"高亮块是左侧带表情图标、浅色背景的正文块，适合突出一条提醒或结论。可以在空段落输入 ",[23,2709,2710],{},"\u002F高亮块","\n（或 ",[23,2713,2714],{},"\u002Fglk",[23,2716,2717],{},"\u002Fcallout","），也可以从工具栏“插入”或块菜单的“上方插入 \u002F 下方插入”创建。块内是普通正文，\n可以继续输入、换段、放列表或嵌套其他块。",[2720,2721,2722,2729,2732],"ul",{},[2723,2724,2725,2726,37],"li",{},"点击图标打开表情面板，选中后只更换开头一行里的 ",[23,2727,2728],{},"emoji",[2723,2730,2731],{},"打开高亮块的块菜单，选择“颜色设置”：“高亮块颜色”提供浅橙、浅红、浅绿、浅蓝、浅紫、浅灰 6 种背景，\n“字体颜色”可选默认或同一组颜色。每次修改是一次可撤销的源码替换。",[2723,2733,2734],{},"只读状态下图标仅展示，不能更换；实时预览下光标进入高亮块会显示完整源码。",[232,2736,2739],{"className":2737,"code":2738,"language":259,"meta":237,"style":237},"language-markdown shiki shiki-themes github-light github-light github-dark","::: highlight {emoji=📌 color=purple text=blue}\n块内是普通 Markdown，可以有 **强调**、列表或多个段落。\n:::\n",[23,2740,2741,2746,2751],{"__ignoreMap":237},[241,2742,2743],{"class":243,"line":244},[241,2744,2745],{},"::: highlight {emoji=📌 color=purple text=blue}\n",[241,2747,2748],{"class":243,"line":285},[241,2749,2750],{},"块内是普通 Markdown，可以有 **强调**、列表或多个段落。\n",[241,2752,2753],{"class":243,"line":323},[241,2754,2755],{},":::\n",[14,2757,2758,2759,2762,2763,2765,2766,2769,2770,2773,2774,1257,2777,2780,2781,2784],{},"属性写在开头一行的 ",[23,2760,2761],{},"{}"," 里：",[23,2764,2728],{}," 缺省为 ",[23,2767,2768],{},"📌","；",[23,2771,2772],{},"color"," 为背景色名，缺省 ",[23,2775,2776],{},"orange",[23,2778,2779],{},"text"," 为字体颜色名，缺省时不写。颜色只保存色名，编辑和阅读时映射到主题的语义颜色，深色主题自动适配；\n未知的键或色名按缺省值显示，源码保持原样。不支持 ",[23,2782,2783],{},":::"," 容器的渲染器会把围栏行显示为普通文字，\n正文按普通 Markdown 显示，内容不会丢失。",[14,2786,2787,2788,2790,2791,2793,2794,2797,2798,2800,2801,2803],{},"高亮块属于 ",[23,2789,2080],{}," 的默认名称 ",[23,2792,2127],{},"。自定义 ",[23,2795,2796],{},"containers.types"," 时会替换整个名单，\n需要高亮块就把 ",[23,2799,2127],{}," 一起写上。",[23,2802,25],{}," 阅读视图、Word、PDF 与 OFD 导出使用同一份源码：\n导出时图标作为首行、背景与字体颜色按固定的浅色近似值写入，重新导入 Word 时恢复原始源码。",[10,2805,2807],{"id":2806},"日期表情与联系人","日期、表情与联系人",[14,2809,2810,2811,2814,2815,2818,2819,2821],{},"“插入 → 日期”直接使用公共 ",[23,2812,2813],{},"QuireCalendar","。浏览月份不会写入，选择一天或“今天”后才\n插入 ISO 普通日期，不保存时区或时间戳。“插入 → 表情符号”使用公共 ",[23,2816,2817],{},"QuireEmojiPicker","，\n顶部提供常用快捷项，各分类在一个 ",[23,2820,1177],{}," 内连续滚动，使用组件库自定义滚动条。\n搜索框和底部分类栏固定；点击分类定位对应区域，滚动同步高亮。支持中英文关键词搜索、\n搜索结果去重和本次编辑器会话的最近选择。保存的是 Unicode 字符，组合表情\n不会被拆开；所有这些插入都写到菜单打开时捕获的位置，可用一次撤销恢复。",[14,2823,2824],{},"提及必须由宿主提供候选联系人；独立示例中的小林、小陈、小许仅是本地示例数据。静态数组\n按姓名、描述或 id 过滤；异步函数负责搜索，可以按业务权限限制候选结果：",[232,2826,2828],{"className":234,"code":2827,"language":236,"meta":237,"style":237},"\u003Cscript setup lang=\"ts\">\nimport { MdEditor } from '@quirekit\u002Fmd-editor\u002Fvue'\nimport type { MdMention, MdMentionSource } from '@quirekit\u002Fmd-editor'\n\nconst initialMarkdown = '# 项目计划\\n\\n'\nconst contacts: readonly MdMention[] = [\n  { id: 'lin', label: '小林', url: '\u002Fpeople\u002Flin', description: '设计' },\n  { id: 'chen', label: '小陈', url: '\u002Fpeople\u002Fchen', description: '开发' },\n]\n\n\u002F\u002F 可用此函数替代 contacts。接口由应用实现，返回同样的 MdMention[]。\nconst searchContacts: MdMentionSource = async ({ query, signal }) => {\n  const response = await fetch(`\u002Fapi\u002Fpeople?q=${encodeURIComponent(query)}`, { signal })\n  if (!response.ok) throw new Error('联系人暂时不可用')\n  return await response.json() as MdMention[]\n}\n\u003C\u002Fscript>\n\u003Ctemplate>\n  \u003CMdEditor :markdown=\"initialMarkdown\" :mentions=\"contacts\" \u002F>\n\u003C\u002Ftemplate>\n",[23,2829,2830,2846,2857,2870,2874,2889,2912,2941,2965,2970,2974,2979,3014,3049,3076,3100,3104,3112,3120,3153],{"__ignoreMap":237},[241,2831,2832,2834,2836,2838,2840,2842,2844],{"class":243,"line":244},[241,2833,248],{"class":247},[241,2835,1388],{"class":251},[241,2837,1391],{"class":258},[241,2839,1394],{"class":258},[241,2841,262],{"class":247},[241,2843,1399],{"class":265},[241,2845,1402],{"class":247},[241,2847,2848,2850,2853,2855],{"class":243,"line":285},[241,2849,305],{"class":304},[241,2851,2852],{"class":247}," { MdEditor } ",[241,2854,311],{"class":304},[241,2856,1432],{"class":265},[241,2858,2859,2861,2863,2866,2868],{"class":243,"line":323},[241,2860,305],{"class":304},[241,2862,618],{"class":304},[241,2864,2865],{"class":247}," { MdMention, MdMentionSource } ",[241,2867,311],{"class":304},[241,2869,314],{"class":265},[241,2871,2872],{"class":243,"line":354},[241,2873,320],{"emptyLinePlaceholder":319},[241,2875,2876,2878,2880,2882,2885,2887],{"class":243,"line":376},[241,2877,326],{"class":304},[241,2879,1511],{"class":329},[241,2881,333],{"class":304},[241,2883,2884],{"class":265}," '# 项目计划",[241,2886,1519],{"class":329},[241,2888,1528],{"class":265},[241,2890,2891,2893,2896,2898,2901,2904,2907,2909],{"class":243,"line":397},[241,2892,326],{"class":304},[241,2894,2895],{"class":329}," contacts",[241,2897,651],{"class":304},[241,2899,2900],{"class":304}," readonly",[241,2902,2903],{"class":258}," MdMention",[241,2905,2906],{"class":247},"[] ",[241,2908,262],{"class":304},[241,2910,2911],{"class":247}," [\n",[241,2913,2914,2917,2920,2923,2926,2929,2932,2935,2938],{"class":243,"line":418},[241,2915,2916],{"class":247},"  { id: ",[241,2918,2919],{"class":265},"'lin'",[241,2921,2922],{"class":247},", label: ",[241,2924,2925],{"class":265},"'小林'",[241,2927,2928],{"class":247},", url: ",[241,2930,2931],{"class":265},"'\u002Fpeople\u002Flin'",[241,2933,2934],{"class":247},", description: ",[241,2936,2937],{"class":265},"'设计'",[241,2939,2940],{"class":247}," },\n",[241,2942,2943,2945,2948,2950,2953,2955,2958,2960,2963],{"class":243,"line":708},[241,2944,2916],{"class":247},[241,2946,2947],{"class":265},"'chen'",[241,2949,2922],{"class":247},[241,2951,2952],{"class":265},"'小陈'",[241,2954,2928],{"class":247},[241,2956,2957],{"class":265},"'\u002Fpeople\u002Fchen'",[241,2959,2934],{"class":247},[241,2961,2962],{"class":265},"'开发'",[241,2964,2940],{"class":247},[241,2966,2967],{"class":243,"line":743},[241,2968,2969],{"class":247},"]\n",[241,2971,2972],{"class":243,"line":771},[241,2973,320],{"emptyLinePlaceholder":319},[241,2975,2976],{"class":243,"line":779},[241,2977,2978],{"class":288},"\u002F\u002F 可用此函数替代 contacts。接口由应用实现，返回同样的 MdMention[]。\n",[241,2980,2981,2983,2986,2988,2991,2993,2996,2999,3002,3004,3007,3010,3012],{"class":243,"line":785},[241,2982,326],{"class":304},[241,2984,2985],{"class":258}," searchContacts",[241,2987,651],{"class":304},[241,2989,2990],{"class":258}," MdMentionSource",[241,2992,333],{"class":304},[241,2994,2995],{"class":304}," async",[241,2997,2998],{"class":247}," ({ ",[241,3000,3001],{"class":701},"query",[241,3003,429],{"class":247},[241,3005,3006],{"class":701},"signal",[241,3008,3009],{"class":247}," }) ",[241,3011,2614],{"class":304},[241,3013,659],{"class":247},[241,3015,3016,3018,3021,3023,3026,3029,3031,3034,3037,3039,3041,3043,3046],{"class":243,"line":791},[241,3017,1548],{"class":304},[241,3019,3020],{"class":329}," response",[241,3022,333],{"class":304},[241,3024,3025],{"class":304}," await",[241,3027,3028],{"class":258}," fetch",[241,3030,406],{"class":247},[241,3032,3033],{"class":265},"`\u002Fapi\u002Fpeople?q=${",[241,3035,3036],{"class":258},"encodeURIComponent",[241,3038,406],{"class":265},[241,3040,3001],{"class":247},[241,3042,866],{"class":265},[241,3044,3045],{"class":265},"}`",[241,3047,3048],{"class":247},", { signal })\n",[241,3050,3051,3053,3055,3057,3060,3063,3066,3069,3071,3074],{"class":243,"line":815},[241,3052,1560],{"class":304},[241,3054,382],{"class":247},[241,3056,385],{"class":304},[241,3058,3059],{"class":247},"response.ok) ",[241,3061,3062],{"class":304},"throw",[241,3064,3065],{"class":304}," new",[241,3067,3068],{"class":258}," Error",[241,3070,406],{"class":247},[241,3072,3073],{"class":265},"'联系人暂时不可用'",[241,3075,373],{"class":247},[241,3077,3078,3081,3083,3086,3089,3092,3095,3097],{"class":243,"line":821},[241,3079,3080],{"class":304},"  return",[241,3082,3025],{"class":304},[241,3084,3085],{"class":247}," response.",[241,3087,3088],{"class":258},"json",[241,3090,3091],{"class":247},"() ",[241,3093,3094],{"class":304},"as",[241,3096,2903],{"class":258},[241,3098,3099],{"class":247},"[]\n",[241,3101,3102],{"class":243,"line":827},[241,3103,830],{"class":247},[241,3105,3106,3108,3110],{"class":243,"line":833},[241,3107,1612],{"class":247},[241,3109,1388],{"class":251},[241,3111,1402],{"class":247},[241,3113,3114,3116,3118],{"class":243,"line":838},[241,3115,248],{"class":247},[241,3117,1627],{"class":251},[241,3119,1402],{"class":247},[241,3121,3122,3124,3126,3128,3130,3132,3134,3136,3138,3140,3142,3144,3146,3149,3151],{"class":243,"line":852},[241,3123,1634],{"class":247},[241,3125,252],{"class":251},[241,3127,255],{"class":247},[241,3129,259],{"class":258},[241,3131,262],{"class":247},[241,3133,266],{"class":265},[241,3135,269],{"class":247},[241,3137,266],{"class":265},[241,3139,255],{"class":247},[241,3141,1877],{"class":258},[241,3143,262],{"class":247},[241,3145,266],{"class":265},[241,3147,3148],{"class":247},"contacts",[241,3150,266],{"class":265},[241,3152,282],{"class":247},[241,3154,3155,3157,3159],{"class":243,"line":873},[241,3156,1612],{"class":247},[241,3158,1627],{"class":251},[241,3160,1402],{"class":247},[14,3162,3163,3164,3166,3167,3169,3170,3172,3173,3175],{},"提供 ",[23,3165,1877],{}," 后，可以选择“插入 → 提及”，也可以在正文的空白或开括号后输入 ",[23,3168,1883],{},"。\n候选面板内输入搜索词；方向键和 Enter 或点击选择联系人。输入 ",[23,3171,1883],{}," 触发时只将该字符替换为\n链接；菜单入口替换原选区。取消保留已输入的 ",[23,3174,1883],{},"，搜索草稿不写入文档。粘贴、邮箱地址、\n代码、公式和链接内部不会触发提及。该能力在挂载时启用，运行中更换 provider 可更新候选来源；\n从未配置状态改为启用时需重新挂载。",[14,3177,3178,3179,3182,3183,3186,3187,3189,3190,3193],{},"候选请求通过共享 ",[23,3180,3181],{},"SuggestionController"," 取消和关联；旧查询结果不能覆盖新查询，组合输入\n期间不发送查询，失败有重试入口。目标被外部修改、换文档或变为只读时拒绝写入。每个联系人\n的 ",[23,3184,3185],{},"id"," 必须稳定、",[23,3188,1836],{}," 非空、",[23,3191,3192],{},"url"," 是通过安全校验的目的地。当前提及保存为普通 Markdown\n链接，不维护隐藏的人员身份数据，不发送通知。通知、权限和人员详情页面由宿主负责。",[14,3195,3196,3197,3199,3200,3203,3204,453,3207,3210,3211,3214,3215,3217,3218,3221,3222,3225,3226,3229],{},"通用 ",[23,3198,2817],{}," 可独立用于任何 QuireKit 界面，经 ",[23,3201,3202],{},"@quirekit\u002Fui\u002Fvue"," 导入。\n",[23,3205,3206],{},"items",[23,3208,3209],{},"groups"," 替换目录，",[23,3212,3213],{},"common"," 自定义常用快捷项顺序（",[23,3216,2157],{}," 隐藏），",[23,3219,3220],{},"recent"," 由宿主\n管理并单独显示。默认常用是精选快捷项，不按频次排序。",[23,3223,3224],{},"select"," 发出包含精确 ",[23,3227,3228],{},"value"," 的条目。\n它不依赖 MD Editor、不创建浮层、不自行存储使用记录。默认目录为常用精选集合，不代表\nUnicode 表情全集，也不包含肤色选择器。",[10,3231,3232],{"id":3232},"把正文文本显示为链接",[14,3234,3235,3236,1238,3239,3242,3243,3245,3246,37],{},"工单号、需求号这类短标识可以显示为链接而不改动正文：",[23,3237,3238],{},"@quirekit\u002Fmsfe-link",[23,3240,3241],{},"textLinks()"," 按宿主给出的\n规则识别可见区域中的文本，经 ",[23,3244,2141],{}," 安装。保存的 Markdown 仍是原文，例如 ",[23,3247,3248],{},"CLOUD-15084",[232,3250,3252],{"className":295,"code":3251,"language":297,"meta":237,"style":237},"import { textLinks } from '@quirekit\u002Fmsfe-link'\n\nconst issueLinks = textLinks({\n  id: 'issues',\n  pattern: \u002F[A-Z][A-Z0-9]+-\\d+\u002Fu,\n  href: key => `https:\u002F\u002Fissues.example.com\u002Fbrowse\u002F${key}`,\n  \u002F\u002F 可选：只链接真实存在的标识。同一批可见候选合并为一次调用，结果按文本缓存。\n  verify: async (keys, signal) => {\n    const response = await fetch(`\u002Fapi\u002Fissues?keys=${keys.join(',')}`, { signal })\n    return response.ok ? await response.json() as string[] : []\n  },\n  \u002F\u002F 可选：悬停卡片。MD Editor 用统一样式渲染，内容为纯文本。\n  card: async (key, signal) => {\n    const issue = await fetch(`\u002Fapi\u002Fissues\u002F${key}`, { signal }).then(response => response.ok ? response.json() : null)\n    return issue && { subtitle: `${key} · ${issue.type}`, title: issue.summary,\n      status: { label: issue.status, tone: 'info' }, fields: [{ label: '经办人', value: issue.assignee }] }\n  },\n})\n",[23,3253,3254,3266,3270,3284,3294,3324,3345,3350,3375,3411,3441,3445,3450,3473,3523,3556,3573,3577],{"__ignoreMap":237},[241,3255,3256,3258,3261,3263],{"class":243,"line":244},[241,3257,305],{"class":304},[241,3259,3260],{"class":247}," { textLinks } ",[241,3262,311],{"class":304},[241,3264,3265],{"class":265}," '@quirekit\u002Fmsfe-link'\n",[241,3267,3268],{"class":243,"line":285},[241,3269,320],{"emptyLinePlaceholder":319},[241,3271,3272,3274,3277,3279,3282],{"class":243,"line":323},[241,3273,326],{"class":304},[241,3275,3276],{"class":329}," issueLinks",[241,3278,333],{"class":304},[241,3280,3281],{"class":258}," textLinks",[241,3283,849],{"class":247},[241,3285,3286,3289,3292],{"class":243,"line":354},[241,3287,3288],{"class":247},"  id: ",[241,3290,3291],{"class":265},"'issues'",[241,3293,812],{"class":247},[241,3295,3296,3299,3302,3305,3308,3312,3315,3317,3319,3322],{"class":243,"line":376},[241,3297,3298],{"class":247},"  pattern:",[241,3300,3301],{"class":265}," \u002F",[241,3303,3304],{"class":329},"[A-Z][A-Z0-9]",[241,3306,3307],{"class":304},"+",[241,3309,3311],{"class":3310},"sAPpe","-",[241,3313,3314],{"class":329},"\\d",[241,3316,3307],{"class":304},[241,3318,1184],{"class":265},[241,3320,3321],{"class":304},"u",[241,3323,812],{"class":247},[241,3325,3326,3329,3332,3334,3336,3339,3341,3343],{"class":243,"line":397},[241,3327,3328],{"class":258},"  href",[241,3330,3331],{"class":247},": ",[241,3333,2196],{"class":701},[241,3335,2636],{"class":304},[241,3337,3338],{"class":265}," `https:\u002F\u002Fissues.example.com\u002Fbrowse\u002F${",[241,3340,2196],{"class":247},[241,3342,3045],{"class":265},[241,3344,812],{"class":247},[241,3346,3347],{"class":243,"line":418},[241,3348,3349],{"class":288},"  \u002F\u002F 可选：只链接真实存在的标识。同一批可见候选合并为一次调用，结果按文本缓存。\n",[241,3351,3352,3355,3357,3360,3362,3365,3367,3369,3371,3373],{"class":243,"line":708},[241,3353,3354],{"class":258},"  verify",[241,3356,3331],{"class":247},[241,3358,3359],{"class":304},"async",[241,3361,382],{"class":247},[241,3363,3364],{"class":701},"keys",[241,3366,429],{"class":247},[241,3368,3006],{"class":701},[241,3370,435],{"class":247},[241,3372,2614],{"class":304},[241,3374,659],{"class":247},[241,3376,3377,3379,3381,3383,3385,3387,3389,3392,3394,3397,3400,3402,3405,3407,3409],{"class":243,"line":743},[241,3378,711],{"class":304},[241,3380,3020],{"class":329},[241,3382,333],{"class":304},[241,3384,3025],{"class":304},[241,3386,3028],{"class":258},[241,3388,406],{"class":247},[241,3390,3391],{"class":265},"`\u002Fapi\u002Fissues?keys=${",[241,3393,3364],{"class":247},[241,3395,3396],{"class":265},".",[241,3398,3399],{"class":258},"join",[241,3401,406],{"class":265},[241,3403,3404],{"class":265},"','",[241,3406,866],{"class":265},[241,3408,3045],{"class":265},[241,3410,3048],{"class":247},[241,3412,3413,3415,3418,3421,3423,3425,3427,3429,3431,3434,3436,3438],{"class":243,"line":771},[241,3414,774],{"class":304},[241,3416,3417],{"class":247}," response.ok ",[241,3419,3420],{"class":304},"?",[241,3422,3025],{"class":304},[241,3424,3085],{"class":247},[241,3426,3088],{"class":258},[241,3428,3091],{"class":247},[241,3430,3094],{"class":304},[241,3432,3433],{"class":329}," string",[241,3435,2906],{"class":247},[241,3437,651],{"class":304},[241,3439,3440],{"class":247}," []\n",[241,3442,3443],{"class":243,"line":779},[241,3444,824],{"class":247},[241,3446,3447],{"class":243,"line":785},[241,3448,3449],{"class":288},"  \u002F\u002F 可选：悬停卡片。MD Editor 用统一样式渲染，内容为纯文本。\n",[241,3451,3452,3455,3457,3459,3461,3463,3465,3467,3469,3471],{"class":243,"line":791},[241,3453,3454],{"class":258},"  card",[241,3456,3331],{"class":247},[241,3458,3359],{"class":304},[241,3460,382],{"class":247},[241,3462,2196],{"class":701},[241,3464,429],{"class":247},[241,3466,3006],{"class":701},[241,3468,435],{"class":247},[241,3470,2614],{"class":304},[241,3472,659],{"class":247},[241,3474,3475,3477,3480,3482,3484,3486,3488,3491,3493,3495,3498,3500,3502,3505,3507,3509,3511,3513,3515,3517,3519,3521],{"class":243,"line":815},[241,3476,711],{"class":304},[241,3478,3479],{"class":329}," issue",[241,3481,333],{"class":304},[241,3483,3025],{"class":304},[241,3485,3028],{"class":258},[241,3487,406],{"class":247},[241,3489,3490],{"class":265},"`\u002Fapi\u002Fissues\u002F${",[241,3492,2196],{"class":247},[241,3494,3045],{"class":265},[241,3496,3497],{"class":247},", { signal }).",[241,3499,2628],{"class":258},[241,3501,406],{"class":247},[241,3503,3504],{"class":701},"response",[241,3506,2636],{"class":304},[241,3508,3417],{"class":247},[241,3510,3420],{"class":304},[241,3512,3085],{"class":247},[241,3514,3088],{"class":258},[241,3516,3091],{"class":247},[241,3518,651],{"class":304},[241,3520,1478],{"class":329},[241,3522,373],{"class":247},[241,3524,3525,3527,3530,3533,3536,3539,3541,3544,3547,3549,3551,3553],{"class":243,"line":821},[241,3526,774],{"class":304},[241,3528,3529],{"class":247}," issue ",[241,3531,3532],{"class":304},"&&",[241,3534,3535],{"class":247}," { subtitle: ",[241,3537,3538],{"class":265},"`${",[241,3540,2196],{"class":247},[241,3542,3543],{"class":265},"} · ${",[241,3545,3546],{"class":247},"issue",[241,3548,3396],{"class":265},[241,3550,1424],{"class":247},[241,3552,3045],{"class":265},[241,3554,3555],{"class":247},", title: issue.summary,\n",[241,3557,3558,3561,3564,3567,3570],{"class":243,"line":827},[241,3559,3560],{"class":247},"      status: { label: issue.status, tone: ",[241,3562,3563],{"class":265},"'info'",[241,3565,3566],{"class":247}," }, fields: [{ label: ",[241,3568,3569],{"class":265},"'经办人'",[241,3571,3572],{"class":247},", value: issue.assignee }] }\n",[241,3574,3575],{"class":243,"line":833},[241,3576,824],{"class":247},[241,3578,3579],{"class":243,"line":838},[241,3580,903],{"class":247},[14,3582,3583,3584,3587,3588,3591,3592,3595,3596,3599,3600,3603,3604,3607,3608,3611],{},"识别出的文本与普通链接外观一致，带 ",[23,3585,3586],{},"data-msfe-text-link"," 属性，编辑时 Cmd\u002FCtrl+点击、只读时单击跳转。\n代码、已有链接、图片、HTML 与公式中的文本不识别，前后紧邻字母或数字的匹配也不识别；源码视图保持原样。\n校验失败的候选不缓存，之后重新校验；光标仍停在末尾、尚未校验的候选等光标离开后再校验，避免逐字查询。\n把同一个 options 对象传给多个编辑器即可共享校验结果。提供 ",[23,3589,3590],{},"card"," 后，悬停链接 300ms 显示卡片：\n副标题、标题、最多三行说明、状态标签（",[23,3593,3594],{},"tone"," 可选 neutral、info、success、warning、danger）、短字段和\n「打开链接」入口；返回 null 不显示。再提供 ",[23,3597,3598],{},"fromHref(url)"," 把地址映射回文本，写成普通 Markdown 链接的\n同一目标（如 ",[23,3601,3602],{},"[需求说明](https:\u002F\u002Fissues.example.com\u002Fbrowse\u002FCLOUD-9)","）也显示这张卡片。\n设置 ",[23,3605,3606],{},"exportLinks: true"," 后，导出 Markdown、Word、PDF、OFD 时识别出的文本写成标准链接，其他软件中也可点击；\n编辑器中的正文不变。宿主自己的导出可调用 ",[23,3609,3610],{},"linkifyTextLinks(editor.state)"," 得到同样的结果。卡片结果按文本缓存，失败的请求下次悬停重试。导出时转为真链接由宿主实现。",[10,3613,3614],{"id":3614},"评论",[14,3616,3617,3618,3621,3622,3625,3626,3629,3630,3633],{},"评论由商业包 ",[23,3619,3620],{},"@quirekit\u002Fmd-editor-comments"," 提供（开发与评估免费，生产使用需要授权码）：把 ",[23,3623,3624],{},"mdComments()"," 传给 ",[23,3627,3628],{},"comments"," 即可打开，\n并引入它的 ",[23,3631,3632],{},"styles.css","。选中文字后用工具栏“添加评论”、浮动选区工具栏或 ⌘\u002FCtrl + Alt + M 留下评论，\n可以回复、编辑、删除自己的消息、标记解决。选中的评论卡片上有上一条 \u002F 下一条按钮和当前位置，工具栏“评论”菜单也能跳转或查看全部；解决一条后自动跳到下一条未解决的评论。\n评论不写进 Markdown：原文保持干净，评论以标准数据交换格式由应用自己保存。",[232,3635,3637],{"className":234,"code":3636,"language":236,"meta":237,"style":237},"\u003Cscript setup lang=\"ts\">\nimport { shallowRef, watch } from 'vue'\nimport { MdEditor, type MdEditorInstance } from '@quirekit\u002Fmd-editor\u002Fvue'\nimport { mdComments } from '@quirekit\u002Fmd-editor-comments'\nimport '@quirekit\u002Fmd-editor-comments\u002Fstyles.css'\nimport { getComments } from '@quirekit\u002Fmsfe-comments'\n\nconst props = defineProps\u003C{ markdown: string; saved?: unknown }>()\nconst product = shallowRef\u003CMdEditorInstance | null>(null)\nconst comments = mdComments({\n  user: { id: 'lin', name: '小林' },                 \u002F\u002F 新消息与解决的署名；null 时只读\n  canResolve: thread => thread.messages[0]!.author.id !== 'admin', \u002F\u002F 可选：由应用决定谁能解决\n  onChange: change => saveComments(change.snapshot()), \u002F\u002F 每次评论操作后保存\n})\n\u002F\u002F 挂载后导入已保存的评论；原文改动过也会按原文引用重新定位，找不到的进入“找不到原文”分组。\nwatch(() => product.value?.editor, editor => { if (editor && props.saved) getComments(editor)?.importComments(props.saved) })\n\u002F\u002F 正文编辑只移动评论范围、不逐次通知；保存文档时一并导出，锚点保持最新。\nfunction save() { return { markdown: product.value?.editor?.getMarkdown(), comments: product.value?.editor && getComments(product.value.editor)?.exportComments() } }\ndeclare function saveComments(data: unknown): void\n\u003C\u002Fscript>\n\u003Ctemplate>\n  \u003CMdEditor ref=\"product\" layout=\"document\" :markdown=\"markdown\" :comments=\"comments\" \u002F>\n\u003C\u002Ftemplate>\n",[23,3638,3639,3655,3666,3680,3692,3699,3711,3715,3751,3775,3789,3807,3844,3870,3874,3879,3922,3927,3959,3985,3993,4001,4046],{"__ignoreMap":237},[241,3640,3641,3643,3645,3647,3649,3651,3653],{"class":243,"line":244},[241,3642,248],{"class":247},[241,3644,1388],{"class":251},[241,3646,1391],{"class":258},[241,3648,1394],{"class":258},[241,3650,262],{"class":247},[241,3652,1399],{"class":265},[241,3654,1402],{"class":247},[241,3656,3657,3659,3662,3664],{"class":243,"line":285},[241,3658,305],{"class":304},[241,3660,3661],{"class":247}," { shallowRef, watch } ",[241,3663,311],{"class":304},[241,3665,1414],{"class":265},[241,3667,3668,3670,3672,3674,3676,3678],{"class":243,"line":323},[241,3669,305],{"class":304},[241,3671,1421],{"class":247},[241,3673,1424],{"class":304},[241,3675,1427],{"class":247},[241,3677,311],{"class":304},[241,3679,1432],{"class":265},[241,3681,3682,3684,3687,3689],{"class":243,"line":354},[241,3683,305],{"class":304},[241,3685,3686],{"class":247}," { mdComments } ",[241,3688,311],{"class":304},[241,3690,3691],{"class":265}," '@quirekit\u002Fmd-editor-comments'\n",[241,3693,3694,3696],{"class":243,"line":376},[241,3695,305],{"class":304},[241,3697,3698],{"class":265}," '@quirekit\u002Fmd-editor-comments\u002Fstyles.css'\n",[241,3700,3701,3703,3706,3708],{"class":243,"line":397},[241,3702,305],{"class":304},[241,3704,3705],{"class":247}," { getComments } ",[241,3707,311],{"class":304},[241,3709,3710],{"class":265}," '@quirekit\u002Fmsfe-comments'\n",[241,3712,3713],{"class":243,"line":418},[241,3714,320],{"emptyLinePlaceholder":319},[241,3716,3717,3719,3722,3724,3727,3730,3732,3734,3736,3739,3742,3745,3748],{"class":243,"line":708},[241,3718,326],{"class":304},[241,3720,3721],{"class":329}," props",[241,3723,333],{"class":304},[241,3725,3726],{"class":258}," defineProps",[241,3728,3729],{"class":247},"\u003C{ ",[241,3731,259],{"class":701},[241,3733,651],{"class":304},[241,3735,3433],{"class":329},[241,3737,3738],{"class":247},"; ",[241,3740,3741],{"class":701},"saved",[241,3743,3744],{"class":304},"?:",[241,3746,3747],{"class":329}," unknown",[241,3749,3750],{"class":247}," }>()\n",[241,3752,3753,3755,3757,3759,3761,3763,3765,3767,3769,3771,3773],{"class":243,"line":743},[241,3754,326],{"class":304},[241,3756,1462],{"class":329},[241,3758,333],{"class":304},[241,3760,1467],{"class":258},[241,3762,248],{"class":247},[241,3764,1472],{"class":258},[241,3766,1475],{"class":304},[241,3768,1478],{"class":329},[241,3770,1481],{"class":247},[241,3772,981],{"class":329},[241,3774,373],{"class":247},[241,3776,3777,3779,3782,3784,3787],{"class":243,"line":771},[241,3778,326],{"class":304},[241,3780,3781],{"class":329}," comments",[241,3783,333],{"class":304},[241,3785,3786],{"class":258}," mdComments",[241,3788,849],{"class":247},[241,3790,3791,3794,3796,3799,3801,3804],{"class":243,"line":779},[241,3792,3793],{"class":247},"  user: { id: ",[241,3795,2919],{"class":265},[241,3797,3798],{"class":247},", name: ",[241,3800,2925],{"class":265},[241,3802,3803],{"class":247}," },                 ",[241,3805,3806],{"class":288},"\u002F\u002F 新消息与解决的署名；null 时只读\n",[241,3808,3809,3812,3814,3817,3819,3822,3825,3828,3830,3833,3836,3839,3841],{"class":243,"line":785},[241,3810,3811],{"class":258},"  canResolve",[241,3813,3331],{"class":247},[241,3815,3816],{"class":701},"thread",[241,3818,2636],{"class":304},[241,3820,3821],{"class":247}," thread.messages[",[241,3823,3824],{"class":329},"0",[241,3826,3827],{"class":247},"]",[241,3829,385],{"class":304},[241,3831,3832],{"class":247},".author.id ",[241,3834,3835],{"class":304},"!==",[241,3837,3838],{"class":265}," 'admin'",[241,3840,429],{"class":247},[241,3842,3843],{"class":288},"\u002F\u002F 可选：由应用决定谁能解决\n",[241,3845,3846,3849,3851,3853,3855,3858,3861,3864,3867],{"class":243,"line":791},[241,3847,3848],{"class":258},"  onChange",[241,3850,3331],{"class":247},[241,3852,1669],{"class":701},[241,3854,2636],{"class":304},[241,3856,3857],{"class":258}," saveComments",[241,3859,3860],{"class":247},"(change.",[241,3862,3863],{"class":258},"snapshot",[241,3865,3866],{"class":247},"()), ",[241,3868,3869],{"class":288},"\u002F\u002F 每次评论操作后保存\n",[241,3871,3872],{"class":243,"line":815},[241,3873,903],{"class":247},[241,3875,3876],{"class":243,"line":821},[241,3877,3878],{"class":288},"\u002F\u002F 挂载后导入已保存的评论；原文改动过也会按原文引用重新定位，找不到的进入“找不到原文”分组。\n",[241,3880,3881,3884,3887,3889,3892,3895,3897,3900,3902,3905,3907,3910,3913,3916,3919],{"class":243,"line":827},[241,3882,3883],{"class":258},"watch",[241,3885,3886],{"class":247},"(() ",[241,3888,2614],{"class":304},[241,3890,3891],{"class":247}," product.value?.editor, ",[241,3893,3894],{"class":701},"editor",[241,3896,2636],{"class":304},[241,3898,3899],{"class":247}," { ",[241,3901,379],{"class":304},[241,3903,3904],{"class":247}," (editor ",[241,3906,3532],{"class":304},[241,3908,3909],{"class":247}," props.saved) ",[241,3911,3912],{"class":258},"getComments",[241,3914,3915],{"class":247},"(editor)?.",[241,3917,3918],{"class":258},"importComments",[241,3920,3921],{"class":247},"(props.saved) })\n",[241,3923,3924],{"class":243,"line":833},[241,3925,3926],{"class":288},"\u002F\u002F 正文编辑只移动评论范围、不逐次通知；保存文档时一并导出，锚点保持最新。\n",[241,3928,3929,3931,3933,3935,3937,3940,3942,3945,3947,3950,3953,3956],{"class":243,"line":838},[241,3930,1537],{"class":304},[241,3932,1540],{"class":258},[241,3934,1070],{"class":247},[241,3936,765],{"class":304},[241,3938,3939],{"class":247}," { markdown: product.value?.editor?.",[241,3941,1585],{"class":258},[241,3943,3944],{"class":247},"(), comments: product.value?.editor ",[241,3946,3532],{"class":304},[241,3948,3949],{"class":258}," getComments",[241,3951,3952],{"class":247},"(product.value.editor)?.",[241,3954,3955],{"class":258},"exportComments",[241,3957,3958],{"class":247},"() } }\n",[241,3960,3961,3964,3967,3969,3971,3974,3976,3978,3980,3982],{"class":243,"line":852},[241,3962,3963],{"class":304},"declare",[241,3965,3966],{"class":304}," function",[241,3968,3857],{"class":258},[241,3970,406],{"class":247},[241,3972,3973],{"class":701},"data",[241,3975,651],{"class":304},[241,3977,3747],{"class":329},[241,3979,866],{"class":247},[241,3981,651],{"class":304},[241,3983,3984],{"class":329}," void\n",[241,3986,3987,3989,3991],{"class":243,"line":873},[241,3988,1612],{"class":247},[241,3990,1388],{"class":251},[241,3992,1402],{"class":247},[241,3994,3995,3997,3999],{"class":243,"line":884},[241,3996,248],{"class":247},[241,3998,1627],{"class":251},[241,4000,1402],{"class":247},[241,4002,4003,4005,4007,4009,4011,4013,4016,4018,4020,4022,4024,4026,4028,4030,4032,4034,4036,4038,4040,4042,4044],{"class":243,"line":894},[241,4004,1634],{"class":247},[241,4006,252],{"class":251},[241,4008,1497],{"class":258},[241,4010,262],{"class":247},[241,4012,1643],{"class":265},[241,4014,4015],{"class":258}," layout",[241,4017,262],{"class":247},[241,4019,279],{"class":265},[241,4021,255],{"class":247},[241,4023,259],{"class":258},[241,4025,262],{"class":247},[241,4027,266],{"class":265},[241,4029,259],{"class":247},[241,4031,266],{"class":265},[241,4033,255],{"class":247},[241,4035,3628],{"class":258},[241,4037,262],{"class":247},[241,4039,266],{"class":265},[241,4041,3628],{"class":247},[241,4043,266],{"class":265},[241,4045,282],{"class":247},[241,4047,4048,4050,4052],{"class":243,"line":900},[241,4049,1612],{"class":247},[241,4051,1627],{"class":251},[241,4053,1402],{"class":247},[14,4055,4056,4057,4059,4060,4062,4063,4066,4067,4069],{},"宽屏的文档布局在右侧页边显示评论，卡片对齐所评论的文字；窄屏、嵌入布局和手机通过“评论”\n打开列表。提供 ",[23,4058,1877],{}," 时，评论输入框中输入 ",[23,4061,1883],{}," 也会列出联系人，保存为与正文相同的\n",[23,4064,4065],{},"[@名称](\u003C链接>)","，并在消息的 ",[23,4068,1877],{}," 中列出，供应用发送通知。评论正文支持粗体、斜体、\n行内代码、删除线、链接和提及，其他 Markdown 按原文显示。",[14,4071,4072,4075,4076,4079,4080,4083,4084,4087,4088,4091],{},[23,4073,4074],{},"canComment: false"," 只允许查看；",[23,4077,4078],{},"canResolve"," 决定是否显示“解决 \u002F 重开”，未提供时不限制；自己的消息总能删除，\n",[23,4081,4082],{},"canDelete"," 让管理员等角色也能删除别人的消息（不能编辑）。",[23,4085,4086],{},"avatar"," 按作者返回头像地址，没有时显示姓名缩写。\n这些设置只控制界面，权限必须由应用的服务端再次校验。只读文档也可以评论。评论不随 Word、PDF、\nOFD 导出，导入 Word 时批注不会转成评论。交换格式、重新定位与协同计划见\n",[23,4089,4090],{},"@quirekit\u002Fmsfe-comments"," 的类型说明。",[14,4093,4094,4095,4099,4100,4103],{},"除了划词评论，也可以对整篇文档发表",[4096,4097,4098],"strong",{},"全文评论","：工具栏“评论”菜单或评论列表里的“添加全文评论”。\n全文评论没有原文位置，回复、解决、@ 提及与划词评论相同，列在“全部评论”顶部的“全文评论”分组；\n设置 ",[23,4101,4102],{},"documentComments: \"end\""," 时，正文末尾还会显示全文评论区。含全文评论的数据以交换格式 v2 导出，\n不含时仍是 v1。",[14,4105,4106,4107,4112,4113,4116,4117,4120],{},"需要和支持 ",[17,4108,4111],{"href":4109,"rel":4110},"https:\u002F\u002Fgithub.com\u002FCriticMarkup\u002FCriticMarkup-toolkit",[112],"CriticMarkup"," 的工具交换文件时，\n设置 ",[23,4114,4115],{},"criticMarkup: true","：“导出”中多出“导出 Markdown（含评论）”，把评论写成\n",[23,4118,4119],{},"{==原文==}{>>@作者: 评论\u003C\u003C}","；导入 Markdown 时识别这些标记并转成评论，正文中不保留标记。\n编辑器里的原文和评论数据仍然分开，标记只出现在导出的文件里。也可以分别配置：",[232,4122,4124],{"className":295,"code":4123,"language":297,"meta":237,"style":237},"const comments = mdComments({\n  user: { id: 'lin', name: '小林' },\n  criticMarkup: { export: true, import: true, includeResolved: false, suggestions: 'keep' },\n})\n",[23,4125,4126,4138,4150,4175],{"__ignoreMap":237},[241,4127,4128,4130,4132,4134,4136],{"class":243,"line":244},[241,4129,326],{"class":304},[241,4131,3781],{"class":329},[241,4133,333],{"class":304},[241,4135,3786],{"class":258},[241,4137,849],{"class":247},[241,4139,4140,4142,4144,4146,4148],{"class":243,"line":285},[241,4141,3793],{"class":247},[241,4143,2919],{"class":265},[241,4145,3798],{"class":247},[241,4147,2925],{"class":265},[241,4149,2940],{"class":247},[241,4151,4152,4155,4157,4160,4162,4165,4167,4170,4173],{"class":243,"line":323},[241,4153,4154],{"class":247},"  criticMarkup: { export: ",[241,4156,432],{"class":329},[241,4158,4159],{"class":247},", import: ",[241,4161,432],{"class":329},[241,4163,4164],{"class":247},", includeResolved: ",[241,4166,1502],{"class":329},[241,4168,4169],{"class":247},", suggestions: ",[241,4171,4172],{"class":265},"'keep'",[241,4174,2940],{"class":247},[241,4176,4177],{"class":243,"line":354},[241,4178,903],{"class":247},[14,4180,4181,4184,4185,1201,4188,1201,4191,4194,4195,1238,4198,565,4201,37],{},[23,4182,4183],{},"suggestions"," 决定 ",[23,4186,4187],{},"{++新增++}",[23,4189,4190],{},"{--删除--}",[23,4192,4193],{},"{~~旧~>新~~}"," 修订标记在导入时原样保留、全部接受\n还是全部拒绝。评论落在代码里或跨行时改为写在旁边的单独批注，不会破坏原有语法。不用编辑器时，\n也可以直接调用 ",[23,4196,4197],{},"@quirekit\u002Fmsfe-comments\u002Fcritic-markup",[23,4199,4200],{},"exportCriticMarkup",[23,4202,4203],{},"importCriticMarkup",[10,4205,4207],{"id":4206},"ai-助手","AI 助手",[14,4209,4210,1238,4213,4216,4217,1201,4220,565,4222,4225,4226,4228,4229,4231,4232,4235,4236,4239,4240,4243],{},[23,4211,4212],{},"@quirekit\u002Fmd-editor-ai",[23,4214,4215],{},"createMdEditorAi()"," 返回 ",[23,4218,4219],{},"panel",[23,4221,2141],{},[23,4223,4224],{},"destroy()","：\n将前两项交给 ",[23,4227,252],{},"，在宿主页卸载时调用 ",[23,4230,4224],{},"。助手使用内置模型设置、文档工具与改动审批；\n",[23,4233,4234],{},"ownerDocument"," 提供页面文档，",[23,4237,4238],{},"storage"," 提供浏览器存储，",[23,4241,4242],{},"images"," 可复用宿主图床。",[14,4245,4246,4247,4250,4251,4254,4255,4258,4259,1201,4262,4265,4266,4269],{},"团队统一管理模型时，传入 ",[23,4248,4249],{},"connection: () => Promise\u003CQuireAiModelConnection>","，首次打开面板才加载\n授权模型目录。此时隐藏个人连接设置，也不会读取本地保存的 provider 配置；模型选择和审批偏好仍可保存。\n管理员页面可复用 ",[23,4252,4253],{},"createQuireAiProviderSettings({ persistence })"," 的表单，由 ",[23,4256,4257],{},"initialDraft","、\n异步 ",[23,4260,4261],{},"save(draft)",[23,4263,4264],{},"clear()"," 接入宿主服务端。保存失败保留草稿，不会写入浏览器凭据。\n服务端使用 ",[23,4267,4268],{},"@quirekit\u002Fai-assistant\u002Fsettings"," 验证配置；模型密钥、成员权限和网关鉴权由宿主负责。",[10,4271,4272],{"id":4272},"协作记录",[14,4274,4275,4276,4279,4280,4283],{},"协作记录回答“谁、何时、做了什么”。记录写在文档之外，格式遵循公共协议 ",[23,4277,4278],{},"@quirekit\u002Fedit-history","，\n存储由宿主实现 ",[23,4281,4282],{},"ActivityStore","；编辑器只负责采集和展示。安装两部分并传入同一个存储与文档标识：",[232,4285,4287],{"className":295,"code":4286,"language":297,"meta":237,"style":237},"import { MdActivity } from '@quirekit\u002Fmd-editor'\nimport { mdActivityPanel } from '@quirekit\u002Fmd-editor\u002Fvue'\n\nconst activity = MdActivity.configure({\n  store, documentId: 'doc-42', epoch: '1',\n  actor: { id: user.id, name: user.name, trust: 'local' },\n})\nconst panel = mdActivityPanel({ store, documentId: 'doc-42', local: true })\n",[23,4288,4289,4300,4311,4315,4332,4348,4358,4362],{"__ignoreMap":237},[241,4290,4291,4293,4296,4298],{"class":243,"line":244},[241,4292,305],{"class":304},[241,4294,4295],{"class":247}," { MdActivity } ",[241,4297,311],{"class":304},[241,4299,314],{"class":265},[241,4301,4302,4304,4307,4309],{"class":243,"line":285},[241,4303,305],{"class":304},[241,4305,4306],{"class":247}," { mdActivityPanel } ",[241,4308,311],{"class":304},[241,4310,1432],{"class":265},[241,4312,4313],{"class":243,"line":323},[241,4314,320],{"emptyLinePlaceholder":319},[241,4316,4317,4319,4322,4324,4327,4330],{"class":243,"line":354},[241,4318,326],{"class":304},[241,4320,4321],{"class":329}," activity",[241,4323,333],{"class":304},[241,4325,4326],{"class":247}," MdActivity.",[241,4328,4329],{"class":258},"configure",[241,4331,849],{"class":247},[241,4333,4334,4337,4340,4343,4346],{"class":243,"line":376},[241,4335,4336],{"class":247},"  store, documentId: ",[241,4338,4339],{"class":265},"'doc-42'",[241,4341,4342],{"class":247},", epoch: ",[241,4344,4345],{"class":265},"'1'",[241,4347,812],{"class":247},[241,4349,4350,4353,4356],{"class":243,"line":397},[241,4351,4352],{"class":247},"  actor: { id: user.id, name: user.name, trust: ",[241,4354,4355],{"class":265},"'local'",[241,4357,2940],{"class":247},[241,4359,4360],{"class":243,"line":418},[241,4361,903],{"class":247},[241,4363,4364,4366,4369,4371,4374,4377,4379,4382,4384],{"class":243,"line":708},[241,4365,326],{"class":304},[241,4367,4368],{"class":329}," panel",[241,4370,333],{"class":304},[241,4372,4373],{"class":258}," mdActivityPanel",[241,4375,4376],{"class":247},"({ store, documentId: ",[241,4378,4339],{"class":265},[241,4380,4381],{"class":247},", local: ",[241,4383,432],{"class":329},[241,4385,351],{"class":247},[232,4387,4389],{"className":234,"code":4388,"language":236,"meta":237,"style":237},"\u003CMdEditor :markdown=\"markdown\" :extensions=\"[activity]\" :panels=\"[panel]\" \u002F>\n",[23,4390,4391],{"__ignoreMap":237},[241,4392,4393,4395,4397,4399,4401,4403,4405,4407,4409,4411,4413,4415,4417,4420,4422,4424,4427,4429,4431,4434,4436],{"class":243,"line":244},[241,4394,248],{"class":247},[241,4396,252],{"class":251},[241,4398,255],{"class":247},[241,4400,259],{"class":258},[241,4402,262],{"class":247},[241,4404,266],{"class":265},[241,4406,259],{"class":247},[241,4408,266],{"class":265},[241,4410,255],{"class":247},[241,4412,2141],{"class":258},[241,4414,262],{"class":247},[241,4416,266],{"class":265},[241,4418,4419],{"class":247},"[activity]",[241,4421,266],{"class":265},[241,4423,255],{"class":247},[241,4425,4426],{"class":258},"panels",[241,4428,262],{"class":247},[241,4430,266],{"class":265},[241,4432,4433],{"class":247},"[panel]",[241,4435,266],{"class":265},[241,4437,282],{"class":247},[2720,4439,4440,4443,4446],{},[2723,4441,4442],{},"同一块里的连续输入在停顿约 3 秒、换块或失焦时合并为一条；粘贴、剪切、撤销、插入块、移动 \u002F 删除块、\n转换格式、修改高亮块颜色与图标各记一条。远端和宿主写入的变化不由本端记录。",[2723,4444,4445],{},"面板按日期与相近时间分组，可展开明细、查看改动前后的 Markdown 片段、按成员或时间筛选、隐藏系统通知。\n点击条目定位到当前原文：位置变了会定位到相同内容并标明“原位置已变化”，原内容已删除或无法确定\n（例如同一段文字出现多处）时只提示，不会跳到别处；评论记录定位到评论当前标注的文字。",[2723,4447,4448,4449,2444,4452,4455,4456,4459,4460,4463,4464,4467,4468,4471],{},"单人使用时 ",[23,4450,4451],{},"trust",[23,4453,4454],{},"local","，",[23,4457,4458],{},"local: true"," 让面板标明“仅保存在本机”。多人可信记录需要服务端确认后写入，\n通用协同采集适配器尚未提供。宿主也可在服务端确认正文更新后写入公共协议记录，前端只安装\n",[23,4461,4462],{},"mdActivityPanel"," 读取，避免与本地采集重复。",[23,4465,4466],{},"@quirekit\u002Fedit-history\u002Fmemory"," 的内存实现只用于示例和测试，刷新即丢失；自建存储可用\n",[23,4469,4470],{},"@quirekit\u002Fedit-history\u002Fconformance"," 的规则逐条验证。",[459,4473,4474],{"id":4474},"多人协同时",[14,4476,4477],{},"协同时由服务端确认后写入，客户端不再写存储。服务端安装 Hocuspocus 扩展，作者取自鉴权结果：",[232,4479,4481],{"className":295,"code":4480,"language":297,"meta":237,"style":237},"import { createMsfeActivityExtension } from '@quirekit\u002Fmsfe-collaboration-hocuspocus\u002Fserver'\n\nconst activity = createMsfeActivityExtension({\n  resolveActor: context => ({ id: context.user.id, name: context.user.name, trust: 'verified' }),\n  resolveDocument: room => ({ documentId: room, epoch: '1' }),\n})\n\u002F\u002F 在自己的存档事务里写入：activity.takeActivity(room)；失败时 activity.restoreActivity(room, events)\n",[23,4482,4483,4495,4499,4512,4533,4552,4556],{"__ignoreMap":237},[241,4484,4485,4487,4490,4492],{"class":243,"line":244},[241,4486,305],{"class":304},[241,4488,4489],{"class":247}," { createMsfeActivityExtension } ",[241,4491,311],{"class":304},[241,4493,4494],{"class":265}," '@quirekit\u002Fmsfe-collaboration-hocuspocus\u002Fserver'\n",[241,4496,4497],{"class":243,"line":285},[241,4498,320],{"emptyLinePlaceholder":319},[241,4500,4501,4503,4505,4507,4510],{"class":243,"line":323},[241,4502,326],{"class":304},[241,4504,4321],{"class":329},[241,4506,333],{"class":304},[241,4508,4509],{"class":258}," createMsfeActivityExtension",[241,4511,849],{"class":247},[241,4513,4514,4517,4519,4522,4524,4527,4530],{"class":243,"line":354},[241,4515,4516],{"class":258},"  resolveActor",[241,4518,3331],{"class":247},[241,4520,4521],{"class":701},"context",[241,4523,2636],{"class":304},[241,4525,4526],{"class":247}," ({ id: context.user.id, name: context.user.name, trust: ",[241,4528,4529],{"class":265},"'verified'",[241,4531,4532],{"class":247}," }),\n",[241,4534,4535,4538,4540,4543,4545,4548,4550],{"class":243,"line":376},[241,4536,4537],{"class":258},"  resolveDocument",[241,4539,3331],{"class":247},[241,4541,4542],{"class":701},"room",[241,4544,2636],{"class":304},[241,4546,4547],{"class":247}," ({ documentId: room, epoch: ",[241,4549,4345],{"class":265},[241,4551,4532],{"class":247},[241,4553,4554],{"class":243,"line":397},[241,4555,903],{"class":247},[241,4557,4558],{"class":243,"line":418},[241,4559,4560],{"class":288},"\u002F\u002F 在自己的存档事务里写入：activity.takeActivity(room)；失败时 activity.restoreActivity(room, events)\n",[14,4562,4563],{},"客户端只为插入块、粘贴、撤销等带标签的操作发送提示，连续输入由服务端从收到的改动中合并：",[232,4565,4567],{"className":295,"code":4566,"language":297,"meta":237,"style":237},"import { encodeActivityHint } from '@quirekit\u002Fedit-history\u002Fwriter'\nimport { relativeActivityResolver } from '@quirekit\u002Fmsfe-collaboration'\n\nMdActivity.configure({ documentId, epoch, actor: null, store: null,\n  hints: hint => session.sendStateless(encodeActivityHint(hint)) })\nmdActivityPanel({ store, documentId, resolveTarget: relativeActivityResolver(session.document) })\n",[23,4568,4569,4581,4593,4597,4616,4642],{"__ignoreMap":237},[241,4570,4571,4573,4576,4578],{"class":243,"line":244},[241,4572,305],{"class":304},[241,4574,4575],{"class":247}," { encodeActivityHint } ",[241,4577,311],{"class":304},[241,4579,4580],{"class":265}," '@quirekit\u002Fedit-history\u002Fwriter'\n",[241,4582,4583,4585,4588,4590],{"class":243,"line":285},[241,4584,305],{"class":304},[241,4586,4587],{"class":247}," { relativeActivityResolver } ",[241,4589,311],{"class":304},[241,4591,4592],{"class":265}," '@quirekit\u002Fmsfe-collaboration'\n",[241,4594,4595],{"class":243,"line":323},[241,4596,320],{"emptyLinePlaceholder":319},[241,4598,4599,4602,4604,4607,4609,4612,4614],{"class":243,"line":354},[241,4600,4601],{"class":247},"MdActivity.",[241,4603,4329],{"class":258},[241,4605,4606],{"class":247},"({ documentId, epoch, actor: ",[241,4608,981],{"class":329},[241,4610,4611],{"class":247},", store: ",[241,4613,981],{"class":329},[241,4615,812],{"class":247},[241,4617,4618,4621,4623,4626,4628,4631,4634,4636,4639],{"class":243,"line":376},[241,4619,4620],{"class":258},"  hints",[241,4622,3331],{"class":247},[241,4624,4625],{"class":701},"hint",[241,4627,2636],{"class":304},[241,4629,4630],{"class":247}," session.",[241,4632,4633],{"class":258},"sendStateless",[241,4635,406],{"class":247},[241,4637,4638],{"class":258},"encodeActivityHint",[241,4640,4641],{"class":247},"(hint)) })\n",[241,4643,4644,4646,4649,4652],{"class":243,"line":397},[241,4645,4462],{"class":258},[241,4647,4648],{"class":247},"({ store, documentId, resolveTarget: ",[241,4650,4651],{"class":258},"relativeActivityResolver",[241,4653,4654],{"class":247},"(session.document) })\n",[14,4656,4657,4658,4661,4662,4665],{},"提示与实际改动对不上时，服务端把这次改动记为“编辑了正文”。断线后很快重连仍算同一次协作，不重复记“加入协作”。\n评论房间传入 ",[23,4659,4660],{},"commentsRoom: room => room.endsWith(':comments')"," 后，添加、回复、解决、重新打开与删除评论也会记录，\n作者同样取自连接身份；评论房间的记录在保存该房间时用 ",[23,4663,4664],{},"takeActivity(评论房间名)"," 取出。",[14,4667,4668,4669,4672,4673,4676,4677,4680,4681,4684,4685,4688],{},"服务端记录要有上限，否则会一直增长。协议的保留策略可以同时限制条数与时间：",[23,4670,4671],{},"maxEvents"," 只保留每篇文档最近的若干条，\n",[23,4674,4675],{},"fullDays"," 之后删除改动片段只留摘要，",[23,4678,4679],{},"summaryDays"," 之后整条删除。参考内存实现\n",[23,4682,4683],{},"createMemoryActivityStore({ retention })"," 在每次写入后执行；数据库存储可在写入事务后或定时任务里执行同样的清理，\n例如按序号删除超出条数的旧记录。历史版本另外按 ",[23,4686,4687],{},"versionThinning"," 稀疏化，命名版本不受影响。",[459,4690,4691],{"id":4691},"历史版本",[14,4693,4694,4695,4698,4699,4702],{},"版本是整篇 Markdown 的快照，存储由宿主实现 ",[23,4696,4697],{},"VersionStore","。把同一个版本存储同时交给 ",[23,4700,4701],{},"MdActivity"," 和面板，\n面板会多出“版本”页：",[232,4704,4706],{"className":295,"code":4705,"language":297,"meta":237,"style":237},"const activity = MdActivity.configure({ store, versions, documentId: 'doc-42', epoch: '1', actor })\nconst panel = mdActivityPanel({ store, versions, documentId: 'doc-42', local: true })\n",[23,4707,4708,4732],{"__ignoreMap":237},[241,4709,4710,4712,4714,4716,4718,4720,4723,4725,4727,4729],{"class":243,"line":244},[241,4711,326],{"class":304},[241,4713,4321],{"class":329},[241,4715,333],{"class":304},[241,4717,4326],{"class":247},[241,4719,4329],{"class":258},[241,4721,4722],{"class":247},"({ store, versions, documentId: ",[241,4724,4339],{"class":265},[241,4726,4342],{"class":247},[241,4728,4345],{"class":265},[241,4730,4731],{"class":247},", actor })\n",[241,4733,4734,4736,4738,4740,4742,4744,4746,4748,4750],{"class":243,"line":285},[241,4735,326],{"class":304},[241,4737,4368],{"class":329},[241,4739,333],{"class":304},[241,4741,4373],{"class":258},[241,4743,4722],{"class":247},[241,4745,4339],{"class":265},[241,4747,4381],{"class":247},[241,4749,432],{"class":329},[241,4751,351],{"class":247},[2720,4753,4754,4761,4764,4767],{},[2723,4755,4756,4757,4760],{},"可以输入名称保存命名版本，命名版本永久保留；宿主在自己的存档时机调用 ",[23,4758,4759],{},"getMdVersions(editor).save()","\n生成自动版本，内容与上一个版本相同时复用它，不会重复存储。",[2723,4762,4763],{},"点击版本打开只读预览，可切换到“与当前对比”查看逐行差异，也可以复制全文后手动粘回需要的部分。",[2723,4765,4766],{},"“恢复此版本”先把当前内容存为一个版本，再只改写不同的行，作为一次可撤销的编辑并记为“恢复了版本”；\n没改动的行上的评论和协同锚点不受影响。只读时不能恢复。",[2723,4768,4769],{},"协同时，服务端在存档时生成自动版本，命名版本由宿主的版本接口在服务端写入“保存了版本”记录，\n作者取自鉴权身份；恢复的记录照常由提示配对确认，客户端不直接写记录。暂不提供撤回某一次编辑。",[10,4771,4772],{"id":4772},"使用共享公式编辑器",[14,4774,4775,4776,1238,4779,4782,4783,4786],{},"从“插入”选择行内公式或块级公式；双击已有块级公式（或选中后点操作栏“编辑”）、点击行内公式都会打开同一个面板。\n面板直接使用 ",[23,4777,4778],{},"@quirekit\u002Fmath-ui",[23,4780,4781],{},"MathAuthoringPanel","，沿用 ",[23,4784,4785],{},"@quirekit\u002Fmath"," 的\n公式文档、模板、结构化输入与可选 LaTeX 输入；产品不实现第二套公式 UI。\n显示公式的 KaTeX 资源与编辑面板按需加载。",[14,4788,4789,4790,4793],{},"公式草稿独立于正文。取消不会写入；确认只替换该公式的 LaTeX 内容，保留美元围栏和\n外围引用\u002F列表前缀，作为一次撤销操作。行内公式要求单行且不含外层 ",[23,4791,4792],{},"$","；多行内容使用\n块级公式。原位置在编辑期间被改写、文档被替换或切为只读时，提交被拒绝并保留草稿。",[14,4795,4796,4797,4800],{},"在使用 UnoCSS 的工作区宿主中，除产品和 UI 源码外，也将公共 ",[23,4798,4799],{},"math-ui"," 源码纳入扫描。\n它使用既有公共组件类名。使用预编译样式的宿主应确保这些公共组件样式已经包含。",[14,4802,4803,4804,4807,4808,4810,4811,1201,4813,1150,4816,4819,4820,4822,4823,4825,4826,4829,4830,4833,4834,4837,4838,4841,4842,37],{},"需要自建公式宿主时，使用 MSFE 的 ",[23,4805,4806],{},"Math.configure({ edit })","，再将它交给\n",[23,4809,2676],{},"。回调给出 ",[23,4812,3894],{},[23,4814,4815],{},"range",[23,4817,4818],{},"kind","；返回 ",[23,4821,432],{}," 表示已接管编辑。\n不要在异步面板中长期保存裸 ",[23,4824,4815],{},"：先 ",[23,4827,4828],{},"captureAnchor(range)","，确认时取得\n",[23,4831,4832],{},"anchor.target()"," 并执行 ",[23,4835,4836],{},"editor.run(replaceMdPreview(latex), target)","，结束后释放锚点。\n这也适用于 ",[23,4839,4840],{},"Mermaid.configure({ edit })","。完整组件生命周期见 ",[17,4843,4845],{"href":4844},"\u002Fapi\u002Frendering","呈现 API",[10,4847,4849],{"id":4848},"图表链接与图片的修改","图表、链接与图片的修改",[14,4851,4852],{},"“插入 → 文本绘图”打开 Classic、Block、MSFE 共用的源码工作区，支持 Mermaid、PlantUML、Graphviz\u002FDOT。语言切换保留各自草稿，模板须显式应用；预览成功后可保存或下载 SVG\u002FPNG，失败时保留草稿供修改，取消不改正文。标准 Markdown 围栏不保存独立图题，因此该宿主的工作区不显示标题输入。",[14,4854,4855,4856,1201,4858,1208,4861,4864,4865,453,4868,4871,4872,4875,4876,4879,4880,37],{},"保存生成普通的 ",[23,4857,2106],{},[23,4859,4860],{},"plantuml",[23,4862,4863],{},"dot"," 围栏，也能重开 ",[23,4866,4867],{},"puml",[23,4869,4870],{},"graphviz"," 别名。编辑保留原围栏风格及外围块前缀，必要时增长分隔符防止源码关闭外层围栏；切换语言才更新语言名。",[23,4873,4874],{},"extras.mermaid: false"," 关闭 Mermaid；",[23,4877,4878],{},"extras.textDiagram: false"," 同时关闭 PlantUML\u002FDOT。未安装的语言保留为普通代码。引擎本地运行，外部 include、可选 PlantUML 图库与 D2 未启用，详见",[17,4881,4882],{"href":2695},"文本绘图接入",[14,4884,4885],{},"把光标放在链接中再点工具栏“链接”可编辑该链接。点击图片会整体选中并浮出操作栏，可编辑、预览、复制、剪切或删除；双击图片直接预览。\n若未改变显示文字，链接内部的粗体等原始写法会保留。修改引用式链接的单个使用位置\n会将该位置改为行内链接，共享引用定义和其他使用位置不变。危险协议被拒绝。",[14,4887,4888,4889,4892,4893,4896,4897,37],{},"图片地址保存在 Markdown；私有附件、上传接口或对象 URL 的获取应由宿主提供。\n可以用 ",[23,4890,4891],{},"Image.configure({ resolve })"," 保留图片来源合同，再覆盖 ",[23,4894,4895],{},"addNodeView"," 接入\n自己的公共图片组件。解析器返回资源的释放仍由 MSFE 节点生命周期负责，详见\n",[17,4898,4900],{"href":4899},"\u002Fextensions\u002Fresources","图片与资源生命周期",[14,4902,3163,4903,4905,4906,4909],{},[23,4904,4242],{},"（",[23,4907,4908],{},"MdImageStorage","）后，宿主的存储负责新图片，正文只写返回的地址：",[232,4911,4913],{"className":295,"code":4912,"language":297,"meta":237,"style":237},"const images: MdImageStorage = {\n  upload: async (file, { signal, source, name }) => (await uploadToHost(file, { signal, name })).url,\n  \u002F\u002F 可选：导出 Word \u002F PDF \u002F OFD 时把地址取回为 PNG\u002FJPEG data URI。\n  resolve: async (url, signal) => await fetchAsDataUrl(url, signal),\n}\n",[23,4914,4915,4931,4974,4979,5007],{"__ignoreMap":237},[241,4916,4917,4919,4922,4924,4927,4929],{"class":243,"line":244},[241,4918,326],{"class":304},[241,4920,4921],{"class":329}," images",[241,4923,651],{"class":304},[241,4925,4926],{"class":258}," MdImageStorage",[241,4928,333],{"class":304},[241,4930,659],{"class":247},[241,4932,4933,4936,4938,4940,4942,4945,4948,4950,4952,4954,4956,4959,4961,4963,4965,4968,4971],{"class":243,"line":285},[241,4934,4935],{"class":258},"  upload",[241,4937,3331],{"class":247},[241,4939,3359],{"class":304},[241,4941,382],{"class":247},[241,4943,4944],{"class":701},"file",[241,4946,4947],{"class":247},", { ",[241,4949,3006],{"class":701},[241,4951,429],{"class":247},[241,4953,1857],{"class":701},[241,4955,429],{"class":247},[241,4957,4958],{"class":701},"name",[241,4960,3009],{"class":247},[241,4962,2614],{"class":304},[241,4964,382],{"class":247},[241,4966,4967],{"class":304},"await",[241,4969,4970],{"class":258}," uploadToHost",[241,4972,4973],{"class":247},"(file, { signal, name })).url,\n",[241,4975,4976],{"class":243,"line":323},[241,4977,4978],{"class":288},"  \u002F\u002F 可选：导出 Word \u002F PDF \u002F OFD 时把地址取回为 PNG\u002FJPEG data URI。\n",[241,4980,4981,4983,4985,4987,4989,4991,4993,4995,4997,4999,5001,5004],{"class":243,"line":354},[241,4982,695],{"class":258},[241,4984,3331],{"class":247},[241,4986,3359],{"class":304},[241,4988,382],{"class":247},[241,4990,3192],{"class":701},[241,4992,429],{"class":247},[241,4994,3006],{"class":701},[241,4996,435],{"class":247},[241,4998,2614],{"class":304},[241,5000,3025],{"class":304},[241,5002,5003],{"class":258}," fetchAsDataUrl",[241,5005,5006],{"class":247},"(url, signal),\n",[241,5008,5009],{"class":243,"line":376},[241,5010,830],{"class":247},[2720,5012,5013,5016,5023,5038,5047],{},[2723,5014,5015],{},"图片对话框出现「上传本地图片」，上传后填入地址与替代文字，仍由用户确认插入。",[2723,5017,5018,5019,5022],{},"粘贴截图或拖入图片文件时直接上传，完成后插入到粘贴或落下的位置；上传期间的编辑不影响落点。\n剪贴板同时带文字（如复制网页）时走普通粘贴。上传失败不写入任何内容，失败提示由宿主在 ",[23,5020,5021],{},"upload"," 中给出。",[2723,5024,5025,5026,5029,5030,5033,5034,5037],{},"流程图、思维导图、白板保存时，预览图以 ",[23,5027,5028],{},"source: 'diagram'"," 上传，嵌入块只写地址（",[23,5031,5032],{},"preview.url","）；\n上传失败时预览图仍内联保存，不影响这次编辑。导出 Word \u002F PDF \u002F OFD 时经 ",[23,5035,5036],{},"resolve"," 取回预览图。",[2723,5039,5040,453,5043,5046],{},[23,5041,5042],{},"docx.storeImage",[23,5044,5045],{},"docx.resolveImage"," 未设置时，Word 导入与导出使用同一个存储。",[2723,5048,5049,5050,5052],{},"只读编辑器不上传；未提供 ",[23,5051,4242],{}," 时保持原有行为（只能填写地址，图表预览图内联为 base64）。",[10,5054,5055],{"id":5055},"调用产品源码命令",[14,5057,5058],{},"工具栏也是公开命令的消费者。需要自定义入口时，使用同一个编辑实例与事务：",[232,5060,5062],{"className":295,"code":5061,"language":297,"meta":237,"style":237},"import {\n  editMdDestination, insertMdFootnote, replaceMdPreview,\n  toggleMdInlineCode, toggleMdList, insertMdDate, insertMdMention, insertMdText,\n} from '@quirekit\u002Fmd-editor'\n\neditor.run(toggleMdList('ordered')) \u002F\u002F 转换当前段落\u002F选区\neditor.run(toggleMdInlineCode())\neditor.run(insertMdDate('2026-10-16'))\neditor.run(insertMdText('🎯'))\neditor.run(insertMdMention({ id: 'lin', label: '小林', url: '\u002Fpeople\u002Flin' }))\neditor.run(insertMdFootnote('补充说明')) \u002F\u002F 引用与定义在同一事务中\neditor.run(editMdDestination(false, { url: '\u002Fdocs' })) \u002F\u002F false 为链接，true 为图片\n\neditor.commands.insertTableRow('before')\neditor.commands.insertTableColumn('after')\neditor.commands.setTableColumnAlignment('center')\neditor.commands.deleteTableRow()\n",[23,5063,5064,5070,5075,5080,5089,5093,5117,5131,5150,5168,5195,5216,5243,5247,5262,5276,5290],{"__ignoreMap":237},[241,5065,5066,5068],{"class":243,"line":244},[241,5067,305],{"class":304},[241,5069,659],{"class":247},[241,5071,5072],{"class":243,"line":285},[241,5073,5074],{"class":247},"  editMdDestination, insertMdFootnote, replaceMdPreview,\n",[241,5076,5077],{"class":243,"line":323},[241,5078,5079],{"class":247},"  toggleMdInlineCode, toggleMdList, insertMdDate, insertMdMention, insertMdText,\n",[241,5081,5082,5085,5087],{"class":243,"line":354},[241,5083,5084],{"class":247},"} ",[241,5086,311],{"class":304},[241,5088,314],{"class":265},[241,5090,5091],{"class":243,"line":376},[241,5092,320],{"emptyLinePlaceholder":319},[241,5094,5095,5098,5101,5103,5106,5108,5111,5114],{"class":243,"line":397},[241,5096,5097],{"class":247},"editor.",[241,5099,5100],{"class":258},"run",[241,5102,406],{"class":247},[241,5104,5105],{"class":258},"toggleMdList",[241,5107,406],{"class":247},[241,5109,5110],{"class":265},"'ordered'",[241,5112,5113],{"class":247},")) ",[241,5115,5116],{"class":288},"\u002F\u002F 转换当前段落\u002F选区\n",[241,5118,5119,5121,5123,5125,5128],{"class":243,"line":418},[241,5120,5097],{"class":247},[241,5122,5100],{"class":258},[241,5124,406],{"class":247},[241,5126,5127],{"class":258},"toggleMdInlineCode",[241,5129,5130],{"class":247},"())\n",[241,5132,5133,5135,5137,5139,5142,5144,5147],{"class":243,"line":708},[241,5134,5097],{"class":247},[241,5136,5100],{"class":258},[241,5138,406],{"class":247},[241,5140,5141],{"class":258},"insertMdDate",[241,5143,406],{"class":247},[241,5145,5146],{"class":265},"'2026-10-16'",[241,5148,5149],{"class":247},"))\n",[241,5151,5152,5154,5156,5158,5161,5163,5166],{"class":243,"line":743},[241,5153,5097],{"class":247},[241,5155,5100],{"class":258},[241,5157,406],{"class":247},[241,5159,5160],{"class":258},"insertMdText",[241,5162,406],{"class":247},[241,5164,5165],{"class":265},"'🎯'",[241,5167,5149],{"class":247},[241,5169,5170,5172,5174,5176,5179,5182,5184,5186,5188,5190,5192],{"class":243,"line":771},[241,5171,5097],{"class":247},[241,5173,5100],{"class":258},[241,5175,406],{"class":247},[241,5177,5178],{"class":258},"insertMdMention",[241,5180,5181],{"class":247},"({ id: ",[241,5183,2919],{"class":265},[241,5185,2922],{"class":247},[241,5187,2925],{"class":265},[241,5189,2928],{"class":247},[241,5191,2931],{"class":265},[241,5193,5194],{"class":247}," }))\n",[241,5196,5197,5199,5201,5203,5206,5208,5211,5213],{"class":243,"line":779},[241,5198,5097],{"class":247},[241,5200,5100],{"class":258},[241,5202,406],{"class":247},[241,5204,5205],{"class":258},"insertMdFootnote",[241,5207,406],{"class":247},[241,5209,5210],{"class":265},"'补充说明'",[241,5212,5113],{"class":247},[241,5214,5215],{"class":288},"\u002F\u002F 引用与定义在同一事务中\n",[241,5217,5218,5220,5222,5224,5227,5229,5231,5234,5237,5240],{"class":243,"line":785},[241,5219,5097],{"class":247},[241,5221,5100],{"class":258},[241,5223,406],{"class":247},[241,5225,5226],{"class":258},"editMdDestination",[241,5228,406],{"class":247},[241,5230,1502],{"class":329},[241,5232,5233],{"class":247},", { url: ",[241,5235,5236],{"class":265},"'\u002Fdocs'",[241,5238,5239],{"class":247}," })) ",[241,5241,5242],{"class":288},"\u002F\u002F false 为链接，true 为图片\n",[241,5244,5245],{"class":243,"line":791},[241,5246,320],{"emptyLinePlaceholder":319},[241,5248,5249,5252,5255,5257,5260],{"class":243,"line":815},[241,5250,5251],{"class":247},"editor.commands.",[241,5253,5254],{"class":258},"insertTableRow",[241,5256,406],{"class":247},[241,5258,5259],{"class":265},"'before'",[241,5261,373],{"class":247},[241,5263,5264,5266,5269,5271,5274],{"class":243,"line":821},[241,5265,5251],{"class":247},[241,5267,5268],{"class":258},"insertTableColumn",[241,5270,406],{"class":247},[241,5272,5273],{"class":265},"'after'",[241,5275,373],{"class":247},[241,5277,5278,5280,5283,5285,5288],{"class":243,"line":827},[241,5279,5251],{"class":247},[241,5281,5282],{"class":258},"setTableColumnAlignment",[241,5284,406],{"class":247},[241,5286,5287],{"class":265},"'center'",[241,5289,373],{"class":247},[241,5291,5292,5294,5297],{"class":243,"line":833},[241,5293,5251],{"class":247},[241,5295,5296],{"class":258},"deleteTableRow",[241,5298,1588],{"class":247},[14,5300,5301,5304,5305,5308],{},[23,5302,5303],{},"replaceMdPreview(body, language?)"," 要求目标是已识别的公式或文本绘图节点；可选语言用于切换现有绘图围栏的语法，它不负责创建新块。\n表格命令要求光标或选区属于同一个表格，列对齐只修改分隔行中对应的一个字段，保留\n其他单元格原文。检查 ",[23,5306,5307],{},"result.ok","；只读、过期目标、不适用的结构都会拒绝修改。",[14,5310,5311,5312,5315,5316,37],{},"不要直接调用命令规划器后写 DOM，也不要绕过 ",[23,5313,5314],{},"editor.run()"," 的目标、权限、历史检查。\n外部弹层应捕获目标并按生命周期释放，示例与 API 见 ",[17,5317,5319],{"href":5318},"\u002Fapi\u002Fcommands","命令与事务",[10,5321,5322],{"id":5322},"导入与导出",[14,5324,5325,5326,5329,5330,5332],{},"工具栏的上下双箭头图标打开 ",[4096,5327,5328],{},"导入 \u002F 导出"," 菜单，悬停可查看名称。\n菜单按方向分组：导入 Markdown、Word，导出 Markdown、Word。\n宿主通过 ",[23,5331,2009],{}," 安装的格式（如 PDF、OFD）各增加一项导出；未安装的格式不显示。\n各导入、导出项使用带 MD、W、PDF、OFD 标记的文件类型图标，禁用项的图标同步弱化。",[14,5334,5335,5336,5339],{},"“导入 Markdown”接受文本或最大 2 MB 的本地 ",[23,5337,5338],{},".md\u002F.markdown\u002F.txt"," 文件。文件通过\n公共 FileUpload 选择、校验与移除，先读入草稿，去除 UTF-8 BOM、统一 CRLF\u002FCR 为 LF。\n草稿使用公共 CodeBlock 预览并复制，也可点击“编辑内容”修改或粘贴 Markdown。",[14,5341,5342,5343,37],{},"点击“替换全文”使用草稿替换当前文档内容；点击“追加到末尾”保留原文并将草稿追加在末尾，\n不依赖当前选区。两种操作均可一次撤销；窗口打开期间原文被修改、文档被替换或变为只读时，\n保留草稿并禁止写回。若业务需要打开另一份文档并重置身份与历史，应由宿主处理保存后调用\n",[23,5344,1752],{},[14,5346,5347],{},"“导出 Markdown”读取当前权威原文，不从 Prose DOM 或 JSON 反向生成内容。保存到后端\n仍属于宿主职责；在只读状态下也可导出。",[10,5349,5351],{"id":5350},"word-导入与导出","Word 导入与导出",[14,5353,5354,5356,5357,5360,5361,5364,5365,5368],{},[4096,5355,5328],{}," 菜单中的 Word 操作由宿主安装的转换器提供。转换器 ",[23,5358,5359],{},"mdDocx()"," 位于商业包\n",[23,5362,5363],{},"@quirekit\u002Fmd-editor-export","，基础编辑器只定义 ",[23,5366,5367],{},"MdDocxConverter"," 合同；未安装时 Word 导入、导出项隐藏：",[232,5370,5372],{"className":295,"code":5371,"language":297,"meta":237,"style":237},"import { mdDocx } from '@quirekit\u002Fmd-editor-export'\n\nconst docx = { converter: mdDocx() }\n\u002F\u002F \u003CMdEditor :docx=\"docx\" \u002F>\n",[23,5373,5374,5386,5390,5408],{"__ignoreMap":237},[241,5375,5376,5378,5381,5383],{"class":243,"line":244},[241,5377,305],{"class":304},[241,5379,5380],{"class":247}," { mdDocx } ",[241,5382,311],{"class":304},[241,5384,5385],{"class":265}," '@quirekit\u002Fmd-editor-export'\n",[241,5387,5388],{"class":243,"line":285},[241,5389,320],{"emptyLinePlaceholder":319},[241,5391,5392,5394,5397,5399,5402,5405],{"class":243,"line":323},[241,5393,326],{"class":304},[241,5395,5396],{"class":329}," docx",[241,5398,333],{"class":304},[241,5400,5401],{"class":247}," { converter: ",[241,5403,5404],{"class":258},"mdDocx",[241,5406,5407],{"class":247},"() }\n",[241,5409,5410],{"class":243,"line":354},[241,5411,5412],{"class":288},"\u002F\u002F \u003CMdEditor :docx=\"docx\" \u002F>\n",[14,5414,5415,5416,5419],{},"转换运行时仅在用户操作后加载。\n导入接受最大 20 MB 的 ",[23,5417,5418],{},".docx"," 文件，先转换为 Markdown 草稿，通过 CodeBlock 预览并显示报告。\n它与 Markdown 导入共用“替换全文”“追加到末尾”两个按钮，均可一次撤销。\n取消、转换失败、导入期间原文变更或文档变为只读时不会写回。\n导出捕获打开窗口时的源码快照，转换完成后查看报告、下载 Word；只读状态仍可导出。",[14,5421,5422],{},"首版支持正文、1–6 级标题、粗体\u002F斜体\u002F删除线\u002F行内代码、链接、代码块语言、基础嵌套列表、\n带边框和表头底纹的简单表格、原生脚注、公式和 PNG\u002FJPEG 图片。代码块保留语言和换行，并用底纹、边框内距增加留白。\n任务状态变为可见勾选字符；默认容器和 Mermaid\n使用下面的节点转换扩展。导入时复杂表格、\n字体和版式会降级，批注、页眉页脚等省略并报告；导出可通过模板配置新的页眉页脚。\nWord 格式和原始 Markdown 写法不保证无损。\n可识别的修订删除文字被排除，插入文字保留；这不等同于完整的 Word“接受全部修订”。",[14,5424,5425,5426,5429],{},"行内和块级公式复用 ",[23,5427,5428],{},"@quirekit\u002Fmath-omml","，导出为可编辑的 Word 原生 OMML。重新导入时\n只接受通过严格结构核对的 LaTeX；不支持的源公式保留源码，无法反推的 Word 公式保留可读数学文字，\n均提供诊断。复杂公式属性、公式外围 Markdown 格式和脚注中的公式不保证保真。",[14,5431,5432],{},"脚注引用和正文写入真正的 Word 脚注，重新导入恢复为 Markdown 引用和定义，保留基础段落、\n粗体、斜体等文字格式。重复引用同一定义时，导出为独立 Word 脚注并报告；未引用定义保留\n为正文注释。注释内的链接保留文字和 URL，图片保留替代文字，复杂块保留源码并报告。\n导入 Word 尾注会转为 Markdown 脚注并报告位置差异。普通脚注标签会规范化，不保证原标签拼写。",[14,5434,5435,5436,5439],{},"转换也可以独立使用 ",[23,5437,5438],{},"@quirekit\u002Fmarkdown-docx","，无需挂载编辑器：",[232,5441,5443],{"className":295,"code":5442,"language":297,"meta":237,"style":237},"import { exportMarkdownDocx, importDocxMarkdown } from '@quirekit\u002Fmarkdown-docx'\n\nconst exported = await exportMarkdownDocx('# 文档\\n\\n**正文**')\n\u002F\u002F exported.data 是 Uint8Array；diagnostics 列出近似和丢弃。\nconst imported = await importDocxMarkdown(exported.data)\nconsole.log(imported.markdown, imported.diagnostics)\n",[23,5444,5445,5457,5461,5487,5492,5509],{"__ignoreMap":237},[241,5446,5447,5449,5452,5454],{"class":243,"line":244},[241,5448,305],{"class":304},[241,5450,5451],{"class":247}," { exportMarkdownDocx, importDocxMarkdown } ",[241,5453,311],{"class":304},[241,5455,5456],{"class":265}," '@quirekit\u002Fmarkdown-docx'\n",[241,5458,5459],{"class":243,"line":285},[241,5460,320],{"emptyLinePlaceholder":319},[241,5462,5463,5465,5468,5470,5472,5475,5477,5480,5482,5485],{"class":243,"line":323},[241,5464,326],{"class":304},[241,5466,5467],{"class":329}," exported",[241,5469,333],{"class":304},[241,5471,3025],{"class":304},[241,5473,5474],{"class":258}," exportMarkdownDocx",[241,5476,406],{"class":247},[241,5478,5479],{"class":265},"'# 文档",[241,5481,1519],{"class":329},[241,5483,5484],{"class":265},"**正文**'",[241,5486,373],{"class":247},[241,5488,5489],{"class":243,"line":354},[241,5490,5491],{"class":288},"\u002F\u002F exported.data 是 Uint8Array；diagnostics 列出近似和丢弃。\n",[241,5493,5494,5496,5499,5501,5503,5506],{"class":243,"line":376},[241,5495,326],{"class":304},[241,5497,5498],{"class":329}," imported",[241,5500,333],{"class":304},[241,5502,3025],{"class":304},[241,5504,5505],{"class":258}," importDocxMarkdown",[241,5507,5508],{"class":247},"(exported.data)\n",[241,5510,5511,5513,5515],{"class":243,"line":397},[241,5512,400],{"class":247},[241,5514,403],{"class":258},[241,5516,5517],{"class":247},"(imported.markdown, imported.diagnostics)\n",[14,5519,5520,565,5523,5526,5527,5530,5531,5534,5535,5538,5539,5542,5543,1238,5546,5549,5550,5553],{},[23,5521,5522],{},"markdownToLitAst()",[23,5524,5525],{},"litAstToMarkdown()"," 暴露同一中间转换阶段，方便宿主复用。\n前者的 ",[23,5528,5529],{},"authoredParts"," 承载样式及文档设置；自行编译时必须随 ",[23,5532,5533],{},"ast"," 一起传入\n",[23,5536,5537],{},"createDocxPackagePlan(ast, { authoredParts })","，确保样式与往返元数据采用同一份结果。\n",[23,5540,5541],{},"lossPolicy: 'strict'"," 会在发现损失时抛出带 ",[23,5544,5545],{},"diagnostics",[23,5547,5548],{},"MarkdownDocxLossError","；\n默认 ",[23,5551,5552],{},"best-effort"," 返回内容和报告。该适配包属于 QuireKit 商业组件，MSFE 的现有许可不变。",[14,5555,5556,5557,5560,5561,5564,5565,5568,5569,5571,5572,5574,5575,5578,5579,5582,5583,5586,5587,5590,5591,5594,5595,5598,5599,5602,5603,5606,5607,5610],{},"默认不请求外部图片：导出直接支持 PNG\u002FJPEG data URI，其它来源需要显式\n",[23,5558,5559],{},"resolveImage(source): Promise\u003Cstring | null>"," 返回这两种格式的 data URI。\n默认模板使用 A4 页面和四边 1 英寸页边距；图片保持原始比例、只缩小不放大，按正文、列表\n或嵌套单元格的实际可用范围限制尺寸。标题默认 1.1 倍行距、段后 4–6 磅，正文 1.15 倍行距、\n段后 6 磅，列表项段后 2 磅；自定义转换已提供的间距或样式引用优先。\n相邻表格和带框容器之间补充 8 磅的块间分隔，与已有段距共同决定可见留白；\n嵌套容器内的同级块遵循相同规则，重新导入时不会因此增加空白内容。\n这些外观现在可以通过导出模板配置；省略模板时保留上述默认值。\n导入默认保留 data URI；可通过\n",[23,5562,5563],{},"storeImage({ dataUrl, alt }): Promise\u003Cstring | null>"," 保存图片并返回持久 URL。\n保存失败保留内嵌数据并报告，临时 ",[23,5566,5567],{},"blob:"," 地址不会进入结果。将这些选项与转换器一起传给 ",[23,5570,252],{},"\n的 ",[23,5573,1992],{}," 属性，或传给独立转换函数。\n在编辑器之外转换（例如宿主把 Word 文件导入为新文档）时，调用\n",[23,5576,5577],{},"mdDocx().importDocx(data, { policy, features, signal })","，它使用与编辑器相同的默认转换（流程图、思维导图、\n白板、容器与代码绘图），导入导出才能往返一致。宿主自定义节点转换通过 ",[23,5580,5581],{},"mdDocx({ extensions })"," 安装。\nWord 原生图表在 Markdown 中没有对应语法，导入时按图表缓存数据渲染为静态 PNG（随后同样经\n",[23,5584,5585],{},"storeImage"," 保存），每张图表报告一条 ",[23,5588,5589],{},"chart-rasterized","；无法读取的图表族（散点、组合图、新式图表等）\n替换为 ",[23,5592,5593],{},"[替代文字]"," 占位并报告 ",[23,5596,5597],{},"chart-omitted","，不会让整个文件导入失败。宿主可通过\n",[23,5600,5601],{},"mdDocx({ renderChart })"," 改用自己的渲染器（签名为 ",[23,5604,5605],{},"(chart) => Promise\u003Cstring | null>","），",[23,5608,5609],{},"builtins: false"," 时不渲染图表。",[459,5612,5614],{"id":5613},"pdf-与-ofd-导出","PDF 与 OFD 导出",[14,5616,5617,5618,5620],{},"PDF 与 OFD 由可选商业包 ",[23,5619,5363],{}," 以导出插件的形式提供，基础编辑器不依赖它：",[232,5622,5624],{"className":295,"code":5623,"language":297,"meta":237,"style":237},"import { mdOfdExport, mdPdfExport } from '@quirekit\u002Fmd-editor-export'\n\nconst exporters = [mdPdfExport(), mdOfdExport()]\n\u002F\u002F \u003CMdEditor :exporters=\"exporters\" \u002F>\n",[23,5625,5626,5637,5641,5664],{"__ignoreMap":237},[241,5627,5628,5630,5633,5635],{"class":243,"line":244},[241,5629,305],{"class":304},[241,5631,5632],{"class":247}," { mdOfdExport, mdPdfExport } ",[241,5634,311],{"class":304},[241,5636,5385],{"class":265},[241,5638,5639],{"class":243,"line":285},[241,5640,320],{"emptyLinePlaceholder":319},[241,5642,5643,5645,5648,5650,5652,5655,5658,5661],{"class":243,"line":323},[241,5644,326],{"class":304},[241,5646,5647],{"class":329}," exporters",[241,5649,333],{"class":304},[241,5651,714],{"class":247},[241,5653,5654],{"class":258},"mdPdfExport",[241,5656,5657],{"class":247},"(), ",[241,5659,5660],{"class":258},"mdOfdExport",[241,5662,5663],{"class":247},"()]\n",[241,5665,5666],{"class":243,"line":354},[241,5667,5668],{"class":288},"\u002F\u002F \u003CMdEditor :exporters=\"exporters\" \u002F>\n",[14,5670,5671],{},"每个插件在“导出”菜单中增加一项。导出时捕获当前源码与所选模板，生成后显示页数和转换报告，再由用户\n下载；只读文档也可导出。导出窗口中的“更换”使用同一份源码重新生成，关闭或切换文档会废弃过期结果。\n转换器与字体在第一次导出时才加载。",[14,5673,5674,5675,5679],{},"两种格式都通过临时 Classic 文档完成真正分页，再分别编码原生 PDF 与原生 OFD（不经 PDF 中转）。\n正文是可选择的文字；表格、提示块、脚注、页眉页脚和动态页码使用现有排版能力，图表为图片。\n公式当前使用默认数学字体输出高清图形并报告这一降级，其文字不能单独选择。自定义节点复用\n",[17,5676,5678],{"href":5677},"\u002Fguide\u002Fexport-nodes","已有转换器","，不需要为每种格式再维护一套节点转换。",[14,5681,5682,5683,5686,5687,5690,5691,5694,5695,5697],{},"插件默认使用 ",[23,5684,5685],{},"@quirekit\u002Ffont-pack"," 的便携字体：同一套字节先安装为浏览器字体用于度量，再嵌入文件。\nOFD 没有标准 Courier，插件为常见代码字体嵌入 DejaVu Sans Mono 并报告替代，许可原文随 font-pack 发布。\nPDF 中代码字体没有对应资源时，先解析为等宽后备字体再排版并报告。宿主可通过 ",[23,5688,5689],{},"fonts"," 选项替换整套字体，\n通过 ",[23,5692,5693],{},"metadata"," 设置标题、作者等文档信息。缺字或资源失败均有诊断；",[23,5696,5541],{}," 拒绝有损输出。",[14,5699,5700,5701,1238,5704,5707,5708,1238,5711,5714,5715,1201,5717,1150,5720,5722,5723,5726,5727,5730,5731,5734,5735,5738,5739,37],{},"不需要编辑器界面时，可直接调用 ",[23,5702,5703],{},"@quirekit\u002Fmd-editor-export\u002Fpdf",[23,5705,5706],{},"exportMarkdownPdf(markdown, options)","\n或 ",[23,5709,5710],{},"\u002Fofd",[23,5712,5713],{},"exportMarkdownOfd","，返回 ",[23,5716,3973],{},[23,5718,5719],{},"pageCount",[23,5721,5545],{},"。这时需显式提供可嵌入字体；\n无浏览器环境必须提供 ",[23,5724,5725],{},"textMeasurer","，包含公式时还需 ",[23,5728,5729],{},"rasterizeFormula","。OFD 的 ",[23,5732,5733],{},"fontEmbedding","\n默认 ",[23,5736,5737],{},"subset","，可设为 ",[23,5740,5741],{},"full",[14,5743,5744],{},"两种格式都不承诺与 Word 在不同字体环境下逐像素一致，也不保留可往返编辑的 Markdown 元数据，不提供\nMarkdown 导入。PDF\u002FA、Tagged PDF 与大文档后台线程属于后续能力。",[459,5746,5747],{"id":5747},"导出模板",[14,5749,5750,5753],{},[23,5751,5752],{},"@quirekit\u002Fexport-template"," 提供格式中立的配置、默认模板与严格校验，使用 MIT 许可。\n模板只用于导出，不更改 Markdown 内容、选区或撤销历史，也不影响 Word 导入。\n页面使用 mm；字号、段距、边框和内距使用 pt；行距明确区分倍数与固定值。下面是公开的合成配置示例：",[232,5755,5757],{"className":295,"code":5756,"language":297,"meta":237,"style":237},"import { resolveExportTemplate } from '@quirekit\u002Fexport-template'\nimport { exportMarkdownDocx } from '@quirekit\u002Fmarkdown-docx'\n\nconst template = resolveExportTemplate({\n  fonts: { body: { latin: 'Arial', eastAsia: '微软雅黑' } },\n  body: { after: 5 },\n  headings: { h1: { border: { color: '287B69', width: 0.75 }, borderSpace: 4 } },\n  footer: { enabled: true, center: '{page} \u002F {pages}' },\n})\nconst file = await exportMarkdownDocx(markdown, { template, documentTitle: '项目记录' })\n",[23,5758,5759,5771,5782,5786,5800,5817,5827,5849,5864,5868],{"__ignoreMap":237},[241,5760,5761,5763,5766,5768],{"class":243,"line":244},[241,5762,305],{"class":304},[241,5764,5765],{"class":247}," { resolveExportTemplate } ",[241,5767,311],{"class":304},[241,5769,5770],{"class":265}," '@quirekit\u002Fexport-template'\n",[241,5772,5773,5775,5778,5780],{"class":243,"line":285},[241,5774,305],{"class":304},[241,5776,5777],{"class":247}," { exportMarkdownDocx } ",[241,5779,311],{"class":304},[241,5781,5456],{"class":265},[241,5783,5784],{"class":243,"line":323},[241,5785,320],{"emptyLinePlaceholder":319},[241,5787,5788,5790,5793,5795,5798],{"class":243,"line":354},[241,5789,326],{"class":304},[241,5791,5792],{"class":329}," template",[241,5794,333],{"class":304},[241,5796,5797],{"class":258}," resolveExportTemplate",[241,5799,849],{"class":247},[241,5801,5802,5805,5808,5811,5814],{"class":243,"line":376},[241,5803,5804],{"class":247},"  fonts: { body: { latin: ",[241,5806,5807],{"class":265},"'Arial'",[241,5809,5810],{"class":247},", eastAsia: ",[241,5812,5813],{"class":265},"'微软雅黑'",[241,5815,5816],{"class":247}," } },\n",[241,5818,5819,5822,5825],{"class":243,"line":397},[241,5820,5821],{"class":247},"  body: { after: ",[241,5823,5824],{"class":329},"5",[241,5826,2940],{"class":247},[241,5828,5829,5832,5835,5838,5841,5844,5847],{"class":243,"line":418},[241,5830,5831],{"class":247},"  headings: { h1: { border: { color: ",[241,5833,5834],{"class":265},"'287B69'",[241,5836,5837],{"class":247},", width: ",[241,5839,5840],{"class":329},"0.75",[241,5842,5843],{"class":247}," }, borderSpace: ",[241,5845,5846],{"class":329},"4",[241,5848,5816],{"class":247},[241,5850,5851,5854,5856,5859,5862],{"class":243,"line":708},[241,5852,5853],{"class":247},"  footer: { enabled: ",[241,5855,432],{"class":329},[241,5857,5858],{"class":247},", center: ",[241,5860,5861],{"class":265},"'{page} \u002F {pages}'",[241,5863,2940],{"class":247},[241,5865,5866],{"class":243,"line":743},[241,5867,903],{"class":247},[241,5869,5870,5872,5875,5877,5879,5881,5884,5887],{"class":243,"line":771},[241,5871,326],{"class":304},[241,5873,5874],{"class":329}," file",[241,5876,333],{"class":304},[241,5878,3025],{"class":304},[241,5880,5474],{"class":258},[241,5882,5883],{"class":247},"(markdown, { template, documentTitle: ",[241,5885,5886],{"class":265},"'项目记录'",[241,5888,351],{"class":247},[14,5890,5891,5892,5895,5896,1201,5899,1201,5902,5905],{},"可以设置正文、H1–H6、列表、引用、代码、表格、容器、脚注、公式及图片的外观。\n角色字体提供西文、东亚、复杂文字槽位；留空为主题字体。",[23,5893,5894],{},"fonts.math.latin"," 对应 Word 的\n默认数学字体，原生公式仍可编辑。模板不嵌入字体，不保证所有设备分页一致。\n单节默认页眉页脚支持左中右内容及 ",[23,5897,5898],{},"{title}",[23,5900,5901],{},"{page}",[23,5903,5904],{},"{pages}","；后两者为 Word 原生动态域，\n需阅读器更新后显示实际页码，过长单行文字会缩略并报告。快速样式示意不是 Word 分页预览。",[14,5907,5908,5910,5911,5914],{},[23,5909,252],{}," 可以直接接收 ",[23,5912,5913],{},":docx=\"{ converter, template }\"","，也可以由宿主接入模板库：",[2720,5916,5917,5927,5937],{},[2723,5918,5919,5922,5923,5926],{},[23,5920,5921],{},"templates","：实现 ",[23,5924,5925],{},"ExportTemplateProvider"," 的目录、精确版本读取与可选保存\u002F删除服务。",[2723,5928,5929,5932,5933,5936],{},[23,5930,5931],{},"v-model:exportStyle","：当前文档的 ",[23,5934,5935],{},"{ id, revision }","，由宿主与文档设置一起持久化。",[2723,5938,5939,5942,5943,5946,5947,37],{},[23,5940,5941],{},"#export-templates=\"{ provider, selected, choose, close }\"","：安装宿主选择器；确认时调用 ",[23,5944,5945],{},"choose","，取消调用 ",[23,5948,5949],{},"close",[14,5951,5952,5953,5956],{},"同时提供 provider 与 slot 后，图标菜单显示“导出样式”；Word 和已安装的 PDF\u002FOFD 导出自动沿用选择。\n导出窗口中的“更换”保持本次源码快照并重新生成文件，关闭或切换文档废弃过期结果。\n无持久化宿主时只记住当前实例；已有版本缺失或无权限会阻止导出，要求重新选择，不静默回退。\n只读文档仍可选择样式和导出。扩展通过 ",[23,5954,5955],{},"markdownExportTemplateService"," 读取同一解析配置，\n自定义转换明确提供的直接格式和样式引用仍然优先。",[14,5958,5959,5960,5963],{},"现有 ",[17,5961,5962],{"href":19},"MD Editor 示例"," 已接入模板库；中英文示例分别保存导出样式。文档站宿主\n采用私有商业授权，基础编辑器和导出协议的授权保持不变。",[14,5965,5966,5967,5970],{},"第一方 ",[23,5968,5969],{},"@quirekit\u002Fexport-template-library"," 组件和官方设计包独立采用商业授权，支持浏览、\n新建、复制编辑、保存版本与显式本地存储，由商业宿主按上述接缝装配。组件授权与内容包授权分别解析，\n支付、账号和生产授权校验由宿主提供；基础 Markdown\u002FWord 导出不依赖商业包。上传 DOCX\u002FDOTX\n作为模板仍属于后续能力。",[14,5972,5973],{},"“模板管理”中，“新增模板”从默认配置开始；“基于当前模板新建”复制当前浏览的模板样式。\n卡片通过主色边界、轻底色和勾选标记显示选择，点击右上角编辑按钮可修改该模板。\n内置模板只读，编辑入口会创建副本并保留来源；个人模板编辑后保存为同一模板的新版本。\n“当前使用”标记对应文档已经采用的版本；浏览、编辑和单独保存不会应用，点击“使用此模板”或“保存并使用”才更新文档的导出设置。",[14,5975,5976],{},"复制或编辑模板时，窗口尺寸保持稳定，切换分类后仅更新可滚动的字段区域；模板名称、\n分类栏和底部保存按钮始终可见。窄屏使用紧凑预览，空间很低时优先显示编辑字段。\n字段按外观、文字、段落等用途分组，数值旁直接显示单位。点击颜色块可选择预设色或打开\n“更多颜色”精确调整；文字颜色可恢复“自动”，底色可设为“无填充”。加粗、斜体和对齐使用格式按钮。",[459,5978,5979],{"id":5979},"自定义节点转换与往返",[14,5981,5982,5983,453,5985,453,5987,2214],{},"MD Editor 默认注册容器与三种文本绘图转换，开关跟随 ",[23,5984,2080],{},[23,5986,2679],{},[23,5988,2682],{},[43,5990,5991,6004],{},[46,5992,5993],{},[49,5994,5995,5998,6001],{},[52,5996,5997],{},"节点",[52,5999,6000],{},"Word 中的内容",[52,6002,6003],{},"再导入",[59,6005,6006,6017,6028,6038],{},[49,6007,6008,6011,6014],{},[64,6009,6010],{},"单段容器",[64,6012,6013],{},"段落底纹、四边框与边框内距",[64,6015,6016],{},"校验通过时恢复容器源码",[49,6018,6019,6022,6025],{},[64,6020,6021],{},"含标题、列表或嵌套块的容器",[64,6023,6024],{},"单格表格底纹、边框和单元格内边距，正文仍可编辑",[64,6026,6027],{},"校验通过时恢复完整容器",[49,6029,6030,6032,6035],{},[64,6031,2704],{},[64,6033,6034],{},"表情作为首行，无边框底纹，可选字体颜色",[64,6036,6037],{},"校验通过时恢复高亮块源码",[49,6039,6040,6043,6046],{},[64,6041,6042],{},"Mermaid、PlantUML、Graphviz\u002FDOT",[64,6044,6045],{},"从源码离屏渲染的 PNG 图片",[64,6047,6048],{},"校验通过时恢复原围栏与源码",[14,6050,6051],{},"圆角和折叠交互会降级并报告。默认容器解析支持根级及容器正文中的已关闭命名围栏；\n列表、引用内部的容器需要宿主扩展解析。图形渲染失败保留代码，不依赖当前视口中是否挂载预览。",[14,6053,6054],{},"源码元数据存入标准 Custom XML part，通过内容控件关联。可见内容、图片字节、脚注\u002F尾注或样式\u002F编号\n发生变化后，导入保留当前 Word 内容；不会用过期源码覆盖 Word 修改。元数据丢失、标识重复、\n版本不兼容或扩展未安装时也保留原生内容或图片。这里已验证 QuireKit 往返，尚未承诺\nWord\u002FWPS 等软件再次保存后必定保留元数据。",[14,6056,6057,6060,6061,6063,6064,6066],{},[23,6058,6059],{},"\u003CMdEditor :docx=\"{ converter, preserveMetadata: false }\" \u002F>"," 可导出纯原生内容和图片；\n",[23,6062,5609],{}," 关闭默认节点转换，但保留宿主经 ",[23,6065,5581],{}," 安装的转换。基础 MSFE 包没有 DOCX 依赖。",[14,6068,6069],{},"独立适配器按需注册同一套功能。图片渲染由宿主明确提供，不隐式抓取资源：",[232,6071,6073],{"className":295,"code":6072,"language":297,"meta":237,"style":237},"import {\n  createMarkdownDocxContainerExtension,\n  createMarkdownDocxCodeImageExtension,\n  exportMarkdownDocx,\n} from '@quirekit\u002Fmarkdown-docx'\n\n\u002F\u002F renderDiagram 是宿主提供的异步函数，返回 PNG\u002FJPEG data URI 或 null。\nconst extensions = [\n  createMarkdownDocxContainerExtension({ names: ['note', 'warning', 'decision'] }),\n  createMarkdownDocxCodeImageExtension({ languages: ['mermaid'], render: renderDiagram }),\n]\nconst result = await exportMarkdownDocx(markdown, { extensions })\n\u002F\u002F importDocxMarkdown 使用同一 extensions；仅导入时可以省略 render。\n",[23,6074,6075,6081,6086,6091,6096,6104,6108,6113,6124,6145,6159,6163,6178],{"__ignoreMap":237},[241,6076,6077,6079],{"class":243,"line":244},[241,6078,305],{"class":304},[241,6080,659],{"class":247},[241,6082,6083],{"class":243,"line":285},[241,6084,6085],{"class":247},"  createMarkdownDocxContainerExtension,\n",[241,6087,6088],{"class":243,"line":323},[241,6089,6090],{"class":247},"  createMarkdownDocxCodeImageExtension,\n",[241,6092,6093],{"class":243,"line":354},[241,6094,6095],{"class":247},"  exportMarkdownDocx,\n",[241,6097,6098,6100,6102],{"class":243,"line":376},[241,6099,5084],{"class":247},[241,6101,311],{"class":304},[241,6103,5456],{"class":265},[241,6105,6106],{"class":243,"line":397},[241,6107,320],{"emptyLinePlaceholder":319},[241,6109,6110],{"class":243,"line":418},[241,6111,6112],{"class":288},"\u002F\u002F renderDiagram 是宿主提供的异步函数，返回 PNG\u002FJPEG data URI 或 null。\n",[241,6114,6115,6117,6120,6122],{"class":243,"line":708},[241,6116,326],{"class":304},[241,6118,6119],{"class":329}," extensions",[241,6121,333],{"class":304},[241,6123,2911],{"class":247},[241,6125,6126,6129,6132,6134,6136,6138,6140,6142],{"class":243,"line":743},[241,6127,6128],{"class":258},"  createMarkdownDocxContainerExtension",[241,6130,6131],{"class":247},"({ names: [",[241,6133,2522],{"class":265},[241,6135,429],{"class":247},[241,6137,2527],{"class":265},[241,6139,429],{"class":247},[241,6141,2537],{"class":265},[241,6143,6144],{"class":247},"] }),\n",[241,6146,6147,6150,6153,6156],{"class":243,"line":771},[241,6148,6149],{"class":258},"  createMarkdownDocxCodeImageExtension",[241,6151,6152],{"class":247},"({ languages: [",[241,6154,6155],{"class":265},"'mermaid'",[241,6157,6158],{"class":247},"], render: renderDiagram }),\n",[241,6160,6161],{"class":243,"line":779},[241,6162,2969],{"class":247},[241,6164,6165,6167,6169,6171,6173,6175],{"class":243,"line":785},[241,6166,326],{"class":304},[241,6168,359],{"class":329},[241,6170,333],{"class":304},[241,6172,3025],{"class":304},[241,6174,5474],{"class":258},[241,6176,6177],{"class":247},"(markdown, { extensions })\n",[241,6179,6180],{"class":243,"line":791},[241,6181,6182],{"class":288},"\u002F\u002F importDocxMarkdown 使用同一 extensions；仅导入时可以省略 render。\n",[14,6184,6185,6186,6189,6190,453,6193,6196,6197,37],{},"自定义功能实现 ",[23,6187,6188],{},"MarkdownDocxExtension.addDocx()","，返回与 Classic 相同的节点转换贡献。\nWord\u002FPDF\u002FOFD 共用 ",[23,6191,6192],{},"parse",[23,6194,6195],{},"prepare"," \u002F 节点 codec 与模板 service；DOCX 的 package pass 和\nCustom XML 恢复只适用于 Word。完整的原生业务卡片、图片渲染、组合注册、取消与失败处理见\n",[17,6198,6199],{"href":5677},"自定义节点导出为 Word、PDF 与 OFD",[14,6201,6202,6203,6206],{},"扩展必须校验 payload 版本与字段，并保留可见回退。每条恢复元数据上限为 64 KiB，\n文档总计 1 MiB \u002F 1000 条。",[23,6204,6205],{},"preserveMetadata"," 控制内置扩展；宿主扩展自行管理其策略。",[10,6208,6210],{"id":6209},"共享-prose-类名","共享 Prose 类名",[14,6212,6213,6214,4455,6217,6219,6220,6223,6224,6227,6228,453,6230,6232,6233,1201,6236,1201,6239,6242,6243,6246,6247,6250],{},"编辑区在实时和只读状态使用 ",[23,6215,6216],{},"qk-prose qk-prose--compact",[23,6218,25],{}," 使用同一紧凑密度；\n代码块使用 ",[23,6221,6222],{},"qk-code-block qk-prose-source","。任务框复用公共 Checkbox 与 ",[23,6225,6226],{},"qk-prose-task-marker","\n组合类，保持正文行高，并与编辑时的 ",[23,6229,452],{},[23,6231,456],{}," 共用占位宽度。\n容器使用 ",[23,6234,6235],{},"qk-prose-container",[23,6237,6238],{},"qk-prose-container__header",[23,6240,6241],{},"qk-prose-container__body","\n和语义 ",[23,6244,6245],{},"data-tone","。适配器将 CodeMirror 块映射为原生语义元素或 ",[23,6248,6249],{},"data-qk-prose"," 角色，\n直接消费公共 Prose CSS。普通 DOM 阅读与编辑不各写一套皮肤。",[14,6252,6253,6254,6257],{},"先通过应用的 QuireKit 主题修改字体、色彩和间距。业务需要特殊容器时，在宿主作用域\n下为 ",[23,6255,6256],{},".qk-prose-container[data-container=\"你的类型\"]"," 提供明确的变体；不要逐行画背景\n或替换 CodeMirror 管理的 DOM。需要在静态阅读中复用该类型时，保留相同的容器标识。",[10,6259,6260],{"id":6260},"独立的阅读视图快照",[232,6262,6264],{"className":234,"code":6263,"language":236,"meta":237,"style":237},"\u003Cscript setup lang=\"ts\">\nimport { shallowRef } from 'vue'\nimport type { EditorState } from '@quirekit\u002Fcm-state'\nimport { MdEditor, MdProse, type MdEditorInstance } from '@quirekit\u002Fmd-editor\u002Fvue'\nimport { QuireButton } from '@quirekit\u002Fui\u002Fvue'\nconst product = shallowRef\u003CMdEditorInstance | null>(null)\nconst snapshot = shallowRef\u003CEditorState>()\n\u003C\u002Fscript>\n\u003Ctemplate>\n  \u003CMdEditor ref=\"product\" markdown=\"# 同一份文档\" \u002F>\n  \u003CQuireButton @click=\"snapshot = product?.editor?.state\">生成阅读快照\u003C\u002FQuireButton>\n  \u003CMdProse v-if=\"snapshot\" :state=\"snapshot\" locale=\"zh-CN\" \u002F>\n\u003C\u002Ftemplate>\n",[23,6265,6266,6282,6293,6307,6322,6332,6356,6375,6383,6391,6412,6443,6481],{"__ignoreMap":237},[241,6267,6268,6270,6272,6274,6276,6278,6280],{"class":243,"line":244},[241,6269,248],{"class":247},[241,6271,1388],{"class":251},[241,6273,1391],{"class":258},[241,6275,1394],{"class":258},[241,6277,262],{"class":247},[241,6279,1399],{"class":265},[241,6281,1402],{"class":247},[241,6283,6284,6286,6289,6291],{"class":243,"line":285},[241,6285,305],{"class":304},[241,6287,6288],{"class":247}," { shallowRef } ",[241,6290,311],{"class":304},[241,6292,1414],{"class":265},[241,6294,6295,6297,6299,6302,6304],{"class":243,"line":323},[241,6296,305],{"class":304},[241,6298,618],{"class":304},[241,6300,6301],{"class":247}," { EditorState } ",[241,6303,311],{"class":304},[241,6305,6306],{"class":265}," '@quirekit\u002Fcm-state'\n",[241,6308,6309,6311,6314,6316,6318,6320],{"class":243,"line":354},[241,6310,305],{"class":304},[241,6312,6313],{"class":247}," { MdEditor, MdProse, ",[241,6315,1424],{"class":304},[241,6317,1427],{"class":247},[241,6319,311],{"class":304},[241,6321,1432],{"class":265},[241,6323,6324,6326,6328,6330],{"class":243,"line":376},[241,6325,305],{"class":304},[241,6327,1446],{"class":247},[241,6329,311],{"class":304},[241,6331,1451],{"class":265},[241,6333,6334,6336,6338,6340,6342,6344,6346,6348,6350,6352,6354],{"class":243,"line":397},[241,6335,326],{"class":304},[241,6337,1462],{"class":329},[241,6339,333],{"class":304},[241,6341,1467],{"class":258},[241,6343,248],{"class":247},[241,6345,1472],{"class":258},[241,6347,1475],{"class":304},[241,6349,1478],{"class":329},[241,6351,1481],{"class":247},[241,6353,981],{"class":329},[241,6355,373],{"class":247},[241,6357,6358,6360,6363,6365,6367,6369,6372],{"class":243,"line":418},[241,6359,326],{"class":304},[241,6361,6362],{"class":329}," snapshot",[241,6364,333],{"class":304},[241,6366,1467],{"class":258},[241,6368,248],{"class":247},[241,6370,6371],{"class":258},"EditorState",[241,6373,6374],{"class":247},">()\n",[241,6376,6377,6379,6381],{"class":243,"line":708},[241,6378,1612],{"class":247},[241,6380,1388],{"class":251},[241,6382,1402],{"class":247},[241,6384,6385,6387,6389],{"class":243,"line":743},[241,6386,248],{"class":247},[241,6388,1627],{"class":251},[241,6390,1402],{"class":247},[241,6392,6393,6395,6397,6399,6401,6403,6405,6407,6410],{"class":243,"line":771},[241,6394,1634],{"class":247},[241,6396,252],{"class":251},[241,6398,1497],{"class":258},[241,6400,262],{"class":247},[241,6402,1643],{"class":265},[241,6404,1577],{"class":258},[241,6406,262],{"class":247},[241,6408,6409],{"class":265},"\"# 同一份文档\"",[241,6411,282],{"class":247},[241,6413,6414,6416,6418,6420,6422,6424,6426,6429,6431,6434,6436,6439,6441],{"class":243,"line":779},[241,6415,1634],{"class":247},[241,6417,1692],{"class":251},[241,6419,1666],{"class":247},[241,6421,1713],{"class":258},[241,6423,262],{"class":247},[241,6425,266],{"class":265},[241,6427,6428],{"class":247},"snapshot ",[241,6430,262],{"class":304},[241,6432,6433],{"class":247}," product?.editor?.state",[241,6435,266],{"class":265},[241,6437,6438],{"class":247},">生成阅读快照\u003C\u002F",[241,6440,1692],{"class":251},[241,6442,1402],{"class":247},[241,6444,6445,6447,6449,6452,6454,6456,6458,6460,6462,6465,6467,6469,6471,6473,6475,6477,6479],{"class":243,"line":785},[241,6446,1634],{"class":247},[241,6448,25],{"class":251},[241,6450,6451],{"class":304}," v-if",[241,6453,262],{"class":247},[241,6455,266],{"class":265},[241,6457,3863],{"class":247},[241,6459,266],{"class":265},[241,6461,255],{"class":247},[241,6463,6464],{"class":258},"state",[241,6466,262],{"class":247},[241,6468,266],{"class":265},[241,6470,3863],{"class":247},[241,6472,266],{"class":265},[241,6474,1658],{"class":258},[241,6476,262],{"class":247},[241,6478,1663],{"class":265},[241,6480,282],{"class":247},[241,6482,6483,6485,6487],{"class":243,"line":791},[241,6484,1612],{"class":247},[241,6486,1627],{"class":251},[241,6488,1402],{"class":247},[14,6490,6491,6493,6494,6497,6498,1238,6500,6503,6504,6508,6509,6512,6513,6516,6517,6521],{},[23,6492,25],{}," 消费不可变状态并生成可丢弃的语义 DOM，不生成另一份可编辑 JSON，也不会\n反向序列化 Markdown。已注册容器名称保留为 ",[23,6495,6496],{},"data-container","，可与编辑视图共用变体。\n阅读适配覆盖核心块、行内扩展、链接、图片、公式、Mermaid、PlantUML、Graphviz\u002FDOT、定义列表、脚注和 Frontmatter。\n公式与图表复用同一安全渲染器，元数据保留为源码。未注册的绘图语言仍按普通代码块显示。\n第三方扩展可通过 ",[23,6499,1293],{},[23,6501,6502],{},"withMdReading()"," 贡献阅读内容，复用原\ncodec 的字段校验，并由公共层处理资源取消、释放和失败回退，见",[17,6505,6507],{"href":6506},"\u002Fextensions\u002Fcustom-node","自定义节点","。\n未知节点保留源码文本，默认 HTML 也保留为文本。",[23,6510,6511],{},"components"," 与显式 ",[23,6514,6515],{},"html"," 策略共用\n",[17,6518,6520],{"href":6519},"\u002Fguide\u002Fincremark","公共 Incremark reader"," 的合同。阅读贡献不自动提供 Word\u002FPDF\u002FOFD 导出能力。",[10,6523,6525],{"id":6524},"直接显示文本与-ai-流式回复","直接显示文本与 AI 流式回复",[14,6527,6528,6529,6532,6533,6535,6536,37],{},"无需先创建编辑器，直接把当前收到的",[4096,6530,6531],{},"完整原文","传给 ",[23,6534,2220],{},"。每次追加更新同一个字符串，\n改写、清空和切换消息也使用这个属性；不要同时传 ",[23,6537,6464],{},[232,6539,6541],{"className":234,"code":6540,"language":236,"meta":237,"style":237},"\u003CMdProse\n  :content=\"message.content\"\n  :identity=\"message.id\"\n  :status=\"message.receiving ? 'receiving' : 'complete'\"\n  locale=\"zh-CN\"\n  @error=\"reportReadingError\"\n\u002F>\n",[23,6542,6543,6550,6565,6581,6605,6615,6631],{"__ignoreMap":237},[241,6544,6545,6547],{"class":243,"line":244},[241,6546,248],{"class":247},[241,6548,6549],{"class":251},"MdProse\n",[241,6551,6552,6554,6556,6558,6560,6563],{"class":243,"line":285},[241,6553,2495],{"class":247},[241,6555,2220],{"class":258},[241,6557,262],{"class":247},[241,6559,266],{"class":265},[241,6561,6562],{"class":247},"message.content",[241,6564,2506],{"class":265},[241,6566,6567,6569,6572,6574,6576,6579],{"class":243,"line":323},[241,6568,2495],{"class":247},[241,6570,6571],{"class":258},"identity",[241,6573,262],{"class":247},[241,6575,266],{"class":265},[241,6577,6578],{"class":247},"message.id",[241,6580,2506],{"class":265},[241,6582,6583,6585,6588,6590,6592,6595,6597,6600,6602],{"class":243,"line":354},[241,6584,2495],{"class":247},[241,6586,6587],{"class":258},"status",[241,6589,262],{"class":247},[241,6591,266],{"class":265},[241,6593,6594],{"class":247},"message.receiving ",[241,6596,3420],{"class":304},[241,6598,6599],{"class":265}," 'receiving'",[241,6601,255],{"class":304},[241,6603,6604],{"class":265}," 'complete'\"\n",[241,6606,6607,6610,6612],{"class":243,"line":376},[241,6608,6609],{"class":258},"  locale",[241,6611,262],{"class":247},[241,6613,6614],{"class":265},"\"zh-CN\"\n",[241,6616,6617,6620,6622,6624,6626,6629],{"class":243,"line":397},[241,6618,6619],{"class":247},"  @",[241,6621,391],{"class":258},[241,6623,262],{"class":247},[241,6625,266],{"class":265},[241,6627,6628],{"class":247},"reportReadingError",[241,6630,2506],{"class":265},[241,6632,6633],{"class":243,"line":418},[241,6634,2662],{"class":247},[14,6636,6637,6639,6640,1201,6643,1201,6646,1201,6649,6651],{},[23,6638,6587],{}," 接受 ",[23,6641,6642],{},"receiving",[23,6644,6645],{},"complete",[23,6647,6648],{},"stopped",[23,6650,391],{},"，只描述传输状态。停止\u002F失败保留\n原文，后置定义仍可修正前文；没有提前冻结的“完成块”。未闭合的代码块先展示代码，闭合后\n才允许 Mermaid 等预览启动。重复脚注有独立的引用锚点，重复链接定义遵守首次定义优先。",[14,6653,6654,6657,6658,6661,6662,1201,6664,1150,6666,6668,6669,6672,6673,6676,6677,6680,6681,2444,6684,6686],{},[23,6655,6656],{},"options"," 接收 ",[23,6659,6660],{},"MdEditorExtensionOptions","，包括 ",[23,6663,2097],{},[23,6665,2080],{},[23,6667,2141],{},"；\n阅读扩展仍通过 ",[23,6670,6671],{},"withMdReading"," 注册。更换 options 对象或 identity 会释放旧会话和资源。\n配置必须是无需挂载编辑器的纯配置，不支持在初始化时使用 ",[23,6674,6675],{},"this.editor"," 或接入 source provider。\n错误通过 ",[23,6678,6679],{},"MdReadingError"," 上报，文本解析\u002F配置失败的 ",[23,6682,6683],{},"phase",[23,6685,6192],{},"，原文作为转义文本保留。",[6688,6689],"msfe-demo",{"name":6690},"reading\u002Fstream",[14,6692,6693,6694,6696,6697,6699,6700,6703],{},"例子每 30ms 追加 20 个 UTF-16 字符，末尾才给出链接和脚注定义。停止后可以一次性加载，\n也可以重新开始。这里的可运行示例使用 ",[23,6695,25],{},"；为兼容原合同，SSR 和客户端首帧\n都输出转义原文，挂载后再解析。需要服务端语义\nDOM 时传入预先接受的 ",[23,6698,6464],{}," 快照，或使用",[17,6701,6702],{"href":6519},"公共阅读组件","。额外解析工作\n协作让出主线程，但不是硬实时预算；大文档\n和密集引用仍有全局工作。稳定顶层块在语法、位置与依赖均未变时复用投影；增长中的块仍需重新投影。",[14,6705,6706,6707,6710,6711,6714,6715,6718,6719,6721,6722,6724],{},"无框架宿主可使用 ",[23,6708,6709],{},"MdProseStream","，调用 ",[23,6712,6713],{},"update(content)"," 接受全文、",[23,6716,6717],{},"advance(budget)","\n推进解析，再消费 ",[23,6720,6464],{},"。返回 ",[23,6723,1502],{}," 时由宿主调度下一个切片；类本身不创建定时器。\n不要把 Incremark 的 AST renderer、HTML 执行或图表配置直接传入这个入口。",[10,6726,6727],{"id":6727},"无框架装配",[14,6729,6730,6733,6734,6737,6738,6741,6742,6745,6746,6748,6749,453,6751,453,6753,6755,6756,6759],{},[23,6731,6732],{},"createMdEditor(options)"," 返回原始 ",[23,6735,6736],{},"MsfeEditor","，生命周期、命令和保存方法不变。\n",[23,6739,6740],{},"createMdEditorExtensions(options)"," 返回产品扩展组合，可以交给已有的 MSFE 实例工厂。\nVue 的任务、图片、代码语言选择与折叠按钮由 ",[23,6743,6744],{},"vueMdEditorExtensions(locale, options, edit?)","\n装配，需要同时使用 MSFE Vue 的组件宿主。第三个参数可接管公式\u002F图表编辑；直接使用\n",[23,6747,252],{}," 时这些步骤及公共弹层已完成。无框架工厂本身不挂载 Vue 工具栏或公式面板；\n宿主应提供 ",[23,6750,2676],{},[23,6752,2679],{},[23,6754,2682],{}," 的编辑回调，或使用 ",[23,6757,6758],{},"view: 'preview'","\n直接编辑活动节点的源码。",[6761,6762,6763],"style",{},"html pre.shiki code .sVPnS, html code.shiki .sVPnS{--shiki-default:#24292E;--shiki-light:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .su0ou, html code.shiki .su0ou{--shiki-default:#22863A;--shiki-light:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sgQzM, html code.shiki .sgQzM{--shiki-default:#6F42C1;--shiki-light:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s-HEn, html code.shiki .s-HEn{--shiki-default:#032F62;--shiki-light:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sqmzS, html code.shiki .sqmzS{--shiki-default:#6A737D;--shiki-light:#6A737D;--shiki-dark:#6A737D}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html.light .shiki span {color: var(--shiki-light);background: var(--shiki-light-bg);font-style: var(--shiki-light-font-style);font-weight: var(--shiki-light-font-weight);text-decoration: var(--shiki-light-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sDD9d, html code.shiki .sDD9d{--shiki-default:#D73A49;--shiki-light:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sUNQB, html code.shiki .sUNQB{--shiki-default:#005CC5;--shiki-light:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .sde8i, html code.shiki .sde8i{--shiki-default:#E36209;--shiki-light:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sAPpe, html code.shiki .sAPpe{--shiki-default:#032F62;--shiki-light:#032F62;--shiki-dark:#DBEDFF}",{"title":237,"searchDepth":285,"depth":285,"links":6765},[6766,6767,6768,6771,6775,6776,6777,6778,6779,6780,6781,6782,6783,6784,6785,6786,6790,6791,6792,6793,6794,6799,6800,6801,6802],{"id":12,"depth":285,"text":12},{"id":40,"depth":285,"text":41},{"id":127,"depth":285,"text":127,"children":6769},[6770],{"id":461,"depth":323,"text":461},{"id":571,"depth":285,"text":571,"children":6772},[6773,6774],{"id":588,"depth":323,"text":588},{"id":985,"depth":323,"text":985},{"id":1129,"depth":285,"text":1129},{"id":1161,"depth":285,"text":1161},{"id":1305,"depth":285,"text":1305},{"id":1375,"depth":285,"text":1376},{"id":1764,"depth":285,"text":1764},{"id":1799,"depth":285,"text":1799},{"id":2704,"depth":285,"text":2704},{"id":2806,"depth":285,"text":2807},{"id":3232,"depth":285,"text":3232},{"id":3614,"depth":285,"text":3614},{"id":4206,"depth":285,"text":4207},{"id":4272,"depth":285,"text":4272,"children":6787},[6788,6789],{"id":4474,"depth":323,"text":4474},{"id":4691,"depth":323,"text":4691},{"id":4772,"depth":285,"text":4772},{"id":4848,"depth":285,"text":4849},{"id":5055,"depth":285,"text":5055},{"id":5322,"depth":285,"text":5322},{"id":5350,"depth":285,"text":5351,"children":6795},[6796,6797,6798],{"id":5613,"depth":323,"text":5614},{"id":5747,"depth":323,"text":5747},{"id":5979,"depth":323,"text":5979},{"id":6209,"depth":285,"text":6210},{"id":6260,"depth":285,"text":6260},{"id":6524,"depth":285,"text":6525},{"id":6727,"depth":285,"text":6727},"直接接入使用 QuireKit Prose 样式的 Markdown 文档编辑器。","md",[252,25,6806,6807,6808,2322,6809,6810],"工具栏","公式编辑器","Mermaid","脚注","嵌套容器",{},"\u002Fguide\u002Fmd-editor","接入指南",{"title":5,"description":6803},"guide\u002Fmd-editor.zh-CN","3gmDg0c_C4zOAheIJqTbS28dS8EQIPTIEpyBbAn9O88",1793046310952]