markdown-text-editor 1.0.1 → 1.1.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +113 -17
- package/dist/markdown-text-editor.es.js +2570 -0
- package/dist/markdown-text-editor.es.js.map +1 -0
- package/dist/markdown-text-editor.umd.js +213 -0
- package/dist/markdown-text-editor.umd.js.map +1 -0
- package/package.json +25 -25
- package/dist/index.css +0 -5
- package/dist/index.css.map +0 -1
- package/dist/index.js +0 -3
- package/dist/index.js.LICENSE.txt +0 -1
- package/dist/index.js.map +0 -1
- package/dist/markdown-text-editor.css +0 -5
- package/dist/markdown-text-editor.css.map +0 -1
- package/dist/markdown-text-editor.js +0 -3
- package/dist/markdown-text-editor.js.LICENSE.txt +0 -3
- package/dist/markdown-text-editor.js.map +0 -1
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"markdown-text-editor.es.js","names":["marked"],"sources":["../node_modules/marked/lib/marked.esm.js","../src/components/toolbar/MakeTool.js","../src/components/toolbar/tools/BoldTool.js","../src/components/toolbar/tools/ItalicTool.js","../src/components/toolbar/tools/StrikethroughTool.js","../src/components/toolbar/tools/ULTool.js","../src/components/toolbar/tools/OLTool.js","../src/components/toolbar/tools/PreviewTool.js","../src/components/toolbar/tools/CheckListTool.js","../src/components/toolbar/tools/BlockQuoteTool.js","../src/components/modal.js","../src/components/toolbar/tools/LinkTool.js","../src/components/toolbar/tools/HeadingTool.js","../src/components/toolbar/tools/ImageTool.js","../src/components/toolbar/tools/UndoTool.js","../src/components/toolbar/tools/RedoTool.js","../src/components/toolbar/tools/IndentTool.js","../src/components/toolbar/tools/OutdentTool.js","../src/components/toolbar/tools/CodeTool.js","../src/components/toolbar/tools/CodeBlockTool.js","../src/components/toolbar/tools/HrTool.js","../src/components/toolbar/tools/TableTool.js","../src/components/toolbar/Toolbar.js","../src/components/Preview.js","../src/components/Footer.js","../node_modules/diff/libesm/diff/base.js","../node_modules/diff/libesm/diff/character.js","../node_modules/diff/libesm/util/string.js","../node_modules/diff/libesm/diff/word.js","../node_modules/diff/libesm/diff/line.js","../node_modules/diff/libesm/diff/sentence.js","../node_modules/diff/libesm/diff/css.js","../node_modules/diff/libesm/diff/json.js","../node_modules/diff/libesm/diff/array.js","../src/utils/UndoRedoManager.js","../src/utils/IndentManager.js","../src/utils/ListManager.js","../src/components/Editor.js"],"sourcesContent":["/**\n * marked v18.0.3 - a markdown parser\n * Copyright (c) 2018-2026, MarkedJS. (MIT License)\n * Copyright (c) 2011-2018, Christopher Jeffrey. (MIT License)\n * https://github.com/markedjs/marked\n */\n\n/**\n * DO NOT EDIT THIS FILE\n * The code in this file is generated from files in ./src/\n */\n\nfunction z(){return{async:!1,breaks:!1,extensions:null,gfm:!0,hooks:null,pedantic:!1,renderer:null,silent:!1,tokenizer:null,walkTokens:null}}var T=z();function G(l){T=l}var _={exec:()=>null};function d(l,e=\"\"){let t=typeof l==\"string\"?l:l.source,n={replace:(s,r)=>{let i=typeof r==\"string\"?r:r.source;return i=i.replace(m.caret,\"$1\"),t=t.replace(s,i),n},getRegex:()=>new RegExp(t,e)};return n}var Re=((l=\"\")=>{try{return!!new RegExp(\"(?<=1)(?<!1)\"+l)}catch{return!1}})(),m={codeRemoveIndent:/^(?: {1,4}| {0,3}\\t)/gm,outputLinkReplace:/\\\\([\\[\\]])/g,indentCodeCompensation:/^(\\s+)(?:```)/,beginningSpace:/^\\s+/,endingHash:/#$/,startingSpaceChar:/^ /,endingSpaceChar:/ $/,nonSpaceChar:/[^ ]/,newLineCharGlobal:/\\n/g,tabCharGlobal:/\\t/g,multipleSpaceGlobal:/\\s+/g,blankLine:/^[ \\t]*$/,doubleBlankLine:/\\n[ \\t]*\\n[ \\t]*$/,blockquoteStart:/^ {0,3}>/,blockquoteSetextReplace:/\\n {0,3}((?:=+|-+) *)(?=\\n|$)/g,blockquoteSetextReplace2:/^ {0,3}>[ \\t]?/gm,listReplaceNesting:/^ {1,4}(?=( {4})*[^ ])/g,listIsTask:/^\\[[ xX]\\] +\\S/,listReplaceTask:/^\\[[ xX]\\] +/,listTaskCheckbox:/\\[[ xX]\\]/,anyLine:/\\n.*\\n/,hrefBrackets:/^<(.*)>$/,tableDelimiter:/[:|]/,tableAlignChars:/^\\||\\| *$/g,tableRowBlankLine:/\\n[ \\t]*$/,tableAlignRight:/^ *-+: *$/,tableAlignCenter:/^ *:-+: *$/,tableAlignLeft:/^ *:-+ *$/,startATag:/^<a /i,endATag:/^<\\/a>/i,startPreScriptTag:/^<(pre|code|kbd|script)(\\s|>)/i,endPreScriptTag:/^<\\/(pre|code|kbd|script)(\\s|>)/i,startAngleBracket:/^</,endAngleBracket:/>$/,pedanticHrefTitle:/^([^'\"]*[^\\s])\\s+(['\"])(.*)\\2/,unicodeAlphaNumeric:/[\\p{L}\\p{N}]/u,escapeTest:/[&<>\"']/,escapeReplace:/[&<>\"']/g,escapeTestNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/,escapeReplaceNoEncode:/[<>\"']|&(?!(#\\d{1,7}|#[Xx][a-fA-F0-9]{1,6}|\\w+);)/g,caret:/(^|[^\\[])\\^/g,percentDecode:/%25/g,findPipe:/\\|/g,splitPipe:/ \\|/,slashPipe:/\\\\\\|/g,carriageReturn:/\\r\\n|\\r/g,spaceLine:/^ +$/gm,notSpaceStart:/^\\S*/,endingNewline:/\\n$/,listItemRegex:l=>new RegExp(`^( {0,3}${l})((?:[\t ][^\\\\n]*)?(?:\\\\n|$))`),nextBulletRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:[*+-]|\\\\d{1,9}[.)])((?:[ \t][^\\\\n]*)?(?:\\\\n|$))`),hrRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}((?:- *){3,}|(?:_ *){3,}|(?:\\\\* *){3,})(?:\\\\n+|$)`),fencesBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}(?:\\`\\`\\`|~~~)`),headingBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}#`),htmlBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}<(?:[a-z].*>|!--)`,\"i\"),blockquoteBeginRegex:l=>new RegExp(`^ {0,${Math.min(3,l-1)}}>`)},Te=/^(?:[ \\t]*(?:\\n|$))+/,Oe=/^((?: {4}| {0,3}\\t)[^\\n]+(?:\\n(?:[ \\t]*(?:\\n|$))*)?)+/,we=/^ {0,3}(`{3,}(?=[^`\\n]*(?:\\n|$))|~{3,})([^\\n]*)(?:\\n|$)(?:|([\\s\\S]*?)(?:\\n|$))(?: {0,3}\\1[~`]* *(?=\\n|$)|$)/,I=/^ {0,3}((?:-[\\t ]*){3,}|(?:_[ \\t]*){3,}|(?:\\*[ \\t]*){3,})(?:\\n+|$)/,ye=/^ {0,3}(#{1,6})(?=\\s|$)(.*)(?:\\n+|$)/,Q=/ {0,3}(?:[*+-]|\\d{1,9}[.)])/,ie=/^(?!bull |blockCode|fences|blockquote|heading|html|table)((?:.|\\n(?!\\s*?\\n|bull |blockCode|fences|blockquote|heading|html|table))+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,oe=d(ie).replace(/bull/g,Q).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/\\|table/g,\"\").getRegex(),Pe=d(ie).replace(/bull/g,Q).replace(/blockCode/g,/(?: {4}| {0,3}\\t)/).replace(/fences/g,/ {0,3}(?:`{3,}|~{3,})/).replace(/blockquote/g,/ {0,3}>/).replace(/heading/g,/ {0,3}#{1,6}/).replace(/html/g,/ {0,3}<[^\\n>]+>\\n/).replace(/table/g,/ {0,3}\\|?(?:[:\\- ]*\\|)+[\\:\\- ]*\\n/).getRegex(),j=/^([^\\n]+(?:\\n(?!hr|heading|lheading|blockquote|fences|list|html|table| +\\n)[^\\n]+)*)/,Se=/^[^\\n]+/,F=/(?!\\s*\\])(?:\\\\[\\s\\S]|[^\\[\\]\\\\])+/,$e=d(/^ {0,3}\\[(label)\\]: *(?:\\n[ \\t]*)?([^<\\s][^\\s]*|<.*?>)(?:(?: +(?:\\n[ \\t]*)?| *\\n[ \\t]*)(title))? *(?:\\n+|$)/).replace(\"label\",F).replace(\"title\",/(?:\"(?:\\\\\"?|[^\"\\\\])*\"|'[^'\\n]*(?:\\n[^'\\n]+)*\\n?'|\\([^()]*\\))/).getRegex(),Le=d(/^(bull)([ \\t][^\\n]+?)?(?:\\n|$)/).replace(/bull/g,Q).getRegex(),v=\"address|article|aside|base|basefont|blockquote|body|caption|center|col|colgroup|dd|details|dialog|dir|div|dl|dt|fieldset|figcaption|figure|footer|form|frame|frameset|h[1-6]|head|header|hr|html|iframe|legend|li|link|main|menu|menuitem|meta|nav|noframes|ol|optgroup|option|p|param|search|section|summary|table|tbody|td|tfoot|th|thead|title|tr|track|ul\",U=/<!--(?:-?>|[\\s\\S]*?(?:-->|$))/,_e=d(\"^ {0,3}(?:<(script|pre|style|textarea)[\\\\s>][\\\\s\\\\S]*?(?:</\\\\1>[^\\\\n]*\\\\n+|$)|comment[^\\\\n]*(\\\\n+|$)|<\\\\?[\\\\s\\\\S]*?(?:\\\\?>\\\\n*|$)|<![A-Z][\\\\s\\\\S]*?(?:>\\\\n*|$)|<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?(?:\\\\]\\\\]>\\\\n*|$)|</?(tag)(?: +|\\\\n|/?>)[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|<(?!script|pre|style|textarea)([a-z][\\\\w-]*)(?:attribute)*? */?>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$)|</(?!script|pre|style|textarea)[a-z][\\\\w-]*\\\\s*>(?=[ \\\\t]*(?:\\\\n|$))[\\\\s\\\\S]*?(?:(?:\\\\n[ \t]*)+\\\\n|$))\",\"i\").replace(\"comment\",U).replace(\"tag\",v).replace(\"attribute\",/ +[a-zA-Z:_][\\w.:-]*(?: *= *\"[^\"\\n]*\"| *= *'[^'\\n]*'| *= *[^\\s\"'=<>`]+)?/).getRegex(),ae=d(j).replace(\"hr\",I).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)])[ \\\\t]\").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex(),Me=d(/^( {0,3}> ?(paragraph|[^\\n]*)(?:\\n|$))+/).replace(\"paragraph\",ae).getRegex(),K={blockquote:Me,code:Oe,def:$e,fences:we,heading:ye,hr:I,html:_e,lheading:oe,list:Le,newline:Te,paragraph:ae,table:_,text:Se},re=d(\"^ *([^\\\\n ].*)\\\\n {0,3}((?:\\\\| *)?:?-+:? *(?:\\\\| *:?-+:? *)*(?:\\\\| *)?)(?:\\\\n((?:(?! *\\\\n|hr|heading|blockquote|code|fences|list|html).*(?:\\\\n|$))*)\\\\n*|$)\").replace(\"hr\",I).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"blockquote\",\" {0,3}>\").replace(\"code\",\"(?: {4}| {0,3}\t)[^\\\\n]\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)])[ \\\\t]\").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex(),ze={...K,lheading:Pe,table:re,paragraph:d(j).replace(\"hr\",I).replace(\"heading\",\" {0,3}#{1,6}(?:\\\\s|$)\").replace(\"|lheading\",\"\").replace(\"table\",re).replace(\"blockquote\",\" {0,3}>\").replace(\"fences\",\" {0,3}(?:`{3,}(?=[^`\\\\n]*\\\\n)|~{3,})[^\\\\n]*\\\\n\").replace(\"list\",\" {0,3}(?:[*+-]|1[.)])[ \\\\t]\").replace(\"html\",\"</?(?:tag)(?: +|\\\\n|/?>)|<(?:script|pre|style|textarea|!--)\").replace(\"tag\",v).getRegex()},Ee={...K,html:d(`^ *(?:comment *(?:\\\\n|\\\\s*$)|<(tag)[\\\\s\\\\S]+?</\\\\1> *(?:\\\\n{2,}|\\\\s*$)|<tag(?:\"[^\"]*\"|'[^']*'|\\\\s[^'\"/>\\\\s]*)*?/?> *(?:\\\\n{2,}|\\\\s*$))`).replace(\"comment\",U).replace(/tag/g,\"(?!(?:a|em|strong|small|s|cite|q|dfn|abbr|data|time|code|var|samp|kbd|sub|sup|i|b|u|mark|ruby|rt|rp|bdi|bdo|span|br|wbr|ins|del|img)\\\\b)\\\\w+(?!:|[^\\\\w\\\\s@]*@)\\\\b\").getRegex(),def:/^ *\\[([^\\]]+)\\]: *<?([^\\s>]+)>?(?: +([\"(][^\\n]+[\")]))? *(?:\\n+|$)/,heading:/^(#{1,6})(.*)(?:\\n+|$)/,fences:_,lheading:/^(.+?)\\n {0,3}(=+|-+) *(?:\\n+|$)/,paragraph:d(j).replace(\"hr\",I).replace(\"heading\",` *#{1,6} *[^\n]`).replace(\"lheading\",oe).replace(\"|table\",\"\").replace(\"blockquote\",\" {0,3}>\").replace(\"|fences\",\"\").replace(\"|list\",\"\").replace(\"|html\",\"\").replace(\"|tag\",\"\").getRegex()},Ae=/^\\\\([!\"#$%&'()*+,\\-./:;<=>?@\\[\\]\\\\^_`{|}~])/,Ce=/^(`+)([^`]|[^`][\\s\\S]*?[^`])\\1(?!`)/,le=/^( {2,}|\\\\)\\n(?!\\s*$)/,Ie=/^(`+|[^`])(?:(?= {2,}\\n)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*_]|\\b_|$)|[^ ](?= {2,}\\n)))/,E=/[\\p{P}\\p{S}]/u,H=/[\\s\\p{P}\\p{S}]/u,W=/[^\\s\\p{P}\\p{S}]/u,Be=d(/^((?![*_])punctSpace)/,\"u\").replace(/punctSpace/g,H).getRegex(),ue=/(?!~)[\\p{P}\\p{S}]/u,De=/(?!~)[\\s\\p{P}\\p{S}]/u,qe=/(?:[^\\s\\p{P}\\p{S}]|~)/u,ve=d(/link|precode-code|html/,\"g\").replace(\"link\",/\\[(?:[^\\[\\]`]|(?<a>`+)[^`]+\\k<a>(?!`))*?\\]\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)]|\\((?:\\\\[\\s\\S]|[^\\\\\\(\\)])*\\))*\\)/).replace(\"precode-\",Re?\"(?<!`)()\":\"(^^|[^`])\").replace(\"code\",/(?<b>`+)[^`]+\\k<b>(?!`)/).replace(\"html\",/<(?! )[^<>]*?>/).getRegex(),pe=/^(?:\\*+(?:((?!\\*)punct)|([^\\s*]))?)|^_+(?:((?!_)punct)|([^\\s_]))?/,He=d(pe,\"u\").replace(/punct/g,E).getRegex(),Ze=d(pe,\"u\").replace(/punct/g,ue).getRegex(),ce=\"^[^_*]*?__[^_*]*?\\\\*[^_*]*?(?=__)|[^*]+(?=[^*])|(?!\\\\*)punct(\\\\*+)(?=[\\\\s]|$)|notPunctSpace(\\\\*+)(?!\\\\*)(?=punctSpace|$)|(?!\\\\*)punctSpace(\\\\*+)(?=notPunctSpace)|[\\\\s](\\\\*+)(?!\\\\*)(?=punct)|(?!\\\\*)punct(\\\\*+)(?!\\\\*)(?=punct)|notPunctSpace(\\\\*+)(?=notPunctSpace)\",Ge=d(ce,\"gu\").replace(/notPunctSpace/g,W).replace(/punctSpace/g,H).replace(/punct/g,E).getRegex(),Ne=d(ce,\"gu\").replace(/notPunctSpace/g,qe).replace(/punctSpace/g,De).replace(/punct/g,ue).getRegex(),Qe=d(\"^[^_*]*?\\\\*\\\\*[^_*]*?_[^_*]*?(?=\\\\*\\\\*)|[^_]+(?=[^_])|(?!_)punct(_+)(?=[\\\\s]|$)|notPunctSpace(_+)(?!_)(?=punctSpace|$)|(?!_)punctSpace(_+)(?=notPunctSpace)|[\\\\s](_+)(?!_)(?=punct)|(?!_)punct(_+)(?!_)(?=punct)\",\"gu\").replace(/notPunctSpace/g,W).replace(/punctSpace/g,H).replace(/punct/g,E).getRegex(),je=d(/^~~?(?:((?!~)punct)|[^\\s~])/,\"u\").replace(/punct/g,E).getRegex(),Fe=\"^[^~]+(?=[^~])|(?!~)punct(~~?)(?=[\\\\s]|$)|notPunctSpace(~~?)(?!~)(?=punctSpace|$)|(?!~)punctSpace(~~?)(?=notPunctSpace)|[\\\\s](~~?)(?!~)(?=punct)|(?!~)punct(~~?)(?!~)(?=punct)|notPunctSpace(~~?)(?=notPunctSpace)\",Ue=d(Fe,\"gu\").replace(/notPunctSpace/g,W).replace(/punctSpace/g,H).replace(/punct/g,E).getRegex(),Ke=d(/\\\\(punct)/,\"gu\").replace(/punct/g,E).getRegex(),We=d(/^<(scheme:[^\\s\\x00-\\x1f<>]*|email)>/).replace(\"scheme\",/[a-zA-Z][a-zA-Z0-9+.-]{1,31}/).replace(\"email\",/[a-zA-Z0-9.!#$%&'*+/=?^_`{|}~-]+(@)[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(?![-_])/).getRegex(),Xe=d(U).replace(\"(?:-->|$)\",\"-->\").getRegex(),Je=d(\"^comment|^</[a-zA-Z][\\\\w:-]*\\\\s*>|^<[a-zA-Z][\\\\w-]*(?:attribute)*?\\\\s*/?>|^<\\\\?[\\\\s\\\\S]*?\\\\?>|^<![a-zA-Z]+\\\\s[\\\\s\\\\S]*?>|^<!\\\\[CDATA\\\\[[\\\\s\\\\S]*?\\\\]\\\\]>\").replace(\"comment\",Xe).replace(\"attribute\",/\\s+[a-zA-Z:_][\\w.:-]*(?:\\s*=\\s*\"[^\"]*\"|\\s*=\\s*'[^']*'|\\s*=\\s*[^\\s\"'=<>`]+)?/).getRegex(),q=/(?:\\[(?:\\\\[\\s\\S]|[^\\[\\]\\\\])*\\]|\\\\[\\s\\S]|`+(?!`)[^`]*?`+(?!`)|``+(?=\\])|[^\\[\\]\\\\`])*?/,Ve=d(/^!?\\[(label)\\]\\(\\s*(href)(?:(?:[ \\t]+(?:\\n[ \\t]*)?|\\n[ \\t]*)(title))?\\s*\\)/).replace(\"label\",q).replace(\"href\",/<(?:\\\\.|[^\\n<>\\\\])+>|[^ \\t\\n\\x00-\\x1f]*/).replace(\"title\",/\"(?:\\\\\"?|[^\"\\\\])*\"|'(?:\\\\'?|[^'\\\\])*'|\\((?:\\\\\\)?|[^)\\\\])*\\)/).getRegex(),he=d(/^!?\\[(label)\\]\\[(ref)\\]/).replace(\"label\",q).replace(\"ref\",F).getRegex(),ke=d(/^!?\\[(ref)\\](?:\\[\\])?/).replace(\"ref\",F).getRegex(),Ye=d(\"reflink|nolink(?!\\\\()\",\"g\").replace(\"reflink\",he).replace(\"nolink\",ke).getRegex(),se=/[hH][tT][tT][pP][sS]?|[fF][tT][pP]/,X={_backpedal:_,anyPunctuation:Ke,autolink:We,blockSkip:ve,br:le,code:Ce,del:_,delLDelim:_,delRDelim:_,emStrongLDelim:He,emStrongRDelimAst:Ge,emStrongRDelimUnd:Qe,escape:Ae,link:Ve,nolink:ke,punctuation:Be,reflink:he,reflinkSearch:Ye,tag:Je,text:Ie,url:_},et={...X,link:d(/^!?\\[(label)\\]\\((.*?)\\)/).replace(\"label\",q).getRegex(),reflink:d(/^!?\\[(label)\\]\\s*\\[([^\\]]*)\\]/).replace(\"label\",q).getRegex()},N={...X,emStrongRDelimAst:Ne,emStrongLDelim:Ze,delLDelim:je,delRDelim:Ue,url:d(/^((?:protocol):\\/\\/|www\\.)(?:[a-zA-Z0-9\\-]+\\.?)+[^\\s<]*|^email/).replace(\"protocol\",se).replace(\"email\",/[A-Za-z0-9._+-]+(@)[a-zA-Z0-9-_]+(?:\\.[a-zA-Z0-9-_]*[a-zA-Z0-9])+(?![-_])/).getRegex(),_backpedal:/(?:[^?!.,:;*_'\"~()&]+|\\([^)]*\\)|&(?![a-zA-Z0-9]+;$)|[?!.,:;*_'\"~)]+(?!$))+/,del:/^(~~?)(?=[^\\s~])((?:\\\\[\\s\\S]|[^\\\\])*?(?:\\\\[\\s\\S]|[^\\s~\\\\]))\\1(?=[^~]|$)/,text:d(/^([`~]+|[^`~])(?:(?= {2,}\\n)|(?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)|[\\s\\S]*?(?:(?=[\\\\<!\\[`*~_]|\\b_|protocol:\\/\\/|www\\.|$)|[^ ](?= {2,}\\n)|[^a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-](?=[a-zA-Z0-9.!#$%&'*+\\/=?_`{\\|}~-]+@)))/).replace(\"protocol\",se).getRegex()},tt={...N,br:d(le).replace(\"{2,}\",\"*\").getRegex(),text:d(N.text).replace(\"\\\\b_\",\"\\\\b_| {2,}\\\\n\").replace(/\\{2,\\}/g,\"*\").getRegex()},B={normal:K,gfm:ze,pedantic:Ee},A={normal:X,gfm:N,breaks:tt,pedantic:et};var nt={\"&\":\"&\",\"<\":\"<\",\">\":\">\",'\"':\""\",\"'\":\"'\"},de=l=>nt[l];function O(l,e){if(e){if(m.escapeTest.test(l))return l.replace(m.escapeReplace,de)}else if(m.escapeTestNoEncode.test(l))return l.replace(m.escapeReplaceNoEncode,de);return l}function J(l){try{l=encodeURI(l).replace(m.percentDecode,\"%\")}catch{return null}return l}function V(l,e){let t=l.replace(m.findPipe,(r,i,o)=>{let u=!1,a=i;for(;--a>=0&&o[a]===\"\\\\\";)u=!u;return u?\"|\":\" |\"}),n=t.split(m.splitPipe),s=0;if(n[0].trim()||n.shift(),n.length>0&&!n.at(-1)?.trim()&&n.pop(),e)if(n.length>e)n.splice(e);else for(;n.length<e;)n.push(\"\");for(;s<n.length;s++)n[s]=n[s].trim().replace(m.slashPipe,\"|\");return n}function $(l,e,t){let n=l.length;if(n===0)return\"\";let s=0;for(;s<n;){let r=l.charAt(n-s-1);if(r===e&&!t)s++;else if(r!==e&&t)s++;else break}return l.slice(0,n-s)}function Y(l){let e=l.split(`\n`),t=e.length-1;for(;t>=0&&m.blankLine.test(e[t]);)t--;return e.length-t<=2?l:e.slice(0,t+1).join(`\n`)}function ge(l,e){if(l.indexOf(e[1])===-1)return-1;let t=0;for(let n=0;n<l.length;n++)if(l[n]===\"\\\\\")n++;else if(l[n]===e[0])t++;else if(l[n]===e[1]&&(t--,t<0))return n;return t>0?-2:-1}function fe(l,e=0){let t=e,n=\"\";for(let s of l)if(s===\"\t\"){let r=4-t%4;n+=\" \".repeat(r),t+=r}else n+=s,t++;return n}function me(l,e,t,n,s){let r=e.href,i=e.title||null,o=l[1].replace(s.other.outputLinkReplace,\"$1\");n.state.inLink=!0;let u={type:l[0].charAt(0)===\"!\"?\"image\":\"link\",raw:t,href:r,title:i,text:o,tokens:n.inlineTokens(o)};return n.state.inLink=!1,u}function rt(l,e,t){let n=l.match(t.other.indentCodeCompensation);if(n===null)return e;let s=n[1];return e.split(`\n`).map(r=>{let i=r.match(t.other.beginningSpace);if(i===null)return r;let[o]=i;return o.length>=s.length?r.slice(s.length):r}).join(`\n`)}var w=class{options;rules;lexer;constructor(e){this.options=e||T}space(e){let t=this.rules.block.newline.exec(e);if(t&&t[0].length>0)return{type:\"space\",raw:t[0]}}code(e){let t=this.rules.block.code.exec(e);if(t){let n=this.options.pedantic?t[0]:Y(t[0]),s=n.replace(this.rules.other.codeRemoveIndent,\"\");return{type:\"code\",raw:n,codeBlockStyle:\"indented\",text:s}}}fences(e){let t=this.rules.block.fences.exec(e);if(t){let n=t[0],s=rt(n,t[3]||\"\",this.rules);return{type:\"code\",raw:n,lang:t[2]?t[2].trim().replace(this.rules.inline.anyPunctuation,\"$1\"):t[2],text:s}}}heading(e){let t=this.rules.block.heading.exec(e);if(t){let n=t[2].trim();if(this.rules.other.endingHash.test(n)){let s=$(n,\"#\");(this.options.pedantic||!s||this.rules.other.endingSpaceChar.test(s))&&(n=s.trim())}return{type:\"heading\",raw:$(t[0],`\n`),depth:t[1].length,text:n,tokens:this.lexer.inline(n)}}}hr(e){let t=this.rules.block.hr.exec(e);if(t)return{type:\"hr\",raw:$(t[0],`\n`)}}blockquote(e){let t=this.rules.block.blockquote.exec(e);if(t){let n=$(t[0],`\n`).split(`\n`),s=\"\",r=\"\",i=[];for(;n.length>0;){let o=!1,u=[],a;for(a=0;a<n.length;a++)if(this.rules.other.blockquoteStart.test(n[a]))u.push(n[a]),o=!0;else if(!o)u.push(n[a]);else break;n=n.slice(a);let c=u.join(`\n`),p=c.replace(this.rules.other.blockquoteSetextReplace,`\n $1`).replace(this.rules.other.blockquoteSetextReplace2,\"\");s=s?`${s}\n${c}`:c,r=r?`${r}\n${p}`:p;let k=this.lexer.state.top;if(this.lexer.state.top=!0,this.lexer.blockTokens(p,i,!0),this.lexer.state.top=k,n.length===0)break;let h=i.at(-1);if(h?.type===\"code\")break;if(h?.type===\"blockquote\"){let R=h,f=R.raw+`\n`+n.join(`\n`),S=this.blockquote(f);i[i.length-1]=S,s=s.substring(0,s.length-R.raw.length)+S.raw,r=r.substring(0,r.length-R.text.length)+S.text;break}else if(h?.type===\"list\"){let R=h,f=R.raw+`\n`+n.join(`\n`),S=this.list(f);i[i.length-1]=S,s=s.substring(0,s.length-h.raw.length)+S.raw,r=r.substring(0,r.length-R.raw.length)+S.raw,n=f.substring(i.at(-1).raw.length).split(`\n`);continue}}return{type:\"blockquote\",raw:s,tokens:i,text:r}}}list(e){let t=this.rules.block.list.exec(e);if(t){let n=t[1].trim(),s=n.length>1,r={type:\"list\",raw:\"\",ordered:s,start:s?+n.slice(0,-1):\"\",loose:!1,items:[]};n=s?`\\\\d{1,9}\\\\${n.slice(-1)}`:`\\\\${n}`,this.options.pedantic&&(n=s?n:\"[*+-]\");let i=this.rules.other.listItemRegex(n),o=!1;for(;e;){let a=!1,c=\"\",p=\"\";if(!(t=i.exec(e))||this.rules.block.hr.test(e))break;c=t[0],e=e.substring(c.length);let k=fe(t[2].split(`\n`,1)[0],t[1].length),h=e.split(`\n`,1)[0],R=!k.trim(),f=0;if(this.options.pedantic?(f=2,p=k.trimStart()):R?f=t[1].length+1:(f=k.search(this.rules.other.nonSpaceChar),f=f>4?1:f,p=k.slice(f),f+=t[1].length),R&&this.rules.other.blankLine.test(h)&&(c+=h+`\n`,e=e.substring(h.length+1),a=!0),!a){let S=this.rules.other.nextBulletRegex(f),ee=this.rules.other.hrRegex(f),te=this.rules.other.fencesBeginRegex(f),ne=this.rules.other.headingBeginRegex(f),xe=this.rules.other.htmlBeginRegex(f),be=this.rules.other.blockquoteBeginRegex(f);for(;e;){let Z=e.split(`\n`,1)[0],C;if(h=Z,this.options.pedantic?(h=h.replace(this.rules.other.listReplaceNesting,\" \"),C=h):C=h.replace(this.rules.other.tabCharGlobal,\" \"),te.test(h)||ne.test(h)||xe.test(h)||be.test(h)||S.test(h)||ee.test(h))break;if(C.search(this.rules.other.nonSpaceChar)>=f||!h.trim())p+=`\n`+C.slice(f);else{if(R||k.replace(this.rules.other.tabCharGlobal,\" \").search(this.rules.other.nonSpaceChar)>=4||te.test(k)||ne.test(k)||ee.test(k))break;p+=`\n`+h}R=!h.trim(),c+=Z+`\n`,e=e.substring(Z.length+1),k=C.slice(f)}}r.loose||(o?r.loose=!0:this.rules.other.doubleBlankLine.test(c)&&(o=!0)),r.items.push({type:\"list_item\",raw:c,task:!!this.options.gfm&&this.rules.other.listIsTask.test(p),loose:!1,text:p,tokens:[]}),r.raw+=c}let u=r.items.at(-1);if(u)u.raw=u.raw.trimEnd(),u.text=u.text.trimEnd();else return;r.raw=r.raw.trimEnd();for(let a of r.items){this.lexer.state.top=!1,a.tokens=this.lexer.blockTokens(a.text,[]);let c=a.tokens[0];if(a.task&&(c?.type===\"text\"||c?.type===\"paragraph\")){a.text=a.text.replace(this.rules.other.listReplaceTask,\"\"),c.raw=c.raw.replace(this.rules.other.listReplaceTask,\"\"),c.text=c.text.replace(this.rules.other.listReplaceTask,\"\");for(let k=this.lexer.inlineQueue.length-1;k>=0;k--)if(this.rules.other.listIsTask.test(this.lexer.inlineQueue[k].src)){this.lexer.inlineQueue[k].src=this.lexer.inlineQueue[k].src.replace(this.rules.other.listReplaceTask,\"\");break}let p=this.rules.other.listTaskCheckbox.exec(a.raw);if(p){let k={type:\"checkbox\",raw:p[0]+\" \",checked:p[0]!==\"[ ]\"};a.checked=k.checked,r.loose?a.tokens[0]&&[\"paragraph\",\"text\"].includes(a.tokens[0].type)&&\"tokens\"in a.tokens[0]&&a.tokens[0].tokens?(a.tokens[0].raw=k.raw+a.tokens[0].raw,a.tokens[0].text=k.raw+a.tokens[0].text,a.tokens[0].tokens.unshift(k)):a.tokens.unshift({type:\"paragraph\",raw:k.raw,text:k.raw,tokens:[k]}):a.tokens.unshift(k)}}else a.task&&(a.task=!1);if(!r.loose){let p=a.tokens.filter(h=>h.type===\"space\"),k=p.length>0&&p.some(h=>this.rules.other.anyLine.test(h.raw));r.loose=k}}if(r.loose)for(let a of r.items){a.loose=!0;for(let c of a.tokens)c.type===\"text\"&&(c.type=\"paragraph\")}return r}}html(e){let t=this.rules.block.html.exec(e);if(t){let n=Y(t[0]);return{type:\"html\",block:!0,raw:n,pre:t[1]===\"pre\"||t[1]===\"script\"||t[1]===\"style\",text:n}}}def(e){let t=this.rules.block.def.exec(e);if(t){let n=t[1].toLowerCase().replace(this.rules.other.multipleSpaceGlobal,\" \"),s=t[2]?t[2].replace(this.rules.other.hrefBrackets,\"$1\").replace(this.rules.inline.anyPunctuation,\"$1\"):\"\",r=t[3]?t[3].substring(1,t[3].length-1).replace(this.rules.inline.anyPunctuation,\"$1\"):t[3];return{type:\"def\",tag:n,raw:$(t[0],`\n`),href:s,title:r}}}table(e){let t=this.rules.block.table.exec(e);if(!t||!this.rules.other.tableDelimiter.test(t[2]))return;let n=V(t[1]),s=t[2].replace(this.rules.other.tableAlignChars,\"\").split(\"|\"),r=t[3]?.trim()?t[3].replace(this.rules.other.tableRowBlankLine,\"\").split(`\n`):[],i={type:\"table\",raw:$(t[0],`\n`),header:[],align:[],rows:[]};if(n.length===s.length){for(let o of s)this.rules.other.tableAlignRight.test(o)?i.align.push(\"right\"):this.rules.other.tableAlignCenter.test(o)?i.align.push(\"center\"):this.rules.other.tableAlignLeft.test(o)?i.align.push(\"left\"):i.align.push(null);for(let o=0;o<n.length;o++)i.header.push({text:n[o],tokens:this.lexer.inline(n[o]),header:!0,align:i.align[o]});for(let o of r)i.rows.push(V(o,i.header.length).map((u,a)=>({text:u,tokens:this.lexer.inline(u),header:!1,align:i.align[a]})));return i}}lheading(e){let t=this.rules.block.lheading.exec(e);if(t){let n=t[1].trim();return{type:\"heading\",raw:$(t[0],`\n`),depth:t[2].charAt(0)===\"=\"?1:2,text:n,tokens:this.lexer.inline(n)}}}paragraph(e){let t=this.rules.block.paragraph.exec(e);if(t){let n=t[1].charAt(t[1].length-1)===`\n`?t[1].slice(0,-1):t[1];return{type:\"paragraph\",raw:t[0],text:n,tokens:this.lexer.inline(n)}}}text(e){let t=this.rules.block.text.exec(e);if(t)return{type:\"text\",raw:t[0],text:t[0],tokens:this.lexer.inline(t[0])}}escape(e){let t=this.rules.inline.escape.exec(e);if(t)return{type:\"escape\",raw:t[0],text:t[1]}}tag(e){let t=this.rules.inline.tag.exec(e);if(t)return!this.lexer.state.inLink&&this.rules.other.startATag.test(t[0])?this.lexer.state.inLink=!0:this.lexer.state.inLink&&this.rules.other.endATag.test(t[0])&&(this.lexer.state.inLink=!1),!this.lexer.state.inRawBlock&&this.rules.other.startPreScriptTag.test(t[0])?this.lexer.state.inRawBlock=!0:this.lexer.state.inRawBlock&&this.rules.other.endPreScriptTag.test(t[0])&&(this.lexer.state.inRawBlock=!1),{type:\"html\",raw:t[0],inLink:this.lexer.state.inLink,inRawBlock:this.lexer.state.inRawBlock,block:!1,text:t[0]}}link(e){let t=this.rules.inline.link.exec(e);if(t){let n=t[2].trim();if(!this.options.pedantic&&this.rules.other.startAngleBracket.test(n)){if(!this.rules.other.endAngleBracket.test(n))return;let i=$(n.slice(0,-1),\"\\\\\");if((n.length-i.length)%2===0)return}else{let i=ge(t[2],\"()\");if(i===-2)return;if(i>-1){let u=(t[0].indexOf(\"!\")===0?5:4)+t[1].length+i;t[2]=t[2].substring(0,i),t[0]=t[0].substring(0,u).trim(),t[3]=\"\"}}let s=t[2],r=\"\";if(this.options.pedantic){let i=this.rules.other.pedanticHrefTitle.exec(s);i&&(s=i[1],r=i[3])}else r=t[3]?t[3].slice(1,-1):\"\";return s=s.trim(),this.rules.other.startAngleBracket.test(s)&&(this.options.pedantic&&!this.rules.other.endAngleBracket.test(n)?s=s.slice(1):s=s.slice(1,-1)),me(t,{href:s&&s.replace(this.rules.inline.anyPunctuation,\"$1\"),title:r&&r.replace(this.rules.inline.anyPunctuation,\"$1\")},t[0],this.lexer,this.rules)}}reflink(e,t){let n;if((n=this.rules.inline.reflink.exec(e))||(n=this.rules.inline.nolink.exec(e))){let s=(n[2]||n[1]).replace(this.rules.other.multipleSpaceGlobal,\" \"),r=t[s.toLowerCase()];if(!r){let i=n[0].charAt(0);return{type:\"text\",raw:i,text:i}}return me(n,r,n[0],this.lexer,this.rules)}}emStrong(e,t,n=\"\"){let s=this.rules.inline.emStrongLDelim.exec(e);if(!s||!s[1]&&!s[2]&&!s[3]&&!s[4]||s[4]&&n.match(this.rules.other.unicodeAlphaNumeric))return;if(!(s[1]||s[3]||\"\")||!n||this.rules.inline.punctuation.exec(n)){let i=[...s[0]].length-1,o,u,a=i,c=0,p=s[0][0]===\"*\"?this.rules.inline.emStrongRDelimAst:this.rules.inline.emStrongRDelimUnd;for(p.lastIndex=0,t=t.slice(-1*e.length+i);(s=p.exec(t))!==null;){if(o=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!o)continue;if(u=[...o].length,s[3]||s[4]){a+=u;continue}else if((s[5]||s[6])&&i%3&&!((i+u)%3)){c+=u;continue}if(a-=u,a>0)continue;u=Math.min(u,u+a+c);let k=[...s[0]][0].length,h=e.slice(0,i+s.index+k+u);if(Math.min(i,u)%2){let f=h.slice(1,-1);return{type:\"em\",raw:h,text:f,tokens:this.lexer.inlineTokens(f)}}let R=h.slice(2,-2);return{type:\"strong\",raw:h,text:R,tokens:this.lexer.inlineTokens(R)}}}}codespan(e){let t=this.rules.inline.code.exec(e);if(t){let n=t[2].replace(this.rules.other.newLineCharGlobal,\" \"),s=this.rules.other.nonSpaceChar.test(n),r=this.rules.other.startingSpaceChar.test(n)&&this.rules.other.endingSpaceChar.test(n);return s&&r&&(n=n.substring(1,n.length-1)),{type:\"codespan\",raw:t[0],text:n}}}br(e){let t=this.rules.inline.br.exec(e);if(t)return{type:\"br\",raw:t[0]}}del(e,t,n=\"\"){let s=this.rules.inline.delLDelim.exec(e);if(!s)return;if(!(s[1]||\"\")||!n||this.rules.inline.punctuation.exec(n)){let i=[...s[0]].length-1,o,u,a=i,c=this.rules.inline.delRDelim;for(c.lastIndex=0,t=t.slice(-1*e.length+i);(s=c.exec(t))!==null;){if(o=s[1]||s[2]||s[3]||s[4]||s[5]||s[6],!o||(u=[...o].length,u!==i))continue;if(s[3]||s[4]){a+=u;continue}if(a-=u,a>0)continue;u=Math.min(u,u+a);let p=[...s[0]][0].length,k=e.slice(0,i+s.index+p+u),h=k.slice(i,-i);return{type:\"del\",raw:k,text:h,tokens:this.lexer.inlineTokens(h)}}}}autolink(e){let t=this.rules.inline.autolink.exec(e);if(t){let n,s;return t[2]===\"@\"?(n=t[1],s=\"mailto:\"+n):(n=t[1],s=n),{type:\"link\",raw:t[0],text:n,href:s,tokens:[{type:\"text\",raw:n,text:n}]}}}url(e){let t;if(t=this.rules.inline.url.exec(e)){let n,s;if(t[2]===\"@\")n=t[0],s=\"mailto:\"+n;else{let r;do r=t[0],t[0]=this.rules.inline._backpedal.exec(t[0])?.[0]??\"\";while(r!==t[0]);n=t[0],t[1]===\"www.\"?s=\"http://\"+t[0]:s=t[0]}return{type:\"link\",raw:t[0],text:n,href:s,tokens:[{type:\"text\",raw:n,text:n}]}}}inlineText(e){let t=this.rules.inline.text.exec(e);if(t){let n=this.lexer.state.inRawBlock;return{type:\"text\",raw:t[0],text:t[0],escaped:n}}}};var x=class l{tokens;options;state;inlineQueue;tokenizer;constructor(e){this.tokens=[],this.tokens.links=Object.create(null),this.options=e||T,this.options.tokenizer=this.options.tokenizer||new w,this.tokenizer=this.options.tokenizer,this.tokenizer.options=this.options,this.tokenizer.lexer=this,this.inlineQueue=[],this.state={inLink:!1,inRawBlock:!1,top:!0};let t={other:m,block:B.normal,inline:A.normal};this.options.pedantic?(t.block=B.pedantic,t.inline=A.pedantic):this.options.gfm&&(t.block=B.gfm,this.options.breaks?t.inline=A.breaks:t.inline=A.gfm),this.tokenizer.rules=t}static get rules(){return{block:B,inline:A}}static lex(e,t){return new l(t).lex(e)}static lexInline(e,t){return new l(t).inlineTokens(e)}lex(e){e=e.replace(m.carriageReturn,`\n`),this.blockTokens(e,this.tokens);for(let t=0;t<this.inlineQueue.length;t++){let n=this.inlineQueue[t];this.inlineTokens(n.src,n.tokens)}return this.inlineQueue=[],this.tokens}blockTokens(e,t=[],n=!1){this.tokenizer.lexer=this,this.options.pedantic&&(e=e.replace(m.tabCharGlobal,\" \").replace(m.spaceLine,\"\"));let s=1/0;for(;e;){if(e.length<s)s=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}let r;if(this.options.extensions?.block?.some(o=>(r=o.call({lexer:this},e,t))?(e=e.substring(r.raw.length),t.push(r),!0):!1))continue;if(r=this.tokenizer.space(e)){e=e.substring(r.raw.length);let o=t.at(-1);r.raw.length===1&&o!==void 0?o.raw+=`\n`:t.push(r);continue}if(r=this.tokenizer.code(e)){e=e.substring(r.raw.length);let o=t.at(-1);o?.type===\"paragraph\"||o?.type===\"text\"?(o.raw+=(o.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,o.text+=`\n`+r.text,this.inlineQueue.at(-1).src=o.text):t.push(r);continue}if(r=this.tokenizer.fences(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.heading(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.hr(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.blockquote(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.list(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.html(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.def(e)){e=e.substring(r.raw.length);let o=t.at(-1);o?.type===\"paragraph\"||o?.type===\"text\"?(o.raw+=(o.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,o.text+=`\n`+r.raw,this.inlineQueue.at(-1).src=o.text):this.tokens.links[r.tag]||(this.tokens.links[r.tag]={href:r.href,title:r.title},t.push(r));continue}if(r=this.tokenizer.table(e)){e=e.substring(r.raw.length),t.push(r);continue}if(r=this.tokenizer.lheading(e)){e=e.substring(r.raw.length),t.push(r);continue}let i=e;if(this.options.extensions?.startBlock){let o=1/0,u=e.slice(1),a;this.options.extensions.startBlock.forEach(c=>{a=c.call({lexer:this},u),typeof a==\"number\"&&a>=0&&(o=Math.min(o,a))}),o<1/0&&o>=0&&(i=e.substring(0,o+1))}if(this.state.top&&(r=this.tokenizer.paragraph(i))){let o=t.at(-1);n&&o?.type===\"paragraph\"?(o.raw+=(o.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,o.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=o.text):t.push(r),n=i.length!==e.length,e=e.substring(r.raw.length);continue}if(r=this.tokenizer.text(e)){e=e.substring(r.raw.length);let o=t.at(-1);o?.type===\"text\"?(o.raw+=(o.raw.endsWith(`\n`)?\"\":`\n`)+r.raw,o.text+=`\n`+r.text,this.inlineQueue.pop(),this.inlineQueue.at(-1).src=o.text):t.push(r);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return this.state.top=!0,t}inline(e,t=[]){return this.inlineQueue.push({src:e,tokens:t}),t}inlineTokens(e,t=[]){this.tokenizer.lexer=this;let n=e,s=null;if(this.tokens.links){let a=Object.keys(this.tokens.links);if(a.length>0)for(;(s=this.tokenizer.rules.inline.reflinkSearch.exec(n))!==null;)a.includes(s[0].slice(s[0].lastIndexOf(\"[\")+1,-1))&&(n=n.slice(0,s.index)+\"[\"+\"a\".repeat(s[0].length-2)+\"]\"+n.slice(this.tokenizer.rules.inline.reflinkSearch.lastIndex))}for(;(s=this.tokenizer.rules.inline.anyPunctuation.exec(n))!==null;)n=n.slice(0,s.index)+\"++\"+n.slice(this.tokenizer.rules.inline.anyPunctuation.lastIndex);let r;for(;(s=this.tokenizer.rules.inline.blockSkip.exec(n))!==null;)r=s[2]?s[2].length:0,n=n.slice(0,s.index+r)+\"[\"+\"a\".repeat(s[0].length-r-2)+\"]\"+n.slice(this.tokenizer.rules.inline.blockSkip.lastIndex);n=this.options.hooks?.emStrongMask?.call({lexer:this},n)??n;let i=!1,o=\"\",u=1/0;for(;e;){if(e.length<u)u=e.length;else{this.infiniteLoopError(e.charCodeAt(0));break}i||(o=\"\"),i=!1;let a;if(this.options.extensions?.inline?.some(p=>(a=p.call({lexer:this},e,t))?(e=e.substring(a.raw.length),t.push(a),!0):!1))continue;if(a=this.tokenizer.escape(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.tag(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.link(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.reflink(e,this.tokens.links)){e=e.substring(a.raw.length);let p=t.at(-1);a.type===\"text\"&&p?.type===\"text\"?(p.raw+=a.raw,p.text+=a.text):t.push(a);continue}if(a=this.tokenizer.emStrong(e,n,o)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.codespan(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.br(e)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.del(e,n,o)){e=e.substring(a.raw.length),t.push(a);continue}if(a=this.tokenizer.autolink(e)){e=e.substring(a.raw.length),t.push(a);continue}if(!this.state.inLink&&(a=this.tokenizer.url(e))){e=e.substring(a.raw.length),t.push(a);continue}let c=e;if(this.options.extensions?.startInline){let p=1/0,k=e.slice(1),h;this.options.extensions.startInline.forEach(R=>{h=R.call({lexer:this},k),typeof h==\"number\"&&h>=0&&(p=Math.min(p,h))}),p<1/0&&p>=0&&(c=e.substring(0,p+1))}if(a=this.tokenizer.inlineText(c)){e=e.substring(a.raw.length),a.raw.slice(-1)!==\"_\"&&(o=a.raw.slice(-1)),i=!0;let p=t.at(-1);p?.type===\"text\"?(p.raw+=a.raw,p.text+=a.text):t.push(a);continue}if(e){this.infiniteLoopError(e.charCodeAt(0));break}}return t}infiniteLoopError(e){let t=\"Infinite loop on byte: \"+e;if(this.options.silent)console.error(t);else throw new Error(t)}};var y=class{options;parser;constructor(e){this.options=e||T}space(e){return\"\"}code({text:e,lang:t,escaped:n}){let s=(t||\"\").match(m.notSpaceStart)?.[0],r=e.replace(m.endingNewline,\"\")+`\n`;return s?'<pre><code class=\"language-'+O(s)+'\">'+(n?r:O(r,!0))+`</code></pre>\n`:\"<pre><code>\"+(n?r:O(r,!0))+`</code></pre>\n`}blockquote({tokens:e}){return`<blockquote>\n${this.parser.parse(e)}</blockquote>\n`}html({text:e}){return e}def(e){return\"\"}heading({tokens:e,depth:t}){return`<h${t}>${this.parser.parseInline(e)}</h${t}>\n`}hr(e){return`<hr>\n`}list(e){let t=e.ordered,n=e.start,s=\"\";for(let o=0;o<e.items.length;o++){let u=e.items[o];s+=this.listitem(u)}let r=t?\"ol\":\"ul\",i=t&&n!==1?' start=\"'+n+'\"':\"\";return\"<\"+r+i+`>\n`+s+\"</\"+r+`>\n`}listitem(e){return`<li>${this.parser.parse(e.tokens)}</li>\n`}checkbox({checked:e}){return\"<input \"+(e?'checked=\"\" ':\"\")+'disabled=\"\" type=\"checkbox\"> '}paragraph({tokens:e}){return`<p>${this.parser.parseInline(e)}</p>\n`}table(e){let t=\"\",n=\"\";for(let r=0;r<e.header.length;r++)n+=this.tablecell(e.header[r]);t+=this.tablerow({text:n});let s=\"\";for(let r=0;r<e.rows.length;r++){let i=e.rows[r];n=\"\";for(let o=0;o<i.length;o++)n+=this.tablecell(i[o]);s+=this.tablerow({text:n})}return s&&(s=`<tbody>${s}</tbody>`),`<table>\n<thead>\n`+t+`</thead>\n`+s+`</table>\n`}tablerow({text:e}){return`<tr>\n${e}</tr>\n`}tablecell(e){let t=this.parser.parseInline(e.tokens),n=e.header?\"th\":\"td\";return(e.align?`<${n} align=\"${e.align}\">`:`<${n}>`)+t+`</${n}>\n`}strong({tokens:e}){return`<strong>${this.parser.parseInline(e)}</strong>`}em({tokens:e}){return`<em>${this.parser.parseInline(e)}</em>`}codespan({text:e}){return`<code>${O(e,!0)}</code>`}br(e){return\"<br>\"}del({tokens:e}){return`<del>${this.parser.parseInline(e)}</del>`}link({href:e,title:t,tokens:n}){let s=this.parser.parseInline(n),r=J(e);if(r===null)return s;e=r;let i='<a href=\"'+e+'\"';return t&&(i+=' title=\"'+O(t)+'\"'),i+=\">\"+s+\"</a>\",i}image({href:e,title:t,text:n,tokens:s}){s&&(n=this.parser.parseInline(s,this.parser.textRenderer));let r=J(e);if(r===null)return O(n);e=r;let i=`<img src=\"${e}\" alt=\"${O(n)}\"`;return t&&(i+=` title=\"${O(t)}\"`),i+=\">\",i}text(e){return\"tokens\"in e&&e.tokens?this.parser.parseInline(e.tokens):\"escaped\"in e&&e.escaped?e.text:O(e.text)}};var L=class{strong({text:e}){return e}em({text:e}){return e}codespan({text:e}){return e}del({text:e}){return e}html({text:e}){return e}text({text:e}){return e}link({text:e}){return\"\"+e}image({text:e}){return\"\"+e}br(){return\"\"}checkbox({raw:e}){return e}};var b=class l{options;renderer;textRenderer;constructor(e){this.options=e||T,this.options.renderer=this.options.renderer||new y,this.renderer=this.options.renderer,this.renderer.options=this.options,this.renderer.parser=this,this.textRenderer=new L}static parse(e,t){return new l(t).parse(e)}static parseInline(e,t){return new l(t).parseInline(e)}parse(e){this.renderer.parser=this;let t=\"\";for(let n=0;n<e.length;n++){let s=e[n];if(this.options.extensions?.renderers?.[s.type]){let i=s,o=this.options.extensions.renderers[i.type].call({parser:this},i);if(o!==!1||![\"space\",\"hr\",\"heading\",\"code\",\"table\",\"blockquote\",\"list\",\"html\",\"def\",\"paragraph\",\"text\"].includes(i.type)){t+=o||\"\";continue}}let r=s;switch(r.type){case\"space\":{t+=this.renderer.space(r);break}case\"hr\":{t+=this.renderer.hr(r);break}case\"heading\":{t+=this.renderer.heading(r);break}case\"code\":{t+=this.renderer.code(r);break}case\"table\":{t+=this.renderer.table(r);break}case\"blockquote\":{t+=this.renderer.blockquote(r);break}case\"list\":{t+=this.renderer.list(r);break}case\"checkbox\":{t+=this.renderer.checkbox(r);break}case\"html\":{t+=this.renderer.html(r);break}case\"def\":{t+=this.renderer.def(r);break}case\"paragraph\":{t+=this.renderer.paragraph(r);break}case\"text\":{t+=this.renderer.text(r);break}default:{let i='Token with \"'+r.type+'\" type was not found.';if(this.options.silent)return console.error(i),\"\";throw new Error(i)}}}return t}parseInline(e,t=this.renderer){this.renderer.parser=this;let n=\"\";for(let s=0;s<e.length;s++){let r=e[s];if(this.options.extensions?.renderers?.[r.type]){let o=this.options.extensions.renderers[r.type].call({parser:this},r);if(o!==!1||![\"escape\",\"html\",\"link\",\"image\",\"strong\",\"em\",\"codespan\",\"br\",\"del\",\"text\"].includes(r.type)){n+=o||\"\";continue}}let i=r;switch(i.type){case\"escape\":{n+=t.text(i);break}case\"html\":{n+=t.html(i);break}case\"link\":{n+=t.link(i);break}case\"image\":{n+=t.image(i);break}case\"checkbox\":{n+=t.checkbox(i);break}case\"strong\":{n+=t.strong(i);break}case\"em\":{n+=t.em(i);break}case\"codespan\":{n+=t.codespan(i);break}case\"br\":{n+=t.br(i);break}case\"del\":{n+=t.del(i);break}case\"text\":{n+=t.text(i);break}default:{let o='Token with \"'+i.type+'\" type was not found.';if(this.options.silent)return console.error(o),\"\";throw new Error(o)}}}return n}};var P=class{options;block;constructor(e){this.options=e||T}static passThroughHooks=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\",\"emStrongMask\"]);static passThroughHooksRespectAsync=new Set([\"preprocess\",\"postprocess\",\"processAllTokens\"]);preprocess(e){return e}postprocess(e){return e}processAllTokens(e){return e}emStrongMask(e){return e}provideLexer(e=this.block){return e?x.lex:x.lexInline}provideParser(e=this.block){return e?b.parse:b.parseInline}};var D=class{defaults=z();options=this.setOptions;parse=this.parseMarkdown(!0);parseInline=this.parseMarkdown(!1);Parser=b;Renderer=y;TextRenderer=L;Lexer=x;Tokenizer=w;Hooks=P;constructor(...e){this.use(...e)}walkTokens(e,t){let n=[];for(let s of e)switch(n=n.concat(t.call(this,s)),s.type){case\"table\":{let r=s;for(let i of r.header)n=n.concat(this.walkTokens(i.tokens,t));for(let i of r.rows)for(let o of i)n=n.concat(this.walkTokens(o.tokens,t));break}case\"list\":{let r=s;n=n.concat(this.walkTokens(r.items,t));break}default:{let r=s;this.defaults.extensions?.childTokens?.[r.type]?this.defaults.extensions.childTokens[r.type].forEach(i=>{let o=r[i].flat(1/0);n=n.concat(this.walkTokens(o,t))}):r.tokens&&(n=n.concat(this.walkTokens(r.tokens,t)))}}return n}use(...e){let t=this.defaults.extensions||{renderers:{},childTokens:{}};return e.forEach(n=>{let s={...n};if(s.async=this.defaults.async||s.async||!1,n.extensions&&(n.extensions.forEach(r=>{if(!r.name)throw new Error(\"extension name required\");if(\"renderer\"in r){let i=t.renderers[r.name];i?t.renderers[r.name]=function(...o){let u=r.renderer.apply(this,o);return u===!1&&(u=i.apply(this,o)),u}:t.renderers[r.name]=r.renderer}if(\"tokenizer\"in r){if(!r.level||r.level!==\"block\"&&r.level!==\"inline\")throw new Error(\"extension level must be 'block' or 'inline'\");let i=t[r.level];i?i.unshift(r.tokenizer):t[r.level]=[r.tokenizer],r.start&&(r.level===\"block\"?t.startBlock?t.startBlock.push(r.start):t.startBlock=[r.start]:r.level===\"inline\"&&(t.startInline?t.startInline.push(r.start):t.startInline=[r.start]))}\"childTokens\"in r&&r.childTokens&&(t.childTokens[r.name]=r.childTokens)}),s.extensions=t),n.renderer){let r=this.defaults.renderer||new y(this.defaults);for(let i in n.renderer){if(!(i in r))throw new Error(`renderer '${i}' does not exist`);if([\"options\",\"parser\"].includes(i))continue;let o=i,u=n.renderer[o],a=r[o];r[o]=(...c)=>{let p=u.apply(r,c);return p===!1&&(p=a.apply(r,c)),p||\"\"}}s.renderer=r}if(n.tokenizer){let r=this.defaults.tokenizer||new w(this.defaults);for(let i in n.tokenizer){if(!(i in r))throw new Error(`tokenizer '${i}' does not exist`);if([\"options\",\"rules\",\"lexer\"].includes(i))continue;let o=i,u=n.tokenizer[o],a=r[o];r[o]=(...c)=>{let p=u.apply(r,c);return p===!1&&(p=a.apply(r,c)),p}}s.tokenizer=r}if(n.hooks){let r=this.defaults.hooks||new P;for(let i in n.hooks){if(!(i in r))throw new Error(`hook '${i}' does not exist`);if([\"options\",\"block\"].includes(i))continue;let o=i,u=n.hooks[o],a=r[o];P.passThroughHooks.has(i)?r[o]=c=>{if(this.defaults.async&&P.passThroughHooksRespectAsync.has(i))return(async()=>{let k=await u.call(r,c);return a.call(r,k)})();let p=u.call(r,c);return a.call(r,p)}:r[o]=(...c)=>{if(this.defaults.async)return(async()=>{let k=await u.apply(r,c);return k===!1&&(k=await a.apply(r,c)),k})();let p=u.apply(r,c);return p===!1&&(p=a.apply(r,c)),p}}s.hooks=r}if(n.walkTokens){let r=this.defaults.walkTokens,i=n.walkTokens;s.walkTokens=function(o){let u=[];return u.push(i.call(this,o)),r&&(u=u.concat(r.call(this,o))),u}}this.defaults={...this.defaults,...s}}),this}setOptions(e){return this.defaults={...this.defaults,...e},this}lexer(e,t){return x.lex(e,t??this.defaults)}parser(e,t){return b.parse(e,t??this.defaults)}parseMarkdown(e){return(n,s)=>{let r={...s},i={...this.defaults,...r},o=this.onError(!!i.silent,!!i.async);if(this.defaults.async===!0&&r.async===!1)return o(new Error(\"marked(): The async option was set to true by an extension. Remove async: false from the parse options object to return a Promise.\"));if(typeof n>\"u\"||n===null)return o(new Error(\"marked(): input parameter is undefined or null\"));if(typeof n!=\"string\")return o(new Error(\"marked(): input parameter is of type \"+Object.prototype.toString.call(n)+\", string expected\"));if(i.hooks&&(i.hooks.options=i,i.hooks.block=e),i.async)return(async()=>{let u=i.hooks?await i.hooks.preprocess(n):n,c=await(i.hooks?await i.hooks.provideLexer(e):e?x.lex:x.lexInline)(u,i),p=i.hooks?await i.hooks.processAllTokens(c):c;i.walkTokens&&await Promise.all(this.walkTokens(p,i.walkTokens));let h=await(i.hooks?await i.hooks.provideParser(e):e?b.parse:b.parseInline)(p,i);return i.hooks?await i.hooks.postprocess(h):h})().catch(o);try{i.hooks&&(n=i.hooks.preprocess(n));let a=(i.hooks?i.hooks.provideLexer(e):e?x.lex:x.lexInline)(n,i);i.hooks&&(a=i.hooks.processAllTokens(a)),i.walkTokens&&this.walkTokens(a,i.walkTokens);let p=(i.hooks?i.hooks.provideParser(e):e?b.parse:b.parseInline)(a,i);return i.hooks&&(p=i.hooks.postprocess(p)),p}catch(u){return o(u)}}}onError(e,t){return n=>{if(n.message+=`\nPlease report this to https://github.com/markedjs/marked.`,e){let s=\"<p>An error occurred:</p><pre>\"+O(n.message+\"\",!0)+\"</pre>\";return t?Promise.resolve(s):s}if(t)return Promise.reject(n);throw n}}};var M=new D;function g(l,e){return M.parse(l,e)}g.options=g.setOptions=function(l){return M.setOptions(l),g.defaults=M.defaults,G(g.defaults),g};g.getDefaults=z;g.defaults=T;g.use=function(...l){return M.use(...l),g.defaults=M.defaults,G(g.defaults),g};g.walkTokens=function(l,e){return M.walkTokens(l,e)};g.parseInline=M.parseInline;g.Parser=b;g.parser=b.parse;g.Renderer=y;g.TextRenderer=L;g.Lexer=x;g.lexer=x.lex;g.Tokenizer=w;g.Hooks=P;g.parse=g;var jt=g.options,Ft=g.setOptions,Ut=g.use,Kt=g.walkTokens,Wt=g.parseInline,Xt=g,Jt=b.parse,Vt=x.lex;export{P as Hooks,x as Lexer,D as Marked,b as Parser,y as Renderer,L as TextRenderer,w as Tokenizer,T as defaults,z as getDefaults,Vt as lexer,g as marked,jt as options,Xt as parse,Wt as parseInline,Jt as parser,Ft as setOptions,Ut as use,Kt as walkTokens};\n//# sourceMappingURL=marked.esm.js.map\n","class MakeTool {\n constructor(editor, title) {\n this.editor = editor;\n this.defaultText = `${title} text`; // Default text if nothing is selected\n this.button = this.createButton();\n this.title = title\n }\n\n // Create a button element (can be overridden in child classes)\n createButton(iconHtml) {\n const btn = document.createElement('button');\n const btnClass = this.title ? `${this.title.replace(/ /g, '-')}-btn`.toLowerCase() : '';\n btn.innerHTML = iconHtml;\n const svg = btn.querySelector('svg');\n if (svg) svg.setAttribute('aria-hidden', 'true');\n btn.type = 'button';\n btn.title = this.title;\n btn.className = `markdown-btn ${btnClass} fj:me-btn fj:me-btn-xs fj:me-btn-square fj:me-btn-ghost`;\n btn.addEventListener('click', (event) => this.applySyntax(event)); // Default to 'both', can change in child\n\n if(btnClass == 'preview-btn') {\n const btnWrapper = document.createElement('div');\n btnWrapper.className = 'fj:me-surface fj:me-surface-outline fj:border-base-soft fj:border-0 fj:border-l fj:sticky fj:-right-2 fj:px-1.5';\n btnWrapper.appendChild(btn);\n return btnWrapper;\n }\n \n return btn;\n }\n}\n\nexport default MakeTool;\n","import MakeTool from '../MakeTool.js';\n\nclass BoldTool extends MakeTool {\n constructor(editor) {\n super(editor, 'Bold');\n this.button = this.createButton(`\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M7 5h6a3.5 3.5 0 0 1 0 7h-6l0 -7\" /><path d=\"M13 12h1a3.5 3.5 0 0 1 0 7h-7v-7\" /></svg>\n `)\n }\n\n applySyntax() {\n const textarea = this.editor.usertextarea;\n const { selectionStart, selectionEnd } = textarea;\n const value = textarea.value;\n const selectedText = value.substring(selectionStart, selectionEnd);\n\n let newText = '';\n let offset = 0;\n\n if (selectedText.startsWith('***') && selectedText.endsWith('***')) {\n // bold+italic selected → remove bold, keep italic\n newText = '*' + selectedText.slice(3, -3) + '*';\n } else if (selectedText.startsWith('**') && selectedText.endsWith('**')) {\n // full **text** selected → remove bold\n newText = selectedText.slice(2, -2);\n } else if (\n value.substring(selectionStart - 3, selectionStart) === '***' &&\n value.substring(selectionEnd, selectionEnd + 3) === '***'\n ) {\n // cursor inside ***text*** → remove bold, keep italic\n textarea.setSelectionRange(selectionStart - 3, selectionEnd + 3);\n this.editor.insertText(`*${selectedText}*`, 1, 1);\n return;\n } else if (\n value.substring(selectionStart - 2, selectionStart) === '**' &&\n value.substring(selectionEnd, selectionEnd + 2) === '**' &&\n value[selectionStart - 3] !== '*' &&\n value[selectionEnd + 2] !== '*'\n ) {\n // cursor inside **text** → remove bold\n textarea.setSelectionRange(selectionStart - 2, selectionEnd + 2);\n this.editor.insertText(selectedText, 0, 0);\n return;\n } else {\n newText = `**${selectedText || 'Bold text'}**`;\n if (!selectedText) offset = 2;\n }\n\n this.editor.insertText(newText, offset, offset);\n }\n}\n\nexport default BoldTool;\n","import MakeTool from '../MakeTool.js';\n\nclass ItalicTool extends MakeTool {\n constructor(editor) {\n // Call the parent constructor with the markdown syntax for italic (*)\n super(editor, 'Italic');\n this.button = this.createButton(`\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M11 5l6 0\" /><path d=\"M7 19l6 0\" /><path d=\"M14 5l-4 14\" /></svg>\n `);\n }\n\n applySyntax() {\n const textarea = this.editor.usertextarea;\n const { selectionStart, selectionEnd } = textarea;\n const value = textarea.value;\n const selectedText = value.substring(selectionStart, selectionEnd);\n\n let newText = '';\n let offset = 0;\n\n if (selectedText.startsWith('***') && selectedText.endsWith('***')) {\n // bold+italic selected → remove italic, keep bold\n newText = '**' + selectedText.slice(3, -3) + '**';\n } else if (selectedText.startsWith('*') && selectedText.endsWith('*') && !selectedText.startsWith('**')) {\n // full *text* selected → remove italic\n newText = selectedText.slice(1, -1);\n } else if (\n value.substring(selectionStart - 3, selectionStart) === '***' &&\n value.substring(selectionEnd, selectionEnd + 3) === '***'\n ) {\n // cursor inside ***text*** → remove italic, keep bold\n textarea.setSelectionRange(selectionStart - 3, selectionEnd + 3);\n this.editor.insertText(`**${selectedText}**`, 2, 2);\n return;\n } else if (\n value[selectionStart - 1] === '*' &&\n value[selectionEnd] === '*' &&\n value[selectionStart - 2] !== '*' &&\n value[selectionEnd + 1] !== '*'\n ) {\n // cursor inside *text* → remove italic\n textarea.setSelectionRange(selectionStart - 1, selectionEnd + 1);\n this.editor.insertText(selectedText, 0, 0);\n return;\n } else {\n newText = `*${selectedText || 'Italic text'}*`;\n if (!selectedText) offset = 1;\n }\n\n this.editor.insertText(newText, offset, offset);\n }\n}\n\nexport default ItalicTool;","import MakeTool from '../MakeTool.js';\n\nclass StrikethroughTool extends MakeTool {\n constructor(editor) {\n // Call the parent constructor with the markdown syntax for strikethrough (~~)\n super(editor, 'Strikethrough');\n this.button = this.createButton(`\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M5 12l14 0\" /><path d=\"M16 6.5a4 2 0 0 0 -4 -1.5h-1a3.5 3.5 0 0 0 0 7h2a3.5 3.5 0 0 1 0 7h-1.5a4 2 0 0 1 -4 -1.5\" /></svg>\n `);\n }\n\n applySyntax() {\n const textarea = this.editor.usertextarea;\n const { selectionStart, selectionEnd } = textarea;\n const value = textarea.value;\n const selectedText = value.substring(selectionStart, selectionEnd);\n\n const syntax = '~~';\n let newText = '';\n let offset = 0;\n\n if (selectedText.startsWith(syntax) && selectedText.endsWith(syntax)) {\n // full ~~text~~ selected → remove\n newText = selectedText.slice(syntax.length, -syntax.length);\n } else if (\n value.substring(selectionStart - 2, selectionStart) === syntax &&\n value.substring(selectionEnd, selectionEnd + 2) === syntax\n ) {\n // cursor inside ~~text~~ → remove\n textarea.setSelectionRange(selectionStart - 2, selectionEnd + 2);\n this.editor.insertText(selectedText, 0, 0);\n return;\n } else {\n newText = `${syntax}${selectedText || 'Strikethrough text'}${syntax}`;\n offset = syntax.length;\n }\n\n this.editor.insertText(newText, offset, offset);\n }\n}\n\nexport default StrikethroughTool;","import MakeTool from '../MakeTool.js';\n\nclass ULTool extends MakeTool {\n constructor(editor) {\n super(editor, 'Unordered list');\n this.button = this.createButton(`\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M9 6l11 0\" /><path d=\"M9 12l11 0\" /><path d=\"M9 18l11 0\" /><path d=\"M5 6l0 .01\" /><path d=\"M5 12l0 .01\" /><path d=\"M5 18l0 .01\" /></svg>\n `);\n }\n \n applySyntax() {\n const textarea = this.editor.usertextarea;\n const { selectionStart, selectionEnd } = textarea;\n const value = textarea.value;\n const selectedText = value.substring(selectionStart, selectionEnd);\n\n const syntax = '- ';\n let newText = '';\n let offset = 0;\n\n if (selectedText.startsWith(syntax)) {\n newText = selectedText.slice(syntax.length);\n } else if (value.substring(selectionStart - syntax.length, selectionStart) === syntax) {\n textarea.setSelectionRange(selectionStart - syntax.length, selectionEnd);\n this.editor.insertText(selectedText, 0, 0);\n return;\n } else {\n newText = `${syntax}${selectedText || 'Unordered list'}`;\n offset = syntax.length;\n }\n\n this.editor.insertText(newText, offset);\n }\n}\n\n\nexport default ULTool;","import MakeTool from '../MakeTool.js';\n\nclass OLTool extends MakeTool {\n constructor(editor) {\n super(editor, 'Ordered list');\n this.button = this.createButton(`\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M11 6h9\" /><path d=\"M11 12h9\" /><path d=\"M12 18h8\" /><path d=\"M4 16a2 2 0 1 1 4 0c0 .591 -.5 1 -1 1.5l-3 2.5h4\" /><path d=\"M6 10v-6l-2 2\" /></svg>\n `);\n }\n \n applySyntax() {\n const textarea = this.editor.usertextarea;\n const { selectionStart, selectionEnd } = textarea;\n const value = textarea.value;\n const selectedText = value.substring(selectionStart, selectionEnd);\n\n const syntax = '1. ';\n let newText = '';\n let offset = 0;\n\n if (selectedText.startsWith(syntax)) {\n newText = selectedText.slice(syntax.length);\n } else if (value.substring(selectionStart - syntax.length, selectionStart) === syntax) {\n textarea.setSelectionRange(selectionStart - syntax.length, selectionEnd);\n this.editor.insertText(selectedText, 0, 0);\n return;\n } else {\n newText = `${syntax}${selectedText || 'Ordered list'}`;\n offset = syntax.length;\n }\n\n this.editor.insertText(newText, offset);\n }\n}\n\n\nexport default OLTool;","// #components/Toolbar/tools/PreviewToggleTool.js\nimport MakeTool from '../MakeTool.js';\n\nclass PreviewTool extends MakeTool {\n constructor(editor) {\n // No markdown syntax for preview toggle, so we call the parent constructor with empty values\n super(editor, 'Preview');\n this.preview = true;\n this.button = this.createButton(`\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M12 4v16\" /><path d=\"M3 5a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-14\" /><path d=\"M12 13l7.5 -7.5\" /><path d=\"M12 18l8 -8\" /><path d=\"M15 20l5 -5\" /><path d=\"M12 8l4 -4\" /></svg>\n `);\n const btn = this.button.querySelector('button');\n if (btn) btn.setAttribute('aria-pressed', 'false');\n }\n\n // Override applySyntax to handle preview toggling\n applySyntax() {\n const previewWrapper = this.editor.previewContent?.parentNode;\n const editorDiv = this.editor.markdownEditorDiv;\n\n if (!previewWrapper || !editorDiv) return;\n\n // Toggle the preview's visibility by switching between 'block' and 'hidden' classes\n if (this.editor.preview && this.preview) {\n this.enablePreview(previewWrapper, editorDiv);\n } else {\n this.disablePreview(previewWrapper, editorDiv);\n }\n }\n\n // Method to hide the preview (disable it)\n disablePreview(previewWrapper, editorDiv) {\n\n this.preview = true;\n\n const textareaWrapper = editorDiv.querySelector(\".textarea-wrapper\");\n\n editorDiv.parentNode.classList.toggle('fj:fixed');\n editorDiv.parentNode.classList.toggle('fj:top-0');\n editorDiv.parentNode.classList.toggle('fj:inset-x-0');\n editorDiv.parentNode.classList.toggle('fj:rounded-md');\n editorDiv.parentNode.classList.toggle('fj:z-999');\n \n // Add grid layout and divide classes to the editor div\n editorDiv.classList.remove(\n 'fj:md:grid-cols-2'\n );\n previewWrapper.classList.add('fj:hidden');\n textareaWrapper.classList.remove(\"fj:hidden\", \"md:grid\");\n\n textareaWrapper.classList.remove('fj:h-full');\n this.editor.render();\n\n textareaWrapper.querySelector(\"textarea\").classList.remove(\"fj:h-full!\");\n\n if(textareaWrapper.querySelector(\".display-layer\")){\n textareaWrapper.querySelector(\".display-layer\").classList.remove(\"fj:h-full!\");\n }\n \n document.querySelector(\"body\").classList.remove('fj:overflow-hidden');\n\n editorDiv.parentNode.classList.remove('fj:flex', 'fj:flex-col', 'fj:h-dvh');\n editorDiv.classList.remove('fj:flex-1', 'fj:min-h-0');\n\n this.editor.editorContainer.querySelectorAll('.markdown-btn').forEach(button => {\n if (!button.classList.contains('preview-btn')) {\n button.classList.remove('fj:pointer-events-none', 'fj:md:pointer-events-auto', 'fj:opacity-25', 'fj:md:opacity-100');\n button.removeAttribute('aria-disabled');\n } else {\n button.classList.remove('fj:me-btn-active');\n button.setAttribute('aria-pressed', 'false');\n }\n });\n }\n\n // Method to show the preview (enable it)\n enablePreview(previewWrapper, editorDiv) {\n\n this.preview = false;\n \n const textareaWrapper = editorDiv.querySelector(\".textarea-wrapper\");\n\n editorDiv.parentNode.classList.toggle('fj:fixed');\n editorDiv.parentNode.classList.toggle('fj:top-0');\n editorDiv.parentNode.classList.toggle('fj:inset-x-0');\n editorDiv.parentNode.classList.toggle('fj:rounded-md');\n editorDiv.parentNode.classList.toggle('fj:z-999');\n\n // Remove grid layout and divide classes from the editor div\n editorDiv.classList.add(\n 'fj:md:grid-cols-2'\n );\n previewWrapper.classList.remove('fj:hidden');\n textareaWrapper.classList.add(\"fj:hidden\", \"fj:md:grid\");\n\n textareaWrapper.classList.add('fj:h-full');\n textareaWrapper.querySelector(\"textarea\").classList.add(\"fj:h-full!\");\n\n if(textareaWrapper.querySelector(\".display-layer\")){\n textareaWrapper.querySelector(\".display-layer\").classList.add(\"fj:h-full!\");\n }\n\n document.querySelector(\"body\").classList.add('fj:overflow-hidden');\n\n editorDiv.parentNode.classList.add('fj:flex', 'fj:flex-col', 'fj:h-dvh');\n editorDiv.classList.add('fj:flex-1', 'fj:min-h-0');\n\n this.editor.render();\n\n this.editor.editorContainer.querySelectorAll('.markdown-btn').forEach(button => {\n if (!button.classList.contains('preview-btn')) {\n button.classList.add('fj:pointer-events-none', 'fj:md:pointer-events-auto', 'fj:opacity-25', 'fj:md:opacity-100');\n button.setAttribute('aria-disabled', 'true');\n } else {\n button.classList.add('fj:me-btn-active');\n button.setAttribute('aria-pressed', 'true');\n }\n });\n }\n}\n\nexport default PreviewTool;\n","import MakeTool from '../MakeTool.js';\n\nclass CheckListTool extends MakeTool {\n constructor(editor) {\n super(editor, 'Check list');\n this.button = this.createButton(`\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M3.5 5.5l1.5 1.5l2.5 -2.5\" /><path d=\"M3.5 11.5l1.5 1.5l2.5 -2.5\" /><path d=\"M3.5 17.5l1.5 1.5l2.5 -2.5\" /><path d=\"M11 6l9 0\" /><path d=\"M11 12l9 0\" /><path d=\"M11 18l9 0\" /></svg>\n `);\n }\n \n applySyntax() {\n const textarea = this.editor.usertextarea;\n const { selectionStart, selectionEnd } = textarea;\n const value = textarea.value;\n const selectedText = value.substring(selectionStart, selectionEnd);\n\n const syntax = '- [x] ';\n const syntaxUnchecked = '- [ ] ';\n let newText = '';\n let offset = 0;\n\n if (selectedText.startsWith(syntax) || selectedText.startsWith(syntaxUnchecked)) {\n newText = selectedText.slice(syntax.length);\n } else {\n const before = value.substring(selectionStart - syntax.length, selectionStart);\n if (before === syntax || before === syntaxUnchecked) {\n textarea.setSelectionRange(selectionStart - syntax.length, selectionEnd);\n this.editor.insertText(selectedText, 0, 0);\n return;\n }\n newText = `${syntax}${selectedText || 'Check list'}`;\n offset = syntax.length;\n }\n\n this.editor.insertText(newText, offset);\n }\n}\n\n\nexport default CheckListTool;","import MakeTool from '../MakeTool.js';\n\nclass BlockQuoteTool extends MakeTool {\n constructor(editor) {\n // Call the parent constructor with the markdown syntax for italic (*)\n super(editor, 'Blockquote');\n this.button = this.createButton(`\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M10 11h-4a1 1 0 0 1 -1 -1v-3a1 1 0 0 1 1 -1h3a1 1 0 0 1 1 1v6c0 2.667 -1.333 4.333 -4 5\" /><path d=\"M19 11h-4a1 1 0 0 1 -1 -1v-3a1 1 0 0 1 1 -1h3a1 1 0 0 1 1 1v6c0 2.667 -1.333 4.333 -4 5\" /></svg>\n `);\n }\n\n applySyntax() {\n const textarea = this.editor.usertextarea;\n const { selectionStart, selectionEnd } = textarea;\n const value = textarea.value;\n const selectedText = value.substring(selectionStart, selectionEnd);\n\n const syntax = '>';\n let newText = '';\n let offset = 0;\n\n if (selectedText.startsWith(syntax)) {\n newText = selectedText.slice(syntax.length);\n } else if (value.substring(selectionStart - syntax.length, selectionStart) === syntax) {\n textarea.setSelectionRange(selectionStart - syntax.length, selectionEnd);\n this.editor.insertText(selectedText, 0, 0);\n return;\n } else {\n newText = `${syntax}${selectedText || 'Blockquote text'}`;\n if (!selectedText) offset = syntax.length;\n }\n\n this.editor.insertText(newText, offset);\n }\n}\n\nexport default BlockQuoteTool;","export function modal(event, size, bodyHTML, label = '') {\n const self = event.target;\n const mde = self.closest(\".markdown-editor-wrapper\");\n if (mde.querySelector(\".markdown-modal\")) {\n mde.querySelector(\".markdown-modal\").remove();\n }\n\n const ariaAttr = label ? `aria-label=\"${label}\"` : '';\n const modalHTML = `\n <dialog class=\"markdown-modal fj:me-modal fj:me-modal-top fj:lg:me-modal-middle fj:me-modal-center\" id=\"nezanuha_toggleModal\" ${ariaAttr}>\n <div class=\"fj:me-modal-content ${size}\">\n ${bodyHTML}\n </div>\n </dialog>\n `;\n\n if (!mde.querySelector(\".markdown-modal\")) {\n mde.insertAdjacentHTML(\"beforeend\", modalHTML);\n }\n\n const modal = mde.querySelector(\".markdown-modal\");\n modal.addEventListener('close', () => modal.remove());\n modal.showModal();\n return modal;\n}","import MakeTool from '../MakeTool.js';\nimport { modal } from '../../modal.js';\n\nclass LinkTool extends MakeTool {\n constructor(editor) {\n super(editor, 'Link');\n this.button = this.createButton(`\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M9 15l6 -6\" /><path d=\"M11 6l.463 -.536a5 5 0 0 1 7.071 7.072l-.534 .464\" /><path d=\"M13 18l-.397 .534a5.068 5.068 0 0 1 -7.127 0a4.972 4.972 0 0 1 0 -7.071l.524 -.463\" /></svg>\n `);\n }\n\n // Apply link syntax [text](url)\n applySyntax(event) {\n let editor = this.editor;\n let textarea = editor.usertextarea;\n let { selectionStart, selectionEnd } = textarea;\n let selectedText = textarea.value.substring(selectionStart, selectionEnd);\n \n // Check if the selected text contains a link syntax [text](url)\n const linkRegex = /\\[([^\\]]+)\\]\\(([^)]+)\\)/;\n \n if (selectedText && linkRegex.test(selectedText)) {\n // If the selected text is already a link, extract the text inside the brackets\n const match = selectedText.match(linkRegex);\n const linkText = match[1]; // Text inside the square brackets\n \n // Replace the selected text with just the text\n textarea.setRangeText(linkText, selectionStart, selectionEnd, 'select');\n } else {\n // If no link syntax, prompt for the URL and apply the syntax\n \n const bodyHTML =`\n <div class=\"fj:flex fj:justify-between fj:items-center fj:gap-3\">\n <div class=\"fj:font-medium\">Link</div>\n <button type=\"button\" class=\"fj:me-btn fj:me-btn-ghost fj:me-btn-xs fj:me-btn-circle\" aria-label=\"Close\" onclick=\"nezanuha_toggleModal.close()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/></svg>\n </button>\n </div>\n <form method=\"post\">\n <div class=\"fj:flex fj:flex-col fj:justify-center fj:gap-y-4.5 fj:mt-4\">\n <input type=\"url\" placeholder=\"URL\" class=\"link-input fj:me-input fj:w-full\" required>\n <input type=\"text\" placeholder=\"Link text\" class=\"link-text-input fj:me-input fj:w-full\" value=\"${selectedText}\" required>\n <button type=\"submit\" class=\"submit-link fj:me-btn fj:me-btn-sm fj:self-end\">Apply</button>\n </div>\n </form>`;\n\n const modalElement = modal(event, 'fj:max-w-sm', bodyHTML, 'Link');\n\n modalElement.querySelector(\".submit-link\").addEventListener(\"click\", function(e){\n e.preventDefault();\n let linkInput = modalElement.querySelector(\".link-input\");\n let linkTextInput = modalElement.querySelector(\".link-text-input\");\n\n if (!linkInput.validity.valid) {\n linkInput.reportValidity();\n } else if (!linkTextInput.validity.valid) {\n linkTextInput.reportValidity();\n } else {\n const link = linkInput.value;\n let linkText = linkTextInput.value;\n\n if(linkText == ''){\n linkText = 'Link Text';\n }\n\n let newText = '';\n if (selectedText) {\n newText = `[${selectedText}](${link})`; // Insert the link with selected text\n } else {\n newText = `[${linkText}](${link})`; // Insert a placeholder text if nothing is selected\n }\n editor.insertText(newText); // Insert the constructed link markdown\n \n linkInput.value = '';\n linkTextInput.value = '';\n modalElement.close();\n }\n });\n }\n }\n \n}\n\nexport default LinkTool;","import MakeTool from '../MakeTool.js';\n\nclass HeadingTool extends MakeTool {\n constructor(editor) {\n super(editor, 'Heading');\n this.button = this.createButton(`\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M7 12h10\" /><path d=\"M7 5v14\" /><path d=\"M17 5v14\" /><path d=\"M15 19h4\" /><path d=\"M15 5h4\" /><path d=\"M5 19h4\" /><path d=\"M5 5h4\" /></svg>\n `);\n }\n\n createButton(iconHtml) {\n const popoverId = `heading-popover-${Math.random().toString(36).slice(2, 7)}`;\n\n const btn = document.createElement('button');\n btn.innerHTML = iconHtml;\n const svg = btn.querySelector('svg');\n if (svg) svg.setAttribute('aria-hidden', 'true');\n btn.type = 'button';\n btn.title = 'Heading';\n btn.className = 'markdown-btn heading-btn fj:me-btn fj:me-btn-xs fj:me-btn-square fj:me-btn-ghost fj:me-popover-toggle';\n btn.setAttribute('popovertarget', popoverId);\n\n const popoverContent = document.createElement('div');\n popoverContent.id = popoverId;\n popoverContent.tabIndex = 0;\n popoverContent.className = 'fj:me-popover-content';\n popoverContent.setAttribute('popover', '');\n\n const menu = document.createElement('ul');\n menu.className = 'fj:me-menu';\n\n const headingClasses = ['fj:me-heading-xl', 'fj:me-heading-lg', 'fj:me-heading-md', 'fj:me-heading-sm', 'fj:me-heading-xs', 'fj:me-heading-xs'];\n\n for (let level = 1; level <= 6; level++) {\n const li = document.createElement('li');\n const a = document.createElement('a');\n a.className = `fj:me-menu-item ${headingClasses[level - 1]}`;\n a.textContent = `Heading ${level}`;\n a.addEventListener('click', () => {\n this.applyHeading(level);\n popoverContent.hidePopover();\n });\n li.appendChild(a);\n menu.appendChild(li);\n }\n\n popoverContent.appendChild(menu);\n\n const wrapper = document.createElement('div');\n wrapper.className = 'fj:me-popover';\n wrapper.appendChild(btn);\n wrapper.appendChild(popoverContent);\n\n return wrapper;\n }\n\n applyHeading(level) {\n const textarea = this.editor.usertextarea;\n const { selectionStart, selectionEnd } = textarea;\n const value = textarea.value;\n\n // Always work on the full current line so existing heading prefixes are included\n const lineStart = value.lastIndexOf('\\n', selectionStart - 1) + 1;\n const lineEndRaw = value.indexOf('\\n', selectionEnd);\n const lineEnd = lineEndRaw === -1 ? value.length : lineEndRaw;\n\n const lineText = value.substring(lineStart, lineEnd);\n const existingLevel = (lineText.match(/^(#+)\\s/) || [])[1];\n const cleanText = lineText.replace(/^#+\\s*/, '');\n const prefix = `${'#'.repeat(level)} `;\n\n // Same level clicked again → remove heading\n const newText = (existingLevel && existingLevel.length === level)\n ? (cleanText || 'Heading')\n : (cleanText ? `${prefix}${cleanText}` : `${prefix}Heading`);\n\n textarea.value = `${value.substring(0, lineStart)}${newText}${value.substring(lineEnd)}`;\n textarea.focus();\n\n const textStart = lineStart + (newText === cleanText || newText === 'Heading' ? 0 : prefix.length);\n const textEnd = lineStart + newText.length;\n textarea.setSelectionRange(textStart, textEnd);\n\n this.editor.scrollToView();\n this.editor.render();\n }\n\n applySyntax() {}\n}\n\nexport default HeadingTool;\n","import MakeTool from '../MakeTool.js';\nimport { modal } from '../../modal.js';\n\nclass ImageTool extends MakeTool {\n constructor(editor, config = {}) {\n super(editor, 'Image link');\n this.config = config;\n this.fileInputConfig = config.fileInput || false;\n // Logic: Respect config or default to true\n this.altInputConfig = config.altInput !== undefined ? config.altInput : { required: true };\n \n this.button = this.createButton(`\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M15 8h.01\" /><path d=\"M12.5 21h-6.5a3 3 0 0 1 -3 -3v-12a3 3 0 0 1 3 -3h12a3 3 0 0 1 3 3v6.5\" /><path d=\"M3 16l5 -5c.928 -.893 2.072 -.893 3 0l4 4\" /><path d=\"M14 14l1 -1c.67 -.644 1.45 -.824 2.182 -.54\" /><path d=\"M16 19h6\" /><path d=\"M19 16v6\" /></svg>\n `);\n }\n\n applySyntax(event) {\n const editor = this.editor;\n const textarea = editor.usertextarea;\n const { selectionStart, selectionEnd } = textarea;\n const selectedText = textarea.value.substring(selectionStart, selectionEnd);\n\n const acceptFormats = this.fileInputConfig.accept\n ? this.fileInputConfig.accept.map(type => `image/${type}`).join(',')\n : 'image/*';\n\n const isAltRequired = typeof this.altInputConfig === 'boolean' \n ? this.altInputConfig \n : (this.altInputConfig.required !== false);\n\n const uploadUrl = this.fileInputConfig.uploadUrl || null;\n const customParams = this.fileInputConfig.params || {};\n\n const imageRegex = /!\\[([^\\]]*)\\]\\(([^)]+)\\)/;\n if (selectedText && imageRegex.test(selectedText)) {\n const match = selectedText.match(imageRegex);\n textarea.setRangeText(match[1], selectionStart, selectionEnd, 'select');\n return;\n }\n\n let fileInputTag = '';\n if (this.fileInputConfig) {\n fileInputTag = `\n <input type=\"file\" accept=\"${acceptFormats}\" class=\"img-file-input fj:me-input fj:w-full\">\n <div class=\"fj:me-divider fj:my-1\">OR</div>\n `;\n }\n\n const bodyHTML = `\n <div class=\"fj:flex fj:justify-between fj:items-center fj:gap-3\">\n <div class=\"fj:font-medium\">Image</div>\n <button type=\"button\" class=\"fj:me-btn fj:me-btn-ghost fj:me-btn-xs fj:me-btn-circle\" aria-label=\"Close\" onclick=\"nezanuha_toggleModal.close()\">\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path d=\"M18 6 6 18\"/><path d=\"m6 6 12 12\"/></svg>\n </button>\n </div>\n <div class=\"fj:mt-4 fj:flex fj:flex-col fj:gap-y-4\">\n ${fileInputTag}\n <input type=\"url\" placeholder=\"URL\" class=\"img-link-input fj:me-input fj:w-full\" required>\n <input type=\"text\" placeholder=\"Alt text\" class=\"img-link-alt-input fj:me-input fj:w-full\" value=\"${selectedText}\" ${isAltRequired ? 'required' : ''}>\n <button type=\"button\" class=\"submit-img-link fj:me-btn fj:me-btn-sm fj:self-end\">Apply</button>\n </div>`;\n\n const modalElement = modal(event, 'fj:max-w-sm', bodyHTML, 'Image');\n const submitBtn = modalElement.querySelector(\".submit-img-link\");\n\n submitBtn.addEventListener(\"click\", async (e) => {\n e.preventDefault();\n\n const fileInputSelector = modalElement.querySelector(\".img-file-input\");\n const urlInputSelector = modalElement.querySelector(\".img-link-input\");\n const imgFileAltInput = modalElement.querySelector(\".img-link-alt-input\");\n\n const hasFile = fileInputSelector?.files[0];\n\n // --- 1. PRE-VALIDATION ---\n // If we are uploading a file, the URL is currently empty, so we temporarily\n // disable the 'required' on URL just to check the Alt text.\n if (hasFile) {\n urlInputSelector.required = false; \n }\n\n // Check if Alt (and URL if no file) are valid according to config\n if (isAltRequired && !imgFileAltInput.validity.valid) {\n imgFileAltInput.reportValidity();\n if (hasFile) urlInputSelector.required = true; // Restore\n return;\n }\n\n if (!hasFile && !urlInputSelector.validity.valid) {\n urlInputSelector.reportValidity();\n return;\n }\n\n // --- 2. ASYNC UPLOAD ---\n if (hasFile && uploadUrl) {\n const file = fileInputSelector.files[0];\n submitBtn.disabled = true;\n submitBtn.textContent = 'Uploading...';\n\n const formData = new FormData();\n formData.append('image_file', file);\n formData.append('image_alt', imgFileAltInput.value);\n\n Object.keys(customParams).forEach(key => {\n formData.append(key, customParams[key]);\n });\n\n try {\n const res = await fetch(uploadUrl, { method: 'POST', body: formData });\n const result = await res.json();\n\n if (result.success && result.image_path) {\n urlInputSelector.value = result.image_path;\n if (result.image_alt) imgFileAltInput.value = result.image_alt;\n } else {\n alert(result.error || result.message || 'Image upload failed.');\n submitBtn.disabled = false;\n submitBtn.textContent = 'Apply';\n urlInputSelector.required = true; // Restore\n return;\n }\n } catch (err) {\n alert('Upload failed.');\n submitBtn.disabled = false;\n submitBtn.textContent = 'Apply';\n urlInputSelector.required = true; // Restore\n return;\n }\n \n submitBtn.disabled = false;\n submitBtn.textContent = 'Apply';\n }\n\n // --- 3. FINAL INSERTION ---\n const imgLink = urlInputSelector.value;\n const imgLinkAlt = imgFileAltInput.value || '';\n \n const newText = selectedText \n ? `` \n : ``;\n\n editor.insertText(newText);\n modalElement.close();\n });\n }\n}\n\nexport default ImageTool;","import MakeTool from '../MakeTool.js';\n\nclass UndoTool extends MakeTool {\n constructor(editor) {\n super(editor, 'Undo');\n this.button = this.createButton(`\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M9 14l-4 -4l4 -4\" /><path d=\"M5 10h11a4 4 0 1 1 0 8h-1\" /></svg>\n `);\n }\n\n applySyntax() {\n // Check if Undo is available and perform the undo action\n const undoRedoManager = this.editor.undoRedoManager;\n if (undoRedoManager) {\n undoRedoManager.undo();\n }\n }\n}\n\nexport default UndoTool;","import MakeTool from '../MakeTool.js';\n\nclass RedoTool extends MakeTool {\n constructor(editor) {\n super(editor, 'Redo');\n this.button = this.createButton(`\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M15 14l4 -4l-4 -4\" /><path d=\"M19 10h-11a4 4 0 1 0 0 8h1\" /></svg>\n `);\n }\n\n applySyntax() {\n // Check if Redo is available and perform the redo action\n const undoRedoManager = this.editor.undoRedoManager;\n if (undoRedoManager) {\n undoRedoManager.redo();\n }\n }\n}\n\nexport default RedoTool;\n","import MakeTool from '../MakeTool.js';\n\nclass IndentTool extends MakeTool {\n constructor(editor) {\n super(editor, 'Indent');\n this.button = this.createButton(`\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M20 6l-11 0\" /><path d=\"M20 12l-7 0\" /><path d=\"M20 18l-11 0\" /><path d=\"M4 8l4 4l-4 4\" /></svg>\n `);\n }\n \n applySyntax() {\n const indentManager = this.editor.indentManager;\n if (indentManager) {\n indentManager.indent();\n this.editor.render();\n }\n }\n}\n\n\nexport default IndentTool;","import MakeTool from '../MakeTool.js';\n\nclass OutdentTool extends MakeTool {\n constructor(editor) {\n super(editor, 'Outdent');\n this.button = this.createButton(`\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M20 6l-7 0\" /><path d=\"M20 12l-9 0\" /><path d=\"M20 18l-7 0\" /><path d=\"M8 8l-4 4l4 4\" /></svg>\n `);\n }\n \n applySyntax(e) {\n const indentManager = this.editor.indentManager;\n if (indentManager) {\n indentManager.outdent();\n this.editor.render();\n }\n }\n}\n\n\nexport default OutdentTool;","import MakeTool from '../MakeTool.js';\n\nclass CodeTool extends MakeTool {\n constructor(editor) {\n super(editor, 'Code');\n this.button = this.createButton(`\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M7 8l-4 4l4 4\" /><path d=\"M17 8l4 4l-4 4\" /><path d=\"M14 4l-4 16\" /></svg>\n `);\n }\n\n applySyntax() {\n const textarea = this.editor.usertextarea;\n const { selectionStart, selectionEnd } = textarea;\n const value = textarea.value;\n const selectedText = value.substring(selectionStart, selectionEnd);\n\n // Toggle off: full `code` selected\n if (selectedText.startsWith('`') && selectedText.endsWith('`')) {\n this.editor.insertText(selectedText.slice(1, -1), 0, 0);\n return;\n }\n\n // Toggle off: cursor is inside `code`\n if (value[selectionStart - 1] === '`' && value[selectionEnd] === '`') {\n textarea.setSelectionRange(selectionStart - 1, selectionEnd + 1);\n this.editor.insertText(selectedText, 0, 0);\n return;\n }\n\n const newText = `\\`${selectedText || 'code'}\\``;\n this.editor.insertText(newText, 1, 1);\n }\n}\n\nexport default CodeTool;\n","import MakeTool from '../MakeTool.js';\n\nclass CodeBlockTool extends MakeTool {\n constructor(editor) {\n super(editor, 'Code Block');\n this.button = this.createButton(`\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M8 9l3 3l-3 3\" /><path d=\"M13 15l3 0\" /><rect x=\"3\" y=\"4\" width=\"18\" height=\"16\" rx=\"2\" /></svg>\n `);\n }\n\n applySyntax() {\n const textarea = this.editor.usertextarea;\n const { selectionStart, selectionEnd } = textarea;\n const value = textarea.value;\n const selectedText = value.substring(selectionStart, selectionEnd);\n\n // Toggle off: full fenced block selected (``` ... ```)\n if (selectedText.startsWith('```') && selectedText.endsWith('```') && selectedText.length > 6) {\n const inner = selectedText.replace(/^```\\w*\\n?/, '').replace(/\\n?```$/, '');\n this.editor.insertText(inner, 0, 0);\n return;\n }\n\n const inner = selectedText || 'code';\n const newText = `\\`\\`\\`\\n${inner}\\n\\`\\`\\``;\n // offset 4 = past \"```\\n\"; trailing 4 = past \"\\n```\" — selects the inner content\n this.editor.insertText(newText, 4, 4);\n }\n}\n\nexport default CodeBlockTool;\n","import MakeTool from '../MakeTool.js';\n\nclass HrTool extends MakeTool {\n constructor(editor) {\n super(editor, 'Horizontal Rule');\n this.button = this.createButton(`\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M4 12l16 0\" stroke-width=\"3\"/><path d=\"M4 7l6 0\" /><path d=\"M4 17l6 0\" /><path d=\"M14 7l6 0\" /><path d=\"M14 17l6 0\" /></svg>\n `);\n }\n\n applySyntax() {\n const textarea = this.editor.usertextarea;\n const { selectionStart } = textarea;\n const value = textarea.value;\n\n const atLineStart = selectionStart === 0 || value[selectionStart - 1] === '\\n';\n const text = atLineStart ? '---\\n' : '\\n\\n---\\n';\n this.editor.insertText(text, text.length, 0);\n }\n}\n\nexport default HrTool;\n","import MakeTool from '../MakeTool.js';\n\nclass TableTool extends MakeTool {\n constructor(editor) {\n super(editor, 'Table');\n this.button = this.createButton(`\n <svg xmlns=\"http://www.w3.org/2000/svg\" width=\"20\" height=\"20\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path stroke=\"none\" d=\"M0 0h24v24H0z\" fill=\"none\"/><path d=\"M3 5a2 2 0 0 1 2 -2h14a2 2 0 0 1 2 2v14a2 2 0 0 1 -2 2h-14a2 2 0 0 1 -2 -2v-14z\" /><path d=\"M3 10h18\" /><path d=\"M10 3v18\" /></svg>\n `);\n }\n\n applySyntax() {\n const textarea = this.editor.usertextarea;\n const { selectionStart } = textarea;\n const value = textarea.value;\n\n const template = `| Column 1 | Column 2 | Column 3 |\\n| --- | --- | --- |\\n| Cell | Cell | Cell |\\n| Cell | Cell | Cell |`;\n const atLineStart = selectionStart === 0 || value[selectionStart - 1] === '\\n';\n const text = atLineStart ? template : `\\n${template}`;\n this.editor.insertText(text, text.length, 0);\n }\n}\n\nexport default TableTool;\n","import BoldTool from './tools/BoldTool.js';\nimport ItalicTool from './tools/ItalicTool.js';\nimport StrikethroughTool from './tools/StrikethroughTool.js';\nimport ULTool from './tools/ULTool.js';\nimport OLTool from './tools/OLTool.js';\nimport PreviewTool from './tools/PreviewTool.js'\nimport CheckListTool from './tools/CheckListTool.js';\nimport BlockQuoteTool from './tools/BlockQuoteTool.js';\nimport LinkTool from './tools/LinkTool.js'\nimport HeadingTool from './tools/HeadingTool.js';\nimport ImageTool from './tools/ImageTool.js';\nimport UndoTool from './tools/UndoTool.js';\nimport RedoTool from './tools/RedoTool.js';\nimport IndentTool from './tools/IndentTool.js';\nimport OutdentTool from './tools/OutdentTool.js';\nimport CodeTool from './tools/CodeTool.js';\nimport CodeBlockTool from './tools/CodeBlockTool.js';\nimport HrTool from './tools/HrTool.js';\nimport TableTool from './tools/TableTool.js';\n\nclass Toolbar {\n constructor(editor, options) {\n this.editor = editor;\n this.options = options;\n this.toolbar = document.createElement('div');\n this.toolbar.className = 'toolbar fj:me-surface fj:me-surface-outline fj:border-base-soft fj:border-0 fj:border-b fj:flex fj:gap-x-1 fj:p-1.5 fj:overflow-x-auto';\n this.toolbar.setAttribute('role', 'toolbar');\n this.toolbar.setAttribute('aria-label', 'Editor toolbar');\n this.init();\n }\n\n init() {\n const toolMapping = {\n heading: HeadingTool,\n ul: ULTool,\n ol: OLTool,\n checklist: CheckListTool,\n bold: BoldTool,\n italic: ItalicTool,\n strikethrough: StrikethroughTool,\n blockquote: BlockQuoteTool,\n code: CodeTool,\n codeblock: CodeBlockTool,\n hr: HrTool,\n table: TableTool,\n link: LinkTool,\n image: ImageTool,\n undo: UndoTool,\n redo: RedoTool,\n indent: IndentTool,\n outdent: OutdentTool\n };\n\n // Append all tools except preview\n // this.options.forEach(tool => {\n // if (tool !== 'preview') {\n // const ToolClass = toolMapping[tool];\n // if (ToolClass) {\n // const toolInstance = new ToolClass(this.editor);\n // this.toolbar.appendChild(toolInstance.button); // Directly append to toolbar\n // }\n // }\n // });\n\n this.options.forEach(tool => {\n let ToolClass, config;\n \n if (typeof tool === 'string') {\n ToolClass = toolMapping[tool];\n } else if (typeof tool === 'object') {\n const toolName = Object.keys(tool)[0];\n config = tool[toolName];\n ToolClass = toolMapping[toolName];\n }\n \n if (ToolClass) {\n const toolInstance = new ToolClass(this.editor, config);\n this.toolbar.appendChild(toolInstance.button);\n }\n });\n\n // Append preview button at the end\n if (this.options.includes('preview')) {\n const previewToolInstance = new PreviewTool(this.editor);\n this.toolbar.appendChild(previewToolInstance.button); // Directly append to toolbar at the end\n }\n\n this.editor.editorContainer.insertBefore(this.toolbar, this.editor.markdownEditorDiv);\n }\n}\n\nexport default Toolbar;\n","class Preview {\n constructor(container) {\n this.previewContainer = document.createElement('div');\n this.previewContainer.className = 'preview-wrapper fj:p-2 fj:hidden fj:me-surface fj:me-surface-outline fj:border-base-soft fj:border-0 fj:border-l';\n this.previewContainer.setAttribute('role', 'region');\n this.previewContainer.setAttribute('aria-label', 'Preview');\n this.previewContent = document.createElement('div');\n this.previewContent.className = 'preview-content fj:prose fj:prose-sm fj:md:prose-base fj:me-prose-frutjam fj:p-1.5 fj:overflow-y-auto fj:h-full fj:max-w-full';\n this.previewContainer.appendChild(this.previewContent);\n container.appendChild(this.previewContainer);\n }\n\n getPreviewContent() {\n return this.previewContent;\n }\n}\n\nexport default Preview;","class Footer {\n constructor(container, options = {}) {\n this.options = options;\n\n this.footer = document.createElement('div');\n this.footer.className = 'editor-footer fj:me-surface fj:me-surface-outline fj:border-base-soft fj:border-0 fj:border-t fj:flex fj:justify-between fj:items-center fj:px-3 fj:py-1 fj:text-xs fj:opacity-60 fj:select-none';\n this.footer.setAttribute('aria-hidden', 'true');\n\n this.positionEl = document.createElement('span');\n this.charsEl = document.createElement('span');\n\n if (this.options.line || this.options.col) {\n this.footer.appendChild(this.positionEl);\n }\n if (this.options.chars) {\n this.footer.appendChild(this.charsEl);\n }\n\n container.appendChild(this.footer);\n }\n\n update(textarea) {\n const value = textarea.value;\n const pos = textarea.selectionStart ?? 0;\n\n if (this.options.line || this.options.col) {\n const lines = value.substring(0, pos).split('\\n');\n const parts = [];\n if (this.options.line) parts.push(`Ln ${lines.length}`);\n if (this.options.col) parts.push(`Col ${lines[lines.length - 1].length + 1}`);\n this.positionEl.textContent = parts.join(', ');\n }\n\n if (this.options.chars) {\n this.charsEl.textContent = `${value.length.toLocaleString()} chars`;\n }\n }\n}\n\nexport default Footer;\n","export default class Diff {\n diff(oldStr, newStr, \n // Type below is not accurate/complete - see above for full possibilities - but it compiles\n options = {}) {\n let callback;\n if (typeof options === 'function') {\n callback = options;\n options = {};\n }\n else if ('callback' in options) {\n callback = options.callback;\n }\n // Allow subclasses to massage the input prior to running\n const oldString = this.castInput(oldStr, options);\n const newString = this.castInput(newStr, options);\n const oldTokens = this.removeEmpty(this.tokenize(oldString, options));\n const newTokens = this.removeEmpty(this.tokenize(newString, options));\n return this.diffWithOptionsObj(oldTokens, newTokens, options, callback);\n }\n diffWithOptionsObj(oldTokens, newTokens, options, callback) {\n var _a;\n const done = (value) => {\n value = this.postProcess(value, options);\n if (callback) {\n setTimeout(function () { callback(value); }, 0);\n return undefined;\n }\n else {\n return value;\n }\n };\n const newLen = newTokens.length, oldLen = oldTokens.length;\n let editLength = 1;\n let maxEditLength = newLen + oldLen;\n if (options.maxEditLength != null) {\n maxEditLength = Math.min(maxEditLength, options.maxEditLength);\n }\n const maxExecutionTime = (_a = options.timeout) !== null && _a !== void 0 ? _a : Infinity;\n const abortAfterTimestamp = Date.now() + maxExecutionTime;\n const bestPath = [{ oldPos: -1, lastComponent: undefined }];\n // Seed editLength = 0, i.e. the content starts with the same values\n let newPos = this.extractCommon(bestPath[0], newTokens, oldTokens, 0, options);\n if (bestPath[0].oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n // Identity per the equality and tokenizer\n return done(this.buildValues(bestPath[0].lastComponent, newTokens, oldTokens));\n }\n // Once we hit the right edge of the edit graph on some diagonal k, we can\n // definitely reach the end of the edit graph in no more than k edits, so\n // there's no point in considering any moves to diagonal k+1 any more (from\n // which we're guaranteed to need at least k+1 more edits).\n // Similarly, once we've reached the bottom of the edit graph, there's no\n // point considering moves to lower diagonals.\n // We record this fact by setting minDiagonalToConsider and\n // maxDiagonalToConsider to some finite value once we've hit the edge of\n // the edit graph.\n // This optimization is not faithful to the original algorithm presented in\n // Myers's paper, which instead pointlessly extends D-paths off the end of\n // the edit graph - see page 7 of Myers's paper which notes this point\n // explicitly and illustrates it with a diagram. This has major performance\n // implications for some common scenarios. For instance, to compute a diff\n // where the new text simply appends d characters on the end of the\n // original text of length n, the true Myers algorithm will take O(n+d^2)\n // time while this optimization needs only O(n+d) time.\n let minDiagonalToConsider = -Infinity, maxDiagonalToConsider = Infinity;\n // Main worker method. checks all permutations of a given edit length for acceptance.\n const execEditLength = () => {\n for (let diagonalPath = Math.max(minDiagonalToConsider, -editLength); diagonalPath <= Math.min(maxDiagonalToConsider, editLength); diagonalPath += 2) {\n let basePath;\n const removePath = bestPath[diagonalPath - 1], addPath = bestPath[diagonalPath + 1];\n if (removePath) {\n // No one else is going to attempt to use this value, clear it\n // @ts-expect-error - perf optimisation. This type-violating value will never be read.\n bestPath[diagonalPath - 1] = undefined;\n }\n let canAdd = false;\n if (addPath) {\n // what newPos will be after we do an insertion:\n const addPathNewPos = addPath.oldPos - diagonalPath;\n canAdd = addPath && 0 <= addPathNewPos && addPathNewPos < newLen;\n }\n const canRemove = removePath && removePath.oldPos + 1 < oldLen;\n if (!canAdd && !canRemove) {\n // If this path is a terminal then prune\n // @ts-expect-error - perf optimisation. This type-violating value will never be read.\n bestPath[diagonalPath] = undefined;\n continue;\n }\n // Select the diagonal that we want to branch from. We select the prior\n // path whose position in the old string is the farthest from the origin\n // and does not pass the bounds of the diff graph\n if (!canRemove || (canAdd && removePath.oldPos < addPath.oldPos)) {\n basePath = this.addToPath(addPath, true, false, 0, options);\n }\n else {\n basePath = this.addToPath(removePath, false, true, 1, options);\n }\n newPos = this.extractCommon(basePath, newTokens, oldTokens, diagonalPath, options);\n if (basePath.oldPos + 1 >= oldLen && newPos + 1 >= newLen) {\n // If we have hit the end of both strings, then we are done\n return done(this.buildValues(basePath.lastComponent, newTokens, oldTokens)) || true;\n }\n else {\n bestPath[diagonalPath] = basePath;\n if (basePath.oldPos + 1 >= oldLen) {\n maxDiagonalToConsider = Math.min(maxDiagonalToConsider, diagonalPath - 1);\n }\n if (newPos + 1 >= newLen) {\n minDiagonalToConsider = Math.max(minDiagonalToConsider, diagonalPath + 1);\n }\n }\n }\n editLength++;\n };\n // Performs the length of edit iteration. Is a bit fugly as this has to support the\n // sync and async mode which is never fun. Loops over execEditLength until a value\n // is produced, or until the edit length exceeds options.maxEditLength (if given),\n // in which case it will return undefined.\n if (callback) {\n (function exec() {\n setTimeout(function () {\n if (editLength > maxEditLength || Date.now() > abortAfterTimestamp) {\n return callback(undefined);\n }\n if (!execEditLength()) {\n exec();\n }\n }, 0);\n }());\n }\n else {\n while (editLength <= maxEditLength && Date.now() <= abortAfterTimestamp) {\n const ret = execEditLength();\n if (ret) {\n return ret;\n }\n }\n }\n }\n addToPath(path, added, removed, oldPosInc, options) {\n const last = path.lastComponent;\n if (last && !options.oneChangePerToken && last.added === added && last.removed === removed) {\n return {\n oldPos: path.oldPos + oldPosInc,\n lastComponent: { count: last.count + 1, added: added, removed: removed, previousComponent: last.previousComponent }\n };\n }\n else {\n return {\n oldPos: path.oldPos + oldPosInc,\n lastComponent: { count: 1, added: added, removed: removed, previousComponent: last }\n };\n }\n }\n extractCommon(basePath, newTokens, oldTokens, diagonalPath, options) {\n const newLen = newTokens.length, oldLen = oldTokens.length;\n let oldPos = basePath.oldPos, newPos = oldPos - diagonalPath, commonCount = 0;\n while (newPos + 1 < newLen && oldPos + 1 < oldLen && this.equals(oldTokens[oldPos + 1], newTokens[newPos + 1], options)) {\n newPos++;\n oldPos++;\n commonCount++;\n if (options.oneChangePerToken) {\n basePath.lastComponent = { count: 1, previousComponent: basePath.lastComponent, added: false, removed: false };\n }\n }\n if (commonCount && !options.oneChangePerToken) {\n basePath.lastComponent = { count: commonCount, previousComponent: basePath.lastComponent, added: false, removed: false };\n }\n basePath.oldPos = oldPos;\n return newPos;\n }\n equals(left, right, options) {\n if (options.comparator) {\n return options.comparator(left, right);\n }\n else {\n return left === right\n || (!!options.ignoreCase && left.toLowerCase() === right.toLowerCase());\n }\n }\n removeEmpty(array) {\n const ret = [];\n for (let i = 0; i < array.length; i++) {\n if (array[i]) {\n ret.push(array[i]);\n }\n }\n return ret;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n castInput(value, options) {\n return value;\n }\n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n tokenize(value, options) {\n return Array.from(value);\n }\n join(chars) {\n // Assumes ValueT is string, which is the case for most subclasses.\n // When it's false, e.g. in diffArrays, this method needs to be overridden (e.g. with a no-op)\n // Yes, the casts are verbose and ugly, because this pattern - of having the base class SORT OF\n // assume tokens and values are strings, but not completely - is weird and janky.\n return chars.join('');\n }\n postProcess(changeObjects, \n // eslint-disable-next-line @typescript-eslint/no-unused-vars\n options) {\n return changeObjects;\n }\n get useLongestToken() {\n return false;\n }\n buildValues(lastComponent, newTokens, oldTokens) {\n // First we convert our linked list of components in reverse order to an\n // array in the right order:\n const components = [];\n let nextComponent;\n while (lastComponent) {\n components.push(lastComponent);\n nextComponent = lastComponent.previousComponent;\n delete lastComponent.previousComponent;\n lastComponent = nextComponent;\n }\n components.reverse();\n const componentLen = components.length;\n let componentPos = 0, newPos = 0, oldPos = 0;\n for (; componentPos < componentLen; componentPos++) {\n const component = components[componentPos];\n if (!component.removed) {\n if (!component.added && this.useLongestToken) {\n let value = newTokens.slice(newPos, newPos + component.count);\n value = value.map(function (value, i) {\n const oldValue = oldTokens[oldPos + i];\n return oldValue.length > value.length ? oldValue : value;\n });\n component.value = this.join(value);\n }\n else {\n component.value = this.join(newTokens.slice(newPos, newPos + component.count));\n }\n newPos += component.count;\n // Common case\n if (!component.added) {\n oldPos += component.count;\n }\n }\n else {\n component.value = this.join(oldTokens.slice(oldPos, oldPos + component.count));\n oldPos += component.count;\n }\n }\n return components;\n }\n}\n","import Diff from './base.js';\nclass CharacterDiff extends Diff {\n}\nexport const characterDiff = new CharacterDiff();\nexport function diffChars(oldStr, newStr, options) {\n return characterDiff.diff(oldStr, newStr, options);\n}\n","export function longestCommonPrefix(str1, str2) {\n let i;\n for (i = 0; i < str1.length && i < str2.length; i++) {\n if (str1[i] != str2[i]) {\n return str1.slice(0, i);\n }\n }\n return str1.slice(0, i);\n}\nexport function longestCommonSuffix(str1, str2) {\n let i;\n // Unlike longestCommonPrefix, we need a special case to handle all scenarios\n // where we return the empty string since str1.slice(-0) will return the\n // entire string.\n if (!str1 || !str2 || str1[str1.length - 1] != str2[str2.length - 1]) {\n return '';\n }\n for (i = 0; i < str1.length && i < str2.length; i++) {\n if (str1[str1.length - (i + 1)] != str2[str2.length - (i + 1)]) {\n return str1.slice(-i);\n }\n }\n return str1.slice(-i);\n}\nexport function replacePrefix(string, oldPrefix, newPrefix) {\n if (string.slice(0, oldPrefix.length) != oldPrefix) {\n throw Error(`string ${JSON.stringify(string)} doesn't start with prefix ${JSON.stringify(oldPrefix)}; this is a bug`);\n }\n return newPrefix + string.slice(oldPrefix.length);\n}\nexport function replaceSuffix(string, oldSuffix, newSuffix) {\n if (!oldSuffix) {\n return string + newSuffix;\n }\n if (string.slice(-oldSuffix.length) != oldSuffix) {\n throw Error(`string ${JSON.stringify(string)} doesn't end with suffix ${JSON.stringify(oldSuffix)}; this is a bug`);\n }\n return string.slice(0, -oldSuffix.length) + newSuffix;\n}\nexport function removePrefix(string, oldPrefix) {\n return replacePrefix(string, oldPrefix, '');\n}\nexport function removeSuffix(string, oldSuffix) {\n return replaceSuffix(string, oldSuffix, '');\n}\nexport function maximumOverlap(string1, string2) {\n return string2.slice(0, overlapCount(string1, string2));\n}\n// Nicked from https://stackoverflow.com/a/60422853/1709587\nfunction overlapCount(a, b) {\n // Deal with cases where the strings differ in length\n let startA = 0;\n if (a.length > b.length) {\n startA = a.length - b.length;\n }\n let endB = b.length;\n if (a.length < b.length) {\n endB = a.length;\n }\n // Create a back-reference for each index\n // that should be followed in case of a mismatch.\n // We only need B to make these references:\n const map = Array(endB);\n let k = 0; // Index that lags behind j\n map[0] = 0;\n for (let j = 1; j < endB; j++) {\n if (b[j] == b[k]) {\n map[j] = map[k]; // skip over the same character (optional optimisation)\n }\n else {\n map[j] = k;\n }\n while (k > 0 && b[j] != b[k]) {\n k = map[k];\n }\n if (b[j] == b[k]) {\n k++;\n }\n }\n // Phase 2: use these references while iterating over A\n k = 0;\n for (let i = startA; i < a.length; i++) {\n while (k > 0 && a[i] != b[k]) {\n k = map[k];\n }\n if (a[i] == b[k]) {\n k++;\n }\n }\n return k;\n}\n/**\n * Returns true if the string consistently uses Windows line endings.\n */\nexport function hasOnlyWinLineEndings(string) {\n return string.includes('\\r\\n') && !string.startsWith('\\n') && !string.match(/[^\\r]\\n/);\n}\n/**\n * Returns true if the string consistently uses Unix line endings.\n */\nexport function hasOnlyUnixLineEndings(string) {\n return !string.includes('\\r\\n') && string.includes('\\n');\n}\n/**\n * Split a string into segments using a word segmenter, merging consecutive\n * segments if they are both whitespace segments. Whitespace segments can\n * appear adjacent to one another for two reasons:\n * - newlines always get their own segment\n * - where a diacritic is attached to a whitespace character in the text, the\n * segment ends after the diacritic, so e.g. \" \\u0300 \" becomes two segments.\n * This function therefore runs the segmenter's .segment() method and then\n * merges consecutive segments of whitespace into a single part.\n */\nexport function segment(string, segmenter) {\n const parts = [];\n for (const segmentObj of Array.from(segmenter.segment(string))) {\n const segment = segmentObj.segment;\n if (parts.length && (/\\s/).test(parts[parts.length - 1]) && (/\\s/).test(segment)) {\n parts[parts.length - 1] += segment;\n }\n else {\n parts.push(segment);\n }\n }\n return parts;\n}\n// The functions below take a `segmenter` argument so that, when called from\n// diffWords when it is using a segmenter, they can use a notion of what\n// constitutes \"whitespace\" that is consistent with the segmenter.\n//\n// USUALLY this will be identical to the result of the non-segmenter-based\n// logic, but it differs in at least one case: when whitespace characters are\n// modified by diacritics. A word segmenter considers these diacritics to be\n// part of the whitespace, whereas our non-segmenter-based logic does not.\n//\n// Because the segmenter-based approach necessarily requires segmenting the\n// entire string, we offer a leadingAndTrailingWs function to allow getting the\n// whitespace prefix AND whitespace suffix with a single call to the segmenter,\n// for efficiency's sake.\nexport function trailingWs(string, segmenter) {\n if (segmenter) {\n return leadingAndTrailingWs(string, segmenter)[1];\n }\n // Yes, this looks overcomplicated and dumb - why not replace the whole function with\n // return string.match(/\\s*$/)[0]\n // you ask? Because:\n // 1. the trap described at https://markamery.com/blog/quadratic-time-regexes/ would mean doing\n // this would cause this function to take O(n²) time in the worst case (specifically when\n // there is a massive run of NON-TRAILING whitespace in `string`), and\n // 2. the fix proposed in the same blog post, of using a negative lookbehind, is incompatible\n // with old Safari versions that we'd like to not break if possible (see\n // https://github.com/kpdecker/jsdiff/pull/550)\n // It feels absurd to do this with an explicit loop instead of a regex, but I really can't see a\n // better way that doesn't result in broken behaviour.\n let i;\n for (i = string.length - 1; i >= 0; i--) {\n if (!string[i].match(/\\s/)) {\n break;\n }\n }\n return string.substring(i + 1);\n}\nexport function leadingWs(string, segmenter) {\n if (segmenter) {\n return leadingAndTrailingWs(string, segmenter)[0];\n }\n // Thankfully the annoying considerations described in trailingWs don't apply here:\n const match = string.match(/^\\s*/);\n return match ? match[0] : '';\n}\nexport function leadingAndTrailingWs(string, segmenter) {\n if (!segmenter) {\n return [leadingWs(string), trailingWs(string)];\n }\n if (segmenter.resolvedOptions().granularity != 'word') {\n throw new Error('The segmenter passed must have a granularity of \"word\"');\n }\n const segments = segment(string, segmenter);\n const firstSeg = segments[0];\n const lastSeg = segments[segments.length - 1];\n const head = (/\\s/).test(firstSeg) ? firstSeg : '';\n const tail = (/\\s/).test(lastSeg) ? lastSeg : '';\n return [head, tail];\n}\n","import Diff from './base.js';\nimport { longestCommonPrefix, longestCommonSuffix, replacePrefix, replaceSuffix, removePrefix, removeSuffix, maximumOverlap, leadingWs, trailingWs, leadingAndTrailingWs, segment } from '../util/string.js';\n// Based on https://en.wikipedia.org/wiki/Latin_script_in_Unicode\n//\n// Chars/ranges counted as \"word\" characters by this regex are as follows:\n//\n// + U+00AD Soft hyphen\n// + 00C0–00FF (letters with diacritics from the Latin-1 Supplement), except:\n// - U+00D7 × Multiplication sign\n// - U+00F7 ÷ Division sign\n// + Latin Extended-A, 0100–017F\n// + Latin Extended-B, 0180–024F\n// + IPA Extensions, 0250–02AF\n// + Spacing Modifier Letters, 02B0–02FF, except:\n// - U+02C7 ˇ ˇ Caron\n// - U+02D8 ˘ ˘ Breve\n// - U+02D9 ˙ ˙ Dot Above\n// - U+02DA ˚ ˚ Ring Above\n// - U+02DB ˛ ˛ Ogonek\n// - U+02DC ˜ ˜ Small Tilde\n// - U+02DD ˝ ˝ Double Acute Accent\n// + Latin Extended Additional, 1E00–1EFF\nconst extendedWordChars = 'a-zA-Z0-9_\\\\u{AD}\\\\u{C0}-\\\\u{D6}\\\\u{D8}-\\\\u{F6}\\\\u{F8}-\\\\u{2C6}\\\\u{2C8}-\\\\u{2D7}\\\\u{2DE}-\\\\u{2FF}\\\\u{1E00}-\\\\u{1EFF}';\n// Each token is one of the following:\n// - A punctuation mark plus the surrounding whitespace\n// - A word plus the surrounding whitespace\n// - Pure whitespace (but only in the special case where the entire text\n// is just whitespace)\n//\n// We have to include surrounding whitespace in the tokens because the two\n// alternative approaches produce horribly broken results:\n// * If we just discard the whitespace, we can't fully reproduce the original\n// text from the sequence of tokens and any attempt to render the diff will\n// get the whitespace wrong.\n// * If we have separate tokens for whitespace, then in a typical text every\n// second token will be a single space character. But this often results in\n// the optimal diff between two texts being a perverse one that preserves\n// the spaces between words but deletes and reinserts actual common words.\n// See https://github.com/kpdecker/jsdiff/issues/160#issuecomment-1866099640\n// for an example.\n//\n// Keeping the surrounding whitespace of course has implications for .equals\n// and .join, not just .tokenize.\n// This regex does NOT fully implement the tokenization rules described above.\n// Instead, it gives runs of whitespace their own \"token\". The tokenize method\n// then handles stitching whitespace tokens onto adjacent word or punctuation\n// tokens.\nconst tokenizeIncludingWhitespace = new RegExp(`[${extendedWordChars}]+|\\\\s+|[^${extendedWordChars}]`, 'ug');\nclass WordDiff extends Diff {\n equals(left, right, options) {\n if (options.ignoreCase) {\n left = left.toLowerCase();\n right = right.toLowerCase();\n }\n return left.trim() === right.trim();\n }\n tokenize(value, options = {}) {\n let parts;\n if (options.intlSegmenter) {\n const segmenter = options.intlSegmenter;\n if (segmenter.resolvedOptions().granularity != 'word') {\n throw new Error('The segmenter passed must have a granularity of \"word\"');\n }\n // We want `parts` to be an array whose elements alternate between being\n // pure whitespace and being pure non-whitespace. This is ALMOST what the\n // segments returned by a word-based Intl.Segmenter already look like,\n // but not quite - see explanation in the docs of our custom segment()\n // function.\n parts = segment(value, segmenter);\n }\n else {\n parts = value.match(tokenizeIncludingWhitespace) || [];\n }\n const tokens = [];\n let prevPart = null;\n parts.forEach(part => {\n if ((/\\s/).test(part)) {\n if (prevPart == null) {\n tokens.push(part);\n }\n else {\n tokens.push(tokens.pop() + part);\n }\n }\n else if (prevPart != null && (/\\s/).test(prevPart)) {\n if (tokens[tokens.length - 1] == prevPart) {\n tokens.push(tokens.pop() + part);\n }\n else {\n tokens.push(prevPart + part);\n }\n }\n else {\n tokens.push(part);\n }\n prevPart = part;\n });\n return tokens;\n }\n join(tokens) {\n // Tokens being joined here will always have appeared consecutively in the\n // same text, so we can simply strip off the leading whitespace from all the\n // tokens except the first (and except any whitespace-only tokens - but such\n // a token will always be the first and only token anyway) and then join them\n // and the whitespace around words and punctuation will end up correct.\n return tokens.map((token, i) => {\n if (i == 0) {\n return token;\n }\n else {\n return token.replace((/^\\s+/), '');\n }\n }).join('');\n }\n postProcess(changes, options) {\n if (!changes || options.oneChangePerToken) {\n return changes;\n }\n let lastKeep = null;\n // Change objects representing any insertion or deletion since the last\n // \"keep\" change object. There can be at most one of each.\n let insertion = null;\n let deletion = null;\n changes.forEach(change => {\n if (change.added) {\n insertion = change;\n }\n else if (change.removed) {\n deletion = change;\n }\n else {\n if (insertion || deletion) { // May be false at start of text\n dedupeWhitespaceInChangeObjects(lastKeep, deletion, insertion, change, options.intlSegmenter);\n }\n lastKeep = change;\n insertion = null;\n deletion = null;\n }\n });\n if (insertion || deletion) {\n dedupeWhitespaceInChangeObjects(lastKeep, deletion, insertion, null, options.intlSegmenter);\n }\n return changes;\n }\n}\nexport const wordDiff = new WordDiff();\nexport function diffWords(oldStr, newStr, options) {\n // This option has never been documented and never will be (it's clearer to\n // just call `diffWordsWithSpace` directly if you need that behavior), but\n // has existed in jsdiff for a long time, so we retain support for it here\n // for the sake of backwards compatibility.\n if ((options === null || options === void 0 ? void 0 : options.ignoreWhitespace) != null && !options.ignoreWhitespace) {\n return diffWordsWithSpace(oldStr, newStr, options);\n }\n return wordDiff.diff(oldStr, newStr, options);\n}\nfunction dedupeWhitespaceInChangeObjects(startKeep, deletion, insertion, endKeep, segmenter) {\n // Before returning, we tidy up the leading and trailing whitespace of the\n // change objects to eliminate cases where trailing whitespace in one object\n // is repeated as leading whitespace in the next.\n // Below are examples of the outcomes we want here to explain the code.\n // I=insert, K=keep, D=delete\n // 1. diffing 'foo bar baz' vs 'foo baz'\n // Prior to cleanup, we have K:'foo ' D:' bar ' K:' baz'\n // After cleanup, we want: K:'foo ' D:'bar ' K:'baz'\n //\n // 2. Diffing 'foo bar baz' vs 'foo qux baz'\n // Prior to cleanup, we have K:'foo ' D:' bar ' I:' qux ' K:' baz'\n // After cleanup, we want K:'foo ' D:'bar' I:'qux' K:' baz'\n //\n // 3. Diffing 'foo\\nbar baz' vs 'foo baz'\n // Prior to cleanup, we have K:'foo ' D:'\\nbar ' K:' baz'\n // After cleanup, we want K'foo' D:'\\nbar' K:' baz'\n //\n // 4. Diffing 'foo baz' vs 'foo\\nbar baz'\n // Prior to cleanup, we have K:'foo\\n' I:'\\nbar ' K:' baz'\n // After cleanup, we ideally want K'foo' I:'\\nbar' K:' baz'\n // but don't actually manage this currently (the pre-cleanup change\n // objects don't contain enough information to make it possible).\n //\n // 5. Diffing 'foo bar baz' vs 'foo baz'\n // Prior to cleanup, we have K:'foo ' D:' bar ' K:' baz'\n // After cleanup, we want K:'foo ' D:' bar ' K:'baz'\n //\n // Our handling is unavoidably imperfect in the case where there's a single\n // indel between keeps and the whitespace has changed. For instance, consider\n // diffing 'foo\\tbar\\nbaz' vs 'foo baz'. Unless we create an extra change\n // object to represent the insertion of the space character (which isn't even\n // a token), we have no way to avoid losing information about the texts'\n // original whitespace in the result we return. Still, we do our best to\n // output something that will look sensible if we e.g. print it with\n // insertions in green and deletions in red.\n // Between two \"keep\" change objects (or before the first or after the last\n // change object), we can have either:\n // * A \"delete\" followed by an \"insert\"\n // * Just an \"insert\"\n // * Just a \"delete\"\n // We handle the three cases separately.\n if (deletion && insertion) {\n const [oldWsPrefix, oldWsSuffix] = leadingAndTrailingWs(deletion.value, segmenter);\n const [newWsPrefix, newWsSuffix] = leadingAndTrailingWs(insertion.value, segmenter);\n if (startKeep) {\n const commonWsPrefix = longestCommonPrefix(oldWsPrefix, newWsPrefix);\n startKeep.value = replaceSuffix(startKeep.value, newWsPrefix, commonWsPrefix);\n deletion.value = removePrefix(deletion.value, commonWsPrefix);\n insertion.value = removePrefix(insertion.value, commonWsPrefix);\n }\n if (endKeep) {\n const commonWsSuffix = longestCommonSuffix(oldWsSuffix, newWsSuffix);\n endKeep.value = replacePrefix(endKeep.value, newWsSuffix, commonWsSuffix);\n deletion.value = removeSuffix(deletion.value, commonWsSuffix);\n insertion.value = removeSuffix(insertion.value, commonWsSuffix);\n }\n }\n else if (insertion) {\n // The whitespaces all reflect what was in the new text rather than\n // the old, so we essentially have no information about whitespace\n // insertion or deletion. We just want to dedupe the whitespace.\n // We do that by having each change object keep its trailing\n // whitespace and deleting duplicate leading whitespace where\n // present.\n if (startKeep) {\n const ws = leadingWs(insertion.value, segmenter);\n insertion.value = insertion.value.substring(ws.length);\n }\n if (endKeep) {\n const ws = leadingWs(endKeep.value, segmenter);\n endKeep.value = endKeep.value.substring(ws.length);\n }\n // otherwise we've got a deletion and no insertion\n }\n else if (startKeep && endKeep) {\n const newWsFull = leadingWs(endKeep.value, segmenter), [delWsStart, delWsEnd] = leadingAndTrailingWs(deletion.value, segmenter);\n // Any whitespace that comes straight after startKeep in both the old and\n // new texts, assign to startKeep and remove from the deletion.\n const newWsStart = longestCommonPrefix(newWsFull, delWsStart);\n deletion.value = removePrefix(deletion.value, newWsStart);\n // Any whitespace that comes straight before endKeep in both the old and\n // new texts, and hasn't already been assigned to startKeep, assign to\n // endKeep and remove from the deletion.\n const newWsEnd = longestCommonSuffix(removePrefix(newWsFull, newWsStart), delWsEnd);\n deletion.value = removeSuffix(deletion.value, newWsEnd);\n endKeep.value = replacePrefix(endKeep.value, newWsFull, newWsEnd);\n // If there's any whitespace from the new text that HASN'T already been\n // assigned, assign it to the start:\n startKeep.value = replaceSuffix(startKeep.value, newWsFull, newWsFull.slice(0, newWsFull.length - newWsEnd.length));\n }\n else if (endKeep) {\n // We are at the start of the text. Preserve all the whitespace on\n // endKeep, and just remove whitespace from the end of deletion to the\n // extent that it overlaps with the start of endKeep.\n const endKeepWsPrefix = leadingWs(endKeep.value, segmenter);\n const deletionWsSuffix = trailingWs(deletion.value, segmenter);\n const overlap = maximumOverlap(deletionWsSuffix, endKeepWsPrefix);\n deletion.value = removeSuffix(deletion.value, overlap);\n }\n else if (startKeep) {\n // We are at the END of the text. Preserve all the whitespace on\n // startKeep, and just remove whitespace from the start of deletion to\n // the extent that it overlaps with the end of startKeep.\n const startKeepWsSuffix = trailingWs(startKeep.value, segmenter);\n const deletionWsPrefix = leadingWs(deletion.value, segmenter);\n const overlap = maximumOverlap(startKeepWsSuffix, deletionWsPrefix);\n deletion.value = removePrefix(deletion.value, overlap);\n }\n}\nclass WordsWithSpaceDiff extends Diff {\n tokenize(value) {\n // Slightly different to the tokenizeIncludingWhitespace regex used above in\n // that this one treats each individual newline as a distinct token, rather\n // than merging them into other surrounding whitespace. This was requested\n // in https://github.com/kpdecker/jsdiff/issues/180 &\n // https://github.com/kpdecker/jsdiff/issues/211\n const regex = new RegExp(`(\\\\r?\\\\n)|[${extendedWordChars}]+|[^\\\\S\\\\n\\\\r]+|[^${extendedWordChars}]`, 'ug');\n return value.match(regex) || [];\n }\n}\nexport const wordsWithSpaceDiff = new WordsWithSpaceDiff();\nexport function diffWordsWithSpace(oldStr, newStr, options) {\n return wordsWithSpaceDiff.diff(oldStr, newStr, options);\n}\n","import Diff from './base.js';\nimport { generateOptions } from '../util/params.js';\nclass LineDiff extends Diff {\n constructor() {\n super(...arguments);\n this.tokenize = tokenize;\n }\n equals(left, right, options) {\n // If we're ignoring whitespace, we need to normalise lines by stripping\n // whitespace before checking equality. (This has an annoying interaction\n // with newlineIsToken that requires special handling: if newlines get their\n // own token, then we DON'T want to trim the *newline* tokens down to empty\n // strings, since this would cause us to treat whitespace-only line content\n // as equal to a separator between lines, which would be weird and\n // inconsistent with the documented behavior of the options.)\n if (options.ignoreWhitespace) {\n if (!options.newlineIsToken || !left.includes('\\n')) {\n left = left.trim();\n }\n if (!options.newlineIsToken || !right.includes('\\n')) {\n right = right.trim();\n }\n }\n else if (options.ignoreNewlineAtEof && !options.newlineIsToken) {\n if (left.endsWith('\\n')) {\n left = left.slice(0, -1);\n }\n if (right.endsWith('\\n')) {\n right = right.slice(0, -1);\n }\n }\n return super.equals(left, right, options);\n }\n}\nexport const lineDiff = new LineDiff();\nexport function diffLines(oldStr, newStr, options) {\n return lineDiff.diff(oldStr, newStr, options);\n}\nexport function diffTrimmedLines(oldStr, newStr, options) {\n options = generateOptions(options, { ignoreWhitespace: true });\n return lineDiff.diff(oldStr, newStr, options);\n}\n// Exported standalone so it can be used from jsonDiff too.\nexport function tokenize(value, options) {\n if (options.stripTrailingCr) {\n // remove one \\r before \\n to match GNU diff's --strip-trailing-cr behavior\n value = value.replace(/\\r\\n/g, '\\n');\n }\n const retLines = [], linesAndNewlines = value.split(/(\\n|\\r\\n)/);\n // Ignore the final empty token that occurs if the string ends with a new line\n if (!linesAndNewlines[linesAndNewlines.length - 1]) {\n linesAndNewlines.pop();\n }\n // Merge the content and line separators into single tokens\n for (let i = 0; i < linesAndNewlines.length; i++) {\n const line = linesAndNewlines[i];\n if (i % 2 && !options.newlineIsToken) {\n retLines[retLines.length - 1] += line;\n }\n else {\n retLines.push(line);\n }\n }\n return retLines;\n}\n","import Diff from './base.js';\nfunction isSentenceEndPunct(char) {\n return char == '.' || char == '!' || char == '?';\n}\nclass SentenceDiff extends Diff {\n tokenize(value) {\n var _a;\n // If in future we drop support for environments that don't support lookbehinds, we can replace\n // this entire function with:\n // return value.split(/(?<=[.!?])(\\s+|$)/);\n // but until then, for similar reasons to the trailingWs function in string.ts, we are forced\n // to do this verbosely \"by hand\" instead of using a regex.\n const result = [];\n let tokenStartI = 0;\n for (let i = 0; i < value.length; i++) {\n if (i == value.length - 1) {\n result.push(value.slice(tokenStartI));\n break;\n }\n if (isSentenceEndPunct(value[i]) && value[i + 1].match(/\\s/)) {\n // We've hit a sentence break - i.e. a punctuation mark followed by whitespace.\n // We now want to push TWO tokens to the result:\n // 1. the sentence\n result.push(value.slice(tokenStartI, i + 1));\n // 2. the whitespace\n i = tokenStartI = i + 1;\n while ((_a = value[i + 1]) === null || _a === void 0 ? void 0 : _a.match(/\\s/)) {\n i++;\n }\n result.push(value.slice(tokenStartI, i + 1));\n // Then the next token (a sentence) starts on the character after the whitespace.\n // (It's okay if this is off the end of the string - then the outer loop will terminate\n // here anyway.)\n tokenStartI = i + 1;\n }\n }\n return result;\n }\n}\nexport const sentenceDiff = new SentenceDiff();\nexport function diffSentences(oldStr, newStr, options) {\n return sentenceDiff.diff(oldStr, newStr, options);\n}\n","import Diff from './base.js';\nclass CssDiff extends Diff {\n tokenize(value) {\n return value.split(/([{}:;,]|\\s+)/);\n }\n}\nexport const cssDiff = new CssDiff();\nexport function diffCss(oldStr, newStr, options) {\n return cssDiff.diff(oldStr, newStr, options);\n}\n","import Diff from './base.js';\nimport { tokenize } from './line.js';\nclass JsonDiff extends Diff {\n constructor() {\n super(...arguments);\n this.tokenize = tokenize;\n }\n get useLongestToken() {\n // Discriminate between two lines of pretty-printed, serialized JSON where one of them has a\n // dangling comma and the other doesn't. Turns out including the dangling comma yields the nicest output:\n return true;\n }\n castInput(value, options) {\n const { undefinedReplacement, stringifyReplacer = (k, v) => typeof v === 'undefined' ? undefinedReplacement : v } = options;\n return typeof value === 'string' ? value : JSON.stringify(canonicalize(value, null, null, stringifyReplacer), null, ' ');\n }\n equals(left, right, options) {\n return super.equals(left.replace(/,([\\r\\n])/g, '$1'), right.replace(/,([\\r\\n])/g, '$1'), options);\n }\n}\nexport const jsonDiff = new JsonDiff();\nexport function diffJson(oldStr, newStr, options) {\n return jsonDiff.diff(oldStr, newStr, options);\n}\n// This function handles the presence of circular references by bailing out when encountering an\n// object that is already on the \"stack\" of items being processed. Accepts an optional replacer\nexport function canonicalize(obj, stack, replacementStack, replacer, key) {\n stack = stack || [];\n replacementStack = replacementStack || [];\n if (replacer) {\n obj = replacer(key === undefined ? '' : key, obj);\n }\n let i;\n for (i = 0; i < stack.length; i += 1) {\n if (stack[i] === obj) {\n return replacementStack[i];\n }\n }\n let canonicalizedObj;\n if ('[object Array]' === Object.prototype.toString.call(obj)) {\n stack.push(obj);\n canonicalizedObj = new Array(obj.length);\n replacementStack.push(canonicalizedObj);\n for (i = 0; i < obj.length; i += 1) {\n canonicalizedObj[i] = canonicalize(obj[i], stack, replacementStack, replacer, String(i));\n }\n stack.pop();\n replacementStack.pop();\n return canonicalizedObj;\n }\n if (obj && obj.toJSON) {\n obj = obj.toJSON();\n }\n if (typeof obj === 'object' && obj !== null) {\n stack.push(obj);\n canonicalizedObj = {};\n replacementStack.push(canonicalizedObj);\n const sortedKeys = [];\n let key;\n for (key in obj) {\n /* istanbul ignore else */\n if (Object.prototype.hasOwnProperty.call(obj, key)) {\n sortedKeys.push(key);\n }\n }\n sortedKeys.sort();\n for (i = 0; i < sortedKeys.length; i += 1) {\n key = sortedKeys[i];\n canonicalizedObj[key] = canonicalize(obj[key], stack, replacementStack, replacer, key);\n }\n stack.pop();\n replacementStack.pop();\n }\n else {\n canonicalizedObj = obj;\n }\n return canonicalizedObj;\n}\n","import Diff from './base.js';\nclass ArrayDiff extends Diff {\n tokenize(value) {\n return value.slice();\n }\n join(value) {\n return value;\n }\n removeEmpty(value) {\n return value;\n }\n}\nexport const arrayDiff = new ArrayDiff();\nexport function diffArrays(oldArr, newArr, options) {\n return arrayDiff.diff(oldArr, newArr, options);\n}\n","import { diffChars } from 'diff';\n\nexport default class UndoRedoManager {\n constructor(editor) {\n this.editor = editor;\n this.textarea = editor.usertextarea;\n this.undoStack = [];\n this.redoStack = [];\n \n // Internal tracking\n this.lastValue = this.textarea.value;\n this.lastSelection = {\n selectionStart: this.textarea.selectionStart,\n selectionEnd: this.textarea.selectionEnd\n };\n\n // Settings\n this.debounceDelay = 1000;\n this.maxStackSize = 100;\n this._debounceTimer = null;\n\n this._bindEvents();\n }\n\n _bindEvents() {\n this.textarea.addEventListener('keydown', (e) => this._onKeyDown(e));\n \n // Listen for selection changes to \"pre-save\" state before an overwrite happens\n this.textarea.addEventListener('select', () => this._updateLastSelection());\n this.textarea.addEventListener('mousedown', () => {\n // Check selection after a short delay to let the click finish\n setTimeout(() => this._updateLastSelection(), 0);\n });\n\n this.textarea.addEventListener('beforeinput', (e) => {\n if (e.inputType === 'historyUndo') {\n e.preventDefault();\n this.undo();\n } else if (e.inputType === 'historyRedo') {\n e.preventDefault();\n this.redo();\n }\n });\n\n this.textarea.addEventListener('input', (e) => this._onInput(e));\n this.textarea.addEventListener('paste', () => this._saveState());\n this.textarea.addEventListener('blur', () => this._saveState());\n }\n\n _updateLastSelection() {\n // We only care about updating this if the value hasn't changed yet.\n // This marks the \"starting point\" for the next undo step.\n this.lastSelection = {\n selectionStart: this.textarea.selectionStart,\n selectionEnd: this.textarea.selectionEnd\n };\n }\n\n _onKeyDown(e) {\n const modifier = e.metaKey || e.ctrlKey;\n const isZ = e.key.toLowerCase() === 'z';\n const isY = e.key.toLowerCase() === 'y';\n const isShift = e.shiftKey;\n\n // 1. CRITICAL: Save state before selection is overwritten or deleted\n const hasSelection = this.textarea.selectionStart !== this.textarea.selectionEnd;\n const isDeletiveKey = e.key === 'Backspace' || e.key === 'Delete' || e.key === 'Enter';\n\n if (hasSelection && (e.key.length === 1 || isDeletiveKey)) {\n this._saveState();\n }\n\n // 2. Save state on structural keys (Enter, Delete, etc.) or generic Modifiers\n if (modifier || isDeletiveKey) {\n this._saveState();\n }\n\n // 3. UNDO: (Cmd+Z or Ctrl+Z)\n if (modifier && isZ && !isShift) {\n e.preventDefault();\n this.undo();\n } \n \n // 4. REDO: (Cmd+Shift+Z, Ctrl+Shift+Z, or Ctrl+Y)\n else if (modifier && ( (isShift && isZ) || (!e.metaKey && isY) )) {\n e.preventDefault();\n this.redo();\n }\n }\n\n _onInput(e) {\n clearTimeout(this._debounceTimer);\n const value = this.textarea.value;\n const lastChar = value[this.textarea.selectionStart - 1];\n \n if (lastChar && /[\\s.,;:!?()\\[\\]{}'\"`~]/.test(lastChar)) {\n this._saveState();\n } else {\n this._debounceTimer = setTimeout(() => this._saveState(), this.debounceDelay);\n }\n }\n\n _saveState() {\n const newValue = this.textarea.value || '';\n \n // 1. If nothing changed, exit immediately to save CPU\n if (newValue === this.lastValue) return;\n\n // 2. Clear any pending debounced timers so we don't save twice\n clearTimeout(this._debounceTimer);\n\n const diff = diffChars(this.lastValue, newValue);\n \n this.undoStack.push({\n diff,\n selection: { ...this.lastSelection }\n });\n\n // --- Performance Optimization: Max Depth ---\n // If the stack exceeds the limit, remove the oldest entry (bottom of stack)\n if (this.undoStack.length > this.maxStackSize) {\n this.undoStack.shift(); \n }\n\n this.lastValue = newValue;\n this._updateLastSelection();\n this.redoStack = []; // Standard: typing new text clears redo history\n }\n\n undo() {\n if (this.undoStack.length === 0) return;\n\n const lastStep = this.undoStack.pop();\n const prevValue = this._revertDiff(this.lastValue, lastStep.diff);\n\n this.redoStack.push({\n diff: lastStep.diff,\n selection: { \n selectionStart: this.textarea.selectionStart, \n selectionEnd: this.textarea.selectionEnd \n }\n });\n\n this._restoreState(prevValue, lastStep.selection);\n }\n\n redo() {\n if (this.redoStack.length === 0) return;\n\n const redoStep = this.redoStack.pop();\n const newValue = this._applyDiff(this.lastValue, redoStep.diff);\n\n this.undoStack.push({\n diff: redoStep.diff,\n selection: { ...this.lastSelection }\n });\n\n this._restoreState(newValue, redoStep.selection);\n }\n\n _applyDiff(oldValue, diff) {\n let newValue = '';\n diff.forEach(part => { if (!part.removed) newValue += part.value; });\n return newValue;\n }\n\n _revertDiff(currentValue, diff) {\n let oldValue = '';\n diff.forEach(part => { if (!part.added) oldValue += part.value; });\n return oldValue;\n }\n\n _restoreState(value, selection) {\n this.textarea.value = value;\n this.textarea.setSelectionRange(selection.selectionStart, selection.selectionEnd);\n this.lastValue = value;\n this.lastSelection = { ...selection };\n \n if (this.editor.render) this.editor.render();\n this.textarea.focus();\n }\n}","export default class IndentManager {\n constructor(editor, renderCallback) {\n this.editor = editor;\n this.textarea = editor.usertextarea;\n this.renderCallback = renderCallback;\n this.pairs = {\n '{': '}',\n '[': ']',\n '(': ')',\n '<': '>',\n '\"': '\"',\n \"'\": \"'\"\n };\n this.init();\n }\n\n init() {\n this.textarea.addEventListener('keydown', (e) => {\n switch (e.key) {\n case 'Tab':\n e.preventDefault();\n e.shiftKey ? this.outdent() : this.indent();\n this._triggerUpdate();\n break;\n case 'Enter':\n this.autoIndent(e);\n break;\n case 'Backspace':\n this.handleBackspace(e);\n break;\n default:\n if (this.pairs[e.key]) this.handlePairs(e);\n }\n });\n }\n\n handlePairs(e) {\n const { textarea } = this;\n const { selectionStart, selectionEnd, value } = textarea;\n const char = e.key;\n\n // 1. Overtyping Logic\n // If the cursor is right before the closing character and the user types it\n if (selectionStart === selectionEnd && value[selectionStart] === char) {\n const isClosingChar = Object.values(this.pairs).includes(char);\n if (isClosingChar) {\n e.preventDefault();\n const newPos = selectionStart + 1;\n textarea.setSelectionRange(newPos, newPos);\n return; // Just move the cursor, don't trigger an update\n }\n }\n\n const open = char;\n const close = this.pairs[open];\n if (!close) return; // Not a paired character\n\n // 2. Selection Wrapping\n if (selectionStart !== selectionEnd) {\n e.preventDefault();\n const selectedText = value.substring(selectionStart, selectionEnd);\n const newValue = value.substring(0, selectionStart) + open + selectedText + close + value.substring(selectionEnd);\n \n textarea.value = newValue;\n textarea.setSelectionRange(selectionStart + 1, selectionEnd + 1);\n this._triggerUpdate();\n } \n \n // 3. Standard Pair Insertion\n else {\n e.preventDefault();\n const before = value.substring(0, selectionStart);\n const after = value.substring(selectionEnd);\n \n textarea.value = before + open + close + after;\n textarea.setSelectionRange(selectionStart + 1, selectionStart + 1);\n this._triggerUpdate();\n }\n }\n\n // Add this to your init() listener for 'keydown'\n handleBackspace(e) {\n const { textarea } = this;\n const { selectionStart, selectionEnd, value } = textarea;\n\n if (selectionStart === selectionEnd && selectionStart > 0) {\n const charBefore = value[selectionStart - 1];\n const charAfter = value[selectionStart];\n\n // If user deletes '(' when text is '()', delete the ')' too\n if (this.pairs[charBefore] === charAfter) {\n e.preventDefault();\n const before = value.substring(0, selectionStart - 1);\n const after = value.substring(selectionStart + 1);\n \n textarea.value = before + after;\n textarea.setSelectionRange(selectionStart - 1, selectionStart - 1);\n this._triggerUpdate();\n }\n }\n }\n\n autoIndent(e) {\n const { textarea } = this;\n const { selectionStart, value } = textarea;\n\n const lastNewline = value.lastIndexOf('\\n', selectionStart - 1);\n const currentLine = value.substring(lastNewline + 1, selectionStart);\n\n // Let ListManager handle list continuation\n if (/^(\\s*)([\\-\\*] |\\d+\\. )/.test(currentLine)) return;\n\n const indent = (currentLine.match(/^[ \\t]*/) || [''])[0];\n\n // EXTRA: If user hits Enter between { and }, add an extra indent level\n const charBefore = value[selectionStart - 1];\n const charAfter = value[selectionStart];\n \n if (charBefore === '{' && charAfter === '}') {\n e.preventDefault();\n const tab = '\\t'; // or ' '\n const insertion = '\\n' + indent + tab + '\\n' + indent;\n \n textarea.value = value.substring(0, selectionStart) + insertion + value.substring(selectionStart);\n \n // Put cursor on the middle (indented) line\n const newPos = selectionStart + indent.length + tab.length + 1;\n textarea.setSelectionRange(newPos, newPos);\n this._triggerUpdate();\n return;\n }\n\n if (indent.length > 0) {\n e.preventDefault();\n const insertion = '\\n' + indent;\n textarea.value = value.substring(0, selectionStart) + insertion + value.substring(textarea.selectionEnd);\n const newPos = selectionStart + insertion.length;\n textarea.setSelectionRange(newPos, newPos);\n this._triggerUpdate();\n }\n }\n\n _triggerUpdate() {\n if (typeof this.renderCallback === 'function') this.renderCallback();\n this.textarea.dispatchEvent(new Event('input', { bubbles: true }));\n }\n\n // Inside IndentManager class\n indent() {\n const { textarea } = this;\n const { selectionStart, selectionEnd, value } = textarea;\n\n const startPos = value.lastIndexOf('\\n', selectionStart - 1) + 1;\n let endPos = value.indexOf('\\n', selectionEnd);\n if (endPos === -1) endPos = value.length;\n\n const targetText = value.substring(startPos, endPos);\n const lines = targetText.split('\\n');\n const indentedText = lines.map(line => '\\t' + line).join('\\n');\n\n this._applyChange(\n value.substring(0, startPos) + indentedText + value.substring(endPos),\n selectionStart + 1,\n selectionEnd + lines.length\n );\n }\n\n outdent() {\n const { textarea } = this;\n const { selectionStart, selectionEnd, value } = textarea;\n\n // 1. Find the start and end of the affected lines\n const startPos = value.lastIndexOf('\\n', selectionStart - 1) + 1;\n let endPos = value.indexOf('\\n', selectionEnd);\n if (endPos === -1) endPos = value.length;\n\n const targetText = value.substring(startPos, endPos);\n const lines = targetText.split('\\n');\n \n let removedFromFirst = 0;\n let totalRemoved = 0;\n\n // 2. Process each line\n const unindentedText = lines.map((line, index) => {\n if (line.startsWith('\\t')) {\n if (index === 0) removedFromFirst = 1;\n totalRemoved++;\n return line.substring(1);\n } else if (line.startsWith(' ')) { // Optional: handle 4-space indent\n if (index === 0) removedFromFirst = 4;\n totalRemoved += 4;\n return line.substring(4);\n }\n return line;\n }).join('\\n');\n\n // 3. Apply the change to the DOM\n this._applyChange(\n value.substring(0, startPos) + unindentedText + value.substring(endPos),\n Math.max(startPos, selectionStart - removedFromFirst),\n Math.max(startPos, selectionEnd - totalRemoved)\n );\n }\n\n _applyChange(newValue, newStart, newEnd) {\n this.textarea.value = newValue;\n this.textarea.setSelectionRange(newStart, newEnd);\n }\n}","class ListManager {\n constructor(editor) {\n this.editor = editor;\n this.textarea = editor.usertextarea;\n\n // Attach the listener directly here\n this.textarea.addEventListener('keydown', (e) => {\n if (e.key === 'Enter') {\n this.handleEnter(e);\n }\n });\n }\n\n handleEnter(event) {\n const { selectionStart, value } = this.textarea;\n\n const lastNewline = value.lastIndexOf('\\n', selectionStart - 1);\n const lineStart = lastNewline + 1;\n const currentLine = value.substring(lineStart, selectionStart);\n\n // Patterns\n const olMatch = currentLine.match(/^(\\s*)(\\d+)\\.\\s/);\n const taskMatch = currentLine.match(/^(\\s*)([\\-\\*] )\\[[\\s xX]\\] /);\n const ulMatch = currentLine.match(/^(\\s*)([\\-\\*] )\\s*/);\n const isEmptyList = currentLine.match(/^(\\s*)(\\d+\\.\\s|[\\-\\*] \\[[\\s xX]\\] |[\\-\\*]\\s)$/);\n\n // Exit list if line is empty\n if (isEmptyList) {\n event.preventDefault();\n const before = value.substring(0, lineStart);\n const after = value.substring(selectionStart);\n this.textarea.value = before + \"\\n\" + after;\n this.textarea.setSelectionRange(lineStart + 1, lineStart + 1);\n this.editor.render(); // Trigger editor refresh\n return;\n }\n\n let continuation = null;\n if (olMatch) {\n continuation = `${olMatch[1]}${parseInt(olMatch[2]) + 1}. `;\n } else if (taskMatch) {\n continuation = `${taskMatch[1]}${taskMatch[2]}[ ] `;\n } else if (ulMatch) {\n continuation = `${ulMatch[1]}${ulMatch[2]}`;\n }\n\n if (continuation) {\n event.preventDefault();\n const insert = `\\n${continuation}`;\n const before = value.substring(0, selectionStart);\n const after = value.substring(selectionStart);\n this.textarea.value = before + insert + after;\n const cursor = selectionStart + insert.length;\n this.textarea.setSelectionRange(cursor, cursor);\n this.editor.render();\n }\n }\n}\n\nexport default ListManager;","import '../styles/main.css';\nimport { marked } from 'marked';\nimport Toolbar from './toolbar/Toolbar.js';\nimport Preview from './Preview.js';\nimport Footer from './Footer.js';\nimport UndoRedoManager from '../utils/UndoRedoManager.js';\nimport IndentManager from '../utils/IndentManager.js';\nimport ListManager from '../utils/ListManager.js';\n\nmarked.setOptions({\n breaks: true\n});\n\nclass MarkdownEditor {\n constructor(selector, options = {}) {\n this.usertextarea = typeof selector === 'string' ? document.querySelector(selector) : selector;\n this.options = options;\n this.mode = options.mode || 'plain';\n this.preview = (this.options.toolbar) ? this.options.toolbar.includes('preview') : true;\n this.footerOptions = this._parseFooterOptions(options.footer);\n this.previewTimer = null;\n this.init();\n this.undoRedoManager = new UndoRedoManager(this);\n this.listManager = new ListManager(this);\n this.indentManager = new IndentManager(this);\n }\n\n _parseFooterOptions(footer) {\n if (footer === false) return null;\n const opts = footer ?? {};\n return {\n line: opts.line !== false,\n col: opts.col !== false,\n chars: opts.chars !== false,\n };\n }\n\n init() {\n this.createEditor();\n this.addToolbar();\n this.addFooter();\n }\n\n createEditor() {\n if (!this.isTextareaValid()) return;\n\n this.applyDefaultAttributes();\n this.buildEditorLayout();\n this.addInputListener();\n this.render();\n }\n\n isTextareaValid() {\n return this.usertextarea.tagName === 'TEXTAREA';\n }\n\n applyDefaultAttributes() {\n const hasLabel = (this.usertextarea.id && document.querySelector(`label[for=\"${this.usertextarea.id}\"]`))\n || this.usertextarea.getAttribute('aria-label')\n || this.usertextarea.getAttribute('aria-labelledby');\n if (!hasLabel) {\n this.usertextarea.setAttribute('aria-label', this.options.label || 'Markdown editor');\n }\n\n this.usertextarea.classList.add(\n \"textarea\",\n \"fj:focus:ring-0\",\n \"fj:focus:outline-0\",\n \"fj:border-0\",\n \"fj:border-base-soft\",\n \"fj:px-4\",\n \"fj:py-2\",\n \"fj:max-w-full\",\n \"fj:size-full\",\n \"fj:bg-transparent\",\n \"fj:outline-0\",\n \"fj:appearance-none\",\n \"fj:overflow-y-auto\",\n );\n if (!this.usertextarea.hasAttribute('placeholder')) {\n this.usertextarea.placeholder = this.options.placeholder || 'Write your markdown...';\n }\n }\n\n buildEditorLayout() {\n this.editorContainer = document.createElement('div');\n this.editorContainer.className = `\n markdown-editor-wrapper\n fj:me-surface\n fj:me-surface-outline\n fj:me-surface-rounded\n fj:overflow-hidden\n `;\n this.usertextarea.parentNode.insertBefore(this.editorContainer, this.usertextarea);\n\n this.markdownEditorDiv = document.createElement('div');\n this.markdownEditorDiv.className = `editor-layout fj:relative fj:grid fj:grid-cols-1`;\n this.editorContainer.appendChild(this.markdownEditorDiv);\n\n this.addTextareaWrapper();\n if (this.preview) this.addPreviewWrapper();\n }\n\n addTextareaWrapper() {\n const textareaContainer = document.createElement('div');\n textareaContainer.className = `\n textarea-wrapper\n not-prose\n fj:me-surface\n fj:h-full\n fj:grid\n `;\n\n if(this.mode == 'hybrid'){\n this.displayLayer = document.createElement('div');\n this.displayLayer.setAttribute('data-placeholder', this.usertextarea.placeholder);\n this.displayLayer.setAttribute(\"aria-hidden\", true);\n this.displayLayer.className = `\n display-layer\n fj:px-4\n fj:py-2\n fj:whitespace-pre-wrap fj:wrap-break-word \n fj:pointer-events-none \n fj:[grid-area:1/1/2/2]\n fj:size-full\n fj:m-0\n fj:box-border\n fj:z-0\n fj:overflow-y-auto\n fj:empty:after:content-[attr(data-placeholder)]\n fj:empty:after:absolute\n fj:empty:after:inset-0\n fj:empty:after:px-4\n fj:empty:after:py-2\n fj:empty:after:text-[CanvasText]\n fj:empty:after:opacity-50\n `;\n\n this.usertextarea.className += `\n fj:text-transparent \n fj:caret-primary\n fj:resize-none\n fj:outline-none\n fj:[grid-area:1/1/2/2]\n fj:m-0\n fj:box-border\n fj:relative\n fj:z-10 \n `;\n\n textareaContainer.appendChild(this.displayLayer);\n }\n\n textareaContainer.appendChild(this.usertextarea);\n this.markdownEditorDiv.appendChild(textareaContainer);\n }\n\n \n\n addPreviewWrapper() {\n const previewInstance = new Preview(this.markdownEditorDiv);\n this.previewContent = previewInstance.getPreviewContent();\n }\n\n addInputListener() {\n this.usertextarea.addEventListener('input', () => {\n this.renderHybrid(); // Fast: Only Regex\n this.debouncedPreview(); // Slow: Heavy Markdown Parse\n });\n\n this.usertextarea.addEventListener('scroll', () => {\n if (this.mode === 'hybrid') {\n // PIXEL PERFECT SYNC: Do not use ratios for the hybrid layer\n this.displayLayer.scrollTop = this.usertextarea.scrollTop;\n this.displayLayer.scrollLeft = this.usertextarea.scrollLeft;\n }\n\n if (this.preview && this.previewContent) {\n // RATIO SYNC: Use ratio only for the fully rendered preview\n const textarea = this.usertextarea;\n const ratio = textarea.scrollTop / (textarea.scrollHeight - textarea.clientHeight);\n this.previewContent.scrollTop = ratio * (this.previewContent.scrollHeight - this.previewContent.clientHeight);\n }\n });\n }\n\n debouncedPreview() {\n if (!this.preview) return;\n clearTimeout(this.previewTimer);\n this.previewTimer = setTimeout(() => {\n this.previewContent.innerHTML = marked(this.usertextarea.value);\n this.wirePreviewCheckboxes();\n }, 150); // 150ms delay feels instant but saves CPU\n }\n\n wirePreviewCheckboxes() {\n const checkboxes = this.previewContent.querySelectorAll('input[type=\"checkbox\"]');\n checkboxes.forEach((checkbox, index) => {\n checkbox.removeAttribute('disabled');\n checkbox.addEventListener('click', (e) => {\n e.preventDefault();\n const lines = this.usertextarea.value.split('\\n');\n let count = 0;\n for (let i = 0; i < lines.length; i++) {\n if (/^(\\s*)([-*] \\[[ xX]\\] )/.test(lines[i])) {\n if (count === index) {\n if (checkbox.checked) {\n lines[i] = lines[i].replace(/\\[ \\]/, '[x]');\n } else {\n lines[i] = lines[i].replace(/\\[[xX]\\]/, '[ ]');\n }\n break;\n }\n count++;\n }\n }\n this.usertextarea.value = lines.join('\\n');\n this.render();\n });\n });\n }\n\n addFooter() {\n if (!this.footerOptions) return;\n const { line, col, chars } = this.footerOptions;\n if (!line && !col && !chars) return;\n this.footer = new Footer(this.editorContainer, this.footerOptions);\n this.footer.update(this.usertextarea);\n\n const update = () => this.footer.update(this.usertextarea);\n this.usertextarea.addEventListener('input', update);\n this.usertextarea.addEventListener('click', update);\n this.usertextarea.addEventListener('keyup', update);\n this.usertextarea.addEventListener('focus', update);\n }\n\n addToolbar() {\n new Toolbar(\n this,\n this.options.toolbar ||\n [\n // History/System (Usually far left)\n 'undo', \n 'redo',\n \n // Block Structure\n 'heading', \n 'blockquote', \n \n // Lists & Indentation\n 'ul', \n 'ol', \n 'checklist', \n 'outdent', \n 'indent', \n \n // Inline Formatting\n 'bold',\n 'italic',\n 'strikethrough',\n 'code',\n\n // Block Formatting\n 'codeblock',\n 'hr',\n 'table',\n\n // Rich Media/Links\n 'link',\n 'image',\n \n // View/Preview (Usually far right)\n 'preview'\n ]\n );\n }\n\n insertText(text, selectionOffset = 0, trailingLength = 0) {\n const { selectionStart, selectionEnd } = this.usertextarea;\n const value = this.usertextarea.value;\n this.usertextarea.value = `${value.substring(0, selectionStart)}${text}${value.substring(selectionEnd)}`;\n this.usertextarea.focus();\n this.usertextarea.setSelectionRange(selectionStart + selectionOffset, selectionStart + text.length - trailingLength);\n\n // Scroll the textarea to the inserted text\n this.scrollToView();\n\n this.render();\n }\n\n scrollToView() {\n const textarea = this.usertextarea;\n const selectionStart = textarea.selectionStart;\n\n if (!this._lineHeight) {\n this._lineHeight = parseInt(window.getComputedStyle(textarea).lineHeight);\n }\n\n const lineHeight = this._lineHeight;\n const rowsInView = Math.floor(textarea.clientHeight / lineHeight);\n const currentLine = Math.floor(selectionStart / textarea.cols);\n textarea.scrollTop = (currentLine - Math.floor(rowsInView / 2)) * lineHeight;\n }\n \n\n renderHybrid() {\n if (this.mode !== 'hybrid') return;\n\n const rawValue = this.usertextarea.value;\n let highlighted = rawValue\n .replace(/&/g, '&')\n .replace(/</g, '<')\n .replace(/>/g, '>');\n\n // SYNTAX HIGHLIGHTING CHAIN\n highlighted = highlighted\n\n // code block\n .replace(/```(\\w+)?\\n([\\s\\S]*?)```/g, \n '<span class=\"fj:opacity-30\">```$1</span>\\n$2<span class=\"fj:opacity-30\">```</span>')\n\n // Inline Code (Single Backtick)\n .replace(/`([^`\\n]+)`/g,\n '<span class=\"fj:opacity-40\">`</span><span class=\"fj:text-accent\">$1</span><span class=\"fj:opacity-40\">`</span>')\n\n // Headers\n .replace(/^(#+ )(.*)$/gm, \n '<span class=\"fj:text-primary\"><span class=\"fj:opacity-40\">$1</span><span class=\"fj:font-bold fj:tracking-[-0.040em]\">$2</span></span>')\n \n // Bold \n .replace(/\\*\\*(.*?)\\*\\*/g, \n '<span class=\"fj:text-secondary\"><span class=\"fj:opacity-40\">**</span><span class=\"fj:font-bold fj:tracking-[-0.040em]\">$1</span><span class=\"fj:opacity-40\">**</span></span>')\n\n // Lists (UL, OL, Checklist)\n // Matches: \"- \", \"* \", \"1. \", \"[ ] \", \"[x] \"\n .replace(/^([\\s]*)([\\-\\*] |[\\d]+\\. |\\[[\\s xX]\\] )(.*)$/gm, \n '$1<span class=\"fj:text-primary fj:font-medium\">$2</span>$3')\n\n // Inline Italic (Supports both *italic* and _italic_)\n .replace(/(\\*|_)(.*?)\\1/g, \n '<span class=\"fj:text-accent\"><span class=\"fj:opacity-40\">$1</span><span class=\"fj:italic\">$2</span><span class=\"fj:opacity-40\">$1</span></span>')\n\n // Strikethrough\n // Double ~~text~~\n .replace(/~~(.*?)~~/g, \n '<span class=\"fj:line-through fj:opacity-70\"><span class=\"fj:opacity-40\">~~</span>$1<span class=\"fj:opacity-40\">~~</span></span>')\n \n // Single ~text~ (Optional, only if you want to support both)\n // We use a negative lookbehind/lookahead logic or simply run it after the double replace\n .replace(/(?<!~)(~)([^~]+)\\1(?!~)/g, \n '<span class=\"fj:line-through fj:opacity-70\"><span class=\"fj:opacity-40\">$1</span>$2<span class=\"fj:opacity-40\">$1</span></span>')\n \n // Links & Images\n // Matches  and [text](url)\n .replace(/(!?\\[)(.*?)(\\]\\()(.*?)(\\))/g, \n '<span class=\"fj:opacity-40\">$1</span><span class=\"fj:text-primary\">$2</span><span class=\"fj:opacity-40\">$3</span><span class=\"fj:underline fj:opacity-50\">$4</span><span class=\"fj:opacity-50\">$5</span>')\n\n // Ensure height sync when ending with newline\n if (rawValue.length > 0 && rawValue.endsWith('\\n')) {\n highlighted += ' '; \n }\n\n this.displayLayer.innerHTML = highlighted;\n }\n\n render() {\n this.renderHybrid();\n if (this.preview) {\n this.previewContent.innerHTML = marked(this.usertextarea.value);\n this.wirePreviewCheckboxes();\n }\n }\n}\n\nexport default MarkdownEditor;"],"x_google_ignoreList":[0,25,26,27,28,29,30,31,32,33],"mappings":"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"}
|