[{"data":1,"prerenderedAt":274},["ShallowReactive",2],{"docs:\u002Fdocs\u002Fguides\u002Fcustom-plugin":3},{"id":4,"title":5,"body":6,"description":264,"extension":265,"meta":266,"navigation":269,"path":270,"seo":271,"stem":272,"__hash__":273},"docs\u002Fdocs\u002Fguides\u002Fcustom-plugin.md","Собственный плагин",{"type":7,"value":8,"toc":260},"minimark",[9,14,236,240,244,247,256],[10,11,13],"h2",{"id":12},"минимальное-расширение","Минимальное расширение",[15,16,21],"pre",{"className":17,"code":18,"language":19,"meta":20,"style":20},"language-ts shiki shiki-themes github-dark","import { PLUGIN_API_VERSION } from '@vitext-ru\u002Feditor';\nconst remove = editor.usePlugin({\n  id: 'my-format', version: '1.0.0', apiVersion: PLUGIN_API_VERSION,\n  setup(api) {\n    api.registerCommand('bold', () => api.execute('bold'));\n    api.on('change', event => console.log(event.revision));\n    return () => { \u002F* освободите собственные таймеры *\u002F };\n  }\n});\neditor.executePluginCommand('my-format', 'bold');\nremove();\n","ts","",[22,23,24,47,70,94,110,143,174,195,201,207,227],"code",{"__ignoreMap":20},[25,26,29,33,37,40,44],"span",{"class":27,"line":28},"line",1,[25,30,32],{"class":31},"snl16","import",[25,34,36],{"class":35},"s95oV"," { PLUGIN_API_VERSION } ",[25,38,39],{"class":31},"from",[25,41,43],{"class":42},"sU2Wk"," '@vitext-ru\u002Feditor'",[25,45,46],{"class":35},";\n",[25,48,50,53,57,60,63,67],{"class":27,"line":49},2,[25,51,52],{"class":31},"const",[25,54,56],{"class":55},"sDLfK"," remove",[25,58,59],{"class":31}," =",[25,61,62],{"class":35}," editor.",[25,64,66],{"class":65},"svObZ","usePlugin",[25,68,69],{"class":35},"({\n",[25,71,73,76,79,82,85,88,91],{"class":27,"line":72},3,[25,74,75],{"class":35},"  id: ",[25,77,78],{"class":42},"'my-format'",[25,80,81],{"class":35},", version: ",[25,83,84],{"class":42},"'1.0.0'",[25,86,87],{"class":35},", apiVersion: ",[25,89,90],{"class":55},"PLUGIN_API_VERSION",[25,92,93],{"class":35},",\n",[25,95,97,100,103,107],{"class":27,"line":96},4,[25,98,99],{"class":65},"  setup",[25,101,102],{"class":35},"(",[25,104,106],{"class":105},"s9osk","api",[25,108,109],{"class":35},") {\n",[25,111,113,116,119,121,124,127,130,133,136,138,140],{"class":27,"line":112},5,[25,114,115],{"class":35},"    api.",[25,117,118],{"class":65},"registerCommand",[25,120,102],{"class":35},[25,122,123],{"class":42},"'bold'",[25,125,126],{"class":35},", () ",[25,128,129],{"class":31},"=>",[25,131,132],{"class":35}," api.",[25,134,135],{"class":65},"execute",[25,137,102],{"class":35},[25,139,123],{"class":42},[25,141,142],{"class":35},"));\n",[25,144,146,148,151,153,156,159,162,165,168,171],{"class":27,"line":145},6,[25,147,115],{"class":35},[25,149,150],{"class":65},"on",[25,152,102],{"class":35},[25,154,155],{"class":42},"'change'",[25,157,158],{"class":35},", ",[25,160,161],{"class":105},"event",[25,163,164],{"class":31}," =>",[25,166,167],{"class":35}," console.",[25,169,170],{"class":65},"log",[25,172,173],{"class":35},"(event.revision));\n",[25,175,177,180,183,185,188,192],{"class":27,"line":176},7,[25,178,179],{"class":31},"    return",[25,181,182],{"class":35}," () ",[25,184,129],{"class":31},[25,186,187],{"class":35}," { ",[25,189,191],{"class":190},"sAwPA","\u002F* освободите собственные таймеры *\u002F",[25,193,194],{"class":35}," };\n",[25,196,198],{"class":27,"line":197},8,[25,199,200],{"class":35},"  }\n",[25,202,204],{"class":27,"line":203},9,[25,205,206],{"class":35},"});\n",[25,208,210,213,216,218,220,222,224],{"class":27,"line":209},10,[25,211,212],{"class":35},"editor.",[25,214,215],{"class":65},"executePluginCommand",[25,217,102],{"class":35},[25,219,78],{"class":42},[25,221,158],{"class":35},[25,223,123],{"class":42},[25,225,226],{"class":35},");\n",[25,228,230,233],{"class":27,"line":229},11,[25,231,232],{"class":65},"remove",[25,234,235],{"class":35},"();\n",[237,238,239],"p",{},"Id\u002Fкоманда: буквы\u002Fцифры\u002Fточка\u002Fдефис\u002Fподчёркивание, первая буква. Setup синхронный; версия метаданных — непустая строка. Signal отменяется при remove\u002Fdestroy. Cleanup не должен вызывать отозванный фасад.",[10,241,243],{"id":242},"вклады-в-интерфейс","Вклады в интерфейс",[237,245,246],{},"registerStatusItem(text, severity?) возвращает updater; severity normal\u002Fwarning. registerToolbarMenu принимает label\u002Fcaption\u002Fitems с уже зарегистрированными командами. registerDialog принимает поля text\u002Fcheckbox, actions и callbacks; handle предоставляет open\u002Fclose\u002Fmessage. RegisterSpellcheck(language) возвращает setter boolean. Хост освобождает UI автоматически.",[237,248,249,250,255],{},"Произвольный DOM, расширение схемы и async setup не входят в этот контракт. Изменяйте документ через публичные операции, сохраняя историю и revision. При ошибке установки хост очищает созданные ресурсы. ",[251,252,254],"a",{"href":253},"\u002Fdocs\u002Fplugins\u002Foverview","Обзор",".",[257,258,259],"style",{},"html pre.shiki code .snl16, html code.shiki .snl16{--shiki-default:#F97583}html pre.shiki code .s95oV, html code.shiki .s95oV{--shiki-default:#E1E4E8}html pre.shiki code .sU2Wk, html code.shiki .sU2Wk{--shiki-default:#9ECBFF}html pre.shiki code .sDLfK, html code.shiki .sDLfK{--shiki-default:#79B8FF}html pre.shiki code .svObZ, html code.shiki .svObZ{--shiki-default:#B392F0}html pre.shiki code .s9osk, html code.shiki .s9osk{--shiki-default:#FFAB70}html pre.shiki code .sAwPA, html code.shiki .sAwPA{--shiki-default:#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);}",{"title":20,"searchDepth":49,"depth":49,"links":261},[262,263],{"id":12,"depth":49,"text":13},{"id":242,"depth":49,"text":243},"Минимальный API 1 с командой и управляемыми ресурсами.","md",{"group":267,"order":268},"Интеграции",61,true,"\u002Fdocs\u002Fguides\u002Fcustom-plugin",{"title":5,"description":264},"docs\u002Fguides\u002Fcustom-plugin","0-0cJEUujUem4VcgEDZ9weCQ-30CwvinyIU8KfUsfMA",1792670389277]