jbrowse-plugin-msaview 5.13.0 → 5.14.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,12 +18,14 @@ export interface ConnectedDomain {
18
18
  */
19
19
  regions: GenomeRegion[];
20
20
  }
21
- /** A categorical color object, spelt as a JBrowse display's `color` config. */
21
+ /** A categorical color channel, spelt as a JBrowse display's `encoding.color`. */
22
22
  export interface DomainColor {
23
23
  field: 'accession';
24
- domain: string[];
25
- range: string[];
26
- labels: string[];
24
+ scale: {
25
+ domain: string[];
26
+ range: string[];
27
+ names: string[];
28
+ };
27
29
  }
28
30
  export interface ConnectedDomains {
29
31
  /** largest first by residues covered */
@@ -5,10 +5,10 @@
5
5
  * In grammar-of-graphics terms, `features` is the data and `kind` the field a
6
6
  * consumer filters its layers on (protein3d draws `domain` as cartoon and
7
7
  * `site` as side chains). `color` is the color channel: a categorical scale
8
- * over `accession`, whose `domain` lists the accessions, `range` the fills
9
- * the alignment draws them in, and `labels` what a guide (a legend) names
10
- * them. Every surface reads that one object: the genome track's display, the
11
- * structure's layers, its overview rows and each legend.
8
+ * over `accession`, whose `scale.domain` lists the accessions, `scale.range`
9
+ * the fills the alignment draws them in, and `scale.names` what a guide (a
10
+ * legend) names them. Every surface reads that one object: the genome track's
11
+ * display, the structure's layers, its overview rows and each legend.
12
12
  */
13
13
  import { isSiteType } from 'react-msaview';
14
14
  import { seqPosToGenomeRegions } from './msaCoordToGenomeCoord';
@@ -89,9 +89,11 @@ export function connectedDomains(model) {
89
89
  features: placed.map(p => p.feature),
90
90
  color: {
91
91
  field: 'accession',
92
- domain: placed.map(p => p.feature.accession),
93
- range: placed.map(p => p.fill),
94
- labels: placed.map(p => p.feature.name),
92
+ scale: {
93
+ domain: placed.map(p => p.feature.accession),
94
+ range: placed.map(p => p.fill),
95
+ names: placed.map(p => p.feature.name),
96
+ },
95
97
  },
96
98
  };
97
99
  }
@@ -53,17 +53,19 @@ describe('connectedDomains on a reverse-strand transcript', () => {
53
53
  ],
54
54
  color: {
55
55
  field: 'accession',
56
- domain: ['site'],
57
- range: ['fill-site'],
58
- labels: ['legend site'],
56
+ scale: {
57
+ domain: ['site'],
58
+ range: ['fill-site'],
59
+ names: ['legend site'],
60
+ },
59
61
  },
60
62
  });
61
63
  });
62
64
  test('the longest comes first, in the features and the color domain alike', () => {
63
65
  const { features, color } = connectedDomains(source([annotation('site', 2, 4), annotation('domain', 1, 5)]));
64
66
  expect(features.map(d => d.accession)).toEqual(['domain', 'site']);
65
- expect(color.domain).toEqual(['domain', 'site']);
66
- expect(color.range).toEqual(['fill-domain', 'fill-site']);
67
+ expect(color.scale.domain).toEqual(['domain', 'site']);
68
+ expect(color.scale.range).toEqual(['fill-domain', 'fill-site']);
67
69
  expect(features[0].regions).toEqual([
68
70
  { refName: 'chr1', start: 100, end: 107 },
69
71
  { refName: 'chr1', start: 200, end: 208 },
@@ -108,7 +110,10 @@ describe('connectedDomains on a reverse-strand transcript', () => {
108
110
  expect(connectedDomains(source(annotations)).features).toEqual([]);
109
111
  expect(connectedDomains(source([annotation('domain', 1, 5)], { showDomains: false }))).toEqual({
110
112
  features: [],
111
- color: { field: 'accession', domain: [], range: [], labels: [] },
113
+ color: {
114
+ field: 'accession',
115
+ scale: { domain: [], range: [], names: [] },
116
+ },
112
117
  });
113
118
  });
114
119
  });
@@ -3,9 +3,9 @@ export declare function domainTrackId(viewId: string): string;
3
3
  /**
4
4
  * A session FeatureTrack drawing `domains` on the genome: one feature per
5
5
  * domain, one subfeature per region, so a domain spanning exons draws as boxes
6
- * joined across the intron. The display's color is the domains' color object,
7
- * a categorical scale over each feature's `accession`, so its key names each
8
- * color with its domain.
6
+ * joined across the intron. The display's `encoding.color` is the domains'
7
+ * color channel, a categorical scale over each feature's `accession`, so its
8
+ * key names each color with its domain.
9
9
  */
10
10
  export declare function domainTrackConf({ viewId, assemblyName, name, strand, domains, }: {
11
11
  viewId: string;
@@ -73,12 +73,18 @@ export declare function domainTrackConf({ viewId, assemblyName, name, strand, do
73
73
  displays: {
74
74
  type: string;
75
75
  displayId: string;
76
- color: {
77
- title: string;
78
- field: "accession";
79
- domain: string[];
80
- range: string[];
81
- labels: string[];
76
+ encoding: {
77
+ color: {
78
+ legend: {
79
+ title: string;
80
+ };
81
+ field: "accession";
82
+ scale: {
83
+ domain: string[];
84
+ range: string[];
85
+ names: string[];
86
+ };
87
+ };
82
88
  };
83
89
  }[];
84
90
  };
@@ -4,9 +4,9 @@ export function domainTrackId(viewId) {
4
4
  /**
5
5
  * A session FeatureTrack drawing `domains` on the genome: one feature per
6
6
  * domain, one subfeature per region, so a domain spanning exons draws as boxes
7
- * joined across the intron. The display's color is the domains' color object,
8
- * a categorical scale over each feature's `accession`, so its key names each
9
- * color with its domain.
7
+ * joined across the intron. The display's `encoding.color` is the domains'
8
+ * color channel, a categorical scale over each feature's `accession`, so its
9
+ * key names each color with its domain.
10
10
  */
11
11
  export function domainTrackConf({ viewId, assemblyName, name, strand, domains, }) {
12
12
  const trackId = domainTrackId(viewId);
@@ -44,7 +44,9 @@ export function domainTrackConf({ viewId, assemblyName, name, strand, domains, }
44
44
  {
45
45
  type: 'LinearBasicDisplay',
46
46
  displayId: `${trackId}-LinearBasicDisplay`,
47
- color: { ...domains.color, title: 'Domains' },
47
+ encoding: {
48
+ color: { ...domains.color, legend: { title: 'Domains' } },
49
+ },
48
50
  },
49
51
  ],
50
52
  };
@@ -20,9 +20,11 @@ const domains = {
20
20
  ],
21
21
  color: {
22
22
  field: 'accession',
23
- domain: ['cd1', 'cd2'],
24
- range: ['#1b9e77', '#d95f02'],
25
- labels: ['Hb beta-like', 'heme binding site'],
23
+ scale: {
24
+ domain: ['cd1', 'cd2'],
25
+ range: ['#1b9e77', '#d95f02'],
26
+ names: ['Hb beta-like', 'heme binding site'],
27
+ },
26
28
  },
27
29
  };
28
30
  const conf = domainTrackConf({
@@ -49,13 +51,15 @@ test('one feature per domain, one subfeature per region, spanning them all', ()
49
51
  [200, 208],
50
52
  ]);
51
53
  });
52
- test('the display paints through the domains color object and names each in the key', () => {
53
- expect(conf.displays[0].color).toEqual({
54
+ test('the display paints through the domains color channel and titles its key', () => {
55
+ expect(conf.displays[0].encoding.color).toEqual({
54
56
  field: 'accession',
55
- domain: ['cd1', 'cd2'],
56
- range: ['#1b9e77', '#d95f02'],
57
- labels: ['Hb beta-like', 'heme binding site'],
58
- title: 'Domains',
57
+ scale: {
58
+ domain: ['cd1', 'cd2'],
59
+ range: ['#1b9e77', '#d95f02'],
60
+ names: ['Hb beta-like', 'heme binding site'],
61
+ },
62
+ legend: { title: 'Domains' },
59
63
  });
60
64
  });
61
65
  test('a MAF view knows no strand, and the features carry none', () => {
@@ -243,20 +243,25 @@ describe('connectedDomains', () => {
243
243
  ],
244
244
  color: {
245
245
  field: 'accession',
246
- domain: ['cd1', 'cd2'],
247
- range: [fills.get('QUERY:cd1'), fills.get('QUERY:cd2')],
248
- labels: ['Hb beta-like', 'heme binding site'],
246
+ scale: {
247
+ domain: ['cd1', 'cd2'],
248
+ range: [fills.get('QUERY:cd1'), fills.get('QUERY:cd2')],
249
+ names: ['Hb beta-like', 'heme binding site'],
250
+ },
249
251
  },
250
252
  });
251
253
  });
252
254
  test('follows the overlay and the legend filter', () => {
253
255
  const model = domainView();
254
256
  model.setFilter('cd2', false);
255
- expect(model.connectedDomains.color.domain).toEqual(['cd1']);
257
+ expect(model.connectedDomains.color.scale.domain).toEqual(['cd1']);
256
258
  model.setShowDomains(false);
257
259
  expect(model.connectedDomains).toEqual({
258
260
  features: [],
259
- color: { field: 'accession', domain: [], range: [], labels: [] },
261
+ color: {
262
+ field: 'accession',
263
+ scale: { domain: [], range: [], names: [] },
264
+ },
260
265
  });
261
266
  });
262
267
  });
@@ -8,5 +8,5 @@ ${e??t}`,...s].join(`
8
8
  ${m}`,...l.map(f=>`>${f.label}
9
9
  ${f.sequence}`)].join(`
10
10
  `),onProgress:C,signal:I}),treeMetadata:JSON.stringify(E),warnings:p?[p]:[]}}async function pr({taxId:A,geneCandidates:t,onProgress:e,signal:n,...r}){e("Resolving gene at NCBI...");let o=await et(t,A,n);if(!o)throw new Error(`Could not resolve any of ${t.join(", ")} to an NCBI gene in taxon ${A}. Try the NCBI BLAST tab, which needs no gene identifier.`);let i=await br(o.geneId,n),s=await nt({geneId:o.geneId,onProgress:e,signal:n,...r});return{geneId:o.geneId,representative:i,rows:s}}var Dr={ncbi:"NCBI",panther:"PANTHER",uniref:"UniProt"};async function yr({geneCandidates:A,identity:t,referenceProteomesOnly:e,...n}){let r=await Dt({candidates:A,identity:t,referenceProteomesOnly:e,...n});return{geneId:r.query.id,representative:{accession:r.query.accession,sequence:r.query.sequence},rows:r.rows,warning:r.warning}}async function Nr({geneCandidates:A,...t}){let e=await St({candidates:A,...t});return{geneId:e.query?.geneRef??e.matched,representative:e.query,rows:e.rows}}async function kr(A,t,e){let n;try{let r=(await sA([A],e)).get(A);n=r?.commonName??r?.sciname}catch(r){if(F(r))throw r;console.warn("[msaview-orthologs] taxonomy name lookup failed:",r)}return aA([...t.map(r=>r.label),`${n??"query"}_query`]).at(-1)}async function br(A,t){try{return await tt(A,t)}catch(e){if(F(e))throw e;console.warn("[msaview-orthologs] query protein lookup failed:",e);return}}function Sr(A,t,e,n){let r={"Gene ID":t},o=FA(A.orthologParams?.selectedTranscript);return o&&(r.Transcript=o),n?.sequence===e&&(r.Accession=n.accession),r}function Mr(A){let t={"Scientific name":A.scientificName,Accession:A.protein,"Gene ID":A.geneId};return A.commonName&&(t["Common name"]=A.commonName),t}function YA(A,t=0){let e=A.getUint32(t,!0);return A.getUint32(t+4,!0)*4294967296+e}var Ie=16,xr={compressed:new Float64Array(0),uncompressed:new Float64Array(0)};function xt(A,t){let e=new Float64Array(t+1),n=new Float64Array(t+1),r=new DataView(A.buffer,A.byteOffset,A.byteLength);for(let o=0;o<t;o+=1){let i=o*Ie;e[o+1]=YA(r,i),n[o+1]=YA(r,i+8)}return{compressed:e,uncompressed:n}}function Rt(A,t){let e=0,n=A.length;for(;e<n;){let r=e+n>>>1;A[r]<=t?e=r+1:n=r}return e}var pA=class{filehandle;index;constructor({filehandle:t}){this.filehandle=t}_getIndex(){return this.index||(this.index=this._readIndex().catch(t=>{throw this.index=void 0,t})),this.index}async _readIndex(){let t=await this.filehandle.read(8,0),e=YA(new DataView(t.buffer,t.byteOffset,t.byteLength));if(e===0)return xt(new Uint8Array(0),0);if(e>Number.MAX_SAFE_INTEGER/Ie)throw new TypeError("integer overflow");let n=await this.filehandle.read(Ie*e,8);return xt(n,e)}async getRelevantBlocksForRead(t,e){if(t===0)return{...xr,nextCompressedPosition:void 0};let{compressed:n,uncompressed:r}=await this._getIndex(),o=Rt(r,e)-1,i=Rt(r,e+t-1);return{compressed:n.subarray(o,i),uncompressed:r.subarray(o,i),nextCompressedPosition:i<n.length?n[i]:void 0}}};var Qe=0;var Be=2;var DA=4;var Z=0,yA=1,Ft=2;var Gt=-5;function Rr(A,t){return Object.prototype.hasOwnProperty.call(A,t)}function Jt(A){for(var t=Array.prototype.slice.call(arguments,1);t.length;){var e=t.shift();if(e){if(typeof e!="object")throw new TypeError(e+"must be non-object");for(var n in e)Rr(e,n)&&(A[n]=e[n])}}return A}function PA(A,t){return A.length===t?A:A.subarray?A.subarray(0,t):(A.length=t,A)}var NA={arraySet:function(A,t,e,n,r){if(t.subarray&&A.subarray){A.set(t.subarray(e,e+n),r);return}for(var o=0;o<n;o++)A[r+o]=t[e+o]},flattenChunks:function(A){var t,e,n,r,o,i;for(n=0,t=0,e=A.length;t<e;t++)n+=A[t].length;for(i=new Uint8Array(n),r=0,t=0,e=A.length;t<e;t++)o=A[t],i.set(o,r),r+=o.length;return i},Buf8:function(A){return new Uint8Array(A)},Buf16:function(A){return new Uint16Array(A)},Buf32:function(A){return new Int32Array(A)}},kA={arraySet:function(A,t,e,n,r){for(var o=0;o<n;o++)A[r+o]=t[e+o]},flattenChunks:function(A){return[].concat.apply([],A)},Buf8:function(A){return new Array(A)},Buf16:function(A){return new Array(A)},Buf32:function(A){return new Array(A)}},QA=()=>{let A=typeof Uint8Array<"u"&&typeof Uint16Array<"u"&&typeof Int32Array<"u";return QA=()=>A,A},_=(A,t,e,n,r)=>(_=QA()?NA.arraySet:kA.arraySet,_(A,t,e,n,r)),HA=A=>(HA=QA()?NA.flattenChunks:kA.flattenChunks,HA(A)),Y=A=>(Y=QA()?NA.Buf8:kA.Buf8,Y(A)),X=A=>(X=QA()?NA.Buf16:kA.Buf16,X(A)),$=A=>($=QA()?NA.Buf32:kA.Buf32,$(A));var vt=function(){let A=!0;try{String.fromCharCode.apply(null,[0])}catch{A=!1}return vt=()=>A,A},Lt=function(){let A=!0;try{String.fromCharCode.apply(null,new Uint8Array(1))}catch{A=!1}return Lt=()=>A,A},Ce=function(A){for(var t=Y(256),e=0;e<256;e++)t[e]=e>=252?6:e>=248?5:e>=240?4:e>=224?3:e>=192?2:1;return t[254]=t[254]=1,Ce=n=>t[n],t[A]};function Ee(A){var t,e,n,r,o,i=A.length,s=0;for(r=0;r<i;r++)e=A.charCodeAt(r),(e&64512)===55296&&r+1<i&&(n=A.charCodeAt(r+1),(n&64512)===56320&&(e=65536+(e-55296<<10)+(n-56320),r++)),s+=e<128?1:e<2048?2:e<65536?3:4;for(t=new Uint8Array(s),o=0,r=0;o<s;r++)e=A.charCodeAt(r),(e&64512)===55296&&r+1<i&&(n=A.charCodeAt(r+1),(n&64512)===56320&&(e=65536+(e-55296<<10)+(n-56320),r++)),e<128?t[o++]=e:e<2048?(t[o++]=192|e>>>6,t[o++]=128|e&63):e<65536?(t[o++]=224|e>>>12,t[o++]=128|e>>>6&63,t[o++]=128|e&63):(t[o++]=240|e>>>18,t[o++]=128|e>>>12&63,t[o++]=128|e>>>6&63,t[o++]=128|e&63);return t}function Fr(A,t){if(t<65534&&(A.subarray&&Lt()||!A.subarray&&vt()))return String.fromCharCode.apply(null,PA(A,t));for(var e="",n=0;n<t;n++)e+=String.fromCharCode(A[n]);return e}function Ut(A){for(var t=new Uint8Array(A.length),e=0,n=t.length;e<n;e++)t[e]=A.charCodeAt(e);return t}function qt(A,t){var e,n,r,o,i=t||A.length,s=new Array(i*2);for(n=0,e=0;e<i;){if(r=A[e++],r<128){s[n++]=r;continue}if(o=Ce(r),o>4){s[n++]=65533,e+=o-1;continue}for(r&=o===2?31:o===3?15:7;o>1&&e<i;)r=r<<6|A[e++]&63,o--;if(o>1){s[n++]=65533;continue}r<65536?s[n++]=r:(r-=65536,s[n++]=55296|r>>10&1023,s[n++]=56320|r&1023)}return Fr(s,n)}function _t(A,t){var e;for(t=t||A.length,t>A.length&&(t=A.length),e=t-1;e>=0&&(A[e]&192)===128;)e--;return e<0||e===0?t:e+Ce(A[e])>t?e:t}function de(){this.text=0,this.time=0,this.xflags=0,this.os=0,this.extra=null,this.extra_len=0,this.name="",this.comment="",this.hcrc=0,this.done=!1}function bA(A,t,e,n){for(var r=A&65535|0,o=A>>>16&65535|0,i=0;e!==0;){i=e>2e3?2e3:e,e-=i;do r=r+t[n++]|0,o=o+r|0;while(--i);r%=65521,o%=65521}return r|o<<16|0}function Gr(){for(var A,t=[],e=0;e<256;e++){A=e;for(var n=0;n<8;n++)A=A&1?3988292384^A>>>1:A>>>1;t[e]=A}return t}var Yt=function(){let A=Gr();return Yt=()=>A,A};function J(A,t,e,n){var r=Yt(),o=n+e;A^=-1;for(var i=n;i<o;i++)A=A>>>8^r[(A^t[i])&255];return A^-1}var KA=30,Jr=12;function fe(A,t){var e,n,r,o,i,s,c,a,g,C,Q,I,d,h,u,l,p,m,B,E,y,f,k,w,D;e=A.state,n=A.next_in,w=A.input,r=n+(A.avail_in-5),o=A.next_out,D=A.output,i=o-(t-A.avail_out),s=o+(A.avail_out-257),c=e.dmax,a=e.wsize,g=e.whave,C=e.wnext,Q=e.window,I=e.hold,d=e.bits,h=e.lencode,u=e.distcode,l=(1<<e.lenbits)-1,p=(1<<e.distbits)-1;A:do{d<15&&(I+=w[n++]<<d,d+=8,I+=w[n++]<<d,d+=8),m=h[I&l];e:for(;;){if(B=m>>>24,I>>>=B,d-=B,B=m>>>16&255,B===0)D[o++]=m&65535;else if(B&16){E=m&65535,B&=15,B&&(d<B&&(I+=w[n++]<<d,d+=8),E+=I&(1<<B)-1,I>>>=B,d-=B),d<15&&(I+=w[n++]<<d,d+=8,I+=w[n++]<<d,d+=8),m=u[I&p];t:for(;;){if(B=m>>>24,I>>>=B,d-=B,B=m>>>16&255,B&16){if(y=m&65535,B&=15,d<B&&(I+=w[n++]<<d,d+=8,d<B&&(I+=w[n++]<<d,d+=8)),y+=I&(1<<B)-1,y>c){A.msg="invalid distance too far back",e.mode=KA;break A}if(I>>>=B,d-=B,B=o-i,y>B){if(B=y-B,B>g&&e.sane){A.msg="invalid distance too far back",e.mode=KA;break A}if(f=0,k=Q,C===0){if(f+=a-B,B<E){E-=B;do D[o++]=Q[f++];while(--B);f=o-y,k=D}}else if(C<B){if(f+=a+C-B,B-=C,B<E){E-=B;do D[o++]=Q[f++];while(--B);if(f=0,C<E){B=C,E-=B;do D[o++]=Q[f++];while(--B);f=o-y,k=D}}}else if(f+=C-B,B<E){E-=B;do D[o++]=Q[f++];while(--B);f=o-y,k=D}for(;E>2;)D[o++]=k[f++],D[o++]=k[f++],D[o++]=k[f++],E-=3;E&&(D[o++]=k[f++],E>1&&(D[o++]=k[f++]))}else{f=o-y;do D[o++]=D[f++],D[o++]=D[f++],D[o++]=D[f++],E-=3;while(E>2);E&&(D[o++]=D[f++],E>1&&(D[o++]=D[f++]))}}else if((B&64)===0){m=u[(m&65535)+(I&(1<<B)-1)];continue t}else{A.msg="invalid distance code",e.mode=KA;break A}break}}else if((B&64)===0){m=h[(m&65535)+(I&(1<<B)-1)];continue e}else if(B&32){e.mode=Jr;break A}else{A.msg="invalid literal/length code",e.mode=KA;break A}break}}while(n<r&&o<s);E=d>>3,n-=E,d-=E<<3,I&=(1<<d)-1,A.next_in=n,A.next_out=o,A.avail_in=n<r?5+(r-n):5-(n-r),A.avail_out=o<s?257+(s-o):257-(o-s),e.hold=I,e.bits=d}var BA=15,Ht=852,Pt=592,Kt=0,ue=1,Tt=2,vr=[3,4,5,6,7,8,9,10,11,13,15,17,19,23,27,31,35,43,51,59,67,83,99,115,131,163,195,227,258,0,0],Lr=[16,16,16,16,16,16,16,16,17,17,17,17,18,18,18,18,19,19,19,19,20,20,20,20,21,21,21,21,16,72,78],Ur=[1,2,3,4,5,7,9,13,17,25,33,49,65,97,129,193,257,385,513,769,1025,1537,2049,3073,4097,6145,8193,12289,16385,24577,0,0],qr=[16,16,16,16,17,17,18,18,19,19,20,20,21,21,22,22,23,23,24,24,25,25,26,26,27,27,28,28,29,29,64,64];function AA(A,t,e,n,r,o,i,s){var c=s.bits,a=0,g=0,C=0,Q=0,I=0,d=0,h=0,u=0,l=0,p=0,m,B,E,y,f,k=null,w=0,D,x=X(BA+1),N=X(BA+1),L=null,U=0,tA,q,T;for(a=0;a<=BA;a++)x[a]=0;for(g=0;g<n;g++)x[t[e+g]]++;for(I=c,Q=BA;Q>=1&&x[Q]===0;Q--);if(I>Q&&(I=Q),Q===0)return r[o++]=1<<24|64<<16|0,r[o++]=1<<24|64<<16|0,s.bits=1,0;for(C=1;C<Q&&x[C]===0;C++);for(I<C&&(I=C),u=1,a=1;a<=BA;a++)if(u<<=1,u-=x[a],u<0)return-1;if(u>0&&(A===Kt||Q!==1))return-1;for(N[1]=0,a=1;a<BA;a++)N[a+1]=N[a]+x[a];for(g=0;g<n;g++)t[e+g]!==0&&(i[N[t[e+g]]++]=g);if(A===Kt?(k=L=i,D=19):A===ue?(k=vr,w-=257,L=Lr,U-=257,D=256):(k=Ur,L=qr,D=-1),p=0,g=0,a=C,f=o,d=I,h=0,E=-1,l=1<<I,y=l-1,A===ue&&l>Ht||A===Tt&&l>Pt)return 1;for(;;){tA=a-h,i[g]<D?(q=0,T=i[g]):i[g]>D?(q=L[U+i[g]],T=k[w+i[g]]):(q=96,T=0),m=1<<a-h,B=1<<d,C=B;do B-=m,r[f+(p>>h)+B]=tA<<24|q<<16|T|0;while(B!==0);for(m=1<<a-1;p&m;)m>>=1;if(m!==0?(p&=m-1,p+=m):p=0,g++,--x[a]===0){if(a===Q)break;a=t[e+i[g]]}if(a>I&&(p&y)!==E){for(h===0&&(h=I),f+=C,d=a-h,u=1<<d;d+h<Q&&(u-=x[d+h],!(u<=0));)d++,u<<=1;if(l+=1<<d,A===ue&&l>Ht||A===Tt&&l>Pt)return 1;E=p&y,r[E]=I<<24|d<<16|f-o|0}}return p!==0&&(r[f+p]=a-h<<24|64<<16|0),s.bits=I,0}var _r=0,un=1,ln=2,Ot=4,Yr=5,TA=6,eA=0,Hr=1,Pr=2,v=-2,mn=-3,De=-4,Kr=-5,Zt=8,hn=1,Xt=2,Vt=3,jt=4,Wt=5,zt=6,$t=7,An=8,en=9,tn=10,XA=11,H=12,le=13,nn=14,me=15,on=16,rn=17,an=18,sn=19,OA=20,ZA=21,gn=22,cn=23,In=24,Qn=25,Bn=26,he=27,Cn=28,En=29,M=30,ye=31,Tr=32,Or=852,Zr=592;function dn(A){return(A>>>24&255)+(A>>>8&65280)+((A&65280)<<8)+((A&255)<<24)}function Xr(){this.mode=0,this.last=!1,this.wrap=0,this.havedict=!1,this.flags=0,this.dmax=0,this.check=0,this.total=0,this.head=null,this.wbits=0,this.wsize=0,this.whave=0,this.wnext=0,this.window=null,this.hold=0,this.bits=0,this.length=0,this.offset=0,this.extra=0,this.lencode=null,this.distcode=null,this.lenbits=0,this.distbits=0,this.ncode=0,this.nlen=0,this.ndist=0,this.have=0,this.next=null,this.lens=X(320),this.work=X(288),this.lendyn=null,this.distdyn=null,this.sane=0,this.back=0,this.was=0}function Vr(A){var t;return!A||!A.state?v:(t=A.state,A.total_in=A.total_out=t.total=0,A.msg="",t.wrap&&(A.adler=t.wrap&1),t.mode=hn,t.last=0,t.havedict=0,t.dmax=32768,t.head=null,t.hold=0,t.bits=0,t.lencode=t.lendyn=$(Or),t.distcode=t.distdyn=$(Zr),t.sane=1,t.back=-1,eA)}function jr(A){var t;return!A||!A.state?v:(t=A.state,t.wsize=0,t.whave=0,t.wnext=0,Vr(A))}function Wr(A,t){var e,n;return!A||!A.state||(n=A.state,t<0?(e=0,t=-t):(e=(t>>4)+1,t<48&&(t&=15)),t&&(t<8||t>15))?v:(n.window!==null&&n.wbits!==t&&(n.window=null),n.wrap=e,n.wbits=t,jr(A))}function wn(A,t){var e,n;return A?(n=new Xr,A.state=n,n.window=null,e=Wr(A,t),e!==eA&&(A.state=null),e):v}var fn=!0,we,pe;function zr(A){if(fn){var t;for(we=$(512),pe=$(32),t=0;t<144;)A.lens[t++]=8;for(;t<256;)A.lens[t++]=9;for(;t<280;)A.lens[t++]=7;for(;t<288;)A.lens[t++]=8;for(AA(un,A.lens,0,288,we,0,A.work,{bits:9}),t=0;t<32;)A.lens[t++]=5;AA(ln,A.lens,0,32,pe,0,A.work,{bits:5}),fn=!1}A.lencode=we,A.lenbits=9,A.distcode=pe,A.distbits=5}function pn(A,t,e,n){var r,o=A.state;return o.window===null&&(o.wsize=1<<o.wbits,o.wnext=0,o.whave=0,o.window=Y(o.wsize)),n>=o.wsize?(_(o.window,t,e-o.wsize,o.wsize,0),o.wnext=0,o.whave=o.wsize):(r=o.wsize-o.wnext,r>n&&(r=n),_(o.window,t,e-n,r,o.wnext),n-=r,n?(_(o.window,t,e-n,n,0),o.wnext=n,o.whave=o.wsize):(o.wnext+=r,o.wnext===o.wsize&&(o.wnext=0),o.whave<o.wsize&&(o.whave+=r))),0}function Dn(A,t){var e,n,r,o,i,s,c,a,g,C,Q,I,d,h,u=0,l,p,m,B,E,y,f,k,w=Y(4),D,x,N=[16,17,18,0,8,7,9,6,10,5,11,4,12,3,13,2,14,1,15];if(!A||!A.state||!A.output||!A.input&&A.avail_in!==0)return v;e=A.state,e.mode===H&&(e.mode=le),i=A.next_out,r=A.output,c=A.avail_out,o=A.next_in,n=A.input,s=A.avail_in,a=e.hold,g=e.bits,C=s,Q=c,k=eA;A:for(;;)switch(e.mode){case hn:if(e.wrap===0){e.mode=le;break}for(;g<16;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}if(e.wrap&2&&a===35615){e.check=0,w[0]=a&255,w[1]=a>>>8&255,e.check=J(e.check,w,2,0),a=0,g=0,e.mode=Xt;break}if(e.flags=0,e.head&&(e.head.done=!1),!(e.wrap&1)||(((a&255)<<8)+(a>>8))%31){A.msg="incorrect header check",e.mode=M;break}if((a&15)!==Zt){A.msg="unknown compression method",e.mode=M;break}if(a>>>=4,g-=4,f=(a&15)+8,e.wbits===0)e.wbits=f;else if(f>e.wbits){A.msg="invalid window size",e.mode=M;break}e.dmax=1<<f,A.adler=e.check=1,e.mode=a&512?tn:H,a=0,g=0;break;case Xt:for(;g<16;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}if(e.flags=a,(e.flags&255)!==Zt){A.msg="unknown compression method",e.mode=M;break}if(e.flags&57344){A.msg="unknown header flags set",e.mode=M;break}e.head&&(e.head.text=a>>8&1),e.flags&512&&(w[0]=a&255,w[1]=a>>>8&255,e.check=J(e.check,w,2,0)),a=0,g=0,e.mode=Vt;case Vt:for(;g<32;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}e.head&&(e.head.time=a),e.flags&512&&(w[0]=a&255,w[1]=a>>>8&255,w[2]=a>>>16&255,w[3]=a>>>24&255,e.check=J(e.check,w,4,0)),a=0,g=0,e.mode=jt;case jt:for(;g<16;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}e.head&&(e.head.xflags=a&255,e.head.os=a>>8),e.flags&512&&(w[0]=a&255,w[1]=a>>>8&255,e.check=J(e.check,w,2,0)),a=0,g=0,e.mode=Wt;case Wt:if(e.flags&1024){for(;g<16;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}e.length=a,e.head&&(e.head.extra_len=a),e.flags&512&&(w[0]=a&255,w[1]=a>>>8&255,e.check=J(e.check,w,2,0)),a=0,g=0}else e.head&&(e.head.extra=null);e.mode=zt;case zt:if(e.flags&1024&&(I=e.length,I>s&&(I=s),I&&(e.head&&(f=e.head.extra_len-e.length,e.head.extra||(e.head.extra=new Array(e.head.extra_len)),_(e.head.extra,n,o,I,f)),e.flags&512&&(e.check=J(e.check,n,I,o)),s-=I,o+=I,e.length-=I),e.length))break A;e.length=0,e.mode=$t;case $t:if(e.flags&2048){if(s===0)break A;I=0;do f=n[o+I++],e.head&&f&&e.length<65536&&(e.head.name+=String.fromCharCode(f));while(f&&I<s);if(e.flags&512&&(e.check=J(e.check,n,I,o)),s-=I,o+=I,f)break A}else e.head&&(e.head.name=null);e.length=0,e.mode=An;case An:if(e.flags&4096){if(s===0)break A;I=0;do f=n[o+I++],e.head&&f&&e.length<65536&&(e.head.comment+=String.fromCharCode(f));while(f&&I<s);if(e.flags&512&&(e.check=J(e.check,n,I,o)),s-=I,o+=I,f)break A}else e.head&&(e.head.comment=null);e.mode=en;case en:if(e.flags&512){for(;g<16;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}if(a!==(e.check&65535)){A.msg="header crc mismatch",e.mode=M;break}a=0,g=0}e.head&&(e.head.hcrc=e.flags>>9&1,e.head.done=!0),A.adler=e.check=0,e.mode=H;break;case tn:for(;g<32;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}A.adler=e.check=dn(a),a=0,g=0,e.mode=XA;case XA:if(e.havedict===0)return A.next_out=i,A.avail_out=c,A.next_in=o,A.avail_in=s,e.hold=a,e.bits=g,Pr;A.adler=e.check=1,e.mode=H;case H:if(t===Yr||t===TA)break A;case le:if(e.last){a>>>=g&7,g-=g&7,e.mode=he;break}for(;g<3;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}switch(e.last=a&1,a>>>=1,g-=1,a&3){case 0:e.mode=nn;break;case 1:if(zr(e),e.mode=OA,t===TA){a>>>=2,g-=2;break A}break;case 2:e.mode=rn;break;case 3:A.msg="invalid block type",e.mode=M}a>>>=2,g-=2;break;case nn:for(a>>>=g&7,g-=g&7;g<32;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}if((a&65535)!==(a>>>16^65535)){A.msg="invalid stored block lengths",e.mode=M;break}if(e.length=a&65535,a=0,g=0,e.mode=me,t===TA)break A;case me:e.mode=on;case on:if(I=e.length,I){if(I>s&&(I=s),I>c&&(I=c),I===0)break A;_(r,n,o,I,i),s-=I,o+=I,c-=I,i+=I,e.length-=I;break}e.mode=H;break;case rn:for(;g<14;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}if(e.nlen=(a&31)+257,a>>>=5,g-=5,e.ndist=(a&31)+1,a>>>=5,g-=5,e.ncode=(a&15)+4,a>>>=4,g-=4,e.nlen>286||e.ndist>30){A.msg="too many length or distance symbols",e.mode=M;break}e.have=0,e.mode=an;case an:for(;e.have<e.ncode;){for(;g<3;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}e.lens[N[e.have++]]=a&7,a>>>=3,g-=3}for(;e.have<19;)e.lens[N[e.have++]]=0;if(e.lencode=e.lendyn,e.lenbits=7,D={bits:e.lenbits},k=AA(_r,e.lens,0,19,e.lencode,0,e.work,D),e.lenbits=D.bits,k){A.msg="invalid code lengths set",e.mode=M;break}e.have=0,e.mode=sn;case sn:for(;e.have<e.nlen+e.ndist;){for(;u=e.lencode[a&(1<<e.lenbits)-1],l=u>>>24,p=u>>>16&255,m=u&65535,!(l<=g);){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}if(m<16)a>>>=l,g-=l,e.lens[e.have++]=m;else{if(m===16){for(x=l+2;g<x;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}if(a>>>=l,g-=l,e.have===0){A.msg="invalid bit length repeat",e.mode=M;break}f=e.lens[e.have-1],I=3+(a&3),a>>>=2,g-=2}else if(m===17){for(x=l+3;g<x;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}a>>>=l,g-=l,f=0,I=3+(a&7),a>>>=3,g-=3}else{for(x=l+7;g<x;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}a>>>=l,g-=l,f=0,I=11+(a&127),a>>>=7,g-=7}if(e.have+I>e.nlen+e.ndist){A.msg="invalid bit length repeat",e.mode=M;break}for(;I--;)e.lens[e.have++]=f}}if(e.mode===M)break;if(e.lens[256]===0){A.msg="invalid code -- missing end-of-block",e.mode=M;break}if(e.lenbits=9,D={bits:e.lenbits},k=AA(un,e.lens,0,e.nlen,e.lencode,0,e.work,D),e.lenbits=D.bits,k){A.msg="invalid literal/lengths set",e.mode=M;break}if(e.distbits=6,e.distcode=e.distdyn,D={bits:e.distbits},k=AA(ln,e.lens,e.nlen,e.ndist,e.distcode,0,e.work,D),e.distbits=D.bits,k){A.msg="invalid distances set",e.mode=M;break}if(e.mode=OA,t===TA)break A;case OA:e.mode=ZA;case ZA:if(s>=6&&c>=258){A.next_out=i,A.avail_out=c,A.next_in=o,A.avail_in=s,e.hold=a,e.bits=g,fe(A,Q),i=A.next_out,r=A.output,c=A.avail_out,o=A.next_in,n=A.input,s=A.avail_in,a=e.hold,g=e.bits,e.mode===H&&(e.back=-1);break}for(e.back=0;u=e.lencode[a&(1<<e.lenbits)-1],l=u>>>24,p=u>>>16&255,m=u&65535,!(l<=g);){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}if(p&&(p&240)===0){for(B=l,E=p,y=m;u=e.lencode[y+((a&(1<<B+E)-1)>>B)],l=u>>>24,p=u>>>16&255,m=u&65535,!(B+l<=g);){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}a>>>=B,g-=B,e.back+=B}if(a>>>=l,g-=l,e.back+=l,e.length=m,p===0){e.mode=Bn;break}if(p&32){e.back=-1,e.mode=H;break}if(p&64){A.msg="invalid literal/length code",e.mode=M;break}e.extra=p&15,e.mode=gn;case gn:if(e.extra){for(x=e.extra;g<x;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}e.length+=a&(1<<e.extra)-1,a>>>=e.extra,g-=e.extra,e.back+=e.extra}e.was=e.length,e.mode=cn;case cn:for(;u=e.distcode[a&(1<<e.distbits)-1],l=u>>>24,p=u>>>16&255,m=u&65535,!(l<=g);){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}if((p&240)===0){for(B=l,E=p,y=m;u=e.distcode[y+((a&(1<<B+E)-1)>>B)],l=u>>>24,p=u>>>16&255,m=u&65535,!(B+l<=g);){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}a>>>=B,g-=B,e.back+=B}if(a>>>=l,g-=l,e.back+=l,p&64){A.msg="invalid distance code",e.mode=M;break}e.offset=m,e.extra=p&15,e.mode=In;case In:if(e.extra){for(x=e.extra;g<x;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}e.offset+=a&(1<<e.extra)-1,a>>>=e.extra,g-=e.extra,e.back+=e.extra}if(e.offset>e.dmax){A.msg="invalid distance too far back",e.mode=M;break}e.mode=Qn;case Qn:if(c===0)break A;if(I=Q-c,e.offset>I){if(I=e.offset-I,I>e.whave&&e.sane){A.msg="invalid distance too far back",e.mode=M;break}I>e.wnext?(I-=e.wnext,d=e.wsize-I):d=e.wnext-I,I>e.length&&(I=e.length),h=e.window}else h=r,d=i-e.offset,I=e.length;I>c&&(I=c),c-=I,e.length-=I;do r[i++]=h[d++];while(--I);e.length===0&&(e.mode=ZA);break;case Bn:if(c===0)break A;r[i++]=e.length,c--,e.mode=ZA;break;case he:if(e.wrap){for(;g<32;){if(s===0)break A;s--,a|=n[o++]<<g,g+=8}if(Q-=c,A.total_out+=Q,e.total+=Q,Q&&(A.adler=e.check=e.flags?J(e.check,r,Q,i-Q):bA(e.check,r,Q,i-Q)),Q=c,(e.flags?a:dn(a))!==e.check){A.msg="incorrect data check",e.mode=M;break}a=0,g=0}e.mode=Cn;case Cn:if(e.wrap&&e.flags){for(;g<32;){if(s===0)break A;s--,a+=n[o++]<<g,g+=8}if(a!==(e.total&4294967295)){A.msg="incorrect length check",e.mode=M;break}a=0,g=0}e.mode=En;case En:k=Hr;break A;case M:k=mn;break A;case ye:return De;case Tr:default:return v}return A.next_out=i,A.avail_out=c,A.next_in=o,A.avail_in=s,e.hold=a,e.bits=g,(e.wsize||Q!==A.avail_out&&e.mode<M&&(e.mode<he||t!==Ot))&&pn(A,A.output,A.next_out,Q-A.avail_out)?(e.mode=ye,De):(C-=A.avail_in,Q-=A.avail_out,A.total_in+=C,A.total_out+=Q,e.total+=Q,e.wrap&&Q&&(A.adler=e.check=e.flags?J(e.check,r,Q,A.next_out-Q):bA(e.check,r,Q,A.next_out-Q)),A.data_type=e.bits+(e.last?64:0)+(e.mode===H?128:0)+(e.mode===OA||e.mode===me?256:0),(C===0&&Q===0||t===Ot)&&k===eA&&(k=Kr),k)}function yn(A){if(!A||!A.state)return v;var t=A.state;return t.window&&(t.window=null),A.state=null,eA}function Nn(A,t){var e;return!A||!A.state||(e=A.state,(e.wrap&2)===0)?v:(e.head=t,t.done=!1,eA)}function Ne(A,t){var e=t.length,n,r,o;return!A||!A.state||(n=A.state,n.wrap!==0&&n.mode!==XA)?v:n.mode===XA&&(r=1,r=bA(r,t,e,0),r!==n.check)?mn:(o=pn(A,t,e,e),o?(n.mode=ye,De):(n.havedict=1,eA))}var VA={2:"need dictionary",1:"stream end",0:"","-1":"file error","-2":"stream error","-3":"data error","-4":"insufficient memory","-5":"buffer error","-6":"incompatible version"};function ke(){this.input=null,this.next_in=0,this.avail_in=0,this.total_in=0,this.output=null,this.next_out=0,this.avail_out=0,this.total_out=0,this.msg="",this.state=null,this.data_type=2,this.adler=0}var be=Object.prototype.toString,Se=class A{constructor(t){if(!(this instanceof A))return new A(t);this.options=Jt({chunkSize:16384,windowBits:0,to:""},t||{});var e=this.options;e.raw&&e.windowBits>=0&&e.windowBits<16&&(e.windowBits=-e.windowBits,e.windowBits===0&&(e.windowBits=-15)),e.windowBits>=0&&e.windowBits<16&&!(t&&t.windowBits)&&(e.windowBits+=32),e.windowBits>15&&e.windowBits<48&&(e.windowBits&15)===0&&(e.windowBits|=15),this.err=0,this.msg="",this.ended=!1,this.chunks=[],this.strm=new ke,this.strm.avail_out=0;var n=wn(this.strm,e.windowBits);if(n!==Z)throw new Error(VA[n]);if(this.header=new de,Nn(this.strm,this.header),e.dictionary&&(typeof e.dictionary=="string"?e.dictionary=Ee(e.dictionary):be.call(e.dictionary)==="[object ArrayBuffer]"&&(e.dictionary=new Uint8Array(e.dictionary)),e.raw&&(n=Ne(this.strm,e.dictionary),n!==Z)))throw new Error(VA[n])}push(t,e){var n=this.strm,r=this.options.chunkSize,o=this.options.dictionary,i,s,c,a,g,C,Q=!1;if(this.ended)return!1;s=e===~~e?e:e===!0?DA:Qe,typeof t=="string"?n.input=Ut(t):be.call(t)==="[object ArrayBuffer]"?n.input=new Uint8Array(t):n.input=t,n.next_in=0,n.avail_in=n.input.length;do{if(n.avail_out===0&&(n.output=Y(r),n.next_out=0,n.avail_out=r),i=Dn(n,Qe),i===Ft&&o&&(typeof o=="string"?C=Ee(o):be.call(o)==="[object ArrayBuffer]"?C=new Uint8Array(o):C=o,i=Ne(this.strm,C)),i===Gt&&Q===!0&&(i=Z,Q=!1),i!==yA&&i!==Z)return this.onEnd(i),this.ended=!0,!1;n.next_out&&(n.avail_out===0||i===yA||n.avail_in===0&&(s===DA||s===Be))&&(this.options.to==="string"?(c=_t(n.output,n.next_out),a=n.next_out-c,g=qt(n.output,c),n.next_out=a,n.avail_out=r-a,a&&_(n.output,n.output,c,a,0),this.onData(g)):this.onData(PA(n.output,n.next_out))),n.avail_in===0&&n.avail_out===0&&(Q=!0)}while((n.avail_in>0||n.avail_out===0)&&i!==yA);return i===yA&&(s=DA),s===DA?(i=yn(this.strm),this.onEnd(i),this.ended=!0,i===Z):(s===Be&&(this.onEnd(Z),n.avail_out=0),!0)}onData(t){this.chunks.push(t)}onEnd(t){t===Z&&(this.options.to==="string"?this.result=this.chunks.join(""):this.result=HA(this.chunks)),this.chunks=[],this.err=t,this.msg=this.strm.msg}};function $r(A,t){var e=new Se(t);if(e.push(A,!0),e.err)throw e.msg||VA[e.err];return e.result}var kn=$r;function bn(A){let t=0;for(let r of A)t+=r.length;let e=new Uint8Array(t),n=0;for(let r of A)e.set(r,n),n+=r.length;return e}var V={};V.d=(A,t)=>{if(Array.isArray(t))for(var e=0;e<t.length;){var n=t[e++],r=t[e++];V.o(A,n)?r===0&&e++:r===0?Object.defineProperty(A,n,{enumerable:!0,value:t[e++]}):Object.defineProperty(A,n,{enumerable:!0,get:r})}else for(var n in t)V.o(t,n)&&!V.o(A,n)&&Object.defineProperty(A,n,{enumerable:!0,get:t[n]})};V.o=(A,t)=>Object.prototype.hasOwnProperty.call(A,t);V.r=A=>{Symbol.toStringTag&&Object.defineProperty(A,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(A,"__esModule",{value:!0})};var Re={};V.r(Re);V.d(Re,{ChunkSliceResult:()=>dA,__wbg_Error_92b29b0548f8b746:()=>ti,__wbg___wbindgen_throw_344f42d3211c4765:()=>ni,__wbg_set_wasm:()=>vn,decompress_all:()=>xn,decompress_chunk_slice:()=>ei});var Ai="data:application/wasm;base64,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AghBAUEAEBUACywCAX8BfiMAQRBrIgEkACAAKQIAIQIgASAANgIMIAEgAjcCBCABQQRqEGYACyMBAX8jAEEQayICJAAgAiABNgIMIAIgADYCCCACQQhqEGUACyAAAkAgASgCAEUNACAAQbiXwAA2AgQgACABNgIADwsACx4BAX8CQCAAKAIAIgJFDQAgASACIAAoAgQQTQ8LAAsbAQF/EGogAEEEakEEEFgiASAANgIAIAFBBGoLHgEBfwJAIAAoAgAiAUEBSA0AIAAoAgQgAUEBEFMLCx4AIAAoAgAgACgCBEEAKALomkAiAEEEIAAbEQQAAAsjAQF/AkBBhIrAABAtIgANAEG4icAAQTpB9InAABA4AAsgAAsXAAJAIABBf2pBfk8NACABIABBARBTCwscAQF/AkAgACgCACIBRQ0AIAAoAgQgAUEBEFMLCxcAAkAgAUEJSQ0AIAEgABAODwsgABACCxUAIABBfGoiACAAKAIAQQRqQQQQUwsUAAJAIABFDQAgACABEF8ACxBWAAsRACAAIAFBAXRBAXIgAhAxAAsSAAJAIAFFDQAgACABIAIQUwsLEgAgACABIAIgAyAEQQAgBRADCxUAAkAgAEUNACAAIAAoAqhaEQIACwsaACAAQQApAoSWQDcCCCAAQQApAvyVQDcCAAsaACAAQQApAvSVQDcCCCAAQQApAuyVQDcCAAsWACAAKAIAIAEgAiAAKAIEKAIMEQcACw0AIAAgASACIAMQBw8LFABBACAANgK8mkBBAEEBNgK4mkALEwAgAEG4l8AANgIEIAAgATYCAAsQACABIAAoAgAgACgCBBBNCxAAIAEgACgCACAAKAIEEAoLCwAgACABIAIQKg8LCgAgACABEGkaAAsPACAAQZyVwAAgASACEAwLEQBBkJjAAEEjQaSYwAAQMQALCwAgACMAaiQAIwALCQAgACABEEQPCwkAIAAgARAuDwsJACAAIAEQYQALDABBr4fAAEEbEFoACw0AQcqHwABBzwAQWgALCQAgASAAEDsACwwAIAAgASkCADcDAAsJACABIAAQXQALDQAgAUH8mcAAQRgQCgsIACAAIAEQAAsIACAAIAEQAQsJACAAKAIAEEoLBwAgABA5AAsHACAAEEAACwcAIAAQJgALCwBBAEEBOgDAnkALCQAgAEEANgIACwUAEGsACwMADwsDAAALAgALC74aAgBBgIDAAAuUGkF0dGVtcHRlZCB0byBpbml0aWFsaXplIHRocmVhZC1sb2NhbCB3aGlsZSBpdCBpcyBiZWluZyBkcm9wcGVkFnNsaWNlIGluZGV4IHN0YXJ0cyBhdCDADSBidXQgZW5kcyBhdCDAABJyYW5nZSBzdGFydCBpbmRleCDAIiBvdXQgb2YgcmFuZ2UgZm9yIHNsaWNlIG9mIGxlbmd0aCDAABByYW5nZSBlbmQgaW5kZXggwCIgb3V0IG9mIHJhbmdlIGZvciBzbGljZSBvZiBsZW5ndGggwAAvcnVzdGMvNDhhMjI5Y2VhZWZkNDk4NWM1MDk5MGIxNDExNmI2ZDg1NmFmMDk4NS9saWJyYXJ5L3N0ZC9zcmMvc3lzL3RocmVhZF9sb2NhbC9ub190aHJlYWRzLnJzAC9ydXN0Yy80OGEyMjljZWFlZmQ0OTg1YzUwOTkwYjE0MTE2YjZkODU2YWYwOTg1L2xpYnJhcnkvc3RkL3NyYy9zeXMvc3luYy9yd2xvY2svbm9fdGhyZWFkcy5ycwAvaG9tZS9ydW5uZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi93YXNtLWJpbmRnZW4tMC4yLjEyNi9zcmMvZXh0ZXJucmVmLnJzAC9ydXN0Yy80OGEyMjljZWFlZmQ0OTg1YzUwOTkwYjE0MTE2YjZkODU2YWYwOTg1L2xpYnJhcnkvYWxsb2Mvc3JjL3Jhd192ZWMvbW9kLnJzAC9ydXN0L2RlcHMvZGxtYWxsb2MtMC4yLjEzL3NyYy9kbG1hbGxvYy5ycwAvaG9tZS9ydW5uZXIvLmNhcmdvL3JlZ2lzdHJ5L3NyYy9pbmRleC5jcmF0ZXMuaW8tMTk0OWNmOGM2YjViNTU3Zi9saWJkZWZsYXRlci0xLjI1LjIvc3JjL2xpYi5ycwAA1gAQAF4AAABrAAAADQAAAMwCEAAKAAAAHAAAACQAAADMAhAACgAAAMIAAAApAAAAzAIQAAoAAAC2AAAAJwAAAMwCEAAKAAAAcQAAABwAAADMAhAACgAAAG0AAABBAAAAZGVjb21wcmVzc2lvbiBmYWlsZWRpbnZhbGlkIGJnemYgaGVhZGVyAMwCEAAKAAAATAAAAD0A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",dA=class A{static __wrap(t){let e=Object.create(A.prototype);return e.__wbg_ptr=t,Sn.register(e,e.__wbg_ptr,e),e}__destroy_into_raw(){let t=this.__wbg_ptr;return this.__wbg_ptr=0,Sn.unregister(this),t}free(){let t=this.__destroy_into_raw();S.__wbg_chunksliceresult_free(t,0)}take_buffer(){try{let r=S.__wbindgen_add_to_stack_pointer(-16);S.chunksliceresult_take_buffer(r,this.__wbg_ptr);var t=G().getInt32(r+0,!0),e=G().getInt32(r+4,!0),n=Rn(t,e).slice();return S.__wbindgen_export(t,e*1,1),n}finally{S.__wbindgen_add_to_stack_pointer(16)}}take_cpositions(){try{let r=S.__wbindgen_add_to_stack_pointer(-16);S.chunksliceresult_take_cpositions(r,this.__wbg_ptr);var t=G().getInt32(r+0,!0),e=G().getInt32(r+4,!0),n=Mn(t,e).slice();return S.__wbindgen_export(t,e*8,8),n}finally{S.__wbindgen_add_to_stack_pointer(16)}}take_dpositions(){try{let r=S.__wbindgen_add_to_stack_pointer(-16);S.chunksliceresult_take_dpositions(r,this.__wbg_ptr);var t=G().getInt32(r+0,!0),e=G().getInt32(r+4,!0),n=Mn(t,e).slice();return S.__wbindgen_export(t,e*8,8),n}finally{S.__wbindgen_add_to_stack_pointer(16)}}};Symbol.dispose&&(dA.prototype[Symbol.dispose]=dA.prototype.free);function xn(A){try{let i=S.__wbindgen_add_to_stack_pointer(-16),s=Gn(A,S.__wbindgen_export2),c=Ge;S.decompress_all(i,s,c);var t=G().getInt32(i+0,!0),e=G().getInt32(i+4,!0),n=G().getInt32(i+8,!0),r=G().getInt32(i+12,!0);if(r)throw Jn(n);var o=Rn(t,e).slice();return S.__wbindgen_export(t,e*1,1),o}finally{S.__wbindgen_add_to_stack_pointer(16)}}function ei(A,t,e,n,r){try{let c=S.__wbindgen_add_to_stack_pointer(-16),a=Gn(A,S.__wbindgen_export2),g=Ge;S.decompress_chunk_slice(c,a,g,t,e,n,r);var o=G().getInt32(c+0,!0),i=G().getInt32(c+4,!0),s=G().getInt32(c+8,!0);if(s)throw Jn(i);return dA.__wrap(o)}finally{S.__wbindgen_add_to_stack_pointer(16)}}function ti(A,t){let e=Error(Fn(A,t));return oi(e)}function ni(A,t){throw new Error(Fn(A,t))}var Sn=typeof FinalizationRegistry>"u"?{register:()=>{},unregister:()=>{}}:new FinalizationRegistry(A=>S.__wbg_chunksliceresult_free(A,1));function oi(A){SA===P.length&&P.push(P.length+1);let t=SA;return SA=P[t],P[t]=A,t}function ri(A){A<1028||(P[A]=SA,SA=A)}function Mn(A,t){return A=A>>>0,ii().subarray(A/8,A/8+t)}function Rn(A,t){return A=A>>>0,Fe().subarray(A/1,A/1+t)}var CA=null;function G(){return(CA===null||CA.buffer.detached===!0||CA.buffer.detached===void 0&&CA.buffer!==S.memory.buffer)&&(CA=new DataView(S.memory.buffer)),CA}var jA=null;function ii(){return(jA===null||jA.byteLength===0)&&(jA=new Float64Array(S.memory.buffer)),jA}function Fn(A,t){return gi(A>>>0,t)}var WA=null;function Fe(){return(WA===null||WA.byteLength===0)&&(WA=new Uint8Array(S.memory.buffer)),WA}function ai(A){return P[A]}var P=new Array(1024).fill(void 0);P.push(void 0,null,!0,!1);var SA=P.length;function Gn(A,t){let e=t(A.length*1,1)>>>0;return Fe().set(A,e/1),Ge=A.length,e}function Jn(A){let t=ai(A);return ri(A),t}var zA=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0});zA.decode();var si=2146435072,Me=0;function gi(A,t){return Me+=t,Me>=si&&(zA=new TextDecoder("utf-8",{ignoreBOM:!0,fatal:!0}),zA.decode(),Me=t),zA.decode(Fe().subarray(A,A+t).slice())}var Ge=0,S;function vn(A){S=A}var EA=null,xe=null;async function ci(){return EA||(xe||(xe=(async()=>{let t=await(await fetch(Ai)).arrayBuffer(),{instance:e}=await WebAssembly.instantiate(t,{"./bgzf_wasm_bg.js":Re});return EA=e.exports,vn(EA),EA})()),xe)}async function Ln(A){return EA||await ci(),xn(A)}var Ii=26;function qn(A){return A[0]===31&&A[1]===139}function Qi(A){return A.length>=Ii&&qn(A)&&A[2]===8&&A[3]===4&&A[10]===6&&A[12]===66&&A[13]===67}function _n(A){return A instanceof Error?A.message:`${A}`}async function Un(A){if(typeof DecompressionStream<"u"){let t=new Blob([A]).stream().pipeThrough(new DecompressionStream("gzip"));return new Uint8Array(await new Response(t).arrayBuffer())}else return kn(A,void 0)}function Bi(A){return _n(A).includes("invalid gzip header")?new Error("problem decompressing block: incorrect gzip header check",{cause:A}):A}async function Yn(A){if(A.length===0)return new Uint8Array(0);if(!Qi(A)){if(qn(A))return Un(A);throw new Error("problem decompressing block: not a valid bgzf or gzip block")}try{return await Ln(A)}catch(t){if(_n(t).includes("invalid bgzf header"))return Un(A);throw Bi(t)}}var Ci=10,Ei=32*1024*1024;function di(A){let t=0,e=[],n=()=>{t--,e.shift()?.()};return async r=>{t>=A&&await new Promise(o=>{e.push(o)}),t++;try{return await r()}finally{n()}}}function fi(A,t,e){let n=[],r=A.length,o=0;for(;o<r;){let i=o+1;for(;i<r&&t[i]-t[o]<Ei;)i+=1;n.push({compressedStart:A[o],compressedEnd:i<r?A[i]:e??A[r-1]+65536,uncompressedStart:t[o]}),o=i}return n}function ui(A,t,e,n){let r=Math.max(0,e-t),o=Math.min(n,t+A.length)-t;return r<A.length?A.subarray(r,o):new Uint8Array(0)}var fA=class{filehandle;gzi;limit;constructor({filehandle:t,gziFilehandle:e,blockConcurrency:n=Ci}){this.filehandle=t,this.gzi=new pA({filehandle:e}),this.limit=di(n)}async read(t,e){let{compressed:n,uncompressed:r,nextCompressedPosition:o}=await this.gzi.getRelevantBlocksForRead(t,e);if(n.length===0)return new Uint8Array(0);let i=e+t,s=fi(n,r,o),c=await Promise.all(s.map(a=>this.limit(async()=>{let g=await this.filehandle.read(a.compressedEnd-a.compressedStart,a.compressedStart);return ui(await Yn(g),a.uncompressedStart,e,i)})));return bn(c)}};var Pn=R(Xo());async function Kn({location:A,name:t}){let e=o=>(0,Pn.openLocation)({uri:o,locationType:"UriLocation"}),n=await e(`${A.uri}.idx`).readFile("utf8"),r=li(n,t);if(r){let i=await new fA({filehandle:e(A.uri),gziFilehandle:e(`${A.uri}.gzi`)}).read(r.length,r.offset);return new TextDecoder().decode(i).trim()}}var Hn=A=>A.replace(/\.\d+$/,"");function li(A,t){let e=Hn(t);for(let n of A.split(`
11
- `)){let[r,o,i]=n.split(" ");if(r&&Hn(r)===e)return{offset:Number(o),length:Number(i)}}}var Tn=R(nA());function On({model:A}){let{assemblyManager:t,hovered:e}=(0,Tn.getSession)(A),{transcriptToMsaMap:n,connectedView:r,mafRegion:o}=A;if(!r?.initialized||!He(e)||!oA(A))return;let{coord:i,refName:s}=e.hoverPosition,c=i-1,a=t.get(o?.assemblyName??r.assemblyNames[0]??""),g=Q=>(a?.initialized?a.getCanonicalRefName(Q):void 0)??Q,C=g(s);if(o)return C!==g(o.refName)||!r.assemblyNames.includes(o.assemblyName)||c<o.start||c>=o.end?void 0:Ye(A,c-o.start);if(n&&C===g(n.refName)){let Q=n.g2p[c];if(Q!==void 0)return GA(A,Q)}}var mi="jbrowse-msaview-domain-cache-v3",hi=["jbrowse-msaview-domain-cache","jbrowse-msaview-domain-cache-v2"],$A="domains",wi=1,pi=rA(mi,wi,A=>{A.objectStoreNames.contains($A)||A.createObjectStore($A,{keyPath:"accession"})}),Zn=!1;function Xn(){if(!Zn){Zn=!0;for(let A of hi)Promise.resolve().then(()=>je(A)).catch(()=>{})}return pi()}function Vn(A){return iA("domain cache read",async()=>{let e=(await Xn()).transaction($A,"readonly"),n=await Promise.all(A.map(r=>e.store.get(r)));return await e.done,n},[])}function jn(A){return iA("domain cache write",async()=>{let e=(await Xn()).transaction($A,"readwrite");for(let n of A)await e.store.put(n);await e.done},void 0)}function j(A,t){let e=new RegExp(`<${t}>(.*?)</${t}>`,"s").exec(A)?.[1];return e===void 0?void 0:At(e)}function Di(A){let t={},e=/<GBQualifier>([\s\S]*?)<\/GBQualifier>/g,n;for(;(n=e.exec(A))!==null;){let r=j(n[1],"GBQualifier_name"),o=j(n[1],"GBQualifier_value");r&&o!==void 0&&t[r]===void 0&&(t[r]=o)}return t}function yi(A){let t=[],e=/<GBInterval>([\s\S]*?)<\/GBInterval>/g,n;for(;(n=e.exec(A))!==null;){let r=n[1],o=j(r,"GBInterval_from"),i=j(r,"GBInterval_to"),s=j(r,"GBInterval_point");o&&i?t.push({start:Number(o),end:Number(i)}):s&&t.push({start:Number(s),end:Number(s)})}return t}function Ni(A){let t=j(A,"GBFeature_key"),e=Di(A),n=e.db_xref,r=yi(A);if((t==="Region"||t==="Site")&&n?.startsWith("CDD:")&&r.length>0){let o=n.replace("CDD:",""),i=t==="Region",s=e.note?.split(/[[(]/)[0]?.trim(),c=i?e.region_name??o:s||e.site_type||"site",a=i?o:`${o}:${c}`;return{signature:{entry:{name:c,description:e.note??c,accession:a}},locations:r,featureType:t}}}function ki(A){let t=new Map,e=/<GBSeq>([\s\S]*?)<\/GBSeq>/g,n;for(;(n=e.exec(A))!==null;){let r=n[1],o=[],i=/<GBFeature>([\s\S]*?)<\/GBFeature>/g,s;for(;(s=i.exec(r))!==null;){let c=Ni(s[1]);c&&o.push(c)}for(let c of[j(r,"GBSeq_accession-version"),j(r,"GBSeq_primary-accession")])c&&t.set(c,o)}return t}async function Wn(A,t){let e=[...new Set(A)].filter(Boolean),n=new Map,r=await Vn(e),o=[];e.forEach((c,a)=>{let g=r[a];g?n.set(c,g.matches):o.push(c)});let i=[],s=100;for(let c=0;c<o.length;c+=s){let a=o.slice(c,c+s),g;try{g=await $e(ze({db:"protein",id:a.join(","),rettype:"gp",retmode:"xml"}),{signal:t})}catch(Q){if(F(Q))throw Q;console.warn("[msaview-domains] efetch failed, keeping what loaded:",Q);break}let C=ki(g);for(let Q of a){let I=C.get(Q);I!==void 0&&(n.set(Q,I),i.push({accession:Q,matches:I}))}}return i.length>0&&await jn(i),n}async function zn(A,t){let e=Object.entries(A.rowData).flatMap(([o,i])=>i?.Accession?[{rowName:o,accession:i.Accession}]:[]);if(e.length===0)throw new Error("No NCBI accessions found in alignment rows");let n=await Wn(e.map(o=>o.accession),t),r=e.flatMap(({rowName:o,accession:i})=>(n.get(i)??[]).flatMap(({signature:s,locations:c,featureType:a})=>s.entry?c.map(({start:g,end:C})=>({id:o,accession:s.entry.accession,name:s.entry.name,description:s.entry.description,featureType:a,start:g,end:C})):[]));if(r.length===0)throw new Error("No CDD domain annotations found for these proteins");A.setAnnotations(r)}var bi="jbrowse-msaview-data",Si=1,uA="msa-data",Je=rA(bi,Si,A=>{A.objectStoreNames.contains(uA)||A.createObjectStore(uA,{keyPath:"id"}).createIndex("timestamp","timestamp",{unique:!1})});function $n(){return`msa-${Date.now()}-${Math.random().toString(36).slice(2,11)}`}async function Ao(A,t){try{let e=await Je(),n={...t,id:A,timestamp:Date.now()};return await e.put(uA,n),!0}catch(e){return console.warn("Failed to store MSA data:",e),!1}}async function eo(A){let t=await Je(),e=await t.get(uA,A);if(!e)return;try{await t.put(uA,{...e,timestamp:Date.now()})}catch(i){console.warn("Failed to refresh MSA data timestamp:",i)}let{id:n,timestamp:r,...o}=e;return o}async function to(A=10080*60*1e3){try{let t=await Je(),e=Date.now()-A,o=await t.transaction(uA,"readwrite").store.index("timestamp").openCursor(IDBKeyRange.upperBound(e)),i=0;for(;o;)await o.delete(),i++,o=await o.continue();return i}catch(t){return console.warn("Failed to cleanup old MSA data:",t),0}}var no=R(nA()),oo=R(LA());function Mi(A){if(!(A.rows.length<2))try{A.calculateNeighborJoiningTreeFromMSA()}catch(t){console.error(t);try{(0,no.getSession)(A).notify(`The alignment loaded, but no tree was built. ${t instanceof Error?t.message:String(t)}`,"warning")}catch(e){console.error(e)}}}function ro(A){(0,oo.untracked)(()=>{xi(A)})}function xi({self:A,message:t,launch:e,onLaunched:n}){A.launchController?.abort();let r=new AbortController,{signal:o}=r;A.setLaunchController(r);let i=c=>{o.aborted||c()},s={signal:o,act:i,onProgress:c=>{i(()=>{A.setProgress(c)})},onRid:c=>{i(()=>{A.setRid(c)})}};(async()=>{try{i(()=>{A.setProgress(t),A.setError(void 0)});let{warnings:c=[],...a}=await e(s);i(()=>{A.setData(a);for(let g of c)A.addWarning(g);n()}),a.tree||i(()=>{Mi(A)})}catch(c){F(c)||(i(()=>{A.setError(c)}),console.error(c))}finally{i(()=>{A.setProgress(""),A.launchController===r&&A.setLaunchController(void 0)})}})()}function Ri(A){let t=A;return t.type==="ProteinView"&&Array.isArray(t.structures)}function io(A){return A.filter(Ri)}function ao(A){let t=A.strand,e=A.refName;if(t!==-1&&t!==1)throw new Error(`Invalid strand value: ${t}. Expected 1 or -1.`);if(!e)throw new Error("refName is required");let n=new Map;for(let c of A.subfeatures??[])if(c.type==="CDS"&&c.start<c.end){let a=`${c.start}-${c.end}`;n.has(a)||n.set(a,c)}let r=[...n.values()].sort((c,a)=>t*(c.start-a.start)),o={},i={},s={};if(r.length!==0){let a=(3-(r[0]?.phase??0))%3,g=-1;for(let C of r){let Q=C.end-C.start;for(let I=0;I<Q;I++){let d=t===1?C.start+I:C.end-1-I,h=Math.floor(a++/3);o[d]=h,h!==g?(i[h]=d,s[h]=[d],g=h):s[h].push(d)}}}return{g2p:o,p2g:i,p2gCodon:s,refName:e,strand:t}}function so(A,t){let e=A[t];if(e===void 0)return;let n=[...e].sort((o,i)=>o-i),r=[];for(let o of n){let i=r.at(-1);i?.[1]===o?i[1]=o+1:r.push([o,o+1])}return r}var Fi=1e6;function ve(A){return typeof A=="object"&&A!==null}function go(A){return Number.isSafeInteger(A)}function co(A){return ve(A)&&typeof A.type=="string"&&A.type.toLowerCase()==="cds"&&go(A.start)&&go(A.end)&&A.start<A.end}function Gi(A){let t=Number(A);return t===1||t===2?t:0}function Ji(A){let{subfeatures:t}=A,e=(Array.isArray(t)?t:[]).filter(co);return e.length>0?e:co(A)?[A]:[]}function vi(A){if(!ve(A))return{reason:"it is not a feature"};let{refName:t,strand:e}=A;if(typeof t!="string"||!t)return{reason:"it has no refName"};if(e!==1&&e!==-1)return{reason:`its strand is ${JSON.stringify(e)}, not 1 or -1`};let n=Ji(A).map(o=>({refName:t,type:"CDS",start:o.start,end:o.end,phase:Gi(o.phase)}));if(n.length===0)return{reason:"it has no CDS with numeric start < end"};let r=n.reduce((o,i)=>o+i.end-i.start,0);return r>Fi?{reason:`its CDS covers ${r} bases, more than any real transcript`}:{transcript:{refName:t,strand:e,start:Math.min(...n.map(o=>o.start)),end:Math.max(...n.map(o=>o.end)),subfeatures:n}}}var Io=new WeakSet;function Qo(A){let t=vi(A);if("reason"in t){ve(A)&&!Io.has(A)&&(Io.add(A),console.warn(`[msaview] the linked transcript is not mapped to the genome: ${t.reason}`));return}let e=ao(t.transcript);return{...e,codingPositions:Object.keys(e.g2p).map(Number).sort((n,r)=>n-r)}}function Li(A,t){let e=0,n=A.length;for(;e<n;){let r=e+n>>>1;A[r]<t?e=r+1:n=r}return e}function Bo(A,t,e){let n=new Set,{codingPositions:r,g2p:o}=A;for(let i=Li(r,t);i<r.length&&r[i]<e;i++)n.add(o[r[i]]);return n}var Ui="This view's alignment is no longer in browser storage. Stored alignments are kept for 7 days after they were last used, and are lost when site data is cleared.",Co=" Retry runs the original search again and rebuilds it.",Eo=" Relaunch it from the gene to rebuild it.",qi="This view's alignment could not be read from browser storage.",_i="Part of this view is no longer in browser storage: annotations, a tree or row metadata too large for the session. Stored documents are kept for 7 days after they were last used, and are lost when site data is cleared.";function mo(A){let{dataStoreId:t}=A;t&&(async()=>{try{A.setLoadingStoredData(!0);let e=await eo(t);if(A.dataStoreId!==t)return;(0,MA.transaction)(()=>{if(e){let{data:n}=A;e.msa&&!n.msa&&A.setMSA(e.msa),e.tree&&!n.tree&&A.setTree(e.tree),e.treeMetadata&&!n.treeMetadata&&A.setTreeMetadata(e.treeMetadata),e.gff&&!n.gff&&A.setGFF(e.gff),A.setLastStoredData(e)}else A.setDataStoreId(void 0),fo(A)?A.addWarning(_i):A.setError(new Error(Ui+(A.blastParams??A.orthologParams?Co:Eo)))})}catch(e){console.error("Failed to load MSA data from IndexedDB:",e),(0,xA.isAlive)(A)&&!fo(A)&&A.setError(new Error(`${qi} ${e}.${A.blastParams??A.orthologParams?Co:Eo}`))}finally{A.setLoadingStoredData(!1)}})()}function fo(A){return!!(A.data.msa||A.msaFilehandle||A.init?.msaIndexedLocation)}function Yi(A){return!(A.msa||A.tree||A.treeMetadata||A.gff)}function Hi(A,t){return!!A&&A.msa===t.msa&&A.tree===t.tree&&A.treeMetadata===t.treeMetadata&&A.gff===t.gff}function ho(A){let{dataStoreId:t,ownsDataStoreRow:e,isStoringData:n,loadingStoredData:r,lastStoredData:o}=A,i=A.unsavedDocuments;if(!(n||r||Hi(o,i))){if(Yi(i)){o&&(0,MA.transaction)(()=>{A.setDataStoreId(void 0),A.setOwnsDataStoreRow(!1),A.setLastStoredData(i)});return}A.setIsStoringData(!0),(async()=>{try{let s=t&&e?t:$n();await Ao(s,i)&&(0,MA.transaction)(()=>{A.setDataStoreId(s),A.setOwnsDataStoreRow(!0)})}catch(s){console.error("Failed to store MSA data to IndexedDB:",s)}finally{(0,MA.transaction)(()=>{A.setLastStoredData(i),A.setIsStoringData(!1)})}})()}}function Pi(A){return!!A.connectedTranscript&&!A.connectedFeature}function wo(A,t,e,n){t&&!A.launchCompleted&&!Pi(A)&&ro({self:A,message:e,launch:n,onLaunched:()=>{A.setLaunchCompleted(!0)}})}function po(A){wo(A,!!A.orthologParams,"Resolving orthologs",t=>Mt({self:A,scope:t}))}function Do(A){wo(A,!!A.blastParams,"Submitting query",t=>yt({self:A,scope:t}))}function yo(A){let{rows:t,domainsRequested:e,annotations:n,rowData:r}=A;if(t.length>0&&n.length===0&&!e&&Object.values(r).some(o=>o?.Accession)){let o=new AbortController,i=()=>{o.abort()};(0,xA.addDisposer)(A,i),A.setDomainsRequested(!0),A.setStatus({msg:"Fetching protein domains from NCBI",onCancel:i}),(async()=>{try{await zn(A,o.signal)}catch(s){F(s)||console.error("[msaview-domains] auto-load failed:",s)}finally{(0,xA.isAlive)(A)&&A.setStatus(void 0)}})()}}function No(A){let{init:t}=A;if(t){let{msaUrl:e,msaIndexedLocation:n,msaName:r,querySeqName:o}=t,i=!!(n&&r);if(i&&A.data.msa)return;(async()=>{try{A.setError(void 0);let s=e?Pe(e):void 0;s&&A.setUniprotId(s);let c=o??(s?"query":void 0);if(c&&A.setQuerySeqName(c),e)A.setMSAFilehandle({uri:e,locationType:"UriLocation"});else if(n&&r){let a=await Kn({location:n,name:r});if(!a)throw new Error(`No alignment named ${r} in ${n.uri}`);A.setMSA(a)}i||A.setInit(void 0)}catch(s){A.setError(s),console.error(s)}})()}}function ko(A){let t=!1;return()=>{let e=On({model:A});e!==void 0?(A.setMousePos(e),t=!0):t&&(A.setMousePos(void 0),t=!1)}}function uo(A,t){let{connectedViewId:e,transcriptToMsaMap:n}=A;if(!n||!oA(A))return[];let r=new Set;for(let o of io((0,lo.getSession)(A).views))for(let i of o.structures)if(i.connectedViewId===e)for(let{start:s,end:c}of i[t]??[])for(let a of Bo(n,s,c)){let g=GA(A,a);g!==void 0&&r.add(g)}return[...r]}function Ki(A,t){return!A||!t?A===t:A.length===t.length&&A.every((e,n)=>e===t[n])}function bo(A){let t;return()=>{let{connectedViewId:e,transcriptToMsaMap:n}=A;if(!e||!n)return;let r=uo(A,"hoverGenomeHighlights"),o=r.length?[]:uo(A,"clickGenomeHighlights"),i=A.highlightColumns??[],s=r.length?r:o.length?o:i,c=s.length>0?s:void 0;Ki(t,c)||(t=c,A.setHighlightedColumns(c))}}function So(){to().catch(A=>{console.error("Failed to cleanup old MSA data:",A)})}function Mo(A){A.domainsOnGenome&&A.connectedView&&A.connectedDomains.features.length>0&&(A.showDomainsOnGenome(),A.setDomainsOnGenome(!1))}function Le(A,t){let{transcriptToMsaMap:e,mafRegion:n}=A;if(n){let r=n.start+t;return r<n.end?[{refName:n.refName,start:r,end:r+1}]:[]}if(e){let{refName:r,p2gCodon:o}=e,i=t+(A.querySeqOffset??0);return so(o,i)?.map(([s,c])=>({refName:r,start:s,end:c}))??[]}return[]}function Ae({model:A,coord:t}){let e=A.visibleColToSeqPos(A.querySeqName,t);return e===void 0?[]:Le(A,e)}function xo(A){let t=Ae(A),e=t[0],n=t.at(-1);return e&&n?{refName:e.refName,start:e.start,end:n.end}:void 0}function Ti(A){return ot(A)?"site":"domain"}function Oi(A){let t=[];for(let e of A.toSorted((n,r)=>n.start-r.start)){let n=t.at(-1);n&&n.refName===e.refName&&e.start<=n.end?n.end=Math.max(n.end,e.end):t.push({...e})}return t}function Zi(A,t){let e=[];for(let n of t)e.push(...Le(A,n));return Oi(e)}function Ro(A){let t=new Map;if(A.showDomains)for(let n of A.annotationsByRow[A.querySeqName]??[]){let r=t.get(n.accession);r?r.push(n):t.set(n.accession,[n])}let e=[...t].flatMap(([n,r])=>{let o=new Set;for(let{start:a,end:g}of r)for(let C=a-1;C<g;C++)o.add(C);let i=r[0],s=A.featureColors.get(i)?.fill,c=Zi(A,o);return s&&c.length>0?[{feature:{name:A.annotationTypes.get(n)?.name??i.name,accession:n,kind:Ti(i.featureType),regions:c},fill:s,residues:o.size}]:[]}).toSorted((n,r)=>r.residues-n.residues);return{features:e.map(n=>n.feature),color:{field:"accession",domain:e.map(n=>n.feature.accession),range:e.map(n=>n.fill),labels:e.map(n=>n.feature.name)}}}function Xi(A){return`msaview-domains-${A}`}function Fo({viewId:A,assemblyName:t,name:e,strand:n,domains:r}){let o=Xi(A),i=n===void 0?{}:{strand:n};return{type:"FeatureTrack",trackId:o,name:e,assemblyNames:[t],adapter:{type:"FromConfigAdapter",features:r.features.map(({name:s,accession:c,regions:a},g)=>{let C=`${o}-${g}`;return{uniqueId:C,refName:a[0].refName,start:Math.min(...a.map(Q=>Q.start)),end:Math.max(...a.map(Q=>Q.end)),...i,type:"protein_domain",name:s,accession:c,subfeatures:a.map((Q,I)=>({uniqueId:`${C}-${I}`,refName:Q.refName,start:Q.start,end:Q.end,...i,type:"protein_domain_part"}))}})},displays:[{type:"LinearBasicDisplay",displayId:`${o}-LinearBasicDisplay`,color:{...r.color,title:"Domains"}}]}}var vo=R(To()),qe=R(nA()),Lo=R(Zo()),Uo=R(ne()),ee=R(LA());function Go(A){return A.replace(/\.\d+$/,"")}function Vi(A,t){let e=Go(t);return[A.get("name"),A.get("id"),A.get("transcript_id"),A.id()].some(n=>typeof n=="string"&&(n===t||Go(n)===e))}function Jo(A){return A.map(t=>({assemblyName:t.assemblyName,refName:t.refName,start:Math.floor(t.start),end:Math.ceil(t.end)}))}function ji(A){let t=Jo(A.dynamicBlocks?.contentBlocks??[]),e=Jo(A.displayedRegions);return t.length>0?[t,e]:[e]}function qo(A){return A.filter(t=>t.type==="FeatureTrack")}async function Wi(A,t){let e=A.connectedView,n=(0,qe.getSession)(A),r="msaview-connectedTranscript",o=qo(e.tracks);for(let i of ji(e))for(let s of o){let c=await n.rpcManager.call(r,"CoreGetFeatures",{adapterConfig:(0,vo.getConf)(s,"adapter"),regions:i});for(let a of c){let g=Ze(a).find(C=>Vi(C,t));if(g)return g}}}async function zi(A,t){let e=await Xe({start:t.get("start"),end:t.get("end"),refName:t.get("refName"),assemblyName:A.connectedView.assemblyNames[0],session:(0,qe.getSession)(A)});return(0,Lo.translateTranscript)({transcript:t,...e})?.protein}var Ue=new WeakMap;async function $i({self:A,transcriptId:t,blastParams:e,orthologParams:n,isCurrent:r}){let o=qo(A.connectedView.tracks).length;try{A.setProgress(`Looking up ${t} in the genome view...`);let i=await Wi(A,t);if(!i)throw new Error(`Transcript "${t}" was not found in the ${o} feature track(s) open in the connected genome view. Open the gene track that carries it, and make sure the view is on its locus.`);let s=await zi(A,i);if(!s)throw new Error(`Transcript "${t}" has no CDS to translate`);if(!r())return;let c=i.toJSON();(0,ee.transaction)(()=>{A.setProgress(""),e&&!e.proteinSequence&&A.setBlastParams({...e,selectedTranscript:c,proteinSequence:s}),n&&!n.proteinSequence&&A.setOrthologParams({...n,selectedTranscript:c,proteinSequence:s}),A.setConnectedFeature(c)})}catch(i){console.error(i),r()&&(A.setProgress(""),A.setError(i))}}function _o(A){let{connectedTranscript:t,connectedFeature:e,connectedView:n,blastParams:r,orthologParams:o}=A;if(!t||e||!n?.initialized||n.tracks.length===0)return;let i=(Ue.get(A)??0)+1;Ue.set(A,i),(0,ee.untracked)(()=>{$i({self:A,transcriptId:t,blastParams:r,orthologParams:o,isCurrent:()=>(0,Uo.isAlive)(A)&&Ue.get(A)===i})})}var Ho=R(nA());var Yo="session-highlights";function Aa({start:A,end:t},e,n){let r=new Set;if(e.kind==="maf")for(let o=Math.max(A,e.start);o<Math.min(t,e.end);o++)r.add(o-e.start);else for(let o=A;o<t;o++){let i=e.map.g2p[o];i!==void 0&&r.add(i-n)}return[...r].filter(o=>o>=0).sort((o,i)=>o-i)}function ea({highlights:A,onGenome:t,querySeqName:e,querySeqOffset:n,sameAssembly:r,sameRefName:o,labels:i}){return A.flatMap(s=>{if(!r(s.assemblyName)||!o(s.refName))return[];let c=[];for(let a of Aa(s,t,n)){let g=c.at(-1);g?.end===a?g.end=a+1:c.push({row:e,start:a+1,end:a+1,...i&&s.label?{label:s.label}:{},...s.color?{color:s.color}:{}})}return c})}function ta(A){return!("highlightLabelsVisible"in A&&A.highlightLabelsVisible===!1)}function Po(A){return()=>{let t=(0,Ho.getSession)(A),{connectedView:e,transcriptToMsaMap:n,mafRegion:r}=A,o=r?.assemblyName??e?.assemblyNames[0],{assemblyManager:i}=t,s=o?i.get(o):void 0,c=r?{kind:"maf",...r}:n?{kind:"transcript",map:n}:void 0;if(!t.highlightsVisible||!t.highlights.length||!c||!s?.initialized||!oA(A)){A.clearHighlight(Yo);return}let a=s.getCanonicalRefName(c.kind==="maf"?c.refName:c.map.refName);A.applyHighlight(Yo,ea({highlights:t.highlights,onGenome:c,querySeqName:A.querySeqName,querySeqOffset:A.querySeqOffset,sameAssembly:g=>i.get(g)===s,sameRefName:g=>s.getCanonicalRefName(g)===a,labels:ta(t)}))}}var Sg=["ncbi","panther","uniref"];function na(){return b.types.compose(Ko.BaseViewModel,rt(),b.types.model("MsaView",{connectedViewId:b.types.maybe(b.types.string),connectedFeature:b.types.frozen(),connectedTranscript:b.types.maybe(b.types.string),blastParams:b.types.frozen(),orthologParams:b.types.frozen(),querySeqName:b.types.stripDefault(b.types.string,"QUERY"),querySeqOffset:b.types.stripDefault(b.types.number,0),uniprotId:b.types.maybe(b.types.string),zoomToBaseLevel:b.types.stripDefault(b.types.boolean,!1),init:b.types.frozen(),dataStoreId:b.types.maybe(b.types.string),launchCompleted:!1,mafRegion:b.types.frozen(),embeddedMode:!0,domainsOnGenome:b.types.stripDefault(b.types.boolean,!1)})).volatile(()=>({rid:void 0,progress:"",loadingStoredData:!1,isStoringData:!1,lastStoredData:void 0,ownsDataStoreRow:!1,launchController:void 0,domainsRequested:!1})).views(A=>({get transcriptToMsaMap(){return A.connectedFeature?Qo(A.connectedFeature):void 0},get connectedView(){let{views:t}=(0,K.getSession)(A);return t.find(e=>e.id===A.connectedViewId)}})).views(A=>({get connectedHoverHighlights(){let{mouseCol:t}=A;return t===void 0?[]:Ae({model:A,coord:t})},get connectedClickHighlights(){let{mouseClickCol:t}=A;return t===void 0?[]:Ae({model:A,coord:t})},get connectedHighlights(){return[...this.connectedHoverHighlights,...this.connectedClickHighlights]},get connectedDomains(){return Ro(A)}})).views(A=>({get hostRestoresData(){let{msaIndexedLocation:t,msaName:e}=A.init??{};return A.hostCarriesData||!!(t&&e)},get unsavedDocuments(){let{data:t,init:e}=A,n=(0,b.getSnapshot)(t),r=(o,i)=>{let s=t[o];return s&&!i&&!n[o]?s:void 0};return{msa:r("msa",A.msaFilehandle??e?.msaIndexedLocation),tree:r("tree",A.treeFilehandle),treeMetadata:r("treeMetadata",A.treeMetadataFilehandle),gff:r("gff",A.gffFilehandle)}}})).actions(A=>({setZoomToBaseLevel(t){A.zoomToBaseLevel=t},setProgress(t){A.progress=t},setRid(t){A.rid=t},setBlastParams(t){A.blastParams=t},setConnectedFeature(t){A.connectedFeature=t},setOrthologParams(t){A.orthologParams=t},setInit(t){A.init=t},setQuerySeqName(t){A.querySeqName=t},setUniprotId(t){A.uniprotId=t},setDataStoreId(t){A.dataStoreId=t},setLaunchCompleted(t){A.launchCompleted=t},setLoadingStoredData(t){A.loadingStoredData=t},setIsStoringData(t){A.isStoringData=t},setLastStoredData(t){A.lastStoredData=t},setOwnsDataStoreRow(t){A.ownsDataStoreRow=t},setLaunchController(t){A.launchController=t},cancelLaunch(){A.launchController?.abort(),A.launchController=void 0,A.blastParams=void 0,A.orthologParams=void 0,A.init=void 0,A.launchCompleted=!1,A.progress="",A.rid=void 0,A.error=void 0},retryLaunch(){A.launchController?.abort(),A.launchController=void 0,A.progress="",A.rid=void 0,A.error=void 0,A.launchCompleted=!1,A.blastParams&&(A.blastParams={...A.blastParams}),A.orthologParams&&(A.orthologParams={...A.orthologParams}),A.init&&(A.init={...A.init})},setDomainsRequested(t){A.domainsRequested=t},setDomainsOnGenome(t){A.domainsOnGenome=t},showDomainsOnGenome(){let t=(0,K.getSession)(A),{connectedView:e,connectedDomains:n,connectedFeature:r}=A,o=e?.assemblyNames[0];if(!e||!o||n.features.length===0||!(0,K.isSessionWithAddSessionTrack)(t))return;let i=r,s=[i?.gene_name,i?.gene,i?.name].find(g=>typeof g=="string"&&g!==""),c=Fo({viewId:A.id,assemblyName:o,name:`${s??A.querySeqName} domains (from the alignment)`,strand:A.mafRegion?void 0:A.transcriptToMsaMap?.strand,domains:n}),a=(0,K.isSessionWithSessionTracks)(t)?t.sessionTracks.find(g=>g.trackId===c.trackId):void 0;a&&(0,K.isSessionWithDeleteTrackConf)(t)&&t.deleteTrackConf(a),t.addSessionTrackConf(c)&&e.launchTrack(c.trackId)},handleMsaClick(t){let{connectedView:e,zoomToBaseLevel:n}=A,r=xo({model:A,coord:t});!r||!e||(n?e.navTo(r):e.centerAt(r.start,r.refName))}})).actions(A=>{let t=A.setMouseClickPos.bind(A);return{setMouseClickPos(e,n){t(e,n),e!==void 0&&A.handleMsaClick(e)}}}).actions(A=>{let t=A.reset.bind(A);return{reset(){let{displayName:e,minimized:n,zoomToBaseLevel:r}=A;t(),e!==void 0&&A.setDisplayName(e),A.setMinimized(n),A.setZoomToBaseLevel(r),A.setDomainsRequested(!1),A.setLastStoredData(void 0),A.setOwnsDataStoreRow(!1)}}}).views(A=>{let t=A.menuItems.bind(A);return{menuItems(){return[...t(),{label:"Zoom to base level on click?",type:"checkbox",checked:A.zoomToBaseLevel,onClick:()=>{A.setZoomToBaseLevel(!A.zoomToBaseLevel)}},...A.connectedView&&A.connectedDomains.features.length>0?[{label:"Show domains on the genome",onClick:()=>{A.showDomainsOnGenome()}}]:[]]}}}).actions(A=>({afterCreate(){So(),(0,b.addDisposer)(A,()=>{A.launchController?.abort()}),mo(A);for(let t of[ho,_o,Do,po,No,yo,Mo])(0,b.addDisposer)(A,(0,RA.autorun)(()=>{t(A)}));(0,b.addDisposer)(A,(0,RA.autorun)(ko(A))),(0,b.addDisposer)(A,(0,RA.autorun)(bo(A))),(0,b.addDisposer)(A,(0,RA.autorun)(Po(A)))}}))}export{na as default,Sg as orthologSources};
12
- //# sourceMappingURL=model-T6Q2NL4X.js.map
11
+ `)){let[r,o,i]=n.split(" ");if(r&&Hn(r)===e)return{offset:Number(o),length:Number(i)}}}var Tn=R(nA());function On({model:A}){let{assemblyManager:t,hovered:e}=(0,Tn.getSession)(A),{transcriptToMsaMap:n,connectedView:r,mafRegion:o}=A;if(!r?.initialized||!He(e)||!oA(A))return;let{coord:i,refName:s}=e.hoverPosition,c=i-1,a=t.get(o?.assemblyName??r.assemblyNames[0]??""),g=Q=>(a?.initialized?a.getCanonicalRefName(Q):void 0)??Q,C=g(s);if(o)return C!==g(o.refName)||!r.assemblyNames.includes(o.assemblyName)||c<o.start||c>=o.end?void 0:Ye(A,c-o.start);if(n&&C===g(n.refName)){let Q=n.g2p[c];if(Q!==void 0)return GA(A,Q)}}var mi="jbrowse-msaview-domain-cache-v3",hi=["jbrowse-msaview-domain-cache","jbrowse-msaview-domain-cache-v2"],$A="domains",wi=1,pi=rA(mi,wi,A=>{A.objectStoreNames.contains($A)||A.createObjectStore($A,{keyPath:"accession"})}),Zn=!1;function Xn(){if(!Zn){Zn=!0;for(let A of hi)Promise.resolve().then(()=>je(A)).catch(()=>{})}return pi()}function Vn(A){return iA("domain cache read",async()=>{let e=(await Xn()).transaction($A,"readonly"),n=await Promise.all(A.map(r=>e.store.get(r)));return await e.done,n},[])}function jn(A){return iA("domain cache write",async()=>{let e=(await Xn()).transaction($A,"readwrite");for(let n of A)await e.store.put(n);await e.done},void 0)}function j(A,t){let e=new RegExp(`<${t}>(.*?)</${t}>`,"s").exec(A)?.[1];return e===void 0?void 0:At(e)}function Di(A){let t={},e=/<GBQualifier>([\s\S]*?)<\/GBQualifier>/g,n;for(;(n=e.exec(A))!==null;){let r=j(n[1],"GBQualifier_name"),o=j(n[1],"GBQualifier_value");r&&o!==void 0&&t[r]===void 0&&(t[r]=o)}return t}function yi(A){let t=[],e=/<GBInterval>([\s\S]*?)<\/GBInterval>/g,n;for(;(n=e.exec(A))!==null;){let r=n[1],o=j(r,"GBInterval_from"),i=j(r,"GBInterval_to"),s=j(r,"GBInterval_point");o&&i?t.push({start:Number(o),end:Number(i)}):s&&t.push({start:Number(s),end:Number(s)})}return t}function Ni(A){let t=j(A,"GBFeature_key"),e=Di(A),n=e.db_xref,r=yi(A);if((t==="Region"||t==="Site")&&n?.startsWith("CDD:")&&r.length>0){let o=n.replace("CDD:",""),i=t==="Region",s=e.note?.split(/[[(]/)[0]?.trim(),c=i?e.region_name??o:s||e.site_type||"site",a=i?o:`${o}:${c}`;return{signature:{entry:{name:c,description:e.note??c,accession:a}},locations:r,featureType:t}}}function ki(A){let t=new Map,e=/<GBSeq>([\s\S]*?)<\/GBSeq>/g,n;for(;(n=e.exec(A))!==null;){let r=n[1],o=[],i=/<GBFeature>([\s\S]*?)<\/GBFeature>/g,s;for(;(s=i.exec(r))!==null;){let c=Ni(s[1]);c&&o.push(c)}for(let c of[j(r,"GBSeq_accession-version"),j(r,"GBSeq_primary-accession")])c&&t.set(c,o)}return t}async function Wn(A,t){let e=[...new Set(A)].filter(Boolean),n=new Map,r=await Vn(e),o=[];e.forEach((c,a)=>{let g=r[a];g?n.set(c,g.matches):o.push(c)});let i=[],s=100;for(let c=0;c<o.length;c+=s){let a=o.slice(c,c+s),g;try{g=await $e(ze({db:"protein",id:a.join(","),rettype:"gp",retmode:"xml"}),{signal:t})}catch(Q){if(F(Q))throw Q;console.warn("[msaview-domains] efetch failed, keeping what loaded:",Q);break}let C=ki(g);for(let Q of a){let I=C.get(Q);I!==void 0&&(n.set(Q,I),i.push({accession:Q,matches:I}))}}return i.length>0&&await jn(i),n}async function zn(A,t){let e=Object.entries(A.rowData).flatMap(([o,i])=>i?.Accession?[{rowName:o,accession:i.Accession}]:[]);if(e.length===0)throw new Error("No NCBI accessions found in alignment rows");let n=await Wn(e.map(o=>o.accession),t),r=e.flatMap(({rowName:o,accession:i})=>(n.get(i)??[]).flatMap(({signature:s,locations:c,featureType:a})=>s.entry?c.map(({start:g,end:C})=>({id:o,accession:s.entry.accession,name:s.entry.name,description:s.entry.description,featureType:a,start:g,end:C})):[]));if(r.length===0)throw new Error("No CDD domain annotations found for these proteins");A.setAnnotations(r)}var bi="jbrowse-msaview-data",Si=1,uA="msa-data",Je=rA(bi,Si,A=>{A.objectStoreNames.contains(uA)||A.createObjectStore(uA,{keyPath:"id"}).createIndex("timestamp","timestamp",{unique:!1})});function $n(){return`msa-${Date.now()}-${Math.random().toString(36).slice(2,11)}`}async function Ao(A,t){try{let e=await Je(),n={...t,id:A,timestamp:Date.now()};return await e.put(uA,n),!0}catch(e){return console.warn("Failed to store MSA data:",e),!1}}async function eo(A){let t=await Je(),e=await t.get(uA,A);if(!e)return;try{await t.put(uA,{...e,timestamp:Date.now()})}catch(i){console.warn("Failed to refresh MSA data timestamp:",i)}let{id:n,timestamp:r,...o}=e;return o}async function to(A=10080*60*1e3){try{let t=await Je(),e=Date.now()-A,o=await t.transaction(uA,"readwrite").store.index("timestamp").openCursor(IDBKeyRange.upperBound(e)),i=0;for(;o;)await o.delete(),i++,o=await o.continue();return i}catch(t){return console.warn("Failed to cleanup old MSA data:",t),0}}var no=R(nA()),oo=R(LA());function Mi(A){if(!(A.rows.length<2))try{A.calculateNeighborJoiningTreeFromMSA()}catch(t){console.error(t);try{(0,no.getSession)(A).notify(`The alignment loaded, but no tree was built. ${t instanceof Error?t.message:String(t)}`,"warning")}catch(e){console.error(e)}}}function ro(A){(0,oo.untracked)(()=>{xi(A)})}function xi({self:A,message:t,launch:e,onLaunched:n}){A.launchController?.abort();let r=new AbortController,{signal:o}=r;A.setLaunchController(r);let i=c=>{o.aborted||c()},s={signal:o,act:i,onProgress:c=>{i(()=>{A.setProgress(c)})},onRid:c=>{i(()=>{A.setRid(c)})}};(async()=>{try{i(()=>{A.setProgress(t),A.setError(void 0)});let{warnings:c=[],...a}=await e(s);i(()=>{A.setData(a);for(let g of c)A.addWarning(g);n()}),a.tree||i(()=>{Mi(A)})}catch(c){F(c)||(i(()=>{A.setError(c)}),console.error(c))}finally{i(()=>{A.setProgress(""),A.launchController===r&&A.setLaunchController(void 0)})}})()}function Ri(A){let t=A;return t.type==="ProteinView"&&Array.isArray(t.structures)}function io(A){return A.filter(Ri)}function ao(A){let t=A.strand,e=A.refName;if(t!==-1&&t!==1)throw new Error(`Invalid strand value: ${t}. Expected 1 or -1.`);if(!e)throw new Error("refName is required");let n=new Map;for(let c of A.subfeatures??[])if(c.type==="CDS"&&c.start<c.end){let a=`${c.start}-${c.end}`;n.has(a)||n.set(a,c)}let r=[...n.values()].sort((c,a)=>t*(c.start-a.start)),o={},i={},s={};if(r.length!==0){let a=(3-(r[0]?.phase??0))%3,g=-1;for(let C of r){let Q=C.end-C.start;for(let I=0;I<Q;I++){let d=t===1?C.start+I:C.end-1-I,h=Math.floor(a++/3);o[d]=h,h!==g?(i[h]=d,s[h]=[d],g=h):s[h].push(d)}}}return{g2p:o,p2g:i,p2gCodon:s,refName:e,strand:t}}function so(A,t){let e=A[t];if(e===void 0)return;let n=[...e].sort((o,i)=>o-i),r=[];for(let o of n){let i=r.at(-1);i?.[1]===o?i[1]=o+1:r.push([o,o+1])}return r}var Fi=1e6;function ve(A){return typeof A=="object"&&A!==null}function go(A){return Number.isSafeInteger(A)}function co(A){return ve(A)&&typeof A.type=="string"&&A.type.toLowerCase()==="cds"&&go(A.start)&&go(A.end)&&A.start<A.end}function Gi(A){let t=Number(A);return t===1||t===2?t:0}function Ji(A){let{subfeatures:t}=A,e=(Array.isArray(t)?t:[]).filter(co);return e.length>0?e:co(A)?[A]:[]}function vi(A){if(!ve(A))return{reason:"it is not a feature"};let{refName:t,strand:e}=A;if(typeof t!="string"||!t)return{reason:"it has no refName"};if(e!==1&&e!==-1)return{reason:`its strand is ${JSON.stringify(e)}, not 1 or -1`};let n=Ji(A).map(o=>({refName:t,type:"CDS",start:o.start,end:o.end,phase:Gi(o.phase)}));if(n.length===0)return{reason:"it has no CDS with numeric start < end"};let r=n.reduce((o,i)=>o+i.end-i.start,0);return r>Fi?{reason:`its CDS covers ${r} bases, more than any real transcript`}:{transcript:{refName:t,strand:e,start:Math.min(...n.map(o=>o.start)),end:Math.max(...n.map(o=>o.end)),subfeatures:n}}}var Io=new WeakSet;function Qo(A){let t=vi(A);if("reason"in t){ve(A)&&!Io.has(A)&&(Io.add(A),console.warn(`[msaview] the linked transcript is not mapped to the genome: ${t.reason}`));return}let e=ao(t.transcript);return{...e,codingPositions:Object.keys(e.g2p).map(Number).sort((n,r)=>n-r)}}function Li(A,t){let e=0,n=A.length;for(;e<n;){let r=e+n>>>1;A[r]<t?e=r+1:n=r}return e}function Bo(A,t,e){let n=new Set,{codingPositions:r,g2p:o}=A;for(let i=Li(r,t);i<r.length&&r[i]<e;i++)n.add(o[r[i]]);return n}var Ui="This view's alignment is no longer in browser storage. Stored alignments are kept for 7 days after they were last used, and are lost when site data is cleared.",Co=" Retry runs the original search again and rebuilds it.",Eo=" Relaunch it from the gene to rebuild it.",qi="This view's alignment could not be read from browser storage.",_i="Part of this view is no longer in browser storage: annotations, a tree or row metadata too large for the session. Stored documents are kept for 7 days after they were last used, and are lost when site data is cleared.";function mo(A){let{dataStoreId:t}=A;t&&(async()=>{try{A.setLoadingStoredData(!0);let e=await eo(t);if(A.dataStoreId!==t)return;(0,MA.transaction)(()=>{if(e){let{data:n}=A;e.msa&&!n.msa&&A.setMSA(e.msa),e.tree&&!n.tree&&A.setTree(e.tree),e.treeMetadata&&!n.treeMetadata&&A.setTreeMetadata(e.treeMetadata),e.gff&&!n.gff&&A.setGFF(e.gff),A.setLastStoredData(e)}else A.setDataStoreId(void 0),fo(A)?A.addWarning(_i):A.setError(new Error(Ui+(A.blastParams??A.orthologParams?Co:Eo)))})}catch(e){console.error("Failed to load MSA data from IndexedDB:",e),(0,xA.isAlive)(A)&&!fo(A)&&A.setError(new Error(`${qi} ${e}.${A.blastParams??A.orthologParams?Co:Eo}`))}finally{A.setLoadingStoredData(!1)}})()}function fo(A){return!!(A.data.msa||A.msaFilehandle||A.init?.msaIndexedLocation)}function Yi(A){return!(A.msa||A.tree||A.treeMetadata||A.gff)}function Hi(A,t){return!!A&&A.msa===t.msa&&A.tree===t.tree&&A.treeMetadata===t.treeMetadata&&A.gff===t.gff}function ho(A){let{dataStoreId:t,ownsDataStoreRow:e,isStoringData:n,loadingStoredData:r,lastStoredData:o}=A,i=A.unsavedDocuments;if(!(n||r||Hi(o,i))){if(Yi(i)){o&&(0,MA.transaction)(()=>{A.setDataStoreId(void 0),A.setOwnsDataStoreRow(!1),A.setLastStoredData(i)});return}A.setIsStoringData(!0),(async()=>{try{let s=t&&e?t:$n();await Ao(s,i)&&(0,MA.transaction)(()=>{A.setDataStoreId(s),A.setOwnsDataStoreRow(!0)})}catch(s){console.error("Failed to store MSA data to IndexedDB:",s)}finally{(0,MA.transaction)(()=>{A.setLastStoredData(i),A.setIsStoringData(!1)})}})()}}function Pi(A){return!!A.connectedTranscript&&!A.connectedFeature}function wo(A,t,e,n){t&&!A.launchCompleted&&!Pi(A)&&ro({self:A,message:e,launch:n,onLaunched:()=>{A.setLaunchCompleted(!0)}})}function po(A){wo(A,!!A.orthologParams,"Resolving orthologs",t=>Mt({self:A,scope:t}))}function Do(A){wo(A,!!A.blastParams,"Submitting query",t=>yt({self:A,scope:t}))}function yo(A){let{rows:t,domainsRequested:e,annotations:n,rowData:r}=A;if(t.length>0&&n.length===0&&!e&&Object.values(r).some(o=>o?.Accession)){let o=new AbortController,i=()=>{o.abort()};(0,xA.addDisposer)(A,i),A.setDomainsRequested(!0),A.setStatus({msg:"Fetching protein domains from NCBI",onCancel:i}),(async()=>{try{await zn(A,o.signal)}catch(s){F(s)||console.error("[msaview-domains] auto-load failed:",s)}finally{(0,xA.isAlive)(A)&&A.setStatus(void 0)}})()}}function No(A){let{init:t}=A;if(t){let{msaUrl:e,msaIndexedLocation:n,msaName:r,querySeqName:o}=t,i=!!(n&&r);if(i&&A.data.msa)return;(async()=>{try{A.setError(void 0);let s=e?Pe(e):void 0;s&&A.setUniprotId(s);let c=o??(s?"query":void 0);if(c&&A.setQuerySeqName(c),e)A.setMSAFilehandle({uri:e,locationType:"UriLocation"});else if(n&&r){let a=await Kn({location:n,name:r});if(!a)throw new Error(`No alignment named ${r} in ${n.uri}`);A.setMSA(a)}i||A.setInit(void 0)}catch(s){A.setError(s),console.error(s)}})()}}function ko(A){let t=!1;return()=>{let e=On({model:A});e!==void 0?(A.setMousePos(e),t=!0):t&&(A.setMousePos(void 0),t=!1)}}function uo(A,t){let{connectedViewId:e,transcriptToMsaMap:n}=A;if(!n||!oA(A))return[];let r=new Set;for(let o of io((0,lo.getSession)(A).views))for(let i of o.structures)if(i.connectedViewId===e)for(let{start:s,end:c}of i[t]??[])for(let a of Bo(n,s,c)){let g=GA(A,a);g!==void 0&&r.add(g)}return[...r]}function Ki(A,t){return!A||!t?A===t:A.length===t.length&&A.every((e,n)=>e===t[n])}function bo(A){let t;return()=>{let{connectedViewId:e,transcriptToMsaMap:n}=A;if(!e||!n)return;let r=uo(A,"hoverGenomeHighlights"),o=r.length?[]:uo(A,"clickGenomeHighlights"),i=A.highlightColumns??[],s=r.length?r:o.length?o:i,c=s.length>0?s:void 0;Ki(t,c)||(t=c,A.setHighlightedColumns(c))}}function So(){to().catch(A=>{console.error("Failed to cleanup old MSA data:",A)})}function Mo(A){A.domainsOnGenome&&A.connectedView&&A.connectedDomains.features.length>0&&(A.showDomainsOnGenome(),A.setDomainsOnGenome(!1))}function Le(A,t){let{transcriptToMsaMap:e,mafRegion:n}=A;if(n){let r=n.start+t;return r<n.end?[{refName:n.refName,start:r,end:r+1}]:[]}if(e){let{refName:r,p2gCodon:o}=e,i=t+(A.querySeqOffset??0);return so(o,i)?.map(([s,c])=>({refName:r,start:s,end:c}))??[]}return[]}function Ae({model:A,coord:t}){let e=A.visibleColToSeqPos(A.querySeqName,t);return e===void 0?[]:Le(A,e)}function xo(A){let t=Ae(A),e=t[0],n=t.at(-1);return e&&n?{refName:e.refName,start:e.start,end:n.end}:void 0}function Ti(A){return ot(A)?"site":"domain"}function Oi(A){let t=[];for(let e of A.toSorted((n,r)=>n.start-r.start)){let n=t.at(-1);n&&n.refName===e.refName&&e.start<=n.end?n.end=Math.max(n.end,e.end):t.push({...e})}return t}function Zi(A,t){let e=[];for(let n of t)e.push(...Le(A,n));return Oi(e)}function Ro(A){let t=new Map;if(A.showDomains)for(let n of A.annotationsByRow[A.querySeqName]??[]){let r=t.get(n.accession);r?r.push(n):t.set(n.accession,[n])}let e=[...t].flatMap(([n,r])=>{let o=new Set;for(let{start:a,end:g}of r)for(let C=a-1;C<g;C++)o.add(C);let i=r[0],s=A.featureColors.get(i)?.fill,c=Zi(A,o);return s&&c.length>0?[{feature:{name:A.annotationTypes.get(n)?.name??i.name,accession:n,kind:Ti(i.featureType),regions:c},fill:s,residues:o.size}]:[]}).toSorted((n,r)=>r.residues-n.residues);return{features:e.map(n=>n.feature),color:{field:"accession",scale:{domain:e.map(n=>n.feature.accession),range:e.map(n=>n.fill),names:e.map(n=>n.feature.name)}}}}function Xi(A){return`msaview-domains-${A}`}function Fo({viewId:A,assemblyName:t,name:e,strand:n,domains:r}){let o=Xi(A),i=n===void 0?{}:{strand:n};return{type:"FeatureTrack",trackId:o,name:e,assemblyNames:[t],adapter:{type:"FromConfigAdapter",features:r.features.map(({name:s,accession:c,regions:a},g)=>{let C=`${o}-${g}`;return{uniqueId:C,refName:a[0].refName,start:Math.min(...a.map(Q=>Q.start)),end:Math.max(...a.map(Q=>Q.end)),...i,type:"protein_domain",name:s,accession:c,subfeatures:a.map((Q,I)=>({uniqueId:`${C}-${I}`,refName:Q.refName,start:Q.start,end:Q.end,...i,type:"protein_domain_part"}))}})},displays:[{type:"LinearBasicDisplay",displayId:`${o}-LinearBasicDisplay`,encoding:{color:{...r.color,legend:{title:"Domains"}}}}]}}var vo=R(To()),qe=R(nA()),Lo=R(Zo()),Uo=R(ne()),ee=R(LA());function Go(A){return A.replace(/\.\d+$/,"")}function Vi(A,t){let e=Go(t);return[A.get("name"),A.get("id"),A.get("transcript_id"),A.id()].some(n=>typeof n=="string"&&(n===t||Go(n)===e))}function Jo(A){return A.map(t=>({assemblyName:t.assemblyName,refName:t.refName,start:Math.floor(t.start),end:Math.ceil(t.end)}))}function ji(A){let t=Jo(A.dynamicBlocks?.contentBlocks??[]),e=Jo(A.displayedRegions);return t.length>0?[t,e]:[e]}function qo(A){return A.filter(t=>t.type==="FeatureTrack")}async function Wi(A,t){let e=A.connectedView,n=(0,qe.getSession)(A),r="msaview-connectedTranscript",o=qo(e.tracks);for(let i of ji(e))for(let s of o){let c=await n.rpcManager.call(r,"CoreGetFeatures",{adapterConfig:(0,vo.getConf)(s,"adapter"),regions:i});for(let a of c){let g=Ze(a).find(C=>Vi(C,t));if(g)return g}}}async function zi(A,t){let e=await Xe({start:t.get("start"),end:t.get("end"),refName:t.get("refName"),assemblyName:A.connectedView.assemblyNames[0],session:(0,qe.getSession)(A)});return(0,Lo.translateTranscript)({transcript:t,...e})?.protein}var Ue=new WeakMap;async function $i({self:A,transcriptId:t,blastParams:e,orthologParams:n,isCurrent:r}){let o=qo(A.connectedView.tracks).length;try{A.setProgress(`Looking up ${t} in the genome view...`);let i=await Wi(A,t);if(!i)throw new Error(`Transcript "${t}" was not found in the ${o} feature track(s) open in the connected genome view. Open the gene track that carries it, and make sure the view is on its locus.`);let s=await zi(A,i);if(!s)throw new Error(`Transcript "${t}" has no CDS to translate`);if(!r())return;let c=i.toJSON();(0,ee.transaction)(()=>{A.setProgress(""),e&&!e.proteinSequence&&A.setBlastParams({...e,selectedTranscript:c,proteinSequence:s}),n&&!n.proteinSequence&&A.setOrthologParams({...n,selectedTranscript:c,proteinSequence:s}),A.setConnectedFeature(c)})}catch(i){console.error(i),r()&&(A.setProgress(""),A.setError(i))}}function _o(A){let{connectedTranscript:t,connectedFeature:e,connectedView:n,blastParams:r,orthologParams:o}=A;if(!t||e||!n?.initialized||n.tracks.length===0)return;let i=(Ue.get(A)??0)+1;Ue.set(A,i),(0,ee.untracked)(()=>{$i({self:A,transcriptId:t,blastParams:r,orthologParams:o,isCurrent:()=>(0,Uo.isAlive)(A)&&Ue.get(A)===i})})}var Ho=R(nA());var Yo="session-highlights";function Aa({start:A,end:t},e,n){let r=new Set;if(e.kind==="maf")for(let o=Math.max(A,e.start);o<Math.min(t,e.end);o++)r.add(o-e.start);else for(let o=A;o<t;o++){let i=e.map.g2p[o];i!==void 0&&r.add(i-n)}return[...r].filter(o=>o>=0).sort((o,i)=>o-i)}function ea({highlights:A,onGenome:t,querySeqName:e,querySeqOffset:n,sameAssembly:r,sameRefName:o,labels:i}){return A.flatMap(s=>{if(!r(s.assemblyName)||!o(s.refName))return[];let c=[];for(let a of Aa(s,t,n)){let g=c.at(-1);g?.end===a?g.end=a+1:c.push({row:e,start:a+1,end:a+1,...i&&s.label?{label:s.label}:{},...s.color?{color:s.color}:{}})}return c})}function ta(A){return!("highlightLabelsVisible"in A&&A.highlightLabelsVisible===!1)}function Po(A){return()=>{let t=(0,Ho.getSession)(A),{connectedView:e,transcriptToMsaMap:n,mafRegion:r}=A,o=r?.assemblyName??e?.assemblyNames[0],{assemblyManager:i}=t,s=o?i.get(o):void 0,c=r?{kind:"maf",...r}:n?{kind:"transcript",map:n}:void 0;if(!t.highlightsVisible||!t.highlights.length||!c||!s?.initialized||!oA(A)){A.clearHighlight(Yo);return}let a=s.getCanonicalRefName(c.kind==="maf"?c.refName:c.map.refName);A.applyHighlight(Yo,ea({highlights:t.highlights,onGenome:c,querySeqName:A.querySeqName,querySeqOffset:A.querySeqOffset,sameAssembly:g=>i.get(g)===s,sameRefName:g=>s.getCanonicalRefName(g)===a,labels:ta(t)}))}}var Sg=["ncbi","panther","uniref"];function na(){return b.types.compose(Ko.BaseViewModel,rt(),b.types.model("MsaView",{connectedViewId:b.types.maybe(b.types.string),connectedFeature:b.types.frozen(),connectedTranscript:b.types.maybe(b.types.string),blastParams:b.types.frozen(),orthologParams:b.types.frozen(),querySeqName:b.types.stripDefault(b.types.string,"QUERY"),querySeqOffset:b.types.stripDefault(b.types.number,0),uniprotId:b.types.maybe(b.types.string),zoomToBaseLevel:b.types.stripDefault(b.types.boolean,!1),init:b.types.frozen(),dataStoreId:b.types.maybe(b.types.string),launchCompleted:!1,mafRegion:b.types.frozen(),embeddedMode:!0,domainsOnGenome:b.types.stripDefault(b.types.boolean,!1)})).volatile(()=>({rid:void 0,progress:"",loadingStoredData:!1,isStoringData:!1,lastStoredData:void 0,ownsDataStoreRow:!1,launchController:void 0,domainsRequested:!1})).views(A=>({get transcriptToMsaMap(){return A.connectedFeature?Qo(A.connectedFeature):void 0},get connectedView(){let{views:t}=(0,K.getSession)(A);return t.find(e=>e.id===A.connectedViewId)}})).views(A=>({get connectedHoverHighlights(){let{mouseCol:t}=A;return t===void 0?[]:Ae({model:A,coord:t})},get connectedClickHighlights(){let{mouseClickCol:t}=A;return t===void 0?[]:Ae({model:A,coord:t})},get connectedHighlights(){return[...this.connectedHoverHighlights,...this.connectedClickHighlights]},get connectedDomains(){return Ro(A)}})).views(A=>({get hostRestoresData(){let{msaIndexedLocation:t,msaName:e}=A.init??{};return A.hostCarriesData||!!(t&&e)},get unsavedDocuments(){let{data:t,init:e}=A,n=(0,b.getSnapshot)(t),r=(o,i)=>{let s=t[o];return s&&!i&&!n[o]?s:void 0};return{msa:r("msa",A.msaFilehandle??e?.msaIndexedLocation),tree:r("tree",A.treeFilehandle),treeMetadata:r("treeMetadata",A.treeMetadataFilehandle),gff:r("gff",A.gffFilehandle)}}})).actions(A=>({setZoomToBaseLevel(t){A.zoomToBaseLevel=t},setProgress(t){A.progress=t},setRid(t){A.rid=t},setBlastParams(t){A.blastParams=t},setConnectedFeature(t){A.connectedFeature=t},setOrthologParams(t){A.orthologParams=t},setInit(t){A.init=t},setQuerySeqName(t){A.querySeqName=t},setUniprotId(t){A.uniprotId=t},setDataStoreId(t){A.dataStoreId=t},setLaunchCompleted(t){A.launchCompleted=t},setLoadingStoredData(t){A.loadingStoredData=t},setIsStoringData(t){A.isStoringData=t},setLastStoredData(t){A.lastStoredData=t},setOwnsDataStoreRow(t){A.ownsDataStoreRow=t},setLaunchController(t){A.launchController=t},cancelLaunch(){A.launchController?.abort(),A.launchController=void 0,A.blastParams=void 0,A.orthologParams=void 0,A.init=void 0,A.launchCompleted=!1,A.progress="",A.rid=void 0,A.error=void 0},retryLaunch(){A.launchController?.abort(),A.launchController=void 0,A.progress="",A.rid=void 0,A.error=void 0,A.launchCompleted=!1,A.blastParams&&(A.blastParams={...A.blastParams}),A.orthologParams&&(A.orthologParams={...A.orthologParams}),A.init&&(A.init={...A.init})},setDomainsRequested(t){A.domainsRequested=t},setDomainsOnGenome(t){A.domainsOnGenome=t},showDomainsOnGenome(){let t=(0,K.getSession)(A),{connectedView:e,connectedDomains:n,connectedFeature:r}=A,o=e?.assemblyNames[0];if(!e||!o||n.features.length===0||!(0,K.isSessionWithAddSessionTrack)(t))return;let i=r,s=[i?.gene_name,i?.gene,i?.name].find(g=>typeof g=="string"&&g!==""),c=Fo({viewId:A.id,assemblyName:o,name:`${s??A.querySeqName} domains (from the alignment)`,strand:A.mafRegion?void 0:A.transcriptToMsaMap?.strand,domains:n}),a=(0,K.isSessionWithSessionTracks)(t)?t.sessionTracks.find(g=>g.trackId===c.trackId):void 0;a&&(0,K.isSessionWithDeleteTrackConf)(t)&&t.deleteTrackConf(a),t.addSessionTrackConf(c)&&e.launchTrack(c.trackId)},handleMsaClick(t){let{connectedView:e,zoomToBaseLevel:n}=A,r=xo({model:A,coord:t});!r||!e||(n?e.navTo(r):e.centerAt(r.start,r.refName))}})).actions(A=>{let t=A.setMouseClickPos.bind(A);return{setMouseClickPos(e,n){t(e,n),e!==void 0&&A.handleMsaClick(e)}}}).actions(A=>{let t=A.reset.bind(A);return{reset(){let{displayName:e,minimized:n,zoomToBaseLevel:r}=A;t(),e!==void 0&&A.setDisplayName(e),A.setMinimized(n),A.setZoomToBaseLevel(r),A.setDomainsRequested(!1),A.setLastStoredData(void 0),A.setOwnsDataStoreRow(!1)}}}).views(A=>{let t=A.menuItems.bind(A);return{menuItems(){return[...t(),{label:"Zoom to base level on click?",type:"checkbox",checked:A.zoomToBaseLevel,onClick:()=>{A.setZoomToBaseLevel(!A.zoomToBaseLevel)}},...A.connectedView&&A.connectedDomains.features.length>0?[{label:"Show domains on the genome",onClick:()=>{A.showDomainsOnGenome()}}]:[]]}}}).actions(A=>({afterCreate(){So(),(0,b.addDisposer)(A,()=>{A.launchController?.abort()}),mo(A);for(let t of[ho,_o,Do,po,No,yo,Mo])(0,b.addDisposer)(A,(0,RA.autorun)(()=>{t(A)}));(0,b.addDisposer)(A,(0,RA.autorun)(ko(A))),(0,b.addDisposer)(A,(0,RA.autorun)(bo(A))),(0,b.addDisposer)(A,(0,RA.autorun)(Po(A)))}}))}export{na as default,Sg as orthologSources};
12
+ //# sourceMappingURL=model-ZXS5732V.js.map