@pyscript/core 0.4.50 → 0.4.51
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/dist/{codemirror-CdY86QAP.js → codemirror-kHGMDdMq.js} +2 -2
- package/dist/codemirror-kHGMDdMq.js.map +1 -0
- package/dist/{codemirror_commands-Cg5rCf1I.js → codemirror_commands-BNzatDRz.js} +2 -2
- package/dist/{codemirror_commands-Cg5rCf1I.js.map → codemirror_commands-BNzatDRz.js.map} +1 -1
- package/dist/{codemirror_lang-python-BVX9Mc4s.js → codemirror_lang-python-PBvh5MWJ.js} +2 -2
- package/dist/{codemirror_lang-python-BVX9Mc4s.js.map → codemirror_lang-python-PBvh5MWJ.js.map} +1 -1
- package/dist/{codemirror_language-BFA8854-.js → codemirror_language-C0ccoJVB.js} +2 -2
- package/dist/{codemirror_language-BFA8854-.js.map → codemirror_language-C0ccoJVB.js.map} +1 -1
- package/dist/codemirror_view-CvBNngGG.js +2 -0
- package/dist/codemirror_view-CvBNngGG.js.map +1 -0
- package/dist/core-BQAbLvre.js +3 -0
- package/dist/core-BQAbLvre.js.map +1 -0
- package/dist/core.js +1 -1
- package/dist/{deprecations-manager-Bw93NImr.js → deprecations-manager-CQv1VsU_.js} +2 -2
- package/dist/{deprecations-manager-Bw93NImr.js.map → deprecations-manager-CQv1VsU_.js.map} +1 -1
- package/dist/{error-2kcNIsk_.js → error-DueleOMN.js} +2 -2
- package/dist/{error-2kcNIsk_.js.map → error-DueleOMN.js.map} +1 -1
- package/dist/index-lTKU5_hG.js +2 -0
- package/dist/index-lTKU5_hG.js.map +1 -0
- package/dist/{mpy-CD7enyf0.js → mpy-DOTPCj0o.js} +2 -2
- package/dist/{mpy-CD7enyf0.js.map → mpy-DOTPCj0o.js.map} +1 -1
- package/dist/{py-02uHRCjO.js → py-DoxIVXsQ.js} +2 -2
- package/dist/{py-02uHRCjO.js.map → py-DoxIVXsQ.js.map} +1 -1
- package/dist/{py-editor-DE9p9BaP.js → py-editor-D3FDoYNU.js} +2 -2
- package/dist/{py-editor-DE9p9BaP.js.map → py-editor-D3FDoYNU.js.map} +1 -1
- package/dist/{py-terminal-BlDcqGGy.js → py-terminal-DMP3XcAx.js} +2 -2
- package/dist/{py-terminal-BlDcqGGy.js.map → py-terminal-DMP3XcAx.js.map} +1 -1
- package/package.json +5 -5
- package/src/stdlib/pyscript/__init__.py +3 -0
- package/src/stdlib/pyscript/workers.py +15 -0
- package/src/stdlib/pyscript.js +3 -2
- package/types/exceptions.d.ts +1 -16
- package/types/stdlib/pyscript.d.ts +1 -0
- package/dist/codemirror-CdY86QAP.js.map +0 -1
- package/dist/codemirror_view-CH0UDCz6.js +0 -2
- package/dist/codemirror_view-CH0UDCz6.js.map +0 -1
- package/dist/core-66LzWJRR.js +0 -3
- package/dist/core-66LzWJRR.js.map +0 -1
- package/dist/index-C02Lyjc0.js +0 -2
- package/dist/index-C02Lyjc0.js.map +0 -1
package/dist/index-C02Lyjc0.js
DELETED
@@ -1,2 +0,0 @@
|
|
1
|
-
import{codePointSize as t,codePointAt as e,EditorSelection as n,CharCategory as o,Prec as i,Facet as s,combineConfig as l,StateField as r,StateEffect as a,MapMode as c,RangeValue as h,RangeSet as p,fromCodePoint as f,Annotation as u,Text as d,Transaction as m}from"./codemirror_state-D1qTXrff.js";import{E as g,k as v,D as b,s as w,g as y,V as x,l as C,a as I,W as O}from"./codemirror_view-CH0UDCz6.js";import{s as k,i as D}from"./codemirror_language-BFA8854-.js";class T{constructor(t,e,n){this.state=t,this.pos=e,this.explicit=n,this.abortListeners=[]}tokenBefore(t){let e=k(this.state).resolveInner(this.pos,-1);for(;e&&t.indexOf(e.name)<0;)e=e.parent;return e?{from:e.from,to:this.pos,text:this.state.sliceDoc(e.from,this.pos),type:e.type}:null}matchBefore(t){let e=this.state.doc.lineAt(this.pos),n=Math.max(e.from,this.pos-250),o=e.text.slice(n-e.from,this.pos-e.from),i=o.search(P(t,!1));return i<0?null:{from:n+i,to:this.pos,text:o.slice(i)}}get aborted(){return null==this.abortListeners}addEventListener(t,e){"abort"==t&&this.abortListeners&&this.abortListeners.push(e)}}function S(t){let e=Object.keys(t).join(""),n=/\w/.test(e);return n&&(e=e.replace(/\w/g,"")),`[${n?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function A(t){let e=t.map((t=>"string"==typeof t?{label:t}:t)),[n,o]=e.every((t=>/^\w+$/.test(t.label)))?[/\w*$/,/\w+$/]:function(t){let e=Object.create(null),n=Object.create(null);for(let{label:o}of t){e[o[0]]=!0;for(let t=1;t<o.length;t++)n[o[t]]=!0}let o=S(e)+S(n)+"*$";return[new RegExp("^"+o),new RegExp(o)]}(e);return t=>{let i=t.matchBefore(o);return i||t.explicit?{from:i?i.from:t.pos,options:e,validFor:n}:null}}function E(t,e){return n=>{for(let e=k(n.state).resolveInner(n.pos,-1);e;e=e.parent){if(t.indexOf(e.name)>-1)return null;if(e.type.isTop)break}return e(n)}}class L{constructor(t,e,n,o){this.completion=t,this.source=e,this.match=n,this.score=o}}function R(t){return t.selection.main.from}function P(t,e){var n;let{source:o}=t,i=e&&"^"!=o[0],s="$"!=o[o.length-1];return i||s?new RegExp(`${i?"^":""}(?:${o})${s?"$":""}`,null!==(n=t.flags)&&void 0!==n?n:t.ignoreCase?"i":""):t}const M=u.define();const B=new WeakMap;function j(t){if(!Array.isArray(t))return t;let e=B.get(t);return e||B.set(t,e=A(t)),e}const U=a.define(),$=a.define();class F{constructor(n){this.pattern=n,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[],this.score=0,this.matched=[];for(let o=0;o<n.length;){let i=e(n,o),s=t(i);this.chars.push(i);let l=n.slice(o,o+s),r=l.toUpperCase();this.folded.push(e(r==l?l.toLowerCase():r,0)),o+=s}this.astral=n.length!=this.chars.length}ret(t,e){return this.score=t,this.matched=e,this}match(n){if(0==this.pattern.length)return this.ret(-100,[]);if(n.length<this.pattern.length)return null;let{chars:o,folded:i,any:s,precise:l,byWord:r}=this;if(1==o.length){let s=e(n,0),l=t(s),r=l==n.length?0:-100;if(s==o[0]);else{if(s!=i[0])return null;r+=-200}return this.ret(r,[0,l])}let a=n.indexOf(this.pattern);if(0==a)return this.ret(n.length==this.pattern.length?0:-100,[0,this.pattern.length]);let c=o.length,h=0;if(a<0){for(let l=0,r=Math.min(n.length,200);l<r&&h<c;){let r=e(n,l);r!=o[h]&&r!=i[h]||(s[h++]=l),l+=t(r)}if(h<c)return null}let p=0,u=0,d=!1,m=0,g=-1,v=-1,b=/[a-z]/.test(n),w=!0;for(let s=0,h=Math.min(n.length,200),y=0;s<h&&u<c;){let h=e(n,s);a<0&&(p<c&&h==o[p]&&(l[p++]=s),m<c&&(h==o[m]||h==i[m]?(0==m&&(g=s),v=s+1,m++):m=0));let x,C=h<255?h>=48&&h<=57||h>=97&&h<=122?2:h>=65&&h<=90?1:0:(x=f(h))!=x.toLowerCase()?1:x!=x.toUpperCase()?2:0;(!s||1==C&&b||0==y&&0!=C)&&(o[u]==h||i[u]==h&&(d=!0)?r[u++]=s:r.length&&(w=!1)),y=C,s+=t(h)}return u==c&&0==r[0]&&w?this.result((d?-200:0)-100,r,n):m==c&&0==g?this.ret(-200-n.length+(v==n.length?0:-100),[0,v]):a>-1?this.ret(-700-n.length,[a,a+this.pattern.length]):m==c?this.ret(-900-n.length,[g,v]):u==c?this.result((d?-200:0)-100-700+(w?0:-1100),r,n):2==o.length?null:this.result((s[0]?-700:0)-200-1100,s,n)}result(n,o,i){let s=[],l=0;for(let n of o){let o=n+(this.astral?t(e(i,n)):1);l&&s[l-1]==n?s[l-1]=o:(s[l++]=n,s[l++]=o)}return this.ret(n-i.length,s)}}class N{constructor(t){this.pattern=t,this.matched=[],this.score=0,this.folded=t.toLowerCase()}match(t){if(t.length<this.pattern.length)return null;let e=t.slice(0,this.pattern.length),n=e==this.pattern?0:e.toLowerCase()==this.folded?-200:null;return null==n?null:(this.matched=[0,e.length],this.score=n+(t.length==this.pattern.length?0:-100),this)}}const W=s.define({combine:t=>l(t,{activateOnTyping:!0,activateOnCompletion:()=>!1,activateOnTypingDelay:100,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,tooltipClass:()=>"",optionClass:()=>"",aboveCursor:!1,icons:!0,addToOptions:[],positionInfo:H,filterStrict:!1,compareCompletions:(t,e)=>t.label.localeCompare(e.label),interactionDelay:75,updateSyncTime:100},{defaultKeymap:(t,e)=>t&&e,closeOnBlur:(t,e)=>t&&e,icons:(t,e)=>t&&e,tooltipClass:(t,e)=>n=>q(t(n),e(n)),optionClass:(t,e)=>n=>q(t(n),e(n)),addToOptions:(t,e)=>t.concat(e),filterStrict:(t,e)=>t||e})});function q(t,e){return t?e?t+" "+e:t:e}function H(t,e,n,o,i,s){let l,r,a=t.textDirection==b.RTL,c=a,h=!1,p="top",f=e.left-i.left,u=i.right-e.right,d=o.right-o.left,m=o.bottom-o.top;if(c&&f<Math.min(d,u)?c=!1:!c&&u<Math.min(d,f)&&(c=!0),d<=(c?f:u))l=Math.max(i.top,Math.min(n.top,i.bottom-m))-e.top,r=Math.min(400,c?f:u);else{h=!0,r=Math.min(400,(a?e.right:i.right-e.left)-30);let t=i.bottom-e.bottom;t>=m||t>e.top?l=n.bottom-e.top:(p="bottom",l=e.bottom-n.top)}return{style:`${p}: ${l/((e.bottom-e.top)/s.offsetHeight)}px; max-width: ${r/((e.right-e.left)/s.offsetWidth)}px`,class:"cm-completionInfo-"+(h?a?"left-narrow":"right-narrow":c?"left":"right")}}function V(t,e,n){if(t<=n)return{from:0,to:t};if(e<0&&(e=0),e<=t>>1){let t=Math.floor(e/n);return{from:t*n,to:(t+1)*n}}let o=Math.floor((t-e)/n);return{from:t-(o+1)*n,to:t-o*n}}class z{constructor(t,e,n){this.view=t,this.stateField=e,this.applyCompletion=n,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:t=>this.placeInfo(t),key:this},this.space=null,this.currentClass="";let o=t.state.field(e),{options:i,selected:s}=o.open,l=t.state.facet(W);this.optionContent=function(t){let e=t.addToOptions.slice();return t.icons&&e.push({render(t){let e=document.createElement("div");return e.classList.add("cm-completionIcon"),t.type&&e.classList.add(...t.type.split(/\s+/g).map((t=>"cm-completionIcon-"+t))),e.setAttribute("aria-hidden","true"),e},position:20}),e.push({render(t,e,n,o){let i=document.createElement("span");i.className="cm-completionLabel";let s=t.displayLabel||t.label,l=0;for(let t=0;t<o.length;){let e=o[t++],n=o[t++];e>l&&i.appendChild(document.createTextNode(s.slice(l,e)));let r=i.appendChild(document.createElement("span"));r.appendChild(document.createTextNode(s.slice(e,n))),r.className="cm-completionMatchedText",l=n}return l<s.length&&i.appendChild(document.createTextNode(s.slice(l))),i},position:50},{render(t){if(!t.detail)return null;let e=document.createElement("span");return e.className="cm-completionDetail",e.textContent=t.detail,e},position:80}),e.sort(((t,e)=>t.position-e.position)).map((t=>t.render))}(l),this.optionClass=l.optionClass,this.tooltipClass=l.tooltipClass,this.range=V(i.length,s,l.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.className="cm-tooltip-autocomplete",this.updateTooltipClass(t.state),this.dom.addEventListener("mousedown",(n=>{let{options:o}=t.state.field(e).open;for(let e,i=n.target;i&&i!=this.dom;i=i.parentNode)if("LI"==i.nodeName&&(e=/-(\d+)$/.exec(i.id))&&+e[1]<o.length)return this.applyCompletion(t,o[+e[1]]),void n.preventDefault()})),this.dom.addEventListener("focusout",(e=>{let n=t.state.field(this.stateField,!1);n&&n.tooltip&&t.state.facet(W).closeOnBlur&&e.relatedTarget!=t.contentDOM&&t.dispatch({effects:$.of(null)})})),this.showOptions(i,o.id)}mount(){this.updateSel()}showOptions(t,e){this.list&&this.list.remove(),this.list=this.dom.appendChild(this.createListBox(t,e,this.range)),this.list.addEventListener("scroll",(()=>{this.info&&this.view.requestMeasure(this.placeInfoReq)}))}update(t){var e;let n=t.state.field(this.stateField),o=t.startState.field(this.stateField);if(this.updateTooltipClass(t.state),n!=o){let{options:i,selected:s,disabled:l}=n.open;o.open&&o.open.options==i||(this.range=V(i.length,s,t.state.facet(W).maxRenderedOptions),this.showOptions(i,n.id)),this.updateSel(),l!=(null===(e=o.open)||void 0===e?void 0:e.disabled)&&this.dom.classList.toggle("cm-tooltip-autocomplete-disabled",!!l)}}updateTooltipClass(t){let e=this.tooltipClass(t);if(e!=this.currentClass){for(let t of this.currentClass.split(" "))t&&this.dom.classList.remove(t);for(let t of e.split(" "))t&&this.dom.classList.add(t);this.currentClass=e}}positioned(t){this.space=t,this.info&&this.view.requestMeasure(this.placeInfoReq)}updateSel(){let t=this.view.state.field(this.stateField),e=t.open;if((e.selected>-1&&e.selected<this.range.from||e.selected>=this.range.to)&&(this.range=V(e.options.length,e.selected,this.view.state.facet(W).maxRenderedOptions),this.showOptions(e.options,t.id)),this.updateSelectedOption(e.selected)){this.destroyInfo();let{completion:n}=e.options[e.selected],{info:o}=n;if(!o)return;let i="string"==typeof o?document.createTextNode(o):o(n);if(!i)return;"then"in i?i.then((e=>{e&&this.view.state.field(this.stateField,!1)==t&&this.addInfoPane(e,n)})).catch((t=>C(this.view.state,t,"completion info"))):this.addInfoPane(i,n)}}addInfoPane(t,e){this.destroyInfo();let n=this.info=document.createElement("div");if(n.className="cm-tooltip cm-completionInfo",null!=t.nodeType)n.appendChild(t),this.infoDestroy=null;else{let{dom:e,destroy:o}=t;n.appendChild(e),this.infoDestroy=o||null}this.dom.appendChild(n),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(t){let e=null;for(let n=this.list.firstChild,o=this.range.from;n;n=n.nextSibling,o++)"LI"==n.nodeName&&n.id?o==t?n.hasAttribute("aria-selected")||(n.setAttribute("aria-selected","true"),e=n):n.hasAttribute("aria-selected")&&n.removeAttribute("aria-selected"):o--;return e&&function(t,e){let n=t.getBoundingClientRect(),o=e.getBoundingClientRect(),i=n.height/t.offsetHeight;o.top<n.top?t.scrollTop-=(n.top-o.top)/i:o.bottom>n.bottom&&(t.scrollTop+=(o.bottom-n.bottom)/i)}(this.list,e),e}measureInfo(){let t=this.dom.querySelector("[aria-selected]");if(!t||!this.info)return null;let e=this.dom.getBoundingClientRect(),n=this.info.getBoundingClientRect(),o=t.getBoundingClientRect(),i=this.space;if(!i){let t=this.dom.ownerDocument.defaultView||window;i={left:0,top:0,right:t.innerWidth,bottom:t.innerHeight}}return o.top>Math.min(i.bottom,e.bottom)-10||o.bottom<Math.max(i.top,e.top)+10?null:this.view.state.facet(W).positionInfo(this.view,e,o,n,i,this.dom)}placeInfo(t){this.info&&(t?(t.style&&(this.info.style.cssText=t.style),this.info.className="cm-tooltip cm-completionInfo "+(t.class||"")):this.info.style.cssText="top: -1e6px")}createListBox(t,e,n){const o=document.createElement("ul");o.id=e,o.setAttribute("role","listbox"),o.setAttribute("aria-expanded","true"),o.setAttribute("aria-label",this.view.state.phrase("Completions"));let i=null;for(let s=n.from;s<n.to;s++){let{completion:l,match:r}=t[s],{section:a}=l;if(a){let t="string"==typeof a?a:a.name;if(t!=i&&(s>n.from||0==n.from))if(i=t,"string"!=typeof a&&a.header)o.appendChild(a.header(a));else{o.appendChild(document.createElement("completion-section")).textContent=t}}const c=o.appendChild(document.createElement("li"));c.id=e+"-"+s,c.setAttribute("role","option");let h=this.optionClass(l);h&&(c.className=h);for(let t of this.optionContent){let e=t(l,this.view.state,this.view,r);e&&c.appendChild(e)}}return n.from&&o.classList.add("cm-completionListIncompleteTop"),n.to<t.length&&o.classList.add("cm-completionListIncompleteBottom"),o}destroyInfo(){this.info&&(this.infoDestroy&&this.infoDestroy(),this.info.remove(),this.info=null)}destroy(){this.destroyInfo()}}function K(t,e){return n=>new z(n,t,e)}function Q(t){return 100*(t.boost||0)+(t.apply?10:0)+(t.info?5:0)+(t.type?1:0)}class _{constructor(t,e,n,o,i,s){this.options=t,this.attrs=e,this.tooltip=n,this.timestamp=o,this.selected=i,this.disabled=s}setSelected(t,e){return t==this.selected||t>=this.options.length?this:new _(this.options,G(e,t),this.tooltip,this.timestamp,t,this.disabled)}static build(t,e,n,o,i){let s=function(t,e){let n=[],o=null,i=t=>{n.push(t);let{section:e}=t.completion;if(e){o||(o=[]);let t="string"==typeof e?e:e.name;o.some((e=>e.name==t))||o.push("string"==typeof e?{name:t}:e)}},s=e.facet(W);for(let o of t)if(o.hasResult()){let t=o.result.getMatch;if(!1===o.result.filter)for(let e of o.result.options)i(new L(e,o.source,t?t(e):[],1e9-n.length));else{let n,l=e.sliceDoc(o.from,o.to),r=s.filterStrict?new N(l):new F(l);for(let e of o.result.options)if(n=r.match(e.label)){let s=e.displayLabel?t?t(e,n.matched):[]:n.matched;i(new L(e,o.source,s,n.score+(e.boost||0)))}}}if(o){let t=Object.create(null),e=0,i=(t,e)=>{var n,o;return(null!==(n=t.rank)&&void 0!==n?n:1e9)-(null!==(o=e.rank)&&void 0!==o?o:1e9)||(t.name<e.name?-1:1)};for(let n of o.sort(i))e-=1e5,t[n.name]=e;for(let e of n){let{section:n}=e.completion;n&&(e.score+=t["string"==typeof n?n:n.name])}}let l=[],r=null,a=s.compareCompletions;for(let t of n.sort(((t,e)=>e.score-t.score||a(t.completion,e.completion)))){let e=t.completion;!r||r.label!=e.label||r.detail!=e.detail||null!=r.type&&null!=e.type&&r.type!=e.type||r.apply!=e.apply||r.boost!=e.boost?l.push(t):Q(t.completion)>Q(r)&&(l[l.length-1]=t),r=t.completion}return l}(t,e);if(!s.length)return o&&t.some((t=>1==t.state))?new _(o.options,o.attrs,o.tooltip,o.timestamp,o.selected,!0):null;let l=e.facet(W).selectOnOpen?0:-1;if(o&&o.selected!=l&&-1!=o.selected){let t=o.options[o.selected].completion;for(let e=0;e<s.length;e++)if(s[e].completion==t){l=e;break}}return new _(s,G(n,l),{pos:t.reduce(((t,e)=>e.hasResult()?Math.min(t,e.from):t),1e8),create:lt,above:i.aboveCursor},o?o.timestamp:Date.now(),l,!1)}map(t){return new _(this.options,this.attrs,Object.assign(Object.assign({},this.tooltip),{pos:t.mapPos(this.tooltip.pos)}),this.timestamp,this.selected,this.disabled)}}class X{constructor(t,e,n){this.active=t,this.id=e,this.open=n}static start(){return new X(J,"cm-ac-"+Math.floor(2e6*Math.random()).toString(36),null)}update(t){let{state:e}=t,n=e.facet(W),o=(n.override||e.languageDataAt("autocomplete",R(e)).map(j)).map((e=>(this.active.find((t=>t.source==e))||new tt(e,this.active.some((t=>0!=t.state))?1:0)).update(t,n)));o.length==this.active.length&&o.every(((t,e)=>t==this.active[e]))&&(o=this.active);let i=this.open;i&&t.docChanged&&(i=i.map(t.changes)),t.selection||o.some((e=>e.hasResult()&&t.changes.touchesRange(e.from,e.to)))||!function(t,e){if(t==e)return!0;for(let n=0,o=0;;){for(;n<t.length&&!t[n].hasResult;)n++;for(;o<e.length&&!e[o].hasResult;)o++;let i=n==t.length,s=o==e.length;if(i||s)return i==s;if(t[n++].result!=e[o++].result)return!1}}(o,this.active)?i=_.build(o,e,this.id,i,n):i&&i.disabled&&!o.some((t=>1==t.state))&&(i=null),!i&&o.every((t=>1!=t.state))&&o.some((t=>t.hasResult()))&&(o=o.map((t=>t.hasResult()?new tt(t.source,0):t)));for(let e of t.effects)e.is(ot)&&(i=i&&i.setSelected(e.value,this.id));return o==this.active&&i==this.open?this:new X(o,this.id,i)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:Y}}const Y={"aria-autocomplete":"list"};function G(t,e){let n={"aria-autocomplete":"list","aria-haspopup":"listbox","aria-controls":t};return e>-1&&(n["aria-activedescendant"]=t+"-"+e),n}const J=[];function Z(t,e){if(t.isUserEvent("input.complete")){let n=t.annotation(M);if(n&&e.activateOnCompletion(n))return"input"}return t.isUserEvent("input.type")?"input":t.isUserEvent("delete.backward")?"delete":null}class tt{constructor(t,e,n=-1){this.source=t,this.state=e,this.explicitPos=n}hasResult(){return!1}update(t,e){let n=Z(t,e),o=this;n?o=o.handleUserEvent(t,n,e):t.docChanged?o=o.handleChange(t):t.selection&&0!=o.state&&(o=new tt(o.source,0));for(let e of t.effects)if(e.is(U))o=new tt(o.source,1,e.value?R(t.state):-1);else if(e.is($))o=new tt(o.source,0);else if(e.is(nt))for(let t of e.value)t.source==o.source&&(o=t);return o}handleUserEvent(t,e,n){return"delete"!=e&&n.activateOnTyping?new tt(this.source,1):this.map(t.changes)}handleChange(t){return t.changes.touchesRange(R(t.startState))?new tt(this.source,0):this.map(t.changes)}map(t){return t.empty||this.explicitPos<0?this:new tt(this.source,this.state,t.mapPos(this.explicitPos))}}class et extends tt{constructor(t,e,n,o,i){super(t,2,e),this.result=n,this.from=o,this.to=i}hasResult(){return!0}handleUserEvent(t,e,n){var o;let i=this.result;i.map&&!t.changes.empty&&(i=i.map(i,t.changes));let s=t.changes.mapPos(this.from),l=t.changes.mapPos(this.to,1),r=R(t.state);if((this.explicitPos<0?r<=s:r<this.from)||r>l||!i||"delete"==e&&R(t.startState)==this.from)return new tt(this.source,"input"==e&&n.activateOnTyping?1:0);let a=this.explicitPos<0?-1:t.changes.mapPos(this.explicitPos);return function(t,e,n,o){if(!t)return!1;let i=e.sliceDoc(n,o);return"function"==typeof t?t(i,n,o,e):P(t,!0).test(i)}(i.validFor,t.state,s,l)?new et(this.source,a,i,s,l):i.update&&(i=i.update(i,s,l,new T(t.state,r,a>=0)))?new et(this.source,a,i,i.from,null!==(o=i.to)&&void 0!==o?o:R(t.state)):new tt(this.source,1,a)}handleChange(t){return t.changes.touchesRange(this.from,this.to)?new tt(this.source,0):this.map(t.changes)}map(t){if(t.empty)return this;return(this.result.map?this.result.map(this.result,t):this.result)?new et(this.source,this.explicitPos<0?-1:t.mapPos(this.explicitPos),this.result,t.mapPos(this.from),t.mapPos(this.to,1)):new tt(this.source,0)}}const nt=a.define({map:(t,e)=>t.map((t=>t.map(e)))}),ot=a.define(),it=r.define({create:()=>X.start(),update:(t,e)=>t.update(e),provide:t=>[w.from(t,(t=>t.tooltip)),g.contentAttributes.from(t,(t=>t.attrs))]});function st(t,e){const o=e.completion.apply||e.completion.label;let i=t.state.field(it).active.find((t=>t.source==e.source));return i instanceof et&&("string"==typeof o?t.dispatch(Object.assign(Object.assign({},function(t,e,o,i){let{main:s}=t.selection,l=o-s.from,r=i-s.from;return Object.assign(Object.assign({},t.changeByRange((a=>a!=s&&o!=i&&t.sliceDoc(a.from+l,a.from+r)!=t.sliceDoc(o,i)?{range:a}:{changes:{from:a.from+l,to:i==s.from?a.to:a.from+r,insert:e},range:n.cursor(a.from+l+e.length)}))),{scrollIntoView:!0,userEvent:"input.complete"})}(t.state,o,i.from,i.to)),{annotations:M.of(e.completion)})):o(t,e.completion,i.from,i.to),!0)}const lt=K(it,st);function rt(t,e="option"){return n=>{let o=n.state.field(it,!1);if(!o||!o.open||o.open.disabled||Date.now()-o.open.timestamp<n.state.facet(W).interactionDelay)return!1;let i,s=1;"page"==e&&(i=y(n,o.open.tooltip))&&(s=Math.max(2,Math.floor(i.dom.offsetHeight/i.dom.querySelector("li").offsetHeight)-1));let{length:l}=o.open.options,r=o.open.selected>-1?o.open.selected+s*(t?1:-1):t?0:l-1;return r<0?r="page"==e?0:l-1:r>=l&&(r="page"==e?l-1:0),n.dispatch({effects:ot.of(r)}),!0}}class at{constructor(t,e){this.active=t,this.context=e,this.time=Date.now(),this.updates=[],this.done=void 0}}const ct=x.fromClass(class{constructor(t){this.view=t,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.pendingStart=!1,this.composing=0;for(let e of t.state.field(it).active)1==e.state&&this.startQuery(e)}update(t){let e=t.state.field(it),n=t.state.facet(W);if(!t.selectionSet&&!t.docChanged&&t.startState.field(it)==e)return;let o=t.transactions.some((t=>(t.selection||t.docChanged)&&!Z(t,n)));for(let e=0;e<this.running.length;e++){let n=this.running[e];if(o||n.updates.length+t.transactions.length>50&&Date.now()-n.time>1e3){for(let t of n.context.abortListeners)try{t()}catch(t){C(this.view.state,t)}n.context.abortListeners=null,this.running.splice(e--,1)}else n.updates.push(...t.transactions)}this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),t.transactions.some((t=>t.effects.some((t=>t.is(U)))))&&(this.pendingStart=!0);let i=this.pendingStart?50:n.activateOnTypingDelay;if(this.debounceUpdate=e.active.some((t=>1==t.state&&!this.running.some((e=>e.active.source==t.source))))?setTimeout((()=>this.startUpdate()),i):-1,0!=this.composing)for(let e of t.transactions)"input"==Z(e,n)?this.composing=2:2==this.composing&&e.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1,this.pendingStart=!1;let{state:t}=this.view,e=t.field(it);for(let t of e.active)1!=t.state||this.running.some((e=>e.active.source==t.source))||this.startQuery(t)}startQuery(t){let{state:e}=this.view,n=R(e),o=new T(e,n,t.explicitPos==n),i=new at(t,o);this.running.push(i),Promise.resolve(t.source(o)).then((t=>{i.context.aborted||(i.done=t||null,this.scheduleAccept())}),(t=>{this.view.dispatch({effects:$.of(null)}),C(this.view.state,t)}))}scheduleAccept(){this.running.every((t=>void 0!==t.done))?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout((()=>this.accept()),this.view.state.facet(W).updateSyncTime))}accept(){var t;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],n=this.view.state.facet(W);for(let o=0;o<this.running.length;o++){let i=this.running[o];if(void 0===i.done)continue;if(this.running.splice(o--,1),i.done){let o=new et(i.active.source,i.active.explicitPos,i.done,i.done.from,null!==(t=i.done.to)&&void 0!==t?t:R(i.updates.length?i.updates[0].startState:this.view.state));for(let t of i.updates)o=o.update(t,n);if(o.hasResult()){e.push(o);continue}}let s=this.view.state.field(it).active.find((t=>t.source==i.active.source));if(s&&1==s.state)if(null==i.done){let t=new tt(i.active.source,0);for(let e of i.updates)t=t.update(e,n);1!=t.state&&e.push(t)}else this.startQuery(s)}e.length&&this.view.dispatch({effects:nt.of(e)})}},{eventHandlers:{blur(t){let e=this.view.state.field(it,!1);if(e&&e.tooltip&&this.view.state.facet(W).closeOnBlur){let n=e.open&&y(this.view,e.open.tooltip);n&&n.dom.contains(t.relatedTarget)||setTimeout((()=>this.view.dispatch({effects:$.of(null)})),10)}},compositionstart(){this.composing=1},compositionend(){3==this.composing&&setTimeout((()=>this.view.dispatch({effects:U.of(!1)})),20),this.composing=0}}}),ht="object"==typeof navigator&&/Win/.test(navigator.platform),pt=i.highest(g.domEventHandlers({keydown(t,e){let n=e.state.field(it,!1);if(!n||!n.open||n.open.disabled||n.open.selected<0||t.key.length>1||t.ctrlKey&&(!ht||!t.altKey)||t.metaKey)return!1;let o=n.open.options[n.open.selected],i=n.active.find((t=>t.source==o.source)),s=o.completion.commitCharacters||i.result.commitCharacters;return s&&s.indexOf(t.key)>-1&&st(e,o),!1}})),ft=g.baseTheme({".cm-tooltip.cm-tooltip-autocomplete":{"& > ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",height:"100%",listStyle:"none",margin:0,padding:0,"& > li, & > completion-section":{padding:"1px 3px",lineHeight:1.2},"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer"},"& > completion-section":{display:"list-item",borderBottom:"1px solid silver",paddingLeft:"0.5em",opacity:.7}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#777"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#444"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"···"',opacity:.5,display:"block",textAlign:"center"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"400px",boxSizing:"border-box"},".cm-completionInfo.cm-completionInfo-left":{right:"100%"},".cm-completionInfo.cm-completionInfo-right":{left:"100%"},".cm-completionInfo.cm-completionInfo-left-narrow":{right:"30px"},".cm-completionInfo.cm-completionInfo-right-narrow":{left:"30px"},"&light .cm-snippetField":{backgroundColor:"#00000022"},"&dark .cm-snippetField":{backgroundColor:"#ffffff22"},".cm-snippetFieldPosition":{verticalAlign:"text-top",width:0,height:"1.15em",display:"inline-block",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},".cm-completionMatchedText":{textDecoration:"underline"},".cm-completionDetail":{marginLeft:"0.5em",fontStyle:"italic"},".cm-completionIcon":{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6",boxSizing:"content-box"},".cm-completionIcon-function, .cm-completionIcon-method":{"&:after":{content:"'ƒ'"}},".cm-completionIcon-class":{"&:after":{content:"'○'"}},".cm-completionIcon-interface":{"&:after":{content:"'◌'"}},".cm-completionIcon-variable":{"&:after":{content:"'𝑥'"}},".cm-completionIcon-constant":{"&:after":{content:"'𝐶'"}},".cm-completionIcon-type":{"&:after":{content:"'𝑡'"}},".cm-completionIcon-enum":{"&:after":{content:"'∪'"}},".cm-completionIcon-property":{"&:after":{content:"'□'"}},".cm-completionIcon-keyword":{"&:after":{content:"'🔑︎'"}},".cm-completionIcon-namespace":{"&:after":{content:"'▢'"}},".cm-completionIcon-text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}});class ut{constructor(t,e,n,o){this.field=t,this.line=e,this.from=n,this.to=o}}class dt{constructor(t,e,n){this.field=t,this.from=e,this.to=n}map(t){let e=t.mapPos(this.from,-1,c.TrackDel),n=t.mapPos(this.to,1,c.TrackDel);return null==e||null==n?null:new dt(this.field,e,n)}}class mt{constructor(t,e){this.lines=t,this.fieldPositions=e}instantiate(t,e){let n=[],o=[e],i=t.doc.lineAt(e),s=/^\s*/.exec(i.text)[0];for(let i of this.lines){if(n.length){let n=s,l=/^\t*/.exec(i)[0].length;for(let e=0;e<l;e++)n+=t.facet(D);o.push(e+n.length-l),i=n+i.slice(l)}n.push(i),e+=i.length+1}let l=this.fieldPositions.map((t=>new dt(t.field,o[t.line]+t.from,o[t.line]+t.to)));return{text:n,ranges:l}}static parse(t){let e,n=[],o=[],i=[];for(let s of t.split(/\r\n?|\n/)){for(;e=/[#$]\{(?:(\d+)(?::([^}]*))?|((?:\\[{}]|[^}])*))\}/.exec(s);){let t=e[1]?+e[1]:null,l=e[2]||e[3]||"",r=-1,a=l.replace(/\\[{}]/g,(t=>t[1]));for(let e=0;e<n.length;e++)(null!=t?n[e].seq==t:a&&n[e].name==a)&&(r=e);if(r<0){let e=0;for(;e<n.length&&(null==t||null!=n[e].seq&&n[e].seq<t);)e++;n.splice(e,0,{seq:t,name:a}),r=e;for(let t of i)t.field>=r&&t.field++}i.push(new ut(r,o.length,e.index,e.index+a.length)),s=s.slice(0,e.index)+l+s.slice(e.index+e[0].length)}s=s.replace(/\\([{}])/g,((t,e,n)=>{for(let t of i)t.line==o.length&&t.from>n&&(t.from--,t.to--);return e})),o.push(s)}return new mt(o,i)}}let gt=I.widget({widget:new class extends O{toDOM(){let t=document.createElement("span");return t.className="cm-snippetFieldPosition",t}ignoreEvent(){return!1}}}),vt=I.mark({class:"cm-snippetField"});class bt{constructor(t,e){this.ranges=t,this.active=e,this.deco=I.set(t.map((t=>(t.from==t.to?gt:vt).range(t.from,t.to))))}map(t){let e=[];for(let n of this.ranges){let o=n.map(t);if(!o)return null;e.push(o)}return new bt(e,this.active)}selectionInsideField(t){return t.ranges.every((t=>this.ranges.some((e=>e.field==this.active&&e.from<=t.from&&e.to>=t.to))))}}const wt=a.define({map:(t,e)=>t&&t.map(e)}),yt=a.define(),xt=r.define({create:()=>null,update(t,e){for(let n of e.effects){if(n.is(wt))return n.value;if(n.is(yt)&&t)return new bt(t.ranges,n.value)}return t&&e.docChanged&&(t=t.map(e.changes)),t&&e.selection&&!t.selectionInsideField(e.selection)&&(t=null),t},provide:t=>g.decorations.from(t,(t=>t?t.deco:I.none))});function Ct(t,e){return n.create(t.filter((t=>t.field==e)).map((t=>n.range(t.from,t.to))))}function It(t){let e=mt.parse(t);return(t,n,o,i)=>{let{text:s,ranges:l}=e.instantiate(t.state,o),r={changes:{from:o,to:i,insert:d.of(s)},scrollIntoView:!0,annotations:n?[M.of(n),m.userEvent.of("input.complete")]:void 0};if(l.length&&(r.selection=Ct(l,0)),l.some((t=>t.field>0))){let e=new bt(l,0),n=r.effects=[wt.of(e)];void 0===t.state.field(xt,!1)&&n.push(a.appendConfig.of([xt,Tt,At,ft]))}t.dispatch(t.state.update(r))}}function Ot(t){return({state:e,dispatch:n})=>{let o=e.field(xt,!1);if(!o||t<0&&0==o.active)return!1;let i=o.active+t,s=t>0&&!o.ranges.some((e=>e.field==i+t));return n(e.update({selection:Ct(o.ranges,i),effects:wt.of(s?null:new bt(o.ranges,i)),scrollIntoView:!0})),!0}}const kt=[{key:"Tab",run:Ot(1),shift:Ot(-1)},{key:"Escape",run:({state:t,dispatch:e})=>!!t.field(xt,!1)&&(e(t.update({effects:wt.of(null)})),!0)}],Dt=s.define({combine:t=>t.length?t[0]:kt}),Tt=i.highest(v.compute([Dt],(t=>t.facet(Dt))));function St(t,e){return Object.assign(Object.assign({},e),{apply:It(t)})}const At=g.domEventHandlers({mousedown(t,e){let n,o=e.state.field(xt,!1);if(!o||null==(n=e.posAtCoords({x:t.clientX,y:t.clientY})))return!1;let i=o.ranges.find((t=>t.from<=n&&t.to>=n));return!(!i||i.field==o.active)&&(e.dispatch({selection:Ct(o.ranges,i.field),effects:wt.of(o.ranges.some((t=>t.field>i.field))?new bt(o.ranges,i.field):null),scrollIntoView:!0}),!0)}}),Et={brackets:["(","[","{","'",'"'],before:")]}:;>",stringPrefixes:[]},Lt=a.define({map(t,e){let n=e.mapPos(t,-1,c.TrackAfter);return null==n?void 0:n}}),Rt=new class extends h{};Rt.startSide=1,Rt.endSide=-1;const Pt=r.define({create:()=>p.empty,update(t,e){if(t=t.map(e.changes),e.selection){let n=e.state.doc.lineAt(e.selection.main.head);t=t.update({filter:t=>t>=n.from&&t<=n.to})}for(let n of e.effects)n.is(Lt)&&(t=t.update({add:[Rt.range(n.value,n.value+1)]}));return t}});function Mt(){return[Ft,Pt]}const Bt="()[]{}<>";function jt(t){for(let e=0;e<Bt.length;e+=2)if(Bt.charCodeAt(e)==t)return Bt.charAt(e+1);return f(t<128?t:t+1)}function Ut(t,e){return t.languageDataAt("closeBrackets",e)[0]||Et}const $t="object"==typeof navigator&&/Android\b/.test(navigator.userAgent),Ft=g.inputHandler.of(((n,o,i,s)=>{if(($t?n.composing:n.compositionStarted)||n.state.readOnly)return!1;let l=n.state.selection.main;if(s.length>2||2==s.length&&1==t(e(s,0))||o!=l.from||i!=l.to)return!1;let r=function(t,n){let o=Ut(t,t.selection.main.head),i=o.brackets||Et.brackets;for(let s of i){let l=jt(e(s,0));if(n==s)return l==s?zt(t,s,i.indexOf(s+s+s)>-1,o):Ht(t,s,l,o.before||Et.before);if(n==l&&Wt(t,t.selection.main.from))return Vt(t,s,l)}return null}(n.state,s);return!!r&&(n.dispatch(r),!0)})),Nt=[{key:"Backspace",run:({state:o,dispatch:i})=>{if(o.readOnly)return!1;let s=Ut(o,o.selection.main.head).brackets||Et.brackets,l=null,r=o.changeByRange((i=>{if(i.empty){let l=function(n,o){let i=n.sliceString(o-2,o);return t(e(i,0))==i.length?i:i.slice(1)}(o.doc,i.head);for(let t of s)if(t==l&&qt(o.doc,i.head)==jt(e(t,0)))return{changes:{from:i.head-t.length,to:i.head+t.length},range:n.cursor(i.head-t.length)}}return{range:l=i}}));return l||i(o.update(r,{scrollIntoView:!0,userEvent:"delete.backward"})),!l}}];function Wt(t,e){let n=!1;return t.field(Pt).between(0,t.doc.length,(t=>{t==e&&(n=!0)})),n}function qt(n,o){let i=n.sliceString(o,o+2);return i.slice(0,t(e(i,0)))}function Ht(t,e,o,i){let s=null,l=t.changeByRange((l=>{if(!l.empty)return{changes:[{insert:e,from:l.from},{insert:o,from:l.to}],effects:Lt.of(l.to+e.length),range:n.range(l.anchor+e.length,l.head+e.length)};let r=qt(t.doc,l.head);return!r||/\s/.test(r)||i.indexOf(r)>-1?{changes:{insert:e+o,from:l.head},effects:Lt.of(l.head+e.length),range:n.cursor(l.head+e.length)}:{range:s=l}}));return s?null:t.update(l,{scrollIntoView:!0,userEvent:"input.type"})}function Vt(t,e,o){let i=null,s=t.changeByRange((e=>e.empty&&qt(t.doc,e.head)==o?{changes:{from:e.head,to:e.head+o.length,insert:o},range:n.cursor(e.head+o.length)}:i={range:e}));return i?null:t.update(s,{scrollIntoView:!0,userEvent:"input.type"})}function zt(t,e,i,s){let l=s.stringPrefixes||Et.stringPrefixes,r=null,a=t.changeByRange((s=>{if(!s.empty)return{changes:[{insert:e,from:s.from},{insert:e,from:s.to}],effects:Lt.of(s.to+e.length),range:n.range(s.anchor+e.length,s.head+e.length)};let a,c=s.head,h=qt(t.doc,c);if(h==e){if(Kt(t,c))return{changes:{insert:e+e,from:c},effects:Lt.of(c+e.length),range:n.cursor(c+e.length)};if(Wt(t,c)){let o=i&&t.sliceDoc(c,c+3*e.length)==e+e+e?e+e+e:e;return{changes:{from:c,to:c+o.length,insert:o},range:n.cursor(c+o.length)}}}else{if(i&&t.sliceDoc(c-2*e.length,c)==e+e&&(a=Qt(t,c-2*e.length,l))>-1&&Kt(t,a))return{changes:{insert:e+e+e+e,from:c},effects:Lt.of(c+e.length),range:n.cursor(c+e.length)};if(t.charCategorizer(c)(h)!=o.Word&&Qt(t,c,l)>-1&&!function(t,e,n,o){let i=k(t).resolveInner(e,-1),s=o.reduce(((t,e)=>Math.max(t,e.length)),0);for(let l=0;l<5;l++){let l=t.sliceDoc(i.from,Math.min(i.to,i.from+n.length+s)),r=l.indexOf(n);if(!r||r>-1&&o.indexOf(l.slice(0,r))>-1){let e=i.firstChild;for(;e&&e.from==i.from&&e.to-e.from>n.length+r;){if(t.sliceDoc(e.to-n.length,e.to)==n)return!1;e=e.firstChild}return!0}let a=i.to==e&&i.parent;if(!a)break;i=a}return!1}(t,c,e,l))return{changes:{insert:e+e,from:c},effects:Lt.of(c+e.length),range:n.cursor(c+e.length)}}return{range:r=s}}));return r?null:t.update(a,{scrollIntoView:!0,userEvent:"input.type"})}function Kt(t,e){let n=k(t).resolveInner(e+1);return n.parent&&n.from==e}function Qt(t,e,n){let i=t.charCategorizer(e);if(i(t.sliceDoc(e-1,e))!=o.Word)return e;for(let s of n){let n=e-s.length;if(t.sliceDoc(n,e)==s&&i(t.sliceDoc(n-1,n))!=o.Word)return n}return-1}function _t(t={}){return[pt,it,W.of(t),ct,Yt,ft]}const Xt=[{key:"Ctrl-Space",run:t=>!!t.state.field(it,!1)&&(t.dispatch({effects:U.of(!0)}),!0)},{key:"Escape",run:t=>{let e=t.state.field(it,!1);return!(!e||!e.active.some((t=>0!=t.state)))&&(t.dispatch({effects:$.of(null)}),!0)}},{key:"ArrowDown",run:rt(!0)},{key:"ArrowUp",run:rt(!1)},{key:"PageDown",run:rt(!0,"page")},{key:"PageUp",run:rt(!1,"page")},{key:"Enter",run:t=>{let e=t.state.field(it,!1);return!(t.state.readOnly||!e||!e.open||e.open.selected<0||e.open.disabled||Date.now()-e.open.timestamp<t.state.facet(W).interactionDelay)&&st(t,e.open.options[e.open.selected])}}],Yt=i.highest(v.computeN([W],(t=>t.facet(W).defaultKeymap?[Xt]:[])));export{Mt as a,_t as b,A as c,Nt as d,Xt as e,E as i,St as s};
|
2
|
-
//# sourceMappingURL=index-C02Lyjc0.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"index-C02Lyjc0.js","sources":["../node_modules/@codemirror/autocomplete/dist/index.js"],"sourcesContent":["import { Annotation, StateEffect, EditorSelection, codePointAt, codePointSize, fromCodePoint, Facet, combineConfig, StateField, Prec, Text, Transaction, MapMode, RangeValue, RangeSet, CharCategory } from '@codemirror/state';\nimport { Direction, logException, showTooltip, EditorView, ViewPlugin, getTooltip, Decoration, WidgetType, keymap } from '@codemirror/view';\nimport { syntaxTree, indentUnit } from '@codemirror/language';\n\n/**\nAn instance of this is passed to completion source functions.\n*/\nclass CompletionContext {\n /**\n Create a new completion context. (Mostly useful for testing\n completion sources—in the editor, the extension will create\n these for you.)\n */\n constructor(\n /**\n The editor state that the completion happens in.\n */\n state, \n /**\n The position at which the completion is happening.\n */\n pos, \n /**\n Indicates whether completion was activated explicitly, or\n implicitly by typing. The usual way to respond to this is to\n only return completions when either there is part of a\n completable entity before the cursor, or `explicit` is true.\n */\n explicit) {\n this.state = state;\n this.pos = pos;\n this.explicit = explicit;\n /**\n @internal\n */\n this.abortListeners = [];\n }\n /**\n Get the extent, content, and (if there is a token) type of the\n token before `this.pos`.\n */\n tokenBefore(types) {\n let token = syntaxTree(this.state).resolveInner(this.pos, -1);\n while (token && types.indexOf(token.name) < 0)\n token = token.parent;\n return token ? { from: token.from, to: this.pos,\n text: this.state.sliceDoc(token.from, this.pos),\n type: token.type } : null;\n }\n /**\n Get the match of the given expression directly before the\n cursor.\n */\n matchBefore(expr) {\n let line = this.state.doc.lineAt(this.pos);\n let start = Math.max(line.from, this.pos - 250);\n let str = line.text.slice(start - line.from, this.pos - line.from);\n let found = str.search(ensureAnchor(expr, false));\n return found < 0 ? null : { from: start + found, to: this.pos, text: str.slice(found) };\n }\n /**\n Yields true when the query has been aborted. Can be useful in\n asynchronous queries to avoid doing work that will be ignored.\n */\n get aborted() { return this.abortListeners == null; }\n /**\n Allows you to register abort handlers, which will be called when\n the query is\n [aborted](https://codemirror.net/6/docs/ref/#autocomplete.CompletionContext.aborted).\n */\n addEventListener(type, listener) {\n if (type == \"abort\" && this.abortListeners)\n this.abortListeners.push(listener);\n }\n}\nfunction toSet(chars) {\n let flat = Object.keys(chars).join(\"\");\n let words = /\\w/.test(flat);\n if (words)\n flat = flat.replace(/\\w/g, \"\");\n return `[${words ? \"\\\\w\" : \"\"}${flat.replace(/[^\\w\\s]/g, \"\\\\$&\")}]`;\n}\nfunction prefixMatch(options) {\n let first = Object.create(null), rest = Object.create(null);\n for (let { label } of options) {\n first[label[0]] = true;\n for (let i = 1; i < label.length; i++)\n rest[label[i]] = true;\n }\n let source = toSet(first) + toSet(rest) + \"*$\";\n return [new RegExp(\"^\" + source), new RegExp(source)];\n}\n/**\nGiven a a fixed array of options, return an autocompleter that\ncompletes them.\n*/\nfunction completeFromList(list) {\n let options = list.map(o => typeof o == \"string\" ? { label: o } : o);\n let [validFor, match] = options.every(o => /^\\w+$/.test(o.label)) ? [/\\w*$/, /\\w+$/] : prefixMatch(options);\n return (context) => {\n let token = context.matchBefore(match);\n return token || context.explicit ? { from: token ? token.from : context.pos, options, validFor } : null;\n };\n}\n/**\nWrap the given completion source so that it will only fire when the\ncursor is in a syntax node with one of the given names.\n*/\nfunction ifIn(nodes, source) {\n return (context) => {\n for (let pos = syntaxTree(context.state).resolveInner(context.pos, -1); pos; pos = pos.parent) {\n if (nodes.indexOf(pos.name) > -1)\n return source(context);\n if (pos.type.isTop)\n break;\n }\n return null;\n };\n}\n/**\nWrap the given completion source so that it will not fire when the\ncursor is in a syntax node with one of the given names.\n*/\nfunction ifNotIn(nodes, source) {\n return (context) => {\n for (let pos = syntaxTree(context.state).resolveInner(context.pos, -1); pos; pos = pos.parent) {\n if (nodes.indexOf(pos.name) > -1)\n return null;\n if (pos.type.isTop)\n break;\n }\n return source(context);\n };\n}\nclass Option {\n constructor(completion, source, match, score) {\n this.completion = completion;\n this.source = source;\n this.match = match;\n this.score = score;\n }\n}\nfunction cur(state) { return state.selection.main.from; }\n// Make sure the given regexp has a $ at its end and, if `start` is\n// true, a ^ at its start.\nfunction ensureAnchor(expr, start) {\n var _a;\n let { source } = expr;\n let addStart = start && source[0] != \"^\", addEnd = source[source.length - 1] != \"$\";\n if (!addStart && !addEnd)\n return expr;\n return new RegExp(`${addStart ? \"^\" : \"\"}(?:${source})${addEnd ? \"$\" : \"\"}`, (_a = expr.flags) !== null && _a !== void 0 ? _a : (expr.ignoreCase ? \"i\" : \"\"));\n}\n/**\nThis annotation is added to transactions that are produced by\npicking a completion.\n*/\nconst pickedCompletion = /*@__PURE__*/Annotation.define();\n/**\nHelper function that returns a transaction spec which inserts a\ncompletion's text in the main selection range, and any other\nselection range that has the same text in front of it.\n*/\nfunction insertCompletionText(state, text, from, to) {\n let { main } = state.selection, fromOff = from - main.from, toOff = to - main.from;\n return Object.assign(Object.assign({}, state.changeByRange(range => {\n if (range != main && from != to &&\n state.sliceDoc(range.from + fromOff, range.from + toOff) != state.sliceDoc(from, to))\n return { range };\n return {\n changes: { from: range.from + fromOff, to: to == main.from ? range.to : range.from + toOff, insert: text },\n range: EditorSelection.cursor(range.from + fromOff + text.length)\n };\n })), { scrollIntoView: true, userEvent: \"input.complete\" });\n}\nconst SourceCache = /*@__PURE__*/new WeakMap();\nfunction asSource(source) {\n if (!Array.isArray(source))\n return source;\n let known = SourceCache.get(source);\n if (!known)\n SourceCache.set(source, known = completeFromList(source));\n return known;\n}\nconst startCompletionEffect = /*@__PURE__*/StateEffect.define();\nconst closeCompletionEffect = /*@__PURE__*/StateEffect.define();\n\n// A pattern matcher for fuzzy completion matching. Create an instance\n// once for a pattern, and then use that to match any number of\n// completions.\nclass FuzzyMatcher {\n constructor(pattern) {\n this.pattern = pattern;\n this.chars = [];\n this.folded = [];\n // Buffers reused by calls to `match` to track matched character\n // positions.\n this.any = [];\n this.precise = [];\n this.byWord = [];\n this.score = 0;\n this.matched = [];\n for (let p = 0; p < pattern.length;) {\n let char = codePointAt(pattern, p), size = codePointSize(char);\n this.chars.push(char);\n let part = pattern.slice(p, p + size), upper = part.toUpperCase();\n this.folded.push(codePointAt(upper == part ? part.toLowerCase() : upper, 0));\n p += size;\n }\n this.astral = pattern.length != this.chars.length;\n }\n ret(score, matched) {\n this.score = score;\n this.matched = matched;\n return this;\n }\n // Matches a given word (completion) against the pattern (input).\n // Will return a boolean indicating whether there was a match and,\n // on success, set `this.score` to the score, `this.matched` to an\n // array of `from, to` pairs indicating the matched parts of `word`.\n //\n // The score is a number that is more negative the worse the match\n // is. See `Penalty` above.\n match(word) {\n if (this.pattern.length == 0)\n return this.ret(-100 /* Penalty.NotFull */, []);\n if (word.length < this.pattern.length)\n return null;\n let { chars, folded, any, precise, byWord } = this;\n // For single-character queries, only match when they occur right\n // at the start\n if (chars.length == 1) {\n let first = codePointAt(word, 0), firstSize = codePointSize(first);\n let score = firstSize == word.length ? 0 : -100 /* Penalty.NotFull */;\n if (first == chars[0]) ;\n else if (first == folded[0])\n score += -200 /* Penalty.CaseFold */;\n else\n return null;\n return this.ret(score, [0, firstSize]);\n }\n let direct = word.indexOf(this.pattern);\n if (direct == 0)\n return this.ret(word.length == this.pattern.length ? 0 : -100 /* Penalty.NotFull */, [0, this.pattern.length]);\n let len = chars.length, anyTo = 0;\n if (direct < 0) {\n for (let i = 0, e = Math.min(word.length, 200); i < e && anyTo < len;) {\n let next = codePointAt(word, i);\n if (next == chars[anyTo] || next == folded[anyTo])\n any[anyTo++] = i;\n i += codePointSize(next);\n }\n // No match, exit immediately\n if (anyTo < len)\n return null;\n }\n // This tracks the extent of the precise (non-folded, not\n // necessarily adjacent) match\n let preciseTo = 0;\n // Tracks whether there is a match that hits only characters that\n // appear to be starting words. `byWordFolded` is set to true when\n // a case folded character is encountered in such a match\n let byWordTo = 0, byWordFolded = false;\n // If we've found a partial adjacent match, these track its state\n let adjacentTo = 0, adjacentStart = -1, adjacentEnd = -1;\n let hasLower = /[a-z]/.test(word), wordAdjacent = true;\n // Go over the option's text, scanning for the various kinds of matches\n for (let i = 0, e = Math.min(word.length, 200), prevType = 0 /* Tp.NonWord */; i < e && byWordTo < len;) {\n let next = codePointAt(word, i);\n if (direct < 0) {\n if (preciseTo < len && next == chars[preciseTo])\n precise[preciseTo++] = i;\n if (adjacentTo < len) {\n if (next == chars[adjacentTo] || next == folded[adjacentTo]) {\n if (adjacentTo == 0)\n adjacentStart = i;\n adjacentEnd = i + 1;\n adjacentTo++;\n }\n else {\n adjacentTo = 0;\n }\n }\n }\n let ch, type = next < 0xff\n ? (next >= 48 && next <= 57 || next >= 97 && next <= 122 ? 2 /* Tp.Lower */ : next >= 65 && next <= 90 ? 1 /* Tp.Upper */ : 0 /* Tp.NonWord */)\n : ((ch = fromCodePoint(next)) != ch.toLowerCase() ? 1 /* Tp.Upper */ : ch != ch.toUpperCase() ? 2 /* Tp.Lower */ : 0 /* Tp.NonWord */);\n if (!i || type == 1 /* Tp.Upper */ && hasLower || prevType == 0 /* Tp.NonWord */ && type != 0 /* Tp.NonWord */) {\n if (chars[byWordTo] == next || (folded[byWordTo] == next && (byWordFolded = true)))\n byWord[byWordTo++] = i;\n else if (byWord.length)\n wordAdjacent = false;\n }\n prevType = type;\n i += codePointSize(next);\n }\n if (byWordTo == len && byWord[0] == 0 && wordAdjacent)\n return this.result(-100 /* Penalty.ByWord */ + (byWordFolded ? -200 /* Penalty.CaseFold */ : 0), byWord, word);\n if (adjacentTo == len && adjacentStart == 0)\n return this.ret(-200 /* Penalty.CaseFold */ - word.length + (adjacentEnd == word.length ? 0 : -100 /* Penalty.NotFull */), [0, adjacentEnd]);\n if (direct > -1)\n return this.ret(-700 /* Penalty.NotStart */ - word.length, [direct, direct + this.pattern.length]);\n if (adjacentTo == len)\n return this.ret(-200 /* Penalty.CaseFold */ + -700 /* Penalty.NotStart */ - word.length, [adjacentStart, adjacentEnd]);\n if (byWordTo == len)\n return this.result(-100 /* Penalty.ByWord */ + (byWordFolded ? -200 /* Penalty.CaseFold */ : 0) + -700 /* Penalty.NotStart */ +\n (wordAdjacent ? 0 : -1100 /* Penalty.Gap */), byWord, word);\n return chars.length == 2 ? null\n : this.result((any[0] ? -700 /* Penalty.NotStart */ : 0) + -200 /* Penalty.CaseFold */ + -1100 /* Penalty.Gap */, any, word);\n }\n result(score, positions, word) {\n let result = [], i = 0;\n for (let pos of positions) {\n let to = pos + (this.astral ? codePointSize(codePointAt(word, pos)) : 1);\n if (i && result[i - 1] == pos)\n result[i - 1] = to;\n else {\n result[i++] = pos;\n result[i++] = to;\n }\n }\n return this.ret(score - word.length, result);\n }\n}\nclass StrictMatcher {\n constructor(pattern) {\n this.pattern = pattern;\n this.matched = [];\n this.score = 0;\n this.folded = pattern.toLowerCase();\n }\n match(word) {\n if (word.length < this.pattern.length)\n return null;\n let start = word.slice(0, this.pattern.length);\n let match = start == this.pattern ? 0 : start.toLowerCase() == this.folded ? -200 /* Penalty.CaseFold */ : null;\n if (match == null)\n return null;\n this.matched = [0, start.length];\n this.score = match + (word.length == this.pattern.length ? 0 : -100 /* Penalty.NotFull */);\n return this;\n }\n}\n\nconst completionConfig = /*@__PURE__*/Facet.define({\n combine(configs) {\n return combineConfig(configs, {\n activateOnTyping: true,\n activateOnCompletion: () => false,\n activateOnTypingDelay: 100,\n selectOnOpen: true,\n override: null,\n closeOnBlur: true,\n maxRenderedOptions: 100,\n defaultKeymap: true,\n tooltipClass: () => \"\",\n optionClass: () => \"\",\n aboveCursor: false,\n icons: true,\n addToOptions: [],\n positionInfo: defaultPositionInfo,\n filterStrict: false,\n compareCompletions: (a, b) => a.label.localeCompare(b.label),\n interactionDelay: 75,\n updateSyncTime: 100\n }, {\n defaultKeymap: (a, b) => a && b,\n closeOnBlur: (a, b) => a && b,\n icons: (a, b) => a && b,\n tooltipClass: (a, b) => c => joinClass(a(c), b(c)),\n optionClass: (a, b) => c => joinClass(a(c), b(c)),\n addToOptions: (a, b) => a.concat(b),\n filterStrict: (a, b) => a || b,\n });\n }\n});\nfunction joinClass(a, b) {\n return a ? b ? a + \" \" + b : a : b;\n}\nfunction defaultPositionInfo(view, list, option, info, space, tooltip) {\n let rtl = view.textDirection == Direction.RTL, left = rtl, narrow = false;\n let side = \"top\", offset, maxWidth;\n let spaceLeft = list.left - space.left, spaceRight = space.right - list.right;\n let infoWidth = info.right - info.left, infoHeight = info.bottom - info.top;\n if (left && spaceLeft < Math.min(infoWidth, spaceRight))\n left = false;\n else if (!left && spaceRight < Math.min(infoWidth, spaceLeft))\n left = true;\n if (infoWidth <= (left ? spaceLeft : spaceRight)) {\n offset = Math.max(space.top, Math.min(option.top, space.bottom - infoHeight)) - list.top;\n maxWidth = Math.min(400 /* Info.Width */, left ? spaceLeft : spaceRight);\n }\n else {\n narrow = true;\n maxWidth = Math.min(400 /* Info.Width */, (rtl ? list.right : space.right - list.left) - 30 /* Info.Margin */);\n let spaceBelow = space.bottom - list.bottom;\n if (spaceBelow >= infoHeight || spaceBelow > list.top) { // Below the completion\n offset = option.bottom - list.top;\n }\n else { // Above it\n side = \"bottom\";\n offset = list.bottom - option.top;\n }\n }\n let scaleY = (list.bottom - list.top) / tooltip.offsetHeight;\n let scaleX = (list.right - list.left) / tooltip.offsetWidth;\n return {\n style: `${side}: ${offset / scaleY}px; max-width: ${maxWidth / scaleX}px`,\n class: \"cm-completionInfo-\" + (narrow ? (rtl ? \"left-narrow\" : \"right-narrow\") : left ? \"left\" : \"right\")\n };\n}\n\nfunction optionContent(config) {\n let content = config.addToOptions.slice();\n if (config.icons)\n content.push({\n render(completion) {\n let icon = document.createElement(\"div\");\n icon.classList.add(\"cm-completionIcon\");\n if (completion.type)\n icon.classList.add(...completion.type.split(/\\s+/g).map(cls => \"cm-completionIcon-\" + cls));\n icon.setAttribute(\"aria-hidden\", \"true\");\n return icon;\n },\n position: 20\n });\n content.push({\n render(completion, _s, _v, match) {\n let labelElt = document.createElement(\"span\");\n labelElt.className = \"cm-completionLabel\";\n let label = completion.displayLabel || completion.label, off = 0;\n for (let j = 0; j < match.length;) {\n let from = match[j++], to = match[j++];\n if (from > off)\n labelElt.appendChild(document.createTextNode(label.slice(off, from)));\n let span = labelElt.appendChild(document.createElement(\"span\"));\n span.appendChild(document.createTextNode(label.slice(from, to)));\n span.className = \"cm-completionMatchedText\";\n off = to;\n }\n if (off < label.length)\n labelElt.appendChild(document.createTextNode(label.slice(off)));\n return labelElt;\n },\n position: 50\n }, {\n render(completion) {\n if (!completion.detail)\n return null;\n let detailElt = document.createElement(\"span\");\n detailElt.className = \"cm-completionDetail\";\n detailElt.textContent = completion.detail;\n return detailElt;\n },\n position: 80\n });\n return content.sort((a, b) => a.position - b.position).map(a => a.render);\n}\nfunction rangeAroundSelected(total, selected, max) {\n if (total <= max)\n return { from: 0, to: total };\n if (selected < 0)\n selected = 0;\n if (selected <= (total >> 1)) {\n let off = Math.floor(selected / max);\n return { from: off * max, to: (off + 1) * max };\n }\n let off = Math.floor((total - selected) / max);\n return { from: total - (off + 1) * max, to: total - off * max };\n}\nclass CompletionTooltip {\n constructor(view, stateField, applyCompletion) {\n this.view = view;\n this.stateField = stateField;\n this.applyCompletion = applyCompletion;\n this.info = null;\n this.infoDestroy = null;\n this.placeInfoReq = {\n read: () => this.measureInfo(),\n write: (pos) => this.placeInfo(pos),\n key: this\n };\n this.space = null;\n this.currentClass = \"\";\n let cState = view.state.field(stateField);\n let { options, selected } = cState.open;\n let config = view.state.facet(completionConfig);\n this.optionContent = optionContent(config);\n this.optionClass = config.optionClass;\n this.tooltipClass = config.tooltipClass;\n this.range = rangeAroundSelected(options.length, selected, config.maxRenderedOptions);\n this.dom = document.createElement(\"div\");\n this.dom.className = \"cm-tooltip-autocomplete\";\n this.updateTooltipClass(view.state);\n this.dom.addEventListener(\"mousedown\", (e) => {\n let { options } = view.state.field(stateField).open;\n for (let dom = e.target, match; dom && dom != this.dom; dom = dom.parentNode) {\n if (dom.nodeName == \"LI\" && (match = /-(\\d+)$/.exec(dom.id)) && +match[1] < options.length) {\n this.applyCompletion(view, options[+match[1]]);\n e.preventDefault();\n return;\n }\n }\n });\n this.dom.addEventListener(\"focusout\", (e) => {\n let state = view.state.field(this.stateField, false);\n if (state && state.tooltip && view.state.facet(completionConfig).closeOnBlur &&\n e.relatedTarget != view.contentDOM)\n view.dispatch({ effects: closeCompletionEffect.of(null) });\n });\n this.showOptions(options, cState.id);\n }\n mount() { this.updateSel(); }\n showOptions(options, id) {\n if (this.list)\n this.list.remove();\n this.list = this.dom.appendChild(this.createListBox(options, id, this.range));\n this.list.addEventListener(\"scroll\", () => {\n if (this.info)\n this.view.requestMeasure(this.placeInfoReq);\n });\n }\n update(update) {\n var _a;\n let cState = update.state.field(this.stateField);\n let prevState = update.startState.field(this.stateField);\n this.updateTooltipClass(update.state);\n if (cState != prevState) {\n let { options, selected, disabled } = cState.open;\n if (!prevState.open || prevState.open.options != options) {\n this.range = rangeAroundSelected(options.length, selected, update.state.facet(completionConfig).maxRenderedOptions);\n this.showOptions(options, cState.id);\n }\n this.updateSel();\n if (disabled != ((_a = prevState.open) === null || _a === void 0 ? void 0 : _a.disabled))\n this.dom.classList.toggle(\"cm-tooltip-autocomplete-disabled\", !!disabled);\n }\n }\n updateTooltipClass(state) {\n let cls = this.tooltipClass(state);\n if (cls != this.currentClass) {\n for (let c of this.currentClass.split(\" \"))\n if (c)\n this.dom.classList.remove(c);\n for (let c of cls.split(\" \"))\n if (c)\n this.dom.classList.add(c);\n this.currentClass = cls;\n }\n }\n positioned(space) {\n this.space = space;\n if (this.info)\n this.view.requestMeasure(this.placeInfoReq);\n }\n updateSel() {\n let cState = this.view.state.field(this.stateField), open = cState.open;\n if (open.selected > -1 && open.selected < this.range.from || open.selected >= this.range.to) {\n this.range = rangeAroundSelected(open.options.length, open.selected, this.view.state.facet(completionConfig).maxRenderedOptions);\n this.showOptions(open.options, cState.id);\n }\n if (this.updateSelectedOption(open.selected)) {\n this.destroyInfo();\n let { completion } = open.options[open.selected];\n let { info } = completion;\n if (!info)\n return;\n let infoResult = typeof info === \"string\" ? document.createTextNode(info) : info(completion);\n if (!infoResult)\n return;\n if (\"then\" in infoResult) {\n infoResult.then(obj => {\n if (obj && this.view.state.field(this.stateField, false) == cState)\n this.addInfoPane(obj, completion);\n }).catch(e => logException(this.view.state, e, \"completion info\"));\n }\n else {\n this.addInfoPane(infoResult, completion);\n }\n }\n }\n addInfoPane(content, completion) {\n this.destroyInfo();\n let wrap = this.info = document.createElement(\"div\");\n wrap.className = \"cm-tooltip cm-completionInfo\";\n if (content.nodeType != null) {\n wrap.appendChild(content);\n this.infoDestroy = null;\n }\n else {\n let { dom, destroy } = content;\n wrap.appendChild(dom);\n this.infoDestroy = destroy || null;\n }\n this.dom.appendChild(wrap);\n this.view.requestMeasure(this.placeInfoReq);\n }\n updateSelectedOption(selected) {\n let set = null;\n for (let opt = this.list.firstChild, i = this.range.from; opt; opt = opt.nextSibling, i++) {\n if (opt.nodeName != \"LI\" || !opt.id) {\n i--; // A section header\n }\n else if (i == selected) {\n if (!opt.hasAttribute(\"aria-selected\")) {\n opt.setAttribute(\"aria-selected\", \"true\");\n set = opt;\n }\n }\n else {\n if (opt.hasAttribute(\"aria-selected\"))\n opt.removeAttribute(\"aria-selected\");\n }\n }\n if (set)\n scrollIntoView(this.list, set);\n return set;\n }\n measureInfo() {\n let sel = this.dom.querySelector(\"[aria-selected]\");\n if (!sel || !this.info)\n return null;\n let listRect = this.dom.getBoundingClientRect();\n let infoRect = this.info.getBoundingClientRect();\n let selRect = sel.getBoundingClientRect();\n let space = this.space;\n if (!space) {\n let win = this.dom.ownerDocument.defaultView || window;\n space = { left: 0, top: 0, right: win.innerWidth, bottom: win.innerHeight };\n }\n if (selRect.top > Math.min(space.bottom, listRect.bottom) - 10 ||\n selRect.bottom < Math.max(space.top, listRect.top) + 10)\n return null;\n return this.view.state.facet(completionConfig).positionInfo(this.view, listRect, selRect, infoRect, space, this.dom);\n }\n placeInfo(pos) {\n if (this.info) {\n if (pos) {\n if (pos.style)\n this.info.style.cssText = pos.style;\n this.info.className = \"cm-tooltip cm-completionInfo \" + (pos.class || \"\");\n }\n else {\n this.info.style.cssText = \"top: -1e6px\";\n }\n }\n }\n createListBox(options, id, range) {\n const ul = document.createElement(\"ul\");\n ul.id = id;\n ul.setAttribute(\"role\", \"listbox\");\n ul.setAttribute(\"aria-expanded\", \"true\");\n ul.setAttribute(\"aria-label\", this.view.state.phrase(\"Completions\"));\n let curSection = null;\n for (let i = range.from; i < range.to; i++) {\n let { completion, match } = options[i], { section } = completion;\n if (section) {\n let name = typeof section == \"string\" ? section : section.name;\n if (name != curSection && (i > range.from || range.from == 0)) {\n curSection = name;\n if (typeof section != \"string\" && section.header) {\n ul.appendChild(section.header(section));\n }\n else {\n let header = ul.appendChild(document.createElement(\"completion-section\"));\n header.textContent = name;\n }\n }\n }\n const li = ul.appendChild(document.createElement(\"li\"));\n li.id = id + \"-\" + i;\n li.setAttribute(\"role\", \"option\");\n let cls = this.optionClass(completion);\n if (cls)\n li.className = cls;\n for (let source of this.optionContent) {\n let node = source(completion, this.view.state, this.view, match);\n if (node)\n li.appendChild(node);\n }\n }\n if (range.from)\n ul.classList.add(\"cm-completionListIncompleteTop\");\n if (range.to < options.length)\n ul.classList.add(\"cm-completionListIncompleteBottom\");\n return ul;\n }\n destroyInfo() {\n if (this.info) {\n if (this.infoDestroy)\n this.infoDestroy();\n this.info.remove();\n this.info = null;\n }\n }\n destroy() {\n this.destroyInfo();\n }\n}\nfunction completionTooltip(stateField, applyCompletion) {\n return (view) => new CompletionTooltip(view, stateField, applyCompletion);\n}\nfunction scrollIntoView(container, element) {\n let parent = container.getBoundingClientRect();\n let self = element.getBoundingClientRect();\n let scaleY = parent.height / container.offsetHeight;\n if (self.top < parent.top)\n container.scrollTop -= (parent.top - self.top) / scaleY;\n else if (self.bottom > parent.bottom)\n container.scrollTop += (self.bottom - parent.bottom) / scaleY;\n}\n\n// Used to pick a preferred option when two options with the same\n// label occur in the result.\nfunction score(option) {\n return (option.boost || 0) * 100 + (option.apply ? 10 : 0) + (option.info ? 5 : 0) +\n (option.type ? 1 : 0);\n}\nfunction sortOptions(active, state) {\n let options = [];\n let sections = null;\n let addOption = (option) => {\n options.push(option);\n let { section } = option.completion;\n if (section) {\n if (!sections)\n sections = [];\n let name = typeof section == \"string\" ? section : section.name;\n if (!sections.some(s => s.name == name))\n sections.push(typeof section == \"string\" ? { name } : section);\n }\n };\n let conf = state.facet(completionConfig);\n for (let a of active)\n if (a.hasResult()) {\n let getMatch = a.result.getMatch;\n if (a.result.filter === false) {\n for (let option of a.result.options) {\n addOption(new Option(option, a.source, getMatch ? getMatch(option) : [], 1e9 - options.length));\n }\n }\n else {\n let pattern = state.sliceDoc(a.from, a.to), match;\n let matcher = conf.filterStrict ? new StrictMatcher(pattern) : new FuzzyMatcher(pattern);\n for (let option of a.result.options)\n if (match = matcher.match(option.label)) {\n let matched = !option.displayLabel ? match.matched : getMatch ? getMatch(option, match.matched) : [];\n addOption(new Option(option, a.source, matched, match.score + (option.boost || 0)));\n }\n }\n }\n if (sections) {\n let sectionOrder = Object.create(null), pos = 0;\n let cmp = (a, b) => { var _a, _b; return ((_a = a.rank) !== null && _a !== void 0 ? _a : 1e9) - ((_b = b.rank) !== null && _b !== void 0 ? _b : 1e9) || (a.name < b.name ? -1 : 1); };\n for (let s of sections.sort(cmp)) {\n pos -= 1e5;\n sectionOrder[s.name] = pos;\n }\n for (let option of options) {\n let { section } = option.completion;\n if (section)\n option.score += sectionOrder[typeof section == \"string\" ? section : section.name];\n }\n }\n let result = [], prev = null;\n let compare = conf.compareCompletions;\n for (let opt of options.sort((a, b) => (b.score - a.score) || compare(a.completion, b.completion))) {\n let cur = opt.completion;\n if (!prev || prev.label != cur.label || prev.detail != cur.detail ||\n (prev.type != null && cur.type != null && prev.type != cur.type) ||\n prev.apply != cur.apply || prev.boost != cur.boost)\n result.push(opt);\n else if (score(opt.completion) > score(prev))\n result[result.length - 1] = opt;\n prev = opt.completion;\n }\n return result;\n}\nclass CompletionDialog {\n constructor(options, attrs, tooltip, timestamp, selected, disabled) {\n this.options = options;\n this.attrs = attrs;\n this.tooltip = tooltip;\n this.timestamp = timestamp;\n this.selected = selected;\n this.disabled = disabled;\n }\n setSelected(selected, id) {\n return selected == this.selected || selected >= this.options.length ? this\n : new CompletionDialog(this.options, makeAttrs(id, selected), this.tooltip, this.timestamp, selected, this.disabled);\n }\n static build(active, state, id, prev, conf) {\n let options = sortOptions(active, state);\n if (!options.length) {\n return prev && active.some(a => a.state == 1 /* State.Pending */) ?\n new CompletionDialog(prev.options, prev.attrs, prev.tooltip, prev.timestamp, prev.selected, true) : null;\n }\n let selected = state.facet(completionConfig).selectOnOpen ? 0 : -1;\n if (prev && prev.selected != selected && prev.selected != -1) {\n let selectedValue = prev.options[prev.selected].completion;\n for (let i = 0; i < options.length; i++)\n if (options[i].completion == selectedValue) {\n selected = i;\n break;\n }\n }\n return new CompletionDialog(options, makeAttrs(id, selected), {\n pos: active.reduce((a, b) => b.hasResult() ? Math.min(a, b.from) : a, 1e8),\n create: createTooltip,\n above: conf.aboveCursor,\n }, prev ? prev.timestamp : Date.now(), selected, false);\n }\n map(changes) {\n return new CompletionDialog(this.options, this.attrs, Object.assign(Object.assign({}, this.tooltip), { pos: changes.mapPos(this.tooltip.pos) }), this.timestamp, this.selected, this.disabled);\n }\n}\nclass CompletionState {\n constructor(active, id, open) {\n this.active = active;\n this.id = id;\n this.open = open;\n }\n static start() {\n return new CompletionState(none, \"cm-ac-\" + Math.floor(Math.random() * 2e6).toString(36), null);\n }\n update(tr) {\n let { state } = tr, conf = state.facet(completionConfig);\n let sources = conf.override ||\n state.languageDataAt(\"autocomplete\", cur(state)).map(asSource);\n let active = sources.map(source => {\n let value = this.active.find(s => s.source == source) ||\n new ActiveSource(source, this.active.some(a => a.state != 0 /* State.Inactive */) ? 1 /* State.Pending */ : 0 /* State.Inactive */);\n return value.update(tr, conf);\n });\n if (active.length == this.active.length && active.every((a, i) => a == this.active[i]))\n active = this.active;\n let open = this.open;\n if (open && tr.docChanged)\n open = open.map(tr.changes);\n if (tr.selection || active.some(a => a.hasResult() && tr.changes.touchesRange(a.from, a.to)) ||\n !sameResults(active, this.active))\n open = CompletionDialog.build(active, state, this.id, open, conf);\n else if (open && open.disabled && !active.some(a => a.state == 1 /* State.Pending */))\n open = null;\n if (!open && active.every(a => a.state != 1 /* State.Pending */) && active.some(a => a.hasResult()))\n active = active.map(a => a.hasResult() ? new ActiveSource(a.source, 0 /* State.Inactive */) : a);\n for (let effect of tr.effects)\n if (effect.is(setSelectedEffect))\n open = open && open.setSelected(effect.value, this.id);\n return active == this.active && open == this.open ? this : new CompletionState(active, this.id, open);\n }\n get tooltip() { return this.open ? this.open.tooltip : null; }\n get attrs() { return this.open ? this.open.attrs : baseAttrs; }\n}\nfunction sameResults(a, b) {\n if (a == b)\n return true;\n for (let iA = 0, iB = 0;;) {\n while (iA < a.length && !a[iA].hasResult)\n iA++;\n while (iB < b.length && !b[iB].hasResult)\n iB++;\n let endA = iA == a.length, endB = iB == b.length;\n if (endA || endB)\n return endA == endB;\n if (a[iA++].result != b[iB++].result)\n return false;\n }\n}\nconst baseAttrs = {\n \"aria-autocomplete\": \"list\"\n};\nfunction makeAttrs(id, selected) {\n let result = {\n \"aria-autocomplete\": \"list\",\n \"aria-haspopup\": \"listbox\",\n \"aria-controls\": id\n };\n if (selected > -1)\n result[\"aria-activedescendant\"] = id + \"-\" + selected;\n return result;\n}\nconst none = [];\nfunction getUserEvent(tr, conf) {\n if (tr.isUserEvent(\"input.complete\")) {\n let completion = tr.annotation(pickedCompletion);\n if (completion && conf.activateOnCompletion(completion))\n return \"input\";\n }\n return tr.isUserEvent(\"input.type\") ? \"input\" : tr.isUserEvent(\"delete.backward\") ? \"delete\" : null;\n}\nclass ActiveSource {\n constructor(source, state, explicitPos = -1) {\n this.source = source;\n this.state = state;\n this.explicitPos = explicitPos;\n }\n hasResult() { return false; }\n update(tr, conf) {\n let event = getUserEvent(tr, conf), value = this;\n if (event)\n value = value.handleUserEvent(tr, event, conf);\n else if (tr.docChanged)\n value = value.handleChange(tr);\n else if (tr.selection && value.state != 0 /* State.Inactive */)\n value = new ActiveSource(value.source, 0 /* State.Inactive */);\n for (let effect of tr.effects) {\n if (effect.is(startCompletionEffect))\n value = new ActiveSource(value.source, 1 /* State.Pending */, effect.value ? cur(tr.state) : -1);\n else if (effect.is(closeCompletionEffect))\n value = new ActiveSource(value.source, 0 /* State.Inactive */);\n else if (effect.is(setActiveEffect))\n for (let active of effect.value)\n if (active.source == value.source)\n value = active;\n }\n return value;\n }\n handleUserEvent(tr, type, conf) {\n return type == \"delete\" || !conf.activateOnTyping ? this.map(tr.changes) : new ActiveSource(this.source, 1 /* State.Pending */);\n }\n handleChange(tr) {\n return tr.changes.touchesRange(cur(tr.startState)) ? new ActiveSource(this.source, 0 /* State.Inactive */) : this.map(tr.changes);\n }\n map(changes) {\n return changes.empty || this.explicitPos < 0 ? this : new ActiveSource(this.source, this.state, changes.mapPos(this.explicitPos));\n }\n}\nclass ActiveResult extends ActiveSource {\n constructor(source, explicitPos, result, from, to) {\n super(source, 2 /* State.Result */, explicitPos);\n this.result = result;\n this.from = from;\n this.to = to;\n }\n hasResult() { return true; }\n handleUserEvent(tr, type, conf) {\n var _a;\n let result = this.result;\n if (result.map && !tr.changes.empty)\n result = result.map(result, tr.changes);\n let from = tr.changes.mapPos(this.from), to = tr.changes.mapPos(this.to, 1);\n let pos = cur(tr.state);\n if ((this.explicitPos < 0 ? pos <= from : pos < this.from) ||\n pos > to || !result ||\n type == \"delete\" && cur(tr.startState) == this.from)\n return new ActiveSource(this.source, type == \"input\" && conf.activateOnTyping ? 1 /* State.Pending */ : 0 /* State.Inactive */);\n let explicitPos = this.explicitPos < 0 ? -1 : tr.changes.mapPos(this.explicitPos);\n if (checkValid(result.validFor, tr.state, from, to))\n return new ActiveResult(this.source, explicitPos, result, from, to);\n if (result.update &&\n (result = result.update(result, from, to, new CompletionContext(tr.state, pos, explicitPos >= 0))))\n return new ActiveResult(this.source, explicitPos, result, result.from, (_a = result.to) !== null && _a !== void 0 ? _a : cur(tr.state));\n return new ActiveSource(this.source, 1 /* State.Pending */, explicitPos);\n }\n handleChange(tr) {\n return tr.changes.touchesRange(this.from, this.to) ? new ActiveSource(this.source, 0 /* State.Inactive */) : this.map(tr.changes);\n }\n map(mapping) {\n if (mapping.empty)\n return this;\n let result = this.result.map ? this.result.map(this.result, mapping) : this.result;\n if (!result)\n return new ActiveSource(this.source, 0 /* State.Inactive */);\n return new ActiveResult(this.source, this.explicitPos < 0 ? -1 : mapping.mapPos(this.explicitPos), this.result, mapping.mapPos(this.from), mapping.mapPos(this.to, 1));\n }\n}\nfunction checkValid(validFor, state, from, to) {\n if (!validFor)\n return false;\n let text = state.sliceDoc(from, to);\n return typeof validFor == \"function\" ? validFor(text, from, to, state) : ensureAnchor(validFor, true).test(text);\n}\nconst setActiveEffect = /*@__PURE__*/StateEffect.define({\n map(sources, mapping) { return sources.map(s => s.map(mapping)); }\n});\nconst setSelectedEffect = /*@__PURE__*/StateEffect.define();\nconst completionState = /*@__PURE__*/StateField.define({\n create() { return CompletionState.start(); },\n update(value, tr) { return value.update(tr); },\n provide: f => [\n showTooltip.from(f, val => val.tooltip),\n EditorView.contentAttributes.from(f, state => state.attrs)\n ]\n});\nfunction applyCompletion(view, option) {\n const apply = option.completion.apply || option.completion.label;\n let result = view.state.field(completionState).active.find(a => a.source == option.source);\n if (!(result instanceof ActiveResult))\n return false;\n if (typeof apply == \"string\")\n view.dispatch(Object.assign(Object.assign({}, insertCompletionText(view.state, apply, result.from, result.to)), { annotations: pickedCompletion.of(option.completion) }));\n else\n apply(view, option.completion, result.from, result.to);\n return true;\n}\nconst createTooltip = /*@__PURE__*/completionTooltip(completionState, applyCompletion);\n\n/**\nReturns a command that moves the completion selection forward or\nbackward by the given amount.\n*/\nfunction moveCompletionSelection(forward, by = \"option\") {\n return (view) => {\n let cState = view.state.field(completionState, false);\n if (!cState || !cState.open || cState.open.disabled ||\n Date.now() - cState.open.timestamp < view.state.facet(completionConfig).interactionDelay)\n return false;\n let step = 1, tooltip;\n if (by == \"page\" && (tooltip = getTooltip(view, cState.open.tooltip)))\n step = Math.max(2, Math.floor(tooltip.dom.offsetHeight /\n tooltip.dom.querySelector(\"li\").offsetHeight) - 1);\n let { length } = cState.open.options;\n let selected = cState.open.selected > -1 ? cState.open.selected + step * (forward ? 1 : -1) : forward ? 0 : length - 1;\n if (selected < 0)\n selected = by == \"page\" ? 0 : length - 1;\n else if (selected >= length)\n selected = by == \"page\" ? length - 1 : 0;\n view.dispatch({ effects: setSelectedEffect.of(selected) });\n return true;\n };\n}\n/**\nAccept the current completion.\n*/\nconst acceptCompletion = (view) => {\n let cState = view.state.field(completionState, false);\n if (view.state.readOnly || !cState || !cState.open || cState.open.selected < 0 || cState.open.disabled ||\n Date.now() - cState.open.timestamp < view.state.facet(completionConfig).interactionDelay)\n return false;\n return applyCompletion(view, cState.open.options[cState.open.selected]);\n};\n/**\nExplicitly start autocompletion.\n*/\nconst startCompletion = (view) => {\n let cState = view.state.field(completionState, false);\n if (!cState)\n return false;\n view.dispatch({ effects: startCompletionEffect.of(true) });\n return true;\n};\n/**\nClose the currently active completion.\n*/\nconst closeCompletion = (view) => {\n let cState = view.state.field(completionState, false);\n if (!cState || !cState.active.some(a => a.state != 0 /* State.Inactive */))\n return false;\n view.dispatch({ effects: closeCompletionEffect.of(null) });\n return true;\n};\nclass RunningQuery {\n constructor(active, context) {\n this.active = active;\n this.context = context;\n this.time = Date.now();\n this.updates = [];\n // Note that 'undefined' means 'not done yet', whereas 'null' means\n // 'query returned null'.\n this.done = undefined;\n }\n}\nconst MaxUpdateCount = 50, MinAbortTime = 1000;\nconst completionPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n constructor(view) {\n this.view = view;\n this.debounceUpdate = -1;\n this.running = [];\n this.debounceAccept = -1;\n this.pendingStart = false;\n this.composing = 0 /* CompositionState.None */;\n for (let active of view.state.field(completionState).active)\n if (active.state == 1 /* State.Pending */)\n this.startQuery(active);\n }\n update(update) {\n let cState = update.state.field(completionState);\n let conf = update.state.facet(completionConfig);\n if (!update.selectionSet && !update.docChanged && update.startState.field(completionState) == cState)\n return;\n let doesReset = update.transactions.some(tr => {\n return (tr.selection || tr.docChanged) && !getUserEvent(tr, conf);\n });\n for (let i = 0; i < this.running.length; i++) {\n let query = this.running[i];\n if (doesReset ||\n query.updates.length + update.transactions.length > MaxUpdateCount && Date.now() - query.time > MinAbortTime) {\n for (let handler of query.context.abortListeners) {\n try {\n handler();\n }\n catch (e) {\n logException(this.view.state, e);\n }\n }\n query.context.abortListeners = null;\n this.running.splice(i--, 1);\n }\n else {\n query.updates.push(...update.transactions);\n }\n }\n if (this.debounceUpdate > -1)\n clearTimeout(this.debounceUpdate);\n if (update.transactions.some(tr => tr.effects.some(e => e.is(startCompletionEffect))))\n this.pendingStart = true;\n let delay = this.pendingStart ? 50 : conf.activateOnTypingDelay;\n this.debounceUpdate = cState.active.some(a => a.state == 1 /* State.Pending */ && !this.running.some(q => q.active.source == a.source))\n ? setTimeout(() => this.startUpdate(), delay) : -1;\n if (this.composing != 0 /* CompositionState.None */)\n for (let tr of update.transactions) {\n if (getUserEvent(tr, conf) == \"input\")\n this.composing = 2 /* CompositionState.Changed */;\n else if (this.composing == 2 /* CompositionState.Changed */ && tr.selection)\n this.composing = 3 /* CompositionState.ChangedAndMoved */;\n }\n }\n startUpdate() {\n this.debounceUpdate = -1;\n this.pendingStart = false;\n let { state } = this.view, cState = state.field(completionState);\n for (let active of cState.active) {\n if (active.state == 1 /* State.Pending */ && !this.running.some(r => r.active.source == active.source))\n this.startQuery(active);\n }\n }\n startQuery(active) {\n let { state } = this.view, pos = cur(state);\n let context = new CompletionContext(state, pos, active.explicitPos == pos);\n let pending = new RunningQuery(active, context);\n this.running.push(pending);\n Promise.resolve(active.source(context)).then(result => {\n if (!pending.context.aborted) {\n pending.done = result || null;\n this.scheduleAccept();\n }\n }, err => {\n this.view.dispatch({ effects: closeCompletionEffect.of(null) });\n logException(this.view.state, err);\n });\n }\n scheduleAccept() {\n if (this.running.every(q => q.done !== undefined))\n this.accept();\n else if (this.debounceAccept < 0)\n this.debounceAccept = setTimeout(() => this.accept(), this.view.state.facet(completionConfig).updateSyncTime);\n }\n // For each finished query in this.running, try to create a result\n // or, if appropriate, restart the query.\n accept() {\n var _a;\n if (this.debounceAccept > -1)\n clearTimeout(this.debounceAccept);\n this.debounceAccept = -1;\n let updated = [];\n let conf = this.view.state.facet(completionConfig);\n for (let i = 0; i < this.running.length; i++) {\n let query = this.running[i];\n if (query.done === undefined)\n continue;\n this.running.splice(i--, 1);\n if (query.done) {\n let active = new ActiveResult(query.active.source, query.active.explicitPos, query.done, query.done.from, (_a = query.done.to) !== null && _a !== void 0 ? _a : cur(query.updates.length ? query.updates[0].startState : this.view.state));\n // Replay the transactions that happened since the start of\n // the request and see if that preserves the result\n for (let tr of query.updates)\n active = active.update(tr, conf);\n if (active.hasResult()) {\n updated.push(active);\n continue;\n }\n }\n let current = this.view.state.field(completionState).active.find(a => a.source == query.active.source);\n if (current && current.state == 1 /* State.Pending */) {\n if (query.done == null) {\n // Explicitly failed. Should clear the pending status if it\n // hasn't been re-set in the meantime.\n let active = new ActiveSource(query.active.source, 0 /* State.Inactive */);\n for (let tr of query.updates)\n active = active.update(tr, conf);\n if (active.state != 1 /* State.Pending */)\n updated.push(active);\n }\n else {\n // Cleared by subsequent transactions. Restart.\n this.startQuery(current);\n }\n }\n }\n if (updated.length)\n this.view.dispatch({ effects: setActiveEffect.of(updated) });\n }\n}, {\n eventHandlers: {\n blur(event) {\n let state = this.view.state.field(completionState, false);\n if (state && state.tooltip && this.view.state.facet(completionConfig).closeOnBlur) {\n let dialog = state.open && getTooltip(this.view, state.open.tooltip);\n if (!dialog || !dialog.dom.contains(event.relatedTarget))\n setTimeout(() => this.view.dispatch({ effects: closeCompletionEffect.of(null) }), 10);\n }\n },\n compositionstart() {\n this.composing = 1 /* CompositionState.Started */;\n },\n compositionend() {\n if (this.composing == 3 /* CompositionState.ChangedAndMoved */) {\n // Safari fires compositionend events synchronously, possibly\n // from inside an update, so dispatch asynchronously to avoid reentrancy\n setTimeout(() => this.view.dispatch({ effects: startCompletionEffect.of(false) }), 20);\n }\n this.composing = 0 /* CompositionState.None */;\n }\n }\n});\nconst windows = typeof navigator == \"object\" && /*@__PURE__*//Win/.test(navigator.platform);\nconst commitCharacters = /*@__PURE__*/Prec.highest(/*@__PURE__*/EditorView.domEventHandlers({\n keydown(event, view) {\n let field = view.state.field(completionState, false);\n if (!field || !field.open || field.open.disabled || field.open.selected < 0 ||\n event.key.length > 1 || event.ctrlKey && !(windows && event.altKey) || event.metaKey)\n return false;\n let option = field.open.options[field.open.selected];\n let result = field.active.find(a => a.source == option.source);\n let commitChars = option.completion.commitCharacters || result.result.commitCharacters;\n if (commitChars && commitChars.indexOf(event.key) > -1)\n applyCompletion(view, option);\n return false;\n }\n}));\n\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n \".cm-tooltip.cm-tooltip-autocomplete\": {\n \"& > ul\": {\n fontFamily: \"monospace\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden auto\",\n maxWidth_fallback: \"700px\",\n maxWidth: \"min(700px, 95vw)\",\n minWidth: \"250px\",\n maxHeight: \"10em\",\n height: \"100%\",\n listStyle: \"none\",\n margin: 0,\n padding: 0,\n \"& > li, & > completion-section\": {\n padding: \"1px 3px\",\n lineHeight: 1.2\n },\n \"& > li\": {\n overflowX: \"hidden\",\n textOverflow: \"ellipsis\",\n cursor: \"pointer\"\n },\n \"& > completion-section\": {\n display: \"list-item\",\n borderBottom: \"1px solid silver\",\n paddingLeft: \"0.5em\",\n opacity: 0.7\n }\n }\n },\n \"&light .cm-tooltip-autocomplete ul li[aria-selected]\": {\n background: \"#17c\",\n color: \"white\",\n },\n \"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]\": {\n background: \"#777\",\n },\n \"&dark .cm-tooltip-autocomplete ul li[aria-selected]\": {\n background: \"#347\",\n color: \"white\",\n },\n \"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]\": {\n background: \"#444\",\n },\n \".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after\": {\n content: '\"···\"',\n opacity: 0.5,\n display: \"block\",\n textAlign: \"center\"\n },\n \".cm-tooltip.cm-completionInfo\": {\n position: \"absolute\",\n padding: \"3px 9px\",\n width: \"max-content\",\n maxWidth: `${400 /* Info.Width */}px`,\n boxSizing: \"border-box\"\n },\n \".cm-completionInfo.cm-completionInfo-left\": { right: \"100%\" },\n \".cm-completionInfo.cm-completionInfo-right\": { left: \"100%\" },\n \".cm-completionInfo.cm-completionInfo-left-narrow\": { right: `${30 /* Info.Margin */}px` },\n \".cm-completionInfo.cm-completionInfo-right-narrow\": { left: `${30 /* Info.Margin */}px` },\n \"&light .cm-snippetField\": { backgroundColor: \"#00000022\" },\n \"&dark .cm-snippetField\": { backgroundColor: \"#ffffff22\" },\n \".cm-snippetFieldPosition\": {\n verticalAlign: \"text-top\",\n width: 0,\n height: \"1.15em\",\n display: \"inline-block\",\n margin: \"0 -0.7px -.7em\",\n borderLeft: \"1.4px dotted #888\"\n },\n \".cm-completionMatchedText\": {\n textDecoration: \"underline\"\n },\n \".cm-completionDetail\": {\n marginLeft: \"0.5em\",\n fontStyle: \"italic\"\n },\n \".cm-completionIcon\": {\n fontSize: \"90%\",\n width: \".8em\",\n display: \"inline-block\",\n textAlign: \"center\",\n paddingRight: \".6em\",\n opacity: \"0.6\",\n boxSizing: \"content-box\"\n },\n \".cm-completionIcon-function, .cm-completionIcon-method\": {\n \"&:after\": { content: \"'ƒ'\" }\n },\n \".cm-completionIcon-class\": {\n \"&:after\": { content: \"'○'\" }\n },\n \".cm-completionIcon-interface\": {\n \"&:after\": { content: \"'◌'\" }\n },\n \".cm-completionIcon-variable\": {\n \"&:after\": { content: \"'𝑥'\" }\n },\n \".cm-completionIcon-constant\": {\n \"&:after\": { content: \"'𝐶'\" }\n },\n \".cm-completionIcon-type\": {\n \"&:after\": { content: \"'𝑡'\" }\n },\n \".cm-completionIcon-enum\": {\n \"&:after\": { content: \"'∪'\" }\n },\n \".cm-completionIcon-property\": {\n \"&:after\": { content: \"'□'\" }\n },\n \".cm-completionIcon-keyword\": {\n \"&:after\": { content: \"'🔑\\uFE0E'\" } // Disable emoji rendering\n },\n \".cm-completionIcon-namespace\": {\n \"&:after\": { content: \"'▢'\" }\n },\n \".cm-completionIcon-text\": {\n \"&:after\": { content: \"'abc'\", fontSize: \"50%\", verticalAlign: \"middle\" }\n }\n});\n\nclass FieldPos {\n constructor(field, line, from, to) {\n this.field = field;\n this.line = line;\n this.from = from;\n this.to = to;\n }\n}\nclass FieldRange {\n constructor(field, from, to) {\n this.field = field;\n this.from = from;\n this.to = to;\n }\n map(changes) {\n let from = changes.mapPos(this.from, -1, MapMode.TrackDel);\n let to = changes.mapPos(this.to, 1, MapMode.TrackDel);\n return from == null || to == null ? null : new FieldRange(this.field, from, to);\n }\n}\nclass Snippet {\n constructor(lines, fieldPositions) {\n this.lines = lines;\n this.fieldPositions = fieldPositions;\n }\n instantiate(state, pos) {\n let text = [], lineStart = [pos];\n let lineObj = state.doc.lineAt(pos), baseIndent = /^\\s*/.exec(lineObj.text)[0];\n for (let line of this.lines) {\n if (text.length) {\n let indent = baseIndent, tabs = /^\\t*/.exec(line)[0].length;\n for (let i = 0; i < tabs; i++)\n indent += state.facet(indentUnit);\n lineStart.push(pos + indent.length - tabs);\n line = indent + line.slice(tabs);\n }\n text.push(line);\n pos += line.length + 1;\n }\n let ranges = this.fieldPositions.map(pos => new FieldRange(pos.field, lineStart[pos.line] + pos.from, lineStart[pos.line] + pos.to));\n return { text, ranges };\n }\n static parse(template) {\n let fields = [];\n let lines = [], positions = [], m;\n for (let line of template.split(/\\r\\n?|\\n/)) {\n while (m = /[#$]\\{(?:(\\d+)(?::([^}]*))?|((?:\\\\[{}]|[^}])*))\\}/.exec(line)) {\n let seq = m[1] ? +m[1] : null, rawName = m[2] || m[3] || \"\", found = -1;\n let name = rawName.replace(/\\\\[{}]/g, m => m[1]);\n for (let i = 0; i < fields.length; i++) {\n if (seq != null ? fields[i].seq == seq : name ? fields[i].name == name : false)\n found = i;\n }\n if (found < 0) {\n let i = 0;\n while (i < fields.length && (seq == null || (fields[i].seq != null && fields[i].seq < seq)))\n i++;\n fields.splice(i, 0, { seq, name });\n found = i;\n for (let pos of positions)\n if (pos.field >= found)\n pos.field++;\n }\n positions.push(new FieldPos(found, lines.length, m.index, m.index + name.length));\n line = line.slice(0, m.index) + rawName + line.slice(m.index + m[0].length);\n }\n line = line.replace(/\\\\([{}])/g, (_, brace, index) => {\n for (let pos of positions)\n if (pos.line == lines.length && pos.from > index) {\n pos.from--;\n pos.to--;\n }\n return brace;\n });\n lines.push(line);\n }\n return new Snippet(lines, positions);\n }\n}\nlet fieldMarker = /*@__PURE__*/Decoration.widget({ widget: /*@__PURE__*/new class extends WidgetType {\n toDOM() {\n let span = document.createElement(\"span\");\n span.className = \"cm-snippetFieldPosition\";\n return span;\n }\n ignoreEvent() { return false; }\n } });\nlet fieldRange = /*@__PURE__*/Decoration.mark({ class: \"cm-snippetField\" });\nclass ActiveSnippet {\n constructor(ranges, active) {\n this.ranges = ranges;\n this.active = active;\n this.deco = Decoration.set(ranges.map(r => (r.from == r.to ? fieldMarker : fieldRange).range(r.from, r.to)));\n }\n map(changes) {\n let ranges = [];\n for (let r of this.ranges) {\n let mapped = r.map(changes);\n if (!mapped)\n return null;\n ranges.push(mapped);\n }\n return new ActiveSnippet(ranges, this.active);\n }\n selectionInsideField(sel) {\n return sel.ranges.every(range => this.ranges.some(r => r.field == this.active && r.from <= range.from && r.to >= range.to));\n }\n}\nconst setActive = /*@__PURE__*/StateEffect.define({\n map(value, changes) { return value && value.map(changes); }\n});\nconst moveToField = /*@__PURE__*/StateEffect.define();\nconst snippetState = /*@__PURE__*/StateField.define({\n create() { return null; },\n update(value, tr) {\n for (let effect of tr.effects) {\n if (effect.is(setActive))\n return effect.value;\n if (effect.is(moveToField) && value)\n return new ActiveSnippet(value.ranges, effect.value);\n }\n if (value && tr.docChanged)\n value = value.map(tr.changes);\n if (value && tr.selection && !value.selectionInsideField(tr.selection))\n value = null;\n return value;\n },\n provide: f => EditorView.decorations.from(f, val => val ? val.deco : Decoration.none)\n});\nfunction fieldSelection(ranges, field) {\n return EditorSelection.create(ranges.filter(r => r.field == field).map(r => EditorSelection.range(r.from, r.to)));\n}\n/**\nConvert a snippet template to a function that can\n[apply](https://codemirror.net/6/docs/ref/#autocomplete.Completion.apply) it. Snippets are written\nusing syntax like this:\n\n \"for (let ${index} = 0; ${index} < ${end}; ${index}++) {\\n\\t${}\\n}\"\n\nEach `${}` placeholder (you may also use `#{}`) indicates a field\nthat the user can fill in. Its name, if any, will be the default\ncontent for the field.\n\nWhen the snippet is activated by calling the returned function,\nthe code is inserted at the given position. Newlines in the\ntemplate are indented by the indentation of the start line, plus\none [indent unit](https://codemirror.net/6/docs/ref/#language.indentUnit) per tab character after\nthe newline.\n\nOn activation, (all instances of) the first field are selected.\nThe user can move between fields with Tab and Shift-Tab as long as\nthe fields are active. Moving to the last field or moving the\ncursor out of the current field deactivates the fields.\n\nThe order of fields defaults to textual order, but you can add\nnumbers to placeholders (`${1}` or `${1:defaultText}`) to provide\na custom order.\n\nTo include a literal `{` or `}` in your template, put a backslash\nin front of it. This will be removed and the brace will not be\ninterpreted as indicating a placeholder.\n*/\nfunction snippet(template) {\n let snippet = Snippet.parse(template);\n return (editor, completion, from, to) => {\n let { text, ranges } = snippet.instantiate(editor.state, from);\n let spec = {\n changes: { from, to, insert: Text.of(text) },\n scrollIntoView: true,\n annotations: completion ? [pickedCompletion.of(completion), Transaction.userEvent.of(\"input.complete\")] : undefined\n };\n if (ranges.length)\n spec.selection = fieldSelection(ranges, 0);\n if (ranges.some(r => r.field > 0)) {\n let active = new ActiveSnippet(ranges, 0);\n let effects = spec.effects = [setActive.of(active)];\n if (editor.state.field(snippetState, false) === undefined)\n effects.push(StateEffect.appendConfig.of([snippetState, addSnippetKeymap, snippetPointerHandler, baseTheme]));\n }\n editor.dispatch(editor.state.update(spec));\n };\n}\nfunction moveField(dir) {\n return ({ state, dispatch }) => {\n let active = state.field(snippetState, false);\n if (!active || dir < 0 && active.active == 0)\n return false;\n let next = active.active + dir, last = dir > 0 && !active.ranges.some(r => r.field == next + dir);\n dispatch(state.update({\n selection: fieldSelection(active.ranges, next),\n effects: setActive.of(last ? null : new ActiveSnippet(active.ranges, next)),\n scrollIntoView: true\n }));\n return true;\n };\n}\n/**\nA command that clears the active snippet, if any.\n*/\nconst clearSnippet = ({ state, dispatch }) => {\n let active = state.field(snippetState, false);\n if (!active)\n return false;\n dispatch(state.update({ effects: setActive.of(null) }));\n return true;\n};\n/**\nMove to the next snippet field, if available.\n*/\nconst nextSnippetField = /*@__PURE__*/moveField(1);\n/**\nMove to the previous snippet field, if available.\n*/\nconst prevSnippetField = /*@__PURE__*/moveField(-1);\n/**\nCheck if there is an active snippet with a next field for\n`nextSnippetField` to move to.\n*/\nfunction hasNextSnippetField(state) {\n let active = state.field(snippetState, false);\n return !!(active && active.ranges.some(r => r.field == active.active + 1));\n}\n/**\nReturns true if there is an active snippet and a previous field\nfor `prevSnippetField` to move to.\n*/\nfunction hasPrevSnippetField(state) {\n let active = state.field(snippetState, false);\n return !!(active && active.active > 0);\n}\nconst defaultSnippetKeymap = [\n { key: \"Tab\", run: nextSnippetField, shift: prevSnippetField },\n { key: \"Escape\", run: clearSnippet }\n];\n/**\nA facet that can be used to configure the key bindings used by\nsnippets. The default binds Tab to\n[`nextSnippetField`](https://codemirror.net/6/docs/ref/#autocomplete.nextSnippetField), Shift-Tab to\n[`prevSnippetField`](https://codemirror.net/6/docs/ref/#autocomplete.prevSnippetField), and Escape\nto [`clearSnippet`](https://codemirror.net/6/docs/ref/#autocomplete.clearSnippet).\n*/\nconst snippetKeymap = /*@__PURE__*/Facet.define({\n combine(maps) { return maps.length ? maps[0] : defaultSnippetKeymap; }\n});\nconst addSnippetKeymap = /*@__PURE__*/Prec.highest(/*@__PURE__*/keymap.compute([snippetKeymap], state => state.facet(snippetKeymap)));\n/**\nCreate a completion from a snippet. Returns an object with the\nproperties from `completion`, plus an `apply` function that\napplies the snippet.\n*/\nfunction snippetCompletion(template, completion) {\n return Object.assign(Object.assign({}, completion), { apply: snippet(template) });\n}\nconst snippetPointerHandler = /*@__PURE__*/EditorView.domEventHandlers({\n mousedown(event, view) {\n let active = view.state.field(snippetState, false), pos;\n if (!active || (pos = view.posAtCoords({ x: event.clientX, y: event.clientY })) == null)\n return false;\n let match = active.ranges.find(r => r.from <= pos && r.to >= pos);\n if (!match || match.field == active.active)\n return false;\n view.dispatch({\n selection: fieldSelection(active.ranges, match.field),\n effects: setActive.of(active.ranges.some(r => r.field > match.field)\n ? new ActiveSnippet(active.ranges, match.field) : null),\n scrollIntoView: true\n });\n return true;\n }\n});\n\nfunction wordRE(wordChars) {\n let escaped = wordChars.replace(/[\\]\\-\\\\]/g, \"\\\\$&\");\n try {\n return new RegExp(`[\\\\p{Alphabetic}\\\\p{Number}_${escaped}]+`, \"ug\");\n }\n catch (_a) {\n return new RegExp(`[\\w${escaped}]`, \"g\");\n }\n}\nfunction mapRE(re, f) {\n return new RegExp(f(re.source), re.unicode ? \"u\" : \"\");\n}\nconst wordCaches = /*@__PURE__*/Object.create(null);\nfunction wordCache(wordChars) {\n return wordCaches[wordChars] || (wordCaches[wordChars] = new WeakMap);\n}\nfunction storeWords(doc, wordRE, result, seen, ignoreAt) {\n for (let lines = doc.iterLines(), pos = 0; !lines.next().done;) {\n let { value } = lines, m;\n wordRE.lastIndex = 0;\n while (m = wordRE.exec(value)) {\n if (!seen[m[0]] && pos + m.index != ignoreAt) {\n result.push({ type: \"text\", label: m[0] });\n seen[m[0]] = true;\n if (result.length >= 2000 /* C.MaxList */)\n return;\n }\n }\n pos += value.length + 1;\n }\n}\nfunction collectWords(doc, cache, wordRE, to, ignoreAt) {\n let big = doc.length >= 1000 /* C.MinCacheLen */;\n let cached = big && cache.get(doc);\n if (cached)\n return cached;\n let result = [], seen = Object.create(null);\n if (doc.children) {\n let pos = 0;\n for (let ch of doc.children) {\n if (ch.length >= 1000 /* C.MinCacheLen */) {\n for (let c of collectWords(ch, cache, wordRE, to - pos, ignoreAt - pos)) {\n if (!seen[c.label]) {\n seen[c.label] = true;\n result.push(c);\n }\n }\n }\n else {\n storeWords(ch, wordRE, result, seen, ignoreAt - pos);\n }\n pos += ch.length + 1;\n }\n }\n else {\n storeWords(doc, wordRE, result, seen, ignoreAt);\n }\n if (big && result.length < 2000 /* C.MaxList */)\n cache.set(doc, result);\n return result;\n}\n/**\nA completion source that will scan the document for words (using a\n[character categorizer](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer)), and\nreturn those as completions.\n*/\nconst completeAnyWord = context => {\n let wordChars = context.state.languageDataAt(\"wordChars\", context.pos).join(\"\");\n let re = wordRE(wordChars);\n let token = context.matchBefore(mapRE(re, s => s + \"$\"));\n if (!token && !context.explicit)\n return null;\n let from = token ? token.from : context.pos;\n let options = collectWords(context.state.doc, wordCache(wordChars), re, 50000 /* C.Range */, from);\n return { from, options, validFor: mapRE(re, s => \"^\" + s) };\n};\n\nconst defaults = {\n brackets: [\"(\", \"[\", \"{\", \"'\", '\"'],\n before: \")]}:;>\",\n stringPrefixes: []\n};\nconst closeBracketEffect = /*@__PURE__*/StateEffect.define({\n map(value, mapping) {\n let mapped = mapping.mapPos(value, -1, MapMode.TrackAfter);\n return mapped == null ? undefined : mapped;\n }\n});\nconst closedBracket = /*@__PURE__*/new class extends RangeValue {\n};\nclosedBracket.startSide = 1;\nclosedBracket.endSide = -1;\nconst bracketState = /*@__PURE__*/StateField.define({\n create() { return RangeSet.empty; },\n update(value, tr) {\n value = value.map(tr.changes);\n if (tr.selection) {\n let line = tr.state.doc.lineAt(tr.selection.main.head);\n value = value.update({ filter: from => from >= line.from && from <= line.to });\n }\n for (let effect of tr.effects)\n if (effect.is(closeBracketEffect))\n value = value.update({ add: [closedBracket.range(effect.value, effect.value + 1)] });\n return value;\n }\n});\n/**\nExtension to enable bracket-closing behavior. When a closeable\nbracket is typed, its closing bracket is immediately inserted\nafter the cursor. When closing a bracket directly in front of a\nclosing bracket inserted by the extension, the cursor moves over\nthat bracket.\n*/\nfunction closeBrackets() {\n return [inputHandler, bracketState];\n}\nconst definedClosing = \"()[]{}<>\";\nfunction closing(ch) {\n for (let i = 0; i < definedClosing.length; i += 2)\n if (definedClosing.charCodeAt(i) == ch)\n return definedClosing.charAt(i + 1);\n return fromCodePoint(ch < 128 ? ch : ch + 1);\n}\nfunction config(state, pos) {\n return state.languageDataAt(\"closeBrackets\", pos)[0] || defaults;\n}\nconst android = typeof navigator == \"object\" && /*@__PURE__*//Android\\b/.test(navigator.userAgent);\nconst inputHandler = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, insert) => {\n if ((android ? view.composing : view.compositionStarted) || view.state.readOnly)\n return false;\n let sel = view.state.selection.main;\n if (insert.length > 2 || insert.length == 2 && codePointSize(codePointAt(insert, 0)) == 1 ||\n from != sel.from || to != sel.to)\n return false;\n let tr = insertBracket(view.state, insert);\n if (!tr)\n return false;\n view.dispatch(tr);\n return true;\n});\n/**\nCommand that implements deleting a pair of matching brackets when\nthe cursor is between them.\n*/\nconst deleteBracketPair = ({ state, dispatch }) => {\n if (state.readOnly)\n return false;\n let conf = config(state, state.selection.main.head);\n let tokens = conf.brackets || defaults.brackets;\n let dont = null, changes = state.changeByRange(range => {\n if (range.empty) {\n let before = prevChar(state.doc, range.head);\n for (let token of tokens) {\n if (token == before && nextChar(state.doc, range.head) == closing(codePointAt(token, 0)))\n return { changes: { from: range.head - token.length, to: range.head + token.length },\n range: EditorSelection.cursor(range.head - token.length) };\n }\n }\n return { range: dont = range };\n });\n if (!dont)\n dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"delete.backward\" }));\n return !dont;\n};\n/**\nClose-brackets related key bindings. Binds Backspace to\n[`deleteBracketPair`](https://codemirror.net/6/docs/ref/#autocomplete.deleteBracketPair).\n*/\nconst closeBracketsKeymap = [\n { key: \"Backspace\", run: deleteBracketPair }\n];\n/**\nImplements the extension's behavior on text insertion. If the\ngiven string counts as a bracket in the language around the\nselection, and replacing the selection with it requires custom\nbehavior (inserting a closing version or skipping past a\npreviously-closed bracket), this function returns a transaction\nrepresenting that custom behavior. (You only need this if you want\nto programmatically insert brackets—the\n[`closeBrackets`](https://codemirror.net/6/docs/ref/#autocomplete.closeBrackets) extension will\ntake care of running this for user input.)\n*/\nfunction insertBracket(state, bracket) {\n let conf = config(state, state.selection.main.head);\n let tokens = conf.brackets || defaults.brackets;\n for (let tok of tokens) {\n let closed = closing(codePointAt(tok, 0));\n if (bracket == tok)\n return closed == tok ? handleSame(state, tok, tokens.indexOf(tok + tok + tok) > -1, conf)\n : handleOpen(state, tok, closed, conf.before || defaults.before);\n if (bracket == closed && closedBracketAt(state, state.selection.main.from))\n return handleClose(state, tok, closed);\n }\n return null;\n}\nfunction closedBracketAt(state, pos) {\n let found = false;\n state.field(bracketState).between(0, state.doc.length, from => {\n if (from == pos)\n found = true;\n });\n return found;\n}\nfunction nextChar(doc, pos) {\n let next = doc.sliceString(pos, pos + 2);\n return next.slice(0, codePointSize(codePointAt(next, 0)));\n}\nfunction prevChar(doc, pos) {\n let prev = doc.sliceString(pos - 2, pos);\n return codePointSize(codePointAt(prev, 0)) == prev.length ? prev : prev.slice(1);\n}\nfunction handleOpen(state, open, close, closeBefore) {\n let dont = null, changes = state.changeByRange(range => {\n if (!range.empty)\n return { changes: [{ insert: open, from: range.from }, { insert: close, from: range.to }],\n effects: closeBracketEffect.of(range.to + open.length),\n range: EditorSelection.range(range.anchor + open.length, range.head + open.length) };\n let next = nextChar(state.doc, range.head);\n if (!next || /\\s/.test(next) || closeBefore.indexOf(next) > -1)\n return { changes: { insert: open + close, from: range.head },\n effects: closeBracketEffect.of(range.head + open.length),\n range: EditorSelection.cursor(range.head + open.length) };\n return { range: dont = range };\n });\n return dont ? null : state.update(changes, {\n scrollIntoView: true,\n userEvent: \"input.type\"\n });\n}\nfunction handleClose(state, _open, close) {\n let dont = null, changes = state.changeByRange(range => {\n if (range.empty && nextChar(state.doc, range.head) == close)\n return { changes: { from: range.head, to: range.head + close.length, insert: close },\n range: EditorSelection.cursor(range.head + close.length) };\n return dont = { range };\n });\n return dont ? null : state.update(changes, {\n scrollIntoView: true,\n userEvent: \"input.type\"\n });\n}\n// Handles cases where the open and close token are the same, and\n// possibly triple quotes (as in `\"\"\"abc\"\"\"`-style quoting).\nfunction handleSame(state, token, allowTriple, config) {\n let stringPrefixes = config.stringPrefixes || defaults.stringPrefixes;\n let dont = null, changes = state.changeByRange(range => {\n if (!range.empty)\n return { changes: [{ insert: token, from: range.from }, { insert: token, from: range.to }],\n effects: closeBracketEffect.of(range.to + token.length),\n range: EditorSelection.range(range.anchor + token.length, range.head + token.length) };\n let pos = range.head, next = nextChar(state.doc, pos), start;\n if (next == token) {\n if (nodeStart(state, pos)) {\n return { changes: { insert: token + token, from: pos },\n effects: closeBracketEffect.of(pos + token.length),\n range: EditorSelection.cursor(pos + token.length) };\n }\n else if (closedBracketAt(state, pos)) {\n let isTriple = allowTriple && state.sliceDoc(pos, pos + token.length * 3) == token + token + token;\n let content = isTriple ? token + token + token : token;\n return { changes: { from: pos, to: pos + content.length, insert: content },\n range: EditorSelection.cursor(pos + content.length) };\n }\n }\n else if (allowTriple && state.sliceDoc(pos - 2 * token.length, pos) == token + token &&\n (start = canStartStringAt(state, pos - 2 * token.length, stringPrefixes)) > -1 &&\n nodeStart(state, start)) {\n return { changes: { insert: token + token + token + token, from: pos },\n effects: closeBracketEffect.of(pos + token.length),\n range: EditorSelection.cursor(pos + token.length) };\n }\n else if (state.charCategorizer(pos)(next) != CharCategory.Word) {\n if (canStartStringAt(state, pos, stringPrefixes) > -1 && !probablyInString(state, pos, token, stringPrefixes))\n return { changes: { insert: token + token, from: pos },\n effects: closeBracketEffect.of(pos + token.length),\n range: EditorSelection.cursor(pos + token.length) };\n }\n return { range: dont = range };\n });\n return dont ? null : state.update(changes, {\n scrollIntoView: true,\n userEvent: \"input.type\"\n });\n}\nfunction nodeStart(state, pos) {\n let tree = syntaxTree(state).resolveInner(pos + 1);\n return tree.parent && tree.from == pos;\n}\nfunction probablyInString(state, pos, quoteToken, prefixes) {\n let node = syntaxTree(state).resolveInner(pos, -1);\n let maxPrefix = prefixes.reduce((m, p) => Math.max(m, p.length), 0);\n for (let i = 0; i < 5; i++) {\n let start = state.sliceDoc(node.from, Math.min(node.to, node.from + quoteToken.length + maxPrefix));\n let quotePos = start.indexOf(quoteToken);\n if (!quotePos || quotePos > -1 && prefixes.indexOf(start.slice(0, quotePos)) > -1) {\n let first = node.firstChild;\n while (first && first.from == node.from && first.to - first.from > quoteToken.length + quotePos) {\n if (state.sliceDoc(first.to - quoteToken.length, first.to) == quoteToken)\n return false;\n first = first.firstChild;\n }\n return true;\n }\n let parent = node.to == pos && node.parent;\n if (!parent)\n break;\n node = parent;\n }\n return false;\n}\nfunction canStartStringAt(state, pos, prefixes) {\n let charCat = state.charCategorizer(pos);\n if (charCat(state.sliceDoc(pos - 1, pos)) != CharCategory.Word)\n return pos;\n for (let prefix of prefixes) {\n let start = pos - prefix.length;\n if (state.sliceDoc(start, pos) == prefix && charCat(state.sliceDoc(start - 1, start)) != CharCategory.Word)\n return start;\n }\n return -1;\n}\n\n/**\nReturns an extension that enables autocompletion.\n*/\nfunction autocompletion(config = {}) {\n return [\n commitCharacters,\n completionState,\n completionConfig.of(config),\n completionPlugin,\n completionKeymapExt,\n baseTheme\n ];\n}\n/**\nBasic keybindings for autocompletion.\n\n - Ctrl-Space: [`startCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.startCompletion)\n - Escape: [`closeCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.closeCompletion)\n - ArrowDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true)`\n - ArrowUp: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(false)`\n - PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, \"page\")`\n - PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, \"page\")`\n - Enter: [`acceptCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.acceptCompletion)\n*/\nconst completionKeymap = [\n { key: \"Ctrl-Space\", run: startCompletion },\n { key: \"Escape\", run: closeCompletion },\n { key: \"ArrowDown\", run: /*@__PURE__*/moveCompletionSelection(true) },\n { key: \"ArrowUp\", run: /*@__PURE__*/moveCompletionSelection(false) },\n { key: \"PageDown\", run: /*@__PURE__*/moveCompletionSelection(true, \"page\") },\n { key: \"PageUp\", run: /*@__PURE__*/moveCompletionSelection(false, \"page\") },\n { key: \"Enter\", run: acceptCompletion }\n];\nconst completionKeymapExt = /*@__PURE__*/Prec.highest(/*@__PURE__*/keymap.computeN([completionConfig], state => state.facet(completionConfig).defaultKeymap ? [completionKeymap] : []));\n/**\nGet the current completion status. When completions are available,\nthis will return `\"active\"`. When completions are pending (in the\nprocess of being queried), this returns `\"pending\"`. Otherwise, it\nreturns `null`.\n*/\nfunction completionStatus(state) {\n let cState = state.field(completionState, false);\n return cState && cState.active.some(a => a.state == 1 /* State.Pending */) ? \"pending\"\n : cState && cState.active.some(a => a.state != 0 /* State.Inactive */) ? \"active\" : null;\n}\nconst completionArrayCache = /*@__PURE__*/new WeakMap;\n/**\nReturns the available completions as an array.\n*/\nfunction currentCompletions(state) {\n var _a;\n let open = (_a = state.field(completionState, false)) === null || _a === void 0 ? void 0 : _a.open;\n if (!open || open.disabled)\n return [];\n let completions = completionArrayCache.get(open.options);\n if (!completions)\n completionArrayCache.set(open.options, completions = open.options.map(o => o.completion));\n return completions;\n}\n/**\nReturn the currently selected completion, if any.\n*/\nfunction selectedCompletion(state) {\n var _a;\n let open = (_a = state.field(completionState, false)) === null || _a === void 0 ? void 0 : _a.open;\n return open && !open.disabled && open.selected >= 0 ? open.options[open.selected].completion : null;\n}\n/**\nReturns the currently selected position in the active completion\nlist, or null if no completions are active.\n*/\nfunction selectedCompletionIndex(state) {\n var _a;\n let open = (_a = state.field(completionState, false)) === null || _a === void 0 ? void 0 : _a.open;\n return open && !open.disabled && open.selected >= 0 ? open.selected : null;\n}\n/**\nCreate an effect that can be attached to a transaction to change\nthe currently selected completion.\n*/\nfunction setSelectedCompletion(index) {\n return setSelectedEffect.of(index);\n}\n\nexport { CompletionContext, acceptCompletion, autocompletion, clearSnippet, closeBrackets, closeBracketsKeymap, closeCompletion, completeAnyWord, completeFromList, completionKeymap, completionStatus, currentCompletions, deleteBracketPair, hasNextSnippetField, hasPrevSnippetField, ifIn, ifNotIn, insertBracket, insertCompletionText, moveCompletionSelection, nextSnippetField, pickedCompletion, prevSnippetField, selectedCompletion, selectedCompletionIndex, setSelectedCompletion, snippet, snippetCompletion, snippetKeymap, startCompletion };\n"],"names":["CompletionContext","constructor","state","pos","explicit","this","abortListeners","tokenBefore","types","token","syntaxTree","resolveInner","indexOf","name","parent","from","to","text","sliceDoc","type","matchBefore","expr","line","doc","lineAt","start","Math","max","str","slice","found","search","ensureAnchor","aborted","addEventListener","listener","push","toSet","chars","flat","Object","keys","join","words","test","replace","completeFromList","list","options","map","o","label","validFor","match","every","first","create","rest","i","length","source","RegExp","prefixMatch","context","ifNotIn","nodes","isTop","Option","completion","score","cur","selection","main","_a","addStart","addEnd","flags","ignoreCase","pickedCompletion","Annotation","define","SourceCache","WeakMap","asSource","Array","isArray","known","get","set","startCompletionEffect","StateEffect","closeCompletionEffect","FuzzyMatcher","pattern","folded","any","precise","byWord","matched","p","char","codePointAt","size","codePointSize","part","upper","toUpperCase","toLowerCase","astral","ret","word","firstSize","direct","len","anyTo","e","min","next","preciseTo","byWordTo","byWordFolded","adjacentTo","adjacentStart","adjacentEnd","hasLower","wordAdjacent","prevType","ch","fromCodePoint","result","positions","StrictMatcher","completionConfig","Facet","combine","configs","combineConfig","activateOnTyping","activateOnCompletion","activateOnTypingDelay","selectOnOpen","override","closeOnBlur","maxRenderedOptions","defaultKeymap","tooltipClass","optionClass","aboveCursor","icons","addToOptions","positionInfo","defaultPositionInfo","filterStrict","compareCompletions","a","b","localeCompare","interactionDelay","updateSyncTime","c","joinClass","concat","view","option","info","space","tooltip","offset","maxWidth","rtl","textDirection","Direction","RTL","left","narrow","side","spaceLeft","spaceRight","right","infoWidth","infoHeight","bottom","top","spaceBelow","style","offsetHeight","offsetWidth","class","rangeAroundSelected","total","selected","off","floor","CompletionTooltip","stateField","applyCompletion","infoDestroy","placeInfoReq","read","measureInfo","write","placeInfo","key","currentClass","cState","field","open","config","facet","optionContent","content","render","icon","document","createElement","classList","add","split","cls","setAttribute","position","_s","_v","labelElt","className","displayLabel","j","appendChild","createTextNode","span","detail","detailElt","textContent","sort","range","dom","updateTooltipClass","target","parentNode","nodeName","exec","id","preventDefault","relatedTarget","contentDOM","dispatch","effects","of","showOptions","mount","updateSel","remove","createListBox","requestMeasure","update","prevState","startState","disabled","toggle","positioned","updateSelectedOption","destroyInfo","infoResult","then","obj","addInfoPane","catch","logException","wrap","nodeType","destroy","opt","firstChild","nextSibling","hasAttribute","removeAttribute","container","element","getBoundingClientRect","self","scaleY","height","scrollTop","scrollIntoView","sel","querySelector","listRect","infoRect","selRect","win","ownerDocument","defaultView","window","innerWidth","innerHeight","cssText","ul","phrase","curSection","section","header","li","node","completionTooltip","boost","apply","CompletionDialog","attrs","timestamp","setSelected","makeAttrs","build","active","prev","conf","sections","addOption","some","s","hasResult","getMatch","filter","matcher","sectionOrder","cmp","_b","rank","compare","sortOptions","selectedValue","reduce","createTooltip","above","Date","now","changes","assign","mapPos","CompletionState","none","random","toString","tr","languageDataAt","find","ActiveSource","docChanged","touchesRange","iA","iB","endA","endB","sameResults","effect","is","setSelectedEffect","value","baseAttrs","getUserEvent","isUserEvent","annotation","explicitPos","event","handleUserEvent","handleChange","setActiveEffect","empty","ActiveResult","super","checkValid","mapping","sources","completionState","StateField","provide","f","showTooltip","val","EditorView","contentAttributes","fromOff","toOff","changeByRange","insert","EditorSelection","cursor","userEvent","insertCompletionText","annotations","moveCompletionSelection","forward","by","step","getTooltip","RunningQuery","time","updates","done","undefined","completionPlugin","ViewPlugin","fromClass","debounceUpdate","running","debounceAccept","pendingStart","composing","startQuery","selectionSet","doesReset","transactions","query","handler","splice","clearTimeout","delay","q","setTimeout","startUpdate","r","pending","Promise","resolve","scheduleAccept","err","accept","updated","current","eventHandlers","blur","dialog","contains","compositionstart","compositionend","windows","navigator","platform","commitCharacters","Prec","highest","domEventHandlers","keydown","ctrlKey","altKey","metaKey","commitChars","baseTheme","fontFamily","whiteSpace","overflow","maxWidth_fallback","minWidth","maxHeight","listStyle","margin","padding","lineHeight","overflowX","textOverflow","display","borderBottom","paddingLeft","opacity","background","color","textAlign","width","boxSizing","backgroundColor","verticalAlign","borderLeft","textDecoration","marginLeft","fontStyle","fontSize","paddingRight","FieldPos","FieldRange","MapMode","TrackDel","Snippet","lines","fieldPositions","instantiate","lineStart","lineObj","baseIndent","indent","tabs","indentUnit","ranges","parse","template","m","fields","seq","rawName","index","_","brace","fieldMarker","Decoration","widget","WidgetType","toDOM","ignoreEvent","fieldRange","mark","ActiveSnippet","deco","mapped","selectionInsideField","setActive","moveToField","snippetState","decorations","fieldSelection","snippet","editor","spec","Text","Transaction","appendConfig","addSnippetKeymap","snippetPointerHandler","moveField","dir","last","defaultSnippetKeymap","run","shift","snippetKeymap","maps","keymap","compute","snippetCompletion","mousedown","posAtCoords","x","clientX","y","clientY","defaults","brackets","before","stringPrefixes","closeBracketEffect","TrackAfter","closedBracket","RangeValue","startSide","endSide","bracketState","RangeSet","head","closeBrackets","inputHandler","definedClosing","closing","charCodeAt","charAt","android","userAgent","compositionStarted","readOnly","bracket","tokens","tok","closed","handleSame","handleOpen","closedBracketAt","handleClose","insertBracket","closeBracketsKeymap","dont","sliceString","prevChar","nextChar","between","close","closeBefore","anchor","_open","allowTriple","nodeStart","canStartStringAt","charCategorizer","CharCategory","Word","quoteToken","prefixes","maxPrefix","quotePos","probablyInString","tree","charCat","prefix","autocompletion","completionKeymapExt","completionKeymap","computeN"],"mappings":"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","x_google_ignoreList":[0]}
|