@sjcrh/proteinpaint-client 2.207.1 → 2.209.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/2dmaf-VTMPVZGT.js +1367 -0
- package/dist/AggMatrixInput-CH3RQ2QC.js +406 -0
- package/dist/AggMatrixInput-CH3RQ2QC.js.map +7 -0
- package/dist/AggregateMatrix-DPCHUOMF.js +41 -0
- package/dist/AppHeader-RA7T467G.js +830 -0
- package/dist/BoxPlot-7Q7SMT26.js +1211 -0
- package/dist/CorrelationVolcano-YV4UHOAX.js +617 -0
- package/dist/CorrelationVolcano-YV4UHOAX.js.map +7 -0
- package/dist/Cuminc-ZN53C3MD.js +1219 -0
- package/dist/DE-BEWW5AIG.js +89 -0
- package/dist/DEinput-SJITUJF2.js +499 -0
- package/dist/DM-2LBNE4WE.js +90 -0
- package/dist/DifferentialAnalysis-WE4LBHEF.js +239 -0
- package/dist/DifferentialAnalysis-WE4LBHEF.js.map +7 -0
- package/dist/Disco-PTZQF7IM.js +3389 -0
- package/dist/Disco.UI-NBR67N5M.js +243 -0
- package/dist/DmrPlot-QROLI66S.js +362 -0
- package/dist/DmrPlot-QROLI66S.js.map +7 -0
- package/dist/GB-FEBSFX5U.js +1428 -0
- package/dist/GB-FEBSFX5U.js.map +7 -0
- package/dist/GSEA-KOXOVC5V.js +875 -0
- package/dist/GSEA-KOXOVC5V.js.map +7 -0
- package/dist/GeneExpInput-DYBK54HC.js +42 -0
- package/dist/Geomap-QRD2WZVL.js +84 -0
- package/dist/HicApp-VKET4QHD.js +2245 -0
- package/dist/IDCViewer-RLLTXGD7.js +10812 -0
- package/dist/NumBinaryEditor-GYHOYPQL.js +279 -0
- package/dist/NumBinaryEditor.unit.spec-E2HKBWOO.js +312 -0
- package/dist/NumContEditor-3V76ZSEY.js +105 -0
- package/dist/NumContEditor.unit.spec-RTT5Q5E5.js +164 -0
- package/dist/NumCustomBinEditor-O5DMPY7H.js +33 -0
- package/dist/NumCustomBinEditor.unit.spec-5LZBP2JL.js +397 -0
- package/dist/NumDiscreteEditor-DFOJ7AIH.js +170 -0
- package/dist/NumDiscreteEditor.unit.spec-PPJGEBFX.js +233 -0
- package/dist/NumRegularBinEditor-O6RDO32C.js +33 -0
- package/dist/NumRegularBinEditor.unit.spec-GOB3BF25.js +278 -0
- package/dist/NumSplineEditor-PUXJF2RW.js +210 -0
- package/dist/NumSplineEditor.unit.spec-4VOAAMOU.js +224 -0
- package/dist/NumericDensity-E6MH2THZ.js +33 -0
- package/dist/NumericDensity.unit.spec-IRPFBQUS.js +418 -0
- package/dist/NumericHandler-42RR54X3.js +34 -0
- package/dist/NumericHandler.unit.spec-YYOO7XVT.js +214 -0
- package/dist/ProteomeInput-4N2G6IFX.js +388 -0
- package/dist/Regression-LIWUWAGQ.js +1416 -0
- package/dist/Regression-LIWUWAGQ.js.map +7 -0
- package/dist/RunChart2-VAX5JGZY.js +749 -0
- package/dist/SC-UHBZ3HRO.js +1183 -0
- package/dist/SC-UHBZ3HRO.js.map +7 -0
- package/dist/Violin-V23VZR6B.js +1081 -0
- package/dist/Violin-V23VZR6B.js.map +7 -0
- package/dist/Volcano-64S4AW66.js +2443 -0
- package/dist/Volcano-64S4AW66.js.map +7 -0
- package/dist/Wsi-FOJCKDCP.js +629 -0
- package/dist/Wsi-FOJCKDCP.js.map +7 -0
- package/dist/adSandbox-CLMUYNC3.js +33 -0
- package/dist/animatedBubbleChart-GMLNYTQC.js +547 -0
- package/dist/app-2SFDRDN2.js +32 -0
- package/dist/app-QOZ36UR4.js +42 -0
- package/dist/app.js +14 -14
- package/dist/bam-LLAK7FVG.js +876 -0
- package/dist/barchart-SEC6VKQ2.js +42 -0
- package/dist/barchart2-D4FXZCTU.js +309 -0
- package/dist/block-XGK6TEGH.js +6250 -0
- package/dist/block-XGK6TEGH.js.map +7 -0
- package/dist/block.init-UMRCAKCF.js +33 -0
- package/dist/block.mds.expressionrank-LFPJ52SX.js +354 -0
- package/dist/block.mds.geneboxplot-2QIEN6AH.js +823 -0
- package/dist/block.mds.junction-Z4HUFSG2.js +1539 -0
- package/dist/block.mds.svcnv-3GXGY6ET.js +6796 -0
- package/dist/block.svg-7RCJLMAP.js +159 -0
- package/dist/block.tk.aicheck-5N6EGZ6F.js +278 -0
- package/dist/block.tk.ase-V3AJRYT6.js +360 -0
- package/dist/block.tk.bam-W6QOVVEU.js +1901 -0
- package/dist/block.tk.bedgraphdot-FKTPJZTH.js +379 -0
- package/dist/block.tk.bigwig.ui-Y3M2TDM2.js +206 -0
- package/dist/block.tk.hicstraw-3SWYTMFQ.js +818 -0
- package/dist/block.tk.junction-OXB22PDS.js +2358 -0
- package/dist/block.tk.junction.textmatrixui-PWBLRGCO.js +194 -0
- package/dist/block.tk.ld-NTRJL5GA.js +94 -0
- package/dist/block.tk.menu-JIHSGGIO.js +1024 -0
- package/dist/block.tk.pgv-4Q6CY6QN.js +938 -0
- package/dist/brainImaging-MBI4XTTU.js +555 -0
- package/dist/brainRegions-YVTAESRP.js +217 -0
- package/dist/bubbleHeatmap-ZKTA3AIG.js +378 -0
- package/dist/cellTypeBubbleHeatmap-GJZNXDG4.js +278 -0
- package/dist/chunk-2PDBU42F.js +4375 -0
- package/dist/chunk-2PDBU42F.js.map +7 -0
- package/dist/chunk-2RMSV4BS.js +6360 -0
- package/dist/chunk-33BE7AYS.js +299 -0
- package/dist/chunk-3FEP6B5T.js +119 -0
- package/dist/chunk-3XBG5HIV.js +424 -0
- package/dist/chunk-3XBG5HIV.js.map +7 -0
- package/dist/chunk-4G73CMUL.js +38 -0
- package/dist/chunk-5FRETII3.js +281 -0
- package/dist/chunk-5LYVIIYR.js +170 -0
- package/dist/chunk-6FG6JFZP.js +339 -0
- package/dist/chunk-6G45AUSV.js +237 -0
- package/dist/chunk-6G45AUSV.js.map +7 -0
- package/dist/chunk-6LDKSKYQ.js +70 -0
- package/dist/chunk-7FFTAYT4.js +272 -0
- package/dist/chunk-7GDRMBNO.js +339 -0
- package/dist/chunk-A2UUXYH6.js +1986 -0
- package/dist/chunk-AFQKYV4D.js +2853 -0
- package/dist/chunk-ANACCKCQ.js +276 -0
- package/dist/chunk-AR3HXZIW.js +562 -0
- package/dist/chunk-AVCEHJG7.js +446 -0
- package/dist/chunk-AVCIZWH5.js +692 -0
- package/dist/chunk-AVCIZWH5.js.map +7 -0
- package/dist/chunk-B6UXFX73.js +178 -0
- package/dist/chunk-B6UXFX73.js.map +7 -0
- package/dist/chunk-BCCFJYPE.js +54 -0
- package/dist/chunk-BCCFJYPE.js.map +7 -0
- package/dist/chunk-BG3SGGVB.js +134 -0
- package/dist/chunk-C3HEDQPT.js +24921 -0
- package/dist/chunk-C3HEDQPT.js.map +7 -0
- package/dist/chunk-CFZ2ZW3E.js +382 -0
- package/dist/chunk-CKOU3P27.js +26 -0
- package/dist/chunk-CN6KJORZ.js +397 -0
- package/dist/chunk-CYWEYHJQ.js +203 -0
- package/dist/chunk-D5ETVOOE.js +158 -0
- package/dist/chunk-DANF4CC5.js +102 -0
- package/dist/chunk-DNCFJTPI.js +1339 -0
- package/dist/chunk-FNW6BKOA.js +480 -0
- package/dist/chunk-FR5USNAT.js +54 -0
- package/dist/chunk-FSLOUTTK.js +37 -0
- package/dist/chunk-FSLOUTTK.js.map +7 -0
- package/dist/chunk-GYE6FU7P.js +626 -0
- package/dist/chunk-IEIGHCZS.js +1278 -0
- package/dist/chunk-J5GQGWYX.js +1731 -0
- package/dist/chunk-J5GQGWYX.js.map +7 -0
- package/dist/chunk-JMDUO47F.js +5071 -0
- package/dist/chunk-JTANDSTD.js +54 -0
- package/dist/chunk-JTQPPUDG.js +379 -0
- package/dist/chunk-K32DV4QI.js +302 -0
- package/dist/chunk-K77W4SSI.js +98 -0
- package/dist/chunk-KEHVNCFK.js +102 -0
- package/dist/chunk-MMKSXXU2.js +55 -0
- package/dist/chunk-NDOKW2HJ.js +31 -0
- package/dist/chunk-NGMM2MNC.js +518 -0
- package/dist/chunk-OASGOTRM.js +80 -0
- package/dist/chunk-OASGOTRM.js.map +7 -0
- package/dist/chunk-OBDIJ4QS.js +2146 -0
- package/dist/chunk-OBDIJ4QS.js.map +7 -0
- package/dist/chunk-OEBGQKQR.js +2676 -0
- package/dist/chunk-OI5KBFBE.js +468 -0
- package/dist/chunk-OWEBE64A.js +243 -0
- package/dist/chunk-P7X4LDW4.js +783 -0
- package/dist/chunk-Q4HTEL2O.js +56 -0
- package/dist/chunk-Q4HTEL2O.js.map +7 -0
- package/dist/chunk-QD75Q5LM.js +59 -0
- package/dist/chunk-QGH5BM2D.js +141 -0
- package/dist/chunk-QSOFGLWZ.js +240 -0
- package/dist/chunk-QXDGIQYA.js +217 -0
- package/dist/chunk-R2QE6ROO.js +176 -0
- package/dist/chunk-RMHUDMZ7.js +103 -0
- package/dist/chunk-SB36AUG7.js +1614 -0
- package/dist/chunk-SB36AUG7.js.map +7 -0
- package/dist/chunk-SXB4IZQ7.js +123 -0
- package/dist/chunk-T6Q76PDN.js +182 -0
- package/dist/chunk-T6Q76PDN.js.map +7 -0
- package/dist/chunk-TYR355RM.js +263 -0
- package/dist/chunk-ULZPHJYD.js +2784 -0
- package/dist/chunk-V3SOBDIT.js +255 -0
- package/dist/chunk-V3SOBDIT.js.map +7 -0
- package/dist/chunk-VFUSBU43.js +14 -0
- package/dist/chunk-VOF6NWTS.js +274 -0
- package/dist/chunk-WGDJX7WZ.js +2327 -0
- package/dist/chunk-WIQVSCD5.js +294 -0
- package/dist/chunk-WXXRVJSP.js +56 -0
- package/dist/chunk-WXXRVJSP.js.map +7 -0
- package/dist/chunk-X4MV2M5F.js +129 -0
- package/dist/chunk-XVVVNCXS.js +217 -0
- package/dist/chunk-XVVVNCXS.js.map +7 -0
- package/dist/chunk-YHP7MYB7.js +49 -0
- package/dist/chunk-YHWQWVWX.js +550 -0
- package/dist/chunk-YKZOQTT4.js +1233 -0
- package/dist/chunk-Z5HU276I.js +34 -0
- package/dist/chunk-Z6MCBFDM.js +194 -0
- package/dist/cohort-GVAJTICQ.js +70 -0
- package/dist/condition-EGPNMM47.js +327 -0
- package/dist/controls-HBROSXHF.js +34 -0
- package/dist/controls.config-FWKV66TU.js +34 -0
- package/dist/correlation-CEHE66EC.js +95 -0
- package/dist/customdata.inputui-LFT3N5FD.js +284 -0
- package/dist/dataDownload-ZPAIAAE4.js +329 -0
- package/dist/databrowser.ui-W5JGFBE6.js +425 -0
- package/dist/dictionary-RBE2CIZI.js +113 -0
- package/dist/dnaMethylation-CX22TSRO.js +33 -0
- package/dist/dnaMethylation.integration.spec-KEE6ZZRT.js +198 -0
- package/dist/dofetch-6NAGX5EG.js +48 -0
- package/dist/e2pca-XDGPTEXL.js +344 -0
- package/dist/ep-IUIDMIGW.js +1249 -0
- package/dist/expclust.gdc.spec-BMN2PTJX.js +302 -0
- package/dist/facet-DTJKZOBA.js +519 -0
- package/dist/gb-MV7MUJWO.js +81 -0
- package/dist/geneExpClustering-NFH5FS3S.js +244 -0
- package/dist/geneExpression-XVOLNYVN.js +310 -0
- package/dist/geneExpression-ZP2VWHED.js +33 -0
- package/dist/geneExpression.unit.spec-2NSK4ARK.js +128 -0
- package/dist/geneExpression.unit.spec-2NSK4ARK.js.map +7 -0
- package/dist/geneORA-HQ7FLMEJ.js +273 -0
- package/dist/geneRanking-MIABUKTN.js +548 -0
- package/dist/geneVariant-H52UUK6Z.js +289 -0
- package/dist/geneVariant-H52UUK6Z.js.map +7 -0
- package/dist/geneVariant-HDFWLALZ.js +36 -0
- package/dist/geneVariant.integration.spec-O36JK4B7.js +503 -0
- package/dist/geneVariant.integration.spec-O36JK4B7.js.map +7 -0
- package/dist/genefusion.ui-HSDZQHJA.js +303 -0
- package/dist/geneset-WKV3X2EJ.js +203 -0
- package/dist/genomeBrowser.spec-UTAHAU76.js +276 -0
- package/dist/grin2-M2JDZVYU.js +70 -0
- package/dist/grin2-N2QM3XTG.js +949 -0
- package/dist/grin2-N2QM3XTG.js.map +7 -0
- package/dist/hierCluster-LZI6OTRS.js +59 -0
- package/dist/hierCluster-VVXPOTQU.js +55 -0
- package/dist/hierCluster.config-NCYH3Y7Z.js +36 -0
- package/dist/hierCluster.integration.spec-ZDOOCTV3.js +483 -0
- package/dist/hierCluster.interactivity-4HP3JCON.js +49 -0
- package/dist/hierCluster.renderers-3F5GMEXA.js +19 -0
- package/dist/imagePlot-OA4WTMLU.js +156 -0
- package/dist/importPlot-OSTC2GPO.js +8 -0
- package/dist/isoformExpression-LZ5RTUS5.js +35 -0
- package/dist/isoformExpression.unit.spec-L6YDBKYM.js +237 -0
- package/dist/junction-UR6COY3A.js +36 -0
- package/dist/junction.customTerm-TMV43R7Z.js +16 -0
- package/dist/junction.unit.spec-NVBJTGA4.js +182 -0
- package/dist/launch.adhoc-AZG6QJG7.js +37 -0
- package/dist/leftlabel.sample-LYZG25RT.js +258 -0
- package/dist/lollipop-FJXVP5QM.js +166 -0
- package/dist/maf-OXJIJD6D.js +455 -0
- package/dist/maftimeline-75N6ZXEM.js +587 -0
- package/dist/matrix-QFKGEW5A.js +54 -0
- package/dist/matrix-XT7LUV5K.js +59 -0
- package/dist/matrix.cells-NB7LKKXV.js +26 -0
- package/dist/matrix.config-X6HS4UGD.js +37 -0
- package/dist/matrix.data-VLFF34SS.js +23 -0
- package/dist/matrix.groups-F62TSKIG.js +26 -0
- package/dist/matrix.integration.spec-7QBYWHW6.js +3160 -0
- package/dist/matrix.integration.spec-7QBYWHW6.js.map +7 -0
- package/dist/matrix.interactivity-2FBXB52E.js +37 -0
- package/dist/matrix.layout-6TPVKLSX.js +39 -0
- package/dist/matrix.legend-L4ULBMGX.js +20 -0
- package/dist/matrix.renderers-DK6YRLO2.js +34 -0
- package/dist/matrix.serieses-DCRJLJ3H.js +19 -0
- package/dist/matrix.sort-XSGPH44J.js +26 -0
- package/dist/matrix.sort.unit.spec-JF75F4I4.js +468 -0
- package/dist/matrix.sorterUi-WL5I6S3K.js +16 -0
- package/dist/matrix.sorterUi.unit.spec-66JMV5BK.js +338 -0
- package/dist/matrix.unit.spec-36AR4I43.js +150 -0
- package/dist/mavb-ZH4RO77H.js +727 -0
- package/dist/mds.fimo-MVP2G5PS.js +513 -0
- package/dist/mds.samplescatterplot-GYJ3OI4N.js +1545 -0
- package/dist/mds.survivalplot-Q6MYQGTB.js +477 -0
- package/dist/multivalue-BGFMPH4X.js +83 -0
- package/dist/numericDictTermCluster-FNNVLIWB.js +63 -0
- package/dist/oncomatrix-LIIALWWN.js +290 -0
- package/dist/oncomatrix.spec-NEMLM2ZN.js +443 -0
- package/dist/plot.2dvaf-HJO3SKNK.js +372 -0
- package/dist/plot.app-WSLFOFSR.js +36 -0
- package/dist/plot.barplot-SPI5JA37.js +97 -0
- package/dist/plot.boxplot-4W3XEY5I.js +146 -0
- package/dist/plot.brainImaging-KEOUTYIB.js +51 -0
- package/dist/plot.disco-7IDMKNAQ.js +99 -0
- package/dist/plot.ssgq-IOKUGDC4.js +134 -0
- package/dist/plot.vaf2cov-SFSZ6M43.js +253 -0
- package/dist/polar2-PLPE5TX5.js +232 -0
- package/dist/profileForms-ZDHG67GM.js +941 -0
- package/dist/profilePlot-UUZA2YG6.js +49 -0
- package/dist/proteinView-GHS3XARL.js +1357 -0
- package/dist/proteomeCohortCompare-TQ3BGIPS.js +912 -0
- package/dist/pseudbulk.unit.spec-HFESRN7A.js +86 -0
- package/dist/pseudbulk.unit.spec-HFESRN7A.js.map +7 -0
- package/dist/pseudobulk-ODXYIUD5.js +35 -0
- package/dist/qualitative-WOSYAIGQ.js +38 -0
- package/dist/radar2-2KXBS3Y3.js +327 -0
- package/dist/radarFacility2-JCOKJQQF.js +335 -0
- package/dist/rememberedGvQ.unit.spec-DYRO2LO5.js +211 -0
- package/dist/render-IJ6GE3NE.js +33 -0
- package/dist/report-WLLFUA7L.js +217 -0
- package/dist/sampleView-LPKSYUNF.js +43 -0
- package/dist/samplelst-MNI2MGMT.js +106 -0
- package/dist/samplematrix-KEKJP2B4.js +2193 -0
- package/dist/sc-ZYKFRJU4.js +81 -0
- package/dist/scatter-BAEZOFWA.js +88 -0
- package/dist/scatter-IGFBIZ3B.js +925 -0
- package/dist/scatter-IGFBIZ3B.js.map +7 -0
- package/dist/selectGenomeWithTklst-HBHRXEDY.js +129 -0
- package/dist/singleCellCellType-PMFDV24B.js +33 -0
- package/dist/singleCellCellType.unit.spec-ZLYDUDIY.js +154 -0
- package/dist/singleCellGeneExpression-SUYO3HR3.js +33 -0
- package/dist/singleCellGeneExpression.unit.spec-3N3HRXFN.js +148 -0
- package/dist/singleCellNumericValue-BV7C6Y34.js +33 -0
- package/dist/singleCellNumericValue.unit.spec-7VJOMYQ6.js +416 -0
- package/dist/singleCellNumericValue.unit.spec-7VJOMYQ6.js.map +7 -0
- package/dist/singleCellPlot-BG7UJOHA.js +48 -0
- package/dist/singlecell-BANNFGBS.js +81 -0
- package/dist/singlecell-ZUTL5ZWE.js +1566 -0
- package/dist/snp-BHG4NVK4.js +33 -0
- package/dist/snp.unit.spec-Q3AZHQRC.js +171 -0
- package/dist/snplocus-HTJL63M3.js +203 -0
- package/dist/spliceevent.a53ss.diagram-UKRIP7EP.js +146 -0
- package/dist/spliceevent.exonskip.diagram-CU777CXQ.js +278 -0
- package/dist/spliceevent.noeventdiagram-LGLXCF25.js +455 -0
- package/dist/ssGSEA-BIEEKAKX.js +33 -0
- package/dist/ssGSEA.unit.spec-YD4UDIRH.js +83 -0
- package/dist/stattable-LFR3RSD6.js +117 -0
- package/dist/studyCatalog-RINIZ277.js +414 -0
- package/dist/summarizeCnvGeneexp-ZQFNPR65.js +158 -0
- package/dist/summarizeGeneexpSurvival-GIS7XMMH.js +105 -0
- package/dist/summarizeMutationCnv-FWF7YIGR.js +159 -0
- package/dist/summarizeMutationDiagnosis-V5L2OKTK.js +35 -0
- package/dist/summarizeMutationSurvival-LAUUF6XN.js +99 -0
- package/dist/summary-OMU3ACNE.js +44 -0
- package/dist/summary.integration.spec-6JZAT73L.js +409 -0
- package/dist/summaryInput-QIKL3HDD.js +242 -0
- package/dist/sunburst-32IW2R57.js +278 -0
- package/dist/survival-BMOPVAN2.js +53 -0
- package/dist/survival-H5AWMQ36.js +1248 -0
- package/dist/survival.integration.spec-66UOWSZG.js +613 -0
- package/dist/survival.integration.spec-66UOWSZG.js.map +7 -0
- package/dist/svgraph-B75FS3BB.js +1382 -0
- package/dist/svmr-IUEUOHVO.js +3837 -0
- package/dist/table-YAAH7WR6.js +197 -0
- package/dist/termCollection-7F5ZG2DB.js +252 -0
- package/dist/termCollection-KNFUELYY.js +33 -0
- package/dist/termCollection.unit.spec-S6M6QC4C.js +299 -0
- package/dist/termCollectionFractionSelection-X22VMJWY.js +42 -0
- package/dist/termCollectionFractionSelection.unit.spec-ELU6SD7P.js +188 -0
- package/dist/tk-TT666UVE.js +41 -0
- package/dist/tk-UOPNJ323.js +1121 -0
- package/dist/tp.ui-HGAHRKO5.js +1454 -0
- package/dist/tvs.dt-H7YYR4EB.js +34 -0
- package/dist/tvs.dtcnv.categorical-IPJTKGMF.js +35 -0
- package/dist/tvs.dtcnv.continuous-XY5XZ4GH.js +67 -0
- package/dist/tvs.dtfusion-VFCBMXRM.js +35 -0
- package/dist/tvs.dtitd-RZVW6FTR.js +35 -0
- package/dist/tvs.dtsnvindel-IDPJWSGC.js +35 -0
- package/dist/tvs.dtsv-QERP756F.js +35 -0
- package/dist/tvs.samplelst-6KNDHBIU.js +98 -0
- package/dist/tvs.termCollection-GWPJK3NE.js +124 -0
- package/dist/vocabulary-C5FIZMPQ.js +36 -0
- package/dist/vocabulary-C5FIZMPQ.js.map +7 -0
- package/dist/wsi.direct-2RBCBXDA.js +8343 -0
- package/package.json +3 -3
- package/dist/2dmaf-32F56QBJ.js +0 -1367
- package/dist/AggMatrixInput-RDFMGV47.js +0 -277
- package/dist/AggMatrixInput-RDFMGV47.js.map +0 -7
- package/dist/AggregateMatrix-TPXNNWVD.js +0 -41
- package/dist/AppHeader-SEJXDJE3.js +0 -830
- package/dist/BoxPlot-LOAO2MDO.js +0 -1211
- package/dist/CorrelationVolcano-AU6ZAFPG.js +0 -614
- package/dist/CorrelationVolcano-AU6ZAFPG.js.map +0 -7
- package/dist/Cuminc-O533BXFY.js +0 -1219
- package/dist/DE-FDAUNOWU.js +0 -89
- package/dist/DEinput-TF2VYTIJ.js +0 -499
- package/dist/DM-42YN3OEO.js +0 -90
- package/dist/DifferentialAnalysis-H5NBPR3P.js +0 -237
- package/dist/DifferentialAnalysis-H5NBPR3P.js.map +0 -7
- package/dist/Disco-FGFHIKUR.js +0 -3389
- package/dist/Disco.UI-YGIU2JPM.js +0 -243
- package/dist/DmrPlot-EQFXMAW5.js +0 -637
- package/dist/DmrPlot-EQFXMAW5.js.map +0 -7
- package/dist/GB-244UT5VU.js +0 -1391
- package/dist/GB-244UT5VU.js.map +0 -7
- package/dist/GSEA-KXQBR3HH.js +0 -851
- package/dist/GSEA-KXQBR3HH.js.map +0 -7
- package/dist/GeneExpInput-ZY6SHXTX.js +0 -42
- package/dist/Geomap-6ZV4AM23.js +0 -84
- package/dist/HicApp-4UHX2YGP.js +0 -2245
- package/dist/IDCViewer-AB6LLO64.js +0 -10812
- package/dist/NumBinaryEditor-CGSO2T4L.js +0 -279
- package/dist/NumBinaryEditor.unit.spec-3QHARZQJ.js +0 -312
- package/dist/NumContEditor-YLKSC4Y2.js +0 -105
- package/dist/NumContEditor.unit.spec-L3GC3ZTJ.js +0 -164
- package/dist/NumCustomBinEditor-K3XSFHCC.js +0 -33
- package/dist/NumCustomBinEditor.unit.spec-2FUHE6BX.js +0 -397
- package/dist/NumDiscreteEditor-RJCSIW4R.js +0 -170
- package/dist/NumDiscreteEditor.unit.spec-CUA6BOIS.js +0 -233
- package/dist/NumRegularBinEditor-C3VIFDS4.js +0 -33
- package/dist/NumRegularBinEditor.unit.spec-V2UJ5FLH.js +0 -278
- package/dist/NumSplineEditor-XBE7OV7P.js +0 -210
- package/dist/NumSplineEditor.unit.spec-CKRRI4US.js +0 -224
- package/dist/NumericDensity-ZL7UY7TL.js +0 -33
- package/dist/NumericDensity.unit.spec-CWTMSR56.js +0 -418
- package/dist/NumericHandler-56ENFMNK.js +0 -34
- package/dist/NumericHandler.unit.spec-3YW34TTJ.js +0 -214
- package/dist/ProteomeInput-HIS4GYWH.js +0 -388
- package/dist/Regression-C5GZYLEN.js +0 -1416
- package/dist/Regression-C5GZYLEN.js.map +0 -7
- package/dist/RunChart2-X5WKYLPQ.js +0 -749
- package/dist/SC-3Y5J65DT.js +0 -1107
- package/dist/SC-3Y5J65DT.js.map +0 -7
- package/dist/Violin-F3QS2EMJ.js +0 -1082
- package/dist/Violin-F3QS2EMJ.js.map +0 -7
- package/dist/Volcano-ZNYDKP2O.js +0 -1649
- package/dist/Volcano-ZNYDKP2O.js.map +0 -7
- package/dist/Wsi-B6EIGTI2.js +0 -609
- package/dist/Wsi-B6EIGTI2.js.map +0 -7
- package/dist/adSandbox-A52OQSOW.js +0 -33
- package/dist/animatedBubbleChart-OQOZ3WFK.js +0 -547
- package/dist/app-4KIKXQX4.js +0 -32
- package/dist/app-NZUNKWKK.js +0 -42
- package/dist/bam-SME7YD3E.js +0 -876
- package/dist/barchart-ESY6FOS4.js +0 -42
- package/dist/barchart2-XEJZGCES.js +0 -309
- package/dist/block-747IK2EW.js +0 -6249
- package/dist/block-747IK2EW.js.map +0 -7
- package/dist/block.init-ITZ42K43.js +0 -33
- package/dist/block.mds.expressionrank-Q63IJAJK.js +0 -354
- package/dist/block.mds.geneboxplot-EZIKAIKC.js +0 -823
- package/dist/block.mds.junction-TJXFKZ2Q.js +0 -1539
- package/dist/block.mds.svcnv-WSIEAII6.js +0 -6796
- package/dist/block.svg-CQX5W6R4.js +0 -159
- package/dist/block.tk.aicheck-J4MQ4BSD.js +0 -278
- package/dist/block.tk.ase-2JFNPWCZ.js +0 -360
- package/dist/block.tk.bam-RBQ4AXSQ.js +0 -1901
- package/dist/block.tk.bedgraphdot-ZQBOMVTO.js +0 -379
- package/dist/block.tk.bigwig.ui-U5IBO3VF.js +0 -206
- package/dist/block.tk.hicstraw-ZRZMFLLX.js +0 -818
- package/dist/block.tk.junction-7U7ABE4O.js +0 -2358
- package/dist/block.tk.junction.textmatrixui-AEXZ7W3U.js +0 -194
- package/dist/block.tk.ld-E7WPFL5P.js +0 -94
- package/dist/block.tk.menu-AITMEZTZ.js +0 -1024
- package/dist/block.tk.pgv-EDPZHI5L.js +0 -938
- package/dist/brainImaging-35LPNBDR.js +0 -555
- package/dist/brainRegions-JMTQT4X3.js +0 -217
- package/dist/bubbleHeatmap-FMBKMDUL.js +0 -378
- package/dist/cellTypeBubbleHeatmap-ZPTAGEWW.js +0 -278
- package/dist/chunk-2GBG3KA7.js +0 -129
- package/dist/chunk-2IVN5DWA.js +0 -302
- package/dist/chunk-36AAUYZE.js +0 -194
- package/dist/chunk-3K7AYA3M.js +0 -54
- package/dist/chunk-4JFFFGL3.js +0 -468
- package/dist/chunk-4KJSNR5E.js +0 -562
- package/dist/chunk-52QHIKH2.js +0 -2139
- package/dist/chunk-52QHIKH2.js.map +0 -7
- package/dist/chunk-5ALGKNTQ.js +0 -6360
- package/dist/chunk-5JCTTSV4.js +0 -480
- package/dist/chunk-5W7K7STT.js +0 -26
- package/dist/chunk-6CIGRV5K.js +0 -677
- package/dist/chunk-6CIGRV5K.js.map +0 -7
- package/dist/chunk-6U2OPC6J.js +0 -176
- package/dist/chunk-7AHTS4BP.js +0 -382
- package/dist/chunk-7HFAEB3C.js +0 -55
- package/dist/chunk-7HGZRJZZ.js +0 -98
- package/dist/chunk-A2ORIMUJ.js +0 -339
- package/dist/chunk-A32SGNCT.js +0 -1233
- package/dist/chunk-AKA6RWLC.js +0 -217
- package/dist/chunk-AMVZ6KT5.js +0 -240
- package/dist/chunk-ASXUC6SM.js +0 -54
- package/dist/chunk-BCO5T43J.js +0 -379
- package/dist/chunk-BDQPMVKD.js +0 -783
- package/dist/chunk-BOQZOLRA.js +0 -274
- package/dist/chunk-BSCMVKBP.js +0 -5071
- package/dist/chunk-BZN2O76M.js +0 -119
- package/dist/chunk-BZZZQFTI.js +0 -34
- package/dist/chunk-CRHGXVUQ.js +0 -272
- package/dist/chunk-D6AB63O3.js +0 -216
- package/dist/chunk-D6AB63O3.js.map +0 -7
- package/dist/chunk-DPQP2GUW.js +0 -626
- package/dist/chunk-EKQ7NYOU.js +0 -276
- package/dist/chunk-EUQEQOFE.js +0 -141
- package/dist/chunk-FKA55PHV.js +0 -281
- package/dist/chunk-GVLWCGXX.js +0 -397
- package/dist/chunk-HLVWCJRO.js +0 -518
- package/dist/chunk-HPAW7XDM.js +0 -178
- package/dist/chunk-HPAW7XDM.js.map +0 -7
- package/dist/chunk-IV57XNTG.js +0 -123
- package/dist/chunk-JMAFJKGG.js +0 -243
- package/dist/chunk-JZHRVYNS.js +0 -2676
- package/dist/chunk-K6YUMBDY.js +0 -55
- package/dist/chunk-K6YUMBDY.js.map +0 -7
- package/dist/chunk-KTKZSYIH.js +0 -24
- package/dist/chunk-KTKZSYIH.js.map +0 -7
- package/dist/chunk-L6WNBKYN.js +0 -158
- package/dist/chunk-LGR6CJTW.js +0 -2853
- package/dist/chunk-LOWJQFCC.js +0 -550
- package/dist/chunk-M5SYLBBC.js +0 -2327
- package/dist/chunk-MKAILEWO.js +0 -59
- package/dist/chunk-N4PDPZWQ.js +0 -4366
- package/dist/chunk-N4PDPZWQ.js.map +0 -7
- package/dist/chunk-OIJ6GRVS.js +0 -134
- package/dist/chunk-ONVIVITY.js +0 -203
- package/dist/chunk-OQX3HO46.js +0 -56
- package/dist/chunk-OQX3HO46.js.map +0 -7
- package/dist/chunk-OYLGAFFY.js +0 -31
- package/dist/chunk-P7DIIYCX.js +0 -197
- package/dist/chunk-P7DIIYCX.js.map +0 -7
- package/dist/chunk-PC4MFDHP.js +0 -24613
- package/dist/chunk-PC4MFDHP.js.map +0 -7
- package/dist/chunk-PGKOJYV6.js +0 -50
- package/dist/chunk-PGKOJYV6.js.map +0 -7
- package/dist/chunk-PPSWNLMG.js +0 -402
- package/dist/chunk-PPSWNLMG.js.map +0 -7
- package/dist/chunk-R624P2GE.js +0 -263
- package/dist/chunk-RBSAEAQV.js +0 -446
- package/dist/chunk-RUBZCKIX.js +0 -1608
- package/dist/chunk-RUBZCKIX.js.map +0 -7
- package/dist/chunk-RZ3KEFZ2.js +0 -339
- package/dist/chunk-SS66BHGA.js +0 -103
- package/dist/chunk-SU63FEY6.js +0 -294
- package/dist/chunk-SVC65ZPG.js +0 -102
- package/dist/chunk-TG3QBMDK.js +0 -102
- package/dist/chunk-TMXW5HVE.js +0 -1278
- package/dist/chunk-TPDBOH3A.js +0 -1339
- package/dist/chunk-U5RWKZVS.js +0 -1720
- package/dist/chunk-U5RWKZVS.js.map +0 -7
- package/dist/chunk-UYKZ5HXA.js +0 -1986
- package/dist/chunk-VOYUJJQ6.js +0 -70
- package/dist/chunk-W4RYRU5D.js +0 -38
- package/dist/chunk-WFSMIVJT.js +0 -2784
- package/dist/chunk-Y4PX2ECH.js +0 -299
- package/dist/chunk-YKM46UX5.js +0 -170
- package/dist/chunk-Z7AO6A7M.js +0 -14
- package/dist/chunk-ZENZ5H2Q.js +0 -49
- package/dist/cohort-Q7TW5XTY.js +0 -70
- package/dist/condition-H6LBUHIF.js +0 -327
- package/dist/controls-DWDKFDXY.js +0 -34
- package/dist/controls.config-KF7PHZSG.js +0 -34
- package/dist/correlation-YMSARIER.js +0 -95
- package/dist/customdata.inputui-KEFE7ZHS.js +0 -284
- package/dist/dataDownload-G7TGPFGL.js +0 -329
- package/dist/databrowser.ui-NFIIFQJZ.js +0 -425
- package/dist/dictionary-ERJQMALC.js +0 -113
- package/dist/dnaMethylation-KVCXKAU3.js +0 -33
- package/dist/dnaMethylation.integration.spec-3NXGGG4J.js +0 -198
- package/dist/dofetch-YRWLEQEH.js +0 -48
- package/dist/e2pca-M2F2CI6I.js +0 -344
- package/dist/ep-QAEG4RV4.js +0 -1249
- package/dist/expclust.gdc.spec-P77T6JR2.js +0 -302
- package/dist/facet-LJTSTASE.js +0 -519
- package/dist/gb-KSB2DQHH.js +0 -81
- package/dist/geneExpClustering-KHDCPE65.js +0 -244
- package/dist/geneExpression-AWWMOUAR.js +0 -310
- package/dist/geneExpression-Z2EDR6EN.js +0 -33
- package/dist/geneExpression.unit.spec-WB2ESPKT.js +0 -128
- package/dist/geneExpression.unit.spec-WB2ESPKT.js.map +0 -7
- package/dist/geneORA-NGZTMFSJ.js +0 -273
- package/dist/geneRanking-AYNBGFKU.js +0 -548
- package/dist/geneVariant-AL64NDHH.js +0 -36
- package/dist/geneVariant-QMKR3LUV.js +0 -286
- package/dist/geneVariant-QMKR3LUV.js.map +0 -7
- package/dist/geneVariant.integration.spec-N3U5CIRT.js +0 -489
- package/dist/geneVariant.integration.spec-N3U5CIRT.js.map +0 -7
- package/dist/genefusion.ui-IWJMF2BM.js +0 -303
- package/dist/geneset-APCO4BRX.js +0 -203
- package/dist/genomeBrowser.spec-JTCVUTO5.js +0 -276
- package/dist/grin2-FVX6AIST.js +0 -70
- package/dist/grin2-LF46UKFY.js +0 -1137
- package/dist/grin2-LF46UKFY.js.map +0 -7
- package/dist/hierCluster-4DRHXD6W.js +0 -55
- package/dist/hierCluster-SFRQK3PS.js +0 -59
- package/dist/hierCluster.config-G2TFGBYF.js +0 -36
- package/dist/hierCluster.integration.spec-ZUZKCG6A.js +0 -483
- package/dist/hierCluster.interactivity-LQA6J56H.js +0 -49
- package/dist/hierCluster.renderers-TZZJEVFO.js +0 -19
- package/dist/imagePlot-OUHFWYKT.js +0 -156
- package/dist/importPlot-7V456QK7.js +0 -8
- package/dist/isoformExpression-NGUJJ6VI.js +0 -35
- package/dist/isoformExpression.unit.spec-DCRPXPBY.js +0 -237
- package/dist/junction-QYKLNXIW.js +0 -36
- package/dist/junction.customTerm-EHOOBR4V.js +0 -16
- package/dist/junction.unit.spec-LDNY7OFK.js +0 -182
- package/dist/launch.adhoc-FF7B3UG6.js +0 -37
- package/dist/leftlabel.sample-BTHMKLGF.js +0 -258
- package/dist/lollipop-H3UCNMHN.js +0 -166
- package/dist/maf-KWGUTPKO.js +0 -455
- package/dist/maftimeline-UD5VE4UW.js +0 -587
- package/dist/matrix-DLCX6GOO.js +0 -59
- package/dist/matrix-TIV42IQB.js +0 -54
- package/dist/matrix.cells-J3QZ7C6U.js +0 -26
- package/dist/matrix.config-VNMS6B7J.js +0 -37
- package/dist/matrix.data-PIE3TLKD.js +0 -23
- package/dist/matrix.groups-URBU775S.js +0 -26
- package/dist/matrix.integration.spec-LC6YMEKP.js +0 -3160
- package/dist/matrix.integration.spec-LC6YMEKP.js.map +0 -7
- package/dist/matrix.interactivity-W5AFOAQN.js +0 -37
- package/dist/matrix.layout-LU3NIJAL.js +0 -39
- package/dist/matrix.legend-LTP6ETZO.js +0 -20
- package/dist/matrix.renderers-762XI65L.js +0 -34
- package/dist/matrix.serieses-FHDBRPZA.js +0 -19
- package/dist/matrix.sort-Q6A6UWMY.js +0 -26
- package/dist/matrix.sort.unit.spec-CTCOPKVS.js +0 -468
- package/dist/matrix.sorterUi-4M5AU5EL.js +0 -16
- package/dist/matrix.sorterUi.unit.spec-Y7GC3PM5.js +0 -338
- package/dist/matrix.unit.spec-DROPHFTM.js +0 -150
- package/dist/mavb-BWA73N3U.js +0 -727
- package/dist/mds.fimo-3UJWIH2J.js +0 -513
- package/dist/mds.samplescatterplot-EUS7DCSQ.js +0 -1545
- package/dist/mds.survivalplot-77UEBQIC.js +0 -477
- package/dist/multivalue-KZ2DMVIR.js +0 -83
- package/dist/numericDictTermCluster-C2MYJYPZ.js +0 -63
- package/dist/oncomatrix-6LGB3M7R.js +0 -290
- package/dist/oncomatrix.spec-UWMSLOHW.js +0 -443
- package/dist/plot.2dvaf-LZAVWH65.js +0 -372
- package/dist/plot.app-OEWE3AYV.js +0 -36
- package/dist/plot.barplot-VIBHGTUT.js +0 -97
- package/dist/plot.boxplot-NQI3PSKR.js +0 -146
- package/dist/plot.brainImaging-3MTTCZHI.js +0 -51
- package/dist/plot.disco-HODBY7SO.js +0 -99
- package/dist/plot.ssgq-4URQE673.js +0 -134
- package/dist/plot.vaf2cov-QIJNEKCK.js +0 -253
- package/dist/polar2-GVFQNSLK.js +0 -232
- package/dist/profileForms-Z22CJXI4.js +0 -941
- package/dist/profilePlot-IVQZBSID.js +0 -49
- package/dist/proteinView-AUK634AU.js +0 -1357
- package/dist/proteomeCohortCompare-7G2F35H5.js +0 -912
- package/dist/pseudbulk.unit.spec-JDKUQUCM.js +0 -106
- package/dist/pseudbulk.unit.spec-JDKUQUCM.js.map +0 -7
- package/dist/pseudobulk-QTCUSH5I.js +0 -37
- package/dist/qualitative-7ST7SSBT.js +0 -38
- package/dist/radar2-CEE6SNBS.js +0 -327
- package/dist/radarFacility2-OSKDYIK7.js +0 -335
- package/dist/rememberedGvQ.unit.spec-RYFUJ2NW.js +0 -211
- package/dist/render-MAD3WMVD.js +0 -33
- package/dist/report-6JXJVSEB.js +0 -217
- package/dist/sampleView-SG3QYZKQ.js +0 -43
- package/dist/samplelst-R765UFP6.js +0 -106
- package/dist/samplematrix-EBJYE5SM.js +0 -2193
- package/dist/sc-7ZXPFDHD.js +0 -81
- package/dist/scatter-3GUL4KF3.js +0 -88
- package/dist/scatter-RHUVER53.js +0 -920
- package/dist/scatter-RHUVER53.js.map +0 -7
- package/dist/selectGenomeWithTklst-K4YXGJYG.js +0 -129
- package/dist/singleCellCellType-TU5VTPLP.js +0 -33
- package/dist/singleCellCellType.unit.spec-IRITQIGT.js +0 -154
- package/dist/singleCellGeneExpression-3IL52QDK.js +0 -33
- package/dist/singleCellGeneExpression.unit.spec-WXC4C37T.js +0 -148
- package/dist/singleCellPlot-XG3HZS7I.js +0 -48
- package/dist/singlecell-BRF2HAV2.js +0 -81
- package/dist/singlecell-KVCJF2HI.js +0 -1566
- package/dist/snp-RMZRB426.js +0 -33
- package/dist/snp.unit.spec-JF6KR2NT.js +0 -171
- package/dist/snplocus-AHUFHQ3Q.js +0 -203
- package/dist/spliceevent.a53ss.diagram-OSZZ2CF2.js +0 -146
- package/dist/spliceevent.exonskip.diagram-AMA2D2OL.js +0 -278
- package/dist/spliceevent.noeventdiagram-RKTUXH5D.js +0 -455
- package/dist/ssGSEA-7RKWYZKX.js +0 -33
- package/dist/ssGSEA.unit.spec-XLCZHH7S.js +0 -83
- package/dist/stattable-NDYUCLVZ.js +0 -117
- package/dist/studyCatalog-TAXRF5NS.js +0 -414
- package/dist/summarizeCnvGeneexp-3QLHU6N7.js +0 -158
- package/dist/summarizeGeneexpSurvival-ARI4MPFX.js +0 -105
- package/dist/summarizeMutationCnv-W7V7CKPI.js +0 -159
- package/dist/summarizeMutationDiagnosis-GCL4SRON.js +0 -35
- package/dist/summarizeMutationSurvival-6TTMSRRX.js +0 -99
- package/dist/summary-OUYDWLBF.js +0 -44
- package/dist/summary.integration.spec-4GTCG6HY.js +0 -409
- package/dist/summaryInput-UK3TLC7M.js +0 -242
- package/dist/sunburst-2UFHMNH3.js +0 -278
- package/dist/survival-SPWYSDVB.js +0 -53
- package/dist/survival-TL6UZ6FQ.js +0 -1248
- package/dist/survival.integration.spec-WWZELTKZ.js +0 -613
- package/dist/survival.integration.spec-WWZELTKZ.js.map +0 -7
- package/dist/svgraph-Z543MLIN.js +0 -1382
- package/dist/svmr-SZCAOAIF.js +0 -3837
- package/dist/table-IAQ6J4DO.js +0 -197
- package/dist/termCollection-3NGHR7QN.js +0 -252
- package/dist/termCollection-7P3WU6X6.js +0 -33
- package/dist/termCollection.unit.spec-EPYC7LOA.js +0 -299
- package/dist/termCollectionFractionSelection-YKIE6BME.js +0 -42
- package/dist/termCollectionFractionSelection.unit.spec-AG2CZPGZ.js +0 -188
- package/dist/tk-TOXMU4GT.js +0 -1121
- package/dist/tk-X454XH5N.js +0 -41
- package/dist/tp.ui-FDQ76KPL.js +0 -1454
- package/dist/tvs.dt-U77PCG6X.js +0 -34
- package/dist/tvs.dtcnv.categorical-XYZU4XLO.js +0 -35
- package/dist/tvs.dtcnv.continuous-4GJILFGP.js +0 -67
- package/dist/tvs.dtfusion-7YROAHVI.js +0 -35
- package/dist/tvs.dtitd-MIYU4ZHH.js +0 -35
- package/dist/tvs.dtsnvindel-XLDY7KWB.js +0 -35
- package/dist/tvs.dtsv-YMLJ37YR.js +0 -35
- package/dist/tvs.samplelst-KIVEXJKD.js +0 -98
- package/dist/tvs.termCollection-4CQV3EB3.js +0 -124
- package/dist/vocabulary-64GO4YDB.js +0 -36
- package/dist/wsi.direct-5MQVRJZX.js +0 -8343
- /package/dist/{2dmaf-32F56QBJ.js.map → 2dmaf-VTMPVZGT.js.map} +0 -0
- /package/dist/{AggregateMatrix-TPXNNWVD.js.map → AggregateMatrix-DPCHUOMF.js.map} +0 -0
- /package/dist/{AppHeader-SEJXDJE3.js.map → AppHeader-RA7T467G.js.map} +0 -0
- /package/dist/{BoxPlot-LOAO2MDO.js.map → BoxPlot-7Q7SMT26.js.map} +0 -0
- /package/dist/{Cuminc-O533BXFY.js.map → Cuminc-ZN53C3MD.js.map} +0 -0
- /package/dist/{DE-FDAUNOWU.js.map → DE-BEWW5AIG.js.map} +0 -0
- /package/dist/{DEinput-TF2VYTIJ.js.map → DEinput-SJITUJF2.js.map} +0 -0
- /package/dist/{DM-42YN3OEO.js.map → DM-2LBNE4WE.js.map} +0 -0
- /package/dist/{Disco-FGFHIKUR.js.map → Disco-PTZQF7IM.js.map} +0 -0
- /package/dist/{Disco.UI-YGIU2JPM.js.map → Disco.UI-NBR67N5M.js.map} +0 -0
- /package/dist/{GeneExpInput-ZY6SHXTX.js.map → GeneExpInput-DYBK54HC.js.map} +0 -0
- /package/dist/{Geomap-6ZV4AM23.js.map → Geomap-QRD2WZVL.js.map} +0 -0
- /package/dist/{HicApp-4UHX2YGP.js.map → HicApp-VKET4QHD.js.map} +0 -0
- /package/dist/{IDCViewer-AB6LLO64.js.map → IDCViewer-RLLTXGD7.js.map} +0 -0
- /package/dist/{NumBinaryEditor-CGSO2T4L.js.map → NumBinaryEditor-GYHOYPQL.js.map} +0 -0
- /package/dist/{NumBinaryEditor.unit.spec-3QHARZQJ.js.map → NumBinaryEditor.unit.spec-E2HKBWOO.js.map} +0 -0
- /package/dist/{NumContEditor-YLKSC4Y2.js.map → NumContEditor-3V76ZSEY.js.map} +0 -0
- /package/dist/{NumContEditor.unit.spec-L3GC3ZTJ.js.map → NumContEditor.unit.spec-RTT5Q5E5.js.map} +0 -0
- /package/dist/{NumCustomBinEditor-K3XSFHCC.js.map → NumCustomBinEditor-O5DMPY7H.js.map} +0 -0
- /package/dist/{NumCustomBinEditor.unit.spec-2FUHE6BX.js.map → NumCustomBinEditor.unit.spec-5LZBP2JL.js.map} +0 -0
- /package/dist/{NumDiscreteEditor-RJCSIW4R.js.map → NumDiscreteEditor-DFOJ7AIH.js.map} +0 -0
- /package/dist/{NumDiscreteEditor.unit.spec-CUA6BOIS.js.map → NumDiscreteEditor.unit.spec-PPJGEBFX.js.map} +0 -0
- /package/dist/{NumRegularBinEditor-C3VIFDS4.js.map → NumRegularBinEditor-O6RDO32C.js.map} +0 -0
- /package/dist/{NumRegularBinEditor.unit.spec-V2UJ5FLH.js.map → NumRegularBinEditor.unit.spec-GOB3BF25.js.map} +0 -0
- /package/dist/{NumSplineEditor-XBE7OV7P.js.map → NumSplineEditor-PUXJF2RW.js.map} +0 -0
- /package/dist/{NumSplineEditor.unit.spec-CKRRI4US.js.map → NumSplineEditor.unit.spec-4VOAAMOU.js.map} +0 -0
- /package/dist/{NumericDensity-ZL7UY7TL.js.map → NumericDensity-E6MH2THZ.js.map} +0 -0
- /package/dist/{NumericDensity.unit.spec-CWTMSR56.js.map → NumericDensity.unit.spec-IRPFBQUS.js.map} +0 -0
- /package/dist/{NumericHandler-56ENFMNK.js.map → NumericHandler-42RR54X3.js.map} +0 -0
- /package/dist/{NumericHandler.unit.spec-3YW34TTJ.js.map → NumericHandler.unit.spec-YYOO7XVT.js.map} +0 -0
- /package/dist/{ProteomeInput-HIS4GYWH.js.map → ProteomeInput-4N2G6IFX.js.map} +0 -0
- /package/dist/{RunChart2-X5WKYLPQ.js.map → RunChart2-VAX5JGZY.js.map} +0 -0
- /package/dist/{adSandbox-A52OQSOW.js.map → adSandbox-CLMUYNC3.js.map} +0 -0
- /package/dist/{animatedBubbleChart-OQOZ3WFK.js.map → animatedBubbleChart-GMLNYTQC.js.map} +0 -0
- /package/dist/{app-4KIKXQX4.js.map → app-2SFDRDN2.js.map} +0 -0
- /package/dist/{app-NZUNKWKK.js.map → app-QOZ36UR4.js.map} +0 -0
- /package/dist/{bam-SME7YD3E.js.map → bam-LLAK7FVG.js.map} +0 -0
- /package/dist/{barchart-ESY6FOS4.js.map → barchart-SEC6VKQ2.js.map} +0 -0
- /package/dist/{barchart2-XEJZGCES.js.map → barchart2-D4FXZCTU.js.map} +0 -0
- /package/dist/{block.init-ITZ42K43.js.map → block.init-UMRCAKCF.js.map} +0 -0
- /package/dist/{block.mds.expressionrank-Q63IJAJK.js.map → block.mds.expressionrank-LFPJ52SX.js.map} +0 -0
- /package/dist/{block.mds.geneboxplot-EZIKAIKC.js.map → block.mds.geneboxplot-2QIEN6AH.js.map} +0 -0
- /package/dist/{block.mds.junction-TJXFKZ2Q.js.map → block.mds.junction-Z4HUFSG2.js.map} +0 -0
- /package/dist/{block.mds.svcnv-WSIEAII6.js.map → block.mds.svcnv-3GXGY6ET.js.map} +0 -0
- /package/dist/{block.svg-CQX5W6R4.js.map → block.svg-7RCJLMAP.js.map} +0 -0
- /package/dist/{block.tk.aicheck-J4MQ4BSD.js.map → block.tk.aicheck-5N6EGZ6F.js.map} +0 -0
- /package/dist/{block.tk.ase-2JFNPWCZ.js.map → block.tk.ase-V3AJRYT6.js.map} +0 -0
- /package/dist/{block.tk.bam-RBQ4AXSQ.js.map → block.tk.bam-W6QOVVEU.js.map} +0 -0
- /package/dist/{block.tk.bedgraphdot-ZQBOMVTO.js.map → block.tk.bedgraphdot-FKTPJZTH.js.map} +0 -0
- /package/dist/{block.tk.bigwig.ui-U5IBO3VF.js.map → block.tk.bigwig.ui-Y3M2TDM2.js.map} +0 -0
- /package/dist/{block.tk.hicstraw-ZRZMFLLX.js.map → block.tk.hicstraw-3SWYTMFQ.js.map} +0 -0
- /package/dist/{block.tk.junction-7U7ABE4O.js.map → block.tk.junction-OXB22PDS.js.map} +0 -0
- /package/dist/{block.tk.junction.textmatrixui-AEXZ7W3U.js.map → block.tk.junction.textmatrixui-PWBLRGCO.js.map} +0 -0
- /package/dist/{block.tk.ld-E7WPFL5P.js.map → block.tk.ld-NTRJL5GA.js.map} +0 -0
- /package/dist/{block.tk.menu-AITMEZTZ.js.map → block.tk.menu-JIHSGGIO.js.map} +0 -0
- /package/dist/{block.tk.pgv-EDPZHI5L.js.map → block.tk.pgv-4Q6CY6QN.js.map} +0 -0
- /package/dist/{brainImaging-35LPNBDR.js.map → brainImaging-MBI4XTTU.js.map} +0 -0
- /package/dist/{brainRegions-JMTQT4X3.js.map → brainRegions-YVTAESRP.js.map} +0 -0
- /package/dist/{bubbleHeatmap-FMBKMDUL.js.map → bubbleHeatmap-ZKTA3AIG.js.map} +0 -0
- /package/dist/{cellTypeBubbleHeatmap-ZPTAGEWW.js.map → cellTypeBubbleHeatmap-GJZNXDG4.js.map} +0 -0
- /package/dist/{chunk-5ALGKNTQ.js.map → chunk-2RMSV4BS.js.map} +0 -0
- /package/dist/{chunk-Y4PX2ECH.js.map → chunk-33BE7AYS.js.map} +0 -0
- /package/dist/{chunk-BZN2O76M.js.map → chunk-3FEP6B5T.js.map} +0 -0
- /package/dist/{chunk-W4RYRU5D.js.map → chunk-4G73CMUL.js.map} +0 -0
- /package/dist/{chunk-FKA55PHV.js.map → chunk-5FRETII3.js.map} +0 -0
- /package/dist/{chunk-YKM46UX5.js.map → chunk-5LYVIIYR.js.map} +0 -0
- /package/dist/{chunk-A2ORIMUJ.js.map → chunk-6FG6JFZP.js.map} +0 -0
- /package/dist/{chunk-VOYUJJQ6.js.map → chunk-6LDKSKYQ.js.map} +0 -0
- /package/dist/{chunk-CRHGXVUQ.js.map → chunk-7FFTAYT4.js.map} +0 -0
- /package/dist/{chunk-RZ3KEFZ2.js.map → chunk-7GDRMBNO.js.map} +0 -0
- /package/dist/{chunk-UYKZ5HXA.js.map → chunk-A2UUXYH6.js.map} +0 -0
- /package/dist/{chunk-LGR6CJTW.js.map → chunk-AFQKYV4D.js.map} +0 -0
- /package/dist/{chunk-EKQ7NYOU.js.map → chunk-ANACCKCQ.js.map} +0 -0
- /package/dist/{chunk-4KJSNR5E.js.map → chunk-AR3HXZIW.js.map} +0 -0
- /package/dist/{chunk-RBSAEAQV.js.map → chunk-AVCEHJG7.js.map} +0 -0
- /package/dist/{chunk-OIJ6GRVS.js.map → chunk-BG3SGGVB.js.map} +0 -0
- /package/dist/{chunk-7AHTS4BP.js.map → chunk-CFZ2ZW3E.js.map} +0 -0
- /package/dist/{chunk-5W7K7STT.js.map → chunk-CKOU3P27.js.map} +0 -0
- /package/dist/{chunk-GVLWCGXX.js.map → chunk-CN6KJORZ.js.map} +0 -0
- /package/dist/{chunk-ONVIVITY.js.map → chunk-CYWEYHJQ.js.map} +0 -0
- /package/dist/{chunk-L6WNBKYN.js.map → chunk-D5ETVOOE.js.map} +0 -0
- /package/dist/{chunk-TG3QBMDK.js.map → chunk-DANF4CC5.js.map} +0 -0
- /package/dist/{chunk-TPDBOH3A.js.map → chunk-DNCFJTPI.js.map} +0 -0
- /package/dist/{chunk-5JCTTSV4.js.map → chunk-FNW6BKOA.js.map} +0 -0
- /package/dist/{chunk-3K7AYA3M.js.map → chunk-FR5USNAT.js.map} +0 -0
- /package/dist/{chunk-DPQP2GUW.js.map → chunk-GYE6FU7P.js.map} +0 -0
- /package/dist/{chunk-TMXW5HVE.js.map → chunk-IEIGHCZS.js.map} +0 -0
- /package/dist/{chunk-BSCMVKBP.js.map → chunk-JMDUO47F.js.map} +0 -0
- /package/dist/{chunk-ASXUC6SM.js.map → chunk-JTANDSTD.js.map} +0 -0
- /package/dist/{chunk-BCO5T43J.js.map → chunk-JTQPPUDG.js.map} +0 -0
- /package/dist/{chunk-2IVN5DWA.js.map → chunk-K32DV4QI.js.map} +0 -0
- /package/dist/{chunk-7HGZRJZZ.js.map → chunk-K77W4SSI.js.map} +0 -0
- /package/dist/{chunk-SVC65ZPG.js.map → chunk-KEHVNCFK.js.map} +0 -0
- /package/dist/{chunk-7HFAEB3C.js.map → chunk-MMKSXXU2.js.map} +0 -0
- /package/dist/{chunk-OYLGAFFY.js.map → chunk-NDOKW2HJ.js.map} +0 -0
- /package/dist/{chunk-HLVWCJRO.js.map → chunk-NGMM2MNC.js.map} +0 -0
- /package/dist/{chunk-JZHRVYNS.js.map → chunk-OEBGQKQR.js.map} +0 -0
- /package/dist/{chunk-4JFFFGL3.js.map → chunk-OI5KBFBE.js.map} +0 -0
- /package/dist/{chunk-JMAFJKGG.js.map → chunk-OWEBE64A.js.map} +0 -0
- /package/dist/{chunk-BDQPMVKD.js.map → chunk-P7X4LDW4.js.map} +0 -0
- /package/dist/{chunk-MKAILEWO.js.map → chunk-QD75Q5LM.js.map} +0 -0
- /package/dist/{chunk-EUQEQOFE.js.map → chunk-QGH5BM2D.js.map} +0 -0
- /package/dist/{chunk-AMVZ6KT5.js.map → chunk-QSOFGLWZ.js.map} +0 -0
- /package/dist/{chunk-AKA6RWLC.js.map → chunk-QXDGIQYA.js.map} +0 -0
- /package/dist/{chunk-6U2OPC6J.js.map → chunk-R2QE6ROO.js.map} +0 -0
- /package/dist/{chunk-SS66BHGA.js.map → chunk-RMHUDMZ7.js.map} +0 -0
- /package/dist/{chunk-IV57XNTG.js.map → chunk-SXB4IZQ7.js.map} +0 -0
- /package/dist/{chunk-R624P2GE.js.map → chunk-TYR355RM.js.map} +0 -0
- /package/dist/{chunk-WFSMIVJT.js.map → chunk-ULZPHJYD.js.map} +0 -0
- /package/dist/{chunk-Z7AO6A7M.js.map → chunk-VFUSBU43.js.map} +0 -0
- /package/dist/{chunk-BOQZOLRA.js.map → chunk-VOF6NWTS.js.map} +0 -0
- /package/dist/{chunk-M5SYLBBC.js.map → chunk-WGDJX7WZ.js.map} +0 -0
- /package/dist/{chunk-SU63FEY6.js.map → chunk-WIQVSCD5.js.map} +0 -0
- /package/dist/{chunk-2GBG3KA7.js.map → chunk-X4MV2M5F.js.map} +0 -0
- /package/dist/{chunk-ZENZ5H2Q.js.map → chunk-YHP7MYB7.js.map} +0 -0
- /package/dist/{chunk-LOWJQFCC.js.map → chunk-YHWQWVWX.js.map} +0 -0
- /package/dist/{chunk-A32SGNCT.js.map → chunk-YKZOQTT4.js.map} +0 -0
- /package/dist/{chunk-BZZZQFTI.js.map → chunk-Z5HU276I.js.map} +0 -0
- /package/dist/{chunk-36AAUYZE.js.map → chunk-Z6MCBFDM.js.map} +0 -0
- /package/dist/{cohort-Q7TW5XTY.js.map → cohort-GVAJTICQ.js.map} +0 -0
- /package/dist/{condition-H6LBUHIF.js.map → condition-EGPNMM47.js.map} +0 -0
- /package/dist/{controls-DWDKFDXY.js.map → controls-HBROSXHF.js.map} +0 -0
- /package/dist/{controls.config-KF7PHZSG.js.map → controls.config-FWKV66TU.js.map} +0 -0
- /package/dist/{correlation-YMSARIER.js.map → correlation-CEHE66EC.js.map} +0 -0
- /package/dist/{customdata.inputui-KEFE7ZHS.js.map → customdata.inputui-LFT3N5FD.js.map} +0 -0
- /package/dist/{dataDownload-G7TGPFGL.js.map → dataDownload-ZPAIAAE4.js.map} +0 -0
- /package/dist/{databrowser.ui-NFIIFQJZ.js.map → databrowser.ui-W5JGFBE6.js.map} +0 -0
- /package/dist/{dictionary-ERJQMALC.js.map → dictionary-RBE2CIZI.js.map} +0 -0
- /package/dist/{dnaMethylation-KVCXKAU3.js.map → dnaMethylation-CX22TSRO.js.map} +0 -0
- /package/dist/{dnaMethylation.integration.spec-3NXGGG4J.js.map → dnaMethylation.integration.spec-KEE6ZZRT.js.map} +0 -0
- /package/dist/{dofetch-YRWLEQEH.js.map → dofetch-6NAGX5EG.js.map} +0 -0
- /package/dist/{e2pca-M2F2CI6I.js.map → e2pca-XDGPTEXL.js.map} +0 -0
- /package/dist/{ep-QAEG4RV4.js.map → ep-IUIDMIGW.js.map} +0 -0
- /package/dist/{expclust.gdc.spec-P77T6JR2.js.map → expclust.gdc.spec-BMN2PTJX.js.map} +0 -0
- /package/dist/{facet-LJTSTASE.js.map → facet-DTJKZOBA.js.map} +0 -0
- /package/dist/{gb-KSB2DQHH.js.map → gb-MV7MUJWO.js.map} +0 -0
- /package/dist/{geneExpClustering-KHDCPE65.js.map → geneExpClustering-NFH5FS3S.js.map} +0 -0
- /package/dist/{geneExpression-AWWMOUAR.js.map → geneExpression-XVOLNYVN.js.map} +0 -0
- /package/dist/{geneExpression-Z2EDR6EN.js.map → geneExpression-ZP2VWHED.js.map} +0 -0
- /package/dist/{geneORA-NGZTMFSJ.js.map → geneORA-HQ7FLMEJ.js.map} +0 -0
- /package/dist/{geneRanking-AYNBGFKU.js.map → geneRanking-MIABUKTN.js.map} +0 -0
- /package/dist/{geneVariant-AL64NDHH.js.map → geneVariant-HDFWLALZ.js.map} +0 -0
- /package/dist/{genefusion.ui-IWJMF2BM.js.map → genefusion.ui-HSDZQHJA.js.map} +0 -0
- /package/dist/{geneset-APCO4BRX.js.map → geneset-WKV3X2EJ.js.map} +0 -0
- /package/dist/{genomeBrowser.spec-JTCVUTO5.js.map → genomeBrowser.spec-UTAHAU76.js.map} +0 -0
- /package/dist/{grin2-FVX6AIST.js.map → grin2-M2JDZVYU.js.map} +0 -0
- /package/dist/{hierCluster-4DRHXD6W.js.map → hierCluster-LZI6OTRS.js.map} +0 -0
- /package/dist/{hierCluster-SFRQK3PS.js.map → hierCluster-VVXPOTQU.js.map} +0 -0
- /package/dist/{hierCluster.config-G2TFGBYF.js.map → hierCluster.config-NCYH3Y7Z.js.map} +0 -0
- /package/dist/{hierCluster.integration.spec-ZUZKCG6A.js.map → hierCluster.integration.spec-ZDOOCTV3.js.map} +0 -0
- /package/dist/{hierCluster.interactivity-LQA6J56H.js.map → hierCluster.interactivity-4HP3JCON.js.map} +0 -0
- /package/dist/{hierCluster.renderers-TZZJEVFO.js.map → hierCluster.renderers-3F5GMEXA.js.map} +0 -0
- /package/dist/{imagePlot-OUHFWYKT.js.map → imagePlot-OA4WTMLU.js.map} +0 -0
- /package/dist/{importPlot-7V456QK7.js.map → importPlot-OSTC2GPO.js.map} +0 -0
- /package/dist/{isoformExpression-NGUJJ6VI.js.map → isoformExpression-LZ5RTUS5.js.map} +0 -0
- /package/dist/{isoformExpression.unit.spec-DCRPXPBY.js.map → isoformExpression.unit.spec-L6YDBKYM.js.map} +0 -0
- /package/dist/{junction-QYKLNXIW.js.map → junction-UR6COY3A.js.map} +0 -0
- /package/dist/{junction.customTerm-EHOOBR4V.js.map → junction.customTerm-TMV43R7Z.js.map} +0 -0
- /package/dist/{junction.unit.spec-LDNY7OFK.js.map → junction.unit.spec-NVBJTGA4.js.map} +0 -0
- /package/dist/{launch.adhoc-FF7B3UG6.js.map → launch.adhoc-AZG6QJG7.js.map} +0 -0
- /package/dist/{leftlabel.sample-BTHMKLGF.js.map → leftlabel.sample-LYZG25RT.js.map} +0 -0
- /package/dist/{lollipop-H3UCNMHN.js.map → lollipop-FJXVP5QM.js.map} +0 -0
- /package/dist/{maf-KWGUTPKO.js.map → maf-OXJIJD6D.js.map} +0 -0
- /package/dist/{maftimeline-UD5VE4UW.js.map → maftimeline-75N6ZXEM.js.map} +0 -0
- /package/dist/{matrix-DLCX6GOO.js.map → matrix-QFKGEW5A.js.map} +0 -0
- /package/dist/{matrix-TIV42IQB.js.map → matrix-XT7LUV5K.js.map} +0 -0
- /package/dist/{matrix.cells-J3QZ7C6U.js.map → matrix.cells-NB7LKKXV.js.map} +0 -0
- /package/dist/{matrix.config-VNMS6B7J.js.map → matrix.config-X6HS4UGD.js.map} +0 -0
- /package/dist/{matrix.data-PIE3TLKD.js.map → matrix.data-VLFF34SS.js.map} +0 -0
- /package/dist/{matrix.groups-URBU775S.js.map → matrix.groups-F62TSKIG.js.map} +0 -0
- /package/dist/{matrix.interactivity-W5AFOAQN.js.map → matrix.interactivity-2FBXB52E.js.map} +0 -0
- /package/dist/{matrix.layout-LU3NIJAL.js.map → matrix.layout-6TPVKLSX.js.map} +0 -0
- /package/dist/{matrix.legend-LTP6ETZO.js.map → matrix.legend-L4ULBMGX.js.map} +0 -0
- /package/dist/{matrix.renderers-762XI65L.js.map → matrix.renderers-DK6YRLO2.js.map} +0 -0
- /package/dist/{matrix.serieses-FHDBRPZA.js.map → matrix.serieses-DCRJLJ3H.js.map} +0 -0
- /package/dist/{matrix.sort-Q6A6UWMY.js.map → matrix.sort-XSGPH44J.js.map} +0 -0
- /package/dist/{matrix.sort.unit.spec-CTCOPKVS.js.map → matrix.sort.unit.spec-JF75F4I4.js.map} +0 -0
- /package/dist/{matrix.sorterUi-4M5AU5EL.js.map → matrix.sorterUi-WL5I6S3K.js.map} +0 -0
- /package/dist/{matrix.sorterUi.unit.spec-Y7GC3PM5.js.map → matrix.sorterUi.unit.spec-66JMV5BK.js.map} +0 -0
- /package/dist/{matrix.unit.spec-DROPHFTM.js.map → matrix.unit.spec-36AR4I43.js.map} +0 -0
- /package/dist/{mavb-BWA73N3U.js.map → mavb-ZH4RO77H.js.map} +0 -0
- /package/dist/{mds.fimo-3UJWIH2J.js.map → mds.fimo-MVP2G5PS.js.map} +0 -0
- /package/dist/{mds.samplescatterplot-EUS7DCSQ.js.map → mds.samplescatterplot-GYJ3OI4N.js.map} +0 -0
- /package/dist/{mds.survivalplot-77UEBQIC.js.map → mds.survivalplot-Q6MYQGTB.js.map} +0 -0
- /package/dist/{multivalue-KZ2DMVIR.js.map → multivalue-BGFMPH4X.js.map} +0 -0
- /package/dist/{numericDictTermCluster-C2MYJYPZ.js.map → numericDictTermCluster-FNNVLIWB.js.map} +0 -0
- /package/dist/{oncomatrix-6LGB3M7R.js.map → oncomatrix-LIIALWWN.js.map} +0 -0
- /package/dist/{oncomatrix.spec-UWMSLOHW.js.map → oncomatrix.spec-NEMLM2ZN.js.map} +0 -0
- /package/dist/{plot.2dvaf-LZAVWH65.js.map → plot.2dvaf-HJO3SKNK.js.map} +0 -0
- /package/dist/{plot.app-OEWE3AYV.js.map → plot.app-WSLFOFSR.js.map} +0 -0
- /package/dist/{plot.barplot-VIBHGTUT.js.map → plot.barplot-SPI5JA37.js.map} +0 -0
- /package/dist/{plot.boxplot-NQI3PSKR.js.map → plot.boxplot-4W3XEY5I.js.map} +0 -0
- /package/dist/{plot.brainImaging-3MTTCZHI.js.map → plot.brainImaging-KEOUTYIB.js.map} +0 -0
- /package/dist/{plot.disco-HODBY7SO.js.map → plot.disco-7IDMKNAQ.js.map} +0 -0
- /package/dist/{plot.ssgq-4URQE673.js.map → plot.ssgq-IOKUGDC4.js.map} +0 -0
- /package/dist/{plot.vaf2cov-QIJNEKCK.js.map → plot.vaf2cov-SFSZ6M43.js.map} +0 -0
- /package/dist/{polar2-GVFQNSLK.js.map → polar2-PLPE5TX5.js.map} +0 -0
- /package/dist/{profileForms-Z22CJXI4.js.map → profileForms-ZDHG67GM.js.map} +0 -0
- /package/dist/{profilePlot-IVQZBSID.js.map → profilePlot-UUZA2YG6.js.map} +0 -0
- /package/dist/{proteinView-AUK634AU.js.map → proteinView-GHS3XARL.js.map} +0 -0
- /package/dist/{proteomeCohortCompare-7G2F35H5.js.map → proteomeCohortCompare-TQ3BGIPS.js.map} +0 -0
- /package/dist/{pseudobulk-QTCUSH5I.js.map → pseudobulk-ODXYIUD5.js.map} +0 -0
- /package/dist/{qualitative-7ST7SSBT.js.map → qualitative-WOSYAIGQ.js.map} +0 -0
- /package/dist/{radar2-CEE6SNBS.js.map → radar2-2KXBS3Y3.js.map} +0 -0
- /package/dist/{radarFacility2-OSKDYIK7.js.map → radarFacility2-JCOKJQQF.js.map} +0 -0
- /package/dist/{rememberedGvQ.unit.spec-RYFUJ2NW.js.map → rememberedGvQ.unit.spec-DYRO2LO5.js.map} +0 -0
- /package/dist/{render-MAD3WMVD.js.map → render-IJ6GE3NE.js.map} +0 -0
- /package/dist/{report-6JXJVSEB.js.map → report-WLLFUA7L.js.map} +0 -0
- /package/dist/{sampleView-SG3QYZKQ.js.map → sampleView-LPKSYUNF.js.map} +0 -0
- /package/dist/{samplelst-R765UFP6.js.map → samplelst-MNI2MGMT.js.map} +0 -0
- /package/dist/{samplematrix-EBJYE5SM.js.map → samplematrix-KEKJP2B4.js.map} +0 -0
- /package/dist/{sc-7ZXPFDHD.js.map → sc-ZYKFRJU4.js.map} +0 -0
- /package/dist/{scatter-3GUL4KF3.js.map → scatter-BAEZOFWA.js.map} +0 -0
- /package/dist/{selectGenomeWithTklst-K4YXGJYG.js.map → selectGenomeWithTklst-HBHRXEDY.js.map} +0 -0
- /package/dist/{singleCellCellType-TU5VTPLP.js.map → singleCellCellType-PMFDV24B.js.map} +0 -0
- /package/dist/{singleCellCellType.unit.spec-IRITQIGT.js.map → singleCellCellType.unit.spec-ZLYDUDIY.js.map} +0 -0
- /package/dist/{singleCellGeneExpression-3IL52QDK.js.map → singleCellGeneExpression-SUYO3HR3.js.map} +0 -0
- /package/dist/{singleCellGeneExpression.unit.spec-WXC4C37T.js.map → singleCellGeneExpression.unit.spec-3N3HRXFN.js.map} +0 -0
- /package/dist/{singleCellPlot-XG3HZS7I.js.map → singleCellNumericValue-BV7C6Y34.js.map} +0 -0
- /package/dist/{snp-RMZRB426.js.map → singleCellPlot-BG7UJOHA.js.map} +0 -0
- /package/dist/{singlecell-BRF2HAV2.js.map → singlecell-BANNFGBS.js.map} +0 -0
- /package/dist/{singlecell-KVCJF2HI.js.map → singlecell-ZUTL5ZWE.js.map} +0 -0
- /package/dist/{ssGSEA-7RKWYZKX.js.map → snp-BHG4NVK4.js.map} +0 -0
- /package/dist/{snp.unit.spec-JF6KR2NT.js.map → snp.unit.spec-Q3AZHQRC.js.map} +0 -0
- /package/dist/{snplocus-AHUFHQ3Q.js.map → snplocus-HTJL63M3.js.map} +0 -0
- /package/dist/{spliceevent.a53ss.diagram-OSZZ2CF2.js.map → spliceevent.a53ss.diagram-UKRIP7EP.js.map} +0 -0
- /package/dist/{spliceevent.exonskip.diagram-AMA2D2OL.js.map → spliceevent.exonskip.diagram-CU777CXQ.js.map} +0 -0
- /package/dist/{spliceevent.noeventdiagram-RKTUXH5D.js.map → spliceevent.noeventdiagram-LGLXCF25.js.map} +0 -0
- /package/dist/{summarizeMutationDiagnosis-GCL4SRON.js.map → ssGSEA-BIEEKAKX.js.map} +0 -0
- /package/dist/{ssGSEA.unit.spec-XLCZHH7S.js.map → ssGSEA.unit.spec-YD4UDIRH.js.map} +0 -0
- /package/dist/{stattable-NDYUCLVZ.js.map → stattable-LFR3RSD6.js.map} +0 -0
- /package/dist/{studyCatalog-TAXRF5NS.js.map → studyCatalog-RINIZ277.js.map} +0 -0
- /package/dist/{summarizeCnvGeneexp-3QLHU6N7.js.map → summarizeCnvGeneexp-ZQFNPR65.js.map} +0 -0
- /package/dist/{summarizeGeneexpSurvival-ARI4MPFX.js.map → summarizeGeneexpSurvival-GIS7XMMH.js.map} +0 -0
- /package/dist/{summarizeMutationCnv-W7V7CKPI.js.map → summarizeMutationCnv-FWF7YIGR.js.map} +0 -0
- /package/dist/{summary-OUYDWLBF.js.map → summarizeMutationDiagnosis-V5L2OKTK.js.map} +0 -0
- /package/dist/{summarizeMutationSurvival-6TTMSRRX.js.map → summarizeMutationSurvival-LAUUF6XN.js.map} +0 -0
- /package/dist/{termCollection-7P3WU6X6.js.map → summary-OMU3ACNE.js.map} +0 -0
- /package/dist/{summary.integration.spec-4GTCG6HY.js.map → summary.integration.spec-6JZAT73L.js.map} +0 -0
- /package/dist/{summaryInput-UK3TLC7M.js.map → summaryInput-QIKL3HDD.js.map} +0 -0
- /package/dist/{sunburst-2UFHMNH3.js.map → sunburst-32IW2R57.js.map} +0 -0
- /package/dist/{survival-SPWYSDVB.js.map → survival-BMOPVAN2.js.map} +0 -0
- /package/dist/{survival-TL6UZ6FQ.js.map → survival-H5AWMQ36.js.map} +0 -0
- /package/dist/{svgraph-Z543MLIN.js.map → svgraph-B75FS3BB.js.map} +0 -0
- /package/dist/{svmr-SZCAOAIF.js.map → svmr-IUEUOHVO.js.map} +0 -0
- /package/dist/{table-IAQ6J4DO.js.map → table-YAAH7WR6.js.map} +0 -0
- /package/dist/{termCollection-3NGHR7QN.js.map → termCollection-7F5ZG2DB.js.map} +0 -0
- /package/dist/{termCollectionFractionSelection-YKIE6BME.js.map → termCollection-KNFUELYY.js.map} +0 -0
- /package/dist/{termCollection.unit.spec-EPYC7LOA.js.map → termCollection.unit.spec-S6M6QC4C.js.map} +0 -0
- /package/dist/{tk-X454XH5N.js.map → termCollectionFractionSelection-X22VMJWY.js.map} +0 -0
- /package/dist/{termCollectionFractionSelection.unit.spec-AG2CZPGZ.js.map → termCollectionFractionSelection.unit.spec-ELU6SD7P.js.map} +0 -0
- /package/dist/{tvs.dt-U77PCG6X.js.map → tk-TT666UVE.js.map} +0 -0
- /package/dist/{tk-TOXMU4GT.js.map → tk-UOPNJ323.js.map} +0 -0
- /package/dist/{tp.ui-FDQ76KPL.js.map → tp.ui-HGAHRKO5.js.map} +0 -0
- /package/dist/{vocabulary-64GO4YDB.js.map → tvs.dt-H7YYR4EB.js.map} +0 -0
- /package/dist/{tvs.dtcnv.categorical-XYZU4XLO.js.map → tvs.dtcnv.categorical-IPJTKGMF.js.map} +0 -0
- /package/dist/{tvs.dtcnv.continuous-4GJILFGP.js.map → tvs.dtcnv.continuous-XY5XZ4GH.js.map} +0 -0
- /package/dist/{tvs.dtfusion-7YROAHVI.js.map → tvs.dtfusion-VFCBMXRM.js.map} +0 -0
- /package/dist/{tvs.dtitd-MIYU4ZHH.js.map → tvs.dtitd-RZVW6FTR.js.map} +0 -0
- /package/dist/{tvs.dtsnvindel-XLDY7KWB.js.map → tvs.dtsnvindel-IDPJWSGC.js.map} +0 -0
- /package/dist/{tvs.dtsv-YMLJ37YR.js.map → tvs.dtsv-QERP756F.js.map} +0 -0
- /package/dist/{tvs.samplelst-KIVEXJKD.js.map → tvs.samplelst-6KNDHBIU.js.map} +0 -0
- /package/dist/{tvs.termCollection-4CQV3EB3.js.map → tvs.termCollection-GWPJK3NE.js.map} +0 -0
- /package/dist/{wsi.direct-5MQVRJZX.js.map → wsi.direct-2RBCBXDA.js.map} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../plots/regression/regression.inputs.values.table.ts", "../plots/regression/regression.inputs.term.ts", "../plots/regression/regression.inputs.ts", "../plots/regression/Regression.ts"],
|
|
4
|
-
"sourcesContent": ["import { select } from 'd3-selection'\nimport { getDefaultViolinSettings } from '#plots/violin/settings/defaults.ts'\nimport { appInit } from '#plots/plot.app.js'\n\n/*\n\tdom elements for values table\n\tholder // main holder\n\t\tloading_div // loading message while updating term info\n\t\ttop_info_div // top info about scale + knots + promopt to select ref group\n\t\tviolin_div // violin plot of values (used when .mode=continuous)\n\t\ttable_div // tabular bar chart of values (used when .mode != continuous)\n\t\tbottom_info_div // total included and excluded samples\n\t\texcluded_div // excluded values with samplecount\n*/\n\nconst row_hover_bgcolor = '#fff6dc'\n// changed color from #999 to address Section 508 contrast issue\nconst graytextcolor = '#555'\n\nexport class InputValuesTable {\n\topts: any\n\tinput: any\n\tsetDOM!: (holder: any) => void\n\tdom!: {\n\t\tholder: any\n\t\tloading_div: any\n\t\ttop_info_div: any\n\t\tviolin_div: any\n\t\ttable_div: any\n\t\tbottom_info_div: any\n\t\texcluded_div: any\n\t}\n\tplotAppApi!: any\n\tviolinApi!: any\n\trender!: () => void\n\n\tconstructor(opts: any) {\n\t\t// opts {holder, input, callback}\n\t\tthis.opts = opts\n\t\tthis.input = opts.input\n\t\tsetRenderers(this)\n\t\tthis.setDOM(opts.holder)\n\t}\n\n\tmain() {\n\t\ttry {\n\t\t\tconst term = this.input.term\n\t\t\t// may allow the values table even if there is a variable error,\n\t\t\t// in case it helps clarify the error message such as having\n\t\t\t// not exactly two samplecount bars available for a binary outcome term\n\n\t\t\tif (!term || !this.input.termStatus) {\n\t\t\t\tthis.dom.holder.style('display', 'none')\n\t\t\t\tthis.dom.loading_div.style('display', 'none')\n\t\t\t\treturn\n\t\t\t} else if (term) {\n\t\t\t\tthis.dom.holder.style('display', 'block')\n\t\t\t\tthis.dom.loading_div.style('display', 'block')\n\t\t\t\tthis.updateValueCount()\n\t\t\t\tthis.dom.loading_div.style('display', 'none')\n\t\t\t\tthis.render()\n\t\t\t\treturn\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tthis.dom.loading_div.style('display', 'none')\n\t\t\tthrow e\n\t\t}\n\t}\n\n\tupdateValueCount() {\n\t\tconst i = this.input\n\t\ttry {\n\t\t\t/* TODO: may need to move validateQ out of a ts.pill */\n\t\t\tif (i.pill && i.pill.validateQ) {\n\t\t\t\ti.pill.validateQ({\n\t\t\t\t\tterm: i.term.term,\n\t\t\t\t\tq: i.term.q,\n\t\t\t\t\tsampleCounts: i.termStatus.sampleCounts\n\t\t\t\t})\n\t\t\t}\n\t\t} catch (e) {\n\t\t\ti.term.error = e\n\t\t}\n\t}\n}\n\nfunction setRenderers(self) {\n\tself.setDOM = holder => {\n\t\tself.dom = {\n\t\t\tholder: holder\n\t\t\t\t.style('margin', '10px')\n\t\t\t\t.style('font-size', '.8em')\n\t\t\t\t.style('text-align', 'left')\n\t\t\t\t.style('color', graytextcolor),\n\n\t\t\tloading_div: holder.append('div').text('Loading..').style('display', 'none'),\n\n\t\t\ttop_info_div: holder.append('div').style('padding-bottom', '5px'),\n\n\t\t\tviolin_div: holder.append('div').style('color', 'black').style('padding-top', '5px'),\n\n\t\t\ttable_div: holder\n\t\t\t\t.append('table')\n\t\t\t\t.style('margin', '5px 0px 15px 0px')\n\t\t\t\t.style('border-collapse', 'collapse')\n\t\t\t\t.style('color', 'black'),\n\n\t\t\tbottom_info_div: holder.append('div'),\n\n\t\t\texcluded_div: holder\n\t\t\t\t.append('table')\n\t\t\t\t.style('display', 'none')\n\t\t\t\t.style('margin', '5px 10px')\n\t\t\t\t.style('border-collapse', 'collapse')\n\t\t}\n\t}\n\n\tself.render = async () => {\n\t\tconst input = self.input\n\n\t\t// render top info\n\t\trenderTopInfo(input)\n\n\t\t// render included values\n\t\tawait renderValuesTable(input)\n\n\t\t// render bottom info\n\t\trenderBottomInfo(input)\n\n\t\t// render excluded values\n\t\trenderExcludedValues(input)\n\t}\n\n\tfunction renderTopInfo(input) {\n\t\tif (input.termStatus.topInfoStatus?.length) {\n\t\t\tself.dom.top_info_div.style('display', 'block').html(input.termStatus.topInfoStatus.join('<br>'))\n\t\t} else {\n\t\t\tself.dom.top_info_div.style('display', 'none')\n\t\t}\n\t}\n\n\tasync function renderValuesTable(input) {\n\t\tif (input.term.q.mode == 'continuous' || input.term.q.mode == 'spline') {\n\t\t\t// continuous or spline mode\n\t\t\t// render values as violin plot\n\t\t\tself.dom.violin_div.style('display', 'block')\n\t\t\tself.dom.table_div.style('display', 'none')\n\t\t\tif (self.plotAppApi) {\n\t\t\t\t// violin plot already created, refresh the plot\n\t\t\t\tconst action = {\n\t\t\t\t\ttype: 'app_refresh',\n\t\t\t\t\tstate: { termfilter: structuredClone(self.input.parent.state?.termfilter) },\n\t\t\t\t\tsubactions: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\t\t\tid: self.violinApi.id,\n\t\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\t\tterm: input.term\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t\tself.plotAppApi.dispatch(action)\n\t\t\t} else {\n\t\t\t\t// violin plot does not exist, create the plot\n\t\t\t\tconst opts = {\n\t\t\t\t\tholder: self.dom.violin_div,\n\t\t\t\t\tvocabApi: self.input.parent.app.vocabApi,\n\t\t\t\t\tstate: {\n\t\t\t\t\t\tvocab: {\n\t\t\t\t\t\t\tgenome: self.input.parent.app.vocabApi.genome,\n\t\t\t\t\t\t\tdslabel: self.input.parent.app.vocabApi.dslabel\n\t\t\t\t\t\t},\n\t\t\t\t\t\ttermfilter: structuredClone(self.input.parent.state?.termfilter),\n\t\t\t\t\t\tplots: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tchartType: 'violin',\n\t\t\t\t\t\t\t\tterm: input.term,\n\t\t\t\t\t\t\t\tsettings: {\n\t\t\t\t\t\t\t\t\tviolin: getDefaultViolinSettings(null, {\n\t\t\t\t\t\t\t\t\t\tsvgw: 350,\n\t\t\t\t\t\t\t\t\t\taxisHeight: 25,\n\t\t\t\t\t\t\t\t\t\trightMargin: 10,\n\t\t\t\t\t\t\t\t\t\tdatasymbol: 'rug',\n\t\t\t\t\t\t\t\t\t\tradius: 8,\n\t\t\t\t\t\t\t\t\t\tplotThickness: 80\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t},\n\t\t\t\t\t// global options for plotAppApi\n\t\t\t\t\t// opts.violin will apply to all violin plots within the plotApp\n\t\t\t\t\t// rx will pass options by component type, which are not tracked in state\n\t\t\t\t\t// examples are callbacks, event listeners, etc\n\t\t\t\t\tviolin: {\n\t\t\t\t\t\tmode: 'minimal'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tself.plotAppApi = await appInit(opts)\n\t\t\t\tconst plotId = self.plotAppApi.getState().plots[0].id\n\t\t\t\tself.violinApi = self.plotAppApi.getComponents(`plots.${plotId}`)\n\t\t\t}\n\t\t} else {\n\t\t\t// mode is neither continuous nor spline\n\t\t\t// render values as a tabular bar chart\n\t\t\tself.dom.violin_div.style('display', 'none')\n\t\t\tconst data = input.termStatus.sampleCounts\n\t\t\tif (!data || !data.length) {\n\t\t\t\tself.dom.table_div.style('display', 'none')\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tself.dom.table_div.style('display', 'block').attr('data-testid', 'sjpp-regression-barchart')\n\t\t\tconst l = self.input.orderedLabels\n\t\t\tconst sortFxn =\n\t\t\t\tl && l.length ? (a, b) => l.indexOf(a.label) - l.indexOf(b.label) : (a, b) => b.samplecount - a.samplecount\n\t\t\tconst tr_data = data.sort(sortFxn)\n\n\t\t\tconst maxCount = Math.max(...tr_data.map(v => v.samplecount), 0)\n\t\t\ttr_data.forEach(v => (v.bar_width_frac = Number((1 - (maxCount - v.samplecount) / maxCount).toFixed(4))))\n\n\t\t\tself.dom.table_div.selectAll('tr').remove()\n\t\t\tconst trs = self.dom.table_div.selectAll('tr').data(tr_data, b => b.key)\n\n\t\t\t//trs.exit().remove()\n\t\t\t//trs.each(trUpdate)\n\t\t\ttrs.enter().append('tr').each(trEnter)\n\t\t}\n\t}\n\n\tfunction renderBottomInfo(input) {\n\t\tif (input.termStatus.bottomSummaryStatus) {\n\t\t\tself.dom.bottom_info_div.style('display', 'block').html(input.termStatus.bottomSummaryStatus)\n\t\t} else {\n\t\t\tself.dom.bottom_info_div.style('display', 'none')\n\t\t}\n\t}\n\n\tfunction renderExcludedValues(input) {\n\t\tconst data = input.termStatus.excludeCounts\n\t\tif (!data || !data.length) {\n\t\t\tself.dom.excluded_div.style('display', 'none')\n\t\t\treturn\n\t\t}\n\t\tself.dom.excluded_div.style('display', 'block').selectAll('tr').remove()\n\t\tconst trs = self.dom.excluded_div.selectAll('tr').data(data, b => b.key)\n\n\t\t//trs.exit().remove()\n\t\t//trs.each(trUpdate)\n\t\ttrs.enter().append('tr').each(trEnter)\n\n\t\tself.dom.excluded_div.selectAll('td').style('color', graytextcolor)\n\t}\n\n\tfunction trEnter(this: any, item) {\n\t\tconst tr = select(this)\n\t\tconst input = this.parentNode.__data__\n\t\t// const t = input.term\n\t\tconst maxBarWidth = 150\n\n\t\ttr.style('text-align', 'left').style('cursor', input.termStatus.allowToSelectRefGrp ? 'pointer' : 'default')\n\n\t\tconst tdSpacing = '1px 10px 1px 0px'\n\t\t// sample count td\n\t\ttr.append('td')\n\t\t\t.style('padding', tdSpacing)\n\t\t\t.style('text-align', 'left')\n\t\t\t.style('color', 'black')\n\t\t\t.text(item.samplecount !== undefined ? 'n=' + item.samplecount : '')\n\n\t\t// label td\n\t\ttr.append('td').style('padding', tdSpacing).style('text-align', 'left').style('color', 'black').text(item.label)\n\n\t\t// sample count bar td\n\t\tconst bar_td = tr.append('td').style('padding', tdSpacing)\n\n\t\t// bar_width\n\t\tconst barWidth = maxBarWidth * item.bar_width_frac\n\t\tbar_td\n\t\t\t.append('div')\n\t\t\t.style('margin', tdSpacing)\n\t\t\t.style('width', barWidth + 'px')\n\t\t\t.style('height', '15px')\n\t\t\t.style('background-color', '#ddd')\n\n\t\taddTrBehavior({ input, item, tr, rendered: false })\n\t}\n\n\t/*\n\t// TODO: to use this function, need to add code that will take into account the order of the rows\n\tfunction trUpdate(item) {\n\t\tselect(this.firstChild).text(item.samplecount !== undefined ? 'n=' + item.samplecount : '')\n\t\tselect(this.firstChild.nextSibling).text(item.label)\n\n\t\tconst input = this.parentNode.__data__\n\t\tconst t = input.term\n\t\tlet rendered = true\n\t\tif ((t.q.mode == 'discrete' || t.q.mode == 'binary') && this.childNodes.length < 4) rendered = false\n\t\taddTrBehavior({ input, item, tr: select(this), rendered })\n\t}\n\t*/\n\n\tfunction addTrBehavior({ input, item, tr, rendered }) {\n\t\t// don't add tr effects for excluded values\n\t\tif (!item.bar_width_frac) return\n\n\t\tconst t = input.term\n\t\tconst hover_flag = input.termStatus.allowToSelectRefGrp\n\t\tlet ref_text\n\n\t\tif (rendered) {\n\t\t\ttr.style('background', 'white')\n\t\t\tref_text = select(tr.node().lastChild)\n\t\t\t\t.select('div')\n\t\t\t\t.style('display', item.key === t.refGrp && hover_flag ? 'inline-block' : 'none')\n\t\t\t\t.style('border', item.key === t.refGrp && hover_flag ? '1px solid #bbb' : '')\n\t\t} else if (input.term.q.mode != 'cutoff') {\n\t\t\tconst reference_td = tr.append('td').style('padding', '1px 5px').style('text-align', 'left')\n\n\t\t\tref_text = reference_td\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', item.key === t.refGrp && hover_flag ? 'inline-block' : 'none')\n\t\t\t\t.style('padding', '2px 10px')\n\t\t\t\t.style('border', item.key === t.refGrp && hover_flag ? '1px solid #bbb' : '')\n\t\t\t\t.style('border-radius', '10px')\n\t\t\t\t.style('color', graytextcolor)\n\t\t\t\t.style('font-size', '.7em')\n\t\t\t\t.text('REFERENCE')\n\n\t\t\tif (hover_flag) {\n\t\t\t\ttr.on('mouseover', () => {\n\t\t\t\t\tif (t.refGrp !== item.key) {\n\t\t\t\t\t\ttr.style('background', row_hover_bgcolor)\n\t\t\t\t\t\tref_text.style('display', 'inline-block').style('border', '').text('Set as reference')\n\t\t\t\t\t} else tr.style('background', 'white')\n\t\t\t\t})\n\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\ttr.style('background', 'white')\n\t\t\t\t\t\tif (t.refGrp !== item.key) ref_text.style('display', 'none')\n\t\t\t\t\t})\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tt.refGrp = item.key\n\t\t\t\t\t\tref_text.style('border', '1px solid #bbb').text('REFERENCE')\n\t\t\t\t\t\t// below will save to state, ui code should react to it\n\t\t\t\t\t\tself.opts.callback(t)\n\t\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n}\n", "import { termsettingInit, get$id } from '#termsetting'\nimport { isDictionaryType, get_bin_label, isNumericTw, getValueConversionFactor, roundValue } from '#shared'\nimport { InputValuesTable } from './regression.inputs.values.table'\nimport { Menu } from '#dom'\nimport { select } from 'd3-selection'\nimport { mayRunSnplstTask } from '../../termsetting/handlers/snplst.sampleSum.ts'\nimport { get_defaultQ4fillTW, isLoneOutcome } from './Regression'\nimport type { Div } from '../../types/d3'\n\n/*\nclass instance is an input\n*/\n\n// changed color from rgb(153,153,153) to address Section 508 contrast issue\nconst graytextcolor = '#555'\n\nexport class InputTerm {\n\topts: any\n\tsection: any\n\tterm: any\n\tparent: any\n\tvocabApi: any\n\tdom!: {\n\t\tholder: Div\n\t\ttermRow: Div\n\t\tpillDiv: Div\n\t\tinteractionDiv: Div\n\t\terr_div: Div\n\t\tinfoDiv: Div\n\t\ttip: Menu\n\t}\n\tpill: any\n\tsetQ: any\n\tvaluesTable!: InputValuesTable\n\thasError!: boolean\n\ttermStatus!: {\n\t\ttopInfoStatus: string[]\n\t\tbottomSummaryStatus: string | undefined\n\t\tsampleCounts: any[] | undefined\n\t\texcludeCounts: any[] | undefined\n\t\tallowToSelectRefGrp: boolean\n\t}\n\torderedLabels!: any[]\n\n\tconstructor(opts) {\n\t\t// opts { section, term, parent }\n\t\tthis.opts = opts\n\t\tthis.section = opts.section\n\t\tthis.term = opts.term // term wrapper {id, term, q}; will be missing for a blank input\n\t\tthis.parent = opts.parent // the inputs instance\n\t\t// the plot-scoped vocabApi from PlotBase, this.parent.parent is the regression plot\n\t\tthis.vocabApi = this.parent.parent.vocabApi\n\t}\n\n\tasync init(holder) {\n\t\t// only run once when a new input variable is added to the user interface via data/enter() in inputs.js\n\n\t\tconst termRow = holder.append('div')\n\t\t// the row contains two cells: left to show ts pill, right to show interaction\n\t\tconst pillDiv = termRow.append('span').style('display', 'inline-block')\n\t\tconst interactionDiv = termRow.append('span').style('margin-left', '20px')\n\n\t\tthis.dom = {\n\t\t\tholder,\n\t\t\ttermRow,\n\t\t\tpillDiv,\n\t\t\tinteractionDiv,\n\t\t\terr_div: holder\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'none')\n\t\t\t\t.style('padding', '5px')\n\t\t\t\t.style('background-color', 'rgba(255,100,100,0.2)'),\n\t\t\tinfoDiv: holder.append('div'),\n\t\t\ttip: new Menu()\n\t\t}\n\n\t\ttry {\n\t\t\tconst { app, config, state, disable_terms } = this.parent\n\n\t\t\t// termsetting constructor option\n\t\t\tconst arg = {\n\t\t\t\tplaceholder: this.section.selectPrompt,\n\t\t\t\tplaceholderIcon: this.section.placeholderIcon,\n\t\t\t\tholder: this.dom.pillDiv,\n\t\t\t\tvocabApi: this.vocabApi,\n\t\t\t\tnoTermPromptOptions: this.opts.noTermPromptOptions,\n\t\t\t\tactiveCohort: state.activeCohort,\n\t\t\t\tdebug: app.opts.debug,\n\t\t\t\tmenuOptions: this.getMenuOptions(),\n\t\t\t\tusecase: { target: 'regression', detail: this.section.configKey, regressionType: config.regressionType },\n\t\t\t\tdisable_terms,\n\t\t\t\tabbrCutoff: 50,\n\t\t\t\tgenomeObj: this.parent.parent.genomeObj, // required for snplocus\n\t\t\t\tdefaultQ4fillTW: get_defaultQ4fillTW(config.regressionType, this.section.configKey),\n\t\t\t\tcallback: term => {\n\t\t\t\t\tthis.parent.editConfig(this, term)\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.furbishTsConstructorArg(arg)\n\t\t\t// use 'await' here because it is safer to assume that\n\t\t\t// termsettingInit() returns a promise, in case the Termsetting\n\t\t\t// class ever has an init() method as detected in rx/index.js\n\t\t\tthis.pill = await termsettingInit(arg)\n\n\t\t\tif (this.section.configKey == 'outcome') {\n\t\t\t\t// special treatment for terms selected for outcome\n\t\t\t\tthis.setQ = getQSetter4outcome(config.regressionType)\n\t\t\t}\n\n\t\t\tthis.valuesTable = new InputValuesTable({\n\t\t\t\tholder: this.dom.infoDiv,\n\t\t\t\tinput: this,\n\t\t\t\tcallback: term => {\n\t\t\t\t\tthis.parent.editConfig(this, term)\n\t\t\t\t}\n\t\t\t})\n\t\t} catch (e) {\n\t\t\tthis.displayError([e])\n\t\t}\n\t}\n\n\tfurbishTsConstructorArg(arg) {\n\t\t// furbish termsetting constructor argument, based on regression type and if term is outcome/input\n\t\tconst type = this.parent.config.regressionType\n\t\tif (this.section.configKey == 'outcome') {\n\t\t\t// this term is outcome\n\t\t\tif (type == 'logistic') {\n\t\t\t\targ.numericEditMenuVersion = ['binary']\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (type == 'linear') {\n\t\t\t\targ.numericEditMenuVersion = ['continuous']\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (type == 'cox') {\n\t\t\t\t//arg.showTimeScale = true\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthrow 'unknown regressionType'\n\t\t}\n\t\tif (this.section.configKey == 'independent') {\n\t\t\t// this temr is independent\n\t\t\t// do not allow condition term\n\t\t\targ.numericEditMenuVersion = ['continuous', 'discrete', 'spline']\n\t\t\t// for geneVariant term, only allow groupsetting\n\t\t\targ.geneVariantEditMenuOnlyGrp = true\n\t\t\treturn\n\t\t}\n\t\tthrow 'unknown section.configKey: ' + this.section.configKey\n\t}\n\n\tdisplayError(errors) {\n\t\tthis.hasError = true\n\t\tthis.dom.err_div.selectAll('*').remove()\n\t\tthis.dom.err_div\n\t\t\t.style('display', 'block')\n\t\t\t.selectAll('div')\n\t\t\t.data(Array.isArray(errors) ? errors : [errors])\n\t\t\t.enter()\n\t\t\t.append('div')\n\t\t\t.text(e => e)\n\t\tthis.parent.handleError()\n\t\tconsole.error(errors)\n\t}\n\n\tasync main() {\n\t\t/* called in inputs.main()\n\t\twhen the regression component is notified of a change\n\t\t*/\n\n\t\tconst tw = this.term // term wrapper\n\n\t\t// clear previous errors\n\t\tif (tw) {\n\t\t\t// a term has been selected\n\t\t\tdelete tw.error\n\t\t}\n\n\t\tthis.dom.err_div.style('display', 'none').text('')\n\t\tthis.hasError = false\n\n\t\tconst errors: unknown[] = []\n\t\ttry {\n\t\t\tif (tw && this.setQ) {\n\t\t\t\tconst { /*app,*/ state } = this.parent\n\t\t\t\tawait this.setQ[tw.term.type](tw, this.vocabApi, this.parent.parent.filter, state)\n\t\t\t}\n\n\t\t\ttry {\n\t\t\t\tawait this.updateTerm()\n\t\t\t} catch (e) {\n\t\t\t\t// will allow pill to update to a new term as needed,\n\t\t\t\t// so that the rendered pill and values table match the error message\n\t\t\t\terrors.push(e)\n\t\t\t}\n\t\t\tawait this.pill.main(this.getPillArgs())\n\t\t\tthis.renderInteractionPrompt()\n\t\t\tawait this.valuesTable.main()\n\t\t\t// $id needs to be filled in here for non-dictionary terms\n\t\t\t// TODO: should have a centralized location for filling in\n\t\t\t// $id for non-dictionary terms\n\t\t\tif (tw && !tw.$id) tw.$id = await get$id(this.vocabApi.getTwMinCopy(tw))\n\t\t\tconst e: any = (tw && tw.error) || this.pill.error\n\t\t\tif (e) errors.push(e)\n\t\t\tif (errors.length) throw errors\n\t\t} catch (errors) {\n\t\t\tthis.displayError(errors)\n\t\t}\n\t}\n\n\tasync updateTerm() {\n\t\t/*\n\t\tonly used in this.main() above\n\t\tto derive bins/groups based on q{} setting of this term\n\t\tcreate following attributes:\n\n\t\tinput.orderedLabels\n\t\tinput.termStatus{ sampleCounts, excludeCounts }\n\t\tinput.term.refGrp\n\t\t*/\n\t\tconst tw = this.term\n\t\tif (!tw) return\n\n\t\tif (!tw.q) throw '.term.q missing on this input'\n\n\t\tif (!tw.q.mode && isDictionaryType(tw.term.type)) {\n\t\t\t// fill in q.mode for dictionary terms\n\t\t\tif (\n\t\t\t\ttw.term.type == 'categorical' ||\n\t\t\t\ttw.term.type == 'condition' ||\n\t\t\t\ttw.term.type == 'survival' ||\n\t\t\t\ttw.term.type == 'samplelst'\n\t\t\t)\n\t\t\t\ttw.q.mode = 'discrete'\n\t\t\telse tw.q.mode = 'continuous'\n\t\t}\n\n\t\t// cacheid identifies the genotype file of a snplst/snplocus term, which is queried by\n\t\t// a route of its own rather than by the term's own q{}\n\t\tconst body = tw.term.type == 'snplst' || tw.term.type == 'snplocus' ? { cacheid: tw.q.cacheid } : {}\n\n\t\t/* get term categories. the whole wrapper is passed, not term + q: tw.type decides how the\n\t\tterm is reduced to categories, and a fraction termCollection is listed one category per\n\t\tsample without it */\n\t\tconst wait = this.dom.holder.append('div').style('padding', '5px').text('Loading...') // getTwCategories may wait long time e.g. gdc. adding this to indicate its loading to avoid just showing a nopill prompt\n\t\tlet data\n\t\ttry {\n\t\t\tdata = await this.vocabApi.getTwCategories(tw, this.parent.parent.filter, body)\n\t\t\tif (!data) throw `no data for term.id='${tw.term.id}'`\n\t\t\tif (data.error) throw data.error\n\t\t} finally {\n\t\t\twait.remove()\n\t\t}\n\n\t\tmayRunSnplstTask(tw, data)\n\n\t\tthis.termStatus = {\n\t\t\ttopInfoStatus: [],\n\t\t\tbottomSummaryStatus: undefined,\n\t\t\tsampleCounts: undefined,\n\t\t\texcludeCounts: undefined,\n\t\t\tallowToSelectRefGrp: false\n\t\t}\n\n\t\t// update status based on special attr from snplst and snplocus terms\n\t\tif (tw.q.numOfSampleWithAnyValidGT) {\n\t\t\tconst invalid_snps_count = tw.term.snps.reduce((i, j) => i + (j.invalid ? 1 : 0), 0)\n\t\t\tthis.termStatus.topInfoStatus.push(\n\t\t\t\t`${tw.q.numOfSampleWithAnyValidGT} samples with valid genotypes` +\n\t\t\t\t\t(invalid_snps_count > 0 ? ` ${invalid_snps_count} invalid SNP${invalid_snps_count > 1 ? 's' : ''}.` : '')\n\t\t\t)\n\t\t}\n\t\tif ('geneticModel' in tw.q) {\n\t\t\tthis.termStatus.topInfoStatus.push(\n\t\t\t\t'Genetic model: ' +\n\t\t\t\t\t(tw.q.geneticModel == 0\n\t\t\t\t\t\t? 'Additive'\n\t\t\t\t\t\t: tw.q.geneticModel == 1\n\t\t\t\t\t\t? 'Dominant'\n\t\t\t\t\t\t: tw.q.geneticModel == 2\n\t\t\t\t\t\t? 'Recessive'\n\t\t\t\t\t\t: 'By genotype')\n\t\t\t)\n\t\t}\n\t\tif (tw.q.restrictAncestry) {\n\t\t\tthis.termStatus.topInfoStatus.push('Analyzing ' + tw.q.restrictAncestry.name)\n\t\t\tif (tw.q.restrictAncestry.PCcount) {\n\t\t\t\tthis.termStatus.topInfoStatus.push(\n\t\t\t\t\t`Adjusting for top ${tw.q.restrictAncestry.PCcount} ancestry principal components`\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\tif (tw.term.reachedVariantLimit) {\n\t\t\tthis.termStatus.topInfoStatus.push(\n\t\t\t\t`<span class=sja_mcdot style=\"background:#aaa;font-size:1em\">\n\t\t\t\t ⚠ Restricted to first ${tw.term.snps.length}\n\t\t\t\tvariants of this region. </span> Try zooming in.`\n\t\t\t)\n\t\t}\n\n\t\tthis.orderedLabels = data.orderedLabels\n\n\t\tif (data.lst) {\n\t\t\t// got sample counts for dictionary terms\n\n\t\t\tthis.summarizeSample(tw, data.lst)\n\n\t\t\t/* isNumericTw(), not isNumericTerm(): a fraction termCollection resolves to one numeric\n\t\t\tvalue per sample, so it is analyzed exactly like a numeric term here \u2014 binned into\n\t\t\treference-group categories, or used raw in continuous/spline mode */\n\t\t\tif (isNumericTw(tw)) {\n\t\t\t\tif (tw.q.mode != 'continuous' && tw.q.mode != 'spline') {\n\t\t\t\t\tthis.termStatus.allowToSelectRefGrp = true\n\t\t\t\t}\n\t\t\t\tif (tw.q.scale && tw.q.scale != 1) this.termStatus.topInfoStatus.push(`Scale: Per ${tw.q.scale}`)\n\t\t\t\tif (tw.q.mode == 'discrete') {\n\t\t\t\t\tthis.termStatus.topInfoStatus.push(`Discrete variable with ${this.termStatus?.sampleCounts?.length} bins`)\n\t\t\t\t}\n\t\t\t\t/* continuous and spline modes are analyzed in the term's converted unit\n\t\t\t\t(see makeRinput() in server/src/routes/termdb.regression.ts), so report the unit\n\t\t\t\tand print the knots by it, rather than by the unit the values are stored in */\n\t\t\t\tconst vc = tw.term.valueConversion\n\t\t\t\tconst isConverted = vc && (tw.q.mode == 'continuous' || tw.q.mode == 'spline')\n\t\t\t\tif (isConverted) {\n\t\t\t\t\tthis.termStatus.topInfoStatus.push(`Analyzed by the unit of ${vc.toUnit}, converted from ${vc.fromUnit}`)\n\t\t\t\t}\n\t\t\t\tif (tw.q.mode == 'spline') {\n\t\t\t\t\tconst f = getValueConversionFactor(tw.term)\n\t\t\t\t\tthis.termStatus.topInfoStatus.push(\n\t\t\t\t\t\t`Cubic spline variable with ${tw.q.knots.length} knots: ${tw.q.knots\n\t\t\t\t\t\t\t.map(x => Number(x.value) * f)\n\t\t\t\t\t\t\t.sort((a, b) => a - b)\n\t\t\t\t\t\t\t.map(v => (f == 1 ? v : roundValue(v, 2)))\n\t\t\t\t\t\t\t.join(', ')}${isConverted ? ` ${vc.toUnit}s` : ''}`\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t} else if (tw.term.type == 'categorical' || tw.term.type == 'geneVariant' || tw.term.type == 'samplelst') {\n\t\t\t\tthis.termStatus.allowToSelectRefGrp = true\n\t\t\t} else if (tw.term.type == 'condition') {\n\t\t\t\tif (this.section.configKey == 'outcome' && this.parent.opts.regressionType == 'logistic') {\n\t\t\t\t\t// allow selecting refgrp\n\t\t\t\t\tthis.termStatus.allowToSelectRefGrp = true\n\t\t\t\t}\n\t\t\t\tif (this.section.configKey == 'outcome' && this.parent.opts.regressionType == 'cox') {\n\t\t\t\t\tif (!['age', 'time'].includes(tw.q.timeScale)) throw 'invalid q.timeScale'\n\t\t\t\t\tconst tdb = this.vocabApi.termdbConfig\n\n\t\t\t\t\tthis.termStatus.topInfoStatus.push(`Time axis: ${tw.q.timeScale == 'time' ? tdb.timeUnit : 'age'}`)\n\n\t\t\t\t\tthis.termStatus.topInfoStatus.push(\n\t\t\t\t\t\t`<span style=\"padding-left: 10px;\">-start: ${\n\t\t\t\t\t\t\ttw.q.timeScale == 'time' ? ' ' : 'age at '\n\t\t\t\t\t\t}entry into the cohort (i.e., ${tdb.cohortStartTimeMsg})</span>`\n\t\t\t\t\t)\n\n\t\t\t\t\tthis.termStatus.topInfoStatus.push(\n\t\t\t\t\t\t`<span style=\"padding-left: 10px;\">-end: ${\n\t\t\t\t\t\t\ttw.q.timeScale == 'time' ? ' ' : 'age at '\n\t\t\t\t\t\t}event or censoring/death</span>`\n\t\t\t\t\t)\n\n\t\t\t\t\tconst grades = Object.keys(tw.term.values).map(Number)\n\t\t\t\t\tconst maxgrade = Math.max(...grades)\n\t\t\t\t\tthis.termStatus.topInfoStatus.push(\n\t\t\t\t\t\t`<div style=\"padding-top: 8px;\">Event: first occurrence of grade ${\n\t\t\t\t\t\t\ttw.q.breaks[0] === maxgrade ? tw.q.breaks[0] : `${tw.q.breaks[0]}-${maxgrade}</div>`\n\t\t\t\t\t\t}`\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.maySet_refGrp(tw)\n\t\t\tif (this.section.configKey == 'outcome') {\n\t\t\t\tif (this.parent.config.regressionType == 'logistic') {\n\t\t\t\t\t// get non-ref group of logistic outcome variable\n\t\t\t\t\t// will be used in tooltip messages of coefficients table\n\t\t\t\t\t// and in Y axis of cubic spline plot\n\t\t\t\t\ttw.nonRefGrp = getLogisticOutcomeNonref(tw)\n\t\t\t\t} else if (this.parent.config.regressionType == 'cox') {\n\t\t\t\t\t// get event label of cox outcome variable\n\t\t\t\t\t// will be used in tooltip messages of coefficients table\n\t\t\t\t\ttw.eventLabel = getCoxOutcomeEventLabel(tw)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tsummarizeSample(tw, datalst) {\n\t\t// sepeate include and exclude categories based on term.values.uncomputable\n\t\tconst excluded_values = new Set()\n\t\tif (tw.term.values) {\n\t\t\tfor (const i in tw.term.values) {\n\t\t\t\tif (tw.term.values[i].uncomputable) excluded_values.add(tw.term.values[i].label)\n\t\t\t}\n\t\t}\n\t\tif (tw.q.mode == 'cox') {\n\t\t\tconst toExclude = datalst.find(x => x.key == -1)\n\t\t\tif (toExclude) excluded_values.add(toExclude.label)\n\t\t}\n\t\tconst sampleCounts = (this.termStatus.sampleCounts = datalst.filter(v => !excluded_values.has(v.label)))\n\t\tconst excludeCounts = (this.termStatus.excludeCounts = datalst.filter(v => excluded_values.has(v.label)))\n\n\t\t// get include, excluded and total sample count\n\t\tconst totalCount = { included: 0, excluded: 0, total: 0 }\n\t\tsampleCounts.forEach(v => (totalCount.included += v.samplecount))\n\t\texcludeCounts.forEach(v => (totalCount.excluded += v.samplecount))\n\t\ttotalCount.total = totalCount.included + totalCount.excluded\n\t\t// for condition term, subtract included count from totalCount.total to get excluded\n\t\tif (tw.term.type == 'condition' && totalCount.total) {\n\t\t\ttotalCount.excluded = totalCount.total - totalCount.included\n\t\t}\n\t\t// update bottomSummaryStatus\n\t\tthis.termStatus.bottomSummaryStatus =\n\t\t\t`${totalCount.included} samples included` +\n\t\t\t(totalCount.excluded ? `. ${totalCount.excluded} samples excluded:` : '')\n\t\tif (tw && tw.q.mode !== 'continuous' && sampleCounts.length < 2)\n\t\t\tthrow `there should be two or more discrete values with samples for variable='${tw.term.name}'`\n\t}\n\n\tmaySet_refGrp(tw) {\n\t\tif (this.section.configKey == 'outcome' && this.parent.config.regressionType == 'cox') {\n\t\t\t// no need to set refgrp\n\t\t\treturn\n\t\t}\n\t\tif (tw.q.mode == 'continuous') {\n\t\t\t// numeric term in continuous mode, refgrp NA is hardcoded in R\n\t\t\ttw.refGrp = 'NA'\n\t\t\treturn\n\t\t}\n\t\tconst sc = this.termStatus.sampleCounts\n\t\tif (!sc) throw new Error('termStatus.sampleCounts missing')\n\t\tif (!('refGrp' in tw) || !sc.find(i => i.key == tw.refGrp)) {\n\t\t\t// refGrp not defined or no longer exists according to sampleCounts[]\n\t\t\tif (tw.term.type == 'geneVariant') {\n\t\t\t\t// for a gene variant term, the wildtype group is the natural reference,\n\t\t\t\t// use it when available rather than falling back to the biggest group\n\t\t\t\tconst wtGrp = getGeneVariantWildtypeGrp(tw, sc)\n\t\t\t\tif (wtGrp) {\n\t\t\t\t\ttw.refGrp = wtGrp\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst o = this.orderedLabels\n\t\t\tif (o && o.length) sc.sort((a, b) => o.indexOf(a.key) - o.indexOf(b.key))\n\t\t\telse sc.sort((a, b) => (a.samplecount < b.samplecount ? 1 : -1))\n\t\t\ttw.refGrp = sc![0].key\n\t\t}\n\t}\n\n\t/*\n\trecomputed on every main() and not just at init(), since switching cohort can change whether the\n\toutcome term is the only one this dataset offers\n\t*/\n\tgetMenuOptions() {\n\t\tconst { config, state } = this.parent\n\t\tif (this.section.configKey != 'outcome') return '{edit,reuse,remove}'\n\t\t// an outcome cannot be removed, only replaced; and when there is nothing to replace it with,\n\t\t// hide the option rather than opening a term tree with a single, already selected term\n\t\treturn isLoneOutcome(config.regressionType, this.vocabApi.termdbConfig, state.activeCohort)\n\t\t\t? '{edit,reuse}'\n\t\t\t: '{edit,reuse,replace}'\n\t}\n\n\tgetPillArgs() {\n\t\tconst section = this.section\n\t\tconst { config, state, disable_terms } = this.parent\n\t\tconst args = Object.assign(\n\t\t\t{\n\t\t\t\tactiveCohort: state.activeCohort,\n\t\t\t\tdisable_terms,\n\t\t\t\tmenuOptions: this.getMenuOptions(),\n\t\t\t\tusecase: {\n\t\t\t\t\ttarget: 'regression',\n\t\t\t\t\tdetail: section.configKey,\n\t\t\t\t\tregressionType: config.regressionType\n\t\t\t\t}\n\t\t\t},\n\t\t\tthis.term\n\t\t)\n\t\targs.filter = this.parent.parent.filter\n\t\treturn args\n\t}\n\n\tremove() {\n\t\tthis.dom.termRow.transition().duration(500).style('opacity', 0).remove()\n\n\t\tfor (const key in this.dom) {\n\t\t\tdelete this.dom[key]\n\t\t}\n\t}\n\n\trenderInteractionPrompt() {\n\t\t// set to hidden in the beginning; redisplay when interaction is enabled\n\t\tthis.dom.interactionDiv.style('display', 'none')\n\n\t\t// identify situations not eligible for showing prompt\n\t\tif (!this.term) return // missing term\n\t\tif (this.section.configKey != 'independent') return\n\t\tif (this.term.q.mode == 'spline') return // not on a spline term\n\t\tif (this.vocabApi.termdbConfig.regression?.settings?.disableInteractions) return\n\t\t{\n\t\t\t// require minimum of 2 independent terms eligible for interaction\n\t\t\tlet count = 0\n\t\t\tfor (const input of this.section.inputLst) {\n\t\t\t\tif (input.term && input.term.q.mode != 'spline') {\n\t\t\t\t\t// spline term cannot be used for interaction\n\t\t\t\t\tcount++\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (count < 2) return\n\t\t}\n\n\t\tconst n = this.term.interactions.length\n\t\tthis.dom.interactionDiv\n\t\t\t.style('display', 'inline')\n\t\t\t.html(n == 0 ? 'Add interactions' : `${n} interaction${n > 1 ? 's' : ''}`)\n\t\t\t.style('padding', '5px')\n\t\t\t.style('background-color', n == 0 ? '' : '#ececec')\n\t\t\t.style('border-radius', n == 0 ? '' : '6px')\n\t\t\t.style('color', n == 0 ? graytextcolor : '#000')\n\t\t\t.style('font-size', n == 0 ? '0.8em' : '')\n\t\t\t.style('cursor', 'pointer')\n\t\t\t.on('click', () => this.renderInteractionOptions())\n\t}\n\n\trenderInteractionOptions() {\n\t\t//TODO: fix this\n\t\t// eslint-disable-next-line\n\t\tconst self = this // captured for function() callbacks where 'this' is rebound to DOM element\n\t\tthis.dom.tip.clear().showunder(this.dom.interactionDiv.node())\n\t\tif (this.parent.config.includeUnivariate) {\n\t\t\tconst label = this.parent.dom.univariateCheckboxDiv.select('label').text().trim()\n\t\t\tthis.dom.tip.d.append('div').text(`Cannot add interactions. Please uncheck the \"${label}\" checkbox.`)\n\t\t\treturn\n\t\t}\n\t\tthis.dom.tip.d\n\t\t\t.append('div')\n\t\t\t.style('padding', '5px')\n\t\t\t.style('font-size', '0.8em')\n\t\t\t.style('color', graytextcolor)\n\t\t\t.html(`Selected variables will each form pairwise interaction with ${this.term.term.name}`)\n\n\t\tthis.dom.tip.d\n\t\t\t.append('div')\n\t\t\t.selectAll('div')\n\t\t\t.data(this.parent.config.independent.filter(tw => tw && tw.$id != this.term.$id && tw.q.mode != 'spline'))\n\t\t\t.enter()\n\t\t\t.append('div')\n\t\t\t.style('margin', '5px')\n\t\t\t.each(function (tw: any) {\n\t\t\t\tconst elem = select(this).append('label')\n\t\t\t\t/*const checkbox =*/ elem\n\t\t\t\t\t.append('input')\n\t\t\t\t\t.attr('type', 'checkbox')\n\t\t\t\t\t.property('checked', self.term.interactions.includes(tw.$id))\n\n\t\t\t\telem.append('span').text(' ' + tw.term.name)\n\t\t\t})\n\n\t\tthis.dom.tip.d\n\t\t\t.append('button')\n\t\t\t.text('Apply')\n\t\t\t.style('margin', '5px')\n\t\t\t.on('click', () => {\n\t\t\t\tthis.dom.tip.hide()\n\t\t\t\tthis.term.interactions = []\n\t\t\t\tthis.dom.tip.d.selectAll('input').each(function (tw: any) {\n\t\t\t\t\tif (select(this).property('checked')) self.term.interactions.push(tw.$id)\n\t\t\t\t})\n\t\t\t\tfor (const tw of this.parent.config.independent) {\n\t\t\t\t\tconst interactions = new Set(tw.interactions)\n\t\t\t\t\tif (this.term.interactions.includes(tw.$id)) interactions.add(this.term.$id)\n\t\t\t\t\telse interactions.delete(this.term.$id)\n\t\t\t\t\ttw.interactions = [...interactions]\n\t\t\t\t}\n\t\t\t\tthis.parent.editConfig(this, this.term)\n\t\t\t})\n\t}\n}\n\nfunction getQSetter4outcome(regressionType) {\n\t// only for outcome term\n\treturn {\n\t\tinteger: regressionType == 'logistic' ? maySetTwoBins : setContMode,\n\t\tfloat: regressionType == 'logistic' ? maySetTwoBins : setContMode,\n\t\tgeneExpression: regressionType == 'logistic' ? maySetTwoBins : setContMode, //Added geneExpression, but still breaks, need to fix\n\t\tcategorical: maySetTwoGroups,\n\t\tcondition: setQ4tteOutcome,\n\t\tsurvival: setQ4tteOutcome\n\t}\n}\n\n// query backend for median and create custom 2 bins with median and boundry\n// for logistic independet numeric terms\nasync function maySetTwoBins(tw, vocabApi, _, state) {\n\t// if the bins are already binary, do not reset\n\tif (tw.q.mode == 'binary' && tw.q.lst && tw.q.lst.length == 2) {\n\t\ttw.q.mode = 'binary'\n\t\treturn\n\t}\n\n\tconst data = await vocabApi.getPercentile(tw.term, [50], state.termfilter)\n\tif (data.error || !data.values.length || !Number.isFinite(data.values[0]))\n\t\tthrow 'cannot get median value: ' + (data.error || 'no data')\n\tconst median = tw.term.type == 'integer' ? Math.round(data.values[0]) : Number(data.values[0].toFixed(2))\n\ttw.q = {\n\t\tmode: 'binary',\n\t\ttype: 'custom-bin',\n\t\tlst: [\n\t\t\t{\n\t\t\t\tstartunbounded: true,\n\t\t\t\tstopinclusive: true,\n\t\t\t\tstop: median\n\t\t\t},\n\t\t\t{\n\t\t\t\tstopunbounded: true,\n\t\t\t\tstartinclusive: false,\n\t\t\t\tstart: median\n\t\t\t}\n\t\t]\n\t}\n\n\ttw.q.lst.forEach(bin => {\n\t\tbin.label = get_bin_label(bin, tw.q)\n\t})\n\n\ttw.refGrp = tw.q.lst[0].label\n}\n\nfunction setQ4tteOutcome(tw, vocabApi, filter, state) {\n\t// set q for time-to-event outcome (i.e., condition or survival term)\n\tif (state.config.regressionType == 'logistic') {\n\t\t// if refGrp missing, set to be first group, guaranteed to be \"No event / Grade 0\"\n\t\tif (!tw.refGrp) tw.refGrp = tw.q.groups[0].name\n\t}\n\tif (state.config.regressionType == 'cox') {\n\t\tif (!tw.q.timeScale) tw.q.timeScale = 'time'\n\t}\n}\n\nasync function maySetTwoGroups(tw, vocabApi, filter, state) {\n\t// if the bins are already binary, do not reset\n\tconst { term, q } = tw\n\n\t// TODO clean up logic?\n\n\t// not condition, currently can only be categorical\n\tif (q.mode == 'binary') {\n\t\tif (q.type == 'values' && Object.keys(term.values).length == 2) return\n\t\tif (q.type == 'predefined-groupset') {\n\t\t\tconst idx = q.predefined_groupset_idx\n\t\t\tconst t_gs = term.groupsetting\n\t\t\tif (t_gs[idx] && Object.keys(t_gs[idx]).length == 2) return\n\t\t}\n\t\tif (q.type == 'custom-groupset') {\n\t\t\tconst gs = q.customset\n\t\t\tif (gs.groups.filter(g => !g.uncomputable).length == 2) return\n\t\t}\n\t}\n\n\t// step 1: check if term has only two computable categories/grades with >0 samples\n\t// if so, use the two categories as outcome and do not apply groupsetting\n\t// check the number of samples for computable categories, only use categories with >0 samples\n\tconst data = await vocabApi.getCategories(term, filter)\n\tif (data.error) throw 'cannot get categories: ' + data.error\n\tconst category2samplecount = new Map() // k: category/grade, v: number of samples\n\tconst computableCategories: string[] = [] // list of computable keys\n\tconst uncomputableCategories: string[] = [] // list of computable keys\n\tfor (const i of data.lst) {\n\t\tcategory2samplecount.set(i.key, i.samplecount)\n\t\tif (term.values && term.values[i.key] && term.values[i.key].uncomputable) uncomputableCategories.push(i.key)\n\t\telse computableCategories.push(i.key)\n\t}\n\tif (computableCategories.length < 2) {\n\t\t// TODO UI should reject this term and prompt user to select a different one\n\t\tq.type = 'values'\n\t\ttw.error = 'less than 2 categories/grades - cannot create separate groups'\n\t\treturn\n\t}\n\tif (computableCategories.length == 2) {\n\t\tq.type = 'values'\n\t\t// will use the categories from term.values{} and do not apply groupsetting\n\t\t// if the two grades happen to be \"normal\" and \"disease\" then it will make sense\n\t\t// but if the two grades are both diseaes then may not make sense\n\t\t// e.g. secondary breast cancer has just 3 and 4\n\t\treturn\n\t}\n\n\t// step 2: term has 3 or more categories/grades. must apply groupsetting\n\tconst t_gs = term.groupsetting\n\n\t// find if term already has a usable groupsetting\n\tif (\n\t\tq.customset &&\n\t\tq.customset.groups &&\n\t\tq.customset.groups.length == 2 &&\n\t\tgroupsetNoEmptyGroup(q.customset, category2samplecount)\n\t) {\n\t\tq.type = 'custom-groupset'\n\t\t// has a usable custom set\n\t\treturn\n\t}\n\n\t// step 3: check if the term has predefined groupsetting\n\tif (t_gs && t_gs.lst) {\n\t\t// has predefined groupsetting\n\t\t// note!!!! check on input.term.term but not input.term.q\n\n\t\tif (\n\t\t\tq.predefined_groupset_idx >= 0 &&\n\t\t\tt_gs.lst[q.predefined_groupset_idx] &&\n\t\t\tt_gs.lst[q.predefined_groupset_idx].groups.length == 2 &&\n\t\t\tgroupsetNoEmptyGroup(t_gs.lst[q.predefined_groupset_idx], category2samplecount)\n\t\t) {\n\t\t\t// has a usable predefined groupset\n\t\t\tq.type = 'predefined-groupset'\n\t\t\t// used for groupsetting if one of the group is filter (group.type) rahter than values,\n\t\t\t// Not in use rightnow, if used in future, uncomment following line\n\t\t\t// if (state.activeCohort != -1) q.groupsetting.activeCohort = state.activeCohort\n\t\t\treturn\n\t\t}\n\n\t\t// step 4: see if any predefined groupset has 2 groups. if so, use that\n\t\tconst i = t_gs.lst.findIndex(g => g.groups.length == 2)\n\t\tif (i != -1 && groupsetNoEmptyGroup(t_gs.lst[i], category2samplecount)) {\n\t\t\t// found a usable groupset\n\t\t\tq.predefined_groupset_idx = i\n\t\t\tq.type = 'predefined-groupset'\n\t\t\t// used for groupsetting if one of the group is filter (group.type) rahter than values,\n\t\t\t// Not in use rightnow, if used in future, uncomment following line\n\t\t\t// if (state.activeCohort != -1) q.groupsetting.activeCohort = state.activeCohort\n\t\t\treturn\n\t\t}\n\t}\n\n\t// step 5: last resort. divide values[] array into two groups\n\tconst customset = {\n\t\tactiveCohort: state.activeCohort,\n\t\t// creating 3 groups instead of 2 groups since current groupset UI expects first group to be excluded group\n\t\t// TODO: refactor client/termsetting/handlers/qualitative.ts to not consider the first group (i.e. group.currentIdx === 0) as the excluded group, but rather to consider group.excluded=true as the excluded group\n\t\tgroups: [\n\t\t\t{\n\t\t\t\tname: 'Excluded categories',\n\t\t\t\ttype: 'values',\n\t\t\t\tvalues: uncomputableCategories.map(v => {\n\t\t\t\t\treturn { key: v }\n\t\t\t\t})\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Group 1',\n\t\t\t\ttype: 'values',\n\t\t\t\tvalues: []\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'Group 2',\n\t\t\t\ttype: 'values',\n\t\t\t\tvalues: []\n\t\t\t}\n\t\t]\n\t}\n\t// TODO use category2samplecount to evenlly divide samples\n\tconst group_i_cutoff = Math.round(computableCategories.length / 2)\n\tfor (const [i, v] of computableCategories.entries()) {\n\t\tif (i < group_i_cutoff) customset.groups[1].values.push({ key: v })\n\t\telse customset.groups[2].values.push({ key: v })\n\t}\n\tq.customset = customset\n\tq.type = 'custom-groupset'\n}\n\nfunction setContMode(tw) {\n\ttw.q.mode = 'continuous'\n}\n\nfunction groupsetNoEmptyGroup(gs, c2s) {\n\t// return true if a groupset does not have empty group\n\tfor (const g of gs.groups) {\n\t\tlet total = 0\n\t\tif (g.type == 'values') {\n\t\t\tfor (const i of g.values) total += c2s.get(i.key) || 0\n\t\t\tif (total == 0) return false\n\t\t}\n\t}\n\treturn true\n}\n\nexport function getGeneVariantWildtypeGrp(tw, sampleCounts) {\n\t/* for a gene variant term, find the wildtype group of the groupset in use\n\treturns the group name, which is also the sample count key\n\treturns undefined when the groupset has no wildtype group (e.g. bi-/mono-allelic),\n\tor when the wildtype group has no samples\n\t*/\n\tconst groupset =\n\t\ttw.q.type == 'predefined-groupset'\n\t\t\t? tw.term.groupsetting?.lst?.[tw.q.predefined_groupset_idx]\n\t\t\t: tw.q.type == 'custom-groupset'\n\t\t\t? tw.q.customset\n\t\t\t: null\n\tif (!groupset?.groups) return\n\tfor (const g of groupset.groups) {\n\t\tif (g.type != 'filter') continue\n\t\t/* a wildtype group matches samples without alteration, indicated by\n\t\ttvs.genotype='wt' for mutation data and tvs.cnvWT for continuous cnv data\n\t\t(see getPredefinedGroupsets() in client/tw/geneVariant.ts) */\n\t\tconst isWt = g.filter?.lst?.some(i => i.tvs && (i.tvs.genotype == 'wt' || i.tvs.cnvWT))\n\t\tif (!isWt) continue\n\t\tif (sampleCounts.find(i => i.key == g.name)) return g.name\n\t}\n}\n\nfunction getLogisticOutcomeNonref(outcome) {\n\t// outcome is the outcome term-wrapper {q{}, refGrp, term{}}\n\tif (outcome.term.type == 'condition') {\n\t\t// condition term does not use q.type\n\t\t// from q.groups[], return the str name that's not refgrp\n\t\tfor (const i of outcome.q.groups) {\n\t\t\tif (i.name != outcome.refGrp) return i.name\n\t\t}\n\t\tthrow 'nonref group not found for logistic outcome'\n\t}\n\t// not condition term;\n\t// depending on q.type, find the non-ref group and return its name\n\tif (outcome.q.type == 'predefined-groupset') {\n\t\tif (!Number.isInteger(outcome.q.predefined_groupset_idx))\n\t\t\tthrow 'outcome.q.predefined_groupset_idx not integer when q.type is \"predefined-groupset\"'\n\t\tif (!outcome.term.groupsetting) throw 'outcome.term.groupsetting missing'\n\t\tconst grpset = outcome.term.groupsetting.lst[outcome.q.predefined_groupset_idx]\n\t\tif (!grpset) throw 'groupset not found by outcome.q.predefined_groupset_idx'\n\t\tconst nonrefgrp = grpset.groups.find(i => i.name != outcome.refGrp)\n\t\tif (!nonrefgrp) throw 'non-ref group not found for predefined-groupset'\n\t\treturn nonrefgrp.name\n\t}\n\tif (outcome.q.type == 'custom-groupset') {\n\t\tif (!outcome.q.customset) throw 'outcome.q.customset missing'\n\t\tconst nonrefgrp = outcome.q.customset.groups.find(i => i.name != outcome.refGrp)\n\t\tif (!nonrefgrp) throw 'non-ref group not found for custom-groupset'\n\t\treturn nonrefgrp.name\n\t}\n\tif (outcome.q.type == 'values') {\n\t\tif (!outcome.term.values) throw 'outcome.term.values{} missing'\n\t\tfor (const k in outcome.term.values) {\n\t\t\tconst v = outcome.term.values[k]\n\t\t\tif (v.label != outcome.refGrp) return v.label\n\t\t}\n\t\tthrow 'unknown nonref group from outcome.term.values'\n\t}\n\tif (outcome.q.type == 'custom-bin') {\n\t\tconst nonrefbin = outcome.q.lst.find(i => i.label != outcome.refGrp)\n\t\tif (!nonrefbin) throw 'non-ref bin is not found for custom-bin'\n\t\treturn nonrefbin.label\n\t}\n\tif (outcome.q.type == 'regular-bin') {\n\t\tthrow 'do not know a way to find computed bin list for type=regular-bin'\n\t}\n\tthrow 'unknown outcome.q.type'\n}\n\nfunction getCoxOutcomeEventLabel(tw) {\n\tlet eventLabel\n\tif (!tw.term.values) throw 'tw.term.values missing'\n\tif (tw.term.type == 'condition') {\n\t\tconst grades = Object.keys(tw.term.values).map(k => {\n\t\t\tconst grade = Number(k)\n\t\t\tif (!Number.isFinite(grade)) throw 'grade is not a number'\n\t\t\treturn grade\n\t\t})\n\t\tconst startGrade = tw.q.breaks[0]\n\t\tconst endGrade = Math.max(...grades)\n\t\teventLabel = `Grades ${startGrade}-${endGrade}`\n\t} else if (tw.term.type == 'survival') {\n\t\tconst exitCodes = Object.keys(tw.term.values).map(k => {\n\t\t\tconst code = Number(k)\n\t\t\tif (!Number.isFinite(code)) throw 'exit code is not a number'\n\t\t\treturn code\n\t\t})\n\t\t// exit codes can be 0=alive,1=dead; 1=alive,2=dead; etc. (see Surv() in R)\n\t\t// so using max exit code value as the exit code of the event\n\t\teventLabel = tw.term.values[Math.max(...exitCodes)].label\n\t} else {\n\t\tthrow 'unexpected tw.term.type'\n\t}\n\treturn eventLabel\n}\n", "import { select } from 'd3-selection'\nimport { InputTerm } from './regression.inputs.term'\nimport { make_one_checkbox, Menu } from '#dom'\nimport type { ComponentApi } from '#rx'\n\n/*\noutcome and independent are two sections sharing same structure\n\"inputLst[]\" collect one or multiple variables for each section\n\"input\" tracks attributes from a variable\nblank input: a blank input is a termsetting instance. once a term is created for it, the term is filled to the same instance, and a new blank input may need to be created (for independent section)\n\n**** function cascade ****\n\nconstructor\n\tcreateSectionConfigs\n\tinitUI\n\t\taddSection\n\t\tsubmit (by clicking button)\n\t\teditConfig (by termsetting callback)\nmain\n\tmayUpdateSandboxHeader\n\tsetDisableTerms\n\trenderSection\n\t\tsyncInputsWithConfig\n\t\t\tInputTerm\n\t\t\tmayAddBlankInput\n\t\t\t\tInputTerm\n\t\tremoveInput\n\t\taddInput\n*/\n\n// non-dictionary term types to use as independent variable\n// check against allowedTermTypes from a dataset\nconst allNonDictionaryTerms = [\n\t{\n\t\ttermtype: 'snplst',\n\t\t//html: 'A list of SNPs <span style=\"font-size:.7em\">All SNPs are analyzed in one model</span>'\n\t\thtml: 'A list of variants'\n\t},\n\n\t{\n\t\ttermtype: 'snplocus',\n\t\t//html: 'Variants in a locus <span style=\"font-size:.7em\">Variants are analyzed individually</span>'\n\t\thtml: 'Variants in a locus'\n\t},\n\t{\n\t\ttermtype: 'prs',\n\t\ttext: 'Polygenic risk score'\n\t}\n]\n\nexport class RegressionInputs {\n\topts: any\n\tapp: ComponentApi\n\tparent: any\n\tinitUI!: () => void\n\tconfig!: any\n\tstate!: any\n\toutcome!: {\n\t\theading: string\n\t\tselectPrompt: string\n\t\tplaceholderIcon: string\n\t\tconfigKey: string\n\t\tlimit: number\n\t\tusecase: any\n\t\tinputLst: InputTerm[]\n\t\tdom: any\n\t}\n\tindependent!: {\n\t\theading: string\n\t\tselectPrompt: string\n\t\tplaceholderIcon: string\n\t\tconfigKey: string\n\t\tlimit: number\n\t\tusecase: any\n\t\tinputLst: InputTerm[]\n\t\tdom: any\n\t}\n\thasError = false\n\tsubmitMsgs!: { [key: string]: string }\n\tdom!: {\n\t\tdiv?: any\n\t\tbody?: any\n\t\tfoot?: any\n\t\tsubmitBtn?: any\n\t\tunivariateCheckboxDiv?: any\n\t\tunivariateCheckbox?: any\n\t\tsubmitMsgs?: any\n\t}\n\tsections!: any[]\n\tdisable_terms: any[] = []\n\trenderSection!: (section: any) => void\n\tresetSubmitButton!: () => void\n\tmayShowUnivariateCheckbox!: () => void\n\tmayShowSubmitMsgs!: () => void\n\teditConfig!: (input: any, variable: any) => void\n\tsubmit!: () => void\n\n\tconstructor(opts: any) {\n\t\tthis.opts = opts\n\t\tthis.app = opts.app\n\t\t// reference to the parent component's mutable instance (not its API)\n\t\tthis.parent = opts.parent\n\n\t\tsetInteractivity(this)\n\t\tsetRenderers(this)\n\n\t\tthis.createSectionConfigs()\n\t\tthis.initUI()\n\t}\n\n\tcreateSectionConfigs() {\n\t\t/* Create configuration data for each section of the input UI\n\t\tsee google doc \"Regression UI\"\n\t\t*/\n\t\t// configuration for the outcome variable section\n\t\tthis.outcome = {\n\t\t\t/*** static configuration ***/\n\t\t\theading: 'Outcome variable',\n\t\t\tselectPrompt:\n\t\t\t\tthis.opts.regressionType == 'linear' ? 'Select continuous outcome variable' : 'Select outcome variable',\n\t\t\tplaceholderIcon: '+',\n\t\t\tconfigKey: 'outcome',\n\t\t\tlimit: 1,\n\t\t\tusecase: { target: 'regression', regressionType: this.opts.regressionType, detail: 'outcome' },\n\n\t\t\t/*** dynamic configuration ***/\n\t\t\tinputLst: [],\n\n\t\t\t/*** tracker for this section's DOM elements ***/\n\t\t\tdom: {}\n\t\t}\n\n\t\t// configuration for the independent variable section\n\t\tthis.independent = {\n\t\t\t/*** static configuration ***/\n\t\t\theading: 'Independent variable(s)',\n\t\t\tselectPrompt: 'Add independent variable',\n\t\t\tplaceholderIcon: '+',\n\t\t\tconfigKey: 'independent',\n\t\t\tlimit: 10,\n\t\t\tusecase: { target: 'regression', regressionType: this.opts.regressionType, detail: 'independent' },\n\n\t\t\t/*** dynamic configuration ***/\n\t\t\tinputLst: [],\n\n\t\t\t/*** tracker for this section's DOM elements ***/\n\t\t\tdom: {}\n\t\t}\n\n\t\t// track sections in an array, for convenience in loops\n\t\t// but not for use in `d3.data()`\n\t\tthis.sections = [this.outcome, this.independent]\n\t}\n\n\tasync main() {\n\t\ttry {\n\t\t\tthis.config = this.parent.config\n\t\t\tthis.state = this.parent.state\n\t\t\tthis.hasError = false\n\t\t\tthis.setDisableTerms()\n\t\t\tconst updates: Promise<any>[] = []\n\t\t\tfor (const section of this.sections) {\n\t\t\t\tawait this.renderSection(section)\n\t\t\t\tfor (const input of section.inputLst) {\n\t\t\t\t\tinput.dom.holder.style('border-left', input.term ? '1px solid #bbb' : '')\n\t\t\t\t\tupdates.push(input.main())\n\t\t\t\t}\n\t\t\t}\n\t\t\tawait Promise.all(updates)\n\t\t\tfor (const section of this.sections) {\n\t\t\t\tfor (const input of section.inputLst) {\n\t\t\t\t\tif ((input.term && input.term.error) || input.hasError) {\n\t\t\t\t\t\tthis.hasError = true\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tthis.hasError = true\n\t\t\tthrow e\n\t\t}\n\t}\n\n\tsetDisableTerms() {\n\t\tthis.disable_terms = []\n\t\tif (this.config.outcome && this.config.outcome.term) this.disable_terms.push(this.config.outcome.term)\n\t\tif (this.config.independent) {\n\t\t\tfor (const vb of this.config.independent) {\n\t\t\t\tthis.disable_terms.push(vb.term)\n\t\t\t}\n\t\t}\n\t}\n\n\thandleError() {\n\t\tthis.hasError = true\n\t\tthis.dom.submitBtn.property('disabled', true)\n\t}\n\n\tgetNoTermPromptOptions(section) {\n\t\t// only for independent section\n\t\tif (section.configKey != 'independent') return\n\t\t// return an array, each ele is an item in the mini menu at termsetting prompt\n\t\t// okay for the array to be empty\n\t\t// need to check if the dataset allows this\n\t\t// if so, add to this array, to be shown as mini menu\n\t\tconst lst: unknown[] = []\n\t\tfor (const i of structuredClone(allNonDictionaryTerms)) {\n\t\t\tconst item = i as any\n\t\t\t// TODO do this via vocab api\n\t\t\tif (!this.state.allowedTermTypes.includes(item.termtype)) {\n\t\t\t\t// not allowed by this dataset\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (section.inputLst.find(i => i.term && i.term.term.type == item.termtype)) {\n\t\t\t\t// same term is already present in this section, do not add a second\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (item.termtype == 'snplocus') {\n\t\t\t\tif (this.config.includeUnivariate) {\n\t\t\t\t\t// snplocus is computationally intensive so it should not\n\t\t\t\t\t// be allowed when univariate results are included\n\t\t\t\t\titem.invalid = true\n\t\t\t\t\tconst label = this.dom.univariateCheckboxDiv.select('label').text().trim()\n\t\t\t\t\titem.invalidMsg = `Cannot add this variable. Please uncheck the \"${label}\" checkbox.`\n\t\t\t\t}\n\t\t\t}\n\t\t\tlst.push(item)\n\t\t}\n\t\tif (lst.length) {\n\t\t\t// added at least one non-dict term type\n\t\t\t// for the mini menu in termsetting prompt to show both dict- and non-dict-terms, add dict option\n\t\t\tlst.unshift({\n\t\t\t\tisDictionary: true,\n\t\t\t\ttext: 'Dictionary variable'\n\t\t\t})\n\t\t}\n\t\treturn lst\n\t}\n}\n\nfunction setRenderers(self) {\n\tself.initUI = () => {\n\t\tconst controls = self.opts.holder.append('div').style('display', 'block')\n\n\t\tself.dom = {\n\t\t\tdiv: self.opts.holder, //.style('margin', '10px 0px'),\n\t\t\tcontrols,\n\t\t\tbody: controls.append('div'),\n\t\t\tfoot: controls\n\t\t\t\t.append('div')\n\t\t\t\t.style('margin', '0px 20px')\n\t\t\t\t.style('display', 'flex')\n\t\t\t\t.style('align-items', 'center')\n\t\t\t\t.style('gap', '20px')\n\t\t}\n\n\t\tself.dom.submitBtn = self.dom.foot\n\t\t\t.append('div')\n\t\t\t.append('button')\n\t\t\t.style('display', 'none')\n\t\t\t.style('padding', '5px 15px')\n\t\t\t.style('border-radius', '15px')\n\t\t\t.style('cursor', 'pointer')\n\t\t\t.text('Run analysis')\n\t\t\t.on('click', self.submit)\n\n\t\t// checkbox for including univariate results\n\t\tself.dom.univariateCheckboxDiv = self.dom.foot.append('div').style('display', 'none')\n\t\tself.dom.univariateCheckbox = make_one_checkbox({\n\t\t\tlabeltext: 'Include univariate results',\n\t\t\tchecked: false,\n\t\t\tholder: self.dom.univariateCheckboxDiv,\n\t\t\tcallback: checked => {\n\t\t\t\tconst invalid = self.config.independent.find(v => v.interactions.length || v.term.type == 'snplocus')\n\t\t\t\tif (invalid) {\n\t\t\t\t\t// interactions or snplocus variable in use\n\t\t\t\t\t// disable univariate analysis\n\t\t\t\t\tself.dom.univariateCheckbox.property('checked', false)\n\t\t\t\t\tconst tip = new Menu()\n\t\t\t\t\ttip.showunder(self.dom.univariateCheckboxDiv.node())\n\t\t\t\t\tconst msg = `Cannot include univariate results. Please remove ${\n\t\t\t\t\t\tinvalid.interactions.length ? 'all interactions' : `the \"${invalid.term.name}\" variable`\n\t\t\t\t\t}.`\n\t\t\t\t\ttip.d.append('div').text(msg)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tself.app.dispatch({\n\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\tid: self.parent.id,\n\t\t\t\t\tchartType: 'regression',\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\thasUnsubmittedEdits: true,\n\t\t\t\t\t\tincludeUnivariate: checked\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\n\t\tself.dom.submitMsgs = self.dom.foot\n\t\t\t.append('div')\n\t\t\t.style('color', '#cc0000')\n\t\t\t.style('font-style', 'italic')\n\t\t\t.style('font-size', '0.8em')\n\n\t\tself.submitMsgs = {}\n\n\t\t/*\n\t\t\tnot using d3.data() here since each section may only\n\t\t\tbe added and re-rendered, but not removed\n\t\t*/\n\t\tfor (const section of self.sections) {\n\t\t\tconst div = self.dom.body.append('div')\n\t\t\tself.addSection(section, div)\n\t\t}\n\t}\n\n\tself.addSection = function (section, div) {\n\t\tdiv\n\t\t\t.style('display', 'none')\n\t\t\t.style('margin', '3px 5px')\n\t\t\t.style('padding', '3px 5px')\n\t\t\t.attr('data-testid', section.configKey)\n\n\t\tsection.dom = {\n\t\t\tholder: div,\n\t\t\theadingDiv: div\n\t\t\t\t.append('div')\n\t\t\t\t.style('margin', '3px 5px 20px 5px')\n\t\t\t\t.style('font-size', '17px')\n\t\t\t\t// changed color from #bbb to address Section 508 contrast issue\n\t\t\t\t.style('color', '#555')\n\t\t\t\t.text(section.heading),\n\n\t\t\tinputsDiv: div.append('div')\n\t\t}\n\t}\n\n\t/* \n\t\tupdate each section's visibility,\n\t\tremove and add inputs as needed,\n\t\tand later may do more section restyling based on\n\t\tthe state of inputs that are being edited\n\t*/\n\tself.renderSection = function (section) {\n\t\t// decide to show/hide this section\n\t\t// only show when this section is for outcome,\n\t\t// or this is independent and only show it when the outcome has been selected\n\t\t// effect is to force user to first select outcome, then independent, but not to select independent first\n\t\tsection.dom.holder.style('display', section.configKey == 'outcome' || self.config.outcome ? 'block' : 'none')\n\n\t\tsyncInputsWithConfig(section)\n\t\t// section.inputLst[] is now synced with plot config\n\n\t\tconst inputs = section.dom.inputsDiv\n\t\t\t.selectAll(':scope > div')\n\t\t\t// key function (2nd arg) uses a function to determine how datum and element are joined by variable id\n\t\t\t.data(section.inputLst, input => input.term && (input.term.term.id || input.term.term.name))\n\n\t\tinputs.exit().each(removeInput)\n\n\t\tinputs.enter().append('div').each(addInput)\n\t}\n\n\tfunction syncInputsWithConfig(section) {\n\t\t// get the input variables from config.outcome or config.independent\n\t\tconst selected = self.config[section.configKey]\n\n\t\t// force the outcome variable into an array for ease of handling\n\t\t// the independent variables array will be used as-is\n\t\tconst selectedArray = Array.isArray(selected) ? selected : selected ? [selected] : []\n\n\t\tmayConvertInteractionIds(selectedArray, section)\n\n\t\t// process each selected variable\n\t\tfor (const variable of selectedArray) {\n\t\t\tif (section.configKey == 'independent') {\n\t\t\t\tif (!variable.interactions) variable.interactions = []\n\t\t\t\tfor (const id of variable.interactions) {\n\t\t\t\t\tconst tw = selectedArray.find(i => i.$id == id)\n\t\t\t\t\tif (!tw) throw 'interacting partner not found in independents: ' + id\n\t\t\t\t\tif (!tw.interactions) tw.interactions = []\n\t\t\t\t\tif (!tw.interactions.includes(variable.$id)) tw.interactions.push(variable.$id)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst input = section.inputLst.find(input => input.term?.$id == variable.$id)\n\t\t\tif (!input) {\n\t\t\t\tsection.inputLst.push(\n\t\t\t\t\tnew InputTerm({\n\t\t\t\t\t\tsection,\n\t\t\t\t\t\tterm: variable,\n\t\t\t\t\t\tparent: self\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\t// reassign the variable reference to the mutable variable copy\n\t\t\t\t// from state.config.outcome | .independent\n\t\t\t\tinput.term = variable\n\t\t\t}\n\t\t}\n\n\t\tmayAddBlankInput(section, self)\n\t}\n\n\t// interactions[] from url will contain term ids\n\t// convert these to $ids\n\tfunction mayConvertInteractionIds(selectedArray, section) {\n\t\tif (section.configKey != 'independent') return\n\t\tconst id2$id = new Map() // id => $id\n\t\t// first populate id2$id map\n\t\tfor (const v of selectedArray) {\n\t\t\tif (v.id) id2$id.set(v.id, v.$id)\n\t\t}\n\t\t// then convert all ids in interactions[] to $ids\n\t\tfor (const v of selectedArray) {\n\t\t\tif (v.interactions?.length) {\n\t\t\t\tfor (const [i, id] of v.interactions.entries()) {\n\t\t\t\t\tconst $id = id2$id.get(id)\n\t\t\t\t\tif ($id) v.interactions[i] = $id\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\n\tasync function addInput(this: HTMLElement, input: any) {\n\t\tawait input.init(\n\t\t\tselect(this).style('width', 'fit-content').style('margin', '0px 15px 35px 25px').style('padding', '0px 5px')\n\t\t)\n\t}\n\n\tfunction removeInput(this: HTMLElement, input) {\n\t\t/* NOTE: editConfig deletes this input from the section.inputLst array */\n\t\tinput.remove()\n\t\tfor (const key in input.dom) {\n\t\t\t//input.dom[key].remove()\n\t\t\tdelete input.dom[key]\n\t\t}\n\t\tconst div = select(this)\n\t\tdiv.transition().duration(500).style('opacity', 0).remove()\n\t}\n\n\tself.resetSubmitButton = () => {\n\t\t// do not disable button upon ui error. only disable after clicking button and analysis is running\n\t\tself.dom.submitBtn\n\t\t\t.text('Run analysis')\n\t\t\t.style('display', self.config.outcome && self.config.independent.length ? 'block' : 'none')\n\t\t\t.property('disabled', self.hasError)\n\t}\n\n\tself.mayShowUnivariateCheckbox = () => {\n\t\tif (!self.config.outcome || self.config.independent.length < 2) {\n\t\t\t// hide univariate checkbox if analysis does not have\n\t\t\t// multiple covariates\n\t\t\tself.dom.univariateCheckboxDiv.style('display', 'none')\n\t\t\treturn\n\t\t}\n\t\tself.dom.univariateCheckboxDiv.style('display', 'block')\n\t\t// set checked status\n\t\tself.dom.univariateCheckbox.property('checked', self.config.includeUnivariate)\n\t}\n\n\tself.mayShowSubmitMsgs = () => {\n\t\tself.dom.submitMsgs\n\t\t\t.selectAll('div')\n\t\t\t.data(Object.values(self.submitMsgs))\n\t\t\t.join('div')\n\t\t\t.text(d => d)\n\t}\n}\n\nfunction setInteractivity(self) {\n\t/* this function is called when any change is made to a term of an input\n\te.g. by termsetting callback\n\t*/\n\tself.editConfig = async (input, variable) => {\n\t\tif (!variable) {\n\t\t\t// the variable has been deleted from this input; will delete this input from section\n\t\t\tconst i = input.section.inputLst.findIndex(d => d === input)\n\t\t\tif (i == -1) throw `deleting an unknown input`\n\t\t\t// delete this input\n\t\t\tinput.section.inputLst.splice(i, 1)\n\t\t\tif (input.term) {\n\t\t\t\t// if the input.term has interaction pairs, then\n\t\t\t\t// delete this term.id from those other input term.interactions\n\t\t\t\tfor (const other of input.section.inputLst) {\n\t\t\t\t\tif (!other.term || !other.term.interactions?.length) continue\n\t\t\t\t\tconst i = other.term.interactions.indexOf(input.term.$id)\n\t\t\t\t\tif (i != -1) other.term.interactions.splice(i, 1)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t// variable is selected for this input\n\n\t\t\tconst prevTerm = input.term\n\n\t\t\t/*\n\t\t\t\tFor a new term (replacing a blank input), the refGrp will be missing.\n\t\t\t\tIn that case, updateTerm() in regression.inputs.term.js will assign a\n\t\t\t\tdefault refGrp based on sample counts. \n\n\t\t\t\tFor a replacement term that happens to match the previous term's ID, \n\t\t\t\tfor example adjusting a group other than the refGrp, the refGrp may be \n\t\t\t\treused if there happen to be sample counts for it.\n\t\t\t*/\n\t\t\tif (prevTerm && variable.term.id === prevTerm.term.id) {\n\t\t\t\tfor (const k in prevTerm) {\n\t\t\t\t\t// reapply any unedited key-values to the variable, such as refGrp\n\t\t\t\t\tif (!(k in variable)) variable[k] = prevTerm[k]\n\t\t\t\t}\n\t\t\t}\n\t\t\tinput.term = variable\n\n\t\t\tif (variable.q.mode == 'spline' && variable.interactions) {\n\t\t\t\t// this is a spline term, delete existing interactions with this term\n\t\t\t\tfor (const other of input.section.inputLst) {\n\t\t\t\t\tif (!other.term || !other.term.interactions) continue\n\t\t\t\t\tconst i = other.term.interactions.indexOf(input.term.$id)\n\t\t\t\t\tif (i != -1) other.term.interactions.splice(i, 1)\n\t\t\t\t}\n\t\t\t\tvariable.interactions = []\n\t\t\t}\n\t\t}\n\n\t\tconst selected: unknown[] = []\n\t\tfor (const i of input.section.inputLst) {\n\t\t\tif (i.term) selected.push(i.term)\n\t\t}\n\t\tconst key = input.section.configKey\n\t\t// the target config to fill-in/replace/delete may hold one or more selected input variables\n\t\t// config.outcome is not an array (exactly one selected variable)\n\t\t// config.independent is an array (0 or more selected variables)\n\t\tconst configValue = Array.isArray(self.config[key]) ? selected : selected[0]\n\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: self.parent.id,\n\t\t\tchartType: 'regression',\n\t\t\tconfig: {\n\t\t\t\thasUnsubmittedEdits: true,\n\t\t\t\t// replace config.outcome or config.independent\n\t\t\t\t[key]: JSON.parse(JSON.stringify(configValue))\n\t\t\t}\n\t\t})\n\t}\n\n\tself.submit = () => {\n\t\t// disable button upon clicking to prevent double-clicking\n\t\tself.dom.submitBtn.property('disabled', true)\n\t\tif (self.hasError) {\n\t\t\talert('Please fix the input variable errors (highlighted in red background).')\n\t\t\treturn\n\t\t}\n\n\t\tconst config = JSON.parse(JSON.stringify(self.config))\n\t\tconfig.hasUnsubmittedEdits = false\n\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: self.parent.id,\n\t\t\tchartType: 'regression',\n\t\t\tconfig\n\t\t})\n\t}\n}\n\n/*\nsection is one of this.sections[]\ndecide if a blank input needs to be added to this section\nfor outcome section, there can just be one input, it's either blank or filled\nfor independent, there should always be one blank input, among other filled inputs\n*/\nfunction mayAddBlankInput(section, self) {\n\tif (section.inputLst.length >= section.limit) {\n\t\t// number of inputs in this section is beyond limit, do not create more\n\t\treturn\n\t}\n\tconst blankInput = section.inputLst.find(i => !i.term)\n\tif (blankInput) {\n\t\t// this section already have a blank input (without .term{})\n\t\t// as a section is limited to have only one blank input, do not add a new one\n\t\tconst noTermPromptOptions = self.getNoTermPromptOptions(section)\n\t\tif (noTermPromptOptions) {\n\t\t\t// will need to update noTermPromptOptions on this input\n\t\t\t// due to the fact that we don't want two snplst or snplocus terms in one model\n\t\t\tblankInput.pill.main({ noTermPromptOptions })\n\t\t}\n\t\treturn\n\t}\n\t// now add a blank input to this section\n\tsection.inputLst.push(\n\t\tnew InputTerm({\n\t\t\tsection,\n\t\t\tparent: self,\n\t\t\tnoTermPromptOptions: self.getNoTermPromptOptions(section)\n\t\t})\n\t)\n}\n", "import { RegressionInputs } from './regression.inputs'\nimport { RegressionResults } from './regression.results'\nimport { getCompInit, copyMerge, type RxComponent, type ComponentApi, type AppApi } from '#rx'\nimport { sayerror } from '#dom'\nimport { fillTermWrapper } from '#termsetting'\nimport { getCombinedTermFilter } from '#filter'\nimport { PlotBase } from '#plots/PlotBase.js'\nimport { numericTypes, dictionaryNumericTypes } from '#shared'\nimport { getActiveCohortStr } from '#mass/charts'\nimport type { ClientGenome } from '../../types/clientGenome'\nimport type { Filter } from '#types'\n\n/*\nCode architecture:\n\nregression.js\n\tregression.inputs.js\n\t\tregression.inputs.term.js\n\t\t\tregression.inputs.values.table.js\n\tregression.results.js\n*/\n\nclass Regression extends PlotBase implements RxComponent {\n\tstatic type = 'regression'\n\n\ttype: string\n\tgenomeObj: ClientGenome\n\tinputs!: RegressionInputs\n\tresults!: RegressionResults\n\tfilter!: Filter\n\tconfig: any\n\n\tconstructor(opts: any, api: ComponentApi) {\n\t\tsuper(opts, api)\n\t\tthis.type = Regression.type\n\t\tthis.genomeObj = opts.app.opts.genome\n\t}\n\n\tasync init(appState) {\n\t\tthis.dom = {\n\t\t\theader: this.opts.header, // header is optional\n\t\t\terrordiv: this.opts.holder.append('div'),\n\t\t\tinputs: this.opts.holder.append('div').style('margin', '20px 10px'),\n\t\t\tresults: this.opts.holder.append('div').style('margin-left', '40px')\n\t\t}\n\n\t\t// this.id is from opts.id and assigned by rx\n\t\tconst config = appState.plots.find(p => p.id === this.id)\n\n\t\tthis.inputs = new RegressionInputs({\n\t\t\tapp: this.app,\n\t\t\tparent: this,\n\t\t\tid: this.id,\n\t\t\tholder: this.dom.inputs,\n\t\t\tregressionType: config.regressionType\n\t\t})\n\n\t\tthis.results = new RegressionResults({\n\t\t\tapp: this.app,\n\t\t\tparent: this,\n\t\t\tid: this.id,\n\t\t\tholder: this.dom.results,\n\t\t\tregressionType: config.regressionType\n\t\t})\n\t}\n\n\tgetState(appState) {\n\t\tconst config = appState.plots.find(p => p.id === this.id)\n\t\tif (!config) {\n\t\t\tthrow `No plot with id='${this.id}' found. Did you set this.id before this.api = getComponentApi(this)?`\n\t\t}\n\t\tif (!config.regressionType) throw 'regressionType is required'\n\t\tconst parentConfig = this.parentId && appState.plots.find(p => p.id === this.parentId)\n\t\tconst termfilter = getCombinedTermFilter(appState, config.filter || parentConfig?.filter)\n\t\treturn {\n\t\t\tvocab: appState.vocab,\n\t\t\tformIsComplete: config.outcome && config.independent.length,\n\t\t\tactiveCohort: appState.activeCohort,\n\t\t\ttermfilter,\n\t\t\tconfig,\n\t\t\tallowedTermTypes: appState.termdbConfig.allowedTermTypes,\n\t\t\tminTimeSinceDx: appState.termdbConfig.minTimeSinceDx\n\t\t}\n\t}\n\n\t/* do not set reactsTo\n\tso it reacts to all actions matching with the plot id (controlled by store method)\n\tincluding filter/cohort change\n\t*/\n\n\tasync main() {\n\t\ttry {\n\t\t\tthis.config = JSON.parse(JSON.stringify(this.state.config))\n\t\t\tthis.mayUpdateSandboxHeader()\n\t\t\tthis.getFilter()\n\t\t\tawait this.inputs.main()\n\t\t\tawait this.results.main()\n\t\t\tthis.inputs.resetSubmitButton()\n\t\t\tthis.inputs.mayShowUnivariateCheckbox()\n\t\t\tthis.inputs.mayShowSubmitMsgs()\n\t\t} catch (e: any) {\n\t\t\tif (this.inputs.hasError) {\n\t\t\t\t// will hide the results ui\n\t\t\t\tthis.results.main()\n\t\t\t}\n\t\t\tsayerror(this.dom.errordiv, 'Error: ' + (e.error || e))\n\t\t\tif (e.stack) console.log(e.stack)\n\t\t}\n\t}\n\n\tmayUpdateSandboxHeader() {\n\t\tif (!this.dom.header) return\n\t\t// based on data in config state, but not section\n\t\tconst o = this.config.outcome\n\t\tthis.dom.header.html(\n\t\t\t(o ? o.term.name : '') +\n\t\t\t\t'<span style=\"opacity:.6;font-size:.7em;margin-left:10px;\">' +\n\t\t\t\tthis.config.regressionType.toUpperCase() +\n\t\t\t\t' REGRESSION</span>'\n\t\t)\n\t}\n\n\tgetFilter() {\n\t\t// regression analysis may have multiple\n\t\t// filters (e.g. term filter + restrict ancestry filter)\n\t\t// so track all filters here\n\t\tconst filters: unknown[] = []\n\n\t\t// term filter\n\t\tif (this.state.termfilter?.filter) filters.push(this.state.termfilter.filter)\n\n\t\t// restrict ancestry filter\n\t\tconst tws = [this.config.outcome, ...this.config.independent]\n\t\tconst tws_restrictAncestry = tws.filter(tw => tw?.q.restrictAncestry)\n\t\tif (tws_restrictAncestry.length) {\n\t\t\tif (tws_restrictAncestry.length > 1) {\n\t\t\t\tconst ancestries = new Set(tws_restrictAncestry.map(tw => tw.q.restrictAncestry.name))\n\t\t\t\tif (ancestries.size > 1) throw 'samples cannot be restricted to more than 1 ancestry'\n\t\t\t}\n\t\t\tconst tw = tws_restrictAncestry[0]\n\t\t\tfilters.push({ type: 'tvs', tvs: tw.q.restrictAncestry.tvs })\n\t\t\t// notify user that samples will be restricted by ancestry\n\t\t\tthis.inputs.submitMsgs.restrictAncestry = `Restricting analysis to samples of ${tw.q.restrictAncestry.name}`\n\t\t} else {\n\t\t\tdelete this.inputs.submitMsgs.restrictAncestry\n\t\t}\n\n\t\t// store filters\n\t\t// vocabApi will use getNormalFilter() to remove any empty filters and convert a single entry tvslst into a tvs\n\t\tthis.filter = { type: 'tvslst', join: 'and', lst: filters as any } as Filter\n\t}\n}\n\nexport const regressionInit = getCompInit(Regression)\n// this alias will allow abstracted dynamic imports\nexport const componentInit = regressionInit\n\nlet _ID_ = 1\n\nexport async function getPlotConfig(opts: any, app: AppApi, activeCohort: number) {\n\t// TODO need to supply term filter of app to fillTermWrapper\n\tif (!opts.outcome) opts.outcome = mayGetLoneOutcome(opts.regressionType, app, activeCohort)\n\n\tconst id = 'id' in opts ? opts.id : `_REGRESSION_${_ID_++}`\n\tconst config: any = { id }\n\t// without an outcome, config.outcome is left unset rather than \"outcome:undefined\",\n\t// so that the input ui shows a blank outcome pill for user to fill in\n\tif (opts.outcome) {\n\t\tawait fillTermWrapper(opts.outcome, app.vocabApi, getDefaultQ4tw(opts.outcome, opts.regressionType, 'outcome'))\n\t\tconfig.outcome = opts.outcome\n\t}\n\n\tif (opts.independent) {\n\t\tif (!Array.isArray(opts.independent)) throw '.independent[] is not array'\n\t\tfor (const t of opts.independent) {\n\t\t\tawait fillTermWrapper(\n\t\t\t\tt,\n\t\t\t\tapp.vocabApi,\n\t\t\t\tt.q?.mode ? undefined : getDefaultQ4tw(t, opts.regressionType, 'independent')\n\t\t\t)\n\t\t}\n\t\tconfig.independent = opts.independent\n\t} else {\n\t\tconfig.independent = []\n\t}\n\t// may apply term-specific changes to the default object\n\treturn copyMerge(config, opts)\n}\n\n/*\nreturns a tw-shaped {term} when the dataset offers just one term usable as this method's outcome,\nso the outcome pill is prefilled rather than making user open the tree to pick the only choice\n(e.g. gdc, with its single hardcoded \"Overall Survival\" term); otherwise returns undefined\n\nonly applies to cox, whose outcome is a survival or condition term. linear and logistic accept\nnumeric/categorical terms too, so they always have more than one candidate.\n\ntermdbConfig.loneTermByType{} is computed at server launch, keyed by cohort; see findLoneTermByType()\n*/\nfunction mayGetLoneOutcome(regressionType, app, activeCohort) {\n\tif (regressionType != 'cox') return\n\tconst byType = getLoneTermByType(app.vocabApi.termdbConfig, activeCohort)\n\tconst t1 = byType?.survival\n\tconst t2 = byType?.condition\n\tif (t1 && t2) return // has both. no preference thus do not auto select one\n\tif (t1) return { term: structuredClone(t1) }\n\tif (t2) return { term: structuredClone(t2) }\n\treturn\n}\n\n// term types accepted as cox outcome, per getUsecaseSupportedTerms() of termdb.usecase.ts\nconst coxOutcomeTypes = ['survival', 'condition']\n\n// returns termdbConfig.loneTermByType{} entry for the active cohort, or undefined when the ds has\n// no lone term or the cohort key cannot be determined\nfunction getLoneTermByType(termdbConfig, activeCohort?) {\n\tif (!termdbConfig?.loneTermByType) return // no lone term in this dataset\n\t// a caller may not know the active cohort (e.g. getPlotConfig() when restoring a session),\n\t// in which case the cohort key cannot be determined for a ds with subcohorts\n\tif (termdbConfig.selectCohort && !Number.isInteger(activeCohort)) return\n\treturn termdbConfig.loneTermByType[getActiveCohortStr({ termdbConfig, activeCohort })]\n}\n\n/*\nreturns true when the dataset has only one term usable as this method's outcome, so the input ui\nmust not offer \"Replace\" on the outcome pill: the term tree would have nothing else to show\n\na term type is absent from loneTermByType{} when the cohort has either 0 or 2+ terms of it, so a\nlone term of one type only proves there is no alternative if the ds has no term of the other type\nat all; that is what allowedTermTypes[] reports. when in doubt \"Replace\" is kept, as offering it\nneedlessly is much less confusing than withholding it while other outcome terms exist\n*/\nexport function isLoneOutcome(regressionType, termdbConfig, activeCohort?) {\n\tif (regressionType != 'cox') return false // other methods also accept numeric/categorical terms\n\tconst byType = getLoneTermByType(termdbConfig, activeCohort)\n\tif (!byType) return false\n\tconst loneTypes = coxOutcomeTypes.filter(type => byType[type])\n\tif (loneTypes.length != 1) return false // no lone term, or one of each type thus replaceable\n\tconst otherType = coxOutcomeTypes.find(type => type != loneTypes[0])\n\treturn !termdbConfig.allowedTermTypes?.includes(otherType)\n}\n\nexport function get_defaultQ4fillTW(regressionType, useCase = '') {\n\tconst defaultQ: any = {}\n\n\t// numeric term\n\tdefaultQ['numeric'] = regressionType == 'logistic' && useCase == 'outcome' ? { mode: 'binary' } : { mode: 'discrete' }\n\n\t// non-dictionary numeric terms will default to 2-bin using median cutoff\n\tfor (const t of numericTypes) {\n\t\tif (dictionaryNumericTypes.has(t)) continue // already covered by defaultQ['numeric']\n\t\tdefaultQ[t] =\n\t\t\tregressionType == 'logistic' && useCase == 'outcome'\n\t\t\t\t? { mode: 'binary' }\n\t\t\t\t: { mode: 'discrete', type: 'custom-bin', preferredBins: 'median' }\n\t}\n\n\t// categorical term\n\tdefaultQ['categorical'] =\n\t\tregressionType == 'logistic' && useCase == 'outcome' ? { mode: 'binary' } : { mode: 'discrete' }\n\n\t// condition term\n\tif (useCase == 'outcome') {\n\t\tif (regressionType == 'cox') {\n\t\t\t// do not preset timeScale to 'time' here because\n\t\t\t// that can cause copyMerge to overwrite saved setting\n\t\t\t// fillTW will auto fill missing value\n\t\t\tdefaultQ.condition = { mode: 'cox' }\n\t\t}\n\t\tif (regressionType == 'logistic') {\n\t\t\tdefaultQ.condition = { mode: 'binary' }\n\t\t}\n\t}\n\n\t/* geneVariant term. only a grouped geneVariant tw is usable here, so one arriving with no\n\tgrouping of its own gets the first predefined groupset. see getDefaultQ4tw() for why this\n\tmust not reach a tw that already has a groupset */\n\tdefaultQ['geneVariant'] = { type: 'predefined-groupset' }\n\n\treturn defaultQ\n}\n\n/*\nThe defaultQ for filling one tw, which is the shared one above minus any entry that would\noverwrite what this tw already says.\n\nfill() copyMerges the defaultQ into tw.q, so an entry only means \"default\" for a tw that has\nnot made the choice itself. The callers test tw.q.mode for that, which a geneVariant tw never\nhas: it states its grouping in q.type. Without dropping the geneVariant entry here, a tw\ncarrying a custom groupset -- from a url, or from a saved session being rehydrated by\ngetPlotConfig() -- is silently replaced by the predefined groupset on every fill, so the\nanalysis that comes back is not the one the tw asked for.\n*/\nfunction getDefaultQ4tw(tw, regressionType, useCase) {\n\tconst defaultQ = get_defaultQ4fillTW(regressionType, useCase)\n\tif (tw?.term?.type == 'geneVariant' && tw.q?.type) delete defaultQ.geneVariant\n\treturn defaultQ\n}\n\nexport async function makeChartBtnMenu(holder, chartsInstance) {\n\t/*\n\tholder: the holder in the tooltip\n\tchartsInstance: MassCharts instance\n\t*/\n\tconst allMethods = [\n\t\t{ label: 'Linear', type: 'linear' },\n\t\t{ label: 'Logistic', type: 'logistic' },\n\t\t{ label: 'Cox', type: 'cox' }\n\t]\n\tconst useMethods = allMethods.filter(i => chartsInstance.state.currentCohortChartTypes.includes(i.type))\n\tif (useMethods.length == 0) return holder.append('div').text('Error: no methods available')\n\tif (useMethods.length == 1) {\n\t\t// only 1 method supported. directly show ui for this method but not menu\n\t\tchartsInstance.dom.tip.hide()\n\t\tchartsInstance.prepPlot({ config: await getPrepConfig(useMethods[0].type, chartsInstance) })\n\t\treturn\n\t}\n\t// multiple methods. show menu to list them\n\tfor (const { label, type } of useMethods) {\n\t\tholder\n\t\t\t.append('div')\n\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t.text(label)\n\t\t\t.on('click', async () => {\n\t\t\t\tchartsInstance.dom.tip.hide()\n\t\t\t\tchartsInstance.prepPlot({ config: await getPrepConfig(type, chartsInstance) })\n\t\t\t})\n\t}\n}\n\n/*\nconfig for the input ui of a regression method, launched by the \"plot_prep\" action\n\nthe outcome is filled in here rather than in getPlotConfig(), as \"plot_prep\" only calls\ngetPlotConfig() for a config holding nothing but the chart type (see plot_prep in mass/store.ts)\n*/\nasync function getPrepConfig(regressionType, chartsInstance) {\n\tconst config: any = { chartType: 'regression', regressionType, independent: [] }\n\tconst { app, state } = chartsInstance\n\tconst outcome = mayGetLoneOutcome(regressionType, app, state.activeCohort)\n\tif (!outcome) return config\n\ttry {\n\t\tawait fillTermWrapper(outcome, app.vocabApi, get_defaultQ4fillTW(regressionType, 'outcome'))\n\t\tconfig.outcome = outcome\n\t} catch (e) {\n\t\t// prefilling is a convenience; on failure launch the ui with a blank outcome pill\n\t\tconsole.error(`cannot prefill ${regressionType} outcome with \"${outcome.term.id}\": ${e}`)\n\t}\n\treturn config\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["graytextcolor", "e", "errors", "t_gs", "setRenderers", "i", "input", "tw"]
|
|
7
|
-
}
|