@pyscript/core 0.7.28 → 0.7.30

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (89) hide show
  1. package/dist/codemirror-BDx3jn9j.js +2 -0
  2. package/dist/codemirror-BDx3jn9j.js.map +1 -0
  3. package/dist/codemirror_commands-JTJPAaAA.js +2 -0
  4. package/dist/codemirror_commands-JTJPAaAA.js.map +1 -0
  5. package/dist/codemirror_lang-python-r-dBg-Wd.js +2 -0
  6. package/dist/codemirror_lang-python-r-dBg-Wd.js.map +1 -0
  7. package/dist/codemirror_language-BeYrpeur.js +2 -0
  8. package/dist/codemirror_language-BeYrpeur.js.map +1 -0
  9. package/dist/codemirror_state-DxSVIxgn.js +2 -0
  10. package/dist/codemirror_state-DxSVIxgn.js.map +1 -0
  11. package/dist/codemirror_view-BsXnWedx.js +2 -0
  12. package/dist/codemirror_view-BsXnWedx.js.map +1 -0
  13. package/dist/core-Ze80f4LS.js +4 -0
  14. package/dist/core-Ze80f4LS.js.map +1 -0
  15. package/dist/core.js +1 -1
  16. package/dist/{deprecations-manager-kmj_AGsV.js → deprecations-manager-BKMZjhaL.js} +2 -2
  17. package/dist/{deprecations-manager-kmj_AGsV.js.map → deprecations-manager-BKMZjhaL.js.map} +1 -1
  18. package/dist/{donkey-CKcbaOhQ.js → donkey-C_Uxdfr8.js} +2 -2
  19. package/dist/{donkey-CKcbaOhQ.js.map → donkey-C_Uxdfr8.js.map} +1 -1
  20. package/dist/{error-DN097_kl.js → error-BQWK5Wkw.js} +2 -2
  21. package/dist/{error-DN097_kl.js.map → error-BQWK5Wkw.js.map} +1 -1
  22. package/dist/index-CSo4Vcso.js +2 -0
  23. package/dist/index-CSo4Vcso.js.map +1 -0
  24. package/dist/{mpy-CmHIC_T4.js → mpy-DXY_Z69L.js} +2 -2
  25. package/dist/mpy-DXY_Z69L.js.map +1 -0
  26. package/dist/{py-BY9OyURr.js → py-BXEV3Waf.js} +2 -2
  27. package/dist/py-BXEV3Waf.js.map +1 -0
  28. package/dist/py-editor-CJghpysI.js +2 -0
  29. package/dist/py-editor-CJghpysI.js.map +1 -0
  30. package/dist/{py-game-CDWnCqy1.js → py-game-CAcsfHPF.js} +2 -2
  31. package/dist/py-game-CAcsfHPF.js.map +1 -0
  32. package/dist/{py-terminal-DDBTLKy-.js → py-terminal-D05dSP7E.js} +2 -2
  33. package/dist/{py-terminal-DDBTLKy-.js.map → py-terminal-D05dSP7E.js.map} +1 -1
  34. package/dist/pyodide_graph-CX6fRcVL.js +2 -0
  35. package/dist/pyodide_graph-CX6fRcVL.js.map +1 -0
  36. package/dist/storage.js +1 -1
  37. package/dist/storage.js.map +1 -1
  38. package/dist/toml-Blg7Izee.js.map +1 -1
  39. package/dist/toml-V4Savzlc.js.map +1 -1
  40. package/dist/xterm-Bdboj2r8.js +2 -0
  41. package/dist/xterm-Bdboj2r8.js.map +1 -0
  42. package/dist/xterm-readline-CVifJ5yI.js +2 -0
  43. package/dist/xterm-readline-CVifJ5yI.js.map +1 -0
  44. package/dist/{xterm_addon-fit-DxKdSnof.js → xterm_addon-fit-43qXDVCl.js} +2 -14
  45. package/dist/xterm_addon-fit-43qXDVCl.js.map +1 -0
  46. package/dist/{xterm_addon-web-links-B6rWzrcs.js → xterm_addon-web-links-DVH-i-UR.js} +2 -14
  47. package/dist/xterm_addon-web-links-DVH-i-UR.js.map +1 -0
  48. package/dist/zip-T1gzVEcZ.js +2 -0
  49. package/dist/zip-T1gzVEcZ.js.map +1 -0
  50. package/package.json +21 -19
  51. package/src/3rd-party/xterm-readline.js +28 -3
  52. package/src/3rd-party/xterm.js +10 -2
  53. package/src/3rd-party/xterm_addon-fit.js +2 -14
  54. package/src/3rd-party/xterm_addon-web-links.js +2 -14
  55. package/src/fs.js +0 -2
  56. package/src/plugins/py-editor.js +17 -2
  57. package/src/plugins/py-terminal/mpy.js +1 -1
  58. package/src/plugins/py-terminal/py.js +1 -1
  59. package/dist/codemirror-lAW8P_b2.js +0 -2
  60. package/dist/codemirror-lAW8P_b2.js.map +0 -1
  61. package/dist/codemirror_commands-Og5MXTi1.js +0 -2
  62. package/dist/codemirror_commands-Og5MXTi1.js.map +0 -1
  63. package/dist/codemirror_lang-python-C__shTTP.js +0 -2
  64. package/dist/codemirror_lang-python-C__shTTP.js.map +0 -1
  65. package/dist/codemirror_language-BRdaMe3x.js +0 -2
  66. package/dist/codemirror_language-BRdaMe3x.js.map +0 -1
  67. package/dist/codemirror_state-BNbbkoNK.js +0 -2
  68. package/dist/codemirror_state-BNbbkoNK.js.map +0 -1
  69. package/dist/codemirror_view-WuoIJFLW.js +0 -2
  70. package/dist/codemirror_view-WuoIJFLW.js.map +0 -1
  71. package/dist/core-of365ts-.js +0 -4
  72. package/dist/core-of365ts-.js.map +0 -1
  73. package/dist/index-DqzYjG-t.js +0 -2
  74. package/dist/index-DqzYjG-t.js.map +0 -1
  75. package/dist/mpy-CmHIC_T4.js.map +0 -1
  76. package/dist/py-BY9OyURr.js.map +0 -1
  77. package/dist/py-editor-md0FEZ4Z.js +0 -2
  78. package/dist/py-editor-md0FEZ4Z.js.map +0 -1
  79. package/dist/py-game-CDWnCqy1.js.map +0 -1
  80. package/dist/pyodide_graph-BvONa7d5.js +0 -2
  81. package/dist/pyodide_graph-BvONa7d5.js.map +0 -1
  82. package/dist/xterm-DrSYbXEP.js +0 -2
  83. package/dist/xterm-DrSYbXEP.js.map +0 -1
  84. package/dist/xterm-readline-C4_t4zrr.js +0 -2
  85. package/dist/xterm-readline-C4_t4zrr.js.map +0 -1
  86. package/dist/xterm_addon-fit-DxKdSnof.js.map +0 -1
  87. package/dist/xterm_addon-web-links-B6rWzrcs.js.map +0 -1
  88. package/dist/zip-CoY8ac0B.js +0 -2
  89. package/dist/zip-CoY8ac0B.js.map +0 -1
@@ -0,0 +1,2 @@
1
+ import{b as e,c as t,E as i,V as s,a as n,d as r,e as o,r as l,f as a,h as c,W as h,i as d,j as u,m as f,n as m,o as p,p as g,q as v,t as x,k as b}from"./codemirror_view-BsXnWedx.js";import{StateEffect as w,EditorSelection as k,StateField as y,Prec as M,codePointAt as S,fromCodePoint as C,codePointSize as L,Facet as q,combineConfig as R,CharCategory as A,EditorState as F,RangeSetBuilder as W,findClusterBreak as D}from"./codemirror_state-DxSVIxgn.js";import{f as I,a as P,b as E,d as $,c as O,e as z}from"./codemirror_language-BeYrpeur.js";import{history as T,defaultKeymap as B,historyKeymap as _}from"./codemirror_commands-JTJPAaAA.js";import{c as j,a as V,b as K,d as H}from"./index-CSo4Vcso.js";const N="function"==typeof String.prototype.normalize?e=>e.normalize("NFKD"):e=>e;class Q{constructor(e,t,i=0,s=e.length,n,r){this.test=r,this.value={from:0,to:0,precise:!1},this.done=!1,this.matches=[],this.buffer="",this.bufferPos=0,this.iter=e.iterRange(i,s),this.bufferStart=i,this.normalize=n?e=>n(N(e)):N,this.query=this.normalize(t)}peek(){if(this.bufferPos==this.buffer.length){if(this.bufferStart+=this.buffer.length,this.iter.next(),this.iter.done)return-1;this.bufferPos=0,this.buffer=this.iter.value}return S(this.buffer,this.bufferPos)}next(){for(;this.matches.length;)this.matches.pop();return this.nextOverlapping()}nextOverlapping(){for(;;){let e=this.peek();if(e<0)return this.done=!0,this;let t=C(e),i=this.bufferStart+this.bufferPos;this.bufferPos+=L(e);let s=this.normalize(t);if(s.length)for(let e=0,n=i,r=!0;;e++){let i=s.charCodeAt(e),o=this.match(i,n,r,this.bufferPos+this.bufferStart,e==s.length-1);if(o)return this.value=o,this;if(e==s.length-1)break;r&&e<t.length&&t.charCodeAt(e)==i?n++:r=!1}}}match(e,t,i,s,n){let r=null;for(let t=0;t<this.matches.length;){let i=this.matches[t],o=!1;this.query.charCodeAt(i.index)==e&&(i.index==this.query.length-1?r={from:i.from,to:s,precise:n&&i.precise}:(i.index++,o=!0)),o?t++:this.matches.splice(t,1)}return this.query.charCodeAt(0)==e&&(1==this.query.length?r={from:t,to:s,precise:i&&n}:this.matches.push({from:t,index:1,precise:i})),r&&this.test&&!this.test(r.from,r.to,this.buffer,this.bufferStart)&&(r=null),r}}"undefined"!=typeof Symbol&&(Q.prototype[Symbol.iterator]=function(){return this});const U={from:-1,to:-1,match:/.*/.exec(""),precise:!0},G="gm"+(null==/x/.unicode?"":"u");class Y{constructor(e,t,i,s=0,n=e.length){if(this.text=e,this.to=n,this.curLine="",this.done=!1,this.value=U,/\\[sWDnr]|\n|\r|\[\^/.test(t))return new X(e,t,i,s,n);this.re=new RegExp(t,G+((null==i?void 0:i.ignoreCase)?"i":"")),this.test=null==i?void 0:i.test,this.iter=e.iter();let r=e.lineAt(s);this.curLineStart=r.from,this.matchPos=ee(e,s),this.getLine(this.curLineStart)}getLine(e){this.iter.next(e),this.iter.lineBreak?this.curLine="":(this.curLine=this.iter.value,this.curLineStart+this.curLine.length>this.to&&(this.curLine=this.curLine.slice(0,this.to-this.curLineStart)),this.iter.next())}nextLine(){this.curLineStart=this.curLineStart+this.curLine.length+1,this.curLineStart>this.to?this.curLine="":this.getLine(0)}next(){for(let e=this.matchPos-this.curLineStart;;){this.re.lastIndex=e;let t=this.matchPos<=this.to&&this.re.exec(this.curLine);if(t){let i=this.curLineStart+t.index,s=i+t[0].length;if(this.matchPos=ee(this.text,s+(i==s?1:0)),i==this.curLineStart+this.curLine.length&&this.nextLine(),(i<s||i>this.value.to)&&(!this.test||this.test(i,s,t)))return this.value={from:i,to:s,precise:!0,match:t},this;e=this.matchPos-this.curLineStart}else{if(!(this.curLineStart+this.curLine.length<this.to))return this.done=!0,this;this.nextLine(),e=0}}}}const Z=new WeakMap;class J{constructor(e,t){this.from=e,this.text=t}get to(){return this.from+this.text.length}static get(e,t,i){let s=Z.get(e);if(!s||s.from>=i||s.to<=t){let s=new J(t,e.sliceString(t,i));return Z.set(e,s),s}if(s.from==t&&s.to==i)return s;let{text:n,from:r}=s;return r>t&&(n=e.sliceString(t,r)+n,r=t),s.to<i&&(n+=e.sliceString(s.to,i)),Z.set(e,new J(r,n)),new J(t,n.slice(t-r,i-r))}}class X{constructor(e,t,i,s,n){this.text=e,this.to=n,this.done=!1,this.value=U,this.matchPos=ee(e,s),this.re=new RegExp(t,G+((null==i?void 0:i.ignoreCase)?"i":"")),this.test=null==i?void 0:i.test,this.flat=J.get(e,s,this.chunkEnd(s+5e3))}chunkEnd(e){return e>=this.to?this.to:this.text.lineAt(e).to}next(){for(;;){let e=this.re.lastIndex=this.matchPos-this.flat.from,t=this.re.exec(this.flat.text);if(t&&!t[0]&&t.index==e&&(this.re.lastIndex=e+1,t=this.re.exec(this.flat.text)),t){let e=this.flat.from+t.index,i=e+t[0].length;if((this.flat.to>=this.to||t.index+t[0].length<=this.flat.text.length-10)&&(!this.test||this.test(e,i,t)))return this.value={from:e,to:i,precise:!0,match:t},this.matchPos=ee(this.text,i+(e==i?1:0)),this}if(this.flat.to==this.to)return this.done=!0,this;this.flat=J.get(this.text,this.flat.from,this.chunkEnd(this.flat.from+2*this.flat.text.length))}}}function ee(e,t){if(t>=e.length)return t;let i,s=e.lineAt(t);for(;t<s.to&&(i=s.text.charCodeAt(t-s.from))>=56320&&i<57344;)t++;return t}"undefined"!=typeof Symbol&&(Y.prototype[Symbol.iterator]=X.prototype[Symbol.iterator]=function(){return this});const te={highlightWordAroundCursor:!1,minSelectionLength:1,maxMatches:100,wholeWords:!1},ie=q.define({combine:e=>R(e,te,{highlightWordAroundCursor:(e,t)=>e||t,minSelectionLength:Math.min,maxMatches:Math.min})});const se=n.mark({class:"cm-selectionMatch"}),ne=n.mark({class:"cm-selectionMatch cm-selectionMatch-main"});function re(e,t,i,s){return!(0!=i&&e(t.sliceDoc(i-1,i))==A.Word||s!=t.doc.length&&e(t.sliceDoc(s,s+1))==A.Word)}const oe=s.fromClass(class{constructor(e){this.decorations=this.getDeco(e)}update(e){(e.selectionSet||e.docChanged||e.viewportChanged)&&(this.decorations=this.getDeco(e.view))}getDeco(e){let t=e.state.facet(ie),{state:i}=e,s=i.selection;if(s.ranges.length>1)return n.none;let r,o=s.main,l=null;if(o.empty){if(!t.highlightWordAroundCursor)return n.none;let e=i.wordAt(o.head);if(!e)return n.none;l=i.charCategorizer(o.head),r=i.sliceDoc(e.from,e.to)}else{let e=o.to-o.from;if(e<t.minSelectionLength||e>200)return n.none;if(t.wholeWords){if(r=i.sliceDoc(o.from,o.to),l=i.charCategorizer(o.head),!re(l,i,o.from,o.to)||!function(e,t,i,s){return e(t.sliceDoc(i,i+1))==A.Word&&e(t.sliceDoc(s-1,s))==A.Word}(l,i,o.from,o.to))return n.none}else if(r=i.sliceDoc(o.from,o.to),!r)return n.none}let a=[];for(let s of e.visibleRanges){let e=new Q(i.doc,r,s.from,s.to);for(;!e.next().done;){let{from:s,to:r}=e.value;if((!l||re(l,i,s,r))&&(o.empty&&s<=o.from&&r>=o.to?a.push(ne.range(s,r)):(s>=o.to||r<=o.from)&&a.push(se.range(s,r)),a.length>t.maxMatches))return n.none}}return n.set(a)}},{decorations:e=>e.decorations}),le=i.baseTheme({".cm-selectionMatch":{backgroundColor:"#99ff7780"},".cm-searchMatch .cm-selectionMatch":{backgroundColor:"transparent"}});const ae=q.define({combine:e=>R(e,{top:!1,caseSensitive:!1,literal:!1,regexp:!1,wholeWord:!1,createPanel:e=>new Oe(e),scrollToMatch:e=>i.scrollIntoView(e)})});class ce{constructor(e){this.search=e.search,this.caseSensitive=!!e.caseSensitive,this.literal=!!e.literal,this.regexp=!!e.regexp,this.replace=e.replace||"",this.valid=!!this.search&&(!this.regexp||function(e){try{return new RegExp(e,G),!0}catch(e){return!1}}(this.search)),this.unquoted=this.unquote(this.search),this.wholeWord=!!e.wholeWord,this.test=e.test}unquote(e){return this.literal?e:e.replace(/\\([nrt\\])/g,(e,t)=>"n"==t?"\n":"r"==t?"\r":"t"==t?"\t":"\\")}eq(e){return this.search==e.search&&this.replace==e.replace&&this.caseSensitive==e.caseSensitive&&this.regexp==e.regexp&&this.wholeWord==e.wholeWord&&this.test==e.test}create(){return this.regexp?new ge(this):new ue(this)}getCursor(e,t=0,i){let s=e.doc?e:F.create({doc:e});return null==i&&(i=s.doc.length),this.regexp?fe(this,s,t,i):de(this,s,t,i)}}class he{constructor(e){this.spec=e}}function de(e,t,i,s){let n;var r,o;return e.wholeWord&&(r=t.doc,o=t.charCategorizer(t.selection.main.head),n=(e,t,i,s)=>((s>e||s+i.length<t)&&(s=Math.max(0,e-2),i=r.sliceString(s,Math.min(r.length,t+2))),!(o(me(i,e-s))==A.Word&&o(pe(i,e-s))==A.Word||o(pe(i,t-s))==A.Word&&o(me(i,t-s))==A.Word))),e.test&&(n=function(e,t,i){return(s,n,r,o)=>{if(i&&!i(s,n,r,o))return!1;let l=s>=o&&n<=o+r.length?r.slice(s-o,n-o):t.doc.sliceString(s,n);return e(l,t,s,n)}}(e.test,t,n)),new Q(t.doc,e.unquoted,i,s,e.caseSensitive?void 0:e=>e.toLowerCase(),n)}class ue extends he{constructor(e){super(e)}nextMatch(e,t,i){let s=de(this.spec,e,i,e.doc.length).nextOverlapping();if(s.done){let i=Math.min(e.doc.length,t+this.spec.unquoted.length);s=de(this.spec,e,0,i).nextOverlapping()}return s.done||s.value.from==t&&s.value.to==i?null:s.value}prevMatchInRange(e,t,i){for(let s=i;;){let i=Math.max(t,s-1e4-this.spec.unquoted.length),n=de(this.spec,e,i,s),r=null;for(;!n.nextOverlapping().done;)r=n.value;if(r)return r;if(i==t)return null;s-=1e4}}prevMatch(e,t,i){let s=this.prevMatchInRange(e,0,t);return s||(s=this.prevMatchInRange(e,Math.max(0,i-this.spec.unquoted.length),e.doc.length)),!s||s.from==t&&s.to==i?null:s}getReplacement(e){return this.spec.unquote(this.spec.replace)}matchAll(e,t){let i=de(this.spec,e,0,e.doc.length),s=[];for(;!i.next().done;){if(s.length>=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let n=de(this.spec,e,Math.max(0,t-this.spec.unquoted.length),Math.min(i+this.spec.unquoted.length,e.doc.length));for(;!n.next().done;)s(n.value.from,n.value.to)}}function fe(e,t,i,s){let n;var r;return e.wholeWord&&(r=t.charCategorizer(t.selection.main.head),n=(e,t,i)=>!i[0].length||(r(me(i.input,i.index))!=A.Word||r(pe(i.input,i.index))!=A.Word)&&(r(pe(i.input,i.index+i[0].length))!=A.Word||r(me(i.input,i.index+i[0].length))!=A.Word)),e.test&&(n=function(e,t,i){return(s,n,r)=>(!i||i(s,n,r))&&e(r[0],t,s,n)}(e.test,t,n)),new Y(t.doc,e.search,{ignoreCase:!e.caseSensitive,test:n},i,s)}function me(e,t){return e.slice(D(e,t,!1),t)}function pe(e,t){return e.slice(t,D(e,t))}class ge extends he{nextMatch(e,t,i){let s=fe(this.spec,e,i,e.doc.length).next();return s.done&&(s=fe(this.spec,e,0,t).next()),s.done?null:s.value}prevMatchInRange(e,t,i){for(let s=1;;s++){let n=Math.max(t,i-1e4*s),r=fe(this.spec,e,n,i),o=null;for(;!r.next().done;)o=r.value;if(o&&(n==t||o.from>n+10))return o;if(n==t)return null}}prevMatch(e,t,i){return this.prevMatchInRange(e,0,t)||this.prevMatchInRange(e,i,e.doc.length)}getReplacement(e){return this.spec.unquote(this.spec.replace).replace(/\$([$&]|\d+)/g,(t,i)=>{if("&"==i)return e.match[0];if("$"==i)return"$";for(let t=i.length;t>0;t--){let s=+i.slice(0,t);if(s>0&&s<e.match.length)return e.match[s]+i.slice(t)}return t})}matchAll(e,t){let i=fe(this.spec,e,0,e.doc.length),s=[];for(;!i.next().done;){if(s.length>=t)return null;s.push(i.value)}return s}highlight(e,t,i,s){let n=fe(this.spec,e,Math.max(0,t-250),Math.min(i+250,e.doc.length));for(;!n.next().done;)s(n.value.from,n.value.to)}}const ve=w.define(),xe=w.define(),be=y.define({create:e=>new we(We(e).create(),null),update(e,t){for(let i of t.effects)i.is(ve)?e=new we(i.value.create(),e.panel):i.is(xe)&&(e=new we(e.query,i.value?Fe:null));return e},provide:e=>r.from(e,e=>e.panel)});class we{constructor(e,t){this.query=e,this.panel=t}}const ke=n.mark({class:"cm-searchMatch"}),ye=n.mark({class:"cm-searchMatch cm-searchMatch-selected"}),Me=s.fromClass(class{constructor(e){this.view=e,this.decorations=this.highlight(e.state.field(be))}update(e){let t=e.state.field(be);(t!=e.startState.field(be)||e.docChanged||e.selectionSet||e.viewportChanged)&&(this.decorations=this.highlight(t))}highlight({query:e,panel:t}){if(!t||!e.spec.valid)return n.none;let{view:i}=this,s=new W;for(let t=0,n=i.visibleRanges,r=n.length;t<r;t++){let{from:o,to:l}=n[t];for(;t<r-1&&l>n[t+1].from-500;)l=n[++t].to;e.highlight(i.state,o,l,(e,t)=>{let n=i.state.selection.ranges.some(i=>i.from==e&&i.to==t);s.add(e,t,n?ye:ke)})}return s.finish()}},{decorations:e=>e.decorations});function Se(e){return t=>{let i=t.state.field(be,!1);return i&&i.query.spec.valid?e(t,i):Pe(t)}}const Ce=Se((e,{query:t})=>{let{to:i}=e.state.selection.main,s=t.nextMatch(e.state,i,i);if(!s)return!1;let n=k.single(s.from,s.to),r=e.state.facet(ae);return e.dispatch({selection:n,effects:[_e(e,s),r.scrollToMatch(n.main,e)],userEvent:"select.search"}),Ie(e),!0}),Le=Se((e,{query:t})=>{let{state:i}=e,{from:s}=i.selection.main,n=t.prevMatch(i,s,s);if(!n)return!1;let r=k.single(n.from,n.to),o=e.state.facet(ae);return e.dispatch({selection:r,effects:[_e(e,n),o.scrollToMatch(r.main,e)],userEvent:"select.search"}),Ie(e),!0}),qe=Se((e,{query:t})=>{let i=t.matchAll(e.state,1e3);return!(!i||!i.length)&&(e.dispatch({selection:k.create(i.map(e=>k.range(e.from,e.to))),userEvent:"select.search.matches"}),!0)}),Re=Se((e,{query:t})=>{let{state:s}=e,{from:n,to:r}=s.selection.main;if(s.readOnly)return!1;let o=t.nextMatch(s,n,n);if(!o)return!1;let l,a,c=o,h=[],d=[];c.precise?c.from==n&&c.to==r&&(a=s.toText(t.getReplacement(c)),h.push({from:c.from,to:c.to,insert:a}),d.push(i.announce.of(s.phrase("replaced match on line $",s.doc.lineAt(n).number)+"."))):c=t.nextMatch(s,c.from,c.to);let u=e.state.changes(h);return c&&(l=k.single(c.from,c.to).map(u),d.push(_e(e,c)),d.push(s.facet(ae).scrollToMatch(l.main,e))),e.dispatch({changes:u,selection:l,effects:d,userEvent:"input.replace"}),!0}),Ae=Se((e,{query:t})=>{if(e.state.readOnly)return!1;let s=[];for(let i of t.matchAll(e.state,1e9)){let{from:e,to:n,precise:r}=i;r&&s.push({from:e,to:n,insert:t.getReplacement(i)})}if(!s.length)return!1;let n=e.state.phrase("replaced $ matches",s.length)+".";return e.dispatch({changes:s,effects:i.announce.of(n),userEvent:"input.replace.all"}),!0});function Fe(e){return e.state.facet(ae).createPanel(e)}function We(e,t){var i,s,n,r,o;let l=e.selection.main,a=l.empty||l.to>l.from+100?"":e.sliceDoc(l.from,l.to);if(t&&!a)return t;let c=e.facet(ae);return new ce({search:(null!==(i=null==t?void 0:t.literal)&&void 0!==i?i:c.literal)?a:a.replace(/\n/g,"\\n"),caseSensitive:null!==(s=null==t?void 0:t.caseSensitive)&&void 0!==s?s:c.caseSensitive,literal:null!==(n=null==t?void 0:t.literal)&&void 0!==n?n:c.literal,regexp:null!==(r=null==t?void 0:t.regexp)&&void 0!==r?r:c.regexp,wholeWord:null!==(o=null==t?void 0:t.wholeWord)&&void 0!==o?o:c.wholeWord})}function De(t){let i=e(t,Fe);return i&&i.dom.querySelector("[main-field]")}function Ie(e){let t=De(e);t&&t==e.root.activeElement&&t.select()}const Pe=e=>{let t=e.state.field(be,!1);if(t&&t.panel){let i=De(e);if(i&&i!=e.root.activeElement){let s=We(e.state,t.query.spec);s.valid&&e.dispatch({effects:ve.of(s)}),i.focus(),i.select()}}else e.dispatch({effects:[xe.of(!0),t?ve.of(We(e.state,t.query.spec)):w.appendConfig.of(Ve)]});return!0},Ee=t=>{let i=t.state.field(be,!1);if(!i||!i.panel)return!1;let s=e(t,Fe);return s&&s.dom.contains(t.root.activeElement)&&t.focus(),t.dispatch({effects:xe.of(!1)}),!0},$e=[{key:"Mod-f",run:Pe,scope:"editor search-panel"},{key:"F3",run:Ce,shift:Le,scope:"editor search-panel",preventDefault:!0},{key:"Mod-g",run:Ce,shift:Le,scope:"editor search-panel",preventDefault:!0},{key:"Escape",run:Ee,scope:"editor search-panel"},{key:"Mod-Shift-l",run:({state:e,dispatch:t})=>{let i=e.selection;if(i.ranges.length>1||i.main.empty)return!1;let{from:s,to:n}=i.main,r=[],o=0;for(let t=new Q(e.doc,e.sliceDoc(s,n));!t.next().done;){if(r.length>1e3)return!1;t.value.from==s&&(o=r.length),r.push(k.range(t.value.from,t.value.to))}return t(e.update({selection:k.create(r,o),userEvent:"select.search.matches"})),!0}},{key:"Mod-Alt-g",run:e=>{let{state:s}=e,n=String(s.doc.lineAt(e.state.selection.main.head).number),{close:r,result:o}=t(e,{label:s.phrase("Go to line"),input:{type:"text",name:"line",value:n},focus:!0,submitLabel:s.phrase("go")});return o.then(t=>{let n=t&&/^([+-])?(\d+)?(:\d+)?(%)?$/.exec(t.elements.line.value);if(!n)return void e.dispatch({effects:r});let o=s.doc.lineAt(s.selection.main.head),[,l,a,c,h]=n,d=c?+c.slice(1):0,u=a?+a:o.number;if(a&&h){let e=u/100;l&&(e=e*("-"==l?-1:1)+o.number/s.doc.lines),u=Math.round(s.doc.lines*e)}else a&&l&&(u=u*("-"==l?-1:1)+o.number);let f=s.doc.line(Math.max(1,Math.min(s.doc.lines,u))),m=k.cursor(f.from+Math.max(0,Math.min(d,f.length)));e.dispatch({effects:[r,i.scrollIntoView(m.from,{y:"center"})],selection:m})}),!0}},{key:"Mod-d",run:({state:e,dispatch:t})=>{let{ranges:s}=e.selection;if(s.some(e=>e.from===e.to))return(({state:e,dispatch:t})=>{let{selection:i}=e,s=k.create(i.ranges.map(t=>e.wordAt(t.head)||k.cursor(t.head)),i.mainIndex);return!s.eq(i)&&(t(e.update({selection:s})),!0)})({state:e,dispatch:t});let n=e.sliceDoc(s[0].from,s[0].to);if(e.selection.ranges.some(t=>e.sliceDoc(t.from,t.to)!=n))return!1;let r=function(e,t){let{main:i,ranges:s}=e.selection,n=e.wordAt(i.head),r=n&&n.from==i.from&&n.to==i.to;for(let i=!1,n=new Q(e.doc,t,s[s.length-1].to);;){if(n.next(),!n.done){if(i&&s.some(e=>e.from==n.value.from))continue;if(r){let t=e.wordAt(n.value.from);if(!t||t.from!=n.value.from||t.to!=n.value.to)continue}return n.value}if(i)return null;n=new Q(e.doc,t,0,Math.max(0,s[s.length-1].from-1)),i=!0}}(e,n);return!!r&&(t(e.update({selection:e.selection.addRange(k.range(r.from,r.to),!1),effects:i.scrollIntoView(r.to)})),!0)},preventDefault:!0}];class Oe{constructor(e){this.view=e;let t=this.query=e.state.field(be).query.spec;function i(e,t,i){return o("button",{class:"cm-button",name:e,onclick:t,type:"button"},i)}this.commit=this.commit.bind(this),this.searchField=o("input",{value:t.search,placeholder:ze(e,"Find"),"aria-label":ze(e,"Find"),class:"cm-textfield",name:"search",form:"","main-field":"true",onchange:this.commit,onkeyup:this.commit}),this.replaceField=o("input",{value:t.replace,placeholder:ze(e,"Replace"),"aria-label":ze(e,"Replace"),class:"cm-textfield",name:"replace",form:"",onchange:this.commit,onkeyup:this.commit}),this.caseField=o("input",{type:"checkbox",name:"case",form:"",checked:t.caseSensitive,onchange:this.commit}),this.reField=o("input",{type:"checkbox",name:"re",form:"",checked:t.regexp,onchange:this.commit}),this.wordField=o("input",{type:"checkbox",name:"word",form:"",checked:t.wholeWord,onchange:this.commit}),this.dom=o("div",{onkeydown:e=>this.keydown(e),class:"cm-search"},[this.searchField,i("next",()=>Ce(e),[ze(e,"next")]),i("prev",()=>Le(e),[ze(e,"previous")]),i("select",()=>qe(e),[ze(e,"all")]),o("label",null,[this.caseField,ze(e,"match case")]),o("label",null,[this.reField,ze(e,"regexp")]),o("label",null,[this.wordField,ze(e,"by word")]),...e.state.readOnly?[]:[o("br"),this.replaceField,i("replace",()=>Re(e),[ze(e,"replace")]),i("replaceAll",()=>Ae(e),[ze(e,"replace all")])],o("button",{name:"close",onclick:()=>Ee(e),"aria-label":ze(e,"close"),type:"button"},["×"])])}commit(){let e=new ce({search:this.searchField.value,caseSensitive:this.caseField.checked,regexp:this.reField.checked,wholeWord:this.wordField.checked,replace:this.replaceField.value});e.eq(this.query)||(this.query=e,this.view.dispatch({effects:ve.of(e)}))}keydown(e){l(this.view,e,"search-panel")?e.preventDefault():13==e.keyCode&&e.target==this.searchField?(e.preventDefault(),(e.shiftKey?Le:Ce)(this.view)):13==e.keyCode&&e.target==this.replaceField&&(e.preventDefault(),Re(this.view))}update(e){for(let t of e.transactions)for(let e of t.effects)e.is(ve)&&!e.value.eq(this.query)&&this.setQuery(e.value)}setQuery(e){this.query=e,this.searchField.value=e.search,this.replaceField.value=e.replace,this.caseField.checked=e.caseSensitive,this.reField.checked=e.regexp,this.wordField.checked=e.wholeWord}mount(){this.searchField.select()}get pos(){return 80}get top(){return this.view.state.facet(ae).top}}function ze(e,t){return e.state.phrase(t)}const Te=30,Be=/[\s\.,:;?!]/;function _e(e,{from:t,to:s}){let n=e.state.doc.lineAt(t),r=e.state.doc.lineAt(s).to,o=Math.max(n.from,t-Te),l=Math.min(r,s+Te),a=e.state.sliceDoc(o,l);if(o!=n.from)for(let e=0;e<Te;e++)if(!Be.test(a[e+1])&&Be.test(a[e])){a=a.slice(e);break}if(l!=r)for(let e=a.length-1;e>a.length-Te;e--)if(!Be.test(a[e-1])&&Be.test(a[e])){a=a.slice(0,e);break}return i.announce.of(`${e.state.phrase("current match")}. ${a} ${e.state.phrase("on line")} ${n.number}.`)}const je=i.baseTheme({".cm-panel.cm-search":{padding:"2px 6px 4px",position:"relative","& [name=close]":{position:"absolute",top:"0",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",padding:0,margin:0},"& input, & button, & label":{margin:".2em .6em .2em 0"},"& input[type=checkbox]":{marginRight:".2em"},"& label":{fontSize:"80%",whiteSpace:"pre"}},"&light .cm-searchMatch":{backgroundColor:"#ffff0054"},"&dark .cm-searchMatch":{backgroundColor:"#00ffff8a"},"&light .cm-searchMatch-selected":{backgroundColor:"#ff6a0054"},"&dark .cm-searchMatch-selected":{backgroundColor:"#ff00ff8a"}}),Ve=[be,M.low(Me),je];class Ke{constructor(e,t,i){this.from=e,this.to=t,this.diagnostic=i}}class He{constructor(e,t,i){this.diagnostics=e,this.panel=t,this.selected=i}static init(e,t,i){let s=i.facet(it).markerFilter;s&&(e=s(e,i));let r=e.slice().sort((e,t)=>e.from-t.from||e.to-t.to),o=new W,l=[],a=0,c=i.doc.iter(),h=0,d=i.doc.length;for(let e=0;;){let t,i,s=e==r.length?null:r[e];if(!s&&!l.length)break;if(l.length)t=a,i=l.reduce((e,t)=>Math.min(e,t.to),s&&s.from>t?s.from:1e8);else{if(t=s.from,t>d)break;i=s.to,l.push(s),e++}for(;e<r.length;){let s=r[e];if(s.from!=t||!(s.to>s.from||s.to==t)){i=Math.min(s.from,i);break}l.push(s),e++,i=Math.min(s.to,i)}i=Math.min(i,d);let u=!1;if(l.some(e=>e.from==t&&(e.to==i||i==d))&&(u=t==i,!u&&i-t<10)){let e=t-(h+c.value.length);e>0&&(c.next(e),h=t);for(let e=t;;){if(e>=i){u=!0;break}if(!c.lineBreak&&h+c.value.length>e)break;e=h+c.value.length,h+=c.value.length,c.next()}}let f=ut(l);if(u)o.add(t,t,n.widget({widget:new ot(f),diagnostics:l.slice()}));else{let e=l.reduce((e,t)=>t.markClass?e+" "+t.markClass:e,"");o.add(t,i,n.mark({class:"cm-lintRange cm-lintRange-"+f+e,diagnostics:l.slice(),inclusiveEnd:l.some(e=>e.to>i)}))}if(a=i,a==d)break;for(let e=0;e<l.length;e++)l[e].to<=a&&l.splice(e--,1)}let u=o.finish();return new He(u,t,Ne(u))}}function Ne(e,t=null,i=0){let s=null;return e.between(i,1e9,(e,i,{spec:n})=>{if(!(t&&n.diagnostics.indexOf(t)<0))if(s){if(n.diagnostics.indexOf(s.diagnostic)<0)return!1;s=new Ke(s.from,i,s.diagnostic)}else s=new Ke(e,i,t||n.diagnostics[0])}),s}const Qe=w.define(),Ue=w.define(),Ge=w.define(),Ye=y.define({create:()=>new He(n.none,null,null),update(e,t){if(t.docChanged&&e.diagnostics.size){let i=e.diagnostics.map(t.changes),s=null,n=e.panel;if(e.selected){let n=t.changes.mapPos(e.selected.from,1);s=Ne(i,e.selected.diagnostic,n)||Ne(i,null,n)}!i.size&&n&&t.state.facet(it).autoPanel&&(n=null),e=new He(i,n,s)}for(let i of t.effects)if(i.is(Qe)){let s=t.state.facet(it).autoPanel?i.value.length?at.open:null:e.panel;e=He.init(i.value,s,t.state)}else i.is(Ue)?e=new He(e.diagnostics,i.value?at.open:null,e.selected):i.is(Ge)&&(e=new He(e.diagnostics,e.panel,i.value));return e},provide:e=>[r.from(e,e=>e.panel),i.decorations.from(e,e=>e.diagnostics)]}),Ze=n.mark({class:"cm-lintRange cm-lintRange-active"});function Je(e,t,i){let s,{diagnostics:n}=e.state.field(Ye),r=-1,o=-1;n.between(t-(i<0?1:0),t+(i>0?1:0),(e,n,{spec:l})=>{if(t>=e&&t<=n&&(e==n||(t>e||i>0)&&(t<n||i<0)))return s=l.diagnostics,r=e,o=n,!1});let l=e.state.facet(it).tooltipFilter;return s&&l&&(s=l(s,e.state)),s?{pos:r,end:o,above:!0,create:()=>({dom:Xe(e,s)})}:null}function Xe(e,t){return o("ul",{class:"cm-tooltip-lint"},t.map(t=>rt(e,t,!1)))}const et=e=>{let t=e.state.field(Ye,!1);return!(!t||!t.panel)&&(e.dispatch({effects:Ue.of(!1)}),!0)},tt=[{key:"Mod-Shift-m",run:t=>{let i=t.state.field(Ye,!1);var s,n;i&&i.panel||t.dispatch({effects:(s=t.state,n=[Ue.of(!0)],s.field(Ye,!1)?n:n.concat(w.appendConfig.of(mt)))});let r=e(t,at.open);return r&&r.dom.querySelector(".cm-panel-lint ul").focus(),!0},preventDefault:!0},{key:"F8",run:e=>{let t=e.state.field(Ye,!1);if(!t)return!1;let i=e.state.selection.main,s=Ne(t.diagnostics,null,i.to+1);return!(!s&&(s=Ne(t.diagnostics,null,0),!s||s.from==i.from&&s.to==i.to))&&(e.dispatch({selection:{anchor:s.from,head:s.to},scrollIntoView:!0}),a(e,s.from,1,{tooltip:ft,until:e=>e.docChanged||e.newSelection.main.head<s.from||e.newSelection.main.head>s.to}),!0)}}],it=q.define({combine:e=>({sources:e.map(e=>e.source).filter(e=>null!=e),...R(e.map(e=>e.config),{delay:750,markerFilter:null,tooltipFilter:null,needsRefresh:null,hideOn:()=>null},{delay:Math.max,markerFilter:st,tooltipFilter:st,needsRefresh:(e,t)=>e?t?i=>e(i)||t(i):e:t,hideOn:(e,t)=>e?t?(i,s,n)=>e(i,s,n)||t(i,s,n):e:t,autoPanel:(e,t)=>e||t})})});function st(e,t){return e?t?(i,s)=>t(e(i,s),s):e:t}function nt(e){let t=[];if(e)e:for(let{name:i}of e){for(let e=0;e<i.length;e++){let s=i[e];if(/[a-zA-Z]/.test(s)&&!t.some(e=>e.toLowerCase()==s.toLowerCase())){t.push(s);continue e}}t.push("")}return t}function rt(e,t,i){var s;let n=i?nt(t.actions):[];return o("li",{class:"cm-diagnostic cm-diagnostic-"+t.severity},o("span",{class:"cm-diagnosticText"},t.renderMessage?t.renderMessage(e):t.message),null===(s=t.actions)||void 0===s?void 0:s.map((i,s)=>{let r=!1,l=s=>{if(s.preventDefault(),r)return;r=!0;let n=Ne(e.state.field(Ye).diagnostics,t);n&&i.apply(e,n.from,n.to)},{name:a}=i,c=n[s]?a.indexOf(n[s]):-1,h=c<0?a:[a.slice(0,c),o("u",a.slice(c,c+1)),a.slice(c+1)],d=i.markClass?" "+i.markClass:"";return o("button",{type:"button",class:"cm-diagnosticAction"+d,onclick:l,onmousedown:l,"aria-label":` Action: ${a}${c<0?"":` (access key "${n[s]})"`}.`},h)}),t.source&&o("div",{class:"cm-diagnosticSource"},t.source))}class ot extends h{constructor(e){super(),this.sev=e}eq(e){return e.sev==this.sev}toDOM(){return o("span",{class:"cm-lintPoint cm-lintPoint-"+this.sev})}}class lt{constructor(e,t){this.diagnostic=t,this.id="item_"+Math.floor(4294967295*Math.random()).toString(16),this.dom=rt(e,t,!0),this.dom.id=this.id,this.dom.setAttribute("role","option")}}class at{constructor(e){this.view=e,this.items=[];this.list=o("ul",{tabIndex:0,role:"listbox","aria-label":this.view.state.phrase("Diagnostics"),onkeydown:t=>{if(!(t.ctrlKey||t.altKey||t.metaKey)){if(27==t.keyCode)et(this.view),this.view.focus();else if(38==t.keyCode||33==t.keyCode)this.moveSelection((this.selectedIndex-1+this.items.length)%this.items.length);else if(40==t.keyCode||34==t.keyCode)this.moveSelection((this.selectedIndex+1)%this.items.length);else if(36==t.keyCode)this.moveSelection(0);else if(35==t.keyCode)this.moveSelection(this.items.length-1);else if(13==t.keyCode)this.view.focus();else{if(!(t.keyCode>=65&&t.keyCode<=90&&this.selectedIndex>=0))return;{let{diagnostic:i}=this.items[this.selectedIndex],s=nt(i.actions);for(let n=0;n<s.length;n++)if(s[n].toUpperCase().charCodeAt(0)==t.keyCode){let t=Ne(this.view.state.field(Ye).diagnostics,i);t&&i.actions[n].apply(e,t.from,t.to)}}}t.preventDefault()}},onclick:e=>{for(let t=0;t<this.items.length;t++)this.items[t].dom.contains(e.target)&&this.moveSelection(t)}}),this.dom=o("div",{class:"cm-panel-lint"},this.list,o("button",{type:"button",name:"close","aria-label":this.view.state.phrase("close"),onclick:()=>et(this.view)},"×")),this.update()}get selectedIndex(){let e=this.view.state.field(Ye).selected;if(!e)return-1;for(let t=0;t<this.items.length;t++)if(this.items[t].diagnostic==e.diagnostic)return t;return-1}update(){let{diagnostics:e,selected:t}=this.view.state.field(Ye),i=0,s=!1,n=null,r=new Set;for(e.between(0,this.view.state.doc.length,(e,o,{spec:l})=>{for(let e of l.diagnostics){if(r.has(e))continue;r.add(e);let o,l=-1;for(let t=i;t<this.items.length;t++)if(this.items[t].diagnostic==e){l=t;break}l<0?(o=new lt(this.view,e),this.items.splice(i,0,o),s=!0):(o=this.items[l],l>i&&(this.items.splice(i,l-i),s=!0)),t&&o.diagnostic==t.diagnostic?o.dom.hasAttribute("aria-selected")||(o.dom.setAttribute("aria-selected","true"),n=o):o.dom.hasAttribute("aria-selected")&&o.dom.removeAttribute("aria-selected"),i++}});i<this.items.length&&!(1==this.items.length&&this.items[0].diagnostic.from<0);)s=!0,this.items.pop();0==this.items.length&&(this.items.push(new lt(this.view,{from:-1,to:-1,severity:"info",message:this.view.state.phrase("No diagnostics")})),s=!0),n?(this.list.setAttribute("aria-activedescendant",n.id),this.view.requestMeasure({key:this,read:()=>({sel:n.dom.getBoundingClientRect(),panel:this.list.getBoundingClientRect()}),write:({sel:e,panel:t})=>{let i=t.height/this.list.offsetHeight;e.top<t.top?this.list.scrollTop-=(t.top-e.top)/i:e.bottom>t.bottom&&(this.list.scrollTop+=(e.bottom-t.bottom)/i)}})):this.selectedIndex<0&&this.list.removeAttribute("aria-activedescendant"),s&&this.sync()}sync(){let e=this.list.firstChild;function t(){let t=e;e=t.nextSibling,t.remove()}for(let i of this.items)if(i.dom.parentNode==this.list){for(;e!=i.dom;)t();e=i.dom.nextSibling}else this.list.insertBefore(i.dom,e);for(;e;)t()}moveSelection(e){if(this.selectedIndex<0)return;let t=Ne(this.view.state.field(Ye).diagnostics,this.items[e].diagnostic);t&&this.view.dispatch({selection:{anchor:t.from,head:t.to},scrollIntoView:!0,effects:Ge.of(t)})}static open(e){return new at(e)}}function ct(e){return function(e,t='viewBox="0 0 40 40"'){return`url('data:image/svg+xml,<svg xmlns="http://www.w3.org/2000/svg" ${t}>${encodeURIComponent(e)}</svg>')`}(`<path d="m0 2.5 l2 -1.5 l1 0 l2 1.5 l1 0" stroke="${e}" fill="none" stroke-width=".7"/>`,'width="6" height="3"')}const ht=i.baseTheme({".cm-diagnostic":{padding:"3px 6px 3px 8px",marginLeft:"-1px",display:"block",whiteSpace:"pre-wrap"},".cm-diagnostic-error":{borderLeft:"5px solid #d11"},".cm-diagnostic-warning":{borderLeft:"5px solid orange"},".cm-diagnostic-info":{borderLeft:"5px solid #999"},".cm-diagnostic-hint":{borderLeft:"5px solid #66d"},".cm-diagnosticAction":{font:"inherit",border:"none",padding:"2px 4px",backgroundColor:"#444",color:"white",borderRadius:"3px",marginLeft:"8px",cursor:"pointer"},".cm-diagnosticSource":{fontSize:"70%",opacity:.7},".cm-lintRange":{backgroundPosition:"left bottom",backgroundRepeat:"repeat-x",paddingBottom:"0.7px"},".cm-lintRange-error":{backgroundImage:ct("#f11")},".cm-lintRange-warning":{backgroundImage:ct("orange")},".cm-lintRange-info":{backgroundImage:ct("#999")},".cm-lintRange-hint":{backgroundImage:ct("#66d")},".cm-lintRange-active":{backgroundColor:"#ffdd9980"},".cm-tooltip-lint":{padding:0,margin:0},".cm-lintPoint":{position:"relative","&:after":{content:'""',position:"absolute",bottom:0,left:"-2px",borderLeft:"3px solid transparent",borderRight:"3px solid transparent",borderBottom:"4px solid #d11"}},".cm-lintPoint-warning":{"&:after":{borderBottomColor:"orange"}},".cm-lintPoint-info":{"&:after":{borderBottomColor:"#999"}},".cm-lintPoint-hint":{"&:after":{borderBottomColor:"#66d"}},".cm-panel.cm-panel-lint":{position:"relative","& ul":{maxHeight:"100px",overflowY:"auto","& [aria-selected]":{backgroundColor:"#ddd","& u":{textDecoration:"underline"}},"&:focus [aria-selected]":{background_fallback:"#bdf",backgroundColor:"Highlight",color_fallback:"white",color:"HighlightText"},"& u":{textDecoration:"none"},padding:0,margin:0},"& [name=close]":{position:"absolute",top:"0",right:"2px",background:"inherit",border:"none",font:"inherit",padding:0,margin:0}},"&dark .cm-lintRange-active":{backgroundColor:"#86714a80"},"&dark .cm-panel.cm-panel-lint ul":{"& [aria-selected]":{backgroundColor:"#2e343e"}}});function dt(e){return"error"==e?4:"warning"==e?3:"info"==e?2:1}function ut(e){let t="hint",i=1;for(let s of e){let e=dt(s.severity);e>i&&(i=e,t=s.severity)}return t}const ft=c(Je,{hideOn:function(e,t){let i=t.pos,s=t.end||i,n=e.state.facet(it).hideOn(e,i,s);if(null!=n)return n;let r=e.startState.doc.lineAt(t.pos);return!(!e.effects.some(e=>e.is(Qe))&&!e.changes.touchesRange(r.from,Math.max(r.to,s)))}}),mt=[Ye,i.decorations.compute([Ye],e=>{let{selected:t,panel:i}=e.field(Ye);return t&&i&&t.from!=t.to?n.set([Ze.range(t.from,t.to)]):n.none}),ft,ht],pt=(()=>[d(),u(),f(),T(),I(),m(),p(),F.allowMultipleSelections.of(!0),P(),E($,{fallback:!0}),O(),j(),V(),g(),v(),x(),[le,oe],b.of([...K,...B,...$e,..._,...z,...H,...tt])])(),gt=(()=>[f(),T(),m(),E($,{fallback:!0}),b.of([...B,..._])])();export{i as EditorView,pt as basicSetup,gt as minimalSetup};
2
+ //# sourceMappingURL=codemirror-BDx3jn9j.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"codemirror-BDx3jn9j.js","sources":["../node_modules/@codemirror/search/dist/index.js","../node_modules/@codemirror/lint/dist/index.js","../node_modules/codemirror/dist/index.js"],"sourcesContent":["import { showDialog, EditorView, Decoration, ViewPlugin, showPanel, runScopeHandlers, getPanel } from '@codemirror/view';\nimport { codePointAt, fromCodePoint, codePointSize, EditorSelection, Facet, combineConfig, CharCategory, StateEffect, StateField, RangeSetBuilder, Prec, EditorState, findClusterBreak } from '@codemirror/state';\nimport elt from 'crelt';\n\nconst basicNormalize = typeof String.prototype.normalize == \"function\"\n ? x => x.normalize(\"NFKD\") : x => x;\n/**\nA search cursor provides an iterator over text matches in a\ndocument.\n*/\nclass SearchCursor {\n /**\n Create a text cursor. The query is the search string, `from` to\n `to` provides the region to search.\n \n When `normalize` is given, it will be called, on both the query\n string and the content it is matched against, before comparing.\n You can, for example, create a case-insensitive search by\n passing `s => s.toLowerCase()`.\n \n Text is always normalized with\n [`.normalize(\"NFKD\")`](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/normalize)\n (when supported).\n */\n constructor(text, query, from = 0, to = text.length, normalize, test) {\n this.test = test;\n /**\n The current match (only holds a meaningful value after\n [`next`](https://codemirror.net/6/docs/ref/#search.SearchCursor.next) has been called and when\n `done` is false).\n \n The `precise` flag will be set to false if the match starts or\n ends _inside_ a character that, when normalized, expands to\n multiple characters. It indicates that the `from`-`to` range\n covers content that isn't part of the actual match.\n */\n this.value = { from: 0, to: 0, precise: false };\n /**\n Whether the end of the iterated region has been reached.\n */\n this.done = false;\n this.matches = [];\n this.buffer = \"\";\n this.bufferPos = 0;\n this.iter = text.iterRange(from, to);\n this.bufferStart = from;\n this.normalize = normalize ? x => normalize(basicNormalize(x)) : basicNormalize;\n this.query = this.normalize(query);\n }\n peek() {\n if (this.bufferPos == this.buffer.length) {\n this.bufferStart += this.buffer.length;\n this.iter.next();\n if (this.iter.done)\n return -1;\n this.bufferPos = 0;\n this.buffer = this.iter.value;\n }\n return codePointAt(this.buffer, this.bufferPos);\n }\n /**\n Look for the next match. Updates the iterator's\n [`value`](https://codemirror.net/6/docs/ref/#search.SearchCursor.value) and\n [`done`](https://codemirror.net/6/docs/ref/#search.SearchCursor.done) properties. Should be called\n at least once before using the cursor.\n */\n next() {\n while (this.matches.length)\n this.matches.pop();\n return this.nextOverlapping();\n }\n /**\n The `next` method will ignore matches that partially overlap a\n previous match. This method behaves like `next`, but includes\n such matches.\n */\n nextOverlapping() {\n for (;;) {\n let next = this.peek();\n if (next < 0) {\n this.done = true;\n return this;\n }\n let str = fromCodePoint(next), start = this.bufferStart + this.bufferPos;\n this.bufferPos += codePointSize(next);\n let norm = this.normalize(str);\n if (norm.length)\n for (let i = 0, pos = start, posPrecise = true;; i++) {\n let code = norm.charCodeAt(i);\n let match = this.match(code, pos, posPrecise, this.bufferPos + this.bufferStart, i == norm.length - 1);\n if (match) {\n this.value = match;\n return this;\n }\n if (i == norm.length - 1)\n break;\n if (posPrecise && i < str.length && str.charCodeAt(i) == code)\n pos++;\n else\n posPrecise = false;\n }\n }\n }\n match(code, pos, posPrecise, end, endPrecise) {\n let match = null;\n for (let i = 0; i < this.matches.length;) {\n let partial = this.matches[i], keep = false;\n if (this.query.charCodeAt(partial.index) == code) {\n if (partial.index == this.query.length - 1) {\n match = { from: partial.from, to: end, precise: endPrecise && partial.precise };\n }\n else {\n partial.index++;\n keep = true;\n }\n }\n if (keep)\n i++;\n else\n this.matches.splice(i, 1);\n }\n if (this.query.charCodeAt(0) == code) {\n if (this.query.length == 1)\n match = { from: pos, to: end, precise: posPrecise && endPrecise };\n else\n this.matches.push({ from: pos, index: 1, precise: posPrecise });\n }\n if (match && this.test && !this.test(match.from, match.to, this.buffer, this.bufferStart))\n match = null;\n return match;\n }\n}\nif (typeof Symbol != \"undefined\")\n SearchCursor.prototype[Symbol.iterator] = function () { return this; };\n\nconst empty = { from: -1, to: -1, match: /*@__PURE__*//.*/.exec(\"\"), precise: true };\nconst baseFlags = \"gm\" + (/x/.unicode == null ? \"\" : \"u\");\n/**\nThis class is similar to [`SearchCursor`](https://codemirror.net/6/docs/ref/#search.SearchCursor)\nbut searches for a regular expression pattern instead of a plain\nstring.\n*/\nclass RegExpCursor {\n /**\n Create a cursor that will search the given range in the given\n document. `query` should be the raw pattern (as you'd pass it to\n `new RegExp`).\n */\n constructor(text, query, options, from = 0, to = text.length) {\n this.text = text;\n this.to = to;\n this.curLine = \"\";\n /**\n Set to `true` when the cursor has reached the end of the search\n range.\n */\n this.done = false;\n /**\n Will contain an object with the extent of the match and the\n match object when [`next`](https://codemirror.net/6/docs/ref/#search.RegExpCursor.next)\n sucessfully finds a match. The `precise` flag is always true for\n this type of cursor, and only there to make sure this cursor is\n a subtype of `SearchCursor`.\n */\n this.value = empty;\n if (/\\\\[sWDnr]|\\n|\\r|\\[\\^/.test(query))\n return new MultilineRegExpCursor(text, query, options, from, to);\n this.re = new RegExp(query, baseFlags + ((options === null || options === void 0 ? void 0 : options.ignoreCase) ? \"i\" : \"\"));\n this.test = options === null || options === void 0 ? void 0 : options.test;\n this.iter = text.iter();\n let startLine = text.lineAt(from);\n this.curLineStart = startLine.from;\n this.matchPos = toCharEnd(text, from);\n this.getLine(this.curLineStart);\n }\n getLine(skip) {\n this.iter.next(skip);\n if (this.iter.lineBreak) {\n this.curLine = \"\";\n }\n else {\n this.curLine = this.iter.value;\n if (this.curLineStart + this.curLine.length > this.to)\n this.curLine = this.curLine.slice(0, this.to - this.curLineStart);\n this.iter.next();\n }\n }\n nextLine() {\n this.curLineStart = this.curLineStart + this.curLine.length + 1;\n if (this.curLineStart > this.to)\n this.curLine = \"\";\n else\n this.getLine(0);\n }\n /**\n Move to the next match, if there is one.\n */\n next() {\n for (let off = this.matchPos - this.curLineStart;;) {\n this.re.lastIndex = off;\n let match = this.matchPos <= this.to && this.re.exec(this.curLine);\n if (match) {\n let from = this.curLineStart + match.index, to = from + match[0].length;\n this.matchPos = toCharEnd(this.text, to + (from == to ? 1 : 0));\n if (from == this.curLineStart + this.curLine.length)\n this.nextLine();\n if ((from < to || from > this.value.to) && (!this.test || this.test(from, to, match))) {\n this.value = { from, to, precise: true, match };\n return this;\n }\n off = this.matchPos - this.curLineStart;\n }\n else if (this.curLineStart + this.curLine.length < this.to) {\n this.nextLine();\n off = 0;\n }\n else {\n this.done = true;\n return this;\n }\n }\n }\n}\nconst flattened = /*@__PURE__*/new WeakMap();\n// Reusable (partially) flattened document strings\nclass FlattenedDoc {\n constructor(from, text) {\n this.from = from;\n this.text = text;\n }\n get to() { return this.from + this.text.length; }\n static get(doc, from, to) {\n let cached = flattened.get(doc);\n if (!cached || cached.from >= to || cached.to <= from) {\n let flat = new FlattenedDoc(from, doc.sliceString(from, to));\n flattened.set(doc, flat);\n return flat;\n }\n if (cached.from == from && cached.to == to)\n return cached;\n let { text, from: cachedFrom } = cached;\n if (cachedFrom > from) {\n text = doc.sliceString(from, cachedFrom) + text;\n cachedFrom = from;\n }\n if (cached.to < to)\n text += doc.sliceString(cached.to, to);\n flattened.set(doc, new FlattenedDoc(cachedFrom, text));\n return new FlattenedDoc(from, text.slice(from - cachedFrom, to - cachedFrom));\n }\n}\nclass MultilineRegExpCursor {\n constructor(text, query, options, from, to) {\n this.text = text;\n this.to = to;\n this.done = false;\n this.value = empty;\n this.matchPos = toCharEnd(text, from);\n this.re = new RegExp(query, baseFlags + ((options === null || options === void 0 ? void 0 : options.ignoreCase) ? \"i\" : \"\"));\n this.test = options === null || options === void 0 ? void 0 : options.test;\n this.flat = FlattenedDoc.get(text, from, this.chunkEnd(from + 5000 /* Chunk.Base */));\n }\n chunkEnd(pos) {\n return pos >= this.to ? this.to : this.text.lineAt(pos).to;\n }\n next() {\n for (;;) {\n let off = this.re.lastIndex = this.matchPos - this.flat.from;\n let match = this.re.exec(this.flat.text);\n // Skip empty matches directly after the last match\n if (match && !match[0] && match.index == off) {\n this.re.lastIndex = off + 1;\n match = this.re.exec(this.flat.text);\n }\n if (match) {\n let from = this.flat.from + match.index, to = from + match[0].length;\n // If a match goes almost to the end of a noncomplete chunk, try\n // again, since it'll likely be able to match more\n if ((this.flat.to >= this.to || match.index + match[0].length <= this.flat.text.length - 10) &&\n (!this.test || this.test(from, to, match))) {\n this.value = { from, to, precise: true, match };\n this.matchPos = toCharEnd(this.text, to + (from == to ? 1 : 0));\n return this;\n }\n }\n if (this.flat.to == this.to) {\n this.done = true;\n return this;\n }\n // Grow the flattened doc\n this.flat = FlattenedDoc.get(this.text, this.flat.from, this.chunkEnd(this.flat.from + this.flat.text.length * 2));\n }\n }\n}\nif (typeof Symbol != \"undefined\") {\n RegExpCursor.prototype[Symbol.iterator] = MultilineRegExpCursor.prototype[Symbol.iterator] =\n function () { return this; };\n}\nfunction validRegExp(source) {\n try {\n new RegExp(source, baseFlags);\n return true;\n }\n catch (_a) {\n return false;\n }\n}\nfunction toCharEnd(text, pos) {\n if (pos >= text.length)\n return pos;\n let line = text.lineAt(pos), next;\n while (pos < line.to && (next = line.text.charCodeAt(pos - line.from)) >= 0xDC00 && next < 0xE000)\n pos++;\n return pos;\n}\n\n/**\nCommand that shows a dialog asking the user for a line number, and\nwhen a valid position is provided, moves the cursor to that line.\n\nSupports line numbers, relative line offsets prefixed with `+` or\n`-`, document percentages suffixed with `%`, and an optional\ncolumn position by adding `:` and a second number after the line\nnumber.\n*/\nconst gotoLine = view => {\n let { state } = view;\n let line = String(state.doc.lineAt(view.state.selection.main.head).number);\n let { close, result } = showDialog(view, {\n label: state.phrase(\"Go to line\"),\n input: { type: \"text\", name: \"line\", value: line },\n focus: true,\n submitLabel: state.phrase(\"go\"),\n });\n result.then(form => {\n let match = form && /^([+-])?(\\d+)?(:\\d+)?(%)?$/.exec(form.elements[\"line\"].value);\n if (!match) {\n view.dispatch({ effects: close });\n return;\n }\n let startLine = state.doc.lineAt(state.selection.main.head);\n let [, sign, ln, cl, percent] = match;\n let col = cl ? +cl.slice(1) : 0;\n let line = ln ? +ln : startLine.number;\n if (ln && percent) {\n let pc = line / 100;\n if (sign)\n pc = pc * (sign == \"-\" ? -1 : 1) + (startLine.number / state.doc.lines);\n line = Math.round(state.doc.lines * pc);\n }\n else if (ln && sign) {\n line = line * (sign == \"-\" ? -1 : 1) + startLine.number;\n }\n let docLine = state.doc.line(Math.max(1, Math.min(state.doc.lines, line)));\n let selection = EditorSelection.cursor(docLine.from + Math.max(0, Math.min(col, docLine.length)));\n view.dispatch({\n effects: [close, EditorView.scrollIntoView(selection.from, { y: 'center' })],\n selection,\n });\n });\n return true;\n};\n\nconst defaultHighlightOptions = {\n highlightWordAroundCursor: false,\n minSelectionLength: 1,\n maxMatches: 100,\n wholeWords: false\n};\nconst highlightConfig = /*@__PURE__*/Facet.define({\n combine(options) {\n return combineConfig(options, defaultHighlightOptions, {\n highlightWordAroundCursor: (a, b) => a || b,\n minSelectionLength: Math.min,\n maxMatches: Math.min\n });\n }\n});\n/**\nThis extension highlights text that matches the selection. It uses\nthe `\"cm-selectionMatch\"` class for the highlighting. When\n`highlightWordAroundCursor` is enabled, the word at the cursor\nitself will be highlighted with `\"cm-selectionMatch-main\"`.\n*/\nfunction highlightSelectionMatches(options) {\n let ext = [defaultTheme, matchHighlighter];\n if (options)\n ext.push(highlightConfig.of(options));\n return ext;\n}\nconst matchDeco = /*@__PURE__*/Decoration.mark({ class: \"cm-selectionMatch\" });\nconst mainMatchDeco = /*@__PURE__*/Decoration.mark({ class: \"cm-selectionMatch cm-selectionMatch-main\" });\n// Whether the characters directly outside the given positions are non-word characters\nfunction insideWordBoundaries(check, state, from, to) {\n return (from == 0 || check(state.sliceDoc(from - 1, from)) != CharCategory.Word) &&\n (to == state.doc.length || check(state.sliceDoc(to, to + 1)) != CharCategory.Word);\n}\n// Whether the characters directly at the given positions are word characters\nfunction insideWord(check, state, from, to) {\n return check(state.sliceDoc(from, from + 1)) == CharCategory.Word\n && check(state.sliceDoc(to - 1, to)) == CharCategory.Word;\n}\nconst matchHighlighter = /*@__PURE__*/ViewPlugin.fromClass(class {\n constructor(view) {\n this.decorations = this.getDeco(view);\n }\n update(update) {\n if (update.selectionSet || update.docChanged || update.viewportChanged)\n this.decorations = this.getDeco(update.view);\n }\n getDeco(view) {\n let conf = view.state.facet(highlightConfig);\n let { state } = view, sel = state.selection;\n if (sel.ranges.length > 1)\n return Decoration.none;\n let range = sel.main, query, check = null;\n if (range.empty) {\n if (!conf.highlightWordAroundCursor)\n return Decoration.none;\n let word = state.wordAt(range.head);\n if (!word)\n return Decoration.none;\n check = state.charCategorizer(range.head);\n query = state.sliceDoc(word.from, word.to);\n }\n else {\n let len = range.to - range.from;\n if (len < conf.minSelectionLength || len > 200)\n return Decoration.none;\n if (conf.wholeWords) {\n query = state.sliceDoc(range.from, range.to); // TODO: allow and include leading/trailing space?\n check = state.charCategorizer(range.head);\n if (!(insideWordBoundaries(check, state, range.from, range.to) &&\n insideWord(check, state, range.from, range.to)))\n return Decoration.none;\n }\n else {\n query = state.sliceDoc(range.from, range.to);\n if (!query)\n return Decoration.none;\n }\n }\n let deco = [];\n for (let part of view.visibleRanges) {\n let cursor = new SearchCursor(state.doc, query, part.from, part.to);\n while (!cursor.next().done) {\n let { from, to } = cursor.value;\n if (!check || insideWordBoundaries(check, state, from, to)) {\n if (range.empty && from <= range.from && to >= range.to)\n deco.push(mainMatchDeco.range(from, to));\n else if (from >= range.to || to <= range.from)\n deco.push(matchDeco.range(from, to));\n if (deco.length > conf.maxMatches)\n return Decoration.none;\n }\n }\n }\n return Decoration.set(deco);\n }\n}, {\n decorations: v => v.decorations\n});\nconst defaultTheme = /*@__PURE__*/EditorView.baseTheme({\n \".cm-selectionMatch\": { backgroundColor: \"#99ff7780\" },\n \".cm-searchMatch .cm-selectionMatch\": { backgroundColor: \"transparent\" }\n});\n// Select the words around the cursors.\nconst selectWord = ({ state, dispatch }) => {\n let { selection } = state;\n let newSel = EditorSelection.create(selection.ranges.map(range => state.wordAt(range.head) || EditorSelection.cursor(range.head)), selection.mainIndex);\n if (newSel.eq(selection))\n return false;\n dispatch(state.update({ selection: newSel }));\n return true;\n};\n// Find next occurrence of query relative to last cursor. Wrap around\n// the document if there are no more matches.\nfunction findNextOccurrence(state, query) {\n let { main, ranges } = state.selection;\n let word = state.wordAt(main.head), fullWord = word && word.from == main.from && word.to == main.to;\n for (let cycled = false, cursor = new SearchCursor(state.doc, query, ranges[ranges.length - 1].to);;) {\n cursor.next();\n if (cursor.done) {\n if (cycled)\n return null;\n cursor = new SearchCursor(state.doc, query, 0, Math.max(0, ranges[ranges.length - 1].from - 1));\n cycled = true;\n }\n else {\n if (cycled && ranges.some(r => r.from == cursor.value.from))\n continue;\n if (fullWord) {\n let word = state.wordAt(cursor.value.from);\n if (!word || word.from != cursor.value.from || word.to != cursor.value.to)\n continue;\n }\n return cursor.value;\n }\n }\n}\n/**\nSelect next occurrence of the current selection. Expand selection\nto the surrounding word when the selection is empty.\n*/\nconst selectNextOccurrence = ({ state, dispatch }) => {\n let { ranges } = state.selection;\n if (ranges.some(sel => sel.from === sel.to))\n return selectWord({ state, dispatch });\n let searchedText = state.sliceDoc(ranges[0].from, ranges[0].to);\n if (state.selection.ranges.some(r => state.sliceDoc(r.from, r.to) != searchedText))\n return false;\n let range = findNextOccurrence(state, searchedText);\n if (!range)\n return false;\n dispatch(state.update({\n selection: state.selection.addRange(EditorSelection.range(range.from, range.to), false),\n effects: EditorView.scrollIntoView(range.to)\n }));\n return true;\n};\n\nconst searchConfigFacet = /*@__PURE__*/Facet.define({\n combine(configs) {\n return combineConfig(configs, {\n top: false,\n caseSensitive: false,\n literal: false,\n regexp: false,\n wholeWord: false,\n createPanel: view => new SearchPanel(view),\n scrollToMatch: range => EditorView.scrollIntoView(range)\n });\n }\n});\n/**\nAdd search state to the editor configuration, and optionally\nconfigure the search extension.\n([`openSearchPanel`](https://codemirror.net/6/docs/ref/#search.openSearchPanel) will automatically\nenable this if it isn't already on).\n*/\nfunction search(config) {\n return config ? [searchConfigFacet.of(config), searchExtensions] : searchExtensions;\n}\n/**\nA search query. Part of the editor's search state.\n*/\nclass SearchQuery {\n /**\n Create a query object.\n */\n constructor(config) {\n this.search = config.search;\n this.caseSensitive = !!config.caseSensitive;\n this.literal = !!config.literal;\n this.regexp = !!config.regexp;\n this.replace = config.replace || \"\";\n this.valid = !!this.search && (!this.regexp || validRegExp(this.search));\n this.unquoted = this.unquote(this.search);\n this.wholeWord = !!config.wholeWord;\n this.test = config.test;\n }\n /**\n @internal\n */\n unquote(text) {\n return this.literal ? text :\n text.replace(/\\\\([nrt\\\\])/g, (_, ch) => ch == \"n\" ? \"\\n\" : ch == \"r\" ? \"\\r\" : ch == \"t\" ? \"\\t\" : \"\\\\\");\n }\n /**\n Compare this query to another query.\n */\n eq(other) {\n return this.search == other.search && this.replace == other.replace &&\n this.caseSensitive == other.caseSensitive && this.regexp == other.regexp &&\n this.wholeWord == other.wholeWord && this.test == other.test;\n }\n /**\n @internal\n */\n create() {\n return this.regexp ? new RegExpQuery(this) : new StringQuery(this);\n }\n /**\n Get a search cursor for this query, searching through the given\n range in the given state.\n */\n getCursor(state, from = 0, to) {\n let st = state.doc ? state : EditorState.create({ doc: state });\n if (to == null)\n to = st.doc.length;\n return this.regexp ? regexpCursor(this, st, from, to) : stringCursor(this, st, from, to);\n }\n}\nclass QueryType {\n constructor(spec) {\n this.spec = spec;\n }\n}\nfunction wrapStringTest(test, state, inner) {\n return (from, to, buffer, bufferPos) => {\n if (inner && !inner(from, to, buffer, bufferPos))\n return false;\n let match = from >= bufferPos && to <= bufferPos + buffer.length\n ? buffer.slice(from - bufferPos, to - bufferPos)\n : state.doc.sliceString(from, to);\n return test(match, state, from, to);\n };\n}\nfunction stringCursor(spec, state, from, to) {\n let test;\n if (spec.wholeWord)\n test = stringWordTest(state.doc, state.charCategorizer(state.selection.main.head));\n if (spec.test)\n test = wrapStringTest(spec.test, state, test);\n return new SearchCursor(state.doc, spec.unquoted, from, to, spec.caseSensitive ? undefined : x => x.toLowerCase(), test);\n}\nfunction stringWordTest(doc, categorizer) {\n return (from, to, buf, bufPos) => {\n if (bufPos > from || bufPos + buf.length < to) {\n bufPos = Math.max(0, from - 2);\n buf = doc.sliceString(bufPos, Math.min(doc.length, to + 2));\n }\n return (categorizer(charBefore(buf, from - bufPos)) != CharCategory.Word ||\n categorizer(charAfter(buf, from - bufPos)) != CharCategory.Word) &&\n (categorizer(charAfter(buf, to - bufPos)) != CharCategory.Word ||\n categorizer(charBefore(buf, to - bufPos)) != CharCategory.Word);\n };\n}\nclass StringQuery extends QueryType {\n constructor(spec) {\n super(spec);\n }\n nextMatch(state, curFrom, curTo) {\n let cursor = stringCursor(this.spec, state, curTo, state.doc.length).nextOverlapping();\n if (cursor.done) {\n let end = Math.min(state.doc.length, curFrom + this.spec.unquoted.length);\n cursor = stringCursor(this.spec, state, 0, end).nextOverlapping();\n }\n return cursor.done || cursor.value.from == curFrom && cursor.value.to == curTo ? null : cursor.value;\n }\n // Searching in reverse is, rather than implementing an inverted search\n // cursor, done by scanning chunk after chunk forward.\n prevMatchInRange(state, from, to) {\n for (let pos = to;;) {\n let start = Math.max(from, pos - 10000 /* FindPrev.ChunkSize */ - this.spec.unquoted.length);\n let cursor = stringCursor(this.spec, state, start, pos), range = null;\n while (!cursor.nextOverlapping().done)\n range = cursor.value;\n if (range)\n return range;\n if (start == from)\n return null;\n pos -= 10000 /* FindPrev.ChunkSize */;\n }\n }\n prevMatch(state, curFrom, curTo) {\n let found = this.prevMatchInRange(state, 0, curFrom);\n if (!found)\n found = this.prevMatchInRange(state, Math.max(0, curTo - this.spec.unquoted.length), state.doc.length);\n return found && (found.from != curFrom || found.to != curTo) ? found : null;\n }\n getReplacement(_result) { return this.spec.unquote(this.spec.replace); }\n matchAll(state, limit) {\n let cursor = stringCursor(this.spec, state, 0, state.doc.length), ranges = [];\n while (!cursor.next().done) {\n if (ranges.length >= limit)\n return null;\n ranges.push(cursor.value);\n }\n return ranges;\n }\n highlight(state, from, to, add) {\n let cursor = stringCursor(this.spec, state, Math.max(0, from - this.spec.unquoted.length), Math.min(to + this.spec.unquoted.length, state.doc.length));\n while (!cursor.next().done)\n add(cursor.value.from, cursor.value.to);\n }\n}\nfunction wrapRegexpTest(test, state, inner) {\n return (from, to, match) => {\n return (!inner || inner(from, to, match)) && test(match[0], state, from, to);\n };\n}\nfunction regexpCursor(spec, state, from, to) {\n let test;\n if (spec.wholeWord)\n test = regexpWordTest(state.charCategorizer(state.selection.main.head));\n if (spec.test)\n test = wrapRegexpTest(spec.test, state, test);\n return new RegExpCursor(state.doc, spec.search, { ignoreCase: !spec.caseSensitive, test }, from, to);\n}\nfunction charBefore(str, index) {\n return str.slice(findClusterBreak(str, index, false), index);\n}\nfunction charAfter(str, index) {\n return str.slice(index, findClusterBreak(str, index));\n}\nfunction regexpWordTest(categorizer) {\n return (_from, _to, match) => !match[0].length ||\n (categorizer(charBefore(match.input, match.index)) != CharCategory.Word ||\n categorizer(charAfter(match.input, match.index)) != CharCategory.Word) &&\n (categorizer(charAfter(match.input, match.index + match[0].length)) != CharCategory.Word ||\n categorizer(charBefore(match.input, match.index + match[0].length)) != CharCategory.Word);\n}\nclass RegExpQuery extends QueryType {\n nextMatch(state, curFrom, curTo) {\n let cursor = regexpCursor(this.spec, state, curTo, state.doc.length).next();\n if (cursor.done)\n cursor = regexpCursor(this.spec, state, 0, curFrom).next();\n return cursor.done ? null : cursor.value;\n }\n prevMatchInRange(state, from, to) {\n for (let size = 1;; size++) {\n let start = Math.max(from, to - size * 10000 /* FindPrev.ChunkSize */);\n let cursor = regexpCursor(this.spec, state, start, to), range = null;\n while (!cursor.next().done)\n range = cursor.value;\n if (range && (start == from || range.from > start + 10))\n return range;\n if (start == from)\n return null;\n }\n }\n prevMatch(state, curFrom, curTo) {\n return this.prevMatchInRange(state, 0, curFrom) ||\n this.prevMatchInRange(state, curTo, state.doc.length);\n }\n getReplacement(result) {\n return this.spec.unquote(this.spec.replace).replace(/\\$([$&]|\\d+)/g, (m, i) => {\n if (i == \"&\")\n return result.match[0];\n if (i == \"$\")\n return \"$\";\n for (let l = i.length; l > 0; l--) {\n let n = +i.slice(0, l);\n if (n > 0 && n < result.match.length)\n return result.match[n] + i.slice(l);\n }\n return m;\n });\n }\n matchAll(state, limit) {\n let cursor = regexpCursor(this.spec, state, 0, state.doc.length), ranges = [];\n while (!cursor.next().done) {\n if (ranges.length >= limit)\n return null;\n ranges.push(cursor.value);\n }\n return ranges;\n }\n highlight(state, from, to, add) {\n let cursor = regexpCursor(this.spec, state, Math.max(0, from - 250 /* RegExp.HighlightMargin */), Math.min(to + 250 /* RegExp.HighlightMargin */, state.doc.length));\n while (!cursor.next().done)\n add(cursor.value.from, cursor.value.to);\n }\n}\n/**\nA state effect that updates the current search query. Note that\nthis only has an effect if the search state has been initialized\n(by including [`search`](https://codemirror.net/6/docs/ref/#search.search) in your configuration or\nby running [`openSearchPanel`](https://codemirror.net/6/docs/ref/#search.openSearchPanel) at least\nonce).\n*/\nconst setSearchQuery = /*@__PURE__*/StateEffect.define();\nconst togglePanel = /*@__PURE__*/StateEffect.define();\nconst searchState = /*@__PURE__*/StateField.define({\n create(state) {\n return new SearchState(defaultQuery(state).create(), null);\n },\n update(value, tr) {\n for (let effect of tr.effects) {\n if (effect.is(setSearchQuery))\n value = new SearchState(effect.value.create(), value.panel);\n else if (effect.is(togglePanel))\n value = new SearchState(value.query, effect.value ? createSearchPanel : null);\n }\n return value;\n },\n provide: f => showPanel.from(f, val => val.panel)\n});\n/**\nGet the current search query from an editor state.\n*/\nfunction getSearchQuery(state) {\n let curState = state.field(searchState, false);\n return curState ? curState.query.spec : defaultQuery(state);\n}\n/**\nQuery whether the search panel is open in the given editor state.\n*/\nfunction searchPanelOpen(state) {\n var _a;\n return ((_a = state.field(searchState, false)) === null || _a === void 0 ? void 0 : _a.panel) != null;\n}\nclass SearchState {\n constructor(query, panel) {\n this.query = query;\n this.panel = panel;\n }\n}\nconst matchMark = /*@__PURE__*/Decoration.mark({ class: \"cm-searchMatch\" }), selectedMatchMark = /*@__PURE__*/Decoration.mark({ class: \"cm-searchMatch cm-searchMatch-selected\" });\nconst searchHighlighter = /*@__PURE__*/ViewPlugin.fromClass(class {\n constructor(view) {\n this.view = view;\n this.decorations = this.highlight(view.state.field(searchState));\n }\n update(update) {\n let state = update.state.field(searchState);\n if (state != update.startState.field(searchState) || update.docChanged || update.selectionSet || update.viewportChanged)\n this.decorations = this.highlight(state);\n }\n highlight({ query, panel }) {\n if (!panel || !query.spec.valid)\n return Decoration.none;\n let { view } = this;\n let builder = new RangeSetBuilder();\n for (let i = 0, ranges = view.visibleRanges, l = ranges.length; i < l; i++) {\n let { from, to } = ranges[i];\n while (i < l - 1 && to > ranges[i + 1].from - 2 * 250 /* RegExp.HighlightMargin */)\n to = ranges[++i].to;\n query.highlight(view.state, from, to, (from, to) => {\n let selected = view.state.selection.ranges.some(r => r.from == from && r.to == to);\n builder.add(from, to, selected ? selectedMatchMark : matchMark);\n });\n }\n return builder.finish();\n }\n}, {\n decorations: v => v.decorations\n});\nfunction searchCommand(f) {\n return view => {\n let state = view.state.field(searchState, false);\n return state && state.query.spec.valid ? f(view, state) : openSearchPanel(view);\n };\n}\n/**\nOpen the search panel if it isn't already open, and move the\nselection to the first match after the current main selection.\nWill wrap around to the start of the document when it reaches the\nend.\n*/\nconst findNext = /*@__PURE__*/searchCommand((view, { query }) => {\n let { to } = view.state.selection.main;\n let next = query.nextMatch(view.state, to, to);\n if (!next)\n return false;\n let selection = EditorSelection.single(next.from, next.to);\n let config = view.state.facet(searchConfigFacet);\n view.dispatch({\n selection,\n effects: [announceMatch(view, next), config.scrollToMatch(selection.main, view)],\n userEvent: \"select.search\"\n });\n selectSearchInput(view);\n return true;\n});\n/**\nMove the selection to the previous instance of the search query,\nbefore the current main selection. Will wrap past the start\nof the document to start searching at the end again.\n*/\nconst findPrevious = /*@__PURE__*/searchCommand((view, { query }) => {\n let { state } = view, { from } = state.selection.main;\n let prev = query.prevMatch(state, from, from);\n if (!prev)\n return false;\n let selection = EditorSelection.single(prev.from, prev.to);\n let config = view.state.facet(searchConfigFacet);\n view.dispatch({\n selection,\n effects: [announceMatch(view, prev), config.scrollToMatch(selection.main, view)],\n userEvent: \"select.search\"\n });\n selectSearchInput(view);\n return true;\n});\n/**\nSelect all instances of the search query.\n*/\nconst selectMatches = /*@__PURE__*/searchCommand((view, { query }) => {\n let ranges = query.matchAll(view.state, 1000);\n if (!ranges || !ranges.length)\n return false;\n view.dispatch({\n selection: EditorSelection.create(ranges.map(r => EditorSelection.range(r.from, r.to))),\n userEvent: \"select.search.matches\"\n });\n return true;\n});\n/**\nSelect all instances of the currently selected text.\n*/\nconst selectSelectionMatches = ({ state, dispatch }) => {\n let sel = state.selection;\n if (sel.ranges.length > 1 || sel.main.empty)\n return false;\n let { from, to } = sel.main;\n let ranges = [], main = 0;\n for (let cur = new SearchCursor(state.doc, state.sliceDoc(from, to)); !cur.next().done;) {\n if (ranges.length > 1000)\n return false;\n if (cur.value.from == from)\n main = ranges.length;\n ranges.push(EditorSelection.range(cur.value.from, cur.value.to));\n }\n dispatch(state.update({\n selection: EditorSelection.create(ranges, main),\n userEvent: \"select.search.matches\"\n }));\n return true;\n};\n/**\nReplace the current match of the search query.\n*/\nconst replaceNext = /*@__PURE__*/searchCommand((view, { query }) => {\n let { state } = view, { from, to } = state.selection.main;\n if (state.readOnly)\n return false;\n let match = query.nextMatch(state, from, from);\n if (!match)\n return false;\n let next = match;\n let changes = [], selection, replacement;\n let effects = [];\n if (!next.precise) {\n next = query.nextMatch(state, next.from, next.to);\n }\n else if (next.from == from && next.to == to) {\n replacement = state.toText(query.getReplacement(next));\n changes.push({ from: next.from, to: next.to, insert: replacement });\n effects.push(EditorView.announce.of(state.phrase(\"replaced match on line $\", state.doc.lineAt(from).number) + \".\"));\n }\n let changeSet = view.state.changes(changes);\n if (next) {\n selection = EditorSelection.single(next.from, next.to).map(changeSet);\n effects.push(announceMatch(view, next));\n effects.push(state.facet(searchConfigFacet).scrollToMatch(selection.main, view));\n }\n view.dispatch({\n changes: changeSet,\n selection,\n effects,\n userEvent: \"input.replace\"\n });\n return true;\n});\n/**\nReplace all instances of the search query with the given\nreplacement.\n*/\nconst replaceAll = /*@__PURE__*/searchCommand((view, { query }) => {\n if (view.state.readOnly)\n return false;\n let changes = [];\n for (let match of query.matchAll(view.state, 1e9)) {\n let { from, to, precise } = match;\n if (precise)\n changes.push({ from, to, insert: query.getReplacement(match) });\n }\n if (!changes.length)\n return false;\n let announceText = view.state.phrase(\"replaced $ matches\", changes.length) + \".\";\n view.dispatch({\n changes,\n effects: EditorView.announce.of(announceText),\n userEvent: \"input.replace.all\"\n });\n return true;\n});\nfunction createSearchPanel(view) {\n return view.state.facet(searchConfigFacet).createPanel(view);\n}\nfunction defaultQuery(state, fallback) {\n var _a, _b, _c, _d, _e;\n let sel = state.selection.main;\n let selText = sel.empty || sel.to > sel.from + 100 ? \"\" : state.sliceDoc(sel.from, sel.to);\n if (fallback && !selText)\n return fallback;\n let config = state.facet(searchConfigFacet);\n return new SearchQuery({\n search: ((_a = fallback === null || fallback === void 0 ? void 0 : fallback.literal) !== null && _a !== void 0 ? _a : config.literal) ? selText : selText.replace(/\\n/g, \"\\\\n\"),\n caseSensitive: (_b = fallback === null || fallback === void 0 ? void 0 : fallback.caseSensitive) !== null && _b !== void 0 ? _b : config.caseSensitive,\n literal: (_c = fallback === null || fallback === void 0 ? void 0 : fallback.literal) !== null && _c !== void 0 ? _c : config.literal,\n regexp: (_d = fallback === null || fallback === void 0 ? void 0 : fallback.regexp) !== null && _d !== void 0 ? _d : config.regexp,\n wholeWord: (_e = fallback === null || fallback === void 0 ? void 0 : fallback.wholeWord) !== null && _e !== void 0 ? _e : config.wholeWord\n });\n}\nfunction getSearchInput(view) {\n let panel = getPanel(view, createSearchPanel);\n return panel && panel.dom.querySelector(\"[main-field]\");\n}\nfunction selectSearchInput(view) {\n let input = getSearchInput(view);\n if (input && input == view.root.activeElement)\n input.select();\n}\n/**\nMake sure the search panel is open and focused.\n*/\nconst openSearchPanel = view => {\n let state = view.state.field(searchState, false);\n if (state && state.panel) {\n let searchInput = getSearchInput(view);\n if (searchInput && searchInput != view.root.activeElement) {\n let query = defaultQuery(view.state, state.query.spec);\n if (query.valid)\n view.dispatch({ effects: setSearchQuery.of(query) });\n searchInput.focus();\n searchInput.select();\n }\n }\n else {\n view.dispatch({ effects: [\n togglePanel.of(true),\n state ? setSearchQuery.of(defaultQuery(view.state, state.query.spec)) : StateEffect.appendConfig.of(searchExtensions)\n ] });\n }\n return true;\n};\n/**\nClose the search panel.\n*/\nconst closeSearchPanel = view => {\n let state = view.state.field(searchState, false);\n if (!state || !state.panel)\n return false;\n let panel = getPanel(view, createSearchPanel);\n if (panel && panel.dom.contains(view.root.activeElement))\n view.focus();\n view.dispatch({ effects: togglePanel.of(false) });\n return true;\n};\n/**\nDefault search-related key bindings.\n\n - Mod-f: [`openSearchPanel`](https://codemirror.net/6/docs/ref/#search.openSearchPanel)\n - F3, Mod-g: [`findNext`](https://codemirror.net/6/docs/ref/#search.findNext)\n - Shift-F3, Shift-Mod-g: [`findPrevious`](https://codemirror.net/6/docs/ref/#search.findPrevious)\n - Mod-Alt-g: [`gotoLine`](https://codemirror.net/6/docs/ref/#search.gotoLine)\n - Mod-d: [`selectNextOccurrence`](https://codemirror.net/6/docs/ref/#search.selectNextOccurrence)\n*/\nconst searchKeymap = [\n { key: \"Mod-f\", run: openSearchPanel, scope: \"editor search-panel\" },\n { key: \"F3\", run: findNext, shift: findPrevious, scope: \"editor search-panel\", preventDefault: true },\n { key: \"Mod-g\", run: findNext, shift: findPrevious, scope: \"editor search-panel\", preventDefault: true },\n { key: \"Escape\", run: closeSearchPanel, scope: \"editor search-panel\" },\n { key: \"Mod-Shift-l\", run: selectSelectionMatches },\n { key: \"Mod-Alt-g\", run: gotoLine },\n { key: \"Mod-d\", run: selectNextOccurrence, preventDefault: true },\n];\nclass SearchPanel {\n constructor(view) {\n this.view = view;\n let query = this.query = view.state.field(searchState).query.spec;\n this.commit = this.commit.bind(this);\n this.searchField = elt(\"input\", {\n value: query.search,\n placeholder: phrase(view, \"Find\"),\n \"aria-label\": phrase(view, \"Find\"),\n class: \"cm-textfield\",\n name: \"search\",\n form: \"\",\n \"main-field\": \"true\",\n onchange: this.commit,\n onkeyup: this.commit\n });\n this.replaceField = elt(\"input\", {\n value: query.replace,\n placeholder: phrase(view, \"Replace\"),\n \"aria-label\": phrase(view, \"Replace\"),\n class: \"cm-textfield\",\n name: \"replace\",\n form: \"\",\n onchange: this.commit,\n onkeyup: this.commit\n });\n this.caseField = elt(\"input\", {\n type: \"checkbox\",\n name: \"case\",\n form: \"\",\n checked: query.caseSensitive,\n onchange: this.commit\n });\n this.reField = elt(\"input\", {\n type: \"checkbox\",\n name: \"re\",\n form: \"\",\n checked: query.regexp,\n onchange: this.commit\n });\n this.wordField = elt(\"input\", {\n type: \"checkbox\",\n name: \"word\",\n form: \"\",\n checked: query.wholeWord,\n onchange: this.commit\n });\n function button(name, onclick, content) {\n return elt(\"button\", { class: \"cm-button\", name, onclick, type: \"button\" }, content);\n }\n this.dom = elt(\"div\", { onkeydown: (e) => this.keydown(e), class: \"cm-search\" }, [\n this.searchField,\n button(\"next\", () => findNext(view), [phrase(view, \"next\")]),\n button(\"prev\", () => findPrevious(view), [phrase(view, \"previous\")]),\n button(\"select\", () => selectMatches(view), [phrase(view, \"all\")]),\n elt(\"label\", null, [this.caseField, phrase(view, \"match case\")]),\n elt(\"label\", null, [this.reField, phrase(view, \"regexp\")]),\n elt(\"label\", null, [this.wordField, phrase(view, \"by word\")]),\n ...view.state.readOnly ? [] : [\n elt(\"br\"),\n this.replaceField,\n button(\"replace\", () => replaceNext(view), [phrase(view, \"replace\")]),\n button(\"replaceAll\", () => replaceAll(view), [phrase(view, \"replace all\")])\n ],\n elt(\"button\", {\n name: \"close\",\n onclick: () => closeSearchPanel(view),\n \"aria-label\": phrase(view, \"close\"),\n type: \"button\"\n }, [\"×\"])\n ]);\n }\n commit() {\n let query = new SearchQuery({\n search: this.searchField.value,\n caseSensitive: this.caseField.checked,\n regexp: this.reField.checked,\n wholeWord: this.wordField.checked,\n replace: this.replaceField.value,\n });\n if (!query.eq(this.query)) {\n this.query = query;\n this.view.dispatch({ effects: setSearchQuery.of(query) });\n }\n }\n keydown(e) {\n if (runScopeHandlers(this.view, e, \"search-panel\")) {\n e.preventDefault();\n }\n else if (e.keyCode == 13 && e.target == this.searchField) {\n e.preventDefault();\n (e.shiftKey ? findPrevious : findNext)(this.view);\n }\n else if (e.keyCode == 13 && e.target == this.replaceField) {\n e.preventDefault();\n replaceNext(this.view);\n }\n }\n update(update) {\n for (let tr of update.transactions)\n for (let effect of tr.effects) {\n if (effect.is(setSearchQuery) && !effect.value.eq(this.query))\n this.setQuery(effect.value);\n }\n }\n setQuery(query) {\n this.query = query;\n this.searchField.value = query.search;\n this.replaceField.value = query.replace;\n this.caseField.checked = query.caseSensitive;\n this.reField.checked = query.regexp;\n this.wordField.checked = query.wholeWord;\n }\n mount() {\n this.searchField.select();\n }\n get pos() { return 80; }\n get top() { return this.view.state.facet(searchConfigFacet).top; }\n}\nfunction phrase(view, phrase) { return view.state.phrase(phrase); }\nconst AnnounceMargin = 30;\nconst Break = /[\\s\\.,:;?!]/;\nfunction announceMatch(view, { from, to }) {\n let line = view.state.doc.lineAt(from), lineEnd = view.state.doc.lineAt(to).to;\n let start = Math.max(line.from, from - AnnounceMargin), end = Math.min(lineEnd, to + AnnounceMargin);\n let text = view.state.sliceDoc(start, end);\n if (start != line.from) {\n for (let i = 0; i < AnnounceMargin; i++)\n if (!Break.test(text[i + 1]) && Break.test(text[i])) {\n text = text.slice(i);\n break;\n }\n }\n if (end != lineEnd) {\n for (let i = text.length - 1; i > text.length - AnnounceMargin; i--)\n if (!Break.test(text[i - 1]) && Break.test(text[i])) {\n text = text.slice(0, i);\n break;\n }\n }\n return EditorView.announce.of(`${view.state.phrase(\"current match\")}. ${text} ${view.state.phrase(\"on line\")} ${line.number}.`);\n}\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n \".cm-panel.cm-search\": {\n padding: \"2px 6px 4px\",\n position: \"relative\",\n \"& [name=close]\": {\n position: \"absolute\",\n top: \"0\",\n right: \"4px\",\n backgroundColor: \"inherit\",\n border: \"none\",\n font: \"inherit\",\n padding: 0,\n margin: 0\n },\n \"& input, & button, & label\": {\n margin: \".2em .6em .2em 0\"\n },\n \"& input[type=checkbox]\": {\n marginRight: \".2em\"\n },\n \"& label\": {\n fontSize: \"80%\",\n whiteSpace: \"pre\"\n }\n },\n \"&light .cm-searchMatch\": { backgroundColor: \"#ffff0054\" },\n \"&dark .cm-searchMatch\": { backgroundColor: \"#00ffff8a\" },\n \"&light .cm-searchMatch-selected\": { backgroundColor: \"#ff6a0054\" },\n \"&dark .cm-searchMatch-selected\": { backgroundColor: \"#ff00ff8a\" }\n});\nconst searchExtensions = [\n searchState,\n /*@__PURE__*/Prec.low(searchHighlighter),\n baseTheme\n];\n\nexport { RegExpCursor, SearchCursor, SearchQuery, closeSearchPanel, findNext, findPrevious, getSearchQuery, gotoLine, highlightSelectionMatches, openSearchPanel, replaceAll, replaceNext, search, searchKeymap, searchPanelOpen, selectMatches, selectNextOccurrence, selectSelectionMatches, setSearchQuery };\n","import { Decoration, showPanel, EditorView, ViewPlugin, gutter, showTooltip, hoverTooltip, getPanel, activateHover, logException, WidgetType, GutterMarker } from '@codemirror/view';\nimport { StateEffect, StateField, Facet, combineConfig, RangeSet, RangeSetBuilder } from '@codemirror/state';\nimport elt from 'crelt';\n\nclass SelectedDiagnostic {\n constructor(from, to, diagnostic) {\n this.from = from;\n this.to = to;\n this.diagnostic = diagnostic;\n }\n}\nclass LintState {\n constructor(diagnostics, panel, selected) {\n this.diagnostics = diagnostics;\n this.panel = panel;\n this.selected = selected;\n }\n static init(diagnostics, panel, state) {\n // Filter the list of diagnostics for which to create markers\n let diagnosticFilter = state.facet(lintConfig).markerFilter;\n if (diagnosticFilter)\n diagnostics = diagnosticFilter(diagnostics, state);\n let sorted = diagnostics.slice().sort((a, b) => a.from - b.from || a.to - b.to);\n let deco = new RangeSetBuilder(), active = [], pos = 0;\n let scan = state.doc.iter(), scanPos = 0, docLen = state.doc.length;\n for (let i = 0;;) {\n let next = i == sorted.length ? null : sorted[i];\n if (!next && !active.length)\n break;\n let from, to;\n if (active.length) {\n from = pos;\n to = active.reduce((p, d) => Math.min(p, d.to), next && next.from > from ? next.from : 1e8);\n }\n else {\n from = next.from;\n if (from > docLen)\n break;\n to = next.to;\n active.push(next);\n i++;\n }\n while (i < sorted.length) {\n let next = sorted[i];\n if (next.from == from && (next.to > next.from || next.to == from)) {\n active.push(next);\n i++;\n to = Math.min(next.to, to);\n }\n else {\n to = Math.min(next.from, to);\n break;\n }\n }\n to = Math.min(to, docLen);\n let widget = false;\n if (active.some(d => d.from == from && (d.to == to || to == docLen))) {\n widget = from == to;\n if (!widget && to - from < 10) {\n let behind = from - (scanPos + scan.value.length);\n if (behind > 0) {\n scan.next(behind);\n scanPos = from;\n }\n for (let check = from;;) {\n if (check >= to) {\n widget = true;\n break;\n }\n if (!scan.lineBreak && scanPos + scan.value.length > check)\n break;\n check = scanPos + scan.value.length;\n scanPos += scan.value.length;\n scan.next();\n }\n }\n }\n let sev = maxSeverity(active);\n if (widget) {\n deco.add(from, from, Decoration.widget({\n widget: new DiagnosticWidget(sev),\n diagnostics: active.slice()\n }));\n }\n else {\n let markClass = active.reduce((c, d) => d.markClass ? c + \" \" + d.markClass : c, \"\");\n deco.add(from, to, Decoration.mark({\n class: \"cm-lintRange cm-lintRange-\" + sev + markClass,\n diagnostics: active.slice(),\n inclusiveEnd: active.some(a => a.to > to)\n }));\n }\n pos = to;\n if (pos == docLen)\n break;\n for (let i = 0; i < active.length; i++)\n if (active[i].to <= pos)\n active.splice(i--, 1);\n }\n let set = deco.finish();\n return new LintState(set, panel, findDiagnostic(set));\n }\n}\nfunction findDiagnostic(diagnostics, diagnostic = null, after = 0) {\n let found = null;\n diagnostics.between(after, 1e9, (from, to, { spec }) => {\n if (diagnostic && spec.diagnostics.indexOf(diagnostic) < 0)\n return;\n if (!found)\n found = new SelectedDiagnostic(from, to, diagnostic || spec.diagnostics[0]);\n else if (spec.diagnostics.indexOf(found.diagnostic) < 0)\n return false;\n else\n found = new SelectedDiagnostic(found.from, to, found.diagnostic);\n });\n return found;\n}\nfunction hideTooltip(tr, tooltip) {\n let from = tooltip.pos, to = tooltip.end || from;\n let result = tr.state.facet(lintConfig).hideOn(tr, from, to);\n if (result != null)\n return result;\n let line = tr.startState.doc.lineAt(tooltip.pos);\n return !!(tr.effects.some(e => e.is(setDiagnosticsEffect)) || tr.changes.touchesRange(line.from, Math.max(line.to, to)));\n}\nfunction maybeEnableLint(state, effects) {\n return state.field(lintState, false) ? effects : effects.concat(StateEffect.appendConfig.of(lintExtensions));\n}\n/**\nReturns a transaction spec which updates the current set of\ndiagnostics, and enables the lint extension if if wasn't already\nactive.\n*/\nfunction setDiagnostics(state, diagnostics) {\n return {\n effects: maybeEnableLint(state, [setDiagnosticsEffect.of(diagnostics)])\n };\n}\n/**\nThe state effect that updates the set of active diagnostics. Can\nbe useful when writing an extension that needs to track these.\n*/\nconst setDiagnosticsEffect = /*@__PURE__*/StateEffect.define();\nconst togglePanel = /*@__PURE__*/StateEffect.define();\nconst movePanelSelection = /*@__PURE__*/StateEffect.define();\nconst lintState = /*@__PURE__*/StateField.define({\n create() {\n return new LintState(Decoration.none, null, null);\n },\n update(value, tr) {\n if (tr.docChanged && value.diagnostics.size) {\n let mapped = value.diagnostics.map(tr.changes), selected = null, panel = value.panel;\n if (value.selected) {\n let selPos = tr.changes.mapPos(value.selected.from, 1);\n selected = findDiagnostic(mapped, value.selected.diagnostic, selPos) || findDiagnostic(mapped, null, selPos);\n }\n if (!mapped.size && panel && tr.state.facet(lintConfig).autoPanel)\n panel = null;\n value = new LintState(mapped, panel, selected);\n }\n for (let effect of tr.effects) {\n if (effect.is(setDiagnosticsEffect)) {\n let panel = !tr.state.facet(lintConfig).autoPanel ? value.panel : effect.value.length ? LintPanel.open : null;\n value = LintState.init(effect.value, panel, tr.state);\n }\n else if (effect.is(togglePanel)) {\n value = new LintState(value.diagnostics, effect.value ? LintPanel.open : null, value.selected);\n }\n else if (effect.is(movePanelSelection)) {\n value = new LintState(value.diagnostics, value.panel, effect.value);\n }\n }\n return value;\n },\n provide: f => [showPanel.from(f, val => val.panel),\n EditorView.decorations.from(f, s => s.diagnostics)]\n});\n/**\nReturns the number of active lint diagnostics in the given state.\n*/\nfunction diagnosticCount(state) {\n let lint = state.field(lintState, false);\n return lint ? lint.diagnostics.size : 0;\n}\nconst activeMark = /*@__PURE__*/Decoration.mark({ class: \"cm-lintRange cm-lintRange-active\" });\nfunction lintTooltip(view, pos, side) {\n let { diagnostics } = view.state.field(lintState);\n let found, start = -1, end = -1;\n diagnostics.between(pos - (side < 0 ? 1 : 0), pos + (side > 0 ? 1 : 0), (from, to, { spec }) => {\n if (pos >= from && pos <= to &&\n (from == to || ((pos > from || side > 0) && (pos < to || side < 0)))) {\n found = spec.diagnostics;\n start = from;\n end = to;\n return false;\n }\n });\n let diagnosticFilter = view.state.facet(lintConfig).tooltipFilter;\n if (found && diagnosticFilter)\n found = diagnosticFilter(found, view.state);\n if (!found)\n return null;\n return {\n pos: start,\n end: end,\n above: true,\n create() {\n return { dom: diagnosticsTooltip(view, found) };\n }\n };\n}\nfunction diagnosticsTooltip(view, diagnostics) {\n return elt(\"ul\", { class: \"cm-tooltip-lint\" }, diagnostics.map(d => renderDiagnostic(view, d, false)));\n}\n/**\nCommand to open and focus the lint panel.\n*/\nconst openLintPanel = (view) => {\n let field = view.state.field(lintState, false);\n if (!field || !field.panel)\n view.dispatch({ effects: maybeEnableLint(view.state, [togglePanel.of(true)]) });\n let panel = getPanel(view, LintPanel.open);\n if (panel)\n panel.dom.querySelector(\".cm-panel-lint ul\").focus();\n return true;\n};\n/**\nCommand to close the lint panel, when open.\n*/\nconst closeLintPanel = (view) => {\n let field = view.state.field(lintState, false);\n if (!field || !field.panel)\n return false;\n view.dispatch({ effects: togglePanel.of(false) });\n return true;\n};\n/**\nMove the selection to the next diagnostic.\n*/\nconst nextDiagnostic = (view) => {\n let field = view.state.field(lintState, false);\n if (!field)\n return false;\n let sel = view.state.selection.main, next = findDiagnostic(field.diagnostics, null, sel.to + 1);\n if (!next) {\n next = findDiagnostic(field.diagnostics, null, 0);\n if (!next || next.from == sel.from && next.to == sel.to)\n return false;\n }\n view.dispatch({ selection: { anchor: next.from, head: next.to }, scrollIntoView: true });\n activateHover(view, next.from, 1, {\n tooltip: lintHover,\n until: tr => tr.docChanged || tr.newSelection.main.head < next.from || tr.newSelection.main.head > next.to\n });\n return true;\n};\n/**\nMove the selection to the previous diagnostic.\n*/\nconst previousDiagnostic = (view) => {\n var _a;\n let { state } = view, field = state.field(lintState, false);\n if (!field)\n return false;\n let sel = state.selection.main;\n let prevFrom, prevTo, lastFrom, lastTo;\n field.diagnostics.between(0, state.doc.length, (from, to) => {\n if (to < sel.to && (prevFrom == null || prevFrom < from)) {\n prevFrom = from;\n prevTo = to;\n }\n if (lastFrom == null || from > lastFrom) {\n lastFrom = from;\n lastTo = to;\n }\n });\n if (lastFrom == null || prevFrom == null && lastFrom == sel.from)\n return false;\n let from = prevFrom !== null && prevFrom !== void 0 ? prevFrom : lastFrom, to = (_a = prevTo !== null && prevTo !== void 0 ? prevTo : lastTo) !== null && _a !== void 0 ? _a : from;\n view.dispatch({ selection: { anchor: from, head: to }, scrollIntoView: true });\n activateHover(view, from, 1, {\n tooltip: lintHover,\n until: tr => tr.docChanged || tr.newSelection.main.head < from || tr.newSelection.main.head > to\n });\n return true;\n};\n/**\nA set of default key bindings for the lint functionality.\n\n- Ctrl-Shift-m (Cmd-Shift-m on macOS): [`openLintPanel`](https://codemirror.net/6/docs/ref/#lint.openLintPanel)\n- F8: [`nextDiagnostic`](https://codemirror.net/6/docs/ref/#lint.nextDiagnostic)\n*/\nconst lintKeymap = [\n { key: \"Mod-Shift-m\", run: openLintPanel, preventDefault: true },\n { key: \"F8\", run: nextDiagnostic }\n];\nconst lintPlugin = /*@__PURE__*/ViewPlugin.fromClass(class {\n constructor(view) {\n this.view = view;\n this.timeout = -1;\n this.set = true;\n let { delay } = view.state.facet(lintConfig);\n this.lintTime = Date.now() + delay;\n this.run = this.run.bind(this);\n this.timeout = setTimeout(this.run, delay);\n }\n run() {\n clearTimeout(this.timeout);\n let now = Date.now();\n if (now < this.lintTime - 10) {\n this.timeout = setTimeout(this.run, this.lintTime - now);\n }\n else {\n this.set = false;\n let { state } = this.view, { sources } = state.facet(lintConfig);\n if (sources.length)\n batchResults(sources.map(s => Promise.resolve(s(this.view))), annotations => {\n if (this.view.state.doc == state.doc)\n this.view.dispatch(setDiagnostics(this.view.state, annotations.reduce((a, b) => a.concat(b))));\n }, error => { logException(this.view.state, error); });\n }\n }\n update(update) {\n let config = update.state.facet(lintConfig);\n if (update.docChanged || config != update.startState.facet(lintConfig) ||\n config.needsRefresh && config.needsRefresh(update)) {\n this.lintTime = Date.now() + config.delay;\n if (!this.set) {\n this.set = true;\n this.timeout = setTimeout(this.run, config.delay);\n }\n }\n }\n force() {\n if (this.set) {\n this.lintTime = Date.now();\n this.run();\n }\n }\n destroy() {\n clearTimeout(this.timeout);\n }\n});\nfunction batchResults(promises, sink, error) {\n let collected = [], timeout = -1;\n for (let p of promises)\n p.then(value => {\n collected.push(value);\n clearTimeout(timeout);\n if (collected.length == promises.length)\n sink(collected);\n else\n timeout = setTimeout(() => sink(collected), 200);\n }, error);\n}\nconst lintConfig = /*@__PURE__*/Facet.define({\n combine(input) {\n return {\n sources: input.map(i => i.source).filter(x => x != null),\n ...combineConfig(input.map(i => i.config), {\n delay: 750,\n markerFilter: null,\n tooltipFilter: null,\n needsRefresh: null,\n hideOn: () => null,\n }, {\n delay: Math.max,\n markerFilter: combineFilter,\n tooltipFilter: combineFilter,\n needsRefresh: (a, b) => !a ? b : !b ? a : u => a(u) || b(u),\n hideOn: (a, b) => !a ? b : !b ? a : (t, x, y) => a(t, x, y) || b(t, x, y),\n autoPanel: (a, b) => a || b\n })\n };\n }\n});\nfunction combineFilter(a, b) {\n return !a ? b : !b ? a : (d, s) => b(a(d, s), s);\n}\n/**\nGiven a diagnostic source, this function returns an extension that\nenables linting with that source. It will be called whenever the\neditor is idle (after its content changed).\n\nNote that settings given here will apply to all linters active in\nthe editor. If `null` is given as source, this only configures the\nlint extension.\n*/\nfunction linter(source, config = {}) {\n return [\n lintConfig.of({ source, config }),\n lintPlugin,\n lintExtensions\n ];\n}\n/**\nForces any linters [configured](https://codemirror.net/6/docs/ref/#lint.linter) to run when the\neditor is idle to run right away.\n*/\nfunction forceLinting(view) {\n let plugin = view.plugin(lintPlugin);\n if (plugin)\n plugin.force();\n}\nfunction assignKeys(actions) {\n let assigned = [];\n if (actions)\n actions: for (let { name } of actions) {\n for (let i = 0; i < name.length; i++) {\n let ch = name[i];\n if (/[a-zA-Z]/.test(ch) && !assigned.some(c => c.toLowerCase() == ch.toLowerCase())) {\n assigned.push(ch);\n continue actions;\n }\n }\n assigned.push(\"\");\n }\n return assigned;\n}\nfunction renderDiagnostic(view, diagnostic, inPanel) {\n var _a;\n let keys = inPanel ? assignKeys(diagnostic.actions) : [];\n return elt(\"li\", { class: \"cm-diagnostic cm-diagnostic-\" + diagnostic.severity }, elt(\"span\", { class: \"cm-diagnosticText\" }, diagnostic.renderMessage ? diagnostic.renderMessage(view) : diagnostic.message), (_a = diagnostic.actions) === null || _a === void 0 ? void 0 : _a.map((action, i) => {\n let fired = false, click = (e) => {\n e.preventDefault();\n if (fired)\n return;\n fired = true;\n let found = findDiagnostic(view.state.field(lintState).diagnostics, diagnostic);\n if (found)\n action.apply(view, found.from, found.to);\n };\n let { name } = action, keyIndex = keys[i] ? name.indexOf(keys[i]) : -1;\n let nameElt = keyIndex < 0 ? name : [name.slice(0, keyIndex),\n elt(\"u\", name.slice(keyIndex, keyIndex + 1)),\n name.slice(keyIndex + 1)];\n let markClass = action.markClass ? \" \" + action.markClass : \"\";\n return elt(\"button\", {\n type: \"button\",\n class: \"cm-diagnosticAction\" + markClass,\n onclick: click,\n onmousedown: click,\n \"aria-label\": ` Action: ${name}${keyIndex < 0 ? \"\" : ` (access key \"${keys[i]})\"`}.`\n }, nameElt);\n }), diagnostic.source && elt(\"div\", { class: \"cm-diagnosticSource\" }, diagnostic.source));\n}\nclass DiagnosticWidget extends WidgetType {\n constructor(sev) {\n super();\n this.sev = sev;\n }\n eq(other) { return other.sev == this.sev; }\n toDOM() {\n return elt(\"span\", { class: \"cm-lintPoint cm-lintPoint-\" + this.sev });\n }\n}\nclass PanelItem {\n constructor(view, diagnostic) {\n this.diagnostic = diagnostic;\n this.id = \"item_\" + Math.floor(Math.random() * 0xffffffff).toString(16);\n this.dom = renderDiagnostic(view, diagnostic, true);\n this.dom.id = this.id;\n this.dom.setAttribute(\"role\", \"option\");\n }\n}\nclass LintPanel {\n constructor(view) {\n this.view = view;\n this.items = [];\n let onkeydown = (event) => {\n if (event.ctrlKey || event.altKey || event.metaKey)\n return;\n if (event.keyCode == 27) { // Escape\n closeLintPanel(this.view);\n this.view.focus();\n }\n else if (event.keyCode == 38 || event.keyCode == 33) { // ArrowUp, PageUp\n this.moveSelection((this.selectedIndex - 1 + this.items.length) % this.items.length);\n }\n else if (event.keyCode == 40 || event.keyCode == 34) { // ArrowDown, PageDown\n this.moveSelection((this.selectedIndex + 1) % this.items.length);\n }\n else if (event.keyCode == 36) { // Home\n this.moveSelection(0);\n }\n else if (event.keyCode == 35) { // End\n this.moveSelection(this.items.length - 1);\n }\n else if (event.keyCode == 13) { // Enter\n this.view.focus();\n }\n else if (event.keyCode >= 65 && event.keyCode <= 90 && this.selectedIndex >= 0) { // A-Z\n let { diagnostic } = this.items[this.selectedIndex], keys = assignKeys(diagnostic.actions);\n for (let i = 0; i < keys.length; i++)\n if (keys[i].toUpperCase().charCodeAt(0) == event.keyCode) {\n let found = findDiagnostic(this.view.state.field(lintState).diagnostics, diagnostic);\n if (found)\n diagnostic.actions[i].apply(view, found.from, found.to);\n }\n }\n else {\n return;\n }\n event.preventDefault();\n };\n let onclick = (event) => {\n for (let i = 0; i < this.items.length; i++) {\n if (this.items[i].dom.contains(event.target))\n this.moveSelection(i);\n }\n };\n this.list = elt(\"ul\", {\n tabIndex: 0,\n role: \"listbox\",\n \"aria-label\": this.view.state.phrase(\"Diagnostics\"),\n onkeydown,\n onclick\n });\n this.dom = elt(\"div\", { class: \"cm-panel-lint\" }, this.list, elt(\"button\", {\n type: \"button\",\n name: \"close\",\n \"aria-label\": this.view.state.phrase(\"close\"),\n onclick: () => closeLintPanel(this.view)\n }, \"×\"));\n this.update();\n }\n get selectedIndex() {\n let selected = this.view.state.field(lintState).selected;\n if (!selected)\n return -1;\n for (let i = 0; i < this.items.length; i++)\n if (this.items[i].diagnostic == selected.diagnostic)\n return i;\n return -1;\n }\n update() {\n let { diagnostics, selected } = this.view.state.field(lintState);\n let i = 0, needsSync = false, newSelectedItem = null;\n let seen = new Set();\n diagnostics.between(0, this.view.state.doc.length, (_start, _end, { spec }) => {\n for (let diagnostic of spec.diagnostics) {\n if (seen.has(diagnostic))\n continue;\n seen.add(diagnostic);\n let found = -1, item;\n for (let j = i; j < this.items.length; j++)\n if (this.items[j].diagnostic == diagnostic) {\n found = j;\n break;\n }\n if (found < 0) {\n item = new PanelItem(this.view, diagnostic);\n this.items.splice(i, 0, item);\n needsSync = true;\n }\n else {\n item = this.items[found];\n if (found > i) {\n this.items.splice(i, found - i);\n needsSync = true;\n }\n }\n if (selected && item.diagnostic == selected.diagnostic) {\n if (!item.dom.hasAttribute(\"aria-selected\")) {\n item.dom.setAttribute(\"aria-selected\", \"true\");\n newSelectedItem = item;\n }\n }\n else if (item.dom.hasAttribute(\"aria-selected\")) {\n item.dom.removeAttribute(\"aria-selected\");\n }\n i++;\n }\n });\n while (i < this.items.length && !(this.items.length == 1 && this.items[0].diagnostic.from < 0)) {\n needsSync = true;\n this.items.pop();\n }\n if (this.items.length == 0) {\n this.items.push(new PanelItem(this.view, {\n from: -1, to: -1,\n severity: \"info\",\n message: this.view.state.phrase(\"No diagnostics\")\n }));\n needsSync = true;\n }\n if (newSelectedItem) {\n this.list.setAttribute(\"aria-activedescendant\", newSelectedItem.id);\n this.view.requestMeasure({\n key: this,\n read: () => ({ sel: newSelectedItem.dom.getBoundingClientRect(), panel: this.list.getBoundingClientRect() }),\n write: ({ sel, panel }) => {\n let scaleY = panel.height / this.list.offsetHeight;\n if (sel.top < panel.top)\n this.list.scrollTop -= (panel.top - sel.top) / scaleY;\n else if (sel.bottom > panel.bottom)\n this.list.scrollTop += (sel.bottom - panel.bottom) / scaleY;\n }\n });\n }\n else if (this.selectedIndex < 0) {\n this.list.removeAttribute(\"aria-activedescendant\");\n }\n if (needsSync)\n this.sync();\n }\n sync() {\n let domPos = this.list.firstChild;\n function rm() {\n let prev = domPos;\n domPos = prev.nextSibling;\n prev.remove();\n }\n for (let item of this.items) {\n if (item.dom.parentNode == this.list) {\n while (domPos != item.dom)\n rm();\n domPos = item.dom.nextSibling;\n }\n else {\n this.list.insertBefore(item.dom, domPos);\n }\n }\n while (domPos)\n rm();\n }\n moveSelection(selectedIndex) {\n if (this.selectedIndex < 0)\n return;\n let field = this.view.state.field(lintState);\n let selection = findDiagnostic(field.diagnostics, this.items[selectedIndex].diagnostic);\n if (!selection)\n return;\n this.view.dispatch({\n selection: { anchor: selection.from, head: selection.to },\n scrollIntoView: true,\n effects: movePanelSelection.of(selection)\n });\n }\n static open(view) { return new LintPanel(view); }\n}\nfunction svg(content, attrs = `viewBox=\"0 0 40 40\"`) {\n return `url('data:image/svg+xml,<svg xmlns=\"http://www.w3.org/2000/svg\" ${attrs}>${encodeURIComponent(content)}</svg>')`;\n}\nfunction underline(color) {\n return svg(`<path d=\"m0 2.5 l2 -1.5 l1 0 l2 1.5 l1 0\" stroke=\"${color}\" fill=\"none\" stroke-width=\".7\"/>`, `width=\"6\" height=\"3\"`);\n}\nconst baseTheme = /*@__PURE__*/EditorView.baseTheme({\n \".cm-diagnostic\": {\n padding: \"3px 6px 3px 8px\",\n marginLeft: \"-1px\",\n display: \"block\",\n whiteSpace: \"pre-wrap\"\n },\n \".cm-diagnostic-error\": { borderLeft: \"5px solid #d11\" },\n \".cm-diagnostic-warning\": { borderLeft: \"5px solid orange\" },\n \".cm-diagnostic-info\": { borderLeft: \"5px solid #999\" },\n \".cm-diagnostic-hint\": { borderLeft: \"5px solid #66d\" },\n \".cm-diagnosticAction\": {\n font: \"inherit\",\n border: \"none\",\n padding: \"2px 4px\",\n backgroundColor: \"#444\",\n color: \"white\",\n borderRadius: \"3px\",\n marginLeft: \"8px\",\n cursor: \"pointer\"\n },\n \".cm-diagnosticSource\": {\n fontSize: \"70%\",\n opacity: .7\n },\n \".cm-lintRange\": {\n backgroundPosition: \"left bottom\",\n backgroundRepeat: \"repeat-x\",\n paddingBottom: \"0.7px\",\n },\n \".cm-lintRange-error\": { backgroundImage: /*@__PURE__*/underline(\"#f11\") },\n \".cm-lintRange-warning\": { backgroundImage: /*@__PURE__*/underline(\"orange\") },\n \".cm-lintRange-info\": { backgroundImage: /*@__PURE__*/underline(\"#999\") },\n \".cm-lintRange-hint\": { backgroundImage: /*@__PURE__*/underline(\"#66d\") },\n \".cm-lintRange-active\": { backgroundColor: \"#ffdd9980\" },\n \".cm-tooltip-lint\": {\n padding: 0,\n margin: 0\n },\n \".cm-lintPoint\": {\n position: \"relative\",\n \"&:after\": {\n content: '\"\"',\n position: \"absolute\",\n bottom: 0,\n left: \"-2px\",\n borderLeft: \"3px solid transparent\",\n borderRight: \"3px solid transparent\",\n borderBottom: \"4px solid #d11\"\n }\n },\n \".cm-lintPoint-warning\": {\n \"&:after\": { borderBottomColor: \"orange\" }\n },\n \".cm-lintPoint-info\": {\n \"&:after\": { borderBottomColor: \"#999\" }\n },\n \".cm-lintPoint-hint\": {\n \"&:after\": { borderBottomColor: \"#66d\" }\n },\n \".cm-panel.cm-panel-lint\": {\n position: \"relative\",\n \"& ul\": {\n maxHeight: \"100px\",\n overflowY: \"auto\",\n \"& [aria-selected]\": {\n backgroundColor: \"#ddd\",\n \"& u\": { textDecoration: \"underline\" }\n },\n \"&:focus [aria-selected]\": {\n background_fallback: \"#bdf\",\n backgroundColor: \"Highlight\",\n color_fallback: \"white\",\n color: \"HighlightText\"\n },\n \"& u\": { textDecoration: \"none\" },\n padding: 0,\n margin: 0\n },\n \"& [name=close]\": {\n position: \"absolute\",\n top: \"0\",\n right: \"2px\",\n background: \"inherit\",\n border: \"none\",\n font: \"inherit\",\n padding: 0,\n margin: 0\n }\n },\n \"&dark .cm-lintRange-active\": { backgroundColor: \"#86714a80\" },\n \"&dark .cm-panel.cm-panel-lint ul\": {\n \"& [aria-selected]\": {\n backgroundColor: \"#2e343e\",\n },\n }\n});\nfunction severityWeight(sev) {\n return sev == \"error\" ? 4 : sev == \"warning\" ? 3 : sev == \"info\" ? 2 : 1;\n}\nfunction maxSeverity(diagnostics) {\n let sev = \"hint\", weight = 1;\n for (let d of diagnostics) {\n let w = severityWeight(d.severity);\n if (w > weight) {\n weight = w;\n sev = d.severity;\n }\n }\n return sev;\n}\nclass LintGutterMarker extends GutterMarker {\n constructor(diagnostics) {\n super();\n this.diagnostics = diagnostics;\n this.severity = maxSeverity(diagnostics);\n }\n toDOM(view) {\n let elt = document.createElement(\"div\");\n elt.className = \"cm-lint-marker cm-lint-marker-\" + this.severity;\n let diagnostics = this.diagnostics;\n let diagnosticsFilter = view.state.facet(lintGutterConfig).tooltipFilter;\n if (diagnosticsFilter)\n diagnostics = diagnosticsFilter(diagnostics, view.state);\n if (diagnostics.length)\n elt.onmouseover = () => gutterMarkerMouseOver(view, elt, diagnostics);\n return elt;\n }\n}\nfunction trackHoverOn(view, marker) {\n let mousemove = (event) => {\n let rect = marker.getBoundingClientRect();\n if (event.clientX > rect.left - 10 /* Hover.Margin */ && event.clientX < rect.right + 10 /* Hover.Margin */ &&\n event.clientY > rect.top - 10 /* Hover.Margin */ && event.clientY < rect.bottom + 10 /* Hover.Margin */)\n return;\n for (let target = event.target; target; target = target.parentNode) {\n if (target.nodeType == 1 && target.classList.contains(\"cm-tooltip-lint\"))\n return;\n }\n window.removeEventListener(\"mousemove\", mousemove);\n if (view.state.field(lintGutterTooltip))\n view.dispatch({ effects: setLintGutterTooltip.of(null) });\n };\n window.addEventListener(\"mousemove\", mousemove);\n}\nfunction gutterMarkerMouseOver(view, marker, diagnostics) {\n function hovered() {\n let line = view.elementAtHeight(marker.getBoundingClientRect().top + 5 - view.documentTop);\n const linePos = view.coordsAtPos(line.from);\n if (linePos) {\n view.dispatch({ effects: setLintGutterTooltip.of({\n pos: line.from,\n above: false,\n clip: false,\n create() {\n return {\n dom: diagnosticsTooltip(view, diagnostics),\n getCoords: () => marker.getBoundingClientRect()\n };\n }\n }) });\n }\n marker.onmouseout = marker.onmousemove = null;\n trackHoverOn(view, marker);\n }\n let { hoverTime } = view.state.facet(lintGutterConfig);\n let hoverTimeout = setTimeout(hovered, hoverTime);\n marker.onmouseout = () => {\n clearTimeout(hoverTimeout);\n marker.onmouseout = marker.onmousemove = null;\n };\n marker.onmousemove = () => {\n clearTimeout(hoverTimeout);\n hoverTimeout = setTimeout(hovered, hoverTime);\n };\n}\nfunction markersForDiagnostics(doc, diagnostics) {\n let byLine = Object.create(null);\n for (let diagnostic of diagnostics) {\n let line = doc.lineAt(diagnostic.from);\n (byLine[line.from] || (byLine[line.from] = [])).push(diagnostic);\n }\n let markers = [];\n for (let line in byLine) {\n markers.push(new LintGutterMarker(byLine[line]).range(+line));\n }\n return RangeSet.of(markers, true);\n}\nconst lintGutterExtension = /*@__PURE__*/gutter({\n class: \"cm-gutter-lint\",\n markers: view => view.state.field(lintGutterMarkers),\n widgetMarker: (view, widget, block) => {\n let diagnostics = [];\n view.state.field(lintGutterMarkers).between(block.from, block.to, (from, to, value) => {\n if (from > block.from && from < block.to)\n diagnostics.push(...value.diagnostics);\n });\n return diagnostics.length ? new LintGutterMarker(diagnostics) : null;\n }\n});\nconst lintGutterMarkers = /*@__PURE__*/StateField.define({\n create() {\n return RangeSet.empty;\n },\n update(markers, tr) {\n markers = markers.map(tr.changes);\n let diagnosticFilter = tr.state.facet(lintGutterConfig).markerFilter;\n for (let effect of tr.effects) {\n if (effect.is(setDiagnosticsEffect)) {\n let diagnostics = effect.value;\n if (diagnosticFilter)\n diagnostics = diagnosticFilter(diagnostics || [], tr.state);\n markers = markersForDiagnostics(tr.state.doc, diagnostics.slice(0));\n }\n }\n return markers;\n }\n});\nconst setLintGutterTooltip = /*@__PURE__*/StateEffect.define();\nconst lintGutterTooltip = /*@__PURE__*/StateField.define({\n create() { return null; },\n update(tooltip, tr) {\n if (tooltip && tr.docChanged)\n tooltip = hideTooltip(tr, tooltip) ? null : { ...tooltip, pos: tr.changes.mapPos(tooltip.pos) };\n return tr.effects.reduce((t, e) => e.is(setLintGutterTooltip) ? e.value : t, tooltip);\n },\n provide: field => showTooltip.from(field)\n});\nconst lintGutterTheme = /*@__PURE__*/EditorView.baseTheme({\n \".cm-gutter-lint\": {\n width: \"1.4em\",\n \"& .cm-gutterElement\": {\n padding: \".2em\"\n }\n },\n \".cm-lint-marker\": {\n width: \"1em\",\n height: \"1em\"\n },\n \".cm-lint-marker-info\": {\n content: /*@__PURE__*/svg(`<path fill=\"#aaf\" stroke=\"#77e\" stroke-width=\"6\" stroke-linejoin=\"round\" d=\"M5 5L35 5L35 35L5 35Z\"/>`)\n },\n \".cm-lint-marker-warning\": {\n content: /*@__PURE__*/svg(`<path fill=\"#fe8\" stroke=\"#fd7\" stroke-width=\"6\" stroke-linejoin=\"round\" d=\"M20 6L37 35L3 35Z\"/>`),\n },\n \".cm-lint-marker-error\": {\n content: /*@__PURE__*/svg(`<circle cx=\"20\" cy=\"20\" r=\"15\" fill=\"#f87\" stroke=\"#f43\" stroke-width=\"6\"/>`)\n },\n});\nconst lintHover = /*@__PURE__*/hoverTooltip(lintTooltip, { hideOn: hideTooltip });\nconst lintExtensions = [\n lintState,\n /*@__PURE__*/EditorView.decorations.compute([lintState], state => {\n let { selected, panel } = state.field(lintState);\n return !selected || !panel || selected.from == selected.to ? Decoration.none : Decoration.set([\n activeMark.range(selected.from, selected.to)\n ]);\n }),\n lintHover,\n baseTheme\n];\nconst lintGutterConfig = /*@__PURE__*/Facet.define({\n combine(configs) {\n return combineConfig(configs, {\n hoverTime: 300 /* Hover.Time */,\n markerFilter: null,\n tooltipFilter: null\n });\n }\n});\n/**\nReturns an extension that installs a gutter showing markers for\neach line that has diagnostics, which can be hovered over to see\nthe diagnostics.\n*/\nfunction lintGutter(config = {}) {\n return [lintGutterConfig.of(config), lintGutterMarkers, lintGutterExtension, lintGutterTheme, lintGutterTooltip];\n}\n/**\nIterate over the marked diagnostics for the given editor state,\ncalling `f` for each of them. Note that, if the document changed\nsince the diagnostics were created, the `Diagnostic` object will\nhold the original outdated position, whereas the `to` and `from`\narguments hold the diagnostic's current position.\n*/\nfunction forEachDiagnostic(state, f) {\n let lState = state.field(lintState, false);\n if (lState && lState.diagnostics.size) {\n let pending = [], pendingStart = [], lastEnd = -1;\n for (let iter = RangeSet.iter([lState.diagnostics]);; iter.next()) {\n for (let i = 0; i < pending.length; i++)\n if (!iter.value || iter.value.spec.diagnostics.indexOf(pending[i]) < 0) {\n f(pending[i], pendingStart[i], lastEnd);\n pending.splice(i, 1);\n pendingStart.splice(i--, 1);\n }\n if (!iter.value)\n break;\n for (let d of iter.value.spec.diagnostics)\n if (pending.indexOf(d) < 0) {\n pending.push(d);\n pendingStart.push(iter.from);\n }\n lastEnd = iter.to;\n }\n }\n}\n\nexport { closeLintPanel, diagnosticCount, forEachDiagnostic, forceLinting, lintGutter, lintKeymap, linter, nextDiagnostic, openLintPanel, previousDiagnostic, setDiagnostics, setDiagnosticsEffect };\n","import { lineNumbers, highlightActiveLineGutter, highlightSpecialChars, drawSelection, dropCursor, rectangularSelection, crosshairCursor, highlightActiveLine, keymap } from '@codemirror/view';\nexport { EditorView } from '@codemirror/view';\nimport { EditorState } from '@codemirror/state';\nimport { foldGutter, indentOnInput, syntaxHighlighting, defaultHighlightStyle, bracketMatching, foldKeymap } from '@codemirror/language';\nimport { history, defaultKeymap, historyKeymap } from '@codemirror/commands';\nimport { highlightSelectionMatches, searchKeymap } from '@codemirror/search';\nimport { closeBrackets, autocompletion, closeBracketsKeymap, completionKeymap } from '@codemirror/autocomplete';\nimport { lintKeymap } from '@codemirror/lint';\n\n// (The superfluous function calls around the list of extensions work\n// around current limitations in tree-shaking software.)\n/**\nThis is an extension value that just pulls together a number of\nextensions that you might want in a basic editor. It is meant as a\nconvenient helper to quickly set up CodeMirror without installing\nand importing a lot of separate packages.\n\nSpecifically, it includes...\n\n - [the default command bindings](https://codemirror.net/6/docs/ref/#commands.defaultKeymap)\n - [line numbers](https://codemirror.net/6/docs/ref/#view.lineNumbers)\n - [special character highlighting](https://codemirror.net/6/docs/ref/#view.highlightSpecialChars)\n - [the undo history](https://codemirror.net/6/docs/ref/#commands.history)\n - [a fold gutter](https://codemirror.net/6/docs/ref/#language.foldGutter)\n - [custom selection drawing](https://codemirror.net/6/docs/ref/#view.drawSelection)\n - [drop cursor](https://codemirror.net/6/docs/ref/#view.dropCursor)\n - [multiple selections](https://codemirror.net/6/docs/ref/#state.EditorState^allowMultipleSelections)\n - [reindentation on input](https://codemirror.net/6/docs/ref/#language.indentOnInput)\n - [the default highlight style](https://codemirror.net/6/docs/ref/#language.defaultHighlightStyle) (as fallback)\n - [bracket matching](https://codemirror.net/6/docs/ref/#language.bracketMatching)\n - [bracket closing](https://codemirror.net/6/docs/ref/#autocomplete.closeBrackets)\n - [autocompletion](https://codemirror.net/6/docs/ref/#autocomplete.autocompletion)\n - [rectangular selection](https://codemirror.net/6/docs/ref/#view.rectangularSelection) and [crosshair cursor](https://codemirror.net/6/docs/ref/#view.crosshairCursor)\n - [active line highlighting](https://codemirror.net/6/docs/ref/#view.highlightActiveLine)\n - [active line gutter highlighting](https://codemirror.net/6/docs/ref/#view.highlightActiveLineGutter)\n - [selection match highlighting](https://codemirror.net/6/docs/ref/#search.highlightSelectionMatches)\n - [search](https://codemirror.net/6/docs/ref/#search.searchKeymap)\n - [linting](https://codemirror.net/6/docs/ref/#lint.lintKeymap)\n\n(You'll probably want to add some language package to your setup\ntoo.)\n\nThis extension does not allow customization. The idea is that,\nonce you decide you want to configure your editor more precisely,\nyou take this package's source (which is just a bunch of imports\nand an array literal), copy it into your own code, and adjust it\nas desired.\n*/\nconst basicSetup = /*@__PURE__*/(() => [\n lineNumbers(),\n highlightActiveLineGutter(),\n highlightSpecialChars(),\n history(),\n foldGutter(),\n drawSelection(),\n dropCursor(),\n EditorState.allowMultipleSelections.of(true),\n indentOnInput(),\n syntaxHighlighting(defaultHighlightStyle, { fallback: true }),\n bracketMatching(),\n closeBrackets(),\n autocompletion(),\n rectangularSelection(),\n crosshairCursor(),\n highlightActiveLine(),\n highlightSelectionMatches(),\n keymap.of([\n ...closeBracketsKeymap,\n ...defaultKeymap,\n ...searchKeymap,\n ...historyKeymap,\n ...foldKeymap,\n ...completionKeymap,\n ...lintKeymap\n ])\n])();\n/**\nA minimal set of extensions to create a functional editor. Only\nincludes [the default keymap](https://codemirror.net/6/docs/ref/#commands.defaultKeymap), [undo\nhistory](https://codemirror.net/6/docs/ref/#commands.history), [special character\nhighlighting](https://codemirror.net/6/docs/ref/#view.highlightSpecialChars), [custom selection\ndrawing](https://codemirror.net/6/docs/ref/#view.drawSelection), and [default highlight\nstyle](https://codemirror.net/6/docs/ref/#language.defaultHighlightStyle).\n*/\nconst minimalSetup = /*@__PURE__*/(() => [\n highlightSpecialChars(),\n history(),\n drawSelection(),\n syntaxHighlighting(defaultHighlightStyle, { fallback: true }),\n keymap.of([\n ...defaultKeymap,\n ...historyKeymap,\n ])\n])();\n\nexport { basicSetup, minimalSetup };\n"],"names":["basicNormalize","String","prototype","normalize","x","SearchCursor","constructor","text","query","from","to","length","test","this","value","precise","done","matches","buffer","bufferPos","iter","iterRange","bufferStart","peek","next","codePointAt","pop","nextOverlapping","str","fromCodePoint","start","codePointSize","norm","i","pos","posPrecise","code","charCodeAt","match","end","endPrecise","partial","keep","index","splice","push","Symbol","iterator","empty","exec","baseFlags","unicode","RegExpCursor","options","curLine","MultilineRegExpCursor","re","RegExp","ignoreCase","startLine","lineAt","curLineStart","matchPos","toCharEnd","getLine","skip","lineBreak","slice","nextLine","off","lastIndex","flattened","WeakMap","FlattenedDoc","get","doc","cached","flat","sliceString","set","cachedFrom","chunkEnd","line","defaultHighlightOptions","highlightWordAroundCursor","minSelectionLength","maxMatches","wholeWords","highlightConfig","Facet","define","combine","combineConfig","a","b","Math","min","matchDeco","Decoration","mark","class","mainMatchDeco","insideWordBoundaries","check","state","sliceDoc","CharCategory","Word","matchHighlighter","ViewPlugin","fromClass","view","decorations","getDeco","update","selectionSet","docChanged","viewportChanged","conf","facet","sel","selection","ranges","none","range","main","word","wordAt","head","charCategorizer","len","insideWord","deco","part","visibleRanges","cursor","v","defaultTheme","EditorView","baseTheme","backgroundColor","searchConfigFacet","configs","top","caseSensitive","literal","regexp","wholeWord","createPanel","SearchPanel","scrollToMatch","scrollIntoView","SearchQuery","config","search","replace","valid","source","_a","validRegExp","unquoted","unquote","_","ch","eq","other","create","RegExpQuery","StringQuery","getCursor","st","EditorState","regexpCursor","stringCursor","QueryType","spec","categorizer","buf","bufPos","max","charBefore","charAfter","inner","wrapStringTest","undefined","toLowerCase","super","nextMatch","curFrom","curTo","prevMatchInRange","prevMatch","found","getReplacement","_result","matchAll","limit","highlight","add","_from","_to","input","wrapRegexpTest","findClusterBreak","size","result","m","l","n","setSearchQuery","StateEffect","togglePanel","searchState","StateField","SearchState","defaultQuery","tr","effect","effects","is","panel","createSearchPanel","provide","f","showPanel","val","matchMark","selectedMatchMark","searchHighlighter","field","startState","builder","RangeSetBuilder","selected","some","r","finish","searchCommand","openSearchPanel","findNext","EditorSelection","single","dispatch","announceMatch","userEvent","selectSearchInput","findPrevious","prev","selectMatches","map","replaceNext","readOnly","replacement","changes","toText","insert","announce","of","phrase","number","changeSet","replaceAll","announceText","fallback","_b","_c","_d","_e","selText","getSearchInput","getPanel","dom","querySelector","root","activeElement","select","searchInput","focus","appendConfig","searchExtensions","closeSearchPanel","contains","searchKeymap","key","run","scope","shift","preventDefault","cur","close","showDialog","label","type","name","submitLabel","then","form","elements","sign","ln","cl","percent","col","pc","lines","round","docLine","y","newSel","mainIndex","selectWord","searchedText","fullWord","cycled","findNextOccurrence","addRange","button","onclick","content","elt","commit","bind","searchField","placeholder","onchange","onkeyup","replaceField","caseField","checked","reField","wordField","onkeydown","e","keydown","runScopeHandlers","keyCode","target","shiftKey","transactions","setQuery","mount","AnnounceMargin","Break","lineEnd","padding","position","right","border","font","margin","marginRight","fontSize","whiteSpace","Prec","low","SelectedDiagnostic","diagnostic","LintState","diagnostics","init","diagnosticFilter","lintConfig","markerFilter","sorted","sort","active","scan","scanPos","docLen","reduce","p","d","widget","behind","sev","maxSeverity","DiagnosticWidget","markClass","c","inclusiveEnd","findDiagnostic","after","between","indexOf","setDiagnosticsEffect","movePanelSelection","lintState","mapped","selPos","mapPos","autoPanel","LintPanel","open","s","activeMark","lintTooltip","side","tooltipFilter","above","diagnosticsTooltip","renderDiagnostic","closeLintPanel","lintKeymap","concat","lintExtensions","anchor","activateHover","tooltip","lintHover","until","newSelection","sources","filter","delay","needsRefresh","hideOn","combineFilter","u","t","assignKeys","actions","assigned","inPanel","keys","severity","renderMessage","message","action","fired","click","apply","keyIndex","nameElt","onmousedown","WidgetType","toDOM","PanelItem","id","floor","random","toString","setAttribute","items","list","tabIndex","role","event","ctrlKey","altKey","metaKey","moveSelection","selectedIndex","toUpperCase","needsSync","newSelectedItem","seen","Set","_start","_end","has","item","j","hasAttribute","removeAttribute","requestMeasure","read","getBoundingClientRect","write","scaleY","height","offsetHeight","scrollTop","bottom","sync","domPos","firstChild","rm","nextSibling","remove","parentNode","insertBefore","underline","color","attrs","encodeURIComponent","svg","marginLeft","display","borderLeft","borderRadius","opacity","backgroundPosition","backgroundRepeat","paddingBottom","backgroundImage","left","borderRight","borderBottom","borderBottomColor","maxHeight","overflowY","textDecoration","background_fallback","color_fallback","background","severityWeight","weight","w","hoverTooltip","touchesRange","compute","basicSetup","lineNumbers","highlightActiveLineGutter","highlightSpecialChars","history","foldGutter","drawSelection","dropCursor","allowMultipleSelections","indentOnInput","syntaxHighlighting","defaultHighlightStyle","bracketMatching","closeBrackets","autocompletion","rectangularSelection","crosshairCursor","highlightActiveLine","keymap","closeBracketsKeymap","defaultKeymap","historyKeymap","foldKeymap","completionKeymap","minimalSetup"],"mappings":"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","x_google_ignoreList":[0,1,2]}
@@ -0,0 +1,2 @@
1
+ import{EditorSelection as e,Text as t,findClusterBreak as n,StateField as r,Transaction as o,Facet as l,Annotation as s,combineConfig as a,StateEffect as i,ChangeSet as c,ChangeDesc as f,countColumn as u,CharCategory as h}from"./codemirror_state-DxSVIxgn.js";import{E as m,D as d}from"./codemirror_view-BsXnWedx.js";import{q as p,r as g,u as y,s as v,h as A,v as k,w,i as D}from"./codemirror_language-BeYrpeur.js";const S=e=>{let{state:t}=e,n=t.doc.lineAt(t.selection.main.from),r=I(e.state,n.from);return r.line?M(e):!!r.block&&T(e)};function x(e,t){return({state:n,dispatch:r})=>{if(n.readOnly)return!1;let o=e(t,n);return!!o&&(r(n.update(o)),!0)}}const M=x(L,0),B=x(L,1),C=x(L,2),E=x(R,0),b=x(R,1),O=x(R,2),T=x((e,t)=>R(e,t,function(e){let t=[];for(let n of e.selection.ranges){let r=e.doc.lineAt(n.from),o=n.to<=r.to?r:e.doc.lineAt(n.to);o.from>r.from&&o.from==n.to&&(o=n.to==r.to+1?r:e.doc.lineAt(n.to-1));let l=t.length-1;l>=0&&t[l].to>r.from?t[l].to=o.to:t.push({from:r.from+/^\s*/.exec(r.text)[0].length,to:o.to})}return t}(t)),0);function I(e,t){let n=e.languageDataAt("commentTokens",t,1);return n.length?n[0]:{}}const V=50;function R(e,t,n=t.selection.ranges){let r=n.map(e=>I(t,e.from).block);if(!r.every(e=>e))return null;let o=n.map((e,n)=>function(e,{open:t,close:n},r,o){let l,s,a=e.sliceDoc(r-V,r),i=e.sliceDoc(o,o+V),c=/\s*$/.exec(a)[0].length,f=/^\s*/.exec(i)[0].length,u=a.length-c;if(a.slice(u-t.length,u)==t&&i.slice(f,f+n.length)==n)return{open:{pos:r-c,margin:c&&1},close:{pos:o+f,margin:f&&1}};o-r<=2*V?l=s=e.sliceDoc(r,o):(l=e.sliceDoc(r,r+V),s=e.sliceDoc(o-V,o));let h=/^\s*/.exec(l)[0].length,m=/\s*$/.exec(s)[0].length,d=s.length-m-n.length;return l.slice(h,h+t.length)==t&&s.slice(d,d+n.length)==n?{open:{pos:r+h+t.length,margin:/\s/.test(l.charAt(h+t.length))?1:0},close:{pos:o-m-n.length,margin:/\s/.test(s.charAt(d-1))?1:0}}:null}(t,r[n],e.from,e.to));if(2!=e&&!o.every(e=>e))return{changes:t.changes(n.map((e,t)=>o[t]?[]:[{from:e.from,insert:r[t].open+" "},{from:e.to,insert:" "+r[t].close}]))};if(1!=e&&o.some(e=>e)){let e=[];for(let t,n=0;n<o.length;n++)if(t=o[n]){let o=r[n],{open:l,close:s}=t;e.push({from:l.pos-o.open.length,to:l.pos+l.margin},{from:s.pos-s.margin,to:s.pos+o.close.length})}return{changes:e}}return null}function L(e,t,n=t.selection.ranges){let r=[],o=-1;e:for(let{from:e,to:l}of n){let n,s=r.length,a=1e9;for(let s=e;s<=l;){let i=t.doc.lineAt(s);if(null==n&&(n=I(t,i.from).line,!n))continue e;if(i.from>o&&(e==l||l>i.from)){o=i.from;let e=/^\s*/.exec(i.text)[0].length,t=e==i.length,l=i.text.slice(e,e+n.length)==n?e:-1;e<i.text.length&&e<a&&(a=e),r.push({line:i,comment:l,token:n,indent:e,empty:t,single:!1})}s=i.to+1}if(a<1e9)for(let e=s;e<r.length;e++)r[e].indent<r[e].line.text.length&&(r[e].indent=a);r.length==s+1&&(r[s].single=!0)}if(2!=e&&r.some(e=>e.comment<0&&(!e.empty||e.single))){let e=[];for(let{line:t,token:n,indent:o,empty:l,single:s}of r)!s&&l||e.push({from:t.from+o,insert:n+" "});let n=t.changes(e);return{changes:n,selection:t.selection.map(n,1)}}if(1!=e&&r.some(e=>e.comment>=0)){let e=[];for(let{line:t,comment:n,token:o}of r)if(n>=0){let r=t.from+n,l=r+o.length;" "==t.text[l-t.from]&&l++,e.push({from:r,to:l})}return{changes:e}}return null}const J=s.define(),N=s.define(),U=l.define(),H=l.define({combine:e=>a(e,{minDepth:100,newGroupDelay:500,joinToEvent:(e,t)=>t},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(e,t)=>(n,r)=>e(n,r)||t(n,r)})}),z=r.define({create:()=>ae.empty,update(e,t){let n=t.state.facet(H),r=t.annotation(J);if(r){let o=X.fromTransaction(t,r.selection),l=r.side,s=0==l?e.undone:e.done;return s=o?Y(s,s.length,n.minDepth,o):ne(s,t.startState.selection),new ae(0==l?r.rest:s,0==l?s:r.rest)}let l=t.annotation(N);if("full"!=l&&"before"!=l||(e=e.isolate()),!1===t.annotation(o.addToHistory))return t.changes.empty?e:e.addMapping(t.changes.desc);let s=X.fromTransaction(t),a=t.annotation(o.time),i=t.annotation(o.userEvent);return s?e=e.addChanges(s,a,i,n,t):t.selection&&(e=e.addSelection(t.startState.selection,a,i,n.newGroupDelay)),"full"!=l&&"after"!=l||(e=e.isolate()),e},toJSON:e=>({done:e.done.map(e=>e.toJSON()),undone:e.undone.map(e=>e.toJSON())}),fromJSON:e=>new ae(e.done.map(X.fromJSON),e.undone.map(X.fromJSON))});function j(e={}){return[z,H.of(e),m.domEventHandlers({beforeinput(e,t){let n="historyUndo"==e.inputType?P:"historyRedo"==e.inputType?W:null;return!!n&&(e.preventDefault(),n(t))}})]}const q=z;function G(e,t){return function({state:n,dispatch:r}){if(!t&&n.readOnly)return!1;let o=n.field(z,!1);if(!o)return!1;let l=o.pop(e,n,t);return!!l&&(r(l),!0)}}const P=G(0,!1),W=G(1,!1),$=G(0,!0),_=G(1,!0);function F(e){return function(t){let n=t.field(z,!1);if(!n)return 0;let r=0==e?n.done:n.undone;return r.length-(r.length&&!r[0].changes?1:0)}}const K=F(0),Q=F(1);class X{constructor(e,t,n,r,o){this.changes=e,this.effects=t,this.mapped=n,this.startSelection=r,this.selectionsAfter=o}setSelAfter(e){return new X(this.changes,this.effects,this.mapped,this.startSelection,e)}toJSON(){var e,t,n;return{changes:null===(e=this.changes)||void 0===e?void 0:e.toJSON(),mapped:null===(t=this.mapped)||void 0===t?void 0:t.toJSON(),startSelection:null===(n=this.startSelection)||void 0===n?void 0:n.toJSON(),selectionsAfter:this.selectionsAfter.map(e=>e.toJSON())}}static fromJSON(t){return new X(t.changes&&c.fromJSON(t.changes),[],t.mapped&&f.fromJSON(t.mapped),t.startSelection&&e.fromJSON(t.startSelection),t.selectionsAfter.map(e.fromJSON))}static fromTransaction(e,t){let n=ee;for(let t of e.startState.facet(U)){let r=t(e);r.length&&(n=n.concat(r))}return!n.length&&e.changes.empty?null:new X(e.changes.invert(e.startState.doc),n,void 0,t||e.startState.selection,ee)}static selection(e){return new X(void 0,ee,void 0,void 0,e)}}function Y(e,t,n,r){let o=t+1>n+20?t-n-1:0,l=e.slice(o,t);return l.push(r),l}function Z(e,t){return e.length?t.length?e.concat(t):e:t}const ee=[],te=200;function ne(e,t){if(e.length){let n=e[e.length-1],r=n.selectionsAfter.slice(Math.max(0,n.selectionsAfter.length-te));return r.length&&r[r.length-1].eq(t)?e:(r.push(t),Y(e,e.length-1,1e9,n.setSelAfter(r)))}return[X.selection([t])]}function re(e){let t=e[e.length-1],n=e.slice();return n[e.length-1]=t.setSelAfter(t.selectionsAfter.slice(0,t.selectionsAfter.length-1)),n}function oe(e,t){if(!e.length)return e;let n=e.length,r=ee;for(;n;){let o=le(e[n-1],t,r);if(o.changes&&!o.changes.empty||o.effects.length){let t=e.slice(0,n);return t[n-1]=o,t}t=o.mapped,n--,r=o.selectionsAfter}return r.length?[X.selection(r)]:ee}function le(e,t,n){let r=Z(e.selectionsAfter.length?e.selectionsAfter.map(e=>e.map(t)):ee,n);if(!e.changes)return X.selection(r);let o=e.changes.map(t),l=t.mapDesc(e.changes,!0),s=e.mapped?e.mapped.composeDesc(l):l;return new X(o,i.mapEffects(e.effects,t),s,e.startSelection.map(l),r)}const se=/^(input\.type|delete)($|\.)/;class ae{constructor(e,t,n=0,r=void 0){this.done=e,this.undone=t,this.prevTime=n,this.prevUserEvent=r}isolate(){return this.prevTime?new ae(this.done,this.undone):this}addChanges(e,t,n,r,o){let l=this.done,s=l[l.length-1];return l=s&&s.changes&&!s.changes.empty&&e.changes&&(!n||se.test(n))&&(!s.selectionsAfter.length&&t-this.prevTime<r.newGroupDelay&&r.joinToEvent(o,function(e,t){let n=[],r=!1;return e.iterChangedRanges((e,t)=>n.push(e,t)),t.iterChangedRanges((e,t,o,l)=>{for(let e=0;e<n.length;){let t=n[e++],s=n[e++];l>=t&&o<=s&&(r=!0)}}),r}(s.changes,e.changes))||"input.type.compose"==n)?Y(l,l.length-1,r.minDepth,new X(e.changes.compose(s.changes),Z(i.mapEffects(e.effects,s.changes),s.effects),s.mapped,s.startSelection,ee)):Y(l,l.length,r.minDepth,e),new ae(l,ee,t,n)}addSelection(e,t,n,r){let o=this.done.length?this.done[this.done.length-1].selectionsAfter:ee;return o.length>0&&t-this.prevTime<r&&n==this.prevUserEvent&&n&&/^select($|\.)/.test(n)&&(l=o[o.length-1],s=e,l.ranges.length==s.ranges.length&&0===l.ranges.filter((e,t)=>e.empty!=s.ranges[t].empty).length)?this:new ae(ne(this.done,e),this.undone,t,n);var l,s}addMapping(e){return new ae(oe(this.done,e),oe(this.undone,e),this.prevTime,this.prevUserEvent)}pop(e,t,n){let r=0==e?this.done:this.undone;if(0==r.length)return null;let o=r[r.length-1],l=o.selectionsAfter[0]||(o.startSelection?o.startSelection.map(o.changes.invertedDesc,1):t.selection);if(n&&o.selectionsAfter.length)return t.update({selection:o.selectionsAfter[o.selectionsAfter.length-1],annotations:J.of({side:e,rest:re(r),selection:l}),userEvent:0==e?"select.undo":"select.redo",scrollIntoView:!0});if(o.changes){let n=1==r.length?ee:r.slice(0,r.length-1);return o.mapped&&(n=oe(n,o.mapped)),t.update({changes:o.changes,selection:o.startSelection,effects:o.effects,annotations:J.of({side:e,rest:n,selection:l}),filter:!1,userEvent:0==e?"undo":"redo",scrollIntoView:!0})}return null}}ae.empty=new ae(ee,ee);const ie=[{key:"Mod-z",run:P,preventDefault:!0},{key:"Mod-y",mac:"Mod-Shift-z",run:W,preventDefault:!0},{linux:"Ctrl-Shift-z",run:W,preventDefault:!0},{key:"Mod-u",run:$,preventDefault:!0},{key:"Alt-u",mac:"Mod-Shift-u",run:_,preventDefault:!0}];function ce(t,n){return e.create(t.ranges.map(n),t.mainIndex)}function fe(e,t){return e.update({selection:t,scrollIntoView:!0,userEvent:"select"})}function ue({state:e,dispatch:t},n){let r=ce(e.selection,n);return!r.eq(e.selection,!0)&&(t(fe(e,r)),!0)}function he(t,n){return e.cursor(n?t.to:t.from)}function me(e,t){return ue(e,n=>n.empty?e.moveByChar(n,t):he(n,t))}function de(e){return e.textDirectionAt(e.state.selection.main.head)==d.LTR}const pe=e=>me(e,!de(e)),ge=e=>me(e,de(e)),ye=e=>me(e,!0),ve=e=>me(e,!1);function Ae(t,r,o){let l=r.head,s=t.doc.lineAt(l);return l=l==(o?s.to:s.from)?o?Math.min(t.doc.length,s.to+1):Math.max(0,s.from-1):s.from+n(s.text,l-s.from,o),e.cursor(l,o?-1:1)}function ke(e,t){return ue(e,n=>n.empty?Ae(e.state,n,t):he(n,t))}const we=e=>ke(e,!0),De=e=>ke(e,!1);function Se(e,t){return ue(e,n=>n.empty?e.moveByGroup(n,t):he(n,t))}const xe=e=>Se(e,!de(e)),Me=e=>Se(e,de(e)),Be=e=>Se(e,!0),Ce=e=>Se(e,!1);function Ee(e,t,n){let r=e.state.charCategorizer(t),o=r(n),l=o!=h.Space;return e=>{let t=r(e);return t!=h.Space?l&&t==o:(l=!1,!0)}}const be=e=>ue(e,t=>t.empty?e.moveByChar(t,!0,n=>Ee(e,t.head,n)):he(t,!0)),Oe="undefined"!=typeof Intl&&Intl.Segmenter?new Intl.Segmenter(void 0,{granularity:"word"}):null;function Te(t,n,r){let o=t.state.charCategorizer(n.from),l=h.Space,s=n.from,a=0,i=!1,c=!1,f=!1,u=e=>{if(i)return!1;s+=r?e.length:-e.length;let n,u=o(e);if(u==h.Word&&e.charCodeAt(0)<128&&/[\W_]/.test(e)&&(u=-1),l==h.Space&&(l=u),l!=u)return!1;if(l==h.Word)if(e.toLowerCase()==e){if(!r&&c)return!1;f=!0}else if(f){if(r)return!1;i=!0}else{if(c&&r&&o(n=t.state.sliceDoc(s,s+1))==h.Word&&n.toLowerCase()==n)return!1;c=!0}return a++,!0},m=t.moveByChar(n,r,e=>(u(e),u));if(Oe&&l==h.Word&&m.from==n.from+a*(r?1:-1)){let o=Math.min(n.head,m.head),l=Math.max(n.head,m.head),s=t.state.sliceDoc(o,l);if(s.length>1&&/[\u4E00-\uffff]/.test(s)){let t=Array.from(Oe.segment(s));if(t.length>1)return r?e.cursor(n.head+t[1].index,-1):e.cursor(m.head+t[t.length-1].index,1)}}return m}function Ie(e,t){return ue(e,n=>n.empty?Te(e,n,t):he(n,t))}const Ve=e=>Ie(e,!0),Re=e=>Ie(e,!1);function Le(e,t,n){if(t.type.prop(n))return!0;let r=t.to-t.from;return r&&(r>2||/[^\s,.;:]/.test(e.sliceDoc(t.from,t.to)))||t.firstChild}function Je(t,n,r){let o,l,s=v(t).resolveInner(n.head),a=r?A.closedBy:A.openedBy;for(let e=n.head;;){let n=r?s.childAfter(e):s.childBefore(e);if(!n)break;Le(t,n,a)?s=n:e=r?n.to:n.from}return l=s.type.prop(a)&&(o=r?k(t,s.from,1):k(t,s.to,-1))&&o.matched?r?o.end.to:o.end.from:r?s.to:s.from,e.cursor(l,r?-1:1)}const Ne=e=>ue(e,t=>Je(e.state,t,!de(e))),Ue=e=>ue(e,t=>Je(e.state,t,de(e)));function He(e,t){return ue(e,n=>{if(!n.empty)return he(n,t);let r=e.moveVertically(n,t);return r.head!=n.head?r:e.moveToLineBoundary(n,t)})}const ze=e=>He(e,!1),je=e=>He(e,!0);function qe(e){let t,n=e.scrollDOM.clientHeight<e.scrollDOM.scrollHeight-2,r=0,o=0;if(n){for(let t of e.state.facet(m.scrollMargins)){let n=t(e);(null==n?void 0:n.top)&&(r=Math.max(null==n?void 0:n.top,r)),(null==n?void 0:n.bottom)&&(o=Math.max(null==n?void 0:n.bottom,o))}t=e.scrollDOM.clientHeight-r-o}else t=(e.dom.ownerDocument.defaultView||window).innerHeight;return{marginTop:r,marginBottom:o,selfScroll:n,height:Math.max(e.defaultLineHeight,t-5)}}function Ge(e,t){let n,r=qe(e),{state:o}=e,l=ce(o.selection,n=>n.empty?e.moveVertically(n,t,r.height):he(n,t));if(l.eq(o.selection))return!1;if(r.selfScroll){let t=e.coordsAtPos(o.selection.main.head),s=e.scrollDOM.getBoundingClientRect(),a=s.top+r.marginTop,i=s.bottom-r.marginBottom;t&&t.top>a&&t.bottom<i&&(n=m.scrollIntoView(l.main.head,{y:"start",yMargin:t.top-a}))}return e.dispatch(fe(o,l),{effects:n}),!0}const Pe=e=>Ge(e,!1),We=e=>Ge(e,!0);function $e(t,n,r){let o=t.lineBlockAt(n.head),l=t.moveToLineBoundary(n,r);if(l.head==n.head&&l.head!=(r?o.to:o.from)&&(l=t.moveToLineBoundary(n,r,!1)),!r&&l.head==o.from&&o.length){let r=/^\s*/.exec(t.state.sliceDoc(o.from,Math.min(o.from+100,o.to)))[0].length;r&&n.head!=o.from+r&&(l=e.cursor(o.from+r))}return l}const _e=e=>ue(e,t=>$e(e,t,!0)),Fe=e=>ue(e,t=>$e(e,t,!1)),Ke=e=>ue(e,t=>$e(e,t,!de(e))),Qe=e=>ue(e,t=>$e(e,t,de(e))),Xe=t=>ue(t,n=>e.cursor(t.lineBlockAt(n.head).from,1)),Ye=t=>ue(t,n=>e.cursor(t.lineBlockAt(n.head).to,-1));function Ze(t,n,r){let o=!1,l=ce(t.selection,n=>{let l=k(t,n.head,-1)||k(t,n.head,1)||n.head>0&&k(t,n.head-1,1)||n.head<t.doc.length&&k(t,n.head+1,-1);if(!l||!l.end)return n;o=!0;let s=l.start.from==n.head?l.end.to:l.end.from;return r?e.range(n.anchor,s):e.cursor(s)});return!!o&&(n(fe(t,l)),!0)}const et=({state:e,dispatch:t})=>Ze(e,t,!1),tt=({state:e,dispatch:t})=>Ze(e,t,!0);function nt(t,n,r){let o=ce(t.state.selection,t=>{t.undirectional&&t.head>=t.anchor!=n&&(t=e.range(t.head,t.anchor));let o=r(t);return e.range(t.anchor,o.head,o.goalColumn,o.bidiLevel||void 0,o.assoc)});return!o.eq(t.state.selection)&&(t.dispatch(fe(t.state,o)),!0)}function rt(e,t){return nt(e,t,n=>e.moveByChar(n,t))}const ot=e=>rt(e,!de(e)),lt=e=>rt(e,de(e)),st=e=>rt(e,!0),at=e=>rt(e,!1),it=e=>nt(e,!0,t=>Ae(e.state,t,!0)),ct=e=>nt(e,!1,t=>Ae(e.state,t,!1));function ft(e,t){return nt(e,t,n=>e.moveByGroup(n,t))}const ut=e=>ft(e,!de(e)),ht=e=>ft(e,de(e)),mt=e=>ft(e,!0),dt=e=>ft(e,!1),pt=e=>nt(e,!0,t=>e.moveByChar(t,!0,n=>Ee(e,t.head,n)));function gt(e,t){return nt(e,t,n=>Te(e,n,t))}const yt=e=>gt(e,!0),vt=e=>gt(e,!1),At=e=>{let t=!de(e);return nt(e,t,n=>Je(e.state,n,t))},kt=e=>{let t=de(e);return nt(e,t,n=>Je(e.state,n,t))};function wt(e,t){return nt(e,t,n=>e.moveVertically(n,t))}const Dt=e=>wt(e,!1),St=e=>wt(e,!0);function xt(e,t){return nt(e,t,n=>e.moveVertically(n,t,qe(e).height))}const Mt=e=>xt(e,!1),Bt=e=>xt(e,!0),Ct=e=>nt(e,!0,t=>$e(e,t,!0)),Et=e=>nt(e,!1,t=>$e(e,t,!1)),bt=e=>{let t=!de(e);return nt(e,t,n=>$e(e,n,t))},Ot=e=>{let t=de(e);return nt(e,t,n=>$e(e,n,t))},Tt=t=>nt(t,!1,n=>e.cursor(t.lineBlockAt(n.head).from)),It=t=>nt(t,!0,n=>e.cursor(t.lineBlockAt(n.head).to)),Vt=({state:e,dispatch:t})=>(t(fe(e,{anchor:0})),!0),Rt=({state:e,dispatch:t})=>(t(fe(e,{anchor:e.doc.length})),!0),Lt=({state:e,dispatch:t})=>(t(fe(e,{anchor:e.selection.main.anchor,head:0})),!0),Jt=({state:e,dispatch:t})=>(t(fe(e,{anchor:e.selection.main.anchor,head:e.doc.length})),!0),Nt=({state:e,dispatch:t})=>(t(e.update({selection:{anchor:0,head:e.doc.length},userEvent:"select"})),!0),Ut=({state:t,dispatch:n})=>{let r=an(t).map(({from:n,to:r})=>e.range(n,Math.min(r+1,t.doc.length)));return n(t.update({selection:e.create(r),userEvent:"select"})),!0},Ht=({state:t,dispatch:n})=>{let r=ce(t.selection,n=>{let r=v(t),o=r.resolveStack(n.from,1);if(n.empty){let e=r.resolveStack(n.from,-1);e.node.from>=o.node.from&&e.node.to<=o.node.to&&(o=e)}for(let t=o;t;t=t.next){let{node:r}=t;if((r.from<n.from&&r.to>=n.to||r.to>n.to&&r.from<=n.from)&&t.next)return e.range(r.to,r.from)}return n});return!r.eq(t.selection)&&(n(fe(t,r)),!0)};function zt(t,n){let{state:r}=t,o=r.selection,l=r.selection.ranges.slice();for(let e of r.selection.ranges){let o=r.doc.lineAt(e.head);if(n?o.to<t.state.doc.length:o.from>0)for(let r=e;;){let e=t.moveVertically(r,n);if(e.head<o.from||e.head>o.to){l.some(t=>t.head==e.head)||l.push(e);break}if(e.head==r.head)break;r=e}}return l.length!=o.ranges.length&&(t.dispatch(fe(r,e.create(l,l.length-1))),!0)}const jt=e=>zt(e,!1),qt=e=>zt(e,!0),Gt=({state:t,dispatch:n})=>{let r=t.selection,o=null;return r.ranges.length>1?o=e.create([r.main]):r.main.empty||(o=e.create([e.cursor(r.main.head)])),!!o&&(n(fe(t,o)),!0)};function Pt(t,n){if(t.state.readOnly)return!1;let r="delete.selection",{state:o}=t,l=o.changeByRange(o=>{let{from:l,to:s}=o;if(l==s){let e=n(o);e<l?(r="delete.backward",e=Wt(t,e,!1)):e>l&&(r="delete.forward",e=Wt(t,e,!0)),l=Math.min(l,e),s=Math.max(s,e)}else l=Wt(t,l,!1),s=Wt(t,s,!0);return l==s?{range:o}:{changes:{from:l,to:s},range:e.cursor(l,l<o.head?-1:1)}});return!l.changes.empty&&(t.dispatch(o.update(l,{scrollIntoView:!0,userEvent:r,effects:"delete.selection"==r?m.announce.of(o.phrase("Selection deleted")):void 0})),!0)}function Wt(e,t,n){if(e instanceof m)for(let r of e.state.facet(m.atomicRanges).map(t=>t(e)))r.between(t,t,(e,r)=>{e<t&&r>t&&(t=n?r:e)});return t}const $t=(e,t,r)=>Pt(e,o=>{let l,s,a=o.from,{state:i}=e,c=i.doc.lineAt(a);if(r&&!t&&a>c.from&&a<c.from+200&&!/[^ \t]/.test(l=c.text.slice(0,a-c.from))){if("\t"==l[l.length-1])return a-1;let e=u(l,i.tabSize)%w(i)||w(i);for(let t=0;t<e&&" "==l[l.length-1-t];t++)a--;s=a}else s=n(c.text,a-c.from,t,t)+c.from,s==a&&c.number!=(t?i.doc.lines:1)?s+=t?1:-1:!t&&/[\ufe00-\ufe0f]/.test(c.text.slice(s-c.from,a-c.from))&&(s=n(c.text,s-c.from,!1,!1)+c.from);return s}),_t=e=>$t(e,!1,!0),Ft=e=>$t(e,!1,!1),Kt=e=>$t(e,!0,!1),Qt=(e,t)=>Pt(e,r=>{let o=r.head,{state:l}=e,s=l.doc.lineAt(o),a=l.charCategorizer(o);for(let e=null;;){if(o==(t?s.to:s.from)){o==r.head&&s.number!=(t?l.doc.lines:1)&&(o+=t?1:-1);break}let i=n(s.text,o-s.from,t)+s.from,c=s.text.slice(Math.min(o,i)-s.from,Math.max(o,i)-s.from),f=a(c);if(null!=e&&f!=e)break;" "==c&&o==r.head||(e=f),o=i}return o}),Xt=e=>Qt(e,!1),Yt=e=>Qt(e,!0),Zt=e=>Pt(e,t=>e.moveByChar(t,!0,n=>Ee(e,t.head,n)).head),en=e=>Pt(e,t=>{let n=e.lineBlockAt(t.head).to;return t.head<n?n:Math.min(e.state.doc.length,t.head+1)}),tn=e=>Pt(e,t=>{let n=e.lineBlockAt(t.head).from;return t.head>n?n:Math.max(0,t.head-1)}),nn=e=>Pt(e,t=>{let n=e.moveToLineBoundary(t,!1).head;return t.head>n?n:Math.max(0,t.head-1)}),rn=e=>Pt(e,t=>{let n=e.moveToLineBoundary(t,!0).head;return t.head<n?n:Math.min(e.state.doc.length,t.head+1)}),on=({state:e,dispatch:t})=>{if(e.readOnly)return!1;let n=[];for(let t=0,r="",o=e.doc.iter();;){if(o.next(),o.lineBreak||o.done){let e=r.search(/\s+$/);if(e>-1&&n.push({from:t-(r.length-e),to:t}),o.done)break;r=""}else r=o.value;t+=o.value.length}return!!n.length&&(t(e.update({changes:n,userEvent:"delete"})),!0)},ln=({state:n,dispatch:r})=>{if(n.readOnly)return!1;let o=n.changeByRange(n=>({changes:{from:n.from,to:n.to,insert:t.of(["",""])},range:e.cursor(n.from)}));return r(n.update(o,{scrollIntoView:!0,userEvent:"input"})),!0},sn=({state:t,dispatch:r})=>{if(t.readOnly)return!1;let o=t.changeByRange(r=>{if(!r.empty||0==r.from||r.from==t.doc.length)return{range:r};let o=r.from,l=t.doc.lineAt(o),s=o==l.from?o-1:n(l.text,o-l.from,!1)+l.from,a=o==l.to?o+1:n(l.text,o-l.from,!0)+l.from;return{changes:{from:s,to:a,insert:t.doc.slice(o,a).append(t.doc.slice(s,o))},range:e.cursor(a)}});return!o.changes.empty&&(r(t.update(o,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function an(e){let t=[],n=-1;for(let r of e.selection.ranges){let o=e.doc.lineAt(r.from),l=e.doc.lineAt(r.to);if(r.empty||r.to!=l.from||(l=e.doc.lineAt(r.to-1)),n>=o.number){let e=t[t.length-1];e.to=l.to,e.ranges.push(r)}else t.push({from:o.from,to:l.to,ranges:[r]});n=l.number+1}return t}function cn(t,n,r){if(t.readOnly)return!1;let o=[],l=[];for(let n of an(t)){if(r?n.to==t.doc.length:0==n.from)continue;let s=t.doc.lineAt(r?n.to+1:n.from-1),a=s.length+1;if(r){o.push({from:n.to,to:s.to},{from:n.from,insert:s.text+t.lineBreak});for(let r of n.ranges)l.push(e.range(Math.min(t.doc.length,r.anchor+a),Math.min(t.doc.length,r.head+a)))}else{o.push({from:s.from,to:n.from},{from:n.to,insert:t.lineBreak+s.text});for(let t of n.ranges)l.push(e.range(t.anchor-a,t.head-a))}}return!!o.length&&(n(t.update({changes:o,scrollIntoView:!0,selection:e.create(l,t.selection.mainIndex),userEvent:"move.line"})),!0)}const fn=({state:e,dispatch:t})=>cn(e,t,!1),un=({state:e,dispatch:t})=>cn(e,t,!0);function hn(e,t,n){if(e.readOnly)return!1;let r=[];for(let t of an(e))n?r.push({from:t.from,insert:e.doc.slice(t.from,t.to)+e.lineBreak}):r.push({from:t.to,insert:e.lineBreak+e.doc.slice(t.from,t.to)});let o=e.changes(r);return t(e.update({changes:o,selection:e.selection.map(o,n?1:-1),scrollIntoView:!0,userEvent:"input.copyline"})),!0}const mn=({state:e,dispatch:t})=>hn(e,t,!1),dn=({state:e,dispatch:t})=>hn(e,t,!0),pn=e=>{if(e.state.readOnly)return!1;let{state:t}=e,n=t.changes(an(t).map(({from:e,to:n})=>(e>0?e--:n<t.doc.length&&n++,{from:e,to:n}))),r=ce(t.selection,t=>{let n;if(e.lineWrapping){let r=e.lineBlockAt(t.head),o=e.coordsAtPos(t.head,t.assoc||1);o&&(n=r.bottom+e.documentTop-o.bottom+e.defaultLineHeight/2)}return e.moveVertically(t,!0,n)}).map(n);return e.dispatch({changes:n,selection:r,scrollIntoView:!0,userEvent:"delete.line"}),!0},gn=({state:e,dispatch:t})=>(t(e.update(e.replaceSelection(e.lineBreak),{scrollIntoView:!0,userEvent:"input"})),!0),yn=({state:t,dispatch:n})=>(n(t.update(t.changeByRange(n=>{let r=/^\s*/.exec(t.doc.lineAt(n.from).text)[0];return{changes:{from:n.from,to:n.to,insert:t.lineBreak+r},range:e.cursor(n.from+r.length+1)}}),{scrollIntoView:!0,userEvent:"input"})),!0);const vn=kn(!1),An=kn(!0);function kn(n){return({state:r,dispatch:o})=>{if(r.readOnly)return!1;let l=r.changeByRange(o=>{let{from:l,to:s}=o,a=r.doc.lineAt(l),i=!n&&l==s&&function(e,t){if(/\(\)|\[\]|\{\}/.test(e.sliceDoc(t-1,t+1)))return{from:t,to:t};let n,r=v(e).resolveInner(t),o=r.childBefore(t),l=r.childAfter(t);return o&&l&&o.to<=t&&l.from>=t&&(n=o.type.prop(A.closedBy))&&n.indexOf(l.name)>-1&&e.doc.lineAt(o.to).from==e.doc.lineAt(l.from).from&&!/\S/.test(e.sliceDoc(o.to,l.from))?{from:o.to,to:l.from}:null}(r,l);n&&(l=s=(s<=a.to?a:r.doc.lineAt(s)).to);let c=new p(r,{simulateBreak:l,simulateDoubleBreak:!!i}),f=g(c,l);for(null==f&&(f=u(/^\s*/.exec(r.doc.lineAt(l).text)[0],r.tabSize));s<a.to&&/\s/.test(a.text[s-a.from]);)s++;i?({from:l,to:s}=i):l>a.from&&l<a.from+100&&!/\S/.test(a.text.slice(0,l))&&(l=a.from);let h=["",y(r,f)];return i&&h.push(y(r,c.lineIndent(a.from,-1))),{changes:{from:l,to:s,insert:t.of(h)},range:e.cursor(l+1+h[1].length)}});return o(r.update(l,{scrollIntoView:!0,userEvent:"input"})),!0}}function wn(t,n){let r=-1;return t.changeByRange(o=>{let l=[];for(let e=o.from;e<=o.to;){let s=t.doc.lineAt(e);s.number>r&&(o.empty||o.to>s.from)&&(n(s,l,o),r=s.number),e=s.to+1}let s=t.changes(l);return{changes:l,range:e.range(s.mapPos(o.anchor,1),s.mapPos(o.head,1))}})}const Dn=({state:e,dispatch:t})=>{if(e.readOnly)return!1;let n=Object.create(null),r=new p(e,{overrideIndentation:e=>{let t=n[e];return null==t?-1:t}}),o=wn(e,(t,o,l)=>{let s=g(r,t.from);if(null==s)return;/\S/.test(t.text)||(s=0);let a=/^\s*/.exec(t.text)[0],i=y(e,s);(a!=i||l.from<t.from+a.length)&&(n[t.from]=s,o.push({from:t.from,to:t.from+a.length,insert:i}))});return o.changes.empty||t(e.update(o,{userEvent:"indent"})),!0},Sn=({state:e,dispatch:t})=>!e.readOnly&&(t(e.update(wn(e,(t,n)=>{n.push({from:t.from,insert:e.facet(D)})}),{userEvent:"input.indent"})),!0),xn=({state:e,dispatch:t})=>!e.readOnly&&(t(e.update(wn(e,(t,n)=>{let r=/^\s*/.exec(t.text)[0];if(!r)return;let o=u(r,e.tabSize),l=0,s=y(e,Math.max(0,o-w(e)));for(;l<r.length&&l<s.length&&r.charCodeAt(l)==s.charCodeAt(l);)l++;n.push({from:t.from+l,to:t.from+r.length,insert:s.slice(l)})}),{userEvent:"delete.dedent"})),!0),Mn=e=>(e.setTabFocusMode(),!0),Bn=e=>(e.setTabFocusMode(2e3),!0),Cn=({state:e,dispatch:t})=>e.selection.ranges.some(e=>!e.empty)?Sn({state:e,dispatch:t}):(t(e.update(e.replaceSelection("\t"),{scrollIntoView:!0,userEvent:"input"})),!0),En=[{key:"Ctrl-b",run:pe,shift:ot,preventDefault:!0},{key:"Ctrl-f",run:ge,shift:lt},{key:"Ctrl-p",run:ze,shift:Dt},{key:"Ctrl-n",run:je,shift:St},{key:"Ctrl-a",run:Xe,shift:Tt},{key:"Ctrl-e",run:Ye,shift:It},{key:"Ctrl-d",run:Kt},{key:"Ctrl-h",run:_t},{key:"Ctrl-k",run:en},{key:"Ctrl-Alt-h",run:Xt},{key:"Ctrl-o",run:ln},{key:"Ctrl-t",run:sn},{key:"Ctrl-v",run:We}],bn=[{key:"ArrowLeft",run:pe,shift:ot,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:xe,shift:ut,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:Ke,shift:bt,preventDefault:!0},{key:"ArrowRight",run:ge,shift:lt,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:Me,shift:ht,preventDefault:!0},{mac:"Cmd-ArrowRight",run:Qe,shift:Ot,preventDefault:!0},{key:"ArrowUp",run:ze,shift:Dt,preventDefault:!0},{mac:"Cmd-ArrowUp",run:Vt,shift:Lt},{mac:"Ctrl-ArrowUp",run:Pe,shift:Mt},{key:"ArrowDown",run:je,shift:St,preventDefault:!0},{mac:"Cmd-ArrowDown",run:Rt,shift:Jt},{mac:"Ctrl-ArrowDown",run:We,shift:Bt},{key:"PageUp",run:Pe,shift:Mt},{key:"PageDown",run:We,shift:Bt},{key:"Home",run:Fe,shift:Et,preventDefault:!0},{key:"Mod-Home",run:Vt,shift:Lt},{key:"End",run:_e,shift:Ct,preventDefault:!0},{key:"Mod-End",run:Rt,shift:Jt},{key:"Enter",run:vn,shift:vn},{key:"Mod-a",run:Nt},{key:"Backspace",run:_t,shift:_t,preventDefault:!0},{key:"Delete",run:Kt,preventDefault:!0},{key:"Mod-Backspace",mac:"Alt-Backspace",run:Xt,preventDefault:!0},{key:"Mod-Delete",mac:"Alt-Delete",run:Yt,preventDefault:!0},{mac:"Mod-Backspace",run:nn,preventDefault:!0},{mac:"Mod-Delete",run:rn,preventDefault:!0}].concat(En.map(e=>({mac:e.key,run:e.run,shift:e.shift}))),On=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:Ne,shift:At},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:Ue,shift:kt},{key:"Alt-ArrowUp",run:fn},{key:"Shift-Alt-ArrowUp",run:mn},{key:"Alt-ArrowDown",run:un},{key:"Shift-Alt-ArrowDown",run:dn},{key:"Mod-Alt-ArrowUp",run:jt},{key:"Mod-Alt-ArrowDown",run:qt},{key:"Escape",run:Gt},{key:"Mod-Enter",run:An},{key:"Alt-l",mac:"Ctrl-l",run:Ut},{key:"Mod-i",run:Ht,preventDefault:!0},{key:"Mod-[",run:xn},{key:"Mod-]",run:Sn},{key:"Mod-Alt-\\",run:Dn},{key:"Shift-Mod-k",run:pn},{key:"Shift-Mod-\\",run:et},{key:"Mod-/",run:S},{key:"Alt-A",run:E},{key:"Ctrl-m",mac:"Shift-Alt-m",run:Mn}].concat(bn),Tn={key:"Tab",run:Sn,shift:xn};export{jt as addCursorAbove,qt as addCursorBelow,b as blockComment,O as blockUncomment,dn as copyLineDown,mn as copyLineUp,ve as cursorCharBackward,De as cursorCharBackwardLogical,ye as cursorCharForward,we as cursorCharForwardLogical,pe as cursorCharLeft,ge as cursorCharRight,Rt as cursorDocEnd,Vt as cursorDocStart,Ce as cursorGroupBackward,Be as cursorGroupForward,be as cursorGroupForwardWin,xe as cursorGroupLeft,Me as cursorGroupRight,Fe as cursorLineBoundaryBackward,_e as cursorLineBoundaryForward,Ke as cursorLineBoundaryLeft,Qe as cursorLineBoundaryRight,je as cursorLineDown,Ye as cursorLineEnd,Xe as cursorLineStart,ze as cursorLineUp,et as cursorMatchingBracket,We as cursorPageDown,Pe as cursorPageUp,Re as cursorSubwordBackward,Ve as cursorSubwordForward,Ne as cursorSyntaxLeft,Ue as cursorSyntaxRight,On as defaultKeymap,_t as deleteCharBackward,Ft as deleteCharBackwardStrict,Kt as deleteCharForward,Xt as deleteGroupBackward,Yt as deleteGroupForward,Zt as deleteGroupForwardWin,pn as deleteLine,nn as deleteLineBoundaryBackward,rn as deleteLineBoundaryForward,en as deleteToLineEnd,tn as deleteToLineStart,on as deleteTrailingWhitespace,En as emacsStyleKeymap,j as history,q as historyField,ie as historyKeymap,xn as indentLess,Sn as indentMore,Dn as indentSelection,Tn as indentWithTab,An as insertBlankLine,gn as insertNewline,vn as insertNewlineAndIndent,yn as insertNewlineKeepIndent,Cn as insertTab,U as invertedEffects,N as isolateHistory,B as lineComment,C as lineUncomment,un as moveLineDown,fn as moveLineUp,W as redo,Q as redoDepth,_ as redoSelection,Nt as selectAll,at as selectCharBackward,ct as selectCharBackwardLogical,st as selectCharForward,it as selectCharForwardLogical,ot as selectCharLeft,lt as selectCharRight,Jt as selectDocEnd,Lt as selectDocStart,dt as selectGroupBackward,mt as selectGroupForward,pt as selectGroupForwardWin,ut as selectGroupLeft,ht as selectGroupRight,Ut as selectLine,Et as selectLineBoundaryBackward,Ct as selectLineBoundaryForward,bt as selectLineBoundaryLeft,Ot as selectLineBoundaryRight,St as selectLineDown,It as selectLineEnd,Tt as selectLineStart,Dt as selectLineUp,tt as selectMatchingBracket,Bt as selectPageDown,Mt as selectPageUp,Ht as selectParentSyntax,vt as selectSubwordBackward,yt as selectSubwordForward,At as selectSyntaxLeft,kt as selectSyntaxRight,Gt as simplifySelection,ln as splitLine,bn as standardKeymap,Bn as temporarilySetTabFocusMode,E as toggleBlockComment,T as toggleBlockCommentByLine,S as toggleComment,M as toggleLineComment,Mn as toggleTabFocusMode,sn as transposeChars,P as undo,K as undoDepth,$ as undoSelection};
2
+ //# sourceMappingURL=codemirror_commands-JTJPAaAA.js.map