@pyscript/core 0.3.16 → 0.3.17
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-EuF8OLzC.js → codemirror-ywnYW0_0.js} +2 -2
- package/dist/codemirror-ywnYW0_0.js.map +1 -0
- package/dist/{codemirror_commands-ULiSmQ_a.js → codemirror_commands-Yc6lYio6.js} +2 -2
- package/dist/{codemirror_commands-ULiSmQ_a.js.map → codemirror_commands-Yc6lYio6.js.map} +1 -1
- package/dist/codemirror_lang-python-8H4JLl61.js +2 -0
- package/dist/codemirror_lang-python-8H4JLl61.js.map +1 -0
- package/dist/codemirror_language-7C1keQUN.js +2 -0
- package/dist/codemirror_language-7C1keQUN.js.map +1 -0
- package/dist/core-jrKO18P4.js +3 -0
- package/dist/core-jrKO18P4.js.map +1 -0
- package/dist/core.js +1 -1
- package/dist/{deprecations-manager-LgvsORjD.js → deprecations-manager-JBZTph3t.js} +2 -2
- package/dist/{deprecations-manager-LgvsORjD.js.map → deprecations-manager-JBZTph3t.js.map} +1 -1
- package/dist/{error-iDh2r90b.js → error-38aeWAyp.js} +2 -2
- package/dist/{error-iDh2r90b.js.map → error-38aeWAyp.js.map} +1 -1
- package/dist/index-WPcbiNpA.js +2 -0
- package/dist/index-WPcbiNpA.js.map +1 -0
- package/dist/{py-editor-3wi7qL0t.js → py-editor-yYbZxXlt.js} +2 -2
- package/dist/{py-editor-3wi7qL0t.js.map → py-editor-yYbZxXlt.js.map} +1 -1
- package/dist/{py-terminal-A4TQBnvM.js → py-terminal-r-OissHp.js} +2 -2
- package/dist/{py-terminal-A4TQBnvM.js.map → py-terminal-r-OissHp.js.map} +1 -1
- package/package.json +3 -3
- package/src/config.js +5 -1
- package/src/core.js +2 -1
- package/dist/codemirror-EuF8OLzC.js.map +0 -1
- package/dist/codemirror_lang-python-FpZklSdz.js +0 -2
- package/dist/codemirror_lang-python-FpZklSdz.js.map +0 -1
- package/dist/codemirror_language-9xJdz9Jq.js +0 -2
- package/dist/codemirror_language-9xJdz9Jq.js.map +0 -1
- package/dist/core-A_-oi6ri.js +0 -3
- package/dist/core-A_-oi6ri.js.map +0 -1
- package/dist/index-h3XLQgZ-.js +0 -2
- package/dist/index-h3XLQgZ-.js.map +0 -1
package/dist/index-h3XLQgZ-.js
DELETED
@@ -1,2 +0,0 @@
|
|
1
|
-
import{codePointSize as t,codePointAt as e,EditorSelection as o,CharCategory as n,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 d,Text as u}from"./codemirror_state-W084kUeH.js";import{E as m,k as g,D as v,s as b,g as w,V as y,l as x,a as C,W as I}from"./codemirror_view-nQOl-mcb.js";import{s as O,i as k}from"./codemirror_language-9xJdz9Jq.js";class D{constructor(t,e,o){this.state=t,this.pos=e,this.explicit=o,this.abortListeners=[]}tokenBefore(t){let e=O(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),o=Math.max(e.from,this.pos-250),n=e.text.slice(o-e.from,this.pos-e.from),i=n.search(E(t,!1));return i<0?null:{from:o+i,to:this.pos,text:n.slice(i)}}get aborted(){return null==this.abortListeners}addEventListener(t,e){"abort"==t&&this.abortListeners&&this.abortListeners.push(e)}}function T(t){let e=Object.keys(t).join(""),o=/\w/.test(e);return o&&(e=e.replace(/\w/g,"")),`[${o?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function A(t){let e=t.map((t=>"string"==typeof t?{label:t}:t)),[o,n]=e.every((t=>/^\w+$/.test(t.label)))?[/\w*$/,/\w+$/]:function(t){let e=Object.create(null),o=Object.create(null);for(let{label:n}of t){e[n[0]]=!0;for(let t=1;t<n.length;t++)o[n[t]]=!0}let n=T(e)+T(o)+"*$";return[new RegExp("^"+n),new RegExp(n)]}(e);return t=>{let i=t.matchBefore(n);return i||t.explicit?{from:i?i.from:t.pos,options:e,validFor:o}:null}}function R(t,e){return o=>{for(let e=O(o.state).resolveInner(o.pos,-1);e;e=e.parent){if(t.indexOf(e.name)>-1)return null;if(e.type.isTop)break}return e(o)}}class L{constructor(t,e,o,n){this.completion=t,this.source=e,this.match=o,this.score=n}}function P(t){return t.selection.main.from}function E(t,e){var o;let{source:n}=t,i=e&&"^"!=n[0],s="$"!=n[n.length-1];return i||s?new RegExp(`${i?"^":""}(?:${n})${s?"$":""}`,null!==(o=t.flags)&&void 0!==o?o:t.ignoreCase?"i":""):t}const S=d.define();const M=new WeakMap;function B(t){if(!Array.isArray(t))return t;let e=M.get(t);return e||M.set(t,e=A(t)),e}const j=a.define(),$=a.define();class F{constructor(o){this.pattern=o,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[],this.score=0,this.matched=[];for(let n=0;n<o.length;){let i=e(o,n),s=t(i);this.chars.push(i);let l=o.slice(n,n+s),r=l.toUpperCase();this.folded.push(e(r==l?l.toLowerCase():r,0)),n+=s}this.astral=o.length!=this.chars.length}ret(t,e){return this.score=t,this.matched=e,!0}match(o){if(0==this.pattern.length)return this.ret(-100,[]);if(o.length<this.pattern.length)return!1;let{chars:n,folded:i,any:s,precise:l,byWord:r}=this;if(1==n.length){let s=e(o,0),l=t(s),r=l==o.length?0:-100;if(s==n[0]);else{if(s!=i[0])return!1;r+=-200}return this.ret(r,[0,l])}let a=o.indexOf(this.pattern);if(0==a)return this.ret(o.length==this.pattern.length?0:-100,[0,this.pattern.length]);let c=n.length,h=0;if(a<0){for(let l=0,r=Math.min(o.length,200);l<r&&h<c;){let r=e(o,l);r!=n[h]&&r!=i[h]||(s[h++]=l),l+=t(r)}if(h<c)return!1}let p=0,d=0,u=!1,m=0,g=-1,v=-1,b=/[a-z]/.test(o),w=!0;for(let s=0,h=Math.min(o.length,200),y=0;s<h&&d<c;){let h=e(o,s);a<0&&(p<c&&h==n[p]&&(l[p++]=s),m<c&&(h==n[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)&&(n[d]==h||i[d]==h&&(u=!0)?r[d++]=s:r.length&&(w=!1)),y=C,s+=t(h)}return d==c&&0==r[0]&&w?this.result((u?-200:0)-100,r,o):m==c&&0==g?this.ret(-200-o.length+(v==o.length?0:-100),[0,v]):a>-1?this.ret(-700-o.length,[a,a+this.pattern.length]):m==c?this.ret(-900-o.length,[g,v]):d==c?this.result((u?-200:0)-100-700+(w?0:-1100),r,o):2!=n.length&&this.result((s[0]?-700:0)-200-1100,s,o)}result(o,n,i){let s=[],l=0;for(let o of n){let n=o+(this.astral?t(e(i,o)):1);l&&s[l-1]==o?s[l-1]=n:(s[l++]=o,s[l++]=n)}return this.ret(o-i.length,s)}}const N=s.define({combine:t=>l(t,{activateOnTyping:!0,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,tooltipClass:()=>"",optionClass:()=>"",aboveCursor:!1,icons:!0,addToOptions:[],positionInfo:q,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)=>o=>U(t(o),e(o)),optionClass:(t,e)=>o=>U(t(o),e(o)),addToOptions:(t,e)=>t.concat(e)})});function U(t,e){return t?e?t+" "+e:t:e}function q(t,e,o,n,i,s){let l,r,a=t.textDirection==v.RTL,c=a,h=!1,p="top",f=e.left-i.left,d=i.right-e.right,u=n.right-n.left,m=n.bottom-n.top;if(c&&f<Math.min(u,d)?c=!1:!c&&d<Math.min(u,f)&&(c=!0),u<=(c?f:d))l=Math.max(i.top,Math.min(o.top,i.bottom-m))-e.top,r=Math.min(400,c?f:d);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=o.bottom-e.top:(p="bottom",l=e.bottom-o.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 W(t,e,o){if(t<=o)return{from:0,to:t};if(e<0&&(e=0),e<=t>>1){let t=Math.floor(e/o);return{from:t*o,to:(t+1)*o}}let n=Math.floor((t-e)/o);return{from:t-(n+1)*o,to:t-n*o}}class H{constructor(t,e,o){this.view=t,this.stateField=e,this.applyCompletion=o,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:t=>this.placeInfo(t),key:this},this.space=null,this.currentClass="";let n=t.state.field(e),{options:i,selected:s}=n.open,l=t.state.facet(N);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,o,n){let i=document.createElement("span");i.className="cm-completionLabel";let s=t.displayLabel||t.label,l=0;for(let t=0;t<n.length;){let e=n[t++],o=n[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,o))),r.className="cm-completionMatchedText",l=o}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=W(i.length,s,l.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.className="cm-tooltip-autocomplete",this.updateTooltipClass(t.state),this.dom.addEventListener("mousedown",(o=>{let{options:n}=t.state.field(e).open;for(let e,i=o.target;i&&i!=this.dom;i=i.parentNode)if("LI"==i.nodeName&&(e=/-(\d+)$/.exec(i.id))&&+e[1]<n.length)return this.applyCompletion(t,n[+e[1]]),void o.preventDefault()})),this.dom.addEventListener("focusout",(e=>{let o=t.state.field(this.stateField,!1);o&&o.tooltip&&t.state.facet(N).closeOnBlur&&e.relatedTarget!=t.contentDOM&&t.dispatch({effects:$.of(null)})})),this.showOptions(i,n.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 o=t.state.field(this.stateField),n=t.startState.field(this.stateField);if(this.updateTooltipClass(t.state),o!=n){let{options:i,selected:s,disabled:l}=o.open;n.open&&n.open.options==i||(this.range=W(i.length,s,t.state.facet(N).maxRenderedOptions),this.showOptions(i,o.id)),this.updateSel(),l!=(null===(e=n.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=W(e.options.length,e.selected,this.view.state.facet(N).maxRenderedOptions),this.showOptions(e.options,t.id)),this.updateSelectedOption(e.selected)){this.destroyInfo();let{completion:o}=e.options[e.selected],{info:n}=o;if(!n)return;let i="string"==typeof n?document.createTextNode(n):n(o);if(!i)return;"then"in i?i.then((e=>{e&&this.view.state.field(this.stateField,!1)==t&&this.addInfoPane(e,o)})).catch((t=>x(this.view.state,t,"completion info"))):this.addInfoPane(i,o)}}addInfoPane(t,e){this.destroyInfo();let o=this.info=document.createElement("div");if(o.className="cm-tooltip cm-completionInfo",null!=t.nodeType)o.appendChild(t),this.infoDestroy=null;else{let{dom:e,destroy:n}=t;o.appendChild(e),this.infoDestroy=n||null}this.dom.appendChild(o),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(t){let e=null;for(let o=this.list.firstChild,n=this.range.from;o;o=o.nextSibling,n++)"LI"==o.nodeName&&o.id?n==t?o.hasAttribute("aria-selected")||(o.setAttribute("aria-selected","true"),e=o):o.hasAttribute("aria-selected")&&o.removeAttribute("aria-selected"):n--;return e&&function(t,e){let o=t.getBoundingClientRect(),n=e.getBoundingClientRect(),i=o.height/t.offsetHeight;n.top<o.top?t.scrollTop-=(o.top-n.top)/i:n.bottom>o.bottom&&(t.scrollTop+=(n.bottom-o.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(),o=this.info.getBoundingClientRect(),n=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 n.top>Math.min(i.bottom,e.bottom)-10||n.bottom<Math.max(i.top,e.top)+10?null:this.view.state.facet(N).positionInfo(this.view,e,n,o,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,o){const n=document.createElement("ul");n.id=e,n.setAttribute("role","listbox"),n.setAttribute("aria-expanded","true"),n.setAttribute("aria-label",this.view.state.phrase("Completions"));let i=null;for(let s=o.from;s<o.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>o.from||0==o.from))if(i=t,"string"!=typeof a&&a.header)n.appendChild(a.header(a));else{n.appendChild(document.createElement("completion-section")).textContent=t}}const c=n.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 o.from&&n.classList.add("cm-completionListIncompleteTop"),o.to<t.length&&n.classList.add("cm-completionListIncompleteBottom"),n}destroyInfo(){this.info&&(this.infoDestroy&&this.infoDestroy(),this.info.remove(),this.info=null)}destroy(){this.destroyInfo()}}function V(t,e){return o=>new H(o,t,e)}function z(t){return 100*(t.boost||0)+(t.apply?10:0)+(t.info?5:0)+(t.type?1:0)}class Q{constructor(t,e,o,n,i,s){this.options=t,this.attrs=e,this.tooltip=o,this.timestamp=n,this.selected=i,this.disabled=s}setSelected(t,e){return t==this.selected||t>=this.options.length?this:new Q(this.options,X(e,t),this.tooltip,this.timestamp,t,this.disabled)}static build(t,e,o,n,i){let s=function(t,e){let o=[],n=null,i=t=>{o.push(t);let{section:e}=t.completion;if(e){n||(n=[]);let t="string"==typeof e?e:e.name;n.some((e=>e.name==t))||n.push("string"==typeof e?{name:t}:e)}};for(let n of t)if(n.hasResult()){let t=n.result.getMatch;if(!1===n.result.filter)for(let e of n.result.options)i(new L(e,n.source,t?t(e):[],1e9-o.length));else{let o=new F(e.sliceDoc(n.from,n.to));for(let e of n.result.options)if(o.match(e.label)){let s=e.displayLabel?t?t(e,o.matched):[]:o.matched;i(new L(e,n.source,s,o.score+(e.boost||0)))}}}if(n){let t=Object.create(null),e=0,i=(t,e)=>{var o,n;return(null!==(o=t.rank)&&void 0!==o?o:1e9)-(null!==(n=e.rank)&&void 0!==n?n:1e9)||(t.name<e.name?-1:1)};for(let o of n.sort(i))e-=1e5,t[o.name]=e;for(let e of o){let{section:o}=e.completion;o&&(e.score+=t["string"==typeof o?o:o.name])}}let s=[],l=null,r=e.facet(N).compareCompletions;for(let t of o.sort(((t,e)=>e.score-t.score||r(t.completion,e.completion)))){let e=t.completion;!l||l.label!=e.label||l.detail!=e.detail||null!=l.type&&null!=e.type&&l.type!=e.type||l.apply!=e.apply||l.boost!=e.boost?s.push(t):z(t.completion)>z(l)&&(s[s.length-1]=t),l=t.completion}return s}(t,e);if(!s.length)return n&&t.some((t=>1==t.state))?new Q(n.options,n.attrs,n.tooltip,n.timestamp,n.selected,!0):null;let l=e.facet(N).selectOnOpen?0:-1;if(n&&n.selected!=l&&-1!=n.selected){let t=n.options[n.selected].completion;for(let e=0;e<s.length;e++)if(s[e].completion==t){l=e;break}}return new Q(s,X(o,l),{pos:t.reduce(((t,e)=>e.hasResult()?Math.min(t,e.from):t),1e8),create:it,above:i.aboveCursor},n?n.timestamp:Date.now(),l,!1)}map(t){return new Q(this.options,this.attrs,Object.assign(Object.assign({},this.tooltip),{pos:t.mapPos(this.tooltip.pos)}),this.timestamp,this.selected,this.disabled)}}class _{constructor(t,e,o){this.active=t,this.id=e,this.open=o}static start(){return new _(Y,"cm-ac-"+Math.floor(2e6*Math.random()).toString(36),null)}update(t){let{state:e}=t,o=e.facet(N),n=(o.override||e.languageDataAt("autocomplete",P(e)).map(B)).map((e=>(this.active.find((t=>t.source==e))||new J(e,this.active.some((t=>0!=t.state))?1:0)).update(t,o)));n.length==this.active.length&&n.every(((t,e)=>t==this.active[e]))&&(n=this.active);let i=this.open;i&&t.docChanged&&(i=i.map(t.changes)),t.selection||n.some((e=>e.hasResult()&&t.changes.touchesRange(e.from,e.to)))||!function(t,e){if(t==e)return!0;for(let o=0,n=0;;){for(;o<t.length&&!t[o].hasResult;)o++;for(;n<e.length&&!e[n].hasResult;)n++;let i=o==t.length,s=n==e.length;if(i||s)return i==s;if(t[o++].result!=e[n++].result)return!1}}(n,this.active)?i=Q.build(n,e,this.id,i,o):i&&i.disabled&&!n.some((t=>1==t.state))&&(i=null),!i&&n.every((t=>1!=t.state))&&n.some((t=>t.hasResult()))&&(n=n.map((t=>t.hasResult()?new J(t.source,0):t)));for(let e of t.effects)e.is(et)&&(i=i&&i.setSelected(e.value,this.id));return n==this.active&&i==this.open?this:new _(n,this.id,i)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:K}}const K={"aria-autocomplete":"list"};function X(t,e){let o={"aria-autocomplete":"list","aria-haspopup":"listbox","aria-controls":t};return e>-1&&(o["aria-activedescendant"]=t+"-"+e),o}const Y=[];function G(t){return t.isUserEvent("input.type")?"input":t.isUserEvent("delete.backward")?"delete":null}class J{constructor(t,e,o=-1){this.source=t,this.state=e,this.explicitPos=o}hasResult(){return!1}update(t,e){let o=G(t),n=this;o?n=n.handleUserEvent(t,o,e):t.docChanged?n=n.handleChange(t):t.selection&&0!=n.state&&(n=new J(n.source,0));for(let e of t.effects)if(e.is(j))n=new J(n.source,1,e.value?P(t.state):-1);else if(e.is($))n=new J(n.source,0);else if(e.is(tt))for(let t of e.value)t.source==n.source&&(n=t);return n}handleUserEvent(t,e,o){return"delete"!=e&&o.activateOnTyping?new J(this.source,1):this.map(t.changes)}handleChange(t){return t.changes.touchesRange(P(t.startState))?new J(this.source,0):this.map(t.changes)}map(t){return t.empty||this.explicitPos<0?this:new J(this.source,this.state,t.mapPos(this.explicitPos))}}class Z extends J{constructor(t,e,o,n,i){super(t,2,e),this.result=o,this.from=n,this.to=i}hasResult(){return!0}handleUserEvent(t,e,o){var n;let i=t.changes.mapPos(this.from),s=t.changes.mapPos(this.to,1),l=P(t.state);if((this.explicitPos<0?l<=i:l<this.from)||l>s||"delete"==e&&P(t.startState)==this.from)return new J(this.source,"input"==e&&o.activateOnTyping?1:0);let r,a=this.explicitPos<0?-1:t.changes.mapPos(this.explicitPos);return function(t,e,o,n){if(!t)return!1;let i=e.sliceDoc(o,n);return"function"==typeof t?t(i,o,n,e):E(t,!0).test(i)}(this.result.validFor,t.state,i,s)?new Z(this.source,a,this.result,i,s):this.result.update&&(r=this.result.update(this.result,i,s,new D(t.state,l,a>=0)))?new Z(this.source,a,r,r.from,null!==(n=r.to)&&void 0!==n?n:P(t.state)):new J(this.source,1,a)}handleChange(t){return t.changes.touchesRange(this.from,this.to)?new J(this.source,0):this.map(t.changes)}map(t){return t.empty?this:new Z(this.source,this.explicitPos<0?-1:t.mapPos(this.explicitPos),this.result,t.mapPos(this.from),t.mapPos(this.to,1))}}const tt=a.define({map:(t,e)=>t.map((t=>t.map(e)))}),et=a.define(),ot=r.define({create:()=>_.start(),update:(t,e)=>t.update(e),provide:t=>[b.from(t,(t=>t.tooltip)),m.contentAttributes.from(t,(t=>t.attrs))]});function nt(t,e){const n=e.completion.apply||e.completion.label;let i=t.state.field(ot).active.find((t=>t.source==e.source));return i instanceof Z&&("string"==typeof n?t.dispatch(Object.assign(Object.assign({},function(t,e,n,i){let{main:s}=t.selection,l=n-s.from,r=i-s.from;return Object.assign(Object.assign({},t.changeByRange((a=>a!=s&&n!=i&&t.sliceDoc(a.from+l,a.from+r)!=t.sliceDoc(n,i)?{range:a}:{changes:{from:a.from+l,to:i==s.from?a.to:a.from+r,insert:e},range:o.cursor(a.from+l+e.length)}))),{scrollIntoView:!0,userEvent:"input.complete"})}(t.state,n,i.from,i.to)),{annotations:S.of(e.completion)})):n(t,e.completion,i.from,i.to),!0)}const it=V(ot,nt);function st(t,e="option"){return o=>{let n=o.state.field(ot,!1);if(!n||!n.open||n.open.disabled||Date.now()-n.open.timestamp<o.state.facet(N).interactionDelay)return!1;let i,s=1;"page"==e&&(i=w(o,n.open.tooltip))&&(s=Math.max(2,Math.floor(i.dom.offsetHeight/i.dom.querySelector("li").offsetHeight)-1));let{length:l}=n.open.options,r=n.open.selected>-1?n.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),o.dispatch({effects:et.of(r)}),!0}}class lt{constructor(t,e){this.active=t,this.context=e,this.time=Date.now(),this.updates=[],this.done=void 0}}const rt=y.fromClass(class{constructor(t){this.view=t,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.composing=0;for(let e of t.state.field(ot).active)1==e.state&&this.startQuery(e)}update(t){let e=t.state.field(ot);if(!t.selectionSet&&!t.docChanged&&t.startState.field(ot)==e)return;let o=t.transactions.some((t=>(t.selection||t.docChanged)&&!G(t)));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){x(this.view.state,t)}n.context.abortListeners=null,this.running.splice(e--,1)}else n.updates.push(...t.transactions)}if(this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),this.debounceUpdate=e.active.some((t=>1==t.state&&!this.running.some((e=>e.active.source==t.source))))?setTimeout((()=>this.startUpdate()),50):-1,0!=this.composing)for(let e of t.transactions)"input"==G(e)?this.composing=2:2==this.composing&&e.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1;let{state:t}=this.view,e=t.field(ot);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,o=P(e),n=new D(e,o,t.explicitPos==o),i=new lt(t,n);this.running.push(i),Promise.resolve(t.source(n)).then((t=>{i.context.aborted||(i.done=t||null,this.scheduleAccept())}),(t=>{this.view.dispatch({effects:$.of(null)}),x(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(N).updateSyncTime))}accept(){var t;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],o=this.view.state.facet(N);for(let n=0;n<this.running.length;n++){let i=this.running[n];if(void 0===i.done)continue;if(this.running.splice(n--,1),i.done){let n=new Z(i.active.source,i.active.explicitPos,i.done,i.done.from,null!==(t=i.done.to)&&void 0!==t?t:P(i.updates.length?i.updates[0].startState:this.view.state));for(let t of i.updates)n=n.update(t,o);if(n.hasResult()){e.push(n);continue}}let s=this.view.state.field(ot).active.find((t=>t.source==i.active.source));if(s&&1==s.state)if(null==i.done){let t=new J(i.active.source,0);for(let e of i.updates)t=t.update(e,o);1!=t.state&&e.push(t)}else this.startQuery(s)}e.length&&this.view.dispatch({effects:tt.of(e)})}},{eventHandlers:{blur(t){let e=this.view.state.field(ot,!1);if(e&&e.tooltip&&this.view.state.facet(N).closeOnBlur){let o=e.open&&w(this.view,e.open.tooltip);o&&o.dom.contains(t.relatedTarget)||this.view.dispatch({effects:$.of(null)})}},compositionstart(){this.composing=1},compositionend(){3==this.composing&&setTimeout((()=>this.view.dispatch({effects:j.of(!1)})),20),this.composing=0}}}),at=m.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 ct{constructor(t,e,o,n){this.field=t,this.line=e,this.from=o,this.to=n}}class ht{constructor(t,e,o){this.field=t,this.from=e,this.to=o}map(t){let e=t.mapPos(this.from,-1,c.TrackDel),o=t.mapPos(this.to,1,c.TrackDel);return null==e||null==o?null:new ht(this.field,e,o)}}class pt{constructor(t,e){this.lines=t,this.fieldPositions=e}instantiate(t,e){let o=[],n=[e],i=t.doc.lineAt(e),s=/^\s*/.exec(i.text)[0];for(let i of this.lines){if(o.length){let o=s,l=/^\t*/.exec(i)[0].length;for(let e=0;e<l;e++)o+=t.facet(k);n.push(e+o.length-l),i=o+i.slice(l)}o.push(i),e+=i.length+1}let l=this.fieldPositions.map((t=>new ht(t.field,n[t.line]+t.from,n[t.line]+t.to)));return{text:o,ranges:l}}static parse(t){let e,o=[],n=[],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;for(let e=0;e<o.length;e++)(null!=t?o[e].seq==t:l&&o[e].name==l)&&(r=e);if(r<0){let e=0;for(;e<o.length&&(null==t||null!=o[e].seq&&o[e].seq<t);)e++;o.splice(e,0,{seq:t,name:l}),r=e;for(let t of i)t.field>=r&&t.field++}i.push(new ct(r,n.length,e.index,e.index+l.length)),s=s.slice(0,e.index)+l+s.slice(e.index+e[0].length)}for(let t;t=/\\([{}])/.exec(s);){s=s.slice(0,t.index)+t[1]+s.slice(t.index+t[0].length);for(let e of i)e.line==n.length&&e.from>t.index&&(e.from--,e.to--)}n.push(s)}return new pt(n,i)}}let ft=C.widget({widget:new class extends I{toDOM(){let t=document.createElement("span");return t.className="cm-snippetFieldPosition",t}ignoreEvent(){return!1}}}),dt=C.mark({class:"cm-snippetField"});class ut{constructor(t,e){this.ranges=t,this.active=e,this.deco=C.set(t.map((t=>(t.from==t.to?ft:dt).range(t.from,t.to))))}map(t){let e=[];for(let o of this.ranges){let n=o.map(t);if(!n)return null;e.push(n)}return new ut(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 mt=a.define({map:(t,e)=>t&&t.map(e)}),gt=a.define(),vt=r.define({create:()=>null,update(t,e){for(let o of e.effects){if(o.is(mt))return o.value;if(o.is(gt)&&t)return new ut(t.ranges,o.value)}return t&&e.docChanged&&(t=t.map(e.changes)),t&&e.selection&&!t.selectionInsideField(e.selection)&&(t=null),t},provide:t=>m.decorations.from(t,(t=>t?t.deco:C.none))});function bt(t,e){return o.create(t.filter((t=>t.field==e)).map((t=>o.range(t.from,t.to))))}function wt(t){let e=pt.parse(t);return(t,o,n,i)=>{let{text:s,ranges:l}=e.instantiate(t.state,n),r={changes:{from:n,to:i,insert:u.of(s)},scrollIntoView:!0,annotations:o?S.of(o):void 0};if(l.length&&(r.selection=bt(l,0)),l.length>1){let e=new ut(l,0),o=r.effects=[mt.of(e)];void 0===t.state.field(vt,!1)&&o.push(a.appendConfig.of([vt,It,kt,at]))}t.dispatch(t.state.update(r))}}function yt(t){return({state:e,dispatch:o})=>{let n=e.field(vt,!1);if(!n||t<0&&0==n.active)return!1;let i=n.active+t,s=t>0&&!n.ranges.some((e=>e.field==i+t));return o(e.update({selection:bt(n.ranges,i),effects:mt.of(s?null:new ut(n.ranges,i)),scrollIntoView:!0})),!0}}const xt=[{key:"Tab",run:yt(1),shift:yt(-1)},{key:"Escape",run:({state:t,dispatch:e})=>!!t.field(vt,!1)&&(e(t.update({effects:mt.of(null)})),!0)}],Ct=s.define({combine:t=>t.length?t[0]:xt}),It=i.highest(g.compute([Ct],(t=>t.facet(Ct))));function Ot(t,e){return Object.assign(Object.assign({},e),{apply:wt(t)})}const kt=m.domEventHandlers({mousedown(t,e){let o,n=e.state.field(vt,!1);if(!n||null==(o=e.posAtCoords({x:t.clientX,y:t.clientY})))return!1;let i=n.ranges.find((t=>t.from<=o&&t.to>=o));return!(!i||i.field==n.active)&&(e.dispatch({selection:bt(n.ranges,i.field),effects:mt.of(n.ranges.some((t=>t.field>i.field))?new ut(n.ranges,i.field):null),scrollIntoView:!0}),!0)}}),Dt={brackets:["(","[","{","'",'"'],before:")]}:;>",stringPrefixes:[]},Tt=a.define({map(t,e){let o=e.mapPos(t,-1,c.TrackAfter);return null==o?void 0:o}}),At=new class extends h{};At.startSide=1,At.endSide=-1;const Rt=r.define({create:()=>p.empty,update(t,e){if(e.selection){let o=e.state.doc.lineAt(e.selection.main.head);t=t.update({filter:t=>t>=o.from&&t<=o.to})}t=t.map(e.changes);for(let o of e.effects)o.is(Tt)&&(t=t.update({add:[At.range(o.value,o.value+1)]}));return t}});function Lt(){return[Bt,Rt]}const Pt="()[]{}<>";function Et(t){for(let e=0;e<Pt.length;e+=2)if(Pt.charCodeAt(e)==t)return Pt.charAt(e+1);return f(t<128?t:t+1)}function St(t,e){return t.languageDataAt("closeBrackets",e)[0]||Dt}const Mt="object"==typeof navigator&&/Android\b/.test(navigator.userAgent),Bt=m.inputHandler.of(((o,n,i,s)=>{if((Mt?o.composing:o.compositionStarted)||o.state.readOnly)return!1;let l=o.state.selection.main;if(s.length>2||2==s.length&&1==t(e(s,0))||n!=l.from||i!=l.to)return!1;let r=function(t,o){let n=St(t,t.selection.main.head),i=n.brackets||Dt.brackets;for(let s of i){let l=Et(e(s,0));if(o==s)return l==s?qt(t,s,i.indexOf(s+s+s)>-1,n):Nt(t,s,l,n.before||Dt.before);if(o==l&&$t(t,t.selection.main.from))return Ut(t,s,l)}return null}(o.state,s);return!!r&&(o.dispatch(r),!0)})),jt=[{key:"Backspace",run:({state:n,dispatch:i})=>{if(n.readOnly)return!1;let s=St(n,n.selection.main.head).brackets||Dt.brackets,l=null,r=n.changeByRange((i=>{if(i.empty){let l=function(o,n){let i=o.sliceString(n-2,n);return t(e(i,0))==i.length?i:i.slice(1)}(n.doc,i.head);for(let t of s)if(t==l&&Ft(n.doc,i.head)==Et(e(t,0)))return{changes:{from:i.head-t.length,to:i.head+t.length},range:o.cursor(i.head-t.length)}}return{range:l=i}}));return l||i(n.update(r,{scrollIntoView:!0,userEvent:"delete.backward"})),!l}}];function $t(t,e){let o=!1;return t.field(Rt).between(0,t.doc.length,(t=>{t==e&&(o=!0)})),o}function Ft(o,n){let i=o.sliceString(n,n+2);return i.slice(0,t(e(i,0)))}function Nt(t,e,n,i){let s=null,l=t.changeByRange((l=>{if(!l.empty)return{changes:[{insert:e,from:l.from},{insert:n,from:l.to}],effects:Tt.of(l.to+e.length),range:o.range(l.anchor+e.length,l.head+e.length)};let r=Ft(t.doc,l.head);return!r||/\s/.test(r)||i.indexOf(r)>-1?{changes:{insert:e+n,from:l.head},effects:Tt.of(l.head+e.length),range:o.cursor(l.head+e.length)}:{range:s=l}}));return s?null:t.update(l,{scrollIntoView:!0,userEvent:"input.type"})}function Ut(t,e,n){let i=null,s=t.changeByRange((e=>e.empty&&Ft(t.doc,e.head)==n?{changes:{from:e.head,to:e.head+n.length,insert:n},range:o.cursor(e.head+n.length)}:i={range:e}));return i?null:t.update(s,{scrollIntoView:!0,userEvent:"input.type"})}function qt(t,e,i,s){let l=s.stringPrefixes||Dt.stringPrefixes,r=null,a=t.changeByRange((s=>{if(!s.empty)return{changes:[{insert:e,from:s.from},{insert:e,from:s.to}],effects:Tt.of(s.to+e.length),range:o.range(s.anchor+e.length,s.head+e.length)};let a,c=s.head,h=Ft(t.doc,c);if(h==e){if(Wt(t,c))return{changes:{insert:e+e,from:c},effects:Tt.of(c+e.length),range:o.cursor(c+e.length)};if($t(t,c)){let n=i&&t.sliceDoc(c,c+3*e.length)==e+e+e?e+e+e:e;return{changes:{from:c,to:c+n.length,insert:n},range:o.cursor(c+n.length)}}}else{if(i&&t.sliceDoc(c-2*e.length,c)==e+e&&(a=Ht(t,c-2*e.length,l))>-1&&Wt(t,a))return{changes:{insert:e+e+e+e,from:c},effects:Tt.of(c+e.length),range:o.cursor(c+e.length)};if(t.charCategorizer(c)(h)!=n.Word&&Ht(t,c,l)>-1&&!function(t,e,o,n){let i=O(t).resolveInner(e,-1),s=n.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+o.length+s)),r=l.indexOf(o);if(!r||r>-1&&n.indexOf(l.slice(0,r))>-1){let e=i.firstChild;for(;e&&e.from==i.from&&e.to-e.from>o.length+r;){if(t.sliceDoc(e.to-o.length,e.to)==o)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:Tt.of(c+e.length),range:o.cursor(c+e.length)}}return{range:r=s}}));return r?null:t.update(a,{scrollIntoView:!0,userEvent:"input.type"})}function Wt(t,e){let o=O(t).resolveInner(e+1);return o.parent&&o.from==e}function Ht(t,e,o){let i=t.charCategorizer(e);if(i(t.sliceDoc(e-1,e))!=n.Word)return e;for(let s of o){let o=e-s.length;if(t.sliceDoc(o,e)==s&&i(t.sliceDoc(o-1,o))!=n.Word)return o}return-1}function Vt(t={}){return[ot,N.of(t),rt,Qt,at]}const zt=[{key:"Ctrl-Space",run:t=>!!t.state.field(ot,!1)&&(t.dispatch({effects:j.of(!0)}),!0)},{key:"Escape",run:t=>{let e=t.state.field(ot,!1);return!(!e||!e.active.some((t=>0!=t.state)))&&(t.dispatch({effects:$.of(null)}),!0)}},{key:"ArrowDown",run:st(!0)},{key:"ArrowUp",run:st(!1)},{key:"PageDown",run:st(!0,"page")},{key:"PageUp",run:st(!1,"page")},{key:"Enter",run:t=>{let e=t.state.field(ot,!1);return!(t.state.readOnly||!e||!e.open||e.open.selected<0||e.open.disabled||Date.now()-e.open.timestamp<t.state.facet(N).interactionDelay)&&nt(t,e.open.options[e.open.selected])}}],Qt=i.highest(g.computeN([N],(t=>t.facet(N).defaultKeymap?[zt]:[])));export{Lt as a,Vt as b,A as c,jt as d,zt as e,R as i,Ot as s};
|
2
|
-
//# sourceMappingURL=index-h3XLQgZ-.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"index-h3XLQgZ-.js","sources":["../node_modules/@codemirror/autocomplete/dist/index.js"],"sourcesContent":["import { Annotation, StateEffect, EditorSelection, codePointAt, codePointSize, fromCodePoint, Facet, combineConfig, StateField, Prec, Text, 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 true;\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 false;\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 false;\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 false;\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 ? false\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}\n\nconst completionConfig = /*@__PURE__*/Facet.define({\n combine(configs) {\n return combineConfig(configs, {\n activateOnTyping: true,\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 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 });\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 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 matcher = new FuzzyMatcher(state.sliceDoc(a.from, a.to));\n for (let option of a.result.options)\n if (matcher.match(option.label)) {\n let matched = !option.displayLabel ? matcher.matched : getMatch ? getMatch(option, matcher.matched) : [];\n addOption(new Option(option, a.source, matched, matcher.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 = state.facet(completionConfig).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) {\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), 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 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 ||\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), updated;\n if (checkValid(this.result.validFor, tr.state, from, to))\n return new ActiveResult(this.source, explicitPos, this.result, from, to);\n if (this.result.update &&\n (updated = this.result.update(this.result, from, to, new CompletionContext(tr.state, pos, explicitPos >= 0))))\n return new ActiveResult(this.source, explicitPos, updated, updated.from, (_a = updated.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 return mapping.empty ? this :\n 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.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 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);\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 this.debounceUpdate = cState.active.some(a => a.state == 1 /* State.Pending */ && !this.running.some(q => q.active.source == a.source))\n ? setTimeout(() => this.startUpdate(), 50) : -1;\n if (this.composing != 0 /* CompositionState.None */)\n for (let tr of update.transactions) {\n if (getUserEvent(tr) == \"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 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 this.view.dispatch({ effects: closeCompletionEffect.of(null) });\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});\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, name = m[2] || m[3] || \"\", found = -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) + name + line.slice(m.index + m[0].length);\n }\n for (let esc; esc = /\\\\([{}])/.exec(line);) {\n line = line.slice(0, esc.index) + esc[1] + line.slice(esc.index + esc[0].length);\n for (let pos of positions)\n if (pos.line == lines.length && pos.from > esc.index) {\n pos.from--;\n pos.to--;\n }\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) : undefined\n };\n if (ranges.length)\n spec.selection = fieldSelection(ranges, 0);\n if (ranges.length > 1) {\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 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 value = value.map(tr.changes);\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 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","completionConfig","Facet","combine","configs","combineConfig","activateOnTyping","selectOnOpen","override","closeOnBlur","maxRenderedOptions","defaultKeymap","tooltipClass","optionClass","aboveCursor","icons","addToOptions","positionInfo","defaultPositionInfo","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","explicitPos","event","handleUserEvent","handleChange","setActiveEffect","empty","ActiveResult","super","updated","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","composing","startQuery","selectionSet","doesReset","transactions","query","handler","splice","clearTimeout","q","setTimeout","startUpdate","r","pending","Promise","resolve","scheduleAccept","err","accept","current","eventHandlers","blur","dialog","contains","compositionstart","compositionend","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","index","esc","fieldMarker","Decoration","widget","WidgetType","toDOM","ignoreEvent","fieldRange","mark","ActiveSnippet","deco","mapped","selectionInsideField","setActive","moveToField","snippetState","decorations","fieldSelection","snippet","editor","spec","Text","appendConfig","addSnippetKeymap","snippetPointerHandler","moveField","dir","last","defaultSnippetKeymap","run","shift","snippetKeymap","maps","Prec","highest","keymap","compute","snippetCompletion","domEventHandlers","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","navigator","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]}
|