@sjcrh/proteinpaint-client 2.184.0 → 2.185.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-X7LATQT7.js +1371 -0
- package/dist/AIProjectAdmin-GUBKURGO.js +830 -0
- package/dist/AppHeader-RDOFP322.js +833 -0
- package/dist/BoxPlot-AZF2EMGQ.js +1217 -0
- package/dist/CorrelationVolcano-VXW35SXU.js +617 -0
- package/dist/DE-NLGMZ44O.js +93 -0
- package/dist/DEinput-OJ7P4UMP.js +297 -0
- package/dist/DifferentialAnalysis-G75VUHDI.js +241 -0
- package/dist/DifferentialAnalysis-G75VUHDI.js.map +7 -0
- package/dist/Disco-DX4S44SI.js +3235 -0
- package/dist/Disco.UI-5FYIACCU.js +242 -0
- package/dist/DmrPlot-HWYITHK2.js +640 -0
- package/dist/GB-DBTMRVYH.js +1125 -0
- package/dist/GeneExpInput-DWB7OYT2.js +335 -0
- package/dist/GeneExpInput-DWB7OYT2.js.map +7 -0
- package/dist/HicApp-XPZVZXB7.js +2248 -0
- package/dist/NumBinaryEditor-M6MJYIHK.js +268 -0
- package/dist/NumBinaryEditor.unit.spec-W6MMYDAW.js +284 -0
- package/dist/NumContEditor-YRVENTS5.js +105 -0
- package/dist/NumContEditor.unit.spec-A6OH4TI7.js +167 -0
- package/dist/NumCustomBinEditor-BLBOYSCQ.js +36 -0
- package/dist/NumCustomBinEditor.unit.spec-55V5CKLB.js +282 -0
- package/dist/NumDiscreteEditor-DTRM6VL2.js +177 -0
- package/dist/NumDiscreteEditor.unit.spec-YMB6QRER.js +200 -0
- package/dist/NumRegularBinEditor-XW4SVA7S.js +36 -0
- package/dist/NumRegularBinEditor.unit.spec-VAHC3VOD.js +225 -0
- package/dist/NumSplineEditor-H22HTRFR.js +190 -0
- package/dist/NumSplineEditor.unit.spec-4JUADXZR.js +197 -0
- package/dist/NumericDensity-ECSZCQRX.js +36 -0
- package/dist/NumericDensity.unit.spec-SXXCXM4X.js +219 -0
- package/dist/NumericHandler-CMBN3FZX.js +37 -0
- package/dist/NumericHandler.unit.spec-UYTJG2Z2.js +217 -0
- package/dist/RunChart2-MVFWLXZX.js +756 -0
- package/dist/SC-BRC3J2O4.js +797 -0
- package/dist/SC-BRC3J2O4.js.map +7 -0
- package/dist/Volcano-WMNFZSX2.js +1234 -0
- package/dist/Volcano-WMNFZSX2.js.map +7 -0
- package/dist/WSIViewer-2Z636FMA.js +47971 -0
- package/dist/WSIViewer-2Z636FMA.js.map +7 -0
- package/dist/WsiSamplesPlot-LN75PND3.js +163 -0
- package/dist/adSandbox-AJ7QUDOI.js +36 -0
- package/dist/alphaGenome-PVCRXAQK.js +173 -0
- package/dist/app-DWYCAFRP.js +47 -0
- package/dist/app-RENXV7VR.js +35 -0
- package/dist/app.js +26 -26
- package/dist/bam-5G6IT6OX.js +857 -0
- package/dist/barchart-MLCCU6SU.js +45 -0
- package/dist/barchart.data-MVVKPDLE.js +22 -0
- package/dist/barchart.events-B6HQTLK2.js +45 -0
- package/dist/barchart.integration.spec-S43A7C7N.js +1675 -0
- package/dist/barchart2-QMKEN6MN.js +309 -0
- package/dist/barchart2-QMKEN6MN.js.map +7 -0
- package/dist/bars.renderer-JHCZDSM6.js +12 -0
- package/dist/block-IGBB4BJH.js +6200 -0
- package/dist/block.init-NLCYAKV4.js +36 -0
- package/dist/block.mds.expressionrank-TZWGRDY7.js +357 -0
- package/dist/block.mds.geneboxplot-OAFROYDL.js +826 -0
- package/dist/block.mds.junction-NSLXTW3D.js +1543 -0
- package/dist/block.mds.svcnv-ICPG4BW6.js +6799 -0
- package/dist/block.svg-DTFVIAAC.js +162 -0
- package/dist/block.tk.aicheck-ZIMIBWHA.js +281 -0
- package/dist/block.tk.ase-I7UNK5BK.js +363 -0
- package/dist/block.tk.bam-W7JG46RS.js +1904 -0
- package/dist/block.tk.bedgraphdot-XAQJPKGJ.js +382 -0
- package/dist/block.tk.bigwig.ui-YQOJPJSG.js +209 -0
- package/dist/block.tk.hicstraw-OWWGGCHU.js +821 -0
- package/dist/block.tk.junction-V63ZQQX6.js +2362 -0
- package/dist/block.tk.junction.textmatrixui-B7KXX7WN.js +197 -0
- package/dist/block.tk.ld-2J6CT74S.js +97 -0
- package/dist/block.tk.menu-6AQLG7PW.js +1027 -0
- package/dist/block.tk.pgv-4V6PKVCQ.js +942 -0
- package/dist/brainImaging-WRBGYLHK.js +421 -0
- package/dist/chat-X2BCTEDF.js +148 -0
- package/dist/chat-X2BCTEDF.js.map +7 -0
- package/dist/chunk-23VG37CB.js +1939 -0
- package/dist/chunk-2K5DSRBJ.js +84 -0
- package/dist/chunk-2K5DSRBJ.js.map +7 -0
- package/dist/chunk-2O6JF76T.js +121 -0
- package/dist/chunk-2VOHINOC.js +262 -0
- package/dist/chunk-2VOHINOC.js.map +7 -0
- package/dist/chunk-3AK6GP4M.js +215 -0
- package/dist/chunk-3B7EWIVB.js +153 -0
- package/dist/chunk-3B7EWIVB.js.map +7 -0
- package/dist/chunk-3JAC5CHL.js +407 -0
- package/dist/chunk-3QBZ2Y77.js +188 -0
- package/dist/chunk-3QBZ2Y77.js.map +7 -0
- package/dist/chunk-3T2PCWII.js +442 -0
- package/dist/chunk-4BTAI6HQ.js +100 -0
- package/dist/chunk-4JVNATQR.js +621 -0
- package/dist/chunk-4JVNATQR.js.map +7 -0
- package/dist/chunk-4KSU6NBP.js +194 -0
- package/dist/chunk-4ZCR6CPK.js +4964 -0
- package/dist/chunk-4ZCR6CPK.js.map +7 -0
- package/dist/chunk-5EBRF6Z7.js +68 -0
- package/dist/chunk-5MW5VMWD.js +2784 -0
- package/dist/chunk-5SMOOFRW.js +386 -0
- package/dist/chunk-5ZBEDKBD.js +158 -0
- package/dist/chunk-65YTZS3R.js +203 -0
- package/dist/chunk-6NMH6WPB.js +446 -0
- package/dist/chunk-6ZCHECOT.js +1816 -0
- package/dist/chunk-6ZCHECOT.js.map +7 -0
- package/dist/chunk-73ZT6NAT.js +34 -0
- package/dist/chunk-7HJ6H7AZ.js +2681 -0
- package/dist/chunk-7HJ6H7AZ.js.map +7 -0
- package/dist/chunk-7UHUOC6F.js +119 -0
- package/dist/chunk-AFXYPMFZ.js +117 -0
- package/dist/chunk-AMYSEKPF.js +1658 -0
- package/dist/chunk-AMYSEKPF.js.map +7 -0
- package/dist/chunk-ANGDY7VC.js +170 -0
- package/dist/chunk-AQ4OP4GR.js +39 -0
- package/dist/chunk-BL4ALBZ7.js +37 -0
- package/dist/chunk-BRCDZJBQ.js +824 -0
- package/dist/chunk-BT4OOYPT.js +280 -0
- package/dist/chunk-BT4OOYPT.js.map +7 -0
- package/dist/chunk-DDKS3MV3.js +144 -0
- package/dist/chunk-EBGX226R.js +205 -0
- package/dist/chunk-EGWVYY7K.js +264 -0
- package/dist/chunk-EGWVYY7K.js.map +7 -0
- package/dist/chunk-EHXI36HJ.js +2815 -0
- package/dist/chunk-ENP4FLOX.js +293 -0
- package/dist/chunk-FDOSJKDA.js +1209 -0
- package/dist/chunk-G6O3URDN.js +467 -0
- package/dist/chunk-HP2BASCY.js +1159 -0
- package/dist/chunk-HROKXT4K.js +14 -0
- package/dist/chunk-HTMXVOTH.js +482 -0
- package/dist/chunk-HTMXVOTH.js.map +7 -0
- package/dist/chunk-HUBO743S.js +82 -0
- package/dist/chunk-HYOEWQ5P.js +421 -0
- package/dist/chunk-I6Y4O3RR.js +839 -0
- package/dist/chunk-I6Y4O3RR.js.map +7 -0
- package/dist/chunk-I7JDV4ZC.js +226 -0
- package/dist/chunk-I7JDV4ZC.js.map +7 -0
- package/dist/chunk-IA7S4UL5.js +302 -0
- package/dist/chunk-IABWKPRK.js +534 -0
- package/dist/chunk-ICBNFAW4.js +147 -0
- package/dist/chunk-JFIOYO3M.js +272 -0
- package/dist/chunk-JMJW3ERE.js +470 -0
- package/dist/chunk-K5XPMCKP.js +135 -0
- package/dist/chunk-K7XWZSQA.js +148 -0
- package/dist/chunk-KSGA62R2.js +2878 -0
- package/dist/chunk-KSN3EVKI.js +102 -0
- package/dist/chunk-KWM6B3NL.js +477 -0
- package/dist/chunk-KWM6B3NL.js.map +7 -0
- package/dist/chunk-KYBIQBXE.js +1628 -0
- package/dist/chunk-L4QG7XZE.js +46 -0
- package/dist/chunk-L4QG7XZE.js.map +7 -0
- package/dist/chunk-L5SOHZ5V.js +229 -0
- package/dist/chunk-LMGE54CQ.js +54 -0
- package/dist/chunk-LOMVTHAM.js +95 -0
- package/dist/chunk-LSV4Z473.js +31 -0
- package/dist/chunk-LY7GD74F.js +381 -0
- package/dist/chunk-MHCTLVGE.js +26 -0
- package/dist/chunk-MSW7OS2O.js +276 -0
- package/dist/chunk-MSW7OS2O.js.map +7 -0
- package/dist/chunk-MVCGSYS2.js +50 -0
- package/dist/chunk-N2HBIQKU.js +102 -0
- package/dist/chunk-NL3DVEVX.js +158 -0
- package/dist/chunk-O4WJSZC3.js +1087 -0
- package/dist/chunk-OLUDD6EC.js +2370 -0
- package/dist/chunk-OLUDD6EC.js.map +7 -0
- package/dist/chunk-OVPVPPRG.js +55 -0
- package/dist/chunk-OYEISJSJ.js +289 -0
- package/dist/chunk-P2JDCMXW.js +4207 -0
- package/dist/chunk-PMDXCESS.js +514 -0
- package/dist/chunk-PXYYICV7.js +1271 -0
- package/dist/chunk-PZ3KIUWJ.js +56 -0
- package/dist/chunk-QEWMCAJW.js +335 -0
- package/dist/chunk-QLWDUZ5K.js +129 -0
- package/dist/chunk-QRSIID3T.js +95 -0
- package/dist/chunk-QRSIID3T.js.map +7 -0
- package/dist/chunk-ROLVOPVR.js +252 -0
- package/dist/chunk-RTS7NVCS.js +371 -0
- package/dist/chunk-ST644IDH.js +217 -0
- package/dist/chunk-TV74I3Y5.js +43 -0
- package/dist/chunk-TV74I3Y5.js.map +7 -0
- package/dist/chunk-UOOMFM7K.js +6364 -0
- package/dist/chunk-UVPAZM3G.js +52 -0
- package/dist/chunk-UWYCEYML.js +815 -0
- package/dist/chunk-VGHSLILD.js +368 -0
- package/dist/chunk-W35IOI74.js +228 -0
- package/dist/chunk-WQ3U6X4Q.js +269 -0
- package/dist/chunk-X4NI4JLQ.js +177 -0
- package/dist/chunk-XKF4KMCB.js +146 -0
- package/dist/chunk-XVDWYTJ6.js +676 -0
- package/dist/chunk-XVDWYTJ6.js.map +7 -0
- package/dist/chunk-YQVEBFGT.js +455 -0
- package/dist/chunk-YWUVCXFS.js +20271 -0
- package/dist/chunk-YWUVCXFS.js.map +7 -0
- package/dist/chunk-ZT3PB4XX.js +1150 -0
- package/dist/chunk-ZVSXHCGP.js +142 -0
- package/dist/chunk-ZYY54HBU.js +330 -0
- package/dist/chunk-ZYY54HBU.js.map +7 -0
- package/dist/condition-CZX2GSN4.js +330 -0
- package/dist/controls-BQR3WY5W.js +39 -0
- package/dist/controls.btns-3V7SNQT3.js +9 -0
- package/dist/controls.config-TAVZDHFZ.js +37 -0
- package/dist/correlation-BIWVZNC6.js +96 -0
- package/dist/cuminc-EDXOOI5R.js +1147 -0
- package/dist/cuminc.integration.spec-UZA7BDTB.js +676 -0
- package/dist/customdata.inputui-PEB4CE7J.js +287 -0
- package/dist/dataDownload-KANEHJXJ.js +328 -0
- package/dist/dataDownload.integration.spec-23WLHSWJ.js +191 -0
- package/dist/databrowser.ui-B2TNECC4.js +419 -0
- package/dist/dictionary-YOTUFVES.js +109 -0
- package/dist/dnaMethylation-TRFAZWRJ.js +36 -0
- package/dist/dnaMethylation.integration.spec-SPFZO76D.js +201 -0
- package/dist/dofetch-MH4MRMGY.js +50 -0
- package/dist/e2pca-AFVAFUJ2.js +348 -0
- package/dist/ep-4FXTLWB4.js +1254 -0
- package/dist/expclust.gdc.spec-SFOCKBLR.js +305 -0
- package/dist/facet-SY6PYSTN.js +519 -0
- package/dist/gb-JUV63QCN.js +93 -0
- package/dist/geneExpClustering-FOY77R7P.js +247 -0
- package/dist/geneExpression-AHKX57BT.js +312 -0
- package/dist/geneExpression-D2F2KVGY.js +36 -0
- package/dist/geneExpression.unit.spec-SR2BGZQL.js +100 -0
- package/dist/geneORA-VJMYI4BT.js +276 -0
- package/dist/geneVariant-LFM5SO2P.js +37 -0
- package/dist/geneVariant-OIKEV4JM.js +39 -0
- package/dist/geneVariant.integration.spec-T6BINPIN.js +196 -0
- package/dist/genefusion.ui-NLMW5XMI.js +306 -0
- package/dist/geneset-HKXFHM5K.js +197 -0
- package/dist/genomeBrowser.spec-DRYIFJLY.js +279 -0
- package/dist/grin2-GJKLNT4J.js +1031 -0
- package/dist/grin2-LGI535FF.js +1554 -0
- package/dist/gsea-Z7DSDFOA.js +45 -0
- package/dist/hierCluster-HC2B5XRR.js +61 -0
- package/dist/hierCluster-PLHVN5S3.js +57 -0
- package/dist/hierCluster.config-E3DIJWL5.js +38 -0
- package/dist/hierCluster.integration.spec-OQLPUQG4.js +393 -0
- package/dist/hierCluster.integration.spec-OQLPUQG4.js.map +7 -0
- package/dist/hierCluster.interactivity-LRNPDTEH.js +52 -0
- package/dist/hierCluster.renderers-FWOV4Q47.js +21 -0
- package/dist/imagePlot-GUXRGYQA.js +139 -0
- package/dist/importPlot-M5HGLHRO.js +8 -0
- package/dist/isoformExpression-PADLHHR5.js +38 -0
- package/dist/isoformExpression.unit.spec-5BPAL4OS.js +206 -0
- package/dist/launch.adhoc-JH6ZZFDB.js +40 -0
- package/dist/leftlabel.sample-NS2TBANH.js +257 -0
- package/dist/legacyDataset-PBCPC5I7.js +119 -0
- package/dist/lollipop-W6NOHHCP.js +166 -0
- package/dist/maf-NOHIKTUP.js +450 -0
- package/dist/maftimeline-WGWE52EF.js +591 -0
- package/dist/matrix-B6NPQFFF.js +61 -0
- package/dist/matrix-UAKRJL5A.js +56 -0
- package/dist/matrix.cells-KEIOXJQ7.js +28 -0
- package/dist/matrix.cluster-NU5CYRUT.js +9 -0
- package/dist/matrix.config-KJNJXPJJ.js +39 -0
- package/dist/matrix.data-QGCGFLD7.js +25 -0
- package/dist/matrix.dom-KGXRCCKU.js +11 -0
- package/dist/matrix.groups-HBPLZ2QX.js +26 -0
- package/dist/matrix.integration.spec-VAXIR3E6.js +3070 -0
- package/dist/matrix.interactivity-H4MCMJXU.js +40 -0
- package/dist/matrix.layout-RFKQJM5D.js +42 -0
- package/dist/matrix.legend-UCL7HM26.js +22 -0
- package/dist/matrix.renderers-7JJIC6VC.js +36 -0
- package/dist/matrix.serieses-S2TJ3E6P.js +21 -0
- package/dist/matrix.sort-CFA4UWBJ.js +27 -0
- package/dist/matrix.sort.unit.spec-MQQVWWNT.js +470 -0
- package/dist/matrix.sorterUi-FT7K5664.js +18 -0
- package/dist/matrix.sorterUi.unit.spec-LG4TI7VF.js +340 -0
- package/dist/mavb-EIZHS6F4.js +730 -0
- package/dist/mds.fimo-XVC6MI7W.js +516 -0
- package/dist/mds.samplescatterplot-PRR4TKYI.js +1548 -0
- package/dist/mds.survivalplot-3OG4Y2B6.js +481 -0
- package/dist/notify-2ROOBENL.js +234 -0
- package/dist/numericDictTermCluster-DOD66G3A.js +72 -0
- package/dist/numericDictTermCluster-DOD66G3A.js.map +7 -0
- package/dist/oncomatrix-SO6S6IIB.js +293 -0
- package/dist/oncomatrix.spec-VXTF44K5.js +446 -0
- package/dist/plot.2dvaf-JW5OJJXV.js +375 -0
- package/dist/plot.app-T3GVCFQ3.js +39 -0
- package/dist/plot.barplot-2TYP6DPI.js +100 -0
- package/dist/plot.boxplot-HOQHM7JF.js +150 -0
- package/dist/plot.brainImaging-5AI7BSD4.js +51 -0
- package/dist/plot.disco-HNNZHK5Z.js +101 -0
- package/dist/plot.dzi-4OQSO7SY.js +33 -0
- package/dist/plot.ssgq-VZTTGECT.js +137 -0
- package/dist/plot.vaf2cov-ASEELRDV.js +257 -0
- package/dist/plot.wsi-MDWYLU4R.js +36 -0
- package/dist/polar-QSY6JG4P.js +184 -0
- package/dist/polar2-FD6656VD.js +226 -0
- package/dist/profile.spec-V7EQBXT2.js +78 -0
- package/dist/profileBarchart-EIKHZAPD.js +265 -0
- package/dist/profileForms-NGFRXPFF.js +438 -0
- package/dist/profilePlot-2UFKJ2OC.js +52 -0
- package/dist/profileRadar-B2R7OV5F.js +261 -0
- package/dist/profileRadarFacility-ILC7POCI.js +261 -0
- package/dist/proteinView-AS6ZV2JT.js +758 -0
- package/dist/proteinView-AS6ZV2JT.js.map +7 -0
- package/dist/proteomeAbundance-6J5YF4V2.js +63 -0
- package/dist/proteomeAbundance-OF27N347.js +21 -0
- package/dist/qualitative-2INAKDTJ.js +220 -0
- package/dist/qualitative-CSUO2WG5.js +41 -0
- package/dist/radar2-L2HGCUYR.js +314 -0
- package/dist/radar2-L2HGCUYR.js.map +7 -0
- package/dist/radarFacility2-HXUUTRYO.js +323 -0
- package/dist/radarFacility2-HXUUTRYO.js.map +7 -0
- package/dist/regression-Y4NYGZSA.js +54 -0
- package/dist/regression.inputs-RWFIJLNF.js +46 -0
- package/dist/regression.inputs.term-QIU5SHTN.js +46 -0
- package/dist/regression.inputs.values.table-FM6QTSEV.js +43 -0
- package/dist/regression.integration.spec-YRKKU7HL.js +782 -0
- package/dist/regression.results-YUDCHUZJ.js +38 -0
- package/dist/regression.spec-G4GIIV32.js +706 -0
- package/dist/report-2N4FBR4Q.js +220 -0
- package/dist/sampleScatter.spec-UIUYO4WR.js +200 -0
- package/dist/sampleView-TOK5Y5KU.js +46 -0
- package/dist/samplelst-YW5ZS3GJ.js +109 -0
- package/dist/samplematrix-447BHSO7.js +2196 -0
- package/dist/sc-O2PL3FL2.js +84 -0
- package/dist/scatter-4DXHOWVY.js +800 -0
- package/dist/scatter.integration.spec-ZPTM3AGQ.js +1194 -0
- package/dist/scatter.integration.spec-ZPTM3AGQ.js.map +7 -0
- package/dist/selectGenomeWithTklst-3RLZFW62.js +132 -0
- package/dist/singleCellCellType-3LQJXS7H.js +36 -0
- package/dist/singleCellCellType.unit.spec-UJM72SP4.js +158 -0
- package/dist/singleCellGeneExpression-JOWJWPIQ.js +36 -0
- package/dist/singleCellGeneExpression.unit.spec-VY5CGRZH.js +151 -0
- package/dist/singleCellPlot-IVLVKOO6.js +51 -0
- package/dist/singlecell-VJJZJZF7.js +1570 -0
- package/dist/singlecell-VQJ2252L.js +84 -0
- package/dist/snp-ALMKZKL2.js +36 -0
- package/dist/snp.unit.spec-GJQBAHGQ.js +174 -0
- package/dist/snplocus-WCNCMFWZ.js +206 -0
- package/dist/spliceevent.a53ss.diagram-4Q4JF4RX.js +149 -0
- package/dist/spliceevent.exonskip.diagram-IOYOKELT.js +275 -0
- package/dist/spliceevent.noeventdiagram-77ZCOHSF.js +458 -0
- package/dist/ssGSEA-QTXXIN4K.js +36 -0
- package/dist/ssGSEA.unit.spec-LQESATT3.js +86 -0
- package/dist/summarizeCnvGeneexp-YKUQGDQF.js +161 -0
- package/dist/summarizeGeneexpSurvival-ARGG5VDC.js +106 -0
- package/dist/summarizeMutationCnv-FMZYT3EC.js +162 -0
- package/dist/summarizeMutationDiagnosis-ZX7I46SC.js +38 -0
- package/dist/summarizeMutationSurvival-RCFMTT43.js +97 -0
- package/dist/summary-QLL5YVI2.js +47 -0
- package/dist/summary.integration.spec-DHY6XCEJ.js +412 -0
- package/dist/summaryInput-ANCUQGIB.js +233 -0
- package/dist/sunburst-RDNFBOCK.js +282 -0
- package/dist/survival-BG7QV52L.js +44 -0
- package/dist/survival-WSN36OQE.js +56 -0
- package/dist/survival.integration.spec-37KAJ5IK.js +800 -0
- package/dist/svgraph-A5WGHW4S.js +1385 -0
- package/dist/svmr-CYRHHWZF.js +3840 -0
- package/dist/table-VHO7E5PI.js +198 -0
- package/dist/termCollection-E4Q6GLXN.js +177 -0
- package/dist/termCollection-HSVSH7TJ.js +36 -0
- package/dist/termCollection.unit.spec-ZCE3TUMS.js +206 -0
- package/dist/tk-GPRHDN4K.js +44 -0
- package/dist/tp.ui-LTUA3FSL.js +1457 -0
- package/dist/tvs.density-BJK23JYJ.js +18 -0
- package/dist/tvs.dt-G43PAAKD.js +37 -0
- package/dist/tvs.dtcnv.categorical-UHDS2TGZ.js +38 -0
- package/dist/tvs.dtcnv.continuous-ZNGYQKTD.js +70 -0
- package/dist/tvs.dtfusion-JBEEUDUS.js +38 -0
- package/dist/tvs.dtsnvindel-XXN5Q7RN.js +38 -0
- package/dist/tvs.dtsv-MO6L7HHV.js +38 -0
- package/dist/tvs.numeric-MJZMNYRG.js +21 -0
- package/dist/tvs.samplelst-HKY6UUJM.js +102 -0
- package/dist/tvs.termCollection-TY6FPL25.js +157 -0
- package/dist/violin-YHE3WSGR.js +44 -0
- package/dist/violin.integration.spec-F2UD7BHC.js +1423 -0
- package/dist/violin.integration.spec-F2UD7BHC.js.map +7 -0
- package/dist/violin.interactivity-LVDTDEPQ.js +36 -0
- package/dist/violin.renderer-IIEIUGRI.js +38 -0
- package/dist/vocabulary-WQRYXBRO.js +39 -0
- package/dist/vocabulary-WQRYXBRO.js.map +7 -0
- package/package.json +3 -3
- package/dist/2dmaf-RWFDP5I4.js +0 -1371
- package/dist/AIProjectAdmin-NJ3P2NQU.js +0 -830
- package/dist/AppHeader-5KCPR7SA.js +0 -833
- package/dist/BoxPlot-DZ3ZWEW5.js +0 -1217
- package/dist/CorrelationVolcano-V33RYSUZ.js +0 -617
- package/dist/DE-5KHGE5V4.js +0 -93
- package/dist/DEinput-X2ZMSFS2.js +0 -297
- package/dist/DifferentialAnalysis-LF2M62HM.js +0 -241
- package/dist/DifferentialAnalysis-LF2M62HM.js.map +0 -7
- package/dist/Disco-7W3PKSOG.js +0 -3235
- package/dist/Disco.UI-RX3ERCPR.js +0 -242
- package/dist/DmrPlot-2K5VRZ7V.js +0 -640
- package/dist/GB-YUUNR7N7.js +0 -1125
- package/dist/GeneExpInput-2LJVYQT5.js +0 -332
- package/dist/GeneExpInput-2LJVYQT5.js.map +0 -7
- package/dist/HicApp-HINHH2DY.js +0 -2248
- package/dist/NumBinaryEditor-SEHOR46J.js +0 -268
- package/dist/NumBinaryEditor.unit.spec-VQDE54BT.js +0 -284
- package/dist/NumContEditor-H5SVEBR2.js +0 -105
- package/dist/NumContEditor.unit.spec-V24LQZRT.js +0 -167
- package/dist/NumCustomBinEditor-Z5MG3NPH.js +0 -36
- package/dist/NumCustomBinEditor.unit.spec-KDM5KUVI.js +0 -282
- package/dist/NumDiscreteEditor-H3RCSDHI.js +0 -177
- package/dist/NumDiscreteEditor.unit.spec-C7EUQBUW.js +0 -200
- package/dist/NumRegularBinEditor-FJME4XN4.js +0 -36
- package/dist/NumRegularBinEditor.unit.spec-BEOATSFC.js +0 -225
- package/dist/NumSplineEditor-BYN3ZL7B.js +0 -190
- package/dist/NumSplineEditor.unit.spec-MYWSBKIJ.js +0 -197
- package/dist/NumericDensity-YIYYFZ4F.js +0 -36
- package/dist/NumericDensity.unit.spec-2XDJGWF3.js +0 -219
- package/dist/NumericHandler-RFDW5QVQ.js +0 -37
- package/dist/NumericHandler.unit.spec-FNVY3AF5.js +0 -217
- package/dist/RunChart2-VEJQHFCT.js +0 -756
- package/dist/SC-5GPO326X.js +0 -732
- package/dist/SC-5GPO326X.js.map +0 -7
- package/dist/Volcano-HXMAGR3R.js +0 -1203
- package/dist/Volcano-HXMAGR3R.js.map +0 -7
- package/dist/WSIViewer-I6WX3WU2.js +0 -47974
- package/dist/WSIViewer-I6WX3WU2.js.map +0 -7
- package/dist/WsiSamplesPlot-WHB5EXCB.js +0 -163
- package/dist/adSandbox-B35FAZJ7.js +0 -36
- package/dist/alphaGenome-EP27CAV2.js +0 -173
- package/dist/app-QUDZ4CFB.js +0 -47
- package/dist/app-W3BN75D3.js +0 -35
- package/dist/bam-ZN3L6BY5.js +0 -857
- package/dist/barchart-TNLMNY43.js +0 -45
- package/dist/barchart.data-EYZ3W4BQ.js +0 -22
- package/dist/barchart.events-CQ6AYMKE.js +0 -45
- package/dist/barchart.integration.spec-WEVE3VOB.js +0 -1675
- package/dist/barchart2-J7POUY6P.js +0 -309
- package/dist/barchart2-J7POUY6P.js.map +0 -7
- package/dist/bars.renderer-S7A7I6BQ.js +0 -12
- package/dist/block-2O7NOZN4.js +0 -6200
- package/dist/block.init-EODYNLUI.js +0 -36
- package/dist/block.mds.expressionrank-436I4RXC.js +0 -357
- package/dist/block.mds.geneboxplot-DDSL6AIO.js +0 -826
- package/dist/block.mds.junction-N2WB6JRM.js +0 -1543
- package/dist/block.mds.svcnv-Y77HHZ34.js +0 -6799
- package/dist/block.svg-A2XQKNMW.js +0 -162
- package/dist/block.tk.aicheck-LICGBXMN.js +0 -281
- package/dist/block.tk.ase-QDQZYSOB.js +0 -363
- package/dist/block.tk.bam-JHKAW4OL.js +0 -1904
- package/dist/block.tk.bedgraphdot-XTYREEZW.js +0 -382
- package/dist/block.tk.bigwig.ui-3GBKZKY2.js +0 -209
- package/dist/block.tk.hicstraw-NUZH6KF3.js +0 -821
- package/dist/block.tk.junction-CFJELBHC.js +0 -2362
- package/dist/block.tk.junction.textmatrixui-MZ2BQXQ5.js +0 -197
- package/dist/block.tk.ld-7ZJRJFXY.js +0 -97
- package/dist/block.tk.menu-GC2DOKSC.js +0 -1027
- package/dist/block.tk.pgv-TRQPJAZB.js +0 -942
- package/dist/brainImaging-A7KXLJ7H.js +0 -421
- package/dist/chat-NAYKP3GT.js +0 -148
- package/dist/chat-NAYKP3GT.js.map +0 -7
- package/dist/chunk-2LSQTG2W.js +0 -261
- package/dist/chunk-2LSQTG2W.js.map +0 -7
- package/dist/chunk-2QGWWYYS.js +0 -102
- package/dist/chunk-2VNTM6TR.js +0 -129
- package/dist/chunk-4X6J6CZA.js +0 -107
- package/dist/chunk-4X6J6CZA.js.map +0 -7
- package/dist/chunk-54ACDCRS.js +0 -170
- package/dist/chunk-54FTA4PC.js +0 -95
- package/dist/chunk-57GCRPC4.js +0 -442
- package/dist/chunk-5MHACDQU.js +0 -824
- package/dist/chunk-5OHXYXLD.js +0 -46
- package/dist/chunk-5OHXYXLD.js.map +0 -7
- package/dist/chunk-5ONLXNNE.js +0 -56
- package/dist/chunk-5UG7ZKPU.js +0 -135
- package/dist/chunk-6NAYFS4V.js +0 -4207
- package/dist/chunk-6Y4QZ4AY.js +0 -335
- package/dist/chunk-762BT2DY.js +0 -470
- package/dist/chunk-7N3Q25KC.js +0 -26
- package/dist/chunk-A46S4C2T.js +0 -2784
- package/dist/chunk-A5TSPTYC.js +0 -144
- package/dist/chunk-A6TQGNDQ.js +0 -421
- package/dist/chunk-AIZRXZG4.js +0 -102
- package/dist/chunk-AU23U4BS.js +0 -302
- package/dist/chunk-B2F23ESD.js +0 -475
- package/dist/chunk-B2F23ESD.js.map +0 -7
- package/dist/chunk-B3O2PC4B.js +0 -203
- package/dist/chunk-BDDMS2FF.js +0 -514
- package/dist/chunk-BEWDIM6H.js +0 -42
- package/dist/chunk-BEWDIM6H.js.map +0 -7
- package/dist/chunk-BSLJVK4K.js +0 -6364
- package/dist/chunk-CJLWB4HZ.js +0 -1939
- package/dist/chunk-CUSG5PZE.js +0 -68
- package/dist/chunk-D6JMBLDW.js +0 -368
- package/dist/chunk-DONWY7TP.js +0 -39
- package/dist/chunk-EHYHXP42.js +0 -37
- package/dist/chunk-EWSI62JW.js +0 -1271
- package/dist/chunk-F6V4AYWP.js +0 -177
- package/dist/chunk-FGMPKWT5.js +0 -371
- package/dist/chunk-G2X7JHYC.js +0 -4961
- package/dist/chunk-G2X7JHYC.js.map +0 -7
- package/dist/chunk-GCXNR5FP.js +0 -229
- package/dist/chunk-GMDQIP3M.js +0 -31
- package/dist/chunk-GXINX3WK.js +0 -281
- package/dist/chunk-GXINX3WK.js.map +0 -7
- package/dist/chunk-HDTUZBHC.js +0 -158
- package/dist/chunk-HYZG6OPC.js +0 -467
- package/dist/chunk-I2M62STM.js +0 -276
- package/dist/chunk-I2M62STM.js.map +0 -7
- package/dist/chunk-I45NHOFY.js +0 -1209
- package/dist/chunk-IBZGIOXS.js +0 -1150
- package/dist/chunk-IE56TWZS.js +0 -1159
- package/dist/chunk-IH7ILDJS.js +0 -2878
- package/dist/chunk-IQIXGTQV.js +0 -84
- package/dist/chunk-IQIXGTQV.js.map +0 -7
- package/dist/chunk-J77Y3KAI.js +0 -117
- package/dist/chunk-JKDUB36U.js +0 -407
- package/dist/chunk-JOT4WDJE.js +0 -815
- package/dist/chunk-JTX4Z2DL.js +0 -274
- package/dist/chunk-JTX4Z2DL.js.map +0 -7
- package/dist/chunk-KBDY6GE3.js +0 -446
- package/dist/chunk-KBYRXJ6Y.js +0 -20639
- package/dist/chunk-KBYRXJ6Y.js.map +0 -7
- package/dist/chunk-KLV7RCJM.js +0 -148
- package/dist/chunk-KQKC2KYW.js +0 -2815
- package/dist/chunk-KZFOWI7N.js +0 -52
- package/dist/chunk-LJS24D4U.js +0 -50
- package/dist/chunk-LKFYRQOH.js +0 -226
- package/dist/chunk-LKFYRQOH.js.map +0 -7
- package/dist/chunk-LXQ6DLAR.js +0 -217
- package/dist/chunk-M3EBH2WK.js +0 -194
- package/dist/chunk-MFLKXGQC.js +0 -228
- package/dist/chunk-MHTDDCB7.js +0 -142
- package/dist/chunk-NDWTN4U5.js +0 -838
- package/dist/chunk-NDWTN4U5.js.map +0 -7
- package/dist/chunk-ODEZHSWS.js +0 -205
- package/dist/chunk-OTCYJP7G.js +0 -119
- package/dist/chunk-PKJUCJOU.js +0 -2327
- package/dist/chunk-PKJUCJOU.js.map +0 -7
- package/dist/chunk-Q34VOEG6.js +0 -54
- package/dist/chunk-Q4FZUHZW.js +0 -2672
- package/dist/chunk-Q4FZUHZW.js.map +0 -7
- package/dist/chunk-QA52MW7K.js +0 -480
- package/dist/chunk-QA52MW7K.js.map +0 -7
- package/dist/chunk-QJ5J64KI.js +0 -100
- package/dist/chunk-QPYRMBI5.js +0 -146
- package/dist/chunk-RCYTUKAJ.js +0 -1745
- package/dist/chunk-RCYTUKAJ.js.map +0 -7
- package/dist/chunk-S7NLVFLS.js +0 -215
- package/dist/chunk-SCC44SJK.js +0 -386
- package/dist/chunk-SEEYV6P2.js +0 -1628
- package/dist/chunk-SOED2SLH.js +0 -257
- package/dist/chunk-SOED2SLH.js.map +0 -7
- package/dist/chunk-T5CFDKE7.js +0 -14
- package/dist/chunk-TBLWSWGI.js +0 -629
- package/dist/chunk-TBLWSWGI.js.map +0 -7
- package/dist/chunk-TE3DK3A6.js +0 -147
- package/dist/chunk-TRXU2NWS.js +0 -1087
- package/dist/chunk-UDASC4UW.js +0 -34
- package/dist/chunk-UFDQ2R2Q.js +0 -534
- package/dist/chunk-UG4OP5YA.js +0 -55
- package/dist/chunk-UIHDDLI6.js +0 -158
- package/dist/chunk-UWX7W22M.js +0 -121
- package/dist/chunk-VEXSAWKT.js +0 -455
- package/dist/chunk-VG7HDHJ7.js +0 -92
- package/dist/chunk-VG7HDHJ7.js.map +0 -7
- package/dist/chunk-VWPEKFSU.js +0 -615
- package/dist/chunk-VWPEKFSU.js.map +0 -7
- package/dist/chunk-VYIO7T6J.js +0 -82
- package/dist/chunk-W3SYT2EY.js +0 -289
- package/dist/chunk-XRVBHNCW.js +0 -1561
- package/dist/chunk-XRVBHNCW.js.map +0 -7
- package/dist/chunk-Y7S3EY6T.js +0 -182
- package/dist/chunk-Y7S3EY6T.js.map +0 -7
- package/dist/chunk-YA73ETIT.js +0 -252
- package/dist/chunk-YDF73E2J.js +0 -272
- package/dist/chunk-YK5NFMHR.js +0 -269
- package/dist/chunk-ZIAGMGMS.js +0 -381
- package/dist/chunk-ZZZMLJLP.js +0 -293
- package/dist/condition-UCLHJLCK.js +0 -330
- package/dist/controls-IQGNIWUP.js +0 -39
- package/dist/controls.btns-RSGATX6Y.js +0 -9
- package/dist/controls.config-QJ5AO7RR.js +0 -37
- package/dist/correlation-CRYKJGNT.js +0 -96
- package/dist/cuminc-LBSHAUJ4.js +0 -1147
- package/dist/cuminc.integration.spec-M7F2IIB7.js +0 -676
- package/dist/customdata.inputui-CJ6R7SEC.js +0 -287
- package/dist/dataDownload-4OHGMZMB.js +0 -328
- package/dist/dataDownload.integration.spec-CK25GOZY.js +0 -191
- package/dist/databrowser.ui-T7CYFJ4E.js +0 -419
- package/dist/dictionary-INTI6FAG.js +0 -109
- package/dist/dnaMethylation-C3FBLWQB.js +0 -36
- package/dist/dnaMethylation.integration.spec-VVNUZBBX.js +0 -201
- package/dist/e2pca-HZOROAVL.js +0 -348
- package/dist/ep-NFVLYFPZ.js +0 -1254
- package/dist/expclust.gdc.spec-JAJJ6CET.js +0 -305
- package/dist/facet-TSWE5JDV.js +0 -519
- package/dist/gb-LHSABYXO.js +0 -93
- package/dist/geneExpClustering-66S735EE.js +0 -247
- package/dist/geneExpression-4WEYCEZV.js +0 -312
- package/dist/geneExpression-IM6Z5LTY.js +0 -36
- package/dist/geneExpression.unit.spec-ZLQEQR7Q.js +0 -100
- package/dist/geneORA-FIZVXCWX.js +0 -276
- package/dist/geneVariant-DZBGTDCH.js +0 -37
- package/dist/geneVariant-UPU45VOI.js +0 -39
- package/dist/geneVariant.integration.spec-YB5IKH5W.js +0 -196
- package/dist/genefusion.ui-TUVA4P5Z.js +0 -306
- package/dist/geneset-ZMKTTFSC.js +0 -197
- package/dist/genomeBrowser.spec-FOI35XYW.js +0 -279
- package/dist/grin2-P2UO22D2.js +0 -1031
- package/dist/grin2-UI44QTJH.js +0 -1554
- package/dist/gsea-N5SCG3E6.js +0 -45
- package/dist/hierCluster-BP5PCDPC.js +0 -61
- package/dist/hierCluster-QWISWLUI.js +0 -57
- package/dist/hierCluster.config-FDX4Y3ZO.js +0 -38
- package/dist/hierCluster.integration.spec-WYILCAUB.js +0 -374
- package/dist/hierCluster.integration.spec-WYILCAUB.js.map +0 -7
- package/dist/hierCluster.interactivity-JUXO3332.js +0 -52
- package/dist/hierCluster.renderers-FI3N2XDZ.js +0 -21
- package/dist/imagePlot-SFH72544.js +0 -139
- package/dist/importPlot-67KZTZR6.js +0 -8
- package/dist/isoformExpression-PJQ5Z2WL.js +0 -38
- package/dist/isoformExpression.unit.spec-X55G6VZQ.js +0 -206
- package/dist/launch.adhoc-ZO5HCSMH.js +0 -40
- package/dist/leftlabel.sample-Y4LPXV3X.js +0 -257
- package/dist/legacyDataset-QRSNRVUA.js +0 -119
- package/dist/lollipop-DUAD2HN5.js +0 -166
- package/dist/maf-BLCYUOD6.js +0 -450
- package/dist/maftimeline-HWJLWEQ4.js +0 -591
- package/dist/matrix-FQ3J2TBL.js +0 -61
- package/dist/matrix-SPTIZ3UF.js +0 -56
- package/dist/matrix.cells-7BOE7C3Y.js +0 -28
- package/dist/matrix.cluster-43E3HCDL.js +0 -9
- package/dist/matrix.config-LU5LMDBS.js +0 -39
- package/dist/matrix.data-YTSSULKG.js +0 -25
- package/dist/matrix.dom-6QL3AJMW.js +0 -11
- package/dist/matrix.groups-NGJ276VG.js +0 -26
- package/dist/matrix.integration.spec-6XXGVAPI.js +0 -3070
- package/dist/matrix.interactivity-OXCQ3FCE.js +0 -40
- package/dist/matrix.layout-QBVYWCBC.js +0 -42
- package/dist/matrix.legend-AGTC5JPS.js +0 -22
- package/dist/matrix.renderers-PHH4HZTJ.js +0 -36
- package/dist/matrix.serieses-AXFWSUHX.js +0 -21
- package/dist/matrix.sort-6VF7VNFX.js +0 -27
- package/dist/matrix.sort.unit.spec-UV22BJDG.js +0 -470
- package/dist/matrix.sorterUi-UE7CBIUP.js +0 -18
- package/dist/matrix.sorterUi.unit.spec-GMAT2FLL.js +0 -340
- package/dist/mavb-LE7BAFCL.js +0 -730
- package/dist/mds.fimo-3YYY245N.js +0 -516
- package/dist/mds.samplescatterplot-22ZB4TEO.js +0 -1548
- package/dist/mds.survivalplot-DTE3OUTW.js +0 -481
- package/dist/notify-CJGEVJGO.js +0 -234
- package/dist/oncomatrix-RRJWFDVF.js +0 -293
- package/dist/oncomatrix.spec-5VJ4C6VJ.js +0 -446
- package/dist/plot.2dvaf-6Z6SJ7FI.js +0 -375
- package/dist/plot.app-WOJDWDPZ.js +0 -39
- package/dist/plot.barplot-II27ZDWD.js +0 -100
- package/dist/plot.boxplot-UFQWYLTW.js +0 -150
- package/dist/plot.brainImaging-KZ3HFEP4.js +0 -51
- package/dist/plot.disco-LH6OHLKL.js +0 -101
- package/dist/plot.dzi-2D26EYQP.js +0 -33
- package/dist/plot.ssgq-AJNIOPA2.js +0 -137
- package/dist/plot.vaf2cov-VQKJSC3M.js +0 -257
- package/dist/plot.wsi-OZHY6PQR.js +0 -36
- package/dist/polar-DVTFSBRH.js +0 -184
- package/dist/polar2-2YDTT6IV.js +0 -226
- package/dist/profile.spec-KSZVGAE5.js +0 -78
- package/dist/profileBarchart-7OM2I6AI.js +0 -265
- package/dist/profileForms-C62KOXSL.js +0 -438
- package/dist/profilePlot-65PFUYRZ.js +0 -52
- package/dist/profileRadar-TD6M6FE2.js +0 -261
- package/dist/profileRadarFacility-CLWYZJSV.js +0 -261
- package/dist/proteinView-NRKT3C7H.js +0 -663
- package/dist/proteinView-NRKT3C7H.js.map +0 -7
- package/dist/proteomeAbundance-3UZIGZWO.js +0 -21
- package/dist/proteomeAbundance-6QXRHIJD.js +0 -63
- package/dist/qualitative-7XEX7QZP.js +0 -220
- package/dist/qualitative-MESSRM45.js +0 -41
- package/dist/regression-XIHVK4ZG.js +0 -54
- package/dist/regression.inputs-GI6FWC5D.js +0 -46
- package/dist/regression.inputs.term-FEK2O6DJ.js +0 -46
- package/dist/regression.inputs.values.table-GGD24KI5.js +0 -43
- package/dist/regression.integration.spec-KM7ZNOLR.js +0 -782
- package/dist/regression.results-CLTDKTFL.js +0 -38
- package/dist/regression.spec-O7BT7EZK.js +0 -706
- package/dist/report-QIQKKQC7.js +0 -220
- package/dist/sampleScatter.spec-YPOEQKHM.js +0 -200
- package/dist/sampleView-SHDNYDPJ.js +0 -46
- package/dist/samplelst-IKDCCQX3.js +0 -109
- package/dist/samplematrix-6GNNJCTO.js +0 -2196
- package/dist/sc-BHCYSYVH.js +0 -84
- package/dist/scatter-ORGQK7HR.js +0 -800
- package/dist/scatter.integration.spec-TWRTLYIN.js +0 -1194
- package/dist/scatter.integration.spec-TWRTLYIN.js.map +0 -7
- package/dist/selectGenomeWithTklst-CUOMKNIF.js +0 -132
- package/dist/singleCellCellType-6JAY4U2O.js +0 -36
- package/dist/singleCellCellType.unit.spec-4ATH3CHQ.js +0 -158
- package/dist/singleCellGeneExpression-CJS6IUYX.js +0 -36
- package/dist/singleCellGeneExpression.unit.spec-36E4SRKB.js +0 -151
- package/dist/singleCellPlot-FI6IDYGC.js +0 -51
- package/dist/singlecell-A6N6G7E5.js +0 -1570
- package/dist/singlecell-IMKGN5JV.js +0 -84
- package/dist/snp-EL6PPZPW.js +0 -36
- package/dist/snp.unit.spec-SECWXZH6.js +0 -174
- package/dist/snplocus-65MQZRFI.js +0 -206
- package/dist/spliceevent.a53ss.diagram-TST7ZXLO.js +0 -149
- package/dist/spliceevent.exonskip.diagram-LKZPWUIB.js +0 -275
- package/dist/spliceevent.noeventdiagram-DFITYWZC.js +0 -458
- package/dist/ssGSEA-AVDDOL5T.js +0 -36
- package/dist/ssGSEA.unit.spec-OPGA35IG.js +0 -86
- package/dist/summarizeCnvGeneexp-BWT4VWD7.js +0 -161
- package/dist/summarizeGeneexpSurvival-Q2SG2GHX.js +0 -106
- package/dist/summarizeMutationCnv-4CHIHM75.js +0 -162
- package/dist/summarizeMutationDiagnosis-74XKVVPZ.js +0 -38
- package/dist/summarizeMutationSurvival-EZ5DIYNE.js +0 -97
- package/dist/summary-ZS354SRJ.js +0 -47
- package/dist/summary.integration.spec-ULSBOTVJ.js +0 -412
- package/dist/summaryInput-WF4EWMAW.js +0 -233
- package/dist/sunburst-GU3NCPCJ.js +0 -282
- package/dist/survival-642RIFRE.js +0 -44
- package/dist/survival-OVTHCWLW.js +0 -56
- package/dist/survival.integration.spec-GVQHKZJI.js +0 -800
- package/dist/svgraph-HBHUQ4AX.js +0 -1385
- package/dist/svmr-FYNIJ7JC.js +0 -3840
- package/dist/table-3ME3S634.js +0 -198
- package/dist/termCollection-UAVQQZZ4.js +0 -177
- package/dist/termCollection-UGN3OJFW.js +0 -36
- package/dist/termCollection.unit.spec-5IEDREFJ.js +0 -206
- package/dist/tk-K2F7FHHG.js +0 -44
- package/dist/tp.ui-3YNDBTSW.js +0 -1457
- package/dist/tvs.density-AQ5GD437.js +0 -18
- package/dist/tvs.dt-4KUWV64G.js +0 -37
- package/dist/tvs.dtcnv.categorical-JTQT3H3F.js +0 -38
- package/dist/tvs.dtcnv.continuous-Z67YBYLM.js +0 -70
- package/dist/tvs.dtfusion-VSHNVYPD.js +0 -38
- package/dist/tvs.dtsnvindel-5EUPENLI.js +0 -38
- package/dist/tvs.dtsv-NYUF3ACM.js +0 -38
- package/dist/tvs.numeric-ZN2R7BH3.js +0 -21
- package/dist/tvs.samplelst-52YSDBZH.js +0 -102
- package/dist/tvs.termCollection-O3B3MABA.js +0 -157
- package/dist/violin-TA7L6VWE.js +0 -44
- package/dist/violin.integration.spec-NSAFRNSC.js +0 -1423
- package/dist/violin.integration.spec-NSAFRNSC.js.map +0 -7
- package/dist/violin.interactivity-G6TNI6ZJ.js +0 -36
- package/dist/violin.renderer-J4ICXAI3.js +0 -38
- package/dist/vocabulary-GZTQJUCP.js +0 -39
- /package/dist/{2dmaf-RWFDP5I4.js.map → 2dmaf-X7LATQT7.js.map} +0 -0
- /package/dist/{AIProjectAdmin-NJ3P2NQU.js.map → AIProjectAdmin-GUBKURGO.js.map} +0 -0
- /package/dist/{AppHeader-5KCPR7SA.js.map → AppHeader-RDOFP322.js.map} +0 -0
- /package/dist/{BoxPlot-DZ3ZWEW5.js.map → BoxPlot-AZF2EMGQ.js.map} +0 -0
- /package/dist/{CorrelationVolcano-V33RYSUZ.js.map → CorrelationVolcano-VXW35SXU.js.map} +0 -0
- /package/dist/{DE-5KHGE5V4.js.map → DE-NLGMZ44O.js.map} +0 -0
- /package/dist/{DEinput-X2ZMSFS2.js.map → DEinput-OJ7P4UMP.js.map} +0 -0
- /package/dist/{Disco-7W3PKSOG.js.map → Disco-DX4S44SI.js.map} +0 -0
- /package/dist/{Disco.UI-RX3ERCPR.js.map → Disco.UI-5FYIACCU.js.map} +0 -0
- /package/dist/{DmrPlot-2K5VRZ7V.js.map → DmrPlot-HWYITHK2.js.map} +0 -0
- /package/dist/{GB-YUUNR7N7.js.map → GB-DBTMRVYH.js.map} +0 -0
- /package/dist/{HicApp-HINHH2DY.js.map → HicApp-XPZVZXB7.js.map} +0 -0
- /package/dist/{NumBinaryEditor-SEHOR46J.js.map → NumBinaryEditor-M6MJYIHK.js.map} +0 -0
- /package/dist/{NumBinaryEditor.unit.spec-VQDE54BT.js.map → NumBinaryEditor.unit.spec-W6MMYDAW.js.map} +0 -0
- /package/dist/{NumContEditor-H5SVEBR2.js.map → NumContEditor-YRVENTS5.js.map} +0 -0
- /package/dist/{NumContEditor.unit.spec-V24LQZRT.js.map → NumContEditor.unit.spec-A6OH4TI7.js.map} +0 -0
- /package/dist/{NumCustomBinEditor-Z5MG3NPH.js.map → NumCustomBinEditor-BLBOYSCQ.js.map} +0 -0
- /package/dist/{NumCustomBinEditor.unit.spec-KDM5KUVI.js.map → NumCustomBinEditor.unit.spec-55V5CKLB.js.map} +0 -0
- /package/dist/{NumDiscreteEditor-H3RCSDHI.js.map → NumDiscreteEditor-DTRM6VL2.js.map} +0 -0
- /package/dist/{NumDiscreteEditor.unit.spec-C7EUQBUW.js.map → NumDiscreteEditor.unit.spec-YMB6QRER.js.map} +0 -0
- /package/dist/{NumRegularBinEditor-FJME4XN4.js.map → NumRegularBinEditor-XW4SVA7S.js.map} +0 -0
- /package/dist/{NumRegularBinEditor.unit.spec-BEOATSFC.js.map → NumRegularBinEditor.unit.spec-VAHC3VOD.js.map} +0 -0
- /package/dist/{NumSplineEditor-BYN3ZL7B.js.map → NumSplineEditor-H22HTRFR.js.map} +0 -0
- /package/dist/{NumSplineEditor.unit.spec-MYWSBKIJ.js.map → NumSplineEditor.unit.spec-4JUADXZR.js.map} +0 -0
- /package/dist/{NumericDensity-YIYYFZ4F.js.map → NumericDensity-ECSZCQRX.js.map} +0 -0
- /package/dist/{NumericDensity.unit.spec-2XDJGWF3.js.map → NumericDensity.unit.spec-SXXCXM4X.js.map} +0 -0
- /package/dist/{NumericHandler-RFDW5QVQ.js.map → NumericHandler-CMBN3FZX.js.map} +0 -0
- /package/dist/{NumericHandler.unit.spec-FNVY3AF5.js.map → NumericHandler.unit.spec-UYTJG2Z2.js.map} +0 -0
- /package/dist/{RunChart2-VEJQHFCT.js.map → RunChart2-MVFWLXZX.js.map} +0 -0
- /package/dist/{WsiSamplesPlot-WHB5EXCB.js.map → WsiSamplesPlot-LN75PND3.js.map} +0 -0
- /package/dist/{adSandbox-B35FAZJ7.js.map → adSandbox-AJ7QUDOI.js.map} +0 -0
- /package/dist/{alphaGenome-EP27CAV2.js.map → alphaGenome-PVCRXAQK.js.map} +0 -0
- /package/dist/{app-QUDZ4CFB.js.map → app-DWYCAFRP.js.map} +0 -0
- /package/dist/{app-W3BN75D3.js.map → app-RENXV7VR.js.map} +0 -0
- /package/dist/{bam-ZN3L6BY5.js.map → bam-5G6IT6OX.js.map} +0 -0
- /package/dist/{barchart-TNLMNY43.js.map → barchart-MLCCU6SU.js.map} +0 -0
- /package/dist/{barchart.data-EYZ3W4BQ.js.map → barchart.data-MVVKPDLE.js.map} +0 -0
- /package/dist/{barchart.events-CQ6AYMKE.js.map → barchart.events-B6HQTLK2.js.map} +0 -0
- /package/dist/{barchart.integration.spec-WEVE3VOB.js.map → barchart.integration.spec-S43A7C7N.js.map} +0 -0
- /package/dist/{bars.renderer-S7A7I6BQ.js.map → bars.renderer-JHCZDSM6.js.map} +0 -0
- /package/dist/{block-2O7NOZN4.js.map → block-IGBB4BJH.js.map} +0 -0
- /package/dist/{block.init-EODYNLUI.js.map → block.init-NLCYAKV4.js.map} +0 -0
- /package/dist/{block.mds.expressionrank-436I4RXC.js.map → block.mds.expressionrank-TZWGRDY7.js.map} +0 -0
- /package/dist/{block.mds.geneboxplot-DDSL6AIO.js.map → block.mds.geneboxplot-OAFROYDL.js.map} +0 -0
- /package/dist/{block.mds.junction-N2WB6JRM.js.map → block.mds.junction-NSLXTW3D.js.map} +0 -0
- /package/dist/{block.mds.svcnv-Y77HHZ34.js.map → block.mds.svcnv-ICPG4BW6.js.map} +0 -0
- /package/dist/{block.svg-A2XQKNMW.js.map → block.svg-DTFVIAAC.js.map} +0 -0
- /package/dist/{block.tk.aicheck-LICGBXMN.js.map → block.tk.aicheck-ZIMIBWHA.js.map} +0 -0
- /package/dist/{block.tk.ase-QDQZYSOB.js.map → block.tk.ase-I7UNK5BK.js.map} +0 -0
- /package/dist/{block.tk.bam-JHKAW4OL.js.map → block.tk.bam-W7JG46RS.js.map} +0 -0
- /package/dist/{block.tk.bedgraphdot-XTYREEZW.js.map → block.tk.bedgraphdot-XAQJPKGJ.js.map} +0 -0
- /package/dist/{block.tk.bigwig.ui-3GBKZKY2.js.map → block.tk.bigwig.ui-YQOJPJSG.js.map} +0 -0
- /package/dist/{block.tk.hicstraw-NUZH6KF3.js.map → block.tk.hicstraw-OWWGGCHU.js.map} +0 -0
- /package/dist/{block.tk.junction-CFJELBHC.js.map → block.tk.junction-V63ZQQX6.js.map} +0 -0
- /package/dist/{block.tk.junction.textmatrixui-MZ2BQXQ5.js.map → block.tk.junction.textmatrixui-B7KXX7WN.js.map} +0 -0
- /package/dist/{block.tk.ld-7ZJRJFXY.js.map → block.tk.ld-2J6CT74S.js.map} +0 -0
- /package/dist/{block.tk.menu-GC2DOKSC.js.map → block.tk.menu-6AQLG7PW.js.map} +0 -0
- /package/dist/{block.tk.pgv-TRQPJAZB.js.map → block.tk.pgv-4V6PKVCQ.js.map} +0 -0
- /package/dist/{brainImaging-A7KXLJ7H.js.map → brainImaging-WRBGYLHK.js.map} +0 -0
- /package/dist/{chunk-CJLWB4HZ.js.map → chunk-23VG37CB.js.map} +0 -0
- /package/dist/{chunk-UWX7W22M.js.map → chunk-2O6JF76T.js.map} +0 -0
- /package/dist/{chunk-S7NLVFLS.js.map → chunk-3AK6GP4M.js.map} +0 -0
- /package/dist/{chunk-JKDUB36U.js.map → chunk-3JAC5CHL.js.map} +0 -0
- /package/dist/{chunk-57GCRPC4.js.map → chunk-3T2PCWII.js.map} +0 -0
- /package/dist/{chunk-QJ5J64KI.js.map → chunk-4BTAI6HQ.js.map} +0 -0
- /package/dist/{chunk-M3EBH2WK.js.map → chunk-4KSU6NBP.js.map} +0 -0
- /package/dist/{chunk-CUSG5PZE.js.map → chunk-5EBRF6Z7.js.map} +0 -0
- /package/dist/{chunk-A46S4C2T.js.map → chunk-5MW5VMWD.js.map} +0 -0
- /package/dist/{chunk-SCC44SJK.js.map → chunk-5SMOOFRW.js.map} +0 -0
- /package/dist/{chunk-UIHDDLI6.js.map → chunk-5ZBEDKBD.js.map} +0 -0
- /package/dist/{chunk-B3O2PC4B.js.map → chunk-65YTZS3R.js.map} +0 -0
- /package/dist/{chunk-KBDY6GE3.js.map → chunk-6NMH6WPB.js.map} +0 -0
- /package/dist/{chunk-UDASC4UW.js.map → chunk-73ZT6NAT.js.map} +0 -0
- /package/dist/{chunk-OTCYJP7G.js.map → chunk-7UHUOC6F.js.map} +0 -0
- /package/dist/{chunk-J77Y3KAI.js.map → chunk-AFXYPMFZ.js.map} +0 -0
- /package/dist/{chunk-54ACDCRS.js.map → chunk-ANGDY7VC.js.map} +0 -0
- /package/dist/{chunk-DONWY7TP.js.map → chunk-AQ4OP4GR.js.map} +0 -0
- /package/dist/{chunk-EHYHXP42.js.map → chunk-BL4ALBZ7.js.map} +0 -0
- /package/dist/{chunk-5MHACDQU.js.map → chunk-BRCDZJBQ.js.map} +0 -0
- /package/dist/{chunk-A5TSPTYC.js.map → chunk-DDKS3MV3.js.map} +0 -0
- /package/dist/{chunk-ODEZHSWS.js.map → chunk-EBGX226R.js.map} +0 -0
- /package/dist/{chunk-KQKC2KYW.js.map → chunk-EHXI36HJ.js.map} +0 -0
- /package/dist/{chunk-ZZZMLJLP.js.map → chunk-ENP4FLOX.js.map} +0 -0
- /package/dist/{chunk-I45NHOFY.js.map → chunk-FDOSJKDA.js.map} +0 -0
- /package/dist/{chunk-HYZG6OPC.js.map → chunk-G6O3URDN.js.map} +0 -0
- /package/dist/{chunk-IE56TWZS.js.map → chunk-HP2BASCY.js.map} +0 -0
- /package/dist/{chunk-T5CFDKE7.js.map → chunk-HROKXT4K.js.map} +0 -0
- /package/dist/{chunk-VYIO7T6J.js.map → chunk-HUBO743S.js.map} +0 -0
- /package/dist/{chunk-A6TQGNDQ.js.map → chunk-HYOEWQ5P.js.map} +0 -0
- /package/dist/{chunk-AU23U4BS.js.map → chunk-IA7S4UL5.js.map} +0 -0
- /package/dist/{chunk-UFDQ2R2Q.js.map → chunk-IABWKPRK.js.map} +0 -0
- /package/dist/{chunk-TE3DK3A6.js.map → chunk-ICBNFAW4.js.map} +0 -0
- /package/dist/{chunk-YDF73E2J.js.map → chunk-JFIOYO3M.js.map} +0 -0
- /package/dist/{chunk-762BT2DY.js.map → chunk-JMJW3ERE.js.map} +0 -0
- /package/dist/{chunk-5UG7ZKPU.js.map → chunk-K5XPMCKP.js.map} +0 -0
- /package/dist/{chunk-KLV7RCJM.js.map → chunk-K7XWZSQA.js.map} +0 -0
- /package/dist/{chunk-IH7ILDJS.js.map → chunk-KSGA62R2.js.map} +0 -0
- /package/dist/{chunk-AIZRXZG4.js.map → chunk-KSN3EVKI.js.map} +0 -0
- /package/dist/{chunk-SEEYV6P2.js.map → chunk-KYBIQBXE.js.map} +0 -0
- /package/dist/{chunk-GCXNR5FP.js.map → chunk-L5SOHZ5V.js.map} +0 -0
- /package/dist/{chunk-Q34VOEG6.js.map → chunk-LMGE54CQ.js.map} +0 -0
- /package/dist/{chunk-54FTA4PC.js.map → chunk-LOMVTHAM.js.map} +0 -0
- /package/dist/{chunk-GMDQIP3M.js.map → chunk-LSV4Z473.js.map} +0 -0
- /package/dist/{chunk-ZIAGMGMS.js.map → chunk-LY7GD74F.js.map} +0 -0
- /package/dist/{chunk-7N3Q25KC.js.map → chunk-MHCTLVGE.js.map} +0 -0
- /package/dist/{chunk-LJS24D4U.js.map → chunk-MVCGSYS2.js.map} +0 -0
- /package/dist/{chunk-2QGWWYYS.js.map → chunk-N2HBIQKU.js.map} +0 -0
- /package/dist/{chunk-HDTUZBHC.js.map → chunk-NL3DVEVX.js.map} +0 -0
- /package/dist/{chunk-TRXU2NWS.js.map → chunk-O4WJSZC3.js.map} +0 -0
- /package/dist/{chunk-UG4OP5YA.js.map → chunk-OVPVPPRG.js.map} +0 -0
- /package/dist/{chunk-W3SYT2EY.js.map → chunk-OYEISJSJ.js.map} +0 -0
- /package/dist/{chunk-6NAYFS4V.js.map → chunk-P2JDCMXW.js.map} +0 -0
- /package/dist/{chunk-BDDMS2FF.js.map → chunk-PMDXCESS.js.map} +0 -0
- /package/dist/{chunk-EWSI62JW.js.map → chunk-PXYYICV7.js.map} +0 -0
- /package/dist/{chunk-5ONLXNNE.js.map → chunk-PZ3KIUWJ.js.map} +0 -0
- /package/dist/{chunk-6Y4QZ4AY.js.map → chunk-QEWMCAJW.js.map} +0 -0
- /package/dist/{chunk-2VNTM6TR.js.map → chunk-QLWDUZ5K.js.map} +0 -0
- /package/dist/{chunk-YA73ETIT.js.map → chunk-ROLVOPVR.js.map} +0 -0
- /package/dist/{chunk-FGMPKWT5.js.map → chunk-RTS7NVCS.js.map} +0 -0
- /package/dist/{chunk-LXQ6DLAR.js.map → chunk-ST644IDH.js.map} +0 -0
- /package/dist/{chunk-BSLJVK4K.js.map → chunk-UOOMFM7K.js.map} +0 -0
- /package/dist/{chunk-KZFOWI7N.js.map → chunk-UVPAZM3G.js.map} +0 -0
- /package/dist/{chunk-JOT4WDJE.js.map → chunk-UWYCEYML.js.map} +0 -0
- /package/dist/{chunk-D6JMBLDW.js.map → chunk-VGHSLILD.js.map} +0 -0
- /package/dist/{chunk-MFLKXGQC.js.map → chunk-W35IOI74.js.map} +0 -0
- /package/dist/{chunk-YK5NFMHR.js.map → chunk-WQ3U6X4Q.js.map} +0 -0
- /package/dist/{chunk-F6V4AYWP.js.map → chunk-X4NI4JLQ.js.map} +0 -0
- /package/dist/{chunk-QPYRMBI5.js.map → chunk-XKF4KMCB.js.map} +0 -0
- /package/dist/{chunk-VEXSAWKT.js.map → chunk-YQVEBFGT.js.map} +0 -0
- /package/dist/{chunk-IBZGIOXS.js.map → chunk-ZT3PB4XX.js.map} +0 -0
- /package/dist/{chunk-MHTDDCB7.js.map → chunk-ZVSXHCGP.js.map} +0 -0
- /package/dist/{condition-UCLHJLCK.js.map → condition-CZX2GSN4.js.map} +0 -0
- /package/dist/{controls-IQGNIWUP.js.map → controls-BQR3WY5W.js.map} +0 -0
- /package/dist/{controls.btns-RSGATX6Y.js.map → controls.btns-3V7SNQT3.js.map} +0 -0
- /package/dist/{controls.config-QJ5AO7RR.js.map → controls.config-TAVZDHFZ.js.map} +0 -0
- /package/dist/{correlation-CRYKJGNT.js.map → correlation-BIWVZNC6.js.map} +0 -0
- /package/dist/{cuminc-LBSHAUJ4.js.map → cuminc-EDXOOI5R.js.map} +0 -0
- /package/dist/{cuminc.integration.spec-M7F2IIB7.js.map → cuminc.integration.spec-UZA7BDTB.js.map} +0 -0
- /package/dist/{customdata.inputui-CJ6R7SEC.js.map → customdata.inputui-PEB4CE7J.js.map} +0 -0
- /package/dist/{dataDownload-4OHGMZMB.js.map → dataDownload-KANEHJXJ.js.map} +0 -0
- /package/dist/{dataDownload.integration.spec-CK25GOZY.js.map → dataDownload.integration.spec-23WLHSWJ.js.map} +0 -0
- /package/dist/{databrowser.ui-T7CYFJ4E.js.map → databrowser.ui-B2TNECC4.js.map} +0 -0
- /package/dist/{dictionary-INTI6FAG.js.map → dictionary-YOTUFVES.js.map} +0 -0
- /package/dist/{dnaMethylation-C3FBLWQB.js.map → dnaMethylation-TRFAZWRJ.js.map} +0 -0
- /package/dist/{dnaMethylation.integration.spec-VVNUZBBX.js.map → dnaMethylation.integration.spec-SPFZO76D.js.map} +0 -0
- /package/dist/{geneExpression-IM6Z5LTY.js.map → dofetch-MH4MRMGY.js.map} +0 -0
- /package/dist/{e2pca-HZOROAVL.js.map → e2pca-AFVAFUJ2.js.map} +0 -0
- /package/dist/{ep-NFVLYFPZ.js.map → ep-4FXTLWB4.js.map} +0 -0
- /package/dist/{expclust.gdc.spec-JAJJ6CET.js.map → expclust.gdc.spec-SFOCKBLR.js.map} +0 -0
- /package/dist/{facet-TSWE5JDV.js.map → facet-SY6PYSTN.js.map} +0 -0
- /package/dist/{gb-LHSABYXO.js.map → gb-JUV63QCN.js.map} +0 -0
- /package/dist/{geneExpClustering-66S735EE.js.map → geneExpClustering-FOY77R7P.js.map} +0 -0
- /package/dist/{geneExpression-4WEYCEZV.js.map → geneExpression-AHKX57BT.js.map} +0 -0
- /package/dist/{geneVariant-DZBGTDCH.js.map → geneExpression-D2F2KVGY.js.map} +0 -0
- /package/dist/{geneExpression.unit.spec-ZLQEQR7Q.js.map → geneExpression.unit.spec-SR2BGZQL.js.map} +0 -0
- /package/dist/{geneORA-FIZVXCWX.js.map → geneORA-VJMYI4BT.js.map} +0 -0
- /package/dist/{geneVariant-UPU45VOI.js.map → geneVariant-LFM5SO2P.js.map} +0 -0
- /package/dist/{gsea-N5SCG3E6.js.map → geneVariant-OIKEV4JM.js.map} +0 -0
- /package/dist/{geneVariant.integration.spec-YB5IKH5W.js.map → geneVariant.integration.spec-T6BINPIN.js.map} +0 -0
- /package/dist/{genefusion.ui-TUVA4P5Z.js.map → genefusion.ui-NLMW5XMI.js.map} +0 -0
- /package/dist/{geneset-ZMKTTFSC.js.map → geneset-HKXFHM5K.js.map} +0 -0
- /package/dist/{genomeBrowser.spec-FOI35XYW.js.map → genomeBrowser.spec-DRYIFJLY.js.map} +0 -0
- /package/dist/{grin2-P2UO22D2.js.map → grin2-GJKLNT4J.js.map} +0 -0
- /package/dist/{grin2-UI44QTJH.js.map → grin2-LGI535FF.js.map} +0 -0
- /package/dist/{hierCluster-BP5PCDPC.js.map → gsea-Z7DSDFOA.js.map} +0 -0
- /package/dist/{hierCluster-QWISWLUI.js.map → hierCluster-HC2B5XRR.js.map} +0 -0
- /package/dist/{hierCluster.config-FDX4Y3ZO.js.map → hierCluster-PLHVN5S3.js.map} +0 -0
- /package/dist/{hierCluster.interactivity-JUXO3332.js.map → hierCluster.config-E3DIJWL5.js.map} +0 -0
- /package/dist/{hierCluster.renderers-FI3N2XDZ.js.map → hierCluster.interactivity-LRNPDTEH.js.map} +0 -0
- /package/dist/{importPlot-67KZTZR6.js.map → hierCluster.renderers-FWOV4Q47.js.map} +0 -0
- /package/dist/{imagePlot-SFH72544.js.map → imagePlot-GUXRGYQA.js.map} +0 -0
- /package/dist/{isoformExpression-PJQ5Z2WL.js.map → importPlot-M5HGLHRO.js.map} +0 -0
- /package/dist/{launch.adhoc-ZO5HCSMH.js.map → isoformExpression-PADLHHR5.js.map} +0 -0
- /package/dist/{isoformExpression.unit.spec-X55G6VZQ.js.map → isoformExpression.unit.spec-5BPAL4OS.js.map} +0 -0
- /package/dist/{matrix-FQ3J2TBL.js.map → launch.adhoc-JH6ZZFDB.js.map} +0 -0
- /package/dist/{leftlabel.sample-Y4LPXV3X.js.map → leftlabel.sample-NS2TBANH.js.map} +0 -0
- /package/dist/{legacyDataset-QRSNRVUA.js.map → legacyDataset-PBCPC5I7.js.map} +0 -0
- /package/dist/{lollipop-DUAD2HN5.js.map → lollipop-W6NOHHCP.js.map} +0 -0
- /package/dist/{maf-BLCYUOD6.js.map → maf-NOHIKTUP.js.map} +0 -0
- /package/dist/{maftimeline-HWJLWEQ4.js.map → maftimeline-WGWE52EF.js.map} +0 -0
- /package/dist/{matrix-SPTIZ3UF.js.map → matrix-B6NPQFFF.js.map} +0 -0
- /package/dist/{matrix.cells-7BOE7C3Y.js.map → matrix-UAKRJL5A.js.map} +0 -0
- /package/dist/{matrix.cluster-43E3HCDL.js.map → matrix.cells-KEIOXJQ7.js.map} +0 -0
- /package/dist/{matrix.config-LU5LMDBS.js.map → matrix.cluster-NU5CYRUT.js.map} +0 -0
- /package/dist/{matrix.data-YTSSULKG.js.map → matrix.config-KJNJXPJJ.js.map} +0 -0
- /package/dist/{matrix.dom-6QL3AJMW.js.map → matrix.data-QGCGFLD7.js.map} +0 -0
- /package/dist/{matrix.groups-NGJ276VG.js.map → matrix.dom-KGXRCCKU.js.map} +0 -0
- /package/dist/{matrix.interactivity-OXCQ3FCE.js.map → matrix.groups-HBPLZ2QX.js.map} +0 -0
- /package/dist/{matrix.integration.spec-6XXGVAPI.js.map → matrix.integration.spec-VAXIR3E6.js.map} +0 -0
- /package/dist/{matrix.layout-QBVYWCBC.js.map → matrix.interactivity-H4MCMJXU.js.map} +0 -0
- /package/dist/{matrix.legend-AGTC5JPS.js.map → matrix.layout-RFKQJM5D.js.map} +0 -0
- /package/dist/{matrix.renderers-PHH4HZTJ.js.map → matrix.legend-UCL7HM26.js.map} +0 -0
- /package/dist/{matrix.serieses-AXFWSUHX.js.map → matrix.renderers-7JJIC6VC.js.map} +0 -0
- /package/dist/{matrix.sort-6VF7VNFX.js.map → matrix.serieses-S2TJ3E6P.js.map} +0 -0
- /package/dist/{matrix.sorterUi-UE7CBIUP.js.map → matrix.sort-CFA4UWBJ.js.map} +0 -0
- /package/dist/{matrix.sort.unit.spec-UV22BJDG.js.map → matrix.sort.unit.spec-MQQVWWNT.js.map} +0 -0
- /package/dist/{plot.app-WOJDWDPZ.js.map → matrix.sorterUi-FT7K5664.js.map} +0 -0
- /package/dist/{matrix.sorterUi.unit.spec-GMAT2FLL.js.map → matrix.sorterUi.unit.spec-LG4TI7VF.js.map} +0 -0
- /package/dist/{mavb-LE7BAFCL.js.map → mavb-EIZHS6F4.js.map} +0 -0
- /package/dist/{mds.fimo-3YYY245N.js.map → mds.fimo-XVC6MI7W.js.map} +0 -0
- /package/dist/{mds.samplescatterplot-22ZB4TEO.js.map → mds.samplescatterplot-PRR4TKYI.js.map} +0 -0
- /package/dist/{mds.survivalplot-DTE3OUTW.js.map → mds.survivalplot-3OG4Y2B6.js.map} +0 -0
- /package/dist/{notify-CJGEVJGO.js.map → notify-2ROOBENL.js.map} +0 -0
- /package/dist/{oncomatrix-RRJWFDVF.js.map → oncomatrix-SO6S6IIB.js.map} +0 -0
- /package/dist/{oncomatrix.spec-5VJ4C6VJ.js.map → oncomatrix.spec-VXTF44K5.js.map} +0 -0
- /package/dist/{plot.2dvaf-6Z6SJ7FI.js.map → plot.2dvaf-JW5OJJXV.js.map} +0 -0
- /package/dist/{profilePlot-65PFUYRZ.js.map → plot.app-T3GVCFQ3.js.map} +0 -0
- /package/dist/{plot.barplot-II27ZDWD.js.map → plot.barplot-2TYP6DPI.js.map} +0 -0
- /package/dist/{plot.boxplot-UFQWYLTW.js.map → plot.boxplot-HOQHM7JF.js.map} +0 -0
- /package/dist/{plot.brainImaging-KZ3HFEP4.js.map → plot.brainImaging-5AI7BSD4.js.map} +0 -0
- /package/dist/{plot.disco-LH6OHLKL.js.map → plot.disco-HNNZHK5Z.js.map} +0 -0
- /package/dist/{plot.dzi-2D26EYQP.js.map → plot.dzi-4OQSO7SY.js.map} +0 -0
- /package/dist/{plot.ssgq-AJNIOPA2.js.map → plot.ssgq-VZTTGECT.js.map} +0 -0
- /package/dist/{plot.vaf2cov-VQKJSC3M.js.map → plot.vaf2cov-ASEELRDV.js.map} +0 -0
- /package/dist/{plot.wsi-OZHY6PQR.js.map → plot.wsi-MDWYLU4R.js.map} +0 -0
- /package/dist/{polar-DVTFSBRH.js.map → polar-QSY6JG4P.js.map} +0 -0
- /package/dist/{polar2-2YDTT6IV.js.map → polar2-FD6656VD.js.map} +0 -0
- /package/dist/{profile.spec-KSZVGAE5.js.map → profile.spec-V7EQBXT2.js.map} +0 -0
- /package/dist/{profileBarchart-7OM2I6AI.js.map → profileBarchart-EIKHZAPD.js.map} +0 -0
- /package/dist/{profileForms-C62KOXSL.js.map → profileForms-NGFRXPFF.js.map} +0 -0
- /package/dist/{proteomeAbundance-3UZIGZWO.js.map → profilePlot-2UFKJ2OC.js.map} +0 -0
- /package/dist/{profileRadar-TD6M6FE2.js.map → profileRadar-B2R7OV5F.js.map} +0 -0
- /package/dist/{profileRadarFacility-CLWYZJSV.js.map → profileRadarFacility-ILC7POCI.js.map} +0 -0
- /package/dist/{proteomeAbundance-6QXRHIJD.js.map → proteomeAbundance-6J5YF4V2.js.map} +0 -0
- /package/dist/{qualitative-MESSRM45.js.map → proteomeAbundance-OF27N347.js.map} +0 -0
- /package/dist/{qualitative-7XEX7QZP.js.map → qualitative-2INAKDTJ.js.map} +0 -0
- /package/dist/{regression-XIHVK4ZG.js.map → qualitative-CSUO2WG5.js.map} +0 -0
- /package/dist/{regression.inputs-GI6FWC5D.js.map → regression-Y4NYGZSA.js.map} +0 -0
- /package/dist/{regression.inputs.term-FEK2O6DJ.js.map → regression.inputs-RWFIJLNF.js.map} +0 -0
- /package/dist/{regression.inputs.values.table-GGD24KI5.js.map → regression.inputs.term-QIU5SHTN.js.map} +0 -0
- /package/dist/{regression.results-CLTDKTFL.js.map → regression.inputs.values.table-FM6QTSEV.js.map} +0 -0
- /package/dist/{regression.integration.spec-KM7ZNOLR.js.map → regression.integration.spec-YRKKU7HL.js.map} +0 -0
- /package/dist/{sampleView-SHDNYDPJ.js.map → regression.results-YUDCHUZJ.js.map} +0 -0
- /package/dist/{regression.spec-O7BT7EZK.js.map → regression.spec-G4GIIV32.js.map} +0 -0
- /package/dist/{report-QIQKKQC7.js.map → report-2N4FBR4Q.js.map} +0 -0
- /package/dist/{sampleScatter.spec-YPOEQKHM.js.map → sampleScatter.spec-UIUYO4WR.js.map} +0 -0
- /package/dist/{singleCellCellType-6JAY4U2O.js.map → sampleView-TOK5Y5KU.js.map} +0 -0
- /package/dist/{samplelst-IKDCCQX3.js.map → samplelst-YW5ZS3GJ.js.map} +0 -0
- /package/dist/{samplematrix-6GNNJCTO.js.map → samplematrix-447BHSO7.js.map} +0 -0
- /package/dist/{sc-BHCYSYVH.js.map → sc-O2PL3FL2.js.map} +0 -0
- /package/dist/{scatter-ORGQK7HR.js.map → scatter-4DXHOWVY.js.map} +0 -0
- /package/dist/{selectGenomeWithTklst-CUOMKNIF.js.map → selectGenomeWithTklst-3RLZFW62.js.map} +0 -0
- /package/dist/{singleCellGeneExpression-CJS6IUYX.js.map → singleCellCellType-3LQJXS7H.js.map} +0 -0
- /package/dist/{singleCellCellType.unit.spec-4ATH3CHQ.js.map → singleCellCellType.unit.spec-UJM72SP4.js.map} +0 -0
- /package/dist/{singleCellPlot-FI6IDYGC.js.map → singleCellGeneExpression-JOWJWPIQ.js.map} +0 -0
- /package/dist/{singleCellGeneExpression.unit.spec-36E4SRKB.js.map → singleCellGeneExpression.unit.spec-VY5CGRZH.js.map} +0 -0
- /package/dist/{snp-EL6PPZPW.js.map → singleCellPlot-IVLVKOO6.js.map} +0 -0
- /package/dist/{singlecell-A6N6G7E5.js.map → singlecell-VJJZJZF7.js.map} +0 -0
- /package/dist/{singlecell-IMKGN5JV.js.map → singlecell-VQJ2252L.js.map} +0 -0
- /package/dist/{ssGSEA-AVDDOL5T.js.map → snp-ALMKZKL2.js.map} +0 -0
- /package/dist/{snp.unit.spec-SECWXZH6.js.map → snp.unit.spec-GJQBAHGQ.js.map} +0 -0
- /package/dist/{snplocus-65MQZRFI.js.map → snplocus-WCNCMFWZ.js.map} +0 -0
- /package/dist/{spliceevent.a53ss.diagram-TST7ZXLO.js.map → spliceevent.a53ss.diagram-4Q4JF4RX.js.map} +0 -0
- /package/dist/{spliceevent.exonskip.diagram-LKZPWUIB.js.map → spliceevent.exonskip.diagram-IOYOKELT.js.map} +0 -0
- /package/dist/{spliceevent.noeventdiagram-DFITYWZC.js.map → spliceevent.noeventdiagram-77ZCOHSF.js.map} +0 -0
- /package/dist/{summarizeMutationDiagnosis-74XKVVPZ.js.map → ssGSEA-QTXXIN4K.js.map} +0 -0
- /package/dist/{ssGSEA.unit.spec-OPGA35IG.js.map → ssGSEA.unit.spec-LQESATT3.js.map} +0 -0
- /package/dist/{summarizeCnvGeneexp-BWT4VWD7.js.map → summarizeCnvGeneexp-YKUQGDQF.js.map} +0 -0
- /package/dist/{summarizeGeneexpSurvival-Q2SG2GHX.js.map → summarizeGeneexpSurvival-ARGG5VDC.js.map} +0 -0
- /package/dist/{summarizeMutationCnv-4CHIHM75.js.map → summarizeMutationCnv-FMZYT3EC.js.map} +0 -0
- /package/dist/{summary-ZS354SRJ.js.map → summarizeMutationDiagnosis-ZX7I46SC.js.map} +0 -0
- /package/dist/{summarizeMutationSurvival-EZ5DIYNE.js.map → summarizeMutationSurvival-RCFMTT43.js.map} +0 -0
- /package/dist/{survival-642RIFRE.js.map → summary-QLL5YVI2.js.map} +0 -0
- /package/dist/{summary.integration.spec-ULSBOTVJ.js.map → summary.integration.spec-DHY6XCEJ.js.map} +0 -0
- /package/dist/{summaryInput-WF4EWMAW.js.map → summaryInput-ANCUQGIB.js.map} +0 -0
- /package/dist/{sunburst-GU3NCPCJ.js.map → sunburst-RDNFBOCK.js.map} +0 -0
- /package/dist/{termCollection-UGN3OJFW.js.map → survival-BG7QV52L.js.map} +0 -0
- /package/dist/{survival-OVTHCWLW.js.map → survival-WSN36OQE.js.map} +0 -0
- /package/dist/{survival.integration.spec-GVQHKZJI.js.map → survival.integration.spec-37KAJ5IK.js.map} +0 -0
- /package/dist/{svgraph-HBHUQ4AX.js.map → svgraph-A5WGHW4S.js.map} +0 -0
- /package/dist/{svmr-FYNIJ7JC.js.map → svmr-CYRHHWZF.js.map} +0 -0
- /package/dist/{table-3ME3S634.js.map → table-VHO7E5PI.js.map} +0 -0
- /package/dist/{termCollection-UAVQQZZ4.js.map → termCollection-E4Q6GLXN.js.map} +0 -0
- /package/dist/{tk-K2F7FHHG.js.map → termCollection-HSVSH7TJ.js.map} +0 -0
- /package/dist/{termCollection.unit.spec-5IEDREFJ.js.map → termCollection.unit.spec-ZCE3TUMS.js.map} +0 -0
- /package/dist/{tvs.density-AQ5GD437.js.map → tk-GPRHDN4K.js.map} +0 -0
- /package/dist/{tp.ui-3YNDBTSW.js.map → tp.ui-LTUA3FSL.js.map} +0 -0
- /package/dist/{tvs.dt-4KUWV64G.js.map → tvs.density-BJK23JYJ.js.map} +0 -0
- /package/dist/{tvs.numeric-ZN2R7BH3.js.map → tvs.dt-G43PAAKD.js.map} +0 -0
- /package/dist/{tvs.dtcnv.categorical-JTQT3H3F.js.map → tvs.dtcnv.categorical-UHDS2TGZ.js.map} +0 -0
- /package/dist/{tvs.dtcnv.continuous-Z67YBYLM.js.map → tvs.dtcnv.continuous-ZNGYQKTD.js.map} +0 -0
- /package/dist/{tvs.dtfusion-VSHNVYPD.js.map → tvs.dtfusion-JBEEUDUS.js.map} +0 -0
- /package/dist/{tvs.dtsnvindel-5EUPENLI.js.map → tvs.dtsnvindel-XXN5Q7RN.js.map} +0 -0
- /package/dist/{tvs.dtsv-NYUF3ACM.js.map → tvs.dtsv-MO6L7HHV.js.map} +0 -0
- /package/dist/{violin-TA7L6VWE.js.map → tvs.numeric-MJZMNYRG.js.map} +0 -0
- /package/dist/{tvs.samplelst-52YSDBZH.js.map → tvs.samplelst-HKY6UUJM.js.map} +0 -0
- /package/dist/{tvs.termCollection-O3B3MABA.js.map → tvs.termCollection-TY6FPL25.js.map} +0 -0
- /package/dist/{violin.interactivity-G6TNI6ZJ.js.map → violin-YHE3WSGR.js.map} +0 -0
- /package/dist/{violin.renderer-J4ICXAI3.js.map → violin.interactivity-LVDTDEPQ.js.map} +0 -0
- /package/dist/{vocabulary-GZTQJUCP.js.map → violin.renderer-IIEIUGRI.js.map} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../plots/matrix/matrix.interactivity.js"],
|
|
4
|
-
"sourcesContent": ["import { select, pointer } from 'd3-selection'\nimport { format as d3format } from 'd3-format'\nimport { fillTermWrapper, termsettingInit } from '#termsetting'\nimport { icons, newSandboxDiv, Menu, renderTable, table2col, renderCnvConfig } from '#dom'\nimport { dofetch3 } from '#common/dofetch'\nimport { TermTypes, isNumericTerm } from '#shared/terms.js'\nimport {\n\tmclass,\n\tdt2label,\n\tdtsnvindel,\n\tdtcnv,\n\tdtgeneexpression,\n\tdtmetaboliteintensity,\n\tdtproteomeabundance\n} from '#shared/common.js'\nimport { rgb2hex } from '#src/client'\nimport { getSamplelstTW, getFilter, addNewGroup } from '../../mass/groups.js'\nimport { TwBase } from '#tw/TwBase'\n\nlet inputIndex = 0\nconst svgIcons = {\n\texternalLink: '' //`<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"16\" width=\"16\" viewBox=\"0 0 512 512\" transform=\"scale(0.8)\" style=\"display: inline-block; position:relative; top: -2px; left:4px;\" ><!--!Font Awesome Free 6.5.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2023 Fonticons, Inc.--><path d=\"M320 0c-17.7 0-32 14.3-32 32s14.3 32 32 32h82.7L201.4 265.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L448 109.3V192c0 17.7 14.3 32 32 32s32-14.3 32-32V32c0-17.7-14.3-32-32-32H320zM80 32C35.8 32 0 67.8 0 112V432c0 44.2 35.8 80 80 80H400c44.2 0 80-35.8 80-80V320c0-17.7-14.3-32-32-32s-32 14.3-32 32V432c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16H192c17.7 0 32-14.3 32-32s-14.3-32-32-32H80z\"/></svg>`\n}\n\nexport function setInteractivity(self) {\n\tlet t\n\tself.delayedMouseoutHandler = () => {\n\t\tif (t) clearTimeout(t)\n\t\tt = setTimeout(self.mouseout, 500)\n\t}\n\tself.showCellInfo = function (event) {\n\t\tif (self.activeLabel || self.zoomArea) return\n\t\tif (event.target.__data__?.isLegendItem) {\n\t\t\t// do not show info for matrix legend\n\t\t\treturn\n\t\t}\n\t\tif (!(event.target.tagName == 'rect' || event.target.tagName == 'image')) {\n\t\t\tconst d = event.target.__data__\n\t\t\tconst grp = d?.grp\n\t\t\tif (grp?.legendData) {\n\t\t\t\tif (event.target.closest('.sjpp-matrix-series-group-label-g')) self.displaySampleGroupInfo(event, grp)\n\t\t\t} //else if (d?.isLegendItem) self.handleLegendMouseover(event, d)\n\t\t\treturn\n\t\t}\n\t\tif (event.target.tagName !== 'rect' && !self.imgBox) self.imgBox = event.target.getBoundingClientRect()\n\t\tconst d = event.target.tagName == 'rect' ? event.target.__data__ : self.getImgCell(event)\n\t\t// TODO: svg-rendered cell rects may be thin and hard to mouse over,\n\t\t// but the tooltip should still display info\n\t\tif (!d || !d.term || !d.sample) {\n\t\t\tself.dom.tip.hide()\n\t\t\tself.mouseout()\n\t\t\treturn\n\t\t}\n\n\t\tconst x = self.dimensions.xOffset + self.dimensions.seriesXoffset\n\t\tconst y = self.dimensions.yOffset\n\t\tconst s = self.settings.matrix\n\t\tconst l = s.controlLabels\n\n\t\tconst twSpecificSettings = self.config.settings.matrix.twSpecificSettings\n\t\tconst twBarh = twSpecificSettings[d.tw.$id]?.contBarH\n\t\tconst twGap = twSpecificSettings[d.tw.$id]?.contBarGap\n\n\t\tself.dom.rowBeam\n\t\t\t.attr('x', x)\n\t\t\t.attr('y', y + d.seriesY)\n\t\t\t.attr('height', twBarh ? twBarh + 2 * twGap : d.t.grp.type == 'hierCluster' ? s.clusterRowh : s.rowh)\n\t\t\t.style('display', '')\n\n\t\tself.dom.colBeam\n\t\t\t.attr('x', x + d.x)\n\t\t\t.attr('y', y)\n\t\t\t.style('display', '')\n\n\t\tself.dom.matrixCellHoverOver.clear()\n\t\tconst table = table2col({ holder: self.dom.matrixCellHoverOver.d.append('div') })\n\n\t\tif (d.term.type == 'geneVariant' && d.tw.q?.type == 'values') {\n\t\t\t{\n\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\tc1.html(l.Sample)\n\t\t\t\tc2.html(d.row._ref_.label || d.value?.sample)\n\t\t\t}\n\t\t\t{\n\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\tc1.html('Gene')\n\t\t\t\tc2.html(d.term.name)\n\t\t\t}\n\n\t\t\tconst siblingCellLabels = {}\n\t\t\tif (d.siblingCells)\n\t\t\t\tfor (const c of d.siblingCells) {\n\t\t\t\t\tif (c.$id != d.$id) continue\n\t\t\t\t\tconst v = c.value\n\t\t\t\t\tconst p = v.pairlst\n\t\t\t\t\tconst dtLabel = v.origin ? `${v.origin} ${dt2label[v.dt]}` : dt2label[v.dt]\n\t\t\t\t\t// TODO: when the same label can apply to multiple values/hits in the same matrix cell,\n\t\t\t\t\t// list that label only once but with a hit count, instead of listing that same label\n\t\t\t\t\t// as multiple table rows in the mouseover\n\t\t\t\t\tconst label = getLabel(c, v, p)\n\t\t\t\t\t/* display as two column tabel, do not display these info and do not show gradient CNV anymore\n\t\t\t\tconst info = []\n\t\t\t\tif (v.label && v.label !== c.label) info.push(v.label)\n\t\t\t\tif ('value' in v) info.push(`${s.cnvUnit}=${v.value}`)\n\t\t\t\tif (v.chr) {\n\t\t\t\t\tconst pos = v.pos ? `:${v.pos}` : v.start ? `:${v.start}-${v.stop}` : ''\n\t\t\t\t\tinfo.push(`${v.chr}${pos}`)\n\t\t\t\t}\n\t\t\t\tif (v.alt) info.push(`${v.ref}>${v.alt}`)\n\n\t\t\t\tconst tds = !info.length\n\t\t\t\t\t? `<td colspan='2' style='text-align: center'>${label}</td>`\n\t\t\t\t\t: `<td style='text-align: right'>${label}</td><td>${info.map(i => `<span>${i}</span>`).join(' ')}</td>`\n\t\t\t\t*/\n\t\t\t\t\tconst color = c.fill == v.color || v.class == 'Blank' ? '' : c.fill\n\n\t\t\t\t\tif (!siblingCellLabels[dtLabel]) {\n\t\t\t\t\t\tsiblingCellLabels[dtLabel] = [{ label, color }]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsiblingCellLabels[dtLabel].push({ label, color })\n\t\t\t\t\t}\n\t\t\t\t\t/*\n\t\t\t\tdo not use gradient CNV anymore\n\t\t\t\tif (v.dt == 4 && 'value' in v) {\n\t\t\t\t\tconst textColor = Math.abs(v.value) < 0.5 ? '#000' : '#fff'\n\t\t\t\t\trows.push(\n\t\t\t\t\t\t`<tr style='background-color: ${color}; color: ${textColor}; padding-left: 2px; padding-right: 2px'>${tds}</tr>`\n\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\trows.push(`<tr style='color: ${color}'>${tds}</tr>`)\n\t\t\t\t}\n\t\t\t\t*/\n\t\t\t\t}\n\t\t\tfor (const [dtLabel, classArray] of Object.entries(siblingCellLabels).sort((a, b) => b.length - a.length)) {\n\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\tc1.html(dtLabel)\n\t\t\t\tc2.html(`<span style=\"display:inline-block; width:12px; height:12px; background-color:${classArray[0].color}\" ></span>\n\t\t\t\t\t${classArray[0].label}`)\n\t\t\t\tfor (const classType of classArray.slice(1)) {\n\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\tc1.html('')\n\t\t\t\t\tc2.html(`<span style=\"display:inline-block; width:12px; height:12px; background-color:${classType.color}\" ></span>\n\t\t\t\t\t\t${classType.label}`)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t{\n\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\tc1.html(l.Sample)\n\t\t\t\tc2.html(d.row._ref_.label)\n\t\t\t}\n\n\t\t\tlet survivalInfo\n\t\t\tif (d.term.type == TermTypes.SURVIVAL && d.exitCodeKey) {\n\t\t\t\tsurvivalInfo = d.term.values?.[d.exitCodeKey]?.label || d.exitCodeKey\n\t\t\t}\n\n\t\t\tif (survivalInfo || d.convertedValueLabel || d.label || d.label === 0) {\n\t\t\t\t// show term value row only when not undefined\n\t\t\t\tif (d.term.type == TermTypes.GENE_EXPRESSION) {\n\t\t\t\t\t{\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('Gene')\n\t\t\t\t\t\tc2.html(d.term.gene)\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tconst colorSquare =\n\t\t\t\t\t\t\t(d.tw?.q?.convert2ZScore && d.tw.q.mode == 'continuous') || d.tw.q.mode !== 'continuous'\n\t\t\t\t\t\t\t\t? `<span style=\"display:inline-block; width:12px; height:12px; background-color:${\n\t\t\t\t\t\t\t\t\t\td.fill == '#fff' || d.fill == 'transparent' ? '' : d.fill\n\t\t\t\t\t\t\t\t }\" ></span>`\n\t\t\t\t\t\t\t\t: ''\n\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('Gene Expression')\n\t\t\t\t\t\tc2.html(\n\t\t\t\t\t\t\t`${colorSquare} ${d.convertedValueLabel || d.label}${\n\t\t\t\t\t\t\t\td.tw?.q?.convert2ZScore && d.tw.q.mode == 'continuous' && d.zscoreLabel ? d.zscoreLabel : ''\n\t\t\t\t\t\t\t}`\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t} else if (d.term.type == TermTypes.METABOLITE_INTENSITY) {\n\t\t\t\t\t{\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('Metabolite')\n\t\t\t\t\t\tc2.html(d.term.name)\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tconst colorSquare =\n\t\t\t\t\t\t\t(d.tw?.q?.convert2ZScore && d.tw.q.mode == 'continuous') || d.tw.q.mode !== 'continuous'\n\t\t\t\t\t\t\t\t? `<span style=\"display:inline-block; width:12px; height:12px; background-color:${\n\t\t\t\t\t\t\t\t\t\td.fill == '#fff' || d.fill == 'transparent' ? '' : d.fill\n\t\t\t\t\t\t\t\t }\" ></span>`\n\t\t\t\t\t\t\t\t: ''\n\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('Metabolite Intensity')\n\t\t\t\t\t\tc2.html(\n\t\t\t\t\t\t\t`${colorSquare} ${d.convertedValueLabel || d.label}${\n\t\t\t\t\t\t\t\td.tw?.q?.convert2ZScore && d.tw.q.mode == 'continuous' && d.zscoreLabel ? d.zscoreLabel : ''\n\t\t\t\t\t\t\t}`\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t} else if (d.term.type == TermTypes.PROTEOME_ABUNDANCE) {\n\t\t\t\t\t{\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('gene')\n\t\t\t\t\t\tc2.html(d.term.name)\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tconst colorSquare =\n\t\t\t\t\t\t\t(d.tw?.q?.convert2ZScore && d.tw.q.mode == 'continuous') || d.tw.q.mode !== 'continuous'\n\t\t\t\t\t\t\t\t? `<span style=\"display:inline-block; width:12px; height:12px; background-color:${\n\t\t\t\t\t\t\t\t\t\td.fill == '#fff' || d.fill == 'transparent' ? '' : d.fill\n\t\t\t\t\t\t\t\t }\" ></span>`\n\t\t\t\t\t\t\t\t: ''\n\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('Protein Abundance')\n\t\t\t\t\t\tc2.html(\n\t\t\t\t\t\t\t`${colorSquare} ${d.convertedValueLabel || d.label}${\n\t\t\t\t\t\t\t\td.tw?.q?.convert2ZScore && d.tw.q.mode == 'continuous' && d.zscoreLabel ? d.zscoreLabel : ''\n\t\t\t\t\t\t\t}`\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t} else if (d.term.type == TermTypes.SURVIVAL) {\n\t\t\t\t\t{\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html(d.term.name)\n\t\t\t\t\t\tc2.html(`<span style=\"display:inline-block; width:12px; height:12px; background-color:${\n\t\t\t\t\t\t\td.fill == '#fff' || d.fill == 'transparent' ? '' : d.fill\n\t\t\t\t\t\t}\" ></span>\n\t\t\t\t\t\t\t${survivalInfo || d.label}`)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst timeToEventKey =\n\t\t\t\t\t\t'Time to Event: ' +\n\t\t\t\t\t\t(d.timeToEventKey\n\t\t\t\t\t\t\t? d.timeToEventKey + (d.term.unit ? ` ${d.term.unit}` : '')\n\t\t\t\t\t\t\t: (d.convertedValueLabel || d.label) +\n\t\t\t\t\t\t\t (d.tw?.q?.convert2ZScore && d.tw.q.mode == 'continuous' && d.zscoreLabel ? d.zscoreLabel : ''))\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('')\n\t\t\t\t\t\tc2.html(timeToEventKey)\n\t\t\t\t\t}\n\t\t\t\t} else if (d.term.type == TermTypes.TERM_COLLECTION) {\n\t\t\t\t\tconst renderedValues = d.row[d.$id].renderedValues\n\t\t\t\t\tconst sortedRenderedValues = renderedValues.filter(rv => rv.value !== 0).sort((a, b) => b.value - a.value)\n\n\t\t\t\t\tfor (const renderedValue of sortedRenderedValues) {\n\t\t\t\t\t\tconst colorSquare = `<span style=\"display:inline-block; width:12px; height:12px; background-color:${renderedValue.color}\"></span>`\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html(`${colorSquare} ${renderedValue.label}`)\n\t\t\t\t\t\tc2.html(`${renderedValue.value.toFixed(2)}%`)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst colorSquare =\n\t\t\t\t\t\t(d.tw?.q?.convert2ZScore && d.tw.q.mode == 'continuous') || d.tw.q.mode !== 'continuous'\n\t\t\t\t\t\t\t? `<span style=\"display:inline-block; width:12px; height:12px; background-color:${\n\t\t\t\t\t\t\t\t\td.fill == '#fff' || d.fill == 'transparent' ? '' : d.fill\n\t\t\t\t\t\t\t }\" ></span>`\n\t\t\t\t\t\t\t: ''\n\n\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\tc1.html(d.term.name)\n\t\t\t\t\tc2.html(\n\t\t\t\t\t\t`${colorSquare} ${d.convertedValueLabel || d.label}${\n\t\t\t\t\t\t\td.tw?.q?.convert2ZScore && d.tw.q.mode == 'continuous' && d.zscoreLabel ? d.zscoreLabel : ''\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\tself.dom.matrixCellHoverOver.show2(event.clientX, event.clientY)\n\t\tself.dom.mainG.on('mouseout', self.mouseout)\n\t}\n\n\tself.getImgCell = function (event) {\n\t\tif (!self.imgBox) {\n\t\t\tif (event.target.tagName == 'image') self.imgBox = event.target.getBoundingClientRect()\n\t\t\telse return\n\t\t}\n\t\t//const [x,y] = pointer(event, event.target)\n\t\tconst y = event.clientY - self.imgBox.y - event.target.clientTop\n\t\tconst d = event.target.__data__.find(series => series.hoverY0 <= y && y <= series.hoverY1)\n\t\tif (!d) return\n\t\tconst { xMin, dx } = self.dimensions\n\t\tconst x2 = event.clientX - self.imgBox.x - event.target.clientLeft + xMin\n\t\tfor (const cell of d.cells) {\n\t\t\tconst min = cell.x\n\t\t\tconst max = cell.x + dx\n\t\t\tif (min <= x2 && x2 <= max) return cell\n\t\t}\n\t\treturn null\n\t}\n\n\tself.mouseout = function () {\n\t\tif (!self.activeLabel && self.dom.tip) self.dom.tip.hide()\n\t\tdelete self.imgBox\n\t\tif (self.dom.colBeam) self.dom.colBeam.style('display', 'none')\n\t\tif (self.dom.rowBeam) self.dom.rowBeam.style('display', 'none')\n\t\tif (self.dom.matrixCellHoverOver) self.dom.matrixCellHoverOver.clear()\n\t}\n\n\tself.mouseclick = async function (event, data) {\n\t\t// clicking only show actions for available genomic data; can later expand to non-genomic data and custom overrides\n\t\tconst q = self.state.termdbConfig.queries\n\t\tif (!q) return // no genomic queries\n\n\t\tif (!(q.singleSampleGenomeQuantification || q.singleSampleMutation || q.NIdata || q.DZImages)) return // only works for these queries\n\n\t\tself.dom.mainG.on('mouseout', null)\n\t\tdelete self.imgBox\n\t\tconst sampleData = data || event.target.__data__\n\n\t\tif (!sampleData) return // !!! it's undefined when dragging on the sample names\n\t\tconst s = self.config.settings.matrix\n\t\t// preliminary fix: assign string sample name for \"sample_id\", which is used by data queries below\n\t\tconst sample = {\n\t\t\tsample_id: sampleData.row._ref_.label\n\t\t}\n\t\t//when clicking a cell in SV, CNV, mutation panels\n\t\tconst geneName = sampleData.term?.type == 'geneVariant' ? sampleData.term.name : null\n\n\t\tself.dom.clickMenu.clear()\n\t\tself.dom.dendroClickMenu.clear()\n\t\tself.dom.brushMenu.clear()\n\t\tself.dom.matrixCellHoverOver.clear()\n\n\t\tif (self.dom.sampleListMenu) self.dom.sampleListMenu.destroy()\n\n\t\tif (q.singleSampleGenomeQuantification) {\n\t\t\tfor (const k in q.singleSampleGenomeQuantification) {\n\t\t\t\tconst menuDiv = self.dom.clickMenu.d\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.attr('data-testid', 'sjpp-ssgp-menu-btn')\n\t\t\t\t\t.text(k)\n\t\t\t\t\t.on('click', async event => {\n\t\t\t\t\t\tconst sandbox = newSandboxDiv(self.opts.plotDiv || select(self.opts.holder.node().parentNode))\n\t\t\t\t\t\tsandbox.header.text(sample.sample_id)\n\t\t\t\t\t\tawait (\n\t\t\t\t\t\t\tawait import('#plots/plot.ssgq.js')\n\t\t\t\t\t\t).plotSingleSampleGenomeQuantification(\n\t\t\t\t\t\t\tself.state.termdbConfig,\n\t\t\t\t\t\t\tself.state.vocab.dslabel,\n\t\t\t\t\t\t\tk,\n\t\t\t\t\t\t\tsample,\n\t\t\t\t\t\t\tsandbox.body.append('div').style('margin', '20px'),\n\t\t\t\t\t\t\tself.app.opts.genome,\n\t\t\t\t\t\t\tgeneName\n\t\t\t\t\t\t)\n\t\t\t\t\t\tmenuDiv.remove()\n\t\t\t\t\t\tself.dom.clickMenu.d.selectAll('*').remove()\n\t\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tif (q?.singleSampleMutation) {\n\t\t\tconst menuDiv = self.dom.clickMenu.d\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t.attr('data-testid', 'oncoMatrix_termLabel_disco_button')\n\t\t\t\t.text('Disco plot')\n\t\t\t\t.on('click', async event => {\n\t\t\t\t\tconst sandbox = newSandboxDiv(self.opts.plotDiv || select(self.opts.holder.node().parentNode))\n\t\t\t\t\tsandbox.header.text(sample.sample_id)\n\t\t\t\t\t;(await import('#plots/plot.disco.js')).default(\n\t\t\t\t\t\tself.state.termdbConfig,\n\t\t\t\t\t\tself.state.vocab.dslabel,\n\t\t\t\t\t\tsample,\n\t\t\t\t\t\tsandbox.body,\n\t\t\t\t\t\tself.app.opts.genome\n\t\t\t\t\t)\n\t\t\t\t\tmenuDiv.remove()\n\t\t\t\t\tself.dom.clickMenu.d.selectAll('*').remove()\n\t\t\t\t})\n\t\t}\n\n\t\tif (q.DZImages) {\n\t\t\t// no longer used. replaced by wsimages\n\t\t\tconst menuDiv = self.dom.clickMenu.d\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t.attr('data-testid', 'oncoMatrix_termLabel_dzi_button')\n\t\t\t\t.style('display', 'none')\n\t\t\t\t.text(`${q.DZImages.type} Images (0)`)\n\n\t\t\tconst data = await dofetch3('sampledzimages', {\n\t\t\t\tbody: {\n\t\t\t\t\tgenome: self.app.opts.genome.name,\n\t\t\t\t\tdslabel: self.state.vocab.dslabel,\n\t\t\t\t\tsample_id: sample.sample_id\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tif (data.sampleDZImages?.length > 0) {\n\t\t\t\tmenuDiv.style('display', 'block')\n\t\t\t\tmenuDiv.text(`${q.DZImages.type} Images (${data.sampleDZImages.length})`)\n\t\t\t\tmenuDiv.on('click', async _ => {\n\t\t\t\t\tconst sandbox = newSandboxDiv(self.opts.plotDiv || select(self.opts.holder.node().parentNode))\n\t\t\t\t\tsandbox.header.text(sample.sample_id)\n\t\t\t\t\t;(await import('#plots/dziviewer/plot.dzi.js')).default(\n\t\t\t\t\t\tself.state.vocab.dslabel,\n\t\t\t\t\t\tsandbox.body,\n\t\t\t\t\t\tself.app.opts.genome,\n\t\t\t\t\t\tsample.sample_id,\n\t\t\t\t\t\tdata.sampleDZImages\n\t\t\t\t\t)\n\n\t\t\t\t\tmenuDiv.remove()\n\t\t\t\t\tself.dom.clickMenu.d.selectAll('*').remove()\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tif (q.NIdata) {\n\t\t\tfor (const [queryKey, ref] of Object.entries(q.NIdata)) {\n\t\t\t\tconst menuDiv = self.dom.clickMenu.d\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('Neuro Image: ' + queryKey)\n\t\t\t\t\t.on('click', async () => {\n\t\t\t\t\t\tself.dom.clickMenu.clear()\n\n\t\t\t\t\t\tconst config = {\n\t\t\t\t\t\t\tchartType: 'brainImaging',\n\t\t\t\t\t\t\tqueryKey,\n\t\t\t\t\t\t\tsettings: {\n\t\t\t\t\t\t\t\tbrainImaging: {\n\t\t\t\t\t\t\t\t\tbrainImageL: ref.parameters.l,\n\t\t\t\t\t\t\t\t\tbrainImageF: ref.parameters.f,\n\t\t\t\t\t\t\t\t\tbrainImageT: ref.parameters.t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tselectedSampleFileNames: [sample.sample_id + '.nii']\n\t\t\t\t\t\t}\n\t\t\t\t\t\tself.app.dispatch({\n\t\t\t\t\t\t\ttype: 'plot_create',\n\t\t\t\t\t\t\tconfig\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tconst l = self.settings.matrix.controlLabels\n\t\tconst table = table2col({ holder: self.dom.clickMenu.d.append('div').append('span') })\n\n\t\tconst templates = self.state.termdbConfig.urlTemplates\n\t\tif (templates?.sample) {\n\t\t\tconst name = sampleData[templates.sample.namekey] || sampleData.sample || sampleData.row.sample\n\t\t\tconst [c1, c2] = table.addRow()\n\t\t\tc1.html(l.Sample)\n\t\t\tc2.html(\n\t\t\t\t`<a href=\"${templates.sample.base}${name}\" target=\"_blank\">${sampleData.row._ref_.label} ${svgIcons.externalLink}</a>`\n\t\t\t)\n\t\t} else {\n\t\t\tconst [c1, c2] = table.addRow()\n\t\t\tc1.html(l.Sample)\n\t\t\tc2.html(sampleData.row._ref_.label || sampleData.value.sample)\n\t\t}\n\t\tif (sampleData.term?.type == 'geneVariant' && sampleData.tw.q?.type == 'values') {\n\t\t\tif (sampleData.value) {\n\t\t\t\tif (templates?.gene) {\n\t\t\t\t\tconst name = self.data.refs.byTermId[sampleData.tw.$id][templates.gene.namekey]\n\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\tc1.html('Gene')\n\t\t\t\t\tc2.html(\n\t\t\t\t\t\t`<a href=\"${templates.gene.base}${name}\" target=\"_blank\">${sampleData.tw.term.name} ${svgIcons.externalLink}</a>`\n\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\tc1.html('Gene')\n\t\t\t\t\tc2.html(sampleData.term.name)\n\t\t\t\t}\n\n\t\t\t\tconst siblingCellLabels = {}\n\t\t\t\tfor (const c of sampleData.siblingCells) {\n\t\t\t\t\tif (c.$id != sampleData.$id) continue\n\t\t\t\t\tconst v = c.value\n\t\t\t\t\tconst p = v.pairlst\n\t\t\t\t\tconst dtLabel = v.origin ? `${v.origin} ${dt2label[v.dt]}` : dt2label[v.dt]\n\t\t\t\t\tconst label = getLabel(c, v, p)\n\t\t\t\t\tconst color = c.fill == v.color || v.class == 'Blank' ? '' : c.fill\n\n\t\t\t\t\tif (!siblingCellLabels[dtLabel]) {\n\t\t\t\t\t\tsiblingCellLabels[dtLabel] = [{ label, color }]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsiblingCellLabels[dtLabel].push({ label, color })\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const [dtLabel, classArray] of Object.entries(siblingCellLabels).sort((a, b) => b.length - a.length)) {\n\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\tc1.html(dtLabel)\n\t\t\t\t\tc2.html(`<span style=\"display:inline-block; width:12px; height:12px; background-color:${classArray[0].color}\" ></span>\n\t\t\t\t\t\t${classArray[0].label}`)\n\t\t\t\t\tfor (const classType of classArray.slice(1)) {\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('')\n\t\t\t\t\t\tc2.html(`<span style=\"display:inline-block; width:12px; height:12px; background-color:${classType.color}\" ></span>\n\t\t\t\t\t\t\t${classType.label}`)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (sampleData.term) {\n\t\t\tlet survivalInfo\n\t\t\tif (sampleData.term.type == TermTypes.SURVIVAL && sampleData.exitCodeKey) {\n\t\t\t\tsurvivalInfo = sampleData.term.values?.[sampleData.exitCodeKey]?.label || sampleData.exitCodeKey\n\t\t\t}\n\n\t\t\tif (survivalInfo || sampleData.convertedValueLabel || sampleData.label || sampleData.label === 0) {\n\t\t\t\t// show term value row only when not undefined\n\t\t\t\tif (sampleData.term.type == TermTypes.GENE_EXPRESSION) {\n\t\t\t\t\t{\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('Gene')\n\t\t\t\t\t\tc2.html(sampleData.term.name)\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tconst colorSquare =\n\t\t\t\t\t\t\t(sampleData.tw?.q?.convert2ZScore && sampleData.tw.q.mode == 'continuous') ||\n\t\t\t\t\t\t\tsampleData.tw.q.mode !== 'continuous'\n\t\t\t\t\t\t\t\t? `<span style=\"display:inline-block; width:12px; height:12px; background-color:${\n\t\t\t\t\t\t\t\t\t\tsampleData.fill == '#fff' || sampleData.fill == 'transparent' ? '' : sampleData.fill\n\t\t\t\t\t\t\t\t }\" ></span>`\n\t\t\t\t\t\t\t\t: ''\n\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('Gene Expression')\n\t\t\t\t\t\tc2.html(\n\t\t\t\t\t\t\t`${colorSquare} ${sampleData.convertedValueLabel || sampleData.label}${\n\t\t\t\t\t\t\t\tsampleData.tw?.q?.convert2ZScore && sampleData.tw.q.mode == 'continuous' && sampleData.zscoreLabel\n\t\t\t\t\t\t\t\t\t? sampleData.zscoreLabel\n\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t}`\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t} else if (sampleData.term.type == TermTypes.METABOLITE_INTENSITY) {\n\t\t\t\t\t{\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('Metabolite')\n\t\t\t\t\t\tc2.html(sampleData.term.name)\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tconst colorSquare =\n\t\t\t\t\t\t\t(sampleData.tw?.q?.convert2ZScore && sampleData.tw.q.mode == 'continuous') ||\n\t\t\t\t\t\t\tsampleData.tw.q.mode !== 'continuous'\n\t\t\t\t\t\t\t\t? `<span style=\"display:inline-block; width:12px; height:12px; background-color:${\n\t\t\t\t\t\t\t\t\t\tsampleData.fill == '#fff' || sampleData.fill == 'transparent' ? '' : sampleData.fill\n\t\t\t\t\t\t\t\t }\" ></span>`\n\t\t\t\t\t\t\t\t: ''\n\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('Metabolite Intensity')\n\t\t\t\t\t\tc2.html(\n\t\t\t\t\t\t\t`${colorSquare} ${sampleData.convertedValueLabel || sampleData.label}${\n\t\t\t\t\t\t\t\tsampleData.tw?.q?.convert2ZScore && sampleData.tw.q.mode == 'continuous' && sampleData.zscoreLabel\n\t\t\t\t\t\t\t\t\t? sampleData.zscoreLabel\n\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t}`\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t} else if (sampleData.term.type == TermTypes.PROTEOME_ABUNDANCE) {\n\t\t\t\t\t{\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('Gene')\n\t\t\t\t\t\tc2.html(sampleData.term.name)\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tconst colorSquare =\n\t\t\t\t\t\t\t(sampleData.tw?.q?.convert2ZScore && sampleData.tw.q.mode == 'continuous') ||\n\t\t\t\t\t\t\tsampleData.tw.q.mode !== 'continuous'\n\t\t\t\t\t\t\t\t? `<span style=\"display:inline-block; width:12px; height:12px; background-color:${\n\t\t\t\t\t\t\t\t\t\tsampleData.fill == '#fff' || sampleData.fill == 'transparent' ? '' : sampleData.fill\n\t\t\t\t\t\t\t\t }\" ></span>`\n\t\t\t\t\t\t\t\t: ''\n\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('Protein Abundance')\n\t\t\t\t\t\tc2.html(\n\t\t\t\t\t\t\t`${colorSquare} ${sampleData.convertedValueLabel || sampleData.label}${\n\t\t\t\t\t\t\t\tsampleData.tw?.q?.convert2ZScore && sampleData.tw.q.mode == 'continuous' && sampleData.zscoreLabel\n\t\t\t\t\t\t\t\t\t? sampleData.zscoreLabel\n\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t}`\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t} else if (sampleData.term.type == TermTypes.SURVIVAL) {\n\t\t\t\t\t{\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html(sampleData.term.name)\n\t\t\t\t\t\tc2.html(`<span style=\"display:inline-block; width:12px; height:12px; background-color:${\n\t\t\t\t\t\t\tsampleData.fill == '#fff' || sampleData.fill == 'transparent' ? '' : sampleData.fill\n\t\t\t\t\t\t}\" ></span>\n\t\t\t\t\t\t\t${survivalInfo || sampleData.label}`)\n\t\t\t\t\t}\n\t\t\t\t\tconst timeToEventKey =\n\t\t\t\t\t\t'Time to Event: ' +\n\t\t\t\t\t\t(sampleData.timeToEventKey\n\t\t\t\t\t\t\t? sampleData.timeToEventKey + (sampleData.term.unit ? ` ${sampleData.term.unit}` : '')\n\t\t\t\t\t\t\t: (sampleData.convertedValueLabel || sampleData.label) +\n\t\t\t\t\t\t\t (sampleData.tw?.q?.convert2ZScore && sampleData.tw.q.mode == 'continuous' && sampleData.zscoreLabel\n\t\t\t\t\t\t\t\t\t? sampleData.zscoreLabel\n\t\t\t\t\t\t\t\t\t: ''))\n\t\t\t\t\t{\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('')\n\t\t\t\t\t\tc2.html(timeToEventKey)\n\t\t\t\t\t}\n\t\t\t\t} else if (sampleData.term.type == TermTypes.TERM_COLLECTION) {\n\t\t\t\t\tconst renderedValues = sampleData.row[sampleData.$id].renderedValues\n\t\t\t\t\tconst sortedRenderedValues = renderedValues.filter(rv => rv.value !== 0).sort((a, b) => b.value - a.value)\n\n\t\t\t\t\tfor (const renderedValue of sortedRenderedValues) {\n\t\t\t\t\t\tconst colorSquare = `<span style=\"display:inline-block; width:12px; height:12px; background-color:${renderedValue.color}\"></span>`\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html(`${colorSquare} ${renderedValue.label}`)\n\t\t\t\t\t\tc2.html(`${renderedValue.value.toFixed(2)}%`)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst colorSquare =\n\t\t\t\t\t\t(sampleData.tw?.q?.convert2ZScore && sampleData.tw.q.mode == 'continuous') ||\n\t\t\t\t\t\tsampleData.tw.q.mode !== 'continuous'\n\t\t\t\t\t\t\t? `<span style=\"display:inline-block; width:12px; height:12px; background-color:${\n\t\t\t\t\t\t\t\t\tsampleData.fill == '#fff' || sampleData.fill == 'transparent' ? '' : sampleData.fill\n\t\t\t\t\t\t\t }\" ></span>`\n\t\t\t\t\t\t\t: ''\n\n\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\tc1.html(sampleData.term.name)\n\t\t\t\t\tc2.html(\n\t\t\t\t\t\t`${colorSquare} ${sampleData.convertedValueLabel || sampleData.label}${\n\t\t\t\t\t\t\tsampleData.tw?.q?.convert2ZScore && sampleData.tw.q.mode == 'continuous' && sampleData.zscoreLabel\n\t\t\t\t\t\t\t\t? sampleData.zscoreLabel\n\t\t\t\t\t\t\t\t: ''\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\tself.dom.clickMenu.show(event.clientX, event.clientY, false, true)\n\t}\n\n\tself.legendClick = function () {}\n\n\tself.svgMousemove = function (event) {\n\t\tif (!self.dragged) return\n\t\tconst s = self.config.settings.matrix\n\t\tconst d = self.dragged\n\t\tconst x2 = !s.transpose ? d.x : d.x - d.clientX + event.clientX\n\t\tconst y2 = !s.transpose ? d.y - d.clientY + event.clientY : d.y\n\t\td.clone.attr('transform', `translate(${x2},${y2})`)\n\t}\n\n\tself.svgMouseup = function (event) {\n\t\tif (!self.dragged) return\n\t\tself.dragged.clone.remove()\n\t\tdelete self.dragged\n\t\tdelete self.clicked\n\t}\n\n\tself.getVisibleCenterCell = function (dx) {\n\t\t//const s = self.settings.matrix\n\t\tconst d = self.dimensions\n\t\tif (d.seriesXoffset <= 0 && d.mainw >= d.zoomedMainW) {\n\t\t\treturn self.sampleOrder[Math.floor(self.sampleOrder.length / 2)]\n\t\t}\n\t\tconst w = 0.5 * d.mainw - d.seriesXoffset - dx\n\t\tconst i = Math.round(w / d.dx)\n\t\treturn self.sampleOrder[i]\n\t}\n\n\t//setSampleActions(self)\n\tsetTermActions(self)\n\tsetTermGroupActions(self)\n\tsetSampleGroupActions(self)\n\tsetZoomPanActions(self)\n\tsetResizeHandler(self)\n\tsetLengendActions(self)\n\tsetMutationSelectionActions(self)\n}\n\nfunction setResizeHandler(self) {\n\tlet resizeId\n\tselect(window).on(`resize.sjpp-${self.id}`, () => {\n\t\tif (resizeId) clearTimeout(resizeId)\n\t\tif (self.dimensions && self.layout) resizeId = setTimeout(resize, 200)\n\t})\n\n\tfunction resize() {\n\t\t// !!! this.abortCtl.abort()\n\t\tif (self.dimensions && self.layout) self.main()\n\t}\n}\n\nfunction setTermActions(self) {\n\tsetLabelDragEvents(self, 'term')\n\n\tself.setPill = function (appState) {\n\t\t// will reuse a pill instance to show term edit menu\n\t\tself.pill = termsettingInit({\n\t\t\ttip: self.customTipApi,\n\t\t\tmenuOptions: 'all',\n\t\t\tmenuLayout: 'horizontal',\n\t\t\tvocabApi: self.app.vocabApi,\n\t\t\tvocab: appState.vocab,\n\t\t\tactiveCohort: appState.activeCohort,\n\t\t\tnumericEditMenuVersion: ['discrete', 'continuous'],\n\t\t\tusecase: { target: 'matrix' },\n\n\t\t\tgetBodyParams: () => {\n\t\t\t\tconst currentGeneNames = []\n\t\t\t\tfor (const g of self.config.termgroups) {\n\t\t\t\t\t// only consider hierCluster group for hierCluster plot\n\t\t\t\t\tif (self.chartType == 'hierCluster' && g.type != 'hierCluster') continue\n\n\t\t\t\t\tfor (const t of g.lst) {\n\t\t\t\t\t\tif (t.term.chr) {\n\t\t\t\t\t\t\tcurrentGeneNames.push(`${t.term.chr}:${t.term.start}-${t.term.stop}`)\n\t\t\t\t\t\t} else if (t.term.gene) {\n\t\t\t\t\t\t\tcurrentGeneNames.push(t.term.gene)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (currentGeneNames.length) return { currentGeneNames }\n\t\t\t\treturn {}\n\t\t\t},\n\n\t\t\t//holder: {}, //self.dom.inputTd.append('div'),\n\t\t\t//debug: opts.debug,\n\t\t\trenderAs: 'none',\n\t\t\tcallback: tw => {\n\t\t\t\t// data is object with only one needed attribute: q, never is null\n\t\t\t\tif (tw && !tw.q) throw 'data.q{} missing from pill callback'\n\t\t\t\tconst t = self.activeLabel || self.lastactiveLabel\n\t\t\t\tif (tw) {\n\t\t\t\t\t// users could modify the term label, need to update tw.label to the latest label\n\t\t\t\t\ttw.label = t.tw.label\n\t\t\t\t\tif (t && t.tw) tw.$id = t.tw.$id\n\t\t\t\t\tconst legendValueFilter = self.mayRemoveTvsEntry(tw)\n\t\t\t\t\tself.pill.main(Object.assign({ filter: self.state.filter }, tw))\n\t\t\t\t\tself.app.dispatch({\n\t\t\t\t\t\ttype: 'plot_nestedEdits',\n\t\t\t\t\t\tid: self.opts.id,\n\t\t\t\t\t\tedits: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tnestedKeys: ['termgroups', t.grpIndex, 'lst', t.lstIndex],\n\t\t\t\t\t\t\t\tvalue: tw\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tnestedKeys: ['legendValueFilter'],\n\t\t\t\t\t\t\t\tvalue: legendValueFilter\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tself.removeTerm()\n\t\t\t\t}\n\t\t\t\tself.dom.tip.hide()\n\t\t\t}\n\t\t})\n\t}\n\n\tself.getMenuOptions = function (t) {\n\t\treturn self.config.chartType == 'hierCluster' && t.grp.type === 'hierCluster'\n\t\t\t? '{remove,}'\n\t\t\t: t.tw.term.type == 'geneVariant'\n\t\t\t? '{edit,replace,remove}'\n\t\t\t: t.tw.term.type == 'termCollection'\n\t\t\t? '{edit,replace,remove}'\n\t\t\t: '*'\n\t}\n\n\tself.showTermMenu = async function (event) {\n\t\tconst t = event.target.__data__\n\t\tif (!t || !t.tw || !t.grp) return\n\t\tconst s = self.settings.matrix\n\t\tconst l = s.controlLabels\n\t\tself.activeLabel = t\n\t\tself.dom.menutop.style('display', '').selectAll('*').remove()\n\t\tself.dom.menubody.style('padding', 0).selectAll('*').remove()\n\n\t\t// display loading... upon clicking a term row label\n\t\tconst termMenuWaitDiv = self.dom.menutop.append('div').style('display', 'block').text('Loading...')\n\t\tself.dom.tip.show(event.clientX - 20, event.clientY - 20)\n\n\t\tconst pillArg = Object.assign(\n\t\t\t{ menuOptions: self.getMenuOptions(t), filter: self.state.filter },\n\t\t\tt.tw ? t.tw : { term: null, q: null }\n\t\t)\n\n\t\tmayAddEditMsg(pillArg, t)\n\n\t\tawait self.pill.main(pillArg)\n\n\t\ttermMenuWaitDiv.remove()\n\n\t\tself.dom.shortcutDiv = self.dom.menutop.append('div').style('z-index', 10000)\n\t\tself.showShortcuts(t, self.dom.shortcutDiv)\n\t\tself.dom.twMenuDiv = self.dom.menutop.append('div')\n\t\tconst labelEditDiv = self.dom.twMenuDiv.append('div').style('text-align', 'center')\n\t\tif (t.tw?.term?.type) labelEditDiv.append('span').text(`${l.Term} `)\n\n\t\tconst twlabel = t.tw.label || t.tw.term.name\n\t\tconst vartype =\n\t\t\tt.tw.term.type == 'geneVariant' || t.tw.term.type == TermTypes.GENE_EXPRESSION\n\t\t\t\t? 'gene'\n\t\t\t\t: t.tw.term.type == TermTypes.METABOLITE_INTENSITY\n\t\t\t\t? 'metabolite'\n\t\t\t\t: t.tw.term.type == TermTypes.PROTEOME_ABUNDANCE\n\t\t\t\t? 'protein'\n\t\t\t\t: 'variable'\n\n\t\tif (t.tw?.term?.type)\n\t\t\tself.dom.twLabelInput = labelEditDiv\n\t\t\t\t.append('input')\n\t\t\t\t.attr('type', 'text')\n\t\t\t\t.attr('size', twlabel.length + 3)\n\t\t\t\t.attr('aria-label', `Type to edit the ${vartype} label`)\n\t\t\t\t.style('padding', '1px 5px')\n\t\t\t\t.style('text-align', 'center')\n\t\t\t\t.property('value', twlabel)\n\t\t\t\t.on('input', () => {\n\t\t\t\t\tconst value = self.dom.twLabelInput.property('value')\n\t\t\t\t\tself.dom.twLabelInput.attr('size', value.length + 3)\n\t\t\t\t\tself.dom.twLabelEditBtn.style('display', value.trim() === twlabel ? 'none' : 'inline')\n\t\t\t\t})\n\n\t\tif (t.tw?.term?.type)\n\t\t\tself.dom.twLabelEditBtn = labelEditDiv\n\t\t\t\t.append('button')\n\t\t\t\t.style('display', 'none')\n\t\t\t\t.style('margin-left', '5px')\n\t\t\t\t.html('submit')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tif (twlabel != self.dom.twLabelInput.property('value').trim()) self.updateTermLabel()\n\t\t\t\t\tself.dom.tip.hide()\n\t\t\t\t})\n\n\t\tif (vartype == 'gene') {\n\t\t\t// is gene, may show extra button for quick data access\n\t\t\tif (t.tw.term.type == 'geneVariant') {\n\t\t\t\t// lollipop btn for plotting gene-level mut data\n\t\t\t\tself.dom.gbButton = labelEditDiv\n\t\t\t\t\t.append('button')\n\t\t\t\t\t.style('text-align', 'center')\n\t\t\t\t\t.html('Lollipop')\n\t\t\t\t\t.attr('data-testid', 'oncoMatrix_cell_lollipop_button')\n\t\t\t\t\t.on('click', async () => {\n\t\t\t\t\t\tawait self.launchGB(t)\n\t\t\t\t\t\tself.dom.tip.hide()\n\t\t\t\t\t})\n\t\t\t}\n\t\t\t// might add new btn to support other type, e.g. boxplot for geneexp\n\t\t}\n\n\t\t// Add gene summary button\n\t\tif (self.state.termdbConfig.urlTemplates?.gene && vartype == 'gene') {\n\t\t\tconst templates = self.state.termdbConfig.urlTemplates\n\t\t\tself.dom.geneSummaryLink = labelEditDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.style('margin-left', '5px')\n\t\t\t\t.style('text-align', 'center')\n\t\t\t\t.style('color', 'rgb(0, 0, 238)')\n\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t.style('text-decoration', 'underline')\n\t\t\t\t.html(`${templates.gene.defaultText || ''}${svgIcons.externalLink}`)\n\t\t\t\t.on('click', async () => {\n\t\t\t\t\tconst name = self.data.refs.byTermId[t.tw.$id][templates.gene.namekey]\n\t\t\t\t\twindow.open(`${templates.gene.base}${name}`, '_blank')\n\t\t\t\t\tself.dom.tip.hide()\n\t\t\t\t})\n\t\t}\n\n\t\tconst twSpecificSettings = self.config.settings.matrix.twSpecificSettings\n\t\tif (!twSpecificSettings[t.tw.$id]) twSpecificSettings[t.tw.$id] = {}\n\t\tconst twSettings = twSpecificSettings[t.tw.$id]\n\n\t\tconst rowHeightColorEditDiv = self.dom.twMenuDiv.append('div').style('text-align', 'center')\n\t\tif (t.grp?.type !== 'hierCluster' && t.tw?.q?.mode == 'continuous') {\n\t\t\trowHeightColorEditDiv.append('span').text('Row Height')\n\t\t\tself.dom.twRowheightInput = rowHeightColorEditDiv\n\t\t\t\t.append('input')\n\t\t\t\t.attr('type', 'number')\n\t\t\t\t.attr('aria-label', `edit the row height`)\n\t\t\t\t.style('padding', '1px 5px')\n\t\t\t\t.style('text-align', 'center')\n\t\t\t\t.style('width', '60px')\n\t\t\t\t.property('value', twSettings.contBarH)\n\t\t\t\t.on('keyup', async event => {\n\t\t\t\t\tif (event.code != 'Enter') return\n\t\t\t\t\tconst newBarh = parseFloat(self.dom.twRowheightInput.node().value)\n\t\t\t\t\ttwSettings.contBarH = newBarh\n\n\t\t\t\t\tself.app.dispatch({\n\t\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\t\tid: self.opts.id,\n\t\t\t\t\t\tconfig: { settings: { matrix: { twSpecificSettings } } }\n\t\t\t\t\t})\n\t\t\t\t\tself.dom.tip.hide()\n\t\t\t\t})\n\t\t}\n\n\t\tif (\n\t\t\tt.grp?.type !== 'hierCluster' &&\n\t\t\tt.tw?.q?.mode == 'continuous' &&\n\t\t\tt.tw.term.type != 'survival' &&\n\t\t\tt.tw.term.type != 'termCollection' &&\n\t\t\tt.tw.q.convert2ZScore != true\n\t\t) {\n\t\t\trowHeightColorEditDiv.append('span').text('Bar Color')\n\n\t\t\tself.dom.twRowColorInput = rowHeightColorEditDiv\n\t\t\t\t.append('input')\n\t\t\t\t.attr('type', 'color')\n\t\t\t\t.attr('aria-label', `change the bar color`)\n\t\t\t\t.style('padding', '1px 5px')\n\t\t\t\t.attr('value', twSettings.contBarColor)\n\t\t\t\t.on('change', async () => {\n\t\t\t\t\tconst color = self.dom.twRowColorInput.node().value\n\t\t\t\t\ttwSettings.contBarColor = color\n\t\t\t\t\tself.app.dispatch({\n\t\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\t\tid: self.opts.id,\n\t\t\t\t\t\tconfig: { settings: { matrix: { twSpecificSettings } } }\n\t\t\t\t\t})\n\t\t\t\t\tself.dom.tip.hide()\n\t\t\t\t})\n\t\t}\n\n\t\tif (self.config.settings.matrix.maxSample && t.counts.samples && t.allCounts.samples) {\n\t\t\tself.dom.twMenuDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('text-align', 'center')\n\t\t\t\t.style('margin', '5px')\n\t\t\t\t.text(`#${l.samples}: ${t.counts.samples} rendered, ${t.allCounts.samples - t.counts.samples} not rendered`)\n\t\t}\n\n\t\tself.dom.twMenuBar = self.dom.twMenuDiv.append('div').style('text-align', 'center')\n\t\t//menuBtnsDiv.on('click', () => menuBtnsDiv.style('display', 'none'))\n\t\t// must remember event target since it's cleared after async-await\n\t\tconst clickedElem = event.target\n\t\tself.pill.showMenu(event, clickedElem, self.dom.twMenuBar)\n\n\t\tself.dom.grpMenuDiv = self.dom.menutop.append('div').style('margin-top', '10px')\n\t\t//self.showTermGroupInputs(self.dom.grpMenuDiv)\n\t\t//self.dom.tip.showunder(clickedElem)\n\t\t//self.dom.tip.show(event.clientX - 20, event.clientY - 20)\n\t}\n\n\tself.launchGB = t => {\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_create',\n\t\t\tconfig: {\n\t\t\t\tchartType: 'genomeBrowser',\n\t\t\t\tsnvindel: { shown: true },\n\t\t\t\tgeneSearchResult: { geneSymbol: t.tw.term.name }\n\t\t\t}\n\t\t})\n\t}\n\n\tself.updateTermLabel = () => {\n\t\tconst value = self.dom.twLabelInput.property('value').trim()\n\t\tconst t = self.activeLabel\n\t\tif (t.tw.label === value) return\n\t\tt.tw.label = value\n\t\tt.grp.lst[t.lstIndex] = t.tw\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_nestedEdits',\n\t\t\tid: self.opts.id,\n\t\t\tedits: [\n\t\t\t\t{\n\t\t\t\t\tnestedKeys: ['termgroups', t.grpIndex],\n\t\t\t\t\tvalue: t.grp\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t}\n\n\tself.showShortcuts = (t, div) => {\n\t\tconst l = self.settings.matrix.controlLabels\n\t\tdiv.style('text-align', 'center')\n\t\t//div.append('span').html('Shortcuts: ')\n\n\t\t// sorting icons\n\t\tconst vartype =\n\t\t\tt.tw.term.type == 'geneVariant' || t.tw.term.type == TermTypes.GENE_EXPRESSION\n\t\t\t\t? 'gene'\n\t\t\t\t: t.tw.term.type == TermTypes.METABOLITE_INTENSITY\n\t\t\t\t? 'metabolite'\n\t\t\t\t: t.tw.term.type == TermTypes.PROTEOME_ABUNDANCE\n\t\t\t\t? 'protein'\n\t\t\t\t: 'variable'\n\t\tconst sortRevertable = self.type != 'hierCluster' && t.tw.sortSamples?.priority !== undefined\n\t\tdiv\n\t\t\t.append('span')\n\t\t\t.selectAll('div')\n\t\t\t.data(\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\ticon: 'corner',\n\t\t\t\t\t\ttitle: `Sort ${l.samples} against this ${vartype}, and position this ${vartype} at the top left corner`,\n\t\t\t\t\t\tdisabled:\n\t\t\t\t\t\t\tt.grp.lst.length < 1 || (t.index === 0 && t.tw.sortSamples?.priority === 0) || self.type == 'hierCluster',\n\t\t\t\t\t\thandler: self.sortSamplesAgainstCornerTerm\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ticon: 'left',\n\t\t\t\t\t\ttitle: `Sort ${l.samples} against this ${vartype}`,\n\t\t\t\t\t\t// should not disable sorting when hierCluster has top dendrogram\n\t\t\t\t\t\tdisabled: t.tw.sortSamples?.priority === 0 && !self.config.settings.hierCluster?.clusterSamples,\n\t\t\t\t\t\tfill: sortRevertable ? 'rgba(200,100,100,0.5)' : '',\n\t\t\t\t\t\thandler: sortRevertable ? self.unsortSamplesAgainstTerm : self.sortSamplesAgainstTerm\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\thtml: ' | '\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ticon: 'up',\n\t\t\t\t\t\ttitle: `Move this ${vartype} up`,\n\t\t\t\t\t\tdisabled: t.index === 0 || self.type == 'hierCluster',\n\t\t\t\t\t\thandler: self.moveTermUp\n\t\t\t\t\t},\n\n\t\t\t\t\t{\n\t\t\t\t\t\ticon: 'down',\n\t\t\t\t\t\ttitle: `Move this ${vartype} down`,\n\t\t\t\t\t\tdisabled: t.index === t.grp.lst.length - 1 || self.type == 'hierCluster',\n\t\t\t\t\t\thandler: self.moveTermDown\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\td => d.icon\n\t\t\t)\n\t\t\t.enter()\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.each(function (d) {\n\t\t\t\tconst elem = select(this)\n\t\t\t\tif (d.icon) icons[d.icon](elem, d)\n\t\t\t\telse elem.html(d.html)\n\t\t\t})\n\t}\n\n\tself.sortSamplesAgainstCornerTerm = event => {\n\t\tevent.stopPropagation()\n\t\tconst t = self.activeLabel\n\t\tconst termgroups = JSON.parse(JSON.stringify(self.termGroups))\n\t\tconst grp = termgroups[t.grpIndex]\n\t\tconst [tcopy, sorterTerms] = self.getSorterTerms(t)\n\t\tconst removed = grp.lst.splice(t.lstIndex, 1)\n\t\tgrp.lst.unshift(tcopy)\n\t\tgrp.sortTermsBy = 'asListed'\n\n\t\tfor (const g of termgroups) {\n\t\t\tif (g == grp) {\n\t\t\t\tfor (const [priority, tw] of g.lst.entries()) {\n\t\t\t\t\t// the `by: 'values'` may be overridden by self.config.settings.matrix.sortPriority, if available\n\t\t\t\t\tif (!tw.sortSamples) tw.sortSamples = { priority, by: 'values' }\n\t\t\t\t\ttw.sortSamples.priority = priority\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (const tw of g.lst) {\n\t\t\t\t\tif (!tw.sortSamples) continue\n\t\t\t\t\ttw.sortSamples.priority = sorterTerms.findIndex(t => t.tw?.$id === tw.$id) + grp.lst.length\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: self.opts.id,\n\t\t\tconfig: {\n\t\t\t\ttermgroups,\n\t\t\t\tsettings: {\n\t\t\t\t\tmatrix: {\n\t\t\t\t\t\tsortTermsBy: 'asListed'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\tself.dom.tip.hide()\n\t}\n\n\tself.sortSamplesAgainstTerm = event => {\n\t\tevent?.stopPropagation()\n\t\tconst t = self.activeLabel\n\t\tconst [tcopy] = self.getSorterTerms(t)\n\t\tif (t.grp.type == 'hierCluster') tcopy.sortSamples.by = 'values'\n\t\tconst termgroups = self.termGroups\n\t\ttermgroups[t.grpIndex].lst[t.lstIndex] = tcopy\n\t\tfor (const g of termgroups) {\n\t\t\tfor (const tw of g.lst) {\n\t\t\t\tif (!tw.sortSamples) continue\n\t\t\t\tif (tw.$id === t.tw.$id) {\n\t\t\t\t\ttw.sortSamples.priority = 0\n\t\t\t\t} else tw.sortSamples.priority += 1\n\t\t\t}\n\t\t}\n\n\t\tif (self.chartType == 'hierCluster') {\n\t\t\t// remove top dendrogram after sortting samples in hierCluster\n\t\t\tself.config.settings.hierCluster.clusterSamples = false\n\t\t\tself.config.settings.hierCluster.yDendrogramHeight = 0\n\t\t}\n\n\t\tself.config.termgroups = termgroups\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: self.opts.id,\n\t\t\tconfig: self.config\n\t\t})\n\t\tself.dom.tip.hide()\n\t}\n\n\tself.unsortSamplesAgainstTerm = (event, d) => {\n\t\tevent.stopPropagation()\n\t\tconst t = self.activeLabel || d.data.t\n\t\tconst [tcopy] = self.getSorterTerms(t)\n\t\tconst termgroups = self.termGroups\n\t\ttermgroups[t.grpIndex].lst[t.lstIndex] = tcopy\n\t\tfor (const g of termgroups) {\n\t\t\tfor (const tw of g.lst) {\n\t\t\t\tif (!tw.sortSamples) continue\n\t\t\t\tif (tw.$id === t.tw.$id) {\n\t\t\t\t\tdelete tw.sortSamples //.priority\n\t\t\t\t} else if ('sortSamples' in tw && 'priority' in tw.sortSamples) {\n\t\t\t\t\tif (tw.sortSamples.priority > t.sortSamples?.priority) tw.sortSamples.priority -= 1\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: self.opts.id,\n\t\t\tconfig: {\n\t\t\t\ttermgroups\n\t\t\t}\n\t\t})\n\t\tself.dom.tip.hide()\n\t}\n\n\tself.moveTermUp = event => {\n\t\tevent.stopPropagation()\n\t\tconst t = self.activeLabel\n\t\tconst grp = self.termGroups[t.grpIndex]\n\t\tgrp.lst.splice(t.lstIndex, 1)\n\t\tgrp.lst.splice(t.lstIndex - 1, 0, t.tw)\n\t\tgrp.sortTermsBy = 'asListed'\n\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_nestedEdits',\n\t\t\tid: self.opts.id,\n\t\t\tedits: [\n\t\t\t\t{\n\t\t\t\t\tnestedKeys: ['termgroups', t.grpIndex],\n\t\t\t\t\tvalue: grp\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnestedKeys: ['settings', 'matrix', 'sortTermsBy'],\n\t\t\t\t\tvalue: 'asListed'\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t\tself.dom.tip.hide()\n\t}\n\n\tself.moveTermDown = event => {\n\t\tevent.stopPropagation()\n\t\tconst t = self.activeLabel\n\t\tconst grp = self.termGroups[t.grpIndex]\n\t\tgrp.lst.splice(t.lstIndex, 1)\n\t\tgrp.lst.splice(t.lstIndex + 1, 0, t.tw)\n\t\tgrp.sortTermsBy = 'asListed'\n\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_nestedEdits',\n\t\t\tid: self.opts.id,\n\t\t\tedits: [\n\t\t\t\t{\n\t\t\t\t\tnestedKeys: ['termgroups', t.grpIndex],\n\t\t\t\t\tvalue: grp\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnestedKeys: ['settings', 'matrix', 'sortTermsBy'],\n\t\t\t\t\tvalue: 'asListed'\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t\tself.dom.tip.hide()\n\t}\n\n\tself.showTermEditMenu = async () => {\n\t\tself.dom.menubody.selectAll('*').remove()\n\t\tconst t = self.activeLabel\n\t\tconst s = self.config.settings.matrix\n\t\tconst l = s.controlLabels\n\n\t\tif (t.tw.term.type == 'geneVariant') {\n\t\t\tconst div = self.dom.menubody.append('div')\n\t\t\tconst label = div.append('label')\n\t\t\tlabel.append('span').html(`Minimum # ${l.samples} to be visible`)\n\n\t\t\tconst minNumSamples = 'minNumSamples' in t.tw ? t.tw.minNumSamples : ''\n\t\t\tconst input = label\n\t\t\t\t.append('input')\n\t\t\t\t.attr('type', 'number')\n\t\t\t\t.style('margin-left', '5px')\n\t\t\t\t.style('width', '50px')\n\t\t\t\t.property('value', minNumSamples)\n\n\t\t\tdiv\n\t\t\t\t.append('div')\n\t\t\t\t.append('button')\n\t\t\t\t.html('Submit')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tconst value = input.property('value')\n\t\t\t\t\tif (value === minNumSamples) return\n\t\t\t\t\tif (value === '') {\n\t\t\t\t\t\tdelete t.tw.minNumSamples\n\t\t\t\t\t} else {\n\t\t\t\t\t\tt.tw.minNumSamples = Number(value)\n\t\t\t\t\t}\n\n\t\t\t\t\tself.app.dispatch({\n\t\t\t\t\t\ttype: 'plot_nestedEdits',\n\t\t\t\t\t\tid: self.opts.id,\n\t\t\t\t\t\tedits: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tnestedKeys: ['termgroups', t.grpIndex, 'lst', t.lstIndex],\n\t\t\t\t\t\t\t\tvalue: t.tw\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t})\n\t\t\t\t\tself.dom.tip.hide()\n\t\t\t\t})\n\t\t} else {\n\t\t\tawait self.pill.main(\n\t\t\t\tObject.assign({ menuOptions: self.getMenuOptions(t), filter: self.state.filter }, self.activeLabel.tw)\n\t\t\t)\n\t\t\tself.pill.showMenu()\n\t\t}\n\t}\n\n\tself.showMoveMenu = async () => {\n\t\tself.dom.menubody.selectAll('*').remove()\n\t\tself.termBeingMoved = self.activeLabel\n\t\tconst div = self.dom.menubody.append('div')\n\t\tdiv.append('span').html('Click on another label')\n\t\tself.makeInsertPosRadios(div)\n\t}\n\n\tself.showTermInsertMenu = () => {\n\t\t//self.dom.tip.clear()\n\t\t//self.dom.menutop = self.dom.tip.d.append('div')\n\t\tself.dom.menubody.selectAll('*').remove()\n\n\t\tself.dom.editbtns = self.dom.menubody.append('div')\n\t\tself.dom.editbody = self.dom.menubody.append('div')\n\n\t\tif (self.activeLabel.grp.type == 'hierCluster') {\n\t\t\t// for hierCluster term group, only allow to add current hierCluster term to current group\n\t\t\tself.showDictTermSelection(self.dom.editbody)\n\t\t\treturn\n\t\t}\n\n\t\tconst grpNameDiv = self.dom.editbtns.append('div').style('margin', '10px 5px')\n\t\tgrpNameDiv.append('label').html(`Insert genes or variables in `)\n\t\tself.dom.grpNameSelect = grpNameDiv.append('select').on('change', () => {\n\t\t\tconst value = self.dom.grpNameSelect.property('value')\n\t\t\tself.dom.grpNameTextInput\n\t\t\t\t.property('disabled', value == 'current')\n\t\t\t\t.property('value', value == 'current' ? self.activeLabel.grp.name : newGrpName)\n\t\t})\n\t\tself.dom.grpNameSelect\n\t\t\t.selectAll('option')\n\t\t\t.data([\n\t\t\t\t{ label: 'current', value: 'current', selected: true },\n\t\t\t\t{ label: 'new', value: 'new' }\n\t\t\t])\n\t\t\t.enter()\n\t\t\t.append('option')\n\t\t\t.attr('selected', d => d.selected)\n\t\t\t.html(d => d.label)\n\n\t\tgrpNameDiv.append('span').html(' group: ')\n\n\t\tlet newGrpName = ''\n\t\tself.dom.grpNameTextInput = grpNameDiv\n\t\t\t.append('input')\n\t\t\t.attr('type', 'text')\n\t\t\t.property('disabled', true)\n\t\t\t.property('value', self.activeLabel.grp.name)\n\t\t\t.on('change', () => {\n\t\t\t\tconst name = self.dom.grpNameTextInput.property('value')\n\t\t\t\tif (name == self.activeLabel.grp.name) {\n\t\t\t\t} else {\n\t\t\t\t\tnewGrpName = self.dom.grpNameTextInput.property('value')\n\t\t\t\t}\n\t\t\t})\n\n\t\tself.makeInsertPosRadios(self.dom.editbtns)\n\n\t\t//const termSrcDiv = self.dom.editbtns.append('div')\n\t\t//termSrcDiv.append('span').html('Source ')\n\t\tself.showDictTermSelection(self.dom.editbody)\n\t}\n\n\tself.makeInsertPosRadios = function (div) {\n\t\tconst insertPosInput = div\n\t\t\t.append('div') /*.style('display', 'inline-block')*/\n\t\t\t.style('margin', '10px 5px')\n\t\tinsertPosInput.append('div').style('display', 'inline-block').style('padding-right', '10px').html('Insert ')\n\n\t\tconst insertRadiosDiv = insertPosInput.append('div').style('display', 'inline-block')\n\n\t\tself.insertRadioId = `sjpp-matrix-${self.id}-insert-pos`\n\t\tconst aboveLabel = insertRadiosDiv.append('label')\n\t\taboveLabel\n\t\t\t.append('input')\n\t\t\t.attr('type', 'radio')\n\t\t\t.attr('value', 'above')\n\t\t\t.property('checked', true)\n\t\t\t.attr('name', self.insertRadioId)\n\t\taboveLabel.append('span').html('above')\n\n\t\tinsertRadiosDiv.append('span').html('  ')\n\n\t\tconst belowLabel = insertRadiosDiv.append('label')\n\t\tbelowLabel.append('input').attr('type', 'radio').attr('value', 'below').attr('name', self.insertRadioId)\n\t\tbelowLabel.append('span').html(' below')\n\t}\n\n\tself.showDictTermSelection = async holder => {\n\t\t//self.dom.dictTermBtn.style('text-decoration', 'underline')\n\t\t//self.dom.textTermBtn.style('text-decoration', '')\n\n\t\tconst usecase = { target: 'matrix', detail: 'termgroups' }\n\t\tif (self.chartType == 'hierCluster') {\n\t\t\tif (\n\t\t\t\tself.config.dataType == TermTypes.METABOLITE_INTENSITY &&\n\t\t\t\t(!self.activeLabel || self.activeLabel.grp.type == 'hierCluster')\n\t\t\t) {\n\t\t\t\tusecase.target = TermTypes.METABOLITE_INTENSITY\n\t\t\t\tusecase.detail = 'term'\n\t\t\t} else if (\n\t\t\t\tself.config.dataType == TermTypes.PROTEOME_ABUNDANCE &&\n\t\t\t\t(!self.activeLabel || self.activeLabel.grp.type == 'hierCluster')\n\t\t\t) {\n\t\t\t\tusecase.target = TermTypes.PROTEOME_ABUNDANCE\n\t\t\t\tusecase.detail = 'term'\n\t\t\t} else {\n\t\t\t\tusecase.target = self.activeLabel.tw.term.type\n\t\t\t\tusecase.detail = 'term'\n\t\t\t}\n\t\t}\n\t\tconst termdb = await import('#termdb/app')\n\t\tholder.selectAll('*').remove()\n\t\ttermdb.appInit({\n\t\t\tholder: holder.append('div'),\n\t\t\tvocabApi: self.app.vocabApi,\n\t\t\tstate: {\n\t\t\t\tvocab: self.state.vocab,\n\t\t\t\tactiveCohort: self.activeCohort,\n\t\t\t\tnav: {\n\t\t\t\t\theader_mode: 'search_only'\n\t\t\t\t},\n\t\t\t\ttree: {\n\t\t\t\t\tusecase\n\t\t\t\t},\n\t\t\t\t...(!self.activeLabel || self.activeLabel.grp.type == 'hierCluster'\n\t\t\t\t\t? { selectedTerms: self.hcTermGroup.lst.map(t => t.term) }\n\t\t\t\t\t: {})\n\t\t\t},\n\t\t\ttree: {\n\t\t\t\tsubmit_lst\n\t\t\t},\n\t\t\tsearch: {\n\t\t\t\thandleGeneVariant: term => submit_lst([term])\n\t\t\t}\n\t\t})\n\t}\n\n\tasync function submit_lst(termlst) {\n\t\tconst newterms = await Promise.all(\n\t\t\ttermlst.map(async _term => {\n\t\t\t\tconst term = structuredClone(_term)\n\t\t\t\tconst tw = 'id' in term ? { id: term.id, term } : { term }\n\t\t\t\tawait fillTermWrapper(tw, self.app.vocabApi)\n\t\t\t\treturn tw\n\t\t\t})\n\t\t)\n\t\tconst t = self.activeLabel\n\t\tconst termgroups = self.termGroups\n\n\t\tconst isMetaboliteIntensityCBut = self.config.dataType == TermTypes.METABOLITE_INTENSITY && !t\n\t\tconst isProteomeAbundanceCBut = self.config.dataType == TermTypes.PROTEOME_ABUNDANCE && !t\n\t\tif (isMetaboliteIntensityCBut || isProteomeAbundanceCBut || t.grp.type == 'hierCluster') {\n\t\t\tconst grp = isMetaboliteIntensityCBut || isProteomeAbundanceCBut ? termgroups[0] : termgroups[t.grpIndex]\n\t\t\t// for hiercluster group, use selected terms as new group.lst\n\t\t\tgrp.lst.splice(0, grp.lst.length, ...newterms)\n\t\t\tself.app.dispatch({\n\t\t\t\ttype: 'plot_nestedEdits',\n\t\t\t\tid: self.opts.id,\n\t\t\t\tedits: [\n\t\t\t\t\t{\n\t\t\t\t\t\tnestedKeys: ['termgroups', isMetaboliteIntensityCBut || isProteomeAbundanceCBut ? 0 : t.grpIndex, 'lst'],\n\t\t\t\t\t\tvalue: grp.lst\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t})\n\t\t} else if (self.dom.grpNameSelect.property('value') == 'current') {\n\t\t\tconst pos = self.insertRadioId && select(`input[name='${self.insertRadioId}']:checked`)?.property('value')\n\t\t\tconst grp = termgroups[t.grpIndex]\n\t\t\tconst i = pos == 'above' ? t.lstIndex : t.lstIndex + 1\n\t\t\t// remove this element\n\t\t\tgrp.lst.splice(i, 0, ...newterms)\n\t\t\tself.app.dispatch({\n\t\t\t\ttype: 'plot_nestedEdits',\n\t\t\t\tid: self.opts.id,\n\t\t\t\tedits: [\n\t\t\t\t\t{\n\t\t\t\t\t\tnestedKeys: ['termgroups', t.grpIndex, 'lst'],\n\t\t\t\t\t\tvalue: grp.lst\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t})\n\t\t} else {\n\t\t\tconst pos = self.insertRadioId && select(`input[name='${self.insertRadioId}']:checked`)?.property('value')\n\t\t\tconst i = pos == 'above' ? t.grpIndex : t.grpIndex + 1\n\t\t\ttermgroups.splice(i, 0, {\n\t\t\t\tname: self.dom.grpNameTextInput.property('value'),\n\t\t\t\tlst: newterms\n\t\t\t})\n\t\t\tself.app.dispatch({\n\t\t\t\ttype: 'plot_edit',\n\t\t\t\tid: self.opts.id,\n\t\t\t\tconfig: { termgroups }\n\t\t\t})\n\t\t}\n\t\tself.dom.tip.hide()\n\t}\n\n\tself.showSortMenu = () => {\n\t\t/*\n\t\t\tsort rows and samples by:\n\t\t\t- #hits\n\n\t\t\tsort samples by #hits against\n\t\t\t- draggable divs of term names\n\n\n\t\t\t-- OR --\n\n\t\t\t[ ] move this row [above || below] [all rows || term names]\n\n\t\t\t[ ] sort samples against this term:\n\t\t\t\t\t// by: *hits _values _mutation class\n\t\t\t\t\t// priority: *first _last _order# [ ]\n\n\t\t\tApply\n\t\t*/\n\n\t\tconst t = self.activeLabel\n\t\tself.dom.menubody.selectAll('*').remove()\n\n\t\tself.dom.menubody.append('div').style('margin-top', '10px').style('text-align', 'center').html(t.tw.term.name)\n\n\t\tself.moveInput = undefined\n\t\t//if (t.grp.lst.length > 1) self.showTermMoveOptions(t)\n\t\tself.showSortOptions(t)\n\t}\n\n\tself.showTermMoveOptions = t => {\n\t\tconst moveDiv = self.dom.menubody.append('div').style('margin-top', '10px')\n\n\t\tconst moveLabel = moveDiv.append('label')\n\t\tself.moveInput = moveLabel.append('input').attr('type', 'checkbox').style('text-align', 'center')\n\n\t\tmoveLabel.append('span').html(` move this row `)\n\n\t\tconst movePos = moveDiv.append('select')\n\t\tmovePos\n\t\t\t.selectAll('option')\n\t\t\t.data([\n\t\t\t\t{ label: 'before', value: 0 },\n\t\t\t\t{ label: 'after', value: 1 }\n\t\t\t])\n\t\t\t.enter()\n\t\t\t.append('option')\n\t\t\t.attr('value', d => d.value)\n\t\t\t.html(d => d.label)\n\n\t\tmoveDiv.append('span').html(' ')\n\n\t\tconst otherTermsInGrp = t.grp.lst\n\t\t\t.filter(tw => tw.$id != t.tw.$id)\n\t\t\t.map(tw => {\n\t\t\t\treturn { label: tw.term.name, value: tw.$id }\n\t\t\t})\n\t\tconst moveTarget = moveDiv.append('select')\n\t\tmoveTarget\n\t\t\t.selectAll('option')\n\t\t\t.data([{ label: 'all', value: '*' }, ...otherTermsInGrp])\n\t\t\t.enter()\n\t\t\t.append('option')\n\t\t\t.attr('value', d => d.value)\n\t\t\t.html(d => d.label)\n\t}\n\n\tself.showSortOptions = t => {\n\t\tconst sortColDiv = self.dom.menubody.append('div').style('margin-top', '10px')\n\t\tconst sortColLabel = sortColDiv.append('label')\n\t\tconst sortColInput = sortColLabel\n\t\t\t.append('input')\n\t\t\t.attr('type', 'checkbox')\n\t\t\t.property('checked', true)\n\t\t\t.style('text-align', 'center')\n\n\t\tconst l = self.settings.matrix.controlLabels\n\t\tsortColLabel.append('span').html(` sort ${l.samples} against (in order of priority):`)\n\n\t\tconst tcopy = self.showSorterTerms(sortColDiv, t)\n\n\t\tself.dom.menubody\n\t\t\t.append('button')\n\t\t\t.html('Apply')\n\t\t\t.on('click', () => {\n\t\t\t\tconst matrix = JSON.parse(JSON.stringify(self.config.settings.matrix)) || {}\n\t\t\t\tdelete tcopy.div\n\t\t\t\tdelete tcopy.up\n\t\t\t\tdelete tcopy.down\n\t\t\t\tdelete tcopy.delete\n\n\t\t\t\t//if (self.moveInput.property('checked')) {}\n\n\t\t\t\tif (sortColInput.property('checked') || self.moveInput?.property('checked')) {\n\t\t\t\t\tself.app.dispatch({\n\t\t\t\t\t\ttype: 'plot_nestedEdits',\n\t\t\t\t\t\tid: self.opts.id,\n\t\t\t\t\t\tedits: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tnestedKeys: ['termgroups', t.grpIndex, 'lst', t.lstIndex],\n\t\t\t\t\t\t\t\tvalue: tcopy\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tself.dom.tip.hide()\n\t\t\t})\n\t}\n\n\tself.showSorterTerms = (sortColDiv, t) => {\n\t\tconst [tcopy, sorterTerms] = self.getSorterTerms(t)\n\t\tconst s = self.settings.matrix\n\t\tconst l = s.controlLabels\n\t\tsortColDiv\n\t\t\t.append('div')\n\t\t\t.style('margin', '5px')\n\t\t\t.style('padding', '5px 10px')\n\t\t\t.selectAll('div')\n\t\t\t.data(sorterTerms, s => s.$id)\n\t\t\t.enter()\n\t\t\t.append('div')\n\t\t\t.style('width', 'fit-content')\n\t\t\t.style('margin', '3px')\n\t\t\t.style('cursor', 'default')\n\t\t\t.style('padding', '3px 10px')\n\t\t\t.style('border-radius', '5px')\n\t\t\t.style('color', 'black')\n\t\t\t.style('background-color', 'rgb(238, 238, 238)')\n\t\t\t.each(function (st, i) {\n\t\t\t\tst.sortSamples.priority = i\n\t\t\t\tst.div = select(this)\n\t\t\t\tconst label = st.$id == 'sample' ? `${l.Sample} name` : st.term.name\n\t\t\t\tst.div.append('span').style('margin-right', '10px').html(label)\n\t\t\t\tst.up = st.div\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.html(' ▲ ')\n\t\t\t\t\t.style('display', i === 0 ? 'none' : 'inline')\n\t\t\t\t\t.style('color', '#555')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tthis.parentNode.insertBefore(this, this.previousSibling)\n\t\t\t\t\t\tsorterTerms.splice(st.priority, 1)\n\t\t\t\t\t\tsorterTerms.splice(st.priority - 1, 0, st)\n\t\t\t\t\t\tupdateSorterDivStyles()\n\t\t\t\t\t})\n\n\t\t\t\tst.down = st.div\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.html(' ▼ ')\n\t\t\t\t\t.style('display', i < sorterTerms.length - 1 ? 'inline' : 'none')\n\t\t\t\t\t.style('color', '#555')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tthis.parentNode.insertBefore(this, this.nextSibling.nextSibling)\n\t\t\t\t\t\tsorterTerms.splice(st.priority, 1)\n\t\t\t\t\t\tsorterTerms.splice(st.priority + 1, 0, st)\n\t\t\t\t\t\tupdateSorterDivStyles()\n\t\t\t\t\t})\n\n\t\t\t\tst.delete = st.div\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.html(' ✕ ')\n\t\t\t\t\t.style('display', 'inline')\n\t\t\t\t\t.style('color', 'rgb(255, 100, 100)')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tst.div.remove()\n\t\t\t\t\t\tsorterTerms.splice(st.priority, 1)\n\t\t\t\t\t\tupdateSorterDivStyles()\n\t\t\t\t\t})\n\t\t\t})\n\n\t\tfunction updateSorterDivStyles() {\n\t\t\tfor (const [i, st] of sorterTerms.entries()) {\n\t\t\t\tst.priority = i\n\t\t\t\tst.up.style('display', st.priority > 0 ? 'inline' : 'none')\n\t\t\t\tst.down.style('display', st.priority < sorterTerms.length - 1 ? 'inline' : 'none')\n\t\t\t}\n\t\t}\n\n\t\treturn tcopy\n\t}\n\n\tself.getSorterTerms = t => {\n\t\tconst sorterTerms = [\n\t\t\t...self.termOrder\n\t\t\t\t.filter(t => t.tw.sortSamples)\n\t\t\t\t.map(t => JSON.parse(JSON.stringify(t.tw)))\n\t\t\t\t.sort((a, b) => a.sortSamples.priority - b.sortSamples.priority),\n\t\t\t...self.config.settings.matrix.sortSamplesTieBreakers.map(st => JSON.parse(JSON.stringify(st)))\n\t\t]\n\n\t\tconst s = self.settings.matrix\n\t\tconst activeOption = s.sortOptions[s.sortSamplesBy]\n\t\tif (!activeOption) {\n\t\t\tthrow `unsupported s.sortSamplesBy='${s.sortSamplesBy}'`\n\t\t}\n\t\tconst matchingSortSamples = activeOption.sortPriority?.find(o => o.types.includes(t.tw?.term?.type))?.tiebreakers[0]\n\t\tconst sortSamples = matchingSortSamples\n\t\t\t? {} // will let matrix.sort fill-in based on the first matching tiebreaker\n\t\t\t: t.tw?.term?.type == 'geneVariant' && t.tw?.q?.type == 'values'\n\t\t\t? {\n\t\t\t\t\tby: 'class',\n\t\t\t\t\torder: [\n\t\t\t\t\t\t'Fuserna',\n\t\t\t\t\t\t'CNV_homozygous_deletion',\n\t\t\t\t\t\t'CNV_amplification',\n\t\t\t\t\t\t'CNV_loss',\n\t\t\t\t\t\t'CNV_amp',\n\t\t\t\t\t\t'CNV_loh',\n\t\t\t\t\t\t// truncating\n\t\t\t\t\t\t'F',\n\t\t\t\t\t\t'N',\n\t\t\t\t\t\t// indel\n\t\t\t\t\t\t'D',\n\t\t\t\t\t\t'I',\n\t\t\t\t\t\t// point\n\t\t\t\t\t\t'M',\n\t\t\t\t\t\t'P',\n\t\t\t\t\t\t'L',\n\t\t\t\t\t\t// noncoding\n\t\t\t\t\t\t'Utr3',\n\t\t\t\t\t\t'Utr5',\n\t\t\t\t\t\t'S',\n\t\t\t\t\t\t'Intron',\n\t\t\t\t\t\t'WT',\n\t\t\t\t\t\t'Blank'\n\t\t\t\t\t]\n\t\t\t }\n\t\t\t: { by: 'values' }\n\n\t\tconst i = sorterTerms.findIndex(st => st.$id === t.tw?.$id)\n\t\tconst tcopy = JSON.parse(JSON.stringify(t.tw || {}))\n\t\t// will let the matrix.sorter code fill-in the sortSamples with tiebreakers\n\t\ttcopy.sortSamples = sortSamples\n\t\tif (i == -1) {\n\t\t\tsorterTerms.unshift(tcopy)\n\t\t} else {\n\t\t\tif (sortSamples.order) tcopy.sortSamples.order = sortSamples.order\n\t\t}\n\n\t\treturn [tcopy, sorterTerms]\n\t}\n\n\tself.removeTerm = () => {\n\t\tconst t = self.activeLabel\n\t\tconst legendValueFilter = self.mayRemoveTvsEntry(t.tw)\n\t\tconst termgroups = self.termGroups\n\t\tconst grp = termgroups[t.grpIndex]\n\t\t// remove this element\n\t\tgrp.lst.splice(t.lstIndex, 1)\n\t\tif (grp.lst.length) {\n\t\t\tself.app.dispatch({\n\t\t\t\ttype: 'plot_nestedEdits',\n\t\t\t\tid: self.opts.id,\n\t\t\t\tedits: [\n\t\t\t\t\t{\n\t\t\t\t\t\tnestedKeys: ['termgroups', t.grpIndex, 'lst'],\n\t\t\t\t\t\tvalue: grp.lst\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tnestedKeys: ['legendValueFilter'],\n\t\t\t\t\t\tvalue: legendValueFilter\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t})\n\t\t} else {\n\t\t\t// remove this now-empty group\n\t\t\ttermgroups.splice(t.grpIndex, 1)\n\t\t\tself.app.dispatch({\n\t\t\t\ttype: 'plot_edit',\n\t\t\t\tid: self.opts.id,\n\t\t\t\tconfig: {\n\t\t\t\t\ttermgroups,\n\t\t\t\t\tlegendValueFilter\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t\tself.dom.tip.hide()\n\t}\n\n\tself.removeTermGroup = () => {\n\t\tconst t = self.activeLabel\n\t\tconst termgroups = self.termGroups\n\t\ttermgroups.splice(t.grpIndex, 1)\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: self.opts.id,\n\t\t\tconfig: { termgroups }\n\t\t})\n\t\tself.dom.tip.hide()\n\t}\n\n\tself.mayRemoveTvsEntry = tw => {\n\t\tif (!self.config.legendValueFilter?.lst.length) return self.config.legendValueFilter\n\t\tconst lst = structuredClone(self.config.legendValueFilter.lst)\n\t\tconst items = lst.filter(\n\t\t\tf =>\n\t\t\t\tf.tvs?.term.type === tw?.term.type &&\n\t\t\t\t((('id' in f.tvs.term || 'id' in tw.term) && f.tvs.term.id === tw.term.id) || f.tvs.term.name === tw.term.name)\n\t\t)\n\t\tif (!items.length) return self.config.legendValueFilter\n\t\telse {\n\t\t\tfor (const t of items) {\n\t\t\t\tconst tvs = t.tvs\n\t\t\t\tif (tvs.term.type != tw.term.type) continue\n\t\t\t\tif (('id' in tvs.term || 'id' in tw.term) && tvs.term.id !== tw.term.id) continue\n\t\t\t\telse if (tvs.term.name != tw.term.name) continue\n\t\t\t\t// always remove a legendValueFilter.lst entry that corresponds to an edited term\n\t\t\t\t// TODO: may improve the logic to not remove a tvs entry when the tw edits are not data related, such as for colors\n\t\t\t\tconst i = lst.findIndex(t => t === tvs)\n\t\t\t\tlst.splice(i, 1)\n\t\t\t}\n\t\t}\n\t\treturn { in: true, join: 'and', type: 'tvslst', lst }\n\t}\n}\n\nfunction setSampleGroupActions(self) {\n\tself.showSampleGroupMenu = function (event) {\n\t\tconst d = event.target.__data__\n\t\tif (!d) return\n\t\tself.activeLabel = d\n\t\tself.dom.menutop.selectAll('*').remove()\n\t\tself.dom.menubody.style('padding', 0).selectAll('*').remove()\n\n\t\tconst options = JSON.parse(JSON.stringify(self.config.menuOpts?.sampleGroup || [])).map(d => {\n\t\t\td.callback = self[d.callback]\n\t\t\treturn d\n\t\t})\n\t\tconst menuOptions = [...options, { label: 'Delete', callback: self.removeSampleGroup }]\n\n\t\tself.dom.menutop\n\t\t\t.append('div')\n\t\t\t.selectAll(':scope>.sja_menuoption')\n\t\t\t.data(menuOptions)\n\t\t\t.enter()\n\t\t\t.append('div')\n\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t.style('display', 'block')\n\t\t\t.html(d => d.label)\n\t\t\t.on('click', (event, d) => {\n\t\t\t\tevent.stopPropagation()\n\t\t\t\td.callback(d)\n\t\t\t})\n\n\t\tself.dom.tip.showunder(event.target)\n\t}\n\n\tself.showNewChartMenu = () => {\n\t\tself.dom.menubody.selectAll('*').remove()\n\t}\n\n\tself.launchSurvivalPlot = async menuOpt => {\n\t\tself.dom.menubody.selectAll('*').remove()\n\t\tself.dom.menubody\n\t\t\t.append('div')\n\t\t\t.style('padding-top', '10px')\n\t\t\t.html(`Use \"<b>${self.config.divideBy.term.name}</b>\" to`)\n\n\t\tconst radioDiv = self.dom.menubody.append('div').style('padding', '0 10px')\n\n\t\tconst radioName = 'sjpp-matrix-surv-termnum-' + inputIndex++\n\t\tconst label1 = radioDiv.append('label')\n\t\tlabel1\n\t\t\t.append('input')\n\t\t\t.attr('type', 'radio')\n\t\t\t.attr('name', radioName)\n\t\t\t.attr('value', 'term2')\n\t\t\t.property('checked', true)\n\t\tlabel1.append('span').html(' overlay')\n\n\t\tconst label2 = radioDiv.append('label').style('margin-left', '10px')\n\t\tlabel2.append('input').attr('type', 'radio').attr('name', radioName).attr('value', 'term0')\n\t\tlabel2.append('span').html(' divide')\n\n\t\tself.dom.menubody.append('div').style('padding-bottom', '10px').html(`the selected survival variable below:`)\n\n\t\tconst termdb = await import('#termdb/app')\n\t\ttermdb.appInit({\n\t\t\tholder: self.dom.menubody.append('div'),\n\t\t\tvocabApi: self.app.vocabApi,\n\t\t\tstate: {\n\t\t\t\tvocab: self.state.vocab,\n\t\t\t\tactiveCohort: self.state.activeCohort,\n\t\t\t\tnav: {\n\t\t\t\t\theader_mode: 'search_only'\n\t\t\t\t},\n\t\t\t\ttree: { usecase: { target: 'survival', detail: 'term' } }\n\t\t\t},\n\t\t\ttree: {\n\t\t\t\tclick_term: term => {\n\t\t\t\t\tself.dom.tip.hide()\n\t\t\t\t\tconst termNum = radioDiv.select(`input[name='${radioName}']:checked`).property('value')\n\t\t\t\t\tself.dom.menubody.selectAll('*').remove()\n\t\t\t\t\tconst config = {\n\t\t\t\t\t\tchartType: 'survival',\n\t\t\t\t\t\tterm,\n\t\t\t\t\t\t[termNum]: JSON.parse(JSON.stringify(self.config.divideBy)),\n\t\t\t\t\t\tinsertBefore: self.id\n\t\t\t\t\t}\n\n\t\t\t\t\tif (menuOpt.config) {\n\t\t\t\t\t\tObject.assign(config, menuOpt.config)\n\t\t\t\t\t}\n\t\t\t\t\tself.app.dispatch({ type: 'plot_create', config })\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\n\tself.removeSampleGroup = () => {\n\t\t// this should not happen, but making sure\n\t\tif (!self.config.divideBy) return\n\n\t\tconst tw = self.activeLabel.grp.tw\n\t\tconst term = tw.term\n\t\tif (term.type == 'categorical' || term.type == 'survival') {\n\t\t\tterm.$id = tw.$id\n\t\t\tconst filterGrpIndex = self.config.legendValueFilter.lst.findIndex(l => l.legendGrpName == tw.term.id)\n\t\t\tif (filterGrpIndex == -1) {\n\t\t\t\tconst filterNew = {\n\t\t\t\t\tlegendGrpName: tw.term.id,\n\t\t\t\t\ttype: 'tvs',\n\t\t\t\t\ttvs: {\n\t\t\t\t\t\tisnot: true,\n\t\t\t\t\t\tterm,\n\t\t\t\t\t\tvalues: [{ key: self.activeLabel.grp.id }]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tself.config.legendValueFilter.lst.push(filterNew)\n\t\t\t} else {\n\t\t\t\t// the filter for the categorical or survival term exist, but the current legend key is not there.\n\t\t\t\tself.config.legendValueFilter.lst[filterGrpIndex].tvs.values.push({ key: self.activeLabel.grp.id })\n\t\t\t}\n\t\t} else if (isNumericTerm(term)) {\n\t\t\tterm.$id = tw.$id\n\t\t\tconst filterNew = {\n\t\t\t\tlegendGrpName: tw.term.id || tw.term.name,\n\t\t\t\ttype: 'tvs',\n\t\t\t\ttvs: {\n\t\t\t\t\tisnot: true,\n\t\t\t\t\tterm,\n\t\t\t\t\tranges: [self.data.refs.byTermId[tw.$id].bins.find(b => self.activeLabel.grp.id == b.name)]\n\t\t\t\t}\n\t\t\t}\n\t\t\tself.config.legendValueFilter.lst.push(filterNew)\n\t\t}\n\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: self.id,\n\t\t\tconfig: { legendValueFilter: self.config.legendValueFilter }\n\t\t})\n\t\tself.dom.tip.hide()\n\t}\n\n\tself.showDeletedSampleGroups = () => {\n\t\t// this should not happen, but making sure\n\t\tif (!self.config.divideBy) return\n\n\t\tconst tw = self.activeLabel?.grp?.tw || self.config.divideBy\n\t\tself.config.legendValueFilter.lst = self.config.legendValueFilter.lst.filter(\n\t\t\tl => l.legendGrpName !== tw.term.id && l.legendGrpName != tw.term.name\n\t\t)\n\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: self.id,\n\t\t\tconfig: { legendValueFilter: self.config.legendValueFilter }\n\t\t})\n\t\tself.dom.tip.hide()\n\t}\n\n\tself.displaySampleGroupInfo = (event, grp) => {\n\t\tconst l = self.settings.matrix.controlLabels\n\t\tconst n = grp.lst.length\n\t\tself.dom.menutop.selectAll('*').remove()\n\t\tself.dom.menubody.selectAll('*').remove()\n\t\tself.dom.menubody\n\t\t\t.append('div')\n\t\t\t.style('text-align', 'center')\n\t\t\t.html(`<b>${grp.name}</b> (${n} ${n < 2 ? l.sample : l.samples})`)\n\t\tconst div = self.dom.menubody.append('div').style('max-width', '400px').style('padding', '5px')\n\t\tfor (const key in event.target.__data__.grp.legendData) {\n\t\t\tconst g = event.target.__data__.grp.legendData[key]\n\t\t\tdiv.append('div').style('padding-top', '10px').html(`<b>${g.name}</b>`)\n\t\t\tconst t = div.append('table')\n\t\t\tfor (const i of g.items) {\n\t\t\t\tconst tr = t.append('tr')\n\t\t\t\t// icon\n\t\t\t\ttr.append('td')\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('width', '12px')\n\t\t\t\t\t.style('height', '12px')\n\t\t\t\t\t.style('background-color', i.color)\n\t\t\t\t\t.style('border', `1px soloid ${i.stroke}`)\n\t\t\t\ttr.append('td').html(i.text)\n\t\t\t}\n\t\t}\n\t\tself.dom.tip.show(event.clientX, event.clientY)\n\t}\n\n\t// TODO: may use this later to sort legend, mouseover items by count\n\tself.legendItemSorter = (a, b) => {\n\t\tif (a.order && b.order) return a.order - b.order\n\t\tif (Number.isFinite(a.order) || b.order == -1) return -1\n\t\tif (Number.isFinite(b.order) || a.order == -1) return 1\n\t\tif (a.count) return b.count - a.count\n\t\tif (Number.isFinite(a.count)) return -1\n\t\tif (Number.isFinite(b.count)) return 1\n\t\treturn 0\n\t}\n\n\tself.handleLegendItemClick = d => {\n\t\tconst dvt = structuredClone(self.config.divideBy || {})\n\t\tconst id = 'id' in dvt ? dvt.id : dvt.name\n\t\tif (d.termid == id) {\n\t\t\tif (!dvt.exclude) dvt.exclude = []\n\t\t\tconst i = dvt.exclude?.indexOf(d.key)\n\t\t\tif (i == -1) dvt.exclude.push(d.key)\n\t\t\telse dvt.exclude.splice(i, 1)\n\t\t\tself.app.dispatch({\n\t\t\t\ttype: 'plot_edit',\n\t\t\t\tid: self.id,\n\t\t\t\tconfig: {\n\t\t\t\t\tdivideBy: dvt\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tself.handleLegendMouseover = (event, d) => {\n\t\tconst dvt = structuredClone(self.config.divideBy || {})\n\t\tconst id = 'id' in dvt ? dvt.id : dvt.name\n\t\tif (d.termid == id) {\n\t\t\tself.dom.menutop.selectAll('*').remove()\n\t\t\tself.dom.menubody.selectAll('*').remove()\n\t\t\tself.dom.menubody.html(`Click to ${d.isExcluded ? 'show' : 'hide'}`)\n\t\t\tself.dom.tip.show(event.clientX, event.clientY)\n\t\t}\n\t}\n}\n\nfunction setTermGroupActions(self) {\n\tsetLabelDragEvents(self, 'termGrp')\n\n\tself.showTermGroupMenu = function (event) {\n\t\tconst d = event.target.tagName.toLowerCase() == 'tspan' ? event.target.parentNode.__data__ : event.target.__data__\n\t\tif (!d) return\n\t\tself.activeLabel = d\n\t\tself.dom.menutop.style('display', '').selectAll('*').remove()\n\t\tself.showTermGroupInputs(self.dom.menutop.append('div'))\n\t\tself.dom.tip.showunder(event.target)\n\t}\n\n\tself.showTermGroupInputs = function (div) {\n\t\tconst holder = div\n\t\tconst labelEditDiv = holder.append('div').style('text-align', 'center')\n\t\tlabelEditDiv.append('span').text('Group ')\n\n\t\tself.dom.grpNameInput = labelEditDiv\n\t\t\t.append('input')\n\t\t\t.attr('type', 'text')\n\t\t\t.attr('size', (self.activeLabel.grp.name?.length || 0) + 5)\n\t\t\t.style('padding', '1px 5px')\n\t\t\t.style('text-align', 'center')\n\t\t\t.property('value', self.activeLabel.grp.name)\n\t\t\t.on('input', () => {\n\t\t\t\tconst value = self.dom.grpNameInput.property('value')\n\t\t\t\tself.dom.grpNameInput.attr('size', value.length + 5)\n\t\t\t\tself.dom.grpEditBtn.style('display', value === self.activeLabel.grp.name ? 'none' : '')\n\t\t\t})\n\t\t//.on('change', self.updateTermGrpName)\n\n\t\tself.dom.grpEditBtn = labelEditDiv\n\t\t\t.append('button')\n\t\t\t.style('display', 'none')\n\t\t\t.style('margin-left', '5px')\n\t\t\t.html('submit')\n\t\t\t.on('click', () => {\n\t\t\t\tself.updateTermGrpName()\n\t\t\t\tself.dom.tip.hide()\n\t\t\t})\n\n\t\tself.dom.menubody.style('padding', 0).selectAll('*').remove()\n\n\t\tconst menuOptions = [{ label: 'Add Rows', callback: self.showTermInsertMenu }]\n\t\t// try to maintain a familiar button order\n\t\tif (self.chartType != 'hierCluster') {\n\t\t\tmenuOptions.push(\n\t\t\t\t{ label: 'Edit', callback: self.showTermGroupEditMenu }\n\t\t\t\t//{ label: 'Sort', callback: self.showSortMenu },\n\t\t\t)\n\t\t}\n\t\tif (self.activeLabel.grp.type != 'hierCluster') {\n\t\t\tmenuOptions.push({ label: 'Delete', callback: self.removeTermGroup })\n\t\t}\n\n\t\tholder\n\t\t\t.append('div')\n\t\t\t.style('text-align', 'center')\n\t\t\t.selectAll(':scope>.sja_menuoption')\n\t\t\t.data(menuOptions)\n\t\t\t.enter()\n\t\t\t.append('div')\n\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.html(d => d.label)\n\t\t\t.on('click', (event, d) => {\n\t\t\t\tevent.stopPropagation()\n\t\t\t\tself.dom.menutop.style('display', 'none')\n\t\t\t\td.callback(d)\n\t\t\t})\n\t}\n\n\tself.updateTermGrpName = () => {\n\t\tconst value = self.dom.grpNameInput.property('value')\n\t\tconst t = self.activeLabel\n\t\tif (t.grp.name === value) return\n\t\tt.grp.name = value\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_nestedEdits',\n\t\t\tid: self.opts.id,\n\t\t\tedits: [\n\t\t\t\t{\n\t\t\t\t\tnestedKeys: ['termgroups', t.grpIndex],\n\t\t\t\t\tvalue: t.grp\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t}\n\n\tself.showTermGroupEditMenu = async () => {\n\t\tself.dom.menubody.selectAll('*').remove()\n\n\t\tconst menu = self.dom.menubody.append('div').style('padding', '5px')\n\t\tmenu.append('div').style('width', '100%').style('font-weight', 600).html('Group options')\n\n\t\tconst label = menu.append('div').append('label')\n\t\tconst l = self.settings.matrix.controlLabels\n\t\tlabel\n\t\t\t.append('span')\n\t\t\t.html(\n\t\t\t\t`Minimum # of mutated ${l.samples} for the ${l.term.charAt(0).toLowerCase() + l.term.slice(1)} to be visible `\n\t\t\t)\n\t\t\t.attr('aria-label', `May be overridden by a row-specific minNumSamples`)\n\t\tconst minNumSampleInput = label\n\t\t\t.append('input')\n\t\t\t.attr('type', 'number')\n\t\t\t.style('margin-left', '5px')\n\t\t\t.style('width', '50px')\n\t\t\t.property('value', self.activeLabel.grp.settings?.minNumSamples || 0)\n\n\t\tmenu\n\t\t\t.append('div')\n\t\t\t.append('button')\n\t\t\t.html('Submit')\n\t\t\t.on('click', () => {\n\t\t\t\tconst settings = self.activeLabel.grp.settings || {}\n\t\t\t\tsettings.minNumSamples = minNumSampleInput.property('value')\n\n\t\t\t\tself.app.dispatch({\n\t\t\t\t\ttype: 'plot_nestedEdits',\n\t\t\t\t\tid: self.id,\n\t\t\t\t\tedits: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tnestedKeys: ['termgroups', self.activeLabel.grpIndex, 'settings'],\n\t\t\t\t\t\t\tvalue: settings\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t})\n\t\t\t})\n\t}\n\n\tself.removeTermGroup = () => {\n\t\tconst termgroups = self.termGroups\n\t\ttermgroups.splice(self.activeLabel.grpIndex, 1)\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: self.id,\n\t\t\tconfig: {\n\t\t\t\ttermgroups\n\t\t\t}\n\t\t})\n\t\tself.dom.tip.hide()\n\t}\n\tconst labelParentSelectors = ['series', 'series-group', 'term', 'term-group']\n\t\t.map(d => `.sjpp-matrix-${d}-label-g`)\n\t\t.join(',')\n\tself.enableTextHighlight = event => {\n\t\tselect(event.target.closest(labelParentSelectors))\n\t\t\t.selectAll('.sjpp-matrix-label text')\n\t\t\t//.selectAll('text')\n\t\t\t.style('-webkit-user-select', 'auto')\n\t\t\t.style('-moz-user-select', 'auto')\n\t\t\t.style('-ms-user-select', 'auto')\n\t\t\t.style('user-select', 'auto')\n\n\t\tselect('body').on('mouseup.sjppMatrixLabelText', self.disableTextHighlight)\n\t}\n\n\tself.disableTextHighlight = event => {\n\t\tselect(event.target.closest(labelParentSelectors))\n\t\t\t.selectAll('.sjpp-matrix-label text')\n\t\t\t.style('-webkit-user-select', 'none')\n\t\t\t.style('-moz-user-select', 'none')\n\t\t\t.style('-ms-user-select', 'none')\n\t\t\t.style('user-select', 'none')\n\n\t\tselect('body').on('mouseup.sjppMatrixLabelText', null)\n\t}\n}\n\n// prefix = \"term\" | \"termGrp\"\nfunction setLabelDragEvents(self, prefix) {\n\tself[`${prefix}LabelMousedown`] = (event, d) => {\n\t\tself.clicked = { event, d }\n\t}\n\n\tself[`${prefix}LabelMouseover`] = (event, t) => {\n\t\tif (prefix == 'term' && event.target.__data__?.tw && event.target.__data__.grp) {\n\t\t\tif (event.target.__data__.grp.type == 'hierCluster') {\n\t\t\t\t// do allow to be dragged/dropped and do not show term label hover over tooltip for hier cluster\n\t\t\t\treturn\n\t\t\t}\n\t\t\t//show counts in each subgroup when hover over term label\n\t\t\tif (self.activeLabel || self.zoomArea) {\n\t\t\t\t// when an edit menu is open or when users are selecting a portion of matrix to zoom\n\t\t\t\treturn\n\t\t\t}\n\t\t\tself.dom.menutop.selectAll('*').remove()\n\t\t\tself.dom.menubody.selectAll('*').remove()\n\t\t\tconst groupName = event.target.__data__.grp.name\n\t\t\tconst termName = event.target.__data__.tw.term.name\n\n\t\t\t//Add subGroup name\n\t\t\tconst titleDiv = self.dom.menubody\n\t\t\t\t.append('div')\n\t\t\t\t.style('text-align', 'left')\n\t\t\t\t.style('font-size', '1.1em')\n\t\t\t\t.html(groupName ? `<b>${groupName}: ${termName}</b>` : `<b>${termName}</b>`)\n\n\t\t\tconst div = self.dom.menubody.append('div').style('max-width', '400px')\n\n\t\t\tconst data = event.target.__data__\n\n\t\t\tif (data.tw.term.type == 'geneVariant' && data.tw.q?.type == 'values') {\n\t\t\t\t// for geneVariant term, when groupsetting is <not?> used, use subGroupCounts to\n\t\t\t\t// show number of counted samples (WT and Blank are not counted)\n\t\t\t\t// and number of each class in the subGroup\n\n\t\t\t\t//Sum of not tested samples in all group\n\t\t\t\tconst notTestedSum = Object.values(data.counts.subGroupCounts).reduce(\n\t\t\t\t\t(sum, curr) => sum + curr.samplesNotTested,\n\t\t\t\t\t0\n\t\t\t\t)\n\n\t\t\t\t//Add number of tested samples\n\t\t\t\ttitleDiv\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('text-align', 'left')\n\t\t\t\t\t.style('font-size', '0.9em')\n\t\t\t\t\t.html(`(tested ${self.samples.length - notTestedSum} of ${self.samples.length})`)\n\n\t\t\t\tfor (const [grpName, counts] of Object.entries(data.counts.subGroupCounts)) {\n\t\t\t\t\tconst groupSampleTotal = self.sampleGroups.find(g => g.name == grpName).lst.length\n\t\t\t\t\tconst mRate =\n\t\t\t\t\t\tgroupSampleTotal - counts.samplesNotTested\n\t\t\t\t\t\t\t? counts.samplesTotal / (groupSampleTotal - counts.samplesNotTested)\n\t\t\t\t\t\t\t: 0\n\t\t\t\t\tdiv\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.style('padding-top', '10px')\n\t\t\t\t\t\t.html(\n\t\t\t\t\t\t\tgrpName\n\t\t\t\t\t\t\t\t? `<b>${grpName}</b>: Mutated samples (${counts.samplesTotal} of ${\n\t\t\t\t\t\t\t\t\t\tgroupSampleTotal - counts.samplesNotTested\n\t\t\t\t\t\t\t\t }, ${d3format('.1%')(mRate)})`\n\t\t\t\t\t\t\t\t: `<b>Mutated samples (${counts.samplesTotal} of ${\n\t\t\t\t\t\t\t\t\t\tgroupSampleTotal - counts.samplesNotTested\n\t\t\t\t\t\t\t\t }, ${d3format('.1%')(mRate)})`\n\t\t\t\t\t\t)\n\t\t\t\t\tconst t = div.append('table').style('margin-left', '15px')\n\t\t\t\t\tfor (const [classType, num] of Object.entries(counts.classes).sort((a, b) => b[1] - a[1])) {\n\t\t\t\t\t\tconst tr = t.append('tr')\n\t\t\t\t\t\t// icon\n\t\t\t\t\t\ttr.append('td')\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.style('width', '12px')\n\t\t\t\t\t\t\t.style('height', '12px')\n\t\t\t\t\t\t\t.style('background-color', mclass[classType].color)\n\t\t\t\t\t\ttr.append('td').html(`${mclass[classType].label}: ${num}`)\n\t\t\t\t\t}\n\t\t\t\t\tif (counts.notTestedClasses) {\n\t\t\t\t\t\tdiv.append('div').style('margin-left', '15px').style('padding-top', '12px').html('<b> Not counted:</b>')\n\t\t\t\t\t\tconst t = div.append('table').style('margin-left', '15px')\n\t\t\t\t\t\tfor (const [classType, num] of Object.entries(counts.notTestedClasses).sort((a, b) => b[1] - a[1])) {\n\t\t\t\t\t\t\tconst tr = t.append('tr')\n\t\t\t\t\t\t\t// icon\n\t\t\t\t\t\t\ttr.append('td')\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.style('width', '12px')\n\t\t\t\t\t\t\t\t.style('height', '12px')\n\t\t\t\t\t\t\t\t.style('background-color', mclass[classType].color)\n\t\t\t\t\t\t\ttr.append('td').html(`${mclass[classType].label}: ${num}`)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (!self.config.divideBy) {\n\t\t\t\t// non-geneVariant term, when matrix is not divided into multiple subGorups\n\t\t\t\tconst termLegend = self.legendData.find(t => t.name == data.tw.term.name)\n\t\t\t\tif (termLegend && termLegend.items) {\n\t\t\t\t\t// when legend data is available\n\t\t\t\t\tconst t = div.append('table')\n\t\t\t\t\tfor (const classType of termLegend.items) {\n\t\t\t\t\t\tconst tr = t.append('tr')\n\t\t\t\t\t\t// icon\n\t\t\t\t\t\ttr.append('td')\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.style('width', '12px')\n\t\t\t\t\t\t\t.style('height', '12px')\n\t\t\t\t\t\t\t.style('background-color', classType.color)\n\t\t\t\t\t\ttr.append('td').html(`${classType.key}: ${classType.count}`)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// when legend data is not available, use subGroupCounts\n\t\t\t\t\tfor (const [grpName, counts] of Object.entries(data.counts.subGroupCounts)) {\n\t\t\t\t\t\tconst groupSampleTotal = self.sampleGroups.find(g => g.name == grpName).totalCountedValues\n\t\t\t\t\t\tdiv\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.style('padding-top', '10px')\n\t\t\t\t\t\t\t.html(\n\t\t\t\t\t\t\t\tgrpName !== ''\n\t\t\t\t\t\t\t\t\t? `<b>${grpName}</b>: ${counts.samplesTotal} of ${groupSampleTotal}`\n\t\t\t\t\t\t\t\t\t: `<b>${counts.samplesTotal} of ${groupSampleTotal}`\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\tconst t = div.append('table').style('margin-left', '15px')\n\t\t\t\t\t\tfor (const [classType, num] of Object.entries(counts.classes).sort((a, b) => b[1] - a[1])) {\n\t\t\t\t\t\t\tconst classColor = data.tw.term.values?.[classType]?.color\n\t\t\t\t\t\t\tif (!classColor) continue\n\t\t\t\t\t\t\tconst tr = t.append('tr')\n\t\t\t\t\t\t\t// icon\n\t\t\t\t\t\t\ttr.append('td')\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.style('width', '12px')\n\t\t\t\t\t\t\t\t.style('height', '12px')\n\t\t\t\t\t\t\t\t.style('background-color', classColor)\n\t\t\t\t\t\t\ttr.append('td').html(`${classType}: ${num}`)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// non-geneVariant term, when matrix is divided into multiple subGorups\n\t\t\t\tfor (const [grpName, counts] of Object.entries(data.counts.subGroupCounts)) {\n\t\t\t\t\tconst groupSampleTotal = self.sampleGroups.find(g => g.name == grpName).totalCountedValues\n\t\t\t\t\tdiv\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.style('padding-top', '10px')\n\t\t\t\t\t\t.html(\n\t\t\t\t\t\t\tgrpName !== ''\n\t\t\t\t\t\t\t\t? `<b>${grpName}</b>: ${counts.samplesTotal} of ${groupSampleTotal}`\n\t\t\t\t\t\t\t\t: `<b>${counts.samplesTotal} of ${groupSampleTotal}`\n\t\t\t\t\t\t)\n\t\t\t\t\tconst subGrp = self.sampleGroups.find(g => g.name == grpName)\n\t\t\t\t\tconst termLegend = subGrp.legendData.find(t => t.name == data.tw.term.name)\n\n\t\t\t\t\tif (termLegend && termLegend.items) {\n\t\t\t\t\t\t// when legend data is available\n\t\t\t\t\t\tconst t = div.append('table').style('margin-left', '15px')\n\t\t\t\t\t\tfor (const classType of termLegend.items) {\n\t\t\t\t\t\t\tconst tr = t.append('tr')\n\t\t\t\t\t\t\t// icon\n\t\t\t\t\t\t\ttr.append('td')\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.style('width', '12px')\n\t\t\t\t\t\t\t\t.style('height', '12px')\n\t\t\t\t\t\t\t\t.style('background-color', classType.color)\n\t\t\t\t\t\t\ttr.append('td').html(`${classType.key}: ${classType.count}`)\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// when legend data is not available, use subGroupCounts\n\t\t\t\t\t\tconst t = div.append('table').style('margin-left', '15px')\n\t\t\t\t\t\tfor (const [classType, num] of Object.entries(counts.classes).sort((a, b) => b[1] - a[1])) {\n\t\t\t\t\t\t\tconst classColor = data.tw.term.values?.[classType]?.color\n\t\t\t\t\t\t\tif (!classColor) continue\n\t\t\t\t\t\t\tconst tr = t.append('tr')\n\t\t\t\t\t\t\t// icon\n\t\t\t\t\t\t\ttr.append('td')\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.style('width', '12px')\n\t\t\t\t\t\t\t\t.style('height', '12px')\n\t\t\t\t\t\t\t\t.style('background-color', classColor)\n\t\t\t\t\t\t\ttr.append('td').html(`${classType}: ${num}`)\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\tself.dom.tip.show(event.clientX, event.clientY)\n\t\t}\n\t\t//const cls = event.target.className?.baseVal || event.target.parentNode.className?.baseVal || ''\n\t\tif (event.target.innerHTML.includes('grouped by')) return\n\t\tif (event.target.tagName === 'text') {\n\t\t\tselect(event.target).style('fill', 'blue')\n\t\t}\n\t\tif (!self.dragged) return\n\t\t// TODO: why is the element-bound __data__ (t) not provided as a second argument by d3??\n\t\tself.hovered = event.target.__data__\n\t}\n\n\tself[`${prefix}LabelMouseout`] = event => {\n\t\tselect(event.target).style('fill', '')\n\t\t//if (!this.dragged) return\n\t}\n\n\tself[`${prefix}LabelMousemove`] = (event, data) => {\n\t\tconst s = self.config.settings.matrix\n\t\tif (self.clicked && !self.dragged) {\n\t\t\tself.dom[`${prefix}LabelG`]\n\t\t\t\t.selectAll('text')\n\t\t\t\t.style('-webkit-user-select', 'none')\n\t\t\t\t.style('-moz-user-select', 'none')\n\t\t\t\t.style('-ms-user-select', 'none')\n\t\t\t\t.style('user-select', 'none')\n\n\t\t\tconst label = self.clicked.event.target.closest('.sjpp-matrix-label')\n\t\t\tconst t = label?.__data__\n\t\t\tif (!t) return\n\t\t\tif (self.type == 'hierCluster' && t.tw && t.grp?.name == self.config.settings.hierCluster?.termGroupName) return\n\t\t\t// TODO: use a native or D3 transform accessor\n\t\t\tconst [x, y] = select(label).attr('transform').split('translate(')[1].split(')')[0].split(',').map(Number)\n\t\t\tconst node = label.cloneNode(true)\n\t\t\tself.dom[`${prefix}LabelG`].node().prepend(node)\n\t\t\tself.dragged = {\n\t\t\t\torig: label,\n\t\t\t\tclone: select(node).style('cursor', 'move').style('pointer-events', 'none'),\n\t\t\t\tnode,\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t\tclientX: event.clientX,\n\t\t\t\tclientY: event.clientY\n\t\t\t}\n\t\t\tself.dragged.clone.selectAll('text').style('fill', 'red')\n\t\t}\n\t\tif (!self.dragged) return\n\t\tconst d = self.dragged\n\t\tconst x2 = !s.transpose ? d.x : d.x - d.clientX + event.clientX\n\t\tconst y2 = !s.transpose ? d.y - d.clientY + event.clientY : d.y\n\t\td.clone.attr('transform', `translate(${x2},${y2})`)\n\t}\n\n\tself[`${prefix}LabelMouseup`] = event => {\n\t\tdelete self.clicked\n\t\tconst s = self.config.settings.matrix\n\t\tif (self.dragged) {\n\t\t\tself.dragged.clone.remove()\n\t\t\t//self.dragged.bgrect.remove()\n\t\t\tif (self.hovered) {\n\t\t\t\t// reposition the dragged row/column\n\t\t\t\tconst d = self.dragged\n\t\t\t\tconst t = d.orig.__data__\n\t\t\t\tconst h = self.hovered\n\n\t\t\t\tif (prefix == 'termGrp') {\n\t\t\t\t\tconst grp = self.config.termgroups.splice(t.grpIndex, 1)[0]\n\t\t\t\t\tself.config.termgroups.splice(h.grpIndex, 0, grp)\n\t\t\t\t} else {\n\t\t\t\t\t// NOTE: currently, the rendered order does not have to match the termgroup.lst order\n\t\t\t\t\t// ??? actually resort termgroup.lst to reflect the current term order ???\n\t\t\t\t\tfor (const grp of self.config.termgroups) {\n\t\t\t\t\t\tgrp.lst.sort((a, b) => {\n\t\t\t\t\t\t\tconst a1 = self.termOrder.find(t => t.tw.$id === a.$id)\n\t\t\t\t\t\t\tconst b1 = self.termOrder.find(t => t.tw.$id === b.$id)\n\t\t\t\t\t\t\tif (!a1 && !b1) return 0\n\t\t\t\t\t\t\tif (!a1) return 1\n\t\t\t\t\t\t\tif (!b1) return -1\n\t\t\t\t\t\t\treturn a1.totalIndex - b1.totalIndex\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\n\t\t\t\t\tconst tw = self.config.termgroups[t.grpIndex].lst.splice(t.index, 1)[0]\n\t\t\t\t\tself.config.termgroups[h.grpIndex].lst.splice(h.index, 0, t.tw)\n\t\t\t\t\t// if the \"source\" term group was emptied, then remove that group\n\t\t\t\t\tif (!self.config.termgroups[t.grpIndex].lst.length) self.config.termgroups.splice(t.grpIndex, 1)\n\t\t\t\t}\n\n\t\t\t\tconst sortKey = prefix == 'term' ? 'sortTermsBy' : 'sortTermGroupsBy'\n\t\t\t\tself.app.dispatch({\n\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\tid: self.id,\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\ttermgroups: self.config.termgroups,\n\t\t\t\t\t\tsettings: {\n\t\t\t\t\t\t\tmatrix: {\n\t\t\t\t\t\t\t\t[sortKey]: 'asListed'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tself.dom[`${prefix}LabelG`]\n\t\t\t\t.selectAll('text')\n\t\t\t\t.style('fill', '')\n\t\t\t\t.style('-webkit-user-select', '')\n\t\t\t\t.style('-moz-user-select', '')\n\t\t\t\t.style('-ms-user-select', '')\n\t\t\t\t.style('user-select', '')\n\n\t\t\tdelete self.dragged\n\t\t} else if (prefix == 'term') {\n\t\t\tself.showTermMenu(event)\n\t\t} else {\n\t\t\tself.showTermGroupMenu(event)\n\t\t}\n\t}\n}\n\nfunction setZoomPanActions(self) {\n\tself.resetInteractions = function () {\n\t\tif (self.zoomArea) {\n\t\t\tself.zoomArea.remove()\n\t\t\tdelete self.zoomArea\n\t\t\t//self.dom.seriesesG.on('mouseup.zoom', null)\n\t\t\tselect('body').on('mouseup.matrixZoom', null)\n\t\t}\n\t\tdelete self.clickedSeriesCell\n\t}\n\n\tself.seriesesGMousedown = function (event) {\n\t\tevent.stopPropagation()\n\t\tself.resetInteractions()\n\t\tconst startCell = self.getCellByPos(event)\n\t\tif (!startCell) return\n\t\tself.clickedSeriesCell = { event, startCell }\n\t\tif (self.settings.matrix.mouseMode == 'pan') {\n\t\t\tself.seriesesGdragInit()\n\t\t} else {\n\t\t\tself.zoomPointer = pointer(event, self.dom.seriesesG.node())\n\t\t\tself.dom.seriesesG\n\t\t\t\t.on('mousemove', self.seriesesGoutlineZoom)\n\t\t\t\t.on('mouseup', self.seriesesGtriggerZoom)\n\t\t\t\t.on('contextmenu', self.resetInteractions)\n\t\t}\n\t\tself.dom.mainG\n\t\t\t.selectAll('text')\n\t\t\t.style('-webkit-user-select', 'none')\n\t\t\t.style('-moz-user-select', 'none')\n\t\t\t.style('-ms-user-select', 'none')\n\t\t\t.style('user-select', 'none')\n\t}\n\n\tself.getCellByPos = function (event) {\n\t\tconst s = self.settings.matrix\n\t\tconst d = self.dimensions\n\t\tif (event.target.tagName == 'rect') {\n\t\t\tif (event.target.__data__?.sample) return event.target.__data__\n\t\t\tif (event.target.__data__?.xg) {\n\t\t\t\tconst width = event.clientX - event.target.getBoundingClientRect().x + d.seriesXoffset\n\t\t\t\tconst i = Math.floor(width / d.dx)\n\t\t\t\treturn self.sampleOrder[i]\n\t\t\t}\n\t\t}\n\t\tif (event.target.tagName == 'image' && s.useCanvas) {\n\t\t\treturn self.getImgCell(event)\n\t\t}\n\t}\n\n\tself.seriesesGdragInit = function () {\n\t\t//self.dom.seriesesG.on('mousemove', self.seriesesGdrag).on('mouseup', self.seriesesGcancelDrag)\n\t\tselect('body')\n\t\t\t.on('mousemove.sjppMatrixDrag', self.seriesesGdrag)\n\t\t\t.on('mouseup.sjppMatrixDrag', self.seriesesGcancelDrag)\n\t\tconst s = self.settings.matrix\n\t\tconst d = self.dimensions\n\t\tconst c = self.clickedSeriesCell\n\t\tc.dxPad = 20 // to show edge that limits drag, and to \"bounce back\" on mouseup\n\t\t//const pos = d.seriesXoffset s.zoomCenterPct * d.mainw /// d.mainw\n\t\tc.dxMax = -d.seriesXoffset\n\t\tc.dxMaxPad = c.dxMax + c.dxPad\n\t\tc.dxMin = d.mainw - d.zoomedMainW - d.seriesXoffset\n\t\tc.dxMinPad = c.dxMin - c.dxPad\n\t\tconst halfw = 0.5 * d.mainw\n\t\tc.center = {\n\t\t\tmax: halfw + (d.zoomedMainW - d.mainw),\n\t\t\tmin: halfw\n\t\t}\n\t}\n\n\tself.seriesesGdrag = function (event) {\n\t\tconst s = self.settings.matrix\n\t\tconst c = self.clickedSeriesCell\n\t\tconst d = self.dimensions\n\t\tconst dx = event.clientX - c.event.clientX\n\t\tif (Math.abs(dx) < 1) return\n\t\tif (dx < c.dxMinPad || dx > c.dxMaxPad) return\n\t\tself.clickedSeriesCell.dx = dx\n\t\tself.translateElems(dx, d, s, c)\n\t}\n\n\tself.translateElems = function (dx, d, s, c) {\n\t\tself.dom.seriesesG.attr('transform', `translate(${d.xOffset + d.seriesXoffset + dx},${d.yOffset})`)\n\t\tself.layout.top.attr.adjustBoxTransform(dx)\n\t\tself.layout.btm.attr.adjustBoxTransform(dx)\n\t\tconst computedCenter = s.zoomCenterPct * d.mainw - d.seriesXoffset - dx\n\t\tself.controlsRenderer.svgScrollApi.update({ zoomCenter: computedCenter })\n\t}\n\n\tself.seriesesGcancelDrag = function (event) {\n\t\tselect('body').on('mousemove.sjppMatrixDrag', null).on('mouseup.sjppMatrixDrag', null)\n\t\tconst s = self.settings.matrix\n\t\tconst d = self.dimensions\n\t\tconst cc = self.clickedSeriesCell\n\t\tconst _dx = event.clientX - cc.event.clientX\n\t\tconst dx = Math.min(cc.dxMax, Math.max(_dx, cc.dxMin))\n\t\tif (Math.abs(_dx) < 1 || Math.abs(dx) < 1) {\n\t\t\tself.translateElems(0, d, s, cc)\n\t\t\treturn\n\t\t}\n\t\tself.translateElems(dx, d, s, cc)\n\t\tconst c = self.getVisibleCenterCell(dx)\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: self.id,\n\t\t\tconfig: {\n\t\t\t\tsettings: {\n\t\t\t\t\tmatrix: {\n\t\t\t\t\t\tzoomCenterPct: 0.5,\n\t\t\t\t\t\tzoomIndex: c.totalIndex,\n\t\t\t\t\t\tzoomGrpIndex: c.grpIndex\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\n\tself.seriesesGoutlineZoom = function (event) {\n\t\tif (!self.clickedSeriesCell) return\n\t\tconst s = self.config.settings.matrix\n\t\tconst e = self.clickedSeriesCell.event\n\n\t\tif (self.clickedSeriesCell && !self.zoomArea) {\n\t\t\tself.zoomArea = self.dom.seriesesG.append('rect').attr('fill', 'rgba(50, 50, 50, 0.3)')\n\n\t\t\tselect('body').on('mouseup.matrixZoom', self.mouseup)\n\n\t\t\tself.dom.mainG\n\t\t\t\t.selectAll('text')\n\t\t\t\t.style('-webkit-user-select', 'none')\n\t\t\t\t.style('-moz-user-select', 'none')\n\t\t\t\t.style('-ms-user-select', 'none')\n\t\t\t\t.style('user-select', 'none')\n\t\t}\n\n\t\tconst dx = event.clientX - e.clientX\n\t\tconst dy = event.clientY - e.clientY\n\t\tconst x = dx > 0 ? self.zoomPointer[0] : self.zoomPointer[0] + dx + 3\n\t\tself.zoomWidth = Math.abs(dx)\n\t\tself.zoomArea\n\t\t\t.attr('transform', `translate(${x},0)`)\n\t\t\t.attr('width', Math.max(0, self.zoomWidth - 2))\n\t\t\t.attr('height', self.dimensions.mainh)\n\n\t\tif (!self.clickedSeriesCell.endCell) self.clickedSeriesCell.endCell = self.getCellByPos(event)\n\t}\n\n\tself.seriesesGtriggerZoom = function (event) {\n\t\tevent.stopPropagation()\n\t\tself.dom.seriesesG.on('mousemove', null).on('mouseup', null)\n\t\t//const d = event.target.__data__\n\t\tselect('body').on('mouseup.matrixZoom', null)\n\n\t\tself.dom.mainG\n\t\t\t.selectAll('text')\n\t\t\t.style('-webkit-user-select', '')\n\t\t\t.style('-moz-user-select', '')\n\t\t\t.style('-ms-user-select', '')\n\t\t\t.style('user-select', '')\n\n\t\tconst c = self.clickedSeriesCell\n\t\tconst endCell = self.getCellByPos(event)\n\t\tif (!c || !c.startCell) {\n\t\t\tself.dom.mainG.on('mouseout', null)\n\t\t\tdelete self.clickedSeriesCell\n\t\t\treturn\n\t\t} else if (!c.endCell || endCell === c.startCell) {\n\t\t\tself.dom.mainG.on('mouseout', null)\n\t\t\tself.dom.tip.hide()\n\t\t\tconst cell = event.target.tagName == 'rect' ? event.target.__data__ : c.startCell\n\t\t\tif (cell) {\n\t\t\t\tif (self.opts.cellClick) {\n\t\t\t\t\tself.opts.cellClick(\n\t\t\t\t\t\tstructuredClone({\n\t\t\t\t\t\t\tsampleData: cell.row,\n\t\t\t\t\t\t\tterm: cell.term,\n\t\t\t\t\t\t\tvalue: cell.value,\n\t\t\t\t\t\t\ts: cell.s,\n\t\t\t\t\t\t\tt: cell.t,\n\t\t\t\t\t\t\tsiblingCells: cell.siblingCells\n\t\t\t\t\t\t\t\t.filter(c => c !== cell)\n\t\t\t\t\t\t\t\t.map(c => ({\n\t\t\t\t\t\t\t\t\tterm: c.term,\n\t\t\t\t\t\t\t\t\tvalue: c.value,\n\t\t\t\t\t\t\t\t\ts: c.s,\n\t\t\t\t\t\t\t\t\tt: c.t\n\t\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\tself.mouseclick(event, cell)\n\t\t\t\t}\n\t\t\t}\n\t\t\tdelete self.clickedSeriesCell\n\t\t\tdelete self.zoomArea\n\t\t\treturn\n\t\t}\n\n\t\tconst s = self.settings.matrix\n\t\tconst l = s.controlLabels\n\t\tc.endCell = endCell\n\t\tconst ss = self.opts.allow2selectSamples\n\n\t\tconst startCellTouched = c.startCell.totalIndex < c.endCell.totalIndex ? c.startCell : c.endCell\n\t\tconst endCellTouched = c.startCell.totalIndex < c.endCell.totalIndex ? c.endCell : c.startCell\n\t\tconst samplesSet = new Set()\n\t\tfor (let i = startCellTouched.totalIndex; i <= endCellTouched.totalIndex; i++) {\n\t\t\tsamplesSet.add(self.sampleOrder[i].row)\n\t\t}\n\t\tconst samples = [...samplesSet]\n\n\t\tconst optionArr = [\n\t\t\t{\n\t\t\t\tlabel: 'Zoom in',\n\t\t\t\tcallback: self.triggerZoomArea\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: `List ${samples.length} ${l.samples}`,\n\t\t\t\tcallback: () => {\n\t\t\t\t\tself.resetInteractions()\n\t\t\t\t\tself.dom.tip.hide()\n\t\t\t\t\tshowTable(self, samples, event.clientX, event.clientY)\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\n\t\tif (ss) {\n\t\t\toptionArr.push({\n\t\t\t\tlabel: ss.buttonText || `Select ${l.Samples}`,\n\t\t\t\tcallback: async () => {\n\t\t\t\t\tss.callback({\n\t\t\t\t\t\tsamples: await self.app.vocabApi.convertSampleId(samples, ss.attributes),\n\t\t\t\t\t\tsource: `Selected ${l.samples} from OncoMatrix`\n\t\t\t\t\t})\n\t\t\t\t\tself.zoomArea.remove()\n\t\t\t\t\tdelete self.zoomArea\n\t\t\t\t\tdelete self.clickedSeriesCell\n\t\t\t\t}\n\t\t\t})\n\t\t} else {\n\t\t\tif (self.state.nav && self.state.nav.header_mode !== 'hidden') {\n\t\t\t\tfor (const s of samples) {\n\t\t\t\t\tif (!s.sampleId) s.sampleId = s.sample\n\t\t\t\t}\n\t\t\t\toptionArr.push({\n\t\t\t\t\tlabel: 'Add to a group',\n\t\t\t\t\tcallback: async () => {\n\t\t\t\t\t\tself.resetInteractions()\n\t\t\t\t\t\tconst group = {\n\t\t\t\t\t\t\tname: 'Group',\n\t\t\t\t\t\t\titems: samples\n\t\t\t\t\t\t}\n\t\t\t\t\t\tself.addGroup(group)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tself.dom.dendroClickMenu.clear() // close the dendrogram clicking menu when brushing\n\t\tself.dom.clickMenu.clear() // close the matrix cell click menu when brushing\n\t\tself.mouseout()\n\t\tself.dom.tip.hide()\n\t\tself.dom.brushMenu.clear()\n\t\tself.dom.brushMenu.d\n\t\t\t.selectAll('div')\n\t\t\t.data(optionArr)\n\t\t\t.enter()\n\t\t\t.append('div')\n\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t.style('border-radius', '0px')\n\t\t\t.html(d => d.label)\n\t\t\t.on('click', event => {\n\t\t\t\tself.dom.brushMenu.d.selectAll('*').remove()\n\t\t\t\tevent.target.__data__.callback()\n\t\t\t})\n\t\tself.dom.brushMenu.show(event.clientX, event.clientY)\n\t}\n\n\t// show the list of clicked samples as a table\n\tconst showTable = function (self, samples, x, y) {\n\t\tdelete self.clickedSeriesCell\n\t\tconst templates = self.state.termdbConfig.urlTemplates\n\t\tconst rows = templates?.sample\n\t\t\t? samples.map(c => [{ value: c._ref_.label, url: `${templates.sample.base}${c.sample}` }])\n\t\t\t: samples.map(c => [{ value: c._ref_.label }])\n\n\t\tconst columns = [{ label: self.settings.matrix.controlLabels.Samples }]\n\n\t\tif (!self.dom.sampleListMenu) self.dom.sampleListMenu = new Menu({ padding: '5px' })\n\t\telse self.dom.sampleListMenu.clear()\n\t\tconst div = self.dom.sampleListMenu.d.append('div')\n\n\t\trenderTable({\n\t\t\trows,\n\t\t\tcolumns,\n\t\t\tdiv,\n\t\t\tshowLines: true,\n\t\t\tmaxWidth: columns.length * '30' + 'vw',\n\t\t\tmaxHeight: '35vh',\n\t\t\tresize: true\n\t\t})\n\t\tself.dom.sampleListMenu.show(x, y)\n\t}\n\n\t// add the selected samples into a group\n\tself.addGroup = async function (group) {\n\t\tconst tw = getSamplelstTW([group])\n\t\tconst filter = getFilter(tw)\n\t\taddNewGroup(self.app, filter, self.state.groups)\n\t}\n\tself.triggerZoomArea = function () {\n\t\tif (self.zoomArea) {\n\t\t\tself.zoomArea.remove()\n\t\t\tdelete self.zoomArea\n\t\t}\n\t\tconst c = self.clickedSeriesCell\n\t\tdelete self.clickedSeriesCell\n\t\tconst s = self.settings.matrix\n\t\tconst d = self.dimensions\n\t\tconst start = c.startCell.totalIndex < c.endCell.totalIndex ? c.startCell : c.endCell\n\t\tconst zoomIndex = Math.floor(start.totalIndex + Math.abs(c.endCell.totalIndex - c.startCell.totalIndex) / 2)\n\t\tconst centerCell = self.sampleOrder[zoomIndex] || self.getImgCell(event)\n\t\tconst colw = self.computedSettings.colw || self.settings.matrix.colw\n\t\tconst maxZoomLevel = s.colwMax / colw\n\t\tconst minZoomLevel = s.colwMin / colw\n\n\t\t// 0.75 is used to add left and right padding to the zoom.\n\t\tconst tentativeZoomLevel = ((s.zoomLevel * d.mainw) / self.zoomWidth) * 0.75\n\t\tconst zoomLevel = Math.max(minZoomLevel, Math.min(tentativeZoomLevel, maxZoomLevel))\n\t\tconst zoomCenter = centerCell.totalIndex * d.dx + (centerCell.grpIndex - 1) * s.colgspace + d.seriesXoffset\n\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: self.id,\n\t\t\tconfig: {\n\t\t\t\tsettings: {\n\t\t\t\t\tmatrix: {\n\t\t\t\t\t\tzoomLevel,\n\t\t\t\t\t\t// try to keep the center of the grey zoom rectangle in the same position before and after zoom\n\t\t\t\t\t\t// this could aslo support mouse scroll zoom in the future.\n\t\t\t\t\t\tzoomCenterPct: zoomLevel < 1 && d.mainw >= d.zoomedMainW ? 0.5 : zoomCenter / d.mainw,\n\t\t\t\t\t\tzoomIndex,\n\t\t\t\t\t\tzoomGrpIndex: centerCell.grpIndex\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tself.resetInteractions()\n\t}\n}\n\nfunction setLengendActions(self) {\n\tself.legendLabelMouseover = event => {\n\t\tconst targetData = event.target.__data__\n\t\tif (\n\t\t\t!targetData ||\n\t\t\ttargetData.dt == dtgeneexpression ||\n\t\t\ttargetData.dt == dtmetaboliteintensity ||\n\t\t\ttargetData.dt == dtproteomeabundance\n\t\t) {\n\t\t\t// for gene expression don't use legend as filter\n\t\t\treturn\n\t\t}\n\t\tif (!targetData.isLegendItem && !targetData.dt) {\n\t\t\t// do not change color when its a non-genevariant legend group name\n\t\t\treturn\n\t\t}\n\t\tconst legendGrpHidden =\n\t\t\tself.config.legendGrpFilter.lst.find(\n\t\t\t\tf => f.dt?.includes(targetData.dt) && (!f.origin || f.origin == targetData.origin)\n\t\t\t) && true\n\t\tif (targetData.isLegendItem && legendGrpHidden) {\n\t\t\t// when the legend's group is hidden\n\t\t\treturn\n\t\t}\n\t\tconst term = self.termOrder.find(t => t.tw.$id == targetData.$id)\n\t\tif (term?.tw?.q?.type == 'predefined-groupset' || term?.tw?.q?.type == 'custom-groupset') {\n\t\t\t// when the term has customized groupsetting\n\t\t\treturn\n\t\t}\n\t\tif (event.target.nodeName == 'rect') select(event.target).style('cursor', 'pointer')\n\t\telse select(event.target).style('fill', 'blue').style('cursor', 'pointer')\n\t}\n\n\tself.legendLabelMouseout = event => {\n\t\t// Commenting out for reference. Borders for mouse events are not desired.\n\t\t// if (event.target.nodeName == 'rect') select(event.target).style('stroke', '#aaa')\n\t\t// else\n\t\tselect(event.target).style('fill', '')\n\t}\n\n\tself.legendLabelMouseup = event => {\n\t\tconst targetData = event.target.__data__\n\t\tif (\n\t\t\t!targetData ||\n\t\t\ttargetData.dt == dtgeneexpression ||\n\t\t\ttargetData.dt == dtmetaboliteintensity ||\n\t\t\ttargetData.dt == dtproteomeabundance\n\t\t) {\n\t\t\t// for gene expression don't use legend as filter\n\t\t\treturn\n\t\t}\n\t\tif (event.target.className.baseVal.includes('sjpp-color-scale') && targetData.dt == dtcnv) {\n\t\t\t/** Changing the cnv cutoffs are enabled from the clickable color scale menu.\n\t\t\t * Disable creating the standard matrix menu from clicking the color scale.*/\n\t\t\treturn\n\t\t}\n\t\tconst byOrigin = self.state.termdbConfig.assayAvailability?.byDt?.[parseInt(targetData.dt)]?.byOrigin\n\t\tconst menuGrp = self.dom.legendMenu.clear()\n\n\t\t// When clicking a legend group name\n\t\tif (!targetData.isLegendItem) {\n\t\t\tif (!targetData.dt) {\n\t\t\t\t// do not use as filter when its a non-genevariant legend group name\n\t\t\t\t// or when its a genevariant legend group name for hierCluster\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t//legendGrpFilterIndex is the index of the filter that is already in self.config.legendGrpFilter.lst\n\t\t\tconst legendGrpFilterIndex = self.config.legendGrpFilter.lst.findIndex(\n\t\t\t\tf =>\n\t\t\t\t\tf.dt.slice().sort().toString() === targetData.dt.slice().sort().toString() &&\n\t\t\t\t\t(!byOrigin || f.origin == targetData.origin)\n\t\t\t)\n\n\t\t\t//legendFilterIndex is the index of the first filter (in this filter group being clicked) that is already in self.config.legendValueFilter.lst, if there's any\n\t\t\tconst legendFilterIndex = self.config.legendValueFilter.lst.findIndex(\n\t\t\t\tl =>\n\t\t\t\t\tl.legendGrpName == targetData.name &&\n\t\t\t\t\tl.tvs.values.find(v => targetData.dt.includes(v.dt) && (!byOrigin || v.origin == targetData.origin))\n\t\t\t)\n\t\t\tconst div = menuGrp.d.append('div')\n\n\t\t\t// when the legend group is not hidden\n\t\t\tif (legendGrpFilterIndex == -1) {\n\t\t\t\t// for consequences/mutations legend group\n\t\t\t\tif (targetData.dt.includes(dtsnvindel)) {\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 only truncating mutations`)\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\tshowOnlyTrunc(menuGrp, targetData, self)\n\t\t\t\t\t\t})\n\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 only protein-changing mutations`)\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\tshowOnlyPC(menuGrp, targetData, self)\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tconst onlyGeneGroupShown =\n\t\t\t\t\tself.legendData.filter(\n\t\t\t\t\t\tl =>\n\t\t\t\t\t\t\tl.dt && !l.crossedOut && (l.name == targetData.name || l.items.find(i => !i.greyedOut && !i.crossedOut))\n\t\t\t\t\t).length <= 1\n\t\t\t\tdiv\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'class',\n\t\t\t\t\t\tonlyGeneGroupShown ? 'sja_menuoption_not_interactive sja_sharp_border' : 'sja_menuoption sja_sharp_border'\n\t\t\t\t\t)\n\t\t\t\t\t.text(`Do not show ${targetData.name}`)\n\t\t\t\t\t.style('opacity', onlyGeneGroupShown ? '0.5' : '1')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tif (!onlyGeneGroupShown) showNone(menuGrp, targetData, self)\n\t\t\t\t\t})\n\t\t\t}\n\t\t\t// when the legend group is hidden or when a legend filter belongs to the legend group exist in legendValueFilter, show the \"show all\" option\n\t\t\tif (legendGrpFilterIndex !== -1 || legendFilterIndex !== -1) {\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 all ${targetData.name}`)\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tshowAll(menuGrp, targetData, self)\n\t\t\t\t\t})\n\t\t\t}\n\n\t\t\t// // adding the option to specify criteria for a CNV alteration for numeric CNV\n\t\t\t// const cnv =\n\t\t\t// \tObject.keys(self.config.cnvCutoffs).length !== 0\n\t\t\t// \t\t? self.config.cnvCutoffs\n\t\t\t// \t\t: self.state.termdbConfig?.queries?.cnv\n\t\t\t// const keys = Object.keys(cnv)\n\t\t\t// if (\n\t\t\t// \ttargetData.dt.includes(dtcnv) &&\n\t\t\t// \tlegendGrpFilterIndex == -1 &&\n\t\t\t// \t(keys.includes('cnvGainCutoff') || keys.includes('cnvLossCutoff' || keys.includes('cnvMaxLength')))\n\t\t\t// ) {\n\t\t\t// \tconst existingCnvSetDiv = div.select('.cnv-set-div')\n\t\t\t// \tif (!existingCnvSetDiv.empty()) existingCnvSetDiv.remove()\n\n\t\t\t// \tconst cnvSetDiv = div.append('div').classed('cnv-set-div', true)\n\n\t\t\t// \t// render cnv config\n\t\t\t// \tconst arg = {\n\t\t\t// \t\tholder: cnvSetDiv,\n\t\t\t// \t\tcnvGainCutoff: cnv.cnvGainCutoff,\n\t\t\t// \t\tcnvLossCutoff: cnv.cnvLossCutoff,\n\t\t\t// \t\tcnvMaxLength: cnv.cnvMaxLength,\n\t\t\t// \t\tcallback: config => {\n\t\t\t// \t\t\tmenuGrp.hide()\n\t\t\t// \t\t\tself.config.cnvCutoffs = structuredClone(config)\n\t\t\t// \t\t\tfor (const termgroup of self.config.termgroups) {\n\t\t\t// \t\t\t\tfor (const t of termgroup.lst) {\n\t\t\t// \t\t\t\t\tif (t.term.type == 'geneVariant') {\n\t\t\t// \t\t\t\t\t\tt.q.cnvGainCutoff = config.cnvGainCutoff\n\t\t\t// \t\t\t\t\t\tt.q.cnvLossCutoff = config.cnvLossCutoff\n\t\t\t// \t\t\t\t\t\tt.q.cnvMaxLength = config.cnvMaxLength\n\t\t\t// \t\t\t\t\t}\n\t\t\t// \t\t\t\t}\n\t\t\t// \t\t\t}\n\t\t\t// \t\t\tself.app.dispatch({\n\t\t\t// \t\t\t\ttype: 'plot_edit',\n\t\t\t// \t\t\t\tid: self.id,\n\t\t\t// \t\t\t\tconfig: self.config\n\t\t\t// \t\t\t})\n\t\t\t// \t\t}\n\t\t\t// \t}\n\n\t\t\t// \trenderCnvConfig(arg)\n\t\t\t// }\n\t\t\tmenuGrp.showunder(event.target)\n\t\t\treturn\n\t\t}\n\n\t\t// when clicking a legend item\n\t\tconst legendGrpHidden =\n\t\t\tself.config.legendGrpFilter.lst.find(\n\t\t\t\tf => f.dt?.includes(targetData.dt) && (!f.origin || f.origin == targetData.origin)\n\t\t\t) && true\n\t\tif (targetData.isLegendItem && legendGrpHidden) {\n\t\t\t// when the legend's group is hidden\n\t\t\treturn\n\t\t}\n\n\t\tconst term = self.terms.find(t => t.tw.$id == targetData.$id)\n\t\tif (term?.tw?.q?.type == 'predefined-groupset' || term?.tw?.q?.type == 'custom-groupset') {\n\t\t\t// when the term has customized groupsetting\n\t\t\treturn\n\t\t}\n\t\t//legendFilterIndex is the index of the filter that is already in self.config.legendValueFilter.lst\n\t\t// All the filters in self.config.legendValueFilter.lst is joined by 'and' and for all of them the isnot is true.\n\t\tlet legendFilterIndex\n\t\tif (targetData.dt) {\n\t\t\t// when its geneVariant term\n\t\t\tlegendFilterIndex = self.config.legendValueFilter.lst.findIndex(\n\t\t\t\tl =>\n\t\t\t\t\tl.legendGrpName == targetData.termid &&\n\t\t\t\t\tl.tvs.values.find(\n\t\t\t\t\t\tv =>\n\t\t\t\t\t\t\tv.dt == targetData.dt && (!byOrigin || v.origin == targetData.origin) && v.mclasslst[0] == targetData.key\n\t\t\t\t\t)\n\t\t\t)\n\t\t} else {\n\t\t\t// when its non-geneVariant term\n\t\t\tconst legendTerm = self.termOrder.find(to => to.tw.$id == targetData.$id)?.tw?.term\n\t\t\tif (!legendTerm) {\n\t\t\t\t// legend value filter works for the terms in self.termOrder\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (legendTerm.type == 'categorical' || legendTerm.type == 'survival') {\n\t\t\t\tlegendFilterIndex = self.config.legendValueFilter.lst.findIndex(\n\t\t\t\t\tl => l.legendGrpName == targetData.termid && l.tvs.values.find(v => v.key == targetData.key)\n\t\t\t\t)\n\t\t\t} else if (isNumericTerm(legendTerm)) {\n\t\t\t\tlegendFilterIndex = self.config.legendValueFilter.lst.findIndex(\n\t\t\t\t\tl => l.legendGrpName == targetData.termid && l.tvs.ranges.find(r => r.name == targetData.key)\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\tconst controlLabels = self.settings.matrix.controlLabels\n\n\t\tconst div = menuGrp.d.append('div')\n\n\t\t/** targetItemData may either be the target or parent data (i.e. the original parent mclass key for a merged\n\t\t * legend item.) */\n\t\tconst addMenuOptions = targetItemData => {\n\t\t\tconst term = self.termOrder.find(t => t.tw.$id == targetItemData.$id)?.tw?.term\n\t\t\t//Add the hard filter option\n\t\t\tif (\n\t\t\t\tterm?.type !== 'termCollection' &&\n\t\t\t\t(!targetItemData.dt || self.type !== 'hierCluster' || legendFilterIndex !== -1)\n\t\t\t) {\n\t\t\t\t// Do not show the hard filter option for hierCluster geneVariant legend items.\n\n\t\t\t\t// ********* TODO ********\n\t\t\t\t// allow to hard filter geneVariant legend for hierCluster\n\t\t\t\t// ********* TODO ********\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(\n\t\t\t\t\t\ttargetItemData.dt\n\t\t\t\t\t\t\t? legendFilterIndex == -1\n\t\t\t\t\t\t\t\t? `Hide ${controlLabels.samples} with ${mclass[targetItemData.key].label}`\n\t\t\t\t\t\t\t\t: `Show ${controlLabels.samples} with ${mclass[targetItemData.key].label}`\n\t\t\t\t\t\t\t: legendFilterIndex == -1\n\t\t\t\t\t\t\t? 'Hide'\n\t\t\t\t\t\t\t: 'Show'\n\t\t\t\t\t)\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tmenuGrp.hide()\n\t\t\t\t\t\tif (legendFilterIndex == -1) {\n\t\t\t\t\t\t\t// when its shown and now hide it\n\t\t\t\t\t\t\tif (targetItemData.dt) {\n\t\t\t\t\t\t\t\t// for a geneVariant term\n\t\t\t\t\t\t\t\t// add a new \"hard filter\" to filter out samples that have genes' values match with the legend's origin + legend's dt + legend's class\n\t\t\t\t\t\t\t\tconst filterNew = {\n\t\t\t\t\t\t\t\t\tlegendGrpName: targetItemData.termid,\n\t\t\t\t\t\t\t\t\ttype: 'tvs',\n\t\t\t\t\t\t\t\t\ttvs: {\n\t\t\t\t\t\t\t\t\t\tisnot: true,\n\t\t\t\t\t\t\t\t\t\tlegendFilterType: 'geneVariant_hard', // indicates this matrix legend filter is hard filter\n\t\t\t\t\t\t\t\t\t\tterm: { type: 'geneVariant' },\n\t\t\t\t\t\t\t\t\t\tvalues: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tdt: targetItemData.dt,\n\t\t\t\t\t\t\t\t\t\t\t\torigin: targetItemData.origin,\n\t\t\t\t\t\t\t\t\t\t\t\tmclasslst: [targetItemData.key]\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tself.config.legendValueFilter.lst.push(filterNew)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// for a non-geneVariant term\n\t\t\t\t\t\t\t\tconst term = self.termOrder.find(t => t.tw.$id == targetItemData.$id).tw.term\n\t\t\t\t\t\t\t\tif (term.type == 'categorical' || term.type == 'survival') {\n\t\t\t\t\t\t\t\t\tterm.$id = targetItemData.$id\n\t\t\t\t\t\t\t\t\tconst filterGrpIndex = self.config.legendValueFilter.lst.findIndex(\n\t\t\t\t\t\t\t\t\t\tl => l.legendGrpName == targetItemData.termid\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\tif (filterGrpIndex == -1) {\n\t\t\t\t\t\t\t\t\t\tconst filterNew = {\n\t\t\t\t\t\t\t\t\t\t\tlegendGrpName: targetItemData.termid,\n\t\t\t\t\t\t\t\t\t\t\ttype: 'tvs',\n\t\t\t\t\t\t\t\t\t\t\ttvs: {\n\t\t\t\t\t\t\t\t\t\t\t\tisnot: true,\n\t\t\t\t\t\t\t\t\t\t\t\tterm,\n\t\t\t\t\t\t\t\t\t\t\t\tvalues: [{ key: targetItemData.key }]\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tself.config.legendValueFilter.lst.push(filterNew)\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t// the filter for the categorical or survival term exist, but the current legend key is not there.\n\t\t\t\t\t\t\t\t\t\tself.config.legendValueFilter.lst[filterGrpIndex].tvs.values.push({ key: targetItemData.key })\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (isNumericTerm(term)) {\n\t\t\t\t\t\t\t\t\tterm.$id = targetItemData.$id\n\t\t\t\t\t\t\t\t\tconst filterNew = {\n\t\t\t\t\t\t\t\t\t\tlegendGrpName: targetItemData.termid,\n\t\t\t\t\t\t\t\t\t\ttype: 'tvs',\n\t\t\t\t\t\t\t\t\t\ttvs: {\n\t\t\t\t\t\t\t\t\t\t\tisnot: true,\n\t\t\t\t\t\t\t\t\t\t\tterm,\n\t\t\t\t\t\t\t\t\t\t\tranges: [self.data.refs.byTermId[targetItemData.$id].bins.find(b => targetItemData.key == b.name)]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tself.config.legendValueFilter.lst.push(filterNew)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// when the legend is crossed-out, either by clicking hide or by clicking another legend and show-only,\n\t\t\t\t\t\t\t// A filter to filter out the legend's dt + legend's class exist in self.config.legendValueFilter\n\t\t\t\t\t\t\t// So remove the filter that filters out the legend's dt + legend's class\n\t\t\t\t\t\t\tif (targetItemData.dt) self.config.legendValueFilter.lst.splice(legendFilterIndex, 1)\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tconst term = self.termOrder.find(t => t.tw.$id == targetItemData.$id).tw.term\n\t\t\t\t\t\t\t\tif (term.type == 'categorical' || term.type == 'survival') {\n\t\t\t\t\t\t\t\t\tconst filterGrpIndex = self.config.legendValueFilter.lst.findIndex(\n\t\t\t\t\t\t\t\t\t\tl => l.legendGrpName == targetItemData.termid\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\tconst filterIndex = self.config.legendValueFilter.lst[filterGrpIndex].tvs.values.findIndex(\n\t\t\t\t\t\t\t\t\t\tv => v.key == targetItemData.key\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\tself.config.legendValueFilter.lst[filterGrpIndex].tvs.values.splice(filterIndex, 1)\n\t\t\t\t\t\t\t\t} else self.config.legendValueFilter.lst.splice(legendFilterIndex, 1)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (self.state.config.settings.matrix.addMutationCNVButtons && self.chartType !== 'hierCluster') {\n\t\t\t\t\t\t\tif (targetItemData.dt == dtsnvindel) {\n\t\t\t\t\t\t\t\tself.config.settings.matrix.showMatrixMutation = 'bySelection'\n\t\t\t\t\t\t\t\tconst cl = self.settings.matrix.controlLabels\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tself.legendData.find(l => l.name == cl.Mutations)?.items?.length ==\n\t\t\t\t\t\t\t\t\tself.config.legendValueFilter.lst.filter(l => l.legendGrpName == cl.Mutations)?.length\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t//when all mutation items are hidden by applying legend value filter\n\t\t\t\t\t\t\t\t\tself.config.settings.matrix.allMatrixMutationHidden = true\n\t\t\t\t\t\t\t\t} else self.config.settings.matrix.allMatrixMutationHidden = false\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (targetItemData.dt == dtcnv) {\n\t\t\t\t\t\t\t\tself.config.settings.matrix.showMatrixCNV = 'bySelection'\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tself.legendData.find(l => l.name == 'CNV')?.items?.length ==\n\t\t\t\t\t\t\t\t\tself.config.legendValueFilter.lst.filter(l => l.legendGrpName == 'CNV')?.length\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t//when all CNV items are hidden by applying legend value filter\n\t\t\t\t\t\t\t\t\tself.config.settings.matrix.allMatrixCNVHidden = true\n\t\t\t\t\t\t\t\t\tif (self.config.settings.matrix.cellEncoding == 'oncoprint')\n\t\t\t\t\t\t\t\t\t\tself.config.settings.matrix.cellEncoding = 'single'\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tself.config.settings.matrix.allMatrixCNVHidden = false\n\t\t\t\t\t\t\t\t\tif (self.config.settings.matrix.cellEncoding !== '')\n\t\t\t\t\t\t\t\t\t\tself.config.settings.matrix.cellEncoding = 'oncoprint'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tself.app.dispatch({\n\t\t\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\t\t\tid: self.id,\n\t\t\t\t\t\t\tconfig: self.config\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (targetItemData.isLegendItem) {\n\t\t\t\t// Add the soft filter option only for the not already hidden geneVariant legend\n\t\t\t\tif (targetItemData.dt && legendFilterIndex == -1 && term?.type !== 'termCollection') {\n\t\t\t\t\t// only when filtering a not already hidden geneVariant legend, show the soft filter\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(`Do not show ${mclass[targetItemData.key]?.label}`)\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\tmenuGrp.hide()\n\t\t\t\t\t\t\t// add a new \"soft filter\" to filter out the legend's origin + legend's dt + legend's class\n\t\t\t\t\t\t\t// add a new \"soft filter\" to filter out samples that only have mutation match with (the legend's origin + legend's dt + legend's class) and no other mutation\n\t\t\t\t\t\t\t// and then hide the selected mutation on samples that have this selected mutation if the sample was not filtered out by this soft filter.\n\n\t\t\t\t\t\t\tconst filterNew = {\n\t\t\t\t\t\t\t\tlegendGrpName: targetItemData.termid,\n\t\t\t\t\t\t\t\ttype: 'tvs',\n\t\t\t\t\t\t\t\ttvs: {\n\t\t\t\t\t\t\t\t\tisnot: true,\n\t\t\t\t\t\t\t\t\tlegendFilterType: 'geneVariant_soft', // indicates this matrix legend filter is soft filter\n\t\t\t\t\t\t\t\t\tterm: { type: 'geneVariant' },\n\t\t\t\t\t\t\t\t\tvalues: [{ dt: targetItemData.dt, origin: targetItemData.origin, mclasslst: [targetItemData.key] }]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tself.config.legendValueFilter.lst.push(filterNew)\n\n\t\t\t\t\t\t\tif (self.state.config.settings.matrix.addMutationCNVButtons && self.chartType !== 'hierCluster') {\n\t\t\t\t\t\t\t\tif (targetItemData.dt == dtsnvindel) {\n\t\t\t\t\t\t\t\t\tself.config.settings.matrix.showMatrixMutation = 'bySelection'\n\t\t\t\t\t\t\t\t\tconst cl = self.settings.matrix.controlLabels\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tself.legendData.find(l => l.name == cl.Mutations)?.items?.length ==\n\t\t\t\t\t\t\t\t\t\tself.config.legendValueFilter.lst.filter(l => l.legendGrpName == cl.Mutations)?.length\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t//when all mutation items are hidden by applying legend value filter\n\t\t\t\t\t\t\t\t\t\tself.config.settings.matrix.allMatrixMutationHidden = true\n\t\t\t\t\t\t\t\t\t} else self.config.settings.matrix.allMatrixMutationHidden = false\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (targetItemData.dt == dtcnv) {\n\t\t\t\t\t\t\t\t\tself.config.settings.matrix.showMatrixCNV = 'bySelection'\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tself.legendData.find(l => l.name == 'CNV')?.items?.length ==\n\t\t\t\t\t\t\t\t\t\tself.config.legendValueFilter.lst.filter(l => l.legendGrpName == 'CNV')?.length\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t//when all CNV items are hidden by applying legend value filter\n\t\t\t\t\t\t\t\t\t\tself.config.settings.matrix.allMatrixCNVHidden = true\n\t\t\t\t\t\t\t\t\t\tif (self.config.settings.matrix.cellEncoding == 'oncoprint')\n\t\t\t\t\t\t\t\t\t\t\tself.config.settings.matrix.cellEncoding = 'single'\n\t\t\t\t\t\t\t\t\t} else self.config.settings.matrix.allMatrixCNVHidden = false\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tself.app.dispatch({\n\t\t\t\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\t\t\t\tid: self.id,\n\t\t\t\t\t\t\t\tconfig: self.config\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\t//Add the show only option only for non-genevariant legend\n\t\t\t\tif (!targetItemData.dt && term?.type !== 'termCollection') {\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 only')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\tmenuGrp.hide()\n\t\t\t\t\t\t\tconst term = self.termOrder.find(t => t.tw.$id == targetItemData.$id)?.tw?.term\n\t\t\t\t\t\t\tconst legendGrp =\n\t\t\t\t\t\t\t\tself.legendData.find(lg => lg.name == targetItemData.termid) ||\n\t\t\t\t\t\t\t\tself.legendData.find(lg => lg.$id == targetItemData.$id)\n\n\t\t\t\t\t\t\t// reset self.config.legendValueFilter.lst to remove all the filters in the lst that's in the same legendGrp\n\t\t\t\t\t\t\tself.config.legendValueFilter.lst = self.config.legendValueFilter.lst.filter(\n\t\t\t\t\t\t\t\tl => l.legendGrpName !== targetItemData.termid\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t/*\n\t\t\t\t\t\tif (targetItemData.dt) {\n\t\t\t\t\t\t\t// for a geneVariant term\n\t\t\t\t\t\t\tfor (const l of legendGrp.items) {\n\t\t\t\t\t\t\t\tif (l.dt == targetItemData.dt && (l.origin ? l.origin == targetItemData.origin : true) && l.key == targetItemData.key)\n\t\t\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t\t\tconst filterNew = {\n\t\t\t\t\t\t\t\t\tlegendGrpName: targetItemData.termid,\n\t\t\t\t\t\t\t\t\ttype: 'tvs',\n\t\t\t\t\t\t\t\t\ttvs: {\n\t\t\t\t\t\t\t\t\t\tisnot: true,\n\t\t\t\t\t\t\t\t\t\tlegendFilterType: 'geneVariant_soft', // indicates this matrix legend filter is soft filter\n\t\t\t\t\t\t\t\t\t\tterm: { type: 'geneVariant' },\n\t\t\t\t\t\t\t\t\t\tvalues: [{ dt: l.dt, origin: l.origin, mclasslst: [l.key] }]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (!self.config.legendValueFilter.lst.length) self.config.legendValueFilter.lst = [filterNew]\n\t\t\t\t\t\t\t\telse self.config.legendValueFilter.lst.push(filterNew)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst term = self.termOrder.find(t => t.tw.$id == targetItemData.$id).tw.term\n\t\t\t\t\t\t*/\n\n\t\t\t\t\t\t\t// for a non-geneVariant term\n\t\t\t\t\t\t\tif (term.type == 'categorical' || term.type == 'survival') {\n\t\t\t\t\t\t\t\tterm.$id = targetItemData.$id\n\t\t\t\t\t\t\t\tfor (const l of legendGrp.items) {\n\t\t\t\t\t\t\t\t\tif (l.key == targetItemData.key) continue\n\t\t\t\t\t\t\t\t\tconst filterGrpIndex = self.config.legendValueFilter.lst.findIndex(\n\t\t\t\t\t\t\t\t\t\tl => l.legendGrpName == targetItemData.termid\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\tif (filterGrpIndex == -1) {\n\t\t\t\t\t\t\t\t\t\tconst filterNew = {\n\t\t\t\t\t\t\t\t\t\t\tlegendGrpName: targetItemData.termid,\n\t\t\t\t\t\t\t\t\t\t\ttype: 'tvs',\n\t\t\t\t\t\t\t\t\t\t\ttvs: {\n\t\t\t\t\t\t\t\t\t\t\t\tisnot: true,\n\t\t\t\t\t\t\t\t\t\t\t\tterm,\n\t\t\t\t\t\t\t\t\t\t\t\tvalues: [{ key: l.key }]\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tself.config.legendValueFilter.lst.push(filterNew)\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tself.config.legendValueFilter.lst[filterGrpIndex].tvs.values.push({ key: l.key })\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (isNumericTerm(term)) {\n\t\t\t\t\t\t\t\tterm.$id = targetItemData.$id\n\t\t\t\t\t\t\t\tfor (const l of legendGrp.items) {\n\t\t\t\t\t\t\t\t\tif (l.key == targetItemData.key) continue\n\t\t\t\t\t\t\t\t\tconst filterNew = {\n\t\t\t\t\t\t\t\t\t\tlegendGrpName: targetItemData.termid,\n\t\t\t\t\t\t\t\t\t\ttype: 'tvs',\n\t\t\t\t\t\t\t\t\t\ttvs: {\n\t\t\t\t\t\t\t\t\t\t\tisnot: true,\n\t\t\t\t\t\t\t\t\t\t\tterm,\n\t\t\t\t\t\t\t\t\t\t\tranges: [self.data.refs.byTermId[targetItemData.$id].bins.find(b => l.key == b.name)]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (!self.config.legendValueFilter.lst.length) self.config.legendValueFilter.lst = [filterNew]\n\t\t\t\t\t\t\t\t\telse self.config.legendValueFilter.lst.push(filterNew)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tself.app.dispatch({\n\t\t\t\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\t\t\t\tid: self.id,\n\t\t\t\t\t\t\t\tconfig: self.config\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\t//Add the show all option only for non-genevariant legend\n\t\t\t\tif (!targetItemData.dt && term?.type !== 'termCollection') {\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\tmenuGrp.hide()\n\t\t\t\t\t\t\tself.config.legendValueFilter.lst = self.config.legendValueFilter.lst.filter(\n\t\t\t\t\t\t\t\tl => l.legendGrpName !== targetItemData.termid\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\tself.app.dispatch({\n\t\t\t\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\t\t\t\tid: self.id,\n\t\t\t\t\t\t\t\tconfig: self.config\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\t// adding the change color option\n\t\t\t\tif (!targetData.domain) {\n\t\t\t\t\tdiv.append('span').text('Color').style('padding', '5px 10px').style('margin', '1px')\n\t\t\t\t\tself.dom.legendColorInput = div\n\t\t\t\t\t\t.append('input')\n\t\t\t\t\t\t.attr('type', 'color')\n\t\t\t\t\t\t.attr('aria-label', `change the bar color`)\n\t\t\t\t\t\t.attr('value', targetData.color?.startsWith('rgb') ? rgb2hex(targetData.color) : targetData.color)\n\t\t\t\t\t\t.on('change', async () => {\n\t\t\t\t\t\t\tmenuGrp.hide()\n\t\t\t\t\t\t\tconst color = self.dom.legendColorInput.node().value\n\t\t\t\t\t\t\tif (targetData.dt) {\n\t\t\t\t\t\t\t\tif (!mclass[targetData.key].origColor) mclass[targetData.key].origColor = mclass[targetData.key].color\n\t\t\t\t\t\t\t\tmclass[targetData.key].color = color\n\t\t\t\t\t\t\t\tself.main()\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst twSpecificSettings = self.config.settings.matrix.twSpecificSettings\n\t\t\t\t\t\t\tif (!twSpecificSettings[targetData.$id]) twSpecificSettings[targetData.$id] = {}\n\t\t\t\t\t\t\tconst twSettings = twSpecificSettings[targetData.$id]\n\n\t\t\t\t\t\t\tif (!twSettings[targetData.key]) twSettings[targetData.key] = {}\n\t\t\t\t\t\t\ttwSettings[targetData.key].color = color\n\n\t\t\t\t\t\t\tself.app.dispatch({\n\t\t\t\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\t\t\t\tid: self.opts.id,\n\t\t\t\t\t\t\t\tconfig: { settings: { matrix: { twSpecificSettings } } }\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\t\t\t\t\tif (targetData.dt && mclass[targetData.key].origColor) {\n\t\t\t\t\t\tconst resetDiv = div.append('div').style('display', 'inline-block')\n\t\t\t\t\t\tconst handler = () => {\n\t\t\t\t\t\t\tmenuGrp.hide()\n\t\t\t\t\t\t\tmclass[targetData.key].color = mclass[targetData.key].origColor\n\t\t\t\t\t\t\tdelete mclass[targetData.key].origColor\n\t\t\t\t\t\t\tself.main()\n\t\t\t\t\t\t}\n\t\t\t\t\t\ticons['restart'](resetDiv, { handler, title: 'Reset to original color' })\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tmenuGrp.showunder(event.target)\n\t\t\t}\n\t\t}\n\t\tif (targetData.parents) {\n\t\t\tfor (const p of targetData.parents) {\n\t\t\t\taddMenuOptions(p)\n\t\t\t}\n\t\t} else {\n\t\t\taddMenuOptions(targetData)\n\t\t}\n\t}\n}\n\nfunction setMutationSelectionActions(self) {\n\tself.mutationSelectionActions = {\n\t\tonlyTruncating: showOnlyTrunc,\n\t\tonlyPC: showOnlyPC,\n\t\tnone: showNone,\n\t\tall: showAll,\n\t\tbySelection: showByLegendFilter\n\t}\n\tself.mutationControlCallback = mutationSelection => {\n\t\tconst menuGrp = self.dom.legendMenu.clear()\n\t\tconst targetData = self.legendData.find(l => l.dt?.includes(dtsnvindel))\n\t\tself.mutationSelectionActions[mutationSelection](menuGrp, targetData, self, 'mutation')\n\t}\n\tself.CNVControlCallback = CNVSelection => {\n\t\tconst menuGrp = self.dom.legendMenu.clear()\n\t\tconst targetData = self.legendData.find(l => l.dt?.includes(dtcnv))\n\t\tself.mutationSelectionActions[CNVSelection](menuGrp, targetData, self, 'CNV')\n\t}\n\n\tself.geneStyleControlCallback = styleSelection => {\n\t\tconst targetData = self.legendData.find(l => l.dt?.includes(dtcnv))\n\t\tif (styleSelection == '') showStackedStyle(targetData, self) //stacked style\n\t\telse if (styleSelection == 'single') showSingleStyle(targetData, self)\n\t\telse if (styleSelection == 'oncoprint') showOncoprintStyle(targetData, self)\n\t}\n}\n\nfunction showSingleStyle(targetData, self) {\n\tif (self.state.config.settings.matrix.addMutationCNVButtons && self.chartType !== 'hierCluster') {\n\t\tif (targetData) {\n\t\t\t// there are CNV data\n\t\t\tconst byOrigin = self.state.termdbConfig.assayAvailability?.byDt?.[parseInt(targetData.dt)]?.byOrigin\n\n\t\t\t//legendGrpFilterIndex is the index of the filter that is already in self.config.legendGrpFilter.lst\n\t\t\tconst legendGrpFilterIndex = self.config.legendGrpFilter.lst.findIndex(\n\t\t\t\tf =>\n\t\t\t\t\tf.dt.slice().sort().toString() === targetData.dt.slice().sort().toString() &&\n\t\t\t\t\t(!byOrigin || f.origin == targetData.origin)\n\t\t\t)\n\t\t\tif (legendGrpFilterIndex == -1) {\n\t\t\t\t// when the legend group is shown and now hide it\n\t\t\t\t// add a new \"legend group filter\" to filter out the legend group's origin + legend group's dt\n\t\t\t\tconst filterNew = { dt: targetData.dt }\n\t\t\t\tif (byOrigin) {\n\t\t\t\t\t// when distinguish between germline and somatic for the dt\n\t\t\t\t\tfilterNew.origin = targetData.origin\n\t\t\t\t}\n\t\t\t\t// when the legend group is hidden, need to remove the individual legend filter belongs to this legend group\n\t\t\t\tself.config.legendValueFilter.lst = self.config.legendValueFilter.lst.filter(\n\t\t\t\t\tf => f.legendGrpName !== targetData.name\n\t\t\t\t)\n\t\t\t\tself.config.legendGrpFilter.lst.push(filterNew)\n\t\t\t}\n\t\t}\n\t\tself.config.settings.matrix.cellEncoding = 'single'\n\t}\n\n\tself.app.dispatch({\n\t\ttype: 'plot_edit',\n\t\tid: self.id,\n\t\tconfig: self.config\n\t})\n}\n\nfunction showOncoprintStyle(targetData, self) {\n\tif (self.state.config.settings.matrix.addMutationCNVButtons && self.chartType !== 'hierCluster') {\n\t\tif (targetData) {\n\t\t\t// there are CNV data\n\t\t\tconst byOrigin = self.state.termdbConfig.assayAvailability?.byDt?.[parseInt(targetData.dt)]?.byOrigin\n\n\t\t\t//legendGrpFilterIndex is the index of the filter that is already in self.config.legendGrpFilter.lst\n\t\t\tconst legendGrpFilterIndex = self.config.legendGrpFilter.lst.findIndex(\n\t\t\t\tf =>\n\t\t\t\t\tf.dt.slice().sort().toString() === targetData.dt.slice().sort().toString() &&\n\t\t\t\t\t(!byOrigin || f.origin == targetData.origin)\n\t\t\t)\n\t\t\tif (legendGrpFilterIndex !== -1) self.config.legendGrpFilter.lst.splice(legendGrpFilterIndex, 1)\n\t\t\t// when changing to oncoPrint, need to remove the CNV legend filters\n\t\t\tself.config.legendValueFilter.lst = self.config.legendValueFilter.lst.filter(\n\t\t\t\tf => f.legendGrpName !== targetData.name\n\t\t\t)\n\t\t}\n\t\tself.config.settings.matrix.showMatrixCNV = 'all'\n\t\tself.config.settings.matrix.allMatrixCNVHidden = false\n\t}\n\tself.config.settings.matrix.cellEncoding = 'oncoprint'\n\tself.app.dispatch({\n\t\ttype: 'plot_edit',\n\t\tid: self.id,\n\t\tconfig: self.config\n\t})\n}\n\nfunction showStackedStyle(targetData, self) {\n\tif (self.state.config.settings.matrix.addMutationCNVButtons && self.chartType !== 'hierCluster') {\n\t\tif (targetData) {\n\t\t\t// there are CNV data\n\t\t\tconst byOrigin = self.state.termdbConfig.assayAvailability?.byDt?.[parseInt(targetData.dt)]?.byOrigin\n\n\t\t\t//legendGrpFilterIndex is the index of the filter that is already in self.config.legendGrpFilter.lst\n\t\t\tconst legendGrpFilterIndex = self.config.legendGrpFilter.lst.findIndex(\n\t\t\t\tf =>\n\t\t\t\t\tf.dt.slice().sort().toString() === targetData.dt.slice().sort().toString() &&\n\t\t\t\t\t(!byOrigin || f.origin == targetData.origin)\n\t\t\t)\n\t\t\tif (legendGrpFilterIndex !== -1) self.config.legendGrpFilter.lst.splice(legendGrpFilterIndex, 1)\n\t\t\t// when changing to oncoPrint, need to remove the CNV legend filters\n\t\t\tself.config.legendValueFilter.lst = self.config.legendValueFilter.lst.filter(\n\t\t\t\tf => f.legendGrpName !== targetData.name\n\t\t\t)\n\t\t}\n\t}\n\n\tself.config.settings.matrix.cellEncoding = ''\n\tself.app.dispatch({\n\t\ttype: 'plot_edit',\n\t\tid: self.id,\n\t\tconfig: self.config\n\t})\n}\n\nfunction showOnlyTrunc(menuGrp, targetData, self) {\n\tmenuGrp.hide()\n\t// when the legend group is not hidden and show a \"show only the truncating mutations\" option\n\t// add a new \"soft legend filter\" to for all the legends in the legend group whose mclass\n\t// is not in the truncatingM\n\n\tif (targetData) {\n\t\t// there are mutations data\n\t\t//remove the individual legend filter in the group\n\t\tself.config.legendValueFilter.lst = self.config.legendValueFilter.lst.filter(\n\t\t\tf => f.legendGrpName !== targetData.name\n\t\t)\n\n\t\t// remove the grp legend filter for the group\n\t\tself.config.legendGrpFilter.lst = self.config.legendGrpFilter.lst.filter(\n\t\t\tf => !(f.dt.includes(dtsnvindel) && f.origin == targetData.origin)\n\t\t)\n\n\t\tconst truncatingM = self.config.settings.matrix.truncatingMutations\n\t\tconst controlLabels = self.config.settings.matrix.controlLabels\n\t\tfor (const [k, v] of Object.entries(mclass)) {\n\t\t\tif (truncatingM.includes(k) || v.dt != dtsnvindel) continue\n\t\t\tconst filterNew = {\n\t\t\t\tlegendGrpName: targetData.origin\n\t\t\t\t\t? `${targetData.origin[0].toUpperCase() + targetData.origin.slice(1)} ${controlLabels.Mutations}`\n\t\t\t\t\t: controlLabels.Mutations,\n\t\t\t\ttype: 'tvs',\n\t\t\t\ttvs: {\n\t\t\t\t\tisnot: true,\n\t\t\t\t\tlegendFilterType: 'geneVariant_soft',\n\t\t\t\t\tterm: { type: 'geneVariant' },\n\t\t\t\t\tvalues: [{ dt: dtsnvindel, origin: targetData.origin, mclasslst: [k] }]\n\t\t\t\t}\n\t\t\t}\n\t\t\tself.config.legendValueFilter.lst.push(filterNew)\n\t\t}\n\t}\n\n\tself.app.dispatch({\n\t\ttype: 'plot_edit',\n\t\tid: self.id,\n\t\tconfig: self.config\n\t})\n}\n\nfunction showOnlyPC(menuGrp, targetData, self) {\n\tmenuGrp.hide()\n\t// when the legend group is not hidden and show a \"show only non-truncating protein-changing mutations\" option\n\t// add a new \"soft legend filter\" for all the legends in the legend group (origin + dt) whose mclass\n\t// is not in the nonTruncatingPCM\n\n\tif (targetData) {\n\t\t// there are mutations data\n\t\t//remove the individual legend filter in the group\n\t\tself.config.legendValueFilter.lst = self.config.legendValueFilter.lst.filter(\n\t\t\tf => f.legendGrpName !== targetData.name\n\t\t)\n\n\t\t// remove the grp legend filter for the group\n\t\tself.config.legendGrpFilter.lst = self.config.legendGrpFilter.lst.filter(\n\t\t\tf => !(f.dt.includes(dtsnvindel) && f.origin == targetData.origin)\n\t\t)\n\n\t\tconst proteinChangingMutations = self.config.settings.matrix.proteinChangingMutations\n\t\tconst controlLabels = self.config.settings.matrix.controlLabels\n\t\tfor (const [k, v] of Object.entries(mclass)) {\n\t\t\tif (proteinChangingMutations.includes(k) || v.dt != dtsnvindel) continue\n\t\t\tconst filterNew = {\n\t\t\t\tlegendGrpName: targetData.origin\n\t\t\t\t\t? `${targetData.origin[0].toUpperCase() + targetData.origin.slice(1)} ${controlLabels.Mutations}`\n\t\t\t\t\t: controlLabels.Mutations,\n\t\t\t\ttype: 'tvs',\n\t\t\t\ttvs: {\n\t\t\t\t\tisnot: true,\n\t\t\t\t\tlegendFilterType: 'geneVariant_soft',\n\t\t\t\t\tterm: { type: 'geneVariant' },\n\t\t\t\t\tvalues: [{ dt: dtsnvindel, origin: targetData.origin, mclasslst: [k] }]\n\t\t\t\t}\n\t\t\t}\n\t\t\tself.config.legendValueFilter.lst.push(filterNew)\n\t\t}\n\t}\n\n\tself.app.dispatch({\n\t\ttype: 'plot_edit',\n\t\tid: self.id,\n\t\tconfig: self.config\n\t})\n}\n\nfunction showNone(menuGrp, targetData, self, target) {\n\tmenuGrp.hide()\n\tif (targetData) {\n\t\t// there are data\n\t\tconst byOrigin = self.state.termdbConfig.assayAvailability?.byDt?.[parseInt(targetData.dt)]?.byOrigin\n\t\t// when the legend group is shown and now hide it\n\t\t// add a new \"legend group filter\" to filter out the legend group's origin + legend group's dt\n\n\t\t//legendGrpFilterIndex is the index of the filter that is already in self.config.legendGrpFilter.lst\n\t\tconst legendGrpFilterIndex = self.config.legendGrpFilter.lst.findIndex(\n\t\t\tf =>\n\t\t\t\tf.dt.slice().sort().toString() === targetData.dt.slice().sort().toString() &&\n\t\t\t\t(!byOrigin || f.origin == targetData.origin)\n\t\t)\n\t\tif (legendGrpFilterIndex == -1) {\n\t\t\tconst filterNew = { dt: targetData.dt }\n\t\t\tif (byOrigin) {\n\t\t\t\t// when distinguish between germline and somatic for the dt\n\t\t\t\tfilterNew.origin = targetData.origin\n\t\t\t}\n\t\t\t// when the legend group is hidden, need to remove the individual legend filter belongs to this legend group\n\t\t\tself.config.legendValueFilter.lst = self.config.legendValueFilter.lst.filter(\n\t\t\t\tf => f.legendGrpName !== targetData.name\n\t\t\t)\n\t\t\tself.config.legendGrpFilter.lst.push(filterNew)\n\t\t}\n\t}\n\n\tif (\n\t\tself.state.config.settings.matrix.addMutationCNVButtons &&\n\t\tself.chartType !== 'hierCluster' &&\n\t\t(target == 'CNV' || targetData?.dt?.includes(dtcnv)) &&\n\t\tself.config.settings.matrix.cellEncoding == 'oncoprint'\n\t) {\n\t\tself.config.settings.matrix.cellEncoding = 'single'\n\t}\n\n\tself.app.dispatch({\n\t\ttype: 'plot_edit',\n\t\tid: self.id,\n\t\tconfig: self.config\n\t})\n}\n\nexport function getConfigForShowAll(self, targetData, target) {\n\tif (targetData) {\n\t\t// there are data\n\t\tconst byOrigin = self.state.termdbConfig.assayAvailability?.byDt?.[parseInt(targetData.dt)]?.byOrigin\n\n\t\t//legendGrpFilterIndex is the index of the filter that is already in self.config.legendGrpFilter.lst\n\t\tconst legendGrpFilterIndex = self.config.legendGrpFilter.lst.findIndex(\n\t\t\tf =>\n\t\t\t\tf.dt.slice().sort().toString() === targetData.dt.slice().sort().toString() &&\n\t\t\t\t(!byOrigin || f.origin == targetData.origin)\n\t\t)\n\n\t\t//legendFilterIndex is the index of the first filter (in this filter group being clicked) that is already in self.config.legendValueFilter.lst, if there's any\n\t\tconst legendFilterIndex = self.config.legendValueFilter.lst.findIndex(\n\t\t\tl =>\n\t\t\t\tl.legendGrpName == targetData.name &&\n\t\t\t\tl.tvs.values.find(v => targetData.dt.includes(v.dt) && (!byOrigin || v.origin == targetData.origin))\n\t\t)\n\n\t\tif (legendGrpFilterIndex !== -1) self.config.legendGrpFilter.lst.splice(legendGrpFilterIndex, 1)\n\t\tif (legendFilterIndex !== -1)\n\t\t\tself.config.legendValueFilter.lst = self.config.legendValueFilter.lst.filter(\n\t\t\t\tf => f.legendGrpName != targetData.name\n\t\t\t)\n\t}\n\n\tconst s = self.config.settings.matrix\n\tif (\n\t\ts.addMutationCNVButtons &&\n\t\tself.chartType !== 'hierCluster' &&\n\t\t(target == 'CNV' || targetData?.dt?.includes(dtcnv)) &&\n\t\ts.cellEncoding !== ''\n\t) {\n\t\ts.cellEncoding = 'oncoprint'\n\t}\n\n\treturn self.config\n}\n\nexport function showAll(menuGrp, targetData, self, target) {\n\tmenuGrp.hide()\n\n\tself.app.dispatch({\n\t\ttype: 'plot_edit',\n\t\tid: self.id,\n\t\tconfig: getConfigForShowAll(self, targetData, target)\n\t})\n}\n\nfunction showByLegendFilter(menuGrp, targetData, self, target) {\n\tmenuGrp.hide()\n\tconst s = self.config.settings.matrix\n\tif (!targetData) {\n\t\t//there are no mutatons data\n\t\tif (s.addMutationCNVButtons && self.chartType !== 'hierCluster' && target == 'mutation') {\n\t\t\ts.showMatrixMutation = 'bySelection'\n\t\t} else if (s.addMutationCNVButtons && self.chartType !== 'hierCluster' && target == 'CNV') {\n\t\t\ts.showMatrixCNV = 'bySelection'\n\t\t}\n\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: self.id,\n\t\t\tconfig: self.config\n\t\t})\n\t\treturn\n\t}\n\tself.app.tip.d.selectAll('.byLFClassDiv').remove()\n\tconst classDiv = self.app.tip.d.append('div').attr('class', 'byLFClassDiv')\n\n\tconst checkboxName = Math.random().toString()\n\tconst mClassDiv = classDiv\n\t\t.selectAll(':scope>div')\n\t\t.data(target == 'mutation' ? s.mutationClasses : s.CNVClasses)\n\t\t.enter()\n\t\t.append('label')\n\t\t.style('margin', '5px')\n\t\t.style('margin-left', '30px')\n\t\t.style('display', 'block')\n\t\t.each(function (d) {\n\t\t\tconst mclassDisabled = self.config.legendValueFilter.lst.find(\n\t\t\t\tf =>\n\t\t\t\t\tf.tvs.legendFilterType == 'geneVariant_hard' &&\n\t\t\t\t\tf.tvs.values[0].dt == mclass[d].dt &&\n\t\t\t\t\tf.tvs.values[0].mclasslst.includes(d)\n\t\t\t)\n\t\t\tconst mclassHidden = target == 'mutation' ? s.hiddenMutations.includes(d) : s.hiddenCNVs.includes(d)\n\n\t\t\tconst oneClassDiv = select(this).attr('class', 'sjpp_row_wrapper')\n\t\t\toneClassDiv\n\t\t\t\t.append('input')\n\t\t\t\t.attr('type', 'checkbox')\n\t\t\t\t.attr('name', checkboxName)\n\t\t\t\t.property('disabled', mclassDisabled ? true : false)\n\t\t\t\t.property('checked', mclassDisabled || mclassHidden ? false : true)\n\t\t\t\t.style('vertical-align', 'top')\n\t\t\t\t.style('margin-right', '3px')\n\t\t\t\t.on('change', function () {\n\t\t\t\t\tconst anyChecked = mClassDiv.selectAll(`input[type='checkbox'][name='${checkboxName}']:checked`).empty()\n\t\t\t\t\tapplyBtn.property('disabled', anyChecked)\n\t\t\t\t})\n\t\t\toneClassDiv\n\t\t\t\t.append('span')\n\t\t\t\t.style('margin-left', '3px')\n\t\t\t\t.html(mclass[d].label)\n\t\t\t\t//.style('color', d.color)\n\t\t\t\t.style('text-decoration', mclassDisabled ? 'line-through' : '')\n\t\t})\n\n\tconst applyBtn = classDiv\n\t\t.append('button')\n\t\t.property('disabled', true)\n\t\t.style('margin-top', '3px')\n\t\t.text('Apply')\n\t\t.on('click', () => {\n\t\t\tconst checkedCheckboxes = mClassDiv.selectAll(`input[type='checkbox'][name='${checkboxName}']:checked`)\n\t\t\tconst checkedItems = checkedCheckboxes.nodes().map(c => select(c).datum())\n\t\t\tmenuGrp.hide()\n\n\t\t\t//remove the individual legend filter in the group\n\t\t\tself.config.legendValueFilter.lst = self.config.legendValueFilter.lst.filter(\n\t\t\t\tf => f.legendGrpName !== targetData.name || f.tvs.legendFilterType == 'geneVariant_hard'\n\t\t\t)\n\n\t\t\t// remove the grp legend filter for the group\n\t\t\tself.config.legendGrpFilter.lst = self.config.legendGrpFilter.lst.filter(\n\t\t\t\tf =>\n\t\t\t\t\t!(\n\t\t\t\t\t\t(f.dt.includes(dtsnvindel) && targetData.dt.includes(dtsnvindel)) ||\n\t\t\t\t\t\t(f.dt.includes(dtcnv) && targetData.dt.includes(dtcnv))\n\t\t\t\t\t)\n\t\t\t)\n\n\t\t\tfor (const item of target == 'mutation' ? s.mutationClasses : s.CNVClasses) {\n\t\t\t\tif (checkedItems.includes(item)) continue\n\t\t\t\t// add a new \"soft filter\" to filter out the legend's origin + legend's dt + legend's class\n\t\t\t\t// add a new \"soft filter\" to filter out samples that only have mutation match with (the legend's origin + legend's dt + legend's class) and no other mutation\n\t\t\t\t// and then hide the selected mutation on samples that have this selected mutation if the sample was not filtered out by this soft filter.\n\t\t\t\tconst filterNew = {\n\t\t\t\t\tlegendGrpName: targetData.name,\n\t\t\t\t\ttype: 'tvs',\n\t\t\t\t\ttvs: {\n\t\t\t\t\t\tisnot: true,\n\t\t\t\t\t\tlegendFilterType: 'geneVariant_soft', // indicates this matrix legend filter is soft filter\n\t\t\t\t\t\tterm: { type: 'geneVariant' },\n\t\t\t\t\t\tvalues: [{ dt: mclass[item].dt, origin: targetData.origin, mclasslst: [item] }]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tself.config.legendValueFilter.lst.push(filterNew)\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tself.state.config.settings.matrix.addMutationCNVButtons &&\n\t\t\t\tself.chartType !== 'hierCluster' &&\n\t\t\t\t(target == 'CNV' || targetData?.dt?.includes(dtcnv))\n\t\t\t) {\n\t\t\t\tif (checkedItems.length == 0 && self.config.settings.matrix.cellEncoding == 'oncoprint') {\n\t\t\t\t\t//when all CNV items are hidden by applying legend value filter\n\t\t\t\t\tself.config.settings.matrix.cellEncoding = 'single'\n\t\t\t\t} else if (checkedItems.length > 0 && self.config.settings.matrix.cellEncoding == 'single') {\n\t\t\t\t\tself.config.settings.matrix.cellEncoding = 'oncoprint'\n\t\t\t\t}\n\t\t\t}\n\t\t\tself.app.dispatch({\n\t\t\t\ttype: 'plot_edit',\n\t\t\t\tid: self.id,\n\t\t\t\tconfig: self.config\n\t\t\t})\n\t\t})\n}\n\n//used by self.showCellInfo and self.mouseclick to get appropriate label\nfunction getLabel(c, v, p) {\n\tlet fusionLabel\n\tif (p)\n\t\tfusionLabel =\n\t\t\tp[0].a.name && p[0].b.name\n\t\t\t\t? p[0].a.name + '::' + p[0].b.name\n\t\t\t\t: p[0].a.name\n\t\t\t\t? p[0].a.name + '::' + '?'\n\t\t\t\t: p[0].b.name\n\t\t\t\t? '?' + '::' + p[0].b.name\n\t\t\t\t: ''\n\tconst label =\n\t\tc.t.grp.type == 'hierCluster'\n\t\t\t? v.value\n\t\t\t: v && v.dt == dtcnv && v.value\n\t\t\t? `${mclass[v.class].label} (${v.value.toFixed(2)})`\n\t\t\t: p\n\t\t\t? fusionLabel\n\t\t\t: v.mname\n\t\t\t? `${v.mname} ${mclass[v.class].label}`\n\t\t\t: mclass[v.class].label\n\n\treturn label\n}\n\n// if group value filter is defined, then cannot reliably edit term\n// notify user in edit menu\nfunction mayAddEditMsg(arg, t) {\n\tif (!t.grp.valueFilter) return\n\tconst editMsg =\n\t\t'Cannot edit variable because group value filter is in use.<br>Please add new variable/variable group to enable editing.'\n\targ.editMsg = editMsg\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["event", "d", "c1", "c2", "data", "t", "s", "c", "self", "legendFilterIndex", "div", "term", "l"]
|
|
7
|
-
}
|