@sjcrh/proteinpaint-client 2.197.0 → 2.198.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 (940) hide show
  1. package/dist/2dmaf-R3PFZNRN.js +1373 -0
  2. package/dist/AIProjectAdmin-DM3KG6SR.js +958 -0
  3. package/dist/AppHeader-6DZQ6YZX.js +835 -0
  4. package/dist/BoxPlot-76NINVX4.js +1217 -0
  5. package/dist/CorrelationVolcano-U5UMJNH5.js +619 -0
  6. package/dist/DE-AXNYWIQK.js +95 -0
  7. package/dist/DEinput-JH6YY6LS.js +301 -0
  8. package/dist/DifferentialAnalysis-25P4CGIY.js +242 -0
  9. package/dist/Disco-NVMLF3BK.js +3392 -0
  10. package/dist/Disco-NVMLF3BK.js.map +7 -0
  11. package/dist/Disco.UI-C7CZINUQ.js +249 -0
  12. package/dist/DmrPlot-WROR4ENM.js +642 -0
  13. package/dist/GB-JUABODPH.js +1394 -0
  14. package/dist/GB-JUABODPH.js.map +7 -0
  15. package/dist/GSEA-Y5R2THIJ.js +846 -0
  16. package/dist/GeneExpInput-JDU6EI7K.js +367 -0
  17. package/dist/Geomap-J763OK2F.js +89 -0
  18. package/dist/Geomap-J763OK2F.js.map +7 -0
  19. package/dist/HicApp-UNIJLH4B.js +2250 -0
  20. package/dist/IDCViewer-KVPCIUDW.js +10803 -0
  21. package/dist/IDCViewer-KVPCIUDW.js.map +7 -0
  22. package/dist/NumBinaryEditor-WMN2GGO4.js +271 -0
  23. package/dist/NumBinaryEditor.unit.spec-TAMXV6SE.js +286 -0
  24. package/dist/NumContEditor-XYIOJY4E.js +109 -0
  25. package/dist/NumContEditor.unit.spec-WDZ75BHO.js +169 -0
  26. package/dist/NumCustomBinEditor-5SY3C4TY.js +38 -0
  27. package/dist/NumCustomBinEditor.unit.spec-XHTAIXR3.js +284 -0
  28. package/dist/NumDiscreteEditor-NRDRX4FD.js +179 -0
  29. package/dist/NumDiscreteEditor.unit.spec-2CJW7OAT.js +202 -0
  30. package/dist/NumRegularBinEditor-DUDVTNDC.js +38 -0
  31. package/dist/NumRegularBinEditor.unit.spec-H3GNQHMN.js +227 -0
  32. package/dist/NumSplineEditor-7Q4AC7KH.js +198 -0
  33. package/dist/NumSplineEditor.unit.spec-YRZK5PH5.js +199 -0
  34. package/dist/NumericDensity-NTNWUESG.js +38 -0
  35. package/dist/NumericDensity.unit.spec-5I5U6T6P.js +221 -0
  36. package/dist/NumericHandler-MEW2KMPX.js +39 -0
  37. package/dist/NumericHandler.unit.spec-JFX4BPRG.js +219 -0
  38. package/dist/ProteomeInput-K2ZHR2U6.js +395 -0
  39. package/dist/RunChart2-BEBDU7RC.js +758 -0
  40. package/dist/SC-XCBFJVUJ.js +1120 -0
  41. package/dist/Volcano-4Y4TP3UX.js +1385 -0
  42. package/dist/WSIViewer-ZLQU62PD.js +48562 -0
  43. package/dist/WsiSamplesPlot-JMBSITOM.js +165 -0
  44. package/dist/adSandbox-664IRCRL.js +38 -0
  45. package/dist/animatedBubbleChart-TX7NW34K.js +555 -0
  46. package/dist/app-63WJ3BMP.js +37 -0
  47. package/dist/app-77FIZHCG.js +49 -0
  48. package/dist/app.js +19 -19
  49. package/dist/bam-IETNVAYD.js +860 -0
  50. package/dist/barchart-YUVXJNH4.js +47 -0
  51. package/dist/barchart.data-P4EIQXGE.js +22 -0
  52. package/dist/barchart.events-JPVCLTIG.js +47 -0
  53. package/dist/barchart.integration.spec-ZH7DEQI2.js +2196 -0
  54. package/dist/barchart2-XO2FG76J.js +314 -0
  55. package/dist/bars.renderer-AUIWUJDH.js +12 -0
  56. package/dist/block-NBTCOT3H.js +6255 -0
  57. package/dist/block.init-X7Y2EEVR.js +38 -0
  58. package/dist/block.mds.expressionrank-BIAOZIZ3.js +359 -0
  59. package/dist/block.mds.geneboxplot-CNICDVLK.js +828 -0
  60. package/dist/block.mds.junction-PQXCTSUI.js +1545 -0
  61. package/dist/block.mds.svcnv-32KMVTCT.js +6801 -0
  62. package/dist/block.svg-LRTOYQK2.js +164 -0
  63. package/dist/block.tk.aicheck-HDV7ZIUD.js +283 -0
  64. package/dist/block.tk.ase-JIDWKMYI.js +365 -0
  65. package/dist/block.tk.bam-5X3OS5HB.js +1906 -0
  66. package/dist/block.tk.bedgraphdot-T7JX7YQL.js +384 -0
  67. package/dist/block.tk.bigwig.ui-OSAYEBAE.js +212 -0
  68. package/dist/block.tk.hicstraw-DEY3VQFK.js +823 -0
  69. package/dist/block.tk.junction-7UAFEZSJ.js +2364 -0
  70. package/dist/block.tk.junction.textmatrixui-27LHS33U.js +199 -0
  71. package/dist/block.tk.ld-DF2PI7OO.js +99 -0
  72. package/dist/block.tk.menu-L2D5KBIV.js +1029 -0
  73. package/dist/block.tk.pgv-QO56SKBV.js +944 -0
  74. package/dist/brainImaging-NIPQWFWO.js +423 -0
  75. package/dist/brainRegions-ZNZ2WHSU.js +221 -0
  76. package/dist/bubbleHeatmap-ERWNEKZB.js +383 -0
  77. package/dist/chunk-2GYWFQML.js +299 -0
  78. package/dist/chunk-2HYJ4GDH.js +50 -0
  79. package/dist/chunk-2MG6XE6R.js +272 -0
  80. package/dist/chunk-2X6W4E3W.js +1507 -0
  81. package/dist/chunk-2X6W4E3W.js.map +7 -0
  82. package/dist/chunk-33K5PA52.js +54 -0
  83. package/dist/chunk-37XDBPOP.js +26 -0
  84. package/dist/chunk-3EWB3246.js +58 -0
  85. package/dist/chunk-3RSKOPIY.js +100 -0
  86. package/dist/chunk-3XVVN66M.js +4085 -0
  87. package/dist/chunk-3XVVN66M.js.map +7 -0
  88. package/dist/chunk-4DPVT4NE.js +1102 -0
  89. package/dist/chunk-4IH7DORZ.js +98 -0
  90. package/dist/chunk-4QNBFIIR.js +399 -0
  91. package/dist/chunk-4STKL6SR.js +217 -0
  92. package/dist/chunk-4TZIVSL5.js +34 -0
  93. package/dist/chunk-5ABGFJSP.js +467 -0
  94. package/dist/chunk-5AZNP47R.js +302 -0
  95. package/dist/chunk-5RL2OHXX.js +5070 -0
  96. package/dist/chunk-5VOPABBA.js +20941 -0
  97. package/dist/chunk-5VOPABBA.js.map +7 -0
  98. package/dist/chunk-6BB43SIB.js +102 -0
  99. package/dist/chunk-7OHRR2IE.js +276 -0
  100. package/dist/chunk-ARBHWDMY.js +226 -0
  101. package/dist/chunk-ARBHWDMY.js.map +7 -0
  102. package/dist/chunk-ASATD4T7.js +14 -0
  103. package/dist/chunk-AZ47Q7BX.js +1223 -0
  104. package/dist/chunk-B5B3LZB3.js +236 -0
  105. package/dist/chunk-BHGISFCA.js +2681 -0
  106. package/dist/chunk-BMBOZ64T.js +2786 -0
  107. package/dist/chunk-BOZJHPJP.js +216 -0
  108. package/dist/chunk-CDD7LYJM.js +194 -0
  109. package/dist/chunk-CTQ3IUCA.js +2327 -0
  110. package/dist/chunk-D7TID3HR.js +158 -0
  111. package/dist/chunk-DBKNWR4J.js +1561 -0
  112. package/dist/chunk-DBKNWR4J.js.map +7 -0
  113. package/dist/chunk-E55LLYRX.js +55 -0
  114. package/dist/chunk-ESGXULRH.js +386 -0
  115. package/dist/chunk-EZ4LZ6ZT.js +117 -0
  116. package/dist/chunk-F3SJTVP5.js +4284 -0
  117. package/dist/chunk-F5IXNJO7.js +222 -0
  118. package/dist/chunk-FJYECRHW.js +448 -0
  119. package/dist/chunk-FPNRUQOU.js +833 -0
  120. package/dist/chunk-G5S4R77D.js +1942 -0
  121. package/dist/chunk-G764NXQN.js +170 -0
  122. package/dist/chunk-GAPI4MML.js +148 -0
  123. package/dist/chunk-HLUZOZXJ.js +272 -0
  124. package/dist/chunk-HOKIK2FR.js +375 -0
  125. package/dist/chunk-I6WR4CG7.js +323 -0
  126. package/dist/chunk-I6WR4CG7.js.map +7 -0
  127. package/dist/chunk-KLGL6XZD.js +129 -0
  128. package/dist/chunk-L7IRWUKT.js +480 -0
  129. package/dist/chunk-LFCYMSVA.js +314 -0
  130. package/dist/chunk-LX6G7HJJ.js +617 -0
  131. package/dist/chunk-M2G5R4WB.js +142 -0
  132. package/dist/chunk-M4TTGGT4.js +102 -0
  133. package/dist/chunk-M6EF3WVV.js +1825 -0
  134. package/dist/chunk-M6KHT3MM.js +146 -0
  135. package/dist/chunk-MCZFHWIR.js +230 -0
  136. package/dist/chunk-MFQACKYU.js +448 -0
  137. package/dist/chunk-MVGAGTM3.js +343 -0
  138. package/dist/chunk-NELOT3NJ.js +119 -0
  139. package/dist/chunk-NRKMXULC.js +54 -0
  140. package/dist/chunk-NSTL4MY2.js +2110 -0
  141. package/dist/chunk-NSTL4MY2.js.map +7 -0
  142. package/dist/chunk-NYRZNRG5.js +177 -0
  143. package/dist/chunk-ONPKE6DC.js +368 -0
  144. package/dist/chunk-OXVLWQ6M.js +556 -0
  145. package/dist/chunk-PFRWS4CR.js +203 -0
  146. package/dist/chunk-PJKQUXEN.js +1275 -0
  147. package/dist/chunk-Q2L44HK3.js +6364 -0
  148. package/dist/chunk-QNHT74XC.js +1245 -0
  149. package/dist/chunk-RKO6BL5N.js +446 -0
  150. package/dist/chunk-T25QNZHB.js +254 -0
  151. package/dist/chunk-U7TBYVIQ.js +31 -0
  152. package/dist/chunk-UGRQXBL4.js +381 -0
  153. package/dist/chunk-USFSHSCJ.js +477 -0
  154. package/dist/chunk-VJ6UFVGC.js +2833 -0
  155. package/dist/chunk-W3WPPOXH.js +292 -0
  156. package/dist/chunk-WFCSOTBO.js +263 -0
  157. package/dist/chunk-WHP4AKDM.js +185 -0
  158. package/dist/chunk-WZ2L57MB.js +102 -0
  159. package/dist/chunk-XPY6AWXO.js +787 -0
  160. package/dist/chunk-Y4UAKFWC.js +37 -0
  161. package/dist/chunk-YQBS2ZCK.js +514 -0
  162. package/dist/chunk-Z5U6HOE4.js +190 -0
  163. package/dist/chunk-Z5U6HOE4.js.map +7 -0
  164. package/dist/chunk-ZNEJUKJW.js +140 -0
  165. package/dist/chunk-ZNEJUKJW.js.map +7 -0
  166. package/dist/chunk-ZTHM2TKP.js +176 -0
  167. package/dist/condition-2PASYSUC.js +332 -0
  168. package/dist/controls-5IMJ6K5L.js +41 -0
  169. package/dist/controls.config-P5PG2DHW.js +39 -0
  170. package/dist/correlation-U3EDLNHR.js +102 -0
  171. package/dist/cuminc-2HUFEROK.js +1149 -0
  172. package/dist/cuminc.integration.spec-WFWAPTDA.js +678 -0
  173. package/dist/customdata.inputui-ZHWNEPFH.js +289 -0
  174. package/dist/dataDownload-VBSJBKMP.js +330 -0
  175. package/dist/dataDownload.integration.spec-LUFSETOP.js +193 -0
  176. package/dist/databrowser.ui-6H2KMSTJ.js +433 -0
  177. package/dist/dictionary-V37LXFIP.js +118 -0
  178. package/dist/dnaMethylation-OIZMHMLK.js +38 -0
  179. package/dist/dnaMethylation.integration.spec-CWPTJ74H.js +203 -0
  180. package/dist/dofetch-IWPZQB5N.js +51 -0
  181. package/dist/e2pca-7SLIAGYW.js +350 -0
  182. package/dist/ep-7L6KF6K4.js +1256 -0
  183. package/dist/expclust.gdc.spec-JT452Q3G.js +307 -0
  184. package/dist/facet-CXOUU5AS.js +521 -0
  185. package/dist/forms2-VPNCLQOY.js +539 -0
  186. package/dist/gb-P4VRXRED.js +88 -0
  187. package/dist/geneExpClustering-FQTCKRJJ.js +249 -0
  188. package/dist/geneExpression-BHO5326K.js +313 -0
  189. package/dist/geneExpression-ZMERB64E.js +38 -0
  190. package/dist/geneExpression.unit.spec-CNVHZWNG.js +102 -0
  191. package/dist/geneORA-FXVUCXGX.js +278 -0
  192. package/dist/geneRanking-SFK4UBKQ.js +553 -0
  193. package/dist/geneVariant-IYEHB4H7.js +41 -0
  194. package/dist/geneVariant-LIRRLUFR.js +39 -0
  195. package/dist/geneVariant.integration.spec-Y2NPNTYX.js +198 -0
  196. package/dist/genefusion.ui-L3HIJM3N.js +309 -0
  197. package/dist/geneset-A6VUFX63.js +208 -0
  198. package/dist/genomeBrowser.spec-CB4HHHBN.js +281 -0
  199. package/dist/grin2-FKBIMH5N.js +75 -0
  200. package/dist/grin2-V36KLEBU.js +1143 -0
  201. package/dist/grin2-V36KLEBU.js.map +7 -0
  202. package/dist/hierCluster-QFPRMHVA.js +63 -0
  203. package/dist/hierCluster-YWC3XYPV.js +59 -0
  204. package/dist/hierCluster.config-F7YYZNM3.js +40 -0
  205. package/dist/hierCluster.integration.spec-AF4L3YT6.js +488 -0
  206. package/dist/hierCluster.interactivity-RPY74PK6.js +54 -0
  207. package/dist/hierCluster.renderers-LOKHZ3V2.js +21 -0
  208. package/dist/imagePlot-BBEXA754.js +163 -0
  209. package/dist/importPlot-7QGANZGK.js +8 -0
  210. package/dist/isoformExpression-4SLLCVFD.js +40 -0
  211. package/dist/isoformExpression.unit.spec-GEL4JJ64.js +208 -0
  212. package/dist/launch.adhoc-LWLBQJS5.js +42 -0
  213. package/dist/leftlabel.sample-RTEZOIH2.js +264 -0
  214. package/dist/legacyDataset-VLD7ZYWI.js +119 -0
  215. package/dist/lollipop-XKQK5QZU.js +171 -0
  216. package/dist/maf-AZQPPWDO.js +459 -0
  217. package/dist/maftimeline-7MSVYKQU.js +593 -0
  218. package/dist/matrix-BGLWC25D.js +58 -0
  219. package/dist/matrix-IQR5SRMK.js +63 -0
  220. package/dist/matrix.cells-5C57NWOY.js +28 -0
  221. package/dist/matrix.config-2DQXAN2E.js +41 -0
  222. package/dist/matrix.data-ADCGF5H6.js +25 -0
  223. package/dist/matrix.groups-V4ITQ5F7.js +27 -0
  224. package/dist/matrix.integration.spec-IBNOO2WP.js +3072 -0
  225. package/dist/matrix.interactivity-JNELJFOV.js +42 -0
  226. package/dist/matrix.layout-WBVIV6GR.js +44 -0
  227. package/dist/matrix.legend-YHOWPK77.js +22 -0
  228. package/dist/matrix.renderers-5BGVRR3M.js +38 -0
  229. package/dist/matrix.serieses-2GZJOASZ.js +21 -0
  230. package/dist/matrix.sort-WKIWPJKP.js +27 -0
  231. package/dist/matrix.sort.unit.spec-L2E4D4AS.js +472 -0
  232. package/dist/matrix.sorterUi-TEJWWJ64.js +18 -0
  233. package/dist/matrix.sorterUi.unit.spec-SHP7C4P7.js +342 -0
  234. package/dist/mavb-4MXNYUEO.js +732 -0
  235. package/dist/mds.fimo-WHIJIBOI.js +518 -0
  236. package/dist/mds.samplescatterplot-BRJ6NG2D.js +1550 -0
  237. package/dist/mds.survivalplot-OPCMB5PB.js +483 -0
  238. package/dist/numericDictTermCluster-7MIFOP2K.js +65 -0
  239. package/dist/oncomatrix-BGG6BEUI.js +295 -0
  240. package/dist/oncomatrix.spec-LYQ4L4F3.js +448 -0
  241. package/dist/plot.2dvaf-6WVCP2ZI.js +377 -0
  242. package/dist/plot.app-MLBP6WFP.js +41 -0
  243. package/dist/plot.barplot-JEPRZSCU.js +102 -0
  244. package/dist/plot.boxplot-GNFW42VM.js +152 -0
  245. package/dist/plot.brainImaging-5ACNSD45.js +51 -0
  246. package/dist/plot.disco-Q2V2KKIH.js +102 -0
  247. package/dist/plot.dzi-KVT6S7K7.js +33 -0
  248. package/dist/plot.ssgq-4N3KFJQ2.js +139 -0
  249. package/dist/plot.vaf2cov-ITRG5U43.js +259 -0
  250. package/dist/plot.wsi-26YZNU4V.js +36 -0
  251. package/dist/polar2-J7GVUK4X.js +231 -0
  252. package/dist/profileForms-VXV2JLXU.js +446 -0
  253. package/dist/profilePlot-ZZYZK4SY.js +54 -0
  254. package/dist/proteinView-7KN532D3.js +1568 -0
  255. package/dist/qualitative-MLRVLIAU.js +43 -0
  256. package/dist/radar2-WM2ZBOH3.js +326 -0
  257. package/dist/radarFacility2-3SBR2JJ3.js +334 -0
  258. package/dist/regression-WMRPQJW2.js +56 -0
  259. package/dist/regression.inputs-VWZKSYNY.js +48 -0
  260. package/dist/regression.inputs.term-OWE6GWHM.js +48 -0
  261. package/dist/regression.inputs.values.table-4INNZQI2.js +45 -0
  262. package/dist/regression.integration.spec-XKQ2JOOT.js +784 -0
  263. package/dist/regression.results-VZBYMBYC.js +40 -0
  264. package/dist/regression.spec-DU3UTDCJ.js +708 -0
  265. package/dist/render-N5FOF247.js +38 -0
  266. package/dist/report-DW3OHB67.js +222 -0
  267. package/dist/sampleScatter.spec-REFSK2V4.js +202 -0
  268. package/dist/sampleView-ICOT2R6O.js +48 -0
  269. package/dist/samplelst-TJEVASYG.js +111 -0
  270. package/dist/samplematrix-6DAWCXQ3.js +2198 -0
  271. package/dist/sc-53LNOB7N.js +86 -0
  272. package/dist/scatter-DKYSS4DL.js +851 -0
  273. package/dist/selectGenomeWithTklst-WTX66TV3.js +134 -0
  274. package/dist/singleCellCellType-D2CN2BHQ.js +38 -0
  275. package/dist/singleCellCellType.unit.spec-LADUCI4R.js +160 -0
  276. package/dist/singleCellGeneExpression-YR2ZT34W.js +38 -0
  277. package/dist/singleCellGeneExpression.unit.spec-BM63M432.js +153 -0
  278. package/dist/singleCellPlot-3ICIOILE.js +54 -0
  279. package/dist/singlecell-6ZUFA3BQ.js +86 -0
  280. package/dist/singlecell-KX7W4U57.js +1572 -0
  281. package/dist/snp-VIURB7L3.js +38 -0
  282. package/dist/snp.unit.spec-ACZNZUNS.js +176 -0
  283. package/dist/snplocus-3LW4ZUZR.js +208 -0
  284. package/dist/spliceevent.a53ss.diagram-AKTZGWNM.js +151 -0
  285. package/dist/spliceevent.exonskip.diagram-XZHXB77R.js +283 -0
  286. package/dist/spliceevent.exonskip.diagram-XZHXB77R.js.map +7 -0
  287. package/dist/spliceevent.noeventdiagram-YTXWWNTJ.js +460 -0
  288. package/dist/ssGSEA-THW4WFMI.js +38 -0
  289. package/dist/ssGSEA.unit.spec-HTRGQI2K.js +88 -0
  290. package/dist/summarizeCnvGeneexp-RFYC3H2Z.js +163 -0
  291. package/dist/summarizeGeneexpSurvival-DQBZUTQ6.js +114 -0
  292. package/dist/summarizeMutationCnv-7AYEMHAI.js +164 -0
  293. package/dist/summarizeMutationDiagnosis-AKFJDSAF.js +40 -0
  294. package/dist/summarizeMutationSurvival-QJHZRQBZ.js +99 -0
  295. package/dist/summary-A5P7AYK4.js +49 -0
  296. package/dist/summary.integration.spec-HQISXGNL.js +414 -0
  297. package/dist/summaryInput-HP675QOQ.js +235 -0
  298. package/dist/sunburst-65LSYRXX.js +284 -0
  299. package/dist/survival-QNEI6YVK.js +46 -0
  300. package/dist/survival-UI74VXSM.js +58 -0
  301. package/dist/survival.integration.spec-X5N3JQXS.js +915 -0
  302. package/dist/svgraph-PSX2NER3.js +1387 -0
  303. package/dist/svmr-QDQ33EFX.js +3842 -0
  304. package/dist/table-LWAI27UO.js +200 -0
  305. package/dist/termCollection-3JHR74FG.js +179 -0
  306. package/dist/termCollection-CDF5LYUG.js +38 -0
  307. package/dist/termCollection.unit.spec-HOJKYWHF.js +208 -0
  308. package/dist/tk-GL4QCL4K.js +1019 -0
  309. package/dist/tk-GL4QCL4K.js.map +7 -0
  310. package/dist/tk-OEQFO73V.js +46 -0
  311. package/dist/tp.ui-SHNERDGC.js +1459 -0
  312. package/dist/tvs.dt-CZDC4TSR.js +39 -0
  313. package/dist/tvs.dtcnv.categorical-OPBDHZGB.js +40 -0
  314. package/dist/tvs.dtcnv.continuous-AR6P4EP3.js +72 -0
  315. package/dist/tvs.dtfusion-2YQ7N6FQ.js +40 -0
  316. package/dist/tvs.dtitd-ATCHW735.js +40 -0
  317. package/dist/tvs.dtsnvindel-WHHWAATJ.js +40 -0
  318. package/dist/tvs.dtsv-3UMCW65O.js +40 -0
  319. package/dist/tvs.numeric-TOEPASWN.js +21 -0
  320. package/dist/tvs.samplelst-M7XKXRTZ.js +104 -0
  321. package/dist/tvs.termCollection-WT4WZMYR.js +159 -0
  322. package/dist/violin-2YGXTBDS.js +46 -0
  323. package/dist/violin.integration.spec-YWNHVAGS.js +1425 -0
  324. package/dist/violin.interactivity-J6BE2UQL.js +38 -0
  325. package/dist/violin.renderer-3GRUWP2U.js +40 -0
  326. package/dist/vocabulary-2INCVPYJ.js +41 -0
  327. package/dist/vocabulary-2INCVPYJ.js.map +7 -0
  328. package/package.json +3 -3
  329. package/dist/2dmaf-HV22W5N3.js +0 -1373
  330. package/dist/AIProjectAdmin-7QGTPN3B.js +0 -958
  331. package/dist/AppHeader-NOKET4YE.js +0 -835
  332. package/dist/BoxPlot-SPG66F4C.js +0 -1217
  333. package/dist/CorrelationVolcano-3LEMTFXP.js +0 -619
  334. package/dist/DE-WCCADMXA.js +0 -95
  335. package/dist/DEinput-IZNPYPKH.js +0 -301
  336. package/dist/DifferentialAnalysis-SDZXIUXP.js +0 -242
  337. package/dist/Disco-M5RNUOWG.js +0 -3297
  338. package/dist/Disco-M5RNUOWG.js.map +0 -7
  339. package/dist/Disco.UI-RVUOPT6Y.js +0 -249
  340. package/dist/DmrPlot-R2N534FS.js +0 -642
  341. package/dist/GB-DY6XWOJE.js +0 -1356
  342. package/dist/GB-DY6XWOJE.js.map +0 -7
  343. package/dist/GSEA-3TB3PYEV.js +0 -846
  344. package/dist/GeneExpInput-VWCPHOVO.js +0 -367
  345. package/dist/HicApp-F2MY3NXP.js +0 -2250
  346. package/dist/IDCViewer-PT7IV6T2.js +0 -10799
  347. package/dist/IDCViewer-PT7IV6T2.js.map +0 -7
  348. package/dist/NumBinaryEditor-AL2NWII2.js +0 -271
  349. package/dist/NumBinaryEditor.unit.spec-NFRJHFNX.js +0 -286
  350. package/dist/NumContEditor-CTFJVIHU.js +0 -109
  351. package/dist/NumContEditor.unit.spec-FXGGCMTD.js +0 -169
  352. package/dist/NumCustomBinEditor-JFIJ2X6E.js +0 -38
  353. package/dist/NumCustomBinEditor.unit.spec-ZKIZXS53.js +0 -284
  354. package/dist/NumDiscreteEditor-E7SPHF55.js +0 -179
  355. package/dist/NumDiscreteEditor.unit.spec-QKKRZJMU.js +0 -202
  356. package/dist/NumRegularBinEditor-JSLTZIAQ.js +0 -38
  357. package/dist/NumRegularBinEditor.unit.spec-W73BA6L4.js +0 -227
  358. package/dist/NumSplineEditor-ZEXYGKKF.js +0 -198
  359. package/dist/NumSplineEditor.unit.spec-EHKI4CY7.js +0 -199
  360. package/dist/NumericDensity-ZXM6TB33.js +0 -38
  361. package/dist/NumericDensity.unit.spec-PUFRE5XA.js +0 -221
  362. package/dist/NumericHandler-73TUDM3R.js +0 -39
  363. package/dist/NumericHandler.unit.spec-EITBD47U.js +0 -219
  364. package/dist/ProteomeInput-QICOUSRW.js +0 -395
  365. package/dist/RunChart2-4JYV2Z7B.js +0 -758
  366. package/dist/SC-77HA6SBW.js +0 -1120
  367. package/dist/Volcano-3546I4MG.js +0 -1385
  368. package/dist/WSIViewer-DQAXX7QJ.js +0 -48562
  369. package/dist/WsiSamplesPlot-AGOLPLK3.js +0 -165
  370. package/dist/adSandbox-ZE5QOTN5.js +0 -38
  371. package/dist/animatedBubbleChart-ILMDNAVK.js +0 -555
  372. package/dist/app-JBFRJ5OO.js +0 -49
  373. package/dist/app-YVNRAZWU.js +0 -37
  374. package/dist/bam-A2PVAF3J.js +0 -860
  375. package/dist/barchart-2XQ7F6LT.js +0 -47
  376. package/dist/barchart.data-6XLK7D63.js +0 -22
  377. package/dist/barchart.events-DKJDKSPN.js +0 -47
  378. package/dist/barchart.integration.spec-UTTCQJRL.js +0 -2196
  379. package/dist/barchart2-2FRVUVJG.js +0 -314
  380. package/dist/bars.renderer-57KSYAAT.js +0 -12
  381. package/dist/block-3KOPYQ25.js +0 -6255
  382. package/dist/block.init-3KLLFGGV.js +0 -38
  383. package/dist/block.mds.expressionrank-XU3MBIOX.js +0 -359
  384. package/dist/block.mds.geneboxplot-VQTBL7T4.js +0 -828
  385. package/dist/block.mds.junction-IYWWRIJD.js +0 -1545
  386. package/dist/block.mds.svcnv-BMY5DCAM.js +0 -6801
  387. package/dist/block.svg-AT4GYQHX.js +0 -164
  388. package/dist/block.tk.aicheck-RANOFGDZ.js +0 -283
  389. package/dist/block.tk.ase-CBWJA3RN.js +0 -365
  390. package/dist/block.tk.bam-D7JBRNFQ.js +0 -1906
  391. package/dist/block.tk.bedgraphdot-IEHNIGVI.js +0 -384
  392. package/dist/block.tk.bigwig.ui-3SAXUJU4.js +0 -212
  393. package/dist/block.tk.hicstraw-R5EHQFGM.js +0 -823
  394. package/dist/block.tk.junction-JFCEXZZC.js +0 -2364
  395. package/dist/block.tk.junction.textmatrixui-4V7MV6TD.js +0 -199
  396. package/dist/block.tk.ld-LP4DIHAJ.js +0 -99
  397. package/dist/block.tk.menu-FTVZU2HA.js +0 -1029
  398. package/dist/block.tk.pgv-CRAMVKU4.js +0 -944
  399. package/dist/brainImaging-DXLK5XZ6.js +0 -423
  400. package/dist/brainRegions-AMSXQT3T.js +0 -221
  401. package/dist/bubbleHeatmap-SXBARILL.js +0 -383
  402. package/dist/chunk-23AEAG37.js +0 -314
  403. package/dist/chunk-2AHDWWQO.js +0 -276
  404. package/dist/chunk-2OJ577BB.js +0 -299
  405. package/dist/chunk-433DTQ6C.js +0 -26
  406. package/dist/chunk-46CPDZSW.js +0 -617
  407. package/dist/chunk-47EYZQA7.js +0 -98
  408. package/dist/chunk-4M22UIJQ.js +0 -2327
  409. package/dist/chunk-4YDERN37.js +0 -194
  410. package/dist/chunk-5ERYRSVV.js +0 -1825
  411. package/dist/chunk-6W6UMGAV.js +0 -230
  412. package/dist/chunk-6Z4XHMZV.js +0 -54
  413. package/dist/chunk-7P4DUYAQ.js +0 -1245
  414. package/dist/chunk-7YWPWCHD.js +0 -448
  415. package/dist/chunk-7Z6E3NA5.js +0 -787
  416. package/dist/chunk-AC3RAKUI.js +0 -102
  417. package/dist/chunk-BKPDYW5T.js +0 -177
  418. package/dist/chunk-BSOB3BVG.js +0 -217
  419. package/dist/chunk-CJJA6RVM.js +0 -254
  420. package/dist/chunk-CUXOQIUA.js +0 -1102
  421. package/dist/chunk-D5ZYSW45.js +0 -216
  422. package/dist/chunk-DA6RR5IR.js +0 -170
  423. package/dist/chunk-DD6KDZVR.js +0 -302
  424. package/dist/chunk-DI5ULDWN.js +0 -54
  425. package/dist/chunk-DXM5IMGV.js +0 -446
  426. package/dist/chunk-FYY3T565.js +0 -188
  427. package/dist/chunk-FYY3T565.js.map +0 -7
  428. package/dist/chunk-GFETCJ7S.js +0 -176
  429. package/dist/chunk-H42SJNXA.js +0 -1535
  430. package/dist/chunk-H42SJNXA.js.map +0 -7
  431. package/dist/chunk-HCNF7EFT.js +0 -292
  432. package/dist/chunk-I62GOCNI.js +0 -31
  433. package/dist/chunk-IBYOP2FV.js +0 -2833
  434. package/dist/chunk-JD2ECQ3Z.js +0 -2681
  435. package/dist/chunk-JF47NF5G.js +0 -236
  436. package/dist/chunk-JHZK6IDA.js +0 -20904
  437. package/dist/chunk-JHZK6IDA.js.map +0 -7
  438. package/dist/chunk-JOA4KJTM.js +0 -222
  439. package/dist/chunk-JT7HC65V.js +0 -556
  440. package/dist/chunk-K6AW4GFM.js +0 -37
  441. package/dist/chunk-K7QY24X2.js +0 -1223
  442. package/dist/chunk-KOLVLBMI.js +0 -100
  443. package/dist/chunk-KQ6EF3FG.js +0 -448
  444. package/dist/chunk-LBWKMNVU.js +0 -129
  445. package/dist/chunk-LFGIMCUD.js +0 -55
  446. package/dist/chunk-LKB3DITY.js +0 -343
  447. package/dist/chunk-LQJMCE7G.js +0 -467
  448. package/dist/chunk-M2PPUO4E.js +0 -315
  449. package/dist/chunk-M2PPUO4E.js.map +0 -7
  450. package/dist/chunk-MCXQL4W2.js +0 -226
  451. package/dist/chunk-MCXQL4W2.js.map +0 -7
  452. package/dist/chunk-MLYSQG3C.js +0 -833
  453. package/dist/chunk-MNIBZTQE.js +0 -146
  454. package/dist/chunk-MYZJUT2H.js +0 -272
  455. package/dist/chunk-NOCLG6IN.js +0 -5070
  456. package/dist/chunk-NVRLD4TF.js +0 -2786
  457. package/dist/chunk-NZCX4A7X.js +0 -14
  458. package/dist/chunk-OVHCUTQM.js +0 -102
  459. package/dist/chunk-P3NKHTNT.js +0 -34
  460. package/dist/chunk-PFOCEOVT.js +0 -477
  461. package/dist/chunk-PJSOYF5U.js +0 -158
  462. package/dist/chunk-PK5HXJ3S.js +0 -272
  463. package/dist/chunk-Q555GFBW.js +0 -1942
  464. package/dist/chunk-QAVZUWY3.js +0 -399
  465. package/dist/chunk-QOAUM6UV.js +0 -148
  466. package/dist/chunk-QOEPKNVD.js +0 -185
  467. package/dist/chunk-QXPJLSAD.js +0 -4284
  468. package/dist/chunk-QZLP27O6.js +0 -50
  469. package/dist/chunk-SENZWOCC.js +0 -203
  470. package/dist/chunk-SFIX7XVT.js +0 -514
  471. package/dist/chunk-SJWAMUL5.js +0 -117
  472. package/dist/chunk-SOTB4FRE.js +0 -2098
  473. package/dist/chunk-SOTB4FRE.js.map +0 -7
  474. package/dist/chunk-TJYRBEBK.js +0 -2878
  475. package/dist/chunk-TJYRBEBK.js.map +0 -7
  476. package/dist/chunk-U3CMLIGB.js +0 -6364
  477. package/dist/chunk-UF6ZP6UR.js +0 -381
  478. package/dist/chunk-UN3O2MNB.js +0 -375
  479. package/dist/chunk-UVWUP6N7.js +0 -1275
  480. package/dist/chunk-UYEJ5DEZ.js +0 -142
  481. package/dist/chunk-V2ET64EJ.js +0 -119
  482. package/dist/chunk-WQEGWR63.js +0 -102
  483. package/dist/chunk-WYSEBR5S.js +0 -58
  484. package/dist/chunk-XB6F5OUB.js +0 -386
  485. package/dist/chunk-XVYSEXFV.js +0 -368
  486. package/dist/chunk-YGKVY5IU.js +0 -480
  487. package/dist/chunk-ZPXSPJV2.js +0 -263
  488. package/dist/chunk-ZRSJVACE.js +0 -1500
  489. package/dist/chunk-ZRSJVACE.js.map +0 -7
  490. package/dist/condition-YCPNILTV.js +0 -332
  491. package/dist/controls-RW5MWSLN.js +0 -41
  492. package/dist/controls.config-MP3CSYR4.js +0 -39
  493. package/dist/correlation-7AQRU4YR.js +0 -102
  494. package/dist/cuminc-WYLKIOXR.js +0 -1149
  495. package/dist/cuminc.integration.spec-MSAWDLD7.js +0 -678
  496. package/dist/customdata.inputui-YU4IQJOV.js +0 -289
  497. package/dist/dataDownload-72DIPZ45.js +0 -330
  498. package/dist/dataDownload.integration.spec-HRLMWQN7.js +0 -193
  499. package/dist/databrowser.ui-3PE25HK4.js +0 -433
  500. package/dist/dictionary-Y3ICL4AE.js +0 -118
  501. package/dist/dnaMethylation-SVGDW64U.js +0 -38
  502. package/dist/dnaMethylation.integration.spec-B7GLAFZI.js +0 -203
  503. package/dist/dofetch-42KOXNPF.js +0 -51
  504. package/dist/e2pca-CLFGEFJH.js +0 -350
  505. package/dist/ep-PUHV2DMO.js +0 -1256
  506. package/dist/expclust.gdc.spec-N7YDJAOZ.js +0 -307
  507. package/dist/facet-JFFJJCNT.js +0 -521
  508. package/dist/forms2-XZAWW3RN.js +0 -539
  509. package/dist/gb-SQJ5PWOH.js +0 -88
  510. package/dist/geneExpClustering-EG2BLMQX.js +0 -249
  511. package/dist/geneExpression-J42BGP3B.js +0 -38
  512. package/dist/geneExpression-QRK3LNMV.js +0 -313
  513. package/dist/geneExpression.unit.spec-X7HVIFZA.js +0 -102
  514. package/dist/geneORA-SVBPO66K.js +0 -278
  515. package/dist/geneRanking-HNMMLZIX.js +0 -553
  516. package/dist/geneVariant-RVQKNVQO.js +0 -39
  517. package/dist/geneVariant-SO5FEJUZ.js +0 -41
  518. package/dist/geneVariant.integration.spec-DOMX4GMP.js +0 -198
  519. package/dist/genefusion.ui-QS7AG46F.js +0 -309
  520. package/dist/geneset-JKOX3VIW.js +0 -208
  521. package/dist/genomeBrowser.spec-IRSTT2OX.js +0 -281
  522. package/dist/grin2-G6DA4M7Q.js +0 -1095
  523. package/dist/grin2-G6DA4M7Q.js.map +0 -7
  524. package/dist/grin2-VZLCISPM.js +0 -75
  525. package/dist/hierCluster-6AW23EB5.js +0 -63
  526. package/dist/hierCluster-REXTCODR.js +0 -59
  527. package/dist/hierCluster.config-3Z3R66XH.js +0 -40
  528. package/dist/hierCluster.integration.spec-XE47Q64Z.js +0 -488
  529. package/dist/hierCluster.interactivity-2YJYYKVK.js +0 -54
  530. package/dist/hierCluster.renderers-LE7W2AL6.js +0 -21
  531. package/dist/imagePlot-WMZJJ5CJ.js +0 -163
  532. package/dist/importPlot-P35EGIJJ.js +0 -8
  533. package/dist/isoformExpression-3TFPEXB4.js +0 -40
  534. package/dist/isoformExpression.unit.spec-SPQFK3EA.js +0 -208
  535. package/dist/launch.adhoc-ZQSJBLMJ.js +0 -42
  536. package/dist/leftlabel.sample-SJRQ6LJ2.js +0 -264
  537. package/dist/legacyDataset-TNIIJABK.js +0 -119
  538. package/dist/lollipop-RXM6UBZ7.js +0 -171
  539. package/dist/maf-NWXJWBNF.js +0 -459
  540. package/dist/maftimeline-D7UENAP5.js +0 -593
  541. package/dist/matrix-77LNADX2.js +0 -63
  542. package/dist/matrix-YDOLKY6G.js +0 -58
  543. package/dist/matrix.cells-VEC5LEWV.js +0 -28
  544. package/dist/matrix.config-GTAAAUGQ.js +0 -41
  545. package/dist/matrix.data-T4GEX6ZH.js +0 -25
  546. package/dist/matrix.groups-7NWHHP5Q.js +0 -27
  547. package/dist/matrix.integration.spec-5GBTFRZA.js +0 -3072
  548. package/dist/matrix.interactivity-ONT6WCRU.js +0 -42
  549. package/dist/matrix.layout-LDXHGOHF.js +0 -44
  550. package/dist/matrix.legend-5MDW65HV.js +0 -22
  551. package/dist/matrix.renderers-OEPLQG3C.js +0 -38
  552. package/dist/matrix.serieses-4RX7TUQ7.js +0 -21
  553. package/dist/matrix.sort-UKMMECBZ.js +0 -27
  554. package/dist/matrix.sort.unit.spec-VWOXPVRE.js +0 -472
  555. package/dist/matrix.sorterUi-H64DDQIL.js +0 -18
  556. package/dist/matrix.sorterUi.unit.spec-DH4434FK.js +0 -342
  557. package/dist/mavb-ARUWOZES.js +0 -732
  558. package/dist/mds.fimo-ZEAE5BC3.js +0 -518
  559. package/dist/mds.samplescatterplot-C5EBKBVF.js +0 -1550
  560. package/dist/mds.survivalplot-RS7Z3J3Q.js +0 -483
  561. package/dist/numericDictTermCluster-CSQOV4TM.js +0 -65
  562. package/dist/oncomatrix-5UVM3KUA.js +0 -295
  563. package/dist/oncomatrix.spec-CU3EZCMO.js +0 -448
  564. package/dist/plot.2dvaf-JD27DSDS.js +0 -377
  565. package/dist/plot.app-NMPMG3S2.js +0 -41
  566. package/dist/plot.barplot-T4LPKFXW.js +0 -102
  567. package/dist/plot.boxplot-22ETOHNI.js +0 -152
  568. package/dist/plot.brainImaging-Q7S7KSHW.js +0 -51
  569. package/dist/plot.disco-NIPBER5N.js +0 -102
  570. package/dist/plot.dzi-DAX7GUTF.js +0 -33
  571. package/dist/plot.ssgq-7J6S35RW.js +0 -139
  572. package/dist/plot.vaf2cov-7EWFTD72.js +0 -259
  573. package/dist/plot.wsi-E45KZGKD.js +0 -36
  574. package/dist/polar2-LPT2XMD2.js +0 -231
  575. package/dist/profileForms-EYN2KLSY.js +0 -446
  576. package/dist/profilePlot-I7VQM3CH.js +0 -54
  577. package/dist/proteinView-JP5TF3ZK.js +0 -1568
  578. package/dist/qualitative-7X3ECW7Q.js +0 -43
  579. package/dist/radar2-V3FYBFAG.js +0 -326
  580. package/dist/radarFacility2-O6GQLBBN.js +0 -334
  581. package/dist/regression-CLG6NYVF.js +0 -56
  582. package/dist/regression.inputs-RLOBIRJH.js +0 -48
  583. package/dist/regression.inputs.term-ZKIP6KDO.js +0 -48
  584. package/dist/regression.inputs.values.table-2VD4AO5T.js +0 -45
  585. package/dist/regression.integration.spec-JEIMN7MS.js +0 -784
  586. package/dist/regression.results-FT6VSWGR.js +0 -40
  587. package/dist/regression.spec-V4S52JQM.js +0 -708
  588. package/dist/report-UPQFSI4D.js +0 -222
  589. package/dist/sampleScatter.spec-QSRF3STG.js +0 -202
  590. package/dist/sampleView-JIGZ7GTP.js +0 -48
  591. package/dist/samplelst-VJMYHVXI.js +0 -111
  592. package/dist/samplematrix-LO4QB37V.js +0 -2198
  593. package/dist/sc-4VZBGFZP.js +0 -86
  594. package/dist/scatter-LQECXZLB.js +0 -851
  595. package/dist/selectGenomeWithTklst-IJTCLRIN.js +0 -134
  596. package/dist/singleCellCellType-FJ53DRXD.js +0 -38
  597. package/dist/singleCellCellType.unit.spec-VOE4KY6L.js +0 -160
  598. package/dist/singleCellGeneExpression-RZE5UVL4.js +0 -38
  599. package/dist/singleCellGeneExpression.unit.spec-2DASF7PD.js +0 -153
  600. package/dist/singleCellPlot-Q5UNIW3M.js +0 -54
  601. package/dist/singlecell-N7F5KVIB.js +0 -1572
  602. package/dist/singlecell-TX5AQ4WM.js +0 -86
  603. package/dist/snp-S4O7SVDD.js +0 -38
  604. package/dist/snp.unit.spec-WSQMZSTE.js +0 -176
  605. package/dist/snplocus-Y2R5C4ZP.js +0 -208
  606. package/dist/spliceevent.a53ss.diagram-FGRQR73W.js +0 -151
  607. package/dist/spliceevent.exonskip.diagram-TVH44RNL.js +0 -277
  608. package/dist/spliceevent.exonskip.diagram-TVH44RNL.js.map +0 -7
  609. package/dist/spliceevent.noeventdiagram-G2CMYYE7.js +0 -460
  610. package/dist/ssGSEA-BH53XGEZ.js +0 -38
  611. package/dist/ssGSEA.unit.spec-BYIVB7FZ.js +0 -88
  612. package/dist/summarizeCnvGeneexp-IZNOX4E7.js +0 -163
  613. package/dist/summarizeGeneexpSurvival-DJZ2R24E.js +0 -114
  614. package/dist/summarizeMutationCnv-CO2TVWOI.js +0 -164
  615. package/dist/summarizeMutationDiagnosis-EUZXCSZP.js +0 -40
  616. package/dist/summarizeMutationSurvival-CXFT3HWL.js +0 -99
  617. package/dist/summary-JHZCDE35.js +0 -49
  618. package/dist/summary.integration.spec-WBEYSDCA.js +0 -414
  619. package/dist/summaryInput-JVH3R54R.js +0 -235
  620. package/dist/sunburst-CTJTXHSA.js +0 -284
  621. package/dist/survival-DLLVUG2P.js +0 -46
  622. package/dist/survival-XFVYNI6S.js +0 -58
  623. package/dist/survival.integration.spec-KVXHHAA3.js +0 -915
  624. package/dist/svgraph-ACEBMDIX.js +0 -1387
  625. package/dist/svmr-IQEDSZ2C.js +0 -3842
  626. package/dist/table-2IF6UGHR.js +0 -200
  627. package/dist/termCollection-JOLQJYJ3.js +0 -38
  628. package/dist/termCollection-PSXFFR32.js +0 -179
  629. package/dist/termCollection.unit.spec-4SOZP4FY.js +0 -208
  630. package/dist/tk-AAIHEQO6.js +0 -46
  631. package/dist/tk-IRXFL5NV.js +0 -997
  632. package/dist/tk-IRXFL5NV.js.map +0 -7
  633. package/dist/tp.ui-6STLQEXX.js +0 -1459
  634. package/dist/tvs.dt-FSA7KPSQ.js +0 -39
  635. package/dist/tvs.dtcnv.categorical-FSPGH7DP.js +0 -40
  636. package/dist/tvs.dtcnv.continuous-T4ZMSDB4.js +0 -72
  637. package/dist/tvs.dtfusion-UL3YENUM.js +0 -40
  638. package/dist/tvs.dtitd-XJOSZUWG.js +0 -40
  639. package/dist/tvs.dtsnvindel-5TPUT5RJ.js +0 -40
  640. package/dist/tvs.dtsv-OTNHXYOJ.js +0 -40
  641. package/dist/tvs.numeric-KYAU5OV3.js +0 -21
  642. package/dist/tvs.samplelst-FQKTAQZF.js +0 -104
  643. package/dist/tvs.termCollection-ZAPCUMUW.js +0 -159
  644. package/dist/violin-HEFFKPL5.js +0 -46
  645. package/dist/violin.integration.spec-774N4G5A.js +0 -1425
  646. package/dist/violin.interactivity-XNYJSK53.js +0 -38
  647. package/dist/violin.renderer-R74VSGRC.js +0 -40
  648. package/dist/vocabulary-OHMC6NWL.js +0 -41
  649. /package/dist/{2dmaf-HV22W5N3.js.map → 2dmaf-R3PFZNRN.js.map} +0 -0
  650. /package/dist/{AIProjectAdmin-7QGTPN3B.js.map → AIProjectAdmin-DM3KG6SR.js.map} +0 -0
  651. /package/dist/{AppHeader-NOKET4YE.js.map → AppHeader-6DZQ6YZX.js.map} +0 -0
  652. /package/dist/{BoxPlot-SPG66F4C.js.map → BoxPlot-76NINVX4.js.map} +0 -0
  653. /package/dist/{CorrelationVolcano-3LEMTFXP.js.map → CorrelationVolcano-U5UMJNH5.js.map} +0 -0
  654. /package/dist/{DE-WCCADMXA.js.map → DE-AXNYWIQK.js.map} +0 -0
  655. /package/dist/{DEinput-IZNPYPKH.js.map → DEinput-JH6YY6LS.js.map} +0 -0
  656. /package/dist/{DifferentialAnalysis-SDZXIUXP.js.map → DifferentialAnalysis-25P4CGIY.js.map} +0 -0
  657. /package/dist/{Disco.UI-RVUOPT6Y.js.map → Disco.UI-C7CZINUQ.js.map} +0 -0
  658. /package/dist/{DmrPlot-R2N534FS.js.map → DmrPlot-WROR4ENM.js.map} +0 -0
  659. /package/dist/{GSEA-3TB3PYEV.js.map → GSEA-Y5R2THIJ.js.map} +0 -0
  660. /package/dist/{GeneExpInput-VWCPHOVO.js.map → GeneExpInput-JDU6EI7K.js.map} +0 -0
  661. /package/dist/{HicApp-F2MY3NXP.js.map → HicApp-UNIJLH4B.js.map} +0 -0
  662. /package/dist/{NumBinaryEditor-AL2NWII2.js.map → NumBinaryEditor-WMN2GGO4.js.map} +0 -0
  663. /package/dist/{NumBinaryEditor.unit.spec-NFRJHFNX.js.map → NumBinaryEditor.unit.spec-TAMXV6SE.js.map} +0 -0
  664. /package/dist/{NumContEditor-CTFJVIHU.js.map → NumContEditor-XYIOJY4E.js.map} +0 -0
  665. /package/dist/{NumContEditor.unit.spec-FXGGCMTD.js.map → NumContEditor.unit.spec-WDZ75BHO.js.map} +0 -0
  666. /package/dist/{NumCustomBinEditor-JFIJ2X6E.js.map → NumCustomBinEditor-5SY3C4TY.js.map} +0 -0
  667. /package/dist/{NumCustomBinEditor.unit.spec-ZKIZXS53.js.map → NumCustomBinEditor.unit.spec-XHTAIXR3.js.map} +0 -0
  668. /package/dist/{NumDiscreteEditor-E7SPHF55.js.map → NumDiscreteEditor-NRDRX4FD.js.map} +0 -0
  669. /package/dist/{NumDiscreteEditor.unit.spec-QKKRZJMU.js.map → NumDiscreteEditor.unit.spec-2CJW7OAT.js.map} +0 -0
  670. /package/dist/{NumRegularBinEditor-JSLTZIAQ.js.map → NumRegularBinEditor-DUDVTNDC.js.map} +0 -0
  671. /package/dist/{NumRegularBinEditor.unit.spec-W73BA6L4.js.map → NumRegularBinEditor.unit.spec-H3GNQHMN.js.map} +0 -0
  672. /package/dist/{NumSplineEditor-ZEXYGKKF.js.map → NumSplineEditor-7Q4AC7KH.js.map} +0 -0
  673. /package/dist/{NumSplineEditor.unit.spec-EHKI4CY7.js.map → NumSplineEditor.unit.spec-YRZK5PH5.js.map} +0 -0
  674. /package/dist/{NumericDensity-ZXM6TB33.js.map → NumericDensity-NTNWUESG.js.map} +0 -0
  675. /package/dist/{NumericDensity.unit.spec-PUFRE5XA.js.map → NumericDensity.unit.spec-5I5U6T6P.js.map} +0 -0
  676. /package/dist/{NumericHandler-73TUDM3R.js.map → NumericHandler-MEW2KMPX.js.map} +0 -0
  677. /package/dist/{NumericHandler.unit.spec-EITBD47U.js.map → NumericHandler.unit.spec-JFX4BPRG.js.map} +0 -0
  678. /package/dist/{ProteomeInput-QICOUSRW.js.map → ProteomeInput-K2ZHR2U6.js.map} +0 -0
  679. /package/dist/{RunChart2-4JYV2Z7B.js.map → RunChart2-BEBDU7RC.js.map} +0 -0
  680. /package/dist/{SC-77HA6SBW.js.map → SC-XCBFJVUJ.js.map} +0 -0
  681. /package/dist/{Volcano-3546I4MG.js.map → Volcano-4Y4TP3UX.js.map} +0 -0
  682. /package/dist/{WSIViewer-DQAXX7QJ.js.map → WSIViewer-ZLQU62PD.js.map} +0 -0
  683. /package/dist/{WsiSamplesPlot-AGOLPLK3.js.map → WsiSamplesPlot-JMBSITOM.js.map} +0 -0
  684. /package/dist/{adSandbox-ZE5QOTN5.js.map → adSandbox-664IRCRL.js.map} +0 -0
  685. /package/dist/{animatedBubbleChart-ILMDNAVK.js.map → animatedBubbleChart-TX7NW34K.js.map} +0 -0
  686. /package/dist/{app-JBFRJ5OO.js.map → app-63WJ3BMP.js.map} +0 -0
  687. /package/dist/{app-YVNRAZWU.js.map → app-77FIZHCG.js.map} +0 -0
  688. /package/dist/{bam-A2PVAF3J.js.map → bam-IETNVAYD.js.map} +0 -0
  689. /package/dist/{barchart-2XQ7F6LT.js.map → barchart-YUVXJNH4.js.map} +0 -0
  690. /package/dist/{barchart.data-6XLK7D63.js.map → barchart.data-P4EIQXGE.js.map} +0 -0
  691. /package/dist/{barchart.events-DKJDKSPN.js.map → barchart.events-JPVCLTIG.js.map} +0 -0
  692. /package/dist/{barchart.integration.spec-UTTCQJRL.js.map → barchart.integration.spec-ZH7DEQI2.js.map} +0 -0
  693. /package/dist/{barchart2-2FRVUVJG.js.map → barchart2-XO2FG76J.js.map} +0 -0
  694. /package/dist/{bars.renderer-57KSYAAT.js.map → bars.renderer-AUIWUJDH.js.map} +0 -0
  695. /package/dist/{block-3KOPYQ25.js.map → block-NBTCOT3H.js.map} +0 -0
  696. /package/dist/{block.init-3KLLFGGV.js.map → block.init-X7Y2EEVR.js.map} +0 -0
  697. /package/dist/{block.mds.expressionrank-XU3MBIOX.js.map → block.mds.expressionrank-BIAOZIZ3.js.map} +0 -0
  698. /package/dist/{block.mds.geneboxplot-VQTBL7T4.js.map → block.mds.geneboxplot-CNICDVLK.js.map} +0 -0
  699. /package/dist/{block.mds.junction-IYWWRIJD.js.map → block.mds.junction-PQXCTSUI.js.map} +0 -0
  700. /package/dist/{block.mds.svcnv-BMY5DCAM.js.map → block.mds.svcnv-32KMVTCT.js.map} +0 -0
  701. /package/dist/{block.svg-AT4GYQHX.js.map → block.svg-LRTOYQK2.js.map} +0 -0
  702. /package/dist/{block.tk.aicheck-RANOFGDZ.js.map → block.tk.aicheck-HDV7ZIUD.js.map} +0 -0
  703. /package/dist/{block.tk.ase-CBWJA3RN.js.map → block.tk.ase-JIDWKMYI.js.map} +0 -0
  704. /package/dist/{block.tk.bam-D7JBRNFQ.js.map → block.tk.bam-5X3OS5HB.js.map} +0 -0
  705. /package/dist/{block.tk.bedgraphdot-IEHNIGVI.js.map → block.tk.bedgraphdot-T7JX7YQL.js.map} +0 -0
  706. /package/dist/{block.tk.bigwig.ui-3SAXUJU4.js.map → block.tk.bigwig.ui-OSAYEBAE.js.map} +0 -0
  707. /package/dist/{block.tk.hicstraw-R5EHQFGM.js.map → block.tk.hicstraw-DEY3VQFK.js.map} +0 -0
  708. /package/dist/{block.tk.junction-JFCEXZZC.js.map → block.tk.junction-7UAFEZSJ.js.map} +0 -0
  709. /package/dist/{block.tk.junction.textmatrixui-4V7MV6TD.js.map → block.tk.junction.textmatrixui-27LHS33U.js.map} +0 -0
  710. /package/dist/{block.tk.ld-LP4DIHAJ.js.map → block.tk.ld-DF2PI7OO.js.map} +0 -0
  711. /package/dist/{block.tk.menu-FTVZU2HA.js.map → block.tk.menu-L2D5KBIV.js.map} +0 -0
  712. /package/dist/{block.tk.pgv-CRAMVKU4.js.map → block.tk.pgv-QO56SKBV.js.map} +0 -0
  713. /package/dist/{brainImaging-DXLK5XZ6.js.map → brainImaging-NIPQWFWO.js.map} +0 -0
  714. /package/dist/{brainRegions-AMSXQT3T.js.map → brainRegions-ZNZ2WHSU.js.map} +0 -0
  715. /package/dist/{bubbleHeatmap-SXBARILL.js.map → bubbleHeatmap-ERWNEKZB.js.map} +0 -0
  716. /package/dist/{chunk-2OJ577BB.js.map → chunk-2GYWFQML.js.map} +0 -0
  717. /package/dist/{chunk-QZLP27O6.js.map → chunk-2HYJ4GDH.js.map} +0 -0
  718. /package/dist/{chunk-MYZJUT2H.js.map → chunk-2MG6XE6R.js.map} +0 -0
  719. /package/dist/{chunk-DI5ULDWN.js.map → chunk-33K5PA52.js.map} +0 -0
  720. /package/dist/{chunk-433DTQ6C.js.map → chunk-37XDBPOP.js.map} +0 -0
  721. /package/dist/{chunk-WYSEBR5S.js.map → chunk-3EWB3246.js.map} +0 -0
  722. /package/dist/{chunk-KOLVLBMI.js.map → chunk-3RSKOPIY.js.map} +0 -0
  723. /package/dist/{chunk-CUXOQIUA.js.map → chunk-4DPVT4NE.js.map} +0 -0
  724. /package/dist/{chunk-47EYZQA7.js.map → chunk-4IH7DORZ.js.map} +0 -0
  725. /package/dist/{chunk-QAVZUWY3.js.map → chunk-4QNBFIIR.js.map} +0 -0
  726. /package/dist/{chunk-BSOB3BVG.js.map → chunk-4STKL6SR.js.map} +0 -0
  727. /package/dist/{chunk-P3NKHTNT.js.map → chunk-4TZIVSL5.js.map} +0 -0
  728. /package/dist/{chunk-LQJMCE7G.js.map → chunk-5ABGFJSP.js.map} +0 -0
  729. /package/dist/{chunk-DD6KDZVR.js.map → chunk-5AZNP47R.js.map} +0 -0
  730. /package/dist/{chunk-NOCLG6IN.js.map → chunk-5RL2OHXX.js.map} +0 -0
  731. /package/dist/{chunk-WQEGWR63.js.map → chunk-6BB43SIB.js.map} +0 -0
  732. /package/dist/{chunk-2AHDWWQO.js.map → chunk-7OHRR2IE.js.map} +0 -0
  733. /package/dist/{chunk-NZCX4A7X.js.map → chunk-ASATD4T7.js.map} +0 -0
  734. /package/dist/{chunk-K7QY24X2.js.map → chunk-AZ47Q7BX.js.map} +0 -0
  735. /package/dist/{chunk-JF47NF5G.js.map → chunk-B5B3LZB3.js.map} +0 -0
  736. /package/dist/{chunk-JD2ECQ3Z.js.map → chunk-BHGISFCA.js.map} +0 -0
  737. /package/dist/{chunk-NVRLD4TF.js.map → chunk-BMBOZ64T.js.map} +0 -0
  738. /package/dist/{chunk-D5ZYSW45.js.map → chunk-BOZJHPJP.js.map} +0 -0
  739. /package/dist/{chunk-4YDERN37.js.map → chunk-CDD7LYJM.js.map} +0 -0
  740. /package/dist/{chunk-4M22UIJQ.js.map → chunk-CTQ3IUCA.js.map} +0 -0
  741. /package/dist/{chunk-PJSOYF5U.js.map → chunk-D7TID3HR.js.map} +0 -0
  742. /package/dist/{chunk-LFGIMCUD.js.map → chunk-E55LLYRX.js.map} +0 -0
  743. /package/dist/{chunk-XB6F5OUB.js.map → chunk-ESGXULRH.js.map} +0 -0
  744. /package/dist/{chunk-SJWAMUL5.js.map → chunk-EZ4LZ6ZT.js.map} +0 -0
  745. /package/dist/{chunk-QXPJLSAD.js.map → chunk-F3SJTVP5.js.map} +0 -0
  746. /package/dist/{chunk-JOA4KJTM.js.map → chunk-F5IXNJO7.js.map} +0 -0
  747. /package/dist/{chunk-KQ6EF3FG.js.map → chunk-FJYECRHW.js.map} +0 -0
  748. /package/dist/{chunk-MLYSQG3C.js.map → chunk-FPNRUQOU.js.map} +0 -0
  749. /package/dist/{chunk-Q555GFBW.js.map → chunk-G5S4R77D.js.map} +0 -0
  750. /package/dist/{chunk-DA6RR5IR.js.map → chunk-G764NXQN.js.map} +0 -0
  751. /package/dist/{chunk-QOAUM6UV.js.map → chunk-GAPI4MML.js.map} +0 -0
  752. /package/dist/{chunk-PK5HXJ3S.js.map → chunk-HLUZOZXJ.js.map} +0 -0
  753. /package/dist/{chunk-UN3O2MNB.js.map → chunk-HOKIK2FR.js.map} +0 -0
  754. /package/dist/{chunk-LBWKMNVU.js.map → chunk-KLGL6XZD.js.map} +0 -0
  755. /package/dist/{chunk-YGKVY5IU.js.map → chunk-L7IRWUKT.js.map} +0 -0
  756. /package/dist/{chunk-23AEAG37.js.map → chunk-LFCYMSVA.js.map} +0 -0
  757. /package/dist/{chunk-46CPDZSW.js.map → chunk-LX6G7HJJ.js.map} +0 -0
  758. /package/dist/{chunk-UYEJ5DEZ.js.map → chunk-M2G5R4WB.js.map} +0 -0
  759. /package/dist/{chunk-AC3RAKUI.js.map → chunk-M4TTGGT4.js.map} +0 -0
  760. /package/dist/{chunk-5ERYRSVV.js.map → chunk-M6EF3WVV.js.map} +0 -0
  761. /package/dist/{chunk-MNIBZTQE.js.map → chunk-M6KHT3MM.js.map} +0 -0
  762. /package/dist/{chunk-6W6UMGAV.js.map → chunk-MCZFHWIR.js.map} +0 -0
  763. /package/dist/{chunk-7YWPWCHD.js.map → chunk-MFQACKYU.js.map} +0 -0
  764. /package/dist/{chunk-LKB3DITY.js.map → chunk-MVGAGTM3.js.map} +0 -0
  765. /package/dist/{chunk-V2ET64EJ.js.map → chunk-NELOT3NJ.js.map} +0 -0
  766. /package/dist/{chunk-6Z4XHMZV.js.map → chunk-NRKMXULC.js.map} +0 -0
  767. /package/dist/{chunk-BKPDYW5T.js.map → chunk-NYRZNRG5.js.map} +0 -0
  768. /package/dist/{chunk-XVYSEXFV.js.map → chunk-ONPKE6DC.js.map} +0 -0
  769. /package/dist/{chunk-JT7HC65V.js.map → chunk-OXVLWQ6M.js.map} +0 -0
  770. /package/dist/{chunk-SENZWOCC.js.map → chunk-PFRWS4CR.js.map} +0 -0
  771. /package/dist/{chunk-UVWUP6N7.js.map → chunk-PJKQUXEN.js.map} +0 -0
  772. /package/dist/{chunk-U3CMLIGB.js.map → chunk-Q2L44HK3.js.map} +0 -0
  773. /package/dist/{chunk-7P4DUYAQ.js.map → chunk-QNHT74XC.js.map} +0 -0
  774. /package/dist/{chunk-DXM5IMGV.js.map → chunk-RKO6BL5N.js.map} +0 -0
  775. /package/dist/{chunk-CJJA6RVM.js.map → chunk-T25QNZHB.js.map} +0 -0
  776. /package/dist/{chunk-I62GOCNI.js.map → chunk-U7TBYVIQ.js.map} +0 -0
  777. /package/dist/{chunk-UF6ZP6UR.js.map → chunk-UGRQXBL4.js.map} +0 -0
  778. /package/dist/{chunk-PFOCEOVT.js.map → chunk-USFSHSCJ.js.map} +0 -0
  779. /package/dist/{chunk-IBYOP2FV.js.map → chunk-VJ6UFVGC.js.map} +0 -0
  780. /package/dist/{chunk-HCNF7EFT.js.map → chunk-W3WPPOXH.js.map} +0 -0
  781. /package/dist/{chunk-ZPXSPJV2.js.map → chunk-WFCSOTBO.js.map} +0 -0
  782. /package/dist/{chunk-QOEPKNVD.js.map → chunk-WHP4AKDM.js.map} +0 -0
  783. /package/dist/{chunk-OVHCUTQM.js.map → chunk-WZ2L57MB.js.map} +0 -0
  784. /package/dist/{chunk-7Z6E3NA5.js.map → chunk-XPY6AWXO.js.map} +0 -0
  785. /package/dist/{chunk-K6AW4GFM.js.map → chunk-Y4UAKFWC.js.map} +0 -0
  786. /package/dist/{chunk-SFIX7XVT.js.map → chunk-YQBS2ZCK.js.map} +0 -0
  787. /package/dist/{chunk-GFETCJ7S.js.map → chunk-ZTHM2TKP.js.map} +0 -0
  788. /package/dist/{condition-YCPNILTV.js.map → condition-2PASYSUC.js.map} +0 -0
  789. /package/dist/{controls-RW5MWSLN.js.map → controls-5IMJ6K5L.js.map} +0 -0
  790. /package/dist/{controls.config-MP3CSYR4.js.map → controls.config-P5PG2DHW.js.map} +0 -0
  791. /package/dist/{correlation-7AQRU4YR.js.map → correlation-U3EDLNHR.js.map} +0 -0
  792. /package/dist/{cuminc-WYLKIOXR.js.map → cuminc-2HUFEROK.js.map} +0 -0
  793. /package/dist/{cuminc.integration.spec-MSAWDLD7.js.map → cuminc.integration.spec-WFWAPTDA.js.map} +0 -0
  794. /package/dist/{customdata.inputui-YU4IQJOV.js.map → customdata.inputui-ZHWNEPFH.js.map} +0 -0
  795. /package/dist/{dataDownload-72DIPZ45.js.map → dataDownload-VBSJBKMP.js.map} +0 -0
  796. /package/dist/{dataDownload.integration.spec-HRLMWQN7.js.map → dataDownload.integration.spec-LUFSETOP.js.map} +0 -0
  797. /package/dist/{databrowser.ui-3PE25HK4.js.map → databrowser.ui-6H2KMSTJ.js.map} +0 -0
  798. /package/dist/{dictionary-Y3ICL4AE.js.map → dictionary-V37LXFIP.js.map} +0 -0
  799. /package/dist/{dnaMethylation-SVGDW64U.js.map → dnaMethylation-OIZMHMLK.js.map} +0 -0
  800. /package/dist/{dnaMethylation.integration.spec-B7GLAFZI.js.map → dnaMethylation.integration.spec-CWPTJ74H.js.map} +0 -0
  801. /package/dist/{dofetch-42KOXNPF.js.map → dofetch-IWPZQB5N.js.map} +0 -0
  802. /package/dist/{e2pca-CLFGEFJH.js.map → e2pca-7SLIAGYW.js.map} +0 -0
  803. /package/dist/{ep-PUHV2DMO.js.map → ep-7L6KF6K4.js.map} +0 -0
  804. /package/dist/{expclust.gdc.spec-N7YDJAOZ.js.map → expclust.gdc.spec-JT452Q3G.js.map} +0 -0
  805. /package/dist/{facet-JFFJJCNT.js.map → facet-CXOUU5AS.js.map} +0 -0
  806. /package/dist/{forms2-XZAWW3RN.js.map → forms2-VPNCLQOY.js.map} +0 -0
  807. /package/dist/{gb-SQJ5PWOH.js.map → gb-P4VRXRED.js.map} +0 -0
  808. /package/dist/{geneExpClustering-EG2BLMQX.js.map → geneExpClustering-FQTCKRJJ.js.map} +0 -0
  809. /package/dist/{geneExpression-QRK3LNMV.js.map → geneExpression-BHO5326K.js.map} +0 -0
  810. /package/dist/{geneExpression-J42BGP3B.js.map → geneExpression-ZMERB64E.js.map} +0 -0
  811. /package/dist/{geneExpression.unit.spec-X7HVIFZA.js.map → geneExpression.unit.spec-CNVHZWNG.js.map} +0 -0
  812. /package/dist/{geneORA-SVBPO66K.js.map → geneORA-FXVUCXGX.js.map} +0 -0
  813. /package/dist/{geneRanking-HNMMLZIX.js.map → geneRanking-SFK4UBKQ.js.map} +0 -0
  814. /package/dist/{geneVariant-RVQKNVQO.js.map → geneVariant-IYEHB4H7.js.map} +0 -0
  815. /package/dist/{geneVariant-SO5FEJUZ.js.map → geneVariant-LIRRLUFR.js.map} +0 -0
  816. /package/dist/{geneVariant.integration.spec-DOMX4GMP.js.map → geneVariant.integration.spec-Y2NPNTYX.js.map} +0 -0
  817. /package/dist/{genefusion.ui-QS7AG46F.js.map → genefusion.ui-L3HIJM3N.js.map} +0 -0
  818. /package/dist/{geneset-JKOX3VIW.js.map → geneset-A6VUFX63.js.map} +0 -0
  819. /package/dist/{genomeBrowser.spec-IRSTT2OX.js.map → genomeBrowser.spec-CB4HHHBN.js.map} +0 -0
  820. /package/dist/{grin2-VZLCISPM.js.map → grin2-FKBIMH5N.js.map} +0 -0
  821. /package/dist/{hierCluster-6AW23EB5.js.map → hierCluster-QFPRMHVA.js.map} +0 -0
  822. /package/dist/{hierCluster-REXTCODR.js.map → hierCluster-YWC3XYPV.js.map} +0 -0
  823. /package/dist/{hierCluster.config-3Z3R66XH.js.map → hierCluster.config-F7YYZNM3.js.map} +0 -0
  824. /package/dist/{hierCluster.integration.spec-XE47Q64Z.js.map → hierCluster.integration.spec-AF4L3YT6.js.map} +0 -0
  825. /package/dist/{hierCluster.interactivity-2YJYYKVK.js.map → hierCluster.interactivity-RPY74PK6.js.map} +0 -0
  826. /package/dist/{hierCluster.renderers-LE7W2AL6.js.map → hierCluster.renderers-LOKHZ3V2.js.map} +0 -0
  827. /package/dist/{imagePlot-WMZJJ5CJ.js.map → imagePlot-BBEXA754.js.map} +0 -0
  828. /package/dist/{importPlot-P35EGIJJ.js.map → importPlot-7QGANZGK.js.map} +0 -0
  829. /package/dist/{isoformExpression-3TFPEXB4.js.map → isoformExpression-4SLLCVFD.js.map} +0 -0
  830. /package/dist/{isoformExpression.unit.spec-SPQFK3EA.js.map → isoformExpression.unit.spec-GEL4JJ64.js.map} +0 -0
  831. /package/dist/{launch.adhoc-ZQSJBLMJ.js.map → launch.adhoc-LWLBQJS5.js.map} +0 -0
  832. /package/dist/{leftlabel.sample-SJRQ6LJ2.js.map → leftlabel.sample-RTEZOIH2.js.map} +0 -0
  833. /package/dist/{legacyDataset-TNIIJABK.js.map → legacyDataset-VLD7ZYWI.js.map} +0 -0
  834. /package/dist/{lollipop-RXM6UBZ7.js.map → lollipop-XKQK5QZU.js.map} +0 -0
  835. /package/dist/{maf-NWXJWBNF.js.map → maf-AZQPPWDO.js.map} +0 -0
  836. /package/dist/{maftimeline-D7UENAP5.js.map → maftimeline-7MSVYKQU.js.map} +0 -0
  837. /package/dist/{matrix-77LNADX2.js.map → matrix-BGLWC25D.js.map} +0 -0
  838. /package/dist/{matrix-YDOLKY6G.js.map → matrix-IQR5SRMK.js.map} +0 -0
  839. /package/dist/{matrix.cells-VEC5LEWV.js.map → matrix.cells-5C57NWOY.js.map} +0 -0
  840. /package/dist/{matrix.config-GTAAAUGQ.js.map → matrix.config-2DQXAN2E.js.map} +0 -0
  841. /package/dist/{matrix.data-T4GEX6ZH.js.map → matrix.data-ADCGF5H6.js.map} +0 -0
  842. /package/dist/{matrix.groups-7NWHHP5Q.js.map → matrix.groups-V4ITQ5F7.js.map} +0 -0
  843. /package/dist/{matrix.integration.spec-5GBTFRZA.js.map → matrix.integration.spec-IBNOO2WP.js.map} +0 -0
  844. /package/dist/{matrix.interactivity-ONT6WCRU.js.map → matrix.interactivity-JNELJFOV.js.map} +0 -0
  845. /package/dist/{matrix.layout-LDXHGOHF.js.map → matrix.layout-WBVIV6GR.js.map} +0 -0
  846. /package/dist/{matrix.legend-5MDW65HV.js.map → matrix.legend-YHOWPK77.js.map} +0 -0
  847. /package/dist/{matrix.renderers-OEPLQG3C.js.map → matrix.renderers-5BGVRR3M.js.map} +0 -0
  848. /package/dist/{matrix.serieses-4RX7TUQ7.js.map → matrix.serieses-2GZJOASZ.js.map} +0 -0
  849. /package/dist/{matrix.sort-UKMMECBZ.js.map → matrix.sort-WKIWPJKP.js.map} +0 -0
  850. /package/dist/{matrix.sort.unit.spec-VWOXPVRE.js.map → matrix.sort.unit.spec-L2E4D4AS.js.map} +0 -0
  851. /package/dist/{matrix.sorterUi-H64DDQIL.js.map → matrix.sorterUi-TEJWWJ64.js.map} +0 -0
  852. /package/dist/{matrix.sorterUi.unit.spec-DH4434FK.js.map → matrix.sorterUi.unit.spec-SHP7C4P7.js.map} +0 -0
  853. /package/dist/{mavb-ARUWOZES.js.map → mavb-4MXNYUEO.js.map} +0 -0
  854. /package/dist/{mds.fimo-ZEAE5BC3.js.map → mds.fimo-WHIJIBOI.js.map} +0 -0
  855. /package/dist/{mds.samplescatterplot-C5EBKBVF.js.map → mds.samplescatterplot-BRJ6NG2D.js.map} +0 -0
  856. /package/dist/{mds.survivalplot-RS7Z3J3Q.js.map → mds.survivalplot-OPCMB5PB.js.map} +0 -0
  857. /package/dist/{numericDictTermCluster-CSQOV4TM.js.map → numericDictTermCluster-7MIFOP2K.js.map} +0 -0
  858. /package/dist/{oncomatrix-5UVM3KUA.js.map → oncomatrix-BGG6BEUI.js.map} +0 -0
  859. /package/dist/{oncomatrix.spec-CU3EZCMO.js.map → oncomatrix.spec-LYQ4L4F3.js.map} +0 -0
  860. /package/dist/{plot.2dvaf-JD27DSDS.js.map → plot.2dvaf-6WVCP2ZI.js.map} +0 -0
  861. /package/dist/{plot.app-NMPMG3S2.js.map → plot.app-MLBP6WFP.js.map} +0 -0
  862. /package/dist/{plot.barplot-T4LPKFXW.js.map → plot.barplot-JEPRZSCU.js.map} +0 -0
  863. /package/dist/{plot.boxplot-22ETOHNI.js.map → plot.boxplot-GNFW42VM.js.map} +0 -0
  864. /package/dist/{plot.brainImaging-Q7S7KSHW.js.map → plot.brainImaging-5ACNSD45.js.map} +0 -0
  865. /package/dist/{plot.disco-NIPBER5N.js.map → plot.disco-Q2V2KKIH.js.map} +0 -0
  866. /package/dist/{plot.dzi-DAX7GUTF.js.map → plot.dzi-KVT6S7K7.js.map} +0 -0
  867. /package/dist/{plot.ssgq-7J6S35RW.js.map → plot.ssgq-4N3KFJQ2.js.map} +0 -0
  868. /package/dist/{plot.vaf2cov-7EWFTD72.js.map → plot.vaf2cov-ITRG5U43.js.map} +0 -0
  869. /package/dist/{plot.wsi-E45KZGKD.js.map → plot.wsi-26YZNU4V.js.map} +0 -0
  870. /package/dist/{polar2-LPT2XMD2.js.map → polar2-J7GVUK4X.js.map} +0 -0
  871. /package/dist/{profileForms-EYN2KLSY.js.map → profileForms-VXV2JLXU.js.map} +0 -0
  872. /package/dist/{profilePlot-I7VQM3CH.js.map → profilePlot-ZZYZK4SY.js.map} +0 -0
  873. /package/dist/{proteinView-JP5TF3ZK.js.map → proteinView-7KN532D3.js.map} +0 -0
  874. /package/dist/{qualitative-7X3ECW7Q.js.map → qualitative-MLRVLIAU.js.map} +0 -0
  875. /package/dist/{radar2-V3FYBFAG.js.map → radar2-WM2ZBOH3.js.map} +0 -0
  876. /package/dist/{radarFacility2-O6GQLBBN.js.map → radarFacility2-3SBR2JJ3.js.map} +0 -0
  877. /package/dist/{regression-CLG6NYVF.js.map → regression-WMRPQJW2.js.map} +0 -0
  878. /package/dist/{regression.inputs-RLOBIRJH.js.map → regression.inputs-VWZKSYNY.js.map} +0 -0
  879. /package/dist/{regression.inputs.term-ZKIP6KDO.js.map → regression.inputs.term-OWE6GWHM.js.map} +0 -0
  880. /package/dist/{regression.inputs.values.table-2VD4AO5T.js.map → regression.inputs.values.table-4INNZQI2.js.map} +0 -0
  881. /package/dist/{regression.integration.spec-JEIMN7MS.js.map → regression.integration.spec-XKQ2JOOT.js.map} +0 -0
  882. /package/dist/{regression.results-FT6VSWGR.js.map → regression.results-VZBYMBYC.js.map} +0 -0
  883. /package/dist/{regression.spec-V4S52JQM.js.map → regression.spec-DU3UTDCJ.js.map} +0 -0
  884. /package/dist/{sampleView-JIGZ7GTP.js.map → render-N5FOF247.js.map} +0 -0
  885. /package/dist/{report-UPQFSI4D.js.map → report-DW3OHB67.js.map} +0 -0
  886. /package/dist/{sampleScatter.spec-QSRF3STG.js.map → sampleScatter.spec-REFSK2V4.js.map} +0 -0
  887. /package/dist/{singleCellCellType-FJ53DRXD.js.map → sampleView-ICOT2R6O.js.map} +0 -0
  888. /package/dist/{samplelst-VJMYHVXI.js.map → samplelst-TJEVASYG.js.map} +0 -0
  889. /package/dist/{samplematrix-LO4QB37V.js.map → samplematrix-6DAWCXQ3.js.map} +0 -0
  890. /package/dist/{sc-4VZBGFZP.js.map → sc-53LNOB7N.js.map} +0 -0
  891. /package/dist/{scatter-LQECXZLB.js.map → scatter-DKYSS4DL.js.map} +0 -0
  892. /package/dist/{selectGenomeWithTklst-IJTCLRIN.js.map → selectGenomeWithTklst-WTX66TV3.js.map} +0 -0
  893. /package/dist/{singleCellGeneExpression-RZE5UVL4.js.map → singleCellCellType-D2CN2BHQ.js.map} +0 -0
  894. /package/dist/{singleCellCellType.unit.spec-VOE4KY6L.js.map → singleCellCellType.unit.spec-LADUCI4R.js.map} +0 -0
  895. /package/dist/{singleCellPlot-Q5UNIW3M.js.map → singleCellGeneExpression-YR2ZT34W.js.map} +0 -0
  896. /package/dist/{singleCellGeneExpression.unit.spec-2DASF7PD.js.map → singleCellGeneExpression.unit.spec-BM63M432.js.map} +0 -0
  897. /package/dist/{snp-S4O7SVDD.js.map → singleCellPlot-3ICIOILE.js.map} +0 -0
  898. /package/dist/{singlecell-TX5AQ4WM.js.map → singlecell-6ZUFA3BQ.js.map} +0 -0
  899. /package/dist/{singlecell-N7F5KVIB.js.map → singlecell-KX7W4U57.js.map} +0 -0
  900. /package/dist/{ssGSEA-BH53XGEZ.js.map → snp-VIURB7L3.js.map} +0 -0
  901. /package/dist/{snp.unit.spec-WSQMZSTE.js.map → snp.unit.spec-ACZNZUNS.js.map} +0 -0
  902. /package/dist/{snplocus-Y2R5C4ZP.js.map → snplocus-3LW4ZUZR.js.map} +0 -0
  903. /package/dist/{spliceevent.a53ss.diagram-FGRQR73W.js.map → spliceevent.a53ss.diagram-AKTZGWNM.js.map} +0 -0
  904. /package/dist/{spliceevent.noeventdiagram-G2CMYYE7.js.map → spliceevent.noeventdiagram-YTXWWNTJ.js.map} +0 -0
  905. /package/dist/{summarizeMutationDiagnosis-EUZXCSZP.js.map → ssGSEA-THW4WFMI.js.map} +0 -0
  906. /package/dist/{ssGSEA.unit.spec-BYIVB7FZ.js.map → ssGSEA.unit.spec-HTRGQI2K.js.map} +0 -0
  907. /package/dist/{summarizeCnvGeneexp-IZNOX4E7.js.map → summarizeCnvGeneexp-RFYC3H2Z.js.map} +0 -0
  908. /package/dist/{summarizeGeneexpSurvival-DJZ2R24E.js.map → summarizeGeneexpSurvival-DQBZUTQ6.js.map} +0 -0
  909. /package/dist/{summarizeMutationCnv-CO2TVWOI.js.map → summarizeMutationCnv-7AYEMHAI.js.map} +0 -0
  910. /package/dist/{summary-JHZCDE35.js.map → summarizeMutationDiagnosis-AKFJDSAF.js.map} +0 -0
  911. /package/dist/{summarizeMutationSurvival-CXFT3HWL.js.map → summarizeMutationSurvival-QJHZRQBZ.js.map} +0 -0
  912. /package/dist/{survival-DLLVUG2P.js.map → summary-A5P7AYK4.js.map} +0 -0
  913. /package/dist/{summary.integration.spec-WBEYSDCA.js.map → summary.integration.spec-HQISXGNL.js.map} +0 -0
  914. /package/dist/{summaryInput-JVH3R54R.js.map → summaryInput-HP675QOQ.js.map} +0 -0
  915. /package/dist/{sunburst-CTJTXHSA.js.map → sunburst-65LSYRXX.js.map} +0 -0
  916. /package/dist/{termCollection-JOLQJYJ3.js.map → survival-QNEI6YVK.js.map} +0 -0
  917. /package/dist/{survival-XFVYNI6S.js.map → survival-UI74VXSM.js.map} +0 -0
  918. /package/dist/{survival.integration.spec-KVXHHAA3.js.map → survival.integration.spec-X5N3JQXS.js.map} +0 -0
  919. /package/dist/{svgraph-ACEBMDIX.js.map → svgraph-PSX2NER3.js.map} +0 -0
  920. /package/dist/{svmr-IQEDSZ2C.js.map → svmr-QDQ33EFX.js.map} +0 -0
  921. /package/dist/{table-2IF6UGHR.js.map → table-LWAI27UO.js.map} +0 -0
  922. /package/dist/{termCollection-PSXFFR32.js.map → termCollection-3JHR74FG.js.map} +0 -0
  923. /package/dist/{tk-AAIHEQO6.js.map → termCollection-CDF5LYUG.js.map} +0 -0
  924. /package/dist/{termCollection.unit.spec-4SOZP4FY.js.map → termCollection.unit.spec-HOJKYWHF.js.map} +0 -0
  925. /package/dist/{tvs.dt-FSA7KPSQ.js.map → tk-OEQFO73V.js.map} +0 -0
  926. /package/dist/{tp.ui-6STLQEXX.js.map → tp.ui-SHNERDGC.js.map} +0 -0
  927. /package/dist/{tvs.numeric-KYAU5OV3.js.map → tvs.dt-CZDC4TSR.js.map} +0 -0
  928. /package/dist/{tvs.dtcnv.categorical-FSPGH7DP.js.map → tvs.dtcnv.categorical-OPBDHZGB.js.map} +0 -0
  929. /package/dist/{tvs.dtcnv.continuous-T4ZMSDB4.js.map → tvs.dtcnv.continuous-AR6P4EP3.js.map} +0 -0
  930. /package/dist/{tvs.dtfusion-UL3YENUM.js.map → tvs.dtfusion-2YQ7N6FQ.js.map} +0 -0
  931. /package/dist/{tvs.dtitd-XJOSZUWG.js.map → tvs.dtitd-ATCHW735.js.map} +0 -0
  932. /package/dist/{tvs.dtsnvindel-5TPUT5RJ.js.map → tvs.dtsnvindel-WHHWAATJ.js.map} +0 -0
  933. /package/dist/{tvs.dtsv-OTNHXYOJ.js.map → tvs.dtsv-3UMCW65O.js.map} +0 -0
  934. /package/dist/{violin-HEFFKPL5.js.map → tvs.numeric-TOEPASWN.js.map} +0 -0
  935. /package/dist/{tvs.samplelst-FQKTAQZF.js.map → tvs.samplelst-M7XKXRTZ.js.map} +0 -0
  936. /package/dist/{tvs.termCollection-ZAPCUMUW.js.map → tvs.termCollection-WT4WZMYR.js.map} +0 -0
  937. /package/dist/{violin.interactivity-XNYJSK53.js.map → violin-2YGXTBDS.js.map} +0 -0
  938. /package/dist/{violin.integration.spec-774N4G5A.js.map → violin.integration.spec-YWNHVAGS.js.map} +0 -0
  939. /package/dist/{violin.renderer-R74VSGRC.js.map → violin.interactivity-J6BE2UQL.js.map} +0 -0
  940. /package/dist/{vocabulary-OHMC6NWL.js.map → violin.renderer-3GRUWP2U.js.map} +0 -0
@@ -0,0 +1,3392 @@
1
+ import {
2
+ InvalidDataUI,
3
+ configUiInit,
4
+ fillbar,
5
+ getMaxLabelWidth,
6
+ getNormalRoot,
7
+ renderTable,
8
+ svgLegend,
9
+ table2col
10
+ } from "./chunk-5VOPABBA.js";
11
+ import "./chunk-HJ6L54YS.js";
12
+ import "./chunk-LSEFWW72.js";
13
+ import "./chunk-Z5U6HOE4.js";
14
+ import {
15
+ Menu
16
+ } from "./chunk-HYOEWQ5P.js";
17
+ import "./chunk-HBW42TDT.js";
18
+ import "./chunk-FN5XPUPH.js";
19
+ import "./chunk-5ABGFJSP.js";
20
+ import {
21
+ topBarInit
22
+ } from "./chunk-IIT367QZ.js";
23
+ import "./chunk-RZGEKL77.js";
24
+ import "./chunk-XPY6AWXO.js";
25
+ import "./chunk-NELOT3NJ.js";
26
+ import {
27
+ dofetch3
28
+ } from "./chunk-M6EF3WVV.js";
29
+ import "./chunk-7IYJZZQI.js";
30
+ import {
31
+ copyMerge,
32
+ getCompInit,
33
+ multiInit
34
+ } from "./chunk-M3J4MINX.js";
35
+ import "./chunk-PF4DSFDR.js";
36
+ import "./chunk-LFCYMSVA.js";
37
+ import "./chunk-I6WR4CG7.js";
38
+ import {
39
+ bplen,
40
+ dtcnv,
41
+ dtfusionrna,
42
+ dtitd,
43
+ dtloh,
44
+ dtsnvindel,
45
+ dtsv,
46
+ mclass,
47
+ mclassitd
48
+ } from "./chunk-2X6W4E3W.js";
49
+ import "./chunk-NYRZNRG5.js";
50
+ import "./chunk-JNITUVXP.js";
51
+ import {
52
+ arc_default,
53
+ line_default,
54
+ pie_default,
55
+ ribbon_default
56
+ } from "./chunk-3XVVN66M.js";
57
+ import "./chunk-LOZEKOES.js";
58
+ import "./chunk-VQZ2Z5YU.js";
59
+ import {
60
+ linear,
61
+ ticks
62
+ } from "./chunk-NSTL4MY2.js";
63
+ import "./chunk-TLT4YIG3.js";
64
+ import "./chunk-KYBIQBXE.js";
65
+ import {
66
+ pointer_default,
67
+ select_default
68
+ } from "./chunk-I6Y4O3RR.js";
69
+ import "./chunk-OMR2DT66.js";
70
+ import "./chunk-DQC5FFGV.js";
71
+ import "./chunk-HFNDKYVF.js";
72
+
73
+ // plots/disco/arc/FullArcRenderer.ts
74
+ var FullArcRenderer = class {
75
+ constructor(radius, width, color) {
76
+ this.radius = radius;
77
+ this.width = width;
78
+ this.color = color;
79
+ }
80
+ render(holder) {
81
+ const donutGenerator = arc_default();
82
+ const arc = {
83
+ startAngle: 0,
84
+ endAngle: Math.PI * 2,
85
+ innerRadius: this.radius,
86
+ outerRadius: this.radius + this.width,
87
+ color: this.color,
88
+ text: "No label"
89
+ };
90
+ const array = [];
91
+ array.push(arc);
92
+ const donutArc = holder.append("g");
93
+ donutArc.selectAll("path").data(array).enter().append("path").attr("d", (d) => donutGenerator(d)).attr("fill", (d) => d.color);
94
+ }
95
+ };
96
+
97
+ // plots/disco/menu/MenuProvider.ts
98
+ var MenuProvider = class {
99
+ static create() {
100
+ const menu = new Menu({ padding: 5 });
101
+ menu.d.style("border", "1px solid #FFF").style("position", "absolute").style("z-index", 1001);
102
+ return menu;
103
+ }
104
+ };
105
+
106
+ // plots/disco/fusion/FusionColorProvider.ts
107
+ var FusionColorProvider = class {
108
+ static getColor(chrA, chrB) {
109
+ if (chrA != chrB) {
110
+ return "#6A3D9A" /* Interchromosomal */.valueOf();
111
+ } else {
112
+ return "#1B9E77" /* Intrachromosomal */.valueOf();
113
+ }
114
+ }
115
+ };
116
+
117
+ // plots/disco/fusion/FusionRenderer.ts
118
+ var FusionRenderer = class {
119
+ constructor(genome) {
120
+ this.genome = genome;
121
+ }
122
+ render(holder, fusions, opacity = 1) {
123
+ let radius = 0;
124
+ const fusionsWithTarget = fusions.filter((f) => f.target);
125
+ if (fusionsWithTarget.length > 0) {
126
+ radius = fusionsWithTarget[0].target.radius;
127
+ const fullArcRenderer = new FullArcRenderer(radius, 2, "#6464641A");
128
+ fullArcRenderer.render(holder);
129
+ } else return;
130
+ const ribbon = ribbon_default().radius(radius);
131
+ const ribbons = holder.selectAll(".chord").data(fusions);
132
+ const menu = MenuProvider.create();
133
+ const createTooltip = this.createTooltip.bind(this);
134
+ const genome = this.genome;
135
+ ribbons.enter().append("path").attr("class", "chord").attr("d", ribbon).attr("fill", (fusion) => {
136
+ return FusionColorProvider.getColor(
137
+ fusion.source.positionInChromosome.chromosome,
138
+ fusion.target.positionInChromosome.chromosome
139
+ );
140
+ }).style("opacity", opacity).each(function(d) {
141
+ const path = select_default(this);
142
+ const tip = MenuProvider.create();
143
+ path.on("click", async function(event) {
144
+ tip.clear().show(event.x, event.y);
145
+ const div = tip.d.append("div");
146
+ await makeSvgraph(d, div, genome);
147
+ });
148
+ }).on("mouseover", async function(mouseEvent, fusion) {
149
+ const table = table2col({ holder: menu.d });
150
+ createTooltip(table, fusion);
151
+ menu.show(mouseEvent.x, mouseEvent.y);
152
+ }).on("mouseout", () => {
153
+ menu.clear();
154
+ menu.hide();
155
+ });
156
+ }
157
+ createTooltip(table, fusion) {
158
+ {
159
+ const [td1, td2] = table.addRow();
160
+ td1.text("Data type");
161
+ td2.append("span").style("margin-left", "5px").text("Fusion transcript");
162
+ }
163
+ {
164
+ const positionInChromosomeSource = fusion.source.positionInChromosome;
165
+ const positionInChromosomeTarget = fusion.target.positionInChromosome;
166
+ const [td1, td2] = table.addRow();
167
+ td1.text("Position");
168
+ td2.append("span").style("margin-left", "5px").text(
169
+ ` ${fusion.source.gene || ""} ${positionInChromosomeSource.chromosome}:${positionInChromosomeSource.position} ${fusion.source.strand === "+" ? "forward" : "reverse"} > ${fusion.target.gene || ""} ${positionInChromosomeTarget.chromosome}:${positionInChromosomeTarget.position} ${fusion.target.strand === "+" ? "forward" : "reverse"} `
170
+ );
171
+ }
172
+ }
173
+ };
174
+ async function makeSvgraph(fusion, div, genome) {
175
+ const wait = div.append("div").text("Loading...");
176
+ const svpair = {
177
+ a: {
178
+ chr: fusion.source.positionInChromosome.chromosome,
179
+ position: fusion.source.positionInChromosome.position,
180
+ strand: fusion.source.strand
181
+ },
182
+ b: {
183
+ chr: fusion.target.positionInChromosome.chromosome,
184
+ position: fusion.target.positionInChromosome.position,
185
+ strand: fusion.target.strand
186
+ }
187
+ };
188
+ await getGm(svpair.a, genome.name, fusion.source.gene);
189
+ await getGm(svpair.b, genome.name, fusion.target.gene);
190
+ wait.remove();
191
+ const _ = await import("./svgraph-PSX2NER3.js");
192
+ _.default({
193
+ pairlst: [svpair],
194
+ genome,
195
+ holder: div
196
+ });
197
+ }
198
+ async function getGm(p, genome, name) {
199
+ const d = await dofetch3("isoformbycoord", {
200
+ body: { genome, chr: p.chr, pos: p.position }
201
+ });
202
+ if (d.error) throw d.error;
203
+ const u = d.lst.find((i) => i.isdefault && name === i.name) || d.lst[0];
204
+ if (u) {
205
+ p.name = u.name;
206
+ p.gm = { isoform: u.isoform };
207
+ }
208
+ }
209
+
210
+ // plots/disco/DiscoRenderer.ts
211
+ var DiscoRenderer = class {
212
+ constructor(renders, legendRenderer, genome) {
213
+ this.renders = renders;
214
+ this.legendRenderer = legendRenderer;
215
+ this.fusionRenderer = new FusionRenderer(genome);
216
+ }
217
+ render(holder, viewModel, onCnvSourceSelect) {
218
+ const svgDiv = holder.append("div").style("display", "inline-block").style("font-family", "Arial");
219
+ const svg = svgDiv.append("svg").attr("id", "sjpp_disco_plot").attr("data-testid", "sjpp_disco_plot").attr("width", viewModel.width).attr("height", viewModel.height + viewModel.legendHeight);
220
+ const mainG = svg.append("g").attr("class", "mainG").attr(
221
+ "transform",
222
+ `translate(${viewModel.settings.rings.labelLinesInnerRadius + viewModel.settings.rings.labelsToLinesDistance + 100},${viewModel.height / 2})`
223
+ );
224
+ for (const [ringType, renderer] of this.renders) {
225
+ const elements = viewModel.getElements(ringType);
226
+ const collisions = viewModel.getCollisions(ringType);
227
+ renderer.render(mainG, elements, collisions);
228
+ }
229
+ this.fusionRenderer.render(mainG, viewModel.fusions, viewModel.settings.Disco.fusionOpacity);
230
+ if (viewModel.settings.Disco.centerText) {
231
+ const chrRingBbox = mainG.select('[data-testid="sjpp_chromosomes_arc_group"]').node().getBBox();
232
+ const text = viewModel.settings.Disco.centerText.length > 20 ? viewModel.settings.Disco.centerText.slice(0, 20) + "..." : viewModel.settings.Disco.centerText;
233
+ const textElem = mainG.append("text").attr("class", "sjpp-disco-center-text").text(text);
234
+ const textBbox = textElem.node().getBBox();
235
+ textElem.attr("transform", `translate(${chrRingBbox.x + chrRingBbox.width / 2 - textBbox.width / 2},0)`);
236
+ }
237
+ this.legendRenderer.render(
238
+ mainG,
239
+ viewModel.legend,
240
+ -1 * (viewModel.settings.rings.labelLinesInnerRadius + viewModel.settings.rings.labelsToLinesDistance + 75),
241
+ viewModel.width,
242
+ viewModel.height / 2,
243
+ viewModel,
244
+ onCnvSourceSelect
245
+ );
246
+ }
247
+ };
248
+
249
+ // plots/disco/interactions/DiscoInteractions.ts
250
+ var DiscoInteractions = class {
251
+ constructor(discoApp) {
252
+ this.discoApp = discoApp;
253
+ this.downloadClickListener = (svg) => {
254
+ const downloadImgName = this.discoApp.state.settings.downloadImgName || "disco.plot";
255
+ const a = document.createElement("a");
256
+ document.body.appendChild(a);
257
+ a.addEventListener(
258
+ "click",
259
+ () => {
260
+ const serializer = new XMLSerializer();
261
+ const svg_blob = new Blob([serializer.serializeToString(svg)], {
262
+ type: "image/svg+xml"
263
+ });
264
+ a.download = downloadImgName + ".svg";
265
+ a.href = URL.createObjectURL(svg_blob);
266
+ document.body.removeChild(a);
267
+ },
268
+ false
269
+ );
270
+ a.click();
271
+ };
272
+ this.geneClickListener = async (gene, mnames) => {
273
+ const { filter, filter0 } = this.discoApp.app.getState().termfilter;
274
+ const arg = {
275
+ holder: this.discoApp.app.opts.holder,
276
+ genome: this.discoApp.app.opts.state.args.genome,
277
+ nobox: true,
278
+ query: gene,
279
+ tklst: [
280
+ {
281
+ type: "mds3",
282
+ dslabel: this.discoApp.app.opts.state.vocab.dslabel,
283
+ hlaachange: mnames.join(","),
284
+ filter0,
285
+ filterObj: getNormalRoot(filter)
286
+ // must not pass filter as frozen. pass unfrozen, normalized copy so mds3 code will work
287
+ }
288
+ ]
289
+ };
290
+ const _ = await import("./block.init-X7Y2EEVR.js");
291
+ await _.default(arg);
292
+ };
293
+ this.colorScaleNumericInputsCallback = async (obj) => {
294
+ const callAppDispatch = (settings) => {
295
+ this.discoApp.app.dispatch({
296
+ type: "plot_edit",
297
+ id: this.discoApp.id,
298
+ config: { settings: { Disco: Object.assign({ cnvCutoffMode: obj.cutoffMode }, settings) } }
299
+ });
300
+ };
301
+ if (obj.cutoffMode == "auto") {
302
+ if (obj.min == null || obj.max == null)
303
+ throw new Error('Color scale must return min and max if cutoffMode "auto"');
304
+ callAppDispatch({
305
+ cnvCapping: this.discoApp.state.settings.cnv.capping,
306
+ cnvPercentile: this.discoApp.state.settings.cnv.percentile
307
+ });
308
+ } else if (obj.cutoffMode == "fixed") {
309
+ if (obj.min == null || obj.max == null)
310
+ throw new Error('Color scale must return min and max if cutoffMode "fixed"');
311
+ const diffValue = obj.max !== this.discoApp.state.settings.cnv.capping ? obj.max : Math.abs(obj.min);
312
+ callAppDispatch({
313
+ cnvCapping: diffValue
314
+ });
315
+ } else if (obj.cutoffMode == "percentile") callAppDispatch({ cnvPercentile: obj.percentile });
316
+ else throw new Error("Unknown cutoff mode returned from dom/ColorScale");
317
+ };
318
+ this.onMutationWaterfallColorChange = (color) => {
319
+ this.discoApp.app.dispatch({
320
+ type: "plot_edit",
321
+ id: this.discoApp.id,
322
+ config: { settings: { Disco: { mutationWaterfallColor: color } } }
323
+ });
324
+ };
325
+ }
326
+ };
327
+
328
+ // plots/disco/chromosome/Reference.ts
329
+ var Reference = class {
330
+ /**
331
+ * Creates a Reference object that contains information about chromosomes.
332
+ * @param settings State settings
333
+ * @param chromosomes Chromosome order. This function formats into an obj with `chr` removed.
334
+ * @param chromosomeOverride Obj of chromsome keys and sizes. Filtered to remove hidden chromosomes in settings.
335
+ */
336
+ constructor(settings, chromosomes, chromosomeOverride) {
337
+ this.chromosomes = [];
338
+ this.chromosomesOrder = [];
339
+ this.keysArray = [];
340
+ this.totalSizeArray = [];
341
+ this.chrSizesArray = [];
342
+ const chrSizes = chromosomeOverride || chromosomes;
343
+ this.settings = settings;
344
+ this.chromosomesOrder = [];
345
+ let totalSize = 0;
346
+ this.totalPadAngle = Object.keys(chrSizes).length * this.settings.padAngle;
347
+ this.totalChromosomesAngle = 2 * Math.PI - this.totalPadAngle;
348
+ for (const chr in chrSizes) {
349
+ const key = chr.slice(0, 3) === "chr" ? chr.slice(3) : chr;
350
+ this.chromosomesOrder.push(chr);
351
+ this.keysArray.push(key);
352
+ this.totalSizeArray.push(totalSize);
353
+ this.chrSizesArray.push(chrSizes[chr]);
354
+ totalSize += chrSizes[chr];
355
+ }
356
+ this.totalSize = totalSize;
357
+ let lastAngle = 0;
358
+ for (let i = 0; i < this.keysArray.length; i++) {
359
+ const chromosomeAngle = this.totalChromosomesAngle * (this.chrSizesArray[i] / totalSize);
360
+ const startAngle = i == 0 ? this.settings.padAngle / 2 : lastAngle + this.settings.padAngle;
361
+ const endAngle = i == 0 ? this.settings.padAngle / 2 + chromosomeAngle : lastAngle + this.settings.padAngle + chromosomeAngle;
362
+ const chromosome = {
363
+ start: this.totalSizeArray[i],
364
+ size: this.chrSizesArray[i],
365
+ factor: 1,
366
+ startAngle,
367
+ endAngle,
368
+ angle: (startAngle + endAngle) / 2,
369
+ innerRadius: this.settings.rings.chromosomeInnerRadius,
370
+ outerRadius: this.settings.rings.chromosomeInnerRadius + this.settings.rings.chromosomeWidth,
371
+ color: "#AAA",
372
+ text: this.keysArray[i]
373
+ };
374
+ this.chromosomes.push(chromosome);
375
+ if (chromosome.endAngle != null) {
376
+ lastAngle = chromosome.endAngle;
377
+ }
378
+ }
379
+ }
380
+ };
381
+
382
+ // plots/disco/data/DataObjectMapper.ts
383
+ var DataObjectMapper = class {
384
+ constructor(sampleName, prioritizedGenes) {
385
+ this.sampleName = sampleName;
386
+ this.prioritizedGenes = prioritizedGenes;
387
+ }
388
+ map(dObject) {
389
+ return {
390
+ dt: dObject.dt,
391
+ mname: dObject.mname,
392
+ mClass: dObject.class,
393
+ gene: dObject.gene,
394
+ chr: dObject.chr,
395
+ ref: dObject.ref,
396
+ alt: dObject.alt,
397
+ vafs: dObject.vafs,
398
+ position: dObject.pos ? dObject.pos : dObject.position,
399
+ poschr: dObject.poschr,
400
+ posbins: dObject.posbins,
401
+ poslabel: dObject.poslabel,
402
+ sampleName: this.sampleName,
403
+ ssm_id: dObject.ssm_id,
404
+ start: dObject.start,
405
+ stop: dObject.stop,
406
+ value: dObject.value,
407
+ segmean: dObject.segmean,
408
+ isPrioritized: this.prioritizedGenes.some((cancerGene) => cancerGene == dObject.gene),
409
+ chrA: dObject.chrA,
410
+ chrB: dObject.chrB,
411
+ geneA: dObject.geneA,
412
+ geneB: dObject.geneB,
413
+ posA: dObject.posA,
414
+ posB: dObject.posB,
415
+ strandA: dObject.strandA,
416
+ strandB: dObject.strandB
417
+ };
418
+ }
419
+ };
420
+
421
+ // plots/disco/data/PercentileMapper.ts
422
+ var PercentileMapper = class {
423
+ map(data, percentile) {
424
+ return this.calculatePercentileForPositivesAndNegatives(data, percentile);
425
+ }
426
+ calculatePercentileForPositivesAndNegatives(data, percentile) {
427
+ const positives = data.filter((x) => x > 0);
428
+ const negatives = data.filter((x) => x < 0).map((x) => -1 * x);
429
+ let positive = NaN;
430
+ let negative = NaN;
431
+ if (positives.length > 0) {
432
+ positive = this.calculatePercentile(positives, percentile);
433
+ }
434
+ if (negatives.length > 0) {
435
+ negative = -1 * this.calculatePercentile(negatives, percentile);
436
+ }
437
+ return { positive, negative };
438
+ }
439
+ calculatePercentile(data, percentile) {
440
+ if (data.length === 0) {
441
+ throw new Error("Array must contain at least one element.");
442
+ }
443
+ const sortedValues = data.sort((a, b) => a - b);
444
+ const index = percentile / 100 * (sortedValues.length - 1);
445
+ const lowerIndex = Math.floor(index);
446
+ const upperIndex = Math.ceil(index);
447
+ const fraction = index - lowerIndex;
448
+ if (lowerIndex === upperIndex) {
449
+ return sortedValues[lowerIndex];
450
+ }
451
+ return sortedValues[lowerIndex] + fraction * (sortedValues[upperIndex] - sortedValues[lowerIndex]);
452
+ }
453
+ };
454
+
455
+ // plots/disco/snv/vafTooltip.ts
456
+ function getIntegerCount(v) {
457
+ if (Number.isInteger(v)) return v;
458
+ if (typeof v == "string" && /^-?\d+$/.test(v)) {
459
+ const n = Number(v);
460
+ if (Number.isInteger(n)) return n;
461
+ }
462
+ return null;
463
+ }
464
+ function getReadCounts(refCountValue, altCountValue, totalCountValue) {
465
+ const altCount = getIntegerCount(altCountValue);
466
+ if (altCount == null || altCount < 0) return null;
467
+ const totalCount = getIntegerCount(totalCountValue);
468
+ if (totalCount != null) {
469
+ if (totalCount <= 0 || totalCount < altCount) return null;
470
+ return { altCount, refCount: totalCount - altCount, totalCount };
471
+ }
472
+ const refCount = getIntegerCount(refCountValue);
473
+ if (refCount == null || refCount < 0 || refCount + altCount <= 0) return null;
474
+ return { altCount, refCount, totalCount: refCount + altCount };
475
+ }
476
+ function hasValidReadCounts(refCountValue, altCountValue, totalCountValue) {
477
+ return getReadCounts(refCountValue, altCountValue, totalCountValue) != null;
478
+ }
479
+ function getVafEntries(vafs) {
480
+ const entries = [];
481
+ if (Array.isArray(vafs)) {
482
+ for (const vaf of vafs) {
483
+ const label = vaf?.id || vaf?.name;
484
+ const refCount = vaf?.refCount;
485
+ const totalCount = vaf?.totalCount;
486
+ const altCount = vaf?.altCount;
487
+ if (!label || altCount == null || refCount == null && totalCount == null) continue;
488
+ const entry = { label, altCount };
489
+ if (refCount != null) entry.refCount = refCount;
490
+ if (totalCount != null) entry.totalCount = totalCount;
491
+ entries.push(entry);
492
+ }
493
+ }
494
+ return entries;
495
+ }
496
+ function getNumericFraction(v) {
497
+ if (typeof v != "number" && typeof v != "string") return null;
498
+ const n = Number(v);
499
+ return Number.isFinite(n) && n >= 0 && n <= 1 ? n : null;
500
+ }
501
+ function getMutationFractions(vafs) {
502
+ const fractions = [];
503
+ if (!Array.isArray(vafs)) return fractions;
504
+ for (const vaf of vafs) {
505
+ const explicitFraction = getNumericFraction(vaf?.fraction ?? vaf?.mutationFraction);
506
+ if (explicitFraction != null) {
507
+ fractions.push(explicitFraction);
508
+ continue;
509
+ }
510
+ const counts = getReadCounts(vaf?.refCount, vaf?.altCount, vaf?.totalCount);
511
+ if (!counts) continue;
512
+ fractions.push(counts.altCount / counts.totalCount);
513
+ }
514
+ return fractions;
515
+ }
516
+ function getMaxMutationFraction(vafs) {
517
+ const fractions = getMutationFractions(vafs);
518
+ return fractions.length ? Math.max(...fractions) : null;
519
+ }
520
+ function hasAnyValidVafEntry(vafs) {
521
+ return getVafEntries(vafs).some((vaf) => hasValidReadCounts(vaf.refCount, vaf.altCount, vaf.totalCount));
522
+ }
523
+ function appendVafBar(td2, refCountValue, altCountValue, label = "VAF", totalCountValue) {
524
+ const counts = getReadCounts(refCountValue, altCountValue, totalCountValue);
525
+ if (!counts) return;
526
+ const fraction = counts.altCount / counts.totalCount;
527
+ const div = td2.append("div").style("margin-left", "5px").style("margin-top", "4px").style("display", "flex").style("align-items", "center").style("gap", "6px");
528
+ div.append("span").style("font-size", "0.8em").style("color", "#555").text(label);
529
+ fillbar(div, { f: fraction, v1: counts.altCount, v2: counts.totalCount });
530
+ }
531
+ function appendVafBars(td2, vafs) {
532
+ for (const vaf of getVafEntries(vafs)) {
533
+ if (!hasValidReadCounts(vaf.refCount, vaf.altCount, vaf.totalCount)) continue;
534
+ appendVafBar(td2, vaf.refCount, vaf.altCount, vaf.label, vaf.totalCount);
535
+ }
536
+ }
537
+
538
+ // plots/disco/data/DataMapper.ts
539
+ var DataMapper = class _DataMapper {
540
+ constructor(settings, reference, sample, prioritizedGenes = []) {
541
+ // remove fields and extract filters to seperate classes
542
+ this.labelData = [];
543
+ this.nonExonicSnvData = [];
544
+ this.nonExonicInnerRadius = 0;
545
+ this.snvRingDataMap = /* @__PURE__ */ new Map();
546
+ this.snvInnerRadius = 0;
547
+ this.snvData = [];
548
+ this.bpx = 0;
549
+ this.onePxArcAngle = 0;
550
+ this.filteredSnvData = [];
551
+ this.filteredSnvCountByChr = /* @__PURE__ */ new Map();
552
+ this.lohData = [];
553
+ this.lohInnerRadius = 0;
554
+ this.cnvData = [];
555
+ this.cnvInnerRadius = 0;
556
+ this.fusionData = [];
557
+ this.fusionRadius = 0;
558
+ this.hasPrioritizedGenes = false;
559
+ this.hasWaterfallEligibleChromosome = false;
560
+ this.invalidEntries = [];
561
+ this.cnvLossMaxValue = 0;
562
+ this.cnvGainMaxValue = 0;
563
+ this.percentilePositive = 0;
564
+ this.percentileNegative = 0;
565
+ this.cnvMaxPercentileAbs = 0;
566
+ this.mutationWaterfallData = [];
567
+ this.hasMutationFractionData = false;
568
+ this.mutationWaterfallInnerRadius = 0;
569
+ this.mutationWaterfallRangeMin = Infinity;
570
+ this.mutationWaterfallRangeMax = -Infinity;
571
+ this.lohMaxValue = void 0;
572
+ this.lohMinValue = void 0;
573
+ this.snvFilter = (data) => data.dt == dtsnvindel;
574
+ this.fusionFilter = (data) => data.dt == dtfusionrna || data.dt == dtsv;
575
+ this.cnvFilter = (data) => data.dt == dtcnv || data.dt == dtitd;
576
+ this.lohFilter = (data) => data.dt == dtloh;
577
+ this.compareData = (a, b) => {
578
+ const chrDiff = this.reference.chromosomesOrder.indexOf(a.chr) - this.reference.chromosomesOrder.indexOf(b.chr);
579
+ if (chrDiff != 0) {
580
+ return chrDiff;
581
+ }
582
+ const aPos = a.pos ? a.pos : a.start;
583
+ const bPos = b.pos ? b.pos : b.start;
584
+ return aPos - bPos;
585
+ };
586
+ this.settings = settings;
587
+ this.reference = reference;
588
+ this.sample = sample;
589
+ this.excludedChromosomes = this.settings.Disco.hiddenChromosomes;
590
+ this.lastInnerRadious = this.settings.rings.chromosomeInnerRadius;
591
+ this.gainCapped = this.settings.Disco.cnvCapping;
592
+ this.lossCapped = -1 * this.settings.Disco.cnvCapping;
593
+ this.nonExonicFilter = (data) => {
594
+ if (prioritizedGenes.length > 0 && this.settings.Disco.prioritizeGeneLabelsByGeneSets) {
595
+ return prioritizedGenes.includes(data.gene) && settings.rings.nonExonicFilterValues.includes(ViewModelMapper.snvClassLayer[data.mClass]);
596
+ } else {
597
+ return settings.rings.nonExonicFilterValues.includes(ViewModelMapper.snvClassLayer[data.mClass]);
598
+ }
599
+ };
600
+ this.snvRingFilter = (data) => {
601
+ if (prioritizedGenes.length > 0 && this.settings.Disco.prioritizeGeneLabelsByGeneSets) {
602
+ return prioritizedGenes.includes(data.gene) && settings.rings.snvRingFilters.includes(ViewModelMapper.snvClassLayer[data.mClass]);
603
+ } else {
604
+ return settings.rings.snvRingFilters.includes(ViewModelMapper.snvClassLayer[data.mClass]);
605
+ }
606
+ };
607
+ this.dataObjectMapper = new DataObjectMapper(sample, prioritizedGenes);
608
+ }
609
+ map(data) {
610
+ const dataArray = [];
611
+ this.filteredSnvCountByChr.clear();
612
+ this.hasWaterfallEligibleChromosome = false;
613
+ this.mutationWaterfallData = [];
614
+ this.mutationWaterfallInnerRadius = 0;
615
+ this.mutationWaterfallRangeMin = Infinity;
616
+ this.mutationWaterfallRangeMax = -Infinity;
617
+ this.hasMutationFractionData = false;
618
+ data.forEach((dObject) => {
619
+ if (dObject.dt == dtsnvindel && getMaxMutationFraction(dObject.vafs) != null) {
620
+ this.hasMutationFractionData = true;
621
+ }
622
+ const index = this.reference.chromosomesOrder.indexOf(dObject.chr);
623
+ const indexA = this.reference.chromosomesOrder.indexOf(dObject.chrA);
624
+ const indexB = this.reference.chromosomesOrder.indexOf(dObject.chrB);
625
+ if (dObject.dt == dtsnvindel) {
626
+ if (index != -1 && this.snvData.length < this.settings.snv.maxMutationCount) {
627
+ const pos = dObject.pos ?? dObject.position;
628
+ const chrSize = this.reference.chromosomes[index].size;
629
+ if (Number.isFinite(pos) && pos >= 0 && pos <= chrSize) {
630
+ this.addData(dObject, dataArray);
631
+ } else {
632
+ this.invalidEntries.push({ dataType: "SNV", reason: `Position ${pos} outside of ${dObject.chr}` });
633
+ }
634
+ } else if (index == -1) {
635
+ if (!this.excludedChromosomes.includes(dObject.chr)) {
636
+ this.invalidEntries.push({ dataType: "SNV", reason: `Unknown chr ${dObject.chr}` });
637
+ }
638
+ }
639
+ } else if (dObject.dt == dtfusionrna || dObject.dt == dtsv) {
640
+ if (indexA != -1 && indexB != -1) {
641
+ const posA = dObject.posA;
642
+ const posB = dObject.posB;
643
+ const chrSizeA = this.reference.chromosomes[indexA].size;
644
+ const chrSizeB = this.reference.chromosomes[indexB].size;
645
+ if (Number.isFinite(posA) && Number.isFinite(posB) && posA >= 0 && posA <= chrSizeA && posB >= 0 && posB <= chrSizeB) {
646
+ this.addData(dObject, dataArray);
647
+ } else {
648
+ const reasonParts = [];
649
+ if (!(Number.isFinite(posA) && posA >= 0 && posA <= chrSizeA))
650
+ reasonParts.push(`Position ${posA} outside of ${dObject.chrA}`);
651
+ if (!(Number.isFinite(posB) && posB >= 0 && posB <= chrSizeB))
652
+ reasonParts.push(`Position ${posB} outside of ${dObject.chrB}`);
653
+ this.invalidEntries.push({ dataType: "Fusion", reason: reasonParts.join("; ") });
654
+ }
655
+ } else {
656
+ const missing = [];
657
+ if (indexA == -1 && !this.excludedChromosomes.includes(dObject.chrA)) missing.push(dObject.chrA);
658
+ if (indexB == -1 && !this.excludedChromosomes.includes(dObject.chrB)) missing.push(dObject.chrB);
659
+ if (missing.length) this.invalidEntries.push({ dataType: "Fusion", reason: "Unknown chr in fusion" });
660
+ }
661
+ } else if ([dtcnv, dtloh, dtitd].includes(Number(dObject.dt))) {
662
+ const idx = this.reference.chromosomesOrder.indexOf(dObject.chr);
663
+ const dataType = dObject.dt == dtcnv ? "CNV" : dObject.dt == dtloh ? "LOH" : "ITD";
664
+ if (dObject.chr && idx != -1) {
665
+ const chrSize = this.reference.chromosomes[idx].size;
666
+ const start = dObject.start;
667
+ const stop = dObject.stop;
668
+ if (Number.isFinite(start) && Number.isFinite(stop) && start >= 0 && stop <= chrSize && start <= stop) {
669
+ this.addData(dObject, dataArray);
670
+ } else {
671
+ this.invalidEntries.push({
672
+ dataType,
673
+ reason: `Position ${start}-${stop} outside of ${dObject.chr}`
674
+ });
675
+ }
676
+ } else {
677
+ if (!this.excludedChromosomes.includes(dObject.chr)) {
678
+ this.invalidEntries.push({
679
+ dataType,
680
+ reason: `Unknown chr ${dObject.chr}`
681
+ });
682
+ }
683
+ }
684
+ } else {
685
+ throw Error("Unknown mutation type!");
686
+ }
687
+ });
688
+ const sortedData = dataArray.sort(this.compareData);
689
+ if (this.settings.rings.nonExonicRingEnabled) {
690
+ sortedData.forEach((data2) => {
691
+ this.filterNonExonicSnvData(data2);
692
+ });
693
+ }
694
+ if (this.nonExonicSnvData.length > 0) {
695
+ this.nonExonicInnerRadius = this.lastInnerRadious - this.settings.rings.nonExonicRingWidth;
696
+ this.lastInnerRadious = this.nonExonicInnerRadius;
697
+ }
698
+ sortedData.forEach((data2) => {
699
+ this.filterSnvs(data2);
700
+ });
701
+ this.hasWaterfallEligibleChromosome = Array.from(this.filteredSnvCountByChr.values()).some((count) => count >= 2);
702
+ if (this.settings.Disco.mutationWaterfallPlot && this.hasWaterfallEligibleChromosome) {
703
+ this.prepareMutationWaterfallData();
704
+ }
705
+ sortedData.forEach((data2) => {
706
+ this.filterLohs(data2);
707
+ });
708
+ if (this.lohData.length > 0) {
709
+ this.lohInnerRadius = this.lastInnerRadious - this.settings.rings.lohRingWidth;
710
+ this.lastInnerRadious = this.lohInnerRadius;
711
+ }
712
+ sortedData.forEach((data2) => {
713
+ this.filterCnvs(data2);
714
+ });
715
+ if (this.cnvData.length > 0) {
716
+ this.cnvInnerRadius = this.lastInnerRadious - this.settings.rings.cnvRingWidth;
717
+ this.lastInnerRadious = this.cnvInnerRadius;
718
+ this.cappedCnvMaxAbsValue = Math.min(
719
+ this.settings.Disco.cnvCapping,
720
+ Math.max(
721
+ Math.abs(_DataMapper.capMaxValue(this.cnvLossMaxValue, this.gainCapped, this.lossCapped)),
722
+ Math.abs(_DataMapper.capMaxValue(this.cnvGainMaxValue, this.gainCapped, this.lossCapped))
723
+ )
724
+ );
725
+ const cnvValues = this.cnvData.filter((data2) => data2.dt == dtcnv).map((data2) => data2.value);
726
+ if (cnvValues.length) {
727
+ const percentilePair = new PercentileMapper().map(cnvValues, this.settings.Disco.cnvPercentile);
728
+ this.percentilePositive = _DataMapper.capMaxValue(percentilePair.positive, this.gainCapped, this.lossCapped);
729
+ this.percentileNegative = _DataMapper.capMaxValue(percentilePair.negative, this.gainCapped, this.lossCapped);
730
+ this.cnvMaxPercentileAbs = Math.min(
731
+ this.settings.Disco.cnvCapping,
732
+ Math.max(this.percentilePositive, Math.abs(this.percentileNegative))
733
+ );
734
+ }
735
+ }
736
+ sortedData.forEach((data2) => {
737
+ this.filterFusion(data2);
738
+ });
739
+ if (this.fusionData.length > 0) {
740
+ this.fusionRadius = this.lastInnerRadious;
741
+ }
742
+ const dataHolder = {
743
+ labelData: this.labelData,
744
+ nonExonicSnvData: this.nonExonicSnvData,
745
+ nonExonicInnerRadius: this.nonExonicInnerRadius,
746
+ snvRingDataMap: this.snvRingDataMap,
747
+ snvInnerRadius: this.snvInnerRadius,
748
+ snvData: this.snvData,
749
+ bpx: this.bpx,
750
+ onePxArcAngle: this.onePxArcAngle,
751
+ filteredSnvData: this.filteredSnvData,
752
+ lohData: this.lohData,
753
+ lohInnerRadius: this.lohInnerRadius,
754
+ cnvData: this.cnvData,
755
+ cnvInnerRadius: this.cnvInnerRadius,
756
+ fusionData: this.fusionData,
757
+ fusionRadius: this.fusionRadius,
758
+ hasPrioritizedGenes: this.hasPrioritizedGenes,
759
+ hasWaterfallEligibleChromosome: this.hasWaterfallEligibleChromosome,
760
+ cnvGainMaxValue: this.cnvGainMaxValue,
761
+ cnvLossMaxValue: this.cnvLossMaxValue,
762
+ cappedCnvMaxAbsValue: this.cappedCnvMaxAbsValue,
763
+ percentilePositive: this.percentilePositive,
764
+ percentileNegative: this.percentileNegative,
765
+ cnvMaxPercentileAbs: this.cnvMaxPercentileAbs,
766
+ lohMaxValue: this.lohMaxValue,
767
+ lohMinValue: this.lohMinValue,
768
+ hasMutationFractionData: this.hasMutationFractionData,
769
+ mutationWaterfallData: this.mutationWaterfallData,
770
+ mutationWaterfallInnerRadius: this.mutationWaterfallInnerRadius,
771
+ mutationWaterfallLogRange: this.mutationWaterfallData.length ? { min: this.mutationWaterfallRangeMin, max: this.mutationWaterfallRangeMax } : void 0,
772
+ invalidDataInfo: {
773
+ entries: this.invalidEntries,
774
+ errorMsg: `Entries listed above were skipped due to invalid or unsupported chromosome information.`
775
+ }
776
+ };
777
+ return dataHolder;
778
+ }
779
+ addData(dObject, dataArray) {
780
+ const instance = this.dataObjectMapper.map(dObject);
781
+ if (instance.isPrioritized) {
782
+ this.hasPrioritizedGenes = true;
783
+ }
784
+ dataArray.push(instance);
785
+ }
786
+ filterNonExonicSnvData(data) {
787
+ if (this.snvFilter(data) && this.passesMutationFractionFilter(data)) {
788
+ if (this.settings.rings.nonExonicRingEnabled && this.nonExonicFilter(data)) {
789
+ this.nonExonicSnvData.push(data);
790
+ }
791
+ }
792
+ }
793
+ filterSnvs(data) {
794
+ if (this.snvFilter(data)) {
795
+ this.snvData.push(data);
796
+ if (this.passesMutationFractionFilter(data) && this.snvRingFilter(data)) {
797
+ if (this.snvInnerRadius == 0) {
798
+ this.snvInnerRadius = this.lastInnerRadious - this.settings.rings.snvRingWidth;
799
+ this.lastInnerRadious = this.snvInnerRadius;
800
+ this.bpx = Math.floor(this.reference.totalSize / (this.reference.totalChromosomesAngle * this.snvInnerRadius));
801
+ this.onePxArcAngle = 1 / this.snvInnerRadius;
802
+ }
803
+ this.filteredSnvData.push(data);
804
+ this.labelData.push(data);
805
+ const currentCount = this.filteredSnvCountByChr.get(data.chr) || 0;
806
+ this.filteredSnvCountByChr.set(data.chr, currentCount + 1);
807
+ const arcAngle = this.calculateArcAngle(data);
808
+ let dataArray = this.snvRingDataMap.get(arcAngle);
809
+ if (!dataArray) {
810
+ dataArray = new Array();
811
+ }
812
+ dataArray.push(data);
813
+ this.snvRingDataMap.set(arcAngle, dataArray);
814
+ }
815
+ }
816
+ }
817
+ passesMutationFractionFilter(data) {
818
+ if (!this.hasMutationFractionData) return true;
819
+ const minMutationFraction = this.settings.Disco.minMutationFraction || 0;
820
+ if (minMutationFraction <= 0) return true;
821
+ const fraction = getMaxMutationFraction(data.vafs);
822
+ return fraction != null && fraction >= minMutationFraction;
823
+ }
824
+ filterFusion(data) {
825
+ if (this.fusionFilter(data)) {
826
+ data.isPrioritized = true;
827
+ this.fusionData.push(data);
828
+ this.labelData.push(data);
829
+ }
830
+ }
831
+ filterLohs(data) {
832
+ if (this.lohFilter(data)) {
833
+ if (this.lohMaxValue == void 0 || this.lohMaxValue < data.value) {
834
+ this.lohMaxValue = data.segmean;
835
+ }
836
+ if (this.lohMinValue == void 0 || this.lohMinValue > data.value) {
837
+ this.lohMinValue = data.segmean;
838
+ }
839
+ this.lohData.push(data);
840
+ }
841
+ }
842
+ filterCnvs(data) {
843
+ if (this.cnvFilter(data)) {
844
+ if (!data.chr || this.reference.chromosomesOrder.indexOf(data.chr) == -1) {
845
+ return;
846
+ }
847
+ if (data.dt == dtcnv) {
848
+ if (this.cnvGainMaxValue == void 0 || this.cnvGainMaxValue < data.value) {
849
+ this.cnvGainMaxValue = data.value;
850
+ }
851
+ if (this.cnvLossMaxValue == void 0 || this.cnvLossMaxValue > data.value) {
852
+ this.cnvLossMaxValue = data.value;
853
+ }
854
+ }
855
+ this.cnvData.push(data);
856
+ }
857
+ }
858
+ prepareMutationWaterfallData() {
859
+ this.mutationWaterfallInnerRadius = this.lastInnerRadious - this.settings.rings.mutationWaterfallRingWidth;
860
+ this.lastInnerRadious = this.mutationWaterfallInnerRadius;
861
+ const groupedSnvs = /* @__PURE__ */ new Map();
862
+ const firstMutationByChr = [];
863
+ for (const snv of this.filteredSnvData) {
864
+ const list = groupedSnvs.get(snv.chr) || [];
865
+ list.push(snv);
866
+ groupedSnvs.set(snv.chr, list);
867
+ }
868
+ for (const [, snvs] of groupedSnvs) {
869
+ if (snvs.length < 2) continue;
870
+ snvs.sort((a, b) => a.position - b.position);
871
+ firstMutationByChr.push({
872
+ chr: snvs[0].chr,
873
+ position: snvs[0].position,
874
+ logDistance: 0
875
+ // placeholder updated after range computed
876
+ });
877
+ for (let i = 1; i < snvs.length; i++) {
878
+ const prev = snvs[i - 1];
879
+ const curr = snvs[i];
880
+ const distance = Math.max(1, Math.abs(curr.position - prev.position));
881
+ const logDistance = Math.log10(distance);
882
+ this.mutationWaterfallData.push({
883
+ chr: curr.chr,
884
+ position: curr.position,
885
+ logDistance
886
+ });
887
+ if (logDistance < this.mutationWaterfallRangeMin) {
888
+ this.mutationWaterfallRangeMin = logDistance;
889
+ }
890
+ if (logDistance > this.mutationWaterfallRangeMax) {
891
+ this.mutationWaterfallRangeMax = logDistance;
892
+ }
893
+ }
894
+ }
895
+ if (!this.mutationWaterfallData.length) {
896
+ this.mutationWaterfallRangeMin = 0;
897
+ this.mutationWaterfallRangeMax = 0;
898
+ }
899
+ const topLogDistance = this.mutationWaterfallRangeMax;
900
+ for (const first of firstMutationByChr) {
901
+ this.mutationWaterfallData.push({
902
+ ...first,
903
+ logDistance: topLogDistance
904
+ });
905
+ }
906
+ }
907
+ calculateArcAngle(data) {
908
+ const currentChromosome = this.reference.chromosomes[this.reference.chromosomesOrder.findIndex((chromosomeOrder) => data.chr == chromosomeOrder)];
909
+ const dataAnglePos = Math.floor(data.position / this.bpx);
910
+ return currentChromosome.startAngle + dataAnglePos * this.onePxArcAngle;
911
+ }
912
+ static capMaxValue(value, gainCapped, lossCapped) {
913
+ if (value && Math.sign(value) == 1) {
914
+ return value > gainCapped ? gainCapped : value;
915
+ }
916
+ if (Math.sign(value) == -1) {
917
+ return value < lossCapped ? lossCapped : value;
918
+ }
919
+ return 0;
920
+ }
921
+ static capMinValue(value, capMinValue = 1) {
922
+ if (Math.sign(value) == 1) {
923
+ return value > capMinValue ? value : capMinValue;
924
+ }
925
+ if (Math.sign(value) == -1) {
926
+ return value < -1 * capMinValue ? value : -1 * capMinValue;
927
+ }
928
+ return 1;
929
+ }
930
+ };
931
+
932
+ // plots/disco/legend/Legend.ts
933
+ var Legend = class {
934
+ constructor(snvTitle, cnvTitle, lohTitle, fusionTitle, cnvPercentile, cnvCutoffmode, snvClassMap, cnvClassMap, cnvRenderingType, fusionLegend, discoInteractions, lohLegend, mutationWaterfallLegend, fusionLegendCounts = { interchromosomal: 0, intrachromosomal: 0 }, cnvCount = 0) {
935
+ this.snvTitle = snvTitle;
936
+ this.cnvTitle = cnvTitle;
937
+ this.lohTitle = lohTitle;
938
+ this.fusionTitle = fusionTitle;
939
+ this.cnvPercentile = cnvPercentile;
940
+ this.cnvCutoffMode = cnvCutoffmode;
941
+ this.cnvCount = cnvCount;
942
+ this.snvClassMap = snvClassMap;
943
+ this.cnvClassMap = cnvClassMap;
944
+ this.cnvRenderingType = cnvRenderingType;
945
+ this.lohLegend = lohLegend;
946
+ this.fusionLegend = fusionLegend;
947
+ this.fusionLegendCounts = fusionLegendCounts;
948
+ this.discoInteractions = discoInteractions;
949
+ this.mutationWaterfallLegend = mutationWaterfallLegend;
950
+ }
951
+ legendCount() {
952
+ const hasItd = this.cnvClassMap.has(4 /* ITD */);
953
+ return (this.snvClassMap.size > 0 ? 1 : 0) + (this.cnvCount > 0 ? 1 : 0) + (hasItd ? 1 : 0) + (this.lohLegend ? 1 : 0) + (this.fusionLegend ? 1 : 0) + (this.mutationWaterfallLegend ? 1 : 0);
954
+ }
955
+ };
956
+
957
+ // plots/disco/fusion/Fusion.ts
958
+ var Fusion = class {
959
+ constructor(source, target, genes, count, endpts) {
960
+ this.source = source;
961
+ this.target = target;
962
+ this.genes = genes;
963
+ this.count = count;
964
+ this.endpts = endpts;
965
+ }
966
+ };
967
+
968
+ // plots/disco/fusion/FusionSubgroup.ts
969
+ var FusionSubgroup = class {
970
+ constructor(startAngle, endAngle, radius, gene, value, genes, positionInChromosome, strand) {
971
+ this.startAngle = startAngle;
972
+ this.endAngle = endAngle;
973
+ this.radius = radius;
974
+ this.gene = gene;
975
+ this.value = value;
976
+ this.genes = genes;
977
+ this.positionInChromosome = positionInChromosome;
978
+ this.strand = strand;
979
+ }
980
+ };
981
+
982
+ // plots/disco/fusion/FusionMapper.ts
983
+ var FusionMapper = class {
984
+ constructor(radius, sampleName, reference) {
985
+ this.radius = radius;
986
+ this.sampleName = sampleName;
987
+ this.reference = reference;
988
+ }
989
+ map(fusionData) {
990
+ const fusions = [];
991
+ fusionData.forEach((data) => {
992
+ const genes = /* @__PURE__ */ new Set();
993
+ genes.add(data.geneA);
994
+ genes.add(data.geneB);
995
+ const startAngle = this.calculateStartAngle(data.chrA, data.posA);
996
+ const endAngle = this.calculateEndAngle(data.chrA, data.posA);
997
+ if (startAngle === null || endAngle === null) return;
998
+ const source = new FusionSubgroup(
999
+ startAngle,
1000
+ endAngle,
1001
+ this.radius,
1002
+ data.geneA,
1003
+ data.value,
1004
+ genes,
1005
+ {
1006
+ chromosome: data.chrA,
1007
+ position: data.posA
1008
+ },
1009
+ data.strandA
1010
+ );
1011
+ let target;
1012
+ if (data.chrB && data.posB) {
1013
+ const startAngle2 = this.calculateStartAngle(data.chrB, data.posB);
1014
+ const endAngle2 = this.calculateEndAngle(data.chrB, data.posB);
1015
+ if (startAngle2 === null || endAngle2 === null) return;
1016
+ target = new FusionSubgroup(
1017
+ startAngle2,
1018
+ endAngle2,
1019
+ this.radius,
1020
+ data.geneB,
1021
+ data.value,
1022
+ genes,
1023
+ {
1024
+ chromosome: data.chrB,
1025
+ position: data.posB
1026
+ },
1027
+ data.strandB
1028
+ );
1029
+ }
1030
+ const fusion = new Fusion(source, target, "genes", -1, "Endpoints");
1031
+ fusions.push(fusion);
1032
+ });
1033
+ return fusions;
1034
+ }
1035
+ calculateStartAngle(chr, pos) {
1036
+ const index = this.reference.chromosomesOrder.indexOf(chr);
1037
+ if (index === -1) return null;
1038
+ const chromosome = this.reference.chromosomes[index];
1039
+ return chromosome.startAngle + (chromosome.endAngle - chromosome.startAngle) * (Number(pos) / chromosome.size) - 0.01;
1040
+ }
1041
+ calculateEndAngle(chr, pos) {
1042
+ const index = this.reference.chromosomesOrder.indexOf(chr);
1043
+ if (index === -1) return null;
1044
+ const chromosome = this.reference.chromosomes[index];
1045
+ return 0.01 + chromosome.startAngle + (chromosome.endAngle - chromosome.startAngle) * (Number(pos) / chromosome.size);
1046
+ }
1047
+ };
1048
+
1049
+ // plots/disco/loh/LohLegend.ts
1050
+ var LohLegend = class {
1051
+ constructor(count) {
1052
+ this.count = count;
1053
+ }
1054
+ };
1055
+
1056
+ // plots/disco/viewmodel/ViewModel.ts
1057
+ var ViewModel = class {
1058
+ constructor(settings, rings, legend, fusions, dataHolder, genesetName, snvDataLengthAll) {
1059
+ this.settings = settings;
1060
+ this.rings = rings;
1061
+ this.legend = legend;
1062
+ this.fusions = fusions;
1063
+ this.genesetName = genesetName;
1064
+ const tempHolder = select_default("body").append("div").style("position", "absolute").style("visibility", "hidden");
1065
+ const tempSvg = tempHolder.append("svg");
1066
+ const labels = rings.labelsRing?.elementsToDisplay?.map((l) => l.text) || [];
1067
+ const maxLabelSpace = getMaxLabelWidth(tempSvg, labels);
1068
+ tempHolder.remove();
1069
+ this.width = 2 * (this.settings.horizontalPadding + this.settings.rings.labelLinesInnerRadius + this.settings.rings.labelsToLinesDistance + maxLabelSpace);
1070
+ this.height = 2 * (this.settings.rings.labelLinesInnerRadius + this.settings.rings.labelsToLinesDistance + this.settings.verticalPadding + this.settings.label.fontSize * 2 + maxLabelSpace);
1071
+ this.legendHeight = this.calculateLegendHeight(legend);
1072
+ this.snvDataLength = dataHolder.snvData.length;
1073
+ this.filteredSnvDataLength = dataHolder.filteredSnvData.length;
1074
+ this.snvDataLengthAll = snvDataLengthAll;
1075
+ this.cnvMaxValue = dataHolder.cnvGainMaxValue;
1076
+ this.cnvMinValue = dataHolder.cnvLossMaxValue;
1077
+ this.cappedCnvMaxAbsValue = dataHolder.cappedCnvMaxAbsValue;
1078
+ this.negativePercentile = dataHolder.percentileNegative;
1079
+ this.positivePercentile = dataHolder.percentilePositive;
1080
+ this.invalidDataInfo = dataHolder.invalidDataInfo;
1081
+ this.canShowMutationWaterfallPlot = dataHolder.hasWaterfallEligibleChromosome;
1082
+ this.hasMutationFractionData = dataHolder.hasMutationFractionData;
1083
+ }
1084
+ getElements(ringType) {
1085
+ switch (ringType) {
1086
+ case 0 /* CHROMOSOME */:
1087
+ return this.rings.chromosomesRing ? this.rings.chromosomesRing.elements : [];
1088
+ case 1 /* LABEL */:
1089
+ return this.rings.labelsRing.elementsToDisplay;
1090
+ case 2 /* NONEXONICSNV */:
1091
+ return this.rings.nonExonicArcRing ? this.rings.nonExonicArcRing.elements : [];
1092
+ case 3 /* SNV */:
1093
+ return this.rings.snvArcRing ? this.rings.snvArcRing.elements : [];
1094
+ case 5 /* CNV */:
1095
+ return this.rings.cnvArcRing ? this.rings.cnvArcRing.elements : [];
1096
+ case 6 /* LOH */:
1097
+ return this.rings.lohArcRing ? this.rings.lohArcRing.elements : [];
1098
+ case 4 /* MUTATION_WATERFALL */:
1099
+ return this.rings.mutationWaterfallRing ? this.rings.mutationWaterfallRing.elements : [];
1100
+ default:
1101
+ throw new Error(`ringType ${ringType} not defined`);
1102
+ }
1103
+ }
1104
+ getCollisions(ringType) {
1105
+ if (ringType == 1 /* LABEL */) {
1106
+ return this.rings.labelsRing.collisions;
1107
+ } else {
1108
+ return void 0;
1109
+ }
1110
+ }
1111
+ calculateLegendHeight(legend) {
1112
+ const rawHeight = this.settings.legend.rowHeight;
1113
+ return rawHeight * legend.legendCount();
1114
+ }
1115
+ };
1116
+
1117
+ // plots/disco/ring/Ring.ts
1118
+ var Ring = class {
1119
+ constructor(innerRadius, width, elements) {
1120
+ this.innerRadius = innerRadius;
1121
+ this.outerRadius = innerRadius + width;
1122
+ this.width = width;
1123
+ this.elements = elements;
1124
+ }
1125
+ };
1126
+
1127
+ // plots/disco/label/MLabel.ts
1128
+ var MLabel = class _MLabel {
1129
+ /**
1130
+ * The Singleton's constructor should always be private to prevent direct
1131
+ * construction calls with the `new` operator.
1132
+ */
1133
+ constructor() {
1134
+ const mlabel = {};
1135
+ for (const key in mclass) {
1136
+ mlabel[mclass[key].label] = mclass[key];
1137
+ mlabel[key] = mclass[key];
1138
+ }
1139
+ this.mlabel = mlabel;
1140
+ }
1141
+ /**
1142
+ * The static method that controls the access to the singleton instance.
1143
+ *
1144
+ * This implementation let you subclass the Singleton class while keeping
1145
+ * just one instance of each subclass around.
1146
+ */
1147
+ static getInstance() {
1148
+ if (!_MLabel.instance) {
1149
+ _MLabel.instance = new _MLabel();
1150
+ }
1151
+ return _MLabel.instance;
1152
+ }
1153
+ };
1154
+
1155
+ // plots/disco/snv/SnvLegendElement.ts
1156
+ var SnvLegendElement = class {
1157
+ constructor(snvType, color, count) {
1158
+ this.snvType = snvType;
1159
+ this.color = color;
1160
+ this.count = count;
1161
+ }
1162
+ };
1163
+
1164
+ // plots/disco/snv/SnvArcsMapper.ts
1165
+ var SnvArcsMapper = class {
1166
+ constructor(svnInnerRadius, svnWidth, sampleName, reference) {
1167
+ this.snvClassMap = /* @__PURE__ */ new Map();
1168
+ this.svnInnerRadius = svnInnerRadius;
1169
+ this.svnWidth = svnWidth;
1170
+ this.sampleName = sampleName;
1171
+ this.reference = reference;
1172
+ this.bpx = Math.floor(this.reference.totalSize / (this.reference.totalChromosomesAngle * svnInnerRadius));
1173
+ this.onePxArcAngle = 1 / svnInnerRadius;
1174
+ }
1175
+ map(exonicSnvDataMap) {
1176
+ const snvArray = [];
1177
+ for (const angle of exonicSnvDataMap.keys()) {
1178
+ const array = exonicSnvDataMap.get(angle);
1179
+ if (array) {
1180
+ const arraySize = array.length;
1181
+ for (let i = 0; i < array.length; i++) {
1182
+ const data = array[i];
1183
+ const snvLegendElement = this.snvClassMap.get(data.mClass);
1184
+ if (snvLegendElement) {
1185
+ this.snvClassMap.set(data.mClass, this.createSnvLegend(data.mClass, ++snvLegendElement.count));
1186
+ } else {
1187
+ this.snvClassMap.set(data.mClass, this.createSnvLegend(data.mClass, 1));
1188
+ }
1189
+ const startAngle = angle;
1190
+ const endAngle = angle + this.onePxArcAngle;
1191
+ const mLabel = MLabel.getInstance().mlabel ? MLabel.getInstance().mlabel[data.mClass] : void 0;
1192
+ const arc = {
1193
+ startAngle,
1194
+ endAngle,
1195
+ innerRadius: this.svnInnerRadius + i * this.svnWidth / arraySize,
1196
+ outerRadius: this.svnInnerRadius + (i + 1) * this.svnWidth / arraySize,
1197
+ color: mLabel.color,
1198
+ text: data.gene,
1199
+ dataClass: mLabel.label,
1200
+ mname: data.mname,
1201
+ chr: data.chr,
1202
+ pos: data.position,
1203
+ vafs: data.vafs,
1204
+ sampleName: [data.sampleName]
1205
+ };
1206
+ snvArray.push(arc);
1207
+ }
1208
+ }
1209
+ }
1210
+ return snvArray;
1211
+ }
1212
+ createSnvLegend(dataClass, count) {
1213
+ const mClass = MLabel.getInstance().mlabel[dataClass];
1214
+ return new SnvLegendElement(mClass.label, mClass.color, count);
1215
+ }
1216
+ };
1217
+
1218
+ // plots/disco/cnv/CnvLegend.ts
1219
+ var CnvLegend = class {
1220
+ constructor(text, cnvType, color, value) {
1221
+ this.text = text;
1222
+ this.cnvType = cnvType;
1223
+ this.color = color;
1224
+ this.value = value;
1225
+ }
1226
+ };
1227
+
1228
+ // plots/disco/cnv/CnvColorProvider.ts
1229
+ var CnvColorProvider = class {
1230
+ static getColor(value, settings, cnvMaxPercentileAbs = 0) {
1231
+ const cnv = settings.cnv;
1232
+ const gainCapped = settings.Disco.cnvRenderingType == "heatmap" /* heatmap */ ? settings.Disco.cnvCapping : cnvMaxPercentileAbs;
1233
+ const lossCapped = settings.Disco.cnvRenderingType == "heatmap" /* heatmap */ ? -1 * settings.Disco.cnvCapping : -1 * cnvMaxPercentileAbs;
1234
+ if (value < lossCapped) {
1235
+ return cnv.cappedLossColor;
1236
+ } else if (value >= lossCapped && value <= 0) {
1237
+ return cnv.lossColor;
1238
+ } else if (value > 0 && value <= gainCapped) {
1239
+ return cnv.ampColor;
1240
+ } else {
1241
+ return cnv.cappedAmpColor;
1242
+ }
1243
+ }
1244
+ };
1245
+
1246
+ // plots/disco/cnv/CnvArcsMapper.ts
1247
+ var CnvArcsMapper = class {
1248
+ constructor(cnvInnerRadius, cnvWidth, settings, sampleName, reference, cnvMaxValue = 0, cnvMinValue = 0, cnvMaxAbsValue = 0, cnvAbsPercentile = 0, cnvUnit = "", cnvRenderingType) {
1249
+ this.cnvClassMap = /* @__PURE__ */ new Map();
1250
+ this.cnvInnerRadius = cnvInnerRadius;
1251
+ this.cnvWidth = cnvWidth;
1252
+ this.settings = settings;
1253
+ this.sampleName = sampleName;
1254
+ this.reference = reference;
1255
+ this.cnvMaxValue = cnvMaxValue;
1256
+ this.cnvMinValue = cnvMinValue;
1257
+ this.cnvMaxAbsValue = cnvMaxAbsValue;
1258
+ this.cnvAbsPercentile = cnvAbsPercentile;
1259
+ this.cnvUnit = cnvUnit;
1260
+ this.cnvRenderingType = cnvRenderingType;
1261
+ this.gainCapped = Math.min(cnvAbsPercentile, this.settings.Disco.cnvCapping);
1262
+ this.lossCapped = -1 * Math.min(cnvAbsPercentile, this.settings.Disco.cnvCapping);
1263
+ this.lossOnly = cnvMaxValue <= 0;
1264
+ this.gainOnly = cnvMinValue >= 0;
1265
+ this.onePxArcAngle = 1 / this.cnvInnerRadius;
1266
+ const gain = new CnvLegend(
1267
+ "Max",
1268
+ cnvMaxValue > 0 ? 1 /* Gain */ : 0 /* Loss */,
1269
+ this.getColor(cnvMaxValue),
1270
+ cnvMaxValue
1271
+ );
1272
+ const loss = new CnvLegend(
1273
+ "Min",
1274
+ cnvMinValue > 0 ? 1 /* Gain */ : 0 /* Loss */,
1275
+ this.getColor(cnvMinValue),
1276
+ cnvMinValue
1277
+ );
1278
+ const cap = new CnvLegend(
1279
+ "Capping",
1280
+ 0 /* Loss */,
1281
+ this.getColor(cnvMinValue > 0 ? cnvMinValue : cnvMaxValue),
1282
+ this.settings.Disco.cnvCapping
1283
+ );
1284
+ this.cnvClassMap.set(1 /* Gain */, gain);
1285
+ this.cnvClassMap.set(0 /* Loss */, loss);
1286
+ this.cnvClassMap.set(2 /* Cap */, cap);
1287
+ }
1288
+ map(arcData) {
1289
+ const arcs = [];
1290
+ let itdCount = 0;
1291
+ arcData.forEach((data) => {
1292
+ let startAngle = this.calculateStartAngle(data);
1293
+ let endAngle = this.calculateEndAngle(data);
1294
+ if (startAngle === null || endAngle === null) return;
1295
+ if (endAngle - startAngle < this.onePxArcAngle) {
1296
+ const restAngle = this.onePxArcAngle - (endAngle - startAngle);
1297
+ startAngle = startAngle - restAngle / 2;
1298
+ endAngle = endAngle + restAngle / 2;
1299
+ }
1300
+ const isItd = data.dt == dtitd;
1301
+ if (isItd) itdCount++;
1302
+ const color = isItd ? mclass[mclassitd].color : this.getColor(data.value);
1303
+ const innerRadius = isItd ? this.cnvInnerRadius : this.calculateInnerRadius(data);
1304
+ const outerRadius = isItd ? this.cnvInnerRadius + this.cnvWidth : this.calculateOuterRadius(data);
1305
+ const arc = {
1306
+ startAngle,
1307
+ endAngle,
1308
+ innerRadius,
1309
+ outerRadius,
1310
+ color,
1311
+ dt: data.dt,
1312
+ dataClass: data.mClass,
1313
+ text: data.gene,
1314
+ chr: data.chr,
1315
+ start: data.start,
1316
+ stop: data.stop,
1317
+ value: data.value,
1318
+ unit: this.cnvUnit,
1319
+ sampleName: [this.sampleName]
1320
+ };
1321
+ arcs.push(arc);
1322
+ });
1323
+ if (itdCount) {
1324
+ this.cnvClassMap.set(4 /* ITD */, new CnvLegend("ITD", 4 /* ITD */, mclass[mclassitd].color, itdCount));
1325
+ }
1326
+ return arcs;
1327
+ }
1328
+ calculateStartAngle(data) {
1329
+ const index = this.reference.chromosomesOrder.indexOf(data.chr);
1330
+ if (index == -1) return null;
1331
+ const chromosome = this.reference.chromosomes[index];
1332
+ return chromosome.startAngle + (chromosome.endAngle - chromosome.startAngle) * (Number(data.start) / chromosome.size);
1333
+ }
1334
+ calculateEndAngle(data) {
1335
+ const index = this.reference.chromosomesOrder.indexOf(data.chr);
1336
+ const chromosome = this.reference.chromosomes[index];
1337
+ return chromosome.startAngle + (chromosome.endAngle - chromosome.startAngle) * (Number(data.stop) / chromosome.size);
1338
+ }
1339
+ getColor(value) {
1340
+ return CnvColorProvider.getColor(value, this.settings, this.cnvAbsPercentile);
1341
+ }
1342
+ calculateInnerRadius(data) {
1343
+ if (this.cnvRenderingType == "heatmap" /* heatmap */) {
1344
+ return this.cnvInnerRadius;
1345
+ }
1346
+ if (this.gainOnly) {
1347
+ return this.cnvInnerRadius;
1348
+ }
1349
+ if (this.lossOnly) {
1350
+ const outerRadius = this.cnvInnerRadius + this.cnvWidth;
1351
+ return outerRadius + DataMapper.capMinValue(
1352
+ this.cnvWidth * DataMapper.capMaxValue(data.value, this.gainCapped, this.lossCapped) / this.cnvAbsPercentile
1353
+ );
1354
+ }
1355
+ const centerRadius = this.cnvInnerRadius + this.cnvWidth / 2;
1356
+ if (Math.sign(data.value) == 1) {
1357
+ return centerRadius;
1358
+ }
1359
+ if (Math.sign(data.value) == -1) {
1360
+ return centerRadius + DataMapper.capMinValue(
1361
+ DataMapper.capMaxValue(data.value, this.gainCapped, this.lossCapped) / this.cnvAbsPercentile * (this.cnvWidth / 2)
1362
+ );
1363
+ }
1364
+ return 1;
1365
+ }
1366
+ calculateOuterRadius(data) {
1367
+ const maxOuterRadius = this.cnvInnerRadius + this.cnvWidth;
1368
+ if (this.cnvRenderingType == "heatmap" /* heatmap */) {
1369
+ return maxOuterRadius;
1370
+ }
1371
+ if (this.gainOnly) {
1372
+ return this.cnvInnerRadius + DataMapper.capMinValue(
1373
+ this.cnvWidth * DataMapper.capMaxValue(data.value, this.gainCapped, this.lossCapped) / this.cnvAbsPercentile
1374
+ );
1375
+ }
1376
+ if (this.lossOnly) {
1377
+ return maxOuterRadius;
1378
+ }
1379
+ const centerRadius = this.cnvInnerRadius + this.cnvWidth / 2;
1380
+ if (Math.sign(data.value) == 1) {
1381
+ return centerRadius + DataMapper.capMinValue(
1382
+ DataMapper.capMaxValue(data.value, this.gainCapped, this.lossCapped) / this.cnvMaxAbsValue * (this.cnvWidth / 2)
1383
+ );
1384
+ }
1385
+ if (Math.sign(data.value) == -1) {
1386
+ return centerRadius;
1387
+ }
1388
+ return 1;
1389
+ }
1390
+ };
1391
+
1392
+ // plots/disco/label/Line.ts
1393
+ var Line = class {
1394
+ constructor(points, color) {
1395
+ this.points = new Array();
1396
+ this.points = points;
1397
+ this.color = color;
1398
+ }
1399
+ };
1400
+
1401
+ // plots/disco/label/LabelFactory.ts
1402
+ var LabelFactory = class {
1403
+ static createLabel(startAngle, endAngle, innerRadius, outerRadius, value, gene, color, dataClass, chr, position, isPrioritized = false, labelsToLinesGap, mutationTooltip, fusionTooltip) {
1404
+ const angle = (startAngle + endAngle) / 2;
1405
+ const ccAngle = angle - Math.PI / 2;
1406
+ const transform = `rotate(${angle * 180 / Math.PI - 90}) translate(${outerRadius})${angle > Math.PI ? "rotate(180)" : ""}`;
1407
+ const textAnchor = angle > Math.PI ? "end" : "";
1408
+ const r0 = innerRadius;
1409
+ const r1 = outerRadius - labelsToLinesGap;
1410
+ const points = [];
1411
+ const point0 = {
1412
+ x: r0 * Math.cos(ccAngle),
1413
+ y: r0 * Math.sin(ccAngle)
1414
+ };
1415
+ const point1 = {
1416
+ x: r1 * Math.cos(ccAngle),
1417
+ y: r1 * Math.sin(ccAngle)
1418
+ };
1419
+ points.push(point0);
1420
+ points.push(point1);
1421
+ const line = new Line(points, color);
1422
+ const label = {
1423
+ startAngle,
1424
+ endAngle,
1425
+ innerRadius,
1426
+ outerRadius,
1427
+ angle,
1428
+ value,
1429
+ text: gene,
1430
+ color,
1431
+ transform,
1432
+ textAnchor,
1433
+ ccAngle,
1434
+ line,
1435
+ isPrioritized,
1436
+ start: position,
1437
+ stop: position,
1438
+ chr,
1439
+ mutationsTooltip: mutationTooltip ? [mutationTooltip] : void 0,
1440
+ fusionTooltip: fusionTooltip ? [fusionTooltip] : void 0
1441
+ };
1442
+ return label;
1443
+ }
1444
+ static createMovedLabel(element, overlap) {
1445
+ const startAngle = element.startAngle + overlap;
1446
+ const endAngle = element.endAngle + overlap;
1447
+ const angle = (startAngle + endAngle) / 2;
1448
+ const ccAngle = angle - Math.PI / 2;
1449
+ const r0 = element.innerRadius;
1450
+ const r1 = element.outerRadius - 2;
1451
+ const dr = (r1 - r0) / 3;
1452
+ const cos0 = Math.cos(element.ccAngle);
1453
+ const sin0 = Math.sin(element.ccAngle);
1454
+ const cos1 = Math.cos(element.ccAngle + overlap);
1455
+ const sin1 = Math.sin(element.ccAngle + overlap);
1456
+ const points = [];
1457
+ const point0 = {
1458
+ x: r0 * cos0,
1459
+ y: r0 * sin0
1460
+ };
1461
+ const point1 = {
1462
+ x: (r0 + dr) * cos0,
1463
+ y: (r0 + dr) * sin0
1464
+ };
1465
+ const point2 = {
1466
+ x: (r0 + 2 * dr) * cos1,
1467
+ y: (r0 + 2 * dr) * sin1
1468
+ };
1469
+ const point3 = {
1470
+ x: (r0 + 3 * dr) * cos1,
1471
+ y: (r0 + 3 * dr) * sin1
1472
+ };
1473
+ points.push(point0);
1474
+ points.push(point1);
1475
+ points.push(point2);
1476
+ points.push(point3);
1477
+ const line = new Line(points, element.color);
1478
+ const transform = "rotate(" + (angle * 180 / Math.PI - 90) + ")translate(" + element.outerRadius + ")" + (angle > Math.PI ? "rotate(180)" : "");
1479
+ const textAnchor = angle > Math.PI ? "end" : "";
1480
+ const color = element.mutationsTooltip ? element.mutationsTooltip[0].color : element.fusionTooltip ? element.fusionTooltip[0].color : void 0;
1481
+ const label = {
1482
+ startAngle,
1483
+ endAngle,
1484
+ innerRadius: element.innerRadius,
1485
+ outerRadius: element.outerRadius,
1486
+ angle,
1487
+ value: element.value,
1488
+ text: element.text,
1489
+ transform,
1490
+ textAnchor,
1491
+ ccAngle,
1492
+ color,
1493
+ line,
1494
+ isPrioritized: element.isPrioritized,
1495
+ start: element.start,
1496
+ stop: element.stop,
1497
+ chr: element.chr,
1498
+ mutationsTooltip: element.mutationsTooltip,
1499
+ fusionTooltip: element.fusionTooltip,
1500
+ cnvTooltip: element.cnvTooltip
1501
+ };
1502
+ return label;
1503
+ }
1504
+ };
1505
+
1506
+ // plots/disco/label/LabelsMapper.ts
1507
+ var LabelsMapper = class {
1508
+ constructor(settings, sampleName, reference, cnvMaxPercentileAbs = 0) {
1509
+ this.labelMap = /* @__PURE__ */ new Map();
1510
+ this.settings = settings;
1511
+ this.sampleName = sampleName;
1512
+ this.reference = reference;
1513
+ this.cnvMaxPercentileAbs = cnvMaxPercentileAbs;
1514
+ }
1515
+ map(data, cnvData = []) {
1516
+ const innerRadius = this.settings.rings.labelLinesInnerRadius;
1517
+ const outerRadius = innerRadius + this.settings.rings.labelsToLinesDistance;
1518
+ data.forEach((data2) => {
1519
+ if (data2.dt == dtsnvindel) {
1520
+ const startAngle = this.calculateStartAngle(data2.chr, data2.position);
1521
+ const endAngle = this.calculateEndAngle(data2.chr, data2.position);
1522
+ if (startAngle === null || endAngle === null) return;
1523
+ const mLabel = MLabel.getInstance().mlabel ? MLabel.getInstance().mlabel[data2.mClass] : void 0;
1524
+ this.addLabelOrMutation(
1525
+ data2,
1526
+ data2.gene,
1527
+ data2.mname,
1528
+ startAngle,
1529
+ endAngle,
1530
+ innerRadius,
1531
+ outerRadius,
1532
+ mLabel.color,
1533
+ mLabel.label
1534
+ );
1535
+ }
1536
+ if (data2.dt == dtfusionrna) {
1537
+ const color = FusionColorProvider.getColor(data2.chrA, data2.chrB);
1538
+ if (data2.geneA) {
1539
+ const startAngleSource = this.calculateStartAngle(data2.chrA, data2.posA);
1540
+ const endAngleSource = this.calculateEndAngle(data2.chrA, data2.posA);
1541
+ if (startAngleSource === null || endAngleSource === null) return;
1542
+ this.addLabelOrFusion(
1543
+ data2,
1544
+ data2.geneA,
1545
+ data2.posA,
1546
+ data2.chrA,
1547
+ startAngleSource,
1548
+ endAngleSource,
1549
+ innerRadius,
1550
+ outerRadius,
1551
+ color
1552
+ );
1553
+ }
1554
+ if (data2.geneB && data2.geneA != data2.geneB) {
1555
+ const startAngleTarget = this.calculateStartAngle(data2.chrB, data2.posB);
1556
+ const endAngleTarget = this.calculateEndAngle(data2.chrB, data2.posB);
1557
+ if (startAngleTarget == null || endAngleTarget == null) return;
1558
+ this.addLabelOrFusion(
1559
+ data2,
1560
+ data2.geneB,
1561
+ data2.posB,
1562
+ data2.chrB,
1563
+ startAngleTarget,
1564
+ endAngleTarget,
1565
+ innerRadius,
1566
+ outerRadius,
1567
+ color
1568
+ );
1569
+ }
1570
+ }
1571
+ });
1572
+ const labelsArray = Array.from(this.labelMap.values());
1573
+ labelsArray.forEach((label) => {
1574
+ cnvData.forEach((cnv) => {
1575
+ if ((cnv.dt == dtcnv || cnv.dt == dtitd) && label.chr == cnv.chr && label.stop >= cnv.start && cnv.stop >= label.start) {
1576
+ const mutation = {
1577
+ dt: cnv.dt,
1578
+ value: cnv.value,
1579
+ color: cnv.dt == dtitd ? mclass[mclassitd].color : CnvColorProvider.getColor(cnv.value, this.settings, this.cnvMaxPercentileAbs),
1580
+ chr: cnv.chr,
1581
+ start: cnv.start,
1582
+ stop: cnv.stop
1583
+ };
1584
+ if (label.cnvTooltip) {
1585
+ label.cnvTooltip.push(mutation);
1586
+ } else {
1587
+ label.cnvTooltip = [];
1588
+ label.cnvTooltip.push(mutation);
1589
+ }
1590
+ }
1591
+ });
1592
+ });
1593
+ return Array.from(this.labelMap.values());
1594
+ }
1595
+ addLabelOrMutation(data, gene, mname, startAngle, endAngle, innerRadius, outerRadius, color, dataClass) {
1596
+ const label = this.labelMap.get(gene);
1597
+ const mutation = {
1598
+ mname,
1599
+ color,
1600
+ dataClass,
1601
+ chr: data.chr,
1602
+ position: data.position,
1603
+ vafs: data.vafs
1604
+ };
1605
+ if (!label) {
1606
+ this.labelMap.set(
1607
+ gene,
1608
+ LabelFactory.createLabel(
1609
+ startAngle,
1610
+ endAngle,
1611
+ innerRadius,
1612
+ outerRadius,
1613
+ data.value,
1614
+ gene,
1615
+ color,
1616
+ dataClass,
1617
+ data.chr,
1618
+ data.position,
1619
+ data.isPrioritized,
1620
+ this.settings.rings.labelsToLinesGap,
1621
+ mutation
1622
+ )
1623
+ );
1624
+ } else {
1625
+ if (label.mutationsTooltip) {
1626
+ label.start = Math.min(label.start, data.position);
1627
+ label.stop = Math.max(label.stop, data.position);
1628
+ label.mutationsTooltip.push(mutation);
1629
+ } else {
1630
+ label.mutationsTooltip = [];
1631
+ label.start = Math.min(label.start, data.position);
1632
+ label.stop = Math.max(label.stop, data.position);
1633
+ label.mutationsTooltip.push(mutation);
1634
+ }
1635
+ }
1636
+ }
1637
+ addLabelOrFusion(data, gene, position, chr, startAngle, endAngle, innerRadius, outerRadius, color) {
1638
+ const label = this.labelMap.get(gene);
1639
+ const fusionTooltip = {
1640
+ color,
1641
+ chrA: data.chrA,
1642
+ chrB: data.chrB,
1643
+ posA: data.posA,
1644
+ posB: data.posB,
1645
+ geneA: data.geneA,
1646
+ geneB: data.geneB,
1647
+ strandA: data.strandA,
1648
+ strandB: data.strandB
1649
+ };
1650
+ if (!label) {
1651
+ this.labelMap.set(
1652
+ gene,
1653
+ LabelFactory.createLabel(
1654
+ startAngle,
1655
+ endAngle,
1656
+ innerRadius,
1657
+ outerRadius,
1658
+ data.value,
1659
+ gene,
1660
+ color,
1661
+ "Fusion transcript",
1662
+ chr,
1663
+ position,
1664
+ data.isPrioritized,
1665
+ this.settings.rings.labelsToLinesGap,
1666
+ void 0,
1667
+ fusionTooltip
1668
+ )
1669
+ );
1670
+ } else {
1671
+ if (label.fusionTooltip) {
1672
+ label.start = Math.min(label.start, position);
1673
+ label.stop = Math.max(label.stop, position);
1674
+ label.fusionTooltip.push(fusionTooltip);
1675
+ } else {
1676
+ label.fusionTooltip = [];
1677
+ label.start = Math.min(label.start, position);
1678
+ label.stop = Math.max(label.stop, position);
1679
+ label.fusionTooltip.push(fusionTooltip);
1680
+ }
1681
+ }
1682
+ }
1683
+ calculateStartAngle(chr, position) {
1684
+ const index = this.reference.chromosomesOrder.findIndex((element) => element == chr);
1685
+ if (index === -1) return null;
1686
+ const chromosome = this.reference.chromosomes[index];
1687
+ return chromosome.startAngle + (chromosome.endAngle - chromosome.startAngle) * (Number(position) / chromosome.size);
1688
+ }
1689
+ calculateEndAngle(chr, position) {
1690
+ const index = this.reference.chromosomesOrder.findIndex((element) => element == chr);
1691
+ if (index === -1) return null;
1692
+ const chromosome = this.reference.chromosomes[index];
1693
+ return chromosome.startAngle + (chromosome.endAngle - chromosome.startAngle) * (Number(position) / chromosome.size);
1694
+ }
1695
+ };
1696
+
1697
+ // plots/disco/label/Labels.ts
1698
+ var Labels = class extends Ring {
1699
+ constructor(settings, elements, hasPrioritizedGenes) {
1700
+ super(
1701
+ settings.rings.labelLinesInnerRadius,
1702
+ settings.rings.labelsToLinesDistance,
1703
+ elements.sort((a, b) => {
1704
+ return a.startAngle < b.startAngle ? -1 : a.startAngle > b.startAngle ? 1 : 0;
1705
+ })
1706
+ );
1707
+ this.elementsToDisplay = [];
1708
+ this.settings = settings;
1709
+ this.hasPrioritizedGenes = hasPrioritizedGenes;
1710
+ const circumference = 2 * Math.PI * (settings.rings.labelLinesInnerRadius + settings.rings.labelsToLinesDistance);
1711
+ this.overlapAngle = this.settings.label.overlapAngleFactor * this.settings.label.fontSize / circumference;
1712
+ this.calculateCollisions();
1713
+ }
1714
+ calculateCollisions() {
1715
+ this.collisions = [];
1716
+ let hasPrioritizedGenesList = [];
1717
+ hasPrioritizedGenesList = this.elements.filter((label) => label.isPrioritized);
1718
+ if (this.settings.label.prioritizeGeneLabelsByGeneSets) {
1719
+ this.elementsToDisplay = this.getLabelsWithPrioritizedGenes(hasPrioritizedGenesList);
1720
+ } else if (this.hasPrioritizedGenes) {
1721
+ const prioritizedGenesList = this.elements.filter((label) => label.isPrioritized);
1722
+ const filteredPrioritizedGenesList = this.getLabelsWithPrioritizedGenes(prioritizedGenesList);
1723
+ const withoutPrioritizedGenesList = this.elements.filter((label) => !label.isPrioritized);
1724
+ const combinedAndSortedList = [...withoutPrioritizedGenesList, ...filteredPrioritizedGenesList].sort(
1725
+ (a, b) => a.startAngle - b.startAngle
1726
+ );
1727
+ this.elementsToDisplay = this.getAllLabels(combinedAndSortedList);
1728
+ } else {
1729
+ this.elementsToDisplay = this.getLabelsWithPrioritizedGenes(this.elements);
1730
+ }
1731
+ }
1732
+ getLabelsWithPrioritizedGenes(elemenets) {
1733
+ const filteredList = [];
1734
+ let prev = { endAngle: 0 };
1735
+ elemenets.forEach((element, index) => {
1736
+ if (index == 0) {
1737
+ filteredList.push(element);
1738
+ prev = element;
1739
+ } else {
1740
+ const overlap = prev.endAngle - element.startAngle + this.overlapAngle;
1741
+ if (overlap > 0 && overlap < this.settings.label.maxDeltaAngle) {
1742
+ const labelCopy = LabelFactory.createMovedLabel(element, overlap);
1743
+ filteredList?.push(labelCopy);
1744
+ prev = labelCopy;
1745
+ }
1746
+ if (overlap <= 0) {
1747
+ filteredList.push(element);
1748
+ prev = element;
1749
+ }
1750
+ }
1751
+ });
1752
+ return filteredList;
1753
+ }
1754
+ getAllLabels(elemenets) {
1755
+ const filteredList = [];
1756
+ let prev = { endAngle: 0 };
1757
+ const elemenetsLength = elemenets.length;
1758
+ let lastCancerGeneLabelIndex = -1;
1759
+ for (let index = 0; index < elemenets.length; index++) {
1760
+ const element = elemenets[index];
1761
+ if (element.isPrioritized) {
1762
+ filteredList.push(element);
1763
+ lastCancerGeneLabelIndex = index;
1764
+ prev = element;
1765
+ continue;
1766
+ }
1767
+ if (index == 0) {
1768
+ if (elemenetsLength > 1) {
1769
+ if (this.isElementOverlappingNextCancerGene(elemenets, lastCancerGeneLabelIndex, element, 0)) {
1770
+ continue;
1771
+ }
1772
+ filteredList.push(element);
1773
+ prev = element;
1774
+ }
1775
+ continue;
1776
+ }
1777
+ const prevOverlap = prev.endAngle - element.startAngle + this.overlapAngle;
1778
+ if (prevOverlap > 0 && prevOverlap < this.settings.label.maxDeltaAngle) {
1779
+ if (index == length - 1) {
1780
+ filteredList.push(element);
1781
+ continue;
1782
+ }
1783
+ if (this.isElementOverlappingNextCancerGene(elemenets, lastCancerGeneLabelIndex, element, prevOverlap)) {
1784
+ continue;
1785
+ }
1786
+ const labelCopy = LabelFactory.createMovedLabel(element, prevOverlap);
1787
+ this.collisions?.push(labelCopy);
1788
+ filteredList.push(element);
1789
+ prev = labelCopy;
1790
+ }
1791
+ if (prevOverlap <= 0) {
1792
+ if (this.isElementOverlappingNextCancerGene(elemenets, lastCancerGeneLabelIndex, element, 0)) {
1793
+ continue;
1794
+ }
1795
+ filteredList.push(element);
1796
+ prev = element;
1797
+ }
1798
+ }
1799
+ return filteredList;
1800
+ }
1801
+ isElementOverlappingNextCancerGene(elemenets, lastCancerGeneLabelIndex, element, prevOverlap) {
1802
+ const nextLabelWithCancerGene = this.getNextLabelWithCancerGene(elemenets, lastCancerGeneLabelIndex);
1803
+ if (nextLabelWithCancerGene) {
1804
+ const nextOverlap = element.endAngle + prevOverlap - nextLabelWithCancerGene.startAngle + this.overlapAngle;
1805
+ if (nextOverlap > 0) {
1806
+ return true;
1807
+ }
1808
+ }
1809
+ return false;
1810
+ }
1811
+ getNextLabelWithCancerGene(elemenets, lastCancerGeneLabelIndex) {
1812
+ return elemenets.find((label, index) => label.isPrioritized && index > lastCancerGeneLabelIndex);
1813
+ }
1814
+ };
1815
+
1816
+ // plots/disco/snv/NonExonicSnvArcsMapper.ts
1817
+ var NonExonicSnvArcsMapper = class {
1818
+ constructor(nonExonicInnerRadius, nonExonicWidht, sampleName, reference) {
1819
+ this.nonExonicInnerRadius = nonExonicInnerRadius;
1820
+ this.nonExonicWidht = nonExonicWidht;
1821
+ this.sampleName = sampleName;
1822
+ this.reference = reference;
1823
+ this.onePxArcAngle = 1 / nonExonicInnerRadius;
1824
+ }
1825
+ map(arcData) {
1826
+ const innerRadius = this.nonExonicInnerRadius;
1827
+ const outerRadius = innerRadius + this.nonExonicWidht;
1828
+ const arcs = [];
1829
+ arcData.forEach((data) => {
1830
+ const mLabel = MLabel.getInstance().mlabel ? MLabel.getInstance().mlabel[data.mClass] : void 0;
1831
+ const startAngle = this.calculateStartAngle(data);
1832
+ const endAngle = this.calculateEndAngle(data);
1833
+ if (startAngle === null || endAngle === null) return;
1834
+ const arc = {
1835
+ startAngle,
1836
+ endAngle,
1837
+ innerRadius,
1838
+ outerRadius,
1839
+ color: mLabel.color,
1840
+ text: data.gene,
1841
+ dataClass: mLabel.label,
1842
+ mname: data.mname,
1843
+ chr: data.chr,
1844
+ pos: data.position,
1845
+ vafs: data.vafs,
1846
+ sampleName: [data.sampleName]
1847
+ };
1848
+ arcs.push(arc);
1849
+ });
1850
+ return arcs;
1851
+ }
1852
+ calculateStartAngle(data) {
1853
+ const index = this.reference.chromosomesOrder.indexOf(data.chr);
1854
+ if (index === -1) return null;
1855
+ const chromosome = this.reference.chromosomes[index];
1856
+ return chromosome.startAngle + (chromosome.endAngle - chromosome.startAngle) * (Number(data.position) / chromosome.size) - this.onePxArcAngle;
1857
+ }
1858
+ calculateEndAngle(data) {
1859
+ const index = this.reference.chromosomesOrder.indexOf(data.chr);
1860
+ const chromosome = this.reference.chromosomes[index];
1861
+ return this.onePxArcAngle + chromosome.startAngle + (chromosome.endAngle - chromosome.startAngle) * (Number(data.position) / chromosome.size);
1862
+ }
1863
+ };
1864
+
1865
+ // plots/disco/loh/GradientColorProvider.ts
1866
+ var GradientColorProvider = class {
1867
+ static provide(value) {
1868
+ const clampedValue = Math.min(Math.max(value, 0), 1);
1869
+ const colorValue = Math.round(clampedValue * 255);
1870
+ return `rgb(${colorValue}, ${colorValue}, ${colorValue})`;
1871
+ }
1872
+ };
1873
+
1874
+ // plots/disco/loh/LohArcMapper.ts
1875
+ var LohArcMapper = class {
1876
+ constructor(lohInnerRadius, lohWidth, sampleName, reference) {
1877
+ this.lohInnerRadius = lohInnerRadius;
1878
+ this.lohWidth = lohWidth;
1879
+ this.sampleName = sampleName;
1880
+ this.reference = reference;
1881
+ }
1882
+ map(arcData) {
1883
+ const arcs = [];
1884
+ arcData.forEach((data) => {
1885
+ const startAngle = this.calculateStartAngle(data);
1886
+ const endAngle = this.calculateEndAngle(data);
1887
+ if (startAngle === null || endAngle === null) return;
1888
+ const innerRadius = this.lohInnerRadius;
1889
+ const outerRadius = innerRadius + this.lohWidth;
1890
+ const color = GradientColorProvider.provide(data.segmean);
1891
+ const arc = {
1892
+ startAngle,
1893
+ endAngle,
1894
+ innerRadius,
1895
+ outerRadius,
1896
+ color,
1897
+ text: data.gene,
1898
+ chr: data.chr,
1899
+ start: data.start,
1900
+ stop: data.stop,
1901
+ value: data.segmean
1902
+ };
1903
+ arcs.push(arc);
1904
+ });
1905
+ return arcs;
1906
+ }
1907
+ calculateStartAngle(data) {
1908
+ const index = this.reference.chromosomesOrder.indexOf(data.chr);
1909
+ if (index === -1) return null;
1910
+ const chromosome = this.reference.chromosomes[index];
1911
+ return chromosome.startAngle + (chromosome.endAngle - chromosome.startAngle) * (Number(data.start) / chromosome.size);
1912
+ }
1913
+ calculateEndAngle(data) {
1914
+ const index = this.reference.chromosomesOrder.indexOf(data.chr);
1915
+ const chromosome = this.reference.chromosomes[index];
1916
+ return chromosome.startAngle + (chromosome.endAngle - chromosome.startAngle) * (Number(data.stop) / chromosome.size);
1917
+ }
1918
+ };
1919
+
1920
+ // plots/disco/ring/Rings.ts
1921
+ var Rings = class {
1922
+ constructor(labelsRing, chromosomesRing, nonExonicArcRing, snvArcRing, cnvArcRing, lohArcRing, mutationWaterfallRing) {
1923
+ this.labelsRing = labelsRing;
1924
+ this.chromosomesRing = chromosomesRing;
1925
+ this.nonExonicArcRing = nonExonicArcRing;
1926
+ this.snvArcRing = snvArcRing;
1927
+ this.cnvArcRing = cnvArcRing;
1928
+ this.lohArcRing = lohArcRing;
1929
+ this.mutationWaterfallRing = mutationWaterfallRing;
1930
+ }
1931
+ };
1932
+
1933
+ // plots/disco/waterfall/MutationWaterfallMapper.ts
1934
+ var MutationWaterfallMapper = class {
1935
+ constructor(innerRadius, ringWidth, reference, logRange, color = "#4d4d4d") {
1936
+ this.innerRadius = innerRadius;
1937
+ this.ringWidth = ringWidth;
1938
+ this.reference = reference;
1939
+ this.logRange = logRange;
1940
+ this.color = color;
1941
+ }
1942
+ map(data = []) {
1943
+ if (!data.length) return [];
1944
+ const min = this.logRange?.min ?? 0;
1945
+ const max = this.logRange?.max ?? min + 1;
1946
+ const span = max - min || 1;
1947
+ const points = [];
1948
+ for (const datum of data) {
1949
+ const chrIndex = this.reference.chromosomesOrder.indexOf(datum.chr);
1950
+ if (chrIndex === -1) continue;
1951
+ const chromosome = this.reference.chromosomes[chrIndex];
1952
+ const chrAngleSpan = chromosome.endAngle - chromosome.startAngle;
1953
+ const relPos = chromosome.size > 0 ? datum.position / chromosome.size : 0;
1954
+ const angle = chromosome.startAngle + chrAngleSpan * relPos;
1955
+ const normalized = Math.max(0, Math.min(1, (datum.logDistance - min) / span));
1956
+ const radius = this.innerRadius + this.ringWidth * normalized;
1957
+ points.push({
1958
+ startAngle: angle,
1959
+ endAngle: angle,
1960
+ innerRadius: radius,
1961
+ outerRadius: radius,
1962
+ text: chromosome.text,
1963
+ color: this.color,
1964
+ chr: datum.chr,
1965
+ position: datum.position,
1966
+ logDistance: datum.logDistance,
1967
+ ringInnerRadius: this.innerRadius,
1968
+ ringWidth: this.ringWidth,
1969
+ rangeMin: min,
1970
+ rangeMax: max
1971
+ });
1972
+ }
1973
+ return points;
1974
+ }
1975
+ };
1976
+
1977
+ // plots/disco/viewmodel/ViewModelProvider.ts
1978
+ var ViewModelProvider = class {
1979
+ constructor(settings, dataMapper, reference, sampleName, genesetName, discoInteractions) {
1980
+ this.nonExonicArcRing = void 0;
1981
+ this.settings = settings;
1982
+ this.dataMapper = dataMapper;
1983
+ this.reference = reference;
1984
+ this.sampleName = sampleName;
1985
+ this.genesetName = genesetName;
1986
+ this.discoInteractions = discoInteractions;
1987
+ }
1988
+ map(data) {
1989
+ const dataHolder = this.dataMapper.map(data);
1990
+ let labelsRing;
1991
+ if (this.settings.Disco.showGeneNames) {
1992
+ const labelsMapper = new LabelsMapper(
1993
+ this.settings,
1994
+ this.sampleName,
1995
+ this.reference,
1996
+ dataHolder.cnvMaxPercentileAbs
1997
+ );
1998
+ const labelsData = labelsMapper.map(dataHolder.labelData, dataHolder.cnvData);
1999
+ labelsRing = new Labels(this.settings, labelsData, dataHolder.hasPrioritizedGenes);
2000
+ } else {
2001
+ labelsRing = new Labels(this.settings, [], false);
2002
+ }
2003
+ const chromosomesRing = new Ring(
2004
+ this.settings.rings.chromosomeInnerRadius,
2005
+ this.settings.rings.chromosomeWidth,
2006
+ this.reference.chromosomes
2007
+ );
2008
+ const nonExonicSnvArcsMapper = new NonExonicSnvArcsMapper(
2009
+ dataHolder.nonExonicInnerRadius,
2010
+ this.settings.rings.nonExonicRingWidth,
2011
+ this.sampleName,
2012
+ this.reference
2013
+ );
2014
+ const nonExonicData = nonExonicSnvArcsMapper.map(dataHolder.nonExonicSnvData);
2015
+ if (nonExonicData.length > 0) {
2016
+ this.nonExonicArcRing = new Ring(
2017
+ dataHolder.nonExonicInnerRadius,
2018
+ this.settings.rings.nonExonicRingWidth,
2019
+ nonExonicData
2020
+ );
2021
+ }
2022
+ this.snvArcsMapper = new SnvArcsMapper(
2023
+ dataHolder.snvInnerRadius,
2024
+ this.settings.rings.snvRingWidth,
2025
+ this.sampleName,
2026
+ this.reference
2027
+ );
2028
+ const snvData = this.snvArcsMapper.map(dataHolder.snvRingDataMap);
2029
+ if (snvData.length > 0) {
2030
+ this.snvArcRing = new Ring(dataHolder.snvInnerRadius, this.settings.rings.snvRingWidth, snvData);
2031
+ }
2032
+ const lohMapper = new LohArcMapper(
2033
+ dataHolder.lohInnerRadius,
2034
+ this.settings.rings.lohRingWidth,
2035
+ this.sampleName,
2036
+ this.reference
2037
+ );
2038
+ const lohData = lohMapper.map(dataHolder.lohData);
2039
+ if (lohData.length > 0) {
2040
+ this.lohArcRing = new Ring(dataHolder.lohInnerRadius, this.settings.rings.lohRingWidth, lohData);
2041
+ }
2042
+ this.cnvArcsMapper = new CnvArcsMapper(
2043
+ dataHolder.cnvInnerRadius,
2044
+ this.settings.rings.cnvRingWidth,
2045
+ this.settings,
2046
+ this.sampleName,
2047
+ this.reference,
2048
+ dataHolder.percentilePositive,
2049
+ dataHolder.percentileNegative,
2050
+ dataHolder.cappedCnvMaxAbsValue,
2051
+ dataHolder.cnvMaxPercentileAbs,
2052
+ this.settings.cnv.unit,
2053
+ this.settings.Disco.cnvRenderingType
2054
+ );
2055
+ const cnvData = this.cnvArcsMapper.map(dataHolder.cnvData);
2056
+ if (cnvData.length > 0) {
2057
+ this.cnvArcRing = new Ring(dataHolder.cnvInnerRadius, this.settings.rings.cnvRingWidth, cnvData);
2058
+ }
2059
+ if (this.settings.Disco.mutationWaterfallPlot && dataHolder.mutationWaterfallData?.length && dataHolder.mutationWaterfallInnerRadius !== void 0 && //Added this check to prevent TypeScript error "mutationWaterfallInnerRadius might be undefined"
2060
+ (dataHolder.mutationWaterfallInnerRadius ?? 0) > 0 && dataHolder.mutationWaterfallLogRange) {
2061
+ const mutationWaterfallMapper = new MutationWaterfallMapper(
2062
+ dataHolder.mutationWaterfallInnerRadius,
2063
+ this.settings.rings.mutationWaterfallRingWidth,
2064
+ this.reference,
2065
+ dataHolder.mutationWaterfallLogRange,
2066
+ this.settings.Disco.mutationWaterfallColor || "#4d4d4d"
2067
+ );
2068
+ const waterfallData = mutationWaterfallMapper.map(dataHolder.mutationWaterfallData);
2069
+ if (waterfallData.length > 0) {
2070
+ this.mutationWaterfallRing = new Ring(
2071
+ dataHolder.mutationWaterfallInnerRadius,
2072
+ this.settings.rings.mutationWaterfallRingWidth,
2073
+ waterfallData
2074
+ );
2075
+ }
2076
+ }
2077
+ const fusionMapper = new FusionMapper(dataHolder.fusionRadius, this.sampleName, this.reference);
2078
+ const fusions = fusionMapper.map(dataHolder.fusionData);
2079
+ let lohLegend;
2080
+ if (this.settings.legend.lohLegendEnabled && dataHolder.lohData.length) {
2081
+ lohLegend = new LohLegend(dataHolder.lohData.length);
2082
+ }
2083
+ const fusionLegendCounts = fusions.reduce(
2084
+ (counts, fusion) => {
2085
+ if (fusion.target && fusion.source.positionInChromosome.chromosome == fusion.target.positionInChromosome.chromosome)
2086
+ counts.intrachromosomal++;
2087
+ else counts.interchromosomal++;
2088
+ return counts;
2089
+ },
2090
+ { interchromosomal: 0, intrachromosomal: 0 }
2091
+ );
2092
+ const legend = new Legend(
2093
+ this.settings.legend.snvTitle,
2094
+ this.settings.legend.cnvTitle,
2095
+ this.settings.legend.lohTitle,
2096
+ this.settings.legend.fusionTitle,
2097
+ this.settings.Disco.cnvPercentile,
2098
+ this.settings.Disco.cnvCutoffMode,
2099
+ this.snvArcsMapper ? this.snvArcsMapper.snvClassMap : /* @__PURE__ */ new Map(),
2100
+ this.cnvArcsMapper ? this.cnvArcsMapper.cnvClassMap : /* @__PURE__ */ new Map(),
2101
+ this.settings.Disco.cnvRenderingType,
2102
+ fusions.length > 0,
2103
+ this.discoInteractions,
2104
+ lohLegend,
2105
+ this.settings.Disco.mutationWaterfallPlot && this.mutationWaterfallRing ? {
2106
+ color: this.settings.Disco.mutationWaterfallColor || "#4d4d4d",
2107
+ onColorChange: this.discoInteractions.onMutationWaterfallColorChange
2108
+ } : void 0,
2109
+ fusionLegendCounts,
2110
+ dataHolder.cnvData.filter((event) => event.dt == dtcnv).length
2111
+ );
2112
+ const rings = new Rings(
2113
+ labelsRing,
2114
+ chromosomesRing,
2115
+ this.nonExonicArcRing,
2116
+ this.snvArcRing,
2117
+ this.cnvArcRing,
2118
+ this.lohArcRing,
2119
+ this.mutationWaterfallRing
2120
+ );
2121
+ return new ViewModel(
2122
+ this.settings,
2123
+ rings,
2124
+ legend,
2125
+ fusions,
2126
+ dataHolder,
2127
+ this.genesetName,
2128
+ data.filter((i) => i.dt == dtsnvindel).length
2129
+ );
2130
+ }
2131
+ };
2132
+
2133
+ // plots/disco/viewmodel/ViewModelMapper.ts
2134
+ var ViewModelMapper = class _ViewModelMapper {
2135
+ static {
2136
+ this.snvClassLayer = {
2137
+ M: "exonic",
2138
+ E: "exonic",
2139
+ F: "exonic",
2140
+ N: "exonic",
2141
+ S: "exonic",
2142
+ D: "exonic",
2143
+ I: "exonic",
2144
+ P: "exonic",
2145
+ L: "exonic",
2146
+ Utr3: "exonic",
2147
+ Utr5: "exonic",
2148
+ ProteinAltering: "exonic",
2149
+ mnv: "non-exonic",
2150
+ ITD: "non-exonic",
2151
+ insertion: "non-exonic",
2152
+ deletion: "non-exonic",
2153
+ Intron: "non-exonic",
2154
+ X: "non-exonic",
2155
+ noncoding: "non-exonic"
2156
+ };
2157
+ }
2158
+ constructor(settings, discoInteractions) {
2159
+ this.settings = JSON.parse(JSON.stringify(settings));
2160
+ this.discoInteractions = discoInteractions;
2161
+ }
2162
+ applyRadius() {
2163
+ const radius = this.settings.Disco.radius;
2164
+ if (!radius) return;
2165
+ const scale = radius / this.settings.rings.labelLinesInnerRadius;
2166
+ this.settings.rings.labelLinesInnerRadius *= scale;
2167
+ this.settings.rings.labelsToLinesDistance *= scale;
2168
+ this.settings.rings.chromosomeInnerRadius *= scale;
2169
+ }
2170
+ static computeDynamicRadius(data) {
2171
+ let ringCount = 0;
2172
+ if (data.some((d) => d.dt == dtsnvindel)) ringCount++;
2173
+ if (data.some((d) => d.dt == dtcnv || d.dt == dtitd)) ringCount++;
2174
+ if (data.some((d) => d.dt == dtloh)) ringCount++;
2175
+ if (ringCount <= 1) return 200;
2176
+ if (ringCount == 2) return 250;
2177
+ return 300;
2178
+ }
2179
+ map(opts) {
2180
+ const chrSizes = opts.args.genome.majorchr;
2181
+ const chromosomesOverride = {};
2182
+ for (const chr of Object.keys(chrSizes)) {
2183
+ if (!this.settings.Disco.hiddenChromosomes.includes(chr)) {
2184
+ chromosomesOverride[chr] = chrSizes[chr];
2185
+ }
2186
+ }
2187
+ const sampleName = opts.args.sampleName;
2188
+ const genome = opts.args.genome;
2189
+ const prioritizedGenes = genome?.geneset?.[0] ? genome.geneset[0].lst : [];
2190
+ const genesetName = genome?.geneset?.[0] ? genome.geneset[0].name : "";
2191
+ const data = opts.args.data;
2192
+ if (this.settings.Disco.autoRadius) {
2193
+ this.settings.Disco.radius = _ViewModelMapper.computeDynamicRadius(data);
2194
+ }
2195
+ this.applyRadius();
2196
+ const reference = new Reference(this.settings, chrSizes, chromosomesOverride);
2197
+ const dataMapper = new DataMapper(this.settings, reference, sampleName, prioritizedGenes);
2198
+ return new ViewModelProvider(
2199
+ this.settings,
2200
+ dataMapper,
2201
+ reference,
2202
+ sampleName,
2203
+ genesetName,
2204
+ this.discoInteractions
2205
+ ).map(data);
2206
+ }
2207
+ };
2208
+
2209
+ // plots/disco/legend/LegendJSONMapper.ts
2210
+ var LegendJSONMapper = class {
2211
+ constructor(cappedCnvMaxAbsValue) {
2212
+ this.cappedCnvMaxAbsValue = cappedCnvMaxAbsValue;
2213
+ }
2214
+ map(legend) {
2215
+ const legendJSON = [];
2216
+ let order = 0;
2217
+ if (legend.snvClassMap) {
2218
+ this.mapSnv(legend, legendJSON, order++);
2219
+ }
2220
+ if (legend.cnvCount > 0 && legend.cnvRenderingType == "heatmap" /* heatmap */) {
2221
+ this.mapCnvHeatmap(legend, legendJSON, order++);
2222
+ } else if (legend.cnvCount > 0 && legend.cnvRenderingType == "bar" /* bar */) {
2223
+ if (legend.cnvClassMap) {
2224
+ this.mapCnvBar(legend, legendJSON, order++);
2225
+ }
2226
+ }
2227
+ if (legend.cnvClassMap.has(4 /* ITD */)) {
2228
+ this.mapItd(legend, legendJSON, order++);
2229
+ }
2230
+ if (legend.lohLegend) {
2231
+ this.mapLoh(legend, legendJSON, order++);
2232
+ }
2233
+ if (legend.fusionLegend) {
2234
+ this.mapFusion(legend, legendJSON, order++);
2235
+ }
2236
+ if (legend.mutationWaterfallLegend) {
2237
+ this.mapMutationWaterfall(legend, legendJSON, order++);
2238
+ }
2239
+ return legendJSON;
2240
+ }
2241
+ mapSnv(legend, legendJSON, order) {
2242
+ const snvItems = [];
2243
+ let snvOrder = 0;
2244
+ for (const [snvKey, snvLegendElement] of legend.snvClassMap) {
2245
+ snvItems.push({
2246
+ termid: legend.snvTitle,
2247
+ key: snvKey,
2248
+ text: `${snvLegendElement.snvType} (${snvLegendElement.count})`,
2249
+ color: snvLegendElement.color,
2250
+ order: snvOrder++
2251
+ });
2252
+ }
2253
+ legendJSON.push({
2254
+ name: legend.snvTitle,
2255
+ order,
2256
+ items: snvItems
2257
+ });
2258
+ }
2259
+ mapCnvBar(legend, legendJSON, order) {
2260
+ if (!legend.cnvClassMap) return;
2261
+ const gain = legend.cnvClassMap.get(1 /* Gain */);
2262
+ const loss = legend.cnvClassMap.get(0 /* Loss */);
2263
+ const cap = legend.cnvClassMap.get(2 /* Cap */);
2264
+ if (gain && loss && cap) {
2265
+ let cnvOrder = 0;
2266
+ const cnvItems = [];
2267
+ if (gain.value > 0) {
2268
+ cnvItems.push({
2269
+ termid: legend.cnvTitle,
2270
+ key: 1 /* Gain */,
2271
+ text: `Max: ${gain.value}`,
2272
+ color: gain.color,
2273
+ order: cnvOrder++
2274
+ });
2275
+ }
2276
+ if (loss.value < 0) {
2277
+ cnvItems.push({
2278
+ termid: legend.cnvTitle,
2279
+ key: 0 /* Loss */,
2280
+ text: `Min: ${loss.value}`,
2281
+ color: loss.color,
2282
+ order: cnvOrder++
2283
+ });
2284
+ }
2285
+ cnvItems.push({
2286
+ termid: legend.cnvTitle,
2287
+ key: 2 /* Cap */,
2288
+ text: `Capping: ${cap.value}`,
2289
+ color: cap.color,
2290
+ order: cnvOrder++
2291
+ // ,
2292
+ // onClickCallback: this.onClickCallback
2293
+ });
2294
+ legendJSON.push({
2295
+ name: legend.cnvTitle,
2296
+ id: "sjpp-disco-cnv-legend",
2297
+ order,
2298
+ items: cnvItems
2299
+ });
2300
+ }
2301
+ }
2302
+ mapCnvHeatmap(legend, legendJSON, order) {
2303
+ if (!legend.cnvClassMap) return;
2304
+ const gain = legend.cnvClassMap.get(1 /* Gain */);
2305
+ const loss = legend.cnvClassMap.get(0 /* Loss */);
2306
+ const cap = legend.cnvClassMap.get(2 /* Cap */);
2307
+ if (gain && loss && cap) {
2308
+ let cnvOrder = 0;
2309
+ const cnvItems = [];
2310
+ const base = {
2311
+ termid: legend.cnvTitle,
2312
+ width: 100,
2313
+ order: cnvOrder++,
2314
+ isLegendItem: true,
2315
+ dt: 4
2316
+ };
2317
+ if (gain.value > 0 && loss.value < 0) {
2318
+ const maxValue = Math.max(Math.abs(loss.value), gain.value);
2319
+ const domain = [-maxValue, 0, maxValue];
2320
+ cnvItems.push(
2321
+ Object.assign(
2322
+ {
2323
+ key: 3 /* LossGain */,
2324
+ domain,
2325
+ scale: linear([-1, 0, 1], [loss.color, "white", gain.color]),
2326
+ labels: { left: "Loss", right: "Gain" },
2327
+ numericInputs: {
2328
+ cutoffMode: legend.cnvCutoffMode,
2329
+ defaultPercentile: legend.cnvPercentile,
2330
+ callback: (obj) => legend.discoInteractions.colorScaleNumericInputsCallback(obj)
2331
+ }
2332
+ },
2333
+ base
2334
+ )
2335
+ );
2336
+ } else {
2337
+ if (gain.value > 0) {
2338
+ cnvItems.push(
2339
+ Object.assign(
2340
+ {
2341
+ key: 1 /* Gain */,
2342
+ text: "Copy number gain",
2343
+ domain: [0, gain.value],
2344
+ scale: linear([0, 1], ["white", gain.color])
2345
+ },
2346
+ base
2347
+ )
2348
+ );
2349
+ }
2350
+ if (loss.value < 0) {
2351
+ cnvItems.push(
2352
+ Object.assign(
2353
+ {
2354
+ key: 0 /* Loss */,
2355
+ text: "Copy number loss",
2356
+ domain: [loss.value, 0],
2357
+ scale: linear([0, 1], [loss.color, "white"])
2358
+ },
2359
+ base
2360
+ )
2361
+ );
2362
+ }
2363
+ }
2364
+ legendJSON.push({
2365
+ name: legend.cnvTitle,
2366
+ order,
2367
+ id: "sjpp-disco-cnv-legend",
2368
+ items: cnvItems
2369
+ });
2370
+ }
2371
+ }
2372
+ mapItd(legend, legendJSON, order) {
2373
+ const itd = legend.cnvClassMap.get(4 /* ITD */);
2374
+ if (!itd) return;
2375
+ legendJSON.push({
2376
+ name: "ITD",
2377
+ order,
2378
+ items: [
2379
+ {
2380
+ termid: "ITD",
2381
+ key: 4 /* ITD */,
2382
+ text: `ITD (${itd.value})`,
2383
+ color: itd.color,
2384
+ order: 0
2385
+ }
2386
+ ]
2387
+ });
2388
+ }
2389
+ mapLoh(legend, legendJSON, order) {
2390
+ if (!legend.lohLegend) return;
2391
+ legendJSON.push({
2392
+ name: legend.lohTitle,
2393
+ order,
2394
+ items: [
2395
+ {
2396
+ termid: legend.lohTitle,
2397
+ key: "count",
2398
+ text: `LOH (${legend.lohLegend.count})`,
2399
+ skipIcon: true,
2400
+ order: 0
2401
+ }
2402
+ ]
2403
+ });
2404
+ }
2405
+ mapFusion(legend, legendJSON, order) {
2406
+ const fusionItems = [];
2407
+ fusionItems.push({
2408
+ termid: legend.fusionTitle,
2409
+ key: "#6A3D9A" /* Interchromosomal */,
2410
+ text: `Interchromosomal (${legend.fusionLegendCounts.interchromosomal})`,
2411
+ color: "#6A3D9A" /* Interchromosomal */.valueOf(),
2412
+ order: 0
2413
+ });
2414
+ fusionItems.push({
2415
+ termid: legend.fusionTitle,
2416
+ key: "#1B9E77" /* Intrachromosomal */,
2417
+ text: `Intrachromosomal (${legend.fusionLegendCounts.intrachromosomal})`,
2418
+ color: "#1B9E77" /* Intrachromosomal */.valueOf(),
2419
+ order: 1
2420
+ });
2421
+ legendJSON.push({
2422
+ name: legend.fusionTitle,
2423
+ order,
2424
+ items: fusionItems
2425
+ });
2426
+ }
2427
+ mapMutationWaterfall(legend, legendJSON, order) {
2428
+ if (!legend.mutationWaterfallLegend) return;
2429
+ const waterfallItems = [];
2430
+ waterfallItems.push({
2431
+ termid: "Mutation Waterfall Plot",
2432
+ key: "mutation-waterfall-color",
2433
+ text: "Dot color",
2434
+ color: legend.mutationWaterfallLegend.color,
2435
+ order: 0,
2436
+ colorPicker: true,
2437
+ inputWidth: 28,
2438
+ width: 0,
2439
+ onColorChange: legend.mutationWaterfallLegend.onColorChange
2440
+ });
2441
+ waterfallItems.push({
2442
+ termid: "Mutation Waterfall Plot",
2443
+ key: "mutation-waterfall-axis",
2444
+ text: "Axis: log10 intermutation distance",
2445
+ order: 1,
2446
+ skipIcon: true,
2447
+ width: 0
2448
+ });
2449
+ legendJSON.push({
2450
+ name: "Mutation Waterfall Plot",
2451
+ order,
2452
+ items: waterfallItems
2453
+ });
2454
+ }
2455
+ };
2456
+
2457
+ // plots/disco/cnv/renderCnvSourceLegend.ts
2458
+ function parseSetLabel(set, index) {
2459
+ let text = set.name || `Set ${index + 1}`;
2460
+ let href;
2461
+ let target = "_blank";
2462
+ if (set.nameHtml) {
2463
+ const parser = new DOMParser();
2464
+ const doc = parser.parseFromString(set.nameHtml, "text/html");
2465
+ const anchor = doc.querySelector("a");
2466
+ if (anchor) {
2467
+ href = anchor.getAttribute("href") || void 0;
2468
+ target = anchor.getAttribute("target") || "_blank";
2469
+ text = anchor.textContent?.trim() || text;
2470
+ } else {
2471
+ text = doc.body.textContent?.trim() || text;
2472
+ }
2473
+ }
2474
+ return { text, href, target };
2475
+ }
2476
+ function renderCnvSourceLegend(legendG, datasets, fontSize, onChange) {
2477
+ if (!legendG || legendG.empty()) throw new Error("legendG is required");
2478
+ if (!datasets || datasets.length === 0) throw new Error("at least one dataset is required");
2479
+ legendG.select("g.sjpp-cnv-source").remove();
2480
+ const gBBox = legendG.node().getBBox();
2481
+ const cnvSrcWrapper = legendG.append("g").attr("class", "sjpp-cnv-source").attr("transform", `translate(${gBBox.width},${gBBox.y + fontSize})`);
2482
+ const btnPaddingX = Math.round(fontSize * 0.8);
2483
+ const btnHgt = Math.round(fontSize * 1.8);
2484
+ const btnWrapper = cnvSrcWrapper.append("g").attr("transform", `translate(${fontSize},${-btnHgt / 2})`).style("cursor", "pointer").on("click", function(event) {
2485
+ event.stopPropagation();
2486
+ showCnvMenu(this);
2487
+ });
2488
+ const btnText = btnWrapper.append("text").attr("x", 0).attr("y", btnHgt / 2).attr("font-size", fontSize).attr("text-anchor", "start").attr("dominant-baseline", "middle").text("Select source \u25B2".toUpperCase());
2489
+ const textW = btnText.node() ? Math.ceil(btnText.node().getBBox().width) : 0;
2490
+ const btnWdt = textW + btnPaddingX * 2;
2491
+ btnWrapper.insert("rect", ":first-child").attr("width", btnWdt).attr("height", btnHgt).attr("rx", 10).attr("ry", 10).style("fill", "#f2f2f2");
2492
+ btnText.attr("x", btnWdt / 2).attr("text-anchor", "middle");
2493
+ const cnvMenu = new Menu({
2494
+ onHide: () => {
2495
+ btnText.text("Select source \u25B2".toUpperCase());
2496
+ }
2497
+ });
2498
+ function showCnvMenu(dom) {
2499
+ btnText.text("Select source \u25BC".toUpperCase());
2500
+ cnvMenu.clear().showunder(dom);
2501
+ cnvMenu.d.append("div").text("Choose data source for CNV:").style("margin", "5px 5px 0 5px");
2502
+ const tableHolder = cnvMenu.d.append("div").style("padding", "5px");
2503
+ const { columns, rows } = buildTableData(datasets);
2504
+ const [, activeIndex] = getActiveDataset(datasets);
2505
+ renderTable({
2506
+ columns,
2507
+ rows,
2508
+ div: tableHolder,
2509
+ singleMode: true,
2510
+ maxWidth: "70vw",
2511
+ maxHeight: "60vh",
2512
+ selectedRows: [activeIndex],
2513
+ header: { allowSort: false },
2514
+ noButtonCallback: (rowIndex, node) => {
2515
+ const inputIndex = Number(node?.value);
2516
+ const selectedIndex = Number.isNaN(inputIndex) ? rowIndex : inputIndex;
2517
+ if (!Number.isNaN(selectedIndex)) onChange(selectedIndex);
2518
+ cnvMenu.hide();
2519
+ }
2520
+ });
2521
+ }
2522
+ }
2523
+ function getActiveDataset(datasets) {
2524
+ let currentIndex = datasets.findIndex((d) => d.inuse);
2525
+ if (currentIndex == -1) currentIndex = 0;
2526
+ return [datasets[currentIndex], currentIndex];
2527
+ }
2528
+ function buildTableData(datasets) {
2529
+ const attrKeys = [];
2530
+ for (const set of datasets) {
2531
+ if (!set.attrs) continue;
2532
+ for (const key of Object.keys(set.attrs)) {
2533
+ if (!attrKeys.includes(key)) attrKeys.push(key);
2534
+ }
2535
+ }
2536
+ const columns = [{ label: "Source" }];
2537
+ for (const key of attrKeys) columns.push({ label: key });
2538
+ const rows = datasets.map((set, index) => {
2539
+ const sourceInfo = parseSetLabel(set, index);
2540
+ const cells = [];
2541
+ if (set.nameHtml) cells.push({ html: set.nameHtml });
2542
+ else if (sourceInfo.href) cells.push({ value: sourceInfo.text, url: sourceInfo.href });
2543
+ else cells.push({ value: sourceInfo.text });
2544
+ for (const key of attrKeys) {
2545
+ const value = set.attrs?.[key];
2546
+ cells.push({ value: value ?? "" });
2547
+ }
2548
+ return cells;
2549
+ });
2550
+ return { columns, rows };
2551
+ }
2552
+
2553
+ // plots/disco/legend/LegendRenderer.ts
2554
+ var LegendRenderer = class {
2555
+ constructor(cappedCnvMaxAbsValue = 0, fontSize) {
2556
+ this.fontSize = fontSize;
2557
+ this.legendJSONMapper = new LegendJSONMapper(cappedCnvMaxAbsValue);
2558
+ }
2559
+ render(holder, legend, xOffset, svgw, svgh, viewModel, onCnvSourceSelect) {
2560
+ const svgLegendRenderer = svgLegend({
2561
+ holder: holder.append("g").attr("data-testid", "sjpp_disco_plot_legend"),
2562
+ rectFillFxn: (d2) => d2.color,
2563
+ iconStroke: "#aaa"
2564
+ });
2565
+ const data = this.legendJSONMapper.map(legend);
2566
+ const legendTitles = data.map((d2) => d2.name.trim());
2567
+ const maxLabelWidth = getMaxLabelWidth(holder, legendTitles);
2568
+ const d = {
2569
+ xOffset: maxLabelWidth + xOffset
2570
+ };
2571
+ svgLegendRenderer(data, {
2572
+ settings: Object.assign(
2573
+ {},
2574
+ {
2575
+ svgw,
2576
+ svgh,
2577
+ dimensions: d,
2578
+ fontsize: this.fontSize
2579
+ }
2580
+ )
2581
+ });
2582
+ const altCnv = viewModel.appState.args.alternativeDataByDt?.[dtcnv];
2583
+ if (altCnv && altCnv.length > 0) {
2584
+ const legendG = holder.select('g[data-testid="sjpp_disco_plot_legend"]');
2585
+ const cnvLegendG = legendG.select("#sjpp-disco-cnv-legend");
2586
+ if (!legendG.empty()) {
2587
+ const add2G = cnvLegendG.empty() ? legendG : cnvLegendG;
2588
+ renderCnvSourceLegend(add2G, altCnv, this.fontSize, onCnvSourceSelect);
2589
+ }
2590
+ }
2591
+ }
2592
+ };
2593
+
2594
+ // plots/disco/chromosome/ChromosomesRenderer.ts
2595
+ var ChromosomesRenderer = class {
2596
+ constructor(padAngle, innerRadius, outerRadius, fontSize) {
2597
+ this.padAngle = padAngle;
2598
+ this.innerRadius = innerRadius;
2599
+ this.outerRadius = outerRadius;
2600
+ this.fontSize = fontSize;
2601
+ }
2602
+ render(holder, elements) {
2603
+ const pie = pie_default().padAngle(this.padAngle).value((d) => d.size).sort(null);
2604
+ const arcData = pie(elements);
2605
+ const arc = arc_default().innerRadius(this.innerRadius).outerRadius(this.outerRadius);
2606
+ const arcs = holder.append("g").attr("data-testid", "sjpp_chromosomes_arc_group");
2607
+ const menu = MenuProvider.create();
2608
+ arcs.selectAll("path").data(arcData).enter().append("path").attr("d", arc).attr("fill", "black").on("mousemove", (event, d) => {
2609
+ const [x, y] = pointer_default(event, arcs.node());
2610
+ let angle = Math.atan2(y, x) + Math.PI / 2;
2611
+ if (angle < 0) angle += 2 * Math.PI;
2612
+ const frac = Math.max(0, Math.min(1, (angle - d.data.startAngle) / (d.data.endAngle - d.data.startAngle)));
2613
+ const pos = Math.round(frac * d.data.size);
2614
+ menu.d.html(`<span style="font-size:.8em">chr${d.data.text}</span> ${bplen(pos)}`).style("padding", "5px");
2615
+ menu.show(event.x, event.y);
2616
+ }).on("mouseenter", (event) => {
2617
+ select_default(event.currentTarget).attr("stroke", "orange").attr("stroke-width", 1);
2618
+ }).on("mouseleave", (event) => {
2619
+ select_default(event.currentTarget).attr("stroke", null).attr("stroke-width", null);
2620
+ menu.hide();
2621
+ });
2622
+ arcs.selectAll("text").data(arcData).enter().append("text").attr("transform", (d) => {
2623
+ return `translate(${arc.centroid(d)}) rotate(${d.data.angle * 180 / Math.PI - 90})${d.data.angle > Math.PI ? "rotate(180)" : ""}`;
2624
+ }).attr("dy", "0.35em").attr("text-anchor", "middle").text((d) => d.data.text).style("fill", "white").style("font-size", `${this.fontSize}px`).style("padding", "500px").style("pointer-events", "none").style("padding", "500px");
2625
+ }
2626
+ };
2627
+
2628
+ // plots/disco/label/LabelsRenderer.ts
2629
+ var LabelsRenderer = class {
2630
+ constructor(animationDuration, fontSize, geneClickListener, genomeName, intervalEvents = [], geneLookup = async (gene, genome) => await dofetch3("genelookup", { body: { deep: 1, input: gene, genome } })) {
2631
+ this.geneCoordinatesCache = /* @__PURE__ */ new Map();
2632
+ this.hoverRequestId = 0;
2633
+ this.animationDuration = animationDuration;
2634
+ this.fontSize = fontSize;
2635
+ this.geneClickListener = geneClickListener;
2636
+ this.genomeName = genomeName;
2637
+ this.intervalEvents = intervalEvents;
2638
+ this.geneLookup = geneLookup;
2639
+ }
2640
+ render(holder, elements, collisions) {
2641
+ const labelsG = holder.append("g");
2642
+ const lineFunction = line_default().x((point) => point.x).y((point) => point.y);
2643
+ const menu = MenuProvider.create();
2644
+ labelsG.selectAll(".group").data(elements).enter().append("g").attr("class", "group").each((label, i, nodes) => {
2645
+ const g = select_default(nodes[i]);
2646
+ g.append("text").attr("class", "chord-text").attr("data-testid", "sjpp-disco-genelabel").attr("dy", ".35em").attr("transform", label.transform).style("text-anchor", label.textAnchor).style("font-size", `${this.fontSize}px`).style("fill", label.color).style("cursor", "pointer").text(label.text).on("click", () => {
2647
+ if (label.mutationsTooltip) {
2648
+ this.geneClickListener(
2649
+ label.text,
2650
+ label.mutationsTooltip.map((value) => value.mname)
2651
+ );
2652
+ }
2653
+ }).on("mouseover", async (mouseEvent) => {
2654
+ const requestId = ++this.hoverRequestId;
2655
+ this.renderTooltip(menu, label);
2656
+ menu.show(mouseEvent.x, mouseEvent.y);
2657
+ const coordinates = await this.getGeneCoordinates(label);
2658
+ if (requestId != this.hoverRequestId || !coordinates) return;
2659
+ const overlappingEvents = this.intervalEvents.filter(
2660
+ (event) => this.sameChromosome(event.chr, coordinates.chr) && coordinates.stop >= event.start && event.stop >= coordinates.start
2661
+ );
2662
+ this.renderTooltip(menu, label, overlappingEvents);
2663
+ }).on("mouseout", () => {
2664
+ this.hoverRequestId++;
2665
+ menu.clear();
2666
+ menu.hide();
2667
+ });
2668
+ g.append("path").attr("class", "chord-tick").datum(label.line.points).style("stroke", label.color).style("fill", "none").attr("d", lineFunction);
2669
+ });
2670
+ labelsG.selectAll(".group").each((label, i, nodes) => {
2671
+ const collision = collisions ? collisions.find((l) => l.text === label.text) : void 0;
2672
+ if (collision) {
2673
+ const g = select_default(nodes[i]);
2674
+ g.selectAll(".chord-text").datum(collision).transition().duration(this.animationDuration).attr("transform", collision.transform).style("text-anchor", collision.textAnchor);
2675
+ g.selectAll(".chord-tick").datum(collision.line.points).transition().duration(this.animationDuration).style("fill", "none").attr("d", lineFunction);
2676
+ }
2677
+ });
2678
+ }
2679
+ renderTooltip(menu, label, intervalEvents = label.cnvTooltip) {
2680
+ menu.clear();
2681
+ const table = table2col({ holder: menu.d });
2682
+ this.createTooltip(table, label, intervalEvents);
2683
+ }
2684
+ async getGeneCoordinates(label) {
2685
+ if (!this.genomeName || !this.intervalEvents.length) return;
2686
+ const cacheKey = `${this.genomeName}:${label.text}:${label.chr}`;
2687
+ let lookup = this.geneCoordinatesCache.get(cacheKey);
2688
+ if (!lookup) {
2689
+ lookup = this.lookupGeneCoordinates(label);
2690
+ this.geneCoordinatesCache.set(cacheKey, lookup);
2691
+ }
2692
+ return await lookup;
2693
+ }
2694
+ async lookupGeneCoordinates(label) {
2695
+ try {
2696
+ const response = await this.geneLookup(label.text, this.genomeName);
2697
+ if (response?.error || !Array.isArray(response?.gmlst)) return;
2698
+ const models = response.gmlst.filter(
2699
+ (model) => this.sameChromosome(model.chr, label.chr) && Number.isFinite(model.start) && Number.isFinite(model.stop)
2700
+ );
2701
+ if (!models.length) return;
2702
+ return {
2703
+ chr: models[0].chr,
2704
+ start: Math.min(...models.map((model) => model.start)),
2705
+ stop: Math.max(...models.map((model) => model.stop))
2706
+ };
2707
+ } catch {
2708
+ return;
2709
+ }
2710
+ }
2711
+ sameChromosome(a, b) {
2712
+ return a?.replace(/^chr/i, "").toLowerCase() == b?.replace(/^chr/i, "").toLowerCase();
2713
+ }
2714
+ createTooltip(table, label, intervalEvents = label.cnvTooltip) {
2715
+ if (label.mutationsTooltip) {
2716
+ const [td1, td2] = table.addRow();
2717
+ td1.text("Gene");
2718
+ td2.append("span").style("margin-left", "5px").text(label.text);
2719
+ label.mutationsTooltip.forEach((mutation) => {
2720
+ {
2721
+ const [td12, td22] = table.addRow();
2722
+ td12.text("Mutation");
2723
+ td22.append("span").style("margin-left", "5px").text(mutation.mname).append("span").style("margin-left", "5px").style("color", mutation.color).text(`${mutation.dataClass}`).append("span").style("margin-left", "5px").style("color", "black").style("font-size", "0.8em").text(` ${mutation.chr}:${mutation.position}`);
2724
+ if (hasAnyValidVafEntry(mutation.vafs)) {
2725
+ appendVafBars(td22, mutation.vafs);
2726
+ }
2727
+ }
2728
+ });
2729
+ }
2730
+ if (label.fusionTooltip) {
2731
+ const [td1, td2] = table.addRow();
2732
+ td1.text("Data type");
2733
+ td2.append("span").text("Fusion transcript");
2734
+ label.fusionTooltip.forEach((fusionTooltip) => {
2735
+ const [td12, td22] = table.addRow();
2736
+ td12.text("Position");
2737
+ td22.append("span").text(
2738
+ ` ${fusionTooltip.geneA ? fusionTooltip.geneA : "?"} ${fusionTooltip.chrA}:${fusionTooltip.posA}
2739
+ ${fusionTooltip.strandA == "+" ? "forward" : "reverse"} > ${fusionTooltip.geneB ? fusionTooltip.geneB : "?"} ${fusionTooltip.chrB}:${fusionTooltip.posB} ${fusionTooltip.strandB == "+" ? "forward" : "reverse"} `
2740
+ );
2741
+ });
2742
+ }
2743
+ if (intervalEvents) {
2744
+ intervalEvents.forEach((cnv) => {
2745
+ const [td1, td2] = table.addRow();
2746
+ td1.text(cnv.dt == dtitd ? "ITD" : cnv.dt == dtloh ? "LOH" : "CNV");
2747
+ td2.append("span").style("margin-left", "5px").style("background-color", cnv.color).html("&nbsp;&nbsp;");
2748
+ if (cnv.dt != dtitd && cnv.dt != dtloh) td2.append("span").style("margin-left", "7.5px").text(cnv.value);
2749
+ td2.append("span").style("margin-left", "7.5px").style("font-size", "0.8em").text(`${cnv.chr}:${cnv.start}-${cnv.stop}`);
2750
+ });
2751
+ }
2752
+ }
2753
+ };
2754
+
2755
+ // plots/disco/defaults.ts
2756
+ function discoDefaults(overrides = {}, app) {
2757
+ const hiddenChromosomes = [];
2758
+ if (app?.vocabApi?.termdbConfig?.queries?.singleSampleMutation?.discoPlot?.skipChrM) {
2759
+ hiddenChromosomes.push("chrM");
2760
+ }
2761
+ const defaults = {
2762
+ downloadImgName: "disco.plot",
2763
+ Disco: {
2764
+ centerText: null,
2765
+ cnvCapping: 5,
2766
+ isOpen: false,
2767
+ prioritizeGeneLabelsByGeneSets: false,
2768
+ showPrioritizeGeneLabelsByGeneSets: false,
2769
+ showGeneNames: true,
2770
+ mutationWaterfallPlot: false,
2771
+ mutationWaterfallColor: "#4d4d4d",
2772
+ minMutationFraction: 0,
2773
+ cnvRenderingType: "heatmap" /* heatmap */,
2774
+ cnvPercentile: 90,
2775
+ // 90th percentile for removing outliers
2776
+ cnvCutoffMode: "percentile",
2777
+ autoRadius: true,
2778
+ radius: 300,
2779
+ fusionOpacity: 1,
2780
+ hiddenChromosomes
2781
+ },
2782
+ rings: {
2783
+ nonExonicRingWidth: 20,
2784
+ snvRingWidth: 20,
2785
+ lohRingWidth: 20,
2786
+ cnvRingWidth: 30,
2787
+ mutationWaterfallRingWidth: 35,
2788
+ snvRingFilters: ["exonic"],
2789
+ chromosomeInnerRadius: 190,
2790
+ chromosomeWidth: 20,
2791
+ labelLinesInnerRadius: 210,
2792
+ labelsToLinesDistance: 30,
2793
+ labelsToLinesGap: 2,
2794
+ nonExonicRingEnabled: true,
2795
+ nonExonicFilterValues: ["non-exonic"]
2796
+ },
2797
+ verticalPadding: 0,
2798
+ horizontalPadding: 50,
2799
+ layerScaler: 1,
2800
+ padAngle: 2e-3,
2801
+ //0.01, //0.04,
2802
+ label: {
2803
+ fontSize: 12,
2804
+ maxDeltaAngle: 0.05,
2805
+ animationDuration: 1e3,
2806
+ overlapAngleFactor: 5
2807
+ // 5 is set by testing, because label height is not known before rendering
2808
+ },
2809
+ cnv: {
2810
+ capping: 5,
2811
+ percentile: 80,
2812
+ ampColor: "#D6683C",
2813
+ lossColor: "#67a9cf",
2814
+ cappedAmpColor: "#8B0000",
2815
+ cappedLossColor: "#00008B",
2816
+ unit: "Unit"
2817
+ },
2818
+ snv: {
2819
+ maxMutationCount: 1e4
2820
+ },
2821
+ legend: {
2822
+ snvTitle: "Mutations",
2823
+ cnvTitle: "CNV",
2824
+ lohTitle: "LOH",
2825
+ fusionTitle: "SV",
2826
+ // Structural Variants (color by co-location)
2827
+ lohLegendEnabled: true,
2828
+ fontSize: 12,
2829
+ rowHeight: 48
2830
+ },
2831
+ menu: {
2832
+ padding: 5
2833
+ }
2834
+ };
2835
+ if (overrides?.Disco?.radius != null && (overrides.Disco.radius > 1e3 || overrides.Disco.radius < 200)) {
2836
+ console.log(`${overrides?.Disco?.radius} is greater or lower than the min and max for the radius`);
2837
+ }
2838
+ return copyMerge(defaults, overrides);
2839
+ }
2840
+
2841
+ // plots/disco/snv/NonExonicSnvRenderer.ts
2842
+ var NonExonicSnvRenderer = class {
2843
+ constructor(geneClickListener) {
2844
+ this.geneClickListener = geneClickListener;
2845
+ }
2846
+ render(holder, elements) {
2847
+ const arcGenerator = arc_default();
2848
+ const arcs = holder.append("g");
2849
+ const menu = MenuProvider.create();
2850
+ arcs.selectAll("path").data(elements).enter().append("path").attr("d", (d) => arcGenerator(d)).attr("fill", (d) => d.color).on("mouseover", (mouseEvent, arc) => {
2851
+ const table = table2col({ holder: menu.d });
2852
+ const snv = structuredClone(arc);
2853
+ snv.dt = dtsnvindel;
2854
+ snv.class = arc.dataClass;
2855
+ snv.gene = snv.text;
2856
+ {
2857
+ const [td1, td2] = table.addRow();
2858
+ td1.text("Consequence");
2859
+ td2.append("span").text(snv.mname);
2860
+ td2.append("span").style("margin-left", "5px").style("color", snv.color).style("font-size", ".8em").text(snv.dataClass);
2861
+ }
2862
+ {
2863
+ const [td1, td2] = table.addRow();
2864
+ td1.text(snv.ref && snv.alt ? "Mutation" : "Position");
2865
+ td2.append("span").text(`${snv.chr}:${snv.pos + 1} ${snv.ref && snv.alt ? snv.ref + ">" + snv.alt : ""}`);
2866
+ }
2867
+ if (snv.gene) {
2868
+ const [td1, td2] = table.addRow();
2869
+ td1.text("Gene");
2870
+ td2.text(snv.gene);
2871
+ }
2872
+ if (snv.occurrence > 1) {
2873
+ const [td1, td2] = table.addRow();
2874
+ td1.text("Occurrence");
2875
+ td2.text(snv.occurrence);
2876
+ }
2877
+ if (hasAnyValidVafEntry(arc.vafs)) {
2878
+ const [td1, td2] = table.addRow();
2879
+ td1.text("Read count");
2880
+ appendVafBars(td2, arc.vafs);
2881
+ }
2882
+ menu.show(mouseEvent.x, mouseEvent.y);
2883
+ }).on("mouseout", () => {
2884
+ menu.clear();
2885
+ menu.hide();
2886
+ }).on("click", (mouseEvent, arc) => {
2887
+ this.geneClickListener(arc.text, [arc.mname]);
2888
+ });
2889
+ }
2890
+ };
2891
+
2892
+ // plots/disco/snv/SnvRenderer.ts
2893
+ var SnvRenderer = class {
2894
+ constructor(svnWidth, geneClickListener) {
2895
+ this.svnWidth = svnWidth;
2896
+ this.geneClickListener = geneClickListener;
2897
+ }
2898
+ render(holder, elements) {
2899
+ if (elements.length > 0) {
2900
+ const svnInnerRadius = elements[0].innerRadius;
2901
+ const fullArcRenderer = new FullArcRenderer(svnInnerRadius, this.svnWidth, "#6464641A");
2902
+ fullArcRenderer.render(holder);
2903
+ }
2904
+ const arcGenerator = arc_default();
2905
+ const arcs = holder.append("g");
2906
+ const menu = MenuProvider.create();
2907
+ arcs.selectAll("path").data(elements).enter().append("path").attr("d", (d) => arcGenerator(d)).attr("fill", (d) => d.color).on("mouseover", (mouseEvent, arc) => {
2908
+ const table = table2col({ holder: menu.d });
2909
+ const snv = structuredClone(arc);
2910
+ snv.dt = dtsnvindel;
2911
+ snv.class = arc.dataClass;
2912
+ snv.gene = snv.text;
2913
+ {
2914
+ const [td1, td2] = table.addRow();
2915
+ td1.text("Consequence");
2916
+ td2.append("span").text(snv.mname);
2917
+ td2.append("span").style("margin-left", "5px").style("color", snv.color).style("font-size", ".8em").text(snv.dataClass);
2918
+ }
2919
+ {
2920
+ const [td1, td2] = table.addRow();
2921
+ td1.text(snv.ref && snv.alt ? "Mutation" : "Position");
2922
+ td2.append("span").text(`${snv.chr}:${snv.pos + 1} ${snv.ref && snv.alt ? snv.ref + ">" + snv.alt : ""}`);
2923
+ }
2924
+ if (snv.gene) {
2925
+ const [td1, td2] = table.addRow();
2926
+ td1.text("Gene");
2927
+ td2.text(snv.gene);
2928
+ }
2929
+ if (snv.occurrence > 1) {
2930
+ const [td1, td2] = table.addRow();
2931
+ td1.text("Occurrence");
2932
+ td2.text(snv.occurrence);
2933
+ }
2934
+ if (hasAnyValidVafEntry(arc.vafs)) {
2935
+ const [td1, td2] = table.addRow();
2936
+ td1.text("Read count");
2937
+ appendVafBars(td2, arc.vafs);
2938
+ }
2939
+ menu.show(mouseEvent.x, mouseEvent.y);
2940
+ }).on("mouseout", () => {
2941
+ menu.clear();
2942
+ menu.hide();
2943
+ }).on("click", (mouseEvent, arc) => {
2944
+ this.geneClickListener(arc.text, [arc.mname]);
2945
+ });
2946
+ }
2947
+ };
2948
+
2949
+ // plots/disco/loh/LohRenderer.ts
2950
+ var LohRenderer = class {
2951
+ render(holder, elements) {
2952
+ const arcGenerator = arc_default();
2953
+ const arcs = holder.append("g");
2954
+ const menu = MenuProvider.create();
2955
+ arcs.selectAll("path").data(elements).enter().append("path").attr("d", (d) => arcGenerator(d)).attr("fill", (d) => d.color).on("mouseover", (mouseEvent, arc) => {
2956
+ const table = table2col({ holder: menu.d });
2957
+ const loh = structuredClone(arc);
2958
+ loh.dt = dtloh;
2959
+ loh.gene = loh.text;
2960
+ {
2961
+ const [td12, td22] = table.addRow();
2962
+ td12.text("Data type");
2963
+ td22.append("span").style("margin-left", "5px").text("Loss of Heterozygosity");
2964
+ }
2965
+ const [td1, td2] = table.addRow();
2966
+ td1.text("Position");
2967
+ td2.append("span").text(`${arc.chr}:${arc.start}-${arc.stop}`);
2968
+ menu.show(mouseEvent.x, mouseEvent.y);
2969
+ }).on("mouseout", () => {
2970
+ menu.clear();
2971
+ menu.hide();
2972
+ });
2973
+ }
2974
+ };
2975
+
2976
+ // plots/disco/cnv/CnvBarRenderer.ts
2977
+ var CnvBarRenderer = class {
2978
+ render(holder, elements) {
2979
+ const arcGenerator = arc_default();
2980
+ const arcs = holder.append("g");
2981
+ const hoverOverlay = holder.append("g").attr("class", "hover-overlay").style("pointer-events", "none");
2982
+ const menu = MenuProvider.create();
2983
+ arcs.selectAll("path").data(elements).enter().append("path").attr("d", (d) => arcGenerator(d)).attr("fill", (d) => d.color).on("mouseover", (mouseEvent, arc) => {
2984
+ hoverOverlay.selectAll("*").remove();
2985
+ hoverOverlay.append("path").datum(arc).attr("d", arcGenerator(arc)).attr("fill", "none").attr("stroke", "black").attr("stroke-width", 1);
2986
+ const cnv = structuredClone(arc);
2987
+ cnv.dt = arc.dt;
2988
+ cnv.samples = [{ sample_id: arc.sampleName }];
2989
+ cnv.gene = cnv.text;
2990
+ const table = table2col({ holder: menu.d });
2991
+ if (arc.dt == dtcnv) {
2992
+ const [c1, c2] = table.addRow();
2993
+ c1.text("CNV");
2994
+ c2.html(`<span style="background:${cnv.color}">&nbsp;&nbsp;</span> ${cnv.value}`);
2995
+ }
2996
+ if (arc.dt == dtitd) {
2997
+ const [c1, c2] = table.addRow();
2998
+ c1.text("ITD");
2999
+ c2.html(`<span style="background:${cnv.color}">&nbsp;&nbsp;</span>`);
3000
+ }
3001
+ {
3002
+ const [c1, c2] = table.addRow();
3003
+ c1.text("Position");
3004
+ c2.text(cnv.chr + ":" + cnv.start + "-" + cnv.stop);
3005
+ }
3006
+ if (arc.dt == dtcnv) {
3007
+ const [c1, c2] = table.addRow();
3008
+ c1.text("Unit");
3009
+ c2.text(cnv.value);
3010
+ }
3011
+ menu.show(mouseEvent.x, mouseEvent.y);
3012
+ }).on("mouseout", () => {
3013
+ hoverOverlay.selectAll("*").remove();
3014
+ menu.clear();
3015
+ menu.hide();
3016
+ });
3017
+ }
3018
+ };
3019
+
3020
+ // plots/disco/cnv/CnvHeatmapRenderer.ts
3021
+ var CnvHeatmapRenderer = class {
3022
+ constructor(positivePercentile = 0, negativePercentile = 0) {
3023
+ this.positivePercentile = positivePercentile;
3024
+ this.negativePercentile = negativePercentile;
3025
+ }
3026
+ render(holder, elements) {
3027
+ const arcGenerator = arc_default();
3028
+ const arcs = holder.append("g");
3029
+ const hoverOverlay = holder.append("g").attr("class", "hover-overlay").style("pointer-events", "none");
3030
+ const menu = MenuProvider.create();
3031
+ arcs.selectAll("path").data(elements).enter().append("path").attr("d", (d) => arcGenerator(d)).attr("fill", (d) => this.getColor(d.color, d.value, d.dt)).on("mouseenter", (mouseEvent, arc) => {
3032
+ hoverOverlay.append("path").datum(arc).attr("d", arcGenerator(arc)).attr("fill", "none").attr("stroke", "black").attr("stroke-width", 1);
3033
+ const table = table2col({ holder: menu.d });
3034
+ const cnv = structuredClone(arc);
3035
+ cnv.dt = arc.dt;
3036
+ cnv.samples = [{ sample_id: arc.sampleName }];
3037
+ cnv.gene = cnv.text;
3038
+ if (arc.dt == dtcnv) {
3039
+ const [c1, c2] = table.addRow();
3040
+ c1.text("CNV");
3041
+ c2.html(
3042
+ `<span style="background:${this.getColor(
3043
+ cnv.color,
3044
+ cnv.value,
3045
+ cnv.dt
3046
+ )}; border:solid lightgrey 0.1px;">&nbsp;&nbsp;</span> ${cnv.value}`
3047
+ );
3048
+ }
3049
+ if (arc.dt == dtitd) {
3050
+ const [c1, c2] = table.addRow();
3051
+ c1.text("ITD");
3052
+ c2.html(`<span style="background:${cnv.color}; border:solid lightgrey 0.1px;">&nbsp;&nbsp;</span>`);
3053
+ }
3054
+ {
3055
+ const [c1, c2] = table.addRow();
3056
+ c1.text("Position");
3057
+ c2.text(cnv.chr + ":" + cnv.start + "-" + cnv.stop);
3058
+ }
3059
+ menu.show(mouseEvent.x, mouseEvent.y);
3060
+ }).on("mouseleave", () => {
3061
+ hoverOverlay.selectAll("*").remove();
3062
+ menu.clear();
3063
+ menu.hide();
3064
+ });
3065
+ }
3066
+ // Computes fill color using linear scale between -P80, 0, and +P80
3067
+ getColor(color, value, dt = dtcnv) {
3068
+ if (dt == dtitd) return color;
3069
+ const maxValue = Math.max(this.positivePercentile, Math.abs(this.negativePercentile));
3070
+ return linear(
3071
+ [-maxValue, 0, maxValue],
3072
+ [color, "white", color]
3073
+ // transitions to white in the middle
3074
+ ).clamp(true)(value);
3075
+ }
3076
+ };
3077
+
3078
+ // plots/disco/waterfall/MutationWaterfallRenderer.ts
3079
+ var MutationWaterfallRenderer = class {
3080
+ constructor(dotRadius = 1.5) {
3081
+ this.dotRadius = dotRadius;
3082
+ }
3083
+ render(holder, elements) {
3084
+ if (!elements.length) return;
3085
+ const ringGroup = holder.append("g").attr("data-testid", "sjpp_mutation_waterfall_ring");
3086
+ const menu = MenuProvider.create();
3087
+ ringGroup.append("g").selectAll("circle").data(elements).enter().append("circle").attr("cx", (d) => Math.cos(d.startAngle - Math.PI / 2) * d.innerRadius).attr("cy", (d) => Math.sin(d.startAngle - Math.PI / 2) * d.innerRadius).attr("r", this.dotRadius).attr("fill", (d) => d.color).attr("opacity", 0.9).on("mouseover", (event, d) => {
3088
+ const distance = Math.round(Math.pow(10, d.logDistance));
3089
+ menu.clear();
3090
+ const table = table2col({ holder: menu.d });
3091
+ {
3092
+ const [td1, td2] = table.addRow();
3093
+ td1.text("Intermutation distance");
3094
+ td2.text(`${bplen(distance)}`);
3095
+ }
3096
+ menu.show(event.x, event.y);
3097
+ }).on("mouseout", () => {
3098
+ menu.clear();
3099
+ menu.hide();
3100
+ });
3101
+ this.renderAxis(ringGroup, elements[0]);
3102
+ }
3103
+ renderAxis(holder, referencePoint) {
3104
+ const { ringInnerRadius, ringWidth, rangeMin, rangeMax } = referencePoint;
3105
+ const axisGroup = holder.append("g").attr("class", "sjpp-waterfall-axis");
3106
+ const topRadius = ringInnerRadius + ringWidth;
3107
+ axisGroup.append("line").attr("x1", 0).attr("y1", -topRadius).attr("x2", 0).attr("y2", -ringInnerRadius).attr("stroke", "#6e6e6e").attr("stroke-width", 1);
3108
+ const span = rangeMax - rangeMin || 1;
3109
+ const tickValues = rangeMax === rangeMin ? [rangeMin] : ticks(rangeMin, rangeMax, 4);
3110
+ tickValues.forEach((value) => {
3111
+ const ratio = (value - rangeMin) / span;
3112
+ const radius = ringInnerRadius + ringWidth * ratio;
3113
+ const y = -radius;
3114
+ axisGroup.append("line").attr("x1", -4).attr("x2", 4).attr("y1", y).attr("y2", y).attr("stroke", "#6e6e6e");
3115
+ const exponent = Math.round(value * 10) / 10;
3116
+ const formatted = Number.isInteger(exponent) ? `${exponent}` : exponent.toFixed(1);
3117
+ axisGroup.append("text").attr("x", 6).attr("y", y + 3).style("font-size", "10px").style("fill", "#4d4d4d").text(`10^${formatted} bp`);
3118
+ });
3119
+ }
3120
+ };
3121
+
3122
+ // plots/disco/Disco.ts
3123
+ var Disco = class {
3124
+ constructor(opts) {
3125
+ this.recreateViewModel = false;
3126
+ this.onCnvSourceSelect = (index) => {
3127
+ const state = this.app.getState();
3128
+ const args = state.args;
3129
+ const alt = args.alternativeDataByDt?.[dtcnv];
3130
+ if (!alt) return;
3131
+ const altClone = structuredClone(args.alternativeDataByDt);
3132
+ altClone[dtcnv].forEach((d, i) => d.inuse = i === index);
3133
+ const selected = altClone[dtcnv][index];
3134
+ selected.mlst.forEach((d) => d.position = d.pos);
3135
+ const baseData = args.data.filter((d) => d.dt != dtcnv && d.dt != dtloh);
3136
+ const newData = baseData.concat(selected.mlst);
3137
+ this.app.dispatch({
3138
+ type: "app_refresh",
3139
+ state: { args: { ...args, data: newData, alternativeDataByDt: altClone } }
3140
+ });
3141
+ };
3142
+ this.type = "Disco";
3143
+ this.opts = opts;
3144
+ this.isOpen = false;
3145
+ this.discoInteractions = new DiscoInteractions(this);
3146
+ }
3147
+ static {
3148
+ this.type = "Disco";
3149
+ }
3150
+ async init() {
3151
+ const state = this.app.getState();
3152
+ const settings = state.plots.find((p) => p.id === this.id).settings;
3153
+ this.stateViewModelMapper = new ViewModelMapper(settings, this.discoInteractions);
3154
+ this.viewModel = this.stateViewModelMapper.map(state);
3155
+ const holder = this.opts.holder;
3156
+ const controlsHolder = holder.append("div").style("display", "inline-block").style("vertical-align", "top");
3157
+ const mainDiv = holder.append("div").style("display", "inline-block");
3158
+ const topbar = controlsHolder.append("div");
3159
+ const config_div = controlsHolder.append("div");
3160
+ const configInputsOptions = this.getConfigInputsOptions(this.viewModel);
3161
+ this.features = await multiInit({
3162
+ topbar: topBarInit({
3163
+ app: this.app,
3164
+ id: this.id,
3165
+ // TODO change the way svg is selected
3166
+ downloadHandler: () => this.discoInteractions.downloadClickListener(holder.select('svg[id="sjpp_disco_plot"]').node()),
3167
+ callback: () => this.toggleVisibility(this.isOpen),
3168
+ isOpen: () => this.isOpen,
3169
+ holder: topbar
3170
+ }),
3171
+ config: configUiInit({
3172
+ app: this.app,
3173
+ id: this.id,
3174
+ holder: config_div,
3175
+ isOpen: () => this.isOpen,
3176
+ inputs: configInputsOptions
3177
+ })
3178
+ });
3179
+ this.errorDiv = mainDiv.append("div").attr("data-testid", "sjpp-disco-errorDiv");
3180
+ this.svgDiv = mainDiv.append("div").attr("data-testid", "sjpp-disco-svgDiv");
3181
+ }
3182
+ getConfigInputsOptions(viewModel) {
3183
+ const configInputsOptions = [];
3184
+ if (viewModel.settings.Disco.showPrioritizeGeneLabelsByGeneSets) {
3185
+ const filterMutationsGenesCheckbox = [
3186
+ {
3187
+ boxLabel: viewModel.genesetName,
3188
+ label: `Filter mutations`,
3189
+ type: "checkbox",
3190
+ chartType: "Disco",
3191
+ settingsKey: "prioritizeGeneLabelsByGeneSets",
3192
+ title: `Only show mutations for ${viewModel.genesetName} genes`
3193
+ }
3194
+ ];
3195
+ configInputsOptions.push(...filterMutationsGenesCheckbox);
3196
+ }
3197
+ if (viewModel.cnvMaxValue !== 0 || viewModel.cnvMinValue !== 0) {
3198
+ const cnvConfigInputOptions = [
3199
+ {
3200
+ boxLabel: "",
3201
+ label: "CNV rendering type",
3202
+ type: "radio",
3203
+ chartType: "Disco",
3204
+ settingsKey: "cnvRenderingType",
3205
+ title: "CNV rendering type",
3206
+ options: [
3207
+ { label: "Heatmap", value: "heatmap" /* heatmap */ },
3208
+ { label: "Bar", value: "bar" /* bar */ }
3209
+ ]
3210
+ }
3211
+ ];
3212
+ configInputsOptions.push(...cnvConfigInputOptions);
3213
+ }
3214
+ if (viewModel.hasMutationFractionData) {
3215
+ configInputsOptions.push({
3216
+ boxLabel: "",
3217
+ label: "Minimum mutation fraction",
3218
+ type: "number",
3219
+ chartType: "Disco",
3220
+ settingsKey: "minMutationFraction",
3221
+ title: "Only show SNV/indel mutations with at least one DNA/RNA mutation fraction at or above this value.",
3222
+ step: 0.01,
3223
+ min: 0,
3224
+ max: 1,
3225
+ debounceInterval: 500
3226
+ });
3227
+ }
3228
+ configInputsOptions.push({
3229
+ boxLabel: "",
3230
+ label: "Show gene names",
3231
+ type: "checkbox",
3232
+ chartType: "Disco",
3233
+ settingsKey: "showGeneNames",
3234
+ title: "Show gene name labels on the outside of the plot"
3235
+ });
3236
+ const genomeChr = this.app.opts.state.args.genome.majorchr;
3237
+ const chromosomeConfigOption = {
3238
+ label: "Chromosomes",
3239
+ title: "Chromosomes shown in the plot",
3240
+ type: "multiCheckbox",
3241
+ chartType: "Disco",
3242
+ settingsKey: "hiddenChromosomes",
3243
+ style: {
3244
+ colNum: 4
3245
+ },
3246
+ options: Object.keys(genomeChr).map((c) => ({ label: c, value: c })),
3247
+ processInput: (values = []) => {
3248
+ const reverse = Object.keys(genomeChr).filter((c) => !values.includes(c));
3249
+ return reverse;
3250
+ }
3251
+ };
3252
+ configInputsOptions.push(chromosomeConfigOption);
3253
+ configInputsOptions.push({
3254
+ boxLabel: "",
3255
+ label: "Auto radius",
3256
+ type: "checkbox",
3257
+ chartType: "Disco",
3258
+ settingsKey: "autoRadius",
3259
+ title: "Automatically set the radius based on the number of data rings"
3260
+ });
3261
+ const dimensionOptions = [
3262
+ {
3263
+ label: "Radius",
3264
+ title: "Set the radius of the entire plot, between 200 and 1000 pixels.",
3265
+ type: "number",
3266
+ chartType: "Disco",
3267
+ settingsKey: "radius",
3268
+ debounceInterval: 500,
3269
+ step: 25,
3270
+ min: 200,
3271
+ max: 1e3,
3272
+ getDisplayStyle: (plot) => plot.settings.Disco.autoRadius ? "none" : "table-row"
3273
+ },
3274
+ {
3275
+ label: "Fusion opacity",
3276
+ title: "Adjust opacity of fusion arcs, between 0 and 1",
3277
+ type: "number",
3278
+ chartType: "Disco",
3279
+ settingsKey: "fusionOpacity",
3280
+ step: 0.01,
3281
+ min: 0,
3282
+ max: 1,
3283
+ debounceInterval: 500
3284
+ }
3285
+ ];
3286
+ configInputsOptions.push(...dimensionOptions);
3287
+ if (viewModel.canShowMutationWaterfallPlot && viewModel.snvDataLength > 0) {
3288
+ configInputsOptions.push({
3289
+ boxLabel: "",
3290
+ label: "Mutation Waterfall Plot",
3291
+ type: "checkbox",
3292
+ chartType: "Disco",
3293
+ settingsKey: "mutationWaterfallPlot",
3294
+ title: "Render log10 intermutation distance ring for SNV/indel data"
3295
+ });
3296
+ }
3297
+ return configInputsOptions;
3298
+ }
3299
+ async main() {
3300
+ const settings = this.state.settings;
3301
+ this.isOpen = settings.Disco.isOpen;
3302
+ if (this.recreateViewModel) {
3303
+ this.stateViewModelMapper = new ViewModelMapper(settings, this.discoInteractions);
3304
+ this.viewModel = this.stateViewModelMapper.map(this.app.getState());
3305
+ }
3306
+ this.recreateViewModel = true;
3307
+ if (this.viewModel) {
3308
+ this.svgDiv.selectAll("*").remove();
3309
+ const appState = this.app.getState();
3310
+ this.viewModel.svgDiv = this.svgDiv;
3311
+ this.viewModel.appState = appState;
3312
+ for (const name in this.features) {
3313
+ this.features[name].update({ state: this.state, appState });
3314
+ }
3315
+ const legendRenderer = new LegendRenderer(this.viewModel.cappedCnvMaxAbsValue, settings.label.fontSize);
3316
+ const discoRenderer = new DiscoRenderer(
3317
+ this.getRingRenderers(this.viewModel.settings, this.viewModel, this.discoInteractions.geneClickListener),
3318
+ legendRenderer,
3319
+ this.app.opts.state.args.genome
3320
+ );
3321
+ discoRenderer.render(this.svgDiv, this.viewModel, this.onCnvSourceSelect);
3322
+ if (this.viewModel.invalidDataInfo?.entries?.length) {
3323
+ InvalidDataUI.render(this.errorDiv, this.viewModel.invalidDataInfo);
3324
+ }
3325
+ }
3326
+ }
3327
+ getState(appState) {
3328
+ const config = appState.plots.find((p) => p.id === this.id);
3329
+ if (!config) return config;
3330
+ return { ...config, mlst: appState.args.data };
3331
+ }
3332
+ getRingRenderers(settings, viewModel, geneClickListener) {
3333
+ const chromosomesRenderer = new ChromosomesRenderer(
3334
+ settings.padAngle,
3335
+ settings.rings.chromosomeInnerRadius,
3336
+ settings.rings.chromosomeInnerRadius + settings.rings.chromosomeWidth,
3337
+ settings.label.fontSize
3338
+ );
3339
+ const labelsRenderer = new LabelsRenderer(
3340
+ settings.label.animationDuration,
3341
+ settings.label.fontSize,
3342
+ geneClickListener,
3343
+ this.app.opts.state.args.genome.name,
3344
+ [
3345
+ ...viewModel.rings.cnvArcRing?.elements || [],
3346
+ ...(viewModel.rings.lohArcRing?.elements || []).map((event) => ({ ...event, dt: dtloh }))
3347
+ ]
3348
+ );
3349
+ const nonExonicSnvRenderer = new NonExonicSnvRenderer(geneClickListener);
3350
+ const snvRenderer = new SnvRenderer(settings.rings.snvRingWidth, geneClickListener);
3351
+ const cnvRenderer = settings.Disco.cnvRenderingType === "heatmap" /* heatmap */ ? new CnvHeatmapRenderer(viewModel.positivePercentile, viewModel.negativePercentile) : new CnvBarRenderer();
3352
+ const lohRenderer = new LohRenderer();
3353
+ const mutationWaterfallRenderer = new MutationWaterfallRenderer();
3354
+ const renderersMap = /* @__PURE__ */ new Map();
3355
+ renderersMap.set(0 /* CHROMOSOME */, chromosomesRenderer);
3356
+ renderersMap.set(1 /* LABEL */, labelsRenderer);
3357
+ renderersMap.set(2 /* NONEXONICSNV */, nonExonicSnvRenderer);
3358
+ renderersMap.set(3 /* SNV */, snvRenderer);
3359
+ renderersMap.set(4 /* MUTATION_WATERFALL */, mutationWaterfallRenderer);
3360
+ renderersMap.set(5 /* CNV */, cnvRenderer);
3361
+ renderersMap.set(6 /* LOH */, lohRenderer);
3362
+ return renderersMap;
3363
+ }
3364
+ toggleVisibility(isOpen) {
3365
+ this.app.dispatch({
3366
+ type: "plot_edit",
3367
+ id: this.opts.id,
3368
+ config: {
3369
+ settings: {
3370
+ Disco: { isOpen: !isOpen }
3371
+ }
3372
+ }
3373
+ });
3374
+ }
3375
+ };
3376
+ var discoInit = getCompInit(Disco);
3377
+ var componentInit = discoInit;
3378
+ async function getPlotConfig(opts, app) {
3379
+ return {
3380
+ chartType: "Disco",
3381
+ subfolder: "disco",
3382
+ extension: "ts",
3383
+ settings: discoDefaults(opts.overrides, app)
3384
+ };
3385
+ }
3386
+ export {
3387
+ componentInit,
3388
+ Disco as default,
3389
+ discoInit,
3390
+ getPlotConfig
3391
+ };
3392
+ //# sourceMappingURL=Disco-NVMLF3BK.js.map