@pyscript/core 0.7.11 → 0.7.12

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.
Files changed (79) hide show
  1. package/dist/{codemirror-BYspKCDy.js → codemirror-WbVPJuAs.js} +2 -2
  2. package/dist/codemirror-WbVPJuAs.js.map +1 -0
  3. package/dist/{codemirror_commands-BLDaEdQ6.js → codemirror_commands-BRu2f-2p.js} +2 -2
  4. package/dist/codemirror_commands-BRu2f-2p.js.map +1 -0
  5. package/dist/codemirror_lang-python-q-wuh0nL.js +2 -0
  6. package/dist/codemirror_lang-python-q-wuh0nL.js.map +1 -0
  7. package/dist/codemirror_language-DqPeLcFN.js +2 -0
  8. package/dist/codemirror_language-DqPeLcFN.js.map +1 -0
  9. package/dist/{codemirror_state-BIAL8JKm.js → codemirror_state-DWQh5Ruf.js} +2 -2
  10. package/dist/codemirror_state-DWQh5Ruf.js.map +1 -0
  11. package/dist/codemirror_view-CMXZSWgf.js +2 -0
  12. package/dist/codemirror_view-CMXZSWgf.js.map +1 -0
  13. package/dist/core-DmpFMpAn.js +4 -0
  14. package/dist/core-DmpFMpAn.js.map +1 -0
  15. package/dist/core.js +1 -1
  16. package/dist/{deprecations-manager-DIDxhyRq.js → deprecations-manager-HQLYNCYn.js} +2 -2
  17. package/dist/{deprecations-manager-DIDxhyRq.js.map → deprecations-manager-HQLYNCYn.js.map} +1 -1
  18. package/dist/{donkey-CLhmQOjG.js → donkey-B3F8VdSV.js} +2 -2
  19. package/dist/{donkey-CLhmQOjG.js.map → donkey-B3F8VdSV.js.map} +1 -1
  20. package/dist/{error-uzvvriog.js → error-DS_5_C5_.js} +2 -2
  21. package/dist/{error-uzvvriog.js.map → error-DS_5_C5_.js.map} +1 -1
  22. package/dist/index-DaYI1YXo.js +2 -0
  23. package/dist/index-DaYI1YXo.js.map +1 -0
  24. package/dist/{mpy-CnF17tqI.js → mpy-Bo2uW6nt.js} +2 -2
  25. package/dist/{mpy-CnF17tqI.js.map → mpy-Bo2uW6nt.js.map} +1 -1
  26. package/dist/{py-BZSSqcx3.js → py-BEf8j7L5.js} +2 -2
  27. package/dist/{py-BZSSqcx3.js.map → py-BEf8j7L5.js.map} +1 -1
  28. package/dist/{py-editor-DZ0Dxzzk.js → py-editor-C0XF2rwE.js} +2 -2
  29. package/dist/{py-editor-DZ0Dxzzk.js.map → py-editor-C0XF2rwE.js.map} +1 -1
  30. package/dist/{py-game-bqieV522.js → py-game-eWNz96mt.js} +2 -2
  31. package/dist/{py-game-bqieV522.js.map → py-game-eWNz96mt.js.map} +1 -1
  32. package/dist/{py-terminal-DYY4WN57.js → py-terminal-VtavPj1S.js} +2 -2
  33. package/dist/{py-terminal-DYY4WN57.js.map → py-terminal-VtavPj1S.js.map} +1 -1
  34. package/dist/xterm_addon-fit-DxKdSnof.js +14 -0
  35. package/dist/xterm_addon-fit-DxKdSnof.js.map +1 -0
  36. package/dist/xterm_addon-web-links-B6rWzrcs.js +14 -0
  37. package/dist/xterm_addon-web-links-B6rWzrcs.js.map +1 -0
  38. package/dist/zip-CgZGjqjF.js +2 -0
  39. package/dist/zip-CgZGjqjF.js.map +1 -0
  40. package/package.json +15 -14
  41. package/src/3rd-party/xterm_addon-fit.js +14 -2
  42. package/src/3rd-party/xterm_addon-web-links.js +14 -2
  43. package/src/core.js +13 -2
  44. package/src/stdlib/pyscript/__init__.py +100 -31
  45. package/src/stdlib/pyscript/context.py +198 -0
  46. package/src/stdlib/pyscript/display.py +211 -127
  47. package/src/stdlib/pyscript/events.py +191 -88
  48. package/src/stdlib/pyscript/fetch.py +156 -25
  49. package/src/stdlib/pyscript/ffi.py +132 -16
  50. package/src/stdlib/pyscript/flatted.py +78 -1
  51. package/src/stdlib/pyscript/fs.py +205 -49
  52. package/src/stdlib/pyscript/media.py +210 -50
  53. package/src/stdlib/pyscript/storage.py +214 -27
  54. package/src/stdlib/pyscript/util.py +28 -7
  55. package/src/stdlib/pyscript/web.py +1079 -881
  56. package/src/stdlib/pyscript/websocket.py +252 -45
  57. package/src/stdlib/pyscript/workers.py +176 -27
  58. package/src/stdlib/pyscript.js +13 -13
  59. package/types/stdlib/pyscript.d.ts +1 -1
  60. package/dist/codemirror-BYspKCDy.js.map +0 -1
  61. package/dist/codemirror_commands-BLDaEdQ6.js.map +0 -1
  62. package/dist/codemirror_lang-python-CkOVBHci.js +0 -2
  63. package/dist/codemirror_lang-python-CkOVBHci.js.map +0 -1
  64. package/dist/codemirror_language-DOkvasqm.js +0 -2
  65. package/dist/codemirror_language-DOkvasqm.js.map +0 -1
  66. package/dist/codemirror_state-BIAL8JKm.js.map +0 -1
  67. package/dist/codemirror_view-Bt4sLgyA.js +0 -2
  68. package/dist/codemirror_view-Bt4sLgyA.js.map +0 -1
  69. package/dist/core-PTfg6inS.js +0 -4
  70. package/dist/core-PTfg6inS.js.map +0 -1
  71. package/dist/index-jZ1aOVVJ.js +0 -2
  72. package/dist/index-jZ1aOVVJ.js.map +0 -1
  73. package/dist/xterm_addon-fit--gyF3PcZ.js +0 -2
  74. package/dist/xterm_addon-fit--gyF3PcZ.js.map +0 -1
  75. package/dist/xterm_addon-web-links-D95xh2la.js +0 -2
  76. package/dist/xterm_addon-web-links-D95xh2la.js.map +0 -1
  77. package/dist/zip-pccs084i.js +0 -2
  78. package/dist/zip-pccs084i.js.map +0 -1
  79. package/src/stdlib/pyscript/magic_js.py +0 -84
@@ -1,2 +0,0 @@
1
- import{StateField as t,Prec as e,Facet as n,codePointAt as i,EditorSelection as o,StateEffect as s,codePointSize as l,RangeSet as r,combineConfig as a,fromCodePoint as c,Annotation as h,MapMode as p,RangeValue as f,CharCategory as d,Transaction as u,Text as m}from"./codemirror_state-BIAL8JKm.js";import{E as g,V as v,g as b,s as y,l as w,k as x,D as C,a as I,W as k}from"./codemirror_view-Bt4sLgyA.js";import{s as D,i as O}from"./codemirror_language-DOkvasqm.js";class T{constructor(t,e,n,i){this.state=t,this.pos=e,this.explicit=n,this.view=i,this.abortListeners=[],this.abortOnDocChange=!1}tokenBefore(t){let e=D(this.state).resolveInner(this.pos,-1);for(;e&&t.indexOf(e.name)<0;)e=e.parent;return e?{from:e.from,to:this.pos,text:this.state.sliceDoc(e.from,this.pos),type:e.type}:null}matchBefore(t){let e=this.state.doc.lineAt(this.pos),n=Math.max(e.from,this.pos-250),i=e.text.slice(n-e.from,this.pos-e.from),o=i.search(P(t,!1));return o<0?null:{from:n+o,to:this.pos,text:i.slice(o)}}get aborted(){return null==this.abortListeners}addEventListener(t,e,n){"abort"==t&&this.abortListeners&&(this.abortListeners.push(e),n&&n.onDocChange&&(this.abortOnDocChange=!0))}}function A(t){let e=Object.keys(t).join(""),n=/\w/.test(e);return n&&(e=e.replace(/\w/g,"")),`[${n?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function S(t){let e=t.map(t=>"string"==typeof t?{label:t}:t),[n,i]=e.every(t=>/^\w+$/.test(t.label))?[/\w*$/,/\w+$/]:function(t){let e=Object.create(null),n=Object.create(null);for(let{label:i}of t){e[i[0]]=!0;for(let t=1;t<i.length;t++)n[i[t]]=!0}let i=A(e)+A(n)+"*$";return[new RegExp("^"+i),new RegExp(i)]}(e);return t=>{let o=t.matchBefore(i);return o||t.explicit?{from:o?o.from:t.pos,options:e,validFor:n}:null}}function L(t,e){return n=>{for(let e=D(n.state).resolveInner(n.pos,-1);e;e=e.parent){if(t.indexOf(e.name)>-1)return null;if(e.type.isTop)break}return e(n)}}class E{constructor(t,e,n,i){this.completion=t,this.source=e,this.match=n,this.score=i}}function R(t){return t.selection.main.from}function P(t,e){var n;let{source:i}=t,o=e&&"^"!=i[0],s="$"!=i[i.length-1];return o||s?new RegExp(`${o?"^":""}(?:${i})${s?"$":""}`,null!==(n=t.flags)&&void 0!==n?n:t.ignoreCase?"i":""):t}const M=h.define();function B(t,e,n,i){let{main:s}=t.selection,l=n-s.from,r=i-s.from;return{...t.changeByRange(a=>{if(a!=s&&n!=i&&t.sliceDoc(a.from+l,a.from+r)!=t.sliceDoc(n,i))return{range:a};let c=t.toText(e);return{changes:{from:a.from+l,to:i==s.from?a.to:a.from+r,insert:c},range:o.cursor(a.from+l+c.length)}}),scrollIntoView:!0,userEvent:"input.complete"}}const F=new WeakMap;function $(t){if(!Array.isArray(t))return t;let e=F.get(t);return e||F.set(t,e=S(t)),e}const N=s.define(),U=s.define();class W{constructor(t){this.pattern=t,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[],this.score=0,this.matched=[];for(let e=0;e<t.length;){let n=i(t,e),o=l(n);this.chars.push(n);let s=t.slice(e,e+o),r=s.toUpperCase();this.folded.push(i(r==s?s.toLowerCase():r,0)),e+=o}this.astral=t.length!=this.chars.length}ret(t,e){return this.score=t,this.matched=e,this}match(t){if(0==this.pattern.length)return this.ret(-100,[]);if(t.length<this.pattern.length)return null;let{chars:e,folded:n,any:o,precise:s,byWord:r}=this;if(1==e.length){let o=i(t,0),s=l(o),r=s==t.length?0:-100;if(o==e[0]);else{if(o!=n[0])return null;r+=-200}return this.ret(r,[0,s])}let a=t.indexOf(this.pattern);if(0==a)return this.ret(t.length==this.pattern.length?0:-100,[0,this.pattern.length]);let h=e.length,p=0;if(a<0){for(let s=0,r=Math.min(t.length,200);s<r&&p<h;){let r=i(t,s);r!=e[p]&&r!=n[p]||(o[p++]=s),s+=l(r)}if(p<h)return null}let f=0,d=0,u=!1,m=0,g=-1,v=-1,b=/[a-z]/.test(t),y=!0;for(let o=0,p=Math.min(t.length,200),w=0;o<p&&d<h;){let p=i(t,o);a<0&&(f<h&&p==e[f]&&(s[f++]=o),m<h&&(p==e[m]||p==n[m]?(0==m&&(g=o),v=o+1,m++):m=0));let x,C=p<255?p>=48&&p<=57||p>=97&&p<=122?2:p>=65&&p<=90?1:0:(x=c(p))!=x.toLowerCase()?1:x!=x.toUpperCase()?2:0;(!o||1==C&&b||0==w&&0!=C)&&(e[d]==p||n[d]==p&&(u=!0)?r[d++]=o:r.length&&(y=!1)),w=C,o+=l(p)}return d==h&&0==r[0]&&y?this.result((u?-200:0)-100,r,t):m==h&&0==g?this.ret(-200-t.length+(v==t.length?0:-100),[0,v]):a>-1?this.ret(-700-t.length,[a,a+this.pattern.length]):m==h?this.ret(-900-t.length,[g,v]):d==h?this.result((u?-200:0)-100-700+(y?0:-1100),r,t):2==e.length?null:this.result((o[0]?-700:0)-200-1100,o,t)}result(t,e,n){let o=[],s=0;for(let t of e){let e=t+(this.astral?l(i(n,t)):1);s&&o[s-1]==t?o[s-1]=e:(o[s++]=t,o[s++]=e)}return this.ret(t-n.length,o)}}class q{constructor(t){this.pattern=t,this.matched=[],this.score=0,this.folded=t.toLowerCase()}match(t){if(t.length<this.pattern.length)return null;let e=t.slice(0,this.pattern.length),n=e==this.pattern?0:e.toLowerCase()==this.folded?-200:null;return null==n?null:(this.matched=[0,e.length],this.score=n+(t.length==this.pattern.length?0:-100),this)}}const j=n.define({combine:t=>a(t,{activateOnTyping:!0,activateOnCompletion:()=>!1,activateOnTypingDelay:100,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,tooltipClass:()=>"",optionClass:()=>"",aboveCursor:!1,icons:!0,addToOptions:[],positionInfo:V,filterStrict:!1,compareCompletions:(t,e)=>t.label.localeCompare(e.label),interactionDelay:75,updateSyncTime:100},{defaultKeymap:(t,e)=>t&&e,closeOnBlur:(t,e)=>t&&e,icons:(t,e)=>t&&e,tooltipClass:(t,e)=>n=>H(t(n),e(n)),optionClass:(t,e)=>n=>H(t(n),e(n)),addToOptions:(t,e)=>t.concat(e),filterStrict:(t,e)=>t||e})});function H(t,e){return t?e?t+" "+e:t:e}function V(t,e,n,i,o,s){let l,r,a=t.textDirection==C.RTL,c=a,h=!1,p="top",f=e.left-o.left,d=o.right-e.right,u=i.right-i.left,m=i.bottom-i.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(o.top,Math.min(n.top,o.bottom-m))-e.top,r=Math.min(400,c?f:d);else{h=!0,r=Math.min(400,(a?e.right:o.right-e.left)-30);let t=o.bottom-e.bottom;t>=m||t>e.top?l=n.bottom-e.top:(p="bottom",l=e.bottom-n.top)}return{style:`${p}: ${l/((e.bottom-e.top)/s.offsetHeight)}px; max-width: ${r/((e.right-e.left)/s.offsetWidth)}px`,class:"cm-completionInfo-"+(h?a?"left-narrow":"right-narrow":c?"left":"right")}}function z(t,e,n){if(t<=n)return{from:0,to:t};if(e<0&&(e=0),e<=t>>1){let t=Math.floor(e/n);return{from:t*n,to:(t+1)*n}}let i=Math.floor((t-e)/n);return{from:t-(i+1)*n,to:t-i*n}}class K{constructor(t,e,n){this.view=t,this.stateField=e,this.applyCompletion=n,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:t=>this.placeInfo(t),key:this},this.space=null,this.currentClass="";let i=t.state.field(e),{options:o,selected:s}=i.open,l=t.state.facet(j);this.optionContent=function(t){let e=t.addToOptions.slice();return t.icons&&e.push({render(t){let e=document.createElement("div");return e.classList.add("cm-completionIcon"),t.type&&e.classList.add(...t.type.split(/\s+/g).map(t=>"cm-completionIcon-"+t)),e.setAttribute("aria-hidden","true"),e},position:20}),e.push({render(t,e,n,i){let o=document.createElement("span");o.className="cm-completionLabel";let s=t.displayLabel||t.label,l=0;for(let t=0;t<i.length;){let e=i[t++],n=i[t++];e>l&&o.appendChild(document.createTextNode(s.slice(l,e)));let r=o.appendChild(document.createElement("span"));r.appendChild(document.createTextNode(s.slice(e,n))),r.className="cm-completionMatchedText",l=n}return l<s.length&&o.appendChild(document.createTextNode(s.slice(l))),o},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=z(o.length,s,l.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.className="cm-tooltip-autocomplete",this.updateTooltipClass(t.state),this.dom.addEventListener("mousedown",n=>{let{options:i}=t.state.field(e).open;for(let e,o=n.target;o&&o!=this.dom;o=o.parentNode)if("LI"==o.nodeName&&(e=/-(\d+)$/.exec(o.id))&&+e[1]<i.length)return this.applyCompletion(t,i[+e[1]]),void n.preventDefault()}),this.dom.addEventListener("focusout",e=>{let n=t.state.field(this.stateField,!1);n&&n.tooltip&&t.state.facet(j).closeOnBlur&&e.relatedTarget!=t.contentDOM&&t.dispatch({effects:U.of(null)})}),this.showOptions(o,i.id)}mount(){this.updateSel()}showOptions(t,e){this.list&&this.list.remove(),this.list=this.dom.appendChild(this.createListBox(t,e,this.range)),this.list.addEventListener("scroll",()=>{this.info&&this.view.requestMeasure(this.placeInfoReq)})}update(t){var e;let n=t.state.field(this.stateField),i=t.startState.field(this.stateField);if(this.updateTooltipClass(t.state),n!=i){let{options:o,selected:s,disabled:l}=n.open;i.open&&i.open.options==o||(this.range=z(o.length,s,t.state.facet(j).maxRenderedOptions),this.showOptions(o,n.id)),this.updateSel(),l!=(null===(e=i.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=z(e.options.length,e.selected,this.view.state.facet(j).maxRenderedOptions),this.showOptions(e.options,t.id)),this.updateSelectedOption(e.selected)){this.destroyInfo();let{completion:n}=e.options[e.selected],{info:i}=n;if(!i)return;let o="string"==typeof i?document.createTextNode(i):i(n);if(!o)return;"then"in o?o.then(e=>{e&&this.view.state.field(this.stateField,!1)==t&&this.addInfoPane(e,n)}).catch(t=>w(this.view.state,t,"completion info")):this.addInfoPane(o,n)}}addInfoPane(t,e){this.destroyInfo();let n=this.info=document.createElement("div");if(n.className="cm-tooltip cm-completionInfo",null!=t.nodeType)n.appendChild(t),this.infoDestroy=null;else{let{dom:e,destroy:i}=t;n.appendChild(e),this.infoDestroy=i||null}this.dom.appendChild(n),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(t){let e=null;for(let n=this.list.firstChild,i=this.range.from;n;n=n.nextSibling,i++)"LI"==n.nodeName&&n.id?i==t?n.hasAttribute("aria-selected")||(n.setAttribute("aria-selected","true"),e=n):n.hasAttribute("aria-selected")&&n.removeAttribute("aria-selected"):i--;return e&&function(t,e){let n=t.getBoundingClientRect(),i=e.getBoundingClientRect(),o=n.height/t.offsetHeight;i.top<n.top?t.scrollTop-=(n.top-i.top)/o:i.bottom>n.bottom&&(t.scrollTop+=(i.bottom-n.bottom)/o)}(this.list,e),e}measureInfo(){let t=this.dom.querySelector("[aria-selected]");if(!t||!this.info)return null;let e=this.dom.getBoundingClientRect(),n=this.info.getBoundingClientRect(),i=t.getBoundingClientRect(),o=this.space;if(!o){let t=this.dom.ownerDocument.documentElement;o={left:0,top:0,right:t.clientWidth,bottom:t.clientHeight}}return i.top>Math.min(o.bottom,e.bottom)-10||i.bottom<Math.max(o.top,e.top)+10?null:this.view.state.facet(j).positionInfo(this.view,e,i,n,o,this.dom)}placeInfo(t){this.info&&(t?(t.style&&(this.info.style.cssText=t.style),this.info.className="cm-tooltip cm-completionInfo "+(t.class||"")):this.info.style.cssText="top: -1e6px")}createListBox(t,e,n){const i=document.createElement("ul");i.id=e,i.setAttribute("role","listbox"),i.setAttribute("aria-expanded","true"),i.setAttribute("aria-label",this.view.state.phrase("Completions")),i.addEventListener("mousedown",t=>{t.target==i&&t.preventDefault()});let o=null;for(let s=n.from;s<n.to;s++){let{completion:l,match:r}=t[s],{section:a}=l;if(a){let t="string"==typeof a?a:a.name;if(t!=o&&(s>n.from||0==n.from))if(o=t,"string"!=typeof a&&a.header)i.appendChild(a.header(a));else{i.appendChild(document.createElement("completion-section")).textContent=t}}const c=i.appendChild(document.createElement("li"));c.id=e+"-"+s,c.setAttribute("role","option");let h=this.optionClass(l);h&&(c.className=h);for(let t of this.optionContent){let e=t(l,this.view.state,this.view,r);e&&c.appendChild(e)}}return n.from&&i.classList.add("cm-completionListIncompleteTop"),n.to<t.length&&i.classList.add("cm-completionListIncompleteBottom"),i}destroyInfo(){this.info&&(this.infoDestroy&&this.infoDestroy(),this.info.remove(),this.info=null)}destroy(){this.destroyInfo()}}function Q(t,e){return n=>new K(n,t,e)}function _(t){return 100*(t.boost||0)+(t.apply?10:0)+(t.info?5:0)+(t.type?1:0)}class X{constructor(t,e,n,i,o,s){this.options=t,this.attrs=e,this.tooltip=n,this.timestamp=i,this.selected=o,this.disabled=s}setSelected(t,e){return t==this.selected||t>=this.options.length?this:new X(this.options,Z(e,t),this.tooltip,this.timestamp,t,this.disabled)}static build(t,e,n,i,o,s){if(i&&!s&&t.some(t=>t.isPending))return i.setDisabled();let l=function(t,e){let n=[],i=null,o=null,s=t=>{n.push(t);let{section:e}=t.completion;if(e){i||(i=[]);let t="string"==typeof e?e:e.name;i.some(e=>e.name==t)||i.push("string"==typeof e?{name:t}:e)}},l=e.facet(j);for(let i of t)if(i.hasResult()){let t=i.result.getMatch;if(!1===i.result.filter)for(let e of i.result.options)s(new E(e,i.source,t?t(e):[],1e9-n.length));else{let n,r=e.sliceDoc(i.from,i.to),a=l.filterStrict?new q(r):new W(r);for(let e of i.result.options)if(n=a.match(e.label)){let l=e.displayLabel?t?t(e,n.matched):[]:n.matched,r=n.score+(e.boost||0);if(s(new E(e,i.source,l,r)),"object"==typeof e.section&&"dynamic"===e.section.rank){let{name:t}=e.section;o||(o=Object.create(null)),o[t]=Math.max(r,o[t]||-1e9)}}}}if(i){let t=Object.create(null),e=0,s=(t,e)=>("dynamic"===t.rank&&"dynamic"===e.rank?o[e.name]-o[t.name]:0)||("number"==typeof t.rank?t.rank:1e9)-("number"==typeof e.rank?e.rank:1e9)||(t.name<e.name?-1:1);for(let n of i.sort(s))e-=1e5,t[n.name]=e;for(let e of n){let{section:n}=e.completion;n&&(e.score+=t["string"==typeof n?n:n.name])}}let r=[],a=null,c=l.compareCompletions;for(let t of n.sort((t,e)=>e.score-t.score||c(t.completion,e.completion))){let e=t.completion;!a||a.label!=e.label||a.detail!=e.detail||null!=a.type&&null!=e.type&&a.type!=e.type||a.apply!=e.apply||a.boost!=e.boost?r.push(t):_(t.completion)>_(a)&&(r[r.length-1]=t),a=t.completion}return r}(t,e);if(!l.length)return i&&t.some(t=>t.isPending)?i.setDisabled():null;let r=e.facet(j).selectOnOpen?0:-1;if(i&&i.selected!=r&&-1!=i.selected){let t=i.options[i.selected].completion;for(let e=0;e<l.length;e++)if(l[e].completion==t){r=e;break}}return new X(l,Z(n,r),{pos:t.reduce((t,e)=>e.hasResult()?Math.min(t,e.from):t,1e8),create:at,above:o.aboveCursor},i?i.timestamp:Date.now(),r,!1)}map(t){return new X(this.options,this.attrs,{...this.tooltip,pos:t.mapPos(this.tooltip.pos)},this.timestamp,this.selected,this.disabled)}setDisabled(){return new X(this.options,this.attrs,this.tooltip,this.timestamp,this.selected,!0)}}class Y{constructor(t,e,n){this.active=t,this.id=e,this.open=n}static start(){return new Y(tt,"cm-ac-"+Math.floor(2e6*Math.random()).toString(36),null)}update(t){let{state:e}=t,n=e.facet(j),i=(n.override||e.languageDataAt("autocomplete",R(e)).map($)).map(e=>(this.active.find(t=>t.source==e)||new nt(e,this.active.some(t=>0!=t.state)?1:0)).update(t,n));i.length==this.active.length&&i.every((t,e)=>t==this.active[e])&&(i=this.active);let o=this.open,s=t.effects.some(t=>t.is(ot));o&&t.docChanged&&(o=o.map(t.changes)),t.selection||i.some(e=>e.hasResult()&&t.changes.touchesRange(e.from,e.to))||!function(t,e){if(t==e)return!0;for(let n=0,i=0;;){for(;n<t.length&&!t[n].hasResult();)n++;for(;i<e.length&&!e[i].hasResult();)i++;let o=n==t.length,s=i==e.length;if(o||s)return o==s;if(t[n++].result!=e[i++].result)return!1}}(i,this.active)||s?o=X.build(i,e,this.id,o,n,s):o&&o.disabled&&!i.some(t=>t.isPending)&&(o=null),!o&&i.every(t=>!t.isPending)&&i.some(t=>t.hasResult())&&(i=i.map(t=>t.hasResult()?new nt(t.source,0):t));for(let e of t.effects)e.is(st)&&(o=o&&o.setSelected(e.value,this.id));return i==this.active&&o==this.open?this:new Y(i,this.id,o)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:this.active.length?G:J}}const G={"aria-autocomplete":"list"},J={};function Z(t,e){let n={"aria-autocomplete":"list","aria-haspopup":"listbox","aria-controls":t};return e>-1&&(n["aria-activedescendant"]=t+"-"+e),n}const tt=[];function et(t,e){if(t.isUserEvent("input.complete")){let n=t.annotation(M);if(n&&e.activateOnCompletion(n))return 12}let n=t.isUserEvent("input.type");return n&&e.activateOnTyping?5:n?1:t.isUserEvent("delete.backward")?2:t.selection?8:t.docChanged?16:0}class nt{constructor(t,e,n=!1){this.source=t,this.state=e,this.explicit=n}hasResult(){return!1}get isPending(){return 1==this.state}update(t,e){let n=et(t,e),i=this;(8&n||16&n&&this.touches(t))&&(i=new nt(i.source,0)),4&n&&0==i.state&&(i=new nt(this.source,1)),i=i.updateFor(t,n);for(let e of t.effects)if(e.is(N))i=new nt(i.source,1,e.value);else if(e.is(U))i=new nt(i.source,0);else if(e.is(ot))for(let t of e.value)t.source==i.source&&(i=t);return i}updateFor(t,e){return this.map(t.changes)}map(t){return this}touches(t){return t.changes.touchesRange(R(t.state))}}class it extends nt{constructor(t,e,n,i,o,s){super(t,3,e),this.limit=n,this.result=i,this.from=o,this.to=s}hasResult(){return!0}updateFor(t,e){var n;if(!(3&e))return this.map(t.changes);let i=this.result;i.map&&!t.changes.empty&&(i=i.map(i,t.changes));let o=t.changes.mapPos(this.from),s=t.changes.mapPos(this.to,1),l=R(t.state);if(l>s||!i||2&e&&(R(t.startState)==this.from||l<this.limit))return new nt(this.source,4&e?1:0);let r=t.changes.mapPos(this.limit);return function(t,e,n,i){if(!t)return!1;let o=e.sliceDoc(n,i);return"function"==typeof t?t(o,n,i,e):P(t,!0).test(o)}(i.validFor,t.state,o,s)?new it(this.source,this.explicit,r,i,o,s):i.update&&(i=i.update(i,o,s,new T(t.state,l,!1)))?new it(this.source,this.explicit,r,i,i.from,null!==(n=i.to)&&void 0!==n?n:R(t.state)):new nt(this.source,1,this.explicit)}map(t){if(t.empty)return this;return(this.result.map?this.result.map(this.result,t):this.result)?new it(this.source,this.explicit,t.mapPos(this.limit),this.result,t.mapPos(this.from),t.mapPos(this.to,1)):new nt(this.source,0)}touches(t){return t.changes.touchesRange(this.from,this.to)}}const ot=s.define({map:(t,e)=>t.map(t=>t.map(e))}),st=s.define(),lt=t.define({create:()=>Y.start(),update:(t,e)=>t.update(e),provide:t=>[y.from(t,t=>t.tooltip),g.contentAttributes.from(t,t=>t.attrs)]});function rt(t,e){const n=e.completion.apply||e.completion.label;let i=t.state.field(lt).active.find(t=>t.source==e.source);return i instanceof it&&("string"==typeof n?t.dispatch({...B(t.state,n,i.from,i.to),annotations:M.of(e.completion)}):n(t,e.completion,i.from,i.to),!0)}const at=Q(lt,rt);function ct(t,e="option"){return n=>{let i=n.state.field(lt,!1);if(!i||!i.open||i.open.disabled||Date.now()-i.open.timestamp<n.state.facet(j).interactionDelay)return!1;let o,s=1;"page"==e&&(o=b(n,i.open.tooltip))&&(s=Math.max(2,Math.floor(o.dom.offsetHeight/o.dom.querySelector("li").offsetHeight)-1));let{length:l}=i.open.options,r=i.open.selected>-1?i.open.selected+s*(t?1:-1):t?0:l-1;return r<0?r="page"==e?0:l-1:r>=l&&(r="page"==e?l-1:0),n.dispatch({effects:st.of(r)}),!0}}const ht=t=>!!t.state.field(lt,!1)&&(t.dispatch({effects:N.of(!0)}),!0);class pt{constructor(t,e){this.active=t,this.context=e,this.time=Date.now(),this.updates=[],this.done=void 0}}const ft=v.fromClass(class{constructor(t){this.view=t,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.pendingStart=!1,this.composing=0;for(let e of t.state.field(lt).active)e.isPending&&this.startQuery(e)}update(t){let e=t.state.field(lt),n=t.state.facet(j);if(!t.selectionSet&&!t.docChanged&&t.startState.field(lt)==e)return;let i=t.transactions.some(t=>{let e=et(t,n);return 8&e||(t.selection||t.docChanged)&&!(3&e)});for(let e=0;e<this.running.length;e++){let n=this.running[e];if(i||n.context.abortOnDocChange&&t.docChanged||n.updates.length+t.transactions.length>50&&Date.now()-n.time>1e3){for(let t of n.context.abortListeners)try{t()}catch(t){w(this.view.state,t)}n.context.abortListeners=null,this.running.splice(e--,1)}else n.updates.push(...t.transactions)}this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),t.transactions.some(t=>t.effects.some(t=>t.is(N)))&&(this.pendingStart=!0);let o=this.pendingStart?50:n.activateOnTypingDelay;if(this.debounceUpdate=e.active.some(t=>t.isPending&&!this.running.some(e=>e.active.source==t.source))?setTimeout(()=>this.startUpdate(),o):-1,0!=this.composing)for(let e of t.transactions)e.isUserEvent("input.type")?this.composing=2:2==this.composing&&e.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1,this.pendingStart=!1;let{state:t}=this.view,e=t.field(lt);for(let t of e.active)t.isPending&&!this.running.some(e=>e.active.source==t.source)&&this.startQuery(t);this.running.length&&e.open&&e.open.disabled&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(j).updateSyncTime))}startQuery(t){let{state:e}=this.view,n=R(e),i=new T(e,n,t.explicit,this.view),o=new pt(t,i);this.running.push(o),Promise.resolve(t.source(i)).then(t=>{o.context.aborted||(o.done=t||null,this.scheduleAccept())},t=>{this.view.dispatch({effects:U.of(null)}),w(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(j).updateSyncTime))}accept(){var t;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],n=this.view.state.facet(j),i=this.view.state.field(lt);for(let o=0;o<this.running.length;o++){let s=this.running[o];if(void 0===s.done)continue;if(this.running.splice(o--,1),s.done){let i=R(s.updates.length?s.updates[0].startState:this.view.state),o=Math.min(i,s.done.from+(s.active.explicit?0:1)),l=new it(s.active.source,s.active.explicit,o,s.done,s.done.from,null!==(t=s.done.to)&&void 0!==t?t:i);for(let t of s.updates)l=l.update(t,n);if(l.hasResult()){e.push(l);continue}}let l=i.active.find(t=>t.source==s.active.source);if(l&&l.isPending)if(null==s.done){let t=new nt(s.active.source,0);for(let e of s.updates)t=t.update(e,n);t.isPending||e.push(t)}else this.startQuery(l)}(e.length||i.open&&i.open.disabled)&&this.view.dispatch({effects:ot.of(e)})}},{eventHandlers:{blur(t){let e=this.view.state.field(lt,!1);if(e&&e.tooltip&&this.view.state.facet(j).closeOnBlur){let n=e.open&&b(this.view,e.open.tooltip);n&&n.dom.contains(t.relatedTarget)||setTimeout(()=>this.view.dispatch({effects:U.of(null)}),10)}},compositionstart(){this.composing=1},compositionend(){3==this.composing&&setTimeout(()=>this.view.dispatch({effects:N.of(!1)}),20),this.composing=0}}}),dt="object"==typeof navigator&&/Win/.test(navigator.platform),ut=e.highest(g.domEventHandlers({keydown(t,e){let n=e.state.field(lt,!1);if(!n||!n.open||n.open.disabled||n.open.selected<0||t.key.length>1||t.ctrlKey&&(!dt||!t.altKey)||t.metaKey)return!1;let i=n.open.options[n.open.selected],o=n.active.find(t=>t.source==i.source),s=i.completion.commitCharacters||o.result.commitCharacters;return s&&s.indexOf(t.key)>-1&&rt(e,i),!1}})),mt=g.baseTheme({".cm-tooltip.cm-tooltip-autocomplete":{"& > ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",height:"100%",listStyle:"none",margin:0,padding:0,"& > li, & > completion-section":{padding:"1px 3px",lineHeight:1.2},"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer"},"& > completion-section":{display:"list-item",borderBottom:"1px solid silver",paddingLeft:"0.5em",opacity:.7}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#777"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#444"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"···"',opacity:.5,display:"block",textAlign:"center"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"400px",boxSizing:"border-box",whiteSpace:"pre-line"},".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 gt{constructor(t,e,n,i){this.field=t,this.line=e,this.from=n,this.to=i}}class vt{constructor(t,e,n){this.field=t,this.from=e,this.to=n}map(t){let e=t.mapPos(this.from,-1,p.TrackDel),n=t.mapPos(this.to,1,p.TrackDel);return null==e||null==n?null:new vt(this.field,e,n)}}class bt{constructor(t,e){this.lines=t,this.fieldPositions=e}instantiate(t,e){let n=[],i=[e],o=t.doc.lineAt(e),s=/^\s*/.exec(o.text)[0];for(let o of this.lines){if(n.length){let n=s,l=/^\t*/.exec(o)[0].length;for(let e=0;e<l;e++)n+=t.facet(O);i.push(e+n.length-l),o=n+o.slice(l)}n.push(o),e+=o.length+1}let l=this.fieldPositions.map(t=>new vt(t.field,i[t.line]+t.from,i[t.line]+t.to));return{text:n,ranges:l}}static parse(t){let e,n=[],i=[],o=[];for(let s of t.split(/\r\n?|\n/)){for(;e=/[#$]\{(?:(\d+)(?::([^{}]*))?|((?:\\[{}]|[^{}])*))\}/.exec(s);){let t=e[1]?+e[1]:null,l=e[2]||e[3]||"",r=-1,a=l.replace(/\\[{}]/g,t=>t[1]);for(let e=0;e<n.length;e++)(null!=t?n[e].seq==t:a&&n[e].name==a)&&(r=e);if(r<0){let e=0;for(;e<n.length&&(null==t||null!=n[e].seq&&n[e].seq<t);)e++;n.splice(e,0,{seq:t,name:a}),r=e;for(let t of o)t.field>=r&&t.field++}for(let t of o)if(t.line==i.length&&t.from>e.index){let n=e[2]?3+(e[1]||"").length:2;t.from-=n,t.to-=n}o.push(new gt(r,i.length,e.index,e.index+a.length)),s=s.slice(0,e.index)+l+s.slice(e.index+e[0].length)}s=s.replace(/\\([{}])/g,(t,e,n)=>{for(let t of o)t.line==i.length&&t.from>n&&(t.from--,t.to--);return e}),i.push(s)}return new bt(i,o)}}let yt=I.widget({widget:new class extends k{toDOM(){let t=document.createElement("span");return t.className="cm-snippetFieldPosition",t}ignoreEvent(){return!1}}}),wt=I.mark({class:"cm-snippetField"});class xt{constructor(t,e){this.ranges=t,this.active=e,this.deco=I.set(t.map(t=>(t.from==t.to?yt:wt).range(t.from,t.to)),!0)}map(t){let e=[];for(let n of this.ranges){let i=n.map(t);if(!i)return null;e.push(i)}return new xt(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 Ct=s.define({map:(t,e)=>t&&t.map(e)}),It=s.define(),kt=t.define({create:()=>null,update(t,e){for(let n of e.effects){if(n.is(Ct))return n.value;if(n.is(It)&&t)return new xt(t.ranges,n.value)}return t&&e.docChanged&&(t=t.map(e.changes)),t&&e.selection&&!t.selectionInsideField(e.selection)&&(t=null),t},provide:t=>g.decorations.from(t,t=>t?t.deco:I.none)});function Dt(t,e){return o.create(t.filter(t=>t.field==e).map(t=>o.range(t.from,t.to)))}function Ot(t){let e=bt.parse(t);return(t,n,i,o)=>{let{text:l,ranges:r}=e.instantiate(t.state,i),{main:a}=t.state.selection,c={changes:{from:i,to:o==a.from?a.to:o,insert:m.of(l)},scrollIntoView:!0,annotations:n?[M.of(n),u.userEvent.of("input.complete")]:void 0};if(r.length&&(c.selection=Dt(r,0)),r.some(t=>t.field>0)){let e=new xt(r,0),n=c.effects=[Ct.of(e)];void 0===t.state.field(kt,!1)&&n.push(s.appendConfig.of([kt,Lt,Rt,mt]))}t.dispatch(t.state.update(c))}}function Tt(t){return({state:e,dispatch:n})=>{let i=e.field(kt,!1);if(!i||t<0&&0==i.active)return!1;let o=i.active+t,s=t>0&&!i.ranges.some(e=>e.field==o+t);return n(e.update({selection:Dt(i.ranges,o),effects:Ct.of(s?null:new xt(i.ranges,o)),scrollIntoView:!0})),!0}}const At=[{key:"Tab",run:Tt(1),shift:Tt(-1)},{key:"Escape",run:({state:t,dispatch:e})=>!!t.field(kt,!1)&&(e(t.update({effects:Ct.of(null)})),!0)}],St=n.define({combine:t=>t.length?t[0]:At}),Lt=e.highest(x.compute([St],t=>t.facet(St)));function Et(t,e){return{...e,apply:Ot(t)}}const Rt=g.domEventHandlers({mousedown(t,e){let n,i=e.state.field(kt,!1);if(!i||null==(n=e.posAtCoords({x:t.clientX,y:t.clientY})))return!1;let o=i.ranges.find(t=>t.from<=n&&t.to>=n);return!(!o||o.field==i.active)&&(e.dispatch({selection:Dt(i.ranges,o.field),effects:Ct.of(i.ranges.some(t=>t.field>o.field)?new xt(i.ranges,o.field):null),scrollIntoView:!0}),!0)}}),Pt={brackets:["(","[","{","'",'"'],before:")]}:;>",stringPrefixes:[]},Mt=s.define({map(t,e){let n=e.mapPos(t,-1,p.TrackAfter);return null==n?void 0:n}}),Bt=new class extends f{};Bt.startSide=1,Bt.endSide=-1;const Ft=t.define({create:()=>r.empty,update(t,e){if(t=t.map(e.changes),e.selection){let n=e.state.doc.lineAt(e.selection.main.head);t=t.update({filter:t=>t>=n.from&&t<=n.to})}for(let n of e.effects)n.is(Mt)&&(t=t.update({add:[Bt.range(n.value,n.value+1)]}));return t}});function $t(){return[jt,Ft]}const Nt="()[]{}<>«»»«[]{}";function Ut(t){for(let e=0;e<16;e+=2)if(Nt.charCodeAt(e)==t)return Nt.charAt(e+1);return c(t<128?t:t+1)}function Wt(t,e){return t.languageDataAt("closeBrackets",e)[0]||Pt}const qt="object"==typeof navigator&&/Android\b/.test(navigator.userAgent),jt=g.inputHandler.of((t,e,n,o)=>{if((qt?t.composing:t.compositionStarted)||t.state.readOnly)return!1;let s=t.state.selection.main;if(o.length>2||2==o.length&&1==l(i(o,0))||e!=s.from||n!=s.to)return!1;let r=function(t,e){let n=Wt(t,t.selection.main.head),o=n.brackets||Pt.brackets;for(let s of o){let l=Ut(i(s,0));if(e==s)return l==s?_t(t,s,o.indexOf(s+s+s)>-1,n):Kt(t,s,l,n.before||Pt.before);if(e==l&&Vt(t,t.selection.main.from))return Qt(t,s,l)}return null}(t.state,o);return!!r&&(t.dispatch(r),!0)}),Ht=[{key:"Backspace",run:({state:t,dispatch:e})=>{if(t.readOnly)return!1;let n=Wt(t,t.selection.main.head).brackets||Pt.brackets,s=null,r=t.changeByRange(e=>{if(e.empty){let s=function(t,e){let n=t.sliceString(e-2,e);return l(i(n,0))==n.length?n:n.slice(1)}(t.doc,e.head);for(let l of n)if(l==s&&zt(t.doc,e.head)==Ut(i(l,0)))return{changes:{from:e.head-l.length,to:e.head+l.length},range:o.cursor(e.head-l.length)}}return{range:s=e}});return s||e(t.update(r,{scrollIntoView:!0,userEvent:"delete.backward"})),!s}}];function Vt(t,e){let n=!1;return t.field(Ft).between(0,t.doc.length,t=>{t==e&&(n=!0)}),n}function zt(t,e){let n=t.sliceString(e,e+2);return n.slice(0,l(i(n,0)))}function Kt(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:Mt.of(l.to+e.length),range:o.range(l.anchor+e.length,l.head+e.length)};let r=zt(t.doc,l.head);return!r||/\s/.test(r)||i.indexOf(r)>-1?{changes:{insert:e+n,from:l.head},effects:Mt.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 Qt(t,e,n){let i=null,s=t.changeByRange(e=>e.empty&&zt(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 _t(t,e,n,i){let s=i.stringPrefixes||Pt.stringPrefixes,l=null,r=t.changeByRange(i=>{if(!i.empty)return{changes:[{insert:e,from:i.from},{insert:e,from:i.to}],effects:Mt.of(i.to+e.length),range:o.range(i.anchor+e.length,i.head+e.length)};let r,a=i.head,c=zt(t.doc,a);if(c==e){if(Xt(t,a))return{changes:{insert:e+e,from:a},effects:Mt.of(a+e.length),range:o.cursor(a+e.length)};if(Vt(t,a)){let i=n&&t.sliceDoc(a,a+3*e.length)==e+e+e?e+e+e:e;return{changes:{from:a,to:a+i.length,insert:i},range:o.cursor(a+i.length)}}}else{if(n&&t.sliceDoc(a-2*e.length,a)==e+e&&(r=Yt(t,a-2*e.length,s))>-1&&Xt(t,r))return{changes:{insert:e+e+e+e,from:a},effects:Mt.of(a+e.length),range:o.cursor(a+e.length)};if(t.charCategorizer(a)(c)!=d.Word&&Yt(t,a,s)>-1&&!function(t,e,n,i){let o=D(t).resolveInner(e,-1),s=i.reduce((t,e)=>Math.max(t,e.length),0);for(let l=0;l<5;l++){let l=t.sliceDoc(o.from,Math.min(o.to,o.from+n.length+s)),r=l.indexOf(n);if(!r||r>-1&&i.indexOf(l.slice(0,r))>-1){let e=o.firstChild;for(;e&&e.from==o.from&&e.to-e.from>n.length+r;){if(t.sliceDoc(e.to-n.length,e.to)==n)return!1;e=e.firstChild}return!0}let a=o.to==e&&o.parent;if(!a)break;o=a}return!1}(t,a,e,s))return{changes:{insert:e+e,from:a},effects:Mt.of(a+e.length),range:o.cursor(a+e.length)}}return{range:l=i}});return l?null:t.update(r,{scrollIntoView:!0,userEvent:"input.type"})}function Xt(t,e){let n=D(t).resolveInner(e+1);return n.parent&&n.from==e}function Yt(t,e,n){let i=t.charCategorizer(e);if(i(t.sliceDoc(e-1,e))!=d.Word)return e;for(let o of n){let n=e-o.length;if(t.sliceDoc(n,e)==o&&i(t.sliceDoc(n-1,n))!=d.Word)return n}return-1}function Gt(t={}){return[ut,lt,j.of(t),ft,Zt,mt]}const Jt=[{key:"Ctrl-Space",run:ht},{mac:"Alt-`",run:ht},{mac:"Alt-i",run:ht},{key:"Escape",run:t=>{let e=t.state.field(lt,!1);return!(!e||!e.active.some(t=>0!=t.state))&&(t.dispatch({effects:U.of(null)}),!0)}},{key:"ArrowDown",run:ct(!0)},{key:"ArrowUp",run:ct(!1)},{key:"PageDown",run:ct(!0,"page")},{key:"PageUp",run:ct(!1,"page")},{key:"Enter",run:t=>{let e=t.state.field(lt,!1);return!(t.state.readOnly||!e||!e.open||e.open.selected<0||e.open.disabled||Date.now()-e.open.timestamp<t.state.facet(j).interactionDelay)&&rt(t,e.open.options[e.open.selected])}}],Zt=e.highest(x.computeN([j],t=>t.facet(j).defaultKeymap?[Jt]:[]));export{Gt as a,Ht as b,$t as c,Jt as d,S as e,L as i,Et as s};
2
- //# sourceMappingURL=index-jZ1aOVVJ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"index-jZ1aOVVJ.js","sources":["../node_modules/@codemirror/autocomplete/dist/index.js"],"sourcesContent":["import { Annotation, StateEffect, EditorSelection, codePointAt, codePointSize, fromCodePoint, Facet, combineConfig, StateField, Prec, Text, Transaction, MapMode, RangeValue, RangeSet, CharCategory } from '@codemirror/state';\nimport { Direction, logException, showTooltip, EditorView, ViewPlugin, getTooltip, Decoration, WidgetType, keymap } from '@codemirror/view';\nimport { syntaxTree, indentUnit } from '@codemirror/language';\n\n/**\nAn instance of this is passed to completion source functions.\n*/\nclass CompletionContext {\n /**\n Create a new completion context. (Mostly useful for testing\n completion sources—in the editor, the extension will create\n these for you.)\n */\n constructor(\n /**\n The editor state that the completion happens in.\n */\n state, \n /**\n The position at which the completion is happening.\n */\n pos, \n /**\n Indicates whether completion was activated explicitly, or\n implicitly by typing. The usual way to respond to this is to\n only return completions when either there is part of a\n completable entity before the cursor, or `explicit` is true.\n */\n explicit, \n /**\n The editor view. May be undefined if the context was created\n in a situation where there is no such view available, such as\n in synchronous updates via\n [`CompletionResult.update`](https://codemirror.net/6/docs/ref/#autocomplete.CompletionResult.update)\n or when called by test code.\n */\n view) {\n this.state = state;\n this.pos = pos;\n this.explicit = explicit;\n this.view = view;\n /**\n @internal\n */\n this.abortListeners = [];\n /**\n @internal\n */\n this.abortOnDocChange = false;\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 By default, running queries will not be aborted for regular\n typing or backspacing, on the assumption that they are likely to\n return a result with a\n [`validFor`](https://codemirror.net/6/docs/ref/#autocomplete.CompletionResult.validFor) field that\n allows the result to be used after all. Passing `onDocChange:\n true` will cause this query to be aborted for any document\n change.\n */\n addEventListener(type, listener, options) {\n if (type == \"abort\" && this.abortListeners) {\n this.abortListeners.push(listener);\n if (options && options.onDocChange)\n this.abortOnDocChange = true;\n }\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 {\n ...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 let lines = state.toText(text);\n return {\n changes: { from: range.from + fromOff, to: to == main.from ? range.to : range.from + toOff, insert: lines },\n range: EditorSelection.cursor(range.from + fromOff + lines.length)\n };\n }),\n scrollIntoView: true,\n userEvent: \"input.complete\"\n };\n}\nconst SourceCache = /*@__PURE__*/new WeakMap();\nfunction asSource(source) {\n if (!Array.isArray(source))\n return source;\n let known = SourceCache.get(source);\n if (!known)\n SourceCache.set(source, known = completeFromList(source));\n return known;\n}\nconst startCompletionEffect = /*@__PURE__*/StateEffect.define();\nconst closeCompletionEffect = /*@__PURE__*/StateEffect.define();\n\n// A pattern matcher for fuzzy completion matching. Create an instance\n// once for a pattern, and then use that to match any number of\n// completions.\nclass FuzzyMatcher {\n constructor(pattern) {\n this.pattern = pattern;\n this.chars = [];\n this.folded = [];\n // Buffers reused by calls to `match` to track matched character\n // positions.\n this.any = [];\n this.precise = [];\n this.byWord = [];\n this.score = 0;\n this.matched = [];\n for (let p = 0; p < pattern.length;) {\n let char = codePointAt(pattern, p), size = codePointSize(char);\n this.chars.push(char);\n let part = pattern.slice(p, p + size), upper = part.toUpperCase();\n this.folded.push(codePointAt(upper == part ? part.toLowerCase() : upper, 0));\n p += size;\n }\n this.astral = pattern.length != this.chars.length;\n }\n ret(score, matched) {\n this.score = score;\n this.matched = matched;\n return this;\n }\n // Matches a given word (completion) against the pattern (input).\n // Will return a boolean indicating whether there was a match and,\n // on success, set `this.score` to the score, `this.matched` to an\n // array of `from, to` pairs indicating the matched parts of `word`.\n //\n // The score is a number that is more negative the worse the match\n // is. See `Penalty` above.\n match(word) {\n if (this.pattern.length == 0)\n return this.ret(-100 /* Penalty.NotFull */, []);\n if (word.length < this.pattern.length)\n return null;\n let { chars, folded, any, precise, byWord } = this;\n // For single-character queries, only match when they occur right\n // at the start\n if (chars.length == 1) {\n let first = codePointAt(word, 0), firstSize = codePointSize(first);\n let score = firstSize == word.length ? 0 : -100 /* Penalty.NotFull */;\n if (first == chars[0]) ;\n else if (first == folded[0])\n score += -200 /* Penalty.CaseFold */;\n else\n return null;\n return this.ret(score, [0, firstSize]);\n }\n let direct = word.indexOf(this.pattern);\n if (direct == 0)\n return this.ret(word.length == this.pattern.length ? 0 : -100 /* Penalty.NotFull */, [0, this.pattern.length]);\n let len = chars.length, anyTo = 0;\n if (direct < 0) {\n for (let i = 0, e = Math.min(word.length, 200); i < e && anyTo < len;) {\n let next = codePointAt(word, i);\n if (next == chars[anyTo] || next == folded[anyTo])\n any[anyTo++] = i;\n i += codePointSize(next);\n }\n // No match, exit immediately\n if (anyTo < len)\n return null;\n }\n // This tracks the extent of the precise (non-folded, not\n // necessarily adjacent) match\n let preciseTo = 0;\n // Tracks whether there is a match that hits only characters that\n // appear to be starting words. `byWordFolded` is set to true when\n // a case folded character is encountered in such a match\n let byWordTo = 0, byWordFolded = false;\n // If we've found a partial adjacent match, these track its state\n let adjacentTo = 0, adjacentStart = -1, adjacentEnd = -1;\n let hasLower = /[a-z]/.test(word), wordAdjacent = true;\n // Go over the option's text, scanning for the various kinds of matches\n for (let i = 0, e = Math.min(word.length, 200), prevType = 0 /* Tp.NonWord */; i < e && byWordTo < len;) {\n let next = codePointAt(word, i);\n if (direct < 0) {\n if (preciseTo < len && next == chars[preciseTo])\n precise[preciseTo++] = i;\n if (adjacentTo < len) {\n if (next == chars[adjacentTo] || next == folded[adjacentTo]) {\n if (adjacentTo == 0)\n adjacentStart = i;\n adjacentEnd = i + 1;\n adjacentTo++;\n }\n else {\n adjacentTo = 0;\n }\n }\n }\n let ch, type = next < 0xff\n ? (next >= 48 && next <= 57 || next >= 97 && next <= 122 ? 2 /* Tp.Lower */ : next >= 65 && next <= 90 ? 1 /* Tp.Upper */ : 0 /* Tp.NonWord */)\n : ((ch = fromCodePoint(next)) != ch.toLowerCase() ? 1 /* Tp.Upper */ : ch != ch.toUpperCase() ? 2 /* Tp.Lower */ : 0 /* Tp.NonWord */);\n if (!i || type == 1 /* Tp.Upper */ && hasLower || prevType == 0 /* Tp.NonWord */ && type != 0 /* Tp.NonWord */) {\n if (chars[byWordTo] == next || (folded[byWordTo] == next && (byWordFolded = true)))\n byWord[byWordTo++] = i;\n else if (byWord.length)\n wordAdjacent = false;\n }\n prevType = type;\n i += codePointSize(next);\n }\n if (byWordTo == len && byWord[0] == 0 && wordAdjacent)\n return this.result(-100 /* Penalty.ByWord */ + (byWordFolded ? -200 /* Penalty.CaseFold */ : 0), byWord, word);\n if (adjacentTo == len && adjacentStart == 0)\n return this.ret(-200 /* Penalty.CaseFold */ - word.length + (adjacentEnd == word.length ? 0 : -100 /* Penalty.NotFull */), [0, adjacentEnd]);\n if (direct > -1)\n return this.ret(-700 /* Penalty.NotStart */ - word.length, [direct, direct + this.pattern.length]);\n if (adjacentTo == len)\n return this.ret(-200 /* Penalty.CaseFold */ + -700 /* Penalty.NotStart */ - word.length, [adjacentStart, adjacentEnd]);\n if (byWordTo == len)\n return this.result(-100 /* Penalty.ByWord */ + (byWordFolded ? -200 /* Penalty.CaseFold */ : 0) + -700 /* Penalty.NotStart */ +\n (wordAdjacent ? 0 : -1100 /* Penalty.Gap */), byWord, word);\n return chars.length == 2 ? null\n : this.result((any[0] ? -700 /* Penalty.NotStart */ : 0) + -200 /* Penalty.CaseFold */ + -1100 /* Penalty.Gap */, any, word);\n }\n result(score, positions, word) {\n let result = [], i = 0;\n for (let pos of positions) {\n let to = pos + (this.astral ? codePointSize(codePointAt(word, pos)) : 1);\n if (i && result[i - 1] == pos)\n result[i - 1] = to;\n else {\n result[i++] = pos;\n result[i++] = to;\n }\n }\n return this.ret(score - word.length, result);\n }\n}\nclass StrictMatcher {\n constructor(pattern) {\n this.pattern = pattern;\n this.matched = [];\n this.score = 0;\n this.folded = pattern.toLowerCase();\n }\n match(word) {\n if (word.length < this.pattern.length)\n return null;\n let start = word.slice(0, this.pattern.length);\n let match = start == this.pattern ? 0 : start.toLowerCase() == this.folded ? -200 /* Penalty.CaseFold */ : null;\n if (match == null)\n return null;\n this.matched = [0, start.length];\n this.score = match + (word.length == this.pattern.length ? 0 : -100 /* Penalty.NotFull */);\n return this;\n }\n}\n\nconst completionConfig = /*@__PURE__*/Facet.define({\n combine(configs) {\n return combineConfig(configs, {\n activateOnTyping: true,\n activateOnCompletion: () => false,\n activateOnTypingDelay: 100,\n selectOnOpen: true,\n override: null,\n closeOnBlur: true,\n maxRenderedOptions: 100,\n defaultKeymap: true,\n tooltipClass: () => \"\",\n optionClass: () => \"\",\n aboveCursor: false,\n icons: true,\n addToOptions: [],\n positionInfo: defaultPositionInfo,\n filterStrict: false,\n compareCompletions: (a, b) => a.label.localeCompare(b.label),\n interactionDelay: 75,\n updateSyncTime: 100\n }, {\n defaultKeymap: (a, b) => a && b,\n closeOnBlur: (a, b) => a && b,\n icons: (a, b) => a && b,\n tooltipClass: (a, b) => c => joinClass(a(c), b(c)),\n optionClass: (a, b) => c => joinClass(a(c), b(c)),\n addToOptions: (a, b) => a.concat(b),\n filterStrict: (a, b) => a || b,\n });\n }\n});\nfunction joinClass(a, b) {\n return a ? b ? a + \" \" + b : a : b;\n}\nfunction defaultPositionInfo(view, list, option, info, space, tooltip) {\n let rtl = view.textDirection == Direction.RTL, left = rtl, narrow = false;\n let side = \"top\", offset, maxWidth;\n let spaceLeft = list.left - space.left, spaceRight = space.right - list.right;\n let infoWidth = info.right - info.left, infoHeight = info.bottom - info.top;\n if (left && spaceLeft < Math.min(infoWidth, spaceRight))\n left = false;\n else if (!left && spaceRight < Math.min(infoWidth, spaceLeft))\n left = true;\n if (infoWidth <= (left ? spaceLeft : spaceRight)) {\n offset = Math.max(space.top, Math.min(option.top, space.bottom - infoHeight)) - list.top;\n maxWidth = Math.min(400 /* Info.Width */, left ? spaceLeft : spaceRight);\n }\n else {\n narrow = true;\n maxWidth = Math.min(400 /* Info.Width */, (rtl ? list.right : space.right - list.left) - 30 /* Info.Margin */);\n let spaceBelow = space.bottom - list.bottom;\n if (spaceBelow >= infoHeight || spaceBelow > list.top) { // Below the completion\n offset = option.bottom - list.top;\n }\n else { // Above it\n side = \"bottom\";\n offset = list.bottom - option.top;\n }\n }\n let scaleY = (list.bottom - list.top) / tooltip.offsetHeight;\n let scaleX = (list.right - list.left) / tooltip.offsetWidth;\n return {\n style: `${side}: ${offset / scaleY}px; max-width: ${maxWidth / scaleX}px`,\n class: \"cm-completionInfo-\" + (narrow ? (rtl ? \"left-narrow\" : \"right-narrow\") : left ? \"left\" : \"right\")\n };\n}\n\nfunction optionContent(config) {\n let content = config.addToOptions.slice();\n if (config.icons)\n content.push({\n render(completion) {\n let icon = document.createElement(\"div\");\n icon.classList.add(\"cm-completionIcon\");\n if (completion.type)\n icon.classList.add(...completion.type.split(/\\s+/g).map(cls => \"cm-completionIcon-\" + cls));\n icon.setAttribute(\"aria-hidden\", \"true\");\n return icon;\n },\n position: 20\n });\n content.push({\n render(completion, _s, _v, match) {\n let labelElt = document.createElement(\"span\");\n labelElt.className = \"cm-completionLabel\";\n let label = completion.displayLabel || completion.label, off = 0;\n for (let j = 0; j < match.length;) {\n let from = match[j++], to = match[j++];\n if (from > off)\n labelElt.appendChild(document.createTextNode(label.slice(off, from)));\n let span = labelElt.appendChild(document.createElement(\"span\"));\n span.appendChild(document.createTextNode(label.slice(from, to)));\n span.className = \"cm-completionMatchedText\";\n off = to;\n }\n if (off < label.length)\n labelElt.appendChild(document.createTextNode(label.slice(off)));\n return labelElt;\n },\n position: 50\n }, {\n render(completion) {\n if (!completion.detail)\n return null;\n let detailElt = document.createElement(\"span\");\n detailElt.className = \"cm-completionDetail\";\n detailElt.textContent = completion.detail;\n return detailElt;\n },\n position: 80\n });\n return content.sort((a, b) => a.position - b.position).map(a => a.render);\n}\nfunction rangeAroundSelected(total, selected, max) {\n if (total <= max)\n return { from: 0, to: total };\n if (selected < 0)\n selected = 0;\n if (selected <= (total >> 1)) {\n let off = Math.floor(selected / max);\n return { from: off * max, to: (off + 1) * max };\n }\n let off = Math.floor((total - selected) / max);\n return { from: total - (off + 1) * max, to: total - off * max };\n}\nclass CompletionTooltip {\n constructor(view, stateField, applyCompletion) {\n this.view = view;\n this.stateField = stateField;\n this.applyCompletion = applyCompletion;\n this.info = null;\n this.infoDestroy = null;\n this.placeInfoReq = {\n read: () => this.measureInfo(),\n write: (pos) => this.placeInfo(pos),\n key: this\n };\n this.space = null;\n this.currentClass = \"\";\n let cState = view.state.field(stateField);\n let { options, selected } = cState.open;\n let config = view.state.facet(completionConfig);\n this.optionContent = optionContent(config);\n this.optionClass = config.optionClass;\n this.tooltipClass = config.tooltipClass;\n this.range = rangeAroundSelected(options.length, selected, config.maxRenderedOptions);\n this.dom = document.createElement(\"div\");\n this.dom.className = \"cm-tooltip-autocomplete\";\n this.updateTooltipClass(view.state);\n this.dom.addEventListener(\"mousedown\", (e) => {\n let { options } = view.state.field(stateField).open;\n for (let dom = e.target, match; dom && dom != this.dom; dom = dom.parentNode) {\n if (dom.nodeName == \"LI\" && (match = /-(\\d+)$/.exec(dom.id)) && +match[1] < options.length) {\n this.applyCompletion(view, options[+match[1]]);\n e.preventDefault();\n return;\n }\n }\n });\n this.dom.addEventListener(\"focusout\", (e) => {\n let state = view.state.field(this.stateField, false);\n if (state && state.tooltip && view.state.facet(completionConfig).closeOnBlur &&\n e.relatedTarget != view.contentDOM)\n view.dispatch({ effects: closeCompletionEffect.of(null) });\n });\n this.showOptions(options, cState.id);\n }\n mount() { this.updateSel(); }\n showOptions(options, id) {\n if (this.list)\n this.list.remove();\n this.list = this.dom.appendChild(this.createListBox(options, id, this.range));\n this.list.addEventListener(\"scroll\", () => {\n if (this.info)\n this.view.requestMeasure(this.placeInfoReq);\n });\n }\n update(update) {\n var _a;\n let cState = update.state.field(this.stateField);\n let prevState = update.startState.field(this.stateField);\n this.updateTooltipClass(update.state);\n if (cState != prevState) {\n let { options, selected, disabled } = cState.open;\n if (!prevState.open || prevState.open.options != options) {\n this.range = rangeAroundSelected(options.length, selected, update.state.facet(completionConfig).maxRenderedOptions);\n this.showOptions(options, cState.id);\n }\n this.updateSel();\n if (disabled != ((_a = prevState.open) === null || _a === void 0 ? void 0 : _a.disabled))\n this.dom.classList.toggle(\"cm-tooltip-autocomplete-disabled\", !!disabled);\n }\n }\n updateTooltipClass(state) {\n let cls = this.tooltipClass(state);\n if (cls != this.currentClass) {\n for (let c of this.currentClass.split(\" \"))\n if (c)\n this.dom.classList.remove(c);\n for (let c of cls.split(\" \"))\n if (c)\n this.dom.classList.add(c);\n this.currentClass = cls;\n }\n }\n positioned(space) {\n this.space = space;\n if (this.info)\n this.view.requestMeasure(this.placeInfoReq);\n }\n updateSel() {\n let cState = this.view.state.field(this.stateField), open = cState.open;\n if (open.selected > -1 && open.selected < this.range.from || open.selected >= this.range.to) {\n this.range = rangeAroundSelected(open.options.length, open.selected, this.view.state.facet(completionConfig).maxRenderedOptions);\n this.showOptions(open.options, cState.id);\n }\n if (this.updateSelectedOption(open.selected)) {\n this.destroyInfo();\n let { completion } = open.options[open.selected];\n let { info } = completion;\n if (!info)\n return;\n let infoResult = typeof info === \"string\" ? document.createTextNode(info) : info(completion);\n if (!infoResult)\n return;\n if (\"then\" in infoResult) {\n infoResult.then(obj => {\n if (obj && this.view.state.field(this.stateField, false) == cState)\n this.addInfoPane(obj, completion);\n }).catch(e => logException(this.view.state, e, \"completion info\"));\n }\n else {\n this.addInfoPane(infoResult, completion);\n }\n }\n }\n addInfoPane(content, completion) {\n this.destroyInfo();\n let wrap = this.info = document.createElement(\"div\");\n wrap.className = \"cm-tooltip cm-completionInfo\";\n if (content.nodeType != null) {\n wrap.appendChild(content);\n this.infoDestroy = null;\n }\n else {\n let { dom, destroy } = content;\n wrap.appendChild(dom);\n this.infoDestroy = destroy || null;\n }\n this.dom.appendChild(wrap);\n this.view.requestMeasure(this.placeInfoReq);\n }\n updateSelectedOption(selected) {\n let set = null;\n for (let opt = this.list.firstChild, i = this.range.from; opt; opt = opt.nextSibling, i++) {\n if (opt.nodeName != \"LI\" || !opt.id) {\n i--; // A section header\n }\n else if (i == selected) {\n if (!opt.hasAttribute(\"aria-selected\")) {\n opt.setAttribute(\"aria-selected\", \"true\");\n set = opt;\n }\n }\n else {\n if (opt.hasAttribute(\"aria-selected\"))\n opt.removeAttribute(\"aria-selected\");\n }\n }\n if (set)\n scrollIntoView(this.list, set);\n return set;\n }\n measureInfo() {\n let sel = this.dom.querySelector(\"[aria-selected]\");\n if (!sel || !this.info)\n return null;\n let listRect = this.dom.getBoundingClientRect();\n let infoRect = this.info.getBoundingClientRect();\n let selRect = sel.getBoundingClientRect();\n let space = this.space;\n if (!space) {\n let docElt = this.dom.ownerDocument.documentElement;\n space = { left: 0, top: 0, right: docElt.clientWidth, bottom: docElt.clientHeight };\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 ul.addEventListener(\"mousedown\", e => {\n // Prevent focus change when clicking the scrollbar\n if (e.target == ul)\n e.preventDefault();\n });\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, dynamicSectionScore = null;\n let addOption = (option) => {\n options.push(option);\n let { section } = option.completion;\n if (section) {\n if (!sections)\n sections = [];\n let name = typeof section == \"string\" ? section : section.name;\n if (!sections.some(s => s.name == name))\n sections.push(typeof section == \"string\" ? { name } : section);\n }\n };\n let conf = state.facet(completionConfig);\n for (let a of active)\n if (a.hasResult()) {\n let getMatch = a.result.getMatch;\n if (a.result.filter === false) {\n for (let option of a.result.options) {\n addOption(new Option(option, a.source, getMatch ? getMatch(option) : [], 1e9 - options.length));\n }\n }\n else {\n let pattern = state.sliceDoc(a.from, a.to), match;\n let matcher = conf.filterStrict ? new StrictMatcher(pattern) : new FuzzyMatcher(pattern);\n for (let option of a.result.options)\n if (match = matcher.match(option.label)) {\n let matched = !option.displayLabel ? match.matched : getMatch ? getMatch(option, match.matched) : [];\n let score = match.score + (option.boost || 0);\n addOption(new Option(option, a.source, matched, score));\n if (typeof option.section == \"object\" && option.section.rank === \"dynamic\") {\n let { name } = option.section;\n if (!dynamicSectionScore)\n dynamicSectionScore = Object.create(null);\n dynamicSectionScore[name] = Math.max(score, dynamicSectionScore[name] || -1e9);\n }\n }\n }\n }\n if (sections) {\n let sectionOrder = Object.create(null), pos = 0;\n let cmp = (a, b) => {\n return (a.rank === \"dynamic\" && b.rank === \"dynamic\" ? dynamicSectionScore[b.name] - dynamicSectionScore[a.name] : 0) ||\n (typeof a.rank == \"number\" ? a.rank : 1e9) - (typeof b.rank == \"number\" ? b.rank : 1e9) ||\n (a.name < b.name ? -1 : 1);\n };\n for (let s of sections.sort(cmp)) {\n pos -= 1e5;\n sectionOrder[s.name] = pos;\n }\n for (let option of options) {\n let { section } = option.completion;\n if (section)\n option.score += sectionOrder[typeof section == \"string\" ? section : section.name];\n }\n }\n let result = [], prev = null;\n let compare = conf.compareCompletions;\n for (let opt of options.sort((a, b) => (b.score - a.score) || compare(a.completion, b.completion))) {\n let cur = opt.completion;\n if (!prev || prev.label != cur.label || prev.detail != cur.detail ||\n (prev.type != null && cur.type != null && prev.type != cur.type) ||\n prev.apply != cur.apply || prev.boost != cur.boost)\n result.push(opt);\n else if (score(opt.completion) > score(prev))\n result[result.length - 1] = opt;\n prev = opt.completion;\n }\n return result;\n}\nclass CompletionDialog {\n constructor(options, attrs, tooltip, timestamp, selected, disabled) {\n this.options = options;\n this.attrs = attrs;\n this.tooltip = tooltip;\n this.timestamp = timestamp;\n this.selected = selected;\n this.disabled = disabled;\n }\n setSelected(selected, id) {\n return selected == this.selected || selected >= this.options.length ? this\n : new CompletionDialog(this.options, makeAttrs(id, selected), this.tooltip, this.timestamp, selected, this.disabled);\n }\n static build(active, state, id, prev, conf, didSetActive) {\n if (prev && !didSetActive && active.some(s => s.isPending))\n return prev.setDisabled();\n let options = sortOptions(active, state);\n if (!options.length)\n return prev && active.some(a => a.isPending) ? prev.setDisabled() : null;\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, { ...this.tooltip, pos: changes.mapPos(this.tooltip.pos) }, this.timestamp, this.selected, this.disabled);\n }\n setDisabled() {\n return new CompletionDialog(this.options, this.attrs, this.tooltip, this.timestamp, this.selected, true);\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, didSet = tr.effects.some(e => e.is(setActiveEffect));\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) || didSet)\n open = CompletionDialog.build(active, state, this.id, open, conf, didSet);\n else if (open && open.disabled && !active.some(a => a.isPending))\n open = null;\n if (!open && active.every(a => !a.isPending) && 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 : this.active.length ? baseAttrs : noAttrs; }\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};\nconst noAttrs = {};\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 getUpdateType(tr, conf) {\n if (tr.isUserEvent(\"input.complete\")) {\n let completion = tr.annotation(pickedCompletion);\n if (completion && conf.activateOnCompletion(completion))\n return 4 /* UpdateType.Activate */ | 8 /* UpdateType.Reset */;\n }\n let typing = tr.isUserEvent(\"input.type\");\n return typing && conf.activateOnTyping ? 4 /* UpdateType.Activate */ | 1 /* UpdateType.Typing */\n : typing ? 1 /* UpdateType.Typing */\n : tr.isUserEvent(\"delete.backward\") ? 2 /* UpdateType.Backspacing */\n : tr.selection ? 8 /* UpdateType.Reset */\n : tr.docChanged ? 16 /* UpdateType.ResetIfTouching */ : 0 /* UpdateType.None */;\n}\nclass ActiveSource {\n constructor(source, state, explicit = false) {\n this.source = source;\n this.state = state;\n this.explicit = explicit;\n }\n hasResult() { return false; }\n get isPending() { return this.state == 1 /* State.Pending */; }\n update(tr, conf) {\n let type = getUpdateType(tr, conf), value = this;\n if ((type & 8 /* UpdateType.Reset */) || (type & 16 /* UpdateType.ResetIfTouching */) && this.touches(tr))\n value = new ActiveSource(value.source, 0 /* State.Inactive */);\n if ((type & 4 /* UpdateType.Activate */) && value.state == 0 /* State.Inactive */)\n value = new ActiveSource(this.source, 1 /* State.Pending */);\n value = value.updateFor(tr, type);\n for (let effect of tr.effects) {\n if (effect.is(startCompletionEffect))\n value = new ActiveSource(value.source, 1 /* State.Pending */, effect.value);\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 updateFor(tr, type) { return this.map(tr.changes); }\n map(changes) { return this; }\n touches(tr) {\n return tr.changes.touchesRange(cur(tr.state));\n }\n}\nclass ActiveResult extends ActiveSource {\n constructor(source, explicit, limit, result, from, to) {\n super(source, 3 /* State.Result */, explicit);\n this.limit = limit;\n this.result = result;\n this.from = from;\n this.to = to;\n }\n hasResult() { return true; }\n updateFor(tr, type) {\n var _a;\n if (!(type & 3 /* UpdateType.SimpleInteraction */))\n return this.map(tr.changes);\n let result = this.result;\n if (result.map && !tr.changes.empty)\n result = result.map(result, tr.changes);\n let from = tr.changes.mapPos(this.from), to = tr.changes.mapPos(this.to, 1);\n let pos = cur(tr.state);\n if (pos > to || !result ||\n (type & 2 /* UpdateType.Backspacing */) && (cur(tr.startState) == this.from || pos < this.limit))\n return new ActiveSource(this.source, type & 4 /* UpdateType.Activate */ ? 1 /* State.Pending */ : 0 /* State.Inactive */);\n let limit = tr.changes.mapPos(this.limit);\n if (checkValid(result.validFor, tr.state, from, to))\n return new ActiveResult(this.source, this.explicit, limit, result, from, to);\n if (result.update &&\n (result = result.update(result, from, to, new CompletionContext(tr.state, pos, false))))\n return new ActiveResult(this.source, this.explicit, limit, result, result.from, (_a = result.to) !== null && _a !== void 0 ? _a : cur(tr.state));\n return new ActiveSource(this.source, 1 /* State.Pending */, this.explicit);\n }\n map(mapping) {\n if (mapping.empty)\n return this;\n let result = this.result.map ? this.result.map(this.result, mapping) : this.result;\n if (!result)\n return new ActiveSource(this.source, 0 /* State.Inactive */);\n return new ActiveResult(this.source, this.explicit, mapping.mapPos(this.limit), this.result, mapping.mapPos(this.from), mapping.mapPos(this.to, 1));\n }\n touches(tr) {\n return tr.changes.touchesRange(this.from, this.to);\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({\n ...insertCompletionText(view.state, apply, result.from, result.to),\n annotations: pickedCompletion.of(option.completion)\n });\n else\n apply(view, option.completion, result.from, result.to);\n return true;\n}\nconst createTooltip = /*@__PURE__*/completionTooltip(completionState, applyCompletion);\n\n/**\nReturns a command that moves the completion selection forward or\nbackward by the given amount.\n*/\nfunction moveCompletionSelection(forward, by = \"option\") {\n return (view) => {\n let cState = view.state.field(completionState, false);\n if (!cState || !cState.open || cState.open.disabled ||\n Date.now() - cState.open.timestamp < view.state.facet(completionConfig).interactionDelay)\n return false;\n let step = 1, tooltip;\n if (by == \"page\" && (tooltip = getTooltip(view, cState.open.tooltip)))\n step = Math.max(2, Math.floor(tooltip.dom.offsetHeight /\n tooltip.dom.querySelector(\"li\").offsetHeight) - 1);\n let { length } = cState.open.options;\n let selected = cState.open.selected > -1 ? cState.open.selected + step * (forward ? 1 : -1) : forward ? 0 : length - 1;\n if (selected < 0)\n selected = by == \"page\" ? 0 : length - 1;\n else if (selected >= length)\n selected = by == \"page\" ? length - 1 : 0;\n view.dispatch({ effects: setSelectedEffect.of(selected) });\n return true;\n };\n}\n/**\nAccept the current completion.\n*/\nconst acceptCompletion = (view) => {\n let cState = view.state.field(completionState, false);\n if (view.state.readOnly || !cState || !cState.open || cState.open.selected < 0 || cState.open.disabled ||\n Date.now() - cState.open.timestamp < view.state.facet(completionConfig).interactionDelay)\n return false;\n return applyCompletion(view, cState.open.options[cState.open.selected]);\n};\n/**\nExplicitly start autocompletion.\n*/\nconst startCompletion = (view) => {\n let cState = view.state.field(completionState, false);\n if (!cState)\n return false;\n view.dispatch({ effects: startCompletionEffect.of(true) });\n return true;\n};\n/**\nClose the currently active completion.\n*/\nconst closeCompletion = (view) => {\n let cState = view.state.field(completionState, false);\n if (!cState || !cState.active.some(a => a.state != 0 /* State.Inactive */))\n return false;\n view.dispatch({ effects: closeCompletionEffect.of(null) });\n return true;\n};\nclass RunningQuery {\n constructor(active, context) {\n this.active = active;\n this.context = context;\n this.time = Date.now();\n this.updates = [];\n // Note that 'undefined' means 'not done yet', whereas 'null' means\n // 'query returned null'.\n this.done = undefined;\n }\n}\nconst MaxUpdateCount = 50, MinAbortTime = 1000;\nconst completionPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n constructor(view) {\n this.view = view;\n this.debounceUpdate = -1;\n this.running = [];\n this.debounceAccept = -1;\n this.pendingStart = false;\n this.composing = 0 /* CompositionState.None */;\n for (let active of view.state.field(completionState).active)\n if (active.isPending)\n this.startQuery(active);\n }\n update(update) {\n let cState = update.state.field(completionState);\n let conf = update.state.facet(completionConfig);\n if (!update.selectionSet && !update.docChanged && update.startState.field(completionState) == cState)\n return;\n let doesReset = update.transactions.some(tr => {\n let type = getUpdateType(tr, conf);\n return (type & 8 /* UpdateType.Reset */) || (tr.selection || tr.docChanged) && !(type & 3 /* UpdateType.SimpleInteraction */);\n });\n for (let i = 0; i < this.running.length; i++) {\n let query = this.running[i];\n if (doesReset ||\n query.context.abortOnDocChange && update.docChanged ||\n query.updates.length + update.transactions.length > MaxUpdateCount && Date.now() - query.time > MinAbortTime) {\n for (let handler of query.context.abortListeners) {\n try {\n handler();\n }\n catch (e) {\n logException(this.view.state, e);\n }\n }\n query.context.abortListeners = null;\n this.running.splice(i--, 1);\n }\n else {\n query.updates.push(...update.transactions);\n }\n }\n if (this.debounceUpdate > -1)\n clearTimeout(this.debounceUpdate);\n if (update.transactions.some(tr => tr.effects.some(e => e.is(startCompletionEffect))))\n this.pendingStart = true;\n let delay = this.pendingStart ? 50 : conf.activateOnTypingDelay;\n this.debounceUpdate = cState.active.some(a => a.isPending && !this.running.some(q => q.active.source == a.source))\n ? setTimeout(() => this.startUpdate(), delay) : -1;\n if (this.composing != 0 /* CompositionState.None */)\n for (let tr of update.transactions) {\n if (tr.isUserEvent(\"input.type\"))\n this.composing = 2 /* CompositionState.Changed */;\n else if (this.composing == 2 /* CompositionState.Changed */ && tr.selection)\n this.composing = 3 /* CompositionState.ChangedAndMoved */;\n }\n }\n startUpdate() {\n this.debounceUpdate = -1;\n this.pendingStart = false;\n let { state } = this.view, cState = state.field(completionState);\n for (let active of cState.active) {\n if (active.isPending && !this.running.some(r => r.active.source == active.source))\n this.startQuery(active);\n }\n if (this.running.length && cState.open && cState.open.disabled)\n this.debounceAccept = setTimeout(() => this.accept(), this.view.state.facet(completionConfig).updateSyncTime);\n }\n startQuery(active) {\n let { state } = this.view, pos = cur(state);\n let context = new CompletionContext(state, pos, active.explicit, this.view);\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), cState = this.view.state.field(completionState);\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 pos = cur(query.updates.length ? query.updates[0].startState : this.view.state);\n let limit = Math.min(pos, query.done.from + (query.active.explicit ? 0 : 1));\n let active = new ActiveResult(query.active.source, query.active.explicit, limit, query.done, query.done.from, (_a = query.done.to) !== null && _a !== void 0 ? _a : pos);\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 = cState.active.find(a => a.source == query.active.source);\n if (current && current.isPending) {\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.isPending)\n updated.push(active);\n }\n else {\n // Cleared by subsequent transactions. Restart.\n this.startQuery(current);\n }\n }\n }\n if (updated.length || cState.open && cState.open.disabled)\n this.view.dispatch({ effects: setActiveEffect.of(updated) });\n }\n}, {\n eventHandlers: {\n blur(event) {\n let state = this.view.state.field(completionState, false);\n if (state && state.tooltip && this.view.state.facet(completionConfig).closeOnBlur) {\n let dialog = state.open && getTooltip(this.view, state.open.tooltip);\n if (!dialog || !dialog.dom.contains(event.relatedTarget))\n setTimeout(() => this.view.dispatch({ effects: closeCompletionEffect.of(null) }), 10);\n }\n },\n compositionstart() {\n this.composing = 1 /* CompositionState.Started */;\n },\n compositionend() {\n if (this.composing == 3 /* CompositionState.ChangedAndMoved */) {\n // Safari fires compositionend events synchronously, possibly\n // from inside an update, so dispatch asynchronously to avoid reentrancy\n setTimeout(() => this.view.dispatch({ effects: startCompletionEffect.of(false) }), 20);\n }\n this.composing = 0 /* CompositionState.None */;\n }\n }\n});\nconst windows = typeof navigator == \"object\" && /*@__PURE__*//Win/.test(navigator.platform);\nconst commitCharacters = /*@__PURE__*/Prec.highest(/*@__PURE__*/EditorView.domEventHandlers({\n keydown(event, view) {\n let field = view.state.field(completionState, false);\n if (!field || !field.open || field.open.disabled || field.open.selected < 0 ||\n event.key.length > 1 || event.ctrlKey && !(windows && event.altKey) || event.metaKey)\n return false;\n let option = field.open.options[field.open.selected];\n let result = field.active.find(a => a.source == option.source);\n let commitChars = option.completion.commitCharacters || result.result.commitCharacters;\n if (commitChars && commitChars.indexOf(event.key) > -1)\n applyCompletion(view, option);\n return false;\n }\n}));\n\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n \".cm-tooltip.cm-tooltip-autocomplete\": {\n \"& > ul\": {\n fontFamily: \"monospace\",\n whiteSpace: \"nowrap\",\n overflow: \"hidden auto\",\n maxWidth_fallback: \"700px\",\n maxWidth: \"min(700px, 95vw)\",\n minWidth: \"250px\",\n maxHeight: \"10em\",\n height: \"100%\",\n listStyle: \"none\",\n margin: 0,\n padding: 0,\n \"& > li, & > completion-section\": {\n padding: \"1px 3px\",\n lineHeight: 1.2\n },\n \"& > li\": {\n overflowX: \"hidden\",\n textOverflow: \"ellipsis\",\n cursor: \"pointer\"\n },\n \"& > completion-section\": {\n display: \"list-item\",\n borderBottom: \"1px solid silver\",\n paddingLeft: \"0.5em\",\n opacity: 0.7\n }\n }\n },\n \"&light .cm-tooltip-autocomplete ul li[aria-selected]\": {\n background: \"#17c\",\n color: \"white\",\n },\n \"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]\": {\n background: \"#777\",\n },\n \"&dark .cm-tooltip-autocomplete ul li[aria-selected]\": {\n background: \"#347\",\n color: \"white\",\n },\n \"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]\": {\n background: \"#444\",\n },\n \".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after\": {\n content: '\"···\"',\n opacity: 0.5,\n display: \"block\",\n textAlign: \"center\"\n },\n \".cm-tooltip.cm-completionInfo\": {\n position: \"absolute\",\n padding: \"3px 9px\",\n width: \"max-content\",\n maxWidth: `${400 /* Info.Width */}px`,\n boxSizing: \"border-box\",\n whiteSpace: \"pre-line\"\n },\n \".cm-completionInfo.cm-completionInfo-left\": { right: \"100%\" },\n \".cm-completionInfo.cm-completionInfo-right\": { left: \"100%\" },\n \".cm-completionInfo.cm-completionInfo-left-narrow\": { right: `${30 /* Info.Margin */}px` },\n \".cm-completionInfo.cm-completionInfo-right-narrow\": { left: `${30 /* Info.Margin */}px` },\n \"&light .cm-snippetField\": { backgroundColor: \"#00000022\" },\n \"&dark .cm-snippetField\": { backgroundColor: \"#ffffff22\" },\n \".cm-snippetFieldPosition\": {\n verticalAlign: \"text-top\",\n width: 0,\n height: \"1.15em\",\n display: \"inline-block\",\n margin: \"0 -0.7px -.7em\",\n borderLeft: \"1.4px dotted #888\"\n },\n \".cm-completionMatchedText\": {\n textDecoration: \"underline\"\n },\n \".cm-completionDetail\": {\n marginLeft: \"0.5em\",\n fontStyle: \"italic\"\n },\n \".cm-completionIcon\": {\n fontSize: \"90%\",\n width: \".8em\",\n display: \"inline-block\",\n textAlign: \"center\",\n paddingRight: \".6em\",\n opacity: \"0.6\",\n boxSizing: \"content-box\"\n },\n \".cm-completionIcon-function, .cm-completionIcon-method\": {\n \"&:after\": { content: \"'ƒ'\" }\n },\n \".cm-completionIcon-class\": {\n \"&:after\": { content: \"'○'\" }\n },\n \".cm-completionIcon-interface\": {\n \"&:after\": { content: \"'◌'\" }\n },\n \".cm-completionIcon-variable\": {\n \"&:after\": { content: \"'𝑥'\" }\n },\n \".cm-completionIcon-constant\": {\n \"&:after\": { content: \"'𝐶'\" }\n },\n \".cm-completionIcon-type\": {\n \"&:after\": { content: \"'𝑡'\" }\n },\n \".cm-completionIcon-enum\": {\n \"&:after\": { content: \"'∪'\" }\n },\n \".cm-completionIcon-property\": {\n \"&:after\": { content: \"'□'\" }\n },\n \".cm-completionIcon-keyword\": {\n \"&:after\": { content: \"'🔑\\uFE0E'\" } // Disable emoji rendering\n },\n \".cm-completionIcon-namespace\": {\n \"&:after\": { content: \"'▢'\" }\n },\n \".cm-completionIcon-text\": {\n \"&:after\": { content: \"'abc'\", fontSize: \"50%\", verticalAlign: \"middle\" }\n }\n});\n\nclass FieldPos {\n constructor(field, line, from, to) {\n this.field = field;\n this.line = line;\n this.from = from;\n this.to = to;\n }\n}\nclass FieldRange {\n constructor(field, from, to) {\n this.field = field;\n this.from = from;\n this.to = to;\n }\n map(changes) {\n let from = changes.mapPos(this.from, -1, MapMode.TrackDel);\n let to = changes.mapPos(this.to, 1, MapMode.TrackDel);\n return from == null || to == null ? null : new FieldRange(this.field, from, to);\n }\n}\nclass Snippet {\n constructor(lines, fieldPositions) {\n this.lines = lines;\n this.fieldPositions = fieldPositions;\n }\n instantiate(state, pos) {\n let text = [], lineStart = [pos];\n let lineObj = state.doc.lineAt(pos), baseIndent = /^\\s*/.exec(lineObj.text)[0];\n for (let line of this.lines) {\n if (text.length) {\n let indent = baseIndent, tabs = /^\\t*/.exec(line)[0].length;\n for (let i = 0; i < tabs; i++)\n indent += state.facet(indentUnit);\n lineStart.push(pos + indent.length - tabs);\n line = indent + line.slice(tabs);\n }\n text.push(line);\n pos += line.length + 1;\n }\n let ranges = this.fieldPositions.map(pos => new FieldRange(pos.field, lineStart[pos.line] + pos.from, lineStart[pos.line] + pos.to));\n return { text, ranges };\n }\n static parse(template) {\n let fields = [];\n let lines = [], positions = [], m;\n for (let line of template.split(/\\r\\n?|\\n/)) {\n while (m = /[#$]\\{(?:(\\d+)(?::([^{}]*))?|((?:\\\\[{}]|[^{}])*))\\}/.exec(line)) {\n let seq = m[1] ? +m[1] : null, rawName = m[2] || m[3] || \"\", found = -1;\n let name = rawName.replace(/\\\\[{}]/g, m => m[1]);\n for (let i = 0; i < fields.length; i++) {\n if (seq != null ? fields[i].seq == seq : name ? fields[i].name == name : false)\n found = i;\n }\n if (found < 0) {\n let i = 0;\n while (i < fields.length && (seq == null || (fields[i].seq != null && fields[i].seq < seq)))\n i++;\n fields.splice(i, 0, { seq, name });\n found = i;\n for (let pos of positions)\n if (pos.field >= found)\n pos.field++;\n }\n for (let pos of positions)\n if (pos.line == lines.length && pos.from > m.index) {\n let snip = m[2] ? 3 + (m[1] || \"\").length : 2;\n pos.from -= snip;\n pos.to -= snip;\n }\n positions.push(new FieldPos(found, lines.length, m.index, m.index + name.length));\n line = line.slice(0, m.index) + rawName + line.slice(m.index + m[0].length);\n }\n line = line.replace(/\\\\([{}])/g, (_, brace, index) => {\n for (let pos of positions)\n if (pos.line == lines.length && pos.from > index) {\n pos.from--;\n pos.to--;\n }\n return brace;\n });\n lines.push(line);\n }\n return new Snippet(lines, positions);\n }\n}\nlet fieldMarker = /*@__PURE__*/Decoration.widget({ widget: /*@__PURE__*/new class extends WidgetType {\n toDOM() {\n let span = document.createElement(\"span\");\n span.className = \"cm-snippetFieldPosition\";\n return span;\n }\n ignoreEvent() { return false; }\n } });\nlet fieldRange = /*@__PURE__*/Decoration.mark({ class: \"cm-snippetField\" });\nclass ActiveSnippet {\n constructor(ranges, active) {\n this.ranges = ranges;\n this.active = active;\n this.deco = Decoration.set(ranges.map(r => (r.from == r.to ? fieldMarker : fieldRange).range(r.from, r.to)), true);\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 { main } = editor.state.selection;\n let spec = {\n changes: { from, to: to == main.from ? main.to : to, insert: Text.of(text) },\n scrollIntoView: true,\n annotations: completion ? [pickedCompletion.of(completion), Transaction.userEvent.of(\"input.complete\")] : undefined\n };\n if (ranges.length)\n spec.selection = fieldSelection(ranges, 0);\n if (ranges.some(r => r.field > 0)) {\n let active = new ActiveSnippet(ranges, 0);\n let effects = spec.effects = [setActive.of(active)];\n if (editor.state.field(snippetState, false) === undefined)\n effects.push(StateEffect.appendConfig.of([snippetState, addSnippetKeymap, snippetPointerHandler, baseTheme]));\n }\n editor.dispatch(editor.state.update(spec));\n };\n}\nfunction moveField(dir) {\n return ({ state, dispatch }) => {\n let active = state.field(snippetState, false);\n if (!active || dir < 0 && active.active == 0)\n return false;\n let next = active.active + dir, last = dir > 0 && !active.ranges.some(r => r.field == next + dir);\n dispatch(state.update({\n selection: fieldSelection(active.ranges, next),\n effects: setActive.of(last ? null : new ActiveSnippet(active.ranges, next)),\n scrollIntoView: true\n }));\n return true;\n };\n}\n/**\nA command that clears the active snippet, if any.\n*/\nconst clearSnippet = ({ state, dispatch }) => {\n let active = state.field(snippetState, false);\n if (!active)\n return false;\n dispatch(state.update({ effects: setActive.of(null) }));\n return true;\n};\n/**\nMove to the next snippet field, if available.\n*/\nconst nextSnippetField = /*@__PURE__*/moveField(1);\n/**\nMove to the previous snippet field, if available.\n*/\nconst prevSnippetField = /*@__PURE__*/moveField(-1);\n/**\nCheck if there is an active snippet with a next field for\n`nextSnippetField` to move to.\n*/\nfunction hasNextSnippetField(state) {\n let active = state.field(snippetState, false);\n return !!(active && active.ranges.some(r => r.field == active.active + 1));\n}\n/**\nReturns true if there is an active snippet and a previous field\nfor `prevSnippetField` to move to.\n*/\nfunction hasPrevSnippetField(state) {\n let active = state.field(snippetState, false);\n return !!(active && active.active > 0);\n}\nconst defaultSnippetKeymap = [\n { key: \"Tab\", run: nextSnippetField, shift: prevSnippetField },\n { key: \"Escape\", run: clearSnippet }\n];\n/**\nA facet that can be used to configure the key bindings used by\nsnippets. The default binds Tab to\n[`nextSnippetField`](https://codemirror.net/6/docs/ref/#autocomplete.nextSnippetField), Shift-Tab to\n[`prevSnippetField`](https://codemirror.net/6/docs/ref/#autocomplete.prevSnippetField), and Escape\nto [`clearSnippet`](https://codemirror.net/6/docs/ref/#autocomplete.clearSnippet).\n*/\nconst snippetKeymap = /*@__PURE__*/Facet.define({\n combine(maps) { return maps.length ? maps[0] : defaultSnippetKeymap; }\n});\nconst addSnippetKeymap = /*@__PURE__*/Prec.highest(/*@__PURE__*/keymap.compute([snippetKeymap], state => state.facet(snippetKeymap)));\n/**\nCreate a completion from a snippet. Returns an object with the\nproperties from `completion`, plus an `apply` function that\napplies the snippet.\n*/\nfunction snippetCompletion(template, completion) {\n return { ...completion, apply: snippet(template) };\n}\nconst snippetPointerHandler = /*@__PURE__*/EditorView.domEventHandlers({\n mousedown(event, view) {\n let active = view.state.field(snippetState, false), pos;\n if (!active || (pos = view.posAtCoords({ x: event.clientX, y: event.clientY })) == null)\n return false;\n let match = active.ranges.find(r => r.from <= pos && r.to >= pos);\n if (!match || match.field == active.active)\n return false;\n view.dispatch({\n selection: fieldSelection(active.ranges, match.field),\n effects: setActive.of(active.ranges.some(r => r.field > match.field)\n ? new ActiveSnippet(active.ranges, match.field) : null),\n scrollIntoView: true\n });\n return true;\n }\n});\n\nfunction wordRE(wordChars) {\n let escaped = wordChars.replace(/[\\]\\-\\\\]/g, \"\\\\$&\");\n try {\n return new RegExp(`[\\\\p{Alphabetic}\\\\p{Number}_${escaped}]+`, \"ug\");\n }\n catch (_a) {\n return new RegExp(`[\\w${escaped}]`, \"g\");\n }\n}\nfunction mapRE(re, f) {\n return new RegExp(f(re.source), re.unicode ? \"u\" : \"\");\n}\nconst wordCaches = /*@__PURE__*/Object.create(null);\nfunction wordCache(wordChars) {\n return wordCaches[wordChars] || (wordCaches[wordChars] = new WeakMap);\n}\nfunction storeWords(doc, wordRE, result, seen, ignoreAt) {\n for (let lines = doc.iterLines(), pos = 0; !lines.next().done;) {\n let { value } = lines, m;\n wordRE.lastIndex = 0;\n while (m = wordRE.exec(value)) {\n if (!seen[m[0]] && pos + m.index != ignoreAt) {\n result.push({ type: \"text\", label: m[0] });\n seen[m[0]] = true;\n if (result.length >= 2000 /* C.MaxList */)\n return;\n }\n }\n pos += value.length + 1;\n }\n}\nfunction collectWords(doc, cache, wordRE, to, ignoreAt) {\n let big = doc.length >= 1000 /* C.MinCacheLen */;\n let cached = big && cache.get(doc);\n if (cached)\n return cached;\n let result = [], seen = Object.create(null);\n if (doc.children) {\n let pos = 0;\n for (let ch of doc.children) {\n if (ch.length >= 1000 /* C.MinCacheLen */) {\n for (let c of collectWords(ch, cache, wordRE, to - pos, ignoreAt - pos)) {\n if (!seen[c.label]) {\n seen[c.label] = true;\n result.push(c);\n }\n }\n }\n else {\n storeWords(ch, wordRE, result, seen, ignoreAt - pos);\n }\n pos += ch.length + 1;\n }\n }\n else {\n storeWords(doc, wordRE, result, seen, ignoreAt);\n }\n if (big && result.length < 2000 /* C.MaxList */)\n cache.set(doc, result);\n return result;\n}\n/**\nA completion source that will scan the document for words (using a\n[character categorizer](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer)), and\nreturn those as completions.\n*/\nconst completeAnyWord = context => {\n let wordChars = context.state.languageDataAt(\"wordChars\", context.pos).join(\"\");\n let re = wordRE(wordChars);\n let token = context.matchBefore(mapRE(re, s => s + \"$\"));\n if (!token && !context.explicit)\n return null;\n let from = token ? token.from : context.pos;\n let options = collectWords(context.state.doc, wordCache(wordChars), re, 50000 /* C.Range */, from);\n return { from, options, validFor: mapRE(re, s => \"^\" + s) };\n};\n\nconst defaults = {\n brackets: [\"(\", \"[\", \"{\", \"'\", '\"'],\n before: \")]}:;>\",\n stringPrefixes: []\n};\nconst closeBracketEffect = /*@__PURE__*/StateEffect.define({\n map(value, mapping) {\n let mapped = mapping.mapPos(value, -1, MapMode.TrackAfter);\n return mapped == null ? undefined : mapped;\n }\n});\nconst closedBracket = /*@__PURE__*/new class extends RangeValue {\n};\nclosedBracket.startSide = 1;\nclosedBracket.endSide = -1;\nconst bracketState = /*@__PURE__*/StateField.define({\n create() { return RangeSet.empty; },\n update(value, tr) {\n value = value.map(tr.changes);\n if (tr.selection) {\n let line = tr.state.doc.lineAt(tr.selection.main.head);\n value = value.update({ filter: from => from >= line.from && from <= line.to });\n }\n for (let effect of tr.effects)\n if (effect.is(closeBracketEffect))\n value = value.update({ add: [closedBracket.range(effect.value, effect.value + 1)] });\n return value;\n }\n});\n/**\nExtension to enable bracket-closing behavior. When a closeable\nbracket is typed, its closing bracket is immediately inserted\nafter the cursor. When closing a bracket directly in front of a\nclosing bracket inserted by the extension, the cursor moves over\nthat bracket.\n*/\nfunction closeBrackets() {\n return [inputHandler, bracketState];\n}\nconst definedClosing = \"()[]{}<>«»»«[]{}\";\nfunction closing(ch) {\n for (let i = 0; i < definedClosing.length; i += 2)\n if (definedClosing.charCodeAt(i) == ch)\n return definedClosing.charAt(i + 1);\n return fromCodePoint(ch < 128 ? ch : ch + 1);\n}\nfunction config(state, pos) {\n return state.languageDataAt(\"closeBrackets\", pos)[0] || defaults;\n}\nconst android = typeof navigator == \"object\" && /*@__PURE__*//Android\\b/.test(navigator.userAgent);\nconst inputHandler = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, insert) => {\n if ((android ? view.composing : view.compositionStarted) || view.state.readOnly)\n return false;\n let sel = view.state.selection.main;\n if (insert.length > 2 || insert.length == 2 && codePointSize(codePointAt(insert, 0)) == 1 ||\n from != sel.from || to != sel.to)\n return false;\n let tr = insertBracket(view.state, insert);\n if (!tr)\n return false;\n view.dispatch(tr);\n return true;\n});\n/**\nCommand that implements deleting a pair of matching brackets when\nthe cursor is between them.\n*/\nconst deleteBracketPair = ({ state, dispatch }) => {\n if (state.readOnly)\n return false;\n let conf = config(state, state.selection.main.head);\n let tokens = conf.brackets || defaults.brackets;\n let dont = null, changes = state.changeByRange(range => {\n if (range.empty) {\n let before = prevChar(state.doc, range.head);\n for (let token of tokens) {\n if (token == before && nextChar(state.doc, range.head) == closing(codePointAt(token, 0)))\n return { changes: { from: range.head - token.length, to: range.head + token.length },\n range: EditorSelection.cursor(range.head - token.length) };\n }\n }\n return { range: dont = range };\n });\n if (!dont)\n dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"delete.backward\" }));\n return !dont;\n};\n/**\nClose-brackets related key bindings. Binds Backspace to\n[`deleteBracketPair`](https://codemirror.net/6/docs/ref/#autocomplete.deleteBracketPair).\n*/\nconst closeBracketsKeymap = [\n { key: \"Backspace\", run: deleteBracketPair }\n];\n/**\nImplements the extension's behavior on text insertion. If the\ngiven string counts as a bracket in the language around the\nselection, and replacing the selection with it requires custom\nbehavior (inserting a closing version or skipping past a\npreviously-closed bracket), this function returns a transaction\nrepresenting that custom behavior. (You only need this if you want\nto programmatically insert brackets—the\n[`closeBrackets`](https://codemirror.net/6/docs/ref/#autocomplete.closeBrackets) extension will\ntake care of running this for user input.)\n*/\nfunction insertBracket(state, bracket) {\n let conf = config(state, state.selection.main.head);\n let tokens = conf.brackets || defaults.brackets;\n for (let tok of tokens) {\n let closed = closing(codePointAt(tok, 0));\n if (bracket == tok)\n return closed == tok ? handleSame(state, tok, tokens.indexOf(tok + tok + tok) > -1, conf)\n : handleOpen(state, tok, closed, conf.before || defaults.before);\n if (bracket == closed && closedBracketAt(state, state.selection.main.from))\n return handleClose(state, tok, closed);\n }\n return null;\n}\nfunction closedBracketAt(state, pos) {\n let found = false;\n state.field(bracketState).between(0, state.doc.length, from => {\n if (from == pos)\n found = true;\n });\n return found;\n}\nfunction nextChar(doc, pos) {\n let next = doc.sliceString(pos, pos + 2);\n return next.slice(0, codePointSize(codePointAt(next, 0)));\n}\nfunction prevChar(doc, pos) {\n let prev = doc.sliceString(pos - 2, pos);\n return codePointSize(codePointAt(prev, 0)) == prev.length ? prev : prev.slice(1);\n}\nfunction handleOpen(state, open, close, closeBefore) {\n let dont = null, changes = state.changeByRange(range => {\n if (!range.empty)\n return { changes: [{ insert: open, from: range.from }, { insert: close, from: range.to }],\n effects: closeBracketEffect.of(range.to + open.length),\n range: EditorSelection.range(range.anchor + open.length, range.head + open.length) };\n let next = nextChar(state.doc, range.head);\n if (!next || /\\s/.test(next) || closeBefore.indexOf(next) > -1)\n return { changes: { insert: open + close, from: range.head },\n effects: closeBracketEffect.of(range.head + open.length),\n range: EditorSelection.cursor(range.head + open.length) };\n return { range: dont = range };\n });\n return dont ? null : state.update(changes, {\n scrollIntoView: true,\n userEvent: \"input.type\"\n });\n}\nfunction handleClose(state, _open, close) {\n let dont = null, changes = state.changeByRange(range => {\n if (range.empty && nextChar(state.doc, range.head) == close)\n return { changes: { from: range.head, to: range.head + close.length, insert: close },\n range: EditorSelection.cursor(range.head + close.length) };\n return dont = { range };\n });\n return dont ? null : state.update(changes, {\n scrollIntoView: true,\n userEvent: \"input.type\"\n });\n}\n// Handles cases where the open and close token are the same, and\n// possibly triple quotes (as in `\"\"\"abc\"\"\"`-style quoting).\nfunction handleSame(state, token, allowTriple, config) {\n let stringPrefixes = config.stringPrefixes || defaults.stringPrefixes;\n let dont = null, changes = state.changeByRange(range => {\n if (!range.empty)\n return { changes: [{ insert: token, from: range.from }, { insert: token, from: range.to }],\n effects: closeBracketEffect.of(range.to + token.length),\n range: EditorSelection.range(range.anchor + token.length, range.head + token.length) };\n let pos = range.head, next = nextChar(state.doc, pos), start;\n if (next == token) {\n if (nodeStart(state, pos)) {\n return { changes: { insert: token + token, from: pos },\n effects: closeBracketEffect.of(pos + token.length),\n range: EditorSelection.cursor(pos + token.length) };\n }\n else if (closedBracketAt(state, pos)) {\n let isTriple = allowTriple && state.sliceDoc(pos, pos + token.length * 3) == token + token + token;\n let content = isTriple ? token + token + token : token;\n return { changes: { from: pos, to: pos + content.length, insert: content },\n range: EditorSelection.cursor(pos + content.length) };\n }\n }\n else if (allowTriple && state.sliceDoc(pos - 2 * token.length, pos) == token + token &&\n (start = canStartStringAt(state, pos - 2 * token.length, stringPrefixes)) > -1 &&\n nodeStart(state, start)) {\n return { changes: { insert: token + token + token + token, from: pos },\n effects: closeBracketEffect.of(pos + token.length),\n range: EditorSelection.cursor(pos + token.length) };\n }\n else if (state.charCategorizer(pos)(next) != CharCategory.Word) {\n if (canStartStringAt(state, pos, stringPrefixes) > -1 && !probablyInString(state, pos, token, stringPrefixes))\n return { changes: { insert: token + token, from: pos },\n effects: closeBracketEffect.of(pos + token.length),\n range: EditorSelection.cursor(pos + token.length) };\n }\n return { range: dont = range };\n });\n return dont ? null : state.update(changes, {\n scrollIntoView: true,\n userEvent: \"input.type\"\n });\n}\nfunction nodeStart(state, pos) {\n let tree = syntaxTree(state).resolveInner(pos + 1);\n return tree.parent && tree.from == pos;\n}\nfunction probablyInString(state, pos, quoteToken, prefixes) {\n let node = syntaxTree(state).resolveInner(pos, -1);\n let maxPrefix = prefixes.reduce((m, p) => Math.max(m, p.length), 0);\n for (let i = 0; i < 5; i++) {\n let start = state.sliceDoc(node.from, Math.min(node.to, node.from + quoteToken.length + maxPrefix));\n let quotePos = start.indexOf(quoteToken);\n if (!quotePos || quotePos > -1 && prefixes.indexOf(start.slice(0, quotePos)) > -1) {\n let first = node.firstChild;\n while (first && first.from == node.from && first.to - first.from > quoteToken.length + quotePos) {\n if (state.sliceDoc(first.to - quoteToken.length, first.to) == quoteToken)\n return false;\n first = first.firstChild;\n }\n return true;\n }\n let parent = node.to == pos && node.parent;\n if (!parent)\n break;\n node = parent;\n }\n return false;\n}\nfunction canStartStringAt(state, pos, prefixes) {\n let charCat = state.charCategorizer(pos);\n if (charCat(state.sliceDoc(pos - 1, pos)) != CharCategory.Word)\n return pos;\n for (let prefix of prefixes) {\n let start = pos - prefix.length;\n if (state.sliceDoc(start, pos) == prefix && charCat(state.sliceDoc(start - 1, start)) != CharCategory.Word)\n return start;\n }\n return -1;\n}\n\n/**\nReturns an extension that enables autocompletion.\n*/\nfunction autocompletion(config = {}) {\n return [\n commitCharacters,\n completionState,\n completionConfig.of(config),\n completionPlugin,\n completionKeymapExt,\n baseTheme\n ];\n}\n/**\nBasic keybindings for autocompletion.\n\n - Ctrl-Space (and Alt-\\` or Alt-i on macOS): [`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 - PageUp: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(false, \"page\")`\n - Enter: [`acceptCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.acceptCompletion)\n*/\nconst completionKeymap = [\n { key: \"Ctrl-Space\", run: startCompletion },\n { mac: \"Alt-`\", run: startCompletion },\n { mac: \"Alt-i\", 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.isPending) ? \"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","view","this","abortListeners","abortOnDocChange","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","options","push","onDocChange","toSet","chars","flat","Object","keys","join","words","test","replace","completeFromList","list","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","insertCompletionText","fromOff","toOff","changeByRange","range","lines","toText","changes","insert","EditorSelection","cursor","scrollIntoView","userEvent","SourceCache","WeakMap","asSource","Array","isArray","known","get","set","startCompletionEffect","StateEffect","closeCompletionEffect","FuzzyMatcher","pattern","folded","any","precise","byWord","matched","p","char","codePointAt","size","codePointSize","part","upper","toUpperCase","toLowerCase","astral","ret","word","firstSize","direct","len","anyTo","e","min","next","preciseTo","byWordTo","byWordFolded","adjacentTo","adjacentStart","adjacentEnd","hasLower","wordAdjacent","prevType","ch","fromCodePoint","result","positions","StrictMatcher","completionConfig","Facet","combine","configs","combineConfig","activateOnTyping","activateOnCompletion","activateOnTypingDelay","selectOnOpen","override","closeOnBlur","maxRenderedOptions","defaultKeymap","tooltipClass","optionClass","aboveCursor","icons","addToOptions","positionInfo","defaultPositionInfo","filterStrict","compareCompletions","a","b","localeCompare","interactionDelay","updateSyncTime","c","joinClass","concat","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","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","sel","querySelector","listRect","infoRect","selRect","docElt","ownerDocument","documentElement","clientWidth","clientHeight","cssText","ul","phrase","curSection","section","header","li","node","completionTooltip","boost","apply","CompletionDialog","attrs","timestamp","setSelected","makeAttrs","build","active","prev","conf","didSetActive","some","s","isPending","setDisabled","sections","dynamicSectionScore","addOption","hasResult","getMatch","filter","matcher","rank","sectionOrder","cmp","compare","sortOptions","selectedValue","reduce","createTooltip","above","Date","now","mapPos","CompletionState","none","random","toString","tr","languageDataAt","find","ActiveSource","didSet","is","setActiveEffect","docChanged","touchesRange","iA","iB","endA","endB","sameResults","effect","setSelectedEffect","value","baseAttrs","noAttrs","getUpdateType","isUserEvent","annotation","typing","touches","updateFor","ActiveResult","limit","super","empty","checkValid","mapping","sources","completionState","StateField","provide","f","showTooltip","val","EditorView","contentAttributes","annotations","moveCompletionSelection","forward","by","step","getTooltip","startCompletion","RunningQuery","time","updates","done","undefined","completionPlugin","ViewPlugin","fromClass","debounceUpdate","running","debounceAccept","pendingStart","composing","startQuery","selectionSet","doesReset","transactions","query","handler","splice","clearTimeout","delay","q","setTimeout","startUpdate","r","accept","pending","Promise","resolve","scheduleAccept","err","updated","current","eventHandlers","blur","event","dialog","contains","compositionstart","compositionend","windows","navigator","platform","commitCharacters","Prec","highest","domEventHandlers","keydown","ctrlKey","altKey","metaKey","commitChars","baseTheme","fontFamily","whiteSpace","overflow","maxWidth_fallback","minWidth","maxHeight","listStyle","margin","padding","lineHeight","overflowX","textOverflow","display","borderBottom","paddingLeft","opacity","background","color","textAlign","width","boxSizing","backgroundColor","verticalAlign","borderLeft","textDecoration","marginLeft","fontStyle","fontSize","paddingRight","FieldPos","FieldRange","MapMode","TrackDel","Snippet","fieldPositions","instantiate","lineStart","lineObj","baseIndent","indent","tabs","indentUnit","ranges","parse","template","m","fields","seq","rawName","index","snip","_","brace","fieldMarker","Decoration","widget","WidgetType","toDOM","ignoreEvent","fieldRange","mark","ActiveSnippet","deco","mapped","selectionInsideField","setActive","moveToField","snippetState","decorations","fieldSelection","snippet","editor","spec","Text","Transaction","appendConfig","addSnippetKeymap","snippetPointerHandler","moveField","dir","last","defaultSnippetKeymap","run","shift","snippetKeymap","maps","keymap","compute","snippetCompletion","mousedown","posAtCoords","x","clientX","y","clientY","defaults","brackets","before","stringPrefixes","closeBracketEffect","TrackAfter","closedBracket","RangeValue","startSide","endSide","bracketState","RangeSet","head","closeBrackets","inputHandler","definedClosing","closing","charCodeAt","charAt","android","userAgent","compositionStarted","readOnly","bracket","tokens","tok","closed","handleSame","handleOpen","closedBracketAt","handleClose","insertBracket","closeBracketsKeymap","dont","sliceString","prevChar","nextChar","between","close","closeBefore","anchor","_open","allowTriple","nodeStart","canStartStringAt","charCategorizer","CharCategory","Word","quoteToken","prefixes","maxPrefix","quotePos","probablyInString","tree","charCat","prefix","autocompletion","completionKeymapExt","completionKeymap","mac","computeN"],"mappings":"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","x_google_ignoreList":[0]}
@@ -1,2 +0,0 @@
1
- var e,t,r={exports:{}},s=r.exports=(e=t={},Object.defineProperty(e,"__esModule",{value:!0}),e.FitAddon=void 0,e.FitAddon=class{activate(e){this._terminal=e}dispose(){}fit(){const e=this.proposeDimensions();if(!e||!this._terminal||isNaN(e.cols)||isNaN(e.rows))return;const t=this._terminal._core;this._terminal.rows===e.rows&&this._terminal.cols===e.cols||(t._renderService.clear(),this._terminal.resize(e.cols,e.rows))}proposeDimensions(){if(!this._terminal)return;if(!this._terminal.element||!this._terminal.element.parentElement)return;const e=this._terminal._core,t=e._renderService.dimensions;if(0===t.css.cell.width||0===t.css.cell.height)return;const r=0===this._terminal.options.scrollback?0:e.viewport.scrollBarWidth,s=window.getComputedStyle(this._terminal.element.parentElement),i=parseInt(s.getPropertyValue("height")),o=Math.max(0,parseInt(s.getPropertyValue("width"))),n=window.getComputedStyle(this._terminal.element),l=i-(parseInt(n.getPropertyValue("padding-top"))+parseInt(n.getPropertyValue("padding-bottom"))),a=o-(parseInt(n.getPropertyValue("padding-right"))+parseInt(n.getPropertyValue("padding-left")))-r;return{cols:Math.max(2,Math.floor(a/t.css.cell.width)),rows:Math.max(1,Math.floor(l/t.css.cell.height))}}},t),i=r.exports.FitAddon,o=r.exports.__esModule;export{i as FitAddon,o as __esModule,s as default};
2
- //# sourceMappingURL=xterm_addon-fit--gyF3PcZ.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"xterm_addon-fit--gyF3PcZ.js","sources":["../src/3rd-party/xterm_addon-fit.js"],"sourcesContent":["/**\n * Bundled by jsDelivr using Rollup v2.79.2 and Terser v5.39.0.\n * Original file: /npm/@xterm/addon-fit@0.10.0/lib/addon-fit.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\nvar e,t,r={exports:{}};self;var s=r.exports=(e=t={},Object.defineProperty(e,\"__esModule\",{value:!0}),e.FitAddon=void 0,e.FitAddon=class{activate(e){this._terminal=e}dispose(){}fit(){const e=this.proposeDimensions();if(!e||!this._terminal||isNaN(e.cols)||isNaN(e.rows))return;const t=this._terminal._core;this._terminal.rows===e.rows&&this._terminal.cols===e.cols||(t._renderService.clear(),this._terminal.resize(e.cols,e.rows))}proposeDimensions(){if(!this._terminal)return;if(!this._terminal.element||!this._terminal.element.parentElement)return;const e=this._terminal._core,t=e._renderService.dimensions;if(0===t.css.cell.width||0===t.css.cell.height)return;const r=0===this._terminal.options.scrollback?0:e.viewport.scrollBarWidth,s=window.getComputedStyle(this._terminal.element.parentElement),i=parseInt(s.getPropertyValue(\"height\")),o=Math.max(0,parseInt(s.getPropertyValue(\"width\"))),n=window.getComputedStyle(this._terminal.element),l=i-(parseInt(n.getPropertyValue(\"padding-top\"))+parseInt(n.getPropertyValue(\"padding-bottom\"))),a=o-(parseInt(n.getPropertyValue(\"padding-right\"))+parseInt(n.getPropertyValue(\"padding-left\")))-r;return{cols:Math.max(2,Math.floor(a/t.css.cell.width)),rows:Math.max(1,Math.floor(l/t.css.cell.height))}}},t),i=r.exports.FitAddon,o=r.exports.__esModule;export{i as FitAddon,o as __esModule,s as default};\n"],"names":["e","t","r","exports","s","Object","defineProperty","value","FitAddon","activate","this","_terminal","dispose","fit","proposeDimensions","isNaN","cols","rows","_core","_renderService","clear","resize","element","parentElement","dimensions","css","cell","width","height","options","scrollback","viewport","scrollBarWidth","window","getComputedStyle","i","parseInt","getPropertyValue","o","Math","max","n","l","a","floor","__esModule"],"mappings":"AAMA,IAAIA,EAAEC,EAAEC,EAAE,CAACC,QAAQ,CAAA,GAAaC,EAAEF,EAAEC,SAASH,EAAEC,EAAE,CAAA,EAAGI,OAAOC,eAAeN,EAAE,aAAa,CAACO,OAAM,IAAKP,EAAEQ,cAAS,EAAOR,EAAEQ,SAAS,MAAM,QAAAC,CAAST,GAAGU,KAAKC,UAAUX,CAAC,CAAC,OAAAY,GAAU,CAAC,GAAAC,GAAM,MAAMb,EAAEU,KAAKI,oBAAoB,IAAId,IAAIU,KAAKC,WAAWI,MAAMf,EAAEgB,OAAOD,MAAMf,EAAEiB,MAAM,OAAO,MAAMhB,EAAES,KAAKC,UAAUO,MAAMR,KAAKC,UAAUM,OAAOjB,EAAEiB,MAAMP,KAAKC,UAAUK,OAAOhB,EAAEgB,OAAOf,EAAEkB,eAAeC,QAAQV,KAAKC,UAAUU,OAAOrB,EAAEgB,KAAKhB,EAAEiB,MAAM,CAAC,iBAAAH,GAAoB,IAAIJ,KAAKC,UAAU,OAAO,IAAID,KAAKC,UAAUW,UAAUZ,KAAKC,UAAUW,QAAQC,cAAc,OAAO,MAAMvB,EAAEU,KAAKC,UAAUO,MAAMjB,EAAED,EAAEmB,eAAeK,WAAW,GAAG,IAAIvB,EAAEwB,IAAIC,KAAKC,OAAO,IAAI1B,EAAEwB,IAAIC,KAAKE,OAAO,OAAO,MAAM1B,EAAE,IAAIQ,KAAKC,UAAUkB,QAAQC,WAAW,EAAE9B,EAAE+B,SAASC,eAAe5B,EAAE6B,OAAOC,iBAAiBxB,KAAKC,UAAUW,QAAQC,eAAeY,EAAEC,SAAShC,EAAEiC,iBAAiB,WAAWC,EAAEC,KAAKC,IAAI,EAAEJ,SAAShC,EAAEiC,iBAAiB,WAAWI,EAAER,OAAOC,iBAAiBxB,KAAKC,UAAUW,SAASoB,EAAEP,GAAGC,SAASK,EAAEJ,iBAAiB,gBAAgBD,SAASK,EAAEJ,iBAAiB,oBAAoBM,EAAEL,GAAGF,SAASK,EAAEJ,iBAAiB,kBAAkBD,SAASK,EAAEJ,iBAAiB,kBAAkBnC,EAAE,MAAM,CAACc,KAAKuB,KAAKC,IAAI,EAAED,KAAKK,MAAMD,EAAE1C,EAAEwB,IAAIC,KAAKC,QAAQV,KAAKsB,KAAKC,IAAI,EAAED,KAAKK,MAAMF,EAAEzC,EAAEwB,IAAIC,KAAKE,SAAS,GAAG3B,GAAGkC,EAAEjC,EAAEC,QAAQK,SAAS8B,EAAEpC,EAAEC,QAAQ0C"}
@@ -1,2 +0,0 @@
1
- var e={exports:{}},t=e.exports=(()=>{var e={6:(e,t)=>{function r(e){try{const t=new URL(e),r=t.password&&t.username?`${t.protocol}//${t.username}:${t.password}@${t.host}`:t.username?`${t.protocol}//${t.username}@${t.host}`:`${t.protocol}//${t.host}`;return e.toLocaleLowerCase().startsWith(r.toLocaleLowerCase())}catch(e){return!1}}Object.defineProperty(t,"__esModule",{value:!0}),t.LinkComputer=t.WebLinkProvider=void 0,t.WebLinkProvider=class{constructor(e,t,r,n={}){this._terminal=e,this._regex=t,this._handler=r,this._options=n}provideLinks(e,t){const r=n.computeLink(e,this._regex,this._terminal,this._handler);t(this._addCallbacks(r))}_addCallbacks(e){return e.map(e=>(e.leave=this._options.leave,e.hover=(t,r)=>{if(this._options.hover){const{range:n}=e;this._options.hover(t,r,n)}},e))}};class n{static computeLink(e,t,s,o){const i=new RegExp(t.source,(t.flags||"")+"g"),[a,l]=n._getWindowedLineStrings(e-1,s),c=a.join("");let d;const p=[];for(;d=i.exec(c);){const e=d[0];if(!r(e))continue;const[t,i]=n._mapStrIdx(s,l,0,d.index),[a,c]=n._mapStrIdx(s,t,i,e.length);if(-1===t||-1===i||-1===a||-1===c)continue;const h={start:{x:i+1,y:t+1},end:{x:c,y:a+1}};p.push({range:h,text:e,activate:o})}return p}static _getWindowedLineStrings(e,t){let r,n=e,s=e,o=0,i="";const a=[];if(r=t.buffer.active.getLine(e)){const e=r.translateToString(!0);if(r.isWrapped&&" "!==e[0]){for(o=0;(r=t.buffer.active.getLine(--n))&&o<2048&&(i=r.translateToString(!0),o+=i.length,a.push(i),r.isWrapped&&-1===i.indexOf(" ")););a.reverse()}for(a.push(e),o=0;(r=t.buffer.active.getLine(++s))&&r.isWrapped&&o<2048&&(i=r.translateToString(!0),o+=i.length,a.push(i),-1===i.indexOf(" ")););}return[a,n]}static _mapStrIdx(e,t,r,n){const s=e.buffer.active,o=s.getNullCell();let i=r;for(;n;){const e=s.getLine(t);if(!e)return[-1,-1];for(let r=i;r<e.length;++r){e.getCell(r,o);const i=o.getChars();if(o.getWidth()&&(n-=i.length||1,r===e.length-1&&""===i)){const e=s.getLine(t+1);e&&e.isWrapped&&(e.getCell(0,o),2===o.getWidth()&&(n+=1))}if(n<0)return[t,r]}t++,i=0}return[t,i]}}t.LinkComputer=n}},t={};function r(n){var s=t[n];if(void 0!==s)return s.exports;var o=t[n]={exports:{}};return e[n](o,o.exports,r),o.exports}var n={};return(()=>{var e=n;Object.defineProperty(e,"__esModule",{value:!0}),e.WebLinksAddon=void 0;const t=r(6),s=/(https?|HTTPS?):[/]{2}[^\s"'!*(){}|\\\^<>`]*[^\s"':,.!?{}|\\\^~\[\]`()<>]/;function o(e,t){const r=window.open();if(r){try{r.opener=null}catch{}r.location.href=t}else console.warn("Opening link blocked as opener could not be cleared")}e.WebLinksAddon=class{constructor(e=o,t={}){this._handler=e,this._options=t}activate(e){this._terminal=e;const r=this._options,n=r.urlRegex||s;this._linkProvider=this._terminal.registerLinkProvider(new t.WebLinkProvider(this._terminal,n,this._handler,r))}dispose(){this._linkProvider?.dispose()}}})(),n})(),r=e.exports.WebLinksAddon,n=e.exports.__esModule;export{r as WebLinksAddon,n as __esModule,t as default};
2
- //# sourceMappingURL=xterm_addon-web-links-D95xh2la.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"xterm_addon-web-links-D95xh2la.js","sources":["../src/3rd-party/xterm_addon-web-links.js"],"sourcesContent":["/**\n * Bundled by jsDelivr using Rollup v2.79.2 and Terser v5.39.0.\n * Original file: /npm/@xterm/addon-web-links@0.11.0/lib/addon-web-links.js\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\nvar e={exports:{}};self;var t=e.exports=(()=>{var e={6:(e,t)=>{function r(e){try{const t=new URL(e),r=t.password&&t.username?`${t.protocol}//${t.username}:${t.password}@${t.host}`:t.username?`${t.protocol}//${t.username}@${t.host}`:`${t.protocol}//${t.host}`;return e.toLocaleLowerCase().startsWith(r.toLocaleLowerCase())}catch(e){return!1}}Object.defineProperty(t,\"__esModule\",{value:!0}),t.LinkComputer=t.WebLinkProvider=void 0,t.WebLinkProvider=class{constructor(e,t,r,n={}){this._terminal=e,this._regex=t,this._handler=r,this._options=n}provideLinks(e,t){const r=n.computeLink(e,this._regex,this._terminal,this._handler);t(this._addCallbacks(r))}_addCallbacks(e){return e.map((e=>(e.leave=this._options.leave,e.hover=(t,r)=>{if(this._options.hover){const{range:n}=e;this._options.hover(t,r,n)}},e)))}};class n{static computeLink(e,t,o,s){const i=new RegExp(t.source,(t.flags||\"\")+\"g\"),[a,l]=n._getWindowedLineStrings(e-1,o),c=a.join(\"\");let d;const p=[];for(;d=i.exec(c);){const e=d[0];if(!r(e))continue;const[t,i]=n._mapStrIdx(o,l,0,d.index),[a,c]=n._mapStrIdx(o,t,i,e.length);if(-1===t||-1===i||-1===a||-1===c)continue;const h={start:{x:i+1,y:t+1},end:{x:c,y:a+1}};p.push({range:h,text:e,activate:s})}return p}static _getWindowedLineStrings(e,t){let r,n=e,o=e,s=0,i=\"\";const a=[];if(r=t.buffer.active.getLine(e)){const e=r.translateToString(!0);if(r.isWrapped&&\" \"!==e[0]){for(s=0;(r=t.buffer.active.getLine(--n))&&s<2048&&(i=r.translateToString(!0),s+=i.length,a.push(i),r.isWrapped&&-1===i.indexOf(\" \")););a.reverse()}for(a.push(e),s=0;(r=t.buffer.active.getLine(++o))&&r.isWrapped&&s<2048&&(i=r.translateToString(!0),s+=i.length,a.push(i),-1===i.indexOf(\" \")););}return[a,n]}static _mapStrIdx(e,t,r,n){const o=e.buffer.active,s=o.getNullCell();let i=r;for(;n;){const e=o.getLine(t);if(!e)return[-1,-1];for(let r=i;r<e.length;++r){e.getCell(r,s);const i=s.getChars();if(s.getWidth()&&(n-=i.length||1,r===e.length-1&&\"\"===i)){const e=o.getLine(t+1);e&&e.isWrapped&&(e.getCell(0,s),2===s.getWidth()&&(n+=1))}if(n<0)return[t,r]}t++,i=0}return[t,i]}}t.LinkComputer=n}},t={};function r(n){var o=t[n];if(void 0!==o)return o.exports;var s=t[n]={exports:{}};return e[n](s,s.exports,r),s.exports}var n={};return(()=>{var e=n;Object.defineProperty(e,\"__esModule\",{value:!0}),e.WebLinksAddon=void 0;const t=r(6),o=/(https?|HTTPS?):[/]{2}[^\\s\"'!*(){}|\\\\\\^<>`]*[^\\s\"':,.!?{}|\\\\\\^~\\[\\]`()<>]/;function s(e,t){const r=window.open();if(r){try{r.opener=null}catch{}r.location.href=t}else console.warn(\"Opening link blocked as opener could not be cleared\")}e.WebLinksAddon=class{constructor(e=s,t={}){this._handler=e,this._options=t}activate(e){this._terminal=e;const r=this._options,n=r.urlRegex||o;this._linkProvider=this._terminal.registerLinkProvider(new t.WebLinkProvider(this._terminal,n,this._handler,r))}dispose(){this._linkProvider?.dispose()}}})(),n})(),r=e.exports.WebLinksAddon,n=e.exports.__esModule;export{r as WebLinksAddon,n as __esModule,t as default};\n"],"names":["e","exports","t","r","URL","password","username","protocol","host","toLocaleLowerCase","startsWith","Object","defineProperty","value","LinkComputer","WebLinkProvider","constructor","n","this","_terminal","_regex","_handler","_options","provideLinks","computeLink","_addCallbacks","map","leave","hover","range","o","s","i","RegExp","source","flags","a","l","_getWindowedLineStrings","c","join","d","p","exec","_mapStrIdx","index","length","h","start","x","y","end","push","text","activate","buffer","active","getLine","translateToString","isWrapped","indexOf","reverse","getNullCell","getCell","getChars","getWidth","WebLinksAddon","window","open","opener","location","href","console","warn","urlRegex","_linkProvider","registerLinkProvider","dispose","__esModule"],"mappings":"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"}