@sjcrh/proteinpaint-client 2.63.0 → 2.63.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +9 -7
- package/dist/{2dmaf-70c0b6bb.js → 2dmaf-0cabb4a4.js} +1 -1
- package/dist/{ColorScale-b44d51ef.js → ColorScale-9800a609.js} +1 -1
- package/dist/{DEanalysis-b86d0874.js → DEanalysis-567989ff.js} +1 -1
- package/dist/{Disco-16cd51c0.js → Disco-5d1404ce.js} +1 -1
- package/dist/{Disco.UI-a38a12e6.js → Disco.UI-54228bb6.js} +1 -1
- package/dist/{DragControls-0c173a20.js → DragControls-a05737c2.js} +1 -1
- package/dist/{DziViewer-5c2d68e7.js → DziViewer-3f466d90.js} +2 -2
- package/dist/{FilterRxComp-0e75dd8d.js → FilterRxComp-fc769f34.js} +1 -1
- package/dist/{FilterStateless-ad3df967.js → FilterStateless-8f30f856.js} +1 -1
- package/dist/{HicApp-bcf8330c.js → HicApp-aac413df.js} +1 -1
- package/dist/{OrbitControls-c33cf781.js → OrbitControls-8b7f91ca.js} +1 -1
- package/dist/app-59194db0.js +1 -0
- package/dist/{app-f91922b4.js → app-71453429.js} +1 -1
- package/dist/{app-bfce9bf5.js → app-fb676934.js} +1 -1
- package/dist/app.js +1 -1
- package/dist/{bam-95f36008.js → bam-e7f6baea.js} +1 -1
- package/dist/{barchart-e2af00a8.js → barchart-ef4874c8.js} +1 -1
- package/dist/{barchart.events-272fd122.js → barchart.events-e24facf7.js} +1 -1
- package/dist/{bars.renderer-f0e5af5a.js → bars.renderer-c46d3f44.js} +1 -1
- package/dist/{block-ec76524e.js → block-4f585abe.js} +1 -1
- package/dist/block.lazyload-6f83d057.js +1 -0
- package/dist/{block.legend-f8cad7e4.js → block.legend-cec87c6f.js} +1 -1
- package/dist/{block.mds-20655637.js → block.mds-f5a11c42.js} +1 -1
- package/dist/{block.mds.cnv-5feb86a0.js → block.mds.cnv-25423c1e.js} +1 -1
- package/dist/{block.mds.expressionrank-c7043f35.js → block.mds.expressionrank-fc1996d5.js} +1 -1
- package/dist/{block.mds.expressionstat-4bf457f3.js → block.mds.expressionstat-45b6bf47.js} +1 -1
- package/dist/{block.mds.geneboxplot-132e5fe6.js → block.mds.geneboxplot-037df46d.js} +1 -1
- package/dist/{block.mds.junction-1f9810df.js → block.mds.junction-00161de6.js} +1 -1
- package/dist/{block.mds.svcnv-094c416f.js → block.mds.svcnv-0c257af4.js} +1 -1
- package/dist/{block.mds.svcnv.share-bb976e02.js → block.mds.svcnv.share-c0b9dfad.js} +1 -1
- package/dist/{block.mds2-7045e32c.js → block.mds2-9009f8d8.js} +1 -1
- package/dist/{block.svg-d8d76ba7.js → block.svg-86bbfcb0.js} +1 -1
- package/dist/{block.tk.aicheck-317d04bd.js → block.tk.aicheck-a5697794.js} +1 -1
- package/dist/{block.tk.ase-d1577ec1.js → block.tk.ase-ad1be47c.js} +1 -1
- package/dist/{block.tk.bam-3cdc13a0.js → block.tk.bam-14339d16.js} +1 -1
- package/dist/{block.tk.bedgraphdot-5304e06c.js → block.tk.bedgraphdot-efe19e56.js} +1 -1
- package/dist/{block.tk.bigwig.ui-0c96dce5.js → block.tk.bigwig.ui-a92f286b.js} +1 -1
- package/dist/{block.tk.hicstraw-39d89269.js → block.tk.hicstraw-57fbbe61.js} +1 -1
- package/dist/{block.tk.junction-b45b3a95.js → block.tk.junction-64c39cd5.js} +1 -1
- package/dist/{block.tk.junction.textmatrixui-6ec019e1.js → block.tk.junction.textmatrixui-09e5e02f.js} +1 -1
- package/dist/{block.tk.ld-5c54e58b.js → block.tk.ld-f681d099.js} +1 -1
- package/dist/{block.tk.menu-30a2c3a5.js → block.tk.menu-2563364c.js} +1 -1
- package/dist/{block.tk.pgv-7ff2dfaf.js → block.tk.pgv-9dfc00c0.js} +1 -1
- package/dist/{boxplot-7de25274.js → boxplot-a2e1ace0.js} +1 -1
- package/dist/brainImaging-21701238.js +1 -0
- package/dist/{brush-db0ed33a.js → brush-bb4566a3.js} +1 -1
- package/dist/{categorical-bc309399.js → categorical-a00f4ffc.js} +1 -1
- package/dist/{condition-f0eb2343.js → condition-2034db37.js} +1 -1
- package/dist/{controls-8d4972c8.js → controls-0467d2ec.js} +1 -1
- package/dist/{controls.btns-bad9e4cf.js → controls.btns-ad7b28a2.js} +1 -1
- package/dist/{controls.config-e0f394cb.js → controls.config-6cf816fb.js} +1 -1
- package/dist/{controls.divide-d8ac5a9b.js → controls.divide-3c0d52d7.js} +1 -1
- package/dist/{controls.overlay-3ac8773d.js → controls.overlay-3a55c2ec.js} +1 -1
- package/dist/{controls.term1-008f4be4.js → controls.term1-59f4cd60.js} +1 -1
- package/dist/cuminc-8d21132b.js +1 -0
- package/dist/{customdata.inputui-58cd9b32.js → customdata.inputui-40ba6d7f.js} +1 -1
- package/dist/{dataDownload-91da6dd6.js → dataDownload-bfa92dad.js} +1 -1
- package/dist/{databrowser.ui-c50862e4.js → databrowser.ui-4799f04d.js} +1 -1
- package/dist/{density-7c3f91eb.js → density-4c2b53f6.js} +1 -1
- package/dist/{dictionary-48a38837.js → dictionary-89e860ee.js} +1 -1
- package/dist/{drag-c354e2c6.js → drag-88d451b4.js} +1 -1
- package/dist/{e2pca-3bba91fa.js → e2pca-8a3f2566.js} +1 -1
- package/dist/{ep-144d8973.js → ep-5399c5cc.js} +1 -1
- package/dist/{fusion.parse-ae1253f4.js → fusion.parse-fc25e5bd.js} +1 -1
- package/dist/{geneExpClustering-96d09008.js → geneExpClustering-a916ebda.js} +1 -1
- package/dist/{geneExpression-d6494fd3.js → geneExpression-501e95c0.js} +1 -1
- package/dist/{geneExpression-9ca2da4f.js → geneExpression-9047481a.js} +1 -1
- package/dist/{geneExpression-be9b5da2.js → geneExpression-da4b50f0.js} +1 -1
- package/dist/{geneORA-85850143.js → geneORA-ffb2497e.js} +1 -1
- package/dist/{geneVariant-3df05e0c.js → geneVariant-7ab521d6.js} +1 -1
- package/dist/{geneVariant-3d674865.js → geneVariant-d79431a2.js} +1 -1
- package/dist/{genefusion.ui-3e2a3a73.js → genefusion.ui-3ce190c7.js} +1 -1
- package/dist/{geneset-3b761b2c.js → geneset-3522bcda.js} +1 -1
- package/dist/{genomeBrowser-2105a98f.js → genomeBrowser-9b72eb22.js} +1 -1
- package/dist/{genomeBrowser.controls-f9b9bf42.js → genomeBrowser.controls-bef8bf99.js} +1 -1
- package/dist/{groupsetting-4901d033.js → groupsetting-574ad150.js} +1 -1
- package/dist/{hierCluster-a7ff7f5a.js → hierCluster-3b14b2b3.js} +1 -1
- package/dist/{hierCluster.config-3d124abf.js → hierCluster.config-f8686a30.js} +1 -1
- package/dist/{hierCluster.interactivity-3463cc0b.js → hierCluster.interactivity-3b5f1e81.js} +1 -1
- package/dist/{hierCluster.renderers-668d0075.js → hierCluster.renderers-9f9a7cad.js} +1 -1
- package/dist/{html.legend-3e428f9e.js → html.legend-ef8066dd.js} +1 -1
- package/dist/{imagePlot-6d89200c.js → imagePlot-095b9a92.js} +1 -1
- package/dist/{lasso-393c1570.js → lasso-ef63631b.js} +1 -1
- package/dist/{launch.adhoc-9c59874e.js → launch.adhoc-1b356f97.js} +1 -1
- package/dist/{legacyDataset-26ead9cc.js → legacyDataset-056e9d4c.js} +1 -1
- package/dist/{log-4d74231e.js → log-ca1e2a74.js} +1 -1
- package/dist/{lollipop-59f65024.js → lollipop-6ad9ec3c.js} +1 -1
- package/dist/{maf-72e5b7da.js → maf-dfada1c8.js} +1 -1
- package/dist/{maftimeline-ed8aaae8.js → maftimeline-1b715a01.js} +1 -1
- package/dist/{matrix-3d09a31f.js → matrix-3fae58f8.js} +1 -1
- package/dist/matrix.cells-3620eb3a.js +1 -0
- package/dist/{matrix.cluster-acdfc6a7.js → matrix.cluster-15b8a865.js} +1 -1
- package/dist/{matrix.config-cd01ebbd.js → matrix.config-8247bea5.js} +1 -1
- package/dist/{matrix.controls-86eb8d5c.js → matrix.controls-dea65894.js} +1 -1
- package/dist/{matrix.data-e2d7ac16.js → matrix.data-121a1a8c.js} +1 -1
- package/dist/{matrix.dom-e5f91cc0.js → matrix.dom-83c5fa39.js} +1 -1
- package/dist/{matrix.groups-f1969b5c.js → matrix.groups-2e1202ef.js} +1 -1
- package/dist/{matrix.interactivity-92bc8332.js → matrix.interactivity-2b076155.js} +1 -1
- package/dist/{matrix.layout-29a8f334.js → matrix.layout-8dc54c05.js} +1 -1
- package/dist/{matrix.legend-8c28039e.js → matrix.legend-e0078739.js} +1 -1
- package/dist/matrix.renderers-0c8eddc9.js +1 -0
- package/dist/{matrix.serieses-e079f04a.js → matrix.serieses-2898da6b.js} +1 -1
- package/dist/{matrix.sort-e1f83454.js → matrix.sort-249d4a35.js} +1 -1
- package/dist/{matrix.sorterUi-2025f39d.js → matrix.sorterUi-d26208c8.js} +1 -1
- package/dist/{mavb-37fffd68.js → mavb-9a6fa2e9.js} +1 -1
- package/dist/{mds.fimo-68f0eaf5.js → mds.fimo-ce97371c.js} +1 -1
- package/dist/{mds.samplescatterplot-362f3591.js → mds.samplescatterplot-a54b9e93.js} +1 -1
- package/dist/{mds.survivalplot-f5bda05a.js → mds.survivalplot-c5093f73.js} +1 -1
- package/dist/{mdsjsonform-7f0b6cc7.js → mdsjsonform-09b4e1cb.js} +1 -1
- package/dist/metaboliteIntensity-eeb5ad12.js +1 -0
- package/dist/niceNumLabels-ddb76164.js +1 -0
- package/dist/{nodrag-777a34a5.js → nodrag-bed2488c.js} +1 -1
- package/dist/{numeric-2eb8c25b.js → numeric-d5536b1c.js} +1 -1
- package/dist/numeric.binary-d67da945.js +1 -0
- package/dist/numeric.continuous-9a0c88bc.js +1 -0
- package/dist/numeric.discrete-921f7097.js +1 -0
- package/dist/numeric.spline-649308d5.js +1 -0
- package/dist/{numeric.toggle-5316211b.js → numeric.toggle-52789fd2.js} +1 -1
- package/dist/{oncomatrix-cd9fa01b.js → oncomatrix-6950c48c.js} +1 -1
- package/dist/{parseData-1bfa9946.js → parseData-480d1ff3.js} +1 -1
- package/dist/{plot.2dvaf-1ed153c1.js → plot.2dvaf-1ecc4bbc.js} +1 -1
- package/dist/plot.app-c841507a.js +1 -0
- package/dist/{plot.barplot-61742e94.js → plot.barplot-24140b0f.js} +1 -1
- package/dist/{plot.boxplot-fe966ac3.js → plot.boxplot-87fe8ab2.js} +1 -1
- package/dist/{plot.brainImaging-d2c23bb7.js → plot.brainImaging-325ebded.js} +1 -1
- package/dist/{plot.disco-70d493f4.js → plot.disco-621d1b8e.js} +1 -1
- package/dist/{plot.dzi-14e6fdc4.js → plot.dzi-3a7e478e.js} +1 -1
- package/dist/{plot.ssgq-9d364d41.js → plot.ssgq-1949c207.js} +1 -1
- package/dist/{plot.vaf2cov-4d28015b.js → plot.vaf2cov-d03c6409.js} +1 -1
- package/dist/{profileBarchart-c104f8e2.js → profileBarchart-11755d7c.js} +1 -1
- package/dist/{profileHome-a555583d.js → profileHome-9c5e266b.js} +1 -1
- package/dist/{profilePlot-5ce5b6a0.js → profilePlot-8ee3034a.js} +1 -1
- package/dist/{profilePolar-610213d4.js → profilePolar-9fe70c32.js} +1 -1
- package/dist/{profileRadar-fddb18f7.js → profileRadar-0e744181.js} +1 -1
- package/dist/{profileRadarFacility-2c2db1dd.js → profileRadarFacility-102544c5.js} +1 -1
- package/dist/{recover-a08c8d01.js → recover-b1ec4fed.js} +1 -1
- package/dist/{regression.inputs-5718cf72.js → regression.inputs-ad548745.js} +1 -1
- package/dist/{regression.inputs.values.table-d587c1cf.js → regression.inputs.values.table-1618447a.js} +1 -1
- package/dist/{regression.results-748024be.js → regression.results-25008028.js} +1 -1
- package/dist/{renderPvalueTable-c435aefd.js → renderPvalueTable-46056189.js} +1 -1
- package/dist/sampleScatter-47dd82cb.js +1 -0
- package/dist/{sampleScatter.interactivity-e9c30652.js → sampleScatter.interactivity-cfa3451d.js} +1 -1
- package/dist/{sampleScatter.rendererThree-3e6c032e.js → sampleScatter.rendererThree-c5321d24.js} +2 -2
- package/dist/{sampleView-d6a91293.js → sampleView-30b97c7d.js} +1 -1
- package/dist/{samplelst-821ec148.js → samplelst-2bdc1b9d.js} +1 -1
- package/dist/{samplematrix-7aa0a780.js → samplematrix-4f0ec523.js} +1 -1
- package/dist/{scatter-2e2c76f4.js → scatter-8a337eeb.js} +1 -1
- package/dist/{selectGenomeWithTklst-51cd21a4.js → selectGenomeWithTklst-895106fb.js} +1 -1
- package/dist/{singleCellPlot-c7347a27.js → singleCellPlot-360eaec6.js} +1 -1
- package/dist/{singlecell-a668bb17.js → singlecell-29c1cbb1.js} +1 -1
- package/dist/{singlecell-7c851ef8.js → singlecell-75f8af89.js} +1 -1
- package/dist/{snplocus-fe6f4ba1.js → snplocus-0cafa73c.js} +1 -1
- package/dist/{snplst-751cea95.js → snplst-2284d5ce.js} +1 -1
- package/dist/{spliceevent.a53ss.diagram-b157f95d.js → spliceevent.a53ss.diagram-44ccabf9.js} +1 -1
- package/dist/{spliceevent.exonskip.diagram-071a3467.js → spliceevent.exonskip.diagram-c8d1bdf0.js} +1 -1
- package/dist/spliceevent.exonskip.getdefault-9fe16119.js +1 -0
- package/dist/{spliceevent.noeventdiagram-1c731f35.js → spliceevent.noeventdiagram-5e244090.js} +1 -1
- package/dist/{spliceevent.phrase-7a3bfb00.js → spliceevent.phrase-186eb050.js} +1 -1
- package/dist/{stattable-a7713026.js → stattable-886f7dad.js} +1 -1
- package/dist/{style.gdc-40ec2784.js → style.gdc-4ac9b96b.js} +1 -1
- package/dist/{summary-592d8f81.js → summary-ee2045a5.js} +1 -1
- package/dist/{sunburst-452df940.js → sunburst-bbff8818.js} +1 -1
- package/dist/survival-04e279f8.js +1 -0
- package/dist/{survival-450b6df4.js → survival-d7bd3c6b.js} +1 -1
- package/dist/{svg.download-56529955.js → svg.download-54c99186.js} +1 -1
- package/dist/{svg.legend-c82b153f.js → svg.legend-28652faa.js} +1 -1
- package/dist/{svgraph-3c5cd8d2.js → svgraph-a12d89da.js} +1 -1
- package/dist/{svmr-3dd531ef.js → svmr-248055c8.js} +1 -1
- package/dist/{table-d6c411fd.js → table-1dae543a.js} +1 -1
- package/dist/{table-bf604c50.js → table-b4a61573.js} +1 -1
- package/dist/{termInfo-96285f4a.js → termInfo-4c759483.js} +1 -1
- package/dist/{termsetting-9a7511e6.js → termsetting-636d2271.js} +1 -1
- package/dist/{tk-6a8e5bb0.js → tk-741d4674.js} +1 -1
- package/dist/{tp.ui-221efed6.js → tp.ui-23151bb1.js} +1 -1
- package/dist/{tvs.density-9fdae0cc.js → tvs.density-9fe0c7fd.js} +1 -1
- package/dist/{tvs.geneVariant-149e25b7.js → tvs.geneVariant-1b179327.js} +1 -1
- package/dist/tvs.numeric-b4cfc975.js +1 -0
- package/dist/{tvs.samplelst-a38e9c2b.js → tvs.samplelst-681358bc.js} +1 -1
- package/dist/{uiUtils-a6de7f14.js → uiUtils-74700a01.js} +1 -1
- package/dist/{variantBrowser-05375469.js → variantBrowser-910b4bcd.js} +1 -1
- package/dist/{vcf-58904308.js → vcf-16ba1e06.js} +1 -1
- package/dist/{violin-c1b78717.js → violin-a41b2e2b.js} +1 -1
- package/dist/{violin.interactivity-534d6993.js → violin.interactivity-bcf0ccc2.js} +1 -1
- package/dist/{violin.renderer-16540fb8.js → violin.renderer-149310eb.js} +1 -1
- package/dist/{violinRenderer-688abcb2.js → violinRenderer-71c9f3ab.js} +1 -1
- package/dist/{viridis-d3cf2713.js → viridis-81de7bcd.js} +1 -1
- package/dist/{y-2d48b9e4.js → y-76c7da8c.js} +1 -1
- package/dist/{zoom-2d4ede33.js → zoom-a40839cf.js} +1 -1
- package/package.json +7 -7
- package/dist/app-de19f41c.js +0 -1
- package/dist/block.lazyload-ebd949e4.js +0 -1
- package/dist/brainImaging-007edaa3.js +0 -1
- package/dist/cuminc-72257faf.js +0 -1
- package/dist/matrix.cells-a5157233.js +0 -1
- package/dist/matrix.renderers-3b8dfd04.js +0 -1
- package/dist/metaboliteIntensity-512257f3.js +0 -1
- package/dist/niceNumLabels-8fdc6507.js +0 -1
- package/dist/numeric.binary-0a3b17d2.js +0 -1
- package/dist/numeric.continuous-f77038de.js +0 -1
- package/dist/numeric.discrete-b977e88f.js +0 -1
- package/dist/numeric.spline-d64b1abe.js +0 -1
- package/dist/plot.app-91a1d78d.js +0 -1
- package/dist/sampleScatter-031f47de.js +0 -1
- package/dist/spliceevent.exonskip.getdefault-93feb627.js +0 -1
- package/dist/survival-6a4c4f12.js +0 -1
- package/dist/tvs.numeric-f9ce58bc.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{aB as t,M as e,aC as s,aD as r,q as i,E as o,aE as a,O as n,az as l,aF as p,x as c,aG as d,aH as m,aI as u}from"./app-f91922b4.js";import{F as f,g as h,a as g,f as j,T as b,N as y}from"./FilterRxComp-0e75dd8d.js";import{f as v}from"./FilterStateless-ad3df967.js";import{appInit as x}from"./app-bfce9bf5.js";import{r as w}from"./table-d6c411fd.js";import{g as T}from"./termsetting-9a7511e6.js";class C extends f{constructor(t){super(t);this.api={main:this.main.bind(this),getNormalRoot:()=>h(this.rawFilter),getPromise:t=>this.promises[t]};if(t.debug)this.api.Inner=this}async main(t,e={}){this.dom.controlsTip.hide();this.dom.treeTip.hide();const s="activeCohort"in e?e.activeCohort:this.activeCohort;const r=g(t,"filterUiRoot");if(r)delete r.tag;t.lst.push({tag:"filterUiRoot",type:"tvslst",join:"",lst:[]});t.join=t.lst.length>1?"and":"";const i=JSON.stringify(t);if(this.rawCopy==i&&JSON.stringify(this.activeCohort)==JSON.stringify(s))return;await super.main(i,e)}refresh(t){this.dom.controlsTip.hide();this.dom.treeTip.hide();const e=JSON.parse(JSON.stringify(this.rawFilter));const s=j(e,this.filter.$id);if(!s||this.rawFilter.$id===this.filter.$id){this.opts.callback(e)}else{const r=s.lst.findIndex((t=>t.$id==this.filter.$id));s.lst[r]=t;this.opts.callback(e)}const r=e.lst.findIndex((e=>e.$id===t.$id));e.lst.splice(r,1);this.main(e)}}const _=t(C);function k(t){const{holder:l,genome:p,mode:c,callback:d,vocabApi:m,titleText:u,minNumGenes:f}=t;let h=structuredClone(t.geneList||[]);const g=new e({padding:"0px",parent_menu:l.node(),test:"test"});l.selectAll("*").remove();const j=l.append("div").style("padding","5px");const b=structuredClone(h);const y=JSON.stringify(h.map((t=>t.gene)).sort());if(u){j.append("div").style("margin-bottom","10px").html(u)}const v={dom:{tdbBtns:{},holder:j,loadBtn:null,clearBtn:null,restoreBtn:null,geneHoldingDiv:null,statLegendDiv:null,submitBtn:null},params:[],statColor2label:null,destroy(){t.holder.remove()}};const x=j.append("div");const w=x.append("label");w.append("span").html("Search");const T=w.append("span");const C=s({tip:g,genome:p,row:T,geneOnly:true,callback:P,hideHelp:true,focusOff:true});const _=x.append("div").style("display","inline-flex").style("align-items","center").style("float","right").style("gap","5px");v.dom.geneHoldingDiv=j.append("div").append("div").style("display","flex").style("flex-wrap","wrap").style("gap","5px").style("min-height","20px").style("border","solid 1px #aaa").style("margin","10px 0px").style("padding","6px 2px").style("min-height","30px");v.dom.statLegendDiv=j.append("div");const k=j.append("div").style("margin-top","10px");const S=k.append("button").property("disabled",!(h===null||h===void 0?void 0:h.length)).text(`Submit`).on("click",(()=>{d({geneList:h})}));v.dom.submitBtn=S;function I(){var e,s,i,o,a,n;_.selectAll("*").remove();if(c=="expression"&&((s=(e=m.termdbConfig)===null||e===void 0?void 0:e.queries)===null||s===void 0?void 0:s.topVariablyExpressedGenes)){if(m.termdbConfig.queries.topVariablyExpressedGenes.arguments){for(const t of m.termdbConfig.queries.topVariablyExpressedGenes.arguments)E(t)}_.append("button").style("white-space","nowrap").text("Load top variably expressed genes").on("click",(t=>r(this,void 0,void 0,(function*(){t.target.disabled=true;const e={genome:m.state.vocab.genome,dslabel:m.state.vocab.dslabel,maxGenes:50};if(m.state.termfilter){if(m.state.termfilter.filter)e.filter=m.state.termfilter.filter;if(m.state.termfilter.filter0)e.filter0=m.state.termfilter.filter0}const s=yield m.getTopVariablyExpressedGenes(e);h=[];if(s.genes){for(const t of s.genes)h.push({gene:t})}B();t.target.disabled=false}))))}else if((o=(i=m.termdbConfig)===null||i===void 0?void 0:i.queries)===null||o===void 0?void 0:o.topMutatedGenes){if(m.termdbConfig.queries.topMutatedGenes.arguments){for(const t of m.termdbConfig.queries.topMutatedGenes.arguments)E(t)}v.dom.loadBtn=_.append("button").style("white-space","nowrap").html(`Load top mutated genes`).on("click",(()=>r(this,void 0,void 0,(function*(){v.dom.loadBtn.property("disabled",true);const t={filter0:m.state.termfilter.filter0};for(const{param:e,input:s}of v.params){const r=s.attr("id");t[r]=R({param:e,input:s})}const e=yield m.getTopMutatedGenes(t);h=[];h.push(...e.genes);B();v.dom.loadBtn.property("disabled",false)}))))}if((a=p===null||p===void 0?void 0:p.termdbs)===null||a===void 0?void 0:a.msigdb){for(const t in p.termdbs){const e=p.termdbs[t];v.dom.tdbBtns[t]=_.append("button").attr("name","msigdbBt").style("white-space","nowrap").html(`Load ${e.label} gene set ▼`).on("click",(e=>r(this,void 0,void 0,(function*(){g.clear().showunder(e.target);const s=yield import("./app-bfce9bf5.js");s.appInit({holder:g.d,state:{dslabel:t,genome:p.name,nav:{header_mode:"search_only"}},tree:{click_term:t=>{h=[];const e=t._geneset;if(e){for(const t of e)h.push({gene:t.symbol});B()}g.hide();S.node().focus()}}})}))))}}v.dom.clearBtn=_.append("button").property("disabled",!(h===null||h===void 0?void 0:h.length)).text("Clear").on("click",(()=>{h=[];B()}));if((n=t.geneList)===null||n===void 0?void 0:n.length){v.dom.restoreBtn=_.append("button").property("disabled",true).text("Restore").on("click",(()=>{h=b;B()}))}}function B(){var t;const e=h.some((t=>t.mutationStat));if(!e)h.sort(((t,e)=>{if(t.gene<e.gene)return-1;if(t.gene>e.gene)return 1;return 0}));v.dom.geneHoldingDiv.selectAll("*").remove();v.statColor2label=new Map;v.dom.geneHoldingDiv.selectAll("div").data(h||[]).enter().append("div").attr("title","click to delete").attr("class","sja_menuoption").attr("tabindex",0).style("position","relative").style("display","inline-block").style("padding","5px 16px 5px 9px").style("margin-left","5px").each(A).on("click",q).on("mouseover",(function(t){const e=i(t.target);e.append("div").style("margin-left","4px").classed("sjpp_deletebt",true).style("display","inline-block").style("position","absolute").style("right","0px").style("top","0px").style("transform","scale(0.6)").style("pointer-events","none").html(`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="#000" class="bi bi-x-lg" viewBox="0 0 16 16">\n\t\t\t\t<path stroke='#f00' d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z"/>\n\t\t\t\t</svg>`)})).on("mouseout",(function(t){i(t.target).select(".sjpp_deletebt").remove()})).on("focus",(t=>{t.target.dispatchEvent(new PointerEvent("mouseover"))})).on("blur",(t=>{t.target.dispatchEvent(new PointerEvent("mouseout"))})).on("keyup",(t=>{if(t.key=="Enter")t.target.click()}));D();v.dom.clearBtn.property("disabled",!(h===null||h===void 0?void 0:h.length));const s=y!==JSON.stringify(h.map((t=>t.gene)).sort());(t=v.dom.restoreBtn)===null||t===void 0?void 0:t.property("disabled",!s);const r=f||0;v.dom.submitBtn.property("disabled",!s||(h===null||h===void 0?void 0:h.length)<r);if(s)S.node().focus()}function A(t){const e=i(this).style("border-radius","5px");if(t.mutationStat){e.html(`${t.gene} `);for(const s of t.mutationStat){let t,r;if("class"in s){if(!o[s.class])throw"invalid stat class";t=o[s.class].color;v.statColor2label.set(t,o[s.class].label)}else if("dt"in s){if(!a[s.dt])throw"invalid stat dt";t=a[s.dt];r="white";v.statColor2label.set(t,n[s.dt])}else{throw"stat missing dt/class"}e.insert("span").style("font-size",".7em").style("background-color",t).style("padding","1px 2px").style("color",r||"black").text(s.count)}}else{e.insert("div").style("display","inline-block").html(t.gene)}}function D(){if(!v.statColor2label||v.statColor2label.size==0){v.dom.statLegendDiv.style("display","none");return}v.dom.statLegendDiv.style("display","block").selectAll("*").remove();for(const[t,e]of v.statColor2label){v.dom.statLegendDiv.append("div").style("display","inline-block").style("width","12px").style("height","12px").style("background-color",t);v.dom.statLegendDiv.append("span").html(` ${e} `)}}function P(){const t=C.geneSymbol;for(const e of h){if(e.gene==t){window.alert(`The gene ${t} has already been added`);return}}h.push({gene:t});B()}function q(t,e){const s=h.findIndex((t=>t.gene===e.gene));if(s!=-1){h.splice(s,1);B()}}function E(t){let e;if(t.type=="boolean"){e=_.append("input").attr("type","checkbox").attr("id",t.id);if(t.value)e.property("checked",t.value);_.append("label").html(t.label).attr("for",t.id)}else if(t.type=="string"&&t.value){e=_.append("input").attr("type","checkbox").attr("id",t.id);e.property("checked",true);_.append("label").html(t.label).attr("for",t.id)}else if(t.type=="number"){e=_.append("input").attr("type","number").style("width","40px").attr("id",t.id);if(t.value)e.attr("value",t.value);_.append("span").html(t.label)}v.params.push({param:t,input:e})}function R({param:t,input:e}){const s=e.node().value;if(e.attr("type")=="number")return Number(s);if(e.attr("type")=="checkbox"){if(t.type=="string")return e.node().checked?t.value:"";if(t.type=="boolean")return e.node().checked?1:0}}I();B();return v}function S(t){switch(t){case"../plots/DEanalysis.js":return import("./DEanalysis-b86d0874.js");case"../plots/Disco.js":return import("./Disco-16cd51c0.js");case"../plots/DziViewer.js":return import("./DziViewer-5c2d68e7.js");case"../plots/barchart.data.js":return import("./FilterRxComp-0e75dd8d.js").then((function(t){return t.y}));case"../plots/barchart.events.js":return import("./barchart.events-272fd122.js");case"../plots/barchart.js":return import("./barchart-e2af00a8.js");case"../plots/bars.renderer.js":return import("./bars.renderer-f0e5af5a.js");case"../plots/bars.settings.js":return import("./bars.settings-64bb4642.js");case"../plots/boxplot.js":return import("./boxplot-7de25274.js");case"../plots/brainImaging.js":return import("./brainImaging-007edaa3.js");case"../plots/controls.btns.js":return import("./controls.btns-bad9e4cf.js");case"../plots/controls.config.js":return import("./controls.config-e0f394cb.js");case"../plots/controls.divide.js":return import("./controls.divide-d8ac5a9b.js");case"../plots/controls.js":return import("./controls-8d4972c8.js");case"../plots/controls.overlay.js":return import("./controls.overlay-3ac8773d.js");case"../plots/controls.term1.js":return import("./controls.term1-008f4be4.js");case"../plots/cuminc.js":return import("./cuminc-72257faf.js");case"../plots/dataDownload.js":return import("./dataDownload-91da6dd6.js");case"../plots/dictionary.js":return import("./dictionary-48a38837.js");case"../plots/geneExpression.js":return import("./geneExpression-9ca2da4f.js");case"../plots/geneORA.js":return import("./geneORA-85850143.js");case"../plots/geneset.js":return import("./geneset-3b761b2c.js");case"../plots/genomeBrowser.controls.js":return import("./genomeBrowser.controls-f9b9bf42.js");case"../plots/genomeBrowser.js":return import("./genomeBrowser-2105a98f.js");case"../plots/hierCluster.config.js":return import("./hierCluster.config-3d124abf.js");case"../plots/hierCluster.interactivity.js":return import("./hierCluster.interactivity-3463cc0b.js").then((function(t){return t.i}));case"../plots/hierCluster.js":return import("./hierCluster-a7ff7f5a.js");case"../plots/hierCluster.renderers.js":return import("./hierCluster.renderers-668d0075.js").then((function(t){return t.r}));case"../plots/imagePlot.js":return import("./imagePlot-6d89200c.js");case"../plots/matrix.cells.js":return import("./matrix.cells-a5157233.js");case"../plots/matrix.cluster.js":return import("./matrix.cluster-acdfc6a7.js");case"../plots/matrix.config.js":return import("./matrix.config-cd01ebbd.js");case"../plots/matrix.controls.js":return import("./matrix.controls-86eb8d5c.js");case"../plots/matrix.data.js":return import("./matrix.data-e2d7ac16.js").then((function(t){return t.m}));case"../plots/matrix.dom.js":return import("./matrix.dom-e5f91cc0.js");case"../plots/matrix.groups.js":return import("./matrix.groups-f1969b5c.js").then((function(t){return t.m}));case"../plots/matrix.interactivity.js":return import("./matrix.interactivity-92bc8332.js");case"../plots/matrix.js":return import("./matrix-3d09a31f.js");case"../plots/matrix.layout.js":return import("./matrix.layout-29a8f334.js").then((function(t){return t.m}));case"../plots/matrix.legend.js":return import("./matrix.legend-8c28039e.js").then((function(t){return t.m}));case"../plots/matrix.renderers.js":return import("./matrix.renderers-3b8dfd04.js");case"../plots/matrix.serieses.js":return import("./matrix.serieses-e079f04a.js").then((function(t){return t.m}));case"../plots/matrix.sort.js":return import("./matrix.sort-e1f83454.js");case"../plots/matrix.sorterUi.js":return import("./matrix.sorterUi-2025f39d.js");case"../plots/plot.app.js":return import("./plot.app-91a1d78d.js");case"../plots/plot.brainImaging.js":return import("./plot.brainImaging-d2c23bb7.js");case"../plots/plot.disco.js":return import("./plot.disco-70d493f4.js");case"../plots/plot.ssgq.js":return import("./plot.ssgq-9d364d41.js");case"../plots/profileBarchart.js":return import("./profileBarchart-c104f8e2.js");case"../plots/profilePlot.js":return import("./profilePlot-5ce5b6a0.js");case"../plots/profilePolar.js":return import("./profilePolar-610213d4.js");case"../plots/profileRadar.js":return import("./profileRadar-fddb18f7.js");case"../plots/profileRadarFacility.js":return import("./profileRadarFacility-2c2db1dd.js");case"../plots/regression.inputs.js":return import("./regression.inputs-5718cf72.js").then((function(t){return t.b}));case"../plots/regression.inputs.term.js":return import("./regression.inputs-5718cf72.js").then((function(t){return t.a}));case"../plots/regression.inputs.values.table.js":return import("./regression.inputs.values.table-d587c1cf.js");case"../plots/regression.js":return import("./regression.inputs-5718cf72.js").then((function(t){return t.r}));case"../plots/regression.results.js":return import("./regression.results-748024be.js").then((function(t){return t.r}));case"../plots/sampleScatter.interactivity.js":return import("./sampleScatter.interactivity-e9c30652.js").then((function(t){return t.a}));case"../plots/sampleScatter.js":return import("./sampleScatter-031f47de.js").then((function(t){return t.a}));case"../plots/sampleScatter.renderer.js":return import("./sampleScatter-031f47de.js").then((function(t){return t.s}));case"../plots/sampleScatter.rendererThree.js":return import("./sampleScatter.rendererThree-3e6c032e.js").then((function(t){return t.c}));case"../plots/sampleView.js":return import("./sampleView-d6a91293.js");case"../plots/scatter.js":return import("./scatter-2e2c76f4.js");case"../plots/singleCellPlot.js":return import("./singleCellPlot-c7347a27.js");case"../plots/stattable.js":return import("./stattable-a7713026.js");case"../plots/summary.js":return import("./summary-592d8f81.js");case"../plots/survival.js":return import("./survival-450b6df4.js");case"../plots/table.js":return import("./table-bf604c50.js");case"../plots/variantBrowser.js":return import("./variantBrowser-05375469.js");case"../plots/violin.interactivity.js":return import("./violin.interactivity-534d6993.js");case"../plots/violin.js":return import("./violin-c1b78717.js");case"../plots/violin.renderer.js":return import("./violin.renderer-16540fb8.js");default:return new Promise((function(e,s){(typeof queueMicrotask==="function"?queueMicrotask:setTimeout)(s.bind(null,new Error("Unknown variable dynamic import: "+t)))}))}}class I{constructor(t={}){this.type="charts";P(this)}async init(t){this.dom={holder:this.opts.holder,tip:new e({padding:"0px"})};this.makeButtons(t)}getState(t){const e=A(t);const s=JSON.parse(JSON.stringify(t.termdbConfig?.supportedChartTypes||{}));const r={vocab:t.vocab,activeCohort:t.activeCohort,termfilter:t.termfilter,supportedChartTypes:s[e]||["summary"],termdbConfig:t.termdbConfig};if(t?.termfilter?.filter){r.filter=h(t.termfilter.filter)}if(!r.supportedChartTypes.includes("dictionary")&&!r.termdbConfig.hiddenChartTypes?.includes("dictionary")){r.supportedChartTypes.push("dictionary")}return r}main(){this.dom.btns.style("display",(t=>this.state.supportedChartTypes.includes(t.chartType)?"":"none"))}}const B=l(I);function A(t){if(t?.termdbConfig?.selectCohort?.values){if(!Number.isInteger(t.activeCohort))throw"appState.activeCohort is not integer array index";const e=t.termdbConfig.selectCohort.values[t.activeCohort];if(!e)throw"appState.activeCohort array index out of bound";return[...e.keys].sort().join(",")}return""}function D(t,e){const s=[{label:"Data Dictionary",clickTo:t.prepPlot,chartType:"dictionary",config:{chartType:"dictionary"}},{label:"Sample View",clickTo:t.prepPlot,chartType:"sampleView",config:{chartType:"sampleView"}},{label:"Summary Plots",chartType:"summary",clickTo:t.showTree_select1term,usecase:{target:"summary",detail:"term"}},{label:"Scatter Plot",chartType:"sampleScatter",clickTo:t.loadChartSpecificMenu},{label:"Cumulative Incidence",chartType:"cuminc",clickTo:t.showTree_select1term,usecase:{target:"cuminc",detail:"term"}},{label:"Survival",chartType:"survival",clickTo:t.showTree_select1term,usecase:{target:"survival",detail:"term"}},{label:"Regression Analysis",chartType:"regression",clickTo:t.loadChartSpecificMenu},{label:"Sample Matrix",chartType:"matrix",clickTo:t.loadChartSpecificMenu},{label:"Genome Browser",chartType:"genomeBrowser",clickTo:t.loadChartSpecificMenu},{label:"Differential Expression",chartType:"DEanalysis",clickTo:t.loadChartSpecificMenu},{label:"Profile Bar Plot",chartType:"profileBarchart",clickTo:t.showTree_select1term,usecase:{detail:"term"}},{label:"Data Download",clickTo:t.prepPlot,chartType:"dataDownload",config:{chartType:"dataDownload",terms:[]}},{label:"Single Cell Plot",clickTo:t.loadChartSpecificMenu,chartType:"singleCellPlot",config:{chartType:"singleCellPlot"}},{label:"Gene Expression",chartType:"geneExpression",clickTo:t.showGenesetEditUI,usecase:{target:"geneExpression"}},{label:"Metabolite Intensity",chartType:"metaboliteIntensity",clickTo:t.showTree_selectlst,usecase:{target:"metaboliteIntensity",detail:"term"},updateActionBySelectedTerms:(t,e)=>{const s=e.map((t=>({term:structuredClone(t),q:{mode:y.continuous}})));if(s.length==1){t.config.chartType="summary";t.config.term=s[0];return}if(s.length==2){t.config.chartType="summary";t.config.term=s[0];t.config.term2=s[1];return}t.config.chartType="hierCluster";t.config.dataType=b.METABOLITE_INTENSITY;t.config.termgroups=[{name:"Metabolite Intensity Cluster",lst:s,type:"hierCluster"}]}}];for(const t in e?.termdbConfig.renamedChartTypes||[]){const r=s.find((e=>e.chartType===t));if(r){r.label=e.termdbConfig.renamedChartTypes[t]}}return s}function P(t){t.makeButtons=function(e){const s=D(t,e);t.dom.btns=t.dom.holder.selectAll("button").data(s).enter().append("button").style("margin","10px").style("padding","10px 15px").style("border-radius","20px").style("border-color","#ededed").html((t=>t.label)).on("click",(function(e,s){t.dom.tip.clear().showunder(this);s.clickTo(s)}))};t.showTree_select1term=async e=>{if(e.usecase.label){t.dom.tip.d.append("div").style("margin","3px 5px").style("padding","3px 5px").style("font-weight",600).html(e.usecase.label)}const s={type:"plot_create",id:R(),config:{chartType:e.chartType}};if(e.parentId)s.parentId=e.parentId;const r=await import("./app-bfce9bf5.js");r.appInit({vocabApi:t.app.vocabApi,holder:t.dom.tip.d.append("div"),state:{activeCohort:t.state.activeCohort,nav:{header_mode:"search_only"},tree:{usecase:e.usecase}},tree:{click_term:r=>{const i=r.term?r:{term:r};s.config[e.usecase.detail]=i;t.dom.tip.hide();t.app.dispatch(s)}}})};t.showGenesetEditUI=async e=>{const s=[];const r=t.app;const i=t.dom.tip;const o=t.dom.tip.d;o.selectAll("*").remove();const a=o.append("div").style("padding","5px");const n=a.append("label");n.append("span").text("Create ");let l;const p=n.append("input").style("margin","2px 5px").style("width","210px").attr("placeholder","Group Name").on("input",(()=>{l=p.property("value")}));const c={index:0,name:l,label:l,lst:[],status:"new"};k({holder:o.append("div"),genome:r.opts.genome,geneList:s,mode:"expression",vocabApi:r.vocabApi,callback:async({geneList:t,groupName:e})=>{if(!c)throw`missing selectedGroup`;i.hide();const s={name:e||l,lst:[],type:"hierCluster"};const a=s.lst.filter((t=>t.term.type!="geneVariant"));const n=await Promise.all(t.map((async t=>{const e={gene:t.symbol||t.gene,name:t.symbol||t.gene,type:"geneExpression"};let r=s.lst.find((e=>e.term.name==t.symbol||e.term.name==t.gene));if(!r){r={term:e,q:{}}}return r})));if(n.length==1){const t=n[0];r.dispatch({type:"plot_create",config:{chartType:"summary",term:t}});return}if(n.length==2){const t=n[0];const e=n[1];r.dispatch({type:"plot_create",config:{chartType:"summary",term:t,term2:e}});return}s.lst=[...a,...n];if(!s.lst.length)tg.splice(c.index,1);o.selectAll("*").remove();r.dispatch({type:"plot_create",config:{chartType:"hierCluster",termgroups:[s],dataType:b.GENE_EXPRESSION}})}})};t.showTree_selectlst=async e=>{t.dom.tip.clear();if(e.usecase?.label){t.dom.tip.d.append("div").style("margin","3px 5px").style("padding","3px 5px").style("font-weight",600).html(e.usecase.label)}const s={type:"plot_create",id:R(),config:{chartType:e.chartType}};const r=await import("./app-bfce9bf5.js");t.dom.submenu=t.dom.tip.d.append("div");r.appInit({holder:t.dom.submenu,vocabApi:t.app.vocabApi,state:{activeCohort:t.state.activeCohort,nav:{header_mode:"search_only"},tree:{usecase:e.usecase}},tree:{submit_lst:r=>{const i=e.processSelection?e.processSelection(r):r;s.config[e.usecase.detail]=i;if(e.updateActionBySelectedTerms)e.updateActionBySelectedTerms(s,r);t.dom.tip.hide();t.app.dispatch(s)}}})};t.loadChartSpecificMenu=async e=>{t.dom.tip.clear();const s=await S(`../plots/${e.chartType}.js`);s.makeChartBtnMenu(t.dom.tip.d,t)};t.prepPlot=function(e){const s={type:"plot_prep",config:e.config,id:R()};t.app.dispatch(s)}}const q="_CHART_AUTOID_";let E=Date.now();function R(){return q+E++}const N=p(5);class O{constructor(t={}){this.type="groups";this.selectedGroupsIdx=new Set}async init(){this.dom={holder:this.opts.holder.append("div").style("margin","10px")};G(this);this.tip=new e({padding:"0px"})}getState(t){const e=A(t);const s={termfilter:t.termfilter,groups:V(t),termdbConfig:t.termdbConfig,customTerms:t.customTerms,supportedChartTypes:t.termdbConfig.supportedChartTypes[e],matrixplots:t.termdbConfig.matrixplots};return s}async main(){await L(this)}getMassFilter(){if(!this.state.termfilter.filter||this.state.termfilter.filter.lst.length==0){return{type:"tvslst",in:true,join:"",lst:[]}}const t=h(structuredClone(this.state.termfilter.filter));return t}async groups2samplelst(t){const e=[];const s=new Set,r=[];for(const i of t){const t=await this.app.vocabApi.getFilteredSampleCount(i.filter,"list");const o=[];for(const i of t){const t={sampleId:i.id};if("name"in i){t.sample=i.name}if(!s.has(i.id))o.push(t);else{for(const t of e){const e=t.items.findIndex((t=>t.sampleId===i.id));if(e!==-1)r.push(...t.items.splice(e,1))}}s.add(t.sampleId)}if(o.length)e.push({name:i.name,items:o,color:i.color})}if(r.length){const t=confirm('Overlap detected: 1 or more samples belong to >1 groups. A new group will be created for these "overlap" samples.');if(!t)return;e.push({name:"Group overlap",items:r})}const i=e.length==1?e[0].name:"Sample groups";const o=Z(e,i);for(const t of o.q.groups){o.term.values[t.name].list=t.values;o.term.values[t.name].inuse=t.inuse}return o}updateLaunchButton(){this.dom.newTermSpan.style("display","none");this.dom.noGroupSelected.style("display","none");if(this.state.groups.length==0)return;if(this.state.groups.length==1){this.dom.newTermSpan.style("display","");this.dom.launchButton.text(`Create variable using "${this.state.groups[0].name}"`);this.dom.newTermNameInput.property("value",this.state.groups[0].name+" vs others");return}const t=[...this.selectedGroupsIdx];if(t.length==0){this.dom.noGroupSelected.style("display","");return}this.dom.newTermSpan.style("display","");if(t.length==1){this.dom.launchButton.text(`Create variable using "${this.state.groups[t[0]]?.name}"`);this.dom.newTermNameInput.property("value",this.state.groups[t[0]].name+" vs others");return}this.dom.launchButton.text(`Create variable using ${t.length} groups`);this.dom.newTermNameInput.property("value",t.map((t=>this.state.groups[t].name)).join(" vs "))}displayCustomTerms(){this.dom.customTermDiv.selectAll("*").remove();if(this.state.customTerms.length==0){this.dom.customTermDiv.append("div").text("No custom variables. Use above controls to create new ones. Custom variables are added to dictionary.").style("font-size",".8em");return}this.dom.customTermDiv.append("div").style("margin-bottom","10px").style("font-size",".8em").text("Following custom variables are available in all charts where variables are used. Click one to delete.");for(const{name:t,tw:e}of this.state.customTerms){const s=this.dom.customTermDiv.append("div");s.text(t).attr("class","sja_filter_tag_btn").style("padding","3px 6px").style("border-radius","6px").style("margin-right","5px").on("click",(s=>{const r=()=>this.app.vocabApi.deleteCustomTerm(t);this.showGroupsMenu(s,e,r)}))}}newId(){this.lastId=T();return this.lastId}showGroupsMenu(t,e,s){const r=JSON.parse(JSON.stringify(e));this.tip.clear();const i=this.tip.d.append("div");const o=this?.lastId;i.append("div");W(this.tip,i,r,this.app,o,this.state,(()=>this.newId));if(this.state.supportedChartTypes.includes("DEanalysis")&&r.q.groups.length==2)M(i,this,this.state,r);if(this.state.supportedChartTypes.includes("survival"))Q("survival",i,"Compare survival",this.tip,r,o,this,true);if(this.state.supportedChartTypes.includes("cuminc"))Q("cuminc",i,"Compare cumulative incidence",this.tip,r,o,this,true);const a=i.append("div").attr("class","sja_menuoption sja_sharp_border").html("Summarize");a.insert("div").html("›").style("float","right");a.on("click",(async t=>{J(a,(t=>{U(t,r,this.app,o,(()=>this.newId))}),this.app,this.tip)}));i.append("div").attr("class","sja_menuoption sja_sharp_border").text("Delete variable").on("click",(t=>{s();this.tip.hide()}));this.tip.showunder(t.target)}}const $=l(O);function M(t,e,s,r,i){t.append("div").attr("class","sja_menuoption sja_sharp_border").text("Differential expression").on("click",(t=>{const i=[];for(const t of r.q.groups){if(t.values&&t.values.length>0){i.push(t)}else{throw"group does not contain samples for DE analysis"}}const o={chartType:"DEanalysis",state:s,samplelst:{groups:i}};e.tip.hide();e.app.dispatch({type:"plot_create",config:o})}))}function G(t){t.dom.filterTableDiv=t.dom.holder.append("div").style("margin-bottom","10px");const e=t.dom.holder.append("div");t.dom.addNewGroupBtnHolder=e.append("span").style("margin-right","20px");t.dom.newTermSpan=e.append("span");t.dom.newTermSpan.append("span").style("padding-left","15px").text("Add variable:");t.dom.newTermNameInput=t.dom.newTermSpan.append("input").attr("type","text");t.dom.launchButton=t.dom.newTermSpan.append("span").attr("class","sja_menuoption").on("click",(()=>F(t)));t.dom.noGroupSelected=e.append("span").text("No groups selected").style("opacity",.5);t.dom.customTermDiv=t.dom.holder.append("div").style("margin","20px").style("border-left","solid 1px black").style("padding","10px");t.dom.holder.on("click",(t=>{if(z)z.hide()}))}async function L(t){if(!t.filterPrompt)t.filterPrompt=await _({holder:t.dom.addNewGroupBtnHolder,vocabApi:t.app.vocabApi,emptyLabel:"Add group",termdbConfig:t.state.termdbConfig,callback:e=>{X(t.app,e,t.state.groups)},debug:t.opts.debug});t.filterPrompt.main(t.getMassFilter());const e=structuredClone(t.state.groups);if(!e.length){t.updateLaunchButton();t.dom.filterTableDiv.style("display","none");t.displayCustomTerms();return}t.dom.filterTableDiv.style("display","").selectAll("*").remove();const s={div:t.dom.filterTableDiv,columns:[{label:"NAME",editCallback:async(e,s)=>{const r=s.value;const i=t.state.groups.findIndex((t=>t.name==r));if(i!=-1){alert(`Group named ${r} already exists`);L(t)}else await t.app.dispatch({type:"rename_group",index:e,newName:s.value})}},{label:"COLOR",editCallback:async(e,s)=>{await t.app.dispatch({type:"change_color_group",index:e,newColor:s.color})}},{label:"#SAMPLE"},{label:"FILTER"}],columnButtons:[{text:"Delete",callback:(s,r)=>{const i=e[r];t.app.vocabApi.deleteGroup(i.name)}}],rows:[]};for(const r of e){s.rows.push([{value:r.name},{color:r.color},{value:"n="+await t.app.vocabApi.getFilteredSampleCount(r.filter)},{}])}t.selectedGroupsIdx.clear();if(e.length==1){t.selectedGroupsIdx.add(0)}else{s.noButtonCallback=(e,s)=>{if(s.checked)t.selectedGroupsIdx.add(e);else t.selectedGroupsIdx.delete(e);t.updateLaunchButton()};s.selectedRows=[];for(let r=0;r<e.length;r++){s.selectedRows.push(r);t.selectedGroupsIdx.add(r)}}w(s);for(const[r,i]of s.rows.entries()){const s=e[r];v({holder:i[3].__td,vocabApi:t.app.vocabApi,termdbConfig:t.state.termdbConfig,callback:r=>{if(!r||r.lst.length==0){const t=e.findIndex((t=>t.name==s.name));e.splice(t,1)}else{s.filter=r}t.app.dispatch({type:"app_refresh",state:{groups:e}})}}).main(s.filter)}t.updateLaunchButton();t.displayCustomTerms()}async function F(t){const e=[];for(const s of t.selectedGroupsIdx){const r=t.state.groups[s];if(r)e.push(r)}if(e.length==0)throw"No groups, should not happen";const s=t.dom.newTermNameInput.property("value");const r=await t.groups2samplelst(e);if(!r)return;r.term.name=s;t.app.vocabApi.addCustomTerm({name:s,tw:r});t.dom.newTermSpan.style("display","none")}function V(t){if(!t.termfilter?.filter||t.termfilter.filter.lst.length==0){return t.groups}const e=[];for(const s of t.groups){const r=h(structuredClone(t.termfilter.filter));const i=g(s.filter,"filterUiRoot");if(!i){e.push(s);continue}r.lst.push(i);r.join=r.lst.length>1?"and":"";const o={name:s.name,filter:r,color:s.color};e.push(o)}return e}async function H(t,e,s,r,i,o){let a={chartType:t,term:e,term2:s};if(i)a.insertBefore=i;if(o)a.id=o();await r.dispatch({type:"plot_create",config:a})}async function U(t,e,s,r,i){const o=t.term?t:{term:t};let a={chartType:"summary",childType:"barchart",term:o,term2:e};if(r)a.insertBefore=r;if(i)a.id=i();await s.dispatch({type:"plot_create",config:a})}let z;async function J(t,s,r,i,o={tree:{usecase:{target:"default",detail:"term"}}},a=true,n=true,l=[]){if(!z)z=new e({padding:0,offsetX:162,offsetY:-34,parent_menu:i.d.node()});z.clear();if(n)z.showunderoffset(t.node());else z.showunder(t.node());x({holder:z.d,vocabApi:r.vocabApi,state:o,tree:{disable_terms:l,click_term:t=>{s(t);z.hide();if(a)i.hide()}}})}function Q(t,e,s,r,i,o,a,n=false){const l=e.append("div").attr("class","sja_menuoption sja_sharp_border").html(`${s} ›`).on("click",(e=>{const s={tree:{usecase:{target:t,detail:"term"}}};if(t=="survival")s.nav={header_mode:"hide_search"};J(l,(e=>{H(t,e,i,a.app,o,n?()=>a.newId:null)}),a.app,r,s)}))}function W(t,e,s,r,i,o,a){if(o.matrixplots){for(const n of o.matrixplots){e.append("div").attr("class","sja_menuoption sja_sharp_border").text(n.name).on("click",(async()=>{const e=await r.vocabApi.getMatrixByName(n.name);e.divideBy=s;e.insertBefore=i;e.settings.matrix.colw=0;if(a)e.id=a();r.dispatch({type:"plot_create",config:e});t.hide()}))}}}function X(t,e,s){s=JSON.parse(JSON.stringify(s));let r="New group";let i=0;while(1){const t=r+(i==0?"":" "+i);if(!s.find((e=>e.name==t)))break;i++}r=r+(i==0?"":" "+i);const o={name:r,filter:e,color:c(N(s.length)).formatHex()};s.push(o);t.dispatch({type:"app_refresh",state:{groups:s}})}function Y(t){let e=0;let s=true;for(const r in t.term.values){const i=t.q.groups[e].values;t.term.values[r].list=i;if(i[0]&&"sample"in i[0])s=false;e++}const r={type:"tvslst",in:true,join:"",lst:[{type:"tvs",tvs:{term:t.term},noEdit:s}]};return r}function K(t){const e={name:"",index:0,items:[{sampleId:t}]};const s=Z([e],"",false);const r=Y(s);return r}function Z(t,e="groups",s=true){let r=true;const i={};const o=[];let a;for(const e of t){i[e.name]={key:e.name,label:e.name,color:e.color};a=l(e);const t={name:e.name,in:true,values:a};o.push(t)}if(t.length==1&&s){const e="Not in "+t[0].name;i[e]={key:e,label:e,color:"#aaa"};o.push({name:e,in:false,values:a})}const n={isAtomic:true,term:{name:e,type:"samplelst",values:i},q:{groups:o,groupsetting:{disabled:r}}};return n;function l(t){const e=[];for(const s of t.items){const t={sampleId:s.sampleId};if("sample"in s){r=false;t.sample=s.sample}e.push(t)}return e}}function tt(t){switch(t){case"../plots/DEanalysis.js":return import("./DEanalysis-b86d0874.js");case"../plots/Disco.js":return import("./Disco-16cd51c0.js");case"../plots/DziViewer.js":return import("./DziViewer-5c2d68e7.js");case"../plots/barchart.data.js":return import("./FilterRxComp-0e75dd8d.js").then((function(t){return t.y}));case"../plots/barchart.events.js":return import("./barchart.events-272fd122.js");case"../plots/barchart.js":return import("./barchart-e2af00a8.js");case"../plots/bars.renderer.js":return import("./bars.renderer-f0e5af5a.js");case"../plots/bars.settings.js":return import("./bars.settings-64bb4642.js");case"../plots/boxplot.js":return import("./boxplot-7de25274.js");case"../plots/brainImaging.js":return import("./brainImaging-007edaa3.js");case"../plots/controls.btns.js":return import("./controls.btns-bad9e4cf.js");case"../plots/controls.config.js":return import("./controls.config-e0f394cb.js");case"../plots/controls.divide.js":return import("./controls.divide-d8ac5a9b.js");case"../plots/controls.js":return import("./controls-8d4972c8.js");case"../plots/controls.overlay.js":return import("./controls.overlay-3ac8773d.js");case"../plots/controls.term1.js":return import("./controls.term1-008f4be4.js");case"../plots/cuminc.js":return import("./cuminc-72257faf.js");case"../plots/dataDownload.js":return import("./dataDownload-91da6dd6.js");case"../plots/dictionary.js":return import("./dictionary-48a38837.js");case"../plots/geneExpression.js":return import("./geneExpression-9ca2da4f.js");case"../plots/geneORA.js":return import("./geneORA-85850143.js");case"../plots/geneset.js":return import("./geneset-3b761b2c.js");case"../plots/genomeBrowser.controls.js":return import("./genomeBrowser.controls-f9b9bf42.js");case"../plots/genomeBrowser.js":return import("./genomeBrowser-2105a98f.js");case"../plots/hierCluster.config.js":return import("./hierCluster.config-3d124abf.js");case"../plots/hierCluster.interactivity.js":return import("./hierCluster.interactivity-3463cc0b.js").then((function(t){return t.i}));case"../plots/hierCluster.js":return import("./hierCluster-a7ff7f5a.js");case"../plots/hierCluster.renderers.js":return import("./hierCluster.renderers-668d0075.js").then((function(t){return t.r}));case"../plots/imagePlot.js":return import("./imagePlot-6d89200c.js");case"../plots/matrix.cells.js":return import("./matrix.cells-a5157233.js");case"../plots/matrix.cluster.js":return import("./matrix.cluster-acdfc6a7.js");case"../plots/matrix.config.js":return import("./matrix.config-cd01ebbd.js");case"../plots/matrix.controls.js":return import("./matrix.controls-86eb8d5c.js");case"../plots/matrix.data.js":return import("./matrix.data-e2d7ac16.js").then((function(t){return t.m}));case"../plots/matrix.dom.js":return import("./matrix.dom-e5f91cc0.js");case"../plots/matrix.groups.js":return import("./matrix.groups-f1969b5c.js").then((function(t){return t.m}));case"../plots/matrix.interactivity.js":return import("./matrix.interactivity-92bc8332.js");case"../plots/matrix.js":return import("./matrix-3d09a31f.js");case"../plots/matrix.layout.js":return import("./matrix.layout-29a8f334.js").then((function(t){return t.m}));case"../plots/matrix.legend.js":return import("./matrix.legend-8c28039e.js").then((function(t){return t.m}));case"../plots/matrix.renderers.js":return import("./matrix.renderers-3b8dfd04.js");case"../plots/matrix.serieses.js":return import("./matrix.serieses-e079f04a.js").then((function(t){return t.m}));case"../plots/matrix.sort.js":return import("./matrix.sort-e1f83454.js");case"../plots/matrix.sorterUi.js":return import("./matrix.sorterUi-2025f39d.js");case"../plots/plot.app.js":return import("./plot.app-91a1d78d.js");case"../plots/plot.brainImaging.js":return import("./plot.brainImaging-d2c23bb7.js");case"../plots/plot.disco.js":return import("./plot.disco-70d493f4.js");case"../plots/plot.ssgq.js":return import("./plot.ssgq-9d364d41.js");case"../plots/profileBarchart.js":return import("./profileBarchart-c104f8e2.js");case"../plots/profilePlot.js":return import("./profilePlot-5ce5b6a0.js");case"../plots/profilePolar.js":return import("./profilePolar-610213d4.js");case"../plots/profileRadar.js":return import("./profileRadar-fddb18f7.js");case"../plots/profileRadarFacility.js":return import("./profileRadarFacility-2c2db1dd.js");case"../plots/regression.inputs.js":return import("./regression.inputs-5718cf72.js").then((function(t){return t.b}));case"../plots/regression.inputs.term.js":return import("./regression.inputs-5718cf72.js").then((function(t){return t.a}));case"../plots/regression.inputs.values.table.js":return import("./regression.inputs.values.table-d587c1cf.js");case"../plots/regression.js":return import("./regression.inputs-5718cf72.js").then((function(t){return t.r}));case"../plots/regression.results.js":return import("./regression.results-748024be.js").then((function(t){return t.r}));case"../plots/sampleScatter.interactivity.js":return import("./sampleScatter.interactivity-e9c30652.js").then((function(t){return t.a}));case"../plots/sampleScatter.js":return import("./sampleScatter-031f47de.js").then((function(t){return t.a}));case"../plots/sampleScatter.renderer.js":return import("./sampleScatter-031f47de.js").then((function(t){return t.s}));case"../plots/sampleScatter.rendererThree.js":return import("./sampleScatter.rendererThree-3e6c032e.js").then((function(t){return t.c}));case"../plots/sampleView.js":return import("./sampleView-d6a91293.js");case"../plots/scatter.js":return import("./scatter-2e2c76f4.js");case"../plots/singleCellPlot.js":return import("./singleCellPlot-c7347a27.js");case"../plots/stattable.js":return import("./stattable-a7713026.js");case"../plots/summary.js":return import("./summary-592d8f81.js");case"../plots/survival.js":return import("./survival-450b6df4.js");case"../plots/table.js":return import("./table-bf604c50.js");case"../plots/variantBrowser.js":return import("./variantBrowser-05375469.js");case"../plots/violin.interactivity.js":return import("./violin.interactivity-534d6993.js");case"../plots/violin.js":return import("./violin-c1b78717.js");case"../plots/violin.renderer.js":return import("./violin.renderer-16540fb8.js");default:return new Promise((function(e,s){(typeof queueMicrotask==="function"?queueMicrotask:setTimeout)(s.bind(null,new Error("Unknown variable dynamic import: "+t)))}))}}function et(t){switch(t){case"../plots/DEanalysis.js":return import("./DEanalysis-b86d0874.js");case"../plots/Disco.js":return import("./Disco-16cd51c0.js");case"../plots/DziViewer.js":return import("./DziViewer-5c2d68e7.js");case"../plots/barchart.data.js":return import("./FilterRxComp-0e75dd8d.js").then((function(t){return t.y}));case"../plots/barchart.events.js":return import("./barchart.events-272fd122.js");case"../plots/barchart.js":return import("./barchart-e2af00a8.js");case"../plots/bars.renderer.js":return import("./bars.renderer-f0e5af5a.js");case"../plots/bars.settings.js":return import("./bars.settings-64bb4642.js");case"../plots/boxplot.js":return import("./boxplot-7de25274.js");case"../plots/brainImaging.js":return import("./brainImaging-007edaa3.js");case"../plots/controls.btns.js":return import("./controls.btns-bad9e4cf.js");case"../plots/controls.config.js":return import("./controls.config-e0f394cb.js");case"../plots/controls.divide.js":return import("./controls.divide-d8ac5a9b.js");case"../plots/controls.js":return import("./controls-8d4972c8.js");case"../plots/controls.overlay.js":return import("./controls.overlay-3ac8773d.js");case"../plots/controls.term1.js":return import("./controls.term1-008f4be4.js");case"../plots/cuminc.js":return import("./cuminc-72257faf.js");case"../plots/dataDownload.js":return import("./dataDownload-91da6dd6.js");case"../plots/dictionary.js":return import("./dictionary-48a38837.js");case"../plots/geneExpression.js":return import("./geneExpression-9ca2da4f.js");case"../plots/geneORA.js":return import("./geneORA-85850143.js");case"../plots/geneset.js":return import("./geneset-3b761b2c.js");case"../plots/genomeBrowser.controls.js":return import("./genomeBrowser.controls-f9b9bf42.js");case"../plots/genomeBrowser.js":return import("./genomeBrowser-2105a98f.js");case"../plots/hierCluster.config.js":return import("./hierCluster.config-3d124abf.js");case"../plots/hierCluster.interactivity.js":return import("./hierCluster.interactivity-3463cc0b.js").then((function(t){return t.i}));case"../plots/hierCluster.js":return import("./hierCluster-a7ff7f5a.js");case"../plots/hierCluster.renderers.js":return import("./hierCluster.renderers-668d0075.js").then((function(t){return t.r}));case"../plots/imagePlot.js":return import("./imagePlot-6d89200c.js");case"../plots/matrix.cells.js":return import("./matrix.cells-a5157233.js");case"../plots/matrix.cluster.js":return import("./matrix.cluster-acdfc6a7.js");case"../plots/matrix.config.js":return import("./matrix.config-cd01ebbd.js");case"../plots/matrix.controls.js":return import("./matrix.controls-86eb8d5c.js");case"../plots/matrix.data.js":return import("./matrix.data-e2d7ac16.js").then((function(t){return t.m}));case"../plots/matrix.dom.js":return import("./matrix.dom-e5f91cc0.js");case"../plots/matrix.groups.js":return import("./matrix.groups-f1969b5c.js").then((function(t){return t.m}));case"../plots/matrix.interactivity.js":return import("./matrix.interactivity-92bc8332.js");case"../plots/matrix.js":return import("./matrix-3d09a31f.js");case"../plots/matrix.layout.js":return import("./matrix.layout-29a8f334.js").then((function(t){return t.m}));case"../plots/matrix.legend.js":return import("./matrix.legend-8c28039e.js").then((function(t){return t.m}));case"../plots/matrix.renderers.js":return import("./matrix.renderers-3b8dfd04.js");case"../plots/matrix.serieses.js":return import("./matrix.serieses-e079f04a.js").then((function(t){return t.m}));case"../plots/matrix.sort.js":return import("./matrix.sort-e1f83454.js");case"../plots/matrix.sorterUi.js":return import("./matrix.sorterUi-2025f39d.js");case"../plots/plot.app.js":return import("./plot.app-91a1d78d.js");case"../plots/plot.brainImaging.js":return import("./plot.brainImaging-d2c23bb7.js");case"../plots/plot.disco.js":return import("./plot.disco-70d493f4.js");case"../plots/plot.ssgq.js":return import("./plot.ssgq-9d364d41.js");case"../plots/profileBarchart.js":return import("./profileBarchart-c104f8e2.js");case"../plots/profilePlot.js":return import("./profilePlot-5ce5b6a0.js");case"../plots/profilePolar.js":return import("./profilePolar-610213d4.js");case"../plots/profileRadar.js":return import("./profileRadar-fddb18f7.js");case"../plots/profileRadarFacility.js":return import("./profileRadarFacility-2c2db1dd.js");case"../plots/regression.inputs.js":return import("./regression.inputs-5718cf72.js").then((function(t){return t.b}));case"../plots/regression.inputs.term.js":return import("./regression.inputs-5718cf72.js").then((function(t){return t.a}));case"../plots/regression.inputs.values.table.js":return import("./regression.inputs.values.table-d587c1cf.js");case"../plots/regression.js":return import("./regression.inputs-5718cf72.js").then((function(t){return t.r}));case"../plots/regression.results.js":return import("./regression.results-748024be.js").then((function(t){return t.r}));case"../plots/sampleScatter.interactivity.js":return import("./sampleScatter.interactivity-e9c30652.js").then((function(t){return t.a}));case"../plots/sampleScatter.js":return import("./sampleScatter-031f47de.js").then((function(t){return t.a}));case"../plots/sampleScatter.renderer.js":return import("./sampleScatter-031f47de.js").then((function(t){return t.s}));case"../plots/sampleScatter.rendererThree.js":return import("./sampleScatter.rendererThree-3e6c032e.js").then((function(t){return t.c}));case"../plots/sampleView.js":return import("./sampleView-d6a91293.js");case"../plots/scatter.js":return import("./scatter-2e2c76f4.js");case"../plots/singleCellPlot.js":return import("./singleCellPlot-c7347a27.js");case"../plots/stattable.js":return import("./stattable-a7713026.js");case"../plots/summary.js":return import("./summary-592d8f81.js");case"../plots/survival.js":return import("./survival-450b6df4.js");case"../plots/table.js":return import("./table-bf604c50.js");case"../plots/variantBrowser.js":return import("./variantBrowser-05375469.js");case"../plots/violin.interactivity.js":return import("./violin.interactivity-534d6993.js");case"../plots/violin.js":return import("./violin-c1b78717.js");case"../plots/violin.renderer.js":return import("./violin.renderer-16540fb8.js");default:return new Promise((function(e,s){(typeof queueMicrotask==="function"?queueMicrotask:setTimeout)(s.bind(null,new Error("Unknown variable dynamic import: "+t)))}))}}function st(t){switch(t){case"../plots/DEanalysis.js":return import("./DEanalysis-b86d0874.js");case"../plots/Disco.js":return import("./Disco-16cd51c0.js");case"../plots/DziViewer.js":return import("./DziViewer-5c2d68e7.js");case"../plots/barchart.data.js":return import("./FilterRxComp-0e75dd8d.js").then((function(t){return t.y}));case"../plots/barchart.events.js":return import("./barchart.events-272fd122.js");case"../plots/barchart.js":return import("./barchart-e2af00a8.js");case"../plots/bars.renderer.js":return import("./bars.renderer-f0e5af5a.js");case"../plots/bars.settings.js":return import("./bars.settings-64bb4642.js");case"../plots/boxplot.js":return import("./boxplot-7de25274.js");case"../plots/brainImaging.js":return import("./brainImaging-007edaa3.js");case"../plots/controls.btns.js":return import("./controls.btns-bad9e4cf.js");case"../plots/controls.config.js":return import("./controls.config-e0f394cb.js");case"../plots/controls.divide.js":return import("./controls.divide-d8ac5a9b.js");case"../plots/controls.js":return import("./controls-8d4972c8.js");case"../plots/controls.overlay.js":return import("./controls.overlay-3ac8773d.js");case"../plots/controls.term1.js":return import("./controls.term1-008f4be4.js");case"../plots/cuminc.js":return import("./cuminc-72257faf.js");case"../plots/dataDownload.js":return import("./dataDownload-91da6dd6.js");case"../plots/dictionary.js":return import("./dictionary-48a38837.js");case"../plots/geneExpression.js":return import("./geneExpression-9ca2da4f.js");case"../plots/geneORA.js":return import("./geneORA-85850143.js");case"../plots/geneset.js":return import("./geneset-3b761b2c.js");case"../plots/genomeBrowser.controls.js":return import("./genomeBrowser.controls-f9b9bf42.js");case"../plots/genomeBrowser.js":return import("./genomeBrowser-2105a98f.js");case"../plots/hierCluster.config.js":return import("./hierCluster.config-3d124abf.js");case"../plots/hierCluster.interactivity.js":return import("./hierCluster.interactivity-3463cc0b.js").then((function(t){return t.i}));case"../plots/hierCluster.js":return import("./hierCluster-a7ff7f5a.js");case"../plots/hierCluster.renderers.js":return import("./hierCluster.renderers-668d0075.js").then((function(t){return t.r}));case"../plots/imagePlot.js":return import("./imagePlot-6d89200c.js");case"../plots/matrix.cells.js":return import("./matrix.cells-a5157233.js");case"../plots/matrix.cluster.js":return import("./matrix.cluster-acdfc6a7.js");case"../plots/matrix.config.js":return import("./matrix.config-cd01ebbd.js");case"../plots/matrix.controls.js":return import("./matrix.controls-86eb8d5c.js");case"../plots/matrix.data.js":return import("./matrix.data-e2d7ac16.js").then((function(t){return t.m}));case"../plots/matrix.dom.js":return import("./matrix.dom-e5f91cc0.js");case"../plots/matrix.groups.js":return import("./matrix.groups-f1969b5c.js").then((function(t){return t.m}));case"../plots/matrix.interactivity.js":return import("./matrix.interactivity-92bc8332.js");case"../plots/matrix.js":return import("./matrix-3d09a31f.js");case"../plots/matrix.layout.js":return import("./matrix.layout-29a8f334.js").then((function(t){return t.m}));case"../plots/matrix.legend.js":return import("./matrix.legend-8c28039e.js").then((function(t){return t.m}));case"../plots/matrix.renderers.js":return import("./matrix.renderers-3b8dfd04.js");case"../plots/matrix.serieses.js":return import("./matrix.serieses-e079f04a.js").then((function(t){return t.m}));case"../plots/matrix.sort.js":return import("./matrix.sort-e1f83454.js");case"../plots/matrix.sorterUi.js":return import("./matrix.sorterUi-2025f39d.js");case"../plots/plot.app.js":return import("./plot.app-91a1d78d.js");case"../plots/plot.brainImaging.js":return import("./plot.brainImaging-d2c23bb7.js");case"../plots/plot.disco.js":return import("./plot.disco-70d493f4.js");case"../plots/plot.ssgq.js":return import("./plot.ssgq-9d364d41.js");case"../plots/profileBarchart.js":return import("./profileBarchart-c104f8e2.js");case"../plots/profilePlot.js":return import("./profilePlot-5ce5b6a0.js");case"../plots/profilePolar.js":return import("./profilePolar-610213d4.js");case"../plots/profileRadar.js":return import("./profileRadar-fddb18f7.js");case"../plots/profileRadarFacility.js":return import("./profileRadarFacility-2c2db1dd.js");case"../plots/regression.inputs.js":return import("./regression.inputs-5718cf72.js").then((function(t){return t.b}));case"../plots/regression.inputs.term.js":return import("./regression.inputs-5718cf72.js").then((function(t){return t.a}));case"../plots/regression.inputs.values.table.js":return import("./regression.inputs.values.table-d587c1cf.js");case"../plots/regression.js":return import("./regression.inputs-5718cf72.js").then((function(t){return t.r}));case"../plots/regression.results.js":return import("./regression.results-748024be.js").then((function(t){return t.r}));case"../plots/sampleScatter.interactivity.js":return import("./sampleScatter.interactivity-e9c30652.js").then((function(t){return t.a}));case"../plots/sampleScatter.js":return import("./sampleScatter-031f47de.js").then((function(t){return t.a}));case"../plots/sampleScatter.renderer.js":return import("./sampleScatter-031f47de.js").then((function(t){return t.s}));case"../plots/sampleScatter.rendererThree.js":return import("./sampleScatter.rendererThree-3e6c032e.js").then((function(t){return t.c}));case"../plots/sampleView.js":return import("./sampleView-d6a91293.js");case"../plots/scatter.js":return import("./scatter-2e2c76f4.js");case"../plots/singleCellPlot.js":return import("./singleCellPlot-c7347a27.js");case"../plots/stattable.js":return import("./stattable-a7713026.js");case"../plots/summary.js":return import("./summary-592d8f81.js");case"../plots/survival.js":return import("./survival-450b6df4.js");case"../plots/table.js":return import("./table-bf604c50.js");case"../plots/variantBrowser.js":return import("./variantBrowser-05375469.js");case"../plots/violin.interactivity.js":return import("./violin.interactivity-534d6993.js");case"../plots/violin.js":return import("./violin-c1b78717.js");case"../plots/violin.renderer.js":return import("./violin.renderer-16540fb8.js");default:return new Promise((function(e,s){(typeof queueMicrotask==="function"?queueMicrotask:setTimeout)(s.bind(null,new Error("Unknown variable dynamic import: "+t)))}))}}const rt="_MASS_AUTOID_"+Math.random().toString().slice(-6);let it=(+new Date).toString().slice(-8);function ot(){return rt+"_"+it++}const at=new Set(["with_tabs","hidden","search_only","hide_search","only_buttons","with_cohortHtmlSelect"]);const nt={nav:{header_mode:"with_tabs",activeTab:0},activeCohort:0,search:{isVisible:true},plots:[],termfilter:{filter:{type:"tvslst",in:true,join:"",lst:[]}},reuse:{customTermQ:{byId:{},byName:{}}},groups:[],customTerms:[],autoSave:true};class lt{constructor(t){this.type="store";this.defaultState=nt;this.prevGeneratedId=0}validateOpts(t){const e=t.state;if(e.vocab.dslabel){if(!e.vocab.genome)throw".state[.vocab].genome missing"}else{if(!Array.isArray(e.vocab.terms))throw"vocab.terms must be an array of objects"}}validateState(){if(!at.has(this.state.nav.header_mode))throw"invalid state.nav.header_mode"}async init(){try{this.state.termdbConfig=await this.app.vocabApi.getTermdbConfig();await this.setTermfilter();await this.rehydrateGroups();await this.app.vocabApi.main({termfilter:JSON.parse(JSON.stringify(this.state.termfilter)),termdbConfig:this.state.termdbConfig});for(const[t,e]of this.state.plots.entries()){const s=await st(`../plots/${e.chartType}.js`);const r=await s.getPlotConfig(e,this.app);this.state.plots[t]=r;if(!("id"in r))r.id=`_AUTOID_${it++}_${t}`;if(r.mayAdjustConfig)r.mayAdjustConfig(r)}}catch(t){throw t}}setId(t){t.$id=this.prevGeneratedId++;if(t.$lst){for(const e of t.$lst){this.setId(e)}}}async setTermfilter(){let t=g(this.state.termfilter.filter,"filterUiRoot");if(!t){this.state.termfilter.filter.tag="filterUiRoot";t=this.state.termfilter.filter}await Promise.all(pt(this.state.termfilter.filter,this.app.vocabApi));if(!this.state.termdbConfig.selectCohort){this.state.activeCohort=-1;if(this.state.activeTab===0)this.state.activeTab=1;if(this.state.nav.header_mode==="with_cohortHtmlSelect"){console.warn(`no termdbConfig.selectCohort to use for nav.header_mode = 'with_cohortHtmlSelect'`);this.state.nav.header_mode="search_only"}}else{let e=g(this.state.termfilter.filter,"cohortFilter");if(!e){e={tag:"cohortFilter",type:"tvs",tvs:{term:JSON.parse(JSON.stringify(this.state.termdbConfig.selectCohort.term)),values:this.state.activeCohort==-1?[]:this.state.termdbConfig.selectCohort.values[this.state.activeCohort].keys.map((t=>({key:t,label:t})))}};this.state.termfilter.filter={type:"tvslst",in:true,join:"and",lst:[e,t]}}else{const t=(t,e)=>t<e?-1:1;e.tvs.values.sort(((t,e)=>t.key<e.key?-1:1));const s=JSON.stringify(e.tvs.values.map((t=>t.key)).sort(t));const r=this.state.termdbConfig.selectCohort.values.findIndex((e=>s==JSON.stringify(e.keys.sort(t))));if(this.state.activeCohort!==-1&&this.state.activeCohort!==0&&r!==this.state.activeCohort){console.log("Warning: cohortFilter will override the state.activeCohort due to mismatch")}this.state.activeCohort=r}}}async rehydrateGroups(){const t=[];for(const e of this.state.groups){t.push(...pt(e.filter,this.app.vocabApi))}await Promise.all(t)}}function pt(t,e,s=[]){if(t.type=="tvslst"){for(const r of t.lst)pt(r,e,s)}else if(t.type=="tvs"){if(!t.tvs.term.name)s.push(e.getterm(t.tvs.term.id).then((e=>{t.tvs.term=e})))}else{throw`cannot rehydrate filter.type='${t.type}'`}return s}lt.prototype.actions={app_refresh(t={}){this.state=this.copyMerge(this.toJson(this.state),t.state||{});const e=new Set;if(t.subactions){for(const s of t.subactions){this.actions[s.type].call(this,s);if(s.type.startsWith("plot_"))e.add(s.id)}}for(const s in this.state.plots){if(s.mayAdjustConfig&&!e.has(s.id)){s.mayAdjustConfig(s,t.config)}}},tab_set(t){this.state.nav.activeTab=t.activeTab},cohort_set(t){this.state.activeCohort=t.activeCohort;const e=this.state.termdbConfig.selectCohort.values[t.activeCohort];const s=g(this.state.termfilter.filter,"cohortFilter");if(!s)throw`No item tagged with 'cohortFilter'`;s.tvs.values=e.keys.map((t=>({key:t,label:t})))},async plot_prep(t){const e={id:"id"in t?t.id:ot()};if(!t.config)throw".config{} missing for plot_prep";if(t.config.chartType&&Object.keys(t.config).length==1){const e=await et(`../plots/${t.config.chartType}.js`);const s=await e.getPlotConfig(t.config,this.app);t.config=Object.assign(s,t.config)}Object.assign(e,t.config);this.state.plots.push(e)},async plot_create(t){const e=await tt(`../plots/${t.config.chartType}.js`);const s=await e.getPlotConfig(t.config,this.app);if(!("id"in t))t.id=ot();s.id=t.id;if(s.mayAdjustConfig){s.mayAdjustConfig(s,t.config)}this.state.plots.push(s)},plot_edit(t){const e=this.state.plots.find((e=>e.id===t.id));if(!e)throw`missing plot id='${t.id}' in store.plot_edit()`;this.copyMerge(e,t.config,t.opts?t.opts:{});if(e.mayAdjustConfig){e.mayAdjustConfig(e,t.config)}ut(e,this.app.vocabApi);if(t.config&&"cutoff"in t.config){e.cutoff=t.config.cutoff}else{delete e.cutoff}},plot_delete(t){const e=this.state.plots.findIndex((e=>e.id===t.id));if(e!==-1)this.state.plots.splice(e,1)},plot_nestedEdits(t){const e=this.state.plots.find((e=>e.id===t.id));if(!e)throw`missing plot id='${t.id}' in store.plot_edit_nested`;for(const s of t.edits){const t=s.nestedKeys.pop();const r=s.nestedKeys.reduce(((t,e)=>t[e]),e);r[t]=s.value}ut(e,this.app.vocabApi)},async plot_splice(t){for(const e of t.subactions){await this.actions[e.type].call(this,e)}},filter_replace(t){if("filter0"in t){this.state.termfilter.filter0=t.filter0;return}const e=t.filter?t.filter:{type:"tvslst",join:"",in:1,lst:[]};if(!t.filter.tag){this.state.termfilter.filter=e}else{const s=g(this.state.termfilter.filter,t.filter.tag);if(!s)throw`cannot replace missing filter with tag '${t.filter.tag}'`;const r=j(this.state.termfilter.filter,s.$id);if(r==s){this.state.termfilter.filter=e}else{const t=r.lst.indexOf(s);r.lst[t]=e}}},cache_termq({termId:t,q:e}){if(!t)throw`missing termId for caching custom term.q`;if(!e?.reuseId)throw`missing or empty tw.q.reuseId as cache identifier for term='${t}'`;const s=this.state.reuse.customTermQ.byId;if(!s[t])s[t]={};s[t][e.reuseId]=e;for(const t of this.state.plots){if(!(t.chartType in dt))continue;const s=dt[t.chartType](t);for(const t of s){if(t?.q?.reuseId===e.reuseId)t.q=e}}},uncache_termq({term:t,q:e}){if(!t.id)throw`missing term.id for uncaching custom term.q`;if(!e.reuseId)throw`missing qname as uncache identifier for term.id='${t.id}'`;const s=this.state.reuse.customTermQ.byId[t.id];if(!s)throw`missing term.q cache for term.id='${t.id}`;if(!(e.reuseId in s))console.warn(`q.reuseId='${e.cacheid}' not cached for term.id='${t.id}'`);else{delete s[e.reuseId];for(const t of this.state.plots){if(!(t.chartType in dt))continue;const s=dt[t.chartType](t);for(const t of s){if(t.q.reuseId===e.reuseId){delete t.q.reuseId;delete t.q.name}}}}},add_customTerm(t){this.state.customTerms.push(t.obj)},delete_customTerm({name:t}){const e=this.state.customTerms.findIndex((e=>e.name==t));if(e!=-1)this.state.customTerms.splice(e,1)},add_group(t){if(this.state.nav.header_mode!="hidden"){const e=t.obj;const s=`Group ${this.state.groups.length+1}`;const r=Z([e]);const i={name:s,filter:Y(r),plotId:e.plotId};this.state.groups.push(i);this.state.nav.activeTab=1}else if("plotId"in t.obj){const e=this.state.plots.find((e=>e.id==t.obj.plotId));if(e.groups){t.obj.index=e.groups.length;t.obj.name=`Group ${e.groups.length+1}`;e.groups.push(t.obj)}}},rename_group(t){const e=t.index;const s=t.newName;if(this.state.nav.header_mode!="hidden"){this.state.groups[e].name=s}else{for(const t of this.state.plots){if(t?.groups){t.groups[e].name=s}}}},change_color_group(t){const e=t.index;const s=t.newColor;if(this.state.nav.header_mode!="hidden"){this.state.groups[e].color=s}else{for(const t of this.state.plots){if(t?.groups){t.groups[e].color=s}}}},delete_group({name:t}){if(this.state.nav.header_mode!="hidden"){const e=this.state.groups.findIndex((e=>e.name==t));if(e!=-1)this.state.groups.splice(e,1)}else{for(const e of this.state.plots){if(e?.groups){const s=e.groups.findIndex((e=>e.name==t));if(s!=-1)e.groups.splice(s,1)}}}}};const ct=t=>[t.term0,t.term,t.term2].filter((t=>!!t));const dt={summary:ct,survival:ct,cuminc:ct,regression:t=>[t.outcome,...t.independent].filter((t=>!!t)),matrix:t=>t.termgroups.reduce(((t,e)=>{t.push(...e.lst);return t}),[])};const mt=d(lt);function ut(t,e){if(!("id"in t))throw"plot error: plot.id missing";try{if(t.chartType=="regression"){ht(t,e)}else if(t.chartType=="matrix"||t.chartType=="hierCluster"){if(!t.termgroups)throw`plot error: missing the config.termgroups for '${t.chartType}'`;if(!Array.isArray(t.termgroups))`plot error: config.termgroups must be an array '${t.chartType}'`;if(!t.samplegroups)throw`plot error: missing the config.samplegroups for '${t.chartType}'`;if(!Array.isArray(t.samplegroups))`plot error: config.samplegroups must be an array '${t.chartType}'`}else if(t.chartType=="dataDownload"){if(!t.terms)throw`plot error: missing the config.terms for '${t.chartType}'`;if(!Array.isArray(t.terms))`plot error: config.terms must be an array '${t.chartType}'`;for(const s of t.terms){gt(s,e)}}else if(t.chartType=="sampleScatter"){if(!t.name)throw`plot error: missing the plot name for '${t.chartType}'`;if(!t.colorTW)`plot error: missing the plot color term wrapper for '${t.chartType}'`;if(!t.file)`plot error: missing the plot coordinates file for '${t.chartType}'`}else if(t.chartType=="genomeBrowser"){}else if(t.chartType=="Disco"){}else if(t.chartType=="profileBarchart"){}else if(t.chartType=="profilePolar"||t.chartType=="polar"){}else if(t.chartType=="DEanalysis"){}else if(t.chartType=="geneORA"){}else if(t.chartType=="sampleView"){}else if(t.chartType=="profileRadar"||t.chartType=="profileRadarFacility"){}else if(t.chartType=="singleCellPlot"){}else if(t.chartType=="brainImaging"){}else{ft(t,e)}}catch(t){throw t}}function ft(t,e){try{if(t.term)gt(t.chartType=="regression"?t.outcome:t.term,e)}catch(t){throw"plot.term error: "+t}if(t.term2){try{gt(t.term2,e)}catch(t){throw"plot.term2 error: "+t}if(t.term.term.type=="condition"&&t.term.term.id==t.term2.term.id){if(t.term.q.bar_by_grade&&t.term2.q.bar_by_grade)throw"plot error: term2 is the same CHC, but both cannot be using bar_by_grade";if(t.term.q.bar_by_children&&t.term2.q.bar_by_children)throw"plot error: term2 is the same CHC, but both cannot be using bar_by_children"}}if(t.term0){try{gt(t.term0,e)}catch(t){throw"plot.term0 error: "+t}}}function ht(t,e){if(!t.outcome)throw"plot error: plot.outcome{} not an object";try{gt(t.chartType=="regression"?t.outcome:t.term,e)}catch(t){throw"plot.outcome error: "+t}if(t.independent){for(const s of t.independent){gt(s,e)}}}function gt(t,e){if(!t.term)throw".term{} missing";if(!e.graphable(t.term))throw".term is not graphable (not a valid type)";if(!t.term.name)throw".term.name missing";if(!t.q)throw".q{} missing";switch(t.term.type){case"integer":case"float":case"survival":break;case"categorical":if(t.q.groupsetting&&!t.q.groupsetting.disabled){if(!t.term.values)throw".values{} missing when groupsetting is allowed"}break;case"condition":if(!t.term.values)throw".values{} missing";if(!t.q.bar_by_grade&&!t.q.bar_by_children)throw"neither q.bar_by_grade or q.bar_by_children is set to true";if(!t.q.value_by_max_grade&&!t.q.value_by_most_recent&&!t.q.value_by_computable_grade)throw"neither q.value_by_max_grade or q.value_by_most_recent or q.value_by_computable_grade is true";break;case"snplst":case"snplocus":case"geneVariant":break;case"samplelst":break;case b.GENE_EXPRESSION:break;case b.METABOLITE_INTENSITY:break;default:if(t.term.isgenotype){console.log('to add in type:"genotype"');break}throw`unknown term type='${t.term.type}'`}}class jt{constructor(t={}){this.type="recover";this.initialHolderDisplay=t.holder.style("display");this.dom={holder:t.holder,btnDiv:t.holder.append("div").style("position","sticky").style("top","12px").style("right","20px").style("margin",t.margin?t.margin:"10px").style("text-align","right")};this.hasStatePreMain=true;this.reactsTo=t.reactsTo||(()=>true);this.getState=t.getState||(t=>t);this.debouncedTrack=()=>{this.trackPending=true;this.trackState();this.render()};this.wait="wait"in t?t.wait:800;this.maxHistoryLen=t.maxHistoryLen||10}preApiFreeze(t){t.replaceLastState=t=>{if(this.isRecovering)return;this.state=this.getState(t);if(!this.trackPending)this.history[this.currIndex]=this.state}}init(){this.app.register(this.api);this.currIndex=-1;this.history=[];this.isActive=!isNaN(this.maxHistoryLen)&&+this.maxHistoryLen>0;if(this.isActive){yt(this);this.initUi()}this.eventTypes=["postInit","postRender"]}async main(){if(!this.isActive)return;if(this.opts.hide?.(this.state)){this.dom.holder.style("display","none");return}this.dom.holder.style("display",this.initialHolderDisplay||"");if(!this.timedTrack){this.trackState();this.trackPending=true;this.timedTrack=setTimeout((()=>{}),this.wait);return}clearTimeout(this.timedTrack);this.trackPending=true;this.timedTrack=setTimeout(this.debouncedTrack,this.wait)}trackState(){if(this.isRecovering){this.isRecovering=false;return}if(this.state._scope_=="none")return;this.isRecovering=false;const t=this.opts.adjustTrackedState?this.opts.adjustTrackedState(this.state):this.state;if(!t){console.error("no state to track");return}if(!Object.isFrozen(t))m(t);if(this.currIndex==-1)this.origState=t;if(this.currIndex<this.history.length-1){this.history.splice(this.currIndex,this.history.length-(this.currIndex+1))}if(u(t,this.history[this.history.length-1]))return;this.history.push(t);this.currIndex+=1;if(this.history.length>this.maxHistoryLen){this.history.splice(1,1);this.currIndex+=-1}this.trackPending=false}goto(t){if(t<0&&this.currIndex+t>-1)this.currIndex+=t;else if(t>0&&this.currIndex+t<this.history.length)this.currIndex+=t;else return;this.isRecovering=true;const e=this.history[this.currIndex];this.render();if(this.opts.plot_id){const t=structuredClone(e);this.app.dispatch({type:"plot_edit",id:this.opts.plot_id,config:t.config,_scope_:t._scope_})}else{this.app.dispatch({type:"app_refresh",state:e})}}reset(){this.currIndex=0;this.isRecovering=true;const t=this.origState;if(this.opts.plot_id){const e=t.plots.find((t=>t.id===this.opts.plot_id));this.app.dispatch({type:"plot_edit",id:this.opts.plot_id,config:structuredClone(e)})}else this.app.dispatch({type:"app_refresh",state:t})}}const bt=l(jt);function yt(t){t.initUi=function(){t.dom.undoBtn=t.dom.btnDiv.append("button").attr("title","undo the previous action").property("disabled",true).style("margin","0 0 0 4px").style("border","1px solid #ccc").style("vertical-align","middle").html(t.opts.undoHtml||`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="#000" class="bi bi-arrow-counterclockwise" viewBox="0 0 16 16" style='vertical-align: middle'>\n\t\t\t <path stroke='#000' stroke-width='0.25' fill-rule="evenodd" d="M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2v1z"/>\n\t\t\t <path d="M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466z"/>\n\t\t\t</svg>`).on("click",(()=>t.goto(-1)));t.dom.redoBtn=t.dom.btnDiv.append("button").attr("title","redo a subsequent action").property("disabled",true).style("margin",t.opts.resetHtml?"0":"0 4px 0 0").style("border","1px solid #ccc").style("vertical-align","middle").html(t.opts.redoHtml||`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="#000" class="bi bi-arrow-clockwise" viewBox="0 0 16 16" style='vertical-align: middle'>\n\t\t\t <path stroke='#000' stroke-width='0.25' fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z"/>\n\t\t\t <path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z"/>\n\t\t\t</svg>`).on("click",(()=>t.goto(1)));if(t.opts.resetHtml)t.dom.resetBtn=t.dom.btnDiv.append("button").attr("title","Restore the initial rendered state").property("disabled",true).style("margin","0 4px 0 0").style("border","1px solid #ccc").style("vertical-align","middle").html(t.opts.resetHtml).on("click",(()=>t.reset()))};t.render=function(){if(t.dom.undoBtn)t.dom.undoBtn.property("disabled",t.currIndex<1||t.history.length===1);if(t.dom.redoBtn)t.dom.redoBtn.property("disabled",t.history.length<2||t.currIndex>=t.history.length-1);if(t.dom.resetBtn)t.dom.resetBtn.property("disabled",t.currIndex===0)}}export{Y as a,Z as b,B as c,W as d,Q as e,J as f,$ as g,X as h,A as i,V as j,k,K as l,U as o,bt as r,mt as s};
|
|
1
|
+
import{aB as t,M as e,aC as s,aD as r,q as i,E as o,aE as a,O as n,az as l,aF as p,x as c,aG as m,aH as d,aI as u}from"./app-71453429.js";import{F as h,g as f,a as g,f as j,T as b,N as y}from"./FilterRxComp-fc769f34.js";import{f as v}from"./FilterStateless-8f30f856.js";import{appInit as x}from"./app-fb676934.js";import{r as w}from"./table-1dae543a.js";import{g as T}from"./termsetting-636d2271.js";class C extends h{constructor(t){super(t);this.api={main:this.main.bind(this),getNormalRoot:()=>f(this.rawFilter),getPromise:t=>this.promises[t]};if(t.debug)this.api.Inner=this}async main(t,e={}){this.dom.controlsTip.hide();this.dom.treeTip.hide();const s="activeCohort"in e?e.activeCohort:this.activeCohort;const r=g(t,"filterUiRoot");if(r)delete r.tag;t.lst.push({tag:"filterUiRoot",type:"tvslst",join:"",lst:[]});t.join=t.lst.length>1?"and":"";const i=JSON.stringify(t);if(this.rawCopy==i&&JSON.stringify(this.activeCohort)==JSON.stringify(s))return;await super.main(i,e)}refresh(t){this.dom.controlsTip.hide();this.dom.treeTip.hide();const e=JSON.parse(JSON.stringify(this.rawFilter));const s=j(e,this.filter.$id);if(!s||this.rawFilter.$id===this.filter.$id){this.opts.callback(e)}else{const r=s.lst.findIndex((t=>t.$id==this.filter.$id));s.lst[r]=t;this.opts.callback(e)}const r=e.lst.findIndex((e=>e.$id===t.$id));e.lst.splice(r,1);this.main(e)}}const _=t(C);function k(t){const{holder:l,genome:p,mode:c,callback:m,vocabApi:d,titleText:u,minNumGenes:h}=t;let f=structuredClone(t.geneList||[]);const g=new e({padding:"0px",parent_menu:l.node(),test:"test"});l.selectAll("*").remove();const j=l.append("div").style("padding","5px");const b=structuredClone(f);const y=JSON.stringify(f.map((t=>t.gene)).sort());if(u){j.append("div").style("margin-bottom","10px").html(u)}const v={dom:{tdbBtns:{},holder:j,loadBtn:null,clearBtn:null,restoreBtn:null,geneHoldingDiv:null,statLegendDiv:null,submitBtn:null},params:[],statColor2label:null,destroy(){t.holder.remove()}};const x=j.append("div");const w=x.append("label");w.append("span").html("Search");const T=w.append("span");const C=s({tip:g,genome:p,row:T,geneOnly:true,callback:P,hideHelp:true,focusOff:true});const _=x.append("div").style("display","inline-flex").style("align-items","center").style("float","right").style("gap","5px");v.dom.geneHoldingDiv=j.append("div").append("div").style("display","flex").style("flex-wrap","wrap").style("gap","5px").style("min-height","20px").style("border","solid 1px #aaa").style("margin","10px 0px").style("padding","6px 2px").style("min-height","30px");v.dom.statLegendDiv=j.append("div");const k=j.append("div").style("margin-top","10px");const S=k.append("button").property("disabled",!(f===null||f===void 0?void 0:f.length)).text(`Submit`).on("click",(()=>{m({geneList:f})}));v.dom.submitBtn=S;function I(){var e,s,i,o,a,n;_.selectAll("*").remove();if(c=="expression"&&((s=(e=d.termdbConfig)===null||e===void 0?void 0:e.queries)===null||s===void 0?void 0:s.topVariablyExpressedGenes)){if(d.termdbConfig.queries.topVariablyExpressedGenes.arguments){for(const t of d.termdbConfig.queries.topVariablyExpressedGenes.arguments)E(t)}_.append("button").style("white-space","nowrap").text("Load top variably expressed genes").on("click",(t=>r(this,void 0,void 0,(function*(){t.target.disabled=true;const e={genome:d.state.vocab.genome,dslabel:d.state.vocab.dslabel,maxGenes:50};if(d.state.termfilter){if(d.state.termfilter.filter)e.filter=d.state.termfilter.filter;if(d.state.termfilter.filter0)e.filter0=d.state.termfilter.filter0}const s=yield d.getTopVariablyExpressedGenes(e);f=[];if(s.genes){for(const t of s.genes)f.push({gene:t})}B();t.target.disabled=false}))))}else if((o=(i=d.termdbConfig)===null||i===void 0?void 0:i.queries)===null||o===void 0?void 0:o.topMutatedGenes){if(d.termdbConfig.queries.topMutatedGenes.arguments){for(const t of d.termdbConfig.queries.topMutatedGenes.arguments)E(t)}v.dom.loadBtn=_.append("button").style("white-space","nowrap").html(`Load top mutated genes`).on("click",(()=>r(this,void 0,void 0,(function*(){v.dom.loadBtn.property("disabled",true);const t={filter0:d.state.termfilter.filter0};for(const{param:e,input:s}of v.params){const r=s.attr("id");t[r]=R({param:e,input:s})}const e=yield d.getTopMutatedGenes(t);f=[];f.push(...e.genes);B();v.dom.loadBtn.property("disabled",false)}))))}if((a=p===null||p===void 0?void 0:p.termdbs)===null||a===void 0?void 0:a.msigdb){for(const t in p.termdbs){const e=p.termdbs[t];v.dom.tdbBtns[t]=_.append("button").attr("name","msigdbBt").style("white-space","nowrap").html(`Load ${e.label} gene set ▼`).on("click",(e=>r(this,void 0,void 0,(function*(){g.clear().showunder(e.target);const s=yield import("./app-fb676934.js");s.appInit({holder:g.d,state:{dslabel:t,genome:p.name,nav:{header_mode:"search_only"}},tree:{click_term:t=>{f=[];const e=t._geneset;if(e){for(const t of e)f.push({gene:t.symbol});B()}g.hide();S.node().focus()}}})}))))}}v.dom.clearBtn=_.append("button").property("disabled",!(f===null||f===void 0?void 0:f.length)).text("Clear").on("click",(()=>{f=[];B()}));if((n=t.geneList)===null||n===void 0?void 0:n.length){v.dom.restoreBtn=_.append("button").property("disabled",true).text("Restore").on("click",(()=>{f=b;B()}))}}function B(){var t;const e=f.some((t=>t.mutationStat));if(!e)f.sort(((t,e)=>{if(t.gene<e.gene)return-1;if(t.gene>e.gene)return 1;return 0}));v.dom.geneHoldingDiv.selectAll("*").remove();v.statColor2label=new Map;v.dom.geneHoldingDiv.selectAll("div").data(f||[]).enter().append("div").attr("title","click to delete").attr("class","sja_menuoption").attr("tabindex",0).style("position","relative").style("display","inline-block").style("padding","5px 16px 5px 9px").style("margin-left","5px").each(A).on("click",q).on("mouseover",(function(t){const e=i(t.target);e.append("div").style("margin-left","4px").classed("sjpp_deletebt",true).style("display","inline-block").style("position","absolute").style("right","0px").style("top","0px").style("transform","scale(0.6)").style("pointer-events","none").html(`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="#000" class="bi bi-x-lg" viewBox="0 0 16 16">\n\t\t\t\t<path stroke='#f00' d="M2.146 2.854a.5.5 0 1 1 .708-.708L8 7.293l5.146-5.147a.5.5 0 0 1 .708.708L8.707 8l5.147 5.146a.5.5 0 0 1-.708.708L8 8.707l-5.146 5.147a.5.5 0 0 1-.708-.708L7.293 8 2.146 2.854Z"/>\n\t\t\t\t</svg>`)})).on("mouseout",(function(t){i(t.target).select(".sjpp_deletebt").remove()})).on("focus",(t=>{t.target.dispatchEvent(new PointerEvent("mouseover"))})).on("blur",(t=>{t.target.dispatchEvent(new PointerEvent("mouseout"))})).on("keyup",(t=>{if(t.key=="Enter")t.target.click()}));D();v.dom.clearBtn.property("disabled",!(f===null||f===void 0?void 0:f.length));const s=y!==JSON.stringify(f.map((t=>t.gene)).sort());(t=v.dom.restoreBtn)===null||t===void 0?void 0:t.property("disabled",!s);const r=h||0;v.dom.submitBtn.property("disabled",!s||(f===null||f===void 0?void 0:f.length)<r);if(s)S.node().focus()}function A(t){const e=i(this).style("border-radius","5px");if(t.mutationStat){e.html(`${t.gene} `);for(const s of t.mutationStat){let t,r;if("class"in s){if(!o[s.class])throw"invalid stat class";t=o[s.class].color;v.statColor2label.set(t,o[s.class].label)}else if("dt"in s){if(!a[s.dt])throw"invalid stat dt";t=a[s.dt];r="white";v.statColor2label.set(t,n[s.dt])}else{throw"stat missing dt/class"}e.insert("span").style("font-size",".7em").style("background-color",t).style("padding","1px 2px").style("color",r||"black").text(s.count)}}else{e.insert("div").style("display","inline-block").html(t.gene)}}function D(){if(!v.statColor2label||v.statColor2label.size==0){v.dom.statLegendDiv.style("display","none");return}v.dom.statLegendDiv.style("display","block").selectAll("*").remove();for(const[t,e]of v.statColor2label){v.dom.statLegendDiv.append("div").style("display","inline-block").style("width","12px").style("height","12px").style("background-color",t);v.dom.statLegendDiv.append("span").html(` ${e} `)}}function P(){const t=C.geneSymbol;for(const e of f){if(e.gene==t){window.alert(`The gene ${t} has already been added`);return}}f.push({gene:t});B()}function q(t,e){const s=f.findIndex((t=>t.gene===e.gene));if(s!=-1){f.splice(s,1);B()}}function E(t){let e;if(t.type=="boolean"){e=_.append("input").attr("type","checkbox").attr("id",t.id);if(t.value)e.property("checked",t.value);_.append("label").html(t.label).attr("for",t.id)}else if(t.type=="string"&&t.value){e=_.append("input").attr("type","checkbox").attr("id",t.id);e.property("checked",true);_.append("label").html(t.label).attr("for",t.id)}else if(t.type=="number"){e=_.append("input").attr("type","number").style("width","40px").attr("id",t.id);if(t.value)e.attr("value",t.value);_.append("span").html(t.label)}v.params.push({param:t,input:e})}function R({param:t,input:e}){const s=e.node().value;if(e.attr("type")=="number")return Number(s);if(e.attr("type")=="checkbox"){if(t.type=="string")return e.node().checked?t.value:"";if(t.type=="boolean")return e.node().checked?1:0}}I();B();return v}function S(t){switch(t){case"../plots/DEanalysis.js":return import("./DEanalysis-567989ff.js");case"../plots/Disco.js":return import("./Disco-5d1404ce.js");case"../plots/DziViewer.js":return import("./DziViewer-3f466d90.js");case"../plots/barchart.data.js":return import("./FilterRxComp-fc769f34.js").then((function(t){return t.y}));case"../plots/barchart.events.js":return import("./barchart.events-e24facf7.js");case"../plots/barchart.js":return import("./barchart-ef4874c8.js");case"../plots/bars.renderer.js":return import("./bars.renderer-c46d3f44.js");case"../plots/bars.settings.js":return import("./bars.settings-64bb4642.js");case"../plots/boxplot.js":return import("./boxplot-a2e1ace0.js");case"../plots/brainImaging.js":return import("./brainImaging-21701238.js");case"../plots/controls.btns.js":return import("./controls.btns-ad7b28a2.js");case"../plots/controls.config.js":return import("./controls.config-6cf816fb.js");case"../plots/controls.divide.js":return import("./controls.divide-3c0d52d7.js");case"../plots/controls.js":return import("./controls-0467d2ec.js");case"../plots/controls.overlay.js":return import("./controls.overlay-3a55c2ec.js");case"../plots/controls.term1.js":return import("./controls.term1-59f4cd60.js");case"../plots/cuminc.js":return import("./cuminc-8d21132b.js");case"../plots/dataDownload.js":return import("./dataDownload-bfa92dad.js");case"../plots/dictionary.js":return import("./dictionary-89e860ee.js");case"../plots/geneExpression.js":return import("./geneExpression-9047481a.js");case"../plots/geneORA.js":return import("./geneORA-ffb2497e.js");case"../plots/geneset.js":return import("./geneset-3522bcda.js");case"../plots/genomeBrowser.controls.js":return import("./genomeBrowser.controls-bef8bf99.js");case"../plots/genomeBrowser.js":return import("./genomeBrowser-9b72eb22.js");case"../plots/hierCluster.config.js":return import("./hierCluster.config-f8686a30.js");case"../plots/hierCluster.interactivity.js":return import("./hierCluster.interactivity-3b5f1e81.js").then((function(t){return t.i}));case"../plots/hierCluster.js":return import("./hierCluster-3b14b2b3.js");case"../plots/hierCluster.renderers.js":return import("./hierCluster.renderers-9f9a7cad.js").then((function(t){return t.r}));case"../plots/imagePlot.js":return import("./imagePlot-095b9a92.js");case"../plots/matrix.cells.js":return import("./matrix.cells-3620eb3a.js");case"../plots/matrix.cluster.js":return import("./matrix.cluster-15b8a865.js");case"../plots/matrix.config.js":return import("./matrix.config-8247bea5.js");case"../plots/matrix.controls.js":return import("./matrix.controls-dea65894.js");case"../plots/matrix.data.js":return import("./matrix.data-121a1a8c.js").then((function(t){return t.m}));case"../plots/matrix.dom.js":return import("./matrix.dom-83c5fa39.js");case"../plots/matrix.groups.js":return import("./matrix.groups-2e1202ef.js").then((function(t){return t.m}));case"../plots/matrix.interactivity.js":return import("./matrix.interactivity-2b076155.js");case"../plots/matrix.js":return import("./matrix-3fae58f8.js");case"../plots/matrix.layout.js":return import("./matrix.layout-8dc54c05.js").then((function(t){return t.m}));case"../plots/matrix.legend.js":return import("./matrix.legend-e0078739.js").then((function(t){return t.m}));case"../plots/matrix.renderers.js":return import("./matrix.renderers-0c8eddc9.js");case"../plots/matrix.serieses.js":return import("./matrix.serieses-2898da6b.js").then((function(t){return t.m}));case"../plots/matrix.sort.js":return import("./matrix.sort-249d4a35.js");case"../plots/matrix.sorterUi.js":return import("./matrix.sorterUi-d26208c8.js");case"../plots/plot.app.js":return import("./plot.app-c841507a.js");case"../plots/plot.brainImaging.js":return import("./plot.brainImaging-325ebded.js");case"../plots/plot.disco.js":return import("./plot.disco-621d1b8e.js");case"../plots/plot.ssgq.js":return import("./plot.ssgq-1949c207.js");case"../plots/profileBarchart.js":return import("./profileBarchart-11755d7c.js");case"../plots/profilePlot.js":return import("./profilePlot-8ee3034a.js");case"../plots/profilePolar.js":return import("./profilePolar-9fe70c32.js");case"../plots/profileRadar.js":return import("./profileRadar-0e744181.js");case"../plots/profileRadarFacility.js":return import("./profileRadarFacility-102544c5.js");case"../plots/regression.inputs.js":return import("./regression.inputs-ad548745.js").then((function(t){return t.b}));case"../plots/regression.inputs.term.js":return import("./regression.inputs-ad548745.js").then((function(t){return t.a}));case"../plots/regression.inputs.values.table.js":return import("./regression.inputs.values.table-1618447a.js");case"../plots/regression.js":return import("./regression.inputs-ad548745.js").then((function(t){return t.r}));case"../plots/regression.results.js":return import("./regression.results-25008028.js").then((function(t){return t.r}));case"../plots/sampleScatter.interactivity.js":return import("./sampleScatter.interactivity-cfa3451d.js").then((function(t){return t.a}));case"../plots/sampleScatter.js":return import("./sampleScatter-47dd82cb.js").then((function(t){return t.a}));case"../plots/sampleScatter.renderer.js":return import("./sampleScatter-47dd82cb.js").then((function(t){return t.s}));case"../plots/sampleScatter.rendererThree.js":return import("./sampleScatter.rendererThree-c5321d24.js").then((function(t){return t.c}));case"../plots/sampleView.js":return import("./sampleView-30b97c7d.js");case"../plots/scatter.js":return import("./scatter-8a337eeb.js");case"../plots/singleCellPlot.js":return import("./singleCellPlot-360eaec6.js");case"../plots/stattable.js":return import("./stattable-886f7dad.js");case"../plots/summary.js":return import("./summary-ee2045a5.js");case"../plots/survival.js":return import("./survival-d7bd3c6b.js");case"../plots/table.js":return import("./table-b4a61573.js");case"../plots/variantBrowser.js":return import("./variantBrowser-910b4bcd.js");case"../plots/violin.interactivity.js":return import("./violin.interactivity-bcf0ccc2.js");case"../plots/violin.js":return import("./violin-a41b2e2b.js");case"../plots/violin.renderer.js":return import("./violin.renderer-149310eb.js");default:return new Promise((function(e,s){(typeof queueMicrotask==="function"?queueMicrotask:setTimeout)(s.bind(null,new Error("Unknown variable dynamic import: "+t)))}))}}class I{constructor(t={}){this.type="charts";P(this)}async init(t){this.dom={holder:this.opts.holder,tip:new e({padding:"0px"})};this.makeButtons(t)}getState(t){const e=A(t);const s=JSON.parse(JSON.stringify(t.termdbConfig?.supportedChartTypes||{}));const r={vocab:t.vocab,activeCohort:t.activeCohort,termfilter:t.termfilter,supportedChartTypes:s[e]||["summary"],termdbConfig:t.termdbConfig};if(t?.termfilter?.filter){r.filter=f(t.termfilter.filter)}if(!r.supportedChartTypes.includes("dictionary")&&!r.termdbConfig.hiddenChartTypes?.includes("dictionary")){r.supportedChartTypes.push("dictionary")}return r}main(){this.dom.btns.style("display",(t=>this.state.supportedChartTypes.includes(t.chartType)?"":"none"))}}const B=l(I);function A(t){if(t?.termdbConfig?.selectCohort?.values){if(!Number.isInteger(t.activeCohort))throw"appState.activeCohort is not integer array index";const e=t.termdbConfig.selectCohort.values[t.activeCohort];if(!e)throw"appState.activeCohort array index out of bound";return[...e.keys].sort().join(",")}return""}function D(t,e){const s=[{label:"Data Dictionary",clickTo:t.prepPlot,chartType:"dictionary",config:{chartType:"dictionary"}},{label:"Sample View",clickTo:t.prepPlot,chartType:"sampleView",config:{chartType:"sampleView"}},{label:"Summary Plots",chartType:"summary",clickTo:t.showTree_select1term,usecase:{target:"summary",detail:"term"}},{label:"Scatter Plot",chartType:"sampleScatter",clickTo:t.loadChartSpecificMenu},{label:"Cumulative Incidence",chartType:"cuminc",clickTo:t.showTree_select1term,usecase:{target:"cuminc",detail:"term"}},{label:"Survival",chartType:"survival",clickTo:t.showTree_select1term,usecase:{target:"survival",detail:"term"}},{label:"Regression Analysis",chartType:"regression",clickTo:t.loadChartSpecificMenu},{label:"Sample Matrix",chartType:"matrix",clickTo:t.loadChartSpecificMenu},{label:"Genome Browser",chartType:"genomeBrowser",clickTo:t.loadChartSpecificMenu},{label:"Differential Expression",chartType:"DEanalysis",clickTo:t.loadChartSpecificMenu},{label:"Profile Bar Plot",chartType:"profileBarchart",clickTo:t.showTree_select1term,usecase:{detail:"term"}},{label:"Data Download",clickTo:t.prepPlot,chartType:"dataDownload",config:{chartType:"dataDownload",terms:[]}},{label:"Single Cell Plot",clickTo:t.loadChartSpecificMenu,chartType:"singleCellPlot",config:{chartType:"singleCellPlot"}},{label:"Gene Expression",chartType:"geneExpression",clickTo:t.showGenesetEditUI,usecase:{target:"geneExpression"}},{label:"Metabolite Intensity",chartType:"metaboliteIntensity",clickTo:t.showTree_selectlst,usecase:{target:"metaboliteIntensity",detail:"term"},updateActionBySelectedTerms:(t,e)=>{const s=e.map((t=>({term:structuredClone(t),q:{mode:y.continuous}})));if(s.length==1){t.config.chartType="summary";t.config.term=s[0];return}if(s.length==2){t.config.chartType="summary";t.config.term=s[0];t.config.term2=s[1];return}t.config.chartType="hierCluster";t.config.dataType=b.METABOLITE_INTENSITY;t.config.termgroups=[{name:"Metabolite Intensity Cluster",lst:s,type:"hierCluster"}]}}];for(const t in e?.termdbConfig.renamedChartTypes||[]){const r=s.find((e=>e.chartType===t));if(r){r.label=e.termdbConfig.renamedChartTypes[t]}}return s}function P(t){t.makeButtons=function(e){const s=D(t,e);t.dom.btns=t.dom.holder.selectAll("button").data(s).enter().append("button").style("margin","10px").style("padding","10px 15px").style("border-radius","20px").style("border-color","#ededed").html((t=>t.label)).on("click",(function(e,s){t.dom.tip.clear().showunder(this);s.clickTo(s)}))};t.showTree_select1term=async e=>{if(e.usecase.label){t.dom.tip.d.append("div").style("margin","3px 5px").style("padding","3px 5px").style("font-weight",600).html(e.usecase.label)}const s={type:"plot_create",id:R(),config:{chartType:e.chartType}};if(e.parentId)s.parentId=e.parentId;const r=await import("./app-fb676934.js");r.appInit({vocabApi:t.app.vocabApi,holder:t.dom.tip.d.append("div"),state:{activeCohort:t.state.activeCohort,nav:{header_mode:"search_only"},tree:{usecase:e.usecase}},tree:{click_term:r=>{const i=r.term?r:{term:r};s.config[e.usecase.detail]=i;t.dom.tip.hide();t.app.dispatch(s)}}})};t.showGenesetEditUI=async e=>{const s=[];const r=t.app;const i=t.dom.tip;const o=t.dom.tip.d;o.selectAll("*").remove();const a=o.append("div").style("padding","5px");const n=a.append("label");n.append("span").text("Create ");let l;const p=n.append("input").style("margin","2px 5px").style("width","210px").attr("placeholder","Group Name").on("input",(()=>{l=p.property("value")}));const c={index:0,name:l,label:l,lst:[],status:"new"};k({holder:o.append("div"),genome:r.opts.genome,geneList:s,mode:"expression",vocabApi:r.vocabApi,callback:async({geneList:t,groupName:e})=>{if(!c)throw`missing selectedGroup`;i.hide();const s={name:e||l,lst:[],type:"hierCluster"};const a=s.lst.filter((t=>t.term.type!="geneVariant"));const n=await Promise.all(t.map((async t=>{const e={gene:t.symbol||t.gene,name:t.symbol||t.gene,type:"geneExpression"};let r=s.lst.find((e=>e.term.name==t.symbol||e.term.name==t.gene));if(!r){r={term:e,q:{}}}return r})));if(n.length==1){const t=n[0];r.dispatch({type:"plot_create",config:{chartType:"summary",term:t}});return}if(n.length==2){const t=n[0];const e=n[1];r.dispatch({type:"plot_create",config:{chartType:"summary",term:t,term2:e}});return}s.lst=[...a,...n];if(!s.lst.length)tg.splice(c.index,1);o.selectAll("*").remove();r.dispatch({type:"plot_create",config:{chartType:"hierCluster",termgroups:[s],dataType:b.GENE_EXPRESSION}})}})};t.showTree_selectlst=async e=>{t.dom.tip.clear();if(e.usecase?.label){t.dom.tip.d.append("div").style("margin","3px 5px").style("padding","3px 5px").style("font-weight",600).html(e.usecase.label)}const s={type:"plot_create",id:R(),config:{chartType:e.chartType}};const r=await import("./app-fb676934.js");t.dom.submenu=t.dom.tip.d.append("div");r.appInit({holder:t.dom.submenu,vocabApi:t.app.vocabApi,state:{activeCohort:t.state.activeCohort,nav:{header_mode:"search_only"},tree:{usecase:e.usecase}},tree:{submit_lst:r=>{const i=e.processSelection?e.processSelection(r):r;s.config[e.usecase.detail]=i;if(e.updateActionBySelectedTerms)e.updateActionBySelectedTerms(s,r);t.dom.tip.hide();t.app.dispatch(s)}}})};t.loadChartSpecificMenu=async e=>{t.dom.tip.clear();const s=await S(`../plots/${e.chartType}.js`);s.makeChartBtnMenu(t.dom.tip.d,t)};t.prepPlot=function(e){const s={type:"plot_prep",config:e.config,id:R()};t.app.dispatch(s)}}const q="_CHART_AUTOID_";let E=Date.now();function R(){return q+E++}const N=p(5);class O{constructor(t={}){this.type="groups";this.selectedGroupsIdx=new Set}async init(){this.dom={holder:this.opts.holder.append("div").style("margin","10px")};G(this);this.tip=new e({padding:"0px"})}getState(t){const e=A(t);const s={termfilter:t.termfilter,groups:V(t),termdbConfig:t.termdbConfig,customTerms:t.customTerms,supportedChartTypes:t.termdbConfig.supportedChartTypes[e],matrixplots:t.termdbConfig.matrixplots};return s}async main(){await L(this)}getMassFilter(){if(!this.state.termfilter.filter||this.state.termfilter.filter.lst.length==0){return{type:"tvslst",in:true,join:"",lst:[]}}const t=f(structuredClone(this.state.termfilter.filter));return t}async groups2samplelst(t){const e=[];const s=new Set,r=[];for(const i of t){const t=await this.app.vocabApi.getFilteredSampleCount(i.filter,"list");const o=[];for(const i of t){const t={sampleId:i.id};if("name"in i){t.sample=i.name}if(!s.has(i.id))o.push(t);else{for(const t of e){const e=t.items.findIndex((t=>t.sampleId===i.id));if(e!==-1)r.push(...t.items.splice(e,1))}}s.add(t.sampleId)}if(o.length)e.push({name:i.name,items:o,color:i.color})}if(r.length){const t=confirm('Overlap detected: 1 or more samples belong to >1 groups. A new group will be created for these "overlap" samples.');if(!t)return;e.push({name:"Group overlap",items:r})}const i=e.length==1?e[0].name:"Sample groups";const o=Z(e,i);for(const t of o.q.groups){o.term.values[t.name].list=t.values;o.term.values[t.name].inuse=t.inuse}return o}updateLaunchButton(){this.dom.newTermSpan.style("display","none");this.dom.noGroupSelected.style("display","none");if(this.state.groups.length==0)return;if(this.state.groups.length==1){this.dom.newTermSpan.style("display","");this.dom.launchButton.text(`Create variable using "${this.state.groups[0].name}"`);this.dom.newTermNameInput.property("value",this.state.groups[0].name+" vs others");return}const t=[...this.selectedGroupsIdx];if(t.length==0){this.dom.noGroupSelected.style("display","");return}this.dom.newTermSpan.style("display","");if(t.length==1){this.dom.launchButton.text(`Create variable using "${this.state.groups[t[0]]?.name}"`);this.dom.newTermNameInput.property("value",this.state.groups[t[0]].name+" vs others");return}this.dom.launchButton.text(`Create variable using ${t.length} groups`);this.dom.newTermNameInput.property("value",t.map((t=>this.state.groups[t].name)).join(" vs "))}displayCustomTerms(){this.dom.customTermDiv.selectAll("*").remove();if(this.state.customTerms.length==0){this.dom.customTermDiv.append("div").text("No custom variables. Use above controls to create new ones. Custom variables are added to dictionary.").style("font-size",".8em");return}this.dom.customTermDiv.append("div").style("margin-bottom","10px").style("font-size",".8em").text("Following custom variables are available in all charts where variables are used. Click one to delete.");for(const{name:t,tw:e}of this.state.customTerms){const s=this.dom.customTermDiv.append("div");s.text(t).attr("class","sja_filter_tag_btn").style("padding","3px 6px").style("border-radius","6px").style("margin-right","5px").on("click",(s=>{const r=()=>this.app.vocabApi.deleteCustomTerm(t);this.showGroupsMenu(s,e,r)}))}}newId(){this.lastId=T();return this.lastId}showGroupsMenu(t,e,s){const r=JSON.parse(JSON.stringify(e));this.tip.clear();const i=this.tip.d.append("div");const o=this?.lastId;i.append("div");W(this.tip,i,r,this.app,o,this.state,(()=>this.newId));if(this.state.supportedChartTypes.includes("DEanalysis")&&r.q.groups.length==2)M(i,this,this.state,r);if(this.state.supportedChartTypes.includes("survival"))Q("survival",i,"Compare survival",this.tip,r,o,this,true);if(this.state.supportedChartTypes.includes("cuminc"))Q("cuminc",i,"Compare cumulative incidence",this.tip,r,o,this,true);const a=i.append("div").attr("class","sja_menuoption sja_sharp_border").html("Summarize");a.insert("div").html("›").style("float","right");a.on("click",(async t=>{J(a,(t=>{U(t,r,this.app,o,(()=>this.newId))}),this.app,this.tip)}));i.append("div").attr("class","sja_menuoption sja_sharp_border").text("Delete variable").on("click",(t=>{s();this.tip.hide()}));this.tip.showunder(t.target)}}const $=l(O);function M(t,e,s,r,i){t.append("div").attr("class","sja_menuoption sja_sharp_border").text("Differential expression").on("click",(t=>{const i=[];for(const t of r.q.groups){if(t.values&&t.values.length>0){i.push(t)}else{throw"group does not contain samples for DE analysis"}}const o={chartType:"DEanalysis",state:s,samplelst:{groups:i}};e.tip.hide();e.app.dispatch({type:"plot_create",config:o})}))}function G(t){t.dom.filterTableDiv=t.dom.holder.append("div").style("margin-bottom","10px");const e=t.dom.holder.append("div");t.dom.addNewGroupBtnHolder=e.append("span").style("margin-right","20px");t.dom.newTermSpan=e.append("span");t.dom.newTermSpan.append("span").style("padding-left","15px").text("Add variable:");t.dom.newTermNameInput=t.dom.newTermSpan.append("input").attr("type","text");t.dom.launchButton=t.dom.newTermSpan.append("span").attr("class","sja_menuoption").on("click",(()=>F(t)));t.dom.noGroupSelected=e.append("span").text("No groups selected").style("opacity",.5);t.dom.customTermDiv=t.dom.holder.append("div").style("margin","20px").style("border-left","solid 1px black").style("padding","10px");t.dom.holder.on("click",(t=>{if(z)z.hide()}))}async function L(t){if(!t.filterPrompt)t.filterPrompt=await _({holder:t.dom.addNewGroupBtnHolder,vocabApi:t.app.vocabApi,emptyLabel:"Add group",termdbConfig:t.state.termdbConfig,callback:e=>{X(t.app,e,t.state.groups)},debug:t.opts.debug});t.filterPrompt.main(t.getMassFilter());const e=structuredClone(t.state.groups);if(!e.length){t.updateLaunchButton();t.dom.filterTableDiv.style("display","none");t.displayCustomTerms();return}t.dom.filterTableDiv.style("display","").selectAll("*").remove();const s={div:t.dom.filterTableDiv,columns:[{label:"NAME",editCallback:async(e,s)=>{const r=s.value;const i=t.state.groups.findIndex((t=>t.name==r));if(i!=-1){alert(`Group named ${r} already exists`);L(t)}else await t.app.dispatch({type:"rename_group",index:e,newName:s.value})}},{label:"COLOR",editCallback:async(e,s)=>{await t.app.dispatch({type:"change_color_group",index:e,newColor:s.color})}},{label:"#SAMPLE"},{label:"FILTER"}],columnButtons:[{text:"Delete",callback:(s,r)=>{const i=e[r];t.app.vocabApi.deleteGroup(i.name)}}],rows:[]};for(const r of e){s.rows.push([{value:r.name},{color:r.color},{value:"n="+await t.app.vocabApi.getFilteredSampleCount(r.filter)},{}])}t.selectedGroupsIdx.clear();if(e.length==1){t.selectedGroupsIdx.add(0)}else{s.noButtonCallback=(e,s)=>{if(s.checked)t.selectedGroupsIdx.add(e);else t.selectedGroupsIdx.delete(e);t.updateLaunchButton()};s.selectedRows=[];for(let r=0;r<e.length;r++){s.selectedRows.push(r);t.selectedGroupsIdx.add(r)}}w(s);for(const[r,i]of s.rows.entries()){const s=e[r];v({holder:i[3].__td,vocabApi:t.app.vocabApi,termdbConfig:t.state.termdbConfig,callback:r=>{if(!r||r.lst.length==0){const t=e.findIndex((t=>t.name==s.name));e.splice(t,1)}else{s.filter=r}t.app.dispatch({type:"app_refresh",state:{groups:e}})}}).main(s.filter)}t.updateLaunchButton();t.displayCustomTerms()}async function F(t){const e=[];for(const s of t.selectedGroupsIdx){const r=t.state.groups[s];if(r)e.push(r)}if(e.length==0)throw"No groups, should not happen";const s=t.dom.newTermNameInput.property("value");const r=await t.groups2samplelst(e);if(!r)return;r.term.name=s;t.app.vocabApi.addCustomTerm({name:s,tw:r});t.dom.newTermSpan.style("display","none")}function V(t){if(!t.termfilter?.filter||t.termfilter.filter.lst.length==0){return t.groups}const e=[];for(const s of t.groups){const r=f(structuredClone(t.termfilter.filter));const i=g(s.filter,"filterUiRoot");if(!i){e.push(s);continue}r.lst.push(i);r.join=r.lst.length>1?"and":"";const o={name:s.name,filter:r,color:s.color};e.push(o)}return e}async function H(t,e,s,r,i,o){let a={chartType:t,term:e,term2:s};if(i)a.insertBefore=i;if(o)a.id=o();await r.dispatch({type:"plot_create",config:a})}async function U(t,e,s,r,i){const o=t.term?t:{term:t};let a={chartType:"summary",childType:"barchart",term:o,term2:e};if(r)a.insertBefore=r;if(i)a.id=i();await s.dispatch({type:"plot_create",config:a})}let z;async function J(t,s,r,i,o={tree:{usecase:{target:"default",detail:"term"}}},a=true,n=true,l=[]){if(!z)z=new e({padding:0,offsetX:162,offsetY:-34,parent_menu:i.d.node()});z.clear();if(n)z.showunderoffset(t.node());else z.showunder(t.node());x({holder:z.d,vocabApi:r.vocabApi,state:o,tree:{disable_terms:l,click_term:t=>{s(t);z.hide();if(a)i.hide()}}})}function Q(t,e,s,r,i,o,a,n=false){const l=e.append("div").attr("class","sja_menuoption sja_sharp_border").html(`${s} ›`).on("click",(e=>{const s={tree:{usecase:{target:t,detail:"term"}}};if(t=="survival")s.nav={header_mode:"hide_search"};J(l,(e=>{H(t,e,i,a.app,o,n?()=>a.newId:null)}),a.app,r,s)}))}function W(t,e,s,r,i,o,a){if(o.matrixplots){for(const n of o.matrixplots){e.append("div").attr("class","sja_menuoption sja_sharp_border").text(n.name).on("click",(async()=>{const e=await r.vocabApi.getMatrixByName(n.name);e.divideBy=s;e.insertBefore=i;e.settings.matrix.colw=0;if(a)e.id=a();r.dispatch({type:"plot_create",config:e});t.hide()}))}}}function X(t,e,s){s=JSON.parse(JSON.stringify(s));let r="New group";let i=0;while(1){const t=r+(i==0?"":" "+i);if(!s.find((e=>e.name==t)))break;i++}r=r+(i==0?"":" "+i);const o={name:r,filter:e,color:c(N(s.length)).formatHex()};s.push(o);t.dispatch({type:"app_refresh",state:{groups:s}})}function Y(t){let e=0;let s=true;for(const r in t.term.values){const i=t.q.groups[e].values;t.term.values[r].list=i;if(i[0]&&"sample"in i[0])s=false;e++}const r={type:"tvslst",in:true,join:"",lst:[{type:"tvs",tvs:{term:t.term},noEdit:s}]};return r}function K(t){const e={name:"",index:0,items:[{sampleId:t}]};const s=Z([e],"",false);const r=Y(s);return r}function Z(t,e="groups",s=true){let r=true;const i={};const o=[];let a;for(const e of t){i[e.name]={key:e.name,label:e.name,color:e.color};a=l(e);const t={name:e.name,in:true,values:a};o.push(t)}if(t.length==1&&s){const e="Not in "+t[0].name;i[e]={key:e,label:e,color:"#aaa"};o.push({name:e,in:false,values:a})}const n={isAtomic:true,term:{name:e,type:"samplelst",values:i},q:{groups:o,groupsetting:{disabled:r}}};return n;function l(t){const e=[];for(const s of t.items){const t={sampleId:s.sampleId};if("sample"in s){r=false;t.sample=s.sample}e.push(t)}return e}}function tt(t){switch(t){case"../plots/DEanalysis.js":return import("./DEanalysis-567989ff.js");case"../plots/Disco.js":return import("./Disco-5d1404ce.js");case"../plots/DziViewer.js":return import("./DziViewer-3f466d90.js");case"../plots/barchart.data.js":return import("./FilterRxComp-fc769f34.js").then((function(t){return t.y}));case"../plots/barchart.events.js":return import("./barchart.events-e24facf7.js");case"../plots/barchart.js":return import("./barchart-ef4874c8.js");case"../plots/bars.renderer.js":return import("./bars.renderer-c46d3f44.js");case"../plots/bars.settings.js":return import("./bars.settings-64bb4642.js");case"../plots/boxplot.js":return import("./boxplot-a2e1ace0.js");case"../plots/brainImaging.js":return import("./brainImaging-21701238.js");case"../plots/controls.btns.js":return import("./controls.btns-ad7b28a2.js");case"../plots/controls.config.js":return import("./controls.config-6cf816fb.js");case"../plots/controls.divide.js":return import("./controls.divide-3c0d52d7.js");case"../plots/controls.js":return import("./controls-0467d2ec.js");case"../plots/controls.overlay.js":return import("./controls.overlay-3a55c2ec.js");case"../plots/controls.term1.js":return import("./controls.term1-59f4cd60.js");case"../plots/cuminc.js":return import("./cuminc-8d21132b.js");case"../plots/dataDownload.js":return import("./dataDownload-bfa92dad.js");case"../plots/dictionary.js":return import("./dictionary-89e860ee.js");case"../plots/geneExpression.js":return import("./geneExpression-9047481a.js");case"../plots/geneORA.js":return import("./geneORA-ffb2497e.js");case"../plots/geneset.js":return import("./geneset-3522bcda.js");case"../plots/genomeBrowser.controls.js":return import("./genomeBrowser.controls-bef8bf99.js");case"../plots/genomeBrowser.js":return import("./genomeBrowser-9b72eb22.js");case"../plots/hierCluster.config.js":return import("./hierCluster.config-f8686a30.js");case"../plots/hierCluster.interactivity.js":return import("./hierCluster.interactivity-3b5f1e81.js").then((function(t){return t.i}));case"../plots/hierCluster.js":return import("./hierCluster-3b14b2b3.js");case"../plots/hierCluster.renderers.js":return import("./hierCluster.renderers-9f9a7cad.js").then((function(t){return t.r}));case"../plots/imagePlot.js":return import("./imagePlot-095b9a92.js");case"../plots/matrix.cells.js":return import("./matrix.cells-3620eb3a.js");case"../plots/matrix.cluster.js":return import("./matrix.cluster-15b8a865.js");case"../plots/matrix.config.js":return import("./matrix.config-8247bea5.js");case"../plots/matrix.controls.js":return import("./matrix.controls-dea65894.js");case"../plots/matrix.data.js":return import("./matrix.data-121a1a8c.js").then((function(t){return t.m}));case"../plots/matrix.dom.js":return import("./matrix.dom-83c5fa39.js");case"../plots/matrix.groups.js":return import("./matrix.groups-2e1202ef.js").then((function(t){return t.m}));case"../plots/matrix.interactivity.js":return import("./matrix.interactivity-2b076155.js");case"../plots/matrix.js":return import("./matrix-3fae58f8.js");case"../plots/matrix.layout.js":return import("./matrix.layout-8dc54c05.js").then((function(t){return t.m}));case"../plots/matrix.legend.js":return import("./matrix.legend-e0078739.js").then((function(t){return t.m}));case"../plots/matrix.renderers.js":return import("./matrix.renderers-0c8eddc9.js");case"../plots/matrix.serieses.js":return import("./matrix.serieses-2898da6b.js").then((function(t){return t.m}));case"../plots/matrix.sort.js":return import("./matrix.sort-249d4a35.js");case"../plots/matrix.sorterUi.js":return import("./matrix.sorterUi-d26208c8.js");case"../plots/plot.app.js":return import("./plot.app-c841507a.js");case"../plots/plot.brainImaging.js":return import("./plot.brainImaging-325ebded.js");case"../plots/plot.disco.js":return import("./plot.disco-621d1b8e.js");case"../plots/plot.ssgq.js":return import("./plot.ssgq-1949c207.js");case"../plots/profileBarchart.js":return import("./profileBarchart-11755d7c.js");case"../plots/profilePlot.js":return import("./profilePlot-8ee3034a.js");case"../plots/profilePolar.js":return import("./profilePolar-9fe70c32.js");case"../plots/profileRadar.js":return import("./profileRadar-0e744181.js");case"../plots/profileRadarFacility.js":return import("./profileRadarFacility-102544c5.js");case"../plots/regression.inputs.js":return import("./regression.inputs-ad548745.js").then((function(t){return t.b}));case"../plots/regression.inputs.term.js":return import("./regression.inputs-ad548745.js").then((function(t){return t.a}));case"../plots/regression.inputs.values.table.js":return import("./regression.inputs.values.table-1618447a.js");case"../plots/regression.js":return import("./regression.inputs-ad548745.js").then((function(t){return t.r}));case"../plots/regression.results.js":return import("./regression.results-25008028.js").then((function(t){return t.r}));case"../plots/sampleScatter.interactivity.js":return import("./sampleScatter.interactivity-cfa3451d.js").then((function(t){return t.a}));case"../plots/sampleScatter.js":return import("./sampleScatter-47dd82cb.js").then((function(t){return t.a}));case"../plots/sampleScatter.renderer.js":return import("./sampleScatter-47dd82cb.js").then((function(t){return t.s}));case"../plots/sampleScatter.rendererThree.js":return import("./sampleScatter.rendererThree-c5321d24.js").then((function(t){return t.c}));case"../plots/sampleView.js":return import("./sampleView-30b97c7d.js");case"../plots/scatter.js":return import("./scatter-8a337eeb.js");case"../plots/singleCellPlot.js":return import("./singleCellPlot-360eaec6.js");case"../plots/stattable.js":return import("./stattable-886f7dad.js");case"../plots/summary.js":return import("./summary-ee2045a5.js");case"../plots/survival.js":return import("./survival-d7bd3c6b.js");case"../plots/table.js":return import("./table-b4a61573.js");case"../plots/variantBrowser.js":return import("./variantBrowser-910b4bcd.js");case"../plots/violin.interactivity.js":return import("./violin.interactivity-bcf0ccc2.js");case"../plots/violin.js":return import("./violin-a41b2e2b.js");case"../plots/violin.renderer.js":return import("./violin.renderer-149310eb.js");default:return new Promise((function(e,s){(typeof queueMicrotask==="function"?queueMicrotask:setTimeout)(s.bind(null,new Error("Unknown variable dynamic import: "+t)))}))}}function et(t){switch(t){case"../plots/DEanalysis.js":return import("./DEanalysis-567989ff.js");case"../plots/Disco.js":return import("./Disco-5d1404ce.js");case"../plots/DziViewer.js":return import("./DziViewer-3f466d90.js");case"../plots/barchart.data.js":return import("./FilterRxComp-fc769f34.js").then((function(t){return t.y}));case"../plots/barchart.events.js":return import("./barchart.events-e24facf7.js");case"../plots/barchart.js":return import("./barchart-ef4874c8.js");case"../plots/bars.renderer.js":return import("./bars.renderer-c46d3f44.js");case"../plots/bars.settings.js":return import("./bars.settings-64bb4642.js");case"../plots/boxplot.js":return import("./boxplot-a2e1ace0.js");case"../plots/brainImaging.js":return import("./brainImaging-21701238.js");case"../plots/controls.btns.js":return import("./controls.btns-ad7b28a2.js");case"../plots/controls.config.js":return import("./controls.config-6cf816fb.js");case"../plots/controls.divide.js":return import("./controls.divide-3c0d52d7.js");case"../plots/controls.js":return import("./controls-0467d2ec.js");case"../plots/controls.overlay.js":return import("./controls.overlay-3a55c2ec.js");case"../plots/controls.term1.js":return import("./controls.term1-59f4cd60.js");case"../plots/cuminc.js":return import("./cuminc-8d21132b.js");case"../plots/dataDownload.js":return import("./dataDownload-bfa92dad.js");case"../plots/dictionary.js":return import("./dictionary-89e860ee.js");case"../plots/geneExpression.js":return import("./geneExpression-9047481a.js");case"../plots/geneORA.js":return import("./geneORA-ffb2497e.js");case"../plots/geneset.js":return import("./geneset-3522bcda.js");case"../plots/genomeBrowser.controls.js":return import("./genomeBrowser.controls-bef8bf99.js");case"../plots/genomeBrowser.js":return import("./genomeBrowser-9b72eb22.js");case"../plots/hierCluster.config.js":return import("./hierCluster.config-f8686a30.js");case"../plots/hierCluster.interactivity.js":return import("./hierCluster.interactivity-3b5f1e81.js").then((function(t){return t.i}));case"../plots/hierCluster.js":return import("./hierCluster-3b14b2b3.js");case"../plots/hierCluster.renderers.js":return import("./hierCluster.renderers-9f9a7cad.js").then((function(t){return t.r}));case"../plots/imagePlot.js":return import("./imagePlot-095b9a92.js");case"../plots/matrix.cells.js":return import("./matrix.cells-3620eb3a.js");case"../plots/matrix.cluster.js":return import("./matrix.cluster-15b8a865.js");case"../plots/matrix.config.js":return import("./matrix.config-8247bea5.js");case"../plots/matrix.controls.js":return import("./matrix.controls-dea65894.js");case"../plots/matrix.data.js":return import("./matrix.data-121a1a8c.js").then((function(t){return t.m}));case"../plots/matrix.dom.js":return import("./matrix.dom-83c5fa39.js");case"../plots/matrix.groups.js":return import("./matrix.groups-2e1202ef.js").then((function(t){return t.m}));case"../plots/matrix.interactivity.js":return import("./matrix.interactivity-2b076155.js");case"../plots/matrix.js":return import("./matrix-3fae58f8.js");case"../plots/matrix.layout.js":return import("./matrix.layout-8dc54c05.js").then((function(t){return t.m}));case"../plots/matrix.legend.js":return import("./matrix.legend-e0078739.js").then((function(t){return t.m}));case"../plots/matrix.renderers.js":return import("./matrix.renderers-0c8eddc9.js");case"../plots/matrix.serieses.js":return import("./matrix.serieses-2898da6b.js").then((function(t){return t.m}));case"../plots/matrix.sort.js":return import("./matrix.sort-249d4a35.js");case"../plots/matrix.sorterUi.js":return import("./matrix.sorterUi-d26208c8.js");case"../plots/plot.app.js":return import("./plot.app-c841507a.js");case"../plots/plot.brainImaging.js":return import("./plot.brainImaging-325ebded.js");case"../plots/plot.disco.js":return import("./plot.disco-621d1b8e.js");case"../plots/plot.ssgq.js":return import("./plot.ssgq-1949c207.js");case"../plots/profileBarchart.js":return import("./profileBarchart-11755d7c.js");case"../plots/profilePlot.js":return import("./profilePlot-8ee3034a.js");case"../plots/profilePolar.js":return import("./profilePolar-9fe70c32.js");case"../plots/profileRadar.js":return import("./profileRadar-0e744181.js");case"../plots/profileRadarFacility.js":return import("./profileRadarFacility-102544c5.js");case"../plots/regression.inputs.js":return import("./regression.inputs-ad548745.js").then((function(t){return t.b}));case"../plots/regression.inputs.term.js":return import("./regression.inputs-ad548745.js").then((function(t){return t.a}));case"../plots/regression.inputs.values.table.js":return import("./regression.inputs.values.table-1618447a.js");case"../plots/regression.js":return import("./regression.inputs-ad548745.js").then((function(t){return t.r}));case"../plots/regression.results.js":return import("./regression.results-25008028.js").then((function(t){return t.r}));case"../plots/sampleScatter.interactivity.js":return import("./sampleScatter.interactivity-cfa3451d.js").then((function(t){return t.a}));case"../plots/sampleScatter.js":return import("./sampleScatter-47dd82cb.js").then((function(t){return t.a}));case"../plots/sampleScatter.renderer.js":return import("./sampleScatter-47dd82cb.js").then((function(t){return t.s}));case"../plots/sampleScatter.rendererThree.js":return import("./sampleScatter.rendererThree-c5321d24.js").then((function(t){return t.c}));case"../plots/sampleView.js":return import("./sampleView-30b97c7d.js");case"../plots/scatter.js":return import("./scatter-8a337eeb.js");case"../plots/singleCellPlot.js":return import("./singleCellPlot-360eaec6.js");case"../plots/stattable.js":return import("./stattable-886f7dad.js");case"../plots/summary.js":return import("./summary-ee2045a5.js");case"../plots/survival.js":return import("./survival-d7bd3c6b.js");case"../plots/table.js":return import("./table-b4a61573.js");case"../plots/variantBrowser.js":return import("./variantBrowser-910b4bcd.js");case"../plots/violin.interactivity.js":return import("./violin.interactivity-bcf0ccc2.js");case"../plots/violin.js":return import("./violin-a41b2e2b.js");case"../plots/violin.renderer.js":return import("./violin.renderer-149310eb.js");default:return new Promise((function(e,s){(typeof queueMicrotask==="function"?queueMicrotask:setTimeout)(s.bind(null,new Error("Unknown variable dynamic import: "+t)))}))}}function st(t){switch(t){case"../plots/DEanalysis.js":return import("./DEanalysis-567989ff.js");case"../plots/Disco.js":return import("./Disco-5d1404ce.js");case"../plots/DziViewer.js":return import("./DziViewer-3f466d90.js");case"../plots/barchart.data.js":return import("./FilterRxComp-fc769f34.js").then((function(t){return t.y}));case"../plots/barchart.events.js":return import("./barchart.events-e24facf7.js");case"../plots/barchart.js":return import("./barchart-ef4874c8.js");case"../plots/bars.renderer.js":return import("./bars.renderer-c46d3f44.js");case"../plots/bars.settings.js":return import("./bars.settings-64bb4642.js");case"../plots/boxplot.js":return import("./boxplot-a2e1ace0.js");case"../plots/brainImaging.js":return import("./brainImaging-21701238.js");case"../plots/controls.btns.js":return import("./controls.btns-ad7b28a2.js");case"../plots/controls.config.js":return import("./controls.config-6cf816fb.js");case"../plots/controls.divide.js":return import("./controls.divide-3c0d52d7.js");case"../plots/controls.js":return import("./controls-0467d2ec.js");case"../plots/controls.overlay.js":return import("./controls.overlay-3a55c2ec.js");case"../plots/controls.term1.js":return import("./controls.term1-59f4cd60.js");case"../plots/cuminc.js":return import("./cuminc-8d21132b.js");case"../plots/dataDownload.js":return import("./dataDownload-bfa92dad.js");case"../plots/dictionary.js":return import("./dictionary-89e860ee.js");case"../plots/geneExpression.js":return import("./geneExpression-9047481a.js");case"../plots/geneORA.js":return import("./geneORA-ffb2497e.js");case"../plots/geneset.js":return import("./geneset-3522bcda.js");case"../plots/genomeBrowser.controls.js":return import("./genomeBrowser.controls-bef8bf99.js");case"../plots/genomeBrowser.js":return import("./genomeBrowser-9b72eb22.js");case"../plots/hierCluster.config.js":return import("./hierCluster.config-f8686a30.js");case"../plots/hierCluster.interactivity.js":return import("./hierCluster.interactivity-3b5f1e81.js").then((function(t){return t.i}));case"../plots/hierCluster.js":return import("./hierCluster-3b14b2b3.js");case"../plots/hierCluster.renderers.js":return import("./hierCluster.renderers-9f9a7cad.js").then((function(t){return t.r}));case"../plots/imagePlot.js":return import("./imagePlot-095b9a92.js");case"../plots/matrix.cells.js":return import("./matrix.cells-3620eb3a.js");case"../plots/matrix.cluster.js":return import("./matrix.cluster-15b8a865.js");case"../plots/matrix.config.js":return import("./matrix.config-8247bea5.js");case"../plots/matrix.controls.js":return import("./matrix.controls-dea65894.js");case"../plots/matrix.data.js":return import("./matrix.data-121a1a8c.js").then((function(t){return t.m}));case"../plots/matrix.dom.js":return import("./matrix.dom-83c5fa39.js");case"../plots/matrix.groups.js":return import("./matrix.groups-2e1202ef.js").then((function(t){return t.m}));case"../plots/matrix.interactivity.js":return import("./matrix.interactivity-2b076155.js");case"../plots/matrix.js":return import("./matrix-3fae58f8.js");case"../plots/matrix.layout.js":return import("./matrix.layout-8dc54c05.js").then((function(t){return t.m}));case"../plots/matrix.legend.js":return import("./matrix.legend-e0078739.js").then((function(t){return t.m}));case"../plots/matrix.renderers.js":return import("./matrix.renderers-0c8eddc9.js");case"../plots/matrix.serieses.js":return import("./matrix.serieses-2898da6b.js").then((function(t){return t.m}));case"../plots/matrix.sort.js":return import("./matrix.sort-249d4a35.js");case"../plots/matrix.sorterUi.js":return import("./matrix.sorterUi-d26208c8.js");case"../plots/plot.app.js":return import("./plot.app-c841507a.js");case"../plots/plot.brainImaging.js":return import("./plot.brainImaging-325ebded.js");case"../plots/plot.disco.js":return import("./plot.disco-621d1b8e.js");case"../plots/plot.ssgq.js":return import("./plot.ssgq-1949c207.js");case"../plots/profileBarchart.js":return import("./profileBarchart-11755d7c.js");case"../plots/profilePlot.js":return import("./profilePlot-8ee3034a.js");case"../plots/profilePolar.js":return import("./profilePolar-9fe70c32.js");case"../plots/profileRadar.js":return import("./profileRadar-0e744181.js");case"../plots/profileRadarFacility.js":return import("./profileRadarFacility-102544c5.js");case"../plots/regression.inputs.js":return import("./regression.inputs-ad548745.js").then((function(t){return t.b}));case"../plots/regression.inputs.term.js":return import("./regression.inputs-ad548745.js").then((function(t){return t.a}));case"../plots/regression.inputs.values.table.js":return import("./regression.inputs.values.table-1618447a.js");case"../plots/regression.js":return import("./regression.inputs-ad548745.js").then((function(t){return t.r}));case"../plots/regression.results.js":return import("./regression.results-25008028.js").then((function(t){return t.r}));case"../plots/sampleScatter.interactivity.js":return import("./sampleScatter.interactivity-cfa3451d.js").then((function(t){return t.a}));case"../plots/sampleScatter.js":return import("./sampleScatter-47dd82cb.js").then((function(t){return t.a}));case"../plots/sampleScatter.renderer.js":return import("./sampleScatter-47dd82cb.js").then((function(t){return t.s}));case"../plots/sampleScatter.rendererThree.js":return import("./sampleScatter.rendererThree-c5321d24.js").then((function(t){return t.c}));case"../plots/sampleView.js":return import("./sampleView-30b97c7d.js");case"../plots/scatter.js":return import("./scatter-8a337eeb.js");case"../plots/singleCellPlot.js":return import("./singleCellPlot-360eaec6.js");case"../plots/stattable.js":return import("./stattable-886f7dad.js");case"../plots/summary.js":return import("./summary-ee2045a5.js");case"../plots/survival.js":return import("./survival-d7bd3c6b.js");case"../plots/table.js":return import("./table-b4a61573.js");case"../plots/variantBrowser.js":return import("./variantBrowser-910b4bcd.js");case"../plots/violin.interactivity.js":return import("./violin.interactivity-bcf0ccc2.js");case"../plots/violin.js":return import("./violin-a41b2e2b.js");case"../plots/violin.renderer.js":return import("./violin.renderer-149310eb.js");default:return new Promise((function(e,s){(typeof queueMicrotask==="function"?queueMicrotask:setTimeout)(s.bind(null,new Error("Unknown variable dynamic import: "+t)))}))}}const rt="_MASS_AUTOID_"+Math.random().toString().slice(-6);let it=(+new Date).toString().slice(-8);function ot(){return rt+"_"+it++}const at=new Set(["with_tabs","hidden","search_only","hide_search","only_buttons","with_cohortHtmlSelect"]);const nt={nav:{header_mode:"with_tabs",activeTab:0},activeCohort:0,search:{isVisible:true},plots:[],termfilter:{filter:{type:"tvslst",in:true,join:"",lst:[]}},reuse:{customTermQ:{byId:{},byName:{}}},groups:[],customTerms:[],autoSave:true};class lt{constructor(t){this.type="store";this.defaultState=nt;this.prevGeneratedId=0}validateOpts(t){const e=t.state;if(e.vocab.dslabel){if(!e.vocab.genome)throw".state[.vocab].genome missing"}else{if(!Array.isArray(e.vocab.terms))throw"vocab.terms must be an array of objects"}}validateState(){if(!at.has(this.state.nav.header_mode))throw"invalid state.nav.header_mode"}async init(){try{this.state.termdbConfig=await this.app.vocabApi.getTermdbConfig();await this.setTermfilter();await this.rehydrateGroups();await this.app.vocabApi.main({termfilter:JSON.parse(JSON.stringify(this.state.termfilter)),termdbConfig:this.state.termdbConfig});for(const[t,e]of this.state.plots.entries()){const s=await st(`../plots/${e.chartType}.js`);const r=await s.getPlotConfig(e,this.app);this.state.plots[t]=r;if(!("id"in r))r.id=`_AUTOID_${it++}_${t}`;if(r.mayAdjustConfig)r.mayAdjustConfig(r)}}catch(t){throw t}}setId(t){t.$id=this.prevGeneratedId++;if(t.$lst){for(const e of t.$lst){this.setId(e)}}}async setTermfilter(){let t=g(this.state.termfilter.filter,"filterUiRoot");if(!t){this.state.termfilter.filter.tag="filterUiRoot";t=this.state.termfilter.filter}await Promise.all(pt(this.state.termfilter.filter,this.app.vocabApi));if(!this.state.termdbConfig.selectCohort){this.state.activeCohort=-1;if(this.state.activeTab===0)this.state.activeTab=1;if(this.state.nav.header_mode==="with_cohortHtmlSelect"){console.warn(`no termdbConfig.selectCohort to use for nav.header_mode = 'with_cohortHtmlSelect'`);this.state.nav.header_mode="search_only"}}else{let e=g(this.state.termfilter.filter,"cohortFilter");if(!e){e={tag:"cohortFilter",type:"tvs",tvs:{term:JSON.parse(JSON.stringify(this.state.termdbConfig.selectCohort.term)),values:this.state.activeCohort==-1?[]:this.state.termdbConfig.selectCohort.values[this.state.activeCohort].keys.map((t=>({key:t,label:t})))}};this.state.termfilter.filter={type:"tvslst",in:true,join:"and",lst:[e,t]}}else{const t=(t,e)=>t<e?-1:1;e.tvs.values.sort(((t,e)=>t.key<e.key?-1:1));const s=JSON.stringify(e.tvs.values.map((t=>t.key)).sort(t));const r=this.state.termdbConfig.selectCohort.values.findIndex((e=>s==JSON.stringify(e.keys.sort(t))));if(this.state.activeCohort!==-1&&this.state.activeCohort!==0&&r!==this.state.activeCohort){console.log("Warning: cohortFilter will override the state.activeCohort due to mismatch")}this.state.activeCohort=r}}}async rehydrateGroups(){const t=[];for(const e of this.state.groups){t.push(...pt(e.filter,this.app.vocabApi))}await Promise.all(t)}}function pt(t,e,s=[]){if(t.type=="tvslst"){for(const r of t.lst)pt(r,e,s)}else if(t.type=="tvs"){if(!t.tvs.term.name)s.push(e.getterm(t.tvs.term.id).then((e=>{t.tvs.term=e})))}else{throw`cannot rehydrate filter.type='${t.type}'`}return s}lt.prototype.actions={app_refresh(t={}){this.state=this.copyMerge(this.toJson(this.state),t.state||{});const e=new Set;if(t.subactions){for(const s of t.subactions){this.actions[s.type].call(this,s);if(s.type.startsWith("plot_"))e.add(s.id)}}for(const s in this.state.plots){if(s.mayAdjustConfig&&!e.has(s.id)){s.mayAdjustConfig(s,t.config)}}},tab_set(t){this.state.nav.activeTab=t.activeTab},cohort_set(t){this.state.activeCohort=t.activeCohort;const e=this.state.termdbConfig.selectCohort.values[t.activeCohort];const s=g(this.state.termfilter.filter,"cohortFilter");if(!s)throw`No item tagged with 'cohortFilter'`;s.tvs.values=e.keys.map((t=>({key:t,label:t})))},async plot_prep(t){const e={id:"id"in t?t.id:ot()};if(!t.config)throw".config{} missing for plot_prep";if(t.config.chartType&&Object.keys(t.config).length==1){const e=await et(`../plots/${t.config.chartType}.js`);const s=await e.getPlotConfig(t.config,this.app);t.config=Object.assign(s,t.config)}Object.assign(e,t.config);this.state.plots.push(e)},async plot_create(t){const e=await tt(`../plots/${t.config.chartType}.js`);const s=await e.getPlotConfig(t.config,this.app);if(!("id"in t))t.id=ot();s.id=t.id;if(s.mayAdjustConfig){s.mayAdjustConfig(s,t.config)}this.state.plots.push(s)},plot_edit(t){const e=this.state.plots.find((e=>e.id===t.id));if(!e)throw`missing plot id='${t.id}' in store.plot_edit()`;this.copyMerge(e,t.config,t.opts?t.opts:{});if(e.mayAdjustConfig){e.mayAdjustConfig(e,t.config)}ut(e,this.app.vocabApi);if(t.config&&"cutoff"in t.config){e.cutoff=t.config.cutoff}else{delete e.cutoff}},plot_delete(t){const e=this.state.plots.findIndex((e=>e.id===t.id));if(e!==-1)this.state.plots.splice(e,1)},plot_nestedEdits(t){const e=this.state.plots.find((e=>e.id===t.id));if(!e)throw`missing plot id='${t.id}' in store.plot_edit_nested`;for(const s of t.edits){const t=s.nestedKeys.pop();const r=s.nestedKeys.reduce(((t,e)=>t[e]),e);r[t]=s.value}ut(e,this.app.vocabApi)},async plot_splice(t){for(const e of t.subactions){await this.actions[e.type].call(this,e)}},filter_replace(t){if("filter0"in t){this.state.termfilter.filter0=t.filter0;return}const e=t.filter?t.filter:{type:"tvslst",join:"",in:1,lst:[]};if(!t.filter.tag){this.state.termfilter.filter=e}else{const s=g(this.state.termfilter.filter,t.filter.tag);if(!s)throw`cannot replace missing filter with tag '${t.filter.tag}'`;const r=j(this.state.termfilter.filter,s.$id);if(r==s){this.state.termfilter.filter=e}else{const t=r.lst.indexOf(s);r.lst[t]=e}}},cache_termq({termId:t,q:e}){if(!t)throw`missing termId for caching custom term.q`;if(!e?.reuseId)throw`missing or empty tw.q.reuseId as cache identifier for term='${t}'`;const s=this.state.reuse.customTermQ.byId;if(!s[t])s[t]={};s[t][e.reuseId]=e;for(const t of this.state.plots){if(!(t.chartType in mt))continue;const s=mt[t.chartType](t);for(const t of s){if(t?.q?.reuseId===e.reuseId)t.q=e}}},uncache_termq({term:t,q:e}){if(!t.id)throw`missing term.id for uncaching custom term.q`;if(!e.reuseId)throw`missing qname as uncache identifier for term.id='${t.id}'`;const s=this.state.reuse.customTermQ.byId[t.id];if(!s)throw`missing term.q cache for term.id='${t.id}`;if(!(e.reuseId in s))console.warn(`q.reuseId='${e.cacheid}' not cached for term.id='${t.id}'`);else{delete s[e.reuseId];for(const t of this.state.plots){if(!(t.chartType in mt))continue;const s=mt[t.chartType](t);for(const t of s){if(t.q.reuseId===e.reuseId){delete t.q.reuseId;delete t.q.name}}}}},add_customTerm(t){this.state.customTerms.push(t.obj)},delete_customTerm({name:t}){const e=this.state.customTerms.findIndex((e=>e.name==t));if(e!=-1)this.state.customTerms.splice(e,1)},add_group(t){if(this.state.nav.header_mode!="hidden"){const e=t.obj;const s=`Group ${this.state.groups.length+1}`;const r=Z([e]);const i={name:s,filter:Y(r),plotId:e.plotId};this.state.groups.push(i);this.state.nav.activeTab=1}else if("plotId"in t.obj){const e=this.state.plots.find((e=>e.id==t.obj.plotId));if(e.groups){t.obj.index=e.groups.length;t.obj.name=`Group ${e.groups.length+1}`;e.groups.push(t.obj)}}},rename_group(t){const e=t.index;const s=t.newName;if(this.state.nav.header_mode!="hidden"){this.state.groups[e].name=s}else{for(const t of this.state.plots){if(t?.groups){t.groups[e].name=s}}}},change_color_group(t){const e=t.index;const s=t.newColor;if(this.state.nav.header_mode!="hidden"){this.state.groups[e].color=s}else{for(const t of this.state.plots){if(t?.groups){t.groups[e].color=s}}}},delete_group({name:t}){if(this.state.nav.header_mode!="hidden"){const e=this.state.groups.findIndex((e=>e.name==t));if(e!=-1)this.state.groups.splice(e,1)}else{for(const e of this.state.plots){if(e?.groups){const s=e.groups.findIndex((e=>e.name==t));if(s!=-1)e.groups.splice(s,1)}}}}};const ct=t=>[t.term0,t.term,t.term2].filter((t=>!!t));const mt={summary:ct,survival:ct,cuminc:ct,regression:t=>[t.outcome,...t.independent].filter((t=>!!t)),matrix:t=>t.termgroups.reduce(((t,e)=>{t.push(...e.lst);return t}),[])};const dt=m(lt);function ut(t,e){if(!("id"in t))throw"plot error: plot.id missing";try{if(t.chartType=="regression"){ft(t,e)}else if(t.chartType=="matrix"||t.chartType=="hierCluster"){if(!t.termgroups)throw`plot error: missing the config.termgroups for '${t.chartType}'`;if(!Array.isArray(t.termgroups))`plot error: config.termgroups must be an array '${t.chartType}'`;if(!t.samplegroups)throw`plot error: missing the config.samplegroups for '${t.chartType}'`;if(!Array.isArray(t.samplegroups))`plot error: config.samplegroups must be an array '${t.chartType}'`}else if(t.chartType=="dataDownload"){if(!t.terms)throw`plot error: missing the config.terms for '${t.chartType}'`;if(!Array.isArray(t.terms))`plot error: config.terms must be an array '${t.chartType}'`;for(const s of t.terms){gt(s,e)}}else if(t.chartType=="sampleScatter"){if(!t.name)throw`plot error: missing the plot name for '${t.chartType}'`;if(!t.colorTW)`plot error: missing the plot color term wrapper for '${t.chartType}'`;if(!t.file)`plot error: missing the plot coordinates file for '${t.chartType}'`}else if(t.chartType=="genomeBrowser"){}else if(t.chartType=="Disco"){}else if(t.chartType=="profileBarchart"){}else if(t.chartType=="profilePolar"||t.chartType=="polar"){}else if(t.chartType=="DEanalysis"){}else if(t.chartType=="geneORA"){}else if(t.chartType=="sampleView"){}else if(t.chartType=="profileRadar"||t.chartType=="profileRadarFacility"){}else if(t.chartType=="singleCellPlot"){}else if(t.chartType=="brainImaging"){}else{ht(t,e)}}catch(t){throw t}}function ht(t,e){try{if(t.term)gt(t.chartType=="regression"?t.outcome:t.term,e)}catch(t){throw"plot.term error: "+t}if(t.term2){try{gt(t.term2,e)}catch(t){throw"plot.term2 error: "+t}if(t.term.term.type=="condition"&&t.term.term.id==t.term2.term.id){if(t.term.q.bar_by_grade&&t.term2.q.bar_by_grade)throw"plot error: term2 is the same CHC, but both cannot be using bar_by_grade";if(t.term.q.bar_by_children&&t.term2.q.bar_by_children)throw"plot error: term2 is the same CHC, but both cannot be using bar_by_children"}}if(t.term0){try{gt(t.term0,e)}catch(t){throw"plot.term0 error: "+t}}}function ft(t,e){if(!t.outcome)throw"plot error: plot.outcome{} not an object";try{gt(t.chartType=="regression"?t.outcome:t.term,e)}catch(t){throw"plot.outcome error: "+t}if(t.independent){for(const s of t.independent){gt(s,e)}}}function gt(t,e){if(!t.term)throw".term{} missing";if(!e.graphable(t.term))throw".term is not graphable (not a valid type)";if(!t.term.name)throw".term.name missing";if(!t.q)throw".q{} missing";switch(t.term.type){case"integer":case"float":case"survival":break;case"categorical":if(t.q.groupsetting&&!t.q.groupsetting.disabled){if(!t.term.values)throw".values{} missing when groupsetting is allowed"}break;case"condition":if(!t.term.values)throw".values{} missing";if(!t.q.bar_by_grade&&!t.q.bar_by_children)throw"neither q.bar_by_grade or q.bar_by_children is set to true";if(!t.q.value_by_max_grade&&!t.q.value_by_most_recent&&!t.q.value_by_computable_grade)throw"neither q.value_by_max_grade or q.value_by_most_recent or q.value_by_computable_grade is true";break;case"snplst":case"snplocus":case"geneVariant":break;case"samplelst":break;case b.GENE_EXPRESSION:break;case b.METABOLITE_INTENSITY:break;default:if(t.term.isgenotype){console.log('to add in type:"genotype"');break}throw`unknown term type='${t.term.type}'`}}class jt{constructor(t={}){this.type="recover";this.initialHolderDisplay=t.holder.style("display");this.dom={holder:t.holder,btnDiv:t.holder.append("div").style("position","sticky").style("top","12px").style("right","20px").style("margin",t.margin?t.margin:"10px").style("text-align","right")};this.hasStatePreMain=true;this.reactsTo=t.reactsTo||(()=>true);this.getState=t.getState||(t=>t);this.debouncedTrack=()=>{this.trackPending=true;this.trackState();this.render()};this.wait="wait"in t?t.wait:800;this.maxHistoryLen=t.maxHistoryLen||10}preApiFreeze(t){t.replaceLastState=t=>{if(this.isRecovering)return;this.state=this.getState(t);if(!this.trackPending)this.history[this.currIndex]=this.state}}init(){this.app.register(this.api);this.currIndex=-1;this.history=[];this.isActive=!isNaN(this.maxHistoryLen)&&+this.maxHistoryLen>0;if(this.isActive){yt(this);this.initUi()}this.eventTypes=["postInit","postRender"]}async main(){if(!this.isActive)return;if(this.opts.hide?.(this.state)){this.dom.holder.style("display","none");return}this.dom.holder.style("display",this.initialHolderDisplay||"");if(!this.timedTrack){this.trackState();this.trackPending=true;this.timedTrack=setTimeout((()=>{}),this.wait);return}clearTimeout(this.timedTrack);this.trackPending=true;this.timedTrack=setTimeout(this.debouncedTrack,this.wait)}trackState(){if(this.isRecovering){this.isRecovering=false;return}if(this.state._scope_=="none")return;this.isRecovering=false;const t=this.opts.adjustTrackedState?this.opts.adjustTrackedState(this.state):this.state;if(!t){console.error("no state to track");return}if(!Object.isFrozen(t))d(t);if(this.currIndex==-1)this.origState=t;if(this.currIndex<this.history.length-1){this.history.splice(this.currIndex,this.history.length-(this.currIndex+1))}if(u(t,this.history[this.history.length-1]))return;this.history.push(t);this.currIndex+=1;if(this.history.length>this.maxHistoryLen){this.history.splice(1,1);this.currIndex+=-1}this.trackPending=false}goto(t){if(t<0&&this.currIndex+t>-1)this.currIndex+=t;else if(t>0&&this.currIndex+t<this.history.length)this.currIndex+=t;else return;this.isRecovering=true;const e=this.history[this.currIndex];this.render();if(this.opts.plot_id){const t=structuredClone(e);this.app.dispatch({type:"plot_edit",id:this.opts.plot_id,config:t.config,_scope_:t._scope_})}else{this.app.dispatch({type:"app_refresh",state:e})}}reset(){this.currIndex=0;this.isRecovering=true;const t=this.origState;if(this.opts.plot_id){const e=t.plots.find((t=>t.id===this.opts.plot_id));this.app.dispatch({type:"plot_edit",id:this.opts.plot_id,config:structuredClone(e)})}else this.app.dispatch({type:"app_refresh",state:t})}}const bt=l(jt);function yt(t){t.initUi=function(){t.dom.undoBtn=t.dom.btnDiv.append("button").attr("title","undo the previous action").property("disabled",true).style("margin","0 0 0 4px").style("border","1px solid #ccc").style("vertical-align","middle").html(t.opts.undoHtml||`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="#000" class="bi bi-arrow-counterclockwise" viewBox="0 0 16 16" style='vertical-align: middle'>\n\t\t\t <path stroke='#000' stroke-width='0.25' fill-rule="evenodd" d="M8 3a5 5 0 1 1-4.546 2.914.5.5 0 0 0-.908-.417A6 6 0 1 0 8 2v1z"/>\n\t\t\t <path d="M8 4.466V.534a.25.25 0 0 0-.41-.192L5.23 2.308a.25.25 0 0 0 0 .384l2.36 1.966A.25.25 0 0 0 8 4.466z"/>\n\t\t\t</svg>`).on("click",(()=>t.goto(-1)));t.dom.redoBtn=t.dom.btnDiv.append("button").attr("title","redo a subsequent action").property("disabled",true).style("margin",t.opts.resetHtml?"0":"0 4px 0 0").style("border","1px solid #ccc").style("vertical-align","middle").html(t.opts.redoHtml||`<svg xmlns="http://www.w3.org/2000/svg" width="16" height="16" fill="#000" class="bi bi-arrow-clockwise" viewBox="0 0 16 16" style='vertical-align: middle'>\n\t\t\t <path stroke='#000' stroke-width='0.25' fill-rule="evenodd" d="M8 3a5 5 0 1 0 4.546 2.914.5.5 0 0 1 .908-.417A6 6 0 1 1 8 2v1z"/>\n\t\t\t <path d="M8 4.466V.534a.25.25 0 0 1 .41-.192l2.36 1.966c.12.1.12.284 0 .384L8.41 4.658A.25.25 0 0 1 8 4.466z"/>\n\t\t\t</svg>`).on("click",(()=>t.goto(1)));if(t.opts.resetHtml)t.dom.resetBtn=t.dom.btnDiv.append("button").attr("title","Restore the initial rendered state").property("disabled",true).style("margin","0 4px 0 0").style("border","1px solid #ccc").style("vertical-align","middle").html(t.opts.resetHtml).on("click",(()=>t.reset()))};t.render=function(){if(t.dom.undoBtn)t.dom.undoBtn.property("disabled",t.currIndex<1||t.history.length===1);if(t.dom.redoBtn)t.dom.redoBtn.property("disabled",t.history.length<2||t.currIndex>=t.history.length-1);if(t.dom.resetBtn)t.dom.resetBtn.property("disabled",t.currIndex===0)}}export{Y as a,Z as b,B as c,W as d,Q as e,J as f,$ as g,X as h,A as i,V as j,k,K as l,U as o,bt as r,dt as s};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{f as t,t as e}from"./termsetting-9a7511e6.js";import{az as i,aS as s,ac as n,M as o,q as r}from"./app-f91922b4.js";import{d as a,u as c}from"./FilterRxComp-0e75dd8d.js";import{InputValuesTable as p}from"./regression.inputs.values.table-d587c1cf.js";import{mayRunSnplstTask as d}from"./snplst.sampleSum-e47d05f0.js";import{R as l}from"./regression.results-748024be.js";class m{constructor(t){this.type="regression";this.genomeObj=t.app.opts.genome}async init(t){this.dom={header:this.opts.header,errordiv:this.opts.holder.append("div"),inputs:this.opts.holder.append("div").style("margin","20px 10px"),results:this.opts.holder.append("div").style("margin-left","40px")};const e=t.plots.find((t=>t.id===this.id));this.inputs=new O({app:this.app,parent:this,id:this.id,holder:this.dom.inputs,regressionType:e.regressionType});this.results=new l({app:this.app,parent:this,id:this.id,holder:this.dom.results,regressionType:e.regressionType})}getState(t,e){const i=t.plots.find((t=>t.id===this.id));if(!i){throw`No plot with id='${this.id}' found. Did you set this.id before this.api = getComponentApi(this)?`}if(!i.regressionType)throw"regressionType is required";return{vocab:t.vocab,formIsComplete:i.outcome&&i.independent.length,activeCohort:t.activeCohort,termfilter:t.termfilter,config:i,allowedTermTypes:t.termdbConfig.allowedTermTypes,minTimeSinceDx:t.termdbConfig.minTimeSinceDx}}async main(){try{this.config=JSON.parse(JSON.stringify(this.state.config));this.mayUpdateSandboxHeader();this.getFilter();await this.inputs.main();await this.results.main();this.inputs.resetSubmitButton()}catch(t){if(this.inputs.hasError){this.results.main()}n(this.dom.errordiv,"Error: "+(t.error||t));if(t.stack)console.log(t.stack)}}mayUpdateSandboxHeader(){if(!this.dom.header)return;const t=this.config.outcome;this.dom.header.html((t?t.term.name:"")+'<span style="opacity:.6;font-size:.7em;margin-left:10px;">'+this.config.regressionType.toUpperCase()+" REGRESSION</span>")}getFilter(){const t=[];if(this.state.termfilter?.filter)t.push(this.state.termfilter.filter);const e=[this.config.outcome,...this.config.independent];const i=e.filter((t=>t?.q.restrictAncestry));if(i.length){if(i.length>1){const t=new Set(i.map((t=>t.q.restrictAncestry.name)));if(t.size>1)throw"samples cannot be restricted to more than 1 ancestry"}const e=i[0];t.push({type:"tvs",tvs:e.q.restrictAncestry.tvs});this.inputs.dom.submitMsg.style("display","block").text(`restricting analysis to samples of ${e.q.restrictAncestry.name}`)}else{this.inputs.dom.submitMsg.style("display","none")}this.filter={type:"tvslst",join:"and",lst:t}}}const u=i(m);const f=u;let h=1;async function g(e,i){if(!e.outcome){e.outcome={}}{const s=i.opts.state.plots.find((t=>t.chartType=="regression"));if(!s)throw"regression plot missing in state";await t(e.outcome,i.vocabApi,y(s.regressionType,"outcome"))}const n="id"in e?e.id:`_REGRESSION_${h++}`;const o={id:n};o.outcome=e.outcome;if(e.independent){if(!Array.isArray(e.independent))throw".independent[] is not array";for(const s of e.independent){const e=!s.q?.mode?{numeric:{mode:"continuous"}}:undefined;await t(s,i.vocabApi,e)}o.independent=e.independent;delete e.independent}else{o.independent=[]}return s(o,e)}function y(t,e=""){const i={};i["numeric"]=t=="logistic"&&e=="outcome"?{mode:"binary"}:{mode:"discrete"};i["categorical"]=t=="logistic"&&e=="outcome"?{mode:"binary"}:{mode:"discrete"};if(e=="outcome"){if(t=="cox"){i.condition={mode:"cox"}}if(t=="logistic"){i.condition={mode:"binary"}}}return i}function b(t,e){const i=[{label:"Linear",type:"linear"},{label:"Logistic",type:"logistic"},{label:"Cox",type:"cox"}];for(const{label:s,type:n}of i){t.append("div").attr("class","sja_menuoption sja_sharp_border").text(s).on("click",(()=>{e.dom.tip.hide();e.prepPlot({config:{chartType:"regression",regressionType:n,independent:[]}})}))}}var v=Object.freeze({__proto__:null,regressionInit:u,componentInit:f,getPlotConfig:g,get_defaultQ4fillTW:y,makeChartBtnMenu:b});class x{constructor(t){this.opts=t;this.section=t.section;this.term=t.term;this.parent=t.parent}async init(t){const i=t.append("div");const s=i.append("span").style("display","inline-block");const n=i.append("span").style("margin-left","20px");this.dom={holder:t,termRow:i,pillDiv:s,interactionDiv:n,err_div:t.append("div").style("display","none").style("padding","5px").style("background-color","rgba(255,100,100,0.2)"),infoDiv:t.append("div"),tip:new o};try{const{app:t,config:i,state:s,disable_terms:n}=this.parent;const o={placeholder:this.section.selectPrompt,placeholderIcon:this.section.placeholderIcon,holder:this.dom.pillDiv,vocabApi:t.vocabApi,noTermPromptOptions:this.opts.noTermPromptOptions,activeCohort:s.activeCohort,debug:t.opts.debug,menuOptions:this.section.configKey=="outcome"?"{edit,reuse,replace}":"{edit,reuse,remove}",usecase:{target:"regression",detail:this.section.configKey,regressionType:i.regressionType},disable_terms:n,abbrCutoff:50,genomeObj:this.parent.parent.genomeObj,defaultQ4fillTW:y(i.regressionType,this.section.configKey),callback:t=>{this.parent.editConfig(this,t)}};this.furbishTsConstructorArg(o);this.pill=await e(o);if(this.section.configKey=="outcome"){this.setQ=S(i.regressionType)}this.valuesTable=new p({holder:this.dom.infoDiv,input:this,callback:t=>{this.parent.editConfig(this,t)}})}catch(t){this.displayError([t])}}furbishTsConstructorArg(t){const e=this.parent.config.regressionType;if(this.section.configKey=="outcome"){if(e=="logistic"){t.numericEditMenuVersion=["binary"];return}if(e=="linear"){t.numericEditMenuVersion=["continuous"];return}if(e=="cox"){return}throw"unknown regressionType"}if(this.section.configKey=="independent"){t.numericEditMenuVersion=["continuous","discrete","spline"];return}throw"unknown section.configKey: "+this.section.configKey}displayError(t){this.hasError=true;this.dom.err_div.selectAll("*").remove();this.dom.err_div.style("display","block").selectAll("div").data(Array.isArray(t)?t:[t]).enter().append("div").text((t=>t));this.parent.handleError();console.error(t)}async main(){const t=this.term;if(t){delete t.error}this.dom.err_div.style("display","none").text("");this.hasError=false;const e=[];try{if(t&&this.setQ){const{app:e,state:i}=this.parent;await this.setQ[t.term.type](t,e.vocabApi,this.parent.parent.filter,i)}try{await this.updateTerm()}catch(t){e.push(t)}await this.pill.main(this.getPillArgs());this.renderInteractionPrompt();await this.valuesTable.main();const i=t&&t.error||this.pill.error;if(i)e.push(i);if(e.length)throw e}catch(e){this.displayError(e)}}async updateTerm(){const t=this.term;if(!t)return;if(!t.q)throw".term.q missing on this input";if(!t.q.mode&&a(t.term.type)){if(t.term.type=="categorical"||t.term.type=="condition"||t.term.type=="survival")t.q.mode="discrete";else t.q.mode="continuous"}const e=t.term.type=="snplst"||t.term.type=="snplocus"?{cacheid:t.q.cacheid}:{term1_q:t.q};const i=await this.parent.app.vocabApi.getCategories(t.term,this.parent.parent.filter,e);if(!i)throw`no data for term.id='${t.term.id}'`;if(i.error)throw i.error;d(t,i);this.termStatus={topInfoStatus:[],bottomSummaryStatus:undefined,sampleCounts:undefined,excludeCounts:undefined,allowToSelectRefGrp:false};if(t.q.numOfSampleWithAnyValidGT){const e=t.term.snps.reduce(((t,e)=>t+(e.invalid?1:0)),0);this.termStatus.topInfoStatus.push(`${t.q.numOfSampleWithAnyValidGT} samples with valid genotypes`+(e>0?` ${e} invalid SNP${e>1?"s":""}.`:""))}if("geneticModel"in t.q){this.termStatus.topInfoStatus.push("Genetic model: "+(t.q.geneticModel==0?"Additive":t.q.geneticModel==1?"Dominant":t.q.geneticModel==2?"Recessive":"By genotype"))}if(t.q.restrictAncestry){this.termStatus.topInfoStatus.push("Analyzing "+t.q.restrictAncestry.name);if(t.q.restrictAncestry.PCcount){this.termStatus.topInfoStatus.push(`Adjusting for top ${t.q.restrictAncestry.PCcount} ancestry principal components`)}}if(t.term.reachedVariantLimit){this.termStatus.topInfoStatus.push(`<span class=sja_mcdot style="background:#aaa;font-size:1em">\n\t\t\t\t ⚠ Restricted to first ${t.term.snps.length}\n\t\t\t\tvariants of this region. </span> Try zooming in.`)}this.orderedLabels=i.orderedLabels;if(i.lst){this.summarizeSample(t,i.lst);if(t.term.type=="float"||t.term.type=="integer"){if(t.q.mode!="continuous"&&t.q.mode!="spline"){this.termStatus.allowToSelectRefGrp=true}if(t.q.scale&&t.q.scale!=1)this.termStatus.topInfoStatus.push(`Scale: Per ${t.q.scale}`);if(t.q.mode=="discrete"){this.termStatus.topInfoStatus.push(`Discrete variable with ${this.termStatus.sampleCounts.length} bins`)}if(t.q.mode=="spline"){this.termStatus.topInfoStatus.push(`Cubic spline variable with ${t.q.knots.length} knots: ${t.q.knots.map((t=>Number(t.value))).sort(((t,e)=>t-e)).join(", ")}`)}}else if(t.term.type=="categorical"){this.termStatus.allowToSelectRefGrp=true}else if(t.term.type=="condition"){if(this.section.configKey=="outcome"&&this.parent.opts.regressionType=="logistic"){this.termStatus.allowToSelectRefGrp=true}if(this.section.configKey=="outcome"&&this.parent.opts.regressionType=="cox"){if(!["age","time"].includes(t.q.timeScale))throw"invalid q.timeScale";const e=this.parent.app.vocabApi.termdbConfig;this.termStatus.topInfoStatus.push(`Time axis: ${t.q.timeScale=="time"?e.timeUnit:"age"}`);this.termStatus.topInfoStatus.push(`<span style="padding-left: 10px;">-start: ${t.q.timeScale=="time"?" ":"age at "}entry into the cohort (i.e., ${e.cohortStartTimeMsg})</span>`);this.termStatus.topInfoStatus.push(`<span style="padding-left: 10px;">-end: ${t.q.timeScale=="time"?" ":"age at "}event or censoring/death</span>`);const i=Object.keys(t.term.values).map(Number);const s=Math.max(...i);this.termStatus.topInfoStatus.push(`<div style="padding-top: 8px;">Event: first occurrence of grade ${t.q.breaks[0]===s?t.q.breaks[0]:`${t.q.breaks[0]}-${s}</div>`}`)}}this.maySet_refGrp(t)}}summarizeSample(t,e){const i=new Set;if(t.term.values){for(const e in t.term.values){if(t.term.values[e].uncomputable)i.add(t.term.values[e].label)}}if(t.q.mode=="cox"){const t=e.find((t=>t.key==-1));if(t)i.add(t.label)}const s=this.termStatus.sampleCounts=e.filter((t=>!i.has(t.label)));const n=this.termStatus.excludeCounts=e.filter((t=>i.has(t.label)));const o={included:0,excluded:0,total:0};s.forEach((t=>o.included+=t.samplecount));n.forEach((t=>o.excluded+=t.samplecount));o.total=o.included+o.excluded;if(t.term.type=="condition"&&o.total){o.excluded=o.total-o.included}this.termStatus.bottomSummaryStatus=`${o.included} samples included`+(o.excluded?`. ${o.excluded} samples excluded:`:"");if(t&&t.q.mode!=="continuous"&&s.length<2)throw`there should be two or more discrete values with samples for variable='${t.term.name}'`}maySet_refGrp(t){if(this.section.configKey=="outcome"&&this.parent.config.regressionType=="cox"){return}if(t.q.mode=="continuous"){t.refGrp="NA";return}const e=this.termStatus.sampleCounts;if(!("refGrp"in t)||!e.find((e=>e.key==t.refGrp))){const i=this.orderedLabels;if(i&&i.length)e.sort(((t,e)=>i.indexOf(t.key)-i.indexOf(e.key)));else e.sort(((t,e)=>t.samplecount<e.samplecount?1:-1));t.refGrp=e[0].key}}getPillArgs(){const t=this.section;const{config:e,state:i,disable_terms:s}=this.parent;const n=Object.assign({activeCohort:i.activeCohort,disable_terms:s,usecase:{target:"regression",detail:t.configKey,regressionType:e.regressionType}},this.term);n.filter=this.parent.parent.filter;return n}remove(){this.dom.termRow.transition().duration(500).style("opacity",0).remove();for(const t in this.dom){delete this.dom[t]}}renderInteractionPrompt(){this.dom.interactionDiv.style("display","none");if(!this.term)return;if(this.section.configKey!="independent")return;if(this.term.q.mode=="spline")return;{let t=0;for(const e of this.section.inputLst){if(e.term&&e.term.q.mode!="spline"){t++}}if(t<2)return}const t=this.term.interactions.length;this.dom.interactionDiv.style("display","inline").html(t==0?"Add interactions":`${t} interaction${t>1?"s":""}`).style("padding","5px").style("background-color",t==0?null:"#ececec").style("border-radius",t==0?null:"6px").style("color",t==0?"rgb(153, 153, 153)":"#000").style("font-size",t==0?"0.8em":"").style("cursor","pointer").on("click",(()=>this.renderInteractionOptions()))}renderInteractionOptions(){const t=this;t.dom.tip.clear().showunder(t.dom.interactionDiv.node());t.dom.tip.d.append("div").style("padding","5px").style("font-size","0.8em").style("color","rgb(153, 153, 153)").html(`Selected variables will each form pairwise interaction with ${this.term.term.name}`);t.dom.tip.d.append("div").selectAll("div").data(t.parent.config.independent.filter((e=>e&&e.term.id!==t.term.term.id&&e.q.mode!="spline"))).enter().append("div").style("margin","5px").each((function(e){const i=r(this).append("label");i.append("input").attr("type","checkbox").property("checked",t.term.interactions.includes(e.term.id));i.append("span").text(" "+e.term.name)}));t.dom.tip.d.append("button").text("Apply").style("margin","5px").on("click",(()=>{t.dom.tip.hide();t.term.interactions=[];t.dom.tip.d.selectAll("input").each((function(e){if(r(this).property("checked"))t.term.interactions.push(e.term.id)}));for(const e of t.parent.config.independent){const i=e.interactions.indexOf(t.term.term.id);if(t.term.interactions.includes(e.term.id)){if(i==-1)e.interactions.push(t.term.term.id)}else if(i!=-1){e.interactions.splice(i,1)}}t.parent.editConfig(t,t.term)}))}}function S(t){return{integer:t=="logistic"?w:_,float:t=="logistic"?w:_,geneExpression:t=="logistic"?w:_,categorical:q,condition:T,survival:T}}async function w(t,e,i,s){if(t.q.mode=="binary"&&t.q.lst&&t.q.lst.length==2){t.q.mode="binary";return}const n=await e.getPercentile(t.term.id,[50],i);if(n.error||!n.values.length||!Number.isFinite(n.values[0]))throw"cannot get median value: "+(n.error||"no data");const o=t.term.type=="integer"?Math.round(n.values[0]):Number(n.values[0].toFixed(2));t.q={mode:"binary",type:"custom-bin",lst:[{startunbounded:true,stopinclusive:true,stop:o},{stopunbounded:true,startinclusive:false,start:o}]};t.q.lst.forEach((e=>{e.label=c(e,t.q)}));t.refGrp=t.q.lst[0].label}function T(t,e,i,s){if(s.config.regressionType=="logistic"){if(!t.refGrp)t.refGrp=t.q.groups[0].name}if(s.config.regressionType=="cox"){if(!t.q.timeScale)t.q.timeScale="time"}}async function q(t,e,i,s){const{term:n,q:o}=t;if(o.mode=="binary"){if(o.type=="values"&&Object.keys(n.values).length==2)return;if(o.type=="predefined-groupset"){const t=o.groupsetting.predefined_groupset_idx;const e=n.groupsetting;if(e[t]&&Object.keys(e[t]).length==2)return}if(o.type=="custom-groupset"){const t=o.groupsetting.customset;if(t.groups.length==2)return}}const r={term1_q:o};const a=await e.getCategories(n,i,r);if(a.error)throw"cannot get categories: "+a.error;const c=new Map;const p=[];let d=false;const l=n.type=="condition"&&n.groupsetting.lst.length;if(n.groupsetting&&n.groupsetting.inuse){for(const t of n.groupsetting.lst[0].groups){if(t.type=="filter"&&t.filter4activeCohort){d=true}}}for(const t of a.lst){c.set(t.key,t.samplecount);if(n.values&&n.values[t.key]&&n.values[t.key].uncomputable)continue;p.push(t.key)}if(p.length<2&&!d&&!l){o.type="values";t.error="less than 2 categories/grades - cannot create separate groups";return}if(p.length==2&&!d&&!l){o.type="values";return}const m=n.groupsetting;const u=o.groupsetting;u.inuse=true;u.activeCohort=e.state.activeCohort;if(u.customset&&u.customset.groups&&u.customset.groups.length==2&&k(u.customset,c)){o.type="custom-groupset";return}if(m&&m.lst){if(u.predefined_groupset_idx>=0&&m.lst[u.predefined_groupset_idx]&&m.lst[u.predefined_groupset_idx].groups.length==2&&k(m.lst[u.predefined_groupset_idx],c)){o.type="predefined-groupset";return}const t=m.lst.findIndex((t=>t.groups.length==2));if(t!=-1&&k(m.lst[t],c)){u.predefined_groupset_idx=t;o.type="predefined-groupset";return}}const f={activeCohort:s.activeCohort,groups:[{name:"Group 1",type:"values",values:[]},{name:"Group 2",type:"values",values:[]}]};const h=Math.round(p.length/2);for(const[t,e]of p.entries()){if(t<h)f.groups[0].values.push({key:e});else f.groups[1].values.push({key:e})}u.customset=f;o.type="custom-groupset"}function _(t){if(!t.q.type){console.log("may not happen: why is input.term.q not yet set for numeric term at this point")}t.q.mode="continuous"}function k(t,e){for(const i of t.groups){let t=0;if(i.type=="values"){for(const s of i.values)t+=e.get(s.key)||0;if(t==0)return false}}return true}var A=Object.freeze({__proto__:null,InputTerm:x});const C=[{termtype:"snplst",html:"A list of variants"},{termtype:"snplocus",html:"Variants in a locus"},{termtype:"prs",text:"Polygenic risk score"}];class O{constructor(t){this.opts=t;this.app=t.app;this.parent=t.parent;E(this);I(this);this.createSectionConfigs();this.initUI()}createSectionConfigs(){this.outcome={heading:"Outcome variable",selectPrompt:this.opts.regressionType=="linear"?"Select continuous outcome variable":"Select outcome variable",placeholderIcon:"",configKey:"outcome",limit:1,usecase:{target:"regression",regressionType:this.opts.regressionType,detail:"outcome"},inputLst:[],dom:{}};this.independent={heading:"Independent variable(s)",selectPrompt:"Add independent variable",placeholderIcon:"",configKey:"independent",limit:10,usecase:{target:"regression",regressionType:this.opts.regressionType,detail:"independent"},inputLst:[],dom:{}};this.sections=[this.outcome,this.independent]}async main(){try{this.config=this.parent.config;this.state=this.parent.state;this.hasError=false;this.setDisableTerms();const t=[];for(const e of this.sections){await this.renderSection(e);for(const i of e.inputLst){i.dom.holder.style("border-left",i.term?"1px solid #bbb":"");t.push(i.main())}}await Promise.all(t);for(const t of this.sections){for(const e of t.inputLst){if(e.term&&e.term.error||e.hasError){this.hasError=true}}}}catch(t){this.hasError=true;throw t}}setDisableTerms(){this.disable_terms=[];if(this.config.outcome&&this.config.outcome.term)this.disable_terms.push(this.config.outcome.term);if(this.config.independent){for(const t of this.config.independent){this.disable_terms.push(t.term)}}}handleError(){this.hasError=true;this.dom.submitBtn.property("disabled",true)}getNoTermPromptOptions(t){if(t.configKey!="independent")return;const e=[];for(const i of C){if(!this.state.allowedTermTypes.includes(i.termtype)){continue}if(t.inputLst.find((t=>t.term&&t.term.term.type==i.termtype))){continue}e.push(i)}if(e.length){e.unshift({isDictionary:true,text:"Dictionary variable"})}return e}}function I(t){t.initUI=()=>{const e=t.opts.holder.append("div").style("display","block");t.dom={div:t.opts.holder,controls:e,body:e.append("div"),foot:e.append("div").style("margin","0px 20px").style("display","flex").style("align-items","center").style("gap","20px")};t.dom.submitBtn=t.dom.foot.append("div").append("button").style("display","none").style("padding","5px 15px").style("border-radius","15px").style("cursor","pointer").text("Run analysis").on("click",t.submit);t.dom.submitMsg=t.dom.foot.append("div").style("display","none").style("color","#cc0000").style("font-style","italic").style("font-size","0.8em");for(const e of t.sections){const i=t.dom.body.append("div");t.addSection(e,i)}};t.addSection=function(t,e){e.style("display","none").style("margin","3px 5px").style("padding","3px 5px");t.dom={holder:e,headingDiv:e.append("div").style("margin","3px 5px 20px 5px").style("font-size","17px").style("color","#bbb").text(t.heading),inputsDiv:e.append("div")}};t.renderSection=function(n){n.dom.holder.style("display",n.configKey=="outcome"||t.config.outcome?"block":"none");e(n);const o=n.dom.inputsDiv.selectAll(":scope > div").data(n.inputLst,(t=>t.term&&t.term.term.id));o.exit().each(s);o.enter().append("div").each(i)};function e(e){const i=t.config[e.configKey];const s=Array.isArray(i)?i:i?[i]:[];for(const n of s){if(e.configKey=="independent"){if(!n.interactions)n.interactions=[];for(const t of n.interactions){const e=i.find((e=>e.term.id==t));if(!e)throw"interacting partner not found in independents: "+t;if(!e.interactions)e.interactions=[];if(!e.interactions.includes(n.term.id))e.interactions.push(n.term.id)}}const s=e.inputLst.find((t=>t.term&&t.term.term.id==n.term.id));if(!s){e.inputLst.push(new x({section:e,term:n,parent:t}))}else{s.term=n}}$(e,t)}async function i(t){await t.init(r(this).style("width","fit-content").style("margin","0px 15px 35px 25px").style("padding","0px 5px"))}function s(t){t.remove();for(const e in t.dom){delete t.dom[e]}const e=r(this);e.transition().duration(500).style("opacity",0).remove()}t.resetSubmitButton=()=>{t.dom.submitBtn.text("Run analysis").style("display",t.config.outcome&&t.config.independent.length?"block":"none").property("disabled",t.hasError)}}function E(t){t.editConfig=async(e,i)=>{if(!i){const t=e.section.inputLst.findIndex((t=>t===e));if(t==-1)throw`deleting an unknown input`;e.section.inputLst.splice(t,1);if(e.term){for(const t of e.section.inputLst){if(!t.term||!t.term.interactions)continue;const i=t.term.interactions.indexOf(e.term.term.id);if(i!=-1)t.term.interactions.splice(i,1)}}}else{const t=e.term;if(t&&i.term.id===t.term.id){for(const e in t){if(!(e in i))i[e]=t[e]}}e.term=i;if(i.q.mode=="spline"&&i.interactions){for(const t of e.section.inputLst){if(!t.term||!t.term.interactions)continue;const i=t.term.interactions.indexOf(e.term.term.id);if(i!=-1)t.term.interactions.splice(i,1)}i.interactions=[]}}const s=[];for(const t of e.section.inputLst){if(t.term)s.push(t.term)}const n=e.section.configKey;const o=Array.isArray(t.config[n])?s:s[0];t.app.dispatch({type:"plot_edit",id:t.parent.id,chartType:"regression",config:{hasUnsubmittedEdits:true,[n]:JSON.parse(JSON.stringify(o))}})};t.submit=()=>{t.dom.submitBtn.property("disabled",true);if(t.hasError){alert("Please fix the input variable errors (highlighted in red background).");return}const e=JSON.parse(JSON.stringify(t.config));e.hasUnsubmittedEdits=false;t.app.dispatch({type:"plot_edit",id:t.parent.id,chartType:"regression",config:e})}}function $(t,e){if(t.inputLst.length>=t.limit){return}const i=t.inputLst.find((t=>!t.term));if(i){const s=e.getNoTermPromptOptions(t);if(s){i.pill.main({noTermPromptOptions:s})}return}t.inputLst.push(new x({section:t,parent:e,noTermPromptOptions:e.getNoTermPromptOptions(t)}))}var P=Object.freeze({__proto__:null,RegressionInputs:O});export{A as a,P as b,v as r};
|
|
1
|
+
import{f as t,t as e}from"./termsetting-636d2271.js";import{az as i,aS as s,ac as n,M as o,q as r}from"./app-71453429.js";import{d as a,u as c}from"./FilterRxComp-fc769f34.js";import{InputValuesTable as p}from"./regression.inputs.values.table-1618447a.js";import{mayRunSnplstTask as l}from"./snplst.sampleSum-e47d05f0.js";import{R as d}from"./regression.results-25008028.js";class m{constructor(t){this.type="regression";this.genomeObj=t.app.opts.genome}async init(t){this.dom={header:this.opts.header,errordiv:this.opts.holder.append("div"),inputs:this.opts.holder.append("div").style("margin","20px 10px"),results:this.opts.holder.append("div").style("margin-left","40px")};const e=t.plots.find((t=>t.id===this.id));this.inputs=new O({app:this.app,parent:this,id:this.id,holder:this.dom.inputs,regressionType:e.regressionType});this.results=new d({app:this.app,parent:this,id:this.id,holder:this.dom.results,regressionType:e.regressionType})}getState(t,e){const i=t.plots.find((t=>t.id===this.id));if(!i){throw`No plot with id='${this.id}' found. Did you set this.id before this.api = getComponentApi(this)?`}if(!i.regressionType)throw"regressionType is required";return{vocab:t.vocab,formIsComplete:i.outcome&&i.independent.length,activeCohort:t.activeCohort,termfilter:t.termfilter,config:i,allowedTermTypes:t.termdbConfig.allowedTermTypes,minTimeSinceDx:t.termdbConfig.minTimeSinceDx}}async main(){try{this.config=JSON.parse(JSON.stringify(this.state.config));this.mayUpdateSandboxHeader();this.getFilter();await this.inputs.main();await this.results.main();this.inputs.resetSubmitButton()}catch(t){if(this.inputs.hasError){this.results.main()}n(this.dom.errordiv,"Error: "+(t.error||t));if(t.stack)console.log(t.stack)}}mayUpdateSandboxHeader(){if(!this.dom.header)return;const t=this.config.outcome;this.dom.header.html((t?t.term.name:"")+'<span style="opacity:.6;font-size:.7em;margin-left:10px;">'+this.config.regressionType.toUpperCase()+" REGRESSION</span>")}getFilter(){const t=[];if(this.state.termfilter?.filter)t.push(this.state.termfilter.filter);const e=[this.config.outcome,...this.config.independent];const i=e.filter((t=>t?.q.restrictAncestry));if(i.length){if(i.length>1){const t=new Set(i.map((t=>t.q.restrictAncestry.name)));if(t.size>1)throw"samples cannot be restricted to more than 1 ancestry"}const e=i[0];t.push({type:"tvs",tvs:e.q.restrictAncestry.tvs});this.inputs.dom.submitMsg.style("display","block").text(`restricting analysis to samples of ${e.q.restrictAncestry.name}`)}else{this.inputs.dom.submitMsg.style("display","none")}this.filter={type:"tvslst",join:"and",lst:t}}}const u=i(m);const f=u;let h=1;async function g(e,i){if(!e.outcome){e.outcome={}}{const s=i.opts.state.plots.find((t=>t.chartType=="regression"));if(!s)throw"regression plot missing in state";await t(e.outcome,i.vocabApi,y(s.regressionType,"outcome"))}const n="id"in e?e.id:`_REGRESSION_${h++}`;const o={id:n};o.outcome=e.outcome;if(e.independent){if(!Array.isArray(e.independent))throw".independent[] is not array";for(const s of e.independent){const e=!s.q?.mode?{numeric:{mode:"continuous"}}:undefined;await t(s,i.vocabApi,e)}o.independent=e.independent;delete e.independent}else{o.independent=[]}return s(o,e)}function y(t,e=""){const i={};i["numeric"]=t=="logistic"&&e=="outcome"?{mode:"binary"}:{mode:"discrete"};i["categorical"]=t=="logistic"&&e=="outcome"?{mode:"binary"}:{mode:"discrete"};if(e=="outcome"){if(t=="cox"){i.condition={mode:"cox"}}if(t=="logistic"){i.condition={mode:"binary"}}}return i}function b(t,e){const i=[{label:"Linear",type:"linear"},{label:"Logistic",type:"logistic"},{label:"Cox",type:"cox"}];for(const{label:s,type:n}of i){t.append("div").attr("class","sja_menuoption sja_sharp_border").text(s).on("click",(()=>{e.dom.tip.hide();e.prepPlot({config:{chartType:"regression",regressionType:n,independent:[]}})}))}}var v=Object.freeze({__proto__:null,regressionInit:u,componentInit:f,getPlotConfig:g,get_defaultQ4fillTW:y,makeChartBtnMenu:b});class x{constructor(t){this.opts=t;this.section=t.section;this.term=t.term;this.parent=t.parent}async init(t){const i=t.append("div");const s=i.append("span").style("display","inline-block");const n=i.append("span").style("margin-left","20px");this.dom={holder:t,termRow:i,pillDiv:s,interactionDiv:n,err_div:t.append("div").style("display","none").style("padding","5px").style("background-color","rgba(255,100,100,0.2)"),infoDiv:t.append("div"),tip:new o};try{const{app:t,config:i,state:s,disable_terms:n}=this.parent;const o={placeholder:this.section.selectPrompt,placeholderIcon:this.section.placeholderIcon,holder:this.dom.pillDiv,vocabApi:t.vocabApi,noTermPromptOptions:this.opts.noTermPromptOptions,activeCohort:s.activeCohort,debug:t.opts.debug,menuOptions:this.section.configKey=="outcome"?"{edit,reuse,replace}":"{edit,reuse,remove}",usecase:{target:"regression",detail:this.section.configKey,regressionType:i.regressionType},disable_terms:n,abbrCutoff:50,genomeObj:this.parent.parent.genomeObj,defaultQ4fillTW:y(i.regressionType,this.section.configKey),callback:t=>{this.parent.editConfig(this,t)}};this.furbishTsConstructorArg(o);this.pill=await e(o);if(this.section.configKey=="outcome"){this.setQ=S(i.regressionType)}this.valuesTable=new p({holder:this.dom.infoDiv,input:this,callback:t=>{this.parent.editConfig(this,t)}})}catch(t){this.displayError([t])}}furbishTsConstructorArg(t){const e=this.parent.config.regressionType;if(this.section.configKey=="outcome"){if(e=="logistic"){t.numericEditMenuVersion=["binary"];return}if(e=="linear"){t.numericEditMenuVersion=["continuous"];return}if(e=="cox"){return}throw"unknown regressionType"}if(this.section.configKey=="independent"){t.numericEditMenuVersion=["continuous","discrete","spline"];return}throw"unknown section.configKey: "+this.section.configKey}displayError(t){this.hasError=true;this.dom.err_div.selectAll("*").remove();this.dom.err_div.style("display","block").selectAll("div").data(Array.isArray(t)?t:[t]).enter().append("div").text((t=>t));this.parent.handleError();console.error(t)}async main(){const t=this.term;if(t){delete t.error}this.dom.err_div.style("display","none").text("");this.hasError=false;const e=[];try{if(t&&this.setQ){const{app:e,state:i}=this.parent;await this.setQ[t.term.type](t,e.vocabApi,this.parent.parent.filter,i)}try{await this.updateTerm()}catch(t){e.push(t)}await this.pill.main(this.getPillArgs());this.renderInteractionPrompt();await this.valuesTable.main();const i=t&&t.error||this.pill.error;if(i)e.push(i);if(e.length)throw e}catch(e){this.displayError(e)}}async updateTerm(){const t=this.term;if(!t)return;if(!t.q)throw".term.q missing on this input";if(!t.q.mode&&a(t.term.type)){if(t.term.type=="categorical"||t.term.type=="condition"||t.term.type=="survival")t.q.mode="discrete";else t.q.mode="continuous"}const e=t.term.type=="snplst"||t.term.type=="snplocus"?{cacheid:t.q.cacheid}:{term1_q:t.q};const i=await this.parent.app.vocabApi.getCategories(t.term,this.parent.parent.filter,e);if(!i)throw`no data for term.id='${t.term.id}'`;if(i.error)throw i.error;l(t,i);this.termStatus={topInfoStatus:[],bottomSummaryStatus:undefined,sampleCounts:undefined,excludeCounts:undefined,allowToSelectRefGrp:false};if(t.q.numOfSampleWithAnyValidGT){const e=t.term.snps.reduce(((t,e)=>t+(e.invalid?1:0)),0);this.termStatus.topInfoStatus.push(`${t.q.numOfSampleWithAnyValidGT} samples with valid genotypes`+(e>0?` ${e} invalid SNP${e>1?"s":""}.`:""))}if("geneticModel"in t.q){this.termStatus.topInfoStatus.push("Genetic model: "+(t.q.geneticModel==0?"Additive":t.q.geneticModel==1?"Dominant":t.q.geneticModel==2?"Recessive":"By genotype"))}if(t.q.restrictAncestry){this.termStatus.topInfoStatus.push("Analyzing "+t.q.restrictAncestry.name);if(t.q.restrictAncestry.PCcount){this.termStatus.topInfoStatus.push(`Adjusting for top ${t.q.restrictAncestry.PCcount} ancestry principal components`)}}if(t.term.reachedVariantLimit){this.termStatus.topInfoStatus.push(`<span class=sja_mcdot style="background:#aaa;font-size:1em">\n\t\t\t\t ⚠ Restricted to first ${t.term.snps.length}\n\t\t\t\tvariants of this region. </span> Try zooming in.`)}this.orderedLabels=i.orderedLabels;if(i.lst){this.summarizeSample(t,i.lst);if(t.term.type=="float"||t.term.type=="integer"){if(t.q.mode!="continuous"&&t.q.mode!="spline"){this.termStatus.allowToSelectRefGrp=true}if(t.q.scale&&t.q.scale!=1)this.termStatus.topInfoStatus.push(`Scale: Per ${t.q.scale}`);if(t.q.mode=="discrete"){this.termStatus.topInfoStatus.push(`Discrete variable with ${this.termStatus.sampleCounts.length} bins`)}if(t.q.mode=="spline"){this.termStatus.topInfoStatus.push(`Cubic spline variable with ${t.q.knots.length} knots: ${t.q.knots.map((t=>Number(t.value))).sort(((t,e)=>t-e)).join(", ")}`)}}else if(t.term.type=="categorical"){this.termStatus.allowToSelectRefGrp=true}else if(t.term.type=="condition"){if(this.section.configKey=="outcome"&&this.parent.opts.regressionType=="logistic"){this.termStatus.allowToSelectRefGrp=true}if(this.section.configKey=="outcome"&&this.parent.opts.regressionType=="cox"){if(!["age","time"].includes(t.q.timeScale))throw"invalid q.timeScale";const e=this.parent.app.vocabApi.termdbConfig;this.termStatus.topInfoStatus.push(`Time axis: ${t.q.timeScale=="time"?e.timeUnit:"age"}`);this.termStatus.topInfoStatus.push(`<span style="padding-left: 10px;">-start: ${t.q.timeScale=="time"?" ":"age at "}entry into the cohort (i.e., ${e.cohortStartTimeMsg})</span>`);this.termStatus.topInfoStatus.push(`<span style="padding-left: 10px;">-end: ${t.q.timeScale=="time"?" ":"age at "}event or censoring/death</span>`);const i=Object.keys(t.term.values).map(Number);const s=Math.max(...i);this.termStatus.topInfoStatus.push(`<div style="padding-top: 8px;">Event: first occurrence of grade ${t.q.breaks[0]===s?t.q.breaks[0]:`${t.q.breaks[0]}-${s}</div>`}`)}}this.maySet_refGrp(t)}}summarizeSample(t,e){const i=new Set;if(t.term.values){for(const e in t.term.values){if(t.term.values[e].uncomputable)i.add(t.term.values[e].label)}}if(t.q.mode=="cox"){const t=e.find((t=>t.key==-1));if(t)i.add(t.label)}const s=this.termStatus.sampleCounts=e.filter((t=>!i.has(t.label)));const n=this.termStatus.excludeCounts=e.filter((t=>i.has(t.label)));const o={included:0,excluded:0,total:0};s.forEach((t=>o.included+=t.samplecount));n.forEach((t=>o.excluded+=t.samplecount));o.total=o.included+o.excluded;if(t.term.type=="condition"&&o.total){o.excluded=o.total-o.included}this.termStatus.bottomSummaryStatus=`${o.included} samples included`+(o.excluded?`. ${o.excluded} samples excluded:`:"");if(t&&t.q.mode!=="continuous"&&s.length<2)throw`there should be two or more discrete values with samples for variable='${t.term.name}'`}maySet_refGrp(t){if(this.section.configKey=="outcome"&&this.parent.config.regressionType=="cox"){return}if(t.q.mode=="continuous"){t.refGrp="NA";return}const e=this.termStatus.sampleCounts;if(!("refGrp"in t)||!e.find((e=>e.key==t.refGrp))){const i=this.orderedLabels;if(i&&i.length)e.sort(((t,e)=>i.indexOf(t.key)-i.indexOf(e.key)));else e.sort(((t,e)=>t.samplecount<e.samplecount?1:-1));t.refGrp=e[0].key}}getPillArgs(){const t=this.section;const{config:e,state:i,disable_terms:s}=this.parent;const n=Object.assign({activeCohort:i.activeCohort,disable_terms:s,usecase:{target:"regression",detail:t.configKey,regressionType:e.regressionType}},this.term);n.filter=this.parent.parent.filter;return n}remove(){this.dom.termRow.transition().duration(500).style("opacity",0).remove();for(const t in this.dom){delete this.dom[t]}}renderInteractionPrompt(){this.dom.interactionDiv.style("display","none");if(!this.term)return;if(this.section.configKey!="independent")return;if(this.term.q.mode=="spline")return;{let t=0;for(const e of this.section.inputLst){if(e.term&&e.term.q.mode!="spline"){t++}}if(t<2)return}const t=this.term.interactions.length;this.dom.interactionDiv.style("display","inline").html(t==0?"Add interactions":`${t} interaction${t>1?"s":""}`).style("padding","5px").style("background-color",t==0?null:"#ececec").style("border-radius",t==0?null:"6px").style("color",t==0?"rgb(153, 153, 153)":"#000").style("font-size",t==0?"0.8em":"").style("cursor","pointer").on("click",(()=>this.renderInteractionOptions()))}renderInteractionOptions(){const t=this;t.dom.tip.clear().showunder(t.dom.interactionDiv.node());t.dom.tip.d.append("div").style("padding","5px").style("font-size","0.8em").style("color","rgb(153, 153, 153)").html(`Selected variables will each form pairwise interaction with ${this.term.term.name}`);t.dom.tip.d.append("div").selectAll("div").data(t.parent.config.independent.filter((e=>e&&e.term.id!==t.term.term.id&&e.q.mode!="spline"))).enter().append("div").style("margin","5px").each((function(e){const i=r(this).append("label");i.append("input").attr("type","checkbox").property("checked",t.term.interactions.includes(e.term.id));i.append("span").text(" "+e.term.name)}));t.dom.tip.d.append("button").text("Apply").style("margin","5px").on("click",(()=>{t.dom.tip.hide();t.term.interactions=[];t.dom.tip.d.selectAll("input").each((function(e){if(r(this).property("checked"))t.term.interactions.push(e.term.id)}));for(const e of t.parent.config.independent){const i=e.interactions.indexOf(t.term.term.id);if(t.term.interactions.includes(e.term.id)){if(i==-1)e.interactions.push(t.term.term.id)}else if(i!=-1){e.interactions.splice(i,1)}}t.parent.editConfig(t,t.term)}))}}function S(t){return{integer:t=="logistic"?w:_,float:t=="logistic"?w:_,geneExpression:t=="logistic"?w:_,categorical:q,condition:T,survival:T}}async function w(t,e,i,s){if(t.q.mode=="binary"&&t.q.lst&&t.q.lst.length==2){t.q.mode="binary";return}const n=await e.getPercentile(t.term.id,[50],i);if(n.error||!n.values.length||!Number.isFinite(n.values[0]))throw"cannot get median value: "+(n.error||"no data");const o=t.term.type=="integer"?Math.round(n.values[0]):Number(n.values[0].toFixed(2));t.q={mode:"binary",type:"custom-bin",lst:[{startunbounded:true,stopinclusive:true,stop:o},{stopunbounded:true,startinclusive:false,start:o}]};t.q.lst.forEach((e=>{e.label=c(e,t.q)}));t.refGrp=t.q.lst[0].label}function T(t,e,i,s){if(s.config.regressionType=="logistic"){if(!t.refGrp)t.refGrp=t.q.groups[0].name}if(s.config.regressionType=="cox"){if(!t.q.timeScale)t.q.timeScale="time"}}async function q(t,e,i,s){const{term:n,q:o}=t;if(o.mode=="binary"){if(o.type=="values"&&Object.keys(n.values).length==2)return;if(o.type=="predefined-groupset"){const t=o.groupsetting.predefined_groupset_idx;const e=n.groupsetting;if(e[t]&&Object.keys(e[t]).length==2)return}if(o.type=="custom-groupset"){const t=o.groupsetting.customset;if(t.groups.length==2)return}}const r={term1_q:o};const a=await e.getCategories(n,i,r);if(a.error)throw"cannot get categories: "+a.error;const c=new Map;const p=[];let l=false;const d=n.type=="condition"&&n.groupsetting.lst.length;if(n.groupsetting&&n.groupsetting.inuse){for(const t of n.groupsetting.lst[0].groups){if(t.type=="filter"&&t.filter4activeCohort){l=true}}}for(const t of a.lst){c.set(t.key,t.samplecount);if(n.values&&n.values[t.key]&&n.values[t.key].uncomputable)continue;p.push(t.key)}if(p.length<2&&!l&&!d){o.type="values";t.error="less than 2 categories/grades - cannot create separate groups";return}if(p.length==2&&!l&&!d){o.type="values";return}const m=n.groupsetting;const u=o.groupsetting;u.inuse=true;u.activeCohort=e.state.activeCohort;if(u.customset&&u.customset.groups&&u.customset.groups.length==2&&k(u.customset,c)){o.type="custom-groupset";return}if(m&&m.lst){if(u.predefined_groupset_idx>=0&&m.lst[u.predefined_groupset_idx]&&m.lst[u.predefined_groupset_idx].groups.length==2&&k(m.lst[u.predefined_groupset_idx],c)){o.type="predefined-groupset";return}const t=m.lst.findIndex((t=>t.groups.length==2));if(t!=-1&&k(m.lst[t],c)){u.predefined_groupset_idx=t;o.type="predefined-groupset";return}}const f={activeCohort:s.activeCohort,groups:[{name:"Group 1",type:"values",values:[]},{name:"Group 2",type:"values",values:[]}]};const h=Math.round(p.length/2);for(const[t,e]of p.entries()){if(t<h)f.groups[0].values.push({key:e});else f.groups[1].values.push({key:e})}u.customset=f;o.type="custom-groupset"}function _(t){if(!t.q.type){console.log("may not happen: why is input.term.q not yet set for numeric term at this point")}t.q.mode="continuous"}function k(t,e){for(const i of t.groups){let t=0;if(i.type=="values"){for(const s of i.values)t+=e.get(s.key)||0;if(t==0)return false}}return true}var A=Object.freeze({__proto__:null,InputTerm:x});const C=[{termtype:"snplst",html:"A list of variants"},{termtype:"snplocus",html:"Variants in a locus"},{termtype:"prs",text:"Polygenic risk score"}];class O{constructor(t){this.opts=t;this.app=t.app;this.parent=t.parent;E(this);I(this);this.createSectionConfigs();this.initUI()}createSectionConfigs(){this.outcome={heading:"Outcome variable",selectPrompt:this.opts.regressionType=="linear"?"Select continuous outcome variable":"Select outcome variable",placeholderIcon:"",configKey:"outcome",limit:1,usecase:{target:"regression",regressionType:this.opts.regressionType,detail:"outcome"},inputLst:[],dom:{}};this.independent={heading:"Independent variable(s)",selectPrompt:"Add independent variable",placeholderIcon:"",configKey:"independent",limit:10,usecase:{target:"regression",regressionType:this.opts.regressionType,detail:"independent"},inputLst:[],dom:{}};this.sections=[this.outcome,this.independent]}async main(){try{this.config=this.parent.config;this.state=this.parent.state;this.hasError=false;this.setDisableTerms();const t=[];for(const e of this.sections){await this.renderSection(e);for(const i of e.inputLst){i.dom.holder.style("border-left",i.term?"1px solid #bbb":"");t.push(i.main())}}await Promise.all(t);for(const t of this.sections){for(const e of t.inputLst){if(e.term&&e.term.error||e.hasError){this.hasError=true}}}}catch(t){this.hasError=true;throw t}}setDisableTerms(){this.disable_terms=[];if(this.config.outcome&&this.config.outcome.term)this.disable_terms.push(this.config.outcome.term);if(this.config.independent){for(const t of this.config.independent){this.disable_terms.push(t.term)}}}handleError(){this.hasError=true;this.dom.submitBtn.property("disabled",true)}getNoTermPromptOptions(t){if(t.configKey!="independent")return;const e=[];for(const i of C){if(!this.state.allowedTermTypes.includes(i.termtype)){continue}if(t.inputLst.find((t=>t.term&&t.term.term.type==i.termtype))){continue}e.push(i)}if(e.length){e.unshift({isDictionary:true,text:"Dictionary variable"})}return e}}function I(t){t.initUI=()=>{const e=t.opts.holder.append("div").style("display","block");t.dom={div:t.opts.holder,controls:e,body:e.append("div"),foot:e.append("div").style("margin","0px 20px").style("display","flex").style("align-items","center").style("gap","20px")};t.dom.submitBtn=t.dom.foot.append("div").append("button").style("display","none").style("padding","5px 15px").style("border-radius","15px").style("cursor","pointer").text("Run analysis").on("click",t.submit);t.dom.submitMsg=t.dom.foot.append("div").style("display","none").style("color","#cc0000").style("font-style","italic").style("font-size","0.8em");for(const e of t.sections){const i=t.dom.body.append("div");t.addSection(e,i)}};t.addSection=function(t,e){e.style("display","none").style("margin","3px 5px").style("padding","3px 5px");t.dom={holder:e,headingDiv:e.append("div").style("margin","3px 5px 20px 5px").style("font-size","17px").style("color","#bbb").text(t.heading),inputsDiv:e.append("div")}};t.renderSection=function(n){n.dom.holder.style("display",n.configKey=="outcome"||t.config.outcome?"block":"none");e(n);const o=n.dom.inputsDiv.selectAll(":scope > div").data(n.inputLst,(t=>t.term&&t.term.term.id));o.exit().each(s);o.enter().append("div").each(i)};function e(e){const i=t.config[e.configKey];const s=Array.isArray(i)?i:i?[i]:[];for(const n of s){if(e.configKey=="independent"){if(!n.interactions)n.interactions=[];for(const t of n.interactions){const e=i.find((e=>e.term.id==t));if(!e)throw"interacting partner not found in independents: "+t;if(!e.interactions)e.interactions=[];if(!e.interactions.includes(n.term.id))e.interactions.push(n.term.id)}}const s=e.inputLst.find((t=>t.term&&t.term.term.id==n.term.id));if(!s){e.inputLst.push(new x({section:e,term:n,parent:t}))}else{s.term=n}}$(e,t)}async function i(t){await t.init(r(this).style("width","fit-content").style("margin","0px 15px 35px 25px").style("padding","0px 5px"))}function s(t){t.remove();for(const e in t.dom){delete t.dom[e]}const e=r(this);e.transition().duration(500).style("opacity",0).remove()}t.resetSubmitButton=()=>{t.dom.submitBtn.text("Run analysis").style("display",t.config.outcome&&t.config.independent.length?"block":"none").property("disabled",t.hasError)}}function E(t){t.editConfig=async(e,i)=>{if(!i){const t=e.section.inputLst.findIndex((t=>t===e));if(t==-1)throw`deleting an unknown input`;e.section.inputLst.splice(t,1);if(e.term){for(const t of e.section.inputLst){if(!t.term||!t.term.interactions)continue;const i=t.term.interactions.indexOf(e.term.term.id);if(i!=-1)t.term.interactions.splice(i,1)}}}else{const t=e.term;if(t&&i.term.id===t.term.id){for(const e in t){if(!(e in i))i[e]=t[e]}}e.term=i;if(i.q.mode=="spline"&&i.interactions){for(const t of e.section.inputLst){if(!t.term||!t.term.interactions)continue;const i=t.term.interactions.indexOf(e.term.term.id);if(i!=-1)t.term.interactions.splice(i,1)}i.interactions=[]}}const s=[];for(const t of e.section.inputLst){if(t.term)s.push(t.term)}const n=e.section.configKey;const o=Array.isArray(t.config[n])?s:s[0];t.app.dispatch({type:"plot_edit",id:t.parent.id,chartType:"regression",config:{hasUnsubmittedEdits:true,[n]:JSON.parse(JSON.stringify(o))}})};t.submit=()=>{t.dom.submitBtn.property("disabled",true);if(t.hasError){alert("Please fix the input variable errors (highlighted in red background).");return}const e=JSON.parse(JSON.stringify(t.config));e.hasUnsubmittedEdits=false;t.app.dispatch({type:"plot_edit",id:t.parent.id,chartType:"regression",config:e})}}function $(t,e){if(t.inputLst.length>=t.limit){return}const i=t.inputLst.find((t=>!t.term));if(i){const s=e.getNoTermPromptOptions(t);if(s){i.pill.main({noTermPromptOptions:s})}return}t.inputLst.push(new x({section:t,parent:e,noTermPromptOptions:e.getNoTermPromptOptions(t)}))}var P=Object.freeze({__proto__:null,RegressionInputs:O});export{A as a,P as b,v as r};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{getDefaultViolinSettings as t}from"./violin-
|
|
1
|
+
import{getDefaultViolinSettings as t}from"./violin-a41b2e2b.js";import{appInit as e}from"./plot.app-c841507a.js";import{q as o}from"./app-71453429.js";import"./controls-0467d2ec.js";import"./controls.btns-ad7b28a2.js";import"./controls.config-6cf816fb.js";import"./controls.overlay-3a55c2ec.js";import"./termsetting-636d2271.js";import"path";import"./FilterRxComp-fc769f34.js";import"./table-1dae543a.js";import"./controls.term1-59f4cd60.js";import"./controls.divide-3c0d52d7.js";import"./violin.renderer-149310eb.js";import"./brush-bb4566a3.js";import"./pointer-c7475677.js";import"./nodrag-bed2488c.js";import"./axis-6cb4f314.js";import"./line-264f8f9e.js";import"./constant-426a1483.js";import"./basis-3870f5ba.js";import"./log-ca1e2a74.js";import"./html.legend-ef8066dd.js";import"./violin.interactivity-bcf0ccc2.js";import"./niceNumLabels-ddb76164.js";import"./recover-b1ec4fed.js";import"./FilterStateless-8f30f856.js";import"./app-fb676934.js";import"./termInfo-4c759483.js";const l="#fff6dc";class i{constructor(t){this.opts=t;this.input=t.input;s(this);this.setDOM(t.holder)}main(){try{const t=this.input.term;if(!t||!this.input.termStatus){this.dom.holder.style("display","none");this.dom.loading_div.style("display","none");return}else if(t){this.dom.holder.style("display","block");this.dom.loading_div.style("display","block");this.updateValueCount();this.dom.loading_div.style("display","none");this.render();return}}catch(t){this.dom.loading_div.style("display","none");throw t}}updateValueCount(){const t=this.input;try{if(t.pill&&t.pill.validateQ){t.pill.validateQ({term:t.term.term,q:t.term.q,sampleCounts:t.termStatus.sampleCounts})}}catch(e){t.term.error=e}}}function s(i){i.setDOM=t=>{i.dom={holder:t.style("margin","10px").style("font-size",".8em").style("text-align","left").style("color","#999"),loading_div:t.append("div").text("Loading..").style("display","none"),top_info_div:t.append("div").style("padding-bottom","5px"),violin_div:t.append("div").style("color","black").style("padding-top","5px"),table_div:t.append("table").style("margin","5px 0px 15px 0px").style("border-collapse","collapse").style("color","black"),bottom_info_div:t.append("div"),excluded_div:t.append("table").style("display","none").style("margin","5px 10px").style("border-collapse","collapse")}};i.render=async()=>{const t=i.input;s(t);await n(t);p(t);d(t)};function s(t){if(t.termStatus.topInfoStatus?.length){i.dom.top_info_div.style("display","block").html(t.termStatus.topInfoStatus.join("<br>"))}else{i.dom.top_info_div.style("display","none")}}async function n(o){if(o.term.q.mode=="continuous"||o.term.q.mode=="spline"){i.dom.violin_div.style("display","block");i.dom.table_div.style("display","none");if(i.plotAppApi){const t={type:"app_refresh",state:{termfilter:{filter:i.input.parent.parent.filter}},subactions:[{type:"plot_edit",id:i.violinApi.id,config:{term:o.term}}]};i.plotAppApi.dispatch(t)}else{const l={holder:i.dom.violin_div,vocabApi:i.input.parent.app.vocabApi,state:{vocab:{genome:i.input.parent.app.vocabApi.genome,dslabel:i.input.parent.app.vocabApi.dslabel},termfilter:{filter:i.input.parent.parent.filter},plots:[{chartType:"violin",term:o.term,settings:{violin:t(null,{svgw:350,axisHeight:25,rightMargin:10,datasymbol:"rug",radius:3,plotThickness:100})}}]},violin:{mode:"minimal"}};i.plotAppApi=await e(l);const s=i.plotAppApi.getState().plots[0].id;i.violinApi=i.plotAppApi.getComponents(`plots.${s}`)}}else{i.dom.violin_div.style("display","none");const t=o.termStatus.sampleCounts;if(!t||!t.length){i.dom.table_div.style("display","none");return}i.dom.table_div.style("display","block");const e=i.input.orderedLabels;const l=e&&e.length?(t,o)=>e.indexOf(t.label)-e.indexOf(o.label):(t,e)=>e.samplecount-t.samplecount;const s=t.sort(l);const n=Math.max(...s.map((t=>t.samplecount)),0);s.forEach((t=>t.bar_width_frac=Number((1-(n-t.samplecount)/n).toFixed(4))));i.dom.table_div.selectAll("tr").remove();const p=i.dom.table_div.selectAll("tr").data(s,(t=>t.key));p.enter().append("tr").each(r)}}function p(t){if(t.termStatus.bottomSummaryStatus){i.dom.bottom_info_div.style("display","block").html(t.termStatus.bottomSummaryStatus)}else{i.dom.bottom_info_div.style("display","none")}}function d(t){const e=t.termStatus.excludeCounts;if(!e||!e.length){i.dom.excluded_div.style("display","none");return}i.dom.excluded_div.style("display","block").selectAll("tr").remove();const o=i.dom.excluded_div.selectAll("tr").data(e,(t=>t.key));o.enter().append("tr").each(r);i.dom.excluded_div.selectAll("td").style("color","#999")}function r(t){const e=o(this);const l=this.parentNode.__data__;l.term;const i=150;e.style("text-align","left").style("cursor",l.termStatus.allowToSelectRefGrp?"pointer":"default");const s="1px 10px 1px 0px";e.append("td").style("padding",s).style("text-align","left").style("color","black").text(t.samplecount!==undefined?"n="+t.samplecount:"");e.append("td").style("padding",s).style("text-align","left").style("color","black").text(t.label);const n=e.append("td").style("padding",s);const p=i*t.bar_width_frac;n.append("div").style("margin",s).style("width",p+"px").style("height","15px").style("background-color","#ddd");a({input:l,item:t,tr:e,rendered:false})}function a({input:t,item:e,tr:s,rendered:n}){if(!e.bar_width_frac)return;const p=t.term;const d=t.termStatus.allowToSelectRefGrp;let r;if(n){s.style("background","white");r=o(s.node().lastChild).select("div").style("display",e.key===p.refGrp&&d?"inline-block":"none").style("border",e.key===p.refGrp&&d?"1px solid #bbb":"")}else if(t.term.q.mode!="cutoff"){const t=s.append("td").style("padding","1px 5px").style("text-align","left");r=t.append("div").style("display",e.key===p.refGrp&&d?"inline-block":"none").style("padding","2px 10px").style("border",e.key===p.refGrp&&d?"1px solid #bbb":"").style("border-radius","10px").style("color","#999").style("font-size",".7em").text("REFERENCE");if(d){s.on("mouseover",(()=>{if(p.refGrp!==e.key){s.style("background",l);r.style("display","inline-block").style("border","").text("Set as reference")}else s.style("background","white")})).on("mouseout",(()=>{s.style("background","white");if(p.refGrp!==e.key)r.style("display","none")})).on("click",(()=>{p.refGrp=e.key;r.style("border","1px solid #bbb").text("REFERENCE");i.opts.callback(p)}))}}}}export{i as InputValuesTable};
|