@sjcrh/proteinpaint-client 2.191.4 → 2.192.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/2dmaf-BNMEUJVM.js +1373 -0
- package/dist/AIProjectAdmin-AEXQY5LY.js +958 -0
- package/dist/AIProjectAdmin-AEXQY5LY.js.map +7 -0
- package/dist/AppHeader-RXDJBHXZ.js +835 -0
- package/dist/BoxPlot-HDP3SIGU.js +1217 -0
- package/dist/BoxPlot-HDP3SIGU.js.map +7 -0
- package/dist/CorrelationVolcano-V2E566XL.js +619 -0
- package/dist/DE-7YUZSW4E.js +95 -0
- package/dist/DEinput-P2HOQC4Z.js +301 -0
- package/dist/DifferentialAnalysis-2Z6BHS7A.js +245 -0
- package/dist/Disco-ZLC54X7T.js +3297 -0
- package/dist/Disco-ZLC54X7T.js.map +7 -0
- package/dist/Disco.UI-LXJJYQVV.js +249 -0
- package/dist/Disco.UI-LXJJYQVV.js.map +7 -0
- package/dist/DmrPlot-OEJRGNI3.js +642 -0
- package/dist/GB-2GHDD3MW.js +1130 -0
- package/dist/GeneExpInput-PWLPDLYT.js +367 -0
- package/dist/GeneExpInput-PWLPDLYT.js.map +7 -0
- package/dist/HicApp-CAYC4DPO.js +2250 -0
- package/dist/NumBinaryEditor-EUOYSGPM.js +271 -0
- package/dist/NumBinaryEditor.unit.spec-5B3W4B4F.js +286 -0
- package/dist/NumContEditor-7KK6CIB3.js +109 -0
- package/dist/NumContEditor.unit.spec-IMKGVYFZ.js +169 -0
- package/dist/NumCustomBinEditor-PDAF6I7B.js +38 -0
- package/dist/NumCustomBinEditor.unit.spec-IU3DPECJ.js +284 -0
- package/dist/NumDiscreteEditor-YTKUHG6Z.js +179 -0
- package/dist/NumDiscreteEditor.unit.spec-FUBS7Z7Z.js +202 -0
- package/dist/NumRegularBinEditor-LU3KLBLY.js +38 -0
- package/dist/NumRegularBinEditor.unit.spec-2BKOHI7L.js +227 -0
- package/dist/NumSplineEditor-56RJ2HT2.js +198 -0
- package/dist/NumSplineEditor.unit.spec-PW6VUUBZ.js +199 -0
- package/dist/NumericDensity-EB4H54EF.js +38 -0
- package/dist/NumericDensity.unit.spec-LSEM4OEY.js +221 -0
- package/dist/NumericHandler-VGPDXP35.js +39 -0
- package/dist/NumericHandler.unit.spec-NR3F7XHV.js +219 -0
- package/dist/ProteomeInput-AUXWUIWK.js +396 -0
- package/dist/RunChart2-SQ6TFOHD.js +758 -0
- package/dist/SC-OWJ6LYIW.js +1124 -0
- package/dist/SC-OWJ6LYIW.js.map +7 -0
- package/dist/Volcano-XHDH6UN7.js +1379 -0
- package/dist/WSIViewer-WT2QV747.js +48562 -0
- package/dist/WSIViewer-WT2QV747.js.map +7 -0
- package/dist/WsiSamplesPlot-YUOAWG2A.js +165 -0
- package/dist/adSandbox-VMMAL22L.js +38 -0
- package/dist/animatedBubbleChart-Q6Z5W2UL.js +555 -0
- package/dist/animatedBubbleChart-Q6Z5W2UL.js.map +7 -0
- package/dist/app-FX3KZ67X.js +37 -0
- package/dist/app-X7ZYEOZN.js +49 -0
- package/dist/app.js +20 -20
- package/dist/bam-ZYLH4U5R.js +860 -0
- package/dist/barchart-MXSPTKV4.js +47 -0
- package/dist/barchart.data-ZWF6EVJH.js +22 -0
- package/dist/barchart.events-XON2ANOC.js +47 -0
- package/dist/barchart.integration.spec-PJIENJGT.js +1980 -0
- package/dist/barchart2-HIKBGSSE.js +314 -0
- package/dist/barchart2-HIKBGSSE.js.map +7 -0
- package/dist/bars.renderer-57KSYAAT.js +12 -0
- package/dist/block-EGPYVWNP.js +6226 -0
- package/dist/block-EGPYVWNP.js.map +7 -0
- package/dist/block.init-IJBRPZNM.js +38 -0
- package/dist/block.mds.expressionrank-3DANCP7E.js +359 -0
- package/dist/block.mds.geneboxplot-CRGSCZMG.js +828 -0
- package/dist/block.mds.junction-4UIH2ZYN.js +1545 -0
- package/dist/block.mds.svcnv-NF4UIRR2.js +6801 -0
- package/dist/block.svg-AIZ47JCQ.js +164 -0
- package/dist/block.tk.aicheck-7HZFGE63.js +283 -0
- package/dist/block.tk.ase-U3VNPZEA.js +365 -0
- package/dist/block.tk.bam-4TQ7P2OX.js +1906 -0
- package/dist/block.tk.bedgraphdot-MYHKKO6K.js +384 -0
- package/dist/block.tk.bigwig.ui-E3YVGIDN.js +212 -0
- package/dist/block.tk.hicstraw-Y4XOMG7T.js +823 -0
- package/dist/block.tk.junction-T5C7LK6F.js +2364 -0
- package/dist/block.tk.junction.textmatrixui-Z3ACCVXH.js +199 -0
- package/dist/block.tk.ld-Y5KDA5AU.js +99 -0
- package/dist/block.tk.menu-EWRRISDY.js +1029 -0
- package/dist/block.tk.pgv-3JYGOZVQ.js +944 -0
- package/dist/brainImaging-P3AF3C5N.js +423 -0
- package/dist/brainRegions-YA2H2QOI.js +221 -0
- package/dist/brainRegions-YA2H2QOI.js.map +7 -0
- package/dist/chunk-2JR7RPB6.js +1825 -0
- package/dist/chunk-2U2CP2Y2.js +317 -0
- package/dist/chunk-2U2CP2Y2.js.map +7 -0
- package/dist/chunk-3BBK6A4X.js +176 -0
- package/dist/chunk-3BBK6A4X.js.map +7 -0
- package/dist/chunk-3FVIDQOX.js +54 -0
- package/dist/chunk-3K2O2NIH.js +446 -0
- package/dist/chunk-3RSJU6YM.js +2681 -0
- package/dist/chunk-3ZKD6C5S.js +34 -0
- package/dist/chunk-46AEH34Z.js +95 -0
- package/dist/chunk-4CQVC6XL.js +182 -0
- package/dist/chunk-5FXNI724.js +216 -0
- package/dist/chunk-634MOGE3.js +314 -0
- package/dist/chunk-634MOGE3.js.map +7 -0
- package/dist/chunk-6JHIX4RA.js +4269 -0
- package/dist/chunk-6JHIX4RA.js.map +7 -0
- package/dist/chunk-7PFRBGMN.js +129 -0
- package/dist/chunk-7R63MAPC.js +448 -0
- package/dist/chunk-7R63MAPC.js.map +7 -0
- package/dist/chunk-A4Z3CI24.js +276 -0
- package/dist/chunk-AI2LUQS6.js +119 -0
- package/dist/chunk-AJYJW4LX.js +6364 -0
- package/dist/chunk-BKPDYW5T.js +177 -0
- package/dist/chunk-BMS32SNA.js +37 -0
- package/dist/chunk-C4BCMAIK.js +188 -0
- package/dist/chunk-C4BCMAIK.js.map +7 -0
- package/dist/chunk-CJPGYPI3.js +291 -0
- package/dist/chunk-CTQH7LQ6.js +31 -0
- package/dist/chunk-D5CVYITI.js +203 -0
- package/dist/chunk-DMSX5PSO.js +477 -0
- package/dist/chunk-E3JRW3T3.js +1102 -0
- package/dist/chunk-E574SMCX.js +283 -0
- package/dist/chunk-E76O5Z42.js +98 -0
- package/dist/chunk-EEW443GL.js +14 -0
- package/dist/chunk-EVNMW7BS.js +833 -0
- package/dist/chunk-EVNMW7BS.js.map +7 -0
- package/dist/chunk-F2WPS7VY.js +1943 -0
- package/dist/chunk-FDPWWODM.js +2832 -0
- package/dist/chunk-FDPWWODM.js.map +7 -0
- package/dist/chunk-FVHUROIJ.js +446 -0
- package/dist/chunk-FVHUROIJ.js.map +7 -0
- package/dist/chunk-FYFX42YD.js +222 -0
- package/dist/chunk-G6RZYGWY.js +386 -0
- package/dist/chunk-GTZV2UZV.js +736 -0
- package/dist/chunk-H34LAFGH.js +142 -0
- package/dist/chunk-I2R5O2XX.js +263 -0
- package/dist/chunk-IEYDMN3H.js +26 -0
- package/dist/chunk-JWBP4ZZB.js +148 -0
- package/dist/chunk-KUZPTJJO.js +20874 -0
- package/dist/chunk-KUZPTJJO.js.map +7 -0
- package/dist/chunk-KVIH5JPC.js +1275 -0
- package/dist/chunk-L5HCOTRF.js +302 -0
- package/dist/chunk-LHKDLWG5.js +194 -0
- package/dist/chunk-LQJMCE7G.js +467 -0
- package/dist/chunk-M7UKOCJA.js +234 -0
- package/dist/chunk-M7UKOCJA.js.map +7 -0
- package/dist/chunk-MHFH66I3.js +1289 -0
- package/dist/chunk-MHFH66I3.js.map +7 -0
- package/dist/chunk-MNIBZTQE.js +146 -0
- package/dist/chunk-MP3DN6JK.js +117 -0
- package/dist/chunk-N5OVBS5L.js +2786 -0
- package/dist/chunk-NEKAGDTL.js +58 -0
- package/dist/chunk-NPCNDM6Y.js +54 -0
- package/dist/chunk-NYN2WQN3.js +100 -0
- package/dist/chunk-O6WL7USJ.js +343 -0
- package/dist/chunk-OH5I6I2D.js +368 -0
- package/dist/chunk-PDFCQ7AU.js +5054 -0
- package/dist/chunk-PDFCQ7AU.js.map +7 -0
- package/dist/chunk-PSJVMAWA.js +294 -0
- package/dist/chunk-PSJVMAWA.js.map +7 -0
- package/dist/chunk-PTQ774XH.js +514 -0
- package/dist/chunk-PXOH4ZN2.js +399 -0
- package/dist/chunk-QG4BJUM7.js +102 -0
- package/dist/chunk-R7AV73BV.js +617 -0
- package/dist/chunk-R7AV73BV.js.map +7 -0
- package/dist/chunk-RITTG5WN.js +158 -0
- package/dist/chunk-SMSFTTEO.js +272 -0
- package/dist/chunk-SOTB4FRE.js +2098 -0
- package/dist/chunk-SOTB4FRE.js.map +7 -0
- package/dist/chunk-TBZKVKR4.js +50 -0
- package/dist/chunk-TJYRBEBK.js +2878 -0
- package/dist/chunk-TLTS33EY.js +287 -0
- package/dist/chunk-TMM7BWW7.js +381 -0
- package/dist/chunk-TTC4MNEM.js +2327 -0
- package/dist/chunk-UN3O2MNB.js +375 -0
- package/dist/chunk-UN3O2MNB.js.map +7 -0
- package/dist/chunk-UQ5CDHYF.js +1218 -0
- package/dist/chunk-UQ5CDHYF.js.map +7 -0
- package/dist/chunk-UXIZYI3X.js +226 -0
- package/dist/chunk-VIUATDO2.js +170 -0
- package/dist/chunk-VIUDFDN4.js +102 -0
- package/dist/chunk-VQZ2Z5YU.js +587 -0
- package/dist/chunk-VQZ2Z5YU.js.map +7 -0
- package/dist/chunk-W5OEFZCR.js +254 -0
- package/dist/chunk-WXSRK3XR.js +534 -0
- package/dist/chunk-XHGMDBTS.js +230 -0
- package/dist/chunk-XQ2OBL6R.js +1205 -0
- package/dist/chunk-XQ2OBL6R.js.map +7 -0
- package/dist/chunk-XVGS3QXS.js +55 -0
- package/dist/chunk-XYNYQMLH.js +482 -0
- package/dist/chunk-Y4JJMUWG.js +217 -0
- package/dist/chunk-Z457XQSX.js +815 -0
- package/dist/chunk-ZF6HNVYD.js +1444 -0
- package/dist/chunk-ZF6HNVYD.js.map +7 -0
- package/dist/condition-QXTOTGZX.js +332 -0
- package/dist/controls-7TDB75LK.js +41 -0
- package/dist/controls.config-IBF5ILFP.js +39 -0
- package/dist/correlation-M2T5R7CM.js +102 -0
- package/dist/correlation-M2T5R7CM.js.map +7 -0
- package/dist/cuminc-CAHPKW7W.js +1149 -0
- package/dist/cuminc.integration.spec-NNSQGBRI.js +678 -0
- package/dist/customdata.inputui-RRTQK7OK.js +289 -0
- package/dist/dataDownload-SOUCBKXM.js +330 -0
- package/dist/dataDownload.integration.spec-C6TLWSSO.js +193 -0
- package/dist/databrowser.ui-KLFEU5QA.js +433 -0
- package/dist/dictionary-RUT5VXDD.js +118 -0
- package/dist/dictionary-RUT5VXDD.js.map +7 -0
- package/dist/dnaMethylation-WOKGG33W.js +38 -0
- package/dist/dnaMethylation.integration.spec-YUPP42UK.js +203 -0
- package/dist/dofetch-V7PLLWSO.js +51 -0
- package/dist/e2pca-VT7EM4E3.js +350 -0
- package/dist/ep-X6B43UXE.js +1256 -0
- package/dist/expclust.gdc.spec-DTBFOXBC.js +307 -0
- package/dist/facet-T5ZX7ZGV.js +521 -0
- package/dist/forms2-S5OGBFKL.js +539 -0
- package/dist/forms2-S5OGBFKL.js.map +7 -0
- package/dist/gb-TWXREZIP.js +88 -0
- package/dist/geneExpClustering-2G6YDCIN.js +249 -0
- package/dist/geneExpression-2A4ZPT7K.js +38 -0
- package/dist/geneExpression-ZHQH6SNA.js +313 -0
- package/dist/geneExpression.unit.spec-2M223S4P.js +102 -0
- package/dist/geneORA-YLIRUMCZ.js +278 -0
- package/dist/geneRanking-JDJXNGEC.js +551 -0
- package/dist/geneVariant-5ZIOT5BT.js +39 -0
- package/dist/geneVariant-GIXIMJ2I.js +41 -0
- package/dist/geneVariant.integration.spec-QCROW73S.js +198 -0
- package/dist/genefusion.ui-56UQLUKJ.js +309 -0
- package/dist/geneset-ACRMGBJO.js +208 -0
- package/dist/genomeBrowser.spec-EDILOQON.js +281 -0
- package/dist/grin2-5P7CYUT7.js +1560 -0
- package/dist/grin2-GNB35CMF.js +871 -0
- package/dist/grin2-GNB35CMF.js.map +7 -0
- package/dist/gsea-2PQ5HNNT.js +47 -0
- package/dist/hierCluster-H5HB7FPW.js +63 -0
- package/dist/hierCluster-L3LCP2II.js +59 -0
- package/dist/hierCluster.config-6UIJWCND.js +40 -0
- package/dist/hierCluster.integration.spec-EVAPT2VF.js +395 -0
- package/dist/hierCluster.interactivity-7MW6ZT6O.js +54 -0
- package/dist/hierCluster.renderers-F34EVY5J.js +21 -0
- package/dist/imagePlot-RSFZ2OKD.js +163 -0
- package/dist/importPlot-DQFWY5A7.js +8 -0
- package/dist/isoformExpression-2KANPCBH.js +40 -0
- package/dist/isoformExpression.unit.spec-6FSMHT4K.js +208 -0
- package/dist/launch.adhoc-ZYTIRVIC.js +42 -0
- package/dist/leftlabel.sample-66U6MHPN.js +260 -0
- package/dist/legacyDataset-TNIIJABK.js +119 -0
- package/dist/lollipop-PJDUFWEY.js +171 -0
- package/dist/maf-DLJHCKHJ.js +452 -0
- package/dist/maftimeline-NK5QYJMJ.js +593 -0
- package/dist/matrix-7BFYR6QL.js +63 -0
- package/dist/matrix-USAB2CHO.js +58 -0
- package/dist/matrix.cells-OTAXAJ4N.js +28 -0
- package/dist/matrix.config-AL4WSFZ7.js +41 -0
- package/dist/matrix.data-BDHCSN2G.js +25 -0
- package/dist/matrix.groups-MV2D2636.js +27 -0
- package/dist/matrix.integration.spec-DESORC2Y.js +3072 -0
- package/dist/matrix.interactivity-H7EJW3P2.js +42 -0
- package/dist/matrix.layout-7CAS2IBO.js +44 -0
- package/dist/matrix.legend-JDVG2JDF.js +22 -0
- package/dist/matrix.renderers-PDR5FIBC.js +38 -0
- package/dist/matrix.serieses-QVDS5HKK.js +21 -0
- package/dist/matrix.sort-HCK4CSTJ.js +27 -0
- package/dist/matrix.sort.unit.spec-2GC4E26N.js +472 -0
- package/dist/matrix.sorterUi-XGBQOPG4.js +18 -0
- package/dist/matrix.sorterUi.unit.spec-BJQKDU2F.js +342 -0
- package/dist/mavb-6E6Z4LPK.js +732 -0
- package/dist/mds.fimo-5P2TK5U4.js +518 -0
- package/dist/mds.samplescatterplot-KLKOD4AS.js +1550 -0
- package/dist/mds.survivalplot-SWQCOFIU.js +483 -0
- package/dist/numericDictTermCluster-WIVO33AV.js +72 -0
- package/dist/oncomatrix-SDUUQZCK.js +295 -0
- package/dist/oncomatrix.spec-YGQYIUDT.js +448 -0
- package/dist/plot.2dvaf-K53KTP5W.js +377 -0
- package/dist/plot.app-FNJVWLPQ.js +41 -0
- package/dist/plot.barplot-VTC3N6BR.js +102 -0
- package/dist/plot.boxplot-RJFGQSLA.js +152 -0
- package/dist/plot.brainImaging-6KVNPPMT.js +51 -0
- package/dist/plot.disco-ZFH5RK6B.js +102 -0
- package/dist/plot.dzi-IA2SOFUD.js +33 -0
- package/dist/plot.ssgq-QARGQVKB.js +139 -0
- package/dist/plot.vaf2cov-2JUXYCPG.js +259 -0
- package/dist/plot.wsi-C2DULA7U.js +36 -0
- package/dist/polar2-3HS3QBU6.js +231 -0
- package/dist/polar2-3HS3QBU6.js.map +7 -0
- package/dist/profileForms-Y6ZBMZWQ.js +446 -0
- package/dist/profileForms-Y6ZBMZWQ.js.map +7 -0
- package/dist/profilePlot-SVI3QKMD.js +54 -0
- package/dist/proteinView-YPFJSBL7.js +1556 -0
- package/dist/proteinView-YPFJSBL7.js.map +7 -0
- package/dist/qualitative-AQFKAZID.js +43 -0
- package/dist/radar2-TTQZLARY.js +326 -0
- package/dist/radar2-TTQZLARY.js.map +7 -0
- package/dist/radarFacility2-YGS56QUA.js +334 -0
- package/dist/radarFacility2-YGS56QUA.js.map +7 -0
- package/dist/regression-DLPBCDZT.js +56 -0
- package/dist/regression.inputs-42LY4MEZ.js +48 -0
- package/dist/regression.inputs.term-TTUFFPG6.js +48 -0
- package/dist/regression.inputs.values.table-CJAPTSMS.js +45 -0
- package/dist/regression.integration.spec-UDA26OGS.js +784 -0
- package/dist/regression.results-IA3C7SHR.js +40 -0
- package/dist/regression.spec-HEXCL3QV.js +708 -0
- package/dist/report-4CFOWNPJ.js +222 -0
- package/dist/sampleScatter.spec-N6V4BQ5Q.js +202 -0
- package/dist/sampleView-CZF7U23I.js +48 -0
- package/dist/samplelst-XUGDS5TU.js +111 -0
- package/dist/samplematrix-R5PZLZDE.js +2198 -0
- package/dist/sc-WTZZA5J5.js +86 -0
- package/dist/scatter-EY7HQVCO.js +851 -0
- package/dist/scatter-EY7HQVCO.js.map +7 -0
- package/dist/scatter.integration.spec-CRMLFO4J.js +1206 -0
- package/dist/scatter.integration.spec-CRMLFO4J.js.map +7 -0
- package/dist/selectGenomeWithTklst-2S2MXVCI.js +134 -0
- package/dist/singleCellCellType-LJWFG7MY.js +38 -0
- package/dist/singleCellCellType.unit.spec-RGN2XVUR.js +160 -0
- package/dist/singleCellGeneExpression-IW2QXTTU.js +38 -0
- package/dist/singleCellGeneExpression.unit.spec-4PO3Q7TM.js +153 -0
- package/dist/singleCellPlot-6EZ6JXCM.js +54 -0
- package/dist/singlecell-3LFPQ6KO.js +86 -0
- package/dist/singlecell-NTTAVVMR.js +1572 -0
- package/dist/snp-XB4IBG4Z.js +38 -0
- package/dist/snp.unit.spec-HAJPM53L.js +176 -0
- package/dist/snplocus-HE6TITSX.js +208 -0
- package/dist/spliceevent.a53ss.diagram-TCZMBMD7.js +151 -0
- package/dist/spliceevent.exonskip.diagram-VESOF6UC.js +277 -0
- package/dist/spliceevent.noeventdiagram-4K7FMO4F.js +460 -0
- package/dist/ssGSEA-2XYMX36P.js +38 -0
- package/dist/ssGSEA.unit.spec-J36KM2HO.js +88 -0
- package/dist/summarizeCnvGeneexp-LYVDZXXD.js +163 -0
- package/dist/summarizeGeneexpSurvival-Y52TGAHF.js +108 -0
- package/dist/summarizeMutationCnv-6EEJT3PV.js +164 -0
- package/dist/summarizeMutationDiagnosis-HZKXHOOQ.js +40 -0
- package/dist/summarizeMutationSurvival-TU7TQYFQ.js +99 -0
- package/dist/summary-4QQZUAMU.js +49 -0
- package/dist/summary.integration.spec-SLIIM4HN.js +414 -0
- package/dist/summaryInput-6HROPKCE.js +235 -0
- package/dist/sunburst-MBJJPERL.js +284 -0
- package/dist/survival-CXLMQSV2.js +58 -0
- package/dist/survival-QSL2KDKD.js +46 -0
- package/dist/survival.integration.spec-EUAAALVW.js +821 -0
- package/dist/svgraph-JM5MHQDX.js +1387 -0
- package/dist/svmr-MCMST2FL.js +3842 -0
- package/dist/table-MVX3IMAL.js +200 -0
- package/dist/termCollection-FZ2SCVA7.js +38 -0
- package/dist/termCollection-IGC7REFK.js +179 -0
- package/dist/termCollection.unit.spec-VY2EZZIP.js +208 -0
- package/dist/tk-5F3TWZ2G.js +46 -0
- package/dist/tp.ui-IURWTMAS.js +1459 -0
- package/dist/tvs.dt-BPZCFPYK.js +39 -0
- package/dist/tvs.dtcnv.categorical-UFS62DTR.js +40 -0
- package/dist/tvs.dtcnv.continuous-R6YXNNLA.js +72 -0
- package/dist/tvs.dtfusion-FGXXS4XX.js +40 -0
- package/dist/tvs.dtsnvindel-DR43K7X3.js +40 -0
- package/dist/tvs.dtsv-NO34GIOL.js +40 -0
- package/dist/tvs.numeric-KYAU5OV3.js +21 -0
- package/dist/tvs.samplelst-2QP7IV2Y.js +104 -0
- package/dist/tvs.termCollection-UEJDG22G.js +159 -0
- package/dist/violin-NBZTGGYF.js +46 -0
- package/dist/violin.integration.spec-5CLYJSAR.js +1425 -0
- package/dist/violin.interactivity-KXVKTT22.js +38 -0
- package/dist/violin.renderer-37OF6K7Q.js +40 -0
- package/dist/vocabulary-GR6J3VKW.js +41 -0
- package/package.json +3 -3
- package/dist/2dmaf-Z3D2M3FB.js +0 -1373
- package/dist/AIProjectAdmin-2OQOQXH4.js +0 -956
- package/dist/AIProjectAdmin-2OQOQXH4.js.map +0 -7
- package/dist/AppHeader-PXLGVCVS.js +0 -835
- package/dist/BoxPlot-PUZKHACO.js +0 -1211
- package/dist/BoxPlot-PUZKHACO.js.map +0 -7
- package/dist/CorrelationVolcano-RO6CFLZA.js +0 -619
- package/dist/DE-CCA5SBJG.js +0 -95
- package/dist/DEinput-MRUQW6X6.js +0 -301
- package/dist/DifferentialAnalysis-5YQQLJKR.js +0 -245
- package/dist/Disco-4FTOJBLG.js +0 -3237
- package/dist/Disco-4FTOJBLG.js.map +0 -7
- package/dist/Disco.UI-IWVSK3RN.js +0 -245
- package/dist/Disco.UI-IWVSK3RN.js.map +0 -7
- package/dist/DmrPlot-FPJJHTM5.js +0 -642
- package/dist/GB-H6JETPRC.js +0 -1130
- package/dist/GeneExpInput-Q42COANS.js +0 -366
- package/dist/GeneExpInput-Q42COANS.js.map +0 -7
- package/dist/HicApp-BBD2YOMT.js +0 -2250
- package/dist/NumBinaryEditor-WMSF7HIO.js +0 -271
- package/dist/NumBinaryEditor.unit.spec-QQATLHF7.js +0 -286
- package/dist/NumContEditor-4CSTHVRX.js +0 -109
- package/dist/NumContEditor.unit.spec-2YF3OS3A.js +0 -169
- package/dist/NumCustomBinEditor-KFAYUWYV.js +0 -38
- package/dist/NumCustomBinEditor.unit.spec-YHAUSGPN.js +0 -284
- package/dist/NumDiscreteEditor-F46H5CME.js +0 -179
- package/dist/NumDiscreteEditor.unit.spec-5BIAWAVN.js +0 -202
- package/dist/NumRegularBinEditor-G7KOA7NR.js +0 -38
- package/dist/NumRegularBinEditor.unit.spec-Y6CBCWLN.js +0 -227
- package/dist/NumSplineEditor-JP2V2L4Y.js +0 -198
- package/dist/NumSplineEditor.unit.spec-N34QBZN3.js +0 -199
- package/dist/NumericDensity-JOPHLURB.js +0 -38
- package/dist/NumericDensity.unit.spec-N45PCLOT.js +0 -221
- package/dist/NumericHandler-SIM4E2Z5.js +0 -39
- package/dist/NumericHandler.unit.spec-NKLYDVTG.js +0 -219
- package/dist/ProteomeInput-5KMNE3PZ.js +0 -396
- package/dist/RunChart2-N7AZVQXJ.js +0 -758
- package/dist/SC-M6RGALZM.js +0 -936
- package/dist/SC-M6RGALZM.js.map +0 -7
- package/dist/Volcano-YH4RJTT5.js +0 -1379
- package/dist/WSIViewer-7LOVM3AU.js +0 -48508
- package/dist/WSIViewer-7LOVM3AU.js.map +0 -7
- package/dist/WsiSamplesPlot-QPPB7OOD.js +0 -165
- package/dist/adSandbox-R2QP74P7.js +0 -38
- package/dist/app-AIIN4WDE.js +0 -37
- package/dist/app-FJT5VXMF.js +0 -49
- package/dist/bam-QBO22VQB.js +0 -860
- package/dist/barchart-VDOP6FQU.js +0 -47
- package/dist/barchart.data-Z2E72EET.js +0 -22
- package/dist/barchart.events-NUYQBI5S.js +0 -47
- package/dist/barchart.integration.spec-COVZPXMH.js +0 -1980
- package/dist/barchart2-KMSU4ROO.js +0 -311
- package/dist/barchart2-KMSU4ROO.js.map +0 -7
- package/dist/bars.renderer-JHCZDSM6.js +0 -12
- package/dist/block-TTN2IQAH.js +0 -6202
- package/dist/block-TTN2IQAH.js.map +0 -7
- package/dist/block.init-RRHHCNSR.js +0 -38
- package/dist/block.mds.expressionrank-7NWBRUII.js +0 -359
- package/dist/block.mds.geneboxplot-4BAJJWCC.js +0 -828
- package/dist/block.mds.junction-XRUIHAF5.js +0 -1545
- package/dist/block.mds.svcnv-YZ7PL733.js +0 -6801
- package/dist/block.svg-FUMP2J7A.js +0 -164
- package/dist/block.tk.aicheck-AIZEND45.js +0 -283
- package/dist/block.tk.ase-H26PKO5U.js +0 -365
- package/dist/block.tk.bam-XNZFHSDQ.js +0 -1906
- package/dist/block.tk.bedgraphdot-QTDBLBO2.js +0 -384
- package/dist/block.tk.bigwig.ui-OSRCPTQC.js +0 -212
- package/dist/block.tk.hicstraw-7GH6LVIH.js +0 -823
- package/dist/block.tk.junction-AJYML4AW.js +0 -2364
- package/dist/block.tk.junction.textmatrixui-4RIH3EZI.js +0 -199
- package/dist/block.tk.ld-AJYQ4C6T.js +0 -99
- package/dist/block.tk.menu-57OP5UW5.js +0 -1029
- package/dist/block.tk.pgv-XO7HP5MM.js +0 -944
- package/dist/brainImaging-65QDNR4D.js +0 -423
- package/dist/chunk-2XCUERHJ.js +0 -102
- package/dist/chunk-322QC6R4.js +0 -222
- package/dist/chunk-35SCELN4.js +0 -217
- package/dist/chunk-36EHIPV4.js +0 -514
- package/dist/chunk-3SZ6GKLB.js +0 -14
- package/dist/chunk-3ZLJDFJU.js +0 -368
- package/dist/chunk-4DXZGZOB.js +0 -54
- package/dist/chunk-4UWS5Y3N.js +0 -1438
- package/dist/chunk-4UWS5Y3N.js.map +0 -7
- package/dist/chunk-54EMVNPW.js +0 -102
- package/dist/chunk-57RBC6IZ.js +0 -302
- package/dist/chunk-5OUTR67M.js +0 -37
- package/dist/chunk-67DBIM6H.js +0 -293
- package/dist/chunk-67DBIM6H.js.map +0 -7
- package/dist/chunk-6A3IPDE2.js +0 -1943
- package/dist/chunk-6GN7X6LU.js +0 -2681
- package/dist/chunk-72X7LSBN.js +0 -54
- package/dist/chunk-74ZU4BT6.js +0 -2824
- package/dist/chunk-74ZU4BT6.js.map +0 -7
- package/dist/chunk-7EMWHCVW.js +0 -1825
- package/dist/chunk-7FACFCZK.js +0 -226
- package/dist/chunk-7XFGYYRV.js +0 -371
- package/dist/chunk-7XFGYYRV.js.map +0 -7
- package/dist/chunk-B6CSYKZJ.js +0 -1275
- package/dist/chunk-BDIKFVWZ.js +0 -443
- package/dist/chunk-BDIKFVWZ.js.map +0 -7
- package/dist/chunk-BWGU5NJS.js +0 -291
- package/dist/chunk-C5ZMAQXQ.js +0 -1173
- package/dist/chunk-C5ZMAQXQ.js.map +0 -7
- package/dist/chunk-CC3GFVV6.js +0 -117
- package/dist/chunk-CXQ6KS3Z.js +0 -1348
- package/dist/chunk-CXQ6KS3Z.js.map +0 -7
- package/dist/chunk-DCH54HC5.js +0 -824
- package/dist/chunk-DCH54HC5.js.map +0 -7
- package/dist/chunk-DD4R5P6W.js +0 -177
- package/dist/chunk-DKVUOBIE.js +0 -203
- package/dist/chunk-DR6H3QAA.js +0 -399
- package/dist/chunk-EH4NQ7C4.js +0 -170
- package/dist/chunk-EVN6KWPN.js +0 -50
- package/dist/chunk-FFEIP5CT.js +0 -458
- package/dist/chunk-FFEIP5CT.js.map +0 -7
- package/dist/chunk-FJP77STI.js +0 -158
- package/dist/chunk-FJP77STI.js.map +0 -7
- package/dist/chunk-G6O3URDN.js +0 -467
- package/dist/chunk-GNIK4JYM.js +0 -534
- package/dist/chunk-HKSNADSX.js +0 -477
- package/dist/chunk-I5RAQKKJ.js +0 -129
- package/dist/chunk-IW57W7EQ.js +0 -1210
- package/dist/chunk-IW57W7EQ.js.map +0 -7
- package/dist/chunk-J4SOF2ZH.js +0 -263
- package/dist/chunk-KPJZBCVI.js +0 -272
- package/dist/chunk-KSGA62R2.js +0 -2878
- package/dist/chunk-LTOBEUM2.js +0 -98
- package/dist/chunk-MYF2BWKC.js +0 -205
- package/dist/chunk-MYF2BWKC.js.map +0 -7
- package/dist/chunk-N2SKTCDK.js +0 -148
- package/dist/chunk-NGM3ZLIP.js +0 -230
- package/dist/chunk-NOEAT6CX.js +0 -317
- package/dist/chunk-NOEAT6CX.js.map +0 -7
- package/dist/chunk-NSXZPWRP.js +0 -482
- package/dist/chunk-O3JB4PIX.js +0 -31
- package/dist/chunk-OAWQ6LOO.js +0 -2063
- package/dist/chunk-OAWQ6LOO.js.map +0 -7
- package/dist/chunk-ODG6RD7P.js +0 -254
- package/dist/chunk-OEDZHPBJ.js +0 -58
- package/dist/chunk-ORL44TIK.js +0 -386
- package/dist/chunk-P3IENRWJ.js +0 -613
- package/dist/chunk-P3IENRWJ.js.map +0 -7
- package/dist/chunk-PCZNTK74.js +0 -26
- package/dist/chunk-QH6W3NVF.js +0 -287
- package/dist/chunk-QNETLNPB.js +0 -343
- package/dist/chunk-QQZ3SBF3.js +0 -216
- package/dist/chunk-R2MMURGK.js +0 -2786
- package/dist/chunk-SA7APTJR.js +0 -20792
- package/dist/chunk-SA7APTJR.js.map +0 -7
- package/dist/chunk-SHWLROJG.js +0 -283
- package/dist/chunk-SKREEF3H.js +0 -184
- package/dist/chunk-SKREEF3H.js.map +0 -7
- package/dist/chunk-TOU7EVFQ.js +0 -396
- package/dist/chunk-TOU7EVFQ.js.map +0 -7
- package/dist/chunk-UGVNZMLU.js +0 -4274
- package/dist/chunk-UGVNZMLU.js.map +0 -7
- package/dist/chunk-UI7OCM2A.js +0 -815
- package/dist/chunk-UJKW42DI.js +0 -6364
- package/dist/chunk-ULPMYS5B.js +0 -100
- package/dist/chunk-UOVALHAJ.js +0 -182
- package/dist/chunk-VGJSASRT.js +0 -446
- package/dist/chunk-VGYTAYFK.js +0 -276
- package/dist/chunk-VHOEJBFP.js +0 -736
- package/dist/chunk-VOUMS6IP.js +0 -1102
- package/dist/chunk-VV36JRUF.js +0 -381
- package/dist/chunk-W55XSG6K.js +0 -142
- package/dist/chunk-W6ME65LV.js +0 -34
- package/dist/chunk-WHI6466S.js +0 -146
- package/dist/chunk-WSDUD52Y.js +0 -55
- package/dist/chunk-XAVNZNXQ.js +0 -95
- package/dist/chunk-XMLURPEP.js +0 -194
- package/dist/chunk-YKXUK7HJ.js +0 -5041
- package/dist/chunk-YKXUK7HJ.js.map +0 -7
- package/dist/chunk-YZK37YCC.js +0 -119
- package/dist/chunk-ZTYNN6G5.js +0 -2327
- package/dist/chunk-ZXTHADSC.js +0 -158
- package/dist/condition-HDVYPJJD.js +0 -332
- package/dist/controls-YEEW46C6.js +0 -41
- package/dist/controls.config-C535H5DL.js +0 -39
- package/dist/correlation-AOSSSSL3.js +0 -99
- package/dist/correlation-AOSSSSL3.js.map +0 -7
- package/dist/cuminc-II7NFIFP.js +0 -1149
- package/dist/cuminc.integration.spec-B4N6OMBJ.js +0 -678
- package/dist/customdata.inputui-AI4ZBIEP.js +0 -289
- package/dist/dataDownload-ZQYLXN6D.js +0 -330
- package/dist/dataDownload.integration.spec-2PKYZ2AY.js +0 -193
- package/dist/databrowser.ui-WGD7D3XV.js +0 -433
- package/dist/dictionary-RYM4WP2W.js +0 -111
- package/dist/dictionary-RYM4WP2W.js.map +0 -7
- package/dist/dnaMethylation-WGJMJL5B.js +0 -38
- package/dist/dnaMethylation.integration.spec-DO3PV4MO.js +0 -203
- package/dist/dofetch-RADX3AFU.js +0 -51
- package/dist/e2pca-KOAAU2JX.js +0 -350
- package/dist/ep-CXCATXYH.js +0 -1256
- package/dist/expclust.gdc.spec-UJO2R3CW.js +0 -307
- package/dist/facet-2FBUAD7P.js +0 -521
- package/dist/forms2-ZBT5BZW3.js +0 -534
- package/dist/forms2-ZBT5BZW3.js.map +0 -7
- package/dist/gb-VCJFV63W.js +0 -88
- package/dist/geneExpClustering-FUNS6D2P.js +0 -249
- package/dist/geneExpression-2BWWGYL4.js +0 -38
- package/dist/geneExpression-2OPFWV2K.js +0 -313
- package/dist/geneExpression.unit.spec-G7BSHJQT.js +0 -102
- package/dist/geneORA-S3KQMBYL.js +0 -278
- package/dist/geneRanking-UZ36XAL7.js +0 -551
- package/dist/geneVariant-OOZ2SBXO.js +0 -41
- package/dist/geneVariant-ZHNVEKQ6.js +0 -39
- package/dist/geneVariant.integration.spec-2C7EWKEV.js +0 -198
- package/dist/genefusion.ui-ASICJNII.js +0 -309
- package/dist/geneset-SNM4M6UM.js +0 -208
- package/dist/genomeBrowser.spec-DJIRW2X7.js +0 -281
- package/dist/grin2-7AOJP5QJ.js +0 -1560
- package/dist/grin2-RKJXYWJ5.js +0 -821
- package/dist/grin2-RKJXYWJ5.js.map +0 -7
- package/dist/gsea-SPTQJW67.js +0 -47
- package/dist/hierCluster-KDE5SMYP.js +0 -63
- package/dist/hierCluster-XG4YLVL3.js +0 -59
- package/dist/hierCluster.config-VNEEJCKJ.js +0 -40
- package/dist/hierCluster.integration.spec-SSDN7LSH.js +0 -395
- package/dist/hierCluster.interactivity-DKBSJ644.js +0 -54
- package/dist/hierCluster.renderers-OG6LZAT7.js +0 -21
- package/dist/imagePlot-M5JSHEY4.js +0 -163
- package/dist/importPlot-YH7ZY6RJ.js +0 -8
- package/dist/isoformExpression-EV27MKYZ.js +0 -40
- package/dist/isoformExpression.unit.spec-7T2GOHH3.js +0 -208
- package/dist/launch.adhoc-NOISOX5E.js +0 -42
- package/dist/leftlabel.sample-42AX4KTV.js +0 -260
- package/dist/legacyDataset-SWJCAWIR.js +0 -119
- package/dist/lollipop-LQCQBTSX.js +0 -171
- package/dist/maf-U237OWZ3.js +0 -452
- package/dist/maftimeline-NLZLMHT2.js +0 -593
- package/dist/matrix-DZJXYRYN.js +0 -63
- package/dist/matrix-Y5345QQG.js +0 -58
- package/dist/matrix.cells-PT7S74QP.js +0 -28
- package/dist/matrix.config-2ORCUWKX.js +0 -41
- package/dist/matrix.data-C6VPQJJ4.js +0 -25
- package/dist/matrix.groups-CEOCG2CT.js +0 -27
- package/dist/matrix.integration.spec-U4B3JB6N.js +0 -3072
- package/dist/matrix.interactivity-GFLIFIER.js +0 -42
- package/dist/matrix.layout-DOVDHTDX.js +0 -44
- package/dist/matrix.legend-JE4ZSLP7.js +0 -22
- package/dist/matrix.renderers-GPUJQ7KF.js +0 -38
- package/dist/matrix.serieses-REE4DCSR.js +0 -21
- package/dist/matrix.sort-VD5URUWY.js +0 -27
- package/dist/matrix.sort.unit.spec-4IOFVHJN.js +0 -472
- package/dist/matrix.sorterUi-VQYY6KBK.js +0 -18
- package/dist/matrix.sorterUi.unit.spec-V5O2EJBX.js +0 -342
- package/dist/mavb-SQDA3B2B.js +0 -732
- package/dist/mds.fimo-ZJSEPLD7.js +0 -518
- package/dist/mds.samplescatterplot-Y5V73GOY.js +0 -1550
- package/dist/mds.survivalplot-CZBRMHYN.js +0 -483
- package/dist/numericDictTermCluster-TFXBBUVI.js +0 -72
- package/dist/oncomatrix-ZILACPPI.js +0 -295
- package/dist/oncomatrix.spec-RLIVVVD6.js +0 -448
- package/dist/plot.2dvaf-BNRZPIKU.js +0 -377
- package/dist/plot.app-NRUARQCN.js +0 -41
- package/dist/plot.barplot-342AYQC7.js +0 -102
- package/dist/plot.boxplot-OHEJDPTW.js +0 -152
- package/dist/plot.brainImaging-KV72PAON.js +0 -51
- package/dist/plot.disco-OUE4RFHL.js +0 -102
- package/dist/plot.dzi-T3GPUH36.js +0 -33
- package/dist/plot.ssgq-WJHGMXW5.js +0 -139
- package/dist/plot.vaf2cov-NGD5PCV4.js +0 -259
- package/dist/plot.wsi-2MU5BDG3.js +0 -36
- package/dist/polar2-YCWPBPFU.js +0 -226
- package/dist/polar2-YCWPBPFU.js.map +0 -7
- package/dist/profileForms-OV3I6RK7.js +0 -441
- package/dist/profileForms-OV3I6RK7.js.map +0 -7
- package/dist/profilePlot-OMVO3K4H.js +0 -54
- package/dist/proteinView-OAR2RC6U.js +0 -1320
- package/dist/proteinView-OAR2RC6U.js.map +0 -7
- package/dist/qualitative-MEYBRUC6.js +0 -43
- package/dist/radar2-KREAMGVV.js +0 -321
- package/dist/radar2-KREAMGVV.js.map +0 -7
- package/dist/radarFacility2-DBPEV7VC.js +0 -329
- package/dist/radarFacility2-DBPEV7VC.js.map +0 -7
- package/dist/regression-ZPDPLI6G.js +0 -56
- package/dist/regression.inputs-QOSBAGL6.js +0 -48
- package/dist/regression.inputs.term-HMUMPY7X.js +0 -48
- package/dist/regression.inputs.values.table-VMCTZHLG.js +0 -45
- package/dist/regression.integration.spec-RP74JTAA.js +0 -784
- package/dist/regression.results-5XC6M67C.js +0 -40
- package/dist/regression.spec-EZYM24J7.js +0 -708
- package/dist/report-ZOVQCOGQ.js +0 -222
- package/dist/sampleScatter.spec-CD52FEOC.js +0 -202
- package/dist/sampleView-SVTLSWRG.js +0 -48
- package/dist/samplelst-HXF5POJD.js +0 -111
- package/dist/samplematrix-NYDAH74I.js +0 -2198
- package/dist/sc-JIDT4W4K.js +0 -86
- package/dist/scatter-WNRTPSEE.js +0 -849
- package/dist/scatter-WNRTPSEE.js.map +0 -7
- package/dist/scatter.integration.spec-3EYTPY5B.js +0 -1197
- package/dist/scatter.integration.spec-3EYTPY5B.js.map +0 -7
- package/dist/selectGenomeWithTklst-OSB7B6L3.js +0 -134
- package/dist/singleCellCellType-3BH7LWQ6.js +0 -38
- package/dist/singleCellCellType.unit.spec-RU4RJXFF.js +0 -160
- package/dist/singleCellGeneExpression-3UA4YER7.js +0 -38
- package/dist/singleCellGeneExpression.unit.spec-4ZTBG37H.js +0 -153
- package/dist/singleCellPlot-ZUAWK5RE.js +0 -54
- package/dist/singlecell-BGJZB7MF.js +0 -86
- package/dist/singlecell-RO3BL5OO.js +0 -1572
- package/dist/snp-HD7VQKBR.js +0 -38
- package/dist/snp.unit.spec-ISXCLMWW.js +0 -176
- package/dist/snplocus-IL5Z4XWV.js +0 -208
- package/dist/spliceevent.a53ss.diagram-LLJSPV7M.js +0 -151
- package/dist/spliceevent.exonskip.diagram-LAOIOIST.js +0 -277
- package/dist/spliceevent.noeventdiagram-MVA7Q3HT.js +0 -460
- package/dist/ssGSEA-7T6S3DSE.js +0 -38
- package/dist/ssGSEA.unit.spec-XJ3W4NWX.js +0 -88
- package/dist/summarizeCnvGeneexp-RRP6JUV6.js +0 -163
- package/dist/summarizeGeneexpSurvival-AFLHDD6Q.js +0 -108
- package/dist/summarizeMutationCnv-NABUYHMX.js +0 -164
- package/dist/summarizeMutationDiagnosis-2LQ7JU3K.js +0 -40
- package/dist/summarizeMutationSurvival-3WBT5TXG.js +0 -99
- package/dist/summary-FRDKOFXW.js +0 -49
- package/dist/summary.integration.spec-ZLRIA7G2.js +0 -414
- package/dist/summaryInput-4JO6MHP4.js +0 -235
- package/dist/sunburst-DRCVSC2X.js +0 -284
- package/dist/survival-AK75COPY.js +0 -58
- package/dist/survival-IF5NI3A6.js +0 -46
- package/dist/survival.integration.spec-7IWBTPJG.js +0 -821
- package/dist/svgraph-QBDF2SLB.js +0 -1387
- package/dist/svmr-O4GJJUT2.js +0 -3842
- package/dist/table-FQAIXKLE.js +0 -200
- package/dist/termCollection-GMDDL3L7.js +0 -179
- package/dist/termCollection-ZO5PZ7E3.js +0 -38
- package/dist/termCollection.unit.spec-5JBCTXHX.js +0 -208
- package/dist/tk-GJX23IV7.js +0 -46
- package/dist/tp.ui-T7FVMTGQ.js +0 -1459
- package/dist/tvs.dt-X7L7NSU6.js +0 -39
- package/dist/tvs.dtcnv.categorical-73G2V6CH.js +0 -40
- package/dist/tvs.dtcnv.continuous-DWFJL3X7.js +0 -72
- package/dist/tvs.dtfusion-HQADHCSV.js +0 -40
- package/dist/tvs.dtsnvindel-PY5OBMGW.js +0 -40
- package/dist/tvs.dtsv-OTBEEWSW.js +0 -40
- package/dist/tvs.numeric-WGDHEBJV.js +0 -21
- package/dist/tvs.samplelst-LCXSU5MG.js +0 -104
- package/dist/tvs.termCollection-L527XN4X.js +0 -159
- package/dist/violin-6VKRUQV3.js +0 -46
- package/dist/violin.integration.spec-RJATDLQH.js +0 -1425
- package/dist/violin.interactivity-SKF5H7MN.js +0 -38
- package/dist/violin.renderer-GB4TPX3B.js +0 -40
- package/dist/vocabulary-D3W44IWE.js +0 -41
- /package/dist/{2dmaf-Z3D2M3FB.js.map → 2dmaf-BNMEUJVM.js.map} +0 -0
- /package/dist/{AppHeader-PXLGVCVS.js.map → AppHeader-RXDJBHXZ.js.map} +0 -0
- /package/dist/{CorrelationVolcano-RO6CFLZA.js.map → CorrelationVolcano-V2E566XL.js.map} +0 -0
- /package/dist/{DE-CCA5SBJG.js.map → DE-7YUZSW4E.js.map} +0 -0
- /package/dist/{DEinput-MRUQW6X6.js.map → DEinput-P2HOQC4Z.js.map} +0 -0
- /package/dist/{DifferentialAnalysis-5YQQLJKR.js.map → DifferentialAnalysis-2Z6BHS7A.js.map} +0 -0
- /package/dist/{DmrPlot-FPJJHTM5.js.map → DmrPlot-OEJRGNI3.js.map} +0 -0
- /package/dist/{GB-H6JETPRC.js.map → GB-2GHDD3MW.js.map} +0 -0
- /package/dist/{HicApp-BBD2YOMT.js.map → HicApp-CAYC4DPO.js.map} +0 -0
- /package/dist/{NumBinaryEditor-WMSF7HIO.js.map → NumBinaryEditor-EUOYSGPM.js.map} +0 -0
- /package/dist/{NumBinaryEditor.unit.spec-QQATLHF7.js.map → NumBinaryEditor.unit.spec-5B3W4B4F.js.map} +0 -0
- /package/dist/{NumContEditor-4CSTHVRX.js.map → NumContEditor-7KK6CIB3.js.map} +0 -0
- /package/dist/{NumContEditor.unit.spec-2YF3OS3A.js.map → NumContEditor.unit.spec-IMKGVYFZ.js.map} +0 -0
- /package/dist/{NumCustomBinEditor-KFAYUWYV.js.map → NumCustomBinEditor-PDAF6I7B.js.map} +0 -0
- /package/dist/{NumCustomBinEditor.unit.spec-YHAUSGPN.js.map → NumCustomBinEditor.unit.spec-IU3DPECJ.js.map} +0 -0
- /package/dist/{NumDiscreteEditor-F46H5CME.js.map → NumDiscreteEditor-YTKUHG6Z.js.map} +0 -0
- /package/dist/{NumDiscreteEditor.unit.spec-5BIAWAVN.js.map → NumDiscreteEditor.unit.spec-FUBS7Z7Z.js.map} +0 -0
- /package/dist/{NumRegularBinEditor-G7KOA7NR.js.map → NumRegularBinEditor-LU3KLBLY.js.map} +0 -0
- /package/dist/{NumRegularBinEditor.unit.spec-Y6CBCWLN.js.map → NumRegularBinEditor.unit.spec-2BKOHI7L.js.map} +0 -0
- /package/dist/{NumSplineEditor-JP2V2L4Y.js.map → NumSplineEditor-56RJ2HT2.js.map} +0 -0
- /package/dist/{NumSplineEditor.unit.spec-N34QBZN3.js.map → NumSplineEditor.unit.spec-PW6VUUBZ.js.map} +0 -0
- /package/dist/{NumericDensity-JOPHLURB.js.map → NumericDensity-EB4H54EF.js.map} +0 -0
- /package/dist/{NumericDensity.unit.spec-N45PCLOT.js.map → NumericDensity.unit.spec-LSEM4OEY.js.map} +0 -0
- /package/dist/{NumericHandler-SIM4E2Z5.js.map → NumericHandler-VGPDXP35.js.map} +0 -0
- /package/dist/{NumericHandler.unit.spec-NKLYDVTG.js.map → NumericHandler.unit.spec-NR3F7XHV.js.map} +0 -0
- /package/dist/{ProteomeInput-5KMNE3PZ.js.map → ProteomeInput-AUXWUIWK.js.map} +0 -0
- /package/dist/{RunChart2-N7AZVQXJ.js.map → RunChart2-SQ6TFOHD.js.map} +0 -0
- /package/dist/{Volcano-YH4RJTT5.js.map → Volcano-XHDH6UN7.js.map} +0 -0
- /package/dist/{WsiSamplesPlot-QPPB7OOD.js.map → WsiSamplesPlot-YUOAWG2A.js.map} +0 -0
- /package/dist/{adSandbox-R2QP74P7.js.map → adSandbox-VMMAL22L.js.map} +0 -0
- /package/dist/{app-AIIN4WDE.js.map → app-FX3KZ67X.js.map} +0 -0
- /package/dist/{app-FJT5VXMF.js.map → app-X7ZYEOZN.js.map} +0 -0
- /package/dist/{bam-QBO22VQB.js.map → bam-ZYLH4U5R.js.map} +0 -0
- /package/dist/{barchart-VDOP6FQU.js.map → barchart-MXSPTKV4.js.map} +0 -0
- /package/dist/{barchart.data-Z2E72EET.js.map → barchart.data-ZWF6EVJH.js.map} +0 -0
- /package/dist/{barchart.events-NUYQBI5S.js.map → barchart.events-XON2ANOC.js.map} +0 -0
- /package/dist/{barchart.integration.spec-COVZPXMH.js.map → barchart.integration.spec-PJIENJGT.js.map} +0 -0
- /package/dist/{bars.renderer-JHCZDSM6.js.map → bars.renderer-57KSYAAT.js.map} +0 -0
- /package/dist/{block.init-RRHHCNSR.js.map → block.init-IJBRPZNM.js.map} +0 -0
- /package/dist/{block.mds.expressionrank-7NWBRUII.js.map → block.mds.expressionrank-3DANCP7E.js.map} +0 -0
- /package/dist/{block.mds.geneboxplot-4BAJJWCC.js.map → block.mds.geneboxplot-CRGSCZMG.js.map} +0 -0
- /package/dist/{block.mds.junction-XRUIHAF5.js.map → block.mds.junction-4UIH2ZYN.js.map} +0 -0
- /package/dist/{block.mds.svcnv-YZ7PL733.js.map → block.mds.svcnv-NF4UIRR2.js.map} +0 -0
- /package/dist/{block.svg-FUMP2J7A.js.map → block.svg-AIZ47JCQ.js.map} +0 -0
- /package/dist/{block.tk.aicheck-AIZEND45.js.map → block.tk.aicheck-7HZFGE63.js.map} +0 -0
- /package/dist/{block.tk.ase-H26PKO5U.js.map → block.tk.ase-U3VNPZEA.js.map} +0 -0
- /package/dist/{block.tk.bam-XNZFHSDQ.js.map → block.tk.bam-4TQ7P2OX.js.map} +0 -0
- /package/dist/{block.tk.bedgraphdot-QTDBLBO2.js.map → block.tk.bedgraphdot-MYHKKO6K.js.map} +0 -0
- /package/dist/{block.tk.bigwig.ui-OSRCPTQC.js.map → block.tk.bigwig.ui-E3YVGIDN.js.map} +0 -0
- /package/dist/{block.tk.hicstraw-7GH6LVIH.js.map → block.tk.hicstraw-Y4XOMG7T.js.map} +0 -0
- /package/dist/{block.tk.junction-AJYML4AW.js.map → block.tk.junction-T5C7LK6F.js.map} +0 -0
- /package/dist/{block.tk.junction.textmatrixui-4RIH3EZI.js.map → block.tk.junction.textmatrixui-Z3ACCVXH.js.map} +0 -0
- /package/dist/{block.tk.ld-AJYQ4C6T.js.map → block.tk.ld-Y5KDA5AU.js.map} +0 -0
- /package/dist/{block.tk.menu-57OP5UW5.js.map → block.tk.menu-EWRRISDY.js.map} +0 -0
- /package/dist/{block.tk.pgv-XO7HP5MM.js.map → block.tk.pgv-3JYGOZVQ.js.map} +0 -0
- /package/dist/{brainImaging-65QDNR4D.js.map → brainImaging-P3AF3C5N.js.map} +0 -0
- /package/dist/{chunk-7EMWHCVW.js.map → chunk-2JR7RPB6.js.map} +0 -0
- /package/dist/{chunk-72X7LSBN.js.map → chunk-3FVIDQOX.js.map} +0 -0
- /package/dist/{chunk-VGJSASRT.js.map → chunk-3K2O2NIH.js.map} +0 -0
- /package/dist/{chunk-6GN7X6LU.js.map → chunk-3RSJU6YM.js.map} +0 -0
- /package/dist/{chunk-W6ME65LV.js.map → chunk-3ZKD6C5S.js.map} +0 -0
- /package/dist/{chunk-XAVNZNXQ.js.map → chunk-46AEH34Z.js.map} +0 -0
- /package/dist/{chunk-UOVALHAJ.js.map → chunk-4CQVC6XL.js.map} +0 -0
- /package/dist/{chunk-QQZ3SBF3.js.map → chunk-5FXNI724.js.map} +0 -0
- /package/dist/{chunk-I5RAQKKJ.js.map → chunk-7PFRBGMN.js.map} +0 -0
- /package/dist/{chunk-VGYTAYFK.js.map → chunk-A4Z3CI24.js.map} +0 -0
- /package/dist/{chunk-YZK37YCC.js.map → chunk-AI2LUQS6.js.map} +0 -0
- /package/dist/{chunk-UJKW42DI.js.map → chunk-AJYJW4LX.js.map} +0 -0
- /package/dist/{chunk-DD4R5P6W.js.map → chunk-BKPDYW5T.js.map} +0 -0
- /package/dist/{chunk-5OUTR67M.js.map → chunk-BMS32SNA.js.map} +0 -0
- /package/dist/{chunk-BWGU5NJS.js.map → chunk-CJPGYPI3.js.map} +0 -0
- /package/dist/{chunk-O3JB4PIX.js.map → chunk-CTQH7LQ6.js.map} +0 -0
- /package/dist/{chunk-DKVUOBIE.js.map → chunk-D5CVYITI.js.map} +0 -0
- /package/dist/{chunk-HKSNADSX.js.map → chunk-DMSX5PSO.js.map} +0 -0
- /package/dist/{chunk-VOUMS6IP.js.map → chunk-E3JRW3T3.js.map} +0 -0
- /package/dist/{chunk-SHWLROJG.js.map → chunk-E574SMCX.js.map} +0 -0
- /package/dist/{chunk-LTOBEUM2.js.map → chunk-E76O5Z42.js.map} +0 -0
- /package/dist/{chunk-3SZ6GKLB.js.map → chunk-EEW443GL.js.map} +0 -0
- /package/dist/{chunk-6A3IPDE2.js.map → chunk-F2WPS7VY.js.map} +0 -0
- /package/dist/{chunk-322QC6R4.js.map → chunk-FYFX42YD.js.map} +0 -0
- /package/dist/{chunk-ORL44TIK.js.map → chunk-G6RZYGWY.js.map} +0 -0
- /package/dist/{chunk-VHOEJBFP.js.map → chunk-GTZV2UZV.js.map} +0 -0
- /package/dist/{chunk-W55XSG6K.js.map → chunk-H34LAFGH.js.map} +0 -0
- /package/dist/{chunk-J4SOF2ZH.js.map → chunk-I2R5O2XX.js.map} +0 -0
- /package/dist/{chunk-PCZNTK74.js.map → chunk-IEYDMN3H.js.map} +0 -0
- /package/dist/{chunk-N2SKTCDK.js.map → chunk-JWBP4ZZB.js.map} +0 -0
- /package/dist/{chunk-B6CSYKZJ.js.map → chunk-KVIH5JPC.js.map} +0 -0
- /package/dist/{chunk-57RBC6IZ.js.map → chunk-L5HCOTRF.js.map} +0 -0
- /package/dist/{chunk-XMLURPEP.js.map → chunk-LHKDLWG5.js.map} +0 -0
- /package/dist/{chunk-G6O3URDN.js.map → chunk-LQJMCE7G.js.map} +0 -0
- /package/dist/{chunk-WHI6466S.js.map → chunk-MNIBZTQE.js.map} +0 -0
- /package/dist/{chunk-CC3GFVV6.js.map → chunk-MP3DN6JK.js.map} +0 -0
- /package/dist/{chunk-R2MMURGK.js.map → chunk-N5OVBS5L.js.map} +0 -0
- /package/dist/{chunk-OEDZHPBJ.js.map → chunk-NEKAGDTL.js.map} +0 -0
- /package/dist/{chunk-4DXZGZOB.js.map → chunk-NPCNDM6Y.js.map} +0 -0
- /package/dist/{chunk-ULPMYS5B.js.map → chunk-NYN2WQN3.js.map} +0 -0
- /package/dist/{chunk-QNETLNPB.js.map → chunk-O6WL7USJ.js.map} +0 -0
- /package/dist/{chunk-3ZLJDFJU.js.map → chunk-OH5I6I2D.js.map} +0 -0
- /package/dist/{chunk-36EHIPV4.js.map → chunk-PTQ774XH.js.map} +0 -0
- /package/dist/{chunk-DR6H3QAA.js.map → chunk-PXOH4ZN2.js.map} +0 -0
- /package/dist/{chunk-54EMVNPW.js.map → chunk-QG4BJUM7.js.map} +0 -0
- /package/dist/{chunk-ZXTHADSC.js.map → chunk-RITTG5WN.js.map} +0 -0
- /package/dist/{chunk-KPJZBCVI.js.map → chunk-SMSFTTEO.js.map} +0 -0
- /package/dist/{chunk-EVN6KWPN.js.map → chunk-TBZKVKR4.js.map} +0 -0
- /package/dist/{chunk-KSGA62R2.js.map → chunk-TJYRBEBK.js.map} +0 -0
- /package/dist/{chunk-QH6W3NVF.js.map → chunk-TLTS33EY.js.map} +0 -0
- /package/dist/{chunk-VV36JRUF.js.map → chunk-TMM7BWW7.js.map} +0 -0
- /package/dist/{chunk-ZTYNN6G5.js.map → chunk-TTC4MNEM.js.map} +0 -0
- /package/dist/{chunk-7FACFCZK.js.map → chunk-UXIZYI3X.js.map} +0 -0
- /package/dist/{chunk-EH4NQ7C4.js.map → chunk-VIUATDO2.js.map} +0 -0
- /package/dist/{chunk-2XCUERHJ.js.map → chunk-VIUDFDN4.js.map} +0 -0
- /package/dist/{chunk-ODG6RD7P.js.map → chunk-W5OEFZCR.js.map} +0 -0
- /package/dist/{chunk-GNIK4JYM.js.map → chunk-WXSRK3XR.js.map} +0 -0
- /package/dist/{chunk-NGM3ZLIP.js.map → chunk-XHGMDBTS.js.map} +0 -0
- /package/dist/{chunk-WSDUD52Y.js.map → chunk-XVGS3QXS.js.map} +0 -0
- /package/dist/{chunk-NSXZPWRP.js.map → chunk-XYNYQMLH.js.map} +0 -0
- /package/dist/{chunk-35SCELN4.js.map → chunk-Y4JJMUWG.js.map} +0 -0
- /package/dist/{chunk-UI7OCM2A.js.map → chunk-Z457XQSX.js.map} +0 -0
- /package/dist/{condition-HDVYPJJD.js.map → condition-QXTOTGZX.js.map} +0 -0
- /package/dist/{controls-YEEW46C6.js.map → controls-7TDB75LK.js.map} +0 -0
- /package/dist/{controls.config-C535H5DL.js.map → controls.config-IBF5ILFP.js.map} +0 -0
- /package/dist/{cuminc-II7NFIFP.js.map → cuminc-CAHPKW7W.js.map} +0 -0
- /package/dist/{cuminc.integration.spec-B4N6OMBJ.js.map → cuminc.integration.spec-NNSQGBRI.js.map} +0 -0
- /package/dist/{customdata.inputui-AI4ZBIEP.js.map → customdata.inputui-RRTQK7OK.js.map} +0 -0
- /package/dist/{dataDownload-ZQYLXN6D.js.map → dataDownload-SOUCBKXM.js.map} +0 -0
- /package/dist/{dataDownload.integration.spec-2PKYZ2AY.js.map → dataDownload.integration.spec-C6TLWSSO.js.map} +0 -0
- /package/dist/{databrowser.ui-WGD7D3XV.js.map → databrowser.ui-KLFEU5QA.js.map} +0 -0
- /package/dist/{dnaMethylation-WGJMJL5B.js.map → dnaMethylation-WOKGG33W.js.map} +0 -0
- /package/dist/{dnaMethylation.integration.spec-DO3PV4MO.js.map → dnaMethylation.integration.spec-YUPP42UK.js.map} +0 -0
- /package/dist/{dofetch-RADX3AFU.js.map → dofetch-V7PLLWSO.js.map} +0 -0
- /package/dist/{e2pca-KOAAU2JX.js.map → e2pca-VT7EM4E3.js.map} +0 -0
- /package/dist/{ep-CXCATXYH.js.map → ep-X6B43UXE.js.map} +0 -0
- /package/dist/{expclust.gdc.spec-UJO2R3CW.js.map → expclust.gdc.spec-DTBFOXBC.js.map} +0 -0
- /package/dist/{facet-2FBUAD7P.js.map → facet-T5ZX7ZGV.js.map} +0 -0
- /package/dist/{gb-VCJFV63W.js.map → gb-TWXREZIP.js.map} +0 -0
- /package/dist/{geneExpClustering-FUNS6D2P.js.map → geneExpClustering-2G6YDCIN.js.map} +0 -0
- /package/dist/{geneExpression-2BWWGYL4.js.map → geneExpression-2A4ZPT7K.js.map} +0 -0
- /package/dist/{geneExpression-2OPFWV2K.js.map → geneExpression-ZHQH6SNA.js.map} +0 -0
- /package/dist/{geneExpression.unit.spec-G7BSHJQT.js.map → geneExpression.unit.spec-2M223S4P.js.map} +0 -0
- /package/dist/{geneORA-S3KQMBYL.js.map → geneORA-YLIRUMCZ.js.map} +0 -0
- /package/dist/{geneRanking-UZ36XAL7.js.map → geneRanking-JDJXNGEC.js.map} +0 -0
- /package/dist/{geneVariant-OOZ2SBXO.js.map → geneVariant-5ZIOT5BT.js.map} +0 -0
- /package/dist/{geneVariant-ZHNVEKQ6.js.map → geneVariant-GIXIMJ2I.js.map} +0 -0
- /package/dist/{geneVariant.integration.spec-2C7EWKEV.js.map → geneVariant.integration.spec-QCROW73S.js.map} +0 -0
- /package/dist/{genefusion.ui-ASICJNII.js.map → genefusion.ui-56UQLUKJ.js.map} +0 -0
- /package/dist/{geneset-SNM4M6UM.js.map → geneset-ACRMGBJO.js.map} +0 -0
- /package/dist/{genomeBrowser.spec-DJIRW2X7.js.map → genomeBrowser.spec-EDILOQON.js.map} +0 -0
- /package/dist/{grin2-7AOJP5QJ.js.map → grin2-5P7CYUT7.js.map} +0 -0
- /package/dist/{gsea-SPTQJW67.js.map → gsea-2PQ5HNNT.js.map} +0 -0
- /package/dist/{hierCluster-KDE5SMYP.js.map → hierCluster-H5HB7FPW.js.map} +0 -0
- /package/dist/{hierCluster-XG4YLVL3.js.map → hierCluster-L3LCP2II.js.map} +0 -0
- /package/dist/{hierCluster.config-VNEEJCKJ.js.map → hierCluster.config-6UIJWCND.js.map} +0 -0
- /package/dist/{hierCluster.integration.spec-SSDN7LSH.js.map → hierCluster.integration.spec-EVAPT2VF.js.map} +0 -0
- /package/dist/{hierCluster.interactivity-DKBSJ644.js.map → hierCluster.interactivity-7MW6ZT6O.js.map} +0 -0
- /package/dist/{hierCluster.renderers-OG6LZAT7.js.map → hierCluster.renderers-F34EVY5J.js.map} +0 -0
- /package/dist/{imagePlot-M5JSHEY4.js.map → imagePlot-RSFZ2OKD.js.map} +0 -0
- /package/dist/{importPlot-YH7ZY6RJ.js.map → importPlot-DQFWY5A7.js.map} +0 -0
- /package/dist/{isoformExpression-EV27MKYZ.js.map → isoformExpression-2KANPCBH.js.map} +0 -0
- /package/dist/{isoformExpression.unit.spec-7T2GOHH3.js.map → isoformExpression.unit.spec-6FSMHT4K.js.map} +0 -0
- /package/dist/{launch.adhoc-NOISOX5E.js.map → launch.adhoc-ZYTIRVIC.js.map} +0 -0
- /package/dist/{leftlabel.sample-42AX4KTV.js.map → leftlabel.sample-66U6MHPN.js.map} +0 -0
- /package/dist/{legacyDataset-SWJCAWIR.js.map → legacyDataset-TNIIJABK.js.map} +0 -0
- /package/dist/{lollipop-LQCQBTSX.js.map → lollipop-PJDUFWEY.js.map} +0 -0
- /package/dist/{maf-U237OWZ3.js.map → maf-DLJHCKHJ.js.map} +0 -0
- /package/dist/{maftimeline-NLZLMHT2.js.map → maftimeline-NK5QYJMJ.js.map} +0 -0
- /package/dist/{matrix-DZJXYRYN.js.map → matrix-7BFYR6QL.js.map} +0 -0
- /package/dist/{matrix-Y5345QQG.js.map → matrix-USAB2CHO.js.map} +0 -0
- /package/dist/{matrix.cells-PT7S74QP.js.map → matrix.cells-OTAXAJ4N.js.map} +0 -0
- /package/dist/{matrix.config-2ORCUWKX.js.map → matrix.config-AL4WSFZ7.js.map} +0 -0
- /package/dist/{matrix.data-C6VPQJJ4.js.map → matrix.data-BDHCSN2G.js.map} +0 -0
- /package/dist/{matrix.groups-CEOCG2CT.js.map → matrix.groups-MV2D2636.js.map} +0 -0
- /package/dist/{matrix.integration.spec-U4B3JB6N.js.map → matrix.integration.spec-DESORC2Y.js.map} +0 -0
- /package/dist/{matrix.interactivity-GFLIFIER.js.map → matrix.interactivity-H7EJW3P2.js.map} +0 -0
- /package/dist/{matrix.layout-DOVDHTDX.js.map → matrix.layout-7CAS2IBO.js.map} +0 -0
- /package/dist/{matrix.legend-JE4ZSLP7.js.map → matrix.legend-JDVG2JDF.js.map} +0 -0
- /package/dist/{matrix.renderers-GPUJQ7KF.js.map → matrix.renderers-PDR5FIBC.js.map} +0 -0
- /package/dist/{matrix.serieses-REE4DCSR.js.map → matrix.serieses-QVDS5HKK.js.map} +0 -0
- /package/dist/{matrix.sort-VD5URUWY.js.map → matrix.sort-HCK4CSTJ.js.map} +0 -0
- /package/dist/{matrix.sort.unit.spec-4IOFVHJN.js.map → matrix.sort.unit.spec-2GC4E26N.js.map} +0 -0
- /package/dist/{matrix.sorterUi-VQYY6KBK.js.map → matrix.sorterUi-XGBQOPG4.js.map} +0 -0
- /package/dist/{matrix.sorterUi.unit.spec-V5O2EJBX.js.map → matrix.sorterUi.unit.spec-BJQKDU2F.js.map} +0 -0
- /package/dist/{mavb-SQDA3B2B.js.map → mavb-6E6Z4LPK.js.map} +0 -0
- /package/dist/{mds.fimo-ZJSEPLD7.js.map → mds.fimo-5P2TK5U4.js.map} +0 -0
- /package/dist/{mds.samplescatterplot-Y5V73GOY.js.map → mds.samplescatterplot-KLKOD4AS.js.map} +0 -0
- /package/dist/{mds.survivalplot-CZBRMHYN.js.map → mds.survivalplot-SWQCOFIU.js.map} +0 -0
- /package/dist/{numericDictTermCluster-TFXBBUVI.js.map → numericDictTermCluster-WIVO33AV.js.map} +0 -0
- /package/dist/{oncomatrix-ZILACPPI.js.map → oncomatrix-SDUUQZCK.js.map} +0 -0
- /package/dist/{oncomatrix.spec-RLIVVVD6.js.map → oncomatrix.spec-YGQYIUDT.js.map} +0 -0
- /package/dist/{plot.2dvaf-BNRZPIKU.js.map → plot.2dvaf-K53KTP5W.js.map} +0 -0
- /package/dist/{plot.app-NRUARQCN.js.map → plot.app-FNJVWLPQ.js.map} +0 -0
- /package/dist/{plot.barplot-342AYQC7.js.map → plot.barplot-VTC3N6BR.js.map} +0 -0
- /package/dist/{plot.boxplot-OHEJDPTW.js.map → plot.boxplot-RJFGQSLA.js.map} +0 -0
- /package/dist/{plot.brainImaging-KV72PAON.js.map → plot.brainImaging-6KVNPPMT.js.map} +0 -0
- /package/dist/{plot.disco-OUE4RFHL.js.map → plot.disco-ZFH5RK6B.js.map} +0 -0
- /package/dist/{plot.dzi-T3GPUH36.js.map → plot.dzi-IA2SOFUD.js.map} +0 -0
- /package/dist/{plot.ssgq-WJHGMXW5.js.map → plot.ssgq-QARGQVKB.js.map} +0 -0
- /package/dist/{plot.vaf2cov-NGD5PCV4.js.map → plot.vaf2cov-2JUXYCPG.js.map} +0 -0
- /package/dist/{plot.wsi-2MU5BDG3.js.map → plot.wsi-C2DULA7U.js.map} +0 -0
- /package/dist/{profilePlot-OMVO3K4H.js.map → profilePlot-SVI3QKMD.js.map} +0 -0
- /package/dist/{qualitative-MEYBRUC6.js.map → qualitative-AQFKAZID.js.map} +0 -0
- /package/dist/{regression-ZPDPLI6G.js.map → regression-DLPBCDZT.js.map} +0 -0
- /package/dist/{regression.inputs-QOSBAGL6.js.map → regression.inputs-42LY4MEZ.js.map} +0 -0
- /package/dist/{regression.inputs.term-HMUMPY7X.js.map → regression.inputs.term-TTUFFPG6.js.map} +0 -0
- /package/dist/{regression.inputs.values.table-VMCTZHLG.js.map → regression.inputs.values.table-CJAPTSMS.js.map} +0 -0
- /package/dist/{regression.integration.spec-RP74JTAA.js.map → regression.integration.spec-UDA26OGS.js.map} +0 -0
- /package/dist/{regression.results-5XC6M67C.js.map → regression.results-IA3C7SHR.js.map} +0 -0
- /package/dist/{regression.spec-EZYM24J7.js.map → regression.spec-HEXCL3QV.js.map} +0 -0
- /package/dist/{report-ZOVQCOGQ.js.map → report-4CFOWNPJ.js.map} +0 -0
- /package/dist/{sampleScatter.spec-CD52FEOC.js.map → sampleScatter.spec-N6V4BQ5Q.js.map} +0 -0
- /package/dist/{sampleView-SVTLSWRG.js.map → sampleView-CZF7U23I.js.map} +0 -0
- /package/dist/{samplelst-HXF5POJD.js.map → samplelst-XUGDS5TU.js.map} +0 -0
- /package/dist/{samplematrix-NYDAH74I.js.map → samplematrix-R5PZLZDE.js.map} +0 -0
- /package/dist/{sc-JIDT4W4K.js.map → sc-WTZZA5J5.js.map} +0 -0
- /package/dist/{selectGenomeWithTklst-OSB7B6L3.js.map → selectGenomeWithTklst-2S2MXVCI.js.map} +0 -0
- /package/dist/{singleCellCellType-3BH7LWQ6.js.map → singleCellCellType-LJWFG7MY.js.map} +0 -0
- /package/dist/{singleCellCellType.unit.spec-RU4RJXFF.js.map → singleCellCellType.unit.spec-RGN2XVUR.js.map} +0 -0
- /package/dist/{singleCellGeneExpression-3UA4YER7.js.map → singleCellGeneExpression-IW2QXTTU.js.map} +0 -0
- /package/dist/{singleCellGeneExpression.unit.spec-4ZTBG37H.js.map → singleCellGeneExpression.unit.spec-4PO3Q7TM.js.map} +0 -0
- /package/dist/{singleCellPlot-ZUAWK5RE.js.map → singleCellPlot-6EZ6JXCM.js.map} +0 -0
- /package/dist/{singlecell-BGJZB7MF.js.map → singlecell-3LFPQ6KO.js.map} +0 -0
- /package/dist/{singlecell-RO3BL5OO.js.map → singlecell-NTTAVVMR.js.map} +0 -0
- /package/dist/{snp-HD7VQKBR.js.map → snp-XB4IBG4Z.js.map} +0 -0
- /package/dist/{snp.unit.spec-ISXCLMWW.js.map → snp.unit.spec-HAJPM53L.js.map} +0 -0
- /package/dist/{snplocus-IL5Z4XWV.js.map → snplocus-HE6TITSX.js.map} +0 -0
- /package/dist/{spliceevent.a53ss.diagram-LLJSPV7M.js.map → spliceevent.a53ss.diagram-TCZMBMD7.js.map} +0 -0
- /package/dist/{spliceevent.exonskip.diagram-LAOIOIST.js.map → spliceevent.exonskip.diagram-VESOF6UC.js.map} +0 -0
- /package/dist/{spliceevent.noeventdiagram-MVA7Q3HT.js.map → spliceevent.noeventdiagram-4K7FMO4F.js.map} +0 -0
- /package/dist/{ssGSEA-7T6S3DSE.js.map → ssGSEA-2XYMX36P.js.map} +0 -0
- /package/dist/{ssGSEA.unit.spec-XJ3W4NWX.js.map → ssGSEA.unit.spec-J36KM2HO.js.map} +0 -0
- /package/dist/{summarizeCnvGeneexp-RRP6JUV6.js.map → summarizeCnvGeneexp-LYVDZXXD.js.map} +0 -0
- /package/dist/{summarizeGeneexpSurvival-AFLHDD6Q.js.map → summarizeGeneexpSurvival-Y52TGAHF.js.map} +0 -0
- /package/dist/{summarizeMutationCnv-NABUYHMX.js.map → summarizeMutationCnv-6EEJT3PV.js.map} +0 -0
- /package/dist/{summarizeMutationDiagnosis-2LQ7JU3K.js.map → summarizeMutationDiagnosis-HZKXHOOQ.js.map} +0 -0
- /package/dist/{summarizeMutationSurvival-3WBT5TXG.js.map → summarizeMutationSurvival-TU7TQYFQ.js.map} +0 -0
- /package/dist/{summary-FRDKOFXW.js.map → summary-4QQZUAMU.js.map} +0 -0
- /package/dist/{summary.integration.spec-ZLRIA7G2.js.map → summary.integration.spec-SLIIM4HN.js.map} +0 -0
- /package/dist/{summaryInput-4JO6MHP4.js.map → summaryInput-6HROPKCE.js.map} +0 -0
- /package/dist/{sunburst-DRCVSC2X.js.map → sunburst-MBJJPERL.js.map} +0 -0
- /package/dist/{survival-AK75COPY.js.map → survival-CXLMQSV2.js.map} +0 -0
- /package/dist/{survival-IF5NI3A6.js.map → survival-QSL2KDKD.js.map} +0 -0
- /package/dist/{survival.integration.spec-7IWBTPJG.js.map → survival.integration.spec-EUAAALVW.js.map} +0 -0
- /package/dist/{svgraph-QBDF2SLB.js.map → svgraph-JM5MHQDX.js.map} +0 -0
- /package/dist/{svmr-O4GJJUT2.js.map → svmr-MCMST2FL.js.map} +0 -0
- /package/dist/{table-FQAIXKLE.js.map → table-MVX3IMAL.js.map} +0 -0
- /package/dist/{termCollection-ZO5PZ7E3.js.map → termCollection-FZ2SCVA7.js.map} +0 -0
- /package/dist/{termCollection-GMDDL3L7.js.map → termCollection-IGC7REFK.js.map} +0 -0
- /package/dist/{termCollection.unit.spec-5JBCTXHX.js.map → termCollection.unit.spec-VY2EZZIP.js.map} +0 -0
- /package/dist/{tk-GJX23IV7.js.map → tk-5F3TWZ2G.js.map} +0 -0
- /package/dist/{tp.ui-T7FVMTGQ.js.map → tp.ui-IURWTMAS.js.map} +0 -0
- /package/dist/{tvs.dt-X7L7NSU6.js.map → tvs.dt-BPZCFPYK.js.map} +0 -0
- /package/dist/{tvs.dtcnv.categorical-73G2V6CH.js.map → tvs.dtcnv.categorical-UFS62DTR.js.map} +0 -0
- /package/dist/{tvs.dtcnv.continuous-DWFJL3X7.js.map → tvs.dtcnv.continuous-R6YXNNLA.js.map} +0 -0
- /package/dist/{tvs.dtfusion-HQADHCSV.js.map → tvs.dtfusion-FGXXS4XX.js.map} +0 -0
- /package/dist/{tvs.dtsnvindel-PY5OBMGW.js.map → tvs.dtsnvindel-DR43K7X3.js.map} +0 -0
- /package/dist/{tvs.dtsv-OTBEEWSW.js.map → tvs.dtsv-NO34GIOL.js.map} +0 -0
- /package/dist/{tvs.numeric-WGDHEBJV.js.map → tvs.numeric-KYAU5OV3.js.map} +0 -0
- /package/dist/{tvs.samplelst-LCXSU5MG.js.map → tvs.samplelst-2QP7IV2Y.js.map} +0 -0
- /package/dist/{tvs.termCollection-L527XN4X.js.map → tvs.termCollection-UEJDG22G.js.map} +0 -0
- /package/dist/{violin-6VKRUQV3.js.map → violin-NBZTGGYF.js.map} +0 -0
- /package/dist/{violin.integration.spec-RJATDLQH.js.map → violin.integration.spec-5CLYJSAR.js.map} +0 -0
- /package/dist/{violin.interactivity-SKF5H7MN.js.map → violin.interactivity-KXVKTT22.js.map} +0 -0
- /package/dist/{violin.renderer-GB4TPX3B.js.map → violin.renderer-37OF6K7Q.js.map} +0 -0
- /package/dist/{vocabulary-D3W44IWE.js.map → vocabulary-GR6J3VKW.js.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../plots/brainRegions.samples.ts", "../plots/proteinView.ts"],
|
|
4
|
+
"sourcesContent": ["import type { Menu } from '#dom'\nimport { scaleSequential, interpolateBlues, scaleLinear } from 'd3'\nimport { loadBrainAssets, renderBrainSvg } from './brainRegions.svg'\n\nconst NO_DATA_COLOR = '#dcdcdc'\nconst BRAIN_RENDER_W = 440\n\n// Monotonic counter for unique <linearGradient> ids (Date.now() can collide when the\n// brain re-renders within the same millisecond on volcano changes).\nlet gradientSeq = 0\n\nexport type BrainRegionSamplesOpts = {\n\t/** region code \u2192 display name */\n\tregions: { [code: string]: string }\n\t/** region code \u2192 sample count (case + control) */\n\tcounts: { [code: string]: number }\n\ttemplateUrl: string\n\tsvgUrl: string\n\t/** total distinct samples behind the counts; shown in the title */\n\ttotalSamples: number\n\ttip: Menu\n\t/** number of samples whose region value wasn't a configured region */\n\tunmappedCount?: number\n\t/** invoked when a region is clicked (e.g. the Protein View volcano sync) */\n\tonRegionClick?: (code: string, event: MouseEvent) => void\n\t/** when true for a code, render that region as filtered-out */\n\tisRegionDimmed?: (code: string) => boolean\n}\n\n// Render the brain \"sample distribution\" view: each region filled by its sample\n// count (sequential blues) with a samples-per-region legend. Kept as a standalone\n// renderer (not a plot component) so Protein View \u2014 and future callers \u2014 can embed\n// it next to the cohort volcano.\nexport async function drawBrainRegionSamples(holder: any, opts: BrainRegionSamplesOpts) {\n\tconst { regions, counts, templateUrl, svgUrl, totalSamples, tip } = opts\n\tconst assets = await loadBrainAssets(svgUrl, Object.keys(regions))\n\t// Title is built live from totalSamples (case + control) so it stays correct as\n\t// cohorts/regions are hidden.\n\tconst title = `All samples (n=${totalSamples})`\n\tconst max = Math.max(0, ...Object.values(counts))\n\tconst colorScale = scaleSequential(interpolateBlues).domain([0, Math.max(1, max)])\n\n\tconst container = holder\n\t\t.append('div')\n\t\t.attr('class', 'sjpp-brain-region-samples-container')\n\t\t.style('display', 'flex')\n\t\t.style('gap', '20px')\n\t\t.style('flex-wrap', 'wrap')\n\t\t.style('align-items', 'flex-start')\n\n\trenderBrainSvg({\n\t\tholder: container,\n\t\twidth: BRAIN_RENDER_W,\n\t\ttemplateUrl,\n\t\tassets,\n\t\tregions,\n\t\ttip,\n\t\ttitle,\n\t\tfillByRegion: (code: string) => {\n\t\t\tconst n = counts[code] ?? 0\n\t\t\treturn n > 0 ? (colorScale(n) as string) : NO_DATA_COLOR\n\t\t},\n\t\ttooltipByRegion: (code: string, label: string) => {\n\t\t\tconst n = counts[code] ?? 0\n\t\t\treturn `${label} (${code})\\nSamples: ${n}`\n\t\t},\n\t\tonRegionClick: opts.onRegionClick,\n\t\tisRegionDimmed: opts.isRegionDimmed\n\t})\n\n\trenderSamplesLegend(container, colorScale, max)\n\n\tconst unmappedCount = opts.unmappedCount ?? 0\n\tif (unmappedCount > 0) {\n\t\tholder\n\t\t\t.append('div')\n\t\t\t.style('margin-top', '4px')\n\t\t\t.style('width', `${BRAIN_RENDER_W}px`)\n\t\t\t.style('text-align', 'right')\n\t\t\t.style('font-size', '11px')\n\t\t\t.style('color', '#888')\n\t\t\t.text(`${unmappedCount} sample${unmappedCount === 1 ? '' : 's'} had unmapped region values`)\n\t}\n}\n\nfunction renderSamplesLegend(container: any, colorScale: any, max: number) {\n\tconst legendDiv = container\n\t\t.append('div')\n\t\t.style('display', 'flex')\n\t\t.style('flex-direction', 'column')\n\t\t.style('justify-content', 'center')\n\t\t.style('padding', '10px')\n\n\tlegendDiv\n\t\t.append('div')\n\t\t.style('font-weight', 'bold')\n\t\t.style('font-size', '13px')\n\t\t.style('margin-bottom', '8px')\n\t\t.text('Samples per region')\n\n\tconst legendWidth = 20\n\tconst legendHeight = 200\n\tconst svg = legendDiv\n\t\t.append('svg')\n\t\t.attr('width', legendWidth + 60)\n\t\t.attr('height', legendHeight + 30)\n\n\tconst defs = svg.append('defs')\n\tconst gradientId = `brain-samples-gradient-${gradientSeq++}`\n\tconst gradient = defs\n\t\t.append('linearGradient')\n\t\t.attr('id', gradientId)\n\t\t.attr('x1', '0')\n\t\t.attr('y1', '0')\n\t\t.attr('x2', '0')\n\t\t.attr('y2', '1')\n\n\t// Gradient is drawn high (max) \u2192 low (0), so y1=0 takes color at max.\n\tconst steps = 10\n\tfor (let i = 0; i <= steps; i++) {\n\t\tconst t = i / steps\n\t\tconst val = max * (1 - t)\n\t\tgradient\n\t\t\t.append('stop')\n\t\t\t.attr('offset', `${t * 100}%`)\n\t\t\t.attr('stop-color', colorScale(val))\n\t}\n\n\tsvg\n\t\t.append('rect')\n\t\t.attr('x', 0)\n\t\t.attr('y', 10)\n\t\t.attr('width', legendWidth)\n\t\t.attr('height', legendHeight)\n\t\t.style('fill', `url(#${gradientId})`)\n\t\t.attr('stroke', '#999')\n\n\tconst legendScale = scaleLinear()\n\t\t.domain([max, 0])\n\t\t.range([10, legendHeight + 10])\n\tconst ticks = max > 0 ? [max, Math.round((max * 3) / 4), Math.round(max / 2), Math.round(max / 4), 0] : [0]\n\tfor (const tick of ticks) {\n\t\tconst y = legendScale(tick)\n\t\tsvg\n\t\t\t.append('line')\n\t\t\t.attr('x1', legendWidth)\n\t\t\t.attr('y1', y)\n\t\t\t.attr('x2', legendWidth + 5)\n\t\t\t.attr('y2', y)\n\t\t\t.attr('stroke', '#666')\n\t\tsvg\n\t\t\t.append('text')\n\t\t\t.attr('x', legendWidth + 8)\n\t\t\t.attr('y', y)\n\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t.attr('font-size', '10px')\n\t\t\t.text(String(tick))\n\t}\n\n\tlegendDiv\n\t\t.append('div')\n\t\t.style('margin-top', '10px')\n\t\t.style('font-size', '12px')\n\t\t.style('color', '#666')\n\t\t.html(\n\t\t\t`<span style=\"display:inline-block;width:14px;height:14px;background:${NO_DATA_COLOR};border:1px solid #999;vertical-align:middle;margin-right:4px\"></span> No samples`\n\t\t)\n}\n", "import type { MassState, BasePlotConfig } from '#mass/types/mass'\nimport { getCompInit, copyMerge, type RxComponent } from '#rx'\nimport { axisstyle, to_svg } from '#src/client'\nimport { Menu, table2col, LegendCircleReference, addGeneSearchbox, DataPointInteractions, make_radios } from '#dom'\nimport { PlotBase } from './PlotBase'\nimport { dofetch3 } from '#common/dofetch'\nimport { drawBrainRegionSamples } from './brainRegions.samples'\nimport { axisBottom, axisLeft, scaleLinear, rgb, select, creator } from 'd3'\nimport { shapeSelector, shapes } from '../dom/shapes.js'\nimport { NumericModes, TermTypes } from '#shared/terms.js'\nimport { aa2gmcoord } from '#src/coord'\nimport { mclass, getColors } from '#shared/common.js'\nimport { roundValue } from '#shared/roundValue.js'\nimport { icons as controlIcons } from '../dom/control.icons'\n\nconst defaultConfig = {\n\tchartType: 'proteinView'\n}\n\n// Cohort volcano hover/hit-test tuning. Kept together so they're easy to find\n// and adjust as a group when the dot styling changes.\nconst COHORT_VOLCANO_HIT_RADIUS_PADDING_PX = 3 // px added to maxDotRadius for the quadtree broad-query\nconst COHORT_VOLCANO_HIT_BUFFER_PX = 2 // px of forgiveness around each dot's own visual edge\nconst COHORT_VOLCANO_HOVER_RING_SIZE_SCALE = 1.15 // hover ring grows the dot by this factor\nconst COHORT_VOLCANO_HOVER_RING_STROKE_PX = 1.5 // hover ring stroke width (non-scaling)\nconst COHORT_VOLCANO_HOVER_MAX_COHORTS = 5 // max rows shown in the hover tooltip table; rest collapse into \"and N more...\"\n\nclass ProteinView extends PlotBase implements RxComponent {\n\tstatic type = 'proteinView'\n\ttype: string\n\tdom!: {\n\t\tholder: any\n\t\tbody: any\n\t\ttip: Menu\n\t\theader?: any\n\t}\n\tcomponents: any\n\n\tconstructor(opts: any, api) {\n\t\tsuper(opts, api)\n\t\tthis.type = ProteinView.type\n\t\tthis.components = {}\n\t}\n\n\tasync init() {\n\t\tconst holder = this.opts.holder.append('div').style('padding', '10px')\n\t\tthis.dom = {\n\t\t\tholder,\n\t\t\tbody: holder.append('div'),\n\t\t\ttip: new Menu({ padding: '' }),\n\t\t\theader: this.opts.header\n\t\t}\n\t\tif (this.dom.header) this.dom.header.html('Protein View')\n\t}\n\n\tgetState(appState: MassState) {\n\t\tconst config: any = appState.plots.find((p: BasePlotConfig) => p.id === this.id)\n\t\tif (!config) throw `No plot with id='${this.id}' found`\n\t\treturn { config }\n\t}\n\n\tmaySetSandboxHeader() {\n\t\tif (!this.dom.header) return\n\t\tconst term = this.state.config?.tw?.term\n\t\tconst header = `Protein View: ${term?.name}`\n\t\tthis.dom.header.text(header)\n\t}\n\n\tasync main() {\n\t\tconst term = this.state.config?.tw?.term\n\t\tif (!term?.name) throw new Error('proteinView: selected protein term is missing')\n\n\t\tconst body = {\n\t\t\tgenome: this.app.opts.state.vocab.genome,\n\t\t\tdslabel: this.app.opts.state.vocab.dslabel,\n\t\t\tterm: this.state.config.tw,\n\t\t\tfilter: this.state.config.filter,\n\t\t\tfilter0: this.state.config.filter0\n\t\t}\n\n\t\tthis.maySetSandboxHeader()\n\t\tconst data = await dofetch3('termdb/proteome', { body })\n\t\tif (data.error) throw data.error\n\t\tthis.dom.body.selectAll('*').remove()\n\n\t\tconst topRow = this.dom.body\n\t\t\t.append('div')\n\t\t\t.style('display', 'flex')\n\t\t\t.style('gap', '16px')\n\t\t\t.style('align-items', 'flex-start')\n\t\t\t.style('flex-wrap', 'wrap')\n\t\tconst volcanoApi = renderCohortVolcano(topRow, data, this)\n\n\t\tconst termdbConfig = this.app.vocabApi.termdbConfig\n\t\tif (termdbConfig?.queries?.proteome?.brainRegions) {\n\t\t\tawait renderBrainRegionSamplesPanel(topRow, data, this, volcanoApi)\n\t\t}\n\n\t\t// group PTM cohorts by organism first, then isoform.\n\t\tconst ptmDataByOrganism = new Map<string, Map<string, any[]>>()\n\t\tfor (const cohortData of data.cohorts || []) {\n\t\t\tif (!cohortData.PTMType) continue // filter out non-PTM cohorts\n\t\t\tconst organism = cohortData.organism\n\t\t\tconst isoform = cohortData.isoform\n\t\t\tconst ptmDataByIsoform = ptmDataByOrganism.get(organism) || new Map<string, any[]>()\n\t\t\tptmDataByOrganism.set(organism, ptmDataByIsoform)\n\t\t\tconst existingCohorts = ptmDataByIsoform.get(isoform)\n\t\t\tif (!existingCohorts) {\n\t\t\t\tptmDataByIsoform.set(isoform, [cohortData])\n\t\t\t} else {\n\t\t\t\texistingCohorts.push(cohortData)\n\t\t\t}\n\t\t}\n\n\t\ttype LollipopSection = { organism: string; isoform: string; cohorts: any[]; genomeName: string }\n\t\tconst sections: LollipopSection[] = []\n\t\tfor (const [organism, byIso] of ptmDataByOrganism) {\n\t\t\tfor (const [isoform, cohorts] of byIso) {\n\t\t\t\tsections.push({ organism, isoform, cohorts, genomeName: cohorts[0].genomeName })\n\t\t\t}\n\t\t}\n\t\tif (sections.length === 0) return\n\n\t\tlet allGenomes: any = null\n\t\tconst baseGenome = this.app.opts.genome\n\t\tconst getGenome = async (genomeName: string) => {\n\t\t\tif (genomeName === baseGenome.name) return baseGenome\n\t\t\tif (!allGenomes) {\n\t\t\t\tconst result = await dofetch3('genomes')\n\t\t\t\tallGenomes = result.genomes || {}\n\t\t\t\tfor (const g of Object.values(allGenomes) as any[]) {\n\t\t\t\t\tif (g.chrlookup || g.name == baseGenome.name) continue\n\t\t\t\t\tg.chrlookup = {}\n\t\t\t\t\tfor (const chr in g.majorchr) {\n\t\t\t\t\t\tg.chrlookup[chr.toUpperCase()] = { name: chr, len: g.majorchr[chr], major: true }\n\t\t\t\t\t}\n\t\t\t\t\tfor (const chr in g.minorchr || {}) {\n\t\t\t\t\t\tg.chrlookup[chr.toUpperCase()] = { name: chr, len: g.minorchr[chr] }\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst g = allGenomes[genomeName]\n\t\t\tif (!g) throw `genome ${genomeName} not supported`\n\t\t\treturn g\n\t\t}\n\n\t\tif (sections.length === 1) {\n\t\t\tconst s = sections[0]\n\t\t\tconst genome = await getGenome(s.genomeName)\n\t\t\tawait renderPTMLollipop(this.dom.body.append('div'), s.cohorts, this, s.isoform, genome)\n\t\t\treturn\n\t\t}\n\n\t\tconst keyOf = (s: LollipopSection) => `${s.organism}\\u0001${s.isoform}`\n\t\tconst selectedKeys = new Set<string>([keyOf(sections[0])])\n\t\tlet compareMode = false\n\n\t\tconst layoutDiv = this.dom.body\n\t\t\t.append('div')\n\t\t\t.style('display', 'flex')\n\t\t\t.style('gap', '16px')\n\t\t\t.style('margin-top', '10px')\n\t\t\t.style('margin-left', '70px')\n\t\t\t.style('align-items', 'flex-start')\n\t\tconst sidebar = layoutDiv\n\t\t\t.append('div')\n\t\t\t.style('flex', '0 0 220px')\n\t\t\t.style('border', '1px solid #e5e7eb')\n\t\t\t.style('border-radius', '4px')\n\t\t\t.style('padding', '8px')\n\t\t\t.style('font-size', '.85em')\n\t\t\t.style('position', 'sticky')\n\t\t\t.style('top', '8px')\n\t\t\t.style('margin-top', '20px')\n\t\t\t.style('max-height', '85vh')\n\t\t\t.style('overflow', 'auto')\n\t\tconst rightPane = layoutDiv.append('div').style('flex', '1 1 auto').style('min-width', '0')\n\n\t\tconst sidebarHeader = sidebar\n\t\t\t.append('div')\n\t\t\t.style('display', 'flex')\n\t\t\t.style('flex-direction', 'column')\n\t\t\t.style('gap', '6px')\n\t\t\t.style('margin-bottom', '8px')\n\t\tsidebarHeader\n\t\t\t.append('span')\n\t\t\t.style('font-weight', '600')\n\t\t\t.style('font-size', '1.5em')\n\t\t\t.style('text-transform', 'uppercase')\n\t\t\t.text('Isoforms')\n\n\t\tconst modeToggle = sidebarHeader\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-flex')\n\t\t\t.style('align-items', 'center')\n\t\t\t.style('gap', '6px')\n\t\tmodeToggle.append('span').style('color', '#6b7280').text('Mode:')\n\t\tmake_radios({\n\t\t\tholder: modeToggle.append('div').attr('aria-label', 'Isoform view mode'),\n\t\t\toptions: [\n\t\t\t\t{ label: 'Single', value: 'single', checked: true },\n\t\t\t\t{ label: 'Compare', value: 'compare' }\n\t\t\t],\n\t\t\tstyles: { display: 'inline-block' },\n\t\t\tcallback: (value: string) => {\n\t\t\t\tconst asCompare = value === 'compare'\n\t\t\t\tif (asCompare === compareMode) return\n\t\t\t\tcompareMode = asCompare\n\t\t\t\tif (!compareMode && selectedKeys.size > 1) {\n\t\t\t\t\tconst first = selectedKeys.values().next().value as string\n\t\t\t\t\tselectedKeys.clear()\n\t\t\t\t\tselectedKeys.add(first)\n\t\t\t\t}\n\t\t\t\trenderSidebar()\n\t\t\t\tvoid renderRight()\n\t\t\t}\n\t\t})\n\n\t\tconst sidebarList = sidebar.append('div')\n\t\tconst sectionsByOrganism = new Map<string, LollipopSection[]>()\n\t\tfor (const s of sections) {\n\t\t\tconst arr = sectionsByOrganism.get(s.organism) || []\n\t\t\tarr.push(s)\n\t\t\tsectionsByOrganism.set(s.organism, arr)\n\t\t}\n\t\tconst showOrganismHeading = sectionsByOrganism.size > 1\n\n\t\tconst renderSidebar = () => {\n\t\t\tsidebarList.selectAll('*').remove()\n\t\t\tfor (const [organism, items] of sectionsByOrganism) {\n\t\t\t\tif (showOrganismHeading) {\n\t\t\t\t\tsidebarList\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.text(organism)\n\t\t\t\t\t\t.style('font-weight', '600')\n\t\t\t\t\t\t.style('color', '#374151')\n\t\t\t\t\t\t.style('margin', '6px 0 4px 0')\n\t\t\t\t}\n\t\t\t\tfor (const s of items) {\n\t\t\t\t\tconst key = keyOf(s)\n\t\t\t\t\tconst isSelected = selectedKeys.has(key)\n\t\t\t\t\tconst isSoleSelection = isSelected && selectedKeys.size === 1\n\t\t\t\t\tconst toggleSelection = () => {\n\t\t\t\t\t\tif (compareMode) {\n\t\t\t\t\t\t\tif (selectedKeys.has(key)) {\n\t\t\t\t\t\t\t\tif (selectedKeys.size > 1) selectedKeys.delete(key)\n\t\t\t\t\t\t\t\telse return // keep at least one\n\t\t\t\t\t\t\t} else selectedKeys.add(key)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (selectedKeys.has(key) && selectedKeys.size === 1) return\n\t\t\t\t\t\t\tselectedKeys.clear()\n\t\t\t\t\t\t\tselectedKeys.add(key)\n\t\t\t\t\t\t}\n\t\t\t\t\t\trenderSidebar()\n\t\t\t\t\t\tvoid renderRight()\n\t\t\t\t\t}\n\t\t\t\t\tconst row = sidebarList\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.attr('role', compareMode ? 'checkbox' : 'radio')\n\t\t\t\t\t\t.attr('aria-checked', String(isSelected))\n\t\t\t\t\t\t.attr('aria-label', `${s.organism} ${s.isoform}`)\n\t\t\t\t\t\t.attr('tabindex', '0')\n\t\t\t\t\t\t.style('display', 'flex')\n\t\t\t\t\t\t.style('align-items', 'center')\n\t\t\t\t\t\t.style('gap', '6px')\n\t\t\t\t\t\t.style('padding', '3px 4px')\n\t\t\t\t\t\t.style('border-radius', '3px')\n\t\t\t\t\t\t.style('background', isSelected ? '#eff6ff' : 'transparent')\n\t\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t\t\t.on('click', toggleSelection)\n\t\t\t\t\t\t.on('keydown', (event: KeyboardEvent) => {\n\t\t\t\t\t\t\tif (event.key === 'Enter' || event.key === ' ') {\n\t\t\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\t\t\ttoggleSelection()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\tif (compareMode) {\n\t\t\t\t\t\trow\n\t\t\t\t\t\t\t.append('input')\n\t\t\t\t\t\t\t.attr('type', 'checkbox')\n\t\t\t\t\t\t\t.attr('tabindex', '-1')\n\t\t\t\t\t\t\t.attr('aria-hidden', 'true')\n\t\t\t\t\t\t\t.property('checked', isSelected)\n\t\t\t\t\t\t\t.property('disabled', isSoleSelection)\n\t\t\t\t\t\t\t.style('margin', '0')\n\t\t\t\t\t\t\t.style('cursor', isSoleSelection ? 'not-allowed' : 'pointer')\n\t\t\t\t\t\t\t.on('click', (event: Event) => {\n\t\t\t\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\t\t\t\ttoggleSelection()\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\trow.append('span').text(s.isoform)\n\t\t\t\t\trow.append('span').style('color', '#6b7280').style('margin-left', 'auto').text(String(s.cohorts.length))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst renderRight = async () => {\n\t\t\trightPane.selectAll('*').remove()\n\t\t\tconst selected = sections.filter(s => selectedKeys.has(keyOf(s)))\n\t\t\tif (!selected.length) return\n\t\t\tconst cols = rightPane\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'flex')\n\t\t\t\t.style('flex-direction', 'column')\n\t\t\t\t.style('gap', '16px')\n\t\t\tfor (const s of selected) {\n\t\t\t\tconst col = cols.append('div').style('min-width', '0')\n\t\t\t\ttry {\n\t\t\t\t\tconst genome = await getGenome(s.genomeName)\n\t\t\t\t\tawait renderPTMLollipop(col, s.cohorts, this, s.isoform, genome)\n\t\t\t\t} catch (err: any) {\n\t\t\t\t\tcol\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.style('color', '#b91c1c')\n\t\t\t\t\t\t.style('padding', '6px')\n\t\t\t\t\t\t.text(`Failed to render ${s.organism} \u00B7 ${s.isoform}: ${err?.message || err}`)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\trenderSidebar()\n\t\tawait renderRight()\n\t}\n}\n\n// Draws the brain \"sample distribution\" panel next to the cohort volcano, kept in\n// sync with it: the brain counts the exact samples the visible volcano dots represent,\n// and clicking a region hides the dots whose samples fall only in hidden regions.\nasync function renderBrainRegionSamplesPanel(holder: any, data: any, self: ProteinView, volcanoApi: VolcanoApi) {\n\tconst brConfig = self.app.vocabApi.termdbConfig?.queries?.proteome?.brainRegions\n\tif (!brConfig?.regions) return\n\tconst regions: { [code: string]: string } = brConfig.regions\n\tconst allRegionCodes = Object.keys(regions)\n\t// Global sample-id \u2192 region-code map (deduped, sent once by the proteome route).\n\tconst sampleRegionById: { [sid: string]: string } = data?.sampleRegions || {}\n\n\t// Each volcano dot is a proteome cohort entry carrying its own sample ids; a\n\t// sample's region is looked up in sampleRegionById. Driving the brain from these\n\t// (instead of a separate endpoint) makes the brain's counts match the volcano exactly.\n\tconst allDots: any[] = (data?.cohorts || []).filter((d: any) => Array.isArray(d.sampleIds) && d.sampleIds.length)\n\tif (!allDots.length) return\n\n\t// Created lazily on the first redraw so a stub volcano (no valid dots, hence no\n\t// visibility callback) doesn't leave an empty panel div behind.\n\tlet panel: any\n\n\t// Sentinel for samples that carry no configured brain-region annotation. Held\n\t// in hiddenRegions only by \"Show only\" (and cleared by \"Show all\"), so a dot\n\t// made up of unannotated samples is hidden when isolating a single region but\n\t// stays visible under a plain per-region Hide.\n\tconst NO_REGION = '__no_region__'\n\n\tconst hiddenRegions = new Set<string>()\n\t// Overwritten by the immediate onVisibilityChange fire below, before the first redraw.\n\tlet visibleDots: any[] = []\n\n\t// Count DISTINCT samples (case + control) per region across the given dots.\n\t// Distinct is required because isoform dots of one cohort share samples.\n\t// unmappedCount = distinct samples whose region isn't one of the configured\n\t// regions (so they're absent from the brain), surfaced as a legend note.\n\tconst countFromDots = (dotList: any[]) => {\n\t\tconst seen = new Set<string>()\n\t\tconst counts: { [code: string]: number } = {}\n\t\tfor (const code of allRegionCodes) counts[code] = 0\n\t\tlet totalSamples = 0\n\t\tfor (const dot of dotList) {\n\t\t\tfor (const sid of dot.sampleIds) {\n\t\t\t\tif (seen.has(sid)) continue\n\t\t\t\tseen.add(sid)\n\t\t\t\tconst code = sampleRegionById[sid]\n\t\t\t\tif (code && counts[code] !== undefined) {\n\t\t\t\t\tcounts[code]++\n\t\t\t\t\ttotalSamples++\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn { counts, totalSamples, unmappedCount: seen.size - totalSamples }\n\t}\n\n\t// A cohort is hidden if every region its samples occupy is hidden. Collect\n\t// those cohort names to drive the volcano's external hide (the volcano hides\n\t// by cohort name). Region-pinned cohorts map to a single region, so hiding a\n\t// region hides exactly its cohorts.\n\tconst deriveHiddenCohorts = (): Set<string> => {\n\t\tconst hidden = new Set<string>()\n\t\tif (!hiddenRegions.size) return hidden\n\t\tconst regionsByCohort = new Map<string, Set<string>>()\n\t\tfor (const dot of allDots) {\n\t\t\tconst set = regionsByCohort.get(dot.cohortName) || new Set<string>()\n\t\t\tfor (const sid of dot.sampleIds) {\n\t\t\t\t// unannotated samples count as NO_REGION so \"Show only\" can hide them.\n\t\t\t\tset.add(sampleRegionById[sid] || NO_REGION)\n\t\t\t}\n\t\t\tregionsByCohort.set(dot.cohortName, set)\n\t\t}\n\t\tfor (const [cohort, set] of regionsByCohort) {\n\t\t\tif (!set.size) continue\n\t\t\tlet allHidden = true\n\t\t\tfor (const code of set) {\n\t\t\t\tif (!hiddenRegions.has(code)) {\n\t\t\t\t\tallHidden = false\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (allHidden) hidden.add(cohort)\n\t\t}\n\t\treturn hidden\n\t}\n\n\t// Separate Menu so the click popup doesn't fight with hover tooltips.\n\tconst regionMenu = new Menu({ padding: '0px' })\n\n\tconst applyHiddenRegions = () => {\n\t\tvolcanoApi.setExternallyHiddenCohorts(deriveHiddenCohorts())\n\t}\n\n\tconst openRegionMenu = (code: string, event: MouseEvent) => {\n\t\tself.dom.tip.hide()\n\t\tregionMenu.clear()\n\t\tconst list = regionMenu.d.append('div').style('min-width', '140px').style('font-size', '13px')\n\t\tconst addItem = (label: string, action: () => void) => {\n\t\t\tlist\n\t\t\t\t.append('div')\n\t\t\t\t.style('padding', '6px 12px')\n\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t.style('user-select', 'none')\n\t\t\t\t.text(label)\n\t\t\t\t.on('mouseover', function (this: HTMLDivElement) {\n\t\t\t\t\tthis.style.background = '#f3f4f6'\n\t\t\t\t})\n\t\t\t\t.on('mouseout', function (this: HTMLDivElement) {\n\t\t\t\t\tthis.style.background = ''\n\t\t\t\t})\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tregionMenu.hide()\n\t\t\t\t\taction()\n\t\t\t\t})\n\t\t}\n\t\tconst isHidden = hiddenRegions.has(code)\n\t\tif (isHidden) {\n\t\t\taddItem(`Show ${code}`, () => {\n\t\t\t\thiddenRegions.delete(code)\n\t\t\t\tapplyHiddenRegions()\n\t\t\t})\n\t\t} else {\n\t\t\taddItem(`Hide ${code}`, () => {\n\t\t\t\thiddenRegions.add(code)\n\t\t\t\tapplyHiddenRegions()\n\t\t\t})\n\t\t}\n\t\taddItem(`Show only ${code}`, () => {\n\t\t\thiddenRegions.clear()\n\t\t\tfor (const r of allRegionCodes) if (r !== code) hiddenRegions.add(r)\n\t\t\t// also hide dots whose samples have no brain-region annotation\n\t\t\thiddenRegions.add(NO_REGION)\n\t\t\tapplyHiddenRegions()\n\t\t})\n\t\tif (hiddenRegions.size) {\n\t\t\taddItem('Show all', () => {\n\t\t\t\thiddenRegions.clear()\n\t\t\t\tapplyHiddenRegions()\n\t\t\t})\n\t\t}\n\t\tregionMenu.show(event.clientX, event.clientY)\n\t}\n\n\tconst redraw = async () => {\n\t\tif (!panel) panel = holder.append('div').style('margin-bottom', '14px')\n\t\tpanel.selectAll('*').remove()\n\t\tconst { counts, totalSamples, unmappedCount } = countFromDots(visibleDots)\n\t\tawait drawBrainRegionSamples(panel, {\n\t\t\tregions,\n\t\t\tcounts,\n\t\t\ttotalSamples,\n\t\t\tunmappedCount,\n\t\t\ttemplateUrl: brConfig.templateUrl,\n\t\t\tsvgUrl: brConfig.svgUrl,\n\t\t\ttip: self.dom.tip,\n\t\t\tonRegionClick: openRegionMenu,\n\t\t\t// A region with no visible-dot samples has count 0, which is exactly when it\n\t\t\t// should be dimmed \u2014 so no separate \"visible regions\" set is needed.\n\t\t\tisRegionDimmed: (code: string) => hiddenRegions.has(code) || (counts[code] ?? 0) === 0\n\t\t})\n\t}\n\n\t// Fires once immediately with the initial visible dots, then on every change.\n\tvolcanoApi.onVisibilityChange(({ dots }) => {\n\t\tvisibleDots = dots\n\t\tredraw()\n\t})\n}\n\nfunction renderCohortVolcano(holder: any, data: any, self: ProteinView) {\n\tconst dots: any[] = []\n\t// Global sample-id \u2192 region-code map (deduped, sent once by the proteome route).\n\tconst sampleRegionById: { [sid: string]: string } = data?.sampleRegions || {}\n\n\tfor (const cohortData of data?.cohorts || []) {\n\t\tconst log2fc = getLog2Ratio(cohortData.foldChange)\n\t\tconst pValue = Number(cohortData.pValue)\n\t\tconst testedN = Number(cohortData.testedN)\n\t\tconst controlN = Number(cohortData.controlN)\n\t\tif (log2fc === null || !Number.isFinite(pValue) || pValue <= 0) continue\n\t\tdots.push({\n\t\t\torganismName: cohortData.organism,\n\t\t\tdisease: cohortData.disease,\n\t\t\tassayName: cohortData.assayName,\n\t\t\tcohortName: cohortData.cohortName,\n\t\t\tPTMType: cohortData.PTMType,\n\t\t\tmodSites: cohortData.modSites,\n\t\t\tproteinAccession: cohortData.proteinAccession,\n\t\t\tuniqueIdentifier: cohortData.uniqueIdentifier,\n\t\t\tlog2fc,\n\t\t\tpValue,\n\t\t\tscore: -Math.log10(Math.max(pValue, 1e-300)),\n\t\t\ttestedN: Number.isFinite(testedN) ? testedN : 0,\n\t\t\tcontrolN: Number.isFinite(controlN) ? controlN : 0,\n\t\t\t// per-dot sample identity (case + control); each sample's region comes from the\n\t\t\t// response-level sampleRegions map, used to count brain-region samples that\n\t\t\t// exactly match the visible dots.\n\t\t\tsampleIds: Array.isArray(cohortData.sampleIds) ? cohortData.sampleIds : []\n\t\t})\n\t}\n\n\tconst panel = holder.append('div').style('margin-bottom', '14px')\n\tconst header = panel\n\t\t.append('div')\n\t\t.style('display', 'flex')\n\t\t.style('align-items', 'center')\n\t\t.style('gap', '6px')\n\t\t.style('margin-bottom', '6px')\n\n\tconst downloadBtn = header.append('div').style('display', 'inline-block')\n\n\theader.append('div').style('font-weight', 600).text('Sample Set Volcano')\n\n\tif (!dots.length) {\n\t\tdownloadBtn.style('display', 'none')\n\t\tpanel\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.85em')\n\t\t\t.style('color', '#666')\n\t\t\t.text('No cohorts with valid fold-change and p-value to plot.')\n\t\treturn { setExternallyHiddenCohorts() {}, onVisibilityChange() {} }\n\t}\n\n\tconst width = 500\n\tconst height = 480\n\tconst margin = { top: 20, right: 30, bottom: 60, left: 70 }\n\tconst innerW = width - margin.left - margin.right\n\tconst innerH = height - margin.top - margin.bottom\n\n\tlet minX = Number.POSITIVE_INFINITY\n\tlet maxX = Number.NEGATIVE_INFINITY\n\tlet maxY = 0\n\tlet maxTestedN = 0\n\tlet minTestedN = Number.POSITIVE_INFINITY\n\tfor (const p of dots) {\n\t\tminX = Math.min(minX, p.log2fc)\n\t\tmaxX = Math.max(maxX, p.log2fc)\n\t\tmaxY = Math.max(maxY, p.score)\n\t\tmaxTestedN = Math.max(maxTestedN, p.testedN)\n\t\tif (p.testedN > 0) minTestedN = Math.min(minTestedN, p.testedN)\n\t}\n\n\tif (maxY < 1) maxY = 1\n\tif (!Number.isFinite(minTestedN)) minTestedN = 1\n\n\tconst xSpan = Math.max(0.05, maxX - minX)\n\tconst xPad = Math.max(0.01, xSpan * 0.1)\n\tconst xMin = Math.min(0, minX - xPad)\n\tconst xMax = Math.max(0, maxX + xPad)\n\tconst yMax = maxY * 1.15\n\n\tconst xScale = scaleLinear().domain([xMin, xMax]).range([0, innerW])\n\tconst yScale = scaleLinear().domain([0, yMax]).range([innerH, 0])\n\tconst radiusRange: [number, number] = [4, 12]\n\tconst radiusScale = scaleLinear()\n\t\t.domain([minTestedN, Math.max(minTestedN + 1, maxTestedN)])\n\t\t.range(radiusRange)\n\tlet scaleDotSize = true\n\tconst getDotRadius = (d: any) =>\n\t\tscaleDotSize ? radiusScale(Math.max(minTestedN, d.testedN || minTestedN)) : (radiusRange[0] + radiusRange[1]) / 2\n\n\tconst organismNames = [...new Set(dots.map((d: any) => d.organismName).filter(Boolean))].sort() as string[]\n\tconst assayNames = [...new Set(dots.map((d: any) => d.assayName))].sort() as string[]\n\tconst cohortNames = [...new Set(dots.map((d: any) => d.cohortName))].sort() as string[]\n\tconst proteinAccessions = [...new Set(dots.map((d: any) => d.proteinAccession))].sort() as string[]\n\n\t// Create color scales for each grouping category\n\tconst organismColorScale = getColors(organismNames.length).domain(organismNames)\n\tconst assayColorScale = getColors(assayNames.length).domain(assayNames)\n\tconst cohortColorScale = getColors(cohortNames.length).domain(cohortNames)\n\tconst proteinColorScale = getColors(proteinAccessions.length).domain(proteinAccessions)\n\n\t// Store colors in maps\n\tconst organismColors = new Map<string, string>(\n\t\torganismNames.map(name => [name, rgb(organismColorScale(name)).formatHex()])\n\t)\n\tconst assayColors = new Map<string, string>(assayNames.map(name => [name, rgb(assayColorScale(name)).formatHex()]))\n\tconst cohortColors = new Map<string, string>(cohortNames.map(name => [name, rgb(cohortColorScale(name)).formatHex()]))\n\tconst proteinColors = new Map<string, string>(\n\t\tproteinAccessions.map(acc => [acc, rgb(proteinColorScale(acc)).formatHex()])\n\t)\n\n\t// Prioritize filled shapes first, then empty shapes\n\tconst prioritizedShapesArray = (() => {\n\t\tconst entries = Object.entries(shapes)\n\t\tconst sorted = [\n\t\t\t...entries.filter(([, s]) => s.isFilled === true),\n\t\t\t...entries.filter(([, s]) => s.isFilled === false),\n\t\t\t...entries.filter(([, s]) => !('isFilled' in s))\n\t\t]\n\t\treturn sorted.map(([, s]) => s.path)\n\t})()\n\n\tconst makeShapeMap = (items: string[]) =>\n\t\tnew Map<string, number>(items.map((item, i) => [item, i % prioritizedShapesArray.length]))\n\tconst organismShapes = makeShapeMap(organismNames)\n\tconst assayShapes = makeShapeMap(assayNames)\n\tconst cohortShapes = makeShapeMap(cohortNames)\n\tconst proteinShapes = makeShapeMap(proteinAccessions)\n\n\ttype ColorMode = 'organism' | 'assayType' | 'cohort' | 'proteinAccession'\n\ttype ShapeMode = 'organism' | 'assayType' | 'cohort' | 'proteinAccession'\n\n\tlet colorMode: ColorMode = 'assayType'\n\tlet shapeMode: ShapeMode = 'organism'\n\tconst customGroupPrefix = '__custom_group__:'\n\tconst makeCustomGroupKey = (name: string) => `${customGroupPrefix}${name}`\n\tconst isCustomGroupKey = (value: string) => value.startsWith(customGroupPrefix)\n\tconst getCustomGroupNameFromKey = (value: string) => value.slice(customGroupPrefix.length)\n\tconst customShapeGroupPrefix = '__custom_shape_group__:'\n\tconst makeCustomShapeGroupKey = (name: string) => `${customShapeGroupPrefix}${name}`\n\tconst isCustomShapeGroupKey = (value: string) => value.startsWith(customShapeGroupPrefix)\n\tconst getCustomShapeGroupNameFromKey = (value: string) => value.slice(customShapeGroupPrefix.length)\n\tconst customColorDomain = Array.from({ length: 64 }, (_, i) => `custom-${i}`)\n\tconst customColorScale = getColors(customColorDomain.length).domain(customColorDomain)\n\tconst colorModesWithGroups: ColorMode[] = ['organism', 'assayType', 'cohort', 'proteinAccession']\n\tconst shapeModesWithGroups: ShapeMode[] = ['organism', 'assayType', 'cohort', 'proteinAccession']\n\tconst createModeMap = <T>(factory: () => T) => ({\n\t\torganism: factory(),\n\t\tassayType: factory(),\n\t\tcohort: factory(),\n\t\tproteinAccession: factory()\n\t})\n\tconst customGroupsByMode = createModeMap(() => new Map<string, Set<string>>())\n\tconst customGroupColorsByMode = createModeMap(() => new Map<string, string>())\n\tconst customShapeGroupsByMode = createModeMap(() => new Map<string, Set<string>>())\n\tconst customShapeIndicesByMode = createModeMap(() => new Map<string, number>())\n\tconst checkedItemsByMode = createModeMap(() => new Set<string>())\n\tconst checkedShapeItemsByMode = createModeMap(() => new Set<string>())\n\tconst groupingModeActive = new Set<ColorMode>()\n\tconst shapeGroupingModeActive = new Set<ShapeMode>()\n\tlet customColorSeed = 0\n\n\tconst getBaseColorValue = (d: any, mode: ColorMode) => {\n\t\tswitch (mode) {\n\t\t\tcase 'organism':\n\t\t\t\treturn d.organismName\n\t\t\tcase 'assayType':\n\t\t\t\treturn d.assayName\n\t\t\tcase 'cohort':\n\t\t\t\treturn d.cohortName\n\t\t\tcase 'proteinAccession':\n\t\t\t\treturn d.proteinAccession\n\t\t\tdefault:\n\t\t\t\treturn ''\n\t\t}\n\t}\n\tconst getCustomGroupOfValue = (mode: ColorMode, value: string) => {\n\t\tfor (const [group, members] of customGroupsByMode[mode]) {\n\t\t\tif (members.has(value)) return group\n\t\t}\n\t\treturn null\n\t}\n\tconst getCustomGroupOfDot = (d: any, mode: ColorMode) => {\n\t\treturn getCustomGroupOfValue(mode, getBaseColorValue(d, mode))\n\t}\n\tconst getCustomShapeGroupOfValue = (mode: ShapeMode, value: string) => {\n\t\tfor (const [group, members] of customShapeGroupsByMode[mode]) {\n\t\t\tif (members.has(value)) return group\n\t\t}\n\t\treturn null\n\t}\n\tconst getCustomShapeGroupOfDot = (d: any, mode: ShapeMode) => {\n\t\treturn getCustomShapeGroupOfValue(mode, getBaseColorValue(d, mode))\n\t}\n\tconst getNextCustomColor = () => {\n\t\tconst color = rgb(customColorScale(customColorDomain[customColorSeed % customColorDomain.length])).formatHex()\n\t\tcustomColorSeed++\n\t\treturn color\n\t}\n\tconst addOrUpdateCustomGroup = (mode: ColorMode, name: string, baseValues: string[]) => {\n\t\tif (!name || !baseValues.length) return\n\t\tfor (const members of customGroupsByMode[mode].values()) {\n\t\t\tfor (const val of baseValues) members.delete(val)\n\t\t}\n\t\tconst existing = customGroupsByMode[mode].get(name) || new Set<string>()\n\t\tfor (const val of baseValues) existing.add(val)\n\t\tcustomGroupsByMode[mode].set(name, existing)\n\t\tif (!customGroupColorsByMode[mode].has(name)) customGroupColorsByMode[mode].set(name, getNextCustomColor())\n\t}\n\tconst removeCustomGroup = (mode: ColorMode, name: string) => {\n\t\tcustomGroupsByMode[mode].delete(name)\n\t\tcustomGroupColorsByMode[mode].delete(name)\n\t\thiddenColor[mode].delete(makeCustomGroupKey(name))\n\t}\n\tconst addOrUpdateCustomShapeGroup = (mode: ShapeMode, name: string, baseValues: string[]) => {\n\t\tif (!name || !baseValues.length) return\n\t\tfor (const members of customShapeGroupsByMode[mode].values()) {\n\t\t\tfor (const val of baseValues) members.delete(val)\n\t\t}\n\t\tconst existing = customShapeGroupsByMode[mode].get(name) || new Set<string>()\n\t\tfor (const val of baseValues) existing.add(val)\n\t\tcustomShapeGroupsByMode[mode].set(name, existing)\n\t\tif (!customShapeIndicesByMode[mode].has(name)) {\n\t\t\tconst idx = customShapeIndicesByMode[mode].size % prioritizedShapesArray.length\n\t\t\tcustomShapeIndicesByMode[mode].set(name, idx)\n\t\t}\n\t}\n\tconst removeCustomShapeGroup = (mode: ShapeMode, name: string) => {\n\t\tcustomShapeGroupsByMode[mode].delete(name)\n\t\tcustomShapeIndicesByMode[mode].delete(name)\n\t\thiddenShape[mode].delete(makeCustomShapeGroupKey(name))\n\t}\n\tconst getCustomGroupItems = (mode: ColorMode) => {\n\t\treturn [...customGroupsByMode[mode].keys()].sort().map(name => makeCustomGroupKey(name))\n\t}\n\tconst getCustomShapeGroupItems = (mode: ShapeMode) => {\n\t\treturn [...customShapeGroupsByMode[mode].keys()].sort().map(name => makeCustomShapeGroupKey(name))\n\t}\n\tconst getLegendItemSampleCount = (mode: ColorMode | ShapeMode, item: string, dotsToCount: any[] = dots) => {\n\t\tif (isCustomGroupKey(item)) {\n\t\t\tconst groupName = getCustomGroupNameFromKey(item)\n\t\t\treturn dotsToCount.filter(\n\t\t\t\td => getCustomGroupOfValue(mode as ColorMode, getBaseColorValue(d, mode as ColorMode)) === groupName\n\t\t\t).length\n\t\t}\n\n\t\tif (isCustomShapeGroupKey(item)) {\n\t\t\tconst groupName = getCustomShapeGroupNameFromKey(item)\n\t\t\treturn dotsToCount.filter(\n\t\t\t\td => getCustomShapeGroupOfValue(mode as ShapeMode, getBaseColorValue(d, mode as ColorMode)) === groupName\n\t\t\t).length\n\t\t}\n\n\t\treturn dotsToCount.filter(d => getBaseColorValue(d, mode as ColorMode) === item).length\n\t}\n\tconst getColor = (d: any) => {\n\t\tconst customGroup = getCustomGroupOfDot(d, colorMode)\n\t\tswitch (colorMode) {\n\t\t\tcase 'organism':\n\t\t\t\tif (customGroup) return customGroupColorsByMode[colorMode].get(customGroup) ?? '#888'\n\t\t\t\treturn organismColors.get(d.organismName) ?? '#888'\n\t\t\tcase 'assayType':\n\t\t\t\tif (customGroup) return customGroupColorsByMode[colorMode].get(customGroup) ?? '#888'\n\t\t\t\treturn assayColors.get(d.assayName) ?? '#888'\n\t\t\tcase 'cohort':\n\t\t\t\tif (customGroup) return customGroupColorsByMode[colorMode].get(customGroup) ?? '#888'\n\t\t\t\treturn cohortColors.get(d.cohortName) ?? '#888'\n\t\t\tcase 'proteinAccession':\n\t\t\t\tif (customGroup) return customGroupColorsByMode[colorMode].get(customGroup) ?? '#888'\n\t\t\t\treturn proteinColors.get(d.proteinAccession) ?? '#888'\n\t\t\tdefault:\n\t\t\t\treturn '#888'\n\t\t}\n\t}\n\tconst getShapeIndex = (d: any) => {\n\t\tconst customShapeGroup = getCustomShapeGroupOfDot(d, shapeMode)\n\t\tif (customShapeGroup) {\n\t\t\treturn customShapeIndicesByMode[shapeMode].get(customShapeGroup) ?? 0\n\t\t}\n\t\tswitch (shapeMode) {\n\t\t\tcase 'organism':\n\t\t\t\treturn organismShapes.get(d.organismName) ?? 0\n\t\t\tcase 'assayType':\n\t\t\t\treturn assayShapes.get(d.assayName) ?? 0\n\t\t\tcase 'cohort':\n\t\t\t\treturn cohortShapes.get(d.cohortName) ?? 0\n\t\t\tcase 'proteinAccession':\n\t\t\t\treturn proteinShapes.get(d.proteinAccession) ?? 0\n\t\t\tdefault:\n\t\t\t\treturn 0\n\t\t}\n\t}\n\tconst getShapePath = (d: any) => {\n\t\tconst index = getShapeIndex(d) % prioritizedShapesArray.length\n\t\treturn prioritizedShapesArray[index]\n\t}\n\tconst getShapeTransform = (d: any, sizeScale = 1) => {\n\t\tconst r = getDotRadius(d) * sizeScale\n\t\tconst scale = r / 8\n\t\tconst x = xScale(d.log2fc) - 8 * scale\n\t\tconst y = yScale(d.score) - 8 * scale\n\t\treturn `translate(${x},${y}) scale(${scale})`\n\t}\n\tconst colorGroupingModes: Array<{ key: ColorMode; label: string }> = [\n\t\t{ key: 'organism', label: 'Organism' },\n\t\t{ key: 'assayType', label: 'Assay' },\n\t\t{ key: 'cohort', label: 'Sample Set' },\n\t\t{ key: 'proteinAccession', label: 'Isoform' }\n\t]\n\tconst shapeGroupingModes: Array<{ key: ShapeMode; label: string }> = [\n\t\t{ key: 'organism', label: 'Organism' },\n\t\t{ key: 'assayType', label: 'Assay' },\n\t\t{ key: 'cohort', label: 'Sample Set' },\n\t\t{ key: 'proteinAccession', label: 'Isoform' }\n\t]\n\tconst makeHiddenState = () => ({\n\t\torganism: new Set<string>(),\n\t\tassayType: new Set<string>(),\n\t\tcohort: new Set<string>(),\n\t\tproteinAccession: new Set<string>()\n\t})\n\tconst hiddenColor = makeHiddenState()\n\tconst hiddenShape = makeHiddenState()\n\t// Cohorts hidden by an external driver (the brain plot). Kept separate from\n\t// hiddenColor so manual hide/show in the legend doesn't fight with it.\n\tlet externalHiddenCohorts: Set<string> = new Set()\n\tconst visibilityChangeListeners: ((v: { dots: any[] }) => void)[] = []\n\tconst getColorValueByMode = (d: any, mode: ColorMode) => {\n\t\tswitch (mode) {\n\t\t\tcase 'organism':\n\t\t\t\treturn getCustomGroupOfDot(d, mode)\n\t\t\t\t\t? makeCustomGroupKey(getCustomGroupOfDot(d, mode) as string)\n\t\t\t\t\t: d.organismName\n\t\t\tcase 'assayType':\n\t\t\t\treturn getCustomGroupOfDot(d, mode) ? makeCustomGroupKey(getCustomGroupOfDot(d, mode) as string) : d.assayName\n\t\t\tcase 'cohort':\n\t\t\t\treturn getCustomGroupOfDot(d, mode) ? makeCustomGroupKey(getCustomGroupOfDot(d, mode) as string) : d.cohortName\n\t\t\tcase 'proteinAccession':\n\t\t\t\treturn getCustomGroupOfDot(d, mode)\n\t\t\t\t\t? makeCustomGroupKey(getCustomGroupOfDot(d, mode) as string)\n\t\t\t\t\t: d.proteinAccession\n\t\t\tdefault:\n\t\t\t\treturn ''\n\t\t}\n\t}\n\tconst getShapeValueByMode = (d: any, mode: ShapeMode) => {\n\t\tswitch (mode) {\n\t\t\tcase 'organism':\n\t\t\t\treturn getCustomShapeGroupOfDot(d, mode)\n\t\t\t\t\t? makeCustomShapeGroupKey(getCustomShapeGroupOfDot(d, mode) as string)\n\t\t\t\t\t: d.organismName\n\t\t\tcase 'assayType':\n\t\t\t\treturn getCustomShapeGroupOfDot(d, mode)\n\t\t\t\t\t? makeCustomShapeGroupKey(getCustomShapeGroupOfDot(d, mode) as string)\n\t\t\t\t\t: d.assayName\n\t\t\tcase 'cohort':\n\t\t\t\treturn getCustomShapeGroupOfDot(d, mode)\n\t\t\t\t\t? makeCustomShapeGroupKey(getCustomShapeGroupOfDot(d, mode) as string)\n\t\t\t\t\t: d.cohortName\n\t\t\tcase 'proteinAccession':\n\t\t\t\treturn getCustomShapeGroupOfDot(d, mode)\n\t\t\t\t\t? makeCustomShapeGroupKey(getCustomShapeGroupOfDot(d, mode) as string)\n\t\t\t\t\t: d.proteinAccession\n\t\t\tdefault:\n\t\t\t\treturn ''\n\t\t}\n\t}\n\tconst isDotHidden = (d: any) => {\n\t\tconst colorValue = getColorValueByMode(d, colorMode)\n\t\tconst shapeValue = getShapeValueByMode(d, shapeMode)\n\t\treturn (\n\t\t\thiddenColor[colorMode].has(colorValue) ||\n\t\t\thiddenShape[shapeMode].has(shapeValue) ||\n\t\t\texternalHiddenCohorts.has(d.cohortName)\n\t\t)\n\t}\n\tconst getDotDistancePx = (d1: any, d2: any) => {\n\t\tconst x = xScale(d1.log2fc) - xScale(d2.log2fc)\n\t\tconst y = yScale(d1.score) - yScale(d2.score)\n\t\treturn Math.sqrt(x * x + y * y)\n\t}\n\tconst getVisibleDots = () => dots.filter(d => !isDotHidden(d))\n\tconst getVisibleTestedNStats = () => {\n\t\tconst visibleDots = getVisibleDots()\n\t\tif (!visibleDots.length) {\n\t\t\treturn { domainMin: 1, domainMax: 2, minLabel: 0, maxLabel: 0 }\n\t\t}\n\n\t\tlet visibleMax = 0\n\t\tlet visibleMin = Number.POSITIVE_INFINITY\n\t\tfor (const d of visibleDots) {\n\t\t\tvisibleMax = Math.max(visibleMax, d.testedN)\n\t\t\tif (d.testedN > 0) visibleMin = Math.min(visibleMin, d.testedN)\n\t\t}\n\n\t\tif (!Number.isFinite(visibleMin)) visibleMin = 1\n\t\tconst domainMax = Math.max(visibleMin + 1, visibleMax)\n\t\treturn { domainMin: visibleMin, domainMax, minLabel: visibleMin, maxLabel: visibleMax || visibleMin }\n\t}\n\tconst updateRadiusScaleForVisibleDots = () => {\n\t\tconst stats = getVisibleTestedNStats()\n\t\tradiusScale.domain([stats.domainMin, stats.domainMax]).range(radiusRange)\n\t\treturn stats\n\t}\n\tconst getClusterDots = (seed: any) => {\n\t\tconst thresholdPx = 5\n\t\treturn dots\n\t\t\t.filter(d => !isDotHidden(d) && getDotDistancePx(d, seed) < thresholdPx)\n\t\t\t.sort((a, b) => getDotDistancePx(a, seed) - getDotDistancePx(b, seed))\n\t}\n\tconst buildClusterTableData = (clusterDots: any[]): { columns: any[]; rows: any[] } => {\n\t\t// Union semantics: PTM dots and non-PTM dots have different attribute\n\t\t// keys (PTM Type, Modified Site, PTM identifier vs Isoform identifier),\n\t\t// so include any column whose underlying field is present on at least\n\t\t// one row in the cluster. Cells for rows that don't have that field\n\t\t// render as blank.\n\t\tconst hasPtm = clusterDots.some(d => d.PTMType)\n\t\tconst hasNonPtm = clusterDots.some(d => !d.PTMType)\n\t\tconst hasModSites = clusterDots.some(d => d.modSites)\n\n\t\tconst columns: any[] = [{ label: 'Organism' }, { label: 'Assay' }, { label: 'Sample Set' }]\n\t\tif (hasPtm) columns.push({ label: 'PTM Type' })\n\t\tif (hasModSites) columns.push({ label: 'Modified Site' })\n\t\tif (hasPtm) columns.push({ label: 'PTM' })\n\t\tif (hasNonPtm) columns.push({ label: 'Isoform' })\n\t\tcolumns.push({ label: 'log\u2082(FC)', sortable: true }, { label: 'p-value', sortable: true })\n\n\t\tconst rows = clusterDots.map(d => {\n\t\t\tconst isPtm = !!d.PTMType\n\t\t\tconst row: any[] = [{ value: d.organismName || '' }, { value: d.assayName || '' }, { value: d.cohortName || '' }]\n\t\t\tif (hasPtm) row.push({ value: isPtm ? d.PTMType || '' : '' })\n\t\t\tif (hasModSites) row.push({ value: d.modSites || '' })\n\t\t\tif (hasPtm) row.push({ value: isPtm ? d.uniqueIdentifier || '' : '' })\n\t\t\tif (hasNonPtm) row.push({ value: !isPtm ? d.uniqueIdentifier || '' : '' })\n\t\t\trow.push({ value: roundValue(d.log2fc, 3) }, { value: d.pValue.toExponential(2) })\n\t\t\treturn row\n\t\t})\n\t\treturn { columns, rows }\n\t}\n\n\tconst updateDots = () => {\n\t\tcohortDots\n\t\t\t.attr('fill', (d: any) => getColor(d))\n\t\t\t.attr('stroke', (d: any) => getColor(d))\n\t\t\t.attr('stroke-width', 1)\n\t\t\t.attr('d', (d: any) => getShapePath(d))\n\t\t\t.attr('transform', (d: any) => getShapeTransform(d))\n\t\t\t.style('opacity', (d: any) => (isDotHidden(d) ? 0 : 1))\n\t\t\t.style('pointer-events', (d: any) => (isDotHidden(d) ? 'none' : 'auto'))\n\t}\n\tconst getShapeMapInUse = () => {\n\t\tswitch (shapeMode) {\n\t\t\tcase 'organism':\n\t\t\t\treturn organismShapes\n\t\t\tcase 'assayType':\n\t\t\t\treturn assayShapes\n\t\t\tcase 'cohort':\n\t\t\t\treturn cohortShapes\n\t\t\tcase 'proteinAccession':\n\t\t\t\treturn proteinShapes\n\t\t\tdefault:\n\t\t\t\treturn assayShapes\n\t\t}\n\t}\n\n\tconst plotAndLegend = panel\n\t\t.append('div')\n\t\t.style('display', 'flex')\n\t\t.style('align-items', 'flex-start')\n\t\t.style('gap', '4px')\n\t\t.style('flex-wrap', 'wrap')\n\n\tconst svg = plotAndLegend\n\t\t.append('svg')\n\t\t.attr('width', width)\n\t\t.attr('height', height)\n\t\t.style('display', 'block')\n\t\t.style('max-width', '100%')\n\t\t.style('height', 'auto')\n\tconst g = svg.append('g').attr('transform', `translate(${margin.left},${margin.top})`)\n\n\tconst xAxis = g.append('g').attr('transform', `translate(0,${innerH})`).call(axisBottom(xScale))\n\taxisstyle({ axis: xAxis, color: 'black', showline: true })\n\n\tconst yAxis = g.append('g').call(axisLeft(yScale))\n\taxisstyle({ axis: yAxis, color: 'black', showline: true })\n\n\tconst x0 = xScale(0)\n\tconst pThreshold = -Math.log10(0.05)\n\tconst thresholdY = yScale(Math.min(yMax, pThreshold))\n\n\t// Guide lines\n\tg.append('line')\n\t\t.attr('x1', x0)\n\t\t.attr('x2', x0)\n\t\t.attr('y1', 0)\n\t\t.attr('y2', innerH)\n\t\t.attr('stroke', 'black')\n\t\t.attr('stroke-dasharray', '5 4')\n\t\t.attr('stroke-opacity', 0.4)\n\n\tg.append('line')\n\t\t.attr('x1', 0)\n\t\t.attr('x2', innerW)\n\t\t.attr('y1', thresholdY)\n\t\t.attr('y2', thresholdY)\n\t\t.attr('stroke', 'black')\n\t\t.attr('stroke-dasharray', '5 4')\n\t\t.attr('stroke-opacity', 0.4)\n\n\t// Axis labels\n\tg.append('text')\n\t\t.attr('x', innerW / 2)\n\t\t.attr('y', innerH + 44)\n\t\t.attr('text-anchor', 'middle')\n\t\t.style('font-weight', 600)\n\t\t.text('log2 fold change (disease / control)')\n\n\tg.append('text')\n\t\t.attr('transform', `translate(${-50},${innerH / 2}) rotate(-90)`)\n\t\t.attr('text-anchor', 'middle')\n\t\t.style('font-weight', 600)\n\t\t.text('-log10(p-value)')\n\n\t// Points\n\tconst cohortDots = g\n\t\t.selectAll('path.cohort-dot')\n\t\t.data(dots)\n\t\t.enter()\n\t\t.append('path')\n\t\t.attr('class', 'cohort-dot')\n\t\t.attr('transform', (d: any) => getShapeTransform(d, 0.9))\n\t\t.attr('d', (d: any) => getShapePath(d))\n\t\t.attr('fill', (d: any) => getColor(d))\n\t\t.attr('fill-opacity', 0.5)\n\t\t.attr('stroke', (d: any) => getColor(d))\n\t\t.attr('stroke-width', 1)\n\t\t.attr('vector-effect', 'non-scaling-stroke')\n\n\tcohortDots\n\t\t.transition()\n\t\t.duration(350)\n\t\t.attr('d', (d: any) => getShapePath(d))\n\t\t.attr('transform', (d: any) => getShapeTransform(d, 1))\n\n\t// Hover-ring layer \u2014 visual only, never intercepts mouse events.\n\tconst hoverLayer = g.append('g').attr('class', 'cohort-volcano-hover').style('pointer-events', 'none')\n\n\t// Cover rect \u2014 last child so it sits on top of dots and hover shapes.\n\tconst cover = g\n\t\t.append('rect')\n\t\t.attr('class', 'cohort-volcano-cover')\n\t\t.attr('x', 0)\n\t\t.attr('y', 0)\n\t\t.attr('width', innerW)\n\t\t.attr('height', innerH)\n\t\t.attr('fill', 'transparent')\n\t\t.style('pointer-events', 'all')\n\t\t.style('cursor', 'default')\n\n\tupdateDots()\n\n\tconst renderDotInfoTable = (d: any, container: any) => {\n\t\tconst tbl = table2col({ holder: container.append('table') })\n\t\ttbl.addRow('Organism', d.organismName)\n\t\ttbl.addRow('Disease', d.disease)\n\t\ttbl.addRow('Assay', d.assayName)\n\t\ttbl.addRow('Sample Set', d.cohortName)\n\t\t// Distinct brain regions the dot's samples come from (names when configured).\n\t\tconst dotRegions = [\n\t\t\t...new Set((d.sampleIds || []).map((sid: string) => sampleRegionById[sid]).filter(Boolean))\n\t\t] as string[]\n\t\tif (dotRegions.length) {\n\t\t\tconst regionNames = self.app.vocabApi.termdbConfig?.queries?.proteome?.brainRegions?.regions || {}\n\t\t\ttbl.addRow(\n\t\t\t\t'Brain Region',\n\t\t\t\tdotRegions\n\t\t\t\t\t.sort()\n\t\t\t\t\t.map(c => (regionNames[c] ? `${regionNames[c]} (${c})` : c))\n\t\t\t\t\t.join(', ')\n\t\t\t)\n\t\t}\n\t\ttbl.addRow('Protein Accession', d.proteinAccession)\n\t\tif (d.PTMType) {\n\t\t\ttbl.addRow('PTM Type', d.PTMType)\n\t\t\ttbl.addRow('Modified Site', d.modSites)\n\t\t\ttbl.addRow('PTM', d.uniqueIdentifier)\n\t\t} else {\n\t\t\ttbl.addRow('Isoform', d.uniqueIdentifier)\n\t\t}\n\t\ttbl.addRow('log2 fold change', roundValue(d.log2fc, 3))\n\t\ttbl.addRow('p value', d.pValue.toExponential(2))\n\t\ttbl.addRow('-log10(p)', roundValue(d.score, 3))\n\t\ttbl.addRow('Case samples', d.testedN)\n\t\ttbl.addRow('Control samples', d.controlN)\n\t}\n\n\tconst interactions = new DataPointInteractions<any>({\n\t\tcover,\n\t\thoverLayer,\n\t\thoverTip: self.dom.tip,\n\t\tpoints: dots,\n\t\tgetX: (d: any) => xScale(d.log2fc),\n\t\tgetY: (d: any) => yScale(d.score),\n\t\t// Function form because the size-legend menu mutates radiusRange at runtime;\n\t\t// caching this once would leave the broad-query stale after dots are enlarged.\n\t\thitRadius: () => radiusRange[1] + COHORT_VOLCANO_HIT_RADIUS_PADDING_PX,\n\t\tperDotRadius: (d: any) => getDotRadius(d),\n\t\tperDotBuffer: COHORT_VOLCANO_HIT_BUFFER_PX,\n\t\tisHidden: isDotHidden,\n\t\tgetCluster: (seed: any) => getClusterDots(seed),\n\t\ttoHoverSpec: (d: any) => ({\n\t\t\tpath: getShapePath(d),\n\t\t\ttransform: getShapeTransform(d, COHORT_VOLCANO_HOVER_RING_SIZE_SCALE),\n\t\t\tstroke: 'black',\n\t\t\tstrokeWidth: COHORT_VOLCANO_HOVER_RING_STROKE_PX\n\t\t}),\n\t\tmaxTooltipRows: COHORT_VOLCANO_HOVER_MAX_COHORTS,\n\t\titemNoun: 'cohort',\n\t\trenderSingleHoverTooltip: renderDotInfoTable,\n\t\tbuildMultiHitTableData: buildClusterTableData,\n\t\tgetActions: (d: any) => [\n\t\t\t{\n\t\t\t\tlabel: 'Violin plot',\n\t\t\t\tonClick: () => {\n\t\t\t\t\tlaunchViolinPlot(self, d.organismName, d.assayName, d.cohortName, d.uniqueIdentifier)\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\trenderSingleHitInfo: renderDotInfoTable,\n\t\tgetRowKey: (d: any) => d.uniqueIdentifier\n\t})\n\n\tinteractions.attach()\n\n\tconst legend = plotAndLegend\n\t\t.append('div')\n\t\t.style('margin', '0')\n\t\t.style('min-width', '220px')\n\t\t.style('font-size', '.75em')\n\t\t.style('color', '#374151')\n\tfunction renderSizeLegend() {\n\t\tlegendSvg.selectAll('*').remove()\n\t\tconst stats = updateRadiusScaleForVisibleDots()\n\n\t\tnew LegendCircleReference({\n\t\t\tg: legendSvg.append('g').attr('transform', 'translate(12, 8)'),\n\t\t\tinputMax: radiusRange[1],\n\t\t\tinputMin: radiusRange[0],\n\t\t\tmaxLabel: stats.maxLabel,\n\t\t\tmaxRadius: radiusScale(stats.domainMax),\n\t\t\tminLabel: stats.minLabel,\n\t\t\tminRadius: radiusScale(stats.domainMin),\n\t\t\ttitle: '',\n\t\t\tmenu: {\n\t\t\t\tminMaxLabel: 'pixels',\n\t\t\t\tcallback: async (obj: { min: number; max: number }) => {\n\t\t\t\t\tradiusRange[0] = obj.min\n\t\t\t\t\tradiusRange[1] = obj.max\n\t\t\t\t\tradiusScale.range([obj.min, obj.max])\n\t\t\t\t\tupdateDots()\n\t\t\t\t\trenderSizeLegend()\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\tconst refreshAfterVisibilityChange = () => {\n\t\tupdateRadiusScaleForVisibleDots()\n\t\tupdateDots()\n\t\trenderColorLegend()\n\t\trenderSizeLegend()\n\t\tif (visibilityChangeListeners.length) {\n\t\t\tconst visibleDots = getVisibleDots()\n\t\t\tfor (const cb of visibilityChangeListeners) cb({ dots: visibleDots })\n\t\t}\n\t}\n\n\tconst termName = self.state.config?.tw?.term?.name || ''\n\tconst svgName = `${termName}.cohort-volcano`\n\tconst downloadVolcanoSvg = () => {\n\t\tconst plotNode = svg.node()\n\t\tconst legendNode = legend.node()\n\t\tif (!plotNode) return\n\n\t\tconst plotWidth = width\n\t\tconst plotHeight = height\n\t\tconst legendRect = legendNode?.getBoundingClientRect()\n\t\tconst legendWidth = Math.max(220, Math.ceil(legendRect?.width || 220))\n\t\tconst legendHeight = Math.max(plotHeight, Math.ceil(legendRect?.height || 0))\n\t\tconst gap = 14\n\n\t\tconst combinedSvg = select(creator('svg').call(document.documentElement) as SVGSVGElement)\n\t\t\t.attr('width', plotWidth + gap + legendWidth)\n\t\t\t.attr('height', legendHeight)\n\n\t\tcombinedSvg.append(() => plotNode.cloneNode(true) as SVGSVGElement)\n\n\t\tcombinedSvg\n\t\t\t.append('foreignObject')\n\t\t\t.attr('x', plotWidth + gap)\n\t\t\t.attr('y', 0)\n\t\t\t.attr('width', legendWidth)\n\t\t\t.attr('height', legendHeight)\n\t\t\t.append(() => {\n\t\t\t\tconst clone = legendNode!.cloneNode(true) as HTMLDivElement\n\t\t\t\tclone.style.margin = '0px'\n\t\t\t\tclone.style.minWidth = '0px'\n\t\t\t\treturn clone\n\t\t\t})\n\n\t\tto_svg(combinedSvg.node()!, svgName, { apply_dom_styles: true })\n\t}\n\tcontrolIcons.download(downloadBtn, { handler: downloadVolcanoSvg, title: 'Download' })\n\n\tconst colorLegendDiv = legend.append('div').style('margin-bottom', '12px')\n\tconst shapeLegendDiv = legend.append('div').style('margin-bottom', '12px')\n\tconst sizeLegendRow = legend\n\t\t.append('div')\n\t\t.style('display', 'flex')\n\t\t.style('flex-direction', 'column')\n\t\t.style('gap', '6px')\n\t\t.style('margin-top', '8px')\n\n\tsizeLegendRow.append('div').style('border-top', '1px solid #e5e7eb').style('margin', '8px 0 8px 0')\n\n\tconst sizeModeRow = sizeLegendRow\n\t\t.append('div')\n\t\t.style('display', 'flex')\n\t\t.style('align-items', 'center')\n\t\t.style('gap', '4px')\n\t\t.style('flex-wrap', 'wrap')\n\n\tconst sizeToggleCheckbox = sizeModeRow\n\t\t.append('input')\n\t\t.attr('type', 'checkbox')\n\t\t.attr('aria-label', 'Scale dot size by case sample size')\n\t\t.property('checked', scaleDotSize)\n\t\t.style('cursor', 'pointer')\n\t\t.style('margin', '0')\n\t\t.on('change', function (this: HTMLInputElement) {\n\t\t\tscaleDotSize = this.checked\n\t\t\tsizeModeText.style('opacity', scaleDotSize ? 1 : 0.4)\n\t\t\tlegendSvg.style('opacity', scaleDotSize ? 1 : 0.4)\n\t\t\tupdateDots()\n\t\t\trenderSizeLegend()\n\t\t})\n\tvoid sizeToggleCheckbox\n\n\tconst sizeModeText = sizeModeRow.append('span').style('display', 'inline-flex').style('gap', '6px')\n\tsizeModeText.append('span').text('Scale by')\n\tsizeModeText\n\t\t.append('span')\n\t\t.text('Case sample size')\n\t\t.style('font-weight', '600')\n\t\t.style('text-decoration', 'underline')\n\t\t.style('color', '#111')\n\tsizeModeText.style('opacity', scaleDotSize ? 1 : 0.4)\n\n\tconst legendSvg = sizeLegendRow.append('svg').attr('width', 190).attr('height', 110).style('display', 'block')\n\tlegendSvg.style('opacity', scaleDotSize ? 1 : 0.4)\n\n\tfunction renderColorLegend() {\n\t\tcolorLegendDiv.selectAll('*').remove()\n\t\tshapeLegendDiv.selectAll('*').remove()\n\n\t\tconst setCreateButtonState = (\n\t\t\tcontainer: any,\n\t\t\tisActive: boolean,\n\t\t\tinputSelector: string,\n\t\t\tbuttonSelector: string,\n\t\t\thasCheckedItems: boolean\n\t\t) => {\n\t\t\tif (!isActive) return\n\t\t\tconst inputNode = container.select(inputSelector).node() as HTMLInputElement | null\n\t\t\tconst createBtn = container.select(buttonSelector)\n\t\t\tif (!inputNode || createBtn.empty()) return\n\t\t\tconst shouldDisable = !inputNode.value.trim() || !hasCheckedItems\n\t\t\tcreateBtn\n\t\t\t\t.property('disabled', shouldDisable)\n\t\t\t\t.style('opacity', shouldDisable ? '0.5' : '1')\n\t\t\t\t.style('cursor', shouldDisable ? 'not-allowed' : 'pointer')\n\t\t}\n\n\t\tconst updateColorCreateButtonState = () => {\n\t\t\tsetCreateButtonState(\n\t\t\t\tcolorLegendDiv,\n\t\t\t\tgroupingModeActive.has(colorMode),\n\t\t\t\t'input[data-role=\"custom-group-name\"]',\n\t\t\t\t'button[data-role=\"create-custom-group-submit\"]',\n\t\t\t\tcheckedItemsByMode[colorMode].size > 0\n\t\t\t)\n\t\t}\n\n\t\tconst updateShapeCreateButtonState = () => {\n\t\t\tsetCreateButtonState(\n\t\t\t\tshapeLegendDiv,\n\t\t\t\tshapeGroupingModeActive.has(shapeMode),\n\t\t\t\t'input[data-role=\"custom-shape-group-name\"]',\n\t\t\t\t'button[data-role=\"create-custom-shape-group-submit\"]',\n\t\t\t\tcheckedShapeItemsByMode[shapeMode].size > 0\n\t\t\t)\n\t\t}\n\n\t\tconst modeRow = colorLegendDiv\n\t\t\t.append('div')\n\t\t\t.style('display', 'flex')\n\t\t\t.style('gap', '10px')\n\t\t\t.style('margin-bottom', '6px')\n\t\t\t.style('flex-wrap', 'wrap')\n\n\t\tmodeRow.append('span').text('Color by')\n\n\t\tfor (const { key, label } of colorGroupingModes) {\n\t\t\tmodeRow\n\t\t\t\t.append('span')\n\t\t\t\t.text(label)\n\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t.style('font-weight', key === colorMode ? '600' : '400')\n\t\t\t\t.style('text-decoration', key === colorMode ? 'underline' : 'none')\n\t\t\t\t.style('color', key === colorMode ? '#111' : '#6b7280')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tgroupingModeActive.delete(colorMode)\n\t\t\t\t\tcheckedItemsByMode[colorMode].clear()\n\t\t\t\t\tcolorMode = key\n\t\t\t\t\trefreshAfterVisibilityChange()\n\t\t\t\t})\n\t\t}\n\n\t\tconst makeLegendItems = (items: string[], colorMap: Map<string, string>) => {\n\t\t\t// Filter dots to exclude those hidden by shape filtering or by the brain\n\t\t\t// plot's region hide (externalHiddenCohorts), so legend n= reflects both.\n\t\t\tconst dotsVisibleByShape = dots.filter(\n\t\t\t\td => !hiddenShape[shapeMode].has(getShapeValueByMode(d, shapeMode)) && !externalHiddenCohorts.has(d.cohortName)\n\t\t\t)\n\t\t\tconst openColorMenu = (event: any, name: string, swatch: any) => {\n\t\t\t\tconst menu = new Menu({ padding: '0px' })\n\t\t\t\tconst div = menu.d.append('div')\n\t\t\t\tconst hidden = hiddenColor[colorMode].has(name)\n\t\t\t\tconst hiddenCount = hiddenColor[colorMode].size\n\n\t\t\t\tdiv\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t.text(hidden ? 'Show' : 'Hide')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tif (hidden) hiddenColor[colorMode].delete(name)\n\t\t\t\t\t\telse hiddenColor[colorMode].add(name)\n\t\t\t\t\t\trefreshAfterVisibilityChange()\n\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t})\n\n\t\t\t\tdiv\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t.text('Show only')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\thiddenColor[colorMode].clear()\n\t\t\t\t\t\tfor (const item of items) {\n\t\t\t\t\t\t\tif (item != name) hiddenColor[colorMode].add(item)\n\t\t\t\t\t\t}\n\t\t\t\t\t\trefreshAfterVisibilityChange()\n\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t})\n\n\t\t\t\tif (hiddenCount > 1)\n\t\t\t\t\tdiv\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t\t.text('Show all')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\thiddenColor[colorMode].clear()\n\t\t\t\t\t\t\trefreshAfterVisibilityChange()\n\t\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t\t})\n\n\t\t\t\tconst input: any = div\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr('class', 'sja_sharp_border')\n\t\t\t\t\t.style('padding', '0px 10px')\n\t\t\t\t\t.text('Color:')\n\t\t\t\t\t.append('input')\n\t\t\t\t\t.attr('type', 'color')\n\t\t\t\t\t.attr('value', colorMap.get(name) ?? '#888')\n\t\t\t\t\t.on('change', () => {\n\t\t\t\t\t\tconst newColor = input.node().value\n\t\t\t\t\t\tif (isCustomGroupKey(name)) {\n\t\t\t\t\t\t\tcustomGroupColorsByMode[colorMode].set(getCustomGroupNameFromKey(name), newColor)\n\t\t\t\t\t\t} else if (!isCustomGroupKey(name)) {\n\t\t\t\t\t\t\tif (colorMode == 'organism') organismColors.set(name, newColor)\n\t\t\t\t\t\t\telse if (colorMode == 'assayType') assayColors.set(name, newColor)\n\t\t\t\t\t\t\telse if (colorMode == 'cohort') cohortColors.set(name, newColor)\n\t\t\t\t\t\t\telse if (colorMode == 'proteinAccession') proteinColors.set(name, newColor)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcolorMap.set(name, newColor)\n\t\t\t\t\t\tswatch.style('background', newColor)\n\t\t\t\t\t\tupdateDots()\n\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t})\n\n\t\t\t\tif (isCustomGroupKey(name))\n\t\t\t\t\tdiv\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t\t.text('Remove group')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\tremoveCustomGroup(colorMode, getCustomGroupNameFromKey(name))\n\t\t\t\t\t\t\trefreshAfterVisibilityChange()\n\t\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t\t})\n\t\t\t\tmenu.showunder(event.target)\n\t\t\t}\n\n\t\t\tfor (const name of items) {\n\t\t\t\tconst hidden = hiddenColor[colorMode].has(name)\n\t\t\t\tconst isGroup = isCustomGroupKey(name)\n\t\t\t\tconst displayName = isGroup ? getCustomGroupNameFromKey(name) : name\n\t\t\t\tconst inGroup = !isGroup ? getCustomGroupOfValue(colorMode, name) : null\n\t\t\t\tconst sampleCount = getLegendItemSampleCount(colorMode, name, dotsVisibleByShape)\n\t\t\t\tif (sampleCount === 0) continue\n\t\t\t\tconst row = colorLegendDiv\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('display', 'flex')\n\t\t\t\t\t.style('align-items', 'center')\n\t\t\t\t\t.style('gap', '6px')\n\t\t\t\t\t.style('margin-bottom', '3px')\n\t\t\t\tif (!isGroup && groupingModeActive.has(colorMode)) {\n\t\t\t\t\tconst cb = row.append('input').attr('type', 'checkbox').style('cursor', 'pointer').style('flex-shrink', '0')\n\t\t\t\t\tconst cbNode = cb.node() as HTMLInputElement\n\t\t\t\t\tcbNode.checked = checkedItemsByMode[colorMode].has(name)\n\t\t\t\t\tcb.on('change', () => {\n\t\t\t\t\t\tif (cbNode.checked) checkedItemsByMode[colorMode].add(name)\n\t\t\t\t\t\telse checkedItemsByMode[colorMode].delete(name)\n\t\t\t\t\t\tupdateColorCreateButtonState()\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tconst swatch = row\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t\t.style('width', '10px')\n\t\t\t\t\t.style('height', '10px')\n\t\t\t\t\t.style('border-radius', '50%')\n\t\t\t\t\t.style('background', colorMap.get(name) ?? '#888')\n\t\t\t\t\t.style('opacity', hidden ? 0.35 : 0.8)\n\t\t\t\t\t.style('flex-shrink', '0')\n\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\tswatch.on('click', (event: any) => openColorMenu(event, name, swatch))\n\t\t\t\trow\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.text(`${displayName}, n=${sampleCount}`)\n\t\t\t\t\t.style('text-decoration', hidden ? 'line-through' : 'none')\n\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t\t.on('click', (event: any) => openColorMenu(event, name, swatch))\n\t\t\t\tif (isGroup) {\n\t\t\t\t\tconst count = customGroupsByMode[colorMode].get(getCustomGroupNameFromKey(name))?.size || 0\n\t\t\t\t\tconst itemLabel =\n\t\t\t\t\t\tcolorMode === 'organism'\n\t\t\t\t\t\t\t? 'organisms'\n\t\t\t\t\t\t\t: colorMode === 'assayType'\n\t\t\t\t\t\t\t? 'assays'\n\t\t\t\t\t\t\t: colorMode === 'cohort'\n\t\t\t\t\t\t\t? 'sample sets'\n\t\t\t\t\t\t\t: colorMode === 'proteinAccession'\n\t\t\t\t\t\t\t? 'isoforms'\n\t\t\t\t\t\t\t: 'items'\n\t\t\t\t\trow.append('span').style('color', '#6b7280').text(`(${count} ${itemLabel})`)\n\t\t\t\t} else if (inGroup) {\n\t\t\t\t\trow.append('span').style('color', '#6b7280').style('font-style', 'italic').text(`\u2192 ${inGroup}`)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst buildModeLegendItems = (baseItems: string[], baseColorMap: Map<string, string>) => {\n\t\t\t// Hide base items that have been absorbed into a custom group\n\t\t\tconst visibleBaseItems = baseItems.filter(name => !getCustomGroupOfValue(colorMode, name))\n\t\t\tconst mergedColorMap = new Map<string, string>()\n\t\t\tfor (const name of visibleBaseItems) mergedColorMap.set(name, baseColorMap.get(name) ?? '#888')\n\t\t\tfor (const name of getCustomGroupItems(colorMode)) {\n\t\t\t\tconst rawName = getCustomGroupNameFromKey(name)\n\t\t\t\tmergedColorMap.set(name, customGroupColorsByMode[colorMode].get(rawName) ?? '#888')\n\t\t\t}\n\t\t\treturn { items: [...visibleBaseItems, ...getCustomGroupItems(colorMode)], colorMap: mergedColorMap }\n\t\t}\n\n\t\tconst renderCustomGroupControls = () => {\n\t\t\tif (!colorModesWithGroups.includes(colorMode)) return\n\n\t\t\tif (!groupingModeActive.has(colorMode)) {\n\t\t\t\tconst createBtn = colorLegendDiv\n\t\t\t\t\t.append('button')\n\t\t\t\t\t.attr('type', 'button')\n\t\t\t\t\t.style('font-size', '1em')\n\t\t\t\t\t.style('font-weight', '400')\n\t\t\t\t\t.style('margin-top', '6px')\n\t\t\t\t\t.style('padding', '0')\n\t\t\t\t\t.style('border', 'none')\n\t\t\t\t\t.style('border-radius', '0')\n\t\t\t\t\t.style('background', 'transparent')\n\t\t\t\t\t.style('color', '#6b7280')\n\t\t\t\t\t.style('box-shadow', 'none')\n\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t\t.style('transition', 'color 120ms ease')\n\t\t\t\t\t.text('+ Create custom group')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tgroupingModeActive.add(colorMode)\n\t\t\t\t\t\trenderColorLegend()\n\t\t\t\t\t})\n\t\t\t\tcreateBtn\n\t\t\t\t\t.on('mouseover', function (this: any) {\n\t\t\t\t\t\tselect(this).style('color', '#111827')\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseout', function (this: any) {\n\t\t\t\t\t\tselect(this).style('color', '#6b7280')\n\t\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tcolorLegendDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('font-size', '11px')\n\t\t\t\t.style('color', '#6b7280')\n\t\t\t\t.style('margin-bottom', '4px')\n\t\t\t\t.text('Check items to include in the new group:')\n\n\t\t\tconst controls = colorLegendDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'flex')\n\t\t\t\t.style('gap', '6px')\n\t\t\t\t.style('align-items', 'center')\n\t\t\t\t.style('flex-wrap', 'wrap')\n\t\t\t\t.style('margin-top', '4px')\n\n\t\t\tconst nameInput = controls\n\t\t\t\t.append('input')\n\t\t\t\t.attr('data-role', 'custom-group-name')\n\t\t\t\t.attr('type', 'text')\n\t\t\t\t.attr('placeholder', 'Group name')\n\t\t\t\t.style('font-size', '12px')\n\t\t\t\t.style('padding', '2px 4px')\n\t\t\t\t.style('min-width', '100px')\n\t\t\t\t.on('input', () => updateColorCreateButtonState())\n\n\t\t\tcontrols\n\t\t\t\t.append('button')\n\t\t\t\t.attr('data-role', 'create-custom-group-submit')\n\t\t\t\t.attr('type', 'button')\n\t\t\t\t.style('font-size', '12px')\n\t\t\t\t.style('padding', '2px 6px')\n\t\t\t\t.text('Create')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tconst groupName = ((nameInput.node() as HTMLInputElement)?.value || '').trim()\n\t\t\t\t\tif (!groupName || checkedItemsByMode[colorMode].size < 1) return\n\t\t\t\t\taddOrUpdateCustomGroup(colorMode, groupName, [...checkedItemsByMode[colorMode]])\n\t\t\t\t\tcheckedItemsByMode[colorMode].clear()\n\t\t\t\t\tgroupingModeActive.delete(colorMode)\n\t\t\t\t\trefreshAfterVisibilityChange()\n\t\t\t\t})\n\n\t\t\tupdateColorCreateButtonState()\n\n\t\t\tcontrols\n\t\t\t\t.append('button')\n\t\t\t\t.attr('type', 'button')\n\t\t\t\t.style('font-size', '12px')\n\t\t\t\t.style('padding', '2px 6px')\n\t\t\t\t.text('Cancel')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tcheckedItemsByMode[colorMode].clear()\n\t\t\t\t\tgroupingModeActive.delete(colorMode)\n\t\t\t\t\trenderColorLegend()\n\t\t\t\t})\n\t\t}\n\n\t\tif (colorMode === 'organism') {\n\t\t\tconst { items, colorMap } = buildModeLegendItems(organismNames, organismColors)\n\t\t\tmakeLegendItems(items, colorMap)\n\t\t\trenderCustomGroupControls()\n\t\t} else if (colorMode === 'assayType') {\n\t\t\tconst { items, colorMap } = buildModeLegendItems(assayNames, assayColors)\n\t\t\tmakeLegendItems(items, colorMap)\n\t\t\trenderCustomGroupControls()\n\t\t} else if (colorMode === 'cohort') {\n\t\t\tconst { items, colorMap } = buildModeLegendItems(cohortNames, cohortColors)\n\t\t\tmakeLegendItems(items, colorMap)\n\t\t\trenderCustomGroupControls()\n\t\t} else if (colorMode === 'proteinAccession') {\n\t\t\tconst { items, colorMap } = buildModeLegendItems(proteinAccessions, proteinColors)\n\t\t\tmakeLegendItems(items, colorMap)\n\t\t\trenderCustomGroupControls()\n\t\t}\n\n\t\tshapeLegendDiv.append('div').style('border-top', '1px solid #e5e7eb').style('margin', '8px 0 8px 0')\n\n\t\tconst shapeModeRow = shapeLegendDiv\n\t\t\t.append('div')\n\t\t\t.style('display', 'flex')\n\t\t\t.style('gap', '10px')\n\t\t\t.style('margin-bottom', '6px')\n\t\t\t.style('flex-wrap', 'wrap')\n\n\t\tshapeModeRow.append('span').text('Shape by')\n\n\t\tfor (const { key, label } of shapeGroupingModes) {\n\t\t\tshapeModeRow\n\t\t\t\t.append('span')\n\t\t\t\t.text(label)\n\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t.style('font-weight', key === shapeMode ? '600' : '400')\n\t\t\t\t.style('text-decoration', key === shapeMode ? 'underline' : 'none')\n\t\t\t\t.style('color', key === shapeMode ? '#111' : '#6b7280')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tshapeGroupingModeActive.delete(shapeMode)\n\t\t\t\t\tcheckedShapeItemsByMode[shapeMode].clear()\n\t\t\t\t\tshapeMode = key\n\t\t\t\t\trefreshAfterVisibilityChange()\n\t\t\t\t})\n\t\t}\n\n\t\tconst buildShapeLegendItems = (baseItems: string[]) => {\n\t\t\tconst visibleBaseItems = baseItems.filter(name => !getCustomShapeGroupOfValue(shapeMode, name))\n\t\t\treturn { items: [...visibleBaseItems, ...getCustomShapeGroupItems(shapeMode)] }\n\t\t}\n\n\t\tconst drawShapeLegend = (items: string[], shapeMap: Map<string, number>) => {\n\t\t\t// Filter dots to exclude those hidden by color filtering or by the brain\n\t\t\t// plot's region hide (externalHiddenCohorts), so legend n= reflects both.\n\t\t\tconst dotsVisibleByColor = dots.filter(\n\t\t\t\td => !hiddenColor[colorMode].has(getColorValueByMode(d, colorMode)) && !externalHiddenCohorts.has(d.cohortName)\n\t\t\t)\n\t\t\tconst openShapeMenu = (event: any, name: string) => {\n\t\t\t\tconst menu = new Menu({ padding: '0px' })\n\t\t\t\tconst activeShapeMap = isCustomShapeGroupKey(name) ? customShapeIndicesByMode[shapeMode] : getShapeMapInUse()\n\t\t\t\tconst div = menu.d.append('div')\n\t\t\t\tconst hidden = hiddenShape[shapeMode].has(name)\n\t\t\t\tconst hiddenCount = hiddenShape[shapeMode].size\n\n\t\t\t\tdiv\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t.text(hidden ? 'Show' : 'Hide')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tif (hidden) hiddenShape[shapeMode].delete(name)\n\t\t\t\t\t\telse hiddenShape[shapeMode].add(name)\n\t\t\t\t\t\trefreshAfterVisibilityChange()\n\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t})\n\n\t\t\t\tdiv\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t.text('Show only')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\thiddenShape[shapeMode].clear()\n\t\t\t\t\t\tfor (const item of items) {\n\t\t\t\t\t\t\tif (item != name) hiddenShape[shapeMode].add(item)\n\t\t\t\t\t\t}\n\t\t\t\t\t\trefreshAfterVisibilityChange()\n\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t})\n\n\t\t\t\tif (hiddenCount > 1)\n\t\t\t\t\tdiv\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t\t.text('Show all')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\thiddenShape[shapeMode].clear()\n\t\t\t\t\t\t\trefreshAfterVisibilityChange()\n\t\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t\t})\n\n\t\t\t\tdiv\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t.text('Change shape')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tdiv.selectAll('*').remove()\n\t\t\t\t\t\tshapeSelector(\n\t\t\t\t\t\t\tdiv,\n\t\t\t\t\t\t\t(index: number) => {\n\t\t\t\t\t\t\t\tconst shapeKey = isCustomShapeGroupKey(name) ? getCustomShapeGroupNameFromKey(name) : name\n\t\t\t\t\t\t\t\tactiveShapeMap.set(shapeKey, index)\n\t\t\t\t\t\t\t\tupdateDots()\n\t\t\t\t\t\t\t\trenderColorLegend()\n\t\t\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tprioritizedShapesArray\n\t\t\t\t\t\t)\n\t\t\t\t\t})\n\n\t\t\t\tif (isCustomShapeGroupKey(name))\n\t\t\t\t\tdiv\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t\t.text('Remove group')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\tremoveCustomShapeGroup(shapeMode, getCustomShapeGroupNameFromKey(name))\n\t\t\t\t\t\t\trefreshAfterVisibilityChange()\n\t\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t\t})\n\n\t\t\t\tmenu.showunder(event.target)\n\t\t\t}\n\n\t\t\tfor (const name of items) {\n\t\t\t\tconst hidden = hiddenShape[shapeMode].has(name)\n\t\t\t\tconst isGroup = isCustomShapeGroupKey(name)\n\t\t\t\tconst displayName = isGroup ? getCustomShapeGroupNameFromKey(name) : name\n\t\t\t\tconst inGroup = !isGroup ? getCustomShapeGroupOfValue(shapeMode, name) : null\n\t\t\t\tconst sampleCount = getLegendItemSampleCount(shapeMode, name, dotsVisibleByColor)\n\t\t\t\tif (sampleCount === 0) continue\n\t\t\t\tconst row = shapeLegendDiv\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('display', 'flex')\n\t\t\t\t\t.style('align-items', 'center')\n\t\t\t\t\t.style('gap', '6px')\n\t\t\t\t\t.style('margin-bottom', '3px')\n\t\t\t\tif (!isGroup && shapeGroupingModeActive.has(shapeMode)) {\n\t\t\t\t\tconst cb = row.append('input').attr('type', 'checkbox').style('cursor', 'pointer').style('flex-shrink', '0')\n\t\t\t\t\tconst cbNode = cb.node() as HTMLInputElement\n\t\t\t\t\tcbNode.checked = checkedShapeItemsByMode[shapeMode].has(name)\n\t\t\t\t\tcb.on('change', () => {\n\t\t\t\t\t\tif (cbNode.checked) checkedShapeItemsByMode[shapeMode].add(name)\n\t\t\t\t\t\telse checkedShapeItemsByMode[shapeMode].delete(name)\n\t\t\t\t\t\tupdateShapeCreateButtonState()\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tconst icon = row\n\t\t\t\t\t.append('svg')\n\t\t\t\t\t.attr('width', 16)\n\t\t\t\t\t.attr('height', 16)\n\t\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\ticon\n\t\t\t\t\t.append('path')\n\t\t\t\t\t.attr('transform', 'scale(0.8)')\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'd',\n\t\t\t\t\t\tprioritizedShapesArray[\n\t\t\t\t\t\t\t((isGroup\n\t\t\t\t\t\t\t\t? customShapeIndicesByMode[shapeMode].get(getCustomShapeGroupNameFromKey(name))\n\t\t\t\t\t\t\t\t: shapeMap.get(name)) || 0) % prioritizedShapesArray.length\n\t\t\t\t\t\t]\n\t\t\t\t\t)\n\t\t\t\t\t.attr('fill', '#4b5563')\n\t\t\t\t\t.attr('fill-opacity', hidden ? 0.35 : 0.9)\n\t\t\t\ticon.on('click', (event: any) => openShapeMenu(event, name))\n\t\t\t\trow\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.text(`${displayName}, n=${sampleCount}`)\n\t\t\t\t\t.style('text-decoration', hidden ? 'line-through' : 'none')\n\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t\t.on('click', (event: any) => openShapeMenu(event, name))\n\t\t\t\tif (isGroup) {\n\t\t\t\t\tconst count = customShapeGroupsByMode[shapeMode].get(getCustomShapeGroupNameFromKey(name))?.size || 0\n\t\t\t\t\tconst itemLabel =\n\t\t\t\t\t\tshapeMode === 'organism'\n\t\t\t\t\t\t\t? 'organisms'\n\t\t\t\t\t\t\t: shapeMode === 'assayType'\n\t\t\t\t\t\t\t? 'assays'\n\t\t\t\t\t\t\t: shapeMode === 'cohort'\n\t\t\t\t\t\t\t? 'sample sets'\n\t\t\t\t\t\t\t: shapeMode === 'proteinAccession'\n\t\t\t\t\t\t\t? 'isoforms'\n\t\t\t\t\t\t\t: 'items'\n\t\t\t\t\trow.append('span').style('color', '#6b7280').text(`(${count} ${itemLabel})`)\n\t\t\t\t} else if (inGroup) {\n\t\t\t\t\trow.append('span').style('color', '#6b7280').style('font-style', 'italic').text(`\u2192 ${inGroup}`)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst renderShapeCustomGroupControls = () => {\n\t\t\tif (!shapeModesWithGroups.includes(shapeMode)) return\n\n\t\t\tif (!shapeGroupingModeActive.has(shapeMode)) {\n\t\t\t\tconst createBtn = shapeLegendDiv\n\t\t\t\t\t.append('button')\n\t\t\t\t\t.attr('type', 'button')\n\t\t\t\t\t.style('font-size', '1em')\n\t\t\t\t\t.style('font-weight', '400')\n\t\t\t\t\t.style('margin-top', '6px')\n\t\t\t\t\t.style('padding', '0')\n\t\t\t\t\t.style('border', 'none')\n\t\t\t\t\t.style('border-radius', '0')\n\t\t\t\t\t.style('background', 'transparent')\n\t\t\t\t\t.style('color', '#6b7280')\n\t\t\t\t\t.style('box-shadow', 'none')\n\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t\t.style('transition', 'color 120ms ease')\n\t\t\t\t\t.text('+ Create custom group')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tshapeGroupingModeActive.add(shapeMode)\n\t\t\t\t\t\trenderColorLegend()\n\t\t\t\t\t})\n\t\t\t\tcreateBtn\n\t\t\t\t\t.on('mouseover', function (this: any) {\n\t\t\t\t\t\tselect(this).style('color', '#111827')\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseout', function (this: any) {\n\t\t\t\t\t\tselect(this).style('color', '#6b7280')\n\t\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tshapeLegendDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('font-size', '11px')\n\t\t\t\t.style('color', '#6b7280')\n\t\t\t\t.style('margin-bottom', '4px')\n\t\t\t\t.text('Check items to include in the new group:')\n\n\t\t\tconst controls = shapeLegendDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'flex')\n\t\t\t\t.style('gap', '6px')\n\t\t\t\t.style('align-items', 'center')\n\t\t\t\t.style('flex-wrap', 'wrap')\n\t\t\t\t.style('margin-top', '4px')\n\n\t\t\tconst nameInput = controls\n\t\t\t\t.append('input')\n\t\t\t\t.attr('data-role', 'custom-shape-group-name')\n\t\t\t\t.attr('type', 'text')\n\t\t\t\t.attr('placeholder', 'Group name')\n\t\t\t\t.style('font-size', '12px')\n\t\t\t\t.style('padding', '2px 4px')\n\t\t\t\t.style('min-width', '100px')\n\t\t\t\t.on('input', () => updateShapeCreateButtonState())\n\n\t\t\tcontrols\n\t\t\t\t.append('button')\n\t\t\t\t.attr('data-role', 'create-custom-shape-group-submit')\n\t\t\t\t.attr('type', 'button')\n\t\t\t\t.style('font-size', '12px')\n\t\t\t\t.style('padding', '2px 6px')\n\t\t\t\t.text('Create')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tconst groupName = ((nameInput.node() as HTMLInputElement)?.value || '').trim()\n\t\t\t\t\tif (!groupName || checkedShapeItemsByMode[shapeMode].size < 1) return\n\t\t\t\t\taddOrUpdateCustomShapeGroup(shapeMode, groupName, [...checkedShapeItemsByMode[shapeMode]])\n\t\t\t\t\tcheckedShapeItemsByMode[shapeMode].clear()\n\t\t\t\t\tshapeGroupingModeActive.delete(shapeMode)\n\t\t\t\t\trefreshAfterVisibilityChange()\n\t\t\t\t})\n\n\t\t\tupdateShapeCreateButtonState()\n\n\t\t\tcontrols\n\t\t\t\t.append('button')\n\t\t\t\t.attr('type', 'button')\n\t\t\t\t.style('font-size', '12px')\n\t\t\t\t.style('padding', '2px 6px')\n\t\t\t\t.text('Cancel')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tcheckedShapeItemsByMode[shapeMode].clear()\n\t\t\t\t\tshapeGroupingModeActive.delete(shapeMode)\n\t\t\t\t\trenderColorLegend()\n\t\t\t\t})\n\t\t}\n\n\t\tif (shapeMode === 'organism') {\n\t\t\tconst { items } = buildShapeLegendItems(organismNames)\n\t\t\tdrawShapeLegend(items, organismShapes)\n\t\t\trenderShapeCustomGroupControls()\n\t\t} else if (shapeMode === 'assayType') {\n\t\t\tconst { items } = buildShapeLegendItems(assayNames)\n\t\t\tdrawShapeLegend(items, assayShapes)\n\t\t\trenderShapeCustomGroupControls()\n\t\t} else if (shapeMode === 'cohort') {\n\t\t\tconst { items } = buildShapeLegendItems(cohortNames)\n\t\t\tdrawShapeLegend(items, cohortShapes)\n\t\t\trenderShapeCustomGroupControls()\n\t\t} else if (shapeMode === 'proteinAccession') {\n\t\t\tconst { items } = buildShapeLegendItems(proteinAccessions)\n\t\t\tdrawShapeLegend(items, proteinShapes)\n\t\t\trenderShapeCustomGroupControls()\n\t\t}\n\t}\n\n\tupdateRadiusScaleForVisibleDots()\n\trenderColorLegend()\n\trenderSizeLegend()\n\n\tconst api: VolcanoApi = {\n\t\tsetExternallyHiddenCohorts(cohorts: Set<string>) {\n\t\t\texternalHiddenCohorts = cohorts\n\t\t\trefreshAfterVisibilityChange()\n\t\t},\n\t\tonVisibilityChange(cb) {\n\t\t\tvisibilityChangeListeners.push(cb)\n\t\t\t// Fire once immediately so the subscriber gets the initial state.\n\t\t\tcb({ dots: getVisibleDots() })\n\t\t}\n\t}\n\treturn api\n}\n\nexport type VolcanoApi = {\n\t// Set the list of cohort names to hide externally (e.g. driven by the brain\n\t// plot). Replaces any previously-set external hides.\n\tsetExternallyHiddenCohorts(cohorts: Set<string>): void\n\t// Subscribe to visibility changes. Called once on subscribe with the current\n\t// state, then on every subsequent change. `dots` is the currently-visible dot\n\t// list (each carrying sampleIds) so subscribers can count the exact samples the\n\t// volcano represents (region per sample comes from the response sampleRegions map).\n\tonVisibilityChange(cb: (v: { dots: any[] }) => void): void\n}\n\nfunction launchViolinPlot(\n\tself: ProteinView,\n\torganismName: string,\n\tassayName: string,\n\tcohortName: string,\n\tisoform: string\n) {\n\tconst selectedProtein = self.state.config?.tw?.term\n\tif (!selectedProtein) throw new Error('proteinView: selected protein term is missing')\n\n\tconst action: any = {\n\t\ttype: 'plot_create',\n\t\tconfig: {\n\t\t\tchartType: 'summary'\n\t\t}\n\t}\n\taction.config.assayCohortTitle = `${organismName} ${assayName}: ${cohortName}`\n\taction.config.proteomeDetails = { organism: organismName, assay: assayName, cohort: cohortName }\n\n\tconst termdbConfig = self.app.vocabApi.termdbConfig\n\tconst proteomeOverlayTerm = termdbConfig?.queries?.proteome?.organisms?.[organismName]?.overlayTerm\n\tconst t = structuredClone(selectedProtein)\n\tt.name = `${t.name}: ${isoform}`\n\tt.dataTypeDetails = { organism: organismName, assay: assayName, cohort: cohortName }\n\taction.config.term = { term: t, q: { mode: NumericModes.continuous } }\n\n\tif (proteomeOverlayTerm) {\n\t\taction.config.term2 = { term: structuredClone(proteomeOverlayTerm), q: {} }\n\t}\n\n\tself.app.dispatch(action)\n}\n\nasync function renderPTMLollipop(holder: any, ptmCohorts: any, self: ProteinView, isoform: string, genome: any) {\n\tif (!ptmCohorts?.length) return\n\n\tconst custom_variants: any[] = []\n\tconst mergedMclassOverride: any = {}\n\tconst gm = await getGmForPTM(ptmCohorts[0].geneName, genome.name, isoform)\n\tfor (const ptm of ptmCohorts) {\n\t\t//use default gene model to get coordinates for all PTM sites, which is sufficient for most cases\n\t\t//and avoids the complexity of mapping between different isoforms. TODO:support isoform-specific mapping.\n\t\tif (!gm) continue\n\t\tconst logValue = getLog2Ratio(ptm.foldChange)\n\t\tconst pValue = Number(ptm.pValue)\n\t\tconst testedN = Number(ptm.testedN)\n\t\tconst controlN = Number(ptm.controlN)\n\n\t\tif (ptm.mclassOverride && typeof ptm.mclassOverride == 'object') {\n\t\t\tObject.assign(mergedMclassOverride, ptm.mclassOverride)\n\t\t}\n\n\t\tconst site = parsePTMModSites(ptm.modSites)\n\t\tif (!site) continue\n\t\tconst pos = aa2gmcoord(site, gm)\n\t\tif (!Number.isInteger(pos)) continue\n\t\tconst ptmClass = Object.keys(ptm.mclassOverride || {})[0]\n\t\tcustom_variants.push({\n\t\t\tchr: gm.chr,\n\t\t\tpos,\n\t\t\tmname: ptm.modSites,\n\t\t\tclass: ptmClass,\n\t\t\tdt: 1,\n\t\t\tlogValue,\n\t\t\tpValue,\n\t\t\ttestedN: Number.isFinite(testedN) ? testedN : null,\n\t\t\tcontrolN: Number.isFinite(controlN) ? controlN : null,\n\t\t\torganism: ptm.organism || null,\n\t\t\tassayName: ptm.assayName || null,\n\t\t\tcohortName: ptm.cohortName || null,\n\t\t\tproteinAccession: ptm.proteinAccession || null,\n\t\t\tPTMStr: ptm.uniqueIdentifier || null,\n\t\t\thtmlSections: [\n\t\t\t\t{\n\t\t\t\t\tkey: 'Action',\n\t\t\t\t\tlabel: 'Launch Violin Plot',\n\t\t\t\t\tcallback: () => launchViolinPlot(self, ptm.organism, ptm.assayName, ptm.cohortName, ptm.uniqueIdentifier)\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t}\n\tif (!custom_variants.length) return\n\n\tconst mclassOverride = {\n\t\tclassName: 'PTM',\n\t\tclasses: mergedMclassOverride\n\t}\n\n\t// apply mclass override to global mclass, which will be used by the mds3 track to display the PTM sites.\n\t// this is necessary because the lollipop plot relies on mclass for variant\n\t// TODO: find a better way (such as defining PTM-specific class keys) to pass mclass override to the track\n\t// without modifying global mclass, which can have unintended side effects on other plots.\n\tfor (const key in mclassOverride.classes) {\n\t\tif (mclass[key]) Object.assign(mclass[key], mclassOverride.classes[key])\n\t}\n\n\t// create mds3 custom track using numeric mode with logValue on y-axis\n\tconst tk = {\n\t\ttype: 'mds3',\n\t\tname: 'PTMs',\n\t\tcustom_variants: custom_variants,\n\t\tskewerModes: [\n\t\t\t{\n\t\t\t\ttype: 'numeric',\n\t\t\t\tbyAttribute: 'logValue',\n\t\t\t\tlabel: 'Log2FC',\n\t\t\t\ttooltipPrintValue: m => {\n\t\t\t\t\tconst p = Number(m.pValue)\n\t\t\t\t\treturn [\n\t\t\t\t\t\t{ k: 'Organism', v: m.organism ?? 'NA' },\n\t\t\t\t\t\t{ k: 'Assay', v: m.assayName ?? 'NA' },\n\t\t\t\t\t\t{ k: 'Sample set', v: m.cohortName ?? 'NA' },\n\t\t\t\t\t\t{ k: 'PTM', v: m.PTMStr ?? 'NA' },\n\t\t\t\t\t\t{ k: 'Log2 fold change', v: Number.isFinite(m.logValue) ? roundValue(m.logValue, 3) : 'NA' },\n\t\t\t\t\t\t{ k: 'P value', v: Number.isFinite(p) && p > 0 ? p.toExponential(2) : 'NA' },\n\t\t\t\t\t\t{ k: 'Case samples', v: Number.isFinite(m.testedN) ? m.testedN : 'NA' },\n\t\t\t\t\t\t{ k: 'Control samples', v: Number.isFinite(m.controlN) ? m.controlN : 'NA' },\n\t\t\t\t\t\t{ k: 'Protein accession', v: m.proteinAccession ?? 'NA' }\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tinuse: true,\n\t\t\t\taxisheight: 100\n\t\t\t}\n\t\t],\n\t\tmclassOverride\n\t}\n\n\t// launch block in protein mode with custom track\n\tconst arg = {\n\t\tholder: holder.append('div'),\n\t\tgenome,\n\t\tnobox: true,\n\t\ttklst: [tk],\n\t\tmclassOverride,\n\t\tdebugmode: self.app.opts.debug,\n\t\tquery: gm.isoform,\n\t\thide_dsHandles: true\n\t}\n\n\tconst _ = await import('#src/block.init')\n\tawait _.default(arg)\n}\n\n// return the first valid modification site parsed from the modSites string, which is expected to be in the format like \"S10\", or \"S10,T11\"\n// for now return the first valid site for simplicity. TODO: parse and display multiple sites if available.\nfunction parsePTMModSites(modSites: string) {\n\tif (!modSites) return null\n\tconst regex = /([A-Za-z])(\\d+)/g\n\tlet m\n\twhile ((m = regex.exec(modSites)) !== null) {\n\t\tconst position = Number(m[2])\n\t\tif (!Number.isInteger(position) || position < 1) continue\n\t\treturn position\n\t}\n\treturn null\n}\n\nasync function getGmForPTM(geneName: string, genomeName: string, isoform: string) {\n\tif (!geneName) return null\n\tconst d = await dofetch3('genelookup', {\n\t\tbody: {\n\t\t\tdeep: 1,\n\t\t\tgenome: genomeName,\n\t\t\tinput: geneName\n\t\t}\n\t})\n\n\tif (d.error || !Array.isArray(d.gmlst) || !d.gmlst.length) return null\n\n\tconst normalizedIsoform = isoform?.trim().toUpperCase()\n\tconst gm =\n\t\td.gmlst.find((i: any) => i.isoform && normalizedIsoform && i.isoform.toUpperCase() == normalizedIsoform) ||\n\t\td.gmlst.find((i: any) => i.isdefault) ||\n\t\td.gmlst[0]\n\treturn gm\n}\n\nfunction getLog2Ratio(foldChange: number) {\n\tif (!Number.isFinite(foldChange) || foldChange <= 0) return null\n\treturn Math.log2(foldChange)\n}\n\nexport async function getPlotConfig(opts: any) {\n\tconst config = structuredClone(defaultConfig)\n\tif (!opts.tw) throw new Error('proteinView requires opts.tw')\n\treturn copyMerge(config, opts)\n}\n\nexport function makeChartBtnMenu(holder: any, chartsInstance: any) {\n\tconst row = holder.append('div').style('padding', '5px')\n\trow.append('span').style('font-weight', 'bold').text('Enter a gene name:')\n\n\tconst geneSearch = addGeneSearchbox({\n\t\trow,\n\t\tgenome: chartsInstance.app.opts.genome,\n\t\ttip: new Menu({ padding: '0px' }),\n\t\tsearchOnly: 'gene',\n\t\tcallback: async () => {\n\t\t\tif (!geneSearch.geneSymbol) throw new Error('A valid gene selection is required')\n\t\t\tchartsInstance.dom.tip.hide()\n\t\t\tchartsInstance.app.dispatch({\n\t\t\t\ttype: 'plot_create',\n\t\t\t\tconfig: {\n\t\t\t\t\tchartType: 'proteinView',\n\t\t\t\t\ttw: {\n\t\t\t\t\t\tterm: {\n\t\t\t\t\t\t\tgene: geneSearch.geneSymbol,\n\t\t\t\t\t\t\tname: geneSearch.geneSymbol,\n\t\t\t\t\t\t\ttype: TermTypes.PROTEOME_ABUNDANCE\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t})\n}\n\nexport const proteinViewInit = getCompInit(ProteinView)\nexport const componentInit = proteinViewInit\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["g"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
import {
|
|
2
|
+
QualCustomGS,
|
|
3
|
+
QualPredefinedGS,
|
|
4
|
+
QualValues,
|
|
5
|
+
QualitativeBase
|
|
6
|
+
} from "./chunk-KUZPTJJO.js";
|
|
7
|
+
import "./chunk-HJ6L54YS.js";
|
|
8
|
+
import "./chunk-LSEFWW72.js";
|
|
9
|
+
import "./chunk-C4BCMAIK.js";
|
|
10
|
+
import "./chunk-HYOEWQ5P.js";
|
|
11
|
+
import "./chunk-HBW42TDT.js";
|
|
12
|
+
import "./chunk-LQJMCE7G.js";
|
|
13
|
+
import "./chunk-FN5XPUPH.js";
|
|
14
|
+
import "./chunk-IIT367QZ.js";
|
|
15
|
+
import "./chunk-RZGEKL77.js";
|
|
16
|
+
import "./chunk-Z457XQSX.js";
|
|
17
|
+
import "./chunk-AI2LUQS6.js";
|
|
18
|
+
import "./chunk-2JR7RPB6.js";
|
|
19
|
+
import "./chunk-7IYJZZQI.js";
|
|
20
|
+
import "./chunk-M3J4MINX.js";
|
|
21
|
+
import "./chunk-PF4DSFDR.js";
|
|
22
|
+
import "./chunk-TLTS33EY.js";
|
|
23
|
+
import "./chunk-2U2CP2Y2.js";
|
|
24
|
+
import "./chunk-ZF6HNVYD.js";
|
|
25
|
+
import "./chunk-BKPDYW5T.js";
|
|
26
|
+
import "./chunk-JNITUVXP.js";
|
|
27
|
+
import "./chunk-TJYRBEBK.js";
|
|
28
|
+
import "./chunk-LOZEKOES.js";
|
|
29
|
+
import "./chunk-VQZ2Z5YU.js";
|
|
30
|
+
import "./chunk-SOTB4FRE.js";
|
|
31
|
+
import "./chunk-TLT4YIG3.js";
|
|
32
|
+
import "./chunk-KYBIQBXE.js";
|
|
33
|
+
import "./chunk-I6Y4O3RR.js";
|
|
34
|
+
import "./chunk-OMR2DT66.js";
|
|
35
|
+
import "./chunk-DQC5FFGV.js";
|
|
36
|
+
import "./chunk-HFNDKYVF.js";
|
|
37
|
+
export {
|
|
38
|
+
QualCustomGS,
|
|
39
|
+
QualPredefinedGS,
|
|
40
|
+
QualValues,
|
|
41
|
+
QualitativeBase
|
|
42
|
+
};
|
|
43
|
+
//# sourceMappingURL=qualitative-AQFKAZID.js.map
|