md-editor-rt
Version:
Markdown editor for react, developed in jsx and typescript, dark theme、beautify content by prettier、render articles directly、paste or clip the picture and upload it...
40 lines (39 loc) • 65.6 kB
JavaScript
"use strict";const a=require("react/jsx-runtime"),s=require("react"),r=require("./config.cjs"),te=require("@vavt/util"),$=require("./index2.cjs"),T=require("./context.cjs"),ce=require("./index3.cjs"),V=require("./hooks.cjs"),B=require("@codemirror/commands"),ze=require("@codemirror/lang-markdown"),Ke=require("@codemirror/language-data"),j=require("@codemirror/state"),A=require("@codemirror/view"),i=require("./event-bus.cjs"),X=require("@codemirror/language"),Ge=require("@codemirror/autocomplete"),Ue=require("@codemirror/search"),Ze=require("react-dom/client"),Ye=require("./dom.cjs"),k=require("./index.cjs"),J=require("./index4.cjs"),b=require("@lezer/highlight"),Xe=e=>{const t=s.useRef(null),n=s.useRef(null),o=s.useRef(null),l=s.useRef(null),c=s.useRef(!1),u=s.useRef(0),d=s.useRef(0),f=s.useCallback(()=>{if(!n.current||!t.current||!o.current||!l.current)return;const C=t.current.clientHeight,E=n.current.scrollHeight,I=n.current.scrollTop;if(E<=C){o.current.style.display="none",e.alwaysShowTrack||(l.current.style.display="none");return}else o.current.style.display="block",l.current.style.display="block";const N=C/E,M=Math.max(C*N,20),D=C-M,L=Math.min(I*N,D);o.current.style.height=`${M}px`,o.current.style.top=`${L}px`},[e.alwaysShowTrack]),m=f,g=s.useCallback(C=>{c.current=!0,u.current=C.clientY,d.current=n.current.scrollTop,document.body.style.userSelect="none"},[]),x=s.useCallback(C=>{if(!c.current||!n.current||!t.current)return;const E=C.clientY-u.current,I=n.current.scrollHeight/t.current.clientHeight;n.current.scrollTop=d.current+E*I},[d,u]),h=s.useCallback(()=>{c.current=!1,document.body.style.userSelect=""},[]),p=s.useCallback(C=>{n.current&&n.current.removeEventListener("scroll",m),n.current=C,n.current?(n.current.addEventListener("scroll",m),f()):l.current&&!e.alwaysShowTrack&&(l.current.style.display="none")},[m,e.alwaysShowTrack,f]),w=s.useCallback(()=>{if(!t.current)return;const C=e.scrollTarget?t.current.querySelector(e.scrollTarget):t.current.firstElementChild;p(C)},[p,e.scrollTarget]);return s.useEffect(()=>{w();const C=o.current;let E=null;const I=new MutationObserver(()=>{E&&cancelAnimationFrame(E),E=requestAnimationFrame(()=>{w()})});return I.observe(t.current,{childList:!0,subtree:!0}),window.addEventListener("resize",f),C?.addEventListener("mousedown",g),document.addEventListener("mousemove",x),document.addEventListener("mouseup",h),()=>{I?.disconnect(),n.current&&n.current.removeEventListener("scroll",m),window.removeEventListener("resize",f),C?.removeEventListener("mousedown",g),document.removeEventListener("mousemove",x),document.removeEventListener("mouseup",h)}},[w,g,x,h,m,f]),a.jsxs("div",{id:e.id,className:$.classnames([`${r.prefix}-custom-scrollbar`,e.className]),style:e.style,ref:t,onMouseEnter:e.onMouseEnter,onMouseLeave:e.onMouseLeave,children:[e.children,a.jsx("div",{className:`${r.prefix}-custom-scrollbar__track`,ref:l,children:a.jsx("div",{className:`${r.prefix}-custom-scrollbar__thumb`,ref:o})})]})},ae=s.memo(Xe),Je=(e,t,n)=>{const{editorId:o,setting:l}=s.useContext(T.EditorContext),[c,u]=s.useState({clear(){},init(){}});s.useEffect(()=>{const d=n.current?.view.contentDOM.getRootNode(),f=d?.querySelector(`#${o} .cm-scroller`),m=d?.querySelector(`[id="${o}-preview-wrapper"]`),g=d?.querySelector(`[id="${o}-html-wrapper"]`);if(m||g){const x=m?ce.scrollAuto:ce.scrollAutoWithScale,h=m||g,[p,w]=x(f,h,n.current);u({init:p,clear:w})}},[t,l.fullscreen,l.pageFullscreen,l.preview,l.htmlPreview,o,n]),s.useEffect(()=>(e.scrollAuto&&!l.previewOnly&&(l.preview||l.htmlPreview)?c.init():c.clear(),()=>{c.clear()}),[c,e.scrollAuto,l.preview,l.htmlPreview,l.previewOnly])},se=async(e,t,n)=>{if(/^h[1-6]$/.test(e))return Qe(e,t);if(e==="prettier")return await et(t,n);switch(e){case"bold":case"underline":case"italic":case"strikeThrough":case"sub":case"sup":case"codeRow":case"katexInline":case"katexBlock":return ot(e,t);case"quote":case"orderedList":case"unorderedList":case"task":return nt(e,t);case"code":return at(n,t);case"table":return it(n);case"link":{const{desc:o="",url:l=""}=n,c=`[${o}](${l})`;return{text:c,options:{select:l==="",deviationStart:c.length-l.length-1,deviationEnd:-1}}}case"image":return lt(n);case"flow":case"sequence":case"gantt":case"class":case"state":case"pie":case"relationship":case"journey":return st(e);case"universal":return ct(t.getSelectedText(),n);default:return{text:"",options:{}}}},Qe=(e,t)=>{const n=e.slice(1),o="#".repeat(Number(n)),[l,c,u]=de(t,{wholeLine:!0});return{text:`${o} ${l}`,options:{deviationStart:o.length+1,replaceStart:c,replaceEnd:u}}},et=async(e,t)=>{const n=window.prettier||r.globalConfig.editorExtensions.prettier?.prettierInstance,o=[window.prettierPlugins?.markdown||r.globalConfig.editorExtensions.prettier?.parserMarkdownInstance];return!n||!o[0]?(i.bus.emit(t.editorId,i.ERROR_CATCHER,{name:"prettier",message:"prettier is undefined"}),{text:e.getValue(),options:{select:!1,replaceAll:!0}}):{text:await n.format(e.getValue(),{parser:"markdown",plugins:o}),options:{select:!1,replaceAll:!0}}},tt={bold:["**","**",2,-2],underline:["<u>","</u>",3,-4],italic:["*","*",1,-1],strikeThrough:["~~","~~",2,-2],sub:["~","~",1,-1],sup:["^","^",1,-1],codeRow:["`","`",1,-1],katexInline:["$","$",1,-1],katexBlock:[`
$$
`,`
$$
`,4,-4]},ot=(e,t)=>{const n=t.getSelectedText(),[o,l,c,u]=tt[e];return{text:`${o}${n}${l}`,options:{deviationStart:c,deviationEnd:u}}},rt={quote:"> ",unorderedList:"- ",orderedList:1,task:"- [ ] "},nt=(e,t)=>{const[n,o,l]=de(t,{wholeLine:!0}),c=n.split(`
`),u=rt[e],d=e==="orderedList"?c.map((g,x)=>`${u+x}. ${g}`):c.map(g=>`${u}${g}`),f=e==="orderedList"?"1. ":u.toString(),m=c.length===1?f.length:0;return{text:d.join(`
`),options:{deviationStart:m,replaceStart:o,replaceEnd:l}}},at=(e,t)=>{const[n,o,l]=de(t),c=e.mode||"language",u=`
\`\`\`${c}
${e.text||n||""}
\`\`\`
`;return{text:u,options:{deviationStart:4,deviationEnd:4+c.length-u.length,replaceStart:o,replaceEnd:l}}},st=e=>({text:`
\`\`\`mermaid
${{flow:`flowchart TD
Start --> Stop`,sequence:`sequenceDiagram
A->>B: hello!
B-->>A: hi!`,gantt:`gantt
title Gantt Chart
dateFormat YYYY-MM-DD`,class:`classDiagram
class Animal`,state:`stateDiagram-v2
s1 --> s2`,pie:`pie
"Dogs" : 386
"Cats" : 85
"Rats" : 15`,relationship:`erDiagram
CAR ||--o{ NAMED-DRIVER : allows`,journey:`journey
title My Journey`,...r.globalConfig.editorConfig.mermaidTemplate}[e]}
\`\`\`
`,options:{deviationStart:12,deviationEnd:-5}}),lt=e=>{const{desc:t="",url:n="",urls:o}=e;let l="";const c=n===""&&(!o||o instanceof Array&&o.length===0);return o instanceof Array?l=o.reduce((u,d)=>{const{url:f="",alt:m="",title:g=""}=typeof d=="object"?d:{url:d};return u+`
`},""):l=`
`,{text:l,options:{select:n==="",deviationStart:c?l.length-n.length-2:l.length,deviationEnd:c?-2:0}}},it=e=>{const{selectedShape:t={x:1,y:1}}=e,{x:n,y:o}=t;let l=`
| Column`;for(let c=0;c<=o;c++)l+=" |";l+=`
|`;for(let c=0;c<=o;c++)l+=" - |";for(let c=0;c<=n;c++){l+=`
|`;for(let u=0;u<=o;u++)l+=" |"}return l+=`
`,{text:l,options:{deviationStart:3,deviationEnd:10-l.length}}},ct=(e,t)=>{const{generate:n}=t,o=n(e);return{text:o.targetValue,options:{select:o.select??!0,deviationStart:o.deviationStart||0,deviationEnd:o.deviationEnd||0}}},de=(e,t={wholeLine:!1})=>{const n=e.view.state,o=n.selection.main;if(o.empty){const l=n.doc.lineAt(o.from);return[n.doc.lineAt(o.from).text,l.from,l.to]}else if(t.wholeLine){const l=n.doc.lineAt(o.from),c=n.doc.lineAt(o.to);return[n.doc.sliceString(l.from,c.to),l.from,c.to]}return[n.doc.sliceString(o.from,o.to),o.from,o.to]},K=e=>{const t=new j.Compartment;return o=>(t.get(e.state)?e.dispatch({effects:t.reconfigure(o)}):e.dispatch({effects:j.StateEffect.appendConfig.of(t.of(o))}),!0)};class ut{view;maxLength=Number.MAX_SAFE_INTEGER;toggleTabSize;togglePlaceholder;setExtensions;toggleDisabled;toggleReadOnly;toggleMaxlength;getValue(){return this.view.state.doc.toString()}setValue(t,n=0,o=this.view.state.doc.length){this.view.dispatch({changes:{from:n,to:o,insert:t}})}getSelectedText(){const{from:t,to:n}=this.view.state.selection.main;return this.view.state.sliceDoc(t,n)}replaceSelectedText(t,n,o){const l={select:!0,deviationStart:0,deviationEnd:0,replaceAll:!1,replaceStart:-1,replaceEnd:-1,...n};try{if(l.replaceAll){if(this.setValue(t),t.length>this.maxLength)throw new Error("The input text is too long");return}if(this.view.state.doc.length-this.getSelectedText().length+t.length>this.maxLength)throw new Error("The input text is too long");const{from:c}=this.view.state.selection.main;l.replaceStart!==-1?this.view.dispatch({changes:{from:l.replaceStart,to:l.replaceEnd,insert:t}}):this.view.dispatch(this.view.state.replaceSelection(t)),l.select&&this.view.dispatch({selection:{anchor:l.replaceStart===-1?c+l.deviationStart:l.replaceStart+l.deviationStart,head:l.replaceStart===-1?c+t.length+l.deviationEnd:l.replaceStart+t.length+l.deviationEnd}}),this.view.focus()}catch(c){if(c.message==="The input text is too long")i.bus.emit(o,i.ERROR_CATCHER,{name:"overlength",message:c.message,data:t});else throw c}}constructor(t){this.view=t,this.toggleTabSize=K(this.view),this.togglePlaceholder=K(this.view),this.setExtensions=K(this.view),this.toggleDisabled=K(this.view),this.toggleReadOnly=K(this.view),this.toggleMaxlength=K(this.view)}setTabSize(t){this.toggleTabSize([j.EditorState.tabSize.of(t),X.indentUnit.of(" ".repeat(t))])}setPlaceholder(t){this.togglePlaceholder(A.placeholder(t))}focus(t){if(this.view.focus(),!t)return;let n=0,o=0,l=0;switch(t){case"start":break;case"end":{n=o=l=this.getValue().length;break}default:n=t.rangeAnchor||t.cursorPos,o=t.rangeHead||t.cursorPos,l=t.cursorPos}this.view.dispatch({scrollIntoView:!0,selection:j.EditorSelection.create([j.EditorSelection.range(n,o),j.EditorSelection.cursor(l)],1)})}setDisabled(t){this.toggleDisabled([A.EditorView.editable.of(!t)])}setReadOnly(t){this.toggleReadOnly([j.EditorState.readOnly.of(t)])}setMaxLength(t){this.maxLength=t,this.toggleMaxlength([j.EditorState.changeFilter.of(n=>n.newDoc.length<=t)])}}const dt=(e,t)=>{const{editorId:n}=s.useContext(T.EditorContext),o=s.useCallback(c=>{c instanceof Promise?c.then(u=>{i.bus.emit(n,i.REPLACE,"universal",{generate(){return{targetValue:u}}})}).catch(u=>{console.error(u)}):i.bus.emit(n,i.REPLACE,"universal",{generate(){return{targetValue:c}}})},[n]);return s.useCallback(c=>{if(!c.clipboardData)return;if(c.clipboardData.files.length>0){const{files:h}=c.clipboardData;i.bus.emit(n,i.UPLOAD_IMAGE,Array.from(h).filter(p=>/image\/.*/.test(p.type))),c.preventDefault();return}const u=c.clipboardData.getData("text/plain"),d=t.current?.view.state.selection.main.to||0,f=t.current?.view.state.doc.lineAt(d).from||0,m=t.current?.view.state.doc.sliceString(f,d)||"",g=/!\[.*\]\(\s*$/.test(m),x=/!\[.*\]\((.*)\s?.*\)/.test(u);if(g){const h=e.transformImgUrl(u);o(h),c.preventDefault();return}else if(x){const h=u.match(new RegExp(`(?<=!\\[.*\\]\\()([^)\\s]+)(?=\\s?["']?.*["']?\\))`,"g"));h?Promise.all(h.map(p=>e.transformImgUrl(p))).then(p=>{o(p.reduce((w,C,E)=>w.replace(h[E],C),u))}).catch(p=>{console.error(p)}):o(u),c.preventDefault();return}if(e.autoDetectCode&&c.clipboardData.types.includes("vscode-editor-data")){const h=JSON.parse(c.clipboardData.getData("vscode-editor-data"));i.bus.emit(n,i.REPLACE,"code",{mode:h.mode,text:c.clipboardData.getData("text/plain")}),c.preventDefault();return}e.maxLength&&u.length+e.modelValue.length>e.maxLength&&i.bus.emit(n,i.ERROR_CATCHER,{name:"overlength",message:"The input text is too long",data:u})},[t,n,o,e])},ee=(e,t,n,o,l)=>(c,u,d,f)=>{const m=`${e}${t}${n}${o}`,g=d+u.label.length+(l==="title"?n.length:0);c.dispatch({changes:{from:d,to:f,insert:m},selection:j.EditorSelection.create([j.EditorSelection.range(d+u.label.length+(l==="title"?1:-t.length),g),j.EditorSelection.cursor(g)],1)}),c.focus()},Ee=e=>(t,n,o,l)=>{const c=e.slice(l-o);t.dispatch(t.state.replaceSelection(`${c} `))},we=e=>{const t=n=>{const o=n.matchBefore(/^#+|^-\s*\[*\s*\]*|`+|\[|!\[*|^\|\s?\|?|\$\$?|!+\s*\w*/);return o===null||o.from==o.to&&n.explicit?null:{from:o.from,options:[...["h2","h3","h4","h5","h6"].map((l,c)=>{const u=new Array(c+2).fill("#").join("");return{label:u,type:"text",apply:Ee(u)}}),...["unchecked","checked"].map(l=>{const c=l==="checked"?"- [x]":"- [ ]";return{label:c,type:"text",apply:Ee(c)}}),...[["`",""],["```","language"],["```mermaid\n",""],["```echarts\n",""]].map(l=>({label:`${l[0]}${l[1]}`,type:"text",apply:ee(l[0],l[1],"",l[0]==="`"?"`":"\n```","type")})),{label:"[]()",type:"text"},{label:"![]()",type:"text"},{label:"| |",type:"text",detail:"table",apply:`| col | col | col |
| - | - | - |
| content | content | content |
| content | content | content |`},{label:"$",type:"text",apply:ee("$","","","$","type")},{label:"$$",type:"text",apply:ee("$$","",`
`,`
$$`,"title")},...["note","abstract","info","tip","success","question","warning","failure","danger","bug","example","quote","hint","caution","error","attention"].map(l=>({label:`!!! ${l}`,type:"text",apply:ee("!!!",` ${l}`," Title",`
!!!`,"title")}))]}};return Ge.autocompletion({override:e?[t,...e]:[t]})},mt=(e,t)=>{const n={key:"Ctrl-b",mac:"Cmd-b",run:()=>(i.bus.emit(e,i.REPLACE,"bold"),!0)},o={key:"Ctrl-s",mac:"Cmd-s",run:D=>(i.bus.emit(e,i.ON_SAVE,D.state.doc.toString()),!0),shift:()=>(i.bus.emit(e,i.REPLACE,"strikeThrough"),!0)},l={key:"Ctrl-u",mac:"Cmd-u",preventDefault:!0,run:()=>(i.bus.emit(e,i.REPLACE,"underline"),!0),shift:()=>(i.bus.emit(e,i.REPLACE,"unorderedList"),!0)},c={key:"Ctrl-i",mac:"Cmd-i",preventDefault:!0,run:()=>(i.bus.emit(e,i.REPLACE,"italic"),!0),shift:()=>(i.bus.emit(e,i.REPLACE,"image"),!0)},u={key:"Ctrl-1",mac:"Cmd-1",run:()=>(i.bus.emit(e,i.REPLACE,"h1"),!0)},d={key:"Ctrl-2",mac:"Cmd-2",run:()=>(i.bus.emit(e,i.REPLACE,"h2"),!0)},f={key:"Ctrl-3",mac:"Cmd-3",run:()=>(i.bus.emit(e,i.REPLACE,"h3"),!0)},m={key:"Ctrl-4",mac:"Cmd-4",run:()=>(i.bus.emit(e,i.REPLACE,"h4"),!0)},g={key:"Ctrl-5",mac:"Cmd-5",run:()=>(i.bus.emit(e,i.REPLACE,"h5"),!0)},x={key:"Ctrl-6",mac:"Cmd-6",run:()=>(i.bus.emit(e,i.REPLACE,"h6"),!0)},h={key:"Ctrl-ArrowUp",mac:"Cmd-ArrowUp",run:()=>(i.bus.emit(e,i.REPLACE,"sup"),!0)},p={key:"Ctrl-ArrowDown",mac:"Cmd-ArrowDown",run:()=>(i.bus.emit(e,i.REPLACE,"sub"),!0)},w={key:"Ctrl-o",mac:"Cmd-o",run:()=>(i.bus.emit(e,i.REPLACE,"orderedList"),!0)},C={key:"Ctrl-c",mac:"Cmd-c",shift:()=>(i.bus.emit(e,i.REPLACE,"code"),!0),any(D,L){return(L.ctrlKey||L.metaKey)&&L.altKey&&L.code==="KeyC"?(i.bus.emit(e,i.REPLACE,"codeRow"),!0):!1}},E={key:"Ctrl-l",mac:"Cmd-l",run:()=>(i.bus.emit(e,i.REPLACE,"link"),!0)},I={key:"Ctrl-f",mac:"Cmd-f",shift:()=>t.noPrettier?!1:(i.bus.emit(e,i.REPLACE,"prettier"),!0)},N={any:(D,L)=>(L.ctrlKey||L.metaKey)&&L.altKey&&L.shiftKey&&L.code==="KeyT"?(i.bus.emit(e,i.REPLACE,"table"),!0):!1},M={key:"Ctrl-d",mac:"Cmd-d",run:B.deleteLine,preventDefault:!0};return[n,M,o,l,c,u,d,f,m,g,x,h,p,w,C,E,I,N,...Ue.searchKeymap]},bt=()=>a.jsx("div",{className:`${r.prefix}-divider`}),ft=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=s.useContext(T.EditorContext);return a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.bold,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"bold")},type:"button",children:[a.jsx(k.IconIns,{name:"bold"}),n&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.bold})]})},gt=s.memo(ft),xt=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o,catalogVisible:l}=s.useContext(T.EditorContext);return a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,l&&`${r.prefix}-toolbar-active`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.catalog,disabled:o,onClick:()=>{i.bus.emit(e,i.CHANGE_CATALOG_VISIBLE)},type:"button",children:[a.jsx(k.IconIns,{name:"catalog"}),n&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.catalog})]},"bar-catalog")},ht=s.memo(xt),pt=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=s.useContext(T.EditorContext);return a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.code,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"code")},type:"button",children:[a.jsx(k.IconIns,{name:"code"}),n&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.code})]})},Ct=s.memo(pt),vt=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=s.useContext(T.EditorContext);return a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.codeRow,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"codeRow")},type:"button",children:[a.jsx(k.IconIns,{name:"code-row"}),n&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.codeRow})]})},Tt=s.memo(vt),Et=()=>{const{setting:e,usedLanguageText:t,showToolbarName:n,disabled:o}=s.useContext(T.EditorContext),{fullscreenHandler:l}=$o();return a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,e.fullscreen&&`${r.prefix}-toolbar-active`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.fullscreen,disabled:o,onClick:()=>{l()},type:"button",children:[a.jsx(k.IconIns,{name:e.fullscreen?"fullscreen-exit":"fullscreen"}),n&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.fullscreen})]})},wt=s.memo(Et),$t=()=>{const{usedLanguageText:e,showToolbarName:t,disabled:n}=s.useContext(T.EditorContext);return a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,n&&`${r.prefix}-disabled`]),title:e.toolbarTips?.github,disabled:n,onClick:()=>{te.linkTo("https://github.com/imzbf/md-editor-rt")},type:"button",children:[a.jsx(k.IconIns,{name:"github"}),t&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:e.toolbarTips?.github})]})},kt=s.memo($t),yt=()=>{const{usedLanguageText:e,setting:t,updateSetting:n,showToolbarName:o,disabled:l}=s.useContext(T.EditorContext);return a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,t.htmlPreview&&`${r.prefix}-toolbar-active`,l&&`${r.prefix}-disabled`]),title:e.toolbarTips?.htmlPreview,disabled:l,onClick:()=>{n("htmlPreview")},type:"button",children:[a.jsx(k.IconIns,{name:"preview-html"}),o&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:e.toolbarTips?.htmlPreview})]})},It=s.memo(yt),St=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=s.useContext(T.EditorContext);return a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.image,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"image")},type:"button",children:[a.jsx(k.IconIns,{name:"image"}),n&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.image})]})},jt=s.memo(St);let q=null;const Nt=e=>{const t=s.useContext(T.EditorContext),{editorId:n,usedLanguageText:o,rootRef:l}=t,c=r.globalConfig.editorExtensions.cropper.instance,u=s.useRef(null),d=s.useRef(null),f=s.useRef(null),[m,g]=s.useState({cropperInited:!1,imgSelected:!1,imgSrc:"",isFullscreen:!1});s.useEffect(()=>{e.visible&&!m.cropperInited&&(window.Cropper=c||window.Cropper,u.current.onchange=()=>{if(!window.Cropper){i.bus.emit(n,i.ERROR_CATCHER,{name:"Cropper",message:"Cropper is undefined"});return}const w=u.current.files||[];if(w?.length>0){const C=new FileReader;C.onload=E=>{g(I=>({...I,imgSelected:!0,imgSrc:E.target.result}))},C.readAsDataURL(w[0])}})},[e.visible,m.cropperInited,c,n]),s.useEffect(()=>{f.current?.setAttribute("style","")},[m.imgSelected]),s.useEffect(()=>{q?.destroy(),f.current?.setAttribute("style",""),d.current&&m.imgSrc&&(q=new window.Cropper(d.current,{viewMode:2,preview:(l.current?.getRootNode()).querySelector(`.${r.prefix}-clip-preview-target`)}))},[m.imgSrc,m.isFullscreen,l]);const x=s.useMemo(()=>m.isFullscreen?{width:"100%",height:"100%"}:{width:"668px",height:"392px"},[m.isFullscreen]),h=()=>{q.clear(),q.destroy(),q=null,u.current.value="",g(w=>({...w,imgSrc:"",imgSelected:!1}))},p=s.useCallback(w=>{g(C=>({...C,isFullscreen:w}))},[]);return s.useMemo(()=>a.jsxs(k.Modal,{className:`${r.prefix}-modal-clip`,title:o.clipModalTips?.title,visible:e.visible,onClose:e.onCancel,showAdjust:!0,isFullscreen:m.isFullscreen,onAdjust:p,...x,children:[a.jsxs("div",{className:`${r.prefix}-form-item ${r.prefix}-clip`,children:[a.jsx("div",{className:`${r.prefix}-clip-main`,children:m.imgSelected?a.jsxs("div",{className:`${r.prefix}-clip-cropper`,children:[a.jsx("img",{src:m.imgSrc,ref:d,style:{display:"none"},alt:""}),a.jsx("div",{className:`${r.prefix}-clip-delete`,onClick:h,children:a.jsx(k.IconIns,{name:"delete"})})]}):a.jsx("div",{className:`${r.prefix}-clip-upload`,onClick:()=>{u.current.click()},role:"button",tabIndex:0,"aria-label":o.imgTitleItem?.upload,children:a.jsx(k.IconIns,{name:"upload"})})}),a.jsx("div",{className:`${r.prefix}-clip-preview`,children:a.jsx("div",{className:`${r.prefix}-clip-preview-target`,ref:f})})]}),a.jsx("div",{className:`${r.prefix}-form-item`,children:a.jsx("button",{className:`${r.prefix}-btn`,type:"button",onClick:()=>{if(q){const w=q.getCroppedCanvas();i.bus.emit(n,i.UPLOAD_IMAGE,[$.base642File(w.toDataURL("image/png"))],e.onOk),h()}},children:o.linkModalTips?.buttonOK})}),a.jsx("input",{ref:u,accept:"image/*",type:"file",multiple:!1,style:{display:"none"},"aria-hidden":"true"})]}),[o.clipModalTips?.title,o.linkModalTips?.buttonOK,o.imgTitleItem?.upload,e.visible,e.onCancel,e.onOk,m.isFullscreen,m.imgSelected,m.imgSrc,p,x,n])},Lt=e=>a.jsx(Nt,{visible:e.clipVisible,onOk:e.onOk,onCancel:e.onCancel}),Rt=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=s.useContext(T.EditorContext),l=`${e}-toolbar-wrapper`,[c,u]=s.useState(!1),[d,f]=s.useState(!1),m=s.useRef(null),g=s.useCallback(()=>{i.bus.emit(e,i.UPLOAD_IMAGE,Array.from(m.current?.files||[])),m.current.value=""},[e]),x=s.useCallback((E,I)=>{o||i.bus.emit(e,i.REPLACE,E,I)},[e,o]),h=s.useCallback(()=>{f(!1)},[]),p=s.useCallback(E=>{E&&x("image",{desc:E.desc,url:E.url,transform:!0}),f(!1)},[x]),w=s.useMemo(()=>a.jsxs("ul",{className:`${r.prefix}-menu`,onClick:()=>{u(!1)},role:"menu",children:[a.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-image`,onClick:()=>{x("image")},role:"menuitem",tabIndex:0,children:t.imgTitleItem?.link}),a.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-image`,onClick:()=>{m.current?.click()},role:"menuitem",tabIndex:0,children:t.imgTitleItem?.upload}),a.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-image`,onClick:()=>{f(!0)},role:"menuitem",tabIndex:0,children:t.imgTitleItem?.clip2upload})]}),[x,t.imgTitleItem?.clip2upload,t.imgTitleItem?.link,t.imgTitleItem?.upload]),C=s.useMemo(()=>a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.image,disabled:o,type:"button",children:[a.jsx(k.IconIns,{name:"image"}),n&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.image})]}),[o,n,t.toolbarTips?.image]);return s.useEffect(()=>{const E=m.current;return E?.addEventListener("change",g),()=>{E?.removeEventListener("change",g)}},[g]),a.jsxs(a.Fragment,{children:[a.jsx("label",{htmlFor:`${l}_label`,style:{display:"none"},"aria-label":t.imgTitleItem?.upload}),a.jsx("input",{id:`${l}_label`,ref:m,accept:"image/*",type:"file",multiple:!0,style:{display:"none"}}),a.jsx(Lt,{clipVisible:d,onCancel:h,onOk:p}),a.jsx(J.DropDown,{relative:`#${l}`,visible:c,onChange:u,disabled:o,overlay:w,children:C})]})},At=s.memo(Rt),Pt=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=s.useContext(T.EditorContext);return a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.italic,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"italic")},type:"button",children:[a.jsx(k.IconIns,{name:"italic"}),n&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.italic})]})},Mt=s.memo(Pt),Dt=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=s.useContext(T.EditorContext),l=`${e}-toolbar-wrapper`,[c,u]=s.useState(!1),d=s.useCallback(g=>{o||i.bus.emit(e,i.REPLACE,g)},[o,e]),f=s.useMemo(()=>a.jsxs("ul",{className:`${r.prefix}-menu`,onClick:()=>{u(!1)},role:"menu",children:[a.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-katex`,onClick:()=>{d("katexInline")},role:"menuitem",tabIndex:0,children:t.katex?.inline}),a.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-katex`,onClick:()=>{d("katexBlock")},role:"menuitem",tabIndex:0,children:t.katex?.block})]}),[d,t.katex?.block,t.katex?.inline]),m=s.useMemo(()=>a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.katex,disabled:o,type:"button",children:[a.jsx(k.IconIns,{name:"formula"}),n&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.katex})]}),[o,n,t.toolbarTips?.katex]);return a.jsx(J.DropDown,{relative:`#${l}`,visible:c,onChange:u,disabled:o,overlay:f,children:m},"bar-katex")},Ht=s.memo(Dt),Ft=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=s.useContext(T.EditorContext);return a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.link,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"link")},type:"button",children:[a.jsx(k.IconIns,{name:"link"}),n&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.link})]})},Vt=s.memo(Ft),Ot=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=s.useContext(T.EditorContext),l=`${e}-toolbar-wrapper`,[c,u]=s.useState(!1),d=s.useCallback(g=>{o||i.bus.emit(e,i.REPLACE,g)},[o,e]),f=s.useMemo(()=>a.jsxs("ul",{className:`${r.prefix}-menu`,onClick:()=>{u(!1)},role:"menu",children:[a.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-mermaid`,onClick:()=>{d("flow")},role:"menuitem",tabIndex:0,children:t.mermaid?.flow}),a.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-mermaid`,onClick:()=>{d("sequence")},role:"menuitem",tabIndex:0,children:t.mermaid?.sequence}),a.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-mermaid`,onClick:()=>{d("gantt")},role:"menuitem",tabIndex:0,children:t.mermaid?.gantt}),a.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-mermaid`,onClick:()=>{d("class")},role:"menuitem",tabIndex:0,children:t.mermaid?.class}),a.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-mermaid`,onClick:()=>{d("state")},role:"menuitem",tabIndex:0,children:t.mermaid?.state}),a.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-mermaid`,onClick:()=>{d("pie")},role:"menuitem",tabIndex:0,children:t.mermaid?.pie}),a.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-mermaid`,onClick:()=>{d("relationship")},role:"menuitem",tabIndex:0,children:t.mermaid?.relationship}),a.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-mermaid`,onClick:()=>{d("journey")},role:"menuitem",tabIndex:0,children:t.mermaid?.journey})]}),[d,t.mermaid?.class,t.mermaid?.flow,t.mermaid?.gantt,t.mermaid?.journey,t.mermaid?.pie,t.mermaid?.relationship,t.mermaid?.sequence,t.mermaid?.state]),m=s.useMemo(()=>a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.mermaid,disabled:o,type:"button",children:[a.jsx(k.IconIns,{name:"mermaid"}),n&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.mermaid})]}),[o,n,t.toolbarTips?.mermaid]);return a.jsx(J.DropDown,{relative:`#${l}`,visible:c,onChange:u,disabled:o,overlay:f,children:m},"bar-mermaid")},_t=s.memo(Ot),Bt=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=s.useContext(T.EditorContext);return a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.next,disabled:o,onClick:()=>{i.bus.emit(e,i.CTRL_SHIFT_Z)},type:"button",children:[a.jsx(k.IconIns,{name:"next"}),n&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.next})]})},qt=s.memo(Bt),Wt=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=s.useContext(T.EditorContext);return a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.orderedList,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"orderedList")},type:"button",children:[a.jsx(k.IconIns,{name:"ordered-list"}),n&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.orderedList})]})},zt=s.memo(Wt),Kt=()=>{const{setting:e,usedLanguageText:t,updateSetting:n,showToolbarName:o,disabled:l}=s.useContext(T.EditorContext);return a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,e.pageFullscreen&&`${r.prefix}-toolbar-active`,l&&`${r.prefix}-disabled`]),title:t.toolbarTips?.pageFullscreen,disabled:l,onClick:()=>{n("pageFullscreen")},type:"button",children:[a.jsx(k.IconIns,{name:e.pageFullscreen?"minimize":"maximize"}),o&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.pageFullscreen})]})},Gt=s.memo(Kt),Ut=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=s.useContext(T.EditorContext);return a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.prettier,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"prettier")},type:"button",children:[a.jsx(k.IconIns,{name:"prettier"}),n&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.prettier})]})},Zt=s.memo(Ut),Yt=()=>{const{usedLanguageText:e,showToolbarName:t,disabled:n,setting:o,updateSetting:l}=s.useContext(T.EditorContext);return a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o.preview&&`${r.prefix}-toolbar-active`,n&&`${r.prefix}-disabled`]),title:e.toolbarTips?.preview,disabled:n,onClick:()=>{l("preview")},type:"button",children:[a.jsx(k.IconIns,{name:"preview"}),t&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:e.toolbarTips?.preview})]})},Xt=s.memo(Yt),Jt=()=>{const{usedLanguageText:e,showToolbarName:t,disabled:n,setting:o,updateSetting:l}=s.useContext(T.EditorContext);return a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o.previewOnly&&`${r.prefix}-toolbar-active`,n&&`${r.prefix}-disabled`]),title:e.toolbarTips?.previewOnly,disabled:n,onClick:()=>{l("previewOnly")},type:"button",children:[a.jsx(k.IconIns,{name:"preview-only"}),t&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:e.toolbarTips?.previewOnly})]})},Qt=s.memo(Jt),eo=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=s.useContext(T.EditorContext);return a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.quote,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"quote")},type:"button",children:[a.jsx(k.IconIns,{name:"quote"}),n&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.quote})]})},to=s.memo(eo),oo=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=s.useContext(T.EditorContext);return a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.revoke,disabled:o,onClick:()=>{i.bus.emit(e,i.CTRL_Z)},type:"button",children:[a.jsx(k.IconIns,{name:"revoke"}),n&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.revoke})]})},ro=s.memo(oo),no=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=s.useContext(T.EditorContext);return a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.save,disabled:o,onClick:()=>{i.bus.emit(e,i.ON_SAVE)},type:"button",children:[a.jsx(k.IconIns,{name:"save"}),n&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.save})]})},ao=s.memo(no),so=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=s.useContext(T.EditorContext);return a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.strikeThrough,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"strikeThrough")},type:"button",children:[a.jsx(k.IconIns,{name:"strike-through"}),n&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.strikeThrough})]})},lo=s.memo(so),io=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=s.useContext(T.EditorContext);return a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.sub,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"sub")},type:"button",children:[a.jsx(k.IconIns,{name:"sub"}),n&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.sub})]})},co=s.memo(io),uo=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=s.useContext(T.EditorContext);return a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.sup,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"sup")},type:"button",children:[a.jsx(k.IconIns,{name:"sup"}),n&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.sup})]})},mo=s.memo(uo),bo=e=>{const[t,n]=s.useState({x:-1,y:-1}),o=s.useMemo(()=>JSON.stringify(e.tableShape),[e.tableShape]),l=s.useCallback(()=>{const d=[...JSON.parse(o)];return(!d[2]||d[2]<d[0])&&(d[2]=d[0]),(!d[3]||d[3]<d[3])&&(d[3]=d[1]),d},[o]),[c,u]=s.useState(l);return s.useEffect(()=>{u(l),n({x:-1,y:-1})},[l]),a.jsx("div",{className:`${r.prefix}-table-shape`,onMouseLeave:()=>{u(l),n({x:-1,y:-1})},children:new Array(c[1]).fill("").map((d,f)=>a.jsx("div",{className:`${r.prefix}-table-shape-row`,children:new Array(c[0]).fill("").map((m,g)=>a.jsx("div",{className:`${r.prefix}-table-shape-col`,onMouseEnter:()=>{n({x:f,y:g}),g+1===c[0]&&g+1<c[2]?u(x=>{const h=[...x];return h[0]=x[0]+1,h}):g+2<c[0]&&c[0]>e.tableShape[0]&&u(x=>{const h=[...x];return h[0]=x[0]-1,h}),f+1===c[1]&&f+1<c[3]?u(x=>{const h=[...x];return h[1]=x[1]+1,h}):f+2<c[1]&&c[1]>e.tableShape[1]&&u(x=>{const h=[...x];return h[1]=x[1]-1,h})},onClick:()=>{e.onSelected(t)},children:a.jsx("div",{className:[`${r.prefix}-table-shape-col-default`,f<=t.x&&g<=t.y&&`${r.prefix}-table-shape-col-include`].filter(x=>!!x).join(" ")})},`table-shape-col-${g}`))},`table-shape-row-${f}`))})},fo=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o,tableShape:l}=s.useContext(T.EditorContext),c=`${e}-toolbar-wrapper`,[u,d]=s.useState(!1),f=s.useCallback(x=>{o||i.bus.emit(e,i.REPLACE,"table",{selectedShape:x})},[o,e]),m=s.useMemo(()=>a.jsx(bo,{tableShape:l,onSelected:f}),[f,l]),g=s.useMemo(()=>a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.table,disabled:o,type:"button",children:[a.jsx(k.IconIns,{name:"table"}),n&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.table})]}),[o,n,t.toolbarTips?.table]);return a.jsx(J.DropDown,{relative:`#${c}`,visible:u,onChange:d,disabled:o,overlay:m,children:g},"bar-table")},go=s.memo(fo),xo=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=s.useContext(T.EditorContext);return a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.task,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"task")},type:"button",children:[a.jsx(k.IconIns,{name:"task"}),n&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.task})]})},ho=s.memo(xo),po=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=s.useContext(T.EditorContext),l=`${e}-toolbar-wrapper`,[c,u]=s.useState(!1),d=s.useCallback(g=>{o||i.bus.emit(e,i.REPLACE,g)},[o,e]),f=s.useMemo(()=>a.jsxs("ul",{className:`${r.prefix}-menu`,onClick:()=>{u(!1)},role:"menu",children:[a.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-title`,onClick:()=>{d("h1")},role:"menuitem",tabIndex:0,children:t.titleItem?.h1}),a.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-title`,onClick:()=>{d("h2")},role:"menuitem",tabIndex:0,children:t.titleItem?.h2}),a.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-title`,onClick:()=>{d("h3")},role:"menuitem",tabIndex:0,children:t.titleItem?.h3}),a.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-title`,onClick:()=>{d("h4")},role:"menuitem",tabIndex:0,children:t.titleItem?.h4}),a.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-title`,onClick:()=>{d("h5")},role:"menuitem",tabIndex:0,children:t.titleItem?.h5}),a.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-title`,onClick:()=>{d("h6")},role:"menuitem",tabIndex:0,children:t.titleItem?.h6})]}),[d,t.titleItem?.h1,t.titleItem?.h2,t.titleItem?.h3,t.titleItem?.h4,t.titleItem?.h5,t.titleItem?.h6]),m=s.useMemo(()=>a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),disabled:o,title:t.toolbarTips?.title,type:"button",children:[a.jsx(k.IconIns,{name:"title"}),n&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.title})]}),[o,n,t.toolbarTips?.title]);return a.jsx(J.DropDown,{relative:`#${l}`,visible:c,onChange:u,disabled:o,overlay:f,children:m})},Co=s.memo(po),vo=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=s.useContext(T.EditorContext);return a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.underline,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"underline")},type:"button",children:[a.jsx(k.IconIns,{name:"underline"}),n&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.underline})]})},To=s.memo(vo),Eo=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=s.useContext(T.EditorContext);return a.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.unorderedList,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"unorderedList")},type:"button",children:[a.jsx(k.IconIns,{name:"unordered-list"}),n&&a.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.unorderedList})]})},wo=s.memo(Eo),$o=()=>{const{editorId:e,updateSetting:t}=s.useContext(T.EditorContext),n=s.useRef(r.globalConfig.editorExtensions.screenfull.instance),o=s.useRef(!1),l=s.useCallback(c=>{if(!n.current){i.bus.emit(e,i.ERROR_CATCHER,{name:"fullscreen",message:"fullscreen is undefined"});return}n.current.isEnabled?(o.current=!o.current,(c===void 0?!n.current.isFullscreen:c)?n.current.request():n.current.exit()):console.error("browser does not support screenfull!")},[e]);return s.useEffect(()=>{const c=()=>{t("fullscreen",o.current)};let u=-1;if(!n.current){const{editorExtensions:d,editorExtensionsAttrs:f}=r.globalConfig;u=requestAnimationFrame(()=>{Ye.appendHandler("script",{...f.screenfull?.js,src:d.screenfull.js,id:V.CDN_IDS.screenfull,onload(){n.current=window.screenfull,n.current&&n.current.isEnabled&&n.current.on("change",c)}},"screenfull")})}return n.current&&n.current.isEnabled&&n.current.on("change",c),()=>{n.current||cancelAnimationFrame(u),n.current&&n.current.isEnabled&&n.current.off("change",c)}},[t]),s.useEffect(()=>(i.bus.on(e,{name:i.CHANGE_FULL_SCREEN,callback:l}),()=>{i.bus.remove(e,i.CHANGE_FULL_SCREEN,l)}),[e,l]),{fullscreenHandler:l}};let ko=0;const He=()=>{const{editorId:e,theme:t,previewTheme:n,language:o,disabled:l,noUploadImg:c,noPrettier:u,codeTheme:d,showToolbarName:f,setting:m,defToolbars:g}=s.useContext(T.EditorContext);return{barRender:h=>{if(r.allToolbar.includes(h))switch(h){case"-":return a.jsx(bt,{},`bar-${ko++}`);case"bold":return a.jsx(gt,{},"bar-bold");case"underline":return a.jsx(To,{},"bar-unorderline");case"italic":return a.jsx(Mt,{},"bar-italic");case"strikeThrough":return a.jsx(lo,{},"bar-strikeThrough");case"title":return a.jsx(Co,{},"bar-title");case"sub":return a.jsx(co,{},"bar-sub");case"sup":return a.jsx(mo,{},"bar-sup");case"quote":return a.jsx(to,{},"bar-quote");case"unorderedList":return a.jsx(wo,{},"bar-unorderedList");case"orderedList":return a.jsx(zt,{},"bar-orderedList");case"task":return a.jsx(ho,{},"bar-task");case"codeRow":return a.jsx(Tt,{},"bar-codeRow");case"code":return a.jsx(Ct,{},"bar-code");case"link":return a.jsx(Vt,{},"bar-link");case"image":return c?a.jsx(jt,{},"bar-image"):a.jsx(At,{},"bar-imageDropdown");case"table":return a.jsx(go,{},"bar-table");case"revoke":return a.jsx(ro,{},"bar-revoke");case"next":return a.jsx(qt,{},"bar-next");case"save":return a.jsx(ao,{},"bar-save");case"prettier":return u&&a.jsx(Zt,{},"bar-prettier");case"pageFullscreen":return!m.fullscreen&&a.jsx(Gt,{},"bar-pageFullscreen");case"fullscreen":return a.jsx(wt,{},"bar-fullscreen");case"catalog":return a.jsx(ht,{},"bar-catalog");case"preview":return a.jsx(Xt,{},"bar-preview");case"previewOnly":return a.jsx(Qt,{},"bar-previewOnly");case"htmlPreview":return a.jsx(It,{},"bar-htmlPreview");case"github":return a.jsx(kt,{},"bar-github");case"mermaid":return a.jsx(_t,{},"bar-mermaid");case"katex":return a.jsx(Ht,{},"bar-katex")}else if(g){const p=g[h];return p?s.cloneElement(p,{theme:p.props?.theme||t,codeTheme:p.props?.codeTheme||d,previewTheme:p.props?.previewTheme||n,language:p.props?.language||o,disabled:p.props?.disabled||l,showToolbarName:p.props?.showToolbarName||f,insert(C){i.bus.emit(e,i.REPLACE,"universal",{generate:C})}}):""}else return""}}},yo=()=>{const e=Io(),{barRender:t}=He();return a.jsx(T.EditorContext.Provider,{value:e,children:a.jsx("div",{className:`${r.prefix}-floating-toolbar`,children:e.floatingToolbars.map(n=>t(n))})})},Fe=s.createContext({getValue:()=>T.defaultContextValue,subscribe:()=>()=>{}}),Io=()=>{const e=s.useContext(Fe);return s.useSyncExternalStore(e.subscribe,e.getValue)},ue=j.StateEffect.define(),So=j.StateField.define({create(){return null},update(e,t){for(const n of t.effects)n.is(ue)&&(e=n.value);return e},provide:e=>A.showTooltip.from(e)}),jo=e=>{const t=(o,l)=>{o.dispatch({effects:ue.of({pos:l,above:!0,arrow:!0,create:()=>{const c=document.createElement("div"),u=document.createElement("div");c.appendChild(u);const d=Ze.createRoot(u);return d.render(a.jsx(Fe.Provider,{value:e.contextValue,children:a.jsx(yo,{})})),{dom:c,destroy:()=>d.unmount()}}})})},n=A.EditorView.updateListener.of(o=>{if(o.selectionSet||o.docChanged){const l=o.state,c=l.selection.main;if(!c.empty)t(o.view,c.from);else{const u=c.head,d=l.doc.lineAt(u);/^\s*$/.test(d.text)?t(o.view,u):o.view.dispatch({effects:ue.of(null)})}}});return[So,n]},No=/[a-z][a-z0-9.+-]*:\/\/[^\s<>"'`()]+(?:\([^\s<>"'`]*\)[^\s<>"'`]*)*/i,Lo=/\/\/[^\s<>"'`()]+/i,Ro=/data:[a-z]+\/[a-z0-9.+-]+(?:;base64)?,[a-z0-9+/=%]+/i,Ao=/\/(?!\/)[^\s<>"'`()]+/i,Po=new RegExp(`(?<![a-z0-9.+-])(${No.source}|${Lo.source}|${Ro.source}|${Ao.source})`,"gi"),Mo=e=>{const t=c=>c.length>10?c.slice(0,10)+"...":c,n=(c,u)=>{const d=c.text;let f;for(;f=Po.exec(d);){if(!f[0])continue;const m=f[0];if(m.length>e.maxLength){const g=t(m);u.add(c.from+f.index,c.from+f.index+m.length,A.Decoration.replace({widget:new l(g)}))}}},o=c=>{const u=new j.RangeSetBuilder;for(let d=1;d<=c.doc.lines;d++){const f=c.doc.line(d);n(f,u)}return u.finish()};class l extends A.WidgetType{constructor(u){super(),this.short=u}toDOM(){const u=document.createElement("span");return u.textContent=this.short,u.className="cm-short-text",u.style.display="inline",u.style.textDecoration="underline",u}eq(u){return this.short===u.short}}return j.StateField.define({create(c){return o(c)},update(c,u){return u.docChanged?o(u.state):c},provide:c=>A.EditorView.decorations.from(c)})},Do="#e5c07b",$e="var(--md-color)",Ho="#56b6c2",Fo="#fff",Z="#3f4a54",ke="#2d8cf0",Vo="#2d8cf0",Oo="#3f4a54",ye="#d19a66",_o="#c678dd",Bo="#f6f6f6",qo="#ceedfa33",Ie="var(--md-bk-color)",le="var(--md-bk-color)",Wo="#bad5fa",Se="#3f4a54",zo=A.EditorView.theme({"&":{color:Z,backgroundColor:Ie},".cm-content":{caretColor:Se},".cm-cursor, .cm-dropCursor":{borderLeftColor:Se},"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":{backgroundColor:Wo},".cm-panels":{backgroundColor:Bo,color:Z},".cm-panels.cm-panels-top":{borderBottom:"1px solid var(--md-border-color)"},".cm-panels.cm-panels-bottom":{borderTop:"1px solid var(--md-border-color)"},".cm-searchMatch":{backgroundColor:"#72a1ff59",outline:"1px solid #457dff"},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:"#6199ff2f"},".cm-activeLine":{backgroundColor:"#ceedfa33"},".cm-selectionMatch":{backgroundColor:"#aafe661a"},"&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bad0f847"},".cm-gutters":{backgroundColor:Ie,color:Z,borderRight:"1px solid",borderColor:"var(--md-border-color)"},".cm-activeLineGutter":{backgroundColor:qo},".cm-foldPlaceholder":{backgroundColor:"transparent",border:"none",color:"#ddd"},".cm-tooltip":{border:"1px solid var(--md-border-color)",backgroundColor:le},".cm-tooltip .cm-tooltip-arrow:before":{borderTopColor:"var(--md-border-color)",borderBottomColor:"var(--md-border-color)"},".cm-tooltip .cm-tooltip-arrow:after":{borderTopColor:le,borderBottomColor:le},".cm-tooltip-autocomplete":{"& > ul > li[aria-selected]":{color:Z}}}),Ko=X.HighlightStyle.define([{tag:b.tags.keyword,color:_o},{tag:[b.tags.name,b.tags.deleted,b.tags.character,b.tags.propertyName,b.tags.macroName],color:$e},{tag:[b.tags.function(b.tags.variableName),b.tags.labelName],color:Vo},{tag:[b.tags.color,b.tags.constant(b.tags.name),b.tags.standard(b.tags.name)],color:ye},{tag:[b.tags.definition(b.tags.name),b.tags.separator],color:Z},{tag:[b.tags.typeName,b.tags.className,b.tags.number,b.tags.changed,b.tags.annotation,b.tags.modifier,b.tags.self,b.tags.namespace],color:Do},{tag:[b.tags.operator,b.tags.operatorKeyword,b.tags.url,b.tags.escape,b.tags.regexp,b.tags.link,b.tags.special(b.tags.string)],color:Ho},{tag:[b.tags.meta,b.tags.comment],color:ke},{tag:b.tags.strong,fontWeight:"bold"},{tag:b.tags.emphasis,fontStyle:"italic"},{tag:b.tags.strikethrough,textDecoration:"line-through"},{tag:b.tags.link,color:ke,textDecoration:"underline"},{tag:b.tags.heading,fontWeight:"bold",color:$e},{tag:[b.tags.atom,b.tags.bool,b.tags.special(b.tags.variableName)],color:ye},{tag:[b.tags.processingInstruction,b.tags.string,b.tags.inserted],color:Oo},{tag:b.tags.invalid,color:Fo}]),je=[zo,X.syntaxHighlighting(Ko)],Go="#e5c07b",Ne="var(--md-color)",Uo="#56b6c2",Zo="#ffffff",Y="var(--md-color)",Le="#e5c07b",Yo="#e5c07b",Xo="var(--md-color)",Re="#d19a66",Jo="#c678dd",Qo="#21252b",er="#2c313a",Ae="var(--md-bk-color)",ie="var(--md-bk-color)",tr="#ceedfa33",Pe="#528bff",or=A.EditorView.theme({"&":{color:Y,backgroundColor:Ae},".cm-content":{caretColor:Pe},".cm-cursor, .cm-dropCursor":{borderLeftColor:Pe},"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":{backgroundColor:tr},".cm-panels":{backgroundColor:Qo,color:Y},".cm-panels.cm-panels-top":{borderBottom:"1px solid var(--md-border-color)"},".cm-panels.cm-panels-bottom":{borderTop:"1px solid var(--md-border-color)"},".cm-searchMatch":{backgroundColor:"#72a1ff59",outline:"1px solid #457dff"},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:"#6199ff2f"},".cm-activeLine":{backgroundColor:"#ceedfa33"},".cm-selectionMatch":{backgroundColor:"#aafe661a"},"&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bad0f847"},".cm-gutters":{backgroundColor:Ae,color:Y,borderRight:"1px solid",borderColor:"var(--md-border-color)"},".cm-activeLineGutter":{backgroundColor:er},".cm-foldPlaceholder":{backgroundColor:"transparent",border:"none",color:"#ddd"},".cm-tooltip":{border:"1px solid var(--md-border-color)",backgroundColor:ie},".cm-tooltip .cm-tooltip-arrow:before":{borderTopColor:"var(--md-border-color)",borderBottomColor:"var(--md-border-color)"},".cm-tooltip .cm-tooltip-arrow:after":{borderTopColor:ie,borderBottomColor:ie},".cm-tooltip-autocomplete":{"& > ul > li[aria-selected]":{color:Y}}},{dark:!0}),rr=X.HighlightStyle.define([{tag:b.tags.keyword,color:Jo},{tag:[b.tags.name,b.tags.deleted,b.tags.character,b.tags.propertyName,b.tags.macroName],color:Ne},{tag:[b.tags.function(b.tags.variableName),b.tags.labelName],color:Yo},{tag:[b.tags.color,b.tags.constant(b.tags.name),b.tags.standard(b.tags.name)],color:Re},{tag:[b.tags.definition(b.tags.name),b.tags.separator],color:Y},{tag:[b.tags.typeName,b.tags.className,b.tags.number,b.tags.changed,b.tags.annotation,b.tags.modifier,b.tags.self,b.tags.namespace],color:Go},{tag:[b.tags.operator,b.tags.operatorKeyword,b.tags.url,b.tags.escape,b.tags.regexp,b.tags.link,b.tags.special(b.tags.string)],color:Uo},{tag:[b.tags.meta,b.tags.comment],color:Le},{tag:b.tags.strong,fontWeight:"bold"},{tag:b.tags.emphasis,fontStyle:"italic"},{tag:b.tags.strikethrough,textDecoration:"line-through"},{tag:b.tags.link,color:Le,textDecoration:"underline"},{tag:b.tags.heading,fontWeight:"bold",color:Ne},{tag:[b.tags.atom,b.tags.bool,b.tags.special(b.tags.variableName)],color:Re},{tag:[b.tags.processingInstruction,b.tags.string,b.tags.inserted],color:Xo},{tag:b.tags.invalid,color:Zo}]),Me=[or,X.syntaxHighlighting(rr)],nr=(e,t)=>{if(e===t)return!0;if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0},ar=(e,t)=>{const n=s.useRef([]);(!n.current||!nr(n.current,t))&&(n.current=t,e())};A.EditorView.EDIT_CONTEXT=!1;const Ve=e=>e.extension instanceof Function?e.extension(e.options):e.extension,sr=e=>{const t=Ve(e);return e.compartment?e.compartme