@sjcrh/proteinpaint-client 2.198.0 → 2.200.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.
Files changed (1066) hide show
  1. package/dist/2dmaf-RRV3ORZR.js +1373 -0
  2. package/dist/AIProjectAdmin-DKLEFCGX.js +958 -0
  3. package/dist/AppHeader-WQ2F7HZY.js +835 -0
  4. package/dist/BoxPlot-5JQCYENZ.js +1218 -0
  5. package/dist/BoxPlot-5JQCYENZ.js.map +7 -0
  6. package/dist/CorrelationVolcano-HR6IP2SZ.js +619 -0
  7. package/dist/DE-DAW6ZKM7.js +95 -0
  8. package/dist/DEinput-XCR4VMR3.js +409 -0
  9. package/dist/DEinput-XCR4VMR3.js.map +7 -0
  10. package/dist/DifferentialAnalysis-SETJAZEN.js +243 -0
  11. package/dist/DifferentialAnalysis-SETJAZEN.js.map +7 -0
  12. package/dist/Disco-QEBEVQS2.js +3392 -0
  13. package/dist/Disco.UI-OYVL7UBI.js +248 -0
  14. package/dist/Disco.UI-OYVL7UBI.js.map +7 -0
  15. package/dist/DmrPlot-CWBQDZL7.js +642 -0
  16. package/dist/GB-5PYCR4SV.js +1396 -0
  17. package/dist/GB-5PYCR4SV.js.map +7 -0
  18. package/dist/GSEA-6UKMI6GY.js +846 -0
  19. package/dist/GeneExpInput-2N62XM7Z.js +367 -0
  20. package/dist/GeneExpInput-2N62XM7Z.js.map +7 -0
  21. package/dist/Geomap-ANMR32HE.js +89 -0
  22. package/dist/HicApp-WHPUPHEM.js +2250 -0
  23. package/dist/IDCViewer-FWXRE4AX.js +10817 -0
  24. package/dist/IDCViewer-FWXRE4AX.js.map +7 -0
  25. package/dist/NumBinaryEditor-VG5KOGDA.js +271 -0
  26. package/dist/NumBinaryEditor.unit.spec-UCGFZS3P.js +286 -0
  27. package/dist/NumContEditor-J52RON3G.js +109 -0
  28. package/dist/NumContEditor.unit.spec-5GTWUJEL.js +169 -0
  29. package/dist/NumCustomBinEditor-GM2OJMOX.js +38 -0
  30. package/dist/NumCustomBinEditor.unit.spec-3PGJ25J4.js +284 -0
  31. package/dist/NumDiscreteEditor-2CAKT3Y4.js +179 -0
  32. package/dist/NumDiscreteEditor.unit.spec-XCWSJTRT.js +202 -0
  33. package/dist/NumRegularBinEditor-CZYITY5L.js +38 -0
  34. package/dist/NumRegularBinEditor.unit.spec-OUBZ5XB3.js +227 -0
  35. package/dist/NumSplineEditor-TWRL5AQQ.js +198 -0
  36. package/dist/NumSplineEditor.unit.spec-5P6NQZ3N.js +199 -0
  37. package/dist/NumericDensity-JSOFOEH2.js +38 -0
  38. package/dist/NumericDensity.unit.spec-REUKHMKK.js +221 -0
  39. package/dist/NumericHandler-UZOGKPKB.js +39 -0
  40. package/dist/NumericHandler.unit.spec-X2DAED4O.js +219 -0
  41. package/dist/ProteomeInput-GBVCLNS7.js +394 -0
  42. package/dist/ProteomeInput-GBVCLNS7.js.map +7 -0
  43. package/dist/RunChart2-N4JPWNVV.js +758 -0
  44. package/dist/RunChart2-N4JPWNVV.js.map +7 -0
  45. package/dist/SC-RCZT5BRP.js +1112 -0
  46. package/dist/SC-RCZT5BRP.js.map +7 -0
  47. package/dist/Volcano-2BQ6SYHO.js +1404 -0
  48. package/dist/Volcano-2BQ6SYHO.js.map +7 -0
  49. package/dist/WSIViewer-UDA4WIRT.js +48562 -0
  50. package/dist/WsiSamplesPlot-DYSFMD22.js +165 -0
  51. package/dist/adSandbox-5BUDCAER.js +38 -0
  52. package/dist/animatedBubbleChart-N6MBJ4X3.js +553 -0
  53. package/dist/animatedBubbleChart-N6MBJ4X3.js.map +7 -0
  54. package/dist/app-O64TGDFH.js +37 -0
  55. package/dist/app-Y2STUISK.js +49 -0
  56. package/dist/app.js +23 -23
  57. package/dist/bam-2EOABVGT.js +859 -0
  58. package/dist/bam-2EOABVGT.js.map +7 -0
  59. package/dist/barchart-UHCTYRMJ.js +47 -0
  60. package/dist/barchart.data-LSK2P2PR.js +21 -0
  61. package/dist/barchart.events-Y4H2GADS.js +47 -0
  62. package/dist/barchart.integration.spec-BFGZFECA.js +2243 -0
  63. package/dist/barchart.integration.spec-BFGZFECA.js.map +7 -0
  64. package/dist/barchart2-VIZKZRMP.js +314 -0
  65. package/dist/bars.renderer-54UCFLJS.js +12 -0
  66. package/dist/block-BGSSF6XP.js +6255 -0
  67. package/dist/block.init-H7RKUIHG.js +38 -0
  68. package/dist/block.mds.expressionrank-MA3HGT7S.js +359 -0
  69. package/dist/block.mds.geneboxplot-CWT5DM5T.js +828 -0
  70. package/dist/block.mds.junction-P4I7O73X.js +1545 -0
  71. package/dist/block.mds.svcnv-NSPEY43S.js +6801 -0
  72. package/dist/block.svg-DP4G3LNQ.js +164 -0
  73. package/dist/block.tk.aicheck-EBLTOWKZ.js +283 -0
  74. package/dist/block.tk.ase-X7WKQOFS.js +365 -0
  75. package/dist/block.tk.bam-OIP3TS3N.js +1906 -0
  76. package/dist/block.tk.bedgraphdot-2DDF55J3.js +384 -0
  77. package/dist/block.tk.bigwig.ui-S2SMAEXM.js +211 -0
  78. package/dist/block.tk.bigwig.ui-S2SMAEXM.js.map +7 -0
  79. package/dist/block.tk.hicstraw-4OIG4TBZ.js +823 -0
  80. package/dist/block.tk.junction-52OWEQUN.js +2364 -0
  81. package/dist/block.tk.junction.textmatrixui-64YOSZLW.js +199 -0
  82. package/dist/block.tk.ld-3AMNHBDY.js +99 -0
  83. package/dist/block.tk.menu-4724DJXL.js +1029 -0
  84. package/dist/block.tk.pgv-2SIOPWYI.js +944 -0
  85. package/dist/brainImaging-D43CQQN6.js +423 -0
  86. package/dist/brainImaging-D43CQQN6.js.map +7 -0
  87. package/dist/brainRegions-HJ2VGL3L.js +221 -0
  88. package/dist/bubbleHeatmap-IL44M4QZ.js +383 -0
  89. package/dist/bubbleHeatmap-IL44M4QZ.js.map +7 -0
  90. package/dist/cellTypeBubbleHeatmap-NQP7RCZO.js +283 -0
  91. package/dist/cellTypeBubbleHeatmap-NQP7RCZO.js.map +7 -0
  92. package/dist/chunk-26APRXD3.js +254 -0
  93. package/dist/chunk-2GLA2SWU.js +160 -0
  94. package/dist/chunk-2GLA2SWU.js.map +7 -0
  95. package/dist/chunk-2KXLYFAO.js +4085 -0
  96. package/dist/chunk-3BGFM7Q4.js +1275 -0
  97. package/dist/chunk-3SHZTAGF.js +193 -0
  98. package/dist/chunk-3SHZTAGF.js.map +7 -0
  99. package/dist/chunk-46X6AQ7Z.js +123 -0
  100. package/dist/chunk-46X6AQ7Z.js.map +7 -0
  101. package/dist/chunk-4FQYRDZS.js +276 -0
  102. package/dist/chunk-4FQYRDZS.js.map +7 -0
  103. package/dist/chunk-4HZN6PMU.js +129 -0
  104. package/dist/chunk-4KRGCOTL.js +479 -0
  105. package/dist/chunk-4KRGCOTL.js.map +7 -0
  106. package/dist/chunk-4WF3XDQP.js +220 -0
  107. package/dist/chunk-4WF3XDQP.js.map +7 -0
  108. package/dist/chunk-5DMVORBB.js +98 -0
  109. package/dist/chunk-5QMBB4SK.js +1245 -0
  110. package/dist/chunk-5R63Q5KH.js +1628 -0
  111. package/dist/chunk-5RVA43MN.js +274 -0
  112. package/dist/chunk-5RVA43MN.js.map +7 -0
  113. package/dist/chunk-5T3MOOEJ.js +379 -0
  114. package/dist/chunk-5T3MOOEJ.js.map +7 -0
  115. package/dist/chunk-5T3ZDRTS.js +70 -0
  116. package/dist/chunk-5T3ZDRTS.js.map +7 -0
  117. package/dist/chunk-5ZTVJSYI.js +834 -0
  118. package/dist/chunk-5ZTVJSYI.js.map +7 -0
  119. package/dist/chunk-6JYQGZ3Y.js +446 -0
  120. package/dist/chunk-6OUBUUC2.js +626 -0
  121. package/dist/chunk-6OUBUUC2.js.map +7 -0
  122. package/dist/chunk-6PNPHACF.js +1652 -0
  123. package/dist/chunk-6PNPHACF.js.map +7 -0
  124. package/dist/chunk-6QCYT6G2.js +467 -0
  125. package/dist/chunk-7JRDJNLR.js +263 -0
  126. package/dist/chunk-7JRDJNLR.js.map +7 -0
  127. package/dist/chunk-7PIHRWGG.js +102 -0
  128. package/dist/chunk-7PIHRWGG.js.map +7 -0
  129. package/dist/chunk-7PJNKPQB.js +275 -0
  130. package/dist/chunk-7PJNKPQB.js.map +7 -0
  131. package/dist/chunk-AGLAYNXP.js +170 -0
  132. package/dist/chunk-AGLAYNXP.js.map +7 -0
  133. package/dist/chunk-B4ESQLPB.js +140 -0
  134. package/dist/chunk-B7VDZ6VF.js +399 -0
  135. package/dist/chunk-B7VDZ6VF.js.map +7 -0
  136. package/dist/chunk-BGTBRAJ6.js +50 -0
  137. package/dist/chunk-BGTBRAJ6.js.map +7 -0
  138. package/dist/chunk-BNAO6N5X.js +2899 -0
  139. package/dist/chunk-BNAO6N5X.js.map +7 -0
  140. package/dist/chunk-BQHPJY2M.js +347 -0
  141. package/dist/chunk-BQHPJY2M.js.map +7 -0
  142. package/dist/chunk-BZTWTH4Y.js +87 -0
  143. package/dist/chunk-BZTWTH4Y.js.map +7 -0
  144. package/dist/chunk-CY4RQ5L6.js +1710 -0
  145. package/dist/chunk-CY4RQ5L6.js.map +7 -0
  146. package/dist/chunk-D565DNJD.js +236 -0
  147. package/dist/chunk-D565DNJD.js.map +7 -0
  148. package/dist/chunk-DH3LAQKT.js +384 -0
  149. package/dist/chunk-DH3LAQKT.js.map +7 -0
  150. package/dist/chunk-E3VF4RHJ.js +381 -0
  151. package/dist/chunk-EGPNRSPF.js +292 -0
  152. package/dist/chunk-FACITNG5.js +142 -0
  153. package/dist/chunk-GNS6CQMA.js +119 -0
  154. package/dist/chunk-GNS6CQMA.js.map +7 -0
  155. package/dist/chunk-H3N4KYKL.js +2327 -0
  156. package/dist/chunk-H3VWJH4U.js +14 -0
  157. package/dist/chunk-HEVKBSN6.js +222 -0
  158. package/dist/chunk-HQUYAZQY.js +514 -0
  159. package/dist/chunk-IUBBQPO2.js +146 -0
  160. package/dist/chunk-IUBBQPO2.js.map +7 -0
  161. package/dist/chunk-J4USU73L.js +26 -0
  162. package/dist/chunk-JH73IL4C.js +135 -0
  163. package/dist/chunk-JVPWIVDT.js +1812 -0
  164. package/dist/chunk-JVPWIVDT.js.map +7 -0
  165. package/dist/chunk-KU7YH7MV.js +217 -0
  166. package/dist/chunk-KZILNGAV.js +187 -0
  167. package/dist/chunk-KZILNGAV.js.map +7 -0
  168. package/dist/chunk-M66VDGSH.js +272 -0
  169. package/dist/chunk-MJN6RDXB.js +302 -0
  170. package/dist/chunk-MPNEZ6EL.js +31 -0
  171. package/dist/chunk-MPSLUEI4.js +314 -0
  172. package/dist/chunk-NIXFCC7X.js +368 -0
  173. package/dist/chunk-NODQZTWK.js +276 -0
  174. package/dist/chunk-NRYHIWBS.js +1942 -0
  175. package/dist/chunk-NRYHIWBS.js.map +7 -0
  176. package/dist/chunk-NUWJ4RN7.js +465 -0
  177. package/dist/chunk-NUWJ4RN7.js.map +7 -0
  178. package/dist/chunk-NVTJ5AUT.js +1102 -0
  179. package/dist/chunk-NZRMHM76.js +158 -0
  180. package/dist/chunk-NZRMHM76.js.map +7 -0
  181. package/dist/chunk-OOWXMY7U.js +55 -0
  182. package/dist/chunk-OTTMHVYH.js +787 -0
  183. package/dist/chunk-Q5RDQNIT.js +777 -0
  184. package/dist/chunk-QDX2XUNF.js +58 -0
  185. package/dist/chunk-QYXCHZ6U.js +4282 -0
  186. package/dist/chunk-QYXCHZ6U.js.map +7 -0
  187. package/dist/chunk-R6NM2HSH.js +556 -0
  188. package/dist/chunk-R6NM2HSH.js.map +7 -0
  189. package/dist/chunk-RJOY6A74.js +56 -0
  190. package/dist/chunk-RJOY6A74.js.map +7 -0
  191. package/dist/chunk-ROMW4AK2.js +102 -0
  192. package/dist/chunk-RR5U35N7.js +230 -0
  193. package/dist/chunk-RVKADD4L.js +148 -0
  194. package/dist/chunk-S5ZCK44Z.js +54 -0
  195. package/dist/chunk-SNRIVNQ3.js +176 -0
  196. package/dist/chunk-STI7BO3P.js +2681 -0
  197. package/dist/chunk-STI7BO3P.js.map +7 -0
  198. package/dist/chunk-TAM7UCAI.js +263 -0
  199. package/dist/chunk-TDKMBQSM.js +5070 -0
  200. package/dist/chunk-TDKMBQSM.js.map +7 -0
  201. package/dist/chunk-TKW5TW4Z.js +21449 -0
  202. package/dist/chunk-TKW5TW4Z.js.map +7 -0
  203. package/dist/chunk-TQTYW66I.js +2784 -0
  204. package/dist/chunk-TQTYW66I.js.map +7 -0
  205. package/dist/chunk-U3NTH4CS.js +54 -0
  206. package/dist/chunk-U3NTH4CS.js.map +7 -0
  207. package/dist/chunk-UEGQVQD6.js +34 -0
  208. package/dist/chunk-UEGQVQD6.js.map +7 -0
  209. package/dist/chunk-UJELJXJG.js +2110 -0
  210. package/dist/chunk-ULESDMUT.js +480 -0
  211. package/dist/chunk-UUKSL7QC.js +134 -0
  212. package/dist/chunk-UUKSL7QC.js.map +7 -0
  213. package/dist/chunk-VUPWQCDR.js +194 -0
  214. package/dist/chunk-VUPWQCDR.js.map +7 -0
  215. package/dist/chunk-W76X6W73.js +100 -0
  216. package/dist/chunk-W7OS7BNM.js +203 -0
  217. package/dist/chunk-WPHUM5S5.js +98 -0
  218. package/dist/chunk-WPHUM5S5.js.map +7 -0
  219. package/dist/chunk-WTTD6DUL.js +6364 -0
  220. package/dist/chunk-WXPFMVU6.js +299 -0
  221. package/dist/chunk-XNWUI5VL.js +37 -0
  222. package/dist/chunk-XNWUI5VL.js.map +7 -0
  223. package/dist/chunk-YBLTSYQV.js +216 -0
  224. package/dist/chunk-Z7VDFWIP.js +126 -0
  225. package/dist/chunk-Z7VDFWIP.js.map +7 -0
  226. package/dist/chunk-ZEKIUYN3.js +448 -0
  227. package/dist/chunk-ZEKIUYN3.js.map +7 -0
  228. package/dist/cohort-OWLNJZVH.js +75 -0
  229. package/dist/cohort-OWLNJZVH.js.map +7 -0
  230. package/dist/condition-L2IXP6WH.js +332 -0
  231. package/dist/controls-2S5QVWUC.js +39 -0
  232. package/dist/controls.config-3AJKR4ZZ.js +39 -0
  233. package/dist/correlation-DXTAWSLU.js +102 -0
  234. package/dist/cuminc-WQB6FHVS.js +1148 -0
  235. package/dist/cuminc-WQB6FHVS.js.map +7 -0
  236. package/dist/cuminc.integration.spec-WAYRLHUH.js +678 -0
  237. package/dist/customdata.inputui-7WH2NJGB.js +289 -0
  238. package/dist/dataDownload-HM4UYOBO.js +330 -0
  239. package/dist/dataDownload.integration.spec-F5CO4BWA.js +193 -0
  240. package/dist/databrowser.ui-E2YOG3L4.js +432 -0
  241. package/dist/databrowser.ui-E2YOG3L4.js.map +7 -0
  242. package/dist/dictionary-EEPTFDYD.js +118 -0
  243. package/dist/dnaMethylation-N3WNK6XA.js +38 -0
  244. package/dist/dnaMethylation.integration.spec-AIYRTFMR.js +203 -0
  245. package/dist/dnaMethylation.integration.spec-AIYRTFMR.js.map +7 -0
  246. package/dist/dofetch-YKYPEJTQ.js +51 -0
  247. package/dist/e2pca-JEZIGVB2.js +350 -0
  248. package/dist/ep-5FMH2MLV.js +1256 -0
  249. package/dist/expclust.gdc.spec-FR26VSUA.js +307 -0
  250. package/dist/facet-5YYY3MUN.js +521 -0
  251. package/dist/facet-5YYY3MUN.js.map +7 -0
  252. package/dist/gb-WGEVO7L2.js +88 -0
  253. package/dist/geneExpClustering-DHE6XJHV.js +249 -0
  254. package/dist/geneExpClustering-DHE6XJHV.js.map +7 -0
  255. package/dist/geneExpression-5NWQXMJ3.js +313 -0
  256. package/dist/geneExpression-VWUMM2LU.js +38 -0
  257. package/dist/geneExpression.unit.spec-HBU3WTZ4.js +102 -0
  258. package/dist/geneExpression.unit.spec-HBU3WTZ4.js.map +7 -0
  259. package/dist/geneORA-3VWFWDYI.js +278 -0
  260. package/dist/geneRanking-PKDVD5OD.js +553 -0
  261. package/dist/geneVariant-IFIJQXH4.js +39 -0
  262. package/dist/geneVariant-WZSOG4GI.js +41 -0
  263. package/dist/geneVariant.integration.spec-6KQMWVHR.js +198 -0
  264. package/dist/genefusion.ui-C4NTALL3.js +308 -0
  265. package/dist/genefusion.ui-C4NTALL3.js.map +7 -0
  266. package/dist/geneset-RJAULSKC.js +208 -0
  267. package/dist/genomeBrowser.spec-42OTTMGO.js +281 -0
  268. package/dist/grin2-26O6YDDY.js +75 -0
  269. package/dist/grin2-FT5BQJMB.js +1143 -0
  270. package/dist/hierCluster-GJPPMFNR.js +59 -0
  271. package/dist/hierCluster-HMJF3PBE.js +63 -0
  272. package/dist/hierCluster.config-TAS7XKTU.js +40 -0
  273. package/dist/hierCluster.integration.spec-RLHQKX65.js +488 -0
  274. package/dist/hierCluster.integration.spec-RLHQKX65.js.map +7 -0
  275. package/dist/hierCluster.interactivity-IKTAJ6CU.js +54 -0
  276. package/dist/hierCluster.renderers-I6WFZRNW.js +21 -0
  277. package/dist/imagePlot-N4OXNMVA.js +163 -0
  278. package/dist/importPlot-VMYXDP66.js +8 -0
  279. package/dist/isoformExpression-2KV64KMN.js +40 -0
  280. package/dist/isoformExpression.unit.spec-RG2VWEMG.js +242 -0
  281. package/dist/isoformExpression.unit.spec-RG2VWEMG.js.map +7 -0
  282. package/dist/junction-VO4IGMW2.js +41 -0
  283. package/dist/junction.customTerm-EFMHHVWA.js +18 -0
  284. package/dist/junction.unit.spec-NB24MR2B.js +187 -0
  285. package/dist/junction.unit.spec-NB24MR2B.js.map +7 -0
  286. package/dist/launch.adhoc-R3MO3VXK.js +42 -0
  287. package/dist/leftlabel.sample-SI6KMULD.js +263 -0
  288. package/dist/leftlabel.sample-SI6KMULD.js.map +7 -0
  289. package/dist/legacyDataset-4BXYHQTS.js +119 -0
  290. package/dist/lollipop-XIVE4ANX.js +171 -0
  291. package/dist/maf-WRHD4OJF.js +459 -0
  292. package/dist/maftimeline-IE6YKV7Y.js +593 -0
  293. package/dist/matrix-ALBCAZP5.js +58 -0
  294. package/dist/matrix-W72XRUZD.js +63 -0
  295. package/dist/matrix.cells-DEEUWC74.js +28 -0
  296. package/dist/matrix.config-JYXQOXDT.js +41 -0
  297. package/dist/matrix.data-ENXNM6RP.js +25 -0
  298. package/dist/matrix.groups-EXSNNESB.js +27 -0
  299. package/dist/matrix.integration.spec-BW6U6PIW.js +3072 -0
  300. package/dist/matrix.interactivity-G6AL566T.js +42 -0
  301. package/dist/matrix.layout-UBUPIJ3R.js +44 -0
  302. package/dist/matrix.legend-S3P4F2DG.js +22 -0
  303. package/dist/matrix.renderers-IXFGXHJQ.js +38 -0
  304. package/dist/matrix.serieses-THHXUAPM.js +21 -0
  305. package/dist/matrix.sort-WJV6LIZI.js +27 -0
  306. package/dist/matrix.sort.unit.spec-LGMIL2LR.js +472 -0
  307. package/dist/matrix.sorterUi-VXVCOKEZ.js +18 -0
  308. package/dist/matrix.sorterUi.unit.spec-CWSEJ62U.js +342 -0
  309. package/dist/mavb-SXGKASQ5.js +732 -0
  310. package/dist/mds.fimo-EDOT3TDN.js +518 -0
  311. package/dist/mds.samplescatterplot-IXHNABKB.js +1550 -0
  312. package/dist/mds.survivalplot-KTTMHHII.js +483 -0
  313. package/dist/numericDictTermCluster-H4JSPW22.js +65 -0
  314. package/dist/oncomatrix-O4EMNUOT.js +295 -0
  315. package/dist/oncomatrix.spec-BME6CQWF.js +448 -0
  316. package/dist/plot.2dvaf-FDM4KXGT.js +377 -0
  317. package/dist/plot.app-UNUXG7ND.js +41 -0
  318. package/dist/plot.barplot-R333TMG2.js +102 -0
  319. package/dist/plot.boxplot-KQTYGUN3.js +152 -0
  320. package/dist/plot.brainImaging-YBYMHCEG.js +51 -0
  321. package/dist/plot.disco-CMDKRSOM.js +102 -0
  322. package/dist/plot.dzi-YAZA6RQS.js +33 -0
  323. package/dist/plot.ssgq-YKCOEXZP.js +139 -0
  324. package/dist/plot.vaf2cov-3TLMTFZS.js +259 -0
  325. package/dist/plot.wsi-7ADVYTQS.js +36 -0
  326. package/dist/polar2-O5SHVLP4.js +237 -0
  327. package/dist/polar2-O5SHVLP4.js.map +7 -0
  328. package/dist/profileForms-RLB6SMPQ.js +940 -0
  329. package/dist/profileForms-RLB6SMPQ.js.map +7 -0
  330. package/dist/profilePlot-AP52VLLO.js +54 -0
  331. package/dist/proteinView-S7WDBMQU.js +1568 -0
  332. package/dist/proteinView-S7WDBMQU.js.map +7 -0
  333. package/dist/proteomeCohortCompare-ERVUM7RO.js +799 -0
  334. package/dist/proteomeCohortCompare-ERVUM7RO.js.map +7 -0
  335. package/dist/pseudbulk.unit.spec-VSH7IM3R.js +91 -0
  336. package/dist/pseudbulk.unit.spec-VSH7IM3R.js.map +7 -0
  337. package/dist/pseudobulk-7UKRLKQI.js +40 -0
  338. package/dist/qualitative-2D7MC4V5.js +43 -0
  339. package/dist/radar2-ELVGQFZE.js +332 -0
  340. package/dist/radar2-ELVGQFZE.js.map +7 -0
  341. package/dist/radarFacility2-SDAZHGNG.js +340 -0
  342. package/dist/radarFacility2-SDAZHGNG.js.map +7 -0
  343. package/dist/regression-CE54AQMY.js +56 -0
  344. package/dist/regression.inputs-SMC5CNPY.js +48 -0
  345. package/dist/regression.inputs.term-XS54IQC2.js +48 -0
  346. package/dist/regression.inputs.values.table-LNPM3MX5.js +45 -0
  347. package/dist/regression.integration.spec-6QSMYPWJ.js +784 -0
  348. package/dist/regression.results-25ZRRDEE.js +40 -0
  349. package/dist/regression.spec-EDWHFRPY.js +708 -0
  350. package/dist/render-SEB6GFXQ.js +38 -0
  351. package/dist/report-U6L3KBYG.js +222 -0
  352. package/dist/sampleView-QAAJ26KT.js +48 -0
  353. package/dist/samplelst-KYRXJSZN.js +111 -0
  354. package/dist/samplematrix-STLF2QA5.js +2198 -0
  355. package/dist/sc-HL6YSMDX.js +86 -0
  356. package/dist/scatter-BSGDMOC2.js +851 -0
  357. package/dist/selectGenomeWithTklst-4NHQDTE6.js +134 -0
  358. package/dist/singleCellCellType-3E2IU42J.js +38 -0
  359. package/dist/singleCellCellType.unit.spec-MC7ZRSMW.js +159 -0
  360. package/dist/singleCellCellType.unit.spec-MC7ZRSMW.js.map +7 -0
  361. package/dist/singleCellGeneExpression-53UUGYTK.js +38 -0
  362. package/dist/singleCellGeneExpression.unit.spec-QSLTXHFE.js +153 -0
  363. package/dist/singleCellGeneExpression.unit.spec-QSLTXHFE.js.map +7 -0
  364. package/dist/singleCellPlot-JDSARDRV.js +54 -0
  365. package/dist/singlecell-IJR7BJYT.js +1572 -0
  366. package/dist/singlecell-OK6GJFWL.js +86 -0
  367. package/dist/snp-H4KJEEOE.js +38 -0
  368. package/dist/snp.unit.spec-2Y4A3XYI.js +176 -0
  369. package/dist/snplocus-4GG6VTWX.js +208 -0
  370. package/dist/spliceevent.a53ss.diagram-JZNRC5UC.js +151 -0
  371. package/dist/spliceevent.exonskip.diagram-H54N7ZKY.js +283 -0
  372. package/dist/spliceevent.noeventdiagram-II753XAK.js +460 -0
  373. package/dist/ssGSEA-JPJ3C4JI.js +38 -0
  374. package/dist/ssGSEA.unit.spec-45F5OCDK.js +88 -0
  375. package/dist/studyCatalog-O3VGIKDM.js +358 -0
  376. package/dist/studyCatalog-O3VGIKDM.js.map +7 -0
  377. package/dist/summarizeCnvGeneexp-55DNXHXA.js +163 -0
  378. package/dist/summarizeGeneexpSurvival-VLO4DC5M.js +110 -0
  379. package/dist/summarizeGeneexpSurvival-VLO4DC5M.js.map +7 -0
  380. package/dist/summarizeMutationCnv-QX7BADYL.js +164 -0
  381. package/dist/summarizeMutationDiagnosis-MHFM7RX6.js +40 -0
  382. package/dist/summarizeMutationSurvival-G4KHSUBN.js +99 -0
  383. package/dist/summary-PJYRCQNY.js +49 -0
  384. package/dist/summary.integration.spec-KPKROD6L.js +414 -0
  385. package/dist/summaryInput-TOAL53EP.js +231 -0
  386. package/dist/summaryInput-TOAL53EP.js.map +7 -0
  387. package/dist/sunburst-IGIV2RBE.js +284 -0
  388. package/dist/survival-DINCIWW7.js +58 -0
  389. package/dist/survival-RKV5BPDK.js +1239 -0
  390. package/dist/survival-RKV5BPDK.js.map +7 -0
  391. package/dist/survival.integration.spec-7ZYBBZKT.js +958 -0
  392. package/dist/survival.integration.spec-7ZYBBZKT.js.map +7 -0
  393. package/dist/svgraph-EUEZWGVR.js +1387 -0
  394. package/dist/svmr-B24LODSC.js +3842 -0
  395. package/dist/table-XSJJ3UZV.js +200 -0
  396. package/dist/termCollection-IAB3425K.js +38 -0
  397. package/dist/termCollection-LGEGHZSJ.js +257 -0
  398. package/dist/termCollection-LGEGHZSJ.js.map +7 -0
  399. package/dist/termCollection.unit.spec-4TIRHC44.js +304 -0
  400. package/dist/termCollection.unit.spec-4TIRHC44.js.map +7 -0
  401. package/dist/termCollectionFractionSelection-35YKAOUY.js +47 -0
  402. package/dist/termCollectionFractionSelection.unit.spec-SUFEIKJZ.js +193 -0
  403. package/dist/termCollectionFractionSelection.unit.spec-SUFEIKJZ.js.map +7 -0
  404. package/dist/tk-25EJJDRK.js +46 -0
  405. package/dist/tk-4E3XJ7CO.js +1127 -0
  406. package/dist/tk-4E3XJ7CO.js.map +7 -0
  407. package/dist/tp.ui-VGA62NFM.js +1459 -0
  408. package/dist/tvs.cohort-F7OJI2MH.js +26 -0
  409. package/dist/tvs.cohort-F7OJI2MH.js.map +7 -0
  410. package/dist/tvs.density-G56327WY.js +19 -0
  411. package/dist/tvs.dt-DFW36WKO.js +39 -0
  412. package/dist/tvs.dtcnv.categorical-ZP33EO3A.js +40 -0
  413. package/dist/tvs.dtcnv.continuous-FJTMQF4J.js +72 -0
  414. package/dist/tvs.dtfusion-FTDQWNKM.js +40 -0
  415. package/dist/tvs.dtitd-W5VEECJ2.js +40 -0
  416. package/dist/tvs.dtsnvindel-UOXSLCDZ.js +40 -0
  417. package/dist/tvs.dtsv-HWCPRVBO.js +40 -0
  418. package/dist/tvs.numeric-7TGKWQYU.js +22 -0
  419. package/dist/tvs.samplelst-OWD22ITS.js +104 -0
  420. package/dist/tvs.termCollection-27BWABYK.js +129 -0
  421. package/dist/tvs.termCollection-27BWABYK.js.map +7 -0
  422. package/dist/violin-2IAVZGFF.js +46 -0
  423. package/dist/violin.integration.spec-JVODKUCL.js +1425 -0
  424. package/dist/violin.integration.spec-JVODKUCL.js.map +7 -0
  425. package/dist/violin.interactivity-STOCZMVN.js +38 -0
  426. package/dist/violin.renderer-MKDTJ3EX.js +40 -0
  427. package/dist/violin.renderer-MKDTJ3EX.js.map +7 -0
  428. package/dist/vocabulary-4IHU6DNN.js +41 -0
  429. package/dist/vocabulary-4IHU6DNN.js.map +7 -0
  430. package/package.json +3 -6
  431. package/dist/2dmaf-R3PFZNRN.js +0 -1373
  432. package/dist/AIProjectAdmin-DM3KG6SR.js +0 -958
  433. package/dist/AppHeader-6DZQ6YZX.js +0 -835
  434. package/dist/BoxPlot-76NINVX4.js +0 -1217
  435. package/dist/BoxPlot-76NINVX4.js.map +0 -7
  436. package/dist/CorrelationVolcano-U5UMJNH5.js +0 -619
  437. package/dist/DE-AXNYWIQK.js +0 -95
  438. package/dist/DEinput-JH6YY6LS.js +0 -301
  439. package/dist/DEinput-JH6YY6LS.js.map +0 -7
  440. package/dist/DifferentialAnalysis-25P4CGIY.js +0 -242
  441. package/dist/DifferentialAnalysis-25P4CGIY.js.map +0 -7
  442. package/dist/Disco-NVMLF3BK.js +0 -3392
  443. package/dist/Disco.UI-C7CZINUQ.js +0 -249
  444. package/dist/Disco.UI-C7CZINUQ.js.map +0 -7
  445. package/dist/DmrPlot-WROR4ENM.js +0 -642
  446. package/dist/GB-JUABODPH.js +0 -1394
  447. package/dist/GB-JUABODPH.js.map +0 -7
  448. package/dist/GSEA-Y5R2THIJ.js +0 -846
  449. package/dist/GeneExpInput-JDU6EI7K.js +0 -367
  450. package/dist/GeneExpInput-JDU6EI7K.js.map +0 -7
  451. package/dist/Geomap-J763OK2F.js +0 -89
  452. package/dist/HicApp-UNIJLH4B.js +0 -2250
  453. package/dist/IDCViewer-KVPCIUDW.js +0 -10803
  454. package/dist/IDCViewer-KVPCIUDW.js.map +0 -7
  455. package/dist/NumBinaryEditor-WMN2GGO4.js +0 -271
  456. package/dist/NumBinaryEditor.unit.spec-TAMXV6SE.js +0 -286
  457. package/dist/NumContEditor-XYIOJY4E.js +0 -109
  458. package/dist/NumContEditor.unit.spec-WDZ75BHO.js +0 -169
  459. package/dist/NumCustomBinEditor-5SY3C4TY.js +0 -38
  460. package/dist/NumCustomBinEditor.unit.spec-XHTAIXR3.js +0 -284
  461. package/dist/NumDiscreteEditor-NRDRX4FD.js +0 -179
  462. package/dist/NumDiscreteEditor.unit.spec-2CJW7OAT.js +0 -202
  463. package/dist/NumRegularBinEditor-DUDVTNDC.js +0 -38
  464. package/dist/NumRegularBinEditor.unit.spec-H3GNQHMN.js +0 -227
  465. package/dist/NumSplineEditor-7Q4AC7KH.js +0 -198
  466. package/dist/NumSplineEditor.unit.spec-YRZK5PH5.js +0 -199
  467. package/dist/NumericDensity-NTNWUESG.js +0 -38
  468. package/dist/NumericDensity.unit.spec-5I5U6T6P.js +0 -221
  469. package/dist/NumericHandler-MEW2KMPX.js +0 -39
  470. package/dist/NumericHandler.unit.spec-JFX4BPRG.js +0 -219
  471. package/dist/ProteomeInput-K2ZHR2U6.js +0 -395
  472. package/dist/ProteomeInput-K2ZHR2U6.js.map +0 -7
  473. package/dist/RunChart2-BEBDU7RC.js +0 -758
  474. package/dist/RunChart2-BEBDU7RC.js.map +0 -7
  475. package/dist/SC-XCBFJVUJ.js +0 -1120
  476. package/dist/SC-XCBFJVUJ.js.map +0 -7
  477. package/dist/Volcano-4Y4TP3UX.js +0 -1385
  478. package/dist/Volcano-4Y4TP3UX.js.map +0 -7
  479. package/dist/WSIViewer-ZLQU62PD.js +0 -48562
  480. package/dist/WsiSamplesPlot-JMBSITOM.js +0 -165
  481. package/dist/adSandbox-664IRCRL.js +0 -38
  482. package/dist/animatedBubbleChart-TX7NW34K.js +0 -555
  483. package/dist/animatedBubbleChart-TX7NW34K.js.map +0 -7
  484. package/dist/app-63WJ3BMP.js +0 -37
  485. package/dist/app-77FIZHCG.js +0 -49
  486. package/dist/bam-IETNVAYD.js +0 -860
  487. package/dist/bam-IETNVAYD.js.map +0 -7
  488. package/dist/barchart-YUVXJNH4.js +0 -47
  489. package/dist/barchart.data-P4EIQXGE.js +0 -22
  490. package/dist/barchart.events-JPVCLTIG.js +0 -47
  491. package/dist/barchart.integration.spec-ZH7DEQI2.js +0 -2196
  492. package/dist/barchart.integration.spec-ZH7DEQI2.js.map +0 -7
  493. package/dist/barchart2-XO2FG76J.js +0 -314
  494. package/dist/bars.renderer-AUIWUJDH.js +0 -12
  495. package/dist/block-NBTCOT3H.js +0 -6255
  496. package/dist/block.init-X7Y2EEVR.js +0 -38
  497. package/dist/block.mds.expressionrank-BIAOZIZ3.js +0 -359
  498. package/dist/block.mds.geneboxplot-CNICDVLK.js +0 -828
  499. package/dist/block.mds.junction-PQXCTSUI.js +0 -1545
  500. package/dist/block.mds.svcnv-32KMVTCT.js +0 -6801
  501. package/dist/block.svg-LRTOYQK2.js +0 -164
  502. package/dist/block.tk.aicheck-HDV7ZIUD.js +0 -283
  503. package/dist/block.tk.ase-JIDWKMYI.js +0 -365
  504. package/dist/block.tk.bam-5X3OS5HB.js +0 -1906
  505. package/dist/block.tk.bedgraphdot-T7JX7YQL.js +0 -384
  506. package/dist/block.tk.bigwig.ui-OSAYEBAE.js +0 -212
  507. package/dist/block.tk.bigwig.ui-OSAYEBAE.js.map +0 -7
  508. package/dist/block.tk.hicstraw-DEY3VQFK.js +0 -823
  509. package/dist/block.tk.junction-7UAFEZSJ.js +0 -2364
  510. package/dist/block.tk.junction.textmatrixui-27LHS33U.js +0 -199
  511. package/dist/block.tk.ld-DF2PI7OO.js +0 -99
  512. package/dist/block.tk.menu-L2D5KBIV.js +0 -1029
  513. package/dist/block.tk.pgv-QO56SKBV.js +0 -944
  514. package/dist/brainImaging-NIPQWFWO.js +0 -423
  515. package/dist/brainImaging-NIPQWFWO.js.map +0 -7
  516. package/dist/brainRegions-ZNZ2WHSU.js +0 -221
  517. package/dist/bubbleHeatmap-ERWNEKZB.js +0 -383
  518. package/dist/bubbleHeatmap-ERWNEKZB.js.map +0 -7
  519. package/dist/chunk-2GYWFQML.js +0 -299
  520. package/dist/chunk-2HYJ4GDH.js +0 -50
  521. package/dist/chunk-2HYJ4GDH.js.map +0 -7
  522. package/dist/chunk-2MG6XE6R.js +0 -272
  523. package/dist/chunk-2MG6XE6R.js.map +0 -7
  524. package/dist/chunk-2X6W4E3W.js +0 -1507
  525. package/dist/chunk-2X6W4E3W.js.map +0 -7
  526. package/dist/chunk-33K5PA52.js +0 -54
  527. package/dist/chunk-37XDBPOP.js +0 -26
  528. package/dist/chunk-3EWB3246.js +0 -58
  529. package/dist/chunk-3RSKOPIY.js +0 -100
  530. package/dist/chunk-3XVVN66M.js +0 -4085
  531. package/dist/chunk-4DPVT4NE.js +0 -1102
  532. package/dist/chunk-4IH7DORZ.js +0 -98
  533. package/dist/chunk-4QNBFIIR.js +0 -399
  534. package/dist/chunk-4QNBFIIR.js.map +0 -7
  535. package/dist/chunk-4STKL6SR.js +0 -217
  536. package/dist/chunk-4TZIVSL5.js +0 -34
  537. package/dist/chunk-4TZIVSL5.js.map +0 -7
  538. package/dist/chunk-5ABGFJSP.js +0 -467
  539. package/dist/chunk-5AZNP47R.js +0 -302
  540. package/dist/chunk-5RL2OHXX.js +0 -5070
  541. package/dist/chunk-5RL2OHXX.js.map +0 -7
  542. package/dist/chunk-5VOPABBA.js +0 -20941
  543. package/dist/chunk-5VOPABBA.js.map +0 -7
  544. package/dist/chunk-6BB43SIB.js +0 -102
  545. package/dist/chunk-6BB43SIB.js.map +0 -7
  546. package/dist/chunk-7IYJZZQI.js +0 -167
  547. package/dist/chunk-7IYJZZQI.js.map +0 -7
  548. package/dist/chunk-7OHRR2IE.js +0 -276
  549. package/dist/chunk-ARBHWDMY.js +0 -226
  550. package/dist/chunk-ARBHWDMY.js.map +0 -7
  551. package/dist/chunk-ASATD4T7.js +0 -14
  552. package/dist/chunk-AZ47Q7BX.js +0 -1223
  553. package/dist/chunk-AZ47Q7BX.js.map +0 -7
  554. package/dist/chunk-B5B3LZB3.js +0 -236
  555. package/dist/chunk-B5B3LZB3.js.map +0 -7
  556. package/dist/chunk-BHGISFCA.js +0 -2681
  557. package/dist/chunk-BHGISFCA.js.map +0 -7
  558. package/dist/chunk-BMBOZ64T.js +0 -2786
  559. package/dist/chunk-BMBOZ64T.js.map +0 -7
  560. package/dist/chunk-BOZJHPJP.js +0 -216
  561. package/dist/chunk-CDD7LYJM.js +0 -194
  562. package/dist/chunk-CDD7LYJM.js.map +0 -7
  563. package/dist/chunk-CTQ3IUCA.js +0 -2327
  564. package/dist/chunk-D7TID3HR.js +0 -158
  565. package/dist/chunk-D7TID3HR.js.map +0 -7
  566. package/dist/chunk-DBKNWR4J.js +0 -1561
  567. package/dist/chunk-DBKNWR4J.js.map +0 -7
  568. package/dist/chunk-E55LLYRX.js +0 -55
  569. package/dist/chunk-ESEQBXTM.js +0 -121
  570. package/dist/chunk-ESEQBXTM.js.map +0 -7
  571. package/dist/chunk-ESGXULRH.js +0 -386
  572. package/dist/chunk-ESGXULRH.js.map +0 -7
  573. package/dist/chunk-EZ4LZ6ZT.js +0 -117
  574. package/dist/chunk-EZ4LZ6ZT.js.map +0 -7
  575. package/dist/chunk-F3SJTVP5.js +0 -4284
  576. package/dist/chunk-F3SJTVP5.js.map +0 -7
  577. package/dist/chunk-F5IXNJO7.js +0 -222
  578. package/dist/chunk-FJYECRHW.js +0 -448
  579. package/dist/chunk-FJYECRHW.js.map +0 -7
  580. package/dist/chunk-FPNRUQOU.js +0 -833
  581. package/dist/chunk-FPNRUQOU.js.map +0 -7
  582. package/dist/chunk-G5S4R77D.js +0 -1942
  583. package/dist/chunk-G5S4R77D.js.map +0 -7
  584. package/dist/chunk-G764NXQN.js +0 -170
  585. package/dist/chunk-G764NXQN.js.map +0 -7
  586. package/dist/chunk-GAPI4MML.js +0 -148
  587. package/dist/chunk-HBW42TDT.js +0 -132
  588. package/dist/chunk-HBW42TDT.js.map +0 -7
  589. package/dist/chunk-HLUZOZXJ.js +0 -272
  590. package/dist/chunk-HOKIK2FR.js +0 -375
  591. package/dist/chunk-HOKIK2FR.js.map +0 -7
  592. package/dist/chunk-I6WR4CG7.js +0 -323
  593. package/dist/chunk-I6WR4CG7.js.map +0 -7
  594. package/dist/chunk-K5XPMCKP.js +0 -135
  595. package/dist/chunk-KI5KI3ZJ.js +0 -276
  596. package/dist/chunk-KI5KI3ZJ.js.map +0 -7
  597. package/dist/chunk-KLGL6XZD.js +0 -129
  598. package/dist/chunk-KYBIQBXE.js +0 -1628
  599. package/dist/chunk-L7IRWUKT.js +0 -480
  600. package/dist/chunk-LFCYMSVA.js +0 -314
  601. package/dist/chunk-LX6G7HJJ.js +0 -617
  602. package/dist/chunk-LX6G7HJJ.js.map +0 -7
  603. package/dist/chunk-M2G5R4WB.js +0 -142
  604. package/dist/chunk-M4TTGGT4.js +0 -102
  605. package/dist/chunk-M4TTGGT4.js.map +0 -7
  606. package/dist/chunk-M6EF3WVV.js +0 -1825
  607. package/dist/chunk-M6EF3WVV.js.map +0 -7
  608. package/dist/chunk-M6KHT3MM.js +0 -146
  609. package/dist/chunk-M6KHT3MM.js.map +0 -7
  610. package/dist/chunk-MCZFHWIR.js +0 -230
  611. package/dist/chunk-MFQACKYU.js +0 -448
  612. package/dist/chunk-MFQACKYU.js.map +0 -7
  613. package/dist/chunk-MVGAGTM3.js +0 -343
  614. package/dist/chunk-MVGAGTM3.js.map +0 -7
  615. package/dist/chunk-NELOT3NJ.js +0 -119
  616. package/dist/chunk-NELOT3NJ.js.map +0 -7
  617. package/dist/chunk-NRKMXULC.js +0 -54
  618. package/dist/chunk-NRKMXULC.js.map +0 -7
  619. package/dist/chunk-NSTL4MY2.js +0 -2110
  620. package/dist/chunk-NYRZNRG5.js +0 -177
  621. package/dist/chunk-NYRZNRG5.js.map +0 -7
  622. package/dist/chunk-OMR2DT66.js +0 -776
  623. package/dist/chunk-ONPKE6DC.js +0 -368
  624. package/dist/chunk-OXVLWQ6M.js +0 -556
  625. package/dist/chunk-OXVLWQ6M.js.map +0 -7
  626. package/dist/chunk-PFRWS4CR.js +0 -203
  627. package/dist/chunk-PJKQUXEN.js +0 -1275
  628. package/dist/chunk-Q2L44HK3.js +0 -6364
  629. package/dist/chunk-QNHT74XC.js +0 -1245
  630. package/dist/chunk-RKO6BL5N.js +0 -446
  631. package/dist/chunk-T25QNZHB.js +0 -254
  632. package/dist/chunk-U7TBYVIQ.js +0 -31
  633. package/dist/chunk-UGRQXBL4.js +0 -381
  634. package/dist/chunk-USFSHSCJ.js +0 -477
  635. package/dist/chunk-USFSHSCJ.js.map +0 -7
  636. package/dist/chunk-VJ6UFVGC.js +0 -2833
  637. package/dist/chunk-VJ6UFVGC.js.map +0 -7
  638. package/dist/chunk-W3WPPOXH.js +0 -292
  639. package/dist/chunk-WFCSOTBO.js +0 -263
  640. package/dist/chunk-WHP4AKDM.js +0 -185
  641. package/dist/chunk-WHP4AKDM.js.map +0 -7
  642. package/dist/chunk-WZ2L57MB.js +0 -102
  643. package/dist/chunk-XPY6AWXO.js +0 -787
  644. package/dist/chunk-Y4UAKFWC.js +0 -37
  645. package/dist/chunk-Y4UAKFWC.js.map +0 -7
  646. package/dist/chunk-YQBS2ZCK.js +0 -514
  647. package/dist/chunk-Z5U6HOE4.js +0 -190
  648. package/dist/chunk-Z5U6HOE4.js.map +0 -7
  649. package/dist/chunk-ZNEJUKJW.js +0 -140
  650. package/dist/chunk-ZTHM2TKP.js +0 -176
  651. package/dist/condition-2PASYSUC.js +0 -332
  652. package/dist/controls-5IMJ6K5L.js +0 -41
  653. package/dist/controls.config-P5PG2DHW.js +0 -39
  654. package/dist/correlation-U3EDLNHR.js +0 -102
  655. package/dist/cuminc-2HUFEROK.js +0 -1149
  656. package/dist/cuminc-2HUFEROK.js.map +0 -7
  657. package/dist/cuminc.integration.spec-WFWAPTDA.js +0 -678
  658. package/dist/customdata.inputui-ZHWNEPFH.js +0 -289
  659. package/dist/dataDownload-VBSJBKMP.js +0 -330
  660. package/dist/dataDownload.integration.spec-LUFSETOP.js +0 -193
  661. package/dist/databrowser.ui-6H2KMSTJ.js +0 -433
  662. package/dist/databrowser.ui-6H2KMSTJ.js.map +0 -7
  663. package/dist/dictionary-V37LXFIP.js +0 -118
  664. package/dist/dnaMethylation-OIZMHMLK.js +0 -38
  665. package/dist/dnaMethylation.integration.spec-CWPTJ74H.js +0 -203
  666. package/dist/dnaMethylation.integration.spec-CWPTJ74H.js.map +0 -7
  667. package/dist/dofetch-IWPZQB5N.js +0 -51
  668. package/dist/e2pca-7SLIAGYW.js +0 -350
  669. package/dist/ep-7L6KF6K4.js +0 -1256
  670. package/dist/expclust.gdc.spec-JT452Q3G.js +0 -307
  671. package/dist/facet-CXOUU5AS.js +0 -521
  672. package/dist/facet-CXOUU5AS.js.map +0 -7
  673. package/dist/forms2-VPNCLQOY.js +0 -539
  674. package/dist/forms2-VPNCLQOY.js.map +0 -7
  675. package/dist/gb-P4VRXRED.js +0 -88
  676. package/dist/geneExpClustering-FQTCKRJJ.js +0 -249
  677. package/dist/geneExpClustering-FQTCKRJJ.js.map +0 -7
  678. package/dist/geneExpression-BHO5326K.js +0 -313
  679. package/dist/geneExpression-ZMERB64E.js +0 -38
  680. package/dist/geneExpression.unit.spec-CNVHZWNG.js +0 -102
  681. package/dist/geneExpression.unit.spec-CNVHZWNG.js.map +0 -7
  682. package/dist/geneORA-FXVUCXGX.js +0 -278
  683. package/dist/geneRanking-SFK4UBKQ.js +0 -553
  684. package/dist/geneVariant-IYEHB4H7.js +0 -41
  685. package/dist/geneVariant-LIRRLUFR.js +0 -39
  686. package/dist/geneVariant.integration.spec-Y2NPNTYX.js +0 -198
  687. package/dist/genefusion.ui-L3HIJM3N.js +0 -309
  688. package/dist/genefusion.ui-L3HIJM3N.js.map +0 -7
  689. package/dist/geneset-A6VUFX63.js +0 -208
  690. package/dist/genomeBrowser.spec-CB4HHHBN.js +0 -281
  691. package/dist/grin2-FKBIMH5N.js +0 -75
  692. package/dist/grin2-V36KLEBU.js +0 -1143
  693. package/dist/hierCluster-QFPRMHVA.js +0 -63
  694. package/dist/hierCluster-YWC3XYPV.js +0 -59
  695. package/dist/hierCluster.config-F7YYZNM3.js +0 -40
  696. package/dist/hierCluster.integration.spec-AF4L3YT6.js +0 -488
  697. package/dist/hierCluster.integration.spec-AF4L3YT6.js.map +0 -7
  698. package/dist/hierCluster.interactivity-RPY74PK6.js +0 -54
  699. package/dist/hierCluster.renderers-LOKHZ3V2.js +0 -21
  700. package/dist/imagePlot-BBEXA754.js +0 -163
  701. package/dist/importPlot-7QGANZGK.js +0 -8
  702. package/dist/isoformExpression-4SLLCVFD.js +0 -40
  703. package/dist/isoformExpression.unit.spec-GEL4JJ64.js +0 -208
  704. package/dist/isoformExpression.unit.spec-GEL4JJ64.js.map +0 -7
  705. package/dist/launch.adhoc-LWLBQJS5.js +0 -42
  706. package/dist/leftlabel.sample-RTEZOIH2.js +0 -264
  707. package/dist/leftlabel.sample-RTEZOIH2.js.map +0 -7
  708. package/dist/legacyDataset-VLD7ZYWI.js +0 -119
  709. package/dist/lollipop-XKQK5QZU.js +0 -171
  710. package/dist/maf-AZQPPWDO.js +0 -459
  711. package/dist/maftimeline-7MSVYKQU.js +0 -593
  712. package/dist/matrix-BGLWC25D.js +0 -58
  713. package/dist/matrix-IQR5SRMK.js +0 -63
  714. package/dist/matrix.cells-5C57NWOY.js +0 -28
  715. package/dist/matrix.config-2DQXAN2E.js +0 -41
  716. package/dist/matrix.data-ADCGF5H6.js +0 -25
  717. package/dist/matrix.groups-V4ITQ5F7.js +0 -27
  718. package/dist/matrix.integration.spec-IBNOO2WP.js +0 -3072
  719. package/dist/matrix.interactivity-JNELJFOV.js +0 -42
  720. package/dist/matrix.layout-WBVIV6GR.js +0 -44
  721. package/dist/matrix.legend-YHOWPK77.js +0 -22
  722. package/dist/matrix.renderers-5BGVRR3M.js +0 -38
  723. package/dist/matrix.serieses-2GZJOASZ.js +0 -21
  724. package/dist/matrix.sort-WKIWPJKP.js +0 -27
  725. package/dist/matrix.sort.unit.spec-L2E4D4AS.js +0 -472
  726. package/dist/matrix.sorterUi-TEJWWJ64.js +0 -18
  727. package/dist/matrix.sorterUi.unit.spec-SHP7C4P7.js +0 -342
  728. package/dist/mavb-4MXNYUEO.js +0 -732
  729. package/dist/mds.fimo-WHIJIBOI.js +0 -518
  730. package/dist/mds.samplescatterplot-BRJ6NG2D.js +0 -1550
  731. package/dist/mds.survivalplot-OPCMB5PB.js +0 -483
  732. package/dist/numericDictTermCluster-7MIFOP2K.js +0 -65
  733. package/dist/oncomatrix-BGG6BEUI.js +0 -295
  734. package/dist/oncomatrix.spec-LYQ4L4F3.js +0 -448
  735. package/dist/plot.2dvaf-6WVCP2ZI.js +0 -377
  736. package/dist/plot.app-MLBP6WFP.js +0 -41
  737. package/dist/plot.barplot-JEPRZSCU.js +0 -102
  738. package/dist/plot.boxplot-GNFW42VM.js +0 -152
  739. package/dist/plot.brainImaging-5ACNSD45.js +0 -51
  740. package/dist/plot.disco-Q2V2KKIH.js +0 -102
  741. package/dist/plot.dzi-KVT6S7K7.js +0 -33
  742. package/dist/plot.ssgq-4N3KFJQ2.js +0 -139
  743. package/dist/plot.vaf2cov-ITRG5U43.js +0 -259
  744. package/dist/plot.wsi-26YZNU4V.js +0 -36
  745. package/dist/polar2-J7GVUK4X.js +0 -231
  746. package/dist/polar2-J7GVUK4X.js.map +0 -7
  747. package/dist/profileForms-VXV2JLXU.js +0 -446
  748. package/dist/profileForms-VXV2JLXU.js.map +0 -7
  749. package/dist/profilePlot-ZZYZK4SY.js +0 -54
  750. package/dist/proteinView-7KN532D3.js +0 -1568
  751. package/dist/proteinView-7KN532D3.js.map +0 -7
  752. package/dist/qualitative-MLRVLIAU.js +0 -43
  753. package/dist/radar2-WM2ZBOH3.js +0 -326
  754. package/dist/radar2-WM2ZBOH3.js.map +0 -7
  755. package/dist/radarFacility2-3SBR2JJ3.js +0 -334
  756. package/dist/radarFacility2-3SBR2JJ3.js.map +0 -7
  757. package/dist/regression-WMRPQJW2.js +0 -56
  758. package/dist/regression.inputs-VWZKSYNY.js +0 -48
  759. package/dist/regression.inputs.term-OWE6GWHM.js +0 -48
  760. package/dist/regression.inputs.values.table-4INNZQI2.js +0 -45
  761. package/dist/regression.integration.spec-XKQ2JOOT.js +0 -784
  762. package/dist/regression.results-VZBYMBYC.js +0 -40
  763. package/dist/regression.spec-DU3UTDCJ.js +0 -708
  764. package/dist/render-N5FOF247.js +0 -38
  765. package/dist/report-DW3OHB67.js +0 -222
  766. package/dist/sampleScatter.spec-REFSK2V4.js +0 -202
  767. package/dist/sampleScatter.spec-REFSK2V4.js.map +0 -7
  768. package/dist/sampleView-ICOT2R6O.js +0 -48
  769. package/dist/samplelst-TJEVASYG.js +0 -111
  770. package/dist/samplematrix-6DAWCXQ3.js +0 -2198
  771. package/dist/sc-53LNOB7N.js +0 -86
  772. package/dist/scatter-DKYSS4DL.js +0 -851
  773. package/dist/selectGenomeWithTklst-WTX66TV3.js +0 -134
  774. package/dist/singleCellCellType-D2CN2BHQ.js +0 -38
  775. package/dist/singleCellCellType.unit.spec-LADUCI4R.js +0 -160
  776. package/dist/singleCellCellType.unit.spec-LADUCI4R.js.map +0 -7
  777. package/dist/singleCellGeneExpression-YR2ZT34W.js +0 -38
  778. package/dist/singleCellGeneExpression.unit.spec-BM63M432.js +0 -153
  779. package/dist/singleCellGeneExpression.unit.spec-BM63M432.js.map +0 -7
  780. package/dist/singleCellPlot-3ICIOILE.js +0 -54
  781. package/dist/singlecell-6ZUFA3BQ.js +0 -86
  782. package/dist/singlecell-KX7W4U57.js +0 -1572
  783. package/dist/snp-VIURB7L3.js +0 -38
  784. package/dist/snp.unit.spec-ACZNZUNS.js +0 -176
  785. package/dist/snplocus-3LW4ZUZR.js +0 -208
  786. package/dist/spliceevent.a53ss.diagram-AKTZGWNM.js +0 -151
  787. package/dist/spliceevent.exonskip.diagram-XZHXB77R.js +0 -283
  788. package/dist/spliceevent.noeventdiagram-YTXWWNTJ.js +0 -460
  789. package/dist/ssGSEA-THW4WFMI.js +0 -38
  790. package/dist/ssGSEA.unit.spec-HTRGQI2K.js +0 -88
  791. package/dist/summarizeCnvGeneexp-RFYC3H2Z.js +0 -163
  792. package/dist/summarizeGeneexpSurvival-DQBZUTQ6.js +0 -114
  793. package/dist/summarizeGeneexpSurvival-DQBZUTQ6.js.map +0 -7
  794. package/dist/summarizeMutationCnv-7AYEMHAI.js +0 -164
  795. package/dist/summarizeMutationDiagnosis-AKFJDSAF.js +0 -40
  796. package/dist/summarizeMutationSurvival-QJHZRQBZ.js +0 -99
  797. package/dist/summary-A5P7AYK4.js +0 -49
  798. package/dist/summary.integration.spec-HQISXGNL.js +0 -414
  799. package/dist/summaryInput-HP675QOQ.js +0 -235
  800. package/dist/summaryInput-HP675QOQ.js.map +0 -7
  801. package/dist/sunburst-65LSYRXX.js +0 -284
  802. package/dist/survival-QNEI6YVK.js +0 -46
  803. package/dist/survival-UI74VXSM.js +0 -58
  804. package/dist/survival.integration.spec-X5N3JQXS.js +0 -915
  805. package/dist/survival.integration.spec-X5N3JQXS.js.map +0 -7
  806. package/dist/svgraph-PSX2NER3.js +0 -1387
  807. package/dist/svmr-QDQ33EFX.js +0 -3842
  808. package/dist/table-LWAI27UO.js +0 -200
  809. package/dist/termCollection-3JHR74FG.js +0 -179
  810. package/dist/termCollection-3JHR74FG.js.map +0 -7
  811. package/dist/termCollection-CDF5LYUG.js +0 -38
  812. package/dist/termCollection.unit.spec-HOJKYWHF.js +0 -208
  813. package/dist/termCollection.unit.spec-HOJKYWHF.js.map +0 -7
  814. package/dist/tk-GL4QCL4K.js +0 -1019
  815. package/dist/tk-GL4QCL4K.js.map +0 -7
  816. package/dist/tk-OEQFO73V.js +0 -46
  817. package/dist/toggleButtons-YK7TIFF2.js +0 -9
  818. package/dist/tp.ui-SHNERDGC.js +0 -1459
  819. package/dist/tvs.density-3XJ6DBGO.js +0 -18
  820. package/dist/tvs.dt-CZDC4TSR.js +0 -39
  821. package/dist/tvs.dtcnv.categorical-OPBDHZGB.js +0 -40
  822. package/dist/tvs.dtcnv.continuous-AR6P4EP3.js +0 -72
  823. package/dist/tvs.dtfusion-2YQ7N6FQ.js +0 -40
  824. package/dist/tvs.dtitd-ATCHW735.js +0 -40
  825. package/dist/tvs.dtsnvindel-WHHWAATJ.js +0 -40
  826. package/dist/tvs.dtsv-3UMCW65O.js +0 -40
  827. package/dist/tvs.numeric-TOEPASWN.js +0 -21
  828. package/dist/tvs.samplelst-M7XKXRTZ.js +0 -104
  829. package/dist/tvs.termCollection-WT4WZMYR.js +0 -159
  830. package/dist/tvs.termCollection-WT4WZMYR.js.map +0 -7
  831. package/dist/violin-2YGXTBDS.js +0 -46
  832. package/dist/violin.integration.spec-YWNHVAGS.js +0 -1425
  833. package/dist/violin.integration.spec-YWNHVAGS.js.map +0 -7
  834. package/dist/violin.interactivity-J6BE2UQL.js +0 -38
  835. package/dist/violin.renderer-3GRUWP2U.js +0 -40
  836. package/dist/vocabulary-2INCVPYJ.js +0 -41
  837. /package/dist/{2dmaf-R3PFZNRN.js.map → 2dmaf-RRV3ORZR.js.map} +0 -0
  838. /package/dist/{AIProjectAdmin-DM3KG6SR.js.map → AIProjectAdmin-DKLEFCGX.js.map} +0 -0
  839. /package/dist/{AppHeader-6DZQ6YZX.js.map → AppHeader-WQ2F7HZY.js.map} +0 -0
  840. /package/dist/{CorrelationVolcano-U5UMJNH5.js.map → CorrelationVolcano-HR6IP2SZ.js.map} +0 -0
  841. /package/dist/{DE-AXNYWIQK.js.map → DE-DAW6ZKM7.js.map} +0 -0
  842. /package/dist/{Disco-NVMLF3BK.js.map → Disco-QEBEVQS2.js.map} +0 -0
  843. /package/dist/{DmrPlot-WROR4ENM.js.map → DmrPlot-CWBQDZL7.js.map} +0 -0
  844. /package/dist/{GSEA-Y5R2THIJ.js.map → GSEA-6UKMI6GY.js.map} +0 -0
  845. /package/dist/{Geomap-J763OK2F.js.map → Geomap-ANMR32HE.js.map} +0 -0
  846. /package/dist/{HicApp-UNIJLH4B.js.map → HicApp-WHPUPHEM.js.map} +0 -0
  847. /package/dist/{NumBinaryEditor-WMN2GGO4.js.map → NumBinaryEditor-VG5KOGDA.js.map} +0 -0
  848. /package/dist/{NumBinaryEditor.unit.spec-TAMXV6SE.js.map → NumBinaryEditor.unit.spec-UCGFZS3P.js.map} +0 -0
  849. /package/dist/{NumContEditor-XYIOJY4E.js.map → NumContEditor-J52RON3G.js.map} +0 -0
  850. /package/dist/{NumContEditor.unit.spec-WDZ75BHO.js.map → NumContEditor.unit.spec-5GTWUJEL.js.map} +0 -0
  851. /package/dist/{NumCustomBinEditor-5SY3C4TY.js.map → NumCustomBinEditor-GM2OJMOX.js.map} +0 -0
  852. /package/dist/{NumCustomBinEditor.unit.spec-XHTAIXR3.js.map → NumCustomBinEditor.unit.spec-3PGJ25J4.js.map} +0 -0
  853. /package/dist/{NumDiscreteEditor-NRDRX4FD.js.map → NumDiscreteEditor-2CAKT3Y4.js.map} +0 -0
  854. /package/dist/{NumDiscreteEditor.unit.spec-2CJW7OAT.js.map → NumDiscreteEditor.unit.spec-XCWSJTRT.js.map} +0 -0
  855. /package/dist/{NumRegularBinEditor-DUDVTNDC.js.map → NumRegularBinEditor-CZYITY5L.js.map} +0 -0
  856. /package/dist/{NumRegularBinEditor.unit.spec-H3GNQHMN.js.map → NumRegularBinEditor.unit.spec-OUBZ5XB3.js.map} +0 -0
  857. /package/dist/{NumSplineEditor-7Q4AC7KH.js.map → NumSplineEditor-TWRL5AQQ.js.map} +0 -0
  858. /package/dist/{NumSplineEditor.unit.spec-YRZK5PH5.js.map → NumSplineEditor.unit.spec-5P6NQZ3N.js.map} +0 -0
  859. /package/dist/{NumericDensity-NTNWUESG.js.map → NumericDensity-JSOFOEH2.js.map} +0 -0
  860. /package/dist/{NumericDensity.unit.spec-5I5U6T6P.js.map → NumericDensity.unit.spec-REUKHMKK.js.map} +0 -0
  861. /package/dist/{NumericHandler-MEW2KMPX.js.map → NumericHandler-UZOGKPKB.js.map} +0 -0
  862. /package/dist/{NumericHandler.unit.spec-JFX4BPRG.js.map → NumericHandler.unit.spec-X2DAED4O.js.map} +0 -0
  863. /package/dist/{WSIViewer-ZLQU62PD.js.map → WSIViewer-UDA4WIRT.js.map} +0 -0
  864. /package/dist/{WsiSamplesPlot-JMBSITOM.js.map → WsiSamplesPlot-DYSFMD22.js.map} +0 -0
  865. /package/dist/{adSandbox-664IRCRL.js.map → adSandbox-5BUDCAER.js.map} +0 -0
  866. /package/dist/{app-63WJ3BMP.js.map → app-O64TGDFH.js.map} +0 -0
  867. /package/dist/{app-77FIZHCG.js.map → app-Y2STUISK.js.map} +0 -0
  868. /package/dist/{barchart-YUVXJNH4.js.map → barchart-UHCTYRMJ.js.map} +0 -0
  869. /package/dist/{barchart.data-P4EIQXGE.js.map → barchart.data-LSK2P2PR.js.map} +0 -0
  870. /package/dist/{barchart.events-JPVCLTIG.js.map → barchart.events-Y4H2GADS.js.map} +0 -0
  871. /package/dist/{barchart2-XO2FG76J.js.map → barchart2-VIZKZRMP.js.map} +0 -0
  872. /package/dist/{bars.renderer-AUIWUJDH.js.map → bars.renderer-54UCFLJS.js.map} +0 -0
  873. /package/dist/{block-NBTCOT3H.js.map → block-BGSSF6XP.js.map} +0 -0
  874. /package/dist/{block.init-X7Y2EEVR.js.map → block.init-H7RKUIHG.js.map} +0 -0
  875. /package/dist/{block.mds.expressionrank-BIAOZIZ3.js.map → block.mds.expressionrank-MA3HGT7S.js.map} +0 -0
  876. /package/dist/{block.mds.geneboxplot-CNICDVLK.js.map → block.mds.geneboxplot-CWT5DM5T.js.map} +0 -0
  877. /package/dist/{block.mds.junction-PQXCTSUI.js.map → block.mds.junction-P4I7O73X.js.map} +0 -0
  878. /package/dist/{block.mds.svcnv-32KMVTCT.js.map → block.mds.svcnv-NSPEY43S.js.map} +0 -0
  879. /package/dist/{block.svg-LRTOYQK2.js.map → block.svg-DP4G3LNQ.js.map} +0 -0
  880. /package/dist/{block.tk.aicheck-HDV7ZIUD.js.map → block.tk.aicheck-EBLTOWKZ.js.map} +0 -0
  881. /package/dist/{block.tk.ase-JIDWKMYI.js.map → block.tk.ase-X7WKQOFS.js.map} +0 -0
  882. /package/dist/{block.tk.bam-5X3OS5HB.js.map → block.tk.bam-OIP3TS3N.js.map} +0 -0
  883. /package/dist/{block.tk.bedgraphdot-T7JX7YQL.js.map → block.tk.bedgraphdot-2DDF55J3.js.map} +0 -0
  884. /package/dist/{block.tk.hicstraw-DEY3VQFK.js.map → block.tk.hicstraw-4OIG4TBZ.js.map} +0 -0
  885. /package/dist/{block.tk.junction-7UAFEZSJ.js.map → block.tk.junction-52OWEQUN.js.map} +0 -0
  886. /package/dist/{block.tk.junction.textmatrixui-27LHS33U.js.map → block.tk.junction.textmatrixui-64YOSZLW.js.map} +0 -0
  887. /package/dist/{block.tk.ld-DF2PI7OO.js.map → block.tk.ld-3AMNHBDY.js.map} +0 -0
  888. /package/dist/{block.tk.menu-L2D5KBIV.js.map → block.tk.menu-4724DJXL.js.map} +0 -0
  889. /package/dist/{block.tk.pgv-QO56SKBV.js.map → block.tk.pgv-2SIOPWYI.js.map} +0 -0
  890. /package/dist/{brainRegions-ZNZ2WHSU.js.map → brainRegions-HJ2VGL3L.js.map} +0 -0
  891. /package/dist/{chunk-T25QNZHB.js.map → chunk-26APRXD3.js.map} +0 -0
  892. /package/dist/{chunk-3XVVN66M.js.map → chunk-2KXLYFAO.js.map} +0 -0
  893. /package/dist/{chunk-PJKQUXEN.js.map → chunk-3BGFM7Q4.js.map} +0 -0
  894. /package/dist/{chunk-KLGL6XZD.js.map → chunk-4HZN6PMU.js.map} +0 -0
  895. /package/dist/{chunk-4IH7DORZ.js.map → chunk-5DMVORBB.js.map} +0 -0
  896. /package/dist/{chunk-QNHT74XC.js.map → chunk-5QMBB4SK.js.map} +0 -0
  897. /package/dist/{chunk-KYBIQBXE.js.map → chunk-5R63Q5KH.js.map} +0 -0
  898. /package/dist/{chunk-RKO6BL5N.js.map → chunk-6JYQGZ3Y.js.map} +0 -0
  899. /package/dist/{chunk-5ABGFJSP.js.map → chunk-6QCYT6G2.js.map} +0 -0
  900. /package/dist/{chunk-ZNEJUKJW.js.map → chunk-B4ESQLPB.js.map} +0 -0
  901. /package/dist/{chunk-UGRQXBL4.js.map → chunk-E3VF4RHJ.js.map} +0 -0
  902. /package/dist/{chunk-W3WPPOXH.js.map → chunk-EGPNRSPF.js.map} +0 -0
  903. /package/dist/{chunk-M2G5R4WB.js.map → chunk-FACITNG5.js.map} +0 -0
  904. /package/dist/{chunk-CTQ3IUCA.js.map → chunk-H3N4KYKL.js.map} +0 -0
  905. /package/dist/{chunk-ASATD4T7.js.map → chunk-H3VWJH4U.js.map} +0 -0
  906. /package/dist/{chunk-F5IXNJO7.js.map → chunk-HEVKBSN6.js.map} +0 -0
  907. /package/dist/{chunk-YQBS2ZCK.js.map → chunk-HQUYAZQY.js.map} +0 -0
  908. /package/dist/{chunk-37XDBPOP.js.map → chunk-J4USU73L.js.map} +0 -0
  909. /package/dist/{chunk-K5XPMCKP.js.map → chunk-JH73IL4C.js.map} +0 -0
  910. /package/dist/{chunk-4STKL6SR.js.map → chunk-KU7YH7MV.js.map} +0 -0
  911. /package/dist/{chunk-HLUZOZXJ.js.map → chunk-M66VDGSH.js.map} +0 -0
  912. /package/dist/{chunk-5AZNP47R.js.map → chunk-MJN6RDXB.js.map} +0 -0
  913. /package/dist/{chunk-U7TBYVIQ.js.map → chunk-MPNEZ6EL.js.map} +0 -0
  914. /package/dist/{chunk-LFCYMSVA.js.map → chunk-MPSLUEI4.js.map} +0 -0
  915. /package/dist/{chunk-ONPKE6DC.js.map → chunk-NIXFCC7X.js.map} +0 -0
  916. /package/dist/{chunk-7OHRR2IE.js.map → chunk-NODQZTWK.js.map} +0 -0
  917. /package/dist/{chunk-4DPVT4NE.js.map → chunk-NVTJ5AUT.js.map} +0 -0
  918. /package/dist/{chunk-E55LLYRX.js.map → chunk-OOWXMY7U.js.map} +0 -0
  919. /package/dist/{chunk-XPY6AWXO.js.map → chunk-OTTMHVYH.js.map} +0 -0
  920. /package/dist/{chunk-OMR2DT66.js.map → chunk-Q5RDQNIT.js.map} +0 -0
  921. /package/dist/{chunk-3EWB3246.js.map → chunk-QDX2XUNF.js.map} +0 -0
  922. /package/dist/{chunk-WZ2L57MB.js.map → chunk-ROMW4AK2.js.map} +0 -0
  923. /package/dist/{chunk-MCZFHWIR.js.map → chunk-RR5U35N7.js.map} +0 -0
  924. /package/dist/{chunk-GAPI4MML.js.map → chunk-RVKADD4L.js.map} +0 -0
  925. /package/dist/{chunk-33K5PA52.js.map → chunk-S5ZCK44Z.js.map} +0 -0
  926. /package/dist/{chunk-ZTHM2TKP.js.map → chunk-SNRIVNQ3.js.map} +0 -0
  927. /package/dist/{chunk-WFCSOTBO.js.map → chunk-TAM7UCAI.js.map} +0 -0
  928. /package/dist/{chunk-NSTL4MY2.js.map → chunk-UJELJXJG.js.map} +0 -0
  929. /package/dist/{chunk-L7IRWUKT.js.map → chunk-ULESDMUT.js.map} +0 -0
  930. /package/dist/{chunk-3RSKOPIY.js.map → chunk-W76X6W73.js.map} +0 -0
  931. /package/dist/{chunk-PFRWS4CR.js.map → chunk-W7OS7BNM.js.map} +0 -0
  932. /package/dist/{chunk-Q2L44HK3.js.map → chunk-WTTD6DUL.js.map} +0 -0
  933. /package/dist/{chunk-2GYWFQML.js.map → chunk-WXPFMVU6.js.map} +0 -0
  934. /package/dist/{chunk-BOZJHPJP.js.map → chunk-YBLTSYQV.js.map} +0 -0
  935. /package/dist/{condition-2PASYSUC.js.map → condition-L2IXP6WH.js.map} +0 -0
  936. /package/dist/{controls-5IMJ6K5L.js.map → controls-2S5QVWUC.js.map} +0 -0
  937. /package/dist/{controls.config-P5PG2DHW.js.map → controls.config-3AJKR4ZZ.js.map} +0 -0
  938. /package/dist/{correlation-U3EDLNHR.js.map → correlation-DXTAWSLU.js.map} +0 -0
  939. /package/dist/{cuminc.integration.spec-WFWAPTDA.js.map → cuminc.integration.spec-WAYRLHUH.js.map} +0 -0
  940. /package/dist/{customdata.inputui-ZHWNEPFH.js.map → customdata.inputui-7WH2NJGB.js.map} +0 -0
  941. /package/dist/{dataDownload-VBSJBKMP.js.map → dataDownload-HM4UYOBO.js.map} +0 -0
  942. /package/dist/{dataDownload.integration.spec-LUFSETOP.js.map → dataDownload.integration.spec-F5CO4BWA.js.map} +0 -0
  943. /package/dist/{dictionary-V37LXFIP.js.map → dictionary-EEPTFDYD.js.map} +0 -0
  944. /package/dist/{dnaMethylation-OIZMHMLK.js.map → dnaMethylation-N3WNK6XA.js.map} +0 -0
  945. /package/dist/{dofetch-IWPZQB5N.js.map → dofetch-YKYPEJTQ.js.map} +0 -0
  946. /package/dist/{e2pca-7SLIAGYW.js.map → e2pca-JEZIGVB2.js.map} +0 -0
  947. /package/dist/{ep-7L6KF6K4.js.map → ep-5FMH2MLV.js.map} +0 -0
  948. /package/dist/{expclust.gdc.spec-JT452Q3G.js.map → expclust.gdc.spec-FR26VSUA.js.map} +0 -0
  949. /package/dist/{gb-P4VRXRED.js.map → gb-WGEVO7L2.js.map} +0 -0
  950. /package/dist/{geneExpression-BHO5326K.js.map → geneExpression-5NWQXMJ3.js.map} +0 -0
  951. /package/dist/{geneExpression-ZMERB64E.js.map → geneExpression-VWUMM2LU.js.map} +0 -0
  952. /package/dist/{geneORA-FXVUCXGX.js.map → geneORA-3VWFWDYI.js.map} +0 -0
  953. /package/dist/{geneRanking-SFK4UBKQ.js.map → geneRanking-PKDVD5OD.js.map} +0 -0
  954. /package/dist/{geneVariant-IYEHB4H7.js.map → geneVariant-IFIJQXH4.js.map} +0 -0
  955. /package/dist/{geneVariant-LIRRLUFR.js.map → geneVariant-WZSOG4GI.js.map} +0 -0
  956. /package/dist/{geneVariant.integration.spec-Y2NPNTYX.js.map → geneVariant.integration.spec-6KQMWVHR.js.map} +0 -0
  957. /package/dist/{geneset-A6VUFX63.js.map → geneset-RJAULSKC.js.map} +0 -0
  958. /package/dist/{genomeBrowser.spec-CB4HHHBN.js.map → genomeBrowser.spec-42OTTMGO.js.map} +0 -0
  959. /package/dist/{grin2-FKBIMH5N.js.map → grin2-26O6YDDY.js.map} +0 -0
  960. /package/dist/{grin2-V36KLEBU.js.map → grin2-FT5BQJMB.js.map} +0 -0
  961. /package/dist/{hierCluster-QFPRMHVA.js.map → hierCluster-GJPPMFNR.js.map} +0 -0
  962. /package/dist/{hierCluster-YWC3XYPV.js.map → hierCluster-HMJF3PBE.js.map} +0 -0
  963. /package/dist/{hierCluster.config-F7YYZNM3.js.map → hierCluster.config-TAS7XKTU.js.map} +0 -0
  964. /package/dist/{hierCluster.interactivity-RPY74PK6.js.map → hierCluster.interactivity-IKTAJ6CU.js.map} +0 -0
  965. /package/dist/{hierCluster.renderers-LOKHZ3V2.js.map → hierCluster.renderers-I6WFZRNW.js.map} +0 -0
  966. /package/dist/{imagePlot-BBEXA754.js.map → imagePlot-N4OXNMVA.js.map} +0 -0
  967. /package/dist/{importPlot-7QGANZGK.js.map → importPlot-VMYXDP66.js.map} +0 -0
  968. /package/dist/{isoformExpression-4SLLCVFD.js.map → isoformExpression-2KV64KMN.js.map} +0 -0
  969. /package/dist/{launch.adhoc-LWLBQJS5.js.map → junction-VO4IGMW2.js.map} +0 -0
  970. /package/dist/{matrix-BGLWC25D.js.map → junction.customTerm-EFMHHVWA.js.map} +0 -0
  971. /package/dist/{matrix-IQR5SRMK.js.map → launch.adhoc-R3MO3VXK.js.map} +0 -0
  972. /package/dist/{legacyDataset-VLD7ZYWI.js.map → legacyDataset-4BXYHQTS.js.map} +0 -0
  973. /package/dist/{lollipop-XKQK5QZU.js.map → lollipop-XIVE4ANX.js.map} +0 -0
  974. /package/dist/{maf-AZQPPWDO.js.map → maf-WRHD4OJF.js.map} +0 -0
  975. /package/dist/{maftimeline-7MSVYKQU.js.map → maftimeline-IE6YKV7Y.js.map} +0 -0
  976. /package/dist/{matrix.cells-5C57NWOY.js.map → matrix-ALBCAZP5.js.map} +0 -0
  977. /package/dist/{matrix.config-2DQXAN2E.js.map → matrix-W72XRUZD.js.map} +0 -0
  978. /package/dist/{matrix.data-ADCGF5H6.js.map → matrix.cells-DEEUWC74.js.map} +0 -0
  979. /package/dist/{matrix.groups-V4ITQ5F7.js.map → matrix.config-JYXQOXDT.js.map} +0 -0
  980. /package/dist/{matrix.interactivity-JNELJFOV.js.map → matrix.data-ENXNM6RP.js.map} +0 -0
  981. /package/dist/{matrix.layout-WBVIV6GR.js.map → matrix.groups-EXSNNESB.js.map} +0 -0
  982. /package/dist/{matrix.integration.spec-IBNOO2WP.js.map → matrix.integration.spec-BW6U6PIW.js.map} +0 -0
  983. /package/dist/{matrix.legend-YHOWPK77.js.map → matrix.interactivity-G6AL566T.js.map} +0 -0
  984. /package/dist/{matrix.renderers-5BGVRR3M.js.map → matrix.layout-UBUPIJ3R.js.map} +0 -0
  985. /package/dist/{matrix.serieses-2GZJOASZ.js.map → matrix.legend-S3P4F2DG.js.map} +0 -0
  986. /package/dist/{matrix.sort-WKIWPJKP.js.map → matrix.renderers-IXFGXHJQ.js.map} +0 -0
  987. /package/dist/{matrix.sorterUi-TEJWWJ64.js.map → matrix.serieses-THHXUAPM.js.map} +0 -0
  988. /package/dist/{plot.app-MLBP6WFP.js.map → matrix.sort-WJV6LIZI.js.map} +0 -0
  989. /package/dist/{matrix.sort.unit.spec-L2E4D4AS.js.map → matrix.sort.unit.spec-LGMIL2LR.js.map} +0 -0
  990. /package/dist/{profilePlot-ZZYZK4SY.js.map → matrix.sorterUi-VXVCOKEZ.js.map} +0 -0
  991. /package/dist/{matrix.sorterUi.unit.spec-SHP7C4P7.js.map → matrix.sorterUi.unit.spec-CWSEJ62U.js.map} +0 -0
  992. /package/dist/{mavb-4MXNYUEO.js.map → mavb-SXGKASQ5.js.map} +0 -0
  993. /package/dist/{mds.fimo-WHIJIBOI.js.map → mds.fimo-EDOT3TDN.js.map} +0 -0
  994. /package/dist/{mds.samplescatterplot-BRJ6NG2D.js.map → mds.samplescatterplot-IXHNABKB.js.map} +0 -0
  995. /package/dist/{mds.survivalplot-OPCMB5PB.js.map → mds.survivalplot-KTTMHHII.js.map} +0 -0
  996. /package/dist/{numericDictTermCluster-7MIFOP2K.js.map → numericDictTermCluster-H4JSPW22.js.map} +0 -0
  997. /package/dist/{oncomatrix-BGG6BEUI.js.map → oncomatrix-O4EMNUOT.js.map} +0 -0
  998. /package/dist/{oncomatrix.spec-LYQ4L4F3.js.map → oncomatrix.spec-BME6CQWF.js.map} +0 -0
  999. /package/dist/{plot.2dvaf-6WVCP2ZI.js.map → plot.2dvaf-FDM4KXGT.js.map} +0 -0
  1000. /package/dist/{qualitative-MLRVLIAU.js.map → plot.app-UNUXG7ND.js.map} +0 -0
  1001. /package/dist/{plot.barplot-JEPRZSCU.js.map → plot.barplot-R333TMG2.js.map} +0 -0
  1002. /package/dist/{plot.boxplot-GNFW42VM.js.map → plot.boxplot-KQTYGUN3.js.map} +0 -0
  1003. /package/dist/{plot.brainImaging-5ACNSD45.js.map → plot.brainImaging-YBYMHCEG.js.map} +0 -0
  1004. /package/dist/{plot.disco-Q2V2KKIH.js.map → plot.disco-CMDKRSOM.js.map} +0 -0
  1005. /package/dist/{plot.dzi-KVT6S7K7.js.map → plot.dzi-YAZA6RQS.js.map} +0 -0
  1006. /package/dist/{plot.ssgq-4N3KFJQ2.js.map → plot.ssgq-YKCOEXZP.js.map} +0 -0
  1007. /package/dist/{plot.vaf2cov-ITRG5U43.js.map → plot.vaf2cov-3TLMTFZS.js.map} +0 -0
  1008. /package/dist/{plot.wsi-26YZNU4V.js.map → plot.wsi-7ADVYTQS.js.map} +0 -0
  1009. /package/dist/{regression-WMRPQJW2.js.map → profilePlot-AP52VLLO.js.map} +0 -0
  1010. /package/dist/{regression.inputs-VWZKSYNY.js.map → pseudobulk-7UKRLKQI.js.map} +0 -0
  1011. /package/dist/{regression.inputs.term-OWE6GWHM.js.map → qualitative-2D7MC4V5.js.map} +0 -0
  1012. /package/dist/{regression.inputs.values.table-4INNZQI2.js.map → regression-CE54AQMY.js.map} +0 -0
  1013. /package/dist/{regression.results-VZBYMBYC.js.map → regression.inputs-SMC5CNPY.js.map} +0 -0
  1014. /package/dist/{render-N5FOF247.js.map → regression.inputs.term-XS54IQC2.js.map} +0 -0
  1015. /package/dist/{sampleView-ICOT2R6O.js.map → regression.inputs.values.table-LNPM3MX5.js.map} +0 -0
  1016. /package/dist/{regression.integration.spec-XKQ2JOOT.js.map → regression.integration.spec-6QSMYPWJ.js.map} +0 -0
  1017. /package/dist/{singleCellCellType-D2CN2BHQ.js.map → regression.results-25ZRRDEE.js.map} +0 -0
  1018. /package/dist/{regression.spec-DU3UTDCJ.js.map → regression.spec-EDWHFRPY.js.map} +0 -0
  1019. /package/dist/{singleCellGeneExpression-YR2ZT34W.js.map → render-SEB6GFXQ.js.map} +0 -0
  1020. /package/dist/{report-DW3OHB67.js.map → report-U6L3KBYG.js.map} +0 -0
  1021. /package/dist/{singleCellPlot-3ICIOILE.js.map → sampleView-QAAJ26KT.js.map} +0 -0
  1022. /package/dist/{samplelst-TJEVASYG.js.map → samplelst-KYRXJSZN.js.map} +0 -0
  1023. /package/dist/{samplematrix-6DAWCXQ3.js.map → samplematrix-STLF2QA5.js.map} +0 -0
  1024. /package/dist/{sc-53LNOB7N.js.map → sc-HL6YSMDX.js.map} +0 -0
  1025. /package/dist/{scatter-DKYSS4DL.js.map → scatter-BSGDMOC2.js.map} +0 -0
  1026. /package/dist/{selectGenomeWithTklst-WTX66TV3.js.map → selectGenomeWithTklst-4NHQDTE6.js.map} +0 -0
  1027. /package/dist/{snp-VIURB7L3.js.map → singleCellCellType-3E2IU42J.js.map} +0 -0
  1028. /package/dist/{ssGSEA-THW4WFMI.js.map → singleCellGeneExpression-53UUGYTK.js.map} +0 -0
  1029. /package/dist/{summarizeMutationDiagnosis-AKFJDSAF.js.map → singleCellPlot-JDSARDRV.js.map} +0 -0
  1030. /package/dist/{singlecell-KX7W4U57.js.map → singlecell-IJR7BJYT.js.map} +0 -0
  1031. /package/dist/{singlecell-6ZUFA3BQ.js.map → singlecell-OK6GJFWL.js.map} +0 -0
  1032. /package/dist/{summary-A5P7AYK4.js.map → snp-H4KJEEOE.js.map} +0 -0
  1033. /package/dist/{snp.unit.spec-ACZNZUNS.js.map → snp.unit.spec-2Y4A3XYI.js.map} +0 -0
  1034. /package/dist/{snplocus-3LW4ZUZR.js.map → snplocus-4GG6VTWX.js.map} +0 -0
  1035. /package/dist/{spliceevent.a53ss.diagram-AKTZGWNM.js.map → spliceevent.a53ss.diagram-JZNRC5UC.js.map} +0 -0
  1036. /package/dist/{spliceevent.exonskip.diagram-XZHXB77R.js.map → spliceevent.exonskip.diagram-H54N7ZKY.js.map} +0 -0
  1037. /package/dist/{spliceevent.noeventdiagram-YTXWWNTJ.js.map → spliceevent.noeventdiagram-II753XAK.js.map} +0 -0
  1038. /package/dist/{survival-QNEI6YVK.js.map → ssGSEA-JPJ3C4JI.js.map} +0 -0
  1039. /package/dist/{ssGSEA.unit.spec-HTRGQI2K.js.map → ssGSEA.unit.spec-45F5OCDK.js.map} +0 -0
  1040. /package/dist/{summarizeCnvGeneexp-RFYC3H2Z.js.map → summarizeCnvGeneexp-55DNXHXA.js.map} +0 -0
  1041. /package/dist/{summarizeMutationCnv-7AYEMHAI.js.map → summarizeMutationCnv-QX7BADYL.js.map} +0 -0
  1042. /package/dist/{termCollection-CDF5LYUG.js.map → summarizeMutationDiagnosis-MHFM7RX6.js.map} +0 -0
  1043. /package/dist/{summarizeMutationSurvival-QJHZRQBZ.js.map → summarizeMutationSurvival-G4KHSUBN.js.map} +0 -0
  1044. /package/dist/{tk-OEQFO73V.js.map → summary-PJYRCQNY.js.map} +0 -0
  1045. /package/dist/{summary.integration.spec-HQISXGNL.js.map → summary.integration.spec-KPKROD6L.js.map} +0 -0
  1046. /package/dist/{sunburst-65LSYRXX.js.map → sunburst-IGIV2RBE.js.map} +0 -0
  1047. /package/dist/{survival-UI74VXSM.js.map → survival-DINCIWW7.js.map} +0 -0
  1048. /package/dist/{svgraph-PSX2NER3.js.map → svgraph-EUEZWGVR.js.map} +0 -0
  1049. /package/dist/{svmr-QDQ33EFX.js.map → svmr-B24LODSC.js.map} +0 -0
  1050. /package/dist/{table-LWAI27UO.js.map → table-XSJJ3UZV.js.map} +0 -0
  1051. /package/dist/{toggleButtons-YK7TIFF2.js.map → termCollection-IAB3425K.js.map} +0 -0
  1052. /package/dist/{tvs.density-3XJ6DBGO.js.map → termCollectionFractionSelection-35YKAOUY.js.map} +0 -0
  1053. /package/dist/{tvs.dt-CZDC4TSR.js.map → tk-25EJJDRK.js.map} +0 -0
  1054. /package/dist/{tp.ui-SHNERDGC.js.map → tp.ui-VGA62NFM.js.map} +0 -0
  1055. /package/dist/{tvs.numeric-TOEPASWN.js.map → tvs.density-G56327WY.js.map} +0 -0
  1056. /package/dist/{violin-2YGXTBDS.js.map → tvs.dt-DFW36WKO.js.map} +0 -0
  1057. /package/dist/{tvs.dtcnv.categorical-OPBDHZGB.js.map → tvs.dtcnv.categorical-ZP33EO3A.js.map} +0 -0
  1058. /package/dist/{tvs.dtcnv.continuous-AR6P4EP3.js.map → tvs.dtcnv.continuous-FJTMQF4J.js.map} +0 -0
  1059. /package/dist/{tvs.dtfusion-2YQ7N6FQ.js.map → tvs.dtfusion-FTDQWNKM.js.map} +0 -0
  1060. /package/dist/{tvs.dtitd-ATCHW735.js.map → tvs.dtitd-W5VEECJ2.js.map} +0 -0
  1061. /package/dist/{tvs.dtsnvindel-WHHWAATJ.js.map → tvs.dtsnvindel-UOXSLCDZ.js.map} +0 -0
  1062. /package/dist/{tvs.dtsv-3UMCW65O.js.map → tvs.dtsv-HWCPRVBO.js.map} +0 -0
  1063. /package/dist/{violin.interactivity-J6BE2UQL.js.map → tvs.numeric-7TGKWQYU.js.map} +0 -0
  1064. /package/dist/{tvs.samplelst-M7XKXRTZ.js.map → tvs.samplelst-OWD22ITS.js.map} +0 -0
  1065. /package/dist/{violin.renderer-3GRUWP2U.js.map → violin-2IAVZGFF.js.map} +0 -0
  1066. /package/dist/{vocabulary-2INCVPYJ.js.map → violin.interactivity-STOCZMVN.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../plots/volcano/viewModel/VolcanoViewModel.ts", "../plots/volcano/interactions/VolcanoInteractions.ts", "../plots/volcano/view/VolcanoPlotView.ts", "../plots/volcano/VolcanoControlInputs.ts", "../plots/volcano/Volcano.ts"],
4
+ "sourcesContent": ["import type {\n\tVolcanoPlotDimensions,\n\tVolcanoPlotConfig,\n\tVolcanoPValueTableData,\n\tVolcanoViewData,\n\tDataPointEntry\n} from '../VolcanoTypes'\nimport type { ValidatedVolcanoSettings } from '../settings/Settings'\nimport type { DEFullResponse } from '#types'\nimport { scaleLinear } from 'd3-scale'\nimport { roundValueAuto } from '#shared/roundValue.js'\nimport { getSampleNum } from '../settings/defaults'\nimport { getGroupColors } from '../colors'\nimport { DATermTypes as tt, enabledTermTypes } from '../../diffAnalysis/enabledTermTypes'\n\nexport class VolcanoViewModel {\n\tconfig: any\n\tdataType: string\n\tresponse: DEFullResponse\n\tpValueTable: VolcanoPValueTableData\n\tsettings: any\n\ttermType: string\n\tviewData: VolcanoViewData\n\tnumSignificant = 0\n\tnumNonSignificant = 0\n\tminLogFoldChange = 0\n\tmaxLogFoldChange = 0\n\t//Used for the y axis domain\n\tminLogPValue = 0\n\tmaxLogPValue = 0\n\t//Unpadded extents \u2014 used for the visible axis labels/ticks (only span real data)\n\tminLogFoldChangeAxis = 0\n\tmaxLogFoldChangeAxis = 0\n\tminLogPValueAxis = 0\n\tmaxLogPValueAxis = 0\n\t//Dot radius in pixels (from server) \u2014 overlay rings size to match the PNG\n\tdotRadiusPx = 2\n\t//Used in place of 0 p values that cannot be log transformed\n\tminNonZeroPValue = 10e-10\n\t//The x coord flush with the left side of the plot\n\tplotX: number\n\treadonly offset = 10\n\treadonly bottomPad = 60\n\treadonly horizPad = 70\n\treadonly topPad = 40\n\t/** Interactive rows returned by the server: threshold-passing dots, sorted by\n\t * significance. The full scatter lives in `response.volcanoPng`. */\n\tdataRows: DataPointEntry[]\n\n\tconstructor(config: VolcanoPlotConfig, response: DEFullResponse, settings: ValidatedVolcanoSettings) {\n\t\tthis.config = config\n\t\tthis.response = response\n\t\tthis.plotX = this.horizPad + this.offset * 2\n\n\t\tthis.dataRows = response.data.dots as DataPointEntry[]\n\n\t\t// Shared helper (colors.ts) so the SVG overlay and the server PNG paint\n\t\t// each side in the exact same hex.\n\t\tconst { caseColor, controlColor } = getGroupColors(this.config)\n\t\tconst barplot = { colorNegative: controlColor, colorPositive: caseColor }\n\n\t\tthis.pValueTable = {\n\t\t\tcolumns: [\n\t\t\t\t{ label: 'log\u2082(fold-change)', barplot, sortable: true },\n\t\t\t\t// DAP files carry a single FDR (adjusted p-value); other term types report\n\t\t\t\t// both a raw and an adjusted p-value.\n\t\t\t\t...(config.termType == tt.PROTEOME_DAP\n\t\t\t\t\t? [{ label: 'FDR', sortable: true }]\n\t\t\t\t\t: [\n\t\t\t\t\t\t\t{ label: 'Original p-value', sortable: true },\n\t\t\t\t\t\t\t{ label: 'Adjusted p-value', sortable: true }\n\t\t\t\t\t ])\n\t\t\t],\n\t\t\t/** Arr set in setPointData() if settings.showPValueTable is true to\n\t\t\t * prevent unnecessary data processing when the table is not shown */\n\t\t\trows: [],\n\t\t\theight: settings.height + this.topPad\n\t\t}\n\t\tthis.settings = settings\n\t\tthis.termType = config.termType\n\t\tthis.dataType = this.setDataType()\n\n\t\tthis.setMinMaxValues()\n\n\t\tconst plotDim = this.setPlotDimensions()\n\t\tthis.setPTableColumns()\n\t\tconst pointData = this.setPointData(plotDim, controlColor, caseColor)\n\n\t\tif (this.settings.showPValueTable) {\n\t\t\t//Get all rows data for the pValueTable in setPointsData, then sort by fold change\n\t\t\tconst foldChangeIdx = this.pValueTable.columns.findIndex(c => c.label.includes('log\u2082(fold-change)'))\n\t\t\tthis.pValueTable.rows.sort((a: any, b: any) => b[foldChangeIdx].value - a[foldChangeIdx].value)\n\t\t}\n\n\t\tthis.viewData = {\n\t\t\timages: response.images || [],\n\t\t\ttermInfo: this.setTermInfo(plotDim),\n\t\t\tplotDim,\n\t\t\tpointData,\n\t\t\tpValueTableData: this.pValueTable,\n\t\t\tstatsData: this.setStatsData(),\n\t\t\tuserActions: this.setUserActions(),\n\t\t\tvolcanoPng: response.data.volcanoPng,\n\t\t\tplotExtent: response.data.plotExtent\n\t\t}\n\t}\n\n\tsetDataType() {\n\t\tif (this.termType == tt.GENE_EXPRESSION) return 'genes'\n\t\tif (this.termType == tt.DNA_METHYLATION) return 'promoters'\n\t\tif (this.termType == tt.SINGLECELL_CELLTYPE) return 'genes'\n\t\tif (this.termType == tt.PROTEOME_DAP) return 'proteins'\n\t\tif (this.termType == tt.SINGLECELL_GENE_EXPRESSION) return 'cells'\n\t\tthrow new Error(`Unknown termType: ${this.termType}`)\n\t}\n\n\tsetMinMaxValues() {\n\t\t// The server-drawn PNG owns the axes; we adopt its extents verbatim so\n\t\t// overlay circles land on their counterparts in the PNG. Also adopt the\n\t\t// server's minNonZeroPValue so p=0 rows are capped at the same y position\n\t\t// the PNG used.\n\t\tconst ext = this.response.data.plotExtent\n\t\t// Padded extents \u2014 used for positioning overlay dots & PNG (so dots near\n\t\t// the real-data edge stay fully visible).\n\t\tthis.minLogFoldChange = ext.xMin\n\t\tthis.maxLogFoldChange = ext.xMax\n\t\tthis.minLogPValue = ext.yMin\n\t\tthis.maxLogPValue = ext.yMax\n\t\t// Unpadded extents \u2014 used only for the visible axis ticks/labels.\n\t\tthis.minLogFoldChangeAxis = ext.xMinUnpadded\n\t\tthis.maxLogFoldChangeAxis = ext.xMaxUnpadded\n\t\tthis.minLogPValueAxis = ext.yMinUnpadded\n\t\tthis.maxLogPValueAxis = ext.yMaxUnpadded\n\t\tthis.dotRadiusPx = ext.dotRadiusPx\n\t\tif (ext.minNonZeroPValue > 0) this.minNonZeroPValue = ext.minNonZeroPValue\n\t}\n\n\tsetPlotDimensions() {\n\t\t// Trust the server's authoritative PNG dimensions for the plot rect.\n\t\t// (Recomputing as `settings.width + 2*dotRadiusPx` is wrong when rust's\n\t\t// `pad_px = ceil(2*dot_radius)` rounds up for non-integer dot_radius \u2014\n\t\t// the SVG plot rect would scale the PNG and break pixel_x/pixel_y\n\t\t// alignment with the rasterized dots.)\n\t\tconst ext = this.response.data.plotExtent\n\t\tconst plotW = ext.pixelWidth\n\t\tconst plotH = ext.pixelHeight\n\n\t\t// Positioning scales \u2014 padded data range covers the full plot rect.\n\t\t// Used for overlay dot placement, the PNG image, and the fold-change line.\n\t\tconst xPlotScale = scaleLinear().domain([this.minLogFoldChange, this.maxLogFoldChange]).range([0, plotW])\n\t\tconst yPlotScale = scaleLinear().domain([this.minLogPValue, this.maxLogPValue]).range([plotH, 0])\n\n\t\t// Visible axis scales \u2014 unpadded domain mapped onto the matching pixel\n\t\t// subrange of the padded plot, so axis ticks land exactly at their data\n\t\t// values in the PNG (mirror of manhattan's yAxisScale).\n\t\tconst xScale = scaleLinear()\n\t\t\t.domain([this.minLogFoldChangeAxis, this.maxLogFoldChangeAxis])\n\t\t\t.range([xPlotScale(this.minLogFoldChangeAxis), xPlotScale(this.maxLogFoldChangeAxis)])\n\t\tconst yScale = scaleLinear()\n\t\t\t.domain([this.minLogPValueAxis, this.maxLogPValueAxis])\n\t\t\t.range([yPlotScale(this.minLogPValueAxis), yPlotScale(this.maxLogPValueAxis)])\n\n\t\treturn {\n\t\t\tsvg: {\n\t\t\t\t//20 is for the term info above the plot\n\t\t\t\theight: plotH + this.topPad + this.bottomPad * 2 + this.offset * 3,\n\t\t\t\twidth: plotW + this.horizPad * 2\n\t\t\t},\n\t\t\ttop: {\n\t\t\t\tx: this.plotX,\n\t\t\t\ty: 5\n\t\t\t},\n\t\t\txAxisLabel: {\n\t\t\t\tx: this.horizPad + plotW / 2 + this.offset,\n\t\t\t\ty: this.topPad + plotH + this.bottomPad + this.offset\n\t\t\t},\n\t\t\txScale: {\n\t\t\t\tscale: xScale,\n\t\t\t\tx: this.plotX,\n\t\t\t\ty: plotH + this.topPad + this.offset * 2\n\t\t\t},\n\t\t\tyAxisLabel: {\n\t\t\t\ttext: this.termType == tt.PROTEOME_DAP ? '-log10(FDR)' : `-log10(${this.settings.pValueType} P value)`,\n\t\t\t\tx: this.horizPad / 3,\n\t\t\t\ty: this.topPad + plotH / 2\n\t\t\t},\n\t\t\tyScale: {\n\t\t\t\tscale: yScale,\n\t\t\t\tx: this.horizPad,\n\t\t\t\ty: this.topPad\n\t\t\t},\n\t\t\tplot: {\n\t\t\t\theight: plotH,\n\t\t\t\twidth: plotW,\n\t\t\t\tx: this.plotX,\n\t\t\t\ty: this.topPad\n\t\t\t},\n\t\t\tlogFoldChangeLine: {\n\t\t\t\tx: xPlotScale(0) + this.plotX,\n\t\t\t\ty1: this.topPad,\n\t\t\t\ty2: plotH + this.offset * 4\n\t\t\t},\n\t\t\txPlotScale,\n\t\t\tyPlotScale\n\t\t}\n\t}\n\n\tsetTermInfo(\n\t\tplotDim: VolcanoPlotDimensions\n\t\t// caseColor: string,\n\t\t// controlColor: string\n\t) {\n\t\tif (!enabledTermTypes.has(this.termType as any)) return\n\t\tconst getLabel = (name: string) => {\n\t\t\tif (name.length >= 25) return name.substring(0, 20) + '...'\n\t\t\treturn name\n\t\t}\n\n\t\tif (this.termType == tt.PROTEOME_DAP) {\n\t\t\t// FIXME this shouldn't be needed. there should be a way for caller to supply names for each group, and avoid this special logic and SINGLECELL_CELLTYPE\n\t\t\treturn {\n\t\t\t\ty: plotDim.top.y + 10,\n\t\t\t\tfirst: {\n\t\t\t\t\tlabel: getLabel(`Control (${this.response.sample_size1})`),\n\t\t\t\t\tx: 0\n\t\t\t\t},\n\t\t\t\tsecond: {\n\t\t\t\t\tlabel: getLabel(`Case (${this.response.sample_size2})`),\n\t\t\t\t\tx: this.settings.width\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (this.termType == tt.SINGLECELL_CELLTYPE) {\n\t\t\t/* quick fix - this only works for gdc's precomputed DE genes (selected cluster vs rest of cells)\n\t\t\tthis won't work for dynamic DE (user-selected cluster A vs cluster B)\n\t\t\tthus not okay to hardcode `Not in` here\n\t\t\t!! FIXME !!\n\t\t\tsc should come up with actual names, and cell counts, for precompute/dynamic groups\n\t\t\t*/\n\t\t\tconst groupLabel = `${this.config.termId} ${this.config.categoryName}`\n\t\t\treturn {\n\t\t\t\ty: plotDim.top.y + 10,\n\t\t\t\tfirst: {\n\t\t\t\t\tlabel: getLabel(`Not in ${groupLabel}`),\n\t\t\t\t\tx: 0\n\t\t\t\t},\n\t\t\t\tsecond: {\n\t\t\t\t\tlabel: getLabel(groupLabel),\n\t\t\t\t\tx: this.settings.width\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn {\n\t\t\t//Set slightly above the plot\n\t\t\ty: plotDim.top.y + 10,\n\t\t\tfirst: {\n\t\t\t\t// color: controlColor || this.settings.defaultSignColor,\n\t\t\t\tlabel: getLabel(`${this.config.samplelst.groups[0].name} (${this.response.sample_size1})`),\n\t\t\t\tx: 0\n\t\t\t\t// rectX: this.settings.width/2 - 10,\n\t\t\t},\n\t\t\tsecond: {\n\t\t\t\t// color: caseColor || this.settings.defaultSignColor,\n\t\t\t\tlabel: getLabel(`${this.config.samplelst.groups[1].name} (${this.response.sample_size2})`),\n\t\t\t\tx: this.settings.width\n\t\t\t\t// rectX: this.settings.width/2 + 10,\n\t\t\t}\n\t\t}\n\t}\n\n\tsetPointData(_plotDim: VolcanoPlotDimensions, controlColor: string, caseColor: string) {\n\t\t// Use the server-supplied radius so SVG overlay rings sit exactly on top\n\t\t// of the PNG rings. The view's renderDataPoints draws them at stroke-width\n\t\t// 1 to match the rust PNG's stroke geometry.\n\t\tconst radius = this.dotRadiusPx\n\t\tconst dataCopy: any = structuredClone(this.dataRows)\n\t\tfor (const d of dataCopy) {\n\t\t\tconst highlightKey = this.termType === tt.DNA_METHYLATION ? d.promoter_id : d.gene_name\n\t\t\td.highlighted = this.config?.highlightedData?.includes(highlightKey)\n\t\t\t// Every row in response.data passed the server's thresholds by definition.\n\t\t\td.significant = true\n\t\t\tthis.getGenesColor(d, d.significant, controlColor, caseColor)\n\t\t\tif (d.significant) {\n\t\t\t\tthis.numSignificant++\n\t\t\t\t// DAP carries a single FDR (in original_p_value); keep the row cells in\n\t\t\t\t// lock-step with the column set built in the constructor.\n\t\t\t\tconst row =\n\t\t\t\t\tthis.termType == tt.PROTEOME_DAP\n\t\t\t\t\t\t? [{ value: roundValueAuto(d.fold_change) }, { value: roundValueAuto(d.original_p_value) }]\n\t\t\t\t\t\t: [\n\t\t\t\t\t\t\t\t{ value: roundValueAuto(d.fold_change) },\n\t\t\t\t\t\t\t\t{ value: roundValueAuto(d.original_p_value) },\n\t\t\t\t\t\t\t\t{ value: d.adjusted_p_value != undefined ? roundValueAuto(d.adjusted_p_value) : '' }\n\t\t\t\t\t\t ]\n\t\t\t\tif (this.termType == tt.DNA_METHYLATION) {\n\t\t\t\t\trow.splice(0, 0, { value: d.promoter_id || '' }, { value: d.gene_name || '' })\n\t\t\t\t} else if (this.termType == tt.PROTEOME_DAP) {\n\t\t\t\t\trow.splice(0, 0, { value: d.gene_name || '' }, { value: d.gene || '' })\n\t\t\t\t} else {\n\t\t\t\t\trow.splice(0, 0, { value: d.gene_name || '' })\n\t\t\t\t}\n\t\t\t\t//Do not create p-value table data unless user opts to show the table\n\t\t\t\tif (this.settings.showPValueTable) this.pValueTable.rows.push(row)\n\t\t\t} else {\n\t\t\t\tthis.numNonSignificant++\n\t\t\t}\n\t\t\t// Use the exact pixel coords plotters used to rasterize this dot in\n\t\t\t// the PNG (echoed back from rust per-point). Translating by plotX /\n\t\t\t// topPad shifts from inner-plot pixel space to SVG-absolute coords.\n\t\t\t// This is the manhattan trick \u2014 guarantees the SVG overlay ring lands\n\t\t\t// on the rasterized PNG dot regardless of float-vs-int conventions.\n\t\t\td.x = d.pixel_x + this.plotX\n\t\t\td.y = d.pixel_y + this.topPad\n\t\t\td.radius = radius\n\t\t}\n\t\t// Use the server's pre-truncation count so stats are correct even when\n\t\t// dots was capped by maxInteractiveDots.\n\t\tthis.numSignificant = this.response.data.totalSignificantRows\n\t\tthis.numNonSignificant = Math.max(0, this.response.data.totalRows - this.numSignificant)\n\t\t//Sort so the highlighted points appear on top\n\t\tdataCopy.sort((a: any, b: any) => a.highlighted - b.highlighted)\n\t\treturn dataCopy\n\t}\n\n\tgetGenesColor(d: DataPointEntry, significant: boolean, controlColor: string, caseColor: string) {\n\t\tif (!d.gene_name && this.termType != tt.DNA_METHYLATION)\n\t\t\tthrow new Error(`Missing gene_name in data: ${JSON.stringify(d)}`)\n\t\tif (significant) {\n\t\t\tif (controlColor && caseColor) d.color = d.fold_change > 0 ? caseColor : controlColor\n\t\t\telse d.color = this.settings.defaultSignColor\n\t\t} else d.color = this.settings.defaultNonSignColor\n\t}\n\n\tsetStatsData() {\n\t\tconst tableRows = [\n\t\t\t{\n\t\t\t\tlabel: `Percentage of significant ${this.dataType}`,\n\t\t\t\tvalue: roundValueAuto((this.numSignificant * 100) / (this.numSignificant + this.numNonSignificant))\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: `Number of significant ${this.dataType}`,\n\t\t\t\tvalue: this.numSignificant\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: `Number of total ${this.dataType}`,\n\t\t\t\tvalue: this.numSignificant + this.numNonSignificant\n\t\t\t}\n\t\t]\n\t\tif (this.termType == tt.GENE_EXPRESSION || this.termType == tt.DNA_METHYLATION) {\n\t\t\ttableRows.push(\n\t\t\t\t{\n\t\t\t\t\tlabel: this.config.samplelst.groups[0].name + ' sample size (control group)',\n\t\t\t\t\tvalue: this.response.sample_size1\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: this.config.samplelst.groups[1].name + ' sample size (case group)',\n\t\t\t\t\tvalue: this.response.sample_size2\n\t\t\t\t}\n\t\t\t)\n\t\t} else if (this.termType == tt.PROTEOME_DAP) {\n\t\t\ttableRows.push(\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Control sample size',\n\t\t\t\t\tvalue: this.response.sample_size1\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Case sample size',\n\t\t\t\t\tvalue: this.response.sample_size2\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\n\t\tif (this.response.bcv !== undefined && this.response.bcv !== null) {\n\t\t\ttableRows.push({\n\t\t\t\tlabel: 'Biological coefficient of variation',\n\t\t\t\tvalue: roundValueAuto(this.response.bcv)\n\t\t\t})\n\t\t}\n\t\treturn tableRows\n\t}\n\n\tsetPTableColumns() {\n\t\tif (this.termType == tt.DNA_METHYLATION) {\n\t\t\tthis.pValueTable.columns.splice(0, 0, { label: 'Promoter', sortable: true }, { label: 'Gene(s)', sortable: true })\n\t\t} else if (this.termType == tt.PROTEOME_DAP) {\n\t\t\tthis.pValueTable.columns.splice(0, 0, { label: 'Identifier', sortable: true }, { label: 'Gene', sortable: true })\n\t\t} else {\n\t\t\tthis.pValueTable.columns.splice(0, 0, { label: 'Gene Name', sortable: true })\n\t\t}\n\t}\n\n\tsetUserActions() {\n\t\tconst userActions = {\n\t\t\tnoShow: new Set<string>()\n\t\t}\n\t\tif (this.termType == tt.GENE_EXPRESSION) {\n\t\t\tif (this.settings.method == 'edgeR' && getSampleNum(this.config) > 100) {\n\t\t\t\tuserActions.noShow.add('Confounding factors')\n\t\t\t}\n\t\t\tif (this.settings.method == 'wilcoxon') userActions.noShow.add('Confounding factors')\n\t\t}\n\t\treturn userActions\n\t}\n}\n", "import type { MassAppApi } from '#mass/types/mass'\nimport { downloadTable, GeneSetEditUI, MultiTermWrapperEditUI } from '#dom'\nimport { to_svg } from '#src/client'\nimport type { VolcanoDom, VolcanoPlotConfig } from '../VolcanoTypes'\nimport { PROTEOME_DAP, DNA_METHYLATION, GENE_EXPRESSION } from '#types'\nimport { getGEunit } from '#tw/geneExpression'\n\nexport class VolcanoInteractions {\n\tapp: MassAppApi\n\tdom: VolcanoDom\n\tid: string\n\tpValueTableData: any\n\tdata: any\n\n\tconstructor(app: MassAppApi, id: string, dom: VolcanoDom) {\n\t\tthis.app = app\n\t\tthis.dom = dom\n\t\tthis.id = id\n\t\tthis.pValueTableData = []\n\t\tthis.data = []\n\t}\n\n\t/** Launches a multi-term select tree\n\t * On submit, dispatches a plot_edit action with the new confounders */\n\tasync confoundersMenu() {\n\t\tconst state = this.app.getState()\n\t\tconst config = state.plots.find((p: VolcanoPlotConfig) => p.id === this.id)\n\t\tif (config.termType !== GENE_EXPRESSION && config.termType !== DNA_METHYLATION) return\n\n\t\t/** Find terms used to create the groups and disable in the\n\t\t * termsetting UI. Prevents users from trying to control for\n\t\t * variables used to create the groups.*/\n\t\tconst allowedGroupNames = new Set([config.samplelst.groups[0].name, config.samplelst.groups[1].name])\n\t\tconst grpTerms: Set<string> = new Set(\n\t\t\t(this.app?.vocabApi?.state.groups || [])\n\t\t\t\t.filter(g => allowedGroupNames.has(g.name))\n\t\t\t\t.flatMap(g =>\n\t\t\t\t\tg.filter.lst.flatMap(f => {\n\t\t\t\t\t\tif (f.tvs?.term) return f.tvs.term\n\t\t\t\t\t\telse return f.lst.map(l => l.tvs.term)\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t)\n\t\tconst disable_terms: any[] = grpTerms.size ? Array.from(grpTerms) : []\n\t\tconst maxNum = config.settings.volcano.method == 'edgeR' ? 1 : 2\n\n\t\tconst ui = new MultiTermWrapperEditUI({\n\t\t\tapp: this.app,\n\t\t\tcallback: async (tws: any) => {\n\t\t\t\tthis.dom.actionsTip.hide()\n\t\t\t\tawait this.app.dispatch({\n\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\tid: this.id,\n\t\t\t\t\tconfig: { confounderTws: tws }\n\t\t\t\t})\n\t\t\t},\n\t\t\tholder: this.dom.actionsTip.d as any,\n\t\t\theaderText: 'Select confounders',\n\t\t\tmaxNum,\n\t\t\tstate,\n\t\t\ttwList: config.confounderTws,\n\t\t\tdisable_terms\n\t\t})\n\t\tawait ui.renderUI()\n\t}\n\n\tdownload(termType: string) {\n\t\tthis.dom.actionsTip.clear().showunder(this.dom.controls.select('div').node())\n\t\tconst opts = [\n\t\t\t{\n\t\t\t\ttext: 'Download plot',\n\t\t\t\tcallback: () => {\n\t\t\t\t\tconst svg = this.dom.holder.select('svg').node() as Node\n\t\t\t\t\tto_svg(svg, `Differential ${termType} analysis volcano`, { apply_dom_styles: true })\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\t// DAP volcanoes report a single FDR rather than a p-value.\n\t\t\t\ttext: termType === PROTEOME_DAP ? 'Download FDR table' : 'Download p value table',\n\t\t\t\tcallback: () => {\n\t\t\t\t\tdownloadTable(this.pValueTableData.rows, this.pValueTableData.columns)\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t\tfor (const opt of opts) {\n\t\t\tthis.dom.actionsTip.d.append('div').attr('class', 'sja_menuoption').text(opt.text).on('click', opt.callback)\n\t\t}\n\t}\n\n\tasync highlightDataPoint(value: string) {\n\t\tconst config = this.app.getState().plots.find((p: VolcanoPlotConfig) => p.id === this.id)\n\t\tconst highlightedData = config.highlightedData.includes(value)\n\t\t\t? config.highlightedData.filter(d => d !== value)\n\t\t\t: [...config.highlightedData, value]\n\t\tawait this.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: this.id,\n\t\t\tconfig: { highlightedData }\n\t\t})\n\t}\n\n\t/** When clicking on a data point, launches the box plot in a separate sandbox\n\t * For geneExpression, value == gene symbol */\n\tlaunchBoxPlot(value: string) {\n\t\tconst config = this.app.getState().plots.find((p: VolcanoPlotConfig) => p.id === this.id)\n\t\tconst values = {}\n\t\tfor (const group of config.samplelst.groups) {\n\t\t\tvalues[group.name] = {\n\t\t\t\tkey: group.name,\n\t\t\t\tlabel: group.name,\n\t\t\t\tlist: group.values\n\t\t\t}\n\t\t}\n\t\t/** Gene variant and expression terms do not have an id\n\t\t * need to be handled separately.\n\t\t * TODO: In the future with more use cases, simplify this logic. */\n\t\tconst setTerm = () => {\n\t\t\tif (config.termType == GENE_EXPRESSION) {\n\t\t\t\treturn {\n\t\t\t\t\tq: { mode: 'continuous' },\n\t\t\t\t\tterm: {\n\t\t\t\t\t\tgene: value,\n\t\t\t\t\t\tname: value,\n\t\t\t\t\t\ttype: config.termType\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else return config.term\n\t\t}\n\t\tthis.app.dispatch({\n\t\t\ttype: 'plot_create',\n\t\t\tconfig: {\n\t\t\t\tchartType: 'summary',\n\t\t\t\tchildType: 'boxplot',\n\t\t\t\tterm: setTerm(),\n\t\t\t\tterm2: {\n\t\t\t\t\tq: { groups: config.tw.q.groups, type: 'custom-samplelst' },\n\t\t\t\t\tterm: config.tw.term\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\n\t/** Launch a violin plot for a gene expression data point. */\n\tlaunchViolinGeneExp(value: string) {\n\t\tconst config = this.app.getState().plots.find((p: VolcanoPlotConfig) => p.id === this.id)\n\t\tthis.app.dispatch({\n\t\t\ttype: 'plot_create',\n\t\t\tconfig: {\n\t\t\t\tchartType: 'summary',\n\t\t\t\tchildType: 'violin',\n\t\t\t\tterm: {\n\t\t\t\t\tq: { mode: 'continuous' },\n\t\t\t\t\tterm: {\n\t\t\t\t\t\tgene: value,\n\t\t\t\t\t\tname: value,\n\t\t\t\t\t\ttype: config.termType\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tterm2: {\n\t\t\t\t\tq: { groups: config.tw.q.groups, type: 'custom-samplelst' },\n\t\t\t\t\tterm: config.tw.term\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\n\tlaunchGeneSetEdit() {\n\t\tconst plotConfig = this.app.getState().plots.find((p: VolcanoPlotConfig) => p.id === this.id)\n\t\tconst holder = this.dom.actionsTip.d.append('div').style('padding', '5px') as any\n\t\tconst limitedGenesList =\n\t\t\tplotConfig.termType === DNA_METHYLATION ? this.data.map(d => d.promoter_id) : this.data.map(d => d.gene_name)\n\t\tnew GeneSetEditUI({\n\t\t\tholder,\n\t\t\tgenome: this.app.opts.genome,\n\t\t\tvocabApi: this.app.vocabApi,\n\t\t\tlimitedGenesList,\n\t\t\tgeneList: plotConfig.highlightedData.map(d => {\n\t\t\t\treturn { gene: d } //Formatted to Gene type in GeneSetEditUI\n\t\t\t}),\n\t\t\tcustomInputs: [\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Cancel highlight',\n\t\t\t\t\tgetDisplayStyle: () => (plotConfig.highlightedData.length > 0 ? '' : 'none'),\n\t\t\t\t\tshowInput: async () => {\n\t\t\t\t\t\tawait this.app.dispatch({\n\t\t\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\t\t\tid: this.id,\n\t\t\t\t\t\t\tconfig: { highlightedData: [] }\n\t\t\t\t\t\t})\n\t\t\t\t\t\tthis.dom.actionsTip.hide()\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\t\t\tcallback: async result => {\n\t\t\t\tconst highlightedData = result.geneList.map(d => d.gene)\n\t\t\t\tawait this.app.dispatch({\n\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\tid: this.id,\n\t\t\t\t\tconfig: { highlightedData }\n\t\t\t\t})\n\t\t\t\tthis.dom.actionsTip.hide()\n\t\t\t}\n\t\t})\n\t}\n\n\t/** When clicking on a DM data point, dispatches a DMR plot that runs DMRCate\n\t * analysis and renders a genome browser Block with DMR regions on their own\n\t * track. */\n\tasync launchDmr(d: { chr: string; start: number; stop: number; promoterId?: string }) {\n\t\tconst config = this.app.getState().plots.find((p: VolcanoPlotConfig) => p.id === this.id)\n\n\t\tconst controlColor = config?.tw?.term?.values?.[config?.samplelst?.groups[0].name]?.color || '#ff0000'\n\t\tconst caseColor = config?.tw?.term?.values?.[config?.samplelst?.groups[1].name]?.color || '#0000ff'\n\n\t\tconst label = d.promoterId || `${d.chr}:${d.start}-${d.stop}`\n\t\tconst dmrConfig: any = {\n\t\t\tchartType: 'dmr',\n\t\t\theaderText: `DMR: ${label}`,\n\t\t\tcoordinateOverride: { chr: d.chr, start: d.start, stop: d.stop },\n\t\t\tgroup1: config.samplelst.groups[0].values || [],\n\t\t\tgroup2: config.samplelst.groups[1].values || [],\n\t\t\tgroup1Name: config.samplelst.groups[0].name,\n\t\t\tgroup2Name: config.samplelst.groups[1].name,\n\t\t\tsettings: {\n\t\t\t\tcolors: { group1: controlColor, group2: caseColor }\n\t\t\t}\n\t\t}\n\n\t\tthis.app.dispatch({\n\t\t\ttype: 'plot_create',\n\t\t\tconfig: dmrConfig\n\t\t})\n\t}\n\n\t/** Launch a violin/box plot for a DNA methylation promoter.\n\t * Creates a methylation term using the promoter's chr/start/stop coordinates.\n\t * The tw handler fills in id and unit from termdbConfig. */\n\tlaunchDNAMethViolin(d: { chr: string; start: number; stop: number; gene_name?: string; promoter_id?: string }) {\n\t\tconst config = this.app.getState().plots.find((p: VolcanoPlotConfig) => p.id === this.id)\n\t\tconst genomicFeatureType = d.promoter_id ? 'promoter' : 'gene'\n\t\tconst featureName = genomicFeatureType === 'gene' ? d.gene_name?.split(',')[0]?.trim() || '' : ''\n\t\tthis.app.dispatch({\n\t\t\ttype: 'plot_create',\n\t\t\tconfig: {\n\t\t\t\tchartType: 'summary',\n\t\t\t\tchildType: 'violin',\n\t\t\t\tterm: {\n\t\t\t\t\tq: { mode: 'continuous' },\n\t\t\t\t\tterm: {\n\t\t\t\t\t\tgenomicFeatureType,\n\t\t\t\t\t\tfeatureName,\n\t\t\t\t\t\ttype: DNA_METHYLATION,\n\t\t\t\t\t\tchr: d.chr,\n\t\t\t\t\t\tstart: d.start,\n\t\t\t\t\t\tstop: d.stop\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tterm2: {\n\t\t\t\t\tq: { groups: config.tw.q.groups, type: 'custom-samplelst' },\n\t\t\t\t\tterm: config.tw.term\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\n\tasync launchDEGClustering() {\n\t\t//Sort the DEG rows by q-value in ascending order\n\t\tconst geneIndex = this.pValueTableData.columns.findIndex(col => col.label === 'Gene Name')\n\t\tconst adjustedPValIndex = this.pValueTableData.columns.findIndex(col => col.label === 'Adjusted p-value')\n\t\tconst rowsSorted = [...this.pValueTableData.rows].sort((a, b) => {\n\t\t\tconst aQVal = Number(a[adjustedPValIndex].value)\n\t\t\tconst bQVal = Number(b[adjustedPValIndex].value)\n\t\t\treturn aQVal - bQVal\n\t\t})\n\n\t\t// Launch hierCluster for up to 100 DEGs with the smallest q-values\n\t\tconst geneList = rowsSorted.slice(0, 100).map(r => ({ gene: r[geneIndex].value }))\n\n\t\tconst tws = geneList.map(d => {\n\t\t\tconst gene = d.gene\n\t\t\tconst unit = getGEunit(this.app.vocabApi)\n\t\t\tconst name = `${gene} ${unit}`\n\t\t\tconst term = { gene, name, type: GENE_EXPRESSION }\n\t\t\treturn { term, q: {} }\n\t\t})\n\n\t\tconst group = { lst: tws, type: 'hierCluster' }\n\t\tconst customVariable = this.app.getState().plots.find((p: any) => p.id === this.id).tw\n\t\tconst annotationGroup = { lst: [customVariable] }\n\t\tconst config = {\n\t\t\tchartType: 'hierCluster',\n\t\t\ttermgroups: [group, annotationGroup],\n\t\t\tdataType: GENE_EXPRESSION,\n\t\t\tfilter: {\n\t\t\t\tin: true,\n\t\t\t\tjoin: '',\n\t\t\t\ttype: 'tvslst',\n\t\t\t\tlst: [{ type: 'tvs', tvs: { term: customVariable.term } }]\n\t\t\t}\n\t\t}\n\t\tawait this.app.dispatch({\n\t\t\ttype: 'plot_create',\n\t\t\tconfig: structuredClone(config)\n\t\t})\n\t}\n}\n", "import { axisstyle, table2col, renderTable, DataPointInteractions, type ActionMenuItem } from '#dom'\nimport { axisBottom, axisLeft, rgb, select, selectAll } from 'd3'\nimport type { DataPointEntry, VolcanoDom, VolcanoPlotDimensions, VolcanoViewData } from '../VolcanoTypes'\nimport type { VolcanoPlotDom } from './VolcanoPlotDom'\nimport type { VolcanoInteractions } from '../interactions/VolcanoInteractions'\nimport { DATermTypes as tt } from '../../diffAnalysis/enabledTermTypes'\nimport { roundValueAuto } from '#shared/roundValue.js'\nimport type { ValidatedVolcanoSettings } from '../settings/Settings'\n\nexport class VolcanoPlotView {\n\tdom: VolcanoDom\n\tinteractions: VolcanoInteractions\n\tsettings: any\n\ttermType: string\n\tvolcanoDom: VolcanoPlotDom\n\tviewData!: VolcanoViewData\n\n\tconstructor(dom: VolcanoDom, interactions: VolcanoInteractions, termType: string) {\n\t\tthis.dom = dom\n\t\tthis.interactions = interactions\n\t\tthis.termType = termType\n\t\tconst actions = this.dom.holder\n\t\t\t.append('div')\n\t\t\t.attr('id', 'sjpp-volcano-actions')\n\t\t\t.style('display', 'block')\n\t\t\t.style('z-index', 1)\n\t\t\t.style('position', 'relative')\n\t\tconst svg = this.dom.holder\n\t\t\t.append('svg')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.attr('id', 'sjpp-volcano-svg')\n\t\t\t.style('vertical-align', 'top')\n\t\tthis.volcanoDom = {\n\t\t\tactions,\n\t\t\tsvg,\n\t\t\tpValueTable: undefined,\n\t\t\ttop: undefined,\n\t\t\txAxis: undefined,\n\t\t\txAxisLabel: undefined,\n\t\t\tyAxis: undefined,\n\t\t\tyAxisLabel: undefined,\n\t\t\tplot: undefined\n\t\t} as Partial<VolcanoPlotDom> as VolcanoPlotDom\n\t}\n\n\trender(settings: ValidatedVolcanoSettings, viewData: VolcanoViewData) {\n\t\tthis.settings = settings\n\t\tthis.viewData = viewData\n\t\tconst plotDim = this.viewData.plotDim\n\n\t\tthis.initDom()\n\n\t\tthis.renderUserActions()\n\t\tthis.renderPlot(plotDim)\n\t\trenderDataPoints(this)\n\t\tthis.renderFoldChangeLine(plotDim)\n\t\tthis.attachInteractions(plotDim)\n\t\tif (this.settings.showPValueTable) this.renderPValueTable()\n\t}\n\n\tinitDom() {\n\t\tthis.volcanoDom.actions.selectAll('*').remove()\n\t\tthis.volcanoDom.svg.selectAll('*').remove()\n\n\t\tconst svg = this.volcanoDom.svg\n\t\tthis.volcanoDom.top = svg.append('g').attr('id', 'sjpp-volcano-top')\n\t\tthis.volcanoDom.xAxis = svg.append('g').attr('id', 'sjpp-volcano-xAxis')\n\t\tthis.volcanoDom.yAxis = svg.append('g').attr('id', 'sjpp-volcano-yAxis')\n\t\tthis.volcanoDom.xAxisLabel = svg.append('text').attr('id', 'sjpp-volcano-xAxisLabel').attr('text-anchor', 'middle')\n\t\tthis.volcanoDom.yAxisLabel = svg.append('text').attr('id', 'sjpp-volcano-yAxisLabel').attr('text-anchor', 'middle')\n\t\tthis.volcanoDom.plot = svg.append('g').attr('id', 'sjpp-volcano-plot')\n\n\t\t// Always clear the previous p-value table div before deciding whether\n\t\t// to recreate it. Without this, toggling showPValueTable off leaves\n\t\t// the old div in dom.holder (the table never closes), and toggling\n\t\t// it on repeatedly appends additional divs.\n\t\tthis.dom.holder.select('#sjpp-volcano-pValueTable').remove()\n\n\t\tif (!this.settings.showPValueTable) return\n\t\tthis.volcanoDom.pValueTable = this.dom.holder\n\t\t\t.append('div')\n\t\t\t.attr('id', 'sjpp-volcano-pValueTable')\n\t\t\t.attr('data-testid', 'sjpp-volcano-pValueTable')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('vertical-align', 'top')\n\t}\n\n\trenderUserActions() {\n\t\t//Images may have a large margin. Hide the overflow.\n\t\tthis.dom.actionsTip.d.style('overflow', 'hidden')\n\t\tthis.volcanoDom.actions.style('margin-left', '20px').style('padding', '5px')\n\t\tthis.addActionButton('Confounding factors', [tt.GENE_EXPRESSION, tt.DNA_METHYLATION], () =>\n\t\t\tthis.interactions.confoundersMenu()\n\t\t)\n\t\tthis.addActionButton('Highlight genes', [tt.GENE_EXPRESSION, tt.SINGLECELL_CELLTYPE, tt.DNA_METHYLATION], () =>\n\t\t\tthis.interactions.launchGeneSetEdit()\n\t\t)\n\t\tthis.addActionButton(\n\t\t\t'Statistics',\n\t\t\t[tt.GENE_EXPRESSION, tt.SINGLECELL_CELLTYPE, tt.DNA_METHYLATION],\n\t\t\t() => {\n\t\t\t\tthis.renderStatsMenu()\n\t\t\t},\n\t\t\t{ whenOpen: 'Hide statistics' }\n\t\t)\n\t\tconst sigLabel =\n\t\t\tthis.termType == tt.DNA_METHYLATION ? 'Number of significant promoters' : 'Number of significant genes'\n\t\tconst numSigGenes = this.viewData.statsData.find(d => d.label == sigLabel)?.value\n\t\tif (numSigGenes) {\n\t\t\tconst sigText = this.termType == tt.DNA_METHYLATION ? `${numSigGenes} DM promoters:` : `${numSigGenes} DE genes:`\n\t\t\tthis.volcanoDom.actions.append('span').text(sigText).style('margin-left', '10px').style('font-weight', 'bold')\n\n\t\t\tconst pValueTableButtonText = this.settings.showPValueTable ? 'Hide p-value table' : 'Show p-value table'\n\t\t\tthis.addActionButton(\n\t\t\t\tpValueTableButtonText,\n\t\t\t\t[tt.GENE_EXPRESSION, tt.SINGLECELL_CELLTYPE, tt.DNA_METHYLATION],\n\t\t\t\tasync () => {\n\t\t\t\t\t/** TODO: This is very slow to render. Need to optimize rendering\n\t\t\t\t\t * and server response to increase performance.*/\n\t\t\t\t\tconst showTable = !this.settings.showPValueTable\n\t\t\t\t\tawait this.interactions.app.dispatch({\n\t\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\t\tid: this.interactions.id,\n\t\t\t\t\t\tconfig: { settings: { volcano: { showPValueTable: showTable } } }\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\t\tif (numSigGenes && numSigGenes >= 3) {\n\t\t\t// Launch hierCluster for DEGs between the two groups\n\t\t\tthis.addActionButton(\n\t\t\t\t`Hierarchical clustering of ${numSigGenes > 100 ? 'top 100' : numSigGenes} DE genes`,\n\t\t\t\t[tt.GENE_EXPRESSION],\n\t\t\t\tasync () => {\n\t\t\t\t\tawait this.interactions.launchDEGClustering()\n\t\t\t\t}\n\t\t\t)\n\t\t}\n\t}\n\n\t/** Use the termTypes arr to render the buttons in a consistent order.\n\t *\n\t * Pass `opts.whenOpen` to make the button a toggle: clicking once opens\n\t * the actionsTip with the callback's content and swaps the button text\n\t * to `whenOpen` (\"Hide statistics\", etc.); clicking again hides the tip\n\t * and restores the original text. The text also restores when the tip\n\t * closes via Esc or outside-click (Menu.onHide hook), and when another\n\t * action button hijacks the tip (the loop below resets all toggles\n\t * before showing the new content). */\n\taddActionButton(text: string, termTypes: string[], callback: any, opts?: { whenOpen?: string }) {\n\t\tif (this.viewData.userActions.noShow.has(text)) return\n\t\tif (!termTypes.includes(this.termType)) return\n\t\tconst button = this.volcanoDom.actions\n\t\t\t.append('button')\n\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t.style('margin', '3px')\n\t\t\t.style('padding', '3px')\n\t\t\t.text(text)\n\t\t\t.on('click', async () => {\n\t\t\t\tconst whenOpen = opts?.whenOpen\n\t\t\t\tif (whenOpen && button.text() === whenOpen) {\n\t\t\t\t\t// Toggle close: tip is currently showing this button's\n\t\t\t\t\t// content. Hide it; onHide resets the label and untags\n\t\t\t\t\t// the button so the body's mousedown handler will treat\n\t\t\t\t\t// it as outside the tip again.\n\t\t\t\t\tthis.dom.actionsTip.hide()\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\t// Reset any other toggle buttons whose tip content we're\n\t\t\t\t// about to overwrite. Tagging via data-attr keeps the state\n\t\t\t\t// on the DOM node so we don't need a class field.\n\t\t\t\tthis.volcanoDom.actions.selectAll('button[data-volcano-toggle-open=\"1\"]').each(function () {\n\t\t\t\t\tconst b = select(this as HTMLButtonElement)\n\t\t\t\t\tconst closed = b.attr('data-volcano-toggle-closed')\n\t\t\t\t\tif (closed) b.text(closed).attr('data-volcano-toggle-open', null)\n\t\t\t\t\t;(this as any).parent_menu = undefined\n\t\t\t\t\tconst eh = (this as any).__volcanoEscHandler\n\t\t\t\t\tif (eh) {\n\t\t\t\t\t\tdocument.removeEventListener('keydown', eh)\n\t\t\t\t\t\t;(this as any).__volcanoEscHandler = undefined\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t\tthis.dom.actionsTip.clear().showunder(button.node())\n\t\t\t\tif (whenOpen) {\n\t\t\t\t\tbutton.text(whenOpen).attr('data-volcano-toggle-open', '1').attr('data-volcano-toggle-closed', text)\n\t\t\t\t\t// Tag the button as a \"parent_menu\" of the tip so Menu's\n\t\t\t\t\t// body-mousedown outside-click handler skips it (see\n\t\t\t\t\t// menu.js, body.on('mousedown.menu') \u2014 checks\n\t\t\t\t\t// event.target.parent_menu === this.dnode). Without this,\n\t\t\t\t\t// clicking the toggle button to close would fire the\n\t\t\t\t\t// body handler first \u2192 tip hides + onHide resets label \u2192\n\t\t\t\t\t// the click handler then sees the closed label and\n\t\t\t\t\t// reopens, repainting instead of closing.\n\t\t\t\t\t;(button.node() as any).parent_menu = this.dom.actionsTip.dnode\n\t\t\t\t\t// Menu has a built-in keyup Escape handler on its own div,\n\t\t\t\t\t// but it only fires when the tip itself has keyboard\n\t\t\t\t\t// focus \u2014 typically lost the moment the user moves their\n\t\t\t\t\t// mouse over plot content. Attach a document-level\n\t\t\t\t\t// listener for the lifetime of the open toggle so Esc\n\t\t\t\t\t// closes from anywhere. Removed in both cleanup paths\n\t\t\t\t\t// (onHide below + the toggle-reset loop above).\n\t\t\t\t\tconst escHandler = (e: KeyboardEvent) => {\n\t\t\t\t\t\tif (e.key === 'Escape') this.dom.actionsTip.hide()\n\t\t\t\t\t}\n\t\t\t\t\tdocument.addEventListener('keydown', escHandler)\n\t\t\t\t\t;(button.node() as any).__volcanoEscHandler = escHandler\n\t\t\t\t\tthis.dom.actionsTip.onHide = () => {\n\t\t\t\t\t\tbutton.text(text).attr('data-volcano-toggle-open', null)\n\t\t\t\t\t\t;(button.node() as any).parent_menu = undefined\n\t\t\t\t\t\tdocument.removeEventListener('keydown', escHandler)\n\t\t\t\t\t\t;(button.node() as any).__volcanoEscHandler = undefined\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// Clear any stale onHide left by a previous toggle button\n\t\t\t\t\t// so an outside-click after this non-toggle open doesn't\n\t\t\t\t\t// reset the wrong button.\n\t\t\t\t\tthis.dom.actionsTip.onHide = undefined\n\t\t\t\t}\n\t\t\t\tawait callback()\n\t\t\t})\n\t}\n\n\trenderPlot(plotDim: VolcanoPlotDimensions) {\n\t\tthis.volcanoDom.svg.attr('width', plotDim.svg.width).attr('height', plotDim.svg.height)\n\n\t\tthis.renderTermInfo(plotDim)\n\n\t\tthis.volcanoDom.yAxisLabel.attr(\n\t\t\t'transform',\n\t\t\t`translate(${plotDim.yAxisLabel.x}, ${plotDim.yAxisLabel.y}) rotate(-90)`\n\t\t)\n\t\tthis.setSvgSubscriptLabel(\n\t\t\tthis.volcanoDom.yAxisLabel,\n\t\t\t'-log',\n\t\t\t'10',\n\t\t\tthis.termType === tt.PROTEOME_DAP ? '(FDR)' : `(${this.settings.pValueType} p-value)`\n\t\t)\n\n\t\tthis.volcanoDom.xAxisLabel.attr('transform', `translate(${plotDim.xAxisLabel.x}, ${plotDim.xAxisLabel.y})`)\n\t\tthis.setSvgSubscriptLabel(this.volcanoDom.xAxisLabel, 'log', '2', '(fold-change)')\n\n\t\tthis.renderScale(plotDim.xScale)\n\t\tthis.renderScale(plotDim.yScale, true)\n\n\t\t// Server-rendered PNG of the full scatter (every dot, non-interactive).\n\t\t// Drawn first so overlay circles + the border rect sit on top. The volcano\n\t\t// binary emits a borderless image whose data extent matches the client's\n\t\t// scales, so placing it over the plot rect aligns dot-for-dot.\n\t\tif (this.viewData.volcanoPng) {\n\t\t\tthis.volcanoDom.plot\n\t\t\t\t.append('image')\n\t\t\t\t.attr('href', `data:image/png;base64,${this.viewData.volcanoPng}`)\n\t\t\t\t.attr('x', plotDim.plot.x)\n\t\t\t\t.attr('y', plotDim.plot.y)\n\t\t\t\t.attr('width', plotDim.plot.width)\n\t\t\t\t.attr('height', plotDim.plot.height)\n\t\t\t\t.attr('preserveAspectRatio', 'none')\n\t\t}\n\t}\n\n\trenderTermInfo(plotDim) {\n\t\tif (this.viewData.termInfo == undefined) return\n\t\tthis.volcanoDom.top.attr('transform', `translate(${plotDim.top.x}, ${plotDim.top.y})`)\n\n\t\tconst y = this.viewData.termInfo.y\n\t\tconst addLabel = term => {\n\t\t\treturn (\n\t\t\t\tthis.volcanoDom.top\n\t\t\t\t\t.append('text')\n\t\t\t\t\t.attr('font-size', '0.9em')\n\t\t\t\t\t.attr('transform', `translate(${term.x}, ${y + 10})`)\n\t\t\t\t\t// .attr('text-anchor', 'start')\n\t\t\t\t\t.text(term.label)\n\t\t\t)\n\t\t}\n\n\t\t// const addRect = (term) => {\n\t\t// \tthis.volcanoDom.top.append('rect')\n\t\t// \t\t.attr('width', 10)\n\t\t// \t\t.attr('height', 10)\n\t\t// \t\t.attr('transform', `translate(${term.rectX}, ${y})`)\n\t\t// \t\t.attr('fill', term.color)\n\t\t// }\n\n\t\tconst firstTerm = this.viewData.termInfo.first\n\t\taddLabel(firstTerm)\n\t\t// addRect(firstTerm)\n\n\t\tconst secondTerm = this.viewData.termInfo.second\n\t\t// addRect(secondTerm)\n\t\tconst secondLabel = addLabel(secondTerm)\n\t\tsecondLabel.attr('text-anchor', 'end')\n\t}\n\n\trenderScale(scale: any, isLeft = false) {\n\t\tconst scaleG = this.volcanoDom[isLeft ? 'yAxis' : 'xAxis']\n\t\t\t.append('g')\n\t\t\t.attr('transform', `translate(${scale.x}, ${scale.y})`)\n\t\t\t.call(isLeft ? axisLeft(scale.scale) : axisBottom(scale.scale))\n\n\t\taxisstyle({\n\t\t\taxis: scaleG,\n\t\t\tcolor: 'black',\n\t\t\tshowline: true\n\t\t})\n\t}\n\n\trenderFoldChangeLine(plotDim: VolcanoPlotDimensions) {\n\t\t//logFoldChangeLine\n\t\tthis.volcanoDom.plot\n\t\t\t.append('line')\n\t\t\t.attr('stroke', '#ccc')\n\t\t\t.attr('shape-rendering', 'crispEdges')\n\t\t\t.attr('x1', plotDim.logFoldChangeLine.x)\n\t\t\t.attr('x2', plotDim.logFoldChangeLine.x)\n\t\t\t.attr('y1', plotDim.logFoldChangeLine.y1)\n\t\t\t.attr('y2', plotDim.logFoldChangeLine.y2)\n\t}\n\n\trenderStatsMenu() {\n\t\t//Render any images. viewModel returns the response array of images or []\n\t\tfor (const img of this.viewData.images || []) {\n\t\t\tthis.dom.actionsTip.d\n\t\t\t\t.append('img')\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.style('margin-left', '10px')\n\t\t\t\t.style('margin-top', '-30px')\n\t\t\t\t.attr('width', 450)\n\t\t\t\t.attr('height', 450)\n\t\t\t\t.attr('src', img.src)\n\t\t}\n\t\tconst tableHolder = this.dom.actionsTip.d\n\t\t\t.append('div')\n\t\t\t//Show the stats table underneath the images if > 1 image or to the right if only 1 image\n\t\t\t.style('display', this.viewData.images.length == 1 ? 'inline-block' : 'block')\n\t\t\t//Top margin is roughly inline with image however the margins are set by server\n\t\t\t//Likewise the image margins are undetectable.\n\t\t\t//This is a roughly satistifes the different image margin scenarios.\n\t\t\t.style('margin', `${this.viewData.images.length == 1 ? `40px 10px` : `0px 0px`} 0px 5px`)\n\t\t\t.style('vertical-align', 'top')\n\t\tconst table = table2col({ holder: tableHolder })\n\t\tfor (const d of this.viewData.statsData) {\n\t\t\tconst [td1, td2] = table.addRow()\n\t\t\ttd1.text(d.label)\n\t\t\ttd2.style('text-align', 'end').text(d.value)\n\t\t}\n\t}\n\n\trenderPValueTable() {\n\t\tif (!this.settings.showPValueTable) return\n\t\t// Cap rendered rows to prevent browser OOM with large datasets (e.g. 30k+ significant promoters).\n\t\t// The full data is still available in pValueTableData.rows for export/search.\n\t\tconst maxTableRows = 5000\n\t\tconst allRows = this.viewData.pValueTableData.rows\n\t\tconst rows = allRows.length > maxTableRows ? allRows.slice(0, maxTableRows) : allRows\n\t\tif (allRows.length > maxTableRows) {\n\t\t\tthis.volcanoDom.pValueTable\n\t\t\t\t.append('div')\n\t\t\t\t.style('padding', '5px 10px')\n\t\t\t\t.style('font-size', '.8em')\n\t\t\t\t.style('color', '#666')\n\t\t\t\t.text(\n\t\t\t\t\t`Showing top ${maxTableRows.toLocaleString()} of ${allRows.length.toLocaleString()} significant results (sorted by fold-change)`\n\t\t\t\t)\n\t\t}\n\t\trenderTable({\n\t\t\tcolumns: this.viewData.pValueTableData.columns,\n\t\t\trows,\n\t\t\tdiv: this.volcanoDom.pValueTable,\n\t\t\tshowLines: true,\n\t\t\tmaxHeight: `${this.viewData.pValueTableData.height}px`,\n\t\t\tresize: true,\n\t\t\theader: { allowSort: true },\n\t\t\tnoRadioBtn: true,\n\t\t\tnoButtonCallback: (i: number) => {\n\t\t\t\t//On click, persistently highlight the data point\n\t\t\t\t// if (this.termType != GENE_EXPRESSION) return\n\t\t\t\tconst gene = this.viewData.pValueTableData.rows[i][0].value as string\n\t\t\t\tif (!gene) return\n\t\t\t\tthis.interactions.highlightDataPoint(gene)\n\t\t\t},\n\t\t\thoverEffects: (tr, row) => {\n\t\t\t\t//May restrict termTypes later\n\t\t\t\t// if (this.termType != GENE_EXPRESSION) return\n\t\t\t\t//Highlight the data point when hovering over the table row\n\t\t\t\t//Previously highlighted data points are not affected\n\t\t\t\tconst circles = this.volcanoDom.plot.selectAll('circle').nodes()\n\t\t\t\tconst dataKey = this.termType === tt.DNA_METHYLATION ? 'promoter_id' : 'gene_name'\n\t\t\t\tconst circle = circles.find((d: any) => d.__data__[dataKey] == row[0].value) as any\n\t\t\t\tif (!circle || circle.__data__.highlighted) return\n\n\t\t\t\t/** Circles may render behind several other circles, making it hard\n\t\t\t\t * to see the highlight. Clone the circle to appear on top of the\n\t\t\t\t * elements, then destroy. */\n\t\t\t\tlet clone\n\t\t\t\ttr.on('mouseover', () => {\n\t\t\t\t\tif (circle.__data__.highlighted || clone) return\n\t\t\t\t\tclone = this.volcanoDom.plot.node()?.appendChild(circle.cloneNode(true))\n\t\t\t\t\tclone.setAttribute('fill-opacity', 0.9)\n\t\t\t\t})\n\t\t\t\ttr.on('mouseleave', () => {\n\t\t\t\t\tif (!clone) return\n\t\t\t\t\tclone.remove()\n\t\t\t\t\tclone = null\n\t\t\t\t})\n\t\t\t\t//All other circles appear dimmed on hover\n\t\t\t\tthis.volcanoDom.pValueTable.on('mouseover', () => {\n\t\t\t\t\tselectAll(circles).attr('stroke-opacity', 0.075)\n\t\t\t\t})\n\t\t\t\tthis.volcanoDom.pValueTable.on('mouseleave', () => {\n\t\t\t\t\tselectAll(circles).attr('stroke-opacity', (d: any) => (d.significant ? 0.35 : 0.2))\n\t\t\t\t})\n\t\t\t}\n\t\t})\n\t}\n\n\tsetSvgSubscriptLabel(textElem: any, prefix: string, subscript: string, suffix: string) {\n\t\ttextElem.text(null)\n\t\ttextElem.append('tspan').text(prefix)\n\t\ttextElem.append('tspan').attr('baseline-shift', 'sub').attr('font-size', '0.7em').text(subscript)\n\t\ttextElem.append('tspan').text(suffix)\n\t}\n\n\tprivate attachInteractions(plotDim: VolcanoPlotDimensions) {\n\t\tconst points = this.viewData.pointData as DataPointEntry[]\n\t\tif (!points || points.length === 0) return\n\n\t\tconst dotRadiusPx = this.viewData.plotExtent.dotRadiusPx\n\t\tconst hitRadius = dotRadiusPx + 3\n\t\t// Inset by stroke-width/2 so the orange fill stops at the dot's stroke inner edge.\n\t\tconst highlightRadius = Math.max(0.5, dotRadiusPx - 0.5)\n\t\tconst highlightColor = this.settings.defaultHighlightColor\n\n\t\t// Hover-ring layer \u2014 visual only, never intercepts mouse events.\n\t\tconst hoverLayer = this.volcanoDom.plot.append('g').attr('id', 'sjpp-volcano-hover').style('pointer-events', 'none')\n\n\t\t// Cover rect \u2014 last child of plot group so it sits on top of dots,\n\t\t// hover rings, and the fold-change line.\n\t\tconst cover = this.volcanoDom.plot\n\t\t\t.append('rect')\n\t\t\t.attr('id', 'sjpp-volcano-cover')\n\t\t\t.attr('x', plotDim.plot.x)\n\t\t\t.attr('y', plotDim.plot.y)\n\t\t\t.attr('width', plotDim.plot.width)\n\t\t\t.attr('height', plotDim.plot.height)\n\t\t\t.attr('fill', 'transparent')\n\t\t\t.style('pointer-events', 'all')\n\t\t\t.style('cursor', 'default')\n\n\t\t// Circle as an SVG path so it can flow through the generic\n\t\t// `drawHoverShapes` helper (which renders `<path>` elements).\n\t\tconst circlePath = (r: number) => `M${r},0 A${r},${r} 0 1,1 ${-r},0 A${r},${r} 0 1,1 ${r},0 Z`\n\n\t\tnew DataPointInteractions<DataPointEntry>({\n\t\t\tcover,\n\t\t\thoverLayer,\n\t\t\thoverTip: this.dom.tip,\n\t\t\tpoints,\n\t\t\t// Quadtree in cover-local space \u2014 d.x/d.y are SVG-absolute, so subtract\n\t\t\t// the plot rect's origin once when building the tree.\n\t\t\tgetX: d => d.x - plotDim.plot.x,\n\t\t\tgetY: d => d.y - plotDim.plot.y,\n\t\t\thitRadius,\n\t\t\ttoHoverSpec: d => ({\n\t\t\t\tpath: circlePath(highlightRadius),\n\t\t\t\t// Hover layer lives in the same coord space as the dots (SVG-absolute),\n\t\t\t\t// so translate by d.x/d.y \u2014 NOT the cover-local pair.\n\t\t\t\ttransform: `translate(${d.x},${d.y})`,\n\t\t\t\tfill: highlightColor,\n\t\t\t\tfillOpacity: 0.9,\n\t\t\t\tstroke: 'none'\n\t\t\t}),\n\t\t\tmaxTooltipRows: this.settings.maxTooltipGenes,\n\t\t\titemNoun: 'gene',\n\t\t\trenderSingleHoverTooltip: (d, container) => {\n\t\t\t\tconst table = table2col({ holder: container.append('table') })\n\t\t\t\tthis.addTooltipRows(d, table)\n\t\t\t},\n\t\t\tbuildMultiHitTableData: dots => this.buildMultiHitTable(dots),\n\t\t\tgetActions: d => this.getActionMenuOpts(d),\n\t\t\trenderSingleHitInfo: (d, container) => {\n\t\t\t\tconst tbl = table2col({ holder: container.append('table') })\n\t\t\t\tthis.addTooltipRows(d, tbl)\n\t\t\t},\n\t\t\tgetRowKey: d => d.gene_name\n\t\t}).attach()\n\t}\n\n\tprivate buildMultiHitTable(dots: DataPointEntry[]): { columns: any[]; rows: any[] } {\n\t\tconst isDM = this.termType === tt.DNA_METHYLATION\n\t\tconst isDAP = this.termType === tt.PROTEOME_DAP\n\t\tconst pValueType = this.settings.pValueType\n\t\t// DAP files carry a single FDR (stored in original_p_value); label it as such\n\t\t// rather than \"Original/Adjusted p-value\".\n\t\tconst pLabel = isDAP ? 'FDR' : `${pValueType.charAt(0).toUpperCase()}${pValueType.slice(1)} p-value`\n\t\tconst pField = (isDAP ? 'original_p_value' : `${pValueType}_p_value`) as 'original_p_value' | 'adjusted_p_value'\n\t\tconst columns = isDM\n\t\t\t? [\n\t\t\t\t\t{ label: 'Promoter' },\n\t\t\t\t\t{ label: 'Gene(s)' },\n\t\t\t\t\t{ label: 'log\u2082(FC)', sortable: true },\n\t\t\t\t\t{ label: pLabel, sortable: true }\n\t\t\t ]\n\t\t\t: isDAP\n\t\t\t? [\n\t\t\t\t\t{ label: 'Identifier' },\n\t\t\t\t\t{ label: 'Gene' },\n\t\t\t\t\t{ label: 'log\u2082(FC)', sortable: true },\n\t\t\t\t\t{ label: pLabel, sortable: true }\n\t\t\t ]\n\t\t\t: [{ label: 'Gene' }, { label: 'log\u2082(FC)', sortable: true }, { label: pLabel, sortable: true }]\n\t\tconst rows = dots.map(d => {\n\t\t\tconst fc = { value: roundValueAuto(d.fold_change) }\n\t\t\tconst pval = { value: roundValueAuto(d[pField]) }\n\t\t\tif (isDM) {\n\t\t\t\treturn [{ value: (d as any).promoter_id || '' }, { value: d.gene_name || '' }, fc, pval]\n\t\t\t}\n\t\t\tif (isDAP) {\n\t\t\t\treturn [{ value: d.gene_name || '' }, { value: (d as any).gene || '' }, fc, pval]\n\t\t\t}\n\t\t\treturn [{ value: d.gene_name || '' }, fc, pval]\n\t\t})\n\t\treturn { columns, rows }\n\t}\n\n\t/** Per-data-point action menu items (Violin / DMR / Box-plot). Used by\n\t * both the single-gene click flow and the multi-gene click-menu rows so\n\t * the launchers stay in lock-step. */\n\tprivate getActionMenuOpts(d: DataPointEntry): ActionMenuItem[] {\n\t\tconst termType = this.termType\n\t\tconst interactions = this.interactions\n\t\tconst all = [\n\t\t\t{\n\t\t\t\tlabel: 'Violin plot',\n\t\t\t\tisVisible: () => termType === tt.DNA_METHYLATION || termType === tt.GENE_EXPRESSION,\n\t\t\t\tonClick: async () => {\n\t\t\t\t\tif (termType === tt.DNA_METHYLATION) interactions.launchDNAMethViolin(d as any)\n\t\t\t\t\tif (termType === tt.GENE_EXPRESSION) interactions.launchViolinGeneExp(d.gene_name)\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'DMR analysis',\n\t\t\t\tisVisible: () => termType === tt.DNA_METHYLATION,\n\t\t\t\tonClick: async () => {\n\t\t\t\t\tconst dm = d as DataPointEntry & {\n\t\t\t\t\t\tchr: string\n\t\t\t\t\t\tstart: number\n\t\t\t\t\t\tstop: number\n\t\t\t\t\t\tpromoter_id?: string\n\t\t\t\t\t\tgene_name?: string\n\t\t\t\t\t}\n\t\t\t\t\tawait interactions.launchDmr({\n\t\t\t\t\t\tchr: dm.chr,\n\t\t\t\t\t\tstart: dm.start,\n\t\t\t\t\t\tstop: dm.stop,\n\t\t\t\t\t\tpromoterId: dm.promoter_id\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Box plot',\n\t\t\t\tisVisible: () => termType === tt.GENE_EXPRESSION,\n\t\t\t\tonClick: async () => {\n\t\t\t\t\tinteractions.launchBoxPlot(d.gene_name)\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\t\treturn all.filter(o => o.isVisible()).map(({ label, onClick }) => ({ label, onClick }))\n\t}\n\n\t/** Populates a `table2col` instance with the standard volcano hover rows\n\t * (gene/promoter, fold-change, original + adjusted p-values). */\n\tprivate addTooltipRows(d: DataPointEntry, table: any) {\n\t\tif (this.termType === tt.DNA_METHYLATION) {\n\t\t\tif ('promoter_id' in d) addTooltipRow(table, 'Promoter', (d as any).promoter_id)\n\t\t\tif (d.gene_name) addTooltipRow(table, 'Gene(s)', d.gene_name)\n\t\t} else if (this.termType === tt.PROTEOME_DAP) {\n\t\t\taddTooltipRow(table, 'Identifier', d.gene_name)\n\t\t\tif ('gene' in d) addTooltipRow(table, 'Gene', (d as any).gene)\n\t\t} else {\n\t\t\taddTooltipRow(table, 'Gene name', d.gene_name)\n\t\t}\n\t\taddTooltipRow(table, 'log<sub>2</sub>(fold-change)', roundValueAuto(d.fold_change))\n\t\tif (this.termType === tt.PROTEOME_DAP) {\n\t\t\t// DAP carries a single FDR (adjusted p-value), stored in original_p_value.\n\t\t\taddTooltipRow(table, 'FDR', roundValueAuto(d.original_p_value))\n\t\t} else {\n\t\t\taddTooltipRow(table, 'Original p-value', roundValueAuto(d.original_p_value))\n\t\t\tif (d.adjusted_p_value != undefined) addTooltipRow(table, 'Adjusted p-value', roundValueAuto(d.adjusted_p_value))\n\t\t}\n\t}\n}\n\nfunction addTooltipRow(table: any, text: string, value: number | string) {\n\tconst [td1, td2] = table.addRow()\n\ttd1.html(text)\n\ttd2.text(value)\n}\n\nfunction renderDataPoints(self: any) {\n\t// Visual-only circles. The cover rect added in setupOverlayInteractions\n\t// drives all hover/click \u2014 we strip pointer-events here so events fall\n\t// through to the cover. The p-value table hover-clone effect at\n\t// renderPValueTable() still finds these via selectAll('circle').\n\tself.volcanoDom.plot\n\t\t.selectAll('circle')\n\t\t.data(self.viewData.pointData)\n\t\t.enter()\n\t\t.append('circle')\n\t\t.attr('stroke', (d: DataPointEntry) => rgb(d.color).formatHex())\n\t\t.attr('stroke-opacity', (d: DataPointEntry) => (d.significant ? 0.35 : 0.2))\n\t\t// Match the rust PNG's stroke-width (1) so the overlay ring sits\n\t\t// exactly on top of the rasterized dot.\n\t\t.attr('stroke-width', 1)\n\t\t.attr('fill', self.settings.defaultHighlightColor)\n\t\t.attr('fill-opacity', (d: DataPointEntry) => (d.highlighted ? 0.9 : 0))\n\t\t.attr('cx', (d: DataPointEntry) => d.x)\n\t\t.attr('cy', (d: DataPointEntry) => d.y)\n\t\t.attr('r', (d: DataPointEntry) => d.radius)\n\t\t.style('pointer-events', 'none')\n}\n", "import type { ControlInputEntry } from '#mass/types/mass'\nimport type { VolcanoPlotConfig } from './VolcanoTypes'\nimport { getSampleNum } from './settings/defaults'\nimport { PROTEOME_DAP, DNA_METHYLATION, GENE_EXPRESSION, SINGLECELL_CELLTYPE } from '#types'\n\n/** Handles settings the controls in the menu based on the app\n * termType.\n *\n * Add additional term type specific controls similar to\n * addGeneExpressionControlInputs(), called in\n * getVolcanoControlInputs(). Add the type to settings/Settings.ts\n *\n * If control should show for multiple but not all term types,\n * then use the getDisplayStyle arg in the control object.\n * //getDisplayStyle: () => {}\n *\n * Preferably, keep all the display (e.g. colors, sizes, etc.) controls\n * at the bottom of the list or at least together\n */\n\nexport class VolcanoControlInputs {\n\tconfig: any\n\tsampleNum?: number\n\t/** term type used to determine which controls to show */\n\ttermType: string\n\t/** control inputs for controls init */\n\tinputs: ControlInputEntry[]\n\tconstructor(config: VolcanoPlotConfig, termType: string) {\n\t\tthis.config = config\n\t\tif (this.config.termType == GENE_EXPRESSION) this.sampleNum = getSampleNum(config)\n\t\tthis.termType = termType\n\t\t//Populated with the default controls for the volcano plot\n\t\tthis.inputs = [\n\t\t\t{\n\t\t\t\t// DAP volcanoes threshold a single FDR (adjusted p-value); other term types\n\t\t\t\t// threshold a p-value.\n\t\t\t\tlabel: this.config.termType == PROTEOME_DAP ? 'FDR significance (-log\u2081\u2080)' : 'P value significance (-log\u2081\u2080)',\n\t\t\t\ttype: 'number',\n\t\t\t\tchartType: 'volcano',\n\t\t\t\tsettingsKey: 'pValue',\n\t\t\t\ttitle:\n\t\t\t\t\tthis.config.termType == PROTEOME_DAP\n\t\t\t\t\t\t? 'The FDR threshold to determine statistical significance'\n\t\t\t\t\t\t: 'The p-value threshold to determine statistical significance',\n\t\t\t\tmin: 0,\n\t\t\t\t// 5e-324 is the smallest positive number greater than 0 representable\n\t\t\t\t// in IEEE 64-bit floating point (i.e. javascripts native Number.MIN_VALUE)\n\t\t\t\t// -Math.log10(5e-324) = 323.3\n\t\t\t\tmax: 323.3,\n\t\t\t\tstep: 1\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'P value',\n\t\t\t\ttype: 'radio',\n\t\t\t\tchartType: 'volcano',\n\t\t\t\tsettingsKey: 'pValueType',\n\t\t\t\ttitle: 'Toggle between original and adjusted pvalues for volcano plot',\n\t\t\t\t// DAP files carry only a single FDR, so there is nothing to toggle between.\n\t\t\t\tgetDisplayStyle: () => (this.config.termType == PROTEOME_DAP ? 'none' : ''),\n\t\t\t\toptions: [\n\t\t\t\t\t{ label: 'Adjusted', value: 'adjusted' },\n\t\t\t\t\t{ label: 'Original', value: 'original' }\n\t\t\t\t]\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Fold change (log\u2082)',\n\t\t\t\ttype: 'number',\n\t\t\t\tchartType: 'volcano',\n\t\t\t\tsettingsKey: 'foldChangeCutoff',\n\t\t\t\ttitle: 'The fold change threshold to determine biological significance',\n\t\t\t\tmin: -10,\n\t\t\t\tmax: 10\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Max interactive dots',\n\t\t\t\ttype: 'number',\n\t\t\t\tchartType: 'volcano',\n\t\t\t\tsettingsKey: 'maxInteractiveDots',\n\t\t\t\ttitle:\n\t\t\t\t\t'Cap on the number of top-significant points the server returns as interactive overlay circles. The PNG still shows every dot.',\n\t\t\t\tmin: 0,\n\t\t\t\tmax: 20000,\n\t\t\t\tstep: 100\n\t\t\t},\n\t\t\t//Preferably, keep all the display (e.g. colors, sizes, etc.) controls\n\t\t\t//at the bottom of the list or at least together\n\t\t\t{\n\t\t\t\tlabel: 'Plot height',\n\t\t\t\ttype: 'number',\n\t\t\t\tchartType: 'volcano',\n\t\t\t\tsettingsKey: 'height',\n\t\t\t\ttitle: 'Height of the plot in pixels',\n\t\t\t\tmin: 300,\n\t\t\t\tmax: 1000\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Plot width',\n\t\t\t\ttype: 'number',\n\t\t\t\tchartType: 'volcano',\n\t\t\t\tsettingsKey: 'width',\n\t\t\t\ttitle: 'Width of the plot in pixels',\n\t\t\t\tmin: 300,\n\t\t\t\tmax: 1000\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Significant value color',\n\t\t\t\ttype: 'color',\n\t\t\t\tchartType: 'volcano',\n\t\t\t\ttitle: 'Default color for significant data points.',\n\t\t\t\tsettingsKey: 'defaultSignColor',\n\t\t\t\tgetDisplayStyle: () => {\n\t\t\t\t\tif (this.config.termType == SINGLECELL_CELLTYPE) return 'none'\n\t\t\t\t\tconst controlColor = this.config.tw?.term?.values?.[this.config.samplelst.groups[0].name]?.color\n\t\t\t\t\tconst caseColor = this.config.tw?.term?.values?.[this.config.samplelst.groups[1].name].color\n\t\t\t\t\tif (controlColor && caseColor) return 'none'\n\t\t\t\t\telse return ''\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Non-significant value color',\n\t\t\t\ttype: 'color',\n\t\t\t\tchartType: 'volcano',\n\t\t\t\ttitle: 'Default color for non-significant data points.',\n\t\t\t\tsettingsKey: 'defaultNonSignColor'\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Highlight color',\n\t\t\t\ttype: 'color',\n\t\t\t\tchartType: 'volcano',\n\t\t\t\ttitle: 'Default color for highlighted data points.',\n\t\t\t\tsettingsKey: 'defaultHighlightColor'\n\t\t\t}\n\t\t]\n\n\t\tthis.setVolcanoControlInputs()\n\t}\n\n\t/** Add more term type specific controls here. */\n\tsetVolcanoControlInputs() {\n\t\tthis.addGeneExpControlInputs()\n\t\tthis.addDNAMethControlInputs()\n\t\tthis.addSingleCellCTControlInputs()\n\t}\n\n\taddGeneExpControlInputs() {\n\t\tif (this.termType !== GENE_EXPRESSION) return\n\t\tconst geInputs = [\n\t\t\t{\n\t\t\t\tlabel: 'Minimum read count',\n\t\t\t\ttype: 'number',\n\t\t\t\tchartType: 'volcano',\n\t\t\t\tsettingsKey: 'minCount',\n\t\t\t\ttitle: 'The smallest number of reads required for a gene to be considered in the analysis',\n\t\t\t\tmin: 0,\n\t\t\t\tmax: 10000\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Minimum total read count',\n\t\t\t\ttype: 'number',\n\t\t\t\tchartType: 'volcano',\n\t\t\t\tsettingsKey: 'minTotalCount',\n\t\t\t\ttitle: 'The smallest total number of reads required for a gene to be considered in the analysis',\n\t\t\t\tmin: 0,\n\t\t\t\tmax: 10000\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'CPM cutoff',\n\t\t\t\ttype: 'number',\n\t\t\t\tchartType: 'volcano',\n\t\t\t\tsettingsKey: 'cpmCutoff',\n\t\t\t\ttitle: 'The minimum normalized expression threshold to retain only genes with sufficient expression',\n\t\t\t\tmin: 0\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Method',\n\t\t\t\ttype: 'radio',\n\t\t\t\tchartType: 'volcano',\n\t\t\t\tsettingsKey: 'method',\n\t\t\t\ttitle: 'Toggle between analysis methods',\n\t\t\t\toptions: this.getMethodOptions()\n\t\t\t}\n\t\t\t// {\n\t\t\t// \tlabel: 'Rank Genes by',\n\t\t\t// \ttype: 'radio',\n\t\t\t// \tchartType: 'volcano',\n\t\t\t// \tsettingsKey: 'rankBy',\n\t\t\t// \ttitle: 'Rank genes by either the absolute value of the fold change or the variance',\n\t\t\t// \toptions: [\n\t\t\t// \t\t{ label: 'abs(Fold Change)', value: 'abs(foldChange)' },\n\t\t\t// \t\t{ label: 'Variance', value: 'variance' }\n\t\t\t// \t],\n\t\t\t// \t//TODO: will enable this feature when there is backhand support\n\t\t\t// \tgetDisplayStyle: () => 'none'\n\t\t\t// }\n\t\t]\n\n\t\tthis.inputs.splice(0, 0, ...geInputs)\n\t}\n\n\taddDNAMethControlInputs() {\n\t\tif (this.termType !== DNA_METHYLATION) return\n\t\tconst dmInputs = [\n\t\t\t{\n\t\t\t\tlabel: 'Min samples per group',\n\t\t\t\ttype: 'number',\n\t\t\t\tchartType: 'volcano',\n\t\t\t\tsettingsKey: 'minSamplesPerGroup',\n\t\t\t\ttitle: 'Minimum non-NA samples required per group for a promoter to be tested',\n\t\t\t\tmin: 1,\n\t\t\t\tmax: 100\n\t\t\t}\n\t\t]\n\t\tthis.inputs.splice(0, 0, ...dmInputs)\n\t}\n\n\taddSingleCellCTControlInputs() {\n\t\tif (this.termType !== SINGLECELL_CELLTYPE) return\n\n\t\tconst scctInputs = []\n\n\t\tthis.inputs.splice(0, 0, ...scctInputs)\n\t}\n\n\tgetMethodOptions() {\n\t\tif (this.termType !== GENE_EXPRESSION) return\n\t\tconst settings = this.config.settings.volcano\n\t\tconst features = JSON.parse(sessionStorage.getItem('optionalFeatures') as string)\n\t\tif (features?.runDE_methods?.length) {\n\t\t\tconst opts: { label: string; value: string }[] = []\n\t\t\tfor (const m of features.runDE_methods) {\n\t\t\t\topts.push({ label: m, value: m.toLowerCase() })\n\t\t\t}\n\t\t\treturn opts\n\t\t}\n\t\tif (this.sampleNum! < settings!.sampleNumCutoff) {\n\t\t\treturn [\n\t\t\t\t{ label: 'edgeR', value: 'edgeR' },\n\t\t\t\t{ label: 'Wilcoxon', value: 'wilcoxon' },\n\t\t\t\t{ label: 'Limma', value: 'limma' }\n\t\t\t]\n\t\t} else return [{ label: 'Wilcoxon', value: 'wilcoxon' }]\n\t}\n}\n", "import type { MassState, BasePlotConfig } from '#mass/types/mass'\nimport { getCompInit, copyMerge, type RxComponent, type AppApi } from '#rx'\nimport { PlotBase } from '../PlotBase'\nimport { fillTermWrapper } from '#termsetting'\nimport { Menu, sayerror } from '#dom'\nimport { controlsInit } from '../controls'\nimport { getDefaultVolcanoSettings, validateVolcanoSettings } from './settings/defaults'\nimport type { VolcanoOpts, VolcanoDom } from './VolcanoTypes'\nimport { VolcanoModel } from './model/VolcanoModel'\nimport { VolcanoViewModel } from './viewModel/VolcanoViewModel'\nimport { VolcanoInteractions } from './interactions/VolcanoInteractions'\nimport { VolcanoPlotView } from './view/VolcanoPlotView'\nimport { VolcanoControlInputs } from './VolcanoControlInputs'\nimport { getCombinedTermFilter } from '#filter'\nimport { GENE_EXPRESSION, SINGLECELL_CELLTYPE } from '#types'\n\nexport class Volcano extends PlotBase implements RxComponent {\n\tstatic type = 'volcano'\n\ttype: string\n\tcomponents: { controls: any }\n\tdom: VolcanoDom\n\tinteractions?: VolcanoInteractions\n\tmodel!: VolcanoModel\n\tview!: VolcanoPlotView\n\ttermType: string\n\n\tconstructor(opts: VolcanoOpts, api) {\n\t\tsuper(opts, api)\n\t\tif (this.opts.parentId) this.parentId = this.opts.parentId\n\t\tthis.type = Volcano.type\n\t\tthis.components = {\n\t\t\tcontrols: {}\n\t\t}\n\n\t\tthis.termType = opts.termType\n\t\tconst holder = opts.holder\n\t\t\t.classed('sjpp-volcano-main', true)\n\t\t\t.attr('data-testid', `sjpp-volcano-main-${opts.termType}`)\n\t\t//Either allow a node to be passed or create a new div\n\t\tconst controls = typeof opts.controls == 'object' ? opts.controls : holder || (holder as any).append('div')\n\t\tconst error = opts.holder\n\t\t\t.append('div')\n\t\t\t.attr('id', 'sjpp-volcano-error')\n\t\t\t.attr('data-testid', `sjpp-volcano-error-${opts.termType}`)\n\t\t\t.style('opacity', 0.75) as any\n\t\tthis.dom = {\n\t\t\tholder,\n\t\t\tcontrols,\n\t\t\terror,\n\t\t\twait: holder\n\t\t\t\t.append('div')\n\t\t\t\t.attr('id', 'sjpp-volcano-wait')\n\t\t\t\t.attr('data-testid', `sjpp-volcano-wait-${opts.termType}`)\n\t\t\t\t.style('opacity', 0.75)\n\t\t\t\t.style('padding', '20px')\n\t\t\t\t.text('Loading...') as any,\n\t\t\ttip: new Menu({ padding: '' }),\n\t\t\tactionsTip: new Menu({ padding: '' })\n\t\t}\n\t}\n\n\tgetState(appState: MassState) {\n\t\tconst config: any = appState.plots.find((p: BasePlotConfig) => p.id === this.id)\n\t\tif (!config) {\n\t\t\tthrow new Error(\n\t\t\t\t`No plot with id='${this.id}' found. Did you set this.id before this.api = getComponentApi(this)?`\n\t\t\t)\n\t\t}\n\t\tconst parentConfig: any = this.parentId && appState.plots.find(p => p.id === this.parentId)\n\t\tconst termfilter = getCombinedTermFilter(appState, config.filter || parentConfig?.filter)\n\n\t\treturn {\n\t\t\tconfig: Object.assign({}, config, {\n\t\t\t\tsettings: {\n\t\t\t\t\tvolcano: config.settings.volcano\n\t\t\t\t}\n\t\t\t}),\n\t\t\ttermfilter\n\t\t}\n\t}\n\n\tasync setControls() {\n\t\tconst plotConfig = this.app.getState().plots.find((p: any) => p.id === this.id)\n\t\tconst controls = new VolcanoControlInputs(plotConfig, this.termType)\n\n\t\tthis.components.controls = await controlsInit({\n\t\t\tapp: this.app,\n\t\t\tid: this.id,\n\t\t\tholder: this.dom.controls.style('display', 'inline-block'),\n\t\t\tinputs: controls.inputs\n\t\t})\n\n\t\tthis.components.controls.on('downloadClick.volcano', () => this.interactions!.download(this.termType))\n\t\tif (plotConfig.chartType == 'differentialAnalysis')\n\t\t\tthis.components.controls.on('helpClick.differentialAnalysis', () =>\n\t\t\t\t//Opens the page for the differential analysis wiki\n\t\t\t\t//Can't put in parent as DA does not have a controls component\n\t\t\t\twindow.open('https://github.com/stjude/proteinpaint/wiki/Differential-analysis')\n\t\t\t)\n\t}\n\n\tasync init() {\n\t\tthis.interactions = new VolcanoInteractions(this.app, this.id, this.dom)\n\t\tthis.model = new VolcanoModel(this, this.termType)\n\t\tthis.view = new VolcanoPlotView(this.dom, this.interactions, this.termType)\n\t\tawait this.setControls()\n\t}\n\n\tasync main() {\n\t\tif (!this.interactions) throw new Error('Volcano Interactions not initialized')\n\t\tif (!this.model) throw new Error('Volcano Model not initialized')\n\t\tif (!this.view) throw new Error('Volcano View not initialized')\n\n\t\tconst config = structuredClone(this.state.config)\n\t\t//TODO: Fix this to use parentId instead\n\t\tif (config.chartType != this.type && config.childType != this.type) return\n\n\t\tconst settings = config.settings.volcano\n\t\ttry {\n\t\t\t//Only show Loading for data requests that take longer than 500ms\n\t\t\tconst showWait = setTimeout(() => {\n\t\t\t\tthis.dom.wait.style('display', 'block')\n\t\t\t}, 500)\n\n\t\t\t/** Fetch data */\n\t\t\tconst response = await this.model.getData(config, settings)\n\t\t\tthis.dom.error.text('')\n\t\t\tif (!response || response.error || !response.data || !response.data.volcanoPng || !response.data.totalRows) {\n\t\t\t\tconst msg = response?.error || 'No data returned from server'\n\t\t\t\tif (response?.code === 'CACHE_BUSY') {\n\t\t\t\t\tif (window.confirm(msg)) this.main()\n\t\t\t\t} else sayerror(this.dom.error, msg)\n\t\t\t\tclearTimeout(showWait)\n\t\t\t\tthis.dom.wait.style('display', 'none')\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t/** Format response into an object for rendering */\n\t\t\tconst viewModel = new VolcanoViewModel(config, response, settings)\n\t\t\t//Pass table data for downloading\n\t\t\tthis.interactions.pValueTableData = viewModel.viewData.pValueTableData\n\t\t\tthis.interactions.data = response.data.dots\n\n\t\t\t/** Render formatted data */\n\t\t\tthis.view.render(settings, viewModel.viewData)\n\n\t\t\tif (!response.data.dots.length) {\n\t\t\t\tthis.dom.error.text('No points passed the significance thresholds').style('color', '#555')\n\t\t\t}\n\n\t\t\tclearTimeout(showWait)\n\t\t\tthis.dom.wait.style('display', 'none')\n\t\t} catch (e: any) {\n\t\t\tif (e instanceof Error) console.error(e.message || e)\n\t\t\telse if (e.stack) console.log(e.stack)\n\t\t\tthrow e\n\t\t}\n\t}\n}\n\nexport const volcanoInit = getCompInit(Volcano)\nexport const componentInit = volcanoInit\n\nexport async function getPlotConfig(opts: any, app: AppApi) {\n\tif (!opts.termType) throw new Error('.termType is required')\n\n\tconst config = {\n\t\tsettings: {\n\t\t\tvolcano: getDefaultVolcanoSettings(opts.overrides, opts)\n\t\t},\n\t\thighlightedData: opts.highlightedData || [],\n\t\ttermType: opts.termType\n\t}\n\n\t//Define Gene Expression config\n\tif (opts.termType == GENE_EXPRESSION) {\n\t\tif (opts.confounderTws) {\n\t\t\ttry {\n\t\t\t\tfor (const tw of opts.confounderTws) {\n\t\t\t\t\tawait fillTermWrapper(tw, app.vocabApi)\n\t\t\t\t}\n\t\t\t} catch (e: any) {\n\t\t\t\tconsole.error(e.message || e)\n\t\t\t\tthrow new Error(`Volcano getPlotConfig() failed to fill confounder term wrappers: ${e}`)\n\t\t\t}\n\t\t}\n\t\tObject.assign(config, {\n\t\t\tconfounderTws: opts.confounderTws || [],\n\t\t\tsamplelst: opts.samplelst\n\t\t})\n\t}\n\n\t//Define Single Cell Cell Type config\n\tif (opts.termType == SINGLECELL_CELLTYPE) {\n\t\tObject.assign(config, {\n\t\t\t//TODO: Fix this logic\n\t\t\tsample: opts.experimentID || opts.sample || opts.samples?.[0]?.experiments[0]?.experimentID,\n\t\t\ttermId: app.vocabApi.termdbConfig.queries.singleCell.DEgenes.termId,\n\t\t\t//TODO: 'Cluster' is a fallback for development\n\t\t\t//Should require opts.categoryName in the future\n\t\t\tcategoryName: opts.categoryName || 'Cluster'\n\t\t})\n\t}\n\n\t//Validate user submitted unavailable/inappropriate settings\n\tvalidateVolcanoSettings(config, opts)\n\n\treturn copyMerge(config, opts)\n}\n"],
5
+ "mappings": "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",
6
+ "names": []
7
+ }