@sjcrh/proteinpaint-client 2.166.0 → 2.167.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-VLW5XJ4O.js +1364 -0
- package/dist/AIProjectAdmin-X3TBCRPR.js +780 -0
- package/dist/AppHeader-YA7FCKVM.js +813 -0
- package/dist/BoxPlot-PAZYARCX.js +44 -0
- package/dist/CorrelationVolcano-S35GWKV5.js +616 -0
- package/dist/DifferentialAnalysis-DTDFAUXT.js +237 -0
- package/dist/Disco-OE6YY3MH.js +3089 -0
- package/dist/Disco.UI-2CCWETSM.js +238 -0
- package/dist/DziViewer-OHPZOH72.js +16328 -0
- package/dist/GB-LIHKHJ32.js +1099 -0
- package/dist/HicApp-6AYCPCW6.js +2218 -0
- package/dist/NumBinaryEditor-ONJB4DKM.js +259 -0
- package/dist/NumBinaryEditor.unit.spec-Y6DGBAIB.js +277 -0
- package/dist/NumContEditor-6WGAI3PH.js +98 -0
- package/dist/NumContEditor.unit.spec-6LT5MALH.js +160 -0
- package/dist/NumCustomBinEditor-K4OD7SWD.js +29 -0
- package/dist/NumCustomBinEditor.unit.spec-O6QYV6Q4.js +275 -0
- package/dist/NumDiscreteEditor-AFLINO62.js +145 -0
- package/dist/NumDiscreteEditor.unit.spec-3VWWSS24.js +193 -0
- package/dist/NumRegularBinEditor-IRKC5SVF.js +29 -0
- package/dist/NumRegularBinEditor.unit.spec-2ZTI7HR2.js +220 -0
- package/dist/NumSplineEditor-DBW6XE4N.js +181 -0
- package/dist/NumSplineEditor.unit.spec-645ZQXXL.js +190 -0
- package/dist/NumericDensity-27SM2P45.js +29 -0
- package/dist/NumericDensity.unit.spec-DM7PPSMV.js +212 -0
- package/dist/NumericHandler-KFQ2OSUR.js +30 -0
- package/dist/NumericHandler.unit.spec-RNXGCYH7.js +210 -0
- package/dist/SC-SUUATZYR.js +714 -0
- package/dist/Volcano-DEKTKEEZ.js +1018 -0
- package/dist/WSIViewer-SWX4OXHY.js +46959 -0
- package/dist/WsiSamplesPlot-OCVLBBBD.js +153 -0
- package/dist/adSandbox-VGHHJWLL.js +29 -0
- package/dist/alphaGenome-YOJWFJCS.js +170 -0
- package/dist/app-3TXV35H5.js +28 -0
- package/dist/app-NUTP544R.js +54 -0
- package/dist/app.js +16 -16
- package/dist/bam-LXDFDUBH.js +842 -0
- package/dist/barchart-P4BTYT5K.js +48 -0
- package/dist/barchart.data-6WIS5D4I.js +30 -0
- package/dist/barchart.events-V4ANDWUH.js +44 -0
- package/dist/barchart.integration.spec-QU3Y3YHM.js +1600 -0
- package/dist/bars.renderer-4N4QOUNI.js +12 -0
- package/dist/bars.settings-SDU7PZOS.js +10 -0
- package/dist/block-OGJAZG3E.js +6291 -0
- package/dist/block.init-SNZKGO2G.js +29 -0
- package/dist/block.mds.expressionrank-WYV55X5Y.js +350 -0
- package/dist/block.mds.geneboxplot-2LVYSSSU.js +819 -0
- package/dist/block.mds.junction-YY3P64U5.js +1536 -0
- package/dist/block.mds.svcnv-JFNOLZX3.js +6792 -0
- package/dist/block.svg-JBR6OYAD.js +155 -0
- package/dist/block.tk.aicheck-2XDMLOND.js +274 -0
- package/dist/block.tk.ase-TC3NY65S.js +356 -0
- package/dist/block.tk.bam-YA32442V.js +1897 -0
- package/dist/block.tk.bedgraphdot-TRNM4O4F.js +375 -0
- package/dist/block.tk.bigwig.ui-6JJG42M3.js +202 -0
- package/dist/block.tk.hicstraw-HEQXBJZN.js +814 -0
- package/dist/block.tk.junction-7LWL3N6V.js +2355 -0
- package/dist/block.tk.junction.textmatrixui-6CTLQ2M7.js +190 -0
- package/dist/block.tk.ld-SG4ZJ5VB.js +90 -0
- package/dist/block.tk.menu-FNKM5H5D.js +1020 -0
- package/dist/block.tk.pgv-KNLGEASZ.js +935 -0
- package/dist/brainImaging-RO5P7ZR6.js +417 -0
- package/dist/chat-JS4NIRVH.js +142 -0
- package/dist/chat-JS4NIRVH.js.map +7 -0
- package/dist/chunk-2HJ7OD7H.js +252 -0
- package/dist/chunk-2MN5JLZB.js +2878 -0
- package/dist/chunk-353ULT52.js +480 -0
- package/dist/chunk-3JFEWVHR.js +80 -0
- package/dist/chunk-4PHD5H4A.js +226 -0
- package/dist/chunk-56IFQMJK.js +413 -0
- package/dist/chunk-5GQEXGQC.js +256 -0
- package/dist/chunk-5GQEXGQC.js.map +7 -0
- package/dist/chunk-5HXU7P5T.js +276 -0
- package/dist/chunk-5KUQSXQC.js +293 -0
- package/dist/chunk-6ADTREVX.js +1968 -0
- package/dist/chunk-6ADTREVX.js.map +7 -0
- package/dist/chunk-6ISTNHM6.js +144 -0
- package/dist/chunk-6VQ4C735.js +1536 -0
- package/dist/chunk-7M6V7OGP.js +1088 -0
- package/dist/chunk-B5YJ4S2E.js +190 -0
- package/dist/chunk-B65X5UQH.js +518 -0
- package/dist/chunk-BTYCW3D5.js +85 -0
- package/dist/chunk-BW2MEKH4.js +102 -0
- package/dist/chunk-C4NAQESE.js +157 -0
- package/dist/chunk-CDVICC3E.js +272 -0
- package/dist/chunk-D53HBTYQ.js +238 -0
- package/dist/chunk-D7HC37OF.js +297 -0
- package/dist/chunk-DACGCI3Q.js +215 -0
- package/dist/chunk-DDOM4XYV.js +1177 -0
- package/dist/chunk-DDOM4XYV.js.map +7 -0
- package/dist/chunk-DKI7YOTJ.js +196 -0
- package/dist/chunk-DNU4IPD2.js +165 -0
- package/dist/chunk-DOLIDO2R.js +2784 -0
- package/dist/chunk-DRDIOSDW.js +129 -0
- package/dist/chunk-DRFGAPYN.js +158 -0
- package/dist/chunk-ECFK2NV5.js +82 -0
- package/dist/chunk-ETBTUFRA.js +1415 -0
- package/dist/chunk-FMZEW7AB.js +1275 -0
- package/dist/chunk-FN5XPUPH.js +83 -0
- package/dist/chunk-FN5XPUPH.js.map +7 -0
- package/dist/chunk-FRLEROW5.js +279 -0
- package/dist/chunk-FRLEROW5.js.map +7 -0
- package/dist/chunk-GCQYBMGL.js +6364 -0
- package/dist/chunk-H2QGRBCK.js +95 -0
- package/dist/chunk-HPEMEDXB.js +123 -0
- package/dist/chunk-HXT3XNAX.js +228 -0
- package/dist/chunk-ITJ2SXU5.js +467 -0
- package/dist/chunk-ITJ2SXU5.js.map +7 -0
- package/dist/chunk-IZ77ZFBY.js +142 -0
- package/dist/chunk-JMO7ENSD.js +381 -0
- package/dist/chunk-KHOR7BCS.js +217 -0
- package/dist/chunk-LD45BCVM.js +177 -0
- package/dist/chunk-MJM2U67B.js +2327 -0
- package/dist/chunk-MRDHGWNV.js +634 -0
- package/dist/chunk-MXSMHJIP.js +748 -0
- package/dist/chunk-N4D5G5IT.js +402 -0
- package/dist/chunk-NCL2K6UD.js +14 -0
- package/dist/chunk-NNDNKEFI.js +419 -0
- package/dist/chunk-NNDNKEFI.js.map +7 -0
- package/dist/chunk-O552UNW2.js +303 -0
- package/dist/chunk-OA7TPCTX.js +55 -0
- package/dist/chunk-OA7TPCTX.js.map +7 -0
- package/dist/chunk-OARG7PAV.js +401 -0
- package/dist/chunk-OLUMAQOQ.js +91 -0
- package/dist/chunk-OSNUFZAX.js +203 -0
- package/dist/chunk-PN6GLQWD.js +166 -0
- package/dist/chunk-PX7A6LBY.js +15078 -0
- package/dist/chunk-PX7A6LBY.js.map +7 -0
- package/dist/chunk-PZRXLO7V.js +229 -0
- package/dist/chunk-PZY4L6NK.js +1151 -0
- package/dist/chunk-Q6FKQ63P.js +161 -0
- package/dist/chunk-QCTJ6JA2.js +323 -0
- package/dist/chunk-RKV3CP4C.js +258 -0
- package/dist/chunk-RYT4A7AQ.js +2789 -0
- package/dist/chunk-SBEA552U.js +4172 -0
- package/dist/chunk-SEL5UNRC.js +142 -0
- package/dist/chunk-SO4QKH47.js +133 -0
- package/dist/chunk-SWDSU33C.js +797 -0
- package/dist/chunk-SWDSU33C.js.map +7 -0
- package/dist/chunk-TGZA4ETW.js +311 -0
- package/dist/chunk-TGZA4ETW.js.map +7 -0
- package/dist/chunk-TMEYYK4R.js +2676 -0
- package/dist/chunk-TRS2KOXE.js +487 -0
- package/dist/chunk-TRS2KOXE.js.map +7 -0
- package/dist/chunk-TWWRXWWS.js +451 -0
- package/dist/chunk-TWWRXWWS.js.map +7 -0
- package/dist/chunk-UAKYIZJI.js +149 -0
- package/dist/chunk-V4F264MW.js +1143 -0
- package/dist/chunk-W4IQ4XYS.js +467 -0
- package/dist/chunk-WTPVXDJT.js +31 -0
- package/dist/chunk-WVZV43PF.js +459 -0
- package/dist/chunk-X62MQS7A.js +613 -0
- package/dist/chunk-XAIW4R76.js +422 -0
- package/dist/chunk-XF36ROHS.js +4947 -0
- package/dist/chunk-XF36ROHS.js.map +7 -0
- package/dist/chunk-XQGO3DQ2.js +619 -0
- package/dist/chunk-YBDLY45S.js +368 -0
- package/dist/chunk-YEYC4PLD.js +1133 -0
- package/dist/chunk-YEYC4PLD.js.map +7 -0
- package/dist/chunk-YFZH3WDM.js +55 -0
- package/dist/chunk-YUL2RO7I.js +1720 -0
- package/dist/chunk-YUL2RO7I.js.map +7 -0
- package/dist/chunk-ZFFHOEBE.js +117 -0
- package/dist/chunk-ZLBDDGSP.js +1412 -0
- package/dist/chunk-ZOD2EZOP.js +1197 -0
- package/dist/condition-KDKI25VM.js +323 -0
- package/dist/controls-26FVLZRQ.js +35 -0
- package/dist/controls.btns-H4TWTHTW.js +10 -0
- package/dist/controls.config-O6YC7P4M.js +31 -0
- package/dist/correlation-DVDT43OT.js +102 -0
- package/dist/cuminc-T6EYUBUX.js +1143 -0
- package/dist/cuminc.integration.spec-P4YPZXDY.js +669 -0
- package/dist/customdata.inputui-XPXZ7KB5.js +278 -0
- package/dist/dataDownload-46POC5GF.js +320 -0
- package/dist/dataDownload.integration.spec-L7P5YMF7.js +184 -0
- package/dist/databrowser.ui-DQEQXZCP.js +426 -0
- package/dist/dictionary-MBERWWV4.js +90 -0
- package/dist/e2pca-5HU65GVJ.js +341 -0
- package/dist/ep-ECP7H37A.js +1247 -0
- package/dist/expclust.gdc.spec-553FSEDH.js +298 -0
- package/dist/facet-ND335XOF.js +437 -0
- package/dist/frequencyChart-2OHEOWEU.js +371 -0
- package/dist/frequencyChart.integration.spec-NW4DDLRX.js +301 -0
- package/dist/geneExpClustering-GHGBONBF.js +242 -0
- package/dist/geneExpression-UGYGT6DM.js +54 -0
- package/dist/geneExpression-X6HAUFPK.js +310 -0
- package/dist/geneORA-YKXRPEYY.js +272 -0
- package/dist/geneVariant-363FWTVR.js +29 -0
- package/dist/geneVariant-J4O45233.js +32 -0
- package/dist/genefusion.ui-DWAZJDO4.js +242 -0
- package/dist/geneset-64VRPPTK.js +186 -0
- package/dist/genomeBrowser.spec-AN3YXXBS.js +272 -0
- package/dist/grin2-E2WNBPLR.js +1547 -0
- package/dist/grin2-Y57FKOV6.js +1044 -0
- package/dist/grin2-Y57FKOV6.js.map +7 -0
- package/dist/gsea-PNORGHHB.js +43 -0
- package/dist/hierCluster-B7YMJ3UK.js +56 -0
- package/dist/hierCluster-VAQBNVKU.js +60 -0
- package/dist/hierCluster.config-D7MDBQ35.js +32 -0
- package/dist/hierCluster.integration.spec-UHRGPV6T.js +389 -0
- package/dist/hierCluster.interactivity-NJFEZILS.js +45 -0
- package/dist/hierCluster.renderers-GWFH5ZX7.js +21 -0
- package/dist/imagePlot-LWJPXMNK.js +134 -0
- package/dist/importPlot-JBVMBUCU.js +8 -0
- package/dist/launch.adhoc-6GLLB7TX.js +36 -0
- package/dist/leftlabel.sample-3SO3AJ2U.js +249 -0
- package/dist/lollipop-LJEVK7YO.js +159 -0
- package/dist/maf-3EW7QN3S.js +435 -0
- package/dist/maf-3EW7QN3S.js.map +7 -0
- package/dist/maftimeline-YMX542CP.js +584 -0
- package/dist/matrix-CR2EK5EU.js +60 -0
- package/dist/matrix-YI4D3YQI.js +55 -0
- package/dist/matrix.cells-SCLZA3P4.js +30 -0
- package/dist/matrix.config-TOC4QWE7.js +33 -0
- package/dist/matrix.controls-27D3Q4GD.js +31 -0
- package/dist/matrix.data-ETVML2F7.js +35 -0
- package/dist/matrix.dom-QO7BXZ27.js +11 -0
- package/dist/matrix.groups-QMZMZ6Q7.js +26 -0
- package/dist/matrix.integration.spec-DDXKS5GP.js +2936 -0
- package/dist/matrix.interactivity-XTNDVF55.js +36 -0
- package/dist/matrix.layout-NGPK4EEU.js +35 -0
- package/dist/matrix.legend-CS6DNC5V.js +22 -0
- package/dist/matrix.renderers-ILFHUPHQ.js +29 -0
- package/dist/matrix.serieses-3SERD6CV.js +21 -0
- package/dist/matrix.sort-UVS6WHIS.js +27 -0
- package/dist/matrix.sort.unit.spec-DAMINC6B.js +464 -0
- package/dist/matrix.sorterUi-JDGLTLJM.js +18 -0
- package/dist/matrix.sorterUi.unit.spec-M3RXU6B2.js +335 -0
- package/dist/mavb-EC5VS3RS.js +723 -0
- package/dist/mds.fimo-7SXXTBUH.js +509 -0
- package/dist/mds.samplescatterplot-CALFSFR6.js +1541 -0
- package/dist/mds.survivalplot-NRA67V4T.js +474 -0
- package/dist/mutationSignature-43SECPTY.js +72 -0
- package/dist/numericDictTermCluster-2ER4FUKO.js +72 -0
- package/dist/oncomatrix-FOCP66RC.js +287 -0
- package/dist/oncomatrix.spec-XB232WT7.js +439 -0
- package/dist/plot.2dvaf-GSQS5J6Y.js +368 -0
- package/dist/plot.app-RHPEFX47.js +35 -0
- package/dist/plot.barplot-2Q5YF3MU.js +93 -0
- package/dist/plot.boxplot-LTYLWTF4.js +143 -0
- package/dist/plot.brainImaging-EFRI4QV7.js +51 -0
- package/dist/plot.disco-HHYCMRCZ.js +100 -0
- package/dist/plot.dzi-BCTPDUDK.js +33 -0
- package/dist/plot.ssgq-ES2ZP7MO.js +130 -0
- package/dist/plot.vaf2cov-W72Y2IHA.js +250 -0
- package/dist/plot.wsi-TPZXI45Q.js +36 -0
- package/dist/polar-MT3K2WDL.js +179 -0
- package/dist/profile.spec-DOQYKG6P.js +71 -0
- package/dist/profileBarchart-A4UWV2YA.js +260 -0
- package/dist/profileForms-VONTWVOF.js +365 -0
- package/dist/profilePlot-OK5VKWO4.js +50 -0
- package/dist/profileRadar-VLEZJCD7.js +256 -0
- package/dist/profileRadarFacility-QPSSUTB6.js +256 -0
- package/dist/qualitative-RJKAWHQR.js +34 -0
- package/dist/regression-GV73BYCQ.js +57 -0
- package/dist/regression.inputs-PVIJHCRE.js +49 -0
- package/dist/regression.inputs.term-V5I3EP6M.js +49 -0
- package/dist/regression.inputs.values.table-Y37EJUQB.js +46 -0
- package/dist/regression.integration.spec-JD32ODD2.js +777 -0
- package/dist/regression.results-AHAYXYGI.js +31 -0
- package/dist/regression.spec-FGYEES5G.js +699 -0
- package/dist/report-JYIEDDW5.js +220 -0
- package/dist/runChart-CVAWIBA3.js +54 -0
- package/dist/runchart.integration.spec-5Z4IHQU5.js +362 -0
- package/dist/sampleScatter.spec-QNFWS2Y7.js +193 -0
- package/dist/sampleView-GKYHS3WO.js +42 -0
- package/dist/samplelst-CHBS5BGY.js +102 -0
- package/dist/samplematrix-IK4YDAID.js +2189 -0
- package/dist/scatter-NDA5YSCP.js +55 -0
- package/dist/scatter.integration.spec-GV3EIFGT.js +1026 -0
- package/dist/selectGenomeWithTklst-X7RAGKRC.js +125 -0
- package/dist/singleCellPlot-7F735HTR.js +50 -0
- package/dist/singlecell-EO3WYGS7.js +1563 -0
- package/dist/singlecell-YMYLKTSC.js +80 -0
- package/dist/snp-6KN4AWBB.js +73 -0
- package/dist/snplocus-CLM4WHVH.js +199 -0
- package/dist/spliceevent.a53ss.diagram-PKFVC2N4.js +142 -0
- package/dist/spliceevent.exonskip.diagram-XV2Z7AYB.js +268 -0
- package/dist/spliceevent.noeventdiagram-L5L2BJL5.js +451 -0
- package/dist/ssGSEA-W6N4CXMD.js +53 -0
- package/dist/stattable-324FS2HA.js +89 -0
- package/dist/summarizeCnvGeneexp-57LZ5B2Q.js +136 -0
- package/dist/summarizeGeneexpSurvival-UQX3VZUK.js +90 -0
- package/dist/summarizeMutationDiagnosis-5SWO42E4.js +32 -0
- package/dist/summarizeMutationSurvival-EOU5QOB6.js +92 -0
- package/dist/summary-FRIKVPYZ.js +55 -0
- package/dist/summary.integration.spec-WSI3JNTO.js +405 -0
- package/dist/summaryInput-3L7CM52X.js +170 -0
- package/dist/sunburst-HA7UGSXX.js +275 -0
- package/dist/survival-2HZ446Y3.js +41 -0
- package/dist/survival-LJI5JEZZ.js +49 -0
- package/dist/survival.integration.spec-7XVO2WNF.js +601 -0
- package/dist/svgraph-TRPAXTNP.js +1378 -0
- package/dist/svmr-TJOCKTE2.js +3833 -0
- package/dist/table-35RHJK4M.js +193 -0
- package/dist/termCollection-JS6N5TAP.js +80 -0
- package/dist/termInfo-5USFZGDB.js +9 -0
- package/dist/tk-4ARNGTEQ.js +37 -0
- package/dist/tp.ui-QZEMGVEH.js +1450 -0
- package/dist/tvs.dtcnv.continuous-4K7B7FXF.js +65 -0
- package/dist/tvs.numeric-FCC2EY62.js +355 -0
- package/dist/tvs.samplelst-IUSDLB6P.js +95 -0
- package/dist/violin-I5JO56GZ.js +47 -0
- package/dist/violin.integration.spec-5WVLT3DW.js +1425 -0
- package/dist/violin.interactivity-EFFBMTN2.js +39 -0
- package/dist/violin.renderer-Z3AIV5RH.js +31 -0
- package/dist/vocabulary-4PHACFSG.js +32 -0
- package/package.json +3 -3
- package/dist/2dmaf-E4NOGWWO.js +0 -1364
- package/dist/AIProjectAdmin-3QDXMCOK.js +0 -780
- package/dist/AppHeader-IFZ57DJE.js +0 -813
- package/dist/BoxPlot-GXDTPRA5.js +0 -44
- package/dist/CorrelationVolcano-S4GUYIPT.js +0 -616
- package/dist/DifferentialAnalysis-YLKYWPUT.js +0 -237
- package/dist/Disco-OQMP3HRQ.js +0 -3089
- package/dist/Disco.UI-XB3XQP33.js +0 -238
- package/dist/DziViewer-UIRNTFNS.js +0 -16328
- package/dist/GB-KDPJTOLP.js +0 -1099
- package/dist/HicApp-XJERMLKH.js +0 -2218
- package/dist/NumBinaryEditor-5MWWWNLW.js +0 -259
- package/dist/NumBinaryEditor.unit.spec-ROGT5FOH.js +0 -277
- package/dist/NumContEditor-RRCB4CKG.js +0 -98
- package/dist/NumContEditor.unit.spec-AJTKOF7W.js +0 -160
- package/dist/NumCustomBinEditor-3GJITZ7V.js +0 -29
- package/dist/NumCustomBinEditor.unit.spec-DNBDZSHT.js +0 -275
- package/dist/NumDiscreteEditor-TARWA6CZ.js +0 -145
- package/dist/NumDiscreteEditor.unit.spec-TCSLTQ25.js +0 -193
- package/dist/NumRegularBinEditor-QF5ALVV4.js +0 -29
- package/dist/NumRegularBinEditor.unit.spec-GFNDBWNM.js +0 -220
- package/dist/NumSplineEditor-MOEUXR34.js +0 -181
- package/dist/NumSplineEditor.unit.spec-XPJOOXS4.js +0 -190
- package/dist/NumericDensity-JDE263EQ.js +0 -29
- package/dist/NumericDensity.unit.spec-RX6UGV56.js +0 -212
- package/dist/NumericHandler-XM7LUYHN.js +0 -30
- package/dist/NumericHandler.unit.spec-5EYRMII7.js +0 -210
- package/dist/SC-Z4KBNK7P.js +0 -714
- package/dist/Volcano-WYJLKM4K.js +0 -1018
- package/dist/WSIViewer-3RMG3VOA.js +0 -46959
- package/dist/WsiSamplesPlot-PAWNKI7R.js +0 -153
- package/dist/adSandbox-7H5H46SE.js +0 -29
- package/dist/alphaGenome-PODWDV5T.js +0 -170
- package/dist/app-JPURIGQW.js +0 -28
- package/dist/app-YL7S55T5.js +0 -54
- package/dist/bam-XEO47VYA.js +0 -842
- package/dist/barchart-B5M6SSJH.js +0 -48
- package/dist/barchart.data-6A6WVV4Y.js +0 -30
- package/dist/barchart.events-2GNB5KWY.js +0 -44
- package/dist/barchart.integration.spec-JEOTKIWC.js +0 -1600
- package/dist/bars.renderer-NLUBMQEO.js +0 -12
- package/dist/bars.settings-UQZ63KU4.js +0 -8
- package/dist/block-B7WMYLPO.js +0 -6291
- package/dist/block.init-KCIXEYQC.js +0 -29
- package/dist/block.mds.expressionrank-RYZXAH5Y.js +0 -350
- package/dist/block.mds.geneboxplot-LNWUEI6N.js +0 -819
- package/dist/block.mds.junction-CVIY7QMD.js +0 -1536
- package/dist/block.mds.svcnv-EUGWHSCA.js +0 -6792
- package/dist/block.svg-QBLNIGUF.js +0 -155
- package/dist/block.tk.aicheck-U6NG22FX.js +0 -274
- package/dist/block.tk.ase-U3TRZAOH.js +0 -356
- package/dist/block.tk.bam-6Y6YFVR2.js +0 -1897
- package/dist/block.tk.bedgraphdot-O3VCFX6K.js +0 -375
- package/dist/block.tk.bigwig.ui-DNBJAF72.js +0 -202
- package/dist/block.tk.hicstraw-2EIFJX7E.js +0 -814
- package/dist/block.tk.junction-UXSO5EJP.js +0 -2355
- package/dist/block.tk.junction.textmatrixui-HQ6ZKCHM.js +0 -190
- package/dist/block.tk.ld-NEB4F3UG.js +0 -90
- package/dist/block.tk.menu-BN4JPJSD.js +0 -1020
- package/dist/block.tk.pgv-A4QFVSPF.js +0 -935
- package/dist/brainImaging-ESQGNGZH.js +0 -417
- package/dist/chat-AY7RCQYY.js +0 -145
- package/dist/chat-AY7RCQYY.js.map +0 -7
- package/dist/chunk-236ZRGXA.js +0 -297
- package/dist/chunk-2DZWOGEH.js +0 -272
- package/dist/chunk-2HQJMZNY.js +0 -14
- package/dist/chunk-2MRZFUHZ.js +0 -165
- package/dist/chunk-2ZEORJCF.js +0 -215
- package/dist/chunk-3WA7SJTR.js +0 -82
- package/dist/chunk-47HG7LGD.js +0 -133
- package/dist/chunk-47X254B7.js +0 -91
- package/dist/chunk-4TPDYPGD.js +0 -1098
- package/dist/chunk-4TPDYPGD.js.map +0 -7
- package/dist/chunk-4WA2H5DE.js +0 -75
- package/dist/chunk-4WA2H5DE.js.map +0 -7
- package/dist/chunk-4XDKCFFT.js +0 -613
- package/dist/chunk-5CJJLBUZ.js +0 -229
- package/dist/chunk-5TDKRZN5.js +0 -1931
- package/dist/chunk-5TDKRZN5.js.map +0 -7
- package/dist/chunk-6MSJ3TLQ.js +0 -1151
- package/dist/chunk-7JAFXNAL.js +0 -256
- package/dist/chunk-7JAFXNAL.js.map +0 -7
- package/dist/chunk-7LKSKJCV.js +0 -480
- package/dist/chunk-7P67W6NF.js +0 -190
- package/dist/chunk-7RIC35AF.js +0 -129
- package/dist/chunk-A76B53VT.js +0 -158
- package/dist/chunk-AZ276Z7T.js +0 -2327
- package/dist/chunk-B662XJMJ.js +0 -748
- package/dist/chunk-BK7GIOC5.js +0 -4924
- package/dist/chunk-BK7GIOC5.js.map +0 -7
- package/dist/chunk-BP2F2GRB.js +0 -2676
- package/dist/chunk-BRO4KZSZ.js +0 -417
- package/dist/chunk-BRO4KZSZ.js.map +0 -7
- package/dist/chunk-C5YNONHQ.js +0 -144
- package/dist/chunk-CT3LPTWW.js +0 -1197
- package/dist/chunk-CZTC4MTE.js +0 -161
- package/dist/chunk-DA5VGV5L.js +0 -280
- package/dist/chunk-DA5VGV5L.js.map +0 -7
- package/dist/chunk-DPU66MZ7.js +0 -381
- package/dist/chunk-E6NE5IWR.js +0 -102
- package/dist/chunk-ECKWM4HB.js +0 -1536
- package/dist/chunk-EEX5VPJG.js +0 -467
- package/dist/chunk-EIMEUZP2.js +0 -323
- package/dist/chunk-ETFPL4UP.js +0 -4172
- package/dist/chunk-F3FTQWTA.js +0 -303
- package/dist/chunk-F4APZ34G.js +0 -55
- package/dist/chunk-FOXJTDTH.js +0 -166
- package/dist/chunk-FYTZCTJC.js +0 -1157
- package/dist/chunk-FYTZCTJC.js.map +0 -7
- package/dist/chunk-GBS5I24E.js +0 -1706
- package/dist/chunk-GBS5I24E.js.map +0 -7
- package/dist/chunk-GBWRKJAH.js +0 -413
- package/dist/chunk-GG67VPVD.js +0 -238
- package/dist/chunk-GZ2B634M.js +0 -123
- package/dist/chunk-HEFXMCSF.js +0 -6364
- package/dist/chunk-I26R4NJJ.js +0 -228
- package/dist/chunk-I2GCD26Y.js +0 -55
- package/dist/chunk-I2GCD26Y.js.map +0 -7
- package/dist/chunk-ICNJQHQZ.js +0 -117
- package/dist/chunk-IPAGDFO4.js +0 -80
- package/dist/chunk-J2E4FALN.js +0 -1415
- package/dist/chunk-JXHU2FIA.js +0 -2789
- package/dist/chunk-K7LZ77GD.js +0 -468
- package/dist/chunk-K7LZ77GD.js.map +0 -7
- package/dist/chunk-KACWSU3U.js +0 -487
- package/dist/chunk-KACWSU3U.js.map +0 -7
- package/dist/chunk-KGSCQRQ5.js +0 -203
- package/dist/chunk-KGYPMYQD.js +0 -1143
- package/dist/chunk-L3PMRBTA.js +0 -422
- package/dist/chunk-M7QVMSRW.js +0 -293
- package/dist/chunk-MG6GRQKO.js +0 -459
- package/dist/chunk-N5VBIEH5.js +0 -1412
- package/dist/chunk-NRYOB7WU.js +0 -252
- package/dist/chunk-NXOWHUR4.js +0 -311
- package/dist/chunk-NXOWHUR4.js.map +0 -7
- package/dist/chunk-OFQV6PRB.js +0 -1275
- package/dist/chunk-OMO754MK.js +0 -177
- package/dist/chunk-OQSP66C6.js +0 -226
- package/dist/chunk-OS46MR72.js +0 -368
- package/dist/chunk-PBJFLQGL.js +0 -142
- package/dist/chunk-PMZS3SHH.js +0 -2877
- package/dist/chunk-PPJSDC3Z.js +0 -157
- package/dist/chunk-QIS45Z4Y.js +0 -2784
- package/dist/chunk-RCVZ4L7K.js +0 -402
- package/dist/chunk-ROWCKPNW.js +0 -1088
- package/dist/chunk-RQUXELHE.js +0 -276
- package/dist/chunk-RYRCMHYR.js +0 -196
- package/dist/chunk-S7EKSDVS.js +0 -258
- package/dist/chunk-SN5QKRXO.js +0 -85
- package/dist/chunk-TZRD3FPN.js +0 -634
- package/dist/chunk-U5QRRS7K.js +0 -619
- package/dist/chunk-UOMRXQNW.js +0 -401
- package/dist/chunk-UT6W4ZZL.js +0 -15048
- package/dist/chunk-UT6W4ZZL.js.map +0 -7
- package/dist/chunk-UZV3QI5M.js +0 -518
- package/dist/chunk-VALBVQXS.js +0 -217
- package/dist/chunk-VDR5JXI2.js +0 -444
- package/dist/chunk-VDR5JXI2.js.map +0 -7
- package/dist/chunk-W4D2EYE4.js +0 -95
- package/dist/chunk-XATIKUGU.js +0 -142
- package/dist/chunk-ZHWC5SJP.js +0 -797
- package/dist/chunk-ZHWC5SJP.js.map +0 -7
- package/dist/chunk-ZL4CNBYY.js +0 -149
- package/dist/chunk-ZQ7L66GP.js +0 -31
- package/dist/condition-24HPVH23.js +0 -323
- package/dist/controls-5CSAKANR.js +0 -35
- package/dist/controls.btns-QLLBCT65.js +0 -10
- package/dist/controls.config-H4FMU5LI.js +0 -31
- package/dist/correlation-RB77VSXB.js +0 -102
- package/dist/cuminc-YZSLH5IO.js +0 -1143
- package/dist/cuminc.integration.spec-MZPT3Y5A.js +0 -669
- package/dist/customdata.inputui-CBTZFODT.js +0 -278
- package/dist/dataDownload-ZTGRVI4Q.js +0 -320
- package/dist/dataDownload.integration.spec-Q6GUTUYD.js +0 -184
- package/dist/databrowser.ui-V7E6CLUZ.js +0 -426
- package/dist/dictionary-RPC5OZMM.js +0 -90
- package/dist/e2pca-WDQHMAUM.js +0 -341
- package/dist/ep-NAM34BBI.js +0 -1247
- package/dist/expclust.gdc.spec-QB4GVDJA.js +0 -298
- package/dist/facet-DOXBBIG6.js +0 -437
- package/dist/frequencyChart-GLOIGP3T.js +0 -371
- package/dist/frequencyChart.integration.spec-B7NBBLH2.js +0 -301
- package/dist/geneExpClustering-B4S6GFNT.js +0 -242
- package/dist/geneExpression-DMU4AQP6.js +0 -310
- package/dist/geneExpression-MVVXRNEY.js +0 -54
- package/dist/geneORA-XDAITCQF.js +0 -272
- package/dist/geneVariant-N6IGEIRR.js +0 -29
- package/dist/geneVariant-QYLA2V6J.js +0 -32
- package/dist/genefusion.ui-FRBMNK7V.js +0 -242
- package/dist/geneset-GZYNBG7Y.js +0 -186
- package/dist/genomeBrowser.spec-WFIVQSE7.js +0 -272
- package/dist/grin2-I6GJF35U.js +0 -882
- package/dist/grin2-I6GJF35U.js.map +0 -7
- package/dist/grin2-ZKNNZXON.js +0 -1547
- package/dist/gsea-GFGAEC4K.js +0 -43
- package/dist/hierCluster-MF4TI3E4.js +0 -60
- package/dist/hierCluster-SDJMQLOQ.js +0 -56
- package/dist/hierCluster.config-RMEX3VTC.js +0 -32
- package/dist/hierCluster.integration.spec-3H63OHMU.js +0 -389
- package/dist/hierCluster.interactivity-4DZBRQ6P.js +0 -45
- package/dist/hierCluster.renderers-UOW7BI6N.js +0 -21
- package/dist/imagePlot-P2UHJRSL.js +0 -134
- package/dist/importPlot-PPCMNVOW.js +0 -8
- package/dist/launch.adhoc-RJWUEVRA.js +0 -36
- package/dist/leftlabel.sample-OYP6MICL.js +0 -249
- package/dist/lollipop-BXQOWLGO.js +0 -159
- package/dist/maf-YJJO773K.js +0 -448
- package/dist/maf-YJJO773K.js.map +0 -7
- package/dist/maftimeline-GHKDDWYR.js +0 -584
- package/dist/matrix-FWDLHZYR.js +0 -60
- package/dist/matrix-YMJFP53F.js +0 -55
- package/dist/matrix.cells-JH7FPY3E.js +0 -30
- package/dist/matrix.config-HIHOLDCE.js +0 -33
- package/dist/matrix.controls-EKZ543FY.js +0 -31
- package/dist/matrix.data-NKAZI2BF.js +0 -35
- package/dist/matrix.dom-RGZ52GJ2.js +0 -11
- package/dist/matrix.groups-BO53ZXXV.js +0 -26
- package/dist/matrix.integration.spec-BXTATNAC.js +0 -2936
- package/dist/matrix.interactivity-UGUMKCFN.js +0 -36
- package/dist/matrix.layout-WBIF5QTG.js +0 -35
- package/dist/matrix.legend-P3GFCXXK.js +0 -22
- package/dist/matrix.renderers-I54IHQ3S.js +0 -29
- package/dist/matrix.serieses-R2T57OYI.js +0 -21
- package/dist/matrix.sort-3GCA2GDU.js +0 -27
- package/dist/matrix.sort.unit.spec-AXGPCZZD.js +0 -464
- package/dist/matrix.sorterUi-QWRK6OGE.js +0 -18
- package/dist/matrix.sorterUi.unit.spec-H7GUVWRJ.js +0 -335
- package/dist/mavb-4EECWXYX.js +0 -723
- package/dist/mds.fimo-NHZOY43X.js +0 -509
- package/dist/mds.samplescatterplot-7A5IZ6W7.js +0 -1541
- package/dist/mds.survivalplot-SQDPUFQE.js +0 -474
- package/dist/mutationSignature-QH7PZYKL.js +0 -72
- package/dist/numericDictTermCluster-X5SGSC5K.js +0 -72
- package/dist/oncomatrix-M4C4XPQK.js +0 -287
- package/dist/oncomatrix.spec-3C642O7O.js +0 -439
- package/dist/plot.2dvaf-TILP7J53.js +0 -368
- package/dist/plot.app-DE2UQP2M.js +0 -35
- package/dist/plot.barplot-FJHS765K.js +0 -93
- package/dist/plot.boxplot-YRSHGNYZ.js +0 -143
- package/dist/plot.brainImaging-JV4OUVJY.js +0 -51
- package/dist/plot.disco-DBVPBMLG.js +0 -100
- package/dist/plot.dzi-O2OA4EBK.js +0 -33
- package/dist/plot.ssgq-YFQEZQYK.js +0 -130
- package/dist/plot.vaf2cov-YNFP5LJ4.js +0 -250
- package/dist/plot.wsi-DJB7TDIS.js +0 -36
- package/dist/polar-K5Z5FYKV.js +0 -179
- package/dist/profile.spec-A6EADWEC.js +0 -71
- package/dist/profileBarchart-EFLPJK2P.js +0 -260
- package/dist/profileForms-TG35YNLD.js +0 -365
- package/dist/profilePlot-2EW2XVTK.js +0 -50
- package/dist/profileRadar-AKUYC2O5.js +0 -256
- package/dist/profileRadarFacility-EAT66XTX.js +0 -256
- package/dist/qualitative-PHQU5DXE.js +0 -34
- package/dist/regression-EOMJRRDO.js +0 -57
- package/dist/regression.inputs-LIH5X2JM.js +0 -49
- package/dist/regression.inputs.term-OO4RZ3QB.js +0 -49
- package/dist/regression.inputs.values.table-E7WCTO2L.js +0 -46
- package/dist/regression.integration.spec-62VEQP6X.js +0 -777
- package/dist/regression.results-WAHFJ6NA.js +0 -31
- package/dist/regression.spec-IBIOTZVX.js +0 -699
- package/dist/report-MKDJXHGY.js +0 -220
- package/dist/runChart-ETM2EETF.js +0 -54
- package/dist/runchart.integration.spec-QFA4XBKB.js +0 -362
- package/dist/sampleScatter.spec-N4N7ZGZF.js +0 -193
- package/dist/sampleView-JTY3RV7I.js +0 -42
- package/dist/samplelst-RRUMBVT6.js +0 -102
- package/dist/samplematrix-L37O664Y.js +0 -2189
- package/dist/scatter-E5QHW32W.js +0 -55
- package/dist/scatter.integration.spec-FNVAJSVU.js +0 -1026
- package/dist/selectGenomeWithTklst-J6VXCYGG.js +0 -125
- package/dist/singleCellPlot-S6S6CKYX.js +0 -50
- package/dist/singlecell-4BMIKFY4.js +0 -80
- package/dist/singlecell-B4TNI23F.js +0 -1563
- package/dist/snp-PAUQ24NZ.js +0 -73
- package/dist/snplocus-HVFYZTEE.js +0 -199
- package/dist/spliceevent.a53ss.diagram-GGGHVNBF.js +0 -142
- package/dist/spliceevent.exonskip.diagram-HLMFD6LJ.js +0 -268
- package/dist/spliceevent.noeventdiagram-CKZ3BZ7Y.js +0 -451
- package/dist/ssGSEA-UGT4GH55.js +0 -53
- package/dist/stattable-6JWMALGB.js +0 -89
- package/dist/summarizeCnvGeneexp-BJOQY62E.js +0 -136
- package/dist/summarizeGeneexpSurvival-4HDHL7PE.js +0 -90
- package/dist/summarizeMutationDiagnosis-TDWO5CKU.js +0 -32
- package/dist/summarizeMutationSurvival-CJJFABOX.js +0 -92
- package/dist/summary-WOAXXIHG.js +0 -55
- package/dist/summary.integration.spec-GM73ERMN.js +0 -405
- package/dist/summaryInput-FD4SONTY.js +0 -170
- package/dist/sunburst-3LCJTBRN.js +0 -275
- package/dist/survival-A3A7IVXT.js +0 -41
- package/dist/survival-XF72VMM6.js +0 -49
- package/dist/survival.integration.spec-AU7MCAQV.js +0 -601
- package/dist/svgraph-BEMS4JDJ.js +0 -1378
- package/dist/svmr-CDEMTZPK.js +0 -3833
- package/dist/table-WYF6QCGB.js +0 -193
- package/dist/termCollection-BVQMNVY7.js +0 -80
- package/dist/termInfo-JXLIVCSO.js +0 -9
- package/dist/tk-TGIIJYBO.js +0 -37
- package/dist/tp.ui-USYF67P7.js +0 -1450
- package/dist/tvs.dtcnv.continuous-7SCTSFK3.js +0 -65
- package/dist/tvs.numeric-OLVW6US3.js +0 -355
- package/dist/tvs.samplelst-BHZHCX5V.js +0 -95
- package/dist/violin-OEOWVIZF.js +0 -47
- package/dist/violin.integration.spec-AW2U3RHO.js +0 -1425
- package/dist/violin.interactivity-3O2UDNPQ.js +0 -39
- package/dist/violin.renderer-W26FA6M7.js +0 -31
- package/dist/vocabulary-BIQYDKVY.js +0 -32
- /package/dist/{2dmaf-E4NOGWWO.js.map → 2dmaf-VLW5XJ4O.js.map} +0 -0
- /package/dist/{AIProjectAdmin-3QDXMCOK.js.map → AIProjectAdmin-X3TBCRPR.js.map} +0 -0
- /package/dist/{AppHeader-IFZ57DJE.js.map → AppHeader-YA7FCKVM.js.map} +0 -0
- /package/dist/{BoxPlot-GXDTPRA5.js.map → BoxPlot-PAZYARCX.js.map} +0 -0
- /package/dist/{CorrelationVolcano-S4GUYIPT.js.map → CorrelationVolcano-S35GWKV5.js.map} +0 -0
- /package/dist/{DifferentialAnalysis-YLKYWPUT.js.map → DifferentialAnalysis-DTDFAUXT.js.map} +0 -0
- /package/dist/{Disco-OQMP3HRQ.js.map → Disco-OE6YY3MH.js.map} +0 -0
- /package/dist/{Disco.UI-XB3XQP33.js.map → Disco.UI-2CCWETSM.js.map} +0 -0
- /package/dist/{DziViewer-UIRNTFNS.js.map → DziViewer-OHPZOH72.js.map} +0 -0
- /package/dist/{GB-KDPJTOLP.js.map → GB-LIHKHJ32.js.map} +0 -0
- /package/dist/{HicApp-XJERMLKH.js.map → HicApp-6AYCPCW6.js.map} +0 -0
- /package/dist/{NumBinaryEditor-5MWWWNLW.js.map → NumBinaryEditor-ONJB4DKM.js.map} +0 -0
- /package/dist/{NumBinaryEditor.unit.spec-ROGT5FOH.js.map → NumBinaryEditor.unit.spec-Y6DGBAIB.js.map} +0 -0
- /package/dist/{NumContEditor-RRCB4CKG.js.map → NumContEditor-6WGAI3PH.js.map} +0 -0
- /package/dist/{NumContEditor.unit.spec-AJTKOF7W.js.map → NumContEditor.unit.spec-6LT5MALH.js.map} +0 -0
- /package/dist/{NumCustomBinEditor-3GJITZ7V.js.map → NumCustomBinEditor-K4OD7SWD.js.map} +0 -0
- /package/dist/{NumCustomBinEditor.unit.spec-DNBDZSHT.js.map → NumCustomBinEditor.unit.spec-O6QYV6Q4.js.map} +0 -0
- /package/dist/{NumDiscreteEditor-TARWA6CZ.js.map → NumDiscreteEditor-AFLINO62.js.map} +0 -0
- /package/dist/{NumDiscreteEditor.unit.spec-TCSLTQ25.js.map → NumDiscreteEditor.unit.spec-3VWWSS24.js.map} +0 -0
- /package/dist/{NumRegularBinEditor-QF5ALVV4.js.map → NumRegularBinEditor-IRKC5SVF.js.map} +0 -0
- /package/dist/{NumRegularBinEditor.unit.spec-GFNDBWNM.js.map → NumRegularBinEditor.unit.spec-2ZTI7HR2.js.map} +0 -0
- /package/dist/{NumSplineEditor-MOEUXR34.js.map → NumSplineEditor-DBW6XE4N.js.map} +0 -0
- /package/dist/{NumSplineEditor.unit.spec-XPJOOXS4.js.map → NumSplineEditor.unit.spec-645ZQXXL.js.map} +0 -0
- /package/dist/{NumericDensity-JDE263EQ.js.map → NumericDensity-27SM2P45.js.map} +0 -0
- /package/dist/{NumericDensity.unit.spec-RX6UGV56.js.map → NumericDensity.unit.spec-DM7PPSMV.js.map} +0 -0
- /package/dist/{NumericHandler-XM7LUYHN.js.map → NumericHandler-KFQ2OSUR.js.map} +0 -0
- /package/dist/{NumericHandler.unit.spec-5EYRMII7.js.map → NumericHandler.unit.spec-RNXGCYH7.js.map} +0 -0
- /package/dist/{SC-Z4KBNK7P.js.map → SC-SUUATZYR.js.map} +0 -0
- /package/dist/{Volcano-WYJLKM4K.js.map → Volcano-DEKTKEEZ.js.map} +0 -0
- /package/dist/{WSIViewer-3RMG3VOA.js.map → WSIViewer-SWX4OXHY.js.map} +0 -0
- /package/dist/{WsiSamplesPlot-PAWNKI7R.js.map → WsiSamplesPlot-OCVLBBBD.js.map} +0 -0
- /package/dist/{adSandbox-7H5H46SE.js.map → adSandbox-VGHHJWLL.js.map} +0 -0
- /package/dist/{alphaGenome-PODWDV5T.js.map → alphaGenome-YOJWFJCS.js.map} +0 -0
- /package/dist/{app-JPURIGQW.js.map → app-3TXV35H5.js.map} +0 -0
- /package/dist/{app-YL7S55T5.js.map → app-NUTP544R.js.map} +0 -0
- /package/dist/{bam-XEO47VYA.js.map → bam-LXDFDUBH.js.map} +0 -0
- /package/dist/{barchart-B5M6SSJH.js.map → barchart-P4BTYT5K.js.map} +0 -0
- /package/dist/{barchart.data-6A6WVV4Y.js.map → barchart.data-6WIS5D4I.js.map} +0 -0
- /package/dist/{barchart.events-2GNB5KWY.js.map → barchart.events-V4ANDWUH.js.map} +0 -0
- /package/dist/{barchart.integration.spec-JEOTKIWC.js.map → barchart.integration.spec-QU3Y3YHM.js.map} +0 -0
- /package/dist/{bars.renderer-NLUBMQEO.js.map → bars.renderer-4N4QOUNI.js.map} +0 -0
- /package/dist/{bars.settings-UQZ63KU4.js.map → bars.settings-SDU7PZOS.js.map} +0 -0
- /package/dist/{block-B7WMYLPO.js.map → block-OGJAZG3E.js.map} +0 -0
- /package/dist/{block.init-KCIXEYQC.js.map → block.init-SNZKGO2G.js.map} +0 -0
- /package/dist/{block.mds.expressionrank-RYZXAH5Y.js.map → block.mds.expressionrank-WYV55X5Y.js.map} +0 -0
- /package/dist/{block.mds.geneboxplot-LNWUEI6N.js.map → block.mds.geneboxplot-2LVYSSSU.js.map} +0 -0
- /package/dist/{block.mds.junction-CVIY7QMD.js.map → block.mds.junction-YY3P64U5.js.map} +0 -0
- /package/dist/{block.mds.svcnv-EUGWHSCA.js.map → block.mds.svcnv-JFNOLZX3.js.map} +0 -0
- /package/dist/{block.svg-QBLNIGUF.js.map → block.svg-JBR6OYAD.js.map} +0 -0
- /package/dist/{block.tk.aicheck-U6NG22FX.js.map → block.tk.aicheck-2XDMLOND.js.map} +0 -0
- /package/dist/{block.tk.ase-U3TRZAOH.js.map → block.tk.ase-TC3NY65S.js.map} +0 -0
- /package/dist/{block.tk.bam-6Y6YFVR2.js.map → block.tk.bam-YA32442V.js.map} +0 -0
- /package/dist/{block.tk.bedgraphdot-O3VCFX6K.js.map → block.tk.bedgraphdot-TRNM4O4F.js.map} +0 -0
- /package/dist/{block.tk.bigwig.ui-DNBJAF72.js.map → block.tk.bigwig.ui-6JJG42M3.js.map} +0 -0
- /package/dist/{block.tk.hicstraw-2EIFJX7E.js.map → block.tk.hicstraw-HEQXBJZN.js.map} +0 -0
- /package/dist/{block.tk.junction-UXSO5EJP.js.map → block.tk.junction-7LWL3N6V.js.map} +0 -0
- /package/dist/{block.tk.junction.textmatrixui-HQ6ZKCHM.js.map → block.tk.junction.textmatrixui-6CTLQ2M7.js.map} +0 -0
- /package/dist/{block.tk.ld-NEB4F3UG.js.map → block.tk.ld-SG4ZJ5VB.js.map} +0 -0
- /package/dist/{block.tk.menu-BN4JPJSD.js.map → block.tk.menu-FNKM5H5D.js.map} +0 -0
- /package/dist/{block.tk.pgv-A4QFVSPF.js.map → block.tk.pgv-KNLGEASZ.js.map} +0 -0
- /package/dist/{brainImaging-ESQGNGZH.js.map → brainImaging-RO5P7ZR6.js.map} +0 -0
- /package/dist/{chunk-NRYOB7WU.js.map → chunk-2HJ7OD7H.js.map} +0 -0
- /package/dist/{chunk-PMZS3SHH.js.map → chunk-2MN5JLZB.js.map} +0 -0
- /package/dist/{chunk-7LKSKJCV.js.map → chunk-353ULT52.js.map} +0 -0
- /package/dist/{chunk-IPAGDFO4.js.map → chunk-3JFEWVHR.js.map} +0 -0
- /package/dist/{chunk-OQSP66C6.js.map → chunk-4PHD5H4A.js.map} +0 -0
- /package/dist/{chunk-GBWRKJAH.js.map → chunk-56IFQMJK.js.map} +0 -0
- /package/dist/{chunk-RQUXELHE.js.map → chunk-5HXU7P5T.js.map} +0 -0
- /package/dist/{chunk-M7QVMSRW.js.map → chunk-5KUQSXQC.js.map} +0 -0
- /package/dist/{chunk-C5YNONHQ.js.map → chunk-6ISTNHM6.js.map} +0 -0
- /package/dist/{chunk-ECKWM4HB.js.map → chunk-6VQ4C735.js.map} +0 -0
- /package/dist/{chunk-ROWCKPNW.js.map → chunk-7M6V7OGP.js.map} +0 -0
- /package/dist/{chunk-7P67W6NF.js.map → chunk-B5YJ4S2E.js.map} +0 -0
- /package/dist/{chunk-UZV3QI5M.js.map → chunk-B65X5UQH.js.map} +0 -0
- /package/dist/{chunk-SN5QKRXO.js.map → chunk-BTYCW3D5.js.map} +0 -0
- /package/dist/{chunk-E6NE5IWR.js.map → chunk-BW2MEKH4.js.map} +0 -0
- /package/dist/{chunk-PPJSDC3Z.js.map → chunk-C4NAQESE.js.map} +0 -0
- /package/dist/{chunk-2DZWOGEH.js.map → chunk-CDVICC3E.js.map} +0 -0
- /package/dist/{chunk-GG67VPVD.js.map → chunk-D53HBTYQ.js.map} +0 -0
- /package/dist/{chunk-236ZRGXA.js.map → chunk-D7HC37OF.js.map} +0 -0
- /package/dist/{chunk-2ZEORJCF.js.map → chunk-DACGCI3Q.js.map} +0 -0
- /package/dist/{chunk-RYRCMHYR.js.map → chunk-DKI7YOTJ.js.map} +0 -0
- /package/dist/{chunk-2MRZFUHZ.js.map → chunk-DNU4IPD2.js.map} +0 -0
- /package/dist/{chunk-QIS45Z4Y.js.map → chunk-DOLIDO2R.js.map} +0 -0
- /package/dist/{chunk-7RIC35AF.js.map → chunk-DRDIOSDW.js.map} +0 -0
- /package/dist/{chunk-A76B53VT.js.map → chunk-DRFGAPYN.js.map} +0 -0
- /package/dist/{chunk-3WA7SJTR.js.map → chunk-ECFK2NV5.js.map} +0 -0
- /package/dist/{chunk-J2E4FALN.js.map → chunk-ETBTUFRA.js.map} +0 -0
- /package/dist/{chunk-OFQV6PRB.js.map → chunk-FMZEW7AB.js.map} +0 -0
- /package/dist/{chunk-HEFXMCSF.js.map → chunk-GCQYBMGL.js.map} +0 -0
- /package/dist/{chunk-W4D2EYE4.js.map → chunk-H2QGRBCK.js.map} +0 -0
- /package/dist/{chunk-GZ2B634M.js.map → chunk-HPEMEDXB.js.map} +0 -0
- /package/dist/{chunk-I26R4NJJ.js.map → chunk-HXT3XNAX.js.map} +0 -0
- /package/dist/{chunk-XATIKUGU.js.map → chunk-IZ77ZFBY.js.map} +0 -0
- /package/dist/{chunk-DPU66MZ7.js.map → chunk-JMO7ENSD.js.map} +0 -0
- /package/dist/{chunk-VALBVQXS.js.map → chunk-KHOR7BCS.js.map} +0 -0
- /package/dist/{chunk-OMO754MK.js.map → chunk-LD45BCVM.js.map} +0 -0
- /package/dist/{chunk-AZ276Z7T.js.map → chunk-MJM2U67B.js.map} +0 -0
- /package/dist/{chunk-TZRD3FPN.js.map → chunk-MRDHGWNV.js.map} +0 -0
- /package/dist/{chunk-B662XJMJ.js.map → chunk-MXSMHJIP.js.map} +0 -0
- /package/dist/{chunk-RCVZ4L7K.js.map → chunk-N4D5G5IT.js.map} +0 -0
- /package/dist/{chunk-2HQJMZNY.js.map → chunk-NCL2K6UD.js.map} +0 -0
- /package/dist/{chunk-F3FTQWTA.js.map → chunk-O552UNW2.js.map} +0 -0
- /package/dist/{chunk-UOMRXQNW.js.map → chunk-OARG7PAV.js.map} +0 -0
- /package/dist/{chunk-47X254B7.js.map → chunk-OLUMAQOQ.js.map} +0 -0
- /package/dist/{chunk-KGSCQRQ5.js.map → chunk-OSNUFZAX.js.map} +0 -0
- /package/dist/{chunk-FOXJTDTH.js.map → chunk-PN6GLQWD.js.map} +0 -0
- /package/dist/{chunk-5CJJLBUZ.js.map → chunk-PZRXLO7V.js.map} +0 -0
- /package/dist/{chunk-6MSJ3TLQ.js.map → chunk-PZY4L6NK.js.map} +0 -0
- /package/dist/{chunk-CZTC4MTE.js.map → chunk-Q6FKQ63P.js.map} +0 -0
- /package/dist/{chunk-EIMEUZP2.js.map → chunk-QCTJ6JA2.js.map} +0 -0
- /package/dist/{chunk-S7EKSDVS.js.map → chunk-RKV3CP4C.js.map} +0 -0
- /package/dist/{chunk-JXHU2FIA.js.map → chunk-RYT4A7AQ.js.map} +0 -0
- /package/dist/{chunk-ETFPL4UP.js.map → chunk-SBEA552U.js.map} +0 -0
- /package/dist/{chunk-PBJFLQGL.js.map → chunk-SEL5UNRC.js.map} +0 -0
- /package/dist/{chunk-47HG7LGD.js.map → chunk-SO4QKH47.js.map} +0 -0
- /package/dist/{chunk-BP2F2GRB.js.map → chunk-TMEYYK4R.js.map} +0 -0
- /package/dist/{chunk-ZL4CNBYY.js.map → chunk-UAKYIZJI.js.map} +0 -0
- /package/dist/{chunk-KGYPMYQD.js.map → chunk-V4F264MW.js.map} +0 -0
- /package/dist/{chunk-EEX5VPJG.js.map → chunk-W4IQ4XYS.js.map} +0 -0
- /package/dist/{chunk-ZQ7L66GP.js.map → chunk-WTPVXDJT.js.map} +0 -0
- /package/dist/{chunk-MG6GRQKO.js.map → chunk-WVZV43PF.js.map} +0 -0
- /package/dist/{chunk-4XDKCFFT.js.map → chunk-X62MQS7A.js.map} +0 -0
- /package/dist/{chunk-L3PMRBTA.js.map → chunk-XAIW4R76.js.map} +0 -0
- /package/dist/{chunk-U5QRRS7K.js.map → chunk-XQGO3DQ2.js.map} +0 -0
- /package/dist/{chunk-OS46MR72.js.map → chunk-YBDLY45S.js.map} +0 -0
- /package/dist/{chunk-F4APZ34G.js.map → chunk-YFZH3WDM.js.map} +0 -0
- /package/dist/{chunk-ICNJQHQZ.js.map → chunk-ZFFHOEBE.js.map} +0 -0
- /package/dist/{chunk-N5VBIEH5.js.map → chunk-ZLBDDGSP.js.map} +0 -0
- /package/dist/{chunk-CT3LPTWW.js.map → chunk-ZOD2EZOP.js.map} +0 -0
- /package/dist/{condition-24HPVH23.js.map → condition-KDKI25VM.js.map} +0 -0
- /package/dist/{controls-5CSAKANR.js.map → controls-26FVLZRQ.js.map} +0 -0
- /package/dist/{controls.btns-QLLBCT65.js.map → controls.btns-H4TWTHTW.js.map} +0 -0
- /package/dist/{controls.config-H4FMU5LI.js.map → controls.config-O6YC7P4M.js.map} +0 -0
- /package/dist/{correlation-RB77VSXB.js.map → correlation-DVDT43OT.js.map} +0 -0
- /package/dist/{cuminc-YZSLH5IO.js.map → cuminc-T6EYUBUX.js.map} +0 -0
- /package/dist/{cuminc.integration.spec-MZPT3Y5A.js.map → cuminc.integration.spec-P4YPZXDY.js.map} +0 -0
- /package/dist/{customdata.inputui-CBTZFODT.js.map → customdata.inputui-XPXZ7KB5.js.map} +0 -0
- /package/dist/{dataDownload-ZTGRVI4Q.js.map → dataDownload-46POC5GF.js.map} +0 -0
- /package/dist/{dataDownload.integration.spec-Q6GUTUYD.js.map → dataDownload.integration.spec-L7P5YMF7.js.map} +0 -0
- /package/dist/{databrowser.ui-V7E6CLUZ.js.map → databrowser.ui-DQEQXZCP.js.map} +0 -0
- /package/dist/{dictionary-RPC5OZMM.js.map → dictionary-MBERWWV4.js.map} +0 -0
- /package/dist/{e2pca-WDQHMAUM.js.map → e2pca-5HU65GVJ.js.map} +0 -0
- /package/dist/{ep-NAM34BBI.js.map → ep-ECP7H37A.js.map} +0 -0
- /package/dist/{expclust.gdc.spec-QB4GVDJA.js.map → expclust.gdc.spec-553FSEDH.js.map} +0 -0
- /package/dist/{facet-DOXBBIG6.js.map → facet-ND335XOF.js.map} +0 -0
- /package/dist/{frequencyChart-GLOIGP3T.js.map → frequencyChart-2OHEOWEU.js.map} +0 -0
- /package/dist/{frequencyChart.integration.spec-B7NBBLH2.js.map → frequencyChart.integration.spec-NW4DDLRX.js.map} +0 -0
- /package/dist/{geneExpClustering-B4S6GFNT.js.map → geneExpClustering-GHGBONBF.js.map} +0 -0
- /package/dist/{geneExpression-MVVXRNEY.js.map → geneExpression-UGYGT6DM.js.map} +0 -0
- /package/dist/{geneExpression-DMU4AQP6.js.map → geneExpression-X6HAUFPK.js.map} +0 -0
- /package/dist/{geneORA-XDAITCQF.js.map → geneORA-YKXRPEYY.js.map} +0 -0
- /package/dist/{geneVariant-N6IGEIRR.js.map → geneVariant-363FWTVR.js.map} +0 -0
- /package/dist/{geneVariant-QYLA2V6J.js.map → geneVariant-J4O45233.js.map} +0 -0
- /package/dist/{genefusion.ui-FRBMNK7V.js.map → genefusion.ui-DWAZJDO4.js.map} +0 -0
- /package/dist/{geneset-GZYNBG7Y.js.map → geneset-64VRPPTK.js.map} +0 -0
- /package/dist/{genomeBrowser.spec-WFIVQSE7.js.map → genomeBrowser.spec-AN3YXXBS.js.map} +0 -0
- /package/dist/{grin2-ZKNNZXON.js.map → grin2-E2WNBPLR.js.map} +0 -0
- /package/dist/{gsea-GFGAEC4K.js.map → gsea-PNORGHHB.js.map} +0 -0
- /package/dist/{hierCluster-MF4TI3E4.js.map → hierCluster-B7YMJ3UK.js.map} +0 -0
- /package/dist/{hierCluster-SDJMQLOQ.js.map → hierCluster-VAQBNVKU.js.map} +0 -0
- /package/dist/{hierCluster.config-RMEX3VTC.js.map → hierCluster.config-D7MDBQ35.js.map} +0 -0
- /package/dist/{hierCluster.integration.spec-3H63OHMU.js.map → hierCluster.integration.spec-UHRGPV6T.js.map} +0 -0
- /package/dist/{hierCluster.interactivity-4DZBRQ6P.js.map → hierCluster.interactivity-NJFEZILS.js.map} +0 -0
- /package/dist/{hierCluster.renderers-UOW7BI6N.js.map → hierCluster.renderers-GWFH5ZX7.js.map} +0 -0
- /package/dist/{imagePlot-P2UHJRSL.js.map → imagePlot-LWJPXMNK.js.map} +0 -0
- /package/dist/{importPlot-PPCMNVOW.js.map → importPlot-JBVMBUCU.js.map} +0 -0
- /package/dist/{launch.adhoc-RJWUEVRA.js.map → launch.adhoc-6GLLB7TX.js.map} +0 -0
- /package/dist/{leftlabel.sample-OYP6MICL.js.map → leftlabel.sample-3SO3AJ2U.js.map} +0 -0
- /package/dist/{lollipop-BXQOWLGO.js.map → lollipop-LJEVK7YO.js.map} +0 -0
- /package/dist/{maftimeline-GHKDDWYR.js.map → maftimeline-YMX542CP.js.map} +0 -0
- /package/dist/{matrix-FWDLHZYR.js.map → matrix-CR2EK5EU.js.map} +0 -0
- /package/dist/{matrix-YMJFP53F.js.map → matrix-YI4D3YQI.js.map} +0 -0
- /package/dist/{matrix.cells-JH7FPY3E.js.map → matrix.cells-SCLZA3P4.js.map} +0 -0
- /package/dist/{matrix.config-HIHOLDCE.js.map → matrix.config-TOC4QWE7.js.map} +0 -0
- /package/dist/{matrix.controls-EKZ543FY.js.map → matrix.controls-27D3Q4GD.js.map} +0 -0
- /package/dist/{matrix.data-NKAZI2BF.js.map → matrix.data-ETVML2F7.js.map} +0 -0
- /package/dist/{matrix.dom-RGZ52GJ2.js.map → matrix.dom-QO7BXZ27.js.map} +0 -0
- /package/dist/{matrix.groups-BO53ZXXV.js.map → matrix.groups-QMZMZ6Q7.js.map} +0 -0
- /package/dist/{matrix.integration.spec-BXTATNAC.js.map → matrix.integration.spec-DDXKS5GP.js.map} +0 -0
- /package/dist/{matrix.interactivity-UGUMKCFN.js.map → matrix.interactivity-XTNDVF55.js.map} +0 -0
- /package/dist/{matrix.layout-WBIF5QTG.js.map → matrix.layout-NGPK4EEU.js.map} +0 -0
- /package/dist/{matrix.legend-P3GFCXXK.js.map → matrix.legend-CS6DNC5V.js.map} +0 -0
- /package/dist/{matrix.renderers-I54IHQ3S.js.map → matrix.renderers-ILFHUPHQ.js.map} +0 -0
- /package/dist/{matrix.serieses-R2T57OYI.js.map → matrix.serieses-3SERD6CV.js.map} +0 -0
- /package/dist/{matrix.sort-3GCA2GDU.js.map → matrix.sort-UVS6WHIS.js.map} +0 -0
- /package/dist/{matrix.sort.unit.spec-AXGPCZZD.js.map → matrix.sort.unit.spec-DAMINC6B.js.map} +0 -0
- /package/dist/{matrix.sorterUi-QWRK6OGE.js.map → matrix.sorterUi-JDGLTLJM.js.map} +0 -0
- /package/dist/{matrix.sorterUi.unit.spec-H7GUVWRJ.js.map → matrix.sorterUi.unit.spec-M3RXU6B2.js.map} +0 -0
- /package/dist/{mavb-4EECWXYX.js.map → mavb-EC5VS3RS.js.map} +0 -0
- /package/dist/{mds.fimo-NHZOY43X.js.map → mds.fimo-7SXXTBUH.js.map} +0 -0
- /package/dist/{mds.samplescatterplot-7A5IZ6W7.js.map → mds.samplescatterplot-CALFSFR6.js.map} +0 -0
- /package/dist/{mds.survivalplot-SQDPUFQE.js.map → mds.survivalplot-NRA67V4T.js.map} +0 -0
- /package/dist/{mutationSignature-QH7PZYKL.js.map → mutationSignature-43SECPTY.js.map} +0 -0
- /package/dist/{numericDictTermCluster-X5SGSC5K.js.map → numericDictTermCluster-2ER4FUKO.js.map} +0 -0
- /package/dist/{oncomatrix-M4C4XPQK.js.map → oncomatrix-FOCP66RC.js.map} +0 -0
- /package/dist/{oncomatrix.spec-3C642O7O.js.map → oncomatrix.spec-XB232WT7.js.map} +0 -0
- /package/dist/{plot.2dvaf-TILP7J53.js.map → plot.2dvaf-GSQS5J6Y.js.map} +0 -0
- /package/dist/{plot.app-DE2UQP2M.js.map → plot.app-RHPEFX47.js.map} +0 -0
- /package/dist/{plot.barplot-FJHS765K.js.map → plot.barplot-2Q5YF3MU.js.map} +0 -0
- /package/dist/{plot.boxplot-YRSHGNYZ.js.map → plot.boxplot-LTYLWTF4.js.map} +0 -0
- /package/dist/{plot.brainImaging-JV4OUVJY.js.map → plot.brainImaging-EFRI4QV7.js.map} +0 -0
- /package/dist/{plot.disco-DBVPBMLG.js.map → plot.disco-HHYCMRCZ.js.map} +0 -0
- /package/dist/{plot.dzi-O2OA4EBK.js.map → plot.dzi-BCTPDUDK.js.map} +0 -0
- /package/dist/{plot.ssgq-YFQEZQYK.js.map → plot.ssgq-ES2ZP7MO.js.map} +0 -0
- /package/dist/{plot.vaf2cov-YNFP5LJ4.js.map → plot.vaf2cov-W72Y2IHA.js.map} +0 -0
- /package/dist/{plot.wsi-DJB7TDIS.js.map → plot.wsi-TPZXI45Q.js.map} +0 -0
- /package/dist/{polar-K5Z5FYKV.js.map → polar-MT3K2WDL.js.map} +0 -0
- /package/dist/{profile.spec-A6EADWEC.js.map → profile.spec-DOQYKG6P.js.map} +0 -0
- /package/dist/{profileBarchart-EFLPJK2P.js.map → profileBarchart-A4UWV2YA.js.map} +0 -0
- /package/dist/{profileForms-TG35YNLD.js.map → profileForms-VONTWVOF.js.map} +0 -0
- /package/dist/{profilePlot-2EW2XVTK.js.map → profilePlot-OK5VKWO4.js.map} +0 -0
- /package/dist/{profileRadar-AKUYC2O5.js.map → profileRadar-VLEZJCD7.js.map} +0 -0
- /package/dist/{profileRadarFacility-EAT66XTX.js.map → profileRadarFacility-QPSSUTB6.js.map} +0 -0
- /package/dist/{qualitative-PHQU5DXE.js.map → qualitative-RJKAWHQR.js.map} +0 -0
- /package/dist/{regression-EOMJRRDO.js.map → regression-GV73BYCQ.js.map} +0 -0
- /package/dist/{regression.inputs-LIH5X2JM.js.map → regression.inputs-PVIJHCRE.js.map} +0 -0
- /package/dist/{regression.inputs.term-OO4RZ3QB.js.map → regression.inputs.term-V5I3EP6M.js.map} +0 -0
- /package/dist/{regression.inputs.values.table-E7WCTO2L.js.map → regression.inputs.values.table-Y37EJUQB.js.map} +0 -0
- /package/dist/{regression.integration.spec-62VEQP6X.js.map → regression.integration.spec-JD32ODD2.js.map} +0 -0
- /package/dist/{regression.results-WAHFJ6NA.js.map → regression.results-AHAYXYGI.js.map} +0 -0
- /package/dist/{regression.spec-IBIOTZVX.js.map → regression.spec-FGYEES5G.js.map} +0 -0
- /package/dist/{report-MKDJXHGY.js.map → report-JYIEDDW5.js.map} +0 -0
- /package/dist/{runChart-ETM2EETF.js.map → runChart-CVAWIBA3.js.map} +0 -0
- /package/dist/{runchart.integration.spec-QFA4XBKB.js.map → runchart.integration.spec-5Z4IHQU5.js.map} +0 -0
- /package/dist/{sampleScatter.spec-N4N7ZGZF.js.map → sampleScatter.spec-QNFWS2Y7.js.map} +0 -0
- /package/dist/{sampleView-JTY3RV7I.js.map → sampleView-GKYHS3WO.js.map} +0 -0
- /package/dist/{samplelst-RRUMBVT6.js.map → samplelst-CHBS5BGY.js.map} +0 -0
- /package/dist/{samplematrix-L37O664Y.js.map → samplematrix-IK4YDAID.js.map} +0 -0
- /package/dist/{scatter-E5QHW32W.js.map → scatter-NDA5YSCP.js.map} +0 -0
- /package/dist/{scatter.integration.spec-FNVAJSVU.js.map → scatter.integration.spec-GV3EIFGT.js.map} +0 -0
- /package/dist/{selectGenomeWithTklst-J6VXCYGG.js.map → selectGenomeWithTklst-X7RAGKRC.js.map} +0 -0
- /package/dist/{singleCellPlot-S6S6CKYX.js.map → singleCellPlot-7F735HTR.js.map} +0 -0
- /package/dist/{singlecell-B4TNI23F.js.map → singlecell-EO3WYGS7.js.map} +0 -0
- /package/dist/{singlecell-4BMIKFY4.js.map → singlecell-YMYLKTSC.js.map} +0 -0
- /package/dist/{snp-PAUQ24NZ.js.map → snp-6KN4AWBB.js.map} +0 -0
- /package/dist/{snplocus-HVFYZTEE.js.map → snplocus-CLM4WHVH.js.map} +0 -0
- /package/dist/{spliceevent.a53ss.diagram-GGGHVNBF.js.map → spliceevent.a53ss.diagram-PKFVC2N4.js.map} +0 -0
- /package/dist/{spliceevent.exonskip.diagram-HLMFD6LJ.js.map → spliceevent.exonskip.diagram-XV2Z7AYB.js.map} +0 -0
- /package/dist/{spliceevent.noeventdiagram-CKZ3BZ7Y.js.map → spliceevent.noeventdiagram-L5L2BJL5.js.map} +0 -0
- /package/dist/{ssGSEA-UGT4GH55.js.map → ssGSEA-W6N4CXMD.js.map} +0 -0
- /package/dist/{stattable-6JWMALGB.js.map → stattable-324FS2HA.js.map} +0 -0
- /package/dist/{summarizeCnvGeneexp-BJOQY62E.js.map → summarizeCnvGeneexp-57LZ5B2Q.js.map} +0 -0
- /package/dist/{summarizeGeneexpSurvival-4HDHL7PE.js.map → summarizeGeneexpSurvival-UQX3VZUK.js.map} +0 -0
- /package/dist/{summarizeMutationDiagnosis-TDWO5CKU.js.map → summarizeMutationDiagnosis-5SWO42E4.js.map} +0 -0
- /package/dist/{summarizeMutationSurvival-CJJFABOX.js.map → summarizeMutationSurvival-EOU5QOB6.js.map} +0 -0
- /package/dist/{summary-WOAXXIHG.js.map → summary-FRIKVPYZ.js.map} +0 -0
- /package/dist/{summary.integration.spec-GM73ERMN.js.map → summary.integration.spec-WSI3JNTO.js.map} +0 -0
- /package/dist/{summaryInput-FD4SONTY.js.map → summaryInput-3L7CM52X.js.map} +0 -0
- /package/dist/{sunburst-3LCJTBRN.js.map → sunburst-HA7UGSXX.js.map} +0 -0
- /package/dist/{survival-A3A7IVXT.js.map → survival-2HZ446Y3.js.map} +0 -0
- /package/dist/{survival-XF72VMM6.js.map → survival-LJI5JEZZ.js.map} +0 -0
- /package/dist/{survival.integration.spec-AU7MCAQV.js.map → survival.integration.spec-7XVO2WNF.js.map} +0 -0
- /package/dist/{svgraph-BEMS4JDJ.js.map → svgraph-TRPAXTNP.js.map} +0 -0
- /package/dist/{svmr-CDEMTZPK.js.map → svmr-TJOCKTE2.js.map} +0 -0
- /package/dist/{table-WYF6QCGB.js.map → table-35RHJK4M.js.map} +0 -0
- /package/dist/{termCollection-BVQMNVY7.js.map → termCollection-JS6N5TAP.js.map} +0 -0
- /package/dist/{termInfo-JXLIVCSO.js.map → termInfo-5USFZGDB.js.map} +0 -0
- /package/dist/{tk-TGIIJYBO.js.map → tk-4ARNGTEQ.js.map} +0 -0
- /package/dist/{tp.ui-USYF67P7.js.map → tp.ui-QZEMGVEH.js.map} +0 -0
- /package/dist/{tvs.dtcnv.continuous-7SCTSFK3.js.map → tvs.dtcnv.continuous-4K7B7FXF.js.map} +0 -0
- /package/dist/{tvs.numeric-OLVW6US3.js.map → tvs.numeric-FCC2EY62.js.map} +0 -0
- /package/dist/{tvs.samplelst-BHZHCX5V.js.map → tvs.samplelst-IUSDLB6P.js.map} +0 -0
- /package/dist/{violin-OEOWVIZF.js.map → violin-I5JO56GZ.js.map} +0 -0
- /package/dist/{violin.integration.spec-AW2U3RHO.js.map → violin.integration.spec-5WVLT3DW.js.map} +0 -0
- /package/dist/{violin.interactivity-3O2UDNPQ.js.map → violin.interactivity-EFFBMTN2.js.map} +0 -0
- /package/dist/{violin.renderer-W26FA6M7.js.map → violin.renderer-Z3AIV5RH.js.map} +0 -0
- /package/dist/{vocabulary-BIQYDKVY.js.map → vocabulary-4PHACFSG.js.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../plots/barchart.js", "../plots/barchart.events.js"],
|
|
4
|
+
"sourcesContent": ["import { getCompInit, copyMerge, deepEqual } from '../rx'\nimport getHandlers from './barchart.events'\nimport barsRenderer from './bars.renderer'\nimport { rendererSettings, plotLength } from './bars.settings'\nimport { htmlLegend, /** svgLegend, */ renderTable, DownloadMenu } from '#dom'\nimport { select } from 'd3-selection'\nimport { rgb } from 'd3-color'\nimport { controlsInit, term0_term2_defaultQ, renderTerm1Label } from './controls'\n// import { to_svg } from '../src/client'\nimport { fillTermWrapper } from '#termsetting'\nimport { getColors, mclass, plotColor } from '#shared/common.js'\nimport { isNumericTerm } from '#shared/terms.js'\nimport { roundValueAuto } from '#shared/roundValue.js'\nimport { getCombinedTermFilter } from '#filter'\nimport { PlotBase, defaultUiLabels } from '#plots/PlotBase.js'\nimport { rebaseGroupFilter } from '../mass/groups.js'\n\nexport class Barchart extends PlotBase {\n\tstatic type = 'barchart'\n\n\tconfigTermKeys = ['term', 'term0', 'term2']\n\n\tconstructor(opts) {\n\t\t// rx.getComponentInit() will set this.app, this.id, this.opts\n\t\tsuper(opts)\n\t\tthis.type = Barchart.type\n\t}\n\t//freeze the api of this class. don't want embedder functions to modify it.\n\tpreApiFreeze(api) {\n\t\tapi.download = this.download\n\t\tapi.getChartImages = () => this.getChartImages()\n\t}\n\n\tasync init(appState) {\n\t\tconst opts = this.opts\n\t\tconst controls = this.opts.controls ? null : opts.holder.append('div')\n\t\tconst holder = opts.controls ? opts.holder : opts.holder.append('div')\n\t\tthis.dom = {\n\t\t\tloadingDiv: holder.append('div').style('display', 'none').style('padding', '24px').html('Loading ...'),\n\t\t\theader: opts.header,\n\t\t\tcontrols,\n\t\t\tholder,\n\t\t\tbanner: holder\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'none')\n\t\t\t\t.style('text-align', 'center')\n\t\t\t\t.style('padding', '24px')\n\t\t\t\t.style('font-size', '16px')\n\t\t\t\t.style('color', '#aaa'),\n\t\t\tbarDiv: holder\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'flex')\n\t\t\t\t.style('flex-direction', 'row')\n\t\t\t\t.style('flex-wrap', 'wrap')\n\t\t\t\t.style('max-width', '100vw'),\n\t\t\tlegendDiv: holder.append('div').style('margin', '5px 5px 15px 5px')\n\t\t}\n\t\tif (this.dom.header) this.dom.header.html('Barchart')\n\t\tthis.settings = JSON.parse(rendererSettings)\n\n\t\tsetRenderers(this)\n\t\tsetInteractivity(this)\n\n\t\tthis.renderers = {}\n\t\tthis.legendRenderer = htmlLegend(\n\t\t\tthis.dom.legendDiv,\n\t\t\t{\n\t\t\t\tsettings: {\n\t\t\t\t\tlegendOrientation: 'vertical'\n\t\t\t\t},\n\t\t\t\thandlers: this.handlers\n\t\t\t},\n\t\t\tthis.dom.barDiv\n\t\t)\n\t\tthis.controls = {}\n\t\tthis.term2toColor = {}\n\n\t\tif (this.opts.bar_click_override) {\n\t\t\t// will use this as callback to bar click\n\t\t\t// and will not set up bar click menu\n\t\t} else if (!this.opts.bar_click_opts) {\n\t\t\tthis.opts.bar_click_opts = ['hide_bar']\n\t\t\tif (this.app.getState().nav.header_mode === 'with_tabs') this.opts.bar_click_opts.push('add_filter', 'add_group')\n\t\t}\n\t}\n\n\tasync setControls() {\n\t\tconst state = this.state\n\t\tconst controlLabels = state.config.controlLabels\n\t\tif (!controlLabels) throw 'controls labels not found'\n\t\tthis.dom.controls.selectAll('*').remove()\n\t\tif (this.opts.controls) {\n\t\t\tthis.opts.controls.on('downloadClick.barchart', this.download)\n\t\t} else {\n\t\t\tthis.dom.holder.attr('class', 'pp-termdb-plot-viz').style('display', 'inline-block').style('min-width', '300px')\n\t\t\t//.style('margin-left', '10px')\n\n\t\t\tconst inputs = [\n\t\t\t\t{\n\t\t\t\t\ttype: 'term',\n\t\t\t\t\tconfigKey: 'term',\n\t\t\t\t\tchartType: 'barchart',\n\t\t\t\t\tusecase: { target: 'barchart', detail: 'term' },\n\t\t\t\t\tlabel: controlLabels.term1?.label || renderTerm1Label,\n\t\t\t\t\tvocabApi: this.app.vocabApi,\n\t\t\t\t\tmenuOptions: 'edit',\n\t\t\t\t\tdefaultQ4fillTW: { geneVariant: { type: 'custom-groupset' } },\n\t\t\t\t\tgetBodyParams: () => {\n\t\t\t\t\t\tconst tw = this.config['term']\n\t\t\t\t\t\tif (!tw) return { skip_categories: true }\n\t\t\t\t\t\tif (tw.term.categories) return { categories: tw.term.categories }\n\t\t\t\t\t\treturn {}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: 'term',\n\t\t\t\t\tconfigKey: 'term2',\n\t\t\t\t\tchartType: 'barchart',\n\t\t\t\t\tusecase: { target: 'barchart', detail: 'term2' },\n\t\t\t\t\ttitle: controlLabels.term2.title || controlLabels.term2.label,\n\t\t\t\t\tlabel: controlLabels.term2.label,\n\t\t\t\t\tvocabApi: this.app.vocabApi,\n\t\t\t\t\tnumericEditMenuVersion: this.opts.numericEditMenuVersion,\n\t\t\t\t\tdefaultQ4fillTW: term0_term2_defaultQ,\n\t\t\t\t\t// overlay option should always be visible, but must convert unit from log to abs\n\t\t\t\t\t// when an overlay is added\n\t\t\t\t\t//getDisplayStyle: () => (this.settings.unit == 'log' ? 'none' : ''),\n\t\t\t\t\tprocessConfig: config => {\n\t\t\t\t\t\t//config.settings not usually passed for logic check below\n\t\t\t\t\t\tconst s = this.state.config.settings.barchart\n\t\t\t\t\t\tif (!config.settings) config.settings = { barchart: {} }\n\t\t\t\t\t\t//Prevent showing Log option when overlay is selected\n\t\t\t\t\t\tif (config.term2 && s.unit == 'log') config.settings.barchart.unit = 'abs'\n\t\t\t\t\t\t//Revert back to Linear radio when Proportion is selected\n\t\t\t\t\t\t//but the overlay term is removed\n\t\t\t\t\t\tif (!config.term2 && s.unit == 'pct') config.settings.barchart.unit = 'abs'\n\t\t\t\t\t},\n\t\t\t\t\tgetBodyParams: () => {\n\t\t\t\t\t\tconst tw = this.config['term2']\n\t\t\t\t\t\tif (!tw) return { skip_categories: true }\n\t\t\t\t\t\tif (tw.term.categories) return { categories: tw.term.categories }\n\t\t\t\t\t\treturn {}\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: 'term',\n\t\t\t\t\tconfigKey: 'term0',\n\t\t\t\t\tchartType: 'barchart',\n\t\t\t\t\tusecase: { target: 'barchart', detail: 'term0' },\n\t\t\t\t\ttitle: controlLabels.term0.title || controlLabels.term0.label,\n\t\t\t\t\tlabel: controlLabels.term0.label,\n\t\t\t\t\tvocabApi: this.app.vocabApi,\n\t\t\t\t\tnumericEditMenuVersion: this.opts.numericEditMenuVersion,\n\t\t\t\t\tdefaultQ4fillTW: term0_term2_defaultQ,\n\t\t\t\t\tgetBodyParams: () => {\n\t\t\t\t\t\tconst tw = this.config['term0']\n\t\t\t\t\t\tif (!tw) return { skip_categories: true }\n\t\t\t\t\t\tif (tw.term.categories) return { categories: tw.term.categories }\n\t\t\t\t\t\treturn {}\n\t\t\t\t\t}\n\t\t\t\t},\n\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Bar orientation',\n\t\t\t\t\ttype: 'radio',\n\t\t\t\t\tchartType: 'barchart',\n\t\t\t\t\tsettingsKey: 'orientation',\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{ label: 'Vertical', value: 'vertical' },\n\t\t\t\t\t\t{ label: 'Horizontal', value: 'horizontal' }\n\t\t\t\t\t]\n\t\t\t\t},\n\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Scale',\n\t\t\t\t\ttype: 'radio',\n\t\t\t\t\tchartType: 'barchart',\n\t\t\t\t\tsettingsKey: 'unit',\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{ label: 'Linear', value: 'abs' },\n\t\t\t\t\t\t/** Option not available when term2 is present:\n\t\t\t\t\t\t * 1. The scale for the plot renders incorrectly\n\t\t\t\t\t\t * 2. The bars do not appear to be rendering correctly as a result\n\t\t\t\t\t\t * TODOs: Investigate the cause of the rendering issue\n\t\t\t\t\t\t */\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Log',\n\t\t\t\t\t\t\tvalue: 'log',\n\t\t\t\t\t\t\tgetDisplayStyle: (plot, computedDisplay = 'inline-block') => (plot.term2 ? 'none' : computedDisplay)\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Proportion',\n\t\t\t\t\t\t\tvalue: 'pct',\n\t\t\t\t\t\t\tgetDisplayStyle: (plot, computedDisplay = 'inline-block') => (plot.term2 ? computedDisplay : 'none')\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Multicolor bars',\n\t\t\t\t\ttitle: 'Color bars',\n\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\tchartType: 'barchart',\n\t\t\t\t\tsettingsKey: 'colorBars',\n\t\t\t\t\tboxLabel: 'Yes',\n\t\t\t\t\tgetDisplayStyle: plot => (plot.term2 ? 'none' : 'table-row')\n\t\t\t\t},\n\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Deduplicate',\n\t\t\t\t\ttitle: 'Use separate bars samples that has multiple values or belong to multiple groups',\n\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\tchartType: 'barchart',\n\t\t\t\t\tsettingsKey: 'dedup',\n\t\t\t\t\tboxLabel: 'Yes',\n\t\t\t\t\tgetDisplayStyle: plot =>\n\t\t\t\t\t\tthis.chartsData?.charts.find(\n\t\t\t\t\t\t\tc =>\n\t\t\t\t\t\t\t\tc.dedupedSerieses?.length &&\n\t\t\t\t\t\t\t\t!deepEqual(\n\t\t\t\t\t\t\t\t\tc.serieses.map(s => s.seriesId),\n\t\t\t\t\t\t\t\t\tc.dedupedSerieses.map(s => s.seriesId)\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t)\n\t\t\t\t\t\t\t? 'table-row'\n\t\t\t\t\t\t\t: 'none'\n\t\t\t\t}\n\t\t\t]\n\t\t\tif (isNumericTerm(this.config.term.term))\n\t\t\t\tinputs.push({\n\t\t\t\t\tlabel: 'Show stats',\n\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\tchartType: 'barchart',\n\t\t\t\t\tsettingsKey: 'showStats',\n\t\t\t\t\tboxLabel: 'Yes'\n\t\t\t\t})\n\t\t\tif (!this.config.term2)\n\t\t\t\tinputs.push({\n\t\t\t\t\tlabel: 'Show percent',\n\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\tchartType: 'barchart',\n\t\t\t\t\tsettingsKey: 'showPercent',\n\t\t\t\t\tboxLabel: 'Yes'\n\t\t\t\t})\n\t\t\telse\n\t\t\t\tinputs.push({\n\t\t\t\t\tlabel: 'Show association tests',\n\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\tchartType: 'barchart',\n\t\t\t\t\tsettingsKey: 'showAssociationTests',\n\t\t\t\t\tboxLabel: 'Yes'\n\t\t\t\t})\n\t\t\tif (state.config.settings.barchart.colorBars && (state.config.term2 || state.config.term0))\n\t\t\t\tinputs.splice(7, 0, {\n\t\t\t\t\tlabel: 'Assign colors to',\n\t\t\t\t\ttitle: `Colors bars either considering all the categories or the present categories. If there are many categories and only few are present the present choice will provide more contrast.`,\n\t\t\t\t\ttype: 'radio',\n\t\t\t\t\tchartType: 'barchart',\n\t\t\t\t\tsettingsKey: 'colorUsing',\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{ label: 'All values', value: 'all' },\n\t\t\t\t\t\t{ label: 'Present values', value: 'present' }\n\t\t\t\t\t]\n\t\t\t\t})\n\t\t\telse if (!state.config.settings.barchart.colorBars)\n\t\t\t\tinputs.splice(6, 0, {\n\t\t\t\t\tlabel: 'Default color',\n\t\t\t\t\ttitle: 'Default color for bars when there is no overlay',\n\t\t\t\t\ttype: 'color',\n\t\t\t\t\tchartType: 'barchart',\n\t\t\t\t\tsettingsKey: 'defaultColor'\n\t\t\t\t\t//getDisplayStyle: plot => (plot.settings.barchart.colorBars || plot.term2 ? 'none' : 'table-row')\n\t\t\t\t})\n\n\t\t\tinputs.push({\n\t\t\t\tlabel: 'Plot length',\n\t\t\t\ttitle: `Set the plot length in pixels between 200 and 800.`,\n\t\t\t\ttype: 'number',\n\t\t\t\tchartType: 'barchart',\n\t\t\t\tsettingsKey: 'plotLength',\n\t\t\t\tmin: 200,\n\t\t\t\tmax: 800,\n\t\t\t\tstep: 10\n\t\t\t})\n\n\t\t\tconst multipleTestingCorrection = this.app.getState().termdbConfig.multipleTestingCorrection\n\t\t\tif (multipleTestingCorrection) {\n\t\t\t\t// a checkbox to allow users to show or hide asterisks on bars\n\t\t\t\tinputs.push({\n\t\t\t\t\tlabel: 'Asterisks',\n\t\t\t\t\tboxLabel: 'Visible',\n\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\tchartType: 'barchart',\n\t\t\t\t\tsettingsKey: 'asterisksVisible',\n\t\t\t\t\ttitle: 'Display the asterisks'\n\t\t\t\t})\n\t\t\t\tconst mtcMethod = multipleTestingCorrection.method\n\t\t\t\tif (!mtcMethod) throw 'no multiple testing correction method specified'\n\t\t\t\tinputs.push({\n\t\t\t\t\tlabel: `Multiple testing correction (${mtcMethod == 'bon' ? 'Bonferroni' : mtcMethod})`,\n\t\t\t\t\tboxLabel: '',\n\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\tchartType: 'barchart',\n\t\t\t\t\tsettingsKey: 'multiTestingCorr',\n\t\t\t\t\ttitle: `Perform multiple testing correction (${mtcMethod == 'bon' ? 'Bonferroni' : mtcMethod})`\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tthis.components = {\n\t\t\t\tcontrols: await controlsInit({\n\t\t\t\t\tapp: this.app,\n\t\t\t\t\tid: this.id,\n\t\t\t\t\tholder: this.dom.controls.style('display', 'inline-block'),\n\t\t\t\t\tinputs\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tthis.components.controls.on('downloadClick.barchart', this.download)\n\t\t}\n\t}\n\n\treactsTo(action) {\n\t\tif (action.type.startsWith('plot_')) {\n\t\t\treturn (\n\t\t\t\t(action.id === this.id || action.id == this.parentId) &&\n\t\t\t\t(!action.config?.childType || action.config?.childType == this.type)\n\t\t\t)\n\t\t}\n\t\treturn true\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\tconst parentConfig = this.parentId && appState.plots.find(p => p.id === this.parentId)\n\t\t// TODO: may need to combine parentConfig.filter with local config.filter\n\t\tconst termfilter = getCombinedTermFilter(appState, config.filter || parentConfig?.filter)\n\t\treturn {\n\t\t\tnav: {\n\t\t\t\theader_mode: appState.nav.header_mode\n\t\t\t},\n\t\t\ttermfilter,\n\t\t\tconfig: Object.assign({}, config, {\n\t\t\t\tsettings: {\n\t\t\t\t\tbarchart: config.settings.barchart,\n\t\t\t\t\tcommon: config.settings.common\n\t\t\t\t},\n\t\t\t\tdisplaySampleIds: appState.termdbConfig.displaySampleIds && this.app.vocabApi.hasVerifiedToken()\n\t\t\t}),\n\t\t\tmultipleTestingCorrection: appState.termdbConfig.multipleTestingCorrection,\n\t\t\tbar_click_menu: appState.bar_click_menu || {},\n\t\t\tgroups: rebaseGroupFilter(appState)\n\t\t}\n\t}\n\n\tasync main() {\n\t\tconst c = this.state.config\n\t\tif (c.chartType != this.type && c.childType != this.type) return\n\t\ttry {\n\t\t\tthis.config = await this.getMutableConfig(c)\n\t\t\tif (!this.currServerData) this.dom.barDiv.style('max-width', window.innerWidth + 'px')\n\t\t\tthis.prevConfig = this.config || {}\n\t\t\tif (this.dom.header)\n\t\t\t\tthis.dom.header.html(\n\t\t\t\t\tthis.config.term.term.name + ` <span style=\"opacity:.6;font-size:.7em;margin-left:10px;\">BARCHART</span>`\n\t\t\t\t)\n\n\t\t\tthis.toggleLoadingDiv()\n\n\t\t\tconst reqOpts = this.getDataRequestOpts()\n\t\t\tawait this.getDescrStats()\n\t\t\tawait this.setControls() //needs to be called after getDescrStats() to set hasStats\n\t\t\tconst results = await this.app.vocabApi.getNestedChartSeriesData(reqOpts, this.api.getAbortSignal())\n\t\t\tif (results.error) throw results\n\t\t\tconst data = results.data\n\t\t\tthis.charts = data.charts\n\t\t\tthis.sampleType = results.sampleType\n\t\t\tthis.bins = results.bins\n\t\t\tif (results.chartid2dtterm) this.chartid2dtterm = results.chartid2dtterm\n\t\t\tthis.toggleLoadingDiv('none')\n\t\t\tthis.app.vocabApi.syncTermData(this.config, data, this.prevConfig)\n\t\t\tthis.currServerData = data\n\t\t\tif (this.currServerData.refs && this.currServerData.refs.q) {\n\t\t\t\tfor (const q of this.currServerData.refs.q) {\n\t\t\t\t\tif (q.error) throw q.error\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.term1toColor = {}\n\t\t\tthis.term2toColor = {} // forget any assigned overlay colors when refreshing a barchart\n\t\t\tthis.updateSettings(this.config)\n\t\t\tfor (const chart of data.charts) {\n\t\t\t\tconst categoriesPerSerie = chart.serieses.map(s => s.data.length)\n\t\t\t\tconst numColors = this.config.term2 ? Math.max(...categoriesPerSerie) : chart.serieses.length\n\t\t\t\tchart.colorScale = getColors(numColors)\n\t\t\t}\n\t\t\tthis.chartsData = this.processData(this.currServerData)\n\t\t\tthis.render()\n\t\t\tthis.dom.barDiv.style('display', 'flex')\n\t\t} catch (e) {\n\t\t\tif (this.app.isAbortError(e)) return\n\t\t\tthis.toggleLoadingDiv('none')\n\t\t\tthis.dom.barDiv.style('display', 'none')\n\t\t\tthrow e\n\t\t}\n\t}\n\n\t// creates an opts object for the vocabApi.getNestedChartsData()\n\tgetDataRequestOpts() {\n\t\tconst c = this.config\n\t\tconst opts = { term: c.term, filter: this.state.termfilter.filter }\n\t\tif (this.state.termfilter.filter0) opts.filter0 = this.state.termfilter.filter0\n\t\tif (c.term2) opts.term2 = c.term2\n\t\tif (c.term0) opts.term0 = c.term0\n\t\treturn opts\n\t}\n\n\tasync getDescrStats() {\n\t\t// get descriptive statistics for numerical terms\n\t\tconst terms = [this.config.term]\n\t\tif (this.config.term2) terms.push(this.config.term2)\n\t\tif (this.config.term0) terms.push(this.config.term0)\n\n\t\tfor (const t of terms) {\n\t\t\tif (isNumericTerm(t.term)) {\n\t\t\t\tconst data = await this.app.vocabApi.getDescrStats(t, this.state.termfilter)\n\t\t\t\tif (data.error) throw data.error\n\t\t\t\tt.q.descrStats = data\n\t\t\t}\n\t\t}\n\t}\n\n\tupdateSettings(config) {\n\t\tif (!config) return\n\t\t// translate relevant config keys to barchart settings keys\n\t\tconst obj = this.state\n\t\tconst settings = {\n\t\t\tterm0: config.term0 ? config.term0.term.id : '', // convenient reference to the term id\n\t\t\tterm1: config.term.term.id, // convenient reference to the term2 id\n\t\t\tterm2: config.term2 ? config.term2.term.id : '',\n\t\t\tunit: config.settings.barchart.unit,\n\t\t\torientation: config.settings.barchart.orientation,\n\t\t\tasterisksVisible: config.settings.barchart.asterisksVisible,\n\t\t\tmultiTestingCorr: config.settings.barchart.multiTestingCorr,\n\t\t\tdefaultColor: config.settings.barchart.defaultColor,\n\t\t\tcolorBars: config.settings.barchart.colorBars,\n\t\t\tdedup: config.settings.barchart.dedup,\n\t\t\tplotLength: config.settings.barchart.plotLength,\n\t\t\t// normalize bar thickness regardless of orientation\n\t\t\tcolw: config.settings.barchart.barwidth,\n\t\t\trowh: config.settings.barchart.barwidth,\n\t\t\tcolspace: config.settings.barchart.barspace,\n\t\t\trowspace: config.settings.barchart.barspace,\n\t\t\tcolorUsing: config.settings.barchart.colorUsing,\n\t\t\tshowStats: config.settings.barchart.showStats,\n\t\t\tshowAssociationTests: config.settings.barchart.showAssociationTests\n\t\t}\n\n\t\t/* mayResetHidden() was added before to prevent showing empty chart due to automatic hiding uncomputable categories\n\t\tthis has following problems:\n\t\t1. when term1=diaggrp and term2=hrtavg, uncomputable categories from term2 can show up by default.\n\t\t2. inconsistent behavior: when term1=agedx, term2=hrtavg the uncomputable categories are hidden by default\n\n\t\tside effect of disabling this function can cause empty chart, but seems to be minor given above\n\t\t*/\n\t\t//this.mayResetHidden(this.config.term, this.config.term2, this.config.term0)\n\n\t\tthis.setExclude(this.config.term, this.config.term2)\n\t\tObject.assign(this.settings, settings, this.currServerData.refs || {}, {\n\t\t\texclude: this.settings.exclude\n\t\t})\n\n\t\tthis.settings.cols = this.settings.dedup ? this.currServerData.refs.dedupCols : this.currServerData.refs.cols\n\t\tthis.settings.numCharts = this.currServerData.charts ? this.currServerData.charts.length : 0\n\t\tif (!config.term2 && this.settings.unit == 'pct') {\n\t\t\tthis.settings.unit = 'abs'\n\t\t}\n\t}\n\n\tmayResetHidden(term, term2, term0) {\n\t\tconst combinedTermIds = (term && term.term.id) + ';;' + (term2 && term2.term.id) + ';;' + (term0 && term0.term.id)\n\t\tif (combinedTermIds === this.currCombinedTermIds) return\n\t\t// only reset hidden if terms have changed\n\t\tfor (const chart of this.currServerData.charts) {\n\t\t\tif (term.q && term.q.hiddenValues) {\n\t\t\t\tthis.mayEditHiddenValues(term, chart.serieses.length, 'term')\n\t\t\t}\n\t\t\tif (term2 && term2.q && term2.q.hiddenValues) {\n\t\t\t\tfor (const series of chart.serieses) {\n\t\t\t\t\tthis.mayEditHiddenValues(term2, series.data.length, 'term2')\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.currCombinedTermIds = combinedTermIds\n\t}\n\n\tmayEditHiddenValues(term, numAvailable, termNum) {\n\t\tconst numHidden = Object.keys(term.q.hiddenValues).filter(key => term.q.hiddenValues[key]).length\n\t\tif (numHidden < numAvailable) return\n\t\t/*\n\t\t\tif all the serieses are assigned to be hidden on first render,\n\t\t\tshow the usually hidden values instead to avoid confusion\n\t\t\twith an empty plot\n\t\t*/\n\t\tfor (const key in term.q.hiddenValues) {\n\t\t\tif (!term.q.hiddenValues[key]) return\n\t\t\tdelete term.q.hiddenValues[key]\n\t\t}\n\t\t// since config.[term | term2 | term0] are copies of appState,\n\t\t// must save the changes to q.hiddenValues in the stored state\n\t\t// for consistent behavior in later app.dispatch or barchart updates\n\t\tthis.app.save({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: this.id,\n\t\t\tconfig: {\n\t\t\t\t[termNum]: term\n\t\t\t}\n\t\t})\n\t}\n\n\tsetExclude(term, term2) {\n\t\t// a non-numeric term.id is used directly as seriesId or dataId\n\t\tthis.settings.exclude.cols = Object.keys(term.q?.hiddenValues || {})\n\t\t\t.filter(id => term.q.hiddenValues[id])\n\t\t\t.map(id => {\n\t\t\t\treturn term.term.type == 'categorical'\n\t\t\t\t\t? id\n\t\t\t\t\t: this.settings.cols?.includes(id)\n\t\t\t\t\t? id\n\t\t\t\t\t: term.term.values[id]?.label\n\t\t\t\t\t? term.term.values[id].label\n\t\t\t\t\t: id\n\t\t\t})\n\n\t\tthis.settings.exclude.rows = !term2?.q?.hiddenValues\n\t\t\t? []\n\t\t\t: Object.keys(term2.q.hiddenValues)\n\t\t\t\t\t.filter(id => term2.q.hiddenValues[id])\n\t\t\t\t\t.map(id =>\n\t\t\t\t\t\tterm2.term.type == 'categorical'\n\t\t\t\t\t\t\t? id\n\t\t\t\t\t\t\t: this.settings.rows?.includes(id)\n\t\t\t\t\t\t\t? id\n\t\t\t\t\t\t\t: term2.term.values[id]?.label\n\t\t\t\t\t\t\t? term2.term.values[id].label\n\t\t\t\t\t\t\t: id\n\t\t\t\t\t)\n\t}\n\n\tprocessData(chartsData) {\n\t\tthis.seriesOrder = this.setMaxVisibleTotals(chartsData)\n\t\tif (!chartsData.charts.length) {\n\t\t\tthis.seriesOrder = []\n\t\t} else if (chartsData.refs.useColOrder) {\n\t\t\tthis.seriesOrder = this.settings.cols\n\t\t}\n\n\t\tconst rows = chartsData.refs.rows\n\n\t\tthis.barSorter = (a, b) => this.seriesOrder.indexOf(a) - this.seriesOrder.indexOf(b)\n\t\tthis.overlaySorter = chartsData.refs.useRowOrder\n\t\t\t? (a, b) => rows.indexOf(a.dataId) - rows.indexOf(b.dataId)\n\t\t\t: (a, b) =>\n\t\t\t\t\tthis.totalsByDataId[b.dataId] > this.totalsByDataId[a.dataId]\n\t\t\t\t\t\t? 1\n\t\t\t\t\t\t: this.totalsByDataId[b.dataId] < this.totalsByDataId[a.dataId]\n\t\t\t\t\t\t? -1\n\t\t\t\t\t\t: a.dataId < b.dataId\n\t\t\t\t\t\t? -1\n\t\t\t\t\t\t: 1\n\n\t\tthis.visibleCharts = chartsData.charts.filter(chart => chart.visibleSerieses.length)\n\n\t\tconst t1 = this.config.term\n\t\tconst t2 = this.config.term2\n\t\tconst chartsTests = chartsData.tests\n\n\t\t//get term1 and term2 labels\n\t\tfor (const chartId in chartsTests) {\n\t\t\tconst chartTests = chartsTests[chartId]\n\t\t\tfor (const t1c of chartTests) {\n\t\t\t\tconst t1label =\n\t\t\t\t\tt1.term.values && t1c.term1comparison in t1.term.values\n\t\t\t\t\t\t? t1.term.values[t1c.term1comparison].label\n\t\t\t\t\t\t: t1c.term1comparison\n\t\t\t\tt1c.term1Label = t1label\n\n\t\t\t\tfor (const t2t of t1c.term2tests) {\n\t\t\t\t\tconst t2label =\n\t\t\t\t\t\tt2.term.values && t2t.term2id in t2.term.values ? t2.term.values[t2t.term2id].label : t2t.term2id\n\t\t\t\t\tt2t.term2Label = t2label\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn chartsData\n\t}\n\n\tsetMaxVisibleTotals(chartsData) {\n\t\t// chartsData = this.currServerData\n\t\tthis.totalsByDataId = {}\n\t\tconst t1 = this.config.term\n\t\tconst t2 = this.config.term2\n\t\t// this will prioritize sorting series totals in the first chart,\n\t\t// then serieses in the subsequent chart that are not already in the first chart, and so on\n\t\tconst visibleTotalsByChartSeriesId = {}\n\t\tlet maxVisibleAcrossCharts = 0\n\t\tfor (const chart of chartsData.charts) {\n\t\t\tif (!chart.settings) chart.settings = JSON.parse(rendererSettings)\n\t\t\tObject.assign(chart.settings, this.settings)\n\t\t\tchart.visibleTotal = 0\n\t\t\tconst serieses = this.settings.dedup ? chart.dedupedSerieses : chart.serieses\n\t\t\tchart.visibleSerieses = serieses.filter(series => {\n\t\t\t\tif (chart.settings.exclude.cols.includes(series.seriesId)) return false\n\t\t\t\tseries.visibleData = series.data.filter(d => !chart.settings.exclude.rows.includes(d.dataId))\n\t\t\t\tseries.visibleTotal = series.visibleData.reduce((sum, a) => sum + a.total, 0)\n\t\t\t\tif (!series.visibleTotal) return false\n\t\t\t\tchart.visibleTotal += series.visibleTotal\n\t\t\t\tif (!(series.seriesId in visibleTotalsByChartSeriesId))\n\t\t\t\t\tvisibleTotalsByChartSeriesId[series.seriesId] = series.visibleTotal\n\t\t\t\tfor (const data of series.data) {\n\t\t\t\t\tdata.seriesId = series.seriesId\n\t\t\t\t\tif (\n\t\t\t\t\t\t(t1.term.type == 'geneVariant' && t1.q.type == 'values') ||\n\t\t\t\t\t\t(t2?.term.type == 'geneVariant' && t2?.q.type == 'values')\n\t\t\t\t\t) {\n\t\t\t\t\t\t// term1 or term2 is a geneVariant term not using groupsetting\n\t\t\t\t\t\t// need specialized processing\n\t\t\t\t\t\tif (!(data.dataId in this.totalsByDataId)) {\n\t\t\t\t\t\t\tthis.totalsByDataId[data.dataId] = {}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.totalsByDataId[data.dataId][chart.chartId] = this.totalsByDataId[data.dataId][chart.chartId]\n\t\t\t\t\t\t\t? this.totalsByDataId[data.dataId][chart.chartId] + data.total\n\t\t\t\t\t\t\t: 0 + data.total\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (!(data.dataId in this.totalsByDataId)) {\n\t\t\t\t\t\t\tthis.totalsByDataId[data.dataId] = 0\n\t\t\t\t\t\t}\n\t\t\t\t\t\tthis.totalsByDataId[data.dataId] += data.total\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn true\n\t\t\t})\n\t\t\tchart.settings.colLabels = chart.visibleSerieses.map(series => {\n\t\t\t\tconst id = series.seriesId\n\t\t\t\tconst label = t1.term.values && id in t1.term.values ? t1.term.values[id].label : id\n\t\t\t\tconst af = series && 'AF' in series ? ', AF=' + series.AF : ''\n\t\t\t\tconst ntotal =\n\t\t\t\t\tt2 && t2.term.type == 'condition' && t2.q.value_by_computable_grade ? '' : `, n=${series.visibleTotal}`\n\t\t\t\treturn {\n\t\t\t\t\tid,\n\t\t\t\t\tlabel: label + af + ntotal\n\t\t\t\t}\n\t\t\t})\n\t\t\tchart.maxVisibleSeriesTotal = chart.visibleSerieses.reduce((max, series) => {\n\t\t\t\treturn series.visibleTotal > max ? series.visibleTotal : max\n\t\t\t}, 0)\n\t\t\tif (chart.maxVisibleSeriesTotal > maxVisibleAcrossCharts) {\n\t\t\t\tmaxVisibleAcrossCharts = chart.maxVisibleSeriesTotal\n\t\t\t}\n\t\t}\n\t\tfor (const chart of chartsData.charts) {\n\t\t\tchart.maxVisibleAcrossCharts = maxVisibleAcrossCharts\n\t\t}\n\n\t\treturn Object.keys(visibleTotalsByChartSeriesId).sort(\n\t\t\t(a, b) => visibleTotalsByChartSeriesId[b] - visibleTotalsByChartSeriesId[a]\n\t\t)\n\t}\n\n\tsortStacking(series, chart, chartsData) {\n\t\tthis.term1toColor[series.seriesId] = this.settings.colorBars\n\t\t\t? this.getColor(chart, this.config.term, series.seriesId, this.bins?.[1])\n\t\t\t: this.settings.defaultColor\n\n\t\tseries.visibleData.sort(this.overlaySorter)\n\t\tlet seriesLogTotal = 0\n\t\tfor (const result of series.visibleData) {\n\t\t\tresult.colgrp = '-'\n\t\t\tresult.rowgrp = '-'\n\t\t\tresult.chartId = chart.chartId\n\t\t\tresult.seriesId = series.seriesId\n\t\t\tif (chartsData.tests) {\n\t\t\t\t// statistical tests result exist\n\t\t\t\t// put the pvalues corresponding to series.seriesId to result.groupPvalues\n\t\t\t\tresult.groupPvalues = chartsData.tests[chart.chartId].find(x => x.term1comparison === series.seriesId)\n\t\t\t}\n\t\t\tresult.seriesTotal = series.total\n\t\t\tresult.chartTotal = chart.visibleTotal\n\t\t\tresult.logTotal = Math.log10(result.total)\n\t\t\tseriesLogTotal += result.logTotal\n\t\t\tthis.setTerm2Color(chart, result)\n\t\t\tresult.color = this.term2toColor[result.dataId] || this.term1toColor[series.seriesId]\n\t\t}\n\t\tif (seriesLogTotal > chart.maxSeriesLogTotal) {\n\t\t\tchart.maxSeriesLogTotal = seriesLogTotal\n\t\t}\n\t\t// assign color to hidden data for use in legend\n\t\tfor (const result of series.data) {\n\t\t\tif (result.color) continue\n\t\t\tthis.setTerm2Color(chart, result)\n\t\t\tresult.color = this.term2toColor[result.dataId] || this.term1toColor[series.seriesId]\n\t\t}\n\t}\n\n\tsetTerm2Color(chart, result) {\n\t\tif (!this.config.term2) return\n\t\tthis.term2toColor[result.dataId] = this.getColor(chart, this.config.term2, result.dataId, this.bins?.[2])\n\t}\n\n\tgetColor(chart, t, label, bins) {\n\t\tif (!t.term) return\n\t\tif (t.q.type == 'predefined-groupset' || t.q.type == 'custom-groupset') {\n\t\t\tconst groupset =\n\t\t\t\tt.q.type == 'predefined-groupset' ? t.term.groupsetting.lst[t.q.predefined_groupset_idx] : t.q.customset\n\t\t\tif (!groupset) throw 'groupset is missing'\n\t\t\tconst group = groupset.groups.find(g => g.name == label)\n\t\t\tif (group?.color) return group.color\n\t\t}\n\t\t//use predefined colors unless colorBars is set to true.\n\t\t// Assigning colors to bars uses a better color scale as the scale considers the categories present, not in all the categories\n\t\tif (t.term.values && this.settings.colorUsing == 'all') {\n\t\t\tfor (const [key, v] of Object.entries(t.term.values)) {\n\t\t\t\tif (!v.color) continue\n\t\t\t\tif (key === label) return v.color\n\t\t\t\tif (v.label === label) return v.color\n\t\t\t}\n\t\t}\n\t\tconst bin = bins?.find(bin => bin.label == label)\n\t\tif (bin?.color) return bin.color\n\n\t\tif (t.term.type == 'geneVariant' && t.q.type == 'values') return this.getMutationColor(label)\n\t\treturn rgb(chart.colorScale(label)).toString()\n\t}\n\n\t// should move this outside of setTerm2Color(),\n\t// otherwise it will get *** recreated on every call *** to setTerm2Color()\n\tgetMutationColor(label) {\n\t\t// for (const [key, mc] of Object.entries(mclass)) if (mc.label == label) return mc.color\n\n\t\t// key is not used in loop above, can do this instead\n\t\tfor (const mc of Object.values(mclass)) if (mc.label === label && mc.color) return mc.color\n\n\t\t// can loop on the object directly\n\t\tfor (const key in mclass) {\n\t\t\tif (mclass[key].label === label && mclass[key].color) return mclass[key].color\n\t\t}\n\t}\n\n\t/*\n\t when term1 or term2 is a geneVariant term, return legendGrps: \n\t\t[ \n\t\t\t[\n\t\t\t\t{\n\t\t\t\t\tname: \"...\", \n\t\t\t\t\titems: [...]\n\t\t\t\t},\n\t\t\t\t...\n\t\t\t],\n\t\t\t... \n\t\t]\n\t*/\n\tgetLegendGrps() {\n\t\tconst t1 = this.config.term\n\t\tconst t2 = this.config.term2\n\t\tif (\n\t\t\t(t1.term.type == 'geneVariant' && t1.q.type == 'values') ||\n\t\t\t(t2?.term.type == 'geneVariant' && t2?.q.type == 'values')\n\t\t) {\n\t\t\tconst legendGrps = []\n\t\t\tfor (const chart of this.chartsData.charts) {\n\t\t\t\tlegendGrps.push(this.getOneLegendGrps(chart))\n\t\t\t}\n\t\t\treturn legendGrps\n\t\t}\n\t\treturn this.getOneLegendGrps()\n\t}\n\n\t//Used by getLegendGrps to get one legendGrps\n\tgetOneLegendGrps(chart) {\n\t\tconst legendGrps = []\n\t\tconst s = this.settings\n\t\tconst t1 = this.config.term\n\t\tconst t2 = this.config.term2\n\t\tconst headingStyle = 'color: #aaa; font-weight: 400'\n\n\t\t// descriptive statistics\n\t\tif (t1.q.descrStats && s.showStats) {\n\t\t\t// term1 has descriptive stats\n\t\t\tconst items = Object.values(t1.q.descrStats).map(stat => {\n\t\t\t\treturn {\n\t\t\t\t\ttext: `${stat.label}: ${stat.value}`,\n\t\t\t\t\tnoIcon: true\n\t\t\t\t}\n\t\t\t})\n\t\t\t// title of descriptive stats should include the term1 name if term2 is present\n\t\t\tconst title = t2 ? `Descriptive statistics: ${t1.term.name}` : 'Descriptive statistics'\n\t\t\tconst name = `<span style=\"${headingStyle}\">${title}</span>`\n\t\t\tlegendGrps.push({ name, items })\n\t\t}\n\t\tif (t2?.q.descrStats && s.showAssociationTests) {\n\t\t\t// term2 has descriptive stats\n\t\t\tconst items = Object.values(t2.q.descrStats).map(stat => {\n\t\t\t\treturn {\n\t\t\t\t\ttext: `${stat.label}: ${stat.value}`,\n\t\t\t\t\tnoIcon: true\n\t\t\t\t}\n\t\t\t})\n\t\t\t// title of descriptive stats will include the term2 name\n\t\t\t// because two terms are present\n\t\t\tconst title = `Descriptive statistics: ${t2.term.name}`\n\t\t\tconst name = `<span style=\"${headingStyle}\">${title}</span>`\n\t\t\tlegendGrps.push({ name, items })\n\t\t}\n\n\t\tif (s.cols && s.exclude.cols.length) {\n\t\t\tconst reducer = (sum, b) => sum + b.total\n\t\t\tconst items = s.exclude.cols\n\t\t\t\t.filter(collabel => s.cols.includes(collabel)) // && (!t1.term.values || collabel in t1.term.values))\n\t\t\t\t.flatMap(collabel => {\n\t\t\t\t\tconst filter = c => c.seriesId == collabel\n\t\t\t\t\tconst total =\n\t\t\t\t\t\tt2?.term?.type == 'condition'\n\t\t\t\t\t\t\t? 0\n\t\t\t\t\t\t\t: (t1.term.type == 'geneVariant' && t1.q.type == 'values') ||\n\t\t\t\t\t\t\t (t2?.term.type == 'geneVariant' && t2?.q.type == 'values')\n\t\t\t\t\t\t\t? chart.serieses.filter(filter).reduce(reducer, 0)\n\t\t\t\t\t\t\t: this.currServerData.charts.reduce((sum, chart) => {\n\t\t\t\t\t\t\t\t\treturn sum + chart.serieses.filter(filter).reduce(reducer, 0)\n\t\t\t\t\t\t\t }, 0)\n\t\t\t\t\tif (!total && !t2?.term?.type) return []\n\t\t\t\t\tconst label = t1.term.values && collabel in t1.term.values ? t1.term.values[collabel].label : collabel\n\t\t\t\t\tconst ntotal = total ? ', n=' + total : ''\n\t\t\t\t\treturn [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tid: collabel,\n\t\t\t\t\t\t\ttext: label + ntotal,\n\t\t\t\t\t\t\tcolor: '#fff',\n\t\t\t\t\t\t\ttextColor: '#000',\n\t\t\t\t\t\t\tborder: '1px solid #333',\n\t\t\t\t\t\t\t//inset: total ? \"n=\"+total : '',\n\t\t\t\t\t\t\tnoIcon: true,\n\t\t\t\t\t\t\ttype: 'col',\n\t\t\t\t\t\t\tisHidden: true,\n\t\t\t\t\t\t\thiddenOpacity: 1\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t})\n\t\t\t\t.sort(this.barSorter)\n\n\t\t\tif (items.length) {\n\t\t\t\tconst name = t2 ? t1.term.name : 'Other categories'\n\t\t\t\tlegendGrps.push({\n\t\t\t\t\tname: `<span style=\"${headingStyle}\">${name}</span>`,\n\t\t\t\t\titems\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tif (s.rows /*&& s.rows.length > 1*/ && !s.hidelegend && t2 && this.term2toColor) {\n\t\t\tconst value_by_label =\n\t\t\t\tt2.term.type != 'condition' || !t2.q\n\t\t\t\t\t? ''\n\t\t\t\t\t: t2.q.value_by_max_grade\n\t\t\t\t\t? 'max. grade'\n\t\t\t\t\t: t2.q.value_by_most_recent\n\t\t\t\t\t? 'most recent'\n\t\t\t\t\t: ''\n\t\t\tlegendGrps.push({\n\t\t\t\tname:\n\t\t\t\t\t`<span style=\"${headingStyle}\">` +\n\t\t\t\t\t(t2.term.type == 'geneVariant' ? '' : t2.term.name) +\n\t\t\t\t\t(value_by_label ? ', ' + value_by_label : '') +\n\t\t\t\t\t'</span>',\n\t\t\t\titems: s.rows\n\t\t\t\t\t.flatMap(d => {\n\t\t\t\t\t\tconst total = chart ? this.totalsByDataId[d]?.[chart.chartId] : this.totalsByDataId[d]\n\t\t\t\t\t\tif (!total) return []\n\t\t\t\t\t\tconst ntotal = total ? ', n=' + total : ''\n\t\t\t\t\t\tconst label = t2.term.values && d in t2.term.values ? t2.term.values[d].label : d\n\t\t\t\t\t\treturn [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tdataId: d,\n\t\t\t\t\t\t\t\ttext: label + ntotal,\n\t\t\t\t\t\t\t\tcolor: this.term2toColor[d],\n\t\t\t\t\t\t\t\ttype: 'row',\n\t\t\t\t\t\t\t\tisHidden: s.exclude.rows.includes(d)\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.sort(this.overlaySorter)\n\t\t\t})\n\t\t}\n\t\tif (t2 && this.state.multipleTestingCorrection) {\n\t\t\t// the dataset requires multiple testing correction and therefore needs to show this legend of Statistical Significance\n\t\t\t// calculate total number of unskipped tests\n\t\t\tlet testNum = 0\n\t\t\tfor (const chartId in this.chartsData.tests) {\n\t\t\t\ttestNum += this.chartsData.tests[chartId].reduce((a, b) => a + b.term2tests.filter(a => !a.skipped).length, 0)\n\t\t\t}\n\t\t\tconst items =\n\t\t\t\ttestNum > 1 && this.state.config.settings.barchart.multiTestingCorr\n\t\t\t\t\t? [{ text: `* p-value < (0.05 / ${testNum} tests)`, noEditColor: true }]\n\t\t\t\t\t: [{ text: `* p-value < 0.05`, noEditColor: true }]\n\t\t\tlegendGrps.push({\n\t\t\t\tname: `<span style=\"${headingStyle}\"> </span>`,\n\t\t\t\titems\n\t\t\t})\n\t\t}\n\n\t\treturn legendGrps\n\t}\n\n\t// helper so that 'Loading...' does not flash when not needed\n\ttoggleLoadingDiv(display = '') {\n\t\tif (display != 'none') {\n\t\t\tthis.dom.loadingDiv\n\t\t\t\t.style('opacity', 0)\n\t\t\t\t.style('display', display)\n\t\t\t\t.transition()\n\t\t\t\t.duration('loadingWait' in this ? this.loadingWait : 0)\n\t\t\t\t.style('opacity', 1)\n\t\t} else {\n\t\t\tthis.dom.loadingDiv.style('display', display)\n\t\t}\n\t\t// do not transition on initial chart load\n\t\tthis.loadingWait = 1000\n\t}\n}\n\nexport const barInit = getCompInit(Barchart)\n// this alias will allow abstracted dynamic imports\nexport const componentInit = barInit\n\nfunction setRenderers(self) {\n\tself.render = function () {\n\t\tconst charts = self.dom.barDiv.selectAll('.pp-sbar-div').data(self.visibleCharts, chart => chart.chartId)\n\n\t\tcharts.exit().each(self.exitChart)\n\t\tcharts.each(self.updateChart)\n\t\tcharts.enter().append('div').each(self.addChart)\n\n\t\tself.dom.holder.selectAll('.pp-chart-title').style('display', self.visibleCharts.length < 2 ? 'none' : 'block')\n\t\tconst grps = self.getLegendGrps()\n\t\tself.legendRenderer(grps)\n\n\t\tif (!self.visibleCharts.length) {\n\t\t\tconst clickLegendMessage =\n\t\t\t\tself.settings.exclude.cols.length || self.settings.exclude.rows.length\n\t\t\t\t\t? `<br/><span>click on a legend label below to display the barchart</span>`\n\t\t\t\t\t: ''\n\t\t\tself.dom.banner\n\t\t\t\t.html(`<span>No visible barchart data to render</span>${clickLegendMessage}`)\n\t\t\t\t.style('display', 'block')\n\t\t\tself.dom.legendDiv.selectAll('*').remove()\n\t\t} else {\n\t\t\tself.dom.banner.text('').style('display', 'none')\n\t\t}\n\t}\n\n\tself.exitChart = function (chart) {\n\t\tdelete self.renderers[chart.chartId]\n\t\tselect(this).remove()\n\t}\n\n\tself.updateChart = function (chart) {\n\t\t// this.dom.legendDiv.remove(\"*\")\n\t\tchart.settings.cols.sort(self.barSorter)\n\t\tchart.maxAcrossCharts = self.chartsData.maxAcrossCharts\n\t\tchart.handlers = self.handlers\n\t\tchart.maxSeriesLogTotal = 0\n\t\tchart.visibleSerieses.forEach(series => self.sortStacking(series, chart, self.chartsData))\n\t\tself.renderers[chart.chartId] = barsRenderer(self, select(this)) //rerender as settings may have changed\n\t\tself.renderers[chart.chartId](chart)\n\n\t\tconst div = select(this)\n\t\tdiv.style('display', 'inline-block')\n\t\tdiv\n\t\t\t.append('div')\n\t\t\t.attr('class', 'pp-sbar-div-chartLengends')\n\t\t\t.attr('data-testid', 'sjpcb-bars-chartLengends')\n\t\t\t.style('vertical-align', 'top')\n\t\t\t.style('margin', '10px 10px 10px 30px')\n\t\t\t.style('display', 'none')\n\t\tif (\n\t\t\tself.chartsData.tests &&\n\t\t\tself.chartsData.tests[chart.chartId] &&\n\t\t\tself.config.settings.barchart.showAssociationTests\n\t\t) {\n\t\t\t//chart has pvalues\n\t\t\tgeneratePvalueTable(chart, div)\n\t\t}\n\t}\n\n\tself.addChart = function (chart, i) {\n\t\tconst div = select(this)\n\t\t\t.attr('class', 'pp-sbar-div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('padding', '20px')\n\t\t\t.style('vertical-align', 'top')\n\t\tself.renderers[chart.chartId] = barsRenderer(self, select(this))\n\t\t//self.updateChart.call(this, chart)\n\t\tchart.settings.cols.sort(self.barSorter)\n\t\tchart.maxAcrossCharts = self.chartsData.maxAcrossCharts\n\t\tchart.handlers = self.handlers\n\t\tchart.maxSeriesLogTotal = 0\n\t\tchart.visibleSerieses.forEach(series => self.sortStacking(series, chart, self.chartsData))\n\t\tself.renderers[chart.chartId](chart)\n\n\t\t// div for chart-specific legends\n\t\tdiv\n\t\t\t.append('div')\n\t\t\t.attr('class', 'pp-sbar-div-chartLengends')\n\t\t\t.attr('data-testid', 'sjpcb-bars-chartLengends')\n\t\t\t.style('vertical-align', 'top')\n\t\t\t.style('margin', '10px 10px 10px 30px')\n\t\t\t.style('display', 'none')\n\t\tif (\n\t\t\tself.chartsData.tests &&\n\t\t\tself.chartsData.tests[chart.chartId] &&\n\t\t\tself.config.settings.barchart.showAssociationTests\n\t\t) {\n\t\t\t//chart has pvalues\n\t\t\tgeneratePvalueTable(chart, div)\n\t\t}\n\t}\n\n\t/*\n\tA function to generate a p-value table for Chi-squared/Fisher's exact tests\n\t*/\n\tfunction generatePvalueTable(chart, div) {\n\t\tconst holder = div\n\t\t\t.select('.pp-sbar-div-chartLengends')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('vertical-align', 'top')\n\t\t\t.style('text-align', 'center')\n\t\t\t.append('div')\n\t\t// sort term1 categories based on self.chartsData.refs.cols\n\t\t// const cols = self.settings.dedup ? self.chartsData.refs.cols\n\t\tself.chartsData.tests[chart.chartId].sort(function (a, b) {\n\t\t\treturn self.settings.cols.indexOf(a.term1comparison) - self.settings.cols.indexOf(b.term1comparison)\n\t\t})\n\n\t\t// sort term2 categories based on self.chartsData.refs.rows\n\t\tfor (const t1c of self.chartsData.tests[chart.chartId]) {\n\t\t\tt1c.term2tests.sort(function (a, b) {\n\t\t\t\treturn self.chartsData.refs.rows.indexOf(a.term2id) - self.chartsData.refs.rows.indexOf(b.term2id)\n\t\t\t})\n\t\t}\n\t\tconst columns = [\n\t\t\t{ label: 'Row 1' },\n\t\t\t{ label: 'Row 2' },\n\t\t\t{ label: 'Column 1' },\n\t\t\t{ label: 'Column 2' },\n\t\t\t{ label: 'P-value' }\n\t\t]\n\t\tconst noSkipped = self.chartsData.tests[chart.chartId].every(term1 =>\n\t\t\tterm1.term2tests.every(term2 => !term2.skipped)\n\t\t)\n\t\tconst rows = []\n\n\t\tconst visibleTests = self.chartsData.tests[chart.chartId].filter(term1Data =>\n\t\t\tchart.visibleSerieses.some(visibleTerm1 => visibleTerm1.seriesId === term1Data.term1comparison)\n\t\t)\n\t\tfor (const [index, term1] of visibleTests.entries()) {\n\t\t\tif (visibleTests.length == 2 && index == 1) {\n\t\t\t\t// when term1 has only 2 categories, then only a single category needs to be tested in the\n\t\t\t\t// association test (because the other category will get tested in that same test).\n\t\t\t\tbreak\n\t\t\t}\n\t\t\tconst visibleTerm1Data = chart.visibleSerieses.find(\n\t\t\t\tvisibleTerm1 => visibleTerm1.seriesId === term1.term1comparison\n\t\t\t)\n\t\t\tconst visibleTerm2Data = term1.term2tests.filter(term2Data =>\n\t\t\t\tvisibleTerm1Data.visibleData.some(visibleTerm2 => visibleTerm2.dataId === term2Data.term2id)\n\t\t\t)\n\t\t\tfor (const [index2, term2] of visibleTerm2Data.entries()) {\n\t\t\t\tif (chart.settings.rows.length - chart.settings.exclude.rows.length == 2 && index2 == 1) {\n\t\t\t\t\t// when term2 has only 2 visible categories, then only a single category needs to be tested in the\n\t\t\t\t\t// association test (because the other category will get tested in that same test).\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t\tlet negateTerm2Label = negateTermLabel(term2.term2Label)\n\t\t\t\tif (chart.settings.rows.length - chart.settings.exclude.rows.length == 2) {\n\t\t\t\t\t// when term2 has only 2 visible categories, Col2 would be the other category instead of \"not Col1\"\n\t\t\t\t\tconst visibleTerm2CatsKeys = chart.settings.rows.filter(row => !chart.settings.exclude.rows.includes(row))\n\t\t\t\t\tconst visibleTerm2Labels = visibleTerm2CatsKeys\n\t\t\t\t\t\t.map(catK => self.config.term2?.term?.values?.[catK]?.label)\n\t\t\t\t\t\t.filter(x => x != undefined)\n\t\t\t\t\tif (visibleTerm2Labels?.length == 2)\n\t\t\t\t\t\tnegateTerm2Label = visibleTerm2Labels[0] == term2.term2Label ? visibleTerm2Labels[1] : visibleTerm2Labels[0]\n\t\t\t\t}\n\n\t\t\t\trows.push([\n\t\t\t\t\t{ value: `${term1.term1Label}` },\n\t\t\t\t\t// when term1 has only 2 categories, Row2 would be the other category instead of \"not Row1\"\n\t\t\t\t\t{ value: visibleTests.length == 2 ? visibleTests[1].term1Label : negateTermLabel(term1.term1Label) },\n\t\t\t\t\t{ value: term2.term2Label },\n\t\t\t\t\t{ value: negateTerm2Label },\n\t\t\t\t\t//if both chi-square and Fisher's exact tests were used. for the tests computed by Fisher's exact test, add a superscript letter 'a' after the pvalue.\n\t\t\t\t\t{\n\t\t\t\t\t\thtml: term2.skipped\n\t\t\t\t\t\t\t? 'N/A'\n\t\t\t\t\t\t\t: term2.pvalue > 1e-4\n\t\t\t\t\t\t\t? roundValueAuto(Number(term2.pvalue))\n\t\t\t\t\t\t\t: roundValueAuto(Number(term2.pvalue))\n\t\t\t\t\t}\n\t\t\t\t])\n\t\t\t}\n\t\t}\n\t\t//adding a title for the pvalue table\n\t\t//title is \"Group comparisons (Fisher's exact test)\" if all tests are Fisher's exact test, otherwise title is 'Group comparisons (Chi-square test)'\n\t\tconst title = holder\n\t\t\t.append('div')\n\t\t\t.style('font-weight', 'bold')\n\t\t\t.style('padding-bottom', '0.5em')\n\t\t\t.html(\"2x2 Association test (Fisher's exact test)\")\n\t\t\t.style('font-size', '0.9em')\n\n\t\tconst table = holder.append('div').style('font-size', '0.9em')\n\t\trenderTable({\n\t\t\tcolumns,\n\t\t\trows,\n\t\t\tdiv: table,\n\t\t\tshowLines: false,\n\t\t\tmaxWidth: '70vw',\n\t\t\tmaxHeight: `${chart.svgh - 100}px`,\n\t\t\tresize: true\n\t\t})\n\n\t\t//footnote: superscript letter 'a' indicates the pvalue was computed by Fisher's exact test\n\t\ttable\n\t\t\t.append('div')\n\t\t\t.style('margin-top', '10px')\n\t\t\t.style('text-align', 'left')\n\t\t\t.style('font-size', '10px')\n\t\t\t.style('font-weight', 'normal')\n\t\t\t.html(noSkipped ? '' : 'N/A: association test skipped because of limited sample size <br>')\n\t}\n}\n\nfunction setInteractivity(self) {\n\tself.handlers = getHandlers(self)\n\n\tself.getChartImages = function () {\n\t\tconst charts = []\n\n\t\tfor (const chart of self.charts) {\n\t\t\tconst name = `${this.config.term.term.name} ${chart.name ? chart.name : ''}`\n\t\t\tcharts.push({ name, svg: chart.svg })\n\t\t}\n\t\treturn charts\n\t}\n\n\tself.download = function (event) {\n\t\tconst charts = self.getChartImages()\n\t\tconst dm = new DownloadMenu(charts, self.config.term.term.name)\n\t\tdm.show(event.clientX, event.clientY)\n\t}\n\n\t/** Downloads all charts as a single svg image, including the legend for each barchart, needs review as it\n\t * has some glitches. The legend rendering may be moved to the same svg and then it will be included in the download or a callback may be provided\n\t * to the downloadMenu to use this download when generating a single svg, once it works well\n\t */\n\t// self.download = function () {\n\t// \tif (!self.state) return\n\t// \t// has to be able to handle multichart view\n\t// \tconst mainGs = []\n\t// \tconst translate = { x: undefined, y: undefined }\n\t// \tconst titles = []\n\t// \tlet maxw = 0,\n\t// \t\tmaxh = 0,\n\t// \t\ttboxh = 0\n\t// \tlet prevY = 0,\n\t// \t\tnumChartsPerRow = 0\n\n\t// \tself.dom.barDiv.selectAll('.sjpcb-bars-mainG').each(function () {\n\t// \t\tmainGs.push(this)\n\t// \t\tconst bbox = this.getBBox()\n\t// \t\tif (bbox.width > maxw) maxw = bbox.width\n\t// \t\tif (bbox.height > maxh) maxh = bbox.height\n\t// \t\tconst divY = Math.round(this.parentNode.parentNode.getBoundingClientRect().y)\n\t// \t\tif (!numChartsPerRow) {\n\t// \t\t\tprevY = divY\n\t// \t\t\tnumChartsPerRow++\n\t// \t\t} else if (Math.abs(divY - prevY) < 5) {\n\t// \t\t\tnumChartsPerRow++\n\t// \t\t}\n\t// \t\tconst xy = select(this)\n\t// \t\t\t.attr('transform')\n\t// \t\t\t.split('translate(')[1]\n\t// \t\t\t.split(')')[0]\n\t// \t\t\t.split(',')\n\t// \t\t\t.map(d => +d.trim())\n\t// \t\tif (translate.x === undefined || xy[0] > translate.x) translate.x = +xy[0]\n\t// \t\tif (translate.y === undefined || xy[1] > translate.y) translate.y = +xy[1]\n\n\t// \t\tconst title = this.parentNode.parentNode.firstChild\n\t// \t\tconst tbox = title.getBoundingClientRect()\n\t// \t\tif (tbox.width > maxw) maxw = tbox.width\n\t// \t\tif (tbox.height > tboxh) tboxh = tbox.height\n\t// \t\ttitles.push({ text: title.innerText, styles: window.getComputedStyle(title) })\n\t// \t})\n\n\t// \t// add padding between charts\n\t// \tmaxw += 30\n\t// \tmaxh += 30\n\n\t// \tconst svg = document.createElementNS('http://www.w3.org/2000/svg', 'svg')\n\n\t// \tconst svgSel = select(svg)\n\t// \t\t.style('display', 'block')\n\t// \t\t.style('opacity', 1)\n\t// \t\t.attr('width', numChartsPerRow * maxw)\n\t// \t\t.attr('height', Math.floor(mainGs.length / numChartsPerRow) * maxh)\n\n\t// \tconst svgStyles = window.getComputedStyle(document.querySelector('.pp-bars-svg'))\n\t// \tfor (const prop of svgStyles) {\n\t// \t\tif (prop.startsWith('font')) svgSel.style(prop, svgStyles.getPropertyValue(prop))\n\t// \t}\n\n\t// \tmainGs.forEach((g, i) => {\n\t// \t\tconst mainG = g.cloneNode(true)\n\t// \t\tconst colNum = i % numChartsPerRow\n\t// \t\tconst rowNum = Math.floor(i / numChartsPerRow)\n\t// \t\tconst corner = { x: colNum * maxw + translate.x, y: rowNum * maxh + translate.y }\n\t// \t\tconst title = select(svg)\n\t// \t\t\t.append('text')\n\t// \t\t\t.attr('transform', 'translate(' + corner.x + ',' + corner.y + ')')\n\t// \t\t\t.text(titles[i].text)\n\t// \t\tfor (const prop of titles[i].styles) {\n\t// \t\t\tif (prop.startsWith('font')) title.style(prop, titles[i].styles.getPropertyValue(prop))\n\t// \t\t}\n\n\t// \t\tselect(mainG).attr('transform', 'translate(' + corner.x + ',' + (corner.y + tboxh) + ')')\n\t// \t\tsvg.appendChild(mainG)\n\t// \t})\n\n\t// \t// svg + legend must be attached to DOM in order for getBBox() to work within svgLegendRenderer\n\t// \tconst hiddenDiv = select('body').append('div').style('opacity', 0)\n\t// \thiddenDiv.node().appendChild(svg)\n\n\t// \tself.svgLegendRenderer = svgLegend({\n\t// \t\tholder: svgSel.append('g'),\n\t// \t\trectFillFxn: d => d.color,\n\t// \t\ticonStroke: '#aaa'\n\t// \t})\n\n\t// \tconst s = self.settings\n\t// \tconst svg0 = self.dom.barDiv.select('svg').node().getBoundingClientRect()\n\t// \tlet data = self.getLegendGrps()\n\t// \tdata.forEach(d => {\n\t// \t\td.name = d.name.replace(/<[^>]*>?/gm, '')\n\t// \t\tif (d.items) d.items = d.items.filter(c => !c.isHidden)\n\t// \t})\n\t// \tdata = data.filter(d => d.items.length && !d.name.includes('tatistic'))\n\t// \tconst fontsize = 14\n\t// \tself.svgLegendRenderer(data, {\n\t// \t\tsettings: Object.assign(\n\t// \t\t\t{\n\t// \t\t\t\tontop: false,\n\t// \t\t\t\tlineh: 25,\n\t// \t\t\t\tpadx: 5,\n\t// \t\t\t\tpadleft: 0, //150,\n\t// \t\t\t\tpadright: 20,\n\t// \t\t\t\tpadbtm: 30,\n\t// \t\t\t\tfontsize,\n\t// \t\t\t\ticonh: fontsize - 2,\n\t// \t\t\t\ticonw: fontsize - 2,\n\t// \t\t\t\thangleft: 1,\n\t// \t\t\t\tlinesep: false\n\t// \t\t\t},\n\t// \t\t\t{\n\t// \t\t\t\tsvgw: self.visibleCharts.length * svg0.width,\n\t// \t\t\t\tsvgh: svg0.height,\n\t// \t\t\t\tdimensions: {\n\t// \t\t\t\t\txOffset: 50\n\t// \t\t\t\t},\n\t// \t\t\t\tpadleft: 50\n\t// \t\t\t}\n\t// \t\t)\n\t// \t})\n\n\t// \tconst box = self.dom.legendDiv.node().getBoundingClientRect()\n\t// \tselect(svg).attr('height', svg0.height + box.height + 30)\n\t// \tif (box.width > svg0.width) select(svg).attr('width', box.width)\n\t// \thiddenDiv.remove()\n\n\t// \tconst svg_name = self.config.term.term.name + ' barchart'\n\t// \tto_svg(svg, svg_name, { apply_dom_styles: true })\n\t// }\n}\n\nexport function getDefaultBarSettings(app) {\n\treturn {\n\t\tbarspace: 2,\n\t\tbarwidth: 20,\n\t\tplotLength,\n\t\torientation: 'horizontal',\n\t\tunit: 'abs',\n\t\toverlay: 'none',\n\t\tdivideBy: 'none',\n\t\trowlabelw: 250,\n\t\tasterisksVisible: app?.getState()?.termdbConfig?.multipleTestingCorrection ? true : false,\n\t\tmultiTestingCorr: app?.getState()?.termdbConfig?.multipleTestingCorrection?.applyByDefault ? true : false,\n\t\tdefaultColor: plotColor,\n\t\tcolorBars: false,\n\t\tcolorUsing: 'all',\n\t\tdedup: false,\n\t\tshowStats: true,\n\t\tshowAssociationTests: true,\n\t\tshowPercent: false\n\t}\n}\n\nexport async function getPlotConfig(opts, app) {\n\tif (!opts.term) throw 'barchart getPlotConfig: opts.term{} missing'\n\ttry {\n\t\topts.tw = await fillTermWrapper(opts.term, app.vocabApi)\n\t\tif (opts.term2) opts.term2 = await fillTermWrapper(opts.term2, app.vocabApi)\n\t\tif (opts.term0) opts.term0 = await fillTermWrapper(opts.term0, app.vocabApi)\n\t} catch (e) {\n\t\tconsole.log('Error reading config: ' + JSON.stringify(opts))\n\t\tconsole.error(e)\n\t\tthrow `${e} [barchart getPlotConfig()]`\n\t}\n\n\tconst config = {\n\t\tid: opts.term.term.id,\n\t\tcontrolLabels: Object.assign({}, defaultUiLabels, app.vocabApi.termdbConfig.uiLabels || {}),\n\t\tsettings: {\n\t\t\tcontrols: {\n\t\t\t\tterm2: null, // the previous overlay value may be displayed as a convenience for toggling\n\t\t\t\tterm0: null\n\t\t\t},\n\t\t\tcommon: {\n\t\t\t\tuse_logscale: false, // flag for y-axis scale type, 0=linear, 1=log\n\t\t\t\tuse_percentage: false\n\t\t\t\t// Moved to barchart settings\n\t\t\t\t// barheight: 300, // maximum bar length\n\t\t\t\t// barwidth: 20, // bar thickness\n\t\t\t\t// barspace: 2 // space between two bars\n\t\t\t},\n\t\t\tbarchart: getDefaultBarSettings(app)\n\t\t}\n\t}\n\n\t// may apply term-specific changes to the default object\n\treturn copyMerge(config, opts)\n}\n\n// a function used by generatePvalueTable to negate a term label\n// TODO: add more conditions for better negation than \"not termLable\"\nexport function negateTermLabel(termLabel) {\n\tconst termLabelStr = String(termLabel)\n\tif (termLabelStr.toUpperCase().startsWith('NOT ')) {\n\t\treturn termLabelStr.substring(4) // Remove the \"not\" prefix\n\t} else {\n\t\treturn 'not ' + termLabelStr // Otherwise, add \"not\" prefix\n\t}\n}\n", "import { Menu, renderTable } from '#dom'\nimport { dofetch3 } from '../common/dofetch'\nimport { mclass, dt2label } from '#shared/common.js'\nimport { newpane, export_data } from '../src/client'\nimport { filterJoin, getFilterItemByTag, getNormalRoot, findItemByTermId, normalizeProps } from '#filter'\nimport { rgb } from 'd3-color'\nimport { create } from 'd3-selection'\nimport { roundValueAuto } from '#shared/roundValue.js'\nimport { isNumericTerm } from '#shared/terms.js'\nimport { negateTermLabel } from './barchart'\nimport { getSamplelstFilter, getSamplelstTW, getFilter, addNewGroup } from '../mass/groups.js'\n\nexport default function getHandlers(self) {\n\tconst tip = new Menu({ padding: '5px' })\n\tself.dom.tip = tip\n\tconst s = self.settings\n\n\treturn {\n\t\tchart: {\n\t\t\ttitle(chart) {\n\t\t\t\tif (!self.config.term0) return chart.chartId\n\t\t\t\treturn self.config.term0.term.values && chart.chartId in self.config.term0.term.values\n\t\t\t\t\t? self.config.term0.term.values[chart.chartId].label\n\t\t\t\t\t: chart.chartId\n\t\t\t}\n\t\t},\n\t\tsvg: {\n\t\t\tmouseout: () => {\n\t\t\t\ttip.hide()\n\t\t\t}\n\t\t},\n\t\tseries: {\n\t\t\tmouseover(event, d) {\n\t\t\t\tevent.stopPropagation()\n\t\t\t\tlet percent = self.config.term2 ? (d.total / d.seriesTotal) * 100 : (d.seriesTotal / d.chartTotal) * 100\n\t\t\t\tpercent = percent.toFixed(1)\n\t\t\t\tconst t1 = self.config.term.term\n\t\t\t\tconst t2 = self.config.term2 && self.config.term2.term\n\t\t\t\tconst term1unit = t1.unit\n\t\t\t\tconst seriesLabel =\n\t\t\t\t\t(t1.values && d.seriesId in t1.values ? t1.values[d.seriesId].label : d.seriesId) +\n\t\t\t\t\t(t1.unit ? ' ' + t1.unit : '')\n\t\t\t\tconst dataLabel =\n\t\t\t\t\t(t2 && t2.values && d.dataId in t2.values ? t2.values[d.dataId].label : d.dataId) +\n\t\t\t\t\t(t2 && t2.unit ? ' ' + t2.unit : '')\n\t\t\t\tconst icon = !t2\n\t\t\t\t\t? ''\n\t\t\t\t\t: \"<div style='display:inline-block; width:14px; height:14px; margin: 2px 3px; vertical-align:top; background:\" +\n\t\t\t\t\t d.color +\n\t\t\t\t\t \"'> </div>\"\n\t\t\t\tconst rows = [`<tr><td colspan=2 style='padding:3px; text-align:center'>${seriesLabel}</td></tr>`]\n\t\t\t\tif (t2) {\n\t\t\t\t\trows.push(\n\t\t\t\t\t\t`<tr><td colspan=2 style='padding:3px; text-align:center'>${icon} <span>${dataLabel}</span></td></tr>`\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\trows.push(\n\t\t\t\t\t`<tr><td style='padding:3px; color:#aaa'>#Individuals</td><td style='padding:3px; text-align:center'>${d.total}</td></tr>`,\n\t\t\t\t\t`<tr><td style='padding:3px; color:#aaa'>percent</td><td style='padding:3px; text-align:center'>${percent}%</td></tr>`\n\t\t\t\t)\n\n\t\t\t\t//mouse-over p-value and 2x2 table\n\t\t\t\tif (t2) {\n\t\t\t\t\tconst pvalue = d.groupPvalues?.term2tests?.find(x => x.term2id === d.dataId).pvalue\n\t\t\t\t\tconst term1Label = d.groupPvalues.term1Label\n\t\t\t\t\tconst term2Label = d.groupPvalues.term2tests.find(x => x.term2id === d.dataId).term2Label\n\t\t\t\t\tconst tableValues = d.groupPvalues.term2tests.find(x => x.term2id === d.dataId).tableValues\n\t\t\t\t\tconst skipped = d.groupPvalues.term2tests.find(x => x.term2id === d.dataId).skipped\n\n\t\t\t\t\t// when term1 has only 2 categories, Row2 would be the other category instead of \"not Row1\"\n\t\t\t\t\tconst negateTerm1Label = !(\n\t\t\t\t\t\tself.settings.cols.length - self.settings.exclude.cols.length == 2 &&\n\t\t\t\t\t\tself.chartsData.tests[d.chartId].length == 2\n\t\t\t\t\t)\n\t\t\t\t\t\t? negateTermLabel(term1Label)\n\t\t\t\t\t\t: self.chartsData.tests[d.chartId][0].term1Label == term1Label\n\t\t\t\t\t\t? self.chartsData.tests[d.chartId][1].term1Label\n\t\t\t\t\t\t: self.chartsData.tests[d.chartId][0].term1Label\n\n\t\t\t\t\tlet negateTerm2Label = negateTermLabel(term2Label)\n\t\t\t\t\tif (self.settings.rows.length - self.settings.exclude.rows.length == 2) {\n\t\t\t\t\t\t// when term2 has only 2 visible categories, Col2 would be the other category instead of \"not Col1\"\n\t\t\t\t\t\tconst visibleTerm2CatsKeys = self.settings.rows.filter(row => !self.settings.exclude.rows.includes(row))\n\t\t\t\t\t\tconst visibleTerm2Labels = visibleTerm2CatsKeys\n\t\t\t\t\t\t\t.map(catK => self.config.term2?.term?.values?.[catK]?.label)\n\t\t\t\t\t\t\t.filter(x => x != undefined)\n\t\t\t\t\t\tif (visibleTerm2Labels?.length == 2)\n\t\t\t\t\t\t\tnegateTerm2Label = visibleTerm2Labels[0] == term2Label ? visibleTerm2Labels[1] : visibleTerm2Labels[0]\n\t\t\t\t\t}\n\n\t\t\t\t\t//Only show the p-value and 2x2 table in tooltip\n\t\t\t\t\t//when the user enabled association tests\n\t\t\t\t\t//from control panel\n\t\t\t\t\tif (self.settings.showAssociationTests) {\n\t\t\t\t\t\trows.push(\n\t\t\t\t\t\t\t`<tr>\n\t\t\t\t\t\t\t<td style='padding:3px; color:#aaa'>p-value</td>\n\t\t\t\t\t\t\t<td style='padding:3px; text-align:center'>${\n\t\t\t\t\t\t\t\tskipped ? 'N/A' : pvalue > 1e-4 ? Number(pvalue.toFixed(4)) : roundValueAuto(Number(pvalue))\n\t\t\t\t\t\t\t}</td>\n\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t<table style=\"margin: 5px; text-align:left; font-size: 0.8em; border-spacing: 5px; border-collapse: separate;\"\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td style='color:#aaa'></td>\n\t\t\t\t\t\t\t\t<td style='color:#aaa'>${term2Label}</td>\n\t\t\t\t\t\t\t\t<td style='color:#aaa'>${negateTerm2Label}</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td style='color:#aaa'>${term1Label}</td>\n\t\t\t\t\t\t\t\t<td>${tableValues.R1C1}</td>\n\t\t\t\t\t\t\t\t<td>${tableValues.R1C2}</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t\t<tr>\n\t\t\t\t\t\t\t\t<td style='color:#aaa'>${negateTerm1Label}</td>\n\t\t\t\t\t\t\t\t<td>${tableValues.R2C1}</td>\n\t\t\t\t\t\t\t\t<td>${tableValues.R2C2}</td>\n\t\t\t\t\t\t\t</tr>\n\t\t\t\t\t\t</table>`\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (!t1.type == 'condition' && (!t2 || !t2.type == 'condition')) {\n\t\t\t\t\trows.push(\n\t\t\t\t\t\t`<tr><td style='padding:3px; color:#aaa'>Percentage</td><td style='padding:3px; text-align:center'>${(\n\t\t\t\t\t\t\t(100 * d.total) /\n\t\t\t\t\t\t\t(t2 ? d.seriesTotal : d.chartTotal)\n\t\t\t\t\t\t).toFixed(1)}%</td></tr>`\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\ttip.show(event.clientX, event.clientY).d.html(`<table class='sja_simpletable'>${rows.join('\\n')}</table>`)\n\t\t\t},\n\t\t\tmouseout: () => {\n\t\t\t\ttip.hide()\n\t\t\t},\n\t\t\trectFill(d) {\n\t\t\t\treturn d.color\n\t\t\t},\n\t\t\tstrokeFill(d) {\n\t\t\t\tconst rgbColor = rgb(d.color)\n\t\t\t\tconst stroke = rgbColor.toString() == rgb('white').toString() ? rgbColor.darker() : rgbColor\n\t\t\t\treturn stroke\n\t\t\t},\n\t\t\tclick: self.opts.bar_click_override\n\t\t\t\t? (event, d) => self.opts.bar_click_override(getTermValues(d, self))\n\t\t\t\t: (event, d) => handle_click(event, self, d)\n\t\t},\n\t\tbarLabel: {\n\t\t\ttext: d => {\n\t\t\t\treturn 'label' in d\n\t\t\t\t\t? d.label\n\t\t\t\t\t: self.config.term.values && 'id' in d && d.id in self.config.term.values\n\t\t\t\t\t? self.config.term.values[d.id].label\n\t\t\t\t\t: d\n\t\t\t},\n\t\t\tclick: self.opts.bar_click_override\n\t\t\t\t? (event, d) => self.opts.bar_click_override(getTermValues(d, self))\n\t\t\t\t: (event, d) => handle_click(event, self, d),\n\t\t\tmouseover: event => {\n\t\t\t\tevent.stopPropagation()\n\t\t\t},\n\t\t\tmouseout: () => {\n\t\t\t\ttip.hide()\n\t\t\t}\n\t\t},\n\t\tlegend: {\n\t\t\tonColorClick: e => handleLegendClick(e.target, self),\n\t\t\tclick: e => handleLegendClick(e.target, self),\n\t\t\tmouseover: event => {\n\t\t\t\tevent.stopPropagation()\n\t\t\t\tconst d = event.target.__data__\n\t\t\t\tif (d === undefined) return\n\t\t\t\tif (d.isHidden) tip.show(event.clientX, event.clientY).d.html('Click to unhide bar')\n\t\t\t},\n\t\t\tmouseout: () => {\n\t\t\t\ttip.hide()\n\t\t\t}\n\t\t},\n\t\tyAxis: {\n\t\t\ttext: visibleTotal => {\n\t\t\t\tconst type = self.sampleType?.plural_name || 'samples'\n\t\t\t\tconst term = self.config.term\n\t\t\t\tif (s.orientation == 'vertical') {\n\t\t\t\t\t// Do not show the sum of serieses as (n=...) when serieses are 'Sub-condition', 'Most recent grade' or 'Any grade'\n\t\t\t\t\t// because a patient could have multiple 'Sub-condition', 'Most recent grade' or 'Any grade', and as a result could\n\t\t\t\t\t// be counted multiple times.\n\t\t\t\t\treturn s.unit == 'pct'\n\t\t\t\t\t\t? `% of ${type}`\n\t\t\t\t\t\t: `# of ${type} ` +\n\t\t\t\t\t\t\t\t(term.q.bar_by_children || term.q.value_by_most_recent || term.q.value_by_computable_grade\n\t\t\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t\t\t: `(n=${visibleTotal})`)\n\t\t\t\t} else {\n\t\t\t\t\treturn term.q.bar_by_children\n\t\t\t\t\t\t? 'Sub-condition'\n\t\t\t\t\t\t: term.q.value_by_max_grade\n\t\t\t\t\t\t? 'Maximum grade'\n\t\t\t\t\t\t: term.q.value_by_most_recent\n\t\t\t\t\t\t? 'Most recent grade'\n\t\t\t\t\t\t: term.q.value_by_computable_grade\n\t\t\t\t\t\t? 'Any grade'\n\t\t\t\t\t\t: term.type == 'categorical' || !term.unit\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: term.unit\n\t\t\t\t}\n\t\t\t}\n\t\t},\n\t\txAxis: {\n\t\t\ttext: visibleTotal => {\n\t\t\t\tconst type = self.sampleType?.plural_name || 'samples'\n\t\t\t\tconst term = self.config.term\n\t\t\t\tif (s.orientation == 'vertical') {\n\t\t\t\t\treturn term.q.bar_by_children\n\t\t\t\t\t\t? 'Sub-condition'\n\t\t\t\t\t\t: term.q.value_by_max_grade\n\t\t\t\t\t\t? 'Maximum grade'\n\t\t\t\t\t\t: term.q.value_by_most_recent\n\t\t\t\t\t\t? 'Most recent grade'\n\t\t\t\t\t\t: term.q.value_by_computable_grade\n\t\t\t\t\t\t? 'Any grade'\n\t\t\t\t\t\t: term.type == 'categorical' || !term.unit\n\t\t\t\t\t\t? ''\n\t\t\t\t\t\t: term.unit\n\t\t\t\t} else {\n\t\t\t\t\t// Do not show the sum of serieses as (n=...) when serieses are 'Sub-condition', 'Most recent grade' or 'Any grade'\n\t\t\t\t\t// because a patient could have multiple 'Sub-condition', 'Most recent grade' or 'Any grade', and as a result could\n\t\t\t\t\t// be counted multiple times.\n\t\t\t\t\treturn s.unit == 'pct'\n\t\t\t\t\t\t? `% of ${type}`\n\t\t\t\t\t\t: `# of ${type} ` +\n\t\t\t\t\t\t\t\t(term.q.bar_by_children || term.q.value_by_most_recent || term.q.value_by_computable_grade\n\t\t\t\t\t\t\t\t\t? ''\n\t\t\t\t\t\t\t\t\t: `(n=${visibleTotal})`)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n}\n\nfunction handleColorClick(d, self, color) {\n\tconst termNum = d.type == 'col' ? 'term' : 'term2'\n\tconst term = self.config[termNum]\n\tlet dataId = d.dataId\n\tif (term.term.values && !term.term.values?.[dataId])\n\t\tfor (const [key, value] of Object.entries(term.term.values)) if (value.label == d.dataId) dataId = key\n\tif (term.term.values?.[dataId]) term.term.values[dataId].color = color\n\tif (term.term.type == 'geneVariant') {\n\t\tlet groupset\n\t\tif (term.q.type == 'predefined-groupset') {\n\t\t\tgroupset = term.term.groupsetting.lst[term.q.predefined_groupset_idx]\n\t\t} else if (term.q.type == 'custom-groupset') {\n\t\t\tgroupset = term.q.customset\n\t\t} else {\n\t\t\tthrow 'unexpected q.type'\n\t\t}\n\t\tconst group = groupset.groups.find(g => g.name == d.dataId)\n\t\tif (!group) throw 'group not found'\n\t\tgroup.color = color\n\t}\n\tlet binColored = null\n\tif (self.bins[2].length > 0) {\n\t\t//term index: term0: 0, term: 1, term2: 2\n\t\tconst binMatched = self.bins[2].find(bin => bin.label == d.dataId)\n\t\tif (binMatched) {\n\t\t\tbinMatched.color = color\n\t\t\tbinColored = self.bins[2]\n\t\t}\n\t}\n\tself.app.dispatch({\n\t\ttype: 'plot_edit',\n\t\tid: self.id,\n\t\tconfig: {\n\t\t\t[termNum]: {\n\t\t\t\t$id: term.$id,\n\t\t\t\tid: term.id,\n\t\t\t\tisAtomic: true,\n\t\t\t\tterm: term.term,\n\t\t\t\tq: getUpdatedQfromClick(d, term, d.isHidden, binColored)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunction handleLegendClick(target, self) {\n\tconst d = target.__data__\n\tif (d === undefined) return\n\tif (!('type' in d)) return\n\tconst termNum = d.type == 'col' ? 'term' : 'term2'\n\tconst term = self.config[termNum]\n\tconst isHidden =\n\t\t'isHidden' in d\n\t\t\t? !d.isHidden\n\t\t\t: !(term.q && term.q.hiddenValues && term.q.hiddenValues['dataId' in d ? d.dataId : d.id])\n\tconst tip = self.app.tip\n\tconst menu = tip.clear()\n\tmenu.showunder(target)\n\tconst div = menu.d.append('div')\n\tdiv\n\t\t.append('div')\n\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t.text(!isHidden ? 'Show' : 'Hide')\n\t\t.on('click', () => {\n\t\t\tmenu.hide()\n\t\t\thideCategory(d, self, isHidden)\n\t\t})\n\tif (term.q.hiddenValues && Object.keys(term.q.hiddenValues).length > 1)\n\t\tdiv\n\t\t\t.append('div')\n\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t.text('Show all')\n\t\t\t.on('click', () => {\n\t\t\t\tmenu.hide()\n\t\t\t\tconst config = {}\n\t\t\t\tconst tw = structuredClone(term)\n\t\t\t\tdelete tw.q.hiddenValues\n\n\t\t\t\tself.app.dispatch({\n\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\tid: self.id,\n\t\t\t\t\tconfig: { [termNum]: tw }\n\t\t\t\t})\n\t\t\t})\n\tconst color = rgb(d.color).formatHex()\n\tif (color != '#ffffff') {\n\t\tconst input = div\n\t\t\t.append('div')\n\t\t\t.attr('class', 'sja_sharp_border')\n\t\t\t.style('padding', '0px 10px')\n\t\t\t.text('Color:')\n\t\t\t.append('input')\n\t\t\t.attr('type', 'color')\n\t\t\t.attr('value', color)\n\t\t\t.on('change', () => {\n\t\t\t\thandleColorClick(d, self, input.node().value)\n\t\t\t\tmenu.hide()\n\t\t\t})\n\t}\n}\n\nexport function hideCategory(d, self, isHidden) {\n\tconst termNum = d.type == 'col' ? 'term' : 'term2'\n\tconst term = self.config[termNum]\n\tself.app.dispatch({\n\t\ttype: 'plot_edit',\n\t\tid: self.id,\n\t\tconfig: {\n\t\t\t[termNum]: {\n\t\t\t\t//Fix for list samples options not working\n\t\t\t\t//after hiding a category\n\t\t\t\t$id: term?.$id,\n\t\t\t\tid: term.id,\n\n\t\t\t\tisAtomic: true,\n\t\t\t\tterm: term.term,\n\t\t\t\tq: getUpdatedQfromClick(d, term, isHidden)\n\t\t\t}\n\t\t}\n\t})\n}\n\nfunction getUpdatedQfromClick(d, term, isHidden = false, binColored = null) {\n\tconst label = 'id' in d ? d.id : d.type == 'col' ? d.seriesId : d.dataId\n\tconst valueId = term.term.values && Object.keys(term.term.values).find(id => term.term.values[id].label === label)\n\tconst id = !valueId ? label : valueId\n\tconst q = JSON.parse(JSON.stringify(term.q))\n\tif (!q.hiddenValues) q.hiddenValues = {}\n\tif (isHidden) q.hiddenValues[id] = 1\n\telse delete q.hiddenValues[id]\n\tif (binColored) q.binColored = binColored\n\treturn q\n}\n\nfunction handle_click(event, self, chart) {\n\tconst d = event.target.__data__ || event.target.parentNode.__data__\n\t// bar label data only has {id,label},\n\t// while bar data has all required data including seriesId\n\tconst term1 = self.config.term.term\n\tconst term2 = self.config.term2 ? self.config.term2.term : null\n\tconst uncomp_term1 = term1.values ? Object.values(term1.values).map(v => v.label) : []\n\tconst uncomp_term2 = term2 && term2.values ? Object.values(term2.values).map(v => v.label) : []\n\tconst term1unit = term1.unit && !uncomp_term1.includes(d.seriesId || d.id) ? ' ' + term1.unit : ''\n\tconst term2unit = term2 && term2.unit && !uncomp_term2.includes(d.dataId || d.id) ? ' ' + term2.unit : ''\n\tconst seriesLabel =\n\t\t(term1.values && d.seriesId in term1.values ? term1.values[d.seriesId].label : d.seriesId ? d.seriesId : d.id) +\n\t\tterm1unit\n\tconst dataLabel =\n\t\t(term2 && term2.values && d.dataId in term2.values ? term2.values[d.dataId].label : d.dataId ? d.dataId : d.id) +\n\t\tterm2unit\n\tconst icon = !term2\n\t\t? ''\n\t\t: \"<div style='display:inline-block; width:14px; height:14px; margin: 2px 3px; vertical-align:top; background:\" +\n\t\t d.color +\n\t\t \"'> </div>\"\n\tconst header =\n\t\t`<div style='padding:2px'><b>${term1.name}</b>: ${seriesLabel}</div>` +\n\t\t(d.seriesId && term2 ? `<div style='padding:2px'><b>${term2.name}</b>: ${dataLabel} ${icon}</div>` : '')\n\n\tconst data = d.seriesId || d.seriesId === 0 ? d : { seriesId: d.id, dataId: d.dataId }\n\n\tconst options = []\n\tif (self.opts.bar_click_opts.includes('hide_bar')) {\n\t\toptions.push({\n\t\t\tlabel: data.seriesId ? 'Hide \"' + seriesLabel + '\"' : 'Hide',\n\t\t\tcallback: () => {\n\t\t\t\tconst term = self.config.term\n\t\t\t\tself.app.dispatch({\n\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\tid: self.id,\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tterm: {\n\t\t\t\t\t\t\t$id: term.$id,\n\t\t\t\t\t\t\tid: term.id,\n\t\t\t\t\t\t\tisAtomic: true,\n\t\t\t\t\t\t\tterm: term.term,\n\t\t\t\t\t\t\tq: getUpdatedQfromClick({ id: data.seriesId, type: 'col' }, term, true)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\n\t\tif (data.dataId || data.dataId === 0) {\n\t\t\toptions.push({\n\t\t\t\tlabel: 'Hide \"' + dataLabel + '\" ' + icon,\n\t\t\t\tcallback: () => {\n\t\t\t\t\tconst term2 = self.config.term2\n\t\t\t\t\tself.app.dispatch({\n\t\t\t\t\t\tisAtomic: true,\n\t\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\t\tid: self.id,\n\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\tterm2: {\n\t\t\t\t\t\t\t\tisAtomic: true,\n\t\t\t\t\t\t\t\tterm: term2.term,\n\t\t\t\t\t\t\t\tq: getUpdatedQfromClick({ id: data.dataId, type: 'row' }, term2, true)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tif (self.opts.bar_click_opts.includes('add_filter')) {\n\t\tconst item = findItemByTermId(self.state.termfilter.filter, self.config.term.term.id)\n\t\tif (!item) {\n\t\t\toptions.push({\n\t\t\t\tlabel: 'Add as filter',\n\t\t\t\tcallback: async (self, tvslst) => {\n\t\t\t\t\tconst arg = getListSamplesArg(event, self, data.seriesId, data.dataId, chart.chartId)\n\t\t\t\t\tawait menuoption_add_filter(self, tvslst, arg)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tif (self.opts.bar_click_opts.includes('add_group') && self.config.displaySampleIds) {\n\t\toptions.push({\n\t\t\tlabel: 'Add as group',\n\t\t\tcallback: async () => {\n\t\t\t\tconst arg = getListSamplesArg(event, self, data.seriesId, data.dataId, chart.chartId)\n\t\t\t\tawait addAsGroup(arg)\n\t\t\t}\n\t\t})\n\t}\n\n\t//disable sample listing temporarily\n\tif (self.config.displaySampleIds) {\n\t\toptions.push({\n\t\t\tlabel: 'List samples',\n\t\t\tcallback: async () => {\n\t\t\t\tconst arg = getListSamplesArg(event, self, data.seriesId, data.dataId, chart.chartId)\n\t\t\t\tawait listSamples(arg)\n\t\t\t}\n\t\t})\n\t}\n\n\t// TODO: add to cart\n\t//\n\t// if (self.opts.bar_click_opts.includes('add_to_cart')) {\n\t// \toptions.push({\n\t// \t\tlabel: 'Add group to cart',\n\t// \t\tcallback: menuoption_select_group_add_to_cart\n\t// \t})\n\t// }\n\n\tif (!options.length) return\n\tself.app.tip.clear()\n\tif (header) {\n\t\tself.app.tip.d.append('div').html(header)\n\t}\n\tconst tvslst = getTermValues(data, self)\n\tself.app.tip.d\n\t\t.append('div')\n\t\t.selectAll('div')\n\t\t.data(options)\n\t\t.enter()\n\t\t.append('div')\n\t\t.attr('class', 'sja_menuoption')\n\t\t.html(d => d.label)\n\t\t.on('click', async (event, d) => {\n\t\t\tif (event.target._clicked) return\n\t\t\tevent.target._clicked = true\n\t\t\tevent.target.textContent = 'Loading...'\n\t\t\tawait d.callback(self, tvslst)\n\t\t\tself.app.tip.hide()\n\t\t})\n\tself.app.tip.show(event.clientX, event.clientY)\n}\n\nfunction getListSamplesArg(event, self, seriesId, dataId, chartId) {\n\tconst terms = [self.config.term]\n\tconst tvslst = {\n\t\ttype: 'tvslst',\n\t\tin: true,\n\t\tjoin: 'and',\n\t\tlst: []\n\t}\n\tconst geneVariant = {}\n\tconst tvs = getTvs(1, seriesId, self, geneVariant)\n\tif (tvs) tvslst.lst.push(tvs)\n\tif (self.config.term2) {\n\t\tterms.push(self.config.term2)\n\t\tconst tvs = getTvs(2, dataId, self, geneVariant)\n\t\tif (tvs) tvslst.lst.push(tvs)\n\t}\n\tif (self.config.term0) {\n\t\tterms.push(self.config.term0)\n\t\tconst tvs = getTvs(0, chartId, self, geneVariant)\n\t\tif (tvs) tvslst.lst.push(tvs)\n\t}\n\tconst arg = {\n\t\tevent,\n\t\tself,\n\t\tterms,\n\t\ttvslst,\n\t\tgeneVariant\n\t}\n\treturn arg\n}\n\nfunction getTvs(termIndex, value, self, geneVariant) {\n\tif (!value) return\n\tconst term = termIndex == 0 ? self.config.term0 : termIndex == 1 ? self.config.term : self.config.term2\n\tif (term.term.type == 'geneVariant') {\n\t\t// geneVariant filtering will be handled by mayFilterByGeneVariant()\n\t\tgeneVariant[`t${termIndex}value`] = value\n\t\treturn\n\t}\n\tlet tvs = {\n\t\ttype: 'tvs',\n\t\ttvs: {\n\t\t\tterm: term.term,\n\t\t\tvalues: [{ key: value }]\n\t\t}\n\t}\n\tif (term.q.type == 'custom-groupset' || term.q.type == 'predefined-groupset') {\n\t\tconst groupset =\n\t\t\tterm.q.type == 'custom-groupset' ? term.q.customset : term.term.groupsetting.lst[term.q.predefined_groupset_idx]\n\t\tconst group = groupset.groups.find(group => group.name == value)\n\t\tif (!group) throw 'group not found'\n\t\ttvs.tvs.values = group.values\n\t} else if (isNumericTerm(term.term)) {\n\t\tconst bins = self.bins[termIndex]\n\t\ttvs.tvs.ranges = [bins.find(bin => bin.label == value)]\n\t} else if (term.term.type == 'samplelst') {\n\t\tconst list = term.term.values?.[value]?.list || []\n\t\tconst ids = list.map(s => s.sampleId)\n\t\tconst tvslst = getSamplelstFilter(ids)\n\t\ttvs = tvslst.lst[0] // tvslst only has the tvs for the samplelst term\n\t} else if (term.term.type == 'geneVariant' && term.q.type == 'values') {\n\t\tthrow 'no longer supported in barchart'\n\t}\n\treturn tvs\n}\n\nexport async function listSamples(arg) {\n\t// validate arg\n\tfor (const k of Object.keys(arg)) {\n\t\tconst param = arg[k]\n\t\tif (!param) throw `parameter '${k}' is undefined`\n\t}\n\n\t// query sample data\n\tconst { event, self, terms, tvslst, geneVariant, tip } = arg\n\tconst opts = {\n\t\tterms,\n\t\tfilter: filterJoin([self.state.termfilter.filter, tvslst]),\n\t\tfilter0: self.state.termfilter.filter0,\n\t\tisSummary: true\n\t}\n\tconst data = await self.app.vocabApi.getAnnotatedSampleData(opts)\n\n\t// fill table rows with sample data\n\tconst rows = []\n\tconst termIsNumeric = isNumericTerm(self.config.term.term)\n\tconst term2isNumeric = self.config.term2 ? isNumericTerm(self.config.term2.term) : false\n\tconst termIsGv = self.config.term.term.type == 'geneVariant'\n\tconst term2isGv = self.config.term2?.term.type == 'geneVariant'\n\tconst term2isSurv = self.config.term2?.term.type == 'survival'\n\tfor (const sample of data.lst) {\n\t\tconst pass = mayFilterByGeneVariant(sample, self, geneVariant)\n\t\tif (!pass) continue\n\t\tconst sampleName = data.refs.bySampleId[sample.sample].label\n\t\tconst row = [{ value: sampleName }]\n\t\tconst urlTemplate = self.app.vocabApi.termdbConfig?.urlTemplates?.sample\n\t\tif (urlTemplate) {\n\t\t\t// sample url template is defined, use it to format sample name as url\n\t\t\trow[0].url = urlTemplate.base + (sample[urlTemplate.namekey] || sample.sample)\n\t\t}\n\t\tconst t1entry = sample[self.config.term.$id]\n\t\tif (!t1entry) continue\n\t\t/** Don't show hidden values in the results\n\t\t * May not be caught in server request for custom variables\n\t\t * with user supplied keys */\n\t\tif (self.config.term.q?.hiddenValues && self.config.term.q.hiddenValues[t1entry.value]) continue\n\t\tif (termIsNumeric) {\n\t\t\tconst value = t1entry.value\n\t\t\trow.push({ value: roundValueAuto(value) })\n\t\t} else if (termIsGv) {\n\t\t\taddGvRowVals(sample, self.config.term, row)\n\t\t}\n\t\tif (self.config.term2) {\n\t\t\tconst t2entry = sample[self.config.term2.$id]\n\t\t\tif (!t2entry) continue\n\t\t\t//Don't show hidden values in the results\n\t\t\tif (self.config.term2.q?.hiddenValues && self.config.term2.q.hiddenValues[t2entry.value]) continue\n\t\t\tif (term2isNumeric) {\n\t\t\t\tconst value = roundValueAuto(t2entry.value)\n\t\t\t\trow.push({ value })\n\t\t\t} else if (term2isGv) {\n\t\t\t\taddGvRowVals(sample, self.config.term2, row)\n\t\t\t} else if (term2isSurv) {\n\t\t\t\tconst value = self.config.term2.term.values[t2entry.key].label\n\t\t\t\trow.push({ value })\n\t\t\t} else {\n\t\t\t\tconst label = self.config.term2.term.values?.[t2entry.value]?.label\n\t\t\t\tconst value = label || t2entry.value\n\t\t\t\trow.push({ value })\n\t\t\t}\n\t\t}\n\t\trows.push(row)\n\t}\n\n\t// fill table columns with term metadata\n\tconst columns = [{ label: 'Sample' }]\n\tif (termIsNumeric) {\n\t\tcolumns.push({ label: self.config.term.term.name })\n\t} else if (termIsGv) {\n\t\taddGvCols(self.config.term, columns)\n\t}\n\tif (self.config.term2) {\n\t\tif (term2isGv) {\n\t\t\taddGvCols(self.config.term2, columns)\n\t\t} else {\n\t\t\tcolumns.push({ label: self.config.term2.term.name })\n\t\t}\n\t}\n\n\t// render table in div. from now on arg.tip should always be given\n\tlet div\n\tif (tip) {\n\t\tdiv = tip.d\n\t\ttip.clear().show(event.clientX, event.clientY, false)\n\t} else {\n\t\tconst menu = new Menu({ padding: '5px' })\n\t\tmenu.show(event.clientX, event.clientY, false)\n\t\tdiv = menu.d.append('div')\n\t}\n\trenderTable({\n\t\trows,\n\t\tcolumns,\n\t\tdiv,\n\t\tshowLines: true,\n\t\tmaxHeight: '40vh',\n\t\tresize: true,\n\t\tdataTestId: 'sjpp-listsampletable'\n\t})\n}\nasync function getSampleGrp(arg) {\n\t// query sample data\n\tconst { event, self, terms, tvslst, geneVariant, tip } = arg\n\tconst opts = {\n\t\tterms,\n\t\tfilter: filterJoin([self.state.termfilter.filter, tvslst]),\n\t\tfilter0: self.state.termfilter.filter0,\n\t\tisSummary: true\n\t}\n\tconst data = await self.app.vocabApi.getAnnotatedSampleData(opts)\n\tconst samples = []\n\tfor (const sample of data.lst) {\n\t\tconst pass = mayFilterByGeneVariant(sample, self, geneVariant)\n\t\tif (!pass) continue\n\t\tconst t1entry = sample[self.config.term.$id]\n\t\tif (!t1entry) continue\n\t\tif (self.config.term.q?.hiddenValues && self.config.term.q.hiddenValues[t1entry.value]) continue\n\t\tsamples.push({ sampleId: sample.sample })\n\t}\n\n\tconst group = {\n\t\tname: 'Group',\n\t\titems: samples\n\t}\n\treturn group\n}\n\nexport async function addAsGroup(arg) {\n\t// validate arg\n\tfor (const k of Object.keys(arg)) {\n\t\tconst param = arg[k]\n\t\tif (!param) throw `parameter '${k}' is undefined`\n\t}\n\tconst group = await getSampleGrp(arg)\n\tconst tw = getSamplelstTW([group])\n\tconst filter = getFilter(tw)\n\taddNewGroup(arg.self.app, filter, arg.self.state.groups)\n}\n\n// if geneVariant term is present, filter sample by its geneVariant group assignment\nfunction mayFilterByGeneVariant(sample, self, geneVariant) {\n\tif (self.config.term.term.type == 'geneVariant' && geneVariant.t1value) {\n\t\tconst tw = self.config.term\n\t\tif (tw.q.type == 'values') throw 'q.type=values not supported'\n\t\tconst value = sample[tw.$id]?.value\n\t\tif (value != geneVariant.t1value) return false\n\t}\n\tif (self.config.term2?.term.type == 'geneVariant' && geneVariant.t2value) {\n\t\tconst tw = self.config.term2\n\t\tif (tw.q.type == 'values') throw 'q.type=values not supported'\n\t\tconst value = sample[tw.$id]?.value\n\t\tif (value != geneVariant.t2value) return false\n\t}\n\tif (self.config.term0?.term.type == 'geneVariant' && geneVariant.t0value) {\n\t\tconst tw = self.config.term0\n\t\tif (tw.q.type == 'values') throw 'q.type=values not supported'\n\t\tconst value = sample[tw.$id]?.value\n\t\tif (value != geneVariant.t0value) return false\n\t}\n\treturn true\n}\n\n// add geneVariant values to row\nfunction addGvRowVals(sample, tw, row) {\n\tconst mlst = sample[tw.$id]?.values\n\tconst gene2mlst = new Map()\n\t// map each gene to its mutations\n\tfor (const gene of tw.term.genes) {\n\t\tconst mlst_gene = mlst.filter(m => m.gene == gene.id)\n\t\tgene2mlst.set(gene.name, mlst_gene)\n\t}\n\tif (!gene2mlst.size) throw 'gene2mlst is empty'\n\tif (gene2mlst.size == 1) {\n\t\t// single gene, add its mutations to mutation column\n\t\tconst entry = gene2mlst.entries().next().value\n\t\tconst mlst = entry[1]\n\t\tconst htmls = mlst2htmls(mlst)\n\t\trow.push({ html: htmls.join('<br>') })\n\t} else {\n\t\t// multiple genes, add each gene to gene column and its\n\t\t// mutations to mutation column\n\t\tconst genes = []\n\t\tconst htmls = []\n\t\tfor (const [gene, mlst] of gene2mlst) {\n\t\t\tgenes.push(...Array(mlst.length).fill(gene))\n\t\t\thtmls.push(...mlst2htmls(mlst))\n\t\t}\n\t\trow.push({ html: genes.join('<br>') })\n\t\trow.push({ html: htmls.join('<br>') })\n\t}\n}\n\nfunction mlst2htmls(mlst) {\n\tconst htmls = mlst.map(m => {\n\t\tconst mname = m.mname || '' // e.g. aa change\n\t\tconst value = m.value ? roundValueAuto(m.value, false, 3) : '' // e.g. cnv value\n\t\tconst color = mclass[m.class].color\n\t\tconst label = mclass[m.class].label.toUpperCase()\n\n\t\tconst holder = create('div')\n\n\t\tholder.append('span').text(mname || value)\n\n\t\tholder\n\t\t\t.append('span')\n\t\t\t.style('margin-left', mname || value ? '5px' : '0px')\n\t\t\t.style('color', color)\n\t\t\t.style('font-size', '.8em')\n\t\t\t.text(label)\n\n\t\treturn holder.html()\n\t})\n\treturn htmls\n}\n\n// add geneVariant columns\nfunction addGvCols(tw, columns) {\n\tif (tw.term.genes.length == 1) {\n\t\tcolumns.push({ label: tw.term.name })\n\t} else {\n\t\tcolumns.push({ label: 'Gene' })\n\t\tif (tw.q.type == 'predefined-groupset') {\n\t\t\tconst groupset = tw.term.groupsetting.lst[tw.q.predefined_groupset_idx]\n\t\t\tcolumns.push({ label: dt2label[groupset.dt] })\n\t\t} else if (tw.q.type == 'custom-groupset') {\n\t\t\tcolumns.push({ label: 'Genotype' })\n\t\t} else {\n\t\t\tthrow 'unexpected tw.q.type'\n\t\t}\n\t}\n}\n\nasync function menuoption_add_filter(self, tvslst, arg) {\n\t/*\n\tself: the tree object\n\ttvslst: an array of 1 or 2 term-value setting objects\n\t\tthis is to be added to the obj.termfilter.filter[]\n\t\tif barchart is single-term, tvslst will have only one element\n\t\tif barchart is two-term overlay, tvslst will have two elements, one for term1, the other for term2\n\targ: object of parameters used by getSampleGrp to get sample group\n\t\t*/\n\tif (!tvslst) return\n\tif (!self.state.termfilter || self.state.nav?.header_mode !== 'with_tabs') {\n\t\t// do not display ui, and do not collect callbacks\n\t\treturn\n\t}\n\t// validate arg\n\tfor (const k of Object.keys(arg)) {\n\t\tconst param = arg[k]\n\t\tif (!param) throw `parameter '${k}' is undefined`\n\t}\n\n\tconst hasGrpSetting = arg.terms.find(t => t.q?.type == 'predefined-groupset' || t.q?.type == 'custom-groupset')\n\tlet samplelstTW\n\tif (hasGrpSetting) {\n\t\t// if any term has group setting, add filter as samplelst\n\t\tconst group = await getSampleGrp(arg)\n\t\tsamplelstTW = getSamplelstTW([group])\n\t}\n\n\tconst filterUiRoot = getFilterItemByTag(self.state.termfilter.filter, 'filterUiRoot')\n\tconst filter = filterJoin([\n\t\tfilterUiRoot,\n\t\tsamplelstTW\n\t\t\t? getFilter(samplelstTW)\n\t\t\t: {\n\t\t\t\t\ttype: 'tvslst',\n\t\t\t\t\tin: true,\n\t\t\t\t\tjoin: tvslst.length > 1 ? 'and' : '',\n\t\t\t\t\tlst: [...tvslst.map(wrapTvs)]\n\t\t\t }\n\t])\n\tfilter.tag = 'filterUiRoot'\n\tself.app.dispatch({\n\t\ttype: 'filter_replace',\n\t\tfilter\n\t})\n}\n\nfunction wrapTvs(tvs) {\n\treturn tvs.type === 'tvs' ? tvs : { type: 'tvs', tvs }\n}\n\n/* \t\t\tTODO: add to cart and gp */\n\nfunction menuoption_listsamples(self, tvslst) {\n\tconst filterRoot = getNormalRoot({\n\t\ttype: 'tvslst',\n\t\tjoin: 'and',\n\t\tlst: [\n\t\t\tself.state.termfilter.filter,\n\t\t\t// create a copy of tvslst to not mutate the barchart state,\n\t\t\t// such as when deleting tvs.tvs.term.values below\n\t\t\t...tvslst.map(tvs => wrapTvs(JSON.parse(JSON.stringify(tvs))))\n\t\t]\n\t})\n\t///////////// quick fix to delete term.values{} from stringified filter to reduce url length\n\tnormalizeProps(filterRoot, f => {\n\t\tdelete f.tag\n\t\tif (f.type == 'tvs' && f.tvs && f.tvs.term) delete f.tvs.term.values\n\t})\n\tconst arg = [\n\t\t'getsamples=1',\n\t\t'genome=' + self.app.vocabApi.vocab.genome,\n\t\t'dslabel=' + self.app.vocabApi.vocab.dslabel,\n\t\t'filter=' + encodeURIComponent(JSON.stringify(filterRoot))\n\t]\n\n\tdofetch3('termdb?' + arg.join('&')).then(data => {\n\t\texport_data(data.samples.length + ' samples', [{ text: data.samples.join('\\n') }])\n\t})\n}\n\nfunction menuoption_select_group_add_to_cart(self, tvslst) {\n\tif (!tvslst || !tvslst.length) return\n\n\tconst new_group = {}\n\tnew_group.is_termdb = true\n\tnew_group.terms = []\n\n\tfor (const [i, term] of tvslst.entries()) {\n\t\tnew_group.terms.push(term)\n\t}\n\n\tif (!self.selected_groups) {\n\t\tself.selected_groups = []\n\t}\n\n\tself.selected_groups.push(new_group)\n\tself.components.cart.main()\n}\n\nfunction getTermValues(d, self) {\n\t/*\n\td: clicked bar data\n */\n\tconst termValues = []\n\tif (self.state.nav?.header_mode == 'with_cohortHtmlSelect') {\n\t\t// pass the cohort filter information back to calling app\n\t\t// do not set the renderAs in here since that is decided by the calling app\n\t\tconst cohortFilter = getFilterItemByTag(self.state.termfilter.filter, 'cohortFilter')\n\t\tif (cohortFilter) termValues.push(JSON.parse(JSON.stringify(cohortFilter)))\n\t}\n\n\tconst t1 = self.config.term\n\tconst t1ValKey =\n\t\tt1.term.values && Object.keys(t1.term.values).filter(key => t1.term.values[key].label === d.seriesId)[0]\n\tconst t1ValId = t1.term.values && t1ValKey in t1.term.values ? t1ValKey : d.seriesId\n\tconst t2 = self.config.term2\n\tconst t2ValKey =\n\t\tt2 && t2.term.values && Object.keys(t2.term.values).filter(key => t2.term.values[key].label === d.dataId)[0]\n\tconst t2ValId = t2 && t2.term.values && t2ValKey in t2.term.values ? t2ValKey : d.dataId\n\n\tfor (const term of [t1, t2]) {\n\t\tif (!term) continue\n\t\tconst i = term == t1 ? 1 : 2\n\t\tconst key = term == t1 ? t1ValId : t2ValId\n\t\tif (!key) continue\n\t\t// const q = term ? term.q : {}\n\t\tconst q = term.q //self.currServerData.refs.q[i]\n\t\tconst label = !term || !term.term.values ? key : key in term.term.values ? term.term.values[key].label : key\n\n\t\tif (q.type == 'predefined-groupset' || q.type == 'custom-groupset') {\n\t\t\tconst groupset =\n\t\t\t\tq.type == 'predefined-groupset' ? term.term.groupsetting.lst[q.predefined_groupset_idx] : q.customset\n\t\t\tconst group = groupset.groups.find(g => g.name === key)\n\t\t\tconst tvs = { term: term.term, values: group.values, groupset_label: group.name }\n\t\t\tif (term.term.type == 'condition') {\n\t\t\t\ttvs.bar_by_children = term.q.bar_by_children\n\t\t\t\ttvs.bar_by_grade = term.q.bar_by_grade\n\t\t\t\ttvs.value_by_most_recent = term.q.value_by_most_recent\n\t\t\t\ttvs.value_by_max_grade = term.q.value_by_max_grade\n\t\t\t}\n\t\t\ttermValues.push(tvs)\n\t\t} else if (term.term.type == 'condition') {\n\t\t\tif (!t2 || t1.term.id != t2.term.id) {\n\t\t\t\ttermValues.push(\n\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tterm: term.term,\n\t\t\t\t\t\t\tvalues: [{ key, label }]\n\t\t\t\t\t\t},\n\t\t\t\t\t\tq\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (term == t1 && t2 && term.term.id == t2.term.id) {\n\t\t\t\tconst q2 = t2.q\n\t\t\t\tconst term2Label =\n\t\t\t\t\tt2.term.values && d.dataId in t2.term.values ? self.config.term2.values[d.dataId].label : d.dataId\n\n\t\t\t\ttermValues.push(\n\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tterm: term.term,\n\t\t\t\t\t\t\tgrade_and_child: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tgrade: q2.bar_by_grade ? d.dataId : key,\n\t\t\t\t\t\t\t\t\tgrade_label: q2.bar_by_grade ? term2Label : label,\n\t\t\t\t\t\t\t\t\tchild_id: q2.bar_by_children ? d.dataId : key,\n\t\t\t\t\t\t\t\t\tchild_label: q2.bar_by_children ? term2Label : label\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\tq2\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t}\n\t\t} else {\n\t\t\tconst bins = self.currServerData.refs.bins[i]\n\t\t\tif (!bins || !bins.length) {\n\t\t\t\t// not associated with numeric bins\n\t\t\t\ttermValues.push({ term: term.term, values: [{ key, label }] })\n\t\t\t} else {\n\t\t\t\tconst range = bins.find(d => d.label == label || d.name == label)\n\t\t\t\tif (range) termValues.push({ term: term.term, ranges: [range] })\n\t\t\t\telse if (term == t1) {\n\t\t\t\t\ttermValues.push({ term: term.term, ranges: [{ value: key }] })\n\t\t\t\t} else if (term == t2) {\n\t\t\t\t\ttermValues.push({ term: term.term, ranges: [{ value: key }] })\n\t\t\t\t} else {\n\t\t\t\t\tthrow 'should not happen'\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t}\n\treturn termValues.map(f => wrapTvs(f))\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["bin", "chart", "a", "id", "term2", "self", "tvslst", "d", "event", "tvs", "group", "mlst", "d"]
|
|
7
|
+
}
|
|
@@ -0,0 +1,117 @@
|
|
|
1
|
+
import {
|
|
2
|
+
copyMerge,
|
|
3
|
+
getInitFxn
|
|
4
|
+
} from "./chunk-DDOM4XYV.js";
|
|
5
|
+
|
|
6
|
+
// termdb/termInfo.js
|
|
7
|
+
var defaultState = { isVisible: false, term: null };
|
|
8
|
+
var TdbTermInfo = class {
|
|
9
|
+
/*
|
|
10
|
+
Will display background information about a term,
|
|
11
|
+
such as rubric, publication source, description, etc
|
|
12
|
+
|
|
13
|
+
opts{}
|
|
14
|
+
.content_holder: required d3-wrapped DOM element
|
|
15
|
+
****TODO: Create menu on the fly if content_holder is not supplied****
|
|
16
|
+
|
|
17
|
+
.icon_holder: optional, creates information icon for terms
|
|
18
|
+
|
|
19
|
+
.vocabApi:
|
|
20
|
+
- for termInfoInit(), required as opts.vocabApi
|
|
21
|
+
- for termInfoComp(), required as part of opts.app
|
|
22
|
+
- a vocabulary API that has a getTermInfo() method
|
|
23
|
+
|
|
24
|
+
.state{} optional, see defaultState value above
|
|
25
|
+
.isVisible: boolean, optional
|
|
26
|
+
.term: {id, ...} optional (may be supplied with either getState() or main({state}))
|
|
27
|
+
*/
|
|
28
|
+
constructor(opts) {
|
|
29
|
+
this.vocabApi = opts.vocabApi || opts.app && opts.app.vocabApi;
|
|
30
|
+
this.state = Object.assign({}, defaultState, opts.state ? opts.state : {});
|
|
31
|
+
this.api = this;
|
|
32
|
+
setInteractivity(this);
|
|
33
|
+
setRenderers(this);
|
|
34
|
+
this.initUI(opts);
|
|
35
|
+
}
|
|
36
|
+
/*
|
|
37
|
+
state: replace 1 or more state values by attribute key
|
|
38
|
+
*/
|
|
39
|
+
async main(state = {}) {
|
|
40
|
+
copyMerge(this.state, state);
|
|
41
|
+
this.dom.content_holder.style("display", this.state.isVisible ? "block" : "none");
|
|
42
|
+
this.dom.icon_holder.style("background-color", this.state.isVisible ? "darkgray" : "transparent").style("color", this.state.isVisible ? "white" : "#797a7a");
|
|
43
|
+
if (!this.state.isVisible) return;
|
|
44
|
+
const data = await this.vocabApi.getTermInfo(this.state.term.id);
|
|
45
|
+
this.render(data);
|
|
46
|
+
}
|
|
47
|
+
};
|
|
48
|
+
var termInfoInit = getInitFxn(TdbTermInfo);
|
|
49
|
+
function setRenderers(self) {
|
|
50
|
+
self.initUI = function(opts) {
|
|
51
|
+
self.dom = {
|
|
52
|
+
content_holder: opts.content_holder.style("margin-left", "25px").attr("class", "term_info_div").style("display", self.state.isVisible ? "block" : "none").style("white-space", "normal").style("padding-bottom", "20px"),
|
|
53
|
+
//Term information/description
|
|
54
|
+
details: opts.content_holder.append("div"),
|
|
55
|
+
tbody: opts.content_holder.append("table").append("tbody"),
|
|
56
|
+
//Information icon button div. Term description appears in content_holder
|
|
57
|
+
icon_holder: opts.icon_holder.style("margin", "1px 0px 1px 5px").style("padding", "2px 5px").style("font-family", "Times New Roman").style("font-size", "14px").style("font-weight", "bold").style("cursor", "pointer").style("background-color", "transparent").style("color", "#797a7a").style("align-items", "center").style("justify-content", "center").style("border", "none").style("border-radius", "3px").attr("aria-label", "Term Information").html("ⓘ").on("mouseenter", () => {
|
|
58
|
+
if (self.state.isVisible == true) return;
|
|
59
|
+
self.dom.icon_holder.style("color", "blue");
|
|
60
|
+
}).on("mouseleave", () => {
|
|
61
|
+
if (self.state.isVisible == true) return;
|
|
62
|
+
self.dom.icon_holder.style("color", "#797a7a");
|
|
63
|
+
}).on("click", self.toggleDescription)
|
|
64
|
+
};
|
|
65
|
+
};
|
|
66
|
+
self.render = function(data) {
|
|
67
|
+
if (!data?.terminfo) {
|
|
68
|
+
self.dom.details.append("div").style("margin-top", "10px").text("No definition found.");
|
|
69
|
+
return;
|
|
70
|
+
}
|
|
71
|
+
self.dom.tbody.selectAll("*").remove();
|
|
72
|
+
if (data.terminfo.src) {
|
|
73
|
+
for (let s of data.terminfo.src) {
|
|
74
|
+
const source_td = self.dom.tbody.append("tr").append("td").style("padding", "5px 0");
|
|
75
|
+
source_td.append("div").style("font-weight", "bold").text("Source");
|
|
76
|
+
source_td.append("div").style("margin-left", "20px").text(s.pub);
|
|
77
|
+
source_td.append("div").style("margin-left", "20px").html(s.title + ": <i>" + s.section + "</i>");
|
|
78
|
+
}
|
|
79
|
+
}
|
|
80
|
+
if (data.terminfo.rubric) {
|
|
81
|
+
const grade_td = self.dom.tbody.append("tr").append("td").style("padding", "5px 0").append("div").style("font-weight", "bold").text("Grading Rubric").append("ol").style("margin", "0px");
|
|
82
|
+
for (let grade of data.terminfo.rubric) {
|
|
83
|
+
grade_td.append("li").style("font-weight", "normal").text(grade);
|
|
84
|
+
}
|
|
85
|
+
}
|
|
86
|
+
self.dom.details.selectAll("*").remove();
|
|
87
|
+
if (data.terminfo.description) {
|
|
88
|
+
const header = self.dom.details.append("div").style("padding-top", "20px").style("padding-bottom", "10px").style("font-weight", "bold").text("Description");
|
|
89
|
+
for (const d of data.terminfo.description) {
|
|
90
|
+
self.renderDetail(d, self.dom.details.append("div").style("padding-bottom", "3px"));
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
};
|
|
94
|
+
self.renderDetail = function(d, div) {
|
|
95
|
+
if (Array.isArray(d.value)) {
|
|
96
|
+
div.append("span").html("<i>" + d.label + "</i>");
|
|
97
|
+
const section = div.append("div").style("padding-left", "20px");
|
|
98
|
+
for (const v of d.value) {
|
|
99
|
+
v.label = "- " + v.label;
|
|
100
|
+
self.renderDetail(v, section.append("div"));
|
|
101
|
+
}
|
|
102
|
+
} else {
|
|
103
|
+
div.html("<i>" + d.label + ":</i> " + d.value);
|
|
104
|
+
}
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
function setInteractivity(self) {
|
|
108
|
+
self.toggleDescription = function() {
|
|
109
|
+
self.state.isVisible = !self.state.isVisible;
|
|
110
|
+
self.main({ isVisible: self.state.isVisible });
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
export {
|
|
115
|
+
termInfoInit
|
|
116
|
+
};
|
|
117
|
+
//# sourceMappingURL=chunk-ZFFHOEBE.js.map
|