"use strict";const c=require("markedit-api"),u=require("@codemirror/view"),g=require("@codemirror/language"),f=91,m=93,F=33,D=10,I=124,N={defineNodes:["WikiLink","WikiLinkEmbed","WikiLinkMark","WikiLinkTarget","WikiLinkAlias"],parseInline:[{name:"WikiLink",before:"Link",parse:(e,t,n)=>{if(t!==f||e.char(n+1)!==f)return-1;const a=n>e.offset&&e.char(n-1)===F,i=a?n-1:n;let r=-1,o=n+2;for(;o0?(d.push(e.elt("WikiLinkTarget",n+2,r)),d.push(e.elt("WikiLinkMark",r,r+1)),d.push(e.elt("WikiLinkAlias",r+1,o))):d.push(e.elt("WikiLinkTarget",n+2,o)),d.push(e.elt("WikiLinkMark",o,s));const k=a?"WikiLinkEmbed":"WikiLink";return e.addElement(e.elt(k,i,s,d))}o++}return-1}}]},R=u.Decoration.mark({class:"cm-md-wikilink"}),S=u.Decoration.mark({class:"cm-md-wikilink-embed"}),v=u.Decoration.mark({class:"cm-md-wikilink-mark"}),y=u.Decoration.mark({class:"cm-md-wikilink-alias"}),P=u.ViewPlugin.fromClass(class{},{provide:()=>u.EditorView.decorations.of(e=>{const t=[];for(const{from:n,to:a}of e.visibleRanges)g.syntaxTree(e.state).iterate({from:n,to:a,enter:i=>{switch(i.name){case"WikiLink":t.push(R.range(i.from,i.to));break;case"WikiLinkEmbed":t.push(S.range(i.from,i.to));break;case"WikiLinkMark":t.push(v.range(i.from,i.to));break;case"WikiLinkAlias":t.push(y.range(i.from,i.to));break}}});return u.Decoration.set(t.sort((n,a)=>n.from-a.from))})}),_=u.EditorView.baseTheme({".cm-md-wikilink":{color:"var(--md-link-color, #2563eb)",textDecoration:"underline",textUnderlineOffset:"2px",cursor:"pointer"},".cm-md-wikilink-embed":{color:"var(--md-link-color, #2563eb)",backgroundColor:"rgba(37, 99, 235, 0.06)",borderRadius:"3px",padding:"0 2px"},".cm-md-wikilink-mark":{color:"var(--md-mark-color, #94a3b8)",opacity:.6},".cm-md-wikilink-alias":{fontStyle:"italic"}}),L=[".md",".markdown",".mdown",".txt"],x=new Set(["node_modules","dist","build","target"]),V=5e3,T=[".obsidian",".git",".markedit-vault"],$=u.EditorView.domEventHandlers({mousedown:(e,t)=>{if(!e.metaKey)return!1;const n=t.posAtCoords({x:e.clientX,y:e.clientY});if(n==null)return!1;let i=g.syntaxTree(t.state).resolveInner(n,1);for(;i&&i.name!=="WikiLink"&&i.name!=="WikiLinkEmbed";)i=i.parent;if(!i)return!1;const r=i.getChild("WikiLinkTarget");if(!r)return!1;const o=t.state.sliceDoc(r.from,r.to).trim();return o?(e.preventDefault(),W(o),!0):!1}});async function W(e){const t=e.split(/[#^]/)[0].trim();if(!t)return;const n=await c.MarkEdit.getFileInfo();if(!(n!=null&&n.filePath)){await c.MarkEdit.showAlert({title:"Cannot follow wikilink",message:"Save this file first so the link can be resolved relative to its folder."});return}const a=n.parentPath||C(n.filePath),i=h(a,t);for(const l of i)if(await c.MarkEdit.getFileInfo(l)){await c.MarkEdit.openFile(l);return}const r=await K(a);if(r&&t.includes("/")){for(const l of h(r,t))if(await c.MarkEdit.getFileInfo(l)){await c.MarkEdit.openFile(l);return}}let o=null;if(r&&(o=await H(r,O(t)),o)){await c.MarkEdit.openFile(o);return}await j(t,n.filePath,a,r,i)}function h(e,t){const n=/\.[a-zA-Z0-9]+$/.test(t),a=t.startsWith("/")?[t]:[M(e,t)];return n?a:a.flatMap(i=>L.map(r=>i+r))}function O(e){const t=e.includes("/")?e.slice(e.lastIndexOf("/")+1):e;return/\.[a-zA-Z0-9]+$/.test(t)?[t]:L.map(a=>t+a)}async function K(e){let t=e;for(let n=0;n<12;n++){const a=await c.MarkEdit.listFiles(t);if(a&&T.some(r=>a.includes(r)))return t;const i=C(t);if(!i||i===t)return null;t=i}return null}async function H(e,t){const n=new Set(t),a=[e];let i=V;for(;a.length>0&&i>0;){const r=a.pop(),o=await c.MarkEdit.listFiles(r);if(!o)continue;const l=[];for(const s of o){if(i--,i<=0)break;if(s.startsWith(".")||x.has(s))continue;const d=M(r,s);if(n.has(s))return d;if(q(s))continue;const k=await c.MarkEdit.getFileInfo(d);k!=null&&k.isDirectory&&l.push(d)}for(let s=l.length-1;s>=0;s--)a.push(l[s])}return null}function q(e){return/\.[a-zA-Z0-9]{1,8}$/.test(e)}async function j(e,t,n,a,i){const r=await c.MarkEdit.listFiles(n),o=r?r.length===0?"(empty)":r.slice(0,12).join(", ")+(r.length>12?`, … (+${r.length-12})`:""):"listFiles() returned undefined → sandbox denies folder access.";await c.MarkEdit.showAlert({title:`Couldn't resolve “${e}”`,message:`Current file: ${t} Vault root: ${a??`(none — no [${T.join(", ")}] found walking up)`} Same-folder tried: ${i.join(` `)} listFiles(parent): ${o} Create ${i[0]}?`,buttons:["Create","Cancel"]})===0&&await c.MarkEdit.createFile({path:i[0],string:`# ${e} `})&&await c.MarkEdit.openFile(i[0])}function C(e){const t=e.lastIndexOf("/");return t<0?"":e.slice(0,t)}function M(e,t){return e?e.endsWith("/")?e+t:e+"/"+t:t}const E=".markdown-body",w=/\[\[([^[\]|]+?)(?:\|([^[\]]+?))?\]\]/g,A="me-wikilink",B=new Set(["CODE","PRE","SCRIPT","STYLE","A"]);function z(){const e=document.querySelector(E);if(e){p(e);return}const t=new MutationObserver(()=>{const n=document.querySelector(E);n&&(t.disconnect(),p(n))});t.observe(document.body,{childList:!0,subtree:!1})}function p(e){X(e);const t=new MutationObserver(()=>{t.disconnect();try{b(e)}finally{t.observe(e,{childList:!0,subtree:!0,characterData:!0})}});b(e),t.observe(e,{childList:!0,subtree:!0,characterData:!0})}function b(e){const t=document.createTreeWalker(e,NodeFilter.SHOW_TEXT,{acceptNode:a=>{const i=a.nodeValue;if(!i||!i.includes("[["))return NodeFilter.FILTER_REJECT;let r=a.parentElement;for(;r;){if(B.has(r.tagName))return NodeFilter.FILTER_REJECT;r=r.parentElement}return NodeFilter.FILTER_ACCEPT}}),n=[];for(;t.nextNode();)n.push(t.currentNode);for(const a of n){const i=U(a.nodeValue??"");i&&a.replaceWith(i)}}function U(e){w.lastIndex=0;const t=document.createDocumentFragment();let n=0,a=!1;for(const i of e.matchAll(w)){a=!0;const r=i.index??0;r>n&&t.appendChild(document.createTextNode(e.slice(n,r)));const o=i[1].trim(),l=(i[2]??i[1]).trim(),s=document.createElement("a");s.className=A,s.dataset.wikilinkTarget=o,s.href="#",s.textContent=l,t.appendChild(s),n=r+i[0].length}return a?(n{const n=t.target,a=n==null?void 0:n.closest(`a.${A}`);if(!a)return;const i=a.dataset.wikilinkTarget;i&&(t.preventDefault(),t.stopPropagation(),W(i))})}c.MarkEdit.addMarkdownConfig(N);c.MarkEdit.addExtension([_,P,$]);z();