@pyscript/core 0.6.31 → 0.6.33
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/codemirror-Bpb6Ey5f.js +2 -0
- package/dist/codemirror-Bpb6Ey5f.js.map +1 -0
- package/dist/{codemirror_commands-DvCG1qNv.js → codemirror_commands-SZdOE5nU.js} +2 -2
- package/dist/{codemirror_commands-DvCG1qNv.js.map → codemirror_commands-SZdOE5nU.js.map} +1 -1
- package/dist/{codemirror_lang-python-BgZ6XoEX.js → codemirror_lang-python-CT4R7aU5.js} +2 -2
- package/dist/{codemirror_lang-python-BgZ6XoEX.js.map → codemirror_lang-python-CT4R7aU5.js.map} +1 -1
- package/dist/{codemirror_language-ddx8nifT.js → codemirror_language-0XdDQPdy.js} +2 -2
- package/dist/{codemirror_language-ddx8nifT.js.map → codemirror_language-0XdDQPdy.js.map} +1 -1
- package/dist/codemirror_view-ZQwfolI2.js +2 -0
- package/dist/codemirror_view-ZQwfolI2.js.map +1 -0
- package/dist/core-CD65WG6A.js +4 -0
- package/dist/core-CD65WG6A.js.map +1 -0
- package/dist/core.css +1 -1
- package/dist/core.js +1 -1
- package/dist/{deprecations-manager-BKGF65fL.js → deprecations-manager-nieX3pXs.js} +2 -2
- package/dist/{deprecations-manager-BKGF65fL.js.map → deprecations-manager-nieX3pXs.js.map} +1 -1
- package/dist/{donkey-Oqo7W5b8.js → donkey-yfs5clqu.js} +2 -2
- package/dist/{donkey-Oqo7W5b8.js.map → donkey-yfs5clqu.js.map} +1 -1
- package/dist/{error-Dr1sICUr.js → error-eL6jHsEu.js} +2 -2
- package/dist/{error-Dr1sICUr.js.map → error-eL6jHsEu.js.map} +1 -1
- package/dist/index-BI1TrUla.js +2 -0
- package/dist/index-BI1TrUla.js.map +1 -0
- package/dist/{mpy-Bj7Nqy2i.js → mpy-BdLInxy6.js} +2 -2
- package/dist/{mpy-Bj7Nqy2i.js.map → mpy-BdLInxy6.js.map} +1 -1
- package/dist/{py-B2TFi7-Q.js → py-Dw2YLyEl.js} +2 -2
- package/dist/{py-B2TFi7-Q.js.map → py-Dw2YLyEl.js.map} +1 -1
- package/dist/py-editor-CVw_Wwjh.js +2 -0
- package/dist/py-editor-CVw_Wwjh.js.map +1 -0
- package/dist/{py-game-BJyQhVm5.js → py-game-C1iibhPv.js} +2 -2
- package/dist/{py-game-BJyQhVm5.js.map → py-game-C1iibhPv.js.map} +1 -1
- package/dist/{py-terminal-CpQPAjog.js → py-terminal-b7IgfwAh.js} +2 -2
- package/dist/{py-terminal-CpQPAjog.js.map → py-terminal-b7IgfwAh.js.map} +1 -1
- package/package.json +7 -7
- package/src/core.css +2 -31
- package/src/plugins/py-editor.js +8 -3
- package/dist/codemirror-DNtCVICy.js +0 -2
- package/dist/codemirror-DNtCVICy.js.map +0 -1
- package/dist/codemirror_view-C2ObO--u.js +0 -2
- package/dist/codemirror_view-C2ObO--u.js.map +0 -1
- package/dist/core-DnOjzQS_.js +0 -4
- package/dist/core-DnOjzQS_.js.map +0 -1
- package/dist/index-978lpDXp.js +0 -2
- package/dist/index-978lpDXp.js.map +0 -1
- package/dist/py-editor-CVOs6pzi.js +0 -2
- package/dist/py-editor-CVOs6pzi.js.map +0 -1
package/dist/index-978lpDXp.js
DELETED
@@ -1,2 +0,0 @@
|
|
1
|
-
import{StateField as t,Prec as e,Facet as i,codePointAt as n,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-1UkzIAPK.js";import{E as g,V as v,g as b,s as w,l as y,k as x,D as C,a as I,W as O}from"./codemirror_view-C2ObO--u.js";import{s as k,i as D}from"./codemirror_language-ddx8nifT.js";class T{constructor(t,e,i,n){this.state=t,this.pos=e,this.explicit=i,this.view=n,this.abortListeners=[],this.abortOnDocChange=!1}tokenBefore(t){let e=k(this.state).resolveInner(this.pos,-1);for(;e&&t.indexOf(e.name)<0;)e=e.parent;return e?{from:e.from,to:this.pos,text:this.state.sliceDoc(e.from,this.pos),type:e.type}:null}matchBefore(t){let e=this.state.doc.lineAt(this.pos),i=Math.max(e.from,this.pos-250),n=e.text.slice(i-e.from,this.pos-e.from),o=n.search(P(t,!1));return o<0?null:{from:i+o,to:this.pos,text:n.slice(o)}}get aborted(){return null==this.abortListeners}addEventListener(t,e,i){"abort"==t&&this.abortListeners&&(this.abortListeners.push(e),i&&i.onDocChange&&(this.abortOnDocChange=!0))}}function S(t){let e=Object.keys(t).join(""),i=/\w/.test(e);return i&&(e=e.replace(/\w/g,"")),`[${i?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function A(t){let e=t.map((t=>"string"==typeof t?{label:t}:t)),[i,n]=e.every((t=>/^\w+$/.test(t.label)))?[/\w*$/,/\w+$/]:function(t){let e=Object.create(null),i=Object.create(null);for(let{label:n}of t){e[n[0]]=!0;for(let t=1;t<n.length;t++)i[n[t]]=!0}let n=S(e)+S(i)+"*$";return[new RegExp("^"+n),new RegExp(n)]}(e);return t=>{let o=t.matchBefore(n);return o||t.explicit?{from:o?o.from:t.pos,options:e,validFor:i}:null}}function L(t,e){return i=>{for(let e=k(i.state).resolveInner(i.pos,-1);e;e=e.parent){if(t.indexOf(e.name)>-1)return null;if(e.type.isTop)break}return e(i)}}class R{constructor(t,e,i,n){this.completion=t,this.source=e,this.match=i,this.score=n}}function E(t){return t.selection.main.from}function P(t,e){var i;let{source:n}=t,o=e&&"^"!=n[0],s="$"!=n[n.length-1];return o||s?new RegExp(`${o?"^":""}(?:${n})${s?"$":""}`,null!==(i=t.flags)&&void 0!==i?i:t.ignoreCase?"i":""):t}const M=h.define();const B=new WeakMap;function F(t){if(!Array.isArray(t))return t;let e=B.get(t);return e||B.set(t,e=A(t)),e}const j=s.define(),$=s.define();class N{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 i=n(t,e),o=l(i);this.chars.push(i);let s=t.slice(e,e+o),r=s.toUpperCase();this.folded.push(n(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:i,any:o,precise:s,byWord:r}=this;if(1==e.length){let o=n(t,0),s=l(o),r=s==t.length?0:-100;if(o==e[0]);else{if(o!=i[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=n(t,s);r!=e[p]&&r!=i[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),w=!0;for(let o=0,p=Math.min(t.length,200),y=0;o<p&&d<h;){let p=n(t,o);a<0&&(f<h&&p==e[f]&&(s[f++]=o),m<h&&(p==e[m]||p==i[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==y&&0!=C)&&(e[d]==p||i[d]==p&&(u=!0)?r[d++]=o:r.length&&(w=!1)),y=C,o+=l(p)}return d==h&&0==r[0]&&w?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+(w?0:-1100),r,t):2==e.length?null:this.result((o[0]?-700:0)-200-1100,o,t)}result(t,e,i){let o=[],s=0;for(let t of e){let e=t+(this.astral?l(n(i,t)):1);s&&o[s-1]==t?o[s-1]=e:(o[s++]=t,o[s++]=e)}return this.ret(t-i.length,o)}}class U{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),i=e==this.pattern?0:e.toLowerCase()==this.folded?-200:null;return null==i?null:(this.matched=[0,e.length],this.score=i+(t.length==this.pattern.length?0:-100),this)}}const W=i.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:H,filterStrict:!1,compareCompletions:(t,e)=>t.label.localeCompare(e.label),interactionDelay:75,updateSyncTime:100},{defaultKeymap:(t,e)=>t&&e,closeOnBlur:(t,e)=>t&&e,icons:(t,e)=>t&&e,tooltipClass:(t,e)=>i=>q(t(i),e(i)),optionClass:(t,e)=>i=>q(t(i),e(i)),addToOptions:(t,e)=>t.concat(e),filterStrict:(t,e)=>t||e})});function q(t,e){return t?e?t+" "+e:t:e}function H(t,e,i,n,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=n.right-n.left,m=n.bottom-n.top;if(c&&f<Math.min(u,d)?c=!1:!c&&d<Math.min(u,f)&&(c=!0),u<=(c?f:d))l=Math.max(o.top,Math.min(i.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=i.bottom-e.top:(p="bottom",l=e.bottom-i.top)}return{style:`${p}: ${l/((e.bottom-e.top)/s.offsetHeight)}px; max-width: ${r/((e.right-e.left)/s.offsetWidth)}px`,class:"cm-completionInfo-"+(h?a?"left-narrow":"right-narrow":c?"left":"right")}}function V(t,e,i){if(t<=i)return{from:0,to:t};if(e<0&&(e=0),e<=t>>1){let t=Math.floor(e/i);return{from:t*i,to:(t+1)*i}}let n=Math.floor((t-e)/i);return{from:t-(n+1)*i,to:t-n*i}}class z{constructor(t,e,i){this.view=t,this.stateField=e,this.applyCompletion=i,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:t=>this.placeInfo(t),key:this},this.space=null,this.currentClass="";let n=t.state.field(e),{options:o,selected:s}=n.open,l=t.state.facet(W);this.optionContent=function(t){let e=t.addToOptions.slice();return t.icons&&e.push({render(t){let e=document.createElement("div");return e.classList.add("cm-completionIcon"),t.type&&e.classList.add(...t.type.split(/\s+/g).map((t=>"cm-completionIcon-"+t))),e.setAttribute("aria-hidden","true"),e},position:20}),e.push({render(t,e,i,n){let o=document.createElement("span");o.className="cm-completionLabel";let s=t.displayLabel||t.label,l=0;for(let t=0;t<n.length;){let e=n[t++],i=n[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,i))),r.className="cm-completionMatchedText",l=i}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=V(o.length,s,l.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.className="cm-tooltip-autocomplete",this.updateTooltipClass(t.state),this.dom.addEventListener("mousedown",(i=>{let{options:n}=t.state.field(e).open;for(let e,o=i.target;o&&o!=this.dom;o=o.parentNode)if("LI"==o.nodeName&&(e=/-(\d+)$/.exec(o.id))&&+e[1]<n.length)return this.applyCompletion(t,n[+e[1]]),void i.preventDefault()})),this.dom.addEventListener("focusout",(e=>{let i=t.state.field(this.stateField,!1);i&&i.tooltip&&t.state.facet(W).closeOnBlur&&e.relatedTarget!=t.contentDOM&&t.dispatch({effects:$.of(null)})})),this.showOptions(o,n.id)}mount(){this.updateSel()}showOptions(t,e){this.list&&this.list.remove(),this.list=this.dom.appendChild(this.createListBox(t,e,this.range)),this.list.addEventListener("scroll",(()=>{this.info&&this.view.requestMeasure(this.placeInfoReq)}))}update(t){var e;let i=t.state.field(this.stateField),n=t.startState.field(this.stateField);if(this.updateTooltipClass(t.state),i!=n){let{options:o,selected:s,disabled:l}=i.open;n.open&&n.open.options==o||(this.range=V(o.length,s,t.state.facet(W).maxRenderedOptions),this.showOptions(o,i.id)),this.updateSel(),l!=(null===(e=n.open)||void 0===e?void 0:e.disabled)&&this.dom.classList.toggle("cm-tooltip-autocomplete-disabled",!!l)}}updateTooltipClass(t){let e=this.tooltipClass(t);if(e!=this.currentClass){for(let t of this.currentClass.split(" "))t&&this.dom.classList.remove(t);for(let t of e.split(" "))t&&this.dom.classList.add(t);this.currentClass=e}}positioned(t){this.space=t,this.info&&this.view.requestMeasure(this.placeInfoReq)}updateSel(){let t=this.view.state.field(this.stateField),e=t.open;if((e.selected>-1&&e.selected<this.range.from||e.selected>=this.range.to)&&(this.range=V(e.options.length,e.selected,this.view.state.facet(W).maxRenderedOptions),this.showOptions(e.options,t.id)),this.updateSelectedOption(e.selected)){this.destroyInfo();let{completion:i}=e.options[e.selected],{info:n}=i;if(!n)return;let o="string"==typeof n?document.createTextNode(n):n(i);if(!o)return;"then"in o?o.then((e=>{e&&this.view.state.field(this.stateField,!1)==t&&this.addInfoPane(e,i)})).catch((t=>y(this.view.state,t,"completion info"))):this.addInfoPane(o,i)}}addInfoPane(t,e){this.destroyInfo();let i=this.info=document.createElement("div");if(i.className="cm-tooltip cm-completionInfo",null!=t.nodeType)i.appendChild(t),this.infoDestroy=null;else{let{dom:e,destroy:n}=t;i.appendChild(e),this.infoDestroy=n||null}this.dom.appendChild(i),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(t){let e=null;for(let i=this.list.firstChild,n=this.range.from;i;i=i.nextSibling,n++)"LI"==i.nodeName&&i.id?n==t?i.hasAttribute("aria-selected")||(i.setAttribute("aria-selected","true"),e=i):i.hasAttribute("aria-selected")&&i.removeAttribute("aria-selected"):n--;return e&&function(t,e){let i=t.getBoundingClientRect(),n=e.getBoundingClientRect(),o=i.height/t.offsetHeight;n.top<i.top?t.scrollTop-=(i.top-n.top)/o:n.bottom>i.bottom&&(t.scrollTop+=(n.bottom-i.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(),i=this.info.getBoundingClientRect(),n=t.getBoundingClientRect(),o=this.space;if(!o){let t=this.dom.ownerDocument.defaultView||window;o={left:0,top:0,right:t.innerWidth,bottom:t.innerHeight}}return n.top>Math.min(o.bottom,e.bottom)-10||n.bottom<Math.max(o.top,e.top)+10?null:this.view.state.facet(W).positionInfo(this.view,e,n,i,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,i){const n=document.createElement("ul");n.id=e,n.setAttribute("role","listbox"),n.setAttribute("aria-expanded","true"),n.setAttribute("aria-label",this.view.state.phrase("Completions"));let o=null;for(let s=i.from;s<i.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>i.from||0==i.from))if(o=t,"string"!=typeof a&&a.header)n.appendChild(a.header(a));else{n.appendChild(document.createElement("completion-section")).textContent=t}}const c=n.appendChild(document.createElement("li"));c.id=e+"-"+s,c.setAttribute("role","option");let h=this.optionClass(l);h&&(c.className=h);for(let t of this.optionContent){let e=t(l,this.view.state,this.view,r);e&&c.appendChild(e)}}return i.from&&n.classList.add("cm-completionListIncompleteTop"),i.to<t.length&&n.classList.add("cm-completionListIncompleteBottom"),n}destroyInfo(){this.info&&(this.infoDestroy&&this.infoDestroy(),this.info.remove(),this.info=null)}destroy(){this.destroyInfo()}}function K(t,e){return i=>new z(i,t,e)}function Q(t){return 100*(t.boost||0)+(t.apply?10:0)+(t.info?5:0)+(t.type?1:0)}class _{constructor(t,e,i,n,o,s){this.options=t,this.attrs=e,this.tooltip=i,this.timestamp=n,this.selected=o,this.disabled=s}setSelected(t,e){return t==this.selected||t>=this.options.length?this:new _(this.options,J(e,t),this.tooltip,this.timestamp,t,this.disabled)}static build(t,e,i,n,o,s){if(n&&!s&&t.some((t=>t.isPending)))return n.setDisabled();let l=function(t,e){let i=[],n=null,o=t=>{i.push(t);let{section:e}=t.completion;if(e){n||(n=[]);let t="string"==typeof e?e:e.name;n.some((e=>e.name==t))||n.push("string"==typeof e?{name:t}:e)}},s=e.facet(W);for(let n of t)if(n.hasResult()){let t=n.result.getMatch;if(!1===n.result.filter)for(let e of n.result.options)o(new R(e,n.source,t?t(e):[],1e9-i.length));else{let i,l=e.sliceDoc(n.from,n.to),r=s.filterStrict?new U(l):new N(l);for(let e of n.result.options)if(i=r.match(e.label)){let s=e.displayLabel?t?t(e,i.matched):[]:i.matched;o(new R(e,n.source,s,i.score+(e.boost||0)))}}}if(n){let t=Object.create(null),e=0,o=(t,e)=>{var i,n;return(null!==(i=t.rank)&&void 0!==i?i:1e9)-(null!==(n=e.rank)&&void 0!==n?n:1e9)||(t.name<e.name?-1:1)};for(let i of n.sort(o))e-=1e5,t[i.name]=e;for(let e of i){let{section:i}=e.completion;i&&(e.score+=t["string"==typeof i?i:i.name])}}let l=[],r=null,a=s.compareCompletions;for(let t of i.sort(((t,e)=>e.score-t.score||a(t.completion,e.completion)))){let e=t.completion;!r||r.label!=e.label||r.detail!=e.detail||null!=r.type&&null!=e.type&&r.type!=e.type||r.apply!=e.apply||r.boost!=e.boost?l.push(t):Q(t.completion)>Q(r)&&(l[l.length-1]=t),r=t.completion}return l}(t,e);if(!l.length)return n&&t.some((t=>t.isPending))?n.setDisabled():null;let r=e.facet(W).selectOnOpen?0:-1;if(n&&n.selected!=r&&-1!=n.selected){let t=n.options[n.selected].completion;for(let e=0;e<l.length;e++)if(l[e].completion==t){r=e;break}}return new _(l,J(i,r),{pos:t.reduce(((t,e)=>e.hasResult()?Math.min(t,e.from):t),1e8),create:rt,above:o.aboveCursor},n?n.timestamp:Date.now(),r,!1)}map(t){return new _(this.options,this.attrs,Object.assign(Object.assign({},this.tooltip),{pos:t.mapPos(this.tooltip.pos)}),this.timestamp,this.selected,this.disabled)}setDisabled(){return new _(this.options,this.attrs,this.tooltip,this.timestamp,this.selected,!0)}}class X{constructor(t,e,i){this.active=t,this.id=e,this.open=i}static start(){return new X(Z,"cm-ac-"+Math.floor(2e6*Math.random()).toString(36),null)}update(t){let{state:e}=t,i=e.facet(W),n=(i.override||e.languageDataAt("autocomplete",E(e)).map(F)).map((e=>(this.active.find((t=>t.source==e))||new et(e,this.active.some((t=>0!=t.state))?1:0)).update(t,i)));n.length==this.active.length&&n.every(((t,e)=>t==this.active[e]))&&(n=this.active);let o=this.open,s=t.effects.some((t=>t.is(nt)));o&&t.docChanged&&(o=o.map(t.changes)),t.selection||n.some((e=>e.hasResult()&&t.changes.touchesRange(e.from,e.to)))||!function(t,e){if(t==e)return!0;for(let i=0,n=0;;){for(;i<t.length&&!t[i].hasResult();)i++;for(;n<e.length&&!e[n].hasResult();)n++;let o=i==t.length,s=n==e.length;if(o||s)return o==s;if(t[i++].result!=e[n++].result)return!1}}(n,this.active)||s?o=_.build(n,e,this.id,o,i,s):o&&o.disabled&&!n.some((t=>t.isPending))&&(o=null),!o&&n.every((t=>!t.isPending))&&n.some((t=>t.hasResult()))&&(n=n.map((t=>t.hasResult()?new et(t.source,0):t)));for(let e of t.effects)e.is(ot)&&(o=o&&o.setSelected(e.value,this.id));return n==this.active&&o==this.open?this:new X(n,this.id,o)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:this.active.length?Y:G}}const Y={"aria-autocomplete":"list"},G={};function J(t,e){let i={"aria-autocomplete":"list","aria-haspopup":"listbox","aria-controls":t};return e>-1&&(i["aria-activedescendant"]=t+"-"+e),i}const Z=[];function tt(t,e){if(t.isUserEvent("input.complete")){let i=t.annotation(M);if(i&&e.activateOnCompletion(i))return 12}let i=t.isUserEvent("input.type");return i&&e.activateOnTyping?5:i?1:t.isUserEvent("delete.backward")?2:t.selection?8:t.docChanged?16:0}class et{constructor(t,e,i=!1){this.source=t,this.state=e,this.explicit=i}hasResult(){return!1}get isPending(){return 1==this.state}update(t,e){let i=tt(t,e),n=this;(8&i||16&i&&this.touches(t))&&(n=new et(n.source,0)),4&i&&0==n.state&&(n=new et(this.source,1)),n=n.updateFor(t,i);for(let e of t.effects)if(e.is(j))n=new et(n.source,1,e.value);else if(e.is($))n=new et(n.source,0);else if(e.is(nt))for(let t of e.value)t.source==n.source&&(n=t);return n}updateFor(t,e){return this.map(t.changes)}map(t){return this}touches(t){return t.changes.touchesRange(E(t.state))}}class it extends et{constructor(t,e,i,n,o,s){super(t,3,e),this.limit=i,this.result=n,this.from=o,this.to=s}hasResult(){return!0}updateFor(t,e){var i;if(!(3&e))return this.map(t.changes);let n=this.result;n.map&&!t.changes.empty&&(n=n.map(n,t.changes));let o=t.changes.mapPos(this.from),s=t.changes.mapPos(this.to,1),l=E(t.state);if(l>s||!n||2&e&&(E(t.startState)==this.from||l<this.limit))return new et(this.source,4&e?1:0);let r=t.changes.mapPos(this.limit);return function(t,e,i,n){if(!t)return!1;let o=e.sliceDoc(i,n);return"function"==typeof t?t(o,i,n,e):P(t,!0).test(o)}(n.validFor,t.state,o,s)?new it(this.source,this.explicit,r,n,o,s):n.update&&(n=n.update(n,o,s,new T(t.state,l,!1)))?new it(this.source,this.explicit,r,n,n.from,null!==(i=n.to)&&void 0!==i?i:E(t.state)):new et(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 et(this.source,0)}touches(t){return t.changes.touchesRange(this.from,this.to)}}const nt=s.define({map:(t,e)=>t.map((t=>t.map(e)))}),ot=s.define(),st=t.define({create:()=>X.start(),update:(t,e)=>t.update(e),provide:t=>[w.from(t,(t=>t.tooltip)),g.contentAttributes.from(t,(t=>t.attrs))]});function lt(t,e){const i=e.completion.apply||e.completion.label;let n=t.state.field(st).active.find((t=>t.source==e.source));return n instanceof it&&("string"==typeof i?t.dispatch(Object.assign(Object.assign({},function(t,e,i,n){let{main:s}=t.selection,l=i-s.from,r=n-s.from;return Object.assign(Object.assign({},t.changeByRange((a=>{if(a!=s&&i!=n&&t.sliceDoc(a.from+l,a.from+r)!=t.sliceDoc(i,n))return{range:a};let c=t.toText(e);return{changes:{from:a.from+l,to:n==s.from?a.to:a.from+r,insert:c},range:o.cursor(a.from+l+c.length)}}))),{scrollIntoView:!0,userEvent:"input.complete"})}(t.state,i,n.from,n.to)),{annotations:M.of(e.completion)})):i(t,e.completion,n.from,n.to),!0)}const rt=K(st,lt);function at(t,e="option"){return i=>{let n=i.state.field(st,!1);if(!n||!n.open||n.open.disabled||Date.now()-n.open.timestamp<i.state.facet(W).interactionDelay)return!1;let o,s=1;"page"==e&&(o=b(i,n.open.tooltip))&&(s=Math.max(2,Math.floor(o.dom.offsetHeight/o.dom.querySelector("li").offsetHeight)-1));let{length:l}=n.open.options,r=n.open.selected>-1?n.open.selected+s*(t?1:-1):t?0:l-1;return r<0?r="page"==e?0:l-1:r>=l&&(r="page"==e?l-1:0),i.dispatch({effects:ot.of(r)}),!0}}const ct=t=>!!t.state.field(st,!1)&&(t.dispatch({effects:j.of(!0)}),!0);class ht{constructor(t,e){this.active=t,this.context=e,this.time=Date.now(),this.updates=[],this.done=void 0}}const pt=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(st).active)e.isPending&&this.startQuery(e)}update(t){let e=t.state.field(st),i=t.state.facet(W);if(!t.selectionSet&&!t.docChanged&&t.startState.field(st)==e)return;let n=t.transactions.some((t=>{let e=tt(t,i);return 8&e||(t.selection||t.docChanged)&&!(3&e)}));for(let e=0;e<this.running.length;e++){let i=this.running[e];if(n||i.context.abortOnDocChange&&t.docChanged||i.updates.length+t.transactions.length>50&&Date.now()-i.time>1e3){for(let t of i.context.abortListeners)try{t()}catch(t){y(this.view.state,t)}i.context.abortListeners=null,this.running.splice(e--,1)}else i.updates.push(...t.transactions)}this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),t.transactions.some((t=>t.effects.some((t=>t.is(j)))))&&(this.pendingStart=!0);let o=this.pendingStart?50:i.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(st);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(W).updateSyncTime))}startQuery(t){let{state:e}=this.view,i=E(e),n=new T(e,i,t.explicit,this.view),o=new ht(t,n);this.running.push(o),Promise.resolve(t.source(n)).then((t=>{o.context.aborted||(o.done=t||null,this.scheduleAccept())}),(t=>{this.view.dispatch({effects:$.of(null)}),y(this.view.state,t)}))}scheduleAccept(){this.running.every((t=>void 0!==t.done))?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout((()=>this.accept()),this.view.state.facet(W).updateSyncTime))}accept(){var t;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],i=this.view.state.facet(W),n=this.view.state.field(st);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 n=E(s.updates.length?s.updates[0].startState:this.view.state),o=Math.min(n,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:n);for(let t of s.updates)l=l.update(t,i);if(l.hasResult()){e.push(l);continue}}let l=n.active.find((t=>t.source==s.active.source));if(l&&l.isPending)if(null==s.done){let t=new et(s.active.source,0);for(let e of s.updates)t=t.update(e,i);t.isPending||e.push(t)}else this.startQuery(l)}(e.length||n.open&&n.open.disabled)&&this.view.dispatch({effects:nt.of(e)})}},{eventHandlers:{blur(t){let e=this.view.state.field(st,!1);if(e&&e.tooltip&&this.view.state.facet(W).closeOnBlur){let i=e.open&&b(this.view,e.open.tooltip);i&&i.dom.contains(t.relatedTarget)||setTimeout((()=>this.view.dispatch({effects:$.of(null)})),10)}},compositionstart(){this.composing=1},compositionend(){3==this.composing&&setTimeout((()=>this.view.dispatch({effects:j.of(!1)})),20),this.composing=0}}}),ft="object"==typeof navigator&&/Win/.test(navigator.platform),dt=e.highest(g.domEventHandlers({keydown(t,e){let i=e.state.field(st,!1);if(!i||!i.open||i.open.disabled||i.open.selected<0||t.key.length>1||t.ctrlKey&&(!ft||!t.altKey)||t.metaKey)return!1;let n=i.open.options[i.open.selected],o=i.active.find((t=>t.source==n.source)),s=n.completion.commitCharacters||o.result.commitCharacters;return s&&s.indexOf(t.key)>-1&<(e,n),!1}})),ut=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 mt{constructor(t,e,i,n){this.field=t,this.line=e,this.from=i,this.to=n}}class gt{constructor(t,e,i){this.field=t,this.from=e,this.to=i}map(t){let e=t.mapPos(this.from,-1,p.TrackDel),i=t.mapPos(this.to,1,p.TrackDel);return null==e||null==i?null:new gt(this.field,e,i)}}class vt{constructor(t,e){this.lines=t,this.fieldPositions=e}instantiate(t,e){let i=[],n=[e],o=t.doc.lineAt(e),s=/^\s*/.exec(o.text)[0];for(let o of this.lines){if(i.length){let i=s,l=/^\t*/.exec(o)[0].length;for(let e=0;e<l;e++)i+=t.facet(D);n.push(e+i.length-l),o=i+o.slice(l)}i.push(o),e+=o.length+1}let l=this.fieldPositions.map((t=>new gt(t.field,n[t.line]+t.from,n[t.line]+t.to)));return{text:i,ranges:l}}static parse(t){let e,i=[],n=[],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<i.length;e++)(null!=t?i[e].seq==t:a&&i[e].name==a)&&(r=e);if(r<0){let e=0;for(;e<i.length&&(null==t||null!=i[e].seq&&i[e].seq<t);)e++;i.splice(e,0,{seq:t,name:a}),r=e;for(let t of o)t.field>=r&&t.field++}o.push(new mt(r,n.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,i)=>{for(let t of o)t.line==n.length&&t.from>i&&(t.from--,t.to--);return e})),n.push(s)}return new vt(n,o)}}let bt=I.widget({widget:new class extends O{toDOM(){let t=document.createElement("span");return t.className="cm-snippetFieldPosition",t}ignoreEvent(){return!1}}}),wt=I.mark({class:"cm-snippetField"});class yt{constructor(t,e){this.ranges=t,this.active=e,this.deco=I.set(t.map((t=>(t.from==t.to?bt:wt).range(t.from,t.to))))}map(t){let e=[];for(let i of this.ranges){let n=i.map(t);if(!n)return null;e.push(n)}return new yt(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 xt=s.define({map:(t,e)=>t&&t.map(e)}),Ct=s.define(),It=t.define({create:()=>null,update(t,e){for(let i of e.effects){if(i.is(xt))return i.value;if(i.is(Ct)&&t)return new yt(t.ranges,i.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 Ot(t,e){return o.create(t.filter((t=>t.field==e)).map((t=>o.range(t.from,t.to))))}function kt(t){let e=vt.parse(t);return(t,i,n,o)=>{let{text:l,ranges:r}=e.instantiate(t.state,n),{main:a}=t.state.selection,c={changes:{from:n,to:o==a.from?a.to:o,insert:m.of(l)},scrollIntoView:!0,annotations:i?[M.of(i),u.userEvent.of("input.complete")]:void 0};if(r.length&&(c.selection=Ot(r,0)),r.some((t=>t.field>0))){let e=new yt(r,0),i=c.effects=[xt.of(e)];void 0===t.state.field(It,!1)&&i.push(s.appendConfig.of([It,At,Rt,ut]))}t.dispatch(t.state.update(c))}}function Dt(t){return({state:e,dispatch:i})=>{let n=e.field(It,!1);if(!n||t<0&&0==n.active)return!1;let o=n.active+t,s=t>0&&!n.ranges.some((e=>e.field==o+t));return i(e.update({selection:Ot(n.ranges,o),effects:xt.of(s?null:new yt(n.ranges,o)),scrollIntoView:!0})),!0}}const Tt=[{key:"Tab",run:Dt(1),shift:Dt(-1)},{key:"Escape",run:({state:t,dispatch:e})=>!!t.field(It,!1)&&(e(t.update({effects:xt.of(null)})),!0)}],St=i.define({combine:t=>t.length?t[0]:Tt}),At=e.highest(x.compute([St],(t=>t.facet(St))));function Lt(t,e){return Object.assign(Object.assign({},e),{apply:kt(t)})}const Rt=g.domEventHandlers({mousedown(t,e){let i,n=e.state.field(It,!1);if(!n||null==(i=e.posAtCoords({x:t.clientX,y:t.clientY})))return!1;let o=n.ranges.find((t=>t.from<=i&&t.to>=i));return!(!o||o.field==n.active)&&(e.dispatch({selection:Ot(n.ranges,o.field),effects:xt.of(n.ranges.some((t=>t.field>o.field))?new yt(n.ranges,o.field):null),scrollIntoView:!0}),!0)}}),Et={brackets:["(","[","{","'",'"'],before:")]}:;>",stringPrefixes:[]},Pt=s.define({map(t,e){let i=e.mapPos(t,-1,p.TrackAfter);return null==i?void 0:i}}),Mt=new class extends f{};Mt.startSide=1,Mt.endSide=-1;const Bt=t.define({create:()=>r.empty,update(t,e){if(t=t.map(e.changes),e.selection){let i=e.state.doc.lineAt(e.selection.main.head);t=t.update({filter:t=>t>=i.from&&t<=i.to})}for(let i of e.effects)i.is(Pt)&&(t=t.update({add:[Mt.range(i.value,i.value+1)]}));return t}});function Ft(){return[Wt,Bt]}const jt="()[]{}<>";function $t(t){for(let e=0;e<8;e+=2)if(jt.charCodeAt(e)==t)return jt.charAt(e+1);return c(t<128?t:t+1)}function Nt(t,e){return t.languageDataAt("closeBrackets",e)[0]||Et}const Ut="object"==typeof navigator&&/Android\b/.test(navigator.userAgent),Wt=g.inputHandler.of(((t,e,i,o)=>{if((Ut?t.composing:t.compositionStarted)||t.state.readOnly)return!1;let s=t.state.selection.main;if(o.length>2||2==o.length&&1==l(n(o,0))||e!=s.from||i!=s.to)return!1;let r=function(t,e){let i=Nt(t,t.selection.main.head),o=i.brackets||Et.brackets;for(let s of o){let l=$t(n(s,0));if(e==s)return l==s?Qt(t,s,o.indexOf(s+s+s)>-1,i):zt(t,s,l,i.before||Et.before);if(e==l&&Ht(t,t.selection.main.from))return Kt(t,s,l)}return null}(t.state,o);return!!r&&(t.dispatch(r),!0)})),qt=[{key:"Backspace",run:({state:t,dispatch:e})=>{if(t.readOnly)return!1;let i=Nt(t,t.selection.main.head).brackets||Et.brackets,s=null,r=t.changeByRange((e=>{if(e.empty){let s=function(t,e){let i=t.sliceString(e-2,e);return l(n(i,0))==i.length?i:i.slice(1)}(t.doc,e.head);for(let l of i)if(l==s&&Vt(t.doc,e.head)==$t(n(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 Ht(t,e){let i=!1;return t.field(Bt).between(0,t.doc.length,(t=>{t==e&&(i=!0)})),i}function Vt(t,e){let i=t.sliceString(e,e+2);return i.slice(0,l(n(i,0)))}function zt(t,e,i,n){let s=null,l=t.changeByRange((l=>{if(!l.empty)return{changes:[{insert:e,from:l.from},{insert:i,from:l.to}],effects:Pt.of(l.to+e.length),range:o.range(l.anchor+e.length,l.head+e.length)};let r=Vt(t.doc,l.head);return!r||/\s/.test(r)||n.indexOf(r)>-1?{changes:{insert:e+i,from:l.head},effects:Pt.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 Kt(t,e,i){let n=null,s=t.changeByRange((e=>e.empty&&Vt(t.doc,e.head)==i?{changes:{from:e.head,to:e.head+i.length,insert:i},range:o.cursor(e.head+i.length)}:n={range:e}));return n?null:t.update(s,{scrollIntoView:!0,userEvent:"input.type"})}function Qt(t,e,i,n){let s=n.stringPrefixes||Et.stringPrefixes,l=null,r=t.changeByRange((n=>{if(!n.empty)return{changes:[{insert:e,from:n.from},{insert:e,from:n.to}],effects:Pt.of(n.to+e.length),range:o.range(n.anchor+e.length,n.head+e.length)};let r,a=n.head,c=Vt(t.doc,a);if(c==e){if(_t(t,a))return{changes:{insert:e+e,from:a},effects:Pt.of(a+e.length),range:o.cursor(a+e.length)};if(Ht(t,a)){let n=i&&t.sliceDoc(a,a+3*e.length)==e+e+e?e+e+e:e;return{changes:{from:a,to:a+n.length,insert:n},range:o.cursor(a+n.length)}}}else{if(i&&t.sliceDoc(a-2*e.length,a)==e+e&&(r=Xt(t,a-2*e.length,s))>-1&&_t(t,r))return{changes:{insert:e+e+e+e,from:a},effects:Pt.of(a+e.length),range:o.cursor(a+e.length)};if(t.charCategorizer(a)(c)!=d.Word&&Xt(t,a,s)>-1&&!function(t,e,i,n){let o=k(t).resolveInner(e,-1),s=n.reduce(((t,e)=>Math.max(t,e.length)),0);for(let l=0;l<5;l++){let l=t.sliceDoc(o.from,Math.min(o.to,o.from+i.length+s)),r=l.indexOf(i);if(!r||r>-1&&n.indexOf(l.slice(0,r))>-1){let e=o.firstChild;for(;e&&e.from==o.from&&e.to-e.from>i.length+r;){if(t.sliceDoc(e.to-i.length,e.to)==i)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:Pt.of(a+e.length),range:o.cursor(a+e.length)}}return{range:l=n}}));return l?null:t.update(r,{scrollIntoView:!0,userEvent:"input.type"})}function _t(t,e){let i=k(t).resolveInner(e+1);return i.parent&&i.from==e}function Xt(t,e,i){let n=t.charCategorizer(e);if(n(t.sliceDoc(e-1,e))!=d.Word)return e;for(let o of i){let i=e-o.length;if(t.sliceDoc(i,e)==o&&n(t.sliceDoc(i-1,i))!=d.Word)return i}return-1}function Yt(t={}){return[dt,st,W.of(t),pt,Jt,ut]}const Gt=[{key:"Ctrl-Space",run:ct},{mac:"Alt-`",run:ct},{key:"Escape",run:t=>{let e=t.state.field(st,!1);return!(!e||!e.active.some((t=>0!=t.state)))&&(t.dispatch({effects:$.of(null)}),!0)}},{key:"ArrowDown",run:at(!0)},{key:"ArrowUp",run:at(!1)},{key:"PageDown",run:at(!0,"page")},{key:"PageUp",run:at(!1,"page")},{key:"Enter",run:t=>{let e=t.state.field(st,!1);return!(t.state.readOnly||!e||!e.open||e.open.selected<0||e.open.disabled||Date.now()-e.open.timestamp<t.state.facet(W).interactionDelay)&<(t,e.open.options[e.open.selected])}}],Jt=e.highest(x.computeN([W],(t=>t.facet(W).defaultKeymap?[Gt]:[])));export{Ft as a,Yt as b,A as c,qt as d,Gt as e,L as i,Lt as s};
|
2
|
-
//# sourceMappingURL=index-978lpDXp.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"index-978lpDXp.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 Object.assign(Object.assign({}, state.changeByRange(range => {\n if (range != main && from != to &&\n state.sliceDoc(range.from + fromOff, range.from + toOff) != state.sliceDoc(from, to))\n return { range };\n 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 })), { scrollIntoView: true, userEvent: \"input.complete\" });\n}\nconst SourceCache = /*@__PURE__*/new WeakMap();\nfunction asSource(source) {\n if (!Array.isArray(source))\n return source;\n let known = SourceCache.get(source);\n if (!known)\n SourceCache.set(source, known = completeFromList(source));\n return known;\n}\nconst startCompletionEffect = /*@__PURE__*/StateEffect.define();\nconst closeCompletionEffect = /*@__PURE__*/StateEffect.define();\n\n// A pattern matcher for fuzzy completion matching. Create an instance\n// once for a pattern, and then use that to match any number of\n// completions.\nclass FuzzyMatcher {\n constructor(pattern) {\n this.pattern = pattern;\n this.chars = [];\n this.folded = [];\n // Buffers reused by calls to `match` to track matched character\n // positions.\n this.any = [];\n this.precise = [];\n this.byWord = [];\n this.score = 0;\n this.matched = [];\n for (let p = 0; p < pattern.length;) {\n let char = codePointAt(pattern, p), size = codePointSize(char);\n this.chars.push(char);\n let part = pattern.slice(p, p + size), upper = part.toUpperCase();\n this.folded.push(codePointAt(upper == part ? part.toLowerCase() : upper, 0));\n p += size;\n }\n this.astral = pattern.length != this.chars.length;\n }\n ret(score, matched) {\n this.score = score;\n this.matched = matched;\n return this;\n }\n // Matches a given word (completion) against the pattern (input).\n // Will return a boolean indicating whether there was a match and,\n // on success, set `this.score` to the score, `this.matched` to an\n // array of `from, to` pairs indicating the matched parts of `word`.\n //\n // The score is a number that is more negative the worse the match\n // is. See `Penalty` above.\n match(word) {\n if (this.pattern.length == 0)\n return this.ret(-100 /* Penalty.NotFull */, []);\n if (word.length < this.pattern.length)\n return null;\n let { chars, folded, any, precise, byWord } = this;\n // For single-character queries, only match when they occur right\n // at the start\n if (chars.length == 1) {\n let first = codePointAt(word, 0), firstSize = codePointSize(first);\n let score = firstSize == word.length ? 0 : -100 /* Penalty.NotFull */;\n if (first == chars[0]) ;\n else if (first == folded[0])\n score += -200 /* Penalty.CaseFold */;\n else\n return null;\n return this.ret(score, [0, firstSize]);\n }\n let direct = word.indexOf(this.pattern);\n if (direct == 0)\n return this.ret(word.length == this.pattern.length ? 0 : -100 /* Penalty.NotFull */, [0, this.pattern.length]);\n let len = chars.length, anyTo = 0;\n if (direct < 0) {\n for (let i = 0, e = Math.min(word.length, 200); i < e && anyTo < len;) {\n let next = codePointAt(word, i);\n if (next == chars[anyTo] || next == folded[anyTo])\n any[anyTo++] = i;\n i += codePointSize(next);\n }\n // No match, exit immediately\n if (anyTo < len)\n return null;\n }\n // This tracks the extent of the precise (non-folded, not\n // necessarily adjacent) match\n let preciseTo = 0;\n // Tracks whether there is a match that hits only characters that\n // appear to be starting words. `byWordFolded` is set to true when\n // a case folded character is encountered in such a match\n let byWordTo = 0, byWordFolded = false;\n // If we've found a partial adjacent match, these track its state\n let adjacentTo = 0, adjacentStart = -1, adjacentEnd = -1;\n let hasLower = /[a-z]/.test(word), wordAdjacent = true;\n // Go over the option's text, scanning for the various kinds of matches\n for (let i = 0, e = Math.min(word.length, 200), prevType = 0 /* Tp.NonWord */; i < e && byWordTo < len;) {\n let next = codePointAt(word, i);\n if (direct < 0) {\n if (preciseTo < len && next == chars[preciseTo])\n precise[preciseTo++] = i;\n if (adjacentTo < len) {\n if (next == chars[adjacentTo] || next == folded[adjacentTo]) {\n if (adjacentTo == 0)\n adjacentStart = i;\n adjacentEnd = i + 1;\n adjacentTo++;\n }\n else {\n adjacentTo = 0;\n }\n }\n }\n let ch, type = next < 0xff\n ? (next >= 48 && next <= 57 || next >= 97 && next <= 122 ? 2 /* Tp.Lower */ : next >= 65 && next <= 90 ? 1 /* Tp.Upper */ : 0 /* Tp.NonWord */)\n : ((ch = fromCodePoint(next)) != ch.toLowerCase() ? 1 /* Tp.Upper */ : ch != ch.toUpperCase() ? 2 /* Tp.Lower */ : 0 /* Tp.NonWord */);\n if (!i || type == 1 /* Tp.Upper */ && hasLower || prevType == 0 /* Tp.NonWord */ && type != 0 /* Tp.NonWord */) {\n if (chars[byWordTo] == next || (folded[byWordTo] == next && (byWordFolded = true)))\n byWord[byWordTo++] = i;\n else if (byWord.length)\n wordAdjacent = false;\n }\n prevType = type;\n i += codePointSize(next);\n }\n if (byWordTo == len && byWord[0] == 0 && wordAdjacent)\n return this.result(-100 /* Penalty.ByWord */ + (byWordFolded ? -200 /* Penalty.CaseFold */ : 0), byWord, word);\n if (adjacentTo == len && adjacentStart == 0)\n return this.ret(-200 /* Penalty.CaseFold */ - word.length + (adjacentEnd == word.length ? 0 : -100 /* Penalty.NotFull */), [0, adjacentEnd]);\n if (direct > -1)\n return this.ret(-700 /* Penalty.NotStart */ - word.length, [direct, direct + this.pattern.length]);\n if (adjacentTo == len)\n return this.ret(-200 /* Penalty.CaseFold */ + -700 /* Penalty.NotStart */ - word.length, [adjacentStart, adjacentEnd]);\n if (byWordTo == len)\n return this.result(-100 /* Penalty.ByWord */ + (byWordFolded ? -200 /* Penalty.CaseFold */ : 0) + -700 /* Penalty.NotStart */ +\n (wordAdjacent ? 0 : -1100 /* Penalty.Gap */), byWord, word);\n return chars.length == 2 ? null\n : this.result((any[0] ? -700 /* Penalty.NotStart */ : 0) + -200 /* Penalty.CaseFold */ + -1100 /* Penalty.Gap */, any, word);\n }\n result(score, positions, word) {\n let result = [], i = 0;\n for (let pos of positions) {\n let to = pos + (this.astral ? codePointSize(codePointAt(word, pos)) : 1);\n if (i && result[i - 1] == pos)\n result[i - 1] = to;\n else {\n result[i++] = pos;\n result[i++] = to;\n }\n }\n return this.ret(score - word.length, result);\n }\n}\nclass StrictMatcher {\n constructor(pattern) {\n this.pattern = pattern;\n this.matched = [];\n this.score = 0;\n this.folded = pattern.toLowerCase();\n }\n match(word) {\n if (word.length < this.pattern.length)\n return null;\n let start = word.slice(0, this.pattern.length);\n let match = start == this.pattern ? 0 : start.toLowerCase() == this.folded ? -200 /* Penalty.CaseFold */ : null;\n if (match == null)\n return null;\n this.matched = [0, start.length];\n this.score = match + (word.length == this.pattern.length ? 0 : -100 /* Penalty.NotFull */);\n return this;\n }\n}\n\nconst completionConfig = /*@__PURE__*/Facet.define({\n combine(configs) {\n return combineConfig(configs, {\n activateOnTyping: true,\n activateOnCompletion: () => false,\n activateOnTypingDelay: 100,\n selectOnOpen: true,\n override: null,\n closeOnBlur: true,\n maxRenderedOptions: 100,\n defaultKeymap: true,\n tooltipClass: () => \"\",\n optionClass: () => \"\",\n aboveCursor: false,\n icons: true,\n addToOptions: [],\n positionInfo: defaultPositionInfo,\n filterStrict: false,\n compareCompletions: (a, b) => a.label.localeCompare(b.label),\n interactionDelay: 75,\n updateSyncTime: 100\n }, {\n defaultKeymap: (a, b) => a && b,\n closeOnBlur: (a, b) => a && b,\n icons: (a, b) => a && b,\n tooltipClass: (a, b) => c => joinClass(a(c), b(c)),\n optionClass: (a, b) => c => joinClass(a(c), b(c)),\n addToOptions: (a, b) => a.concat(b),\n filterStrict: (a, b) => a || b,\n });\n }\n});\nfunction joinClass(a, b) {\n return a ? b ? a + \" \" + b : a : b;\n}\nfunction defaultPositionInfo(view, list, option, info, space, tooltip) {\n let rtl = view.textDirection == Direction.RTL, left = rtl, narrow = false;\n let side = \"top\", offset, maxWidth;\n let spaceLeft = list.left - space.left, spaceRight = space.right - list.right;\n let infoWidth = info.right - info.left, infoHeight = info.bottom - info.top;\n if (left && spaceLeft < Math.min(infoWidth, spaceRight))\n left = false;\n else if (!left && spaceRight < Math.min(infoWidth, spaceLeft))\n left = true;\n if (infoWidth <= (left ? spaceLeft : spaceRight)) {\n offset = Math.max(space.top, Math.min(option.top, space.bottom - infoHeight)) - list.top;\n maxWidth = Math.min(400 /* Info.Width */, left ? spaceLeft : spaceRight);\n }\n else {\n narrow = true;\n maxWidth = Math.min(400 /* Info.Width */, (rtl ? list.right : space.right - list.left) - 30 /* Info.Margin */);\n let spaceBelow = space.bottom - list.bottom;\n if (spaceBelow >= infoHeight || spaceBelow > list.top) { // Below the completion\n offset = option.bottom - list.top;\n }\n else { // Above it\n side = \"bottom\";\n offset = list.bottom - option.top;\n }\n }\n let scaleY = (list.bottom - list.top) / tooltip.offsetHeight;\n let scaleX = (list.right - list.left) / tooltip.offsetWidth;\n return {\n style: `${side}: ${offset / scaleY}px; max-width: ${maxWidth / scaleX}px`,\n class: \"cm-completionInfo-\" + (narrow ? (rtl ? \"left-narrow\" : \"right-narrow\") : left ? \"left\" : \"right\")\n };\n}\n\nfunction optionContent(config) {\n let content = config.addToOptions.slice();\n if (config.icons)\n content.push({\n render(completion) {\n let icon = document.createElement(\"div\");\n icon.classList.add(\"cm-completionIcon\");\n if (completion.type)\n icon.classList.add(...completion.type.split(/\\s+/g).map(cls => \"cm-completionIcon-\" + cls));\n icon.setAttribute(\"aria-hidden\", \"true\");\n return icon;\n },\n position: 20\n });\n content.push({\n render(completion, _s, _v, match) {\n let labelElt = document.createElement(\"span\");\n labelElt.className = \"cm-completionLabel\";\n let label = completion.displayLabel || completion.label, off = 0;\n for (let j = 0; j < match.length;) {\n let from = match[j++], to = match[j++];\n if (from > off)\n labelElt.appendChild(document.createTextNode(label.slice(off, from)));\n let span = labelElt.appendChild(document.createElement(\"span\"));\n span.appendChild(document.createTextNode(label.slice(from, to)));\n span.className = \"cm-completionMatchedText\";\n off = to;\n }\n if (off < label.length)\n labelElt.appendChild(document.createTextNode(label.slice(off)));\n return labelElt;\n },\n position: 50\n }, {\n render(completion) {\n if (!completion.detail)\n return null;\n let detailElt = document.createElement(\"span\");\n detailElt.className = \"cm-completionDetail\";\n detailElt.textContent = completion.detail;\n return detailElt;\n },\n position: 80\n });\n return content.sort((a, b) => a.position - b.position).map(a => a.render);\n}\nfunction rangeAroundSelected(total, selected, max) {\n if (total <= max)\n return { from: 0, to: total };\n if (selected < 0)\n selected = 0;\n if (selected <= (total >> 1)) {\n let off = Math.floor(selected / max);\n return { from: off * max, to: (off + 1) * max };\n }\n let off = Math.floor((total - selected) / max);\n return { from: total - (off + 1) * max, to: total - off * max };\n}\nclass CompletionTooltip {\n constructor(view, stateField, applyCompletion) {\n this.view = view;\n this.stateField = stateField;\n this.applyCompletion = applyCompletion;\n this.info = null;\n this.infoDestroy = null;\n this.placeInfoReq = {\n read: () => this.measureInfo(),\n write: (pos) => this.placeInfo(pos),\n key: this\n };\n this.space = null;\n this.currentClass = \"\";\n let cState = view.state.field(stateField);\n let { options, selected } = cState.open;\n let config = view.state.facet(completionConfig);\n this.optionContent = optionContent(config);\n this.optionClass = config.optionClass;\n this.tooltipClass = config.tooltipClass;\n this.range = rangeAroundSelected(options.length, selected, config.maxRenderedOptions);\n this.dom = document.createElement(\"div\");\n this.dom.className = \"cm-tooltip-autocomplete\";\n this.updateTooltipClass(view.state);\n this.dom.addEventListener(\"mousedown\", (e) => {\n let { options } = view.state.field(stateField).open;\n for (let dom = e.target, match; dom && dom != this.dom; dom = dom.parentNode) {\n if (dom.nodeName == \"LI\" && (match = /-(\\d+)$/.exec(dom.id)) && +match[1] < options.length) {\n this.applyCompletion(view, options[+match[1]]);\n e.preventDefault();\n return;\n }\n }\n });\n this.dom.addEventListener(\"focusout\", (e) => {\n let state = view.state.field(this.stateField, false);\n if (state && state.tooltip && view.state.facet(completionConfig).closeOnBlur &&\n e.relatedTarget != view.contentDOM)\n view.dispatch({ effects: closeCompletionEffect.of(null) });\n });\n this.showOptions(options, cState.id);\n }\n mount() { this.updateSel(); }\n showOptions(options, id) {\n if (this.list)\n this.list.remove();\n this.list = this.dom.appendChild(this.createListBox(options, id, this.range));\n this.list.addEventListener(\"scroll\", () => {\n if (this.info)\n this.view.requestMeasure(this.placeInfoReq);\n });\n }\n update(update) {\n var _a;\n let cState = update.state.field(this.stateField);\n let prevState = update.startState.field(this.stateField);\n this.updateTooltipClass(update.state);\n if (cState != prevState) {\n let { options, selected, disabled } = cState.open;\n if (!prevState.open || prevState.open.options != options) {\n this.range = rangeAroundSelected(options.length, selected, update.state.facet(completionConfig).maxRenderedOptions);\n this.showOptions(options, cState.id);\n }\n this.updateSel();\n if (disabled != ((_a = prevState.open) === null || _a === void 0 ? void 0 : _a.disabled))\n this.dom.classList.toggle(\"cm-tooltip-autocomplete-disabled\", !!disabled);\n }\n }\n updateTooltipClass(state) {\n let cls = this.tooltipClass(state);\n if (cls != this.currentClass) {\n for (let c of this.currentClass.split(\" \"))\n if (c)\n this.dom.classList.remove(c);\n for (let c of cls.split(\" \"))\n if (c)\n this.dom.classList.add(c);\n this.currentClass = cls;\n }\n }\n positioned(space) {\n this.space = space;\n if (this.info)\n this.view.requestMeasure(this.placeInfoReq);\n }\n updateSel() {\n let cState = this.view.state.field(this.stateField), open = cState.open;\n if (open.selected > -1 && open.selected < this.range.from || open.selected >= this.range.to) {\n this.range = rangeAroundSelected(open.options.length, open.selected, this.view.state.facet(completionConfig).maxRenderedOptions);\n this.showOptions(open.options, cState.id);\n }\n if (this.updateSelectedOption(open.selected)) {\n this.destroyInfo();\n let { completion } = open.options[open.selected];\n let { info } = completion;\n if (!info)\n return;\n let infoResult = typeof info === \"string\" ? document.createTextNode(info) : info(completion);\n if (!infoResult)\n return;\n if (\"then\" in infoResult) {\n infoResult.then(obj => {\n if (obj && this.view.state.field(this.stateField, false) == cState)\n this.addInfoPane(obj, completion);\n }).catch(e => logException(this.view.state, e, \"completion info\"));\n }\n else {\n this.addInfoPane(infoResult, completion);\n }\n }\n }\n addInfoPane(content, completion) {\n this.destroyInfo();\n let wrap = this.info = document.createElement(\"div\");\n wrap.className = \"cm-tooltip cm-completionInfo\";\n if (content.nodeType != null) {\n wrap.appendChild(content);\n this.infoDestroy = null;\n }\n else {\n let { dom, destroy } = content;\n wrap.appendChild(dom);\n this.infoDestroy = destroy || null;\n }\n this.dom.appendChild(wrap);\n this.view.requestMeasure(this.placeInfoReq);\n }\n updateSelectedOption(selected) {\n let set = null;\n for (let opt = this.list.firstChild, i = this.range.from; opt; opt = opt.nextSibling, i++) {\n if (opt.nodeName != \"LI\" || !opt.id) {\n i--; // A section header\n }\n else if (i == selected) {\n if (!opt.hasAttribute(\"aria-selected\")) {\n opt.setAttribute(\"aria-selected\", \"true\");\n set = opt;\n }\n }\n else {\n if (opt.hasAttribute(\"aria-selected\"))\n opt.removeAttribute(\"aria-selected\");\n }\n }\n if (set)\n scrollIntoView(this.list, set);\n return set;\n }\n measureInfo() {\n let sel = this.dom.querySelector(\"[aria-selected]\");\n if (!sel || !this.info)\n return null;\n let listRect = this.dom.getBoundingClientRect();\n let infoRect = this.info.getBoundingClientRect();\n let selRect = sel.getBoundingClientRect();\n let space = this.space;\n if (!space) {\n let win = this.dom.ownerDocument.defaultView || window;\n space = { left: 0, top: 0, right: win.innerWidth, bottom: win.innerHeight };\n }\n if (selRect.top > Math.min(space.bottom, listRect.bottom) - 10 ||\n selRect.bottom < Math.max(space.top, listRect.top) + 10)\n return null;\n return this.view.state.facet(completionConfig).positionInfo(this.view, listRect, selRect, infoRect, space, this.dom);\n }\n placeInfo(pos) {\n if (this.info) {\n if (pos) {\n if (pos.style)\n this.info.style.cssText = pos.style;\n this.info.className = \"cm-tooltip cm-completionInfo \" + (pos.class || \"\");\n }\n else {\n this.info.style.cssText = \"top: -1e6px\";\n }\n }\n }\n createListBox(options, id, range) {\n const ul = document.createElement(\"ul\");\n ul.id = id;\n ul.setAttribute(\"role\", \"listbox\");\n ul.setAttribute(\"aria-expanded\", \"true\");\n ul.setAttribute(\"aria-label\", this.view.state.phrase(\"Completions\"));\n let curSection = null;\n for (let i = range.from; i < range.to; i++) {\n let { completion, match } = options[i], { section } = completion;\n if (section) {\n let name = typeof section == \"string\" ? section : section.name;\n if (name != curSection && (i > range.from || range.from == 0)) {\n curSection = name;\n if (typeof section != \"string\" && section.header) {\n ul.appendChild(section.header(section));\n }\n else {\n let header = ul.appendChild(document.createElement(\"completion-section\"));\n header.textContent = name;\n }\n }\n }\n const li = ul.appendChild(document.createElement(\"li\"));\n li.id = id + \"-\" + i;\n li.setAttribute(\"role\", \"option\");\n let cls = this.optionClass(completion);\n if (cls)\n li.className = cls;\n for (let source of this.optionContent) {\n let node = source(completion, this.view.state, this.view, match);\n if (node)\n li.appendChild(node);\n }\n }\n if (range.from)\n ul.classList.add(\"cm-completionListIncompleteTop\");\n if (range.to < options.length)\n ul.classList.add(\"cm-completionListIncompleteBottom\");\n return ul;\n }\n destroyInfo() {\n if (this.info) {\n if (this.infoDestroy)\n this.infoDestroy();\n this.info.remove();\n this.info = null;\n }\n }\n destroy() {\n this.destroyInfo();\n }\n}\nfunction completionTooltip(stateField, applyCompletion) {\n return (view) => new CompletionTooltip(view, stateField, applyCompletion);\n}\nfunction scrollIntoView(container, element) {\n let parent = container.getBoundingClientRect();\n let self = element.getBoundingClientRect();\n let scaleY = parent.height / container.offsetHeight;\n if (self.top < parent.top)\n container.scrollTop -= (parent.top - self.top) / scaleY;\n else if (self.bottom > parent.bottom)\n container.scrollTop += (self.bottom - parent.bottom) / scaleY;\n}\n\n// Used to pick a preferred option when two options with the same\n// label occur in the result.\nfunction score(option) {\n return (option.boost || 0) * 100 + (option.apply ? 10 : 0) + (option.info ? 5 : 0) +\n (option.type ? 1 : 0);\n}\nfunction sortOptions(active, state) {\n let options = [];\n let sections = null;\n let addOption = (option) => {\n options.push(option);\n let { section } = option.completion;\n if (section) {\n if (!sections)\n sections = [];\n let name = typeof section == \"string\" ? section : section.name;\n if (!sections.some(s => s.name == name))\n sections.push(typeof section == \"string\" ? { name } : section);\n }\n };\n let conf = state.facet(completionConfig);\n for (let a of active)\n if (a.hasResult()) {\n let getMatch = a.result.getMatch;\n if (a.result.filter === false) {\n for (let option of a.result.options) {\n addOption(new Option(option, a.source, getMatch ? getMatch(option) : [], 1e9 - options.length));\n }\n }\n else {\n let pattern = state.sliceDoc(a.from, a.to), match;\n let matcher = conf.filterStrict ? new StrictMatcher(pattern) : new FuzzyMatcher(pattern);\n for (let option of a.result.options)\n if (match = matcher.match(option.label)) {\n let matched = !option.displayLabel ? match.matched : getMatch ? getMatch(option, match.matched) : [];\n addOption(new Option(option, a.source, matched, match.score + (option.boost || 0)));\n }\n }\n }\n if (sections) {\n let sectionOrder = Object.create(null), pos = 0;\n let cmp = (a, b) => { var _a, _b; return ((_a = a.rank) !== null && _a !== void 0 ? _a : 1e9) - ((_b = b.rank) !== null && _b !== void 0 ? _b : 1e9) || (a.name < b.name ? -1 : 1); };\n for (let s of sections.sort(cmp)) {\n pos -= 1e5;\n sectionOrder[s.name] = pos;\n }\n for (let option of options) {\n let { section } = option.completion;\n if (section)\n option.score += sectionOrder[typeof section == \"string\" ? section : section.name];\n }\n }\n let result = [], prev = null;\n let compare = conf.compareCompletions;\n for (let opt of options.sort((a, b) => (b.score - a.score) || compare(a.completion, b.completion))) {\n let cur = opt.completion;\n if (!prev || prev.label != cur.label || prev.detail != cur.detail ||\n (prev.type != null && cur.type != null && prev.type != cur.type) ||\n prev.apply != cur.apply || prev.boost != cur.boost)\n result.push(opt);\n else if (score(opt.completion) > score(prev))\n result[result.length - 1] = opt;\n prev = opt.completion;\n }\n return result;\n}\nclass CompletionDialog {\n constructor(options, attrs, tooltip, timestamp, selected, disabled) {\n this.options = options;\n this.attrs = attrs;\n this.tooltip = tooltip;\n this.timestamp = timestamp;\n this.selected = selected;\n this.disabled = disabled;\n }\n setSelected(selected, id) {\n return selected == this.selected || selected >= this.options.length ? this\n : new CompletionDialog(this.options, makeAttrs(id, selected), this.tooltip, this.timestamp, selected, this.disabled);\n }\n static build(active, state, id, prev, conf, 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, Object.assign(Object.assign({}, 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(Object.assign(Object.assign({}, insertCompletionText(view.state, apply, result.from, result.to)), { annotations: pickedCompletion.of(option.completion) }));\n else\n apply(view, option.completion, result.from, result.to);\n return true;\n}\nconst createTooltip = /*@__PURE__*/completionTooltip(completionState, applyCompletion);\n\n/**\nReturns a command that moves the completion selection forward or\nbackward by the given amount.\n*/\nfunction moveCompletionSelection(forward, by = \"option\") {\n return (view) => {\n let cState = view.state.field(completionState, false);\n if (!cState || !cState.open || cState.open.disabled ||\n Date.now() - cState.open.timestamp < view.state.facet(completionConfig).interactionDelay)\n return false;\n let step = 1, tooltip;\n if (by == \"page\" && (tooltip = getTooltip(view, cState.open.tooltip)))\n step = Math.max(2, Math.floor(tooltip.dom.offsetHeight /\n tooltip.dom.querySelector(\"li\").offsetHeight) - 1);\n let { length } = cState.open.options;\n let selected = cState.open.selected > -1 ? cState.open.selected + step * (forward ? 1 : -1) : forward ? 0 : length - 1;\n if (selected < 0)\n selected = by == \"page\" ? 0 : length - 1;\n else if (selected >= length)\n selected = by == \"page\" ? length - 1 : 0;\n view.dispatch({ effects: setSelectedEffect.of(selected) });\n return true;\n };\n}\n/**\nAccept the current completion.\n*/\nconst acceptCompletion = (view) => {\n let cState = view.state.field(completionState, false);\n if (view.state.readOnly || !cState || !cState.open || cState.open.selected < 0 || cState.open.disabled ||\n Date.now() - cState.open.timestamp < view.state.facet(completionConfig).interactionDelay)\n return false;\n return applyCompletion(view, cState.open.options[cState.open.selected]);\n};\n/**\nExplicitly start autocompletion.\n*/\nconst startCompletion = (view) => {\n let cState = view.state.field(completionState, false);\n if (!cState)\n return false;\n view.dispatch({ effects: startCompletionEffect.of(true) });\n return true;\n};\n/**\nClose the currently active completion.\n*/\nconst closeCompletion = (view) => {\n let cState = view.state.field(completionState, false);\n if (!cState || !cState.active.some(a => a.state != 0 /* State.Inactive */))\n return false;\n view.dispatch({ effects: closeCompletionEffect.of(null) });\n return true;\n};\nclass RunningQuery {\n constructor(active, context) {\n this.active = active;\n this.context = context;\n this.time = Date.now();\n this.updates = [];\n // Note that 'undefined' means 'not done yet', whereas 'null' means\n // 'query returned null'.\n this.done = undefined;\n }\n}\nconst MaxUpdateCount = 50, MinAbortTime = 1000;\nconst completionPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n constructor(view) {\n this.view = view;\n this.debounceUpdate = -1;\n this.running = [];\n this.debounceAccept = -1;\n this.pendingStart = false;\n this.composing = 0 /* CompositionState.None */;\n for (let active of view.state.field(completionState).active)\n if (active.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 positions.push(new FieldPos(found, lines.length, m.index, m.index + name.length));\n line = line.slice(0, m.index) + rawName + line.slice(m.index + m[0].length);\n }\n line = line.replace(/\\\\([{}])/g, (_, brace, index) => {\n for (let pos of positions)\n if (pos.line == lines.length && pos.from > index) {\n pos.from--;\n pos.to--;\n }\n return brace;\n });\n lines.push(line);\n }\n return new Snippet(lines, positions);\n }\n}\nlet fieldMarker = /*@__PURE__*/Decoration.widget({ widget: /*@__PURE__*/new class extends WidgetType {\n toDOM() {\n let span = document.createElement(\"span\");\n span.className = \"cm-snippetFieldPosition\";\n return span;\n }\n ignoreEvent() { return false; }\n } });\nlet fieldRange = /*@__PURE__*/Decoration.mark({ class: \"cm-snippetField\" });\nclass ActiveSnippet {\n constructor(ranges, active) {\n this.ranges = ranges;\n this.active = active;\n this.deco = Decoration.set(ranges.map(r => (r.from == r.to ? fieldMarker : fieldRange).range(r.from, r.to)));\n }\n map(changes) {\n let ranges = [];\n for (let r of this.ranges) {\n let mapped = r.map(changes);\n if (!mapped)\n return null;\n ranges.push(mapped);\n }\n return new ActiveSnippet(ranges, this.active);\n }\n selectionInsideField(sel) {\n return sel.ranges.every(range => this.ranges.some(r => r.field == this.active && r.from <= range.from && r.to >= range.to));\n }\n}\nconst setActive = /*@__PURE__*/StateEffect.define({\n map(value, changes) { return value && value.map(changes); }\n});\nconst moveToField = /*@__PURE__*/StateEffect.define();\nconst snippetState = /*@__PURE__*/StateField.define({\n create() { return null; },\n update(value, tr) {\n for (let effect of tr.effects) {\n if (effect.is(setActive))\n return effect.value;\n if (effect.is(moveToField) && value)\n return new ActiveSnippet(value.ranges, effect.value);\n }\n if (value && tr.docChanged)\n value = value.map(tr.changes);\n if (value && tr.selection && !value.selectionInsideField(tr.selection))\n value = null;\n return value;\n },\n provide: f => EditorView.decorations.from(f, val => val ? val.deco : Decoration.none)\n});\nfunction fieldSelection(ranges, field) {\n return EditorSelection.create(ranges.filter(r => r.field == field).map(r => EditorSelection.range(r.from, r.to)));\n}\n/**\nConvert a snippet template to a function that can\n[apply](https://codemirror.net/6/docs/ref/#autocomplete.Completion.apply) it. Snippets are written\nusing syntax like this:\n\n \"for (let ${index} = 0; ${index} < ${end}; ${index}++) {\\n\\t${}\\n}\"\n\nEach `${}` placeholder (you may also use `#{}`) indicates a field\nthat the user can fill in. Its name, if any, will be the default\ncontent for the field.\n\nWhen the snippet is activated by calling the returned function,\nthe code is inserted at the given position. Newlines in the\ntemplate are indented by the indentation of the start line, plus\none [indent unit](https://codemirror.net/6/docs/ref/#language.indentUnit) per tab character after\nthe newline.\n\nOn activation, (all instances of) the first field are selected.\nThe user can move between fields with Tab and Shift-Tab as long as\nthe fields are active. Moving to the last field or moving the\ncursor out of the current field deactivates the fields.\n\nThe order of fields defaults to textual order, but you can add\nnumbers to placeholders (`${1}` or `${1:defaultText}`) to provide\na custom order.\n\nTo include a literal `{` or `}` in your template, put a backslash\nin front of it. This will be removed and the brace will not be\ninterpreted as indicating a placeholder.\n*/\nfunction snippet(template) {\n let snippet = Snippet.parse(template);\n return (editor, completion, from, to) => {\n let { text, ranges } = snippet.instantiate(editor.state, from);\n let { 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 Object.assign(Object.assign({}, completion), { apply: snippet(template) });\n}\nconst snippetPointerHandler = /*@__PURE__*/EditorView.domEventHandlers({\n mousedown(event, view) {\n let active = view.state.field(snippetState, false), pos;\n if (!active || (pos = view.posAtCoords({ x: event.clientX, y: event.clientY })) == null)\n return false;\n let match = active.ranges.find(r => r.from <= pos && r.to >= pos);\n if (!match || match.field == active.active)\n return false;\n view.dispatch({\n selection: fieldSelection(active.ranges, match.field),\n effects: setActive.of(active.ranges.some(r => r.field > match.field)\n ? new ActiveSnippet(active.ranges, match.field) : null),\n scrollIntoView: true\n });\n return true;\n }\n});\n\nfunction wordRE(wordChars) {\n let escaped = wordChars.replace(/[\\]\\-\\\\]/g, \"\\\\$&\");\n try {\n return new RegExp(`[\\\\p{Alphabetic}\\\\p{Number}_${escaped}]+`, \"ug\");\n }\n catch (_a) {\n return new RegExp(`[\\w${escaped}]`, \"g\");\n }\n}\nfunction mapRE(re, f) {\n return new RegExp(f(re.source), re.unicode ? \"u\" : \"\");\n}\nconst wordCaches = /*@__PURE__*/Object.create(null);\nfunction wordCache(wordChars) {\n return wordCaches[wordChars] || (wordCaches[wordChars] = new WeakMap);\n}\nfunction storeWords(doc, wordRE, result, seen, ignoreAt) {\n for (let lines = doc.iterLines(), pos = 0; !lines.next().done;) {\n let { value } = lines, m;\n wordRE.lastIndex = 0;\n while (m = wordRE.exec(value)) {\n if (!seen[m[0]] && pos + m.index != ignoreAt) {\n result.push({ type: \"text\", label: m[0] });\n seen[m[0]] = true;\n if (result.length >= 2000 /* C.MaxList */)\n return;\n }\n }\n pos += value.length + 1;\n }\n}\nfunction collectWords(doc, cache, wordRE, to, ignoreAt) {\n let big = doc.length >= 1000 /* C.MinCacheLen */;\n let cached = big && cache.get(doc);\n if (cached)\n return cached;\n let result = [], seen = Object.create(null);\n if (doc.children) {\n let pos = 0;\n for (let ch of doc.children) {\n if (ch.length >= 1000 /* C.MinCacheLen */) {\n for (let c of collectWords(ch, cache, wordRE, to - pos, ignoreAt - pos)) {\n if (!seen[c.label]) {\n seen[c.label] = true;\n result.push(c);\n }\n }\n }\n else {\n storeWords(ch, wordRE, result, seen, ignoreAt - pos);\n }\n pos += ch.length + 1;\n }\n }\n else {\n storeWords(doc, wordRE, result, seen, ignoreAt);\n }\n if (big && result.length < 2000 /* C.MaxList */)\n cache.set(doc, result);\n return result;\n}\n/**\nA completion source that will scan the document for words (using a\n[character categorizer](https://codemirror.net/6/docs/ref/#state.EditorState.charCategorizer)), and\nreturn those as completions.\n*/\nconst completeAnyWord = context => {\n let wordChars = context.state.languageDataAt(\"wordChars\", context.pos).join(\"\");\n let re = wordRE(wordChars);\n let token = context.matchBefore(mapRE(re, s => s + \"$\"));\n if (!token && !context.explicit)\n return null;\n let from = token ? token.from : context.pos;\n let options = collectWords(context.state.doc, wordCache(wordChars), re, 50000 /* C.Range */, from);\n return { from, options, validFor: mapRE(re, s => \"^\" + s) };\n};\n\nconst defaults = {\n brackets: [\"(\", \"[\", \"{\", \"'\", '\"'],\n before: \")]}:;>\",\n stringPrefixes: []\n};\nconst closeBracketEffect = /*@__PURE__*/StateEffect.define({\n map(value, mapping) {\n let mapped = mapping.mapPos(value, -1, MapMode.TrackAfter);\n return mapped == null ? undefined : mapped;\n }\n});\nconst closedBracket = /*@__PURE__*/new class extends RangeValue {\n};\nclosedBracket.startSide = 1;\nclosedBracket.endSide = -1;\nconst bracketState = /*@__PURE__*/StateField.define({\n create() { return RangeSet.empty; },\n update(value, tr) {\n value = value.map(tr.changes);\n if (tr.selection) {\n let line = tr.state.doc.lineAt(tr.selection.main.head);\n value = value.update({ filter: from => from >= line.from && from <= line.to });\n }\n for (let effect of tr.effects)\n if (effect.is(closeBracketEffect))\n value = value.update({ add: [closedBracket.range(effect.value, effect.value + 1)] });\n return value;\n }\n});\n/**\nExtension to enable bracket-closing behavior. When a closeable\nbracket is typed, its closing bracket is immediately inserted\nafter the cursor. When closing a bracket directly in front of a\nclosing bracket inserted by the extension, the cursor moves over\nthat bracket.\n*/\nfunction closeBrackets() {\n return [inputHandler, bracketState];\n}\nconst definedClosing = \"()[]{}<>\";\nfunction closing(ch) {\n for (let i = 0; i < definedClosing.length; i += 2)\n if (definedClosing.charCodeAt(i) == ch)\n return definedClosing.charAt(i + 1);\n return fromCodePoint(ch < 128 ? ch : ch + 1);\n}\nfunction config(state, pos) {\n return state.languageDataAt(\"closeBrackets\", pos)[0] || defaults;\n}\nconst android = typeof navigator == \"object\" && /*@__PURE__*//Android\\b/.test(navigator.userAgent);\nconst inputHandler = /*@__PURE__*/EditorView.inputHandler.of((view, from, to, insert) => {\n if ((android ? view.composing : view.compositionStarted) || view.state.readOnly)\n return false;\n let sel = view.state.selection.main;\n if (insert.length > 2 || insert.length == 2 && codePointSize(codePointAt(insert, 0)) == 1 ||\n from != sel.from || to != sel.to)\n return false;\n let tr = insertBracket(view.state, insert);\n if (!tr)\n return false;\n view.dispatch(tr);\n return true;\n});\n/**\nCommand that implements deleting a pair of matching brackets when\nthe cursor is between them.\n*/\nconst deleteBracketPair = ({ state, dispatch }) => {\n if (state.readOnly)\n return false;\n let conf = config(state, state.selection.main.head);\n let tokens = conf.brackets || defaults.brackets;\n let dont = null, changes = state.changeByRange(range => {\n if (range.empty) {\n let before = prevChar(state.doc, range.head);\n for (let token of tokens) {\n if (token == before && nextChar(state.doc, range.head) == closing(codePointAt(token, 0)))\n return { changes: { from: range.head - token.length, to: range.head + token.length },\n range: EditorSelection.cursor(range.head - token.length) };\n }\n }\n return { range: dont = range };\n });\n if (!dont)\n dispatch(state.update(changes, { scrollIntoView: true, userEvent: \"delete.backward\" }));\n return !dont;\n};\n/**\nClose-brackets related key bindings. Binds Backspace to\n[`deleteBracketPair`](https://codemirror.net/6/docs/ref/#autocomplete.deleteBracketPair).\n*/\nconst closeBracketsKeymap = [\n { key: \"Backspace\", run: deleteBracketPair }\n];\n/**\nImplements the extension's behavior on text insertion. If the\ngiven string counts as a bracket in the language around the\nselection, and replacing the selection with it requires custom\nbehavior (inserting a closing version or skipping past a\npreviously-closed bracket), this function returns a transaction\nrepresenting that custom behavior. (You only need this if you want\nto programmatically insert brackets—the\n[`closeBrackets`](https://codemirror.net/6/docs/ref/#autocomplete.closeBrackets) extension will\ntake care of running this for user input.)\n*/\nfunction insertBracket(state, bracket) {\n let conf = config(state, state.selection.main.head);\n let tokens = conf.brackets || defaults.brackets;\n for (let tok of tokens) {\n let closed = closing(codePointAt(tok, 0));\n if (bracket == tok)\n return closed == tok ? handleSame(state, tok, tokens.indexOf(tok + tok + tok) > -1, conf)\n : handleOpen(state, tok, closed, conf.before || defaults.before);\n if (bracket == closed && closedBracketAt(state, state.selection.main.from))\n return handleClose(state, tok, closed);\n }\n return null;\n}\nfunction closedBracketAt(state, pos) {\n let found = false;\n state.field(bracketState).between(0, state.doc.length, from => {\n if (from == pos)\n found = true;\n });\n return found;\n}\nfunction nextChar(doc, pos) {\n let next = doc.sliceString(pos, pos + 2);\n return next.slice(0, codePointSize(codePointAt(next, 0)));\n}\nfunction prevChar(doc, pos) {\n let prev = doc.sliceString(pos - 2, pos);\n return codePointSize(codePointAt(prev, 0)) == prev.length ? prev : prev.slice(1);\n}\nfunction handleOpen(state, open, close, closeBefore) {\n let dont = null, changes = state.changeByRange(range => {\n if (!range.empty)\n return { changes: [{ insert: open, from: range.from }, { insert: close, from: range.to }],\n effects: closeBracketEffect.of(range.to + open.length),\n range: EditorSelection.range(range.anchor + open.length, range.head + open.length) };\n let next = nextChar(state.doc, range.head);\n if (!next || /\\s/.test(next) || closeBefore.indexOf(next) > -1)\n return { changes: { insert: open + close, from: range.head },\n effects: closeBracketEffect.of(range.head + open.length),\n range: EditorSelection.cursor(range.head + open.length) };\n return { range: dont = range };\n });\n return dont ? null : state.update(changes, {\n scrollIntoView: true,\n userEvent: \"input.type\"\n });\n}\nfunction handleClose(state, _open, close) {\n let dont = null, changes = state.changeByRange(range => {\n if (range.empty && nextChar(state.doc, range.head) == close)\n return { changes: { from: range.head, to: range.head + close.length, insert: close },\n range: EditorSelection.cursor(range.head + close.length) };\n return dont = { range };\n });\n return dont ? null : state.update(changes, {\n scrollIntoView: true,\n userEvent: \"input.type\"\n });\n}\n// Handles cases where the open and close token are the same, and\n// possibly triple quotes (as in `\"\"\"abc\"\"\"`-style quoting).\nfunction handleSame(state, token, allowTriple, config) {\n let stringPrefixes = config.stringPrefixes || defaults.stringPrefixes;\n let dont = null, changes = state.changeByRange(range => {\n if (!range.empty)\n return { changes: [{ insert: token, from: range.from }, { insert: token, from: range.to }],\n effects: closeBracketEffect.of(range.to + token.length),\n range: EditorSelection.range(range.anchor + token.length, range.head + token.length) };\n let pos = range.head, next = nextChar(state.doc, pos), start;\n if (next == token) {\n if (nodeStart(state, pos)) {\n return { changes: { insert: token + token, from: pos },\n effects: closeBracketEffect.of(pos + token.length),\n range: EditorSelection.cursor(pos + token.length) };\n }\n else if (closedBracketAt(state, pos)) {\n let isTriple = allowTriple && state.sliceDoc(pos, pos + token.length * 3) == token + token + token;\n let content = isTriple ? token + token + token : token;\n return { changes: { from: pos, to: pos + content.length, insert: content },\n range: EditorSelection.cursor(pos + content.length) };\n }\n }\n else if (allowTriple && state.sliceDoc(pos - 2 * token.length, pos) == token + token &&\n (start = canStartStringAt(state, pos - 2 * token.length, stringPrefixes)) > -1 &&\n nodeStart(state, start)) {\n return { changes: { insert: token + token + token + token, from: pos },\n effects: closeBracketEffect.of(pos + token.length),\n range: EditorSelection.cursor(pos + token.length) };\n }\n else if (state.charCategorizer(pos)(next) != CharCategory.Word) {\n if (canStartStringAt(state, pos, stringPrefixes) > -1 && !probablyInString(state, pos, token, stringPrefixes))\n return { changes: { insert: token + token, from: pos },\n effects: closeBracketEffect.of(pos + token.length),\n range: EditorSelection.cursor(pos + token.length) };\n }\n return { range: dont = range };\n });\n return dont ? null : state.update(changes, {\n scrollIntoView: true,\n userEvent: \"input.type\"\n });\n}\nfunction nodeStart(state, pos) {\n let tree = syntaxTree(state).resolveInner(pos + 1);\n return tree.parent && tree.from == pos;\n}\nfunction probablyInString(state, pos, quoteToken, prefixes) {\n let node = syntaxTree(state).resolveInner(pos, -1);\n let maxPrefix = prefixes.reduce((m, p) => Math.max(m, p.length), 0);\n for (let i = 0; i < 5; i++) {\n let start = state.sliceDoc(node.from, Math.min(node.to, node.from + quoteToken.length + maxPrefix));\n let quotePos = start.indexOf(quoteToken);\n if (!quotePos || quotePos > -1 && prefixes.indexOf(start.slice(0, quotePos)) > -1) {\n let first = node.firstChild;\n while (first && first.from == node.from && first.to - first.from > quoteToken.length + quotePos) {\n if (state.sliceDoc(first.to - quoteToken.length, first.to) == quoteToken)\n return false;\n first = first.firstChild;\n }\n return true;\n }\n let parent = node.to == pos && node.parent;\n if (!parent)\n break;\n node = parent;\n }\n return false;\n}\nfunction canStartStringAt(state, pos, prefixes) {\n let charCat = state.charCategorizer(pos);\n if (charCat(state.sliceDoc(pos - 1, pos)) != CharCategory.Word)\n return pos;\n for (let prefix of prefixes) {\n let start = pos - prefix.length;\n if (state.sliceDoc(start, pos) == prefix && charCat(state.sliceDoc(start - 1, start)) != CharCategory.Word)\n return start;\n }\n return -1;\n}\n\n/**\nReturns an extension that enables autocompletion.\n*/\nfunction autocompletion(config = {}) {\n return [\n commitCharacters,\n completionState,\n completionConfig.of(config),\n completionPlugin,\n completionKeymapExt,\n baseTheme\n ];\n}\n/**\nBasic keybindings for autocompletion.\n\n - Ctrl-Space (and Alt-\\` 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 - PageDown: [`moveCompletionSelection`](https://codemirror.net/6/docs/ref/#autocomplete.moveCompletionSelection)`(true, \"page\")`\n - Enter: [`acceptCompletion`](https://codemirror.net/6/docs/ref/#autocomplete.acceptCompletion)\n*/\nconst completionKeymap = [\n { key: \"Ctrl-Space\", run: startCompletion },\n { mac: \"Alt-`\", 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","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","range","dom","updateTooltipClass","target","parentNode","nodeName","exec","id","preventDefault","relatedTarget","contentDOM","dispatch","effects","of","showOptions","mount","updateSel","remove","createListBox","requestMeasure","update","prevState","startState","disabled","toggle","positioned","updateSelectedOption","destroyInfo","infoResult","then","obj","addInfoPane","catch","logException","wrap","nodeType","destroy","opt","firstChild","nextSibling","hasAttribute","removeAttribute","container","element","getBoundingClientRect","self","scaleY","height","scrollTop","scrollIntoView","sel","querySelector","listRect","infoRect","selRect","win","ownerDocument","defaultView","window","innerWidth","innerHeight","cssText","ul","phrase","curSection","section","header","li","node","completionTooltip","boost","apply","CompletionDialog","attrs","timestamp","setSelected","makeAttrs","build","active","prev","conf","didSetActive","some","s","isPending","setDisabled","sections","addOption","hasResult","getMatch","filter","matcher","sectionOrder","cmp","_b","rank","compare","sortOptions","selectedValue","reduce","createTooltip","above","Date","now","changes","assign","mapPos","CompletionState","none","random","toString","tr","languageDataAt","find","ActiveSource","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","fromOff","toOff","changeByRange","lines","toText","insert","EditorSelection","cursor","userEvent","insertCompletionText","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","_","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
|
-
import{T as e,c as t,X as r,d as n,a as o,r as s,o as i,H as a,s as c}from"./core-DnOjzQS_.js";import{notify as l}from"./error-Dr1sICUr.js";let u=0;const d=e=>`${e}-editor-${u++}`,f=new Map,p=new Map,g=new WeakMap,m={worker:{codeBeforeRun:()=>c,onReady:({runAsync:e,io:t},{sync:r})=>{t.stdout=t.buffered(r.write),t.stderr=t.buffered(r.writeErr),r.revoke(),r.runAsync=e}}},v=(e,t)=>{if("boolean"==typeof t)throw`Invalid source: ${e}`;return t},h=(e,t)=>{const r=e.closest(`.${t}-editor-box`);return r?.parentNode?.previousElementSibling};async function y({currentTarget:t}){const{env:o,pySrc:c,outDiv:u}=this,d=!!t;if(d&&(t.classList.add("running"),u.innerHTML=""),!f.has(o)){const c=URL.createObjectURL(new Blob([""])),u={type:this.interpreter,serviceWorker:this.serviceWorker},{config:p}=this;if(p)try{if(u.configURL=s(p),p.endsWith(".toml")){const[{parse:e},t]=await Promise.all([import("./toml-BLBSZ43A.js"),fetch(p).then((e=>e.ok&&e.text()))]);u.config=e(v(p,t))}else if(p.endsWith(".json")){const e=await fetch(p).then((e=>e.ok&&e.json()));u.config=v(p,e)}else u.configURL=s("./config.txt"),u.config=JSON.parse(p);u.version=i(u.config)}catch(e){return void l(e)}else u.config={};const g=r.call(new a(null,m),c,u);if(d)for(const r of e.keys()){const e=h(t,r);if(e){n(e,{xworker:{value:g}});break}}const{sync:y}=g,{promise:b,resolve:w}=Promise.withResolvers();f.set(o,b),y.revoke=()=>{URL.revokeObjectURL(c),w(g)}}return f.get(o).then((e=>{e.onerror=({error:e})=>{d&&u.insertAdjacentHTML("beforeend",`<span style='color:red'>${e.message||e}</span>\n`),console.error(e)};const r=()=>{d&&t.classList.remove("running")},{sync:n}=e;n.write=e=>{d?u.innerText+=`${e}\n`:console.log(e)},n.writeErr=e=>{d?u.insertAdjacentHTML("beforeend",`<span style='color:red'>${e}</span>\n`):(l(e),console.error(e))},n.runAsync(c).then(r,r)}))}const b=(e,t)=>{const r=document.createElement("div");r.className=`${t}-editor-input`,r.setAttribute("aria-label","Python Script Area");const n=((e,t)=>{const r=document.createElement("button");return r.className=`absolute ${t}-editor-run-button`,r.innerHTML='<svg style="height:20px;width:20px;vertical-align:-.125em;transform-origin:center;overflow:visible;color:green" viewBox="0 0 384 512" aria-hidden="true" role="img" xmlns="http://www.w3.org/2000/svg"><g transform="translate(192 256)" transform-origin="96 0"><g transform="translate(0,0) scale(1,1)"><path d="M361 215C375.3 223.8 384 239.3 384 256C384 272.7 375.3 288.2 361 296.1L73.03 472.1C58.21 482 39.66 482.4 24.52 473.9C9.377 465.4 0 449.4 0 432V80C0 62.64 9.377 46.63 24.52 38.13C39.66 29.64 58.21 29.99 73.03 39.04L361 215z" fill="currentColor" transform="translate(-192 -256)"></path></g></g></svg>',r.setAttribute("aria-label","Python Script Run Button"),r.addEventListener("click",(async n=>{if(r.classList.contains("running")&&confirm("Would you like to kill this execution?")){const e=h(r,t);if(e){const r=g.get(e).state.doc.toString(),n=e.cloneNode(!0);n.type=`${t}-editor`,n.textContent=r,e.xworker.terminate(),e.nextElementSibling.remove(),e.replaceWith(n),g.delete(e)}}else r.blur(),await e.handleEvent(n)})),r})(e,t),o=document.createElement("div");return o.addEventListener("keydown",(e=>{e.stopPropagation()})),r.append(n,o),r},w=(e,t)=>{const r=document.createElement("div");r.className=`${t}-editor-box`;const n=b(e,t),o=(e=>{const t=document.createElement("div");return t.className=`${e}-editor-output`,t.id=`${d(e)}-output`,t})(t);return r.append(n,o),[r,o,n.querySelector("button")]},E=async(e,s,i)=>{const[{basicSetup:a,EditorView:c},{Compartment:u},{python:f},{indentUnit:m},{keymap:h},{defaultKeymap:b,indentWithTab:E}]=await Promise.all([t.core,t.state,t.python,t.language,t.view,t.commands]);let k=e.hasAttribute("setup");const x=e.hasAttribute("config"),$=e.getAttribute("service-worker"),A=`${i}-${e.getAttribute("env")||d(s)}`;if($&&(new r("data:application/javascript,postMessage(0)",{type:"dummy",serviceWorker:$}).onmessage=({target:e})=>e.terminate()),x&&p.has(A))throw new SyntaxError(p.get(A)?`duplicated config for env: ${A}`:`unable to add a config to the env: ${A}`);p.set(A,x);let L=e.textContent;const{src:S}=e;if(S)try{L=v(S,await fetch(S).then((e=>e.ok&&e.text())))}catch(e){return void l(e)}const C={handleEvent:y,serviceWorker:$,interpreter:i,env:A,config:x&&e.getAttribute("config"),get pySrc(){return k?L:D.state.doc.toString()},get outDiv(){return k?null:W}};let T;n(e,{target:{get:()=>T},handleEvent:{get:()=>C.handleEvent,set:e=>{C.handleEvent=e===y?y:async t=>{const{currentTarget:r}=t;n(t,{code:{value:C.pySrc}}),!1!==await e(t)&&await y.call(C,{currentTarget:r})}}},code:{get:()=>C.pySrc,set:e=>{k||D.update([D.state.update({changes:{from:0,to:D.state.doc.length,insert:e}})])}},process:{value(e,t=!1){if(t)return B();const r=k,n=L;k=!0,L=e;const o=()=>{k=r,L=n};return C.handleEvent({currentTarget:null}).then(o,o)}}});const M=()=>{const t=new Event(`${s}-editor`,{bubbles:!0});e.dispatchEvent(t)};if(k)return await C.handleEvent({currentTarget:null}),void M();const R=e.getAttribute("target");if(R){if(T=document.getElementById(R)||document.querySelector(R),!T)throw new Error(`Unknown target ${R}`)}else T=document.createElement(`${s}-editor`),T.style.display="block",e.after(T);T.id||(T.id=d(s)),T.hasAttribute("exec-id")||T.setAttribute("exec-id",0),T.hasAttribute("root")||T.setAttribute("root",T.id);const[j,W,U]=w(C,s);j.dataset.env=e.hasAttribute("env")?A:i;const N=j.querySelector(`.${s}-editor-input > div`).attachShadow({mode:"open"});N.innerHTML="<style> :host { all: initial; }</style>",T.appendChild(j);const P=o(e.textContent).trim(),H=/^([ \t]+)/m.test(P)?RegExp.$1:" ",B=()=>U.click(),D=new c({extensions:[m.of(H),(new u).of(f()),h.of([...b,{key:"Ctrl-Enter",run:B,preventDefault:!0},{key:"Cmd-Enter",run:B,preventDefault:!0},{key:"Shift-Enter",run:B,preventDefault:!0},E]),a],foldGutter:!0,gutters:["CodeMirror-linenumbers","CodeMirror-foldgutter"],parent:N,doc:P});g.set(e,D),D.focus(),M()};let k=0,x=Promise.resolve();const $=()=>{k=0,A()},A=()=>{if(!k){k=setTimeout($,250);for(const[t,r]of e){const e=`script[type="${t}-editor"]`;for(const n of document.querySelectorAll(e))n.type+="-active",x=x.then((()=>E(n,t,r)))}return x}};new MutationObserver(A).observe(document,{childList:!0,subtree:!0});var L=A();export{L as default};
|
2
|
-
//# sourceMappingURL=py-editor-CVOs6pzi.js.map
|
@@ -1 +0,0 @@
|
|
1
|
-
{"version":3,"file":"py-editor-CVOs6pzi.js","sources":["../src/plugins/py-editor.js"],"sourcesContent":["// PyScript py-editor plugin\nimport { Hook, XWorker, dedent, defineProperties } from \"polyscript/exports\";\nimport { TYPES, offline_interpreter, relative_url, stdlib } from \"../core.js\";\nimport { notify } from \"./error.js\";\nimport codemirror from \"./codemirror.js\";\n\nconst RUN_BUTTON = `<svg style=\"height:20px;width:20px;vertical-align:-.125em;transform-origin:center;overflow:visible;color:green\" viewBox=\"0 0 384 512\" aria-hidden=\"true\" role=\"img\" xmlns=\"http://www.w3.org/2000/svg\"><g transform=\"translate(192 256)\" transform-origin=\"96 0\"><g transform=\"translate(0,0) scale(1,1)\"><path d=\"M361 215C375.3 223.8 384 239.3 384 256C384 272.7 375.3 288.2 361 296.1L73.03 472.1C58.21 482 39.66 482.4 24.52 473.9C9.377 465.4 0 449.4 0 432V80C0 62.64 9.377 46.63 24.52 38.13C39.66 29.64 58.21 29.99 73.03 39.04L361 215z\" fill=\"currentColor\" transform=\"translate(-192 -256)\"></path></g></g></svg>`;\n\nlet id = 0;\nconst getID = (type) => `${type}-editor-${id++}`;\n\nconst envs = new Map();\nconst configs = new Map();\nconst editors = new WeakMap();\n\nconst hooks = {\n worker: {\n codeBeforeRun: () => stdlib,\n // works on both Pyodide and MicroPython\n onReady: ({ runAsync, io }, { sync }) => {\n io.stdout = io.buffered(sync.write);\n io.stderr = io.buffered(sync.writeErr);\n sync.revoke();\n sync.runAsync = runAsync;\n },\n },\n};\n\nconst validate = (config, result) => {\n if (typeof result === \"boolean\") throw `Invalid source: ${config}`;\n return result;\n};\n\nconst getRelatedScript = (target, type) => {\n const editor = target.closest(`.${type}-editor-box`);\n return editor?.parentNode?.previousElementSibling;\n};\n\nasync function execute({ currentTarget }) {\n const { env, pySrc, outDiv } = this;\n const hasRunButton = !!currentTarget;\n\n if (hasRunButton) {\n currentTarget.classList.add(\"running\");\n outDiv.innerHTML = \"\";\n }\n\n if (!envs.has(env)) {\n const srcLink = URL.createObjectURL(new Blob([\"\"]));\n const details = {\n type: this.interpreter,\n serviceWorker: this.serviceWorker,\n };\n const { config } = this;\n if (config) {\n // verify that config can be parsed and used\n try {\n details.configURL = relative_url(config);\n if (config.endsWith(\".toml\")) {\n const [{ parse }, toml] = await Promise.all([\n import(\n /* webpackIgnore: true */ \"../3rd-party/toml.js\"\n ),\n fetch(config).then((r) => r.ok && r.text()),\n ]);\n details.config = parse(validate(config, toml));\n } else if (config.endsWith(\".json\")) {\n const json = await fetch(config).then(\n (r) => r.ok && r.json(),\n );\n details.config = validate(config, json);\n } else {\n details.configURL = relative_url(\"./config.txt\");\n details.config = JSON.parse(config);\n }\n details.version = offline_interpreter(details.config);\n } catch (error) {\n notify(error);\n return;\n }\n } else {\n details.config = {};\n }\n\n const xworker = XWorker.call(new Hook(null, hooks), srcLink, details);\n\n // expose xworker like in terminal or other workers to allow\n // creation and destruction of editors on the fly\n if (hasRunButton) {\n for (const type of TYPES.keys()) {\n const script = getRelatedScript(currentTarget, type);\n if (script) {\n defineProperties(script, { xworker: { value: xworker } });\n break;\n }\n }\n }\n\n const { sync } = xworker;\n const { promise, resolve } = Promise.withResolvers();\n envs.set(env, promise);\n sync.revoke = () => {\n URL.revokeObjectURL(srcLink);\n resolve(xworker);\n };\n }\n\n // wait for the env then set the target div\n // before executing the current code\n return envs.get(env).then((xworker) => {\n xworker.onerror = ({ error }) => {\n if (hasRunButton) {\n outDiv.insertAdjacentHTML(\n \"beforeend\",\n `<span style='color:red'>${\n error.message || error\n }</span>\\n`,\n );\n }\n console.error(error);\n };\n\n const enable = () => {\n if (hasRunButton) currentTarget.classList.remove(\"running\");\n };\n const { sync } = xworker;\n sync.write = (str) => {\n if (hasRunButton) outDiv.innerText += `${str}\\n`;\n else console.log(str);\n };\n sync.writeErr = (str) => {\n if (hasRunButton) {\n outDiv.insertAdjacentHTML(\n \"beforeend\",\n `<span style='color:red'>${str}</span>\\n`,\n );\n } else {\n notify(str);\n console.error(str);\n }\n };\n sync.runAsync(pySrc).then(enable, enable);\n });\n}\n\nconst makeRunButton = (handler, type) => {\n const runButton = document.createElement(\"button\");\n runButton.className = `absolute ${type}-editor-run-button`;\n runButton.innerHTML = RUN_BUTTON;\n runButton.setAttribute(\"aria-label\", \"Python Script Run Button\");\n runButton.addEventListener(\"click\", async (event) => {\n if (\n runButton.classList.contains(\"running\") &&\n confirm(\"Would you like to kill this execution?\")\n ) {\n const script = getRelatedScript(runButton, type);\n if (script) {\n const editor = editors.get(script);\n const content = editor.state.doc.toString();\n const clone = script.cloneNode(true);\n clone.type = `${type}-editor`;\n clone.textContent = content;\n script.xworker.terminate();\n script.nextElementSibling.remove();\n script.replaceWith(clone);\n editors.delete(script);\n }\n return;\n }\n runButton.blur();\n await handler.handleEvent(event);\n });\n return runButton;\n};\n\nconst makeEditorDiv = (handler, type) => {\n const editorDiv = document.createElement(\"div\");\n editorDiv.className = `${type}-editor-input`;\n editorDiv.setAttribute(\"aria-label\", \"Python Script Area\");\n\n const runButton = makeRunButton(handler, type);\n const editorShadowContainer = document.createElement(\"div\");\n\n // avoid outer elements intercepting key events (reveal as example)\n editorShadowContainer.addEventListener(\"keydown\", (event) => {\n event.stopPropagation();\n });\n\n editorDiv.append(runButton, editorShadowContainer);\n\n return editorDiv;\n};\n\nconst makeOutDiv = (type) => {\n const outDiv = document.createElement(\"div\");\n outDiv.className = `${type}-editor-output`;\n outDiv.id = `${getID(type)}-output`;\n return outDiv;\n};\n\nconst makeBoxDiv = (handler, type) => {\n const boxDiv = document.createElement(\"div\");\n boxDiv.className = `${type}-editor-box`;\n\n const editorDiv = makeEditorDiv(handler, type);\n const outDiv = makeOutDiv(type);\n boxDiv.append(editorDiv, outDiv);\n\n return [boxDiv, outDiv, editorDiv.querySelector(\"button\")];\n};\n\nconst init = async (script, type, interpreter) => {\n const [\n { basicSetup, EditorView },\n { Compartment },\n { python },\n { indentUnit },\n { keymap },\n { defaultKeymap, indentWithTab },\n ] = await Promise.all([\n codemirror.core,\n codemirror.state,\n codemirror.python,\n codemirror.language,\n codemirror.view,\n codemirror.commands,\n ]);\n\n let isSetup = script.hasAttribute(\"setup\");\n const hasConfig = script.hasAttribute(\"config\");\n const serviceWorker = script.getAttribute(\"service-worker\");\n const env = `${interpreter}-${script.getAttribute(\"env\") || getID(type)}`;\n\n // helps preventing too lazy ServiceWorker initialization on button run\n if (serviceWorker) {\n new XWorker(\"data:application/javascript,postMessage(0)\", {\n type: \"dummy\",\n serviceWorker,\n }).onmessage = ({ target }) => target.terminate();\n }\n\n if (hasConfig && configs.has(env)) {\n throw new SyntaxError(\n configs.get(env)\n ? `duplicated config for env: ${env}`\n : `unable to add a config to the env: ${env}`,\n );\n }\n\n configs.set(env, hasConfig);\n\n let source = script.textContent;\n\n // verify the src points to a valid file that can be parsed\n const { src } = script;\n if (src) {\n try {\n source = validate(\n src,\n await fetch(src).then((b) => b.ok && b.text()),\n );\n } catch (error) {\n notify(error);\n return;\n }\n }\n\n const context = {\n // allow the listener to be overridden at distance\n handleEvent: execute,\n serviceWorker,\n interpreter,\n env,\n config: hasConfig && script.getAttribute(\"config\"),\n get pySrc() {\n return isSetup ? source : editor.state.doc.toString();\n },\n get outDiv() {\n return isSetup ? null : outDiv;\n },\n };\n\n let target;\n defineProperties(script, {\n target: { get: () => target },\n handleEvent: {\n get: () => context.handleEvent,\n set: (callback) => {\n // do not bother with logic if it was set back as its original handler\n if (callback === execute) context.handleEvent = execute;\n // in every other case be sure that if the listener override returned\n // `false` nothing happens, otherwise keep doing what it always did\n else {\n context.handleEvent = async (event) => {\n // trap the currentTarget ASAP (if any)\n // otherwise it gets lost asynchronously\n const { currentTarget } = event;\n // augment a code snapshot before invoking the override\n defineProperties(event, {\n code: { value: context.pySrc },\n });\n // avoid executing the default handler if the override returned `false`\n if ((await callback(event)) !== false)\n await execute.call(context, { currentTarget });\n };\n }\n },\n },\n code: {\n get: () => context.pySrc,\n set: (insert) => {\n if (isSetup) return;\n editor.update([\n editor.state.update({\n changes: {\n from: 0,\n to: editor.state.doc.length,\n insert,\n },\n }),\n ]);\n },\n },\n process: {\n /**\n * Simulate a setup node overriding the source to evaluate.\n * @param {string} code the Python code to evaluate.\n * @param {boolean} asRunButtonAction invoke the `Run` button handler.\n * @returns {Promise<...>} fulfill once code has been evaluated.\n */\n value(code, asRunButtonAction = false) {\n if (asRunButtonAction) return listener();\n const wasSetup = isSetup;\n const wasSource = source;\n isSetup = true;\n source = code;\n const restore = () => {\n isSetup = wasSetup;\n source = wasSource;\n };\n return context\n .handleEvent({ currentTarget: null })\n .then(restore, restore);\n },\n },\n });\n\n const notifyEditor = () => {\n const event = new Event(`${type}-editor`, { bubbles: true });\n script.dispatchEvent(event);\n };\n\n if (isSetup) {\n await context.handleEvent({ currentTarget: null });\n notifyEditor();\n return;\n }\n\n const selector = script.getAttribute(\"target\");\n\n if (selector) {\n target =\n document.getElementById(selector) ||\n document.querySelector(selector);\n if (!target) throw new Error(`Unknown target ${selector}`);\n } else {\n target = document.createElement(`${type}-editor`);\n target.style.display = \"block\";\n script.after(target);\n }\n\n if (!target.id) target.id = getID(type);\n if (!target.hasAttribute(\"exec-id\")) target.setAttribute(\"exec-id\", 0);\n if (!target.hasAttribute(\"root\")) target.setAttribute(\"root\", target.id);\n\n // @see https://github.com/JeffersGlass/mkdocs-pyscript/blob/main/mkdocs_pyscript/js/makeblocks.js\n const [boxDiv, outDiv, runButton] = makeBoxDiv(context, type);\n boxDiv.dataset.env = script.hasAttribute(\"env\") ? env : interpreter;\n\n const inputChild = boxDiv.querySelector(`.${type}-editor-input > div`);\n const parent = inputChild.attachShadow({ mode: \"open\" });\n // avoid inheriting styles from the outer component\n parent.innerHTML = `<style> :host { all: initial; }</style>`;\n\n target.appendChild(boxDiv);\n\n const doc = dedent(script.textContent).trim();\n\n // preserve user indentation, if any\n const indentation = /^([ \\t]+)/m.test(doc) ? RegExp.$1 : \" \";\n\n const listener = () => runButton.click();\n const editor = new EditorView({\n extensions: [\n indentUnit.of(indentation),\n new Compartment().of(python()),\n keymap.of([\n ...defaultKeymap,\n { key: \"Ctrl-Enter\", run: listener, preventDefault: true },\n { key: \"Cmd-Enter\", run: listener, preventDefault: true },\n { key: \"Shift-Enter\", run: listener, preventDefault: true },\n // @see https://codemirror.net/examples/tab/\n indentWithTab,\n ]),\n basicSetup,\n ],\n foldGutter: true,\n gutters: [\"CodeMirror-linenumbers\", \"CodeMirror-foldgutter\"],\n parent,\n doc,\n });\n\n editors.set(script, editor);\n editor.focus();\n notifyEditor();\n};\n\n// avoid too greedy MutationObserver operations at distance\nlet timeout = 0;\n\n// avoid delayed initialization\nlet queue = Promise.resolve();\n\n// reset interval value then check for new scripts\nconst resetTimeout = () => {\n timeout = 0;\n pyEditor();\n};\n\n// triggered both ASAP on the living DOM and via MutationObserver later\nconst pyEditor = () => {\n if (timeout) return;\n timeout = setTimeout(resetTimeout, 250);\n for (const [type, interpreter] of TYPES) {\n const selector = `script[type=\"${type}-editor\"]`;\n for (const script of document.querySelectorAll(selector)) {\n // avoid any further bootstrap by changing the type as active\n script.type += \"-active\";\n // don't await in here or multiple calls might happen\n // while the first script is being initialized\n queue = queue.then(() => init(script, type, interpreter));\n }\n }\n return queue;\n};\n\nnew MutationObserver(pyEditor).observe(document, {\n childList: true,\n subtree: true,\n});\n\n// try to check the current document ASAP\nexport default pyEditor();\n"],"names":["id","getID","type","envs","Map","configs","editors","WeakMap","hooks","worker","codeBeforeRun","stdlib","onReady","runAsync","io","sync","stdout","buffered","write","stderr","writeErr","revoke","validate","config","result","getRelatedScript","target","editor","closest","parentNode","previousElementSibling","async","execute","currentTarget","env","pySrc","outDiv","this","hasRunButton","classList","add","innerHTML","has","srcLink","URL","createObjectURL","Blob","details","interpreter","serviceWorker","configURL","relative_url","endsWith","parse","toml","Promise","all","import","fetch","then","r","ok","text","json","JSON","version","offline_interpreter","error","notify","xworker","XWorker","call","Hook","TYPES","keys","script","defineProperties","value","promise","resolve","withResolvers","set","revokeObjectURL","get","onerror","insertAdjacentHTML","message","console","enable","remove","str","innerText","log","makeEditorDiv","handler","editorDiv","document","createElement","className","setAttribute","runButton","addEventListener","event","contains","confirm","content","state","doc","toString","clone","cloneNode","textContent","terminate","nextElementSibling","replaceWith","delete","blur","handleEvent","makeRunButton","editorShadowContainer","stopPropagation","append","makeBoxDiv","boxDiv","makeOutDiv","querySelector","init","basicSetup","EditorView","Compartment","python","indentUnit","keymap","defaultKeymap","indentWithTab","codemirror","core","language","view","commands","isSetup","hasAttribute","hasConfig","getAttribute","onmessage","SyntaxError","source","src","b","context","callback","code","insert","update","changes","from","to","length","process","asRunButtonAction","listener","wasSetup","wasSource","restore","notifyEditor","Event","bubbles","dispatchEvent","selector","getElementById","Error","style","display","after","dataset","parent","attachShadow","mode","appendChild","dedent","trim","indentation","test","RegExp","$1","click","extensions","of","key","run","preventDefault","foldGutter","gutters","focus","timeout","queue","resetTimeout","pyEditor","setTimeout","querySelectorAll","MutationObserver","observe","childList","subtree","pyEditor$1"],"mappings":"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"}
|