jbrowse-plugin-msaview 5.2.0 → 5.3.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.
Files changed (84) hide show
  1. package/dist/MsaViewPanel/model.d.ts +25 -29
  2. package/dist/chunks/AboutDialog-447TIFAW.js +2 -0
  3. package/dist/chunks/{AboutDialog-IRBPUPJK.js.map → AboutDialog-447TIFAW.js.map} +4 -4
  4. package/dist/chunks/AnnotationFileDialog-S3N5EHHE.js +2 -0
  5. package/dist/chunks/AnnotationFileDialog-S3N5EHHE.js.map +7 -0
  6. package/dist/chunks/ExportSVGDialog-7ZHKKQ7W.js +2 -0
  7. package/dist/chunks/ExportSVGDialog-7ZHKKQ7W.js.map +7 -0
  8. package/dist/chunks/{FeatureDialog-ZBX3XQZ5.js → FeatureDialog-EEOGSLOG.js} +1 -1
  9. package/dist/chunks/{FeatureDialog-ZBX3XQZ5.js.map → FeatureDialog-EEOGSLOG.js.map} +1 -1
  10. package/dist/chunks/HelpDialog-TCWNBZOV.js +2 -0
  11. package/dist/chunks/HelpDialog-TCWNBZOV.js.map +7 -0
  12. package/dist/chunks/{LaunchMsaViewDialog-GJAUPGFC.js → LaunchMsaViewDialog-R6CNRASN.js} +2 -2
  13. package/dist/chunks/{LaunchMsaViewDialog-GJAUPGFC.js.map → LaunchMsaViewDialog-R6CNRASN.js.map} +1 -1
  14. package/dist/chunks/MetadataDialog-MNSI6NEW.js +2 -0
  15. package/dist/chunks/{MetadataDialog-KZWQFRF7.js.map → MetadataDialog-MNSI6NEW.js.map} +2 -2
  16. package/dist/chunks/MsaViewPanel-R2WAER5O.js +2 -0
  17. package/dist/chunks/{MsaViewPanel-RUZAKFCB.js.map → MsaViewPanel-R2WAER5O.js.map} +1 -1
  18. package/dist/chunks/{TrackInfoDialog-IFIG77WO.js → TrackInfoDialog-W2F77IPG.js} +2 -2
  19. package/dist/chunks/{TrackInfoDialog-IFIG77WO.js.map → TrackInfoDialog-W2F77IPG.js.map} +1 -1
  20. package/dist/chunks/TreeNodeInfoDialog-T5XMPG3R.js +2 -0
  21. package/dist/chunks/{TreeNodeInfoDialog-VRCVIF26.js.map → TreeNodeInfoDialog-T5XMPG3R.js.map} +2 -2
  22. package/dist/chunks/chunk-6EOYBBT4.js +2 -0
  23. package/dist/chunks/chunk-6EOYBBT4.js.map +7 -0
  24. package/dist/chunks/chunk-A63PUWQZ.js +6 -0
  25. package/dist/chunks/chunk-A63PUWQZ.js.map +7 -0
  26. package/dist/chunks/{chunk-NI3VGKQP.js → chunk-BAM67QHH.js} +2 -2
  27. package/dist/chunks/chunk-CSCUNTGJ.js +18 -0
  28. package/dist/chunks/chunk-CSCUNTGJ.js.map +7 -0
  29. package/dist/chunks/chunk-DEFUNIWW.js +8 -0
  30. package/dist/chunks/chunk-DEFUNIWW.js.map +7 -0
  31. package/dist/chunks/{chunk-YOTSFJMU.js → chunk-ERCMNTEQ.js} +1 -1
  32. package/dist/chunks/{chunk-YOTSFJMU.js.map → chunk-ERCMNTEQ.js.map} +1 -1
  33. package/dist/chunks/{chunk-GDFVLZYX.js → chunk-FEUZKN5V.js} +2 -2
  34. package/dist/chunks/{chunk-GDFVLZYX.js.map → chunk-FEUZKN5V.js.map} +1 -1
  35. package/dist/chunks/{chunk-GIHMPOCO.js → chunk-JF6CW6MO.js} +1 -1
  36. package/dist/chunks/{chunk-GIHMPOCO.js.map → chunk-JF6CW6MO.js.map} +1 -1
  37. package/dist/chunks/chunk-K55ZVN73.js +5 -0
  38. package/dist/chunks/chunk-K55ZVN73.js.map +7 -0
  39. package/dist/chunks/chunk-L6CBIH6H.js +2 -0
  40. package/dist/chunks/chunk-L6CBIH6H.js.map +7 -0
  41. package/dist/chunks/{chunk-F3EC6OCO.js → chunk-NWHZOZMG.js} +1 -1
  42. package/dist/chunks/{chunk-F3EC6OCO.js.map → chunk-NWHZOZMG.js.map} +1 -1
  43. package/dist/chunks/chunk-OVAXNTPN.js +2 -0
  44. package/dist/chunks/chunk-OVAXNTPN.js.map +7 -0
  45. package/dist/chunks/chunk-TSHN6J7U.js +2 -0
  46. package/dist/chunks/chunk-TSHN6J7U.js.map +7 -0
  47. package/dist/chunks/{chunk-H6IQBAW7.js → chunk-WAPIOD25.js} +5 -5
  48. package/dist/chunks/{chunk-H6IQBAW7.js.map → chunk-WAPIOD25.js.map} +1 -1
  49. package/dist/chunks/chunk-XVNCZQMR.js +2 -0
  50. package/dist/chunks/{chunk-ZCT7RD24.js.map → chunk-XVNCZQMR.js.map} +1 -1
  51. package/dist/chunks/{dist-CMWKVHC7.js → dist-GXYZN4ZR.js} +2 -2
  52. package/dist/chunks/{dist-CMWKVHC7.js.map → dist-GXYZN4ZR.js.map} +3 -3
  53. package/dist/chunks/dist-N4ZJK63Q.js +2 -0
  54. package/dist/chunks/{model-VE7IYWNU.js → model-TCPB6WNJ.js} +2 -2
  55. package/dist/chunks/{model-VE7IYWNU.js.map → model-TCPB6WNJ.js.map} +1 -1
  56. package/dist/chunks/renderToSvg-53FEV6IJ.js +2 -0
  57. package/dist/jbrowse-plugin-msaview.esm.js +2 -2
  58. package/dist/jbrowse-plugin-msaview.esm.js.map +1 -1
  59. package/dist/version.d.ts +1 -1
  60. package/dist/version.js +1 -1
  61. package/package.json +2 -2
  62. package/src/version.ts +1 -1
  63. package/dist/chunks/AboutDialog-IRBPUPJK.js +0 -2
  64. package/dist/chunks/AnnotationFileDialog-FCYYZ4JN.js +0 -2
  65. package/dist/chunks/AnnotationFileDialog-FCYYZ4JN.js.map +0 -7
  66. package/dist/chunks/ExportSVGDialog-TYYPI6VB.js +0 -2
  67. package/dist/chunks/ExportSVGDialog-TYYPI6VB.js.map +0 -7
  68. package/dist/chunks/MetadataDialog-KZWQFRF7.js +0 -2
  69. package/dist/chunks/MsaViewPanel-RUZAKFCB.js +0 -2
  70. package/dist/chunks/TreeNodeInfoDialog-VRCVIF26.js +0 -2
  71. package/dist/chunks/chunk-F726IWCW.js +0 -2
  72. package/dist/chunks/chunk-F726IWCW.js.map +0 -7
  73. package/dist/chunks/chunk-NMYD2GWF.js +0 -18
  74. package/dist/chunks/chunk-NMYD2GWF.js.map +0 -7
  75. package/dist/chunks/chunk-QQ5LZUIO.js +0 -11
  76. package/dist/chunks/chunk-QQ5LZUIO.js.map +0 -7
  77. package/dist/chunks/chunk-QUWPHTZQ.js +0 -2
  78. package/dist/chunks/chunk-QUWPHTZQ.js.map +0 -7
  79. package/dist/chunks/chunk-ZCT7RD24.js +0 -2
  80. package/dist/chunks/dist-R73J3CC3.js +0 -2
  81. package/dist/chunks/renderToSvg-VDXAB7TT.js +0 -2
  82. /package/dist/chunks/{chunk-NI3VGKQP.js.map → chunk-BAM67QHH.js.map} +0 -0
  83. /package/dist/chunks/{dist-R73J3CC3.js.map → dist-N4ZJK63Q.js.map} +0 -0
  84. /package/dist/chunks/{renderToSvg-VDXAB7TT.js.map → renderToSvg-53FEV6IJ.js.map} +0 -0
@@ -0,0 +1,8 @@
1
+ import{a as E,b as O}from"./chunk-K55ZVN73.js";import{a as q}from"./chunk-73KAPCJ2.js";function C(r){return Object.fromEntries(r.map(e=>[e.xref[0]?.id,e]).filter(e=>e[0]!==void 0))}function F(r){return Object.entries(r).flatMap(([e,{matches:n}])=>n.flatMap(({signature:t,locations:s})=>{let{entry:o}=t,c=o?.accession??t.accession;if(!c)return[];let i=o?.name??t.name??c;return s.map(({start:a,end:f,strand:u})=>({id:e,accession:c,name:i,description:o?.description??t.description??i,start:a,end:f,strand:u}))}))}function N(r){return F(C(r.results))}function S(r,e=[]){return["##gff-version 3",...e.map(n=>`# ${n}`),...r.map(n=>{let{accession:t,name:s,description:o,featureType:c}=n,{id:i,start:a,end:f,strand:u}=n;return[i.replaceAll(/[%\t\n\r]/g,encodeURIComponent),"InterProScan",c??"protein_match",a,f,".",u===void 0?".":u>0?"+":"-",".",[`Name=${encodeURIComponent(t)}`,`signature_desc=${encodeURIComponent(s)}`,`description=${encodeURIComponent(o)}`].join(";")].join(" ")})].join(`
2
+ `)}function B(r){let e=r.trimStart();if(!e.startsWith("{"))return r;let n=JSON.parse(e);return S(N(n))}function T(r,e="node",n=0){let t=(c,i)=>({...c,id:i,name:c.name||i,children:[]}),s=t(r,`${e}-${n}`),o=[{src:r,out:s,depth:n}];for(;o.length>0;){let{src:c,out:i,depth:a}=o.pop();if(c.children){i.children=c.children.map((f,u)=>t(f,`${i.id}-${u}-${a+1}`));for(let[f,u]of c.children.entries())o.push({src:u,out:i.children[f],depth:a+1})}}return s}var l=class{rows=new Map;names;width;constructor(e){for(let[n,t]of e)this.rows.has(n)||this.rows.set(n,t);this.names=[...this.rows.keys()]}getRow(e){return this.rows.get(e)??""}getNames(){return this.names}getWidth(){return this.width??=this.getNames().reduce((e,n)=>Math.max(e,this.getRow(n).length),0),this.width}getTree(){return{id:"root",name:"root",noTree:!0,children:this.getNames().map(e=>({id:e,children:[],name:e}))}}getRowData(e){}getStructures(){return{}}getHeader(){return{}}get alignmentNames(){return[]}get seqConsensus(){}get secondaryStructureConsensus(){}get tracks(){return[]}};function R(r){return/^(#.*\n)*>/.test(r)}function b(r){let e=[],n=new Set,t,s=()=>{t&&!n.has(t.id)&&(n.add(t.id),e.push({id:t.id,seq:t.lines.join("").replaceAll(/\s/g,"")}))},o=0;for(let c of r.split(`
3
+ `))c.startsWith(">")?(s(),o++,t={id:/^>\s*(\S*)/.exec(c)[1]||`unnamed_${o}`,lines:[]}):t?.lines.push(c);return s(),e}function x(r){return typeof r=="string"?b(r):r}var W=65,z=90,v=97,K=122,X=45;function _(r){return r>=v&&r<=K}function $(r){return r>=W&&r<=z||r===X}function Q(r){let e=[],n=[""];for(let t of r){let s=t.charCodeAt(0);$(s)?(e.push(t),n.push("")):_(s)&&(n[n.length-1]+=t.toUpperCase())}return{matches:e,inserts:n}}var p=class extends l{constructor(e){let n=x(e),t=Y(n.map(s=>s.seq));super(n.map((s,o)=>[s.id,t[o]]))}static sniff(e){if(typeof e=="string"&&!R(e))return!1;let n=x(e).map(o=>o.seq).filter(o=>!!o);if(n.length<2||new Set(n.map(o=>o.length)).size===1)return!1;let t=!1,s;for(let o of n){let c=0;for(let i=0;i<o.length;i++){let a=o.charCodeAt(i);$(a)?c++:_(a)&&(t=!0)}if(s!==void 0&&c!==s)return!1;s=c}return t}};function Y(r){let e=r.map(Q),n=0;for(let{matches:s}of e)n=Math.max(n,s.length);let t=new Array(n+1).fill(0);for(let{inserts:s}of e)for(let[o,c]of s.entries())t[o]=Math.max(t[o],c.length);return e.map(({matches:s,inserts:o})=>{let c=[];for(let i=0;i<=n;i++){let a=o[i]??"";c.push(a,".".repeat(t[i]-a.length)),i<n&&c.push(s[i]??"-")}return c.join("")})}var m=class extends l{MSA;constructor(e){let n=E(e);super(n.alns.map(t=>[t.id,t.seq])),this.MSA=n}getHeader(){return this.MSA.header}get seqConsensus(){return this.MSA.consensus}};var d=class extends l{constructor(e){super(O(e).map(n=>[n.protein,n.seq]))}};var h=class extends l{colonNormalized=new Map;constructor(e){let n=x(e);super(n.map(t=>[t.id,t.seq]));for(let{id:t}of n)t.includes(":")&&this.colonNormalized.set(t.replaceAll(":","_"),t)}getRow(e){return this.rows.get(e)??this.rows.get(this.colonNormalized.get(e)??"")??""}};function A(r){return q(r,{postParenNumeric:"name"})}function y(){return{gf:Object.create(null),gc:Object.create(null),gs:Object.create(null),gr:Object.create(null),seqname:[],seqdata:Object.create(null)}}function w(r,e){if(r)return r;if(e)throw new Error("No format header: # STOCKHOLM 1.0");return y()}var j=/^# STOCKHOLM 1.0/,J=/^\/\/\s*$/,V=/^#=GF\s+(\S+)\s+(.*?)\s*$/,Z=/^#=GC\s+(\S+)\s+(.*?)\s*$/,ee=/^#=GS\s+(\S+)\s+(\S+)\s+(.*?)\s*$/,te=/^#=GR\s+(\S+)\s+(\S+)\s+(.*?)\s*$/,ne=/^\s*([^#\s]\S*)\s+(\S+)\s*$/,se=/\S/;function M(r){return j.test(r)}function k(r,e){let n=e??{},t=[],s=null,o=!1,c=r.split(`
4
+ `);for(let i of c){let a;if(j.test(i))s&&t.push(s),s=y(),o=!1;else if(J.test(i))s&&t.push(s),s=null;else if(a=V.exec(i)){s=w(s,!!n.strict);let f=a[1],u=s.gf[f]??=[];f==="NH"&&o&&u.length>0?u[u.length-1]+=a[2]:u.push(a[2]),o=f==="NH"}else if(a=Z.exec(i))s=w(s,!!n.strict),s.gc[a[1]]=(s.gc[a[1]]??"")+a[2];else if(a=ee.exec(i)){s=w(s,!!n.strict);let f=s.gs[a[2]]??=Object.create(null);(f[a[1]]??=[]).push(a[3])}else if(a=te.exec(i)){s=w(s,!!n.strict);let f=s.gr[a[2]]??=Object.create(null);f[a[1]]=(f[a[1]]??"")+a[3]}else if(a=ne.exec(i)){s=w(s,!!n.strict);let f=a[1],u=a[2];s.seqdata[f]===void 0&&(s.seqdata[f]="",s.seqname.push(f)),s.seqdata[f]+=u}else if(se.test(i)&&n.strict)throw new Error("Malformed line")}return s&&t.push(s),t}var g=class extends l{data;MSA;constructor(e,n){let t=k(e),s=t[n]??t[0];if(!s)throw new Error("No alignments found in Stockholm file");super(s.seqname.map(o=>[o,s.seqdata[o]??""])),this.data=t,this.MSA=s}getMSA(){return this.MSA}get alignmentNames(){return this.data.map((e,n)=>e.gf.DE?.[0]??`Alignment ${n+1}`)}getHeader(){let e=this.MSA.gs.AC??{},n=this.MSA.gs.DR??{};return{General:this.MSA.gf,Accessions:Object.fromEntries(Object.entries(e).map(([t,s])=>[t,s[0]])),Dbxref:Object.fromEntries(Object.entries(n).map(([t,s])=>[t,s.join("; ")]))}}getRowData(e){return{name:e,accession:this.MSA.gs.AC?.[e]?.[0],dbxref:this.MSA.gs.DR?.[e]?.join("; ")}}getStructures(){let e=/PDB; +(\S+) +([^;\s]+); *(-?[0-9]+)-(-?[0-9]+)/,n=this.MSA.gs.DR??{},t={};for(let[s,o]of Object.entries(n))for(let c of o){let i=e.exec(c);i&&(t[s]??=[]).push({pdb:i[1].toLowerCase(),chain:i[2],startPos:+i[3],endPos:+i[4]})}return t}getTree(){let e=this.MSA.gf.NH?.[0];return e?T(A(e)):super.getTree()}get seqConsensus(){return this.MSA.gc.seq_cons}get secondaryStructureConsensus(){return this.MSA.gc.SS_cons}get tracks(){let{seq_cons:e,SS_cons:n,...t}=this.MSA.gc;return[{id:"seqConsensus",name:"Sequence consensus",data:e,customColorScheme:{}},{id:"secondaryStruct",name:"Secondary-structure",data:n,customColorScheme:P},...Object.entries(t).map(([s,o])=>({id:`gc-${s}`,name:s,data:o,customColorScheme:G(s)})),...Object.entries(this.MSA.gr).flatMap(([s,o])=>Object.entries(o).map(([c,i])=>({id:`gr-${c}-${s}`,name:`${c} ${s}`,data:i,customColorScheme:G(s),defaultOff:!0})))]}},P={"<":"lightblue","(":"lightblue","[":"lightblue","{":"lightblue",">":"pink",")":"pink","]":"pink","}":"pink"};function G(r){return r==="SS"||r.endsWith("_SS")?P:{}}var oe=/^<(!doctype\s+html|html[\s>])/i,ie=/^(CLUSTAL|MUSCLE|PROBCONS|MSAPROBS|Kalign)/i;function ce(r,e=0,n){let t=r.replace(/^\uFEFF/,"").replaceAll(/\r\n?/g,`
5
+ `).trimStart();if(oe.test(t))throw new Error("Received an HTML page, not an alignment. Check that the URL points at the file itself");if(n==="stockholm")return new g(t,e);if(n==="a3m")return new p(t);if(n==="fasta")return new h(t);if(n==="emf")return new d(t);if(n==="clustal")return new m(t);if(M(t))return new g(t,e);if(R(t)){let o=b(t);return p.sniff(o)?new p(o):new h(o)}if(t.startsWith("SEQ"))return new d(t);if(ie.test(t))return new m(t);let s=t.split(`
6
+ `,1)[0].slice(0,80);throw new Error(s?`Unrecognized alignment format: expected FASTA, A3M, Stockholm, Clustal or EMF, but the first line reads "${s}"`:"The alignment file is empty")}function ae(r){return r.replaceAll(/[.-]/g,"")}function D(r){try{return decodeURIComponent(r)}catch{return r}}function fe(r){return r.replace(/^"(.*)"$/,"$1")}function ue(r){if(!r)return{};let e={};for(let n of r.split(";")){let t=n.indexOf("="),s=n.slice(0,t).trim(),o=n.slice(t+1);t!==-1&&s&&o&&(e[s]=o.split(",").map(c=>fe(D(c).trim())).join(" "))}return e}function L(r){if(!r)return[];let e=[];for(let n of r.split(`
7
+ `)){let t=n.trim();if(t.startsWith("##FASTA"))break;t&&!t.startsWith("#")&&t.split(" ").length>=8&&e.push(t)}return e.map(n=>{let t=n.split(" "),[s,o,c,i,a,f,u,I]=t,H=t[8];return{...ue(H),seq_id:D(s??""),source:o??"",type:c??"",start:Number(i)||0,end:Number(a)||0,score:Number(f)||0,strand:u??".",phase:I??"."}})}var le=new Set(["gene","CDS","pseudogene","mRNA","transcript","primary_transcript","ncRNA","tRNA","rRNA","snRNA","snoRNA","miRNA","lnc_RNA"]);function pe({type:r,strand:e}){let n=e==="+"?1:e==="-"?-1:void 0;return le.has(r)?n:void 0}var me=new Set(["seq_id","source","type","start","end","score","strand","phase"]);function de(r){let e=Object.entries(r).filter(([n,t])=>!me.has(n)&&typeof t=="string");return e.length>0?Object.fromEntries(e):void 0}var he=/^(\d{1,3})[\s,]+(\d{1,3})[\s,]+(\d{1,3})$/;function ge(r){let e=r.color??r.colour??r.Color??r.Colour;if(!e)return;let n=he.exec(e.trim());return n?`rgb(${n[1]},${n[2]},${n[3]})`:e.trim()}var Se=new Set(["polypeptide","nucleic_acid"]);function U(r){return r.filter(e=>!Se.has(e.type)).map(e=>{let n=e.Name||e.ID||`${e.source}_${e.start}_${e.end}`,t=e.signature_desc||e.Name||n;return{id:e.seq_id,accession:n,name:t,description:e.description||e.Note||e.signature_desc||t,featureType:e.type,start:e.start,end:e.end,strand:pe(e),color:ge(e),attributes:de(e)}})}export{T as a,A as b,ce as c,ae as d,L as e,U as f,B as g};
8
+ //# sourceMappingURL=chunk-DEFUNIWW.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../node_modules/.pnpm/msa-parsers@9.1.0/node_modules/msa-parsers/src/interProScanToAnnotations.ts", "../../node_modules/.pnpm/msa-parsers@9.1.0/node_modules/msa-parsers/src/gff/annotationsToGFF.ts", "../../node_modules/.pnpm/msa-parsers@9.1.0/node_modules/msa-parsers/src/gff/annotationTextToGFF.ts", "../../node_modules/.pnpm/msa-parsers@9.1.0/node_modules/msa-parsers/src/util.ts", "../../node_modules/.pnpm/msa-parsers@9.1.0/node_modules/msa-parsers/src/msa/BaseMSA.ts", "../../node_modules/.pnpm/msa-parsers@9.1.0/node_modules/msa-parsers/src/msa/fastaRecords.ts", "../../node_modules/.pnpm/msa-parsers@9.1.0/node_modules/msa-parsers/src/msa/A3mMSA.ts", "../../node_modules/.pnpm/msa-parsers@9.1.0/node_modules/msa-parsers/src/msa/ClustalMSA.ts", "../../node_modules/.pnpm/msa-parsers@9.1.0/node_modules/msa-parsers/src/msa/EmfMSA.ts", "../../node_modules/.pnpm/msa-parsers@9.1.0/node_modules/msa-parsers/src/msa/FastaMSA.ts", "../../node_modules/.pnpm/msa-parsers@9.1.0/node_modules/msa-parsers/src/msa/parseNewick.ts", "../../node_modules/.pnpm/msa-parsers@9.1.0/node_modules/msa-parsers/src/msa/stockholmParser.ts", "../../node_modules/.pnpm/msa-parsers@9.1.0/node_modules/msa-parsers/src/msa/StockholmMSA.ts", "../../node_modules/.pnpm/msa-parsers@9.1.0/node_modules/msa-parsers/src/msa/index.ts", "../../node_modules/.pnpm/msa-parsers@9.1.0/node_modules/msa-parsers/src/gff/parseGFF.ts", "../../node_modules/.pnpm/msa-parsers@9.1.0/node_modules/msa-parsers/src/gff/gffToAnnotations.ts"],
4
+ "sourcesContent": ["import type {\n Annotation,\n InterProScanResponse,\n InterProScanResults,\n} from './types.ts'\n\n/**\n * Key each result by its xref id, which is the row name its annotations attach\n * to. A result without one is dropped rather than keyed `undefined`, which\n * would draw a phantom row's worth of annotations (and rather than throwing,\n * which would lose every other result over one malformed one).\n */\nexport function indexResultsByXref(results: InterProScanResults[]) {\n return Object.fromEntries(\n results\n .map(r => [r.xref[0]?.id, r] as const)\n .filter((e): e is [string, InterProScanResults] => e[0] !== undefined),\n )\n}\n\n/**\n * Flatten InterProScan results, keyed by the row name they attach to, into one\n * annotation per signature location.\n *\n * An unintegrated signature has no InterPro `entry` -- MobiDBLite's disorder\n * calls, and many CDD, Pfam and PANTHER hits -- and falling back to the\n * signature's own accession and name is the difference between drawing those\n * and dropping them. Only a signature with no accession at all has nothing to\n * color, filter or label by, and is dropped.\n */\nexport function interProScanToAnnotations(\n results: Record<string, InterProScanResults>,\n): Annotation[] {\n return Object.entries(results).flatMap(([id, { matches }]) =>\n matches.flatMap(({ signature, locations }) => {\n const { entry } = signature\n const accession = entry?.accession ?? signature.accession\n if (!accession) {\n return []\n }\n const name = entry?.name ?? signature.name ?? accession\n return locations.map(({ start, end, strand }) => ({\n id,\n accession,\n name,\n description: entry?.description ?? signature.description ?? name,\n start,\n end,\n strand,\n }))\n }),\n )\n}\n\n/**\n * Flatten a whole InterProScan JSON response, resolving each result's row name\n * from its xref.\n */\nexport function interProScanResponseToAnnotations(\n response: InterProScanResponse,\n): Annotation[] {\n return interProScanToAnnotations(indexResultsByXref(response.results))\n}\n", "import type { Annotation } from '../types.ts'\n\n/**\n * Write annotations as GFF3, one line per annotation, in list order, with\n * optional `#` comment lines after the version directive saying where they came\n * from.\n *\n * The source column is always `InterProScan`: an Annotation records no source\n * of its own, and the viewer reads a precomputed-lookup GFF by the same rules\n * it reads a real InterProScan run's.\n */\nexport function annotationsToGFF(\n annotations: Annotation[],\n header: string[] = [],\n): string {\n return [\n '##gff-version 3',\n ...header.map(line => `# ${line}`),\n ...annotations.map(annotation => {\n const { accession, name, description, featureType } = annotation\n const { id, start, end, strand } = annotation\n return [\n id.replaceAll(/[%\\t\\n\\r]/g, encodeURIComponent),\n 'InterProScan',\n // GFF-sourced annotations carry their original type; writing every\n // feature back out as protein_match would turn an exon overlay into\n // generic domains on the next read, losing the numbered-segment\n // rendering and the gene arrowheads\n featureType ?? 'protein_match',\n start,\n end,\n '.',\n strand === undefined ? '.' : strand > 0 ? '+' : '-',\n '.',\n [\n `Name=${encodeURIComponent(accession)}`,\n `signature_desc=${encodeURIComponent(name)}`,\n `description=${encodeURIComponent(description)}`,\n ].join(';'),\n ].join('\\t')\n }),\n ].join('\\n')\n}\n", "import { interProScanResponseToAnnotations } from '../interProScanToAnnotations.ts'\nimport { annotationsToGFF } from './annotationsToGFF.ts'\n\nimport type { InterProScanResponse } from '../types.ts'\n\n/**\n * An annotation file's text as GFF3: GFF passes through, and the JSON an\n * InterProScan run returns converts, taking each result's row from its xref.\n */\nexport function annotationTextToGFF(text: string): string {\n const trimmed = text.trimStart()\n if (!trimmed.startsWith('{')) {\n return text\n }\n const response: InterProScanResponse = JSON.parse(trimmed)\n return annotationsToGFF(interProScanResponseToAnnotations(response))\n}\n", "import type { Node, NodeWithIds } from './types.ts'\n\n/**\n * Copy a parsed tree, giving every node a stable id derived from its path, and\n * falling back to that id for an unnamed node.\n *\n * Iterative, like the traversals in @gmod/newick and the Newick emitter in the\n * viewer's neighbor joining: a phylogeny can be a caterpillar whose depth equals\n * its leaf count, and the recursive form of this overflowed the stack somewhere\n * past 5000 deep -- which every tree reaches, since this is the last step of\n * parsing one.\n */\nexport function generateNodeIds(\n tree: Node,\n parent = 'node',\n depth = 0,\n): NodeWithIds {\n const withId = (node: Node, id: string): NodeWithIds => ({\n ...node,\n id,\n name: node.name || id,\n children: [],\n })\n\n const root = withId(tree, `${parent}-${depth}`)\n const stack = [{ src: tree, out: root, depth }]\n while (stack.length > 0) {\n const { src, out, depth: d } = stack.pop()!\n if (src.children) {\n out.children = src.children.map((child, i) =>\n withId(child, `${out.id}-${i}-${d + 1}`),\n )\n for (const [i, child] of src.children.entries()) {\n stack.push({ src: child, out: out.children[i]!, depth: d + 1 })\n }\n }\n }\n return root\n}\n", "import type { MSATrack, NodeWithIds } from '../types.ts'\n\nexport default abstract class BaseMSA {\n protected rows = new Map<string, string>()\n private names: string[]\n private width?: number\n\n /**\n * A repeated name keeps its first row: names index the rows, so listing the\n * name twice would render a phantom duplicate row.\n */\n constructor(rows: Iterable<readonly [string, string]>) {\n for (const [name, seq] of rows) {\n if (!this.rows.has(name)) {\n this.rows.set(name, seq)\n }\n }\n this.names = [...this.rows.keys()]\n }\n\n getRow(name: string): string {\n return this.rows.get(name) ?? ''\n }\n\n getNames(): string[] {\n return this.names\n }\n\n /**\n * Column count of the alignment: the length of its widest row, since a\n * hand-edited fasta or some aligners leave rows short. The viewer's gap\n * analysis counts columns the same way.\n */\n getWidth(): number {\n this.width ??= this.getNames().reduce(\n (max, name) => Math.max(max, this.getRow(name).length),\n 0,\n )\n return this.width\n }\n\n getTree(): NodeWithIds {\n return {\n id: 'root',\n name: 'root',\n noTree: true,\n children: this.getNames().map(name => ({\n id: name,\n children: [],\n name,\n })),\n }\n }\n\n getRowData(\n _name: string,\n ): { name?: string; accession?: string; dbxref?: string } | undefined {\n return undefined\n }\n\n getStructures(): Record<string, unknown> {\n return {}\n }\n\n getHeader(): Record<string, unknown> {\n return {}\n }\n\n get alignmentNames(): string[] {\n return []\n }\n\n get seqConsensus(): string | undefined {\n return undefined\n }\n\n get secondaryStructureConsensus(): string | undefined {\n return undefined\n }\n\n get tracks(): MSATrack[] {\n return []\n }\n}\n", "export interface FastaRecord {\n id: string\n seq: string\n}\n\n// a `>` record, optionally after `#` header lines such as ColabFold's `#8\\t1`\nexport function fastaSniff(text: string) {\n return /^(#.*\\n)*>/.test(text)\n}\n\n/**\n * Split FASTA-style text (shared by the FASTA and A3M parsers) into records.\n *\n * A record starts at a `>` that begins a line, so a `>` inside a defline\n * (`x->y`, HGVS `c.1799T>A`) stays part of it, and anything before the first\n * record (ColabFold's `#8\\t1` header) is skipped. The id is the first word of\n * the defline, so `> name` reads as `name`, and a defline with no word names\n * its record `unnamed_N` after its position in the file. A repeated id keeps\n * the first record: ids index the row data, so emitting the id twice would\n * render a phantom duplicate row showing the last record's residues.\n */\nexport function splitFastaRecords(text: string): FastaRecord[] {\n const records: FastaRecord[] = []\n const seen = new Set<string>()\n let current: { id: string; lines: string[] } | undefined\n\n const flush = () => {\n if (current && !seen.has(current.id)) {\n seen.add(current.id)\n records.push({\n id: current.id,\n seq: current.lines.join('').replaceAll(/\\s/g, ''),\n })\n }\n }\n\n let count = 0\n for (const line of text.split('\\n')) {\n if (line.startsWith('>')) {\n flush()\n count++\n const id = /^>\\s*(\\S*)/.exec(line)![1] || `unnamed_${count}`\n current = { id, lines: [] }\n } else {\n current?.lines.push(line)\n }\n }\n flush()\n\n return records\n}\n\nexport function toRecords(input: string | FastaRecord[]) {\n return typeof input === 'string' ? splitFastaRecords(input) : input\n}\n", "import BaseMSA from './BaseMSA.ts'\nimport { fastaSniff, toRecords } from './fastaRecords.ts'\n\nimport type { FastaRecord } from './fastaRecords.ts'\n\n/**\n * A3M Format Parser\n *\n * The A3M format consists of aligned FASTA, in which alignments are shown with:\n * - Inserts as lowercase characters\n * - Matches as uppercase characters\n * - Deletions as '-'\n * - Gaps aligned to inserts as '.'\n *\n * Note that gaps aligned to inserts can be omitted in the A3M format.\n *\n * Example:\n * >query\n * ETESMKTVRIREKIKKFLGDRPRNTAEILEHINSTMRHGTTSQQLGNVLSKDKDIVKVGYIKRSGILSGGYDICEWATRNWVAEHCPEWTE\n * >seq1\n * ----MRTTRLRQKIKKFLNERGeANTTEILEHVNSTMRHGTTPQQLGNVLSKDKDILKVATTKRGGALSGRYEICVWTLRP-----------\n *\n * In the above, 'e' after 'G' in seq1 is a lowercase insert.\n *\n * @see https://yanglab.qd.sdu.edu.cn/trRosetta/msa_format.html\n */\n\nconst CODE_A = 65 // 'A'\nconst CODE_Z = 90 // 'Z'\nconst CODE_a = 97 // 'a'\nconst CODE_z = 122 // 'z'\nconst CODE_DASH = 45 // '-'\n\nfunction isLower(code: number): boolean {\n return code >= CODE_a && code <= CODE_z\n}\n\nfunction isMatch(code: number): boolean {\n return (code >= CODE_A && code <= CODE_Z) || code === CODE_DASH\n}\n\ninterface ParsedRow {\n // one entry per match column, in order\n matches: string[]\n // inserts[k] is the run of insert residues sitting immediately BEFORE match\n // column k, already uppercased; inserts[matches.length] holds the trailing\n // run. An insert must never consume a match column, or a row that opens with\n // an insert falls a column out of register with every other row.\n inserts: string[]\n}\n\nfunction parseRow(seq: string): ParsedRow {\n const matches: string[] = []\n const inserts = ['']\n\n for (const ch of seq) {\n const code = ch.charCodeAt(0)\n if (isMatch(code)) {\n matches.push(ch)\n inserts.push('')\n } else if (isLower(code)) {\n inserts[inserts.length - 1] += ch.toUpperCase()\n }\n // '.' is padding aligned to some other row's insert, and anything else is\n // unrecognized -- neither carries alignment information\n }\n\n return { matches, inserts }\n}\n\nexport default class A3mMSA extends BaseMSA {\n constructor(input: string | FastaRecord[]) {\n const records = toRecords(input)\n const expanded = expandA3M(records.map(r => r.seq))\n super(records.map((r, i) => [r.id, expanded[i]!]))\n }\n\n static sniff(input: string | FastaRecord[]): boolean {\n if (typeof input === 'string' && !fastaSniff(input)) {\n return false\n }\n\n const seqs = toRecords(input)\n .map(r => r.seq)\n .filter(s => !!s)\n\n if (seqs.length < 2) {\n return false\n }\n\n // A true aligned FASTA (e.g. impg's fasta-aln output from soft-masked\n // references) has all rows the same total length. A3M's defining feature is\n // variable-length rows, since lowercase inserts live outside the fixed match\n // grid. So equal-length rows are an alignment, not A3M, even when lowercase\n // soft-masking is present.\n if (new Set(seqs.map(s => s.length)).size === 1) {\n return false\n }\n\n let hasLowercase = false\n let matchCount: number | undefined\n for (const seq of seqs) {\n let matches = 0\n for (let i = 0; i < seq.length; i++) {\n const code = seq.charCodeAt(i)\n if (isMatch(code)) {\n matches++\n } else if (isLower(code)) {\n hasLowercase = true\n }\n }\n if (matchCount !== undefined && matches !== matchCount) {\n return false\n }\n matchCount = matches\n }\n return hasLowercase\n }\n}\n\n/**\n * Expand A3M rows into a rectangular alignment: every insert slot is widened to\n * the longest insert any row places there, and rows without one are padded with\n * '.' so all rows stay in register.\n */\nfunction expandA3M(rawSeqs: string[]): string[] {\n const rows = rawSeqs.map(parseRow)\n // a loop, not Math.max(...): an a3m from an hhblits search routinely carries\n // six figures of hits, and spreading one argument per row throws\n // \"Maximum call stack size exceeded\" somewhere past ~125k of them\n let numPositions = 0\n for (const { matches } of rows) {\n numPositions = Math.max(numPositions, matches.length)\n }\n\n // one insert slot before each match column, plus one trailing slot\n const maxInserts = new Array<number>(numPositions + 1).fill(0)\n for (const { inserts } of rows) {\n for (const [pos, ins] of inserts.entries()) {\n maxInserts[pos] = Math.max(maxInserts[pos]!, ins.length)\n }\n }\n\n return rows.map(({ matches, inserts }) => {\n const result: string[] = []\n for (let pos = 0; pos <= numPositions; pos++) {\n const ins = inserts[pos] ?? ''\n result.push(ins, '.'.repeat(maxInserts[pos]! - ins.length))\n if (pos < numPositions) {\n // a row with fewer match columns than the widest is padded out\n result.push(matches[pos] ?? '-')\n }\n }\n return result.join('')\n })\n}\n", "import { parse } from 'clustal-js'\n\nimport BaseMSA from './BaseMSA.ts'\n\nexport default class ClustalMSA extends BaseMSA {\n private MSA: ReturnType<typeof parse>\n\n constructor(text: string) {\n const msa = parse(text)\n super(msa.alns.map(aln => [aln.id, aln.seq]))\n this.MSA = msa\n }\n\n getHeader() {\n return this.MSA.header\n }\n\n get seqConsensus() {\n return this.MSA.consensus\n }\n}\n", "import { parseEmfAln } from 'emf-js'\n\nimport BaseMSA from './BaseMSA.ts'\n\nexport default class EmfMSA extends BaseMSA {\n constructor(text: string) {\n super(parseEmfAln(text).map(aln => [aln.protein, aln.seq]))\n }\n}\n", "import BaseMSA from './BaseMSA.ts'\nimport { toRecords } from './fastaRecords.ts'\n\nimport type { FastaRecord } from './fastaRecords.ts'\n\nexport default class FastaMSA extends BaseMSA {\n // Newick tools write a colon in a name as an underscore\n private colonNormalized = new Map<string, string>()\n\n constructor(input: string | FastaRecord[]) {\n const records = toRecords(input)\n super(records.map(r => [r.id, r.seq]))\n for (const { id } of records) {\n if (id.includes(':')) {\n this.colonNormalized.set(id.replaceAll(':', '_'), id)\n }\n }\n }\n\n getRow(name: string) {\n return (\n this.rows.get(name) ??\n this.rows.get(this.colonNormalized.get(name) ?? '') ??\n ''\n )\n }\n}\n", "import { parseNewick } from '@gmod/newick'\n\nimport type { NewickNode } from '@gmod/newick'\n\n/**\n * Newick parsing for phylogenetic trees.\n *\n * `postParenNumeric: 'name'` is the whole reason this wrapper exists. A bare\n * number after a `)` is an internal node label in standard Newick -- typically a\n * bootstrap support value -- but `@gmod/hclust` reuses that slot for a cluster's\n * merge height, and the parser's default guesses between the two by whether the\n * tree carries any `:` branch length. Everything reaching this package is a\n * phylogeny (newick, the tree embedded in Stockholm `#=GF NH`, EMF, ASN.1), so\n * the guess is settled here instead: reading `((A,B)95,(C,D)80);` as lengths\n * would draw a phylogram scaled by support values.\n */\nexport default function parse(s: string): NewickNode {\n return parseNewick(s, { postParenNumeric: 'name' })\n}\n", "/**\n * Stockholm format parser\n * Based on stockholm-js by Ian Holmes\n * Rewritten in TypeScript\n */\n\nexport interface StockholmData {\n gf: Record<string, string[]>\n gc: Record<string, string>\n gs: Record<string, Record<string, string[]>>\n gr: Record<string, Record<string, string>>\n seqname: string[]\n seqdata: Record<string, string>\n}\n\nfunction createStockholm(): StockholmData {\n return {\n gf: Object.create(null),\n gc: Object.create(null),\n gs: Object.create(null),\n gr: Object.create(null),\n seqname: [],\n seqdata: Object.create(null),\n }\n}\n\n// records before a \"# STOCKHOLM 1.0\" header are an error in strict mode,\n// otherwise they implicitly start a new alignment\nfunction ensureStock(\n stock: StockholmData | null,\n strict: boolean,\n): StockholmData {\n if (stock) {\n return stock\n }\n if (strict) {\n throw new Error('No format header: # STOCKHOLM 1.0')\n }\n return createStockholm()\n}\n\nconst formatStartRegex = /^# STOCKHOLM 1.0/\nconst formatEndRegex = /^\\/\\/\\s*$/\nconst gfRegex = /^#=GF\\s+(\\S+)\\s+(.*?)\\s*$/\nconst gcRegex = /^#=GC\\s+(\\S+)\\s+(.*?)\\s*$/\nconst gsRegex = /^#=GS\\s+(\\S+)\\s+(\\S+)\\s+(.*?)\\s*$/\nconst grRegex = /^#=GR\\s+(\\S+)\\s+(\\S+)\\s+(.*?)\\s*$/\n// a sequence line is \"<name> <residues>\". The leading [^#\\s] guards against a\n// two-word comment (\"# note\") being taken as a sequence named '#'; every\n// meaningful '#' line is a #=GF/#=GC/#=GS/#=GR record already matched above.\nconst lineRegex = /^\\s*([^#\\s]\\S*)\\s+(\\S+)\\s*$/\nconst nonwhiteRegex = /\\S/\n\nexport function sniff(text: string): boolean {\n return formatStartRegex.test(text)\n}\n\nexport function parseAll(\n text: string,\n opts?: { strict?: boolean },\n): StockholmData[] {\n const options = opts ?? {}\n const db: StockholmData[] = []\n let stock: StockholmData | null = null\n // one tree spans consecutive `#=GF NH` lines, so a `#=GF TN` naming the\n // next tree, or any other #=GF line, ends it\n let treeContinues = false\n\n const lines = text.split('\\n')\n for (const line of lines) {\n let match: RegExpExecArray | null\n\n if (formatStartRegex.test(line)) {\n if (stock) {\n db.push(stock)\n }\n stock = createStockholm()\n treeContinues = false\n } else if (formatEndRegex.test(line)) {\n if (stock) {\n db.push(stock)\n }\n stock = null\n } else if ((match = gfRegex.exec(line))) {\n stock = ensureStock(stock, !!options.strict)\n const tag = match[1]!\n const values = (stock.gf[tag] ??= [])\n if (tag === 'NH' && treeContinues && values.length > 0) {\n values[values.length - 1] += match[2]!\n } else {\n values.push(match[2]!)\n }\n treeContinues = tag === 'NH'\n } else if ((match = gcRegex.exec(line))) {\n stock = ensureStock(stock, !!options.strict)\n stock.gc[match[1]!] = (stock.gc[match[1]!] ?? '') + match[2]!\n } else if ((match = gsRegex.exec(line))) {\n stock = ensureStock(stock, !!options.strict)\n const byName = (stock.gs[match[2]!] ??= Object.create(null))\n ;(byName[match[1]!] ??= []).push(match[3]!)\n } else if ((match = grRegex.exec(line))) {\n stock = ensureStock(stock, !!options.strict)\n const byName = (stock.gr[match[2]!] ??= Object.create(null))\n byName[match[1]!] = (byName[match[1]!] ?? '') + match[3]!\n } else if ((match = lineRegex.exec(line))) {\n stock = ensureStock(stock, !!options.strict)\n const seqname = match[1]!\n const seqdata = match[2]!\n if (stock.seqdata[seqname] === undefined) {\n stock.seqdata[seqname] = ''\n stock.seqname.push(seqname)\n }\n stock.seqdata[seqname] += seqdata\n } else if (nonwhiteRegex.test(line)) {\n if (options.strict) {\n throw new Error('Malformed line')\n }\n }\n }\n\n if (stock) {\n db.push(stock)\n }\n\n return db\n}\n\nexport function parse(\n text: string,\n opts?: { strict?: boolean },\n): StockholmData {\n const db = parseAll(text, opts)\n if (db.length === 0) {\n throw new Error('No alignments found')\n }\n if (db.length > 1) {\n throw new Error('More than one alignment found')\n }\n return db[0]!\n}\n", "import { generateNodeIds } from '../util.ts'\nimport BaseMSA from './BaseMSA.ts'\nimport parseNewick from './parseNewick.ts'\nimport { parseAll } from './stockholmParser.ts'\n\nimport type { MSATrack, NodeWithIds } from '../types.ts'\nimport type { StockholmData } from './stockholmParser.ts'\n\nexport default class StockholmMSA extends BaseMSA {\n private data: StockholmData[]\n private MSA: StockholmData\n\n constructor(text: string, currentAlignment: number) {\n const res = parseAll(text)\n const aln = res[currentAlignment] ?? res[0]\n if (!aln) {\n throw new Error('No alignments found in Stockholm file')\n }\n super(aln.seqname.map(name => [name, aln.seqdata[name] ?? '']))\n this.data = res\n this.MSA = aln\n }\n\n getMSA() {\n return this.MSA\n }\n\n get alignmentNames() {\n return this.data.map((aln, idx) => aln.gf.DE?.[0] ?? `Alignment ${idx + 1}`)\n }\n\n getHeader() {\n const acEntries = this.MSA.gs.AC ?? {}\n const drEntries = this.MSA.gs.DR ?? {}\n return {\n General: this.MSA.gf,\n Accessions: Object.fromEntries(\n Object.entries(acEntries).map(([k, v]) => [k, v[0]]),\n ),\n Dbxref: Object.fromEntries(\n Object.entries(drEntries).map(([k, v]) => [k, v.join('; ')]),\n ),\n }\n }\n\n getRowData(rowName: string) {\n return {\n name: rowName,\n accession: this.MSA.gs.AC?.[rowName]?.[0],\n dbxref: this.MSA.gs.DR?.[rowName]?.join('; '),\n }\n }\n\n getStructures() {\n const pdbRegex = /PDB; +(\\S+) +([^;\\s]+); *(-?[0-9]+)-(-?[0-9]+)/\n const drEntries = this.MSA.gs.DR ?? {}\n const result: Record<\n string,\n { pdb: string; chain: string; startPos: number; endPos: number }[]\n > = {}\n for (const [id, drList] of Object.entries(drEntries)) {\n for (const dr of drList) {\n const match = pdbRegex.exec(dr)\n if (match) {\n ;(result[id] ??= []).push({\n pdb: match[1]!.toLowerCase(),\n chain: match[2]!,\n startPos: +match[3]!,\n endPos: +match[4]!,\n })\n }\n }\n }\n return result\n }\n\n getTree(): NodeWithIds {\n const tree = this.MSA.gf.NH?.[0]\n return tree ? generateNodeIds(parseNewick(tree)) : super.getTree()\n }\n\n get seqConsensus() {\n return this.MSA.gc.seq_cons\n }\n\n get secondaryStructureConsensus() {\n return this.MSA.gc.SS_cons\n }\n\n /**\n * One text track per `#=GC` line, and one per `#=GR` line that stays hidden\n * until asked for: a Pfam seed carries a few per-row active-site lines, but\n * an Rfam family carries a structure line for every row with a PDB entry.\n */\n get tracks(): MSATrack[] {\n const { seq_cons, SS_cons, ...otherGc } = this.MSA.gc\n return [\n {\n id: 'seqConsensus',\n name: 'Sequence consensus',\n data: seq_cons,\n customColorScheme: {},\n },\n {\n id: 'secondaryStruct',\n name: 'Secondary-structure',\n data: SS_cons,\n customColorScheme: wussColors,\n },\n ...Object.entries(otherGc).map(([tag, data]) => ({\n id: `gc-${tag}`,\n name: tag,\n data,\n customColorScheme: structureColors(tag),\n })),\n ...Object.entries(this.MSA.gr).flatMap(([tag, byRow]) =>\n Object.entries(byRow).map(([row, data]) => ({\n id: `gr-${row}-${tag}`,\n name: `${row} ${tag}`,\n data,\n customColorScheme: structureColors(tag),\n defaultOff: true,\n })),\n ),\n ]\n }\n}\n\n// WUSS writes base-paired columns as open/close brackets of several nesting\n// types (<>, (), [], {}); coloring every open one way and every close the other\n// highlights each helix, including the tRNA acceptor stem written with parens\nconst wussColors: Record<string, string> = {\n '<': 'lightblue',\n '(': 'lightblue',\n '[': 'lightblue',\n '{': 'lightblue',\n '>': 'pink',\n ')': 'pink',\n ']': 'pink',\n '}': 'pink',\n}\n\n// `SS`, and Rfam's per-structure `2GIS_A_SS`\nfunction structureColors(tag: string) {\n return tag === 'SS' || tag.endsWith('_SS') ? wussColors : {}\n}\n\nexport { sniff as stockholmSniff } from './stockholmParser.ts'\n", "import A3mMSA from './A3mMSA.ts'\nimport ClustalMSA from './ClustalMSA.ts'\nimport EmfMSA from './EmfMSA.ts'\nimport FastaMSA from './FastaMSA.ts'\nimport StockholmMSA, { stockholmSniff } from './StockholmMSA.ts'\nimport { fastaSniff, splitFastaRecords } from './fastaRecords.ts'\n\nexport { parseEmfTree } from 'emf-js'\nexport { default as parseNewick } from './parseNewick.ts'\n\nexport type MSAParserType =\n | StockholmMSA\n | A3mMSA\n | FastaMSA\n | EmfMSA\n | ClustalMSA\n\nexport type MSAFormat = 'stockholm' | 'a3m' | 'fasta' | 'emf' | 'clustal'\n\nconst htmlPage = /^<(!doctype\\s+html|html[\\s>])/i\nconst clustalHeader = /^(CLUSTAL|MUSCLE|PROBCONS|MSAPROBS|Kalign)/i\n\n// A caller that knows the format, such as impg emitting fasta-aln, passes\n// `format` to skip sniffing, which cannot always tell FASTA from A3M\nexport function parseMSA(\n input: string,\n currentAlignment = 0,\n format?: MSAFormat,\n): MSAParserType {\n const text = input\n .replace(/^\\uFEFF/, '')\n .replaceAll(/\\r\\n?/g, '\\n')\n .trimStart()\n if (htmlPage.test(text)) {\n throw new Error(\n 'Received an HTML page, not an alignment. Check that the URL points at the file itself',\n )\n }\n if (format === 'stockholm') {\n return new StockholmMSA(text, currentAlignment)\n }\n if (format === 'a3m') {\n return new A3mMSA(text)\n }\n if (format === 'fasta') {\n return new FastaMSA(text)\n }\n if (format === 'emf') {\n return new EmfMSA(text)\n }\n if (format === 'clustal') {\n return new ClustalMSA(text)\n }\n if (stockholmSniff(text)) {\n return new StockholmMSA(text, currentAlignment)\n }\n if (fastaSniff(text)) {\n const records = splitFastaRecords(text)\n return A3mMSA.sniff(records) ? new A3mMSA(records) : new FastaMSA(records)\n }\n if (text.startsWith('SEQ')) {\n return new EmfMSA(text)\n }\n if (clustalHeader.test(text)) {\n return new ClustalMSA(text)\n }\n const firstLine = text.split('\\n', 1)[0]!.slice(0, 80)\n throw new Error(\n firstLine\n ? `Unrecognized alignment format: expected FASTA, A3M, Stockholm, Clustal or EMF, but the first line reads \"${firstLine}\"`\n : 'The alignment file is empty',\n )\n}\n\n/**\n * Get ungapped sequence from an aligned row\n */\nexport function getUngappedSequence(alignedSeq: string): string {\n return alignedSeq.replaceAll(/[.-]/g, '')\n}\n\nexport { default as A3mMSA } from './A3mMSA.ts'\nexport { default as ClustalMSA } from './ClustalMSA.ts'\nexport { default as EmfMSA } from './EmfMSA.ts'\nexport { default as FastaMSA } from './FastaMSA.ts'\nexport { default as StockholmMSA, stockholmSniff } from './StockholmMSA.ts'\n", "import type { GFFRecord } from '../types.ts'\n\n// decodeURIComponent throws on a stray '%' (common in unescaped GFF3 values);\n// fall back to the raw value rather than aborting the whole parse\nfunction safeDecode(val: string) {\n try {\n return decodeURIComponent(val)\n } catch {\n return val\n }\n}\n\n// InterProScan quotes some of its values (Ontology_term=\"GO:0008652\",\n// Dbxref=\"InterPro:IPR001048\"), and the quotes are not part of the term\nfunction unquote(val: string) {\n return val.replace(/^\"(.*)\"$/, '$1')\n}\n\nfunction parseAttributes(col9?: string): Record<string, string> {\n if (!col9) {\n return {}\n }\n const attributes: Record<string, string> = {}\n for (const field of col9.split(';')) {\n const eq = field.indexOf('=')\n const key = field.slice(0, eq).trim()\n const val = field.slice(eq + 1)\n // split on comma (the GFF3 multi-value separator) BEFORE decoding, so a\n // literal comma encoded as %2C survives the split and isn't mistaken\n // for a separator\n if (eq !== -1 && key && val) {\n attributes[key] = val\n .split(',')\n .map(v => unquote(safeDecode(v).trim()))\n .join(' ')\n }\n }\n return attributes\n}\n\nexport function parseGFF(str?: string): GFFRecord[] {\n if (!str) {\n return []\n }\n const lines: string[] = []\n for (const raw of str.split('\\n')) {\n const line = raw.trim()\n // InterProScan appends the sequences it scanned; every line past this is\n // FASTA, and reading it as features gave rows named \">P51587\"\n if (line.startsWith('##FASTA')) {\n break\n }\n // a feature is nine tab-separated columns, eight of them mandatory; a\n // FASTA line in a file that omitted the ##FASTA directive is one\n if (line && !line.startsWith('#') && line.split('\\t').length >= 8) {\n lines.push(line)\n }\n }\n return lines.map(f => {\n const parts = f.split('\\t')\n const [seq_id, source, type, start, end, score, strand, phase] = parts\n const col9 = parts[8]\n\n // attributes first, so a column-9 key colliding with a core column (e.g.\n // \"start=\") can't turn a number field into a string\n return {\n ...parseAttributes(col9),\n seq_id: safeDecode(seq_id ?? ''),\n source: source ?? '',\n type: type ?? '',\n start: Number(start) || 0,\n end: Number(end) || 0,\n score: Number(score) || 0,\n strand: strand ?? '.',\n phase: phase ?? '.',\n }\n })\n}\n", "import type { Annotation, GFFRecord } from '../types.ts'\n\n// Feature types drawn with an arrowhead for their strand. A prokaryotic GFF\n// writes each gene as a CDS row. Exon, UTR and domain features stay blocks,\n// since an exon is a segment of one transcript.\nconst GENE_LEVEL_TYPES = new Set([\n 'gene',\n 'CDS',\n 'pseudogene',\n 'mRNA',\n 'transcript',\n 'primary_transcript',\n 'ncRNA',\n 'tRNA',\n 'rRNA',\n 'snRNA',\n 'snoRNA',\n 'miRNA',\n 'lnc_RNA',\n])\n\n// +1/-1 for a stranded gene-level feature, undefined otherwise (which the\n// renderer draws as a plain block).\nfunction geneStrand({ type, strand }: GFFRecord): number | undefined {\n const directional = strand === '+' ? 1 : strand === '-' ? -1 : undefined\n return GENE_LEVEL_TYPES.has(type) ? directional : undefined\n}\n\n// The nine columns a feature line holds; every other key of a record came from\n// column 9\nconst GFF_COLUMNS = new Set([\n 'seq_id',\n 'source',\n 'type',\n 'start',\n 'end',\n 'score',\n 'strand',\n 'phase',\n])\n\nfunction attributesOf(record: GFFRecord) {\n const entries = Object.entries(record).filter(\n ([key, value]) => !GFF_COLUMNS.has(key) && typeof value === 'string',\n ) as [string, string][]\n return entries.length > 0 ? Object.fromEntries(entries) : undefined\n}\n\n// JBrowse and IGV read an RGB triple as well as a named or hex color, and the\n// attribute parser has already turned `255,0,0` into `255 0 0` by splitting on\n// the GFF3 multi-value comma\nconst RGB_TRIPLE = /^(\\d{1,3})[\\s,]+(\\d{1,3})[\\s,]+(\\d{1,3})$/\n\nfunction cssColor(record: GFFRecord) {\n const value = (record.color ??\n record.colour ??\n record.Color ??\n record.Colour) as string | undefined\n if (!value) {\n return undefined\n }\n const triple = RGB_TRIPLE.exec(value.trim())\n return triple ? `rgb(${triple[1]},${triple[2]},${triple[3]})` : value.trim()\n}\n\n// InterProScan describes the sequence it scanned before listing the matches\n// against it. Those lines span the whole row and carry no signature, so they\n// would draw a full-width block labelled by an md5.\nconst WHOLE_SEQUENCE_TYPES = new Set(['polypeptide', 'nucleic_acid'])\n\n/**\n * Convert GFF records to annotations, one per record, in file order.\n *\n * InterProScan's own GFF3 output falls out of the same mapping: it writes\n * `Name` as the signature accession and `signature_desc` as its human-readable\n * name, with domain positions 1-based.\n */\nexport function gffToAnnotations(gffRecords: GFFRecord[]): Annotation[] {\n return gffRecords\n .filter(record => !WHOLE_SEQUENCE_TYPES.has(record.type))\n .map(record => {\n const accession =\n (record.Name as string) ||\n (record.ID as string) ||\n `${record.source}_${record.start}_${record.end}`\n const name =\n (record.signature_desc as string) ||\n (record.Name as string) ||\n accession\n return {\n id: record.seq_id,\n accession,\n name,\n // not Ontology_term: a GO id list is what the domain is annotated\n // with, not what it is, and reading it first labelled every\n // InterProScan domain \"GO:0003677 GO:0006281\"\n description:\n (record.description as string) ||\n (record.Note as string) ||\n (record.signature_desc as string) ||\n name,\n featureType: record.type,\n start: record.start,\n end: record.end,\n strand: geneStrand(record),\n color: cssColor(record),\n attributes: attributesOf(record),\n }\n })\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["indexResultsByXref", "results", "r", "interProScanToAnnotations", "id", "matches", "signature", "locations", "entry", "accession", "name", "start", "end", "strand", "interProScanResponseToAnnotations", "response", "annotationsToGFF", "annotations", "header", "line", "annotation", "accession", "name", "description", "featureType", "id", "start", "end", "strand", "annotationTextToGFF", "text", "trimmed", "response", "annotationsToGFF", "interProScanResponseToAnnotations", "generateNodeIds", "tree", "parent", "depth", "withId", "node", "id", "root", "stack", "src", "out", "d", "child", "i", "BaseMSA", "rows", "name", "seq", "max", "_name", "fastaSniff", "text", "splitFastaRecords", "records", "seen", "current", "flush", "count", "line", "toRecords", "input", "CODE_A", "CODE_Z", "CODE_a", "CODE_z", "CODE_DASH", "isLower", "code", "isMatch", "parseRow", "seq", "matches", "inserts", "ch", "A3mMSA", "BaseMSA", "input", "records", "toRecords", "expanded", "expandA3M", "r", "i", "fastaSniff", "seqs", "s", "hasLowercase", "matchCount", "rawSeqs", "rows", "numPositions", "maxInserts", "pos", "ins", "result", "ClustalMSA", "BaseMSA", "text", "msa", "parse", "aln", "EmfMSA", "BaseMSA", "text", "parseEmfAln", "aln", "FastaMSA", "BaseMSA", "input", "records", "toRecords", "r", "id", "name", "parse", "s", "parseNewick", "createStockholm", "ensureStock", "stock", "strict", "formatStartRegex", "formatEndRegex", "gfRegex", "gcRegex", "gsRegex", "grRegex", "lineRegex", "nonwhiteRegex", "sniff", "text", "parseAll", "opts", "options", "db", "treeContinues", "lines", "line", "match", "tag", "values", "byName", "seqname", "seqdata", "StockholmMSA", "BaseMSA", "text", "currentAlignment", "res", "parseAll", "aln", "name", "idx", "acEntries", "drEntries", "k", "v", "rowName", "pdbRegex", "result", "id", "drList", "dr", "match", "tree", "generateNodeIds", "parse", "seq_cons", "SS_cons", "otherGc", "wussColors", "tag", "data", "structureColors", "byRow", "row", "htmlPage", "clustalHeader", "parseMSA", "input", "currentAlignment", "format", "text", "StockholmMSA", "A3mMSA", "FastaMSA", "EmfMSA", "ClustalMSA", "sniff", "fastaSniff", "records", "splitFastaRecords", "firstLine", "getUngappedSequence", "alignedSeq", "safeDecode", "val", "unquote", "parseAttributes", "col9", "attributes", "field", "eq", "key", "v", "parseGFF", "str", "lines", "raw", "line", "f", "parts", "seq_id", "source", "type", "start", "end", "score", "strand", "phase", "GENE_LEVEL_TYPES", "geneStrand", "type", "strand", "directional", "GFF_COLUMNS", "attributesOf", "record", "entries", "key", "value", "RGB_TRIPLE", "cssColor", "triple", "WHOLE_SEQUENCE_TYPES", "gffToAnnotations", "gffRecords", "accession", "name"]
7
+ }
@@ -1,2 +1,2 @@
1
1
  import{a as m}from"./chunk-BX4Z274Q.js";import{a}from"./chunk-J6KYLXRD.js";import{b as o}from"./chunk-FY3BTKY4.js";var e=o(a(),1),t=o(m(),1);function b({checked:r,label:l,disabled:n,onChange:c}){return e.default.createElement("div",null,e.default.createElement(t.FormControlLabel,{control:e.default.createElement(t.Checkbox,{disabled:n,checked:r,onChange:()=>{c()}}),label:l}))}export{b as a};
2
- //# sourceMappingURL=chunk-YOTSFJMU.js.map
2
+ //# sourceMappingURL=chunk-ERCMNTEQ.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../node_modules/.pnpm/react-msaview@9.0.0_3e54acfe76b6ad0d26e91cd532b7f775/node_modules/react-msaview/src/components/Checkbox2.tsx"],
3
+ "sources": ["../../node_modules/.pnpm/react-msaview@9.1.0_3e54acfe76b6ad0d26e91cd532b7f775/node_modules/react-msaview/src/components/Checkbox2.tsx"],
4
4
  "sourcesContent": ["import React from 'react'\n\nimport { Checkbox, FormControlLabel } from '@mui/material'\n\nexport default function Checkbox2({\n checked,\n label,\n disabled,\n onChange,\n}: {\n checked: boolean\n label: string\n disabled?: boolean\n onChange: () => void\n}) {\n return (\n <div>\n <FormControlLabel\n control={\n <Checkbox\n disabled={disabled}\n checked={checked}\n onChange={() => {\n onChange()\n }}\n />\n }\n label={label}\n />\n </div>\n )\n}\n"],
5
5
  "mappings": "mHAAA,IAAAA,EAAkB,SAElBC,EAA2C,SAE7B,SAAPC,EAA2B,CAChC,QAAAC,EACA,MAAAC,EACA,SAAAC,EACA,SAAAC,CAAQ,EAMT,CACC,OACE,EAAAC,QAAA,cAAA,MAAA,KACE,EAAAA,QAAA,cAAC,mBAAgB,CACf,QACE,EAAAA,QAAA,cAAC,WAAQ,CACP,SAAUF,EACV,QAASF,EACT,SAAU,IAAK,CACbG,EAAQ,CACV,CAAC,CAAA,EAGL,MAAOF,CAAK,CAAA,CACZ,CAGR",
6
6
  "names": ["import_react", "import_material", "Checkbox2", "checked", "label", "disabled", "onChange", "React"]
@@ -1,2 +1,2 @@
1
- import{b as n}from"./chunk-GIHMPOCO.js";import{a as f}from"./chunk-BX4Z274Q.js";import{a as p}from"./chunk-J6KYLXRD.js";import{b as i}from"./chunk-FY3BTKY4.js";var e=i(p(),1),c=i(f(),1);function m({text:t,label:u="Copy to clipboard"}){let[a,r]=(0,e.useState)(!1),o=(0,e.useRef)(void 0);return(0,e.useEffect)(()=>()=>{clearTimeout(o.current)},[]),e.default.createElement(c.Button,{variant:"contained",color:"primary",onClick:()=>{n(typeof t=="string"?t:t()),r(!0),clearTimeout(o.current),o.current=setTimeout(()=>{r(!1)},500)}},a?"Copied!":u)}export{m as a};
2
- //# sourceMappingURL=chunk-GDFVLZYX.js.map
1
+ import{b as n}from"./chunk-JF6CW6MO.js";import{a as f}from"./chunk-BX4Z274Q.js";import{a as p}from"./chunk-J6KYLXRD.js";import{b as i}from"./chunk-FY3BTKY4.js";var e=i(p(),1),c=i(f(),1);function m({text:t,label:u="Copy to clipboard"}){let[a,r]=(0,e.useState)(!1),o=(0,e.useRef)(void 0);return(0,e.useEffect)(()=>()=>{clearTimeout(o.current)},[]),e.default.createElement(c.Button,{variant:"contained",color:"primary",onClick:()=>{n(typeof t=="string"?t:t()),r(!0),clearTimeout(o.current),o.current=setTimeout(()=>{r(!1)},500)}},a?"Copied!":u)}export{m as a};
2
+ //# sourceMappingURL=chunk-FEUZKN5V.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["../../node_modules/.pnpm/react-msaview@9.0.0_3e54acfe76b6ad0d26e91cd532b7f775/node_modules/react-msaview/src/components/CopyButton.tsx"],
3
+ "sources": ["../../node_modules/.pnpm/react-msaview@9.1.0_3e54acfe76b6ad0d26e91cd532b7f775/node_modules/react-msaview/src/components/CopyButton.tsx"],
4
4
  "sourcesContent": ["import React, { useEffect, useRef, useState } from 'react'\n\nimport { Button } from '@mui/material'\n\nimport copy from '../vendor/copyToClipboard.ts'\n\n/**\n * Copy-to-clipboard button that confirms on the label for a moment. The timer is\n * cleared on unmount, since these live in dialogs the copy itself often closes.\n */\nexport default function CopyButton({\n text,\n label = 'Copy to clipboard',\n}: {\n text: string | (() => string)\n label?: string\n}) {\n const [copied, setCopied] = useState(false)\n const timer = useRef<ReturnType<typeof setTimeout>>(undefined)\n\n useEffect(\n () => () => {\n clearTimeout(timer.current)\n },\n [],\n )\n\n return (\n <Button\n variant=\"contained\"\n color=\"primary\"\n onClick={() => {\n copy(typeof text === 'string' ? text : text())\n setCopied(true)\n clearTimeout(timer.current)\n timer.current = setTimeout(() => {\n setCopied(false)\n }, 500)\n }}\n >\n {copied ? 'Copied!' : label}\n </Button>\n )\n}\n"],
5
5
  "mappings": "gKAAA,IAAAA,EAAmD,SAEnDC,EAAuB,SAQT,SAAPC,EAA4B,CACjC,KAAAC,EACA,MAAAC,EAAQ,mBAAmB,EAI5B,CACC,GAAM,CAACC,EAAQC,CAAS,KAAI,YAAS,EAAK,EACpCC,KAAQ,UAAsC,MAAS,EAE7D,sBACE,IAAM,IAAK,CACT,aAAaA,EAAM,OAAO,CAC5B,EACA,CAAA,CAAE,EAIF,EAAAC,QAAA,cAAC,SAAM,CACL,QAAQ,YACR,MAAM,UACN,QAAS,IAAK,CACZC,EAAK,OAAON,GAAS,SAAWA,EAAOA,EAAI,CAAE,EAC7CG,EAAU,EAAI,EACd,aAAaC,EAAM,OAAO,EAC1BA,EAAM,QAAU,WAAW,IAAK,CAC9BD,EAAU,EAAK,CACjB,EAAG,GAAG,CACR,CAAC,EAEAD,EAAS,UAAYD,CAAK,CAGjC",
6
6
  "names": ["import_react", "import_material", "CopyButton", "text", "label", "copied", "setCopied", "timer", "React", "copy"]
@@ -1,2 +1,2 @@
1
1
  import{a}from"./chunk-FY3BTKY4.js";var i=a((p,c)=>{c.exports=JBrowseExports["@jbrowse/core/util/tss-react"]});function n(t){let o=navigator.clipboard;if(o?.writeText){o.writeText(t).catch(r=>{console.error("Failed to copy to clipboard:",r)});return}let e=document.createElement("textarea");e.value=t,e.style.position="fixed",e.style.opacity="0",document.body.append(e),e.select(),document.execCommand("copy"),e.remove()}export{i as a,n as b};
2
- //# sourceMappingURL=chunk-GIHMPOCO.js.map
2
+ //# sourceMappingURL=chunk-JF6CW6MO.js.map
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "version": 3,
3
- "sources": ["global-externals:@jbrowse/core/util/tss-react", "../../node_modules/.pnpm/react-msaview@9.0.0_3e54acfe76b6ad0d26e91cd532b7f775/node_modules/react-msaview/src/vendor/copyToClipboard.ts"],
3
+ "sources": ["global-externals:@jbrowse/core/util/tss-react", "../../node_modules/.pnpm/react-msaview@9.1.0_3e54acfe76b6ad0d26e91cd532b7f775/node_modules/react-msaview/src/vendor/copyToClipboard.ts"],
4
4
  "sourcesContent": ["module.exports = JBrowseExports[\"@jbrowse/core/util/tss-react\"];", "export default function copy(text: string) {\n const clip = navigator.clipboard as Clipboard | undefined\n if (clip?.writeText) {\n clip.writeText(text).catch((e: unknown) => {\n console.error('Failed to copy to clipboard:', e)\n })\n return\n }\n const textarea = document.createElement('textarea')\n textarea.value = text\n textarea.style.position = 'fixed'\n textarea.style.opacity = '0'\n document.body.append(textarea)\n textarea.select()\n document.execCommand('copy')\n textarea.remove()\n}\n"],
5
5
  "mappings": "mCAAA,IAAAA,EAAAC,EAAA,CAAAC,EAAAC,IAAA,CAAAA,EAAO,QAAU,eAAe,8BAA8B,ICAhD,SAAPC,EAAsBC,EAAY,CACvC,IAAMC,EAAO,UAAU,UACvB,GAAIA,GAAM,UAAW,CACnBA,EAAK,UAAUD,CAAI,EAAE,MAAOE,GAAc,CACxC,QAAQ,MAAM,+BAAgCA,CAAC,CACjD,CAAC,EACD,MACF,CACA,IAAMC,EAAW,SAAS,cAAc,UAAU,EAClDA,EAAS,MAAQH,EACjBG,EAAS,MAAM,SAAW,QAC1BA,EAAS,MAAM,QAAU,IACzB,SAAS,KAAK,OAAOA,CAAQ,EAC7BA,EAAS,OAAM,EACf,SAAS,YAAY,MAAM,EAC3BA,EAAS,OAAM,CACjB",
6
6
  "names": ["require_tss_react", "__commonJSMin", "exports", "module", "copy", "text", "clip", "e", "textarea"]
@@ -0,0 +1,5 @@
1
+ function k(t){let e=t.split(`
2
+ `).map(n=>n.trim()).filter(n=>!!n),r=[],s=[];for(let n of e)if(n.startsWith("SEQ"))r.push(n);else{if(n.startsWith("DATA"))continue;if(n.startsWith("//"))break;s.push(n)}let o=r.map(n=>{let[,i,c,p,a,u,l,f,h]=n.split(" ");return{species:i,protein:c,chr:p,start:+a,end:+u,strand:+l,geneId:f,unknown:h,seq:""}});for(let n of s)for(let i=0;i<r.length;i++)o[i].seq+=n[i];return o}function S(t){let e=t.split(`
3
+ `).map(n=>n.trim()).filter(n=>!!n),r=[],s="";for(let n of e)if(n.startsWith("SEQ"))r.push(n);else{if(n.startsWith("DATA"))continue;if(n.startsWith("//"))break;s=n}let o=r.map(n=>{let[,i,c,p,a,u,l,f,h]=n.split(" ");return{species:i,protein:c,chr:p,start:+a,end:+u,strand:+l,geneId:f,unknown:h}});return{tree:s,seqs:o}}function q(t){let e=/\(?(\d+(\.\d+)+)\)?/.exec(t);return e&&e.length>1?e[1]:""}function m(t){let e=["CLUSTAL","PROBCONS","MUSCLE","MSAPROBS","Kalign"];e.some(s=>t.startsWith(s))||console.warn(`${t} is not a known CLUSTAL header: ${e.join(",")}, proceeding but could indicate an issue`);let r=q(t);return{info:t,version:r}}function d(t){let e=t.next();for(;!e.done&&e.value.trim()==="";)e=t.next();return e.value}function x(t){let e=t.split(/\s+/),r=t.slice(e[0].length),s=e[0].length+r.indexOf(e[1]),o=s+e[1].length;return[s,o]}function g(t){let e=d(t),r=[],s="";if(!e)return;for(;e;)e.startsWith(" ")?s=e:r.push(e),e=t.next().value;let[o,n]=x(r[0]),c=r.map(l=>l.split(/\s+/)).map(l=>l[0]),p=r.map(l=>l.slice(o,n)),a=s.slice(o,n),u=p[0].length-a.length;return u&&(a+=" ".repeat(u)),{ids:c,seqs:p,consensus:a}}function w(t){let e,r=g(t);if(r!==void 0)for(;e=g(t);){for(let s=0;s<e.seqs.length;s++)r.seqs[s]+=e.seqs[s];r.consensus+=e.consensus}return r}function E(t){let e=d(t);if(!e)throw new Error("Empty file received");let r=m(e),s=w(t);if(s===void 0)throw new Error("No blocks parsed");let o=s.seqs.map((i,c)=>({id:s.ids[c],seq:i})),{consensus:n}=s;if(n.length!==o[0].seq.length)throw new Error(`Consensus length != sequence length. Con ${n.length} seq ${o[0].seq.length}`);return{consensus:n,alns:o,header:r}}function W(t){let e=t.split(`
4
+ `)[Symbol.iterator]();return E(e)}export{W as a,k as b,S as c};
5
+ //# sourceMappingURL=chunk-K55ZVN73.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../node_modules/.pnpm/emf-js@2.0.0/node_modules/emf-js/src/index.ts", "../../node_modules/.pnpm/clustal-js@2.0.19/node_modules/clustal-js/src/util.ts", "../../node_modules/.pnpm/clustal-js@2.0.19/node_modules/clustal-js/src/index.ts"],
4
+ "sourcesContent": ["export interface Row {\n id: string\n seq: string\n}\n\nexport function parseEmfAln(contents: string) {\n const lines = contents\n .split('\\n')\n .map(f => f.trim())\n .filter(f => !!f)\n const seqs = []\n const alns = []\n for (const line of lines) {\n if (line.startsWith('SEQ')) {\n seqs.push(line)\n } else if (line.startsWith('DATA')) {\n continue\n } else if (line.startsWith('//')) {\n break\n } else {\n alns.push(line)\n }\n }\n const arr = seqs.map(s => {\n const [, species, protein, chr, start, end, strand, geneId, unknown] =\n s.split(' ')\n return {\n species,\n protein,\n chr,\n start: +start,\n end: +end,\n strand: +strand,\n geneId,\n unknown,\n seq: '',\n }\n })\n for (const aln of alns) {\n for (let j = 0; j < seqs.length; j++) {\n arr[j].seq += aln[j]\n }\n }\n return arr\n}\n\nexport function parseEmfTree(contents: string) {\n const lines = contents\n .split('\\n')\n .map(f => f.trim())\n .filter(f => !!f)\n const seqs = []\n let tree = ''\n for (const line of lines) {\n if (line.startsWith('SEQ')) {\n seqs.push(line)\n } else if (line.startsWith('DATA')) {\n continue\n } else if (line.startsWith('//')) {\n break\n } else {\n tree = line\n }\n }\n const arr = seqs.map(s => {\n const [, species, protein, chr, start, end, strand, geneId, unknown] =\n s.split(' ')\n return {\n species,\n protein,\n chr,\n start: +start,\n end: +end,\n strand: +strand,\n geneId,\n unknown,\n }\n })\n\n return { tree, seqs: arr }\n}\n", "export function parseVersion(line: string) {\n const res = /\\(?(\\d+(\\.\\d+)+)\\)?/.exec(line)\n return res && res.length > 1 ? res[1] : ''\n}\nexport function parseHeader(info: string) {\n const knownHeaders = ['CLUSTAL', 'PROBCONS', 'MUSCLE', 'MSAPROBS', 'Kalign']\n\n if (!knownHeaders.some(l => info.startsWith(l))) {\n console.warn(\n `${info} is not a known CLUSTAL header: ${knownHeaders.join(\n ',',\n )}, proceeding but could indicate an issue`,\n )\n }\n const version = parseVersion(info)\n return { info, version }\n}\n\nexport function getFirstNonEmptyLine(arr: Iterator<string>): string {\n // There should be two blank lines after the header line\n let line = arr.next()\n while (!line.done && line.value.trim() === '') {\n line = arr.next()\n }\n return line.value!\n}\n\nexport function getSeqBounds(line: string) {\n const fields = line.split(/\\s+/)\n const temp = line.slice(fields[0]!.length)\n const s = fields[0]!.length + temp.indexOf(fields[1]!)\n const e = s + fields[1]!.length\n return [s, e] as const\n}\n\n// Use the first block to get the sequence identifiers\nexport function parseBlock(arr: Iterator<string>) {\n let line = getFirstNonEmptyLine(arr)\n const block = []\n let consensusLine = ''\n if (!line) {\n return undefined\n }\n\n while (line) {\n if (line.startsWith(' ')) {\n consensusLine = line\n } else {\n block.push(line)\n }\n line = arr.next().value\n }\n const [start, end] = getSeqBounds(block[0]!)\n const fields = block.map(s => s.split(/\\s+/))\n const ids = fields.map(s => s[0]!)\n const seqs = block.map(s => s.slice(start, end))\n let consensus = consensusLine.slice(start, end)\n\n // handle if the consensus trailing whitespace got trimmed\n const remainder = seqs[0]!.length - consensus.length\n if (remainder) {\n consensus += ' '.repeat(remainder)\n }\n return {\n ids,\n seqs,\n consensus,\n }\n}\n\nexport function parseBlocks(arr: Iterator<string>) {\n let block\n const res = parseBlock(arr)\n if (res !== undefined) {\n while ((block = parseBlock(arr))) {\n for (let i = 0; i < block.seqs.length; i++) {\n res.seqs[i] += block.seqs[i]!\n }\n res.consensus += block.consensus\n }\n }\n return res\n}\n", "import { parsePairwiseBlocks } from './pairwise.ts'\nimport { parseBlocks, parseHeader, getFirstNonEmptyLine } from './util.ts'\n\nexport function parseClustalIter(arr: Iterator<string>) {\n const line = getFirstNonEmptyLine(arr)\n if (!line) {\n throw new Error('Empty file received')\n }\n const header = parseHeader(line)\n\n const res = parseBlocks(arr)\n if (res === undefined) {\n throw new Error('No blocks parsed')\n }\n\n const alns = res.seqs.map((n, index) => ({ id: res.ids[index]!, seq: n }))\n const { consensus } = res\n if (consensus.length !== alns[0]!.seq.length) {\n throw new Error(\n `Consensus length != sequence length. Con ${consensus.length} seq ${alns[0]!.seq.length}`,\n )\n }\n\n return { consensus, alns, header }\n}\n\nexport interface Row {\n id: string\n seq: string\n}\n\nexport function parse(contents: string) {\n const iter = contents.split('\\n')[Symbol.iterator]()\n return parseClustalIter(iter)\n}\n\nexport function parsePairwise(contents: string) {\n const filtered = contents\n .split('\\n')\n .filter(f => !f.startsWith('#'))\n .join('\\n')\n\n const res = parsePairwiseBlocks(filtered.split('\\n')[Symbol.iterator]())\n if (res === undefined) {\n throw new Error('No blocks parsed')\n }\n\n const alns = res.seqs.map((n, index) => ({ id: res.ids[index]!, seq: n }))\n const { consensus } = res\n const firstAln = alns[0]\n if (!firstAln) {\n throw new Error('No alignments found')\n }\n if (consensus.length !== firstAln.seq.length) {\n throw new Error(\n `Consensus length !== sequence length. Con ${consensus.length} seq ${firstAln.seq.length}`,\n )\n }\n if (alns.length !== 2) {\n throw new Error(\n `Expected exactly 2 sequences in pairwise alignment, got ${alns.length}`,\n )\n }\n return {\n consensus,\n alns: alns as [Row, Row],\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["parseEmfAln", "contents", "lines", "f", "seqs", "alns", "line", "arr", "s", "species", "protein", "chr", "start", "end", "strand", "geneId", "unknown", "aln", "j", "parseEmfTree", "tree", "parseVersion", "line", "res", "parseHeader", "info", "knownHeaders", "l", "version", "getFirstNonEmptyLine", "arr", "getSeqBounds", "fields", "temp", "e", "parseBlock", "block", "consensusLine", "start", "end", "ids", "s", "seqs", "consensus", "remainder", "parseBlocks", "i", "parseClustalIter", "arr", "line", "getFirstNonEmptyLine", "header", "parseHeader", "res", "parseBlocks", "alns", "n", "index", "consensus", "parse", "contents", "iter"]
7
+ }
@@ -0,0 +1,2 @@
1
+ import{L as St,M as kt,Q as ee,R as Tt,S as ve,T as Mt,U as Ct,V as We,W as Rt,X as Lt,Y as Et,a as yt,j as vt,l as xt}from"./chunk-OVAXNTPN.js";import{b as ye,d as bt,e as wt}from"./chunk-73KAPCJ2.js";import{a as qn}from"./chunk-BX4Z274Q.js";import{a as le}from"./chunk-J6KYLXRD.js";import{a as $e,b as V}from"./chunk-FY3BTKY4.js";var Ht=$e((co,At)=>{At.exports=JBrowseExports.mobx});var Wn=$e((ua,$n)=>{$n.exports=JBrowseExports["react-dom"]});var Nn=$e((ha,Dn)=>{Dn.exports=JBrowseExports["react-dom/client"]});var x=V(le(),1),Un=V(Ht(),1);function De({model:e,offsetY:t,blockSizeY:n}){let{rowHeight:r}=e;return{yStart:Math.max(0,Math.floor((t-r)/r)),yEnd:Math.max(0,Math.ceil((t+n+r)/r))}}function I({model:e,offsetY:t,blockSizeY:n}){let{yStart:r,yEnd:o}=De({model:e,offsetY:t,blockSizeY:n});return e.leaves.slice(r,o)}var j=V(le(),1);var ce=V(le(),1),Ft=V(qn(),1);var te=V(le(),1);function zt(e,t){let n=(0,te.useRef)(!1),[r,o]=(0,te.useState)();return(0,te.useEffect)(()=>{if(r!==void 0){let s=function(c){n.current||(n.current=!0,requestAnimationFrame(()=>{let u=e==="x"?c.clientX:c.clientY;t(u-i,a),n.current=!1}))},l=function(){o(void 0)},{client:i,startScroll:a}=r;return document.addEventListener("mousemove",s),document.addEventListener("mouseup",l),()=>{document.removeEventListener("mousemove",s),document.removeEventListener("mouseup",l)}}},[e,t,r]),{dragging:r!==void 0,startDrag:(i,a)=>{o({client:e==="x"?i.clientX:i.clientY,startScroll:a})}}}var Se="rgba(66,119,127,0.3)",xe=4,Zn={thumb:{fill:()=>Se,fillHovered:()=>"rgba(66,119,127,0.6)",cursor:()=>"pointer",position:"absolute",zIndex:100},resizer:{fill:e=>e.palette.mode==="dark"?e.palette.grey[800]:"rgba(200,200,200)",fillHovered:e=>e.palette.mode==="dark"?e.palette.grey[600]:"rgba(150,150,150)",cursor:e=>e==="x"?"ew-resize":"ns-resize",position:"relative"}};function Jn({axis:e,variant:t,getStart:n,onDrag:r,style:o}){let i=(0,Ft.useTheme)(),[a,s]=(0,ce.useState)(!1),{startDrag:l}=zt(e,r),{fill:c,fillHovered:u,cursor:f,position:h,zIndex:d}=Zn[t];return ce.default.createElement("div",{...t==="resizer"&&{role:"separator","aria-orientation":e==="x"?"vertical":"horizontal"},onMouseEnter:()=>{s(!0)},onMouseLeave:()=>{s(!1)},onMouseDown:p=>{l(p,n())},style:{position:h,zIndex:d,cursor:f(e),background:a?u(i):c(i),...o}},t==="resizer"?ce.default.createElement("div",{style:{position:"absolute",zIndex:101,...e==="x"?{top:0,bottom:0,left:-xe,right:-xe}:{left:0,right:0,top:-xe,bottom:-xe}}}):null)}function ke(e){let{dynamicColorSchemeName:t}=e;if(t==="clustalx_protein_dynamic"){let{colClustalX:r}=e;return(o,i)=>r[o][i]}if(t==="percent_identity_dynamic"){let{colConsensus:r}=e;return(o,i)=>{let a=r[o];return i===a.letter?a.color:void 0}}let{colorScheme:n}=e;return(r,o)=>n[o]}function Bt(e){let{dynamicColorSchemeName:t}=e;return t==="clustalx_protein_dynamic"?e.colClustalX:t==="percent_identity_dynamic"?e.colConsensus:e.colorScheme}var ne=512,Kn=64,Qn=2e3,Yn=4096,fe=new Uint8Array(new Uint32Array([1]).buffer)[0]===1;function Wt(e,t,n,r){return fe?(r<<24|n<<16|t<<8|e)>>>0:(e<<24|t<<16|n<<8|r)>>>0}var J,Te=new Map;function er(e){let t=Te.get(e);if(t!==void 0)return t;J===void 0&&(J=Ge(1,1)?.ctx??null);let n=0;if(J){J.clearRect(0,0,1,1),J.fillStyle=e,J.fillRect(0,0,1,1);let[r=0,o=0,i=0,a=0]=J.getImageData(0,0,1,1).data;n=Wt(r,o,i,a)}return Te.size>=Yn&&Te.clear(),Te.set(e,n),n}function Dt(e,t){let{columns:n,relativeTo:r,colorAt:o,bg:i,hover:a}=e,s=t(i),l=t(a),c=r?n.get(r):void 0;return(u,f,h)=>{if(c&&u!==r&&h===c[f])return l;let d=o(f,h);return d===void 0?s:t(d)}}function Ne({spec:e,col0:t,row0:n,width:r,height:o,colStep:i=1,rowStep:a=1,colSpan:s=1,rowSpan:l=1,toPixel:c=er,out:u=new Uint32Array(r*o)}){if(s>1||l>1)return tr({spec:e,col0:t,row0:n,width:r,height:o,colSpan:s,rowSpan:l,toPixel:c,out:u}),u;let{rowNames:f,columns:h}=e,d=Dt(e,c);for(let p=0;p<o;p++){let m=f[n+p*a];if(m===void 0)break;let g=h.get(m);if(!g)continue;let w=p*r;for(let b=0;b<r;b++){let v=t+b*i,y=g[v];if(y===void 0)break;u[w+b]=d(m,v,y)}}return u}function tr({spec:e,col0:t,row0:n,width:r,height:o,colSpan:i,rowSpan:a,toPixel:s,out:l}){let{rowNames:c,columns:u}=e,f=Dt(e,s),h=i*a,d=fe?0:24,p=fe?8:16,m=fe?16:8,g=fe?24:0,w=[],b=[];for(let v=0;v<o;v++){w.length=0,b.length=0;for(let S=0;S<a;S++){let k=c[n+v*a+S],T=k===void 0?void 0:u.get(k);k!==void 0&&T&&(w.push(k),b.push(T))}let y=v*r;for(let S=0;S<r;S++){let k=0,T=0,M=0,C=0;for(let R=0;R<b.length;R++){let B=b[R],N=w[R];for(let F=0;F<i;F++){let _=t+S*i+F,G=B[_];if(G===void 0)break;let O=f(N,_,G),L=O>>>g&255;k+=(O>>>d&255)*L,T+=(O>>>p&255)*L,M+=(O>>>m&255)*L,C+=L}}l[y+S]=C===0?0:Wt(Math.round(k/C),Math.round(T/C),Math.round(M/C),Math.round(C/h))}}}function nr(e){let t=e;return!!t&&typeof t.createImageData=="function"&&typeof t.putImageData=="function"&&typeof t.getImageData=="function"&&typeof t.clearRect=="function"&&typeof t.fillRect=="function"}function _e(e,t,n,r){let o=typeof OffscreenCanvas<"u"?new OffscreenCanvas(e,t):typeof document<"u"?Object.assign(document.createElement("canvas"),{width:e,height:t}):void 0,i=o?.getContext("2d",r);return n(i)?{canvas:o,ctx:i}:void 0}function Ge(e,t){return _e(e,t,nr,{willReadFrequently:!0})}function Xe(e,t,n){let r=Ge(e,t);if(!r)return;let o=r.ctx.createImageData(e,t);return n(new Uint32Array(o.data.buffer)),r.ctx.putImageData(o,0,0),r.canvas}var Ot;function Nt(e){return Ot??=!!Ge(1,1),!e.actuallyShowDomains&&e.bgColor&&Ot}var Pt=new WeakMap;function rr(e,t){return[e.columns,e.leaves,e.colorSchemeName,e.customColorScheme,Bt(e),e.relativeTo,t.palette.action.hover,t.palette.background.default]}function Ve(e,t){let n=rr(e,t),r=Pt.get(e);if(r&&n.every((i,a)=>i===r.keys[a]))return r;let o={keys:n,spec:{rowNames:e.leaves.map(i=>i.data.name),columns:e.columns,relativeTo:e.relativeTo,colorAt:ke(e),bg:t.palette.background.default,hover:t.palette.action.hover},numColumns:e.numColumns,numRows:e.numRows,tiles:new Map};return Pt.set(e,o),o}function It(e){return e>=1?1:2**Math.ceil(Math.log2(1/e))}function or({cache:e,tileRow:t,tileCol:n,colSpan:r,rowSpan:o}){let i=`${r}_${o}_${t}_${n}`,a=e.tiles.get(i);if(a)return e.tiles.delete(i),e.tiles.set(i,a),a;let s=n*ne*r,l=t*ne*o,c=Math.min(ne,Math.ceil((e.numColumns-s)/r)),u=Math.min(ne,Math.ceil((e.numRows-l)/o));if(c<=0||u<=0)return;let f=Xe(c,u,h=>{Ne({spec:e.spec,col0:s,row0:l,width:c,height:u,colSpan:r,rowSpan:o,out:h})});if(f){e.tiles.set(i,f);for(let h of e.tiles.keys()){if(e.tiles.size<=Kn)break;e.tiles.delete(h)}return f}}function bo({ctx:e,model:t,theme:n,offsetX:r,offsetY:o}){let{colWidth:i,rowHeight:a,blockSize:s,highResScaleFactor:l}=t,c=Ve(t,n),u=It(i*l),f=It(a*l);e.resetTransform(),e.scale(l,l),e.translate(-r,-o),e.imageSmoothingEnabled=!1;let h=i*u,d=a*f,p=ne*h,m=ne*d,g=Math.max(0,Math.floor(r/p)),w=Math.floor((r+s)/p),b=Math.max(0,Math.floor(o/m)),v=Math.floor((o+s)/m);for(let y=b;y<=v;y++)for(let S=g;S<=w;S++){let k=or({cache:c,tileRow:y,tileCol:S,colSpan:u,rowSpan:f});k&&e.drawImage(k,0,0,k.width,k.height,S*p,y*m,k.width*h,k.height*d)}e.resetTransform(),e.imageSmoothingEnabled=!0}function Ue(e){if(e)try{if("toDataURL"in e&&typeof e.toDataURL=="function")return e.toDataURL("image/png");if(typeof document>"u")return;let t=document.createElement("canvas");t.width=e.width,t.height=e.height;let n=t.getContext("2d");return typeof n?.drawImage!="function"?void 0:(n.drawImage(e,0,0),t.toDataURL("image/png"))}catch{return}}var ir=64e6,$t=16384;function _t({model:e,theme:t,col0:n,row0:r,numCols:o,numRows:i}){if(o<=0||i<=0||typeof document>"u")return;let a=Ve(e,t),s=1,l=1;for(;Math.ceil(o/s)>$t;)s*=2;for(;Math.ceil(i/l)>$t;)l*=2;for(;Math.ceil(o/s)*Math.ceil(i/l)>ir;)o/s>=i/l?s*=2:l*=2;let c=Math.ceil(o/s),u=Math.ceil(i/l);return Ue(Xe(c,u,f=>{Ne({spec:a.spec,col0:n,row0:r,width:c,height:u,colSpan:s,rowSpan:l,out:f})}))}function Gt({model:e,theme:t,height:n}){let r=Ve(e,t),{numColumns:o,numRows:i}=r;if(!(o<=0||i<=0)){if(r.thumbnail?.height!==n){let a=Math.max(1,Math.ceil(o/Qn)),s=Math.max(1,Math.ceil(i/n)),l=Math.ceil(o/a),c=Math.ceil(i/s);r.thumbnail={height:n,canvas:Xe(l,c,u=>{Ne({spec:r.spec,col0:0,row0:0,width:l,height:c,colStep:a,rowStep:s,out:u})})}}return r.thumbnail.canvas}}function Xt(e){let{scrollX:t,minimapHeight:n,totalWidth:r,msaCanvasWidth:o}=e,i=r>0?o/r:0,a=-t*i,s=Math.min(o,Math.max(o*i,20)),l=n-12,c=`${a+s},0 ${a},0 0,${l} ${o},${l}`;return{unit:i,s:a,w:s,polygonHeight:l,polygonPoints:c}}function je({model:e,theme:t}){let{msaCanvasWidth:n}=e,{s:r,w:o,polygonPoints:i}=Xt(e),a=Ue(Gt({model:e,theme:t,height:12}));return j.default.createElement(j.default.Fragment,null,a?j.default.createElement("image",{href:a,x:0,y:0,width:n,height:12,preserveAspectRatio:"none"}):null,j.default.createElement("rect",{x:0,y:0,width:n,height:12,stroke:t.palette.text.secondary,fill:"none"}),j.default.createElement("rect",{x:Math.max(0,r),y:0,width:o,height:12,fill:Se,stroke:t.palette.text.secondary}),j.default.createElement("g",{transform:`translate(0 ${12})`},j.default.createElement("polygon",{fill:Se,points:i})))}for(Kt={grad:.9,turn:360,rad:360/(2*Math.PI)},$=function(e){return typeof e=="string"?e.length>0:typeof e=="number"},A=function(e,t,n){return t===void 0&&(t=0),n===void 0&&(n=Math.pow(10,t)),Math.round(n*e)/n+0},z=function(e,t,n){return t===void 0&&(t=0),n===void 0&&(n=1),e>n?n:e>t?e:t},et=function(e){return(e=isFinite(e)?e%360:0)<0?e+360:e},Re=function(e,t){return t===void 0&&(t=0),A(e,t)%360},Je=function(e){return{r:z(e.r,0,255),g:z(e.g,0,255),b:z(e.b,0,255),a:z(e.a)}},Ce=function(e){return{r:A(e.r),g:A(e.g),b:A(e.b),a:A(e.a,3)}},Qt=/^#([0-9a-f]{3,8})$/i,K=function(e,t){var n=e.charCodeAt(t);return(15&n)+9*(n>>6)},de=function(e,t){return K(e,t)<<4|K(e,t+1)},Ke=[],he=0;he<256;he++)Ke.push((he<16?"0":"")+he.toString(16));var Kt,$,A,z,et,Re,Je,Ce,Qt,K,de,Ke,he,Me=function(e){return Ke[z(e,0,255)]},Yt=function(e){var t=e.r,n=e.g,r=e.b,o=e.a,i=Math.max(t,n,r),a=i-Math.min(t,n,r),s=a?i===t?(n-r)/a:i===n?2+(r-t)/a:4+(t-n)/a:0;return{h:60*(s<0?s+6:s),s:i?a/i*100:0,v:i/255*100,a:o}},en=function(e){var t=e.h,n=e.s,r=e.v,o=e.a;t=t/360*6,n/=100,r/=100;var i=Math.floor(t),a=r*(1-n),s=r*(1-(t-i)*n),l=r*(1-(1-t+i)*n),c=i%6;return{r:255*[r,s,a,a,l,r][c],g:255*[l,r,r,s,a,a][c],b:255*[a,a,l,r,r,s][c],a:o}},Vt=function(e){return{h:et(e.h),s:z(e.s,0,100),l:z(e.l,0,100),a:z(e.a)}},Ut=function(e){return{h:Re(e.h),s:A(e.s),l:A(e.l),a:A(e.a,3)}},jt=function(e){return en((n=(t=e).s,{h:t.h,s:(n*=((r=t.l)<50?r:100-r)/100)>0?2*n/(r+n)*100:0,v:r+n,a:t.a}));var t,n,r},re=function(e){return{h:(t=Yt(e)).h,s:(o=(200-(n=t.s))*(r=t.v)/100)>0&&o<200?n*r/100/(o<=100?o:200-o)*100:0,l:o/2,a:t.a};var t,n,r,o},ar=/^hsla?\(\s*([+-]?(?:\d*\.\d+|\d+))(deg|rad|grad|turn)?\s*,\s*([+-]?(?:\d*\.\d+|\d+))%\s*,\s*([+-]?(?:\d*\.\d+|\d+))%\s*(?:,\s*([+-]?(?:\d*\.\d+|\d+))(%)?\s*)?\)$/i,sr=/^hsla?\(\s*([+-]?(?:\d*\.\d+|\d+))(deg|rad|grad|turn)?\s+([+-]?(?:\d*\.\d+|\d+))%\s+([+-]?(?:\d*\.\d+|\d+))%\s*(?:\/\s*([+-]?(?:\d*\.\d+|\d+))(%)?\s*)?\)$/i,lr=/^rgba?\(\s*([+-]?(?:\d*\.\d+|\d+))(%)?\s*,\s*([+-]?(?:\d*\.\d+|\d+))(%)?\s*,\s*([+-]?(?:\d*\.\d+|\d+))(%)?\s*(?:,\s*([+-]?(?:\d*\.\d+|\d+))(%)?\s*)?\)$/i,cr=/^rgba?\(\s*([+-]?(?:\d*\.\d+|\d+))(%)?\s+([+-]?(?:\d*\.\d+|\d+))(%)?\s+([+-]?(?:\d*\.\d+|\d+))(%)?\s*(?:\/\s*([+-]?(?:\d*\.\d+|\d+))(%)?\s*)?\)$/i,Qe={string:[[function(e){if(!Qt.test(e))return null;var t=e.length;return t<=5?{r:17*K(e,1),g:17*K(e,2),b:17*K(e,3),a:t===5?A(17*K(e,4)/255,2):1}:t===7||t===9?{r:de(e,1),g:de(e,3),b:de(e,5),a:t===9?A(de(e,7)/255,2):1}:null},"hex"],[function(e){var t=lr.exec(e)||cr.exec(e);return t?t[2]!==t[4]||t[4]!==t[6]?null:Je({r:Number(t[1])/(t[2]?100/255:1),g:Number(t[3])/(t[4]?100/255:1),b:Number(t[5])/(t[6]?100/255:1),a:t[7]===void 0?1:Number(t[7])/(t[8]?100:1)}):null},"rgb"],[function(e){var t=ar.exec(e)||sr.exec(e);if(!t)return null;var n,r,o=Vt({h:(n=t[1],r=t[2],r===void 0&&(r="deg"),Number(n)*(Kt[r]||1)),s:Number(t[3]),l:Number(t[4]),a:t[5]===void 0?1:Number(t[5])/(t[6]?100:1)});return jt(o)},"hsl"]],object:[[function(e){var t=e.r,n=e.g,r=e.b,o=e.a,i=o===void 0?1:o;return $(t)&&$(n)&&$(r)?Je({r:Number(t),g:Number(n),b:Number(r),a:Number(i)}):null},"rgb"],[function(e){var t=e.h,n=e.s,r=e.l,o=e.a,i=o===void 0?1:o;if(!$(t)||!$(n)||!$(r))return null;var a=Vt({h:Number(t),s:Number(n),l:Number(r),a:Number(i)});return jt(a)},"hsl"],[function(e){var t=e.h,n=e.s,r=e.v,o=e.a,i=o===void 0?1:o;if(!$(t)||!$(n)||!$(r))return null;var a=(function(s){return{h:et(s.h),s:z(s.s,0,100),v:z(s.v,0,100),a:z(s.a)}})({h:Number(t),s:Number(n),v:Number(r),a:Number(i)});return en(a)},"hsv"]]},qt=function(e,t){for(var n=0;n<t.length;n++){var r=t[n][0](e);if(r)return[r,t[n][1]]}return[null,void 0]},fr=function(e){return typeof e=="string"?qt(e.trim(),Qe.string):typeof e=="object"&&e!==null?qt(e,Qe.object):[null,void 0]};var qe=function(e,t){var n=re(e);return{h:n.h,s:z(n.s+100*t,0,100),l:n.l,a:n.a}},Ze=function(e){return(299*e.r+587*e.g+114*e.b)/1e3/255},Zt=function(e,t){var n=re(e);return{h:n.h,s:n.s,l:z(n.l+100*t,0,100),a:n.a}},Ye=(function(){function e(t){this.parsed=fr(t)[0],this.rgba=this.parsed||{r:0,g:0,b:0,a:1}}return e.prototype.isValid=function(){return this.parsed!==null},e.prototype.brightness=function(){return A(Ze(this.rgba),2)},e.prototype.isDark=function(){return Ze(this.rgba)<.5},e.prototype.isLight=function(){return Ze(this.rgba)>=.5},e.prototype.toHex=function(){return t=Ce(this.rgba),n=t.r,r=t.g,o=t.b,a=(i=t.a)<1?Me(A(255*i)):"","#"+Me(n)+Me(r)+Me(o)+a;var t,n,r,o,i,a},e.prototype.toRgb=function(){return Ce(this.rgba)},e.prototype.toRgbString=function(){return t=Ce(this.rgba),n=t.r,r=t.g,o=t.b,(i=t.a)<1?"rgba("+n+", "+r+", "+o+", "+i+")":"rgb("+n+", "+r+", "+o+")";var t,n,r,o,i},e.prototype.toHsl=function(){return Ut(re(this.rgba))},e.prototype.toHslString=function(){return t=Ut(re(this.rgba)),n=t.h,r=t.s,o=t.l,(i=t.a)<1?"hsla("+n+", "+r+"%, "+o+"%, "+i+")":"hsl("+n+", "+r+"%, "+o+"%)";var t,n,r,o,i},e.prototype.toHsv=function(){return t=Yt(this.rgba),{h:Re(t.h),s:A(t.s),v:A(t.v),a:A(t.a,3)};var t},e.prototype.invert=function(){return E({r:255-(t=this.rgba).r,g:255-t.g,b:255-t.b,a:t.a});var t},e.prototype.saturate=function(t){return t===void 0&&(t=.1),E(qe(this.rgba,t))},e.prototype.desaturate=function(t){return t===void 0&&(t=.1),E(qe(this.rgba,-t))},e.prototype.grayscale=function(){return E(qe(this.rgba,-1))},e.prototype.lighten=function(t){return t===void 0&&(t=.1),E(Zt(this.rgba,t))},e.prototype.darken=function(t){return t===void 0&&(t=.1),E(Zt(this.rgba,-t))},e.prototype.rotate=function(t){return t===void 0&&(t=15),this.hue(re(this.rgba).h+t)},e.prototype.alpha=function(t){return typeof t=="number"?E({r:(n=this.rgba).r,g:n.g,b:n.b,a:t}):A(this.rgba.a,3);var n},e.prototype.hue=function(t){var n=re(this.rgba);return typeof t=="number"?E({h:t,s:n.s,l:n.l,a:n.a}):Re(n.h)},e.prototype.isEqual=function(t){return this.toHex()===E(t).toHex()},e})(),E=function(e){return e instanceof Ye?e:new Ye(e)},Jt=[],tn=function(e){e.forEach(function(t){Jt.indexOf(t)<0&&(t(Ye,Qe),Jt.push(t))})};var tt=function(e){var t=e/255;return t<.04045?t/12.92:Math.pow((t+.055)/1.055,2.4)},nt=function(e){return .2126*tt(e.r)+.7152*tt(e.g)+.0722*tt(e.b)},nn=function(e){e.prototype.luminance=function(){return t=nt(this.rgba),(n=2)===void 0&&(n=0),r===void 0&&(r=Math.pow(10,n)),Math.round(r*t)/r+0;var t,n,r},e.prototype.contrast=function(t){t===void 0&&(t="#FFF");var n,r,o,i,a,s,l,c=t instanceof e?t:new e(t);return i=this.rgba,a=c.toRgb(),s=nt(i),l=nt(a),n=s>l?(s+.05)/(l+.05):(l+.05)/(s+.05),(r=2)===void 0&&(r=0),o===void 0&&(o=Math.pow(10,r)),Math.floor(o*n)/o+0},e.prototype.isReadable=function(t,n){return t===void 0&&(t="#FFF"),n===void 0&&(n={}),this.contrast(t)>=(s=(a=(r=n).size)===void 0?"normal":a,(i=(o=r.level)===void 0?"AA":o)==="AAA"&&s==="normal"?7:i==="AA"&&s==="large"?3:4.5);var r,o,i,a,s}};var rn=function(e,t){var n={white:"#ffffff",bisque:"#ffe4c4",blue:"#0000ff",cadetblue:"#5f9ea0",chartreuse:"#7fff00",chocolate:"#d2691e",coral:"#ff7f50",antiquewhite:"#faebd7",aqua:"#00ffff",azure:"#f0ffff",whitesmoke:"#f5f5f5",papayawhip:"#ffefd5",plum:"#dda0dd",blanchedalmond:"#ffebcd",black:"#000000",gold:"#ffd700",goldenrod:"#daa520",gainsboro:"#dcdcdc",cornsilk:"#fff8dc",cornflowerblue:"#6495ed",burlywood:"#deb887",aquamarine:"#7fffd4",beige:"#f5f5dc",crimson:"#dc143c",cyan:"#00ffff",darkblue:"#00008b",darkcyan:"#008b8b",darkgoldenrod:"#b8860b",darkkhaki:"#bdb76b",darkgray:"#a9a9a9",darkgreen:"#006400",darkgrey:"#a9a9a9",peachpuff:"#ffdab9",darkmagenta:"#8b008b",darkred:"#8b0000",darkorchid:"#9932cc",darkorange:"#ff8c00",darkslateblue:"#483d8b",gray:"#808080",darkslategray:"#2f4f4f",darkslategrey:"#2f4f4f",deeppink:"#ff1493",deepskyblue:"#00bfff",wheat:"#f5deb3",firebrick:"#b22222",floralwhite:"#fffaf0",ghostwhite:"#f8f8ff",darkviolet:"#9400d3",magenta:"#ff00ff",green:"#008000",dodgerblue:"#1e90ff",grey:"#808080",honeydew:"#f0fff0",hotpink:"#ff69b4",blueviolet:"#8a2be2",forestgreen:"#228b22",lawngreen:"#7cfc00",indianred:"#cd5c5c",indigo:"#4b0082",fuchsia:"#ff00ff",brown:"#a52a2a",maroon:"#800000",mediumblue:"#0000cd",lightcoral:"#f08080",darkturquoise:"#00ced1",lightcyan:"#e0ffff",ivory:"#fffff0",lightyellow:"#ffffe0",lightsalmon:"#ffa07a",lightseagreen:"#20b2aa",linen:"#faf0e6",mediumaquamarine:"#66cdaa",lemonchiffon:"#fffacd",lime:"#00ff00",khaki:"#f0e68c",mediumseagreen:"#3cb371",limegreen:"#32cd32",mediumspringgreen:"#00fa9a",lightskyblue:"#87cefa",lightblue:"#add8e6",midnightblue:"#191970",lightpink:"#ffb6c1",mistyrose:"#ffe4e1",moccasin:"#ffe4b5",mintcream:"#f5fffa",lightslategray:"#778899",lightslategrey:"#778899",navajowhite:"#ffdead",navy:"#000080",mediumvioletred:"#c71585",powderblue:"#b0e0e6",palegoldenrod:"#eee8aa",oldlace:"#fdf5e6",paleturquoise:"#afeeee",mediumturquoise:"#48d1cc",mediumorchid:"#ba55d3",rebeccapurple:"#663399",lightsteelblue:"#b0c4de",mediumslateblue:"#7b68ee",thistle:"#d8bfd8",tan:"#d2b48c",orchid:"#da70d6",mediumpurple:"#9370db",purple:"#800080",pink:"#ffc0cb",skyblue:"#87ceeb",springgreen:"#00ff7f",palegreen:"#98fb98",red:"#ff0000",yellow:"#ffff00",slateblue:"#6a5acd",lavenderblush:"#fff0f5",peru:"#cd853f",palevioletred:"#db7093",violet:"#ee82ee",teal:"#008080",slategray:"#708090",slategrey:"#708090",aliceblue:"#f0f8ff",darkseagreen:"#8fbc8f",darkolivegreen:"#556b2f",greenyellow:"#adff2f",seagreen:"#2e8b57",seashell:"#fff5ee",tomato:"#ff6347",silver:"#c0c0c0",sienna:"#a0522d",lavender:"#e6e6fa",lightgreen:"#90ee90",orange:"#ffa500",orangered:"#ff4500",steelblue:"#4682b4",royalblue:"#4169e1",turquoise:"#40e0d0",yellowgreen:"#9acd32",salmon:"#fa8072",saddlebrown:"#8b4513",sandybrown:"#f4a460",rosybrown:"#bc8f8f",darksalmon:"#e9967a",lightgoldenrodyellow:"#fafad2",snow:"#fffafa",lightgrey:"#d3d3d3",lightgray:"#d3d3d3",dimgray:"#696969",dimgrey:"#696969",olivedrab:"#6b8e23",olive:"#808000"},r={};for(var o in n)r[n[o]]=o;var i={};e.prototype.toName=function(a){if(!(this.rgba.a||this.rgba.r||this.rgba.g||this.rgba.b))return"transparent";var s,l,c=r[this.toHex()];if(c)return c;if(a?.closest){var u=this.toRgb(),f=1/0,h="black";if(!i.length)for(var d in n)i[d]=new e(n[d]).toRgb();for(var p in n){var m=(s=u,l=i[p],Math.pow(s.r-l.r,2)+Math.pow(s.g-l.g,2)+Math.pow(s.b-l.b,2));m<f&&(f=m,h=p)}return h}},t.string.push([function(a){var s=a.toLowerCase(),l=s==="transparent"?"#0000":n[s];return l?new e(l).toRgb():null},"name"])};tn([rn,nn]);var on=new Map;function sn(e,t){let n=`${e}|${t}`,r=on.get(n);if(r!==void 0)return r;let o=E(e);if(!o.isReadable(t)){let a=E(t).luminance()<.5;for(let s=0;s<40&&!o.isReadable(t);s++)o=a?o.lighten(.05):o.darken(.05)}let i=o.toHex();return on.set(n,i),i}function Ao(e,t){let n=E(e);return n.alpha()===1?n.alpha(t).toRgbString():e}function ln(e){return E(e).darken(.1).toHex()}function Ho(e,t){return Object.fromEntries(Object.entries(e).map(t))}var an=new WeakMap;function q(e){let t=an.get(e);t||(t=new Map,an.set(e,t));let n=e.palette.text.primary;return r=>{if(!r)return n;let o=t.get(r);if(o!==void 0)return o;let i=e.palette.getContrastText(E(r).toHex());return t.set(r,i),i}}function zo(e,t){if(e.length===0)return t;let n=new Set(e);return t.filter((r,o)=>!n.has(o))}function Fo(e,t){if(e.length===0)return t;let n=[],r=0;for(let o of e)o>r&&n.push(t.slice(r,o)),r=o+1;return r<t.length&&n.push(t.slice(r)),n.join("")}function Bo(e,t){let n=[],r=e.length,o=0,i=0,a=-1,s=[];for(let l=0;l<t.length;l++)i<r&&e[i]===l?(t.charCodeAt(l)-45>>>0<=1||(a===o?s.push(t[l]):(s.length>0&&n.push({pos:a,letters:s.join("")}),a=o,s=[t[l]])),i++):o++;return s.length>0&&n.push({pos:a,letters:s.join("")}),n}function Oo(e){return e.end-e.start}function Le(e,t){let n=[];for(let r of e){let o=t.get(r.data.name);o&&o.length>0&&n.push({y:r.x,bands:o})}return n}function ur({rows:e,layout:t,xOf:n,colors:r,labelOf:o,labelDrawn:i,measureText:a,xMin:s,xMax:l}){let c=[];for(let{y:u,bands:f}of e){let h=t.height(f[0].laneCount),d=t.headLength(h),p=t.headRise?.(h)??0,m=o!==void 0&&h>=vt,g=Math.min(h-2,11),w=[],b=[],v=[];for(let y of f){let[S,k]=n(y),T=k-S;if(k<s||S>l)continue;let M=t.top(u,y.lane,h),{fill:C,stroke:R}=r.get(y.annotation),{strand:B}=y.annotation,N=B===void 0?0:Math.min(d,T);w.push(B===void 0?{band:y,fill:C,stroke:R,box:{x:S,y:M,w:T,h}}:{band:y,fill:C,stroke:R,outline:hr({x:S,t:M,w:T,h,head:N,rise:p,strand:B})}),m&&v.push({band:y,xStart:S,w:T,t:M,head:N,fill:C})}for(let{band:y,xStart:S,w:k,t:T,head:M,fill:C}of v){let R=o(y);R!==void 0&&a(R,g)+2<=k-M/2&&(i?.(y),b.push({text:R,x:S+k/2,y:T+h/2,fill:C}))}c.push({shapes:w,labels:b,fontSize:g})}return c}function Ee({ctx:e,contrastText:t,...n}){let r="",o=a=>{let s=`${a}px sans-serif`;s!==r&&(e.font=s,r=s)},i=ur({...n,measureText:(a,s)=>(o(s),e.measureText(a).width)});for(let{shapes:a,labels:s,fontSize:l}of i){for(let{fill:c,stroke:u,box:f,outline:h}of a)if(e.fillStyle=c,e.strokeStyle=u,f)e.fillRect(f.x,f.y,f.w,f.h),e.strokeRect(f.x,f.y,f.w,f.h);else if(h){e.beginPath(),e.moveTo(...h[0]);for(let d=1;d<h.length;d++)e.lineTo(...h[d]);e.closePath(),e.fill(),e.stroke()}if(s.length>0){o(l),e.textAlign="center",e.textBaseline="middle";for(let{text:c,x:u,y:f,fill:h}of s)e.fillStyle=t(h),e.fillText(c,u,f)}}}function hr({x:e,t,w:n,h:r,head:o,rise:i,strand:a}){let s=a>0?e+n:e,l=a>0?e:e+n,c=a>0?s-o:s+o,u=t+r,f=t-i,h=(f+u)/2;return o>=n?[[l,f],[s,h],[l,u]]:[[l,t],[c,t],...i>0?[[c,f]]:[],[s,h],[c,u],[l,u]]}function cn({model:e,theme:t,offsetX:n,offsetY:r,ctx:o,highResScaleFactorOverride:i,blockSizeXOverride:a,blockSizeYOverride:s}){let{blockSize:l,rowHeight:c,highResScaleFactor:u,actuallyShowDomains:f}=e;if(!f)return;let h=i??u,d=a??l,p=s??l;o.resetTransform(),o.scale(h,h),o.translate(-n,c/2-r),Ee({ctx:o,...gr(e,I({model:e,offsetY:r,blockSizeY:p})),contrastText:q(t),xMin:n,xMax:n+d})}function gr(e,t){let{rowHeight:n,subFeatureRows:r,colWidth:o,featureColors:i,featureLabels:a,segmentLabels:s,showMsaLetters:l,domainUnderline:c,domainBands:u}=e,f=c?Math.min(3,n):n,d=!a&&!l&&!r?new Set:void 0;return{rows:Le(t,u),layout:{height:p=>r?Math.min(4,n/p):f,top:(p,m,g)=>p-n+(r?m*g:c?n-g:0),headLength:p=>c?n/2:p,headRise:p=>c?Math.max(0,n*.4-p):0},xOf:p=>[p.startCol*o,p.endCol*o],colors:i,labelOf:p=>a?.get(p.annotation)??(d&&!d.has(p.annotation.accession)?s.get(p.annotation.accession):void 0),labelDrawn:p=>d?.add(p.annotation.accession)}}function H(e,t,n=!1){e.font=e.font.replace(/(?:bold )?[\d.]+px/,`${n?"bold ":""}${t}px`)}var Ae="rgba(0,128,255,0.3)",Vo="rgba(255,165,0,0.2)",Uo="rgba(255,165,0,0.15)",jo="rgba(0,0,0,0.15)",qo="rgba(128,128,0,0.2)",fn="rgba(25,118,210,0.22)",un="rgba(25,118,210,0.95)";var hn="rgba(255,140,0,0.28)",dn="rgba(210,90,0,0.95)",ot="rgba(255,140,0,0.18)",rt=11,He=3,it=rt+He*2;function at({ctx:e,theme:t,label:n,x:r,y:o,spanWidth:i,bounds:a,placed:s}){H(e,rt),e.textAlign="start";let l=e.measureText(n).width+He*2,c=it,u=l<=i?r:r+i+2;a&&(u=Math.max(a.min,Math.min(u,a.max-l)));let f=o;if(s){let h=d=>d.left<u+l&&d.right>u&&d.top<f+c&&d.bottom>f;for(;s.some(h);)f+=c;s.push({left:u,right:u+l,top:f,bottom:f+c})}e.fillStyle=t.palette.background.paper,e.fillRect(u,f,l,c),e.fillStyle=t.palette.text.primary,e.fillText(n,u+He,f+He+rt-2)}function mr({ctx:e,model:t,theme:n,offsetX:r,offsetY:o,width:i,height:a}){let{resolvedClades:s,resolvedHighlights:l,rowTints:c,colWidth:u,rowHeight:f}=t,h=[];e.lineWidth=2;let d=Math.max(0,Math.floor(o/f)),p=Math.ceil((o+a)/f),m=g=>{e.fillRect(0,g*f-o,i,f)};for(let{rows:g,color:w,mark:b}of s)b==="highlight"&&g[1]>=d&&g[0]<=p&&(e.fillStyle=w,e.fillRect(0,g[0]*f-o,i,(g[1]-g[0]+1)*f));if(c)for(let g=d;g<=Math.min(p,c.length-1);g++){let w=c[g];w&&(e.fillStyle=w,m(g))}for(let{rowIndices:g,color:w}of l){e.fillStyle=w??ot;for(let b of g)b>=d&&b<=p&&m(b)}for(let{startCol:g,endCol:w,label:b,color:v}of l){if(g===void 0||w===void 0)continue;let y=g*u-r,S=(w-g+1)*u;e.fillStyle=v??hn,e.fillRect(y,0,S,a),e.strokeStyle=v??dn,e.strokeRect(y,0,S,a),b&&at({ctx:e,theme:n,label:b,x:y,y:0,spanWidth:S,bounds:{min:0,max:i},placed:h})}}function Qo({ctx:e,model:t,offsetX:n,offsetY:r,height:o}){let{resolvedSelection:i,colWidth:a,rowHeight:s}=t;if(!i)return;let{startCol:l,endCol:c,rowRuns:u}=i,f=l*a-n,h=(c-l+1)*a;e.lineWidth=1;for(let[d,p]of u){let m=d*s-r,g=(p-d+1)*s;m<o&&m+g>0&&(e.fillStyle=fn,e.fillRect(f,m,h,g),e.strokeStyle=un,e.strokeRect(f,m,h,g))}}function pn({ctx:e,model:t,theme:n,offsetX:r,offsetY:o,width:i,height:a}){let{colWidth:s,rowHeight:l,referenceRowIndex:c,highlightedColumnRuns:u}=t;c!==void 0&&(e.fillStyle=Ae,e.fillRect(0,c*l-o,i,l)),e.lineWidth=2;for(let{start:f,end:h}of u){let d=f*s-r,p=(h-f+1)*s;e.fillStyle=hn,e.fillRect(d,0,p,a),e.strokeStyle=dn,e.strokeRect(d,0,p,a)}mr({ctx:e,model:t,theme:n,offsetX:r,offsetY:o,width:i,height:a})}function gn(e){let t=0,n=[];return r=>{if(!e)return;for(;t<e.length&&e[t].startCol<=r;)n.push(e[t]),t++;n.some(i=>i.endCol<=r)&&(n=n.filter(i=>i.endCol>r));let o;for(let i of n)(!o||i.stackIndex>o.stackIndex)&&(o=i);return o}}function W({offsetX:e,blockWidth:t,colWidth:n}){return{xStart:Math.max(0,Math.floor(e/n)),xEnd:Math.max(0,Math.ceil((e+t)/n))}}function bn({model:e,offsetX:t,offsetY:n,ctx:r,theme:o,highResScaleFactorOverride:i,blockSizeXOverride:a,blockSizeYOverride:s,rasterTiles:l}){let{colWidth:c,blockSize:u,rowHeight:f,fontSize:h,highResScaleFactor:d,actuallyShowDomains:p,bgColor:m}=e,g=i??d,w=a??u,b=s??u;r.resetTransform(),r.scale(g,g),r.translate(-t,f/2-n),r.textAlign="center",r.textBaseline="alphabetic",H(r,h,!m);let{xStart:v,xEnd:y}=W({offsetX:t,blockWidth:w,colWidth:c}),S=I({model:e,offsetY:n,blockSizeY:b}),{relativeTo:k,columns:T}=e,M=k?T.get(k)?.slice(v,y):null;br({model:e,ctx:r,theme:o,xStart:v,xEnd:y,visibleLeaves:S,referenceSeq:M,drawTiles:!p,rasterTiles:l}),wr({model:e,ctx:r,xStart:v,xEnd:y,visibleLeaves:S}),r.resetTransform()}function br({model:e,ctx:t,theme:n,visibleLeaves:r,xStart:o,xEnd:i,referenceSeq:a,drawTiles:s,rasterTiles:l}){let{bgColor:c,columns:u,colWidth:f,rowHeight:h,fontSize:d,relativeTo:p,showMsaLetters:m,subFeatureRows:g,domainUnderline:w,domainBandsByStart:b,featureColors:v}=e,y=s&&c,S=y&&!l;if(S||m){let k=ke(e),T=q(n),M=o*f,C=f/2,R=h/2-d/4,B=!s&&!g&&!w;for(let N=0,F=r.length;N<F;N++){let _=r[N],{name:G}=_.data,O=_.x,L=u.get(G)?.slice(o,i);if(L){let P=O-h,se=O-R,be=gn(B?b.get(G):void 0);for(let X=0,jn=L.length;X<jn;X++){let pt=o+X,Pe=L[X],gt=X*f+M,Ie=a&&G!==p&&Pe===a[X],we=k(pt,Pe);if(S&&(t.fillStyle=Ie?n.palette.action.hover:we||n.palette.background.default,t.fillRect(gt,P,f,h)),m){let mt=be(pt);t.fillStyle=mt?T(v.get(mt.annotation)?.fill):Ie?n.palette.text.primary:y?T(we):c||!we?n.palette.text.primary:sn(we,n.palette.background.default),t.fillText(Ie?".":Pe,gt+C,se)}}}}}}function wr({model:e,ctx:t,visibleLeaves:n,xStart:r,xEnd:o}){let{bgColor:i,hideGapsEffective:a}=e;a&&(t.lineWidth=1,t.strokeStyle="#f0f",mn({visibleLeaves:n,xStart:r,ctx:t,model:e,xEnd:o,offset:0}),t.strokeStyle=i?"#fff":"#000",mn({visibleLeaves:n,xStart:r,ctx:t,model:e,xEnd:o,offset:-1}))}function mn({model:e,ctx:t,visibleLeaves:n,xStart:r,xEnd:o,offset:i}){let{colWidth:s,rowHeight:l,insertionPositions:c}=e;for(let u of n){let{name:f}=u.data,h=c.get(f);if(h){let d=u.x;for(let{pos:p}of h)if(p>=r&&p<o){let m=p*s,g=d-l,w=d;t.beginPath(),t.moveTo(m+i,g+i);let b=g,v=!0;for(;b<w;){let y=Math.min(b+2,w),S=v?m+1:m-1;t.lineTo(S+i,y+i),b=y,v=!v}t.stroke()}}}}function wn(e){return e>St}var st=2;function yn({ctx:e,model:t,theme:n,panel:r,x:o,offsetY:i,blockSizeYOverride:a,highResScaleFactorOverride:s}){let{rowHeight:l,blockSize:c,highResScaleFactor:u}=t,f=a??c,h=s??u;e.resetTransform(),e.scale(h,h),e.translate(o,l/2-i),Ee({ctx:e,...yr(t,r,I({model:t,offsetY:i,blockSizeY:f})),contrastText:q(n),xMin:0,xMax:r.width})}function yr(e,t,n){let{rowHeight:r}=e;return{rows:Le(n,t.spans),layout:{height:o=>Math.max(1,r/o-st),top:(o,i,a)=>o-r+i*(a+st)+st/2,headLength:o=>o},xOf:o=>[o.xStart,o.xEnd],colors:t.colors,labelOf:o=>t.labels?.get(o.annotation)}}function vn({ctx:e,model:t,panel:n,x:r,offsetY:o,blockSizeYOverride:i,highResScaleFactorOverride:a}){let{rowHeight:s,blockSize:l,highResScaleFactor:c}=t,u=i??l;e.resetTransform();let f=a??c;e.scale(f,f),e.translate(r,-o);for(let h of I({model:t,offsetY:o,blockSizeY:u})){let d=n.colors.get(h.data.name);d&&(e.fillStyle=d,e.fillRect(0,h.x-s/2,n.width,s))}}function vr({panel:e,...t}){e.kind==="features"?yn({panel:e,...t}):vn({panel:e,...t})}function xn({model:e,...t}){for(let n of e.resolvedRowPanels)vr({model:e,panel:n,x:n.offsetX,...t})}var oe=new Uint8Array(128).fill(30);for(let e=65;e<=90;e++)oe[e]=e-65+1;for(let e=97;e<=122;e++)oe[e]=e-97+1;oe[45]=27;oe[46]=28;oe[42]=29;var Q=Array.from({length:32},(e,t)=>t>=1&&t<=26?String.fromCharCode(65+t-1):"");Q[27]="-";Q[28]=".";Q[29]="*";Q[30]="?";function ze(e){return e<128?oe[e]:30}function Sn(e){return e===27||e===28}var lt=class{numColumns;counts;totals;slotTotals=new Uint32Array(32);constructor(t){this.numColumns=t,this.counts=new Uint32Array(t*32),this.totals=new Uint32Array(t)}addRow(t){let{counts:n,totals:r,slotTotals:o,numColumns:i}=this,a=Math.min(t.length,i);for(let s=0;s<a;s++){let l=ze(t.charCodeAt(s));n[s*32+l]++,r[s]++,o[l]++}for(let s=a;s<i;s++)n[s*32+27]++,r[s]++;o[27]+=i-a}add(t,n){let r=ze(n.charCodeAt(0));this.counts[t*32+r]++,this.totals[t]++,this.slotTotals[r]++}total(t){return this.totals[t]??0}count(t,n){return this.counts[t*32+ze(n.charCodeAt(0))]??0}gapCount(t){let n=t*32;return(this.counts[n+27]??0)+(this.counts[n+28]??0)}forEachResidue(t,n){let{counts:r}=this,o=t*32;for(let i=1;i<32;i++){let a=r[o+i];a>0&&!Sn(i)&&n(i,a)}}entropy(t){let n=this.total(t)-this.gapCount(t);if(n===0)return 0;let r=0;return this.forEachResidue(t,(o,i)=>{let a=i/n;r-=a*Math.log2(a)}),r}residueEntries(t){let n=[];return this.forEachResidue(t,(r,o)=>{n.push([Q[r],o])}),n}get lettersPresent(){let t=new Set;for(let n=1;n<32;n++)this.slotTotals[n]>0&&!Sn(n)&&t.add(Q[n]);return t}};function kn(e){return Q[e]}function vi(e){return ze(e.charCodeAt(0))}var xi=32;function Si(e,t=e.reduce((n,r)=>Math.max(n,r.length),0)){let n=new lt(t);for(let r of e)n.addRow(r);return n}function Mi(e){return Math.log2(e==="amino"?20:4)}function Tn(e,t,n){let r=e.total(t),o=r-e.gapCount(t);if(o===0)return[];let i=Math.max(0,n-e.entropy(t))*(o/r);if(i===0)return[];let a=[];return e.forEachResidue(t,(s,l)=>{a.push({letter:kn(s),bits:l/o*i})}),a.sort((s,l)=>s.bits-l.bits||s.letter.localeCompare(l.letter)),a}function xr({ctx:e,values:t,color:n,colWidth:r,trackHeight:o,offsetX:i,blockSize:a}){let{xStart:s,xEnd:l}=W({offsetX:i,blockWidth:a,colWidth:r});e.fillStyle=n;for(let c=s;c<l&&c<t.length;c++){let f=t[c]*o,h=c*r;e.fillRect(h,o-f,r,f)}}function Sr(e,t){let n=e.columnTrackContent.get(t)?.values;return n||(t==="property-conservation"?e.propertyConservation:e.conservation)}function kr({ctx:e,arcs:t,color:n,colWidth:r,trackHeight:o,offsetX:i,blockSize:a}){if(!t?.length)return;let{xStart:s,xEnd:l}=W({offsetX:i,blockWidth:a,colWidth:r}),c=1;for(let f of t)c=Math.max(c,f.end-f.start);let u=o-1;e.lineWidth=1;for(let f of t){if(f.end<s||f.start>l)continue;let h=(f.start+.5)*r,d=(f.end+.5)*r,p=u*Math.sqrt((f.end-f.start)/c);e.strokeStyle=f.color??n,e.beginPath(),e.moveTo(h,o),e.quadraticCurveTo((h+d)/2,o-2*p,d,o),e.stroke()}}function Tr({ctx:e,data:t,colorScheme:n,contrastText:r,bgColor:o,drawLetters:i,colWidth:a,rowHeight:s,offsetX:l,blockSize:c}){let{xStart:u,xEnd:f}=W({offsetX:l,blockWidth:c,colWidth:a}),h=t?.slice(u,f);for(let d=0;h&&d<h.length;d++){let p=h[d],m=p.toUpperCase(),g=o?n[m]:void 0,w=(u+d)*a;g&&(e.fillStyle=g,e.fillRect(w,0,a,s)),i&&(e.fillStyle=r(g),e.fillText(p,w+a/2,s/2))}}function Mr(e,t=55){let n=1,r=[1,2,5];for(let o=0;n*e<t;o++)n=r[o%3]*10**Math.floor(o/3);return n}function Cr(e,t,n){let r=Mr(n),o=r>1&&e<=0&&t>0?[0]:[],i=Math.max(1,Math.ceil((e+1)/r))*r;for(let a=i;a<=t;a+=r)o.push(a-1);return o}var Rr=10,Mn=4;function Lr({ctx:e,numColumns:t,label:n,textColor:r,colWidth:o,trackHeight:i,offsetX:a,blockSize:s}){let{xStart:l,xEnd:c}=W({offsetX:a,blockWidth:s,colWidth:o}),u=Math.min(c,t);H(e,Rr),e.textAlign="center",e.textBaseline="alphabetic",e.fillStyle=r,e.strokeStyle=r,e.lineWidth=1;for(let f of Cr(l,u,o)){let h=n(f);if(h===void 0)continue;let d=(f+.5)*o;e.fillText(h,d,i-Mn-2),e.beginPath(),e.moveTo(d,i-Mn),e.lineTo(d,i),e.stroke()}}var Er=.72,Ar=3;function Hr({ctx:e,colStats:t,colorScheme:n,maxBits:r,textColor:o,colWidth:i,trackHeight:a,offsetX:s,blockSize:l}){let{xStart:c,xEnd:u}=W({offsetX:s,blockWidth:l,colWidth:i}),f=Math.min(u,t.numColumns),h=a;H(e,h),e.textAlign="left",e.textBaseline="alphabetic";let d=h*Er;for(let p=c;p<f;p++){let m=Tn(t,p,r);if(m.length===0)continue;let g=p*i,w=a;for(let{letter:b,bits:v}of m){let y=v/r*a;if(y<Ar){w-=y;continue}let S=e.measureText(b).width;if(S===0){w-=y;continue}e.fillStyle=n[b]??o,e.save(),e.translate(g,w),e.scale(i/S,y/d),e.fillText(b,0,0),e.restore(),w-=y}}}function zr({model:e,ctx:t,track:n,offsetX:r,offsetY:o=0,theme:i,blockSizeXOverride:a,highResScaleFactorOverride:s}){let{blockSize:l,colWidth:c,highResScaleFactor:u}=e,{id:f,kind:h,height:d,barColor:p,arcColor:m,arcs:g,customColorScheme:w,data:b}=n.model,v=a??l,y=s??u,S=i.palette.text.primary;switch(t.resetTransform(),t.scale(y,y),t.translate(-r,o),h){case"bar":{xr({ctx:t,values:Sr(e,f),color:p??"gray",colWidth:c,trackHeight:d,offsetX:r,blockSize:v});break}case"arc":{kr({ctx:t,arcs:g,color:m??i.palette.text.primary,colWidth:c,trackHeight:d,offsetX:r,blockSize:v});break}case"logo":{Hr({ctx:t,colStats:e.colStats,colorScheme:e.colorScheme,maxBits:e.alphabetMaxBits,textColor:S,colWidth:c,trackHeight:d,offsetX:r,blockSize:v});break}case"ruler":{let{relativeTo:k,numColumns:T}=e;Lr({ctx:t,numColumns:T,label:k?M=>{let C=e.visibleColToSeqPosOneBased(k,M);return C===void 0?void 0:`${C}`}:M=>`${M+1}`,textColor:S,colWidth:c,trackHeight:d,offsetX:r,blockSize:v});break}case"text":{let{bgColor:k,fontSize:T,rowHeight:M,showMsaLetters:C}=e;t.textAlign="center",t.textBaseline="middle",H(t,T),Tr({ctx:t,data:b,colorScheme:w??e.colorScheme,contrastText:q(i),bgColor:k,drawLetters:C,colWidth:c,rowHeight:M,offsetX:r,blockSize:v});break}}t.resetTransform()}function Cn({model:e,ctx:t,offsetX:n,theme:r,blockSizeXOverride:o,highResScaleFactorOverride:i}){let a=0;for(let s of e.turnedOnTracks)zr({model:e,ctx:t,track:s,offsetX:n,offsetY:a,theme:r,blockSizeXOverride:o,highResScaleFactorOverride:i}),a+=s.model.height}var pe=V(le(),1);function ct({bar:e,marginLeft:t,y:n,color:r}){return pe.default.createElement(pe.default.Fragment,null,pe.default.createElement("text",{x:t,y:n-9,fontSize:10,fill:r},e.label),pe.default.createElement("path",{d:`M${t} ${n-7} v6 h${e.px} v-6`,fill:"none",stroke:r}))}var ft;function Fr(){return ft===void 0&&(ft=typeof document>"u"?null:document.createElement("canvas").getContext("2d")),ft}var Br=.6;function ge(e,t){let n=Fr();return n?(H(n,t),n.measureText(e).width):e.length*t*Br}var Fe=3,Y=4,Or=140;function Rn(e){return e.mark==="bracket"||e.mark==="highlight"&&!!e.label}function Ln(e,t){return(e.rows[1]-e.rows[0]+1)*t}function Pr(e,t,n){return Ln(e,t)>=n}function En(e){return e.mark==="bracket"?Y+Fe+Y:Y}function Ii(e){let t=0;for(let n of e){if(!Rn(n))continue;let r=n.label?ge(n.label,xt):0;t=Math.max(t,En(n)+r+Y)}return Math.min(Or,Math.ceil(t))}function An(e){let{resolvedClades:t,cladeGutterWidth:n,rowHeight:r,effectiveTreeAreaWidth:o,fontSize:i}=e,a=o-n;return n===0?[]:t.flatMap((s,l)=>{let{label:c,markColor:u,rows:f}=s;if(!c||!Rn(s))return[];let h=a+En(s);return[{key:`${f[0]}-${f[1]}-${l}`,label:c,color:u,left:h,top:f[0]*r,width:o-h-Y,height:Ln(s,r),horizontal:Pr(s,r,i)}]})}function ie(e,t,n){let r=e(t);if(r<=n)return{text:t,width:r};for(let o=Math.floor(t.length*n/r);o>0;o--){let i=t.slice(0,o).trimEnd()+"\u2026",a=e(i);if(a<=n)return{text:i,width:a}}return{text:"",width:0}}function ji(e,t){return wt(e,t)}var ut=class{parent;frame;data;depth;height;value;children;depthToLeaf=0;row=0;rowMin=0;rowMax=0;depthFraction=0;branchLength=0;collapsedBranchLength;constructor(t,n,r){this.parent=n,this.frame=r,this.data=t.data,this.depth=t.depth,this.height=t.height,this.value=t.value,this.children=t.children?[]:null}get pxPerBranchLength(){let{scale:t,rootToTipLength:n}=this.frame;return n?t.treeWidth/n:0}get x(){return this.row*this.frame.scale.rowHeight}get xMin(){return this.rowMin*this.frame.scale.rowHeight}get xMax(){return this.rowMax*this.frame.scale.rowHeight}get y(){return this.depthFraction*this.frame.scale.treeWidth}get len(){return this.branchLength*this.pxPerBranchLength}get collapsedTipXFar(){return this.collapsedBranchLength===void 0?void 0:this.collapsedBranchLength*this.pxPerBranchLength}};function qi(e,t){let n={scale:t,rootToTipLength:0},r=[],o=[],i=e.height,a=[{source:e,parent:null}];for(;a.length>0;){let{source:s,parent:l}=a.pop(),c=new ut(s,l,n);if(r.push(c),c.depthFraction=i===0?1:(s.depth-e.depth)/i,l&&(l.children.push(c),c.branchLength=l.branchLength+Math.max(s.data.length||0,0),n.rootToTipLength=Math.max(n.rootToTipLength,c.branchLength)),s._children&&(c.collapsedBranchLength=c.branchLength+Ir(s)),s.children)for(let u=s.children.length-1;u>=0;u--)a.push({source:s.children[u],parent:c});else c.row=o.length+.5,c.depthToLeaf=s.depthToLeaf??0,o.push(c)}for(let s=r.length-1;s>=0;s--){let l=r[s];if(l.children){let c=0,u=1/0,f=-1/0,h=0;for(let d of l.children)c+=d.row,u=Math.min(u,d.rowMin),f=Math.max(f,d.rowMax),h=Math.max(h,1+d.depthToLeaf);l.row=c/l.children.length,l.rowMin=u,l.rowMax=f,l.depthToLeaf=h}else l.rowMin=l.row,l.rowMax=l.row}return{root:r[0],leaves:o,rootToTipLength:n.rootToTipLength}}function Zi(e){e.children&&(ht(e),e._children=e.children,e.children=null)}function Ir(e){let t=e._children??e.children,n=0;if(t){let r=t.map(o=>({node:o,acc:Math.max(o.data.length??0,0)}));for(;r.length>0;){let{node:o,acc:i}=r.pop(),a=o.children??o._children;if(a?.length)for(let s of a)r.push({node:s,acc:i+Math.max(s.data.length??0,0)});else n=Math.max(n,i)}}return n}function ht(e){if(e.depthToLeaf===void 0){let t=ye(e);for(let n=t.length-1;n>=0;n--){let r=t[n];if(r.depthToLeaf===void 0){let o=0;if(r.children)for(let i of r.children)o=Math.max(o,1+i.depthToLeaf);r.depthToLeaf=o}}}return e.depthToLeaf}function $r(e){let t=new Map;for(let n of bt(e)){let{name:r}=n.data;t.set(r,t.has(r)?void 0:n)}return t}function Ji(e,t,n=$r(e)){let r;for(let o of t){let i=n.get(o);if(!i)return;if(!r){r=i;continue}for(;r.depth>i.depth;)r=r.parent;for(;i.depth>r.depth;)i=i.parent;for(;r!==i;)r=r.parent,i=i.parent}return r}function Hn(e,t,n){let r=e;for(;;){let o=r.children?.find(i=>i.xMin<=t&&i.xMax>=n);if(!o)return r;r=o}}var D=2.5,dt=D*2;function Z(e){return Math.max(e.rowHeight,it)}function ae(e,t,n,r){return e>t-r&&e<t+n+r}function Be(e,t,n,r,o){let i=t-r,a=t+n+r,s=[e];for(;s.length>0;){let l=s.pop();if(!(l.xMax<i||l.xMin>a)&&(o(l),l.children))for(let c of l.children)s.push(c)}}function zn(e,t){let{id:n,name:r}=e.data,o=r===n?t:r;return e.value===void 0?o:`${o} (${e.value} tips)`}function U(e,t,n,r){if(t)return e.len;if(r===0)return 0;let o=ht(e);return(r-o)/r*n}function Wr({offsetY:e,ctx:t,model:n,theme:r,tipX:o,maxDepthToLeaf:i,blockSizeYOverride:a}){let{hierarchy:s,showBranchLenEffective:l,blockSize:c,branchColors:u}=n,f=a??c,h=r.palette.text.primary;t.strokeStyle=h,Be(s,e,f,Z(n),d=>{let p=d.x,m=U(d,l,o,i);if(!(m===void 0||!d.children))for(let g of d.children){let w=g.x,b=U(g,l,o,i);if(b===void 0)continue;let v=Math.min(p,w),y=Math.max(p,w);e+f>=v&&y>=e&&(u&&(t.strokeStyle=u.get(g.data.id)??h),t.beginPath(),t.moveTo(m,p),t.lineTo(m,w),t.lineTo(b,w),t.stroke())}}),t.strokeStyle=h}function Dr({ctx:e,clickMap:t,offsetY:n,model:r,theme:o,tipX:i,maxDepthToLeaf:a,blockSizeYOverride:s,collapsedSet:l}){let{hierarchy:c,showBranchLenEffective:u,blockSize:f,rowHeight:h,fontSize:d,marginLeft:p,branchColors:m}=r;if(l.size===0)return;let g=s??f,w=Math.max(2,h*.42);Be(c,n,g,Z(r),b=>{let{id:v}=b.data;if(l.has(v)){let y=U(b,u,i,a),S=b.x,k=ae(S,n,g,Z(r)),T=u?b.collapsedTipXFar??i:i;if(y!==void 0&&k&&T>y){e.beginPath(),e.moveTo(y,S),e.lineTo(T,S-w),e.lineTo(T,S+w),e.closePath(),e.fillStyle=m?.get(v)??o.palette.action.disabled,e.fill(),e.strokeStyle=o.palette.text.primary,e.stroke();let M=b.value;M!==void 0&&h>=8&&(e.fillStyle=o.palette.text.primary,e.textAlign="left",e.fillText(`${M}`,T+3,S+d/4)),t?.insert({minX:y+p,maxX:T+p,minY:S-w,maxY:S+w,branch:!0,id:v,name:zn(b,"Collapsed clade")})}}})}function Nr({ctx:e,theme:t,clickMap:n,offsetY:r,model:o,tipX:i,maxDepthToLeaf:a,blockSizeYOverride:s,collapsedSet:l,draw:c}){let{hierarchy:u,showBranchLenEffective:f,blockSize:h,marginLeft:d}=o,p=s??h;Be(u,r,p,Z(o),m=>{let g=U(m,f,i,a);if(g===void 0)return;let{data:w}=m,b=m.x,{id:v}=w;if(m.height>=1&&ae(b,r,p,Z(o))){let y=l.has(v);c&&(e.strokeStyle=t.palette.text.primary,e.fillStyle=y?t.palette.text.primary:t.palette.background.default,e.beginPath(),e.arc(g,b,D,0,2*Math.PI),e.fill(),e.stroke()),y||n?.insert({minX:g-D+d,maxX:g-D+dt+d,minY:b-D,maxY:b-D+dt,branch:!0,id:v,name:zn(m,"Clade")})}})}function _r({ctx:e,theme:t,offsetY:n,model:r,tipX:o,maxDepthToLeaf:i,blockSizeYOverride:a}){let{hierarchy:s,showBranchLenEffective:l,blockSize:c,fontSize:u}=r,f=a??c,h=Z(r);H(e,Math.max(6,u-3)),e.fillStyle=t.palette.text.primary,e.textAlign="right",Be(s,n,f,h,d=>{let{id:p,name:m}=d.data;if(d.height<1||m===p)return;let g=U(d,l,o,i),w=d.x;g!==void 0&&ae(w,n,f,h)&&e.fillText(m,g-D-1,w-D-1)}),e.textAlign="start",H(e,u)}function Gr({theme:e,model:t,offsetY:n,ctx:r,clickMap:o,tipX:i,maxDepthToLeaf:a,blockSizeYOverride:s,collapsedSet:l}){let{fontSize:c,showBranchLenEffective:u,tipLabelColors:f,blockSize:h,labelsAlignRight:d,drawTree:p,treeAreaWidthMinusMargin:m,marginLeft:g,noTree:w}=t,b=p&&!w,v=s??h,y=I({model:t,offsetY:n,blockSizeY:v}),S=Z(t),k=r.measureText("M").width;d?(r.textAlign="right",r.setLineDash([1,3]),r.strokeStyle=e.palette.text.primary):r.textAlign="start";for(let T of y){let{data:{name:M,id:C}}=T,R=T.x,B=t.rowDataOf(M)?.genome||M;if(!(l.has(C)&&M===C)&&ae(R,n,v,S)){let F=R+c/4,_=b?U(T,u,i,a)??0:0,G=L=>ie(P=>r.measureText(P).width,B,L),O=L=>Math.max(L,c);if(r.fillStyle=f?.get(M)??e.palette.text.primary,d){let P=m-2,{text:se,width:be}=G(P-(b?_+D+2+2:0));b&&(r.beginPath(),r.moveTo(_+D+2,R),r.lineTo(P-2-be,R),r.stroke()),r.fillText(se,P,F);let X=P+g;o?.insert({minX:X-O(be),maxX:X,minY:F-k,maxY:F,name:M,label:B,id:C})}else{let L=b?_+dt:2,{text:P,width:se}=G(m-L);r.fillText(P,L,F),o?.insert({minX:L+g,maxX:L+O(se)+g,minY:F-k,maxY:F,name:M,label:B,id:C})}}}r.setLineDash([])}function Xr(e){let t=1/0;for(let n of e)n<t&&(t=n);return t}function Vr({ctx:e,model:t,offsetY:n,tipX:r,maxDepthToLeaf:o,blockSizeYOverride:i}){let{resolvedClades:a,hierarchy:s,showBranchLenEffective:l,rowHeight:c,effectiveTreeAreaWidth:u,marginLeft:f,blockSize:h}=t,d=i??h,p=u-f;for(let{rows:m,color:g,mark:w}of a){if(w!=="highlight")continue;let b=m[0]*c,v=(m[1]+1)*c;if(v<n||b>n+d)continue;let y=Hn(s,b+c/2,v-c/2),S=U(y,l,r,o)??0;e.fillStyle=g,e.fillRect(S,b,p-S,v-b)}}function Ur({ctx:e,model:t,theme:n,offsetY:r,blockSizeYOverride:o}){let{resolvedClades:i,cladeGutterWidth:a,rowHeight:s,effectiveTreeAreaWidth:l,marginLeft:c,blockSize:u}=t;if(a===0)return;let f=o??u,h=l-c-a+Y+Fe/2;e.lineWidth=Fe;for(let{rows:d,mark:p,markColor:m}of i){let g=d[0]*s+1,w=(d[1]+1)*s-1;p!=="bracket"||w<r||g>r+f||(e.strokeStyle=m??n.palette.text.primary,e.beginPath(),e.moveTo(h,g),e.lineTo(h,w),e.stroke())}e.lineWidth=1,e.strokeStyle=n.palette.text.primary}function jr({ctx:e,model:t,theme:n,offsetY:r,blockSizeYOverride:o}){let{resolvedHighlights:i,rowTints:a,referenceRowIndex:s,rowHeight:l,effectiveTreeAreaWidth:c,marginLeft:u,blockSize:f}=t,h=o??f,d=Z(t),p=[],m=g=>{e.fillRect(-u,g*l,c,l)};if(a){let g=Math.max(0,Math.floor((r-d)/l)),w=Math.min(a.length-1,Math.ceil((r+h+d)/l));for(let b=g;b<=w;b++){let v=a[b];v&&(e.fillStyle=v,m(b))}}s!==void 0&&(e.fillStyle=Ae,m(s));for(let{rowIndices:g,label:w,color:b}of i){e.fillStyle=b??ot;for(let y of g)ae(y*l+l/2,r,h,d)&&m(y);let v=Xr(g);w&&g.length&&ae(v*l,r,h,d)&&at({ctx:e,theme:n,label:w,x:-u+2,y:v*l,spanWidth:c,bounds:{min:-u,max:c-u},placed:p})}}function Fn({model:e,clickMap:t,ctx:n,offsetY:r,theme:o,highResScaleFactorOverride:i,blockSizeYOverride:a}){t?.clear();let{noTree:s,drawTree:l,drawNodeBubbles:c,drawNodeLabels:u,highResScaleFactor:f,fontSize:h,showTreeText:d,marginLeft:p,rowHeight:m}=e;n.resetTransform();let g=i??f;n.scale(g,g),n.translate(p,-r),H(n,h);let{maxDepthToLeaf:w,effectiveTreeWidth:b}=e,v=new Set(e.collapsed);Vr({ctx:n,model:e,offsetY:r,tipX:b,maxDepthToLeaf:w,blockSizeYOverride:a}),jr({ctx:n,model:e,theme:o,offsetY:r,blockSizeYOverride:a}),H(n,h),!s&&l&&(Wr({ctx:n,offsetY:r,model:e,theme:o,tipX:b,maxDepthToLeaf:w,blockSizeYOverride:a}),Dr({ctx:n,clickMap:t,offsetY:r,model:e,theme:o,tipX:b,maxDepthToLeaf:w,blockSizeYOverride:a,collapsedSet:v}),Nr({ctx:n,theme:o,offsetY:r,clickMap:t,model:e,tipX:b,maxDepthToLeaf:w,blockSizeYOverride:a,collapsedSet:v,draw:c}),u&&_r({ctx:n,theme:o,offsetY:r,model:e,tipX:b,maxDepthToLeaf:w,blockSizeYOverride:a})),d&&Gr({ctx:n,offsetY:r,model:e,clickMap:t,theme:o,tipX:b,maxDepthToLeaf:w,blockSizeYOverride:a,collapsedSet:v}),Ur({ctx:n,model:e,theme:o,offsetY:r,blockSizeYOverride:a}),t?.finish()}var Oe=1;function On(e,t){let n=t-Oe*2;return r=>Oe+r/e*n}function Pn({model:e,ctx:t,theme:n,width:r,height:o}){let i=e.treeOverviewLayout;if(!i)return;let{root:a,numTips:s,maxDepthToLeaf:l,showBranchLen:c}=i,u=r-Oe*2,f=On(s,o),h=d=>Oe+(U(d,c,1,l)??0)*u;for(let{rows:d,color:p}of e.treeOverviewClades)t.fillStyle=p,t.fillRect(0,f(d[0]),r,f(d[1]+1)-f(d[0]));t.strokeStyle=n.palette.text.primary,t.beginPath();for(let d of ye(a)){if(!d.children)continue;let p=h(d),m=f(d.x);for(let g of d.children){let w=h(g),b=f(g.x);Math.abs(w-p)<1&&Math.abs(b-m)<1||(t.moveTo(p,m),t.lineTo(p,b),t.lineTo(w,b))}}t.stroke()}function qr({model:e,ctx:t,color:n,rows:r,width:o,height:i}){let a=e.treeOverviewLayout;if(!a)return;let s=On(a.numTips,i),l=s(r[0]);t.strokeStyle=n,t.strokeRect(.5,l,o-1,Math.max(2,s(r[1]+1)-l))}function In(e){Pn(e);let t=e.model.treeOverviewFocusRows;t&&qr({...e,rows:t,color:e.theme.palette.text.primary})}var Bn=new WeakMap;function Zr({model:e,theme:t,width:n,height:r,scale:o}){return[e.data.tree,e.data.msa,e.currentAlignment,e.collapsed.join(","),JSON.stringify(e.clades),e.showBranchLen,n,r,o,t.palette.text.primary]}function Jr(e){return typeof e?.stroke=="function"}function ca({model:e,theme:t,width:n,height:r,scale:o}){let i=Zr({model:e,theme:t,width:n,height:r,scale:o}),a=Bn.get(e);if(a&&i.every((c,u)=>c===a.keys[u]))return a.canvas;let s=_e(Math.max(1,Math.round(n*o)),Math.max(1,Math.round(r*o)),Jr);s&&(s.ctx.scale(o,o),Pn({model:e,ctx:s.ctx,theme:t,width:n,height:r}));let l={keys:i,canvas:s?.canvas};return Bn.set(e,l),l.canvas}var _n=V(Wn(),1),Gn=V(Nn(),1);function Xn(e){let t=document.createElement("div"),n=(0,Gn.createRoot)(t),r;try{(0,_n.flushSync)(()=>{n.render(e)}),r=t.innerHTML}finally{n.unmount()}return r}var Kr=/<[a-zA-Z][^>]*>/g,Qr=/\b(fill|stroke|stop-color)="([^"]+)"/g;function Vn(e){return e.replaceAll(Kr,t=>t.replaceAll(Qr,(n,r,o)=>{if(!/^(rgba|hsl)/i.test(o))return n;let i=E(o);if(!i.isValid())return n;let a=i.alpha(),s=i.alpha(1).toHex();return a===1||t.includes(`${r}-opacity=`)?`${r}="${s}"`:`${r}="${s}" ${r}-opacity="${a}"`}))}async function Pa(e,t){if(await(0,Un.when)(()=>e.dataInitialized||!!e.error),e.error)throw e.error;let{Context:n}=await import("./dist-GXYZN4ZR.js"),r=new Map,o=Xn(x.default.createElement(Yr,{model:e,theme:t.theme,Context:n,layout:Lt(e,t),layers:r}));return Vn(o.replaceAll(/<g data-layer="([^"]+)"><\/g>/g,(i,a)=>{let s=r.get(a);return s?`<g id="${a}">${s.getSvg().innerHTML}</g>`:i})).replaceAll("&nbsp;","&#160;")}function Yr({model:e,theme:t,Context:n,layout:r,layers:o}){let{width:i,trackHeight:a,includeMinimap:s,legendWidth:l,topHeight:c}=r,{effectiveTreeAreaWidth:u,rowPanelsWidth:f}=e,{width:h,height:d}=Et(e,r),p=c,m={Context:n,model:e,theme:t,layout:r,layers:o},g=x.default.createElement(x.default.Fragment,null,a>0?x.default.createElement(so,{...m}):null,x.default.createElement("g",{transform:a>0?`translate(0 ${a})`:void 0},x.default.createElement(io,{...m})));return x.default.createElement("svg",{width:h,height:d,xmlns:"http://www.w3.org/2000/svg",xmlnsXlink:"http://www.w3.org/1999/xlink",viewBox:`0 0 ${h} ${d}`,fontFamily:"sans-serif"},x.default.createElement("rect",{width:"100%",height:"100%",fill:t.palette.background.default}),c>0?x.default.createElement(x.default.Fragment,null,s?x.default.createElement("g",{id:"minimap-panel",transform:`translate(${u+f} 0)`},x.default.createElement(je,{model:e,theme:t})):null,x.default.createElement(no,{model:e,theme:t,bandHeight:c}),e.showTreeOverview?x.default.createElement(eo,{model:e,theme:t,Context:n,layers:o}):null,x.default.createElement(to,{model:e,theme:t}),x.default.createElement("g",{transform:`translate(0 ${c})`},g)):g,l>0?x.default.createElement("g",{id:"legend-panel",transform:`translate(${i} ${p})`},x.default.createElement(oo,{model:e,theme:t,width:l})):null)}function eo({model:e,theme:t,Context:n,layers:r}){let{effectiveTreeAreaWidth:o,overviewHeight:i,id:a}=e,s=new n(o,i);return In({model:e,ctx:s,theme:t,width:o,height:i}),x.default.createElement(me,{panelId:"tree-overview",clipId:`tree-overview-${a}`,width:o,height:i,ctx:s,layers:r})}function to({model:e,theme:t}){let{marginLeft:n,treeScaleBar:r,treeOverviewHeight:o}=e;return r?x.default.createElement("g",{id:"tree-scalebar"},x.default.createElement(ct,{bar:r,marginLeft:n,y:o+kt,color:t.palette.text.primary})):null}function no({model:e,theme:t,bandHeight:n}){let{resolvedRowPanels:r,effectiveTreeAreaWidth:o,fontSize:i}=e,a=n-4;return r.length===0?null:x.default.createElement("g",{id:"rowpanel-headers"},r.map(s=>{let l=wn(s.width),c=l?i:Math.min(i,s.width),u=o+s.offsetX+s.width/2,f=l?u:u+c/3,h=l?s.width:a-ee;return c<5?null:x.default.createElement("text",{key:s.id,x:f,y:a,...l?{textAnchor:"middle"}:{transform:`rotate(-90 ${f} ${a})`},fontSize:c,fill:t.palette.text.primary},ie(d=>ge(d,c),s.header,h).text)}))}function ro({model:e,theme:t,offsetY:n}){let{fontSize:r}=e,o=An(e);return o.length===0?null:x.default.createElement("g",{id:"clade-labels"},o.map(i=>{let a=i.top-n,s=i.horizontal?i.left:i.left+r,l=i.horizontal?a+i.height/2+r/3:a+i.height;return x.default.createElement("text",{key:i.key,x:s,y:l,transform:i.horizontal?void 0:`rotate(-90 ${s} ${l})`,fontSize:r,fill:i.color??t.palette.text.primary},ie(c=>ge(c,r),i.label,i.horizontal?i.width:i.height).text)}))}function oo({model:e,theme:t,width:n}){let r=yt(e.legends),o=Rt(r),i=n-We-ee;return x.default.createElement("g",null,x.default.createElement("rect",{x:0,y:0,width:n-4,height:o,fill:t.palette.background.paper,stroke:t.palette.divider,rx:2}),r.map((a,s)=>{let l=ee+s*Tt;return x.default.createElement("g",{key:a.key},a.color?x.default.createElement("rect",{x:ee,y:l,width:ve,height:ve,fill:a.color,stroke:ln(a.color)}):null,x.default.createElement("text",{x:a.color?We:ee,y:l+ve-1,fontSize:Mt,fontWeight:a.color?void 0:"bold",fill:t.palette.text.primary},ie(c=>c.length*Ct,a.label,i).text))}))}function io({model:e,theme:t,layout:n,Context:r,layers:o}){let{contentHeight:i,offsetX:a,offsetY:s,msaAreaWidth:l}=n,{effectiveTreeAreaWidth:c,rowPanelsWidth:u,id:f}=e,h=new r(c,i);Fn({model:e,theme:t,ctx:h,offsetY:s,blockSizeYOverride:i,highResScaleFactorOverride:1});let d=u?new r(u,i):void 0;d&&xn({model:e,theme:t,ctx:d,offsetY:s,blockSizeYOverride:i,highResScaleFactorOverride:1});let p=ao({model:e,theme:t,layout:n}),m=new r(l,i);return cn({model:e,theme:t,ctx:m,offsetX:a,offsetY:s,blockSizeXOverride:l,blockSizeYOverride:i,highResScaleFactorOverride:1}),bn({model:e,theme:t,ctx:m,offsetX:a,offsetY:s,blockSizeXOverride:l,blockSizeYOverride:i,highResScaleFactorOverride:1,rasterTiles:!!p}),m.resetTransform(),pn({ctx:m,model:e,theme:t,offsetX:a,offsetY:s,width:l,height:i}),x.default.createElement(x.default.Fragment,null,x.default.createElement(me,{panelId:"tree-panel",clipId:`tree-${f}`,width:c,height:i,ctx:h,layers:o}),x.default.createElement(ro,{model:e,theme:t,offsetY:s}),d?x.default.createElement(me,{panelId:"rowpanels-panel",clipId:`rowpanels-${f}`,width:u,height:i,transform:`translate(${c} 0)`,ctx:d,layers:o}):null,x.default.createElement(me,{panelId:"msa-panel",clipId:`msa-${f}`,width:l,height:i,transform:`translate(${c+u} 0)`,ctx:m,layers:o,underlay:p}))}function ao({model:e,theme:t,layout:n}){let{contentHeight:r,offsetX:o,offsetY:i,msaAreaWidth:a}=n,{colWidth:s,rowHeight:l}=e;if(!Nt(e))return;let{xStart:c,xEnd:u}=W({offsetX:o,blockWidth:a,colWidth:s}),{yStart:f,yEnd:h}=De({model:e,offsetY:i,blockSizeY:r}),d=Math.min(u,e.numColumns)-c,p=Math.min(h,e.numRows)-f,m=_t({model:e,theme:t,col0:c,row0:f,numCols:d,numRows:p});return m?x.default.createElement("image",{href:m,x:c*s-o,y:f*l-i,width:d*s,height:p*l,imageRendering:"pixelated",preserveAspectRatio:"none"}):void 0}function so({model:e,theme:t,layout:n,Context:r,layers:o}){let{trackHeight:i,offsetX:a,msaAreaWidth:s}=n,{effectiveTreeAreaWidth:l,rowPanelsWidth:c,id:u}=e,f=new r(s,i);return Cn({model:e,ctx:f,theme:t,offsetX:a,blockSizeXOverride:s,highResScaleFactorOverride:1}),x.default.createElement(x.default.Fragment,null,x.default.createElement(lo,{model:e,theme:t}),x.default.createElement("g",{transform:`translate(${l+c} 0)`},x.default.createElement(me,{panelId:"tracks-panel",clipId:`tracks-${u}`,width:s,height:i,ctx:f,layers:o})))}function lo({model:e,theme:t}){let{turnedOnTracks:n,effectiveTreeAreaWidth:r,fontSize:o,drawLabels:i}=e;if(!i)return null;let a=n.map((s,l)=>{let{id:c,name:u,height:f}=s.model,h=Math.min(f,o),d=n.slice(0,l).reduce((p,m)=>p+m.model.height,0);return{id:c,name:u,size:h,baseline:d+h*.8}});return x.default.createElement(x.default.Fragment,null,a.map(({id:s,name:l,size:c,baseline:u})=>c<5?null:x.default.createElement("text",{key:s,x:r-4,y:u,fontSize:c,textAnchor:"end",fill:t.palette.text.primary},l)))}function me({panelId:e,clipId:t,width:n,height:r,transform:o,ctx:i,layers:a,underlay:s}){return a.set(e,i),x.default.createElement(x.default.Fragment,null,x.default.createElement("defs",null,x.default.createElement("clipPath",{id:t},x.default.createElement("rect",{x:0,y:0,width:n,height:r}))),x.default.createElement("g",{clipPath:`url(#${t})`,transform:o},s,x.default.createElement("g",{"data-layer":e})))}export{Ht as a,Se as b,Jn as c,Nt as d,bo as e,Gt as f,Xt as g,E as h,Ao as i,ln as j,Ho as k,zo as l,Fo as m,Bo as n,Oo as o,cn as p,Vo as q,Uo as r,jo as s,qo as t,fn as u,Qo as v,pn as w,W as x,bn as y,wn as z,vr as A,kn as B,vi as C,xi as D,Si as E,Mi as F,Tn as G,Sr as H,zr as I,ct as J,Br as K,ge as L,Ii as M,An as N,ji as O,qi as P,Zi as Q,$r as R,Ji as S,Hn as T,Fn as U,Pn as V,qr as W,ca as X,Nn as Y,Pa as Z};
2
+ //# sourceMappingURL=chunk-L6CBIH6H.js.map