@sjcrh/proteinpaint-client 2.76.1 → 2.76.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/dist/{2dmaf-593951c7.js → 2dmaf-f240211f.js} +1 -1
- package/dist/{AppHeader-29b88e14.js → AppHeader-c9432a24.js} +1 -1
- package/dist/{ColorScale-3d3c42dc.js → ColorScale-b991fc9e.js} +1 -1
- package/dist/{DEanalysis-f81e0f19.js → DEanalysis-bbfad00d.js} +1 -1
- package/dist/{Disco-db386f7a.js → Disco-b7c9bf72.js} +1 -1
- package/dist/{Disco.UI-8ed9cb39.js → Disco.UI-a5296c36.js} +1 -1
- package/dist/{DragControls-d6250d18.js → DragControls-ca3fa0cf.js} +1 -1
- package/dist/{DziViewer-9352e224.js → DziViewer-28915c11.js} +1 -1
- package/dist/{FilterRxComp-0f35b322.js → FilterRxComp-02e68f1b.js} +1 -1
- package/dist/{FilterStateless-b1c6ee04.js → FilterStateless-16a33070.js} +1 -1
- package/dist/{HicApp-14b94b20.js → HicApp-e713aa40.js} +1 -1
- package/dist/{OrbitControls-45f56ed4.js → OrbitControls-2466d420.js} +1 -1
- package/dist/{WSIViewer-80f60272.js → WSIViewer-957695a8.js} +1 -1
- package/dist/{adSandbox-94424b88.js → adSandbox-27d93bc0.js} +1 -1
- package/dist/app-42f69951.js +1 -0
- package/dist/{app-2cd97738.js → app-6fb77603.js} +1 -1
- package/dist/{app-686b9547.js → app-d215327f.js} +1 -1
- package/dist/app.js +1 -1
- package/dist/{bam-6631640f.js → bam-d67e5315.js} +1 -1
- package/dist/{barchart-3c5d734c.js → barchart-2898d229.js} +1 -1
- package/dist/{barchart.events-df44e666.js → barchart.events-426d737a.js} +1 -1
- package/dist/{bars.renderer-b232d882.js → bars.renderer-71935d34.js} +1 -1
- package/dist/{block-4134e823.js → block-75d4ff92.js} +1 -1
- package/dist/block.lazyload-d2951c91.js +1 -0
- package/dist/{block.legend-d2b7f1cb.js → block.legend-93d85a6e.js} +1 -1
- package/dist/{block.mds-ebe7b58d.js → block.mds-84b9d1c1.js} +1 -1
- package/dist/{block.mds.cnv-99f0a414.js → block.mds.cnv-a991ed79.js} +1 -1
- package/dist/{block.mds.expressionrank-96bf864b.js → block.mds.expressionrank-33b858de.js} +1 -1
- package/dist/{block.mds.expressionstat-dcab3fd1.js → block.mds.expressionstat-3093599f.js} +1 -1
- package/dist/{block.mds.geneboxplot-e5b2a4ce.js → block.mds.geneboxplot-b8391d18.js} +1 -1
- package/dist/{block.mds.junction-534eef9b.js → block.mds.junction-69708c7f.js} +1 -1
- package/dist/{block.mds.svcnv-de6a3c7d.js → block.mds.svcnv-322baea6.js} +1 -1
- package/dist/{block.mds.svcnv.share-2c2c16db.js → block.mds.svcnv.share-c5c38237.js} +1 -1
- package/dist/{block.mds2-373fcb4d.js → block.mds2-de4811dd.js} +1 -1
- package/dist/{block.svg-be5d741d.js → block.svg-ac9fec2d.js} +1 -1
- package/dist/{block.tk.aicheck-f2da5e81.js → block.tk.aicheck-ac4b8d4d.js} +1 -1
- package/dist/{block.tk.ase-ef848944.js → block.tk.ase-6dc0f9f1.js} +1 -1
- package/dist/{block.tk.bam-11fcba17.js → block.tk.bam-8f68b41d.js} +1 -1
- package/dist/{block.tk.bedgraphdot-a81b0709.js → block.tk.bedgraphdot-d8878860.js} +1 -1
- package/dist/{block.tk.bigwig.ui-f8e5ba71.js → block.tk.bigwig.ui-f6ed051c.js} +1 -1
- package/dist/{block.tk.hicstraw-e7072b25.js → block.tk.hicstraw-725bdc8a.js} +1 -1
- package/dist/{block.tk.junction-1c9a7854.js → block.tk.junction-f8b0b51d.js} +1 -1
- package/dist/{block.tk.junction.textmatrixui-ffecbb16.js → block.tk.junction.textmatrixui-252e7d7e.js} +1 -1
- package/dist/{block.tk.ld-274c3a82.js → block.tk.ld-11acf730.js} +1 -1
- package/dist/{block.tk.menu-e970cd4a.js → block.tk.menu-5e04436d.js} +1 -1
- package/dist/{block.tk.pgv-f4d4dbf7.js → block.tk.pgv-fef17dc4.js} +1 -1
- package/dist/{boxplot-44d3b48f.js → boxplot-4c9a5479.js} +1 -1
- package/dist/{brainImaging-2eaa419d.js → brainImaging-7716bc66.js} +1 -1
- package/dist/{brush-bb4ae2fb.js → brush-9faa7ae7.js} +1 -1
- package/dist/{categorical-db9b0175.js → categorical-1dea48ba.js} +1 -1
- package/dist/{condition-4e788f7d.js → condition-ebac4f75.js} +1 -1
- package/dist/{controls-3c1691d7.js → controls-268e40e6.js} +1 -1
- package/dist/{controls.btns-5b1240c8.js → controls.btns-5bf9e7d7.js} +1 -1
- package/dist/controls.config-2f0fa061.js +1 -0
- package/dist/{cuminc-c4db28f0.js → cuminc-8dffb765.js} +1 -1
- package/dist/{customdata.inputui-f9234d1f.js → customdata.inputui-b229d3a0.js} +1 -1
- package/dist/{dataDownload-a4dfa2d0.js → dataDownload-452ae3cd.js} +1 -1
- package/dist/{databrowser.ui-a64bab0c.js → databrowser.ui-2197fc73.js} +1 -1
- package/dist/{density-69a732f6.js → density-09feb0c9.js} +1 -1
- package/dist/{dictionary-e2232e84.js → dictionary-a132a3cc.js} +1 -1
- package/dist/{drag-d8daa62f.js → drag-2e9c80bb.js} +1 -1
- package/dist/{e2pca-f9324654.js → e2pca-4f1648e3.js} +1 -1
- package/dist/{ep-a5c1ee3a.js → ep-1d4c58b4.js} +1 -1
- package/dist/{facet-98971c68.js → facet-fa4fe49c.js} +1 -1
- package/dist/{fusion.parse-466ded6d.js → fusion.parse-7dfd6988.js} +1 -1
- package/dist/{geneExpClustering-66c05fb1.js → geneExpClustering-ed9121b8.js} +1 -1
- package/dist/{geneExpression-ff46a389.js → geneExpression-394672ff.js} +1 -1
- package/dist/{geneExpression-b5d0261f.js → geneExpression-66208299.js} +1 -1
- package/dist/geneExpression-c61e8f1c.js +1 -0
- package/dist/{geneORA-f1a90d02.js → geneORA-9456872c.js} +1 -1
- package/dist/{geneVariant-1cf17b3b.js → geneVariant-beaf9adb.js} +1 -1
- package/dist/{geneVariant-d0b9e1cb.js → geneVariant-f17cda85.js} +1 -1
- package/dist/{genefusion.ui-89a727ea.js → genefusion.ui-9238ec7f.js} +1 -1
- package/dist/{genesearch-41cb55ce.js → genesearch-ffd88bf2.js} +1 -1
- package/dist/{geneset-b63496eb.js → geneset-0315daf8.js} +1 -1
- package/dist/{genomeBrowser-ec8fbddc.js → genomeBrowser-608b924e.js} +1 -1
- package/dist/{genomeBrowser.controls-2dcaf4f5.js → genomeBrowser.controls-2601cab5.js} +1 -1
- package/dist/{groupsetting-3fef59f9.js → groupsetting-e3a4ecd5.js} +1 -1
- package/dist/{gsea-3075c82c.js → gsea-0c0cf8de.js} +1 -1
- package/dist/{hierCluster-33a828a1.js → hierCluster-7ab62ca5.js} +1 -1
- package/dist/hierCluster.config-f4daaf92.js +1 -0
- package/dist/{hierCluster.interactivity-6d453881.js → hierCluster.interactivity-7f475259.js} +1 -1
- package/dist/{hierCluster.renderers-6279d7fb.js → hierCluster.renderers-19b79639.js} +1 -1
- package/dist/{html.legend-fac5cb07.js → html.legend-80b2b3ec.js} +1 -1
- package/dist/{imagePlot-38254245.js → imagePlot-1ef24562.js} +1 -1
- package/dist/{lasso-e8b9500e.js → lasso-1a02a545.js} +1 -1
- package/dist/launch.adhoc-e124c993.js +1 -0
- package/dist/{leftlabel.sample-afcdcefd.js → leftlabel.sample-59f99ef5.js} +1 -1
- package/dist/{legacyDataset-3b08c91a.js → legacyDataset-fbaa5ebb.js} +1 -1
- package/dist/{log-4d84c357.js → log-c26b6cfd.js} +1 -1
- package/dist/{lollipop-64c5cdfc.js → lollipop-3aebe5d3.js} +1 -1
- package/dist/{maf-fd4ffbd0.js → maf-c439c851.js} +1 -1
- package/dist/{maftimeline-3e892da7.js → maftimeline-0da64e54.js} +1 -1
- package/dist/{matrix-e371888a.js → matrix-38cd47c3.js} +1 -1
- package/dist/{matrix.cells-eb4110a7.js → matrix.cells-a018d731.js} +1 -1
- package/dist/{matrix.cluster-0df274ed.js → matrix.cluster-a6e713e8.js} +1 -1
- package/dist/{matrix.config-3ef822b9.js → matrix.config-2c550b5d.js} +1 -1
- package/dist/matrix.controls-42ad4912.js +1 -0
- package/dist/{matrix.data-27b8e3a9.js → matrix.data-2b814c9f.js} +1 -1
- package/dist/{matrix.dom-1bbe1f39.js → matrix.dom-1e0da5b3.js} +1 -1
- package/dist/{matrix.groups-67606700.js → matrix.groups-824a7244.js} +1 -1
- package/dist/{matrix.interactivity-cdcc56c9.js → matrix.interactivity-1cb56534.js} +1 -1
- package/dist/{matrix.layout-857cd336.js → matrix.layout-47e44357.js} +1 -1
- package/dist/{matrix.legend-09f6dc57.js → matrix.legend-9af0c757.js} +1 -1
- package/dist/{matrix.renderers-d392fb69.js → matrix.renderers-337ce240.js} +1 -1
- package/dist/{matrix.serieses-b03b62aa.js → matrix.serieses-7b7184c9.js} +1 -1
- package/dist/{matrix.sort-9440c86a.js → matrix.sort-1ac05842.js} +1 -1
- package/dist/{matrix.sorterUi-2c5eb35f.js → matrix.sorterUi-1c60c145.js} +1 -1
- package/dist/{mavb-9d86df89.js → mavb-da8d1a0a.js} +1 -1
- package/dist/{mds.fimo-bffccb9f.js → mds.fimo-8604c3f8.js} +1 -1
- package/dist/{mds.samplescatterplot-b3908cc7.js → mds.samplescatterplot-3f09ae0e.js} +1 -1
- package/dist/{mds.survivalplot-9ad7dabc.js → mds.survivalplot-1d8f2b7e.js} +1 -1
- package/dist/{metaboliteIntensity-ec3176f4.js → metaboliteIntensity-bbb23c76.js} +1 -1
- package/dist/niceNumLabels-29a7c6ca.js +1 -0
- package/dist/{nodrag-ab7d5a9f.js → nodrag-b2737073.js} +1 -1
- package/dist/{notify-59f61230.js → notify-0cb8904f.js} +1 -1
- package/dist/{numeric-4853b665.js → numeric-24dacbee.js} +1 -1
- package/dist/{numeric.binary-1dd9a2b4.js → numeric.binary-f382cc98.js} +1 -1
- package/dist/{numeric.continuous-ed132eea.js → numeric.continuous-6feb34a7.js} +1 -1
- package/dist/{numeric.discrete-d780d076.js → numeric.discrete-ed10bbc1.js} +1 -1
- package/dist/{numeric.spline-abe07708.js → numeric.spline-a35cfbf0.js} +1 -1
- package/dist/{numeric.toggle-647423dd.js → numeric.toggle-2f98d6e5.js} +1 -1
- package/dist/oncomatrix-c0b2d635.js +1 -0
- package/dist/{parseData-567f3d70.js → parseData-292648dd.js} +1 -1
- package/dist/{plot.2dvaf-4016e75e.js → plot.2dvaf-6ae22dc1.js} +1 -1
- package/dist/plot.app-2a805759.js +1 -0
- package/dist/plot.barplot-34841e70.js +1 -0
- package/dist/{plot.boxplot-76229491.js → plot.boxplot-87ac2ce9.js} +1 -1
- package/dist/{plot.brainImaging-39b80a1c.js → plot.brainImaging-32a484b6.js} +1 -1
- package/dist/{plot.disco-9a544f9a.js → plot.disco-1fdfee3c.js} +1 -1
- package/dist/{plot.dzi-f1658ebf.js → plot.dzi-e3d0f610.js} +1 -1
- package/dist/{plot.ssgq-aeb2dabc.js → plot.ssgq-d33113d5.js} +1 -1
- package/dist/{plot.vaf2cov-ba8332ed.js → plot.vaf2cov-9f4f1776.js} +1 -1
- package/dist/{plot.wsi-2d802557.js → plot.wsi-dea124a7.js} +1 -1
- package/dist/{profileBarchart-72adc533.js → profileBarchart-58f0a8c0.js} +1 -1
- package/dist/{profileHome-37fd52e5.js → profileHome-7f404152.js} +1 -1
- package/dist/{profilePlot-0b897a05.js → profilePlot-4db8ca78.js} +1 -1
- package/dist/{profilePolar-a7248d48.js → profilePolar-50b8e40e.js} +1 -1
- package/dist/{profileRadar-1ba5d8fd.js → profileRadar-fff0b004.js} +1 -1
- package/dist/{profileRadarFacility-452e76ef.js → profileRadarFacility-d6d34c15.js} +1 -1
- package/dist/{profileSummary-7f0eacf0.js → profileSummary-04b8b15b.js} +1 -1
- package/dist/{recover-74f2e965.js → recover-299ffdb3.js} +1 -1
- package/dist/{regression.inputs-ff00f74e.js → regression.inputs-14df7c31.js} +1 -1
- package/dist/{regression.inputs.values.table-1753d56b.js → regression.inputs.values.table-d79efa9e.js} +1 -1
- package/dist/{regression.results-6f85a5dc.js → regression.results-4767144e.js} +1 -1
- package/dist/{renderPvalueTable-17558d6a.js → renderPvalueTable-002cc8ff.js} +1 -1
- package/dist/{sampleScatter-97917406.js → sampleScatter-55d9eb74.js} +1 -1
- package/dist/{sampleScatter.rendererThree-4649d1ec.js → sampleScatter.rendererThree-ef289434.js} +2 -2
- package/dist/{sampleView-f86dc5ea.js → sampleView-1dff3fca.js} +1 -1
- package/dist/{samplelst-4a5512df.js → samplelst-d2db0f24.js} +1 -1
- package/dist/{samplematrix-1192e5e2.js → samplematrix-0841387f.js} +1 -1
- package/dist/{scatter-cc1b0d07.js → scatter-f8285107.js} +1 -1
- package/dist/{select2Terms-d4f6ed9e.js → select2Terms-d48d037e.js} +1 -1
- package/dist/{selectGenomeWithTklst-b5cfd153.js → selectGenomeWithTklst-9af86d31.js} +1 -1
- package/dist/{singleCellCellType-d8c58253.js → singleCellCellType-fd1606b8.js} +1 -1
- package/dist/{singleCellGeneExpression-b7209531.js → singleCellGeneExpression-537f1157.js} +1 -1
- package/dist/{singleCellPlot-e6f83b2a.js → singleCellPlot-eff5760b.js} +1 -1
- package/dist/{singlecell-321dd973.js → singlecell-38336cbc.js} +1 -1
- package/dist/{singlecell-879235b3.js → singlecell-87b4b9a9.js} +1 -1
- package/dist/{snp-b046b7e6.js → snp-b81ef740.js} +1 -1
- package/dist/snp-f6123244.js +1 -0
- package/dist/{snplocus-61ff1c10.js → snplocus-acafb1ba.js} +1 -1
- package/dist/{spliceevent.a53ss.diagram-1a84db58.js → spliceevent.a53ss.diagram-5f8352eb.js} +1 -1
- package/dist/{spliceevent.exonskip.diagram-da10648b.js → spliceevent.exonskip.diagram-0d30a735.js} +1 -1
- package/dist/spliceevent.exonskip.getdefault-237c481c.js +1 -0
- package/dist/{spliceevent.noeventdiagram-1d6d790d.js → spliceevent.noeventdiagram-df9ce4bc.js} +1 -1
- package/dist/{spliceevent.phrase-2ca0ce59.js → spliceevent.phrase-a8401d53.js} +1 -1
- package/dist/{stattable-c5f12d9c.js → stattable-46cde32c.js} +1 -1
- package/dist/{style.gdc-5b7d90c6.js → style.gdc-72d730f2.js} +1 -1
- package/dist/{summary-0624f5e6.js → summary-a6c15c9e.js} +1 -1
- package/dist/{sunburst-30295714.js → sunburst-fe95832e.js} +1 -1
- package/dist/{survival-fcc7719f.js → survival-52714cd3.js} +1 -1
- package/dist/survival-57ff3c03.js +1 -0
- package/dist/{svg.download-e89a7369.js → svg.download-f4aa48e4.js} +1 -1
- package/dist/{svg.legend-c93f2980.js → svg.legend-749348e0.js} +1 -1
- package/dist/{svgraph-6ab3011b.js → svgraph-b46f1f92.js} +1 -1
- package/dist/{svmr-3ad3d600.js → svmr-9a76c6d4.js} +1 -1
- package/dist/{table-f50a9344.js → table-0daf2b89.js} +1 -1
- package/dist/{table-4d3a771e.js → table-bf40249b.js} +1 -1
- package/dist/{termInfo-d0a9e65f.js → termInfo-491b10af.js} +1 -1
- package/dist/{termdb.bins-01e8cce6.js → termdb.bins-39d11f24.js} +1 -1
- package/dist/termsetting-492eefa7.js +1 -0
- package/dist/{tk-e74c9beb.js → tk-ac524564.js} +1 -1
- package/dist/{toggleButtons-04c5ad7c.js → toggleButtons-c4d6f260.js} +1 -1
- package/dist/{tp.ui-7b24f0ef.js → tp.ui-0a476325.js} +1 -1
- package/dist/tvs.density-034b506d.js +1 -0
- package/dist/{tvs.geneVariant-418ed4ff.js → tvs.geneVariant-c59c8b54.js} +1 -1
- package/dist/{tvs.numeric-de14101f.js → tvs.numeric-aa1f892f.js} +1 -1
- package/dist/{tvs.samplelst-15bb62f1.js → tvs.samplelst-515f27b9.js} +1 -1
- package/dist/{uiUtils-ff2d4a6a.js → uiUtils-ea7dfea2.js} +1 -1
- package/dist/{variantBrowser-261373bf.js → variantBrowser-14d5c3f6.js} +1 -1
- package/dist/{vcf-145bf5dd.js → vcf-d357ce08.js} +1 -1
- package/dist/{violin-e647aac9.js → violin-74d26b75.js} +1 -1
- package/dist/{violin.interactivity-30a239fe.js → violin.interactivity-bf40ddde.js} +1 -1
- package/dist/{violin.renderer-e29d2700.js → violin.renderer-469fa0ff.js} +1 -1
- package/dist/{violinRenderer-08b3b58c.js → violinRenderer-14fa200d.js} +1 -1
- package/dist/{viridis-d86ad99b.js → viridis-cc59f478.js} +1 -1
- package/dist/{y-06b0d47c.js → y-59cbff5e.js} +1 -1
- package/dist/{zoom-d6ef6f3f.js → zoom-f445cfef.js} +1 -1
- package/package.json +1 -1
- package/dist/app-f031940d.js +0 -1
- package/dist/block.lazyload-eda77d9b.js +0 -1
- package/dist/controls.config-81cd5749.js +0 -1
- package/dist/geneExpression-5685eae2.js +0 -1
- package/dist/hierCluster.config-fa799d06.js +0 -1
- package/dist/launch.adhoc-2799109b.js +0 -1
- package/dist/matrix.controls-42bb2063.js +0 -1
- package/dist/niceNumLabels-5f45218a.js +0 -1
- package/dist/oncomatrix-7ac995a2.js +0 -1
- package/dist/plot.app-d6fe76e2.js +0 -1
- package/dist/plot.barplot-d2fc5020.js +0 -1
- package/dist/snp-541ec14d.js +0 -1
- package/dist/spliceevent.exonskip.getdefault-8028e522.js +0 -1
- package/dist/survival-816e055a.js +0 -1
- package/dist/termsetting-ad8c4f3a.js +0 -1
- package/dist/tvs.density-b2790080.js +0 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
import{b as t,y as e,F as s,h as o,P as i,M as n,d as l,C as a,I as r,r as p,Q as c}from"./app-2cd97738.js";import{d}from"./zoom-d6ef6f3f.js";import{r as h}from"./table-f50a9344.js";import{controlsInit as g}from"./controls-3c1691d7.js";import{d as m}from"./svg.download-e89a7369.js";import{a as f}from"./genesearch-41cb55ce.js";import{T as y,c as u}from"./termsetting-ad8c4f3a.js";import{a as b,b as v,c as x}from"./axis-747c801e.js";import"./pointer-c7475677.js";import"./nodrag-ab7d5a9f.js";import"./tslib.es6-c3c2d88f.js";import"./controls.btns-5b1240c8.js";import"./controls.config-81cd5749.js";import"path";class C{constructor(){this.type="singleCellPlot";this.tip=new n({padding:"4px",offsetX:10,offsetY:0});this.tip.d.style("max-height","300px").style("overflow","scroll").style("font-size","0.9em");this.startGradient={};this.stopGradient={}}async init(e){const s=this.getState(e);const o=s.termdbConfig.queries;this.tableOnPlot=e.nav?.header_mode=="hidden";this.opts.holder.style("position","relative");this.showDivId=`${this.id}-sandbox`;const i=this.opts.holder.insert("div").style("display","inline-block").style("vertical-align","top");const a=i.append("div").style("padding","10px");const r=i.append("div");const p=a.append("div").attr("id",this.showDivId);const c=a.append("div").style("padding-top","10px").style("display","inline-block");if(this.tableOnPlot){p.append("input").attr("id",`showSamples`).attr("type","checkbox").property("checked",true).on("change",(t=>{this.app.dispatch({type:"plot_edit",id:this.id,config:{settings:{singleCellPlot:{showSamples:t.target.checked}}}})}));p.append("label").text("Show samples").attr("for",`showSamples`)}for(const t of s.config.plots){const e=t.name.replace(/\s+/g,"");p.append("input").attr("id",`show${e}`).attr("type","checkbox").property("checked",true).on("change",(t=>{this.app.dispatch({type:"plot_edit",id:this.id,config:{settings:{singleCellPlot:{[`show${e}`]:t.target.checked}}}})}));p.append("label").text(t.name).attr("for",`show${e}`)}if(o.singleCell?.geneExpression){c.append("label").html("Gene expression:");const t=f({tip:new n({padding:"0px"}),genome:this.app.opts.genome,row:c,searchOnly:"gene",placeholder:s.config.gene||"Gene",callback:()=>{o?.style("display","inline-block");e?.style("display","inline-block");const s=t.geneSymbol;this.app.dispatch({type:"plot_edit",id:this.id,config:{gene:s}})},emptyInputCallback:()=>{o.style("display","none");e.style("display","none");this.app.dispatch({type:"plot_edit",id:this.id,config:{gene:null}})},hideHelp:true,focusOff:true});const e=c.append("select").style("display",s.config.gene?"inline-block":"none");for(const t of s.termdbConfig?.queries.singleCell.data.plots){e.append("option").text(t.colorColumn)}e.on("change",(async()=>{const t=s.termdbConfig?.queries.singleCell.data.plots[0];const o=t.columnName;const i={sample:s.config.sample.sampleName,columnName:o,category:e.node().value};await this.app.vocabApi.getTopTermsByType(i)}));const o=c.append("button").text("Open violin").style("margin-left","2px").style("display",s.config.gene?"inline-block":"none");o.on("click",(()=>{const o=t.geneSymbol||s.config.gene;const i=this.state.config.plots.find((t=>t.colorColumn==e.node().value)).name;const n=this.plots.find((t=>t.name==i));const l={};for(const t of n.clusters){l[t]={key:t,value:t}}this.app.dispatch({type:"plot_create",config:{chartType:"violin",settings:{violin:{plotThickness:50}},term:{term:{type:y.SINGLECELL_GENE_EXPRESSION,id:o,gene:o,name:o,sample:s.config.sample}},term2:{term:{type:y.SINGLECELL_CELLTYPE,id:y.SINGLECELL_CELLTYPE,name:"Cell type",sample:s.config.sample,plot:n.name,values:l}}}})}))}const d=a.append("div").style("padding","10px").style("display","inline-block");const g=i.append("div").style("display","inline-block").attr("class","pp-termdb-plot-controls");const m=i.append("div").style("display","inline-block");const b=m.append("div").style("display","flex").style("flex-wrap","wrap").style("justify-content","flex-start").style("width","92vw");const v=this.opts.holder.append("div").style("position","absolute").style("top",0).style("left",0).style("width","100%").style("height","100%").style("background-color","rgba(255, 255, 255, 0.8)").style("text-align","center");v.append("div").attr("class","sjpp-spinner");this.dom={header:this.opts.header,mainDiv:i,loadingDiv:v,tip:new n({padding:"0px"}),tooltip:new n({padding:"2px",offsetX:10,offsetY:0}),controlsHolder:g,tableDiv:r,deDiv:d,plotsDiv:b,plotsDivParent:m};const x=80;this.axisOffset={x:x,y:30};if(o.singleCell?.DEgenes){this.dom.deDiv.append("label").html("View differentially expresed genes of a cluster vs rest of cells: ");this.dom.deselect=this.dom.deDiv.append("select");if(this.app.opts.genome.termdbs)this.dom.GSEAbt=this.dom.deDiv.append("button").style("margin-left","5px").property("disabled",true).text("Gene set enrichment analysis").on("click",(t=>{const e={genes:this.genes,fold_change:this.fold_changes,genome:this.app.vocabApi.opts.state.vocab.genome};const s={chartType:"gsea",gsea_params:e,insertBefore:this.app.opts?.app?.getPlotHolder&&this.showDivId};this.app.dispatch({type:"plot_create",config:s})}));const e=this.dom.deDiv.append("div");this.dom.DETableDiv=e;this.dom.deselect.append("option").text("");this.dom.deselect.on("change",(async o=>{e.selectAll("*").remove();const i=this.dom.deselect.node().value.split(" ")?.[1];if(this.dom.GSEAbt)this.dom.GSEAbt.property("disabled",!i);if(!i)return;const n=s.termdbConfig.queries.singleCell.DEgenes.columnName;const l=this.state.config.experimentID||this.state.config.sample||this.samples[0]?.experiments[0]?.experimentID;const a={genome:s.genome,dslabel:s.dslabel,categoryName:i,sample:l,columnName:n};const r=await t("termdb/singlecellDEgenes",{body:a});const p=[{label:"Gene"},{label:"Log2FC"},{label:"Adjusted P-value"}];const c=[];this.genes=[];this.fold_changes=[];r.genes.sort(((t,e)=>e.avg_log2FC-t.avg_log2FC));for(const t of r.genes){const e=[{value:t.name},{value:u(t.avg_log2FC)},{value:u(t.p_val_adj)}];c.push(e);this.genes.push(t.name);this.fold_changes.push(t.avg_log2FC)}h({rows:c,columns:p,resize:true,div:e})}))}this.settings={};document.addEventListener("scroll",(t=>this?.tip?.hide()));l(".sjpp-output-sandbox-content").on("scroll",(t=>this.tip.hide()));await this.setControls(s)}async setControls(t){const e=[{label:"Chart width",type:"number",chartType:"singleCellPlot",settingsKey:"svgw",min:300,max:1e3},{label:"Chart height",type:"number",chartType:"singleCellPlot",settingsKey:"svgh",min:300,max:1e3},{label:"Show borders",type:"checkbox",chartType:"singleCellPlot",settingsKey:"showBorders",boxLabel:""}];if(this.tableOnPlot)e.push({label:"Show samples",type:"checkbox",chartType:"singleCellPlot",settingsKey:"showSamples",boxLabel:""});this.components={controls:await g({app:this.app,id:this.id,holder:this.dom.controlsHolder,inputs:e})};this.components.controls.on("downloadClick.singleCellPlot",(()=>{for(const t of this.plots)m(t.svg,"plot.svg",this.opts.holder.node())}))}getState(t){const e=t.plots.find((t=>t.id===this.id));if(!e){throw`No plot with id='${this.id}' found. Did you set this.id before this.api = getComponentApi(this)?`}this.prevFilter0=this.state?.termfilter.filter0;return{config:e,dslabel:t.vocab.dslabel,genome:t.vocab.genome,termdbConfig:t.termdbConfig,termfilter:t.termfilter}}async main(){this.config=structuredClone(this.state.config);i(this.settings,this.config.settings.singleCellPlot);this.dom.tableDiv.style("display",this.settings.showSamples?"block":"none");if(this.tableOnPlot){await D(this.dom.tableDiv,this,this.state);if(!this.samples?.length){this.showNoMatchingDataMessage();return}}this.dom.loadingDiv.selectAll("*").remove();this.dom.loadingDiv.style("display","").append("div").attr("class","sjpp-spinner");this.dom.mainDiv.style("opacity",1).style("display","");this.legendRendered=false;const t=await this.getData();this.dom.plotsDivParent.style("display","inline-block");this.renderPlots(t);this.dom.loadingDiv.style("display","none");if(this.dom.header)this.dom.header.html(`Single Cell Data`)}async getData(){const s=[];for(const t of this.config.plots){const e=t.name.replace(/\s+/g,"");const o=this.settings[`show${e}`];if(o)s.push(t.name)}const o={genome:this.state.genome,dslabel:this.state.dslabel,plots:s,filter0:this.state.termfilter.filter0};if(this.state.config.sample){this.state.config.sample;o.sample=this.state.config.experimentID||this.state.config.sample}else{this.samples[0].sample;o.sample=this.samples[0].experiments?.[0]?.experimentID||this.samples[0].sample}if(this.state.config.gene)o.gene=this.state.config.gene;try{const e=await t("termdb/singlecellData",{body:o});if(e.error)throw e.error;this.refName=e.refName;return e}catch(t){if(t.stack)console.log(t.stack);e(this.dom.plotsDiv,t);return}}showNoMatchingDataMessage(){this.dom.mainDiv.style("opacity",.001).style("display","none");this.dom.loadingDiv.style("display","").html("");this.dom.loadingDiv.append("div").style("display","inline-block").style("text-align","center").style("position","relative").style("left","-150px").style("font-size","1.2em").style("margin","2em 1em").html("No matching cohort data.")}renderPlots(t){this.dom.plotsDiv.selectAll("*").remove();this.plots=[];for(const e of t.plots){e.id=e.name.replace(/\s+/g,"");this.renderPlot(e)}}renderPlot(t){const e={};let s=new Set(t.cells.map((t=>t.category)));t.clusters=Array.from(s).sort(((t,e)=>{const s=parseInt(t.split(" ")[1]);const o=parseInt(e.split(" ")[1]);return s-o}));if(this.dom.deselect&&!this.legendRendered){this.dom.deselect.selectAll("*").remove();this.dom.deselect.append("option").text("");for(const e of t.clusters)this.dom.deselect.append("option").text(e)}const o=a(t.clusters.length+2);for(const s of t.clusters)e[s]=s=="ref"||s=="No"?"#F2F2F2":t.colorMap?.[s]?t.colorMap[s]:o(s);t.colorMap=e;this.plots.push(t);this.initAxes(t);t.plotDiv=this.dom.plotsDiv.append("div").style("overflow","hidden").style("display","inline-block").style("padding","10px").style("flex-grow",1);if(this.state.config.settings.singleCellPlot.showBorders)t.plotDiv.style("border","1px solid #aaa");this.renderLegend(t);const i=t.plotDiv.append("svg").attr("width",this.settings.svgw).attr("height",this.settings.svgh+40).on("mouseover",(e=>{if(this.state.config.gene&&!this.onClick)this.showTooltip(e,t)})).on("click",(e=>this.showTooltip(e,t)));i.append("text").attr("transform",`translate(20, 30)`).style("font-weight","bold").text(`${t.name}`);t.svg=i;const n=d().scaleExtent([.5,5]).on("zoom",(e=>this.handleZoom(e,t))).filter((t=>{if(t.type==="wheel")return t.ctrlKey;return true}));i.call(n);const l=i.selectAll("g").data(t.cells);l.enter().append("g").attr("transform",(e=>`translate(${t.xAxisScale(e.x)}, ${t.yAxisScale(e.y)+40})`)).append("circle").attr("r",1.5).attr("fill",(e=>this.getColor(e,t))).style("fill-opacity",(t=>this.getOpacity(t)))}getOpacity(t){if(this.config.hiddenClusters.includes(t.category))return 0;return.7}getColor(t,e){const s="#FAFAFA";if(this.state.config.gene){if(!t.geneExp)return s;if(e.colorGenerator)return e.colorGenerator(t.geneExp);return s}return e.colorMap[t.category]}handleZoom(t,e){e.svg.attr("transform",t.transform);e.zoom=t.transform.scale(1).k}initAxes(t){if(!t.cells.length)return;const e=t.cells[0];const[s,o,i,n]=t.cells.reduce(((t,e)=>[e.x<t[0]?e.x:t[0],e.x>t[1]?e.x:t[1],e.y<t[2]?e.y:t[2],e.y>t[3]?e.y:t[3]]),[e.x,e.x,e.y,e.y]);const l=5;t.xAxisScale=r().domain([s,o]).range([0+l,this.settings.svgh+l]);t.axisBottom=b(t.xAxisScale);t.yAxisScale=r().domain([n,i]).range([0+l,this.settings.svgh+l]);t.axisLeft=v(t.yAxisScale);t.zoom=1}renderLegend(t){const e=t.colorMap;let s=t.legendSVG;if(!t.legendSVG){s=t.plotDiv.append("svg").attr("width",250).attr("height",this.settings.svgh).style("vertical-align","top");t.legendSVG=s}s.selectAll("*").remove();if(this.state.termdbConfig.queries.singleCell.data.sameLegend&&this.legendRendered)return;this.legendRendered=true;const o=s.append("g").attr("transform",`translate(25, 50)`).style("font-size","0.8em");if(this.state.config.gene){this.renderColorGradient(t,o);return}o.append("text").attr("transform",`translate(${0}, ${25})`).style("font-weight","bold").text(`${t.colorBy}`);const i=20;let n=50;let l=0;for(const s in e){const r=t.cells.filter((t=>t.category==s));const p=this.config.hiddenClusters.includes(s);const c=r.length;const d=e[s];const h=o.append("g").attr("transform",(t=>`translate(${l}, ${n})`));h.append("circle").attr("r",3).attr("fill",d);h.append("g").attr("transform",`translate(${l+10}, ${5})`).append("text").text(`${s=="ref"?this.state.termdbConfig.queries.singleCell.data.refName:s=="query"?this.state.config.sample:s} n=${c}`).style("text-decoration",p?"line-through":"none").on("click",(t=>a(this,t,s)));n+=i}function a(t,e,s,o){const i=e.target;const n=i.style["text-decoration"]=="line-through";i.style["text-decoration"]=n?"none":"line-through";let l=t.config.hiddenClusters;if(!n)l.push(s);else l.splice(l.indexOf(s),1);t.app.dispatch({type:"plot_edit",id:t.id,config:{hiddenClusters:l}})}}renderColorGradient(t,e){if(t.cells.length==0)return;const s=p(c);if(!this.config.startColor[t.name])this.config.startColor[t.name]=s.brighter(1).toString();if(!this.config.stopColor[t.name])this.config.stopColor[t.name]=s.darker(3).toString();const o=this.config.startColor[t.name];const i=this.config.stopColor[t.name];const n=e.append("defs").append("linearGradient").attr("id",`linear-gradient-${t.id}`).attr("x1","0%").attr("y1","0%").attr("x2","100%").attr("y2","0%");this.startGradient[t.name]=n.append("stop").attr("offset","0%").attr("stop-color",o);this.stopGradient[t.name]=n.append("stop").attr("offset","100%").attr("stop-color",i);let l,a;const d=t.cells[0]?.geneExp==undefined?[]:t.cells.map((t=>t.geneExp));if(d.length==0){t.colorGenerator=null;return}else[l,a]=d.reduce(((t,e)=>[e<t[0]?e:t[0],e>t[1]?e:t[1]]),[d[0],d[0]]);t.colorGenerator=r().domain([l,a]).range([o,i]);const h=100;const g=r().domain([l,a]).range([0,h]);const m=(a-l)/4;const f=[l,l+m,l+2*m,l+3*m,a];const y=x(g).tickValues(f);e.append("g").attr("transform",`translate(0, 100)`).call(y);t.startRect=e.append("rect").attr("x",-25).attr("y",100).attr("width",20).attr("height",20).style("fill",o).on("click",(e=>this.editColor(t,"startColor",t.startRect)));t.stopRect=e.append("rect").attr("x",h+5).attr("y",100).attr("width",20).attr("height",20).style("fill",i).on("click",(e=>this.editColor(t,"stopColor",t.stopRect)));e.append("rect").attr("x",0).attr("y",100).attr("width",h).attr("height",20).style("fill",`url(#linear-gradient-${t.id})`)}editColor(t,e,s){const o=this.config[e][t.name];const i=new n({padding:"3px"});const l=i.clear().d.append("Label").text("Color:").append("input").attr("type","color").attr("value",p(o).formatHex()).on("change",(()=>{const o=l.node().value;this.changeGradientColor(t,e,s,o);i.hide()}));i.showunder(s.node(),false)}changeGradientColor=function(t,e,s,o){this.config[e][t.name]=o;this.app.dispatch({type:"plot_edit",id:this.id,config:this.config})};distance(t,e,s,o,i){const n=i.xAxisScale(s)-i.xAxisScale(t);const l=i.yAxisScale(o)-i.yAxisScale(e);const a=Math.sqrt(Math.pow(n,2)+Math.pow(l,2));return a}showTooltip(t,e){if(this.onClick&&t.type=="click"){this.onClick=false;this.tip.hide();return}if(t.target.tagName=="circle"){this.onClick=t.type=="click";const s=t.target.__data__;const o=this.tip.clear();const i=o.d.append("table");let n=i.append("tr");n.append("td").style("color","#aaa").text(e.colorBy);const l=n.append("td");const a=l.append("svg").attr("width",150).attr("height",20);const r=10;const p=12;const c=a.append("g").attr("transform",`translate(${r}, ${p})`);c.append("circle").attr("fill",this.getColor(s,e)).attr("r",4);a.append("g").attr("transform",`translate(${r+15}, ${p+4})`).append("text").text(s.category);if("geneExp"in s){n=i.append("tr");n.append("td").style("color","#aaa").text("Gene expression");n.append("td").text(u(s.geneExp))}o.show(t.clientX,t.clientY,true,true)}else this.onMouseOut(t)}onMouseOut(t){this.tip.hide()}}async function w(t,e){const s=t.append("div").style("padding","5px");D(s,e,e.state)}async function D(o,i,n){const l={genome:n.genome,dslabel:n.dslabel,filter0:n.termfilter.filter0||null};let a;try{a=await t("termdb/singlecellSamples",{body:l});if(a.error)throw a.error}catch(t){e(o,t);return}const r=a.samples;i.samples=r;if(i.tableOnPlot){if(r.length==0){i.dom.plotsDiv.selectAll("*").remove();return}if(i.table&&s(i.state.termfilter.filter0,i.prevFilter0))return}o.selectAll("*").remove();r.sort(((t,e)=>{const s=t.primarySite?.localeCompare(e.primarySite);if(s==1||s==-1)return s;else return t.sample.localeCompare(e.sample)}));const[p,c]=await k(i,r,n);const d=[];let g="40vh";if(i.tableOnPlot){const t=i.config.sample;const e=i.samples.findIndex((e=>e.sample==t));const s=e==-1?0:e;d.push(s);g="30vh"}i.table=h({rows:p,columns:c,resize:true,singleMode:true,div:o,maxHeight:g,noButtonCallback:t=>{if(i.dom.DETableDiv){i.dom.deselect.node().value="";i.dom.DETableDiv.selectAll("*").remove();if(i.dom.GSEAbt)i.dom.GSEAbt.property("disabled",true)}const e=p[t][0].value;const s={chartType:"singleCellPlot",sample:e};if(p[t][0].__experimentID){s.experimentID=p[t][0].__experimentID}if(i.tableOnPlot){i.app.dispatch({type:"plot_edit",id:i.id,config:s})}else{i.dom.tip.hide();i.app.dispatch({type:"plot_create",config:s})}},selectedRows:d})}async function k(t,e,s){const o=[];for(const t of e){if(t.experiments)for(const e of t.experiments){const i=[{value:t.sample,__experimentID:e.experimentID}];for(const e of s.termdbConfig.queries.singleCell.samples.sampleColumns||[]){i.push({value:t[e.termid]})}for(const e of s.termdbConfig.queries.singleCell.samples.experimentColumns||[]){i.push({value:t[e.label]})}i.push({value:e.experimentID});o.push(i)}else{const e=[{value:t.sample}];for(const o of s.termdbConfig.queries.singleCell.samples.sampleColumns||[]){e.push({value:t[o.termid]})}o.push(e)}}const i=[{label:s.termdbConfig.queries.singleCell.samples.firstColumnName||"Sample"}];for(const e of s.termdbConfig.queries.singleCell.samples.sampleColumns||[]){i.push({label:(await t.app.vocabApi.getterm(e.termid)).name,width:"15vw"})}for(const t of s.termdbConfig.queries.singleCell.samples.experimentColumns||[]){i.push({label:t.label,width:"20vw"})}if(e.some((t=>t.experiments))){i.push({label:"Experiment"})}return[o,i]}const S=o(C);const A=S;async function _(t,e){try{const s=e.vocabApi.termdbConfig?.queries?.singleCell.data.plots;const o=E();for(const t of s){const e=t.name.replace(/\s+/g,"");const s=`show${e}`;o[s]=true}const n={hiddenClusters:[],settings:{singleCellPlot:o},startColor:{},stopColor:{},plots:s};const l=i(n,t);return l}catch(t){console.log(t);throw`${t} [singleCellPlot getPlotConfig()]`}}function E(){return{svgw:420,svgh:420,showBorders:false,showSamples:true}}export{A as componentInit,E as getDefaultSingleCellSettings,_ as getPlotConfig,w as makeChartBtnMenu,S as scatterInit};
|
|
1
|
+
import{b as t,y as e,F as s,h as o,P as i,M as n,d as l,C as a,I as r,r as p,Q as c}from"./app-6fb77603.js";import{d}from"./zoom-f445cfef.js";import{r as h}from"./table-0daf2b89.js";import{controlsInit as g}from"./controls-268e40e6.js";import{d as m}from"./svg.download-f4aa48e4.js";import{a as f}from"./genesearch-ffd88bf2.js";import{T as y,c as u}from"./termsetting-492eefa7.js";import{a as b,b as v,c as x}from"./axis-747c801e.js";import"./pointer-c7475677.js";import"./nodrag-b2737073.js";import"./tslib.es6-c3c2d88f.js";import"./controls.btns-5bf9e7d7.js";import"./controls.config-2f0fa061.js";import"path";class C{constructor(){this.type="singleCellPlot";this.tip=new n({padding:"4px",offsetX:10,offsetY:0});this.tip.d.style("max-height","300px").style("overflow","scroll").style("font-size","0.9em");this.startGradient={};this.stopGradient={}}async init(e){const s=this.getState(e);const o=s.termdbConfig.queries;this.tableOnPlot=e.nav?.header_mode=="hidden";this.opts.holder.style("position","relative");this.showDivId=`${this.id}-sandbox`;const i=this.opts.holder.insert("div").style("display","inline-block").style("vertical-align","top");const a=i.append("div").style("padding","10px");const r=i.append("div");const p=a.append("div").attr("id",this.showDivId);const c=a.append("div").style("padding-top","10px").style("display","inline-block");if(this.tableOnPlot){p.append("input").attr("id",`showSamples`).attr("type","checkbox").property("checked",true).on("change",(t=>{this.app.dispatch({type:"plot_edit",id:this.id,config:{settings:{singleCellPlot:{showSamples:t.target.checked}}}})}));p.append("label").text("Show samples").attr("for",`showSamples`)}for(const t of s.config.plots){const e=t.name.replace(/\s+/g,"");p.append("input").attr("id",`show${e}`).attr("type","checkbox").property("checked",true).on("change",(t=>{this.app.dispatch({type:"plot_edit",id:this.id,config:{settings:{singleCellPlot:{[`show${e}`]:t.target.checked}}}})}));p.append("label").text(t.name).attr("for",`show${e}`)}if(o.singleCell?.geneExpression){c.append("label").html("Gene expression:");const t=f({tip:new n({padding:"0px"}),genome:this.app.opts.genome,row:c,searchOnly:"gene",placeholder:s.config.gene||"Gene",callback:()=>{o?.style("display","inline-block");e?.style("display","inline-block");const s=t.geneSymbol;this.app.dispatch({type:"plot_edit",id:this.id,config:{gene:s}})},emptyInputCallback:()=>{o.style("display","none");e.style("display","none");this.app.dispatch({type:"plot_edit",id:this.id,config:{gene:null}})},hideHelp:true,focusOff:true});const e=c.append("select").style("display",s.config.gene?"inline-block":"none");for(const t of s.termdbConfig?.queries.singleCell.data.plots){e.append("option").text(t.colorColumn)}e.on("change",(async()=>{const t=s.termdbConfig?.queries.singleCell.data.plots[0];const o=t.columnName;const i={sample:s.config.sample.sampleName,columnName:o,category:e.node().value};await this.app.vocabApi.getTopTermsByType(i)}));const o=c.append("button").text("Open violin").style("margin-left","2px").style("display",s.config.gene?"inline-block":"none");o.on("click",(()=>{const o=t.geneSymbol||s.config.gene;const i=this.state.config.plots.find((t=>t.colorColumn==e.node().value)).name;const n=this.plots.find((t=>t.name==i));const l={};for(const t of n.clusters){l[t]={key:t,value:t}}this.app.dispatch({type:"plot_create",config:{chartType:"violin",settings:{violin:{plotThickness:50}},term:{term:{type:y.SINGLECELL_GENE_EXPRESSION,id:o,gene:o,name:o,sample:s.config.sample}},term2:{term:{type:y.SINGLECELL_CELLTYPE,id:y.SINGLECELL_CELLTYPE,name:"Cell type",sample:s.config.sample,plot:n.name,values:l}}}})}))}const d=a.append("div").style("padding","10px").style("display","inline-block");const g=i.append("div").style("display","inline-block").attr("class","pp-termdb-plot-controls");const m=i.append("div").style("display","inline-block");const b=m.append("div").style("display","flex").style("flex-wrap","wrap").style("justify-content","flex-start").style("width","92vw");const v=this.opts.holder.append("div").style("position","absolute").style("top",0).style("left",0).style("width","100%").style("height","100%").style("background-color","rgba(255, 255, 255, 0.8)").style("text-align","center");v.append("div").attr("class","sjpp-spinner");this.dom={header:this.opts.header,mainDiv:i,loadingDiv:v,tip:new n({padding:"0px"}),tooltip:new n({padding:"2px",offsetX:10,offsetY:0}),controlsHolder:g,tableDiv:r,deDiv:d,plotsDiv:b,plotsDivParent:m};const x=80;this.axisOffset={x:x,y:30};if(o.singleCell?.DEgenes){this.dom.deDiv.append("label").html("View differentially expresed genes of a cluster vs rest of cells: ");this.dom.deselect=this.dom.deDiv.append("select");if(this.app.opts.genome.termdbs)this.dom.GSEAbt=this.dom.deDiv.append("button").style("margin-left","5px").property("disabled",true).text("Gene set enrichment analysis").on("click",(t=>{const e={genes:this.genes,fold_change:this.fold_changes,genome:this.app.vocabApi.opts.state.vocab.genome};const s={chartType:"gsea",gsea_params:e,insertBefore:this.app.opts?.app?.getPlotHolder&&this.showDivId};this.app.dispatch({type:"plot_create",config:s})}));const e=this.dom.deDiv.append("div");this.dom.DETableDiv=e;this.dom.deselect.append("option").text("");this.dom.deselect.on("change",(async o=>{e.selectAll("*").remove();const i=this.dom.deselect.node().value.split(" ")?.[1];if(this.dom.GSEAbt)this.dom.GSEAbt.property("disabled",!i);if(!i)return;const n=s.termdbConfig.queries.singleCell.DEgenes.columnName;const l=this.state.config.experimentID||this.state.config.sample||this.samples[0]?.experiments[0]?.experimentID;const a={genome:s.genome,dslabel:s.dslabel,categoryName:i,sample:l,columnName:n};const r=await t("termdb/singlecellDEgenes",{body:a});const p=[{label:"Gene"},{label:"Log2FC"},{label:"Adjusted P-value"}];const c=[];this.genes=[];this.fold_changes=[];r.genes.sort(((t,e)=>e.avg_log2FC-t.avg_log2FC));for(const t of r.genes){const e=[{value:t.name},{value:u(t.avg_log2FC)},{value:u(t.p_val_adj)}];c.push(e);this.genes.push(t.name);this.fold_changes.push(t.avg_log2FC)}h({rows:c,columns:p,resize:true,div:e})}))}this.settings={};document.addEventListener("scroll",(t=>this?.tip?.hide()));l(".sjpp-output-sandbox-content").on("scroll",(t=>this.tip.hide()));await this.setControls(s)}async setControls(t){const e=[{label:"Chart width",type:"number",chartType:"singleCellPlot",settingsKey:"svgw",min:300,max:1e3},{label:"Chart height",type:"number",chartType:"singleCellPlot",settingsKey:"svgh",min:300,max:1e3},{label:"Show borders",type:"checkbox",chartType:"singleCellPlot",settingsKey:"showBorders",boxLabel:""}];if(this.tableOnPlot)e.push({label:"Show samples",type:"checkbox",chartType:"singleCellPlot",settingsKey:"showSamples",boxLabel:""});this.components={controls:await g({app:this.app,id:this.id,holder:this.dom.controlsHolder,inputs:e})};this.components.controls.on("downloadClick.singleCellPlot",(()=>{for(const t of this.plots)m(t.svg,"plot.svg",this.opts.holder.node())}))}getState(t){const e=t.plots.find((t=>t.id===this.id));if(!e){throw`No plot with id='${this.id}' found. Did you set this.id before this.api = getComponentApi(this)?`}this.prevFilter0=this.state?.termfilter.filter0;return{config:e,dslabel:t.vocab.dslabel,genome:t.vocab.genome,termdbConfig:t.termdbConfig,termfilter:t.termfilter}}async main(){this.config=structuredClone(this.state.config);i(this.settings,this.config.settings.singleCellPlot);this.dom.tableDiv.style("display",this.settings.showSamples?"block":"none");if(this.tableOnPlot){await D(this.dom.tableDiv,this,this.state);if(!this.samples?.length){this.showNoMatchingDataMessage();return}}this.dom.loadingDiv.selectAll("*").remove();this.dom.loadingDiv.style("display","").append("div").attr("class","sjpp-spinner");this.dom.mainDiv.style("opacity",1).style("display","");this.legendRendered=false;const t=await this.getData();this.dom.plotsDivParent.style("display","inline-block");this.renderPlots(t);this.dom.loadingDiv.style("display","none");if(this.dom.header)this.dom.header.html(`Single Cell Data`)}async getData(){const s=[];for(const t of this.config.plots){const e=t.name.replace(/\s+/g,"");const o=this.settings[`show${e}`];if(o)s.push(t.name)}const o={genome:this.state.genome,dslabel:this.state.dslabel,plots:s,filter0:this.state.termfilter.filter0};if(this.state.config.sample){this.state.config.sample;o.sample=this.state.config.experimentID||this.state.config.sample}else{this.samples[0].sample;o.sample=this.samples[0].experiments?.[0]?.experimentID||this.samples[0].sample}if(this.state.config.gene)o.gene=this.state.config.gene;try{const e=await t("termdb/singlecellData",{body:o});if(e.error)throw e.error;this.refName=e.refName;return e}catch(t){if(t.stack)console.log(t.stack);e(this.dom.plotsDiv,t);return}}showNoMatchingDataMessage(){this.dom.mainDiv.style("opacity",.001).style("display","none");this.dom.loadingDiv.style("display","").html("");this.dom.loadingDiv.append("div").style("display","inline-block").style("text-align","center").style("position","relative").style("left","-150px").style("font-size","1.2em").style("margin","2em 1em").html("No matching cohort data.")}renderPlots(t){this.dom.plotsDiv.selectAll("*").remove();this.plots=[];for(const e of t.plots){e.id=e.name.replace(/\s+/g,"");this.renderPlot(e)}}renderPlot(t){const e={};let s=new Set(t.cells.map((t=>t.category)));t.clusters=Array.from(s).sort(((t,e)=>{const s=parseInt(t.split(" ")[1]);const o=parseInt(e.split(" ")[1]);return s-o}));if(this.dom.deselect&&!this.legendRendered){this.dom.deselect.selectAll("*").remove();this.dom.deselect.append("option").text("");for(const e of t.clusters)this.dom.deselect.append("option").text(e)}const o=a(t.clusters.length+2);for(const s of t.clusters)e[s]=s=="ref"||s=="No"?"#F2F2F2":t.colorMap?.[s]?t.colorMap[s]:o(s);t.colorMap=e;this.plots.push(t);this.initAxes(t);t.plotDiv=this.dom.plotsDiv.append("div").style("overflow","hidden").style("display","inline-block").style("padding","10px").style("flex-grow",1);if(this.state.config.settings.singleCellPlot.showBorders)t.plotDiv.style("border","1px solid #aaa");this.renderLegend(t);const i=t.plotDiv.append("svg").attr("width",this.settings.svgw).attr("height",this.settings.svgh+40).on("mouseover",(e=>{if(this.state.config.gene&&!this.onClick)this.showTooltip(e,t)})).on("click",(e=>this.showTooltip(e,t)));i.append("text").attr("transform",`translate(20, 30)`).style("font-weight","bold").text(`${t.name}`);t.svg=i;const n=d().scaleExtent([.5,5]).on("zoom",(e=>this.handleZoom(e,t))).filter((t=>{if(t.type==="wheel")return t.ctrlKey;return true}));i.call(n);const l=i.selectAll("g").data(t.cells);l.enter().append("g").attr("transform",(e=>`translate(${t.xAxisScale(e.x)}, ${t.yAxisScale(e.y)+40})`)).append("circle").attr("r",1.5).attr("fill",(e=>this.getColor(e,t))).style("fill-opacity",(t=>this.getOpacity(t)))}getOpacity(t){if(this.config.hiddenClusters.includes(t.category))return 0;return.7}getColor(t,e){const s="#FAFAFA";if(this.state.config.gene){if(!t.geneExp)return s;if(e.colorGenerator)return e.colorGenerator(t.geneExp);return s}return e.colorMap[t.category]}handleZoom(t,e){e.svg.attr("transform",t.transform);e.zoom=t.transform.scale(1).k}initAxes(t){if(!t.cells.length)return;const e=t.cells[0];const[s,o,i,n]=t.cells.reduce(((t,e)=>[e.x<t[0]?e.x:t[0],e.x>t[1]?e.x:t[1],e.y<t[2]?e.y:t[2],e.y>t[3]?e.y:t[3]]),[e.x,e.x,e.y,e.y]);const l=5;t.xAxisScale=r().domain([s,o]).range([0+l,this.settings.svgh+l]);t.axisBottom=b(t.xAxisScale);t.yAxisScale=r().domain([n,i]).range([0+l,this.settings.svgh+l]);t.axisLeft=v(t.yAxisScale);t.zoom=1}renderLegend(t){const e=t.colorMap;let s=t.legendSVG;if(!t.legendSVG){s=t.plotDiv.append("svg").attr("width",250).attr("height",this.settings.svgh).style("vertical-align","top");t.legendSVG=s}s.selectAll("*").remove();if(this.state.termdbConfig.queries.singleCell.data.sameLegend&&this.legendRendered)return;this.legendRendered=true;const o=s.append("g").attr("transform",`translate(25, 50)`).style("font-size","0.8em");if(this.state.config.gene){this.renderColorGradient(t,o);return}o.append("text").attr("transform",`translate(${0}, ${25})`).style("font-weight","bold").text(`${t.colorBy}`);const i=20;let n=50;let l=0;for(const s in e){const r=t.cells.filter((t=>t.category==s));const p=this.config.hiddenClusters.includes(s);const c=r.length;const d=e[s];const h=o.append("g").attr("transform",(t=>`translate(${l}, ${n})`));h.append("circle").attr("r",3).attr("fill",d);h.append("g").attr("transform",`translate(${l+10}, ${5})`).append("text").text(`${s=="ref"?this.state.termdbConfig.queries.singleCell.data.refName:s=="query"?this.state.config.sample:s} n=${c}`).style("text-decoration",p?"line-through":"none").on("click",(t=>a(this,t,s)));n+=i}function a(t,e,s,o){const i=e.target;const n=i.style["text-decoration"]=="line-through";i.style["text-decoration"]=n?"none":"line-through";let l=t.config.hiddenClusters;if(!n)l.push(s);else l.splice(l.indexOf(s),1);t.app.dispatch({type:"plot_edit",id:t.id,config:{hiddenClusters:l}})}}renderColorGradient(t,e){if(t.cells.length==0)return;const s=p(c);if(!this.config.startColor[t.name])this.config.startColor[t.name]=s.brighter(1).toString();if(!this.config.stopColor[t.name])this.config.stopColor[t.name]=s.darker(3).toString();const o=this.config.startColor[t.name];const i=this.config.stopColor[t.name];const n=e.append("defs").append("linearGradient").attr("id",`linear-gradient-${t.id}`).attr("x1","0%").attr("y1","0%").attr("x2","100%").attr("y2","0%");this.startGradient[t.name]=n.append("stop").attr("offset","0%").attr("stop-color",o);this.stopGradient[t.name]=n.append("stop").attr("offset","100%").attr("stop-color",i);let l,a;const d=t.cells[0]?.geneExp==undefined?[]:t.cells.map((t=>t.geneExp));if(d.length==0){t.colorGenerator=null;return}else[l,a]=d.reduce(((t,e)=>[e<t[0]?e:t[0],e>t[1]?e:t[1]]),[d[0],d[0]]);t.colorGenerator=r().domain([l,a]).range([o,i]);const h=100;const g=r().domain([l,a]).range([0,h]);const m=(a-l)/4;const f=[l,l+m,l+2*m,l+3*m,a];const y=x(g).tickValues(f);e.append("g").attr("transform",`translate(0, 100)`).call(y);t.startRect=e.append("rect").attr("x",-25).attr("y",100).attr("width",20).attr("height",20).style("fill",o).on("click",(e=>this.editColor(t,"startColor",t.startRect)));t.stopRect=e.append("rect").attr("x",h+5).attr("y",100).attr("width",20).attr("height",20).style("fill",i).on("click",(e=>this.editColor(t,"stopColor",t.stopRect)));e.append("rect").attr("x",0).attr("y",100).attr("width",h).attr("height",20).style("fill",`url(#linear-gradient-${t.id})`)}editColor(t,e,s){const o=this.config[e][t.name];const i=new n({padding:"3px"});const l=i.clear().d.append("Label").text("Color:").append("input").attr("type","color").attr("value",p(o).formatHex()).on("change",(()=>{const o=l.node().value;this.changeGradientColor(t,e,s,o);i.hide()}));i.showunder(s.node(),false)}changeGradientColor=function(t,e,s,o){this.config[e][t.name]=o;this.app.dispatch({type:"plot_edit",id:this.id,config:this.config})};distance(t,e,s,o,i){const n=i.xAxisScale(s)-i.xAxisScale(t);const l=i.yAxisScale(o)-i.yAxisScale(e);const a=Math.sqrt(Math.pow(n,2)+Math.pow(l,2));return a}showTooltip(t,e){if(this.onClick&&t.type=="click"){this.onClick=false;this.tip.hide();return}if(t.target.tagName=="circle"){this.onClick=t.type=="click";const s=t.target.__data__;const o=this.tip.clear();const i=o.d.append("table");let n=i.append("tr");n.append("td").style("color","#aaa").text(e.colorBy);const l=n.append("td");const a=l.append("svg").attr("width",150).attr("height",20);const r=10;const p=12;const c=a.append("g").attr("transform",`translate(${r}, ${p})`);c.append("circle").attr("fill",this.getColor(s,e)).attr("r",4);a.append("g").attr("transform",`translate(${r+15}, ${p+4})`).append("text").text(s.category);if("geneExp"in s){n=i.append("tr");n.append("td").style("color","#aaa").text("Gene expression");n.append("td").text(u(s.geneExp))}o.show(t.clientX,t.clientY,true,true)}else this.onMouseOut(t)}onMouseOut(t){this.tip.hide()}}async function w(t,e){const s=t.append("div").style("padding","5px");D(s,e,e.state)}async function D(o,i,n){const l={genome:n.genome,dslabel:n.dslabel,filter0:n.termfilter.filter0||null};let a;try{a=await t("termdb/singlecellSamples",{body:l});if(a.error)throw a.error}catch(t){e(o,t);return}const r=a.samples;i.samples=r;if(i.tableOnPlot){if(r.length==0){i.dom.plotsDiv.selectAll("*").remove();return}if(i.table&&s(i.state.termfilter.filter0,i.prevFilter0))return}o.selectAll("*").remove();r.sort(((t,e)=>{const s=t.primarySite?.localeCompare(e.primarySite);if(s==1||s==-1)return s;else return t.sample.localeCompare(e.sample)}));const[p,c]=await k(i,r,n);const d=[];let g="40vh";if(i.tableOnPlot){const t=i.config.sample;const e=i.samples.findIndex((e=>e.sample==t));const s=e==-1?0:e;d.push(s);g="30vh"}i.table=h({rows:p,columns:c,resize:true,singleMode:true,div:o,maxHeight:g,noButtonCallback:t=>{if(i.dom.DETableDiv){i.dom.deselect.node().value="";i.dom.DETableDiv.selectAll("*").remove();if(i.dom.GSEAbt)i.dom.GSEAbt.property("disabled",true)}const e=p[t][0].value;const s={chartType:"singleCellPlot",sample:e};if(p[t][0].__experimentID){s.experimentID=p[t][0].__experimentID}if(i.tableOnPlot){i.app.dispatch({type:"plot_edit",id:i.id,config:s})}else{i.dom.tip.hide();i.app.dispatch({type:"plot_create",config:s})}},selectedRows:d})}async function k(t,e,s){const o=[];for(const t of e){if(t.experiments)for(const e of t.experiments){const i=[{value:t.sample,__experimentID:e.experimentID}];for(const e of s.termdbConfig.queries.singleCell.samples.sampleColumns||[]){i.push({value:t[e.termid]})}for(const e of s.termdbConfig.queries.singleCell.samples.experimentColumns||[]){i.push({value:t[e.label]})}i.push({value:e.experimentID});o.push(i)}else{const e=[{value:t.sample}];for(const o of s.termdbConfig.queries.singleCell.samples.sampleColumns||[]){e.push({value:t[o.termid]})}o.push(e)}}const i=[{label:s.termdbConfig.queries.singleCell.samples.firstColumnName||"Sample"}];for(const e of s.termdbConfig.queries.singleCell.samples.sampleColumns||[]){i.push({label:(await t.app.vocabApi.getterm(e.termid)).name,width:"15vw"})}for(const t of s.termdbConfig.queries.singleCell.samples.experimentColumns||[]){i.push({label:t.label,width:"20vw"})}if(e.some((t=>t.experiments))){i.push({label:"Experiment"})}return[o,i]}const S=o(C);const A=S;async function _(t,e){try{const s=e.vocabApi.termdbConfig?.queries?.singleCell.data.plots;const o=E();for(const t of s){const e=t.name.replace(/\s+/g,"");const s=`show${e}`;o[s]=true}const n={hiddenClusters:[],settings:{singleCellPlot:o},startColor:{},stopColor:{},plots:s};const l=i(n,t);return l}catch(t){console.log(t);throw`${t} [singleCellPlot getPlotConfig()]`}}function E(){return{svgw:420,svgh:420,showBorders:false,showSamples:true}}export{A as componentInit,E as getDefaultSingleCellSettings,_ as getPlotConfig,w as makeChartBtnMenu,S as scatterInit};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{P as e,n as t,d as o,b as s,y as r}from"./app-
|
|
1
|
+
import{P as e,n as t,d as o,b as s,y as r}from"./app-6fb77603.js";import{r as l}from"./table-0daf2b89.js";import{appInit as i}from"./plot.app-2a805759.js";import"./tslib.es6-c3c2d88f.js";import"./recover-299ffdb3.js";import"./termsetting-492eefa7.js";import"path";import"./FilterRxComp-02e68f1b.js";import"./partjson.esm-b3f1fc21.js";import"./termdb.bins-39d11f24.js";import"./FilterStateless-16a33070.js";import"./app-d215327f.js";import"./termInfo-491b10af.js";import"./toggleButtons-c4d6f260.js";import"./genesearch-ffd88bf2.js";import"./checkbox-96437f4d.js";import"./rehydrateFilter-12d118cb.js";const a="hg38";const p="GDC";const n=[{label:"Case"},{label:"Project"},{label:"Primary Site"},{label:"Disease Type"},{label:"Sample Type"}];async function d(s,r,l){const n=await i({holder:r,state:{genome:a,dslabel:p,termfilter:{filter0:s.filter0},plots:[{chartType:"singleCellPlot"}]},noheader:true,nobox:true,hide_dsHandles:true,genome:l[a],app:e({getPlotHolder:(e,s)=>{if(e.chartType=="gsea"){const r=t(o(s.select(`#${e.insertBefore}`).node().parentNode),{close:()=>{n.dispatch({type:"plot_delete",id:e.id})},plotId:e.id,beforePlotId:e.insertBefore||null,style:{width:"98.5%"}});r.header.text("GENE SET ENRICHMENT ANALYSIS");return r.body.style("white-space","nowrap")}else{return s.append("div")}}},s.opts?.app||{}),singleCellPlot:s.opts?.singleCell||{}});const d={update:async e=>{if("filter0"in e){n.dispatch({type:"app_refresh",subactions:[{type:"filter_replace",filter0:e.filter0},{type:"plot_edit",id:n.getState().plots[0].id,config:{sample:undefined}}]})}else{console.log(75,n);n.dispatch({type:"plot_edit",id:n.getState().plots[0].id,config:e})}}};return d}async function c({holder:e,filter0:t,callbackOnRender:o,debugmode:s=false}){const r={};if(typeof o=="function"){o(r)}const l={errDiv:e.append("div"),controlDiv:e.append("div"),tableDiv:e.append("div"),opts:{filter0:t}};await f(l);return r}async function f(e){e.tableDiv.selectAll("*").remove();const t=e.tableDiv.append("div").text("Loading...");let o;{const l={genome:a,dslabel:p};if(e.opts.filter0)l.filter0=e.opts.filter0;try{o=await s("termdb/singlecellSamples",{body:l});if(o.error)throw o.error}catch(o){t.remove();r(e.errDiv,o);return}}console.log(o);t.remove();const i=[];const d=[];for(const e of o.samples){for(const t of e.experiments){const o=[{value:e.sample},{value:e["case.project.project_id"]},{value:e["case.primary_site"]},{value:e["case.disease_type"]},{value:t.sampleType}];i.push(o);d.push(t.experimentID)}}l({rows:i,columns:n,resize:true,singleMode:true,div:e.tableDiv.append("div"),noButtonCallback:t=>{console.log(160);e.api.update({sample:d[t]})}})}export{c as gdcSinglecellUi,d as init};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a8 as e,a3 as t,bs as n,bt as o,bu as a,$ as s,bv as i,j as r,q as l,M as c,ah as p,I as d,bw as u,bx as g,Z as m,ac as y,p as x,a7 as f}from"./app-2cd97738.js";import{l as h}from"./block.legend-d2b7f1cb.js";import{s as _}from"./legacy-d3-polyfill-bdb2d792.js";import{a as b,c as v,b as k}from"./axis-747c801e.js";import{p as w}from"./viridis-d86ad99b.js";import{l as z}from"./line-264f8f9e.js";import{a as E}from"./area-f56e50f9.js";import{p as j}from"./pointer-c7475677.js";import"./vcf-145bf5dd.js";import"./partition-db811f6b.js";import"./arc-3d6751aa.js";import"./constant-426a1483.js";import"./math-2fb199c6.js";function M(e,t,n){e=+e,t=+t,n=(a=arguments.length)<2?(t=e,e=0,1):a<3?1:+n;var o=-1,a=Math.max(0,Math.ceil((t-e)/n))|0,s=new Array(a);while(++o<a){s[o]=e+o*n}return s}function I(){var n=e().unknown(undefined),o=n.domain,a=n.range,s=0,i=1,r,l,c=false,p=0,d=0,u=.5;delete n.unknown;function g(){var e=o().length,t=i<s,n=t?i:s,g=t?s:i;r=(g-n)/Math.max(1,e-p+d*2);if(c)r=Math.floor(r);n+=(g-n-r*(e-p))*u;l=r*(1-p);if(c)n=Math.round(n),l=Math.round(l);var m=M(e).map((function(e){return n+r*e}));return a(t?m.reverse():m)}n.domain=function(e){return arguments.length?(o(e),g()):o()};n.range=function(e){return arguments.length?([s,i]=e,s=+s,i=+i,g()):[s,i]};n.rangeRound=function(e){return[s,i]=e,s=+s,i=+i,c=true,g()};n.bandwidth=function(){return l};n.step=function(){return r};n.round=function(e){return arguments.length?(c=!!e,g()):c};n.padding=function(e){return arguments.length?(p=Math.min(1,d=+e),g()):p};n.paddingInner=function(e){return arguments.length?(p=Math.min(1,e),g()):p};n.paddingOuter=function(e){return arguments.length?(d=+e,g()):d};n.align=function(e){return arguments.length?(u=Math.max(0,Math.min(1,e)),g()):u};n.copy=function(){return I(o(),[s,i]).round(c).paddingInner(p).paddingOuter(d).align(u)};return t.apply(g(),arguments)}function C(){var e=0,t=1,n,a,r,l,c=o,p=false,d;function u(e){return e==null||isNaN(e=+e)?d:c(r===0?.5:(e=(l(e)-n)*r,p?Math.max(0,Math.min(1,e)):e))}u.domain=function(o){return arguments.length?([e,t]=o,n=l(e=+e),a=l(t=+t),r=n===a?0:1/(a-n),u):[e,t]};u.clamp=function(e){return arguments.length?(p=!!e,u):p};u.interpolator=function(e){return arguments.length?(c=e,u):c};function g(e){return function(t){var n,o;return arguments.length?([n,o]=t,c=e(n,o),u):[c(0),c(1)]}}u.range=g(s);u.rangeRound=g(i);u.unknown=function(e){return arguments.length?(d=e,u):d};return function(o){l=o,n=o(e),a=o(t),r=n===a?0:1/(a-n);return u}}function N(e,t){return t.domain(e.domain()).interpolator(e.interpolator()).clamp(e.clamp()).unknown(e.unknown())}function S(){var e=n(C()(o));e.copy=function(){return N(e,S())};return a.apply(e,arguments)}function R(e){return e<0?-1:1}function T(e,t,n){var o=e._x1-e._x0,a=t-e._x1,s=(e._y1-e._y0)/(o||a<0&&-0),i=(n-e._y1)/(a||o<0&&-0),r=(s*a+i*o)/(o+a);return(R(s)+R(i))*Math.min(Math.abs(s),Math.abs(i),.5*Math.abs(r))||0}function G(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function H(e,t,n){var o=e._x0,a=e._y0,s=e._x1,i=e._y1,r=(s-o)/3;e._context.bezierCurveTo(o+r,a+r*t,s-r,i-r*n,s,i)}function P(e){this._context=e}P.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN;this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:H(this,this._t0,G(this,this._t0));break}if(this._line||this._line!==0&&this._point===1)this._context.closePath();this._line=1-this._line},point:function(e,t){var n=NaN;e=+e,t=+t;if(e===this._x1&&t===this._y1)return;switch(this._point){case 0:this._point=1;this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3;H(this,G(this,n=T(this,e,t)),n);break;default:H(this,this._t0,n=T(this,e,t));break}this._x0=this._x1,this._x1=e;this._y0=this._y1,this._y1=t;this._t0=n}};Object.create(P.prototype).point=function(e,t){P.prototype.point.call(this,t,e)};function L(e){return new P(e)}async function A(e,t){try{const n=await D(e);O(n);n.genome=e.genome;n.holder=t.style("position","relative");await F(n);Z(n);await B(n);oe(e,n)}catch(e){r(t,e.message||e)}}async function D(e){if(!e.jsonfile)throw".jsonfile missing";const t=await l("textfile",{file:e.jsonfile});if(t.error)throw t.error;return JSON.parse(t.text)}function O(t){if(!t.cells)throw".cells{} missing";if(!t.cells.file)throw".cells.file missing";if(!t.cells.axis2columnidx)throw".cells.axis2columnidx missing";if(t.cells.categories){if(!Array.isArray(t.cells.categories))throw".cells.categories should be an array";if(t.cells.categories.length==0)throw".cells.categories[] is empty array";for(const n of t.cells.categories){if(!Number.isInteger(n.columnidx))throw"columnidx missing from category "+n;if(n.autocolor){n.autocolor=e(_)}}if(!Number.isInteger(t.use_category_index)){t.use_category_index=0}if(!t.cells.categories[t.use_category_index])throw"use_category_index out of bound";if(!t.cells.categories[t.use_category_index].hidden_types)t.cells.categories[t.use_category_index].hidden_types=[]}if(t.gene_expression){if(!t.gene_expression.file)throw".gene_expression.file missing";if(!Number.isInteger(t.cells.barcodecolumnidx))throw".gene_expression in use but .cells.barcodecolumnidx is missing"}if(!t.width)t.width=window.innerWidth*.9;if(!t.height)t.height=window.innerHeight*.9}async function B(e){if(Number.isInteger(e.use_category_index)){if(!e.cells.categories[e.use_category_index].hidden_types)e.cells.categories[e.use_category_index].hidden_types=[]}const t=await W(e);e.data_sphere_r=t.data_sphere_r;if(!e.camera.position.z){e.camera.position.z=e.data_sphere_r*3;e.controls.maxDistance=e.data_sphere_r*4;e.controls.minDistance=e.data_sphere_r/10}const n=new TextEncoder;const o=n.encode(t.pcddata).buffer;V(e,o);q(e,t);a();function a(){requestAnimationFrame(a);e.controls.update();e.renderer.render(e.scene,e.camera)}}async function W(e){const t=e.holder.append("div").style("position","absolute").style("top",0).style("left",0).style("padding","10px").style("font-size","1.5rem").text("Loading data...");const n={genome:e.genome.name,textfile:e.cells.file,delimiter:e.cells.delimiter||"\t",getpcd:{coord:e.cells.axis2columnidx}};if(Number.isInteger(e.use_category_index)){if(!e.cells.categories)throw"using category index but cells.categories[] missing";const t=e.cells.categories[e.use_category_index];if(!t)throw"category array index out of bound";n.getpcd.category_index=t.columnidx;if(t.autocolor){n.getpcd.category_autocolor=true;if(t.values_count)n.getpcd.values_count=t.values_count}else if(t.values){n.getpcd.category_customcolor=true;n.getpcd.cat_values=t.values}else{if(!t.autocolor&&!t.values)throw"categories.values[] are not defined";throw"unknow coloring scheme for category "+t.name}if(t.hidden_types){n.hidden_types=t.hidden_types}if(e.background_color){n.background_color=e.background_color}if(!t.customorder){n.getpcd.category_autoorder=true}else if(t.customorder&&t.values){n.getpcd.category_customorder=true;n.getpcd.cat_values=t.values}else{if(t.customorder&&!t.values)throw"categories.values[] are not defined";throw"unknow ordering scheme for category "+t.name}e.menu_button.html(t.name+" ▼")}else if(Number.isInteger(e.use_gene_index)){const t=e.gene_expression.genes[e.use_gene_index];e.menu_button.html("Gene : "+t.gene+" ▼");n.getpcd.gene_expression={file:e.gene_expression.file,barcodecolumnidx:e.cells.barcodecolumnidx,chr:t.chr,start:t.start,stop:t.stop,autoscale:true,genename:t.gene,color_min:e.gene_expression.color_min,color_max:e.gene_expression.color_max};if(e.gene_expression.color_no_exp)n.getpcd.gene_expression.color_no_exp=e.gene_expression.color_no_exp}else{throw"unknown method to color the cells"}return l("singlecell",n).then((e=>{if(e.error)throw e.error;t.remove();return e}))}async function F(e){await ne("/static/js/three.js");await ne("/static/js/loaders/PCDLoader.js");await ne("/static/js/controls/TrackballControls.js");await ne("/static/js/WebGL.js");if(WEBGL.isWebGLAvailable()===false){e.holder.node().appendChild(WEBGL.getWebGLErrorMessage());return}e.scene=new THREE.Scene;if(e.background_color){e.scene.background=new THREE.Color(e.background_color)}else{e.scene.background=new THREE.Color(16777215)}const t=e.default_zoom?100-e.default_zoom:45;e.camera=new THREE.PerspectiveCamera(t,e.width/e.height,.1,1e3);e.camera.position.x=e.canvas_2d?0:20;e.camera.position.y=e.canvas_2d?0:-10;if(e.canvas_2d){e.camera.up.set(0,1,0)}else{e.camera.up.set(0,0,1)}e.controls=new THREE.TrackballControls(e.camera);e.controls.rotateSpeed=e.canvas_2d?0:2;e.controls.zoomSpeed=e.canvas_2d?3:.7;e.controls.panSpeed=e.canvas_2d?3:.7;e.controls.noZoom=true;e.controls.noPan=false;e.controls.staticMoving=true;e.controls.dynamicDampingFactor=.3;e.scene.add(e.camera);e.renderer=new THREE.WebGLRenderer({antialias:true,preserveDrawingBuffer:true});e.renderer.setPixelRatio(window.devicePixelRatio);e.renderer.setSize(e.width,e.height);e.renderer.domElement.style.backgroundColor="#ffffff";e.renderer.domElement.style.border="solid #dddddd 2px";e.holder.style("display","inline-block").style("position","relative").node().appendChild(e.renderer.domElement);e.renderer.render(e.scene,e.camera)}function V(e,t){e.scene.children.forEach((function(t,n){if(t.material){t.material.dispose();t.geometry.dispose();e.scene.remove(t)}}));const n=new THREE.PCDLoader;const o=n.parse(t,"");if(e.point_size){o.material.size=e.point_size}else{o.material.size=e.canvas_2d?.3:.05}e.scene.add(o);e.center=o.geometry.boundingSphere.center;e.controls.target.set(e.center.x,e.center.y,e.center.z);e.controls.update()}function Z(e){e.menu=new c;e.menu.d.style("padding","3px");e.settings=new c;e.settings.d.style("padding","3px");const t=e.holder.append("div").style("padding","10px").style("position","absolute").style("border-radius","5px").style("top","20px").style("right","20px").style("background-color","#dddddd");e.menu_button=t.append("button").style("display","inline-block").style("padding","4px").on("click",(()=>J(e)));const n=e.minimize_btn=t.append("div").style("margin-left","10px").style("display","inline-block").style("padding-left","0px").style("padding-right","2px").style("float","right").style("font-size",".6em").classed("active",e.menu_minimized?true:false).text(e.menu_minimized?" SHOW":" HIDE").on("click",(()=>{e.minimize_btn.classed("active",e.minimize_btn.classed("active")?false:true);if(e.minimize_btn.classed("active")){e.minimize_btn.text(" SHOW");e.menu_output.style("display","none")}else{e.minimize_btn.text(" HIDE");e.menu_output.style("display","block")}})).on("mouseover",(()=>{n.style("text-decoration","underline")})).on("mouseout",(()=>{n.style("text-decoration","none")}));e.use_background_color=0;const o=e.settings_btn=t.append("div").style("margin-left","10px").style("display","inline-block").style("padding-left","3px").style("padding-right","3px").style("float","right").style("font-size",".6em").text("CONFIG").on("click",(()=>$(e))).on("mouseover",(()=>{o.style("text-decoration","underline")})).on("mouseout",(()=>{o.style("text-decoration","none")}));e.menu_output=t.append("div").style("margin-top","10px").style("display",e.menu_minimized?"none":"block");e.show_zoom=true}function q(e,t){e.menu_output.selectAll("*").remove();if(t.category2color){const n=e.menu_output.append("div").style("margin","2px");const o=n.append("input").attr("type","checkbox").style("margin-right","10px").style("vertical-align","top").style("display","inline-block").on("change",(()=>{if(o.node().checked){e.cells.categories[e.use_category_index].hidden_types=[];B(e)}else{for(const n in t.category2color){e.cells.categories[e.use_category_index].hidden_types.push(n)}B(e)}}));if(e.cells.categories[e.use_category_index].hidden_types.length==0){o.property("checked",1)}n.append("span").text("Select All").style("font-size",".8em").attr("font-family",p);for(const n in t.category2color){const o=e.menu_output.append("div").style("margin","2px");const a=o.append("input").attr("type","checkbox").property("checked",1).style("margin-right","10px").style("vertical-align","top").style("display","inline-block").on("change",(()=>{if(e.cells.categories[e.use_category_index].hidden_types.includes(n)){const t=e.cells.categories[e.use_category_index].hidden_types.indexOf(n);if(t!==-1)e.cells.categories[e.use_category_index].hidden_types.splice(t,1);a.property("checked",1)}else{e.cells.categories[e.use_category_index].hidden_types.push(n)}B(e)}));if(e.cells.categories[e.use_category_index].hidden_types.includes(n)){a.property("checked",0)}o.append("div").style("display","inline-block").style("height","15px").style("width","15px").style("background-color",t.category2color[n]).style("margin-right","10px");o.append("span").text(n).attr("font-family",p);o.append("span").html(" n="+t.categorycount[n]).attr("font-family",p).style("font-size",".8em").style("float","right").style("color","#777")}}else if(t.maxexpvalue){const n=30;const o=150;const a=e.menu_output.append("div").style("margin","10px").style("width","120px").style("height","100px");a.append("div").text("Gene Expression "+e.gene_expression.datatype).style("text-align","center").style("width","150px").style("margin-bottom","20px");const s=a.append("svg").append("g");const i=[e.gene_expression.color_max,e.gene_expression.color_min];const r=d().range(i).domain([t.minexpvalue,t.maxexpvalue]);const p=s.append("defs");const u=p.append("linearGradient").attr("id","linear-gradient");u.append("stop").attr("offset","0%").attr("stop-color",r(t.maxexpvalue));u.append("stop").attr("offset","100%").attr("stop-color",r(t.minexpvalue));s.append("rect").attr("x",0).attr("y",0).attr("width",o).attr("height",n).attr("transform","translate(12, 0)").style("fill","url(#linear-gradient)");const g=d().range([0,o]).domain([t.minexpvalue,t.maxexpvalue]);const m=b().scale(g).ticks(5);s.append("g").attr("class","legend axis").attr("transform","translate(12,"+n+")").call(m);const y=e.menu_output.append("div").style("padding-bottom","20px").style("text-align","center");y.append("p").style("font-size","13px").style("margin","2px 0").html("<b>Cells with Expression Data</b> ");y.append("p").style("font-size","13px").style("margin","2px 0").html(t.numbercellwithgeneexp+" / "+t.numbercelltotal);const x=y.append("div").style("display","block").style("margin-top","10px");x.append("div").style("display","inline-block").style("height","15px").style("width","15px").style("background-color",e.gene_expression.color_no_exp?e.gene_expression.color_no_exp:"#2C2C2C").style("margin-right","10px");x.append("div").style("display","inline-block").style("font-size","13px").html(" Cells without Expression");const f=e.menu_output.append("div");f.append("div").style("display","block").style("padding","5px").html("Violinplot / Boxplot of </br> Expression by");const h=f.append("select").style("display","block");h.append("option").attr("value","none").text("-- Select--");if(e.cells.categories){e.cells.categories.forEach(((e,t)=>{h.append("option").attr("value",e.columnidx).text(e.name)}))}h.on("change",(()=>{const t=e.gene_expression.genes[e.use_gene_index];const n=e.cells.categories[parseInt(h.node().selectedIndex)-1];const o={genome:e.genome.name,getgeneboxplot:{expfile:e.gene_expression.file,chr:t.chr,start:t.start,stop:t.stop,genename:t.gene,cellfile:e.cells.file,barcodecolumnidx:e.cells.barcodecolumnidx,categorycolumnidx:parseInt(h.node().value),delimiter:e.cells.delimiter||"\t",category_customorder:n.customorder&&n.values?true:false,category_autoorder:!n.customorder?true:false,cat_values:n.values,values_count:n.values_count}};l("singlecell",o).then((t=>{if(t.error)throw t.error;e.box_plot=new c;Q(t,e,h.node().value)}))}))}U(e)}function U(e){if(e.show_zoom){const t=e.menu_output.append("div").style("display","block").text("Zoom").style("margin","10px 5px 5px 5px").style("padding-top","10px").style("border-top","1px solid #929292");const n=t.append("div").style("margin-left","10px").style("display","inline-block").style("padding-left","0px").style("padding-right","2px").style("float","right").style("font-size",".6em").text("MOVE TO CONFIG").on("click",(()=>{t.node().remove();e.show_zoom=false})).on("mouseover",(()=>{n.style("text-decoration","underline")})).on("mouseout",(()=>{n.style("text-decoration","none")}));e.zoom_slider=t.append("input").style("display","block").style("padding","5px").attr("type","range").attr("min",1).attr("max",100).attr("value",e.camera.fov).style("direction","rtl").on("change",(()=>{e.camera.fov=parseInt(e.zoom_slider.node().value);e.camera.updateProjectionMatrix()})).on("mousedown",(e=>{e.stopPropagation()}))}}function J(e){e.menu.clear().showunder(e.menu_button.node());if(e.cells.categories){e.cells.categories.forEach(((t,n)=>{if(n!=e.use_category_index){e.menu.d.append("div").text(t.name).attr("class","sja_menuoption").on("click",(async()=>{e.menu.hide();e.use_category_index=n;B(e)})).append("span").attr("font-family",p).style("display",t.values_count?"inline-block":"none").style("font-size",".8em").style("float","right").style("color","#777").style("padding","3px 5px").html(t.values_count?" n="+t.values_count:"")}}))}if(e.gene_expression){e.menu.d.append("div").text("Gene expression").attr("class","sja_menuoption").on("click",(()=>{e.menu.clear();const t=e.menu.d.append("div").style("padding","10px");u({div:t.append("div"),resultdiv:t.append("div"),genome:e.genome.name,callback:async t=>{const n=await g(e.genome.name,t);if(n&&n[0]){const o=n[0];if(!e.gene_expression.genes)e.gene_expression.genes=[];const a=e.gene_expression.genes.findIndex((e=>e.gene==t));if(a==-1){e.gene_expression.genes.push({gene:t,chr:o.chr,start:o.start,stop:o.stop});e.use_gene_index=e.gene_expression.genes.length-1}else{e.use_gene_index=a}}e.use_category_index=null;e.menu.hide();B(e)}})}));e.menu.d.append("div").text("Multi-Gene Heatmap").attr("class","sja_menuoption").on("click",(()=>{K(e)}));if(e.gene_expression.genes){if(e.gene_expression.genes.length>1){e.menu.d.append("div").style("padding","5px 10px").text("Previously Selected")}e.gene_expression.genes.forEach(((t,n)=>{if(n!=e.use_gene_index){e.menu.d.append("div").text("Gene : "+t.gene).attr("class","sja_menuoption").on("click",(async()=>{e.menu.hide();e.use_category_index=null;e.use_gene_index=n;B(e)}))}}))}}}function $(e){e.settings.clear().showunder(e.settings_btn.node());const t=e.settings.d.append("div").style("display","block").text("Background Color").style("margin","5px");const n=t.append("div").style("margin","5px").style("display","block");const o=Math.random(),a=Math.random(),s=Math.random();const i=n.append("input").attr("type","radio").style("display","inline-block").attr("name",o).attr("id",a).on("change",c);n.append("label").style("display","inline-block").style("font-size",".8em").text("Black").style("padding-left","10px").attr("for",a);const r=t.append("div").style("margin","5px").style("display","block");const l=r.append("input").attr("type","radio").style("display","inline-block").attr("name",o).attr("id",s).on("change",c);r.append("label").style("display","inline-block").style("font-size",".8em").text("White").style("padding-left","10px").attr("for",s);if(e.use_background_color==0){l.property("checked",1)}else{i.property("checked",1)}function c(){const t=e.background_color=="black";e.scene.background=new THREE.Color(t?16777215:0);e.use_background_color=t?0:1;e.background_color=t?"white":"black"}const p=e.settings.d.append("div").style("display","block").text("Point Size").style("margin","20px 5px");const d=p.append("input").style("display","block").style("padding","5px").attr("type","range").attr("min",1).attr("max",70).attr("value",e.scene.children[1].material.size*100).on("change",(()=>{e.scene.children[1].material.size=d.node().value/100}));if(e.show_zoom==false){const t=e.settings.d.append("div").style("display","block").text("Zoom").style("margin","20px 5px");const n=t.append("div").style("margin-left","10px").style("display","inline-block").style("padding-left","0px").style("padding-right","2px").style("float","right").style("font-size",".6em").html("MOVE TO </br>LEGEND PANEL").on("click",(()=>{t.node().remove();e.show_zoom=true;U(e)})).on("mouseover",(()=>{n.style("text-decoration","underline")})).on("mouseout",(()=>{n.style("text-decoration","none")}));e.zoom_slider=t.append("input").style("display","block").style("padding","5px").attr("type","range").attr("min",5).attr("max",70).attr("value",e.camera.fov).style("direction","rtl").on("change",(()=>{e.camera.fov=parseInt(e.zoom_slider.node().value);e.camera.updateProjectionMatrix()}))}e.settings.d.append("div").style("margin","5px").text("Panning");e.settings.d.append("div").style("font-size",".8em").style("text-align","center").style("margin-bottom","10px").html('<p style="margin:3px;">Right mouse click </br>+ Mouse move</p>');if(!e.canvas_2d){e.settings.d.append("div").style("margin","5px").text("Rotate");e.settings.d.append("div").style("font-size",".8em").style("text-align","center").style("margin-bottom","10px").html('<p style="margin:3px;">Left mouse click </br>+ Mouse move</p>')}e.settings.d.append("div").attr("class","sja_menuoption").text("Reset view").style("width","80px").style("margin","auto").style("margin-top","15px").style("margin-bottom","15px").on("click",(()=>{l.property("checked",1);e.scene.background=new THREE.Color(e.background_color?e.background_color:16777215);d.node().value=e.point_size?e.point_size*100:e.canvas_2d?30:5;e.scene.children[1].material.size=e.point_size?e.point_size:e.canvas_2d?.3:.05;e.camera.position.z=e.data_sphere_r*3;e.camera.position.x=e.canvas_2d?0:20;e.camera.position.y=e.canvas_2d?0:-10;const t=45;e.camera.fov=parseInt(t);e.camera.updateProjectionMatrix();e.zoom_slider.node().value=t;if(e.canvas_2d){e.camera.up.set(0,1,0)}else{e.camera.up.set(0,0,1)}e.controls.target.set(e.center.x,e.center.y,e.center.z)}));const u=e.settings.d.append("div").attr("class","sja_menuoption").style("padding","5px").style("width","80px").style("margin","auto").style("margin-top","15px").style("margin-bottom","15px").html("<b>⧉</b> Capture").on("mousedown",(()=>{const t=e.renderer.domElement.toDataURL();let n=document.createElement("img");n.src=t;u.append("span").style("display","none").html('<a download="scRNA_'+(new Date).toLocaleString()+'.png" href="'+n.src+'" title="ImageName">Camera</a>')})).on("mouseup",(()=>{u.select("a").node().click();u.selectAll("span").remove()}))}function K(e){e.menu.clear();e.gene_expression.heatmap_genes=[];e.use_heatmap_category_index=null;const t=e.menu.d.append("div").style("display","block").style("padding","10px");const n=t.append("div").style("display","block");const o=n.append("div").style("display","inline-block").style("vertical-align","top").style("padding","10px");o.append("div").style("display","block").style("padding-bottom","5px").text("Add Genes");o.append("textarea").attr("rows","4").attr("cols","20").attr("placeholder","Type gene names seperated by space");const a=t.append("div");a.append("div").style("display","block").style("padding-bottom","5px").style("padding-left","10px").text("Heatmap by");const s=a.append("select").style("display","block").style("margin-left","10px");s.append("option").attr("value","none").text("-- Select--");if(e.cells.categories){e.cells.categories.forEach(((e,t)=>{s.append("option").attr("value",e.columnidx).text(e.name)}))}s.on("change",(()=>{e.use_heatmap_category_index=parseInt(s.node().value)}));t.append("button").text("Heatmap").style("display","block").style("float","right").style("margin","5px").on("click",(async()=>{const t=o.select("textarea").node().value;const n=t.split(" ");for(const t of n){const n=await g(e.genome.name,t);if(n&&n[0]){const o=n[0];if(!e.gene_expression.heatmap_genes)e.gene_expression.heatmap_genes=[];const a=e.gene_expression.heatmap_genes.findIndex((e=>e.gene==t));if(a==-1){e.gene_expression.heatmap_genes.push({gene:t,chr:o.chr,start:o.start,stop:o.stop})}}}const a={genome:e.genome.name,getheatmap:{expfile:e.gene_expression.file,gene_list:e.gene_expression.heatmap_genes,cellfile:e.cells.file,barcodecolumnidx:e.cells.barcodecolumnidx,categorycolumnidx:parseInt(s.node().value),delimiter:e.cells.delimiter||"\t"}};l("singlecell",a).then((t=>{if(t.error)throw t.error;e.menu.hide();ee(t,e,s.node().value)}))}))}function Q(e,t,n){const o=t.gene_expression.genes[t.use_gene_index];const a=m({x:600,y:400});const s=t.cells.categories.find((e=>e.columnidx==n));a.header.text("Violinplot/Boxplot for "+o.gene+" Expression by "+s.name);const i=a.pane.append("div").style("margin","10px 10px 10px 15px");const r=a.pane.append("svg").style("margin","10px");const c=i.append("select").style("display","inline-block");c.append("option").attr("value","violin").text("Violin Plot");c.append("option").attr("value","box").text("Box Plot");c.on("change",(()=>{u()}));const p=i.append("div").style("display","inline-block").style("padding-left","15px").text("Cells without expression");const d=p.append("select").style("display","inline-block").style("margin-left","5px");d.append("option").attr("value","include").text("Include");d.append("option").attr("value","exclude").text("Exclude");d.on("change",(()=>{u()}));X(e,r);function u(){const e=t.gene_expression.genes[t.use_gene_index];const o={genome:t.genome.name,getgeneboxplot:{expfile:t.gene_expression.file,chr:e.chr,start:e.start,stop:e.stop,genename:e.gene,cellfile:t.cells.file,barcodecolumnidx:t.cells.barcodecolumnidx,categorycolumnidx:parseInt(n),delimiter:t.cells.delimiter||"\t",category_customorder:s.customorder&&s.values?true:false,category_autoorder:!s.customorder?true:false,cat_values:s.values,values_count:s.values_count}};if(d.node().value=="exclude"){o.getgeneboxplot.exclude_cells=true}l("singlecell",o).then((e=>{if(e.error)throw e.error;if(c.node().value=="box")Y(e,r);else if(c.node().value=="violin")X(e,r)}))}}function X(e,t){t.selectAll("*").remove();let n=50,o=200,a=2,s=30;const i=te(e.boxplots,t);const r=d().range([0,o]).domain([e.minexpvalue,e.maxexpvalue]);const l=d().range([n,0]).domain([0,1]);const c=e.boxplots.length*(n+a)+s;const u=o+i+20;t.transition().attr("width",u).attr("height",c);if(e.boxplots){e.boxplots.forEach(((o,c)=>{const d=t.append("g").attr("transform","translate("+i+","+(c*(n+a)+s)+")");d.append("text").text(o.category+" ("+o.numberofcells+")").attr("transform","translate(-4,"+n/2+")").attr("text-anchor","end").attr("font-size",15).attr("font-family",p).attr("dominant-baseline","central");if(o.density){const t=Math.max(...o.density);z().x((function(t,n){return r(n*e.maxexpvalue/o.density.length)})).y((function(e){return l(e/t)/2})).curve(L);const a=E().x((function(t,n){return r(n*e.maxexpvalue/o.density.length)})).y0((function(e){const o=l(e/t)/2;return n-o})).y1((function(e){return l(e/t)/2})).curve(L);d.append("path").datum(o.density).attr("class","area").attr("d",a).style("fill",o.color).style("stroke","black").style("stroke-width",.5)}}));const o=v().scale(r).ticks(5);t.append("g").attr("class","legend axis").attr("transform","translate("+i+","+(s-10)+")").call(o)}}function Y(e,t){t.selectAll("*").remove();let n=36,o=200,a=16,s=30;const i=te(e.boxplots,t);const r=d().range([0,o]).domain([e.minexpvalue,e.maxexpvalue]);d().range([n,0]).domain([0,1]);const l=e.boxplots.length*(n+a)+s;const c=o+i+20;t.transition().attr("width",c).attr("height",l);if(e.boxplots){e.boxplots.forEach(((e,o)=>{const l=t.append("g").attr("transform","translate("+i+","+(o*(n+a)+s)+")");l.append("text").text(e.category+" ("+e.numberofcells+")").attr("transform","translate(-4,"+n/2+")").attr("text-anchor","end").attr("font-size",15).attr("font-family",p).attr("dominant-baseline","central");if(e.p75){l.append("line").attr("x1",r(e.w1)).attr("y1",n/2).attr("x2",r(e.w2)).attr("y2",n/2).attr("stroke-width",2).attr("stroke","black");l.append("rect").attr("x",r(e.p25)).attr("y",0).attr("width",r(e.p75-e.p25)).attr("height",n).attr("fill",e.color);l.append("line").attr("x1",r(e.w1)).attr("y1",0).attr("x2",r(e.w1)).attr("y2",n).attr("stroke-width",2).attr("stroke","black");l.append("line").attr("x1",r(e.p50)).attr("y1",0).attr("x2",r(e.p50)).attr("y2",n).attr("stroke-width",2).attr("stroke","white");l.append("line").attr("x1",r(e.w2)).attr("y1",0).attr("x2",r(e.w2)).attr("y2",n).attr("stroke-width",2).attr("stroke","black");if(e.out){for(const t of e.out){l.append("circle").attr("cx",r(t.value)).attr("cy",n/2).attr("r",2).attr("fill","#901739")}}}}));const o=v().scale(r).ticks(5);t.append("g").attr("class","legend axis").attr("transform","translate("+i+","+(s-10)+")").call(o)}}function ee(e,t,n){const o=m({x:600,y:400});const a=t.cells.categories.find((e=>e.columnidx==n));o.header.text("Heatmap for Gene Expression by "+a.name);const s=o.pane.append("svg").style("margin","10px");let i=[];for(const t of e.gene_heatmap)i.push(t.genename);let r=[];e.gene_heatmap.forEach(((t,n)=>{e.gene_heatmap[n].heatmap.forEach((e=>{r.push(e.mean)}))}));const l=Math.max(...r);let c=[];for(const t of e.gene_heatmap[0].heatmap)c.push(t.category+" ("+t.numberofcells+")");let p=20,d=80,u=2,g=30,y=60;const x=te(e.gene_heatmap[0].heatmap,s);const f=(p+u)*c.length+g;const h=(d+u)*i.length+x+y+20;s.transition().attr("width",h).attr("height",f);const _=I().range([0,(d+u)*i.length]).domain(i).padding(.05);s.append("g").style("font-size",15).attr("transform","translate("+x+",0)").call(b(_).tickSize(0)).select(".domain").remove();const v=I().range([(p+u)*c.length,0]).domain(c).padding(.05);s.append("g").style("font-size",15).attr("transform","translate("+x+","+g+")").call(k(v).tickSize(0)).select(".domain").remove();var z=S().interpolator(w).domain([0,l]);const E=o.pane.append("div").style("position","absolute").attr("class","tooltip").style("background-color","white").style("border","solid").style("border-width","2px").style("border-radius","5px").style("padding","5px").style("opacity",0);e.gene_heatmap.forEach(((t,n)=>{e.gene_heatmap[n].heatmap.forEach(((e,n)=>{const o=s.append("g").attr("transform","translate("+x+","+g+")");o.append("rect").attr("x",_(t.genename)).attr("y",v(e.category+" ("+e.numberofcells+")")).attr("width",_.bandwidth()).attr("height",v.bandwidth()).style("fill",z(e.mean)).style("stroke-width",4).style("stroke","none").style("opacity",.8).on("mouseover",(function(t){E.transition().duration(200).style("opacity",.9);E.html("Mean Expression: "+e.mean).style("left",j(t,this)[0]+70+"px").style("top",j(t,this)[1]+20+"px")})).on("mouseout",(function(){E.transition().duration(500).style("opacity",0)}))}))}));const M=z.ticks(10).reverse();M.unshift(l.toFixed(2));const C=s.selectAll(".legend").data(M).enter().append("g").attr("class","legend").attr("transform",(function(e,t){return"translate("+(h-y)+","+(30+t*20)+")"}));C.append("rect").attr("width",20).attr("height",20).style("fill",z).style("opacity",.8);C.append("text").attr("x",26).attr("y",10).attr("dy",".35em").text(String)}function te(e,t){let n=0;for(const o of e){t.append("text").text(o.category+" ("+o.numberofcells+")").attr("font-family",p).attr("font-size",15).each((function(){n=Math.max(n,this.getBBox().width)})).remove()}return n+4}function ne(e){return new Promise(((t,n)=>{const o=document.createElement("script");o.setAttribute("src",sessionStorage.getItem("hostURL")+e);document.head.appendChild(o);o.onload=t}))}async function oe(e,t){if(!e.legendimg)return;const n=t.holder.append("div").style("margin-top","5px");t.legendimg=e.legendimg;t.legend={holder:n,legendcolor:"#7D6836"};let o=!e.foldlegend;n.append("div").text("LEGEND").attr("class","sja_clb").style("display","inline-block").style("font-size",".7em").style("color",t.legend.legendcolor).style("font-family",p).on("click",(()=>{if(o){o=false;y(a)}else{o=true;x(a)}}));const a=t.holder.append("div").style("border-top","solid 1px "+t.legend.legendcolor).style("background-color","#FCFBF7");t.legend.holder=a.append("table").style("border-spacing","15px").style("border-collapse","separate");const[s,i]=h(t,t.legendimg.name||"");const r=await f("img?file="+t.legendimg.file);if(r.error){i.text(r.error);return}let l=true;const c=i.append("img").attr("class","sja_clbb").attr("src",r.src).style("height","80px");c.on("click",(()=>{if(l){l=false;c.transition().style("height",t.legendimg.height?t.legendimg.height+"px":"auto")}else{l=true;c.transition().style("height","80px")}}))}export{A as init};
|
|
1
|
+
import{a8 as e,a3 as t,bs as n,bt as o,bu as a,$ as s,bv as i,j as r,q as l,M as c,ah as p,I as d,bw as u,bx as g,Z as m,ac as y,p as x,a7 as f}from"./app-6fb77603.js";import{l as h}from"./block.legend-93d85a6e.js";import{s as _}from"./legacy-d3-polyfill-bdb2d792.js";import{a as b,c as v,b as k}from"./axis-747c801e.js";import{p as w}from"./viridis-cc59f478.js";import{l as z}from"./line-264f8f9e.js";import{a as E}from"./area-f56e50f9.js";import{p as j}from"./pointer-c7475677.js";import"./vcf-d357ce08.js";import"./partition-db811f6b.js";import"./arc-3d6751aa.js";import"./constant-426a1483.js";import"./math-2fb199c6.js";function M(e,t,n){e=+e,t=+t,n=(a=arguments.length)<2?(t=e,e=0,1):a<3?1:+n;var o=-1,a=Math.max(0,Math.ceil((t-e)/n))|0,s=new Array(a);while(++o<a){s[o]=e+o*n}return s}function I(){var n=e().unknown(undefined),o=n.domain,a=n.range,s=0,i=1,r,l,c=false,p=0,d=0,u=.5;delete n.unknown;function g(){var e=o().length,t=i<s,n=t?i:s,g=t?s:i;r=(g-n)/Math.max(1,e-p+d*2);if(c)r=Math.floor(r);n+=(g-n-r*(e-p))*u;l=r*(1-p);if(c)n=Math.round(n),l=Math.round(l);var m=M(e).map((function(e){return n+r*e}));return a(t?m.reverse():m)}n.domain=function(e){return arguments.length?(o(e),g()):o()};n.range=function(e){return arguments.length?([s,i]=e,s=+s,i=+i,g()):[s,i]};n.rangeRound=function(e){return[s,i]=e,s=+s,i=+i,c=true,g()};n.bandwidth=function(){return l};n.step=function(){return r};n.round=function(e){return arguments.length?(c=!!e,g()):c};n.padding=function(e){return arguments.length?(p=Math.min(1,d=+e),g()):p};n.paddingInner=function(e){return arguments.length?(p=Math.min(1,e),g()):p};n.paddingOuter=function(e){return arguments.length?(d=+e,g()):d};n.align=function(e){return arguments.length?(u=Math.max(0,Math.min(1,e)),g()):u};n.copy=function(){return I(o(),[s,i]).round(c).paddingInner(p).paddingOuter(d).align(u)};return t.apply(g(),arguments)}function C(){var e=0,t=1,n,a,r,l,c=o,p=false,d;function u(e){return e==null||isNaN(e=+e)?d:c(r===0?.5:(e=(l(e)-n)*r,p?Math.max(0,Math.min(1,e)):e))}u.domain=function(o){return arguments.length?([e,t]=o,n=l(e=+e),a=l(t=+t),r=n===a?0:1/(a-n),u):[e,t]};u.clamp=function(e){return arguments.length?(p=!!e,u):p};u.interpolator=function(e){return arguments.length?(c=e,u):c};function g(e){return function(t){var n,o;return arguments.length?([n,o]=t,c=e(n,o),u):[c(0),c(1)]}}u.range=g(s);u.rangeRound=g(i);u.unknown=function(e){return arguments.length?(d=e,u):d};return function(o){l=o,n=o(e),a=o(t),r=n===a?0:1/(a-n);return u}}function N(e,t){return t.domain(e.domain()).interpolator(e.interpolator()).clamp(e.clamp()).unknown(e.unknown())}function S(){var e=n(C()(o));e.copy=function(){return N(e,S())};return a.apply(e,arguments)}function R(e){return e<0?-1:1}function T(e,t,n){var o=e._x1-e._x0,a=t-e._x1,s=(e._y1-e._y0)/(o||a<0&&-0),i=(n-e._y1)/(a||o<0&&-0),r=(s*a+i*o)/(o+a);return(R(s)+R(i))*Math.min(Math.abs(s),Math.abs(i),.5*Math.abs(r))||0}function G(e,t){var n=e._x1-e._x0;return n?(3*(e._y1-e._y0)/n-t)/2:t}function H(e,t,n){var o=e._x0,a=e._y0,s=e._x1,i=e._y1,r=(s-o)/3;e._context.bezierCurveTo(o+r,a+r*t,s-r,i-r*n,s,i)}function P(e){this._context=e}P.prototype={areaStart:function(){this._line=0},areaEnd:function(){this._line=NaN},lineStart:function(){this._x0=this._x1=this._y0=this._y1=this._t0=NaN;this._point=0},lineEnd:function(){switch(this._point){case 2:this._context.lineTo(this._x1,this._y1);break;case 3:H(this,this._t0,G(this,this._t0));break}if(this._line||this._line!==0&&this._point===1)this._context.closePath();this._line=1-this._line},point:function(e,t){var n=NaN;e=+e,t=+t;if(e===this._x1&&t===this._y1)return;switch(this._point){case 0:this._point=1;this._line?this._context.lineTo(e,t):this._context.moveTo(e,t);break;case 1:this._point=2;break;case 2:this._point=3;H(this,G(this,n=T(this,e,t)),n);break;default:H(this,this._t0,n=T(this,e,t));break}this._x0=this._x1,this._x1=e;this._y0=this._y1,this._y1=t;this._t0=n}};Object.create(P.prototype).point=function(e,t){P.prototype.point.call(this,t,e)};function L(e){return new P(e)}async function A(e,t){try{const n=await D(e);O(n);n.genome=e.genome;n.holder=t.style("position","relative");await F(n);Z(n);await B(n);oe(e,n)}catch(e){r(t,e.message||e)}}async function D(e){if(!e.jsonfile)throw".jsonfile missing";const t=await l("textfile",{file:e.jsonfile});if(t.error)throw t.error;return JSON.parse(t.text)}function O(t){if(!t.cells)throw".cells{} missing";if(!t.cells.file)throw".cells.file missing";if(!t.cells.axis2columnidx)throw".cells.axis2columnidx missing";if(t.cells.categories){if(!Array.isArray(t.cells.categories))throw".cells.categories should be an array";if(t.cells.categories.length==0)throw".cells.categories[] is empty array";for(const n of t.cells.categories){if(!Number.isInteger(n.columnidx))throw"columnidx missing from category "+n;if(n.autocolor){n.autocolor=e(_)}}if(!Number.isInteger(t.use_category_index)){t.use_category_index=0}if(!t.cells.categories[t.use_category_index])throw"use_category_index out of bound";if(!t.cells.categories[t.use_category_index].hidden_types)t.cells.categories[t.use_category_index].hidden_types=[]}if(t.gene_expression){if(!t.gene_expression.file)throw".gene_expression.file missing";if(!Number.isInteger(t.cells.barcodecolumnidx))throw".gene_expression in use but .cells.barcodecolumnidx is missing"}if(!t.width)t.width=window.innerWidth*.9;if(!t.height)t.height=window.innerHeight*.9}async function B(e){if(Number.isInteger(e.use_category_index)){if(!e.cells.categories[e.use_category_index].hidden_types)e.cells.categories[e.use_category_index].hidden_types=[]}const t=await W(e);e.data_sphere_r=t.data_sphere_r;if(!e.camera.position.z){e.camera.position.z=e.data_sphere_r*3;e.controls.maxDistance=e.data_sphere_r*4;e.controls.minDistance=e.data_sphere_r/10}const n=new TextEncoder;const o=n.encode(t.pcddata).buffer;V(e,o);q(e,t);a();function a(){requestAnimationFrame(a);e.controls.update();e.renderer.render(e.scene,e.camera)}}async function W(e){const t=e.holder.append("div").style("position","absolute").style("top",0).style("left",0).style("padding","10px").style("font-size","1.5rem").text("Loading data...");const n={genome:e.genome.name,textfile:e.cells.file,delimiter:e.cells.delimiter||"\t",getpcd:{coord:e.cells.axis2columnidx}};if(Number.isInteger(e.use_category_index)){if(!e.cells.categories)throw"using category index but cells.categories[] missing";const t=e.cells.categories[e.use_category_index];if(!t)throw"category array index out of bound";n.getpcd.category_index=t.columnidx;if(t.autocolor){n.getpcd.category_autocolor=true;if(t.values_count)n.getpcd.values_count=t.values_count}else if(t.values){n.getpcd.category_customcolor=true;n.getpcd.cat_values=t.values}else{if(!t.autocolor&&!t.values)throw"categories.values[] are not defined";throw"unknow coloring scheme for category "+t.name}if(t.hidden_types){n.hidden_types=t.hidden_types}if(e.background_color){n.background_color=e.background_color}if(!t.customorder){n.getpcd.category_autoorder=true}else if(t.customorder&&t.values){n.getpcd.category_customorder=true;n.getpcd.cat_values=t.values}else{if(t.customorder&&!t.values)throw"categories.values[] are not defined";throw"unknow ordering scheme for category "+t.name}e.menu_button.html(t.name+" ▼")}else if(Number.isInteger(e.use_gene_index)){const t=e.gene_expression.genes[e.use_gene_index];e.menu_button.html("Gene : "+t.gene+" ▼");n.getpcd.gene_expression={file:e.gene_expression.file,barcodecolumnidx:e.cells.barcodecolumnidx,chr:t.chr,start:t.start,stop:t.stop,autoscale:true,genename:t.gene,color_min:e.gene_expression.color_min,color_max:e.gene_expression.color_max};if(e.gene_expression.color_no_exp)n.getpcd.gene_expression.color_no_exp=e.gene_expression.color_no_exp}else{throw"unknown method to color the cells"}return l("singlecell",n).then((e=>{if(e.error)throw e.error;t.remove();return e}))}async function F(e){await ne("/static/js/three.js");await ne("/static/js/loaders/PCDLoader.js");await ne("/static/js/controls/TrackballControls.js");await ne("/static/js/WebGL.js");if(WEBGL.isWebGLAvailable()===false){e.holder.node().appendChild(WEBGL.getWebGLErrorMessage());return}e.scene=new THREE.Scene;if(e.background_color){e.scene.background=new THREE.Color(e.background_color)}else{e.scene.background=new THREE.Color(16777215)}const t=e.default_zoom?100-e.default_zoom:45;e.camera=new THREE.PerspectiveCamera(t,e.width/e.height,.1,1e3);e.camera.position.x=e.canvas_2d?0:20;e.camera.position.y=e.canvas_2d?0:-10;if(e.canvas_2d){e.camera.up.set(0,1,0)}else{e.camera.up.set(0,0,1)}e.controls=new THREE.TrackballControls(e.camera);e.controls.rotateSpeed=e.canvas_2d?0:2;e.controls.zoomSpeed=e.canvas_2d?3:.7;e.controls.panSpeed=e.canvas_2d?3:.7;e.controls.noZoom=true;e.controls.noPan=false;e.controls.staticMoving=true;e.controls.dynamicDampingFactor=.3;e.scene.add(e.camera);e.renderer=new THREE.WebGLRenderer({antialias:true,preserveDrawingBuffer:true});e.renderer.setPixelRatio(window.devicePixelRatio);e.renderer.setSize(e.width,e.height);e.renderer.domElement.style.backgroundColor="#ffffff";e.renderer.domElement.style.border="solid #dddddd 2px";e.holder.style("display","inline-block").style("position","relative").node().appendChild(e.renderer.domElement);e.renderer.render(e.scene,e.camera)}function V(e,t){e.scene.children.forEach((function(t,n){if(t.material){t.material.dispose();t.geometry.dispose();e.scene.remove(t)}}));const n=new THREE.PCDLoader;const o=n.parse(t,"");if(e.point_size){o.material.size=e.point_size}else{o.material.size=e.canvas_2d?.3:.05}e.scene.add(o);e.center=o.geometry.boundingSphere.center;e.controls.target.set(e.center.x,e.center.y,e.center.z);e.controls.update()}function Z(e){e.menu=new c;e.menu.d.style("padding","3px");e.settings=new c;e.settings.d.style("padding","3px");const t=e.holder.append("div").style("padding","10px").style("position","absolute").style("border-radius","5px").style("top","20px").style("right","20px").style("background-color","#dddddd");e.menu_button=t.append("button").style("display","inline-block").style("padding","4px").on("click",(()=>J(e)));const n=e.minimize_btn=t.append("div").style("margin-left","10px").style("display","inline-block").style("padding-left","0px").style("padding-right","2px").style("float","right").style("font-size",".6em").classed("active",e.menu_minimized?true:false).text(e.menu_minimized?" SHOW":" HIDE").on("click",(()=>{e.minimize_btn.classed("active",e.minimize_btn.classed("active")?false:true);if(e.minimize_btn.classed("active")){e.minimize_btn.text(" SHOW");e.menu_output.style("display","none")}else{e.minimize_btn.text(" HIDE");e.menu_output.style("display","block")}})).on("mouseover",(()=>{n.style("text-decoration","underline")})).on("mouseout",(()=>{n.style("text-decoration","none")}));e.use_background_color=0;const o=e.settings_btn=t.append("div").style("margin-left","10px").style("display","inline-block").style("padding-left","3px").style("padding-right","3px").style("float","right").style("font-size",".6em").text("CONFIG").on("click",(()=>$(e))).on("mouseover",(()=>{o.style("text-decoration","underline")})).on("mouseout",(()=>{o.style("text-decoration","none")}));e.menu_output=t.append("div").style("margin-top","10px").style("display",e.menu_minimized?"none":"block");e.show_zoom=true}function q(e,t){e.menu_output.selectAll("*").remove();if(t.category2color){const n=e.menu_output.append("div").style("margin","2px");const o=n.append("input").attr("type","checkbox").style("margin-right","10px").style("vertical-align","top").style("display","inline-block").on("change",(()=>{if(o.node().checked){e.cells.categories[e.use_category_index].hidden_types=[];B(e)}else{for(const n in t.category2color){e.cells.categories[e.use_category_index].hidden_types.push(n)}B(e)}}));if(e.cells.categories[e.use_category_index].hidden_types.length==0){o.property("checked",1)}n.append("span").text("Select All").style("font-size",".8em").attr("font-family",p);for(const n in t.category2color){const o=e.menu_output.append("div").style("margin","2px");const a=o.append("input").attr("type","checkbox").property("checked",1).style("margin-right","10px").style("vertical-align","top").style("display","inline-block").on("change",(()=>{if(e.cells.categories[e.use_category_index].hidden_types.includes(n)){const t=e.cells.categories[e.use_category_index].hidden_types.indexOf(n);if(t!==-1)e.cells.categories[e.use_category_index].hidden_types.splice(t,1);a.property("checked",1)}else{e.cells.categories[e.use_category_index].hidden_types.push(n)}B(e)}));if(e.cells.categories[e.use_category_index].hidden_types.includes(n)){a.property("checked",0)}o.append("div").style("display","inline-block").style("height","15px").style("width","15px").style("background-color",t.category2color[n]).style("margin-right","10px");o.append("span").text(n).attr("font-family",p);o.append("span").html(" n="+t.categorycount[n]).attr("font-family",p).style("font-size",".8em").style("float","right").style("color","#777")}}else if(t.maxexpvalue){const n=30;const o=150;const a=e.menu_output.append("div").style("margin","10px").style("width","120px").style("height","100px");a.append("div").text("Gene Expression "+e.gene_expression.datatype).style("text-align","center").style("width","150px").style("margin-bottom","20px");const s=a.append("svg").append("g");const i=[e.gene_expression.color_max,e.gene_expression.color_min];const r=d().range(i).domain([t.minexpvalue,t.maxexpvalue]);const p=s.append("defs");const u=p.append("linearGradient").attr("id","linear-gradient");u.append("stop").attr("offset","0%").attr("stop-color",r(t.maxexpvalue));u.append("stop").attr("offset","100%").attr("stop-color",r(t.minexpvalue));s.append("rect").attr("x",0).attr("y",0).attr("width",o).attr("height",n).attr("transform","translate(12, 0)").style("fill","url(#linear-gradient)");const g=d().range([0,o]).domain([t.minexpvalue,t.maxexpvalue]);const m=b().scale(g).ticks(5);s.append("g").attr("class","legend axis").attr("transform","translate(12,"+n+")").call(m);const y=e.menu_output.append("div").style("padding-bottom","20px").style("text-align","center");y.append("p").style("font-size","13px").style("margin","2px 0").html("<b>Cells with Expression Data</b> ");y.append("p").style("font-size","13px").style("margin","2px 0").html(t.numbercellwithgeneexp+" / "+t.numbercelltotal);const x=y.append("div").style("display","block").style("margin-top","10px");x.append("div").style("display","inline-block").style("height","15px").style("width","15px").style("background-color",e.gene_expression.color_no_exp?e.gene_expression.color_no_exp:"#2C2C2C").style("margin-right","10px");x.append("div").style("display","inline-block").style("font-size","13px").html(" Cells without Expression");const f=e.menu_output.append("div");f.append("div").style("display","block").style("padding","5px").html("Violinplot / Boxplot of </br> Expression by");const h=f.append("select").style("display","block");h.append("option").attr("value","none").text("-- Select--");if(e.cells.categories){e.cells.categories.forEach(((e,t)=>{h.append("option").attr("value",e.columnidx).text(e.name)}))}h.on("change",(()=>{const t=e.gene_expression.genes[e.use_gene_index];const n=e.cells.categories[parseInt(h.node().selectedIndex)-1];const o={genome:e.genome.name,getgeneboxplot:{expfile:e.gene_expression.file,chr:t.chr,start:t.start,stop:t.stop,genename:t.gene,cellfile:e.cells.file,barcodecolumnidx:e.cells.barcodecolumnidx,categorycolumnidx:parseInt(h.node().value),delimiter:e.cells.delimiter||"\t",category_customorder:n.customorder&&n.values?true:false,category_autoorder:!n.customorder?true:false,cat_values:n.values,values_count:n.values_count}};l("singlecell",o).then((t=>{if(t.error)throw t.error;e.box_plot=new c;Q(t,e,h.node().value)}))}))}U(e)}function U(e){if(e.show_zoom){const t=e.menu_output.append("div").style("display","block").text("Zoom").style("margin","10px 5px 5px 5px").style("padding-top","10px").style("border-top","1px solid #929292");const n=t.append("div").style("margin-left","10px").style("display","inline-block").style("padding-left","0px").style("padding-right","2px").style("float","right").style("font-size",".6em").text("MOVE TO CONFIG").on("click",(()=>{t.node().remove();e.show_zoom=false})).on("mouseover",(()=>{n.style("text-decoration","underline")})).on("mouseout",(()=>{n.style("text-decoration","none")}));e.zoom_slider=t.append("input").style("display","block").style("padding","5px").attr("type","range").attr("min",1).attr("max",100).attr("value",e.camera.fov).style("direction","rtl").on("change",(()=>{e.camera.fov=parseInt(e.zoom_slider.node().value);e.camera.updateProjectionMatrix()})).on("mousedown",(e=>{e.stopPropagation()}))}}function J(e){e.menu.clear().showunder(e.menu_button.node());if(e.cells.categories){e.cells.categories.forEach(((t,n)=>{if(n!=e.use_category_index){e.menu.d.append("div").text(t.name).attr("class","sja_menuoption").on("click",(async()=>{e.menu.hide();e.use_category_index=n;B(e)})).append("span").attr("font-family",p).style("display",t.values_count?"inline-block":"none").style("font-size",".8em").style("float","right").style("color","#777").style("padding","3px 5px").html(t.values_count?" n="+t.values_count:"")}}))}if(e.gene_expression){e.menu.d.append("div").text("Gene expression").attr("class","sja_menuoption").on("click",(()=>{e.menu.clear();const t=e.menu.d.append("div").style("padding","10px");u({div:t.append("div"),resultdiv:t.append("div"),genome:e.genome.name,callback:async t=>{const n=await g(e.genome.name,t);if(n&&n[0]){const o=n[0];if(!e.gene_expression.genes)e.gene_expression.genes=[];const a=e.gene_expression.genes.findIndex((e=>e.gene==t));if(a==-1){e.gene_expression.genes.push({gene:t,chr:o.chr,start:o.start,stop:o.stop});e.use_gene_index=e.gene_expression.genes.length-1}else{e.use_gene_index=a}}e.use_category_index=null;e.menu.hide();B(e)}})}));e.menu.d.append("div").text("Multi-Gene Heatmap").attr("class","sja_menuoption").on("click",(()=>{K(e)}));if(e.gene_expression.genes){if(e.gene_expression.genes.length>1){e.menu.d.append("div").style("padding","5px 10px").text("Previously Selected")}e.gene_expression.genes.forEach(((t,n)=>{if(n!=e.use_gene_index){e.menu.d.append("div").text("Gene : "+t.gene).attr("class","sja_menuoption").on("click",(async()=>{e.menu.hide();e.use_category_index=null;e.use_gene_index=n;B(e)}))}}))}}}function $(e){e.settings.clear().showunder(e.settings_btn.node());const t=e.settings.d.append("div").style("display","block").text("Background Color").style("margin","5px");const n=t.append("div").style("margin","5px").style("display","block");const o=Math.random(),a=Math.random(),s=Math.random();const i=n.append("input").attr("type","radio").style("display","inline-block").attr("name",o).attr("id",a).on("change",c);n.append("label").style("display","inline-block").style("font-size",".8em").text("Black").style("padding-left","10px").attr("for",a);const r=t.append("div").style("margin","5px").style("display","block");const l=r.append("input").attr("type","radio").style("display","inline-block").attr("name",o).attr("id",s).on("change",c);r.append("label").style("display","inline-block").style("font-size",".8em").text("White").style("padding-left","10px").attr("for",s);if(e.use_background_color==0){l.property("checked",1)}else{i.property("checked",1)}function c(){const t=e.background_color=="black";e.scene.background=new THREE.Color(t?16777215:0);e.use_background_color=t?0:1;e.background_color=t?"white":"black"}const p=e.settings.d.append("div").style("display","block").text("Point Size").style("margin","20px 5px");const d=p.append("input").style("display","block").style("padding","5px").attr("type","range").attr("min",1).attr("max",70).attr("value",e.scene.children[1].material.size*100).on("change",(()=>{e.scene.children[1].material.size=d.node().value/100}));if(e.show_zoom==false){const t=e.settings.d.append("div").style("display","block").text("Zoom").style("margin","20px 5px");const n=t.append("div").style("margin-left","10px").style("display","inline-block").style("padding-left","0px").style("padding-right","2px").style("float","right").style("font-size",".6em").html("MOVE TO </br>LEGEND PANEL").on("click",(()=>{t.node().remove();e.show_zoom=true;U(e)})).on("mouseover",(()=>{n.style("text-decoration","underline")})).on("mouseout",(()=>{n.style("text-decoration","none")}));e.zoom_slider=t.append("input").style("display","block").style("padding","5px").attr("type","range").attr("min",5).attr("max",70).attr("value",e.camera.fov).style("direction","rtl").on("change",(()=>{e.camera.fov=parseInt(e.zoom_slider.node().value);e.camera.updateProjectionMatrix()}))}e.settings.d.append("div").style("margin","5px").text("Panning");e.settings.d.append("div").style("font-size",".8em").style("text-align","center").style("margin-bottom","10px").html('<p style="margin:3px;">Right mouse click </br>+ Mouse move</p>');if(!e.canvas_2d){e.settings.d.append("div").style("margin","5px").text("Rotate");e.settings.d.append("div").style("font-size",".8em").style("text-align","center").style("margin-bottom","10px").html('<p style="margin:3px;">Left mouse click </br>+ Mouse move</p>')}e.settings.d.append("div").attr("class","sja_menuoption").text("Reset view").style("width","80px").style("margin","auto").style("margin-top","15px").style("margin-bottom","15px").on("click",(()=>{l.property("checked",1);e.scene.background=new THREE.Color(e.background_color?e.background_color:16777215);d.node().value=e.point_size?e.point_size*100:e.canvas_2d?30:5;e.scene.children[1].material.size=e.point_size?e.point_size:e.canvas_2d?.3:.05;e.camera.position.z=e.data_sphere_r*3;e.camera.position.x=e.canvas_2d?0:20;e.camera.position.y=e.canvas_2d?0:-10;const t=45;e.camera.fov=parseInt(t);e.camera.updateProjectionMatrix();e.zoom_slider.node().value=t;if(e.canvas_2d){e.camera.up.set(0,1,0)}else{e.camera.up.set(0,0,1)}e.controls.target.set(e.center.x,e.center.y,e.center.z)}));const u=e.settings.d.append("div").attr("class","sja_menuoption").style("padding","5px").style("width","80px").style("margin","auto").style("margin-top","15px").style("margin-bottom","15px").html("<b>⧉</b> Capture").on("mousedown",(()=>{const t=e.renderer.domElement.toDataURL();let n=document.createElement("img");n.src=t;u.append("span").style("display","none").html('<a download="scRNA_'+(new Date).toLocaleString()+'.png" href="'+n.src+'" title="ImageName">Camera</a>')})).on("mouseup",(()=>{u.select("a").node().click();u.selectAll("span").remove()}))}function K(e){e.menu.clear();e.gene_expression.heatmap_genes=[];e.use_heatmap_category_index=null;const t=e.menu.d.append("div").style("display","block").style("padding","10px");const n=t.append("div").style("display","block");const o=n.append("div").style("display","inline-block").style("vertical-align","top").style("padding","10px");o.append("div").style("display","block").style("padding-bottom","5px").text("Add Genes");o.append("textarea").attr("rows","4").attr("cols","20").attr("placeholder","Type gene names seperated by space");const a=t.append("div");a.append("div").style("display","block").style("padding-bottom","5px").style("padding-left","10px").text("Heatmap by");const s=a.append("select").style("display","block").style("margin-left","10px");s.append("option").attr("value","none").text("-- Select--");if(e.cells.categories){e.cells.categories.forEach(((e,t)=>{s.append("option").attr("value",e.columnidx).text(e.name)}))}s.on("change",(()=>{e.use_heatmap_category_index=parseInt(s.node().value)}));t.append("button").text("Heatmap").style("display","block").style("float","right").style("margin","5px").on("click",(async()=>{const t=o.select("textarea").node().value;const n=t.split(" ");for(const t of n){const n=await g(e.genome.name,t);if(n&&n[0]){const o=n[0];if(!e.gene_expression.heatmap_genes)e.gene_expression.heatmap_genes=[];const a=e.gene_expression.heatmap_genes.findIndex((e=>e.gene==t));if(a==-1){e.gene_expression.heatmap_genes.push({gene:t,chr:o.chr,start:o.start,stop:o.stop})}}}const a={genome:e.genome.name,getheatmap:{expfile:e.gene_expression.file,gene_list:e.gene_expression.heatmap_genes,cellfile:e.cells.file,barcodecolumnidx:e.cells.barcodecolumnidx,categorycolumnidx:parseInt(s.node().value),delimiter:e.cells.delimiter||"\t"}};l("singlecell",a).then((t=>{if(t.error)throw t.error;e.menu.hide();ee(t,e,s.node().value)}))}))}function Q(e,t,n){const o=t.gene_expression.genes[t.use_gene_index];const a=m({x:600,y:400});const s=t.cells.categories.find((e=>e.columnidx==n));a.header.text("Violinplot/Boxplot for "+o.gene+" Expression by "+s.name);const i=a.pane.append("div").style("margin","10px 10px 10px 15px");const r=a.pane.append("svg").style("margin","10px");const c=i.append("select").style("display","inline-block");c.append("option").attr("value","violin").text("Violin Plot");c.append("option").attr("value","box").text("Box Plot");c.on("change",(()=>{u()}));const p=i.append("div").style("display","inline-block").style("padding-left","15px").text("Cells without expression");const d=p.append("select").style("display","inline-block").style("margin-left","5px");d.append("option").attr("value","include").text("Include");d.append("option").attr("value","exclude").text("Exclude");d.on("change",(()=>{u()}));X(e,r);function u(){const e=t.gene_expression.genes[t.use_gene_index];const o={genome:t.genome.name,getgeneboxplot:{expfile:t.gene_expression.file,chr:e.chr,start:e.start,stop:e.stop,genename:e.gene,cellfile:t.cells.file,barcodecolumnidx:t.cells.barcodecolumnidx,categorycolumnidx:parseInt(n),delimiter:t.cells.delimiter||"\t",category_customorder:s.customorder&&s.values?true:false,category_autoorder:!s.customorder?true:false,cat_values:s.values,values_count:s.values_count}};if(d.node().value=="exclude"){o.getgeneboxplot.exclude_cells=true}l("singlecell",o).then((e=>{if(e.error)throw e.error;if(c.node().value=="box")Y(e,r);else if(c.node().value=="violin")X(e,r)}))}}function X(e,t){t.selectAll("*").remove();let n=50,o=200,a=2,s=30;const i=te(e.boxplots,t);const r=d().range([0,o]).domain([e.minexpvalue,e.maxexpvalue]);const l=d().range([n,0]).domain([0,1]);const c=e.boxplots.length*(n+a)+s;const u=o+i+20;t.transition().attr("width",u).attr("height",c);if(e.boxplots){e.boxplots.forEach(((o,c)=>{const d=t.append("g").attr("transform","translate("+i+","+(c*(n+a)+s)+")");d.append("text").text(o.category+" ("+o.numberofcells+")").attr("transform","translate(-4,"+n/2+")").attr("text-anchor","end").attr("font-size",15).attr("font-family",p).attr("dominant-baseline","central");if(o.density){const t=Math.max(...o.density);z().x((function(t,n){return r(n*e.maxexpvalue/o.density.length)})).y((function(e){return l(e/t)/2})).curve(L);const a=E().x((function(t,n){return r(n*e.maxexpvalue/o.density.length)})).y0((function(e){const o=l(e/t)/2;return n-o})).y1((function(e){return l(e/t)/2})).curve(L);d.append("path").datum(o.density).attr("class","area").attr("d",a).style("fill",o.color).style("stroke","black").style("stroke-width",.5)}}));const o=v().scale(r).ticks(5);t.append("g").attr("class","legend axis").attr("transform","translate("+i+","+(s-10)+")").call(o)}}function Y(e,t){t.selectAll("*").remove();let n=36,o=200,a=16,s=30;const i=te(e.boxplots,t);const r=d().range([0,o]).domain([e.minexpvalue,e.maxexpvalue]);d().range([n,0]).domain([0,1]);const l=e.boxplots.length*(n+a)+s;const c=o+i+20;t.transition().attr("width",c).attr("height",l);if(e.boxplots){e.boxplots.forEach(((e,o)=>{const l=t.append("g").attr("transform","translate("+i+","+(o*(n+a)+s)+")");l.append("text").text(e.category+" ("+e.numberofcells+")").attr("transform","translate(-4,"+n/2+")").attr("text-anchor","end").attr("font-size",15).attr("font-family",p).attr("dominant-baseline","central");if(e.p75){l.append("line").attr("x1",r(e.w1)).attr("y1",n/2).attr("x2",r(e.w2)).attr("y2",n/2).attr("stroke-width",2).attr("stroke","black");l.append("rect").attr("x",r(e.p25)).attr("y",0).attr("width",r(e.p75-e.p25)).attr("height",n).attr("fill",e.color);l.append("line").attr("x1",r(e.w1)).attr("y1",0).attr("x2",r(e.w1)).attr("y2",n).attr("stroke-width",2).attr("stroke","black");l.append("line").attr("x1",r(e.p50)).attr("y1",0).attr("x2",r(e.p50)).attr("y2",n).attr("stroke-width",2).attr("stroke","white");l.append("line").attr("x1",r(e.w2)).attr("y1",0).attr("x2",r(e.w2)).attr("y2",n).attr("stroke-width",2).attr("stroke","black");if(e.out){for(const t of e.out){l.append("circle").attr("cx",r(t.value)).attr("cy",n/2).attr("r",2).attr("fill","#901739")}}}}));const o=v().scale(r).ticks(5);t.append("g").attr("class","legend axis").attr("transform","translate("+i+","+(s-10)+")").call(o)}}function ee(e,t,n){const o=m({x:600,y:400});const a=t.cells.categories.find((e=>e.columnidx==n));o.header.text("Heatmap for Gene Expression by "+a.name);const s=o.pane.append("svg").style("margin","10px");let i=[];for(const t of e.gene_heatmap)i.push(t.genename);let r=[];e.gene_heatmap.forEach(((t,n)=>{e.gene_heatmap[n].heatmap.forEach((e=>{r.push(e.mean)}))}));const l=Math.max(...r);let c=[];for(const t of e.gene_heatmap[0].heatmap)c.push(t.category+" ("+t.numberofcells+")");let p=20,d=80,u=2,g=30,y=60;const x=te(e.gene_heatmap[0].heatmap,s);const f=(p+u)*c.length+g;const h=(d+u)*i.length+x+y+20;s.transition().attr("width",h).attr("height",f);const _=I().range([0,(d+u)*i.length]).domain(i).padding(.05);s.append("g").style("font-size",15).attr("transform","translate("+x+",0)").call(b(_).tickSize(0)).select(".domain").remove();const v=I().range([(p+u)*c.length,0]).domain(c).padding(.05);s.append("g").style("font-size",15).attr("transform","translate("+x+","+g+")").call(k(v).tickSize(0)).select(".domain").remove();var z=S().interpolator(w).domain([0,l]);const E=o.pane.append("div").style("position","absolute").attr("class","tooltip").style("background-color","white").style("border","solid").style("border-width","2px").style("border-radius","5px").style("padding","5px").style("opacity",0);e.gene_heatmap.forEach(((t,n)=>{e.gene_heatmap[n].heatmap.forEach(((e,n)=>{const o=s.append("g").attr("transform","translate("+x+","+g+")");o.append("rect").attr("x",_(t.genename)).attr("y",v(e.category+" ("+e.numberofcells+")")).attr("width",_.bandwidth()).attr("height",v.bandwidth()).style("fill",z(e.mean)).style("stroke-width",4).style("stroke","none").style("opacity",.8).on("mouseover",(function(t){E.transition().duration(200).style("opacity",.9);E.html("Mean Expression: "+e.mean).style("left",j(t,this)[0]+70+"px").style("top",j(t,this)[1]+20+"px")})).on("mouseout",(function(){E.transition().duration(500).style("opacity",0)}))}))}));const M=z.ticks(10).reverse();M.unshift(l.toFixed(2));const C=s.selectAll(".legend").data(M).enter().append("g").attr("class","legend").attr("transform",(function(e,t){return"translate("+(h-y)+","+(30+t*20)+")"}));C.append("rect").attr("width",20).attr("height",20).style("fill",z).style("opacity",.8);C.append("text").attr("x",26).attr("y",10).attr("dy",".35em").text(String)}function te(e,t){let n=0;for(const o of e){t.append("text").text(o.category+" ("+o.numberofcells+")").attr("font-family",p).attr("font-size",15).each((function(){n=Math.max(n,this.getBBox().width)})).remove()}return n+4}function ne(e){return new Promise(((t,n)=>{const o=document.createElement("script");o.setAttribute("src",sessionStorage.getItem("hostURL")+e);document.head.appendChild(o);o.onload=t}))}async function oe(e,t){if(!e.legendimg)return;const n=t.holder.append("div").style("margin-top","5px");t.legendimg=e.legendimg;t.legend={holder:n,legendcolor:"#7D6836"};let o=!e.foldlegend;n.append("div").text("LEGEND").attr("class","sja_clb").style("display","inline-block").style("font-size",".7em").style("color",t.legend.legendcolor).style("font-family",p).on("click",(()=>{if(o){o=false;y(a)}else{o=true;x(a)}}));const a=t.holder.append("div").style("border-top","solid 1px "+t.legend.legendcolor).style("background-color","#FCFBF7");t.legend.holder=a.append("table").style("border-spacing","15px").style("border-collapse","separate");const[s,i]=h(t,t.legendimg.name||"");const r=await f("img?file="+t.legendimg.file);if(r.error){i.text(r.error);return}let l=true;const c=i.append("img").attr("class","sja_clbb").attr("src",r.src).style("height","80px");c.on("click",(()=>{if(l){l=false;c.transition().style("height",t.legendimg.height?t.legendimg.height+"px":"auto")}else{l=true;c.transition().style("height","80px")}}))}export{A as init};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as t}from"./tslib.es6-c3c2d88f.js";import{getHandler as e}from"./categorical-
|
|
1
|
+
import{_ as t}from"./tslib.es6-c3c2d88f.js";import{getHandler as e}from"./categorical-1dea48ba.js";import{P as r}from"./app-6fb77603.js";import{s as i}from"./termsetting-492eefa7.js";import"./groupsetting-e3a4ecd5.js";import"path";function o(r){return t(this,void 0,void 0,(function*(){return e(r)}))}function s(e,o,s=null){return t(this,void 0,void 0,(function*(){if(typeof e.term!=="object")throw"tw.term is not an object";if(!e.term.id||!e.term.name)throw"missing snp id/name";if(!e.term.chr||!Number.isInteger(e.term.start)||!Number.isInteger(e.term.stop))throw"incomplete position information";if(!e.term.ref||!e.term.alt);if(!Object.keys(e.q).includes("type"))e.q.type="values";if(!e.term.groupsetting)e.term.groupsetting={disabled:false};if(e.q.type=="predefined-groupset"){if(!Number.isInteger(e.q.predefined_groupset_idx))throw"predefined_groupset_idx is not an integer"}if(e.q.type=="custom-groupset"){if(!e.q.customset)throw"invalid customset"}if(s){r(e.q,s)}i(e.q,e.term)}))}export{s as fillTW,o as getHandler};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{_ as s}from"./tslib.es6-c3c2d88f.js";import{M as t}from"./app-6fb77603.js";import{a as o}from"./genesearch-ffd88bf2.js";class r{init(s){this.callback=s.callback;const r=o({tip:new t({padding:"0px"}),genome:s.genomeObj,row:s.holder,searchOnly:"snp",allowVariant:true,callback:()=>this.selectSnp(r)})}selectSnp(t){return s(this,void 0,void 0,(function*(){const{chr:s,ref:o,alt:r,fromWhat:a}=t;if(!s||!o||!r||!a)throw"missing chr, ref, alt, or fromWhat of snp";let e,i;if(!t.start&&!t.stop){if(t.pos){e=t.pos-1;i=t.pos}else{throw"missing coordinate of snp"}}else{e=t.start;i=t.stop}const n={id:a,chr:s,start:e,stop:i,name:a,ref:o,alt:typeof r=="string"?[r]:r,type:"snp"};this.callback(n)}))}}export{r as SearchHandler};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{_ as t}from"./tslib.es6-c3c2d88f.js";import{mayRestrictAncestry as e,makeSnpSelect as i}from"./snplst-6865d7c7.js";import{f as r}from"./FilterStateless-
|
|
1
|
+
import{_ as t}from"./tslib.es6-c3c2d88f.js";import{mayRestrictAncestry as e,makeSnpSelect as i}from"./snplst-6865d7c7.js";import{f as r}from"./FilterStateless-16a33070.js";import{g as n}from"./FilterRxComp-02e68f1b.js";import"./termsetting-492eefa7.js";import"./app-6fb77603.js";import{a as s}from"./genesearch-ffd88bf2.js";import"./snplst.sampleSum-e47d05f0.js";import"./table-0daf2b89.js";import"./partjson.esm-b3f1fc21.js";import"./termdb.bins-39d11f24.js";import"path";const a="Variants in a locus";function o(e){return{getPillName(){return e.term.name},getPillStatus(){if(!e.term||!e.q)return;if(!e.term.snps)throw`Missing term.snps [snplocs.ts getPillStatus()]`;let t=`${e.q.chr}:${e.q.start}-${e.q.stop}, ${e.term.snps.length} variant${e.term.snps.length>1?"s":""}`;if(e.term.reachedVariantLimit){t+='<span style="margin-left: 6px; background:#aaa; font-size:1em;font-style: normal; border-radius: 7px;color:white;padding:0px 5px;">⚠<span>'}return{text:t}},validateQ(t){d(t)},showEditMenu(i){return t(this,void 0,void 0,(function*(){yield l(e,i)}))}}}function l(r,o){var l;return t(this,void 0,void 0,(function*(){const d=o.append("div").style("margin","15px");const c=yield e(r,d);const u=s({genome:r.opts.genomeObj,tip:r.dom.tip2,row:d.append("div").style("margin-top","20px"),defaultCoord:r.q&&r.q.chr?{chr:r.q.chr,start:r.q.start,stop:r.q.stop}:undefined});d.select(".sja_genesearchinput").style("margin","0px");d.append("span").style("margin","5px 0px").style("display","inline-block").style("opacity",.4).style("font-size",".7em").html('"Gene": Gene name (e.g. AKT1)</br>"Position": chr:start-stop (e.g. chr1:5000-6000)</br>"dbSNP": dbSNP accession (e.g. rs1042522)');yield f(r,(l=r.q)===null||l===void 0?void 0:l.variant_filter,d);const[v,h,y]=i(d.append("div").attr("class","sjpp-snp-select").style("margin-top","15px"),r,"snplocus");if(r.usecase.target=="dataDownload")d.select(".sjpp-snp-select").style("display","none");const g=d.append("div").style("margin-top","15px");g.append("button").style("margin-top","15px").text("Submit").on("click",(e=>t(this,void 0,void 0,(function*(){if(!u.chr)return window.alert("Invalid coordinate");e.target.disabled=true;e.target.innerHTML="Validating input...";if(r.term);else{r.term={id:m()}}if(!r.q)r.q={};r.term.type="snplocus";r.q.chr=u.chr;r.q.start=u.start;r.q.stop=u.stop;r.term.name=a;delete r.term.snps;r.q.variant_filter=n(r.variantFilter.active);yield p(r);{const t=Number(v.property("value"));r.q.AFcutoff=t<0||t>=100?5:t}r.q.alleleType=h.property("selectedIndex");r.q.geneticModel=y.property("selectedIndex");if(c){r.q.restrictAncestry=c.node().options[c.property("selectedIndex")].__ancestry_obj}r.runCallback()}))));g.append("span").style("padding-left","15px").style("opacity",.8).style("font-size",".8em").text(r.usecase.target=="dataDownload"?"":"Variants will be treated individually in separate regression models")}))}function p(e){return t(this,void 0,void 0,(function*(){const t=yield e.vocabApi.validateSnps(e.q);if(t.error)throw t.error;e.q.cacheid=t.cacheid;e.term.snps=t.snps;e.term.reachedVariantLimit=t.reachedVariantLimit}))}function d(t){const e=t.q;if(!Number.isFinite(e.AFcutoff))throw"AFcutoff is not number";if(e.AFcutoff<0||e.AFcutoff>100)throw"AFcutoff is not within 0 to 100";if(![0,1].includes(e.alleleType))throw"alleleType value is not one of 0/1";if(![0,1,2,3].includes(e.geneticModel))throw"geneticModel value is not one of 0/1";if(!e.chr)throw"chr missing";if(!Number.isInteger(e.start))throw"start coordinate is not integer";if(!Number.isInteger(e.stop))throw"stop coordinate is not integer";if(e.start<0)throw"start < 0";if(e.stop<=e.start)throw"stop <= start"}function c(e,i){return t(this,void 0,void 0,(function*(){try{d(e)}catch(t){throw"snplocus validateQ(): "+t}if(!e.term.name)e.term.name=a;if(e.id==undefined||e.id==""){if(e.term.id==undefined||e.term.id==""){e.term.id=m()}e.id=e.term.id}else{if(e.term.id==undefined||e.term.id==""){e.term.id=e.id}}yield p({term:e.term,q:e.q,vocabApi:i})}))}function m(){return"snplocus"+Math.random()}function f(e,i,n,s){return t(this,void 0,void 0,(function*(){if(!e.variantFilter){e.variantFilter=yield e.vocabApi.get_variantFilter()}if(!e.variantFilter.terms){return}if(!e.variantFilter.opts)throw"variantFilter.opts{} missing";if(!e.variantFilter.filter)throw".filter missing from variantFilter{}";if(!Array.isArray(e.variantFilter.terms)||e.variantFilter.terms.length==0)throw"variantFilter.terms[] is not non-empty array";if(i){e.variantFilter.active=JSON.parse(JSON.stringify(i))}else{e.variantFilter.active=JSON.parse(JSON.stringify(e.variantFilter.filter))}const a=n.append("div").style("margin-top","15px");a.append("span").text("VARIANT FILTERS").style("font-size",".8em").style("opacity",.5);const o=a.append("div");r({joinWith:e.variantFilter.opts.joinWith,emptyLabel:"+Variant Filter",holder:o,vocab:{terms:e.variantFilter.terms},callback:i=>t(this,void 0,void 0,(function*(){e.variantFilter.active=i;if(s)yield s()}))}).main(e.variantFilter.active)}))}export{c as fillTW,o as getHandler};
|
package/dist/{spliceevent.a53ss.diagram-1a84db58.js → spliceevent.a53ss.diagram-5f8352eb.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ah as t,a_ as e,bV as a}from"./app-
|
|
1
|
+
import{ah as t,a_ as e,bV as a}from"./app-6fb77603.js";const r="#990000";const n="#00A352";function i(i){const s=i.event;if(!s){i.holder.text(".event missing");return}if(s.a5ss==undefined&&s.a3ss==undefined){i.holder.text("not a5ss or a3ss");return}const l=30;const o=30;const d=20;const f=d-5;const p=20;const x=30;const h=20;const c=i.holder.append("svg");const m=c.append("g").attr("transform","translate("+x+","+h+")");const g=s.sitedist+" nt";let y;m.append("text").text(g).attr("font-size",f).attr("font-family",t).each((function(){y=this.getBBox().width})).remove();const u=5;let w=false;let k=false;let b=false;let z=false;if(s.a5ss){if(s.altinexon)w=true;else b=true}else{if(s.altinexon)k=true;else z=true}let v=0;let E;let L;m.append("rect").attr("fill",e).attr("stroke",e).attr("x",v).attr("y",p).attr("width",l).attr("height",d).attr("shape-rendering","crispEdges");m.append("text").text("e"+(s.exon5idx+1)).attr("text-anchor","middle").attr("x",v+l/2).attr("y",p+d/2).attr("fill","white").attr("dominant-baseline","central").attr("font-size",f).attr("font-family",t);v+=l;if(w){m.append("rect").attr("fill",n).attr("stroke",n).attr("x",v).attr("y",p).attr("width",y+u*2).attr("height",d).attr("shape-rendering","crispEdges");m.append("text").text(g).attr("text-anchor","middle").attr("x",v+y/2+u).attr("y",p+d/2).attr("fill","white").attr("dominant-baseline","central").attr("font-size",f).attr("font-family",t);v+=y+u*2}E=v;if(b||z){if(b);else{v+=o}m.append("rect").attr("fill","none").attr("stroke",e).attr("x",v).attr("y",p).attr("width",y+u*2).attr("height",d).attr("shape-rendering","crispEdges");m.append("text").text(g).attr("text-anchor","middle").attr("x",v+y/2+u).attr("y",p+d/2).attr("font-size",f).attr("font-family",t).attr("dominant-baseline","central");v+=y+u*2;if(b){v+=o}}else{v+=o}L=v;m.append("line").attr("x1",E+(b?y+u*2:0)).attr("y1",p+d/2).attr("x2",L-(z?y+u*2:0)).attr("y2",p+d/2).attr("stroke",e).attr("shape-rendering","crispEdges");if(k){m.append("rect").attr("fill",n).attr("stroke",n).attr("x",v).attr("y",p).attr("width",y+u*2).attr("height",d).attr("shape-rendering","crispEdges");m.append("text").text(g).attr("text-anchor","middle").attr("x",v+y/2+u).attr("y",p+d/2).attr("fill","white").attr("dominant-baseline","central").attr("font-size",f).attr("font-family",t);v+=y+u*2}m.append("rect").attr("fill",e).attr("stroke",e).attr("x",v).attr("y",p).attr("width",l).attr("height",d).attr("shape-rendering","crispEdges");m.append("text").text("e"+(s.exon5idx+1+1)).attr("text-anchor","middle").attr("x",v+l/2).attr("y",p+d/2).attr("fill","white").attr("dominant-baseline","central").attr("font-size",f).attr("font-family",t);{let t,e;if(w||b){e=L;if(w){t=E-y-u*2}else{t=E+y+u*2}}else{t=E;if(z){e=L-y-u*2}else{e=L+y+u*2}}m.append("path").attr("d","M"+t+","+p+"L"+(t+e)/2+",0"+"L"+e+","+p).attr("stroke",r).attr("fill","none");m.append("text").text(s.junctionB.v+(s.frame!=undefined?s.frame==a?", in frame":",out of frame":"")).attr("x",(t+e)/2).attr("y",-1).attr("text-anchor","middle").attr("font-size",f).attr("fill",r)}let j;{const t=m.append("path").attr("d","M"+E+","+(p+d)+"L"+(E+L)/2+","+(p*2+d)+"L"+L+","+(p+d)).attr("stroke",e).attr("fill","none");const a=s.junctionA;if(a){j=m.append("text").text(a.v).attr("x",(E+L)/2).attr("y",p*2+d+1).attr("text-anchor","middle").attr("font-size",f).attr("dominant-baseline","hanging")}else{t.attr("stroke-dasharray","3,3")}}c.attr("width",x*2+l*2+o+y+u*2).attr("height",h*2+p*2+d);return j}export{i as default};
|
package/dist/{spliceevent.exonskip.diagram-da10648b.js → spliceevent.exonskip.diagram-0d30a735.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{a_ as t,ah as a,bV as n}from"./app-
|
|
1
|
+
import{a_ as t,ah as a,bV as n}from"./app-6fb77603.js";import{s as e}from"./spliceevent.phrase-a8401d53.js";function o(o){const i=o.event;const r=o.holder.append("div").style("vertical-align","top");if(!i.isaltexon&&!i.isskipexon){r.append("div").text(".isskipexon or .isaltexon is not set for event");return}if(!o.nophrase){r.append("div").html(e(i))}const s=o.holder.append("svg").style("display","inline-block");const d=new Map;const l=[];const f=40;const c=20;const p=20;const u=20;const h=20;const x=20;const j=14;const k=s.append("g").attr("transform","translate("+h+","+x+")");const m=i.skippedexon[0];const g=i.skippedexon[i.skippedexon.length-1];let b=false;let y=false;if(i.isskipexon){if(m>1){b=true}if(i.down1junction){y=true}}s.attr("width",h+(b?f+u:0)+f+u+(f+u)*i.skippedexon.length+f+(y?f+u:0)+h).attr("height",x+j+p+c+p+j+x);const B=j+p;const w=new Map;let v=0;if(b){k.append("rect").attr("x",v).attr("y",B).attr("width",f).attr("height",c).attr("fill",t);k.append("text").text("e"+(m-1)).attr("x",v+f/2).attr("y",B+c/2).attr("text-anchor","middle").attr("dominant-baseline","central").attr("fill","white").attr("font-size",j);v+=f+u;let n=true;let e="?";if(i.up1junction){if(i.junctionB.data){if(i.junctionB.data.length==1){const t=i.junctionB.data[0].tkid;if(i.up1junction.data){for(const a of i.up1junction.data){if(a.tkid==t){n=false;e=a.v;break}}}}else if(i.junctionB.data.length>1){let t=0;let a=0;for(const n of i.junctionB.data){for(const e of i.up1junction.data){if(n.tkid==e.tkid){t+=e.v;a++;break}}}if(a>0){n=false;e=Math.ceil(t/a)}}}else{n=false;e=i.up1junction.v}}k.append("path").attr("d","M"+(v-u)+","+(B+c)+"L"+(v-u/2)+","+(B+c+p)+"L"+v+","+(B+c)).attr("stroke",t).attr("stroke-dasharray",n?"2,2":"none").attr("fill","none");if(!n){const t=k.append("text").text(e).attr("x",v-u/2).attr("y",B+c+p+2).attr("font-size",j).attr("fill","black").attr("font-family",a).attr("text-anchor","middle").attr("dominant-baseline","hanging");d.set(i.up1junction.start+"."+i.up1junction.stop,t);l.push([i.up1junction.start,i.up1junction.stop])}}k.append("rect").attr("x",v).attr("y",B).attr("width",f).attr("height",c).attr("fill",t);k.append("text").text("e"+m).attr("x",v+f/2).attr("y",B+c/2).attr("text-anchor","middle").attr("dominant-baseline","central").attr("fill","white").attr("font-size",j);v+=f+u;for(let n=m;n<=g+1;n++){const e=n==g+1;k.append("rect").attr("x",v).attr("y",B).attr("width",f).attr("height",c).attr("fill",e?t:"none").attr("stroke",e?"none":t).attr("shape-rendering","crispEdges");k.append("text").text("e"+(n+1)).attr("x",v+f/2).attr("y",B+c/2).attr("text-anchor","middle").attr("dominant-baseline","central").attr("fill",e?"white":t).attr("font-size",j);const o=i.junctionAlst[n-m];k.append("path").attr("d","M"+(v-u)+","+(B+c)+"L"+(v-u/2)+","+(B+c+p)+"L"+v+","+(B+c)).attr("stroke",t).attr("stroke-dasharray",o?"none":"2,2").attr("fill","none");if(o){let t="?";if(i.junctionB.data){if(i.junctionB.data.length==1){if(!o.data){console.error(".data missing from junctionA")}else{for(const a of o.data){if(a.tkid==i.junctionB.data[0].tkid){t=a.v;break}}}}else if(i.junctionB.data.length>1){t="e"+n+"-"+(n+1);for(const t of i.junctionB.data){if(!w.has(t.tkid)){w.set(t.tkid,{sampleobj:t,readcountlst:[]})}let a=0;for(const n of o.data){if(n.tkid==t.tkid){a=n.v;break}}w.get(t.tkid).readcountlst.push(a)}}}else{t=o.v}const e=k.append("text").text(t).attr("x",v-u/2).attr("y",B+c+p+2).attr("font-size",j).attr("fill","black").attr("font-family",a).attr("text-anchor","middle").attr("dominant-baseline","hanging");d.set(o.start+"."+o.stop,e);l.push([o.start,o.stop])}v+=f+u}{const t=v-f-u-((f+u)*i.skippedexon.length+u)/2;k.append("path").attr("d","M"+((b?f+u:0)+f)+","+B+"L"+t+","+(B-p)+"L"+(v-f-u)+","+B).attr("fill","none").attr("stroke",i.color);let e="?";if(i.junctionB.data){if(i.junctionB.data.length==1){e=i.junctionB.data[0].v}else{e="e"+m+"-"+(g+2);for(const t of i.junctionB.data){if(!w.has(t.tkid)){console.error("sample has junctionB but no junctionA! "+t.tkid);continue}let a=0;for(const n of i.junctionB.data){if(n.tkid==t.tkid){a=n.v;break}}w.get(t.tkid).readcountlst.unshift(a)}}}else{e=i.junctionB.v}if(typeof i.frame=="boolean"){e+=", "+(i.frame==n?"in frame":"out of frame")}k.append("text").text(e).attr("x",t).attr("y",B-p-2).attr("font-size",j).attr("fill",i.color).attr("font-family",a).attr("text-anchor","middle")}if(y){k.append("rect").attr("x",v).attr("y",B).attr("width",f).attr("height",c).attr("fill",t);k.append("text").text("e"+(g+3)).attr("x",v+f/2).attr("y",B+c/2).attr("text-anchor","middle").attr("dominant-baseline","central").attr("fill","white").attr("font-size",j);let n=true;let e="?";if(i.down1junction){if(i.junctionB.data){if(i.junctionB.data.length==1){const t=i.junctionB.data[0].tkid;if(i.down1junction.data){for(const a of i.down1junction.data){if(a.tkid==t){n=false;e=a.v;break}}}}else if(i.junctionB.data.length>1){let t=0;let a=0;for(const n of i.junctionB.data){for(const e of i.down1junction.data){if(n.tkid==e.tkid){t+=e.v;a++;break}}}if(a>0){n=false;e=Math.ceil(t/a)}}}else{n=false;e=i.down1junction.v}}k.append("path").attr("d","M"+(v-u)+","+(B+c)+"L"+(v-u/2)+","+(B+c+p)+"L"+v+","+(B+c)).attr("stroke",t).attr("stroke-dasharray",n?"2,2":"none").attr("fill","none");if(!n){const t=k.append("text").text(e).attr("x",v-u/2).attr("y",B+c+p+2).attr("font-size",j).attr("fill","black").attr("font-family",a).attr("text-anchor","middle").attr("dominant-baseline","hanging");d.set(i.down1junction.start+"."+i.down1junction.stop,t);l.push([i.down1junction.start,i.down1junction.stop])}}return[d,l]}export{o as default};
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
import{bX as e,bV as n}from"./app-6fb77603.js";function o(o){let t=0;for(let f=1;f<o.length;f++){const i=o[f];const r=o[t];if(i.isskipexon&&r.isaltexon){t=f;continue}if(i.frame==e&&r.framenocheck){t=f;continue}if(i.frame==n&&r.frame!=n){t=f;continue}}return t}export{o as e};
|
package/dist/{spliceevent.noeventdiagram-1d6d790d.js → spliceevent.noeventdiagram-df9ce4bc.js}
RENAMED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{ah as t,a_ as n}from"./app-
|
|
1
|
+
import{ah as t,a_ as n}from"./app-6fb77603.js";const e=30;const r=5;const i="#990000";const o=20;const a=14;const s=20;const f=15;const x=15;function l(t){const n=t.isoform;if(!n){t.holder.text(".event missing");return}if(!t.ongene){holder.text(".ongene missing");return}let e,r,i,o,a,s;if(t.ongene.exonleft){const i=t.ongene.exonleft.filter((t=>t.isoform==n))[0];if(t.reverse)r=i;else e=i}if(t.ongene.exonright){const i=t.ongene.exonright.filter((t=>t.isoform==n))[0];if(t.reverse)e=i;else r=i}if(t.ongene.exonleftin){const e=t.ongene.exonleftin.filter((t=>t.isoform==n))[0];if(t.reverse)o=e;else i=e}if(t.ongene.exonrightin){const e=t.ongene.exonrightin.filter((t=>t.isoform==n))[0];if(t.reverse)i=e;else o=e}if(t.ongene.intronleft){const e=t.ongene.intronleft.filter((t=>t.isoform==n))[0];if(t.reverse)s=e;else a=e}if(t.ongene.intronright){const e=t.ongene.intronright.filter((t=>t.isoform==n))[0];if(t.reverse)a=e;else s=e}if(t.ongene.leftout){t.ongene.leftout.filter((t=>t.isoform==n))[0];if(t.reverse);}if(t.ongene.rightout){t.ongene.rightout.filter((t=>t.isoform==n))[0];if(t.reverse);}const f=t.holder.append("svg").attr("width",1).attr("height",1);if(e){if(r){c(e,r,f)}else if(o){h(e,o,f)}else if(s){g(e,s,f)}else{p(e,f)}}else if(i){if(r){u(i,r,f)}else if(o){m(i,o,f)}else if(s){w(i,s,f)}else{y(i,f)}}else if(a){if(r){B(a,r,f)}else if(o){v(a,o,f)}else if(s){b(a,s,f)}else{z(a,f)}}else{if(r){k(r,f)}else if(o){E(o,f)}else if(s){O(s,f)}}}function d(n){const r=n.holder.append("svg");const i=r.append("g").attr("transform","translate("+f+","+x+")");let l=0,d=0;let c,h,g;if(n.ongene.exonleft){c=n.ongene.exonleft[0]}else if(n.ongene.exonleftin){h=n.ongene.exonleftin[0]}else if(n.ongene.intronleft){g=n.ongene.intronleft[0]}let p=0;i.append("text").text(c?c.gene:h?h.gene:g?g.gene:"Left gene").attr("x",0).attr("y",s+o/2).attr("dominant-baseline","central").attr("font-size",a).attr("font-family",t).each((function(){p=this.getBBox().width}));p+=5;if(c){const t=M(p,c.exonidx,i);p+=t;l=p}else if(h){const t=M(p,h.exonidx,i);l=p+t/2;p+=t}else if(g){const t=M(p,g.intronidx,i);T(i,p+t,p+t+e);const n=M(p+t+e,g.intronidx+1,i);p+=t;l=p+e/2;p+=e+n}p+=30;let u,m,w;if(n.ongene.exonright){u=n.ongene.exonright[0]}else if(n.ongene.exonrightin){m=n.ongene.exonrightin[0]}else if(n.ongene.intronright){w=n.ongene.intronright[0]}if(u){const t=M(p,u.exonidx,i);d=p;p+=t}else if(m){const t=M(p,m.exonidx,i);d=p+t/2;p+=t}else if(w){const t=M(p,w.intronidx,i);T(i,p+t,p+t+e);const n=M(p+t+e,w.intronidx+1,i);p+=t;d=p+e/2;p+=e+n}p+=5;i.append("text").text(u?u.gene:m?m.gene:w?w.gene:"Right gene").attr("x",p).attr("y",s+o/2).attr("dominant-baseline","central").attr("font-size",a).attr("font-family",t).each((function(){p+=this.getBBox().width}));U(i,l,d,g,w);r.attr("width",f*2+p).attr("height",s+o+x*2)}function c(t,n,r){const i=r.append("g").attr("transform","translate("+f+","+x+")");const a=n.exonidx-t.exonidx==1;const l=L(t.exonidx,i);let d=l;d+=I(d,t.exonidx,n.exonidx,i);if(!a){T(i,d,d+e)}d+=e;const c=M(d,n.exonidx,i);U(i,l,d,false,false,true);r.attr("width",f*2+d+c).attr("height",x*2+s+o)}function h(t,n,r){const i=r.append("g").attr("transform","translate("+f+","+x+")");const a=L(t.exonidx,i);let l=a;l+=I(l,t.exonidx,n.exonidx,i);T(i,l,l+e);l+=e;const d=M(l,n.exonidx,i);l+=d/2;U(i,a,l);r.attr("width",f*2+l+d/2).attr("height",x*2+s+o)}function g(t,n,r){const i=r.append("g").attr("transform","translate("+f+","+x+")");const a=L(t.exonidx,i);let l=a;l+=I(l,t.exonidx,n.intronidx+1,i);T(i,l,l+e);l+=e/2;const d=M(l+e/2,n.intronidx+1,i);U(i,a,l,false,true);r.attr("width",f*2+l+e/2+d).attr("height",x*2+s+o)}function p(n,r){const l=r.append("g").attr("transform","translate("+f+","+x+")");const d=L(n.exonidx,l);const c=d+e;l.append("text").text("OUT").attr("x",c+5).attr("y",s+o/2).attr("fill",i).attr("dominant-baseline","central").attr("font-size",a).attr("font-family",t);U(l,d,c);r.attr("width",f*2+c+40).attr("height",x*2+s+o)}function u(t,n,r){const i=r.append("g").attr("transform","translate("+f+","+x+")");const a=L(t.exonidx,i);const l=a/2;let d=a;d+=I(d,t.exonidx,n.exonidx,i);T(i,d,d+e);d+=e;const c=M(d,n.exonidx,i);U(i,l,d);r.attr("width",f*2+d+c).attr("height",x*2+s+o)}function m(t,n,r){const a=r.append("g").attr("transform","translate("+f+","+x+")");const l=L(t.exonidx,a);if(t.exonidx==n.exonidx){const t=l/3;const n=l*2/3;a.append("path").attr("d","M"+t+","+s+"L"+(t+n)/2+",0"+"L"+n+","+s).attr("stroke",i).attr("fill","none");r.attr("width",f*2+l).attr("height",x*2+s*2+o);return}const d=l/2;let c=l;c+=I(c,t.exonidx,n.exonidx,a);T(a,c,c+e);c+=e;const h=M(c,n.exonidx,a);c+=h/2;U(a,d,c);r.attr("width",f*2+c+h/2).attr("height",x*2+s+o)}function w(t,n,r){const i=r.append("g").attr("transform","translate("+f+","+x+")");const a=L(t.exonidx,i);const l=a/2;let d=a;d+=I(d,t.exonidx,n.intronidx+1,i);T(i,d,d+e);d+=e/2;const c=M(d+e/2,n.intronidx+1,i);U(i,l,d,false,true);r.attr("width",f*2+d+e/2+c).attr("height",x*2+s+o)}function y(n,r){const l=r.append("g").attr("transform","translate("+f+","+x+")");const d=L(n.exonidx,l);const c=d/2;let h=d+e;l.append("text").text("OUT").attr("x",h+5).attr("y",s+o/2).attr("fill",i).attr("dominant-baseline","central").attr("font-size",a).attr("font-family",t);U(l,c,h);r.attr("width",f*2+h+40).attr("height",x*2+s+o)}function B(t,n,r){const i=r.append("g").attr("transform","translate("+f+","+x+")");const a=L(t.intronidx,i);const l=a+e/2;let d=a+e;T(i,a,d);d+=I(d,t.intronidx,n.exonidx,i,true);const c=M(d,n.exonidx,i);U(i,l,d,true);r.attr("width",f*2+d+c).attr("height",x*2+s+o)}function v(t,n,r){const i=r.append("g").attr("transform","translate("+f+","+x+")");const a=L(t.intronidx,i);const l=a+e/2;let d=a+e;T(i,a,d);d+=I(d,t.intronidx,n.exonidx,i,true);const c=M(d,n.exonidx,i);d+=c/2;U(i,l,d,true);r.attr("width",f*2+d+c/2).attr("height",x*2+s+o)}function b(t,n,r){const i=r.append("g").attr("transform","translate("+f+","+x+")");const a=L(t.intronidx,i);if(t.intronidx==n.intronidx){T(i,a,a+30);const t=a+10;const e=a+20;U(i,t,e,true,true);const l=M(e+10,n.intronidx+1,i);r.attr("width",f*2+a+30+l).attr("height",x*2+s+o);return}const l=a+e/2;let d=a+e;T(i,a,d);d+=I(d,t.intronidx,n.intronidx+1,i,true);T(i,d,d+e);d+=e/2;const c=M(d+e/2,n.intronidx+1,i);U(i,l,d,true,true);r.attr("width",f*2+d+e/2+c).attr("height",x*2+s+o)}function z(n,r){const l=r.append("g").attr("transform","translate("+f+","+x+")");const d=L(n.intronidx,l);const c=d+e/2;let h=d+e;T(l,d,h);const g=M(h,n.intronidx+1,l);h+=g+10;l.append("text").text("OUT").attr("x",h).attr("y",s+o/2).attr("fill",i).attr("dominant-baseline","central").attr("font-size",a).attr("font-family",t);U(l,c,h,true);r.attr("width",f*2+h+30).attr("height",x*2+s+o)}function k(n,r){const l=r.append("g").attr("transform","translate("+f+","+x+")");let d;l.append("text").text("OUT").attr("x",0).attr("y",s+o/2).attr("fill",i).attr("dominant-baseline","central").attr("font-size",a).attr("font-family",t).each((function(){d=this.getBBox().width}));const c=d+5;const h=c+e;const g=M(h,n.exonidx,l);U(l,c,h);r.attr("width",f*2+h+g).attr("height",x*2+s+o)}function E(n,r){const l=r.append("g").attr("transform","translate("+f+","+x+")");let d;l.append("text").text("OUT").attr("x",0).attr("y",s+o/2).attr("fill",i).attr("dominant-baseline","central").attr("font-size",a).attr("font-family",t).each((function(){d=this.getBBox().width}));const c=d+5;const h=M(c+e,n.exonidx,l);const g=c+e+h/2;U(l,c,g);r.attr("width",f*2+g+h/2).attr("height",x*2+s+o)}function O(n,r){const l=r.append("g").attr("transform","translate("+f+","+x+")");let d;l.append("text").text("OUT").attr("x",0).attr("y",s+o/2).attr("fill",i).attr("dominant-baseline","central").attr("font-size",a).attr("font-family",t).each((function(){d=this.getBBox().width}));const c=d+5;const h=M(c+30,n.intronidx,l);T(l,c+30+h,c+30+h+e);const g=c+30+h+e/2;const p=M(c+30+h+e,n.intronidx+1,l);U(l,c,g,false,true);r.attr("width",f*2+c+30+h+e+p).attr("height",x*2+s+o)}function T(t,e,r){t.append("line").attr("x1",e).attr("y1",s+o/2).attr("x2",r).attr("y2",s+o/2).attr("stroke",n).attr("shape-rendering","crispEdges")}function U(t,e,r,a,f,x){t.append("path").attr("d","M"+e+","+(s+(a?o/2:0))+"L"+(e+r)/2+",0"+"L"+r+","+(s+(f?o/2:0))).attr("stroke",x?n:i).attr("fill","none")}function L(e,i){const f="e"+(e+1);let x;i.append("text").text(f).attr("font-size",a).attr("font-family",t).each((function(){x=this.getBBox().width})).remove();const l=r*2+x;i.append("rect").attr("fill",n).attr("stroke",n).attr("x",0).attr("y",s).attr("width",l).attr("height",o).attr("shape-rendering","crispEdges");i.append("text").text(f).attr("text-anchor","middle").attr("x",l/2).attr("y",s+o/2).attr("fill","white").attr("dominant-baseline","central").attr("font-size",a).attr("font-family",t);return l}function M(e,i,f){let x;if(Number.isInteger(i)){x="e"+(i+1)}else{x=x}let l;f.append("text").text(x).attr("font-size",a).attr("font-family",t).each((function(){l=this.getBBox().width})).remove();const d=r*2+l;f.append("rect").attr("fill",n).attr("stroke",n).attr("x",e).attr("y",s).attr("width",d).attr("height",o).attr("shape-rendering","crispEdges");f.append("text").text(x).attr("text-anchor","middle").attr("x",e+d/2).attr("y",s+o/2).attr("fill","white").attr("dominant-baseline","central").attr("font-size",a).attr("font-family",t);return d}function j(t){if(t<3)return 12;if(t<6)return 7;return 4}function I(t,e,r,i,a){const f=r-1-e;if(f==0)return 0;const x=j(f);let l=0;for(let f=e+1;f<r;f++){if(!a){i.append("line").attr("x1",t+l).attr("y1",s+o/2).attr("x2",t+l+x).attr("y2",s+o/2).attr("stroke",n).attr("shape-rendering","crispEdges");l+=x}i.append("rect").attr("fill",n).attr("stroke",n).attr("x",t+l).attr("y",s).attr("width",x).attr("height",o).attr("shape-rendering","crispEdges");l+=x;if(a){i.append("line").attr("x1",t+l).attr("y1",s+o/2).attr("x2",t+l+x).attr("y2",s+o/2).attr("stroke",n).attr("shape-rendering","crispEdges");l+=x}}return l}export{d as differentgenes,l as samegene};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{bV as s,ba as i,bX as o}from"./app-
|
|
1
|
+
import{bV as s,ba as i,bX as o}from"./app-6fb77603.js";function a(a){const d=[];if(a.isaltexon||a.isskipexon){const e=Math.min(...a.skippedexon);const l=Math.max(...a.skippedexon);d.push('<div style="display:inline-block">'+(e==l?"exon "+(e+1):"exons "+(e+1)+"-"+(l+1))+" "+(a.isaltexon?"alternative usage":"skipping")+"</div>");if(a.isaltexon){d.push("<div class=sja_tinylogo_body>"+a.gmB.isoform+", "+a.gmA.isoform+"</div><div class=sja_tinylogo_head>ISOFORMS</div>")}else{d.push("<div class=sja_tinylogo_body>"+a.gm.isoform+"</div><div class=sja_tinylogo_head>ISOFORM</div>")}if(a.junctionB.data){d.push("<div class=sja_tinylogo_body>"+a.junctionB.data.length+"</div><div class=sja_tinylogo_head>SAMPLE"+(a.junctionB.data.length>1?"S":"")+"</div>")}d.push("<div class=sja_tinylogo_body>"+a.percentage+" %</div><div class=sja_tinylogo_head>PERCENT</div>");if(a.framenocheck){if(a.utr3){d.push('<div class=sja_tinylogo_body style="background-color:#ededed">3\' UTR</div>')}else if(a.utr5){d.push('<div class=sja_tinylogo_body style="background-color:#ededed">5\' UTR</div>')}}else if(a.frame==s){d.push('<div class=sja_tinylogo_body style="background-color:'+i+';color:white">IN</div><div class=sja_tinylogo_head>FRAME</div>')}else if(a.frame==o){d.push("<div class=sja_tinylogo_body>OUT</div><div class=sja_tinylogo_head>FRAME</div>")}else{d.push("<div class=sja_tinylogo_body>?</div><div class=sja_tinylogo_head>FRAME</div>")}}else{return"unknown event type!!"}return d.join(" ")}export{a as s};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{h as t}from"./app-
|
|
1
|
+
import{h as t}from"./app-6fb77603.js";class e{constructor(t){this.type="stattable"}async init(){this.dom={div:this.opts.holder.append("div").style("margin","10px")};i(this)}getState(t){const e=t.plots.find((t=>t.id===this.id));if(!e){throw`No plot with id='${this.id}' found. Did you set this.id before this.api = getComponentApi(this)?`}return{activeCohort:t.activeCohort,termfilter:t.termfilter,config:{term:e.term,term0:e.term0,term2:e.term2,settings:{common:e.settings.common,barchart:e.settings.barchart}},filter:t.termfilter.filter}}async main(){try{this.config=structuredClone(this.state.config);if(this.state.isVisible){const t=this.getDataRequestOpts();const e=await this.app.vocabApi.getNestedChartSeriesData(t);this.app.vocabApi.syncTermData(this.state.config,e)}if(!this.state.isVisible||!this.data||!this.data.boxplot){this.dom.div.style("display","none");return}this.render(this.data)}catch(t){throw t}}getDataRequestOpts(){const t=this.config;const e={term:t.term,filter:this.state.termfilter.filter};if(t.term2)e.term2=t.term2;if(t.term0)e.term0=t.term0;if(this.state.ssid)e.ssid=this.state.ssid;return e}}function i(t){t.render=function(e){t.dom.div.style("display","block").selectAll("*").remove();let i="";const o=e.boxplot.sd?" ("+e.boxplot.sd.toFixed(2)+") ":"";let s="";if(Number.isFinite(e.boxplot.min)){s+="<tr><td>Minimum</td><td>"+e.boxplot.min.toFixed(2)+"</td></tr>"}if(Number.isFinite(e.boxplot.max)){s+="<tr><td>Maximum</td><td>"+e.boxplot.max.toFixed(2)+"</td></tr>"}s+="<tr><td>Mean (SD)</td><td>"+e.boxplot.mean.toFixed(2)+o+"</td></tr>";if("p50"in e.boxplot){s+="<tr><td>Median (IQR)</td><td>"+e.boxplot.p50.toFixed(2)+" ("+e.boxplot.iqr.toFixed(2)+") </td></tr>"+"<tr><td>5th Percentile</td><td>"+e.boxplot.p05.toFixed(2)+"</td></tr>"+"<tr><td>25th Percentile</td><td>"+e.boxplot.p25.toFixed(2)+"</td></tr>"+"<tr><td>75th Percentile</td><td>"+e.boxplot.p75.toFixed(2)+"</td></tr>"+"<tr><td>95th Percentile</td><td>"+e.boxplot.p95.toFixed(2)+"</td></tr>"}t.dom.div.html("<table><tr><th></th><th>Value</th></tr>"+i+s+"</table>");t.dom.div.selectAll("td, th, table").style("border","1px solid black").style("padding","0").style("border-collapse","collapse");t.dom.div.selectAll("th, td").style("padding","2px 10px")}}const o=t(e);export{o as statTableInit};
|
|
@@ -1 +1 @@
|
|
|
1
|
-
import{s as n}from"./app-
|
|
1
|
+
import{s as n}from"./app-6fb77603.js";var p="\n\n\n.sjpp-plus-button, .sjpp-dshandleholder {\n border-radius: 4px;\n}\n\n";var s="\n\n\n.sjpp-plus-button, .sjpp-dshandleholder {\n border-radius: 4px;\n}\n\n";n(p);export{p as default,s as stylesheet};
|