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) • 68.8 kB
JavaScript
"use strict";const s=require("react/jsx-runtime"),a=require("react"),r=require("./config.cjs"),oe=require("@vavt/util"),$=require("./index2.cjs"),v=require("./context.cjs"),ue=require("./index3.cjs"),O=require("./hooks.cjs"),W=require("@codemirror/commands"),Ge=require("@codemirror/lang-markdown"),Ue=require("@codemirror/language-data"),L=require("@codemirror/state"),P=require("@codemirror/view"),i=require("./event-bus.cjs"),X=require("@codemirror/language"),Ze=require("@codemirror/autocomplete"),Ye=require("@codemirror/search"),Xe=require("react-dom/client"),Je=require("./dom.cjs"),y=require("./index.cjs"),J=require("./index4.cjs"),g=require("@lezer/highlight"),Qe=e=>{const t=a.useRef(null),n=a.useRef(null),o=a.useRef(null),l=a.useRef(null),c=a.useRef(!1),u=a.useRef(0),m=a.useRef(0),f=a.useCallback(()=>{if(!n.current||!t.current||!o.current||!l.current)return;const T=t.current.clientHeight,E=n.current.scrollHeight,k=n.current.scrollTop;if(E<=T){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 I=T/E,R=Math.max(T*I,20),A=T-R,N=Math.min(k*I,A);o.current.style.height=`${R}px`,o.current.style.top=`${N}px`},[e.alwaysShowTrack]),d=f,b=a.useCallback(T=>{c.current=!0,u.current=T.clientY,m.current=n.current.scrollTop,document.body.style.userSelect="none"},[]),x=a.useCallback(T=>{if(!c.current||!n.current||!t.current)return;const E=T.clientY-u.current,k=n.current.scrollHeight/t.current.clientHeight;n.current.scrollTop=m.current+E*k},[m,u]),h=a.useCallback(()=>{c.current=!1,document.body.style.userSelect=""},[]),p=a.useCallback(T=>{n.current&&n.current.removeEventListener("scroll",d),n.current=T,n.current?(n.current.addEventListener("scroll",d),f()):l.current&&!e.alwaysShowTrack&&(l.current.style.display="none")},[d,e.alwaysShowTrack,f]),C=a.useCallback(()=>{if(!t.current)return;const T=e.scrollTarget?t.current.querySelector(e.scrollTarget):t.current.firstElementChild;p(T)},[p,e.scrollTarget]);return a.useEffect(()=>{C();const T=o.current;let E=null;const k=new MutationObserver(()=>{E&&cancelAnimationFrame(E),E=requestAnimationFrame(()=>{C()})});return k.observe(t.current,{childList:!0,subtree:!0}),window.addEventListener("resize",f),T?.addEventListener("mousedown",b),document.addEventListener("mousemove",x),document.addEventListener("mouseup",h),()=>{k?.disconnect(),n.current&&n.current.removeEventListener("scroll",d),window.removeEventListener("resize",f),T?.removeEventListener("mousedown",b),document.removeEventListener("mousemove",x),document.removeEventListener("mouseup",h)}},[C,b,x,h,d,f]),s.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,s.jsx("div",{className:`${r.prefix}-custom-scrollbar__track`,ref:l,children:s.jsx("div",{className:`${r.prefix}-custom-scrollbar__thumb`,ref:o})})]})},se=a.memo(Qe),et=(e,t,n)=>{const{editorId:o,setting:l}=a.useContext(v.EditorContext),[c,u]=a.useState({clear(){},init(){}});a.useEffect(()=>{const m=n.current?.view.contentDOM.getRootNode(),f=m?.querySelector(`#${o} .cm-scroller`),d=m?.querySelector(`[id="${o}-preview-wrapper"]`),b=m?.querySelector(`[id="${o}-html-wrapper"]`);if(d||b){const x=d?ue.scrollAuto:ue.scrollAutoWithScale,h=d||b,[p,C]=x(f,h,n.current);u({init:p,clear:C})}},[t,l.fullscreen,l.pageFullscreen,l.preview,l.htmlPreview,o,n]),a.useEffect(()=>(e.scrollAuto&&!l.previewOnly&&(l.preview||l.htmlPreview)?c.init():c.clear(),()=>{c.clear()}),[c,e.scrollAuto,l.preview,l.htmlPreview,l.previewOnly])},le=async(e,t,n)=>{if(/^h[1-6]$/.test(e))return tt(e,t);if(e==="prettier")return await ot(t,n);switch(e){case"bold":case"underline":case"italic":case"strikeThrough":case"sub":case"sup":case"codeRow":case"katexInline":case"katexBlock":return nt(e,t);case"quote":case"orderedList":case"unorderedList":case"task":return st(e,t);case"code":return lt(n,t);case"table":return ut(n);case"link":{const o=t.getSelectedText(),{desc:l=o,url:c=""}=n,u=`[${l}](${c})`;return{text:u,options:{select:c==="",deviationStart:u.length-c.length-1,deviationEnd:-1}}}case"image":return ct(n,t);case"flow":case"sequence":case"gantt":case"class":case"state":case"pie":case"relationship":case"journey":return it(e);case"universal":return dt(t.getSelectedText(),n);default:return{text:"",options:{}}}},tt=(e,t)=>{const n=e.slice(1),o="#".repeat(Number(n)),[l,c,u]=me(t,{wholeLine:!0});return{text:`${o} ${l}`,options:{deviationStart:o.length+1,replaceStart:c,replaceEnd:u}}},ot=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}}},rt={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]},nt=(e,t)=>{const n=t.getSelectedText(),[o,l,c,u]=rt[e];return{text:`${o}${n}${l}`,options:{deviationStart:c,deviationEnd:u}}},at={quote:"> ",unorderedList:"- ",orderedList:1,task:"- [ ] "},st=(e,t)=>{const[n,o,l]=me(t,{wholeLine:!0}),c=n.split(`
`),u=at[e],m=e==="orderedList"?c.map((b,x)=>`${u+x}. ${b}`):c.map(b=>`${u}${b}`),f=e==="orderedList"?"1. ":u.toString(),d=c.length===1?f.length:0;return{text:m.join(`
`),options:{deviationStart:d,replaceStart:o,replaceEnd:l}}},lt=(e,t)=>{const[n,o,l]=me(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}}},it=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}}),ct=(e,t)=>{const n=t.getSelectedText(),{desc:o=n,url:l="",urls:c}=e;let u="";const m=l===""&&(!c||c instanceof Array&&c.length===0);return c instanceof Array?u=c.reduce((f,d)=>{const{url:b="",alt:x="",title:h=""}=typeof d=="object"?d:{url:d};return f+`
`},""):u=`
`,{text:u,options:{select:l==="",deviationStart:m?u.length-l.length-2:u.length,deviationEnd:m?-2:0}}},ut=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}}},dt=(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}}},me=(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]},G=e=>{const t=new L.Compartment;return o=>(t.get(e.state)?e.dispatch({effects:t.reconfigure(o)}):e.dispatch({effects:L.StateEffect.appendConfig.of(t.of(o))}),!0)};class mt{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=G(this.view),this.togglePlaceholder=G(this.view),this.setExtensions=G(this.view),this.toggleDisabled=G(this.view),this.toggleReadOnly=G(this.view),this.toggleMaxlength=G(this.view)}setTabSize(t){this.toggleTabSize([L.EditorState.tabSize.of(t),X.indentUnit.of(" ".repeat(t))])}setPlaceholder(t){this.togglePlaceholder(P.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:L.EditorSelection.create([L.EditorSelection.range(n,o),L.EditorSelection.cursor(l)],1)})}setDisabled(t){this.toggleDisabled([P.EditorView.editable.of(!t)])}setReadOnly(t){this.toggleReadOnly([L.EditorState.readOnly.of(t)])}setMaxLength(t){this.maxLength=t,this.toggleMaxlength([L.EditorState.changeFilter.of(n=>n.newDoc.length<=t)])}}const bt=(e,t)=>{const{editorId:n}=a.useContext(v.EditorContext),o=a.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 a.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"),m=t.current?.view.state.selection.main.to||0,f=t.current?.view.state.doc.lineAt(m).from||0,d=t.current?.view.state.doc.sliceString(f,m)||"",b=/!\[.*\]\(\s*$/.test(d),x=/!\[.*\]\((.*)\s?.*\)/.test(u);if(b){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((C,T,E)=>C.replace(h[E],T),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,m,f)=>{const d=`${e}${t}${n}${o}`,b=m+u.label.length+(l==="title"?n.length:0);c.dispatch({changes:{from:m,to:f,insert:d},selection:L.EditorSelection.create([L.EditorSelection.range(m+u.label.length+(l==="title"?1:-t.length),b),L.EditorSelection.cursor(b)],1)}),c.focus()},we=e=>(t,n,o,l)=>{const c=e.slice(l-o);t.dispatch(t.state.replaceSelection(`${c} `))},$e=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:we(u)}}),...["unchecked","checked"].map(l=>{const c=l==="checked"?"- [x]":"- [ ]";return{label:c,type:"text",apply:we(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 Ze.autocompletion({override:e?[t,...e]:[t]})},ft=(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:A=>(i.bus.emit(e,i.ON_SAVE,A.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)},m={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)},d={key:"Ctrl-4",mac:"Cmd-4",run:()=>(i.bus.emit(e,i.REPLACE,"h4"),!0)},b={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)},C={key:"Ctrl-o",mac:"Cmd-o",run:()=>(i.bus.emit(e,i.REPLACE,"orderedList"),!0)},T={key:"Ctrl-c",mac:"Cmd-c",shift:()=>(i.bus.emit(e,i.REPLACE,"code"),!0),any(A,N){return(N.ctrlKey||N.metaKey)&&N.altKey&&N.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)},k={key:"Ctrl-f",mac:"Cmd-f",shift:()=>t.noPrettier?!1:(i.bus.emit(e,i.REPLACE,"prettier"),!0)},I={any:(A,N)=>(N.ctrlKey||N.metaKey)&&N.altKey&&N.shiftKey&&N.code==="KeyT"?(i.bus.emit(e,i.REPLACE,"table"),!0):!1},R={key:"Ctrl-d",mac:"Cmd-d",run:W.deleteLine,preventDefault:!0};return[n,R,o,l,c,u,m,f,d,b,x,h,p,C,T,E,k,I,...Ye.searchKeymap]},gt=()=>s.jsx("div",{className:`${r.prefix}-divider`}),ht=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=a.useContext(v.EditorContext);return s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.bold,"aria-label":t.toolbarTips?.bold,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"bold")},type:"button",children:[s.jsx(y.IconIns,{name:"bold"}),n&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.bold})]})},xt=a.memo(ht),pt=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o,catalogVisible:l}=a.useContext(v.EditorContext);return s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,l&&`${r.prefix}-toolbar-active`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.catalog,"aria-label":t.toolbarTips?.catalog,disabled:o,onClick:()=>{i.bus.emit(e,i.CHANGE_CATALOG_VISIBLE)},type:"button",children:[s.jsx(y.IconIns,{name:"catalog"}),n&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.catalog})]},"bar-catalog")},Ct=a.memo(pt),Tt=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=a.useContext(v.EditorContext);return s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.code,"aria-label":t.toolbarTips?.code,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"code")},type:"button",children:[s.jsx(y.IconIns,{name:"code"}),n&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.code})]})},vt=a.memo(Tt),Et=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=a.useContext(v.EditorContext);return s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.codeRow,"aria-label":t.toolbarTips?.codeRow,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"codeRow")},type:"button",children:[s.jsx(y.IconIns,{name:"code-row"}),n&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.codeRow})]})},wt=a.memo(Et),$t=()=>{const{setting:e,usedLanguageText:t,showToolbarName:n,disabled:o}=a.useContext(v.EditorContext),{fullscreenHandler:l}=jo();return s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,e.fullscreen&&`${r.prefix}-toolbar-active`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.fullscreen,"aria-label":t.toolbarTips?.fullscreen,disabled:o,onClick:()=>{l()},type:"button",children:[s.jsx(y.IconIns,{name:e.fullscreen?"fullscreen-exit":"fullscreen"}),n&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.fullscreen})]})},kt=a.memo($t),yt=()=>{const{usedLanguageText:e,showToolbarName:t,disabled:n}=a.useContext(v.EditorContext);return s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,n&&`${r.prefix}-disabled`]),title:e.toolbarTips?.github,"aria-label":e.toolbarTips?.github,disabled:n,onClick:()=>{oe.linkTo("https://github.com/imzbf/md-editor-rt")},type:"button",children:[s.jsx(y.IconIns,{name:"github"}),t&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:e.toolbarTips?.github})]})},It=a.memo(yt),St=()=>{const{usedLanguageText:e,setting:t,updateSetting:n,showToolbarName:o,disabled:l}=a.useContext(v.EditorContext);return s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,t.htmlPreview&&`${r.prefix}-toolbar-active`,l&&`${r.prefix}-disabled`]),title:e.toolbarTips?.htmlPreview,"aria-label":e.toolbarTips?.htmlPreview,disabled:l,onClick:()=>{n("htmlPreview")},type:"button",children:[s.jsx(y.IconIns,{name:"preview-html"}),o&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:e.toolbarTips?.htmlPreview})]})},jt=a.memo(St),Lt=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=a.useContext(v.EditorContext);return s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.image,"aria-label":t.toolbarTips?.image,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"image")},type:"button",children:[s.jsx(y.IconIns,{name:"image"}),n&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.image})]})},Nt=a.memo(Lt);let z=null;const Rt=e=>{const t=a.useContext(v.EditorContext),{editorId:n,usedLanguageText:o,rootRef:l}=t,c=r.globalConfig.editorExtensions.cropper.instance,u=a.useRef(null),m=a.useRef(null),f=a.useRef(null),[d,b]=a.useState({cropperInited:!1,imgSelected:!1,imgSrc:"",isFullscreen:!1});a.useEffect(()=>{e.visible&&!d.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 C=u.current.files||[];if(C?.length>0){const T=new FileReader;T.onload=E=>{b(k=>({...k,imgSelected:!0,imgSrc:E.target.result}))},T.readAsDataURL(C[0])}})},[e.visible,d.cropperInited,c,n]),a.useEffect(()=>{f.current?.setAttribute("style","")},[d.imgSelected]),a.useEffect(()=>{z?.destroy(),f.current?.setAttribute("style",""),m.current&&d.imgSrc&&(z=new window.Cropper(m.current,{viewMode:2,preview:(l.current?.getRootNode()).querySelector(`.${r.prefix}-clip-preview-target`)}))},[d.imgSrc,d.isFullscreen,l]);const x=a.useMemo(()=>d.isFullscreen?{width:"100%",height:"100%"}:{width:"668px",height:"392px"},[d.isFullscreen]),h=()=>{z.clear(),z.destroy(),z=null,u.current.value="",b(C=>({...C,imgSrc:"",imgSelected:!1}))},p=a.useCallback(C=>{b(T=>({...T,isFullscreen:C}))},[]);return a.useMemo(()=>s.jsxs(y.Modal,{className:`${r.prefix}-modal-clip`,title:o.clipModalTips?.title,visible:e.visible,onClose:e.onCancel,showAdjust:!0,isFullscreen:d.isFullscreen,onAdjust:p,...x,children:[s.jsxs("div",{className:`${r.prefix}-form-item ${r.prefix}-clip`,children:[s.jsx("div",{className:`${r.prefix}-clip-main`,children:d.imgSelected?s.jsxs("div",{className:`${r.prefix}-clip-cropper`,children:[s.jsx("img",{src:d.imgSrc,ref:m,style:{display:"none"},alt:""}),s.jsx("div",{className:`${r.prefix}-clip-delete`,onClick:h,children:s.jsx(y.IconIns,{name:"delete"})})]}):s.jsx("div",{className:`${r.prefix}-clip-upload`,onClick:()=>{u.current.click()},role:"button",tabIndex:0,"aria-label":o.imgTitleItem?.upload,children:s.jsx(y.IconIns,{name:"upload"})})}),s.jsx("div",{className:`${r.prefix}-clip-preview`,children:s.jsx("div",{className:`${r.prefix}-clip-preview-target`,ref:f})})]}),s.jsx("div",{className:`${r.prefix}-form-item`,children:s.jsx("button",{className:`${r.prefix}-btn`,type:"button",onClick:()=>{if(z){const C=z.getCroppedCanvas();i.bus.emit(n,i.UPLOAD_IMAGE,[$.base642File(C.toDataURL("image/png"))],e.onOk),h()}},children:o.linkModalTips?.buttonOK})}),s.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,d.isFullscreen,d.imgSelected,d.imgSrc,p,x,n])},At=a.memo(Rt),Pt=e=>s.jsx(At,{visible:e.clipVisible,onOk:e.onOk,onCancel:e.onCancel}),Mt=a.memo(Pt),Dt=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=a.useContext(v.EditorContext),l=`${e}-toolbar-wrapper`,[c,u]=a.useState(!1),[m,f]=a.useState(!1),d=a.useRef(null),b=a.useCallback(()=>{i.bus.emit(e,i.UPLOAD_IMAGE,Array.from(d.current?.files||[])),d.current.value=""},[e]),x=a.useCallback((E,k)=>{o||i.bus.emit(e,i.REPLACE,E,k)},[e,o]),h=a.useCallback(()=>{f(!1)},[]),p=a.useCallback(E=>{E&&x("image",{desc:E.desc,url:E.url,transform:!0}),f(!1)},[x]),C=a.useMemo(()=>{const E=[{key:"link",label:t.imgTitleItem?.link,onClick:()=>x("image")},{key:"upload",label:t.imgTitleItem?.upload,onClick:()=>d.current?.click()},{key:"clip",label:t.imgTitleItem?.clip2upload,onClick:()=>f(!0)}];return s.jsx("ul",{className:`${r.prefix}-menu`,onClick:()=>{u(!1)},role:"menu",children:E.map(k=>s.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-image`,onClick:k.onClick,role:"menuitem",tabIndex:0,children:k.label},k.key))})},[x,t.imgTitleItem]),T=a.useMemo(()=>s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.image,"aria-label":t.toolbarTips?.image,disabled:o,type:"button",children:[s.jsx(y.IconIns,{name:"image"}),n&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.image})]}),[o,n,t.toolbarTips?.image]);return a.useEffect(()=>{const E=d.current;return E?.addEventListener("change",b),()=>{E?.removeEventListener("change",b)}},[b]),s.jsxs(s.Fragment,{children:[s.jsx("label",{htmlFor:`${l}_label`,style:{display:"none"},"aria-label":t.imgTitleItem?.upload}),s.jsx("input",{id:`${l}_label`,ref:d,accept:"image/*",type:"file",multiple:!0,style:{display:"none"}}),s.jsx(Mt,{clipVisible:m,onCancel:h,onOk:p}),s.jsx(J.Dropdown,{relative:`#${l}`,visible:c,onChange:u,disabled:o,overlay:C,children:T})]})},Ft=a.memo(Dt),Ht=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=a.useContext(v.EditorContext);return s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.italic,"aria-label":t.toolbarTips?.italic,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"italic")},type:"button",children:[s.jsx(y.IconIns,{name:"italic"}),n&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.italic})]})},Vt=a.memo(Ht),Ot=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=a.useContext(v.EditorContext),l=`${e}-toolbar-wrapper`,[c,u]=a.useState(!1),m=a.useCallback(b=>{o||i.bus.emit(e,i.REPLACE,b)},[o,e]),f=a.useMemo(()=>s.jsxs("ul",{className:`${r.prefix}-menu`,onClick:()=>{u(!1)},role:"menu",children:[s.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-katex`,onClick:()=>{m("katexInline")},role:"menuitem",tabIndex:0,children:t.katex?.inline}),s.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-katex`,onClick:()=>{m("katexBlock")},role:"menuitem",tabIndex:0,children:t.katex?.block})]}),[m,t.katex?.block,t.katex?.inline]),d=a.useMemo(()=>s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.katex,"aria-label":t.toolbarTips?.katex,disabled:o,type:"button",children:[s.jsx(y.IconIns,{name:"formula"}),n&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.katex})]}),[o,n,t.toolbarTips?.katex]);return s.jsx(J.Dropdown,{relative:`#${l}`,visible:c,onChange:u,disabled:o,overlay:f,children:d},"bar-katex")},_t=a.memo(Ot),Bt=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=a.useContext(v.EditorContext);return s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.link,"aria-label":t.toolbarTips?.link,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"link")},type:"button",children:[s.jsx(y.IconIns,{name:"link"}),n&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.link})]})},qt=a.memo(Bt),Wt=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=a.useContext(v.EditorContext),l=`${e}-toolbar-wrapper`,[c,u]=a.useState(!1),m=a.useCallback(b=>{o||i.bus.emit(e,i.REPLACE,b)},[o,e]),f=a.useMemo(()=>s.jsxs("ul",{className:`${r.prefix}-menu`,onClick:()=>{u(!1)},role:"menu",children:[s.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-mermaid`,onClick:()=>{m("flow")},role:"menuitem",tabIndex:0,children:t.mermaid?.flow}),s.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-mermaid`,onClick:()=>{m("sequence")},role:"menuitem",tabIndex:0,children:t.mermaid?.sequence}),s.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-mermaid`,onClick:()=>{m("gantt")},role:"menuitem",tabIndex:0,children:t.mermaid?.gantt}),s.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-mermaid`,onClick:()=>{m("class")},role:"menuitem",tabIndex:0,children:t.mermaid?.class}),s.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-mermaid`,onClick:()=>{m("state")},role:"menuitem",tabIndex:0,children:t.mermaid?.state}),s.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-mermaid`,onClick:()=>{m("pie")},role:"menuitem",tabIndex:0,children:t.mermaid?.pie}),s.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-mermaid`,onClick:()=>{m("relationship")},role:"menuitem",tabIndex:0,children:t.mermaid?.relationship}),s.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-mermaid`,onClick:()=>{m("journey")},role:"menuitem",tabIndex:0,children:t.mermaid?.journey})]}),[m,t.mermaid?.class,t.mermaid?.flow,t.mermaid?.gantt,t.mermaid?.journey,t.mermaid?.pie,t.mermaid?.relationship,t.mermaid?.sequence,t.mermaid?.state]),d=a.useMemo(()=>s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.mermaid,"aria-label":t.toolbarTips?.mermaid,disabled:o,type:"button",children:[s.jsx(y.IconIns,{name:"mermaid"}),n&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.mermaid})]}),[o,n,t.toolbarTips?.mermaid]);return s.jsx(J.Dropdown,{relative:`#${l}`,visible:c,onChange:u,disabled:o,overlay:f,children:d},"bar-mermaid")},zt=a.memo(Wt),Kt=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=a.useContext(v.EditorContext);return s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.next,"aria-label":t.toolbarTips?.next,disabled:o,onClick:()=>{i.bus.emit(e,i.CTRL_SHIFT_Z)},type:"button",children:[s.jsx(y.IconIns,{name:"next"}),n&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.next})]})},Gt=a.memo(Kt),Ut=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=a.useContext(v.EditorContext);return s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.orderedList,"aria-label":t.toolbarTips?.orderedList,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"orderedList")},type:"button",children:[s.jsx(y.IconIns,{name:"ordered-list"}),n&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.orderedList})]})},Zt=a.memo(Ut),Yt=()=>{const{setting:e,usedLanguageText:t,updateSetting:n,showToolbarName:o,disabled:l}=a.useContext(v.EditorContext);return s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,e.pageFullscreen&&`${r.prefix}-toolbar-active`,l&&`${r.prefix}-disabled`]),title:t.toolbarTips?.pageFullscreen,"aria-label":t.toolbarTips?.pageFullscreen,disabled:l,onClick:()=>{n("pageFullscreen")},type:"button",children:[s.jsx(y.IconIns,{name:e.pageFullscreen?"minimize":"maximize"}),o&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.pageFullscreen})]})},Xt=a.memo(Yt),Jt=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=a.useContext(v.EditorContext);return s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.prettier,"aria-label":t.toolbarTips?.prettier,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"prettier")},type:"button",children:[s.jsx(y.IconIns,{name:"prettier"}),n&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.prettier})]})},Qt=a.memo(Jt),eo=()=>{const{usedLanguageText:e,showToolbarName:t,disabled:n,setting:o,updateSetting:l}=a.useContext(v.EditorContext);return s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o.preview&&`${r.prefix}-toolbar-active`,n&&`${r.prefix}-disabled`]),title:e.toolbarTips?.preview,"aria-label":e.toolbarTips?.preview,disabled:n,onClick:()=>{l("preview")},type:"button",children:[s.jsx(y.IconIns,{name:"preview"}),t&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:e.toolbarTips?.preview})]})},to=a.memo(eo),oo=()=>{const{usedLanguageText:e,showToolbarName:t,disabled:n,setting:o,updateSetting:l}=a.useContext(v.EditorContext);return s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o.previewOnly&&`${r.prefix}-toolbar-active`,n&&`${r.prefix}-disabled`]),title:e.toolbarTips?.previewOnly,"aria-label":e.toolbarTips?.previewOnly,disabled:n,onClick:()=>{l("previewOnly")},type:"button",children:[s.jsx(y.IconIns,{name:"preview-only"}),t&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:e.toolbarTips?.previewOnly})]})},ro=a.memo(oo),no=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=a.useContext(v.EditorContext);return s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.quote,"aria-label":t.toolbarTips?.quote,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"quote")},type:"button",children:[s.jsx(y.IconIns,{name:"quote"}),n&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.quote})]})},ao=a.memo(no),so=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=a.useContext(v.EditorContext);return s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.revoke,"aria-label":t.toolbarTips?.revoke,disabled:o,onClick:()=>{i.bus.emit(e,i.CTRL_Z)},type:"button",children:[s.jsx(y.IconIns,{name:"revoke"}),n&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.revoke})]})},lo=a.memo(so),io=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=a.useContext(v.EditorContext);return s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.save,"aria-label":t.toolbarTips?.save,disabled:o,onClick:()=>{i.bus.emit(e,i.ON_SAVE)},type:"button",children:[s.jsx(y.IconIns,{name:"save"}),n&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.save})]})},co=a.memo(io),uo=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=a.useContext(v.EditorContext);return s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.strikeThrough,"aria-label":t.toolbarTips?.strikeThrough,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"strikeThrough")},type:"button",children:[s.jsx(y.IconIns,{name:"strike-through"}),n&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.strikeThrough})]})},mo=a.memo(uo),bo=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=a.useContext(v.EditorContext);return s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.sub,"aria-label":t.toolbarTips?.sub,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"sub")},type:"button",children:[s.jsx(y.IconIns,{name:"sub"}),n&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.sub})]})},fo=a.memo(bo),go=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=a.useContext(v.EditorContext);return s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.sup,"aria-label":t.toolbarTips?.sup,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"sup")},type:"button",children:[s.jsx(y.IconIns,{name:"sup"}),n&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.sup})]})},ho=a.memo(go),xo=e=>{const[t,n]=a.useState({x:-1,y:-1}),o=a.useMemo(()=>JSON.stringify(e.tableShape),[e.tableShape]),l=a.useCallback(()=>{const m=[...JSON.parse(o)];return(!m[2]||m[2]<m[0])&&(m[2]=m[0]),(!m[3]||m[3]<m[3])&&(m[3]=m[1]),m},[o]),[c,u]=a.useState(l);return a.useEffect(()=>{u(l),n({x:-1,y:-1})},[l]),s.jsx("div",{className:`${r.prefix}-table-shape`,onMouseLeave:()=>{u(l),n({x:-1,y:-1})},children:new Array(c[1]).fill("").map((m,f)=>s.jsx("div",{className:`${r.prefix}-table-shape-row`,children:new Array(c[0]).fill("").map((d,b)=>s.jsx("div",{className:`${r.prefix}-table-shape-col`,onMouseEnter:()=>{n({x:f,y:b}),b+1===c[0]&&b+1<c[2]?u(x=>{const h=[...x];return h[0]=x[0]+1,h}):b+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:s.jsx("div",{className:[`${r.prefix}-table-shape-col-default`,f<=t.x&&b<=t.y&&`${r.prefix}-table-shape-col-include`].filter(x=>!!x).join(" ")})},`table-shape-col-${b}`))},`table-shape-row-${f}`))})},po=a.memo(xo),Co=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o,tableShape:l}=a.useContext(v.EditorContext),c=`${e}-toolbar-wrapper`,[u,m]=a.useState(!1),f=a.useCallback(x=>{o||i.bus.emit(e,i.REPLACE,"table",{selectedShape:x})},[o,e]),d=a.useMemo(()=>s.jsx(po,{tableShape:l,onSelected:f}),[f,l]),b=a.useMemo(()=>s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.table,"aria-label":t.toolbarTips?.table,disabled:o,type:"button",children:[s.jsx(y.IconIns,{name:"table"}),n&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.table})]}),[o,n,t.toolbarTips?.table]);return s.jsx(J.Dropdown,{relative:`#${c}`,visible:u,onChange:m,disabled:o,overlay:d,children:b},"bar-table")},To=a.memo(Co),vo=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=a.useContext(v.EditorContext);return s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.task,"aria-label":t.toolbarTips?.task,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"task")},type:"button",children:[s.jsx(y.IconIns,{name:"task"}),n&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.task})]})},Eo=a.memo(vo),wo=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=a.useContext(v.EditorContext),l=`${e}-toolbar-wrapper`,[c,u]=a.useState(!1),m=a.useCallback(b=>{o||i.bus.emit(e,i.REPLACE,b)},[o,e]),f=a.useMemo(()=>s.jsxs("ul",{className:`${r.prefix}-menu`,onClick:()=>{u(!1)},role:"menu",children:[s.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-title`,onClick:()=>{m("h1")},role:"menuitem",tabIndex:0,children:t.titleItem?.h1}),s.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-title`,onClick:()=>{m("h2")},role:"menuitem",tabIndex:0,children:t.titleItem?.h2}),s.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-title`,onClick:()=>{m("h3")},role:"menuitem",tabIndex:0,children:t.titleItem?.h3}),s.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-title`,onClick:()=>{m("h4")},role:"menuitem",tabIndex:0,children:t.titleItem?.h4}),s.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-title`,onClick:()=>{m("h5")},role:"menuitem",tabIndex:0,children:t.titleItem?.h5}),s.jsx("li",{className:`${r.prefix}-menu-item ${r.prefix}-menu-item-title`,onClick:()=>{m("h6")},role:"menuitem",tabIndex:0,children:t.titleItem?.h6})]}),[m,t.titleItem?.h1,t.titleItem?.h2,t.titleItem?.h3,t.titleItem?.h4,t.titleItem?.h5,t.titleItem?.h6]),d=a.useMemo(()=>s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),disabled:o,title:t.toolbarTips?.title,"aria-label":t.toolbarTips?.title,type:"button",children:[s.jsx(y.IconIns,{name:"title"}),n&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.title})]}),[o,n,t.toolbarTips?.title]);return s.jsx(J.Dropdown,{relative:`#${l}`,visible:c,onChange:u,disabled:o,overlay:f,children:d})},$o=a.memo(wo),ko=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=a.useContext(v.EditorContext);return s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.underline,"aria-label":t.toolbarTips?.underline,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"underline")},type:"button",children:[s.jsx(y.IconIns,{name:"underline"}),n&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.underline})]})},yo=a.memo(ko),Io=()=>{const{editorId:e,usedLanguageText:t,showToolbarName:n,disabled:o}=a.useContext(v.EditorContext);return s.jsxs("button",{className:$.classnames([`${r.prefix}-toolbar-item`,o&&`${r.prefix}-disabled`]),title:t.toolbarTips?.unorderedList,"aria-label":t.toolbarTips?.unorderedList,disabled:o,onClick:()=>{i.bus.emit(e,i.REPLACE,"unorderedList")},type:"button",children:[s.jsx(y.IconIns,{name:"unordered-list"}),n&&s.jsx("div",{className:`${r.prefix}-toolbar-item-name`,children:t.toolbarTips?.unorderedList})]})},So=a.memo(Io),jo=()=>{const{editorId:e,updateSetting:t}=a.useContext(v.EditorContext),n=a.useRef(r.globalConfig.editorExtensions.screenfull.instance),o=a.useRef(!1),l=a.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 a.useEffect(()=>{const c=()=>{t("fullscreen",o.current)};let u=-1;if(!n.current){const{editorExtensions:m,editorExtensionsAttrs:f}=r.globalConfig;u=requestAnimationFrame(()=>{Je.appendHandler("script",{...f.screenfull?.js,src:m.screenfull.js,id:O.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]),a.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}},He=()=>{const{editorId:e,theme:t,previewTheme:n,language:o,disabled:l,noUploadImg:c,noPrettier:u,codeTheme:m,showToolbarName:f,setting:d,defToolbars:b}=a.useContext(v.EditorContext);return{barRender:a.useCallback((h,p)=>{if(r.allToolbar.includes(h)){const C=`bar-divider-${p??e}`;switch(h){case"-":return s.jsx(gt,{},C);case"bold":return s.jsx(xt,{},"bar-bold");case"underline":return s.jsx(yo,{},"bar-unorderline");case"italic":return s.jsx(Vt,{},"bar-italic");case"strikeThrough":return s.jsx(mo,{},"bar-strikeThrough");case"title":return s.jsx($o,{},"bar-title");case"sub":return s.jsx(fo,{},"bar-sub");case"sup":return s.jsx(ho,{},"bar-sup");case"quote":return s.jsx(ao,{},"bar-quote");case"unorderedList":return s.jsx(So,{},"bar-unorderedList");case"orderedList":return s.jsx(Zt,{},"bar-orderedList");case"task":return s.jsx(Eo,{},"bar-task");case"codeRow":return s.jsx(wt,{},"bar-codeRow");case"code":return s.jsx(vt,{},"bar-code");case"link":return s.jsx(qt,{},"bar-link");case"image":return c?s.jsx(Nt,{},"bar-image"):s.jsx(Ft,{},"bar-imageDropdown");case"table":return s.jsx(To,{},"bar-table");case"revoke":return s.jsx(lo,{},"bar-revoke");case"next":return s.jsx(Gt,{},"bar-next");case"save":return s.jsx(co,{},"bar-save");case"prettier":return!u&&s.jsx(Qt,{},"bar-prettier");case"pageFullscreen":return!d.fullscreen&&s.jsx(Xt,{},"bar-pageFullscreen");case"fullscreen":return s.jsx(kt,{},"bar-fullscreen");case"catalog":return s.jsx(Ct,{},"bar-catalog");case"preview":return s.jsx(to,{},"bar-preview");case"previewOnly":return s.jsx(ro,{},"bar-previewOnly");case"htmlPreview":return s.jsx(jt,{},"bar-htmlPreview");case"github":return s.jsx(It,{},"bar-github");case"mermaid":return s.jsx(zt,{},"bar-mermaid");case"katex":return s.jsx(_t,{},"bar-katex");default:return null}}if(b){const C=b[h];if(C)return a.cloneElement(C,{theme:C.props?.theme||t,codeTheme:C.props?.codeTheme||m,previewTheme:C.props?.previewTheme||n,language:C.props?.language||o,disabled:C.props?.disabled||l,showToolbarName:C.props?.showToolbarName||f,insert(T){i.bus.emit(e,i.REPLACE,"universal",{generate:T})}})}return null},[m,b,l,e,o,u,c,n,d.fullscreen,f,t])}},Lo=()=>{const e=No(),{barRender:t}=He();return s.jsx(v.EditorContext.Provider,{value:e,children:s.jsx("div",{className:`${r.prefix}-floating-toolbar`,children:e.floatingToolbars.map((n,o)=>t(n,`floating-${o}`))})})},Ve=a.createContext({getValue:()=>v.defaultContextValue,subscribe:()=>()=>{}}),No=()=>{const e=a.useContext(Ve);return a.useSyncExternalStore(e.subscribe,e.getValue)},de=L.StateEffect.define(),Ro=L.StateField.define({create(){return null},update(e,t){for(const n of t.effects)n.is(de)&&(e=n.value);return e},provide:e=>P.showTooltip.from(e)}),Ao=e=>{let t=null;const n=(c,u)=>{t&&t.kind===u.kind&&t.pos===u.pos||(t=u,c.dispatch({effects:de.of({pos:u.pos,above:!0,arrow:!0,create:()=>{const m=document.createElement("div"),f=`${r.prefix}-floating-toolbar-container`;m.classList.add(f),m.dataset.state="hidden",requestAnimationFrame(()=>{m.dataset.state="visible"});const d=document.createElement("div");m.appendChild(d);const b=Xe.createRoot(d);return b.render(s.jsx(Ve.Provider,{value:e.contextValue,children:s.jsx(Lo,{})})),{dom:m,destroy:()=>b.unmount()}}})}))},o=c=>{t&&(t=null,c.dispatch({effects:de.of(null)}))},l=P.EditorView.updateListener.of(c=>{if(c.selectionSet||c.docChanged){const u=c.state,m=u.selection.main;if(!m.empty)n(c.view,{kind:"selection",pos:m.anchor});else{const f=m.head,d=u.doc.lineAt(f);/^\s*$/.test(d.text)?n(c.view,{kind:"emptyLine",pos:f}):o(c.view)}}});return[Ro,l]},Po=/[a-z][a-z0-9.+-]*:\/\/[^\s<>"'`()]+(?:\([^\s<>"'`]*\)[^\s<>"'`]*)*/i,Mo=/\/\/[^\s<>"'`()]+/i,Do=/data:[a-z]+\/[a-z0-9.+-]+(?:;base64)?,[a-z0-9+/=%]+/i,Fo=/\/(?!\/)[^\s<>"'`()]+/i,te=new RegExp(`(${Po.source}|${Mo.source}|${Do.source}|${Fo.source})`,"gi"),Ho=/[a-z0-9.+-]/i,Vo=e=>{const t=[];te.lastIndex=0;let n;for(;n=te.exec(e);){const o=n.index??0,l=o>0?e[o-1]:"";if(l&&Ho.test(l)||l==="<"&&e[o]==="/")continue;const u=o+n[0].length;t.push([o,u])}return t},Oo=(e,t,n)=>e.some(o=>o.from===t&&o.to===n),_o=e=>{const t=e.shortenText||(()=>"..."),n=L.StateEffect.define(),o=L.StateEffect.define(),l=(f,d)=>{const b=new L.RangeSetBuilder,x=[];for(let h=1;h<=f.doc.lines;h++){const p=f.doc.line(h),C=p.text;te.lastIndex=0;const T=e.findTexts?.({state:f,lineText:C,lineNumber:p.number,lineFrom:p.from,lineTo:p.to,defaultTextRegex:te})??Vo(C);for(const E of T){if(!E)continue;const[k,I]=E;if(typeof k!="number"||typeof I!="number"||k<0||I<=k||k>=C.length||I>C.length)continue;const R=C.slice(k,I);if(!R||R.length<=e.maxLength)continue;const A=p.from+k,N=p.from+I;if(Oo(d,A,N)){x.push({from:A,to:N});continue}const q=t(R);b.add(A,N,P.Decoration.replace({widget:new c(q,R,A,N)}))}}return{deco:b.finish(),expanded:x}};class c extends P.WidgetType{constructor(d,b,x,h){super(),this.short=d,this.raw=b,this.from=x,this.to=h}toDOM(d){const b=document.createElement("span");return b.textContent=this.short,b.className="cm-short-text",b.title=this.raw,b.style.display="inline",b.style.textDecoration="underline",b.addEventListener("mousedown",x=>{x.preventDefault(),x.stopPropagation(),d.dispatch({selection:L.EditorSelection.cursor(this.from),effects:n.of({from:this.from,to:this.to,expand:!0})}),d.focus()}),b.addEventListener("click",x=>{x.preventDefault()}),b}ignoreEvent(){return!1}eq(d){return this.short===d.short&&this.raw===d.raw&&this.from===d.from&&this.to===d.to}}const u=L.StateField.define({create(f){return l(f,[])},update(f,d){let b=f.expanded;d.docChanged&&b.length&&(b=b.map(({from:h,to:p})=>({from:d.changes.mapPos(h,1),to:d.changes.mapPos(p,-1)})).filter(({from:h,to:p})=>h<p));let x=b!==f.expanded;for(const h of d.effects)h.is(n)?h.value.expand?b=[{from:h.value.from,to:h.value.to}]:b=b.filter(({from:p,to:C})=>p!==h.value.from||C!==h.value.to):h.is(o)&&b.length>0&&(b=[]);return!x&&b!==f.expanded&&(x=!0),d.docChanged||x?l(d.state,b):f},provide:f=>P.EditorView.decorations.compute([f],d=>d.field(f).deco)}),m=P.EditorView.domEventHandlers({mousedown(f,d){const b=d.state.field(u,!1);if(!b||b.expanded.length===0)return!1;const x=f.target;if(x&&d.dom.contains(x)){const h=d.posAtDOM(x,0);if(h!=null&&h!==-1&&b.expanded.some(({from:C,to:T})=>h>=C&&h<=T))return!1}return d.dispatch({effects:o.of(void 0)}),!1}});return[u,m]},Bo="#e5c07b",ke="var(--md-color)",qo="#56b6c2",Wo="#fff",Z="#3f4a54",ye="#2d8cf0",zo="#2d8cf0",Ko="#3f4a54",Ie="#d19a66",Go="#c678dd",Uo="#f6f6f6",Zo="#ceedfa33",Se="var(--md-bk-color)",ie="var(--md-bk-color)",Yo="#bad5fa",je="#3f4a54",Xo=P.EditorView.theme({"&":{color:Z,backgroundColor:Se},".cm-content":{caretColor:je},".cm-cursor, .cm-dropCursor":{borderLeftColor:je},"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":{backgroundColor:Yo},".cm-panels":{backgroundColor:Uo,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:Se,color:Z,borderRight:"1px solid",borderColor:"var(--md-border-color)"},".cm-activeLineGutter":{backgroundColor:Zo},".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:Z}}}),Jo=X.HighlightStyle.define([{tag:g.tags.keyword,color:Go},{tag:[g.tags.name,g.tags.deleted,g.tags.character,g.tags.propertyName,g.tags.macroName],color:ke},{tag:[g.tags.function(g.tags.variableName),g.tags.labelName],color:zo},{tag:[g.tags.color,g.tags.constant(g.tags.name),g.tags.standard(g.tags.name)],color:Ie},{tag:[g.tags.definition(g.tags.name),g.tags.separator],color:Z},{tag:[g.tags.typeName,g.tags.className,g.tags.number,g.tags.changed,g.tags.annotation,g.tags.modifier,g.tags.self,g.tags.namespace],color:Bo},{tag:[g.tags.operator,g.tags.operatorKeyword,g.tags.url,g.tags.escape,g.tags.regexp,g.tags.link,g.tags.special(g.tags.string)],color:qo},{tag:[g.tags.meta,g.tags.comment],color:ye},{tag:g.tags.strong,fontWeight:"bold"},{tag:g.tags.emphasis,fontStyle:"italic"},{tag:g.tags.strikethrough,textDecoration:"line-through"},{tag:g.tags.link,color:ye,textDecoration:"underline"},{tag:g.tags.heading,fontWeight:"bold",color:ke},{tag:[g.tags.atom,g.tags.bool,g.tags.special(g.tags.variableName)],color:Ie},{tag:[g.tags.processingInstruction,g.tags.string,g.tags.inserted],color:Ko},{tag:g.tags.invalid,color:Wo}]),Le=[Xo,X.syntaxHighlighting(Jo)],Qo="#e5c07b",Ne="var(--md-color)",er="#56b6c2",tr="#ffffff",Y="var(--md-color)",Re="#e5c07b",or="#e5c07b",rr="var(--md-color)",Ae="#d19a66",nr="#c678dd",ar="