@sjcrh/proteinpaint-client 2.224.1 → 2.224.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/2dmaf-OWA6REJ5.js +1362 -0
- package/dist/AggMatrixInput-5GC33U5A.js +402 -0
- package/dist/AggregateMatrix-CMJFO53B.js +37 -0
- package/dist/AppHeader-KJCXF35P.js +826 -0
- package/dist/BoxPlot-NZTO6CLZ.js +1247 -0
- package/dist/BoxPlot-NZTO6CLZ.js.map +7 -0
- package/dist/CorrelationVolcano-GHTPFM2V.js +613 -0
- package/dist/Cuminc-HHBYFFFM.js +1217 -0
- package/dist/DE-VVKIMVXD.js +85 -0
- package/dist/DEinput-F7HSM2SO.js +479 -0
- package/dist/DM-UBCIWZEY.js +86 -0
- package/dist/DifferentialAnalysis-UUXXMOQS.js +236 -0
- package/dist/Disco-NHXU7LG7.js +3384 -0
- package/dist/Disco.UI-GSSSK4YJ.js +239 -0
- package/dist/DmrPlot-QFSU62PY.js +344 -0
- package/dist/DmrPlot-QFSU62PY.js.map +7 -0
- package/dist/GB-CIQGJBJP.js +1388 -0
- package/dist/GSEA-3GVFEJTX.js +870 -0
- package/dist/GeneExpInput-CFU3Q7FM.js +38 -0
- package/dist/Geomap-NMVFA77Q.js +80 -0
- package/dist/HicApp-4FCGUUJD.js +2240 -0
- package/dist/IDCViewer-WFB6AXHD.js +10810 -0
- package/dist/IDCViewer-WFB6AXHD.js.map +7 -0
- package/dist/NumBinaryEditor-4WUDJRSU.js +274 -0
- package/dist/NumBinaryEditor.unit.spec-MV53GTGQ.js +308 -0
- package/dist/NumContEditor-U4R6HPDM.js +100 -0
- package/dist/NumContEditor.unit.spec-J4ANPBSF.js +160 -0
- package/dist/NumCustomBinEditor-QRGDNFP4.js +29 -0
- package/dist/NumCustomBinEditor.unit.spec-PPF233FW.js +393 -0
- package/dist/NumDiscreteEditor-LNK4KHSL.js +165 -0
- package/dist/NumDiscreteEditor.unit.spec-QY6O62JU.js +229 -0
- package/dist/NumRegularBinEditor-XTINNM5L.js +29 -0
- package/dist/NumRegularBinEditor.unit.spec-FSLARHOC.js +274 -0
- package/dist/NumSplineEditor-YSQTKBFA.js +205 -0
- package/dist/NumSplineEditor.unit.spec-QNITPY7R.js +220 -0
- package/dist/NumericDensity-J5WS74JZ.js +29 -0
- package/dist/NumericDensity.unit.spec-4WQWLSSJ.js +414 -0
- package/dist/NumericHandler-ZEWC25U2.js +30 -0
- package/dist/NumericHandler.unit.spec-A3G5FWGV.js +225 -0
- package/dist/ProteomeInput-7DXGQIOO.js +610 -0
- package/dist/Regression-VQ5MC6KW.js +1412 -0
- package/dist/RunChart2-B33CQUXH.js +744 -0
- package/dist/SC-LEVWXS4P.js +1290 -0
- package/dist/Violin-L43OHY63.js +1105 -0
- package/dist/Violin-L43OHY63.js.map +7 -0
- package/dist/Volcano-NTXVM3UR.js +2657 -0
- package/dist/Wsi-VPF6RX3B.js +637 -0
- package/dist/Wsi-VPF6RX3B.js.map +7 -0
- package/dist/aboutSunburst-NGH3V74S.js +93 -0
- package/dist/adSandbox-VOAL4P5A.js +29 -0
- package/dist/animatedBubbleChart-HKOGYPSS.js +542 -0
- package/dist/app-AZLUP2BA.js +28 -0
- package/dist/app-JJPKGBEV.js +38 -0
- package/dist/app.js +14 -14
- package/dist/bam-GIZSH2MF.js +872 -0
- package/dist/barchart-CVTXLIIQ.js +38 -0
- package/dist/barchart2-XYC6WITL.js +305 -0
- package/dist/block-DXRSU62C.js +6203 -0
- package/dist/block.init-U4Y6ROG4.js +29 -0
- package/dist/block.mds.expressionrank-BB26LVTM.js +350 -0
- package/dist/block.mds.geneboxplot-VVKEU3SL.js +819 -0
- package/dist/block.mds.junction-XUZX6EAQ.js +1534 -0
- package/dist/block.mds.svcnv-WDSACPWG.js +6325 -0
- package/dist/block.svg-T5BA7VLS.js +155 -0
- package/dist/block.tk.aicheck-3VN2RDPD.js +274 -0
- package/dist/block.tk.bam-5XZ3N4Y7.js +1906 -0
- package/dist/block.tk.bigwig.ui-JODVOS4R.js +202 -0
- package/dist/block.tk.hicstraw-AFNWJ2YP.js +814 -0
- package/dist/block.tk.junction-T2G6XEVS.js +2353 -0
- package/dist/block.tk.junction.textmatrixui-FL5MZH7K.js +190 -0
- package/dist/block.tk.ld-JKBXDOB5.js +90 -0
- package/dist/block.tk.menu-2X4BN7BN.js +1050 -0
- package/dist/block.tk.pgv-ASUVEGQF.js +934 -0
- package/dist/brainImaging-27442GMQ.js +550 -0
- package/dist/brainRegions-3367RQCU.js +213 -0
- package/dist/bubbleHeatmap-IOVS6SHX.js +374 -0
- package/dist/cellTypeBubbleHeatmap-7XJP6B5W.js +274 -0
- package/dist/chunk-2CTAWHGB.js +56 -0
- package/dist/chunk-2ESAB2PP.js +848 -0
- package/dist/chunk-2GP3LH7J.js +194 -0
- package/dist/chunk-2UGYE6EJ.js +54 -0
- package/dist/chunk-3TJBSAIO.js +170 -0
- package/dist/chunk-46KQE4DV.js +418 -0
- package/dist/chunk-4ICGMPPE.js +56 -0
- package/dist/chunk-4RQTQDHF.js +5214 -0
- package/dist/chunk-5FD6NRGE.js +472 -0
- package/dist/chunk-5JBOGNSG.js +159 -0
- package/dist/chunk-5OWPH4IH.js +626 -0
- package/dist/chunk-63TCOVAK.js +30 -0
- package/dist/chunk-7ONTCJWB.js +1219 -0
- package/dist/chunk-7Q4KAFCS.js +281 -0
- package/dist/chunk-7UXV4IX5.js +102 -0
- package/dist/chunk-7ZCYC2DQ.js +70 -0
- package/dist/chunk-AQSZLUDV.js +184 -0
- package/dist/chunk-BBA5MAFS.js +240 -0
- package/dist/chunk-BNJC6OX5.js +2102 -0
- package/dist/chunk-BOQYGAYA.js +119 -0
- package/dist/chunk-C4YACFGH.js +692 -0
- package/dist/chunk-CKO54XWB.js +54 -0
- package/dist/chunk-COWLQ74R.js +82 -0
- package/dist/chunk-CU434U4N.js +35 -0
- package/dist/chunk-CZOJUH3C.js +30 -0
- package/dist/chunk-CZOJUH3C.js.map +7 -0
- package/dist/chunk-D22DJFFZ.js +254 -0
- package/dist/chunk-D22DJFFZ.js.map +7 -0
- package/dist/chunk-D2YPS46O.js +266 -0
- package/dist/chunk-DVSTBGZT.js +182 -0
- package/dist/chunk-EIO6DMIQ.js +31 -0
- package/dist/chunk-EM56Y4X6.js +2685 -0
- package/dist/chunk-F6CYUMSM.js +37 -0
- package/dist/chunk-FUTHP5J4.js +274 -0
- package/dist/chunk-G5GFCBJT.js +217 -0
- package/dist/chunk-GOL6A746.js +96 -0
- package/dist/chunk-GVLXSPTN.js +141 -0
- package/dist/chunk-HNU4RYI5.js +203 -0
- package/dist/chunk-HTIZFNBC.js +4389 -0
- package/dist/chunk-HUF5BTO6.js +562 -0
- package/dist/chunk-HWP3U2VY.js +382 -0
- package/dist/chunk-JEXS72M5.js +550 -0
- package/dist/chunk-JNIYPQWY.js +176 -0
- package/dist/chunk-K5RCZIZN.js +2799 -0
- package/dist/chunk-KA3KYNOP.js +195 -0
- package/dist/chunk-KGFH5VTH.js +444 -0
- package/dist/chunk-KTRDLHCP.js +397 -0
- package/dist/chunk-L6TGKNRA.js +516 -0
- package/dist/chunk-LN4KNFOQ.js +55 -0
- package/dist/chunk-M4ML4ACA.js +134 -0
- package/dist/chunk-MIDVLNN3.js +123 -0
- package/dist/chunk-MUVXIOXM.js +276 -0
- package/dist/chunk-N2RAPA7D.js +42 -0
- package/dist/chunk-N2RAPA7D.js.map +7 -0
- package/dist/chunk-N6AHRJAM.js +1339 -0
- package/dist/chunk-NB4UU4DH.js +54 -0
- package/dist/chunk-NGG4737W.js +296 -0
- package/dist/chunk-O4BDFBVK.js +1253 -0
- package/dist/chunk-OGU7IDV7.js +102 -0
- package/dist/chunk-OT2DMA2D.js +652 -0
- package/dist/chunk-OT2DMA2D.js.map +7 -0
- package/dist/chunk-OVO6NYUR.js +480 -0
- package/dist/chunk-OXRZSZKA.js +2008 -0
- package/dist/chunk-QMR3QMJG.js +50 -0
- package/dist/chunk-QUVGLTCF.js +103 -0
- package/dist/chunk-R2H22S4J.js +5786 -0
- package/dist/chunk-R2H22S4J.js.map +7 -0
- package/dist/chunk-RCLCEA55.js +305 -0
- package/dist/chunk-RCVA2RWU.js +466 -0
- package/dist/chunk-RSCSTOUN.js +6375 -0
- package/dist/chunk-SCXWXLMR.js +237 -0
- package/dist/chunk-SQUMXZXI.js +257 -0
- package/dist/chunk-T2DORAV4.js +398 -0
- package/dist/chunk-T4OGXIFB.js +13624 -0
- package/dist/chunk-T4OGXIFB.js.map +7 -0
- package/dist/chunk-TBXJ2CUA.js +14 -0
- package/dist/chunk-TQLHKDNS.js +140 -0
- package/dist/chunk-TTSKLWP7.js +2932 -0
- package/dist/chunk-TTSKLWP7.js.map +7 -0
- package/dist/chunk-VQD6GZMU.js +59 -0
- package/dist/chunk-VZBRG6HQ.js +263 -0
- package/dist/chunk-WQHL6SR3.js +468 -0
- package/dist/chunk-X7JGAQ5N.js +340 -0
- package/dist/chunk-Z6ZFRHXK.js +2334 -0
- package/dist/chunk-ZCY72DDM.js +379 -0
- package/dist/chunk-ZHY7ZHWC.js +243 -0
- package/dist/chunk-ZIMAIUZD.js +26744 -0
- package/dist/chunk-ZIMAIUZD.js.map +7 -0
- package/dist/chunk-ZLQ6PAI6.js +299 -0
- package/dist/chunk-ZUG4EY4T.js +348 -0
- package/dist/chunk-ZUXXBQ7D.js +2349 -0
- package/dist/chunk-ZUXXBQ7D.js.map +7 -0
- package/dist/cohort-2DQOQ5AO.js +66 -0
- package/dist/cohortSunburst-W6XC7VD6.js +402 -0
- package/dist/condition-3A7I5UQA.js +323 -0
- package/dist/controls-G5WYBX4P.js +30 -0
- package/dist/controls.config-TAFGM2S2.js +30 -0
- package/dist/correlation-K4EOOQJU.js +91 -0
- package/dist/customdata.inputui-E7RRN3KY.js +280 -0
- package/dist/dataDownload-OXZGAE5R.js +326 -0
- package/dist/databrowser.ui-IPUF6LUC.js +424 -0
- package/dist/databrowser.ui-IPUF6LUC.js.map +7 -0
- package/dist/dictionary-MUNAUI43.js +109 -0
- package/dist/dnaMethylation-SOV4HBAX.js +29 -0
- package/dist/dnaMethylation.integration.spec-T4KKTMRL.js +194 -0
- package/dist/dofetch-2CR2TVWC.js +49 -0
- package/dist/e2pca-EIOJCV4O.js +340 -0
- package/dist/ep-5QX3CW6D.js +1247 -0
- package/dist/expclust.gdc.spec-TNHPZLYQ.js +298 -0
- package/dist/facet-I3OC4DK2.js +556 -0
- package/dist/gb-WPIUHR3O.js +77 -0
- package/dist/geneExpClustering-EYGZENSP.js +240 -0
- package/dist/geneExpression-54L3DH32.js +309 -0
- package/dist/geneExpression-6S6H2EVY.js +29 -0
- package/dist/geneExpression.unit.spec-VVI2MXIH.js +151 -0
- package/dist/geneORA-7M64LXZC.js +269 -0
- package/dist/geneRanking-676CAA3B.js +544 -0
- package/dist/geneVariant-4UPJE6MJ.js +289 -0
- package/dist/geneVariant-PFVPL22U.js +32 -0
- package/dist/geneVariant.integration.spec-EAJ4OSFQ.js +672 -0
- package/dist/genefusion.ui-LP4EJUTO.js +299 -0
- package/dist/geneset-ANDOMTPO.js +199 -0
- package/dist/genomeBrowser.spec-NUXOOL5N.js +272 -0
- package/dist/grin2-K4LRVCES.js +66 -0
- package/dist/grin2-YFCWJZFR.js +945 -0
- package/dist/hierCluster-POD3DRO4.js +55 -0
- package/dist/hierCluster-QA7HXKRD.js +51 -0
- package/dist/hierCluster.config-HQ3SVKCE.js +32 -0
- package/dist/hierCluster.integration.spec-MOYDWJL3.js +479 -0
- package/dist/hierCluster.interactivity-OZTNHXZQ.js +45 -0
- package/dist/hierCluster.renderers-46E37NL4.js +18 -0
- package/dist/imagePlot-HNAYBWY3.js +152 -0
- package/dist/importPlot-XTW46VF4.js +8 -0
- package/dist/isoformExpression-2TMTILKG.js +31 -0
- package/dist/isoformExpression.unit.spec-SIJWP7TH.js +233 -0
- package/dist/jspdf.es.min-GSH2SAQO.js +40 -0
- package/dist/junction-AICKHNXX.js +32 -0
- package/dist/junction.customTerm-5STKYZ4B.js +15 -0
- package/dist/junction.unit.spec-EXFN4MLW.js +178 -0
- package/dist/launch.adhoc-PB6PGR7Q.js +33 -0
- package/dist/leftlabel.sample-ISUD4A7F.js +253 -0
- package/dist/lollipop-5UXUAFYY.js +162 -0
- package/dist/maf-L6YD25JK.js +451 -0
- package/dist/maftimeline-63YZDGJ3.js +583 -0
- package/dist/matrix-OPEBHZCW.js +55 -0
- package/dist/matrix-TLMWPG7C.js +50 -0
- package/dist/matrix.cells-IELMNYC6.js +25 -0
- package/dist/matrix.config-J7SVFXLM.js +33 -0
- package/dist/matrix.data-DJTJCPO4.js +22 -0
- package/dist/matrix.groups-2REICNZK.js +25 -0
- package/dist/matrix.integration.spec-ZXU2OEFU.js +3156 -0
- package/dist/matrix.interactivity-SX3OR6OI.js +33 -0
- package/dist/matrix.layout-ZJ6X5RON.js +35 -0
- package/dist/matrix.legend-ZOP72TIO.js +19 -0
- package/dist/matrix.renderers-YUSROXKN.js +30 -0
- package/dist/matrix.serieses-UMAZNCMR.js +18 -0
- package/dist/matrix.sort-2JNIZHNL.js +25 -0
- package/dist/matrix.sort.unit.spec-SNB643Y6.js +464 -0
- package/dist/matrix.sorterUi-JXEIY6UL.js +15 -0
- package/dist/matrix.sorterUi.unit.spec-LDAT4R3H.js +334 -0
- package/dist/matrix.unit.spec-QBQIMDLD.js +146 -0
- package/dist/mavb-EQUF3VGG.js +726 -0
- package/dist/mds.samplescatterplot-73E45ZT7.js +1545 -0
- package/dist/mds.survivalplot-DL53IRVD.js +472 -0
- package/dist/multivalue-PQN75ENP.js +79 -0
- package/dist/numericDictTermCluster-FGMIOTBO.js +62 -0
- package/dist/oncomatrix-CCHWOA3N.js +286 -0
- package/dist/oncomatrix.spec-GQT3UTCR.js +439 -0
- package/dist/plot.2dvaf-L6ZI5ROR.js +368 -0
- package/dist/plot.app-A73VXJCP.js +32 -0
- package/dist/plot.barplot-HSCHPOO7.js +93 -0
- package/dist/plot.boxplot-AXBVNTNH.js +142 -0
- package/dist/plot.brainImaging-PEMURKM3.js +51 -0
- package/dist/plot.disco-YKMYYVMV.js +98 -0
- package/dist/plot.ssgq-FGMQXKZU.js +130 -0
- package/dist/plot.vaf2cov-IBM7NQEB.js +249 -0
- package/dist/polar2-N7KWY36S.js +228 -0
- package/dist/profileForms-Q4NN7653.js +937 -0
- package/dist/profilePlot-SQ77M6LI.js +45 -0
- package/dist/proteinView-KSIZRDNP.js +1346 -0
- package/dist/proteomeCohortCompare-GYSBJSDY.js +866 -0
- package/dist/pseudbulk.unit.spec-XELPZVXM.js +82 -0
- package/dist/pseudobulk-H3USXM5U.js +31 -0
- package/dist/qualitative-ABXENRAF.js +34 -0
- package/dist/qualitative-OSEJTJ4D.js +241 -0
- package/dist/radar2-VTDQGHWN.js +323 -0
- package/dist/radarFacility2-BWGEC5A2.js +331 -0
- package/dist/rememberedGvQ.unit.spec-TWUDSEDP.js +210 -0
- package/dist/render-C3XJQ2QY.js +29 -0
- package/dist/report-7ZZ44X4R.js +213 -0
- package/dist/sampleView-CUCNI65Q.js +39 -0
- package/dist/samplelst-S7AJQ36J.js +114 -0
- package/dist/samplematrix-U7WM6GNB.js +2188 -0
- package/dist/sc-FMJHN2SW.js +77 -0
- package/dist/scatter-4UMCJNEH.js +919 -0
- package/dist/scatter-KMAZ3ZNR.js +84 -0
- package/dist/selectGenomeWithTklst-5SRM45BI.js +125 -0
- package/dist/singleCellCellType-GIIICJK5.js +29 -0
- package/dist/singleCellCellType.unit.spec-MVA7BMGL.js +150 -0
- package/dist/singleCellGeneExpression-2QFQHJJH.js +29 -0
- package/dist/singleCellGeneExpression.unit.spec-SAIETYHV.js +144 -0
- package/dist/singleCellNumericValue-45H5EPIB.js +29 -0
- package/dist/singleCellNumericValue.unit.spec-FNKEJ2WC.js +412 -0
- package/dist/singleCellPlot-SP7OEGYQ.js +44 -0
- package/dist/singlecell-AVZQX4AH.js +1562 -0
- package/dist/singlecell-JQKUHGIH.js +77 -0
- package/dist/snp-4SA7VABN.js +29 -0
- package/dist/snp.unit.spec-YIYGR6GW.js +167 -0
- package/dist/snplocus-TDGQ57ZJ.js +200 -0
- package/dist/snplst-SWBGRYPA.js +36 -0
- package/dist/spliceevent.a53ss.diagram-YODOBS6U.js +142 -0
- package/dist/spliceevent.exonskip.diagram-PMZIQ5UG.js +274 -0
- package/dist/spliceevent.noeventdiagram-A4T2PNUX.js +451 -0
- package/dist/ssGSEA-U7D6HOIV.js +29 -0
- package/dist/ssGSEA.unit.spec-SMNAM5DJ.js +79 -0
- package/dist/stattable-DBYMPJU6.js +112 -0
- package/dist/studyCatalog-7RABX4W5.js +457 -0
- package/dist/summarizeCnvGeneexp-YVRW7LWY.js +154 -0
- package/dist/summarizeGeneexpSurvival-ZB7IWGPS.js +101 -0
- package/dist/summarizeMutationCnv-CUSYURDK.js +155 -0
- package/dist/summarizeMutationDiagnosis-NSPCT5WI.js +31 -0
- package/dist/summarizeMutationSurvival-2PZZCC4G.js +95 -0
- package/dist/summary-CYDZSICI.js +40 -0
- package/dist/summary.integration.spec-2TLKJS3X.js +405 -0
- package/dist/summaryInput-BRQ5JRGV.js +238 -0
- package/dist/sunburst-435LKL2S.js +34 -0
- package/dist/sunburst-D5WAGHX6.js +274 -0
- package/dist/survival-M63B6DY5.js +1248 -0
- package/dist/survival-M63B6DY5.js.map +7 -0
- package/dist/survival-MHESSYWF.js +49 -0
- package/dist/survival.integration.spec-WMS3FTNR.js +609 -0
- package/dist/svg2pdf.es.min-PHWTISHJ.js +3157 -0
- package/dist/svgraph-LYFGVTHI.js +1377 -0
- package/dist/svmr-UR67QZIP.js +3834 -0
- package/dist/swimmer-RP4SUEZS.js +993 -0
- package/dist/table-V4OOMF3B.js +192 -0
- package/dist/termCollection-VHGVBSWW.js +29 -0
- package/dist/termCollection-WSNM3YFK.js +247 -0
- package/dist/termCollection.unit.spec-NCZUZL6P.js +295 -0
- package/dist/termCollectionFractionSelection-XM3FJWBQ.js +38 -0
- package/dist/termCollectionFractionSelection.unit.spec-VO4SAV72.js +184 -0
- package/dist/tk-G5PKWSXJ.js +1193 -0
- package/dist/tk-KIELQHVI.js +37 -0
- package/dist/tp.ui-HAKSWLFB.js +1453 -0
- package/dist/tvs.categorical-G4DM4JY5.js +28 -0
- package/dist/tvs.condition-E5NUQONB.js +160 -0
- package/dist/tvs.dt-T4BK24VZ.js +34 -0
- package/dist/tvs.dtcnv.categorical-V57TZFRA.js +31 -0
- package/dist/tvs.dtcnv.continuous-D4YIB4PN.js +72 -0
- package/dist/tvs.dtfusion-6DUFLUNH.js +31 -0
- package/dist/tvs.dtitd-GOEPAQGR.js +31 -0
- package/dist/tvs.dtsnvindel-ASTXGC4O.js +31 -0
- package/dist/tvs.dtsv-7TGDEWXK.js +31 -0
- package/dist/tvs.multivalue-SEIGL2W6.js +84 -0
- package/dist/tvs.numeric-MLLX5L7Z.js +32 -0
- package/dist/tvs.samplelst-HAV7C2EA.js +95 -0
- package/dist/tvs.survival-3B522MT2.js +110 -0
- package/dist/tvs.termCollection-R5NG4VXP.js +118 -0
- package/dist/vocabulary-LBNHNSEN.js +32 -0
- package/dist/wsi.direct-ZEZO4NLR.js +11515 -0
- package/dist/wsi.direct-ZEZO4NLR.js.map +7 -0
- package/package.json +3 -3
- package/src/databrowser/dictionary.parse.js +4 -1
- package/dist/2dmaf-7HOQRW25.js +0 -1362
- package/dist/AggMatrixInput-LMVRNQBN.js +0 -402
- package/dist/AggregateMatrix-AMQTLJV2.js +0 -37
- package/dist/AppHeader-AK7O2HUI.js +0 -826
- package/dist/BoxPlot-CE5JWPJH.js +0 -1229
- package/dist/BoxPlot-CE5JWPJH.js.map +0 -7
- package/dist/CorrelationVolcano-DO7I63FR.js +0 -613
- package/dist/Cuminc-NHABXYET.js +0 -1217
- package/dist/DE-A327BZNW.js +0 -85
- package/dist/DEinput-VKRBFYUE.js +0 -479
- package/dist/DM-NU23H5PL.js +0 -86
- package/dist/DifferentialAnalysis-SH47YDQQ.js +0 -236
- package/dist/Disco-DOLET5UY.js +0 -3384
- package/dist/Disco.UI-6J6INV56.js +0 -239
- package/dist/DmrPlot-KYZOQB2Y.js +0 -361
- package/dist/DmrPlot-KYZOQB2Y.js.map +0 -7
- package/dist/GB-LQCK6YNB.js +0 -1388
- package/dist/GSEA-KLTV4JDP.js +0 -870
- package/dist/GeneExpInput-ZMTWWDO7.js +0 -38
- package/dist/Geomap-4NP2JPMA.js +0 -80
- package/dist/HicApp-DXF6B4YR.js +0 -2240
- package/dist/IDCViewer-HEQYB6AY.js +0 -10808
- package/dist/IDCViewer-HEQYB6AY.js.map +0 -7
- package/dist/NumBinaryEditor-JZZS67NB.js +0 -274
- package/dist/NumBinaryEditor.unit.spec-S2MKCJYX.js +0 -308
- package/dist/NumContEditor-IRZPIDJU.js +0 -100
- package/dist/NumContEditor.unit.spec-JDSSEJLJ.js +0 -160
- package/dist/NumCustomBinEditor-E2FJNISZ.js +0 -29
- package/dist/NumCustomBinEditor.unit.spec-26GWME2W.js +0 -393
- package/dist/NumDiscreteEditor-JECWQKST.js +0 -165
- package/dist/NumDiscreteEditor.unit.spec-DG52CSV5.js +0 -229
- package/dist/NumRegularBinEditor-W726TJIB.js +0 -29
- package/dist/NumRegularBinEditor.unit.spec-GG7XXYLQ.js +0 -274
- package/dist/NumSplineEditor-7UYPJI57.js +0 -205
- package/dist/NumSplineEditor.unit.spec-MESJVLZV.js +0 -220
- package/dist/NumericDensity-VFXO6VZ7.js +0 -29
- package/dist/NumericDensity.unit.spec-OQDBGUQJ.js +0 -414
- package/dist/NumericHandler-EJHWVASI.js +0 -30
- package/dist/NumericHandler.unit.spec-VUIGKU4C.js +0 -225
- package/dist/ProteomeInput-ATBCNQLN.js +0 -610
- package/dist/Regression-ZL6XKZA6.js +0 -1412
- package/dist/RunChart2-NUSOF6LW.js +0 -744
- package/dist/SC-A55NDRZ2.js +0 -1290
- package/dist/Violin-DRTD42BR.js +0 -1092
- package/dist/Violin-DRTD42BR.js.map +0 -7
- package/dist/Volcano-UNZ6OAWB.js +0 -2657
- package/dist/Wsi-CC7GX3HL.js +0 -636
- package/dist/Wsi-CC7GX3HL.js.map +0 -7
- package/dist/aboutSunburst-VTBLSKCY.js +0 -93
- package/dist/adSandbox-7RA6NVM4.js +0 -29
- package/dist/animatedBubbleChart-BRGFUEYW.js +0 -542
- package/dist/app-2GMWQIJZ.js +0 -28
- package/dist/app-4KI25R4S.js +0 -38
- package/dist/bam-B3JWSAZ5.js +0 -872
- package/dist/barchart-E2IWHDLL.js +0 -38
- package/dist/barchart2-QDATDPDT.js +0 -305
- package/dist/block-IS3WJCNW.js +0 -6203
- package/dist/block.init-ZCEUPHX2.js +0 -29
- package/dist/block.mds.expressionrank-WCJNZ63X.js +0 -350
- package/dist/block.mds.geneboxplot-BCXVN3GL.js +0 -819
- package/dist/block.mds.junction-J7H7WNMN.js +0 -1534
- package/dist/block.mds.svcnv-GJ6BSNGY.js +0 -6325
- package/dist/block.svg-SR5EQSKQ.js +0 -155
- package/dist/block.tk.aicheck-RPKZMKLM.js +0 -274
- package/dist/block.tk.bam-BDF3UFRA.js +0 -1906
- package/dist/block.tk.bigwig.ui-2MG6M4CP.js +0 -202
- package/dist/block.tk.hicstraw-JFMLXXLH.js +0 -814
- package/dist/block.tk.junction-ZDFTQJGA.js +0 -2353
- package/dist/block.tk.junction.textmatrixui-OHAZEQNT.js +0 -190
- package/dist/block.tk.ld-BRYYNH55.js +0 -90
- package/dist/block.tk.menu-XQKB62BG.js +0 -1050
- package/dist/block.tk.pgv-76I52IUX.js +0 -934
- package/dist/brainImaging-65UMKH6J.js +0 -550
- package/dist/brainRegions-AURQKH5R.js +0 -213
- package/dist/bubbleHeatmap-T3LEYZBU.js +0 -374
- package/dist/cellTypeBubbleHeatmap-UPY53IPQ.js +0 -274
- package/dist/chunk-2CQ4YA7M.js +0 -257
- package/dist/chunk-2FTQ5RMP.js +0 -340
- package/dist/chunk-2GWAEK4R.js +0 -276
- package/dist/chunk-2OMX5AYB.js +0 -195
- package/dist/chunk-2VBU42YX.js +0 -299
- package/dist/chunk-36CCFKWS.js +0 -134
- package/dist/chunk-3A2CWTBI.js +0 -159
- package/dist/chunk-3I26BABG.js +0 -182
- package/dist/chunk-3TO7TWHS.js +0 -2008
- package/dist/chunk-3WU2KUY2.js +0 -13624
- package/dist/chunk-3WU2KUY2.js.map +0 -7
- package/dist/chunk-3YQYWX4M.js +0 -26716
- package/dist/chunk-3YQYWX4M.js.map +0 -7
- package/dist/chunk-4MGXKCPS.js +0 -2685
- package/dist/chunk-53VTLOOW.js +0 -1339
- package/dist/chunk-5DI4UNH5.js +0 -562
- package/dist/chunk-6T4MN7LV.js +0 -397
- package/dist/chunk-76SL5VYA.js +0 -255
- package/dist/chunk-76SL5VYA.js.map +0 -7
- package/dist/chunk-7BD532EJ.js +0 -70
- package/dist/chunk-7CE2X6HL.js +0 -56
- package/dist/chunk-7MJENXZ6.js +0 -2799
- package/dist/chunk-7SFK32JP.js +0 -398
- package/dist/chunk-7TG44KO3.js +0 -2334
- package/dist/chunk-AFEPQY5B.js +0 -2922
- package/dist/chunk-AFEPQY5B.js.map +0 -7
- package/dist/chunk-C7KUMZQM.js +0 -59
- package/dist/chunk-C7ROKWV2.js +0 -140
- package/dist/chunk-CAH6LJ5Z.js +0 -31
- package/dist/chunk-CDUBFFZ7.js +0 -82
- package/dist/chunk-CPVUBEDA.js +0 -54
- package/dist/chunk-CPWM4S3K.js +0 -123
- package/dist/chunk-DEIIID6R.js +0 -1219
- package/dist/chunk-E54XQGQM.js +0 -4389
- package/dist/chunk-EYKJQJ7R.js +0 -382
- package/dist/chunk-FE5TCBIT.js +0 -30
- package/dist/chunk-FZYVPRVQ.js +0 -38
- package/dist/chunk-FZYVPRVQ.js.map +0 -7
- package/dist/chunk-G4QRB64M.js +0 -418
- package/dist/chunk-GBKQHVKJ.js +0 -274
- package/dist/chunk-GUW7VTUL.js +0 -281
- package/dist/chunk-H7HTCD2Q.js +0 -55
- package/dist/chunk-HQNH2UX6.js +0 -194
- package/dist/chunk-HYW74ZT2.js +0 -103
- package/dist/chunk-HZTSMLBZ.js +0 -466
- package/dist/chunk-I2QKZURX.js +0 -5214
- package/dist/chunk-II5ZAY52.js +0 -516
- package/dist/chunk-IW5XJT3H.js +0 -468
- package/dist/chunk-JDRUY7IR.js +0 -266
- package/dist/chunk-JHLF2ZC2.js +0 -472
- package/dist/chunk-JUPLOOCO.js +0 -141
- package/dist/chunk-JXVRNCAZ.js +0 -96
- package/dist/chunk-K2ARLT2A.js +0 -26
- package/dist/chunk-K2ARLT2A.js.map +0 -7
- package/dist/chunk-KBTFT76L.js +0 -2305
- package/dist/chunk-KBTFT76L.js.map +0 -7
- package/dist/chunk-L2H4W3UM.js +0 -237
- package/dist/chunk-LXS2GSF4.js +0 -240
- package/dist/chunk-MANAUI7R.js +0 -54
- package/dist/chunk-MEUSRAOE.js +0 -170
- package/dist/chunk-MG5U4JYY.js +0 -102
- package/dist/chunk-MHWYRNGA.js +0 -348
- package/dist/chunk-MNN6NFZK.js +0 -203
- package/dist/chunk-N4ULQIGJ.js +0 -379
- package/dist/chunk-NX5IB4IY.js +0 -37
- package/dist/chunk-O3XTTT4K.js +0 -217
- package/dist/chunk-PGMHFGW7.js +0 -102
- package/dist/chunk-PUIQ3UF7.js +0 -176
- package/dist/chunk-QBGMD5UV.js +0 -50
- package/dist/chunk-QQH32U6O.js +0 -296
- package/dist/chunk-R3RD3VEX.js +0 -184
- package/dist/chunk-RIHO7ZD5.js +0 -119
- package/dist/chunk-RRKUFU4L.js +0 -243
- package/dist/chunk-S72DZX6B.js +0 -848
- package/dist/chunk-T4KD2FBB.js +0 -263
- package/dist/chunk-TLWU7JWO.js +0 -692
- package/dist/chunk-TUZ3MJVF.js +0 -6375
- package/dist/chunk-TZVSDB7S.js +0 -2102
- package/dist/chunk-UHPFEULI.js +0 -480
- package/dist/chunk-WJLRU5OF.js +0 -5786
- package/dist/chunk-WJLRU5OF.js.map +0 -7
- package/dist/chunk-XYAT642G.js +0 -305
- package/dist/chunk-Y3CSXSOZ.js +0 -652
- package/dist/chunk-Y3CSXSOZ.js.map +0 -7
- package/dist/chunk-YJFK6C2M.js +0 -35
- package/dist/chunk-Z44FLO2F.js +0 -626
- package/dist/chunk-Z5ECCUNG.js +0 -444
- package/dist/chunk-Z6CMJQKG.js +0 -1253
- package/dist/chunk-Z6LQ3URB.js +0 -14
- package/dist/chunk-ZESHWW2R.js +0 -54
- package/dist/chunk-ZK4JKSUK.js +0 -56
- package/dist/chunk-ZV7LZY67.js +0 -550
- package/dist/cohort-T3SEGYG3.js +0 -66
- package/dist/cohortSunburst-HIWGWD7A.js +0 -402
- package/dist/condition-KEFHKNUU.js +0 -323
- package/dist/controls-MDUZLMY7.js +0 -30
- package/dist/controls.config-4XZZXUZV.js +0 -30
- package/dist/correlation-55LF7GPF.js +0 -91
- package/dist/customdata.inputui-6KIPVY2Q.js +0 -280
- package/dist/dataDownload-XCFCSKDO.js +0 -326
- package/dist/databrowser.ui-HLWUAHSZ.js +0 -421
- package/dist/databrowser.ui-HLWUAHSZ.js.map +0 -7
- package/dist/dictionary-P5JGXQSW.js +0 -109
- package/dist/dnaMethylation-ZNR5U6HS.js +0 -29
- package/dist/dnaMethylation.integration.spec-7AMBXA4M.js +0 -194
- package/dist/dofetch-4P5F5ZGU.js +0 -49
- package/dist/e2pca-AJQ22AHJ.js +0 -340
- package/dist/ep-3ZEN3C4U.js +0 -1247
- package/dist/expclust.gdc.spec-IQXJYSCH.js +0 -298
- package/dist/facet-RPFQA3DH.js +0 -556
- package/dist/gb-R4D647D2.js +0 -77
- package/dist/geneExpClustering-JLJL6S3Q.js +0 -240
- package/dist/geneExpression-NWNOCRVM.js +0 -309
- package/dist/geneExpression-TK75VNQG.js +0 -29
- package/dist/geneExpression.unit.spec-4HTUTQ5K.js +0 -151
- package/dist/geneORA-7FP6KZSE.js +0 -269
- package/dist/geneRanking-SBFOUZTQ.js +0 -544
- package/dist/geneVariant-3DHX4LQL.js +0 -289
- package/dist/geneVariant-SUQWO6ON.js +0 -32
- package/dist/geneVariant.integration.spec-KOUVJAFB.js +0 -672
- package/dist/genefusion.ui-DAIBYS5I.js +0 -299
- package/dist/geneset-MKSYRPV4.js +0 -199
- package/dist/genomeBrowser.spec-JSHMD3CR.js +0 -272
- package/dist/grin2-RFRYBHBV.js +0 -945
- package/dist/grin2-Z4ETF6OM.js +0 -66
- package/dist/hierCluster-C67VO3VF.js +0 -55
- package/dist/hierCluster-CEJTROX7.js +0 -51
- package/dist/hierCluster.config-G3X5I72U.js +0 -32
- package/dist/hierCluster.integration.spec-HTS2GNUR.js +0 -479
- package/dist/hierCluster.interactivity-4JVDLIPZ.js +0 -45
- package/dist/hierCluster.renderers-YGX6MZZW.js +0 -18
- package/dist/imagePlot-HNKJX6YK.js +0 -152
- package/dist/importPlot-XUL6XFBL.js +0 -8
- package/dist/isoformExpression-ZJJUXJDF.js +0 -31
- package/dist/isoformExpression.unit.spec-INU6WFAM.js +0 -233
- package/dist/jspdf.es.min-THXUXEDC.js +0 -40
- package/dist/junction-FKYIKDC4.js +0 -32
- package/dist/junction.customTerm-3R2GNE3A.js +0 -15
- package/dist/junction.unit.spec-VRFIOT4T.js +0 -178
- package/dist/launch.adhoc-SDMXDSHS.js +0 -33
- package/dist/leftlabel.sample-S33KB225.js +0 -253
- package/dist/lollipop-WXQOGEY7.js +0 -162
- package/dist/maf-K6ZUNABR.js +0 -451
- package/dist/maftimeline-Y2LETT7W.js +0 -583
- package/dist/matrix-LADX4K5W.js +0 -50
- package/dist/matrix-M63KP6IL.js +0 -55
- package/dist/matrix.cells-5RTZUJVN.js +0 -25
- package/dist/matrix.config-ZMT7A2D5.js +0 -33
- package/dist/matrix.data-Y5TPRGMW.js +0 -22
- package/dist/matrix.groups-6DXCAY4P.js +0 -25
- package/dist/matrix.integration.spec-LJ5EQ65D.js +0 -3156
- package/dist/matrix.interactivity-2ISWFOK2.js +0 -33
- package/dist/matrix.layout-EAYTUK2H.js +0 -35
- package/dist/matrix.legend-S3E76TVO.js +0 -19
- package/dist/matrix.renderers-XUMZZUDW.js +0 -30
- package/dist/matrix.serieses-3UGLZW25.js +0 -18
- package/dist/matrix.sort-A7CNLDUJ.js +0 -25
- package/dist/matrix.sort.unit.spec-UPG3D6GE.js +0 -464
- package/dist/matrix.sorterUi-6PZR3YOD.js +0 -15
- package/dist/matrix.sorterUi.unit.spec-WPMREECT.js +0 -334
- package/dist/matrix.unit.spec-Z2HXOXM4.js +0 -146
- package/dist/mavb-WT4XM6U3.js +0 -726
- package/dist/mds.samplescatterplot-UTEBJF66.js +0 -1545
- package/dist/mds.survivalplot-DXWJA4IJ.js +0 -472
- package/dist/multivalue-LR7Z3OLZ.js +0 -79
- package/dist/numericDictTermCluster-6XDVVWLE.js +0 -62
- package/dist/oncomatrix-WV2LSH3X.js +0 -286
- package/dist/oncomatrix.spec-S7KHSJJG.js +0 -439
- package/dist/plot.2dvaf-FH7PMZ3U.js +0 -368
- package/dist/plot.app-DDB6YZJ3.js +0 -32
- package/dist/plot.barplot-XVSZDYKB.js +0 -93
- package/dist/plot.boxplot-M6URTYED.js +0 -142
- package/dist/plot.brainImaging-GNIBY3XC.js +0 -51
- package/dist/plot.disco-EH4E7B3O.js +0 -98
- package/dist/plot.ssgq-7HIGQHOT.js +0 -130
- package/dist/plot.vaf2cov-MGJHP2PV.js +0 -249
- package/dist/polar2-VYUW5GZO.js +0 -228
- package/dist/profileForms-LHJCFAP6.js +0 -937
- package/dist/profilePlot-UF2KERDD.js +0 -45
- package/dist/proteinView-5AF4I3PB.js +0 -1346
- package/dist/proteomeCohortCompare-4DYWZTLQ.js +0 -866
- package/dist/pseudbulk.unit.spec-ZTAP2YYA.js +0 -82
- package/dist/pseudobulk-A2KE233U.js +0 -31
- package/dist/qualitative-3FDE4JUM.js +0 -34
- package/dist/qualitative-NVWG57TK.js +0 -241
- package/dist/radar2-3CQ7T5QY.js +0 -323
- package/dist/radarFacility2-ERBWZQFH.js +0 -331
- package/dist/rememberedGvQ.unit.spec-SHTMMZGG.js +0 -210
- package/dist/render-LIUPN5SK.js +0 -29
- package/dist/report-JWNWR6NA.js +0 -213
- package/dist/sampleView-BQ6HCCKT.js +0 -39
- package/dist/samplelst-RQWH7WOX.js +0 -114
- package/dist/samplematrix-7FDWXSZA.js +0 -2188
- package/dist/sc-J2ZPQFGP.js +0 -77
- package/dist/scatter-7FQLITP7.js +0 -919
- package/dist/scatter-BDIZX73F.js +0 -84
- package/dist/selectGenomeWithTklst-52BHWMVR.js +0 -125
- package/dist/singleCellCellType-OC6QG6MU.js +0 -29
- package/dist/singleCellCellType.unit.spec-R3QPRXVY.js +0 -150
- package/dist/singleCellGeneExpression-QDRIVFQ5.js +0 -29
- package/dist/singleCellGeneExpression.unit.spec-FHUA6VWD.js +0 -144
- package/dist/singleCellNumericValue-2PKMS7NM.js +0 -29
- package/dist/singleCellNumericValue.unit.spec-YXDYOFJ5.js +0 -412
- package/dist/singleCellPlot-5RVA7KM7.js +0 -44
- package/dist/singlecell-5OUPDXEQ.js +0 -1562
- package/dist/singlecell-MLKBNJAG.js +0 -77
- package/dist/snp-ARLPF6ZU.js +0 -29
- package/dist/snp.unit.spec-MUB7YKMP.js +0 -167
- package/dist/snplocus-EZ33TXDU.js +0 -200
- package/dist/snplst-GLTNXAE5.js +0 -36
- package/dist/spliceevent.a53ss.diagram-FMP6CNCV.js +0 -142
- package/dist/spliceevent.exonskip.diagram-QRQ3DZ3I.js +0 -274
- package/dist/spliceevent.noeventdiagram-LAPCKJS3.js +0 -451
- package/dist/ssGSEA-WUE2PKUU.js +0 -29
- package/dist/ssGSEA.unit.spec-Y7KCKEGK.js +0 -79
- package/dist/stattable-GZF4ZWTT.js +0 -112
- package/dist/studyCatalog-PPV7WB2O.js +0 -457
- package/dist/summarizeCnvGeneexp-LZ7UWWZS.js +0 -154
- package/dist/summarizeGeneexpSurvival-VBRJFZR6.js +0 -101
- package/dist/summarizeMutationCnv-6LUM4YR7.js +0 -155
- package/dist/summarizeMutationDiagnosis-B47HKNM6.js +0 -31
- package/dist/summarizeMutationSurvival-6GH3MTLN.js +0 -95
- package/dist/summary-BBI7MS3B.js +0 -40
- package/dist/summary.integration.spec-SYLP7X3F.js +0 -405
- package/dist/summaryInput-5PPK7KRL.js +0 -238
- package/dist/sunburst-BVPS44ZR.js +0 -34
- package/dist/sunburst-H57DYWLE.js +0 -274
- package/dist/survival-C26WPJFT.js +0 -1248
- package/dist/survival-C26WPJFT.js.map +0 -7
- package/dist/survival-PRHRAD2T.js +0 -49
- package/dist/survival.integration.spec-KH6GPVZ4.js +0 -609
- package/dist/svg2pdf.es.min-BRE45YLJ.js +0 -3157
- package/dist/svgraph-VVGRE672.js +0 -1377
- package/dist/svmr-OKTQIHLN.js +0 -3834
- package/dist/swimmer-U5COUOM6.js +0 -993
- package/dist/table-I7SINEY4.js +0 -192
- package/dist/termCollection-QCSPDISY.js +0 -29
- package/dist/termCollection-TFNI2VIX.js +0 -247
- package/dist/termCollection.unit.spec-22E76H2W.js +0 -295
- package/dist/termCollectionFractionSelection-VZ5JJ7KV.js +0 -38
- package/dist/termCollectionFractionSelection.unit.spec-KCAQU2BV.js +0 -184
- package/dist/tk-GBNB42AI.js +0 -37
- package/dist/tk-YOBCGYFC.js +0 -1193
- package/dist/tp.ui-OEL4S73T.js +0 -1453
- package/dist/tvs.categorical-3X6CO5EA.js +0 -28
- package/dist/tvs.condition-YZQSSONN.js +0 -160
- package/dist/tvs.dt-GCMLLAJC.js +0 -34
- package/dist/tvs.dtcnv.categorical-ZSYUQQXP.js +0 -31
- package/dist/tvs.dtcnv.continuous-T67YFFAE.js +0 -72
- package/dist/tvs.dtfusion-VR2NAX3F.js +0 -31
- package/dist/tvs.dtitd-O3MIZPZO.js +0 -31
- package/dist/tvs.dtsnvindel-6G7UNHSQ.js +0 -31
- package/dist/tvs.dtsv-VZ2I4AMH.js +0 -31
- package/dist/tvs.multivalue-6KFI5ELB.js +0 -84
- package/dist/tvs.numeric-SFSOLXVF.js +0 -32
- package/dist/tvs.samplelst-WD5UMMTP.js +0 -95
- package/dist/tvs.survival-A2RUXAXJ.js +0 -110
- package/dist/tvs.termCollection-NVW4LO44.js +0 -118
- package/dist/vocabulary-FASF5IUM.js +0 -32
- package/dist/wsi.direct-O6HFKPCP.js +0 -11514
- package/dist/wsi.direct-O6HFKPCP.js.map +0 -7
- /package/dist/{2dmaf-7HOQRW25.js.map → 2dmaf-OWA6REJ5.js.map} +0 -0
- /package/dist/{AggMatrixInput-LMVRNQBN.js.map → AggMatrixInput-5GC33U5A.js.map} +0 -0
- /package/dist/{AggregateMatrix-AMQTLJV2.js.map → AggregateMatrix-CMJFO53B.js.map} +0 -0
- /package/dist/{AppHeader-AK7O2HUI.js.map → AppHeader-KJCXF35P.js.map} +0 -0
- /package/dist/{CorrelationVolcano-DO7I63FR.js.map → CorrelationVolcano-GHTPFM2V.js.map} +0 -0
- /package/dist/{Cuminc-NHABXYET.js.map → Cuminc-HHBYFFFM.js.map} +0 -0
- /package/dist/{DE-A327BZNW.js.map → DE-VVKIMVXD.js.map} +0 -0
- /package/dist/{DEinput-VKRBFYUE.js.map → DEinput-F7HSM2SO.js.map} +0 -0
- /package/dist/{DM-NU23H5PL.js.map → DM-UBCIWZEY.js.map} +0 -0
- /package/dist/{DifferentialAnalysis-SH47YDQQ.js.map → DifferentialAnalysis-UUXXMOQS.js.map} +0 -0
- /package/dist/{Disco-DOLET5UY.js.map → Disco-NHXU7LG7.js.map} +0 -0
- /package/dist/{Disco.UI-6J6INV56.js.map → Disco.UI-GSSSK4YJ.js.map} +0 -0
- /package/dist/{GB-LQCK6YNB.js.map → GB-CIQGJBJP.js.map} +0 -0
- /package/dist/{GSEA-KLTV4JDP.js.map → GSEA-3GVFEJTX.js.map} +0 -0
- /package/dist/{GeneExpInput-ZMTWWDO7.js.map → GeneExpInput-CFU3Q7FM.js.map} +0 -0
- /package/dist/{Geomap-4NP2JPMA.js.map → Geomap-NMVFA77Q.js.map} +0 -0
- /package/dist/{HicApp-DXF6B4YR.js.map → HicApp-4FCGUUJD.js.map} +0 -0
- /package/dist/{NumBinaryEditor-JZZS67NB.js.map → NumBinaryEditor-4WUDJRSU.js.map} +0 -0
- /package/dist/{NumBinaryEditor.unit.spec-S2MKCJYX.js.map → NumBinaryEditor.unit.spec-MV53GTGQ.js.map} +0 -0
- /package/dist/{NumContEditor-IRZPIDJU.js.map → NumContEditor-U4R6HPDM.js.map} +0 -0
- /package/dist/{NumContEditor.unit.spec-JDSSEJLJ.js.map → NumContEditor.unit.spec-J4ANPBSF.js.map} +0 -0
- /package/dist/{NumCustomBinEditor-E2FJNISZ.js.map → NumCustomBinEditor-QRGDNFP4.js.map} +0 -0
- /package/dist/{NumCustomBinEditor.unit.spec-26GWME2W.js.map → NumCustomBinEditor.unit.spec-PPF233FW.js.map} +0 -0
- /package/dist/{NumDiscreteEditor-JECWQKST.js.map → NumDiscreteEditor-LNK4KHSL.js.map} +0 -0
- /package/dist/{NumDiscreteEditor.unit.spec-DG52CSV5.js.map → NumDiscreteEditor.unit.spec-QY6O62JU.js.map} +0 -0
- /package/dist/{NumRegularBinEditor-W726TJIB.js.map → NumRegularBinEditor-XTINNM5L.js.map} +0 -0
- /package/dist/{NumRegularBinEditor.unit.spec-GG7XXYLQ.js.map → NumRegularBinEditor.unit.spec-FSLARHOC.js.map} +0 -0
- /package/dist/{NumSplineEditor-7UYPJI57.js.map → NumSplineEditor-YSQTKBFA.js.map} +0 -0
- /package/dist/{NumSplineEditor.unit.spec-MESJVLZV.js.map → NumSplineEditor.unit.spec-QNITPY7R.js.map} +0 -0
- /package/dist/{NumericDensity-VFXO6VZ7.js.map → NumericDensity-J5WS74JZ.js.map} +0 -0
- /package/dist/{NumericDensity.unit.spec-OQDBGUQJ.js.map → NumericDensity.unit.spec-4WQWLSSJ.js.map} +0 -0
- /package/dist/{NumericHandler-EJHWVASI.js.map → NumericHandler-ZEWC25U2.js.map} +0 -0
- /package/dist/{NumericHandler.unit.spec-VUIGKU4C.js.map → NumericHandler.unit.spec-A3G5FWGV.js.map} +0 -0
- /package/dist/{ProteomeInput-ATBCNQLN.js.map → ProteomeInput-7DXGQIOO.js.map} +0 -0
- /package/dist/{Regression-ZL6XKZA6.js.map → Regression-VQ5MC6KW.js.map} +0 -0
- /package/dist/{RunChart2-NUSOF6LW.js.map → RunChart2-B33CQUXH.js.map} +0 -0
- /package/dist/{SC-A55NDRZ2.js.map → SC-LEVWXS4P.js.map} +0 -0
- /package/dist/{Volcano-UNZ6OAWB.js.map → Volcano-NTXVM3UR.js.map} +0 -0
- /package/dist/{aboutSunburst-VTBLSKCY.js.map → aboutSunburst-NGH3V74S.js.map} +0 -0
- /package/dist/{adSandbox-7RA6NVM4.js.map → adSandbox-VOAL4P5A.js.map} +0 -0
- /package/dist/{animatedBubbleChart-BRGFUEYW.js.map → animatedBubbleChart-HKOGYPSS.js.map} +0 -0
- /package/dist/{app-2GMWQIJZ.js.map → app-AZLUP2BA.js.map} +0 -0
- /package/dist/{app-4KI25R4S.js.map → app-JJPKGBEV.js.map} +0 -0
- /package/dist/{bam-B3JWSAZ5.js.map → bam-GIZSH2MF.js.map} +0 -0
- /package/dist/{barchart-E2IWHDLL.js.map → barchart-CVTXLIIQ.js.map} +0 -0
- /package/dist/{barchart2-QDATDPDT.js.map → barchart2-XYC6WITL.js.map} +0 -0
- /package/dist/{block-IS3WJCNW.js.map → block-DXRSU62C.js.map} +0 -0
- /package/dist/{block.init-ZCEUPHX2.js.map → block.init-U4Y6ROG4.js.map} +0 -0
- /package/dist/{block.mds.expressionrank-WCJNZ63X.js.map → block.mds.expressionrank-BB26LVTM.js.map} +0 -0
- /package/dist/{block.mds.geneboxplot-BCXVN3GL.js.map → block.mds.geneboxplot-VVKEU3SL.js.map} +0 -0
- /package/dist/{block.mds.junction-J7H7WNMN.js.map → block.mds.junction-XUZX6EAQ.js.map} +0 -0
- /package/dist/{block.mds.svcnv-GJ6BSNGY.js.map → block.mds.svcnv-WDSACPWG.js.map} +0 -0
- /package/dist/{block.svg-SR5EQSKQ.js.map → block.svg-T5BA7VLS.js.map} +0 -0
- /package/dist/{block.tk.aicheck-RPKZMKLM.js.map → block.tk.aicheck-3VN2RDPD.js.map} +0 -0
- /package/dist/{block.tk.bam-BDF3UFRA.js.map → block.tk.bam-5XZ3N4Y7.js.map} +0 -0
- /package/dist/{block.tk.bigwig.ui-2MG6M4CP.js.map → block.tk.bigwig.ui-JODVOS4R.js.map} +0 -0
- /package/dist/{block.tk.hicstraw-JFMLXXLH.js.map → block.tk.hicstraw-AFNWJ2YP.js.map} +0 -0
- /package/dist/{block.tk.junction-ZDFTQJGA.js.map → block.tk.junction-T2G6XEVS.js.map} +0 -0
- /package/dist/{block.tk.junction.textmatrixui-OHAZEQNT.js.map → block.tk.junction.textmatrixui-FL5MZH7K.js.map} +0 -0
- /package/dist/{block.tk.ld-BRYYNH55.js.map → block.tk.ld-JKBXDOB5.js.map} +0 -0
- /package/dist/{block.tk.menu-XQKB62BG.js.map → block.tk.menu-2X4BN7BN.js.map} +0 -0
- /package/dist/{block.tk.pgv-76I52IUX.js.map → block.tk.pgv-ASUVEGQF.js.map} +0 -0
- /package/dist/{brainImaging-65UMKH6J.js.map → brainImaging-27442GMQ.js.map} +0 -0
- /package/dist/{brainRegions-AURQKH5R.js.map → brainRegions-3367RQCU.js.map} +0 -0
- /package/dist/{bubbleHeatmap-T3LEYZBU.js.map → bubbleHeatmap-IOVS6SHX.js.map} +0 -0
- /package/dist/{cellTypeBubbleHeatmap-UPY53IPQ.js.map → cellTypeBubbleHeatmap-7XJP6B5W.js.map} +0 -0
- /package/dist/{chunk-7CE2X6HL.js.map → chunk-2CTAWHGB.js.map} +0 -0
- /package/dist/{chunk-S72DZX6B.js.map → chunk-2ESAB2PP.js.map} +0 -0
- /package/dist/{chunk-HQNH2UX6.js.map → chunk-2GP3LH7J.js.map} +0 -0
- /package/dist/{chunk-MANAUI7R.js.map → chunk-2UGYE6EJ.js.map} +0 -0
- /package/dist/{chunk-MEUSRAOE.js.map → chunk-3TJBSAIO.js.map} +0 -0
- /package/dist/{chunk-G4QRB64M.js.map → chunk-46KQE4DV.js.map} +0 -0
- /package/dist/{chunk-ZK4JKSUK.js.map → chunk-4ICGMPPE.js.map} +0 -0
- /package/dist/{chunk-I2QKZURX.js.map → chunk-4RQTQDHF.js.map} +0 -0
- /package/dist/{chunk-JHLF2ZC2.js.map → chunk-5FD6NRGE.js.map} +0 -0
- /package/dist/{chunk-3A2CWTBI.js.map → chunk-5JBOGNSG.js.map} +0 -0
- /package/dist/{chunk-Z44FLO2F.js.map → chunk-5OWPH4IH.js.map} +0 -0
- /package/dist/{chunk-FE5TCBIT.js.map → chunk-63TCOVAK.js.map} +0 -0
- /package/dist/{chunk-DEIIID6R.js.map → chunk-7ONTCJWB.js.map} +0 -0
- /package/dist/{chunk-GUW7VTUL.js.map → chunk-7Q4KAFCS.js.map} +0 -0
- /package/dist/{chunk-PGMHFGW7.js.map → chunk-7UXV4IX5.js.map} +0 -0
- /package/dist/{chunk-7BD532EJ.js.map → chunk-7ZCYC2DQ.js.map} +0 -0
- /package/dist/{chunk-R3RD3VEX.js.map → chunk-AQSZLUDV.js.map} +0 -0
- /package/dist/{chunk-LXS2GSF4.js.map → chunk-BBA5MAFS.js.map} +0 -0
- /package/dist/{chunk-TZVSDB7S.js.map → chunk-BNJC6OX5.js.map} +0 -0
- /package/dist/{chunk-RIHO7ZD5.js.map → chunk-BOQYGAYA.js.map} +0 -0
- /package/dist/{chunk-TLWU7JWO.js.map → chunk-C4YACFGH.js.map} +0 -0
- /package/dist/{chunk-ZESHWW2R.js.map → chunk-CKO54XWB.js.map} +0 -0
- /package/dist/{chunk-CDUBFFZ7.js.map → chunk-COWLQ74R.js.map} +0 -0
- /package/dist/{chunk-YJFK6C2M.js.map → chunk-CU434U4N.js.map} +0 -0
- /package/dist/{chunk-JDRUY7IR.js.map → chunk-D2YPS46O.js.map} +0 -0
- /package/dist/{chunk-3I26BABG.js.map → chunk-DVSTBGZT.js.map} +0 -0
- /package/dist/{chunk-CAH6LJ5Z.js.map → chunk-EIO6DMIQ.js.map} +0 -0
- /package/dist/{chunk-4MGXKCPS.js.map → chunk-EM56Y4X6.js.map} +0 -0
- /package/dist/{chunk-NX5IB4IY.js.map → chunk-F6CYUMSM.js.map} +0 -0
- /package/dist/{chunk-GBKQHVKJ.js.map → chunk-FUTHP5J4.js.map} +0 -0
- /package/dist/{chunk-O3XTTT4K.js.map → chunk-G5GFCBJT.js.map} +0 -0
- /package/dist/{chunk-JXVRNCAZ.js.map → chunk-GOL6A746.js.map} +0 -0
- /package/dist/{chunk-JUPLOOCO.js.map → chunk-GVLXSPTN.js.map} +0 -0
- /package/dist/{chunk-MNN6NFZK.js.map → chunk-HNU4RYI5.js.map} +0 -0
- /package/dist/{chunk-E54XQGQM.js.map → chunk-HTIZFNBC.js.map} +0 -0
- /package/dist/{chunk-5DI4UNH5.js.map → chunk-HUF5BTO6.js.map} +0 -0
- /package/dist/{chunk-EYKJQJ7R.js.map → chunk-HWP3U2VY.js.map} +0 -0
- /package/dist/{chunk-ZV7LZY67.js.map → chunk-JEXS72M5.js.map} +0 -0
- /package/dist/{chunk-PUIQ3UF7.js.map → chunk-JNIYPQWY.js.map} +0 -0
- /package/dist/{chunk-7MJENXZ6.js.map → chunk-K5RCZIZN.js.map} +0 -0
- /package/dist/{chunk-2OMX5AYB.js.map → chunk-KA3KYNOP.js.map} +0 -0
- /package/dist/{chunk-Z5ECCUNG.js.map → chunk-KGFH5VTH.js.map} +0 -0
- /package/dist/{chunk-6T4MN7LV.js.map → chunk-KTRDLHCP.js.map} +0 -0
- /package/dist/{chunk-II5ZAY52.js.map → chunk-L6TGKNRA.js.map} +0 -0
- /package/dist/{chunk-H7HTCD2Q.js.map → chunk-LN4KNFOQ.js.map} +0 -0
- /package/dist/{chunk-36CCFKWS.js.map → chunk-M4ML4ACA.js.map} +0 -0
- /package/dist/{chunk-CPWM4S3K.js.map → chunk-MIDVLNN3.js.map} +0 -0
- /package/dist/{chunk-2GWAEK4R.js.map → chunk-MUVXIOXM.js.map} +0 -0
- /package/dist/{chunk-53VTLOOW.js.map → chunk-N6AHRJAM.js.map} +0 -0
- /package/dist/{chunk-CPVUBEDA.js.map → chunk-NB4UU4DH.js.map} +0 -0
- /package/dist/{chunk-QQH32U6O.js.map → chunk-NGG4737W.js.map} +0 -0
- /package/dist/{chunk-Z6CMJQKG.js.map → chunk-O4BDFBVK.js.map} +0 -0
- /package/dist/{chunk-MG5U4JYY.js.map → chunk-OGU7IDV7.js.map} +0 -0
- /package/dist/{chunk-UHPFEULI.js.map → chunk-OVO6NYUR.js.map} +0 -0
- /package/dist/{chunk-3TO7TWHS.js.map → chunk-OXRZSZKA.js.map} +0 -0
- /package/dist/{chunk-QBGMD5UV.js.map → chunk-QMR3QMJG.js.map} +0 -0
- /package/dist/{chunk-HYW74ZT2.js.map → chunk-QUVGLTCF.js.map} +0 -0
- /package/dist/{chunk-XYAT642G.js.map → chunk-RCLCEA55.js.map} +0 -0
- /package/dist/{chunk-HZTSMLBZ.js.map → chunk-RCVA2RWU.js.map} +0 -0
- /package/dist/{chunk-TUZ3MJVF.js.map → chunk-RSCSTOUN.js.map} +0 -0
- /package/dist/{chunk-L2H4W3UM.js.map → chunk-SCXWXLMR.js.map} +0 -0
- /package/dist/{chunk-2CQ4YA7M.js.map → chunk-SQUMXZXI.js.map} +0 -0
- /package/dist/{chunk-7SFK32JP.js.map → chunk-T2DORAV4.js.map} +0 -0
- /package/dist/{chunk-Z6LQ3URB.js.map → chunk-TBXJ2CUA.js.map} +0 -0
- /package/dist/{chunk-C7ROKWV2.js.map → chunk-TQLHKDNS.js.map} +0 -0
- /package/dist/{chunk-C7KUMZQM.js.map → chunk-VQD6GZMU.js.map} +0 -0
- /package/dist/{chunk-T4KD2FBB.js.map → chunk-VZBRG6HQ.js.map} +0 -0
- /package/dist/{chunk-IW5XJT3H.js.map → chunk-WQHL6SR3.js.map} +0 -0
- /package/dist/{chunk-2FTQ5RMP.js.map → chunk-X7JGAQ5N.js.map} +0 -0
- /package/dist/{chunk-7TG44KO3.js.map → chunk-Z6ZFRHXK.js.map} +0 -0
- /package/dist/{chunk-N4ULQIGJ.js.map → chunk-ZCY72DDM.js.map} +0 -0
- /package/dist/{chunk-RRKUFU4L.js.map → chunk-ZHY7ZHWC.js.map} +0 -0
- /package/dist/{chunk-2VBU42YX.js.map → chunk-ZLQ6PAI6.js.map} +0 -0
- /package/dist/{chunk-MHWYRNGA.js.map → chunk-ZUG4EY4T.js.map} +0 -0
- /package/dist/{cohort-T3SEGYG3.js.map → cohort-2DQOQ5AO.js.map} +0 -0
- /package/dist/{cohortSunburst-HIWGWD7A.js.map → cohortSunburst-W6XC7VD6.js.map} +0 -0
- /package/dist/{condition-KEFHKNUU.js.map → condition-3A7I5UQA.js.map} +0 -0
- /package/dist/{controls-MDUZLMY7.js.map → controls-G5WYBX4P.js.map} +0 -0
- /package/dist/{controls.config-4XZZXUZV.js.map → controls.config-TAFGM2S2.js.map} +0 -0
- /package/dist/{correlation-55LF7GPF.js.map → correlation-K4EOOQJU.js.map} +0 -0
- /package/dist/{customdata.inputui-6KIPVY2Q.js.map → customdata.inputui-E7RRN3KY.js.map} +0 -0
- /package/dist/{dataDownload-XCFCSKDO.js.map → dataDownload-OXZGAE5R.js.map} +0 -0
- /package/dist/{dictionary-P5JGXQSW.js.map → dictionary-MUNAUI43.js.map} +0 -0
- /package/dist/{dnaMethylation-ZNR5U6HS.js.map → dnaMethylation-SOV4HBAX.js.map} +0 -0
- /package/dist/{dnaMethylation.integration.spec-7AMBXA4M.js.map → dnaMethylation.integration.spec-T4KKTMRL.js.map} +0 -0
- /package/dist/{dofetch-4P5F5ZGU.js.map → dofetch-2CR2TVWC.js.map} +0 -0
- /package/dist/{e2pca-AJQ22AHJ.js.map → e2pca-EIOJCV4O.js.map} +0 -0
- /package/dist/{ep-3ZEN3C4U.js.map → ep-5QX3CW6D.js.map} +0 -0
- /package/dist/{expclust.gdc.spec-IQXJYSCH.js.map → expclust.gdc.spec-TNHPZLYQ.js.map} +0 -0
- /package/dist/{facet-RPFQA3DH.js.map → facet-I3OC4DK2.js.map} +0 -0
- /package/dist/{gb-R4D647D2.js.map → gb-WPIUHR3O.js.map} +0 -0
- /package/dist/{geneExpClustering-JLJL6S3Q.js.map → geneExpClustering-EYGZENSP.js.map} +0 -0
- /package/dist/{geneExpression-NWNOCRVM.js.map → geneExpression-54L3DH32.js.map} +0 -0
- /package/dist/{geneExpression-TK75VNQG.js.map → geneExpression-6S6H2EVY.js.map} +0 -0
- /package/dist/{geneExpression.unit.spec-4HTUTQ5K.js.map → geneExpression.unit.spec-VVI2MXIH.js.map} +0 -0
- /package/dist/{geneORA-7FP6KZSE.js.map → geneORA-7M64LXZC.js.map} +0 -0
- /package/dist/{geneRanking-SBFOUZTQ.js.map → geneRanking-676CAA3B.js.map} +0 -0
- /package/dist/{geneVariant-3DHX4LQL.js.map → geneVariant-4UPJE6MJ.js.map} +0 -0
- /package/dist/{geneVariant-SUQWO6ON.js.map → geneVariant-PFVPL22U.js.map} +0 -0
- /package/dist/{geneVariant.integration.spec-KOUVJAFB.js.map → geneVariant.integration.spec-EAJ4OSFQ.js.map} +0 -0
- /package/dist/{genefusion.ui-DAIBYS5I.js.map → genefusion.ui-LP4EJUTO.js.map} +0 -0
- /package/dist/{geneset-MKSYRPV4.js.map → geneset-ANDOMTPO.js.map} +0 -0
- /package/dist/{genomeBrowser.spec-JSHMD3CR.js.map → genomeBrowser.spec-NUXOOL5N.js.map} +0 -0
- /package/dist/{grin2-Z4ETF6OM.js.map → grin2-K4LRVCES.js.map} +0 -0
- /package/dist/{grin2-RFRYBHBV.js.map → grin2-YFCWJZFR.js.map} +0 -0
- /package/dist/{hierCluster-C67VO3VF.js.map → hierCluster-POD3DRO4.js.map} +0 -0
- /package/dist/{hierCluster-CEJTROX7.js.map → hierCluster-QA7HXKRD.js.map} +0 -0
- /package/dist/{hierCluster.config-G3X5I72U.js.map → hierCluster.config-HQ3SVKCE.js.map} +0 -0
- /package/dist/{hierCluster.integration.spec-HTS2GNUR.js.map → hierCluster.integration.spec-MOYDWJL3.js.map} +0 -0
- /package/dist/{hierCluster.interactivity-4JVDLIPZ.js.map → hierCluster.interactivity-OZTNHXZQ.js.map} +0 -0
- /package/dist/{hierCluster.renderers-YGX6MZZW.js.map → hierCluster.renderers-46E37NL4.js.map} +0 -0
- /package/dist/{imagePlot-HNKJX6YK.js.map → imagePlot-HNAYBWY3.js.map} +0 -0
- /package/dist/{importPlot-XUL6XFBL.js.map → importPlot-XTW46VF4.js.map} +0 -0
- /package/dist/{isoformExpression-ZJJUXJDF.js.map → isoformExpression-2TMTILKG.js.map} +0 -0
- /package/dist/{isoformExpression.unit.spec-INU6WFAM.js.map → isoformExpression.unit.spec-SIJWP7TH.js.map} +0 -0
- /package/dist/{jspdf.es.min-THXUXEDC.js.map → jspdf.es.min-GSH2SAQO.js.map} +0 -0
- /package/dist/{junction-FKYIKDC4.js.map → junction-AICKHNXX.js.map} +0 -0
- /package/dist/{junction.customTerm-3R2GNE3A.js.map → junction.customTerm-5STKYZ4B.js.map} +0 -0
- /package/dist/{junction.unit.spec-VRFIOT4T.js.map → junction.unit.spec-EXFN4MLW.js.map} +0 -0
- /package/dist/{launch.adhoc-SDMXDSHS.js.map → launch.adhoc-PB6PGR7Q.js.map} +0 -0
- /package/dist/{leftlabel.sample-S33KB225.js.map → leftlabel.sample-ISUD4A7F.js.map} +0 -0
- /package/dist/{lollipop-WXQOGEY7.js.map → lollipop-5UXUAFYY.js.map} +0 -0
- /package/dist/{maf-K6ZUNABR.js.map → maf-L6YD25JK.js.map} +0 -0
- /package/dist/{maftimeline-Y2LETT7W.js.map → maftimeline-63YZDGJ3.js.map} +0 -0
- /package/dist/{matrix-LADX4K5W.js.map → matrix-OPEBHZCW.js.map} +0 -0
- /package/dist/{matrix-M63KP6IL.js.map → matrix-TLMWPG7C.js.map} +0 -0
- /package/dist/{matrix.cells-5RTZUJVN.js.map → matrix.cells-IELMNYC6.js.map} +0 -0
- /package/dist/{matrix.config-ZMT7A2D5.js.map → matrix.config-J7SVFXLM.js.map} +0 -0
- /package/dist/{matrix.data-Y5TPRGMW.js.map → matrix.data-DJTJCPO4.js.map} +0 -0
- /package/dist/{matrix.groups-6DXCAY4P.js.map → matrix.groups-2REICNZK.js.map} +0 -0
- /package/dist/{matrix.integration.spec-LJ5EQ65D.js.map → matrix.integration.spec-ZXU2OEFU.js.map} +0 -0
- /package/dist/{matrix.interactivity-2ISWFOK2.js.map → matrix.interactivity-SX3OR6OI.js.map} +0 -0
- /package/dist/{matrix.layout-EAYTUK2H.js.map → matrix.layout-ZJ6X5RON.js.map} +0 -0
- /package/dist/{matrix.legend-S3E76TVO.js.map → matrix.legend-ZOP72TIO.js.map} +0 -0
- /package/dist/{matrix.renderers-XUMZZUDW.js.map → matrix.renderers-YUSROXKN.js.map} +0 -0
- /package/dist/{matrix.serieses-3UGLZW25.js.map → matrix.serieses-UMAZNCMR.js.map} +0 -0
- /package/dist/{matrix.sort-A7CNLDUJ.js.map → matrix.sort-2JNIZHNL.js.map} +0 -0
- /package/dist/{matrix.sort.unit.spec-UPG3D6GE.js.map → matrix.sort.unit.spec-SNB643Y6.js.map} +0 -0
- /package/dist/{matrix.sorterUi-6PZR3YOD.js.map → matrix.sorterUi-JXEIY6UL.js.map} +0 -0
- /package/dist/{matrix.sorterUi.unit.spec-WPMREECT.js.map → matrix.sorterUi.unit.spec-LDAT4R3H.js.map} +0 -0
- /package/dist/{matrix.unit.spec-Z2HXOXM4.js.map → matrix.unit.spec-QBQIMDLD.js.map} +0 -0
- /package/dist/{mavb-WT4XM6U3.js.map → mavb-EQUF3VGG.js.map} +0 -0
- /package/dist/{mds.samplescatterplot-UTEBJF66.js.map → mds.samplescatterplot-73E45ZT7.js.map} +0 -0
- /package/dist/{mds.survivalplot-DXWJA4IJ.js.map → mds.survivalplot-DL53IRVD.js.map} +0 -0
- /package/dist/{multivalue-LR7Z3OLZ.js.map → multivalue-PQN75ENP.js.map} +0 -0
- /package/dist/{numericDictTermCluster-6XDVVWLE.js.map → numericDictTermCluster-FGMIOTBO.js.map} +0 -0
- /package/dist/{oncomatrix-WV2LSH3X.js.map → oncomatrix-CCHWOA3N.js.map} +0 -0
- /package/dist/{oncomatrix.spec-S7KHSJJG.js.map → oncomatrix.spec-GQT3UTCR.js.map} +0 -0
- /package/dist/{plot.2dvaf-FH7PMZ3U.js.map → plot.2dvaf-L6ZI5ROR.js.map} +0 -0
- /package/dist/{plot.app-DDB6YZJ3.js.map → plot.app-A73VXJCP.js.map} +0 -0
- /package/dist/{plot.barplot-XVSZDYKB.js.map → plot.barplot-HSCHPOO7.js.map} +0 -0
- /package/dist/{plot.boxplot-M6URTYED.js.map → plot.boxplot-AXBVNTNH.js.map} +0 -0
- /package/dist/{plot.brainImaging-GNIBY3XC.js.map → plot.brainImaging-PEMURKM3.js.map} +0 -0
- /package/dist/{plot.disco-EH4E7B3O.js.map → plot.disco-YKMYYVMV.js.map} +0 -0
- /package/dist/{plot.ssgq-7HIGQHOT.js.map → plot.ssgq-FGMQXKZU.js.map} +0 -0
- /package/dist/{plot.vaf2cov-MGJHP2PV.js.map → plot.vaf2cov-IBM7NQEB.js.map} +0 -0
- /package/dist/{polar2-VYUW5GZO.js.map → polar2-N7KWY36S.js.map} +0 -0
- /package/dist/{profileForms-LHJCFAP6.js.map → profileForms-Q4NN7653.js.map} +0 -0
- /package/dist/{profilePlot-UF2KERDD.js.map → profilePlot-SQ77M6LI.js.map} +0 -0
- /package/dist/{proteinView-5AF4I3PB.js.map → proteinView-KSIZRDNP.js.map} +0 -0
- /package/dist/{proteomeCohortCompare-4DYWZTLQ.js.map → proteomeCohortCompare-GYSBJSDY.js.map} +0 -0
- /package/dist/{pseudbulk.unit.spec-ZTAP2YYA.js.map → pseudbulk.unit.spec-XELPZVXM.js.map} +0 -0
- /package/dist/{pseudobulk-A2KE233U.js.map → pseudobulk-H3USXM5U.js.map} +0 -0
- /package/dist/{qualitative-3FDE4JUM.js.map → qualitative-ABXENRAF.js.map} +0 -0
- /package/dist/{qualitative-NVWG57TK.js.map → qualitative-OSEJTJ4D.js.map} +0 -0
- /package/dist/{radar2-3CQ7T5QY.js.map → radar2-VTDQGHWN.js.map} +0 -0
- /package/dist/{radarFacility2-ERBWZQFH.js.map → radarFacility2-BWGEC5A2.js.map} +0 -0
- /package/dist/{rememberedGvQ.unit.spec-SHTMMZGG.js.map → rememberedGvQ.unit.spec-TWUDSEDP.js.map} +0 -0
- /package/dist/{render-LIUPN5SK.js.map → render-C3XJQ2QY.js.map} +0 -0
- /package/dist/{report-JWNWR6NA.js.map → report-7ZZ44X4R.js.map} +0 -0
- /package/dist/{sampleView-BQ6HCCKT.js.map → sampleView-CUCNI65Q.js.map} +0 -0
- /package/dist/{samplelst-RQWH7WOX.js.map → samplelst-S7AJQ36J.js.map} +0 -0
- /package/dist/{samplematrix-7FDWXSZA.js.map → samplematrix-U7WM6GNB.js.map} +0 -0
- /package/dist/{sc-J2ZPQFGP.js.map → sc-FMJHN2SW.js.map} +0 -0
- /package/dist/{scatter-7FQLITP7.js.map → scatter-4UMCJNEH.js.map} +0 -0
- /package/dist/{scatter-BDIZX73F.js.map → scatter-KMAZ3ZNR.js.map} +0 -0
- /package/dist/{selectGenomeWithTklst-52BHWMVR.js.map → selectGenomeWithTklst-5SRM45BI.js.map} +0 -0
- /package/dist/{singleCellCellType-OC6QG6MU.js.map → singleCellCellType-GIIICJK5.js.map} +0 -0
- /package/dist/{singleCellCellType.unit.spec-R3QPRXVY.js.map → singleCellCellType.unit.spec-MVA7BMGL.js.map} +0 -0
- /package/dist/{singleCellGeneExpression-QDRIVFQ5.js.map → singleCellGeneExpression-2QFQHJJH.js.map} +0 -0
- /package/dist/{singleCellGeneExpression.unit.spec-FHUA6VWD.js.map → singleCellGeneExpression.unit.spec-SAIETYHV.js.map} +0 -0
- /package/dist/{singleCellNumericValue-2PKMS7NM.js.map → singleCellNumericValue-45H5EPIB.js.map} +0 -0
- /package/dist/{singleCellNumericValue.unit.spec-YXDYOFJ5.js.map → singleCellNumericValue.unit.spec-FNKEJ2WC.js.map} +0 -0
- /package/dist/{singleCellPlot-5RVA7KM7.js.map → singleCellPlot-SP7OEGYQ.js.map} +0 -0
- /package/dist/{singlecell-5OUPDXEQ.js.map → singlecell-AVZQX4AH.js.map} +0 -0
- /package/dist/{singlecell-MLKBNJAG.js.map → singlecell-JQKUHGIH.js.map} +0 -0
- /package/dist/{snp-ARLPF6ZU.js.map → snp-4SA7VABN.js.map} +0 -0
- /package/dist/{snp.unit.spec-MUB7YKMP.js.map → snp.unit.spec-YIYGR6GW.js.map} +0 -0
- /package/dist/{snplocus-EZ33TXDU.js.map → snplocus-TDGQ57ZJ.js.map} +0 -0
- /package/dist/{snplst-GLTNXAE5.js.map → snplst-SWBGRYPA.js.map} +0 -0
- /package/dist/{spliceevent.a53ss.diagram-FMP6CNCV.js.map → spliceevent.a53ss.diagram-YODOBS6U.js.map} +0 -0
- /package/dist/{spliceevent.exonskip.diagram-QRQ3DZ3I.js.map → spliceevent.exonskip.diagram-PMZIQ5UG.js.map} +0 -0
- /package/dist/{spliceevent.noeventdiagram-LAPCKJS3.js.map → spliceevent.noeventdiagram-A4T2PNUX.js.map} +0 -0
- /package/dist/{ssGSEA-WUE2PKUU.js.map → ssGSEA-U7D6HOIV.js.map} +0 -0
- /package/dist/{ssGSEA.unit.spec-Y7KCKEGK.js.map → ssGSEA.unit.spec-SMNAM5DJ.js.map} +0 -0
- /package/dist/{stattable-GZF4ZWTT.js.map → stattable-DBYMPJU6.js.map} +0 -0
- /package/dist/{studyCatalog-PPV7WB2O.js.map → studyCatalog-7RABX4W5.js.map} +0 -0
- /package/dist/{summarizeCnvGeneexp-LZ7UWWZS.js.map → summarizeCnvGeneexp-YVRW7LWY.js.map} +0 -0
- /package/dist/{summarizeGeneexpSurvival-VBRJFZR6.js.map → summarizeGeneexpSurvival-ZB7IWGPS.js.map} +0 -0
- /package/dist/{summarizeMutationCnv-6LUM4YR7.js.map → summarizeMutationCnv-CUSYURDK.js.map} +0 -0
- /package/dist/{summarizeMutationDiagnosis-B47HKNM6.js.map → summarizeMutationDiagnosis-NSPCT5WI.js.map} +0 -0
- /package/dist/{summarizeMutationSurvival-6GH3MTLN.js.map → summarizeMutationSurvival-2PZZCC4G.js.map} +0 -0
- /package/dist/{summary-BBI7MS3B.js.map → summary-CYDZSICI.js.map} +0 -0
- /package/dist/{summary.integration.spec-SYLP7X3F.js.map → summary.integration.spec-2TLKJS3X.js.map} +0 -0
- /package/dist/{summaryInput-5PPK7KRL.js.map → summaryInput-BRQ5JRGV.js.map} +0 -0
- /package/dist/{sunburst-BVPS44ZR.js.map → sunburst-435LKL2S.js.map} +0 -0
- /package/dist/{sunburst-H57DYWLE.js.map → sunburst-D5WAGHX6.js.map} +0 -0
- /package/dist/{survival-PRHRAD2T.js.map → survival-MHESSYWF.js.map} +0 -0
- /package/dist/{survival.integration.spec-KH6GPVZ4.js.map → survival.integration.spec-WMS3FTNR.js.map} +0 -0
- /package/dist/{svg2pdf.es.min-BRE45YLJ.js.map → svg2pdf.es.min-PHWTISHJ.js.map} +0 -0
- /package/dist/{svgraph-VVGRE672.js.map → svgraph-LYFGVTHI.js.map} +0 -0
- /package/dist/{svmr-OKTQIHLN.js.map → svmr-UR67QZIP.js.map} +0 -0
- /package/dist/{swimmer-U5COUOM6.js.map → swimmer-RP4SUEZS.js.map} +0 -0
- /package/dist/{table-I7SINEY4.js.map → table-V4OOMF3B.js.map} +0 -0
- /package/dist/{termCollection-QCSPDISY.js.map → termCollection-VHGVBSWW.js.map} +0 -0
- /package/dist/{termCollection-TFNI2VIX.js.map → termCollection-WSNM3YFK.js.map} +0 -0
- /package/dist/{termCollection.unit.spec-22E76H2W.js.map → termCollection.unit.spec-NCZUZL6P.js.map} +0 -0
- /package/dist/{termCollectionFractionSelection-VZ5JJ7KV.js.map → termCollectionFractionSelection-XM3FJWBQ.js.map} +0 -0
- /package/dist/{termCollectionFractionSelection.unit.spec-KCAQU2BV.js.map → termCollectionFractionSelection.unit.spec-VO4SAV72.js.map} +0 -0
- /package/dist/{tk-YOBCGYFC.js.map → tk-G5PKWSXJ.js.map} +0 -0
- /package/dist/{tk-GBNB42AI.js.map → tk-KIELQHVI.js.map} +0 -0
- /package/dist/{tp.ui-OEL4S73T.js.map → tp.ui-HAKSWLFB.js.map} +0 -0
- /package/dist/{tvs.categorical-3X6CO5EA.js.map → tvs.categorical-G4DM4JY5.js.map} +0 -0
- /package/dist/{tvs.condition-YZQSSONN.js.map → tvs.condition-E5NUQONB.js.map} +0 -0
- /package/dist/{tvs.dt-GCMLLAJC.js.map → tvs.dt-T4BK24VZ.js.map} +0 -0
- /package/dist/{tvs.dtcnv.categorical-ZSYUQQXP.js.map → tvs.dtcnv.categorical-V57TZFRA.js.map} +0 -0
- /package/dist/{tvs.dtcnv.continuous-T67YFFAE.js.map → tvs.dtcnv.continuous-D4YIB4PN.js.map} +0 -0
- /package/dist/{tvs.dtfusion-VR2NAX3F.js.map → tvs.dtfusion-6DUFLUNH.js.map} +0 -0
- /package/dist/{tvs.dtitd-O3MIZPZO.js.map → tvs.dtitd-GOEPAQGR.js.map} +0 -0
- /package/dist/{tvs.dtsnvindel-6G7UNHSQ.js.map → tvs.dtsnvindel-ASTXGC4O.js.map} +0 -0
- /package/dist/{tvs.dtsv-VZ2I4AMH.js.map → tvs.dtsv-7TGDEWXK.js.map} +0 -0
- /package/dist/{tvs.multivalue-6KFI5ELB.js.map → tvs.multivalue-SEIGL2W6.js.map} +0 -0
- /package/dist/{tvs.numeric-SFSOLXVF.js.map → tvs.numeric-MLLX5L7Z.js.map} +0 -0
- /package/dist/{tvs.samplelst-WD5UMMTP.js.map → tvs.samplelst-HAV7C2EA.js.map} +0 -0
- /package/dist/{tvs.survival-A2RUXAXJ.js.map → tvs.survival-3B522MT2.js.map} +0 -0
- /package/dist/{tvs.termCollection-NVW4LO44.js.map → tvs.termCollection-R5NG4VXP.js.map} +0 -0
- /package/dist/{vocabulary-FASF5IUM.js.map → vocabulary-LBNHNSEN.js.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../plots/sunburst/sunburst.data.ts", "../plots/sunburst/SunburstChart.ts", "../plots/sunburst/sunburst.ts"],
|
|
4
|
+
"sourcesContent": ["import type { Filter, SunburstResponse, SunburstNode, SunburstCategory } from '#types'\nimport type { SunNode } from './SunburstRenderer'\n\n/*\nData helpers of the term-based sunburst, without any DOM code: the termdb/sunburst response as a renderer \ntree, and selected wedges as a group filter. Kept apart from sunburst.ts so they can be unit-tested directly.\n*/\n\n/** a wedge of the term sunburst. `id` names it by its path of [ring $id, key] pairs, as JSON so that no\n * category key can make two paths alike, and a selection can survive a re-fetch; `ring`, `key` and\n * `category` say which ring category it is */\nexport type TermSunNode = SunNode & {\n\tid: string\n\tring: number\n\tkey: string\n\tcategory: SunburstCategory\n\t/** samples under the wedge (SunNode.value is only those that end here) */\n\tcount: number\n\tchildren?: TermSunNode[]\n}\n\ntype TermSunRoot = SunNode & { children: TermSunNode[]; count: number }\n\n/** the response as a renderer tree; first-ring colours from the dataset (keyed by category key) win\n * over the term's own */\nexport function buildTermTree(\n\tres: SunburstResponse,\n\ttwLst: any[],\n\trootName: string,\n\tcolors?: { [key: string]: string }\n): TermSunRoot {\n\tconst convert = (n: SunburstNode, ring: number, parentPath: string[][]): TermSunNode => {\n\t\tconst tw = twLst[ring]\n\t\tconst category = res.rings[ring].categories[n.key] || { label: n.key }\n\t\tconst path = [...parentPath, [tw.$id, n.key]]\n\t\tconst children = (n.children || []).map(c => convert(c, ring + 1, path))\n\t\tconst node: TermSunNode = {\n\t\t\tname: category.label,\n\t\t\tlevel: tw.term.name,\n\t\t\t// d3 adds the children to a node's own value, so it holds only the samples that end here\n\t\t\tvalue: n.count - children.reduce((s, c) => s + c.count, 0),\n\t\t\tcount: n.count,\n\t\t\tid: JSON.stringify(path),\n\t\t\tring,\n\t\t\tkey: n.key,\n\t\t\tcategory\n\t\t}\n\t\tconst color = (ring == 0 && colors?.[n.key]) || category.color\n\t\tif (color) node.color = color\n\t\tif (children.length) node.children = children\n\t\treturn node\n\t}\n\treturn { name: rootName, value: 0, count: res.total, children: res.nodes.map(n => convert(n, 0, [])) }\n}\n\n/** one ring category as a filter entry: the tvs of the ring's term, or a filter group's own filter */\nexport function categoryFilterItem(tw: any, category: SunburstCategory): any {\n\tif (category.filter) return structuredClone(category.filter)\n\tif (!category.tvs) throw `no filter for category '${category.label}' of ${tw.term.name}`\n\treturn { type: 'tvs', tvs: { term: tw.term, ...structuredClone(category.tvs) } }\n}\n\n/** the samples of one wedge: its categories along the path from the first ring, joined by \"and\" */\nexport function wedgeFilter(path: TermSunNode[], twLst: any[]): Filter {\n\tconst lst = path.map(n => categoryFilterItem(twLst[n.ring], n.category))\n\treturn { type: 'tvslst', in: true, join: lst.length > 1 ? 'and' : '', lst }\n}\n\n/** the samples of any of the selected wedges, each given as its path from the first ring. One wedge\n * is just its own filter; several are joined by \"or\" */\nexport function selectionFilter(paths: TermSunNode[][], twLst: any[]): Filter {\n\tif (!paths.length) throw 'no wedge selected'\n\tif (paths.length == 1) return wedgeFilter(paths[0], twLst)\n\treturn { type: 'tvslst', in: true, join: 'or', lst: paths.map(p => wedgeFilter(p, twLst)) }\n}\n\n/** a readable name for a selection: the path of one wedge (e.g. \"BCP-ALL \u203A Hyperdiploid\"), or the\n * wedge names joined when several are selected */\nexport function selectionName(paths: TermSunNode[][], maxLen = 60): string {\n\tconst names =\n\t\tpaths.length == 1 ? paths[0].map(n => n.name).join(' \u203A ') : paths.map(p => p[p.length - 1].name).join(' or ')\n\treturn names.length > maxLen ? names.slice(0, maxLen - 1) + '\u2026' : names\n}\n\n/** the sample types a new or replacing ring may have, given the other rings: the line of descent through\n * the deepest of their sample types (its ancestors, itself and its descendants), since no value maps\n * between sibling types such as primary and PDX samples. Undefined (any type) when the dataset has one\n * sample type or no other ring is below the top level. `sampleTypes` is termdbConfig.sampleTypes */\nexport function allowedSampleTypes(otherTwLst: any[], sampleTypes?: { [id: string]: any }): number[] | undefined {\n\tif (!sampleTypes || Object.keys(sampleTypes).length < 2) return\n\tconst parent = (t: string) => {\n\t\tconst p = sampleTypes[t]?.parent_id\n\t\treturn p === null || p === undefined ? undefined : String(p)\n\t}\n\tconst ancestors = (t: string) => {\n\t\tconst lst: string[] = []\n\t\tfor (let p = parent(t); p !== undefined && !lst.includes(p); p = parent(p)) lst.push(p)\n\t\treturn lst\n\t}\n\tconst types = otherTwLst\n\t\t.map(tw => tw.term?.sample_type)\n\t\t.filter(t => t !== null && t !== undefined && sampleTypes[t])\n\t\t.map(String)\n\tconst below = types.filter(t => parent(t) !== undefined)\n\tif (!below.length) return\n\tconst deepest = below.reduce((a, b) => (ancestors(b).length > ancestors(a).length ? b : a))\n\tconst descendants = Object.keys(sampleTypes).filter(t => ancestors(t).includes(deepest))\n\treturn [...ancestors(deepest), deepest, ...descendants].map(Number)\n}\n", "import { dofetch3 } from '#common/dofetch'\nimport { select } from 'd3-selection'\nimport { escapeHtml, capitalizeFirstLetter } from '#dom'\nimport { getNormalRoot, filterJoin } from '#filter'\nimport { addNewGroup, getGroupFilterOfConditions } from '#mass/groups'\nimport { availabilitySections, fetchDataAvailability, type AvailabilityRow } from '#mass/groupDataAvailability'\nimport { TermTypes } from '#types'\nimport { getActiveCohortStr } from '#mass/charts'\nimport type { Filter, SunburstRequest, SunburstResponse } from '#types'\nimport {\n\tSunburstRenderer,\n\tcard,\n\tbadge,\n\tpill,\n\tSIZE,\n\tTEXT_DARK,\n\tTEXT_MUTED,\n\tLINK,\n\tRULE,\n\tSELECT_STROKE,\n\ticon,\n\ttype Card,\n\ttype HNode\n} from './SunburstRenderer'\nimport { buildTermTree, selectionFilter, selectionName, type TermSunNode } from './sunburst.data'\n\n/*\nThe term-based sunburst without its rx plot component: fetches the counts of the given rings, draws them,\nand keeps the wedge selection, one sample group. Below the selected wedges, \"Show available data\" lists how\nmany of the selected samples have each kind of data of the dataset (termdb/dataAvailability); a kind with a\nplot of its own opens that plot of the selected samples, which have the selection as the plot's filter. The\nselection can also become one sample group in the GROUPS tab. Used by the sunburst\nplot (sunburst.ts), which fills the Rings box with term pills, and by the About tab (about.ts), which\nlists the dataset's default rings.\n\nClick a wedge to zoom into it; a wedge without rings beneath it, a shift-click, or SELECT above the\nchart (for the wedge at the centre) selects it. Selecting a wedge drops its selected descendants, which\nit already contains.\n\nA sample with no value for a ring, or a value the ring hides (tw.q.hiddenValues, e.g. set in the dataset's\ndefault rings), ends at the previous ring, leaving a gap in the outer ring of its wedge; samples with no\nor a hidden value for the first ring are not in the chart.\n*/\n\n// stat box keys; their titles follow the unit\nconst STAT_SAMPLES = 'Samples'\nconst STAT_SELECTED = 'Selected samples'\n/** indent per ring in the Rings box, so the rings read as a path from the first to the last */\nconst RING_STEP = 6\nconst RING_LINE = '#cbd5e1'\n\nexport type SunburstChartOpts = {\n\tholder: any\n\t/** the mass app, for the term pickers and the created groups */\n\tapp: any\n\t/** px between the chart and its side columns (SunburstRendererOpts.gap) */\n\tgap?: number\n\t/** called before a plot of the selection is created, e.g. to show the plots tab */\n\tbeforeLaunch?: () => Promise<any> | void\n}\n\nexport type SunburstUpdateArg = {\n\tgenome: string\n\tdslabel: string\n\t/** ring term wrappers, inside out, filled */\n\ttwLst: any[]\n\t/** the filter the counts are of: the global filter, joined with the plot's own if any */\n\ttermfilter?: { filter?: Filter; filter0?: any }\n\t/** the plot's own filter, which a created group also has; the global filter is joined where the\n\t * group is used */\n\tgroupFilter?: Filter\n\t/** first-ring colours from the dataset, keyed by category key */\n\tcolors?: { [key: string]: string }\n}\n\nexport class SunburstChart {\n\tapp: any\n\tdom: {\n\t\terrdiv: any\n\t\tloadingDiv: any\n\t\tnoteDiv: any\n\t\t/** the rings, left of the chart; filled by the caller (ringRow) */\n\t\trings: Card\n\t\t/** the selected wedges, with the create-group action */\n\t\tsel: Card\n\t\t/** selects the wedge at the centre, in the toolbar above the chart */\n\t\tselectFocus: any\n\t}\n\trenderer: SunburstRenderer\n\ttwLst: any[] = []\n\tgroupFilter?: Filter\n\t/** selected wedges by node id, in selection order */\n\tselected: Map<string, HNode> = new Map()\n\t/** note shown in the selection card after a group is created */\n\tcreatedNote = ''\n\t/** the counted unit, from the server */\n\tunit = { one: 'sample', many: 'samples' }\n\t/** number of the latest update(), so that the response of an earlier one that arrives later is dropped */\n\tupdateId = 0\n\tbeforeLaunch?: () => Promise<any> | void\n\t/** whether the available data of the selection is shown; a change of the selection hides it */\n\tdataShown = false\n\t/** number of the latest renderData(), so that the response of an earlier one is dropped */\n\tdataId = 0\n\n\tconstructor(opts: SunburstChartOpts) {\n\t\tthis.app = opts.app\n\t\tthis.beforeLaunch = opts.beforeLaunch\n\t\tconst holder = opts.holder\n\t\tconst errdiv = holder.append('div').attr('class', 'sja_errorbar').style('display', 'none')\n\t\tconst loadingDiv = holder.append('div').style('display', 'none').style('padding', '24px').text('Loading ...')\n\t\tconst noteDiv = holder\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.85em')\n\t\t\t.style('color', TEXT_MUTED)\n\t\t\t.style('margin-bottom', '6px')\n\t\tconst chartHolder = holder.append('div').attr('data-testid', 'sjpp-sunburst-chart')\n\t\tthis.renderer = new SunburstRenderer({\n\t\t\tholder: chartHolder,\n\t\t\tunit: this.unit,\n\t\t\trootName: 'All samples',\n\t\t\tstatLabels: [STAT_SAMPLES, STAT_SELECTED],\n\t\t\tpathCard: false,\n\t\t\tgap: opts.gap,\n\t\t\thooks: {\n\t\t\t\tonClick: (d: HNode, event: any) => this.onWedgeClick(d, event),\n\t\t\t\tisSelected: (d: HNode) => this.selected.has(d.data.id),\n\t\t\t\tcursor: (d: HNode) => (d.children ? 'zoom-in' : 'pointer'),\n\t\t\t\ttooltip: (d: HNode, box: any) => this.tooltip(d, box),\n\t\t\t\tonFocus: () => {\n\t\t\t\t\tthis.renderStats()\n\t\t\t\t\tthis.renderSidebar()\n\t\t\t\t\tthis.renderSelectFocus()\n\t\t\t\t\tthis.markShownRings()\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\tconst rings = card(this.renderer.dom.left, 'Rings')\n\t\trings.body.attr('data-testid', 'sjpp-sunburst-rings')\n\t\tconst selectFocus = this.renderer\n\t\t\t.addControl()\n\t\t\t.attr('data-testid', 'sjpp-sunburst-select-focus')\n\t\t\t.on('click', () => {\n\t\t\t\tconst f = this.renderer.focus\n\t\t\t\tif (f?.depth && !this.selectedAncestor(f)) this.toggle(f)\n\t\t\t})\n\t\tthis.dom = {\n\t\t\terrdiv,\n\t\t\tloadingDiv,\n\t\t\tnoteDiv,\n\t\t\trings,\n\t\t\tsel: card(this.renderer.dom.right, 'Selected wedges'),\n\t\t\tselectFocus\n\t\t}\n\t}\n\n\t/** fetch and draw the counts of the rings; with no rings, an empty chart and `emptyNote`. Resolves true\n\t * when drawn, false when the request failed (the error is shown), and undefined when a later update\n\t * replaced this one, which then has its own outcome */\n\tasync update(arg: SunburstUpdateArg, emptyNote = ''): Promise<boolean | undefined> {\n\t\tconst id = ++this.updateId\n\t\tthis.twLst = arg.twLst\n\t\tthis.groupFilter = arg.groupFilter\n\t\tthis.dom.errdiv.style('display', 'none')\n\t\tthis.dom.noteDiv.text('')\n\t\tif (!this.twLst.length) {\n\t\t\t// an earlier update may still be loading; its response is dropped\n\t\t\tthis.dom.loadingDiv.style('display', 'none')\n\t\t\tthis.selected.clear()\n\t\t\tthis.renderer.setTree({ name: this.renderer.opts.rootName, children: [] })\n\t\t\tthis.dom.noteDiv.text(emptyNote)\n\t\t\treturn true\n\t\t}\n\t\ttry {\n\t\t\tthis.dom.loadingDiv.style('display', '')\n\t\t\tconst res = await fetchSunburst({\n\t\t\t\tgenome: arg.genome,\n\t\t\t\tdslabel: arg.dslabel,\n\t\t\t\ttwLst: this.twLst,\n\t\t\t\tfilter: getNormalRoot(arg.termfilter?.filter),\n\t\t\t\tfilter0: arg.termfilter?.filter0\n\t\t\t})\n\t\t\tif (id != this.updateId) return\n\t\t\tthis.dom.loadingDiv.style('display', 'none')\n\t\t\tthis.render(res, arg.colors)\n\t\t\treturn true\n\t\t} catch (e: any) {\n\t\t\tif (id != this.updateId) return\n\t\t\tthis.dom.loadingDiv.style('display', 'none')\n\t\t\tthis.dom.errdiv.style('display', '').text(e?.message || String(e))\n\t\t\tif (e instanceof Error) console.error(e)\n\t\t\treturn false\n\t\t}\n\t}\n\n\trender(res: SunburstResponse, colors?: { [key: string]: string }) {\n\t\tthis.setUnit(res.unit || { one: 'sample', many: 'samples' })\n\t\tif (res.noFirstRingValue) {\n\t\t\tconst n = res.noFirstRingValue\n\t\t\tthis.dom.noteDiv.text(\n\t\t\t\t`${n.toLocaleString()} ${n == 1 ? this.unit.one : this.unit.many} with ${noValue(this.twLst[0])} ${\n\t\t\t\t\tn == 1 ? 'is' : 'are'\n\t\t\t\t} not shown.`\n\t\t\t)\n\t\t}\n\t\tconst focusId = this.renderer.focus?.data.id\n\t\tconst selectedIds = [...this.selected.keys()]\n\t\tthis.renderer.setTree(buildTermTree(res, this.twLst, this.renderer.opts.rootName, colors))\n\t\t// keep the selection and the centre of a re-fetch (e.g. after a filter change) where their\n\t\t// wedges still exist\n\t\tconst byId = new Map(this.renderer.root.descendants().map((d: HNode) => [d.data.id, d]))\n\t\tthis.selected = new Map(selectedIds.filter(id => byId.has(id)).map(id => [id, byId.get(id)]))\n\t\tthis.renderer.refresh()\n\t\tconst focus = focusId && byId.get(focusId)\n\t\tif (focus?.children) this.renderer.zoomTo(focus)\n\t\telse this.renderSidebar()\n\t}\n\n\t/** wording of the counted unit: centre, stat box titles, tooltip and the create-group action */\n\tsetUnit(unit: { one: string; many: string }) {\n\t\tthis.unit = unit\n\t\tthis.renderer.opts.unit = unit\n\t\tthis.renderer.opts.rootName = `All ${unit.many}`\n\t\tthis.renderer.setStatTitle(STAT_SAMPLES, capitalizeFirstLetter(unit.many))\n\t\tthis.renderer.setStatTitle(STAT_SELECTED, `Selected ${unit.many}`)\n\t}\n\n\t/** SELECT above the chart, for the wedge at the centre (which cannot be clicked) */\n\trenderSelectFocus() {\n\t\tconst f = this.renderer.focus\n\t\tconst el = this.dom.selectFocus\n\t\tif (!f?.depth) {\n\t\t\tel.style('display', 'none')\n\t\t\treturn\n\t\t}\n\t\tconst anc = this.selectedAncestor(f)\n\t\tconst on = this.selected.has(f.data.id)\n\t\tel.style('display', '')\n\t\t\t.style('opacity', anc ? 0.35 : 1)\n\t\t\t.style('cursor', anc ? 'default' : 'pointer')\n\t\t\t.style('color', on ? SELECT_STROKE : TEXT_MUTED)\n\t\t\t.attr('title', anc ? `Included in the selected ${anc.data.name}` : null)\n\t\t\t.html(\n\t\t\t\ton\n\t\t\t\t\t? `${icon('<polyline points=\"5 12 10 17 19 7\"/>')}SELECTED \u00B7 ${escapeHtml(f.data.name.toUpperCase())}`\n\t\t\t\t\t: `${icon('<circle cx=\"12\" cy=\"12\" r=\"9\"/><path d=\"M12 8v8M8 12h8\"/>')}SELECT ${escapeHtml(\n\t\t\t\t\t\t\tf.data.name.toUpperCase()\n\t\t\t\t\t )}`\n\t\t\t)\n\t}\n\n\t/************ rings box ************/\n\n\t/** a line of the Rings box, indented by its ring, with an elbow from the line above */\n\tringRow(level: number) {\n\t\tconst row = this.dom.rings.body\n\t\t\t.append('div')\n\t\t\t.style('position', 'relative')\n\t\t\t.style('margin', '2px 0')\n\t\t\t.style('margin-left', `${level * RING_STEP}px`)\n\t\tif (level) {\n\t\t\trow\n\t\t\t\t.append('div')\n\t\t\t\t.style('position', 'absolute')\n\t\t\t\t.style('left', `${-RING_STEP + 4}px`)\n\t\t\t\t.style('top', '-6px')\n\t\t\t\t.style('width', `${RING_STEP - 6}px`)\n\t\t\t\t.style('height', '18px')\n\t\t\t\t.style('border-left', `1px solid ${RING_LINE}`)\n\t\t\t\t.style('border-bottom', `1px solid ${RING_LINE}`)\n\t\t\t\t.style('border-bottom-left-radius', '4px')\n\t\t}\n\t\treturn row\n\t}\n\n\t/** the line of ring i: its number, which is marked while the ring is in the chart (markShownRings),\n\t * then a slot for the caller's term pill or name */\n\tringLine(i: number) {\n\t\tconst row = this.ringRow(i)\n\t\t\t.attr('class', 'sjpp-sunburst-ring')\n\t\t\t.style('display', 'flex')\n\t\t\t.style('align-items', 'center')\n\t\t\t.style('gap', '4px')\n\t\trow\n\t\t\t.append('span')\n\t\t\t.attr('class', 'sjpp-sunburst-ringnum')\n\t\t\t.style('font-size', '.8em')\n\t\t\t.style('width', '14px')\n\t\t\t.style('flex', '0 0 auto')\n\t\t\t.style('padding-left', '4px')\n\t\t\t.style('border-left', '3px solid transparent')\n\t\t\t.style('border-radius', '2px')\n\t\t\t.text(i + 1)\n\t\treturn row\n\t}\n\n\t/** mark the two rings around the current centre: a bar beside the ring number, which is bold */\n\tmarkShownRings() {\n\t\tconst first = this.renderer.focus?.depth || 0\n\t\tconst shown = (i: number) => i == first || i == first + 1\n\t\tthis.dom.rings.body\n\t\t\t.selectAll('.sjpp-sunburst-ring')\n\t\t\t.attr('title', (_: any, i: number) => (shown(i) ? 'Shown in the chart' : null))\n\t\t\t.select('.sjpp-sunburst-ringnum')\n\t\t\t.style('border-left-color', (_: any, i: number) => (shown(i) ? LINK : 'transparent'))\n\t\t\t.style('color', (_: any, i: number) => (shown(i) ? TEXT_DARK : TEXT_MUTED))\n\t\t\t.style('font-weight', (_: any, i: number) => (shown(i) ? 'bold' : 'normal'))\n\t}\n\n\t/************ selection ************/\n\n\t/** the selected ancestor that already contains a wedge, if any */\n\tselectedAncestor(d: HNode): HNode | undefined {\n\t\tfor (let a = d.parent; a?.depth; a = a.parent) if (this.selected.has(a.data.id)) return a\n\t}\n\n\ttoggle(d: HNode) {\n\t\tif (!d.depth) return\n\t\tconst id = d.data.id\n\t\tthis.createdNote = ''\n\t\tif (this.selected.has(id)) this.selected.delete(id)\n\t\telse {\n\t\t\tif (this.selectedAncestor(d)) return // already in the selection; the tooltip says so\n\t\t\t// a selected wedge contains its descendants, so drop any that were selected\n\t\t\tfor (const [k, n] of this.selected) if (n.ancestors().includes(d)) this.selected.delete(k)\n\t\t\tthis.selected.set(id, d)\n\t\t}\n\t\tthis.refreshSelection()\n\t}\n\n\trefreshSelection() {\n\t\tthis.dataShown = false\n\t\tthis.renderer.refresh()\n\t\tthis.renderStats()\n\t\tthis.renderSidebar()\n\t\tthis.renderSelectFocus()\n\t}\n\n\t/** wedge paths from the first ring, in selection order */\n\tselectedPaths(): TermSunNode[][] {\n\t\treturn [...this.selected.values()].map(\n\t\t\t(d: HNode) =>\n\t\t\t\td\n\t\t\t\t\t.ancestors()\n\t\t\t\t\t.reverse()\n\t\t\t\t\t.slice(1)\n\t\t\t\t\t.map((a: HNode) => a.data) as TermSunNode[]\n\t\t)\n\t}\n\n\tselectedCount(): number {\n\t\tlet n = 0\n\t\tfor (const d of this.selected.values()) n += d.value || 0\n\t\treturn n\n\t}\n\n\trenderStats() {\n\t\tconst r = this.renderer\n\t\tr.setStats(\n\t\t\tnew Map([\n\t\t\t\t[STAT_SAMPLES, r.focus.value || 0],\n\t\t\t\t[STAT_SELECTED, this.selectedCount()]\n\t\t\t])\n\t\t)\n\t}\n\n\t/************ interaction ************/\n\n\tonWedgeClick(d: HNode, event: any) {\n\t\tif (event?.shiftKey || !d.children) this.toggle(d)\n\t\telse this.renderer.zoomTo(d)\n\t}\n\n\ttooltip(d: HNode, box: any) {\n\t\tconst line = (text: string, color = '#6b7280') => box.append('div').style('color', color).text(text)\n\t\tline(d.data.level)\n\t\tconst total = this.renderer.root.value || 0\n\t\tconst pct = total ? ` (${((100 * (d.value || 0)) / total).toFixed(1)}%)` : ''\n\t\tconst s = box.append('div').style('color', '#374151')\n\t\ts.append('span').text(`${capitalizeFirstLetter(this.unit.many)}: `)\n\t\ts.append('b').text((d.value || 0).toLocaleString())\n\t\ts.append('span').text(pct)\n\t\tconst ended = d.data.value || 0\n\t\tconst next = this.twLst[d.data.ring + 1]\n\t\tif (d.children && ended && next) line(`${ended.toLocaleString()} with ${noValue(next)}`)\n\t\tconst note = (text: string, color: string) =>\n\t\t\tbox.append('div').style('margin-top', '4px').style('color', color).text(text)\n\t\tconst anc = this.selectedAncestor(d)\n\t\tif (anc) note(`Included in the selected ${anc.data.name}`, TEXT_MUTED)\n\t\telse if (this.selected.has(d.data.id))\n\t\t\tnote(d.children ? 'click to zoom in \u00B7 shift-click to deselect' : 'click to deselect', LINK)\n\t\telse note(d.children ? 'click to zoom in \u00B7 shift-click to select' : 'click to select', LINK)\n\t}\n\n\t/** the selected-wedges card: one line per wedge with its path and count, and the create-group\n\t * action as the footer */\n\trenderSidebar() {\n\t\tconst sel = this.dom.sel\n\t\tconst { title, headRight, body } = sel\n\t\theadRight.selectAll('*').remove()\n\t\tbody.selectAll('*').remove()\n\t\theadRight.style('margin-bottom', '8px')\n\t\tconst n = this.selected.size\n\t\ttitle.text(n ? 'Selected wedges' : 'No wedges selected')\n\t\tif (n) {\n\t\t\tpill(headRight).text(n)\n\t\t\theadRight\n\t\t\t\t.append('span')\n\t\t\t\t.style('font-size', '11px')\n\t\t\t\t.style('color', LINK)\n\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t.text('Clear')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tthis.selected.clear()\n\t\t\t\t\tthis.refreshSelection()\n\t\t\t\t})\n\t\t}\n\t\tconst list = body\n\t\t\t.append('div')\n\t\t\t.style('max-height', `${SIZE - 200}px`)\n\t\t\t.style('overflow-y', 'auto')\n\t\tif (!n) {\n\t\t\tlist\n\t\t\t\t.append('div')\n\t\t\t\t.style('font-size', '0.85em')\n\t\t\t\t.style('color', TEXT_MUTED)\n\t\t\t\t.style('padding', '4px 0')\n\t\t\t\t.text('Shift-click a wedge, click an outermost one, or zoom into one and click SELECT above the chart.')\n\t\t}\n\t\tfor (const [id, d] of this.selected) {\n\t\t\tconst path = d\n\t\t\t\t.ancestors()\n\t\t\t\t.reverse()\n\t\t\t\t.slice(1)\n\t\t\t\t.map((a: HNode) => a.data.name)\n\t\t\tconst row = list\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'flex')\n\t\t\t\t.style('align-items', 'center')\n\t\t\t\t.style('gap', '8px')\n\t\t\t\t.style('padding', '3px 6px')\n\t\t\t\t.style('margin', '2px 0')\n\t\t\t\t.style('border-radius', '6px')\n\t\t\t\t.on('mouseenter', (event: any) => {\n\t\t\t\t\tselect(event.currentTarget).style('background', '#f3f4f6').select('.sjpp-sunburst-remove').style('opacity', 1)\n\t\t\t\t})\n\t\t\t\t.on('mouseleave', (event: any) => {\n\t\t\t\t\tselect(event.currentTarget)\n\t\t\t\t\t\t.style('background', 'transparent')\n\t\t\t\t\t\t.select('.sjpp-sunburst-remove')\n\t\t\t\t\t\t.style('opacity', 0)\n\t\t\t\t})\n\t\t\tbadge(row, d.data.name, this.renderer.color(d), 24)\n\t\t\tconst text = row.append('div').style('flex', '1 1 auto').style('min-width', '0').style('line-height', '1.2')\n\t\t\ttext\n\t\t\t\t.append('div')\n\t\t\t\t.style('font-size', '0.9em')\n\t\t\t\t.style('color', TEXT_DARK)\n\t\t\t\t.style('overflow', 'hidden')\n\t\t\t\t.style('text-overflow', 'ellipsis')\n\t\t\t\t.style('white-space', 'nowrap')\n\t\t\t\t.attr('title', path.join(' \u203A '))\n\t\t\t\t.text(path.join(' \u203A '))\n\t\t\ttext\n\t\t\t\t.append('div')\n\t\t\t\t.style('font-size', '0.7em')\n\t\t\t\t.style('color', '#6b7280')\n\t\t\t\t.text(this.renderer.unitText(d.value || 0))\n\t\t\trow\n\t\t\t\t.append('span')\n\t\t\t\t.attr('class', 'sjpp-sunburst-remove')\n\t\t\t\t.style('opacity', 0)\n\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t.style('color', '#9ca3af')\n\t\t\t\t.style('font-size', '0.85em')\n\t\t\t\t.attr('title', 'Remove')\n\t\t\t\t.text('\u2715')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tthis.selected.delete(id)\n\t\t\t\t\tthis.refreshSelection()\n\t\t\t\t})\n\t\t}\n\n\t\tconst count = this.selectedCount()\n\t\tif (n) void this.renderData(body, count)\n\n\t\tconst footer = body\n\t\t\t.append('div')\n\t\t\t.style('margin-top', '10px')\n\t\t\t.style('padding-top', '10px')\n\t\t\t.style('border-top', `1px solid ${RULE}`)\n\t\tpill(footer, { button: true })\n\t\t\t.attr('data-testid', 'sjpp-sunburst-create-group')\n\t\t\t.property('disabled', n === 0)\n\t\t\t.style('opacity', n ? 1 : 0.3)\n\t\t\t.style('cursor', n ? 'pointer' : 'default')\n\t\t\t.text(n ? `Create group of ${this.renderer.unitText(count)}` : 'Create group')\n\t\t\t.on('click', () => this.createGroup())\n\t\tif (this.createdNote) {\n\t\t\tfooter\n\t\t\t\t.append('div')\n\t\t\t\t.style('font-size', '0.8em')\n\t\t\t\t.style('color', TEXT_MUTED)\n\t\t\t\t.style('margin-top', '6px')\n\t\t\t\t.text(this.createdNote)\n\t\t}\n\t}\n\n\t/** \"Show available data\", then how many of the selected samples have each kind of data of the dataset;\n\t * a kind with a plot of the selected samples opens it */\n\tasync renderData(body: any, count: number) {\n\t\tconst div = body\n\t\t\t.append('div')\n\t\t\t.attr('data-testid', 'sjpp-sunburst-group-data')\n\t\t\t.style('margin-top', '10px')\n\t\t\t.style('padding-top', '10px')\n\t\t\t.style('border-top', `1px solid ${RULE}`)\n\t\tif (!this.dataShown) {\n\t\t\tpill(div, { button: true })\n\t\t\t\t.attr('data-testid', 'sjpp-sunburst-show-data')\n\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t.text('Show available data')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tthis.dataShown = true\n\t\t\t\t\tthis.renderSidebar()\n\t\t\t\t})\n\t\t\treturn\n\t\t}\n\t\tconst id = ++this.dataId\n\t\tconst head = div\n\t\t\t.append('div')\n\t\t\t.style('display', 'flex')\n\t\t\t.style('justify-content', 'space-between')\n\t\t\t.style('align-items', 'center')\n\t\t\t.style('gap', '8px')\n\t\t\t.style('margin-bottom', '6px')\n\t\thead\n\t\t\t.append('span')\n\t\t\t.attr('data-testid', 'sjpp-sunburst-data-title')\n\t\t\t.style('white-space', 'nowrap')\n\t\t\t.style('font-size', '0.95em')\n\t\t\t.style('font-weight', 600)\n\t\t\t.style('color', TEXT_DARK)\n\t\t\t.text(capitalizeFirstLetter(this.renderer.unitText(count)))\n\t\t// back to the button\n\t\thead\n\t\t\t.append('button')\n\t\t\t.attr('data-testid', 'sjpp-sunburst-hide-data')\n\t\t\t.style('flex', '0 0 auto')\n\t\t\t.style('font-size', '11px')\n\t\t\t.style('padding', '1px 10px')\n\t\t\t.style('border', `1px solid ${RULE}`)\n\t\t\t.style('border-radius', '10px')\n\t\t\t.style('background', 'white')\n\t\t\t.style('color', LINK)\n\t\t\t.style('cursor', 'pointer')\n\t\t\t.text('Hide \u25B4')\n\t\t\t.on('click', () => this.hideData())\n\t\tconst list = div.append('div').text('Loading ...').style('font-size', '0.85em').style('color', TEXT_MUTED)\n\t\ttry {\n\t\t\tconst appState = this.app.getState()\n\t\t\tconst termfilter = appState.termfilter || {}\n\t\t\tconst filter = filterJoin([this.plotFilter(), termfilter.filter].filter(f => f?.lst?.length))\n\t\t\tconst groups = [{ name: 'selection', filter }]\n\t\t\tconst res = await fetchDataAvailability(\n\t\t\t\tthis.app.vocabApi,\n\t\t\t\tgroups,\n\t\t\t\ttermfilter.filter0,\n\t\t\t\tgetActiveCohortStr(appState)\n\t\t\t)\n\t\t\tif (id != this.dataId) return\n\t\t\tlist.text('').style('color', null)\n\t\t\t// differential expression compares groups, and the selection is one\n\t\t\tconst sections = availabilitySections(res, ['rnaseqGeneCount'])\n\t\t\tif (!sections.length) {\n\t\t\t\tlist.style('color', TEXT_MUTED).text(`No data for these ${this.unit.many}`)\n\t\t\t\treturn\n\t\t\t}\n\t\t\tfor (const section of sections) {\n\t\t\t\tif (section.title) {\n\t\t\t\t\tlist\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.attr('data-testid', `sjpp-sunburst-section-${section.key}`)\n\t\t\t\t\t\t.style('margin', '8px 0 2px 0')\n\t\t\t\t\t\t.style('padding', '0 6px')\n\t\t\t\t\t\t.style('font-size', '10px')\n\t\t\t\t\t\t.style('font-weight', 600)\n\t\t\t\t\t\t.style('letter-spacing', '.06em')\n\t\t\t\t\t\t.style('text-transform', 'uppercase')\n\t\t\t\t\t\t.style('color', TEXT_MUTED)\n\t\t\t\t\t\t.text(section.title)\n\t\t\t\t}\n\t\t\t\tfor (const row of section.rows) {\n\t\t\t\t\tconst launch = this.dataPlot(row)\n\t\t\t\t\tthis.dataRow(list, row, !!section.title, launch)\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e: any) {\n\t\t\tif (id != this.dataId) return\n\t\t\tlist.attr('class', 'sja_errorbar').text(e?.message || String(e))\n\t\t}\n\t}\n\n\thideData() {\n\t\tthis.dataShown = false\n\t\t// a response still on its way is not drawn\n\t\tthis.dataId++\n\t\tthis.renderSidebar()\n\t}\n\n\t/** a line of the available data: the kind of data and its count, which opens `launch`, a plot_create config,\n\t * when given; a row of a section is indented under the section's title */\n\tdataRow(list: any, row: AvailabilityRow, inSection: boolean, launch?: any) {\n\t\tconst n = row.counts[0] || 0\n\t\tconst div = list\n\t\t\t.append('div')\n\t\t\t.attr('data-testid', `sjpp-sunburst-data-${row.kind == 'data' ? '' : row.kind + '-'}${row.key}`)\n\t\t\t.style('display', 'flex')\n\t\t\t.style('justify-content', 'space-between')\n\t\t\t.style('gap', '8px')\n\t\t\t.style('padding', `3px 6px 3px ${inSection ? 16 : 6}px`)\n\t\t\t.style('margin', '1px 0')\n\t\t\t.style('border-radius', '6px')\n\t\t\t.style('color', TEXT_DARK)\n\t\tdiv.append('span').text(row.label)\n\t\tdiv\n\t\t\t.append('span')\n\t\t\t.style('white-space', 'nowrap')\n\t\t\t.style('color', launch ? LINK : null)\n\t\t\t.text(`${n.toLocaleString()}${row.unit ? ' ' + row.unit : ''}${launch ? ' \u203A' : ''}`)\n\t\tif (!launch) return\n\t\tdiv\n\t\t\t.attr('role', 'button')\n\t\t\t.attr('tabindex', 0)\n\t\t\t.attr('title', `Open the ${row.label} of these ${this.unit.many}`)\n\t\t\t.style('cursor', 'pointer')\n\t\t\t.on('mouseenter', (event: any) => select(event.currentTarget).style('background', '#f3f4f6'))\n\t\t\t.on('mouseleave', (event: any) => select(event.currentTarget).style('background', 'transparent'))\n\t\t\t.on('click', () => this.launchPlot(launch))\n\t\t\t.on('keydown', (event: KeyboardEvent) => {\n\t\t\t\tif (event.key == 'Enter' || event.key == ' ') {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tthis.launchPlot(launch)\n\t\t\t\t}\n\t\t\t})\n\t}\n\n\t/** the filter of the selected samples: the selection with the plot's own filter. A plot that is given it as\n\t * its own filter joins the global filter to it */\n\tplotFilter(): Filter {\n\t\tconst filters = [selectionFilter(this.selectedPaths(), this.twLst), this.groupFilter]\n\t\treturn filterJoin(filters.filter(f => f?.lst?.length)) as Filter\n\t}\n\n\t/** the plot of the selected samples for a row of the available data, as a plot_create config; undefined\n\t * when the row has no plot of its own */\n\tdataPlot(row: AvailabilityRow): any {\n\t\tconst filter = this.plotFilter()\n\t\tconst q = this.app.vocabApi.termdbConfig?.queries || {}\n\t\t// the mutations of the selected samples, in the genome browser after a gene is entered\n\t\tif (row.kind == 'assay')\n\t\t\treturn q.snvindel || q.svfusion || q.cnv\n\t\t\t\t? {\n\t\t\t\t\t\tchartType: 'genomeBrowser',\n\t\t\t\t\t\tfilter,\n\t\t\t\t\t\t/* the mutation track shown, which the genome browser hides by default when the dataset also has\n\t\t\t\t\t\ttrackLst. The query is copied as the browser's config replaces it, not merged */\n\t\t\t\t\t\t...(q.snvindel ? { snvindel: { ...structuredClone(q.snvindel), shown: true } } : {})\n\t\t\t\t }\n\t\t\t\t: undefined\n\t\t// the survival curve of the selected samples\n\t\tif (row.kind == 'survival') return { chartType: 'survival', term: { id: row.key }, filter }\n\t\t// the input form of expression plots; each plot it opens has the filter\n\t\tif (row.key == 'geneExpression')\n\t\t\treturn { chartType: 'GeneExpInput', termType: TermTypes.GENE_EXPRESSION, spawnConfig: { filter } }\n\t\t// the term search, whose DNA methylation tab lists methylation terms; a term opens its summary with the filter\n\t\tif (row.key == 'dnaMethylation') return { chartType: 'dictionary', spawnConfig: { filter } }\n\t\t// the table of the imaging samples that pass the filter, to render on a brain template\n\t\tif (row.key == 'NIdata') return { chartType: 'brainImaging', filter }\n\t\t// the lanes of the patients of the selected samples\n\t\tif (row.key == 'longitudinal') return { chartType: 'swimmer', filter }\n\t}\n\n\tasync launchPlot(config: any) {\n\t\ttry {\n\t\t\tawait this.beforeLaunch?.()\n\t\t\tawait this.app.dispatch({ type: 'plot_create', config })\n\t\t} catch (e: any) {\n\t\t\tthis.dom.errdiv.style('display', '').text(e?.message || String(e))\n\t\t}\n\t}\n\n\t/** one group of the union of the selected wedges, added to the GROUPS tab; the group also has the\n\t * plot's own filter, which the counts are of. The global filter is joined where the group is used */\n\tcreateGroup() {\n\t\tconst paths = this.selectedPaths()\n\t\tif (!paths.length) return\n\t\ttry {\n\t\t\tconst name = selectionName(paths)\n\t\t\tconst groups = this.app.getState().groups || []\n\t\t\tconst filter = getGroupFilterOfConditions([this.groupFilter, selectionFilter(paths, this.twLst)])\n\t\t\taddNewGroup(this.app, filter, groups, name)\n\t\t\tthis.selected.clear()\n\t\t\tthis.createdNote = `Group \"${name}\" added; find it in the GROUPS tab.`\n\t\t\tthis.refreshSelection()\n\t\t} catch (e: any) {\n\t\t\tthis.dom.errdiv.style('display', '').text(e?.message || String(e))\n\t\t}\n\t}\n\n\tdestroy() {\n\t\tthis.renderer?.destroy()\n\t}\n}\n\n/** why a sample is not in a ring: \"no X value\", or \"no or a hidden X value\" when the ring hides some\n * categories (tw.q.hiddenValues), which the server treats as missing. The term's uncomputable values,\n * which fillTermWrapper puts in hiddenValues by default, are missing values anyway, so they do not count */\nfunction noValue(tw: any): string {\n\tconst values = tw.term.values || {}\n\tconst hidden = Object.keys(tw.q?.hiddenValues || {}).some(k => !values[k]?.uncomputable)\n\treturn `no ${hidden ? 'or a hidden ' : ''}${tw.term.name} value`\n}\n\n/** termdb/sunburst request; errors are thrown */\nasync function fetchSunburst(body: SunburstRequest): Promise<SunburstResponse> {\n\tconst res: any = await dofetch3('termdb/sunburst', { body })\n\tif (res?.error) throw res.error\n\tif (!res?.nodes) throw 'invalid response from termdb/sunburst'\n\treturn res\n}\n", "import { getCompInit, copyMerge, type RxComponent, type ComponentApi } from '#rx'\nimport { PlotBase } from '#plots/PlotBase.ts'\nimport { getCombinedTermFilter } from '#filter'\nimport { fillTermWrapper, termsettingInit } from '#termsetting'\nimport { SunburstChart } from './SunburstChart'\nimport { allowedSampleTypes } from './sunburst.data'\n\n/*\nSunburst of nested sample counts, one dictionary term per ring (categorical, or numeric binned),\ninside out. The dataset sets the default rings (termdb.sunburst.twLst); the Rings box left of the\nchart switches, edits, adds and removes them (from each term pill's menu). Counts follow the\nglobal and plot filters.\n\nThe chart itself, its wedge selection and the sample group made from it are in SunburstChart.ts, which\nthe About tab also uses.\n\nIn a dataset with a sample hierarchy, the rings are patient terms and the terms of one sample type (no\nvalue maps between sibling types such as primary and PDX samples): once a ring is of a sample type, the\npickers offer only terms of its line of descent. The server returns the counted unit (e.g. patients,\nprimary samples), which the chart's wording follows.\n*/\n\nclass Sunburst extends PlotBase implements RxComponent {\n\tstatic type = 'sunburst'\n\ttype: string\n\tchart!: SunburstChart\n\ttwLst: any[] = []\n\t/** the rings the Rings box shows, to rebuild its pills only when they change */\n\tringsShown = ''\n\t/** the Rings box pills and their main() argument without the filter, which follows the state */\n\tringPills: { pill: any; arg: any }[] = []\n\n\tconstructor(opts: any, api: ComponentApi) {\n\t\tsuper(opts, api)\n\t\tthis.type = Sunburst.type\n\t\tif (this.opts.header)\n\t\t\tthis.opts.header.style('padding-left', '7px').style('color', 'rgb(85, 85, 85)').html('Sunburst')\n\t}\n\n\tgetState(appState: any) {\n\t\tconst config = appState.plots.find((p: any) => p.id === this.id)\n\t\tif (!config) throw `No plot with id='${this.id}' found`\n\t\treturn {\n\t\t\tconfig,\n\t\t\t// global mass filter combined with this plot's local filter\n\t\t\ttermfilter: getCombinedTermFilter(appState, config.filter),\n\t\t\tgenome: appState.vocab.genome,\n\t\t\tdslabel: appState.vocab.dslabel,\n\t\t\tsunburst: appState.termdbConfig?.sunburst || {}\n\t\t}\n\t}\n\n\tasync init() {\n\t\t// the plot holder inherits nowrap from the sandbox; the cards need their text to wrap\n\t\tconst holder = this.opts.holder\n\t\t\t.append('div')\n\t\t\t.attr('data-testid', 'sjpp-sunburst-holder')\n\t\t\t.style('white-space', 'normal')\n\t\t\t.style('padding', '10px')\n\t\tthis.chart = new SunburstChart({ holder, app: this.app })\n\t\t// a ring pill is only the term: termsetting's info button (its holder's 4th child) is hidden\n\t\tthis.chart.dom.rings.box\n\t\t\t.append('style')\n\t\t\t.text('.sjpp-sunburst-ringpill > div:nth-child(4) { display: none !important; }')\n\t}\n\n\tasync main() {\n\t\tconst config = this.state.config\n\t\tthis.twLst = config.twLst || []\n\t\tawait this.renderRings()\n\t\tawait this.chart.update(\n\t\t\t{\n\t\t\t\tgenome: this.state.genome,\n\t\t\t\tdslabel: this.state.dslabel,\n\t\t\t\ttwLst: this.twLst,\n\t\t\t\ttermfilter: this.state.termfilter,\n\t\t\t\tgroupFilter: config.filter,\n\t\t\t\tcolors: this.state.sunburst.colors\n\t\t\t},\n\t\t\t'Add a ring in the Rings box to draw the sunburst.'\n\t\t)\n\t}\n\n\t/************ rings box ************/\n\n\t/** one line per ring: its number and a term pill, whose menu switches, edits or removes the\n\t * term; then + Add ring. Rebuilt only when the rings change; otherwise the pills get the current\n\t * filter, which their term pickers use */\n\tasync renderRings() {\n\t\tconst twLst = this.twLst\n\t\tconst filter = this.state.termfilter?.filter\n\t\tconst sig = JSON.stringify(twLst.map(tw => [tw.$id, tw.q]))\n\t\tif (sig == this.ringsShown) {\n\t\t\tawait Promise.all(this.ringPills.map(({ pill, arg }) => pill.main({ ...arg, filter })))\n\t\t\treturn\n\t\t}\n\t\tthis.ringsShown = sig\n\t\tthis.ringPills = []\n\t\tthis.chart.dom.rings.body.selectAll('*').remove()\n\t\tconst disable_terms = twLst.map(tw => tw.term)\n\t\tconst sampleTypes = this.app.vocabApi.termdbConfig?.sampleTypes\n\t\tconst edit = (lst: any[]) => this.app.dispatch({ type: 'plot_edit', id: this.id, config: { twLst: lst } })\n\t\tfor (const [i, tw] of twLst.entries()) {\n\t\t\tconst pillDiv = this.chart\n\t\t\t\t.ringLine(i)\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sjpp-sunburst-ringpill')\n\t\t\t\t.style('min-width', '0')\n\t\t\t\t.style('overflow', 'hidden')\n\t\t\t\t.style('white-space', 'nowrap')\n\t\t\t\t.style('font-size', '.9em')\n\t\t\t\t.style('text-overflow', 'ellipsis')\n\t\t\t\t.attr('title', tw.term.name)\n\t\t\tconst others = twLst.filter((_, j) => j != i)\n\t\t\tconst p = await this.ringPill(\n\t\t\t\tpillDiv,\n\t\t\t\tnewTw => {\n\t\t\t\t\tconst lst = twLst.slice()\n\t\t\t\t\tif (newTw?.term) lst[i] = newTw\n\t\t\t\t\telse lst.splice(i, 1)\n\t\t\t\t\tedit(lst)\n\t\t\t\t},\n\t\t\t\tallowedSampleTypes(others, sampleTypes)\n\t\t\t)\n\t\t\tthis.ringPills.push({ pill: p, arg: { term: tw.term, q: tw.q, $id: tw.$id, disable_terms } })\n\t\t}\n\t\tconst addDiv = this.chart\n\t\t\t.ringRow(twLst.length)\n\t\t\t.style('margin-top', '6px')\n\t\t\t.append('div')\n\t\t\t.style('margin-left', '21px')\n\t\tconst add = await this.ringPill(\n\t\t\taddDiv,\n\t\t\tnewTw => {\n\t\t\t\tif (newTw?.term) edit([...twLst, newTw])\n\t\t\t},\n\t\t\tallowedSampleTypes(twLst, sampleTypes),\n\t\t\t'+ Add ring'\n\t\t)\n\t\tthis.ringPills.push({ pill: add, arg: { term: null, q: null, disable_terms } })\n\t\tawait Promise.all(this.ringPills.map(({ pill, arg }) => pill.main({ ...arg, filter })))\n\t\tthis.chart.markShownRings()\n\t}\n\n\t/** a ring term pill; `sampleTypes` limits the terms it offers (see allowedSampleTypes) */\n\tasync ringPill(holder: any, callback: (tw: any) => void, sampleTypes?: number[], placeholder?: string) {\n\t\treturn await termsettingInit({\n\t\t\tholder,\n\t\t\tvocabApi: this.app.vocabApi,\n\t\t\tusecase: { target: 'sunburst', ...(sampleTypes ? { sampleTypes } : {}) },\n\t\t\t// the full term name; a name too long for the box is clipped, with the name as its tooltip\n\t\t\tabbrCutoff: 1000,\n\t\t\tmenuOptions: '*',\n\t\t\tnumericEditMenuVersion: ['discrete'],\n\t\t\tdefaultQ4fillTW: { numeric: { mode: 'discrete' } },\n\t\t\t...(placeholder ? { placeholder } : {}),\n\t\t\tdebug: this.app.opts.debug,\n\t\t\tcallback\n\t\t})\n\t}\n\n\tdestroy() {\n\t\tthis.chart?.destroy()\n\t}\n}\n\n/** the plot config, with the dataset's default rings unless `opts` gives its own; also used by the\n * About tab for the same rings */\nexport async function getPlotConfig(opts: any, app: any) {\n\tconst config: any = {\n\t\tchartType: 'sunburst',\n\t\tsettings: {}\n\t}\n\tcopyMerge(config, opts)\n\t// default rings from the dataset; a saved session or another chart may give its own\n\tif (!config.twLst) config.twLst = structuredClone(app.vocabApi.termdbConfig?.sunburst?.twLst || [])\n\tconfig.twLst = await Promise.all(\n\t\tconfig.twLst.map((tw: any) => fillTermWrapper(tw, app.vocabApi, { numeric: { mode: 'discrete' } } as any))\n\t)\n\treturn config\n}\n\nexport const sunburstInit = getCompInit(Sunburst)\n// this alias will allow abstracted dynamic imports\nexport const componentInit = sunburstInit\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["pill"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,480 @@
|
|
|
1
|
+
import {
|
|
2
|
+
renderTable
|
|
3
|
+
} from "./chunk-ZIMAIUZD.js";
|
|
4
|
+
import {
|
|
5
|
+
clusterMethodLst,
|
|
6
|
+
distanceMethodLst
|
|
7
|
+
} from "./chunk-ZUXXBQ7D.js";
|
|
8
|
+
import {
|
|
9
|
+
termType2label
|
|
10
|
+
} from "./chunk-5FD6NRGE.js";
|
|
11
|
+
import {
|
|
12
|
+
select_default
|
|
13
|
+
} from "./chunk-I6Y4O3RR.js";
|
|
14
|
+
import {
|
|
15
|
+
__export
|
|
16
|
+
} from "./chunk-HS5PO5ZQ.js";
|
|
17
|
+
|
|
18
|
+
// plots/matrix/hierCluster.interactivity.js
|
|
19
|
+
var hierCluster_interactivity_exports = {};
|
|
20
|
+
__export(hierCluster_interactivity_exports, {
|
|
21
|
+
addSelectedRowsOptions: () => addSelectedRowsOptions,
|
|
22
|
+
addSelectedSamplesOptions: () => addSelectedSamplesOptions,
|
|
23
|
+
getAllChildrenClusterIds: () => getAllChildrenClusterIds,
|
|
24
|
+
getClusterFromLeftDendrogram: () => getClusterFromLeftDendrogram,
|
|
25
|
+
getClusterFromTopDendrogram: () => getClusterFromTopDendrogram,
|
|
26
|
+
setClusteringBtn: () => setClusteringBtn,
|
|
27
|
+
showTable4selectedRows: () => showTable4selectedRows,
|
|
28
|
+
showTable4selectedSamples: () => showTable4selectedSamples,
|
|
29
|
+
triggerZoomBranch: () => triggerZoomBranch
|
|
30
|
+
});
|
|
31
|
+
function getAllChildrenClusterIds(clickedClusterId, left) {
|
|
32
|
+
const mergedClusters = left ? this.hierClusterData.clustering.row.mergedClusters : this.hierClusterData.clustering.col.mergedClusters;
|
|
33
|
+
const children = mergedClusters.get(clickedClusterId).childrenClusters || [];
|
|
34
|
+
let allChildren = [...children];
|
|
35
|
+
for (const child of children) {
|
|
36
|
+
allChildren = allChildren.concat(this.getAllChildrenClusterIds(child, left));
|
|
37
|
+
}
|
|
38
|
+
return allChildren;
|
|
39
|
+
}
|
|
40
|
+
function addSelectedSamplesOptions(clickedSampleNames, event) {
|
|
41
|
+
const l = this.settings.matrix.controlLabels;
|
|
42
|
+
const ss = this.opts.allow2selectSamples;
|
|
43
|
+
const optionArr = [
|
|
44
|
+
{
|
|
45
|
+
label: "Zoom in",
|
|
46
|
+
callback: () => {
|
|
47
|
+
this.triggerZoomBranch(this, clickedSampleNames);
|
|
48
|
+
}
|
|
49
|
+
},
|
|
50
|
+
{
|
|
51
|
+
label: `List ${clickedSampleNames.length} ${l.samples}`,
|
|
52
|
+
callback: () => this.showTable4selectedSamples(clickedSampleNames)
|
|
53
|
+
}
|
|
54
|
+
];
|
|
55
|
+
if (ss) {
|
|
56
|
+
optionArr.push({
|
|
57
|
+
label: ss.buttonText || `Select ${l.samples}`,
|
|
58
|
+
callback: async () => {
|
|
59
|
+
const samples = clickedSampleNames.map((c) => this.data.samples[c]);
|
|
60
|
+
ss.callback({
|
|
61
|
+
samples: await this.app.vocabApi.convertSampleId(samples, ss.attributes),
|
|
62
|
+
source: ss.defaultSelectionLabel || `Selected ${l.samples} from gene expression`
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
});
|
|
66
|
+
} else {
|
|
67
|
+
if (this.state.nav && this.state.nav.header_mode !== "hidden") {
|
|
68
|
+
const samples = clickedSampleNames.map((c) => this.sampleOrder.find((s) => s.row.sample == c).row);
|
|
69
|
+
for (const s of samples) {
|
|
70
|
+
if (!s.sampleId) s.sampleId = s.sample;
|
|
71
|
+
}
|
|
72
|
+
optionArr.push({
|
|
73
|
+
label: "Add to a group",
|
|
74
|
+
callback: async () => {
|
|
75
|
+
const group = {
|
|
76
|
+
name: "Group",
|
|
77
|
+
items: samples
|
|
78
|
+
};
|
|
79
|
+
this.addGroup(group);
|
|
80
|
+
}
|
|
81
|
+
});
|
|
82
|
+
}
|
|
83
|
+
}
|
|
84
|
+
this.mouseout();
|
|
85
|
+
this.dom.tip.hide();
|
|
86
|
+
this.dom.dendroClickMenu.d.selectAll("*").remove();
|
|
87
|
+
this.dom.dendroClickMenu.d.selectAll("div").data(optionArr).enter().append("div").attr("class", "sja_menuoption").style("border-radius", "0px").html((d) => d.label).attr("data-testid", (d) => `hierCluster_dendro_menu_${d.label.split(" ")[0]}`).on("click", (event2) => {
|
|
88
|
+
this.dom.dendroClickMenu.d.selectAll("*").remove();
|
|
89
|
+
event2.target.__data__.callback();
|
|
90
|
+
});
|
|
91
|
+
this.dom.dendroClickMenu.show(event.clientX, event.clientY);
|
|
92
|
+
}
|
|
93
|
+
function addSelectedRowsOptions(clickedRowNames, event) {
|
|
94
|
+
const rowType = this.config.settings.matrix.controlLabels.terms;
|
|
95
|
+
const optionArr = [
|
|
96
|
+
{
|
|
97
|
+
label: `List ${clickedRowNames.length} ${rowType}`,
|
|
98
|
+
callback: () => this.showTable4selectedRows(clickedRowNames, rowType)
|
|
99
|
+
}
|
|
100
|
+
];
|
|
101
|
+
if (this.config.dataType == "geneExpression" && this.app.opts.genome.termdbs) {
|
|
102
|
+
const minGeneCutoff = this.app.opts.genome.termdbs.msigdb.geneORAparam.minCutoff;
|
|
103
|
+
const maxGeneCutoff = this.app.opts.genome.termdbs.msigdb.geneORAparam.maxCutoff;
|
|
104
|
+
optionArr.push({
|
|
105
|
+
label: `Gene set overrepresentation analysis`,
|
|
106
|
+
disabled: clickedRowNames.length < minGeneCutoff || clickedRowNames.length > maxGeneCutoff,
|
|
107
|
+
callback: () => {
|
|
108
|
+
if (clickedRowNames.length < minGeneCutoff || clickedRowNames.length > maxGeneCutoff) return;
|
|
109
|
+
this.dom.dendroClickMenu.d.selectAll("*").remove();
|
|
110
|
+
const lst = [];
|
|
111
|
+
for (const x of clickedRowNames) {
|
|
112
|
+
const j = this.terms?.find?.((t) => t.tw.$id == x);
|
|
113
|
+
if (j) {
|
|
114
|
+
const n = j.tw?.term?.gene;
|
|
115
|
+
if (n) lst.push(n);
|
|
116
|
+
}
|
|
117
|
+
}
|
|
118
|
+
const config = {
|
|
119
|
+
chartType: "geneORA",
|
|
120
|
+
geneORAparams: {
|
|
121
|
+
sample_genes: lst.join(","),
|
|
122
|
+
genome: this.app.vocabApi.opts.state.vocab.genome
|
|
123
|
+
}
|
|
124
|
+
};
|
|
125
|
+
this.app.dispatch({
|
|
126
|
+
type: "plot_create",
|
|
127
|
+
config
|
|
128
|
+
});
|
|
129
|
+
}
|
|
130
|
+
});
|
|
131
|
+
}
|
|
132
|
+
this.mouseout();
|
|
133
|
+
this.dom.tip.hide();
|
|
134
|
+
this.dom.dendroClickMenu.d.selectAll("*").remove();
|
|
135
|
+
this.dom.dendroClickMenu.d.selectAll("div").data(optionArr).enter().append("div").attr("class", (d) => d.disabled ? "sja_menuoption_not_interactive" : "sja_menuoption").style("opacity", (d) => d.disabled ? 0.5 : 1).style("border-radius", "0px").html(
|
|
136
|
+
(d) => d.disabled ? `${d.label} <span style="font-size: 0.6em; display: block; margin-left: 2px; margin-top: 2px;">Only available when 15 - 500 genes selected</span>` : d.label
|
|
137
|
+
).attr("data-testid", (d) => `hierCluster_dendro_menu_${d.label.split(" ")[0]}`).on("click", (event2) => {
|
|
138
|
+
if (event2.target.__data__?.callback) event2.target.__data__.callback();
|
|
139
|
+
});
|
|
140
|
+
this.dom.dendroClickMenu.show(event.clientX, event.clientY);
|
|
141
|
+
}
|
|
142
|
+
function triggerZoomBranch(self, clickedSampleNames) {
|
|
143
|
+
if (self.zoomArea) {
|
|
144
|
+
self.zoomArea.remove();
|
|
145
|
+
delete self.zoomArea;
|
|
146
|
+
}
|
|
147
|
+
const c = {
|
|
148
|
+
startCell: self.serieses[0].cells.find((d2) => d2.sample == clickedSampleNames[0]),
|
|
149
|
+
endCell: self.serieses[0].cells.find((d2) => d2.sample == clickedSampleNames[clickedSampleNames.length - 1])
|
|
150
|
+
};
|
|
151
|
+
const s = self.settings.matrix;
|
|
152
|
+
const d = self.dimensions;
|
|
153
|
+
const start = c.startCell.totalIndex < c.endCell.totalIndex ? c.startCell : c.endCell;
|
|
154
|
+
const zoomIndex = Math.floor(start.totalIndex + Math.abs(c.endCell.totalIndex - c.startCell.totalIndex) / 2);
|
|
155
|
+
const centerCell = self.sampleOrder[zoomIndex];
|
|
156
|
+
const colw = self.computedSettings.colw || self.settings.matrix.colw;
|
|
157
|
+
const maxZoomLevel = s.colwMax / colw;
|
|
158
|
+
const minZoomLevel = s.colwMin / colw;
|
|
159
|
+
const tentativeZoomLevel = Math.max(
|
|
160
|
+
1,
|
|
161
|
+
s.zoomLevel * d.mainw / Math.max(c.endCell.x - c.startCell.x, 2 * d.colw) * 0.7
|
|
162
|
+
);
|
|
163
|
+
const zoomLevel = Math.max(minZoomLevel, Math.min(tentativeZoomLevel, maxZoomLevel));
|
|
164
|
+
self.app.dispatch({
|
|
165
|
+
type: "plot_edit",
|
|
166
|
+
id: self.id,
|
|
167
|
+
config: {
|
|
168
|
+
settings: {
|
|
169
|
+
matrix: {
|
|
170
|
+
zoomLevel,
|
|
171
|
+
zoomCenterPct: 0.5,
|
|
172
|
+
//zoomLevel < 1 && d.mainw >= d.zoomedMainW ? 0.5 : zoomCenter / d.mainw,
|
|
173
|
+
zoomIndex,
|
|
174
|
+
zoomGrpIndex: centerCell.grpIndex
|
|
175
|
+
}
|
|
176
|
+
}
|
|
177
|
+
}
|
|
178
|
+
});
|
|
179
|
+
self.resetInteractions();
|
|
180
|
+
}
|
|
181
|
+
function showTable4selectedSamples(clickedSampleNames) {
|
|
182
|
+
const templates = this.state.termdbConfig.urlTemplates;
|
|
183
|
+
const rows = templates?.sample ? clickedSampleNames.map((c) => [
|
|
184
|
+
{ value: this.hierClusterData.bySampleId[c].label, url: `${templates.sample.base}${c}` }
|
|
185
|
+
]) : clickedSampleNames.map((c) => [{ value: this.hierClusterData.bySampleId[c].label }]);
|
|
186
|
+
const columns = [{ label: this.settings.matrix.controlLabels.Sample }];
|
|
187
|
+
renderTable({
|
|
188
|
+
rows,
|
|
189
|
+
columns,
|
|
190
|
+
div: this.dom.dendroClickMenu.clear().d.append("div").style("margin", "10px"),
|
|
191
|
+
showLines: true,
|
|
192
|
+
maxHeight: "35vh",
|
|
193
|
+
resize: true
|
|
194
|
+
});
|
|
195
|
+
}
|
|
196
|
+
function showTable4selectedRows(clickedRowNames, rowType) {
|
|
197
|
+
const templates = this.state.termdbConfig.urlTemplates;
|
|
198
|
+
const rows = [];
|
|
199
|
+
if (templates?.gene && this.config.dataType == "geneExpression" && this.hierClusterData.byTermId) {
|
|
200
|
+
for (const i of clickedRowNames) {
|
|
201
|
+
const genesymbol = this.terms.find((t) => t.tw?.$id == i)?.tw?.term?.gene;
|
|
202
|
+
if (!genesymbol) continue;
|
|
203
|
+
const gencode = this.hierClusterData.byTermId[i]?.gencodeId;
|
|
204
|
+
if (gencode) {
|
|
205
|
+
rows.push([{ value: genesymbol, url: `${templates.gene.base}${gencode}` }]);
|
|
206
|
+
} else {
|
|
207
|
+
rows.push([{ value: genesymbol }]);
|
|
208
|
+
}
|
|
209
|
+
}
|
|
210
|
+
} else {
|
|
211
|
+
for (const i of clickedRowNames) {
|
|
212
|
+
const tw = this.terms.find((t) => t.tw?.$id == i)?.tw;
|
|
213
|
+
if (!tw) continue;
|
|
214
|
+
const n = tw.term?.gene || tw.term?.name;
|
|
215
|
+
if (!n) continue;
|
|
216
|
+
rows.push([{ value: n }]);
|
|
217
|
+
}
|
|
218
|
+
}
|
|
219
|
+
const div = this.dom.dendroClickMenu.clear().d.append("div").style("margin", "10px");
|
|
220
|
+
const buttonDiv = div.append("div").style("padding", "5px");
|
|
221
|
+
const copyButton = buttonDiv.append("button").html(`Copy ${rowType}`).attr("class", ".sja_menu_div button").style("margin-top", "2px").style("padding", "5px").on("click", () => {
|
|
222
|
+
const geneNames = rows.map((row) => row[0].value).join("\n");
|
|
223
|
+
navigator.clipboard.writeText(geneNames).then(() => {
|
|
224
|
+
}, console.warn);
|
|
225
|
+
copyButton.html(`Copy ${rowType} ✓`);
|
|
226
|
+
});
|
|
227
|
+
renderTable({
|
|
228
|
+
rows,
|
|
229
|
+
columns: [{ label: rowType }],
|
|
230
|
+
div: div.append("div"),
|
|
231
|
+
showLines: true,
|
|
232
|
+
maxHeight: "35vh",
|
|
233
|
+
resize: true
|
|
234
|
+
});
|
|
235
|
+
}
|
|
236
|
+
function getClusterFromTopDendrogram(event) {
|
|
237
|
+
if (event.target.tagName == "image") this.imgBox = event.target.getBoundingClientRect();
|
|
238
|
+
else return;
|
|
239
|
+
const y = event.clientY - this.imgBox.y - event.target.clientTop;
|
|
240
|
+
const xMin = this.dimensions.xMin;
|
|
241
|
+
const x = event.clientX - this.imgBox.x - event.target.clientLeft + xMin;
|
|
242
|
+
for (const [clusterId, cluster] of this.hierClusterData.clustering.col.mergedClusters) {
|
|
243
|
+
const { x1, y1, x2, y2, clusterY } = cluster.clusterPosition;
|
|
244
|
+
if (x1 <= x && x <= x2 && clusterY - 5 < y && y < clusterY + 5 || clusterY <= y && y <= y1 && x1 - 5 < x && x < x1 + 5 || clusterY <= y && y <= y2 && x2 - 5 < x && x < x2 + 5) {
|
|
245
|
+
return clusterId;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
}
|
|
249
|
+
function getClusterFromLeftDendrogram(event) {
|
|
250
|
+
if (event.target.tagName == "image") this.imgBox = event.target.getBoundingClientRect();
|
|
251
|
+
else return;
|
|
252
|
+
const y = event.clientY - this.imgBox.y - event.target.clientTop;
|
|
253
|
+
const xMin = this.dimensions.xMin;
|
|
254
|
+
const x = event.clientX - this.imgBox.x - event.target.clientLeft + xMin;
|
|
255
|
+
for (const [clusterId, cluster] of this.hierClusterData.clustering.row.mergedClusters) {
|
|
256
|
+
const { x1, y1, x2, y2, clusterX } = cluster.clusterPosition;
|
|
257
|
+
if (y1 <= y && y <= y2 && clusterX - 5 < x && x < clusterX + 5 || clusterX <= x && x <= x1 && y1 - 5 < y && y < y1 + 5 || clusterX <= x && x <= x2 && y2 - 5 < y && y < y2 + 5) {
|
|
258
|
+
return clusterId;
|
|
259
|
+
}
|
|
260
|
+
}
|
|
261
|
+
}
|
|
262
|
+
function setClusteringBtn(holder, callback) {
|
|
263
|
+
const cl = this.config.settings.matrix.controlLabels;
|
|
264
|
+
const dataType = this.config.dataType;
|
|
265
|
+
const clusterRowLabel = cl.Terms;
|
|
266
|
+
const cluteringButtonLabel = `${termType2label(dataType)} Clustering`;
|
|
267
|
+
holder.append("button").datum({
|
|
268
|
+
label: cluteringButtonLabel,
|
|
269
|
+
getCount: () => this.hcTermGroup?.lst.length || 0,
|
|
270
|
+
showCount: "hide",
|
|
271
|
+
rows: [
|
|
272
|
+
{
|
|
273
|
+
label: `Cluster ${cl.Samples}`,
|
|
274
|
+
title: `Option to enable ${cl.samples} clustering, instead of enabling ${cl.samples} sorting.`,
|
|
275
|
+
type: "checkbox",
|
|
276
|
+
chartType: "hierCluster",
|
|
277
|
+
settingsKey: "clusterSamples",
|
|
278
|
+
boxLabel: `Cluster ${cl.Samples} (Disable ${cl.Samples} Sorting)`,
|
|
279
|
+
callback: (checked) => {
|
|
280
|
+
if (!checked) {
|
|
281
|
+
this.config.settings.hierCluster.yDendrogramHeight = 0;
|
|
282
|
+
this.config.settings.hierCluster.clusterSamples = false;
|
|
283
|
+
} else {
|
|
284
|
+
this.config.divideBy = null;
|
|
285
|
+
this.config.settings.hierCluster.yDendrogramHeight = 200;
|
|
286
|
+
this.config.settings.hierCluster.clusterSamples = true;
|
|
287
|
+
}
|
|
288
|
+
this.app.dispatch({
|
|
289
|
+
type: "plot_edit",
|
|
290
|
+
id: this.id,
|
|
291
|
+
config: this.config
|
|
292
|
+
});
|
|
293
|
+
}
|
|
294
|
+
},
|
|
295
|
+
{
|
|
296
|
+
label: `Cluster ${clusterRowLabel}`,
|
|
297
|
+
title: `Option to enable ${clusterRowLabel} clustering, instead of enabling ${clusterRowLabel} sorting.`,
|
|
298
|
+
type: "checkbox",
|
|
299
|
+
chartType: "hierCluster",
|
|
300
|
+
settingsKey: "clusterRows",
|
|
301
|
+
boxLabel: `Cluster ${clusterRowLabel} (Disable ${clusterRowLabel} Sorting)`,
|
|
302
|
+
callback: (checked) => {
|
|
303
|
+
if (!checked) {
|
|
304
|
+
this.config.settings.hierCluster.clusterRows = false;
|
|
305
|
+
this.config.settings.hierCluster.sortClusterRows = "asListed";
|
|
306
|
+
} else {
|
|
307
|
+
this.config.settings.hierCluster.clusterRows = true;
|
|
308
|
+
this.config.settings.hierCluster.sortClusterRows = void 0;
|
|
309
|
+
}
|
|
310
|
+
this.app.dispatch({
|
|
311
|
+
type: "plot_edit",
|
|
312
|
+
id: this.id,
|
|
313
|
+
config: this.config
|
|
314
|
+
});
|
|
315
|
+
}
|
|
316
|
+
},
|
|
317
|
+
{
|
|
318
|
+
label: `Sort ${clusterRowLabel}`,
|
|
319
|
+
title: `Set how to order the ${clusterRowLabel} as rows`,
|
|
320
|
+
type: "radio",
|
|
321
|
+
chartType: "hierCluster",
|
|
322
|
+
settingsKey: "sortClusterRows",
|
|
323
|
+
options: [
|
|
324
|
+
{ label: `By input ${clusterRowLabel} order`, value: "asListed" },
|
|
325
|
+
{ label: `By ${clusterRowLabel} name`, value: "byName" }
|
|
326
|
+
],
|
|
327
|
+
styles: { padding: 0, "padding-right": "10px", margin: 0, display: "inline-block" },
|
|
328
|
+
getDisplayStyle(plot) {
|
|
329
|
+
return plot.settings.hierCluster.clusterRows ? "none" : "table-row";
|
|
330
|
+
}
|
|
331
|
+
},
|
|
332
|
+
{
|
|
333
|
+
label: "Z-score Transformation",
|
|
334
|
+
title: `Option to do Z-score transformation`,
|
|
335
|
+
type: "checkbox",
|
|
336
|
+
chartType: "hierCluster",
|
|
337
|
+
settingsKey: "zScoreTransformation",
|
|
338
|
+
boxLabel: `Perform Z-score Transformation`,
|
|
339
|
+
callback: (checked) => {
|
|
340
|
+
if (!checked) {
|
|
341
|
+
this.config.settings.hierCluster.zScoreTransformation = false;
|
|
342
|
+
this.config.settings.hierCluster.colorScale = "whiteRed";
|
|
343
|
+
} else {
|
|
344
|
+
this.config.settings.hierCluster.zScoreTransformation = true;
|
|
345
|
+
this.config.settings.hierCluster.colorScale = "blueWhiteRed";
|
|
346
|
+
}
|
|
347
|
+
this.app.dispatch({
|
|
348
|
+
type: "plot_edit",
|
|
349
|
+
id: this.id,
|
|
350
|
+
config: this.config
|
|
351
|
+
});
|
|
352
|
+
}
|
|
353
|
+
},
|
|
354
|
+
{
|
|
355
|
+
label: `Clustering Method`,
|
|
356
|
+
title: `Sets which clustering method to use`,
|
|
357
|
+
type: "radio",
|
|
358
|
+
chartType: "hierCluster",
|
|
359
|
+
settingsKey: "clusterMethod",
|
|
360
|
+
options: clusterMethodLst
|
|
361
|
+
},
|
|
362
|
+
{
|
|
363
|
+
label: `Distance Method`,
|
|
364
|
+
title: `Sets which distance method to use for clustering`,
|
|
365
|
+
type: "radio",
|
|
366
|
+
chartType: "hierCluster",
|
|
367
|
+
settingsKey: "distanceMethod",
|
|
368
|
+
options: distanceMethodLst
|
|
369
|
+
},
|
|
370
|
+
{
|
|
371
|
+
label: `Column Dendrogram Height`,
|
|
372
|
+
title: `The maximum height to render the column dendrogram`,
|
|
373
|
+
type: "number",
|
|
374
|
+
chartType: "hierCluster",
|
|
375
|
+
settingsKey: "yDendrogramHeight",
|
|
376
|
+
getDisplayStyle(plot) {
|
|
377
|
+
return plot.settings.hierCluster.clusterSamples ? "table-row" : "none";
|
|
378
|
+
}
|
|
379
|
+
},
|
|
380
|
+
{
|
|
381
|
+
label: `Row Dendrogram Width`,
|
|
382
|
+
title: `The maximum width to render the row dendrogram`,
|
|
383
|
+
type: "number",
|
|
384
|
+
chartType: "hierCluster",
|
|
385
|
+
settingsKey: "xDendrogramHeight",
|
|
386
|
+
getDisplayStyle(plot) {
|
|
387
|
+
return plot.settings.hierCluster.clusterRows ? "table-row" : "none";
|
|
388
|
+
}
|
|
389
|
+
},
|
|
390
|
+
{
|
|
391
|
+
label: `Z-score Cap`,
|
|
392
|
+
title: `Cap the Z-score scale to not exceed this absolute value`,
|
|
393
|
+
type: "number",
|
|
394
|
+
chartType: "hierCluster",
|
|
395
|
+
settingsKey: "zScoreCap"
|
|
396
|
+
},
|
|
397
|
+
{
|
|
398
|
+
label: `Color Scheme`,
|
|
399
|
+
title: `Sets which color scheme to use`,
|
|
400
|
+
type: "radio",
|
|
401
|
+
chartType: "hierCluster",
|
|
402
|
+
settingsKey: "colorScale",
|
|
403
|
+
options: [
|
|
404
|
+
{
|
|
405
|
+
label: "Blue-White-Red",
|
|
406
|
+
value: "blueWhiteRed",
|
|
407
|
+
title: `color scheme Blue-White-Red`
|
|
408
|
+
},
|
|
409
|
+
{
|
|
410
|
+
label: "Green-Black-Red",
|
|
411
|
+
value: "greenBlackRed",
|
|
412
|
+
title: `color scheme Green-Black-Red`
|
|
413
|
+
},
|
|
414
|
+
{
|
|
415
|
+
label: "Blue-Yellow-Red",
|
|
416
|
+
value: "blueYellowRed",
|
|
417
|
+
title: `color scheme Blue-Yellow-Red`
|
|
418
|
+
},
|
|
419
|
+
{
|
|
420
|
+
label: "Green-White-Red",
|
|
421
|
+
value: "greenWhiteRed",
|
|
422
|
+
title: `color scheme Green-White-Red`
|
|
423
|
+
},
|
|
424
|
+
{
|
|
425
|
+
label: "Blue-Black-Yellow",
|
|
426
|
+
value: "blueBlackYellow",
|
|
427
|
+
title: `color scheme Blue-Black-Yellow`
|
|
428
|
+
}
|
|
429
|
+
]
|
|
430
|
+
}
|
|
431
|
+
],
|
|
432
|
+
customInputs: updateClusteringControls
|
|
433
|
+
}).html((d) => d.label).style("margin", "2px 0").on("click", callback);
|
|
434
|
+
}
|
|
435
|
+
function updateClusteringControls(self, app, parent, table) {
|
|
436
|
+
if (parent.chartType == "hierCluster" && !parent.config.settings.hierCluster.zScoreTransformation) {
|
|
437
|
+
const zScoreCapControl = select_default(
|
|
438
|
+
table.selectAll("td").filter(function() {
|
|
439
|
+
return select_default(this).text() == "Z-score Cap";
|
|
440
|
+
}).node().closest("tr")
|
|
441
|
+
);
|
|
442
|
+
zScoreCapControl.style("display", "none");
|
|
443
|
+
const colorSchemeControl = select_default(
|
|
444
|
+
table.selectAll("td").filter(function() {
|
|
445
|
+
return select_default(this).text() == "Color Scheme";
|
|
446
|
+
}).node().closest("tr")
|
|
447
|
+
);
|
|
448
|
+
colorSchemeControl.style("display", "none");
|
|
449
|
+
}
|
|
450
|
+
if (parent.chartType == "hierCluster" && parent.config.dataType !== "geneExpression") {
|
|
451
|
+
const geneInputTr = table.insert("tr", () => table.select("tr").node());
|
|
452
|
+
geneInputTr.append("td").attr("class", "sja-termdb-config-row-label").html("Hierarchical Clustering Term Set");
|
|
453
|
+
const td1 = geneInputTr.append("td").style("display", "block").style("padding", "5px 0px");
|
|
454
|
+
const editGrpDiv = td1.append("div").append("label");
|
|
455
|
+
const clusteringBtn = self.btns.node();
|
|
456
|
+
editGrpDiv.append("button").html("Edit Set").on("click", () => {
|
|
457
|
+
app.tip.clear();
|
|
458
|
+
const backDiv = app.tip.d.append("div").style("padding", "5px");
|
|
459
|
+
backDiv.attr("tabindex", 0).style("padding", "5px").style("text-decoration", "underline").style("cursor", "pointer").style("margin-bottom", "12px").html(`« Back`).on("click", () => clusteringBtn.click()).on("keyup", (event) => {
|
|
460
|
+
if (event.key == "Enter") event.target.click();
|
|
461
|
+
});
|
|
462
|
+
const setEdiUiHolder = app.tip.d.append("div");
|
|
463
|
+
parent.showDictTermSelection(setEdiUiHolder);
|
|
464
|
+
});
|
|
465
|
+
}
|
|
466
|
+
}
|
|
467
|
+
|
|
468
|
+
export {
|
|
469
|
+
getAllChildrenClusterIds,
|
|
470
|
+
addSelectedSamplesOptions,
|
|
471
|
+
addSelectedRowsOptions,
|
|
472
|
+
triggerZoomBranch,
|
|
473
|
+
showTable4selectedSamples,
|
|
474
|
+
showTable4selectedRows,
|
|
475
|
+
getClusterFromTopDendrogram,
|
|
476
|
+
getClusterFromLeftDendrogram,
|
|
477
|
+
setClusteringBtn,
|
|
478
|
+
hierCluster_interactivity_exports
|
|
479
|
+
};
|
|
480
|
+
//# sourceMappingURL=chunk-OVO6NYUR.js.map
|