@sjcrh/proteinpaint-client 2.193.0 → 2.195.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-GTD3AXGT.js +1373 -0
- package/dist/AIProjectAdmin-ALMSVHFX.js +958 -0
- package/dist/AppHeader-RK2YRITI.js +835 -0
- package/dist/BoxPlot-6ZXLPA5Q.js +1217 -0
- package/dist/CorrelationVolcano-PJB3QCXB.js +619 -0
- package/dist/DE-MEWV5RTV.js +95 -0
- package/dist/DEinput-I62VHD2U.js +301 -0
- package/dist/DEinput-I62VHD2U.js.map +7 -0
- package/dist/DifferentialAnalysis-7L3CDPVB.js +245 -0
- package/dist/Disco-FCS7B5DO.js +3297 -0
- package/dist/Disco.UI-BFJ5XFAT.js +249 -0
- package/dist/DmrPlot-362PCE7L.js +642 -0
- package/dist/GB-SX4JENAW.js +1353 -0
- package/dist/GB-SX4JENAW.js.map +7 -0
- package/dist/GeneExpInput-EHWHQTRV.js +367 -0
- package/dist/HicApp-UE4DCUKX.js +2250 -0
- package/dist/IDCViewer-EDF5XJ63.js +10455 -0
- package/dist/IDCViewer-EDF5XJ63.js.map +7 -0
- package/dist/NumBinaryEditor-3TAAJNYY.js +271 -0
- package/dist/NumBinaryEditor.unit.spec-6776472M.js +286 -0
- package/dist/NumContEditor-WLFXTY4M.js +109 -0
- package/dist/NumContEditor.unit.spec-KG5SCOIQ.js +169 -0
- package/dist/NumCustomBinEditor-EKKNCLKI.js +38 -0
- package/dist/NumCustomBinEditor.unit.spec-LSLSKQDW.js +284 -0
- package/dist/NumDiscreteEditor-X2MLECNT.js +179 -0
- package/dist/NumDiscreteEditor.unit.spec-BZG7P4C7.js +202 -0
- package/dist/NumRegularBinEditor-CAGJ4ZWD.js +38 -0
- package/dist/NumRegularBinEditor.unit.spec-GJSJC4DK.js +227 -0
- package/dist/NumSplineEditor-ND3RC7R6.js +198 -0
- package/dist/NumSplineEditor.unit.spec-F67JQKPY.js +199 -0
- package/dist/NumericDensity-VW7NIZU7.js +38 -0
- package/dist/NumericDensity.unit.spec-YHIMU23C.js +221 -0
- package/dist/NumericHandler-HCU6B2XV.js +39 -0
- package/dist/NumericHandler.unit.spec-6GVWAUED.js +219 -0
- package/dist/ProteomeInput-SONQSTVD.js +396 -0
- package/dist/RunChart2-ZLBNG4JF.js +758 -0
- package/dist/SC-YDRE37LP.js +1127 -0
- package/dist/Volcano-27ZERHXI.js +1379 -0
- package/dist/WSIViewer-2P7ANPBV.js +48562 -0
- package/dist/WsiSamplesPlot-FM4B657P.js +165 -0
- package/dist/adSandbox-M6TBRE5W.js +38 -0
- package/dist/animatedBubbleChart-VYSSX52K.js +555 -0
- package/dist/app-BLJT7ZDG.js +49 -0
- package/dist/app-LSFSUJHF.js +37 -0
- package/dist/app.js +13 -13
- package/dist/bam-ZMHBTBB4.js +860 -0
- package/dist/barchart-EF75MNTN.js +47 -0
- package/dist/barchart.data-VWZB3R2Z.js +22 -0
- package/dist/barchart.events-AMYQOMBQ.js +47 -0
- package/dist/barchart.integration.spec-TCTQ5PKN.js +2196 -0
- package/dist/barchart.integration.spec-TCTQ5PKN.js.map +7 -0
- package/dist/barchart2-LOHN6NSE.js +314 -0
- package/dist/block-23BH5TZ3.js +6226 -0
- package/dist/block.init-3BF6L23D.js +38 -0
- package/dist/block.mds.expressionrank-DSHATA2M.js +359 -0
- package/dist/block.mds.geneboxplot-RXQUOE3Y.js +828 -0
- package/dist/block.mds.junction-PN776TCD.js +1545 -0
- package/dist/block.mds.svcnv-SOWUBH4K.js +6801 -0
- package/dist/block.svg-ZPYMFAGC.js +164 -0
- package/dist/block.tk.aicheck-E22ZJJFP.js +283 -0
- package/dist/block.tk.ase-S54Z5A4G.js +365 -0
- package/dist/block.tk.bam-YOELFYXU.js +1906 -0
- package/dist/block.tk.bedgraphdot-VFUWXPSL.js +384 -0
- package/dist/block.tk.bigwig.ui-2SJYUPR3.js +212 -0
- package/dist/block.tk.hicstraw-GZVE4HQG.js +823 -0
- package/dist/block.tk.junction-RRFX4CAT.js +2364 -0
- package/dist/block.tk.junction-RRFX4CAT.js.map +7 -0
- package/dist/block.tk.junction.textmatrixui-A726SAAL.js +199 -0
- package/dist/block.tk.ld-THUOBW72.js +99 -0
- package/dist/block.tk.menu-V3VGODVI.js +1029 -0
- package/dist/block.tk.pgv-CNUGIK5J.js +944 -0
- package/dist/brainImaging-4PF74IEK.js +423 -0
- package/dist/brainRegions-U5K3KEQF.js +221 -0
- package/dist/bubbleHeatmap-6NL4PUFY.js +383 -0
- package/dist/bubbleHeatmap-6NL4PUFY.js.map +7 -0
- package/dist/chunk-2FTXOPE2.js +368 -0
- package/dist/chunk-2MCUT32T.js +254 -0
- package/dist/chunk-2SZ2VLOG.js +1102 -0
- package/dist/chunk-2XBWB6P2.js +37 -0
- package/dist/chunk-34VSTY2U.js +234 -0
- package/dist/chunk-3DS4HIEH.js +1230 -0
- package/dist/chunk-3DS4HIEH.js.map +7 -0
- package/dist/chunk-42FSM477.js +272 -0
- package/dist/chunk-42FSM477.js.map +7 -0
- package/dist/chunk-44VQIATQ.js +6364 -0
- package/dist/chunk-5B5FZPZI.js +148 -0
- package/dist/chunk-5DSLFEAN.js +276 -0
- package/dist/chunk-5DSQOV7M.js +50 -0
- package/dist/chunk-7CZI6SE7.js +222 -0
- package/dist/chunk-7NABQ2JU.js +54 -0
- package/dist/chunk-7VMFUE64.js +117 -0
- package/dist/chunk-7WBS7ZUI.js +54 -0
- package/dist/chunk-7XSDY2FN.js +1220 -0
- package/dist/chunk-7XSDY2FN.js.map +7 -0
- package/dist/chunk-AK5Z4PLV.js +230 -0
- package/dist/chunk-B3XMNPZY.js +448 -0
- package/dist/chunk-B4VBTVVQ.js +815 -0
- package/dist/chunk-CHUE5Y7Y.js +194 -0
- package/dist/chunk-CNBLRB4P.js +170 -0
- package/dist/chunk-CPMOBFFR.js +190 -0
- package/dist/chunk-D3TU3RDU.js +299 -0
- package/dist/chunk-E2KY2IZS.js +446 -0
- package/dist/chunk-FBMDK2UA.js +514 -0
- package/dist/chunk-FSWSZZTG.js +102 -0
- package/dist/chunk-GPGCGFFS.js +399 -0
- package/dist/chunk-H5DR6OYM.js +217 -0
- package/dist/chunk-HVZQYGQN.js +98 -0
- package/dist/chunk-HYIDLSEL.js +833 -0
- package/dist/chunk-IDX6WU4U.js +14 -0
- package/dist/chunk-IPGYIEPM.js +263 -0
- package/dist/chunk-IPGYIEPM.js.map +7 -0
- package/dist/chunk-IQTEW3SK.js +119 -0
- package/dist/chunk-J7W2DGAL.js +226 -0
- package/dist/chunk-J7W2DGAL.js.map +7 -0
- package/dist/chunk-JVVOJREJ.js +55 -0
- package/dist/chunk-KIGAMN3Z.js +216 -0
- package/dist/chunk-LAQZX5PA.js +13624 -0
- package/dist/chunk-LRPQBMQE.js +2786 -0
- package/dist/chunk-LYULXXGR.js +20896 -0
- package/dist/chunk-LYULXXGR.js.map +7 -0
- package/dist/chunk-M7JGRSFA.js +5067 -0
- package/dist/chunk-MAACMLMN.js +142 -0
- package/dist/chunk-MNPTPENH.js +1825 -0
- package/dist/chunk-MU3ZC4RW.js +102 -0
- package/dist/chunk-N6ALTSJ2.js +176 -0
- package/dist/chunk-N7326KA3.js +1943 -0
- package/dist/chunk-O64WQLAV.js +2327 -0
- package/dist/chunk-OEOYTMMY.js +203 -0
- package/dist/chunk-P3QPMVML.js +736 -0
- package/dist/chunk-PJM6MUTT.js +1289 -0
- package/dist/chunk-QPAZPA3N.js +4269 -0
- package/dist/chunk-RG222M4S.js +272 -0
- package/dist/chunk-S46UPZFM.js +158 -0
- package/dist/chunk-S4L4JCMA.js +102 -0
- package/dist/chunk-S4L4JCMA.js.map +7 -0
- package/dist/chunk-TUMA63WX.js +11194 -0
- package/dist/chunk-TUMA63WX.js.map +7 -0
- package/dist/chunk-UAALI7MC.js +315 -0
- package/dist/chunk-UAALI7MC.js.map +7 -0
- package/dist/chunk-UDTNSJY2.js +34 -0
- package/dist/chunk-UFLSI6EW.js +2681 -0
- package/dist/chunk-UFLSI6EW.js.map +7 -0
- package/dist/chunk-UKABZJQ7.js +480 -0
- package/dist/chunk-UKABZJQ7.js.map +7 -0
- package/dist/chunk-UPNKFGTN.js +100 -0
- package/dist/chunk-UZKHBBWY.js +617 -0
- package/dist/chunk-VG6GVF6D.js +302 -0
- package/dist/chunk-VO4FCZOR.js +448 -0
- package/dist/chunk-VVDFRJVN.js +306 -0
- package/dist/chunk-VVDFRJVN.js.map +7 -0
- package/dist/chunk-VZBMCJBR.js +534 -0
- package/dist/chunk-WR4UATTO.js +182 -0
- package/dist/chunk-XNYATA6C.js +2833 -0
- package/dist/chunk-Y5FH3TEH.js +129 -0
- package/dist/chunk-YIFCXFWE.js +343 -0
- package/dist/chunk-YRXB3MKU.js +477 -0
- package/dist/chunk-Z7UVDJKK.js +1275 -0
- package/dist/chunk-ZDEMAKRA.js +386 -0
- package/dist/chunk-ZTJLENGZ.js +292 -0
- package/dist/chunk-ZTJLENGZ.js.map +7 -0
- package/dist/condition-6UUQ3AAI.js +332 -0
- package/dist/controls-N2NIGPHY.js +41 -0
- package/dist/controls.config-YYIMJHWN.js +39 -0
- package/dist/correlation-DYUMFMTU.js +102 -0
- package/dist/cuminc-EUXCL53V.js +1149 -0
- package/dist/cuminc.integration.spec-ZQFMIBF6.js +678 -0
- package/dist/customdata.inputui-U2VXVWJ3.js +289 -0
- package/dist/dataDownload-QK2VYWYW.js +330 -0
- package/dist/dataDownload.integration.spec-NG4ZASWC.js +193 -0
- package/dist/databrowser.ui-ALW4LSLA.js +433 -0
- package/dist/dictionary-F7BPXOBO.js +118 -0
- package/dist/dnaMethylation-XNRJIBAH.js +38 -0
- package/dist/dnaMethylation.integration.spec-F5ODQTVL.js +203 -0
- package/dist/dofetch-IYEI7WSH.js +51 -0
- package/dist/e2pca-BHB7UMS5.js +350 -0
- package/dist/ep-QRFUVFSK.js +1256 -0
- package/dist/expclust.gdc.spec-LMH7QAU4.js +307 -0
- package/dist/facet-34HXG7MO.js +521 -0
- package/dist/forms2-ZQUPKXE5.js +539 -0
- package/dist/gb-HWZ5KZXX.js +88 -0
- package/dist/geneExpClustering-KFMP553E.js +249 -0
- package/dist/geneExpression-E2GIRM6Z.js +313 -0
- package/dist/geneExpression-QODFRNS4.js +38 -0
- package/dist/geneExpression.unit.spec-HV44ABGV.js +102 -0
- package/dist/geneORA-MJ6MFW2K.js +278 -0
- package/dist/geneRanking-ODKGLJX2.js +553 -0
- package/dist/geneRanking-ODKGLJX2.js.map +7 -0
- package/dist/geneVariant-QT6E7YZN.js +39 -0
- package/dist/geneVariant-UYQ4XIOQ.js +41 -0
- package/dist/geneVariant.integration.spec-HQ5GJ7UM.js +198 -0
- package/dist/genefusion.ui-5KYGD7JL.js +309 -0
- package/dist/geneset-M6T24ZYZ.js +208 -0
- package/dist/genomeBrowser.spec-CVH4S5KZ.js +281 -0
- package/dist/grin2-GI2WNWJO.js +968 -0
- package/dist/grin2-GI2WNWJO.js.map +7 -0
- package/dist/grin2-QU2UCKKE.js +75 -0
- package/dist/gsea-EGWJAATJ.js +47 -0
- package/dist/hierCluster-4OJ7BHAB.js +59 -0
- package/dist/hierCluster-P4HGGVK7.js +63 -0
- package/dist/hierCluster.config-5DGS5EH4.js +40 -0
- package/dist/hierCluster.integration.spec-OL4FLSBS.js +488 -0
- package/dist/hierCluster.integration.spec-OL4FLSBS.js.map +7 -0
- package/dist/hierCluster.interactivity-VEHJHBKY.js +54 -0
- package/dist/hierCluster.renderers-OEVSBUBK.js +21 -0
- package/dist/imagePlot-MMJYC4DX.js +163 -0
- package/dist/importPlot-4HJ6VR4P.js +8 -0
- package/dist/isoformExpression-EISYQF2S.js +40 -0
- package/dist/isoformExpression.unit.spec-YKBWVL7C.js +208 -0
- package/dist/jspdf.es.min-NXISJ3W7.js +40 -0
- package/dist/launch.adhoc-U3KOGDIC.js +42 -0
- package/dist/leftlabel.sample-LVF5WLMZ.js +264 -0
- package/dist/lollipop-HX2WLD5J.js +171 -0
- package/dist/maf-MBX3S3LS.js +459 -0
- package/dist/maf-MBX3S3LS.js.map +7 -0
- package/dist/maftimeline-VN6SYUPQ.js +593 -0
- package/dist/matrix-6UASVMIW.js +58 -0
- package/dist/matrix-FYYLVW7O.js +63 -0
- package/dist/matrix.cells-3RUGV7XG.js +28 -0
- package/dist/matrix.config-ELBFN3JN.js +41 -0
- package/dist/matrix.data-MHFF47ZY.js +25 -0
- package/dist/matrix.groups-UJRFFG5J.js +27 -0
- package/dist/matrix.integration.spec-5DUNUOQ3.js +3072 -0
- package/dist/matrix.interactivity-2TZ3ON4H.js +42 -0
- package/dist/matrix.layout-IGUBUCB2.js +44 -0
- package/dist/matrix.legend-UBQF6LMD.js +22 -0
- package/dist/matrix.renderers-ON2EXXIS.js +38 -0
- package/dist/matrix.serieses-5XH7NO23.js +21 -0
- package/dist/matrix.sort-QSWTVRJT.js +27 -0
- package/dist/matrix.sort.unit.spec-7Y6D456I.js +472 -0
- package/dist/matrix.sorterUi.unit.spec-3XNGEZZ2.js +342 -0
- package/dist/mavb-J4AUXBHZ.js +732 -0
- package/dist/mds.fimo-I6OALZRX.js +518 -0
- package/dist/mds.samplescatterplot-XSWR37S5.js +1550 -0
- package/dist/mds.survivalplot-Q3TE4A5P.js +483 -0
- package/dist/numericDictTermCluster-N3GM6YVP.js +65 -0
- package/dist/numericDictTermCluster-N3GM6YVP.js.map +7 -0
- package/dist/oncomatrix-C4RDUA2C.js +295 -0
- package/dist/oncomatrix.spec-QVD3XUTH.js +448 -0
- package/dist/plot.2dvaf-MNONDWFA.js +377 -0
- package/dist/plot.app-3T275PW5.js +41 -0
- package/dist/plot.barplot-LOLIPHXG.js +102 -0
- package/dist/plot.boxplot-I6CAYXPV.js +152 -0
- package/dist/plot.brainImaging-Y76KB6IC.js +51 -0
- package/dist/plot.disco-N5ISUUNQ.js +102 -0
- package/dist/plot.dzi-Q6K542P6.js +33 -0
- package/dist/plot.ssgq-OGLNOY4Q.js +139 -0
- package/dist/plot.vaf2cov-NXQ5D3KA.js +259 -0
- package/dist/plot.wsi-YMDUOZ57.js +36 -0
- package/dist/polar2-AQ2W3SNH.js +231 -0
- package/dist/profileForms-TCPZPI22.js +446 -0
- package/dist/profilePlot-4RKKICKC.js +54 -0
- package/dist/proteinView-5VJ6E2XT.js +1568 -0
- package/dist/proteinView-5VJ6E2XT.js.map +7 -0
- package/dist/purify.es-PPNYMKMJ.js +1457 -0
- package/dist/purify.es-PPNYMKMJ.js.map +7 -0
- package/dist/qualitative-NCFIVW6S.js +43 -0
- package/dist/radar2-UJFFZE7T.js +326 -0
- package/dist/radarFacility2-ATQBCF3N.js +334 -0
- package/dist/regression-4RSS7447.js +56 -0
- package/dist/regression.inputs-5XGUGNWV.js +48 -0
- package/dist/regression.inputs.term-LSJAZWE4.js +48 -0
- package/dist/regression.inputs.values.table-GNIJZETG.js +45 -0
- package/dist/regression.integration.spec-MV652K47.js +784 -0
- package/dist/regression.results-M3YH6ZD3.js +40 -0
- package/dist/regression.spec-455WPZHP.js +708 -0
- package/dist/report-MH3V7SHZ.js +222 -0
- package/dist/sampleScatter.spec-OTIL3JDG.js +202 -0
- package/dist/sampleView-DHACOCEG.js +48 -0
- package/dist/samplelst-F3AXOE2D.js +111 -0
- package/dist/samplematrix-M6CKKVNE.js +2198 -0
- package/dist/sc-S5XA37JJ.js +86 -0
- package/dist/scatter-IRPFNDHW.js +851 -0
- package/dist/scatter.integration.spec-5FWVHMVJ.js +1206 -0
- package/dist/selectGenomeWithTklst-NIOUX6MV.js +134 -0
- package/dist/singleCellCellType-FTGLNH2J.js +38 -0
- package/dist/singleCellCellType.unit.spec-BJ5YZAXF.js +160 -0
- package/dist/singleCellGeneExpression-56EDDG5H.js +38 -0
- package/dist/singleCellGeneExpression.unit.spec-XSQRWAI3.js +153 -0
- package/dist/singleCellPlot-TH77EJZ4.js +54 -0
- package/dist/singlecell-3QZQZM32.js +86 -0
- package/dist/singlecell-7KJMBASC.js +1572 -0
- package/dist/snp-YXG5O4U4.js +38 -0
- package/dist/snp.unit.spec-O27J7OOK.js +176 -0
- package/dist/snplocus-CQZSC7P6.js +208 -0
- package/dist/spliceevent.a53ss.diagram-K5ZDPZE6.js +151 -0
- package/dist/spliceevent.exonskip.diagram-A2VZ3TTF.js +277 -0
- package/dist/spliceevent.noeventdiagram-DJDA6ENK.js +460 -0
- package/dist/ssGSEA-3FTGRUTC.js +38 -0
- package/dist/ssGSEA.unit.spec-GF35KBTX.js +88 -0
- package/dist/summarizeCnvGeneexp-6IDTNOYE.js +163 -0
- package/dist/summarizeGeneexpSurvival-OWLUX2HO.js +114 -0
- package/dist/summarizeGeneexpSurvival-OWLUX2HO.js.map +7 -0
- package/dist/summarizeMutationCnv-BMEN3XNV.js +164 -0
- package/dist/summarizeMutationDiagnosis-LW6K6373.js +40 -0
- package/dist/summarizeMutationSurvival-E7REF2VY.js +99 -0
- package/dist/summary-MKA7OJKE.js +49 -0
- package/dist/summary.integration.spec-IV6I6SNJ.js +414 -0
- package/dist/summaryInput-NET6SPM4.js +235 -0
- package/dist/sunburst-CO3MXFTJ.js +284 -0
- package/dist/survival-MIPCEBS3.js +46 -0
- package/dist/survival-QQXTCNDU.js +58 -0
- package/dist/survival.integration.spec-6FH4S3EH.js +915 -0
- package/dist/survival.integration.spec-6FH4S3EH.js.map +7 -0
- package/dist/svg2pdf.es.min-P2F6SSVJ.js +3157 -0
- package/dist/svgraph-YF7BS7TN.js +1387 -0
- package/dist/svmr-J2JLQGEE.js +3842 -0
- package/dist/table-7YL7I4GH.js +200 -0
- package/dist/termCollection-LNEN72IV.js +38 -0
- package/dist/termCollection-SOLNYAZ4.js +179 -0
- package/dist/termCollection.unit.spec-LTX7UVYP.js +208 -0
- package/dist/tk-RZDP2YT5.js +46 -0
- package/dist/tp.ui-T6XXBHHD.js +1459 -0
- package/dist/tvs.dt-7APM37Y3.js +39 -0
- package/dist/tvs.dtcnv.categorical-YIPXQSIL.js +40 -0
- package/dist/tvs.dtcnv.continuous-ITNZE3SH.js +72 -0
- package/dist/tvs.dtfusion-2JIIPDTN.js +40 -0
- package/dist/tvs.dtsnvindel-HO2PUFN2.js +40 -0
- package/dist/tvs.dtsv-7KCWSUYO.js +40 -0
- package/dist/tvs.samplelst-KKWJQNLW.js +104 -0
- package/dist/tvs.termCollection-R2IGRG2U.js +159 -0
- package/dist/violin-OTPZQTGA.js +46 -0
- package/dist/violin.integration.spec-KESWDSBM.js +1425 -0
- package/dist/violin.interactivity-Q2WALZO3.js +38 -0
- package/dist/violin.renderer-WIRIV7QY.js +40 -0
- package/dist/vocabulary-XXDHHHPJ.js +41 -0
- package/package.json +9 -3
- package/dist/2dmaf-US2ZAJJJ.js +0 -1373
- package/dist/AIProjectAdmin-QQO2PNAJ.js +0 -958
- package/dist/AppHeader-UKB344GC.js +0 -835
- package/dist/BoxPlot-JEBLRKBY.js +0 -1217
- package/dist/CorrelationVolcano-J3IFVSZB.js +0 -619
- package/dist/DE-PAPJP6AH.js +0 -95
- package/dist/DEinput-YON466QQ.js +0 -301
- package/dist/DEinput-YON466QQ.js.map +0 -7
- package/dist/DifferentialAnalysis-DEUODXGG.js +0 -245
- package/dist/Disco-OZM4S7HF.js +0 -3297
- package/dist/Disco.UI-VIHYJGYU.js +0 -249
- package/dist/DmrPlot-DSELMC4E.js +0 -642
- package/dist/GB-MUPI6RL5.js +0 -1151
- package/dist/GB-MUPI6RL5.js.map +0 -7
- package/dist/GeneExpInput-3AQEPTFZ.js +0 -367
- package/dist/HicApp-BP7PSXY2.js +0 -2250
- package/dist/NumBinaryEditor-CHWQT445.js +0 -271
- package/dist/NumBinaryEditor.unit.spec-MXRNK7XH.js +0 -286
- package/dist/NumContEditor-XS3RA7GY.js +0 -109
- package/dist/NumContEditor.unit.spec-662MHSP4.js +0 -169
- package/dist/NumCustomBinEditor-LUVIAXMZ.js +0 -38
- package/dist/NumCustomBinEditor.unit.spec-3D3GY3F4.js +0 -284
- package/dist/NumDiscreteEditor-24W2A5IN.js +0 -179
- package/dist/NumDiscreteEditor.unit.spec-B5T42Z5S.js +0 -202
- package/dist/NumRegularBinEditor-AING4HZ5.js +0 -38
- package/dist/NumRegularBinEditor.unit.spec-UKSVZH2S.js +0 -227
- package/dist/NumSplineEditor-54KNKHJX.js +0 -198
- package/dist/NumSplineEditor.unit.spec-5FTST3Y5.js +0 -199
- package/dist/NumericDensity-C7DQZ5Q5.js +0 -38
- package/dist/NumericDensity.unit.spec-HV6SD3ZS.js +0 -221
- package/dist/NumericHandler-FV3L23EC.js +0 -39
- package/dist/NumericHandler.unit.spec-E72DXVBB.js +0 -219
- package/dist/ProteomeInput-3XTK74SN.js +0 -396
- package/dist/RunChart2-X5FBZVRX.js +0 -758
- package/dist/SC-WE5DG2CQ.js +0 -1127
- package/dist/Volcano-2USCTLKO.js +0 -1379
- package/dist/WSIViewer-U6VSJUFF.js +0 -48562
- package/dist/WsiSamplesPlot-VIKSG63U.js +0 -165
- package/dist/adSandbox-VXUJGPD3.js +0 -38
- package/dist/animatedBubbleChart-4P7XLKSB.js +0 -555
- package/dist/app-KHZT2BVF.js +0 -49
- package/dist/app-XLYH3YPL.js +0 -37
- package/dist/bam-C23ZARYE.js +0 -860
- package/dist/barchart-KGXLYEIP.js +0 -47
- package/dist/barchart.data-7OI5GZZ6.js +0 -22
- package/dist/barchart.events-3KDNIFBG.js +0 -47
- package/dist/barchart.integration.spec-OQYY54AQ.js +0 -2010
- package/dist/barchart.integration.spec-OQYY54AQ.js.map +0 -7
- package/dist/barchart2-AT5FXOUY.js +0 -314
- package/dist/block-TCWYUB4R.js +0 -6226
- package/dist/block.init-7FHXQJNE.js +0 -38
- package/dist/block.mds.expressionrank-UGZQK7Z3.js +0 -359
- package/dist/block.mds.geneboxplot-2CQLB4YN.js +0 -828
- package/dist/block.mds.junction-JHPHWVOS.js +0 -1545
- package/dist/block.mds.svcnv-E7P2SVKK.js +0 -6801
- package/dist/block.svg-MVRR3C6V.js +0 -164
- package/dist/block.tk.aicheck-KX46G4TR.js +0 -283
- package/dist/block.tk.ase-WMXI47BF.js +0 -365
- package/dist/block.tk.bam-KFEGVEQQ.js +0 -1906
- package/dist/block.tk.bedgraphdot-P4DBCWFK.js +0 -384
- package/dist/block.tk.bigwig.ui-WJPH2Z7F.js +0 -212
- package/dist/block.tk.hicstraw-RSD6I2NX.js +0 -823
- package/dist/block.tk.junction-VZS2DEDO.js +0 -2364
- package/dist/block.tk.junction-VZS2DEDO.js.map +0 -7
- package/dist/block.tk.junction.textmatrixui-UCWGHZDI.js +0 -199
- package/dist/block.tk.ld-ERSIIBM2.js +0 -99
- package/dist/block.tk.menu-2ZNXE7CE.js +0 -1029
- package/dist/block.tk.pgv-EJLACCFR.js +0 -944
- package/dist/brainImaging-BMZJY6OT.js +0 -423
- package/dist/brainRegions-RZEBXPAS.js +0 -221
- package/dist/bubbleHeatmap-ERJFMLPK.js +0 -383
- package/dist/bubbleHeatmap-ERJFMLPK.js.map +0 -7
- package/dist/chunk-27FPMFP2.js +0 -54
- package/dist/chunk-455XZIIA.js +0 -222
- package/dist/chunk-474DTKP7.js +0 -263
- package/dist/chunk-474DTKP7.js.map +0 -7
- package/dist/chunk-4AP3O3JW.js +0 -226
- package/dist/chunk-4AP3O3JW.js.map +0 -7
- package/dist/chunk-4JWN7E7Q.js +0 -117
- package/dist/chunk-55MOHL3P.js +0 -158
- package/dist/chunk-5TJQ6633.js +0 -291
- package/dist/chunk-5TJQ6633.js.map +0 -7
- package/dist/chunk-5X5LI5YM.js +0 -254
- package/dist/chunk-634MOGE3.js +0 -314
- package/dist/chunk-634MOGE3.js.map +0 -7
- package/dist/chunk-6G4YOMWW.js +0 -1825
- package/dist/chunk-6SCBPP4C.js +0 -95
- package/dist/chunk-6SCBPP4C.js.map +0 -7
- package/dist/chunk-6YVEYTNH.js +0 -4269
- package/dist/chunk-73R5BVCY.js +0 -5067
- package/dist/chunk-74XVBQF7.js +0 -55
- package/dist/chunk-7I3LST7R.js +0 -272
- package/dist/chunk-ATUYZWHV.js +0 -1289
- package/dist/chunk-B6U3EDAF.js +0 -448
- package/dist/chunk-BO47H3VP.js +0 -477
- package/dist/chunk-BOO4W7WD.js +0 -482
- package/dist/chunk-BOO4W7WD.js.map +0 -7
- package/dist/chunk-C6YT5EM2.js +0 -217
- package/dist/chunk-CDUNE45Q.js +0 -534
- package/dist/chunk-CLN7ANNL.js +0 -216
- package/dist/chunk-CLNSNNQU.js +0 -302
- package/dist/chunk-COYULNJF.js +0 -119
- package/dist/chunk-DBFKUPM6.js +0 -1275
- package/dist/chunk-DNVSEW6P.js +0 -170
- package/dist/chunk-E6XLLQCG.js +0 -299
- package/dist/chunk-EC3SKPQT.js +0 -446
- package/dist/chunk-EDXQKDVQ.js +0 -368
- package/dist/chunk-EY253UB7.js +0 -448
- package/dist/chunk-F5ONTCHE.js +0 -13624
- package/dist/chunk-FABY3ISP.js +0 -176
- package/dist/chunk-FOPHIWFD.js +0 -100
- package/dist/chunk-FVX76DZS.js +0 -203
- package/dist/chunk-FXGE233W.js +0 -2681
- package/dist/chunk-FXGE233W.js.map +0 -7
- package/dist/chunk-GBXX3AHJ.js +0 -343
- package/dist/chunk-GVCQGWN7.js +0 -34
- package/dist/chunk-HXNUQOGN.js +0 -234
- package/dist/chunk-HXZSSHEB.js +0 -37
- package/dist/chunk-IKDWQJZE.js +0 -736
- package/dist/chunk-IVXCWCKS.js +0 -317
- package/dist/chunk-IVXCWCKS.js.map +0 -7
- package/dist/chunk-JEZUPG4J.js +0 -617
- package/dist/chunk-JWHFMFF2.js +0 -142
- package/dist/chunk-K3OJJZCQ.js +0 -230
- package/dist/chunk-KM4JBR26.js +0 -815
- package/dist/chunk-KNOFEVOJ.js +0 -54
- package/dist/chunk-L7VDSIM7.js +0 -20881
- package/dist/chunk-L7VDSIM7.js.map +0 -7
- package/dist/chunk-LLX3NKB4.js +0 -148
- package/dist/chunk-MQJVDIQK.js +0 -2786
- package/dist/chunk-N25ENPO3.js +0 -14
- package/dist/chunk-N3JT3KCV.js +0 -399
- package/dist/chunk-N6QEVQZV.js +0 -194
- package/dist/chunk-NJDW6ZQP.js +0 -102
- package/dist/chunk-NLQQIVTC.js +0 -276
- package/dist/chunk-NU2W6B7I.js +0 -833
- package/dist/chunk-OR43PGBV.js +0 -98
- package/dist/chunk-PWUERAAF.js +0 -182
- package/dist/chunk-PXCFA4ZQ.js +0 -2327
- package/dist/chunk-QSEGY3U5.js +0 -129
- package/dist/chunk-QWOE5YTB.js +0 -11194
- package/dist/chunk-QWOE5YTB.js.map +0 -7
- package/dist/chunk-SC6IPDJR.js +0 -6364
- package/dist/chunk-SDMOLIEU.js +0 -1205
- package/dist/chunk-SDMOLIEU.js.map +0 -7
- package/dist/chunk-T46LHXJW.js +0 -283
- package/dist/chunk-T46LHXJW.js.map +0 -7
- package/dist/chunk-UDL2DEBB.js +0 -50
- package/dist/chunk-UXDVUCXU.js +0 -190
- package/dist/chunk-VDIVDU3T.js +0 -386
- package/dist/chunk-VRLC7DAU.js +0 -2833
- package/dist/chunk-XQSQQSGB.js +0 -1102
- package/dist/chunk-XVXAQ3FI.js +0 -1943
- package/dist/chunk-Y45JIQ5Y.js +0 -1219
- package/dist/chunk-Y45JIQ5Y.js.map +0 -7
- package/dist/chunk-YQMENK5H.js +0 -102
- package/dist/chunk-ZUC4XNWU.js +0 -514
- package/dist/condition-ZPFBPMEZ.js +0 -332
- package/dist/controls-LIVMV2GV.js +0 -41
- package/dist/controls.config-2EOMBN5E.js +0 -39
- package/dist/correlation-D6GAPOP5.js +0 -102
- package/dist/cuminc-GPFDRNUP.js +0 -1149
- package/dist/cuminc.integration.spec-V4JYKLA6.js +0 -678
- package/dist/customdata.inputui-DSEUS3CT.js +0 -289
- package/dist/dataDownload-KT6K3M7Q.js +0 -330
- package/dist/dataDownload.integration.spec-VEX2RTSA.js +0 -193
- package/dist/databrowser.ui-VJKNMIXA.js +0 -433
- package/dist/dictionary-B27BMR5H.js +0 -118
- package/dist/dnaMethylation-BWQGUXVR.js +0 -38
- package/dist/dnaMethylation.integration.spec-YMGT2HYZ.js +0 -203
- package/dist/dofetch-BMSZZAAQ.js +0 -51
- package/dist/e2pca-KSY4DP53.js +0 -350
- package/dist/ep-4PAYGMWK.js +0 -1256
- package/dist/expclust.gdc.spec-XXFP2HHE.js +0 -307
- package/dist/facet-VCJQ7QPE.js +0 -521
- package/dist/forms2-IUD2SNOQ.js +0 -539
- package/dist/gb-JDH242LG.js +0 -88
- package/dist/geneExpClustering-L23JB7XA.js +0 -249
- package/dist/geneExpression-P2ERCRXO.js +0 -313
- package/dist/geneExpression-QGPVFAN4.js +0 -38
- package/dist/geneExpression.unit.spec-6BQBM6VL.js +0 -102
- package/dist/geneORA-XIMJP665.js +0 -278
- package/dist/geneRanking-AJH5G22J.js +0 -551
- package/dist/geneRanking-AJH5G22J.js.map +0 -7
- package/dist/geneVariant-AUUZ7S2B.js +0 -41
- package/dist/geneVariant-H6BGRRON.js +0 -39
- package/dist/geneVariant.integration.spec-FRCH6VI4.js +0 -198
- package/dist/genefusion.ui-AAJ37VFA.js +0 -309
- package/dist/geneset-5ARBBUYH.js +0 -208
- package/dist/genomeBrowser.spec-RV7YBSMZ.js +0 -281
- package/dist/grin2-4MYLICII.js +0 -75
- package/dist/grin2-RBK4NI6W.js +0 -967
- package/dist/grin2-RBK4NI6W.js.map +0 -7
- package/dist/gsea-XUMCVLFK.js +0 -47
- package/dist/hierCluster-HXOTNMC5.js +0 -63
- package/dist/hierCluster-PEDY7OTZ.js +0 -59
- package/dist/hierCluster.config-RKYCGNWW.js +0 -40
- package/dist/hierCluster.integration.spec-YKMAT7UU.js +0 -395
- package/dist/hierCluster.integration.spec-YKMAT7UU.js.map +0 -7
- package/dist/hierCluster.interactivity-LPTHVWHR.js +0 -54
- package/dist/hierCluster.renderers-4XWKHCNW.js +0 -21
- package/dist/imagePlot-3DF7ZH3U.js +0 -163
- package/dist/importPlot-N74SV3TL.js +0 -8
- package/dist/isoformExpression-FU7Y4OGU.js +0 -40
- package/dist/isoformExpression.unit.spec-BLQDKV37.js +0 -208
- package/dist/jspdf.es.min-TFJHKUF5.js +0 -40
- package/dist/launch.adhoc-Y35FZV6H.js +0 -42
- package/dist/leftlabel.sample-ERJGAYTF.js +0 -264
- package/dist/lollipop-DU37Q5E2.js +0 -171
- package/dist/maf-NRLSNDOT.js +0 -452
- package/dist/maf-NRLSNDOT.js.map +0 -7
- package/dist/maftimeline-GRXGOOSJ.js +0 -593
- package/dist/matrix-G3BULZ7Y.js +0 -58
- package/dist/matrix-TCTX26A4.js +0 -63
- package/dist/matrix.cells-ED6RS5EC.js +0 -28
- package/dist/matrix.config-QHO2YNOT.js +0 -41
- package/dist/matrix.data-KQFMXWRX.js +0 -25
- package/dist/matrix.groups-RE74EFLY.js +0 -27
- package/dist/matrix.integration.spec-Y4FCZ2Q2.js +0 -3072
- package/dist/matrix.interactivity-3DW5WAM3.js +0 -42
- package/dist/matrix.layout-W57D765I.js +0 -44
- package/dist/matrix.legend-ZST44PIB.js +0 -22
- package/dist/matrix.renderers-NFRKXO7Y.js +0 -38
- package/dist/matrix.serieses-6ZKTFVWY.js +0 -21
- package/dist/matrix.sort-2UE47IOC.js +0 -27
- package/dist/matrix.sort.unit.spec-5CMWEXPE.js +0 -472
- package/dist/matrix.sorterUi.unit.spec-Y2HXWHJN.js +0 -342
- package/dist/mavb-BI4XKI5P.js +0 -732
- package/dist/mds.fimo-UJYESPNC.js +0 -518
- package/dist/mds.samplescatterplot-JKU5B4QR.js +0 -1550
- package/dist/mds.survivalplot-OP7Y4D3L.js +0 -483
- package/dist/numericDictTermCluster-DRIEJJSP.js +0 -72
- package/dist/numericDictTermCluster-DRIEJJSP.js.map +0 -7
- package/dist/oncomatrix-A3IE47HV.js +0 -295
- package/dist/oncomatrix.spec-TDWB2ROF.js +0 -448
- package/dist/plot.2dvaf-XY34TDSM.js +0 -377
- package/dist/plot.app-WRCBLYGO.js +0 -41
- package/dist/plot.barplot-RXGOUNHM.js +0 -102
- package/dist/plot.boxplot-GBZGSS3D.js +0 -152
- package/dist/plot.brainImaging-DYPKMNHL.js +0 -51
- package/dist/plot.disco-5K2SCKJ4.js +0 -102
- package/dist/plot.dzi-THJIFHIS.js +0 -33
- package/dist/plot.ssgq-FSIUIV3A.js +0 -139
- package/dist/plot.vaf2cov-HP6KEBVJ.js +0 -259
- package/dist/plot.wsi-MR6JMOXW.js +0 -36
- package/dist/polar2-IT3OF5DX.js +0 -231
- package/dist/profileForms-XXGJVF2T.js +0 -446
- package/dist/profilePlot-J2C35OEY.js +0 -54
- package/dist/proteinView-7FDCILPH.js +0 -1556
- package/dist/proteinView-7FDCILPH.js.map +0 -7
- package/dist/purify.es-OGN7FDEQ.js +0 -1038
- package/dist/purify.es-OGN7FDEQ.js.map +0 -7
- package/dist/qualitative-N7S2JHZM.js +0 -43
- package/dist/radar2-CDDOQGQX.js +0 -326
- package/dist/radarFacility2-ZQTHO2ON.js +0 -334
- package/dist/regression-PBGAMZAV.js +0 -56
- package/dist/regression.inputs-54E5YKI4.js +0 -48
- package/dist/regression.inputs.term-52MBTMVM.js +0 -48
- package/dist/regression.inputs.values.table-F3FOAYFV.js +0 -45
- package/dist/regression.integration.spec-M4RPJUE4.js +0 -784
- package/dist/regression.results-JOK6I2ZD.js +0 -40
- package/dist/regression.spec-O4HZB2HQ.js +0 -708
- package/dist/report-BDDTM7SV.js +0 -222
- package/dist/sampleScatter.spec-272GLYEK.js +0 -202
- package/dist/sampleView-E6OHEEP4.js +0 -48
- package/dist/samplelst-3LNF3DBG.js +0 -111
- package/dist/samplematrix-HL445X7I.js +0 -2198
- package/dist/sc-4LELHVIS.js +0 -86
- package/dist/scatter-IZIZURQD.js +0 -851
- package/dist/scatter.integration.spec-BBEWMA7M.js +0 -1206
- package/dist/selectGenomeWithTklst-5LQGT4Z7.js +0 -134
- package/dist/singleCellCellType-T3ZT64EK.js +0 -38
- package/dist/singleCellCellType.unit.spec-AE4IAHOF.js +0 -160
- package/dist/singleCellGeneExpression-SRJXSDEB.js +0 -38
- package/dist/singleCellGeneExpression.unit.spec-EPL73UUO.js +0 -153
- package/dist/singleCellPlot-P2BHFTYZ.js +0 -54
- package/dist/singlecell-32SSD7VN.js +0 -1572
- package/dist/singlecell-7KRD5DP7.js +0 -86
- package/dist/snp-LE5R377N.js +0 -38
- package/dist/snp.unit.spec-UY6KQ5NJ.js +0 -176
- package/dist/snplocus-CP34ABUJ.js +0 -208
- package/dist/spliceevent.a53ss.diagram-JWLWQDNJ.js +0 -151
- package/dist/spliceevent.exonskip.diagram-C5526P7P.js +0 -277
- package/dist/spliceevent.noeventdiagram-352M63YB.js +0 -460
- package/dist/ssGSEA-BFTCECV3.js +0 -38
- package/dist/ssGSEA.unit.spec-4OUCKRDQ.js +0 -88
- package/dist/summarizeCnvGeneexp-Y3AWFIZA.js +0 -163
- package/dist/summarizeGeneexpSurvival-U5JSPG22.js +0 -108
- package/dist/summarizeGeneexpSurvival-U5JSPG22.js.map +0 -7
- package/dist/summarizeMutationCnv-KCOVQEBC.js +0 -164
- package/dist/summarizeMutationDiagnosis-EQXEQABW.js +0 -40
- package/dist/summarizeMutationSurvival-4VGLG4SC.js +0 -99
- package/dist/summary-DXYCBNI4.js +0 -49
- package/dist/summary.integration.spec-MZTJISLP.js +0 -414
- package/dist/summaryInput-5Z3XVIL6.js +0 -235
- package/dist/sunburst-WVSQJYP2.js +0 -284
- package/dist/survival-3R3J2JBE.js +0 -46
- package/dist/survival-XQWFVGCJ.js +0 -58
- package/dist/survival.integration.spec-EBDPIBYM.js +0 -821
- package/dist/survival.integration.spec-EBDPIBYM.js.map +0 -7
- package/dist/svg2pdf.es.min-H4DXBG4O.js +0 -3157
- package/dist/svgraph-SY2HVMYL.js +0 -1387
- package/dist/svmr-TIIMFKG7.js +0 -3842
- package/dist/table-5RFTXIQL.js +0 -200
- package/dist/termCollection-23QXTZDN.js +0 -38
- package/dist/termCollection-7KXABWVW.js +0 -179
- package/dist/termCollection.unit.spec-4AN2Z4PQ.js +0 -208
- package/dist/tk-WW6PJGPQ.js +0 -46
- package/dist/tp.ui-S5PO3MPH.js +0 -1459
- package/dist/tvs.dt-O7LUM5TK.js +0 -39
- package/dist/tvs.dtcnv.categorical-2OUFOD3W.js +0 -40
- package/dist/tvs.dtcnv.continuous-NOOUY5SZ.js +0 -72
- package/dist/tvs.dtfusion-KXQMP3UF.js +0 -40
- package/dist/tvs.dtsnvindel-PWHFTWZU.js +0 -40
- package/dist/tvs.dtsv-25FLS572.js +0 -40
- package/dist/tvs.samplelst-FLXNJFIV.js +0 -104
- package/dist/tvs.termCollection-PSVOMJE4.js +0 -159
- package/dist/violin-SWMEFWRA.js +0 -46
- package/dist/violin.integration.spec-6EQ6GC2N.js +0 -1425
- package/dist/violin.interactivity-WBIWPLSM.js +0 -38
- package/dist/violin.renderer-3WARZUOH.js +0 -40
- package/dist/vocabulary-WLHYHDX7.js +0 -41
- /package/dist/{2dmaf-US2ZAJJJ.js.map → 2dmaf-GTD3AXGT.js.map} +0 -0
- /package/dist/{AIProjectAdmin-QQO2PNAJ.js.map → AIProjectAdmin-ALMSVHFX.js.map} +0 -0
- /package/dist/{AppHeader-UKB344GC.js.map → AppHeader-RK2YRITI.js.map} +0 -0
- /package/dist/{BoxPlot-JEBLRKBY.js.map → BoxPlot-6ZXLPA5Q.js.map} +0 -0
- /package/dist/{CorrelationVolcano-J3IFVSZB.js.map → CorrelationVolcano-PJB3QCXB.js.map} +0 -0
- /package/dist/{DE-PAPJP6AH.js.map → DE-MEWV5RTV.js.map} +0 -0
- /package/dist/{DifferentialAnalysis-DEUODXGG.js.map → DifferentialAnalysis-7L3CDPVB.js.map} +0 -0
- /package/dist/{Disco-OZM4S7HF.js.map → Disco-FCS7B5DO.js.map} +0 -0
- /package/dist/{Disco.UI-VIHYJGYU.js.map → Disco.UI-BFJ5XFAT.js.map} +0 -0
- /package/dist/{DmrPlot-DSELMC4E.js.map → DmrPlot-362PCE7L.js.map} +0 -0
- /package/dist/{GeneExpInput-3AQEPTFZ.js.map → GeneExpInput-EHWHQTRV.js.map} +0 -0
- /package/dist/{HicApp-BP7PSXY2.js.map → HicApp-UE4DCUKX.js.map} +0 -0
- /package/dist/{NumBinaryEditor-CHWQT445.js.map → NumBinaryEditor-3TAAJNYY.js.map} +0 -0
- /package/dist/{NumBinaryEditor.unit.spec-MXRNK7XH.js.map → NumBinaryEditor.unit.spec-6776472M.js.map} +0 -0
- /package/dist/{NumContEditor-XS3RA7GY.js.map → NumContEditor-WLFXTY4M.js.map} +0 -0
- /package/dist/{NumContEditor.unit.spec-662MHSP4.js.map → NumContEditor.unit.spec-KG5SCOIQ.js.map} +0 -0
- /package/dist/{NumCustomBinEditor-LUVIAXMZ.js.map → NumCustomBinEditor-EKKNCLKI.js.map} +0 -0
- /package/dist/{NumCustomBinEditor.unit.spec-3D3GY3F4.js.map → NumCustomBinEditor.unit.spec-LSLSKQDW.js.map} +0 -0
- /package/dist/{NumDiscreteEditor-24W2A5IN.js.map → NumDiscreteEditor-X2MLECNT.js.map} +0 -0
- /package/dist/{NumDiscreteEditor.unit.spec-B5T42Z5S.js.map → NumDiscreteEditor.unit.spec-BZG7P4C7.js.map} +0 -0
- /package/dist/{NumRegularBinEditor-AING4HZ5.js.map → NumRegularBinEditor-CAGJ4ZWD.js.map} +0 -0
- /package/dist/{NumRegularBinEditor.unit.spec-UKSVZH2S.js.map → NumRegularBinEditor.unit.spec-GJSJC4DK.js.map} +0 -0
- /package/dist/{NumSplineEditor-54KNKHJX.js.map → NumSplineEditor-ND3RC7R6.js.map} +0 -0
- /package/dist/{NumSplineEditor.unit.spec-5FTST3Y5.js.map → NumSplineEditor.unit.spec-F67JQKPY.js.map} +0 -0
- /package/dist/{NumericDensity-C7DQZ5Q5.js.map → NumericDensity-VW7NIZU7.js.map} +0 -0
- /package/dist/{NumericDensity.unit.spec-HV6SD3ZS.js.map → NumericDensity.unit.spec-YHIMU23C.js.map} +0 -0
- /package/dist/{NumericHandler-FV3L23EC.js.map → NumericHandler-HCU6B2XV.js.map} +0 -0
- /package/dist/{NumericHandler.unit.spec-E72DXVBB.js.map → NumericHandler.unit.spec-6GVWAUED.js.map} +0 -0
- /package/dist/{ProteomeInput-3XTK74SN.js.map → ProteomeInput-SONQSTVD.js.map} +0 -0
- /package/dist/{RunChart2-X5FBZVRX.js.map → RunChart2-ZLBNG4JF.js.map} +0 -0
- /package/dist/{SC-WE5DG2CQ.js.map → SC-YDRE37LP.js.map} +0 -0
- /package/dist/{Volcano-2USCTLKO.js.map → Volcano-27ZERHXI.js.map} +0 -0
- /package/dist/{WSIViewer-U6VSJUFF.js.map → WSIViewer-2P7ANPBV.js.map} +0 -0
- /package/dist/{WsiSamplesPlot-VIKSG63U.js.map → WsiSamplesPlot-FM4B657P.js.map} +0 -0
- /package/dist/{adSandbox-VXUJGPD3.js.map → adSandbox-M6TBRE5W.js.map} +0 -0
- /package/dist/{animatedBubbleChart-4P7XLKSB.js.map → animatedBubbleChart-VYSSX52K.js.map} +0 -0
- /package/dist/{app-KHZT2BVF.js.map → app-BLJT7ZDG.js.map} +0 -0
- /package/dist/{app-XLYH3YPL.js.map → app-LSFSUJHF.js.map} +0 -0
- /package/dist/{bam-C23ZARYE.js.map → bam-ZMHBTBB4.js.map} +0 -0
- /package/dist/{barchart-KGXLYEIP.js.map → barchart-EF75MNTN.js.map} +0 -0
- /package/dist/{barchart.data-7OI5GZZ6.js.map → barchart.data-VWZB3R2Z.js.map} +0 -0
- /package/dist/{barchart.events-3KDNIFBG.js.map → barchart.events-AMYQOMBQ.js.map} +0 -0
- /package/dist/{barchart2-AT5FXOUY.js.map → barchart2-LOHN6NSE.js.map} +0 -0
- /package/dist/{block-TCWYUB4R.js.map → block-23BH5TZ3.js.map} +0 -0
- /package/dist/{block.init-7FHXQJNE.js.map → block.init-3BF6L23D.js.map} +0 -0
- /package/dist/{block.mds.expressionrank-UGZQK7Z3.js.map → block.mds.expressionrank-DSHATA2M.js.map} +0 -0
- /package/dist/{block.mds.geneboxplot-2CQLB4YN.js.map → block.mds.geneboxplot-RXQUOE3Y.js.map} +0 -0
- /package/dist/{block.mds.junction-JHPHWVOS.js.map → block.mds.junction-PN776TCD.js.map} +0 -0
- /package/dist/{block.mds.svcnv-E7P2SVKK.js.map → block.mds.svcnv-SOWUBH4K.js.map} +0 -0
- /package/dist/{block.svg-MVRR3C6V.js.map → block.svg-ZPYMFAGC.js.map} +0 -0
- /package/dist/{block.tk.aicheck-KX46G4TR.js.map → block.tk.aicheck-E22ZJJFP.js.map} +0 -0
- /package/dist/{block.tk.ase-WMXI47BF.js.map → block.tk.ase-S54Z5A4G.js.map} +0 -0
- /package/dist/{block.tk.bam-KFEGVEQQ.js.map → block.tk.bam-YOELFYXU.js.map} +0 -0
- /package/dist/{block.tk.bedgraphdot-P4DBCWFK.js.map → block.tk.bedgraphdot-VFUWXPSL.js.map} +0 -0
- /package/dist/{block.tk.bigwig.ui-WJPH2Z7F.js.map → block.tk.bigwig.ui-2SJYUPR3.js.map} +0 -0
- /package/dist/{block.tk.hicstraw-RSD6I2NX.js.map → block.tk.hicstraw-GZVE4HQG.js.map} +0 -0
- /package/dist/{block.tk.junction.textmatrixui-UCWGHZDI.js.map → block.tk.junction.textmatrixui-A726SAAL.js.map} +0 -0
- /package/dist/{block.tk.ld-ERSIIBM2.js.map → block.tk.ld-THUOBW72.js.map} +0 -0
- /package/dist/{block.tk.menu-2ZNXE7CE.js.map → block.tk.menu-V3VGODVI.js.map} +0 -0
- /package/dist/{block.tk.pgv-EJLACCFR.js.map → block.tk.pgv-CNUGIK5J.js.map} +0 -0
- /package/dist/{brainImaging-BMZJY6OT.js.map → brainImaging-4PF74IEK.js.map} +0 -0
- /package/dist/{brainRegions-RZEBXPAS.js.map → brainRegions-U5K3KEQF.js.map} +0 -0
- /package/dist/{chunk-EDXQKDVQ.js.map → chunk-2FTXOPE2.js.map} +0 -0
- /package/dist/{chunk-5X5LI5YM.js.map → chunk-2MCUT32T.js.map} +0 -0
- /package/dist/{chunk-XQSQQSGB.js.map → chunk-2SZ2VLOG.js.map} +0 -0
- /package/dist/{chunk-HXZSSHEB.js.map → chunk-2XBWB6P2.js.map} +0 -0
- /package/dist/{chunk-HXNUQOGN.js.map → chunk-34VSTY2U.js.map} +0 -0
- /package/dist/{chunk-SC6IPDJR.js.map → chunk-44VQIATQ.js.map} +0 -0
- /package/dist/{chunk-LLX3NKB4.js.map → chunk-5B5FZPZI.js.map} +0 -0
- /package/dist/{chunk-NLQQIVTC.js.map → chunk-5DSLFEAN.js.map} +0 -0
- /package/dist/{chunk-UDL2DEBB.js.map → chunk-5DSQOV7M.js.map} +0 -0
- /package/dist/{chunk-455XZIIA.js.map → chunk-7CZI6SE7.js.map} +0 -0
- /package/dist/{chunk-KNOFEVOJ.js.map → chunk-7NABQ2JU.js.map} +0 -0
- /package/dist/{chunk-4JWN7E7Q.js.map → chunk-7VMFUE64.js.map} +0 -0
- /package/dist/{chunk-27FPMFP2.js.map → chunk-7WBS7ZUI.js.map} +0 -0
- /package/dist/{chunk-K3OJJZCQ.js.map → chunk-AK5Z4PLV.js.map} +0 -0
- /package/dist/{chunk-B6U3EDAF.js.map → chunk-B3XMNPZY.js.map} +0 -0
- /package/dist/{chunk-KM4JBR26.js.map → chunk-B4VBTVVQ.js.map} +0 -0
- /package/dist/{chunk-N6QEVQZV.js.map → chunk-CHUE5Y7Y.js.map} +0 -0
- /package/dist/{chunk-DNVSEW6P.js.map → chunk-CNBLRB4P.js.map} +0 -0
- /package/dist/{chunk-UXDVUCXU.js.map → chunk-CPMOBFFR.js.map} +0 -0
- /package/dist/{chunk-E6XLLQCG.js.map → chunk-D3TU3RDU.js.map} +0 -0
- /package/dist/{chunk-EC3SKPQT.js.map → chunk-E2KY2IZS.js.map} +0 -0
- /package/dist/{chunk-ZUC4XNWU.js.map → chunk-FBMDK2UA.js.map} +0 -0
- /package/dist/{chunk-YQMENK5H.js.map → chunk-FSWSZZTG.js.map} +0 -0
- /package/dist/{chunk-N3JT3KCV.js.map → chunk-GPGCGFFS.js.map} +0 -0
- /package/dist/{chunk-C6YT5EM2.js.map → chunk-H5DR6OYM.js.map} +0 -0
- /package/dist/{chunk-OR43PGBV.js.map → chunk-HVZQYGQN.js.map} +0 -0
- /package/dist/{chunk-NU2W6B7I.js.map → chunk-HYIDLSEL.js.map} +0 -0
- /package/dist/{chunk-N25ENPO3.js.map → chunk-IDX6WU4U.js.map} +0 -0
- /package/dist/{chunk-COYULNJF.js.map → chunk-IQTEW3SK.js.map} +0 -0
- /package/dist/{chunk-74XVBQF7.js.map → chunk-JVVOJREJ.js.map} +0 -0
- /package/dist/{chunk-CLN7ANNL.js.map → chunk-KIGAMN3Z.js.map} +0 -0
- /package/dist/{chunk-F5ONTCHE.js.map → chunk-LAQZX5PA.js.map} +0 -0
- /package/dist/{chunk-MQJVDIQK.js.map → chunk-LRPQBMQE.js.map} +0 -0
- /package/dist/{chunk-73R5BVCY.js.map → chunk-M7JGRSFA.js.map} +0 -0
- /package/dist/{chunk-JWHFMFF2.js.map → chunk-MAACMLMN.js.map} +0 -0
- /package/dist/{chunk-6G4YOMWW.js.map → chunk-MNPTPENH.js.map} +0 -0
- /package/dist/{chunk-NJDW6ZQP.js.map → chunk-MU3ZC4RW.js.map} +0 -0
- /package/dist/{chunk-FABY3ISP.js.map → chunk-N6ALTSJ2.js.map} +0 -0
- /package/dist/{chunk-XVXAQ3FI.js.map → chunk-N7326KA3.js.map} +0 -0
- /package/dist/{chunk-PXCFA4ZQ.js.map → chunk-O64WQLAV.js.map} +0 -0
- /package/dist/{chunk-FVX76DZS.js.map → chunk-OEOYTMMY.js.map} +0 -0
- /package/dist/{chunk-IKDWQJZE.js.map → chunk-P3QPMVML.js.map} +0 -0
- /package/dist/{chunk-ATUYZWHV.js.map → chunk-PJM6MUTT.js.map} +0 -0
- /package/dist/{chunk-6YVEYTNH.js.map → chunk-QPAZPA3N.js.map} +0 -0
- /package/dist/{chunk-7I3LST7R.js.map → chunk-RG222M4S.js.map} +0 -0
- /package/dist/{chunk-55MOHL3P.js.map → chunk-S46UPZFM.js.map} +0 -0
- /package/dist/{chunk-GVCQGWN7.js.map → chunk-UDTNSJY2.js.map} +0 -0
- /package/dist/{chunk-FOPHIWFD.js.map → chunk-UPNKFGTN.js.map} +0 -0
- /package/dist/{chunk-JEZUPG4J.js.map → chunk-UZKHBBWY.js.map} +0 -0
- /package/dist/{chunk-CLNSNNQU.js.map → chunk-VG6GVF6D.js.map} +0 -0
- /package/dist/{chunk-EY253UB7.js.map → chunk-VO4FCZOR.js.map} +0 -0
- /package/dist/{chunk-CDUNE45Q.js.map → chunk-VZBMCJBR.js.map} +0 -0
- /package/dist/{chunk-PWUERAAF.js.map → chunk-WR4UATTO.js.map} +0 -0
- /package/dist/{chunk-VRLC7DAU.js.map → chunk-XNYATA6C.js.map} +0 -0
- /package/dist/{chunk-QSEGY3U5.js.map → chunk-Y5FH3TEH.js.map} +0 -0
- /package/dist/{chunk-GBXX3AHJ.js.map → chunk-YIFCXFWE.js.map} +0 -0
- /package/dist/{chunk-BO47H3VP.js.map → chunk-YRXB3MKU.js.map} +0 -0
- /package/dist/{chunk-DBFKUPM6.js.map → chunk-Z7UVDJKK.js.map} +0 -0
- /package/dist/{chunk-VDIVDU3T.js.map → chunk-ZDEMAKRA.js.map} +0 -0
- /package/dist/{condition-ZPFBPMEZ.js.map → condition-6UUQ3AAI.js.map} +0 -0
- /package/dist/{controls-LIVMV2GV.js.map → controls-N2NIGPHY.js.map} +0 -0
- /package/dist/{controls.config-2EOMBN5E.js.map → controls.config-YYIMJHWN.js.map} +0 -0
- /package/dist/{correlation-D6GAPOP5.js.map → correlation-DYUMFMTU.js.map} +0 -0
- /package/dist/{cuminc-GPFDRNUP.js.map → cuminc-EUXCL53V.js.map} +0 -0
- /package/dist/{cuminc.integration.spec-V4JYKLA6.js.map → cuminc.integration.spec-ZQFMIBF6.js.map} +0 -0
- /package/dist/{customdata.inputui-DSEUS3CT.js.map → customdata.inputui-U2VXVWJ3.js.map} +0 -0
- /package/dist/{dataDownload-KT6K3M7Q.js.map → dataDownload-QK2VYWYW.js.map} +0 -0
- /package/dist/{dataDownload.integration.spec-VEX2RTSA.js.map → dataDownload.integration.spec-NG4ZASWC.js.map} +0 -0
- /package/dist/{databrowser.ui-VJKNMIXA.js.map → databrowser.ui-ALW4LSLA.js.map} +0 -0
- /package/dist/{dictionary-B27BMR5H.js.map → dictionary-F7BPXOBO.js.map} +0 -0
- /package/dist/{dnaMethylation-BWQGUXVR.js.map → dnaMethylation-XNRJIBAH.js.map} +0 -0
- /package/dist/{dnaMethylation.integration.spec-YMGT2HYZ.js.map → dnaMethylation.integration.spec-F5ODQTVL.js.map} +0 -0
- /package/dist/{dofetch-BMSZZAAQ.js.map → dofetch-IYEI7WSH.js.map} +0 -0
- /package/dist/{e2pca-KSY4DP53.js.map → e2pca-BHB7UMS5.js.map} +0 -0
- /package/dist/{ep-4PAYGMWK.js.map → ep-QRFUVFSK.js.map} +0 -0
- /package/dist/{expclust.gdc.spec-XXFP2HHE.js.map → expclust.gdc.spec-LMH7QAU4.js.map} +0 -0
- /package/dist/{facet-VCJQ7QPE.js.map → facet-34HXG7MO.js.map} +0 -0
- /package/dist/{forms2-IUD2SNOQ.js.map → forms2-ZQUPKXE5.js.map} +0 -0
- /package/dist/{gb-JDH242LG.js.map → gb-HWZ5KZXX.js.map} +0 -0
- /package/dist/{geneExpClustering-L23JB7XA.js.map → geneExpClustering-KFMP553E.js.map} +0 -0
- /package/dist/{geneExpression-P2ERCRXO.js.map → geneExpression-E2GIRM6Z.js.map} +0 -0
- /package/dist/{geneExpression-QGPVFAN4.js.map → geneExpression-QODFRNS4.js.map} +0 -0
- /package/dist/{geneExpression.unit.spec-6BQBM6VL.js.map → geneExpression.unit.spec-HV44ABGV.js.map} +0 -0
- /package/dist/{geneORA-XIMJP665.js.map → geneORA-MJ6MFW2K.js.map} +0 -0
- /package/dist/{geneVariant-AUUZ7S2B.js.map → geneVariant-QT6E7YZN.js.map} +0 -0
- /package/dist/{geneVariant-H6BGRRON.js.map → geneVariant-UYQ4XIOQ.js.map} +0 -0
- /package/dist/{geneVariant.integration.spec-FRCH6VI4.js.map → geneVariant.integration.spec-HQ5GJ7UM.js.map} +0 -0
- /package/dist/{genefusion.ui-AAJ37VFA.js.map → genefusion.ui-5KYGD7JL.js.map} +0 -0
- /package/dist/{geneset-5ARBBUYH.js.map → geneset-M6T24ZYZ.js.map} +0 -0
- /package/dist/{genomeBrowser.spec-RV7YBSMZ.js.map → genomeBrowser.spec-CVH4S5KZ.js.map} +0 -0
- /package/dist/{grin2-4MYLICII.js.map → grin2-QU2UCKKE.js.map} +0 -0
- /package/dist/{gsea-XUMCVLFK.js.map → gsea-EGWJAATJ.js.map} +0 -0
- /package/dist/{hierCluster-HXOTNMC5.js.map → hierCluster-4OJ7BHAB.js.map} +0 -0
- /package/dist/{hierCluster-PEDY7OTZ.js.map → hierCluster-P4HGGVK7.js.map} +0 -0
- /package/dist/{hierCluster.config-RKYCGNWW.js.map → hierCluster.config-5DGS5EH4.js.map} +0 -0
- /package/dist/{hierCluster.interactivity-LPTHVWHR.js.map → hierCluster.interactivity-VEHJHBKY.js.map} +0 -0
- /package/dist/{hierCluster.renderers-4XWKHCNW.js.map → hierCluster.renderers-OEVSBUBK.js.map} +0 -0
- /package/dist/{imagePlot-3DF7ZH3U.js.map → imagePlot-MMJYC4DX.js.map} +0 -0
- /package/dist/{importPlot-N74SV3TL.js.map → importPlot-4HJ6VR4P.js.map} +0 -0
- /package/dist/{isoformExpression-FU7Y4OGU.js.map → isoformExpression-EISYQF2S.js.map} +0 -0
- /package/dist/{isoformExpression.unit.spec-BLQDKV37.js.map → isoformExpression.unit.spec-YKBWVL7C.js.map} +0 -0
- /package/dist/{jspdf.es.min-TFJHKUF5.js.map → jspdf.es.min-NXISJ3W7.js.map} +0 -0
- /package/dist/{launch.adhoc-Y35FZV6H.js.map → launch.adhoc-U3KOGDIC.js.map} +0 -0
- /package/dist/{leftlabel.sample-ERJGAYTF.js.map → leftlabel.sample-LVF5WLMZ.js.map} +0 -0
- /package/dist/{lollipop-DU37Q5E2.js.map → lollipop-HX2WLD5J.js.map} +0 -0
- /package/dist/{maftimeline-GRXGOOSJ.js.map → maftimeline-VN6SYUPQ.js.map} +0 -0
- /package/dist/{matrix-G3BULZ7Y.js.map → matrix-6UASVMIW.js.map} +0 -0
- /package/dist/{matrix-TCTX26A4.js.map → matrix-FYYLVW7O.js.map} +0 -0
- /package/dist/{matrix.cells-ED6RS5EC.js.map → matrix.cells-3RUGV7XG.js.map} +0 -0
- /package/dist/{matrix.config-QHO2YNOT.js.map → matrix.config-ELBFN3JN.js.map} +0 -0
- /package/dist/{matrix.data-KQFMXWRX.js.map → matrix.data-MHFF47ZY.js.map} +0 -0
- /package/dist/{matrix.groups-RE74EFLY.js.map → matrix.groups-UJRFFG5J.js.map} +0 -0
- /package/dist/{matrix.integration.spec-Y4FCZ2Q2.js.map → matrix.integration.spec-5DUNUOQ3.js.map} +0 -0
- /package/dist/{matrix.interactivity-3DW5WAM3.js.map → matrix.interactivity-2TZ3ON4H.js.map} +0 -0
- /package/dist/{matrix.layout-W57D765I.js.map → matrix.layout-IGUBUCB2.js.map} +0 -0
- /package/dist/{matrix.legend-ZST44PIB.js.map → matrix.legend-UBQF6LMD.js.map} +0 -0
- /package/dist/{matrix.renderers-NFRKXO7Y.js.map → matrix.renderers-ON2EXXIS.js.map} +0 -0
- /package/dist/{matrix.serieses-6ZKTFVWY.js.map → matrix.serieses-5XH7NO23.js.map} +0 -0
- /package/dist/{matrix.sort-2UE47IOC.js.map → matrix.sort-QSWTVRJT.js.map} +0 -0
- /package/dist/{matrix.sort.unit.spec-5CMWEXPE.js.map → matrix.sort.unit.spec-7Y6D456I.js.map} +0 -0
- /package/dist/{matrix.sorterUi.unit.spec-Y2HXWHJN.js.map → matrix.sorterUi.unit.spec-3XNGEZZ2.js.map} +0 -0
- /package/dist/{mavb-BI4XKI5P.js.map → mavb-J4AUXBHZ.js.map} +0 -0
- /package/dist/{mds.fimo-UJYESPNC.js.map → mds.fimo-I6OALZRX.js.map} +0 -0
- /package/dist/{mds.samplescatterplot-JKU5B4QR.js.map → mds.samplescatterplot-XSWR37S5.js.map} +0 -0
- /package/dist/{mds.survivalplot-OP7Y4D3L.js.map → mds.survivalplot-Q3TE4A5P.js.map} +0 -0
- /package/dist/{oncomatrix-A3IE47HV.js.map → oncomatrix-C4RDUA2C.js.map} +0 -0
- /package/dist/{oncomatrix.spec-TDWB2ROF.js.map → oncomatrix.spec-QVD3XUTH.js.map} +0 -0
- /package/dist/{plot.2dvaf-XY34TDSM.js.map → plot.2dvaf-MNONDWFA.js.map} +0 -0
- /package/dist/{plot.app-WRCBLYGO.js.map → plot.app-3T275PW5.js.map} +0 -0
- /package/dist/{plot.barplot-RXGOUNHM.js.map → plot.barplot-LOLIPHXG.js.map} +0 -0
- /package/dist/{plot.boxplot-GBZGSS3D.js.map → plot.boxplot-I6CAYXPV.js.map} +0 -0
- /package/dist/{plot.brainImaging-DYPKMNHL.js.map → plot.brainImaging-Y76KB6IC.js.map} +0 -0
- /package/dist/{plot.disco-5K2SCKJ4.js.map → plot.disco-N5ISUUNQ.js.map} +0 -0
- /package/dist/{plot.dzi-THJIFHIS.js.map → plot.dzi-Q6K542P6.js.map} +0 -0
- /package/dist/{plot.ssgq-FSIUIV3A.js.map → plot.ssgq-OGLNOY4Q.js.map} +0 -0
- /package/dist/{plot.vaf2cov-HP6KEBVJ.js.map → plot.vaf2cov-NXQ5D3KA.js.map} +0 -0
- /package/dist/{plot.wsi-MR6JMOXW.js.map → plot.wsi-YMDUOZ57.js.map} +0 -0
- /package/dist/{polar2-IT3OF5DX.js.map → polar2-AQ2W3SNH.js.map} +0 -0
- /package/dist/{profileForms-XXGJVF2T.js.map → profileForms-TCPZPI22.js.map} +0 -0
- /package/dist/{profilePlot-J2C35OEY.js.map → profilePlot-4RKKICKC.js.map} +0 -0
- /package/dist/{qualitative-N7S2JHZM.js.map → qualitative-NCFIVW6S.js.map} +0 -0
- /package/dist/{radar2-CDDOQGQX.js.map → radar2-UJFFZE7T.js.map} +0 -0
- /package/dist/{radarFacility2-ZQTHO2ON.js.map → radarFacility2-ATQBCF3N.js.map} +0 -0
- /package/dist/{regression-PBGAMZAV.js.map → regression-4RSS7447.js.map} +0 -0
- /package/dist/{regression.inputs-54E5YKI4.js.map → regression.inputs-5XGUGNWV.js.map} +0 -0
- /package/dist/{regression.inputs.term-52MBTMVM.js.map → regression.inputs.term-LSJAZWE4.js.map} +0 -0
- /package/dist/{regression.inputs.values.table-F3FOAYFV.js.map → regression.inputs.values.table-GNIJZETG.js.map} +0 -0
- /package/dist/{regression.integration.spec-M4RPJUE4.js.map → regression.integration.spec-MV652K47.js.map} +0 -0
- /package/dist/{regression.results-JOK6I2ZD.js.map → regression.results-M3YH6ZD3.js.map} +0 -0
- /package/dist/{regression.spec-O4HZB2HQ.js.map → regression.spec-455WPZHP.js.map} +0 -0
- /package/dist/{report-BDDTM7SV.js.map → report-MH3V7SHZ.js.map} +0 -0
- /package/dist/{sampleScatter.spec-272GLYEK.js.map → sampleScatter.spec-OTIL3JDG.js.map} +0 -0
- /package/dist/{sampleView-E6OHEEP4.js.map → sampleView-DHACOCEG.js.map} +0 -0
- /package/dist/{samplelst-3LNF3DBG.js.map → samplelst-F3AXOE2D.js.map} +0 -0
- /package/dist/{samplematrix-HL445X7I.js.map → samplematrix-M6CKKVNE.js.map} +0 -0
- /package/dist/{sc-4LELHVIS.js.map → sc-S5XA37JJ.js.map} +0 -0
- /package/dist/{scatter-IZIZURQD.js.map → scatter-IRPFNDHW.js.map} +0 -0
- /package/dist/{scatter.integration.spec-BBEWMA7M.js.map → scatter.integration.spec-5FWVHMVJ.js.map} +0 -0
- /package/dist/{selectGenomeWithTklst-5LQGT4Z7.js.map → selectGenomeWithTklst-NIOUX6MV.js.map} +0 -0
- /package/dist/{singleCellCellType-T3ZT64EK.js.map → singleCellCellType-FTGLNH2J.js.map} +0 -0
- /package/dist/{singleCellCellType.unit.spec-AE4IAHOF.js.map → singleCellCellType.unit.spec-BJ5YZAXF.js.map} +0 -0
- /package/dist/{singleCellGeneExpression-SRJXSDEB.js.map → singleCellGeneExpression-56EDDG5H.js.map} +0 -0
- /package/dist/{singleCellGeneExpression.unit.spec-EPL73UUO.js.map → singleCellGeneExpression.unit.spec-XSQRWAI3.js.map} +0 -0
- /package/dist/{singleCellPlot-P2BHFTYZ.js.map → singleCellPlot-TH77EJZ4.js.map} +0 -0
- /package/dist/{singlecell-7KRD5DP7.js.map → singlecell-3QZQZM32.js.map} +0 -0
- /package/dist/{singlecell-32SSD7VN.js.map → singlecell-7KJMBASC.js.map} +0 -0
- /package/dist/{snp-LE5R377N.js.map → snp-YXG5O4U4.js.map} +0 -0
- /package/dist/{snp.unit.spec-UY6KQ5NJ.js.map → snp.unit.spec-O27J7OOK.js.map} +0 -0
- /package/dist/{snplocus-CP34ABUJ.js.map → snplocus-CQZSC7P6.js.map} +0 -0
- /package/dist/{spliceevent.a53ss.diagram-JWLWQDNJ.js.map → spliceevent.a53ss.diagram-K5ZDPZE6.js.map} +0 -0
- /package/dist/{spliceevent.exonskip.diagram-C5526P7P.js.map → spliceevent.exonskip.diagram-A2VZ3TTF.js.map} +0 -0
- /package/dist/{spliceevent.noeventdiagram-352M63YB.js.map → spliceevent.noeventdiagram-DJDA6ENK.js.map} +0 -0
- /package/dist/{ssGSEA-BFTCECV3.js.map → ssGSEA-3FTGRUTC.js.map} +0 -0
- /package/dist/{ssGSEA.unit.spec-4OUCKRDQ.js.map → ssGSEA.unit.spec-GF35KBTX.js.map} +0 -0
- /package/dist/{summarizeCnvGeneexp-Y3AWFIZA.js.map → summarizeCnvGeneexp-6IDTNOYE.js.map} +0 -0
- /package/dist/{summarizeMutationCnv-KCOVQEBC.js.map → summarizeMutationCnv-BMEN3XNV.js.map} +0 -0
- /package/dist/{summarizeMutationDiagnosis-EQXEQABW.js.map → summarizeMutationDiagnosis-LW6K6373.js.map} +0 -0
- /package/dist/{summarizeMutationSurvival-4VGLG4SC.js.map → summarizeMutationSurvival-E7REF2VY.js.map} +0 -0
- /package/dist/{summary-DXYCBNI4.js.map → summary-MKA7OJKE.js.map} +0 -0
- /package/dist/{summary.integration.spec-MZTJISLP.js.map → summary.integration.spec-IV6I6SNJ.js.map} +0 -0
- /package/dist/{summaryInput-5Z3XVIL6.js.map → summaryInput-NET6SPM4.js.map} +0 -0
- /package/dist/{sunburst-WVSQJYP2.js.map → sunburst-CO3MXFTJ.js.map} +0 -0
- /package/dist/{survival-3R3J2JBE.js.map → survival-MIPCEBS3.js.map} +0 -0
- /package/dist/{survival-XQWFVGCJ.js.map → survival-QQXTCNDU.js.map} +0 -0
- /package/dist/{svg2pdf.es.min-H4DXBG4O.js.map → svg2pdf.es.min-P2F6SSVJ.js.map} +0 -0
- /package/dist/{svgraph-SY2HVMYL.js.map → svgraph-YF7BS7TN.js.map} +0 -0
- /package/dist/{svmr-TIIMFKG7.js.map → svmr-J2JLQGEE.js.map} +0 -0
- /package/dist/{table-5RFTXIQL.js.map → table-7YL7I4GH.js.map} +0 -0
- /package/dist/{termCollection-23QXTZDN.js.map → termCollection-LNEN72IV.js.map} +0 -0
- /package/dist/{termCollection-7KXABWVW.js.map → termCollection-SOLNYAZ4.js.map} +0 -0
- /package/dist/{termCollection.unit.spec-4AN2Z4PQ.js.map → termCollection.unit.spec-LTX7UVYP.js.map} +0 -0
- /package/dist/{tk-WW6PJGPQ.js.map → tk-RZDP2YT5.js.map} +0 -0
- /package/dist/{tp.ui-S5PO3MPH.js.map → tp.ui-T6XXBHHD.js.map} +0 -0
- /package/dist/{tvs.dt-O7LUM5TK.js.map → tvs.dt-7APM37Y3.js.map} +0 -0
- /package/dist/{tvs.dtcnv.categorical-2OUFOD3W.js.map → tvs.dtcnv.categorical-YIPXQSIL.js.map} +0 -0
- /package/dist/{tvs.dtcnv.continuous-NOOUY5SZ.js.map → tvs.dtcnv.continuous-ITNZE3SH.js.map} +0 -0
- /package/dist/{tvs.dtfusion-KXQMP3UF.js.map → tvs.dtfusion-2JIIPDTN.js.map} +0 -0
- /package/dist/{tvs.dtsnvindel-PWHFTWZU.js.map → tvs.dtsnvindel-HO2PUFN2.js.map} +0 -0
- /package/dist/{tvs.dtsv-25FLS572.js.map → tvs.dtsv-7KCWSUYO.js.map} +0 -0
- /package/dist/{tvs.samplelst-FLXNJFIV.js.map → tvs.samplelst-KKWJQNLW.js.map} +0 -0
- /package/dist/{tvs.termCollection-PSVOMJE4.js.map → tvs.termCollection-R2IGRG2U.js.map} +0 -0
- /package/dist/{violin-SWMEFWRA.js.map → violin-OTPZQTGA.js.map} +0 -0
- /package/dist/{violin.integration.spec-6EQ6GC2N.js.map → violin.integration.spec-KESWDSBM.js.map} +0 -0
- /package/dist/{violin.interactivity-WBIWPLSM.js.map → violin.interactivity-Q2WALZO3.js.map} +0 -0
- /package/dist/{violin.renderer-3WARZUOH.js.map → violin.renderer-WIRIV7QY.js.map} +0 -0
- /package/dist/{vocabulary-WLHYHDX7.js.map → vocabulary-XXDHHHPJ.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 wholeProteomeLog2 = getLog2Ratio(ptm.proteinFoldChange)\n\t\tconst normalizedLog2 = logValue != null && wholeProteomeLog2 != null ? logValue - wholeProteomeLog2 : null\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\twholeProteomeLog2,\n\t\t\tnormalizedLog2,\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{\n\t\t\t\t\t\t\tk: 'Whole proteome Log2 FC',\n\t\t\t\t\t\t\tv: Number.isFinite(m.wholeProteomeLog2) ? roundValue(m.wholeProteomeLog2, 3) : 'NA'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tk: 'Normalized Log2 FC',\n\t\t\t\t\t\t\tv: Number.isFinite(m.normalizedLog2) ? roundValue(m.normalizedLog2, 3) : 'NA'\n\t\t\t\t\t\t},\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
|
+
}
|