[{"data":1,"prerenderedAt":2463},["ShallowReactive",2],{"navigation":3,"/lazycodet-explanation/lazyeditor":66,"/lazycodet-explanation/lazyeditor-surround":2459},[4,23,42,51],{"title":5,"path":6,"stem":7,"children":8,"icon":22},"Getting Started","/getting-started","1.getting-started/1.index",[9,12,17],{"title":10,"path":6,"stem":7,"icon":11},"Introduction","i-lucide-house",{"title":13,"path":14,"stem":15,"icon":16},"Installation","/getting-started/installation","1.getting-started/2.installation","i-lucide-download",{"title":18,"path":19,"stem":20,"icon":21},"Usage","/getting-started/usage","1.getting-started/3.usage","i-lucide-sliders",false,{"title":24,"icon":22,"path":25,"stem":26,"children":27,"page":22},"Lazycodet Explanation","/lazycodet-explanation","2.lazycodet-explanation",[28,33,38],{"title":29,"path":30,"stem":31,"icon":32},"Code Block","/lazycodet-explanation/code-block","2.lazycodet-explanation/1.code-block","i-lucide-code",{"title":34,"path":35,"stem":36,"icon":37},"Tooltip","/lazycodet-explanation/tooltip","2.lazycodet-explanation/2.tooltip","i-lucide-message-square",{"title":39,"path":40,"stem":41},"LazyEditor — Technical Reference","/lazycodet-explanation/lazyeditor","2.lazycodet-explanation/3.lazyeditor",{"title":43,"path":44,"stem":45,"children":46,"page":22},"Tselenium Explanation","/tselenium-explanation","3.TSelenium Explanation",[47],{"title":48,"path":49,"stem":50},"Get Started","/tselenium-explanation/get-started","3.TSelenium Explanation/get-started",{"title":52,"path":53,"stem":54,"children":55,"page":22},"AI","/ai","4.ai",[56,61],{"title":57,"path":58,"stem":59,"icon":60},"MCP Server","/ai/mcp","4.ai/1.mcp","i-lucide-cpu",{"title":62,"path":63,"stem":64,"icon":65},"LLMs Integration","/ai/llms","4.ai/2.llms","i-lucide-message-circle-code",{"id":67,"title":39,"body":68,"description":140,"extension":2453,"links":2454,"meta":2455,"navigation":2456,"path":40,"seo":2457,"stem":41,"__hash__":2458},"docs/2.lazycodet-explanation/3.lazyeditor.md",{"type":69,"value":70,"toc":2425},"minimark",[71,75,80,115,124,127,131,141,147,150,197,202,208,213,400,405,415,417,421,427,663,665,669,937,944,974,976,980,983,1033,1052,1059,1177,1179,1183,1195,1229,1231,1234,1251,1325,1330,1359,1361,1365,1370,1403,1405,1409,1415,1460,1462,1466,1470,1716,1720,1741,1743,1747,1754,1801,1803,1807,1815,1965,1970,2098,2105,2137,2139,2143,2204,2206,2210,2295,2297,2301,2307,2360,2372,2374,2378,2421],[72,73,39],"h1",{"id":74},"lazyeditor-technical-reference",[76,77,79],"h2",{"id":78},"overview","Overview",[81,82,83,87,88,92,93,96,97,100,101,103,104,100,107,110,111,114],"p",{},[84,85,86],"strong",{},"LazyEditor"," is the custom WYSIWYG rich-text editor built specifically for the LazyCodet platform (Nuxt 3 / TypeScript). It is a ",[89,90,91],"code",{},"contentEditable","-based editor that avoids deprecated ",[89,94,95],{},"document.execCommand"," in favour of direct DOM manipulation. It supports two modes: ",[84,98,99],{},"WYSIWYG"," (class ",[89,102,86],{},") and ",[84,105,106],{},"raw Markdown",[89,108,109],{},"EditorMarkdown","), both extending the abstract ",[89,112,113],{},"BaseEditor",".",[81,116,117,120,121],{},[84,118,119],{},"Source location:"," ",[89,122,123],{},"nuxt-lazycodet/assets/lib/editor/",[125,126],"hr",{},[76,128,130],{"id":129},"class-hierarchy","Class Hierarchy",[132,133,138],"pre",{"className":134,"code":136,"language":137},[135],"language-text","BaseEditor (abstract)\n├── LazyEditor          — WYSIWYG HTML editor (main)\n└── EditorMarkdown      — Raw markdown textarea editor\n","text",[89,139,136],{"__ignoreMap":140},"",[142,143,145],"h3",{"id":144},"baseeditor",[89,146,113],{},[81,148,149],{},"Abstract base with shared reactive state:",[151,152,153,173,182],"ul",{},[154,155,156,159,160,159,163,159,166,159,169,172],"li",{},[89,157,158],{},"isShowHelpPopup",", ",[89,161,162],{},"isShowSidebarOptions",[89,164,165],{},"isShowRefPopup",[89,167,168],{},"isShowLinkPopup",[89,170,171],{},"isShowCaptionPopup"," — popup visibility refs",[154,174,175,159,178,181],{},[89,176,177],{},"deletingImages",[89,179,180],{},"uploadingImages"," — image operation queues",[154,183,184,185,159,188,159,191,159,194],{},"Abstract methods: ",[89,186,187],{},"setContent()",[89,189,190],{},"getContent()",[89,192,193],{},"moveCaretToFirstLine()",[89,195,196],{},"waitReadyStyleCodeBlock()",[142,198,200],{"id":199},"lazyeditor",[89,201,86],{},[81,203,204,205,114],{},"The main editor class. Instantiated directly from the Vue component ",[89,206,207],{},"components/z/editor.vue",[81,209,210],{},[84,211,212],{},"Constructor signature:",[132,214,218],{"className":215,"code":216,"language":217,"meta":140,"style":140},"language-ts shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","new LazyEditor(\n  id_div: string,                        // ID of the container \u003Cdiv>\n  id_post: string | null,                // Post ID for image upload routing\n  editor: BaseEditorModal,               // Editor model (page-specific logic)\n  callback_autosave: (() => void) | null,\n  height: number | undefined | null,     // Editor height in px (default: auto)\n  disablePlugins: Plugin[],              // Plugins to disable\n  $t: (key: string) => any,             // i18n translation function\n  waitReadyStyleCodeBlock: () => Promise\u003Cvoid>,\n  redirectMarkdownEditor?: string        // Route to redirect to markdown mode\n)\n","ts",[89,219,220,237,250,265,276,300,319,330,363,379,394],{"__ignoreMap":140},[221,222,225,229,233],"span",{"class":223,"line":224},"line",1,[221,226,228],{"class":227},"sMK4o","new",[221,230,232],{"class":231},"s2Zo4"," LazyEditor",[221,234,236],{"class":235},"sTEyZ","(\n",[221,238,240,243,246],{"class":223,"line":239},2,[221,241,242],{"class":235},"  id_div: string",[221,244,245],{"class":227},",",[221,247,249],{"class":248},"sHwdD","                        // ID of the container \u003Cdiv>\n",[221,251,253,256,259,262],{"class":223,"line":252},3,[221,254,255],{"class":235},"  id_post: string ",[221,257,258],{"class":227},"|",[221,260,261],{"class":227}," null,",[221,263,264],{"class":248},"                // Post ID for image upload routing\n",[221,266,268,271,273],{"class":223,"line":267},4,[221,269,270],{"class":235},"  editor: BaseEditorModal",[221,272,245],{"class":227},[221,274,275],{"class":248},"               // Editor model (page-specific logic)\n",[221,277,279,282,285,289,292,295,297],{"class":223,"line":278},5,[221,280,281],{"class":235},"  callback_autosave: (",[221,283,284],{"class":227},"()",[221,286,288],{"class":287},"spNyl"," =>",[221,290,291],{"class":227}," void",[221,293,294],{"class":235},") ",[221,296,258],{"class":227},[221,298,299],{"class":227}," null,\n",[221,301,303,306,308,311,314,316],{"class":223,"line":302},6,[221,304,305],{"class":235},"  height: number ",[221,307,258],{"class":227},[221,309,310],{"class":227}," undefined",[221,312,313],{"class":227}," |",[221,315,261],{"class":227},[221,317,318],{"class":248},"     // Editor height in px (default: auto)\n",[221,320,322,325,327],{"class":223,"line":321},7,[221,323,324],{"class":235},"  disablePlugins: Plugin[]",[221,326,245],{"class":227},[221,328,329],{"class":248},"              // Plugins to disable\n",[221,331,333,336,339,343,346,350,353,355,358,360],{"class":223,"line":332},8,[221,334,335],{"class":235},"  $t: ",[221,337,338],{"class":227},"(",[221,340,342],{"class":341},"sHdIc","key",[221,344,345],{"class":227},":",[221,347,349],{"class":348},"sBMFI"," string",[221,351,352],{"class":227},")",[221,354,288],{"class":287},[221,356,357],{"class":235}," any",[221,359,245],{"class":227},[221,361,362],{"class":248},"             // i18n translation function\n",[221,364,366,369,371,373,376],{"class":223,"line":365},9,[221,367,368],{"class":235},"  waitReadyStyleCodeBlock: ",[221,370,284],{"class":227},[221,372,288],{"class":287},[221,374,375],{"class":348}," Promise",[221,377,378],{"class":227},"\u003Cvoid>,\n",[221,380,382,385,388,391],{"class":223,"line":381},10,[221,383,384],{"class":235},"  redirectMarkdownEditor",[221,386,387],{"class":227},"?:",[221,389,390],{"class":235}," string        ",[221,392,393],{"class":248},"// Route to redirect to markdown mode\n",[221,395,397],{"class":223,"line":396},11,[221,398,399],{"class":235},")\n",[142,401,403],{"id":402},"editormarkdown",[89,404,109],{},[81,406,407,408,411,412,414],{},"Wraps a plain ",[89,409,410],{},"\u003Ctextarea>"," for markdown editing. Implements the same ",[89,413,113],{}," interface so it can be swapped in transparently.",[125,416],{},[76,418,420],{"id":419},"sub-controllers","Sub-Controllers",[81,422,423,424,426],{},"Each controller is instantiated inside ",[89,425,86],{}," and holds a reference back to the parent editor instance.",[428,429,430,446],"table",{},[431,432,433],"thead",{},[434,435,436,440,443],"tr",{},[437,438,439],"th",{},"Controller",[437,441,442],{},"File",[437,444,445],{},"Responsibility",[447,448,449,465,480,495,513,528,543,558,573,588,603,618,633,648],"tbody",{},[434,450,451,457,462],{},[452,453,454],"td",{},[89,455,456],{},"CodeBlock",[452,458,459],{},[89,460,461],{},"code-block/code-block.ts",[452,463,464],{},"PrismJS code blocks — create, focus, paste, language detection",[434,466,467,472,477],{},[452,468,469],{},[89,470,471],{},"Caret",[452,473,474],{},[89,475,476],{},"caret.ts",[452,478,479],{},"Caret tracking, offset calculations, move-to-node",[434,481,482,487,492],{},[452,483,484],{},[89,485,486],{},"CaretMovingController",[452,488,489],{},[89,490,491],{},"caret-moving-controller.ts",[452,493,494],{},"Directional caret movement across elements",[434,496,497,502,507],{},[452,498,499],{},[89,500,501],{},"BoldController",[452,503,504],{},[89,505,506],{},"bold-controller.ts",[452,508,509,510],{},"Bold toggling without ",[89,511,512],{},"execCommand",[434,514,515,520,525],{},[452,516,517],{},[89,518,519],{},"Title",[452,521,522],{},[89,523,524],{},"title.ts",[452,526,527],{},"Heading management (H1–H6 conversions)",[434,529,530,535,540],{},[452,531,532],{},[89,533,534],{},"SelectionController",[452,536,537],{},[89,538,539],{},"selection.ts",[452,541,542],{},"Selection read/write, direction detection, cut/remove",[434,544,545,550,555],{},[452,546,547],{},[89,548,549],{},"Table",[452,551,552],{},[89,553,554],{},"table.ts",[452,556,557],{},"Table navigation, caret movement inside cells",[434,559,560,565,570],{},[452,561,562],{},[89,563,564],{},"List",[452,566,567],{},[89,568,569],{},"list.ts",[452,571,572],{},"OL/UL creation, nesting, LI orphan handling",[434,574,575,580,585],{},[452,576,577],{},[89,578,579],{},"HTML",[452,581,582],{},[89,583,584],{},"html.ts",[452,586,587],{},"HTML DOM utilities, obstacle-overcome traversal",[434,589,590,595,600],{},[452,591,592],{},[89,593,594],{},"StateManager",[452,596,597],{},[89,598,599],{},"state-manager.ts",[452,601,602],{},"Undo/redo state stack with debounce",[434,604,605,610,615],{},[452,606,607],{},[89,608,609],{},"ImageService",[452,611,612],{},[89,613,614],{},"image-service.ts",[452,616,617],{},"Image upload to server, base64 preview, delete",[434,619,620,625,630],{},[452,621,622],{},[89,623,624],{},"OnPasteEditor",[452,626,627],{},[89,628,629],{},"onPasteEditor.ts",[452,631,632],{},"Paste handler for HTML, plain text, and images",[434,634,635,640,645],{},[452,636,637],{},[89,638,639],{},"KeyDownEvent",[452,641,642],{},[89,643,644],{},"keydown-event.ts",[452,646,647],{},"Per-key keyboard behaviour (arrow, enter, delete, …)",[434,649,650,655,660],{},[452,651,652],{},[89,653,654],{},"ShortcutManager",[452,656,657],{},[89,658,659],{},"shortcut-manager.ts",[452,661,662],{},"Keyboard shortcut registry (Windows + macOS)",[125,664],{},[76,666,668],{"id":667},"dom-structure","DOM Structure",[132,670,674],{"className":671,"code":672,"language":673,"meta":140,"style":140},"language-html shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003Cdiv class=\"container-editor\">\n  \u003Cdiv class=\"arrow-note-line\" />       \u003C!-- Visual line indicator -->\n  \u003Cdiv class=\"dot-note-line\" />\n  \u003Cdiv class=\"caret-tracking\" />        \u003C!-- Debug caret overlay -->\n  \u003Cdiv class=\"editor-body\">\n    \u003C!-- Toolbar is injected here -->\n    \u003Cdiv class=\"note-editable\"          \u003C!-- The actual contentEditable div -->\n         contenteditable=\"true\"\n         id=\"{id_editor}\">\n      \u003Cp>...\u003C/p>\n      \u003Cdiv class=\"prism-live\">...\u003C/div> \u003C!-- Code blocks -->\n      \u003Ctable>...\u003C/table>\n    \u003C/div>\n  \u003C/div>\n\u003C/div>\n","html",[89,675,676,703,727,747,769,788,793,831,836,841,861,891,908,918,928],{"__ignoreMap":140},[221,677,678,681,685,688,691,694,698,700],{"class":223,"line":224},[221,679,680],{"class":227},"\u003C",[221,682,684],{"class":683},"swJcz","div",[221,686,687],{"class":287}," class",[221,689,690],{"class":227},"=",[221,692,693],{"class":227},"\"",[221,695,697],{"class":696},"sfazB","container-editor",[221,699,693],{"class":227},[221,701,702],{"class":227},">\n",[221,704,705,708,710,712,714,716,719,721,724],{"class":223,"line":239},[221,706,707],{"class":227},"  \u003C",[221,709,684],{"class":683},[221,711,687],{"class":287},[221,713,690],{"class":227},[221,715,693],{"class":227},[221,717,718],{"class":696},"arrow-note-line",[221,720,693],{"class":227},[221,722,723],{"class":227}," />",[221,725,726],{"class":248},"       \u003C!-- Visual line indicator -->\n",[221,728,729,731,733,735,737,739,742,744],{"class":223,"line":252},[221,730,707],{"class":227},[221,732,684],{"class":683},[221,734,687],{"class":287},[221,736,690],{"class":227},[221,738,693],{"class":227},[221,740,741],{"class":696},"dot-note-line",[221,743,693],{"class":227},[221,745,746],{"class":227}," />\n",[221,748,749,751,753,755,757,759,762,764,766],{"class":223,"line":267},[221,750,707],{"class":227},[221,752,684],{"class":683},[221,754,687],{"class":287},[221,756,690],{"class":227},[221,758,693],{"class":227},[221,760,761],{"class":696},"caret-tracking",[221,763,693],{"class":227},[221,765,723],{"class":227},[221,767,768],{"class":248},"        \u003C!-- Debug caret overlay -->\n",[221,770,771,773,775,777,779,781,784,786],{"class":223,"line":278},[221,772,707],{"class":227},[221,774,684],{"class":683},[221,776,687],{"class":287},[221,778,690],{"class":227},[221,780,693],{"class":227},[221,782,783],{"class":696},"editor-body",[221,785,693],{"class":227},[221,787,702],{"class":227},[221,789,790],{"class":223,"line":302},[221,791,792],{"class":248},"    \u003C!-- Toolbar is injected here -->\n",[221,794,795,798,800,802,804,806,809,811,814,817,820,823,826,829],{"class":223,"line":321},[221,796,797],{"class":227},"    \u003C",[221,799,684],{"class":683},[221,801,687],{"class":287},[221,803,690],{"class":227},[221,805,693],{"class":227},[221,807,808],{"class":696},"note-editable",[221,810,693],{"class":227},[221,812,813],{"class":227},"          \u003C!-- ",[221,815,816],{"class":287},"The",[221,818,819],{"class":287}," actual",[221,821,822],{"class":287}," contentEditable",[221,824,825],{"class":287}," div",[221,827,828],{"class":287}," --",[221,830,702],{"class":227},[221,832,833],{"class":223,"line":332},[221,834,835],{"class":235},"         contenteditable=\"true\"\n",[221,837,838],{"class":223,"line":365},[221,839,840],{"class":235},"         id=\"{id_editor}\">\n",[221,842,843,846,848,851,854,857,859],{"class":223,"line":381},[221,844,845],{"class":227},"      \u003C",[221,847,81],{"class":683},[221,849,850],{"class":227},">",[221,852,853],{"class":235},"...",[221,855,856],{"class":227},"\u003C/",[221,858,81],{"class":683},[221,860,702],{"class":227},[221,862,863,865,867,869,871,873,876,878,880,882,884,886,888],{"class":223,"line":396},[221,864,845],{"class":227},[221,866,684],{"class":683},[221,868,687],{"class":287},[221,870,690],{"class":227},[221,872,693],{"class":227},[221,874,875],{"class":696},"prism-live",[221,877,693],{"class":227},[221,879,850],{"class":227},[221,881,853],{"class":235},[221,883,856],{"class":227},[221,885,684],{"class":683},[221,887,850],{"class":227},[221,889,890],{"class":248}," \u003C!-- Code blocks -->\n",[221,892,894,896,898,900,902,904,906],{"class":223,"line":893},12,[221,895,845],{"class":227},[221,897,428],{"class":683},[221,899,850],{"class":227},[221,901,853],{"class":235},[221,903,856],{"class":227},[221,905,428],{"class":683},[221,907,702],{"class":227},[221,909,911,914,916],{"class":223,"line":910},13,[221,912,913],{"class":227},"    \u003C/",[221,915,684],{"class":683},[221,917,702],{"class":227},[221,919,921,924,926],{"class":223,"line":920},14,[221,922,923],{"class":227},"  \u003C/",[221,925,684],{"class":683},[221,927,702],{"class":227},[221,929,931,933,935],{"class":223,"line":930},15,[221,932,856],{"class":227},[221,934,684],{"class":683},[221,936,702],{"class":227},[81,938,939,940,943],{},"Key CSS class names (defined in ",[89,941,942],{},"editor-enums.ts","):",[151,945,946,956,965],{},[154,947,948,951,952,955],{},[89,949,950],{},"EditorEnum.className"," = ",[89,953,954],{},"\"note-editable\""," — the editable area",[154,957,958,951,961,964],{},[89,959,960],{},"EditorEnum.bodyEditorClassName",[89,962,963],{},"\"editor-body\""," — scroll container",[154,966,967,951,970,973],{},[89,968,969],{},"EditorEnum.prismLiveClassName",[89,971,972],{},"\"prism-live\""," — code block element",[125,975],{},[76,977,979],{"id":978},"content-model","Content Model",[81,981,982],{},"The editor works with three formats:",[428,984,985,995],{},[431,986,987],{},[434,988,989,992],{},[437,990,991],{},"Format",[437,993,994],{},"Description",[447,996,997,1010,1020],{},[434,998,999,1003],{},[452,1000,1001],{},[89,1002,673],{},[452,1004,1005,1006,1009],{},"Inner HTML of ",[89,1007,1008],{},".note-editable"," — primary storage format",[434,1011,1012,1017],{},[452,1013,1014],{},[89,1015,1016],{},"plaintext",[452,1018,1019],{},"Stripped text content",[434,1021,1022,1027],{},[452,1023,1024],{},[89,1025,1026],{},"markdown",[452,1028,1029,1030,352],{},"Converted markdown output (via ",[89,1031,1032],{},"@nguyentantaitcag2000/lazycodet",[81,1034,1035,1039,1040,114,1043,1046,1051],{},[84,1036,1037],{},[89,1038,190],{}," returns ",[89,1041,1042],{},"{ html, plaintext, markdown }",[1044,1045],"br",{},[84,1047,1048],{},[89,1049,1050],{},"setContent(html | EditorState)"," replaces the editor's content.",[142,1053,1055,1058],{"id":1054},"editorstate-state-snapshot-for-undoredo",[89,1056,1057],{},"EditorState"," (state snapshot for undo/redo)",[132,1060,1062],{"className":215,"code":1061,"language":217,"meta":140,"style":140},"interface EditorState {\n  id: number;\n  html: string;\n  actionMetadata: EditorActionMetadata; // action type: insert | delete | backspace\n  isTextHaveCodeBlock?: boolean;\n  idElementFocusing?: string;\n  scrollPosition: number;\n  caretPosition: number;\n  selectionState?: SelectionState;\n}\n",[89,1063,1064,1075,1088,1099,1115,1127,1138,1149,1160,1172],{"__ignoreMap":140},[221,1065,1066,1069,1072],{"class":223,"line":224},[221,1067,1068],{"class":287},"interface",[221,1070,1071],{"class":348}," EditorState",[221,1073,1074],{"class":227}," {\n",[221,1076,1077,1080,1082,1085],{"class":223,"line":239},[221,1078,1079],{"class":683},"  id",[221,1081,345],{"class":227},[221,1083,1084],{"class":348}," number",[221,1086,1087],{"class":227},";\n",[221,1089,1090,1093,1095,1097],{"class":223,"line":252},[221,1091,1092],{"class":683},"  html",[221,1094,345],{"class":227},[221,1096,349],{"class":348},[221,1098,1087],{"class":227},[221,1100,1101,1104,1106,1109,1112],{"class":223,"line":267},[221,1102,1103],{"class":683},"  actionMetadata",[221,1105,345],{"class":227},[221,1107,1108],{"class":348}," EditorActionMetadata",[221,1110,1111],{"class":227},";",[221,1113,1114],{"class":248}," // action type: insert | delete | backspace\n",[221,1116,1117,1120,1122,1125],{"class":223,"line":278},[221,1118,1119],{"class":683},"  isTextHaveCodeBlock",[221,1121,387],{"class":227},[221,1123,1124],{"class":348}," boolean",[221,1126,1087],{"class":227},[221,1128,1129,1132,1134,1136],{"class":223,"line":302},[221,1130,1131],{"class":683},"  idElementFocusing",[221,1133,387],{"class":227},[221,1135,349],{"class":348},[221,1137,1087],{"class":227},[221,1139,1140,1143,1145,1147],{"class":223,"line":321},[221,1141,1142],{"class":683},"  scrollPosition",[221,1144,345],{"class":227},[221,1146,1084],{"class":348},[221,1148,1087],{"class":227},[221,1150,1151,1154,1156,1158],{"class":223,"line":332},[221,1152,1153],{"class":683},"  caretPosition",[221,1155,345],{"class":227},[221,1157,1084],{"class":348},[221,1159,1087],{"class":227},[221,1161,1162,1165,1167,1170],{"class":223,"line":365},[221,1163,1164],{"class":683},"  selectionState",[221,1166,387],{"class":227},[221,1168,1169],{"class":348}," SelectionState",[221,1171,1087],{"class":227},[221,1173,1174],{"class":223,"line":381},[221,1175,1176],{"class":227},"}\n",[125,1178],{},[76,1180,1182],{"id":1181},"state-management-undo-redo","State Management (Undo / Redo)",[81,1184,1185,1187,1188,1191,1192,114],{},[89,1186,594],{}," maintains two stacks: ",[89,1189,1190],{},"undoStack"," and ",[89,1193,1194],{},"redoStack",[151,1196,1197,1215,1223,1226],{},[154,1198,1199,1204,1205,1207,1208,1211,1212,114],{},[84,1200,1201],{},[89,1202,1203],{},"saveState(args?, autoSave?)"," — debounced (200 ms default) push to ",[89,1206,1190],{},". Calls ",[89,1209,1210],{},"callback_autosave"," if ",[89,1213,1214],{},"autoSave = true",[154,1216,1217,1222],{},[84,1218,1219],{},[89,1220,1221],{},"immediate()"," — bypass debounce for the next save.",[154,1224,1225],{},"Redo stack is cleared whenever a new state is saved.",[154,1227,1228],{},"Automatically integrates with image delete/restore operations to sync server-side state.",[125,1230],{},[76,1232,29],{"id":1233},"code-block",[81,1235,1236,1237,1240,1241,1244,1245,1247,1248,1250],{},"Code blocks use ",[84,1238,1239],{},"PrismJS"," + custom ",[89,1242,1243],{},"PrismLive"," (from ",[89,1246,1032],{},") rendered into a ",[89,1249,410],{}," for live editing.",[81,1252,1253,1256,159,1259,159,1262,159,1265,159,1268,159,1271,159,1273,159,1276,159,1279,159,1282,159,1285,159,1288,159,1291,159,1294,159,1297,159,1300,159,1303,159,1306,159,1309,159,1312,159,1315,159,1318,159,1321,1324],{},[84,1254,1255],{},"Supported languages (25+):",[89,1257,1258],{},"c",[89,1260,1261],{},"php",[89,1263,1264],{},"python",[89,1266,1267],{},"java",[89,1269,1270],{},"markup",[89,1272,673],{},[89,1274,1275],{},"xml",[89,1277,1278],{},"javascript",[89,1280,1281],{},"typescript",[89,1283,1284],{},"css",[89,1286,1287],{},"less",[89,1289,1290],{},"sass",[89,1292,1293],{},"scss",[89,1295,1296],{},"shell",[89,1298,1299],{},"csharp",[89,1301,1302],{},"sql",[89,1304,1305],{},"json",[89,1307,1308],{},"jsx",[89,1310,1311],{},"tsx",[89,1313,1314],{},"bash",[89,1316,1317],{},"yaml",[89,1319,1320],{},"docker",[89,1322,1323],{},"ahk",", and more.",[81,1326,1327],{},[84,1328,1329],{},"Code block creation:",[151,1331,1332,1343,1346,1352],{},[154,1333,1334,1335,1338,1339,1342],{},"Shortcut: ",[89,1336,1337],{},"Ctrl+Space"," (Windows) / ",[89,1340,1341],{},"Ctrl+Command"," (macOS)",[154,1344,1345],{},"Each code block has a language selector dropdown.",[154,1347,1348,1349,114],{},"Auto-detect language is supported via ",[89,1350,1351],{},"LanguageDetector",[154,1353,1354,1355,1358],{},"Tab key indents inside the block; ",[89,1356,1357],{},"Ctrl+Backspace"," drops (removes) the block.",[125,1360],{},[76,1362,1364],{"id":1363},"image-handling","Image Handling",[81,1366,1367,1368,345],{},"Managed by ",[89,1369,609],{},[1371,1372,1373,1376,1383,1386,1393,1400],"ol",{},[154,1374,1375],{},"User pastes or drops an image.",[154,1377,1378,1379,1382],{},"Image is compressed via ",[89,1380,1381],{},"ImageHelper.compressImage()"," (max 2048px, quality 0.6, output WebP).",[154,1384,1385],{},"Base64 preview is immediately inserted into the editor with a loading indicator.",[154,1387,1388,1389,1392],{},"Async upload to ",[89,1390,1391],{},"ENV.server2 + /{editorModel.name}/editor/upload-image"," via multipart form.",[154,1394,1395,1396,1399],{},"On success, base64 ",[89,1397,1398],{},"src"," is swapped to the server URL (preloaded first to avoid flicker).",[154,1401,1402],{},"Undo of an image paste triggers server deletion; redo re-uploads.",[125,1404],{},[76,1406,1408],{"id":1407},"paste-handling","Paste Handling",[81,1410,1411,1414],{},[89,1412,1413],{},"OnPasteEditor.handle()"," dispatches based on clipboard content:",[151,1416,1417,1426,1436,1448,1457],{},[154,1418,1419,1422,1423,114],{},[84,1420,1421],{},"Image"," — delegates to ",[89,1424,1425],{},"ImageService.saveImage()",[154,1427,1428,1431,1432,1435],{},[84,1429,1430],{},"Plain text paste"," (",[89,1433,1434],{},"Shift+V",") — strips all HTML.",[154,1437,1438,1440,1441,1191,1444,1447],{},[84,1439,579],{}," — sanitised via ",[89,1442,1443],{},"LazyFixHTML",[89,1445,1446],{},"HTMLFixer",", then inserted at the caret.",[154,1449,1450,1453,1454,114],{},[84,1451,1452],{},"Code block paste"," — passed directly to ",[89,1455,1456],{},"CodeBlock.onPaste()",[154,1458,1459],{},"When text is selected, selection is removed before insertion.",[125,1461],{},[76,1463,1465],{"id":1464},"keyboard-shortcuts","Keyboard Shortcuts",[142,1467,1469],{"id":1468},"windows","Windows",[428,1471,1472,1482],{},[431,1473,1474],{},[434,1475,1476,1479],{},[437,1477,1478],{},"Shortcut",[437,1480,1481],{},"Action",[447,1483,1484,1493,1503,1513,1523,1533,1543,1556,1570,1580,1590,1600,1610,1620,1630,1640,1654,1664,1674,1684,1694,1707],{},[434,1485,1486,1490],{},[452,1487,1488],{},[89,1489,1337],{},[452,1491,1492],{},"Create new code block",[434,1494,1495,1500],{},[452,1496,1497],{},[89,1498,1499],{},"Ctrl+Z",[452,1501,1502],{},"Undo",[434,1504,1505,1510],{},[452,1506,1507],{},[89,1508,1509],{},"Ctrl+Y",[452,1511,1512],{},"Redo",[434,1514,1515,1520],{},[452,1516,1517],{},[89,1518,1519],{},"Ctrl+B",[452,1521,1522],{},"Bold",[434,1524,1525,1530],{},[452,1526,1527],{},[89,1528,1529],{},"Ctrl+I",[452,1531,1532],{},"Italic",[434,1534,1535,1540],{},[452,1536,1537],{},[89,1538,1539],{},"Ctrl+U",[452,1541,1542],{},"Underline",[434,1544,1545,1550],{},[452,1546,1547],{},[89,1548,1549],{},"Alt+0",[452,1551,1552,1553],{},"Format as paragraph ",[89,1554,1555],{},"\u003Cp>",[434,1557,1558,1567],{},[452,1559,1560,1563,1564],{},[89,1561,1562],{},"Alt+1"," – ",[89,1565,1566],{},"Alt+6",[452,1568,1569],{},"Format as H1–H6",[434,1571,1572,1577],{},[452,1573,1574],{},[89,1575,1576],{},"Alt+7",[452,1578,1579],{},"Ordered list",[434,1581,1582,1587],{},[452,1583,1584],{},[89,1585,1586],{},"Alt+8",[452,1588,1589],{},"Unordered list",[434,1591,1592,1597],{},[452,1593,1594],{},[89,1595,1596],{},"Alt+B",[452,1598,1599],{},"Blockquote",[434,1601,1602,1607],{},[452,1603,1604],{},[89,1605,1606],{},"Alt+C",[452,1608,1609],{},"Inline code",[434,1611,1612,1617],{},[452,1613,1614],{},[89,1615,1616],{},"Alt+T",[452,1618,1619],{},"Insert table",[434,1621,1622,1627],{},[452,1623,1624],{},[89,1625,1626],{},"Alt+X",[452,1628,1629],{},"Checkbox",[434,1631,1632,1637],{},[452,1633,1634],{},[89,1635,1636],{},"Alt+E",[452,1638,1639],{},"Erase format",[434,1641,1642,1651],{},[452,1643,1644,1647,1648],{},[89,1645,1646],{},"Alt+↑"," / ",[89,1649,1650],{},"Alt+↓",[452,1652,1653],{},"Move current line up / down",[434,1655,1656,1661],{},[452,1657,1658],{},[89,1659,1660],{},"Alt+L",[452,1662,1663],{},"Create hyperlink",[434,1665,1666,1671],{},[452,1667,1668],{},[89,1669,1670],{},"Alt+−",[452,1672,1673],{},"Insert horizontal rule",[434,1675,1676,1681],{},[452,1677,1678],{},[89,1679,1680],{},"Alt+Shift+5",[452,1682,1683],{},"Strikethrough",[434,1685,1686,1691],{},[452,1687,1688],{},[89,1689,1690],{},"Ctrl+Shift+L/R/E",[452,1692,1693],{},"Align left / right / center",[434,1695,1696,1704],{},[452,1697,1698,1647,1701],{},[89,1699,1700],{},"Ctrl+[",[89,1702,1703],{},"Ctrl+]",[452,1705,1706],{},"Decrease / Increase indent",[434,1708,1709,1713],{},[452,1710,1711],{},[89,1712,1357],{},[452,1714,1715],{},"Drop (remove) code block",[142,1717,1719],{"id":1718},"macos-equivalents","macOS equivalents",[81,1721,1722,1723,1726,1727,159,1730,1726,1733,159,1736,1726,1738,114],{},"Replace ",[89,1724,1725],{},"Ctrl"," → ",[89,1728,1729],{},"Command",[89,1731,1732],{},"Alt",[89,1734,1735],{},"Option",[89,1737,1337],{},[89,1739,1740],{},"Control+Command",[125,1742],{},[76,1744,1746],{"id":1745},"plugin-system","Plugin System",[81,1748,1749,1750,1753],{},"Certain editor features can be disabled via the ",[89,1751,1752],{},"disablePlugins"," constructor parameter:",[428,1755,1756,1769],{},[431,1757,1758],{},[434,1759,1760,1766],{},[437,1761,1762,1765],{},[89,1763,1764],{},"Plugin"," enum value",[437,1767,1768],{},"Feature",[447,1770,1771,1781,1791],{},[434,1772,1773,1778],{},[452,1774,1775],{},[89,1776,1777],{},"Plugin.title",[452,1779,1780],{},"Heading (H1–H6) formatting",[434,1782,1783,1788],{},[452,1784,1785],{},[89,1786,1787],{},"Plugin.alignment",[452,1789,1790],{},"Text alignment (center, right)",[434,1792,1793,1798],{},[452,1794,1795],{},[89,1796,1797],{},"Plugin.sign",[452,1799,1800],{},"Special characters / symbol popup",[125,1802],{},[76,1804,1806],{"id":1805},"vue-integration","Vue Integration",[81,1808,1809,1810,1431,1812,943],{},"The editor is used via ",[89,1811,207],{},[89,1813,1814],{},"\u003CZEditor>",[132,1816,1820],{"className":1817,"code":1818,"language":1819,"meta":140,"style":140},"language-vue shiki shiki-themes material-theme-lighter material-theme material-theme-palenight","\u003CZEditor\n  :id=\"'my-editor-div'\"\n  :editorModel=\"editorModel\"\n  :autoSave=\"true\"\n  :toolbarFixed=\"true\"\n  :height=\"650\"\n  :disablePlugins=\"[]\"\n  :cacheKey=\"'my-key'\"\n  :redirectMarkdownEditor=\"'/markdown-route'\"\n/>\n","vue",[89,1821,1822,1829,1848,1864,1881,1896,1913,1928,1944,1960],{"__ignoreMap":140},[221,1823,1824,1826],{"class":223,"line":224},[221,1825,680],{"class":227},[221,1827,1828],{"class":683},"ZEditor\n",[221,1830,1831,1834,1837,1839,1842,1845],{"class":223,"line":239},[221,1832,1833],{"class":227},"  :",[221,1835,1836],{"class":287},"id",[221,1838,690],{"class":227},[221,1840,1841],{"class":227},"\"'",[221,1843,1844],{"class":696},"my-editor-div",[221,1846,1847],{"class":227},"'\"\n",[221,1849,1850,1852,1855,1857,1859,1861],{"class":223,"line":252},[221,1851,1833],{"class":227},[221,1853,1854],{"class":287},"editorModel",[221,1856,690],{"class":227},[221,1858,693],{"class":227},[221,1860,1854],{"class":235},[221,1862,1863],{"class":227},"\"\n",[221,1865,1866,1868,1871,1873,1875,1879],{"class":223,"line":267},[221,1867,1833],{"class":227},[221,1869,1870],{"class":287},"autoSave",[221,1872,690],{"class":227},[221,1874,693],{"class":227},[221,1876,1878],{"class":1877},"sfNiH","true",[221,1880,1863],{"class":227},[221,1882,1883,1885,1888,1890,1892,1894],{"class":223,"line":278},[221,1884,1833],{"class":227},[221,1886,1887],{"class":287},"toolbarFixed",[221,1889,690],{"class":227},[221,1891,693],{"class":227},[221,1893,1878],{"class":1877},[221,1895,1863],{"class":227},[221,1897,1898,1900,1903,1905,1907,1911],{"class":223,"line":302},[221,1899,1833],{"class":227},[221,1901,1902],{"class":287},"height",[221,1904,690],{"class":227},[221,1906,693],{"class":227},[221,1908,1910],{"class":1909},"sbssI","650",[221,1912,1863],{"class":227},[221,1914,1915,1917,1919,1921,1923,1926],{"class":223,"line":321},[221,1916,1833],{"class":227},[221,1918,1752],{"class":287},[221,1920,690],{"class":227},[221,1922,693],{"class":227},[221,1924,1925],{"class":235},"[]",[221,1927,1863],{"class":227},[221,1929,1930,1932,1935,1937,1939,1942],{"class":223,"line":332},[221,1931,1833],{"class":227},[221,1933,1934],{"class":287},"cacheKey",[221,1936,690],{"class":227},[221,1938,1841],{"class":227},[221,1940,1941],{"class":696},"my-key",[221,1943,1847],{"class":227},[221,1945,1946,1948,1951,1953,1955,1958],{"class":223,"line":365},[221,1947,1833],{"class":227},[221,1949,1950],{"class":287},"redirectMarkdownEditor",[221,1952,690],{"class":227},[221,1954,1841],{"class":227},[221,1956,1957],{"class":696},"/markdown-route",[221,1959,1847],{"class":227},[221,1961,1962],{"class":223,"line":381},[221,1963,1964],{"class":235},"/>\n",[81,1966,1967],{},[84,1968,1969],{},"Props:",[428,1971,1972,1984],{},[431,1973,1974],{},[434,1975,1976,1979,1982],{},[437,1977,1978],{},"Prop",[437,1980,1981],{},"Type",[437,1983,994],{},[447,1985,1986,2003,2017,2031,2044,2058,2072,2085],{},[434,1987,1988,1992,1997],{},[452,1989,1990],{},[89,1991,1836],{},[452,1993,1994],{},[89,1995,1996],{},"string",[452,1998,1999,2000],{},"ID of the internal container ",[89,2001,2002],{},"\u003Cdiv>",[434,2004,2005,2009,2014],{},[452,2006,2007],{},[89,2008,1854],{},[452,2010,2011],{},[89,2012,2013],{},"BaseEditorModal",[452,2015,2016],{},"Page-level model controlling save/load logic",[434,2018,2019,2023,2028],{},[452,2020,2021],{},[89,2022,1870],{},[452,2024,2025],{},[89,2026,2027],{},"boolean",[452,2029,2030],{},"Enable auto-save callback",[434,2032,2033,2037,2041],{},[452,2034,2035],{},[89,2036,1887],{},[452,2038,2039],{},[89,2040,2027],{},[452,2042,2043],{},"Stick toolbar to top of viewport",[434,2045,2046,2050,2055],{},[452,2047,2048],{},[89,2049,1902],{},[452,2051,2052],{},[89,2053,2054],{},"number",[452,2056,2057],{},"Fixed editor height (px). Omit for auto",[434,2059,2060,2064,2069],{},[452,2061,2062],{},[89,2063,1752],{},[452,2065,2066],{},[89,2067,2068],{},"Plugin[]",[452,2070,2071],{},"Features to disable",[434,2073,2074,2078,2082],{},[452,2075,2076],{},[89,2077,1934],{},[452,2079,2080],{},[89,2081,1996],{},[452,2083,2084],{},"Cache key for editor store",[434,2086,2087,2091,2095],{},[452,2088,2089],{},[89,2090,1950],{},[452,2092,2093],{},[89,2094,1996],{},[452,2096,2097],{},"Route name to redirect to markdown mode",[81,2099,2100],{},[84,2101,2102,2103,943],{},"Associated popups (auto-rendered inside ",[89,2104,1814],{},[151,2106,2107,2113,2119,2125,2131],{},[154,2108,2109,2112],{},[89,2110,2111],{},"EditorHelpPopup"," — keyboard shortcut help",[154,2114,2115,2118],{},[89,2116,2117],{},"EditorLinkPopup"," — hyperlink creation dialog",[154,2120,2121,2124],{},[89,2122,2123],{},"EditorRefPopup"," — reference / citation dialog",[154,2126,2127,2130],{},[89,2128,2129],{},"EditorCaptionPopup"," — image / table caption editor",[154,2132,2133,2136],{},[89,2134,2135],{},"EditorSidebarLeft"," — left sidebar (sign groups, navigation)",[125,2138],{},[76,2140,2142],{"id":2141},"external-dependencies","External Dependencies",[428,2144,2145,2155],{},[431,2146,2147],{},[434,2148,2149,2152],{},[437,2150,2151],{},"Package",[437,2153,2154],{},"Used For",[447,2156,2157,2167,2177],{},[434,2158,2159,2164],{},[452,2160,2161],{},[89,2162,2163],{},"jquery",[452,2165,2166],{},"DOM queries throughout the editor",[434,2168,2169,2174],{},[452,2170,2171],{},[89,2172,2173],{},"prismjs",[452,2175,2176],{},"Syntax highlighting engine",[434,2178,2179,2183],{},[452,2180,2181],{},[89,2182,1032],{},[452,2184,2185,2187,2188,2191,2192,159,2194,2197,2198,2200,2201],{},[89,2186,1243],{}," (live code editing), ",[89,2189,2190],{},"Markdown"," converter, ",[89,2193,1351],{},[89,2195,2196],{},"Codet"," (code formatter), ",[89,2199,1443],{}," (HTML sanitiser), ",[89,2202,2203],{},"list-normalizer",[125,2205],{},[76,2207,2209],{"id":2208},"key-methods-reference","Key Methods Reference",[81,2211,2212,2213,2215,2216,2218,2219,2222,2223,2225,2226,2229,2230,2233,2234,2237,2238,1647,2241,2244,2245,1647,2248,2251,2252,1647,2255,2258,2259,2262,2263,2266,2267,2270,2271,2274,2275,2278,2279,2282,2283,2286,2287,2290,2291,2294],{},"| Method                                             | Description                                                        |\n| -------------------------------------------------- | ------------------------------------------------------------------ | --------- | -------------------------------- |\n| ",[89,2214,190],{},"                                     | Returns ",[89,2217,1042],{},"                            |\n| ",[89,2220,2221],{},"setContent(arg)","                                  | Accepts HTML string or ",[89,2224,1057],{},"                               |\n| ",[89,2227,2228],{},"setEmpty()","                                       | Clears the editor                                                  |\n| ",[89,2231,2232],{},"pasteHTML(html, selection?)","                      | Inserts HTML at caret position                                     |\n| ",[89,2235,2236],{},"pasteHTMLSpecial(el)","                             | Inserts block elements (tables, HR, code) with trailing empty line |\n| ",[89,2239,2240],{},"saveCaretPosition()",[89,2242,2243],{},"restoreCaretPosition()","   | Saves/restores caret before toolbar interactions                   |\n| ",[89,2246,2247],{},"undo()",[89,2249,2250],{},"redo()","                                | Async undo/redo with code block support                            |\n| ",[89,2253,2254],{},"insertLineBefore(line)",[89,2256,2257],{},"insertLineAfter(line)"," | DOM line insertion helpers                                         |\n| ",[89,2260,2261],{},"getLine(element)","                                 | Walks up DOM to find the nearest direct child of the editor        |\n| ",[89,2264,2265],{},"GetElementInCursor()","                             | Returns the element currently focused by the caret                 |\n| ",[89,2268,2269],{},"isSelectingText()","                                | True if user has an active text selection                          |\n| ",[89,2272,2273],{},"align('left'                                      | 'center'                                                           | 'right')"," | Aligns the current block element |\n| ",[89,2276,2277],{},"setHeader(HeaderName)","                            | Changes the current line's tag (P, H1–H6)                          |\n| ",[89,2280,2281],{},"caption()","                                        | Opens caption editor for the selected image or table               |\n| ",[89,2284,2285],{},"unprotected(callback)","                            | Temporarily suspends ",[89,2288,2289],{},"onDOMChange"," observer                        |\n| ",[89,2292,2293],{},"static fixContent(html)","                          | Normalises raw HTML before loading into editor                     |",[125,2296],{},[76,2298,2300],{"id":2299},"supported-block-element-types","Supported Block Element Types",[81,2302,2303,2304,2306],{},"Inside the ",[89,2305,1008],{}," container, valid top-level elements are:",[151,2308,2309,2314,2323,2336,2342,2348,2354],{},[154,2310,2311,2313],{},[89,2312,1555],{}," — paragraph (default)",[154,2315,2316,1563,2319,2322],{},[89,2317,2318],{},"\u003Ch1>",[89,2320,2321],{},"\u003Ch6>"," — headings",[154,2324,2325,1647,2328,2331,2332,2335],{},[89,2326,2327],{},"\u003Cul>",[89,2329,2330],{},"\u003Col>"," containing ",[89,2333,2334],{},"\u003Cli>"," — lists (supports nesting)",[154,2337,2338,2341],{},[89,2339,2340],{},"\u003Cdiv class=\"prism-live\">"," — code block container",[154,2343,2344,2347],{},[89,2345,2346],{},"\u003Ctable>"," — table",[154,2349,2350,2353],{},[89,2351,2352],{},"\u003Chr>"," — horizontal rule",[154,2355,2356,2359],{},[89,2357,2358],{},"\u003Cblockquote>"," — blockquote",[81,2361,2362,2363,2365,2366,2368,2369,114],{},"Orphan ",[89,2364,2002],{}," elements are automatically converted to ",[89,2367,1555],{}," via ",[89,2370,2371],{},"convertLine_DIVtoP()",[125,2373],{},[76,2375,2377],{"id":2376},"important-behaviours","Important Behaviours",[151,2379,2380,2389,2394,2401,2411,2418],{},[154,2381,2382,1431,2385,2388],{},[84,2383,2384],{},"Zero-width spaces",[89,2386,2387],{},"\\u200B",") are used as placeholder characters inside empty inline elements to preserve caret positioning.",[154,2390,2391,2393],{},[89,2392,2289],{}," (MutationObserver) fires on every content change to update image lists, table lists, and trigger autosave.",[154,2395,2396,2397,2400],{},"Line heights are calculated once at construction time (",[89,2398,2399],{},"heightOfSingleLine",") for scroll-to-caret logic.",[154,2402,2403,2404,1647,2407,2410],{},"Auto-scroll (",[89,2405,2406],{},"autoScrollDown",[89,2408,2409],{},"autoScrollUp",") keeps the caret visible as the user types.",[154,2412,2413,2414,2417],{},"Triple-click selection is handled manually via ",[89,2415,2416],{},"onTripleClick"," to ensure consistent cross-browser behaviour.",[154,2419,2420],{},"Drag-and-drop of text/images inside the editor is disabled to prevent unintended moves.",[2422,2423,2424],"style",{},"html pre.shiki code .sMK4o, html code.shiki .sMK4o{--shiki-light:#39ADB5;--shiki-default:#89DDFF;--shiki-dark:#89DDFF}html pre.shiki code .s2Zo4, html code.shiki .s2Zo4{--shiki-light:#6182B8;--shiki-default:#82AAFF;--shiki-dark:#82AAFF}html pre.shiki code .sTEyZ, html code.shiki .sTEyZ{--shiki-light:#90A4AE;--shiki-default:#EEFFFF;--shiki-dark:#BABED8}html pre.shiki code .sHwdD, html code.shiki .sHwdD{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#546E7A;--shiki-default-font-style:italic;--shiki-dark:#676E95;--shiki-dark-font-style:italic}html pre.shiki code .spNyl, html code.shiki .spNyl{--shiki-light:#9C3EDA;--shiki-default:#C792EA;--shiki-dark:#C792EA}html pre.shiki code .sHdIc, html code.shiki .sHdIc{--shiki-light:#90A4AE;--shiki-light-font-style:italic;--shiki-default:#EEFFFF;--shiki-default-font-style:italic;--shiki-dark:#BABED8;--shiki-dark-font-style:italic}html pre.shiki code .sBMFI, html code.shiki .sBMFI{--shiki-light:#E2931D;--shiki-default:#FFCB6B;--shiki-dark:#FFCB6B}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 .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 .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 .swJcz, html code.shiki .swJcz{--shiki-light:#E53935;--shiki-default:#F07178;--shiki-dark:#F07178}html pre.shiki code .sfazB, html code.shiki .sfazB{--shiki-light:#91B859;--shiki-default:#C3E88D;--shiki-dark:#C3E88D}html pre.shiki code .sfNiH, html code.shiki .sfNiH{--shiki-light:#FF5370;--shiki-default:#FF9CAC;--shiki-dark:#FF9CAC}html pre.shiki code .sbssI, html code.shiki .sbssI{--shiki-light:#F76D47;--shiki-default:#F78C6C;--shiki-dark:#F78C6C}",{"title":140,"searchDepth":224,"depth":239,"links":2426},[2427,2428,2433,2434,2435,2439,2440,2441,2442,2443,2447,2448,2449,2450,2451,2452],{"id":78,"depth":239,"text":79},{"id":129,"depth":239,"text":130,"children":2429},[2430,2431,2432],{"id":144,"depth":252,"text":113},{"id":199,"depth":252,"text":86},{"id":402,"depth":252,"text":109},{"id":419,"depth":239,"text":420},{"id":667,"depth":239,"text":668},{"id":978,"depth":239,"text":979,"children":2436},[2437],{"id":1054,"depth":252,"text":2438},"EditorState (state snapshot for undo/redo)",{"id":1181,"depth":239,"text":1182},{"id":1233,"depth":239,"text":29},{"id":1363,"depth":239,"text":1364},{"id":1407,"depth":239,"text":1408},{"id":1464,"depth":239,"text":1465,"children":2444},[2445,2446],{"id":1468,"depth":252,"text":1469},{"id":1718,"depth":252,"text":1719},{"id":1745,"depth":239,"text":1746},{"id":1805,"depth":239,"text":1806},{"id":2141,"depth":239,"text":2142},{"id":2208,"depth":239,"text":2209},{"id":2299,"depth":239,"text":2300},{"id":2376,"depth":239,"text":2377},"md",null,{},true,{"title":39,"description":140},"1KbvbSWTIOdH-KeGYRno69z4LbFRS8YR4RWIDfffbSE",[2460,2462],{"title":34,"path":35,"stem":36,"description":2461,"icon":37,"children":-1},"Hướng dẫn sử dụng directive v-tooltip để hiển thị ghi chú.",{"title":48,"path":49,"stem":50,"description":140,"children":-1},1775281258480]