diff --git a/OPEN_ISSUES.md b/OPEN_ISSUES.md index b4e9b14..2c51340 100644 --- a/OPEN_ISSUES.md +++ b/OPEN_ISSUES.md @@ -80,16 +80,61 @@ Actionable open tasks for glsl.10k24.com, tracked here until they're scoped and --- -## 7. Autocomplete: suggest variable members (`.field` after a typed variable) +## 7. ✅ Done — Autocomplete: suggest variable members (`.field` after a typed variable) -**Goal:** Add member completion. When a user types `q.` (a variable of known type), offer that type's members. E.g. for `vec4 q = vec4(1.0);`, typing `q.` should suggest `x`, `y`, `z`, `w`, `r`, `g`, `b`, `a`, `s`, `t`, `p`, `q`, array access, etc. +**Status:** **Implemented.** Vector swizzle accessors, matrix `[0][0]` skeleton, and constructor options all ship. -**Approach / notes:** -- Current autocomplete (`src/glsl-completions.ts`) is keyword/function-only; extend it (or add a second completion source) that resolves the identifier left of the `.` to a declared variable's type. -- Track in-scope variable declarations (name → type) as the user types — a lightweight GLSL parse of the current doc (regex/text scan, not a full parser; see existing parser scans in `src/glsl-preprocessor.ts`). -- Member lists per type: `vecN` (component accessors, swizzling, array `[i]`), `matN`, `sampler2D` (`texture` isn't a member but may imply usage), structs can't be user-defined in Shadertoy, so built-in types cover most of it. -- Files: `src/glsl-completions.ts` (add member source), `src/editor.ts` (register source), plus tests. +**What was built:** +- **`src/glsl-vars.ts`** (new deep module): `scanVariables()` (name → type regex scan of the doc), `membersForType()`, `constructorCompletions()`, `KNOWN_TYPES` set. +- **`src/glsl-completions.ts`**: routes completion by context — bracket (`m[`), dot (`q.`), and word (keyword / function / type / constructor). +- **`src/editor.ts`**: `memberTriggerKeymap` + `insertThenComplete` fire `startCompletion` after typing `.` / `[`. +- **ON by default** (`index.html` `#ac-checkbox` `checked` + boot calls `setAutocomplete(true)`), **preference persisted** in `localStorage` (`glsl.autocomplete`), re-read on load. +- **Context hints** in the popup, dimmed via `.cm-completionDetail` opacity: swizzle members carry `"x component"`, `"red channel"`, `"s texture coord"`, etc.; matrix skeleton shows `"index skeleton"`; constructors show `"constructor"`. +- Vectors expose `.x .y .z .w .r .g .b .a .s .t .p .q`; matrices a `m[0][0]` skeleton with cursor landing on the row index; bare type keyword + constructor both offered for type words. Scalars/mat/sampler have no dot-notation (design decision). + +**Coverage:** `test/glsl-vars.test.ts` (unit), `test/autocomplete.e2e.ts` (4 e2e), localStorage persistence covered in `test/boot.e2e.ts`. Full suite green (56 unit, 21 e2e) as of this update. + +**Deferred (captured from open decisions, if revisited):** copy-propagation / reassignment type tracking (currently resolves to last declaration). + +--- + +## 8. GA4 event tracking: `shader_share` + `presentation_start` + +**Goal:** Send two custom GA4 events with the shader's share-URL, content-fingerprinted. + +**Scope (trimmed from a larger proposal — user wants only these two):** +- `shader_share` — fired on Share button click. +- `presentation_start` — fired on Present button click (also captures the shader URL). +- Explicit **non-goals**: no `compile_error`, `autocomplete_toggle`, `shader_reset`, `render_toggle`, `define_toggle`, `presentation_end`; no dev-gating change (gtag.js loads as-is, including on localhost). + +**Key constraint (why we fingerprint):** GA4 caps custom event parameter *values* at **100 chars** (only `page_location` gets 1,000). A full compressed `#s=` shader URL is typically hundreds of chars and would be truncated, so it's never sent raw. Instead: +- Send a **SHA-1 fingerprint** (hex, 40 chars — well under the limit) of the full share-URL as a `shader_url` param. Collision-resistant for dedupe, privacy-safe, no truncation ambiguity. +- SHA-1 chosen over MD5: exposed directly by `crypto.subtle.digest` (built-in WebCrypto, zero deps, works on https + localhost); MD5 would need a dependency. Collision risk negligible for dedupe. +- GA4 does not auto-capture the shared link (it only sees `page_location` = the clean address bar), so the event is the only way to get it. + +**Design (deep module, single source of truth for GA naming/limits):** +- New `src/analytics.ts`: + - `track(event, params)` — no-ops safely when `typeof gtag !== "function"` (GA absent/blocked). + - `fingerprint(text)` — `crypto.subtle.digest("SHA-1", ...)` → hex. + - `EVENTS` constants — event/param names defined once. +- `src/main.ts`: + - Reuse the existing URL-building logic from the Share click handler (default shader → clean URL; else `base + "#" + encodeShare(doc, overrides)`). + - `shader_share`: `track(EVENTS.shaderShare, { shader_url: await fingerprint(url), copied: "success" | "failed" })` (`copied` from the clipboard promise — cheap signal that sharing actually worked). + - `presentation_start`: build the same share-URL and `track(EVENTS.presentationStart, { shader_url: await fingerprint(url) })`; Present handler becomes async. + +**Coverage:** new `test/analytics.test.ts` — stub `window.gtag`, assert `track()` forwards the correct event name + params; assert `fingerprint()` returns a stable 40-char hex; assert `track()` no-ops when `gtag` is undefined. (`crypto.subtle` is available in Vitest's Node runtime — no mock needed.) + +**Open / out-of-band:** registering `shader_url` (+ `copied`) as a **custom dimension** in the GA4 dashboard must be done manually to make the params reportable. + +--- + +## 9. Intermittent e2e flake — matrix bracket skeleton (`m[` → `m[0][0]`) + +**Status:** Known intermittent infra/timing flake in `test/autocomplete.e2e.ts:60` ("typing `[` after a declared matrix applies a bracket skeleton"). + +**Symptom:** On a cold first-run of the Playwright process (dev server just started), pressing Enter after `m[` sometimes resolves the doc to `m[ ` (snippet fields rendered empty on a trailing line) instead of `m[0][0]`. Warm/subsequent runs and the full-suite invocation (`bun run test:e2e`) pass 22/22. + +**Root cause (not yet confirmed):** Cold-start timing between `insertThenComplete` (inserts `[` + calls `startCompletion`) and CM6's snippet field application — not a product-logic bug in the matrix path. Reproduces ~0-2/6 in fresh isolated processes; passes consistently once warm. Pre-existing (observed before the Sourcery review touched `src/glsl-vars.ts`/`glsl-completions.ts`); unrelated to those changes. + +**Actions if it reappears in CI:** add a short settle wait before the Enter assertion, or verify the applied doc with a retrying assertion. Otherwise leave as-is — the full-suite run is green. -**Open decisions:** -- Handle copy-propagation / reassignment (e.g. `q = somethingElse` changes `q`'s type), or resolve to the first declaration only for v1. -- Whether to include `matN` prototype-style members and array indexing suggestions, or just the simple vector component accessors first. diff --git a/docs/assets/index-DFKXbf_y.js b/docs/assets/index-CmDAv2Rh.js similarity index 61% rename from docs/assets/index-DFKXbf_y.js rename to docs/assets/index-CmDAv2Rh.js index a56750a..0d8499f 100644 --- a/docs/assets/index-DFKXbf_y.js +++ b/docs/assets/index-CmDAv2Rh.js @@ -1,25 +1,26 @@ -(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))i(r);new MutationObserver(r=>{for(const s of r)if(s.type==="childList")for(const o of s.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function t(r){const s={};return r.integrity&&(s.integrity=r.integrity),r.referrerPolicy&&(s.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?s.credentials="include":r.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function i(r){if(r.ep)return;r.ep=!0;const s=t(r);fetch(r.href,s)}})();let Wr=[],Jl=[];(()=>{let n="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,t=0;e>1;if(n=Jl[i])e=i+1;else return!0;if(e==t)return!1}}function mo(n){return n>=127462&&n<=127487}const go=8205;function Wc(n,e,t=!0,i=!0){return(t?Ql:Vc)(n,e,i)}function Ql(n,e,t){if(e==n.length)return e;e&&Zl(n.charCodeAt(e))&&ea(n.charCodeAt(e-1))&&e--;let i=hr(n,e);for(e+=yo(i);e=0&&mo(hr(n,o));)s++,o-=2;if(s%2==0)break;e+=2}else break}return e}function Vc(n,e,t){for(;e>0;){let i=Ql(n,e-2,t);if(i=56320&&n<57344}function ea(n){return n>=55296&&n<56320}function yo(n){return n<65536?1:2}class z{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,i){[e,t]=ti(this,e,t);let r=[];return this.decompose(0,e,r,2),i.length&&i.decompose(0,i.length,r,3),this.decompose(t,this.length,r,1),Ze.from(r,this.length-(t-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=ti(this,e,t);let i=[];return this.decompose(e,t,i,0),Ze.from(i,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),r=new wi(this),s=new wi(e);for(let o=t,l=t;;){if(r.next(o),s.next(o),o=0,r.lineBreak!=s.lineBreak||r.done!=s.done||r.value!=s.value)return!1;if(l+=r.value.length,r.done||l>=i)return!0}}iter(e=1){return new wi(this,e)}iterRange(e,t=this.length){return new ta(this,e,t)}iterLines(e,t){let i;if(e==null)i=this.iter();else{t==null&&(t=this.lines+1);let r=this.line(e).from;i=this.iterRange(r,Math.max(r,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new ia(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?z.empty:e.length<=32?new te(e):Ze.from(te.split(e,[]))}}class te extends z{constructor(e,t=Hc(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,r){for(let s=0;;s++){let o=this.text[s],l=r+o.length;if((t?i:l)>=e)return new zc(r,l,i,o);r=l+1,i++}}decompose(e,t,i,r){let s=e<=0&&t>=this.length?this:new te(bo(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(r&1){let o=i.pop(),l=wn(s.text,o.text.slice(),0,s.length);if(l.length<=32)i.push(new te(l,o.length+s.length));else{let a=l.length>>1;i.push(new te(l.slice(0,a)),new te(l.slice(a)))}}else i.push(s)}replace(e,t,i){if(!(i instanceof te))return super.replace(e,t,i);[e,t]=ti(this,e,t);let r=wn(this.text,wn(i.text,bo(this.text,0,e)),t),s=this.length+i.length-(t-e);return r.length<=32?new te(r,s):Ze.from(te.split(r,[]),s)}sliceString(e,t=this.length,i=` -`){[e,t]=ti(this,e,t);let r="";for(let s=0,o=0;s<=t&&oe&&o&&(r+=i),es&&(r+=l.slice(Math.max(0,e-s),t-s)),s=a+1}return r}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let i=[],r=-1;for(let s of e)i.push(s),r+=s.length+1,i.length==32&&(t.push(new te(i,r)),i=[],r=-1);return r>-1&&t.push(new te(i,r)),t}}class Ze extends z{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let i of e)this.lines+=i.lines}lineInner(e,t,i,r){for(let s=0;;s++){let o=this.children[s],l=r+o.length,a=i+o.lines-1;if((t?a:l)>=e)return o.lineInner(e,t,i,r);r=l+1,i=a+1}}decompose(e,t,i,r){for(let s=0,o=0;o<=t&&s=o){let h=r&((o<=e?1:0)|(a>=t?2:0));o>=e&&a<=t&&!h?i.push(l):l.decompose(e-o,t-o,i,h)}o=a+1}}replace(e,t,i){if([e,t]=ti(this,e,t),i.lines=s&&t<=l){let a=o.replace(e-s,t-s,i),h=this.lines-o.lines+a.lines;if(a.lines>4&&a.lines>h>>6){let c=this.children.slice();return c[r]=a,new Ze(c,this.length-(t-e)+i.length)}return super.replace(s,l,a)}s=l+1}return super.replace(e,t,i)}sliceString(e,t=this.length,i=` -`){[e,t]=ti(this,e,t);let r="";for(let s=0,o=0;se&&s&&(r+=i),eo&&(r+=l.sliceString(e-o,t-o,i)),o=a+1}return r}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof Ze))return 0;let i=0,[r,s,o,l]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;r+=t,s+=t){if(r==o||s==l)return i;let a=this.children[r],h=e.children[s];if(a!=h)return i+a.scanIdentical(h,t);i+=a.length+1}}static from(e,t=e.reduce((i,r)=>i+r.length+1,-1)){let i=0;for(let d of e)i+=d.lines;if(i<32){let d=[];for(let p of e)p.flatten(d);return new te(d,t)}let r=Math.max(32,i>>5),s=r<<1,o=r>>1,l=[],a=0,h=-1,c=[];function f(d){let p;if(d.lines>s&&d instanceof Ze)for(let m of d.children)f(m);else d.lines>o&&(a>o||!a)?(u(),l.push(d)):d instanceof te&&a&&(p=c[c.length-1])instanceof te&&d.lines+p.lines<=32?(a+=d.lines,h+=d.length+1,c[c.length-1]=new te(p.text.concat(d.text),p.length+1+d.length)):(a+d.lines>r&&u(),a+=d.lines,h+=d.length+1,c.push(d))}function u(){a!=0&&(l.push(c.length==1?c[0]:Ze.from(c,h)),h=-1,a=c.length=0)}for(let d of e)f(d);return u(),l.length==1?l[0]:new Ze(l,t)}}z.empty=new te([""],0);function Hc(n){let e=-1;for(let t of n)e+=t.length+1;return e}function wn(n,e,t=0,i=1e9){for(let r=0,s=0,o=!0;s=t&&(a>i&&(l=l.slice(0,i-r)),r0?1:(e instanceof te?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,r=this.nodes[i],s=this.offsets[i],o=s>>1,l=r instanceof te?r.text.length:r.children.length;if(o==(t>0?l:0)){if(i==0)return this.done=!0,this.value="",this;t>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((s&1)==(t>0?0:1)){if(this.offsets[i]+=t,e==0)return this.lineBreak=!0,this.value=` -`,this;e--}else if(r instanceof te){let a=r.text[o+(t<0?-1:0)];if(this.offsets[i]+=t,a.length>Math.max(0,e))return this.value=e==0?a:t>0?a.slice(e):a.slice(0,a.length-e),this;e-=a.length}else{let a=r.children[o+(t<0?-1:0)];e>a.length?(e-=a.length,this.offsets[i]+=t):(t<0&&this.offsets[i]--,this.nodes.push(a),this.offsets.push(t>0?1:(a instanceof te?a.text.length:a.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}}class ta{constructor(e,t,i){this.value="",this.done=!1,this.cursor=new wi(e,t>i?-1:1),this.pos=t>i?e.length:0,this.from=Math.min(t,i),this.to=Math.max(t,i)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let i=t<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:r}=this.cursor.next(e);return this.pos+=(r.length+e)*t,this.value=r.length<=i?r:t<0?r.slice(r.length-i):r.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}}class ia{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:i,value:r}=this.inner.next(e);return t&&this.afterBreak?(this.value="",this.afterBreak=!1):t?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=r,this.afterBreak=!1),this}get lineBreak(){return!1}}typeof Symbol<"u"&&(z.prototype[Symbol.iterator]=function(){return this.iter()},wi.prototype[Symbol.iterator]=ta.prototype[Symbol.iterator]=ia.prototype[Symbol.iterator]=function(){return this});class zc{constructor(e,t,i,r){this.from=e,this.to=t,this.number=i,this.text=r}get length(){return this.to-this.from}}function ti(n,e,t){return e=Math.max(0,Math.min(n.length,e)),[e,Math.max(e,Math.min(n.length,t))]}function de(n,e,t=!0,i=!0){return Wc(n,e,t,i)}function $c(n){return n>=56320&&n<57344}function Uc(n){return n>=55296&&n<56320}function Qe(n,e){let t=n.charCodeAt(e);if(!Uc(t)||e+1==n.length)return t;let i=n.charCodeAt(e+1);return $c(i)?(t-55296<<10)+(i-56320)+65536:t}function na(n){return n<=65535?String.fromCharCode(n):(n-=65536,String.fromCharCode((n>>10)+55296,(n&1023)+56320))}function pt(n){return n<65536?1:2}const Vr=/\r\n?|\n/;var be=(function(n){return n[n.Simple=0]="Simple",n[n.TrackDel=1]="TrackDel",n[n.TrackBefore=2]="TrackBefore",n[n.TrackAfter=3]="TrackAfter",n})(be||(be={}));class rt{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;te)return s+(e-r);s+=l}else{if(i!=be.Simple&&h>=e&&(i==be.TrackDel&&re||i==be.TrackBefore&&re))return null;if(h>e||h==e&&t<0&&!l)return e==r||t<0?s:s+a;s+=a}r=h}if(e>r)throw new RangeError(`Position ${e} is out of range for changeset of length ${r}`);return s}touchesRange(e,t=e){for(let i=0,r=0;i=0&&r<=t&&l>=e)return rt?"cover":!0;r=l}return!1}toString(){let e="";for(let t=0;t=0?":"+r:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new rt(e)}static create(e){return new rt(e)}}class re extends rt{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return Hr(this,(t,i,r,s,o)=>e=e.replace(r,r+(i-t),o),!1),e}mapDesc(e,t=!1){return zr(this,e,t,!0)}invert(e){let t=this.sections.slice(),i=[];for(let r=0,s=0;r=0){t[r]=l,t[r+1]=o;let a=r>>1;for(;i.length0&>(i,t,s.text),s.forward(c),l+=c}let h=e[o++];for(;l>1].toJSON()))}return e}static of(e,t,i){let r=[],s=[],o=0,l=null;function a(c=!1){if(!c&&!r.length)return;ou||f<0||u>t)throw new RangeError(`Invalid change range ${f} to ${u} (in doc of length ${t})`);let p=d?typeof d=="string"?z.of(d.split(i||Vr)):d:z.empty,m=p.length;if(f==u&&m==0)return;fo&&ue(r,f-o,-1),ue(r,u-f,m),gt(s,r,p),o=u}}return h(e),a(!l),l}static empty(e){return new re(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let t=[],i=[];for(let r=0;rl&&typeof o!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(s.length==1)t.push(s[0],0);else{for(;i.length=0&&t<=0&&t==n[r+1]?n[r]+=e:r>=0&&e==0&&n[r]==0?n[r+1]+=t:i?(n[r]+=e,n[r+1]+=t):n.push(e,t)}function gt(n,e,t){if(t.length==0)return;let i=e.length-2>>1;if(i>1])),!(t||o==n.sections.length||n.sections[o+1]<0);)l=n.sections[o++],a=n.sections[o++];e(r,h,s,c,f),r=h,s=c}}}function zr(n,e,t,i=!1){let r=[],s=i?[]:null,o=new Mi(n),l=new Mi(e);for(let a=-1;;){if(o.done&&l.len||l.done&&o.len)throw new Error("Mismatched change set lengths");if(o.ins==-1&&l.ins==-1){let h=Math.min(o.len,l.len);ue(r,h,-1),o.forward(h),l.forward(h)}else if(l.ins>=0&&(o.ins<0||a==o.i||o.off==0&&(l.len=0&&a=0){let h=0,c=o.len;for(;c;)if(l.ins==-1){let f=Math.min(c,l.len);h+=f,c-=f,l.forward(f)}else if(l.ins==0&&l.lena||o.ins>=0&&o.len>a)&&(l||i.length>h),s.forward2(a),o.forward(a)}}}}class Mi{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return t>=e.length?z.empty:e[t]}textBit(e){let{inserted:t}=this.set,i=this.i-2>>1;return i>=t.length&&!e?z.empty:t[i].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}}class Rt{constructor(e,t,i){this.from=e,this.to=t,this.flags=i}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}get goalColumn(){let e=this.flags>>6;return e==16777215?void 0:e}map(e,t=-1){let i,r;return this.empty?i=r=e.mapPos(this.from,t):(i=e.mapPos(this.from,1),r=e.mapPos(this.to,-1)),i==this.from&&r==this.to?this:new Rt(i,r,this.flags)}extend(e,t=e,i=0){if(e<=this.anchor&&t>=this.anchor)return b.range(e,t,void 0,void 0,i);let r=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return b.range(this.anchor,r,void 0,void 0,i)}eq(e,t=!1){return this.anchor==e.anchor&&this.head==e.head&&this.goalColumn==e.goalColumn&&(!t||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return b.range(e.anchor,e.head)}static create(e,t,i){return new Rt(e,t,i)}}class b{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:b.create(this.ranges.map(i=>i.map(e,t)),this.mainIndex)}eq(e,t=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let i=0;ie.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new b(e.ranges.map(t=>Rt.fromJSON(t)),e.main)}static single(e,t=e){return new b([b.range(e,t)],0)}static create(e,t=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let i=0,r=0;rr.from-s.from),t=e.indexOf(i);for(let r=1;rs.head?b.range(a,l):b.range(l,a))}}return new b(e,t)}}function sa(n,e){for(let t of n.ranges)if(t.to>e)throw new RangeError("Selection points outside of document")}let Es=0;class R{constructor(e,t,i,r,s){this.combine=e,this.compareInput=t,this.compare=i,this.isStatic=r,this.id=Es++,this.default=e([]),this.extensions=typeof s=="function"?s(this):s}get reader(){return this}static define(e={}){return new R(e.combine||(t=>t),e.compareInput||((t,i)=>t===i),e.compare||(e.combine?(t,i)=>t===i:Os),!!e.static,e.enables)}of(e){return new xn([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new xn(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new xn(e,this,2,t)}from(e,t){return t||(t=i=>i),this.compute([e],i=>t(i.field(e)))}}function Os(n,e){return n==e||n.length==e.length&&n.every((t,i)=>t===e[i])}class xn{constructor(e,t,i,r){this.dependencies=e,this.facet=t,this.type=i,this.value=r,this.id=Es++}dynamicSlot(e){var t;let i=this.value,r=this.facet.compareInput,s=this.id,o=e[s]>>1,l=this.type==2,a=!1,h=!1,c=[];for(let f of this.dependencies)f=="doc"?a=!0:f=="selection"?h=!0:(((t=e[f.id])!==null&&t!==void 0?t:1)&1)==0&&c.push(e[f.id]);return{create(f){return f.values[o]=i(f),1},update(f,u){if(a&&u.docChanged||h&&(u.docChanged||u.selection)||$r(f,c)){let d=i(f);if(l?!wo(d,f.values[o],r):!r(d,f.values[o]))return f.values[o]=d,1}return 0},reconfigure:(f,u)=>{let d,p=u.config.address[s];if(p!=null){let m=Dn(u,p);if(this.dependencies.every(g=>g instanceof R?u.facet(g)===f.facet(g):g instanceof qe?u.field(g,!1)==f.field(g,!1):!0)||(l?wo(d=i(f),m,r):r(d=i(f),m)))return f.values[o]=m,0}else d=i(f);return f.values[o]=d,1}}}}function wo(n,e,t){if(n.length!=e.length)return!1;for(let i=0;in[a.id]),r=t.map(a=>a.type),s=i.filter(a=>!(a&1)),o=n[e.id]>>1;function l(a){let h=[];for(let c=0;ci===r),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(Ji).find(i=>i.field==this);return((t==null?void 0:t.create)||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:i=>(i.values[t]=this.create(i),1),update:(i,r)=>{let s=i.values[t],o=this.updateF(s,r);return this.compareF(s,o)?0:(i.values[t]=o,1)},reconfigure:(i,r)=>{let s=i.facet(Ji),o=r.facet(Ji),l;return(l=s.find(a=>a.field==this))&&l!=o.find(a=>a.field==this)?(i.values[t]=l.create(i),1):r.config.address[this.id]!=null?(i.values[t]=r.field(this),0):(i.values[t]=this.create(i),1)}}}init(e){return[this,Ji.of({field:this,create:e})]}get extension(){return this}}const Bt={lowest:4,low:3,default:2,high:1,highest:0};function fi(n){return e=>new oa(e,n)}const Wt={highest:fi(Bt.highest),high:fi(Bt.high),default:fi(Bt.default),low:fi(Bt.low),lowest:fi(Bt.lowest)};class oa{constructor(e,t){this.inner=e,this.prec=t}}class Hi{of(e){return new Ur(this,e)}reconfigure(e){return Hi.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}}class Ur{constructor(e,t){this.compartment=e,this.inner=t}}class Mn{constructor(e,t,i,r,s,o){for(this.base=e,this.compartments=t,this.dynamicSlots=i,this.address=r,this.staticValues=s,this.facets=o,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,t,i){let r=[],s=Object.create(null),o=new Map;for(let u of Kc(e,t,o))u instanceof qe?r.push(u):(s[u.facet.id]||(s[u.facet.id]=[])).push(u);let l=Object.create(null),a=[],h=[];for(let u of r)l[u.id]=h.length<<1,h.push(d=>u.slot(d));let c=i==null?void 0:i.config.facets;for(let u in s){let d=s[u],p=d[0].facet,m=c&&c[u]||[];if(d.every(g=>g.type==0))if(l[p.id]=a.length<<1|1,Os(m,d))a.push(i.facet(p));else{let g=p.combine(d.map(y=>y.value));a.push(i&&p.compare(g,i.facet(p))?i.facet(p):g)}else{for(let g of d)g.type==0?(l[g.id]=a.length<<1|1,a.push(g.value)):(l[g.id]=h.length<<1,h.push(y=>g.dynamicSlot(y)));l[p.id]=h.length<<1,h.push(g=>qc(g,p,d))}}let f=h.map(u=>u(l));return new Mn(e,o,f,l,a,s)}}function Kc(n,e,t){let i=[[],[],[],[],[]],r=new Map;function s(o,l){let a=r.get(o);if(a!=null){if(a<=l)return;let h=i[a].indexOf(o);h>-1&&i[a].splice(h,1),o instanceof Ur&&t.delete(o.compartment)}if(r.set(o,l),Array.isArray(o))for(let h of o)s(h,l);else if(o instanceof Ur){if(t.has(o.compartment))throw new RangeError("Duplicate use of compartment in extensions");let h=e.get(o.compartment)||o.inner;t.set(o.compartment,h),s(h,l)}else if(o instanceof oa)s(o.inner,o.prec);else if(o instanceof qe)i[l].push(o),o.provides&&s(o.provides,l);else if(o instanceof xn)i[l].push(o),o.facet.extensions&&s(o.facet.extensions,Bt.default);else{let h=o.extension;if(!h)throw new Error(`Unrecognized extension value in extension set (${o}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);s(h,l)}}return s(n,Bt.default),i.reduce((o,l)=>o.concat(l))}function xi(n,e){if(e&1)return 2;let t=e>>1,i=n.status[t];if(i==4)throw new Error("Cyclic dependency between fields and/or facets");if(i&2)return i;n.status[t]=4;let r=n.computeSlot(n,n.config.dynamicSlots[t]);return n.status[t]=2|r}function Dn(n,e){return e&1?n.config.staticValues[e>>1]:n.values[e>>1]}const la=R.define(),qr=R.define({combine:n=>n.some(e=>e),static:!0}),aa=R.define({combine:n=>n.length?n[0]:void 0,static:!0}),ha=R.define(),ca=R.define(),fa=R.define(),ua=R.define({combine:n=>n.length?n[0]:!1});class ct{constructor(e,t){this.type=e,this.value=t}static define(){return new jc}}class jc{of(e){return new ct(this,e)}}class Gc{constructor(e){this.map=e}of(e){return new G(this,e)}}class G{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return t===void 0?void 0:t==this.value?this:new G(this.type,t)}is(e){return this.type==e}static define(e={}){return new Gc(e.map||(t=>t))}static mapEffects(e,t){if(!e.length)return e;let i=[];for(let r of e){let s=r.map(t);s&&i.push(s)}return i}}G.reconfigure=G.define();G.appendConfig=G.define();class se{constructor(e,t,i,r,s,o){this.startState=e,this.changes=t,this.selection=i,this.effects=r,this.annotations=s,this.scrollIntoView=o,this._doc=null,this._state=null,i&&sa(i,t.newLength),s.some(l=>l.type==se.time)||(this.annotations=s.concat(se.time.of(Date.now())))}static create(e,t,i,r,s,o){return new se(e,t,i,r,s,o)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation(se.userEvent);return!!(t&&(t==e||t.length>e.length&&t.slice(0,e.length)==e&&t[e.length]=="."))}}se.time=ct.define();se.userEvent=ct.define();se.addToHistory=ct.define();se.remote=ct.define();function Yc(n,e){let t=[];for(let i=0,r=0;;){let s,o;if(i=n[i]))s=n[i++],o=n[i++];else if(r=0;r--){let s=i[r](n);s instanceof se?n=s:Array.isArray(s)&&s.length==1&&s[0]instanceof se?n=s[0]:n=pa(e,Xt(s),!1)}return n}function Jc(n){let e=n.startState,t=e.facet(fa),i=n;for(let r=t.length-1;r>=0;r--){let s=t[r](n);s&&Object.keys(s).length&&(i=da(i,Kr(e,s,n.changes.newLength),!0))}return i==n?n:se.create(e,n.changes,n.selection,i.effects,i.annotations,i.scrollIntoView)}const Qc=[];function Xt(n){return n==null?Qc:Array.isArray(n)?n:[n]}var Re=(function(n){return n[n.Word=0]="Word",n[n.Space=1]="Space",n[n.Other=2]="Other",n})(Re||(Re={}));const Zc=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;let jr;try{jr=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function ef(n){if(jr)return jr.test(n);for(let e=0;e"€"&&(t.toUpperCase()!=t.toLowerCase()||Zc.test(t)))return!0}return!1}function tf(n){return e=>{if(!/\S/.test(e))return Re.Space;if(ef(e))return Re.Word;for(let t=0;t-1)return Re.Word;return Re.Other}}class U{constructor(e,t,i,r,s,o){this.config=e,this.doc=t,this.selection=i,this.values=r,this.status=e.statusTemplate.slice(),this.computeSlot=s,o&&(o._state=this);for(let l=0;lr.set(h,a)),t=null),r.set(l.value.compartment,l.value.extension)):l.is(G.reconfigure)?(t=null,i=l.value):l.is(G.appendConfig)&&(t=null,i=Xt(i).concat(l.value));let s;t?s=e.startState.values.slice():(t=Mn.resolve(i,r,this),s=new U(t,this.doc,this.selection,t.dynamicSlots.map(()=>null),(a,h)=>h.reconfigure(a,this),null).values);let o=e.startState.facet(qr)?e.newSelection:e.newSelection.asSingle();new U(t,e.newDoc,o,s,(l,a)=>a.update(l,e),e)}replaceSelection(e){return typeof e=="string"&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:b.cursor(t.from+e.length)}))}changeByRange(e){let t=this.selection,i=e(t.ranges[0]),r=this.changes(i.changes),s=[i.range],o=Xt(i.effects);for(let l=1;lo.spec.fromJSON(l,a)))}}return U.create({doc:e.doc,selection:b.fromJSON(e.selection),extensions:t.extensions?r.concat([t.extensions]):r})}static create(e={}){let t=Mn.resolve(e.extensions||[],new Map),i=e.doc instanceof z?e.doc:z.of((e.doc||"").split(t.staticFacet(U.lineSeparator)||Vr)),r=e.selection?e.selection instanceof b?e.selection:b.single(e.selection.anchor,e.selection.head):b.single(0);return sa(r,i.length),t.staticFacet(qr)||(r=r.asSingle()),new U(t,i,r,t.dynamicSlots.map(()=>null),(s,o)=>o.create(s),null)}get tabSize(){return this.facet(U.tabSize)}get lineBreak(){return this.facet(U.lineSeparator)||` -`}get readOnly(){return this.facet(ua)}phrase(e,...t){for(let i of this.facet(U.phrases))if(Object.prototype.hasOwnProperty.call(i,e)){e=i[e];break}return t.length&&(e=e.replace(/\$(\$|\d*)/g,(i,r)=>{if(r=="$")return"$";let s=+(r||1);return!s||s>t.length?i:t[s-1]})),e}languageDataAt(e,t,i=-1){let r=[];for(let s of this.facet(la))for(let o of s(this,t,i))Object.prototype.hasOwnProperty.call(o,e)&&r.push(o[e]);return r}charCategorizer(e){let t=this.languageDataAt("wordChars",e);return tf(t.length?t[0]:"")}wordAt(e){let{text:t,from:i,length:r}=this.doc.lineAt(e),s=this.charCategorizer(e),o=e-i,l=e-i;for(;o>0;){let a=de(t,o,!1);if(s(t.slice(a,o))!=Re.Word)break;o=a}for(;ln.length?n[0]:4});U.lineSeparator=aa;U.readOnly=ua;U.phrases=R.define({compare(n,e){let t=Object.keys(n),i=Object.keys(e);return t.length==i.length&&t.every(r=>n[r]==e[r])}});U.languageData=la;U.changeFilter=ha;U.transactionFilter=ca;U.transactionExtender=fa;Hi.reconfigure=G.define();function Un(n,e,t={}){let i={};for(let r of n)for(let s of Object.keys(r)){let o=r[s],l=i[s];if(l===void 0)i[s]=o;else if(!(l===o||o===void 0))if(Object.hasOwnProperty.call(t,s))i[s]=t[s](l,o);else throw new Error("Config merge conflict for field "+s)}for(let r in e)i[r]===void 0&&(i[r]=e[r]);return i}class wt{eq(e){return this==e}range(e,t=e){return Gr.create(e,t,this)}}wt.prototype.startSide=wt.prototype.endSide=0;wt.prototype.point=!1;wt.prototype.mapMode=be.TrackDel;function Ls(n,e){return n==e||n.constructor==e.constructor&&n.eq(e)}let Gr=class ma{constructor(e,t,i){this.from=e,this.to=t,this.value=i}static create(e,t,i){return new ma(e,t,i)}};function Yr(n,e){return n.from-e.from||n.value.startSide-e.value.startSide}class Bs{constructor(e,t,i,r){this.from=e,this.to=t,this.value=i,this.maxPoint=r}get length(){return this.to[this.to.length-1]}findIndex(e,t,i,r=0){let s=i?this.to:this.from;for(let o=r,l=s.length;;){if(o==l)return o;let a=o+l>>1,h=s[a]-e||(i?this.value[a].endSide:this.value[a].startSide)-t;if(a==o)return h>=0?o:l;h>=0?l=a:o=a+1}}between(e,t,i,r){for(let s=this.findIndex(t,-1e9,!0),o=this.findIndex(i,1e9,!1,s);sd||u==d&&h.startSide>0&&h.endSide<=0)continue;(d-u||h.endSide-h.startSide)<0||(o<0&&(o=u),h.point&&(l=Math.max(l,d-u)),i.push(h),r.push(u-o),s.push(d-o))}return{mapped:i.length?new Bs(r,s,i,l):null,pos:o}}}class W{constructor(e,t,i,r){this.chunkPos=e,this.chunk=t,this.nextLayer=i,this.maxPoint=r}static create(e,t,i,r){return new W(e,t,i,r)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let t of this.chunk)e+=t.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:t=[],sort:i=!1,filterFrom:r=0,filterTo:s=this.length}=e,o=e.filter;if(t.length==0&&!o)return this;if(i&&(t=t.slice().sort(Yr)),this.isEmpty)return t.length?W.of(t):this;let l=new ga(this,null,-1).goto(0),a=0,h=[],c=new Di;for(;l.value||a=0){let f=t[a++];c.addInner(f.from,f.to,f.value)||h.push(f)}else l.rangeIndex==1&&l.chunkIndexthis.chunkEnd(l.chunkIndex)||sl.to||s=s&&e<=s+o.length&&o.between(s,e-s,t-s,i)===!1)return}this.nextLayer.between(e,t,i)}}iter(e=0){return Ei.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,t=0){return Ei.from(e).goto(t)}static compare(e,t,i,r,s=-1){let o=e.filter(f=>f.maxPoint>0||!f.isEmpty&&f.maxPoint>=s),l=t.filter(f=>f.maxPoint>0||!f.isEmpty&&f.maxPoint>=s),a=xo(o,l,i),h=new ui(o,a,s),c=new ui(l,a,s);i.iterGaps((f,u,d)=>vo(h,f,c,u,d,r)),i.empty&&i.length==0&&vo(h,0,c,0,0,r)}static eq(e,t,i=0,r){r==null&&(r=999999999);let s=e.filter(c=>!c.isEmpty&&t.indexOf(c)<0),o=t.filter(c=>!c.isEmpty&&e.indexOf(c)<0);if(s.length!=o.length)return!1;if(!s.length)return!0;let l=xo(s,o),a=new ui(s,l,0).goto(i),h=new ui(o,l,0).goto(i);for(;;){if(a.to!=h.to||!Xr(a.active,h.active)||a.point&&(!h.point||!Ls(a.point,h.point)))return!1;if(a.to>r)return!0;a.next(),h.next()}}static spans(e,t,i,r,s=-1){let o=new ui(e,null,s).goto(t),l=t,a=o.openStart;for(;;){let h=Math.min(o.to,i);if(o.point){let c=o.activeForPoint(o.to),f=o.pointFroml&&(r.span(l,h,o.active,a),a=o.openEnd(h));if(o.to>i)return a+(o.point&&o.to>i?1:0);l=o.to,o.next()}}static of(e,t=!1){let i=new Di;for(let r of e instanceof Gr?[e]:t?nf(e):e)i.add(r.from,r.to,r.value);return i.finish()}static join(e){if(!e.length)return W.empty;let t=e[e.length-1];for(let i=e.length-2;i>=0;i--)for(let r=e[i];r!=W.empty;r=r.nextLayer)t=new W(r.chunkPos,r.chunk,t,Math.max(r.maxPoint,t.maxPoint));return t}}W.empty=new W([],[],null,-1);function nf(n){if(n.length>1)for(let e=n[0],t=1;t0)return n.slice().sort(Yr);e=i}return n}W.empty.nextLayer=W.empty;class Di{finishChunk(e){this.chunks.push(new Bs(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,t,i){this.addInner(e,t,i)||(this.nextLayer||(this.nextLayer=new Di)).add(e,t,i)}addInner(e,t,i){let r=e-this.lastTo||i.startSide-this.last.endSide;if(r<=0&&(e-this.lastFrom||i.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return r<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(t-this.chunkStart),this.last=i,this.lastFrom=e,this.lastTo=t,this.value.push(i),i.point&&(this.maxPoint=Math.max(this.maxPoint,t-e)),!0)}addChunk(e,t){if((e-this.lastTo||t.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,t.maxPoint),this.chunks.push(t),this.chunkPos.push(e);let i=t.value.length-1;return this.last=t.value[i],this.lastFrom=t.from[i]+e,this.lastTo=t.to[i]+e,!0}finish(){return this.finishInner(W.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let t=W.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,t}}function xo(n,e,t){let i=new Map;for(let s of n)for(let o=0;o=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=i&&r.push(new ga(o,t,i,s));return r.length==1?r[0]:new Ei(r)}get startSide(){return this.value?this.value.startSide:0}goto(e,t=-1e9){for(let i of this.heap)i.goto(e,t);for(let i=this.heap.length>>1;i>=0;i--)cr(this.heap,i);return this.next(),this}forward(e,t){for(let i of this.heap)i.forward(e,t);for(let i=this.heap.length>>1;i>=0;i--)cr(this.heap,i);(this.to-e||this.value.endSide-t)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),cr(this.heap,0)}}}function cr(n,e){for(let t=n[e];;){let i=(e<<1)+1;if(i>=n.length)break;let r=n[i];if(i+1=0&&(r=n[i+1],i++),t.compare(r)<0)break;n[i]=t,n[e]=r,e=i}}class ui{constructor(e,t,i){this.minPoint=i,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=Ei.from(e,t,i)}goto(e,t=-1e9){return this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this}forward(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)}removeActive(e){Qi(this.active,e),Qi(this.activeTo,e),Qi(this.activeRank,e),this.minActive=ko(this.active,this.activeTo)}addActive(e){let t=0,{value:i,to:r,rank:s}=this.cursor;for(;t0;)t++;Zi(this.active,t,i),Zi(this.activeTo,t,r),Zi(this.activeRank,t,s),e&&Zi(e,t,this.cursor.from),this.minActive=ko(this.active,this.activeTo)}next(){let e=this.to,t=this.point;this.point=null;let i=this.openStart<0?[]:null;for(;;){let r=this.minActive;if(r>-1&&(this.activeTo[r]-this.cursor.from||this.active[r].endSide-this.cursor.startSide)<0){if(this.activeTo[r]>e){this.to=this.activeTo[r],this.endSide=this.active[r].endSide;break}this.removeActive(r),i&&Qi(i,r)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let s=this.cursor.value;if(!s.point)this.addActive(i),this.cursor.next();else if(t&&this.cursor.to==this.to&&this.cursor.from=0&&i[r]=0&&!(this.activeRank[i]e||this.activeTo[i]==e&&this.active[i].endSide>=this.point.endSide)&&t.push(this.active[i]);return t.reverse()}openEnd(e){let t=0;for(let i=this.activeTo.length-1;i>=0&&this.activeTo[i]>e;i--)t++;return t}}function vo(n,e,t,i,r,s){n.goto(e),t.goto(i);let o=i+r,l=i,a=i-e,h=!!s.boundChange;for(let c=!1;;){let f=n.to+a-t.to,u=f||n.endSide-t.endSide,d=u<0?n.to+a:t.to,p=Math.min(d,o);if(n.point||t.point?(n.point&&t.point&&Ls(n.point,t.point)&&Xr(n.activeForPoint(n.to),t.activeForPoint(t.to))||s.comparePoint(l,p,n.point,t.point),c=!1):(c&&s.boundChange(l),p>l&&!Xr(n.active,t.active)&&s.compareRange(l,p,n.active,t.active),h&&po)break;l=d,u<=0&&n.next(),u>=0&&t.next()}}function Xr(n,e){if(n.length!=e.length)return!1;for(let t=0;t=e;i--)n[i+1]=n[i];n[e]=t}function ko(n,e){let t=-1,i=1e9;for(let r=0;r=e)return r;if(r==n.length)break;s+=n.charCodeAt(r)==9?t-s%t:1,r=de(n,r)}return n.length}const Jr="ͼ",So=typeof Symbol>"u"?"__"+Jr:Symbol.for(Jr),Qr=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),Co=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{};class xt{constructor(e,t){this.rules=[];let{finish:i}=t||{};function r(o){return/^@/.test(o)?[o]:o.split(/,\s*/)}function s(o,l,a,h){let c=[],f=/^@(\w+)\b/.exec(o[0]),u=f&&f[1]=="keyframes";if(f&&l==null)return a.push(o[0]+";");for(let d in l){let p=l[d];if(/&/.test(d))s(d.split(/,\s*/).map(m=>o.map(g=>m.replace(/&/,g))).reduce((m,g)=>m.concat(g)),p,a);else if(p&&typeof p=="object"){if(!f)throw new RangeError("The value of a property ("+d+") should be a primitive value.");s(r(d),p,c,u)}else p!=null&&c.push(d.replace(/_.*/,"").replace(/[A-Z]/g,m=>"-"+m.toLowerCase())+": "+p+";")}(c.length||u)&&a.push((i&&!f&&!h?o.map(i):o).join(", ")+" {"+c.join(" ")+"}")}for(let o in e)s(r(o),e[o],this.rules)}getRules(){return this.rules.join(` -`)}static newName(){let e=Co[So]||1;return Co[So]=e+1,Jr+e.toString(36)}static mount(e,t,i){let r=e[Qr],s=i&&i.nonce;r?s&&r.setNonce(s):r=new sf(e,s),r.mount(Array.isArray(t)?t:[t],e)}}let Ao=new Map;class sf{constructor(e,t){let i=e.ownerDocument||e,r=i.defaultView;if(!e.head&&e.adoptedStyleSheets&&r.CSSStyleSheet){let s=Ao.get(i);if(s)return e[Qr]=s;this.sheet=new r.CSSStyleSheet,Ao.set(i,this)}else this.styleTag=i.createElement("style"),t&&this.styleTag.setAttribute("nonce",t);this.modules=[],e[Qr]=this}mount(e,t){let i=this.sheet,r=0,s=0;for(let o=0;o-1&&(this.modules.splice(a,1),s--,a=-1),a==-1){if(this.modules.splice(s++,0,l),i)for(let h=0;h",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},of=typeof navigator<"u"&&/Mac/.test(navigator.platform),lf=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);for(var ce=0;ce<10;ce++)vt[48+ce]=vt[96+ce]=String(ce);for(var ce=1;ce<=24;ce++)vt[ce+111]="F"+ce;for(var ce=65;ce<=90;ce++)vt[ce]=String.fromCharCode(ce+32),Oi[ce]=String.fromCharCode(ce);for(var fr in vt)Oi.hasOwnProperty(fr)||(Oi[fr]=vt[fr]);function af(n){var e=of&&n.metaKey&&n.shiftKey&&!n.ctrlKey&&!n.altKey||lf&&n.shiftKey&&n.key&&n.key.length==1||n.key=="Unidentified",t=!e&&n.key||(n.shiftKey?Oi:vt)[n.keyCode]||n.key||"Unidentified";return t=="Esc"&&(t="Escape"),t=="Del"&&(t="Delete"),t=="Left"&&(t="ArrowLeft"),t=="Up"&&(t="ArrowUp"),t=="Right"&&(t="ArrowRight"),t=="Down"&&(t="ArrowDown"),t}let me=typeof navigator<"u"?navigator:{userAgent:"",vendor:"",platform:""},Zr=typeof document<"u"?document:{documentElement:{style:{}}};const es=/Edge\/(\d+)/.exec(me.userAgent),ya=/MSIE \d/.test(me.userAgent),ts=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(me.userAgent),Kn=!!(ya||ts||es),To=!Kn&&/gecko\/(\d+)/i.test(me.userAgent),ur=!Kn&&/Chrome\/(\d+)/.exec(me.userAgent),hf="webkitFontSmoothing"in Zr.documentElement.style,is=!Kn&&/Apple Computer/.test(me.vendor),Mo=is&&(/Mobile\/\w+/.test(me.userAgent)||me.maxTouchPoints>2);var O={mac:Mo||/Mac/.test(me.platform),windows:/Win/.test(me.platform),linux:/Linux|X11/.test(me.platform),ie:Kn,ie_version:ya?Zr.documentMode||6:ts?+ts[1]:es?+es[1]:0,gecko:To,gecko_version:To?+(/Firefox\/(\d+)/.exec(me.userAgent)||[0,0])[1]:0,chrome:!!ur,chrome_version:ur?+ur[1]:0,ios:Mo,android:/Android\b/.test(me.userAgent),webkit_version:hf?+(/\bAppleWebKit\/(\d+)/.exec(me.userAgent)||[0,0])[1]:0,safari:is,safari_version:is?+(/\bVersion\/(\d+(\.\d+)?)/.exec(me.userAgent)||[0,0])[1]:0,tabSize:Zr.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"};function Rs(n,e){for(let t in n)t=="class"&&e.class?e.class+=" "+n.class:t=="style"&&e.style?e.style+=";"+n.style:e[t]=n[t];return e}const En=Object.create(null);function Is(n,e,t){if(n==e)return!0;n||(n=En),e||(e=En);let i=Object.keys(n),r=Object.keys(e);if(i.length-0!=r.length-0)return!1;for(let s of i)if(s!=t&&(r.indexOf(s)==-1||n[s]!==e[s]))return!1;return!0}function cf(n,e){for(let t=n.attributes.length-1;t>=0;t--){let i=n.attributes[t].name;e[i]==null&&n.removeAttribute(i)}for(let t in e){let i=e[t];t=="style"?n.style.cssText=i:n.getAttribute(t)!=i&&n.setAttribute(t,i)}}function Do(n,e,t){let i=!1;if(e)for(let r in e)t&&r in t||(i=!0,r=="style"?n.style.cssText="":n.removeAttribute(r));if(t)for(let r in t)e&&e[r]==t[r]||(i=!0,r=="style"?n.style.cssText=t[r]:n.setAttribute(r,t[r]));return i}function ff(n){let e=Object.create(null);for(let t=0;t0?3e8:-4e8:t>0?1e8:-1e8,new Vt(e,t,t,i,e.widget||null,!1)}static replace(e){let t=!!e.block,i,r;if(e.isBlockGap)i=-5e8,r=4e8;else{let{start:s,end:o}=ba(e,t);i=(s?t?-3e8:-1:5e8)-1,r=(o?t?2e8:1:-6e8)+1}return new Vt(e,i,r,t,e.widget||null,!0)}static line(e){return new $i(e)}static set(e,t=!1){return W.of(e,t)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}}Y.none=W.empty;class zi extends Y{constructor(e){let{start:t,end:i}=ba(e);super(t?-1:5e8,i?1:-6e8,null,e),this.tagName=e.tagName||"span",this.attrs=e.class&&e.attributes?Rs(e.attributes,{class:e.class}):e.class?{class:e.class}:e.attributes||En}eq(e){return this==e||e instanceof zi&&this.tagName==e.tagName&&Is(this.attrs,e.attrs)}range(e,t=e){if(e>=t)throw new RangeError("Mark decorations may not be empty");return super.range(e,t)}}zi.prototype.point=!1;class $i extends Y{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof $i&&this.spec.class==e.spec.class&&Is(this.spec.attributes,e.spec.attributes)}range(e,t=e){if(t!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,t)}}$i.prototype.mapMode=be.TrackBefore;$i.prototype.point=!0;class Vt extends Y{constructor(e,t,i,r,s,o){super(t,i,s,e),this.block=r,this.isReplace=o,this.mapMode=r?t<=0?be.TrackBefore:be.TrackAfter:be.TrackDel}get type(){return this.startSide!=this.endSide?ve.WidgetRange:this.startSide<=0?ve.WidgetBefore:ve.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof Vt&&uf(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,t=e){if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&t!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,t)}}Vt.prototype.point=!0;function ba(n,e=!1){let{inclusiveStart:t,inclusiveEnd:i}=n;return t==null&&(t=n.inclusive),i==null&&(i=n.inclusive),{start:t??e,end:i??e}}function uf(n,e){return n==e||!!(n&&e&&n.compare(e))}function Jt(n,e,t,i=0){let r=t.length-1;r>=0&&t[r]+i>=n?t[r]=Math.max(t[r],e):t.push(n,e)}class Li extends wt{constructor(e,t){super(),this.tagName=e,this.attributes=t}eq(e){return e==this||e instanceof Li&&this.tagName==e.tagName&&Is(this.attributes,e.attributes)}static create(e){return new Li(e.tagName,e.attributes||En)}static set(e,t=!1){return W.of(e,t)}}Li.prototype.startSide=Li.prototype.endSide=-1;function Bi(n){let e;return n.nodeType==11?e=n.getSelection?n:n.ownerDocument:e=n,e.getSelection()}function ns(n,e){return e?n==e||n.contains(e.nodeType!=1?e.parentNode:e):!1}function vi(n,e){if(!e.anchorNode)return!1;try{return ns(n,e.anchorNode)}catch{return!1}}function vn(n){return n.nodeType==3?Ri(n,0,n.nodeValue.length).getClientRects():n.nodeType==1?n.getClientRects():[]}function ki(n,e,t,i){return t?Eo(n,e,t,i,-1)||Eo(n,e,t,i,1):!1}function kt(n){for(var e=0;;e++)if(n=n.previousSibling,!n)return e}function On(n){return n.nodeType==1&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(n.nodeName)}function Eo(n,e,t,i,r){for(;;){if(n==t&&e==i)return!0;if(e==(r<0?0:ht(n))){if(n.nodeName=="DIV")return!1;let s=n.parentNode;if(!s||s.nodeType!=1)return!1;e=kt(n)+(r<0?0:1),n=s}else if(n.nodeType==1){if(n=n.childNodes[e+(r<0?-1:0)],n.nodeType==1&&n.contentEditable=="false")return!1;e=r<0?ht(n):0}else return!1}}function ht(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}function Ln(n,e){let t=e?n.left:n.right;return{left:t,right:t,top:n.top,bottom:n.bottom}}function df(n){let e=n.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:n.innerWidth,top:0,bottom:n.innerHeight}}function wa(n,e){let t=e.width/n.offsetWidth,i=e.height/n.offsetHeight;return(t>.995&&t<1.005||!isFinite(t)||Math.abs(e.width-n.offsetWidth)<1)&&(t=1),(i>.995&&i<1.005||!isFinite(i)||Math.abs(e.height-n.offsetHeight)<1)&&(i=1),{scaleX:t,scaleY:i}}function pf(n,e,t,i,r,s,o,l){let a=n.ownerDocument,h=a.defaultView||window;for(let c=n,f=!1;c&&!f;)if(c.nodeType==1){let u,d=c==a.body,p=1,m=1;if(d)u=df(h);else{if(/^(fixed|sticky)$/.test(getComputedStyle(c).position)&&(f=!0),c.scrollHeight<=c.clientHeight&&c.scrollWidth<=c.clientWidth){c=c.assignedSlot||c.parentNode;continue}let w=c.getBoundingClientRect();({scaleX:p,scaleY:m}=wa(c,w)),u={left:w.left,right:w.left+c.clientWidth*p,top:w.top,bottom:w.top+c.clientHeight*m}}let g=0,y=0;if(r=="nearest")e.top0&&e.bottom>u.bottom+y&&(y=e.bottom-u.bottom+o)):e.bottom>u.bottom-o&&(y=e.bottom-u.bottom+o,t<0&&e.top-y0&&e.right>u.right+g&&(g=e.right-u.right+s)):e.right>u.right-s&&(g=e.right-u.right+s,t<0&&e.leftu.bottom||e.leftu.right)&&(e={left:Math.max(e.left,u.left),right:Math.min(e.right,u.right),top:Math.max(e.top,u.top),bottom:Math.min(e.bottom,u.bottom)}),c=c.assignedSlot||c.parentNode}else if(c.nodeType==11)c=c.host;else break}function xa(n,e=!0){let t=n.ownerDocument,i=null,r=null;for(let s=n.parentNode;s&&!(s==t.body||(!e||i)&&r);)if(s.nodeType==1)!r&&s.scrollHeight>s.clientHeight&&(r=s),e&&!i&&s.scrollWidth>s.clientWidth&&(i=s),s=s.assignedSlot||s.parentNode;else if(s.nodeType==11)s=s.host;else break;return{x:i,y:r}}class mf{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:t,focusNode:i}=e;this.set(t,Math.min(e.anchorOffset,t?ht(t):0),i,Math.min(e.focusOffset,i?ht(i):0))}set(e,t,i,r){this.anchorNode=e,this.anchorOffset=t,this.focusNode=i,this.focusOffset=r}}let Lt=null;O.safari&&O.safari_version>=26&&(Lt=!1);function va(n){if(n.setActive)return n.setActive();if(Lt)return n.focus(Lt);let e=[];for(let t=n;t&&(e.push(t,t.scrollTop,t.scrollLeft),t!=t.ownerDocument);t=t.parentNode);if(n.focus(Lt==null?{get preventScroll(){return Lt={preventScroll:!0},!0}}:void 0),!Lt){Lt=!1;for(let t=0;tMath.max(0,n.document.documentElement.scrollHeight-n.innerHeight-4):n.scrollTop>Math.max(1,n.scrollHeight-n.clientHeight-4)}function Sa(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i>0)return{node:t,offset:i};if(t.nodeType==1&&i>0){if(t.contentEditable=="false")return null;t=t.childNodes[i-1],i=ht(t)}else if(t.parentNode&&!On(t))i=kt(t),t=t.parentNode;else return null}}function Ca(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i=t){if(l.level==i)return o;(s<0||(r!=0?r<0?l.fromt:e[s].level>l.level))&&(s=o)}}if(s<0)throw new RangeError("Index out of range");return s}}function Ma(n,e){if(n.length!=e.length)return!1;for(let t=0;t=0;m-=3)if(Ge[m+1]==-d){let g=Ge[m+2],y=g&2?r:g&4?g&1?s:r:0;y&&(j[f]=j[Ge[m]]=y),l=m;break}}else{if(Ge.length==189)break;Ge[l++]=f,Ge[l++]=u,Ge[l++]=a}else if((p=j[f])==2||p==1){let m=p==r;a=m?0:1;for(let g=l-3;g>=0;g-=3){let y=Ge[g+2];if(y&2)break;if(m)Ge[g+2]|=2;else{if(y&4)break;Ge[g+2]|=4}}}}}function Sf(n,e,t,i){for(let r=0,s=i;r<=t.length;r++){let o=r?t[r-1].to:n,l=ra;)p==g&&(p=t[--m].from,g=m?t[m-1].to:n),j[--p]=d;a=c}else s=h,a++}}}function ss(n,e,t,i,r,s,o){let l=i%2?2:1;if(i%2==r%2)for(let a=e,h=0;aa&&o.push(new tt(a,m.from,d));let g=m.direction==Ht!=!(d%2);os(n,g?i+1:i,r,m.inner,m.from,m.to,o),a=m.to}p=m.to}else{if(p==t||(c?j[p]!=l:j[p]==l))break;p++}u?ss(n,a,p,i+1,r,u,o):ae;){let c=!0,f=!1;if(!h||a>s[h-1].to){let m=j[a-1];m!=l&&(c=!1,f=m==16)}let u=!c&&l==1?[]:null,d=c?i:i+1,p=a;e:for(;;)if(h&&p==s[h-1].to){if(f)break e;let m=s[--h];if(!c)for(let g=m.from,y=h;;){if(g==e)break e;if(y&&s[y-1].to==g)g=s[--y].from;else{if(j[g-1]==l)break e;break}}if(u)u.push(m);else{m.toj.length;)j[j.length]=256;let i=[],r=e==Ht?0:1;return os(n,r,r,t,0,n.length,i),i}function Da(n){return[new tt(0,n,0)]}let Ea="";function Af(n,e,t,i,r){var s;let o=i.head-n.from,l=tt.find(e,o,(s=i.bidiLevel)!==null&&s!==void 0?s:-1,i.assoc),a=e[l],h=a.side(r,t);if(o==h){let u=l+=r?1:-1;if(u<0||u>=e.length)return null;a=e[l=u],o=a.side(!r,t),h=a.side(r,t)}let c=de(n.text,o,a.forward(r,t));(ca.to)&&(c=h),Ea=n.text.slice(Math.min(o,c),Math.max(o,c));let f=l==(r?e.length-1:0)?null:e[l+(r?1:-1)];return f&&c==h&&f.level+(r?0:1)n.some(e=>e)}),Mf=R.define({combine:n=>n.some(e=>e)}),Fa=R.define();class Zt{constructor(e,t,i,r,s,o=!1){this.range=e,this.y=t,this.x=i,this.yMargin=r,this.xMargin=s,this.isSnapshot=o}map(e){return e.empty?this:new Zt(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new Zt(b.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}}const en=G.define({map:(n,e)=>n.map(e)}),_a=G.define();function De(n,e,t){let i=n.facet(Ra);i.length?i[0](e):window.onerror&&window.onerror(String(e),t,void 0,void 0,e)||(t?console.error(t+":",e):console.error(e))}const lt=R.define({combine:n=>n.length?n[0]:!0});let Df=0;const Kt=R.define({combine(n){return n.filter((e,t)=>{for(let i=0;i{let a=[];return o&&a.push(Gn.of(h=>{let c=h.plugin(l);return c?o(c):Y.none})),s&&a.push(s(l)),a})}static fromClass(e,t){return _e.define((i,r)=>new e(i,r),t)}}class dr{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(e){if(this.value){if(this.mustUpdate){let t=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(t)}catch(i){if(De(t.state,i,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(e,this.spec.arg)}catch(t){De(e.state,t,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var t;if(!((t=this.value)===null||t===void 0)&&t.destroy)try{this.value.destroy()}catch(i){De(e.state,i,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}}const Wa=R.define(),_s=R.define(),Gn=R.define(),Va=R.define(),Ws=R.define(),Ui=R.define(),Ha=R.define();function Lo(n,e){let t=n.state.facet(Ha);if(!t.length)return t;let i=t.map(s=>s instanceof Function?s(n):s),r=[];return W.spans(i,e.from,e.to,{point(){},span(s,o,l,a){let h=s-e.from,c=o-e.from,f=r;for(let u=l.length-1;u>=0;u--,a--){let d=l[u].spec.bidiIsolate,p;if(d==null&&(d=Tf(e.text,h,c)),a>0&&f.length&&(p=f[f.length-1]).to==h&&p.direction==d)p.to=c,f=p.inner;else{let m={from:h,to:c,direction:d,inner:[]};f.push(m),f=m.inner}}}}),r}const za=R.define();function Vs(n){let e=0,t=0,i=0,r=0;for(let s of n.state.facet(za)){let o=s(n);o&&(o.left!=null&&(e=Math.max(e,o.left)),o.right!=null&&(t=Math.max(t,o.right)),o.top!=null&&(i=Math.max(i,o.top)),o.bottom!=null&&(r=Math.max(r,o.bottom)))}return{left:e,right:t,top:i,bottom:r}}const yi=R.define();class Ie{constructor(e,t,i,r){this.fromA=e,this.toA=t,this.fromB=i,this.toB=r}join(e){return new Ie(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let t=e.length,i=this;for(;t>0;t--){let r=e[t-1];if(!(r.fromA>i.toA)){if(r.toAr.push(new Ie(s,o,l,a))),this.changedRanges=r}static create(e,t,i){return new Bn(e,t,i)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}}const Ef=[];class ee{constructor(e,t,i=0){this.dom=e,this.length=t,this.flags=i,this.parent=null,e.cmTile=this}get breakAfter(){return this.flags&1}get children(){return Ef}isWidget(){return!1}get isHidden(){return!1}isComposite(){return!1}isLine(){return!1}isText(){return!1}isBlock(){return!1}get domAttrs(){return null}sync(e){if(this.flags|=2,this.flags&4){this.flags&=-5;let t=this.domAttrs;t&&cf(this.dom,t)}}toString(){return this.constructor.name+(this.children.length?`(${this.children})`:"")+(this.breakAfter?"#":"")}destroy(){this.parent=null}setDOM(e){this.dom=e,e.cmTile=this}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e,t=this.posAtStart){let i=t;for(let r of this.children){if(r==e)return i;i+=r.length+r.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(e){return this.posBefore(e)+e.length}covers(e){return!0}coordsIn(e,t){return null}domPosFor(e,t){let i=kt(this.dom),r=this.length?e>0:t>0;return new ze(this.parent.dom,i+(r?1:0),e==0||e==this.length)}markDirty(e){this.flags&=-3,e&&(this.flags|=4),this.parent&&this.parent.flags&2&&this.parent.markDirty(!1)}get overrideDOMText(){return null}get root(){for(let e=this;e;e=e.parent)if(e instanceof Xn)return e;return null}static get(e){return e.cmTile}}class Yn extends ee{constructor(e){super(e,0),this._children=[]}isComposite(){return!0}get children(){return this._children}get lastChild(){return this.children.length?this.children[this.children.length-1]:null}append(e){this.children.push(e),e.parent=this}sync(e){if(this.flags&2)return;super.sync(e);let t=this.dom,i=null,r,s=(e==null?void 0:e.node)==t?e:null,o=0;for(let l of this.children){if(l.sync(e),o+=l.length+l.breakAfter,r=i?i.nextSibling:t.firstChild,s&&r!=l.dom&&(s.written=!0),l.dom.parentNode==t)for(;r&&r!=l.dom;)r=Bo(r);else t.insertBefore(l.dom,r);i=l.dom}for(r=i?i.nextSibling:t.firstChild,s&&r&&(s.written=!0);r;)r=Bo(r);this.length=o}}function Bo(n){let e=n.nextSibling;return n.parentNode.removeChild(n),e}class Xn extends Yn{constructor(e,t){super(t),this.view=e}owns(e){for(;e;e=e.parent)if(e==this)return!0;return!1}isBlock(){return!0}nearest(e){for(;;){if(!e)return null;let t=ee.get(e);if(t&&this.owns(t))return t;e=e.parentNode}}blockTiles(e){for(let t=[],i=this,r=0,s=0;;)if(r==i.children.length){if(!t.length)return;i=i.parent,i.breakAfter&&s++,r=t.pop()}else{let o=i.children[r++];if(o instanceof at)t.push(r),i=o,r=0;else{let l=s+o.length,a=e(o,s);if(a!==void 0)return a;s=l+o.breakAfter}}}resolveBlock(e,t){let i,r=-1,s,o=-1;if(this.blockTiles((l,a)=>{let h=a+l.length;if(e>=a&&e<=h){if(l.isWidget()&&t>=-1&&t<=1){if(l.flags&32)return!0;l.flags&16&&(i=void 0)}(ae||e==a&&(t>1?l.length:l.covers(-1)))&&(!s||!l.isWidget()&&s.isWidget())&&(s=l,o=e-a)}}),!i&&!s)throw new Error("No tile at position "+e);return i&&t<0||!s?{tile:i,offset:r}:{tile:s,offset:o}}}class at extends Yn{constructor(e,t){super(e),this.wrapper=t}isBlock(){return!0}covers(e){return this.children.length?e<0?this.children[0].covers(-1):this.lastChild.covers(1):!1}get domAttrs(){return this.wrapper.attributes}static of(e,t){let i=new at(t||document.createElement(e.tagName),e);return t||(i.flags|=4),i}}class ii extends Yn{constructor(e,t){super(e),this.attrs=t}isLine(){return!0}static start(e,t,i){let r=new ii(t||document.createElement("div"),e);return(!t||!i)&&(r.flags|=4),r}get domAttrs(){return this.attrs}resolveInline(e,t,i){let r=null,s=-1,o=null,l=-1;function a(c,f){for(let u=0,d=0;u=f&&(p.isComposite()?a(p,f-d):(!o||o.isHidden&&(t>0||i&&Lf(o,p)))&&(m>f||p.flags&32)?(o=p,l=f-d):(di&&(e=i);let r=e,s=e,o=0;e==0&&t<0||e==i&&t>=0?O.chrome||O.gecko||(e?(r--,o=1):s=0)?0:l.length-1];return O.safari&&!o&&a.width==0&&(a=Array.prototype.find.call(l,h=>h.width)||a),o?Ln(a,o<0):a||null}static of(e,t){let i=new It(t||document.createTextNode(e),e);return t||(i.flags|=2),i}}class zt extends ee{constructor(e,t,i,r){super(e,t,r),this.widget=i}isWidget(){return!0}get isHidden(){return this.widget.isHidden}covers(e){return this.flags&48?!1:(this.flags&(e<0?64:128))>0}coordsIn(e,t){return this.coordsInWidget(e,t,!1)}coordsInWidget(e,t,i){let r=this.widget.coordsAt(this.dom,e,t);if(r)return r;if(i)return Ln(this.dom.getBoundingClientRect(),this.length?e==0:t<=0);{let s=this.dom.getClientRects(),o=null;if(!s.length)return null;let l=this.flags&16?!0:this.flags&32?!1:e>0;for(let a=l?s.length-1:0;o=s[a],!(e>0?a==0:a==s.length-1||o.top0;)if(r.isComposite())if(o){if(!e)break;i&&i.break(),e--,o=!1}else if(s==r.children.length){if(!e&&!l.length)break;i&&i.leave(r),o=!!r.breakAfter,{tile:r,index:s}=l.pop(),s++}else{let a=r.children[s],h=a.breakAfter;(t>0?a.length<=e:a.length=0;l--){let a=t.marks[l],h=r.lastChild;if(h instanceof we&&h.mark.eq(a.mark))h.dom!=a.dom&&h.setDOM(pr(a.dom)),r=h;else{if(this.cache.reused.get(a)){let f=ee.get(a.dom);f&&f.setDOM(pr(a.dom))}let c=we.of(a.mark,a.dom);r.append(c),r=c}this.cache.reused.set(a,2)}let s=ee.get(e.text);s&&this.cache.reused.set(s,2);let o=new It(e.text,e.text.nodeValue);o.flags|=8,r.append(o)}addInlineWidget(e,t,i){let r=this.afterWidget&&e.flags&48&&(this.afterWidget.flags&48)==(e.flags&48);r||this.flushBuffer();let s=this.ensureMarks(t,i);!r&&!(e.flags&16)&&s.append(this.getBuffer(1)),s.append(e),this.pos+=e.length,this.afterWidget=e}addMark(e,t,i){this.flushBuffer(),this.ensureMarks(t,i).append(e),this.pos+=e.length,this.afterWidget=null}addBlockWidget(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}continueWidget(e){let t=this.afterWidget||this.lastBlock;t.length+=e,this.pos+=e}addLineStart(e,t){var i;e||(e=$a);let r=ii.start(e,t||((i=this.cache.find(ii))===null||i===void 0?void 0:i.dom),!!t);this.getBlockPos().append(this.lastBlock=this.curLine=r)}addLine(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}addBreak(){this.lastBlock.flags|=1,this.endLine(),this.pos++}addLineStartIfNotCovered(e){this.blockPosCovered()||this.addLineStart(e)}ensureLine(e){this.curLine||this.addLineStart(e)}ensureMarks(e,t){var i;let r=this.curLine;for(let s=e.length-1;s>=0;s--){let o=e[s],l;if(t>0&&(l=r.lastChild)&&l instanceof we&&l.mark.eq(o))r=l,t--;else{let a=we.of(o,(i=this.cache.find(we,h=>h.mark.eq(o)))===null||i===void 0?void 0:i.dom);r.append(a),r=a,t=0}}return r}endLine(){if(this.curLine){this.flushBuffer();let e=this.curLine.lastChild;(!e||!Ro(this.curLine,!1)||e.dom.nodeName!="BR"&&e.isWidget()&&!(O.ios&&Ro(this.curLine,!0)))&&this.curLine.append(this.cache.findWidget(mr,0,32)||new zt(mr.toDOM(),0,mr,32)),this.curLine=this.afterWidget=null}}updateBlockWrappers(){this.wrapperPos>this.pos+1e4&&(this.blockWrappers.goto(this.pos),this.wrappers.length=0);for(let e=this.wrappers.length-1;e>=0;e--)this.wrappers[e].to=this.pos){let t=new Rf(e.from,e.to,e.value,e.rank),i=this.wrappers.length;for(;i>0&&(this.wrappers[i-1].rank-t.rank||this.wrappers[i-1].to-t.to)<0;)i--;this.wrappers.splice(i,0,t)}this.wrapperPos=this.pos}getBlockPos(){var e;this.updateBlockWrappers();let t=this.root;for(let i of this.wrappers){let r=t.lastChild;if(i.fromo.wrapper.eq(i.wrapper)))===null||e===void 0?void 0:e.dom);t.append(s),t=s}}return t}blockPosCovered(){let e=this.lastBlock;return e!=null&&!e.breakAfter&&(!e.isWidget()||(e.flags&160)>0)}getBuffer(e){let t=2|(e<0?16:32),i=this.cache.find(Rn,void 0,1);return i&&(i.flags=t),i||new Rn(t)}flushBuffer(){this.afterWidget&&!(this.afterWidget.flags&32)&&(this.afterWidget.parent.append(this.getBuffer(-1)),this.afterWidget=null)}}class Pf{constructor(e){this.skipCount=0,this.text="",this.textOff=0,this.cursor=e.iter()}skip(e){this.textOff+e<=this.text.length?this.textOff+=e:(this.skipCount+=e-(this.text.length-this.textOff),this.text="",this.textOff=0)}next(e){if(this.textOff==this.text.length){let{value:r,lineBreak:s,done:o}=this.cursor.next(this.skipCount);if(this.skipCount=0,o)throw new Error("Ran out of text content when drawing inline views");this.text=r;let l=this.textOff=Math.min(e,r.length);return s?null:r.slice(0,l)}let t=Math.min(this.text.length,this.textOff+e),i=this.text.slice(this.textOff,t);return this.textOff=t,i}}const In=[zt,ii,It,we,Rn,at,Xn];for(let n=0;n[]),this.index=In.map(()=>0),this.reused=new Map}add(e){let t=e.constructor.bucket,i=this.buckets[t];i.length<6?i.push(e):i[this.index[t]=(this.index[t]+1)%6]=e}find(e,t,i=2){let r=e.bucket,s=this.buckets[r],o=this.index[r];for(let l=s.length-1;l>=0;l--){let a=(l+o)%s.length,h=s[a];if((!t||t(h))&&!this.reused.has(h))return s.splice(a,1),a{if(this.cache.add(o),o.isComposite())return!1},enter:o=>this.cache.add(o),leave:()=>{},break:()=>{}}}run(e,t){let i=t&&this.getCompositionContext(t.text);for(let r=0,s=0,o=0;;){let l=or){let h=a-r;this.preserve(h,!o,!l),r=a,s+=h}if(!l)break;t&&l.fromA<=t.range.fromA&&l.toA>=t.range.toA?(this.forward(l.fromA,t.range.fromA,t.range.fromA{if(o.isWidget())if(this.openWidget)this.builder.continueWidget(a-l);else{let h=a>0||l{o.isLine()?this.builder.addLineStart(o.attrs,this.cache.maybeReuse(o)):(this.cache.add(o),o instanceof we&&r.unshift(o.mark)),this.openWidget=!1},leave:o=>{o.isLine()?r.length&&(r.length=s=0):o instanceof we&&(r.shift(),s=Math.min(s,r.length))},break:()=>{this.builder.addBreak(),this.openWidget=!1}}),this.text.skip(e)}emit(e,t){let i=null,r=this.builder,s=0,o=W.spans(this.decorations,e,t,{point:(l,a,h,c,f,u)=>{if(h instanceof Vt){if(this.disallowBlockEffectsFor[u]){if(h.block)throw new RangeError("Block decorations may not be specified via plugins");if(a>this.view.state.doc.lineAt(l).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}if(s=c.length,f>c.length)r.continueWidget(a-l);else{let d=h.widget||(h.block?ni.block:ni.inline),p=_f(h),m=this.cache.findWidget(d,a-l,p)||zt.of(d,this.view,a-l,p);h.block?(h.startSide>0&&r.addLineStartIfNotCovered(i),r.addBlockWidget(m)):(r.ensureLine(i),r.addInlineWidget(m,c,f))}i=null}else i=Wf(i,h);a>l&&this.text.skip(a-l)},span:(l,a,h,c)=>{for(let f=l;fs,this.openMarks=o}forward(e,t,i=1){t-e<=10?this.old.advance(t-e,i,this.reuseWalker):(this.old.advance(5,-1,this.reuseWalker),this.old.advance(t-e-10,-1),this.old.advance(5,i,this.reuseWalker))}getCompositionContext(e){let t=[],i=null;for(let r=e.parentNode;;r=r.parentNode){let s=ee.get(r);if(r==this.view.contentDOM)break;s instanceof we?t.push(s):s!=null&&s.isLine()?i=s:s instanceof at||(r.nodeName=="DIV"&&!i&&r!=this.view.contentDOM?i=new ii(r,$a):i||t.push(we.of(new zi({tagName:r.nodeName.toLowerCase(),attributes:ff(r)}),r)))}return{line:i,marks:t}}}function Ro(n,e){let t=i=>{for(let r of i.children)if((e?r.isText():r.length)||t(r))return!0;return!1};return t(n)}function _f(n){let e=n.isReplace?(n.startSide<0?64:0)|(n.endSide>0?128:0):n.startSide>0?32:16;return n.block&&(e|=256),e}const $a={class:"cm-line"};function Wf(n,e){let t=e.spec.attributes,i=e.spec.class;return!t&&!i||(n||(n={class:"cm-line"}),t&&Rs(t,n),i&&(n.class+=" "+i)),n}function Vf(n){let e=[];for(let t=n.parents.length;t>1;t--){let i=t==n.parents.length?n.tile:n.parents[t].tile;i instanceof we&&e.push(i.mark)}return e}function pr(n){let e=ee.get(n);return e&&e.setDOM(n.cloneNode()),n}class ni extends jn{constructor(e){super(),this.tag=e}eq(e){return e.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(e){return e.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}}ni.inline=new ni("span");ni.block=new ni("div");const mr=new class extends jn{toDOM(){return document.createElement("br")}get isHidden(){return!0}get editable(){return!0}};class Io{constructor(e){this.view=e,this.decorations=[],this.blockWrappers=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.editContextFormatting=Y.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.updateDeco(),this.tile=new Xn(e,e.contentDOM),this.updateInner([new Ie(0,0,0,e.state.doc.length)],null)}update(e){var t;let i=e.changedRanges;this.minWidth>0&&i.length&&(i.every(({fromA:c,toA:f})=>fthis.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let r=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((t=this.domChanged)===null||t===void 0)&&t.newSel?r=this.domChanged.newSel.head:!Yf(e.changes,this.hasComposition)&&!e.selectionSet&&(r=e.state.selection.main.head));let s=r>-1?zf(this.view,e.changes,r):null;if(this.domChanged=null,this.hasComposition){let{from:c,to:f}=this.hasComposition;i=new Ie(c,f,e.changes.mapPos(c,-1),e.changes.mapPos(f,1)).addToSet(i.slice())}this.hasComposition=s?{from:s.range.fromB,to:s.range.toB}:null,(O.ie||O.chrome)&&!s&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let o=this.decorations,l=this.blockWrappers;this.updateDeco();let a=qf(o,this.decorations,e.changes);a.length&&(i=Ie.extendWithRanges(i,a));let h=jf(l,this.blockWrappers,e.changes);return h.length&&(i=Ie.extendWithRanges(i,h)),s&&!i.some(c=>c.fromA<=s.range.fromA&&c.toA>=s.range.toA)&&(i=s.range.addToSet(i.slice())),this.tile.flags&2&&i.length==0?!1:(this.updateInner(i,s),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,t){this.view.viewState.mustMeasureContent=!0;let{observer:i}=this.view;i.ignore(()=>{if(t||e.length){let o=this.tile,l=new Ff(this.view,o,this.blockWrappers,this.decorations,this.dynamicDecorationMap);t&&ee.get(t.text)&&l.cache.reused.set(ee.get(t.text),2),this.tile=l.run(e,t),as(o,l.cache.reused)}this.tile.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.tile.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let s=O.chrome||O.ios?{node:i.selectionRange.focusNode,written:!1}:void 0;this.tile.sync(s),s&&(s.written||i.selectionRange.focusNode!=s.node||!this.tile.dom.contains(s.node))&&(this.forceSelection=!0),this.tile.dom.style.height=""});let r=[];if(this.view.viewport.from||this.view.viewport.to-1)&&vi(i,this.view.observer.selectionRange)&&!(r&&i.contains(r));if(!(s||t||o))return;let l=this.forceSelection;this.forceSelection=!1;let a=this.view.state.selection.main,h,c;if(a.empty?c=h=this.inlineDOMNearPos(a.anchor,a.assoc||1):(c=this.inlineDOMNearPos(a.head,a.head==a.from?1:-1),h=this.inlineDOMNearPos(a.anchor,a.anchor==a.from?1:-1)),O.gecko&&a.empty&&!this.hasComposition&&Hf(h)){let u=document.createTextNode("");this.view.observer.ignore(()=>h.node.insertBefore(u,h.node.childNodes[h.offset]||null)),h=c=new ze(u,0),l=!0}let f=this.view.observer.selectionRange;(l||!f.focusNode||(!ki(h.node,h.offset,f.anchorNode,f.anchorOffset)||!ki(c.node,c.offset,f.focusNode,f.focusOffset))&&!this.suppressWidgetCursorChange(f,a))&&(this.view.observer.ignore(()=>{O.android&&O.chrome&&i.contains(f.focusNode)&&Gf(f.focusNode,i)&&(i.blur(),i.focus({preventScroll:!0}));let u=Bi(this.view.root);if(u)if(a.empty){if(O.gecko){let d=$f(h.node,h.offset);if(d&&d!=3){let p=(d==1?Sa:Ca)(h.node,h.offset);p&&(h=new ze(p.node,p.offset))}}u.collapse(h.node,h.offset),a.bidiLevel!=null&&u.caretBidiLevel!==void 0&&(u.caretBidiLevel=a.bidiLevel)}else if(u.extend){u.collapse(h.node,h.offset);try{u.extend(c.node,c.offset)}catch{}}else{let d=document.createRange();a.anchor>a.head&&([h,c]=[c,h]),d.setEnd(c.node,c.offset),d.setStart(h.node,h.offset),u.removeAllRanges(),u.addRange(d)}o&&this.view.root.activeElement==i&&(i.blur(),r&&r.focus())}),this.view.observer.setSelectionRange(h,c)),this.impreciseAnchor=h.precise?null:new ze(f.anchorNode,f.anchorOffset),this.impreciseHead=c.precise?null:new ze(f.focusNode,f.focusOffset)}suppressWidgetCursorChange(e,t){return this.hasComposition&&t.empty&&ki(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==t.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,t=e.state.selection.main,i=Bi(e.root),{anchorNode:r,anchorOffset:s}=e.observer.selectionRange;if(!i||!t.empty||!t.assoc||!i.modify)return;let o=this.lineAt(t.head,t.assoc);if(!o)return;let l=o.posAtStart;if(t.head==l||t.head==l+o.length)return;let a=this.coordsAt(t.head,-1),h=this.coordsAt(t.head,1);if(!a||!h||a.bottom>h.top)return;let c=this.domAtPos(t.head+t.assoc,t.assoc);i.collapse(c.node,c.offset),i.modify("move",t.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let f=e.observer.selectionRange;e.docView.posFromDOM(f.anchorNode,f.anchorOffset)!=t.from&&i.collapse(r,s)}posFromDOM(e,t){let i=this.tile.nearest(e);if(!i)return this.tile.dom.compareDocumentPosition(e)&2?0:this.view.state.doc.length;let r=i.posAtStart;if(i.isComposite()){let s;if(e==i.dom)s=i.dom.childNodes[t];else{let o=ht(e)==0?0:t==0?-1:1;for(;;){let l=e.parentNode;if(l==i.dom)break;o==0&&l.firstChild!=l.lastChild&&(e==l.firstChild?o=-1:o=1),e=l}o<0?s=e:s=e.nextSibling}if(s==i.dom.firstChild)return r;for(;s&&!ee.get(s);)s=s.nextSibling;if(!s)return r+i.length;for(let o=0,l=r;;o++){let a=i.children[o];if(a.dom==s)return l;l+=a.length+a.breakAfter}}else return i.isText()?e==i.dom?r+t:r+(t?i.length:0):r}domAtPos(e,t){let{tile:i,offset:r}=this.tile.resolveBlock(e,t);return i.isWidget()?i.domPosFor(e,t):i.domIn(r,t)}inlineDOMNearPos(e,t){let i,r=-1,s=!1,o,l=-1,a=!1;return this.tile.blockTiles((h,c)=>{if(h.isWidget()){if(h.flags&32&&c>=e)return!0;h.flags&16&&(s=!0)}else{let f=c+h.length;if(c<=e&&(i=h,r=e-c,s=f=e&&!o&&(o=h,l=e-c,a=c>e),c>e&&o)return!0}}),!i&&!o?this.domAtPos(e,t):(s&&o?i=null:a&&i&&(o=null),i&&t<0||!o?i.domIn(r,t):o.domIn(l,t))}coordsAt(e,t){let{tile:i,offset:r}=this.tile.resolveBlock(e,t);return i.isWidget()?i.widget instanceof gr?null:i.coordsInWidget(r,t,!0):i.coordsIn(r,t)}lineAt(e,t){let{tile:i}=this.tile.resolveBlock(e,t);return i.isLine()?i:null}coordsForChar(e){let{tile:t,offset:i}=this.tile.resolveBlock(e,1);if(!t.isLine())return null;function r(s,o){if(s.isComposite())for(let l of s.children){if(l.length>=o){let a=r(l,o);if(a)return a}if(o-=l.length,o<0)break}else if(s.isText()&&oMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,l=-1,a=this.view.textDirection==Z.LTR,h=0,c=(f,u,d)=>{for(let p=0;pr);p++){let m=f.children[p],g=u+m.length,y=m.dom.getBoundingClientRect(),{height:w}=y;if(d&&!p&&(h+=y.top-d.top),m instanceof at)g>i&&c(m,u,y);else if(u>=i&&(h>0&&t.push(-h),t.push(w+h),h=0,o)){let T=m.dom.lastChild,D=T?vn(T):[];if(D.length){let M=D[D.length-1],L=a?M.right-y.left:y.right-M.left;L>l&&(l=L,this.minWidth=s,this.minWidthFrom=u,this.minWidthTo=g)}}d&&p==f.children.length-1&&(h+=d.bottom-y.bottom),u=g+m.breakAfter}};return c(this.tile,0,null),t}textDirectionAt(e){let{tile:t}=this.tile.resolveBlock(e,1);return getComputedStyle(t.dom).direction=="rtl"?Z.RTL:Z.LTR}measureTextSize(){let e=this.tile.blockTiles(o=>{if(o.isLine()&&o.children.length&&o.length<=20){let l=0,a;for(let h of o.children){if(!h.isText()||/[^ -~]/.test(h.text))return;let c=vn(h.dom);if(c.length!=1)return;l+=c[0].width,a=c[0].height}if(l)return{lineHeight:o.dom.getBoundingClientRect().height,charWidth:l/o.length,textHeight:a}}});if(e)return e;let t=document.createElement("div"),i,r,s;return t.className="cm-line",t.style.width="99999px",t.style.position="absolute",t.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.tile.dom.appendChild(t);let o=vn(t.firstChild)[0];i=t.getBoundingClientRect().height,r=o&&o.width?o.width/27:7,s=o&&o.height?o.height:i,t.remove()}),{lineHeight:i,charWidth:r,textHeight:s}}computeBlockGapDeco(){let e=[],t=this.view.viewState;for(let i=0,r=0;;r++){let s=r==t.viewports.length?null:t.viewports[r],o=s?s.from-1:this.view.state.doc.length;if(o>i){let l=(t.lineBlockAt(o).bottom-t.lineBlockAt(i).top)/this.view.scaleY;e.push(Y.replace({widget:new gr(l),block:!0,inclusive:!0,isBlockGap:!0}).range(i,o))}if(!s)break;i=s.to+1}return Y.set(e)}updateDeco(){let e=1,t=this.view.state.facet(Gn).map(s=>(this.dynamicDecorationMap[e++]=typeof s=="function")?s(this.view):s),i=!1,r=this.view.state.facet(Ws).map((s,o)=>{let l=typeof s=="function";return l&&(i=!0),l?s(this.view):s});for(r.length&&(this.dynamicDecorationMap[e++]=i,t.push(W.join(r))),this.decorations=[this.editContextFormatting,...t,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];etypeof s=="function"?s(this.view):s)}scrollIntoView(e){var t;if(e.isSnapshot){let c=this.view.viewState.lineBlockAt(e.range.head);this.view.scrollDOM.scrollTop=c.top-e.yMargin,this.view.scrollDOM.scrollLeft=e.xMargin;return}for(let c of this.view.state.facet(Fa))try{if(c(this.view,e.range,e))return!0}catch(f){De(this.view.state,f,"scroll handler")}let{range:i}=e,r=this.coordsAt(i.head,(t=i.assoc)!==null&&t!==void 0?t:i.empty?0:i.head>i.anchor?-1:1),s;if(!r)return;!i.empty&&(s=this.coordsAt(i.anchor,i.anchor>i.head?-1:1))&&(r={left:Math.min(r.left,s.left),top:Math.min(r.top,s.top),right:Math.max(r.right,s.right),bottom:Math.max(r.bottom,s.bottom)});let o=Vs(this.view),l={left:r.left-o.left,top:r.top-o.top,right:r.right+o.right,bottom:r.bottom+o.bottom},{offsetWidth:a,offsetHeight:h}=this.view.scrollDOM;if(pf(this.view.scrollDOM,l,i.head1&&(r.top>window.pageYOffset+window.visualViewport.offsetTop+window.visualViewport.height||r.bottomi.isWidget()||i.children.some(t);return t(this.tile.resolveBlock(e,1).tile)}destroy(){as(this.tile)}}function as(n,e){let t=e==null?void 0:e.get(n);if(t!=1){t==null&&n.destroy();for(let i of n.children)as(i,e)}}function Hf(n){return n.node.nodeType==1&&n.node.firstChild&&(n.offset==0||n.node.childNodes[n.offset-1].contentEditable=="false")&&(n.offset==n.node.childNodes.length||n.node.childNodes[n.offset].contentEditable=="false")}function Ua(n,e){let t=n.observer.selectionRange;if(!t.focusNode)return null;let i=Sa(t.focusNode,t.focusOffset),r=Ca(t.focusNode,t.focusOffset),s=i||r;if(r&&i&&r.node!=i.node){let l=ee.get(r.node);if(!l||l.isText()&&l.text!=r.node.nodeValue)s=r;else if(n.docView.lastCompositionAfterCursor){let a=ee.get(i.node);!a||a.isText()&&a.text!=i.node.nodeValue||(s=r)}}if(n.docView.lastCompositionAfterCursor=s!=i,!s)return null;let o=e-s.offset;return{from:o,to:o+s.node.nodeValue.length,node:s.node}}function zf(n,e,t){let i=Ua(n,t);if(!i)return null;let{node:r,from:s,to:o}=i,l=r.nodeValue;if(/[\n\r]/.test(l)||n.state.doc.sliceString(i.from,i.to)!=l)return null;let a=e.invertedDesc;return{range:new Ie(a.mapPos(s),a.mapPos(o),s,o),text:r}}function $f(n,e){return n.nodeType!=1?0:(e&&n.childNodes[e-1].contentEditable=="false"?1:0)|(e{ie.from&&(t=!0)}),t}class gr extends jn{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement("div");return e.className="cm-gap",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+"px",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}}function Xf(n,e,t=1){let i=n.charCategorizer(e),r=n.doc.lineAt(e),s=e-r.from;if(r.length==0)return b.cursor(e);s==0?t=1:s==r.length&&(t=-1);let o=s,l=s;t<0?o=de(r.text,s,!1):l=de(r.text,s);let a=i(r.text.slice(o,l));for(;o>0;){let h=de(r.text,o,!1);if(i(r.text.slice(h,o))!=a)break;o=h}for(;ln.defaultLineHeight*1.5){let l=n.viewState.heightOracle.textHeight,a=Math.floor((r-t.top-(n.defaultLineHeight-l)*.5)/l);s+=a*n.viewState.heightOracle.lineLength}let o=n.state.sliceDoc(t.from,t.to);return t.from+rf(o,s,n.state.tabSize)}function Qf(n,e,t){let i=n.lineBlockAt(e);if(Array.isArray(i.type)){let r;for(let s of i.type){if(s.from>e)break;if(!(s.toe)return s;(!r||s.type==ve.Text&&(r.type!=s.type||(t<0?s.frome)))&&(r=s)}}return r||i}return i}function Zf(n,e,t,i){let r=Qf(n,e.head,e.assoc||-1),s=!i||r.type!=ve.Text||!(n.lineWrapping||r.widgetLineBreaks)?null:n.coordsAtPos(e.assoc<0&&e.head>r.from?e.head-1:e.head);if(s){let o=n.dom.getBoundingClientRect(),l=n.textDirectionAt(r.from),a=n.posAtCoords({x:t==(l==Z.LTR)?o.right-1:o.left+1,y:(s.top+s.bottom)/2});if(a!=null)return b.cursor(a,t?-1:1)}return b.cursor(t?r.to:r.from,t?-1:1)}function Po(n,e,t,i){let r=n.state.doc.lineAt(e.head),s=n.bidiSpans(r),o=n.textDirectionAt(r.from);for(let l=e,a=null;;){let h=Af(r,s,o,l,t),c=Ea;if(!h){if(r.number==(t?n.state.doc.lines:1))return l;c=` -`,r=n.state.doc.line(r.number+(t?1:-1)),s=n.bidiSpans(r),h=n.visualLineSide(r,!t)}if(a){if(!a(c))return l}else{if(!i)return h;a=i(c)}l=h}}function eu(n,e,t){let i=n.state.charCategorizer(e),r=i(t);return s=>{let o=i(s);return r==Re.Space&&(r=o),r==o}}function tu(n,e,t,i){let r=e.head,s=t?1:-1;if(r==(t?n.state.doc.length:0))return b.cursor(r,e.assoc);let o=e.goalColumn,l,a=n.contentDOM.getBoundingClientRect(),h=n.coordsAtPos(r,e.assoc||((e.empty?t:e.head==e.from)?1:-1)),c=n.documentTop;if(h)o==null&&(o=h.left-a.left),l=s<0?h.top:h.bottom;else{let p=n.viewState.lineBlockAt(r);o==null&&(o=Math.min(a.right-a.left,n.defaultCharacterWidth*(r-p.from))),l=(s<0?p.top:p.bottom)+c}let f=a.left+o,u=n.viewState.heightOracle.textHeight>>1,d=i??u;for(let p=0;;p+=u){let m=l+(d+p)*s,g=hs(n,{x:f,y:m},!1,s);if(t?m>a.bottom:ml:w{if(e>s&&er(n)),t.from,e.head>t.from?-1:1);return i==t.from?t:b.cursor(i,in.viewState.docHeight)return new et(n.state.doc.length,-1);if(h=n.elementAtHeight(a),i==null)break;if(h.type==ve.Text){if(i<0?h.ton.viewport.to)break;let u=n.docView.coordsAt(i<0?h.from:h.to,i>0?-1:1);if(u&&(i<0?u.top<=a+s:u.bottom>=a+s))break}let f=n.viewState.heightOracle.textHeight/2;a=i>0?h.bottom+f:h.top-f}if(n.viewport.from>=h.to||n.viewport.to<=h.from){if(t)return null;if(h.type==ve.Text){let f=Jf(n,r,h,o,l);return new et(f,f==h.from?1:-1)}}if(h.type!=ve.Text)return a<(h.top+h.bottom)/2?new et(h.from,1):new et(h.to,-1);let c=n.docView.lineAt(h.from,2);return(!c||c.length!=h.length)&&(c=n.docView.lineAt(h.from,-2)),new iu(n,o,l,n.textDirectionAt(h.from)).scanTile(c,h.from)}class iu{constructor(e,t,i,r){this.view=e,this.x=t,this.y=i,this.baseDir=r,this.line=null,this.spans=null}bidiSpansAt(e){return(!this.line||this.line.from>e||this.line.to1||i.length&&(i[0].level!=this.baseDir||i[0].to+r.from>1;t:if(s.has(p)){let g=i+Math.floor(Math.random()*d);for(let y=0;y1)){if(y.bottomthis.y)(!a||a.top>y.top)&&(a=y),w=-1;else{let T=y.left>this.x?this.x-y.left:y.right(d+d+p)/3)return this.y=l.bottom-1,this.scan(e,t);if(a&&a.top<(d+p+p)/3)return this.y=a.top+1,this.scan(e,t)}let u=(o?this.dirAt(e[h],1):this.baseDir)==Z.LTR;return{i:h,after:this.x>(f.left+f.right)/2==u}}scanText(e,t){let i=[];for(let s=0;s{let o=i[s]-t,l=i[s+1]-t;return Ri(e.dom,o,l).getClientRects()});return r.after?new et(i[r.i+1],-1):new et(i[r.i],1)}scanTile(e,t){if(!e.length)return new et(t,1);if(e.children.length==1){let l=e.children[0];if(l.isText())return this.scanText(l,t);if(l.isComposite())return this.scanTile(l,t)}let i=[t];for(let l=0,a=t;l{let a=e.children[l];return a.flags&48?null:(a.dom.nodeType==1?a.dom:Ri(a.dom,0,a.length)).getClientRects()}),s=e.children[r.i],o=i[r.i];return s.isText()?this.scanText(s,o):s.isComposite()?this.scanTile(s,o):r.after?new et(i[r.i+1],-1):new et(o,1)}}const qt="￿";class nu{constructor(e,t){this.points=e,this.view=t,this.text="",this.lineSeparator=t.state.facet(U.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=qt}readRange(e,t){if(!e)return this;let i=e.parentNode;for(let r=e;;){this.findPointBefore(i,r);let s=this.text.length;this.readNode(r);let o=ee.get(r),l=r.nextSibling;if(l==t){o!=null&&o.breakAfter&&!l&&i!=this.view.contentDOM&&this.lineBreak();break}let a=ee.get(l);(o&&a?o.breakAfter:(o?o.breakAfter:On(r))||On(l)&&(r.nodeName!="BR"||o!=null&&o.isWidget())&&this.text.length>s)&&!su(l,t)&&this.lineBreak(),r=l}return this.findPointBefore(i,t),this}readTextNode(e){let t=e.nodeValue;for(let i of this.points)i.node==e&&(i.pos=this.text.length+Math.min(i.offset,t.length));for(let i=0,r=this.lineSeparator?null:/\r\n?|\n/g;;){let s=-1,o=1,l;if(this.lineSeparator?(s=t.indexOf(this.lineSeparator,i),o=this.lineSeparator.length):(l=r.exec(t))&&(s=l.index,o=l[0].length),this.append(t.slice(i,s<0?t.length:s)),s<0)break;if(this.lineBreak(),o>1)for(let a of this.points)a.node==e&&a.pos>this.text.length&&(a.pos-=o-1);i=s+o}}readNode(e){let t=ee.get(e),i=t&&t.overrideDOMText;if(i!=null){this.findPointInside(e,i.length);for(let r=i.iter();!r.next().done;)r.lineBreak?this.lineBreak():this.append(r.value)}else e.nodeType==3?this.readTextNode(e):e.nodeName=="BR"?e.nextSibling&&this.lineBreak():e.nodeType==1&&this.readRange(e.firstChild,null)}findPointBefore(e,t){for(let i of this.points)i.node==e&&e.childNodes[i.offset]==t&&(i.pos=this.text.length)}findPointInside(e,t){for(let i of this.points)(e.nodeType==3?i.node==e:e.contains(i.node))&&(i.pos=this.text.length+(ru(e,i.node,i.offset)?t:0))}}function ru(n,e,t){for(;;){if(!e||t-1;let{impreciseHead:s,impreciseAnchor:o}=e.docView,l=e.state.selection;if(e.state.readOnly&&t>-1)this.newSel=null;else if(t>-1&&(this.bounds=Ka(e.docView.tile,t,i,0))){let a=s||o?[]:au(e),h=new nu(a,e);h.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=h.text,this.newSel=hu(a,this.bounds.from)}else{let a=e.observer.selectionRange,h=s&&s.node==a.focusNode&&s.offset==a.focusOffset||!ns(e.contentDOM,a.focusNode)?l.main.head:e.docView.posFromDOM(a.focusNode,a.focusOffset),c=o&&o.node==a.anchorNode&&o.offset==a.anchorOffset||!ns(e.contentDOM,a.anchorNode)?l.main.anchor:e.docView.posFromDOM(a.anchorNode,a.anchorOffset),f=e.viewport;if((O.ios||O.chrome)&&l.main.empty&&h!=c&&(f.from>0||f.to-1&&l.ranges.length>1)this.newSel=l.replaceRange(b.range(c,h));else if(e.lineWrapping&&c==h&&!(l.main.empty&&l.main.head==h)&&e.inputState.lastTouchTime>Date.now()-100){let u=e.coordsAtPos(h,-1),d=0;u&&(d=e.inputState.lastTouchY<=u.bottom?-1:1),this.newSel=b.create([b.cursor(h,d)])}else this.newSel=b.single(c,h)}}}function Ka(n,e,t,i){if(n.isComposite()){let r=-1,s=-1,o=-1,l=-1;for(let a=0,h=i,c=i;at)return Ka(f,e,t,h);if(u>=e&&r==-1&&(r=a,s=h),h>t&&f.dom.parentNode==n.dom){o=a,l=c;break}c=u,h=u+f.breakAfter}return{from:s,to:l<0?i+n.length:l,startDOM:(r?n.children[r-1].dom.nextSibling:null)||n.dom.firstChild,endDOM:o=0?n.children[o].dom:null}}else return n.isText()?{from:i,to:i+n.length,startDOM:n.dom,endDOM:n.dom.nextSibling}:null}function ja(n,e){let t,{newSel:i}=e,{state:r}=n,s=r.selection.main,o=n.inputState.lastKeyTime>Date.now()-100?n.inputState.lastKeyCode:-1;if(e.bounds){let{from:l,to:a}=e.bounds,h=s.from,c=null;(o===8||O.android&&e.text.length=l&&s.to<=a&&(e.typeOver||f!=e.text)&&f.slice(0,s.from-l)==e.text.slice(0,s.from-l)&&f.slice(s.to-l)==e.text.slice(u=e.text.length-(f.length-(s.to-l)))?t={from:s.from,to:s.to,insert:z.of(e.text.slice(s.from-l,u).split(qt))}:(d=Ga(f,e.text,h-l,c))&&(O.chrome&&o==13&&d.toB==d.from+2&&e.text.slice(d.from,d.toB)==qt+qt&&d.toB--,t={from:l+d.from,to:l+d.toA,insert:z.of(e.text.slice(d.from,d.toB).split(qt))})}else i&&(!n.hasFocus&&r.facet(lt)||Pn(i,s))&&(i=null);if(!t&&!i)return!1;if((O.mac||O.android)&&t&&t.from==t.to&&t.from==s.head-1&&/^\. ?$/.test(t.insert.toString())&&n.contentDOM.getAttribute("autocorrect")=="off"?(i&&t.insert.length==2&&(i=b.single(i.main.anchor-1,i.main.head-1)),t={from:t.from,to:t.to,insert:z.of([t.insert.toString().replace("."," ")])}):r.doc.lineAt(s.from).toDate.now()-50?t={from:s.from,to:s.to,insert:r.toText(n.inputState.insertingText)}:O.chrome&&t&&t.from==t.to&&t.from==s.head&&t.insert.toString()==` - `&&n.lineWrapping&&(i&&(i=b.single(i.main.anchor-1,i.main.head-1)),t={from:s.from,to:s.to,insert:z.of([" "])}),t)return Hs(n,t,i,o);if(i&&!Pn(i,s)){let l=!1,a="select";return n.inputState.lastSelectionTime>Date.now()-50&&(n.inputState.lastSelectionOrigin=="select"&&(l=!0),a=n.inputState.lastSelectionOrigin,a=="select.pointer"&&(i=qa(r.facet(Ui).map(h=>h(n)),i))),n.dispatch({selection:i,scrollIntoView:l,userEvent:a}),!0}else return!1}function Hs(n,e,t,i=-1){if(O.ios&&n.inputState.flushIOSKey(e))return!0;let r=n.state.selection.main;if(O.android&&(e.to==r.to&&(e.from==r.from||e.from==r.from-1&&n.state.sliceDoc(e.from,r.from)==" ")&&e.insert.length==1&&e.insert.lines==2&&Qt(n.contentDOM,"Enter",13)||(e.from==r.from-1&&e.to==r.to&&e.insert.length==0||i==8&&e.insert.lengthr.head)&&Qt(n.contentDOM,"Backspace",8)||e.from==r.from&&e.to==r.to+1&&e.insert.length==0&&Qt(n.contentDOM,"Delete",46)))return!0;let s=e.insert.toString();n.inputState.composing>=0&&n.inputState.composing++;let o,l=()=>o||(o=lu(n,e,t));return n.state.facet(Ia).some(a=>a(n,e.from,e.to,s,l))||n.dispatch(l()),!0}function lu(n,e,t){let i,r=n.state,s=r.selection.main,o=-1;if(e.from==e.to&&e.froms.to){let a=e.fromf(n)),h,a);e.from==c&&(o=c)}if(o>-1)i={changes:e,selection:b.cursor(e.from+e.insert.length,-1)};else if(e.from>=s.from&&e.to<=s.to&&e.to-e.from>=(s.to-s.from)/3&&(!t||t.main.empty&&t.main.from==e.from+e.insert.length)&&n.inputState.composing<0){let a=s.frome.to?r.sliceDoc(e.to,s.to):"";i=r.replaceSelection(n.state.toText(a+e.insert.sliceString(0,void 0,n.state.lineBreak)+h))}else{let a=r.changes(e),h=t&&t.main.to<=a.newLength?t.main:void 0;if(r.selection.ranges.length>1&&(n.inputState.composing>=0||n.inputState.compositionPendingChange)&&e.to<=s.to+10&&e.to>=s.to-10){let c=n.state.sliceDoc(e.from,e.to),f,u=t&&Ua(n,t.main.head);if(u){let p=e.insert.length-(e.to-e.from);f={from:u.from,to:u.to-p}}else f=n.state.doc.lineAt(s.head);let d=s.to-e.to;i=r.changeByRange(p=>{if(p.from==s.from&&p.to==s.to)return{changes:a,range:h||p.map(a)};let m=p.to-d,g=m-c.length;if(n.state.sliceDoc(g,m)!=c||m>=f.from&&g<=f.to)return{range:p};let y=r.changes({from:g,to:m,insert:e.insert}),w=p.to-s.to;return{changes:y,range:h?b.range(Math.max(0,h.anchor+w),Math.max(0,h.head+w)):p.map(y)}})}else i={changes:a,selection:h&&r.selection.replaceRange(h)}}let l="input.type";return(n.composing||n.inputState.compositionPendingChange&&n.inputState.compositionEndedAt>Date.now()-50)&&(n.inputState.compositionPendingChange=!1,l+=".compose",n.inputState.compositionFirstChange&&(l+=".start",n.inputState.compositionFirstChange=!1)),r.update(i,{userEvent:l,scrollIntoView:!0})}function Ga(n,e,t,i){let r=Math.min(n.length,e.length),s=0;for(;s0&&l>0&&n.charCodeAt(o-1)==e.charCodeAt(l-1);)o--,l--;if(i=="end"){let a=Math.max(0,s-Math.min(o,l));t-=o+a-s}if(o=o?s-t:0;s-=a,l=s+(l-o),o=s}else if(l=l?s-t:0;s-=a,o=s+(o-l),l=s}return{from:s,toA:o,toB:l}}function au(n){let e=[];if(n.root.activeElement!=n.contentDOM)return e;let{anchorNode:t,anchorOffset:i,focusNode:r,focusOffset:s}=n.observer.selectionRange;return t&&(e.push(new No(t,i)),(r!=t||s!=i)&&e.push(new No(r,s))),e}function hu(n,e){if(n.length==0)return null;let t=n[0].pos,i=n.length==2?n[1].pos:t;return t>-1&&i>-1?b.single(t+e,i+e):null}function Pn(n,e){return e.head==n.main.head&&e.anchor==n.main.anchor}class cu{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.lastTouchTime=0,this.lastTouchX=0,this.lastTouchY=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.lastWheelEvent=0,this.pendingIOSKey=void 0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.insertingText="",this.insertingTextAt=0,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,O.safari&&e.contentDOM.addEventListener("input",()=>null),O.gecko&&Au(e.contentDOM.ownerDocument)}handleEvent(e){!bu(this.view,e)||this.ignoreDuringComposition(e)||e.type=="keydown"&&this.keydown(e)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(e.type,e)):this.runHandlers(e.type,e))}runHandlers(e,t){let i=this.handlers[e];if(i){for(let r of i.observers)r(this.view,t);for(let r of i.handlers){if(t.defaultPrevented)break;if(r(this.view,t)){t.preventDefault();break}}}}ensureHandlers(e){let t=fu(e),i=this.handlers,r=this.view.contentDOM;for(let s in t)if(s!="scroll"){let o=!t[s].handlers.length,l=i[s];l&&o!=!l.handlers.length&&(r.removeEventListener(s,this.handleEvent),l=null),l||r.addEventListener(s,this.handleEvent,{passive:o})}for(let s in i)s!="scroll"&&!t[s]&&r.removeEventListener(s,this.handleEvent);this.handlers=t}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&e.keyCode!=27&&Xa.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),O.android&&O.chrome&&!e.synthetic&&(e.keyCode==13||e.keyCode==8))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;let t;return O.ios&&!e.synthetic&&!e.altKey&&!e.metaKey&&!e.shiftKey&&((t=Ya.find(i=>i.keyCode==e.keyCode))&&!e.ctrlKey||uu.indexOf(e.key)>-1&&e.ctrlKey)?(this.pendingIOSKey=t||e,setTimeout(()=>this.flushIOSKey(),250),!0):(e.keyCode!=229&&this.view.observer.forceFlush(),!1)}flushIOSKey(e){let t=this.pendingIOSKey;return!t||t.key=="Enter"&&e&&e.from0?!0:O.safari&&!O.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}}function Fo(n,e){return(t,i)=>{try{return e.call(n,i,t)}catch(r){De(t.state,r)}}}function fu(n){let e=Object.create(null);function t(i){return e[i]||(e[i]={observers:[],handlers:[]})}for(let i of n){let r=i.spec,s=r&&r.plugin.domEventHandlers,o=r&&r.plugin.domEventObservers;if(s)for(let l in s){let a=s[l];a&&t(l).handlers.push(Fo(i.value,a))}if(o)for(let l in o){let a=o[l];a&&t(l).observers.push(Fo(i.value,a))}}for(let i in Ue)t(i).handlers.push(Ue[i]);for(let i in ke)t(i).observers.push(ke[i]);return e}const Ya=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],uu="dthko",Xa=[16,17,18,20,91,92,224,225],tn=6;function nn(n){return Math.max(0,n)*.7+8}function du(n,e){return Math.max(Math.abs(n.clientX-e.clientX),Math.abs(n.clientY-e.clientY))}class pu{constructor(e,t,i,r){this.view=e,this.startEvent=t,this.style=i,this.mustSelect=r,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParents=xa(e.contentDOM),this.atoms=e.state.facet(Ui).map(o=>o(e));let s=e.contentDOM.ownerDocument;s.addEventListener("mousemove",this.move=this.move.bind(this)),s.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(U.allowMultipleSelections)&&mu(e,t),this.dragging=yu(e,t)&&Za(t)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&du(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let t=0,i=0,r=0,s=0,o=this.view.win.innerWidth,l=this.view.win.innerHeight;this.scrollParents.x&&({left:r,right:o}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:s,bottom:l}=this.scrollParents.y.getBoundingClientRect());let a=Vs(this.view);e.clientX-a.left<=r+tn?t=-nn(r-e.clientX):e.clientX+a.right>=o-tn&&(t=nn(e.clientX-o)),e.clientY-a.top<=s+tn?i=-nn(s-e.clientY):e.clientY+a.bottom>=l-tn&&(i=nn(e.clientY-l)),this.setScrollSpeed(t,i)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,t){this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:t}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),t&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=t,t=0),(e||t)&&this.view.win.scrollBy(e,t),this.dragging===!1&&this.select(this.lastEvent)}select(e){let{view:t}=this,i=qa(this.atoms,this.style.get(e,this.extend,this.multiple));(this.mustSelect||!i.eq(t.state.selection,this.dragging===!1))&&this.view.dispatch({selection:i,userEvent:"select.pointer"}),this.mustSelect=!1}update(e){e.transactions.some(t=>t.isUserEvent("input.type"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}}function mu(n,e){let t=n.state.facet(Oa);return t.length?t[0](e):O.mac?e.metaKey:e.ctrlKey}function gu(n,e){let t=n.state.facet(La);return t.length?t[0](e):O.mac?!e.altKey:!e.ctrlKey}function yu(n,e){let{main:t}=n.state.selection;if(t.empty)return!1;let i=Bi(n.root);if(!i||i.rangeCount==0)return!0;let r=i.getRangeAt(0).getClientRects();for(let s=0;s=e.clientX&&o.top<=e.clientY&&o.bottom>=e.clientY)return!0}return!1}function bu(n,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target,i;t!=n.contentDOM;t=t.parentNode)if(!t||t.nodeType==11||(i=ee.get(t))&&i.isWidget()&&!i.isHidden&&i.widget.ignoreEvent(e))return!1;return!0}const Ue=Object.create(null),ke=Object.create(null),Ja=O.ie&&O.ie_version<15||O.ios&&O.webkit_version<604;function wu(n){let e=n.dom.parentNode;if(!e)return;let t=e.appendChild(document.createElement("textarea"));t.style.cssText="position: fixed; left: -10000px; top: 10px",t.focus(),setTimeout(()=>{n.focus(),t.remove(),Qa(n,t.value)},50)}function Jn(n,e,t){for(let i of n.facet(e))t=i(t,n);return t}function Qa(n,e){e=Jn(n.state,Ns,e);let{state:t}=n,i,r=1,s=t.toText(e),o=s.lines==t.selection.ranges.length;if(cs!=null&&t.selection.ranges.every(a=>a.empty)&&cs==s.toString()){let a=-1;i=t.changeByRange(h=>{let c=t.doc.lineAt(h.from);if(c.from==a)return{range:h};a=c.from;let f=t.toText((o?s.line(r++).text:e)+t.lineBreak);return{changes:{from:c.from,insert:f},range:b.cursor(h.from+f.length)}})}else o?i=t.changeByRange(a=>{let h=s.line(r++);return{changes:{from:a.from,to:a.to,insert:h.text},range:b.cursor(a.from+h.length)}}):i=t.replaceSelection(s);n.dispatch(i,{userEvent:"input.paste",scrollIntoView:!0})}ke.scroll=n=>{n.inputState.lastScrollTop=n.scrollDOM.scrollTop,n.inputState.lastScrollLeft=n.scrollDOM.scrollLeft};ke.wheel=ke.mousewheel=n=>{n.inputState.lastWheelEvent=Date.now()};Ue.keydown=(n,e)=>(n.inputState.setSelectionOrigin("select"),e.keyCode==27&&n.inputState.tabFocusMode!=0&&(n.inputState.tabFocusMode=Date.now()+2e3),!1);ke.touchstart=(n,e)=>{let t=n.inputState,i=e.targetTouches[0];t.lastTouchTime=Date.now(),i&&(t.lastTouchX=i.clientX,t.lastTouchY=i.clientY),t.setSelectionOrigin("select.pointer")};ke.touchmove=n=>{n.inputState.setSelectionOrigin("select.pointer")};Ue.mousedown=(n,e)=>{if(n.observer.flush(),n.inputState.lastTouchTime>Date.now()-2e3)return!1;let t=null;for(let i of n.state.facet(Ba))if(t=i(n,e),t)break;if(!t&&e.button==0&&(t=vu(n,e)),t){let i=!n.hasFocus;n.inputState.startMouseSelection(new pu(n,e,t,i)),i&&n.observer.ignore(()=>{va(n.contentDOM);let s=n.root.activeElement;s&&!s.contains(n.contentDOM)&&s.blur()});let r=n.inputState.mouseSelection;if(r)return r.start(e),r.dragging===!1}else n.inputState.setSelectionOrigin("select.pointer");return!1};function _o(n,e,t,i){if(i==1)return b.cursor(e,t);if(i==2)return Xf(n.state,e,t);{let r=n.docView.lineAt(e,t),s=n.state.doc.lineAt(r?r.posAtEnd:e),o=r?r.posAtStart:s.from,l=r?r.posAtEnd:s.to;return lDate.now()-400&&Math.abs(e.clientX-n.clientX)<2&&Math.abs(e.clientY-n.clientY)<2?(Vo+1)%3:1}function vu(n,e){let t=n.posAndSideAtCoords({x:e.clientX,y:e.clientY},!1),i=Za(e),r=n.state.selection;return{update(s){s.docChanged&&(t.pos=s.changes.mapPos(t.pos),r=r.map(s.changes))},get(s,o,l){let a=n.posAndSideAtCoords({x:s.clientX,y:s.clientY},!1),h,c=_o(n,a.pos,a.assoc,i);if(t.pos!=a.pos&&!o){let f=_o(n,t.pos,t.assoc,i),u=Math.min(f.from,c.from),d=Math.max(f.to,c.to);c=u1&&(h=ku(r,a.pos))?h:l?r.addRange(c):b.create([c])}}}function ku(n,e){for(let t=0;t=e)return b.create(n.ranges.slice(0,t).concat(n.ranges.slice(t+1)),n.mainIndex==t?0:n.mainIndex-(n.mainIndex>t?1:0))}return null}Ue.dragstart=(n,e)=>{let{selection:{main:t}}=n.state;if(e.target.draggable){let r=n.docView.tile.nearest(e.target);if(r&&r.isWidget()){let s=r.posAtStart,o=s+r.length;(s>=t.to||o<=t.from)&&(t=b.range(s,o))}}let{inputState:i}=n;return i.mouseSelection&&(i.mouseSelection.dragging=!0),i.draggedContent=t,e.dataTransfer&&(e.dataTransfer.setData("Text",Jn(n.state,Fs,n.state.sliceDoc(t.from,t.to))),e.dataTransfer.effectAllowed="copyMove"),!1};Ue.dragend=n=>(n.inputState.draggedContent=null,!1);function zo(n,e,t,i){if(t=Jn(n.state,Ns,t),!t)return;let r=n.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:s}=n.inputState,o=i&&s&&gu(n,e)?{from:s.from,to:s.to}:null,l={from:r,insert:t},a=n.state.changes(o?[o,l]:l);n.focus(),n.dispatch({changes:a,selection:{anchor:a.mapPos(r,-1),head:a.mapPos(r,1)},userEvent:o?"move.drop":"input.drop"}),n.inputState.draggedContent=null}Ue.drop=(n,e)=>{if(!e.dataTransfer)return!1;if(n.state.readOnly)return!0;let t=e.dataTransfer.files;if(t&&t.length){let i=Array(t.length),r=0,s=()=>{++r==t.length&&zo(n,e,i.filter(o=>o!=null).join(n.state.lineBreak),!1)};for(let o=0;o{/[\x00-\x08\x0e-\x1f]{2}/.test(l.result)||(i[o]=l.result),s()},l.readAsText(t[o])}return!0}else{let i=e.dataTransfer.getData("Text");if(i)return zo(n,e,i,!0),!0}return!1};Ue.paste=(n,e)=>{if(n.state.readOnly)return!0;n.observer.flush();let t=Ja?null:e.clipboardData;return t?(Qa(n,t.getData("text/plain")||t.getData("text/uri-list")),!0):(wu(n),!1)};function Su(n,e){let t=n.dom.parentNode;if(!t)return;let i=t.appendChild(document.createElement("textarea"));i.style.cssText="position: fixed; left: -10000px; top: 10px",i.value=e,i.focus(),i.selectionEnd=e.length,i.selectionStart=0,setTimeout(()=>{i.remove(),n.focus()},50)}function Cu(n){let e=[],t=[],i=!1;for(let r of n.selection.ranges)r.empty||(e.push(n.sliceDoc(r.from,r.to)),t.push(r));if(!e.length){let r=-1;for(let{from:s}of n.selection.ranges){let o=n.doc.lineAt(s);o.number>r&&(e.push(o.text),t.push({from:o.from,to:Math.min(n.doc.length,o.to+1)})),r=o.number}i=!0}return{text:Jn(n,Fs,e.join(n.lineBreak)),ranges:t,linewise:i}}let cs=null;Ue.copy=Ue.cut=(n,e)=>{if(!vi(n.contentDOM,n.observer.selectionRange))return!1;let{text:t,ranges:i,linewise:r}=Cu(n.state);if(!t&&!r)return!1;cs=r?t:null,e.type=="cut"&&!n.state.readOnly&&n.dispatch({changes:i,scrollIntoView:!0,userEvent:"delete.cut"});let s=Ja?null:e.clipboardData;return s?(s.clearData(),s.setData("text/plain",t),!0):(Su(n,t),!1)};const eh=ct.define();function th(n,e){let t=[];for(let i of n.facet(Pa)){let r=i(n,e);r&&t.push(r)}return t.length?n.update({effects:t,annotations:eh.of(!0)}):null}function ih(n){setTimeout(()=>{let e=n.hasFocus;if(e!=n.inputState.notifiedFocused){let t=th(n.state,e);t?n.dispatch(t):n.update([])}},10)}ke.focus=n=>{n.inputState.lastFocusTime=Date.now(),!n.scrollDOM.scrollTop&&(n.inputState.lastScrollTop||n.inputState.lastScrollLeft)&&(n.scrollDOM.scrollTop=n.inputState.lastScrollTop,n.scrollDOM.scrollLeft=n.inputState.lastScrollLeft),ih(n)};ke.blur=n=>{n.observer.clearSelectionRange(),ih(n)};ke.compositionstart=ke.compositionupdate=n=>{n.observer.editContext||(n.inputState.compositionFirstChange==null&&(n.inputState.compositionFirstChange=!0),n.inputState.composing<0&&(n.inputState.composing=0))};ke.compositionend=n=>{n.observer.editContext||(n.inputState.composing=-1,n.inputState.compositionEndedAt=Date.now(),n.inputState.compositionPendingKey=!0,n.inputState.compositionPendingChange=n.observer.pendingRecords().length>0,n.inputState.compositionFirstChange=null,O.chrome&&O.android?n.observer.flushSoon():n.inputState.compositionPendingChange?Promise.resolve().then(()=>n.observer.flush()):setTimeout(()=>{n.inputState.composing<0&&n.docView.hasComposition&&n.update([])},50))};ke.contextmenu=n=>{n.inputState.lastContextMenu=Date.now()};Ue.beforeinput=(n,e)=>{var t,i;if((e.inputType=="insertText"||e.inputType=="insertCompositionText")&&(n.inputState.insertingText=e.data,n.inputState.insertingTextAt=Date.now()),e.inputType=="insertReplacementText"&&n.observer.editContext){let s=(t=e.dataTransfer)===null||t===void 0?void 0:t.getData("text/plain"),o=e.getTargetRanges();if(s&&o.length){let l=o[0],a=n.posAtDOM(l.startContainer,l.startOffset),h=n.posAtDOM(l.endContainer,l.endOffset);return Hs(n,{from:a,to:h,insert:n.state.toText(s)},null),!0}}let r;if(O.chrome&&O.android&&(r=Ya.find(s=>s.inputType==e.inputType))&&(n.observer.delayAndroidKey(r.key,r.keyCode),r.key=="Backspace"||r.key=="Delete")){let s=((i=window.visualViewport)===null||i===void 0?void 0:i.height)||0;setTimeout(()=>{var o;(((o=window.visualViewport)===null||o===void 0?void 0:o.height)||0)>s+10&&n.hasFocus&&(n.contentDOM.blur(),n.focus())},100)}return O.ios&&e.inputType=="deleteContentForward"&&n.observer.flushSoon(),O.safari&&e.inputType=="insertText"&&n.inputState.composing>=0&&setTimeout(()=>ke.compositionend(n,e),20),!1};const $o=new Set;function Au(n){$o.has(n)||($o.add(n),n.addEventListener("copy",()=>{}),n.addEventListener("cut",()=>{}))}const Uo=["pre-wrap","normal","pre-line","break-spaces"];let ri=!1;function qo(){ri=!1}class Tu{constructor(e){this.lineWrapping=e,this.doc=z.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,t){let i=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((t-e-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return Uo.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let t=!1;for(let i=0;i-1,a=Math.abs(t-this.lineHeight)>.3||this.lineWrapping!=l||Math.abs(i-this.charWidth)>.1;if(this.lineWrapping=l,this.lineHeight=t,this.charWidth=i,this.textHeight=r,this.lineLength=s,a){this.heightSamples={};for(let h=0;h0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>kn&&(ri=!0),this.height=e)}replace(e,t,i){return ge.of(i)}decomposeLeft(e,t){t.push(this)}decomposeRight(e,t){t.push(this)}applyChanges(e,t,i,r){let s=this,o=i.doc;for(let l=r.length-1;l>=0;l--){let{fromA:a,toA:h,fromB:c,toB:f}=r[l],u=s.lineAt(a,X.ByPosNoHeight,i.setDoc(t),0,0),d=u.to>=h?u:s.lineAt(h,X.ByPosNoHeight,i,0,0);for(f+=d.to-h,h=d.to;l>0&&u.from<=r[l-1].toA;)a=r[l-1].fromA,c=r[l-1].fromB,l--,as*2){let l=e[t-1];l.break?e.splice(--t,1,l.left,null,l.right):e.splice(--t,1,l.left,l.right),i+=1+l.break,r-=l.size}else if(s>r*2){let l=e[i];l.break?e.splice(i,1,l.left,null,l.right):e.splice(i,1,l.left,l.right),i+=2+l.break,s-=l.size}else break;else if(r=s&&o(this.lineAt(0,X.ByPos,i,r,s))}setMeasuredHeight(e){let t=e.heights[e.index++];t<0?(this.spaceAbove=-t,t=e.heights[e.index++]):this.spaceAbove=0,this.setHeight(t)}updateHeight(e,t=0,i=!1,r){return r&&r.from<=t&&r.more&&this.setMeasuredHeight(r),this.outdated=!1,this}toString(){return`block(${this.length})`}}class Me extends nh{constructor(e,t,i){super(e,t,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0,this.spaceAbove=i}mainBlock(e,t){return new He(t,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.breaks)}replace(e,t,i){let r=i[0];return i.length==1&&(r instanceof Me||r instanceof he&&r.flags&4)&&Math.abs(this.length-r.length)<10?(r instanceof he?r=new Me(r.length,this.height,this.spaceAbove):r.height=this.height,this.outdated||(r.outdated=!1),r):ge.of(i)}updateHeight(e,t=0,i=!1,r){return r&&r.from<=t&&r.more?this.setMeasuredHeight(r):(i||this.outdated)&&(this.spaceAbove=0,this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight)),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}}class he extends ge{constructor(e){super(e,0)}heightMetrics(e,t){let i=e.doc.lineAt(t).number,r=e.doc.lineAt(t+this.length).number,s=r-i+1,o,l=0;if(e.lineWrapping){let a=Math.min(this.height,e.lineHeight*s);o=a/s,this.length>s+1&&(l=(this.height-a)/(this.length-s-1))}else o=this.height/s;return{firstLine:i,lastLine:r,perLine:o,perChar:l}}blockAt(e,t,i,r){let{firstLine:s,lastLine:o,perLine:l,perChar:a}=this.heightMetrics(t,r);if(t.lineWrapping){let h=r+(e0){let s=i[i.length-1];s instanceof he?i[i.length-1]=new he(s.length+r):i.push(null,new he(r-1))}if(e>0){let s=i[0];s instanceof he?i[0]=new he(e+s.length):i.unshift(new he(e-1),null)}return ge.of(i)}decomposeLeft(e,t){t.push(new he(e-1),null)}decomposeRight(e,t){t.push(null,new he(this.length-e-1))}updateHeight(e,t=0,i=!1,r){let s=t+this.length;if(r&&r.from<=t+this.length&&r.more){let o=[],l=Math.max(t,r.from),a=-1;for(r.from>t&&o.push(new he(r.from-t-1).updateHeight(e,t));l<=s&&r.more;){let c=e.doc.lineAt(l).length;o.length&&o.push(null);let f=r.heights[r.index++],u=0;f<0&&(u=-f,f=r.heights[r.index++]),a==-1?a=f:Math.abs(f-a)>=kn&&(a=-2);let d=new Me(c,f,u);d.outdated=!1,o.push(d),l+=c+1}l<=s&&o.push(null,new he(s-l).updateHeight(e,l));let h=ge.of(o);return(a<0||Math.abs(h.height-this.height)>=kn||Math.abs(a-this.heightMetrics(e,t).perLine)>=kn)&&(ri=!0),Nn(this,h)}else(i||this.outdated)&&(this.setHeight(e.heightForGap(t,t+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}}class Eu extends ge{constructor(e,t,i){super(e.length+t+i.length,e.height+i.height,t|(e.outdated||i.outdated?2:0)),this.left=e,this.right=i,this.size=e.size+i.size}get break(){return this.flags&1}blockAt(e,t,i,r){let s=i+this.left.height;return el))return h;let c=t==X.ByPosNoHeight?X.ByPosNoHeight:X.ByPos;return a?h.join(this.right.lineAt(l,c,i,o,l)):this.left.lineAt(l,c,i,r,s).join(h)}forEachLine(e,t,i,r,s,o){let l=r+this.left.height,a=s+this.left.length+this.break;if(this.break)e=a&&this.right.forEachLine(e,t,i,l,a,o);else{let h=this.lineAt(a,X.ByPos,i,r,s);e=e&&h.from<=t&&o(h),t>h.to&&this.right.forEachLine(h.to+1,t,i,l,a,o)}}replace(e,t,i){let r=this.left.length+this.break;if(tthis.left.length)return this.balanced(this.left,this.right.replace(e-r,t-r,i));let s=[];e>0&&this.decomposeLeft(e,s);let o=s.length;for(let l of i)s.push(l);if(e>0&&Ko(s,o-1),t=i&&t.push(null)),e>i&&this.right.decomposeLeft(e-i,t)}decomposeRight(e,t){let i=this.left.length,r=i+this.break;if(e>=r)return this.right.decomposeRight(e-r,t);e2*t.size||t.size>2*e.size?ge.of(this.break?[e,null,t]:[e,t]):(this.left=Nn(this.left,e),this.right=Nn(this.right,t),this.setHeight(e.height+t.height),this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}updateHeight(e,t=0,i=!1,r){let{left:s,right:o}=this,l=t+s.length+this.break,a=null;return r&&r.from<=t+s.length&&r.more?a=s=s.updateHeight(e,t,i,r):s.updateHeight(e,t,i),r&&r.from<=l+o.length&&r.more?a=o=o.updateHeight(e,l,i,r):o.updateHeight(e,l,i),a?this.balanced(s,o):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}}function Ko(n,e){let t,i;n[e]==null&&(t=n[e-1])instanceof he&&(i=n[e+1])instanceof he&&n.splice(e-1,3,new he(t.length+1+i.length))}const Ou=5;class zs{constructor(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,t){if(this.lineStart>-1){let i=Math.min(t,this.lineEnd),r=this.nodes[this.nodes.length-1];r instanceof Me?r.length+=i-this.pos:(i>this.pos||!this.isCovered)&&this.nodes.push(new Me(i-this.pos,-1,0)),this.writtenTo=i,t>i&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}point(e,t,i){if(e=Ou)&&this.addLineDeco(r,s,o)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:t}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=t,this.writtenToe&&this.nodes.push(new Me(this.pos-e,-1,0)),this.writtenTo=this.pos}blankContent(e,t){let i=new he(t-e);return this.oracle.doc.lineAt(e).to==t&&(i.flags|=4),i}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof Me)return e;let t=new Me(0,-1,0);return this.nodes.push(t),t}addBlock(e){this.enterLine();let t=e.deco;t&&t.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,t&&t.endSide>0&&(this.covering=e)}addLineDeco(e,t,i){let r=this.ensureLine();r.length+=i,r.collapsed+=i,r.widgetHeight=Math.max(r.widgetHeight,e),r.breaks+=t,this.writtenTo=this.pos=this.pos+i}finish(e){let t=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(t instanceof Me)&&!this.isCovered?this.nodes.push(new Me(0,-1,0)):(this.writtenToc.clientHeight||c.scrollWidth>c.clientWidth)&&f.overflow!="visible"){let u=c.getBoundingClientRect();s=Math.max(s,u.left),o=Math.min(o,u.right),l=Math.max(l,u.top),a=Math.min(h==n.parentNode?r.innerHeight:a,u.bottom)}h=f.position=="absolute"||f.position=="fixed"?c.offsetParent:c.parentNode}else if(h.nodeType==11)h=h.host;else break;return{left:s-t.left,right:Math.max(s,o)-t.left,top:l-(t.top+e),bottom:Math.max(l,a)-(t.top+e)}}function Iu(n){let e=n.getBoundingClientRect(),t=n.ownerDocument.defaultView||window;return e.left0&&e.top0}function Pu(n,e){let t=n.getBoundingClientRect();return{left:0,right:t.right-t.left,top:e,bottom:t.bottom-(t.top+e)}}class br{constructor(e,t,i,r){this.from=e,this.to=t,this.size=i,this.displaySize=r}static same(e,t){if(e.length!=t.length)return!1;for(let i=0;itypeof r!="function"&&r.class=="cm-lineWrapping");this.heightOracle=new Tu(i),this.stateDeco=Yo(t),this.heightMap=ge.empty().applyChanges(this.stateDeco,z.empty,this.heightOracle.setDoc(t.doc),[new Ie(0,0,0,t.doc.length)]);for(let r=0;r<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());r++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=Y.set(this.lineGaps.map(r=>r.draw(this,!1))),this.scrollParent=e.scrollDOM,this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:t}=this.state.selection;for(let i=0;i<=1;i++){let r=i?t.head:t.anchor;if(!e.some(({from:s,to:o})=>r>=s&&r<=o)){let{from:s,to:o}=this.lineBlockAt(r);e.push(new rn(s,o))}}return this.viewports=e.sort((i,r)=>i.from-r.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?Go:new $s(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(bi(e,this.scaler))})}update(e,t=null){this.state=e.state;let i=this.stateDeco;this.stateDeco=Yo(this.state);let r=e.changedRanges,s=Ie.extendWithRanges(r,Lu(i,this.stateDeco,e?e.changes:re.empty(this.state.doc.length))),o=this.heightMap.height,l=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollOffset);qo(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),s),(this.heightMap.height!=o||ri)&&(e.flags|=2),l?(this.scrollAnchorPos=e.changes.mapPos(l.from,-1),this.scrollAnchorHeight=l.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=o);let a=s.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.heada.to)||!this.viewportIsAppropriate(a))&&(a=this.getViewport(0,t));let h=a.from!=this.viewport.from||a.to!=this.viewport.to;this.viewport=a,e.flags|=this.updateForViewport(),(h||!e.changes.empty||e.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&(e.selectionSet||e.focusChanged)&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(Mf)&&(this.mustEnforceCursorAssoc=!0)}measure(){let{view:e}=this,t=e.contentDOM,i=window.getComputedStyle(t),r=this.heightOracle,s=i.whiteSpace;this.defaultTextDirection=i.direction=="rtl"?Z.RTL:Z.LTR;let o=this.heightOracle.mustRefreshForWrapping(s)||this.mustMeasureContent==="refresh",l=t.getBoundingClientRect(),a=o||this.mustMeasureContent||this.contentDOMHeight!=l.height;this.contentDOMHeight=l.height,this.mustMeasureContent=!1;let h=0,c=0;if(l.width&&l.height){let{scaleX:M,scaleY:L}=wa(t,l);(M>.005&&Math.abs(this.scaleX-M)>.005||L>.005&&Math.abs(this.scaleY-L)>.005)&&(this.scaleX=M,this.scaleY=L,h|=16,o=a=!0)}let f=(parseInt(i.paddingTop)||0)*this.scaleY,u=(parseInt(i.paddingBottom)||0)*this.scaleY;(this.paddingTop!=f||this.paddingBottom!=u)&&(this.paddingTop=f,this.paddingBottom=u,h|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(r.lineWrapping&&(a=!0),this.editorWidth=e.scrollDOM.clientWidth,h|=16);let d=xa(this.view.contentDOM,!1).y;d!=this.scrollParent&&(this.scrollParent=d,this.scrollAnchorHeight=-1,this.scrollOffset=0);let p=this.getScrollOffset();this.scrollOffset!=p&&(this.scrollAnchorHeight=-1,this.scrollOffset=p),this.scrolledToBottom=ka(this.scrollParent||e.win);let m=(this.printing?Pu:Ru)(t,this.paddingTop),g=m.top-this.pixelViewport.top,y=m.bottom-this.pixelViewport.bottom;this.pixelViewport=m;let w=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(w!=this.inView&&(this.inView=w,w&&(a=!0)),!this.inView&&!this.scrollTarget&&!Iu(e.dom))return 0;let T=l.width;if((this.contentDOMWidth!=T||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=l.width,this.editorHeight=e.scrollDOM.clientHeight,h|=16),a){let M=e.docView.measureVisibleLineHeights(this.viewport);if(r.mustRefreshForHeights(M)&&(o=!0),o||r.lineWrapping&&Math.abs(T-this.contentDOMWidth)>r.charWidth){let{lineHeight:L,charWidth:E,textHeight:F}=e.docView.measureTextSize();o=L>0&&r.refresh(s,L,E,F,Math.max(5,T/E),M),o&&(e.docView.minWidth=0,h|=16)}g>0&&y>0?c=Math.max(g,y):g<0&&y<0&&(c=Math.min(g,y)),qo();for(let L of this.viewports){let E=L.from==this.viewport.from?M:e.docView.measureVisibleLineHeights(L);this.heightMap=(o?ge.empty().applyChanges(this.stateDeco,z.empty,this.heightOracle,[new Ie(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(r,0,o,new Mu(L.from,E))}ri&&(h|=2)}let D=!this.viewportIsAppropriate(this.viewport,c)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return D&&(h&2&&(h|=this.updateScaler()),this.viewport=this.getViewport(c,this.scrollTarget),h|=this.updateForViewport()),(h&2||D)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(o?[]:this.lineGaps,e)),h|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),h}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,t){let i=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),r=this.heightMap,s=this.heightOracle,{visibleTop:o,visibleBottom:l}=this,a=new rn(r.lineAt(o-i*1e3,X.ByHeight,s,0,0).from,r.lineAt(l+(1-i)*1e3,X.ByHeight,s,0,0).to);if(t){let{head:h}=t.range;if(ha.to){let c=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),f=r.lineAt(h,X.ByPos,s,0,0),u;t.y=="center"?u=(f.top+f.bottom)/2-c/2:t.y=="start"||t.y=="nearest"&&h=l+Math.max(10,Math.min(i,250)))&&r>o-2*1e3&&s>1,o=r<<1;if(this.defaultTextDirection!=Z.LTR&&!i)return[];let l=[],a=(c,f,u,d)=>{if(f-cc&&yy.from>=u.from&&y.to<=u.to&&Math.abs(y.from-c)y.fromw));if(!g){if(fT.from<=f&&T.to>=f)){let T=t.moveToLineBoundary(b.cursor(f),!1,!0).head;T>c&&(f=T)}let y=this.gapSize(u,c,f,d),w=i||y<2e6?y:2e6;g=new br(c,f,y,w)}l.push(g)},h=c=>{if(c.length2e6)for(let L of e)L.from>=c.from&&L.fromc.from&&a(c.from,d,c,f),pt.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let t=this.stateDeco;this.lineGaps.length&&(t=t.concat(this.lineGapDeco));let i=[];W.spans(t,this.viewport.from,this.viewport.to,{span(s,o){i.push({from:s,to:o})},point(){}},20);let r=0;if(i.length!=this.visibleRanges.length)r=12;else for(let s=0;s=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(t=>t.from<=e&&t.to>=e)||bi(this.heightMap.lineAt(e,X.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(t=>t.top<=e&&t.bottom>=e)||bi(this.heightMap.lineAt(this.scaler.fromDOM(e),X.ByHeight,this.heightOracle,0,0),this.scaler)}getScrollOffset(){return(this.scrollParent==this.view.scrollDOM?this.scrollParent.scrollTop:(this.scrollParent?this.scrollParent.getBoundingClientRect().top:0)-this.view.contentDOM.getBoundingClientRect().top)*this.scaleY}scrollAnchorAt(e){let t=this.lineBlockAtHeight(e+8);return t.from>=this.viewport.from||this.viewportLines[0].top-e>200?t:this.viewportLines[0]}elementAtHeight(e){return bi(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}}class rn{constructor(e,t){this.from=e,this.to=t}}function Fu(n,e,t){let i=[],r=n,s=0;return W.spans(t,n,e,{span(){},point(o,l){o>r&&(i.push({from:r,to:o}),s+=o-r),r=l}},20),r=1)return e[e.length-1].to;let i=Math.floor(n*t);for(let r=0;;r++){let{from:s,to:o}=e[r],l=o-s;if(i<=l)return s+i;i-=l}}function on(n,e){let t=0;for(let{from:i,to:r}of n.ranges){if(e<=r){t+=e-i;break}t+=r-i}return t/n.total}function _u(n,e){for(let t of n)if(e(t))return t}const Go={toDOM(n){return n},fromDOM(n){return n},scale:1,eq(n){return n==this}};function Yo(n){let e=n.facet(Gn).filter(i=>typeof i!="function"),t=n.facet(Ws).filter(i=>typeof i!="function");return t.length&&e.push(W.join(t)),e}class $s{constructor(e,t,i){let r=0,s=0,o=0;this.viewports=i.map(({from:l,to:a})=>{let h=t.lineAt(l,X.ByPos,e,0,0).top,c=t.lineAt(a,X.ByPos,e,0,0).bottom;return r+=c-h,{from:l,to:a,top:h,bottom:c,domTop:0,domBottom:0}}),this.scale=(7e6-r)/(t.height-r);for(let l of this.viewports)l.domTop=o+(l.top-s)*this.scale,o=l.domBottom=l.domTop+(l.bottom-l.top),s=l.bottom}toDOM(e){for(let t=0,i=0,r=0;;t++){let s=tt.from==e.viewports[i].from&&t.to==e.viewports[i].to):!1}}function bi(n,e){if(e.scale==1)return n;let t=e.toDOM(n.top),i=e.toDOM(n.bottom);return new He(n.from,n.length,t,i-t,Array.isArray(n._content)?n._content.map(r=>bi(r,e)):n._content)}const ln=R.define({combine:n=>n.join(" ")}),fs=R.define({combine:n=>n.indexOf(!0)>-1}),us=xt.newName(),rh=xt.newName(),sh=xt.newName(),oh={"&light":"."+rh,"&dark":"."+sh};function ds(n,e,t){return new xt(e,{finish(i){return/&/.test(i)?i.replace(/&\w*/,r=>{if(r=="&")return n;if(!t||!t[r])throw new RangeError(`Unsupported selector: ${r}`);return t[r]}):n+" "+i}})}const Wu=ds("."+us,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0,overflowAnchor:"none"},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#ddd"},".cm-selectionHandle":{backgroundColor:"currentColor",width:"1.5px"},".cm-selectionHandle-start::before, .cm-selectionHandle-end::before":{content:'""',backgroundColor:"inherit",borderRadius:"50%",width:"8px",height:"8px",position:"absolute",left:"-3.25px"},".cm-selectionHandle-start::before":{top:"-8px"},".cm-selectionHandle-end::before":{bottom:"-8px"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},".cm-iso":{unicodeBidi:"isolate"},".cm-announced":{position:"fixed",top:"-10000px"},"@media print":{".cm-announced":{display:"none"}},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",zIndex:200},".cm-gutters-before":{insetInlineStart:0},".cm-gutters-after":{insetInlineEnd:0},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",border:"0px solid #ddd","&.cm-gutters-before":{borderRightWidth:"1px"},"&.cm-gutters-after":{borderLeftWidth:"1px"}},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0,zIndex:300},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-dialog":{padding:"2px 19px 4px 6px",position:"relative","& label":{fontSize:"80%"}},".cm-dialog-close":{position:"absolute",top:"3px",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",fontSize:"14px",padding:"0"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top",userSelect:"none"},".cm-highlightSpace":{backgroundImage:"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)",backgroundPosition:"center"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},oh),Vu={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},wr=O.ie&&O.ie_version<=11;class Hu{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new mf,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(t=>{for(let i of t)this.queue.push(i);(O.ie&&O.ie_version<=11||O.ios&&e.composing)&&t.some(i=>i.type=="childList"&&i.removedNodes.length||i.type=="characterData"&&i.oldValue.length>i.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&&O.android&&e.constructor.EDIT_CONTEXT!==!1&&!(O.chrome&&O.chrome_version<126)&&(this.editContext=new $u(e),e.state.facet(lt)&&(e.contentDOM.editContext=this.editContext.editContext)),wr&&(this.onCharData=t=>{this.queue.push({target:t.target,type:"characterData",oldValue:t.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia("print")),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var t;((t=this.view.docView)===null||t===void 0?void 0:t.lastUpdate){this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),t.length>0&&t[t.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(t=>{t.length>0&&t[t.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers("scroll",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){(e.type=="change"||!e.type)&&!e.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((t,i)=>t!=e[i]))){this.gapIntersection.disconnect();for(let t of e)this.gapIntersection.observe(t);this.gaps=e}}onSelectionChange(e){let t=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,r=this.selectionRange;if(i.state.facet(lt)?i.root.activeElement!=this.dom:!vi(this.dom,r))return;let s=r.anchorNode&&i.docView.tile.nearest(r.anchorNode);if(s&&s.isWidget()&&s.widget.ignoreEvent(e)){t||(this.selectionChanged=!1);return}(O.ie&&O.ie_version<=11||O.android&&O.chrome)&&!i.state.selection.main.empty&&r.focusNode&&ki(r.focusNode,r.focusOffset,r.anchorNode,r.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,t=Bi(e.root);if(!t)return!1;let i=O.safari&&e.root.nodeType==11&&e.root.activeElement==this.dom&&zu(this.view,t)||t;if(!i||this.selectionRange.eq(i))return!1;let r=vi(this.dom,i);return r&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let s=this.delayedAndroidKey;s&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=s.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&s.force&&Qt(this.dom,s.key,s.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(r)}(!this.delayedAndroidKey||e=="Enter")&&(this.delayedAndroidKey={key:e,keyCode:t,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let t=-1,i=-1,r=!1;for(let s of e){let o=this.readMutation(s);o&&(o.typeOver&&(r=!0),t==-1?{from:t,to:i}=o:(t=Math.min(o.from,t),i=Math.max(o.to,i)))}return{from:t,to:i,typeOver:r}}readChange(){let{from:e,to:t,typeOver:i}=this.processRecords(),r=this.selectionChanged&&vi(this.dom,this.selectionRange);if(e<0&&!r)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let s=new ou(this.view,e,t,i);return this.view.docView.domChanged={newSel:s.newSel?s.newSel.main:null},s}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let t=this.readChange();if(!t)return this.view.requestMeasure(),!1;let i=this.view.state,r=ja(this.view,t);return this.view.state==i&&(t.domChanged||t.newSel&&!Pn(this.view.state.selection,t.newSel.main))&&this.view.update([]),r}readMutation(e){let t=this.view.docView.tile.nearest(e.target);if(!t||t.isWidget())return null;if(t.markDirty(e.type=="attributes"),e.type=="childList"){let i=Xo(t,e.previousSibling||e.target.previousSibling,-1),r=Xo(t,e.nextSibling||e.target.nextSibling,1);return{from:i?t.posAfter(i):t.posAtStart,to:r?t.posBefore(r):t.posAtEnd,typeOver:!1}}else return e.type=="characterData"?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener("change",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener("change",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(lt)!=e.state.facet(lt)&&(e.view.contentDOM.editContext=e.state.facet(lt)?this.editContext.editContext:null))}destroy(){var e,t,i;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(t=this.gapIntersection)===null||t===void 0||t.disconnect(),(i=this.resizeScroll)===null||i===void 0||i.disconnect();for(let r of this.scrollTargets)r.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}}function Xo(n,e,t){for(;e;){let i=ee.get(e);if(i&&i.parent==n)return i;let r=e.parentNode;e=r!=n.dom?r:t>0?e.nextSibling:e.previousSibling}return null}function Jo(n,e){let t=e.startContainer,i=e.startOffset,r=e.endContainer,s=e.endOffset,o=n.docView.domAtPos(n.state.selection.main.anchor,1);return ki(o.node,o.offset,r,s)&&([t,i,r,s]=[r,s,t,i]),{anchorNode:t,anchorOffset:i,focusNode:r,focusOffset:s}}function zu(n,e){if(e.getComposedRanges){let r=e.getComposedRanges(n.root)[0];if(r)return Jo(n,r)}let t=null;function i(r){r.preventDefault(),r.stopImmediatePropagation(),t=r.getTargetRanges()[0]}return n.contentDOM.addEventListener("beforeinput",i,!0),n.dom.ownerDocument.execCommand("indent"),n.contentDOM.removeEventListener("beforeinput",i,!0),t?Jo(n,t):null}class $u{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let t=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=i=>{let r=e.state.selection.main,{anchor:s,head:o}=r,l=this.toEditorPos(i.updateRangeStart),a=this.toEditorPos(i.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:i.updateRangeStart,editorBase:l,drifted:!1});let h=a-l>i.text.length;l==this.from&&sthis.to&&(a=s);let c=Ga(e.state.sliceDoc(l,a),i.text,(h?r.from:r.to)-l,h?"end":null);if(!c){let u=b.single(this.toEditorPos(i.selectionStart),this.toEditorPos(i.selectionEnd));Pn(u,r)||e.dispatch({selection:u,userEvent:"select"});return}let f={from:c.from+l,to:c.toA+l,insert:z.of(i.text.slice(c.from,c.toB).split(` -`))};if((O.mac||O.android)&&f.from==o-1&&/^\. ?$/.test(i.text)&&e.contentDOM.getAttribute("autocorrect")=="off"&&(f={from:l,to:a,insert:z.of([i.text.replace("."," ")])}),this.pendingContextChange=f,!e.state.readOnly){let u=this.to-this.from+(f.to-f.from+f.insert.length);Hs(e,f,b.single(this.toEditorPos(i.selectionStart,u),this.toEditorPos(i.selectionEnd,u)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state)),f.from=0&&!/[\\p{Alphabetic}\\p{Number}_]/.test(t.text.slice(Math.max(0,i.updateRangeStart-1),Math.min(t.text.length,i.updateRangeStart+1)))&&this.handlers.compositionend(i)},this.handlers.characterboundsupdate=i=>{let r=[],s=null;for(let o=this.toEditorPos(i.rangeStart),l=this.toEditorPos(i.rangeEnd);o{let r=[];for(let s of i.getTextFormats()){let o=s.underlineStyle,l=s.underlineThickness;if(!/none/i.test(o)&&!/none/i.test(l)){let a=this.toEditorPos(s.rangeStart),h=this.toEditorPos(s.rangeEnd);if(a{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:i}=this.composing;this.composing=null,i&&this.reset(e.state)}};for(let i in this.handlers)t.addEventListener(i,this.handlers[i]);this.measureReq={read:i=>{this.editContext.updateControlBounds(i.contentDOM.getBoundingClientRect());let r=Bi(i.root);r&&r.rangeCount&&this.editContext.updateSelectionBounds(r.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let t=0,i=!1,r=this.pendingContextChange;return e.changes.iterChanges((s,o,l,a,h)=>{if(i)return;let c=h.length-(o-s);if(r&&o>=r.to)if(r.from==s&&r.to==o&&r.insert.eq(h)){r=this.pendingContextChange=null,t+=c,this.to+=c;return}else r=null,this.revertPending(e.state);if(s+=t,o+=t,o<=this.from)this.from+=c,this.to+=c;else if(sthis.to||this.to-this.from+h.length>3e4){i=!0;return}this.editContext.updateText(this.toContextPos(s),this.toContextPos(o),h.toString()),this.to+=c}t+=c}),r&&!i&&this.revertPending(e.state),!i}update(e){let t=this.pendingContextChange,i=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(i.from,i.to)&&e.transactions.some(r=>!r.isUserEvent("input.type")&&r.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||t)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:t}=e.selection.main;this.from=Math.max(0,t-1e4),this.to=Math.min(e.doc.length,t+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let t=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(t.from),this.toContextPos(t.from+t.insert.length),e.doc.sliceString(t.from,t.to))}setSelection(e){let{main:t}=e.selection,i=this.toContextPos(Math.max(this.from,Math.min(this.to,t.anchor))),r=this.toContextPos(t.head);(this.editContext.selectionStart!=i||this.editContext.selectionEnd!=r)&&this.editContext.updateSelection(i,r)}rangeIsValid(e){let{head:t}=e.selection.main;return!(this.from>0&&t-this.from<500||this.to1e4*3)}toEditorPos(e,t=this.to-this.from){e=Math.min(e,t);let i=this.composing;return i&&i.drifted?i.editorBase+(e-i.contextBase):e+this.from}toContextPos(e){let t=this.composing;return t&&t.drifted?t.contextBase+(e-t.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}}class I{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(e={}){var t;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.className="cm-announced",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),e.parent&&e.parent.appendChild(this.dom);let{dispatch:i}=e;this.dispatchTransactions=e.dispatchTransactions||i&&(r=>r.forEach(s=>i(s,this)))||(r=>this.update(r)),this.dispatch=this.dispatch.bind(this),this._root=e.root||gf(e.parent)||document,this.viewState=new jo(this,e.state||U.create(e)),e.scrollTo&&e.scrollTo.is(en)&&(this.viewState.scrollTarget=e.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(Kt).map(r=>new dr(r));for(let r of this.plugins)r.update(this);this.observer=new Hu(this),this.inputState=new cu(this),this.inputState.ensureHandlers(this.plugins),this.docView=new Io(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((t=document.fonts)===null||t===void 0)&&t.ready&&document.fonts.ready.then(()=>{this.viewState.mustMeasureContent="refresh",this.requestMeasure()})}dispatch(...e){let t=e.length==1&&e[0]instanceof se?e:e.length==1&&Array.isArray(e[0])?e[0]:[this.state.update(...e)];this.dispatchTransactions(t,this)}update(e){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let t=!1,i=!1,r,s=this.state;for(let u of e){if(u.startState!=s)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");s=u.state}if(this.destroyed){this.viewState.state=s;return}let o=this.hasFocus,l=0,a=null;e.some(u=>u.annotation(eh))?(this.inputState.notifiedFocused=o,l=1):o!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=o,a=th(s,o),a||(l=1));let h=this.observer.delayedAndroidKey,c=null;if(h?(this.observer.clearDelayedAndroidKey(),c=this.observer.readChange(),(c&&!this.state.doc.eq(s.doc)||!this.state.selection.eq(s.selection))&&(c=null)):this.observer.clear(),s.facet(U.phrases)!=this.state.facet(U.phrases))return this.setState(s);r=Bn.create(this,s,e),r.flags|=l;let f=this.viewState.scrollTarget;try{this.updateState=2;for(let u of e){if(f&&(f=f.map(u.changes)),u.scrollIntoView){let{main:d}=u.state.selection,{x:p,y:m}=this.state.facet(I.cursorScrollMargin);f=new Zt(d.empty?d:b.cursor(d.head,d.head>d.anchor?-1:1),"nearest","nearest",m,p)}for(let d of u.effects)d.is(en)&&(f=d.value.clip(this.state))}this.viewState.update(r,f),this.bidiCache=Fn.update(this.bidiCache,r.changes),r.empty||(this.updatePlugins(r),this.inputState.update(r)),t=this.docView.update(r),this.state.facet(yi)!=this.styleModules&&this.mountStyles(),i=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(t,e.some(u=>u.isUserEvent("select.pointer")))}finally{this.updateState=0}if(r.startState.facet(ln)!=r.state.facet(ln)&&(this.viewState.mustMeasureContent=!0),(t||i||f||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),t&&this.docViewUpdate(),!r.empty)for(let u of this.state.facet(ls))try{u(r)}catch(d){De(this.state,d,"update listener")}(a||c)&&Promise.resolve().then(()=>{a&&this.state==a.startState&&this.dispatch(a),c&&!ja(this,c)&&h.force&&Qt(this.contentDOM,h.key,h.keyCode)})}setState(e){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=e;return}this.updateState=2;let t=this.hasFocus;try{for(let i of this.plugins)i.destroy(this);this.viewState=new jo(this,e),this.plugins=e.facet(Kt).map(i=>new dr(i)),this.pluginMap.clear();for(let i of this.plugins)i.update(this);this.docView.destroy(),this.docView=new Io(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}t&&this.focus(),this.requestMeasure()}updatePlugins(e){let t=e.startState.facet(Kt),i=e.state.facet(Kt);if(t!=i){let r=[];for(let s of i){let o=t.indexOf(s);if(o<0)r.push(new dr(s));else{let l=this.plugins[o];l.mustUpdate=e,r.push(l)}}for(let s of this.plugins)s.mustUpdate!=e&&s.destroy(this);this.plugins=r,this.pluginMap.clear()}else for(let r of this.plugins)r.mustUpdate=e;for(let r=0;r-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,e&&this.observer.forceFlush();let t=null,i=this.viewState.scrollParent,r=this.viewState.getScrollOffset(),{scrollAnchorPos:s,scrollAnchorHeight:o}=this.viewState;Math.abs(r-this.viewState.scrollOffset)>1&&(o=-1),this.viewState.scrollAnchorHeight=-1;try{for(let l=0;;l++){if(o<0)if(ka(i||this.win))s=-1,o=this.viewState.heightMap.height;else{let d=this.viewState.scrollAnchorAt(r);s=d.from,o=d.top}this.updateState=1;let a=this.viewState.measure();if(!a&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(l>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let h=[];a&4||([this.measureRequests,h]=[h,this.measureRequests]);let c=h.map(d=>{try{return d.read(this)}catch(p){return De(this.state,p),Qo}}),f=Bn.create(this,this.state,[]),u=!1;f.flags|=a,t?t.flags|=a:t=f,this.updateState=2,f.empty||(this.updatePlugins(f),this.inputState.update(f),this.updateAttrs(),u=this.docView.update(f),u&&this.docViewUpdate());for(let d=0;d1||p<-1)&&(i==this.scrollDOM||this.hasFocus||Math.max(this.inputState.lastWheelEvent,this.inputState.lastTouchTime)>Date.now()-100)){r=r+p,i?i.scrollTop+=p:this.win.scrollBy(0,p),o=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(t&&!t.empty)for(let l of this.state.facet(ls))l(t)}get themeClasses(){return us+" "+(this.state.facet(fs)?sh:rh)+" "+this.state.facet(ln)}updateAttrs(){let e=Zo(this,Wa,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),t={spellcheck:"false",autocorrect:"off",autocapitalize:"off",writingsuggestions:"false",translate:"no",contenteditable:this.state.facet(lt)?"true":"false",class:"cm-content",style:`${O.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(t["aria-readonly"]="true"),Zo(this,_s,t);let i=this.observer.ignore(()=>{let r=Do(this.contentDOM,this.contentAttrs,t),s=Do(this.dom,this.editorAttrs,e);return r||s});return this.editorAttrs=e,this.contentAttrs=t,i}showAnnouncements(e){let t=!0;for(let i of e)for(let r of i.effects)if(r.is(I.announce)){t&&(this.announceDOM.textContent=""),t=!1;let s=this.announceDOM.appendChild(document.createElement("div"));s.textContent=r.value}}mountStyles(){this.styleModules=this.state.facet(yi);let e=this.state.facet(I.cspNonce);xt.mount(this.root,this.styleModules.concat(Wu).reverse(),e?{nonce:e}:void 0)}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),e){if(this.measureRequests.indexOf(e)>-1)return;if(e.key!=null){for(let t=0;ti.plugin==e)||null),t&&t.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,t,i){return yr(this,e,Po(this,e,t,i))}moveByGroup(e,t){return yr(this,e,Po(this,e,t,i=>eu(this,e.head,i)))}visualLineSide(e,t){let i=this.bidiSpans(e),r=this.textDirectionAt(e.from),s=i[t?i.length-1:0];return b.cursor(s.side(t,r)+e.from,s.forward(!t,r)?1:-1)}moveToLineBoundary(e,t,i=!0){return Zf(this,e,t,i)}moveVertically(e,t,i){return yr(this,e,tu(this,e,t,i))}domAtPos(e,t=1){return this.docView.domAtPos(e,t)}posAtDOM(e,t=0){return this.docView.posFromDOM(e,t)}posAtCoords(e,t=!0){this.readMeasured();let i=hs(this,e,t);return i&&i.pos}posAndSideAtCoords(e,t=!0){return this.readMeasured(),hs(this,e,t)}coordsAtPos(e,t=1){this.readMeasured();let i=this.docView.coordsAt(e,t);if(!i||i.left==i.right)return i;let r=this.state.doc.lineAt(e),s=this.bidiSpans(r),o=s[tt.find(s,e-r.from,-1,t)];return Ln(i,o.dir==Z.LTR==t>0)}coordsForChar(e){return this.readMeasured(),this.docView.coordsForChar(e)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(Na)||ethis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>Uu)return Da(e.length);let t=this.textDirectionAt(e.from),i;for(let s of this.bidiCache)if(s.from==e.from&&s.dir==t&&(s.fresh||Ma(s.isolates,i=Lo(this,e))))return s.order;i||(i=Lo(this,e));let r=Cf(e.text,t,i);return this.bidiCache.push(new Fn(e.from,e.to,t,i,!0,r)),r}get hasFocus(){var e;return(this.dom.ownerDocument.hasFocus()||O.safari&&((e=this.inputState)===null||e===void 0?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{va(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((e.nodeType==9?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,t={}){var i,r,s,o;return en.of(new Zt(typeof e=="number"?b.cursor(e):e,(i=t.y)!==null&&i!==void 0?i:"nearest",(r=t.x)!==null&&r!==void 0?r:"nearest",(s=t.yMargin)!==null&&s!==void 0?s:5,(o=t.xMargin)!==null&&o!==void 0?o:5))}scrollSnapshot(){let{scrollTop:e,scrollLeft:t}=this.scrollDOM,i=this.viewState.scrollAnchorAt(e);return en.of(new Zt(b.cursor(i.from),"start","start",i.top-e,t,!0))}setTabFocusMode(e){e==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof e=="boolean"?this.inputState.tabFocusMode=e?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+e)}static domEventHandlers(e){return _e.define(()=>({}),{eventHandlers:e})}static domEventObservers(e){return _e.define(()=>({}),{eventObservers:e})}static theme(e,t){let i=xt.newName(),r=[ln.of(i),yi.of(ds(`.${i}`,e))];return t&&t.dark&&r.push(fs.of(!0)),r}static baseTheme(e){return Wt.lowest(yi.of(ds("."+us,e,oh)))}static findFromDOM(e){var t;let i=e.querySelector(".cm-content"),r=i&&ee.get(i)||ee.get(e);return((t=r==null?void 0:r.root)===null||t===void 0?void 0:t.view)||null}}I.styleModule=yi;I.inputHandler=Ia;I.clipboardInputFilter=Ns;I.clipboardOutputFilter=Fs;I.scrollHandler=Fa;I.focusChangeEffect=Pa;I.perLineTextDirection=Na;I.exceptionSink=Ra;I.updateListener=ls;I.editable=lt;I.mouseSelectionStyle=Ba;I.dragMovesSelection=La;I.clickAddsSelectionRange=Oa;I.decorations=Gn;I.blockWrappers=Va;I.outerDecorations=Ws;I.atomicRanges=Ui;I.bidiIsolatedRanges=Ha;I.cursorScrollMargin=R.define({combine:n=>{let e=5,t=5;for(let i of n)typeof i=="number"?e=t=i:{x:e,y:t}=i;return{x:e,y:t}}});I.scrollMargins=za;I.darkTheme=fs;I.cspNonce=R.define({combine:n=>n.length?n[0]:""});I.contentAttributes=_s;I.editorAttributes=Wa;I.lineWrapping=I.contentAttributes.of({class:"cm-lineWrapping"});I.announce=G.define();const Uu=4096,Qo={};class Fn{constructor(e,t,i,r,s,o){this.from=e,this.to=t,this.dir=i,this.isolates=r,this.fresh=s,this.order=o}static update(e,t){if(t.empty&&!e.some(s=>s.fresh))return e;let i=[],r=e.length?e[e.length-1].dir:Z.LTR;for(let s=Math.max(0,e.length-10);s=0;r--){let s=i[r],o=typeof s=="function"?s(n):s;o&&Rs(o,t)}return t}const qu=O.mac?"mac":O.windows?"win":O.linux?"linux":"key";function Ku(n,e){const t=n.split(/-(?!$)/);let i=t[t.length-1];i=="Space"&&(i=" ");let r,s,o,l;for(let a=0;ai.concat(r),[]))),t}let mt=null;const Yu=4e3;function Xu(n,e=qu){let t=Object.create(null),i=Object.create(null),r=(o,l)=>{let a=i[o];if(a==null)i[o]=l;else if(a!=l)throw new Error("Key binding "+o+" is used both as a regular binding and as a multi-stroke prefix")},s=(o,l,a,h,c)=>{var f,u;let d=t[o]||(t[o]=Object.create(null)),p=l.split(/ (?!$)/).map(y=>Ku(y,e));for(let y=1;y{let D=mt={view:T,prefix:w,scope:o};return setTimeout(()=>{mt==D&&(mt=null)},Yu),!0}]})}let m=p.join(" ");r(m,!1);let g=d[m]||(d[m]={preventDefault:!1,stopPropagation:!1,run:((u=(f=d._any)===null||f===void 0?void 0:f.run)===null||u===void 0?void 0:u.slice())||[]});a&&g.run.push(a),h&&(g.preventDefault=!0),c&&(g.stopPropagation=!0)};for(let o of n){let l=o.scope?o.scope.split(" "):["editor"];if(o.any)for(let h of l){let c=t[h]||(t[h]=Object.create(null));c._any||(c._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:f}=o;for(let u in c)c[u].run.push(d=>f(d,ps))}let a=o[e]||o.key;if(a)for(let h of l)s(h,a,o.run,o.preventDefault,o.stopPropagation),o.shift&&s(h,"Shift-"+a,o.shift,o.preventDefault,o.stopPropagation)}return t}let ps=null;function Ju(n,e,t,i){ps=e;let r=af(e),s=Qe(r,0),o=pt(s)==r.length&&r!=" ",l="",a=!1,h=!1,c=!1;mt&&mt.view==t&&mt.scope==i&&(l=mt.prefix+" ",Xa.indexOf(e.keyCode)<0&&(h=!0,mt=null));let f=new Set,u=g=>{if(g){for(let y of g.run)if(!f.has(y)&&(f.add(y),y(t)))return g.stopPropagation&&(c=!0),!0;g.preventDefault&&(g.stopPropagation&&(c=!0),h=!0)}return!1},d=n[i],p,m;return d&&(u(d[l+an(r,e,!o)])?a=!0:o&&(e.altKey||e.metaKey||e.ctrlKey)&&!(O.windows&&e.ctrlKey&&e.altKey)&&!(O.mac&&e.altKey&&!(e.ctrlKey||e.metaKey))&&(p=vt[e.keyCode])&&p!=r?(u(d[l+an(p,e,!0)])||e.shiftKey&&(m=Oi[e.keyCode])!=r&&m!=p&&u(d[l+an(m,e,!1)]))&&(a=!0):o&&e.shiftKey&&u(d[l+an(r,e,!0)])&&(a=!0),!a&&u(d._any)&&(a=!0)),h&&(a=!0),a&&c&&e.stopPropagation(),ps=null,a}function Qu(){return ed}const Zu=Y.line({class:"cm-activeLine"}),ed=_e.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.docChanged||n.selectionSet)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let e=-1,t=[];for(let i of n.state.selection.ranges){let r=n.lineBlockAt(i.head);r.from>e&&(t.push(Zu.range(r.from)),e=r.from)}return Y.set(t)}},{decorations:n=>n.decorations}),hn="-10000px";class td{constructor(e,t,i,r){this.facet=t,this.createTooltipView=i,this.removeTooltipView=r,this.input=e.state.facet(t),this.tooltips=this.input.filter(o=>o);let s=null;this.tooltipViews=this.tooltips.map(o=>s=i(o,s))}update(e,t){var i;let r=e.state.facet(this.facet),s=r.filter(a=>a);if(r===this.input){for(let a of this.tooltipViews)a.update&&a.update(e);return!1}let o=[],l=t?[]:null;for(let a=0;at[h]=a),t.length=l.length),this.input=r,this.tooltips=s,this.tooltipViews=o,!0}}function id(n){let e=n.dom.ownerDocument.documentElement;return{top:0,left:0,bottom:e.clientHeight,right:e.clientWidth}}const xr=R.define({combine:n=>{var e,t,i;return{position:O.ios?"absolute":((e=n.find(r=>r.position))===null||e===void 0?void 0:e.position)||"fixed",parent:((t=n.find(r=>r.parent))===null||t===void 0?void 0:t.parent)||null,tooltipSpace:((i=n.find(r=>r.tooltipSpace))===null||i===void 0?void 0:i.tooltipSpace)||id}}}),tl=new WeakMap,lh=_e.fromClass(class{constructor(n){this.view=n,this.above=[],this.inView=!0,this.madeAbsolute=!1,this.lastTransaction=0,this.measureTimeout=-1;let e=n.state.facet(xr);this.position=e.position,this.parent=e.parent,this.classes=n.themeClasses,this.createContainer(),this.measureReq={read:this.readMeasure.bind(this),write:this.writeMeasure.bind(this),key:this},this.resizeObserver=typeof ResizeObserver=="function"?new ResizeObserver(()=>this.measureSoon()):null,this.manager=new td(n,ah,(t,i)=>this.createTooltip(t,i),t=>{this.resizeObserver&&this.resizeObserver.unobserve(t.dom),t.dom.remove()}),this.above=this.manager.tooltips.map(t=>!!t.above),this.intersectionObserver=typeof IntersectionObserver=="function"?new IntersectionObserver(t=>{Date.now()>this.lastTransaction-50&&t.length>0&&t[t.length-1].intersectionRatio<1&&this.measureSoon()},{threshold:[1]}):null,this.observeIntersection(),n.win.addEventListener("resize",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}createContainer(){this.parent?(this.container=document.createElement("div"),this.container.style.position="relative",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom}observeIntersection(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(let n of this.manager.tooltipViews)this.intersectionObserver.observe(n.dom)}}measureSoon(){this.measureTimeout<0&&(this.measureTimeout=setTimeout(()=>{this.measureTimeout=-1,this.maybeMeasure()},50))}update(n){n.transactions.length&&(this.lastTransaction=Date.now());let e=this.manager.update(n,this.above);e&&this.observeIntersection();let t=e||n.geometryChanged,i=n.state.facet(xr);if(i.position!=this.position&&!this.madeAbsolute){this.position=i.position;for(let r of this.manager.tooltipViews)r.dom.style.position=this.position;t=!0}if(i.parent!=this.parent){this.parent&&this.container.remove(),this.parent=i.parent,this.createContainer();for(let r of this.manager.tooltipViews)this.container.appendChild(r.dom);t=!0}else this.parent&&this.view.themeClasses!=this.classes&&(this.classes=this.container.className=this.view.themeClasses);t&&this.maybeMeasure()}createTooltip(n,e){let t=n.create(this.view),i=e?e.dom:null;if(t.dom.classList.add("cm-tooltip"),n.arrow&&!t.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")){let r=document.createElement("div");r.className="cm-tooltip-arrow",t.dom.appendChild(r)}return t.dom.style.position=this.position,t.dom.style.top=hn,t.dom.style.left="0px",this.container.insertBefore(t.dom,i),t.mount&&t.mount(this.view),this.resizeObserver&&this.resizeObserver.observe(t.dom),t}destroy(){var n,e,t;this.view.win.removeEventListener("resize",this.measureSoon);for(let i of this.manager.tooltipViews)i.dom.remove(),(n=i.destroy)===null||n===void 0||n.call(i);this.parent&&this.container.remove(),(e=this.resizeObserver)===null||e===void 0||e.disconnect(),(t=this.intersectionObserver)===null||t===void 0||t.disconnect(),clearTimeout(this.measureTimeout)}readMeasure(){let n=1,e=1,t=!1;if(this.position=="fixed"&&this.manager.tooltipViews.length){let{dom:s}=this.manager.tooltipViews[0];if(O.safari){let o=s.getBoundingClientRect();t=Math.abs(o.top+1e4)>1||Math.abs(o.left)>1}else t=!!s.offsetParent&&s.offsetParent!=this.container.ownerDocument.body}if(t||this.position=="absolute")if(this.parent){let s=this.parent.getBoundingClientRect();s.width&&s.height&&(n=s.width/this.parent.offsetWidth,e=s.height/this.parent.offsetHeight)}else({scaleX:n,scaleY:e}=this.view.viewState);let i=this.view.scrollDOM.getBoundingClientRect(),r=Vs(this.view);return{visible:{left:i.left+r.left,top:i.top+r.top,right:i.right-r.right,bottom:i.bottom-r.bottom},parent:this.parent?this.container.getBoundingClientRect():this.view.dom.getBoundingClientRect(),pos:this.manager.tooltips.map((s,o)=>{let l=this.manager.tooltipViews[o];return l.getCoords?l.getCoords(s.pos):this.view.coordsAtPos(s.pos)}),size:this.manager.tooltipViews.map(({dom:s})=>s.getBoundingClientRect()),space:this.view.state.facet(xr).tooltipSpace(this.view),scaleX:n,scaleY:e,makeAbsolute:t}}writeMeasure(n){var e;if(n.makeAbsolute){this.madeAbsolute=!0,this.position="absolute";for(let l of this.manager.tooltipViews)l.dom.style.position="absolute"}let{visible:t,space:i,scaleX:r,scaleY:s}=n,o=[];for(let l=0;l=Math.min(t.bottom,i.bottom)||f.rightMath.min(t.right,i.right)+.1)){c.style.top=hn;continue}let d=a.arrow?h.dom.querySelector(".cm-tooltip-arrow"):null,p=d?7:0,m=u.right-u.left,g=(e=tl.get(h))!==null&&e!==void 0?e:u.bottom-u.top,y=h.offset||rd,w=this.view.textDirection==Z.LTR,T=u.width>i.right-i.left?w?i.left:i.right-u.width:w?Math.max(i.left,Math.min(f.left-(d?14:0)+y.x,i.right-m)):Math.min(Math.max(i.left,f.left-m+(d?14:0)-y.x),i.right-m),D=this.above[l];!a.strictSide&&(D?f.top-g-p-y.yi.bottom)&&D==i.bottom-f.bottom>f.top-i.top&&(D=this.above[l]=!D);let M=(D?f.top-i.top:i.bottom-f.bottom)-p;if(MT&&F.topL&&(L=D?F.top-g-2-p:F.bottom+p+2);if(this.position=="absolute"?(c.style.top=(L-n.parent.top)/s+"px",il(c,(T-n.parent.left)/r)):(c.style.top=L/s+"px",il(c,T/r)),d){let F=f.left+(w?y.x:-y.x)-(T+14-7);d.style.left=F/r+"px"}h.overlap!==!0&&o.push({left:T,top:L,right:E,bottom:L+g}),c.classList.toggle("cm-tooltip-above",D),c.classList.toggle("cm-tooltip-below",!D),h.positioned&&h.positioned(n.space)}}maybeMeasure(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(let n of this.manager.tooltipViews)n.dom.style.top=hn}},{eventObservers:{scroll(){this.maybeMeasure()}}});function il(n,e){let t=parseInt(n.style.left,10);(isNaN(t)||Math.abs(e-t)>1)&&(n.style.left=e+"px")}const nd=I.baseTheme({".cm-tooltip":{zIndex:500,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:"14px",position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}}),rd={x:0,y:0},ah=R.define({enables:[lh,nd]});function hh(n,e){let t=n.plugin(lh);if(!t)return null;let i=t.manager.tooltips.indexOf(e);return i<0?null:t.manager.tooltipViews[i]}class St extends wt{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}}St.prototype.elementClass="";St.prototype.toDOM=void 0;St.prototype.mapMode=be.TrackBefore;St.prototype.startSide=St.prototype.endSide=-1;St.prototype.point=!0;const vr=R.define(),sd=R.define(),od={class:"",renderEmptyElements:!1,elementStyle:"",markers:()=>W.empty,lineMarker:()=>null,widgetMarker:()=>null,lineMarkerChange:null,initialSpacer:null,updateSpacer:null,domEventHandlers:{},side:"before"},Ai=R.define();function ld(n){return[ch(),Ai.of({...od,...n})]}const nl=R.define({combine:n=>n.some(e=>e)});function ch(n){return[ad]}const ad=_e.fromClass(class{constructor(n){this.view=n,this.domAfter=null,this.prevViewport=n.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters cm-gutters-before",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=n.state.facet(Ai).map(e=>new sl(n,e)),this.fixed=!n.state.facet(nl);for(let e of this.gutters)e.config.side=="after"?this.getDOMAfter().appendChild(e.dom):this.dom.appendChild(e.dom);this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),n.scrollDOM.insertBefore(this.dom,n.contentDOM)}getDOMAfter(){return this.domAfter||(this.domAfter=document.createElement("div"),this.domAfter.className="cm-gutters cm-gutters-after",this.domAfter.setAttribute("aria-hidden","true"),this.domAfter.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.domAfter.style.position=this.fixed?"sticky":"",this.view.scrollDOM.appendChild(this.domAfter)),this.domAfter}update(n){if(this.updateGutters(n)){let e=this.prevViewport,t=n.view.viewport,i=Math.min(e.to,t.to)-Math.max(e.from,t.from);this.syncGutters(i<(t.to-t.from)*.8)}if(n.geometryChanged){let e=this.view.contentHeight/this.view.scaleY+"px";this.dom.style.minHeight=e,this.domAfter&&(this.domAfter.style.minHeight=e)}this.view.state.facet(nl)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":"",this.domAfter&&(this.domAfter.style.position=this.fixed?"sticky":"")),this.prevViewport=n.view.viewport}syncGutters(n){let e=this.dom.nextSibling;n&&(this.dom.remove(),this.domAfter&&this.domAfter.remove());let t=W.iter(this.view.state.facet(vr),this.view.viewport.from),i=[],r=this.gutters.map(s=>new hd(s,this.view.viewport,-this.view.documentPadding.top));for(let s of this.view.viewportLineBlocks)if(i.length&&(i=[]),Array.isArray(s.type)){let o=!0;for(let l of s.type)if(l.type==ve.Text&&o){ms(t,i,l.from);for(let a of r)a.line(this.view,l,i);o=!1}else if(l.widget)for(let a of r)a.widget(this.view,l)}else if(s.type==ve.Text){ms(t,i,s.from);for(let o of r)o.line(this.view,s,i)}else if(s.widget)for(let o of r)o.widget(this.view,s);for(let s of r)s.finish();n&&(this.view.scrollDOM.insertBefore(this.dom,e),this.domAfter&&this.view.scrollDOM.appendChild(this.domAfter))}updateGutters(n){let e=n.startState.facet(Ai),t=n.state.facet(Ai),i=n.docChanged||n.heightChanged||n.viewportChanged||!W.eq(n.startState.facet(vr),n.state.facet(vr),n.view.viewport.from,n.view.viewport.to);if(e==t)for(let r of this.gutters)r.update(n)&&(i=!0);else{i=!0;let r=[];for(let s of t){let o=e.indexOf(s);o<0?r.push(new sl(this.view,s)):(this.gutters[o].update(n),r.push(this.gutters[o]))}for(let s of this.gutters)s.dom.remove(),r.indexOf(s)<0&&s.destroy();for(let s of r)s.config.side=="after"?this.getDOMAfter().appendChild(s.dom):this.dom.appendChild(s.dom);this.gutters=r}return i}destroy(){for(let n of this.gutters)n.destroy();this.dom.remove(),this.domAfter&&this.domAfter.remove()}},{provide:n=>I.scrollMargins.of(e=>{let t=e.plugin(n);if(!t||t.gutters.length==0||!t.fixed)return null;let i=t.dom.offsetWidth*e.scaleX,r=t.domAfter?t.domAfter.offsetWidth*e.scaleX:0;return e.textDirection==Z.LTR?{left:i,right:r}:{right:i,left:r}})});function rl(n){return Array.isArray(n)?n:[n]}function ms(n,e,t){for(;n.value&&n.from<=t;)n.from==t&&e.push(n.value),n.next()}class hd{constructor(e,t,i){this.gutter=e,this.height=i,this.i=0,this.cursor=W.iter(e.markers,t.from)}addElement(e,t,i){let{gutter:r}=this,s=(t.top-this.height)/e.scaleY,o=t.height/e.scaleY;if(this.i==r.elements.length){let l=new fh(e,o,s,i);r.elements.push(l),r.dom.appendChild(l.dom)}else r.elements[this.i].update(e,o,s,i);this.height=t.bottom,this.i++}line(e,t,i){let r=[];ms(this.cursor,r,t.from),i.length&&(r=r.concat(i));let s=this.gutter.config.lineMarker(e,t,r);s&&r.unshift(s);let o=this.gutter;r.length==0&&!o.config.renderEmptyElements||this.addElement(e,t,r)}widget(e,t){let i=this.gutter.config.widgetMarker(e,t.widget,t),r=i?[i]:null;for(let s of e.state.facet(sd)){let o=s(e,t.widget,t);o&&(r||(r=[])).push(o)}r&&this.addElement(e,t,r)}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let t=e.elements.pop();e.dom.removeChild(t.dom),t.destroy()}}}class sl{constructor(e,t){this.view=e,this.config=t,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let i in t.domEventHandlers)this.dom.addEventListener(i,r=>{let s=r.target,o;if(s!=this.dom&&this.dom.contains(s)){for(;s.parentNode!=this.dom;)s=s.parentNode;let a=s.getBoundingClientRect();o=(a.top+a.bottom)/2}else o=r.clientY;let l=e.lineBlockAtHeight(o-e.documentTop);t.domEventHandlers[i](e,l,r)&&r.preventDefault()});this.markers=rl(t.markers(e)),t.initialSpacer&&(this.spacer=new fh(e,0,0,[t.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(e){let t=this.markers;if(this.markers=rl(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let r=this.config.updateSpacer(this.spacer.markers[0],e);r!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[r])}let i=e.view.viewport;return!W.eq(this.markers,t,i.from,i.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}}class fh{constructor(e,t,i,r){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(e,t,i,r)}update(e,t,i,r){this.height!=t&&(this.height=t,this.dom.style.height=t+"px"),this.above!=i&&(this.dom.style.marginTop=(this.above=i)?i+"px":""),cd(this.markers,r)||this.setMarkers(e,r)}setMarkers(e,t){let i="cm-gutterElement",r=this.dom.firstChild;for(let s=0,o=0;;){let l=o,a=ss(l,a,h)||o(l,a,h):o}return i}})}});class kr extends St{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}}function Sr(n,e){return n.state.facet(jt).formatNumber(e,n.state)}const dd=Ai.compute([jt],n=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(e){return e.state.facet(fd)},lineMarker(e,t,i){return i.some(r=>r.toDOM)?null:new kr(Sr(e,e.state.doc.lineAt(t.from).number))},widgetMarker:(e,t,i)=>{for(let r of e.state.facet(ud)){let s=r(e,t,i);if(s)return s}return null},lineMarkerChange:e=>e.startState.facet(jt)!=e.state.facet(jt),initialSpacer(e){return new kr(Sr(e,ol(e.state.doc.lines)))},updateSpacer(e,t){let i=Sr(t.view,ol(t.view.state.doc.lines));return i==e.number?e:new kr(i)},domEventHandlers:n.facet(jt).domEventHandlers,side:"before"}));function pd(n={}){return[jt.of(n),ch(),dd]}function ol(n){let e=9;for(;e{throw new Error("This node type doesn't define a deserialize function")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=Se.match(e)),t=>{let i=e(t);return i===void 0?null:[this,i]}}}V.closedBy=new V({deserialize:n=>n.split(" ")});V.openedBy=new V({deserialize:n=>n.split(" ")});V.group=new V({deserialize:n=>n.split(" ")});V.isolate=new V({deserialize:n=>{if(n&&n!="rtl"&&n!="ltr"&&n!="auto")throw new RangeError("Invalid value for isolate: "+n);return n||"auto"}});V.contextHash=new V({perNode:!0});V.lookAhead=new V({perNode:!0});V.mounted=new V({perNode:!0});class Ti{constructor(e,t,i,r=!1){this.tree=e,this.overlay=t,this.parser=i,this.bracketed=r}static get(e){return e&&e.props&&e.props[V.mounted.id]}}const yd=Object.create(null);class Se{constructor(e,t,i,r=0){this.name=e,this.props=t,this.id=i,this.flags=r}static define(e){let t=e.props&&e.props.length?Object.create(null):yd,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),r=new Se(e.name||"",t,e.id,i);if(e.props){for(let s of e.props)if(Array.isArray(s)||(s=s(r)),s){if(s[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");t[s[0].id]=s[1]}}return r}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let t=this.prop(V.group);return t?t.indexOf(e)>-1:!1}return this.id==e}static match(e){let t=Object.create(null);for(let i in e)for(let r of i.split(" "))t[r]=e[i];return i=>{for(let r=i.prop(V.group),s=-1;s<(r?r.length:0);s++){let o=t[s<0?i.name:r[s]];if(o)return o}}}}Se.none=new Se("",Object.create(null),0,8);class Us{constructor(e){this.types=e;for(let t=0;t0;for(let a=this.cursor(o|ie.IncludeAnonymous);;){let h=!1;if(a.from<=s&&a.to>=r&&(!l&&a.type.isAnonymous||t(a)!==!1)){if(a.firstChild())continue;h=!0}for(;h&&i&&(l||!a.type.isAnonymous)&&i(a),!a.nextSibling();){if(!a.parent())return;h=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let t in this.props)e.push([+t,this.props[t]]);return e}balance(e={}){return this.children.length<=8?this:js(Se.none,this.children,this.positions,0,this.children.length,0,this.length,(t,i,r)=>new Q(this.type,t,i,r,this.propValues),e.makeTree||((t,i,r)=>new Q(Se.none,t,i,r)))}static build(e){return vd(e)}}Q.empty=new Q(Se.none,[],[],0);class qs{constructor(e,t){this.buffer=e,this.index=t}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new qs(this.buffer,this.index)}}class Ct{constructor(e,t,i){this.buffer=e,this.length=t,this.set=i}get type(){return Se.none}toString(){let e=[];for(let t=0;t0));a=o[a+3]);return l}slice(e,t,i){let r=this.buffer,s=new Uint16Array(t-e),o=0;for(let l=e,a=0;l=e&&te;case 1:return t<=e&&i>e;case 2:return i>e;case 4:return!0}}function Ii(n,e,t,i){for(var r;n.from==n.to||(t<1?n.from>=e:n.from>e)||(t>-1?n.to<=e:n.to0?l.length:-1;e!=h;e+=t){let c=l[e],f=a[e]+o.from,u;if(!(!(s&ie.EnterBracketed&&c instanceof Q&&(u=Ti.get(c))&&!u.overlay&&u.bracketed&&i>=f&&i<=f+c.length)&&!uh(r,i,f,f+c.length))){if(c instanceof Ct){if(s&ie.ExcludeBuffers)continue;let d=c.findChild(0,c.buffer.length,t,i-f,r);if(d>-1)return new yt(new bd(o,c,e,f),null,d)}else if(s&ie.IncludeAnonymous||!c.type.isAnonymous||Ks(c)){let d;if(!(s&ie.IgnoreMounts)&&(d=Ti.get(c))&&!d.overlay)return new Fe(d.tree,f,e,o);let p=new Fe(c,f,e,o);return s&ie.IncludeAnonymous||!p.type.isAnonymous?p:p.nextChild(t<0?c.children.length-1:0,t,i,r,s)}}}if(s&ie.IncludeAnonymous||!o.type.isAnonymous||(o.index>=0?e=o.index+t:e=t<0?-1:o._parent._tree.children.length,o=o._parent,!o))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}prop(e){return this._tree.prop(e)}enter(e,t,i=0){let r;if(!(i&ie.IgnoreOverlays)&&(r=Ti.get(this._tree))&&r.overlay){let s=e-this.from,o=i&ie.EnterBracketed&&r.bracketed;for(let{from:l,to:a}of r.overlay)if((t>0||o?l<=s:l=s:a>s))return new Fe(r.tree,r.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,t,i)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}}function al(n,e,t,i){let r=n.cursor(),s=[];if(!r.firstChild())return s;if(t!=null){for(let o=!1;!o;)if(o=r.type.is(t),!r.nextSibling())return s}for(;;){if(i!=null&&r.type.is(i))return s;if(r.type.is(e)&&s.push(r.node),!r.nextSibling())return i==null?s:[]}}function gs(n,e,t=e.length-1){for(let i=n;t>=0;i=i.parent){if(!i)return!1;if(!i.type.isAnonymous){if(e[t]&&e[t]!=i.name)return!1;t--}}return!0}class bd{constructor(e,t,i,r){this.parent=e,this.buffer=t,this.index=i,this.start=r}}class yt extends dh{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,t,i){super(),this.context=e,this._parent=t,this.index=i,this.type=e.buffer.set.types[e.buffer.buffer[i]]}child(e,t,i){let{buffer:r}=this.context,s=r.findChild(this.index+4,r.buffer[this.index+3],e,t-this.context.start,i);return s<0?null:new yt(this.context,this,s)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}prop(e){return this.type.prop(e)}enter(e,t,i=0){if(i&ie.ExcludeBuffers)return null;let{buffer:r}=this.context,s=r.findChild(this.index+4,r.buffer[this.index+3],t>0?1:-1,e-this.context.start,t);return s<0?null:new yt(this.context,this,s)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,t=e.buffer[this.index+3];return t<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new yt(this.context,this._parent,t):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,t=this._parent?this._parent.index+4:0;return this.index==t?this.externalSibling(-1):new yt(this.context,this._parent,e.findChild(t,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],t=[],{buffer:i}=this.context,r=this.index+4,s=i.buffer[this.index+3];if(s>r){let o=i.buffer[this.index+1];e.push(i.slice(r,s,o)),t.push(0)}return new Q(this.type,e,t,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}}function ph(n){if(!n.length)return null;let e=0,t=n[0];for(let s=1;st.from||o.to=e){let l=new Fe(o.tree,o.overlay[0].from+s.from,-1,s);(r||(r=[i])).push(Ii(l,e,t,!1))}}return r?ph(r):i}class ys{get name(){return this.type.name}constructor(e,t=0){if(this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,this.mode=t&~ie.EnterBracketed,e instanceof Fe)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let i=e._parent;i;i=i._parent)this.stack.unshift(i.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,t){this.index=e;let{start:i,buffer:r}=this.buffer;return this.type=t||r.set.types[r.buffer[e]],this.from=i+r.buffer[e+1],this.to=i+r.buffer[e+2],!0}yield(e){return e?e instanceof Fe?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,t,i){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,t,i,this.mode));let{buffer:r}=this.buffer,s=r.findChild(this.index+4,r.buffer[this.index+3],e,t-this.buffer.start,i);return s<0?!1:(this.stack.push(this.index),this.yieldBuf(s))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,t,i=this.mode){return this.buffer?i&ie.ExcludeBuffers?!1:this.enterChild(1,e,t):this.yield(this._tree.enter(e,t,i))}parent(){if(!this.buffer)return this.yieldNode(this.mode&ie.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&ie.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:t}=this.buffer,i=this.stack.length-1;if(e<0){let r=i<0?0:this.stack[i]+4;if(this.index!=r)return this.yieldBuf(t.findChild(r,this.index,-1,0,4))}else{let r=t.buffer[this.index+3];if(r<(i<0?t.buffer.length:t.buffer[this.stack[i]+3]))return this.yieldBuf(r)}return i<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let t,i,{buffer:r}=this;if(r){if(e>0){if(this.index-1)for(let s=t+e,o=e<0?-1:i._tree.children.length;s!=o;s+=e){let l=i._tree.children[s];if(this.mode&ie.IncludeAnonymous||l instanceof Ct||!l.type.isAnonymous||Ks(l))return!1}return!0}move(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,t=0){for(;(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to=0;){for(let o=e;o;o=o._parent)if(o.index==r){if(r==this.index)return o;t=o,i=s+1;break e}r=this.stack[--s]}for(let r=i;r=0;s--){if(s<0)return gs(this._tree,e,r);let o=i[t.buffer[this.stack[s]]];if(!o.isAnonymous){if(e[r]&&e[r]!=o.name)return!1;r--}}return!0}}function Ks(n){return n.children.some(e=>e instanceof Ct||!e.type.isAnonymous||Ks(e))}function vd(n){var e;let{buffer:t,nodeSet:i,maxBufferLength:r=md,reused:s=[],minRepeatType:o=i.types.length}=n,l=Array.isArray(t)?new qs(t,t.length):t,a=i.types,h=0,c=0;function f(M,L,E,F,$,S){let{id:k,start:v,end:A,size:N}=l,q=c,H=h;if(N<0)if(l.next(),N==-1){let ae=s[k];E.push(ae),F.push(v-M);return}else if(N==-3){h=k;return}else if(N==-4){c=k;return}else throw new RangeError(`Unrecognized record size: ${N}`);let K=a[k],fe,oe,Ve=v-M;if(A-v<=r&&(oe=g(l.pos-L,$))){let ae=new Uint16Array(oe.size-oe.skip),_=l.pos-oe.size,J=ae.length;for(;l.pos>_;)J=y(oe.start,ae,J);fe=new Ct(ae,A-oe.start,i),Ve=oe.start-M}else{let ae=l.pos-N;l.next();let _=[],J=[],Ce=k>=o?k:-1,Ae=0,Te=A;for(;l.pos>ae;)Ce>=0&&l.id==Ce&&l.size>=0?(l.end<=Te-r&&(p(_,J,v,Ae,l.end,Te,Ce,q,H),Ae=_.length,Te=l.end),l.next()):S>2500?u(v,ae,_,J):f(v,ae,_,J,Ce,S+1);if(Ce>=0&&Ae>0&&Ae<_.length&&p(_,J,v,Ae,v,Te,Ce,q,H),_.reverse(),J.reverse(),Ce>-1&&Ae>0){let Mt=d(K,H);fe=js(K,_,J,0,_.length,0,A-v,Mt,Mt)}else fe=m(K,_,J,A-v,q-A,H)}E.push(fe),F.push(Ve)}function u(M,L,E,F){let $=[],S=0,k=-1;for(;l.pos>L;){let{id:v,start:A,end:N,size:q}=l;if(q>4)l.next();else{if(k>-1&&A=0;N-=3)v[q++]=$[N],v[q++]=$[N+1]-A,v[q++]=$[N+2]-A,v[q++]=q;E.push(new Ct(v,$[2]-A,i)),F.push(A-M)}}function d(M,L){return(E,F,$)=>{let S=0,k=E.length-1,v,A;if(k>=0&&(v=E[k])instanceof Q){if(!k&&v.type==M&&v.length==$)return v;(A=v.prop(V.lookAhead))&&(S=F[k]+v.length+A)}return m(M,E,F,$,S,L)}}function p(M,L,E,F,$,S,k,v,A){let N=[],q=[];for(;M.length>F;)N.push(M.pop()),q.push(L.pop()+E-$);M.push(m(i.types[k],N,q,S-$,v-S,A)),L.push($-E)}function m(M,L,E,F,$,S,k){if(S){let v=[V.contextHash,S];k=k?[v].concat(k):[v]}if($>25){let v=[V.lookAhead,$];k=k?[v].concat(k):[v]}return new Q(M,L,E,F,k)}function g(M,L){let E=l.fork(),F=0,$=0,S=0,k=E.end-r,v={size:0,start:0,skip:0};e:for(let A=E.pos-M;E.pos>A;){let N=E.size;if(E.id==L&&N>=0){v.size=F,v.start=$,v.skip=S,S+=4,F+=4,E.next();continue}let q=E.pos-N;if(N<0||q=o?4:0,K=E.start;for(E.next();E.pos>q;){if(E.size<0)if(E.size==-3||E.size==-4)H+=4;else break e;else E.id>=o&&(H+=4);E.next()}$=K,F+=N,S+=H}return(L<0||F==M)&&(v.size=F,v.start=$,v.skip=S),v.size>4?v:void 0}function y(M,L,E){let{id:F,start:$,end:S,size:k}=l;if(l.next(),k>=0&&F4){let A=l.pos-(k-4);for(;l.pos>A;)E=y(M,L,E)}L[--E]=v,L[--E]=S-M,L[--E]=$-M,L[--E]=F}else k==-3?h=F:k==-4&&(c=F);return E}let w=[],T=[];for(;l.pos>0;)f(n.start||0,n.bufferStart||0,w,T,-1,0);let D=(e=n.length)!==null&&e!==void 0?e:w.length?T[0]+w[0].length:0;return new Q(a[n.topID],w.reverse(),T.reverse(),D)}const hl=new WeakMap;function Sn(n,e){if(!n.isAnonymous||e instanceof Ct||e.type!=n)return 1;let t=hl.get(e);if(t==null){t=1;for(let i of e.children){if(i.type!=n||!(i instanceof Q)){t=1;break}t+=Sn(n,i)}hl.set(e,t)}return t}function js(n,e,t,i,r,s,o,l,a){let h=0;for(let p=i;p=c)break;L+=E}if(T==D+1){if(L>c){let E=p[D];d(E.children,E.positions,0,E.children.length,m[D]+w);continue}f.push(p[D])}else{let E=m[T-1]+p[T-1].length-M;f.push(js(n,p,m,D,T,M,E,null,a))}u.push(M+w-s)}}return d(e,t,i,r,0),(l||a)(f,u,o)}class Ft{constructor(e,t,i,r,s=!1,o=!1){this.from=e,this.to=t,this.tree=i,this.offset=r,this.open=(s?1:0)|(o?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,t=[],i=!1){let r=[new Ft(0,e.length,e,0,!1,i)];for(let s of t)s.to>e.length&&r.push(s);return r}static applyChanges(e,t,i=128){if(!t.length)return e;let r=[],s=1,o=e.length?e[0]:null;for(let l=0,a=0,h=0;;l++){let c=l=i)for(;o&&o.from=u.from||f<=u.to||h){let d=Math.max(u.from,a)-h,p=Math.min(u.to,f)-h;u=d>=p?null:new Ft(d,p,u.tree,u.offset+h,l>0,!!c)}if(u&&r.push(u),o.to>f)break;o=snew Cr(r.from,r.to)):[new Cr(0,0)]:[new Cr(0,e.length)],this.createParse(e,t||[],i)}parse(e,t,i){let r=this.startParse(e,t,i);for(;;){let s=r.advance();if(s)return s}}}class kd{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,t){return this.string.slice(e,t)}}new V({perNode:!0});let Sd=0;class Be{constructor(e,t,i,r){this.name=e,this.set=t,this.base=i,this.modified=r,this.id=Sd++}toString(){let{name:e}=this;for(let t of this.modified)t.name&&(e=`${t.name}(${e})`);return e}static define(e,t){let i=typeof e=="string"?e:"?";if(e instanceof Be&&(t=e),t!=null&&t.base)throw new Error("Can not derive from a modified tag");let r=new Be(i,[],null,[]);if(r.set.push(r),t)for(let s of t.set)r.set.push(s);return r}static defineModifier(e){let t=new _n(e);return i=>i.modified.indexOf(t)>-1?i:_n.get(i.base||i,i.modified.concat(t).sort((r,s)=>r.id-s.id))}}let Cd=0;class _n{constructor(e){this.name=e,this.instances=[],this.id=Cd++}static get(e,t){if(!t.length)return e;let i=t[0].instances.find(l=>l.base==e&&Ad(t,l.modified));if(i)return i;let r=[],s=new Be(e.name,r,e,t);for(let l of t)l.instances.push(s);let o=Td(t);for(let l of e.set)if(!l.modified.length)for(let a of o)r.push(_n.get(l,a));return s}}function Ad(n,e){return n.length==e.length&&n.every((t,i)=>t==e[i])}function Td(n){let e=[[]];for(let t=0;ti.length-t.length)}function Md(n){let e=Object.create(null);for(let t in n){let i=n[t];Array.isArray(i)||(i=[i]);for(let r of t.split(" "))if(r){let s=[],o=2,l=r;for(let f=0;;){if(l=="..."&&f>0&&f+3==r.length){o=1;break}let u=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(l);if(!u)throw new RangeError("Invalid path: "+r);if(s.push(u[0]=="*"?"":u[0][0]=='"'?JSON.parse(u[0]):u[0]),f+=u[0].length,f==r.length)break;let d=r[f++];if(f==r.length&&d=="!"){o=0;break}if(d!="/")throw new RangeError("Invalid path: "+r);l=r.slice(f)}let a=s.length-1,h=s[a];if(!h)throw new RangeError("Invalid path: "+r);let c=new Pi(i,o,a>0?s.slice(0,a):null);e[h]=c.sort(e[h])}}return gh.add(e)}const gh=new V({combine(n,e){let t,i,r;for(;n||e;){if(!n||e&&n.depth>=e.depth?(r=e,e=e.next):(r=n,n=n.next),t&&t.mode==r.mode&&!r.context&&!t.context)continue;let s=new Pi(r.tags,r.mode,r.context);t?t.next=s:i=s,t=s}return i}});class Pi{constructor(e,t,i,r){this.tags=e,this.mode=t,this.context=i,this.next=r}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth{let o=r;for(let l of s)for(let a of l.set){let h=t[a.id];if(h){o=o?o+" "+h:h;break}}return o},scope:i}}function Dd(n,e){let t=null;for(let i of n){let r=i.style(e);r&&(t=t?t+" "+r:r)}return t}function Ed(n,e,t,i=0,r=n.length){let s=new Od(i,Array.isArray(e)?e:[e],t);s.highlightRange(n.cursor(),i,r,"",s.highlighters),s.flush(r)}class Od{constructor(e,t,i){this.at=e,this.highlighters=t,this.span=i,this.class=""}startSpan(e,t){t!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=t)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,t,i,r,s){let{type:o,from:l,to:a}=e;if(l>=i||a<=t)return;o.isTop&&(s=this.highlighters.filter(d=>!d.scope||d.scope(o)));let h=r,c=Ld(e)||Pi.empty,f=Dd(s,c.tags);if(f&&(h&&(h+=" "),h+=f,c.mode==1&&(r+=(r?" ":"")+f)),this.startSpan(Math.max(t,l),h),c.opaque)return;let u=e.tree&&e.tree.prop(V.mounted);if(u&&u.overlay){let d=e.node.enter(u.overlay[0].from+l,1),p=this.highlighters.filter(g=>!g.scope||g.scope(u.tree.type)),m=e.firstChild();for(let g=0,y=l;;g++){let w=g=T||!e.nextSibling())););if(!w||T>i)break;y=w.to+l,y>t&&(this.highlightRange(d.cursor(),Math.max(t,w.from+l),Math.min(i,y),"",p),this.startSpan(Math.min(i,y),h))}m&&e.parent()}else if(e.firstChild()){u&&(r="");do if(!(e.to<=t)){if(e.from>=i)break;this.highlightRange(e,t,i,r,s),this.startSpan(Math.min(i,e.to),h)}while(e.nextSibling());e.parent()}}}function Ld(n){let e=n.type.prop(gh);for(;e&&e.context&&!n.matchContext(e.context);)e=e.next;return e||null}const C=Be.define,fn=C(),ut=C(),cl=C(ut),fl=C(ut),dt=C(),un=C(dt),Ar=C(dt),Je=C(),Dt=C(Je),Ye=C(),Xe=C(),bs=C(),di=C(bs),dn=C(),x={comment:fn,lineComment:C(fn),blockComment:C(fn),docComment:C(fn),name:ut,variableName:C(ut),typeName:cl,tagName:C(cl),propertyName:fl,attributeName:C(fl),className:C(ut),labelName:C(ut),namespace:C(ut),macroName:C(ut),literal:dt,string:un,docString:C(un),character:C(un),attributeValue:C(un),number:Ar,integer:C(Ar),float:C(Ar),bool:C(dt),regexp:C(dt),escape:C(dt),color:C(dt),url:C(dt),keyword:Ye,self:C(Ye),null:C(Ye),atom:C(Ye),unit:C(Ye),modifier:C(Ye),operatorKeyword:C(Ye),controlKeyword:C(Ye),definitionKeyword:C(Ye),moduleKeyword:C(Ye),operator:Xe,derefOperator:C(Xe),arithmeticOperator:C(Xe),logicOperator:C(Xe),bitwiseOperator:C(Xe),compareOperator:C(Xe),updateOperator:C(Xe),definitionOperator:C(Xe),typeOperator:C(Xe),controlOperator:C(Xe),punctuation:bs,separator:C(bs),bracket:di,angleBracket:C(di),squareBracket:C(di),paren:C(di),brace:C(di),content:Je,heading:Dt,heading1:C(Dt),heading2:C(Dt),heading3:C(Dt),heading4:C(Dt),heading5:C(Dt),heading6:C(Dt),contentSeparator:C(Je),list:C(Je),quote:C(Je),emphasis:C(Je),strong:C(Je),link:C(Je),monospace:C(Je),strikethrough:C(Je),inserted:C(),deleted:C(),changed:C(),invalid:C(),meta:dn,documentMeta:C(dn),annotation:C(dn),processingInstruction:C(dn),definition:Be.defineModifier("definition"),constant:Be.defineModifier("constant"),function:Be.defineModifier("function"),standard:Be.defineModifier("standard"),local:Be.defineModifier("local"),special:Be.defineModifier("special")};for(let n in x){let e=x[n];e instanceof Be&&(e.name=n)}yh([{tag:x.link,class:"tok-link"},{tag:x.heading,class:"tok-heading"},{tag:x.emphasis,class:"tok-emphasis"},{tag:x.strong,class:"tok-strong"},{tag:x.keyword,class:"tok-keyword"},{tag:x.atom,class:"tok-atom"},{tag:x.bool,class:"tok-bool"},{tag:x.url,class:"tok-url"},{tag:x.labelName,class:"tok-labelName"},{tag:x.inserted,class:"tok-inserted"},{tag:x.deleted,class:"tok-deleted"},{tag:x.literal,class:"tok-literal"},{tag:x.string,class:"tok-string"},{tag:x.number,class:"tok-number"},{tag:[x.regexp,x.escape,x.special(x.string)],class:"tok-string2"},{tag:x.variableName,class:"tok-variableName"},{tag:x.local(x.variableName),class:"tok-variableName tok-local"},{tag:x.definition(x.variableName),class:"tok-variableName tok-definition"},{tag:x.special(x.variableName),class:"tok-variableName2"},{tag:x.definition(x.propertyName),class:"tok-propertyName tok-definition"},{tag:x.typeName,class:"tok-typeName"},{tag:x.namespace,class:"tok-namespace"},{tag:x.className,class:"tok-className"},{tag:x.macroName,class:"tok-macroName"},{tag:x.propertyName,class:"tok-propertyName"},{tag:x.operator,class:"tok-operator"},{tag:x.comment,class:"tok-comment"},{tag:x.meta,class:"tok-meta"},{tag:x.invalid,class:"tok-invalid"},{tag:x.punctuation,class:"tok-punctuation"}]);var Tr;const Gt=new V;function Bd(n){return R.define({combine:n?e=>e.concat(n):void 0})}const Rd=new V;class $e{constructor(e,t,i=[],r=""){this.data=e,this.name=r,U.prototype.hasOwnProperty("tree")||Object.defineProperty(U.prototype,"tree",{get(){return Oe(this)}}),this.parser=t,this.extension=[li.of(this),U.languageData.of((s,o,l)=>{let a=ul(s,o,l),h=a.type.prop(Gt);if(!h)return[];let c=s.facet(h),f=a.type.prop(Rd);if(f){let u=a.resolve(o-a.from,l);for(let d of f)if(d.test(u,s)){let p=s.facet(d.facet);return d.type=="replace"?p:p.concat(c)}}return c})].concat(i)}isActiveAt(e,t,i=-1){return ul(e,t,i).type.prop(Gt)==this.data}findRegions(e){let t=e.facet(li);if((t==null?void 0:t.data)==this.data)return[{from:0,to:e.doc.length}];if(!t||!t.allowsNesting)return[];let i=[],r=(s,o)=>{if(s.prop(Gt)==this.data){i.push({from:o,to:o+s.length});return}let l=s.prop(V.mounted);if(l){if(l.tree.prop(Gt)==this.data){if(l.overlay)for(let a of l.overlay)i.push({from:a.from+o,to:a.to+o});else i.push({from:o,to:o+s.length});return}else if(l.overlay){let a=i.length;if(r(l.tree,l.overlay[0].from+o),i.length>a)return}}for(let a=0;a=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-i,t-i)}}let pi=null;class si{constructor(e,t,i=[],r,s,o,l,a){this.parser=e,this.state=t,this.fragments=i,this.tree=r,this.treeLen=s,this.viewport=o,this.skipped=l,this.scheduleOn=a,this.parse=null,this.tempSkipped=[]}static create(e,t,i){return new si(e,t,[],Q.empty,0,i,[],null)}startParse(){return this.parser.startParse(new Id(this.state.doc),this.fragments)}work(e,t){return t!=null&&t>=this.state.doc.length&&(t=void 0),this.tree!=Q.empty&&this.isDone(t??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var i;if(typeof e=="number"){let r=Date.now()+e;e=()=>Date.now()>r}for(this.parse||(this.parse=this.startParse()),t!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&t=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(t=this.parse.advance()););}),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(Ft.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=pi;pi=this;try{return e()}finally{pi=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=dl(e,t.from,t.to);return e}changes(e,t){let{fragments:i,tree:r,treeLen:s,viewport:o,skipped:l}=this;if(this.takeTree(),!e.empty){let a=[];if(e.iterChangedRanges((h,c,f,u)=>a.push({fromA:h,toA:c,fromB:f,toB:u})),i=Ft.applyChanges(i,a),r=Q.empty,s=0,o={from:e.mapPos(o.from,-1),to:e.mapPos(o.to,1)},this.skipped.length){l=[];for(let h of this.skipped){let c=e.mapPos(h.from,1),f=e.mapPos(h.to,-1);ce.from&&(this.fragments=dl(this.fragments,r,s),this.skipped.splice(i--,1))}return this.skipped.length>=t?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends mh{createParse(t,i,r){let s=r[0].from,o=r[r.length-1].to;return{parsedPos:s,advance(){let a=pi;if(a){for(let h of r)a.tempSkipped.push(h);e&&(a.scheduleOn=a.scheduleOn?Promise.all([a.scheduleOn,e]):e)}return this.parsedPos=o,new Q(Se.none,[],[],o-s)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&t[0].from==0&&t[0].to>=e}static get(){return pi}}function dl(n,e,t){return Ft.applyChanges(n,[{fromA:e,toA:t,fromB:e,toB:t}])}class oi{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let t=this.context.changes(e.changes,e.state),i=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),t.viewport.to);return t.work(20,i)||t.takeTree(),new oi(t)}static init(e){let t=Math.min(3e3,e.doc.length),i=si.create(e.facet(li).parser,e,{from:0,to:t});return i.work(20,t)||i.takeTree(),new oi(i)}}$e.state=qe.define({create:oi.init,update(n,e){for(let t of e.effects)if(t.is($e.setState))return t.value;return e.startState.facet(li)!=e.state.facet(li)?oi.init(e.state):n.apply(e)}});let bh=n=>{let e=setTimeout(()=>n(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(bh=n=>{let e=-1,t=setTimeout(()=>{e=requestIdleCallback(n,{timeout:400})},100);return()=>e<0?clearTimeout(t):cancelIdleCallback(e)});const Mr=typeof navigator<"u"&&(!((Tr=navigator.scheduling)===null||Tr===void 0)&&Tr.isInputPending)?()=>navigator.scheduling.isInputPending():null,Pd=_e.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field($e.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field($e.state);(t.tree!=t.context.tree||!t.context.isDone(e.doc.length))&&(this.working=bh(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEndr+1e3,a=s.context.work(()=>Mr&&Mr()||Date.now()>o,r+(l?0:1e5));this.chunkBudget-=Date.now()-t,(a||this.chunkBudget<=0)&&(s.context.takeTree(),this.view.dispatch({effects:$e.setState.of(new oi(s.context))})),this.chunkBudget>0&&!(a&&!l)&&this.scheduleWork(),this.checkAsyncSchedule(s.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(t=>De(this.view.state,t)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),li=R.define({combine(n){return n.length?n[0]:null},enables:n=>[$e.state,Pd,I.contentAttributes.compute([n],e=>{let t=e.facet(n);return t&&t.name?{"data-language":t.name}:{}})]}),Nd=R.define(),Gs=R.define({combine:n=>{if(!n.length)return" ";let e=n[0];if(!e||/\S/.test(e)||Array.from(e).some(t=>t!=e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(n[0]));return e}});function $t(n){let e=n.facet(Gs);return e.charCodeAt(0)==9?n.tabSize*e.length:e.length}function Ni(n,e){let t="",i=n.tabSize,r=n.facet(Gs)[0];if(r==" "){for(;e>=i;)t+=" ",e-=i;r=" "}for(let s=0;s=e?Fd(n,t,e):null}class Qn{constructor(e,t={}){this.state=e,this.options=t,this.unit=$t(e)}lineAt(e,t=1){let i=this.state.doc.lineAt(e),{simulateBreak:r,simulateDoubleBreak:s}=this.options;return r!=null&&r>=i.from&&r<=i.to?s&&r==e?{text:"",from:e}:(t<0?r-1&&(s+=o-this.countColumn(i,i.search(/\S|$/))),s}countColumn(e,t=e.length){return qn(e,this.state.tabSize,t)}lineIndent(e,t=1){let{text:i,from:r}=this.lineAt(e,t),s=this.options.overrideIndentation;if(s){let o=s(r);if(o>-1)return o}return this.countColumn(i,i.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}}const wh=new V;function Fd(n,e,t){let i=e.resolveStack(t),r=e.resolveInner(t,-1).resolve(t,0).enterUnfinishedNodesBefore(t);if(r!=i.node){let s=[];for(let o=r;o&&!(o.fromi.node.to||o.from==i.node.from&&o.type==i.node.type);o=o.parent)s.push(o);for(let o=s.length-1;o>=0;o--)i={node:s[o],next:i}}return xh(i,n,t)}function xh(n,e,t){for(let i=n;i;i=i.next){let r=Wd(i.node);if(r)return r(Xs.create(e,t,i))}return 0}function _d(n){return n.pos==n.options.simulateBreak&&n.options.simulateDoubleBreak}function Wd(n){let e=n.type.prop(wh);if(e)return e;let t=n.firstChild,i;if(t&&(i=t.type.prop(V.closedBy))){let r=n.lastChild,s=r&&i.indexOf(r.name)>-1;return o=>$d(o,!0,1,void 0,s&&!_d(o)?r.from:void 0)}return n.parent==null?Vd:null}function Vd(){return 0}class Xs extends Qn{constructor(e,t,i){super(e.state,e.options),this.base=e,this.pos=t,this.context=i}get node(){return this.context.node}static create(e,t,i){return new Xs(e,t,i)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let t=this.state.doc.lineAt(e.from);for(;;){let i=e.resolve(t.from);for(;i.parent&&i.parent.from==i.from;)i=i.parent;if(Hd(i,e))break;t=this.state.doc.lineAt(i.from)}return this.lineIndent(t.from)}continue(){return xh(this.context.next,this.base,this.pos)}}function Hd(n,e){for(let t=e;t;t=t.parent)if(n==t)return!0;return!1}function zd(n){let e=n.node,t=e.childAfter(e.from),i=e.lastChild;if(!t)return null;let r=n.options.simulateBreak,s=n.state.doc.lineAt(t.from),o=r==null||r<=s.from?s.to:Math.min(s.to,r);for(let l=t.to;;){let a=e.childAfter(l);if(!a||a==i)return null;if(!a.type.isSkipped){if(a.from>=o)return null;let h=/^ */.exec(s.text.slice(t.to-s.from))[0].length;return{from:t.from,to:t.to+h}}l=a.to}}function $d(n,e,t,i,r){let s=n.textAfter,o=s.match(/^\s*/)[0].length,l=i&&s.slice(o,o+i.length)==i||r==n.pos+o,a=zd(n);return a?l?n.column(a.from):n.column(a.to):n.baseIndent+(l?0:n.unit*t)}const Ud=200;function qd(){return U.transactionFilter.of(n=>{if(!n.docChanged||!n.isUserEvent("input.type")&&!n.isUserEvent("input.complete"))return n;let e=n.startState.languageDataAt("indentOnInput",n.startState.selection.main.head);if(!e.length)return n;let t=n.newDoc,{head:i}=n.newSelection.main,r=t.lineAt(i);if(i>r.from+Ud)return n;let s=t.sliceString(r.from,i);if(!e.some(h=>h.test(s)))return n;let{state:o}=n,l=-1,a=[];for(let{head:h}of o.selection.ranges){let c=o.doc.lineAt(h);if(c.from==l)continue;l=c.from;let f=Ys(o,c.from);if(f==null)continue;let u=/^\s*/.exec(c.text)[0],d=Ni(o,f);u!=d&&a.push({from:c.from,to:c.from+u.length,insert:d})}return a.length?[n,{changes:a,sequential:!0}]:n})}class Zn{constructor(e,t){this.specs=e;let i;function r(l){let a=xt.newName();return(i||(i=Object.create(null)))["."+a]=l,a}const s=typeof t.all=="string"?t.all:t.all?r(t.all):void 0,o=t.scope;this.scope=o instanceof $e?l=>l.prop(Gt)==o.data:o?l=>l==o:void 0,this.style=yh(e.map(l=>({tag:l.tag,class:l.class||r(Object.assign({},l,{tag:null}))})),{all:s}).style,this.module=i?new xt(i):null,this.themeType=t.themeType}static define(e,t){return new Zn(e,t||{})}}const ws=R.define(),Kd=R.define({combine(n){return n.length?[n[0]]:null}});function Dr(n){let e=n.facet(ws);return e.length?e:n.facet(Kd)}function jd(n,e){let t=[Yd],i;return n instanceof Zn&&(n.module&&t.push(I.styleModule.of(n.module)),i=n.themeType),i?t.push(ws.computeN([I.darkTheme],r=>r.facet(I.darkTheme)==(i=="dark")?[n]:[])):t.push(ws.of(n)),t}class Gd{constructor(e){this.markCache=Object.create(null),this.tree=Oe(e.state),this.decorations=this.buildDeco(e,Dr(e.state)),this.decoratedTo=e.viewport.to}update(e){let t=Oe(e.state),i=Dr(e.state),r=i!=Dr(e.startState),{viewport:s}=e.view,o=e.changes.mapPos(this.decoratedTo,1);t.length=s.to?(this.decorations=this.decorations.map(e.changes),this.decoratedTo=o):(t!=this.tree||e.viewportChanged||r)&&(this.tree=t,this.decorations=this.buildDeco(e.view,i),this.decoratedTo=s.to)}buildDeco(e,t){if(!t||!this.tree.length)return Y.none;let i=new Di;for(let{from:r,to:s}of e.visibleRanges)Ed(this.tree,t,(o,l,a)=>{i.add(o,l,this.markCache[a]||(this.markCache[a]=Y.mark({class:a})))},r,s);return i.finish()}}const Yd=Wt.high(_e.fromClass(Gd,{decorations:n=>n.decorations})),Xd=I.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),vh=1e4,kh="()[]{}",Sh=R.define({combine(n){return Un(n,{afterCursor:!0,brackets:kh,maxScanDistance:vh,renderMatch:Zd})}}),Jd=Y.mark({class:"cm-matchingBracket"}),Qd=Y.mark({class:"cm-nonmatchingBracket"});function Zd(n){let e=[],t=n.matched?Jd:Qd;return e.push(t.range(n.start.from,n.start.to)),n.end&&e.push(t.range(n.end.from,n.end.to)),e}function pl(n){let e=[],t=n.facet(Sh);for(let i of n.selection.ranges){if(!i.empty)continue;let r=it(n,i.head,-1,t)||i.head>0&&it(n,i.head-1,1,t)||t.afterCursor&&(it(n,i.head,1,t)||i.headn.decorations}),tp=[ep,Xd];function ip(n={}){return[Sh.of(n),tp]}const np=new V;function xs(n,e,t){let i=n.prop(e<0?V.openedBy:V.closedBy);if(i)return i;if(n.name.length==1){let r=t.indexOf(n.name);if(r>-1&&r%2==(e<0?1:0))return[t[r+e]]}return null}function vs(n){let e=n.type.prop(np);return e?e(n.node):n}function it(n,e,t,i={}){let r=i.maxScanDistance||vh,s=i.brackets||kh,o=Oe(n),l=o.resolveInner(e,t);for(let a=l;a;a=a.parent){let h=xs(a.type,t,s);if(h&&a.from0?e>=c.from&&ec.from&&e<=c.to))return rp(n,e,t,a,c,h,s)}}return sp(n,e,t,o,l.type,r,s)}function rp(n,e,t,i,r,s,o){let l=i.parent,a={from:r.from,to:r.to},h=0,c=l==null?void 0:l.cursor();if(c&&(t<0?c.childBefore(i.from):c.childAfter(i.to)))do if(t<0?c.to<=i.from:c.from>=i.to){if(h==0&&s.indexOf(c.type.name)>-1&&c.from0)return null;let h={from:t<0?e-1:e,to:t>0?e+1:e},c=n.doc.iterRange(e,t>0?n.doc.length:0),f=0;for(let u=0;!c.next().done&&u<=s;){let d=c.value;t<0&&(u+=d.length);let p=e+u*t;for(let m=t>0?0:d.length-1,g=t>0?d.length:-1;m!=g;m+=t){let y=o.indexOf(d[m]);if(!(y<0||i.resolveInner(p+m,1).type!=r))if(y%2==0==t>0)f++;else{if(f==1)return{start:h,end:{from:p+m,to:p+m+1},matched:y>>1==a>>1};f--}}t>0&&(u+=d.length)}return c.done?{start:h,matched:!1}:null}function ml(n,e,t,i=0,r=0){e==null&&(e=n.search(/[^\s\u00a0]/),e==-1&&(e=n.length));let s=r;for(let o=i;o=this.string.length}sol(){return this.pos==0}peek(){return this.string.charAt(this.pos)||void 0}next(){if(this.post}eatSpace(){let e=this.pos;for(;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e}skipToEnd(){this.pos=this.string.length}skipTo(e){let t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0}backUp(e){this.pos-=e}column(){return this.lastColumnPosi?o.toLowerCase():o,s=this.string.substr(this.pos,e.length);return r(s)==r(e)?(t!==!1&&(this.pos+=e.length),!0):null}else{let r=this.string.slice(this.pos).match(e);return r&&r.index>0?null:(r&&t!==!1&&(this.pos+=r[0].length),r)}}current(){return this.string.slice(this.start,this.pos)}}function op(n){return{name:n.name||"",token:n.token,blankLine:n.blankLine||(()=>{}),startState:n.startState||(()=>!0),copyState:n.copyState||lp,indent:n.indent||(()=>null),languageData:n.languageData||{},tokenTable:n.tokenTable||Zs,mergeTokens:n.mergeTokens!==!1}}function lp(n){if(typeof n!="object")return n;let e={};for(let t in n){let i=n[t];e[t]=i instanceof Array?i.slice():i}return e}const gl=new WeakMap;class Js extends $e{constructor(e){let t=Bd(e.languageData),i=op(e),r,s=new class extends mh{createParse(o,l,a){return new hp(r,o,l,a)}};super(t,s,[],e.name),this.topNode=up(t,this),r=this,this.streamParser=i,this.stateAfter=new V({perNode:!0}),this.tokenTable=e.tokenTable?new Dh(i.tokenTable):fp}static define(e){return new Js(e)}getIndent(e){let t,{overrideIndentation:i}=e.options;i&&(t=gl.get(e.state),t!=null&&t1e4)return null;for(;s=i&&t+e.length<=r&&e.prop(n.stateAfter);if(s)return{state:n.streamParser.copyState(s),pos:t+e.length};for(let o=e.children.length-1;o>=0;o--){let l=e.children[o],a=t+e.positions[o],h=l instanceof Q&&a=e.length)return e;!r&&t==0&&e.type==n.topNode&&(r=!0);for(let s=e.children.length-1;s>=0;s--){let o=e.positions[s],l=e.children[s],a;if(ot&&Qs(n,s.tree,0-s.offset,t,l),h;if(a&&a.pos<=i&&(h=Ah(n,s.tree,t+s.offset,a.pos+s.offset,!1)))return{state:a.state,tree:h}}return{state:n.streamParser.startState(r?$t(r):4),tree:Q.empty}}class hp{constructor(e,t,i,r){this.lang=e,this.input=t,this.fragments=i,this.ranges=r,this.stoppedAt=null,this.chunks=[],this.chunkPos=[],this.chunk=[],this.chunkReused=void 0,this.rangeIndex=0,this.to=r[r.length-1].to;let s=si.get(),o=r[0].from,{state:l,tree:a}=ap(e,i,o,this.to,s==null?void 0:s.state);this.state=l,this.parsedPos=this.chunkStart=o+a.length;for(let h=0;hh.from<=s.viewport.from&&h.to>=s.viewport.from)&&(this.state=this.lang.streamParser.startState($t(s.state)),s.skipUntilInView(this.parsedPos,s.viewport.from),this.parsedPos=s.viewport.from),this.moveRangeIndex()}advance(){let e=si.get(),t=this.stoppedAt==null?this.to:Math.min(this.to,this.stoppedAt),i=Math.min(t,this.chunkStart+512);for(e&&(i=Math.min(i,e.viewport.to));this.parsedPos=t?this.finish():e&&this.parsedPos>=e.viewport.to?(e.skipUntilInView(this.parsedPos,t),this.finish()):null}stopAt(e){this.stoppedAt=e}lineAfter(e){let t=this.input.chunk(e);if(this.input.lineChunks)t==` +(function(){const e=document.createElement("link").relList;if(e&&e.supports&&e.supports("modulepreload"))return;for(const r of document.querySelectorAll('link[rel="modulepreload"]'))i(r);new MutationObserver(r=>{for(const s of r)if(s.type==="childList")for(const o of s.addedNodes)o.tagName==="LINK"&&o.rel==="modulepreload"&&i(o)}).observe(document,{childList:!0,subtree:!0});function t(r){const s={};return r.integrity&&(s.integrity=r.integrity),r.referrerPolicy&&(s.referrerPolicy=r.referrerPolicy),r.crossOrigin==="use-credentials"?s.credentials="include":r.crossOrigin==="anonymous"?s.credentials="omit":s.credentials="same-origin",s}function i(r){if(r.ep)return;r.ep=!0;const s=t(r);fetch(r.href,s)}})();let qr=[],ha=[];(()=>{let n="lc,34,7n,7,7b,19,,,,2,,2,,,20,b,1c,l,g,,2t,7,2,6,2,2,,4,z,,u,r,2j,b,1m,9,9,,o,4,,9,,3,,5,17,3,3b,f,,w,1j,,,,4,8,4,,3,7,a,2,t,,1m,,,,2,4,8,,9,,a,2,q,,2,2,1l,,4,2,4,2,2,3,3,,u,2,3,,b,2,1l,,4,5,,2,4,,k,2,m,6,,,1m,,,2,,4,8,,7,3,a,2,u,,1n,,,,c,,9,,14,,3,,1l,3,5,3,,4,7,2,b,2,t,,1m,,2,,2,,3,,5,2,7,2,b,2,s,2,1l,2,,,2,4,8,,9,,a,2,t,,20,,4,,2,3,,,8,,29,,2,7,c,8,2q,,2,9,b,6,22,2,r,,,,,,1j,e,,5,,2,5,b,,10,9,,2u,4,,6,,2,2,2,p,2,4,3,g,4,d,,2,2,6,,f,,jj,3,qa,3,t,3,t,2,u,2,1s,2,,7,8,,2,b,9,,19,3,3b,2,y,,3a,3,4,2,9,,6,3,63,2,2,,1m,,,7,,,,,2,8,6,a,2,,1c,h,1r,4,1c,7,,,5,,14,9,c,2,w,4,2,2,,3,1k,,,2,3,,,3,1m,8,2,2,48,3,,d,,7,4,,6,,3,2,5i,1m,,5,ek,,5f,x,2da,3,3x,,2o,w,fe,6,2x,2,n9w,4,,a,w,2,28,2,7k,,3,,4,,p,2,5,,47,2,q,i,d,,12,8,p,b,1a,3,1c,,2,4,2,2,13,,1v,6,2,2,2,2,c,,8,,1b,,1f,,,3,2,2,5,2,,,16,2,8,,6m,,2,,4,,fn4,,kh,g,g,g,a6,2,gt,,6a,,45,5,1ae,3,,2,5,4,14,3,4,,4l,2,fx,4,ar,2,49,b,4w,,1i,f,1k,3,1d,4,2,2,1x,3,10,5,,8,1q,,c,2,1g,9,a,4,2,,2n,3,2,,,2,6,,4g,,3,8,l,2,1l,2,,,,,m,,e,7,3,5,5f,8,2,3,,,n,,29,,2,6,,,2,,,2,,2,6j,,2,4,6,2,,2,r,2,2d,8,2,,,2,2y,,,,2,6,,,2t,3,2,4,,5,77,9,,2,6t,,a,2,,,4,,40,4,2,2,4,,w,a,14,6,2,4,8,,9,6,2,3,1a,d,,2,ba,7,,6,,,2a,m,2,7,,2,,2,3e,6,3,,,2,,7,,,20,2,3,,,,9n,2,f0b,5,1n,7,t4,,1r,4,29,,f5k,2,43q,,,3,4,5,8,8,2,7,u,4,44,3,1iz,1j,4,1e,8,,e,,m,5,,f,11s,7,,h,2,7,,2,,5,79,7,c5,4,15s,7,31,7,240,5,gx7k,2o,3k,6o".split(",").map(e=>e?parseInt(e,36):1);for(let e=0,t=0;e>1;if(n=ha[i])e=i+1;else return!0;if(e==t)return!1}}function So(n){return n>=127462&&n<=127487}const Co=8205;function Zc(n,e,t=!0,i=!0){return(t?ca:ef)(n,e,i)}function ca(n,e,t){if(e==n.length)return e;e&&fa(n.charCodeAt(e))&&ua(n.charCodeAt(e-1))&&e--;let i=mr(n,e);for(e+=Ao(i);e=0&&So(mr(n,o));)s++,o-=2;if(s%2==0)break;e+=2}else break}return e}function ef(n,e,t){for(;e>0;){let i=ca(n,e-2,t);if(i=56320&&n<57344}function ua(n){return n>=55296&&n<56320}function Ao(n){return n<65536?1:2}class H{lineAt(e){if(e<0||e>this.length)throw new RangeError(`Invalid position ${e} in document of length ${this.length}`);return this.lineInner(e,!1,1,0)}line(e){if(e<1||e>this.lines)throw new RangeError(`Invalid line number ${e} in ${this.lines}-line document`);return this.lineInner(e,!0,1,0)}replace(e,t,i){[e,t]=ii(this,e,t);let r=[];return this.decompose(0,e,r,2),i.length&&i.decompose(0,i.length,r,3),this.decompose(t,this.length,r,1),Ze.from(r,this.length-(t-e)+i.length)}append(e){return this.replace(this.length,this.length,e)}slice(e,t=this.length){[e,t]=ii(this,e,t);let i=[];return this.decompose(e,t,i,0),Ze.from(i,t-e)}eq(e){if(e==this)return!0;if(e.length!=this.length||e.lines!=this.lines)return!1;let t=this.scanIdentical(e,1),i=this.length-this.scanIdentical(e,-1),r=new vi(this),s=new vi(e);for(let o=t,l=t;;){if(r.next(o),s.next(o),o=0,r.lineBreak!=s.lineBreak||r.done!=s.done||r.value!=s.value)return!1;if(l+=r.value.length,r.done||l>=i)return!0}}iter(e=1){return new vi(this,e)}iterRange(e,t=this.length){return new da(this,e,t)}iterLines(e,t){let i;if(e==null)i=this.iter();else{t==null&&(t=this.lines+1);let r=this.line(e).from;i=this.iterRange(r,Math.max(r,t==this.lines+1?this.length:t<=1?0:this.line(t-1).to))}return new pa(i)}toString(){return this.sliceString(0)}toJSON(){let e=[];return this.flatten(e),e}constructor(){}static of(e){if(e.length==0)throw new RangeError("A document must have at least one line");return e.length==1&&!e[0]?H.empty:e.length<=32?new te(e):Ze.from(te.split(e,[]))}}class te extends H{constructor(e,t=tf(e)){super(),this.text=e,this.length=t}get lines(){return this.text.length}get children(){return null}lineInner(e,t,i,r){for(let s=0;;s++){let o=this.text[s],l=r+o.length;if((t?i:l)>=e)return new nf(r,l,i,o);r=l+1,i++}}decompose(e,t,i,r){let s=e<=0&&t>=this.length?this:new te(To(this.text,e,t),Math.min(t,this.length)-Math.max(0,e));if(r&1){let o=i.pop(),l=Cn(s.text,o.text.slice(),0,s.length);if(l.length<=32)i.push(new te(l,o.length+s.length));else{let a=l.length>>1;i.push(new te(l.slice(0,a)),new te(l.slice(a)))}}else i.push(s)}replace(e,t,i){if(!(i instanceof te))return super.replace(e,t,i);[e,t]=ii(this,e,t);let r=Cn(this.text,Cn(i.text,To(this.text,0,e)),t),s=this.length+i.length-(t-e);return r.length<=32?new te(r,s):Ze.from(te.split(r,[]),s)}sliceString(e,t=this.length,i=` +`){[e,t]=ii(this,e,t);let r="";for(let s=0,o=0;s<=t&&oe&&o&&(r+=i),es&&(r+=l.slice(Math.max(0,e-s),t-s)),s=a+1}return r}flatten(e){for(let t of this.text)e.push(t)}scanIdentical(){return 0}static split(e,t){let i=[],r=-1;for(let s of e)i.push(s),r+=s.length+1,i.length==32&&(t.push(new te(i,r)),i=[],r=-1);return r>-1&&t.push(new te(i,r)),t}}class Ze extends H{constructor(e,t){super(),this.children=e,this.length=t,this.lines=0;for(let i of e)this.lines+=i.lines}lineInner(e,t,i,r){for(let s=0;;s++){let o=this.children[s],l=r+o.length,a=i+o.lines-1;if((t?a:l)>=e)return o.lineInner(e,t,i,r);r=l+1,i=a+1}}decompose(e,t,i,r){for(let s=0,o=0;o<=t&&s=o){let h=r&((o<=e?1:0)|(a>=t?2:0));o>=e&&a<=t&&!h?i.push(l):l.decompose(e-o,t-o,i,h)}o=a+1}}replace(e,t,i){if([e,t]=ii(this,e,t),i.lines=s&&t<=l){let a=o.replace(e-s,t-s,i),h=this.lines-o.lines+a.lines;if(a.lines>4&&a.lines>h>>6){let c=this.children.slice();return c[r]=a,new Ze(c,this.length-(t-e)+i.length)}return super.replace(s,l,a)}s=l+1}return super.replace(e,t,i)}sliceString(e,t=this.length,i=` +`){[e,t]=ii(this,e,t);let r="";for(let s=0,o=0;se&&s&&(r+=i),eo&&(r+=l.sliceString(e-o,t-o,i)),o=a+1}return r}flatten(e){for(let t of this.children)t.flatten(e)}scanIdentical(e,t){if(!(e instanceof Ze))return 0;let i=0,[r,s,o,l]=t>0?[0,0,this.children.length,e.children.length]:[this.children.length-1,e.children.length-1,-1,-1];for(;;r+=t,s+=t){if(r==o||s==l)return i;let a=this.children[r],h=e.children[s];if(a!=h)return i+a.scanIdentical(h,t);i+=a.length+1}}static from(e,t=e.reduce((i,r)=>i+r.length+1,-1)){let i=0;for(let d of e)i+=d.lines;if(i<32){let d=[];for(let p of e)p.flatten(d);return new te(d,t)}let r=Math.max(32,i>>5),s=r<<1,o=r>>1,l=[],a=0,h=-1,c=[];function f(d){let p;if(d.lines>s&&d instanceof Ze)for(let m of d.children)f(m);else d.lines>o&&(a>o||!a)?(u(),l.push(d)):d instanceof te&&a&&(p=c[c.length-1])instanceof te&&d.lines+p.lines<=32?(a+=d.lines,h+=d.length+1,c[c.length-1]=new te(p.text.concat(d.text),p.length+1+d.length)):(a+d.lines>r&&u(),a+=d.lines,h+=d.length+1,c.push(d))}function u(){a!=0&&(l.push(c.length==1?c[0]:Ze.from(c,h)),h=-1,a=c.length=0)}for(let d of e)f(d);return u(),l.length==1?l[0]:new Ze(l,t)}}H.empty=new te([""],0);function tf(n){let e=-1;for(let t of n)e+=t.length+1;return e}function Cn(n,e,t=0,i=1e9){for(let r=0,s=0,o=!0;s=t&&(a>i&&(l=l.slice(0,i-r)),r0?1:(e instanceof te?e.text.length:e.children.length)<<1]}nextInner(e,t){for(this.done=this.lineBreak=!1;;){let i=this.nodes.length-1,r=this.nodes[i],s=this.offsets[i],o=s>>1,l=r instanceof te?r.text.length:r.children.length;if(o==(t>0?l:0)){if(i==0)return this.done=!0,this.value="",this;t>0&&this.offsets[i-1]++,this.nodes.pop(),this.offsets.pop()}else if((s&1)==(t>0?0:1)){if(this.offsets[i]+=t,e==0)return this.lineBreak=!0,this.value=` +`,this;e--}else if(r instanceof te){let a=r.text[o+(t<0?-1:0)];if(this.offsets[i]+=t,a.length>Math.max(0,e))return this.value=e==0?a:t>0?a.slice(e):a.slice(0,a.length-e),this;e-=a.length}else{let a=r.children[o+(t<0?-1:0)];e>a.length?(e-=a.length,this.offsets[i]+=t):(t<0&&this.offsets[i]--,this.nodes.push(a),this.offsets.push(t>0?1:(a instanceof te?a.text.length:a.children.length)<<1))}}}next(e=0){return e<0&&(this.nextInner(-e,-this.dir),e=this.value.length),this.nextInner(e,this.dir)}}class da{constructor(e,t,i){this.value="",this.done=!1,this.cursor=new vi(e,t>i?-1:1),this.pos=t>i?e.length:0,this.from=Math.min(t,i),this.to=Math.max(t,i)}nextInner(e,t){if(t<0?this.pos<=this.from:this.pos>=this.to)return this.value="",this.done=!0,this;e+=Math.max(0,t<0?this.pos-this.to:this.from-this.pos);let i=t<0?this.pos-this.from:this.to-this.pos;e>i&&(e=i),i-=e;let{value:r}=this.cursor.next(e);return this.pos+=(r.length+e)*t,this.value=r.length<=i?r:t<0?r.slice(r.length-i):r.slice(0,i),this.done=!this.value,this}next(e=0){return e<0?e=Math.max(e,this.from-this.pos):e>0&&(e=Math.min(e,this.to-this.pos)),this.nextInner(e,this.cursor.dir)}get lineBreak(){return this.cursor.lineBreak&&this.value!=""}}class pa{constructor(e){this.inner=e,this.afterBreak=!0,this.value="",this.done=!1}next(e=0){let{done:t,lineBreak:i,value:r}=this.inner.next(e);return t&&this.afterBreak?(this.value="",this.afterBreak=!1):t?(this.done=!0,this.value=""):i?this.afterBreak?this.value="":(this.afterBreak=!0,this.next()):(this.value=r,this.afterBreak=!1),this}get lineBreak(){return!1}}typeof Symbol<"u"&&(H.prototype[Symbol.iterator]=function(){return this.iter()},vi.prototype[Symbol.iterator]=da.prototype[Symbol.iterator]=pa.prototype[Symbol.iterator]=function(){return this});class nf{constructor(e,t,i,r){this.from=e,this.to=t,this.number=i,this.text=r}get length(){return this.to-this.from}}function ii(n,e,t){return e=Math.max(0,Math.min(n.length,e)),[e,Math.max(e,Math.min(n.length,t))]}function pe(n,e,t=!0,i=!0){return Zc(n,e,t,i)}function rf(n){return n>=56320&&n<57344}function sf(n){return n>=55296&&n<56320}function Qe(n,e){let t=n.charCodeAt(e);if(!sf(t)||e+1==n.length)return t;let i=n.charCodeAt(e+1);return rf(i)?(t-55296<<10)+(i-56320)+65536:t}function ma(n){return n<=65535?String.fromCharCode(n):(n-=65536,String.fromCharCode((n>>10)+55296,(n&1023)+56320))}function mt(n){return n<65536?1:2}const Ur=/\r\n?|\n/;var de=(function(n){return n[n.Simple=0]="Simple",n[n.TrackDel=1]="TrackDel",n[n.TrackBefore=2]="TrackBefore",n[n.TrackAfter=3]="TrackAfter",n})(de||(de={}));class rt{constructor(e){this.sections=e}get length(){let e=0;for(let t=0;te)return s+(e-r);s+=l}else{if(i!=de.Simple&&h>=e&&(i==de.TrackDel&&re||i==de.TrackBefore&&re))return null;if(h>e||h==e&&t<0&&!l)return e==r||t<0?s:s+a;s+=a}r=h}if(e>r)throw new RangeError(`Position ${e} is out of range for changeset of length ${r}`);return s}touchesRange(e,t=e){for(let i=0,r=0;i=0&&r<=t&&l>=e)return rt?"cover":!0;r=l}return!1}toString(){let e="";for(let t=0;t=0?":"+r:"")}return e}toJSON(){return this.sections}static fromJSON(e){if(!Array.isArray(e)||e.length%2||e.some(t=>typeof t!="number"))throw new RangeError("Invalid JSON representation of ChangeDesc");return new rt(e)}static create(e){return new rt(e)}}class se extends rt{constructor(e,t){super(e),this.inserted=t}apply(e){if(this.length!=e.length)throw new RangeError("Applying change set to a document with the wrong length");return Kr(this,(t,i,r,s,o)=>e=e.replace(r,r+(i-t),o),!1),e}mapDesc(e,t=!1){return jr(this,e,t,!0)}invert(e){let t=this.sections.slice(),i=[];for(let r=0,s=0;r=0){t[r]=l,t[r+1]=o;let a=r>>1;for(;i.length0&&yt(i,t,s.text),s.forward(c),l+=c}let h=e[o++];for(;l>1].toJSON()))}return e}static of(e,t,i){let r=[],s=[],o=0,l=null;function a(c=!1){if(!c&&!r.length)return;ou||f<0||u>t)throw new RangeError(`Invalid change range ${f} to ${u} (in doc of length ${t})`);let p=d?typeof d=="string"?H.of(d.split(i||Ur)):d:H.empty,m=p.length;if(f==u&&m==0)return;fo&&ue(r,f-o,-1),ue(r,u-f,m),yt(s,r,p),o=u}}return h(e),a(!l),l}static empty(e){return new se(e?[e,-1]:[],[])}static fromJSON(e){if(!Array.isArray(e))throw new RangeError("Invalid JSON representation of ChangeSet");let t=[],i=[];for(let r=0;rl&&typeof o!="string"))throw new RangeError("Invalid JSON representation of ChangeSet");if(s.length==1)t.push(s[0],0);else{for(;i.length=0&&t<=0&&t==n[r+1]?n[r]+=e:r>=0&&e==0&&n[r]==0?n[r+1]+=t:i?(n[r]+=e,n[r+1]+=t):n.push(e,t)}function yt(n,e,t){if(t.length==0)return;let i=e.length-2>>1;if(i>1])),!(t||o==n.sections.length||n.sections[o+1]<0);)l=n.sections[o++],a=n.sections[o++];e(r,h,s,c,f),r=h,s=c}}}function jr(n,e,t,i=!1){let r=[],s=i?[]:null,o=new Ei(n),l=new Ei(e);for(let a=-1;;){if(o.done&&l.len||l.done&&o.len)throw new Error("Mismatched change set lengths");if(o.ins==-1&&l.ins==-1){let h=Math.min(o.len,l.len);ue(r,h,-1),o.forward(h),l.forward(h)}else if(l.ins>=0&&(o.ins<0||a==o.i||o.off==0&&(l.len=0&&a=0){let h=0,c=o.len;for(;c;)if(l.ins==-1){let f=Math.min(c,l.len);h+=f,c-=f,l.forward(f)}else if(l.ins==0&&l.lena||o.ins>=0&&o.len>a)&&(l||i.length>h),s.forward2(a),o.forward(a)}}}}class Ei{constructor(e){this.set=e,this.i=0,this.next()}next(){let{sections:e}=this.set;this.i>1;return t>=e.length?H.empty:e[t]}textBit(e){let{inserted:t}=this.set,i=this.i-2>>1;return i>=t.length&&!e?H.empty:t[i].slice(this.off,e==null?void 0:this.off+e)}forward(e){e==this.len?this.next():(this.len-=e,this.off+=e)}forward2(e){this.ins==-1?this.forward(e):e==this.ins?this.next():(this.ins-=e,this.off+=e)}}class Pt{constructor(e,t,i){this.from=e,this.to=t,this.flags=i}get anchor(){return this.flags&32?this.to:this.from}get head(){return this.flags&32?this.from:this.to}get empty(){return this.from==this.to}get assoc(){return this.flags&8?-1:this.flags&16?1:0}get bidiLevel(){let e=this.flags&7;return e==7?null:e}get goalColumn(){let e=this.flags>>6;return e==16777215?void 0:e}map(e,t=-1){let i,r;return this.empty?i=r=e.mapPos(this.from,t):(i=e.mapPos(this.from,1),r=e.mapPos(this.to,-1)),i==this.from&&r==this.to?this:new Pt(i,r,this.flags)}extend(e,t=e,i=0){if(e<=this.anchor&&t>=this.anchor)return b.range(e,t,void 0,void 0,i);let r=Math.abs(e-this.anchor)>Math.abs(t-this.anchor)?e:t;return b.range(this.anchor,r,void 0,void 0,i)}eq(e,t=!1){return this.anchor==e.anchor&&this.head==e.head&&this.goalColumn==e.goalColumn&&(!t||!this.empty||this.assoc==e.assoc)}toJSON(){return{anchor:this.anchor,head:this.head}}static fromJSON(e){if(!e||typeof e.anchor!="number"||typeof e.head!="number")throw new RangeError("Invalid JSON representation for SelectionRange");return b.range(e.anchor,e.head)}static create(e,t,i){return new Pt(e,t,i)}}class b{constructor(e,t){this.ranges=e,this.mainIndex=t}map(e,t=-1){return e.empty?this:b.create(this.ranges.map(i=>i.map(e,t)),this.mainIndex)}eq(e,t=!1){if(this.ranges.length!=e.ranges.length||this.mainIndex!=e.mainIndex)return!1;for(let i=0;ie.toJSON()),main:this.mainIndex}}static fromJSON(e){if(!e||!Array.isArray(e.ranges)||typeof e.main!="number"||e.main>=e.ranges.length)throw new RangeError("Invalid JSON representation for EditorSelection");return new b(e.ranges.map(t=>Pt.fromJSON(t)),e.main)}static single(e,t=e){return new b([b.range(e,t)],0)}static create(e,t=0){if(e.length==0)throw new RangeError("A selection needs at least one range");for(let i=0,r=0;rr.from-s.from),t=e.indexOf(i);for(let r=1;rs.head?b.range(a,l):b.range(l,a))}}return new b(e,t)}}function ya(n,e){for(let t of n.ranges)if(t.to>e)throw new RangeError("Selection points outside of document")}let Is=0;class B{constructor(e,t,i,r,s){this.combine=e,this.compareInput=t,this.compare=i,this.isStatic=r,this.id=Is++,this.default=e([]),this.extensions=typeof s=="function"?s(this):s}get reader(){return this}static define(e={}){return new B(e.combine||(t=>t),e.compareInput||((t,i)=>t===i),e.compare||(e.combine?(t,i)=>t===i:Ps),!!e.static,e.enables)}of(e){return new An([],this,0,e)}compute(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new An(e,this,1,t)}computeN(e,t){if(this.isStatic)throw new Error("Can't compute a static facet");return new An(e,this,2,t)}from(e,t){return t||(t=i=>i),this.compute([e],i=>t(i.field(e)))}}function Ps(n,e){return n==e||n.length==e.length&&n.every((t,i)=>t===e[i])}class An{constructor(e,t,i,r){this.dependencies=e,this.facet=t,this.type=i,this.value=r,this.id=Is++}dynamicSlot(e){var t;let i=this.value,r=this.facet.compareInput,s=this.id,o=e[s]>>1,l=this.type==2,a=!1,h=!1,c=[];for(let f of this.dependencies)f=="doc"?a=!0:f=="selection"?h=!0:(((t=e[f.id])!==null&&t!==void 0?t:1)&1)==0&&c.push(e[f.id]);return{create(f){return f.values[o]=i(f),1},update(f,u){if(a&&u.docChanged||h&&(u.docChanged||u.selection)||Gr(f,c)){let d=i(f);if(l?!Mo(d,f.values[o],r):!r(d,f.values[o]))return f.values[o]=d,1}return 0},reconfigure:(f,u)=>{let d,p=u.config.address[s];if(p!=null){let m=In(u,p);if(this.dependencies.every(g=>g instanceof B?u.facet(g)===f.facet(g):g instanceof We?u.field(g,!1)==f.field(g,!1):!0)||(l?Mo(d=i(f),m,r):r(d=i(f),m)))return f.values[o]=m,0}else d=i(f);return f.values[o]=d,1}}}}function Mo(n,e,t){if(n.length!=e.length)return!1;for(let i=0;in[a.id]),r=t.map(a=>a.type),s=i.filter(a=>!(a&1)),o=n[e.id]>>1;function l(a){let h=[];for(let c=0;ci===r),e);return e.provide&&(t.provides=e.provide(t)),t}create(e){let t=e.facet(nn).find(i=>i.field==this);return((t==null?void 0:t.create)||this.createF)(e)}slot(e){let t=e[this.id]>>1;return{create:i=>(i.values[t]=this.create(i),1),update:(i,r)=>{let s=i.values[t],o=this.updateF(s,r);return this.compareF(s,o)?0:(i.values[t]=o,1)},reconfigure:(i,r)=>{let s=i.facet(nn),o=r.facet(nn),l;return(l=s.find(a=>a.field==this))&&l!=o.find(a=>a.field==this)?(i.values[t]=l.create(i),1):r.config.address[this.id]!=null?(i.values[t]=r.field(this),0):(i.values[t]=this.create(i),1)}}}init(e){return[this,nn.of({field:this,create:e})]}get extension(){return this}}const It={lowest:4,low:3,default:2,high:1,highest:0};function di(n){return e=>new ba(e,n)}const at={highest:di(It.highest),high:di(It.high),default:di(It.default),low:di(It.low),lowest:di(It.lowest)};class ba{constructor(e,t){this.inner=e,this.prec=t}}class qi{of(e){return new Yr(this,e)}reconfigure(e){return qi.reconfigure.of({compartment:this,extension:e})}get(e){return e.config.compartments.get(this)}}class Yr{constructor(e,t){this.compartment=e,this.inner=t}}class Bn{constructor(e,t,i,r,s,o){for(this.base=e,this.compartments=t,this.dynamicSlots=i,this.address=r,this.staticValues=s,this.facets=o,this.statusTemplate=[];this.statusTemplate.length>1]}static resolve(e,t,i){let r=[],s=Object.create(null),o=new Map;for(let u of lf(e,t,o))u instanceof We?r.push(u):(s[u.facet.id]||(s[u.facet.id]=[])).push(u);let l=Object.create(null),a=[],h=[];for(let u of r)l[u.id]=h.length<<1,h.push(d=>u.slot(d));let c=i==null?void 0:i.config.facets;for(let u in s){let d=s[u],p=d[0].facet,m=c&&c[u]||[];if(d.every(g=>g.type==0))if(l[p.id]=a.length<<1|1,Ps(m,d))a.push(i.facet(p));else{let g=p.combine(d.map(y=>y.value));a.push(i&&p.compare(g,i.facet(p))?i.facet(p):g)}else{for(let g of d)g.type==0?(l[g.id]=a.length<<1|1,a.push(g.value)):(l[g.id]=h.length<<1,h.push(y=>g.dynamicSlot(y)));l[p.id]=h.length<<1,h.push(g=>of(g,p,d))}}let f=h.map(u=>u(l));return new Bn(e,o,f,l,a,s)}}function lf(n,e,t){let i=[[],[],[],[],[]],r=new Map;function s(o,l){let a=r.get(o);if(a!=null){if(a<=l)return;let h=i[a].indexOf(o);h>-1&&i[a].splice(h,1),o instanceof Yr&&t.delete(o.compartment)}if(r.set(o,l),Array.isArray(o))for(let h of o)s(h,l);else if(o instanceof Yr){if(t.has(o.compartment))throw new RangeError("Duplicate use of compartment in extensions");let h=e.get(o.compartment)||o.inner;t.set(o.compartment,h),s(h,l)}else if(o instanceof ba)s(o.inner,o.prec);else if(o instanceof We)i[l].push(o),o.provides&&s(o.provides,l);else if(o instanceof An)i[l].push(o),o.facet.extensions&&s(o.facet.extensions,It.default);else{let h=o.extension;if(!h)throw new Error(`Unrecognized extension value in extension set (${o}). This sometimes happens because multiple instances of @codemirror/state are loaded, breaking instanceof checks.`);s(h,l)}}return s(n,It.default),i.reduce((o,l)=>o.concat(l))}function ki(n,e){if(e&1)return 2;let t=e>>1,i=n.status[t];if(i==4)throw new Error("Cyclic dependency between fields and/or facets");if(i&2)return i;n.status[t]=4;let r=n.computeSlot(n,n.config.dynamicSlots[t]);return n.status[t]=2|r}function In(n,e){return e&1?n.config.staticValues[e>>1]:n.values[e>>1]}const wa=B.define(),Xr=B.define({combine:n=>n.some(e=>e),static:!0}),xa=B.define({combine:n=>n.length?n[0]:void 0,static:!0}),va=B.define(),ka=B.define(),Sa=B.define(),Ca=B.define({combine:n=>n.length?n[0]:!1});class ft{constructor(e,t){this.type=e,this.value=t}static define(){return new af}}class af{of(e){return new ft(this,e)}}class hf{constructor(e){this.map=e}of(e){return new j(this,e)}}class j{constructor(e,t){this.type=e,this.value=t}map(e){let t=this.type.map(this.value,e);return t===void 0?void 0:t==this.value?this:new j(this.type,t)}is(e){return this.type==e}static define(e={}){return new hf(e.map||(t=>t))}static mapEffects(e,t){if(!e.length)return e;let i=[];for(let r of e){let s=r.map(t);s&&i.push(s)}return i}}j.reconfigure=j.define();j.appendConfig=j.define();class re{constructor(e,t,i,r,s,o){this.startState=e,this.changes=t,this.selection=i,this.effects=r,this.annotations=s,this.scrollIntoView=o,this._doc=null,this._state=null,i&&ya(i,t.newLength),s.some(l=>l.type==re.time)||(this.annotations=s.concat(re.time.of(Date.now())))}static create(e,t,i,r,s,o){return new re(e,t,i,r,s,o)}get newDoc(){return this._doc||(this._doc=this.changes.apply(this.startState.doc))}get newSelection(){return this.selection||this.startState.selection.map(this.changes)}get state(){return this._state||this.startState.applyTransaction(this),this._state}annotation(e){for(let t of this.annotations)if(t.type==e)return t.value}get docChanged(){return!this.changes.empty}get reconfigured(){return this.startState.config!=this.state.config}isUserEvent(e){let t=this.annotation(re.userEvent);return!!(t&&(t==e||t.length>e.length&&t.slice(0,e.length)==e&&t[e.length]=="."))}}re.time=ft.define();re.userEvent=ft.define();re.addToHistory=ft.define();re.remote=ft.define();function cf(n,e){let t=[];for(let i=0,r=0;;){let s,o;if(i=n[i]))s=n[i++],o=n[i++];else if(r=0;r--){let s=i[r](n);s instanceof re?n=s:Array.isArray(s)&&s.length==1&&s[0]instanceof re?n=s[0]:n=Ta(e,Jt(s),!1)}return n}function uf(n){let e=n.startState,t=e.facet(Sa),i=n;for(let r=t.length-1;r>=0;r--){let s=t[r](n);s&&Object.keys(s).length&&(i=Aa(i,Jr(e,s,n.changes.newLength),!0))}return i==n?n:re.create(e,n.changes,n.selection,i.effects,i.annotations,i.scrollIntoView)}const df=[];function Jt(n){return n==null?df:Array.isArray(n)?n:[n]}var Be=(function(n){return n[n.Word=0]="Word",n[n.Space=1]="Space",n[n.Other=2]="Other",n})(Be||(Be={}));const pf=/[\u00df\u0587\u0590-\u05f4\u0600-\u06ff\u3040-\u309f\u30a0-\u30ff\u3400-\u4db5\u4e00-\u9fcc\uac00-\ud7af]/;let Qr;try{Qr=new RegExp("[\\p{Alphabetic}\\p{Number}_]","u")}catch{}function mf(n){if(Qr)return Qr.test(n);for(let e=0;e"€"&&(t.toUpperCase()!=t.toLowerCase()||pf.test(t)))return!0}return!1}function gf(n){return e=>{if(!/\S/.test(e))return Be.Space;if(mf(e))return Be.Word;for(let t=0;t-1)return Be.Word;return Be.Other}}class q{constructor(e,t,i,r,s,o){this.config=e,this.doc=t,this.selection=i,this.values=r,this.status=e.statusTemplate.slice(),this.computeSlot=s,o&&(o._state=this);for(let l=0;lr.set(h,a)),t=null),r.set(l.value.compartment,l.value.extension)):l.is(j.reconfigure)?(t=null,i=l.value):l.is(j.appendConfig)&&(t=null,i=Jt(i).concat(l.value));let s;t?s=e.startState.values.slice():(t=Bn.resolve(i,r,this),s=new q(t,this.doc,this.selection,t.dynamicSlots.map(()=>null),(a,h)=>h.reconfigure(a,this),null).values);let o=e.startState.facet(Xr)?e.newSelection:e.newSelection.asSingle();new q(t,e.newDoc,o,s,(l,a)=>a.update(l,e),e)}replaceSelection(e){return typeof e=="string"&&(e=this.toText(e)),this.changeByRange(t=>({changes:{from:t.from,to:t.to,insert:e},range:b.cursor(t.from+e.length)}))}changeByRange(e){let t=this.selection,i=e(t.ranges[0]),r=this.changes(i.changes),s=[i.range],o=Jt(i.effects);for(let l=1;lo.spec.fromJSON(l,a)))}}return q.create({doc:e.doc,selection:b.fromJSON(e.selection),extensions:t.extensions?r.concat([t.extensions]):r})}static create(e={}){let t=Bn.resolve(e.extensions||[],new Map),i=e.doc instanceof H?e.doc:H.of((e.doc||"").split(t.staticFacet(q.lineSeparator)||Ur)),r=e.selection?e.selection instanceof b?e.selection:b.single(e.selection.anchor,e.selection.head):b.single(0);return ya(r,i.length),t.staticFacet(Xr)||(r=r.asSingle()),new q(t,i,r,t.dynamicSlots.map(()=>null),(s,o)=>o.create(s),null)}get tabSize(){return this.facet(q.tabSize)}get lineBreak(){return this.facet(q.lineSeparator)||` +`}get readOnly(){return this.facet(Ca)}phrase(e,...t){for(let i of this.facet(q.phrases))if(Object.prototype.hasOwnProperty.call(i,e)){e=i[e];break}return t.length&&(e=e.replace(/\$(\$|\d*)/g,(i,r)=>{if(r=="$")return"$";let s=+(r||1);return!s||s>t.length?i:t[s-1]})),e}languageDataAt(e,t,i=-1){let r=[];for(let s of this.facet(wa))for(let o of s(this,t,i))Object.prototype.hasOwnProperty.call(o,e)&&r.push(o[e]);return r}charCategorizer(e){let t=this.languageDataAt("wordChars",e);return gf(t.length?t[0]:"")}wordAt(e){let{text:t,from:i,length:r}=this.doc.lineAt(e),s=this.charCategorizer(e),o=e-i,l=e-i;for(;o>0;){let a=pe(t,o,!1);if(s(t.slice(a,o))!=Be.Word)break;o=a}for(;ln.length?n[0]:4});q.lineSeparator=xa;q.readOnly=Ca;q.phrases=B.define({compare(n,e){let t=Object.keys(n),i=Object.keys(e);return t.length==i.length&&t.every(r=>n[r]==e[r])}});q.languageData=wa;q.changeFilter=va;q.transactionFilter=ka;q.transactionExtender=Sa;qi.reconfigure=j.define();function Xn(n,e,t={}){let i={};for(let r of n)for(let s of Object.keys(r)){let o=r[s],l=i[s];if(l===void 0)i[s]=o;else if(!(l===o||o===void 0))if(Object.hasOwnProperty.call(t,s))i[s]=t[s](l,o);else throw new Error("Config merge conflict for field "+s)}for(let r in e)i[r]===void 0&&(i[r]=e[r]);return i}class xt{eq(e){return this==e}range(e,t=e){return Zr.create(e,t,this)}}xt.prototype.startSide=xt.prototype.endSide=0;xt.prototype.point=!1;xt.prototype.mapMode=de.TrackDel;function Ns(n,e){return n==e||n.constructor==e.constructor&&n.eq(e)}let Zr=class Ma{constructor(e,t,i){this.from=e,this.to=t,this.value=i}static create(e,t,i){return new Ma(e,t,i)}};function es(n,e){return n.from-e.from||n.value.startSide-e.value.startSide}class Fs{constructor(e,t,i,r){this.from=e,this.to=t,this.value=i,this.maxPoint=r}get length(){return this.to[this.to.length-1]}findIndex(e,t,i,r=0){let s=i?this.to:this.from;for(let o=r,l=s.length;;){if(o==l)return o;let a=o+l>>1,h=s[a]-e||(i?this.value[a].endSide:this.value[a].startSide)-t;if(a==o)return h>=0?o:l;h>=0?l=a:o=a+1}}between(e,t,i,r){for(let s=this.findIndex(t,-1e9,!0),o=this.findIndex(i,1e9,!1,s);sd||u==d&&h.startSide>0&&h.endSide<=0)continue;(d-u||h.endSide-h.startSide)<0||(o<0&&(o=u),h.point&&(l=Math.max(l,d-u)),i.push(h),r.push(u-o),s.push(d-o))}return{mapped:i.length?new Fs(r,s,i,l):null,pos:o}}}class W{constructor(e,t,i,r){this.chunkPos=e,this.chunk=t,this.nextLayer=i,this.maxPoint=r}static create(e,t,i,r){return new W(e,t,i,r)}get length(){let e=this.chunk.length-1;return e<0?0:Math.max(this.chunkEnd(e),this.nextLayer.length)}get size(){if(this.isEmpty)return 0;let e=this.nextLayer.size;for(let t of this.chunk)e+=t.value.length;return e}chunkEnd(e){return this.chunkPos[e]+this.chunk[e].length}update(e){let{add:t=[],sort:i=!1,filterFrom:r=0,filterTo:s=this.length}=e,o=e.filter;if(t.length==0&&!o)return this;if(i&&(t=t.slice().sort(es)),this.isEmpty)return t.length?W.of(t):this;let l=new Da(this,null,-1).goto(0),a=0,h=[],c=new Oi;for(;l.value||a=0){let f=t[a++];c.addInner(f.from,f.to,f.value)||h.push(f)}else l.rangeIndex==1&&l.chunkIndexthis.chunkEnd(l.chunkIndex)||sl.to||s=s&&e<=s+o.length&&o.between(s,e-s,t-s,i)===!1)return}this.nextLayer.between(e,t,i)}}iter(e=0){return Li.from([this]).goto(e)}get isEmpty(){return this.nextLayer==this}static iter(e,t=0){return Li.from(e).goto(t)}static compare(e,t,i,r,s=-1){let o=e.filter(f=>f.maxPoint>0||!f.isEmpty&&f.maxPoint>=s),l=t.filter(f=>f.maxPoint>0||!f.isEmpty&&f.maxPoint>=s),a=Do(o,l,i),h=new pi(o,a,s),c=new pi(l,a,s);i.iterGaps((f,u,d)=>Eo(h,f,c,u,d,r)),i.empty&&i.length==0&&Eo(h,0,c,0,0,r)}static eq(e,t,i=0,r){r==null&&(r=999999999);let s=e.filter(c=>!c.isEmpty&&t.indexOf(c)<0),o=t.filter(c=>!c.isEmpty&&e.indexOf(c)<0);if(s.length!=o.length)return!1;if(!s.length)return!0;let l=Do(s,o),a=new pi(s,l,0).goto(i),h=new pi(o,l,0).goto(i);for(;;){if(a.to!=h.to||!ts(a.active,h.active)||a.point&&(!h.point||!Ns(a.point,h.point)))return!1;if(a.to>r)return!0;a.next(),h.next()}}static spans(e,t,i,r,s=-1){let o=new pi(e,null,s).goto(t),l=t,a=o.openStart;for(;;){let h=Math.min(o.to,i);if(o.point){let c=o.activeForPoint(o.to),f=o.pointFroml&&(r.span(l,h,o.active,a),a=o.openEnd(h));if(o.to>i)return a+(o.point&&o.to>i?1:0);l=o.to,o.next()}}static of(e,t=!1){let i=new Oi;for(let r of e instanceof Zr?[e]:t?yf(e):e)i.add(r.from,r.to,r.value);return i.finish()}static join(e){if(!e.length)return W.empty;let t=e[e.length-1];for(let i=e.length-2;i>=0;i--)for(let r=e[i];r!=W.empty;r=r.nextLayer)t=new W(r.chunkPos,r.chunk,t,Math.max(r.maxPoint,t.maxPoint));return t}}W.empty=new W([],[],null,-1);function yf(n){if(n.length>1)for(let e=n[0],t=1;t0)return n.slice().sort(es);e=i}return n}W.empty.nextLayer=W.empty;class Oi{finishChunk(e){this.chunks.push(new Fs(this.from,this.to,this.value,this.maxPoint)),this.chunkPos.push(this.chunkStart),this.chunkStart=-1,this.setMaxPoint=Math.max(this.setMaxPoint,this.maxPoint),this.maxPoint=-1,e&&(this.from=[],this.to=[],this.value=[])}constructor(){this.chunks=[],this.chunkPos=[],this.chunkStart=-1,this.last=null,this.lastFrom=-1e9,this.lastTo=-1e9,this.from=[],this.to=[],this.value=[],this.maxPoint=-1,this.setMaxPoint=-1,this.nextLayer=null}add(e,t,i){this.addInner(e,t,i)||(this.nextLayer||(this.nextLayer=new Oi)).add(e,t,i)}addInner(e,t,i){let r=e-this.lastTo||i.startSide-this.last.endSide;if(r<=0&&(e-this.lastFrom||i.startSide-this.last.startSide)<0)throw new Error("Ranges must be added sorted by `from` position and `startSide`");return r<0?!1:(this.from.length==250&&this.finishChunk(!0),this.chunkStart<0&&(this.chunkStart=e),this.from.push(e-this.chunkStart),this.to.push(t-this.chunkStart),this.last=i,this.lastFrom=e,this.lastTo=t,this.value.push(i),i.point&&(this.maxPoint=Math.max(this.maxPoint,t-e)),!0)}addChunk(e,t){if((e-this.lastTo||t.value[0].startSide-this.last.endSide)<0)return!1;this.from.length&&this.finishChunk(!0),this.setMaxPoint=Math.max(this.setMaxPoint,t.maxPoint),this.chunks.push(t),this.chunkPos.push(e);let i=t.value.length-1;return this.last=t.value[i],this.lastFrom=t.from[i]+e,this.lastTo=t.to[i]+e,!0}finish(){return this.finishInner(W.empty)}finishInner(e){if(this.from.length&&this.finishChunk(!1),this.chunks.length==0)return e;let t=W.create(this.chunkPos,this.chunks,this.nextLayer?this.nextLayer.finishInner(e):e,this.setMaxPoint);return this.from=null,t}}function Do(n,e,t){let i=new Map;for(let s of n)for(let o=0;o=this.minPoint)break}}setRangeIndex(e){if(e==this.layer.chunk[this.chunkIndex].value.length){if(this.chunkIndex++,this.skip)for(;this.chunkIndex=i&&r.push(new Da(o,t,i,s));return r.length==1?r[0]:new Li(r)}get startSide(){return this.value?this.value.startSide:0}goto(e,t=-1e9){for(let i of this.heap)i.goto(e,t);for(let i=this.heap.length>>1;i>=0;i--)gr(this.heap,i);return this.next(),this}forward(e,t){for(let i of this.heap)i.forward(e,t);for(let i=this.heap.length>>1;i>=0;i--)gr(this.heap,i);(this.to-e||this.value.endSide-t)<0&&this.next()}next(){if(this.heap.length==0)this.from=this.to=1e9,this.value=null,this.rank=-1;else{let e=this.heap[0];this.from=e.from,this.to=e.to,this.value=e.value,this.rank=e.rank,e.value&&e.next(),gr(this.heap,0)}}}function gr(n,e){for(let t=n[e];;){let i=(e<<1)+1;if(i>=n.length)break;let r=n[i];if(i+1=0&&(r=n[i+1],i++),t.compare(r)<0)break;n[i]=t,n[e]=r,e=i}}class pi{constructor(e,t,i){this.minPoint=i,this.active=[],this.activeTo=[],this.activeRank=[],this.minActive=-1,this.point=null,this.pointFrom=0,this.pointRank=0,this.to=-1e9,this.endSide=0,this.openStart=-1,this.cursor=Li.from(e,t,i)}goto(e,t=-1e9){return this.cursor.goto(e,t),this.active.length=this.activeTo.length=this.activeRank.length=0,this.minActive=-1,this.to=e,this.endSide=t,this.openStart=-1,this.next(),this}forward(e,t){for(;this.minActive>-1&&(this.activeTo[this.minActive]-e||this.active[this.minActive].endSide-t)<0;)this.removeActive(this.minActive);this.cursor.forward(e,t)}removeActive(e){rn(this.active,e),rn(this.activeTo,e),rn(this.activeRank,e),this.minActive=Oo(this.active,this.activeTo)}addActive(e){let t=0,{value:i,to:r,rank:s}=this.cursor;for(;t0;)t++;sn(this.active,t,i),sn(this.activeTo,t,r),sn(this.activeRank,t,s),e&&sn(e,t,this.cursor.from),this.minActive=Oo(this.active,this.activeTo)}next(){let e=this.to,t=this.point;this.point=null;let i=this.openStart<0?[]:null;for(;;){let r=this.minActive;if(r>-1&&(this.activeTo[r]-this.cursor.from||this.active[r].endSide-this.cursor.startSide)<0){if(this.activeTo[r]>e){this.to=this.activeTo[r],this.endSide=this.active[r].endSide;break}this.removeActive(r),i&&rn(i,r)}else if(this.cursor.value)if(this.cursor.from>e){this.to=this.cursor.from,this.endSide=this.cursor.startSide;break}else{let s=this.cursor.value;if(!s.point)this.addActive(i),this.cursor.next();else if(t&&this.cursor.to==this.to&&this.cursor.from=0&&i[r]=0&&!(this.activeRank[i]e||this.activeTo[i]==e&&this.active[i].endSide>=this.point.endSide)&&t.push(this.active[i]);return t.reverse()}openEnd(e){let t=0;for(let i=this.activeTo.length-1;i>=0&&this.activeTo[i]>e;i--)t++;return t}}function Eo(n,e,t,i,r,s){n.goto(e),t.goto(i);let o=i+r,l=i,a=i-e,h=!!s.boundChange;for(let c=!1;;){let f=n.to+a-t.to,u=f||n.endSide-t.endSide,d=u<0?n.to+a:t.to,p=Math.min(d,o);if(n.point||t.point?(n.point&&t.point&&Ns(n.point,t.point)&&ts(n.activeForPoint(n.to),t.activeForPoint(t.to))||s.comparePoint(l,p,n.point,t.point),c=!1):(c&&s.boundChange(l),p>l&&!ts(n.active,t.active)&&s.compareRange(l,p,n.active,t.active),h&&po)break;l=d,u<=0&&n.next(),u>=0&&t.next()}}function ts(n,e){if(n.length!=e.length)return!1;for(let t=0;t=e;i--)n[i+1]=n[i];n[e]=t}function Oo(n,e){let t=-1,i=1e9;for(let r=0;r=e)return r;if(r==n.length)break;s+=n.charCodeAt(r)==9?t-s%t:1,r=pe(n,r)}return n.length}const is="ͼ",Lo=typeof Symbol>"u"?"__"+is:Symbol.for(is),ns=typeof Symbol>"u"?"__styleSet"+Math.floor(Math.random()*1e8):Symbol("styleSet"),Ro=typeof globalThis<"u"?globalThis:typeof window<"u"?window:{};class vt{constructor(e,t){this.rules=[];let{finish:i}=t||{};function r(o){return/^@/.test(o)?[o]:o.split(/,\s*/)}function s(o,l,a,h){let c=[],f=/^@(\w+)\b/.exec(o[0]),u=f&&f[1]=="keyframes";if(f&&l==null)return a.push(o[0]+";");for(let d in l){let p=l[d];if(/&/.test(d))s(d.split(/,\s*/).map(m=>o.map(g=>m.replace(/&/,g))).reduce((m,g)=>m.concat(g)),p,a);else if(p&&typeof p=="object"){if(!f)throw new RangeError("The value of a property ("+d+") should be a primitive value.");s(r(d),p,c,u)}else p!=null&&c.push(d.replace(/_.*/,"").replace(/[A-Z]/g,m=>"-"+m.toLowerCase())+": "+p+";")}(c.length||u)&&a.push((i&&!f&&!h?o.map(i):o).join(", ")+" {"+c.join(" ")+"}")}for(let o in e)s(r(o),e[o],this.rules)}getRules(){return this.rules.join(` +`)}static newName(){let e=Ro[Lo]||1;return Ro[Lo]=e+1,is+e.toString(36)}static mount(e,t,i){let r=e[ns],s=i&&i.nonce;r?s&&r.setNonce(s):r=new wf(e,s),r.mount(Array.isArray(t)?t:[t],e)}}let Bo=new Map;class wf{constructor(e,t){let i=e.ownerDocument||e,r=i.defaultView;if(!e.head&&e.adoptedStyleSheets&&r.CSSStyleSheet){let s=Bo.get(i);if(s)return e[ns]=s;this.sheet=new r.CSSStyleSheet,Bo.set(i,this)}else this.styleTag=i.createElement("style"),t&&this.styleTag.setAttribute("nonce",t);this.modules=[],e[ns]=this}mount(e,t){let i=this.sheet,r=0,s=0;for(let o=0;o-1&&(this.modules.splice(a,1),s--,a=-1),a==-1){if(this.modules.splice(s++,0,l),i)for(let h=0;h",191:"?",192:"~",219:"{",220:"|",221:"}",222:'"'},xf=typeof navigator<"u"&&/Mac/.test(navigator.platform),vf=typeof navigator<"u"&&/MSIE \d|Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(navigator.userAgent);for(var ce=0;ce<10;ce++)kt[48+ce]=kt[96+ce]=String(ce);for(var ce=1;ce<=24;ce++)kt[ce+111]="F"+ce;for(var ce=65;ce<=90;ce++)kt[ce]=String.fromCharCode(ce+32),Ri[ce]=String.fromCharCode(ce);for(var yr in kt)Ri.hasOwnProperty(yr)||(Ri[yr]=kt[yr]);function kf(n){var e=xf&&n.metaKey&&n.shiftKey&&!n.ctrlKey&&!n.altKey||vf&&n.shiftKey&&n.key&&n.key.length==1||n.key=="Unidentified",t=!e&&n.key||(n.shiftKey?Ri:kt)[n.keyCode]||n.key||"Unidentified";return t=="Esc"&&(t="Escape"),t=="Del"&&(t="Delete"),t=="Left"&&(t="ArrowLeft"),t=="Up"&&(t="ArrowUp"),t=="Right"&&(t="ArrowRight"),t=="Down"&&(t="ArrowDown"),t}let ge=typeof navigator<"u"?navigator:{userAgent:"",vendor:"",platform:""},rs=typeof document<"u"?document:{documentElement:{style:{}}};const ss=/Edge\/(\d+)/.exec(ge.userAgent),Ea=/MSIE \d/.test(ge.userAgent),os=/Trident\/(?:[7-9]|\d{2,})\..*rv:(\d+)/.exec(ge.userAgent),Qn=!!(Ea||os||ss),Io=!Qn&&/gecko\/(\d+)/i.test(ge.userAgent),br=!Qn&&/Chrome\/(\d+)/.exec(ge.userAgent),Sf="webkitFontSmoothing"in rs.documentElement.style,ls=!Qn&&/Apple Computer/.test(ge.vendor),Po=ls&&(/Mobile\/\w+/.test(ge.userAgent)||ge.maxTouchPoints>2);var O={mac:Po||/Mac/.test(ge.platform),windows:/Win/.test(ge.platform),linux:/Linux|X11/.test(ge.platform),ie:Qn,ie_version:Ea?rs.documentMode||6:os?+os[1]:ss?+ss[1]:0,gecko:Io,gecko_version:Io?+(/Firefox\/(\d+)/.exec(ge.userAgent)||[0,0])[1]:0,chrome:!!br,chrome_version:br?+br[1]:0,ios:Po,android:/Android\b/.test(ge.userAgent),webkit_version:Sf?+(/\bAppleWebKit\/(\d+)/.exec(ge.userAgent)||[0,0])[1]:0,safari:ls,safari_version:ls?+(/\bVersion\/(\d+(\.\d+)?)/.exec(ge.userAgent)||[0,0])[1]:0,tabSize:rs.documentElement.style.tabSize!=null?"tab-size":"-moz-tab-size"};function _s(n,e){for(let t in n)t=="class"&&e.class?e.class+=" "+n.class:t=="style"&&e.style?e.style+=";"+n.style:e[t]=n[t];return e}const Pn=Object.create(null);function Ws(n,e,t){if(n==e)return!0;n||(n=Pn),e||(e=Pn);let i=Object.keys(n),r=Object.keys(e);if(i.length-0!=r.length-0)return!1;for(let s of i)if(s!=t&&(r.indexOf(s)==-1||n[s]!==e[s]))return!1;return!0}function Cf(n,e){for(let t=n.attributes.length-1;t>=0;t--){let i=n.attributes[t].name;e[i]==null&&n.removeAttribute(i)}for(let t in e){let i=e[t];t=="style"?n.style.cssText=i:n.getAttribute(t)!=i&&n.setAttribute(t,i)}}function No(n,e,t){let i=!1;if(e)for(let r in e)t&&r in t||(i=!0,r=="style"?n.style.cssText="":n.removeAttribute(r));if(t)for(let r in t)e&&e[r]==t[r]||(i=!0,r=="style"?n.style.cssText=t[r]:n.setAttribute(r,t[r]));return i}function Af(n){let e=Object.create(null);for(let t=0;t0?3e8:-4e8:t>0?1e8:-1e8,new zt(e,t,t,i,e.widget||null,!1)}static replace(e){let t=!!e.block,i,r;if(e.isBlockGap)i=-5e8,r=4e8;else{let{start:s,end:o}=Oa(e,t);i=(s?t?-3e8:-1:5e8)-1,r=(o?t?2e8:1:-6e8)+1}return new zt(e,i,r,t,e.widget||null,!0)}static line(e){return new ji(e)}static set(e,t=!1){return W.of(e,t)}hasHeight(){return this.widget?this.widget.estimatedHeight>-1:!1}}U.none=W.empty;class Ki extends U{constructor(e){let{start:t,end:i}=Oa(e);super(t?-1:5e8,i?1:-6e8,null,e),this.tagName=e.tagName||"span",this.attrs=e.class&&e.attributes?_s(e.attributes,{class:e.class}):e.class?{class:e.class}:e.attributes||Pn}eq(e){return this==e||e instanceof Ki&&this.tagName==e.tagName&&Ws(this.attrs,e.attrs)}range(e,t=e){if(e>=t)throw new RangeError("Mark decorations may not be empty");return super.range(e,t)}}Ki.prototype.point=!1;class ji extends U{constructor(e){super(-2e8,-2e8,null,e)}eq(e){return e instanceof ji&&this.spec.class==e.spec.class&&Ws(this.spec.attributes,e.spec.attributes)}range(e,t=e){if(t!=e)throw new RangeError("Line decoration ranges must be zero-length");return super.range(e,t)}}ji.prototype.mapMode=de.TrackBefore;ji.prototype.point=!0;class zt extends U{constructor(e,t,i,r,s,o){super(t,i,s,e),this.block=r,this.isReplace=o,this.mapMode=r?t<=0?de.TrackBefore:de.TrackAfter:de.TrackDel}get type(){return this.startSide!=this.endSide?ve.WidgetRange:this.startSide<=0?ve.WidgetBefore:ve.WidgetAfter}get heightRelevant(){return this.block||!!this.widget&&(this.widget.estimatedHeight>=5||this.widget.lineBreaks>0)}eq(e){return e instanceof zt&&Tf(this.widget,e.widget)&&this.block==e.block&&this.startSide==e.startSide&&this.endSide==e.endSide}range(e,t=e){if(this.isReplace&&(e>t||e==t&&this.startSide>0&&this.endSide<=0))throw new RangeError("Invalid range for replacement decoration");if(!this.isReplace&&t!=e)throw new RangeError("Widget decorations can only have zero-length ranges");return super.range(e,t)}}zt.prototype.point=!0;function Oa(n,e=!1){let{inclusiveStart:t,inclusiveEnd:i}=n;return t==null&&(t=n.inclusive),i==null&&(i=n.inclusive),{start:t??e,end:i??e}}function Tf(n,e){return n==e||!!(n&&e&&n.compare(e))}function Qt(n,e,t,i=0){let r=t.length-1;r>=0&&t[r]+i>=n?t[r]=Math.max(t[r],e):t.push(n,e)}class Bi extends xt{constructor(e,t){super(),this.tagName=e,this.attributes=t}eq(e){return e==this||e instanceof Bi&&this.tagName==e.tagName&&Ws(this.attributes,e.attributes)}static create(e){return new Bi(e.tagName,e.attributes||Pn)}static set(e,t=!1){return W.of(e,t)}}Bi.prototype.startSide=Bi.prototype.endSide=-1;function Ii(n){let e;return n.nodeType==11?e=n.getSelection?n:n.ownerDocument:e=n,e.getSelection()}function as(n,e){return e?n==e||n.contains(e.nodeType!=1?e.parentNode:e):!1}function Si(n,e){if(!e.anchorNode)return!1;try{return as(n,e.anchorNode)}catch{return!1}}function Tn(n){return n.nodeType==3?Pi(n,0,n.nodeValue.length).getClientRects():n.nodeType==1?n.getClientRects():[]}function Ci(n,e,t,i){return t?Fo(n,e,t,i,-1)||Fo(n,e,t,i,1):!1}function St(n){for(var e=0;;e++)if(n=n.previousSibling,!n)return e}function Nn(n){return n.nodeType==1&&/^(DIV|P|LI|UL|OL|BLOCKQUOTE|DD|DT|H\d|SECTION|PRE)$/.test(n.nodeName)}function Fo(n,e,t,i,r){for(;;){if(n==t&&e==i)return!0;if(e==(r<0?0:ct(n))){if(n.nodeName=="DIV")return!1;let s=n.parentNode;if(!s||s.nodeType!=1)return!1;e=St(n)+(r<0?0:1),n=s}else if(n.nodeType==1){if(n=n.childNodes[e+(r<0?-1:0)],n.nodeType==1&&n.contentEditable=="false")return!1;e=r<0?ct(n):0}else return!1}}function ct(n){return n.nodeType==3?n.nodeValue.length:n.childNodes.length}function Fn(n,e){let t=e?n.left:n.right;return{left:t,right:t,top:n.top,bottom:n.bottom}}function Mf(n){let e=n.visualViewport;return e?{left:0,right:e.width,top:0,bottom:e.height}:{left:0,right:n.innerWidth,top:0,bottom:n.innerHeight}}function La(n,e){let t=e.width/n.offsetWidth,i=e.height/n.offsetHeight;return(t>.995&&t<1.005||!isFinite(t)||Math.abs(e.width-n.offsetWidth)<1)&&(t=1),(i>.995&&i<1.005||!isFinite(i)||Math.abs(e.height-n.offsetHeight)<1)&&(i=1),{scaleX:t,scaleY:i}}function Df(n,e,t,i,r,s,o,l){let a=n.ownerDocument,h=a.defaultView||window;for(let c=n,f=!1;c&&!f;)if(c.nodeType==1){let u,d=c==a.body,p=1,m=1;if(d)u=Mf(h);else{if(/^(fixed|sticky)$/.test(getComputedStyle(c).position)&&(f=!0),c.scrollHeight<=c.clientHeight&&c.scrollWidth<=c.clientWidth){c=c.assignedSlot||c.parentNode;continue}let w=c.getBoundingClientRect();({scaleX:p,scaleY:m}=La(c,w)),u={left:w.left,right:w.left+c.clientWidth*p,top:w.top,bottom:w.top+c.clientHeight*m}}let g=0,y=0;if(r=="nearest")e.top0&&e.bottom>u.bottom+y&&(y=e.bottom-u.bottom+o)):e.bottom>u.bottom-o&&(y=e.bottom-u.bottom+o,t<0&&e.top-y0&&e.right>u.right+g&&(g=e.right-u.right+s)):e.right>u.right-s&&(g=e.right-u.right+s,t<0&&e.leftu.bottom||e.leftu.right)&&(e={left:Math.max(e.left,u.left),right:Math.min(e.right,u.right),top:Math.max(e.top,u.top),bottom:Math.min(e.bottom,u.bottom)}),c=c.assignedSlot||c.parentNode}else if(c.nodeType==11)c=c.host;else break}function Ra(n,e=!0){let t=n.ownerDocument,i=null,r=null;for(let s=n.parentNode;s&&!(s==t.body||(!e||i)&&r);)if(s.nodeType==1)!r&&s.scrollHeight>s.clientHeight&&(r=s),e&&!i&&s.scrollWidth>s.clientWidth&&(i=s),s=s.assignedSlot||s.parentNode;else if(s.nodeType==11)s=s.host;else break;return{x:i,y:r}}class Ef{constructor(){this.anchorNode=null,this.anchorOffset=0,this.focusNode=null,this.focusOffset=0}eq(e){return this.anchorNode==e.anchorNode&&this.anchorOffset==e.anchorOffset&&this.focusNode==e.focusNode&&this.focusOffset==e.focusOffset}setRange(e){let{anchorNode:t,focusNode:i}=e;this.set(t,Math.min(e.anchorOffset,t?ct(t):0),i,Math.min(e.focusOffset,i?ct(i):0))}set(e,t,i,r){this.anchorNode=e,this.anchorOffset=t,this.focusNode=i,this.focusOffset=r}}let Bt=null;O.safari&&O.safari_version>=26&&(Bt=!1);function Ba(n){if(n.setActive)return n.setActive();if(Bt)return n.focus(Bt);let e=[];for(let t=n;t&&(e.push(t,t.scrollTop,t.scrollLeft),t!=t.ownerDocument);t=t.parentNode);if(n.focus(Bt==null?{get preventScroll(){return Bt={preventScroll:!0},!0}}:void 0),!Bt){Bt=!1;for(let t=0;tMath.max(0,n.document.documentElement.scrollHeight-n.innerHeight-4):n.scrollTop>Math.max(1,n.scrollHeight-n.clientHeight-4)}function Pa(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i>0)return{node:t,offset:i};if(t.nodeType==1&&i>0){if(t.contentEditable=="false")return null;t=t.childNodes[i-1],i=ct(t)}else if(t.parentNode&&!Nn(t))i=St(t),t=t.parentNode;else return null}}function Na(n,e){for(let t=n,i=e;;){if(t.nodeType==3&&i=t){if(l.level==i)return o;(s<0||(r!=0?r<0?l.fromt:e[s].level>l.level))&&(s=o)}}if(s<0)throw new RangeError("Index out of range");return s}}function Wa(n,e){if(n.length!=e.length)return!1;for(let t=0;t=0;m-=3)if(Ge[m+1]==-d){let g=Ge[m+2],y=g&2?r:g&4?g&1?s:r:0;y&&(Y[f]=Y[Ge[m]]=y),l=m;break}}else{if(Ge.length==189)break;Ge[l++]=f,Ge[l++]=u,Ge[l++]=a}else if((p=Y[f])==2||p==1){let m=p==r;a=m?0:1;for(let g=l-3;g>=0;g-=3){let y=Ge[g+2];if(y&2)break;if(m)Ge[g+2]|=2;else{if(y&4)break;Ge[g+2]|=4}}}}}function Ff(n,e,t,i){for(let r=0,s=i;r<=t.length;r++){let o=r?t[r-1].to:n,l=ra;)p==g&&(p=t[--m].from,g=m?t[m-1].to:n),Y[--p]=d;a=c}else s=h,a++}}}function cs(n,e,t,i,r,s,o){let l=i%2?2:1;if(i%2==r%2)for(let a=e,h=0;aa&&o.push(new tt(a,m.from,d));let g=m.direction==$t!=!(d%2);fs(n,g?i+1:i,r,m.inner,m.from,m.to,o),a=m.to}p=m.to}else{if(p==t||(c?Y[p]!=l:Y[p]==l))break;p++}u?cs(n,a,p,i+1,r,u,o):ae;){let c=!0,f=!1;if(!h||a>s[h-1].to){let m=Y[a-1];m!=l&&(c=!1,f=m==16)}let u=!c&&l==1?[]:null,d=c?i:i+1,p=a;e:for(;;)if(h&&p==s[h-1].to){if(f)break e;let m=s[--h];if(!c)for(let g=m.from,y=h;;){if(g==e)break e;if(y&&s[y-1].to==g)g=s[--y].from;else{if(Y[g-1]==l)break e;break}}if(u)u.push(m);else{m.toY.length;)Y[Y.length]=256;let i=[],r=e==$t?0:1;return fs(n,r,r,t,0,n.length,i),i}function Va(n){return[new tt(0,n,0)]}let Ha="";function Wf(n,e,t,i,r){var s;let o=i.head-n.from,l=tt.find(e,o,(s=i.bidiLevel)!==null&&s!==void 0?s:-1,i.assoc),a=e[l],h=a.side(r,t);if(o==h){let u=l+=r?1:-1;if(u<0||u>=e.length)return null;a=e[l=u],o=a.side(!r,t),h=a.side(r,t)}let c=pe(n.text,o,a.forward(r,t));(ca.to)&&(c=h),Ha=n.text.slice(Math.min(o,c),Math.max(o,c));let f=l==(r?e.length-1:0)?null:e[l+(r?1:-1)];return f&&c==h&&f.level+(r?0:1)n.some(e=>e)}),Hf=B.define({combine:n=>n.some(e=>e)}),Ya=B.define();class ei{constructor(e,t,i,r,s,o=!1){this.range=e,this.y=t,this.x=i,this.yMargin=r,this.xMargin=s,this.isSnapshot=o}map(e){return e.empty?this:new ei(this.range.map(e),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}clip(e){return this.range.to<=e.doc.length?this:new ei(b.cursor(e.doc.length),this.y,this.x,this.yMargin,this.xMargin,this.isSnapshot)}}const on=j.define({map:(n,e)=>n.map(e)}),Xa=j.define();function De(n,e,t){let i=n.facet(Ua);i.length?i[0](e):window.onerror&&window.onerror(String(e),t,void 0,void 0,e)||(t?console.error(t+":",e):console.error(e))}const lt=B.define({combine:n=>n.length?n[0]:!0});let zf=0;const jt=B.define({combine(n){return n.filter((e,t)=>{for(let i=0;i{let a=[];return o&&a.push(Zn.of(h=>{let c=h.plugin(l);return c?o(c):U.none})),s&&a.push(s(l)),a})}static fromClass(e,t){return _e.define((i,r)=>new e(i,r),t)}}class wr{constructor(e){this.spec=e,this.mustUpdate=null,this.value=null}get plugin(){return this.spec&&this.spec.plugin}update(e){if(this.value){if(this.mustUpdate){let t=this.mustUpdate;if(this.mustUpdate=null,this.value.update)try{this.value.update(t)}catch(i){if(De(t.state,i,"CodeMirror plugin crashed"),this.value.destroy)try{this.value.destroy()}catch{}this.deactivate()}}}else if(this.spec)try{this.value=this.spec.plugin.create(e,this.spec.arg)}catch(t){De(e.state,t,"CodeMirror plugin crashed"),this.deactivate()}return this}destroy(e){var t;if(!((t=this.value)===null||t===void 0)&&t.destroy)try{this.value.destroy()}catch(i){De(e.state,i,"CodeMirror plugin crashed")}}deactivate(){this.spec=this.value=null}}const Ja=B.define(),$s=B.define(),Zn=B.define(),Qa=B.define(),qs=B.define(),Gi=B.define(),Za=B.define();function Wo(n,e){let t=n.state.facet(Za);if(!t.length)return t;let i=t.map(s=>s instanceof Function?s(n):s),r=[];return W.spans(i,e.from,e.to,{point(){},span(s,o,l,a){let h=s-e.from,c=o-e.from,f=r;for(let u=l.length-1;u>=0;u--,a--){let d=l[u].spec.bidiIsolate,p;if(d==null&&(d=Vf(e.text,h,c)),a>0&&f.length&&(p=f[f.length-1]).to==h&&p.direction==d)p.to=c,f=p.inner;else{let m={from:h,to:c,direction:d,inner:[]};f.push(m),f=m.inner}}}}),r}const eh=B.define();function Us(n){let e=0,t=0,i=0,r=0;for(let s of n.state.facet(eh)){let o=s(n);o&&(o.left!=null&&(e=Math.max(e,o.left)),o.right!=null&&(t=Math.max(t,o.right)),o.top!=null&&(i=Math.max(i,o.top)),o.bottom!=null&&(r=Math.max(r,o.bottom)))}return{left:e,right:t,top:i,bottom:r}}const wi=B.define();class Ie{constructor(e,t,i,r){this.fromA=e,this.toA=t,this.fromB=i,this.toB=r}join(e){return new Ie(Math.min(this.fromA,e.fromA),Math.max(this.toA,e.toA),Math.min(this.fromB,e.fromB),Math.max(this.toB,e.toB))}addToSet(e){let t=e.length,i=this;for(;t>0;t--){let r=e[t-1];if(!(r.fromA>i.toA)){if(r.toAr.push(new Ie(s,o,l,a))),this.changedRanges=r}static create(e,t,i){return new _n(e,t,i)}get viewportChanged(){return(this.flags&4)>0}get viewportMoved(){return(this.flags&8)>0}get heightChanged(){return(this.flags&2)>0}get geometryChanged(){return this.docChanged||(this.flags&18)>0}get focusChanged(){return(this.flags&1)>0}get docChanged(){return!this.changes.empty}get selectionSet(){return this.transactions.some(e=>e.selection)}get empty(){return this.flags==0&&this.transactions.length==0}}const $f=[];class ee{constructor(e,t,i=0){this.dom=e,this.length=t,this.flags=i,this.parent=null,e.cmTile=this}get breakAfter(){return this.flags&1}get children(){return $f}isWidget(){return!1}get isHidden(){return!1}isComposite(){return!1}isLine(){return!1}isText(){return!1}isBlock(){return!1}get domAttrs(){return null}sync(e){if(this.flags|=2,this.flags&4){this.flags&=-5;let t=this.domAttrs;t&&Cf(this.dom,t)}}toString(){return this.constructor.name+(this.children.length?`(${this.children})`:"")+(this.breakAfter?"#":"")}destroy(){this.parent=null}setDOM(e){this.dom=e,e.cmTile=this}get posAtStart(){return this.parent?this.parent.posBefore(this):0}get posAtEnd(){return this.posAtStart+this.length}posBefore(e,t=this.posAtStart){let i=t;for(let r of this.children){if(r==e)return i;i+=r.length+r.breakAfter}throw new RangeError("Invalid child in posBefore")}posAfter(e){return this.posBefore(e)+e.length}covers(e){return!0}coordsIn(e,t){return null}domPosFor(e,t){let i=St(this.dom),r=this.length?e>0:t>0;return new $e(this.parent.dom,i+(r?1:0),e==0||e==this.length)}markDirty(e){this.flags&=-3,e&&(this.flags|=4),this.parent&&this.parent.flags&2&&this.parent.markDirty(!1)}get overrideDOMText(){return null}get root(){for(let e=this;e;e=e.parent)if(e instanceof tr)return e;return null}static get(e){return e.cmTile}}class er extends ee{constructor(e){super(e,0),this._children=[]}isComposite(){return!0}get children(){return this._children}get lastChild(){return this.children.length?this.children[this.children.length-1]:null}append(e){this.children.push(e),e.parent=this}sync(e){if(this.flags&2)return;super.sync(e);let t=this.dom,i=null,r,s=(e==null?void 0:e.node)==t?e:null,o=0;for(let l of this.children){if(l.sync(e),o+=l.length+l.breakAfter,r=i?i.nextSibling:t.firstChild,s&&r!=l.dom&&(s.written=!0),l.dom.parentNode==t)for(;r&&r!=l.dom;)r=Vo(r);else t.insertBefore(l.dom,r);i=l.dom}for(r=i?i.nextSibling:t.firstChild,s&&r&&(s.written=!0);r;)r=Vo(r);this.length=o}}function Vo(n){let e=n.nextSibling;return n.parentNode.removeChild(n),e}class tr extends er{constructor(e,t){super(t),this.view=e}owns(e){for(;e;e=e.parent)if(e==this)return!0;return!1}isBlock(){return!0}nearest(e){for(;;){if(!e)return null;let t=ee.get(e);if(t&&this.owns(t))return t;e=e.parentNode}}blockTiles(e){for(let t=[],i=this,r=0,s=0;;)if(r==i.children.length){if(!t.length)return;i=i.parent,i.breakAfter&&s++,r=t.pop()}else{let o=i.children[r++];if(o instanceof ht)t.push(r),i=o,r=0;else{let l=s+o.length,a=e(o,s);if(a!==void 0)return a;s=l+o.breakAfter}}}resolveBlock(e,t){let i,r=-1,s,o=-1;if(this.blockTiles((l,a)=>{let h=a+l.length;if(e>=a&&e<=h){if(l.isWidget()&&t>=-1&&t<=1){if(l.flags&32)return!0;l.flags&16&&(i=void 0)}(ae||e==a&&(t>1?l.length:l.covers(-1)))&&(!s||!l.isWidget()&&s.isWidget())&&(s=l,o=e-a)}}),!i&&!s)throw new Error("No tile at position "+e);return i&&t<0||!s?{tile:i,offset:r}:{tile:s,offset:o}}}class ht extends er{constructor(e,t){super(e),this.wrapper=t}isBlock(){return!0}covers(e){return this.children.length?e<0?this.children[0].covers(-1):this.lastChild.covers(1):!1}get domAttrs(){return this.wrapper.attributes}static of(e,t){let i=new ht(t||document.createElement(e.tagName),e);return t||(i.flags|=4),i}}class ni extends er{constructor(e,t){super(e),this.attrs=t}isLine(){return!0}static start(e,t,i){let r=new ni(t||document.createElement("div"),e);return(!t||!i)&&(r.flags|=4),r}get domAttrs(){return this.attrs}resolveInline(e,t,i){let r=null,s=-1,o=null,l=-1;function a(c,f){for(let u=0,d=0;u=f&&(p.isComposite()?a(p,f-d):(!o||o.isHidden&&(t>0||i&&Uf(o,p)))&&(m>f||p.flags&32)?(o=p,l=f-d):(di&&(e=i);let r=e,s=e,o=0;e==0&&t<0||e==i&&t>=0?O.chrome||O.gecko||(e?(r--,o=1):s=0)?0:l.length-1];return O.safari&&!o&&a.width==0&&(a=Array.prototype.find.call(l,h=>h.width)||a),o?Fn(a,o<0):a||null}static of(e,t){let i=new Nt(t||document.createTextNode(e),e);return t||(i.flags|=2),i}}class qt extends ee{constructor(e,t,i,r){super(e,t,r),this.widget=i}isWidget(){return!0}get isHidden(){return this.widget.isHidden}covers(e){return this.flags&48?!1:(this.flags&(e<0?64:128))>0}coordsIn(e,t){return this.coordsInWidget(e,t,!1)}coordsInWidget(e,t,i){let r=this.widget.coordsAt(this.dom,e,t);if(r)return r;if(i)return Fn(this.dom.getBoundingClientRect(),this.length?e==0:t<=0);{let s=this.dom.getClientRects(),o=null;if(!s.length)return null;let l=this.flags&16?!0:this.flags&32?!1:e>0;for(let a=l?s.length-1:0;o=s[a],!(e>0?a==0:a==s.length-1||o.top0;)if(r.isComposite())if(o){if(!e)break;i&&i.break(),e--,o=!1}else if(s==r.children.length){if(!e&&!l.length)break;i&&i.leave(r),o=!!r.breakAfter,{tile:r,index:s}=l.pop(),s++}else{let a=r.children[s],h=a.breakAfter;(t>0?a.length<=e:a.length=0;l--){let a=t.marks[l],h=r.lastChild;if(h instanceof we&&h.mark.eq(a.mark))h.dom!=a.dom&&h.setDOM(xr(a.dom)),r=h;else{if(this.cache.reused.get(a)){let f=ee.get(a.dom);f&&f.setDOM(xr(a.dom))}let c=we.of(a.mark,a.dom);r.append(c),r=c}this.cache.reused.set(a,2)}let s=ee.get(e.text);s&&this.cache.reused.set(s,2);let o=new Nt(e.text,e.text.nodeValue);o.flags|=8,r.append(o)}addInlineWidget(e,t,i){let r=this.afterWidget&&e.flags&48&&(this.afterWidget.flags&48)==(e.flags&48);r||this.flushBuffer();let s=this.ensureMarks(t,i);!r&&!(e.flags&16)&&s.append(this.getBuffer(1)),s.append(e),this.pos+=e.length,this.afterWidget=e}addMark(e,t,i){this.flushBuffer(),this.ensureMarks(t,i).append(e),this.pos+=e.length,this.afterWidget=null}addBlockWidget(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}continueWidget(e){let t=this.afterWidget||this.lastBlock;t.length+=e,this.pos+=e}addLineStart(e,t){var i;e||(e=th);let r=ni.start(e,t||((i=this.cache.find(ni))===null||i===void 0?void 0:i.dom),!!t);this.getBlockPos().append(this.lastBlock=this.curLine=r)}addLine(e){this.getBlockPos().append(e),this.pos+=e.length,this.lastBlock=e,this.endLine()}addBreak(){this.lastBlock.flags|=1,this.endLine(),this.pos++}addLineStartIfNotCovered(e){this.blockPosCovered()||this.addLineStart(e)}ensureLine(e){this.curLine||this.addLineStart(e)}ensureMarks(e,t){var i;let r=this.curLine;for(let s=e.length-1;s>=0;s--){let o=e[s],l;if(t>0&&(l=r.lastChild)&&l instanceof we&&l.mark.eq(o))r=l,t--;else{let a=we.of(o,(i=this.cache.find(we,h=>h.mark.eq(o)))===null||i===void 0?void 0:i.dom);r.append(a),r=a,t=0}}return r}endLine(){if(this.curLine){this.flushBuffer();let e=this.curLine.lastChild;(!e||!Ho(this.curLine,!1)||e.dom.nodeName!="BR"&&e.isWidget()&&!(O.ios&&Ho(this.curLine,!0)))&&this.curLine.append(this.cache.findWidget(vr,0,32)||new qt(vr.toDOM(),0,vr,32)),this.curLine=this.afterWidget=null}}updateBlockWrappers(){this.wrapperPos>this.pos+1e4&&(this.blockWrappers.goto(this.pos),this.wrappers.length=0);for(let e=this.wrappers.length-1;e>=0;e--)this.wrappers[e].to=this.pos){let t=new jf(e.from,e.to,e.value,e.rank),i=this.wrappers.length;for(;i>0&&(this.wrappers[i-1].rank-t.rank||this.wrappers[i-1].to-t.to)<0;)i--;this.wrappers.splice(i,0,t)}this.wrapperPos=this.pos}getBlockPos(){var e;this.updateBlockWrappers();let t=this.root;for(let i of this.wrappers){let r=t.lastChild;if(i.fromo.wrapper.eq(i.wrapper)))===null||e===void 0?void 0:e.dom);t.append(s),t=s}}return t}blockPosCovered(){let e=this.lastBlock;return e!=null&&!e.breakAfter&&(!e.isWidget()||(e.flags&160)>0)}getBuffer(e){let t=2|(e<0?16:32),i=this.cache.find(Wn,void 0,1);return i&&(i.flags=t),i||new Wn(t)}flushBuffer(){this.afterWidget&&!(this.afterWidget.flags&32)&&(this.afterWidget.parent.append(this.getBuffer(-1)),this.afterWidget=null)}}class Yf{constructor(e){this.skipCount=0,this.text="",this.textOff=0,this.cursor=e.iter()}skip(e){this.textOff+e<=this.text.length?this.textOff+=e:(this.skipCount+=e-(this.text.length-this.textOff),this.text="",this.textOff=0)}next(e){if(this.textOff==this.text.length){let{value:r,lineBreak:s,done:o}=this.cursor.next(this.skipCount);if(this.skipCount=0,o)throw new Error("Ran out of text content when drawing inline views");this.text=r;let l=this.textOff=Math.min(e,r.length);return s?null:r.slice(0,l)}let t=Math.min(this.text.length,this.textOff+e),i=this.text.slice(this.textOff,t);return this.textOff=t,i}}const Vn=[qt,ni,Nt,we,Wn,ht,tr];for(let n=0;n[]),this.index=Vn.map(()=>0),this.reused=new Map}add(e){let t=e.constructor.bucket,i=this.buckets[t];i.length<6?i.push(e):i[this.index[t]=(this.index[t]+1)%6]=e}find(e,t,i=2){let r=e.bucket,s=this.buckets[r],o=this.index[r];for(let l=s.length-1;l>=0;l--){let a=(l+o)%s.length,h=s[a];if((!t||t(h))&&!this.reused.has(h))return s.splice(a,1),a{if(this.cache.add(o),o.isComposite())return!1},enter:o=>this.cache.add(o),leave:()=>{},break:()=>{}}}run(e,t){let i=t&&this.getCompositionContext(t.text);for(let r=0,s=0,o=0;;){let l=or){let h=a-r;this.preserve(h,!o,!l),r=a,s+=h}if(!l)break;t&&l.fromA<=t.range.fromA&&l.toA>=t.range.toA?(this.forward(l.fromA,t.range.fromA,t.range.fromA{if(o.isWidget())if(this.openWidget)this.builder.continueWidget(a-l);else{let h=a>0||l{o.isLine()?this.builder.addLineStart(o.attrs,this.cache.maybeReuse(o)):(this.cache.add(o),o instanceof we&&r.unshift(o.mark)),this.openWidget=!1},leave:o=>{o.isLine()?r.length&&(r.length=s=0):o instanceof we&&(r.shift(),s=Math.min(s,r.length))},break:()=>{this.builder.addBreak(),this.openWidget=!1}}),this.text.skip(e)}emit(e,t){let i=null,r=this.builder,s=0,o=W.spans(this.decorations,e,t,{point:(l,a,h,c,f,u)=>{if(h instanceof zt){if(this.disallowBlockEffectsFor[u]){if(h.block)throw new RangeError("Block decorations may not be specified via plugins");if(a>this.view.state.doc.lineAt(l).to)throw new RangeError("Decorations that replace line breaks may not be specified via plugins")}if(s=c.length,f>c.length)r.continueWidget(a-l);else{let d=h.widget||(h.block?ri.block:ri.inline),p=Qf(h),m=this.cache.findWidget(d,a-l,p)||qt.of(d,this.view,a-l,p);h.block?(h.startSide>0&&r.addLineStartIfNotCovered(i),r.addBlockWidget(m)):(r.ensureLine(i),r.addInlineWidget(m,c,f))}i=null}else i=Zf(i,h);a>l&&this.text.skip(a-l)},span:(l,a,h,c)=>{for(let f=l;fs,this.openMarks=o}forward(e,t,i=1){t-e<=10?this.old.advance(t-e,i,this.reuseWalker):(this.old.advance(5,-1,this.reuseWalker),this.old.advance(t-e-10,-1),this.old.advance(5,i,this.reuseWalker))}getCompositionContext(e){let t=[],i=null;for(let r=e.parentNode;;r=r.parentNode){let s=ee.get(r);if(r==this.view.contentDOM)break;s instanceof we?t.push(s):s!=null&&s.isLine()?i=s:s instanceof ht||(r.nodeName=="DIV"&&!i&&r!=this.view.contentDOM?i=new ni(r,th):i||t.push(we.of(new Ki({tagName:r.nodeName.toLowerCase(),attributes:Af(r)}),r)))}return{line:i,marks:t}}}function Ho(n,e){let t=i=>{for(let r of i.children)if((e?r.isText():r.length)||t(r))return!0;return!1};return t(n)}function Qf(n){let e=n.isReplace?(n.startSide<0?64:0)|(n.endSide>0?128:0):n.startSide>0?32:16;return n.block&&(e|=256),e}const th={class:"cm-line"};function Zf(n,e){let t=e.spec.attributes,i=e.spec.class;return!t&&!i||(n||(n={class:"cm-line"}),t&&_s(t,n),i&&(n.class+=" "+i)),n}function eu(n){let e=[];for(let t=n.parents.length;t>1;t--){let i=t==n.parents.length?n.tile:n.parents[t].tile;i instanceof we&&e.push(i.mark)}return e}function xr(n){let e=ee.get(n);return e&&e.setDOM(n.cloneNode()),n}class ri extends Ui{constructor(e){super(),this.tag=e}eq(e){return e.tag==this.tag}toDOM(){return document.createElement(this.tag)}updateDOM(e){return e.nodeName.toLowerCase()==this.tag}get isHidden(){return!0}}ri.inline=new ri("span");ri.block=new ri("div");const vr=new class extends Ui{toDOM(){return document.createElement("br")}get isHidden(){return!0}get editable(){return!0}};class zo{constructor(e){this.view=e,this.decorations=[],this.blockWrappers=[],this.dynamicDecorationMap=[!1],this.domChanged=null,this.hasComposition=null,this.editContextFormatting=U.none,this.lastCompositionAfterCursor=!1,this.minWidth=0,this.minWidthFrom=0,this.minWidthTo=0,this.impreciseAnchor=null,this.impreciseHead=null,this.forceSelection=!1,this.lastUpdate=Date.now(),this.updateDeco(),this.tile=new tr(e,e.contentDOM),this.updateInner([new Ie(0,0,0,e.state.doc.length)],null)}update(e){var t;let i=e.changedRanges;this.minWidth>0&&i.length&&(i.every(({fromA:c,toA:f})=>fthis.minWidthTo)?(this.minWidthFrom=e.changes.mapPos(this.minWidthFrom,1),this.minWidthTo=e.changes.mapPos(this.minWidthTo,1)):this.minWidth=this.minWidthFrom=this.minWidthTo=0),this.updateEditContextFormatting(e);let r=-1;this.view.inputState.composing>=0&&!this.view.observer.editContext&&(!((t=this.domChanged)===null||t===void 0)&&t.newSel?r=this.domChanged.newSel.head:!hu(e.changes,this.hasComposition)&&!e.selectionSet&&(r=e.state.selection.main.head));let s=r>-1?iu(this.view,e.changes,r):null;if(this.domChanged=null,this.hasComposition){let{from:c,to:f}=this.hasComposition;i=new Ie(c,f,e.changes.mapPos(c,-1),e.changes.mapPos(f,1)).addToSet(i.slice())}this.hasComposition=s?{from:s.range.fromB,to:s.range.toB}:null,(O.ie||O.chrome)&&!s&&e&&e.state.doc.lines!=e.startState.doc.lines&&(this.forceSelection=!0);let o=this.decorations,l=this.blockWrappers;this.updateDeco();let a=su(o,this.decorations,e.changes);a.length&&(i=Ie.extendWithRanges(i,a));let h=lu(l,this.blockWrappers,e.changes);return h.length&&(i=Ie.extendWithRanges(i,h)),s&&!i.some(c=>c.fromA<=s.range.fromA&&c.toA>=s.range.toA)&&(i=s.range.addToSet(i.slice())),this.tile.flags&2&&i.length==0?!1:(this.updateInner(i,s),e.transactions.length&&(this.lastUpdate=Date.now()),!0)}updateInner(e,t){this.view.viewState.mustMeasureContent=!0;let{observer:i}=this.view;i.ignore(()=>{if(t||e.length){let o=this.tile,l=new Jf(this.view,o,this.blockWrappers,this.decorations,this.dynamicDecorationMap);t&&ee.get(t.text)&&l.cache.reused.set(ee.get(t.text),2),this.tile=l.run(e,t),ds(o,l.cache.reused)}this.tile.dom.style.height=this.view.viewState.contentHeight/this.view.scaleY+"px",this.tile.dom.style.flexBasis=this.minWidth?this.minWidth+"px":"";let s=O.chrome||O.ios?{node:i.selectionRange.focusNode,written:!1}:void 0;this.tile.sync(s),s&&(s.written||i.selectionRange.focusNode!=s.node||!this.tile.dom.contains(s.node))&&(this.forceSelection=!0),this.tile.dom.style.height=""});let r=[];if(this.view.viewport.from||this.view.viewport.to-1)&&Si(i,this.view.observer.selectionRange)&&!(r&&i.contains(r));if(!(s||t||o))return;let l=this.forceSelection;this.forceSelection=!1;let a=this.view.state.selection.main,h,c;if(a.empty?c=h=this.inlineDOMNearPos(a.anchor,a.assoc||1):(c=this.inlineDOMNearPos(a.head,a.head==a.from?1:-1),h=this.inlineDOMNearPos(a.anchor,a.anchor==a.from?1:-1)),O.gecko&&a.empty&&!this.hasComposition&&tu(h)){let u=document.createTextNode("");this.view.observer.ignore(()=>h.node.insertBefore(u,h.node.childNodes[h.offset]||null)),h=c=new $e(u,0),l=!0}let f=this.view.observer.selectionRange;(l||!f.focusNode||(!Ci(h.node,h.offset,f.anchorNode,f.anchorOffset)||!Ci(c.node,c.offset,f.focusNode,f.focusOffset))&&!this.suppressWidgetCursorChange(f,a))&&(this.view.observer.ignore(()=>{O.android&&O.chrome&&i.contains(f.focusNode)&&au(f.focusNode,i)&&(i.blur(),i.focus({preventScroll:!0}));let u=Ii(this.view.root);if(u)if(a.empty){if(O.gecko){let d=nu(h.node,h.offset);if(d&&d!=3){let p=(d==1?Pa:Na)(h.node,h.offset);p&&(h=new $e(p.node,p.offset))}}u.collapse(h.node,h.offset),a.bidiLevel!=null&&u.caretBidiLevel!==void 0&&(u.caretBidiLevel=a.bidiLevel)}else if(u.extend){u.collapse(h.node,h.offset);try{u.extend(c.node,c.offset)}catch{}}else{let d=document.createRange();a.anchor>a.head&&([h,c]=[c,h]),d.setEnd(c.node,c.offset),d.setStart(h.node,h.offset),u.removeAllRanges(),u.addRange(d)}o&&this.view.root.activeElement==i&&(i.blur(),r&&r.focus())}),this.view.observer.setSelectionRange(h,c)),this.impreciseAnchor=h.precise?null:new $e(f.anchorNode,f.anchorOffset),this.impreciseHead=c.precise?null:new $e(f.focusNode,f.focusOffset)}suppressWidgetCursorChange(e,t){return this.hasComposition&&t.empty&&Ci(e.focusNode,e.focusOffset,e.anchorNode,e.anchorOffset)&&this.posFromDOM(e.focusNode,e.focusOffset)==t.head}enforceCursorAssoc(){if(this.hasComposition)return;let{view:e}=this,t=e.state.selection.main,i=Ii(e.root),{anchorNode:r,anchorOffset:s}=e.observer.selectionRange;if(!i||!t.empty||!t.assoc||!i.modify)return;let o=this.lineAt(t.head,t.assoc);if(!o)return;let l=o.posAtStart;if(t.head==l||t.head==l+o.length)return;let a=this.coordsAt(t.head,-1),h=this.coordsAt(t.head,1);if(!a||!h||a.bottom>h.top)return;let c=this.domAtPos(t.head+t.assoc,t.assoc);i.collapse(c.node,c.offset),i.modify("move",t.assoc<0?"forward":"backward","lineboundary"),e.observer.readSelectionRange();let f=e.observer.selectionRange;e.docView.posFromDOM(f.anchorNode,f.anchorOffset)!=t.from&&i.collapse(r,s)}posFromDOM(e,t){let i=this.tile.nearest(e);if(!i)return this.tile.dom.compareDocumentPosition(e)&2?0:this.view.state.doc.length;let r=i.posAtStart;if(i.isComposite()){let s;if(e==i.dom)s=i.dom.childNodes[t];else{let o=ct(e)==0?0:t==0?-1:1;for(;;){let l=e.parentNode;if(l==i.dom)break;o==0&&l.firstChild!=l.lastChild&&(e==l.firstChild?o=-1:o=1),e=l}o<0?s=e:s=e.nextSibling}if(s==i.dom.firstChild)return r;for(;s&&!ee.get(s);)s=s.nextSibling;if(!s)return r+i.length;for(let o=0,l=r;;o++){let a=i.children[o];if(a.dom==s)return l;l+=a.length+a.breakAfter}}else return i.isText()?e==i.dom?r+t:r+(t?i.length:0):r}domAtPos(e,t){let{tile:i,offset:r}=this.tile.resolveBlock(e,t);return i.isWidget()?i.domPosFor(e,t):i.domIn(r,t)}inlineDOMNearPos(e,t){let i,r=-1,s=!1,o,l=-1,a=!1;return this.tile.blockTiles((h,c)=>{if(h.isWidget()){if(h.flags&32&&c>=e)return!0;h.flags&16&&(s=!0)}else{let f=c+h.length;if(c<=e&&(i=h,r=e-c,s=f=e&&!o&&(o=h,l=e-c,a=c>e),c>e&&o)return!0}}),!i&&!o?this.domAtPos(e,t):(s&&o?i=null:a&&i&&(o=null),i&&t<0||!o?i.domIn(r,t):o.domIn(l,t))}coordsAt(e,t){let{tile:i,offset:r}=this.tile.resolveBlock(e,t);return i.isWidget()?i.widget instanceof kr?null:i.coordsInWidget(r,t,!0):i.coordsIn(r,t)}lineAt(e,t){let{tile:i}=this.tile.resolveBlock(e,t);return i.isLine()?i:null}coordsForChar(e){let{tile:t,offset:i}=this.tile.resolveBlock(e,1);if(!t.isLine())return null;function r(s,o){if(s.isComposite())for(let l of s.children){if(l.length>=o){let a=r(l,o);if(a)return a}if(o-=l.length,o<0)break}else if(s.isText()&&oMath.max(this.view.scrollDOM.clientWidth,this.minWidth)+1,l=-1,a=this.view.textDirection==Z.LTR,h=0,c=(f,u,d)=>{for(let p=0;pr);p++){let m=f.children[p],g=u+m.length,y=m.dom.getBoundingClientRect(),{height:w}=y;if(d&&!p&&(h+=y.top-d.top),m instanceof ht)g>i&&c(m,u,y);else if(u>=i&&(h>0&&t.push(-h),t.push(w+h),h=0,o)){let T=m.dom.lastChild,D=T?Tn(T):[];if(D.length){let M=D[D.length-1],L=a?M.right-y.left:y.right-M.left;L>l&&(l=L,this.minWidth=s,this.minWidthFrom=u,this.minWidthTo=g)}}d&&p==f.children.length-1&&(h+=d.bottom-y.bottom),u=g+m.breakAfter}};return c(this.tile,0,null),t}textDirectionAt(e){let{tile:t}=this.tile.resolveBlock(e,1);return getComputedStyle(t.dom).direction=="rtl"?Z.RTL:Z.LTR}measureTextSize(){let e=this.tile.blockTiles(o=>{if(o.isLine()&&o.children.length&&o.length<=20){let l=0,a;for(let h of o.children){if(!h.isText()||/[^ -~]/.test(h.text))return;let c=Tn(h.dom);if(c.length!=1)return;l+=c[0].width,a=c[0].height}if(l)return{lineHeight:o.dom.getBoundingClientRect().height,charWidth:l/o.length,textHeight:a}}});if(e)return e;let t=document.createElement("div"),i,r,s;return t.className="cm-line",t.style.width="99999px",t.style.position="absolute",t.textContent="abc def ghi jkl mno pqr stu",this.view.observer.ignore(()=>{this.tile.dom.appendChild(t);let o=Tn(t.firstChild)[0];i=t.getBoundingClientRect().height,r=o&&o.width?o.width/27:7,s=o&&o.height?o.height:i,t.remove()}),{lineHeight:i,charWidth:r,textHeight:s}}computeBlockGapDeco(){let e=[],t=this.view.viewState;for(let i=0,r=0;;r++){let s=r==t.viewports.length?null:t.viewports[r],o=s?s.from-1:this.view.state.doc.length;if(o>i){let l=(t.lineBlockAt(o).bottom-t.lineBlockAt(i).top)/this.view.scaleY;e.push(U.replace({widget:new kr(l),block:!0,inclusive:!0,isBlockGap:!0}).range(i,o))}if(!s)break;i=s.to+1}return U.set(e)}updateDeco(){let e=1,t=this.view.state.facet(Zn).map(s=>(this.dynamicDecorationMap[e++]=typeof s=="function")?s(this.view):s),i=!1,r=this.view.state.facet(qs).map((s,o)=>{let l=typeof s=="function";return l&&(i=!0),l?s(this.view):s});for(r.length&&(this.dynamicDecorationMap[e++]=i,t.push(W.join(r))),this.decorations=[this.editContextFormatting,...t,this.computeBlockGapDeco(),this.view.viewState.lineGapDeco];etypeof s=="function"?s(this.view):s)}scrollIntoView(e){var t;if(e.isSnapshot){let c=this.view.viewState.lineBlockAt(e.range.head);this.view.scrollDOM.scrollTop=c.top-e.yMargin,this.view.scrollDOM.scrollLeft=e.xMargin;return}for(let c of this.view.state.facet(Ya))try{if(c(this.view,e.range,e))return!0}catch(f){De(this.view.state,f,"scroll handler")}let{range:i}=e,r=this.coordsAt(i.head,(t=i.assoc)!==null&&t!==void 0?t:i.empty?0:i.head>i.anchor?-1:1),s;if(!r)return;!i.empty&&(s=this.coordsAt(i.anchor,i.anchor>i.head?-1:1))&&(r={left:Math.min(r.left,s.left),top:Math.min(r.top,s.top),right:Math.max(r.right,s.right),bottom:Math.max(r.bottom,s.bottom)});let o=Us(this.view),l={left:r.left-o.left,top:r.top-o.top,right:r.right+o.right,bottom:r.bottom+o.bottom},{offsetWidth:a,offsetHeight:h}=this.view.scrollDOM;if(Df(this.view.scrollDOM,l,i.head1&&(r.top>window.pageYOffset+window.visualViewport.offsetTop+window.visualViewport.height||r.bottomi.isWidget()||i.children.some(t);return t(this.tile.resolveBlock(e,1).tile)}destroy(){ds(this.tile)}}function ds(n,e){let t=e==null?void 0:e.get(n);if(t!=1){t==null&&n.destroy();for(let i of n.children)ds(i,e)}}function tu(n){return n.node.nodeType==1&&n.node.firstChild&&(n.offset==0||n.node.childNodes[n.offset-1].contentEditable=="false")&&(n.offset==n.node.childNodes.length||n.node.childNodes[n.offset].contentEditable=="false")}function ih(n,e){let t=n.observer.selectionRange;if(!t.focusNode)return null;let i=Pa(t.focusNode,t.focusOffset),r=Na(t.focusNode,t.focusOffset),s=i||r;if(r&&i&&r.node!=i.node){let l=ee.get(r.node);if(!l||l.isText()&&l.text!=r.node.nodeValue)s=r;else if(n.docView.lastCompositionAfterCursor){let a=ee.get(i.node);!a||a.isText()&&a.text!=i.node.nodeValue||(s=r)}}if(n.docView.lastCompositionAfterCursor=s!=i,!s)return null;let o=e-s.offset;return{from:o,to:o+s.node.nodeValue.length,node:s.node}}function iu(n,e,t){let i=ih(n,t);if(!i)return null;let{node:r,from:s,to:o}=i,l=r.nodeValue;if(/[\n\r]/.test(l)||n.state.doc.sliceString(i.from,i.to)!=l)return null;let a=e.invertedDesc;return{range:new Ie(a.mapPos(s),a.mapPos(o),s,o),text:r}}function nu(n,e){return n.nodeType!=1?0:(e&&n.childNodes[e-1].contentEditable=="false"?1:0)|(e{ie.from&&(t=!0)}),t}class kr extends Ui{constructor(e){super(),this.height=e}toDOM(){let e=document.createElement("div");return e.className="cm-gap",this.updateDOM(e),e}eq(e){return e.height==this.height}updateDOM(e){return e.style.height=this.height+"px",!0}get editable(){return!0}get estimatedHeight(){return this.height}ignoreEvent(){return!1}}function cu(n,e,t=1){let i=n.charCategorizer(e),r=n.doc.lineAt(e),s=e-r.from;if(r.length==0)return b.cursor(e);s==0?t=1:s==r.length&&(t=-1);let o=s,l=s;t<0?o=pe(r.text,s,!1):l=pe(r.text,s);let a=i(r.text.slice(o,l));for(;o>0;){let h=pe(r.text,o,!1);if(i(r.text.slice(h,o))!=a)break;o=h}for(;ln.defaultLineHeight*1.5){let l=n.viewState.heightOracle.textHeight,a=Math.floor((r-t.top-(n.defaultLineHeight-l)*.5)/l);s+=a*n.viewState.heightOracle.lineLength}let o=n.state.sliceDoc(t.from,t.to);return t.from+bf(o,s,n.state.tabSize)}function uu(n,e,t){let i=n.lineBlockAt(e);if(Array.isArray(i.type)){let r;for(let s of i.type){if(s.from>e)break;if(!(s.toe)return s;(!r||s.type==ve.Text&&(r.type!=s.type||(t<0?s.frome)))&&(r=s)}}return r||i}return i}function du(n,e,t,i){let r=uu(n,e.head,e.assoc||-1),s=!i||r.type!=ve.Text||!(n.lineWrapping||r.widgetLineBreaks)?null:n.coordsAtPos(e.assoc<0&&e.head>r.from?e.head-1:e.head);if(s){let o=n.dom.getBoundingClientRect(),l=n.textDirectionAt(r.from),a=n.posAtCoords({x:t==(l==Z.LTR)?o.right-1:o.left+1,y:(s.top+s.bottom)/2});if(a!=null)return b.cursor(a,t?-1:1)}return b.cursor(t?r.to:r.from,t?-1:1)}function $o(n,e,t,i){let r=n.state.doc.lineAt(e.head),s=n.bidiSpans(r),o=n.textDirectionAt(r.from);for(let l=e,a=null;;){let h=Wf(r,s,o,l,t),c=Ha;if(!h){if(r.number==(t?n.state.doc.lines:1))return l;c=` +`,r=n.state.doc.line(r.number+(t?1:-1)),s=n.bidiSpans(r),h=n.visualLineSide(r,!t)}if(a){if(!a(c))return l}else{if(!i)return h;a=i(c)}l=h}}function pu(n,e,t){let i=n.state.charCategorizer(e),r=i(t);return s=>{let o=i(s);return r==Be.Space&&(r=o),r==o}}function mu(n,e,t,i){let r=e.head,s=t?1:-1;if(r==(t?n.state.doc.length:0))return b.cursor(r,e.assoc);let o=e.goalColumn,l,a=n.contentDOM.getBoundingClientRect(),h=n.coordsAtPos(r,e.assoc||((e.empty?t:e.head==e.from)?1:-1)),c=n.documentTop;if(h)o==null&&(o=h.left-a.left),l=s<0?h.top:h.bottom;else{let p=n.viewState.lineBlockAt(r);o==null&&(o=Math.min(a.right-a.left,n.defaultCharacterWidth*(r-p.from))),l=(s<0?p.top:p.bottom)+c}let f=a.left+o,u=n.viewState.heightOracle.textHeight>>1,d=i??u;for(let p=0;;p+=u){let m=l+(d+p)*s,g=ps(n,{x:f,y:m},!1,s);if(t?m>a.bottom:ml:w{if(e>s&&er(n)),t.from,e.head>t.from?-1:1);return i==t.from?t:b.cursor(i,in.viewState.docHeight)return new et(n.state.doc.length,-1);if(h=n.elementAtHeight(a),i==null)break;if(h.type==ve.Text){if(i<0?h.ton.viewport.to)break;let u=n.docView.coordsAt(i<0?h.from:h.to,i>0?-1:1);if(u&&(i<0?u.top<=a+s:u.bottom>=a+s))break}let f=n.viewState.heightOracle.textHeight/2;a=i>0?h.bottom+f:h.top-f}if(n.viewport.from>=h.to||n.viewport.to<=h.from){if(t)return null;if(h.type==ve.Text){let f=fu(n,r,h,o,l);return new et(f,f==h.from?1:-1)}}if(h.type!=ve.Text)return a<(h.top+h.bottom)/2?new et(h.from,1):new et(h.to,-1);let c=n.docView.lineAt(h.from,2);return(!c||c.length!=h.length)&&(c=n.docView.lineAt(h.from,-2)),new gu(n,o,l,n.textDirectionAt(h.from)).scanTile(c,h.from)}class gu{constructor(e,t,i,r){this.view=e,this.x=t,this.y=i,this.baseDir=r,this.line=null,this.spans=null}bidiSpansAt(e){return(!this.line||this.line.from>e||this.line.to1||i.length&&(i[0].level!=this.baseDir||i[0].to+r.from>1;t:if(s.has(p)){let g=i+Math.floor(Math.random()*d);for(let y=0;y1)){if(y.bottomthis.y)(!a||a.top>y.top)&&(a=y),w=-1;else{let T=y.left>this.x?this.x-y.left:y.right(d+d+p)/3)return this.y=l.bottom-1,this.scan(e,t);if(a&&a.top<(d+p+p)/3)return this.y=a.top+1,this.scan(e,t)}let u=(o?this.dirAt(e[h],1):this.baseDir)==Z.LTR;return{i:h,after:this.x>(f.left+f.right)/2==u}}scanText(e,t){let i=[];for(let s=0;s{let o=i[s]-t,l=i[s+1]-t;return Pi(e.dom,o,l).getClientRects()});return r.after?new et(i[r.i+1],-1):new et(i[r.i],1)}scanTile(e,t){if(!e.length)return new et(t,1);if(e.children.length==1){let l=e.children[0];if(l.isText())return this.scanText(l,t);if(l.isComposite())return this.scanTile(l,t)}let i=[t];for(let l=0,a=t;l{let a=e.children[l];return a.flags&48?null:(a.dom.nodeType==1?a.dom:Pi(a.dom,0,a.length)).getClientRects()}),s=e.children[r.i],o=i[r.i];return s.isText()?this.scanText(s,o):s.isComposite()?this.scanTile(s,o):r.after?new et(i[r.i+1],-1):new et(o,1)}}const Kt="￿";class yu{constructor(e,t){this.points=e,this.view=t,this.text="",this.lineSeparator=t.state.facet(q.lineSeparator)}append(e){this.text+=e}lineBreak(){this.text+=Kt}readRange(e,t){if(!e)return this;let i=e.parentNode;for(let r=e;;){this.findPointBefore(i,r);let s=this.text.length;this.readNode(r);let o=ee.get(r),l=r.nextSibling;if(l==t){o!=null&&o.breakAfter&&!l&&i!=this.view.contentDOM&&this.lineBreak();break}let a=ee.get(l);(o&&a?o.breakAfter:(o?o.breakAfter:Nn(r))||Nn(l)&&(r.nodeName!="BR"||o!=null&&o.isWidget())&&this.text.length>s)&&!wu(l,t)&&this.lineBreak(),r=l}return this.findPointBefore(i,t),this}readTextNode(e){let t=e.nodeValue;for(let i of this.points)i.node==e&&(i.pos=this.text.length+Math.min(i.offset,t.length));for(let i=0,r=this.lineSeparator?null:/\r\n?|\n/g;;){let s=-1,o=1,l;if(this.lineSeparator?(s=t.indexOf(this.lineSeparator,i),o=this.lineSeparator.length):(l=r.exec(t))&&(s=l.index,o=l[0].length),this.append(t.slice(i,s<0?t.length:s)),s<0)break;if(this.lineBreak(),o>1)for(let a of this.points)a.node==e&&a.pos>this.text.length&&(a.pos-=o-1);i=s+o}}readNode(e){let t=ee.get(e),i=t&&t.overrideDOMText;if(i!=null){this.findPointInside(e,i.length);for(let r=i.iter();!r.next().done;)r.lineBreak?this.lineBreak():this.append(r.value)}else e.nodeType==3?this.readTextNode(e):e.nodeName=="BR"?e.nextSibling&&this.lineBreak():e.nodeType==1&&this.readRange(e.firstChild,null)}findPointBefore(e,t){for(let i of this.points)i.node==e&&e.childNodes[i.offset]==t&&(i.pos=this.text.length)}findPointInside(e,t){for(let i of this.points)(e.nodeType==3?i.node==e:e.contains(i.node))&&(i.pos=this.text.length+(bu(e,i.node,i.offset)?t:0))}}function bu(n,e,t){for(;;){if(!e||t-1;let{impreciseHead:s,impreciseAnchor:o}=e.docView,l=e.state.selection;if(e.state.readOnly&&t>-1)this.newSel=null;else if(t>-1&&(this.bounds=rh(e.docView.tile,t,i,0))){let a=s||o?[]:ku(e),h=new yu(a,e);h.readRange(this.bounds.startDOM,this.bounds.endDOM),this.text=h.text,this.newSel=Su(a,this.bounds.from)}else{let a=e.observer.selectionRange,h=s&&s.node==a.focusNode&&s.offset==a.focusOffset||!as(e.contentDOM,a.focusNode)?l.main.head:e.docView.posFromDOM(a.focusNode,a.focusOffset),c=o&&o.node==a.anchorNode&&o.offset==a.anchorOffset||!as(e.contentDOM,a.anchorNode)?l.main.anchor:e.docView.posFromDOM(a.anchorNode,a.anchorOffset),f=e.viewport;if((O.ios||O.chrome)&&l.main.empty&&h!=c&&(f.from>0||f.to-1&&l.ranges.length>1)this.newSel=l.replaceRange(b.range(c,h));else if(e.lineWrapping&&c==h&&!(l.main.empty&&l.main.head==h)&&e.inputState.lastTouchTime>Date.now()-100){let u=e.coordsAtPos(h,-1),d=0;u&&(d=e.inputState.lastTouchY<=u.bottom?-1:1),this.newSel=b.create([b.cursor(h,d)])}else this.newSel=b.single(c,h)}}}function rh(n,e,t,i){if(n.isComposite()){let r=-1,s=-1,o=-1,l=-1;for(let a=0,h=i,c=i;at)return rh(f,e,t,h);if(u>=e&&r==-1&&(r=a,s=h),h>t&&f.dom.parentNode==n.dom){o=a,l=c;break}c=u,h=u+f.breakAfter}return{from:s,to:l<0?i+n.length:l,startDOM:(r?n.children[r-1].dom.nextSibling:null)||n.dom.firstChild,endDOM:o=0?n.children[o].dom:null}}else return n.isText()?{from:i,to:i+n.length,startDOM:n.dom,endDOM:n.dom.nextSibling}:null}function sh(n,e){let t,{newSel:i}=e,{state:r}=n,s=r.selection.main,o=n.inputState.lastKeyTime>Date.now()-100?n.inputState.lastKeyCode:-1;if(e.bounds){let{from:l,to:a}=e.bounds,h=s.from,c=null;(o===8||O.android&&e.text.length=l&&s.to<=a&&(e.typeOver||f!=e.text)&&f.slice(0,s.from-l)==e.text.slice(0,s.from-l)&&f.slice(s.to-l)==e.text.slice(u=e.text.length-(f.length-(s.to-l)))?t={from:s.from,to:s.to,insert:H.of(e.text.slice(s.from-l,u).split(Kt))}:(d=oh(f,e.text,h-l,c))&&(O.chrome&&o==13&&d.toB==d.from+2&&e.text.slice(d.from,d.toB)==Kt+Kt&&d.toB--,t={from:l+d.from,to:l+d.toA,insert:H.of(e.text.slice(d.from,d.toB).split(Kt))})}else i&&(!n.hasFocus&&r.facet(lt)||Hn(i,s))&&(i=null);if(!t&&!i)return!1;if((O.mac||O.android)&&t&&t.from==t.to&&t.from==s.head-1&&/^\. ?$/.test(t.insert.toString())&&n.contentDOM.getAttribute("autocorrect")=="off"?(i&&t.insert.length==2&&(i=b.single(i.main.anchor-1,i.main.head-1)),t={from:t.from,to:t.to,insert:H.of([t.insert.toString().replace("."," ")])}):r.doc.lineAt(s.from).toDate.now()-50?t={from:s.from,to:s.to,insert:r.toText(n.inputState.insertingText)}:O.chrome&&t&&t.from==t.to&&t.from==s.head&&t.insert.toString()==` + `&&n.lineWrapping&&(i&&(i=b.single(i.main.anchor-1,i.main.head-1)),t={from:s.from,to:s.to,insert:H.of([" "])}),t)return Ks(n,t,i,o);if(i&&!Hn(i,s)){let l=!1,a="select";return n.inputState.lastSelectionTime>Date.now()-50&&(n.inputState.lastSelectionOrigin=="select"&&(l=!0),a=n.inputState.lastSelectionOrigin,a=="select.pointer"&&(i=nh(r.facet(Gi).map(h=>h(n)),i))),n.dispatch({selection:i,scrollIntoView:l,userEvent:a}),!0}else return!1}function Ks(n,e,t,i=-1){if(O.ios&&n.inputState.flushIOSKey(e))return!0;let r=n.state.selection.main;if(O.android&&(e.to==r.to&&(e.from==r.from||e.from==r.from-1&&n.state.sliceDoc(e.from,r.from)==" ")&&e.insert.length==1&&e.insert.lines==2&&Zt(n.contentDOM,"Enter",13)||(e.from==r.from-1&&e.to==r.to&&e.insert.length==0||i==8&&e.insert.lengthr.head)&&Zt(n.contentDOM,"Backspace",8)||e.from==r.from&&e.to==r.to+1&&e.insert.length==0&&Zt(n.contentDOM,"Delete",46)))return!0;let s=e.insert.toString();n.inputState.composing>=0&&n.inputState.composing++;let o,l=()=>o||(o=vu(n,e,t));return n.state.facet(Ka).some(a=>a(n,e.from,e.to,s,l))||n.dispatch(l()),!0}function vu(n,e,t){let i,r=n.state,s=r.selection.main,o=-1;if(e.from==e.to&&e.froms.to){let a=e.fromf(n)),h,a);e.from==c&&(o=c)}if(o>-1)i={changes:e,selection:b.cursor(e.from+e.insert.length,-1)};else if(e.from>=s.from&&e.to<=s.to&&e.to-e.from>=(s.to-s.from)/3&&(!t||t.main.empty&&t.main.from==e.from+e.insert.length)&&n.inputState.composing<0){let a=s.frome.to?r.sliceDoc(e.to,s.to):"";i=r.replaceSelection(n.state.toText(a+e.insert.sliceString(0,void 0,n.state.lineBreak)+h))}else{let a=r.changes(e),h=t&&t.main.to<=a.newLength?t.main:void 0;if(r.selection.ranges.length>1&&(n.inputState.composing>=0||n.inputState.compositionPendingChange)&&e.to<=s.to+10&&e.to>=s.to-10){let c=n.state.sliceDoc(e.from,e.to),f,u=t&&ih(n,t.main.head);if(u){let p=e.insert.length-(e.to-e.from);f={from:u.from,to:u.to-p}}else f=n.state.doc.lineAt(s.head);let d=s.to-e.to;i=r.changeByRange(p=>{if(p.from==s.from&&p.to==s.to)return{changes:a,range:h||p.map(a)};let m=p.to-d,g=m-c.length;if(n.state.sliceDoc(g,m)!=c||m>=f.from&&g<=f.to)return{range:p};let y=r.changes({from:g,to:m,insert:e.insert}),w=p.to-s.to;return{changes:y,range:h?b.range(Math.max(0,h.anchor+w),Math.max(0,h.head+w)):p.map(y)}})}else i={changes:a,selection:h&&r.selection.replaceRange(h)}}let l="input.type";return(n.composing||n.inputState.compositionPendingChange&&n.inputState.compositionEndedAt>Date.now()-50)&&(n.inputState.compositionPendingChange=!1,l+=".compose",n.inputState.compositionFirstChange&&(l+=".start",n.inputState.compositionFirstChange=!1)),r.update(i,{userEvent:l,scrollIntoView:!0})}function oh(n,e,t,i){let r=Math.min(n.length,e.length),s=0;for(;s0&&l>0&&n.charCodeAt(o-1)==e.charCodeAt(l-1);)o--,l--;if(i=="end"){let a=Math.max(0,s-Math.min(o,l));t-=o+a-s}if(o=o?s-t:0;s-=a,l=s+(l-o),o=s}else if(l=l?s-t:0;s-=a,o=s+(o-l),l=s}return{from:s,toA:o,toB:l}}function ku(n){let e=[];if(n.root.activeElement!=n.contentDOM)return e;let{anchorNode:t,anchorOffset:i,focusNode:r,focusOffset:s}=n.observer.selectionRange;return t&&(e.push(new qo(t,i)),(r!=t||s!=i)&&e.push(new qo(r,s))),e}function Su(n,e){if(n.length==0)return null;let t=n[0].pos,i=n.length==2?n[1].pos:t;return t>-1&&i>-1?b.single(t+e,i+e):null}function Hn(n,e){return e.head==n.main.head&&e.anchor==n.main.anchor}class Cu{setSelectionOrigin(e){this.lastSelectionOrigin=e,this.lastSelectionTime=Date.now()}constructor(e){this.view=e,this.lastKeyCode=0,this.lastKeyTime=0,this.lastTouchTime=0,this.lastTouchX=0,this.lastTouchY=0,this.lastFocusTime=0,this.lastScrollTop=0,this.lastScrollLeft=0,this.lastWheelEvent=0,this.pendingIOSKey=void 0,this.tabFocusMode=-1,this.lastSelectionOrigin=null,this.lastSelectionTime=0,this.lastContextMenu=0,this.scrollHandlers=[],this.handlers=Object.create(null),this.composing=-1,this.compositionFirstChange=null,this.compositionEndedAt=0,this.compositionPendingKey=!1,this.compositionPendingChange=!1,this.insertingText="",this.insertingTextAt=0,this.mouseSelection=null,this.draggedContent=null,this.handleEvent=this.handleEvent.bind(this),this.notifiedFocused=e.hasFocus,O.safari&&e.contentDOM.addEventListener("input",()=>null),O.gecko&&Wu(e.contentDOM.ownerDocument)}handleEvent(e){!Ru(this.view,e)||this.ignoreDuringComposition(e)||e.type=="keydown"&&this.keydown(e)||(this.view.updateState!=0?Promise.resolve().then(()=>this.runHandlers(e.type,e)):this.runHandlers(e.type,e))}runHandlers(e,t){let i=this.handlers[e];if(i){for(let r of i.observers)r(this.view,t);for(let r of i.handlers){if(t.defaultPrevented)break;if(r(this.view,t)){t.preventDefault();break}}}}ensureHandlers(e){let t=Au(e),i=this.handlers,r=this.view.contentDOM;for(let s in t)if(s!="scroll"){let o=!t[s].handlers.length,l=i[s];l&&o!=!l.handlers.length&&(r.removeEventListener(s,this.handleEvent),l=null),l||r.addEventListener(s,this.handleEvent,{passive:o})}for(let s in i)s!="scroll"&&!t[s]&&r.removeEventListener(s,this.handleEvent);this.handlers=t}keydown(e){if(this.lastKeyCode=e.keyCode,this.lastKeyTime=Date.now(),e.keyCode==9&&this.tabFocusMode>-1&&(!this.tabFocusMode||Date.now()<=this.tabFocusMode))return!0;if(this.tabFocusMode>0&&e.keyCode!=27&&ah.indexOf(e.keyCode)<0&&(this.tabFocusMode=-1),O.android&&O.chrome&&!e.synthetic&&(e.keyCode==13||e.keyCode==8))return this.view.observer.delayAndroidKey(e.key,e.keyCode),!0;let t;return O.ios&&!e.synthetic&&!e.altKey&&!e.metaKey&&!e.shiftKey&&((t=lh.find(i=>i.keyCode==e.keyCode))&&!e.ctrlKey||Tu.indexOf(e.key)>-1&&e.ctrlKey)?(this.pendingIOSKey=t||e,setTimeout(()=>this.flushIOSKey(),250),!0):(e.keyCode!=229&&this.view.observer.forceFlush(),!1)}flushIOSKey(e){let t=this.pendingIOSKey;return!t||t.key=="Enter"&&e&&e.from0?!0:O.safari&&!O.ios&&this.compositionPendingKey&&Date.now()-this.compositionEndedAt<100?(this.compositionPendingKey=!1,!0):!1}startMouseSelection(e){this.mouseSelection&&this.mouseSelection.destroy(),this.mouseSelection=e}update(e){this.view.observer.update(e),this.mouseSelection&&this.mouseSelection.update(e),this.draggedContent&&e.docChanged&&(this.draggedContent=this.draggedContent.map(e.changes)),e.transactions.length&&(this.lastKeyCode=this.lastSelectionTime=0)}destroy(){this.mouseSelection&&this.mouseSelection.destroy()}}function Uo(n,e){return(t,i)=>{try{return e.call(n,i,t)}catch(r){De(t.state,r)}}}function Au(n){let e=Object.create(null);function t(i){return e[i]||(e[i]={observers:[],handlers:[]})}for(let i of n){let r=i.spec,s=r&&r.plugin.domEventHandlers,o=r&&r.plugin.domEventObservers;if(s)for(let l in s){let a=s[l];a&&t(l).handlers.push(Uo(i.value,a))}if(o)for(let l in o){let a=o[l];a&&t(l).observers.push(Uo(i.value,a))}}for(let i in Ue)t(i).handlers.push(Ue[i]);for(let i in ke)t(i).observers.push(ke[i]);return e}const lh=[{key:"Backspace",keyCode:8,inputType:"deleteContentBackward"},{key:"Enter",keyCode:13,inputType:"insertParagraph"},{key:"Enter",keyCode:13,inputType:"insertLineBreak"},{key:"Delete",keyCode:46,inputType:"deleteContentForward"}],Tu="dthko",ah=[16,17,18,20,91,92,224,225],ln=6;function an(n){return Math.max(0,n)*.7+8}function Mu(n,e){return Math.max(Math.abs(n.clientX-e.clientX),Math.abs(n.clientY-e.clientY))}class Du{constructor(e,t,i,r){this.view=e,this.startEvent=t,this.style=i,this.mustSelect=r,this.scrollSpeed={x:0,y:0},this.scrolling=-1,this.lastEvent=t,this.scrollParents=Ra(e.contentDOM),this.atoms=e.state.facet(Gi).map(o=>o(e));let s=e.contentDOM.ownerDocument;s.addEventListener("mousemove",this.move=this.move.bind(this)),s.addEventListener("mouseup",this.up=this.up.bind(this)),this.extend=t.shiftKey,this.multiple=e.state.facet(q.allowMultipleSelections)&&Eu(e,t),this.dragging=Lu(e,t)&&fh(t)==1?null:!1}start(e){this.dragging===!1&&this.select(e)}move(e){if(e.buttons==0)return this.destroy();if(this.dragging||this.dragging==null&&Mu(this.startEvent,e)<10)return;this.select(this.lastEvent=e);let t=0,i=0,r=0,s=0,o=this.view.win.innerWidth,l=this.view.win.innerHeight;this.scrollParents.x&&({left:r,right:o}=this.scrollParents.x.getBoundingClientRect()),this.scrollParents.y&&({top:s,bottom:l}=this.scrollParents.y.getBoundingClientRect());let a=Us(this.view);e.clientX-a.left<=r+ln?t=-an(r-e.clientX):e.clientX+a.right>=o-ln&&(t=an(e.clientX-o)),e.clientY-a.top<=s+ln?i=-an(s-e.clientY):e.clientY+a.bottom>=l-ln&&(i=an(e.clientY-l)),this.setScrollSpeed(t,i)}up(e){this.dragging==null&&this.select(this.lastEvent),this.dragging||e.preventDefault(),this.destroy()}destroy(){this.setScrollSpeed(0,0);let e=this.view.contentDOM.ownerDocument;e.removeEventListener("mousemove",this.move),e.removeEventListener("mouseup",this.up),this.view.inputState.mouseSelection=this.view.inputState.draggedContent=null}setScrollSpeed(e,t){this.scrollSpeed={x:e,y:t},e||t?this.scrolling<0&&(this.scrolling=setInterval(()=>this.scroll(),50)):this.scrolling>-1&&(clearInterval(this.scrolling),this.scrolling=-1)}scroll(){let{x:e,y:t}=this.scrollSpeed;e&&this.scrollParents.x&&(this.scrollParents.x.scrollLeft+=e,e=0),t&&this.scrollParents.y&&(this.scrollParents.y.scrollTop+=t,t=0),(e||t)&&this.view.win.scrollBy(e,t),this.dragging===!1&&this.select(this.lastEvent)}select(e){let{view:t}=this,i=nh(this.atoms,this.style.get(e,this.extend,this.multiple));(this.mustSelect||!i.eq(t.state.selection,this.dragging===!1))&&this.view.dispatch({selection:i,userEvent:"select.pointer"}),this.mustSelect=!1}update(e){e.transactions.some(t=>t.isUserEvent("input.type"))?this.destroy():this.style.update(e)&&setTimeout(()=>this.select(this.lastEvent),20)}}function Eu(n,e){let t=n.state.facet(za);return t.length?t[0](e):O.mac?e.metaKey:e.ctrlKey}function Ou(n,e){let t=n.state.facet($a);return t.length?t[0](e):O.mac?!e.altKey:!e.ctrlKey}function Lu(n,e){let{main:t}=n.state.selection;if(t.empty)return!1;let i=Ii(n.root);if(!i||i.rangeCount==0)return!0;let r=i.getRangeAt(0).getClientRects();for(let s=0;s=e.clientX&&o.top<=e.clientY&&o.bottom>=e.clientY)return!0}return!1}function Ru(n,e){if(!e.bubbles)return!0;if(e.defaultPrevented)return!1;for(let t=e.target,i;t!=n.contentDOM;t=t.parentNode)if(!t||t.nodeType==11||(i=ee.get(t))&&i.isWidget()&&!i.isHidden&&i.widget.ignoreEvent(e))return!1;return!0}const Ue=Object.create(null),ke=Object.create(null),hh=O.ie&&O.ie_version<15||O.ios&&O.webkit_version<604;function Bu(n){let e=n.dom.parentNode;if(!e)return;let t=e.appendChild(document.createElement("textarea"));t.style.cssText="position: fixed; left: -10000px; top: 10px",t.focus(),setTimeout(()=>{n.focus(),t.remove(),ch(n,t.value)},50)}function ir(n,e,t){for(let i of n.facet(e))t=i(t,n);return t}function ch(n,e){e=ir(n.state,Hs,e);let{state:t}=n,i,r=1,s=t.toText(e),o=s.lines==t.selection.ranges.length;if(ms!=null&&t.selection.ranges.every(a=>a.empty)&&ms==s.toString()){let a=-1;i=t.changeByRange(h=>{let c=t.doc.lineAt(h.from);if(c.from==a)return{range:h};a=c.from;let f=t.toText((o?s.line(r++).text:e)+t.lineBreak);return{changes:{from:c.from,insert:f},range:b.cursor(h.from+f.length)}})}else o?i=t.changeByRange(a=>{let h=s.line(r++);return{changes:{from:a.from,to:a.to,insert:h.text},range:b.cursor(a.from+h.length)}}):i=t.replaceSelection(s);n.dispatch(i,{userEvent:"input.paste",scrollIntoView:!0})}ke.scroll=n=>{n.inputState.lastScrollTop=n.scrollDOM.scrollTop,n.inputState.lastScrollLeft=n.scrollDOM.scrollLeft};ke.wheel=ke.mousewheel=n=>{n.inputState.lastWheelEvent=Date.now()};Ue.keydown=(n,e)=>(n.inputState.setSelectionOrigin("select"),e.keyCode==27&&n.inputState.tabFocusMode!=0&&(n.inputState.tabFocusMode=Date.now()+2e3),!1);ke.touchstart=(n,e)=>{let t=n.inputState,i=e.targetTouches[0];t.lastTouchTime=Date.now(),i&&(t.lastTouchX=i.clientX,t.lastTouchY=i.clientY),t.setSelectionOrigin("select.pointer")};ke.touchmove=n=>{n.inputState.setSelectionOrigin("select.pointer")};Ue.mousedown=(n,e)=>{if(n.observer.flush(),n.inputState.lastTouchTime>Date.now()-2e3)return!1;let t=null;for(let i of n.state.facet(qa))if(t=i(n,e),t)break;if(!t&&e.button==0&&(t=Pu(n,e)),t){let i=!n.hasFocus;n.inputState.startMouseSelection(new Du(n,e,t,i)),i&&n.observer.ignore(()=>{Ba(n.contentDOM);let s=n.root.activeElement;s&&!s.contains(n.contentDOM)&&s.blur()});let r=n.inputState.mouseSelection;if(r)return r.start(e),r.dragging===!1}else n.inputState.setSelectionOrigin("select.pointer");return!1};function Ko(n,e,t,i){if(i==1)return b.cursor(e,t);if(i==2)return cu(n.state,e,t);{let r=n.docView.lineAt(e,t),s=n.state.doc.lineAt(r?r.posAtEnd:e),o=r?r.posAtStart:s.from,l=r?r.posAtEnd:s.to;return lDate.now()-400&&Math.abs(e.clientX-n.clientX)<2&&Math.abs(e.clientY-n.clientY)<2?(Go+1)%3:1}function Pu(n,e){let t=n.posAndSideAtCoords({x:e.clientX,y:e.clientY},!1),i=fh(e),r=n.state.selection;return{update(s){s.docChanged&&(t.pos=s.changes.mapPos(t.pos),r=r.map(s.changes))},get(s,o,l){let a=n.posAndSideAtCoords({x:s.clientX,y:s.clientY},!1),h,c=Ko(n,a.pos,a.assoc,i);if(t.pos!=a.pos&&!o){let f=Ko(n,t.pos,t.assoc,i),u=Math.min(f.from,c.from),d=Math.max(f.to,c.to);c=u1&&(h=Nu(r,a.pos))?h:l?r.addRange(c):b.create([c])}}}function Nu(n,e){for(let t=0;t=e)return b.create(n.ranges.slice(0,t).concat(n.ranges.slice(t+1)),n.mainIndex==t?0:n.mainIndex-(n.mainIndex>t?1:0))}return null}Ue.dragstart=(n,e)=>{let{selection:{main:t}}=n.state;if(e.target.draggable){let r=n.docView.tile.nearest(e.target);if(r&&r.isWidget()){let s=r.posAtStart,o=s+r.length;(s>=t.to||o<=t.from)&&(t=b.range(s,o))}}let{inputState:i}=n;return i.mouseSelection&&(i.mouseSelection.dragging=!0),i.draggedContent=t,e.dataTransfer&&(e.dataTransfer.setData("Text",ir(n.state,zs,n.state.sliceDoc(t.from,t.to))),e.dataTransfer.effectAllowed="copyMove"),!1};Ue.dragend=n=>(n.inputState.draggedContent=null,!1);function Xo(n,e,t,i){if(t=ir(n.state,Hs,t),!t)return;let r=n.posAtCoords({x:e.clientX,y:e.clientY},!1),{draggedContent:s}=n.inputState,o=i&&s&&Ou(n,e)?{from:s.from,to:s.to}:null,l={from:r,insert:t},a=n.state.changes(o?[o,l]:l);n.focus(),n.dispatch({changes:a,selection:{anchor:a.mapPos(r,-1),head:a.mapPos(r,1)},userEvent:o?"move.drop":"input.drop"}),n.inputState.draggedContent=null}Ue.drop=(n,e)=>{if(!e.dataTransfer)return!1;if(n.state.readOnly)return!0;let t=e.dataTransfer.files;if(t&&t.length){let i=Array(t.length),r=0,s=()=>{++r==t.length&&Xo(n,e,i.filter(o=>o!=null).join(n.state.lineBreak),!1)};for(let o=0;o{/[\x00-\x08\x0e-\x1f]{2}/.test(l.result)||(i[o]=l.result),s()},l.readAsText(t[o])}return!0}else{let i=e.dataTransfer.getData("Text");if(i)return Xo(n,e,i,!0),!0}return!1};Ue.paste=(n,e)=>{if(n.state.readOnly)return!0;n.observer.flush();let t=hh?null:e.clipboardData;return t?(ch(n,t.getData("text/plain")||t.getData("text/uri-list")),!0):(Bu(n),!1)};function Fu(n,e){let t=n.dom.parentNode;if(!t)return;let i=t.appendChild(document.createElement("textarea"));i.style.cssText="position: fixed; left: -10000px; top: 10px",i.value=e,i.focus(),i.selectionEnd=e.length,i.selectionStart=0,setTimeout(()=>{i.remove(),n.focus()},50)}function _u(n){let e=[],t=[],i=!1;for(let r of n.selection.ranges)r.empty||(e.push(n.sliceDoc(r.from,r.to)),t.push(r));if(!e.length){let r=-1;for(let{from:s}of n.selection.ranges){let o=n.doc.lineAt(s);o.number>r&&(e.push(o.text),t.push({from:o.from,to:Math.min(n.doc.length,o.to+1)})),r=o.number}i=!0}return{text:ir(n,zs,e.join(n.lineBreak)),ranges:t,linewise:i}}let ms=null;Ue.copy=Ue.cut=(n,e)=>{if(!Si(n.contentDOM,n.observer.selectionRange))return!1;let{text:t,ranges:i,linewise:r}=_u(n.state);if(!t&&!r)return!1;ms=r?t:null,e.type=="cut"&&!n.state.readOnly&&n.dispatch({changes:i,scrollIntoView:!0,userEvent:"delete.cut"});let s=hh?null:e.clipboardData;return s?(s.clearData(),s.setData("text/plain",t),!0):(Fu(n,t),!1)};const uh=ft.define();function dh(n,e){let t=[];for(let i of n.facet(ja)){let r=i(n,e);r&&t.push(r)}return t.length?n.update({effects:t,annotations:uh.of(!0)}):null}function ph(n){setTimeout(()=>{let e=n.hasFocus;if(e!=n.inputState.notifiedFocused){let t=dh(n.state,e);t?n.dispatch(t):n.update([])}},10)}ke.focus=n=>{n.inputState.lastFocusTime=Date.now(),!n.scrollDOM.scrollTop&&(n.inputState.lastScrollTop||n.inputState.lastScrollLeft)&&(n.scrollDOM.scrollTop=n.inputState.lastScrollTop,n.scrollDOM.scrollLeft=n.inputState.lastScrollLeft),ph(n)};ke.blur=n=>{n.observer.clearSelectionRange(),ph(n)};ke.compositionstart=ke.compositionupdate=n=>{n.observer.editContext||(n.inputState.compositionFirstChange==null&&(n.inputState.compositionFirstChange=!0),n.inputState.composing<0&&(n.inputState.composing=0))};ke.compositionend=n=>{n.observer.editContext||(n.inputState.composing=-1,n.inputState.compositionEndedAt=Date.now(),n.inputState.compositionPendingKey=!0,n.inputState.compositionPendingChange=n.observer.pendingRecords().length>0,n.inputState.compositionFirstChange=null,O.chrome&&O.android?n.observer.flushSoon():n.inputState.compositionPendingChange?Promise.resolve().then(()=>n.observer.flush()):setTimeout(()=>{n.inputState.composing<0&&n.docView.hasComposition&&n.update([])},50))};ke.contextmenu=n=>{n.inputState.lastContextMenu=Date.now()};Ue.beforeinput=(n,e)=>{var t,i;if((e.inputType=="insertText"||e.inputType=="insertCompositionText")&&(n.inputState.insertingText=e.data,n.inputState.insertingTextAt=Date.now()),e.inputType=="insertReplacementText"&&n.observer.editContext){let s=(t=e.dataTransfer)===null||t===void 0?void 0:t.getData("text/plain"),o=e.getTargetRanges();if(s&&o.length){let l=o[0],a=n.posAtDOM(l.startContainer,l.startOffset),h=n.posAtDOM(l.endContainer,l.endOffset);return Ks(n,{from:a,to:h,insert:n.state.toText(s)},null),!0}}let r;if(O.chrome&&O.android&&(r=lh.find(s=>s.inputType==e.inputType))&&(n.observer.delayAndroidKey(r.key,r.keyCode),r.key=="Backspace"||r.key=="Delete")){let s=((i=window.visualViewport)===null||i===void 0?void 0:i.height)||0;setTimeout(()=>{var o;(((o=window.visualViewport)===null||o===void 0?void 0:o.height)||0)>s+10&&n.hasFocus&&(n.contentDOM.blur(),n.focus())},100)}return O.ios&&e.inputType=="deleteContentForward"&&n.observer.flushSoon(),O.safari&&e.inputType=="insertText"&&n.inputState.composing>=0&&setTimeout(()=>ke.compositionend(n,e),20),!1};const Jo=new Set;function Wu(n){Jo.has(n)||(Jo.add(n),n.addEventListener("copy",()=>{}),n.addEventListener("cut",()=>{}))}const Qo=["pre-wrap","normal","pre-line","break-spaces"];let si=!1;function Zo(){si=!1}class Vu{constructor(e){this.lineWrapping=e,this.doc=H.empty,this.heightSamples={},this.lineHeight=14,this.charWidth=7,this.textHeight=14,this.lineLength=30}heightForGap(e,t){let i=this.doc.lineAt(t).number-this.doc.lineAt(e).number+1;return this.lineWrapping&&(i+=Math.max(0,Math.ceil((t-e-i*this.lineLength*.5)/this.lineLength))),this.lineHeight*i}heightForLine(e){return this.lineWrapping?(1+Math.max(0,Math.ceil((e-this.lineLength)/Math.max(1,this.lineLength-5))))*this.lineHeight:this.lineHeight}setDoc(e){return this.doc=e,this}mustRefreshForWrapping(e){return Qo.indexOf(e)>-1!=this.lineWrapping}mustRefreshForHeights(e){let t=!1;for(let i=0;i-1,a=Math.abs(t-this.lineHeight)>.3||this.lineWrapping!=l||Math.abs(i-this.charWidth)>.1;if(this.lineWrapping=l,this.lineHeight=t,this.charWidth=i,this.textHeight=r,this.lineLength=s,a){this.heightSamples={};for(let h=0;h0}set outdated(e){this.flags=(e?2:0)|this.flags&-3}setHeight(e){this.height!=e&&(Math.abs(this.height-e)>Mn&&(si=!0),this.height=e)}replace(e,t,i){return ye.of(i)}decomposeLeft(e,t){t.push(this)}decomposeRight(e,t){t.push(this)}applyChanges(e,t,i,r){let s=this,o=i.doc;for(let l=r.length-1;l>=0;l--){let{fromA:a,toA:h,fromB:c,toB:f}=r[l],u=s.lineAt(a,X.ByPosNoHeight,i.setDoc(t),0,0),d=u.to>=h?u:s.lineAt(h,X.ByPosNoHeight,i,0,0);for(f+=d.to-h,h=d.to;l>0&&u.from<=r[l-1].toA;)a=r[l-1].fromA,c=r[l-1].fromB,l--,as*2){let l=e[t-1];l.break?e.splice(--t,1,l.left,null,l.right):e.splice(--t,1,l.left,l.right),i+=1+l.break,r-=l.size}else if(s>r*2){let l=e[i];l.break?e.splice(i,1,l.left,null,l.right):e.splice(i,1,l.left,l.right),i+=2+l.break,s-=l.size}else break;else if(r=s&&o(this.lineAt(0,X.ByPos,i,r,s))}setMeasuredHeight(e){let t=e.heights[e.index++];t<0?(this.spaceAbove=-t,t=e.heights[e.index++]):this.spaceAbove=0,this.setHeight(t)}updateHeight(e,t=0,i=!1,r){return r&&r.from<=t&&r.more&&this.setMeasuredHeight(r),this.outdated=!1,this}toString(){return`block(${this.length})`}}class Me extends mh{constructor(e,t,i){super(e,t,null),this.collapsed=0,this.widgetHeight=0,this.breaks=0,this.spaceAbove=i}mainBlock(e,t){return new ze(t,this.length,e+this.spaceAbove,this.height-this.spaceAbove,this.breaks)}replace(e,t,i){let r=i[0];return i.length==1&&(r instanceof Me||r instanceof he&&r.flags&4)&&Math.abs(this.length-r.length)<10?(r instanceof he?r=new Me(r.length,this.height,this.spaceAbove):r.height=this.height,this.outdated||(r.outdated=!1),r):ye.of(i)}updateHeight(e,t=0,i=!1,r){return r&&r.from<=t&&r.more?this.setMeasuredHeight(r):(i||this.outdated)&&(this.spaceAbove=0,this.setHeight(Math.max(this.widgetHeight,e.heightForLine(this.length-this.collapsed))+this.breaks*e.lineHeight)),this.outdated=!1,this}toString(){return`line(${this.length}${this.collapsed?-this.collapsed:""}${this.widgetHeight?":"+this.widgetHeight:""})`}}class he extends ye{constructor(e){super(e,0)}heightMetrics(e,t){let i=e.doc.lineAt(t).number,r=e.doc.lineAt(t+this.length).number,s=r-i+1,o,l=0;if(e.lineWrapping){let a=Math.min(this.height,e.lineHeight*s);o=a/s,this.length>s+1&&(l=(this.height-a)/(this.length-s-1))}else o=this.height/s;return{firstLine:i,lastLine:r,perLine:o,perChar:l}}blockAt(e,t,i,r){let{firstLine:s,lastLine:o,perLine:l,perChar:a}=this.heightMetrics(t,r);if(t.lineWrapping){let h=r+(e0){let s=i[i.length-1];s instanceof he?i[i.length-1]=new he(s.length+r):i.push(null,new he(r-1))}if(e>0){let s=i[0];s instanceof he?i[0]=new he(e+s.length):i.unshift(new he(e-1),null)}return ye.of(i)}decomposeLeft(e,t){t.push(new he(e-1),null)}decomposeRight(e,t){t.push(null,new he(this.length-e-1))}updateHeight(e,t=0,i=!1,r){let s=t+this.length;if(r&&r.from<=t+this.length&&r.more){let o=[],l=Math.max(t,r.from),a=-1;for(r.from>t&&o.push(new he(r.from-t-1).updateHeight(e,t));l<=s&&r.more;){let c=e.doc.lineAt(l).length;o.length&&o.push(null);let f=r.heights[r.index++],u=0;f<0&&(u=-f,f=r.heights[r.index++]),a==-1?a=f:Math.abs(f-a)>=Mn&&(a=-2);let d=new Me(c,f,u);d.outdated=!1,o.push(d),l+=c+1}l<=s&&o.push(null,new he(s-l).updateHeight(e,l));let h=ye.of(o);return(a<0||Math.abs(h.height-this.height)>=Mn||Math.abs(a-this.heightMetrics(e,t).perLine)>=Mn)&&(si=!0),zn(this,h)}else(i||this.outdated)&&(this.setHeight(e.heightForGap(t,t+this.length)),this.outdated=!1);return this}toString(){return`gap(${this.length})`}}class $u extends ye{constructor(e,t,i){super(e.length+t+i.length,e.height+i.height,t|(e.outdated||i.outdated?2:0)),this.left=e,this.right=i,this.size=e.size+i.size}get break(){return this.flags&1}blockAt(e,t,i,r){let s=i+this.left.height;return el))return h;let c=t==X.ByPosNoHeight?X.ByPosNoHeight:X.ByPos;return a?h.join(this.right.lineAt(l,c,i,o,l)):this.left.lineAt(l,c,i,r,s).join(h)}forEachLine(e,t,i,r,s,o){let l=r+this.left.height,a=s+this.left.length+this.break;if(this.break)e=a&&this.right.forEachLine(e,t,i,l,a,o);else{let h=this.lineAt(a,X.ByPos,i,r,s);e=e&&h.from<=t&&o(h),t>h.to&&this.right.forEachLine(h.to+1,t,i,l,a,o)}}replace(e,t,i){let r=this.left.length+this.break;if(tthis.left.length)return this.balanced(this.left,this.right.replace(e-r,t-r,i));let s=[];e>0&&this.decomposeLeft(e,s);let o=s.length;for(let l of i)s.push(l);if(e>0&&el(s,o-1),t=i&&t.push(null)),e>i&&this.right.decomposeLeft(e-i,t)}decomposeRight(e,t){let i=this.left.length,r=i+this.break;if(e>=r)return this.right.decomposeRight(e-r,t);e2*t.size||t.size>2*e.size?ye.of(this.break?[e,null,t]:[e,t]):(this.left=zn(this.left,e),this.right=zn(this.right,t),this.setHeight(e.height+t.height),this.outdated=e.outdated||t.outdated,this.size=e.size+t.size,this.length=e.length+this.break+t.length,this)}updateHeight(e,t=0,i=!1,r){let{left:s,right:o}=this,l=t+s.length+this.break,a=null;return r&&r.from<=t+s.length&&r.more?a=s=s.updateHeight(e,t,i,r):s.updateHeight(e,t,i),r&&r.from<=l+o.length&&r.more?a=o=o.updateHeight(e,l,i,r):o.updateHeight(e,l,i),a?this.balanced(s,o):(this.height=this.left.height+this.right.height,this.outdated=!1,this)}toString(){return this.left+(this.break?" ":"-")+this.right}}function el(n,e){let t,i;n[e]==null&&(t=n[e-1])instanceof he&&(i=n[e+1])instanceof he&&n.splice(e-1,3,new he(t.length+1+i.length))}const qu=5;class js{constructor(e,t){this.pos=e,this.oracle=t,this.nodes=[],this.lineStart=-1,this.lineEnd=-1,this.covering=null,this.writtenTo=e}get isCovered(){return this.covering&&this.nodes[this.nodes.length-1]==this.covering}span(e,t){if(this.lineStart>-1){let i=Math.min(t,this.lineEnd),r=this.nodes[this.nodes.length-1];r instanceof Me?r.length+=i-this.pos:(i>this.pos||!this.isCovered)&&this.nodes.push(new Me(i-this.pos,-1,0)),this.writtenTo=i,t>i&&(this.nodes.push(null),this.writtenTo++,this.lineStart=-1)}this.pos=t}point(e,t,i){if(e=qu)&&this.addLineDeco(r,s,o)}else t>e&&this.span(e,t);this.lineEnd>-1&&this.lineEnd-1)return;let{from:e,to:t}=this.oracle.doc.lineAt(this.pos);this.lineStart=e,this.lineEnd=t,this.writtenToe&&this.nodes.push(new Me(this.pos-e,-1,0)),this.writtenTo=this.pos}blankContent(e,t){let i=new he(t-e);return this.oracle.doc.lineAt(e).to==t&&(i.flags|=4),i}ensureLine(){this.enterLine();let e=this.nodes.length?this.nodes[this.nodes.length-1]:null;if(e instanceof Me)return e;let t=new Me(0,-1,0);return this.nodes.push(t),t}addBlock(e){this.enterLine();let t=e.deco;t&&t.startSide>0&&!this.isCovered&&this.ensureLine(),this.nodes.push(e),this.writtenTo=this.pos=this.pos+e.length,t&&t.endSide>0&&(this.covering=e)}addLineDeco(e,t,i){let r=this.ensureLine();r.length+=i,r.collapsed+=i,r.widgetHeight=Math.max(r.widgetHeight,e),r.breaks+=t,this.writtenTo=this.pos=this.pos+i}finish(e){let t=this.nodes.length==0?null:this.nodes[this.nodes.length-1];this.lineStart>-1&&!(t instanceof Me)&&!this.isCovered?this.nodes.push(new Me(0,-1,0)):(this.writtenToc.clientHeight||c.scrollWidth>c.clientWidth)&&f.overflow!="visible"){let u=c.getBoundingClientRect();s=Math.max(s,u.left),o=Math.min(o,u.right),l=Math.max(l,u.top),a=Math.min(h==n.parentNode?r.innerHeight:a,u.bottom)}h=f.position=="absolute"||f.position=="fixed"?c.offsetParent:c.parentNode}else if(h.nodeType==11)h=h.host;else break;return{left:s-t.left,right:Math.max(s,o)-t.left,top:l-(t.top+e),bottom:Math.max(l,a)-(t.top+e)}}function Gu(n){let e=n.getBoundingClientRect(),t=n.ownerDocument.defaultView||window;return e.left0&&e.top0}function Yu(n,e){let t=n.getBoundingClientRect();return{left:0,right:t.right-t.left,top:e,bottom:t.bottom-(t.top+e)}}class Cr{constructor(e,t,i,r){this.from=e,this.to=t,this.size=i,this.displaySize=r}static same(e,t){if(e.length!=t.length)return!1;for(let i=0;itypeof r!="function"&&r.class=="cm-lineWrapping");this.heightOracle=new Vu(i),this.stateDeco=nl(t),this.heightMap=ye.empty().applyChanges(this.stateDeco,H.empty,this.heightOracle.setDoc(t.doc),[new Ie(0,0,0,t.doc.length)]);for(let r=0;r<2&&(this.viewport=this.getViewport(0,null),!!this.updateForViewport());r++);this.updateViewportLines(),this.lineGaps=this.ensureLineGaps([]),this.lineGapDeco=U.set(this.lineGaps.map(r=>r.draw(this,!1))),this.scrollParent=e.scrollDOM,this.computeVisibleRanges()}updateForViewport(){let e=[this.viewport],{main:t}=this.state.selection;for(let i=0;i<=1;i++){let r=i?t.head:t.anchor;if(!e.some(({from:s,to:o})=>r>=s&&r<=o)){let{from:s,to:o}=this.lineBlockAt(r);e.push(new hn(s,o))}}return this.viewports=e.sort((i,r)=>i.from-r.from),this.updateScaler()}updateScaler(){let e=this.scaler;return this.scaler=this.heightMap.height<=7e6?il:new Gs(this.heightOracle,this.heightMap,this.viewports),e.eq(this.scaler)?0:2}updateViewportLines(){this.viewportLines=[],this.heightMap.forEachLine(this.viewport.from,this.viewport.to,this.heightOracle.setDoc(this.state.doc),0,0,e=>{this.viewportLines.push(xi(e,this.scaler))})}update(e,t=null){this.state=e.state;let i=this.stateDeco;this.stateDeco=nl(this.state);let r=e.changedRanges,s=Ie.extendWithRanges(r,Uu(i,this.stateDeco,e?e.changes:se.empty(this.state.doc.length))),o=this.heightMap.height,l=this.scrolledToBottom?null:this.scrollAnchorAt(this.scrollOffset);Zo(),this.heightMap=this.heightMap.applyChanges(this.stateDeco,e.startState.doc,this.heightOracle.setDoc(this.state.doc),s),(this.heightMap.height!=o||si)&&(e.flags|=2),l?(this.scrollAnchorPos=e.changes.mapPos(l.from,-1),this.scrollAnchorHeight=l.top):(this.scrollAnchorPos=-1,this.scrollAnchorHeight=o);let a=s.length?this.mapViewport(this.viewport,e.changes):this.viewport;(t&&(t.range.heada.to)||!this.viewportIsAppropriate(a))&&(a=this.getViewport(0,t));let h=a.from!=this.viewport.from||a.to!=this.viewport.to;this.viewport=a,e.flags|=this.updateForViewport(),(h||!e.changes.empty||e.flags&2)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(this.mapLineGaps(this.lineGaps,e.changes))),e.flags|=this.computeVisibleRanges(e.changes),t&&(this.scrollTarget=t),!this.mustEnforceCursorAssoc&&(e.selectionSet||e.focusChanged)&&e.view.lineWrapping&&e.state.selection.main.empty&&e.state.selection.main.assoc&&!e.state.facet(Hf)&&(this.mustEnforceCursorAssoc=!0)}measure(){let{view:e}=this,t=e.contentDOM,i=window.getComputedStyle(t),r=this.heightOracle,s=i.whiteSpace;this.defaultTextDirection=i.direction=="rtl"?Z.RTL:Z.LTR;let o=this.heightOracle.mustRefreshForWrapping(s)||this.mustMeasureContent==="refresh",l=t.getBoundingClientRect(),a=o||this.mustMeasureContent||this.contentDOMHeight!=l.height;this.contentDOMHeight=l.height,this.mustMeasureContent=!1;let h=0,c=0;if(l.width&&l.height){let{scaleX:M,scaleY:L}=La(t,l);(M>.005&&Math.abs(this.scaleX-M)>.005||L>.005&&Math.abs(this.scaleY-L)>.005)&&(this.scaleX=M,this.scaleY=L,h|=16,o=a=!0)}let f=(parseInt(i.paddingTop)||0)*this.scaleY,u=(parseInt(i.paddingBottom)||0)*this.scaleY;(this.paddingTop!=f||this.paddingBottom!=u)&&(this.paddingTop=f,this.paddingBottom=u,h|=18),this.editorWidth!=e.scrollDOM.clientWidth&&(r.lineWrapping&&(a=!0),this.editorWidth=e.scrollDOM.clientWidth,h|=16);let d=Ra(this.view.contentDOM,!1).y;d!=this.scrollParent&&(this.scrollParent=d,this.scrollAnchorHeight=-1,this.scrollOffset=0);let p=this.getScrollOffset();this.scrollOffset!=p&&(this.scrollAnchorHeight=-1,this.scrollOffset=p),this.scrolledToBottom=Ia(this.scrollParent||e.win);let m=(this.printing?Yu:ju)(t,this.paddingTop),g=m.top-this.pixelViewport.top,y=m.bottom-this.pixelViewport.bottom;this.pixelViewport=m;let w=this.pixelViewport.bottom>this.pixelViewport.top&&this.pixelViewport.right>this.pixelViewport.left;if(w!=this.inView&&(this.inView=w,w&&(a=!0)),!this.inView&&!this.scrollTarget&&!Gu(e.dom))return 0;let T=l.width;if((this.contentDOMWidth!=T||this.editorHeight!=e.scrollDOM.clientHeight)&&(this.contentDOMWidth=l.width,this.editorHeight=e.scrollDOM.clientHeight,h|=16),a){let M=e.docView.measureVisibleLineHeights(this.viewport);if(r.mustRefreshForHeights(M)&&(o=!0),o||r.lineWrapping&&Math.abs(T-this.contentDOMWidth)>r.charWidth){let{lineHeight:L,charWidth:E,textHeight:F}=e.docView.measureTextSize();o=L>0&&r.refresh(s,L,E,F,Math.max(5,T/E),M),o&&(e.docView.minWidth=0,h|=16)}g>0&&y>0?c=Math.max(g,y):g<0&&y<0&&(c=Math.min(g,y)),Zo();for(let L of this.viewports){let E=L.from==this.viewport.from?M:e.docView.measureVisibleLineHeights(L);this.heightMap=(o?ye.empty().applyChanges(this.stateDeco,H.empty,this.heightOracle,[new Ie(0,0,0,e.state.doc.length)]):this.heightMap).updateHeight(r,0,o,new Hu(L.from,E))}si&&(h|=2)}let D=!this.viewportIsAppropriate(this.viewport,c)||this.scrollTarget&&(this.scrollTarget.range.headthis.viewport.to);return D&&(h&2&&(h|=this.updateScaler()),this.viewport=this.getViewport(c,this.scrollTarget),h|=this.updateForViewport()),(h&2||D)&&this.updateViewportLines(),(this.lineGaps.length||this.viewport.to-this.viewport.from>4e3)&&this.updateLineGaps(this.ensureLineGaps(o?[]:this.lineGaps,e)),h|=this.computeVisibleRanges(),this.mustEnforceCursorAssoc&&(this.mustEnforceCursorAssoc=!1,e.docView.enforceCursorAssoc()),h}get visibleTop(){return this.scaler.fromDOM(this.pixelViewport.top)}get visibleBottom(){return this.scaler.fromDOM(this.pixelViewport.bottom)}getViewport(e,t){let i=.5-Math.max(-.5,Math.min(.5,e/1e3/2)),r=this.heightMap,s=this.heightOracle,{visibleTop:o,visibleBottom:l}=this,a=new hn(r.lineAt(o-i*1e3,X.ByHeight,s,0,0).from,r.lineAt(l+(1-i)*1e3,X.ByHeight,s,0,0).to);if(t){let{head:h}=t.range;if(ha.to){let c=Math.min(this.editorHeight,this.pixelViewport.bottom-this.pixelViewport.top),f=r.lineAt(h,X.ByPos,s,0,0),u;t.y=="center"?u=(f.top+f.bottom)/2-c/2:t.y=="start"||t.y=="nearest"&&h=l+Math.max(10,Math.min(i,250)))&&r>o-2*1e3&&s>1,o=r<<1;if(this.defaultTextDirection!=Z.LTR&&!i)return[];let l=[],a=(c,f,u,d)=>{if(f-cc&&yy.from>=u.from&&y.to<=u.to&&Math.abs(y.from-c)y.fromw));if(!g){if(fT.from<=f&&T.to>=f)){let T=t.moveToLineBoundary(b.cursor(f),!1,!0).head;T>c&&(f=T)}let y=this.gapSize(u,c,f,d),w=i||y<2e6?y:2e6;g=new Cr(c,f,y,w)}l.push(g)},h=c=>{if(c.length2e6)for(let L of e)L.from>=c.from&&L.fromc.from&&a(c.from,d,c,f),pt.draw(this,this.heightOracle.lineWrapping))))}computeVisibleRanges(e){let t=this.stateDeco;this.lineGaps.length&&(t=t.concat(this.lineGapDeco));let i=[];W.spans(t,this.viewport.from,this.viewport.to,{span(s,o){i.push({from:s,to:o})},point(){}},20);let r=0;if(i.length!=this.visibleRanges.length)r=12;else for(let s=0;s=this.viewport.from&&e<=this.viewport.to&&this.viewportLines.find(t=>t.from<=e&&t.to>=e)||xi(this.heightMap.lineAt(e,X.ByPos,this.heightOracle,0,0),this.scaler)}lineBlockAtHeight(e){return e>=this.viewportLines[0].top&&e<=this.viewportLines[this.viewportLines.length-1].bottom&&this.viewportLines.find(t=>t.top<=e&&t.bottom>=e)||xi(this.heightMap.lineAt(this.scaler.fromDOM(e),X.ByHeight,this.heightOracle,0,0),this.scaler)}getScrollOffset(){return(this.scrollParent==this.view.scrollDOM?this.scrollParent.scrollTop:(this.scrollParent?this.scrollParent.getBoundingClientRect().top:0)-this.view.contentDOM.getBoundingClientRect().top)*this.scaleY}scrollAnchorAt(e){let t=this.lineBlockAtHeight(e+8);return t.from>=this.viewport.from||this.viewportLines[0].top-e>200?t:this.viewportLines[0]}elementAtHeight(e){return xi(this.heightMap.blockAt(this.scaler.fromDOM(e),this.heightOracle,0,0),this.scaler)}get docHeight(){return this.scaler.toDOM(this.heightMap.height)}get contentHeight(){return this.docHeight+this.paddingTop+this.paddingBottom}}class hn{constructor(e,t){this.from=e,this.to=t}}function Ju(n,e,t){let i=[],r=n,s=0;return W.spans(t,n,e,{span(){},point(o,l){o>r&&(i.push({from:r,to:o}),s+=o-r),r=l}},20),r=1)return e[e.length-1].to;let i=Math.floor(n*t);for(let r=0;;r++){let{from:s,to:o}=e[r],l=o-s;if(i<=l)return s+i;i-=l}}function fn(n,e){let t=0;for(let{from:i,to:r}of n.ranges){if(e<=r){t+=e-i;break}t+=r-i}return t/n.total}function Qu(n,e){for(let t of n)if(e(t))return t}const il={toDOM(n){return n},fromDOM(n){return n},scale:1,eq(n){return n==this}};function nl(n){let e=n.facet(Zn).filter(i=>typeof i!="function"),t=n.facet(qs).filter(i=>typeof i!="function");return t.length&&e.push(W.join(t)),e}class Gs{constructor(e,t,i){let r=0,s=0,o=0;this.viewports=i.map(({from:l,to:a})=>{let h=t.lineAt(l,X.ByPos,e,0,0).top,c=t.lineAt(a,X.ByPos,e,0,0).bottom;return r+=c-h,{from:l,to:a,top:h,bottom:c,domTop:0,domBottom:0}}),this.scale=(7e6-r)/(t.height-r);for(let l of this.viewports)l.domTop=o+(l.top-s)*this.scale,o=l.domBottom=l.domTop+(l.bottom-l.top),s=l.bottom}toDOM(e){for(let t=0,i=0,r=0;;t++){let s=tt.from==e.viewports[i].from&&t.to==e.viewports[i].to):!1}}function xi(n,e){if(e.scale==1)return n;let t=e.toDOM(n.top),i=e.toDOM(n.bottom);return new ze(n.from,n.length,t,i-t,Array.isArray(n._content)?n._content.map(r=>xi(r,e)):n._content)}const un=B.define({combine:n=>n.join(" ")}),gs=B.define({combine:n=>n.indexOf(!0)>-1}),ys=vt.newName(),gh=vt.newName(),yh=vt.newName(),bh={"&light":"."+gh,"&dark":"."+yh};function bs(n,e,t){return new vt(e,{finish(i){return/&/.test(i)?i.replace(/&\w*/,r=>{if(r=="&")return n;if(!t||!t[r])throw new RangeError(`Unsupported selector: ${r}`);return t[r]}):n+" "+i}})}const Zu=bs("."+ys,{"&":{position:"relative !important",boxSizing:"border-box","&.cm-focused":{outline:"1px dotted #212121"},display:"flex !important",flexDirection:"column"},".cm-scroller":{display:"flex !important",alignItems:"flex-start !important",fontFamily:"monospace",lineHeight:1.4,height:"100%",overflowX:"auto",position:"relative",zIndex:0,overflowAnchor:"none"},".cm-content":{margin:0,flexGrow:2,flexShrink:0,display:"block",whiteSpace:"pre",wordWrap:"normal",boxSizing:"border-box",minHeight:"100%",padding:"4px 0",outline:"none","&[contenteditable=true]":{WebkitUserModify:"read-write-plaintext-only"}},".cm-lineWrapping":{whiteSpace_fallback:"pre-wrap",whiteSpace:"break-spaces",wordBreak:"break-word",overflowWrap:"anywhere",flexShrink:1},"&light .cm-content":{caretColor:"black"},"&dark .cm-content":{caretColor:"white"},".cm-line":{display:"block",padding:"0 2px 0 6px"},".cm-layer":{position:"absolute",left:0,top:0,contain:"size style","& > *":{position:"absolute"}},"&light .cm-selectionBackground":{background:"#d9d9d9"},"&dark .cm-selectionBackground":{background:"#222"},"&light.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#d7d4f0"},"&dark.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground":{background:"#233"},".cm-cursorLayer":{pointerEvents:"none"},"&.cm-focused > .cm-scroller > .cm-cursorLayer":{animation:"steps(1) cm-blink 1.2s infinite"},"@keyframes cm-blink":{"0%":{},"50%":{opacity:0},"100%":{}},"@keyframes cm-blink2":{"0%":{},"50%":{opacity:0},"100%":{}},".cm-cursor, .cm-dropCursor":{borderLeft:"1.2px solid black",marginLeft:"-0.6px",pointerEvents:"none"},".cm-cursor":{display:"none"},"&dark .cm-cursor":{borderLeftColor:"#ddd"},".cm-selectionHandle":{backgroundColor:"currentColor",width:"1.5px"},".cm-selectionHandle-start::before, .cm-selectionHandle-end::before":{content:'""',backgroundColor:"inherit",borderRadius:"50%",width:"8px",height:"8px",position:"absolute",left:"-3.25px"},".cm-selectionHandle-start::before":{top:"-8px"},".cm-selectionHandle-end::before":{bottom:"-8px"},".cm-dropCursor":{position:"absolute"},"&.cm-focused > .cm-scroller > .cm-cursorLayer .cm-cursor":{display:"block"},".cm-iso":{unicodeBidi:"isolate"},".cm-announced":{position:"fixed",top:"-10000px"},"@media print":{".cm-announced":{display:"none"}},"&light .cm-activeLine":{backgroundColor:"#cceeff44"},"&dark .cm-activeLine":{backgroundColor:"#99eeff33"},"&light .cm-specialChar":{color:"red"},"&dark .cm-specialChar":{color:"#f78"},".cm-gutters":{flexShrink:0,display:"flex",height:"100%",boxSizing:"border-box",zIndex:200},".cm-gutters-before":{insetInlineStart:0},".cm-gutters-after":{insetInlineEnd:0},"&light .cm-gutters":{backgroundColor:"#f5f5f5",color:"#6c6c6c",border:"0px solid #ddd","&.cm-gutters-before":{borderRightWidth:"1px"},"&.cm-gutters-after":{borderLeftWidth:"1px"}},"&dark .cm-gutters":{backgroundColor:"#333338",color:"#ccc"},".cm-gutter":{display:"flex !important",flexDirection:"column",flexShrink:0,boxSizing:"border-box",minHeight:"100%",overflow:"hidden"},".cm-gutterElement":{boxSizing:"border-box"},".cm-lineNumbers .cm-gutterElement":{padding:"0 3px 0 5px",minWidth:"20px",textAlign:"right",whiteSpace:"nowrap"},"&light .cm-activeLineGutter":{backgroundColor:"#e2f2ff"},"&dark .cm-activeLineGutter":{backgroundColor:"#222227"},".cm-panels":{boxSizing:"border-box",position:"sticky",left:0,right:0,zIndex:300},"&light .cm-panels":{backgroundColor:"#f5f5f5",color:"black"},"&light .cm-panels-top":{borderBottom:"1px solid #ddd"},"&light .cm-panels-bottom":{borderTop:"1px solid #ddd"},"&dark .cm-panels":{backgroundColor:"#333338",color:"white"},".cm-dialog":{padding:"2px 19px 4px 6px",position:"relative","& label":{fontSize:"80%"}},".cm-dialog-close":{position:"absolute",top:"3px",right:"4px",backgroundColor:"inherit",border:"none",font:"inherit",fontSize:"14px",padding:"0"},".cm-tab":{display:"inline-block",overflow:"hidden",verticalAlign:"bottom"},".cm-widgetBuffer":{verticalAlign:"text-top",height:"1em",width:0,display:"inline"},".cm-placeholder":{color:"#888",display:"inline-block",verticalAlign:"top",userSelect:"none"},".cm-highlightSpace":{backgroundImage:"radial-gradient(circle at 50% 55%, #aaa 20%, transparent 5%)",backgroundPosition:"center"},".cm-highlightTab":{backgroundImage:`url('data:image/svg+xml,')`,backgroundSize:"auto 100%",backgroundPosition:"right 90%",backgroundRepeat:"no-repeat"},".cm-trailingSpace":{backgroundColor:"#ff332255"},".cm-button":{verticalAlign:"middle",color:"inherit",fontSize:"70%",padding:".2em 1em",borderRadius:"1px"},"&light .cm-button":{backgroundImage:"linear-gradient(#eff1f5, #d9d9df)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#b4b4b4, #d0d3d6)"}},"&dark .cm-button":{backgroundImage:"linear-gradient(#393939, #111)",border:"1px solid #888","&:active":{backgroundImage:"linear-gradient(#111, #333)"}},".cm-textfield":{verticalAlign:"middle",color:"inherit",fontSize:"70%",border:"1px solid silver",padding:".2em .5em"},"&light .cm-textfield":{backgroundColor:"white"},"&dark .cm-textfield":{border:"1px solid #555",backgroundColor:"inherit"}},bh),ed={childList:!0,characterData:!0,subtree:!0,attributes:!0,characterDataOldValue:!0},Ar=O.ie&&O.ie_version<=11;class td{constructor(e){this.view=e,this.active=!1,this.editContext=null,this.selectionRange=new Ef,this.selectionChanged=!1,this.delayedFlush=-1,this.resizeTimeout=-1,this.queue=[],this.delayedAndroidKey=null,this.flushingAndroidKey=-1,this.lastChange=0,this.scrollTargets=[],this.intersection=null,this.resizeScroll=null,this.intersecting=!1,this.gapIntersection=null,this.gaps=[],this.printQuery=null,this.parentCheck=-1,this.dom=e.contentDOM,this.observer=new MutationObserver(t=>{for(let i of t)this.queue.push(i);(O.ie&&O.ie_version<=11||O.ios&&e.composing)&&t.some(i=>i.type=="childList"&&i.removedNodes.length||i.type=="characterData"&&i.oldValue.length>i.target.nodeValue.length)?this.flushSoon():this.flush()}),window.EditContext&&O.android&&e.constructor.EDIT_CONTEXT!==!1&&!(O.chrome&&O.chrome_version<126)&&(this.editContext=new nd(e),e.state.facet(lt)&&(e.contentDOM.editContext=this.editContext.editContext)),Ar&&(this.onCharData=t=>{this.queue.push({target:t.target,type:"characterData",oldValue:t.prevValue}),this.flushSoon()}),this.onSelectionChange=this.onSelectionChange.bind(this),this.onResize=this.onResize.bind(this),this.onPrint=this.onPrint.bind(this),this.onScroll=this.onScroll.bind(this),window.matchMedia&&(this.printQuery=window.matchMedia("print")),typeof ResizeObserver=="function"&&(this.resizeScroll=new ResizeObserver(()=>{var t;((t=this.view.docView)===null||t===void 0?void 0:t.lastUpdate){this.parentCheck<0&&(this.parentCheck=setTimeout(this.listenForScroll.bind(this),1e3)),t.length>0&&t[t.length-1].intersectionRatio>0!=this.intersecting&&(this.intersecting=!this.intersecting,this.intersecting!=this.view.inView&&this.onScrollChanged(document.createEvent("Event")))},{threshold:[0,.001]}),this.intersection.observe(this.dom),this.gapIntersection=new IntersectionObserver(t=>{t.length>0&&t[t.length-1].intersectionRatio>0&&this.onScrollChanged(document.createEvent("Event"))},{})),this.listenForScroll(),this.readSelectionRange()}onScrollChanged(e){this.view.inputState.runHandlers("scroll",e),this.intersecting&&this.view.measure()}onScroll(e){this.intersecting&&this.flush(!1),this.editContext&&this.view.requestMeasure(this.editContext.measureReq),this.onScrollChanged(e)}onResize(){this.resizeTimeout<0&&(this.resizeTimeout=setTimeout(()=>{this.resizeTimeout=-1,this.view.requestMeasure()},50))}onPrint(e){(e.type=="change"||!e.type)&&!e.matches||(this.view.viewState.printing=!0,this.view.measure(),setTimeout(()=>{this.view.viewState.printing=!1,this.view.requestMeasure()},500))}updateGaps(e){if(this.gapIntersection&&(e.length!=this.gaps.length||this.gaps.some((t,i)=>t!=e[i]))){this.gapIntersection.disconnect();for(let t of e)this.gapIntersection.observe(t);this.gaps=e}}onSelectionChange(e){let t=this.selectionChanged;if(!this.readSelectionRange()||this.delayedAndroidKey)return;let{view:i}=this,r=this.selectionRange;if(i.state.facet(lt)?i.root.activeElement!=this.dom:!Si(this.dom,r))return;let s=r.anchorNode&&i.docView.tile.nearest(r.anchorNode);if(s&&s.isWidget()&&s.widget.ignoreEvent(e)){t||(this.selectionChanged=!1);return}(O.ie&&O.ie_version<=11||O.android&&O.chrome)&&!i.state.selection.main.empty&&r.focusNode&&Ci(r.focusNode,r.focusOffset,r.anchorNode,r.anchorOffset)?this.flushSoon():this.flush(!1)}readSelectionRange(){let{view:e}=this,t=Ii(e.root);if(!t)return!1;let i=O.safari&&e.root.nodeType==11&&e.root.activeElement==this.dom&&id(this.view,t)||t;if(!i||this.selectionRange.eq(i))return!1;let r=Si(this.dom,i);return r&&!this.selectionChanged&&e.inputState.lastFocusTime>Date.now()-200&&e.inputState.lastTouchTime{let s=this.delayedAndroidKey;s&&(this.clearDelayedAndroidKey(),this.view.inputState.lastKeyCode=s.keyCode,this.view.inputState.lastKeyTime=Date.now(),!this.flush()&&s.force&&Zt(this.dom,s.key,s.keyCode))};this.flushingAndroidKey=this.view.win.requestAnimationFrame(r)}(!this.delayedAndroidKey||e=="Enter")&&(this.delayedAndroidKey={key:e,keyCode:t,force:this.lastChange{this.delayedFlush=-1,this.flush()}))}forceFlush(){this.delayedFlush>=0&&(this.view.win.cancelAnimationFrame(this.delayedFlush),this.delayedFlush=-1),this.flush()}pendingRecords(){for(let e of this.observer.takeRecords())this.queue.push(e);return this.queue}processRecords(){let e=this.pendingRecords();e.length&&(this.queue=[]);let t=-1,i=-1,r=!1;for(let s of e){let o=this.readMutation(s);o&&(o.typeOver&&(r=!0),t==-1?{from:t,to:i}=o:(t=Math.min(o.from,t),i=Math.max(o.to,i)))}return{from:t,to:i,typeOver:r}}readChange(){let{from:e,to:t,typeOver:i}=this.processRecords(),r=this.selectionChanged&&Si(this.dom,this.selectionRange);if(e<0&&!r)return null;e>-1&&(this.lastChange=Date.now()),this.view.inputState.lastFocusTime=0,this.selectionChanged=!1;let s=new xu(this.view,e,t,i);return this.view.docView.domChanged={newSel:s.newSel?s.newSel.main:null},s}flush(e=!0){if(this.delayedFlush>=0||this.delayedAndroidKey)return!1;e&&this.readSelectionRange();let t=this.readChange();if(!t)return this.view.requestMeasure(),!1;let i=this.view.state,r=sh(this.view,t);return this.view.state==i&&(t.domChanged||t.newSel&&!Hn(this.view.state.selection,t.newSel.main))&&this.view.update([]),r}readMutation(e){let t=this.view.docView.tile.nearest(e.target);if(!t||t.isWidget())return null;if(t.markDirty(e.type=="attributes"),e.type=="childList"){let i=rl(t,e.previousSibling||e.target.previousSibling,-1),r=rl(t,e.nextSibling||e.target.nextSibling,1);return{from:i?t.posAfter(i):t.posAtStart,to:r?t.posBefore(r):t.posAtEnd,typeOver:!1}}else return e.type=="characterData"?{from:t.posAtStart,to:t.posAtEnd,typeOver:e.target.nodeValue==e.oldValue}:null}setWindow(e){e!=this.win&&(this.removeWindowListeners(this.win),this.win=e,this.addWindowListeners(this.win))}addWindowListeners(e){e.addEventListener("resize",this.onResize),this.printQuery?this.printQuery.addEventListener?this.printQuery.addEventListener("change",this.onPrint):this.printQuery.addListener(this.onPrint):e.addEventListener("beforeprint",this.onPrint),e.addEventListener("scroll",this.onScroll),e.document.addEventListener("selectionchange",this.onSelectionChange)}removeWindowListeners(e){e.removeEventListener("scroll",this.onScroll),e.removeEventListener("resize",this.onResize),this.printQuery?this.printQuery.removeEventListener?this.printQuery.removeEventListener("change",this.onPrint):this.printQuery.removeListener(this.onPrint):e.removeEventListener("beforeprint",this.onPrint),e.document.removeEventListener("selectionchange",this.onSelectionChange)}update(e){this.editContext&&(this.editContext.update(e),e.startState.facet(lt)!=e.state.facet(lt)&&(e.view.contentDOM.editContext=e.state.facet(lt)?this.editContext.editContext:null))}destroy(){var e,t,i;this.stop(),(e=this.intersection)===null||e===void 0||e.disconnect(),(t=this.gapIntersection)===null||t===void 0||t.disconnect(),(i=this.resizeScroll)===null||i===void 0||i.disconnect();for(let r of this.scrollTargets)r.removeEventListener("scroll",this.onScroll);this.removeWindowListeners(this.win),clearTimeout(this.parentCheck),clearTimeout(this.resizeTimeout),this.win.cancelAnimationFrame(this.delayedFlush),this.win.cancelAnimationFrame(this.flushingAndroidKey),this.editContext&&(this.view.contentDOM.editContext=null,this.editContext.destroy())}}function rl(n,e,t){for(;e;){let i=ee.get(e);if(i&&i.parent==n)return i;let r=e.parentNode;e=r!=n.dom?r:t>0?e.nextSibling:e.previousSibling}return null}function sl(n,e){let t=e.startContainer,i=e.startOffset,r=e.endContainer,s=e.endOffset,o=n.docView.domAtPos(n.state.selection.main.anchor,1);return Ci(o.node,o.offset,r,s)&&([t,i,r,s]=[r,s,t,i]),{anchorNode:t,anchorOffset:i,focusNode:r,focusOffset:s}}function id(n,e){if(e.getComposedRanges){let r=e.getComposedRanges(n.root)[0];if(r)return sl(n,r)}let t=null;function i(r){r.preventDefault(),r.stopImmediatePropagation(),t=r.getTargetRanges()[0]}return n.contentDOM.addEventListener("beforeinput",i,!0),n.dom.ownerDocument.execCommand("indent"),n.contentDOM.removeEventListener("beforeinput",i,!0),t?sl(n,t):null}class nd{constructor(e){this.from=0,this.to=0,this.pendingContextChange=null,this.handlers=Object.create(null),this.composing=null,this.resetRange(e.state);let t=this.editContext=new window.EditContext({text:e.state.doc.sliceString(this.from,this.to),selectionStart:this.toContextPos(Math.max(this.from,Math.min(this.to,e.state.selection.main.anchor))),selectionEnd:this.toContextPos(e.state.selection.main.head)});this.handlers.textupdate=i=>{let r=e.state.selection.main,{anchor:s,head:o}=r,l=this.toEditorPos(i.updateRangeStart),a=this.toEditorPos(i.updateRangeEnd);e.inputState.composing>=0&&!this.composing&&(this.composing={contextBase:i.updateRangeStart,editorBase:l,drifted:!1});let h=a-l>i.text.length;l==this.from&&sthis.to&&(a=s);let c=oh(e.state.sliceDoc(l,a),i.text,(h?r.from:r.to)-l,h?"end":null);if(!c){let u=b.single(this.toEditorPos(i.selectionStart),this.toEditorPos(i.selectionEnd));Hn(u,r)||e.dispatch({selection:u,userEvent:"select"});return}let f={from:c.from+l,to:c.toA+l,insert:H.of(i.text.slice(c.from,c.toB).split(` +`))};if((O.mac||O.android)&&f.from==o-1&&/^\. ?$/.test(i.text)&&e.contentDOM.getAttribute("autocorrect")=="off"&&(f={from:l,to:a,insert:H.of([i.text.replace("."," ")])}),this.pendingContextChange=f,!e.state.readOnly){let u=this.to-this.from+(f.to-f.from+f.insert.length);Ks(e,f,b.single(this.toEditorPos(i.selectionStart,u),this.toEditorPos(i.selectionEnd,u)))}this.pendingContextChange&&(this.revertPending(e.state),this.setSelection(e.state)),f.from=0&&!/[\\p{Alphabetic}\\p{Number}_]/.test(t.text.slice(Math.max(0,i.updateRangeStart-1),Math.min(t.text.length,i.updateRangeStart+1)))&&this.handlers.compositionend(i)},this.handlers.characterboundsupdate=i=>{let r=[],s=null;for(let o=this.toEditorPos(i.rangeStart),l=this.toEditorPos(i.rangeEnd);o{let r=[];for(let s of i.getTextFormats()){let o=s.underlineStyle,l=s.underlineThickness;if(!/none/i.test(o)&&!/none/i.test(l)){let a=this.toEditorPos(s.rangeStart),h=this.toEditorPos(s.rangeEnd);if(a{e.inputState.composing<0&&(e.inputState.composing=0,e.inputState.compositionFirstChange=!0)},this.handlers.compositionend=()=>{if(e.inputState.composing=-1,e.inputState.compositionFirstChange=null,this.composing){let{drifted:i}=this.composing;this.composing=null,i&&this.reset(e.state)}};for(let i in this.handlers)t.addEventListener(i,this.handlers[i]);this.measureReq={read:i=>{this.editContext.updateControlBounds(i.contentDOM.getBoundingClientRect());let r=Ii(i.root);r&&r.rangeCount&&this.editContext.updateSelectionBounds(r.getRangeAt(0).getBoundingClientRect())}}}applyEdits(e){let t=0,i=!1,r=this.pendingContextChange;return e.changes.iterChanges((s,o,l,a,h)=>{if(i)return;let c=h.length-(o-s);if(r&&o>=r.to)if(r.from==s&&r.to==o&&r.insert.eq(h)){r=this.pendingContextChange=null,t+=c,this.to+=c;return}else r=null,this.revertPending(e.state);if(s+=t,o+=t,o<=this.from)this.from+=c,this.to+=c;else if(sthis.to||this.to-this.from+h.length>3e4){i=!0;return}this.editContext.updateText(this.toContextPos(s),this.toContextPos(o),h.toString()),this.to+=c}t+=c}),r&&!i&&this.revertPending(e.state),!i}update(e){let t=this.pendingContextChange,i=e.startState.selection.main;this.composing&&(this.composing.drifted||!e.changes.touchesRange(i.from,i.to)&&e.transactions.some(r=>!r.isUserEvent("input.type")&&r.changes.touchesRange(this.from,this.to)))?(this.composing.drifted=!0,this.composing.editorBase=e.changes.mapPos(this.composing.editorBase)):!this.applyEdits(e)||!this.rangeIsValid(e.state)?(this.pendingContextChange=null,this.reset(e.state)):(e.docChanged||e.selectionSet||t)&&this.setSelection(e.state),(e.geometryChanged||e.docChanged||e.selectionSet)&&e.view.requestMeasure(this.measureReq)}resetRange(e){let{head:t}=e.selection.main;this.from=Math.max(0,t-1e4),this.to=Math.min(e.doc.length,t+1e4)}reset(e){this.resetRange(e),this.editContext.updateText(0,this.editContext.text.length,e.doc.sliceString(this.from,this.to)),this.setSelection(e)}revertPending(e){let t=this.pendingContextChange;this.pendingContextChange=null,this.editContext.updateText(this.toContextPos(t.from),this.toContextPos(t.from+t.insert.length),e.doc.sliceString(t.from,t.to))}setSelection(e){let{main:t}=e.selection,i=this.toContextPos(Math.max(this.from,Math.min(this.to,t.anchor))),r=this.toContextPos(t.head);(this.editContext.selectionStart!=i||this.editContext.selectionEnd!=r)&&this.editContext.updateSelection(i,r)}rangeIsValid(e){let{head:t}=e.selection.main;return!(this.from>0&&t-this.from<500||this.to1e4*3)}toEditorPos(e,t=this.to-this.from){e=Math.min(e,t);let i=this.composing;return i&&i.drifted?i.editorBase+(e-i.contextBase):e+this.from}toContextPos(e){let t=this.composing;return t&&t.drifted?t.contextBase+(e-t.editorBase):e-this.from}destroy(){for(let e in this.handlers)this.editContext.removeEventListener(e,this.handlers[e])}}class I{get state(){return this.viewState.state}get viewport(){return this.viewState.viewport}get visibleRanges(){return this.viewState.visibleRanges}get inView(){return this.viewState.inView}get composing(){return!!this.inputState&&this.inputState.composing>0}get compositionStarted(){return!!this.inputState&&this.inputState.composing>=0}get root(){return this._root}get win(){return this.dom.ownerDocument.defaultView||window}constructor(e={}){var t;this.plugins=[],this.pluginMap=new Map,this.editorAttrs={},this.contentAttrs={},this.bidiCache=[],this.destroyed=!1,this.updateState=2,this.measureScheduled=-1,this.measureRequests=[],this.contentDOM=document.createElement("div"),this.scrollDOM=document.createElement("div"),this.scrollDOM.tabIndex=-1,this.scrollDOM.className="cm-scroller",this.scrollDOM.appendChild(this.contentDOM),this.announceDOM=document.createElement("div"),this.announceDOM.className="cm-announced",this.announceDOM.setAttribute("aria-live","polite"),this.dom=document.createElement("div"),this.dom.appendChild(this.announceDOM),this.dom.appendChild(this.scrollDOM),e.parent&&e.parent.appendChild(this.dom);let{dispatch:i}=e;this.dispatchTransactions=e.dispatchTransactions||i&&(r=>r.forEach(s=>i(s,this)))||(r=>this.update(r)),this.dispatch=this.dispatch.bind(this),this._root=e.root||Of(e.parent)||document,this.viewState=new tl(this,e.state||q.create(e)),e.scrollTo&&e.scrollTo.is(on)&&(this.viewState.scrollTarget=e.scrollTo.value.clip(this.viewState.state)),this.plugins=this.state.facet(jt).map(r=>new wr(r));for(let r of this.plugins)r.update(this);this.observer=new td(this),this.inputState=new Cu(this),this.inputState.ensureHandlers(this.plugins),this.docView=new zo(this),this.mountStyles(),this.updateAttrs(),this.updateState=0,this.requestMeasure(),!((t=document.fonts)===null||t===void 0)&&t.ready&&document.fonts.ready.then(()=>{this.viewState.mustMeasureContent="refresh",this.requestMeasure()})}dispatch(...e){let t=e.length==1&&e[0]instanceof re?e:e.length==1&&Array.isArray(e[0])?e[0]:[this.state.update(...e)];this.dispatchTransactions(t,this)}update(e){if(this.updateState!=0)throw new Error("Calls to EditorView.update are not allowed while an update is in progress");let t=!1,i=!1,r,s=this.state;for(let u of e){if(u.startState!=s)throw new RangeError("Trying to update state with a transaction that doesn't start from the previous state.");s=u.state}if(this.destroyed){this.viewState.state=s;return}let o=this.hasFocus,l=0,a=null;e.some(u=>u.annotation(uh))?(this.inputState.notifiedFocused=o,l=1):o!=this.inputState.notifiedFocused&&(this.inputState.notifiedFocused=o,a=dh(s,o),a||(l=1));let h=this.observer.delayedAndroidKey,c=null;if(h?(this.observer.clearDelayedAndroidKey(),c=this.observer.readChange(),(c&&!this.state.doc.eq(s.doc)||!this.state.selection.eq(s.selection))&&(c=null)):this.observer.clear(),s.facet(q.phrases)!=this.state.facet(q.phrases))return this.setState(s);r=_n.create(this,s,e),r.flags|=l;let f=this.viewState.scrollTarget;try{this.updateState=2;for(let u of e){if(f&&(f=f.map(u.changes)),u.scrollIntoView){let{main:d}=u.state.selection,{x:p,y:m}=this.state.facet(I.cursorScrollMargin);f=new ei(d.empty?d:b.cursor(d.head,d.head>d.anchor?-1:1),"nearest","nearest",m,p)}for(let d of u.effects)d.is(on)&&(f=d.value.clip(this.state))}this.viewState.update(r,f),this.bidiCache=$n.update(this.bidiCache,r.changes),r.empty||(this.updatePlugins(r),this.inputState.update(r)),t=this.docView.update(r),this.state.facet(wi)!=this.styleModules&&this.mountStyles(),i=this.updateAttrs(),this.showAnnouncements(e),this.docView.updateSelection(t,e.some(u=>u.isUserEvent("select.pointer")))}finally{this.updateState=0}if(r.startState.facet(un)!=r.state.facet(un)&&(this.viewState.mustMeasureContent=!0),(t||i||f||this.viewState.mustEnforceCursorAssoc||this.viewState.mustMeasureContent)&&this.requestMeasure(),t&&this.docViewUpdate(),!r.empty)for(let u of this.state.facet(us))try{u(r)}catch(d){De(this.state,d,"update listener")}(a||c)&&Promise.resolve().then(()=>{a&&this.state==a.startState&&this.dispatch(a),c&&!sh(this,c)&&h.force&&Zt(this.contentDOM,h.key,h.keyCode)})}setState(e){if(this.updateState!=0)throw new Error("Calls to EditorView.setState are not allowed while an update is in progress");if(this.destroyed){this.viewState.state=e;return}this.updateState=2;let t=this.hasFocus;try{for(let i of this.plugins)i.destroy(this);this.viewState=new tl(this,e),this.plugins=e.facet(jt).map(i=>new wr(i)),this.pluginMap.clear();for(let i of this.plugins)i.update(this);this.docView.destroy(),this.docView=new zo(this),this.inputState.ensureHandlers(this.plugins),this.mountStyles(),this.updateAttrs(),this.bidiCache=[]}finally{this.updateState=0}t&&this.focus(),this.requestMeasure()}updatePlugins(e){let t=e.startState.facet(jt),i=e.state.facet(jt);if(t!=i){let r=[];for(let s of i){let o=t.indexOf(s);if(o<0)r.push(new wr(s));else{let l=this.plugins[o];l.mustUpdate=e,r.push(l)}}for(let s of this.plugins)s.mustUpdate!=e&&s.destroy(this);this.plugins=r,this.pluginMap.clear()}else for(let r of this.plugins)r.mustUpdate=e;for(let r=0;r-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.observer.delayedAndroidKey){this.measureScheduled=-1,this.requestMeasure();return}this.measureScheduled=0,e&&this.observer.forceFlush();let t=null,i=this.viewState.scrollParent,r=this.viewState.getScrollOffset(),{scrollAnchorPos:s,scrollAnchorHeight:o}=this.viewState;Math.abs(r-this.viewState.scrollOffset)>1&&(o=-1),this.viewState.scrollAnchorHeight=-1;try{for(let l=0;;l++){if(o<0)if(Ia(i||this.win))s=-1,o=this.viewState.heightMap.height;else{let d=this.viewState.scrollAnchorAt(r);s=d.from,o=d.top}this.updateState=1;let a=this.viewState.measure();if(!a&&!this.measureRequests.length&&this.viewState.scrollTarget==null)break;if(l>5){console.warn(this.measureRequests.length?"Measure loop restarted more than 5 times":"Viewport failed to stabilize");break}let h=[];a&4||([this.measureRequests,h]=[h,this.measureRequests]);let c=h.map(d=>{try{return d.read(this)}catch(p){return De(this.state,p),ol}}),f=_n.create(this,this.state,[]),u=!1;f.flags|=a,t?t.flags|=a:t=f,this.updateState=2,f.empty||(this.updatePlugins(f),this.inputState.update(f),this.updateAttrs(),u=this.docView.update(f),u&&this.docViewUpdate());for(let d=0;d1||p<-1)&&(i==this.scrollDOM||this.hasFocus||Math.max(this.inputState.lastWheelEvent,this.inputState.lastTouchTime)>Date.now()-100)){r=r+p,i?i.scrollTop+=p:this.win.scrollBy(0,p),o=-1;continue}}break}}}finally{this.updateState=0,this.measureScheduled=-1}if(t&&!t.empty)for(let l of this.state.facet(us))l(t)}get themeClasses(){return ys+" "+(this.state.facet(gs)?yh:gh)+" "+this.state.facet(un)}updateAttrs(){let e=ll(this,Ja,{class:"cm-editor"+(this.hasFocus?" cm-focused ":" ")+this.themeClasses}),t={spellcheck:"false",autocorrect:"off",autocapitalize:"off",writingsuggestions:"false",translate:"no",contenteditable:this.state.facet(lt)?"true":"false",class:"cm-content",style:`${O.tabSize}: ${this.state.tabSize}`,role:"textbox","aria-multiline":"true"};this.state.readOnly&&(t["aria-readonly"]="true"),ll(this,$s,t);let i=this.observer.ignore(()=>{let r=No(this.contentDOM,this.contentAttrs,t),s=No(this.dom,this.editorAttrs,e);return r||s});return this.editorAttrs=e,this.contentAttrs=t,i}showAnnouncements(e){let t=!0;for(let i of e)for(let r of i.effects)if(r.is(I.announce)){t&&(this.announceDOM.textContent=""),t=!1;let s=this.announceDOM.appendChild(document.createElement("div"));s.textContent=r.value}}mountStyles(){this.styleModules=this.state.facet(wi);let e=this.state.facet(I.cspNonce);vt.mount(this.root,this.styleModules.concat(Zu).reverse(),e?{nonce:e}:void 0)}readMeasured(){if(this.updateState==2)throw new Error("Reading the editor layout isn't allowed during an update");this.updateState==0&&this.measureScheduled>-1&&this.measure(!1)}requestMeasure(e){if(this.measureScheduled<0&&(this.measureScheduled=this.win.requestAnimationFrame(()=>this.measure())),e){if(this.measureRequests.indexOf(e)>-1)return;if(e.key!=null){for(let t=0;ti.plugin==e)||null),t&&t.update(this).value}get documentTop(){return this.contentDOM.getBoundingClientRect().top+this.viewState.paddingTop}get documentPadding(){return{top:this.viewState.paddingTop,bottom:this.viewState.paddingBottom}}get scaleX(){return this.viewState.scaleX}get scaleY(){return this.viewState.scaleY}elementAtHeight(e){return this.readMeasured(),this.viewState.elementAtHeight(e)}lineBlockAtHeight(e){return this.readMeasured(),this.viewState.lineBlockAtHeight(e)}get viewportLineBlocks(){return this.viewState.viewportLines}lineBlockAt(e){return this.viewState.lineBlockAt(e)}get contentHeight(){return this.viewState.contentHeight}moveByChar(e,t,i){return Sr(this,e,$o(this,e,t,i))}moveByGroup(e,t){return Sr(this,e,$o(this,e,t,i=>pu(this,e.head,i)))}visualLineSide(e,t){let i=this.bidiSpans(e),r=this.textDirectionAt(e.from),s=i[t?i.length-1:0];return b.cursor(s.side(t,r)+e.from,s.forward(!t,r)?1:-1)}moveToLineBoundary(e,t,i=!0){return du(this,e,t,i)}moveVertically(e,t,i){return Sr(this,e,mu(this,e,t,i))}domAtPos(e,t=1){return this.docView.domAtPos(e,t)}posAtDOM(e,t=0){return this.docView.posFromDOM(e,t)}posAtCoords(e,t=!0){this.readMeasured();let i=ps(this,e,t);return i&&i.pos}posAndSideAtCoords(e,t=!0){return this.readMeasured(),ps(this,e,t)}coordsAtPos(e,t=1){this.readMeasured();let i=this.docView.coordsAt(e,t);if(!i||i.left==i.right)return i;let r=this.state.doc.lineAt(e),s=this.bidiSpans(r),o=s[tt.find(s,e-r.from,-1,t)];return Fn(i,o.dir==Z.LTR==t>0)}coordsForChar(e){return this.readMeasured(),this.docView.coordsForChar(e)}get defaultCharacterWidth(){return this.viewState.heightOracle.charWidth}get defaultLineHeight(){return this.viewState.heightOracle.lineHeight}get textDirection(){return this.viewState.defaultTextDirection}textDirectionAt(e){return!this.state.facet(Ga)||ethis.viewport.to?this.textDirection:(this.readMeasured(),this.docView.textDirectionAt(e))}get lineWrapping(){return this.viewState.heightOracle.lineWrapping}bidiSpans(e){if(e.length>rd)return Va(e.length);let t=this.textDirectionAt(e.from),i;for(let s of this.bidiCache)if(s.from==e.from&&s.dir==t&&(s.fresh||Wa(s.isolates,i=Wo(this,e))))return s.order;i||(i=Wo(this,e));let r=_f(e.text,t,i);return this.bidiCache.push(new $n(e.from,e.to,t,i,!0,r)),r}get hasFocus(){var e;return(this.dom.ownerDocument.hasFocus()||O.safari&&((e=this.inputState)===null||e===void 0?void 0:e.lastContextMenu)>Date.now()-3e4)&&this.root.activeElement==this.contentDOM}focus(){this.observer.ignore(()=>{Ba(this.contentDOM),this.docView.updateSelection()})}setRoot(e){this._root!=e&&(this._root=e,this.observer.setWindow((e.nodeType==9?e:e.ownerDocument).defaultView||window),this.mountStyles())}destroy(){this.root.activeElement==this.contentDOM&&this.contentDOM.blur();for(let e of this.plugins)e.destroy(this);this.plugins=[],this.inputState.destroy(),this.docView.destroy(),this.dom.remove(),this.observer.destroy(),this.measureScheduled>-1&&this.win.cancelAnimationFrame(this.measureScheduled),this.destroyed=!0}static scrollIntoView(e,t={}){var i,r,s,o;return on.of(new ei(typeof e=="number"?b.cursor(e):e,(i=t.y)!==null&&i!==void 0?i:"nearest",(r=t.x)!==null&&r!==void 0?r:"nearest",(s=t.yMargin)!==null&&s!==void 0?s:5,(o=t.xMargin)!==null&&o!==void 0?o:5))}scrollSnapshot(){let{scrollTop:e,scrollLeft:t}=this.scrollDOM,i=this.viewState.scrollAnchorAt(e);return on.of(new ei(b.cursor(i.from),"start","start",i.top-e,t,!0))}setTabFocusMode(e){e==null?this.inputState.tabFocusMode=this.inputState.tabFocusMode<0?0:-1:typeof e=="boolean"?this.inputState.tabFocusMode=e?0:-1:this.inputState.tabFocusMode!=0&&(this.inputState.tabFocusMode=Date.now()+e)}static domEventHandlers(e){return _e.define(()=>({}),{eventHandlers:e})}static domEventObservers(e){return _e.define(()=>({}),{eventObservers:e})}static theme(e,t){let i=vt.newName(),r=[un.of(i),wi.of(bs(`.${i}`,e))];return t&&t.dark&&r.push(gs.of(!0)),r}static baseTheme(e){return at.lowest(wi.of(bs("."+ys,e,bh)))}static findFromDOM(e){var t;let i=e.querySelector(".cm-content"),r=i&&ee.get(i)||ee.get(e);return((t=r==null?void 0:r.root)===null||t===void 0?void 0:t.view)||null}}I.styleModule=wi;I.inputHandler=Ka;I.clipboardInputFilter=Hs;I.clipboardOutputFilter=zs;I.scrollHandler=Ya;I.focusChangeEffect=ja;I.perLineTextDirection=Ga;I.exceptionSink=Ua;I.updateListener=us;I.editable=lt;I.mouseSelectionStyle=qa;I.dragMovesSelection=$a;I.clickAddsSelectionRange=za;I.decorations=Zn;I.blockWrappers=Qa;I.outerDecorations=qs;I.atomicRanges=Gi;I.bidiIsolatedRanges=Za;I.cursorScrollMargin=B.define({combine:n=>{let e=5,t=5;for(let i of n)typeof i=="number"?e=t=i:{x:e,y:t}=i;return{x:e,y:t}}});I.scrollMargins=eh;I.darkTheme=gs;I.cspNonce=B.define({combine:n=>n.length?n[0]:""});I.contentAttributes=$s;I.editorAttributes=Ja;I.lineWrapping=I.contentAttributes.of({class:"cm-lineWrapping"});I.announce=j.define();const rd=4096,ol={};class $n{constructor(e,t,i,r,s,o){this.from=e,this.to=t,this.dir=i,this.isolates=r,this.fresh=s,this.order=o}static update(e,t){if(t.empty&&!e.some(s=>s.fresh))return e;let i=[],r=e.length?e[e.length-1].dir:Z.LTR;for(let s=Math.max(0,e.length-10);s=0;r--){let s=i[r],o=typeof s=="function"?s(n):s;o&&_s(o,t)}return t}const sd=O.mac?"mac":O.windows?"win":O.linux?"linux":"key";function od(n,e){const t=n.split(/-(?!$)/);let i=t[t.length-1];i=="Space"&&(i=" ");let r,s,o,l;for(let a=0;ai.concat(r),[]))),t}let gt=null;const hd=4e3;function cd(n,e=sd){let t=Object.create(null),i=Object.create(null),r=(o,l)=>{let a=i[o];if(a==null)i[o]=l;else if(a!=l)throw new Error("Key binding "+o+" is used both as a regular binding and as a multi-stroke prefix")},s=(o,l,a,h,c)=>{var f,u;let d=t[o]||(t[o]=Object.create(null)),p=l.split(/ (?!$)/).map(y=>od(y,e));for(let y=1;y{let D=gt={view:T,prefix:w,scope:o};return setTimeout(()=>{gt==D&&(gt=null)},hd),!0}]})}let m=p.join(" ");r(m,!1);let g=d[m]||(d[m]={preventDefault:!1,stopPropagation:!1,run:((u=(f=d._any)===null||f===void 0?void 0:f.run)===null||u===void 0?void 0:u.slice())||[]});a&&g.run.push(a),h&&(g.preventDefault=!0),c&&(g.stopPropagation=!0)};for(let o of n){let l=o.scope?o.scope.split(" "):["editor"];if(o.any)for(let h of l){let c=t[h]||(t[h]=Object.create(null));c._any||(c._any={preventDefault:!1,stopPropagation:!1,run:[]});let{any:f}=o;for(let u in c)c[u].run.push(d=>f(d,ws))}let a=o[e]||o.key;if(a)for(let h of l)s(h,a,o.run,o.preventDefault,o.stopPropagation),o.shift&&s(h,"Shift-"+a,o.shift,o.preventDefault,o.stopPropagation)}return t}let ws=null;function fd(n,e,t,i){ws=e;let r=kf(e),s=Qe(r,0),o=mt(s)==r.length&&r!=" ",l="",a=!1,h=!1,c=!1;gt&>.view==t&>.scope==i&&(l=gt.prefix+" ",ah.indexOf(e.keyCode)<0&&(h=!0,gt=null));let f=new Set,u=g=>{if(g){for(let y of g.run)if(!f.has(y)&&(f.add(y),y(t)))return g.stopPropagation&&(c=!0),!0;g.preventDefault&&(g.stopPropagation&&(c=!0),h=!0)}return!1},d=n[i],p,m;return d&&(u(d[l+dn(r,e,!o)])?a=!0:o&&(e.altKey||e.metaKey||e.ctrlKey)&&!(O.windows&&e.ctrlKey&&e.altKey)&&!(O.mac&&e.altKey&&!(e.ctrlKey||e.metaKey))&&(p=kt[e.keyCode])&&p!=r?(u(d[l+dn(p,e,!0)])||e.shiftKey&&(m=Ri[e.keyCode])!=r&&m!=p&&u(d[l+dn(m,e,!1)]))&&(a=!0):o&&e.shiftKey&&u(d[l+dn(r,e,!0)])&&(a=!0),!a&&u(d._any)&&(a=!0)),h&&(a=!0),a&&c&&e.stopPropagation(),ws=null,a}function ud(){return pd}const dd=U.line({class:"cm-activeLine"}),pd=_e.fromClass(class{constructor(n){this.decorations=this.getDeco(n)}update(n){(n.docChanged||n.selectionSet)&&(this.decorations=this.getDeco(n.view))}getDeco(n){let e=-1,t=[];for(let i of n.state.selection.ranges){let r=n.lineBlockAt(i.head);r.from>e&&(t.push(dd.range(r.from)),e=r.from)}return U.set(t)}},{decorations:n=>n.decorations}),pn="-10000px";class md{constructor(e,t,i,r){this.facet=t,this.createTooltipView=i,this.removeTooltipView=r,this.input=e.state.facet(t),this.tooltips=this.input.filter(o=>o);let s=null;this.tooltipViews=this.tooltips.map(o=>s=i(o,s))}update(e,t){var i;let r=e.state.facet(this.facet),s=r.filter(a=>a);if(r===this.input){for(let a of this.tooltipViews)a.update&&a.update(e);return!1}let o=[],l=t?[]:null;for(let a=0;at[h]=a),t.length=l.length),this.input=r,this.tooltips=s,this.tooltipViews=o,!0}}function gd(n){let e=n.dom.ownerDocument.documentElement;return{top:0,left:0,bottom:e.clientHeight,right:e.clientWidth}}const Tr=B.define({combine:n=>{var e,t,i;return{position:O.ios?"absolute":((e=n.find(r=>r.position))===null||e===void 0?void 0:e.position)||"fixed",parent:((t=n.find(r=>r.parent))===null||t===void 0?void 0:t.parent)||null,tooltipSpace:((i=n.find(r=>r.tooltipSpace))===null||i===void 0?void 0:i.tooltipSpace)||gd}}}),hl=new WeakMap,wh=_e.fromClass(class{constructor(n){this.view=n,this.above=[],this.inView=!0,this.madeAbsolute=!1,this.lastTransaction=0,this.measureTimeout=-1;let e=n.state.facet(Tr);this.position=e.position,this.parent=e.parent,this.classes=n.themeClasses,this.createContainer(),this.measureReq={read:this.readMeasure.bind(this),write:this.writeMeasure.bind(this),key:this},this.resizeObserver=typeof ResizeObserver=="function"?new ResizeObserver(()=>this.measureSoon()):null,this.manager=new md(n,xh,(t,i)=>this.createTooltip(t,i),t=>{this.resizeObserver&&this.resizeObserver.unobserve(t.dom),t.dom.remove()}),this.above=this.manager.tooltips.map(t=>!!t.above),this.intersectionObserver=typeof IntersectionObserver=="function"?new IntersectionObserver(t=>{Date.now()>this.lastTransaction-50&&t.length>0&&t[t.length-1].intersectionRatio<1&&this.measureSoon()},{threshold:[1]}):null,this.observeIntersection(),n.win.addEventListener("resize",this.measureSoon=this.measureSoon.bind(this)),this.maybeMeasure()}createContainer(){this.parent?(this.container=document.createElement("div"),this.container.style.position="relative",this.container.className=this.view.themeClasses,this.parent.appendChild(this.container)):this.container=this.view.dom}observeIntersection(){if(this.intersectionObserver){this.intersectionObserver.disconnect();for(let n of this.manager.tooltipViews)this.intersectionObserver.observe(n.dom)}}measureSoon(){this.measureTimeout<0&&(this.measureTimeout=setTimeout(()=>{this.measureTimeout=-1,this.maybeMeasure()},50))}update(n){n.transactions.length&&(this.lastTransaction=Date.now());let e=this.manager.update(n,this.above);e&&this.observeIntersection();let t=e||n.geometryChanged,i=n.state.facet(Tr);if(i.position!=this.position&&!this.madeAbsolute){this.position=i.position;for(let r of this.manager.tooltipViews)r.dom.style.position=this.position;t=!0}if(i.parent!=this.parent){this.parent&&this.container.remove(),this.parent=i.parent,this.createContainer();for(let r of this.manager.tooltipViews)this.container.appendChild(r.dom);t=!0}else this.parent&&this.view.themeClasses!=this.classes&&(this.classes=this.container.className=this.view.themeClasses);t&&this.maybeMeasure()}createTooltip(n,e){let t=n.create(this.view),i=e?e.dom:null;if(t.dom.classList.add("cm-tooltip"),n.arrow&&!t.dom.querySelector(".cm-tooltip > .cm-tooltip-arrow")){let r=document.createElement("div");r.className="cm-tooltip-arrow",t.dom.appendChild(r)}return t.dom.style.position=this.position,t.dom.style.top=pn,t.dom.style.left="0px",this.container.insertBefore(t.dom,i),t.mount&&t.mount(this.view),this.resizeObserver&&this.resizeObserver.observe(t.dom),t}destroy(){var n,e,t;this.view.win.removeEventListener("resize",this.measureSoon);for(let i of this.manager.tooltipViews)i.dom.remove(),(n=i.destroy)===null||n===void 0||n.call(i);this.parent&&this.container.remove(),(e=this.resizeObserver)===null||e===void 0||e.disconnect(),(t=this.intersectionObserver)===null||t===void 0||t.disconnect(),clearTimeout(this.measureTimeout)}readMeasure(){let n=1,e=1,t=!1;if(this.position=="fixed"&&this.manager.tooltipViews.length){let{dom:s}=this.manager.tooltipViews[0];if(O.safari){let o=s.getBoundingClientRect();t=Math.abs(o.top+1e4)>1||Math.abs(o.left)>1}else t=!!s.offsetParent&&s.offsetParent!=this.container.ownerDocument.body}if(t||this.position=="absolute")if(this.parent){let s=this.parent.getBoundingClientRect();s.width&&s.height&&(n=s.width/this.parent.offsetWidth,e=s.height/this.parent.offsetHeight)}else({scaleX:n,scaleY:e}=this.view.viewState);let i=this.view.scrollDOM.getBoundingClientRect(),r=Us(this.view);return{visible:{left:i.left+r.left,top:i.top+r.top,right:i.right-r.right,bottom:i.bottom-r.bottom},parent:this.parent?this.container.getBoundingClientRect():this.view.dom.getBoundingClientRect(),pos:this.manager.tooltips.map((s,o)=>{let l=this.manager.tooltipViews[o];return l.getCoords?l.getCoords(s.pos):this.view.coordsAtPos(s.pos)}),size:this.manager.tooltipViews.map(({dom:s})=>s.getBoundingClientRect()),space:this.view.state.facet(Tr).tooltipSpace(this.view),scaleX:n,scaleY:e,makeAbsolute:t}}writeMeasure(n){var e;if(n.makeAbsolute){this.madeAbsolute=!0,this.position="absolute";for(let l of this.manager.tooltipViews)l.dom.style.position="absolute"}let{visible:t,space:i,scaleX:r,scaleY:s}=n,o=[];for(let l=0;l=Math.min(t.bottom,i.bottom)||f.rightMath.min(t.right,i.right)+.1)){c.style.top=pn;continue}let d=a.arrow?h.dom.querySelector(".cm-tooltip-arrow"):null,p=d?7:0,m=u.right-u.left,g=(e=hl.get(h))!==null&&e!==void 0?e:u.bottom-u.top,y=h.offset||bd,w=this.view.textDirection==Z.LTR,T=u.width>i.right-i.left?w?i.left:i.right-u.width:w?Math.max(i.left,Math.min(f.left-(d?14:0)+y.x,i.right-m)):Math.min(Math.max(i.left,f.left-m+(d?14:0)-y.x),i.right-m),D=this.above[l];!a.strictSide&&(D?f.top-g-p-y.yi.bottom)&&D==i.bottom-f.bottom>f.top-i.top&&(D=this.above[l]=!D);let M=(D?f.top-i.top:i.bottom-f.bottom)-p;if(MT&&F.topL&&(L=D?F.top-g-2-p:F.bottom+p+2);if(this.position=="absolute"?(c.style.top=(L-n.parent.top)/s+"px",cl(c,(T-n.parent.left)/r)):(c.style.top=L/s+"px",cl(c,T/r)),d){let F=f.left+(w?y.x:-y.x)-(T+14-7);d.style.left=F/r+"px"}h.overlap!==!0&&o.push({left:T,top:L,right:E,bottom:L+g}),c.classList.toggle("cm-tooltip-above",D),c.classList.toggle("cm-tooltip-below",!D),h.positioned&&h.positioned(n.space)}}maybeMeasure(){if(this.manager.tooltips.length&&(this.view.inView&&this.view.requestMeasure(this.measureReq),this.inView!=this.view.inView&&(this.inView=this.view.inView,!this.inView)))for(let n of this.manager.tooltipViews)n.dom.style.top=pn}},{eventObservers:{scroll(){this.maybeMeasure()}}});function cl(n,e){let t=parseInt(n.style.left,10);(isNaN(t)||Math.abs(e-t)>1)&&(n.style.left=e+"px")}const yd=I.baseTheme({".cm-tooltip":{zIndex:500,boxSizing:"border-box"},"&light .cm-tooltip":{border:"1px solid #bbb",backgroundColor:"#f5f5f5"},"&light .cm-tooltip-section:not(:first-child)":{borderTop:"1px solid #bbb"},"&dark .cm-tooltip":{backgroundColor:"#333338",color:"white"},".cm-tooltip-arrow":{height:"7px",width:"14px",position:"absolute",zIndex:-1,overflow:"hidden","&:before, &:after":{content:"''",position:"absolute",width:0,height:0,borderLeft:"7px solid transparent",borderRight:"7px solid transparent"},".cm-tooltip-above &":{bottom:"-7px","&:before":{borderTop:"7px solid #bbb"},"&:after":{borderTop:"7px solid #f5f5f5",bottom:"1px"}},".cm-tooltip-below &":{top:"-7px","&:before":{borderBottom:"7px solid #bbb"},"&:after":{borderBottom:"7px solid #f5f5f5",top:"1px"}}},"&dark .cm-tooltip .cm-tooltip-arrow":{"&:before":{borderTopColor:"#333338",borderBottomColor:"#333338"},"&:after":{borderTopColor:"transparent",borderBottomColor:"transparent"}}}),bd={x:0,y:0},xh=B.define({enables:[wh,yd]});function vh(n,e){let t=n.plugin(wh);if(!t)return null;let i=t.manager.tooltips.indexOf(e);return i<0?null:t.manager.tooltipViews[i]}class Ct extends xt{compare(e){return this==e||this.constructor==e.constructor&&this.eq(e)}eq(e){return!1}destroy(e){}}Ct.prototype.elementClass="";Ct.prototype.toDOM=void 0;Ct.prototype.mapMode=de.TrackBefore;Ct.prototype.startSide=Ct.prototype.endSide=-1;Ct.prototype.point=!0;const Mr=B.define(),wd=B.define(),xd={class:"",renderEmptyElements:!1,elementStyle:"",markers:()=>W.empty,lineMarker:()=>null,widgetMarker:()=>null,lineMarkerChange:null,initialSpacer:null,updateSpacer:null,domEventHandlers:{},side:"before"},Ti=B.define();function vd(n){return[kh(),Ti.of({...xd,...n})]}const fl=B.define({combine:n=>n.some(e=>e)});function kh(n){return[kd]}const kd=_e.fromClass(class{constructor(n){this.view=n,this.domAfter=null,this.prevViewport=n.viewport,this.dom=document.createElement("div"),this.dom.className="cm-gutters cm-gutters-before",this.dom.setAttribute("aria-hidden","true"),this.dom.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.gutters=n.state.facet(Ti).map(e=>new dl(n,e)),this.fixed=!n.state.facet(fl);for(let e of this.gutters)e.config.side=="after"?this.getDOMAfter().appendChild(e.dom):this.dom.appendChild(e.dom);this.fixed&&(this.dom.style.position="sticky"),this.syncGutters(!1),n.scrollDOM.insertBefore(this.dom,n.contentDOM)}getDOMAfter(){return this.domAfter||(this.domAfter=document.createElement("div"),this.domAfter.className="cm-gutters cm-gutters-after",this.domAfter.setAttribute("aria-hidden","true"),this.domAfter.style.minHeight=this.view.contentHeight/this.view.scaleY+"px",this.domAfter.style.position=this.fixed?"sticky":"",this.view.scrollDOM.appendChild(this.domAfter)),this.domAfter}update(n){if(this.updateGutters(n)){let e=this.prevViewport,t=n.view.viewport,i=Math.min(e.to,t.to)-Math.max(e.from,t.from);this.syncGutters(i<(t.to-t.from)*.8)}if(n.geometryChanged){let e=this.view.contentHeight/this.view.scaleY+"px";this.dom.style.minHeight=e,this.domAfter&&(this.domAfter.style.minHeight=e)}this.view.state.facet(fl)!=!this.fixed&&(this.fixed=!this.fixed,this.dom.style.position=this.fixed?"sticky":"",this.domAfter&&(this.domAfter.style.position=this.fixed?"sticky":"")),this.prevViewport=n.view.viewport}syncGutters(n){let e=this.dom.nextSibling;n&&(this.dom.remove(),this.domAfter&&this.domAfter.remove());let t=W.iter(this.view.state.facet(Mr),this.view.viewport.from),i=[],r=this.gutters.map(s=>new Sd(s,this.view.viewport,-this.view.documentPadding.top));for(let s of this.view.viewportLineBlocks)if(i.length&&(i=[]),Array.isArray(s.type)){let o=!0;for(let l of s.type)if(l.type==ve.Text&&o){xs(t,i,l.from);for(let a of r)a.line(this.view,l,i);o=!1}else if(l.widget)for(let a of r)a.widget(this.view,l)}else if(s.type==ve.Text){xs(t,i,s.from);for(let o of r)o.line(this.view,s,i)}else if(s.widget)for(let o of r)o.widget(this.view,s);for(let s of r)s.finish();n&&(this.view.scrollDOM.insertBefore(this.dom,e),this.domAfter&&this.view.scrollDOM.appendChild(this.domAfter))}updateGutters(n){let e=n.startState.facet(Ti),t=n.state.facet(Ti),i=n.docChanged||n.heightChanged||n.viewportChanged||!W.eq(n.startState.facet(Mr),n.state.facet(Mr),n.view.viewport.from,n.view.viewport.to);if(e==t)for(let r of this.gutters)r.update(n)&&(i=!0);else{i=!0;let r=[];for(let s of t){let o=e.indexOf(s);o<0?r.push(new dl(this.view,s)):(this.gutters[o].update(n),r.push(this.gutters[o]))}for(let s of this.gutters)s.dom.remove(),r.indexOf(s)<0&&s.destroy();for(let s of r)s.config.side=="after"?this.getDOMAfter().appendChild(s.dom):this.dom.appendChild(s.dom);this.gutters=r}return i}destroy(){for(let n of this.gutters)n.destroy();this.dom.remove(),this.domAfter&&this.domAfter.remove()}},{provide:n=>I.scrollMargins.of(e=>{let t=e.plugin(n);if(!t||t.gutters.length==0||!t.fixed)return null;let i=t.dom.offsetWidth*e.scaleX,r=t.domAfter?t.domAfter.offsetWidth*e.scaleX:0;return e.textDirection==Z.LTR?{left:i,right:r}:{right:i,left:r}})});function ul(n){return Array.isArray(n)?n:[n]}function xs(n,e,t){for(;n.value&&n.from<=t;)n.from==t&&e.push(n.value),n.next()}class Sd{constructor(e,t,i){this.gutter=e,this.height=i,this.i=0,this.cursor=W.iter(e.markers,t.from)}addElement(e,t,i){let{gutter:r}=this,s=(t.top-this.height)/e.scaleY,o=t.height/e.scaleY;if(this.i==r.elements.length){let l=new Sh(e,o,s,i);r.elements.push(l),r.dom.appendChild(l.dom)}else r.elements[this.i].update(e,o,s,i);this.height=t.bottom,this.i++}line(e,t,i){let r=[];xs(this.cursor,r,t.from),i.length&&(r=r.concat(i));let s=this.gutter.config.lineMarker(e,t,r);s&&r.unshift(s);let o=this.gutter;r.length==0&&!o.config.renderEmptyElements||this.addElement(e,t,r)}widget(e,t){let i=this.gutter.config.widgetMarker(e,t.widget,t),r=i?[i]:null;for(let s of e.state.facet(wd)){let o=s(e,t.widget,t);o&&(r||(r=[])).push(o)}r&&this.addElement(e,t,r)}finish(){let e=this.gutter;for(;e.elements.length>this.i;){let t=e.elements.pop();e.dom.removeChild(t.dom),t.destroy()}}}class dl{constructor(e,t){this.view=e,this.config=t,this.elements=[],this.spacer=null,this.dom=document.createElement("div"),this.dom.className="cm-gutter"+(this.config.class?" "+this.config.class:"");for(let i in t.domEventHandlers)this.dom.addEventListener(i,r=>{let s=r.target,o;if(s!=this.dom&&this.dom.contains(s)){for(;s.parentNode!=this.dom;)s=s.parentNode;let a=s.getBoundingClientRect();o=(a.top+a.bottom)/2}else o=r.clientY;let l=e.lineBlockAtHeight(o-e.documentTop);t.domEventHandlers[i](e,l,r)&&r.preventDefault()});this.markers=ul(t.markers(e)),t.initialSpacer&&(this.spacer=new Sh(e,0,0,[t.initialSpacer(e)]),this.dom.appendChild(this.spacer.dom),this.spacer.dom.style.cssText+="visibility: hidden; pointer-events: none")}update(e){let t=this.markers;if(this.markers=ul(this.config.markers(e.view)),this.spacer&&this.config.updateSpacer){let r=this.config.updateSpacer(this.spacer.markers[0],e);r!=this.spacer.markers[0]&&this.spacer.update(e.view,0,0,[r])}let i=e.view.viewport;return!W.eq(this.markers,t,i.from,i.to)||(this.config.lineMarkerChange?this.config.lineMarkerChange(e):!1)}destroy(){for(let e of this.elements)e.destroy()}}class Sh{constructor(e,t,i,r){this.height=-1,this.above=0,this.markers=[],this.dom=document.createElement("div"),this.dom.className="cm-gutterElement",this.update(e,t,i,r)}update(e,t,i,r){this.height!=t&&(this.height=t,this.dom.style.height=t+"px"),this.above!=i&&(this.dom.style.marginTop=(this.above=i)?i+"px":""),Cd(this.markers,r)||this.setMarkers(e,r)}setMarkers(e,t){let i="cm-gutterElement",r=this.dom.firstChild;for(let s=0,o=0;;){let l=o,a=ss(l,a,h)||o(l,a,h):o}return i}})}});class Dr extends Ct{constructor(e){super(),this.number=e}eq(e){return this.number==e.number}toDOM(){return document.createTextNode(this.number)}}function Er(n,e){return n.state.facet(Gt).formatNumber(e,n.state)}const Md=Ti.compute([Gt],n=>({class:"cm-lineNumbers",renderEmptyElements:!1,markers(e){return e.state.facet(Ad)},lineMarker(e,t,i){return i.some(r=>r.toDOM)?null:new Dr(Er(e,e.state.doc.lineAt(t.from).number))},widgetMarker:(e,t,i)=>{for(let r of e.state.facet(Td)){let s=r(e,t,i);if(s)return s}return null},lineMarkerChange:e=>e.startState.facet(Gt)!=e.state.facet(Gt),initialSpacer(e){return new Dr(Er(e,pl(e.state.doc.lines)))},updateSpacer(e,t){let i=Er(t.view,pl(t.view.state.doc.lines));return i==e.number?e:new Dr(i)},domEventHandlers:n.facet(Gt).domEventHandlers,side:"before"}));function Dd(n={}){return[Gt.of(n),kh(),Md]}function pl(n){let e=9;for(;e{throw new Error("This node type doesn't define a deserialize function")}),this.combine=e.combine||null}add(e){if(this.perNode)throw new RangeError("Can't add per-node props to node types");return typeof e!="function"&&(e=Se.match(e)),t=>{let i=e(t);return i===void 0?null:[this,i]}}}V.closedBy=new V({deserialize:n=>n.split(" ")});V.openedBy=new V({deserialize:n=>n.split(" ")});V.group=new V({deserialize:n=>n.split(" ")});V.isolate=new V({deserialize:n=>{if(n&&n!="rtl"&&n!="ltr"&&n!="auto")throw new RangeError("Invalid value for isolate: "+n);return n||"auto"}});V.contextHash=new V({perNode:!0});V.lookAhead=new V({perNode:!0});V.mounted=new V({perNode:!0});class Mi{constructor(e,t,i,r=!1){this.tree=e,this.overlay=t,this.parser=i,this.bracketed=r}static get(e){return e&&e.props&&e.props[V.mounted.id]}}const Ld=Object.create(null);class Se{constructor(e,t,i,r=0){this.name=e,this.props=t,this.id=i,this.flags=r}static define(e){let t=e.props&&e.props.length?Object.create(null):Ld,i=(e.top?1:0)|(e.skipped?2:0)|(e.error?4:0)|(e.name==null?8:0),r=new Se(e.name||"",t,e.id,i);if(e.props){for(let s of e.props)if(Array.isArray(s)||(s=s(r)),s){if(s[0].perNode)throw new RangeError("Can't store a per-node prop on a node type");t[s[0].id]=s[1]}}return r}prop(e){return this.props[e.id]}get isTop(){return(this.flags&1)>0}get isSkipped(){return(this.flags&2)>0}get isError(){return(this.flags&4)>0}get isAnonymous(){return(this.flags&8)>0}is(e){if(typeof e=="string"){if(this.name==e)return!0;let t=this.prop(V.group);return t?t.indexOf(e)>-1:!1}return this.id==e}static match(e){let t=Object.create(null);for(let i in e)for(let r of i.split(" "))t[r]=e[i];return i=>{for(let r=i.prop(V.group),s=-1;s<(r?r.length:0);s++){let o=t[s<0?i.name:r[s]];if(o)return o}}}}Se.none=new Se("",Object.create(null),0,8);class Ys{constructor(e){this.types=e;for(let t=0;t0;for(let a=this.cursor(o|ie.IncludeAnonymous);;){let h=!1;if(a.from<=s&&a.to>=r&&(!l&&a.type.isAnonymous||t(a)!==!1)){if(a.firstChild())continue;h=!0}for(;h&&i&&(l||!a.type.isAnonymous)&&i(a),!a.nextSibling();){if(!a.parent())return;h=!0}}}prop(e){return e.perNode?this.props?this.props[e.id]:void 0:this.type.prop(e)}get propValues(){let e=[];if(this.props)for(let t in this.props)e.push([+t,this.props[t]]);return e}balance(e={}){return this.children.length<=8?this:Qs(Se.none,this.children,this.positions,0,this.children.length,0,this.length,(t,i,r)=>new Q(this.type,t,i,r,this.propValues),e.makeTree||((t,i,r)=>new Q(Se.none,t,i,r)))}static build(e){return Pd(e)}}Q.empty=new Q(Se.none,[],[],0);class Xs{constructor(e,t){this.buffer=e,this.index=t}get id(){return this.buffer[this.index-4]}get start(){return this.buffer[this.index-3]}get end(){return this.buffer[this.index-2]}get size(){return this.buffer[this.index-1]}get pos(){return this.index}next(){this.index-=4}fork(){return new Xs(this.buffer,this.index)}}class At{constructor(e,t,i){this.buffer=e,this.length=t,this.set=i}get type(){return Se.none}toString(){let e=[];for(let t=0;t0));a=o[a+3]);return l}slice(e,t,i){let r=this.buffer,s=new Uint16Array(t-e),o=0;for(let l=e,a=0;l=e&&te;case 1:return t<=e&&i>e;case 2:return i>e;case 4:return!0}}function Ni(n,e,t,i){for(var r;n.from==n.to||(t<1?n.from>=e:n.from>e)||(t>-1?n.to<=e:n.to0?l.length:-1;e!=h;e+=t){let c=l[e],f=a[e]+o.from,u;if(!(!(s&ie.EnterBracketed&&c instanceof Q&&(u=Mi.get(c))&&!u.overlay&&u.bracketed&&i>=f&&i<=f+c.length)&&!Ch(r,i,f,f+c.length))){if(c instanceof At){if(s&ie.ExcludeBuffers)continue;let d=c.findChild(0,c.buffer.length,t,i-f,r);if(d>-1)return new bt(new Rd(o,c,e,f),null,d)}else if(s&ie.IncludeAnonymous||!c.type.isAnonymous||Js(c)){let d;if(!(s&ie.IgnoreMounts)&&(d=Mi.get(c))&&!d.overlay)return new Fe(d.tree,f,e,o);let p=new Fe(c,f,e,o);return s&ie.IncludeAnonymous||!p.type.isAnonymous?p:p.nextChild(t<0?c.children.length-1:0,t,i,r,s)}}}if(s&ie.IncludeAnonymous||!o.type.isAnonymous||(o.index>=0?e=o.index+t:e=t<0?-1:o._parent._tree.children.length,o=o._parent,!o))return null}}get firstChild(){return this.nextChild(0,1,0,4)}get lastChild(){return this.nextChild(this._tree.children.length-1,-1,0,4)}childAfter(e){return this.nextChild(0,1,e,2)}childBefore(e){return this.nextChild(this._tree.children.length-1,-1,e,-2)}prop(e){return this._tree.prop(e)}enter(e,t,i=0){let r;if(!(i&ie.IgnoreOverlays)&&(r=Mi.get(this._tree))&&r.overlay){let s=e-this.from,o=i&ie.EnterBracketed&&r.bracketed;for(let{from:l,to:a}of r.overlay)if((t>0||o?l<=s:l=s:a>s))return new Fe(r.tree,r.overlay[0].from+this.from,-1,this)}return this.nextChild(0,1,e,t,i)}nextSignificantParent(){let e=this;for(;e.type.isAnonymous&&e._parent;)e=e._parent;return e}get parent(){return this._parent?this._parent.nextSignificantParent():null}get nextSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index+1,1,0,4):null}get prevSibling(){return this._parent&&this.index>=0?this._parent.nextChild(this.index-1,-1,0,4):null}get tree(){return this._tree}toTree(){return this._tree}toString(){return this._tree.toString()}}function gl(n,e,t,i){let r=n.cursor(),s=[];if(!r.firstChild())return s;if(t!=null){for(let o=!1;!o;)if(o=r.type.is(t),!r.nextSibling())return s}for(;;){if(i!=null&&r.type.is(i))return s;if(r.type.is(e)&&s.push(r.node),!r.nextSibling())return i==null?s:[]}}function vs(n,e,t=e.length-1){for(let i=n;t>=0;i=i.parent){if(!i)return!1;if(!i.type.isAnonymous){if(e[t]&&e[t]!=i.name)return!1;t--}}return!0}class Rd{constructor(e,t,i,r){this.parent=e,this.buffer=t,this.index=i,this.start=r}}class bt extends Ah{get name(){return this.type.name}get from(){return this.context.start+this.context.buffer.buffer[this.index+1]}get to(){return this.context.start+this.context.buffer.buffer[this.index+2]}constructor(e,t,i){super(),this.context=e,this._parent=t,this.index=i,this.type=e.buffer.set.types[e.buffer.buffer[i]]}child(e,t,i){let{buffer:r}=this.context,s=r.findChild(this.index+4,r.buffer[this.index+3],e,t-this.context.start,i);return s<0?null:new bt(this.context,this,s)}get firstChild(){return this.child(1,0,4)}get lastChild(){return this.child(-1,0,4)}childAfter(e){return this.child(1,e,2)}childBefore(e){return this.child(-1,e,-2)}prop(e){return this.type.prop(e)}enter(e,t,i=0){if(i&ie.ExcludeBuffers)return null;let{buffer:r}=this.context,s=r.findChild(this.index+4,r.buffer[this.index+3],t>0?1:-1,e-this.context.start,t);return s<0?null:new bt(this.context,this,s)}get parent(){return this._parent||this.context.parent.nextSignificantParent()}externalSibling(e){return this._parent?null:this.context.parent.nextChild(this.context.index+e,e,0,4)}get nextSibling(){let{buffer:e}=this.context,t=e.buffer[this.index+3];return t<(this._parent?e.buffer[this._parent.index+3]:e.buffer.length)?new bt(this.context,this._parent,t):this.externalSibling(1)}get prevSibling(){let{buffer:e}=this.context,t=this._parent?this._parent.index+4:0;return this.index==t?this.externalSibling(-1):new bt(this.context,this._parent,e.findChild(t,this.index,-1,0,4))}get tree(){return null}toTree(){let e=[],t=[],{buffer:i}=this.context,r=this.index+4,s=i.buffer[this.index+3];if(s>r){let o=i.buffer[this.index+1];e.push(i.slice(r,s,o)),t.push(0)}return new Q(this.type,e,t,this.to-this.from)}toString(){return this.context.buffer.childString(this.index)}}function Th(n){if(!n.length)return null;let e=0,t=n[0];for(let s=1;st.from||o.to=e){let l=new Fe(o.tree,o.overlay[0].from+s.from,-1,s);(r||(r=[i])).push(Ni(l,e,t,!1))}}return r?Th(r):i}class ks{get name(){return this.type.name}constructor(e,t=0){if(this.buffer=null,this.stack=[],this.index=0,this.bufferNode=null,this.mode=t&~ie.EnterBracketed,e instanceof Fe)this.yieldNode(e);else{this._tree=e.context.parent,this.buffer=e.context;for(let i=e._parent;i;i=i._parent)this.stack.unshift(i.index);this.bufferNode=e,this.yieldBuf(e.index)}}yieldNode(e){return e?(this._tree=e,this.type=e.type,this.from=e.from,this.to=e.to,!0):!1}yieldBuf(e,t){this.index=e;let{start:i,buffer:r}=this.buffer;return this.type=t||r.set.types[r.buffer[e]],this.from=i+r.buffer[e+1],this.to=i+r.buffer[e+2],!0}yield(e){return e?e instanceof Fe?(this.buffer=null,this.yieldNode(e)):(this.buffer=e.context,this.yieldBuf(e.index,e.type)):!1}toString(){return this.buffer?this.buffer.buffer.childString(this.index):this._tree.toString()}enterChild(e,t,i){if(!this.buffer)return this.yield(this._tree.nextChild(e<0?this._tree._tree.children.length-1:0,e,t,i,this.mode));let{buffer:r}=this.buffer,s=r.findChild(this.index+4,r.buffer[this.index+3],e,t-this.buffer.start,i);return s<0?!1:(this.stack.push(this.index),this.yieldBuf(s))}firstChild(){return this.enterChild(1,0,4)}lastChild(){return this.enterChild(-1,0,4)}childAfter(e){return this.enterChild(1,e,2)}childBefore(e){return this.enterChild(-1,e,-2)}enter(e,t,i=this.mode){return this.buffer?i&ie.ExcludeBuffers?!1:this.enterChild(1,e,t):this.yield(this._tree.enter(e,t,i))}parent(){if(!this.buffer)return this.yieldNode(this.mode&ie.IncludeAnonymous?this._tree._parent:this._tree.parent);if(this.stack.length)return this.yieldBuf(this.stack.pop());let e=this.mode&ie.IncludeAnonymous?this.buffer.parent:this.buffer.parent.nextSignificantParent();return this.buffer=null,this.yieldNode(e)}sibling(e){if(!this.buffer)return this._tree._parent?this.yield(this._tree.index<0?null:this._tree._parent.nextChild(this._tree.index+e,e,0,4,this.mode)):!1;let{buffer:t}=this.buffer,i=this.stack.length-1;if(e<0){let r=i<0?0:this.stack[i]+4;if(this.index!=r)return this.yieldBuf(t.findChild(r,this.index,-1,0,4))}else{let r=t.buffer[this.index+3];if(r<(i<0?t.buffer.length:t.buffer[this.stack[i]+3]))return this.yieldBuf(r)}return i<0?this.yield(this.buffer.parent.nextChild(this.buffer.index+e,e,0,4,this.mode)):!1}nextSibling(){return this.sibling(1)}prevSibling(){return this.sibling(-1)}atLastNode(e){let t,i,{buffer:r}=this;if(r){if(e>0){if(this.index-1)for(let s=t+e,o=e<0?-1:i._tree.children.length;s!=o;s+=e){let l=i._tree.children[s];if(this.mode&ie.IncludeAnonymous||l instanceof At||!l.type.isAnonymous||Js(l))return!1}return!0}move(e,t){if(t&&this.enterChild(e,0,4))return!0;for(;;){if(this.sibling(e))return!0;if(this.atLastNode(e)||!this.parent())return!1}}next(e=!0){return this.move(1,e)}prev(e=!0){return this.move(-1,e)}moveTo(e,t=0){for(;(this.from==this.to||(t<1?this.from>=e:this.from>e)||(t>-1?this.to<=e:this.to=0;){for(let o=e;o;o=o._parent)if(o.index==r){if(r==this.index)return o;t=o,i=s+1;break e}r=this.stack[--s]}for(let r=i;r=0;s--){if(s<0)return vs(this._tree,e,r);let o=i[t.buffer[this.stack[s]]];if(!o.isAnonymous){if(e[r]&&e[r]!=o.name)return!1;r--}}return!0}}function Js(n){return n.children.some(e=>e instanceof At||!e.type.isAnonymous||Js(e))}function Pd(n){var e;let{buffer:t,nodeSet:i,maxBufferLength:r=Ed,reused:s=[],minRepeatType:o=i.types.length}=n,l=Array.isArray(t)?new Xs(t,t.length):t,a=i.types,h=0,c=0;function f(M,L,E,F,$,S){let{id:k,start:v,end:A,size:N}=l,K=c,z=h;if(N<0)if(l.next(),N==-1){let ae=s[k];E.push(ae),F.push(v-M);return}else if(N==-3){h=k;return}else if(N==-4){c=k;return}else throw new RangeError(`Unrecognized record size: ${N}`);let G=a[k],fe,oe,He=v-M;if(A-v<=r&&(oe=g(l.pos-L,$))){let ae=new Uint16Array(oe.size-oe.skip),_=l.pos-oe.size,J=ae.length;for(;l.pos>_;)J=y(oe.start,ae,J);fe=new At(ae,A-oe.start,i),He=oe.start-M}else{let ae=l.pos-N;l.next();let _=[],J=[],Ce=k>=o?k:-1,Ae=0,Te=A;for(;l.pos>ae;)Ce>=0&&l.id==Ce&&l.size>=0?(l.end<=Te-r&&(p(_,J,v,Ae,l.end,Te,Ce,K,z),Ae=_.length,Te=l.end),l.next()):S>2500?u(v,ae,_,J):f(v,ae,_,J,Ce,S+1);if(Ce>=0&&Ae>0&&Ae<_.length&&p(_,J,v,Ae,v,Te,Ce,K,z),_.reverse(),J.reverse(),Ce>-1&&Ae>0){let Et=d(G,z);fe=Qs(G,_,J,0,_.length,0,A-v,Et,Et)}else fe=m(G,_,J,A-v,K-A,z)}E.push(fe),F.push(He)}function u(M,L,E,F){let $=[],S=0,k=-1;for(;l.pos>L;){let{id:v,start:A,end:N,size:K}=l;if(K>4)l.next();else{if(k>-1&&A=0;N-=3)v[K++]=$[N],v[K++]=$[N+1]-A,v[K++]=$[N+2]-A,v[K++]=K;E.push(new At(v,$[2]-A,i)),F.push(A-M)}}function d(M,L){return(E,F,$)=>{let S=0,k=E.length-1,v,A;if(k>=0&&(v=E[k])instanceof Q){if(!k&&v.type==M&&v.length==$)return v;(A=v.prop(V.lookAhead))&&(S=F[k]+v.length+A)}return m(M,E,F,$,S,L)}}function p(M,L,E,F,$,S,k,v,A){let N=[],K=[];for(;M.length>F;)N.push(M.pop()),K.push(L.pop()+E-$);M.push(m(i.types[k],N,K,S-$,v-S,A)),L.push($-E)}function m(M,L,E,F,$,S,k){if(S){let v=[V.contextHash,S];k=k?[v].concat(k):[v]}if($>25){let v=[V.lookAhead,$];k=k?[v].concat(k):[v]}return new Q(M,L,E,F,k)}function g(M,L){let E=l.fork(),F=0,$=0,S=0,k=E.end-r,v={size:0,start:0,skip:0};e:for(let A=E.pos-M;E.pos>A;){let N=E.size;if(E.id==L&&N>=0){v.size=F,v.start=$,v.skip=S,S+=4,F+=4,E.next();continue}let K=E.pos-N;if(N<0||K=o?4:0,G=E.start;for(E.next();E.pos>K;){if(E.size<0)if(E.size==-3||E.size==-4)z+=4;else break e;else E.id>=o&&(z+=4);E.next()}$=G,F+=N,S+=z}return(L<0||F==M)&&(v.size=F,v.start=$,v.skip=S),v.size>4?v:void 0}function y(M,L,E){let{id:F,start:$,end:S,size:k}=l;if(l.next(),k>=0&&F4){let A=l.pos-(k-4);for(;l.pos>A;)E=y(M,L,E)}L[--E]=v,L[--E]=S-M,L[--E]=$-M,L[--E]=F}else k==-3?h=F:k==-4&&(c=F);return E}let w=[],T=[];for(;l.pos>0;)f(n.start||0,n.bufferStart||0,w,T,-1,0);let D=(e=n.length)!==null&&e!==void 0?e:w.length?T[0]+w[0].length:0;return new Q(a[n.topID],w.reverse(),T.reverse(),D)}const yl=new WeakMap;function Dn(n,e){if(!n.isAnonymous||e instanceof At||e.type!=n)return 1;let t=yl.get(e);if(t==null){t=1;for(let i of e.children){if(i.type!=n||!(i instanceof Q)){t=1;break}t+=Dn(n,i)}yl.set(e,t)}return t}function Qs(n,e,t,i,r,s,o,l,a){let h=0;for(let p=i;p=c)break;L+=E}if(T==D+1){if(L>c){let E=p[D];d(E.children,E.positions,0,E.children.length,m[D]+w);continue}f.push(p[D])}else{let E=m[T-1]+p[T-1].length-M;f.push(Qs(n,p,m,D,T,M,E,null,a))}u.push(M+w-s)}}return d(e,t,i,r,0),(l||a)(f,u,o)}class Vt{constructor(e,t,i,r,s=!1,o=!1){this.from=e,this.to=t,this.tree=i,this.offset=r,this.open=(s?1:0)|(o?2:0)}get openStart(){return(this.open&1)>0}get openEnd(){return(this.open&2)>0}static addTree(e,t=[],i=!1){let r=[new Vt(0,e.length,e,0,!1,i)];for(let s of t)s.to>e.length&&r.push(s);return r}static applyChanges(e,t,i=128){if(!t.length)return e;let r=[],s=1,o=e.length?e[0]:null;for(let l=0,a=0,h=0;;l++){let c=l=i)for(;o&&o.from=u.from||f<=u.to||h){let d=Math.max(u.from,a)-h,p=Math.min(u.to,f)-h;u=d>=p?null:new Vt(d,p,u.tree,u.offset+h,l>0,!!c)}if(u&&r.push(u),o.to>f)break;o=snew Or(r.from,r.to)):[new Or(0,0)]:[new Or(0,e.length)],this.createParse(e,t||[],i)}parse(e,t,i){let r=this.startParse(e,t,i);for(;;){let s=r.advance();if(s)return s}}}class Nd{constructor(e){this.string=e}get length(){return this.string.length}chunk(e){return this.string.slice(e)}get lineChunks(){return!1}read(e,t){return this.string.slice(e,t)}}new V({perNode:!0});let Fd=0;class Re{constructor(e,t,i,r){this.name=e,this.set=t,this.base=i,this.modified=r,this.id=Fd++}toString(){let{name:e}=this;for(let t of this.modified)t.name&&(e=`${t.name}(${e})`);return e}static define(e,t){let i=typeof e=="string"?e:"?";if(e instanceof Re&&(t=e),t!=null&&t.base)throw new Error("Can not derive from a modified tag");let r=new Re(i,[],null,[]);if(r.set.push(r),t)for(let s of t.set)r.set.push(s);return r}static defineModifier(e){let t=new qn(e);return i=>i.modified.indexOf(t)>-1?i:qn.get(i.base||i,i.modified.concat(t).sort((r,s)=>r.id-s.id))}}let _d=0;class qn{constructor(e){this.name=e,this.instances=[],this.id=_d++}static get(e,t){if(!t.length)return e;let i=t[0].instances.find(l=>l.base==e&&Wd(t,l.modified));if(i)return i;let r=[],s=new Re(e.name,r,e,t);for(let l of t)l.instances.push(s);let o=Vd(t);for(let l of e.set)if(!l.modified.length)for(let a of o)r.push(qn.get(l,a));return s}}function Wd(n,e){return n.length==e.length&&n.every((t,i)=>t==e[i])}function Vd(n){let e=[[]];for(let t=0;ti.length-t.length)}function Hd(n){let e=Object.create(null);for(let t in n){let i=n[t];Array.isArray(i)||(i=[i]);for(let r of t.split(" "))if(r){let s=[],o=2,l=r;for(let f=0;;){if(l=="..."&&f>0&&f+3==r.length){o=1;break}let u=/^"(?:[^"\\]|\\.)*?"|[^\/!]+/.exec(l);if(!u)throw new RangeError("Invalid path: "+r);if(s.push(u[0]=="*"?"":u[0][0]=='"'?JSON.parse(u[0]):u[0]),f+=u[0].length,f==r.length)break;let d=r[f++];if(f==r.length&&d=="!"){o=0;break}if(d!="/")throw new RangeError("Invalid path: "+r);l=r.slice(f)}let a=s.length-1,h=s[a];if(!h)throw new RangeError("Invalid path: "+r);let c=new Fi(i,o,a>0?s.slice(0,a):null);e[h]=c.sort(e[h])}}return Dh.add(e)}const Dh=new V({combine(n,e){let t,i,r;for(;n||e;){if(!n||e&&n.depth>=e.depth?(r=e,e=e.next):(r=n,n=n.next),t&&t.mode==r.mode&&!r.context&&!t.context)continue;let s=new Fi(r.tags,r.mode,r.context);t?t.next=s:i=s,t=s}return i}});class Fi{constructor(e,t,i,r){this.tags=e,this.mode=t,this.context=i,this.next=r}get opaque(){return this.mode==0}get inherit(){return this.mode==1}sort(e){return!e||e.depth{let o=r;for(let l of s)for(let a of l.set){let h=t[a.id];if(h){o=o?o+" "+h:h;break}}return o},scope:i}}function zd(n,e){let t=null;for(let i of n){let r=i.style(e);r&&(t=t?t+" "+r:r)}return t}function $d(n,e,t,i=0,r=n.length){let s=new qd(i,Array.isArray(e)?e:[e],t);s.highlightRange(n.cursor(),i,r,"",s.highlighters),s.flush(r)}class qd{constructor(e,t,i){this.at=e,this.highlighters=t,this.span=i,this.class=""}startSpan(e,t){t!=this.class&&(this.flush(e),e>this.at&&(this.at=e),this.class=t)}flush(e){e>this.at&&this.class&&this.span(this.at,e,this.class)}highlightRange(e,t,i,r,s){let{type:o,from:l,to:a}=e;if(l>=i||a<=t)return;o.isTop&&(s=this.highlighters.filter(d=>!d.scope||d.scope(o)));let h=r,c=Ud(e)||Fi.empty,f=zd(s,c.tags);if(f&&(h&&(h+=" "),h+=f,c.mode==1&&(r+=(r?" ":"")+f)),this.startSpan(Math.max(t,l),h),c.opaque)return;let u=e.tree&&e.tree.prop(V.mounted);if(u&&u.overlay){let d=e.node.enter(u.overlay[0].from+l,1),p=this.highlighters.filter(g=>!g.scope||g.scope(u.tree.type)),m=e.firstChild();for(let g=0,y=l;;g++){let w=g=T||!e.nextSibling())););if(!w||T>i)break;y=w.to+l,y>t&&(this.highlightRange(d.cursor(),Math.max(t,w.from+l),Math.min(i,y),"",p),this.startSpan(Math.min(i,y),h))}m&&e.parent()}else if(e.firstChild()){u&&(r="");do if(!(e.to<=t)){if(e.from>=i)break;this.highlightRange(e,t,i,r,s),this.startSpan(Math.min(i,e.to),h)}while(e.nextSibling());e.parent()}}}function Ud(n){let e=n.type.prop(Dh);for(;e&&e.context&&!n.matchContext(e.context);)e=e.next;return e||null}const C=Re.define,gn=C(),dt=C(),bl=C(dt),wl=C(dt),pt=C(),yn=C(pt),Lr=C(pt),Je=C(),Ot=C(Je),Ye=C(),Xe=C(),Ss=C(),mi=C(Ss),bn=C(),x={comment:gn,lineComment:C(gn),blockComment:C(gn),docComment:C(gn),name:dt,variableName:C(dt),typeName:bl,tagName:C(bl),propertyName:wl,attributeName:C(wl),className:C(dt),labelName:C(dt),namespace:C(dt),macroName:C(dt),literal:pt,string:yn,docString:C(yn),character:C(yn),attributeValue:C(yn),number:Lr,integer:C(Lr),float:C(Lr),bool:C(pt),regexp:C(pt),escape:C(pt),color:C(pt),url:C(pt),keyword:Ye,self:C(Ye),null:C(Ye),atom:C(Ye),unit:C(Ye),modifier:C(Ye),operatorKeyword:C(Ye),controlKeyword:C(Ye),definitionKeyword:C(Ye),moduleKeyword:C(Ye),operator:Xe,derefOperator:C(Xe),arithmeticOperator:C(Xe),logicOperator:C(Xe),bitwiseOperator:C(Xe),compareOperator:C(Xe),updateOperator:C(Xe),definitionOperator:C(Xe),typeOperator:C(Xe),controlOperator:C(Xe),punctuation:Ss,separator:C(Ss),bracket:mi,angleBracket:C(mi),squareBracket:C(mi),paren:C(mi),brace:C(mi),content:Je,heading:Ot,heading1:C(Ot),heading2:C(Ot),heading3:C(Ot),heading4:C(Ot),heading5:C(Ot),heading6:C(Ot),contentSeparator:C(Je),list:C(Je),quote:C(Je),emphasis:C(Je),strong:C(Je),link:C(Je),monospace:C(Je),strikethrough:C(Je),inserted:C(),deleted:C(),changed:C(),invalid:C(),meta:bn,documentMeta:C(bn),annotation:C(bn),processingInstruction:C(bn),definition:Re.defineModifier("definition"),constant:Re.defineModifier("constant"),function:Re.defineModifier("function"),standard:Re.defineModifier("standard"),local:Re.defineModifier("local"),special:Re.defineModifier("special")};for(let n in x){let e=x[n];e instanceof Re&&(e.name=n)}Eh([{tag:x.link,class:"tok-link"},{tag:x.heading,class:"tok-heading"},{tag:x.emphasis,class:"tok-emphasis"},{tag:x.strong,class:"tok-strong"},{tag:x.keyword,class:"tok-keyword"},{tag:x.atom,class:"tok-atom"},{tag:x.bool,class:"tok-bool"},{tag:x.url,class:"tok-url"},{tag:x.labelName,class:"tok-labelName"},{tag:x.inserted,class:"tok-inserted"},{tag:x.deleted,class:"tok-deleted"},{tag:x.literal,class:"tok-literal"},{tag:x.string,class:"tok-string"},{tag:x.number,class:"tok-number"},{tag:[x.regexp,x.escape,x.special(x.string)],class:"tok-string2"},{tag:x.variableName,class:"tok-variableName"},{tag:x.local(x.variableName),class:"tok-variableName tok-local"},{tag:x.definition(x.variableName),class:"tok-variableName tok-definition"},{tag:x.special(x.variableName),class:"tok-variableName2"},{tag:x.definition(x.propertyName),class:"tok-propertyName tok-definition"},{tag:x.typeName,class:"tok-typeName"},{tag:x.namespace,class:"tok-namespace"},{tag:x.className,class:"tok-className"},{tag:x.macroName,class:"tok-macroName"},{tag:x.propertyName,class:"tok-propertyName"},{tag:x.operator,class:"tok-operator"},{tag:x.comment,class:"tok-comment"},{tag:x.meta,class:"tok-meta"},{tag:x.invalid,class:"tok-invalid"},{tag:x.punctuation,class:"tok-punctuation"}]);var Rr;const Yt=new V;function Kd(n){return B.define({combine:n?e=>e.concat(n):void 0})}const jd=new V;class qe{constructor(e,t,i=[],r=""){this.data=e,this.name=r,q.prototype.hasOwnProperty("tree")||Object.defineProperty(q.prototype,"tree",{get(){return Oe(this)}}),this.parser=t,this.extension=[ai.of(this),q.languageData.of((s,o,l)=>{let a=xl(s,o,l),h=a.type.prop(Yt);if(!h)return[];let c=s.facet(h),f=a.type.prop(jd);if(f){let u=a.resolve(o-a.from,l);for(let d of f)if(d.test(u,s)){let p=s.facet(d.facet);return d.type=="replace"?p:p.concat(c)}}return c})].concat(i)}isActiveAt(e,t,i=-1){return xl(e,t,i).type.prop(Yt)==this.data}findRegions(e){let t=e.facet(ai);if((t==null?void 0:t.data)==this.data)return[{from:0,to:e.doc.length}];if(!t||!t.allowsNesting)return[];let i=[],r=(s,o)=>{if(s.prop(Yt)==this.data){i.push({from:o,to:o+s.length});return}let l=s.prop(V.mounted);if(l){if(l.tree.prop(Yt)==this.data){if(l.overlay)for(let a of l.overlay)i.push({from:a.from+o,to:a.to+o});else i.push({from:o,to:o+s.length});return}else if(l.overlay){let a=i.length;if(r(l.tree,l.overlay[0].from+o),i.length>a)return}}for(let a=0;a=this.cursorPos?this.doc.sliceString(e,t):this.string.slice(e-i,t-i)}}let gi=null;class oi{constructor(e,t,i=[],r,s,o,l,a){this.parser=e,this.state=t,this.fragments=i,this.tree=r,this.treeLen=s,this.viewport=o,this.skipped=l,this.scheduleOn=a,this.parse=null,this.tempSkipped=[]}static create(e,t,i){return new oi(e,t,[],Q.empty,0,i,[],null)}startParse(){return this.parser.startParse(new Gd(this.state.doc),this.fragments)}work(e,t){return t!=null&&t>=this.state.doc.length&&(t=void 0),this.tree!=Q.empty&&this.isDone(t??this.state.doc.length)?(this.takeTree(),!0):this.withContext(()=>{var i;if(typeof e=="number"){let r=Date.now()+e;e=()=>Date.now()>r}for(this.parse||(this.parse=this.startParse()),t!=null&&(this.parse.stoppedAt==null||this.parse.stoppedAt>t)&&t=this.treeLen&&((this.parse.stoppedAt==null||this.parse.stoppedAt>e)&&this.parse.stopAt(e),this.withContext(()=>{for(;!(t=this.parse.advance()););}),this.treeLen=e,this.tree=t,this.fragments=this.withoutTempSkipped(Vt.addTree(this.tree,this.fragments,!0)),this.parse=null)}withContext(e){let t=gi;gi=this;try{return e()}finally{gi=t}}withoutTempSkipped(e){for(let t;t=this.tempSkipped.pop();)e=vl(e,t.from,t.to);return e}changes(e,t){let{fragments:i,tree:r,treeLen:s,viewport:o,skipped:l}=this;if(this.takeTree(),!e.empty){let a=[];if(e.iterChangedRanges((h,c,f,u)=>a.push({fromA:h,toA:c,fromB:f,toB:u})),i=Vt.applyChanges(i,a),r=Q.empty,s=0,o={from:e.mapPos(o.from,-1),to:e.mapPos(o.to,1)},this.skipped.length){l=[];for(let h of this.skipped){let c=e.mapPos(h.from,1),f=e.mapPos(h.to,-1);ce.from&&(this.fragments=vl(this.fragments,r,s),this.skipped.splice(i--,1))}return this.skipped.length>=t?!1:(this.reset(),!0)}reset(){this.parse&&(this.takeTree(),this.parse=null)}skipUntilInView(e,t){this.skipped.push({from:e,to:t})}static getSkippingParser(e){return new class extends Mh{createParse(t,i,r){let s=r[0].from,o=r[r.length-1].to;return{parsedPos:s,advance(){let a=gi;if(a){for(let h of r)a.tempSkipped.push(h);e&&(a.scheduleOn=a.scheduleOn?Promise.all([a.scheduleOn,e]):e)}return this.parsedPos=o,new Q(Se.none,[],[],o-s)},stoppedAt:null,stopAt(){}}}}}isDone(e){e=Math.min(e,this.state.doc.length);let t=this.fragments;return this.treeLen>=e&&t.length&&t[0].from==0&&t[0].to>=e}static get(){return gi}}function vl(n,e,t){return Vt.applyChanges(n,[{fromA:e,toA:t,fromB:e,toB:t}])}class li{constructor(e){this.context=e,this.tree=e.tree}apply(e){if(!e.docChanged&&this.tree==this.context.tree)return this;let t=this.context.changes(e.changes,e.state),i=this.context.treeLen==e.startState.doc.length?void 0:Math.max(e.changes.mapPos(this.context.treeLen),t.viewport.to);return t.work(20,i)||t.takeTree(),new li(t)}static init(e){let t=Math.min(3e3,e.doc.length),i=oi.create(e.facet(ai).parser,e,{from:0,to:t});return i.work(20,t)||i.takeTree(),new li(i)}}qe.state=We.define({create:li.init,update(n,e){for(let t of e.effects)if(t.is(qe.setState))return t.value;return e.startState.facet(ai)!=e.state.facet(ai)?li.init(e.state):n.apply(e)}});let Oh=n=>{let e=setTimeout(()=>n(),500);return()=>clearTimeout(e)};typeof requestIdleCallback<"u"&&(Oh=n=>{let e=-1,t=setTimeout(()=>{e=requestIdleCallback(n,{timeout:400})},100);return()=>e<0?clearTimeout(t):cancelIdleCallback(e)});const Br=typeof navigator<"u"&&(!((Rr=navigator.scheduling)===null||Rr===void 0)&&Rr.isInputPending)?()=>navigator.scheduling.isInputPending():null,Yd=_e.fromClass(class{constructor(e){this.view=e,this.working=null,this.workScheduled=0,this.chunkEnd=-1,this.chunkBudget=-1,this.work=this.work.bind(this),this.scheduleWork()}update(e){let t=this.view.state.field(qe.state).context;(t.updateViewport(e.view.viewport)||this.view.viewport.to>t.treeLen)&&this.scheduleWork(),(e.docChanged||e.selectionSet)&&(this.view.hasFocus&&(this.chunkBudget+=50),this.scheduleWork()),this.checkAsyncSchedule(t)}scheduleWork(){if(this.working)return;let{state:e}=this.view,t=e.field(qe.state);(t.tree!=t.context.tree||!t.context.isDone(e.doc.length))&&(this.working=Oh(this.work))}work(e){this.working=null;let t=Date.now();if(this.chunkEndr+1e3,a=s.context.work(()=>Br&&Br()||Date.now()>o,r+(l?0:1e5));this.chunkBudget-=Date.now()-t,(a||this.chunkBudget<=0)&&(s.context.takeTree(),this.view.dispatch({effects:qe.setState.of(new li(s.context))})),this.chunkBudget>0&&!(a&&!l)&&this.scheduleWork(),this.checkAsyncSchedule(s.context)}checkAsyncSchedule(e){e.scheduleOn&&(this.workScheduled++,e.scheduleOn.then(()=>this.scheduleWork()).catch(t=>De(this.view.state,t)).then(()=>this.workScheduled--),e.scheduleOn=null)}destroy(){this.working&&this.working()}isWorking(){return!!(this.working||this.workScheduled>0)}},{eventHandlers:{focus(){this.scheduleWork()}}}),ai=B.define({combine(n){return n.length?n[0]:null},enables:n=>[qe.state,Yd,I.contentAttributes.compute([n],e=>{let t=e.facet(n);return t&&t.name?{"data-language":t.name}:{}})]}),Xd=B.define(),nr=B.define({combine:n=>{if(!n.length)return" ";let e=n[0];if(!e||/\S/.test(e)||Array.from(e).some(t=>t!=e[0]))throw new Error("Invalid indent unit: "+JSON.stringify(n[0]));return e}});function Ut(n){let e=n.facet(nr);return e.charCodeAt(0)==9?n.tabSize*e.length:e.length}function _i(n,e){let t="",i=n.tabSize,r=n.facet(nr)[0];if(r==" "){for(;e>=i;)t+=" ",e-=i;r=" "}for(let s=0;s=e?Jd(n,t,e):null}class rr{constructor(e,t={}){this.state=e,this.options=t,this.unit=Ut(e)}lineAt(e,t=1){let i=this.state.doc.lineAt(e),{simulateBreak:r,simulateDoubleBreak:s}=this.options;return r!=null&&r>=i.from&&r<=i.to?s&&r==e?{text:"",from:e}:(t<0?r-1&&(s+=o-this.countColumn(i,i.search(/\S|$/))),s}countColumn(e,t=e.length){return Jn(e,this.state.tabSize,t)}lineIndent(e,t=1){let{text:i,from:r}=this.lineAt(e,t),s=this.options.overrideIndentation;if(s){let o=s(r);if(o>-1)return o}return this.countColumn(i,i.search(/\S|$/))}get simulatedBreak(){return this.options.simulateBreak||null}}const Lh=new V;function Jd(n,e,t){let i=e.resolveStack(t),r=e.resolveInner(t,-1).resolve(t,0).enterUnfinishedNodesBefore(t);if(r!=i.node){let s=[];for(let o=r;o&&!(o.fromi.node.to||o.from==i.node.from&&o.type==i.node.type);o=o.parent)s.push(o);for(let o=s.length-1;o>=0;o--)i={node:s[o],next:i}}return Rh(i,n,t)}function Rh(n,e,t){for(let i=n;i;i=i.next){let r=Zd(i.node);if(r)return r(eo.create(e,t,i))}return 0}function Qd(n){return n.pos==n.options.simulateBreak&&n.options.simulateDoubleBreak}function Zd(n){let e=n.type.prop(Lh);if(e)return e;let t=n.firstChild,i;if(t&&(i=t.type.prop(V.closedBy))){let r=n.lastChild,s=r&&i.indexOf(r.name)>-1;return o=>np(o,!0,1,void 0,s&&!Qd(o)?r.from:void 0)}return n.parent==null?ep:null}function ep(){return 0}class eo extends rr{constructor(e,t,i){super(e.state,e.options),this.base=e,this.pos=t,this.context=i}get node(){return this.context.node}static create(e,t,i){return new eo(e,t,i)}get textAfter(){return this.textAfterPos(this.pos)}get baseIndent(){return this.baseIndentFor(this.node)}baseIndentFor(e){let t=this.state.doc.lineAt(e.from);for(;;){let i=e.resolve(t.from);for(;i.parent&&i.parent.from==i.from;)i=i.parent;if(tp(i,e))break;t=this.state.doc.lineAt(i.from)}return this.lineIndent(t.from)}continue(){return Rh(this.context.next,this.base,this.pos)}}function tp(n,e){for(let t=e;t;t=t.parent)if(n==t)return!0;return!1}function ip(n){let e=n.node,t=e.childAfter(e.from),i=e.lastChild;if(!t)return null;let r=n.options.simulateBreak,s=n.state.doc.lineAt(t.from),o=r==null||r<=s.from?s.to:Math.min(s.to,r);for(let l=t.to;;){let a=e.childAfter(l);if(!a||a==i)return null;if(!a.type.isSkipped){if(a.from>=o)return null;let h=/^ */.exec(s.text.slice(t.to-s.from))[0].length;return{from:t.from,to:t.to+h}}l=a.to}}function np(n,e,t,i,r){let s=n.textAfter,o=s.match(/^\s*/)[0].length,l=i&&s.slice(o,o+i.length)==i||r==n.pos+o,a=ip(n);return a?l?n.column(a.from):n.column(a.to):n.baseIndent+(l?0:n.unit*t)}const rp=200;function sp(){return q.transactionFilter.of(n=>{if(!n.docChanged||!n.isUserEvent("input.type")&&!n.isUserEvent("input.complete"))return n;let e=n.startState.languageDataAt("indentOnInput",n.startState.selection.main.head);if(!e.length)return n;let t=n.newDoc,{head:i}=n.newSelection.main,r=t.lineAt(i);if(i>r.from+rp)return n;let s=t.sliceString(r.from,i);if(!e.some(h=>h.test(s)))return n;let{state:o}=n,l=-1,a=[];for(let{head:h}of o.selection.ranges){let c=o.doc.lineAt(h);if(c.from==l)continue;l=c.from;let f=Zs(o,c.from);if(f==null)continue;let u=/^\s*/.exec(c.text)[0],d=_i(o,f);u!=d&&a.push({from:c.from,to:c.from+u.length,insert:d})}return a.length?[n,{changes:a,sequential:!0}]:n})}class sr{constructor(e,t){this.specs=e;let i;function r(l){let a=vt.newName();return(i||(i=Object.create(null)))["."+a]=l,a}const s=typeof t.all=="string"?t.all:t.all?r(t.all):void 0,o=t.scope;this.scope=o instanceof qe?l=>l.prop(Yt)==o.data:o?l=>l==o:void 0,this.style=Eh(e.map(l=>({tag:l.tag,class:l.class||r(Object.assign({},l,{tag:null}))})),{all:s}).style,this.module=i?new vt(i):null,this.themeType=t.themeType}static define(e,t){return new sr(e,t||{})}}const Cs=B.define(),op=B.define({combine(n){return n.length?[n[0]]:null}});function Ir(n){let e=n.facet(Cs);return e.length?e:n.facet(op)}function lp(n,e){let t=[hp],i;return n instanceof sr&&(n.module&&t.push(I.styleModule.of(n.module)),i=n.themeType),i?t.push(Cs.computeN([I.darkTheme],r=>r.facet(I.darkTheme)==(i=="dark")?[n]:[])):t.push(Cs.of(n)),t}class ap{constructor(e){this.markCache=Object.create(null),this.tree=Oe(e.state),this.decorations=this.buildDeco(e,Ir(e.state)),this.decoratedTo=e.viewport.to}update(e){let t=Oe(e.state),i=Ir(e.state),r=i!=Ir(e.startState),{viewport:s}=e.view,o=e.changes.mapPos(this.decoratedTo,1);t.length=s.to?(this.decorations=this.decorations.map(e.changes),this.decoratedTo=o):(t!=this.tree||e.viewportChanged||r)&&(this.tree=t,this.decorations=this.buildDeco(e.view,i),this.decoratedTo=s.to)}buildDeco(e,t){if(!t||!this.tree.length)return U.none;let i=new Oi;for(let{from:r,to:s}of e.visibleRanges)$d(this.tree,t,(o,l,a)=>{i.add(o,l,this.markCache[a]||(this.markCache[a]=U.mark({class:a})))},r,s);return i.finish()}}const hp=at.high(_e.fromClass(ap,{decorations:n=>n.decorations})),cp=I.baseTheme({"&.cm-focused .cm-matchingBracket":{backgroundColor:"#328c8252"},"&.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bb555544"}}),Bh=1e4,Ih="()[]{}",Ph=B.define({combine(n){return Xn(n,{afterCursor:!0,brackets:Ih,maxScanDistance:Bh,renderMatch:dp})}}),fp=U.mark({class:"cm-matchingBracket"}),up=U.mark({class:"cm-nonmatchingBracket"});function dp(n){let e=[],t=n.matched?fp:up;return e.push(t.range(n.start.from,n.start.to)),n.end&&e.push(t.range(n.end.from,n.end.to)),e}function kl(n){let e=[],t=n.facet(Ph);for(let i of n.selection.ranges){if(!i.empty)continue;let r=it(n,i.head,-1,t)||i.head>0&&it(n,i.head-1,1,t)||t.afterCursor&&(it(n,i.head,1,t)||i.headn.decorations}),mp=[pp,cp];function gp(n={}){return[Ph.of(n),mp]}const yp=new V;function As(n,e,t){let i=n.prop(e<0?V.openedBy:V.closedBy);if(i)return i;if(n.name.length==1){let r=t.indexOf(n.name);if(r>-1&&r%2==(e<0?1:0))return[t[r+e]]}return null}function Ts(n){let e=n.type.prop(yp);return e?e(n.node):n}function it(n,e,t,i={}){let r=i.maxScanDistance||Bh,s=i.brackets||Ih,o=Oe(n),l=o.resolveInner(e,t);for(let a=l;a;a=a.parent){let h=As(a.type,t,s);if(h&&a.from0?e>=c.from&&ec.from&&e<=c.to))return bp(n,e,t,a,c,h,s)}}return wp(n,e,t,o,l.type,r,s)}function bp(n,e,t,i,r,s,o){let l=i.parent,a={from:r.from,to:r.to},h=0,c=l==null?void 0:l.cursor();if(c&&(t<0?c.childBefore(i.from):c.childAfter(i.to)))do if(t<0?c.to<=i.from:c.from>=i.to){if(h==0&&s.indexOf(c.type.name)>-1&&c.from0)return null;let h={from:t<0?e-1:e,to:t>0?e+1:e},c=n.doc.iterRange(e,t>0?n.doc.length:0),f=0;for(let u=0;!c.next().done&&u<=s;){let d=c.value;t<0&&(u+=d.length);let p=e+u*t;for(let m=t>0?0:d.length-1,g=t>0?d.length:-1;m!=g;m+=t){let y=o.indexOf(d[m]);if(!(y<0||i.resolveInner(p+m,1).type!=r))if(y%2==0==t>0)f++;else{if(f==1)return{start:h,end:{from:p+m,to:p+m+1},matched:y>>1==a>>1};f--}}t>0&&(u+=d.length)}return c.done?{start:h,matched:!1}:null}function Sl(n,e,t,i=0,r=0){e==null&&(e=n.search(/[^\s\u00a0]/),e==-1&&(e=n.length));let s=r;for(let o=i;o=this.string.length}sol(){return this.pos==0}peek(){return this.string.charAt(this.pos)||void 0}next(){if(this.post}eatSpace(){let e=this.pos;for(;/[\s\u00a0]/.test(this.string.charAt(this.pos));)++this.pos;return this.pos>e}skipToEnd(){this.pos=this.string.length}skipTo(e){let t=this.string.indexOf(e,this.pos);if(t>-1)return this.pos=t,!0}backUp(e){this.pos-=e}column(){return this.lastColumnPosi?o.toLowerCase():o,s=this.string.substr(this.pos,e.length);return r(s)==r(e)?(t!==!1&&(this.pos+=e.length),!0):null}else{let r=this.string.slice(this.pos).match(e);return r&&r.index>0?null:(r&&t!==!1&&(this.pos+=r[0].length),r)}}current(){return this.string.slice(this.start,this.pos)}}function xp(n){return{name:n.name||"",token:n.token,blankLine:n.blankLine||(()=>{}),startState:n.startState||(()=>!0),copyState:n.copyState||vp,indent:n.indent||(()=>null),languageData:n.languageData||{},tokenTable:n.tokenTable||no,mergeTokens:n.mergeTokens!==!1}}function vp(n){if(typeof n!="object")return n;let e={};for(let t in n){let i=n[t];e[t]=i instanceof Array?i.slice():i}return e}const Cl=new WeakMap;class to extends qe{constructor(e){let t=Kd(e.languageData),i=xp(e),r,s=new class extends Mh{createParse(o,l,a){return new Sp(r,o,l,a)}};super(t,s,[],e.name),this.topNode=Tp(t,this),r=this,this.streamParser=i,this.stateAfter=new V({perNode:!0}),this.tokenTable=e.tokenTable?new Vh(i.tokenTable):Ap}static define(e){return new to(e)}getIndent(e){let t,{overrideIndentation:i}=e.options;i&&(t=Cl.get(e.state),t!=null&&t1e4)return null;for(;s=i&&t+e.length<=r&&e.prop(n.stateAfter);if(s)return{state:n.streamParser.copyState(s),pos:t+e.length};for(let o=e.children.length-1;o>=0;o--){let l=e.children[o],a=t+e.positions[o],h=l instanceof Q&&a=e.length)return e;!r&&t==0&&e.type==n.topNode&&(r=!0);for(let s=e.children.length-1;s>=0;s--){let o=e.positions[s],l=e.children[s],a;if(ot&&io(n,s.tree,0-s.offset,t,l),h;if(a&&a.pos<=i&&(h=Fh(n,s.tree,t+s.offset,a.pos+s.offset,!1)))return{state:a.state,tree:h}}return{state:n.streamParser.startState(r?Ut(r):4),tree:Q.empty}}class Sp{constructor(e,t,i,r){this.lang=e,this.input=t,this.fragments=i,this.ranges=r,this.stoppedAt=null,this.chunks=[],this.chunkPos=[],this.chunk=[],this.chunkReused=void 0,this.rangeIndex=0,this.to=r[r.length-1].to;let s=oi.get(),o=r[0].from,{state:l,tree:a}=kp(e,i,o,this.to,s==null?void 0:s.state);this.state=l,this.parsedPos=this.chunkStart=o+a.length;for(let h=0;hh.from<=s.viewport.from&&h.to>=s.viewport.from)&&(this.state=this.lang.streamParser.startState(Ut(s.state)),s.skipUntilInView(this.parsedPos,s.viewport.from),this.parsedPos=s.viewport.from),this.moveRangeIndex()}advance(){let e=oi.get(),t=this.stoppedAt==null?this.to:Math.min(this.to,this.stoppedAt),i=Math.min(t,this.chunkStart+512);for(e&&(i=Math.min(i,e.viewport.to));this.parsedPos=t?this.finish():e&&this.parsedPos>=e.viewport.to?(e.skipUntilInView(this.parsedPos,t),this.finish()):null}stopAt(e){this.stoppedAt=e}lineAfter(e){let t=this.input.chunk(e);if(this.input.lineChunks)t==` `&&(t="");else{let i=t.indexOf(` -`);i>-1&&(t=t.slice(0,i))}return e+t.length<=this.to?t:t.slice(0,this.to-e)}nextLine(){let e=this.parsedPos,t=this.lineAfter(e),i=e+t.length;for(let r=this.rangeIndex;;){let s=this.ranges[r].to;if(s>=i||(t=t.slice(0,s-(i-t.length)),r++,r==this.ranges.length))break;let o=this.ranges[r].from,l=this.lineAfter(o);t+=l,i=o+l.length}return{line:t,end:i}}skipGapsTo(e,t,i){for(;;){let r=this.ranges[this.rangeIndex].to,s=e+t;if(i>0?r>s:r>=s)break;let o=this.ranges[++this.rangeIndex].from;t+=o-r}return t}moveRangeIndex(){for(;this.ranges[this.rangeIndex].to1){r=this.skipGapsTo(t,r,1),t+=r;let l=this.chunk.length;r=this.skipGapsTo(i,r,-1),i+=r,s+=this.chunk.length-l}let o=this.chunk.length-4;return this.lang.streamParser.mergeTokens&&s==4&&o>=0&&this.chunk[o]==e&&this.chunk[o+2]==t?this.chunk[o+2]=i:this.chunk.push(e,t,i,s),r}parseLine(e){let{line:t,end:i}=this.nextLine(),r=0,{streamParser:s}=this.lang,o=new Ch(t,e?e.state.tabSize:4,e?$t(e.state):2);if(o.eol())s.blankLine(this.state,o.indentUnit);else for(;!o.eol();){let l=Th(s.token,o,this.state);if(l&&(r=this.emitToken(this.lang.tokenTable.resolve(l),this.parsedPos+o.start,this.parsedPos+o.pos,r)),o.start>1e4)break}this.parsedPos=i,this.moveRangeIndex(),this.parsedPose.start)return r}throw new Error("Stream parser failed to advance stream.")}const Zs=Object.create(null),Fi=[Se.none],cp=new Us(Fi),yl=[],bl=Object.create(null),Mh=Object.create(null);for(let[n,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])Mh[n]=Eh(Zs,e);class Dh{constructor(e){this.extra=e,this.table=Object.assign(Object.create(null),Mh)}resolve(e){return e?this.table[e]||(this.table[e]=Eh(this.extra,e)):0}}const fp=new Dh(Zs);function Er(n,e){yl.indexOf(n)>-1||(yl.push(n),console.warn(e))}function Eh(n,e){let t=[];for(let l of e.split(" ")){let a=[];for(let h of l.split(".")){let c=n[h]||x[h];c?typeof c=="function"?a.length?a=a.map(c):Er(h,`Modifier ${h} used at start of tag`):a.length?Er(h,`Tag ${h} used as modifier`):a=Array.isArray(c)?c:[c]:Er(h,`Unknown highlighting tag ${h}`)}for(let h of a)t.push(h)}if(!t.length)return 0;let i=e.replace(/ /g,"_"),r=i+" "+t.map(l=>l.id),s=bl[r];if(s)return s.id;let o=bl[r]=Se.define({id:Fi.length,name:i,props:[Md({[i]:t})]});return Fi.push(o),o.id}function up(n,e){let t=Se.define({id:Fi.length,name:"Document",props:[Gt.add(()=>n),wh.add(()=>i=>e.getIndent(i))],top:!0});return Fi.push(t),t}Z.RTL,Z.LTR;const dp=n=>{let{state:e}=n,t=e.doc.lineAt(e.selection.main.from),i=to(n.state,t.from);return i.line?pp(n):i.block?gp(n):!1};function eo(n,e){return({state:t,dispatch:i})=>{if(t.readOnly)return!1;let r=n(e,t);return r?(i(t.update(r)),!0):!1}}const pp=eo(wp,0),mp=eo(Oh,0),gp=eo((n,e)=>Oh(n,e,bp(e)),0);function to(n,e){let t=n.languageDataAt("commentTokens",e,1);return t.length?t[0]:{}}const mi=50;function yp(n,{open:e,close:t},i,r){let s=n.sliceDoc(i-mi,i),o=n.sliceDoc(r,r+mi),l=/\s*$/.exec(s)[0].length,a=/^\s*/.exec(o)[0].length,h=s.length-l;if(s.slice(h-e.length,h)==e&&o.slice(a,a+t.length)==t)return{open:{pos:i-l,margin:l&&1},close:{pos:r+a,margin:a&&1}};let c,f;r-i<=2*mi?c=f=n.sliceDoc(i,r):(c=n.sliceDoc(i,i+mi),f=n.sliceDoc(r-mi,r));let u=/^\s*/.exec(c)[0].length,d=/\s*$/.exec(f)[0].length,p=f.length-d-t.length;return c.slice(u,u+e.length)==e&&f.slice(p,p+t.length)==t?{open:{pos:i+u+e.length,margin:/\s/.test(c.charAt(u+e.length))?1:0},close:{pos:r-d-t.length,margin:/\s/.test(f.charAt(p-1))?1:0}}:null}function bp(n){let e=[];for(let t of n.selection.ranges){let i=n.doc.lineAt(t.from),r=t.to<=i.to?i:n.doc.lineAt(t.to);r.from>i.from&&r.from==t.to&&(r=t.to==i.to+1?i:n.doc.lineAt(t.to-1));let s=e.length-1;s>=0&&e[s].to>i.from?e[s].to=r.to:e.push({from:i.from+/^\s*/.exec(i.text)[0].length,to:r.to})}return e}function Oh(n,e,t=e.selection.ranges){let i=t.map(s=>to(e,s.from).block);if(!i.every(s=>s))return null;let r=t.map((s,o)=>yp(e,i[o],s.from,s.to));if(n!=2&&!r.every(s=>s))return{changes:e.changes(t.map((s,o)=>r[o]?[]:[{from:s.from,insert:i[o].open+" "},{from:s.to,insert:" "+i[o].close}]))};if(n!=1&&r.some(s=>s)){let s=[];for(let o=0,l;or&&(s==o||o>f.from)){r=f.from;let u=/^\s*/.exec(f.text)[0].length,d=u==f.length,p=f.text.slice(u,u+h.length)==h?u:-1;us.comment<0&&(!s.empty||s.single))){let s=[];for(let{line:l,token:a,indent:h,empty:c,single:f}of i)(f||!c)&&s.push({from:l.from+h,insert:a+" "});let o=e.changes(s);return{changes:o,selection:e.selection.map(o,1)}}else if(n!=1&&i.some(s=>s.comment>=0)){let s=[];for(let{line:o,comment:l,token:a}of i)if(l>=0){let h=o.from+l,c=h+a.length;o.text[c-o.from]==" "&&c++,s.push({from:h,to:c})}return{changes:s}}return null}const ks=ct.define(),xp=ct.define(),vp=R.define(),Lh=R.define({combine(n){return Un(n,{minDepth:100,newGroupDelay:500,joinToEvent:(e,t)=>t},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(e,t)=>(i,r)=>e(i,r)||t(i,r)})}}),Bh=qe.define({create(){return nt.empty},update(n,e){let t=e.state.facet(Lh),i=e.annotation(ks);if(i){let a=xe.fromTransaction(e,i.selection),h=i.side,c=h==0?n.undone:n.done;return a?c=Wn(c,c.length,t.minDepth,a):c=Ph(c,e.startState.selection),new nt(h==0?i.rest:c,h==0?c:i.rest)}let r=e.annotation(xp);if((r=="full"||r=="before")&&(n=n.isolate()),e.annotation(se.addToHistory)===!1)return e.changes.empty?n:n.addMapping(e.changes.desc);let s=xe.fromTransaction(e),o=e.annotation(se.time),l=e.annotation(se.userEvent);return s?n=n.addChanges(s,o,l,t,e):e.selection&&(n=n.addSelection(e.startState.selection,o,l,t.newGroupDelay)),(r=="full"||r=="after")&&(n=n.isolate()),n},toJSON(n){return{done:n.done.map(e=>e.toJSON()),undone:n.undone.map(e=>e.toJSON())}},fromJSON(n){return new nt(n.done.map(xe.fromJSON),n.undone.map(xe.fromJSON))}});function kp(n={}){return[Bh,Lh.of(n),I.domEventHandlers({beforeinput(e,t){let i=e.inputType=="historyUndo"?Rh:e.inputType=="historyRedo"?Ss:null;return i?(e.preventDefault(),i(t)):!1}})]}function er(n,e){return function({state:t,dispatch:i}){if(!e&&t.readOnly)return!1;let r=t.field(Bh,!1);if(!r)return!1;let s=r.pop(n,t,e);return s?(i(s),!0):!1}}const Rh=er(0,!1),Ss=er(1,!1),Sp=er(0,!0),Cp=er(1,!0);class xe{constructor(e,t,i,r,s){this.changes=e,this.effects=t,this.mapped=i,this.startSelection=r,this.selectionsAfter=s}setSelAfter(e){return new xe(this.changes,this.effects,this.mapped,this.startSelection,e)}toJSON(){var e,t,i;return{changes:(e=this.changes)===null||e===void 0?void 0:e.toJSON(),mapped:(t=this.mapped)===null||t===void 0?void 0:t.toJSON(),startSelection:(i=this.startSelection)===null||i===void 0?void 0:i.toJSON(),selectionsAfter:this.selectionsAfter.map(r=>r.toJSON())}}static fromJSON(e){return new xe(e.changes&&re.fromJSON(e.changes),[],e.mapped&&rt.fromJSON(e.mapped),e.startSelection&&b.fromJSON(e.startSelection),e.selectionsAfter.map(b.fromJSON))}static fromTransaction(e,t){let i=Pe;for(let r of e.startState.facet(vp)){let s=r(e);s.length&&(i=i.concat(s))}return!i.length&&e.changes.empty?null:new xe(e.changes.invert(e.startState.doc),i,void 0,t||e.startState.selection,Pe)}static selection(e){return new xe(void 0,Pe,void 0,void 0,e)}}function Wn(n,e,t,i){let r=e+1>t+20?e-t-1:0,s=n.slice(r,e);return s.push(i),s}function Ap(n,e){let t=[],i=!1;return n.iterChangedRanges((r,s)=>t.push(r,s)),e.iterChangedRanges((r,s,o,l)=>{for(let a=0;a=h&&o<=c&&(i=!0)}}),i}function Tp(n,e){return n.ranges.length==e.ranges.length&&n.ranges.filter((t,i)=>t.empty!=e.ranges[i].empty).length===0}function Ih(n,e){return n.length?e.length?n.concat(e):n:e}const Pe=[],Mp=200;function Ph(n,e){if(n.length){let t=n[n.length-1],i=t.selectionsAfter.slice(Math.max(0,t.selectionsAfter.length-Mp));return i.length&&i[i.length-1].eq(e)?n:(i.push(e),Wn(n,n.length-1,1e9,t.setSelAfter(i)))}else return[xe.selection([e])]}function Dp(n){let e=n[n.length-1],t=n.slice();return t[n.length-1]=e.setSelAfter(e.selectionsAfter.slice(0,e.selectionsAfter.length-1)),t}function Or(n,e){if(!n.length)return n;let t=n.length,i=Pe;for(;t;){let r=Ep(n[t-1],e,i);if(r.changes&&!r.changes.empty||r.effects.length){let s=n.slice(0,t);return s[t-1]=r,s}else e=r.mapped,t--,i=r.selectionsAfter}return i.length?[xe.selection(i)]:Pe}function Ep(n,e,t){let i=Ih(n.selectionsAfter.length?n.selectionsAfter.map(l=>l.map(e)):Pe,t);if(!n.changes)return xe.selection(i);let r=n.changes.map(e),s=e.mapDesc(n.changes,!0),o=n.mapped?n.mapped.composeDesc(s):s;return new xe(r,G.mapEffects(n.effects,e),o,n.startSelection.map(s),i)}const Op=/^(input\.type|delete)($|\.)/;class nt{constructor(e,t,i=0,r=void 0){this.done=e,this.undone=t,this.prevTime=i,this.prevUserEvent=r}isolate(){return this.prevTime?new nt(this.done,this.undone):this}addChanges(e,t,i,r,s){let o=this.done,l=o[o.length-1];return l&&l.changes&&!l.changes.empty&&e.changes&&(!i||Op.test(i))&&(!l.selectionsAfter.length&&t-this.prevTime0&&t-this.prevTimet.empty?n.moveByChar(t,e):tr(t,e))}function pe(n){return n.textDirectionAt(n.state.selection.main.head)==Z.LTR}const Fh=n=>Nh(n,!pe(n)),_h=n=>Nh(n,pe(n));function Wh(n,e){return je(n,t=>t.empty?n.moveByGroup(t,e):tr(t,e))}const Bp=n=>Wh(n,!pe(n)),Rp=n=>Wh(n,pe(n));function Ip(n,e,t){if(e.type.prop(t))return!0;let i=e.to-e.from;return i&&(i>2||/[^\s,.;:]/.test(n.sliceDoc(e.from,e.to)))||e.firstChild}function ir(n,e,t){let i=Oe(n).resolveInner(e.head),r=t?V.closedBy:V.openedBy;for(let a=e.head;;){let h=t?i.childAfter(a):i.childBefore(a);if(!h)break;Ip(n,h,r)?i=h:a=t?h.to:h.from}let s=i.type.prop(r),o,l;return s&&(o=t?it(n,i.from,1):it(n,i.to,-1))&&o.matched?l=t?o.end.to:o.end.from:l=t?i.to:i.from,b.cursor(l,t?-1:1)}const Pp=n=>je(n,e=>ir(n.state,e,!pe(n))),Np=n=>je(n,e=>ir(n.state,e,pe(n)));function Vh(n,e){return je(n,t=>{if(!t.empty)return tr(t,e);let i=n.moveVertically(t,e);return i.head!=t.head?i:n.moveToLineBoundary(t,e)})}const Hh=n=>Vh(n,!1),zh=n=>Vh(n,!0);function $h(n){let e=n.scrollDOM.clientHeighto.empty?n.moveVertically(o,e,t.height):tr(o,e));if(r.eq(i.selection))return!1;let s;if(t.selfScroll){let o=n.coordsAtPos(i.selection.main.head),l=n.scrollDOM.getBoundingClientRect(),a=l.top+t.marginTop,h=l.bottom-t.marginBottom;o&&o.top>a&&o.bottomUh(n,!1),Cs=n=>Uh(n,!0);function At(n,e,t){let i=n.lineBlockAt(e.head),r=n.moveToLineBoundary(e,t);if(r.head==e.head&&r.head!=(t?i.to:i.from)&&(r=n.moveToLineBoundary(e,t,!1)),!t&&r.head==i.from&&i.length){let s=/^\s*/.exec(n.state.sliceDoc(i.from,Math.min(i.from+100,i.to)))[0].length;s&&e.head!=i.from+s&&(r=b.cursor(i.from+s))}return r}const Fp=n=>je(n,e=>At(n,e,!0)),_p=n=>je(n,e=>At(n,e,!1)),Wp=n=>je(n,e=>At(n,e,!pe(n))),Vp=n=>je(n,e=>At(n,e,pe(n))),Hp=n=>je(n,e=>b.cursor(n.lineBlockAt(e.head).from,1)),zp=n=>je(n,e=>b.cursor(n.lineBlockAt(e.head).to,-1));function $p(n,e,t){let i=!1,r=hi(n.selection,s=>{let o=it(n,s.head,-1)||it(n,s.head,1)||s.head>0&&it(n,s.head-1,1)||s.head$p(n,e);function We(n,e){let t=hi(n.state.selection,i=>{let r=e(i);return b.range(i.anchor,r.head,r.goalColumn,r.bidiLevel||void 0,r.assoc)});return t.eq(n.state.selection)?!1:(n.dispatch(Ke(n.state,t)),!0)}function qh(n,e){return We(n,t=>n.moveByChar(t,e))}const Kh=n=>qh(n,!pe(n)),jh=n=>qh(n,pe(n));function Gh(n,e){return We(n,t=>n.moveByGroup(t,e))}const qp=n=>Gh(n,!pe(n)),Kp=n=>Gh(n,pe(n)),jp=n=>We(n,e=>ir(n.state,e,!pe(n))),Gp=n=>We(n,e=>ir(n.state,e,pe(n)));function Yh(n,e){return We(n,t=>n.moveVertically(t,e))}const Xh=n=>Yh(n,!1),Jh=n=>Yh(n,!0);function Qh(n,e){return We(n,t=>n.moveVertically(t,e,$h(n).height))}const xl=n=>Qh(n,!1),vl=n=>Qh(n,!0),Yp=n=>We(n,e=>At(n,e,!0)),Xp=n=>We(n,e=>At(n,e,!1)),Jp=n=>We(n,e=>At(n,e,!pe(n))),Qp=n=>We(n,e=>At(n,e,pe(n))),Zp=n=>We(n,e=>b.cursor(n.lineBlockAt(e.head).from)),em=n=>We(n,e=>b.cursor(n.lineBlockAt(e.head).to)),kl=({state:n,dispatch:e})=>(e(Ke(n,{anchor:0})),!0),Sl=({state:n,dispatch:e})=>(e(Ke(n,{anchor:n.doc.length})),!0),Cl=({state:n,dispatch:e})=>(e(Ke(n,{anchor:n.selection.main.anchor,head:0})),!0),Al=({state:n,dispatch:e})=>(e(Ke(n,{anchor:n.selection.main.anchor,head:n.doc.length})),!0),tm=({state:n,dispatch:e})=>(e(n.update({selection:{anchor:0,head:n.doc.length},userEvent:"select"})),!0),im=({state:n,dispatch:e})=>{let t=nr(n).map(({from:i,to:r})=>b.range(i,Math.min(r+1,n.doc.length)));return e(n.update({selection:b.create(t),userEvent:"select"})),!0},nm=({state:n,dispatch:e})=>{let t=hi(n.selection,i=>{let r=Oe(n),s=r.resolveStack(i.from,1);if(i.empty){let o=r.resolveStack(i.from,-1);o.node.from>=s.node.from&&o.node.to<=s.node.to&&(s=o)}for(let o=s;o;o=o.next){let{node:l}=o;if((l.from=i.to||l.to>i.to&&l.from<=i.from)&&o.next)return b.range(l.to,l.from)}return i});return t.eq(n.selection)?!1:(e(Ke(n,t)),!0)};function Zh(n,e){let{state:t}=n,i=t.selection,r=t.selection.ranges.slice();for(let s of t.selection.ranges){let o=t.doc.lineAt(s.head);if(e?o.to0)for(let l=s;;){let a=n.moveVertically(l,e);if(a.heado.to){r.some(h=>h.head==a.head)||r.push(a);break}else{if(a.head==l.head)break;l=a}}}return r.length==i.ranges.length?!1:(n.dispatch(Ke(t,b.create(r,r.length-1))),!0)}const rm=n=>Zh(n,!1),sm=n=>Zh(n,!0),om=({state:n,dispatch:e})=>{let t=n.selection,i=null;return t.ranges.length>1?i=b.create([t.main]):t.main.empty||(i=b.create([b.cursor(t.main.head)])),i?(e(Ke(n,i)),!0):!1};function qi(n,e){if(n.state.readOnly)return!1;let t="delete.selection",{state:i}=n,r=i.changeByRange(s=>{let{from:o,to:l}=s;if(o==l){let a=e(s);ao&&(t="delete.forward",a=pn(n,a,!0)),o=Math.min(o,a),l=Math.max(l,a)}else o=pn(n,o,!1),l=pn(n,l,!0);return o==l?{range:s}:{changes:{from:o,to:l},range:b.cursor(o,or(n)))i.between(e,e,(r,s)=>{re&&(e=t?s:r)});return e}const ec=(n,e,t)=>qi(n,i=>{let r=i.from,{state:s}=n,o=s.doc.lineAt(r),l,a;if(t&&!e&&r>o.from&&rec(n,!1,!0),tc=n=>ec(n,!0,!1),ic=(n,e)=>qi(n,t=>{let i=t.head,{state:r}=n,s=r.doc.lineAt(i),o=r.charCategorizer(i);for(let l=null;;){if(i==(e?s.to:s.from)){i==t.head&&s.number!=(e?r.doc.lines:1)&&(i+=e?1:-1);break}let a=de(s.text,i-s.from,e)+s.from,h=s.text.slice(Math.min(i,a)-s.from,Math.max(i,a)-s.from),c=o(h);if(l!=null&&c!=l)break;(h!=" "||i!=t.head)&&(l=c),i=a}return i}),nc=n=>ic(n,!1),lm=n=>ic(n,!0),am=n=>qi(n,e=>{let t=n.lineBlockAt(e.head).to;return e.headqi(n,e=>{let t=n.moveToLineBoundary(e,!1).head;return e.head>t?t:Math.max(0,e.head-1)}),cm=n=>qi(n,e=>{let t=n.moveToLineBoundary(e,!0).head;return e.head{if(n.readOnly)return!1;let t=n.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:z.of(["",""])},range:b.cursor(i.from)}));return e(n.update(t,{scrollIntoView:!0,userEvent:"input"})),!0},um=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=n.changeByRange(i=>{if(!i.empty||i.from==0||i.from==n.doc.length)return{range:i};let r=i.from,s=n.doc.lineAt(r),o=r==s.from?r-1:de(s.text,r-s.from,!1)+s.from,l=r==s.to?r+1:de(s.text,r-s.from,!0)+s.from;return{changes:{from:o,to:l,insert:n.doc.slice(r,l).append(n.doc.slice(o,r))},range:b.cursor(l)}});return t.changes.empty?!1:(e(n.update(t,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function nr(n){let e=[],t=-1;for(let i of n.selection.ranges){let r=n.doc.lineAt(i.from),s=n.doc.lineAt(i.to);if(!i.empty&&i.to==s.from&&(s=n.doc.lineAt(i.to-1)),t>=r.number){let o=e[e.length-1];o.to=s.to,o.ranges.push(i)}else e.push({from:r.from,to:s.to,ranges:[i]});t=s.number+1}return e}function rc(n,e,t){if(n.readOnly)return!1;let i=[],r=[];for(let s of nr(n)){if(t?s.to==n.doc.length:s.from==0)continue;let o=n.doc.lineAt(t?s.to+1:s.from-1),l=o.length+1;if(t){i.push({from:s.to,to:o.to},{from:s.from,insert:o.text+n.lineBreak});for(let a of s.ranges)r.push(b.range(Math.min(n.doc.length,a.anchor+l),Math.min(n.doc.length,a.head+l)))}else{i.push({from:o.from,to:s.from},{from:s.to,insert:n.lineBreak+o.text});for(let a of s.ranges)r.push(b.range(a.anchor-l,a.head-l))}}return i.length?(e(n.update({changes:i,scrollIntoView:!0,selection:b.create(r,n.selection.mainIndex),userEvent:"move.line"})),!0):!1}const dm=({state:n,dispatch:e})=>rc(n,e,!1),pm=({state:n,dispatch:e})=>rc(n,e,!0);function sc(n,e,t){if(n.readOnly)return!1;let i=[];for(let s of nr(n))t?i.push({from:s.from,insert:n.doc.slice(s.from,s.to)+n.lineBreak}):i.push({from:s.to,insert:n.lineBreak+n.doc.slice(s.from,s.to)});let r=n.changes(i);return e(n.update({changes:r,selection:n.selection.map(r,t?1:-1),scrollIntoView:!0,userEvent:"input.copyline"})),!0}const mm=({state:n,dispatch:e})=>sc(n,e,!1),gm=({state:n,dispatch:e})=>sc(n,e,!0),ym=n=>{if(n.state.readOnly)return!1;let{state:e}=n,t=e.changes(nr(e).map(({from:r,to:s})=>(r>0?r--:s{let s;if(n.lineWrapping){let o=n.lineBlockAt(r.head),l=n.coordsAtPos(r.head,r.assoc||1);l&&(s=o.bottom+n.documentTop-l.bottom+n.defaultLineHeight/2)}return n.moveVertically(r,!0,s)}).map(t);return n.dispatch({changes:t,selection:i,scrollIntoView:!0,userEvent:"delete.line"}),!0};function bm(n,e){if(/\(\)|\[\]|\{\}/.test(n.sliceDoc(e-1,e+1)))return{from:e,to:e};let t=Oe(n).resolveInner(e),i=t.childBefore(e),r=t.childAfter(e),s;return i&&r&&i.to<=e&&r.from>=e&&(s=i.type.prop(V.closedBy))&&s.indexOf(r.name)>-1&&n.doc.lineAt(i.to).from==n.doc.lineAt(r.from).from&&!/\S/.test(n.sliceDoc(i.to,r.from))?{from:i.to,to:r.from}:null}const Tl=oc(!1),wm=oc(!0);function oc(n){return({state:e,dispatch:t})=>{if(e.readOnly)return!1;let i=e.changeByRange(r=>{let{from:s,to:o}=r,l=e.doc.lineAt(s),a=!n&&s==o&&bm(e,s);n&&(s=o=(o<=l.to?l:e.doc.lineAt(o)).to);let h=new Qn(e,{simulateBreak:s,simulateDoubleBreak:!!a}),c=Ys(h,s);for(c==null&&(c=qn(/^\s*/.exec(e.doc.lineAt(s).text)[0],e.tabSize));ol.from&&s{let r=[];for(let o=i.from;o<=i.to;){let l=n.doc.lineAt(o);l.number>t&&(i.empty||i.to>l.from)&&(e(l,r,i),t=l.number),o=l.to+1}let s=n.changes(r);return{changes:r,range:b.range(s.mapPos(i.anchor,1),s.mapPos(i.head,1))}})}const xm=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=Object.create(null),i=new Qn(n,{overrideIndentation:s=>{let o=t[s];return o??-1}}),r=io(n,(s,o,l)=>{let a=Ys(i,s.from);if(a==null)return;/\S/.test(s.text)||(a=0);let h=/^\s*/.exec(s.text)[0],c=Ni(n,a);(h!=c||l.fromn.readOnly?!1:(e(n.update(io(n,(t,i)=>{i.push({from:t.from,insert:n.facet(Gs)})}),{userEvent:"input.indent"})),!0),ac=({state:n,dispatch:e})=>n.readOnly?!1:(e(n.update(io(n,(t,i)=>{let r=/^\s*/.exec(t.text)[0];if(!r)return;let s=qn(r,n.tabSize),o=0,l=Ni(n,Math.max(0,s-$t(n)));for(;o(n.setTabFocusMode(),!0),km=[{key:"Ctrl-b",run:Fh,shift:Kh,preventDefault:!0},{key:"Ctrl-f",run:_h,shift:jh},{key:"Ctrl-p",run:Hh,shift:Xh},{key:"Ctrl-n",run:zh,shift:Jh},{key:"Ctrl-a",run:Hp,shift:Zp},{key:"Ctrl-e",run:zp,shift:em},{key:"Ctrl-d",run:tc},{key:"Ctrl-h",run:As},{key:"Ctrl-k",run:am},{key:"Ctrl-Alt-h",run:nc},{key:"Ctrl-o",run:fm},{key:"Ctrl-t",run:um},{key:"Ctrl-v",run:Cs}],Sm=[{key:"ArrowLeft",run:Fh,shift:Kh,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:Bp,shift:qp,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:Wp,shift:Jp,preventDefault:!0},{key:"ArrowRight",run:_h,shift:jh,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:Rp,shift:Kp,preventDefault:!0},{mac:"Cmd-ArrowRight",run:Vp,shift:Qp,preventDefault:!0},{key:"ArrowUp",run:Hh,shift:Xh,preventDefault:!0},{mac:"Cmd-ArrowUp",run:kl,shift:Cl},{mac:"Ctrl-ArrowUp",run:wl,shift:xl},{key:"ArrowDown",run:zh,shift:Jh,preventDefault:!0},{mac:"Cmd-ArrowDown",run:Sl,shift:Al},{mac:"Ctrl-ArrowDown",run:Cs,shift:vl},{key:"PageUp",run:wl,shift:xl},{key:"PageDown",run:Cs,shift:vl},{key:"Home",run:_p,shift:Xp,preventDefault:!0},{key:"Mod-Home",run:kl,shift:Cl},{key:"End",run:Fp,shift:Yp,preventDefault:!0},{key:"Mod-End",run:Sl,shift:Al},{key:"Enter",run:Tl,shift:Tl},{key:"Mod-a",run:tm},{key:"Backspace",run:As,shift:As,preventDefault:!0},{key:"Delete",run:tc,preventDefault:!0},{key:"Mod-Backspace",mac:"Alt-Backspace",run:nc,preventDefault:!0},{key:"Mod-Delete",mac:"Alt-Delete",run:lm,preventDefault:!0},{mac:"Mod-Backspace",run:hm,preventDefault:!0},{mac:"Mod-Delete",run:cm,preventDefault:!0}].concat(km.map(n=>({mac:n.key,run:n.run,shift:n.shift}))),Cm=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:Pp,shift:jp},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:Np,shift:Gp},{key:"Alt-ArrowUp",run:dm},{key:"Shift-Alt-ArrowUp",run:mm},{key:"Alt-ArrowDown",run:pm},{key:"Shift-Alt-ArrowDown",run:gm},{key:"Mod-Alt-ArrowUp",run:rm},{key:"Mod-Alt-ArrowDown",run:sm},{key:"Escape",run:om},{key:"Mod-Enter",run:wm},{key:"Alt-l",mac:"Ctrl-l",run:im},{key:"Mod-i",run:nm,preventDefault:!0},{key:"Mod-[",run:ac},{key:"Mod-]",run:lc},{key:"Mod-Alt-\\",run:xm},{key:"Shift-Mod-k",run:ym},{key:"Shift-Mod-\\",run:Up},{key:"Mod-/",run:dp},{key:"Alt-A",run:mp},{key:"Ctrl-m",mac:"Shift-Alt-m",run:vm}].concat(Sm),Am={key:"Tab",run:lc,shift:ac};function no(n,e,t,i,r,s){this.indented=n,this.column=e,this.type=t,this.info=i,this.align=r,this.prev=s}function mn(n,e,t,i){var r=n.indented;return n.context&&n.context.type=="statement"&&t!="statement"&&(r=n.context.indented),n.context=new no(r,e,t,i,null,n.context)}function gi(n){var e=n.context.type;return(e==")"||e=="]"||e=="}")&&(n.indented=n.context.indented),n.context=n.context.prev}function Ml(n,e,t){if(e.prevToken=="variable"||e.prevToken=="type"||/\S(?:[^- ]>|[*\]])\s*$|\*$/.test(n.string.slice(0,t))||e.typeAtEndOfLine&&n.column()==n.indentation())return!0}function Lr(n){for(;;){if(!n||n.type=="top")return!0;if(n.type=="}"&&n.prev.info!="namespace")return!1;n=n.prev}}function Le(n){var e=n.statementIndentUnit,t=n.dontAlignCalls,i=n.keywords||{},r=n.types||{},s=n.builtin||{},o=n.blockKeywords||{},l=n.defKeywords||{},a=n.atoms||{},h=n.hooks||{},c=n.multiLineStrings,f=n.indentStatements!==!1,u=n.indentSwitch!==!1,d=n.namespaceSeparator,p=n.isPunctuationChar||/[\[\]{}\(\),;\:\.]/,m=n.numberStart||/[\d\.]/,g=n.number||/^(?:0x[a-f\d]+|0b[01]+|(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?)(u|ll?|l|f)?/i,y=n.isOperatorChar||/[+\-*&%=<>!?|\/]/,w=n.isIdentifierChar||/[\w\$_\xa1-\uffff]/,T=n.isReservedIdentifier||!1,D,M;function L(S,k){var v=S.next();if(h[v]){var A=h[v](S,k);if(A!==!1)return A}if(v=='"'||v=="'")return k.tokenize=E(v),k.tokenize(S,k);if(m.test(v)){if(S.backUp(1),S.match(g))return"number";S.next()}if(p.test(v))return D=v,null;if(v=="/"){if(S.eat("*"))return k.tokenize=F,F(S,k);if(S.eat("/"))return S.skipToEnd(),"comment"}if(y.test(v)){for(;!S.match(/^\/[\/*]/,!1)&&S.eat(y););return"operator"}if(S.eatWhile(w),d)for(;S.match(d);)S.eatWhile(w);var N=S.current();return ot(i,N)?(ot(o,N)&&(D="newstatement"),ot(l,N)&&(M=!0),"keyword"):ot(r,N)?"type":ot(s,N)||T&&T(N)?(ot(o,N)&&(D="newstatement"),"builtin"):ot(a,N)?"atom":"variable"}function E(S){return function(k,v){for(var A=!1,N,q=!1;(N=k.next())!=null;){if(N==S&&!A){q=!0;break}A=!A&&N=="\\"}return(q||!(A||c))&&(v.tokenize=null),"string"}}function F(S,k){for(var v=!1,A;A=S.next();){if(A=="/"&&v){k.tokenize=null;break}v=A=="*"}return"comment"}function $(S,k){n.typeFirstDefinitions&&S.eol()&&Lr(k.context)&&(k.typeAtEndOfLine=Ml(S,k,S.pos))}return{name:n.name,startState:function(S){return{tokenize:null,context:new no(-S,0,"top",null,!1),indented:0,startOfLine:!0,prevToken:null}},token:function(S,k){var v=k.context;if(S.sol()&&(v.align==null&&(v.align=!1),k.indented=S.indentation(),k.startOfLine=!0),S.eatSpace())return $(S,k),null;D=M=null;var A=(k.tokenize||L)(S,k);if(A=="comment"||A=="meta")return A;if(v.align==null&&(v.align=!0),D==";"||D==":"||D==","&&S.match(/^\s*(?:\/\/.*)?$/,!1))for(;k.context.type=="statement";)gi(k);else if(D=="{")mn(k,S.column(),"}");else if(D=="[")mn(k,S.column(),"]");else if(D=="(")mn(k,S.column(),")");else if(D=="}"){for(;v.type=="statement";)v=gi(k);for(v.type=="}"&&(v=gi(k));v.type=="statement";)v=gi(k)}else D==v.type?gi(k):f&&((v.type=="}"||v.type=="top")&&D!=";"||v.type=="statement"&&D=="newstatement")&&mn(k,S.column(),"statement",S.current());if(A=="variable"&&(k.prevToken=="def"||n.typeFirstDefinitions&&Ml(S,k,S.start)&&Lr(k.context)&&S.match(/^\s*\(/,!1))&&(A="def"),h.token){var N=h.token(S,k,A);N!==void 0&&(A=N)}return A=="def"&&n.styleDefs===!1&&(A="variable"),k.startOfLine=!1,k.prevToken=M?"def":A||D,$(S,k),A},indent:function(S,k,v){if(S.tokenize!=L&&S.tokenize!=null||S.typeAtEndOfLine&&Lr(S.context))return null;var A=S.context,N=k&&k.charAt(0),q=N==A.type;if(A.type=="statement"&&N=="}"&&(A=A.prev),n.dontIndentStatements)for(;A.type=="statement"&&n.dontIndentStatements.test(A.info);)A=A.prev;if(h.indent){var H=h.indent(S,A,k,v.unit);if(typeof H=="number")return H}var K=A.prev&&A.prev.info=="switch";if(n.allmanIndentation&&/[{(]/.test(N)){for(;A.type!="top"&&A.type!="}";)A=A.prev;return A.indented}return A.type=="statement"?A.indented+(N=="{"?0:e||v.unit):A.align&&(!t||A.type!=")")?A.column+(q?0:1):A.type==")"&&!q?A.indented+(e||v.unit):A.indented+(q?0:v.unit)+(!q&&K&&!/^(?:case|default)\b/.test(k)?v.unit:0)},languageData:{indentOnInput:u?/^\s*(?:case .*?:|default:|\{\}?|\})$/:/^\s*[{}]$/,commentTokens:{line:"//",block:{open:"/*",close:"*/"}},autocomplete:Object.keys(i).concat(Object.keys(r)).concat(Object.keys(s)).concat(Object.keys(a)),...n.languageData}}}function B(n){for(var e={},t=n.split(" "),i=0;i!?|\/#:@]/,hooks:{"@":function(n){return n.eatWhile(/[\w\$_]/),"meta"},'"':function(n,e){return n.match('""')?(e.tokenize=pc,e.tokenize(n,e)):!1},"'":function(n){return n.match(/^(\\[^'\s]+|[^\\'])'/)?"character":(n.eatWhile(/[\w\$_\xa1-\uffff]/),"atom")},"=":function(n,e){var t=e.context;return t.type=="}"&&t.align&&n.eat(">")?(e.context=new no(t.indented,t.column,t.type,t.info,null,t.prev),"operator"):!1},"/":function(n,e){return n.eat("*")?(e.tokenize=_i(1),e.tokenize(n,e)):!1}},languageData:{closeBrackets:{brackets:["(","[","{","'",'"','"""']}}});function Dm(n){return function(e,t){for(var i=!1,r,s=!1;!e.eol();){if(!n&&!i&&e.match('"')){s=!0;break}if(n&&e.match('"""')){s=!0;break}r=e.next(),!i&&r=="$"&&e.match("{")&&e.skipTo("}"),i=!i&&r=="\\"&&!n}return(s||!n)&&(t.tokenize=null),"string"}}Le({name:"kotlin",keywords:B("package as typealias class interface this super val operator var fun for is in This throw return annotation break continue object if else while do try when !in !is as? file import where by get set abstract enum open inner override private public internal protected catch finally out final vararg reified dynamic companion constructor init sealed field property receiver param sparam lateinit data inline noinline tailrec external annotation crossinline const operator infix suspend actual expect setparam"),types:B("Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable Compiler Double Exception Float Integer Long Math Number Object Package Pair Process Runtime Runnable SecurityManager Short StackTraceElement StrictMath String StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void Annotation Any BooleanArray ByteArray Char CharArray DeprecationLevel DoubleArray Enum FloatArray Function Int IntArray Lazy LazyThreadSafetyMode LongArray Nothing ShortArray Unit"),indentStatements:!1,multiLineStrings:!0,number:/^(?:0x[a-f\d_]+|0b[01_]+|(?:[\d_]+(\.\d+)?|\.\d+)(?:e[-+]?[\d_]+)?)(ul?|l|f)?/i,blockKeywords:B("catch class do else finally for if where try while enum"),defKeywords:B("class val var object interface fun"),atoms:B("true false null this"),hooks:{"@":function(n){return n.eatWhile(/[\w\$_]/),"meta"},"*":function(n,e){return e.prevToken=="."?"variable":"operator"},'"':function(n,e){return e.tokenize=Dm(n.match('""')),e.tokenize(n,e)},"/":function(n,e){return n.eat("*")?(e.tokenize=_i(1),e.tokenize(n,e)):!1},indent:function(n,e,t,i){var r=t&&t.charAt(0);if((n.prevToken=="}"||n.prevToken==")")&&t=="")return n.indented;if(n.prevToken=="operator"&&t!="}"&&n.context.type!="}"||n.prevToken=="variable"&&r=="."||(n.prevToken=="}"||n.prevToken==")")&&r==".")return i*2+e.indented;if(e.align&&e.type=="}")return e.indented+(n.context.type==(t||"").charAt(0)?0:i)}},languageData:{closeBrackets:{brackets:["(","[","{","'",'"','"""']}}});const Em=Le({name:"shader",keywords:B("sampler1D sampler2D sampler3D samplerCube sampler1DShadow sampler2DShadow const attribute uniform varying break continue discard return for while do if else struct in out inout"),types:B("float int bool void vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 mat2 mat3 mat4"),blockKeywords:B("for while do if else struct"),builtin:B("radians degrees sin cos tan asin acos atan pow exp log exp2 sqrt inversesqrt abs sign floor ceil fract mod min max clamp mix step smoothstep length distance dot cross normalize ftransform faceforward reflect refract matrixCompMult lessThan lessThanEqual greaterThan greaterThanEqual equal notEqual any all not texture1D texture1DProj texture1DLod texture1DProjLod texture2D texture2DProj texture2DLod texture2DProjLod texture3D texture3DProj texture3DLod texture3DProjLod textureCube textureCubeLod shadow1D shadow2D shadow1DProj shadow2DProj shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod dFdx dFdy fwidth noise1 noise2 noise3 noise4"),atoms:B("true false gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_FogCoord gl_PointCoord gl_Position gl_PointSize gl_ClipVertex gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_TexCoord gl_FogFragCoord gl_FragCoord gl_FrontFacing gl_FragData gl_FragDepth gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse gl_TextureMatrixTranspose gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixInverseTranspose gl_TextureMatrixInverseTranspose gl_NormalScale gl_DepthRange gl_ClipPlane gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel gl_FrontLightModelProduct gl_BackLightModelProduct gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ gl_FogParameters gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits gl_MaxDrawBuffers"),indentSwitch:!1,hooks:{"#":Tt}});Le({name:"nesc",keywords:B(Ki+" as atomic async call command component components configuration event generic implementation includes interface module new norace nx_struct nx_union post provides signal task uses abstract extends"),types:ji,blockKeywords:B(Gi),atoms:B("null true false"),hooks:{"#":Tt}});Le({name:"objectivec",keywords:B(Ki+" "+cc),types:uc,builtin:B(fc),blockKeywords:B(Gi+" @synthesize @try @catch @finally @autoreleasepool @synchronized"),defKeywords:B(rr+" @interface @implementation @protocol @class"),dontIndentStatements:/^@.*$/,typeFirstDefinitions:!0,atoms:B("YES NO NULL Nil nil true false nullptr"),isReservedIdentifier:or,hooks:{"#":Tt,"*":sr}});Le({name:"objectivecpp",keywords:B(Ki+" "+cc+" "+hc),types:uc,builtin:B(fc),blockKeywords:B(Gi+" @synthesize @try @catch @finally @autoreleasepool @synchronized class try catch"),defKeywords:B(rr+" @interface @implementation @protocol @class class namespace"),dontIndentStatements:/^@.*$|^template$/,typeFirstDefinitions:!0,atoms:B("YES NO NULL Nil nil true false nullptr"),isReservedIdentifier:or,hooks:{"#":Tt,"*":sr,u:bt,U:bt,L:bt,R:bt,0:ne,1:ne,2:ne,3:ne,4:ne,5:ne,6:ne,7:ne,8:ne,9:ne,token:function(n,e,t){if(t=="variable"&&n.peek()=="("&&(e.prevToken==";"||e.prevToken==null||e.prevToken=="}")&&dc(n.current()))return"def"}},namespaceSeparator:"::"});Le({name:"squirrel",keywords:B("base break clone continue const default delete enum extends function in class foreach local resume return this throw typeof yield constructor instanceof static"),types:ji,blockKeywords:B("case catch class else for foreach if switch try while"),defKeywords:B("function local class"),typeFirstDefinitions:!0,atoms:B("true false null"),hooks:{"#":Tt}});var Cn=null;function mc(n){return function(e,t){for(var i=!1,r,s=!1;!e.eol();){if(!i&&e.match('"')&&(n=="single"||e.match('""'))){s=!0;break}if(!i&&e.match("``")){Cn=mc(n),s=!0;break}r=e.next(),i=n=="single"&&!i&&r=="\\"}return s&&(t.tokenize=null),"string"}}Le({name:"ceylon",keywords:B("abstracts alias assembly assert assign break case catch class continue dynamic else exists extends finally for function given if import in interface is let module new nonempty object of out outer package return satisfies super switch then this throw try value void while"),types:function(n){var e=n.charAt(0);return e===e.toUpperCase()&&e!==e.toLowerCase()},blockKeywords:B("case catch class dynamic else finally for function if interface module new object switch try while"),defKeywords:B("class dynamic function interface module object package value"),builtin:B("abstract actual aliased annotation by default deprecated doc final formal late license native optional sealed see serializable shared suppressWarnings tagged throws variable"),isPunctuationChar:/[\[\]{}\(\),;\:\.`]/,isOperatorChar:/[+\-*&%=<>!?|^~:\/]/,numberStart:/[\d#$]/,number:/^(?:#[\da-fA-F_]+|\$[01_]+|[\d_]+[kMGTPmunpf]?|[\d_]+\.[\d_]+(?:[eE][-+]?\d+|[kMGTPmunpf]|)|)/i,multiLineStrings:!0,typeFirstDefinitions:!0,atoms:B("true false null larger smaller equal empty finished"),indentSwitch:!1,styleDefs:!1,hooks:{"@":function(n){return n.eatWhile(/[\w\$_]/),"meta"},'"':function(n,e){return e.tokenize=mc(n.match('""')?"triple":"single"),e.tokenize(n,e)},"`":function(n,e){return!Cn||!n.match("`")?!1:(e.tokenize=Cn,Cn=null,e.tokenize(n,e))},"'":function(n){return n.match(/^(\\[^'\s]+|[^\\'])'/)?"string.special":(n.eatWhile(/[\w\$_\xa1-\uffff]/),"atom")},token:function(n,e,t){if((t=="variable"||t=="type")&&e.prevToken==".")return"variableName.special"}},languageData:{closeBrackets:{brackets:["(","[","{","'",'"','"""']}}});function Om(n){(n.interpolationStack||(n.interpolationStack=[])).push(n.tokenize)}function gc(n){return(n.interpolationStack||(n.interpolationStack=[])).pop()}function Lm(n){return n.interpolationStack?n.interpolationStack.length:0}function Br(n,e,t,i){var r=!1;if(e.eat(n))if(e.eat(n))r=!0;else return"string";function s(o,l){for(var a=!1;!o.eol();){if(!i&&!a&&o.peek()=="$")return Om(l),l.tokenize=Bm,"string";var h=o.next();if(h==n&&!a&&(!r||o.match(n+n))){l.tokenize=null;break}a=!i&&!a&&h=="\\"}return"string"}return t.tokenize=s,s(e,t)}function Bm(n,e){return n.eat("$"),n.eat("{")?e.tokenize=null:e.tokenize=Rm,null}function Rm(n,e){return n.eatWhile(/[\w_]/),e.tokenize=gc(e),"variable"}Le({name:"dart",keywords:B("this super static final const abstract class extends external factory implements mixin get native set typedef with enum throw rethrow assert break case continue default in return new deferred async await covariant try catch finally do else for if switch while import library export part of show hide is as extension on yield late required sealed base interface when inline"),blockKeywords:B("try catch finally do else for if switch while"),builtin:B("void bool num int double dynamic var String Null Never"),atoms:B("true false null"),number:/^(?:0x[a-f\d_]+|(?:[\d_]+\.?[\d_]*|\.[\d_]+)(?:e[-+]?[\d_]+)?)/i,hooks:{"@":function(n){return n.eatWhile(/[\w\$_\.]/),"meta"},"'":function(n,e){return Br("'",n,e,!1)},'"':function(n,e){return Br('"',n,e,!1)},r:function(n,e){var t=n.peek();return t=="'"||t=='"'?Br(n.next(),n,e,!0):!1},"}":function(n,e){return Lm(e)>0?(e.tokenize=gc(e),null):!1},"/":function(n,e){return n.eat("*")?(e.tokenize=_i(1),e.tokenize(n,e)):!1},token:function(n,e,t){if(t=="variable"){var i=RegExp("^[_$]*[A-Z][a-zA-Z0-9_$]*$","g");if(i.test(n.current()))return"type"}}}});const Im="#e5c07b",Ol="#e06c75",Pm="#56b6c2",Nm="#ffffff",An="#abb2bf",Ts="#7d8799",Fm="#61afef",_m="#98c379",Ll="#d19a66",Wm="#c678dd",Vm="#21252b",Bl="#2c313a",Rl="#282c34",Rr="#353a42",Hm="#3E4451",Il="#528bff",zm=I.theme({"&":{color:An,backgroundColor:Rl},".cm-content":{caretColor:Il},".cm-cursor, .cm-dropCursor":{borderLeftColor:Il},"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":{backgroundColor:Hm},".cm-panels":{backgroundColor:Vm,color:An},".cm-panels.cm-panels-top":{borderBottom:"2px solid black"},".cm-panels.cm-panels-bottom":{borderTop:"2px solid black"},".cm-searchMatch":{backgroundColor:"#72a1ff59",outline:"1px solid #457dff"},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:"#6199ff2f"},".cm-activeLine":{backgroundColor:"#6699ff0b"},".cm-selectionMatch":{backgroundColor:"#aafe661a"},"&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bad0f847"},".cm-gutters":{backgroundColor:Rl,color:Ts,border:"none"},".cm-activeLineGutter":{backgroundColor:Bl},".cm-foldPlaceholder":{backgroundColor:"transparent",border:"none",color:"#ddd"},".cm-tooltip":{border:"none",backgroundColor:Rr},".cm-tooltip .cm-tooltip-arrow:before":{borderTopColor:"transparent",borderBottomColor:"transparent"},".cm-tooltip .cm-tooltip-arrow:after":{borderTopColor:Rr,borderBottomColor:Rr},".cm-tooltip-autocomplete":{"& > ul > li[aria-selected]":{backgroundColor:Bl,color:An}}},{dark:!0}),$m=Zn.define([{tag:x.keyword,color:Wm},{tag:[x.name,x.deleted,x.character,x.propertyName,x.macroName],color:Ol},{tag:[x.function(x.variableName),x.labelName],color:Fm},{tag:[x.color,x.constant(x.name),x.standard(x.name)],color:Ll},{tag:[x.definition(x.name),x.separator],color:An},{tag:[x.typeName,x.className,x.number,x.changed,x.annotation,x.modifier,x.self,x.namespace],color:Im},{tag:[x.operator,x.operatorKeyword,x.url,x.escape,x.regexp,x.link,x.special(x.string)],color:Pm},{tag:[x.meta,x.comment],color:Ts},{tag:x.strong,fontWeight:"bold"},{tag:x.emphasis,fontStyle:"italic"},{tag:x.strikethrough,textDecoration:"line-through"},{tag:x.link,color:Ts,textDecoration:"underline"},{tag:x.heading,fontWeight:"bold",color:Ol},{tag:[x.atom,x.bool,x.special(x.variableName)],color:Ll},{tag:[x.processingInstruction,x.string,x.inserted],color:_m},{tag:x.invalid,color:Nm}]),Um=[zm,jd($m)];class yc{constructor(e,t,i,r){this.state=e,this.pos=t,this.explicit=i,this.view=r,this.abortListeners=[],this.abortOnDocChange=!1}tokenBefore(e){let t=Oe(this.state).resolveInner(this.pos,-1);for(;t&&e.indexOf(t.name)<0;)t=t.parent;return t?{from:t.from,to:this.pos,text:this.state.sliceDoc(t.from,this.pos),type:t.type}:null}matchBefore(e){let t=this.state.doc.lineAt(this.pos),i=Math.max(t.from,this.pos-250),r=t.text.slice(i-t.from,this.pos-t.from),s=r.search(bc(e,!1));return s<0?null:{from:i+s,to:this.pos,text:r.slice(s)}}get aborted(){return this.abortListeners==null}addEventListener(e,t,i){e=="abort"&&this.abortListeners&&(this.abortListeners.push(t),i&&i.onDocChange&&(this.abortOnDocChange=!0))}}function Pl(n){let e=Object.keys(n).join(""),t=/\w/.test(e);return t&&(e=e.replace(/\w/g,"")),`[${t?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function qm(n){let e=Object.create(null),t=Object.create(null);for(let{label:r}of n){e[r[0]]=!0;for(let s=1;stypeof r=="string"?{label:r}:r),[t,i]=e.every(r=>/^\w+$/.test(r.label))?[/\w*$/,/\w+$/]:qm(e);return r=>{let s=r.matchBefore(i);return s||r.explicit?{from:s?s.from:r.pos,options:e,validFor:t}:null}}class Nl{constructor(e,t,i,r){this.completion=e,this.source=t,this.match=i,this.score=r}}function _t(n){return n.selection.main.from}function bc(n,e){var t;let{source:i}=n,r=e&&i[0]!="^",s=i[i.length-1]!="$";return!r&&!s?n:new RegExp(`${r?"^":""}(?:${i})${s?"$":""}`,(t=n.flags)!==null&&t!==void 0?t:n.ignoreCase?"i":"")}const wc=ct.define();function jm(n,e,t,i){let{main:r}=n.selection,s=t-r.from,o=i-r.from;return{...n.changeByRange(l=>{if(l!=r&&t!=i&&n.sliceDoc(l.from+s,l.from+o)!=n.sliceDoc(t,i))return{range:l};let a=n.toText(e);return{changes:{from:l.from+s,to:i==r.from?l.to:l.from+o,insert:a},range:b.cursor(l.from+s+a.length)}}),scrollIntoView:!0,userEvent:"input.complete"}}const Fl=new WeakMap;function Gm(n){if(!Array.isArray(n))return n;let e=Fl.get(n);return e||Fl.set(n,e=Km(n)),e}const Vn=G.define(),Wi=G.define();class Ym{constructor(e){this.pattern=e,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[],this.score=0,this.matched=[];for(let t=0;t=48&&M<=57||M>=97&&M<=122?2:M>=65&&M<=90?1:0:(L=na(M))!=L.toLowerCase()?1:L!=L.toUpperCase()?2:0;(!w||E==1&&g||D==0&&E!=0)&&(t[f]==M||i[f]==M&&(u=!0)?o[f++]=w:o.length&&(y=!1)),D=E,w+=pt(M)}return f==a&&o[0]==0&&y?this.result(-100+(u?-200:0),o,e):d==a&&p==0?this.ret(-200-e.length+(m==e.length?0:-100),[0,m]):l>-1?this.ret(-700-e.length,[l,l+this.pattern.length]):d==a?this.ret(-900-e.length,[p,m]):f==a?this.result(-100+(u?-200:0)+-700+(y?0:-1100),o,e):t.length==2?null:this.result((r[0]?-700:0)+-200+-1100,r,e)}result(e,t,i){let r=[],s=0;for(let o of t){let l=o+(this.astral?pt(Qe(i,o)):1);s&&r[s-1]==o?r[s-1]=l:(r[s++]=o,r[s++]=l)}return this.ret(e-i.length,r)}}class Xm{constructor(e){this.pattern=e,this.matched=[],this.score=0,this.folded=e.toLowerCase()}match(e){if(e.length!1,activateOnTypingDelay:100,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,tooltipClass:()=>"",optionClass:()=>"",aboveCursor:!1,icons:!0,addToOptions:[],positionInfo:Jm,filterStrict:!1,compareCompletions:(e,t)=>(e.sortText||e.label).localeCompare(t.sortText||t.label),interactionDelay:75,updateSyncTime:100},{defaultKeymap:(e,t)=>e&&t,closeOnBlur:(e,t)=>e&&t,icons:(e,t)=>e&&t,tooltipClass:(e,t)=>i=>_l(e(i),t(i)),optionClass:(e,t)=>i=>_l(e(i),t(i)),addToOptions:(e,t)=>e.concat(t),filterStrict:(e,t)=>e||t})}});function _l(n,e){return n?e?n+" "+e:n:e}function Jm(n,e,t,i,r,s){let o=n.textDirection==Z.RTL,l=o,a=!1,h="top",c,f,u=e.left-r.left,d=r.right-e.right,p=i.right-i.left,m=i.bottom-i.top;if(l&&u=m||w>e.top?c=t.bottom-e.top:(h="bottom",c=e.bottom-t.top)}let g=(e.bottom-e.top)/s.offsetHeight,y=(e.right-e.left)/s.offsetWidth;return{style:`${h}: ${c/g}px; max-width: ${f/y}px`,class:"cm-completionInfo-"+(a?o?"left-narrow":"right-narrow":l?"left":"right")}}const ro=G.define();function Qm(n){let e=n.addToOptions.slice();return n.icons&&e.push({render(t){let i=document.createElement("div");return i.classList.add("cm-completionIcon"),t.type&&i.classList.add(...t.type.split(/\s+/g).map(r=>"cm-completionIcon-"+r)),i.setAttribute("aria-hidden","true"),i},position:20}),e.push({render(t,i,r,s){let o=document.createElement("span");o.className="cm-completionLabel";let l=t.displayLabel||t.label,a=0;for(let h=0;ha&&o.appendChild(document.createTextNode(l.slice(a,c)));let u=o.appendChild(document.createElement("span"));u.appendChild(document.createTextNode(l.slice(c,f))),u.className="cm-completionMatchedText",a=f}return at.position-i.position).map(t=>t.render)}function Ir(n,e,t){if(n<=t)return{from:0,to:n};if(e<0&&(e=0),e<=n>>1){let r=Math.floor(e/t);return{from:r*t,to:(r+1)*t}}let i=Math.floor((n-e)/t);return{from:n-(i+1)*t,to:n-i*t}}class Zm{constructor(e,t,i){this.view=e,this.stateField=t,this.applyCompletion=i,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:a=>this.placeInfo(a),key:this},this.space=null,this.currentClass="";let r=e.state.field(t),{options:s,selected:o}=r.open,l=e.state.facet(le);this.optionContent=Qm(l),this.optionClass=l.optionClass,this.tooltipClass=l.tooltipClass,this.range=Ir(s.length,o,l.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.className="cm-tooltip-autocomplete",this.updateTooltipClass(e.state),this.dom.addEventListener("mousedown",a=>{let{options:h}=e.state.field(t).open;for(let c=a.target,f;c&&c!=this.dom;c=c.parentNode)if(c.nodeName=="LI"&&(f=/-(\d+)$/.exec(c.id))&&+f[1]this.list.lastChild.getBoundingClientRect().bottom?this.range.to:null;c!=null&&(e.dispatch({effects:ro.of(c)}),a.preventDefault())}}),this.dom.addEventListener("focusout",a=>{let h=e.state.field(this.stateField,!1);h&&h.tooltip&&e.state.facet(le).closeOnBlur&&a.relatedTarget!=e.contentDOM&&e.dispatch({effects:Wi.of(null)})}),this.showOptions(s,r.id)}mount(){this.updateSel()}showOptions(e,t){this.list&&this.list.remove(),this.list=this.dom.appendChild(this.createListBox(e,t,this.range)),this.list.addEventListener("scroll",()=>{this.info&&this.view.requestMeasure(this.placeInfoReq)})}update(e){var t;let i=e.state.field(this.stateField),r=e.startState.field(this.stateField);if(this.updateTooltipClass(e.state),i!=r){let{options:s,selected:o,disabled:l}=i.open;(!r.open||r.open.options!=s)&&(this.range=Ir(s.length,o,e.state.facet(le).maxRenderedOptions),this.showOptions(s,i.id)),this.updateSel(),l!=((t=r.open)===null||t===void 0?void 0:t.disabled)&&this.dom.classList.toggle("cm-tooltip-autocomplete-disabled",!!l)}}updateTooltipClass(e){let t=this.tooltipClass(e);if(t!=this.currentClass){for(let i of this.currentClass.split(" "))i&&this.dom.classList.remove(i);for(let i of t.split(" "))i&&this.dom.classList.add(i);this.currentClass=t}}positioned(e){this.space=e,this.info&&this.view.requestMeasure(this.placeInfoReq)}updateSel(){let e=this.view.state.field(this.stateField),t=e.open;(t.selected>-1&&t.selected=this.range.to)&&(this.range=Ir(t.options.length,t.selected,this.view.state.facet(le).maxRenderedOptions),this.showOptions(t.options,e.id));let i=this.updateSelectedOption(t.selected);if(i){this.destroyInfo();let{completion:r}=t.options[t.selected],{info:s}=r;if(!s)return;let o=typeof s=="string"?document.createTextNode(s):s(r);if(!o)return;"then"in o?o.then(l=>{l&&this.view.state.field(this.stateField,!1)==e&&this.addInfoPane(l,r)}).catch(l=>De(this.view.state,l,"completion info")):(this.addInfoPane(o,r),i.setAttribute("aria-describedby",this.info.id))}}addInfoPane(e,t){this.destroyInfo();let i=this.info=document.createElement("div");if(i.className="cm-tooltip cm-completionInfo",i.id="cm-completionInfo-"+Math.floor(Math.random()*65535).toString(16),e.nodeType!=null)i.appendChild(e),this.infoDestroy=null;else{let{dom:r,destroy:s}=e;i.appendChild(r),this.infoDestroy=s||null}this.dom.appendChild(i),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(e){let t=null;for(let i=this.list.firstChild,r=this.range.from;i;i=i.nextSibling,r++)i.nodeName!="LI"||!i.id?r--:r==e?i.hasAttribute("aria-selected")||(i.setAttribute("aria-selected","true"),t=i):i.hasAttribute("aria-selected")&&(i.removeAttribute("aria-selected"),i.removeAttribute("aria-describedby"));return t&&tg(this.list,t),t}measureInfo(){let e=this.dom.querySelector("[aria-selected]");if(!e||!this.info)return null;let t=this.dom.getBoundingClientRect(),i=this.info.getBoundingClientRect(),r=e.getBoundingClientRect(),s=this.space;if(!s){let o=this.dom.ownerDocument.documentElement;s={left:0,top:0,right:o.clientWidth,bottom:o.clientHeight}}return r.top>Math.min(s.bottom,t.bottom)-10||r.bottom{o.target==r&&o.preventDefault()});let s=null;for(let o=i.from;oi.from||i.from==0))if(s=u,typeof h!="string"&&h.header)r.appendChild(h.header(h));else{let d=r.appendChild(document.createElement("completion-section"));d.textContent=u}}const c=r.appendChild(document.createElement("li"));c.id=t+"-"+o,c.setAttribute("role","option");let f=this.optionClass(l);f&&(c.className=f);for(let u of this.optionContent){let d=u(l,this.view.state,this.view,a);d&&c.appendChild(d)}}return i.from&&r.classList.add("cm-completionListIncompleteTop"),i.tonew Zm(t,n,e)}function tg(n,e){let t=n.getBoundingClientRect(),i=e.getBoundingClientRect(),r=t.height/n.offsetHeight;i.topt.bottom&&(n.scrollTop+=(i.bottom-t.bottom)/r)}function Wl(n){return(n.boost||0)*100+(n.apply?10:0)+(n.info?5:0)+(n.type?1:0)}function ig(n,e){let t=[],i=null,r=null,s=c=>{t.push(c);let{section:f}=c.completion;if(f){i||(i=[]);let u=typeof f=="string"?f:f.name;i.some(d=>d.name==u)||i.push(typeof f=="string"?{name:u}:f)}},o=e.facet(le);for(let c of n)if(c.hasResult()){let f=c.result.getMatch;if(c.result.filter===!1)for(let u of c.result.options)s(new Nl(u,c.source,f?f(u):[],1e9-t.length));else{let u=e.sliceDoc(c.from,c.to),d,p=o.filterStrict?new Xm(u):new Ym(u);for(let m of c.result.options)if(d=p.match(m.label)){let g=m.displayLabel?f?f(m,d.matched):[]:d.matched,y=d.score+(m.boost||0);if(s(new Nl(m,c.source,g,y)),typeof m.section=="object"&&m.section.rank==="dynamic"){let{name:w}=m.section;r||(r=Object.create(null)),r[w]=Math.max(y,r[w]||-1e9)}}}}if(i){let c=Object.create(null),f=0,u=(d,p)=>(d.rank==="dynamic"&&p.rank==="dynamic"?r[p.name]-r[d.name]:0)||(typeof d.rank=="number"?d.rank:1e9)-(typeof p.rank=="number"?p.rank:1e9)||(d.nameu.score-f.score||h(f.completion,u.completion))){let f=c.completion;!a||a.label!=f.label||a.detail!=f.detail||a.type!=null&&f.type!=null&&a.type!=f.type||a.apply!=f.apply||a.boost!=f.boost?l.push(c):Wl(c.completion)>Wl(a)&&(l[l.length-1]=c),a=c.completion}return l}class Yt{constructor(e,t,i,r,s,o){this.options=e,this.attrs=t,this.tooltip=i,this.timestamp=r,this.selected=s,this.disabled=o}setSelected(e,t){return e==this.selected||e>=this.options.length?this:new Yt(this.options,Vl(t,e),this.tooltip,this.timestamp,e,this.disabled)}static build(e,t,i,r,s,o){if(r&&!o&&e.some(h=>h.isPending))return r.setDisabled();let l=ig(e,t);if(!l.length)return r&&e.some(h=>h.isPending)?r.setDisabled():null;let a=t.facet(le).selectOnOpen?0:-1;if(r&&r.selected!=a&&r.selected!=-1){let h=r.options[r.selected].completion;for(let c=0;cc.hasResult()?Math.min(h,c.from):h,1e8),create:ag,above:s.aboveCursor},r?r.timestamp:Date.now(),a,!1)}map(e){return new Yt(this.options,this.attrs,{...this.tooltip,pos:e.mapPos(this.tooltip.pos)},this.timestamp,this.selected,this.disabled)}setDisabled(){return new Yt(this.options,this.attrs,this.tooltip,this.timestamp,this.selected,!0)}}class Hn{constructor(e,t,i){this.active=e,this.id=t,this.open=i}static start(){return new Hn(og,"cm-ac-"+Math.floor(Math.random()*2e6).toString(36),null)}update(e){let{state:t}=e,i=t.facet(le),s=(i.override||t.languageDataAt("autocomplete",_t(t)).map(Gm)).map(a=>(this.active.find(c=>c.source==a)||new Ne(a,this.active.some(c=>c.state!=0)?1:0)).update(e,i));s.length==this.active.length&&s.every((a,h)=>a==this.active[h])&&(s=this.active);let o=this.open,l=e.effects.some(a=>a.is(so));o&&e.docChanged&&(o=o.map(e.changes)),e.selection||s.some(a=>a.hasResult()&&e.changes.touchesRange(a.from,a.to))||!ng(s,this.active)||l?o=Yt.build(s,t,this.id,o,i,l):o&&o.disabled&&!s.some(a=>a.isPending)&&(o=null),!o&&s.every(a=>!a.isPending)&&s.some(a=>a.hasResult())&&(s=s.map(a=>a.hasResult()?new Ne(a.source,0):a));for(let a of e.effects)a.is(ro)&&(o=o&&o.setSelected(a.value,this.id));return s==this.active&&o==this.open?this:new Hn(s,this.id,o)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:this.active.length?rg:sg}}function ng(n,e){if(n==e)return!0;for(let t=0,i=0;;){for(;t-1&&(t["aria-activedescendant"]=n+"-"+e),t}const og=[];function xc(n,e){if(n.isUserEvent("input.complete")){let i=n.annotation(wc);if(i&&e.activateOnCompletion(i))return 12}let t=n.isUserEvent("input.type");return t&&e.activateOnTyping?5:t?1:n.isUserEvent("delete.backward")?2:n.selection?8:n.docChanged?16:0}class Ne{constructor(e,t,i=!1){this.source=e,this.state=t,this.explicit=i}hasResult(){return!1}get isPending(){return this.state==1}update(e,t){let i=xc(e,t),r=this;(i&8||i&16&&this.touches(e))&&(r=new Ne(r.source,0)),i&4&&r.state==0&&(r=new Ne(this.source,1)),r=r.updateFor(e,i);for(let s of e.effects)if(s.is(Vn))r=new Ne(r.source,1,s.value);else if(s.is(Wi))r=new Ne(r.source,0);else if(s.is(so))for(let o of s.value)o.source==r.source&&(r=o);return r}updateFor(e,t){return this.map(e.changes)}map(e){return this}touches(e){return e.changes.touchesRange(_t(e.state))}}class ei extends Ne{constructor(e,t,i,r,s,o){super(e,3,t),this.limit=i,this.result=r,this.from=s,this.to=o}hasResult(){return!0}updateFor(e,t){var i;if(!(t&3))return this.map(e.changes);let r=this.result;r.map&&!e.changes.empty&&(r=r.map(r,e.changes));let s=e.changes.mapPos(this.from),o=e.changes.mapPos(this.to,1),l=_t(e.state);if(l>o||!r||t&2&&(_t(e.startState)==this.from||lt.map(e))}}),ye=qe.define({create(){return Hn.start()},update(n,e){return n.update(e)},provide:n=>[ah.from(n,e=>e.tooltip),I.contentAttributes.from(n,e=>e.attrs)]});function oo(n,e){const t=e.completion.apply||e.completion.label;let i=n.state.field(ye).active.find(r=>r.source==e.source);return i instanceof ei?(typeof t=="string"?n.dispatch({...jm(n.state,t,i.from,i.to),annotations:wc.of(e.completion)}):t(n,e.completion,i.from,i.to),!0):!1}const ag=eg(ye,oo);function gn(n,e="option"){return t=>{let i=t.state.field(ye,!1);if(!i||!i.open||i.open.disabled||Date.now()-i.open.timestamp-1?i.open.selected+r*(n?1:-1):n?0:o-1;return l<0?l=e=="page"?0:o-1:l>=o&&(l=e=="page"?o-1:0),t.dispatch({effects:ro.of(l)}),!0}}const vc=n=>{let e=n.state.field(ye,!1);return n.state.readOnly||!e||!e.open||e.open.selected<0||e.open.disabled||Date.now()-e.open.timestampn.state.field(ye,!1)?(n.dispatch({effects:Vn.of(!0)}),!0):!1,hg=n=>{let e=n.state.field(ye,!1);return!e||!e.active.some(t=>t.state!=0)?!1:(n.dispatch({effects:Wi.of(null)}),!0)};class cg{constructor(e,t){this.active=e,this.context=t,this.time=Date.now(),this.updates=[],this.done=void 0}}const fg=50,ug=1e3,dg=_e.fromClass(class{constructor(n){this.view=n,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.pendingStart=!1,this.composing=0;for(let e of n.state.field(ye).active)e.isPending&&this.startQuery(e)}update(n){let e=n.state.field(ye),t=n.state.facet(le);if(!n.selectionSet&&!n.docChanged&&n.startState.field(ye)==e)return;let i=n.transactions.some(s=>{let o=xc(s,t);return o&8||(s.selection||s.docChanged)&&!(o&3)});for(let s=0;sfg&&Date.now()-o.time>ug){for(let l of o.context.abortListeners)try{l()}catch(a){De(this.view.state,a)}o.context.abortListeners=null,this.running.splice(s--,1)}else o.updates.push(...n.transactions)}this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),n.transactions.some(s=>s.effects.some(o=>o.is(Vn)))&&(this.pendingStart=!0);let r=this.pendingStart?50:t.activateOnTypingDelay;if(this.debounceUpdate=e.active.some(s=>s.isPending&&!this.running.some(o=>o.active.source==s.source))?setTimeout(()=>this.startUpdate(),r):-1,this.composing!=0)for(let s of n.transactions)s.isUserEvent("input.type")?this.composing=2:this.composing==2&&s.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1,this.pendingStart=!1;let{state:n}=this.view,e=n.field(ye);for(let t of e.active)t.isPending&&!this.running.some(i=>i.active.source==t.source)&&this.startQuery(t);this.running.length&&e.open&&e.open.disabled&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(le).updateSyncTime))}startQuery(n){let{state:e}=this.view,t=_t(e),i=new yc(e,t,n.explicit,this.view),r=new cg(n,i);this.running.push(r),Promise.resolve(n.source(i)).then(s=>{r.context.aborted||(r.done=s||null,this.scheduleAccept())},s=>{this.view.dispatch({effects:Wi.of(null)}),De(this.view.state,s)})}scheduleAccept(){this.running.every(n=>n.done!==void 0)?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(le).updateSyncTime))}accept(){var n;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],t=this.view.state.facet(le),i=this.view.state.field(ye);for(let r=0;rl.source==s.active.source);if(o&&o.isPending)if(s.done==null){let l=new Ne(s.active.source,0);for(let a of s.updates)l=l.update(a,t);l.isPending||e.push(l)}else this.startQuery(o)}(e.length||i.open&&i.open.disabled)&&this.view.dispatch({effects:so.of(e)})}},{eventHandlers:{blur(n){let e=this.view.state.field(ye,!1);if(e&&e.tooltip&&this.view.state.facet(le).closeOnBlur){let t=e.open&&hh(this.view,e.open.tooltip);(!t||!t.dom.contains(n.relatedTarget))&&setTimeout(()=>this.view.dispatch({effects:Wi.of(null)}),10)}},compositionstart(){this.composing=1},compositionend(){this.composing==3&&setTimeout(()=>this.view.dispatch({effects:Vn.of(!1)}),20),this.composing=0}}}),pg=typeof navigator=="object"&&/Win/.test(navigator.platform),mg=Wt.highest(I.domEventHandlers({keydown(n,e){let t=e.state.field(ye,!1);if(!t||!t.open||t.open.disabled||t.open.selected<0||n.key.length>1||n.ctrlKey&&!(pg&&n.altKey)||n.metaKey)return!1;let i=t.open.options[t.open.selected],r=t.active.find(o=>o.source==i.source),s=i.completion.commitCharacters||r.result.commitCharacters;return s&&s.indexOf(n.key)>-1&&oo(e,i),!1}})),gg=I.baseTheme({".cm-tooltip.cm-tooltip-autocomplete":{"& > ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",height:"100%",listStyle:"none",margin:0,padding:0,"& > li, & > completion-section":{padding:"1px 3px",lineHeight:1.2},"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer"},"& > completion-section":{display:"list-item",borderBottom:"1px solid silver",paddingLeft:"0.5em",opacity:.7}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#777"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#444"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"···"',opacity:.5,display:"block",textAlign:"center"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"400px",boxSizing:"border-box",whiteSpace:"pre-line"},".cm-completionInfo.cm-completionInfo-left":{right:"100%"},".cm-completionInfo.cm-completionInfo-right":{left:"100%"},".cm-completionInfo.cm-completionInfo-left-narrow":{right:"30px"},".cm-completionInfo.cm-completionInfo-right-narrow":{left:"30px"},"&light .cm-snippetField":{backgroundColor:"#00000022"},"&dark .cm-snippetField":{backgroundColor:"#ffffff22"},".cm-snippetFieldPosition":{verticalAlign:"text-top",width:0,height:"1.15em",display:"inline-block",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},".cm-completionMatchedText":{textDecoration:"underline"},".cm-completionDetail":{marginLeft:"0.5em",fontStyle:"italic"},".cm-completionIcon":{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6",boxSizing:"content-box"},".cm-completionIcon-function, .cm-completionIcon-method":{"&:after":{content:"'ƒ'"}},".cm-completionIcon-class":{"&:after":{content:"'○'"}},".cm-completionIcon-interface":{"&:after":{content:"'◌'"}},".cm-completionIcon-variable":{"&:after":{content:"'𝑥'"}},".cm-completionIcon-constant":{"&:after":{content:"'𝐶'"}},".cm-completionIcon-type":{"&:after":{content:"'𝑡'"}},".cm-completionIcon-enum":{"&:after":{content:"'∪'"}},".cm-completionIcon-property":{"&:after":{content:"'□'"}},".cm-completionIcon-keyword":{"&:after":{content:"'🔑︎'"}},".cm-completionIcon-namespace":{"&:after":{content:"'▢'"}},".cm-completionIcon-text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}}),zn={brackets:["(","[","{","'",'"'],before:")]}:;>",stringPrefixes:[]},Pt=G.define({map(n,e){let t=e.mapPos(n,-1,be.TrackAfter);return t??void 0}}),lo=new class extends wt{};lo.startSide=1;lo.endSide=-1;const kc=qe.define({create(){return W.empty},update(n,e){if(n=n.map(e.changes),e.selection){let t=e.state.doc.lineAt(e.selection.main.head);n=n.update({filter:i=>i>=t.from&&i<=t.to})}for(let t of e.effects)t.is(Pt)&&(n=n.update({add:[lo.range(t.value,t.value+1)]}));return n}});function yg(){return[vg,kc]}const Nr="()[]{}<>«»»«[]{}";function bg(n){for(let e=0;e{if((xg?n.composing:n.compositionStarted)||n.state.readOnly)return!1;let r=n.state.selection.main;if(i.length>2||i.length==2&&pt(Qe(i,0))==1||e!=r.from||t!=r.to)return!1;let s=kg(n.state,i);return s?(n.dispatch(s),!0):!1});function kg(n,e){let t=wg(n,n.selection.main.head),i=t.brackets||zn.brackets;for(let r of i){let s=bg(Qe(r,0));if(e==r)return s==r?Ag(n,r,i.indexOf(r+r+r)>-1,t):Sg(n,r,s,t.before||zn.before);if(e==s&&Sc(n,n.selection.main.from))return Cg(n,r,s)}return null}function Sc(n,e){let t=!1;return n.field(kc).between(0,n.doc.length,i=>{i==e&&(t=!0)}),t}function ao(n,e){let t=n.sliceString(e,e+2);return t.slice(0,pt(Qe(t,0)))}function Sg(n,e,t,i){let r=null,s=n.changeByRange(o=>{if(!o.empty)return{changes:[{insert:e,from:o.from},{insert:t,from:o.to}],effects:Pt.of(o.to+e.length),range:b.range(o.anchor+e.length,o.head+e.length)};let l=ao(n.doc,o.head);return!l||/\s/.test(l)||i.indexOf(l)>-1?{changes:{insert:e+t,from:o.head},effects:Pt.of(o.head+e.length),range:b.cursor(o.head+e.length)}:{range:r=o}});return r?null:n.update(s,{scrollIntoView:!0,userEvent:"input.type"})}function Cg(n,e,t){let i=null,r=n.changeByRange(s=>s.empty&&ao(n.doc,s.head)==t?{changes:{from:s.head,to:s.head+t.length,insert:t},range:b.cursor(s.head+t.length)}:i={range:s});return i?null:n.update(r,{scrollIntoView:!0,userEvent:"input.type"})}function Ag(n,e,t,i){let r=i.stringPrefixes||zn.stringPrefixes,s=null,o=n.changeByRange(l=>{if(!l.empty)return{changes:[{insert:e,from:l.from},{insert:e,from:l.to}],effects:Pt.of(l.to+e.length),range:b.range(l.anchor+e.length,l.head+e.length)};let a=l.head,h=ao(n.doc,a),c;if(h==e){if(Hl(n,a))return{changes:{insert:e+e,from:a},effects:Pt.of(a+e.length),range:b.cursor(a+e.length)};if(Sc(n,a)){let u=t&&n.sliceDoc(a,a+e.length*3)==e+e+e?e+e+e:e;return{changes:{from:a,to:a+u.length,insert:u},range:b.cursor(a+u.length)}}}else{if(t&&n.sliceDoc(a-2*e.length,a)==e+e&&(c=zl(n,a-2*e.length,r))>-1&&Hl(n,c))return{changes:{insert:e+e+e+e,from:a},effects:Pt.of(a+e.length),range:b.cursor(a+e.length)};if(n.charCategorizer(a)(h)!=Re.Word&&zl(n,a,r)>-1&&!Tg(n,a,e,r))return{changes:{insert:e+e,from:a},effects:Pt.of(a+e.length),range:b.cursor(a+e.length)}}return{range:s=l}});return s?null:n.update(o,{scrollIntoView:!0,userEvent:"input.type"})}function Hl(n,e){let t=Oe(n).resolveInner(e+1);return t.parent&&t.from==e}function Tg(n,e,t,i){let r=Oe(n).resolveInner(e,-1),s=i.reduce((o,l)=>Math.max(o,l.length),0);for(let o=0;o<5;o++){let l=n.sliceDoc(r.from,Math.min(r.to,r.from+t.length+s)),a=l.indexOf(t);if(!a||a>-1&&i.indexOf(l.slice(0,a))>-1){let c=r.firstChild;for(;c&&c.from==r.from&&c.to-c.from>t.length+a;){if(n.sliceDoc(c.to-t.length,c.to)==t)return!1;c=c.firstChild}return!0}let h=r.to==e&&r.parent;if(!h)break;r=h}return!1}function zl(n,e,t){let i=n.charCategorizer(e);if(i(n.sliceDoc(e-1,e))!=Re.Word)return e;for(let r of t){let s=e-r.length;if(n.sliceDoc(s,e)==r&&i(n.sliceDoc(s-1,s))!=Re.Word)return s}return-1}function Mg(n={}){return[mg,ye,le.of(n),dg,Dg,gg]}const Cc=[{key:"Ctrl-Space",run:Pr},{mac:"Alt-`",run:Pr},{mac:"Alt-i",run:Pr},{key:"Escape",run:hg},{key:"ArrowDown",run:gn(!0)},{key:"ArrowUp",run:gn(!1)},{key:"PageDown",run:gn(!0,"page")},{key:"PageUp",run:gn(!1,"page")},{key:"Enter",run:vc}],Dg=Wt.highest(Ci.computeN([le],n=>n.facet(le).defaultKeymap?[Cc]:[])),Eg={function:"fn",type:"type",variable:"var",qualifier:"qual",keyword:"kw"},Ac={radians:{kind:"function",signature:"radians(degrees: genType) → genType",description:"Converts degrees to radians. Equivalent to degrees × π/180."},degrees:{kind:"function",signature:"degrees(radians: genType) → genType",description:"Converts radians to degrees. Equivalent to radians × 180/π."},sin:{kind:"function",signature:"sin(angle: genType) → genType",description:"Returns the sine of angle (in radians). Output range is [–1, 1]."},cos:{kind:"function",signature:"cos(angle: genType) → genType",description:"Returns the cosine of angle (in radians). Output range is [–1, 1]."},tan:{kind:"function",signature:"tan(angle: genType) → genType",description:"Returns the tangent of angle (in radians). Ratio of sin/cos."},asin:{kind:"function",signature:"asin(x: genType) → genType",description:"Returns the arc-sine (inverse sine) of x in radians. Input must be in [–1, 1]; returns values in [–π/2, π/2]."},acos:{kind:"function",signature:"acos(x: genType) → genType",description:"Returns the arc-cosine (inverse cosine) of x in radians. Input must be in [–1, 1]; returns values in [0, π]."},atan:{kind:"function",signature:"atan(y: genType, x: genType) → genType | atan(y_over_x: genType) → genType",description:"Two-argument form returns the angle (in radians) of the vector (x, y), handling all quadrants (like atan2). One-argument form returns arc-tangent of y/x in [–π/2, π/2]."},pow:{kind:"function",signature:"pow(x: genType, y: genType) → genType",description:"Returns x raised to the power y. x must be ≥ 0. Result is undefined for x < 0 or (x = 0 and y ≤ 0)."},exp:{kind:"function",signature:"exp(x: genType) → genType",description:"Returns the natural exponentiation eˣ."},log:{kind:"function",signature:"log(x: genType) → genType",description:"Returns the natural logarithm ln(x). x must be > 0."},exp2:{kind:"function",signature:"exp2(x: genType) → genType",description:"Returns 2 raised to the power x (2ˣ)."},log2:{kind:"function",signature:"log2(x: genType) → genType",description:"Returns log base-2 of x. x must be > 0."},sqrt:{kind:"function",signature:"sqrt(x: genType) → genType",description:"Returns the square root of x. x must be ≥ 0."},inversesqrt:{kind:"function",signature:"inversesqrt(x: genType) → genType",description:"Returns 1 / sqrt(x). Faster than dividing by sqrt(x). x must be > 0."},abs:{kind:"function",signature:"abs(x: genType) → genType",description:"Returns the absolute value of x. Component-wise for vectors."},sign:{kind:"function",signature:"sign(x: genType) → genType",description:"Returns –1.0, 0.0, or 1.0 depending on the sign of x."},floor:{kind:"function",signature:"floor(x: genType) → genType",description:"Returns the largest integer ≤ x (round toward –∞)."},ceil:{kind:"function",signature:"ceil(x: genType) → genType",description:"Returns the smallest integer ≥ x (round toward +∞)."},fract:{kind:"function",signature:"fract(x: genType) → genType",description:"Returns the fractional part of x: x – floor(x). Useful for repeating patterns."},mod:{kind:"function",signature:"mod(x: genType, y: genType|float) → genType",description:"Returns the modulo: x – y × floor(x/y). Works component-wise. Common for tiling and wrapping."},min:{kind:"function",signature:"min(x: genType, y: genType|float) → genType",description:"Returns the component-wise minimum of x and y."},max:{kind:"function",signature:"max(x: genType, y: genType|float) → genType",description:"Returns the component-wise maximum of x and y."},clamp:{kind:"function",signature:"clamp(x: genType, minVal, maxVal) → genType",description:"Clamps x to [minVal, maxVal]. Equivalent to min(max(x, minVal), maxVal). Safe when minVal ≤ maxVal."},mix:{kind:"function",signature:"mix(x: genType, y: genType, a: genType|float) → genType",description:"Linear interpolation: x × (1 – a) + y × a. a=0 returns x; a=1 returns y. a can exceed [0,1] for extrapolation."},step:{kind:"function",signature:"step(edge: genType|float, x: genType) → genType",description:"Returns 0.0 if x < edge, else 1.0. A hard threshold / Heaviside step function."},smoothstep:{kind:"function",signature:"smoothstep(edge0: genType|float, edge1: genType|float, x: genType) → genType",description:"Smooth Hermite interpolation between 0 and 1. Returns 0 when x ≤ edge0, 1 when x ≥ edge1, and a cubic S-curve in between. Equivalent to t²(3–2t) where t = clamp((x–edge0)/(edge1–edge0), 0, 1)."},length:{kind:"function",signature:"length(x: genType) → float",description:"Returns the Euclidean length (magnitude) of vector x: sqrt(x.x² + x.y² + …)."},distance:{kind:"function",signature:"distance(p0: genType, p1: genType) → float",description:"Returns the distance between two points: length(p1 – p0)."},dot:{kind:"function",signature:"dot(x: genType, y: genType) → float",description:"Returns the dot product of x and y. Measures how parallel two vectors are. dot(a,a) = length(a)²."},cross:{kind:"function",signature:"cross(x: vec3, y: vec3) → vec3",description:"Returns the cross product of x and y. The result is perpendicular to both input vectors. Only valid for vec3."},normalize:{kind:"function",signature:"normalize(x: genType) → genType",description:"Returns a unit vector in the same direction as x. Equivalent to x / length(x)."},faceforward:{kind:"function",signature:"faceforward(N, I, Nref: genType) → genType",description:"Returns N if dot(Nref, I) < 0, else –N. Ensures a normal faces toward the viewer."},reflect:{kind:"function",signature:"reflect(I: genType, N: genType) → genType",description:"Returns the reflection direction of incident vector I around normal N. N must be normalized. Result: I – 2 × dot(N, I) × N."},refract:{kind:"function",signature:"refract(I: genType, N: genType, eta: float) → genType",description:"Returns the refraction vector given incident I, surface normal N, and ratio of indices of refraction eta. Uses Snell's law."},matrixCompMult:{kind:"function",signature:"matrixCompMult(x: matType, y: matType) → matType",description:"Component-wise matrix multiplication (not standard matrix multiply). For regular matrix math, use the * operator."},vec2:{kind:"type",signature:"vec2(x, y: float)",description:"2-component float vector. Components accessible as .x/.y, .r/.g, or .s/.t."},vec3:{kind:"type",signature:"vec3(x, y, z: float | vec2, z | x, vec2)",description:"3-component float vector. Components accessible as .x/.y/.z, .r/.g/.b, or .s/.t/.p."},vec4:{kind:"type",signature:"vec4(x, y, z, w: float | vec3, w | …)",description:"4-component float vector. Components accessible as .x/.y/.z/.w, .r/.g/.b/.a, or .s/.t/.p/.q."},mat2:{kind:"type",signature:"mat2(col0: vec2, col1: vec2)",description:"2×2 float matrix. Constructed column-major. mat2 × vec2 performs a linear transform."},mat3:{kind:"type",signature:"mat3(col0: vec3, col1: vec3, col2: vec3)",description:"3×3 float matrix. Constructed column-major. Commonly used for normals and rotations."},mat4:{kind:"type",signature:"mat4(col0: vec4, … col3: vec4)",description:"4×4 float matrix. Constructed column-major. Standard transform matrix (model, view, projection)."},ivec2:{kind:"type",description:"2-component integer vector."},ivec3:{kind:"type",description:"3-component integer vector."},ivec4:{kind:"type",description:"4-component integer vector."},bvec2:{kind:"type",description:"2-component boolean vector. Returned by comparison functions."},bvec3:{kind:"type",description:"3-component boolean vector."},bvec4:{kind:"type",description:"4-component boolean vector."},sampler2D:{kind:"type",description:"Opaque handle to a 2D texture. Sample with texture2D(sampler, uv)."},samplerCube:{kind:"type",description:"Opaque handle to a cubemap texture. Sample with textureCube(sampler, dir)."},texture2D:{kind:"function",signature:"texture2D(sampler: sampler2D, coord: vec2, bias?: float) → vec4",description:"Samples a 2D texture at the given UV coordinates. Returns a vec4 (RGBA). The optional bias adjusts the mipmap LOD."},textureCube:{kind:"function",signature:"textureCube(sampler: samplerCube, coord: vec3) → vec4",description:"Samples a cubemap texture using a 3D direction vector as the coordinate."},texture2DProj:{kind:"function",signature:"texture2DProj(sampler: sampler2D, coord: vec3|vec4) → vec4",description:"Projective texture lookup: divides the texture coordinate by its last component before sampling."},gl_FragColor:{kind:"variable",signature:"gl_FragColor: vec4 (write-only)",description:"Output color of the current fragment (RGBA). This is the final value written to the framebuffer. Setting alpha < 1.0 makes the fragment semi-transparent (if blending is enabled)."},gl_FragCoord:{kind:"variable",signature:"gl_FragCoord: vec4 (read-only)",description:"The window-space position of the current fragment. .xy is the pixel position (origin at bottom-left), .z is depth [0,1], .w is 1/clip-w."},gl_FragDepth:{kind:"variable",signature:"gl_FragDepth: float (write-only)",description:"Override the depth value written to the depth buffer. If not written, gl_FragCoord.z is used."},gl_PointCoord:{kind:"variable",signature:"gl_PointCoord: vec2 (read-only)",description:"2D coordinate within a point sprite, ranging [0,1] in both dimensions. Only valid when rendering GL_POINTS."},gl_Position:{kind:"variable",signature:"gl_Position: vec4 (write-only, vertex)",description:"Clip-space position output from the vertex shader. Must be written for every vertex. Usually: projectionMatrix × viewMatrix × modelMatrix × vec4(position, 1.0)."},gl_PointSize:{kind:"variable",signature:"gl_PointSize: float (write-only, vertex)",description:"Size of the rendered point in pixels when drawing GL_POINTS primitives."},gl_FrontFacing:{kind:"variable",signature:"gl_FrontFacing: bool (read-only, fragment)",description:"True if the fragment belongs to a front-facing primitive. Useful for two-sided lighting."},uniform:{kind:"qualifier",description:"Declares a variable passed from the CPU (application) to the shader. Constant across all vertices/fragments in a draw call. Read-only inside the shader."},attribute:{kind:"qualifier",description:"(GLSL ES 1.0) Per-vertex input data from a vertex buffer — position, normal, UV, etc. Read-only, available only in vertex shaders. Replaced by 'in' in GLSL ES 3.0."},varying:{kind:"qualifier",description:"(GLSL ES 1.0) Passes interpolated data from the vertex shader to the fragment shader. Written in the vertex shader, read in the fragment shader. Replaced by 'out'/'in' in GLSL ES 3.0."},in:{kind:"qualifier",description:"(GLSL ES 3.0) Input to the current shader stage. In a vertex shader: per-vertex attribute. In a fragment shader: interpolated value from the vertex shader."},out:{kind:"qualifier",description:"(GLSL ES 3.0) Output from the current shader stage. In a vertex shader: data passed to the next stage. In a fragment shader: the fragment color output."},inout:{kind:"qualifier",description:"Function parameter qualifier — the variable is both read on entry and written on exit (passed by reference)."},precision:{kind:"keyword",description:"Sets the default floating-point precision for a type (float, int, sampler2D…). Usually placed at the top of the shader: 'precision mediump float;'"},highp:{kind:"qualifier",description:"High precision floating-point. At least 16 bits of mantissa, range [–2¹⁶, 2¹⁶]. Guaranteed in vertex shaders; optional in fragment shaders on some hardware."},mediump:{kind:"qualifier",description:"Medium precision floating-point. At least 10 bits of mantissa, range [–2¹⁰, 2¹⁰]. A safe default for fragment shaders."},lowp:{kind:"qualifier",description:"Low precision floating-point. At least 8 bits, range [–2, 2]. Suitable for colors (0–1). Avoids clamping for values outside that range on some GPUs."},float:{kind:"type",description:"Single-precision (or mediump) scalar floating-point value. The fundamental numeric type in GLSL."},int:{kind:"type",description:"Signed integer scalar. GLSL ES 1.0 integers have limited arithmetic; use float for general math."},uint:{kind:"type",description:"Unsigned integer scalar (GLSL ES 3.0+)."},bool:{kind:"type",description:"Boolean scalar. Produced by comparison operators; consumed by if/while conditions and mix()."},void:{kind:"keyword",description:"Indicates a function returns no value, or (as a parameter list) that a function takes no arguments."},if:{kind:"keyword",description:"Conditional branch. Executes the following block only when the condition is true."},else:{kind:"keyword",description:"Executes its block when the preceding 'if' condition was false."},for:{kind:"keyword",description:"Counted loop. Loops should have a deterministic iteration count; avoid infinite or GPU-heavy loops."},while:{kind:"keyword",description:"Condition-driven loop. Runs while the condition is true. Avoid long-running loops in shaders."},do:{kind:"keyword",description:"Do-while loop. Executes the body at least once before checking the condition."},break:{kind:"keyword",description:"Exits the nearest enclosing for/while/do loop immediately."},continue:{kind:"keyword",description:"Skips the rest of the current loop iteration and moves to the next iteration."},return:{kind:"keyword",description:"Returns a value from a function and exits it immediately. 'return;' (no value) exits a void function."},discard:{kind:"keyword",description:"(Fragment shaders only) Discards the current fragment — it is not written to the framebuffer. Useful for alpha cutouts or stencil effects."},const:{kind:"keyword",description:"Declares a compile-time constant. Must be initialized with a constant expression."},struct:{kind:"keyword",description:"Defines a composite data type grouping multiple fields. Access members with dot notation."},main:{kind:"keyword",description:"The required entry point of every shader. Signature: void main(). Execution starts here."}},Og={function:4,variable:3,type:2,qualifier:1,keyword:0},$l=/\b([a-zA-Z_][a-zA-Z0-9_]*)\b/g;function Lg(n){let e=null,t=-1,i;for($l.lastIndex=0;(i=$l.exec(n))!==null;){const r=i[1],s=Ac[r];if(!s)continue;const o=Og[s.kind];o>t&&(t=o,e={token:r,doc:s})}return e}const Bg={function:"function",type:"type",variable:"variable",qualifier:"keyword",keyword:"keyword"},Rg=Object.entries(Ac).map(([n,e])=>({label:n,type:Bg[e.kind],detail:e.signature??void 0,info:e.description,boost:e.kind==="function"?1:0}));function Ig(n){const e=n.matchBefore(/\w+/);if(!e||e.from===e.to&&!n.explicit)return null;const t=e.text.toLowerCase(),i=Rg.filter(r=>r.label.toLowerCase().startsWith(t));return i.length===0?null:{from:e.from,options:i,validFor:/^\w*$/}}const Tc="cm-error-line",Mc="cm-error-marker",Dc="cm-error-gutter",Ec=G.define();class Pg extends St{toDOM(){const e=document.createElement("span");return e.className=Mc,e.textContent="●",e.title="Compile error on this line",e}}const Ul=new Pg,Oc=qe.define({create(){return{lines:[],decos:Y.none}},update(n,e){for(const t of e.effects)if(t.is(Ec)){const i=t.value,r=e.state.doc.lines,s=i.length===0?Y.none:Y.set(i.filter(o=>o>=1&&o<=r).sort((o,l)=>o-l).map(o=>{const l=e.state.doc.line(o).from;return Y.line({class:Tc}).range(l)}));return{lines:i,decos:s}}return e.docChanged?{lines:n.lines,decos:n.decos.map(e.changes)}:n},provide(n){return I.decorations.from(n,e=>e.decos)}}),Ng=ld({class:Dc,lineMarker(n,e){const{lines:t}=n.state.field(Oc);if(t.length===0)return null;const i=n.state.doc.lineAt(e.from).number;return t.includes(i)?Ul:null},initialSpacer:()=>Ul});function Fg(n){const e=/ERROR:\s*\d+:(\d+)/g;let t,i=1/0;for(;(t=e.exec(n))!==null;){const r=parseInt(t[1],10);!isNaN(r)&&r>0&&r{if(l.docChanged&&t.onChange(l.state.doc.toString()),l.docChanged||l.selectionSet){const a=l.state,h=a.selection.main.head,c=a.doc.lineAt(h);t.onCursorLine(c.text,c.number)}})]}),parent:n});function r(l){i.dispatch({changes:{from:0,to:i.state.doc.length,insert:l},selection:{anchor:0}})}function s(l){i.dispatch({effects:ql.reconfigure(l?[Mg({override:[Ig],defaultKeymap:!1})]:[])})}function o(l){const a=l?Fg(l):[];i.dispatch({effects:Ec.of(a)})}return{view:i,setDoc:r,setAutocomplete:s,setErrorLines:o,getDoc:()=>i.state.doc.toString()}}const Hg=`#version 300 es +`);i>-1&&(t=t.slice(0,i))}return e+t.length<=this.to?t:t.slice(0,this.to-e)}nextLine(){let e=this.parsedPos,t=this.lineAfter(e),i=e+t.length;for(let r=this.rangeIndex;;){let s=this.ranges[r].to;if(s>=i||(t=t.slice(0,s-(i-t.length)),r++,r==this.ranges.length))break;let o=this.ranges[r].from,l=this.lineAfter(o);t+=l,i=o+l.length}return{line:t,end:i}}skipGapsTo(e,t,i){for(;;){let r=this.ranges[this.rangeIndex].to,s=e+t;if(i>0?r>s:r>=s)break;let o=this.ranges[++this.rangeIndex].from;t+=o-r}return t}moveRangeIndex(){for(;this.ranges[this.rangeIndex].to1){r=this.skipGapsTo(t,r,1),t+=r;let l=this.chunk.length;r=this.skipGapsTo(i,r,-1),i+=r,s+=this.chunk.length-l}let o=this.chunk.length-4;return this.lang.streamParser.mergeTokens&&s==4&&o>=0&&this.chunk[o]==e&&this.chunk[o+2]==t?this.chunk[o+2]=i:this.chunk.push(e,t,i,s),r}parseLine(e){let{line:t,end:i}=this.nextLine(),r=0,{streamParser:s}=this.lang,o=new Nh(t,e?e.state.tabSize:4,e?Ut(e.state):2);if(o.eol())s.blankLine(this.state,o.indentUnit);else for(;!o.eol();){let l=_h(s.token,o,this.state);if(l&&(r=this.emitToken(this.lang.tokenTable.resolve(l),this.parsedPos+o.start,this.parsedPos+o.pos,r)),o.start>1e4)break}this.parsedPos=i,this.moveRangeIndex(),this.parsedPose.start)return r}throw new Error("Stream parser failed to advance stream.")}const no=Object.create(null),Wi=[Se.none],Cp=new Ys(Wi),Al=[],Tl=Object.create(null),Wh=Object.create(null);for(let[n,e]of[["variable","variableName"],["variable-2","variableName.special"],["string-2","string.special"],["def","variableName.definition"],["tag","tagName"],["attribute","attributeName"],["type","typeName"],["builtin","variableName.standard"],["qualifier","modifier"],["error","invalid"],["header","heading"],["property","propertyName"]])Wh[n]=Hh(no,e);class Vh{constructor(e){this.extra=e,this.table=Object.assign(Object.create(null),Wh)}resolve(e){return e?this.table[e]||(this.table[e]=Hh(this.extra,e)):0}}const Ap=new Vh(no);function Pr(n,e){Al.indexOf(n)>-1||(Al.push(n),console.warn(e))}function Hh(n,e){let t=[];for(let l of e.split(" ")){let a=[];for(let h of l.split(".")){let c=n[h]||x[h];c?typeof c=="function"?a.length?a=a.map(c):Pr(h,`Modifier ${h} used at start of tag`):a.length?Pr(h,`Tag ${h} used as modifier`):a=Array.isArray(c)?c:[c]:Pr(h,`Unknown highlighting tag ${h}`)}for(let h of a)t.push(h)}if(!t.length)return 0;let i=e.replace(/ /g,"_"),r=i+" "+t.map(l=>l.id),s=Tl[r];if(s)return s.id;let o=Tl[r]=Se.define({id:Wi.length,name:i,props:[Hd({[i]:t})]});return Wi.push(o),o.id}function Tp(n,e){let t=Se.define({id:Wi.length,name:"Document",props:[Yt.add(()=>n),Lh.add(()=>i=>e.getIndent(i))],top:!0});return Wi.push(t),t}Z.RTL,Z.LTR;const Mp=n=>{let{state:e}=n,t=e.doc.lineAt(e.selection.main.from),i=so(n.state,t.from);return i.line?Dp(n):i.block?Op(n):!1};function ro(n,e){return({state:t,dispatch:i})=>{if(t.readOnly)return!1;let r=n(e,t);return r?(i(t.update(r)),!0):!1}}const Dp=ro(Bp,0),Ep=ro(zh,0),Op=ro((n,e)=>zh(n,e,Rp(e)),0);function so(n,e){let t=n.languageDataAt("commentTokens",e,1);return t.length?t[0]:{}}const yi=50;function Lp(n,{open:e,close:t},i,r){let s=n.sliceDoc(i-yi,i),o=n.sliceDoc(r,r+yi),l=/\s*$/.exec(s)[0].length,a=/^\s*/.exec(o)[0].length,h=s.length-l;if(s.slice(h-e.length,h)==e&&o.slice(a,a+t.length)==t)return{open:{pos:i-l,margin:l&&1},close:{pos:r+a,margin:a&&1}};let c,f;r-i<=2*yi?c=f=n.sliceDoc(i,r):(c=n.sliceDoc(i,i+yi),f=n.sliceDoc(r-yi,r));let u=/^\s*/.exec(c)[0].length,d=/\s*$/.exec(f)[0].length,p=f.length-d-t.length;return c.slice(u,u+e.length)==e&&f.slice(p,p+t.length)==t?{open:{pos:i+u+e.length,margin:/\s/.test(c.charAt(u+e.length))?1:0},close:{pos:r-d-t.length,margin:/\s/.test(f.charAt(p-1))?1:0}}:null}function Rp(n){let e=[];for(let t of n.selection.ranges){let i=n.doc.lineAt(t.from),r=t.to<=i.to?i:n.doc.lineAt(t.to);r.from>i.from&&r.from==t.to&&(r=t.to==i.to+1?i:n.doc.lineAt(t.to-1));let s=e.length-1;s>=0&&e[s].to>i.from?e[s].to=r.to:e.push({from:i.from+/^\s*/.exec(i.text)[0].length,to:r.to})}return e}function zh(n,e,t=e.selection.ranges){let i=t.map(s=>so(e,s.from).block);if(!i.every(s=>s))return null;let r=t.map((s,o)=>Lp(e,i[o],s.from,s.to));if(n!=2&&!r.every(s=>s))return{changes:e.changes(t.map((s,o)=>r[o]?[]:[{from:s.from,insert:i[o].open+" "},{from:s.to,insert:" "+i[o].close}]))};if(n!=1&&r.some(s=>s)){let s=[];for(let o=0,l;or&&(s==o||o>f.from)){r=f.from;let u=/^\s*/.exec(f.text)[0].length,d=u==f.length,p=f.text.slice(u,u+h.length)==h?u:-1;us.comment<0&&(!s.empty||s.single))){let s=[];for(let{line:l,token:a,indent:h,empty:c,single:f}of i)(f||!c)&&s.push({from:l.from+h,insert:a+" "});let o=e.changes(s);return{changes:o,selection:e.selection.map(o,1)}}else if(n!=1&&i.some(s=>s.comment>=0)){let s=[];for(let{line:o,comment:l,token:a}of i)if(l>=0){let h=o.from+l,c=h+a.length;o.text[c-o.from]==" "&&c++,s.push({from:h,to:c})}return{changes:s}}return null}const Ms=ft.define(),Ip=ft.define(),Pp=B.define(),$h=B.define({combine(n){return Xn(n,{minDepth:100,newGroupDelay:500,joinToEvent:(e,t)=>t},{minDepth:Math.max,newGroupDelay:Math.min,joinToEvent:(e,t)=>(i,r)=>e(i,r)||t(i,r)})}}),qh=We.define({create(){return nt.empty},update(n,e){let t=e.state.facet($h),i=e.annotation(Ms);if(i){let a=xe.fromTransaction(e,i.selection),h=i.side,c=h==0?n.undone:n.done;return a?c=Un(c,c.length,t.minDepth,a):c=jh(c,e.startState.selection),new nt(h==0?i.rest:c,h==0?c:i.rest)}let r=e.annotation(Ip);if((r=="full"||r=="before")&&(n=n.isolate()),e.annotation(re.addToHistory)===!1)return e.changes.empty?n:n.addMapping(e.changes.desc);let s=xe.fromTransaction(e),o=e.annotation(re.time),l=e.annotation(re.userEvent);return s?n=n.addChanges(s,o,l,t,e):e.selection&&(n=n.addSelection(e.startState.selection,o,l,t.newGroupDelay)),(r=="full"||r=="after")&&(n=n.isolate()),n},toJSON(n){return{done:n.done.map(e=>e.toJSON()),undone:n.undone.map(e=>e.toJSON())}},fromJSON(n){return new nt(n.done.map(xe.fromJSON),n.undone.map(xe.fromJSON))}});function Np(n={}){return[qh,$h.of(n),I.domEventHandlers({beforeinput(e,t){let i=e.inputType=="historyUndo"?Uh:e.inputType=="historyRedo"?Ds:null;return i?(e.preventDefault(),i(t)):!1}})]}function or(n,e){return function({state:t,dispatch:i}){if(!e&&t.readOnly)return!1;let r=t.field(qh,!1);if(!r)return!1;let s=r.pop(n,t,e);return s?(i(s),!0):!1}}const Uh=or(0,!1),Ds=or(1,!1),Fp=or(0,!0),_p=or(1,!0);class xe{constructor(e,t,i,r,s){this.changes=e,this.effects=t,this.mapped=i,this.startSelection=r,this.selectionsAfter=s}setSelAfter(e){return new xe(this.changes,this.effects,this.mapped,this.startSelection,e)}toJSON(){var e,t,i;return{changes:(e=this.changes)===null||e===void 0?void 0:e.toJSON(),mapped:(t=this.mapped)===null||t===void 0?void 0:t.toJSON(),startSelection:(i=this.startSelection)===null||i===void 0?void 0:i.toJSON(),selectionsAfter:this.selectionsAfter.map(r=>r.toJSON())}}static fromJSON(e){return new xe(e.changes&&se.fromJSON(e.changes),[],e.mapped&&rt.fromJSON(e.mapped),e.startSelection&&b.fromJSON(e.startSelection),e.selectionsAfter.map(b.fromJSON))}static fromTransaction(e,t){let i=Pe;for(let r of e.startState.facet(Pp)){let s=r(e);s.length&&(i=i.concat(s))}return!i.length&&e.changes.empty?null:new xe(e.changes.invert(e.startState.doc),i,void 0,t||e.startState.selection,Pe)}static selection(e){return new xe(void 0,Pe,void 0,void 0,e)}}function Un(n,e,t,i){let r=e+1>t+20?e-t-1:0,s=n.slice(r,e);return s.push(i),s}function Wp(n,e){let t=[],i=!1;return n.iterChangedRanges((r,s)=>t.push(r,s)),e.iterChangedRanges((r,s,o,l)=>{for(let a=0;a=h&&o<=c&&(i=!0)}}),i}function Vp(n,e){return n.ranges.length==e.ranges.length&&n.ranges.filter((t,i)=>t.empty!=e.ranges[i].empty).length===0}function Kh(n,e){return n.length?e.length?n.concat(e):n:e}const Pe=[],Hp=200;function jh(n,e){if(n.length){let t=n[n.length-1],i=t.selectionsAfter.slice(Math.max(0,t.selectionsAfter.length-Hp));return i.length&&i[i.length-1].eq(e)?n:(i.push(e),Un(n,n.length-1,1e9,t.setSelAfter(i)))}else return[xe.selection([e])]}function zp(n){let e=n[n.length-1],t=n.slice();return t[n.length-1]=e.setSelAfter(e.selectionsAfter.slice(0,e.selectionsAfter.length-1)),t}function Nr(n,e){if(!n.length)return n;let t=n.length,i=Pe;for(;t;){let r=$p(n[t-1],e,i);if(r.changes&&!r.changes.empty||r.effects.length){let s=n.slice(0,t);return s[t-1]=r,s}else e=r.mapped,t--,i=r.selectionsAfter}return i.length?[xe.selection(i)]:Pe}function $p(n,e,t){let i=Kh(n.selectionsAfter.length?n.selectionsAfter.map(l=>l.map(e)):Pe,t);if(!n.changes)return xe.selection(i);let r=n.changes.map(e),s=e.mapDesc(n.changes,!0),o=n.mapped?n.mapped.composeDesc(s):s;return new xe(r,j.mapEffects(n.effects,e),o,n.startSelection.map(s),i)}const qp=/^(input\.type|delete)($|\.)/;class nt{constructor(e,t,i=0,r=void 0){this.done=e,this.undone=t,this.prevTime=i,this.prevUserEvent=r}isolate(){return this.prevTime?new nt(this.done,this.undone):this}addChanges(e,t,i,r,s){let o=this.done,l=o[o.length-1];return l&&l.changes&&!l.changes.empty&&e.changes&&(!i||qp.test(i))&&(!l.selectionsAfter.length&&t-this.prevTime0&&t-this.prevTimet.empty?n.moveByChar(t,e):lr(t,e))}function me(n){return n.textDirectionAt(n.state.selection.main.head)==Z.LTR}const Yh=n=>Gh(n,!me(n)),Xh=n=>Gh(n,me(n));function Jh(n,e){return je(n,t=>t.empty?n.moveByGroup(t,e):lr(t,e))}const Kp=n=>Jh(n,!me(n)),jp=n=>Jh(n,me(n));function Gp(n,e,t){if(e.type.prop(t))return!0;let i=e.to-e.from;return i&&(i>2||/[^\s,.;:]/.test(n.sliceDoc(e.from,e.to)))||e.firstChild}function ar(n,e,t){let i=Oe(n).resolveInner(e.head),r=t?V.closedBy:V.openedBy;for(let a=e.head;;){let h=t?i.childAfter(a):i.childBefore(a);if(!h)break;Gp(n,h,r)?i=h:a=t?h.to:h.from}let s=i.type.prop(r),o,l;return s&&(o=t?it(n,i.from,1):it(n,i.to,-1))&&o.matched?l=t?o.end.to:o.end.from:l=t?i.to:i.from,b.cursor(l,t?-1:1)}const Yp=n=>je(n,e=>ar(n.state,e,!me(n))),Xp=n=>je(n,e=>ar(n.state,e,me(n)));function Qh(n,e){return je(n,t=>{if(!t.empty)return lr(t,e);let i=n.moveVertically(t,e);return i.head!=t.head?i:n.moveToLineBoundary(t,e)})}const Zh=n=>Qh(n,!1),ec=n=>Qh(n,!0);function tc(n){let e=n.scrollDOM.clientHeighto.empty?n.moveVertically(o,e,t.height):lr(o,e));if(r.eq(i.selection))return!1;let s;if(t.selfScroll){let o=n.coordsAtPos(i.selection.main.head),l=n.scrollDOM.getBoundingClientRect(),a=l.top+t.marginTop,h=l.bottom-t.marginBottom;o&&o.top>a&&o.bottomic(n,!1),Es=n=>ic(n,!0);function Mt(n,e,t){let i=n.lineBlockAt(e.head),r=n.moveToLineBoundary(e,t);if(r.head==e.head&&r.head!=(t?i.to:i.from)&&(r=n.moveToLineBoundary(e,t,!1)),!t&&r.head==i.from&&i.length){let s=/^\s*/.exec(n.state.sliceDoc(i.from,Math.min(i.from+100,i.to)))[0].length;s&&e.head!=i.from+s&&(r=b.cursor(i.from+s))}return r}const Jp=n=>je(n,e=>Mt(n,e,!0)),Qp=n=>je(n,e=>Mt(n,e,!1)),Zp=n=>je(n,e=>Mt(n,e,!me(n))),em=n=>je(n,e=>Mt(n,e,me(n))),tm=n=>je(n,e=>b.cursor(n.lineBlockAt(e.head).from,1)),im=n=>je(n,e=>b.cursor(n.lineBlockAt(e.head).to,-1));function nm(n,e,t){let i=!1,r=ci(n.selection,s=>{let o=it(n,s.head,-1)||it(n,s.head,1)||s.head>0&&it(n,s.head-1,1)||s.headnm(n,e);function Ve(n,e){let t=ci(n.state.selection,i=>{let r=e(i);return b.range(i.anchor,r.head,r.goalColumn,r.bidiLevel||void 0,r.assoc)});return t.eq(n.state.selection)?!1:(n.dispatch(Ke(n.state,t)),!0)}function nc(n,e){return Ve(n,t=>n.moveByChar(t,e))}const rc=n=>nc(n,!me(n)),sc=n=>nc(n,me(n));function oc(n,e){return Ve(n,t=>n.moveByGroup(t,e))}const sm=n=>oc(n,!me(n)),om=n=>oc(n,me(n)),lm=n=>Ve(n,e=>ar(n.state,e,!me(n))),am=n=>Ve(n,e=>ar(n.state,e,me(n)));function lc(n,e){return Ve(n,t=>n.moveVertically(t,e))}const ac=n=>lc(n,!1),hc=n=>lc(n,!0);function cc(n,e){return Ve(n,t=>n.moveVertically(t,e,tc(n).height))}const Dl=n=>cc(n,!1),El=n=>cc(n,!0),hm=n=>Ve(n,e=>Mt(n,e,!0)),cm=n=>Ve(n,e=>Mt(n,e,!1)),fm=n=>Ve(n,e=>Mt(n,e,!me(n))),um=n=>Ve(n,e=>Mt(n,e,me(n))),dm=n=>Ve(n,e=>b.cursor(n.lineBlockAt(e.head).from)),pm=n=>Ve(n,e=>b.cursor(n.lineBlockAt(e.head).to)),Ol=({state:n,dispatch:e})=>(e(Ke(n,{anchor:0})),!0),Ll=({state:n,dispatch:e})=>(e(Ke(n,{anchor:n.doc.length})),!0),Rl=({state:n,dispatch:e})=>(e(Ke(n,{anchor:n.selection.main.anchor,head:0})),!0),Bl=({state:n,dispatch:e})=>(e(Ke(n,{anchor:n.selection.main.anchor,head:n.doc.length})),!0),mm=({state:n,dispatch:e})=>(e(n.update({selection:{anchor:0,head:n.doc.length},userEvent:"select"})),!0),gm=({state:n,dispatch:e})=>{let t=hr(n).map(({from:i,to:r})=>b.range(i,Math.min(r+1,n.doc.length)));return e(n.update({selection:b.create(t),userEvent:"select"})),!0},ym=({state:n,dispatch:e})=>{let t=ci(n.selection,i=>{let r=Oe(n),s=r.resolveStack(i.from,1);if(i.empty){let o=r.resolveStack(i.from,-1);o.node.from>=s.node.from&&o.node.to<=s.node.to&&(s=o)}for(let o=s;o;o=o.next){let{node:l}=o;if((l.from=i.to||l.to>i.to&&l.from<=i.from)&&o.next)return b.range(l.to,l.from)}return i});return t.eq(n.selection)?!1:(e(Ke(n,t)),!0)};function fc(n,e){let{state:t}=n,i=t.selection,r=t.selection.ranges.slice();for(let s of t.selection.ranges){let o=t.doc.lineAt(s.head);if(e?o.to0)for(let l=s;;){let a=n.moveVertically(l,e);if(a.heado.to){r.some(h=>h.head==a.head)||r.push(a);break}else{if(a.head==l.head)break;l=a}}}return r.length==i.ranges.length?!1:(n.dispatch(Ke(t,b.create(r,r.length-1))),!0)}const bm=n=>fc(n,!1),wm=n=>fc(n,!0),xm=({state:n,dispatch:e})=>{let t=n.selection,i=null;return t.ranges.length>1?i=b.create([t.main]):t.main.empty||(i=b.create([b.cursor(t.main.head)])),i?(e(Ke(n,i)),!0):!1};function Yi(n,e){if(n.state.readOnly)return!1;let t="delete.selection",{state:i}=n,r=i.changeByRange(s=>{let{from:o,to:l}=s;if(o==l){let a=e(s);ao&&(t="delete.forward",a=wn(n,a,!0)),o=Math.min(o,a),l=Math.max(l,a)}else o=wn(n,o,!1),l=wn(n,l,!0);return o==l?{range:s}:{changes:{from:o,to:l},range:b.cursor(o,or(n)))i.between(e,e,(r,s)=>{re&&(e=t?s:r)});return e}const uc=(n,e,t)=>Yi(n,i=>{let r=i.from,{state:s}=n,o=s.doc.lineAt(r),l,a;if(t&&!e&&r>o.from&&ruc(n,!1,!0),dc=n=>uc(n,!0,!1),pc=(n,e)=>Yi(n,t=>{let i=t.head,{state:r}=n,s=r.doc.lineAt(i),o=r.charCategorizer(i);for(let l=null;;){if(i==(e?s.to:s.from)){i==t.head&&s.number!=(e?r.doc.lines:1)&&(i+=e?1:-1);break}let a=pe(s.text,i-s.from,e)+s.from,h=s.text.slice(Math.min(i,a)-s.from,Math.max(i,a)-s.from),c=o(h);if(l!=null&&c!=l)break;(h!=" "||i!=t.head)&&(l=c),i=a}return i}),mc=n=>pc(n,!1),vm=n=>pc(n,!0),km=n=>Yi(n,e=>{let t=n.lineBlockAt(e.head).to;return e.headYi(n,e=>{let t=n.moveToLineBoundary(e,!1).head;return e.head>t?t:Math.max(0,e.head-1)}),Cm=n=>Yi(n,e=>{let t=n.moveToLineBoundary(e,!0).head;return e.head{if(n.readOnly)return!1;let t=n.changeByRange(i=>({changes:{from:i.from,to:i.to,insert:H.of(["",""])},range:b.cursor(i.from)}));return e(n.update(t,{scrollIntoView:!0,userEvent:"input"})),!0},Tm=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=n.changeByRange(i=>{if(!i.empty||i.from==0||i.from==n.doc.length)return{range:i};let r=i.from,s=n.doc.lineAt(r),o=r==s.from?r-1:pe(s.text,r-s.from,!1)+s.from,l=r==s.to?r+1:pe(s.text,r-s.from,!0)+s.from;return{changes:{from:o,to:l,insert:n.doc.slice(r,l).append(n.doc.slice(o,r))},range:b.cursor(l)}});return t.changes.empty?!1:(e(n.update(t,{scrollIntoView:!0,userEvent:"move.character"})),!0)};function hr(n){let e=[],t=-1;for(let i of n.selection.ranges){let r=n.doc.lineAt(i.from),s=n.doc.lineAt(i.to);if(!i.empty&&i.to==s.from&&(s=n.doc.lineAt(i.to-1)),t>=r.number){let o=e[e.length-1];o.to=s.to,o.ranges.push(i)}else e.push({from:r.from,to:s.to,ranges:[i]});t=s.number+1}return e}function gc(n,e,t){if(n.readOnly)return!1;let i=[],r=[];for(let s of hr(n)){if(t?s.to==n.doc.length:s.from==0)continue;let o=n.doc.lineAt(t?s.to+1:s.from-1),l=o.length+1;if(t){i.push({from:s.to,to:o.to},{from:s.from,insert:o.text+n.lineBreak});for(let a of s.ranges)r.push(b.range(Math.min(n.doc.length,a.anchor+l),Math.min(n.doc.length,a.head+l)))}else{i.push({from:o.from,to:s.from},{from:s.to,insert:n.lineBreak+o.text});for(let a of s.ranges)r.push(b.range(a.anchor-l,a.head-l))}}return i.length?(e(n.update({changes:i,scrollIntoView:!0,selection:b.create(r,n.selection.mainIndex),userEvent:"move.line"})),!0):!1}const Mm=({state:n,dispatch:e})=>gc(n,e,!1),Dm=({state:n,dispatch:e})=>gc(n,e,!0);function yc(n,e,t){if(n.readOnly)return!1;let i=[];for(let s of hr(n))t?i.push({from:s.from,insert:n.doc.slice(s.from,s.to)+n.lineBreak}):i.push({from:s.to,insert:n.lineBreak+n.doc.slice(s.from,s.to)});let r=n.changes(i);return e(n.update({changes:r,selection:n.selection.map(r,t?1:-1),scrollIntoView:!0,userEvent:"input.copyline"})),!0}const Em=({state:n,dispatch:e})=>yc(n,e,!1),Om=({state:n,dispatch:e})=>yc(n,e,!0),Lm=n=>{if(n.state.readOnly)return!1;let{state:e}=n,t=e.changes(hr(e).map(({from:r,to:s})=>(r>0?r--:s{let s;if(n.lineWrapping){let o=n.lineBlockAt(r.head),l=n.coordsAtPos(r.head,r.assoc||1);l&&(s=o.bottom+n.documentTop-l.bottom+n.defaultLineHeight/2)}return n.moveVertically(r,!0,s)}).map(t);return n.dispatch({changes:t,selection:i,scrollIntoView:!0,userEvent:"delete.line"}),!0};function Rm(n,e){if(/\(\)|\[\]|\{\}/.test(n.sliceDoc(e-1,e+1)))return{from:e,to:e};let t=Oe(n).resolveInner(e),i=t.childBefore(e),r=t.childAfter(e),s;return i&&r&&i.to<=e&&r.from>=e&&(s=i.type.prop(V.closedBy))&&s.indexOf(r.name)>-1&&n.doc.lineAt(i.to).from==n.doc.lineAt(r.from).from&&!/\S/.test(n.sliceDoc(i.to,r.from))?{from:i.to,to:r.from}:null}const Il=bc(!1),Bm=bc(!0);function bc(n){return({state:e,dispatch:t})=>{if(e.readOnly)return!1;let i=e.changeByRange(r=>{let{from:s,to:o}=r,l=e.doc.lineAt(s),a=!n&&s==o&&Rm(e,s);n&&(s=o=(o<=l.to?l:e.doc.lineAt(o)).to);let h=new rr(e,{simulateBreak:s,simulateDoubleBreak:!!a}),c=Zs(h,s);for(c==null&&(c=Jn(/^\s*/.exec(e.doc.lineAt(s).text)[0],e.tabSize));ol.from&&s{let r=[];for(let o=i.from;o<=i.to;){let l=n.doc.lineAt(o);l.number>t&&(i.empty||i.to>l.from)&&(e(l,r,i),t=l.number),o=l.to+1}let s=n.changes(r);return{changes:r,range:b.range(s.mapPos(i.anchor,1),s.mapPos(i.head,1))}})}const Im=({state:n,dispatch:e})=>{if(n.readOnly)return!1;let t=Object.create(null),i=new rr(n,{overrideIndentation:s=>{let o=t[s];return o??-1}}),r=oo(n,(s,o,l)=>{let a=Zs(i,s.from);if(a==null)return;/\S/.test(s.text)||(a=0);let h=/^\s*/.exec(s.text)[0],c=_i(n,a);(h!=c||l.fromn.readOnly?!1:(e(n.update(oo(n,(t,i)=>{i.push({from:t.from,insert:n.facet(nr)})}),{userEvent:"input.indent"})),!0),xc=({state:n,dispatch:e})=>n.readOnly?!1:(e(n.update(oo(n,(t,i)=>{let r=/^\s*/.exec(t.text)[0];if(!r)return;let s=Jn(r,n.tabSize),o=0,l=_i(n,Math.max(0,s-Ut(n)));for(;o(n.setTabFocusMode(),!0),Nm=[{key:"Ctrl-b",run:Yh,shift:rc,preventDefault:!0},{key:"Ctrl-f",run:Xh,shift:sc},{key:"Ctrl-p",run:Zh,shift:ac},{key:"Ctrl-n",run:ec,shift:hc},{key:"Ctrl-a",run:tm,shift:dm},{key:"Ctrl-e",run:im,shift:pm},{key:"Ctrl-d",run:dc},{key:"Ctrl-h",run:Os},{key:"Ctrl-k",run:km},{key:"Ctrl-Alt-h",run:mc},{key:"Ctrl-o",run:Am},{key:"Ctrl-t",run:Tm},{key:"Ctrl-v",run:Es}],Fm=[{key:"ArrowLeft",run:Yh,shift:rc,preventDefault:!0},{key:"Mod-ArrowLeft",mac:"Alt-ArrowLeft",run:Kp,shift:sm,preventDefault:!0},{mac:"Cmd-ArrowLeft",run:Zp,shift:fm,preventDefault:!0},{key:"ArrowRight",run:Xh,shift:sc,preventDefault:!0},{key:"Mod-ArrowRight",mac:"Alt-ArrowRight",run:jp,shift:om,preventDefault:!0},{mac:"Cmd-ArrowRight",run:em,shift:um,preventDefault:!0},{key:"ArrowUp",run:Zh,shift:ac,preventDefault:!0},{mac:"Cmd-ArrowUp",run:Ol,shift:Rl},{mac:"Ctrl-ArrowUp",run:Ml,shift:Dl},{key:"ArrowDown",run:ec,shift:hc,preventDefault:!0},{mac:"Cmd-ArrowDown",run:Ll,shift:Bl},{mac:"Ctrl-ArrowDown",run:Es,shift:El},{key:"PageUp",run:Ml,shift:Dl},{key:"PageDown",run:Es,shift:El},{key:"Home",run:Qp,shift:cm,preventDefault:!0},{key:"Mod-Home",run:Ol,shift:Rl},{key:"End",run:Jp,shift:hm,preventDefault:!0},{key:"Mod-End",run:Ll,shift:Bl},{key:"Enter",run:Il,shift:Il},{key:"Mod-a",run:mm},{key:"Backspace",run:Os,shift:Os,preventDefault:!0},{key:"Delete",run:dc,preventDefault:!0},{key:"Mod-Backspace",mac:"Alt-Backspace",run:mc,preventDefault:!0},{key:"Mod-Delete",mac:"Alt-Delete",run:vm,preventDefault:!0},{mac:"Mod-Backspace",run:Sm,preventDefault:!0},{mac:"Mod-Delete",run:Cm,preventDefault:!0}].concat(Nm.map(n=>({mac:n.key,run:n.run,shift:n.shift}))),_m=[{key:"Alt-ArrowLeft",mac:"Ctrl-ArrowLeft",run:Yp,shift:lm},{key:"Alt-ArrowRight",mac:"Ctrl-ArrowRight",run:Xp,shift:am},{key:"Alt-ArrowUp",run:Mm},{key:"Shift-Alt-ArrowUp",run:Em},{key:"Alt-ArrowDown",run:Dm},{key:"Shift-Alt-ArrowDown",run:Om},{key:"Mod-Alt-ArrowUp",run:bm},{key:"Mod-Alt-ArrowDown",run:wm},{key:"Escape",run:xm},{key:"Mod-Enter",run:Bm},{key:"Alt-l",mac:"Ctrl-l",run:gm},{key:"Mod-i",run:ym,preventDefault:!0},{key:"Mod-[",run:xc},{key:"Mod-]",run:wc},{key:"Mod-Alt-\\",run:Im},{key:"Shift-Mod-k",run:Lm},{key:"Shift-Mod-\\",run:rm},{key:"Mod-/",run:Mp},{key:"Alt-A",run:Ep},{key:"Ctrl-m",mac:"Shift-Alt-m",run:Pm}].concat(Fm),Wm={key:"Tab",run:wc,shift:xc};function lo(n,e,t,i,r,s){this.indented=n,this.column=e,this.type=t,this.info=i,this.align=r,this.prev=s}function xn(n,e,t,i){var r=n.indented;return n.context&&n.context.type=="statement"&&t!="statement"&&(r=n.context.indented),n.context=new lo(r,e,t,i,null,n.context)}function bi(n){var e=n.context.type;return(e==")"||e=="]"||e=="}")&&(n.indented=n.context.indented),n.context=n.context.prev}function Pl(n,e,t){if(e.prevToken=="variable"||e.prevToken=="type"||/\S(?:[^- ]>|[*\]])\s*$|\*$/.test(n.string.slice(0,t))||e.typeAtEndOfLine&&n.column()==n.indentation())return!0}function Fr(n){for(;;){if(!n||n.type=="top")return!0;if(n.type=="}"&&n.prev.info!="namespace")return!1;n=n.prev}}function Le(n){var e=n.statementIndentUnit,t=n.dontAlignCalls,i=n.keywords||{},r=n.types||{},s=n.builtin||{},o=n.blockKeywords||{},l=n.defKeywords||{},a=n.atoms||{},h=n.hooks||{},c=n.multiLineStrings,f=n.indentStatements!==!1,u=n.indentSwitch!==!1,d=n.namespaceSeparator,p=n.isPunctuationChar||/[\[\]{}\(\),;\:\.]/,m=n.numberStart||/[\d\.]/,g=n.number||/^(?:0x[a-f\d]+|0b[01]+|(?:\d+\.?\d*|\.\d+)(?:e[-+]?\d+)?)(u|ll?|l|f)?/i,y=n.isOperatorChar||/[+\-*&%=<>!?|\/]/,w=n.isIdentifierChar||/[\w\$_\xa1-\uffff]/,T=n.isReservedIdentifier||!1,D,M;function L(S,k){var v=S.next();if(h[v]){var A=h[v](S,k);if(A!==!1)return A}if(v=='"'||v=="'")return k.tokenize=E(v),k.tokenize(S,k);if(m.test(v)){if(S.backUp(1),S.match(g))return"number";S.next()}if(p.test(v))return D=v,null;if(v=="/"){if(S.eat("*"))return k.tokenize=F,F(S,k);if(S.eat("/"))return S.skipToEnd(),"comment"}if(y.test(v)){for(;!S.match(/^\/[\/*]/,!1)&&S.eat(y););return"operator"}if(S.eatWhile(w),d)for(;S.match(d);)S.eatWhile(w);var N=S.current();return ot(i,N)?(ot(o,N)&&(D="newstatement"),ot(l,N)&&(M=!0),"keyword"):ot(r,N)?"type":ot(s,N)||T&&T(N)?(ot(o,N)&&(D="newstatement"),"builtin"):ot(a,N)?"atom":"variable"}function E(S){return function(k,v){for(var A=!1,N,K=!1;(N=k.next())!=null;){if(N==S&&!A){K=!0;break}A=!A&&N=="\\"}return(K||!(A||c))&&(v.tokenize=null),"string"}}function F(S,k){for(var v=!1,A;A=S.next();){if(A=="/"&&v){k.tokenize=null;break}v=A=="*"}return"comment"}function $(S,k){n.typeFirstDefinitions&&S.eol()&&Fr(k.context)&&(k.typeAtEndOfLine=Pl(S,k,S.pos))}return{name:n.name,startState:function(S){return{tokenize:null,context:new lo(-S,0,"top",null,!1),indented:0,startOfLine:!0,prevToken:null}},token:function(S,k){var v=k.context;if(S.sol()&&(v.align==null&&(v.align=!1),k.indented=S.indentation(),k.startOfLine=!0),S.eatSpace())return $(S,k),null;D=M=null;var A=(k.tokenize||L)(S,k);if(A=="comment"||A=="meta")return A;if(v.align==null&&(v.align=!0),D==";"||D==":"||D==","&&S.match(/^\s*(?:\/\/.*)?$/,!1))for(;k.context.type=="statement";)bi(k);else if(D=="{")xn(k,S.column(),"}");else if(D=="[")xn(k,S.column(),"]");else if(D=="(")xn(k,S.column(),")");else if(D=="}"){for(;v.type=="statement";)v=bi(k);for(v.type=="}"&&(v=bi(k));v.type=="statement";)v=bi(k)}else D==v.type?bi(k):f&&((v.type=="}"||v.type=="top")&&D!=";"||v.type=="statement"&&D=="newstatement")&&xn(k,S.column(),"statement",S.current());if(A=="variable"&&(k.prevToken=="def"||n.typeFirstDefinitions&&Pl(S,k,S.start)&&Fr(k.context)&&S.match(/^\s*\(/,!1))&&(A="def"),h.token){var N=h.token(S,k,A);N!==void 0&&(A=N)}return A=="def"&&n.styleDefs===!1&&(A="variable"),k.startOfLine=!1,k.prevToken=M?"def":A||D,$(S,k),A},indent:function(S,k,v){if(S.tokenize!=L&&S.tokenize!=null||S.typeAtEndOfLine&&Fr(S.context))return null;var A=S.context,N=k&&k.charAt(0),K=N==A.type;if(A.type=="statement"&&N=="}"&&(A=A.prev),n.dontIndentStatements)for(;A.type=="statement"&&n.dontIndentStatements.test(A.info);)A=A.prev;if(h.indent){var z=h.indent(S,A,k,v.unit);if(typeof z=="number")return z}var G=A.prev&&A.prev.info=="switch";if(n.allmanIndentation&&/[{(]/.test(N)){for(;A.type!="top"&&A.type!="}";)A=A.prev;return A.indented}return A.type=="statement"?A.indented+(N=="{"?0:e||v.unit):A.align&&(!t||A.type!=")")?A.column+(K?0:1):A.type==")"&&!K?A.indented+(e||v.unit):A.indented+(K?0:v.unit)+(!K&&G&&!/^(?:case|default)\b/.test(k)?v.unit:0)},languageData:{indentOnInput:u?/^\s*(?:case .*?:|default:|\{\}?|\})$/:/^\s*[{}]$/,commentTokens:{line:"//",block:{open:"/*",close:"*/"}},autocomplete:Object.keys(i).concat(Object.keys(r)).concat(Object.keys(s)).concat(Object.keys(a)),...n.languageData}}}function R(n){for(var e={},t=n.split(" "),i=0;i!?|\/#:@]/,hooks:{"@":function(n){return n.eatWhile(/[\w\$_]/),"meta"},'"':function(n,e){return n.match('""')?(e.tokenize=Tc,e.tokenize(n,e)):!1},"'":function(n){return n.match(/^(\\[^'\s]+|[^\\'])'/)?"character":(n.eatWhile(/[\w\$_\xa1-\uffff]/),"atom")},"=":function(n,e){var t=e.context;return t.type=="}"&&t.align&&n.eat(">")?(e.context=new lo(t.indented,t.column,t.type,t.info,null,t.prev),"operator"):!1},"/":function(n,e){return n.eat("*")?(e.tokenize=Vi(1),e.tokenize(n,e)):!1}},languageData:{closeBrackets:{brackets:["(","[","{","'",'"','"""']}}});function zm(n){return function(e,t){for(var i=!1,r,s=!1;!e.eol();){if(!n&&!i&&e.match('"')){s=!0;break}if(n&&e.match('"""')){s=!0;break}r=e.next(),!i&&r=="$"&&e.match("{")&&e.skipTo("}"),i=!i&&r=="\\"&&!n}return(s||!n)&&(t.tokenize=null),"string"}}Le({name:"kotlin",keywords:R("package as typealias class interface this super val operator var fun for is in This throw return annotation break continue object if else while do try when !in !is as? file import where by get set abstract enum open inner override private public internal protected catch finally out final vararg reified dynamic companion constructor init sealed field property receiver param sparam lateinit data inline noinline tailrec external annotation crossinline const operator infix suspend actual expect setparam"),types:R("Boolean Byte Character CharSequence Class ClassLoader Cloneable Comparable Compiler Double Exception Float Integer Long Math Number Object Package Pair Process Runtime Runnable SecurityManager Short StackTraceElement StrictMath String StringBuffer System Thread ThreadGroup ThreadLocal Throwable Triple Void Annotation Any BooleanArray ByteArray Char CharArray DeprecationLevel DoubleArray Enum FloatArray Function Int IntArray Lazy LazyThreadSafetyMode LongArray Nothing ShortArray Unit"),indentStatements:!1,multiLineStrings:!0,number:/^(?:0x[a-f\d_]+|0b[01_]+|(?:[\d_]+(\.\d+)?|\.\d+)(?:e[-+]?[\d_]+)?)(ul?|l|f)?/i,blockKeywords:R("catch class do else finally for if where try while enum"),defKeywords:R("class val var object interface fun"),atoms:R("true false null this"),hooks:{"@":function(n){return n.eatWhile(/[\w\$_]/),"meta"},"*":function(n,e){return e.prevToken=="."?"variable":"operator"},'"':function(n,e){return e.tokenize=zm(n.match('""')),e.tokenize(n,e)},"/":function(n,e){return n.eat("*")?(e.tokenize=Vi(1),e.tokenize(n,e)):!1},indent:function(n,e,t,i){var r=t&&t.charAt(0);if((n.prevToken=="}"||n.prevToken==")")&&t=="")return n.indented;if(n.prevToken=="operator"&&t!="}"&&n.context.type!="}"||n.prevToken=="variable"&&r=="."||(n.prevToken=="}"||n.prevToken==")")&&r==".")return i*2+e.indented;if(e.align&&e.type=="}")return e.indented+(n.context.type==(t||"").charAt(0)?0:i)}},languageData:{closeBrackets:{brackets:["(","[","{","'",'"','"""']}}});const $m=Le({name:"shader",keywords:R("sampler1D sampler2D sampler3D samplerCube sampler1DShadow sampler2DShadow const attribute uniform varying break continue discard return for while do if else struct in out inout"),types:R("float int bool void vec2 vec3 vec4 ivec2 ivec3 ivec4 bvec2 bvec3 bvec4 mat2 mat3 mat4"),blockKeywords:R("for while do if else struct"),builtin:R("radians degrees sin cos tan asin acos atan pow exp log exp2 sqrt inversesqrt abs sign floor ceil fract mod min max clamp mix step smoothstep length distance dot cross normalize ftransform faceforward reflect refract matrixCompMult lessThan lessThanEqual greaterThan greaterThanEqual equal notEqual any all not texture1D texture1DProj texture1DLod texture1DProjLod texture2D texture2DProj texture2DLod texture2DProjLod texture3D texture3DProj texture3DLod texture3DProjLod textureCube textureCubeLod shadow1D shadow2D shadow1DProj shadow2DProj shadow1DLod shadow2DLod shadow1DProjLod shadow2DProjLod dFdx dFdy fwidth noise1 noise2 noise3 noise4"),atoms:R("true false gl_FragColor gl_SecondaryColor gl_Normal gl_Vertex gl_MultiTexCoord0 gl_MultiTexCoord1 gl_MultiTexCoord2 gl_MultiTexCoord3 gl_MultiTexCoord4 gl_MultiTexCoord5 gl_MultiTexCoord6 gl_MultiTexCoord7 gl_FogCoord gl_PointCoord gl_Position gl_PointSize gl_ClipVertex gl_FrontColor gl_BackColor gl_FrontSecondaryColor gl_BackSecondaryColor gl_TexCoord gl_FogFragCoord gl_FragCoord gl_FrontFacing gl_FragData gl_FragDepth gl_ModelViewMatrix gl_ProjectionMatrix gl_ModelViewProjectionMatrix gl_TextureMatrix gl_NormalMatrix gl_ModelViewMatrixInverse gl_ProjectionMatrixInverse gl_ModelViewProjectionMatrixInverse gl_TextureMatrixTranspose gl_ModelViewMatrixInverseTranspose gl_ProjectionMatrixInverseTranspose gl_ModelViewProjectionMatrixInverseTranspose gl_TextureMatrixInverseTranspose gl_NormalScale gl_DepthRange gl_ClipPlane gl_Point gl_FrontMaterial gl_BackMaterial gl_LightSource gl_LightModel gl_FrontLightModelProduct gl_BackLightModelProduct gl_TextureColor gl_EyePlaneS gl_EyePlaneT gl_EyePlaneR gl_EyePlaneQ gl_FogParameters gl_MaxLights gl_MaxClipPlanes gl_MaxTextureUnits gl_MaxTextureCoords gl_MaxVertexAttribs gl_MaxVertexUniformComponents gl_MaxVaryingFloats gl_MaxVertexTextureImageUnits gl_MaxTextureImageUnits gl_MaxFragmentUniformComponents gl_MaxCombineTextureImageUnits gl_MaxDrawBuffers"),indentSwitch:!1,hooks:{"#":Dt}});Le({name:"nesc",keywords:R(Xi+" as atomic async call command component components configuration event generic implementation includes interface module new norace nx_struct nx_union post provides signal task uses abstract extends"),types:Ji,blockKeywords:R(Qi),atoms:R("null true false"),hooks:{"#":Dt}});Le({name:"objectivec",keywords:R(Xi+" "+kc),types:Cc,builtin:R(Sc),blockKeywords:R(Qi+" @synthesize @try @catch @finally @autoreleasepool @synchronized"),defKeywords:R(cr+" @interface @implementation @protocol @class"),dontIndentStatements:/^@.*$/,typeFirstDefinitions:!0,atoms:R("YES NO NULL Nil nil true false nullptr"),isReservedIdentifier:ur,hooks:{"#":Dt,"*":fr}});Le({name:"objectivecpp",keywords:R(Xi+" "+kc+" "+vc),types:Cc,builtin:R(Sc),blockKeywords:R(Qi+" @synthesize @try @catch @finally @autoreleasepool @synchronized class try catch"),defKeywords:R(cr+" @interface @implementation @protocol @class class namespace"),dontIndentStatements:/^@.*$|^template$/,typeFirstDefinitions:!0,atoms:R("YES NO NULL Nil nil true false nullptr"),isReservedIdentifier:ur,hooks:{"#":Dt,"*":fr,u:wt,U:wt,L:wt,R:wt,0:ne,1:ne,2:ne,3:ne,4:ne,5:ne,6:ne,7:ne,8:ne,9:ne,token:function(n,e,t){if(t=="variable"&&n.peek()=="("&&(e.prevToken==";"||e.prevToken==null||e.prevToken=="}")&&Ac(n.current()))return"def"}},namespaceSeparator:"::"});Le({name:"squirrel",keywords:R("base break clone continue const default delete enum extends function in class foreach local resume return this throw typeof yield constructor instanceof static"),types:Ji,blockKeywords:R("case catch class else for foreach if switch try while"),defKeywords:R("function local class"),typeFirstDefinitions:!0,atoms:R("true false null"),hooks:{"#":Dt}});var En=null;function Mc(n){return function(e,t){for(var i=!1,r,s=!1;!e.eol();){if(!i&&e.match('"')&&(n=="single"||e.match('""'))){s=!0;break}if(!i&&e.match("``")){En=Mc(n),s=!0;break}r=e.next(),i=n=="single"&&!i&&r=="\\"}return s&&(t.tokenize=null),"string"}}Le({name:"ceylon",keywords:R("abstracts alias assembly assert assign break case catch class continue dynamic else exists extends finally for function given if import in interface is let module new nonempty object of out outer package return satisfies super switch then this throw try value void while"),types:function(n){var e=n.charAt(0);return e===e.toUpperCase()&&e!==e.toLowerCase()},blockKeywords:R("case catch class dynamic else finally for function if interface module new object switch try while"),defKeywords:R("class dynamic function interface module object package value"),builtin:R("abstract actual aliased annotation by default deprecated doc final formal late license native optional sealed see serializable shared suppressWarnings tagged throws variable"),isPunctuationChar:/[\[\]{}\(\),;\:\.`]/,isOperatorChar:/[+\-*&%=<>!?|^~:\/]/,numberStart:/[\d#$]/,number:/^(?:#[\da-fA-F_]+|\$[01_]+|[\d_]+[kMGTPmunpf]?|[\d_]+\.[\d_]+(?:[eE][-+]?\d+|[kMGTPmunpf]|)|)/i,multiLineStrings:!0,typeFirstDefinitions:!0,atoms:R("true false null larger smaller equal empty finished"),indentSwitch:!1,styleDefs:!1,hooks:{"@":function(n){return n.eatWhile(/[\w\$_]/),"meta"},'"':function(n,e){return e.tokenize=Mc(n.match('""')?"triple":"single"),e.tokenize(n,e)},"`":function(n,e){return!En||!n.match("`")?!1:(e.tokenize=En,En=null,e.tokenize(n,e))},"'":function(n){return n.match(/^(\\[^'\s]+|[^\\'])'/)?"string.special":(n.eatWhile(/[\w\$_\xa1-\uffff]/),"atom")},token:function(n,e,t){if((t=="variable"||t=="type")&&e.prevToken==".")return"variableName.special"}},languageData:{closeBrackets:{brackets:["(","[","{","'",'"','"""']}}});function qm(n){(n.interpolationStack||(n.interpolationStack=[])).push(n.tokenize)}function Dc(n){return(n.interpolationStack||(n.interpolationStack=[])).pop()}function Um(n){return n.interpolationStack?n.interpolationStack.length:0}function _r(n,e,t,i){var r=!1;if(e.eat(n))if(e.eat(n))r=!0;else return"string";function s(o,l){for(var a=!1;!o.eol();){if(!i&&!a&&o.peek()=="$")return qm(l),l.tokenize=Km,"string";var h=o.next();if(h==n&&!a&&(!r||o.match(n+n))){l.tokenize=null;break}a=!i&&!a&&h=="\\"}return"string"}return t.tokenize=s,s(e,t)}function Km(n,e){return n.eat("$"),n.eat("{")?e.tokenize=null:e.tokenize=jm,null}function jm(n,e){return n.eatWhile(/[\w_]/),e.tokenize=Dc(e),"variable"}Le({name:"dart",keywords:R("this super static final const abstract class extends external factory implements mixin get native set typedef with enum throw rethrow assert break case continue default in return new deferred async await covariant try catch finally do else for if switch while import library export part of show hide is as extension on yield late required sealed base interface when inline"),blockKeywords:R("try catch finally do else for if switch while"),builtin:R("void bool num int double dynamic var String Null Never"),atoms:R("true false null"),number:/^(?:0x[a-f\d_]+|(?:[\d_]+\.?[\d_]*|\.[\d_]+)(?:e[-+]?[\d_]+)?)/i,hooks:{"@":function(n){return n.eatWhile(/[\w\$_\.]/),"meta"},"'":function(n,e){return _r("'",n,e,!1)},'"':function(n,e){return _r('"',n,e,!1)},r:function(n,e){var t=n.peek();return t=="'"||t=='"'?_r(n.next(),n,e,!0):!1},"}":function(n,e){return Um(e)>0?(e.tokenize=Dc(e),null):!1},"/":function(n,e){return n.eat("*")?(e.tokenize=Vi(1),e.tokenize(n,e)):!1},token:function(n,e,t){if(t=="variable"){var i=RegExp("^[_$]*[A-Z][a-zA-Z0-9_$]*$","g");if(i.test(n.current()))return"type"}}}});const Gm="#e5c07b",_l="#e06c75",Ym="#56b6c2",Xm="#ffffff",On="#abb2bf",Ls="#7d8799",Jm="#61afef",Qm="#98c379",Wl="#d19a66",Zm="#c678dd",eg="#21252b",Vl="#2c313a",Hl="#282c34",Wr="#353a42",tg="#3E4451",zl="#528bff",ig=I.theme({"&":{color:On,backgroundColor:Hl},".cm-content":{caretColor:zl},".cm-cursor, .cm-dropCursor":{borderLeftColor:zl},"&.cm-focused > .cm-scroller > .cm-selectionLayer .cm-selectionBackground, .cm-selectionBackground, .cm-content ::selection":{backgroundColor:tg},".cm-panels":{backgroundColor:eg,color:On},".cm-panels.cm-panels-top":{borderBottom:"2px solid black"},".cm-panels.cm-panels-bottom":{borderTop:"2px solid black"},".cm-searchMatch":{backgroundColor:"#72a1ff59",outline:"1px solid #457dff"},".cm-searchMatch.cm-searchMatch-selected":{backgroundColor:"#6199ff2f"},".cm-activeLine":{backgroundColor:"#6699ff0b"},".cm-selectionMatch":{backgroundColor:"#aafe661a"},"&.cm-focused .cm-matchingBracket, &.cm-focused .cm-nonmatchingBracket":{backgroundColor:"#bad0f847"},".cm-gutters":{backgroundColor:Hl,color:Ls,border:"none"},".cm-activeLineGutter":{backgroundColor:Vl},".cm-foldPlaceholder":{backgroundColor:"transparent",border:"none",color:"#ddd"},".cm-tooltip":{border:"none",backgroundColor:Wr},".cm-tooltip .cm-tooltip-arrow:before":{borderTopColor:"transparent",borderBottomColor:"transparent"},".cm-tooltip .cm-tooltip-arrow:after":{borderTopColor:Wr,borderBottomColor:Wr},".cm-tooltip-autocomplete":{"& > ul > li[aria-selected]":{backgroundColor:Vl,color:On}}},{dark:!0}),ng=sr.define([{tag:x.keyword,color:Zm},{tag:[x.name,x.deleted,x.character,x.propertyName,x.macroName],color:_l},{tag:[x.function(x.variableName),x.labelName],color:Jm},{tag:[x.color,x.constant(x.name),x.standard(x.name)],color:Wl},{tag:[x.definition(x.name),x.separator],color:On},{tag:[x.typeName,x.className,x.number,x.changed,x.annotation,x.modifier,x.self,x.namespace],color:Gm},{tag:[x.operator,x.operatorKeyword,x.url,x.escape,x.regexp,x.link,x.special(x.string)],color:Ym},{tag:[x.meta,x.comment],color:Ls},{tag:x.strong,fontWeight:"bold"},{tag:x.emphasis,fontStyle:"italic"},{tag:x.strikethrough,textDecoration:"line-through"},{tag:x.link,color:Ls,textDecoration:"underline"},{tag:x.heading,fontWeight:"bold",color:_l},{tag:[x.atom,x.bool,x.special(x.variableName)],color:Wl},{tag:[x.processingInstruction,x.string,x.inserted],color:Qm},{tag:x.invalid,color:Xm}]),rg=[ig,lp(ng)];class Ec{constructor(e,t,i,r){this.state=e,this.pos=t,this.explicit=i,this.view=r,this.abortListeners=[],this.abortOnDocChange=!1}tokenBefore(e){let t=Oe(this.state).resolveInner(this.pos,-1);for(;t&&e.indexOf(t.name)<0;)t=t.parent;return t?{from:t.from,to:this.pos,text:this.state.sliceDoc(t.from,this.pos),type:t.type}:null}matchBefore(e){let t=this.state.doc.lineAt(this.pos),i=Math.max(t.from,this.pos-250),r=t.text.slice(i-t.from,this.pos-t.from),s=r.search(Oc(e,!1));return s<0?null:{from:i+s,to:this.pos,text:r.slice(s)}}get aborted(){return this.abortListeners==null}addEventListener(e,t,i){e=="abort"&&this.abortListeners&&(this.abortListeners.push(t),i&&i.onDocChange&&(this.abortOnDocChange=!0))}}function $l(n){let e=Object.keys(n).join(""),t=/\w/.test(e);return t&&(e=e.replace(/\w/g,"")),`[${t?"\\w":""}${e.replace(/[^\w\s]/g,"\\$&")}]`}function sg(n){let e=Object.create(null),t=Object.create(null);for(let{label:r}of n){e[r[0]]=!0;for(let s=1;stypeof r=="string"?{label:r}:r),[t,i]=e.every(r=>/^\w+$/.test(r.label))?[/\w*$/,/\w+$/]:sg(e);return r=>{let s=r.matchBefore(i);return s||r.explicit?{from:s?s.from:r.pos,options:e,validFor:t}:null}}class ql{constructor(e,t,i,r){this.completion=e,this.source=t,this.match=i,this.score=r}}function Ht(n){return n.selection.main.from}function Oc(n,e){var t;let{source:i}=n,r=e&&i[0]!="^",s=i[i.length-1]!="$";return!r&&!s?n:new RegExp(`${r?"^":""}(?:${i})${s?"$":""}`,(t=n.flags)!==null&&t!==void 0?t:n.ignoreCase?"i":"")}const ao=ft.define();function lg(n,e,t,i){let{main:r}=n.selection,s=t-r.from,o=i-r.from;return{...n.changeByRange(l=>{if(l!=r&&t!=i&&n.sliceDoc(l.from+s,l.from+o)!=n.sliceDoc(t,i))return{range:l};let a=n.toText(e);return{changes:{from:l.from+s,to:i==r.from?l.to:l.from+o,insert:a},range:b.cursor(l.from+s+a.length)}}),scrollIntoView:!0,userEvent:"input.complete"}}const Ul=new WeakMap;function ag(n){if(!Array.isArray(n))return n;let e=Ul.get(n);return e||Ul.set(n,e=og(n)),e}const Kn=j.define(),Hi=j.define();class hg{constructor(e){this.pattern=e,this.chars=[],this.folded=[],this.any=[],this.precise=[],this.byWord=[],this.score=0,this.matched=[];for(let t=0;t=48&&M<=57||M>=97&&M<=122?2:M>=65&&M<=90?1:0:(L=ma(M))!=L.toLowerCase()?1:L!=L.toUpperCase()?2:0;(!w||E==1&&g||D==0&&E!=0)&&(t[f]==M||i[f]==M&&(u=!0)?o[f++]=w:o.length&&(y=!1)),D=E,w+=mt(M)}return f==a&&o[0]==0&&y?this.result(-100+(u?-200:0),o,e):d==a&&p==0?this.ret(-200-e.length+(m==e.length?0:-100),[0,m]):l>-1?this.ret(-700-e.length,[l,l+this.pattern.length]):d==a?this.ret(-900-e.length,[p,m]):f==a?this.result(-100+(u?-200:0)+-700+(y?0:-1100),o,e):t.length==2?null:this.result((r[0]?-700:0)+-200+-1100,r,e)}result(e,t,i){let r=[],s=0;for(let o of t){let l=o+(this.astral?mt(Qe(i,o)):1);s&&r[s-1]==o?r[s-1]=l:(r[s++]=o,r[s++]=l)}return this.ret(e-i.length,r)}}class cg{constructor(e){this.pattern=e,this.matched=[],this.score=0,this.folded=e.toLowerCase()}match(e){if(e.length!1,activateOnTypingDelay:100,selectOnOpen:!0,override:null,closeOnBlur:!0,maxRenderedOptions:100,defaultKeymap:!0,tooltipClass:()=>"",optionClass:()=>"",aboveCursor:!1,icons:!0,addToOptions:[],positionInfo:fg,filterStrict:!1,compareCompletions:(e,t)=>(e.sortText||e.label).localeCompare(t.sortText||t.label),interactionDelay:75,updateSyncTime:100},{defaultKeymap:(e,t)=>e&&t,closeOnBlur:(e,t)=>e&&t,icons:(e,t)=>e&&t,tooltipClass:(e,t)=>i=>Kl(e(i),t(i)),optionClass:(e,t)=>i=>Kl(e(i),t(i)),addToOptions:(e,t)=>e.concat(t),filterStrict:(e,t)=>e||t})}});function Kl(n,e){return n?e?n+" "+e:n:e}function fg(n,e,t,i,r,s){let o=n.textDirection==Z.RTL,l=o,a=!1,h="top",c,f,u=e.left-r.left,d=r.right-e.right,p=i.right-i.left,m=i.bottom-i.top;if(l&&u=m||w>e.top?c=t.bottom-e.top:(h="bottom",c=e.bottom-t.top)}let g=(e.bottom-e.top)/s.offsetHeight,y=(e.right-e.left)/s.offsetWidth;return{style:`${h}: ${c/g}px; max-width: ${f/y}px`,class:"cm-completionInfo-"+(a?o?"left-narrow":"right-narrow":l?"left":"right")}}const ho=j.define();function ug(n){let e=n.addToOptions.slice();return n.icons&&e.push({render(t){let i=document.createElement("div");return i.classList.add("cm-completionIcon"),t.type&&i.classList.add(...t.type.split(/\s+/g).map(r=>"cm-completionIcon-"+r)),i.setAttribute("aria-hidden","true"),i},position:20}),e.push({render(t,i,r,s){let o=document.createElement("span");o.className="cm-completionLabel";let l=t.displayLabel||t.label,a=0;for(let h=0;ha&&o.appendChild(document.createTextNode(l.slice(a,c)));let u=o.appendChild(document.createElement("span"));u.appendChild(document.createTextNode(l.slice(c,f))),u.className="cm-completionMatchedText",a=f}return at.position-i.position).map(t=>t.render)}function Vr(n,e,t){if(n<=t)return{from:0,to:n};if(e<0&&(e=0),e<=n>>1){let r=Math.floor(e/t);return{from:r*t,to:(r+1)*t}}let i=Math.floor((n-e)/t);return{from:n-(i+1)*t,to:n-i*t}}class dg{constructor(e,t,i){this.view=e,this.stateField=t,this.applyCompletion=i,this.info=null,this.infoDestroy=null,this.placeInfoReq={read:()=>this.measureInfo(),write:a=>this.placeInfo(a),key:this},this.space=null,this.currentClass="";let r=e.state.field(t),{options:s,selected:o}=r.open,l=e.state.facet(le);this.optionContent=ug(l),this.optionClass=l.optionClass,this.tooltipClass=l.tooltipClass,this.range=Vr(s.length,o,l.maxRenderedOptions),this.dom=document.createElement("div"),this.dom.className="cm-tooltip-autocomplete",this.updateTooltipClass(e.state),this.dom.addEventListener("mousedown",a=>{let{options:h}=e.state.field(t).open;for(let c=a.target,f;c&&c!=this.dom;c=c.parentNode)if(c.nodeName=="LI"&&(f=/-(\d+)$/.exec(c.id))&&+f[1]this.list.lastChild.getBoundingClientRect().bottom?this.range.to:null;c!=null&&(e.dispatch({effects:ho.of(c)}),a.preventDefault())}}),this.dom.addEventListener("focusout",a=>{let h=e.state.field(this.stateField,!1);h&&h.tooltip&&e.state.facet(le).closeOnBlur&&a.relatedTarget!=e.contentDOM&&e.dispatch({effects:Hi.of(null)})}),this.showOptions(s,r.id)}mount(){this.updateSel()}showOptions(e,t){this.list&&this.list.remove(),this.list=this.dom.appendChild(this.createListBox(e,t,this.range)),this.list.addEventListener("scroll",()=>{this.info&&this.view.requestMeasure(this.placeInfoReq)})}update(e){var t;let i=e.state.field(this.stateField),r=e.startState.field(this.stateField);if(this.updateTooltipClass(e.state),i!=r){let{options:s,selected:o,disabled:l}=i.open;(!r.open||r.open.options!=s)&&(this.range=Vr(s.length,o,e.state.facet(le).maxRenderedOptions),this.showOptions(s,i.id)),this.updateSel(),l!=((t=r.open)===null||t===void 0?void 0:t.disabled)&&this.dom.classList.toggle("cm-tooltip-autocomplete-disabled",!!l)}}updateTooltipClass(e){let t=this.tooltipClass(e);if(t!=this.currentClass){for(let i of this.currentClass.split(" "))i&&this.dom.classList.remove(i);for(let i of t.split(" "))i&&this.dom.classList.add(i);this.currentClass=t}}positioned(e){this.space=e,this.info&&this.view.requestMeasure(this.placeInfoReq)}updateSel(){let e=this.view.state.field(this.stateField),t=e.open;(t.selected>-1&&t.selected=this.range.to)&&(this.range=Vr(t.options.length,t.selected,this.view.state.facet(le).maxRenderedOptions),this.showOptions(t.options,e.id));let i=this.updateSelectedOption(t.selected);if(i){this.destroyInfo();let{completion:r}=t.options[t.selected],{info:s}=r;if(!s)return;let o=typeof s=="string"?document.createTextNode(s):s(r);if(!o)return;"then"in o?o.then(l=>{l&&this.view.state.field(this.stateField,!1)==e&&this.addInfoPane(l,r)}).catch(l=>De(this.view.state,l,"completion info")):(this.addInfoPane(o,r),i.setAttribute("aria-describedby",this.info.id))}}addInfoPane(e,t){this.destroyInfo();let i=this.info=document.createElement("div");if(i.className="cm-tooltip cm-completionInfo",i.id="cm-completionInfo-"+Math.floor(Math.random()*65535).toString(16),e.nodeType!=null)i.appendChild(e),this.infoDestroy=null;else{let{dom:r,destroy:s}=e;i.appendChild(r),this.infoDestroy=s||null}this.dom.appendChild(i),this.view.requestMeasure(this.placeInfoReq)}updateSelectedOption(e){let t=null;for(let i=this.list.firstChild,r=this.range.from;i;i=i.nextSibling,r++)i.nodeName!="LI"||!i.id?r--:r==e?i.hasAttribute("aria-selected")||(i.setAttribute("aria-selected","true"),t=i):i.hasAttribute("aria-selected")&&(i.removeAttribute("aria-selected"),i.removeAttribute("aria-describedby"));return t&&mg(this.list,t),t}measureInfo(){let e=this.dom.querySelector("[aria-selected]");if(!e||!this.info)return null;let t=this.dom.getBoundingClientRect(),i=this.info.getBoundingClientRect(),r=e.getBoundingClientRect(),s=this.space;if(!s){let o=this.dom.ownerDocument.documentElement;s={left:0,top:0,right:o.clientWidth,bottom:o.clientHeight}}return r.top>Math.min(s.bottom,t.bottom)-10||r.bottom{o.target==r&&o.preventDefault()});let s=null;for(let o=i.from;oi.from||i.from==0))if(s=u,typeof h!="string"&&h.header)r.appendChild(h.header(h));else{let d=r.appendChild(document.createElement("completion-section"));d.textContent=u}}const c=r.appendChild(document.createElement("li"));c.id=t+"-"+o,c.setAttribute("role","option");let f=this.optionClass(l);f&&(c.className=f);for(let u of this.optionContent){let d=u(l,this.view.state,this.view,a);d&&c.appendChild(d)}}return i.from&&r.classList.add("cm-completionListIncompleteTop"),i.tonew dg(t,n,e)}function mg(n,e){let t=n.getBoundingClientRect(),i=e.getBoundingClientRect(),r=t.height/n.offsetHeight;i.topt.bottom&&(n.scrollTop+=(i.bottom-t.bottom)/r)}function jl(n){return(n.boost||0)*100+(n.apply?10:0)+(n.info?5:0)+(n.type?1:0)}function gg(n,e){let t=[],i=null,r=null,s=c=>{t.push(c);let{section:f}=c.completion;if(f){i||(i=[]);let u=typeof f=="string"?f:f.name;i.some(d=>d.name==u)||i.push(typeof f=="string"?{name:u}:f)}},o=e.facet(le);for(let c of n)if(c.hasResult()){let f=c.result.getMatch;if(c.result.filter===!1)for(let u of c.result.options)s(new ql(u,c.source,f?f(u):[],1e9-t.length));else{let u=e.sliceDoc(c.from,c.to),d,p=o.filterStrict?new cg(u):new hg(u);for(let m of c.result.options)if(d=p.match(m.label)){let g=m.displayLabel?f?f(m,d.matched):[]:d.matched,y=d.score+(m.boost||0);if(s(new ql(m,c.source,g,y)),typeof m.section=="object"&&m.section.rank==="dynamic"){let{name:w}=m.section;r||(r=Object.create(null)),r[w]=Math.max(y,r[w]||-1e9)}}}}if(i){let c=Object.create(null),f=0,u=(d,p)=>(d.rank==="dynamic"&&p.rank==="dynamic"?r[p.name]-r[d.name]:0)||(typeof d.rank=="number"?d.rank:1e9)-(typeof p.rank=="number"?p.rank:1e9)||(d.nameu.score-f.score||h(f.completion,u.completion))){let f=c.completion;!a||a.label!=f.label||a.detail!=f.detail||a.type!=null&&f.type!=null&&a.type!=f.type||a.apply!=f.apply||a.boost!=f.boost?l.push(c):jl(c.completion)>jl(a)&&(l[l.length-1]=c),a=c.completion}return l}class Xt{constructor(e,t,i,r,s,o){this.options=e,this.attrs=t,this.tooltip=i,this.timestamp=r,this.selected=s,this.disabled=o}setSelected(e,t){return e==this.selected||e>=this.options.length?this:new Xt(this.options,Gl(t,e),this.tooltip,this.timestamp,e,this.disabled)}static build(e,t,i,r,s,o){if(r&&!o&&e.some(h=>h.isPending))return r.setDisabled();let l=gg(e,t);if(!l.length)return r&&e.some(h=>h.isPending)?r.setDisabled():null;let a=t.facet(le).selectOnOpen?0:-1;if(r&&r.selected!=a&&r.selected!=-1){let h=r.options[r.selected].completion;for(let c=0;cc.hasResult()?Math.min(h,c.from):h,1e8),create:kg,above:s.aboveCursor},r?r.timestamp:Date.now(),a,!1)}map(e){return new Xt(this.options,this.attrs,{...this.tooltip,pos:e.mapPos(this.tooltip.pos)},this.timestamp,this.selected,this.disabled)}setDisabled(){return new Xt(this.options,this.attrs,this.tooltip,this.timestamp,this.selected,!0)}}class jn{constructor(e,t,i){this.active=e,this.id=t,this.open=i}static start(){return new jn(xg,"cm-ac-"+Math.floor(Math.random()*2e6).toString(36),null)}update(e){let{state:t}=e,i=t.facet(le),s=(i.override||t.languageDataAt("autocomplete",Ht(t)).map(ag)).map(a=>(this.active.find(c=>c.source==a)||new Ne(a,this.active.some(c=>c.state!=0)?1:0)).update(e,i));s.length==this.active.length&&s.every((a,h)=>a==this.active[h])&&(s=this.active);let o=this.open,l=e.effects.some(a=>a.is(co));o&&e.docChanged&&(o=o.map(e.changes)),e.selection||s.some(a=>a.hasResult()&&e.changes.touchesRange(a.from,a.to))||!yg(s,this.active)||l?o=Xt.build(s,t,this.id,o,i,l):o&&o.disabled&&!s.some(a=>a.isPending)&&(o=null),!o&&s.every(a=>!a.isPending)&&s.some(a=>a.hasResult())&&(s=s.map(a=>a.hasResult()?new Ne(a.source,0):a));for(let a of e.effects)a.is(ho)&&(o=o&&o.setSelected(a.value,this.id));return s==this.active&&o==this.open?this:new jn(s,this.id,o)}get tooltip(){return this.open?this.open.tooltip:null}get attrs(){return this.open?this.open.attrs:this.active.length?bg:wg}}function yg(n,e){if(n==e)return!0;for(let t=0,i=0;;){for(;t-1&&(t["aria-activedescendant"]=n+"-"+e),t}const xg=[];function Lc(n,e){if(n.isUserEvent("input.complete")){let i=n.annotation(ao);if(i&&e.activateOnCompletion(i))return 12}let t=n.isUserEvent("input.type");return t&&e.activateOnTyping?5:t?1:n.isUserEvent("delete.backward")?2:n.selection?8:n.docChanged?16:0}class Ne{constructor(e,t,i=!1){this.source=e,this.state=t,this.explicit=i}hasResult(){return!1}get isPending(){return this.state==1}update(e,t){let i=Lc(e,t),r=this;(i&8||i&16&&this.touches(e))&&(r=new Ne(r.source,0)),i&4&&r.state==0&&(r=new Ne(this.source,1)),r=r.updateFor(e,i);for(let s of e.effects)if(s.is(Kn))r=new Ne(r.source,1,s.value);else if(s.is(Hi))r=new Ne(r.source,0);else if(s.is(co))for(let o of s.value)o.source==r.source&&(r=o);return r}updateFor(e,t){return this.map(e.changes)}map(e){return this}touches(e){return e.changes.touchesRange(Ht(e.state))}}class ti extends Ne{constructor(e,t,i,r,s,o){super(e,3,t),this.limit=i,this.result=r,this.from=s,this.to=o}hasResult(){return!0}updateFor(e,t){var i;if(!(t&3))return this.map(e.changes);let r=this.result;r.map&&!e.changes.empty&&(r=r.map(r,e.changes));let s=e.changes.mapPos(this.from),o=e.changes.mapPos(this.to,1),l=Ht(e.state);if(l>o||!r||t&2&&(Ht(e.startState)==this.from||lt.map(e))}}),be=We.define({create(){return jn.start()},update(n,e){return n.update(e)},provide:n=>[xh.from(n,e=>e.tooltip),I.contentAttributes.from(n,e=>e.attrs)]});function fo(n,e){const t=e.completion.apply||e.completion.label;let i=n.state.field(be).active.find(r=>r.source==e.source);return i instanceof ti?(typeof t=="string"?n.dispatch({...lg(n.state,t,i.from,i.to),annotations:ao.of(e.completion)}):t(n,e.completion,i.from,i.to),!0):!1}const kg=pg(be,fo);function vn(n,e="option"){return t=>{let i=t.state.field(be,!1);if(!i||!i.open||i.open.disabled||Date.now()-i.open.timestamp-1?i.open.selected+r*(n?1:-1):n?0:o-1;return l<0?l=e=="page"?0:o-1:l>=o&&(l=e=="page"?o-1:0),t.dispatch({effects:ho.of(l)}),!0}}const Rc=n=>{let e=n.state.field(be,!1);return n.state.readOnly||!e||!e.open||e.open.selected<0||e.open.disabled||Date.now()-e.open.timestampn.state.field(be,!1)?(n.dispatch({effects:Kn.of(!0)}),!0):!1,Sg=n=>{let e=n.state.field(be,!1);return!e||!e.active.some(t=>t.state!=0)?!1:(n.dispatch({effects:Hi.of(null)}),!0)};class Cg{constructor(e,t){this.active=e,this.context=t,this.time=Date.now(),this.updates=[],this.done=void 0}}const Ag=50,Tg=1e3,Mg=_e.fromClass(class{constructor(n){this.view=n,this.debounceUpdate=-1,this.running=[],this.debounceAccept=-1,this.pendingStart=!1,this.composing=0;for(let e of n.state.field(be).active)e.isPending&&this.startQuery(e)}update(n){let e=n.state.field(be),t=n.state.facet(le);if(!n.selectionSet&&!n.docChanged&&n.startState.field(be)==e)return;let i=n.transactions.some(s=>{let o=Lc(s,t);return o&8||(s.selection||s.docChanged)&&!(o&3)});for(let s=0;sAg&&Date.now()-o.time>Tg){for(let l of o.context.abortListeners)try{l()}catch(a){De(this.view.state,a)}o.context.abortListeners=null,this.running.splice(s--,1)}else o.updates.push(...n.transactions)}this.debounceUpdate>-1&&clearTimeout(this.debounceUpdate),n.transactions.some(s=>s.effects.some(o=>o.is(Kn)))&&(this.pendingStart=!0);let r=this.pendingStart?50:t.activateOnTypingDelay;if(this.debounceUpdate=e.active.some(s=>s.isPending&&!this.running.some(o=>o.active.source==s.source))?setTimeout(()=>this.startUpdate(),r):-1,this.composing!=0)for(let s of n.transactions)s.isUserEvent("input.type")?this.composing=2:this.composing==2&&s.selection&&(this.composing=3)}startUpdate(){this.debounceUpdate=-1,this.pendingStart=!1;let{state:n}=this.view,e=n.field(be);for(let t of e.active)t.isPending&&!this.running.some(i=>i.active.source==t.source)&&this.startQuery(t);this.running.length&&e.open&&e.open.disabled&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(le).updateSyncTime))}startQuery(n){let{state:e}=this.view,t=Ht(e),i=new Ec(e,t,n.explicit,this.view),r=new Cg(n,i);this.running.push(r),Promise.resolve(n.source(i)).then(s=>{r.context.aborted||(r.done=s||null,this.scheduleAccept())},s=>{this.view.dispatch({effects:Hi.of(null)}),De(this.view.state,s)})}scheduleAccept(){this.running.every(n=>n.done!==void 0)?this.accept():this.debounceAccept<0&&(this.debounceAccept=setTimeout(()=>this.accept(),this.view.state.facet(le).updateSyncTime))}accept(){var n;this.debounceAccept>-1&&clearTimeout(this.debounceAccept),this.debounceAccept=-1;let e=[],t=this.view.state.facet(le),i=this.view.state.field(be);for(let r=0;rl.source==s.active.source);if(o&&o.isPending)if(s.done==null){let l=new Ne(s.active.source,0);for(let a of s.updates)l=l.update(a,t);l.isPending||e.push(l)}else this.startQuery(o)}(e.length||i.open&&i.open.disabled)&&this.view.dispatch({effects:co.of(e)})}},{eventHandlers:{blur(n){let e=this.view.state.field(be,!1);if(e&&e.tooltip&&this.view.state.facet(le).closeOnBlur){let t=e.open&&vh(this.view,e.open.tooltip);(!t||!t.dom.contains(n.relatedTarget))&&setTimeout(()=>this.view.dispatch({effects:Hi.of(null)}),10)}},compositionstart(){this.composing=1},compositionend(){this.composing==3&&setTimeout(()=>this.view.dispatch({effects:Kn.of(!1)}),20),this.composing=0}}}),Dg=typeof navigator=="object"&&/Win/.test(navigator.platform),Eg=at.highest(I.domEventHandlers({keydown(n,e){let t=e.state.field(be,!1);if(!t||!t.open||t.open.disabled||t.open.selected<0||n.key.length>1||n.ctrlKey&&!(Dg&&n.altKey)||n.metaKey)return!1;let i=t.open.options[t.open.selected],r=t.active.find(o=>o.source==i.source),s=i.completion.commitCharacters||r.result.commitCharacters;return s&&s.indexOf(n.key)>-1&&fo(e,i),!1}})),Bc=I.baseTheme({".cm-tooltip.cm-tooltip-autocomplete":{"& > ul":{fontFamily:"monospace",whiteSpace:"nowrap",overflow:"hidden auto",maxWidth_fallback:"700px",maxWidth:"min(700px, 95vw)",minWidth:"250px",maxHeight:"10em",height:"100%",listStyle:"none",margin:0,padding:0,"& > li, & > completion-section":{padding:"1px 3px",lineHeight:1.2},"& > li":{overflowX:"hidden",textOverflow:"ellipsis",cursor:"pointer"},"& > completion-section":{display:"list-item",borderBottom:"1px solid silver",paddingLeft:"0.5em",opacity:.7}}},"&light .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#17c",color:"white"},"&light .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#777"},"&dark .cm-tooltip-autocomplete ul li[aria-selected]":{background:"#347",color:"white"},"&dark .cm-tooltip-autocomplete-disabled ul li[aria-selected]":{background:"#444"},".cm-completionListIncompleteTop:before, .cm-completionListIncompleteBottom:after":{content:'"···"',opacity:.5,display:"block",textAlign:"center"},".cm-tooltip.cm-completionInfo":{position:"absolute",padding:"3px 9px",width:"max-content",maxWidth:"400px",boxSizing:"border-box",whiteSpace:"pre-line"},".cm-completionInfo.cm-completionInfo-left":{right:"100%"},".cm-completionInfo.cm-completionInfo-right":{left:"100%"},".cm-completionInfo.cm-completionInfo-left-narrow":{right:"30px"},".cm-completionInfo.cm-completionInfo-right-narrow":{left:"30px"},"&light .cm-snippetField":{backgroundColor:"#00000022"},"&dark .cm-snippetField":{backgroundColor:"#ffffff22"},".cm-snippetFieldPosition":{verticalAlign:"text-top",width:0,height:"1.15em",display:"inline-block",margin:"0 -0.7px -.7em",borderLeft:"1.4px dotted #888"},".cm-completionMatchedText":{textDecoration:"underline"},".cm-completionDetail":{marginLeft:"0.5em",fontStyle:"italic"},".cm-completionIcon":{fontSize:"90%",width:".8em",display:"inline-block",textAlign:"center",paddingRight:".6em",opacity:"0.6",boxSizing:"content-box"},".cm-completionIcon-function, .cm-completionIcon-method":{"&:after":{content:"'ƒ'"}},".cm-completionIcon-class":{"&:after":{content:"'○'"}},".cm-completionIcon-interface":{"&:after":{content:"'◌'"}},".cm-completionIcon-variable":{"&:after":{content:"'𝑥'"}},".cm-completionIcon-constant":{"&:after":{content:"'𝐶'"}},".cm-completionIcon-type":{"&:after":{content:"'𝑡'"}},".cm-completionIcon-enum":{"&:after":{content:"'∪'"}},".cm-completionIcon-property":{"&:after":{content:"'□'"}},".cm-completionIcon-keyword":{"&:after":{content:"'🔑︎'"}},".cm-completionIcon-namespace":{"&:after":{content:"'▢'"}},".cm-completionIcon-text":{"&:after":{content:"'abc'",fontSize:"50%",verticalAlign:"middle"}}});class Og{constructor(e,t,i,r){this.field=e,this.line=t,this.from=i,this.to=r}}class uo{constructor(e,t,i){this.field=e,this.from=t,this.to=i}map(e){let t=e.mapPos(this.from,-1,de.TrackDel),i=e.mapPos(this.to,1,de.TrackDel);return t==null||i==null?null:new uo(this.field,t,i)}}class po{constructor(e,t){this.lines=e,this.fieldPositions=t}instantiate(e,t){let i=[],r=[t],s=e.doc.lineAt(t),o=/^\s*/.exec(s.text)[0];for(let a of this.lines){if(i.length){let h=o,c=/^\t*/.exec(a)[0].length;for(let f=0;fnew uo(a.field,r[a.line]+a.from,r[a.line]+a.to));return{text:i,ranges:l}}static parse(e){let t=[],i=[],r=[],s;for(let o of e.split(/\r\n?|\n/)){for(;s=/[#$]\{(?:(\d+)(?::([^{}]*))?|((?:\\[{}]|[^{}])*))\}/.exec(o);){let l=s[1]?+s[1]:null,a=s[2]||s[3]||"",h=-1,c=a.replace(/\\[{}]/g,f=>f[1]);for(let f=0;f=h&&u.field++}for(let f of r)if(f.line==i.length&&f.from>s.index){let u=s[2]?3+(s[1]||"").length:2;f.from-=u,f.to-=u}r.push(new Og(h,i.length,s.index,s.index+c.length)),o=o.slice(0,s.index)+a+o.slice(s.index+s[0].length)}o=o.replace(/\\([{}])/g,(l,a,h)=>{for(let c of r)c.line==i.length&&c.from>h&&(c.from--,c.to--);return a}),i.push(o)}return new po(i,r)}}let Lg=U.widget({widget:new class extends Ui{toDOM(){let n=document.createElement("span");return n.className="cm-snippetFieldPosition",n}ignoreEvent(){return!1}}}),Rg=U.mark({class:"cm-snippetField"});class fi{constructor(e,t){this.ranges=e,this.active=t,this.deco=U.set(e.map(i=>(i.from==i.to?Lg:Rg).range(i.from,i.to)),!0)}map(e){let t=[];for(let i of this.ranges){let r=i.map(e);if(!r)return null;t.push(r)}return new fi(t,this.active)}selectionInsideField(e){return e.ranges.every(t=>this.ranges.some(i=>i.field==this.active&&i.from<=t.from&&i.to>=t.to))}}const Zi=j.define({map(n,e){return n&&n.map(e)}}),Bg=j.define(),zi=We.define({create(){return null},update(n,e){for(let t of e.effects){if(t.is(Zi))return t.value;if(t.is(Bg)&&n)return new fi(n.ranges,t.value)}return n&&e.docChanged&&(n=n.map(e.changes)),n&&e.selection&&!n.selectionInsideField(e.selection)&&(n=null),n},provide:n=>I.decorations.from(n,e=>e?e.deco:U.none)});function mo(n,e){return b.create(n.filter(t=>t.field==e).map(t=>b.range(t.from,t.to)))}function Ig(n){let e=po.parse(n);return(t,i,r,s)=>{let{text:o,ranges:l}=e.instantiate(t.state,r),{main:a}=t.state.selection,h={changes:{from:r,to:s==a.from?a.to:s,insert:H.of(o)},scrollIntoView:!0,annotations:i?[ao.of(i),re.userEvent.of("input.complete")]:void 0};if(l.length&&(h.selection=mo(l,0)),l.some(c=>c.field>0)){let c=new fi(l,0),f=h.effects=[Zi.of(c)];t.state.field(zi,!1)===void 0&&f.push(j.appendConfig.of([zi,Wg,Hg,Bc]))}t.dispatch(t.state.update(h))}}function Ic(n){return({state:e,dispatch:t})=>{let i=e.field(zi,!1);if(!i||n<0&&i.active==0)return!1;let r=i.active+n,s=n>0&&!i.ranges.some(o=>o.field==r+n);return t(e.update({selection:mo(i.ranges,r),effects:Zi.of(s?null:new fi(i.ranges,r)),scrollIntoView:!0})),!0}}const Pg=({state:n,dispatch:e})=>n.field(zi,!1)?(e(n.update({effects:Zi.of(null)})),!0):!1,Ng=Ic(1),Fg=Ic(-1),_g=[{key:"Tab",run:Ng,shift:Fg},{key:"Escape",run:Pg}],Yl=B.define({combine(n){return n.length?n[0]:_g}}),Wg=at.highest(Wt.compute([Yl],n=>n.facet(Yl)));function Vg(n,e){return{...e,apply:Ig(n)}}const Hg=I.domEventHandlers({mousedown(n,e){let t=e.state.field(zi,!1),i;if(!t||(i=e.posAtCoords({x:n.clientX,y:n.clientY}))==null)return!1;let r=t.ranges.find(s=>s.from<=i&&s.to>=i);return!r||r.field==t.active?!1:(e.dispatch({selection:mo(t.ranges,r.field),effects:Zi.of(t.ranges.some(s=>s.field>r.field)?new fi(t.ranges,r.field):null),scrollIntoView:!0}),!0)}}),Gn={brackets:["(","[","{","'",'"'],before:")]}:;>",stringPrefixes:[]},Ft=j.define({map(n,e){let t=e.mapPos(n,-1,de.TrackAfter);return t??void 0}}),go=new class extends xt{};go.startSide=1;go.endSide=-1;const Pc=We.define({create(){return W.empty},update(n,e){if(n=n.map(e.changes),e.selection){let t=e.state.doc.lineAt(e.selection.main.head);n=n.update({filter:i=>i>=t.from&&i<=t.to})}for(let t of e.effects)t.is(Ft)&&(n=n.update({add:[go.range(t.value,t.value+1)]}));return n}});function zg(){return[Kg,Pc]}const Hr="()[]{}<>«»»«[]{}";function $g(n){for(let e=0;e{if((Ug?n.composing:n.compositionStarted)||n.state.readOnly)return!1;let r=n.state.selection.main;if(i.length>2||i.length==2&&mt(Qe(i,0))==1||e!=r.from||t!=r.to)return!1;let s=jg(n.state,i);return s?(n.dispatch(s),!0):!1});function jg(n,e){let t=qg(n,n.selection.main.head),i=t.brackets||Gn.brackets;for(let r of i){let s=$g(Qe(r,0));if(e==r)return s==r?Xg(n,r,i.indexOf(r+r+r)>-1,t):Gg(n,r,s,t.before||Gn.before);if(e==s&&Nc(n,n.selection.main.from))return Yg(n,r,s)}return null}function Nc(n,e){let t=!1;return n.field(Pc).between(0,n.doc.length,i=>{i==e&&(t=!0)}),t}function yo(n,e){let t=n.sliceString(e,e+2);return t.slice(0,mt(Qe(t,0)))}function Gg(n,e,t,i){let r=null,s=n.changeByRange(o=>{if(!o.empty)return{changes:[{insert:e,from:o.from},{insert:t,from:o.to}],effects:Ft.of(o.to+e.length),range:b.range(o.anchor+e.length,o.head+e.length)};let l=yo(n.doc,o.head);return!l||/\s/.test(l)||i.indexOf(l)>-1?{changes:{insert:e+t,from:o.head},effects:Ft.of(o.head+e.length),range:b.cursor(o.head+e.length)}:{range:r=o}});return r?null:n.update(s,{scrollIntoView:!0,userEvent:"input.type"})}function Yg(n,e,t){let i=null,r=n.changeByRange(s=>s.empty&&yo(n.doc,s.head)==t?{changes:{from:s.head,to:s.head+t.length,insert:t},range:b.cursor(s.head+t.length)}:i={range:s});return i?null:n.update(r,{scrollIntoView:!0,userEvent:"input.type"})}function Xg(n,e,t,i){let r=i.stringPrefixes||Gn.stringPrefixes,s=null,o=n.changeByRange(l=>{if(!l.empty)return{changes:[{insert:e,from:l.from},{insert:e,from:l.to}],effects:Ft.of(l.to+e.length),range:b.range(l.anchor+e.length,l.head+e.length)};let a=l.head,h=yo(n.doc,a),c;if(h==e){if(Xl(n,a))return{changes:{insert:e+e,from:a},effects:Ft.of(a+e.length),range:b.cursor(a+e.length)};if(Nc(n,a)){let u=t&&n.sliceDoc(a,a+e.length*3)==e+e+e?e+e+e:e;return{changes:{from:a,to:a+u.length,insert:u},range:b.cursor(a+u.length)}}}else{if(t&&n.sliceDoc(a-2*e.length,a)==e+e&&(c=Jl(n,a-2*e.length,r))>-1&&Xl(n,c))return{changes:{insert:e+e+e+e,from:a},effects:Ft.of(a+e.length),range:b.cursor(a+e.length)};if(n.charCategorizer(a)(h)!=Be.Word&&Jl(n,a,r)>-1&&!Jg(n,a,e,r))return{changes:{insert:e+e,from:a},effects:Ft.of(a+e.length),range:b.cursor(a+e.length)}}return{range:s=l}});return s?null:n.update(o,{scrollIntoView:!0,userEvent:"input.type"})}function Xl(n,e){let t=Oe(n).resolveInner(e+1);return t.parent&&t.from==e}function Jg(n,e,t,i){let r=Oe(n).resolveInner(e,-1),s=i.reduce((o,l)=>Math.max(o,l.length),0);for(let o=0;o<5;o++){let l=n.sliceDoc(r.from,Math.min(r.to,r.from+t.length+s)),a=l.indexOf(t);if(!a||a>-1&&i.indexOf(l.slice(0,a))>-1){let c=r.firstChild;for(;c&&c.from==r.from&&c.to-c.from>t.length+a;){if(n.sliceDoc(c.to-t.length,c.to)==t)return!1;c=c.firstChild}return!0}let h=r.to==e&&r.parent;if(!h)break;r=h}return!1}function Jl(n,e,t){let i=n.charCategorizer(e);if(i(n.sliceDoc(e-1,e))!=Be.Word)return e;for(let r of t){let s=e-r.length;if(n.sliceDoc(s,e)==r&&i(n.sliceDoc(s-1,s))!=Be.Word)return s}return-1}function Qg(n={}){return[Eg,be,le.of(n),Mg,Zg,Bc]}const Fc=[{key:"Ctrl-Space",run:Ln},{mac:"Alt-`",run:Ln},{mac:"Alt-i",run:Ln},{key:"Escape",run:Sg},{key:"ArrowDown",run:vn(!0)},{key:"ArrowUp",run:vn(!1)},{key:"PageDown",run:vn(!0,"page")},{key:"PageUp",run:vn(!1,"page")},{key:"Enter",run:Rc}],Zg=at.highest(Wt.computeN([le],n=>n.facet(le).defaultKeymap?[Fc]:[])),e0={function:"fn",type:"type",variable:"var",qualifier:"qual",keyword:"kw"},_c={radians:{kind:"function",signature:"radians(degrees: genType) → genType",description:"Converts degrees to radians. Equivalent to degrees × π/180."},degrees:{kind:"function",signature:"degrees(radians: genType) → genType",description:"Converts radians to degrees. Equivalent to radians × 180/π."},sin:{kind:"function",signature:"sin(angle: genType) → genType",description:"Returns the sine of angle (in radians). Output range is [–1, 1]."},cos:{kind:"function",signature:"cos(angle: genType) → genType",description:"Returns the cosine of angle (in radians). Output range is [–1, 1]."},tan:{kind:"function",signature:"tan(angle: genType) → genType",description:"Returns the tangent of angle (in radians). Ratio of sin/cos."},asin:{kind:"function",signature:"asin(x: genType) → genType",description:"Returns the arc-sine (inverse sine) of x in radians. Input must be in [–1, 1]; returns values in [–π/2, π/2]."},acos:{kind:"function",signature:"acos(x: genType) → genType",description:"Returns the arc-cosine (inverse cosine) of x in radians. Input must be in [–1, 1]; returns values in [0, π]."},atan:{kind:"function",signature:"atan(y: genType, x: genType) → genType | atan(y_over_x: genType) → genType",description:"Two-argument form returns the angle (in radians) of the vector (x, y), handling all quadrants (like atan2). One-argument form returns arc-tangent of y/x in [–π/2, π/2]."},pow:{kind:"function",signature:"pow(x: genType, y: genType) → genType",description:"Returns x raised to the power y. x must be ≥ 0. Result is undefined for x < 0 or (x = 0 and y ≤ 0)."},exp:{kind:"function",signature:"exp(x: genType) → genType",description:"Returns the natural exponentiation eˣ."},log:{kind:"function",signature:"log(x: genType) → genType",description:"Returns the natural logarithm ln(x). x must be > 0."},exp2:{kind:"function",signature:"exp2(x: genType) → genType",description:"Returns 2 raised to the power x (2ˣ)."},log2:{kind:"function",signature:"log2(x: genType) → genType",description:"Returns log base-2 of x. x must be > 0."},sqrt:{kind:"function",signature:"sqrt(x: genType) → genType",description:"Returns the square root of x. x must be ≥ 0."},inversesqrt:{kind:"function",signature:"inversesqrt(x: genType) → genType",description:"Returns 1 / sqrt(x). Faster than dividing by sqrt(x). x must be > 0."},abs:{kind:"function",signature:"abs(x: genType) → genType",description:"Returns the absolute value of x. Component-wise for vectors."},sign:{kind:"function",signature:"sign(x: genType) → genType",description:"Returns –1.0, 0.0, or 1.0 depending on the sign of x."},floor:{kind:"function",signature:"floor(x: genType) → genType",description:"Returns the largest integer ≤ x (round toward –∞)."},ceil:{kind:"function",signature:"ceil(x: genType) → genType",description:"Returns the smallest integer ≥ x (round toward +∞)."},fract:{kind:"function",signature:"fract(x: genType) → genType",description:"Returns the fractional part of x: x – floor(x). Useful for repeating patterns."},mod:{kind:"function",signature:"mod(x: genType, y: genType|float) → genType",description:"Returns the modulo: x – y × floor(x/y). Works component-wise. Common for tiling and wrapping."},min:{kind:"function",signature:"min(x: genType, y: genType|float) → genType",description:"Returns the component-wise minimum of x and y."},max:{kind:"function",signature:"max(x: genType, y: genType|float) → genType",description:"Returns the component-wise maximum of x and y."},clamp:{kind:"function",signature:"clamp(x: genType, minVal, maxVal) → genType",description:"Clamps x to [minVal, maxVal]. Equivalent to min(max(x, minVal), maxVal). Safe when minVal ≤ maxVal."},mix:{kind:"function",signature:"mix(x: genType, y: genType, a: genType|float) → genType",description:"Linear interpolation: x × (1 – a) + y × a. a=0 returns x; a=1 returns y. a can exceed [0,1] for extrapolation."},step:{kind:"function",signature:"step(edge: genType|float, x: genType) → genType",description:"Returns 0.0 if x < edge, else 1.0. A hard threshold / Heaviside step function."},smoothstep:{kind:"function",signature:"smoothstep(edge0: genType|float, edge1: genType|float, x: genType) → genType",description:"Smooth Hermite interpolation between 0 and 1. Returns 0 when x ≤ edge0, 1 when x ≥ edge1, and a cubic S-curve in between. Equivalent to t²(3–2t) where t = clamp((x–edge0)/(edge1–edge0), 0, 1)."},length:{kind:"function",signature:"length(x: genType) → float",description:"Returns the Euclidean length (magnitude) of vector x: sqrt(x.x² + x.y² + …)."},distance:{kind:"function",signature:"distance(p0: genType, p1: genType) → float",description:"Returns the distance between two points: length(p1 – p0)."},dot:{kind:"function",signature:"dot(x: genType, y: genType) → float",description:"Returns the dot product of x and y. Measures how parallel two vectors are. dot(a,a) = length(a)²."},cross:{kind:"function",signature:"cross(x: vec3, y: vec3) → vec3",description:"Returns the cross product of x and y. The result is perpendicular to both input vectors. Only valid for vec3."},normalize:{kind:"function",signature:"normalize(x: genType) → genType",description:"Returns a unit vector in the same direction as x. Equivalent to x / length(x)."},faceforward:{kind:"function",signature:"faceforward(N, I, Nref: genType) → genType",description:"Returns N if dot(Nref, I) < 0, else –N. Ensures a normal faces toward the viewer."},reflect:{kind:"function",signature:"reflect(I: genType, N: genType) → genType",description:"Returns the reflection direction of incident vector I around normal N. N must be normalized. Result: I – 2 × dot(N, I) × N."},refract:{kind:"function",signature:"refract(I: genType, N: genType, eta: float) → genType",description:"Returns the refraction vector given incident I, surface normal N, and ratio of indices of refraction eta. Uses Snell's law."},matrixCompMult:{kind:"function",signature:"matrixCompMult(x: matType, y: matType) → matType",description:"Component-wise matrix multiplication (not standard matrix multiply). For regular matrix math, use the * operator."},vec2:{kind:"type",signature:"vec2(x, y: float)",description:"2-component float vector. Components accessible as .x/.y, .r/.g, or .s/.t."},vec3:{kind:"type",signature:"vec3(x, y, z: float | vec2, z | x, vec2)",description:"3-component float vector. Components accessible as .x/.y/.z, .r/.g/.b, or .s/.t/.p."},vec4:{kind:"type",signature:"vec4(x, y, z, w: float | vec3, w | …)",description:"4-component float vector. Components accessible as .x/.y/.z/.w, .r/.g/.b/.a, or .s/.t/.p/.q."},mat2:{kind:"type",signature:"mat2(col0: vec2, col1: vec2)",description:"2×2 float matrix. Constructed column-major. mat2 × vec2 performs a linear transform."},mat3:{kind:"type",signature:"mat3(col0: vec3, col1: vec3, col2: vec3)",description:"3×3 float matrix. Constructed column-major. Commonly used for normals and rotations."},mat4:{kind:"type",signature:"mat4(col0: vec4, … col3: vec4)",description:"4×4 float matrix. Constructed column-major. Standard transform matrix (model, view, projection)."},ivec2:{kind:"type",description:"2-component integer vector."},ivec3:{kind:"type",description:"3-component integer vector."},ivec4:{kind:"type",description:"4-component integer vector."},bvec2:{kind:"type",description:"2-component boolean vector. Returned by comparison functions."},bvec3:{kind:"type",description:"3-component boolean vector."},bvec4:{kind:"type",description:"4-component boolean vector."},sampler2D:{kind:"type",description:"Opaque handle to a 2D texture. Sample with texture2D(sampler, uv)."},samplerCube:{kind:"type",description:"Opaque handle to a cubemap texture. Sample with textureCube(sampler, dir)."},texture2D:{kind:"function",signature:"texture2D(sampler: sampler2D, coord: vec2, bias?: float) → vec4",description:"Samples a 2D texture at the given UV coordinates. Returns a vec4 (RGBA). The optional bias adjusts the mipmap LOD."},textureCube:{kind:"function",signature:"textureCube(sampler: samplerCube, coord: vec3) → vec4",description:"Samples a cubemap texture using a 3D direction vector as the coordinate."},texture2DProj:{kind:"function",signature:"texture2DProj(sampler: sampler2D, coord: vec3|vec4) → vec4",description:"Projective texture lookup: divides the texture coordinate by its last component before sampling."},gl_FragColor:{kind:"variable",signature:"gl_FragColor: vec4 (write-only)",description:"Output color of the current fragment (RGBA). This is the final value written to the framebuffer. Setting alpha < 1.0 makes the fragment semi-transparent (if blending is enabled)."},gl_FragCoord:{kind:"variable",signature:"gl_FragCoord: vec4 (read-only)",description:"The window-space position of the current fragment. .xy is the pixel position (origin at bottom-left), .z is depth [0,1], .w is 1/clip-w."},gl_FragDepth:{kind:"variable",signature:"gl_FragDepth: float (write-only)",description:"Override the depth value written to the depth buffer. If not written, gl_FragCoord.z is used."},gl_PointCoord:{kind:"variable",signature:"gl_PointCoord: vec2 (read-only)",description:"2D coordinate within a point sprite, ranging [0,1] in both dimensions. Only valid when rendering GL_POINTS."},gl_Position:{kind:"variable",signature:"gl_Position: vec4 (write-only, vertex)",description:"Clip-space position output from the vertex shader. Must be written for every vertex. Usually: projectionMatrix × viewMatrix × modelMatrix × vec4(position, 1.0)."},gl_PointSize:{kind:"variable",signature:"gl_PointSize: float (write-only, vertex)",description:"Size of the rendered point in pixels when drawing GL_POINTS primitives."},gl_FrontFacing:{kind:"variable",signature:"gl_FrontFacing: bool (read-only, fragment)",description:"True if the fragment belongs to a front-facing primitive. Useful for two-sided lighting."},uniform:{kind:"qualifier",description:"Declares a variable passed from the CPU (application) to the shader. Constant across all vertices/fragments in a draw call. Read-only inside the shader."},attribute:{kind:"qualifier",description:"(GLSL ES 1.0) Per-vertex input data from a vertex buffer — position, normal, UV, etc. Read-only, available only in vertex shaders. Replaced by 'in' in GLSL ES 3.0."},varying:{kind:"qualifier",description:"(GLSL ES 1.0) Passes interpolated data from the vertex shader to the fragment shader. Written in the vertex shader, read in the fragment shader. Replaced by 'out'/'in' in GLSL ES 3.0."},in:{kind:"qualifier",description:"(GLSL ES 3.0) Input to the current shader stage. In a vertex shader: per-vertex attribute. In a fragment shader: interpolated value from the vertex shader."},out:{kind:"qualifier",description:"(GLSL ES 3.0) Output from the current shader stage. In a vertex shader: data passed to the next stage. In a fragment shader: the fragment color output."},inout:{kind:"qualifier",description:"Function parameter qualifier — the variable is both read on entry and written on exit (passed by reference)."},precision:{kind:"keyword",description:"Sets the default floating-point precision for a type (float, int, sampler2D…). Usually placed at the top of the shader: 'precision mediump float;'"},highp:{kind:"qualifier",description:"High precision floating-point. At least 16 bits of mantissa, range [–2¹⁶, 2¹⁶]. Guaranteed in vertex shaders; optional in fragment shaders on some hardware."},mediump:{kind:"qualifier",description:"Medium precision floating-point. At least 10 bits of mantissa, range [–2¹⁰, 2¹⁰]. A safe default for fragment shaders."},lowp:{kind:"qualifier",description:"Low precision floating-point. At least 8 bits, range [–2, 2]. Suitable for colors (0–1). Avoids clamping for values outside that range on some GPUs."},float:{kind:"type",description:"Single-precision (or mediump) scalar floating-point value. The fundamental numeric type in GLSL."},int:{kind:"type",description:"Signed integer scalar. GLSL ES 1.0 integers have limited arithmetic; use float for general math."},uint:{kind:"type",description:"Unsigned integer scalar (GLSL ES 3.0+)."},bool:{kind:"type",description:"Boolean scalar. Produced by comparison operators; consumed by if/while conditions and mix()."},void:{kind:"keyword",description:"Indicates a function returns no value, or (as a parameter list) that a function takes no arguments."},if:{kind:"keyword",description:"Conditional branch. Executes the following block only when the condition is true."},else:{kind:"keyword",description:"Executes its block when the preceding 'if' condition was false."},for:{kind:"keyword",description:"Counted loop. Loops should have a deterministic iteration count; avoid infinite or GPU-heavy loops."},while:{kind:"keyword",description:"Condition-driven loop. Runs while the condition is true. Avoid long-running loops in shaders."},do:{kind:"keyword",description:"Do-while loop. Executes the body at least once before checking the condition."},break:{kind:"keyword",description:"Exits the nearest enclosing for/while/do loop immediately."},continue:{kind:"keyword",description:"Skips the rest of the current loop iteration and moves to the next iteration."},return:{kind:"keyword",description:"Returns a value from a function and exits it immediately. 'return;' (no value) exits a void function."},discard:{kind:"keyword",description:"(Fragment shaders only) Discards the current fragment — it is not written to the framebuffer. Useful for alpha cutouts or stencil effects."},const:{kind:"keyword",description:"Declares a compile-time constant. Must be initialized with a constant expression."},struct:{kind:"keyword",description:"Defines a composite data type grouping multiple fields. Access members with dot notation."},main:{kind:"keyword",description:"The required entry point of every shader. Signature: void main(). Execution starts here."}},t0={function:4,variable:3,type:2,qualifier:1,keyword:0},Ql=/\b([a-zA-Z_][a-zA-Z0-9_]*)\b/g;function i0(n){let e=null,t=-1,i;for(Ql.lastIndex=0;(i=Ql.exec(n))!==null;){const r=i[1],s=_c[r];if(!s)continue;const o=t0[s.kind];o>t&&(t=o,e={token:r,doc:s})}return e}const n0=new Set(["float","int","uint","bool","double","vec2","vec3","vec4","ivec2","ivec3","ivec4","bvec2","bvec3","bvec4","mat2","mat3","mat4","sampler2D","samplerCube"]);function r0(n){const e=n.match(/^[ib]?vec(\d)$/);return e?Number(e[1]):null}function s0(n){const e=n.match(/^mat(\d)$/);return e?Number(e[1]):null}const o0=[{char:"x",detail:"x component"},{char:"y",detail:"y component"},{char:"z",detail:"z component"},{char:"w",detail:"w component"},{char:"r",detail:"red channel"},{char:"g",detail:"green channel"},{char:"b",detail:"blue channel"},{char:"a",detail:"alpha channel"},{char:"s",detail:"s texture coord"},{char:"t",detail:"t texture coord"},{char:"p",detail:"p texture coord"},{char:"q",detail:"q texture coord"}];function l0(n){const e=new Map,t=/^(?:(?:const|uniform|in|out|varying|attribute)\s+)?(?:(?:highp|mediump|lowp)\s+)?(\w+)\s+(\w+)(?:\s*\[[^\]]*\])?(?:\s*=\s*[^;]*?)?\s*;?$/;for(const i of n.split(` +`)){const s=i.split("//")[0].trim().match(t);s&&n0.has(s[1])&&e.set(s[2],s[1])}return e}function Zl(n){const e=r0(n);return e!==null?o0.filter((t,i)=>i%4({label:"."+t,type:"keyword",apply:t,detail:i})):s0(n)!==null?[{label:"[row][col]",type:"keyword",detail:"index skeleton",apply:(t,i,r,s)=>{t.dispatch({changes:{from:r,to:s,insert:"[0][0]"},selection:b.cursor(r+1)})}}]:[]}const a0=["vec2","vec3","vec4","ivec2","ivec3","ivec4","bvec2","bvec3","bvec4","mat2","mat3","mat4","float","int","uint","bool"];function h0(){return a0.map(n=>Vg(n+"(${0})",{label:n,detail:"constructor",boost:-100}))}const c0={function:"function",type:"type",variable:"variable",qualifier:"keyword",keyword:"keyword"},f0=Object.entries(_c).map(([n,e])=>({label:n,type:c0[e.kind],detail:e.signature??void 0,info:e.description,boost:e.kind==="function"?1:0}));function ea(n,e){const t=n.state.doc.lineAt(n.pos).text;if(e-1<0)return null;const r=t.slice(0,e).match(/(\w+)$/);return r?l0(n.state.doc.toString()).get(r[1])??null:null}function u0(n){const e=n.state.doc.lineAt(n.pos),t=e.text,i=n.pos-e.from,r=i>0?t[i-1]:"";if(r==="["&&i>=2&&/\w/.test(t[i-2])){const c=ea(n,i-1);if(c){if(/^[ib]?vec\d$/.test(c))return null;const f=Zl(c);if(f.length>0)return{from:n.pos-1,options:f,validFor:/^\[?\d*$/}}return null}if(r==="."&&i>=2&&/\w/.test(t[i-2])){const c=ea(n,i-1);if(c){const f=Zl(c);if(f.length>0)return{from:n.pos,options:f,validFor:/^\w*$/}}return null}const s=n.matchBefore(/\w+/);if(!s||s.from===s.to&&!n.explicit)return null;const o=s.text.toLowerCase(),l=f0.filter(c=>c.label.toLowerCase().startsWith(o)),a=h0().filter(c=>c.label.toLowerCase().startsWith(o)),h=[...l,...a];return h.length===0?null:{from:s.from,options:h,validFor:/^\w*$/}}const Wc="cm-error-line",Vc="cm-error-marker",Hc="cm-error-gutter",zc=j.define();class d0 extends Ct{toDOM(){const e=document.createElement("span");return e.className=Vc,e.textContent="●",e.title="Compile error on this line",e}}const ta=new d0,$c=We.define({create(){return{lines:[],decos:U.none}},update(n,e){for(const t of e.effects)if(t.is(zc)){const i=t.value,r=e.state.doc.lines,s=i.length===0?U.none:U.set(i.filter(o=>o>=1&&o<=r).sort((o,l)=>o-l).map(o=>{const l=e.state.doc.line(o).from;return U.line({class:Wc}).range(l)}));return{lines:i,decos:s}}return e.docChanged?{lines:n.lines,decos:n.decos.map(e.changes)}:n},provide(n){return I.decorations.from(n,e=>e.decos)}}),p0=vd({class:Hc,lineMarker(n,e){const{lines:t}=n.state.field($c);if(t.length===0)return null;const i=n.state.doc.lineAt(e.from).number;return t.includes(i)?ta:null},initialSpacer:()=>ta});function m0(n){const e=/ERROR:\s*\d+:(\d+)/g;let t,i=1/0;for(;(t=e.exec(n))!==null;){const r=parseInt(t[1],10);!isNaN(r)&&r>0&&r{const{from:t,to:i}=e.state.selection.main;return e.dispatch({changes:{from:t,to:i,insert:n},selection:{anchor:t+n.length}}),Ln(e),!0}}const b0=I.theme({"&":{height:"100%",backgroundColor:"#0d0f14"},".cm-scroller":{overflow:"auto",height:"100%"},".cm-content":{padding:"12px 0",caretColor:"#7aa2f7"},".cm-line":{padding:"0 16px"},"&.cm-focused .cm-cursor":{borderLeftColor:"#7aa2f7"},".cm-activeLine":{backgroundColor:"rgba(122,162,247,0.05)"},".cm-gutters":{backgroundColor:"#0d0f14",borderRight:"1px solid #1e2030",color:"#9aa5ce"},".cm-activeLineGutter":{backgroundColor:"rgba(122,162,247,0.06)",color:"#c0caf5"},[`.${Wc}`]:{backgroundColor:"rgba(247, 118, 142, 0.08) !important",borderLeft:"3px solid #f7768e",paddingLeft:"13px !important"},[`.${Hc} .${Vc}`]:{color:"#f7768e",fontSize:"0.6rem",lineHeight:"1",paddingRight:"3px",cursor:"default"},".cm-tooltip.cm-tooltip-autocomplete":{backgroundColor:"#13151f",border:"1px solid #2a2d3e",borderRadius:"6px",boxShadow:"0 4px 16px rgba(0,0,0,0.5)"},".cm-tooltip-autocomplete ul li":{fontSize:"1rem",padding:"4px 10px",color:"#c0caf5"},".cm-tooltip-autocomplete ul li[aria-selected]":{backgroundColor:"rgba(122,162,247,0.15)",color:"#c0caf5"},".cm-completionLabel":{color:"#c0caf5"},".cm-completionDetail":{color:"#7aa2f7",opacity:.55,fontSize:"0.85rem",fontStyle:"normal",marginLeft:"8px"},".cm-completionMatchedText":{color:"#9ece6a",fontWeight:"700",textDecoration:"none"},".cm-tooltip.cm-completionInfo":{backgroundColor:"#0d0f14",border:"1px solid #2a2d3e",borderRadius:"6px",color:"#a9b1d6",fontSize:"0.9rem",padding:"8px 12px",maxWidth:"320px",lineHeight:"1.5"}},{dark:!0});function w0(n,e,t){const i=new I({state:q.create({doc:e,extensions:[g0,rg,b0,Dd(),ud(),gp(),zg(),sp(),Np(),$c,p0,at.highest(Wt.of([{key:"Tab",run:Rc}])),at.high(y0),at.high(Wt.of(Fc)),Wt.of([..._m,...Up,Wm]),I.lineWrapping,ia.of([]),I.updateListener.of(l=>{if(l.docChanged&&t.onChange(l.state.doc.toString()),l.docChanged||l.selectionSet){const a=l.state,h=a.selection.main.head,c=a.doc.lineAt(h);t.onCursorLine(c.text,c.number)}})]}),parent:n});function r(l){i.dispatch({changes:{from:0,to:i.state.doc.length,insert:l},selection:{anchor:0}})}function s(l){i.dispatch({effects:ia.reconfigure(l?[Qg({override:[u0],defaultKeymap:!1})]:[])})}function o(l){const a=l?m0(l):[];i.dispatch({effects:zc.of(a)})}return{view:i,setDoc:r,setAutocomplete:s,setErrorLines:o,getDoc:()=>i.state.doc.toString()}}const x0=`#version 300 es in vec2 a_position; void main() { gl_Position = vec4(a_position, 0.0, 1.0); } -`,zg=` +`,v0=` attribute vec2 a_position; void main() { gl_Position = vec4(a_position, 0.0, 1.0); } -`,$g=`#version 300 es +`,k0=`#version 300 es precision highp float; precision highp int; uniform vec3 iResolution; @@ -37,7 +38,7 @@ uniform sampler2D iChannel3; uniform vec4 iDate; uniform float iSampleRate; out vec4 out_fragColor; -`,Ug=`precision highp float; +`,S0=`precision highp float; precision highp int; uniform vec3 iResolution; uniform float iTime; @@ -53,18 +54,18 @@ uniform sampler2D iChannel2; uniform sampler2D iChannel3; uniform vec4 iDate; uniform float iSampleRate; -`,qg=` +`,C0=` void main() { mainImage(out_fragColor, gl_FragCoord.xy); } -`,Kg=` +`,A0=` void main() { mainImage(gl_FragColor, gl_FragCoord.xy); } -`,jg=new Float32Array([-1,-1,1,-1,-1,1,-1,1,1,-1,1,1]);function Gg(n){return/void\s+mainImage\s*\(/.test(n)}function Yg(n,e){if(e){const r=$g;return{src:r+n+qg,preambleLines:r.split(` -`).length-1}}const t=n.replace(/\btexture\s*\(/g,"texture2D("),i=Ug;return{src:i+t+Kg,preambleLines:i.split(` -`).length-1}}function Xg(n){const e=n.createTexture();return n.bindTexture(n.TEXTURE_2D,e),n.texImage2D(n.TEXTURE_2D,0,n.RGBA,1,1,0,n.RGBA,n.UNSIGNED_BYTE,new Uint8Array([0,0,0,255])),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MIN_FILTER,n.LINEAR),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_MAG_FILTER,n.LINEAR),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_S,n.CLAMP_TO_EDGE),n.texParameteri(n.TEXTURE_2D,n.TEXTURE_WRAP_T,n.CLAMP_TO_EDGE),e}function Jg(n,e,t=()=>{}){const i=n.getContext("webgl2"),r=i?null:n.getContext("webgl"),s=i??r,o=!!i;if(!s)return e("WebGL not available in this browser"),null;const l=s.createBuffer();s.bindBuffer(s.ARRAY_BUFFER,l),s.bufferData(s.ARRAY_BUFFER,jg,s.STATIC_DRAW);const a=[0,1,2,3].map(()=>Xg(s));let h=null,c=!1,f=0,u=!0,d=!1,p=0,m=performance.now();const g=performance.now();let y=60,w=-1,T=0,D=0,M=0,L=0;n.addEventListener("mousemove",H=>{const K=n.getBoundingClientRect();T=(H.clientX-K.left)*devicePixelRatio,D=n.height-(H.clientY-K.top)*devicePixelRatio}),n.addEventListener("mousedown",H=>{const K=n.getBoundingClientRect();M=(H.clientX-K.left)*devicePixelRatio,L=n.height-(H.clientY-K.top)*devicePixelRatio});function E(H,K){const fe=s.createShader(K);if(s.shaderSource(fe,H),s.compileShader(fe),!s.getShaderParameter(fe,s.COMPILE_STATUS)){const oe=s.getShaderInfoLog(fe)??"Unknown compile error";return s.deleteShader(fe),e(oe.trim()),null}return fe}function F(H){var Ce,Ae;const K=Gg(H),fe=K&&o?Hg:zg;let oe,Ve=0;if(K){const Te=Yg(H,o);oe=Te.src,Ve=Te.preambleLines}else oe=H;const ae=E(fe,s.VERTEX_SHADER);if(!ae)return null;const _=s.createShader(s.FRAGMENT_SHADER);if(s.shaderSource(_,oe),s.compileShader(_),!s.getShaderParameter(_,s.COMPILE_STATUS)){const Te=((Ce=s.getShaderInfoLog(_))==null?void 0:Ce.trim())??"Unknown compile error";s.deleteShader(_),s.deleteShader(ae);const Mt=Ve>0?Te.replace(/ERROR:\s*(\d+):(\d+)/g,(ar,Xi,ci)=>{const st=parseInt(ci,10)-Ve;return`ERROR: ${Xi}:${st>0?st:ci}`}):Te;return e(Mt),null}const J=s.createProgram();return s.attachShader(J,ae),s.attachShader(J,_),s.linkProgram(J),s.deleteShader(ae),s.deleteShader(_),s.getProgramParameter(J,s.LINK_STATUS)?{prog:J,shadertoy:K}:(e(((Ae=s.getProgramInfoLog(J))==null?void 0:Ae.trim())??"Link error"),s.deleteProgram(J),null)}const $=1e3;let S=0;const k=2;function v(H){const K=F(H);K&&(h&&s.deleteProgram(h),h=K.prog,c=K.shadertoy,p=0,S=0,m=performance.now(),e(null),!u&&!d&&(u=!0,m=performance.now(),q()))}let A=0,N=0;function q(){if(f=requestAnimationFrame(q),!h)return;const H=performance.now(),K=H-m;if(p>0&&K>$){if(S++,S>=k){cancelAnimationFrame(f),u=!1,e(`Shader is too slow — rendering paused to protect the page. -Frame took ${Math.round(K)}ms. Loops bound by fragCoord or iResolution can be O(width²·height) per pixel.`);return}}else S=0;if(K>0){y=y*.9+1e3/K*.1;const _=Math.round(y);_!==w&&(w=_,t(_))}const fe=(H-g)/1e3;m=H;const oe=n.clientWidth*devicePixelRatio,Ve=n.clientHeight*devicePixelRatio;(oe!==A||Ve!==N)&&(n.width=oe,n.height=Ve,s.viewport(0,0,oe,Ve),A=oe,N=Ve),s.useProgram(h);const ae=s.getAttribLocation(h,"a_position");if(s.bindBuffer(s.ARRAY_BUFFER,l),s.enableVertexAttribArray(ae),s.vertexAttribPointer(ae,2,s.FLOAT,!1,0,0),c){const _=ft=>s.getUniformLocation(h,ft),J=_("iResolution");J&&s.uniform3f(J,n.width,n.height,n.width/n.height);const Ce=_("iTime");Ce&&s.uniform1f(Ce,fe);const Ae=K/1e3,Te=_("iTimeDelta");Te&&s.uniform1f(Te,Ae);const Mt=_("iFrameRate");Mt&&s.uniform1f(Mt,Ae>0?1/Ae:60);const ar=_("iFrame");ar&&s.uniform1i(ar,p);const Xi=_("iMouse");Xi&&s.uniform4f(Xi,T,D,M,L);const ci=_("iSampleRate");ci&&s.uniform1f(ci,44100);const st=new Date,uo=_("iDate");uo&&s.uniform4f(uo,st.getFullYear(),st.getMonth(),st.getDate(),st.getHours()*3600+st.getMinutes()*60+st.getSeconds());for(let ft=0;ft<4;ft++){const po=_(`iChannel${ft}`);po&&(s.activeTexture(s.TEXTURE0+ft),s.bindTexture(s.TEXTURE_2D,a[ft]),s.uniform1i(po,ft))}}else{const _=s.getUniformLocation(h,"u_time"),J=s.getUniformLocation(h,"u_resolution");_&&s.uniform1f(_,fe),J&&s.uniform2f(J,n.width,n.height)}s.drawArrays(s.TRIANGLES,0,6),p++}return q(),{updateShader:v,setRunning(H){H!==u&&(u=H,H?(d=!1,m=performance.now(),e(null),q()):(d=!0,cancelAnimationFrame(f)))},destroy(){cancelAnimationFrame(f)}}}function Qg(n){return n.replace(/&/g,"&").replace(//g,">")}function P(n){return`${Qg(n)}`}function Fr(n,e){if(!new RegExp(`^${e}\\s*\\(`).test(n))return null;const t=n.indexOf("(");let i=0,r=t;for(;r{}){const i=n.getContext("webgl2"),r=i?null:n.getContext("webgl"),s=i??r,o=!!i;if(!s)return e("WebGL not available in this browser"),null;const l=s.createBuffer();s.bindBuffer(s.ARRAY_BUFFER,l),s.bufferData(s.ARRAY_BUFFER,T0,s.STATIC_DRAW);const a=[0,1,2,3].map(()=>E0(s));let h=null,c=!1,f=0,u=!0,d=!1,p=0,m=performance.now();const g=performance.now();let y=60,w=-1,T=0,D=0,M=0,L=0;n.addEventListener("mousemove",z=>{const G=n.getBoundingClientRect();T=(z.clientX-G.left)*devicePixelRatio,D=n.height-(z.clientY-G.top)*devicePixelRatio}),n.addEventListener("mousedown",z=>{const G=n.getBoundingClientRect();M=(z.clientX-G.left)*devicePixelRatio,L=n.height-(z.clientY-G.top)*devicePixelRatio});function E(z,G){const fe=s.createShader(G);if(s.shaderSource(fe,z),s.compileShader(fe),!s.getShaderParameter(fe,s.COMPILE_STATUS)){const oe=s.getShaderInfoLog(fe)??"Unknown compile error";return s.deleteShader(fe),e(oe.trim()),null}return fe}function F(z){var Ce,Ae;const G=M0(z),fe=G&&o?x0:v0;let oe,He=0;if(G){const Te=D0(z,o);oe=Te.src,He=Te.preambleLines}else oe=z;const ae=E(fe,s.VERTEX_SHADER);if(!ae)return null;const _=s.createShader(s.FRAGMENT_SHADER);if(s.shaderSource(_,oe),s.compileShader(_),!s.getShaderParameter(_,s.COMPILE_STATUS)){const Te=((Ce=s.getShaderInfoLog(_))==null?void 0:Ce.trim())??"Unknown compile error";s.deleteShader(_),s.deleteShader(ae);const Et=He>0?Te.replace(/ERROR:\s*(\d+):(\d+)/g,(pr,tn,ui)=>{const st=parseInt(ui,10)-He;return`ERROR: ${tn}:${st>0?st:ui}`}):Te;return e(Et),null}const J=s.createProgram();return s.attachShader(J,ae),s.attachShader(J,_),s.linkProgram(J),s.deleteShader(ae),s.deleteShader(_),s.getProgramParameter(J,s.LINK_STATUS)?{prog:J,shadertoy:G}:(e(((Ae=s.getProgramInfoLog(J))==null?void 0:Ae.trim())??"Link error"),s.deleteProgram(J),null)}const $=1e3;let S=0;const k=2;function v(z){const G=F(z);G&&(h&&s.deleteProgram(h),h=G.prog,c=G.shadertoy,p=0,S=0,m=performance.now(),e(null),!u&&!d&&(u=!0,m=performance.now(),K()))}let A=0,N=0;function K(){if(f=requestAnimationFrame(K),!h)return;const z=performance.now(),G=z-m;if(p>0&&G>$){if(S++,S>=k){cancelAnimationFrame(f),u=!1,e(`Shader is too slow — rendering paused to protect the page. +Frame took ${Math.round(G)}ms. Loops bound by fragCoord or iResolution can be O(width²·height) per pixel.`);return}}else S=0;if(G>0){y=y*.9+1e3/G*.1;const _=Math.round(y);_!==w&&(w=_,t(_))}const fe=(z-g)/1e3;m=z;const oe=n.clientWidth*devicePixelRatio,He=n.clientHeight*devicePixelRatio;(oe!==A||He!==N)&&(n.width=oe,n.height=He,s.viewport(0,0,oe,He),A=oe,N=He),s.useProgram(h);const ae=s.getAttribLocation(h,"a_position");if(s.bindBuffer(s.ARRAY_BUFFER,l),s.enableVertexAttribArray(ae),s.vertexAttribPointer(ae,2,s.FLOAT,!1,0,0),c){const _=ut=>s.getUniformLocation(h,ut),J=_("iResolution");J&&s.uniform3f(J,n.width,n.height,n.width/n.height);const Ce=_("iTime");Ce&&s.uniform1f(Ce,fe);const Ae=G/1e3,Te=_("iTimeDelta");Te&&s.uniform1f(Te,Ae);const Et=_("iFrameRate");Et&&s.uniform1f(Et,Ae>0?1/Ae:60);const pr=_("iFrame");pr&&s.uniform1i(pr,p);const tn=_("iMouse");tn&&s.uniform4f(tn,T,D,M,L);const ui=_("iSampleRate");ui&&s.uniform1f(ui,44100);const st=new Date,vo=_("iDate");vo&&s.uniform4f(vo,st.getFullYear(),st.getMonth(),st.getDate(),st.getHours()*3600+st.getMinutes()*60+st.getSeconds());for(let ut=0;ut<4;ut++){const ko=_(`iChannel${ut}`);ko&&(s.activeTexture(s.TEXTURE0+ut),s.bindTexture(s.TEXTURE_2D,a[ut]),s.uniform1i(ko,ut))}}else{const _=s.getUniformLocation(h,"u_time"),J=s.getUniformLocation(h,"u_resolution");_&&s.uniform1f(_,fe),J&&s.uniform2f(J,n.width,n.height)}s.drawArrays(s.TRIANGLES,0,6),p++}return K(),{updateShader:v,setRunning(z){z!==u&&(u=z,z?(d=!1,m=performance.now(),e(null),K()):(d=!0,cancelAnimationFrame(f)))},destroy(){cancelAnimationFrame(f)}}}function L0(n){return n.replace(/&/g,"&").replace(//g,">")}function P(n){return`${L0(n)}`}function zr(n,e){if(!new RegExp(`^${e}\\s*\\(`).test(n))return null;const t=n.indexOf("(");let i=0,r=t;for(;r
@@ -74,10 +75,10 @@ Frame took ${Math.round(K)}ms. Loops bound by fragCoord or iResolution can be O(
- `;const e=n.querySelector("#info-explain"),t=n.querySelector("#info-token-section"),i=n.querySelector("#info-badge"),r=n.querySelector("#info-token"),s=n.querySelector("#info-sig"),o=n.querySelector("#info-desc");function l(a){const h=a.trim(),c=e0(h);c?(e.innerHTML=c,e.style.opacity="1"):e.textContent="";const f=Lg(h);if(f){const{token:u,doc:d}=f;i.textContent=Eg[d.kind],i.className=`info-badge-${d.kind}`,r.textContent=u,s.textContent=d.signature??"",o.textContent=d.description,t.style.display="flex"}else t.style.display="none"}return l}function i0(n){const e=new Set,t=[];for(const i of n.split(` -`)){const r=i.match(/^\s*#define\s+(\w+)\s*(?:\/\/.*)?$/),s=i.match(/^\s*\/\/\s*#define\s+(\w+)\s*(?:\/\/.*)?$/),o=r??s;if(!o)continue;const l=o[1];e.has(l)||(e.add(l),t.push({name:l,active:!!r}))}return t}function ho(n,e){const t=n.split(` + `;const e=n.querySelector("#info-explain"),t=n.querySelector("#info-token-section"),i=n.querySelector("#info-badge"),r=n.querySelector("#info-token"),s=n.querySelector("#info-sig"),o=n.querySelector("#info-desc");function l(a){const h=a.trim(),c=B0(h);c?(e.innerHTML=c,e.style.opacity="1"):e.textContent="";const f=i0(h);if(f){const{token:u,doc:d}=f;i.textContent=e0[d.kind],i.className=`info-badge-${d.kind}`,r.textContent=u,s.textContent=d.signature??"",o.textContent=d.description,t.style.display="flex"}else t.style.display="none"}return l}function P0(n){const e=new Set,t=[];for(const i of n.split(` +`)){const r=i.match(/^\s*#define\s+(\w+)\s*(?:\/\/.*)?$/),s=i.match(/^\s*\/\/\s*#define\s+(\w+)\s*(?:\/\/.*)?$/),o=r??s;if(!o)continue;const l=o[1];e.has(l)||(e.add(l),t.push({name:l,active:!!r}))}return t}function bo(n,e){const t=n.split(` `),i=new Map;for(const[l,a]of e)a&&i.set(l,!0);const r=[];function s(){return r.every(l=>l.active)}const o=[];for(const l of t){const a=l.trim();if(/^#ifdef\s+(\w+)/.test(a)){const h=a.match(/^#ifdef\s+(\w+)/)[1],c=i.has(h),f=s()&&c;r.push({active:f,seenTrue:f}),o.push("");continue}if(/^#ifndef\s+(\w+)/.test(a)){const h=a.match(/^#ifndef\s+(\w+)/)[1],c=i.has(h),f=s()&&!c;r.push({active:f,seenTrue:f}),o.push("");continue}if(/^#else\b/.test(a)){if(r.length>0){const h=r[r.length-1],c=r.slice(0,-1).every(f=>f.active);h.active=c&&!h.seenTrue,h.active&&(h.seenTrue=!0)}o.push("");continue}if(/^#endif\b/.test(a)){r.pop(),o.push("");continue}if(!s()){o.push("");continue}if(/^#define\s+\w+/.test(a)){const h=a.match(/^#define\s+(\w+)(?:\s+(.+))?$/);if(h){const[,c,f]=h;e.has(c)||i.set(c,(f==null?void 0:f.trim())??!0)}o.push(l);continue}if(/^\s*\/\/\s*#define\s+/.test(l)){o.push("");continue}if(/^#undef\s+(\w+)/.test(a)){const h=a.match(/^#undef\s+(\w+)/)[1];e.has(h)||i.delete(h),o.push(l);continue}o.push(l)}return o.join(` -`)}function Tn(n,e){n.classList.toggle("hidden",e)}function n0(n,e){const t=new Map;function i(l){t.clear();for(const[a,h]of l)t.set(a,h)}function r(){return new Map(t)}function s(l){if(Tn(n,l.length===0),l.length===0)return;n.innerHTML="";const a=document.createElement("span");a.id="define-panel-label",a.textContent="defines",n.appendChild(a);const h=document.createElement("div");h.id="define-list",n.appendChild(h);for(const{name:c,active:f}of l){t.has(c)||t.set(c,f);const u=document.createElement("label");u.className="define-row";const d=document.createElement("input");d.type="checkbox",d.checked=t.get(c),d.addEventListener("change",()=>{t.set(c,d.checked),e()});const p=document.createElement("code");p.textContent=c,u.appendChild(d),u.appendChild(p),h.appendChild(u)}}function o(l){const a=i0(l);for(const h of t.keys())a.find(c=>c.name===h)||t.delete(h);s(a)}return{update:o,setOverrides:i,getOverrides:r}}const Kl=200;function r0(n,e,t){let i=!1;n.addEventListener("pointerdown",r=>{r.preventDefault(),i=!0,n.setPointerCapture(r.pointerId),n.classList.add("dragging")}),n.addEventListener("pointermove",r=>{if(!i)return;const s=e.getBoundingClientRect(),o=n.offsetWidth;let l=r.clientX-s.left-o/2;l=Math.max(Kl,Math.min(s.width-o-Kl,l)),t.style.width=l+"px",t.style.flex="none"}),n.addEventListener("pointerup",()=>{i&&(i=!1,n.classList.remove("dragging"))}),n.addEventListener("pointercancel",()=>{i&&(i=!1,n.classList.remove("dragging"))})}const Lc="glsl-editor.doc";function s0(){try{return localStorage.getItem(Lc)}catch{return null}}function o0(n){try{localStorage.setItem(Lc,n)}catch{}}const l0=typeof CompressionStream<"u",a0="#s=";function Bc(n){return n.startsWith(a0)}function jl(n){let e="";for(const t of n)e+=String.fromCharCode(t);return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function Rc(n){const e=atob(n.replace(/-/g,"+").replace(/_/g,"/")),t=new Uint8Array(e.length);for(let i=0;i`${e}:${t?1:0}`).join(",")}function f0(n){const e=new Map;for(const t of n.split(",")){const i=t.match(/^(\w+):(0|1)$/);i&&e.set(i[1],i[2]==="1")}return e}async function Ic(n,e){const t=l0?"z:"+jl(new Uint8Array(await new Response(new Blob([n]).stream().pipeThrough(new CompressionStream("deflate-raw"))).arrayBuffer())):"p:"+jl(new TextEncoder().encode(n)),i=e.size>0?"&d="+c0(e):"";return`s=${t}${i}`}async function u0(n){if(!Bc(n))return null;try{const e=new URLSearchParams(n.slice(1)),t=e.get("s");if(!t)return null;let i=null;return t.startsWith("z:")&&typeof DecompressionStream<"u"?i=await h0(t.slice(2)):t.startsWith("p:")&&(i=new TextDecoder().decode(Rc(t.slice(2)))),i?{doc:i,defines:f0(e.get("d")??"")}:null}catch{return null}}const Vi=`precision mediump float; +`)}function Rn(n,e){n.classList.toggle("hidden",e)}function N0(n,e){const t=new Map;function i(l){t.clear();for(const[a,h]of l)t.set(a,h)}function r(){return new Map(t)}function s(l){if(Rn(n,l.length===0),l.length===0)return;n.innerHTML="";const a=document.createElement("span");a.id="define-panel-label",a.textContent="defines",n.appendChild(a);const h=document.createElement("div");h.id="define-list",n.appendChild(h);for(const{name:c,active:f}of l){t.has(c)||t.set(c,f);const u=document.createElement("label");u.className="define-row";const d=document.createElement("input");d.type="checkbox",d.checked=t.get(c),d.addEventListener("change",()=>{t.set(c,d.checked),e()});const p=document.createElement("code");p.textContent=c,u.appendChild(d),u.appendChild(p),h.appendChild(u)}}function o(l){const a=P0(l);for(const h of t.keys())a.find(c=>c.name===h)||t.delete(h);s(a)}return{update:o,setOverrides:i,getOverrides:r}}const ra=200;function F0(n,e,t){let i=!1;n.addEventListener("pointerdown",r=>{r.preventDefault(),i=!0,n.setPointerCapture(r.pointerId),n.classList.add("dragging")}),n.addEventListener("pointermove",r=>{if(!i)return;const s=e.getBoundingClientRect(),o=n.offsetWidth;let l=r.clientX-s.left-o/2;l=Math.max(ra,Math.min(s.width-o-ra,l)),t.style.width=l+"px",t.style.flex="none"}),n.addEventListener("pointerup",()=>{i&&(i=!1,n.classList.remove("dragging"))}),n.addEventListener("pointercancel",()=>{i&&(i=!1,n.classList.remove("dragging"))})}const qc="glsl-editor.doc",Uc="glsl.autocomplete";function _0(){try{return localStorage.getItem(qc)}catch{return null}}function W0(n){try{localStorage.setItem(qc,n)}catch{}}function V0(){try{const n=localStorage.getItem(Uc);return n===null?null:n==="1"}catch{return null}}function H0(n){try{localStorage.setItem(Uc,n?"1":"0")}catch{}}const z0=typeof CompressionStream<"u",$0="#s=";function Kc(n){return n.startsWith($0)}function sa(n){let e="";for(const t of n)e+=String.fromCharCode(t);return btoa(e).replace(/\+/g,"-").replace(/\//g,"_").replace(/=+$/,"")}function jc(n){const e=atob(n.replace(/-/g,"+").replace(/_/g,"/")),t=new Uint8Array(e.length);for(let i=0;i`${e}:${t?1:0}`).join(",")}function K0(n){const e=new Map;for(const t of n.split(",")){const i=t.match(/^(\w+):(0|1)$/);i&&e.set(i[1],i[2]==="1")}return e}async function Gc(n,e){const t=z0?"z:"+sa(new Uint8Array(await new Response(new Blob([n]).stream().pipeThrough(new CompressionStream("deflate-raw"))).arrayBuffer())):"p:"+sa(new TextEncoder().encode(n)),i=e.size>0?"&d="+U0(e):"";return`s=${t}${i}`}async function j0(n){if(!Kc(n))return null;try{const e=new URLSearchParams(n.slice(1)),t=e.get("s");if(!t)return null;let i=null;return t.startsWith("z:")&&typeof DecompressionStream<"u"?i=await q0(t.slice(2)):t.startsWith("p:")&&(i=new TextDecoder().decode(jc(t.slice(2)))),i?{doc:i,defines:K0(e.get("d")??"")}:null}catch{return null}}const $i=`precision mediump float; uniform float u_time; uniform vec2 u_resolution; @@ -93,5 +94,5 @@ void main() { gl_FragColor = vec4(col, 1.0); } -`,Pc=Bc(location.hash),ai=Pc?Vi:s0()??Vi,d0=document.getElementById("editor-pane"),p0=document.getElementById("editor-cm"),m0=document.getElementById("define-panel"),g0=document.getElementById("info-panel"),y0=document.getElementById("canvas"),b0=document.getElementById("status-ok"),w0=document.getElementById("status-err"),Gl=document.getElementById("error-overlay"),Yl=document.getElementById("ac-checkbox"),x0=document.getElementById("divider"),v0=document.getElementById("body"),k0=document.getElementById("year");k0.textContent=String(new Date().getFullYear());const Ms=document.getElementById("fps"),yn=document.getElementById("pause-btn"),Nc=t0(g0),Yi=n0(m0,()=>{Ee==null||Ee.updateShader(ho(Ut.getDoc(),Yi.getOverrides())),co(Ut.getDoc())}),Ut=Vg(p0,ai,{onChange:n=>{Yi.update(n),C0(n)},onCursorLine:(n,e)=>Nc(n,e)});function S0(n){Ut.setErrorLines(n),Tn(b0,!!n),Tn(w0,!n),Tn(Gl,!n),Gl.textContent=n??""}let _r=null,Ee,Xl=0,Ds=null;function lr(){return Yi.getOverrides()}async function co(n){const e=++Xl,t=await Ic(n,lr());e===Xl&&history.replaceState(null,"","#"+t)}function C0(n){_r&&clearTimeout(_r),_r=setTimeout(()=>{Ee==null||Ee.updateShader(ho(n,lr())),Ds!==n&&o0(n),Ds=null,co(n)},280)}Ee=Jg(y0,S0,n=>{Ms.classList.remove("hidden"),Ms.textContent=`${n} fps`});Yi.update(ai);Ee==null||Ee.updateShader(ho(ai,lr()));ai!==Vi&&co(ai);Nc(ai.split(` -`)[0],1);Pc&&u0(location.hash).then(n=>{if(!n){console.warn("Ignoring malformed share link in URL fragment");return}Yi.setOverrides(n.defines),Ds=n.doc,Ut.setDoc(n.doc)});Yl.addEventListener("change",()=>{Ut.setAutocomplete(Yl.checked)});yn.addEventListener("click",()=>{const n=yn.textContent==="Pause";Ee==null||Ee.setRunning(!n),yn.textContent=n?"Play":"Pause",yn.title=n?"Resume rendering":"Pause or resume rendering",n&&Ms.classList.add("hidden")});const A0=document.getElementById("reset-btn");A0.addEventListener("click",()=>{Ut.setDoc(Vi)});const Ot=document.getElementById("share-btn");Ot.addEventListener("click",async()=>{const n=Ut.getDoc(),e=location.origin+location.pathname,t=n===Vi?e:e+"#"+await Ic(n,lr());navigator.clipboard.writeText(t).then(()=>{const i=Ot.textContent;Ot.textContent="Copied",setTimeout(()=>{Ot.textContent=i},1200)}).catch(()=>{const i=Ot.textContent;Ot.textContent="Copy failed",setTimeout(()=>{Ot.textContent=i},1200)})});const T0=2e3,Fc=document.getElementById("app"),M0=document.getElementById("present-btn"),$n=document.getElementById("exit-present-btn");let Nt=null;function bn(){$n.classList.add("visible"),Nt&&clearTimeout(Nt),Nt=setTimeout(()=>{$n.classList.remove("visible"),Nt=null},T0)}function fo(n){Fc.classList.toggle("presenting",n),n?(document.addEventListener("pointermove",bn),document.addEventListener("pointerdown",bn)):(document.removeEventListener("pointermove",bn),document.removeEventListener("pointerdown",bn),Nt&&clearTimeout(Nt),Nt=null,$n.classList.remove("visible"))}M0.addEventListener("click",()=>fo(!0));$n.addEventListener("click",()=>fo(!1));document.addEventListener("keydown",n=>{n.key==="Escape"&&Fc.classList.contains("presenting")&&fo(!1)});r0(x0,v0,d0); +`,Yc=Kc(location.hash),hi=Yc?$i:_0()??$i,G0=document.getElementById("editor-pane"),Y0=document.getElementById("editor-cm"),X0=document.getElementById("define-panel"),J0=document.getElementById("info-panel"),Q0=document.getElementById("canvas"),Z0=document.getElementById("status-ok"),ey=document.getElementById("status-err"),oa=document.getElementById("error-overlay"),Di=document.getElementById("ac-checkbox"),ty=document.getElementById("divider"),iy=document.getElementById("body"),ny=document.getElementById("year");ny.textContent=String(new Date().getFullYear());const Rs=document.getElementById("fps"),kn=document.getElementById("pause-btn"),Xc=I0(J0),en=N0(X0,()=>{Ee==null||Ee.updateShader(bo(Tt.getDoc(),en.getOverrides())),wo(Tt.getDoc())}),Tt=w0(Y0,hi,{onChange:n=>{en.update(n),sy(n)},onCursorLine:(n,e)=>Xc(n,e)});function ry(n){Tt.setErrorLines(n),Rn(Z0,!!n),Rn(ey,!n),Rn(oa,!n),oa.textContent=n??""}let $r=null,Ee,la=0,Bs=null;function dr(){return en.getOverrides()}async function wo(n){const e=++la,t=await Gc(n,dr());e===la&&history.replaceState(null,"","#"+t)}function sy(n){$r&&clearTimeout($r),$r=setTimeout(()=>{Ee==null||Ee.updateShader(bo(n,dr())),Bs!==n&&W0(n),Bs=null,wo(n)},280)}Ee=O0(Q0,ry,n=>{Rs.classList.remove("hidden"),Rs.textContent=`${n} fps`});en.update(hi);Ee==null||Ee.updateShader(bo(hi,dr()));hi!==$i&&wo(hi);Xc(hi.split(` +`)[0],1);Yc&&j0(location.hash).then(n=>{if(!n){console.warn("Ignoring malformed share link in URL fragment");return}en.setOverrides(n.defines),Bs=n.doc,Tt.setDoc(n.doc)});const aa=V0();aa!==null&&(Di.checked=aa);Tt.setAutocomplete(Di.checked);Di.addEventListener("change",()=>{Tt.setAutocomplete(Di.checked),H0(Di.checked)});kn.addEventListener("click",()=>{const n=kn.textContent==="Pause";Ee==null||Ee.setRunning(!n),kn.textContent=n?"Play":"Pause",kn.title=n?"Resume rendering":"Pause or resume rendering",n&&Rs.classList.add("hidden")});const oy=document.getElementById("reset-btn");oy.addEventListener("click",()=>{Tt.setDoc($i)});const Rt=document.getElementById("share-btn");Rt.addEventListener("click",async()=>{const n=Tt.getDoc(),e=location.origin+location.pathname,t=n===$i?e:e+"#"+await Gc(n,dr());navigator.clipboard.writeText(t).then(()=>{const i=Rt.textContent;Rt.textContent="Copied",setTimeout(()=>{Rt.textContent=i},1200)}).catch(()=>{const i=Rt.textContent;Rt.textContent="Copy failed",setTimeout(()=>{Rt.textContent=i},1200)})});const ly=2e3,Jc=document.getElementById("app"),ay=document.getElementById("present-btn"),Yn=document.getElementById("exit-present-btn");let _t=null;function Sn(){Yn.classList.add("visible"),_t&&clearTimeout(_t),_t=setTimeout(()=>{Yn.classList.remove("visible"),_t=null},ly)}function xo(n){Jc.classList.toggle("presenting",n),n?(document.addEventListener("pointermove",Sn),document.addEventListener("pointerdown",Sn)):(document.removeEventListener("pointermove",Sn),document.removeEventListener("pointerdown",Sn),_t&&clearTimeout(_t),_t=null,Yn.classList.remove("visible"))}ay.addEventListener("click",()=>xo(!0));Yn.addEventListener("click",()=>xo(!1));document.addEventListener("keydown",n=>{n.key==="Escape"&&Jc.classList.contains("presenting")&&xo(!1)});F0(ty,iy,G0); diff --git a/docs/index.html b/docs/index.html index 41fa104..be90724 100644 --- a/docs/index.html +++ b/docs/index.html @@ -27,13 +27,23 @@ + + + + - + @@ -50,7 +60,7 @@
diff --git a/index.html b/index.html index 9d9a849..47bcbf3 100644 --- a/index.html +++ b/index.html @@ -27,6 +27,16 @@ + + + + @@ -48,7 +58,7 @@
diff --git a/src/editor.ts b/src/editor.ts index a26d40d..36c2b49 100644 --- a/src/editor.ts +++ b/src/editor.ts @@ -4,13 +4,33 @@ import { defaultKeymap, history, historyKeymap, indentWithTab, undo, redo } from import { StreamLanguage, bracketMatching, indentOnInput } from "@codemirror/language"; import { shader } from "@codemirror/legacy-modes/mode/clike"; import { oneDark } from "@codemirror/theme-one-dark"; -import { autocompletion, closeBrackets, completionKeymap, acceptCompletion } from "@codemirror/autocomplete"; +import { autocompletion, closeBrackets, completionKeymap, acceptCompletion, startCompletion } from "@codemirror/autocomplete"; import { glslCompletionSource } from "./glsl-completions"; import { ERROR_GUTTER_CLASS, ERROR_LINE_CLASS, ERROR_MARKER_CLASS, setErrorLinesEffect, errorLinesField, errorGutter, parseErrorLines } from "./error-lines"; const glslLang = StreamLanguage.define(shader); const autocompleteComp = new Compartment(); +// Typing `.` or `[` after an identifier should open member completion for the +// variable left of it. CM6 only auto-opens the popup on word characters, so +// these keys insert the trigger char and then explicitly start completion. +const memberTriggerKeymap = keymap.of([ + { key: ".", run: insertThenComplete(".") }, + { key: "[", run: insertThenComplete("[") }, +]); + +function insertThenComplete(ch: string): (view: EditorView) => boolean { + return (view) => { + const { from, to } = view.state.selection.main; + view.dispatch({ + changes: { from, to, insert: ch }, + selection: { anchor: from + ch.length }, + }); + startCompletion(view); + return true; + }; +} + const baseTheme = EditorView.theme({ "&": { height: "100%", backgroundColor: "#0d0f14" }, ".cm-scroller": { overflow: "auto", height: "100%" }, @@ -58,7 +78,7 @@ const baseTheme = EditorView.theme({ color: "#c0caf5", }, ".cm-completionLabel": { color: "#c0caf5" }, - ".cm-completionDetail": { color: "#7aa2f7", fontSize: "0.85rem", fontStyle: "normal", marginLeft: "8px" }, + ".cm-completionDetail": { color: "#7aa2f7", opacity: 0.55, fontSize: "0.85rem", fontStyle: "normal", marginLeft: "8px" }, ".cm-completionMatchedText": { color: "#9ece6a", fontWeight: "700", textDecoration: "none" }, // Info popup beside completion ".cm-tooltip.cm-completionInfo": { @@ -99,6 +119,7 @@ export function createEditor( errorLinesField, errorGutter, Prec.highest(keymap.of([{ key: "Tab", run: acceptCompletion }])), + Prec.high(memberTriggerKeymap), Prec.high(keymap.of(completionKeymap)), keymap.of([...defaultKeymap, ...historyKeymap, indentWithTab]), EditorView.lineWrapping, diff --git a/src/glsl-completions.ts b/src/glsl-completions.ts index c6549ca..67750ed 100644 --- a/src/glsl-completions.ts +++ b/src/glsl-completions.ts @@ -1,5 +1,6 @@ import { CompletionContext, CompletionResult, Completion } from "@codemirror/autocomplete"; import { GLSL_DOCS, DocKind } from "./glsl-docs"; +import { scanVariables, membersForType, constructorCompletions } from "./glsl-vars"; const CM_TYPE: Record = { function: "function", @@ -9,7 +10,7 @@ const CM_TYPE: Record = { keyword: "keyword", }; -// Build the completion list once — it never changes +// Build the keyword/function completion list once — never changes const GLSL_COMPLETIONS: Completion[] = Object.entries(GLSL_DOCS).map(([label, doc]) => ({ label, type: CM_TYPE[doc.kind], @@ -18,25 +19,64 @@ const GLSL_COMPLETIONS: Completion[] = Object.entries(GLSL_DOCS).map(([label, do boost: doc.kind === "function" ? 1 : 0, })); +// Resolver: look up the type of an identifier left of a `.` or `[` in the current doc. +function resolveType(ctx: CompletionContext, identEnd: number): string | null { + const line = ctx.state.doc.lineAt(ctx.pos).text; + const start = identEnd - 1; + if (start < 0) return null; + const ident = line.slice(0, identEnd).match(/(\w+)$/); + if (!ident) return null; + const vars = scanVariables(ctx.state.doc.toString()); + return vars.get(ident[1]) ?? null; +} + export function glslCompletionSource(ctx: CompletionContext): CompletionResult | null { - // Match a word that is at least 1 character, preceded by a word boundary + const mainLine = ctx.state.doc.lineAt(ctx.pos); + const line = mainLine.text; + const pos = ctx.pos - mainLine.from; // line-relative cursor offset // = cursor offset in the line + const ch = pos > 0 ? line[pos - 1] : ""; + + // ── Bracket context: `m[` — matrix-index skeleton ───────────────────── + if (ch === "[" && pos >= 2 && /\w/.test(line[pos - 2])) { + const type = resolveType(ctx, pos - 1); + if (type) { + // Vectors are indexed with dot-swizzles, not `[i]`; offering a swizzle + // char here would replace the `[` and produce `vx`. Only matrices get a + // bracket skeleton. (Scalars already return no members.) + if (/^[ib]?vec\d$/.test(type)) return null; + const options = membersForType(type); + // from covers the typed `[`, so the skeleton replaces it. + if (options.length > 0) return { from: ctx.pos - 1, options, validFor: /^\[?\d*$/ }; + } + return null; + } + + // ── Dot-member context: `q.` — swizzle accessors ────────────────────── + if (ch === "." && pos >= 2 && /\w/.test(line[pos - 2])) { + const type = resolveType(ctx, pos - 1); + if (type) { + const options = membersForType(type); + if (options.length > 0) return { from: ctx.pos, options, validFor: /^\w*$/ }; + } + return null; + } + + // ── Word context: keyword / function / type / constructor ────────────── const word = ctx.matchBefore(/\w+/); if (!word) return null; - // Don't suggest when the user hasn't typed at least 1 char OR - // cursor is in the middle of a word and wasn't explicitly triggered if (word.from === word.to && !ctx.explicit) return null; const typed = word.text.toLowerCase(); + const keywordOpts = GLSL_COMPLETIONS.filter(c => + c.label.toLowerCase().startsWith(typed) + ); - const options = GLSL_COMPLETIONS.filter(c => + const ctorOpts = constructorCompletions().filter(c => c.label.toLowerCase().startsWith(typed) ); + const options = [...keywordOpts, ...ctorOpts]; if (options.length === 0) return null; - return { - from: word.from, - options, - validFor: /^\w*$/, - }; + return { from: word.from, options, validFor: /^\w*$/ }; } diff --git a/src/glsl-vars.ts b/src/glsl-vars.ts new file mode 100644 index 0000000..1c5cd5f --- /dev/null +++ b/src/glsl-vars.ts @@ -0,0 +1,135 @@ +import { Completion, snippetCompletion } from "@codemirror/autocomplete"; +import { EditorSelection } from "@codemirror/state"; + +/** + * Variable → type tracking for the editor's autocomplete. + * + * Scans the current doc for GLSL variable declarations and exposes the member / + * constructor completions each type supports, so a completion source can say + * "the identifier left of `.` is a vec4, so offer its swizzle accessors". + * + * This is deliberately a shallow regex scan, not a full GLSL parser — the same + * pragmatic trade the preprocessor and line-explainer already make. + */ + +// The GLSL scalar/vector/matrix/sampler types a variable can be declared with. +const KNOWN_TYPES = new Set([ + "float", "int", "uint", "bool", "double", + "vec2", "vec3", "vec4", + "ivec2", "ivec3", "ivec4", + "bvec2", "bvec3", "bvec4", + "mat2", "mat3", "mat4", + "sampler2D", "samplerCube", +]); + +/** Recognize a vector type and the number of its components, else null. */ +function vectorComponents(type: string): number | null { + const m = type.match(/^[ib]?vec(\d)$/); + return m ? Number(m[1]) : null; +} + +/** Recognize a matrix type and its dimension, else null. */ +function matrixDimension(type: string): number | null { + const m = type.match(/^mat(\d)$/); + return m ? Number(m[1]) : null; +} + +const SWIZZLE: { char: string; detail: string }[] = [ + { char: "x", detail: "x component" }, + { char: "y", detail: "y component" }, + { char: "z", detail: "z component" }, + { char: "w", detail: "w component" }, + { char: "r", detail: "red channel" }, + { char: "g", detail: "green channel" }, + { char: "b", detail: "blue channel" }, + { char: "a", detail: "alpha channel" }, + { char: "s", detail: "s texture coord" }, + { char: "t", detail: "t texture coord" }, + { char: "p", detail: "p texture coord" }, + { char: "q", detail: "q texture coord" }, +]; + +/** + * Scan GLSL source for variable declarations (name → type). + * + * Handles unqualified, `uniform`/`in`/`out`/`varying`/`attribute`, `const`, + * and precision-qualified declarations, with or without an initializer or an + * array suffix. Lines with `//` comments are ignored, so a declaration inside + * a comment never registers. Later declarations of the same name win + * (redeclaration updates the type); plain reassignment (`q = other;`) is not + * tracked — the type is left at the last declaration. + */ +export function scanVariables(src: string): Map { + const vars = new Map(); + // Optional qualifier span and precision, then [array] [= init]; + const decl = /^(?:(?:const|uniform|in|out|varying|attribute)\s+)?(?:(?:highp|mediump|lowp)\s+)?(\w+)\s+(\w+)(?:\s*\[[^\]]*\])?(?:\s*=\s*[^;]*?)?\s*;?$/; + + for (const raw of src.split("\n")) { + const line = raw.split("//")[0].trim(); + const m = line.match(decl); + if (!m) continue; + // Only a known type token counts as a declaration — this rejects + // statements like `return value;` from being misread as `type name`. + if (!KNOWN_TYPES.has(m[1])) continue; + vars.set(m[2], m[1]); + } + return vars; +} + +/** + * Dot-members and bracket-skeleton completions for a resolved variable type. + * + * Vectors → swizzle accessors (positions, colors, texture coords). Matrices → a + * `m[0][0]` indexing skeleton whose row index is left selected. Scalars, + * samplers, and arrays have no such accessors. + */ +export function membersForType(type: string): Completion[] { + const components = vectorComponents(type); + if (components !== null) { + // Only offer swizzles the vector dimension actually supports: a vec2 has + // `.x .y .r .g .s .t`, a vec3 adds `.z .b .p`, a vec4 adds `.w .a .q`. + // The user already typed `.`, so each completion applies just the swizzle + // char at the cursor (from = after the dot), never a leading `.`. + return SWIZZLE.filter((_, i) => i % 4 < components).map(({ char, detail }) => ({ + label: "." + char, + type: "keyword", + apply: char, + detail, + })); + } + if (matrixDimension(type) !== null) { + // The user already typed `[`, so this replaces it (from = position of the + // `[`) with the full skeleton. A plain apply is used instead of a snippet: + // the two-field snippet's field activation raced (intermittently degrading + // to empty fields), and `[0][0]` with the cursor in the row index needs no + // Tab-through-column chrome. + return [{ + label: "[row][col]", + type: "keyword", + detail: "index skeleton", + apply: (view, _completion, from, to) => { + view.dispatch({ + changes: { from, to, insert: "[0][0]" }, + selection: EditorSelection.cursor(from + 1), + }); + }, + }]; + } + return []; +} + +/** Types that can be constructed with a literal constructor. */ +const CONSTRUCTOR_TYPES = [ + "vec2", "vec3", "vec4", + "ivec2", "ivec3", "ivec4", + "bvec2", "bvec3", "bvec4", + "mat2", "mat3", "mat4", + "float", "int", "uint", "bool", +]; + +/** Constructor completions shown alongside the bare type keyword. */ +export function constructorCompletions(): Completion[] { + return CONSTRUCTOR_TYPES.map((type) => + snippetCompletion(type + "(${0})", { label: type, detail: "constructor", boost: -100 } as Completion) + ); +} diff --git a/src/main.ts b/src/main.ts index c36d4be..970b1e9 100644 --- a/src/main.ts +++ b/src/main.ts @@ -5,7 +5,7 @@ import { createInfoPanel } from "./info-panel"; import { createDefinePanel } from "./define-panel"; import { createDividerResizer } from "./resizer"; import { toggleHidden } from "./dom"; -import { loadDoc, storeDoc } from "./persistence"; +import { loadDoc, storeDoc, loadAutocomplete, storeAutocomplete } from "./persistence"; import { preprocess } from "./glsl-preprocessor"; import { decodeShare, encodeShare, isShareHash } from "./share"; @@ -147,8 +147,16 @@ if (hasSharedLink) { } // ── Autocomplete toggle ────────────────────────────────── +// Single source of truth: checkbox checked ⇔ localStorage. Persist so the user's +// preference survives reloads. Autocomplete defaults ON for new visitors. +const storedAc = loadAutocomplete(); +if (storedAc !== null) { + acCheckbox.checked = storedAc; +} +editor.setAutocomplete(acCheckbox.checked); acCheckbox.addEventListener("change", () => { editor.setAutocomplete(acCheckbox.checked); + storeAutocomplete(acCheckbox.checked); }); // ── Pause/resume rendering ─────────────────────────────── diff --git a/src/persistence.ts b/src/persistence.ts index 3092512..a1a1471 100644 --- a/src/persistence.ts +++ b/src/persistence.ts @@ -2,6 +2,7 @@ // localStorage throws in some private-browsing modes; never let that break editing. const DOC_KEY = "glsl-editor.doc"; +const AC_KEY = "glsl.autocomplete"; export function loadDoc(): string | null { try { @@ -18,3 +19,20 @@ export function storeDoc(doc: string) { // storage unavailable — skip saving } } + +export function loadAutocomplete(): boolean | null { + try { + const stored = localStorage.getItem(AC_KEY); + return stored === null ? null : stored === "1"; + } catch { + return null; + } +} + +export function storeAutocomplete(enabled: boolean) { + try { + localStorage.setItem(AC_KEY, enabled ? "1" : "0"); + } catch { + // storage unavailable — skip saving + } +} diff --git a/test/autocomplete.e2e.ts b/test/autocomplete.e2e.ts new file mode 100644 index 0000000..eca8a85 --- /dev/null +++ b/test/autocomplete.e2e.ts @@ -0,0 +1,106 @@ +import { expect, test } from "@playwright/test"; +import { EDITOR, setContent } from "./helpers"; + +// CodeMirror renders the completion menu as a listbox whose options each carry +// the completion text. Use ARIA roles for robustness. +function menu(page: import("@playwright/test").Page) { + return page.getByRole("listbox", { name: "Completions" }); +} + +// The completion label only, not the trailing detail/signature. +async function menuOptionLabels(page: import("@playwright/test").Page): Promise { + return menu(page).getByRole("option").locator(".cm-completionLabel").allTextContents(); +} + +const fullMenuTexts = (page: import("@playwright/test").Page) => + menu(page).getByRole("option").allTextContents(); + +// Select a completion by clicking its option. (Enter-to-accept is intentionally +// suppressed by CodeMirror for `interactionDelay` (default 75 ms) after a menu +// opens, so an instant Enter drops the accept and inserts a newline. Clicking +// calls applyCompletion directly, bypassing that gate, and is deterministic.) +async function clickOption(page: import("@playwright/test").Page, label: string) { + await expect(menu(page).getByRole("option", { name: label })).toBeVisible(); + await menu(page).getByRole("option", { name: label }).click(); +} + +// Autocomplete defaults on; toggle via the checkbox so completion sources run +// (or don't) as the test expects. +async function setAutocomplete(page: import("@playwright/test").Page, on: boolean) { + const cb = page.locator("#ac-checkbox"); + if ((await cb.isChecked()) !== on) { + if (on) { + await cb.check(); + } else { + await cb.uncheck(); + } + } +} + +test("typing . after a declared vec4 offers swizzle members", async ({ page }) => { + await page.goto("/"); + await setAutocomplete(page, true); + await setContent(page, "vec4 color = vec4(1.0);\n"); + await page.keyboard.type("color."); + await expect(menu(page)).toBeVisible(); + const options = await menuOptionLabels(page); + for (const c of ["x", "y", "z", "w", "r", "g", "b", "a", "s", "t", "p", "q"]) { + expect(options).toContain("." + c); + } + // Each swizzle member also surfaces a readable context hint in the popup. + const all = await fullMenuTexts(page); + for (const c of ["component", "channel", "texture coord"]) { + expect(all.some((o) => o.endsWith(c))).toBe(true); + } +}); + +test("accepting a swizzle member inserts it without doubling the dot", async ({ page }) => { + await page.goto("/"); + await setAutocomplete(page, true); + await setContent(page, "vec4 color = vec4(1.0);\n"); + await page.keyboard.type("color."); + await expect(menu(page)).toBeVisible(); + // Click the first swizzle option (`.x`); it must apply just the char, so the + // result is `color.x` — never a double dot. + await clickOption(page, ".x"); + await expect(page.locator(EDITOR)).toContainText("color.x"); + expect(await page.locator(EDITOR).textContent()).not.toContain(".."); +}); + +test("typing [ after a declared matrix offers and applies a bracket skeleton", async ({ page }) => { + await page.goto("/"); + await setAutocomplete(page, true); + await setContent(page, "mat3 m;\n"); + await page.keyboard.type("m["); + await expect(menu(page)).toBeVisible(); + const labels = await menuOptionLabels(page); + expect(labels).toContain("[row][col]"); + await clickOption(page, "[row][col]"); + await expect(page.locator(EDITOR)).toContainText("m[0][0]"); +}); + +test("typing a type word lists the bare keyword and a constructor option", async ({ page }) => { + await page.goto("/"); + await setAutocomplete(page, true); + await page.click(EDITOR); + await page.keyboard.type("vec3"); + await expect(menu(page)).toBeVisible(); + const labels = await menuOptionLabels(page); + // The bare type keyword is offered... + expect(labels).toContain("vec3"); + // ...alongside a snippet constructor. + expect(labels.some((o) => o.startsWith("vec3"))).toBe(true); + const all = await fullMenuTexts(page); + expect(all.some((o) => o.includes("constructor"))).toBe(true); +}); + +test("typing [ after a vector does not offer dot-member completions", async ({ page }) => { + await page.goto("/"); + await setAutocomplete(page, true); + await setContent(page, "vec4 color;\n"); + await page.keyboard.type("color["); + await page.waitForTimeout(200); + // A swizzle char must never replace the `[` (which would yield `colorx`), so + // no member menu opens for a vector in bracket context. + await expect(menu(page)).toBeHidden(); +}); diff --git a/test/boot.e2e.ts b/test/boot.e2e.ts index 3e57433..378f259 100644 --- a/test/boot.e2e.ts +++ b/test/boot.e2e.ts @@ -9,3 +9,26 @@ test("boots with default shader, canvas, and live status", async ({ page }) => { await expect(page.locator("#error-overlay")).toBeHidden(); await expect(page.locator(EDITOR)).toContainText("u_time"); }); + +test("loads the 10k24 GA4 gtag snippet", async ({ page }) => { + // The glsl editor shares the studio's GA4 property; keep the snippet present. + await page.goto("/"); + await expect(page.locator("script[src*=\"googletagmanager.com/gtag/js?id=G-CPZFEJK5BG\"]")).toHaveCount(1); + const hasConfig = await page.evaluate(() => + (window as { dataLayer?: Array> }).dataLayer?.some((e) => e[0] === "config" && e[1] === "G-CPZFEJK5BG") ?? false + ); + expect(hasConfig).toBe(true); +}); + +test("autocomplete preference persists across reloads", async ({ page }) => { + await page.goto("/"); + const cb = page.locator("#ac-checkbox"); + // New visitor defaults to autocomplete on. + await expect(cb).toBeChecked(); + await cb.uncheck(); + await page.reload(); + await expect(cb).not.toBeChecked(); + await cb.check(); + await page.reload(); + await expect(cb).toBeChecked(); +}); diff --git a/test/glsl-vars.test.ts b/test/glsl-vars.test.ts new file mode 100644 index 0000000..2f76a4b --- /dev/null +++ b/test/glsl-vars.test.ts @@ -0,0 +1,131 @@ +import { describe, expect, it } from "vitest"; +import { scanVariables, membersForType, constructorCompletions } from "../src/glsl-vars"; + +describe("scanVariables", () => { + it("finds unqualified vec4 declaration", () => { + const vars = scanVariables("vec4 color;"); + expect(vars.get("color")).toBe("vec4"); + }); + + it("finds uniform declaration", () => { + const vars = scanVariables("uniform sampler2D iChannel0;"); + expect(vars.get("iChannel0")).toBe("sampler2D"); + }); + + it("finds const declaration", () => { + const vars = scanVariables("const float PI = 3.14;"); + expect(vars.get("PI")).toBe("float"); + }); + + it("finds precision-qualified declaration", () => { + const vars = scanVariables("highp vec2 uv;"); + expect(vars.get("uv")).toBe("vec2"); + }); + + it("finds in/out declarations", () => { + const vars = scanVariables("in vec3 normal;\nout vec4 fragColor;"); + expect(vars.get("normal")).toBe("vec3"); + expect(vars.get("fragColor")).toBe("vec4"); + }); + + it("finds array declaration", () => { + const vars = scanVariables("float arr[8];"); + expect(vars.get("arr")).toBe("float"); + }); + + it("finds declaration with initializer", () => { + const vars = scanVariables("vec3 pos = vec3(0.0);"); + expect(vars.get("pos")).toBe("vec3"); + }); + + it("ignores declarations inside comments", () => { + const vars = scanVariables("// vec4 hidden;\nvec4 visible;"); + expect(vars.has("hidden")).toBe(false); + expect(vars.get("visible")).toBe("vec4"); + }); + + it("ignores non-declaration lines", () => { + const vars = scanVariables("fragColor = vec4(1.0);\nreturn value;"); + expect(vars.size).toBe(0); + }); + + it("later declaration wins for same name", () => { + const vars = scanVariables("vec4 q;\nvec2 q;"); + expect(vars.get("q")).toBe("vec2"); + }); + + it("ignores unknown types", () => { + const vars = scanVariables("MyStruct foo;"); + expect(vars.has("foo")).toBe(false); + }); +}); + +describe("membersForType", () => { + it("returns swizzle accessors for vec2 (dimension-limited)", () => { + const m = membersForType("vec2"); + expect(m.map((c) => c.label)).toEqual([".x", ".y", ".r", ".g", ".s", ".t"]); + }); + + it("returns swizzle accessors for vec3 (dimension-limited)", () => { + const m = membersForType("vec3"); + expect(m.map((c) => c.label)).toEqual([".x", ".y", ".z", ".r", ".g", ".b", ".s", ".t", ".p"]); + }); + + it("returns all swizzle accessors for vec4", () => { + const m = membersForType("vec4"); + expect(m.map((c) => c.label)).toEqual([".x", ".y", ".z", ".w", ".r", ".g", ".b", ".a", ".s", ".t", ".p", ".q"]); + }); + + it("returns bracket skeleton for mat3", () => { + const m = membersForType("mat3"); + expect(m).toHaveLength(1); + expect(m[0].label).toBe("[row][col]"); + }); + + it("returns bracket skeleton for mat4", () => { + const m = membersForType("mat4"); + expect(m).toHaveLength(1); + expect(m[0].label).toBe("[row][col]"); + }); + + it("returns empty for float", () => { + expect(membersForType("float")).toEqual([]); + }); + + it("returns empty for sampler2D", () => { + expect(membersForType("sampler2D")).toEqual([]); + }); + + it("returns empty for bool", () => { + expect(membersForType("bool")).toEqual([]); + }); +}); + +describe("constructorCompletions", () => { + const ctors = constructorCompletions(); + const labels = ctors.map((c) => c.label); + + it("includes all vec types", () => { + expect(labels).toContain("vec2"); + expect(labels).toContain("vec3"); + expect(labels).toContain("vec4"); + }); + + it("includes all matrix types", () => { + expect(labels).toContain("mat2"); + expect(labels).toContain("mat3"); + expect(labels).toContain("mat4"); + }); + + it("includes scalar types", () => { + expect(labels).toContain("float"); + expect(labels).toContain("int"); + expect(labels).toContain("uint"); + expect(labels).toContain("bool"); + }); + + it("excludes sampler types", () => { + expect(labels).not.toContain("sampler2D"); + expect(labels).not.toContain("samplerCube"); + }); +});