@sjcrh/proteinpaint-client 2.195.0 → 2.196.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-SKNV7IHT.js +1373 -0
- package/dist/AIProjectAdmin-AOTVRBNH.js +958 -0
- package/dist/AppHeader-M2ZSS3M3.js +835 -0
- package/dist/BoxPlot-P3EECSQA.js +1217 -0
- package/dist/BoxPlot-P3EECSQA.js.map +7 -0
- package/dist/CorrelationVolcano-YCQ5S6MT.js +619 -0
- package/dist/DE-RBMOQZCR.js +95 -0
- package/dist/DEinput-PTW6RS6U.js +301 -0
- package/dist/DifferentialAnalysis-M6IDWPYX.js +245 -0
- package/dist/Disco-GUKDAHUY.js +3297 -0
- package/dist/Disco.UI-YBIMV7RH.js +249 -0
- package/dist/DmrPlot-JQPLLU6P.js +642 -0
- package/dist/GB-UOTFNVJE.js +1353 -0
- package/dist/GeneExpInput-3OPDDCXR.js +367 -0
- package/dist/HicApp-VFOWRP6G.js +2250 -0
- package/dist/IDCViewer-Y7EOIIBG.js +10455 -0
- package/dist/NumBinaryEditor-RL44SO3T.js +271 -0
- package/dist/NumBinaryEditor.unit.spec-P73PGAX5.js +286 -0
- package/dist/NumContEditor-MIC7M73G.js +109 -0
- package/dist/NumContEditor.unit.spec-5XZH7OCG.js +169 -0
- package/dist/NumCustomBinEditor-W357XTIR.js +38 -0
- package/dist/NumCustomBinEditor.unit.spec-CJMK4CYW.js +284 -0
- package/dist/NumDiscreteEditor-PRSUMS3I.js +179 -0
- package/dist/NumDiscreteEditor.unit.spec-A6R56P3Z.js +202 -0
- package/dist/NumRegularBinEditor-7OHUEUCC.js +38 -0
- package/dist/NumRegularBinEditor.unit.spec-NOAX42UZ.js +227 -0
- package/dist/NumSplineEditor-XI7AT5LM.js +198 -0
- package/dist/NumSplineEditor.unit.spec-ZH4M2N2C.js +199 -0
- package/dist/NumericDensity-X6IHQAW3.js +38 -0
- package/dist/NumericDensity.unit.spec-EKVD4AUG.js +221 -0
- package/dist/NumericHandler-5ONBWFJ5.js +39 -0
- package/dist/NumericHandler.unit.spec-SHI6E4VA.js +219 -0
- package/dist/ProteomeInput-HN46MIBP.js +396 -0
- package/dist/RunChart2-Y6IY6MW2.js +758 -0
- package/dist/SC-JYF564FK.js +1130 -0
- package/dist/SC-JYF564FK.js.map +7 -0
- package/dist/Volcano-WZGAUYGY.js +1380 -0
- package/dist/Volcano-WZGAUYGY.js.map +7 -0
- package/dist/WSIViewer-RLLL7MAL.js +48562 -0
- package/dist/WsiSamplesPlot-FU3TCOTY.js +165 -0
- package/dist/adSandbox-ZINST5DE.js +38 -0
- package/dist/animatedBubbleChart-PIQWCVBJ.js +555 -0
- package/dist/app-N42SVGI2.js +37 -0
- package/dist/app-RWN4XLCP.js +49 -0
- package/dist/app.js +13 -13
- package/dist/bam-QTSTXJ4N.js +860 -0
- package/dist/barchart-27BYTRVI.js +47 -0
- package/dist/barchart.data-OUNVH4JU.js +22 -0
- package/dist/barchart.events-PY4CEDSO.js +47 -0
- package/dist/barchart.integration.spec-H4WGHQ7R.js +2196 -0
- package/dist/barchart2-TIOTRAC2.js +314 -0
- package/dist/block-YPM767A4.js +6226 -0
- package/dist/block.init-LRZ3QAGC.js +38 -0
- package/dist/block.mds.expressionrank-IV7JLC52.js +359 -0
- package/dist/block.mds.geneboxplot-IBCE5XZU.js +828 -0
- package/dist/block.mds.junction-ISSCJHNF.js +1545 -0
- package/dist/block.mds.svcnv-ZEBVBTL7.js +6801 -0
- package/dist/block.svg-FYWA5VYH.js +164 -0
- package/dist/block.tk.aicheck-AD6DTKXR.js +283 -0
- package/dist/block.tk.ase-LO2J4KRE.js +365 -0
- package/dist/block.tk.bam-XGX22FCN.js +1906 -0
- package/dist/block.tk.bedgraphdot-SUIRFNFL.js +384 -0
- package/dist/block.tk.bigwig.ui-2Q7FAK3V.js +212 -0
- package/dist/block.tk.hicstraw-4MVP2PCL.js +823 -0
- package/dist/block.tk.junction-F54FTEPB.js +2364 -0
- package/dist/block.tk.junction.textmatrixui-ETROZJVK.js +199 -0
- package/dist/block.tk.ld-NJEDKSTU.js +99 -0
- package/dist/block.tk.menu-LZOY4FKT.js +1029 -0
- package/dist/block.tk.pgv-I3XHJ7VU.js +944 -0
- package/dist/brainImaging-BGP6VRFV.js +423 -0
- package/dist/brainRegions-AAN7LM2Y.js +221 -0
- package/dist/bubbleHeatmap-HNEU4CYA.js +383 -0
- package/dist/chunk-25XCVML7.js +236 -0
- package/dist/chunk-25XCVML7.js.map +7 -0
- package/dist/chunk-2XV6U42J.js +100 -0
- package/dist/chunk-36NAWXQ7.js +5067 -0
- package/dist/chunk-427UL37G.js +222 -0
- package/dist/chunk-4C3XRI6J.js +54 -0
- package/dist/chunk-4O6H4ZHL.js +514 -0
- package/dist/chunk-53JJ7SXN.js +276 -0
- package/dist/chunk-5HMX4NUJ.js +217 -0
- package/dist/chunk-5V2BMEAS.js +55 -0
- package/dist/chunk-6MBTPVIM.js +1275 -0
- package/dist/chunk-6MQWYMPB.js +183 -0
- package/dist/chunk-6MQWYMPB.js.map +7 -0
- package/dist/chunk-7D3WX34I.js +1230 -0
- package/dist/chunk-7FSIZZOX.js +176 -0
- package/dist/chunk-A3URBFXN.js +119 -0
- package/dist/chunk-A45KH7LP.js +254 -0
- package/dist/chunk-B4GS7OLB.js +4284 -0
- package/dist/chunk-B4GS7OLB.js.map +7 -0
- package/dist/chunk-BWQV2OBL.js +102 -0
- package/dist/chunk-BXGQXLHP.js +2786 -0
- package/dist/chunk-CDJAHMAN.js +299 -0
- package/dist/chunk-CXHLROWX.js +37 -0
- package/dist/chunk-ECIBJXFT.js +352 -0
- package/dist/chunk-ECIBJXFT.js.map +7 -0
- package/dist/chunk-EKKQMKQI.js +102 -0
- package/dist/chunk-EPWIJEMK.js +158 -0
- package/dist/chunk-F7Y67LK7.js +230 -0
- package/dist/chunk-FDBVAL6K.js +14 -0
- package/dist/chunk-FISP5YN2.js +292 -0
- package/dist/chunk-G3FSS7GR.js +477 -0
- package/dist/chunk-GE4NJDV4.js +98 -0
- package/dist/chunk-GYGU4UT5.js +34 -0
- package/dist/chunk-I5IPJG2R.js +148 -0
- package/dist/chunk-IFK24IXL.js +194 -0
- package/dist/chunk-ILE6ML2D.js +50 -0
- package/dist/chunk-IRKP6IZ4.js +216 -0
- package/dist/chunk-J6ZOUCWN.js +170 -0
- package/dist/chunk-JFRSVFWO.js +736 -0
- package/dist/chunk-JFRSVFWO.js.map +7 -0
- package/dist/chunk-JNBJG57F.js +448 -0
- package/dist/chunk-K5UVG3FQ.js +117 -0
- package/dist/chunk-KE5B34CS.js +102 -0
- package/dist/chunk-L6A2BEXB.js +2681 -0
- package/dist/chunk-LWEGSYDD.js +226 -0
- package/dist/chunk-LYVLF6HO.js +1825 -0
- package/dist/chunk-MBUQ34CF.js +189 -0
- package/dist/chunk-MBUQ34CF.js.map +7 -0
- package/dist/chunk-MN3KDNHC.js +617 -0
- package/dist/chunk-MTHEEXT2.js +1450 -0
- package/dist/chunk-MTHEEXT2.js.map +7 -0
- package/dist/chunk-MTZSN3H4.js +302 -0
- package/dist/chunk-N7O7NPUO.js +534 -0
- package/dist/chunk-NNFAUP2I.js +315 -0
- package/dist/chunk-NNFAUP2I.js.map +7 -0
- package/dist/chunk-OF5FE6GT.js +142 -0
- package/dist/chunk-OVSKJROY.js +815 -0
- package/dist/chunk-PJ3FCJBZ.js +480 -0
- package/dist/chunk-PU2Q4SZR.js +2327 -0
- package/dist/chunk-PZPS56Z6.js +343 -0
- package/dist/chunk-QKR3ZD3S.js +833 -0
- package/dist/chunk-QMXCK4Y5.js +203 -0
- package/dist/chunk-ROJ3LJLE.js +448 -0
- package/dist/chunk-SLHWUFAW.js +1943 -0
- package/dist/chunk-U3G4JGKJ.js +54 -0
- package/dist/chunk-VDZ5QOF6.js +446 -0
- package/dist/chunk-VO5XZ2EG.js +129 -0
- package/dist/chunk-VRH7NP6R.js +263 -0
- package/dist/chunk-VTMJGRT5.js +272 -0
- package/dist/chunk-W5X6C7LY.js +399 -0
- package/dist/chunk-WJGUNGFK.js +272 -0
- package/dist/chunk-WKT46ZJ6.js +368 -0
- package/dist/chunk-WQCQWUUP.js +2833 -0
- package/dist/chunk-WY2PGUVX.js +20898 -0
- package/dist/chunk-WY2PGUVX.js.map +7 -0
- package/dist/chunk-WZ2U5QXJ.js +6364 -0
- package/dist/chunk-WZUWK5Q6.js +1102 -0
- package/dist/chunk-XPMTUVSS.js +1220 -0
- package/dist/chunk-YYFQPGIE.js +386 -0
- package/dist/condition-GVIEMQG7.js +332 -0
- package/dist/controls-73K3XBDR.js +41 -0
- package/dist/controls.config-FQKY2LRE.js +39 -0
- package/dist/correlation-AOAXIUFJ.js +102 -0
- package/dist/cuminc-OD2PPCEK.js +1149 -0
- package/dist/cuminc.integration.spec-TMIFW7EO.js +678 -0
- package/dist/customdata.inputui-SWLGLATL.js +289 -0
- package/dist/dataDownload-456HL2OE.js +330 -0
- package/dist/dataDownload.integration.spec-5YS4MWK5.js +193 -0
- package/dist/databrowser.ui-7APC5MNM.js +433 -0
- package/dist/dictionary-A3HA5MVK.js +118 -0
- package/dist/dnaMethylation-6ONBKARD.js +38 -0
- package/dist/dnaMethylation.integration.spec-T3WEGVX3.js +203 -0
- package/dist/dofetch-RVPQUMVX.js +51 -0
- package/dist/e2pca-75WZ46XG.js +350 -0
- package/dist/ep-QG5CWPTW.js +1256 -0
- package/dist/expclust.gdc.spec-KBBQJR4M.js +307 -0
- package/dist/facet-QGB2Q7YV.js +521 -0
- package/dist/forms2-CJGDCWYH.js +539 -0
- package/dist/gb-NEFAHKQI.js +88 -0
- package/dist/geneExpClustering-ZVR44UZC.js +249 -0
- package/dist/geneExpression-25EX4DFK.js +313 -0
- package/dist/geneExpression-FALOA4GC.js +38 -0
- package/dist/geneExpression.unit.spec-BQLELQUS.js +102 -0
- package/dist/geneORA-K2B7JYWD.js +278 -0
- package/dist/geneRanking-6AXL5ZJS.js +553 -0
- package/dist/geneVariant-RZFDP5J5.js +41 -0
- package/dist/geneVariant-UIBZ5UIQ.js +39 -0
- package/dist/geneVariant.integration.spec-4EZQMPQB.js +198 -0
- package/dist/genefusion.ui-YK4TNS2P.js +309 -0
- package/dist/geneset-47J4D5ID.js +208 -0
- package/dist/genomeBrowser.spec-LFFWRIWG.js +281 -0
- package/dist/grin2-DQB2WW3C.js +75 -0
- package/dist/grin2-TZFU4JM3.js +1078 -0
- package/dist/grin2-TZFU4JM3.js.map +7 -0
- package/dist/gsea-KKLAMLMG.js +47 -0
- package/dist/hierCluster-3MZEJG6B.js +59 -0
- package/dist/hierCluster-YGBC4XCZ.js +63 -0
- package/dist/hierCluster.config-A4N54K3A.js +40 -0
- package/dist/hierCluster.integration.spec-GLKXFZDM.js +488 -0
- package/dist/hierCluster.interactivity-4TPWGIVC.js +54 -0
- package/dist/hierCluster.renderers-WUWSXXHU.js +21 -0
- package/dist/imagePlot-JRPYOV3Q.js +163 -0
- package/dist/importPlot-A3PFUP6K.js +8 -0
- package/dist/isoformExpression-5L4O3WKL.js +40 -0
- package/dist/isoformExpression.unit.spec-SLB6XIX4.js +208 -0
- package/dist/launch.adhoc-QI7TPYSC.js +42 -0
- package/dist/leftlabel.sample-OSIRTJFW.js +264 -0
- package/dist/lollipop-LAELXNQY.js +171 -0
- package/dist/maf-HZAYVZFO.js +459 -0
- package/dist/maftimeline-BLBNUGAL.js +593 -0
- package/dist/matrix-LVJSHXDM.js +58 -0
- package/dist/matrix-S5QQV4JU.js +63 -0
- package/dist/matrix.cells-JUTRYPG4.js +28 -0
- package/dist/matrix.config-ZTWWYNIZ.js +41 -0
- package/dist/matrix.data-BREYB54F.js +25 -0
- package/dist/matrix.groups-WMHTLOXC.js +27 -0
- package/dist/matrix.integration.spec-S6FIEE2X.js +3072 -0
- package/dist/matrix.interactivity-TMBVAM5M.js +42 -0
- package/dist/matrix.layout-POK5NOUV.js +44 -0
- package/dist/matrix.legend-6XVQ67AC.js +22 -0
- package/dist/matrix.renderers-G5FQZZ73.js +38 -0
- package/dist/matrix.serieses-XNLQSQS6.js +21 -0
- package/dist/matrix.sort-XNES23OQ.js +27 -0
- package/dist/matrix.sort.unit.spec-65BDBQUV.js +472 -0
- package/dist/matrix.sorterUi.unit.spec-GZQBW7F7.js +342 -0
- package/dist/mavb-T2UCRWWM.js +732 -0
- package/dist/mds.fimo-65UUK7ER.js +518 -0
- package/dist/mds.samplescatterplot-4NHGQBJF.js +1550 -0
- package/dist/mds.survivalplot-WVAHDM3Z.js +483 -0
- package/dist/numericDictTermCluster-CXASCSQ6.js +65 -0
- package/dist/oncomatrix-5WMOICWR.js +295 -0
- package/dist/oncomatrix.spec-POVBNFJR.js +448 -0
- package/dist/plot.2dvaf-63K5RSIU.js +377 -0
- package/dist/plot.app-V5IY25QS.js +41 -0
- package/dist/plot.barplot-IQTYHNFE.js +102 -0
- package/dist/plot.boxplot-2RMTO7AS.js +152 -0
- package/dist/plot.brainImaging-DLUHAHHG.js +51 -0
- package/dist/plot.disco-WK6GDLNF.js +102 -0
- package/dist/plot.dzi-3V3FWE7U.js +33 -0
- package/dist/plot.ssgq-TENK2RP4.js +139 -0
- package/dist/plot.vaf2cov-P2QOOZGZ.js +259 -0
- package/dist/plot.wsi-BVRGJF4E.js +36 -0
- package/dist/polar2-NNOZOQQJ.js +231 -0
- package/dist/profileForms-RS4GEZZV.js +446 -0
- package/dist/profilePlot-3DLME3NH.js +54 -0
- package/dist/proteinView-NPKJAQAI.js +1568 -0
- package/dist/qualitative-S45RXXRJ.js +43 -0
- package/dist/radar2-EX7YBNMT.js +326 -0
- package/dist/radarFacility2-WU5O6O77.js +334 -0
- package/dist/regression-7MCOYJVD.js +56 -0
- package/dist/regression.inputs-QHSWJ23R.js +48 -0
- package/dist/regression.inputs.term-EJ4Z5Q5O.js +48 -0
- package/dist/regression.inputs.values.table-YKMAWNXN.js +45 -0
- package/dist/regression.integration.spec-XOX7OXXA.js +784 -0
- package/dist/regression.results-YKPOTPCC.js +40 -0
- package/dist/regression.spec-YIIY2AZA.js +708 -0
- package/dist/report-JEJFCWUU.js +222 -0
- package/dist/sampleScatter.spec-LBAZBDYA.js +202 -0
- package/dist/sampleView-WKZT5ZFE.js +48 -0
- package/dist/samplelst-HXM3H6M4.js +111 -0
- package/dist/samplematrix-LCGHK2EK.js +2198 -0
- package/dist/sc-3OE2G4BU.js +86 -0
- package/dist/scatter-AGVUDTTU.js +851 -0
- package/dist/scatter-AGVUDTTU.js.map +7 -0
- package/dist/selectGenomeWithTklst-WF2XZ6GH.js +134 -0
- package/dist/singleCellCellType-2SRGROMS.js +38 -0
- package/dist/singleCellCellType.unit.spec-DCGHNRJI.js +160 -0
- package/dist/singleCellGeneExpression-RASZA4NO.js +38 -0
- package/dist/singleCellGeneExpression.unit.spec-5MRGH2OO.js +153 -0
- package/dist/singleCellPlot-TIYA3GNM.js +54 -0
- package/dist/singlecell-CFA43TTU.js +1572 -0
- package/dist/singlecell-JS5SIZHY.js +86 -0
- package/dist/snp-VXZXPMKS.js +38 -0
- package/dist/snp.unit.spec-TR5TCO7X.js +176 -0
- package/dist/snplocus-VLPH5Y65.js +208 -0
- package/dist/spliceevent.a53ss.diagram-PATK67SH.js +151 -0
- package/dist/spliceevent.exonskip.diagram-7B3SEOAJ.js +277 -0
- package/dist/spliceevent.noeventdiagram-4NPNZUEN.js +460 -0
- package/dist/ssGSEA-XMW5BLAU.js +38 -0
- package/dist/ssGSEA.unit.spec-ASUWKVUT.js +88 -0
- package/dist/summarizeCnvGeneexp-KWRFGX32.js +163 -0
- package/dist/summarizeGeneexpSurvival-FIPIMEJR.js +114 -0
- package/dist/summarizeMutationCnv-IUYRVLZG.js +164 -0
- package/dist/summarizeMutationDiagnosis-ZFJPCABL.js +40 -0
- package/dist/summarizeMutationSurvival-HFHYB7DT.js +99 -0
- package/dist/summary-AZUNEZ5I.js +49 -0
- package/dist/summary.integration.spec-WLBAJL44.js +414 -0
- package/dist/summaryInput-NJWVXDXW.js +235 -0
- package/dist/sunburst-PXGF4WM6.js +284 -0
- package/dist/survival-RAU4XCKG.js +58 -0
- package/dist/survival-ZZ4QLZHK.js +46 -0
- package/dist/survival.integration.spec-GBQ5X362.js +915 -0
- package/dist/svgraph-7UCFRL6A.js +1387 -0
- package/dist/svmr-DB3RY2ID.js +3842 -0
- package/dist/table-HJRWWXGM.js +200 -0
- package/dist/termCollection-AW7M6DTP.js +38 -0
- package/dist/termCollection-WPON7RG3.js +179 -0
- package/dist/termCollection.unit.spec-254ESHOE.js +208 -0
- package/dist/tk-SUAFM5YA.js +46 -0
- package/dist/tp.ui-ELEQGSK2.js +1459 -0
- package/dist/tvs.dt-DCXY66YY.js +39 -0
- package/dist/tvs.dtcnv.categorical-SFQZMYX7.js +40 -0
- package/dist/tvs.dtcnv.continuous-AUZNJMC3.js +72 -0
- package/dist/tvs.dtfusion-5F7MYFHZ.js +40 -0
- package/dist/tvs.dtsnvindel-JJSPL4PH.js +40 -0
- package/dist/tvs.dtsv-DARTSV5H.js +40 -0
- package/dist/tvs.samplelst-HHBIO26C.js +104 -0
- package/dist/tvs.termCollection-KCMALH6B.js +159 -0
- package/dist/violin-C26FW5WK.js +46 -0
- package/dist/violin.integration.spec-QQ43XWHQ.js +1425 -0
- package/dist/violin.interactivity-H2BHC6M4.js +38 -0
- package/dist/violin.renderer-GSG2I7AV.js +40 -0
- package/dist/vocabulary-3G525O5V.js +41 -0
- package/package.json +2 -2
- package/dist/2dmaf-GTD3AXGT.js +0 -1373
- package/dist/AIProjectAdmin-ALMSVHFX.js +0 -958
- package/dist/AppHeader-RK2YRITI.js +0 -835
- package/dist/BoxPlot-6ZXLPA5Q.js +0 -1217
- package/dist/BoxPlot-6ZXLPA5Q.js.map +0 -7
- package/dist/CorrelationVolcano-PJB3QCXB.js +0 -619
- package/dist/DE-MEWV5RTV.js +0 -95
- package/dist/DEinput-I62VHD2U.js +0 -301
- package/dist/DifferentialAnalysis-7L3CDPVB.js +0 -245
- package/dist/Disco-FCS7B5DO.js +0 -3297
- package/dist/Disco.UI-BFJ5XFAT.js +0 -249
- package/dist/DmrPlot-362PCE7L.js +0 -642
- package/dist/GB-SX4JENAW.js +0 -1353
- package/dist/GeneExpInput-EHWHQTRV.js +0 -367
- package/dist/HicApp-UE4DCUKX.js +0 -2250
- package/dist/IDCViewer-EDF5XJ63.js +0 -10455
- package/dist/NumBinaryEditor-3TAAJNYY.js +0 -271
- package/dist/NumBinaryEditor.unit.spec-6776472M.js +0 -286
- package/dist/NumContEditor-WLFXTY4M.js +0 -109
- package/dist/NumContEditor.unit.spec-KG5SCOIQ.js +0 -169
- package/dist/NumCustomBinEditor-EKKNCLKI.js +0 -38
- package/dist/NumCustomBinEditor.unit.spec-LSLSKQDW.js +0 -284
- package/dist/NumDiscreteEditor-X2MLECNT.js +0 -179
- package/dist/NumDiscreteEditor.unit.spec-BZG7P4C7.js +0 -202
- package/dist/NumRegularBinEditor-CAGJ4ZWD.js +0 -38
- package/dist/NumRegularBinEditor.unit.spec-GJSJC4DK.js +0 -227
- package/dist/NumSplineEditor-ND3RC7R6.js +0 -198
- package/dist/NumSplineEditor.unit.spec-F67JQKPY.js +0 -199
- package/dist/NumericDensity-VW7NIZU7.js +0 -38
- package/dist/NumericDensity.unit.spec-YHIMU23C.js +0 -221
- package/dist/NumericHandler-HCU6B2XV.js +0 -39
- package/dist/NumericHandler.unit.spec-6GVWAUED.js +0 -219
- package/dist/ProteomeInput-SONQSTVD.js +0 -396
- package/dist/RunChart2-ZLBNG4JF.js +0 -758
- package/dist/SC-YDRE37LP.js +0 -1127
- package/dist/SC-YDRE37LP.js.map +0 -7
- package/dist/Volcano-27ZERHXI.js +0 -1379
- package/dist/Volcano-27ZERHXI.js.map +0 -7
- package/dist/WSIViewer-2P7ANPBV.js +0 -48562
- package/dist/WsiSamplesPlot-FM4B657P.js +0 -165
- package/dist/adSandbox-M6TBRE5W.js +0 -38
- package/dist/animatedBubbleChart-VYSSX52K.js +0 -555
- package/dist/app-BLJT7ZDG.js +0 -49
- package/dist/app-LSFSUJHF.js +0 -37
- package/dist/bam-ZMHBTBB4.js +0 -860
- package/dist/barchart-EF75MNTN.js +0 -47
- package/dist/barchart.data-VWZB3R2Z.js +0 -22
- package/dist/barchart.events-AMYQOMBQ.js +0 -47
- package/dist/barchart.integration.spec-TCTQ5PKN.js +0 -2196
- package/dist/barchart2-LOHN6NSE.js +0 -314
- package/dist/block-23BH5TZ3.js +0 -6226
- package/dist/block.init-3BF6L23D.js +0 -38
- package/dist/block.mds.expressionrank-DSHATA2M.js +0 -359
- package/dist/block.mds.geneboxplot-RXQUOE3Y.js +0 -828
- package/dist/block.mds.junction-PN776TCD.js +0 -1545
- package/dist/block.mds.svcnv-SOWUBH4K.js +0 -6801
- package/dist/block.svg-ZPYMFAGC.js +0 -164
- package/dist/block.tk.aicheck-E22ZJJFP.js +0 -283
- package/dist/block.tk.ase-S54Z5A4G.js +0 -365
- package/dist/block.tk.bam-YOELFYXU.js +0 -1906
- package/dist/block.tk.bedgraphdot-VFUWXPSL.js +0 -384
- package/dist/block.tk.bigwig.ui-2SJYUPR3.js +0 -212
- package/dist/block.tk.hicstraw-GZVE4HQG.js +0 -823
- package/dist/block.tk.junction-RRFX4CAT.js +0 -2364
- package/dist/block.tk.junction.textmatrixui-A726SAAL.js +0 -199
- package/dist/block.tk.ld-THUOBW72.js +0 -99
- package/dist/block.tk.menu-V3VGODVI.js +0 -1029
- package/dist/block.tk.pgv-CNUGIK5J.js +0 -944
- package/dist/brainImaging-4PF74IEK.js +0 -423
- package/dist/brainRegions-U5K3KEQF.js +0 -221
- package/dist/bubbleHeatmap-6NL4PUFY.js +0 -383
- package/dist/chunk-2FTXOPE2.js +0 -368
- package/dist/chunk-2MCUT32T.js +0 -254
- package/dist/chunk-2SZ2VLOG.js +0 -1102
- package/dist/chunk-2XBWB6P2.js +0 -37
- package/dist/chunk-34VSTY2U.js +0 -234
- package/dist/chunk-34VSTY2U.js.map +0 -7
- package/dist/chunk-3DS4HIEH.js +0 -1230
- package/dist/chunk-42FSM477.js +0 -272
- package/dist/chunk-44VQIATQ.js +0 -6364
- package/dist/chunk-5B5FZPZI.js +0 -148
- package/dist/chunk-5DSLFEAN.js +0 -276
- package/dist/chunk-5DSQOV7M.js +0 -50
- package/dist/chunk-7CZI6SE7.js +0 -222
- package/dist/chunk-7NABQ2JU.js +0 -54
- package/dist/chunk-7VMFUE64.js +0 -117
- package/dist/chunk-7WBS7ZUI.js +0 -54
- package/dist/chunk-7XSDY2FN.js +0 -1220
- package/dist/chunk-AK5Z4PLV.js +0 -230
- package/dist/chunk-B3XMNPZY.js +0 -448
- package/dist/chunk-B4VBTVVQ.js +0 -815
- package/dist/chunk-CHUE5Y7Y.js +0 -194
- package/dist/chunk-CNBLRB4P.js +0 -170
- package/dist/chunk-CPMOBFFR.js +0 -190
- package/dist/chunk-CPMOBFFR.js.map +0 -7
- package/dist/chunk-D3TU3RDU.js +0 -299
- package/dist/chunk-DJQTUDJM.js +0 -414
- package/dist/chunk-DJQTUDJM.js.map +0 -7
- package/dist/chunk-E2KY2IZS.js +0 -446
- package/dist/chunk-FBMDK2UA.js +0 -514
- package/dist/chunk-FSWSZZTG.js +0 -102
- package/dist/chunk-GPGCGFFS.js +0 -399
- package/dist/chunk-H5DR6OYM.js +0 -217
- package/dist/chunk-HVZQYGQN.js +0 -98
- package/dist/chunk-HYIDLSEL.js +0 -833
- package/dist/chunk-IDX6WU4U.js +0 -14
- package/dist/chunk-IPGYIEPM.js +0 -263
- package/dist/chunk-IQTEW3SK.js +0 -119
- package/dist/chunk-J7W2DGAL.js +0 -226
- package/dist/chunk-JVVOJREJ.js +0 -55
- package/dist/chunk-KIGAMN3Z.js +0 -216
- package/dist/chunk-LRPQBMQE.js +0 -2786
- package/dist/chunk-LYULXXGR.js +0 -20896
- package/dist/chunk-LYULXXGR.js.map +0 -7
- package/dist/chunk-M7JGRSFA.js +0 -5067
- package/dist/chunk-MAACMLMN.js +0 -142
- package/dist/chunk-MNPTPENH.js +0 -1825
- package/dist/chunk-MU3ZC4RW.js +0 -102
- package/dist/chunk-N6ALTSJ2.js +0 -176
- package/dist/chunk-N7326KA3.js +0 -1943
- package/dist/chunk-O64WQLAV.js +0 -2327
- package/dist/chunk-OEOYTMMY.js +0 -203
- package/dist/chunk-P3QPMVML.js +0 -736
- package/dist/chunk-P3QPMVML.js.map +0 -7
- package/dist/chunk-PJM6MUTT.js +0 -1289
- package/dist/chunk-PJM6MUTT.js.map +0 -7
- package/dist/chunk-QPAZPA3N.js +0 -4269
- package/dist/chunk-QPAZPA3N.js.map +0 -7
- package/dist/chunk-RG222M4S.js +0 -272
- package/dist/chunk-S46UPZFM.js +0 -158
- package/dist/chunk-S4L4JCMA.js +0 -102
- package/dist/chunk-UAALI7MC.js +0 -315
- package/dist/chunk-UAALI7MC.js.map +0 -7
- package/dist/chunk-UDTNSJY2.js +0 -34
- package/dist/chunk-UFLSI6EW.js +0 -2681
- package/dist/chunk-UKABZJQ7.js +0 -480
- package/dist/chunk-UPNKFGTN.js +0 -100
- package/dist/chunk-UZKHBBWY.js +0 -617
- package/dist/chunk-VG6GVF6D.js +0 -302
- package/dist/chunk-VO4FCZOR.js +0 -448
- package/dist/chunk-VZBMCJBR.js +0 -534
- package/dist/chunk-WR4UATTO.js +0 -182
- package/dist/chunk-WR4UATTO.js.map +0 -7
- package/dist/chunk-XNYATA6C.js +0 -2833
- package/dist/chunk-Y5FH3TEH.js +0 -129
- package/dist/chunk-YIFCXFWE.js +0 -343
- package/dist/chunk-YRXB3MKU.js +0 -477
- package/dist/chunk-Z7UVDJKK.js +0 -1275
- package/dist/chunk-ZDEMAKRA.js +0 -386
- package/dist/chunk-ZTJLENGZ.js +0 -292
- package/dist/condition-6UUQ3AAI.js +0 -332
- package/dist/controls-N2NIGPHY.js +0 -41
- package/dist/controls.config-YYIMJHWN.js +0 -39
- package/dist/correlation-DYUMFMTU.js +0 -102
- package/dist/cuminc-EUXCL53V.js +0 -1149
- package/dist/cuminc.integration.spec-ZQFMIBF6.js +0 -678
- package/dist/customdata.inputui-U2VXVWJ3.js +0 -289
- package/dist/dataDownload-QK2VYWYW.js +0 -330
- package/dist/dataDownload.integration.spec-NG4ZASWC.js +0 -193
- package/dist/databrowser.ui-ALW4LSLA.js +0 -433
- package/dist/dictionary-F7BPXOBO.js +0 -118
- package/dist/dnaMethylation-XNRJIBAH.js +0 -38
- package/dist/dnaMethylation.integration.spec-F5ODQTVL.js +0 -203
- package/dist/dofetch-IYEI7WSH.js +0 -51
- package/dist/e2pca-BHB7UMS5.js +0 -350
- package/dist/ep-QRFUVFSK.js +0 -1256
- package/dist/expclust.gdc.spec-LMH7QAU4.js +0 -307
- package/dist/facet-34HXG7MO.js +0 -521
- package/dist/forms2-ZQUPKXE5.js +0 -539
- package/dist/gb-HWZ5KZXX.js +0 -88
- package/dist/geneExpClustering-KFMP553E.js +0 -249
- package/dist/geneExpression-E2GIRM6Z.js +0 -313
- package/dist/geneExpression-QODFRNS4.js +0 -38
- package/dist/geneExpression.unit.spec-HV44ABGV.js +0 -102
- package/dist/geneORA-MJ6MFW2K.js +0 -278
- package/dist/geneRanking-ODKGLJX2.js +0 -553
- package/dist/geneVariant-QT6E7YZN.js +0 -39
- package/dist/geneVariant-UYQ4XIOQ.js +0 -41
- package/dist/geneVariant.integration.spec-HQ5GJ7UM.js +0 -198
- package/dist/genefusion.ui-5KYGD7JL.js +0 -309
- package/dist/geneset-M6T24ZYZ.js +0 -208
- package/dist/genomeBrowser.spec-CVH4S5KZ.js +0 -281
- package/dist/grin2-GI2WNWJO.js +0 -968
- package/dist/grin2-GI2WNWJO.js.map +0 -7
- package/dist/grin2-QU2UCKKE.js +0 -75
- package/dist/gsea-EGWJAATJ.js +0 -47
- package/dist/hierCluster-4OJ7BHAB.js +0 -59
- package/dist/hierCluster-P4HGGVK7.js +0 -63
- package/dist/hierCluster.config-5DGS5EH4.js +0 -40
- package/dist/hierCluster.integration.spec-OL4FLSBS.js +0 -488
- package/dist/hierCluster.interactivity-VEHJHBKY.js +0 -54
- package/dist/hierCluster.renderers-OEVSBUBK.js +0 -21
- package/dist/imagePlot-MMJYC4DX.js +0 -163
- package/dist/importPlot-4HJ6VR4P.js +0 -8
- package/dist/isoformExpression-EISYQF2S.js +0 -40
- package/dist/isoformExpression.unit.spec-YKBWVL7C.js +0 -208
- package/dist/launch.adhoc-U3KOGDIC.js +0 -42
- package/dist/leftlabel.sample-LVF5WLMZ.js +0 -264
- package/dist/lollipop-HX2WLD5J.js +0 -171
- package/dist/maf-MBX3S3LS.js +0 -459
- package/dist/maftimeline-VN6SYUPQ.js +0 -593
- package/dist/matrix-6UASVMIW.js +0 -58
- package/dist/matrix-FYYLVW7O.js +0 -63
- package/dist/matrix.cells-3RUGV7XG.js +0 -28
- package/dist/matrix.config-ELBFN3JN.js +0 -41
- package/dist/matrix.data-MHFF47ZY.js +0 -25
- package/dist/matrix.groups-UJRFFG5J.js +0 -27
- package/dist/matrix.integration.spec-5DUNUOQ3.js +0 -3072
- package/dist/matrix.interactivity-2TZ3ON4H.js +0 -42
- package/dist/matrix.layout-IGUBUCB2.js +0 -44
- package/dist/matrix.legend-UBQF6LMD.js +0 -22
- package/dist/matrix.renderers-ON2EXXIS.js +0 -38
- package/dist/matrix.serieses-5XH7NO23.js +0 -21
- package/dist/matrix.sort-QSWTVRJT.js +0 -27
- package/dist/matrix.sort.unit.spec-7Y6D456I.js +0 -472
- package/dist/matrix.sorterUi.unit.spec-3XNGEZZ2.js +0 -342
- package/dist/mavb-J4AUXBHZ.js +0 -732
- package/dist/mds.fimo-I6OALZRX.js +0 -518
- package/dist/mds.samplescatterplot-XSWR37S5.js +0 -1550
- package/dist/mds.survivalplot-Q3TE4A5P.js +0 -483
- package/dist/numericDictTermCluster-N3GM6YVP.js +0 -65
- package/dist/oncomatrix-C4RDUA2C.js +0 -295
- package/dist/oncomatrix.spec-QVD3XUTH.js +0 -448
- package/dist/plot.2dvaf-MNONDWFA.js +0 -377
- package/dist/plot.app-3T275PW5.js +0 -41
- package/dist/plot.barplot-LOLIPHXG.js +0 -102
- package/dist/plot.boxplot-I6CAYXPV.js +0 -152
- package/dist/plot.brainImaging-Y76KB6IC.js +0 -51
- package/dist/plot.disco-N5ISUUNQ.js +0 -102
- package/dist/plot.dzi-Q6K542P6.js +0 -33
- package/dist/plot.ssgq-OGLNOY4Q.js +0 -139
- package/dist/plot.vaf2cov-NXQ5D3KA.js +0 -259
- package/dist/plot.wsi-YMDUOZ57.js +0 -36
- package/dist/polar2-AQ2W3SNH.js +0 -231
- package/dist/profileForms-TCPZPI22.js +0 -446
- package/dist/profilePlot-4RKKICKC.js +0 -54
- package/dist/proteinView-5VJ6E2XT.js +0 -1568
- package/dist/qualitative-NCFIVW6S.js +0 -43
- package/dist/radar2-UJFFZE7T.js +0 -326
- package/dist/radarFacility2-ATQBCF3N.js +0 -334
- package/dist/regression-4RSS7447.js +0 -56
- package/dist/regression.inputs-5XGUGNWV.js +0 -48
- package/dist/regression.inputs.term-LSJAZWE4.js +0 -48
- package/dist/regression.inputs.values.table-GNIJZETG.js +0 -45
- package/dist/regression.integration.spec-MV652K47.js +0 -784
- package/dist/regression.results-M3YH6ZD3.js +0 -40
- package/dist/regression.spec-455WPZHP.js +0 -708
- package/dist/report-MH3V7SHZ.js +0 -222
- package/dist/sampleScatter.spec-OTIL3JDG.js +0 -202
- package/dist/sampleView-DHACOCEG.js +0 -48
- package/dist/samplelst-F3AXOE2D.js +0 -111
- package/dist/samplematrix-M6CKKVNE.js +0 -2198
- package/dist/sc-S5XA37JJ.js +0 -86
- package/dist/scatter-IRPFNDHW.js +0 -851
- package/dist/scatter-IRPFNDHW.js.map +0 -7
- package/dist/scatter.integration.spec-5FWVHMVJ.js +0 -1206
- package/dist/scatter.integration.spec-5FWVHMVJ.js.map +0 -7
- package/dist/selectGenomeWithTklst-NIOUX6MV.js +0 -134
- package/dist/singleCellCellType-FTGLNH2J.js +0 -38
- package/dist/singleCellCellType.unit.spec-BJ5YZAXF.js +0 -160
- package/dist/singleCellGeneExpression-56EDDG5H.js +0 -38
- package/dist/singleCellGeneExpression.unit.spec-XSQRWAI3.js +0 -153
- package/dist/singleCellPlot-TH77EJZ4.js +0 -54
- package/dist/singlecell-3QZQZM32.js +0 -86
- package/dist/singlecell-7KJMBASC.js +0 -1572
- package/dist/snp-YXG5O4U4.js +0 -38
- package/dist/snp.unit.spec-O27J7OOK.js +0 -176
- package/dist/snplocus-CQZSC7P6.js +0 -208
- package/dist/spliceevent.a53ss.diagram-K5ZDPZE6.js +0 -151
- package/dist/spliceevent.exonskip.diagram-A2VZ3TTF.js +0 -277
- package/dist/spliceevent.noeventdiagram-DJDA6ENK.js +0 -460
- package/dist/ssGSEA-3FTGRUTC.js +0 -38
- package/dist/ssGSEA.unit.spec-GF35KBTX.js +0 -88
- package/dist/summarizeCnvGeneexp-6IDTNOYE.js +0 -163
- package/dist/summarizeGeneexpSurvival-OWLUX2HO.js +0 -114
- package/dist/summarizeMutationCnv-BMEN3XNV.js +0 -164
- package/dist/summarizeMutationDiagnosis-LW6K6373.js +0 -40
- package/dist/summarizeMutationSurvival-E7REF2VY.js +0 -99
- package/dist/summary-MKA7OJKE.js +0 -49
- package/dist/summary.integration.spec-IV6I6SNJ.js +0 -414
- package/dist/summaryInput-NET6SPM4.js +0 -235
- package/dist/sunburst-CO3MXFTJ.js +0 -284
- package/dist/survival-MIPCEBS3.js +0 -46
- package/dist/survival-QQXTCNDU.js +0 -58
- package/dist/survival.integration.spec-6FH4S3EH.js +0 -915
- package/dist/svgraph-YF7BS7TN.js +0 -1387
- package/dist/svmr-J2JLQGEE.js +0 -3842
- package/dist/table-7YL7I4GH.js +0 -200
- package/dist/termCollection-LNEN72IV.js +0 -38
- package/dist/termCollection-SOLNYAZ4.js +0 -179
- package/dist/termCollection.unit.spec-LTX7UVYP.js +0 -208
- package/dist/tk-RZDP2YT5.js +0 -46
- package/dist/tp.ui-T6XXBHHD.js +0 -1459
- package/dist/tvs.dt-7APM37Y3.js +0 -39
- package/dist/tvs.dtcnv.categorical-YIPXQSIL.js +0 -40
- package/dist/tvs.dtcnv.continuous-ITNZE3SH.js +0 -72
- package/dist/tvs.dtfusion-2JIIPDTN.js +0 -40
- package/dist/tvs.dtsnvindel-HO2PUFN2.js +0 -40
- package/dist/tvs.dtsv-7KCWSUYO.js +0 -40
- package/dist/tvs.samplelst-KKWJQNLW.js +0 -104
- package/dist/tvs.termCollection-R2IGRG2U.js +0 -159
- package/dist/violin-OTPZQTGA.js +0 -46
- package/dist/violin.integration.spec-KESWDSBM.js +0 -1425
- package/dist/violin.interactivity-Q2WALZO3.js +0 -38
- package/dist/violin.renderer-WIRIV7QY.js +0 -40
- package/dist/vocabulary-XXDHHHPJ.js +0 -41
- /package/dist/{2dmaf-GTD3AXGT.js.map → 2dmaf-SKNV7IHT.js.map} +0 -0
- /package/dist/{AIProjectAdmin-ALMSVHFX.js.map → AIProjectAdmin-AOTVRBNH.js.map} +0 -0
- /package/dist/{AppHeader-RK2YRITI.js.map → AppHeader-M2ZSS3M3.js.map} +0 -0
- /package/dist/{CorrelationVolcano-PJB3QCXB.js.map → CorrelationVolcano-YCQ5S6MT.js.map} +0 -0
- /package/dist/{DE-MEWV5RTV.js.map → DE-RBMOQZCR.js.map} +0 -0
- /package/dist/{DEinput-I62VHD2U.js.map → DEinput-PTW6RS6U.js.map} +0 -0
- /package/dist/{DifferentialAnalysis-7L3CDPVB.js.map → DifferentialAnalysis-M6IDWPYX.js.map} +0 -0
- /package/dist/{Disco-FCS7B5DO.js.map → Disco-GUKDAHUY.js.map} +0 -0
- /package/dist/{Disco.UI-BFJ5XFAT.js.map → Disco.UI-YBIMV7RH.js.map} +0 -0
- /package/dist/{DmrPlot-362PCE7L.js.map → DmrPlot-JQPLLU6P.js.map} +0 -0
- /package/dist/{GB-SX4JENAW.js.map → GB-UOTFNVJE.js.map} +0 -0
- /package/dist/{GeneExpInput-EHWHQTRV.js.map → GeneExpInput-3OPDDCXR.js.map} +0 -0
- /package/dist/{HicApp-UE4DCUKX.js.map → HicApp-VFOWRP6G.js.map} +0 -0
- /package/dist/{IDCViewer-EDF5XJ63.js.map → IDCViewer-Y7EOIIBG.js.map} +0 -0
- /package/dist/{NumBinaryEditor-3TAAJNYY.js.map → NumBinaryEditor-RL44SO3T.js.map} +0 -0
- /package/dist/{NumBinaryEditor.unit.spec-6776472M.js.map → NumBinaryEditor.unit.spec-P73PGAX5.js.map} +0 -0
- /package/dist/{NumContEditor-WLFXTY4M.js.map → NumContEditor-MIC7M73G.js.map} +0 -0
- /package/dist/{NumContEditor.unit.spec-KG5SCOIQ.js.map → NumContEditor.unit.spec-5XZH7OCG.js.map} +0 -0
- /package/dist/{NumCustomBinEditor-EKKNCLKI.js.map → NumCustomBinEditor-W357XTIR.js.map} +0 -0
- /package/dist/{NumCustomBinEditor.unit.spec-LSLSKQDW.js.map → NumCustomBinEditor.unit.spec-CJMK4CYW.js.map} +0 -0
- /package/dist/{NumDiscreteEditor-X2MLECNT.js.map → NumDiscreteEditor-PRSUMS3I.js.map} +0 -0
- /package/dist/{NumDiscreteEditor.unit.spec-BZG7P4C7.js.map → NumDiscreteEditor.unit.spec-A6R56P3Z.js.map} +0 -0
- /package/dist/{NumRegularBinEditor-CAGJ4ZWD.js.map → NumRegularBinEditor-7OHUEUCC.js.map} +0 -0
- /package/dist/{NumRegularBinEditor.unit.spec-GJSJC4DK.js.map → NumRegularBinEditor.unit.spec-NOAX42UZ.js.map} +0 -0
- /package/dist/{NumSplineEditor-ND3RC7R6.js.map → NumSplineEditor-XI7AT5LM.js.map} +0 -0
- /package/dist/{NumSplineEditor.unit.spec-F67JQKPY.js.map → NumSplineEditor.unit.spec-ZH4M2N2C.js.map} +0 -0
- /package/dist/{NumericDensity-VW7NIZU7.js.map → NumericDensity-X6IHQAW3.js.map} +0 -0
- /package/dist/{NumericDensity.unit.spec-YHIMU23C.js.map → NumericDensity.unit.spec-EKVD4AUG.js.map} +0 -0
- /package/dist/{NumericHandler-HCU6B2XV.js.map → NumericHandler-5ONBWFJ5.js.map} +0 -0
- /package/dist/{NumericHandler.unit.spec-6GVWAUED.js.map → NumericHandler.unit.spec-SHI6E4VA.js.map} +0 -0
- /package/dist/{ProteomeInput-SONQSTVD.js.map → ProteomeInput-HN46MIBP.js.map} +0 -0
- /package/dist/{RunChart2-ZLBNG4JF.js.map → RunChart2-Y6IY6MW2.js.map} +0 -0
- /package/dist/{WSIViewer-2P7ANPBV.js.map → WSIViewer-RLLL7MAL.js.map} +0 -0
- /package/dist/{WsiSamplesPlot-FM4B657P.js.map → WsiSamplesPlot-FU3TCOTY.js.map} +0 -0
- /package/dist/{adSandbox-M6TBRE5W.js.map → adSandbox-ZINST5DE.js.map} +0 -0
- /package/dist/{animatedBubbleChart-VYSSX52K.js.map → animatedBubbleChart-PIQWCVBJ.js.map} +0 -0
- /package/dist/{app-BLJT7ZDG.js.map → app-N42SVGI2.js.map} +0 -0
- /package/dist/{app-LSFSUJHF.js.map → app-RWN4XLCP.js.map} +0 -0
- /package/dist/{bam-ZMHBTBB4.js.map → bam-QTSTXJ4N.js.map} +0 -0
- /package/dist/{barchart-EF75MNTN.js.map → barchart-27BYTRVI.js.map} +0 -0
- /package/dist/{barchart.data-VWZB3R2Z.js.map → barchart.data-OUNVH4JU.js.map} +0 -0
- /package/dist/{barchart.events-AMYQOMBQ.js.map → barchart.events-PY4CEDSO.js.map} +0 -0
- /package/dist/{barchart.integration.spec-TCTQ5PKN.js.map → barchart.integration.spec-H4WGHQ7R.js.map} +0 -0
- /package/dist/{barchart2-LOHN6NSE.js.map → barchart2-TIOTRAC2.js.map} +0 -0
- /package/dist/{block-23BH5TZ3.js.map → block-YPM767A4.js.map} +0 -0
- /package/dist/{block.init-3BF6L23D.js.map → block.init-LRZ3QAGC.js.map} +0 -0
- /package/dist/{block.mds.expressionrank-DSHATA2M.js.map → block.mds.expressionrank-IV7JLC52.js.map} +0 -0
- /package/dist/{block.mds.geneboxplot-RXQUOE3Y.js.map → block.mds.geneboxplot-IBCE5XZU.js.map} +0 -0
- /package/dist/{block.mds.junction-PN776TCD.js.map → block.mds.junction-ISSCJHNF.js.map} +0 -0
- /package/dist/{block.mds.svcnv-SOWUBH4K.js.map → block.mds.svcnv-ZEBVBTL7.js.map} +0 -0
- /package/dist/{block.svg-ZPYMFAGC.js.map → block.svg-FYWA5VYH.js.map} +0 -0
- /package/dist/{block.tk.aicheck-E22ZJJFP.js.map → block.tk.aicheck-AD6DTKXR.js.map} +0 -0
- /package/dist/{block.tk.ase-S54Z5A4G.js.map → block.tk.ase-LO2J4KRE.js.map} +0 -0
- /package/dist/{block.tk.bam-YOELFYXU.js.map → block.tk.bam-XGX22FCN.js.map} +0 -0
- /package/dist/{block.tk.bedgraphdot-VFUWXPSL.js.map → block.tk.bedgraphdot-SUIRFNFL.js.map} +0 -0
- /package/dist/{block.tk.bigwig.ui-2SJYUPR3.js.map → block.tk.bigwig.ui-2Q7FAK3V.js.map} +0 -0
- /package/dist/{block.tk.hicstraw-GZVE4HQG.js.map → block.tk.hicstraw-4MVP2PCL.js.map} +0 -0
- /package/dist/{block.tk.junction-RRFX4CAT.js.map → block.tk.junction-F54FTEPB.js.map} +0 -0
- /package/dist/{block.tk.junction.textmatrixui-A726SAAL.js.map → block.tk.junction.textmatrixui-ETROZJVK.js.map} +0 -0
- /package/dist/{block.tk.ld-THUOBW72.js.map → block.tk.ld-NJEDKSTU.js.map} +0 -0
- /package/dist/{block.tk.menu-V3VGODVI.js.map → block.tk.menu-LZOY4FKT.js.map} +0 -0
- /package/dist/{block.tk.pgv-CNUGIK5J.js.map → block.tk.pgv-I3XHJ7VU.js.map} +0 -0
- /package/dist/{brainImaging-4PF74IEK.js.map → brainImaging-BGP6VRFV.js.map} +0 -0
- /package/dist/{brainRegions-U5K3KEQF.js.map → brainRegions-AAN7LM2Y.js.map} +0 -0
- /package/dist/{bubbleHeatmap-6NL4PUFY.js.map → bubbleHeatmap-HNEU4CYA.js.map} +0 -0
- /package/dist/{chunk-UPNKFGTN.js.map → chunk-2XV6U42J.js.map} +0 -0
- /package/dist/{chunk-M7JGRSFA.js.map → chunk-36NAWXQ7.js.map} +0 -0
- /package/dist/{chunk-7CZI6SE7.js.map → chunk-427UL37G.js.map} +0 -0
- /package/dist/{chunk-7NABQ2JU.js.map → chunk-4C3XRI6J.js.map} +0 -0
- /package/dist/{chunk-FBMDK2UA.js.map → chunk-4O6H4ZHL.js.map} +0 -0
- /package/dist/{chunk-5DSLFEAN.js.map → chunk-53JJ7SXN.js.map} +0 -0
- /package/dist/{chunk-H5DR6OYM.js.map → chunk-5HMX4NUJ.js.map} +0 -0
- /package/dist/{chunk-JVVOJREJ.js.map → chunk-5V2BMEAS.js.map} +0 -0
- /package/dist/{chunk-Z7UVDJKK.js.map → chunk-6MBTPVIM.js.map} +0 -0
- /package/dist/{chunk-3DS4HIEH.js.map → chunk-7D3WX34I.js.map} +0 -0
- /package/dist/{chunk-N6ALTSJ2.js.map → chunk-7FSIZZOX.js.map} +0 -0
- /package/dist/{chunk-IQTEW3SK.js.map → chunk-A3URBFXN.js.map} +0 -0
- /package/dist/{chunk-2MCUT32T.js.map → chunk-A45KH7LP.js.map} +0 -0
- /package/dist/{chunk-S4L4JCMA.js.map → chunk-BWQV2OBL.js.map} +0 -0
- /package/dist/{chunk-LRPQBMQE.js.map → chunk-BXGQXLHP.js.map} +0 -0
- /package/dist/{chunk-D3TU3RDU.js.map → chunk-CDJAHMAN.js.map} +0 -0
- /package/dist/{chunk-2XBWB6P2.js.map → chunk-CXHLROWX.js.map} +0 -0
- /package/dist/{chunk-FSWSZZTG.js.map → chunk-EKKQMKQI.js.map} +0 -0
- /package/dist/{chunk-S46UPZFM.js.map → chunk-EPWIJEMK.js.map} +0 -0
- /package/dist/{chunk-AK5Z4PLV.js.map → chunk-F7Y67LK7.js.map} +0 -0
- /package/dist/{chunk-IDX6WU4U.js.map → chunk-FDBVAL6K.js.map} +0 -0
- /package/dist/{chunk-ZTJLENGZ.js.map → chunk-FISP5YN2.js.map} +0 -0
- /package/dist/{chunk-YRXB3MKU.js.map → chunk-G3FSS7GR.js.map} +0 -0
- /package/dist/{chunk-HVZQYGQN.js.map → chunk-GE4NJDV4.js.map} +0 -0
- /package/dist/{chunk-UDTNSJY2.js.map → chunk-GYGU4UT5.js.map} +0 -0
- /package/dist/{chunk-5B5FZPZI.js.map → chunk-I5IPJG2R.js.map} +0 -0
- /package/dist/{chunk-CHUE5Y7Y.js.map → chunk-IFK24IXL.js.map} +0 -0
- /package/dist/{chunk-5DSQOV7M.js.map → chunk-ILE6ML2D.js.map} +0 -0
- /package/dist/{chunk-KIGAMN3Z.js.map → chunk-IRKP6IZ4.js.map} +0 -0
- /package/dist/{chunk-CNBLRB4P.js.map → chunk-J6ZOUCWN.js.map} +0 -0
- /package/dist/{chunk-B3XMNPZY.js.map → chunk-JNBJG57F.js.map} +0 -0
- /package/dist/{chunk-7VMFUE64.js.map → chunk-K5UVG3FQ.js.map} +0 -0
- /package/dist/{chunk-MU3ZC4RW.js.map → chunk-KE5B34CS.js.map} +0 -0
- /package/dist/{chunk-UFLSI6EW.js.map → chunk-L6A2BEXB.js.map} +0 -0
- /package/dist/{chunk-J7W2DGAL.js.map → chunk-LWEGSYDD.js.map} +0 -0
- /package/dist/{chunk-MNPTPENH.js.map → chunk-LYVLF6HO.js.map} +0 -0
- /package/dist/{chunk-UZKHBBWY.js.map → chunk-MN3KDNHC.js.map} +0 -0
- /package/dist/{chunk-VG6GVF6D.js.map → chunk-MTZSN3H4.js.map} +0 -0
- /package/dist/{chunk-VZBMCJBR.js.map → chunk-N7O7NPUO.js.map} +0 -0
- /package/dist/{chunk-MAACMLMN.js.map → chunk-OF5FE6GT.js.map} +0 -0
- /package/dist/{chunk-B4VBTVVQ.js.map → chunk-OVSKJROY.js.map} +0 -0
- /package/dist/{chunk-UKABZJQ7.js.map → chunk-PJ3FCJBZ.js.map} +0 -0
- /package/dist/{chunk-O64WQLAV.js.map → chunk-PU2Q4SZR.js.map} +0 -0
- /package/dist/{chunk-YIFCXFWE.js.map → chunk-PZPS56Z6.js.map} +0 -0
- /package/dist/{chunk-HYIDLSEL.js.map → chunk-QKR3ZD3S.js.map} +0 -0
- /package/dist/{chunk-OEOYTMMY.js.map → chunk-QMXCK4Y5.js.map} +0 -0
- /package/dist/{chunk-VO4FCZOR.js.map → chunk-ROJ3LJLE.js.map} +0 -0
- /package/dist/{chunk-N7326KA3.js.map → chunk-SLHWUFAW.js.map} +0 -0
- /package/dist/{chunk-7WBS7ZUI.js.map → chunk-U3G4JGKJ.js.map} +0 -0
- /package/dist/{chunk-E2KY2IZS.js.map → chunk-VDZ5QOF6.js.map} +0 -0
- /package/dist/{chunk-Y5FH3TEH.js.map → chunk-VO5XZ2EG.js.map} +0 -0
- /package/dist/{chunk-IPGYIEPM.js.map → chunk-VRH7NP6R.js.map} +0 -0
- /package/dist/{chunk-42FSM477.js.map → chunk-VTMJGRT5.js.map} +0 -0
- /package/dist/{chunk-GPGCGFFS.js.map → chunk-W5X6C7LY.js.map} +0 -0
- /package/dist/{chunk-RG222M4S.js.map → chunk-WJGUNGFK.js.map} +0 -0
- /package/dist/{chunk-2FTXOPE2.js.map → chunk-WKT46ZJ6.js.map} +0 -0
- /package/dist/{chunk-XNYATA6C.js.map → chunk-WQCQWUUP.js.map} +0 -0
- /package/dist/{chunk-44VQIATQ.js.map → chunk-WZ2U5QXJ.js.map} +0 -0
- /package/dist/{chunk-2SZ2VLOG.js.map → chunk-WZUWK5Q6.js.map} +0 -0
- /package/dist/{chunk-7XSDY2FN.js.map → chunk-XPMTUVSS.js.map} +0 -0
- /package/dist/{chunk-ZDEMAKRA.js.map → chunk-YYFQPGIE.js.map} +0 -0
- /package/dist/{condition-6UUQ3AAI.js.map → condition-GVIEMQG7.js.map} +0 -0
- /package/dist/{controls-N2NIGPHY.js.map → controls-73K3XBDR.js.map} +0 -0
- /package/dist/{controls.config-YYIMJHWN.js.map → controls.config-FQKY2LRE.js.map} +0 -0
- /package/dist/{correlation-DYUMFMTU.js.map → correlation-AOAXIUFJ.js.map} +0 -0
- /package/dist/{cuminc-EUXCL53V.js.map → cuminc-OD2PPCEK.js.map} +0 -0
- /package/dist/{cuminc.integration.spec-ZQFMIBF6.js.map → cuminc.integration.spec-TMIFW7EO.js.map} +0 -0
- /package/dist/{customdata.inputui-U2VXVWJ3.js.map → customdata.inputui-SWLGLATL.js.map} +0 -0
- /package/dist/{dataDownload-QK2VYWYW.js.map → dataDownload-456HL2OE.js.map} +0 -0
- /package/dist/{dataDownload.integration.spec-NG4ZASWC.js.map → dataDownload.integration.spec-5YS4MWK5.js.map} +0 -0
- /package/dist/{databrowser.ui-ALW4LSLA.js.map → databrowser.ui-7APC5MNM.js.map} +0 -0
- /package/dist/{dictionary-F7BPXOBO.js.map → dictionary-A3HA5MVK.js.map} +0 -0
- /package/dist/{dnaMethylation-XNRJIBAH.js.map → dnaMethylation-6ONBKARD.js.map} +0 -0
- /package/dist/{dnaMethylation.integration.spec-F5ODQTVL.js.map → dnaMethylation.integration.spec-T3WEGVX3.js.map} +0 -0
- /package/dist/{dofetch-IYEI7WSH.js.map → dofetch-RVPQUMVX.js.map} +0 -0
- /package/dist/{e2pca-BHB7UMS5.js.map → e2pca-75WZ46XG.js.map} +0 -0
- /package/dist/{ep-QRFUVFSK.js.map → ep-QG5CWPTW.js.map} +0 -0
- /package/dist/{expclust.gdc.spec-LMH7QAU4.js.map → expclust.gdc.spec-KBBQJR4M.js.map} +0 -0
- /package/dist/{facet-34HXG7MO.js.map → facet-QGB2Q7YV.js.map} +0 -0
- /package/dist/{forms2-ZQUPKXE5.js.map → forms2-CJGDCWYH.js.map} +0 -0
- /package/dist/{gb-HWZ5KZXX.js.map → gb-NEFAHKQI.js.map} +0 -0
- /package/dist/{geneExpClustering-KFMP553E.js.map → geneExpClustering-ZVR44UZC.js.map} +0 -0
- /package/dist/{geneExpression-E2GIRM6Z.js.map → geneExpression-25EX4DFK.js.map} +0 -0
- /package/dist/{geneExpression-QODFRNS4.js.map → geneExpression-FALOA4GC.js.map} +0 -0
- /package/dist/{geneExpression.unit.spec-HV44ABGV.js.map → geneExpression.unit.spec-BQLELQUS.js.map} +0 -0
- /package/dist/{geneORA-MJ6MFW2K.js.map → geneORA-K2B7JYWD.js.map} +0 -0
- /package/dist/{geneRanking-ODKGLJX2.js.map → geneRanking-6AXL5ZJS.js.map} +0 -0
- /package/dist/{geneVariant-QT6E7YZN.js.map → geneVariant-RZFDP5J5.js.map} +0 -0
- /package/dist/{geneVariant-UYQ4XIOQ.js.map → geneVariant-UIBZ5UIQ.js.map} +0 -0
- /package/dist/{geneVariant.integration.spec-HQ5GJ7UM.js.map → geneVariant.integration.spec-4EZQMPQB.js.map} +0 -0
- /package/dist/{genefusion.ui-5KYGD7JL.js.map → genefusion.ui-YK4TNS2P.js.map} +0 -0
- /package/dist/{geneset-M6T24ZYZ.js.map → geneset-47J4D5ID.js.map} +0 -0
- /package/dist/{genomeBrowser.spec-CVH4S5KZ.js.map → genomeBrowser.spec-LFFWRIWG.js.map} +0 -0
- /package/dist/{grin2-QU2UCKKE.js.map → grin2-DQB2WW3C.js.map} +0 -0
- /package/dist/{gsea-EGWJAATJ.js.map → gsea-KKLAMLMG.js.map} +0 -0
- /package/dist/{hierCluster-4OJ7BHAB.js.map → hierCluster-3MZEJG6B.js.map} +0 -0
- /package/dist/{hierCluster-P4HGGVK7.js.map → hierCluster-YGBC4XCZ.js.map} +0 -0
- /package/dist/{hierCluster.config-5DGS5EH4.js.map → hierCluster.config-A4N54K3A.js.map} +0 -0
- /package/dist/{hierCluster.integration.spec-OL4FLSBS.js.map → hierCluster.integration.spec-GLKXFZDM.js.map} +0 -0
- /package/dist/{hierCluster.interactivity-VEHJHBKY.js.map → hierCluster.interactivity-4TPWGIVC.js.map} +0 -0
- /package/dist/{hierCluster.renderers-OEVSBUBK.js.map → hierCluster.renderers-WUWSXXHU.js.map} +0 -0
- /package/dist/{imagePlot-MMJYC4DX.js.map → imagePlot-JRPYOV3Q.js.map} +0 -0
- /package/dist/{importPlot-4HJ6VR4P.js.map → importPlot-A3PFUP6K.js.map} +0 -0
- /package/dist/{isoformExpression-EISYQF2S.js.map → isoformExpression-5L4O3WKL.js.map} +0 -0
- /package/dist/{isoformExpression.unit.spec-YKBWVL7C.js.map → isoformExpression.unit.spec-SLB6XIX4.js.map} +0 -0
- /package/dist/{launch.adhoc-U3KOGDIC.js.map → launch.adhoc-QI7TPYSC.js.map} +0 -0
- /package/dist/{leftlabel.sample-LVF5WLMZ.js.map → leftlabel.sample-OSIRTJFW.js.map} +0 -0
- /package/dist/{lollipop-HX2WLD5J.js.map → lollipop-LAELXNQY.js.map} +0 -0
- /package/dist/{maf-MBX3S3LS.js.map → maf-HZAYVZFO.js.map} +0 -0
- /package/dist/{maftimeline-VN6SYUPQ.js.map → maftimeline-BLBNUGAL.js.map} +0 -0
- /package/dist/{matrix-6UASVMIW.js.map → matrix-LVJSHXDM.js.map} +0 -0
- /package/dist/{matrix-FYYLVW7O.js.map → matrix-S5QQV4JU.js.map} +0 -0
- /package/dist/{matrix.cells-3RUGV7XG.js.map → matrix.cells-JUTRYPG4.js.map} +0 -0
- /package/dist/{matrix.config-ELBFN3JN.js.map → matrix.config-ZTWWYNIZ.js.map} +0 -0
- /package/dist/{matrix.data-MHFF47ZY.js.map → matrix.data-BREYB54F.js.map} +0 -0
- /package/dist/{matrix.groups-UJRFFG5J.js.map → matrix.groups-WMHTLOXC.js.map} +0 -0
- /package/dist/{matrix.integration.spec-5DUNUOQ3.js.map → matrix.integration.spec-S6FIEE2X.js.map} +0 -0
- /package/dist/{matrix.interactivity-2TZ3ON4H.js.map → matrix.interactivity-TMBVAM5M.js.map} +0 -0
- /package/dist/{matrix.layout-IGUBUCB2.js.map → matrix.layout-POK5NOUV.js.map} +0 -0
- /package/dist/{matrix.legend-UBQF6LMD.js.map → matrix.legend-6XVQ67AC.js.map} +0 -0
- /package/dist/{matrix.renderers-ON2EXXIS.js.map → matrix.renderers-G5FQZZ73.js.map} +0 -0
- /package/dist/{matrix.serieses-5XH7NO23.js.map → matrix.serieses-XNLQSQS6.js.map} +0 -0
- /package/dist/{matrix.sort-QSWTVRJT.js.map → matrix.sort-XNES23OQ.js.map} +0 -0
- /package/dist/{matrix.sort.unit.spec-7Y6D456I.js.map → matrix.sort.unit.spec-65BDBQUV.js.map} +0 -0
- /package/dist/{matrix.sorterUi.unit.spec-3XNGEZZ2.js.map → matrix.sorterUi.unit.spec-GZQBW7F7.js.map} +0 -0
- /package/dist/{mavb-J4AUXBHZ.js.map → mavb-T2UCRWWM.js.map} +0 -0
- /package/dist/{mds.fimo-I6OALZRX.js.map → mds.fimo-65UUK7ER.js.map} +0 -0
- /package/dist/{mds.samplescatterplot-XSWR37S5.js.map → mds.samplescatterplot-4NHGQBJF.js.map} +0 -0
- /package/dist/{mds.survivalplot-Q3TE4A5P.js.map → mds.survivalplot-WVAHDM3Z.js.map} +0 -0
- /package/dist/{numericDictTermCluster-N3GM6YVP.js.map → numericDictTermCluster-CXASCSQ6.js.map} +0 -0
- /package/dist/{oncomatrix-C4RDUA2C.js.map → oncomatrix-5WMOICWR.js.map} +0 -0
- /package/dist/{oncomatrix.spec-QVD3XUTH.js.map → oncomatrix.spec-POVBNFJR.js.map} +0 -0
- /package/dist/{plot.2dvaf-MNONDWFA.js.map → plot.2dvaf-63K5RSIU.js.map} +0 -0
- /package/dist/{plot.app-3T275PW5.js.map → plot.app-V5IY25QS.js.map} +0 -0
- /package/dist/{plot.barplot-LOLIPHXG.js.map → plot.barplot-IQTYHNFE.js.map} +0 -0
- /package/dist/{plot.boxplot-I6CAYXPV.js.map → plot.boxplot-2RMTO7AS.js.map} +0 -0
- /package/dist/{plot.brainImaging-Y76KB6IC.js.map → plot.brainImaging-DLUHAHHG.js.map} +0 -0
- /package/dist/{plot.disco-N5ISUUNQ.js.map → plot.disco-WK6GDLNF.js.map} +0 -0
- /package/dist/{plot.dzi-Q6K542P6.js.map → plot.dzi-3V3FWE7U.js.map} +0 -0
- /package/dist/{plot.ssgq-OGLNOY4Q.js.map → plot.ssgq-TENK2RP4.js.map} +0 -0
- /package/dist/{plot.vaf2cov-NXQ5D3KA.js.map → plot.vaf2cov-P2QOOZGZ.js.map} +0 -0
- /package/dist/{plot.wsi-YMDUOZ57.js.map → plot.wsi-BVRGJF4E.js.map} +0 -0
- /package/dist/{polar2-AQ2W3SNH.js.map → polar2-NNOZOQQJ.js.map} +0 -0
- /package/dist/{profileForms-TCPZPI22.js.map → profileForms-RS4GEZZV.js.map} +0 -0
- /package/dist/{profilePlot-4RKKICKC.js.map → profilePlot-3DLME3NH.js.map} +0 -0
- /package/dist/{proteinView-5VJ6E2XT.js.map → proteinView-NPKJAQAI.js.map} +0 -0
- /package/dist/{qualitative-NCFIVW6S.js.map → qualitative-S45RXXRJ.js.map} +0 -0
- /package/dist/{radar2-UJFFZE7T.js.map → radar2-EX7YBNMT.js.map} +0 -0
- /package/dist/{radarFacility2-ATQBCF3N.js.map → radarFacility2-WU5O6O77.js.map} +0 -0
- /package/dist/{regression-4RSS7447.js.map → regression-7MCOYJVD.js.map} +0 -0
- /package/dist/{regression.inputs-5XGUGNWV.js.map → regression.inputs-QHSWJ23R.js.map} +0 -0
- /package/dist/{regression.inputs.term-LSJAZWE4.js.map → regression.inputs.term-EJ4Z5Q5O.js.map} +0 -0
- /package/dist/{regression.inputs.values.table-GNIJZETG.js.map → regression.inputs.values.table-YKMAWNXN.js.map} +0 -0
- /package/dist/{regression.integration.spec-MV652K47.js.map → regression.integration.spec-XOX7OXXA.js.map} +0 -0
- /package/dist/{regression.results-M3YH6ZD3.js.map → regression.results-YKPOTPCC.js.map} +0 -0
- /package/dist/{regression.spec-455WPZHP.js.map → regression.spec-YIIY2AZA.js.map} +0 -0
- /package/dist/{report-MH3V7SHZ.js.map → report-JEJFCWUU.js.map} +0 -0
- /package/dist/{sampleScatter.spec-OTIL3JDG.js.map → sampleScatter.spec-LBAZBDYA.js.map} +0 -0
- /package/dist/{sampleView-DHACOCEG.js.map → sampleView-WKZT5ZFE.js.map} +0 -0
- /package/dist/{samplelst-F3AXOE2D.js.map → samplelst-HXM3H6M4.js.map} +0 -0
- /package/dist/{samplematrix-M6CKKVNE.js.map → samplematrix-LCGHK2EK.js.map} +0 -0
- /package/dist/{sc-S5XA37JJ.js.map → sc-3OE2G4BU.js.map} +0 -0
- /package/dist/{selectGenomeWithTklst-NIOUX6MV.js.map → selectGenomeWithTklst-WF2XZ6GH.js.map} +0 -0
- /package/dist/{singleCellCellType-FTGLNH2J.js.map → singleCellCellType-2SRGROMS.js.map} +0 -0
- /package/dist/{singleCellCellType.unit.spec-BJ5YZAXF.js.map → singleCellCellType.unit.spec-DCGHNRJI.js.map} +0 -0
- /package/dist/{singleCellGeneExpression-56EDDG5H.js.map → singleCellGeneExpression-RASZA4NO.js.map} +0 -0
- /package/dist/{singleCellGeneExpression.unit.spec-XSQRWAI3.js.map → singleCellGeneExpression.unit.spec-5MRGH2OO.js.map} +0 -0
- /package/dist/{singleCellPlot-TH77EJZ4.js.map → singleCellPlot-TIYA3GNM.js.map} +0 -0
- /package/dist/{singlecell-7KJMBASC.js.map → singlecell-CFA43TTU.js.map} +0 -0
- /package/dist/{singlecell-3QZQZM32.js.map → singlecell-JS5SIZHY.js.map} +0 -0
- /package/dist/{snp-YXG5O4U4.js.map → snp-VXZXPMKS.js.map} +0 -0
- /package/dist/{snp.unit.spec-O27J7OOK.js.map → snp.unit.spec-TR5TCO7X.js.map} +0 -0
- /package/dist/{snplocus-CQZSC7P6.js.map → snplocus-VLPH5Y65.js.map} +0 -0
- /package/dist/{spliceevent.a53ss.diagram-K5ZDPZE6.js.map → spliceevent.a53ss.diagram-PATK67SH.js.map} +0 -0
- /package/dist/{spliceevent.exonskip.diagram-A2VZ3TTF.js.map → spliceevent.exonskip.diagram-7B3SEOAJ.js.map} +0 -0
- /package/dist/{spliceevent.noeventdiagram-DJDA6ENK.js.map → spliceevent.noeventdiagram-4NPNZUEN.js.map} +0 -0
- /package/dist/{ssGSEA-3FTGRUTC.js.map → ssGSEA-XMW5BLAU.js.map} +0 -0
- /package/dist/{ssGSEA.unit.spec-GF35KBTX.js.map → ssGSEA.unit.spec-ASUWKVUT.js.map} +0 -0
- /package/dist/{summarizeCnvGeneexp-6IDTNOYE.js.map → summarizeCnvGeneexp-KWRFGX32.js.map} +0 -0
- /package/dist/{summarizeGeneexpSurvival-OWLUX2HO.js.map → summarizeGeneexpSurvival-FIPIMEJR.js.map} +0 -0
- /package/dist/{summarizeMutationCnv-BMEN3XNV.js.map → summarizeMutationCnv-IUYRVLZG.js.map} +0 -0
- /package/dist/{summarizeMutationDiagnosis-LW6K6373.js.map → summarizeMutationDiagnosis-ZFJPCABL.js.map} +0 -0
- /package/dist/{summarizeMutationSurvival-E7REF2VY.js.map → summarizeMutationSurvival-HFHYB7DT.js.map} +0 -0
- /package/dist/{summary-MKA7OJKE.js.map → summary-AZUNEZ5I.js.map} +0 -0
- /package/dist/{summary.integration.spec-IV6I6SNJ.js.map → summary.integration.spec-WLBAJL44.js.map} +0 -0
- /package/dist/{summaryInput-NET6SPM4.js.map → summaryInput-NJWVXDXW.js.map} +0 -0
- /package/dist/{sunburst-CO3MXFTJ.js.map → sunburst-PXGF4WM6.js.map} +0 -0
- /package/dist/{survival-QQXTCNDU.js.map → survival-RAU4XCKG.js.map} +0 -0
- /package/dist/{survival-MIPCEBS3.js.map → survival-ZZ4QLZHK.js.map} +0 -0
- /package/dist/{survival.integration.spec-6FH4S3EH.js.map → survival.integration.spec-GBQ5X362.js.map} +0 -0
- /package/dist/{svgraph-YF7BS7TN.js.map → svgraph-7UCFRL6A.js.map} +0 -0
- /package/dist/{svmr-J2JLQGEE.js.map → svmr-DB3RY2ID.js.map} +0 -0
- /package/dist/{table-7YL7I4GH.js.map → table-HJRWWXGM.js.map} +0 -0
- /package/dist/{termCollection-LNEN72IV.js.map → termCollection-AW7M6DTP.js.map} +0 -0
- /package/dist/{termCollection-SOLNYAZ4.js.map → termCollection-WPON7RG3.js.map} +0 -0
- /package/dist/{termCollection.unit.spec-LTX7UVYP.js.map → termCollection.unit.spec-254ESHOE.js.map} +0 -0
- /package/dist/{tk-RZDP2YT5.js.map → tk-SUAFM5YA.js.map} +0 -0
- /package/dist/{tp.ui-T6XXBHHD.js.map → tp.ui-ELEQGSK2.js.map} +0 -0
- /package/dist/{tvs.dt-7APM37Y3.js.map → tvs.dt-DCXY66YY.js.map} +0 -0
- /package/dist/{tvs.dtcnv.categorical-YIPXQSIL.js.map → tvs.dtcnv.categorical-SFQZMYX7.js.map} +0 -0
- /package/dist/{tvs.dtcnv.continuous-ITNZE3SH.js.map → tvs.dtcnv.continuous-AUZNJMC3.js.map} +0 -0
- /package/dist/{tvs.dtfusion-2JIIPDTN.js.map → tvs.dtfusion-5F7MYFHZ.js.map} +0 -0
- /package/dist/{tvs.dtsnvindel-HO2PUFN2.js.map → tvs.dtsnvindel-JJSPL4PH.js.map} +0 -0
- /package/dist/{tvs.dtsv-7KCWSUYO.js.map → tvs.dtsv-DARTSV5H.js.map} +0 -0
- /package/dist/{tvs.samplelst-KKWJQNLW.js.map → tvs.samplelst-HHBIO26C.js.map} +0 -0
- /package/dist/{tvs.termCollection-R2IGRG2U.js.map → tvs.termCollection-KCMALH6B.js.map} +0 -0
- /package/dist/{violin-OTPZQTGA.js.map → violin-C26FW5WK.js.map} +0 -0
- /package/dist/{violin.integration.spec-KESWDSBM.js.map → violin.integration.spec-QQ43XWHQ.js.map} +0 -0
- /package/dist/{violin.interactivity-Q2WALZO3.js.map → violin.interactivity-H2BHC6M4.js.map} +0 -0
- /package/dist/{violin.renderer-WIRIV7QY.js.map → violin.renderer-GSG2I7AV.js.map} +0 -0
- /package/dist/{vocabulary-XXDHHHPJ.js.map → vocabulary-3G525O5V.js.map} +0 -0
|
@@ -1,7 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"version": 3,
|
|
3
|
-
"sources": ["../mass/sessionBtn.js", "../mass/about.ts", "../mass/chat.ts", "../mass/nav.js"],
|
|
4
|
-
"sourcesContent": ["import { getCompInit } from '#rx'\nimport { Menu } from '#dom/menu'\nimport { to_textfile } from '#dom/downloadTextfile'\nimport { dofetch3 } from '#common/dofetch'\nimport { parentCorsMessage } from '#common/embedder-helpers'\nimport { select } from 'd3-selection'\nimport { importPlot } from '#plots/importPlot.js'\n\nclass MassSessionBtn {\n\tstatic type = 'sessionBtn'\n\n\tconstructor() {\n\t\tthis.type = MassSessionBtn.type\n\t\tthis.route = 'termdb'\n\t\tthis.embedderOrigin = window.location.origin\n\t\tthis.hostURL = sessionStorage.getItem('hostURL') || this.embedderOrigin\n\t}\n\n\tasync init(appState) {\n\t\tconst tip = new Menu({ padding: '0px' })\n\t\tconst copytip = new Menu({ padding: '5px' })\n\t\tthis.dom = {\n\t\t\tbutton: this.opts.button,\n\t\t\ttip,\n\t\t\tcopytip\n\t\t}\n\n\t\tthis.dom.button.on('click', event => {\n\t\t\tevent.stopPropagation()\n\t\t\tthis.dom.tip.clear()\n\t\t\tthis.showMenu()\n\t\t})\n\n\t\tthis.dslabel = appState.vocab.dslabel\n\t\tthis.savedSessions = JSON.parse(localStorage.getItem('savedMassSessions') || `{}`)\n\t\tthis.requiredAuth = appState.termdbConfig?.requiredAuth?.find(a => a.route == this.route && a.type == 'jwt')\n\t}\n\n\tasync showMenu() {\n\t\tthis.dom.tip.clear().d.style('padding', 0)\n\t\tthis.dom.tip.d.attr('id', 'sjpp-session-menu')\n\t\tconst gt = `<span style='margin-left: 24px; float: right'>></span>`\n\t\tconst options = [\n\t\t\t{ label: `Open`, title: 'Recover a saved session', callback: this.open },\n\t\t\t{ label: `Save`, title: 'Save the current view', callback: this.save },\n\t\t\t{ label: `Share`, title: 'Share the current view', callback: this.getSessionUrl }\n\t\t]\n\n\t\tif (!this.serverCachedSessions) await this.setServerCachedSessions()\n\t\tif (Object.keys(this.savedSessions).length || Object.keys(this.serverCachedSessions).length) {\n\t\t\toptions.push({ label: `Delete`, title: 'Delete a saved session', callback: this.delete })\n\t\t}\n\n\t\tthis.dom.tip\n\t\t\t.clear()\n\t\t\t.d.selectAll('.sja_menuoption sja_sharp_border')\n\t\t\t.data(options)\n\t\t\t.enter()\n\t\t\t.append('div')\n\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t.attr('data-testid', d => `sjpp-session-btn-${d.label.toLowerCase().replace(/\\s/g, '-')}`)\n\t\t\t.attr('aria-label', d => d.title)\n\t\t\t.html(d => d.label)\n\t\t\t.on('click', (event, d) => {\n\t\t\t\tthis.dom.tip.clear().d.style('padding', '10px')\n\t\t\t\tevent.stopPropagation()\n\t\t\t\tthis.showBackBtn()\n\t\t\t\td.callback.call(this)\n\t\t\t})\n\n\t\tthis.dom.tip.showunder(this.dom.button.node())\n\t}\n\n\tasync open() {\n\t\tconst radioName = `sjpp-session-open-radio-` + Math.random().toString().slice(-6)\n\t\t// always open in the current tab for now, to avoid the tricky part of the code\n\t\t// that involves parent-child window messaging\n\t\t// TODO: re-enable when the new tab option works reliably\n\t\tthis.dom.tip.d.append('div').style('display', 'none').style('padding', '3px 9px').html(`\n\t\t\t<b>Open in</b>\n\t\t\t<label>\n\t\t\t\t<input type='radio' name='${radioName}' value='new' style='margin-right: 0; vertical-align: bottom'/>\n\t\t\t\t<span>a new tab</span>\n\t\t\t</label>\n\t\t\t<label style='margin-left: 5px'>\n\t\t\t\t<input type='radio' name='${radioName}' value='current' checked=checked style='margin-right: 0; vertical-align: bottom'/>\n\t\t\t\t<span>current tab</span>\n\t\t\t</label>\n\t\t`)\n\n\t\tconst t = await this.listSessions({\n\t\t\ttrClickHandler: async (event, d) => {\n\t\t\t\tconst { loc, id } = d\n\t\t\t\tif (!id) return\n\t\t\t\tif (loc.includes('browser')) {\n\t\t\t\t\tthis.sessionName = id\n\t\t\t\t\tconst state = structuredClone(this.savedSessions[id])\n\t\t\t\t\tawait preprocessState(state, this.app)\n\t\t\t\t\tconst targetWindow = this.dom.tip.d.node().querySelector(`[name=\"${radioName}\"]:checked`).value\n\t\t\t\t\tif (targetWindow == 'current') {\n\t\t\t\t\t\tthis.app.dispatch({ type: 'app_refresh', state })\n\t\t\t\t\t} else if (window.location.origin == this.hostURL) {\n\t\t\t\t\t\twindow.open(`/?mass-session-id=${id}&src=browser`)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tif (state.embedder) parentCorsMessage({ state })\n\t\t\t\t\t\telse {\n\t\t\t\t\t\t\tconst { protocol, host, search, origin, href } = window.location\n\t\t\t\t\t\t\tconst embedder = { protocol, host, search, origin, href }\n\t\t\t\t\t\t\tparentCorsMessage({ state: Object.assign({ embedder }, state) })\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.dom.tip.hide()\n\t\t\t\t} else if (loc == 'server') {\n\t\t\t\t\tconst headers = await this.app.vocabApi.mayGetAuthHeaders(this.route)\n\t\t\t\t\tconst body = { id, route: this.route, dslabel: this.dslabel, embedder: window.location.hostname }\n\t\t\t\t\tconst res = await dofetch3(`/massSession?`, { headers, body })\n\t\t\t\t\tif (!res.state) throw res.error || 'unable to get the cached session from the server'\n\t\t\t\t\tawait preprocessState(res.state, this.app)\n\t\t\t\t\tthis.savedSessions[id] = res.state\n\n\t\t\t\t\tconst targetWindow = this.dom.tip.d.node().querySelector(`[name=\"${radioName}\"]:checked`).value\n\t\t\t\t\tif (targetWindow == 'current') {\n\t\t\t\t\t\tthis.app.dispatch({ type: 'app_refresh', state: res.state })\n\t\t\t\t\t} else if (window.location.origin == this.hostURL) {\n\t\t\t\t\t\twindow.open(`/?mass-session-id=${id}&src=cred&dslabel=${this.dslabel}&route=${this.route}`)\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// server-cached sessions should have an state.embedder object, no need to check\n\t\t\t\t\t\tparentCorsMessage(res)\n\t\t\t\t\t}\n\t\t\t\t\tthis.dom.tip.hide()\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tt.headtr.select('th').html('Open from')\n\n\t\t// open session from a local file\n\t\tconst tr1 = t.tbody.insert('tr', 'tr')\n\t\ttr1.append('td').style('text-align', 'center').style('padding', '3px 9px').html('Local file')\n\t\tconst label = tr1.append('td').style('text-align', 'left').append('label')\n\t\tlabel\n\t\t\t.append('span')\n\t\t\t.style('padding', '3px 9px')\n\t\t\t.style('text-decoration', 'underline')\n\t\t\t.style('cursor', 'pointer')\n\t\t\t.html('Choose File')\n\t\tlabel\n\t\t\t.append('input')\n\t\t\t.attr('type', 'file')\n\t\t\t.attr('placeholder', 'file name')\n\t\t\t.style('opacity', 0)\n\t\t\t.style('width', '0.1px')\n\t\t\t.style('height', '0.1px')\n\t\t\t.style('position', 'absolute')\n\t\t\t.on('change', async () => {\n\t\t\t\tconst file = event.target.files.item(0)\n\t\t\t\tconst json = await file.text()\n\t\t\t\tlet sessionName = file.name\n\t\t\t\tif (this.savedSessions[sessionName]) {\n\t\t\t\t\tsessionName = prompt(\n\t\t\t\t\t\t`Leave as-is to overwrite a session with the same name, or enter a different session name.`,\n\t\t\t\t\t\tsessionName\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tthis.sessionName = sessionName\n\t\t\t\tconst state = JSON.parse(json)\n\t\t\t\tawait preprocessState(state, this.app)\n\t\t\t\tthis.savedSessions[sessionName] = state\n\t\t\t\tlocalStorage.setItem('savedMassSessions', JSON.stringify(this.savedSessions))\n\t\t\t\tconst targetWindow = this.dom.tip.d.node().querySelector(`[name=\"${radioName}\"]:checked`).value\n\t\t\t\tif (targetWindow == 'current') {\n\t\t\t\t\tthis.app.dispatch({ type: 'app_refresh', state })\n\t\t\t\t} else if (window.location.origin == this.hostURL) {\n\t\t\t\t\twindow.open(`/?mass-session-id=${sessionName}&src=browser`)\n\t\t\t\t} else {\n\t\t\t\t\tif (state.embedder) parentCorsMessage({ state })\n\t\t\t\t\telse {\n\t\t\t\t\t\tconst { protocol, host, search, origin, href } = window.location\n\t\t\t\t\t\tconst embedder = { protocol, host, search, origin, href }\n\t\t\t\t\t\tparentCorsMessage({ state: Object.assign({ embedder }, state) })\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tthis.dom.tip.hide()\n\t\t\t})\n\t}\n\n\tasync listSessions(opts = {}) {\n\t\tconst table = this.dom.tip.d.append('table').attr('class', 'sjpp-controls-table')\n\n\t\tconst headtr = table.append('thead').append('tr')\n\t\theadtr\n\t\t\t.selectAll('th')\n\t\t\t.data(['Cache Location', 'Session ID'])\n\t\t\t.enter()\n\t\t\t.append('th')\n\t\t\t.style('text-align', (d, i) => (i === 0 ? 'center' : 'left'))\n\t\t\t.style('padding', '3px 9px')\n\t\t\t.html(d => d)\n\n\t\tconst sessionIds = Object.keys(this.savedSessions).map(id => ({ loc: 'browser', id }))\n\t\tif (!this.serverCachedSessions) await this.setServerCachedSessions()\n\t\tsessionIds.push(...this.serverCachedSessions.map(id => ({ loc: 'server', id })))\n\n\t\tconst tbody = table.append('tbody')\n\t\tconst trs = tbody\n\t\t\t.selectAll('tr')\n\t\t\t.data(sessionIds)\n\t\t\t.enter()\n\t\t\t.append('tr')\n\t\t\t.on('click', opts.trClickHandler || null)\n\n\t\ttrs\n\t\t\t.selectAll('td')\n\t\t\t.data(d => [d, d])\n\t\t\t.enter()\n\t\t\t.append('td')\n\t\t\t.style('text-align', (d, i) => (i === 0 ? 'center' : 'left'))\n\t\t\t.style('padding', '3px 9px')\n\t\t\t.style('cursor', 'pointer')\n\t\t\t.html((d, i) => (i === 0 ? d.loc : d.id))\n\n\t\tif (!this.serverCachedSessions.length && this.requiredAuth && !this.app.vocabApi.hasVerifiedToken()) {\n\t\t\tconst tbody2 = table\n\t\t\t\t.append('tbody')\n\t\t\t\t.append('tr')\n\t\t\t\t.selectAll('td')\n\t\t\t\t.data(['server', 'requires sign-in'])\n\t\t\t\t.enter()\n\t\t\t\t.append('td')\n\t\t\t\t.style('text-align', (d, i) => (i === 0 ? 'center' : 'left'))\n\t\t\t\t.style('padding', '3px 9px')\n\t\t\t\t.html(d => d)\n\t\t}\n\t\treturn { table, headtr, tbody, trs }\n\t}\n\n\tasync setServerCachedSessions() {\n\t\tconst state = this.app.getState()\n\t\tthis.requiredAuth = state.termdbConfig?.requiredAuth?.find(a => a.route == this.route && a.type == 'jwt')\n\t\tif (!this.requiredAuth) {\n\t\t\tthis.serverCachedSessions = []\n\t\t\treturn\n\t\t}\n\t\tconst headers = this.app.vocabApi.mayGetAuthHeaders(this.route)\n\t\tconst body = { route: this.route, dslabel: this.dslabel, embedder: window.location.hostname }\n\t\tconst res = await dofetch3('/sessionIds', { headers, body })\n\t\tthis.serverCachedSessions = res.sessionIds || []\n\t}\n\n\tasync save(d) {\n\t\tconst div = this.dom.tip.d\n\t\tconst inputDiv = div.append('div')\n\t\tinputDiv.append('span').html('Save as')\n\t\tconst sessionNames = Object.keys(this.savedSessions)\n\t\tif (!this.serverCachedSessions) await this.setServerCachedSessions()\n\t\tsessionNames.push(...this.serverCachedSessions.filter(d => !sessionNames.includes(d)))\n\t\tconst placeholder = this.sessionName || 'unnamed-session'\n\t\tconst input = inputDiv\n\t\t\t.append('input')\n\t\t\t.attr('type', 'text')\n\t\t\t.attr('placeholder', placeholder)\n\t\t\t.style('width', '220px')\n\t\t\t.on('input', () => {\n\t\t\t\tsearchResultDiv.selectAll('*').remove()\n\t\t\t\tconst value = input.property('value')\n\t\t\t\tconst exactMatch = sessionNames.filter(s => s === value)\n\t\t\t\tconst startsWith = sessionNames.filter(s => s.startsWith(value))\n\t\t\t\tconst includes = sessionNames.filter(s => s.includes(value) && s !== value && !startsWith.includes(s))\n\t\t\t\tsearchResultDiv\n\t\t\t\t\t.selectAll('div')\n\t\t\t\t\t.data([...exactMatch, ...startsWith, ...includes])\n\t\t\t\t\t.enter()\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t.attr('data-testid', `sjpp-save-session-option`)\n\t\t\t\t\t.html(d => d)\n\t\t\t\t\t.on('click', (event, d) => {\n\t\t\t\t\t\tinput.property('value', d)\n\t\t\t\t\t\tsearchResultDiv.selectAll('*').remove()\n\t\t\t\t\t})\n\t\t\t})\n\n\t\tconst searchResultDiv = div.append('div')\n\t\tconst submitDiv = div.append('div')\n\t\tsubmitDiv.append('span').html('Save to ')\n\t\tsubmitDiv\n\t\t\t.append('button')\n\t\t\t.style('min-width', '80px')\n\t\t\t.html('Browser')\n\t\t\t.attr(\n\t\t\t\t'title',\n\t\t\t\t`Save the session in your current browser's cache. The session can be easily recovered, but not shared among your other devices`\n\t\t\t)\n\t\t\t.on('click', () => {\n\t\t\t\tthis.sessionName = input.property('value') || placeholder\n\t\t\t\tthis.savedSessions[this.sessionName] = this.app.getState()\n\t\t\t\tlocalStorage.setItem('savedMassSessions', JSON.stringify(this.savedSessions))\n\t\t\t\tthis.confirmAction(`Cached '<b>${this.sessionName}</b>' in browser`)\n\t\t\t})\n\n\t\tsubmitDiv\n\t\t\t.append('button')\n\t\t\t.style('min-width', '80px')\n\t\t\t.html('File')\n\t\t\t.attr(\n\t\t\t\t'title',\n\t\t\t\t`Save the session into a local file. The session can be easily recoved using the 'Open from local file' option.`\n\t\t\t)\n\t\t\t.on('click', () => {\n\t\t\t\tconst name = input.property('value') || placeholder\n\t\t\t\tthis.savedSessions[name] = this.app.getState()\n\t\t\t\tthis.download(name)\n\t\t\t\tthis.confirmAction(`Downloaded '<b>${name}</b>'`)\n\t\t\t})\n\n\t\t// assume that a jwt-type credential will include the user email in the jwt payload,\n\t\t// which could be trusted for saving sessions under cachedir/termdbSessions/[embedderHostName]/[email]\n\t\tif (this.requiredAuth) {\n\t\t\tconst requiresSignIn = this.app.vocabApi.hasVerifiedToken() ? '' : 'Requires sign-in. '\n\t\t\tsubmitDiv\n\t\t\t\t.append('button')\n\t\t\t\t.style('min-width', '80px')\n\t\t\t\t.html('Server')\n\t\t\t\t.attr(\n\t\t\t\t\t'title',\n\t\t\t\t\t`${requiresSignIn}Save the session into a remote server. The session can be easily shared across your different devices and recovered using the 'Open from server' option.`\n\t\t\t\t)\n\t\t\t\t.property('disabled', !this.app.vocabApi.hasVerifiedToken())\n\t\t\t\t.on('click', async () => {\n\t\t\t\t\tif (!this.app.vocabApi.hasVerifiedToken()) {\n\t\t\t\t\t\talert('Requires sign-in')\n\t\t\t\t\t\treturn\n\t\t\t\t\t}\n\t\t\t\t\tconst name = input.property('value') || placeholder\n\t\t\t\t\tthis.savedSessions[name] = this.app.getState()\n\t\t\t\t\tconst res = await this.getSessionUrl(name)\n\t\t\t\t\tif (res.id != name) throw `error saving ${name}`\n\t\t\t\t\t// this.download(name)\n\t\t\t\t\tthis.confirmAction(`Saved '<b>${name}</b>' on the server`)\n\t\t\t\t})\n\t\t}\n\t}\n\n\tdownload(name = '') {\n\t\tconst sessionName = name || this.sessionName\n\t\tconst ext = sessionName?.endsWith('.txt') ? '' : '.txt'\n\t\tconst filename = `${sessionName}${ext}`\n\t\tto_textfile(filename, JSON.stringify(this.savedSessions[sessionName]))\n\t}\n\n\tasync getSessionUrl(filename = '') {\n\t\tconst headers = await this.app.vocabApi.mayGetAuthHeaders('termdb')\n\t\tconst state = structuredClone(this.app.getState())\n\t\tconst { protocol, host, search, origin, href } = window.location\n\t\tstate.embedder = { protocol, host, search, origin, href }\n\t\tif (filename) {\n\t\t\t// a non-empty filename value implies saving by email and having auth session,\n\t\t\t// since it's easy for different users to use the same non-random filename\n\t\t\tstate.__sessionFor__ = {\n\t\t\t\troute: this.route,\n\t\t\t\tfilename,\n\t\t\t\tdslabel: this.dslabel,\n\t\t\t\tembedder: window.location.hostname\n\t\t\t}\n\t\t}\n\t\tconst res = await dofetch3('/massSession', {\n\t\t\theaders,\n\t\t\tmethod: 'POST',\n\t\t\tbody: JSON.stringify(state)\n\t\t})\n\n\t\tif (filename) {\n\t\t\treturn res\n\t\t} else {\n\t\t\tconst url = `${this.hostURL}/?mass-session-id=${res.id}&noheader=1`\n\t\t\tthis.dom.tip.showunder(this.dom.button.node())\n\t\t\tconst linkDiv = this.dom.tip.d.append('div').style('margin', '10px')\n\t\t\tlinkDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'flex')\n\t\t\t\t.style('margin-bottom', '12px')\n\t\t\t\t.html(`Open or copy the session link.`)\n\n\t\t\tconst a = linkDiv.append('a').style('display', 'none').attr('href', url).attr('target', '_blank').html(res.id)\n\n\t\t\t// open button\n\t\t\tlinkDiv\n\t\t\t\t.append('button')\n\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t.text('Open link')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\ta.node().click()\n\t\t\t\t})\n\n\t\t\t// copy button\n\t\t\tlinkDiv\n\t\t\t\t.append('button')\n\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t.style('margin-left', '10px')\n\t\t\t\t.text('Copy link')\n\t\t\t\t.on('click', async event => {\n\t\t\t\t\tawait navigator.clipboard.writeText(url)\n\t\t\t\t\tthis.dom.copytip.clear().showunder(event.target)\n\t\t\t\t\tthis.dom.copytip.d.append('div').html('✓')\n\t\t\t\t\tsetTimeout(() => {\n\t\t\t\t\t\tthis.dom.copytip.hide()\n\t\t\t\t\t}, 1000)\n\t\t\t\t})\n\n\t\t\tif (this.hostURL != window.location.origin) {\n\t\t\t\t// Avoid the multi-window/tab sequence to recover the session:\n\t\t\t\t// intercept the click on the URL link, so that the embedder URL is opened\n\t\t\t\t// instead of the hostURL with mass session id, and this window will post\n\t\t\t\t// a message to the child window with the link data instead\n\t\t\t\t//\n\t\t\t\t// NOTE: the multi-window/tab sequence is only necessary when the URL link\n\t\t\t\t// was not opened by the embedder window\n\t\t\t\t//\n\t\t\t\ta.on('click', event => {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\tparentCorsMessage({ state }, 'noredirect')\n\t\t\t\t\treturn false\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tlinkDiv.append('div').html(`\n\t\t\t\t\t<br>\n\t\t\t\t\t<div style=\"max-width: 400px; font-size: 1em; opacity:.6\">\n\t\t\t\t\t<span>NOTES</span>\n\t\t\t\t\t<ul>\n\t\t\t\t\t<li>A recovered session may hide data or views to users that are not authorized to access the saved datasets or features.</li>\n\t\t\t\t\t<li>This session will be saved for ${this.opts.massSessionDuration} days.</li>\n\t\t\t\t\t</ul>\n\t\t\t\t\t</div>`)\n\t\t\tsetTimeout(() => {\n\t\t\t\tthis.dom.button.property('disabled', false)\n\t\t\t}, 1000)\n\t\t}\n\t}\n\n\tasync delete() {\n\t\tconst t = await this.listSessions({\n\t\t\ttrClickHandler: function (event) {\n\t\t\t\tconst input = this.lastChild.querySelector('input')\n\t\t\t\tconst checked = event.target == input ? input.checked : !input.checked\n\t\t\t\tselect(this).style('text-decoration', checked ? 'line-through' : '')\n\t\t\t\tif (event.target != input) input.checked = checked\n\t\t\t\tconst checkedRows = t.table.node().querySelectorAll('input:checked')\n\t\t\t\tsubmitBtn.property('disabled', checkedRows.length ? false : true)\n\t\t\t}\n\t\t})\n\n\t\t// add a 3rd column for the checkboxes\n\t\tt.headtr.append('th').html('Delete')\n\t\tt.trs.each(function (d) {\n\t\t\tselect(this)\n\t\t\t\t.append('td')\n\t\t\t\t.style('text-align', 'center')\n\t\t\t\t.append('input')\n\t\t\t\t.attr('type', 'checkbox')\n\t\t\t\t.attr('value', d.id)\n\t\t})\n\n\t\tconst submitBtn = this.dom.tip.d\n\t\t\t.append('div')\n\t\t\t.style('text-align', 'center')\n\t\t\t.append('button')\n\t\t\t.html('Delete selected sessions')\n\t\t\t.property('disabled', true)\n\t\t\t.on('click', async () => {\n\t\t\t\tconst inputs = t.table.node().querySelectorAll('input')\n\t\t\t\tconst sessionIdsDeletedFromServer = []\n\t\t\t\tfor (const input of inputs) {\n\t\t\t\t\tif (select(input).property('checked')) {\n\t\t\t\t\t\tconst d = input.parentNode.parentNode.__data__\n\t\t\t\t\t\tif (d.loc == 'browser') {\n\t\t\t\t\t\t\tdelete this.savedSessions[input.value] //checkedIds.push(input.value)\n\t\t\t\t\t\t} else if (d.loc == 'server') {\n\t\t\t\t\t\t\tdelete this.serverCachedSessions[input.value]\n\t\t\t\t\t\t\tsessionIdsDeletedFromServer.push(input.value)\n\t\t\t\t\t\t} else throw `unknown cache location=${d.loc}`\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tlocalStorage.setItem('savedMassSessions', JSON.stringify(this.savedSessions))\n\t\t\t\ttry {\n\t\t\t\t\tconst headers = await this.app.vocabApi.mayGetAuthHeaders('termdb')\n\t\t\t\t\tconst body = {\n\t\t\t\t\t\tids: sessionIdsDeletedFromServer,\n\t\t\t\t\t\troute: this.route,\n\t\t\t\t\t\tdslabel: this.dslabel,\n\t\t\t\t\t\tembedder: window.location.hostname\n\t\t\t\t\t}\n\t\t\t\t\tconst res = dofetch3(`/massSession?`, { method: 'DELETE', headers, body })\n\t\t\t\t} catch (e) {\n\t\t\t\t\tthrow e\n\t\t\t\t}\n\t\t\t\tthis.dom.tip.hide()\n\t\t\t})\n\t}\n\n\tshowBackBtn() {\n\t\tthis.dom.tip.d\n\t\t\t.append('div')\n\t\t\t.attr('class', 'sja_clbtext2')\n\t\t\t.style('margin-bottom', '10px')\n\t\t\t.style('cursor', 'pointer')\n\t\t\t.html(`< Session Menu`)\n\t\t\t.on('click', () => this.showMenu())\n\t}\n\n\tconfirmAction(html) {\n\t\tthis.dom.tip.clear().d.append('div').html(html).transition().delay(3000).duration(1000).style('opacity', 0)\n\n\t\tsetTimeout(() => {\n\t\t\tthis.dom.tip.hide()\n\t\t}, 3500)\n\t}\n}\n\n// may need to edit state based on updated expectations,\n// such as new or deprecated plot settings keys/values\nasync function preprocessState(state, app) {\n\tdelete state.termdbConfig\n\tif (state.plots) {\n\t\tconst promises = []\n\t\tfor (const plot of state.plots) {\n\t\t\tpromises.push(\n\t\t\t\t(async () => {\n\t\t\t\t\tconst _ = await importPlot(plot.chartType)\n\t\t\t\t\treturn await _.getPlotConfig(plot, app)\n\t\t\t\t})()\n\t\t\t)\n\t\t}\n\t\ttry {\n\t\t\tawait Promise.all(promises)\n\t\t} catch (e) {\n\t\t\tconsole.log(e)\n\t\t\tapp.printError(e)\n\t\t}\n\t}\n}\n\nexport const sessionBtnInit = getCompInit(MassSessionBtn)\n", "import { getId } from './nav'\nimport { type AppApi, getCompInit } from '#rx'\nimport type { Elem, Div, H2 } from '../types/d3'\nimport type { SelectCohortEntry } from '#types'\nimport { renderTable, type TableRow } from '#dom'\nimport { select } from 'd3-selection'\n\n/* \n\"about\" tab will display following contents inside this.subheader:\n- if ds uses subcohorts:\n\t- <h2> for selectCohort.title\n\t- description\n\t- radio button options\n- custom html via massNav.about.html (todo images and cartoon)\n- active items to launch demo plots\n- server info\n*/\n\nconst cohortTableActiveColor = 'yellow'\n\n// this type is fully defined in MassNav def in dataset.ts but not in a form that can extract \"about\" config to share. thus need to repeat here to avoid tsc err\ntype AboutObj = {\n\thtml: string\n\tactiveItems?: { items: any }\n\tdisclaimer?: any\n}\n\ntype MassAboutOpts = {\n\t/** Optional. Set in the dataset file under .massNav.tabs.about. Otherwise null. */\n\taboutOverrides: AboutObj | null\n\t/** Required. Provided from nav component */\n\tapp: AppApi\n\t/** Required. Provided from nav component */\n\tinstanceNum: number\n\t/** Optional. Set in the dataset file under .termdb.selectCohort. Otherwise null. */\n\tselectCohort: SelectCohortEntry | null\n\t/** Required. .dom.subheader.about in nav component, assigned to this.subheader */\n\tsubheader: Elem\n}\n\ntype MassAboutDom = {\n\t/** Fine print dom shown between the cohort specific content and the server info */\n\tcohortAsterisk?: Div\n\t/** Displays description */\n\tcohortDescription: Div\n\t/** Div for cohort radio buttons */\n\tcohortOpts?: Div\n\t/** Text above radio cohort options */\n\tcohortPrompt?: Div\n\t/** */\n\tcohortTable?: Div\n\t/** Title above the cohort introduction/content */\n\tcohortTitle?: H2\n}\n//TODO: Make a validate opts fn\nexport class MassAbout {\n\tstatic type = 'about'\n\n\taboutOverrides: AboutObj | null\n\tapp: AppApi\n\tdom: MassAboutDom\n\tinstanceNum: number\n\tselectCohort: SelectCohortEntry | null\n\tsubheader: Elem // where all contents are rendered\n\ttype: string\n\topts: MassAboutOpts\n\tstate: any\n\n\tconstructor(opts: MassAboutOpts) {\n\t\tthis.opts = opts\n\t\tthis.type = MassAbout.type\n\t\tthis.app = opts.app\n\t\tthis.subheader = opts.subheader\n\t\tthis.instanceNum = opts.instanceNum\n\t\tthis.aboutOverrides = opts.aboutOverrides\n\t\tthis.selectCohort = opts.selectCohort\n\t\tthis.dom = {\n\t\t\tcohortDescription: this.subheader\n\t\t\t\t.append('div')\n\t\t\t\t.attr('data-testid', 'sjpp-about-cohort-desc')\n\t\t\t\t.style('margin-left', '10px')\n\t\t}\n\n\t\tif (opts?.selectCohort?.title) {\n\t\t\tthis.dom.cohortTitle = opts.subheader\n\t\t\t\t.append('h2')\n\t\t\t\t.attr('data-testid', 'sjpp-about-cohort-title')\n\t\t\t\t.style('margin-left', '10px')\n\t\t\t\t.text(opts.selectCohort.title)\n\t\t}\n\n\t\tif (opts.selectCohort?.prompt) {\n\t\t\tthis.dom.cohortPrompt = this.subheader\n\t\t\t\t.append('div')\n\t\t\t\t.attr('data-testid', 'sjpp-about-cohort-prompt')\n\t\t\t\t.style('margin-left', '10px')\n\t\t\t\t.style('padding-top', '30px')\n\t\t\t\t.style('padding-bottom', '10px')\n\t\t\t\t.style('font-weight', 'bold')\n\t\t\t\t.style('font-size', '1.2em')\n\t\t\t\t.text(opts.selectCohort.prompt)\n\t\t}\n\n\t\tif (opts.selectCohort) {\n\t\t\tthis.dom.cohortOpts = this.subheader.append('div').style('margin-bottom', '30px').style('margin-left', '10px')\n\t\t}\n\t}\n\n\t/* render all contents into this.subheader\n\tdo it through init() means that contents are rendered just once on launching mass ui and won't be rerendered or updated\n\tsince there's no reason to update about tab contents while user is interacting with mass ui\n\t*/\n\tinit(appState) {\n\t\t/** If selectCohort available, options in the about html will not show */\n\t\tthis.initCohort(appState)\n\t\tthis.initCustomHtml()\n\t\tthis.initActiveItems()\n\t\tthis.initDisclaimer()\n\t\t//Always show the release version and server launch date at the bottom\n\t\tthis.showServerInfo()\n\t}\n\n\tasync main() {\n\t\t// do not render unless the cohort tab is active\n\t\tif (this.state.nav.activeTab !== 0) return\n\t\tawait this.renderCohortsTable()\n\t\tif (this.opts.selectCohort) {\n\t\t\tif (this.opts.selectCohort.description) {\n\t\t\t\tthis.dom.cohortDescription.html(this.opts.selectCohort.description)\n\t\t\t} else if (this.opts.selectCohort.descriptionByCohort) {\n\t\t\t\tthis.dom.cohortDescription.html(\n\t\t\t\t\tthis.opts.selectCohort.descriptionByCohort[\n\t\t\t\t\t\tthis.state.termdbConfig.selectCohort.values[this.state.activeCohort].keys.join(',')\n\t\t\t\t\t]\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t}\n\n\tinitCohort = appState => {\n\t\tif (this.selectCohort == null) return\n\t\t//Move to validate opts fn\n\t\tif (!this.selectCohort.values) return\n\n\t\tconst instanceNum = this.instanceNum\n\t\tconst activeCohort = appState.activeCohort\n\t\tconst app = this.app\n\n\t\t//TODO: replace with make_radios\n\t\tthis.dom\n\t\t\t.cohortOpts!.append('table')\n\t\t\t.attr('data-testid', 'sjpp-about-cohort-options-table')\n\t\t\t.selectAll('tr')\n\t\t\t.data(this.selectCohort.values)\n\t\t\t.enter()\n\t\t\t.append('tr')\n\t\t\t.each(function (d, i, nodes) {\n\t\t\t\tconst tr = select(nodes[i])\n\t\t\t\tconst td0 = tr.append('td')\n\t\t\t\tconst radioName = 'sja-termdb-cohort-' + instanceNum\n\t\t\t\tconst radioId = radioName + '-' + i\n\t\t\t\ttd0\n\t\t\t\t\t.append('input')\n\t\t\t\t\t.style('scale', '1.2')\n\t\t\t\t\t.attr('type', 'radio')\n\t\t\t\t\t.attr('name', radioName)\n\t\t\t\t\t.attr('id', radioId)\n\t\t\t\t\t.attr('value', i)\n\t\t\t\t\t.property('checked', i === activeCohort)\n\t\t\t\t\t.style('margin-right', '5px')\n\t\t\t\t\t.style('margin-left', '0px')\n\t\t\t\t\t.on('click', async event => {\n\t\t\t\t\t\tconst state = app.getState()\n\t\t\t\t\t\tconst clearOnChange = state.termdbConfig.selectCohort.clearOnChange\n\t\t\t\t\t\tif (clearOnChange) {\n\t\t\t\t\t\t\tconst subactions: any[] = []\n\t\t\t\t\t\t\tconst toBeCleared: string[] = []\n\t\t\t\t\t\t\tconst plots = state.plots\n\t\t\t\t\t\t\tconst filter = state.termfilter.filter.lst.find(f => f.tag == 'filterUiRoot')?.lst\n\t\t\t\t\t\t\tconst groups = state.groups\n\n\t\t\t\t\t\t\tif (clearOnChange.plots && plots?.length) toBeCleared.push('plots')\n\t\t\t\t\t\t\tfor (const plot of plots) {\n\t\t\t\t\t\t\t\tsubactions.push({\n\t\t\t\t\t\t\t\t\ttype: 'plot_delete',\n\t\t\t\t\t\t\t\t\tid: plot.id\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (clearOnChange.filter && filter?.length) toBeCleared.push('filters')\n\t\t\t\t\t\t\tsubactions.push({\n\t\t\t\t\t\t\t\ttype: 'filter_replace',\n\t\t\t\t\t\t\t\tfilter: {\n\t\t\t\t\t\t\t\t\ttype: 'tvslst',\n\t\t\t\t\t\t\t\t\tin: true,\n\t\t\t\t\t\t\t\t\tjoin: '',\n\t\t\t\t\t\t\t\t\ttag: 'filterUiRoot',\n\t\t\t\t\t\t\t\t\tlst: []\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tif (clearOnChange.groups && groups?.length) {\n\t\t\t\t\t\t\t\ttoBeCleared.push('groups')\n\t\t\t\t\t\t\t\tfor (const group of groups) {\n\t\t\t\t\t\t\t\t\tsubactions.push({\n\t\t\t\t\t\t\t\t\t\ttype: 'delete_group',\n\t\t\t\t\t\t\t\t\t\tname: group.name\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tfor (const term of state.customTerms) {\n\t\t\t\t\t\t\t\t\tsubactions.push({\n\t\t\t\t\t\t\t\t\t\ttype: 'delete_customTerm',\n\t\t\t\t\t\t\t\t\t\tname: term.name\n\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tsubactions.push({ type: 'cohort_set', activeCohort: i })\n\t\t\t\t\t\t\tif (toBeCleared.length) {\n\t\t\t\t\t\t\t\tconst confirm = window.confirm(\n\t\t\t\t\t\t\t\t\t`Changing the cohort will clear all ${joinByComma(\n\t\t\t\t\t\t\t\t\t\ttoBeCleared\n\t\t\t\t\t\t\t\t\t)}. To proceed, click \"OK\". To save the session, click \"Cancel\" and then click the \"Session\" button at the top of the page.`\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tif (!confirm) {\n\t\t\t\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tapp.dispatch({\n\t\t\t\t\t\t\t\ttype: 'app_refresh',\n\t\t\t\t\t\t\t\tsubactions\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t} else app.dispatch({ type: 'cohort_set', activeCohort: i })\n\t\t\t\t\t})\n\n\t\t\t\ttd0\n\t\t\t\t\t.append('label')\n\t\t\t\t\t.style('font-size', '1.4em')\n\t\t\t\t\t.attr('for', radioId)\n\t\t\t\t\t.attr('colspan', 2)\n\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t\t.html((d: any) => d.label)\n\n\t\t\t\ttr.selectAll('td')\n\t\t\t\t\t.style('max-width', '600px')\n\t\t\t\t\t.style('padding-bottom', '10px')\n\t\t\t\t\t.style('padding-right', '20px')\n\t\t\t\t\t.style('vertical-align', 'top')\n\t\t\t})\n\n\t\tthis.dom.cohortTable = this.subheader\n\t\t\t.append('div')\n\t\t\t.attr('data-testid', 'sjpp-about-cohort-table')\n\t\t\t.style('margin-left', '12px')\n\n\t\tif (this.selectCohort.asterisk) {\n\t\t\tthis.dom.cohortAsterisk = this.subheader\n\t\t\t\t.append('div')\n\t\t\t\t.attr('data-testid', 'sjpp-about-cohort-asterisk')\n\t\t\t\t.style('margin', '10px')\n\t\t\t\t.style('font-size', '.8em')\n\t\t\t\t.text(this.selectCohort.asterisk)\n\t\t}\n\t}\n\n\trenderCohortsTable = async () => {\n\t\tif (!this.dom.cohortTable) return\n\t\tthis.dom.cohortTable.selectAll('*').remove()\n\t\tconst columns = [{ label: 'Feature' }]\n\t\tconst rows: TableRow[] = []\n\t\tconst result = await this.app.vocabApi.getCohortsData()\n\t\tif ('error' in result) throw result.error\n\t\tif (this.selectCohort?.values) {\n\t\t\t// selectCohort.values[] contains ordered set of cohorts\n\t\t\t// ensure cohorts in cohorts table follow this order\n\t\t\tconst values = this.selectCohort.values\n\t\t\tresult.cohorts.sort((a, b) => {\n\t\t\t\tconst aIndex = values.findIndex(v => v.keys.toString() == a.cohort)\n\t\t\t\tconst bIndex = values.findIndex(v => v.keys.toString() == b.cohort)\n\t\t\t\tif (aIndex < bIndex) return -1\n\t\t\t\tif (aIndex > bIndex) return 1\n\t\t\t\treturn 0\n\t\t\t})\n\t\t}\n\t\tif (!result.cfeatures.length) return\n\t\tfor (const feature of result.features) rows.push([{ value: feature.name }])\n\t\tfor (const cohort of result.cohorts) {\n\t\t\tif (cohort.subcohorts?.length) continue\n\t\t\tcolumns.push({ label: cohort.name })\n\t\t\tfor (const [i, feature] of result.features.entries()) {\n\t\t\t\tconst cf = result.cfeatures.find(cf => cf.idfeature === feature.idfeature && cf.cohort === cohort.cohort)\n\t\t\t\tif (cf) rows[i].push({ value: cf.value })\n\t\t\t}\n\t\t}\n\n\t\trenderTable({\n\t\t\trows,\n\t\t\tcolumns,\n\t\t\tdiv: this.dom.cohortTable,\n\t\t\tshowLines: false,\n\t\t\tmaxHeight: '60vh',\n\t\t\theader: { style: { 'font-size': '1.2em', 'font-weight': 'bold' } }\n\t\t})\n\n\t\tthis.dom.cohortTable.select('table').style('border-collapse', 'collapse')\n\t\tthis.dom.cohortTable.selectAll(`tbody > tr > td`).style('background-color', 'transparent').style('padding', '6px')\n\t\tconst state = this.app.getState()\n\t\tconst selectCohort = state.termdbConfig.selectCohort\n\t\tconst activeCohort = state.activeCohort\n\t\tconst keys = selectCohort.values[activeCohort].keys\n\t\tlet selector = `tbody > tr > td:nth-child(${activeCohort + 2})`\n\t\tconst combined = keys.length > 1\n\t\tif (combined) {\n\t\t\tselector = ''\n\t\t\tfor (const key of keys) {\n\t\t\t\tconst i = result.cohorts.map(c => c.cohort).indexOf(key)\n\t\t\t\tif (selector !== '') selector += ','\n\t\t\t\tselector += `tbody > tr > td:nth-child(${i + 2})`\n\t\t\t}\n\t\t}\n\t\tconst activeColumns = this.dom.cohortTable.selectAll(selector)\n\t\tconst color = state.termdbConfig.massNav?.activeColor || cohortTableActiveColor\n\t\tactiveColumns.style('background-color', color)\n\t}\n\n\tinitCustomHtml = () => {\n\t\tif (this.selectCohort != null) return\n\t\tif (!this.aboutOverrides?.html) return\n\t\tthis.subheader\n\t\t\t.append('div')\n\t\t\t.attr('data-testid', 'sjpp-custom-about-content')\n\t\t\t.style('padding', '10px')\n\t\t\t.html(this.aboutOverrides.html)\n\t}\n\n\tinitActiveItems = () => {\n\t\tif (!this.aboutOverrides?.activeItems) return\n\n\t\t// todo: customize general holder by activeItems.holderStyle{}\n\t\tconst div = this.subheader\n\t\t\t.append('div')\n\t\t\t.attr('data-testid', 'sjpp-custom-about-activeItems')\n\t\t\t.style('padding', '0px 0px 10px 20px')\n\n\t\tfor (const item of this.aboutOverrides.activeItems.items) {\n\t\t\t// todo: by item.type, item.divStyle{}\n\t\t\tdiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.style('margin', '5px')\n\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t.attr('data-testid', 'sjpp-custom-active-item-btn')\n\t\t\t\t.html(item.title)\n\t\t\t\t.on('click', async () => {\n\t\t\t\t\t/* First, set the active tab to toggle to the plots tab and wait for the tab to be set,\n\t\t\t\t\totherwise the plotDiv is hidden when rendering and\n\t\t\t\t\tmay cause issues. A known issue is that getMaxLabelWidth getBBox on a hidden div returns width=0\n\t\t\t\t\tthis affects the legend rendering in plots like the scatter resulting in overlapping texts\n\t\t\t\t\t*/\n\t\t\t\t\tawait this.app.dispatch({\n\t\t\t\t\t\ttype: 'tab_set',\n\t\t\t\t\t\tactiveTab: 1\n\t\t\t\t\t})\n\t\t\t\t\t// after switching tab so plot div is shown, dispatch to create the plot\n\t\t\t\t\tthis.app.dispatch({\n\t\t\t\t\t\ttype: 'plot_create',\n\t\t\t\t\t\tid: getId(),\n\t\t\t\t\t\tconfig: structuredClone(item.plot)\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t}\n\t}\n\n\tinitDisclaimer = () => {\n\t\tconst d = this.aboutOverrides?.disclaimer\n\t\tif (!d) return\n\t\t// customize styling from d{}\n\t\tconst div = this.subheader\n\t\t\t.append('div')\n\t\t\t.attr('data-testid', 'sjpp-custom-about-disclaimer')\n\t\t\t.style('margin', '10px 0 20px 10px')\n\t\t\t.style('opacity', 0.7)\n\t\t\t.style('padding', '10px')\n\t\t\t.style('background-color', '#f8f9fa')\n\t\t\t.style('border-left', '4px solid #6c757d')\n\t\t\t.style('font-size', '0.8em')\n\t\tdiv.append('div').style('margin-bottom', '8px').style('font-weight', 'bold').text('DISCLAIMER')\n\t\tdiv.append('div').text(d.text)\n\t}\n\n\tshowServerInfo = () => {\n\t\tconst state = this.app.getState()\n\t\tconst about = state.termdbConfig.massNav?.tabs?.about\n\t\tif (!about && !this.app.opts.pkgver && !this.app.opts.launchDate) return\n\t\tconst dataRelease = about?.dataRelease\n\t\tconst additionalInfo = about?.additionalInfo\n\t\tconst div = this.subheader\n\t\t\t.append('div')\n\t\t\t.attr('data-testid', 'sjpp-about-server-info')\n\t\t\t.style('margin', '10px')\n\t\t\t.style('font-size', '.8em')\n\n\t\tconst htmlArr: string[] = []\n\t\tif (dataRelease) {\n\t\t\thtmlArr.push(`Data Release: <a href=${dataRelease.link} target=_blank>${dataRelease.version}</a>`)\n\t\t}\n\t\tif (this.app.opts.pkgver) {\n\t\t\thtmlArr.push(\n\t\t\t\t`Software Release: <a href=https://github.com/stjude/proteinpaint/pkgs/container/ppfull target=_blank>${this.app.opts.pkgver}</a>`\n\t\t\t)\n\t\t}\n\t\tif (this.app.opts.launchDate) {\n\t\t\thtmlArr.push(`Server Launched: ${this.app.opts.launchDate}`)\n\t\t}\n\t\tif (additionalInfo) {\n\t\t\thtmlArr.push(additionalInfo)\n\t\t}\n\t\tdiv.append('div').html(htmlArr.join('; '))\n\t}\n}\n\nexport const aboutInit = getCompInit(MassAbout)\n\nfunction joinByComma(arr) {\n\tif (!arr.length) return ''\n\telse if (arr.length == 1) return arr[0]\n\telse if (arr.length == 2) return arr.join(' and ')\n\telse return `${arr.slice(0, -1).join(', ')}, and ${arr.slice(-1)}`\n}\n", "import { getCompInit, type RxComponent } from '#rx'\nimport type { MassAppApi } from './types/mass'\nimport { Menu } from '#dom'\nimport { keyupEnter } from '#src/client'\nimport { dofetch3 } from '#common/dofetch'\nimport type { ChatRequest, ChatResponse } from '#types'\nimport { sayerror } from '../dom/sayerror.ts'\nimport { select } from 'd3-selection'\n\nconst MIN_PROMPT_LENGTH_FOR_OMNISEARCH = 3 // Set a minimum prompt length for omnisearch to trigger\nconst MAX_PROMPT_LENGTH_FOR_OMNISEARCH = 15 // Set a maximum prompt length for omnisearch to trigger\nconst MIN_PROMPT_LENGTH_FOR_CHAT = 5 // Set a minimum prompt length for chat submission\n\nclass MassAiChatBot implements RxComponent {\n\tstatic type = 'chat'\n\ttype: string\n\topts: any\n\tapp: MassAppApi\n\tdom!: any\n\tstate: any\n\tid!: string\n\tclear: any\n\tshowTerms: any\n\tnoResult: any\n\tisChat: any\n\n\tconstructor(opts: any) {\n\t\tthis.type = MassAiChatBot.type\n\t\tthis.opts = opts\n\t\tthis.app = opts.app\n\t\tthis.opts.usecase = this.opts.usecase || { target: 'dictionary', detail: 'term' }\n\t\tthis.opts.targetType = this.opts.targetType ? this.opts.targetType : 'Dictionary Variables'\n\t\tthis.isChat = this.app.getState().termdbConfig?.queries?.chat // Storing if chat is supported by the dataset for easy access in other methods\n\t\tsetRenderers(this) // needed so that this.showTerms, noResult, clear work\n\t}\n\n\tgetState(appState: any) {\n\t\treturn {\n\t\t\tcohortStr:\n\t\t\t\tappState.activeCohort == -1 || !appState.termdbConfig.selectCohort\n\t\t\t\t\t? ''\n\t\t\t\t\t: appState.termdbConfig.selectCohort.values[appState.activeCohort].keys.slice().sort().join(','),\n\t\t\tsearch: appState.search,\n\t\t\tnav: appState.nav\n\t\t}\n\t}\n\n\tasync init() {\n\t\tthis.initDom()\n\t}\n\n\t// Search method, adapted from MassSearch.doSearch\n\tasync doSearch(prompt: string) {\n\t\tif (!prompt) {\n\t\t\tthis.clear({ hide: true })\n\t\t\treturn\n\t\t}\n\t\tconst cohortStr = this.getState(this.app.getState()).cohortStr\n\t\tconst data = await this.app.vocabApi.findTerm(prompt, cohortStr, this.opts.usecase, this.opts.targetType)\n\t\tif (!data.lst || data.lst.length == 0) {\n\t\t\t// Show the \"No match...\" message one time at the first miss\n\t\t\tif (!this.dom.noMatchShown) {\n\t\t\t\tthis.dom.noMatchShown = true\n\t\t\t\tthis.noResult()\n\t\t\t}\n\t\t} else {\n\t\t\tthis.dom.noMatchShown = false\n\t\t\tthis.showTerms(data)\n\t\t}\n\t}\n\n\tinitDom() {\n\t\t//const cohortStr = this.getState(appState).cohortStr\n\t\tlet text = 'Search an item'\n\t\tlet height = '1px' // No white space needed for search only\n\t\tif (this.isChat) {\n\t\t\ttext = 'Ask a question'\n\t\t\theight = '200px'\n\t\t}\n\t\tthis.dom = {\n\t\t\ttip: new Menu({ padding: '5px' }),\n\t\t\tdiv: this.opts.subheader,\n\t\t\terror: this.opts.subheader.append('div').attr('id', 'sjpp-corrVolcano-error').style('opacity', 0.75),\n\t\t\tbubbleDiv: this.opts.subheader\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sjpp_show_scrollbar')\n\t\t\t\t.style('margin', '5px 20px 0px 20px')\n\t\t\t\t.style('height', height)\n\t\t\t\t.style('overflow', 'auto')\n\t\t\t\t.style('scroll-behavior', 'smooth')\n\t\t}\n\n\t\tconst inputSel = this.dom.div\n\t\t\t.append('input')\n\t\t\t.attr('type', 'search')\n\t\t\t.style('margin', '15px')\n\t\t\t.style('padding', '17px')\n\t\t\t.style('border-radius', '34px')\n\t\t\t.attr('size', 70)\n\t\t\t.attr('placeholder', text)\n\n\t\t// Store the input node so the search result tip can position under it\n\t\tthis.dom.inputNode = inputSel.node()\n\n\t\t// Result panel inside the tip, mirroring MassSearch.initUI\n\t\tthis.dom.resultDiv = this.dom.tip.d\n\t\t\t.style('border-left', 'solid 1px rgb(133,182,225)')\n\t\t\t.style('padding-left', '5px')\n\t\t\t.attr('tabindex', -1)\n\n\t\tinputSel\n\t\t\t.on('keyup.search', async (event: KeyboardEvent) => {\n\t\t\t\tif (keyupEnter(event)) return\n\t\t\t\tconst prompt = (event.target as HTMLInputElement).value.trim()\n\t\t\t\tif (!prompt) {\n\t\t\t\t\tthis.dom.noMatchShown = false\n\t\t\t\t\tthis.clear({ hide: true })\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif (MIN_PROMPT_LENGTH_FOR_OMNISEARCH <= prompt.length && prompt.length <= MAX_PROMPT_LENGTH_FOR_OMNISEARCH) {\n\t\t\t\t\t//console.log(\n\t\t\t\t\t//\t`User prompt: \"${prompt}\", cohortStr: \"${cohortStr}\", usecase: \"${this.opts.usecase}\", targetType: \"${this.opts.targetType}\"`\n\t\t\t\t\t//)\n\t\t\t\t\ttry {\n\t\t\t\t\t\tawait this.doSearch(prompt) // Search as user types\n\t\t\t\t\t} catch (e: any) {\n\t\t\t\t\t\tif (e.stack) console.log(e.stack)\n\t\t\t\t\t\tsayerror(this.dom.resultDiv, 'Error: ' + (e.message || e))\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tthis.dom.noMatchShown = false\n\t\t\t\t\tthis.clear({ hide: true })\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t})\n\t\t\t.on('keyup.submit', async (event: any) => {\n\t\t\t\tif (!keyupEnter(event)) return\n\t\t\t\tif (!this.isChat) {\n\t\t\t\t\t// Prevents unnecessary server side call when chat not supported by ds\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst prompt = event.target.value.trim()\n\t\t\t\tif (!prompt) return\n\t\t\t\tthis.addBubble({ msg: escapeHtml(prompt), me: 1 })\n\t\t\t\tevent.target.value = ''\n\t\t\t\tconst serverBubble = this.addBubble({ msg: '...' }) // Keep server bubble always below prompt bubble so that responses are below the prompt always\n\t\t\t\tif (prompt.length <= MIN_PROMPT_LENGTH_FOR_CHAT) {\n\t\t\t\t\tserverBubble.text('Your prompt is too short. Enter a longer prompt.')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tconst body: ChatRequest = {\n\t\t\t\t\tgenome: this.app.vocabApi.vocab.genome,\n\t\t\t\t\tdslabel: this.app.vocabApi.vocab.dslabel,\n\t\t\t\t\tfilter: this.app.vocabApi.state.termfilter?.filter,\n\t\t\t\t\tprompt\n\t\t\t\t}\n\t\t\t\ttry {\n\t\t\t\t\tconst data = await dofetch3('termdb/chat', { body })\n\t\t\t\t\tif (data.error) throw data.error\n\n\t\t\t\t\tconst result: ChatResponse = data\n\t\t\t\t\tif (result.type === 'text') {\n\t\t\t\t\t\tserverBubble.text(result.text)\n\t\t\t\t\t} else if (result.type === 'html') {\n\t\t\t\t\t\tserverBubble.html(result.html)\n\t\t\t\t\t} else if (result.type === 'plot') {\n\t\t\t\t\t\t// Determine if plot state is complete or not. A field whose value carries a\n\t\t\t\t\t\t// `possible_options` array means the server could not resolve that term and\n\t\t\t\t\t\t// is offering the user a choice. If found, show click boxes; otherwise the\n\t\t\t\t\t\t// plot state is complete and can be dispatched directly.\n\t\t\t\t\t\tconst optionField = findPossibleOptionsField(result.plot)\n\t\t\t\t\t\tif (optionField) {\n\t\t\t\t\t\t\tthis.showPossibleOptions(serverBubble, result.plot, optionField, result.msg)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthis.app.dispatch({\n\t\t\t\t\t\t\t\ttype: 'plot_create',\n\t\t\t\t\t\t\t\tconfig: result.plot\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\tserverBubble.text(`${result.msg ? result.msg + '. ' : ''}Please refer to the plot generated below.`)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch (e: any) {\n\t\t\t\t\tif (e.stack) console.log(e.stack)\n\t\t\t\t\tserverBubble.html(`Error: ${e.message || e}`)\n\t\t\t\t}\n\t\t\t})\n\t\t\t.node()\n\t\t\t.focus()\n\t}\n\n\taddBubble(arg: { msg: string; me?: number }) {\n\t\t/** {\nmsg: add a chat bubble for this msg; msg is html as it might contain hyperlinks\nme: if 1, is me; otherwise is ai\n}\nreturn the created bubble and allow to be modified\n*/\n\t\tconst bubble = this.dom.bubbleDiv\n\t\t\t.append('div')\n\t\t\t.style('padding', '10px')\n\t\t\t.html(`${arg.me ? '<span style=\"font-size:.7em\">[ME]</span> ' : ''}${arg.msg}`)\n\t\tif (arg.me) bubble.style('background', '#f1f1f1')\n\t\t// set this to scroll to bottom\n\t\tconst n = this.dom.bubbleDiv.node()\n\t\tn.scrollTop = n.scrollHeight\n\t\treturn bubble\n\t}\n\n\t// Render click boxes for an incomplete plot state. `fieldKey` is the field of `plot` whose\n\t// value holds `possible_options`. Clicking a box completes the plot state by replacing that\n\t// field with the chosen option's id and dispatches plot_create.\n\tshowPossibleOptions(bubble: any, plot: any, fieldKey: string, msg?: string) {\n\t\tconst options = plot[fieldKey].possible_options || []\n\t\tbubble.text(`${msg ? msg + '. ' : ''}Multiple options are available. Please select one:`)\n\t\tconst boxDiv = bubble.append('div').style('margin-top', '5px')\n\t\tfor (const opt of options) {\n\t\t\tboxDiv\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t.attr('data-testid', `sjpp-mass-chat-option-${opt.id}`)\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.style('margin', '3px')\n\t\t\t\t.style('padding', '5px 10px')\n\t\t\t\t.style('border-radius', '5px')\n\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t.text(opt.name)\n\t\t\t\t.on('click', () => {\n\t\t\t\t\t// Complete the plot state with the chosen option's id and dispatch the plot.\n\t\t\t\t\tconst config = JSON.parse(JSON.stringify(plot))\n\t\t\t\t\tconfig[fieldKey] = { id: opt.id }\n\t\t\t\t\tthis.app.dispatch({\n\t\t\t\t\t\ttype: 'plot_create',\n\t\t\t\t\t\tconfig\n\t\t\t\t\t})\n\t\t\t\t\tbubble.selectAll('*').remove()\n\t\t\t\t\tbubble.text(`Selected \"${opt.name}\". Please refer to the plot generated below.`)\n\t\t\t\t})\n\t\t}\n\t}\n\n\tmain() {\n\t\t// If the subheader is hidden, it means the chat component is not visible, so we skip focusing the input to avoid accidental typing into the search/chat bar. The user can click on the chat again to focus when they want to use it.\n\t\tif (this.opts.subheader.style('display') == 'none') {\n\t\t\tthis.dom.inputNode.blur()\n\t\t\treturn\n\t\t}\n\t\tif (this.opts?.focus != 'off') this.dom.inputNode.focus()\n\t}\n}\n\nexport const chatInit = getCompInit(MassAiChatBot)\n\n// Prevents HTML/script injection in the chat UI (XSS) by entering markup in the prompt (Proposed fix by copilot)\nfunction escapeHtml(s: string): string {\n\treturn s\n\t\t.replace(/&/g, '&')\n\t\t.replace(/</g, '<')\n\t\t.replace(/>/g, '>')\n\t\t.replace(/\"/g, '"')\n\t\t.replace(/'/g, ''')\n}\n\n// Scan a plot state for a field whose value carries a `possible_options` array, indicating the\n// server could not resolve that term and is offering the user a list of choices. Returns the field\n// name (e.g. 'term') or null if the plot state is complete.\nfunction findPossibleOptionsField(plot: any): string | null {\n\tif (!plot || typeof plot !== 'object') return null\n\tfor (const key of Object.keys(plot)) {\n\t\tconst val = plot[key]\n\t\tif (val && typeof val === 'object' && Array.isArray(val.possible_options)) return key\n\t}\n\treturn null\n}\n\n// Minimal renderers ported from MassSearch\nfunction setRenderers(self: any) {\n\tlet text = 'No match'\n\tif (self.isChat) {\n\t\ttext = 'No match. Using the chatbot...'\n\t}\n\tself.noResult = () => {\n\t\tself.clear()\n\t\tself.dom.resultDiv.append('div').text(text).style('padding', '3px 3px 3px 0px').style('opacity', 0.5)\n\n\t\t// Hide the popup after 2 seconds\n\t\tsetTimeout(() => {\n\t\t\tself.clear({ hide: true })\n\t\t}, 1500)\n\t}\n\n\tself.showTerms = (data: any) => {\n\t\tif (self.opts.disable_terms)\n\t\t\tdata.lst.forEach((t: any) => {\n\t\t\t\tif (t.disabled) self.opts.disable_terms.push(t)\n\t\t\t})\n\t\tself.clear({ hide: !data.lst.length })\n\t\tif (data.lst.length) {\n\t\t\tself.dom.resultDiv.append('table').selectAll().data(data.lst).enter().append('tr').each(self.showTerm)\n\t\t}\n\t}\n\n\tself.showTerm = function (term: any) {\n\t\tconst tr = select(this)\n\t\tconst button = tr.append('td').text(term.name)\n\n\t\tif (term.type) {\n\t\t\tbutton\n\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t.attr('data-testid', `sjpp-mass-chat-term-${term.id}`)\n\t\t\t\t.on('click', async () => {\n\t\t\t\t\tif (self.state?.nav?.activeTab == 0) {\n\t\t\t\t\t\tawait self.app.dispatch({ type: 'tab_set', activeTab: 1 })\n\t\t\t\t\t}\n\t\t\t\t\tself.app.dispatch({\n\t\t\t\t\t\ttype: 'plot_create',\n\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\tchartType: term.type == 'survival' ? 'survival' : 'summary',\n\t\t\t\t\t\t\tterm: { term }\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\tself.dom.inputNode.value = '' // clear the search box\n\t\t\t\t\tself.clear({ hide: true })\n\t\t\t\t})\n\t\t} else {\n\t\t\tbutton.style('padding', '5px 10px').style('opacity', 0.5)\n\t\t}\n\n\t\ttr.append('td')\n\t\t\t.text((term.__ancestorNames || []).join(' > '))\n\t\t\t.style('opacity', 0.5)\n\t\t\t.style('font-size', '.7em')\n\t}\n\n\tself.clear = (opts: any = {}) => {\n\t\tself.dom.tip.clear()\n\t\tif (opts.hide) self.dom.tip.hide()\n\t\telse self.dom.tip.showunder(self.dom.inputNode)\n\t}\n}\n", "import { getCompInit, multiInit } from '#rx'\nimport { recoverInit } from '../rx/src/recover'\nimport { chartsInit } from './charts'\nimport { groupsInit } from './groups'\nimport { sessionBtnInit } from './sessionBtn'\nimport { aboutInit } from './about.ts'\nimport { chatInit } from './chat.ts'\nimport { dofetch3 } from '#common/dofetch'\nimport { Menu, icons as icon_functions } from '#dom'\nimport { getFilterItemByTag, filterRxCompInit } from '#filter/filter'\n\n/*\ntodo: steps to add a new tab\n*/\n\nconst activeTabBgColor = '#ececec', // default bg color of active tab; inactive tab is transparent\n\tactiveTabBgColorHover = '#e0e0e0',\n\tactiveTabTextColor = 'black',\n\tinactiveTabBgColorHover = '#fcfced',\n\tinactiveTabTextColor = 'gray'\n\n// to be used for assigning unique\n// radio button names by object instance\n// otherwise termdp app popups\nlet instanceNum = 0\n\n// to distinguish from IDs assigned by other code or users\nconst idPrefix = '_MASS_AUTOID_' + Math.random().toString().slice(-6)\nlet id = (+new Date()).toString().slice(-8)\n\nconst headtip = new Menu({ padding: '0px', offsetX: 0, offsetY: 0 })\nheadtip.d.style('z-index', 5555)\n// headtip must get a crazy high z-index so it can stay on top of all, no matter if server config has base_zindex or not\n\n// data elements for navigation header tabs\nconst aboutTab = { top: 'ABOUT', mid: '', btm: '', subheader: 'about' }\nconst chartTab = { top: 'CHARTS', mid: 'NONE', btm: '', subheader: 'charts' }\nconst groupsTab = { top: 'GROUPS', mid: 'NONE', btm: '', subheader: 'groups' }\nconst filterTab = { top: 'FILTER', mid: 'NONE', btm: '', subheader: 'filter' }\nconst cartTab = { top: 'CART', mid: 'NONE', btm: '', subheader: 'cart' }\n\nexport function getId() {\n\treturn idPrefix + '_' + id++\n}\n\nclass TdbNav {\n\tstatic type = 'nav'\n\n\tconstructor(opts) {\n\t\tthis.type = TdbNav.type\n\t\tthis.instanceNum = instanceNum++\n\t\tthis.tabs = [] // array of tab objects corresponding to what's shown on header, based on ds customization. hidden tabs are not in this array. filled in initUI()\n\t\tthis.activeTab = 0 // array index for .tabs[]; -1 for no active tabs and all closed\n\t\tthis.activeCohort = 0 // -1 = unselected, 0,1,2... = selected\n\t\tthis.samplecounts = {} // tracks sample count by .activeCohort value and stringified filter json\n\t\tthis.searching = false\n\t\tthis.massSessionDuration = opts.massSessionDuration\n\t\tthis.sessionDaysLeft = opts.app.opts.sessionDaysLeft || null\n\t\tthis.sessionId = opts.app.opts.sessionId || null\n\t\tthis.pkgver = opts.pkgver || null //Release version\n\t\tsetInteractivity(this)\n\t\tsetRenderers(this)\n\t}\n\n\tasync init(appState) {\n\t\ttry {\n\t\t\tthis.cohortFilter = getFilterItemByTag(appState.termfilter.filter, 'cohortFilter')\n\t\t\tthis.initUI(appState)\n\t\t\tif (appState?.termdbConfig?.selectCohort) {\n\t\t\t\tthis.dom.tds.filter(d => d.colNum === 0).style('display', '')\n\t\t\t\tthis.cohortNames = appState.termdbConfig.selectCohort.values.map(d => d.keys.slice().sort().join(','))\n\t\t\t}\n\n\t\t\tthis.components = await multiInit({\n\t\t\t\tfilter: filterRxCompInit({\n\t\t\t\t\tapp: this.app,\n\t\t\t\t\tvocabApi: this.app.vocabApi,\n\t\t\t\t\tholder: this.dom.subheader.filter.append('div').style('margin', '5px'),\n\t\t\t\t\thideLabel: this.opts.header_mode === 'with_tabs',\n\t\t\t\t\temptyLabel: '+Add new filter',\n\t\t\t\t\tcallback: filter => {\n\t\t\t\t\t\tthis.app.dispatch({\n\t\t\t\t\t\t\ttype: 'filter_replace',\n\t\t\t\t\t\t\tfilter\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}),\n\t\t\t\tcharts: chartsInit({\n\t\t\t\t\tapp: this.app,\n\t\t\t\t\tholder: this.dom.subheader.charts,\n\t\t\t\t\tvocab: this.opts.vocab\n\t\t\t\t}),\n\t\t\t\tgroups: groupsInit({\n\t\t\t\t\tapp: this.app,\n\t\t\t\t\tholder: this.dom.subheader.groups,\n\t\t\t\t\tvocab: this.opts.vocab\n\t\t\t\t}),\n\t\t\t\trecover: recoverInit({\n\t\t\t\t\tapp: this.app,\n\t\t\t\t\tholder: this.dom.recoverDiv,\n\t\t\t\t\t// TODO: ???? may limit the tracked state to only the filter, activeCohort ???\n\t\t\t\t\tgetState: appState => appState,\n\t\t\t\t\treactsTo: action => action.type != 'plot_edit',\n\t\t\t\t\tmaxHistoryLen: 5\n\t\t\t\t}),\n\t\t\t\tsessionBtn: sessionBtnInit({\n\t\t\t\t\tapp: this.app,\n\t\t\t\t\tbutton: this.dom.saveBtn,\n\t\t\t\t\tmassSessionDuration: this.opts.massSessionDuration,\n\t\t\t\t\tsessionDaysLeft: this.app.opts.sessionDaysLeft || null\n\t\t\t\t}),\n\t\t\t\tabout: aboutInit({\n\t\t\t\t\tapp: this.app,\n\t\t\t\t\tsubheader: this.dom.subheader.about,\n\t\t\t\t\tinstanceNum: this.instanceNum,\n\t\t\t\t\taboutOverrides: appState?.termdbConfig?.massNav?.tabs?.about || null,\n\t\t\t\t\tselectCohort: appState?.termdbConfig?.selectCohort || null\n\t\t\t\t}),\n\t\t\t\tchat: chatInit({\n\t\t\t\t\tapp: this.app,\n\t\t\t\t\tsubheader: this.dom.subheader.chat\n\t\t\t\t})\n\t\t\t})\n\t\t\tthis.mayShowMessage_sessionDaysLeft()\n\t\t} catch (e) {\n\t\t\tthrow e\n\t\t}\n\t}\n\n\treactsTo(action) {\n\t\tif (action.type.includes('cache_termq')) return true\n\t\tif (action.type.startsWith('filter')) return true\n\t\tif (action.type.startsWith('cohort')) return true\n\t\tif (action.type.startsWith('tab')) return true\n\n\t\t// do not use startsWith('plot_') to exclude 'plot_edit' as no need for nav to react to that\n\t\tif (action.type == 'plot_prep') return true\n\t\tif (action.type == 'plot_create') return true\n\t\tif (action.type == 'plot_delete') return true\n\n\t\tif (action.type == 'app_refresh') return true\n\t\tif (action.type.endsWith('_customTerm')) return true\n\t\tif (action.type.endsWith('_group')) return true\n\t}\n\n\tgetState(appState) {\n\t\treturn {\n\t\t\tsearching: this.searching, // for detection of internal state change\n\t\t\tnav: appState.nav,\n\t\t\tactiveCohort: appState.activeCohort,\n\t\t\ttermdbConfig: appState.termdbConfig,\n\t\t\tfilter: appState.termfilter.filter,\n\t\t\tplots: appState.plots,\n\t\t\tgroups: appState.groups\n\t\t}\n\t}\n\n\tasync main() {\n\t\tthis.dom.tabDiv.style('display', this.state.nav.header_mode === 'with_tabs' ? 'inline-block' : 'none')\n\t\tthis.dom.tip.hide()\n\t\tthis.activeTab = this.state.nav.activeTab\n\t\tthis.prevCohort = this.activeCohort\n\t\tthis.activeCohort = +this.state.activeCohort\n\t\tthis.filterUiRoot = getFilterItemByTag(this.state.filter, 'filterUiRoot')\n\t\tthis.cohortFilter = getFilterItemByTag(this.state.filter, 'cohortFilter')\n\t\tif (this.cohortNames) {\n\t\t\tthis.activeCohortName = this.cohortNames[this.activeCohort]\n\t\t\tif (this.activeCohort !== -1)\n\t\t\t\tthis.activeCohortLabel = this.state.termdbConfig.selectCohort.values[this.activeCohort].shortLabel\n\t\t}\n\t\tthis.filterJSON = JSON.stringify(this.state.filter)\n\n\t\tthis.cohortsData = await this.app.vocabApi.getCohortsData()\n\n\t\tif (this.state.nav.header_mode === 'with_tabs') {\n\t\t\tif (!(this.activeCohort in this.samplecounts)) {\n\t\t\t\tthis.samplecounts[this.activeCohort] = await this.app.vocabApi.getCohortSampleCount(this.activeCohortName)\n\t\t\t}\n\t\t\tif (!(this.filterJSON in this.samplecounts)) {\n\t\t\t\tif (!this.filterUiRoot || !this.filterUiRoot.lst.length) {\n\t\t\t\t\tthis.samplecounts[this.filterJSON] = this.samplecounts[this.activeCohort]\n\t\t\t\t} else {\n\t\t\t\t\tconst n = await this.app.vocabApi.getFilteredSampleCount(this.filterJSON)\n\t\t\t\t\tthis.samplecounts[this.filterJSON] = n\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tthis.updateUI()\n\t}\n}\n\nexport const navInit = getCompInit(TdbNav)\n\nfunction setRenderers(self) {\n\tself.initUI = appState => {\n\t\tconst verifiedToken = self.app.vocabApi.verifiedToken\n\t\tconst invalidTokenErrorHandling = appState.termdbConfig.invalidTokenErrorHandling\n\t\t//Show error message if login failed and all charts require login. If the dataset does not require login verifiedToken is true\n\t\t//Currently only the profile and carereg always require a token.\n\t\t// Note that if the user did not login the public token was used. So only if the user did login and the token passed was invalid this error is shown\n\t\tif (!verifiedToken && invalidTokenErrorHandling?.affectedCharts?.includes('*'))\n\t\t\tthrow new Error(appState.termdbConfig.invalidTokenErrorHandling.errorMessage)\n\t\tconst header = self.opts.holder.append('div').style('white-space', 'nowrap')\n\t\tconst massNav = appState.termdbConfig?.massNav || {}\n\t\tlet titleDiv = header\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('float', 'right')\n\t\t\t.style('font-size', '1.1em')\n\t\t\t.style('margin', '50px 10px 0 0')\n\t\t\t.text(massNav?.title?.text) //this line will be executed in update UI to reflect cohort changes\n\n\t\tconst tabDiv = header.append('div').style('display', 'none').style('vertical-align', 'bottom')\n\t\tconst controlsDiv = header\n\t\t\t//Fix for adding message underneath the search bar and buttons\n\t\t\t.append('div')\n\t\t\t.style('vertical-align', 'top')\n\t\t\t.style('margin', '10px')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('float', 'right')\n\n\t\tif (self.opts.header_mode === 'only_buttons') {\n\t\t\t// if header_mode is only_buttons, show only buttons\n\t\t\ttabDiv.style('display', 'none')\n\t\t\ttitleDiv.style('display', 'none')\n\t\t\tcontrolsDiv.style('display', 'none')\n\t\t}\n\t\tself.opts.holder.attr('class', 'sjpp-nav')\n\t\tself.dom = {\n\t\t\tholder: self.opts.holder,\n\t\t\theader,\n\t\t\ttabDiv,\n\t\t\tcontrolsDiv,\n\t\t\tsearchDiv: controlsDiv.append('div').style('margin', '10px'),\n\t\t\tsessionDiv: controlsDiv.append('div').style('display', 'inline-block'),\n\t\t\trecoverDiv: controlsDiv.append('div').style('display', 'inline-block'),\n\t\t\tpdfDiv: controlsDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.style('padding', '4px')\n\t\t\t\t.style('vertical-align', 'middle'),\n\t\t\tdeleteAllDiv: controlsDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.style('padding', '4px')\n\t\t\t\t.style('vertical-align', 'middle'),\n\n\t\t\thelpDiv: controlsDiv.append('div').style('display', 'none'),\n\t\t\tsessionElapsedMessageDiv: controlsDiv.append('div').style('display', 'none'),\n\t\t\tsubheaderDiv: self.opts.holder.append('div').style('display', 'block').style('border-bottom', '1px solid #000'),\n\t\t\tmessageDiv: self.opts.holder.append('div').style('margin', '30px').style('display', 'none'),\n\t\t\ttitleDiv,\n\t\t\ttip: new Menu({ padding: '5px' })\n\t\t}\n\t\ticon_functions['trash'](self.dom.deleteAllDiv, {\n\t\t\thandler: self.deletePlots,\n\t\t\ttitle: 'Delete all plots. To revert, click Undo button'\n\t\t})\n\n\t\ticon_functions['pdf'](self.dom.pdfDiv, {\n\t\t\thandler: self.opts.downloadPlots,\n\t\t\ttitle: 'Generate a PDF of all the plots opened'\n\t\t})\n\n\t\tif (self.opts.header_mode === 'with_cohortHtmlSelect') {\n\t\t\t// not part of filter div\n\t\t\tself.dom.cohortStandaloneDiv = header\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.style('margin', '10px')\n\t\t\t\t.style('vertical-align', 'top')\n\n\t\t\tself.dom.cohortStandaloneDiv.append('label').html('Cohort: ')\n\t\t\tself.dom.cohortSelect = self.dom.cohortStandaloneDiv.append('select').on('change', async function () {\n\t\t\t\tself.app.dispatch({ type: 'cohort_set', activeCohort: +this.value })\n\t\t\t})\n\n\t\t\tself.dom.cohortSelect\n\t\t\t\t.selectAll('option')\n\t\t\t\t.data(appState.termdbConfig.selectCohort.values)\n\t\t\t\t.enter()\n\t\t\t\t.append('option')\n\t\t\t\t.attr('value', (d, i) => i)\n\t\t\t\t.property('selected', (d, i) => i === appState.activeCohort)\n\t\t\t\t.html(d => d.shortLabel)\n\t\t}\n\n\t\tself.dom.subheader = Object.freeze({\n\t\t\t// For either the COHORT or ABOUT tab\n\t\t\tabout: self.dom.subheaderDiv\n\t\t\t\t.append('div')\n\t\t\t\t.attr('data-testid', 'sjpp-mass-nav-subheader-about')\n\t\t\t\t.style('display', 'none'),\n\t\t\tsearch: self.dom.subheaderDiv\n\t\t\t\t.append('div')\n\t\t\t\t.attr('data-testid', 'sjpp-mass-nav-subheader-search')\n\t\t\t\t.style('display', 'none'),\n\t\t\tgroups: self.dom.subheaderDiv\n\t\t\t\t.append('div')\n\t\t\t\t.attr('data-testid', 'sjpp-mass-nav-subheader-groups')\n\t\t\t\t.style('display', 'none'),\n\t\t\tcharts: self.dom.subheaderDiv\n\t\t\t\t.append('div')\n\t\t\t\t.attr('data-testid', 'sjpp-mass-nav-subheader-charts')\n\t\t\t\t.style('display', 'none'),\n\t\t\tfilter: self.dom.subheaderDiv\n\t\t\t\t.append('div')\n\t\t\t\t.attr('data-testid', 'sjpp-mass-nav-subheader-filter')\n\t\t\t\t.style('display', 'none'),\n\t\t\tchat: self.dom.subheaderDiv\n\t\t\t\t.append('div')\n\t\t\t\t.attr('data-testid', 'sjpp-mass-nav-subheader-chat')\n\t\t\t\t.style('display', 'none')\n\t\t\t// cart: self.dom.subheaderDiv.append('div').style('display', 'none').html('<br/>Cart feature under construction - work in progress<br/> <br/>'),\n\t\t})\n\n\t\tif (!massNav.tabs?.about?.hide) {\n\t\t\t// about tab is not hidden\n\t\t\tself.tabs.push(aboutTab)\n\t\t\t// about tab contents are conditionally determined by 1) override 2) ds using or not using cohort.\n\t\t\t// furbish an override object with default properties based on conditions if those properties are missing\n\t\t\tconst override = Object.assign({}, massNav.tabs?.about)\n\t\t\tif (appState.termdbConfig?.selectCohort) {\n\t\t\t\t// ds has cohort selection and no customization to about tab\n\t\t\t\tif (!override.top) override.top = 'COHORT'\n\t\t\t\t// do not assign \"mid\" here as it will be dynamically assigned with active cohort name\n\t\t\t} else {\n\t\t\t\t// ds doesn't use cohort selection. if mid is missing, use dslabel\n\t\t\t\tif (!override.mid) override.mid = self.pickDatasetLabel(appState)\n\t\t\t}\n\t\t\tObject.assign(aboutTab, override) // apply ds customizations\n\t\t}\n\t\tif (!massNav.tabs?.charts?.hide) {\n\t\t\t// charts tab is not hidden\n\t\t\tself.tabs.push(chartTab)\n\t\t\tObject.assign(chartTab, massNav.tabs?.charts)\n\t\t}\n\t\tif (!massNav.tabs?.groups?.hide) {\n\t\t\t// group tab is not hidden\n\t\t\tself.tabs.push(groupsTab)\n\t\t\tObject.assign(groupsTab, massNav.tabs?.groups)\n\t\t}\n\t\tif (!massNav.tabs?.filter?.hide) {\n\t\t\t// filter tab is not hidden\n\t\t\tself.tabs.push(filterTab)\n\t\t\tObject.assign(filterTab, massNav.tabs?.filter)\n\t\t}\n\t\t/** When chat is enabled for a ds, show name as \"CHAT\". When not enabled, it should show \"SEARCH\" with ONLY omnisearch functionality\n\t\t **/\n\t\tif (!massNav.tabs?.chat?.hide) {\n\t\t\tif (appState.termdbConfig?.queries?.chat) {\n\t\t\t\tconst chatTab = { top: 'CHAT', mid: '', btm: '', subheader: 'chat' }\n\t\t\t\tObject.assign(chatTab, massNav.tabs?.chat)\n\t\t\t\tchatTab.top = 'CHAT' // Copilot mentioned that Object.assign may overwrite {chat/search}.top. Therefore this line has been added.\n\t\t\t\tself.tabs.push(chatTab)\n\t\t\t} else {\n\t\t\t\tconst searchTab = { top: 'SEARCH', mid: '', btm: '', subheader: 'chat' }\n\t\t\t\tObject.assign(searchTab, massNav.tabs?.chat)\n\t\t\t\tsearchTab.top = 'SEARCH' // Copilot mentioned that Object.assign may overwrite {chat/search}.top. Therefore this line has been added.\n\t\t\t\tself.tabs.push(searchTab)\n\t\t\t}\n\t\t}\n\n\t\tconst table = self.dom.tabDiv\n\t\t\t.append('table')\n\t\t\t.attr('data-testid', 'sjpp-nav-tabs-table')\n\t\t\t.style('border-collapse', 'collapse')\n\n\t\t// using a table layout for tabs, iterate through each tab\n\t\t// once for each of [top, mid, btm] row\n\t\ttable\n\t\t\t.selectAll('tr')\n\t\t\t.data(['top', 'mid', 'btm'])\n\t\t\t.enter()\n\t\t\t.append('tr')\n\t\t\t.attr('class', (d, i) => `sjpp-nav-tabs-row-${i}`)\n\t\t\t.style('font-size', (d, i) => (i == 1 ? '20px' : '12px'))\n\t\t\t.selectAll('td')\n\t\t\t.data((key, i) =>\n\t\t\t\tself.tabs.map((row, colNum) => {\n\t\t\t\t\treturn {\n\t\t\t\t\t\trowNum: i,\n\t\t\t\t\t\tkey,\n\t\t\t\t\t\tcolNum,\n\t\t\t\t\t\tlabel: row[key],\n\t\t\t\t\t\tsubheader: row.subheader,\n\t\t\t\t\t\tdisabled: row.disabled,\n\t\t\t\t\t\tdisabledMessage: row.disabledMessage\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t)\n\t\t\t.enter()\n\t\t\t.append('td')\n\t\t\t.attr('class', d => `sjpp-nav-tab-col-${d.colNum}`)\n\t\t\t// hide the about (e.g. cohort tab) until there is termdbConfig.selectCohort or termdbCongfig.massNav.tabs.about\n\t\t\t.style('display', 'none') // d => (d.colNum === 0 || self.activeCohort !== -1 ? '' : 'none'))\n\t\t\t.style('width', '100px')\n\t\t\t.style('padding', d => (d.rowNum === 0 ? '12px 12px 3px 12px' : '3px 12px'))\n\t\t\t.style('text-align', 'center')\n\t\t\t.style('border-left', '1px solid #ccc')\n\t\t\t.style('border-right', '1px solid #ccc')\n\t\t\t.style('color', '#aaa')\n\t\t\t.style('opacity', d => (d.disabled ? 0.5 : 1))\n\t\t\t.style('cursor', d => (d.disabled ? 'not-allowed' : 'pointer'))\n\t\t\t.attr('title', d => d.disabledMessage || '')\n\t\t\t.html(d => d.label)\n\t\t\t.on('click', (event, d) => {\n\t\t\t\tself.setTab(event, d)\n\t\t\t})\n\t\t\t.on('mouseover', (event, d) => {\n\t\t\t\tself.mouseover(event, d)\n\t\t\t})\n\t\t\t.on('mouseout', () => {\n\t\t\t\tself.mouseout()\n\t\t\t})\n\n\t\tself.dom.trs = table.selectAll('tr')\n\t\tself.dom.tds = table.selectAll('td')\n\t\tself.subheaderKeys = self.tabs.map(d => d.subheader)\n\n\t\tself.dom.saveBtn = self.dom.sessionDiv\n\t\t\t.append('button')\n\t\t\t.attr('data-testid', 'sjpp-nav-session-btn')\n\t\t\t.style('margin', '10px')\n\t\t\t.text('Session \u25BC')\n\n\t\t//.on('click', self.getSessionUrl)\n\n\t\tif (self.sessionDaysLeft != null) {\n\t\t\t//Only show if called from `mass-session-id` URL\n\t\t\tself.dom.fileBtn = self.dom.sessionDiv\n\t\t\t\t.append('button')\n\t\t\t\t.attr('data-testid', 'sjpp-nav-file-btn')\n\t\t\t\t.style('margin', '10px')\n\t\t\t\t.text('Export Session')\n\t\t\t\t.on('click', event => {\n\t\t\t\t\tself.getSessionFile(event)\n\t\t\t\t})\n\t\t}\n\t}\n\n\tself.deletePlots = () => {\n\t\tconst state = self.app.getState()\n\t\tconst subactions = []\n\t\tfor (const plot of state.plots) subactions.push({ type: 'plot_delete', id: plot.id })\n\n\t\tself.app.dispatch({ type: 'app_refresh', subactions })\n\t}\n\n\tself.mayShowMessage_sessionDaysLeft = () => {\n\t\tif (!Number.isFinite(self.sessionDaysLeft)) {\n\t\t\t// info not available, do not show msg\n\t\t\treturn\n\t\t}\n\t\tself.dom.sessionElapsedMessageDiv.style('display', 'block')\n\t\tself.dom.remainingDaysMessage = self.dom.sessionElapsedMessageDiv\n\t\t\t.append('div')\n\t\t\t.style('display', 'block')\n\t\t\t.style('opacity', '0.65')\n\t\t\t.html(\n\t\t\t\t`<u>${self.sessionDaysLeft} days</u> left until this session is removed. Click the \"Session \u25BC\" button and select \"Save\" option to create a new one.`\n\t\t\t)\n\t}\n\n\tself.updateUI = async () => {\n\t\tif (!self.dom.subheaderDiv) return\n\t\tif (self.activeTab && self.state.termdbConfig.selectCohort && self.activeCohort == -1) {\n\t\t\t// showing charts or filter tab; cohort selection is enabled but no cohort is selected\n\t\t\tself.dom.subheaderDiv.style('display', 'none')\n\t\t\tself.dom.messageDiv.selectAll('text').remove()\n\t\t\tself.dom.messageDiv.style('display', '').text('No cohort selected. Please select a cohort in the \"COHORT\" tab.')\n\t\t} else {\n\t\t\tif (self.dom.subheaderDiv) self.dom.subheaderDiv.style('display', self.activeTab != -1 ? 'block' : 'none')\n\t\t\tif (self.dom.messageDiv) self.dom.messageDiv.style('display', 'none')\n\t\t}\n\t\tconst selectCohort = self.state.termdbConfig.selectCohort\n\t\tconst massNav = self.state.termdbConfig.massNav\n\t\tself.dom.searchDiv.style('display', selectCohort && self.activeCohort == -1 ? 'none' : 'inline-block')\n\t\t//self.dom.holder.style('margin-bottom', self.state.nav.header_mode === 'with_tabs' ? '20px' : '')//To be checked why it was needed\n\t\tself.dom.header.style('border-bottom', self.state.nav.header_mode === 'with_tabs' ? '1px solid #000' : '')\n\t\tself.dom.tds\n\t\t\t.style('display', '')\n\t\t\t//Only show black text when the tab is active and the subheader is displayed\n\t\t\t.style('color', d => (d.colNum == self.activeTab ? activeTabTextColor : inactiveTabTextColor))\n\t\t\t.style('background-color', d =>\n\t\t\t\td.colNum == self.activeTab && self.dom.subheaderDiv.style('display') != 'none'\n\t\t\t\t\t? self.state.termdbConfig.massNav?.activeColor || activeTabBgColor\n\t\t\t\t\t: 'transparent'\n\t\t\t)\n\t\t\t.html(function (d, i) {\n\t\t\t\tif (d.key == 'top') return this.innerHTML\n\n\t\t\t\tif (d.subheader == 'groups') {\n\t\t\t\t\tif (d.key == 'mid') return self.state.groups.length || 'NONE'\n\t\t\t\t\treturn ''\n\t\t\t\t}\n\n\t\t\t\tif (d.subheader === 'charts') {\n\t\t\t\t\t// only a plot in it's own sandbox will be counted; do not separately count child plots in the same sandbox\n\t\t\t\t\tconst n = self.state.plots.filter(p => !p.parentId).length\n\t\t\t\t\tif (d.key == 'mid') return !n ? 'NONE' : n\n\t\t\t\t\telse return ''\n\t\t\t\t} else if (d.subheader === 'about') {\n\t\t\t\t\tif (self.activeCohort != -1 && self.activeCohort in self.samplecounts) {\n\t\t\t\t\t\tconst aboutMap = {\n\t\t\t\t\t\t\ttop: this.innerHTML,\n\t\t\t\t\t\t\tmid: self.activeCohortLabel,\n\t\t\t\t\t\t\tbtm: self.samplecounts[self.activeCohort]\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn aboutMap[d.key] || ''\n\t\t\t\t\t} else if (!selectCohort) {\n\t\t\t\t\t\tconst aboutMap = {\n\t\t\t\t\t\t\ttop: massNav?.tabs?.about?.top || 'ABOUT',\n\t\t\t\t\t\t\tmid: massNav?.tabs?.about?.mid || this.innerHTML,\n\t\t\t\t\t\t\tbtm: massNav?.tabs?.about?.btm || self.samplecounts[self.activeCohort]\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn aboutMap[d.key] || ''\n\t\t\t\t\t} else {\n\t\t\t\t\t\treturn d.key === 'mid' ? 'NONE' : this.innerHTML\n\t\t\t\t\t}\n\t\t\t\t} else if (d.subheader === 'filter') {\n\t\t\t\t\tconst filter = self.filterUiRoot ? self.filterUiRoot : { lst: [] }\n\t\t\t\t\tif (filter.lst.length === 0) {\n\t\t\t\t\t\t// Do not show number of samples at bottom of FILTER tab when no filter applied\n\t\t\t\t\t\treturn d.key === 'mid' ? 'NONE' : ''\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst n = self.samplecounts[self.filterJSON] != undefined ? '' + self.samplecounts[self.filterJSON] : ''\n\t\t\t\t\t\treturn d.key === 'mid' ? filter.lst.length : n\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\treturn d.key === 'mid' ? this.innerHTML : ' '\n\t\t\t\t}\n\t\t\t})\n\n\t\t// const visibleSubheaders = []\n\t\tfor (const key in self.dom.subheader) {\n\t\t\tself.dom.subheader[key].style(\n\t\t\t\t'display',\n\t\t\t\tself.activeTab == -1 ? 'none' : self.tabs[self.activeTab].subheader === key ? 'block' : 'none'\n\t\t\t)\n\t\t}\n\n\t\tif (self.opts.header_mode === 'with_cohortHtmlSelect') {\n\t\t\tself.dom.cohortSelect.selectAll('option').property('value', self.activeCohort)\n\t\t}\n\t}\n}\n\nfunction setInteractivity(self) {\n\tself.setTab = async (event, d) => {\n\t\t// a disabled tab is shown to advertise the capability but cannot be activated\n\t\tif (d.disabled) return\n\t\tif (d.colNum === self.activeTab && !self.searching) {\n\t\t\t// The about tab should not be hidden on double click with or without plots\n\t\t\tif (self.activeTab == 0) return\n\t\t\tself.prevCohort = self.activeCohort\n\t\t\tawait self.updateUI()\n\n\t\t\t// if the user double-clicks on the same tab, hide the subheader\n\t\t\tself.app.dispatch({ type: 'tab_set', activeTab: -1 })\n\t\t\treturn\n\t\t}\n\t\tself.activeTab = d.colNum\n\t\tself.searching = false\n\t\tself.app.dispatch({ type: 'tab_set', activeTab: self.activeTab })\n\t\tconst chartsIdx = self.subheaderKeys.indexOf('charts')\n\t\tif (self.activeTab == chartsIdx && self.activeCohort != -1 && !self.state.plots.length) {\n\t\t\t// show dictionary or default plot in charts tab if no other\n\t\t\t// plots have been created\n\t\t\tconst defaultChartType = self.state.termdbConfig.defaultChartType || 'dictionary'\n\t\t\tself.app.dispatch({\n\t\t\t\ttype: 'plot_create',\n\t\t\t\tid: getId(),\n\t\t\t\tconfig: { chartType: defaultChartType }\n\t\t\t})\n\t\t}\n\t}\n\n\tself.mouseover = (event, d) => {\n\t\tconst defaultActiveColor = self.state.termdbConfig.massNav?.activeColor || activeTabBgColor\n\t\tself.dom.tds.style('background-color', t => {\n\t\t\t//light yellow for inactive tabs and grey-yellow for this active tab\n\t\t\tif (t.colNum === d.colNum)\n\t\t\t\treturn self.activeTab == t.colNum\n\t\t\t\t\t? self.state.termdbConfig.massNav?.activeColorHover || activeTabBgColorHover\n\t\t\t\t\t: inactiveTabBgColorHover\n\t\t\treturn self.activeTab == t.colNum ? defaultActiveColor : 'transparent'\n\t\t})\n\t}\n\n\tself.mouseout = () => {\n\t\tconst defaultActiveColor = self.state.termdbConfig.massNav?.activeColor || activeTabBgColor\n\t\tself.dom.tds.style('background-color', t => (self.activeTab == t.colNum ? defaultActiveColor : 'transparent'))\n\t}\n\n\tself.getSessionFile = async event => {\n\t\t//Download mass-session-id file\n\t\tconst res = await dofetch3(`/massSession?id=${self.sessionId}`)\n\t\tconst a = document.createElement('a')\n\t\tconst dataStr = 'data:application/json;charset=utf-8,' + encodeURIComponent(JSON.stringify(res.state))\n\t\ta.setAttribute('href', dataStr)\n\t\ta.download = `${self.sessionId}.json`\n\t\ta.click()\n\t\ta.remove()\n\t}\n\n\tself.pickDatasetLabel = appState => {\n\t\tconst dslabel = appState.vocab.dslabel.toUpperCase()\n\t\treturn dslabel.length > 10 ? `${dslabel.slice(0, 10)}...` : dslabel\n\t}\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["event", "id", "d", "instanceNum", "event", "d", "cf", "prompt", "event", "setRenderers", "appState", "event"]
|
|
7
|
-
}
|