@sjcrh/proteinpaint-client 2.196.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 (957) 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/DifferentialAnalysis-25P4CGIY.js.map +7 -0
  10. package/dist/Disco-NVMLF3BK.js +3392 -0
  11. package/dist/Disco-NVMLF3BK.js.map +7 -0
  12. package/dist/Disco.UI-C7CZINUQ.js +249 -0
  13. package/dist/DmrPlot-WROR4ENM.js +642 -0
  14. package/dist/GB-JUABODPH.js +1394 -0
  15. package/dist/GB-JUABODPH.js.map +7 -0
  16. package/dist/GSEA-Y5R2THIJ.js +846 -0
  17. package/dist/GSEA-Y5R2THIJ.js.map +7 -0
  18. package/dist/GeneExpInput-JDU6EI7K.js +367 -0
  19. package/dist/Geomap-J763OK2F.js +89 -0
  20. package/dist/Geomap-J763OK2F.js.map +7 -0
  21. package/dist/HicApp-UNIJLH4B.js +2250 -0
  22. package/dist/IDCViewer-KVPCIUDW.js +10803 -0
  23. package/dist/IDCViewer-KVPCIUDW.js.map +7 -0
  24. package/dist/NumBinaryEditor-WMN2GGO4.js +271 -0
  25. package/dist/NumBinaryEditor.unit.spec-TAMXV6SE.js +286 -0
  26. package/dist/NumContEditor-XYIOJY4E.js +109 -0
  27. package/dist/NumContEditor.unit.spec-WDZ75BHO.js +169 -0
  28. package/dist/NumCustomBinEditor-5SY3C4TY.js +38 -0
  29. package/dist/NumCustomBinEditor.unit.spec-XHTAIXR3.js +284 -0
  30. package/dist/NumDiscreteEditor-NRDRX4FD.js +179 -0
  31. package/dist/NumDiscreteEditor.unit.spec-2CJW7OAT.js +202 -0
  32. package/dist/NumRegularBinEditor-DUDVTNDC.js +38 -0
  33. package/dist/NumRegularBinEditor.unit.spec-H3GNQHMN.js +227 -0
  34. package/dist/NumSplineEditor-7Q4AC7KH.js +198 -0
  35. package/dist/NumSplineEditor.unit.spec-YRZK5PH5.js +199 -0
  36. package/dist/NumericDensity-NTNWUESG.js +38 -0
  37. package/dist/NumericDensity.unit.spec-5I5U6T6P.js +221 -0
  38. package/dist/NumericHandler-MEW2KMPX.js +39 -0
  39. package/dist/NumericHandler.unit.spec-JFX4BPRG.js +219 -0
  40. package/dist/ProteomeInput-K2ZHR2U6.js +395 -0
  41. package/dist/ProteomeInput-K2ZHR2U6.js.map +7 -0
  42. package/dist/RunChart2-BEBDU7RC.js +758 -0
  43. package/dist/SC-XCBFJVUJ.js +1120 -0
  44. package/dist/SC-XCBFJVUJ.js.map +7 -0
  45. package/dist/Volcano-4Y4TP3UX.js +1385 -0
  46. package/dist/Volcano-4Y4TP3UX.js.map +7 -0
  47. package/dist/WSIViewer-ZLQU62PD.js +48562 -0
  48. package/dist/WsiSamplesPlot-JMBSITOM.js +165 -0
  49. package/dist/adSandbox-664IRCRL.js +38 -0
  50. package/dist/animatedBubbleChart-TX7NW34K.js +555 -0
  51. package/dist/app-63WJ3BMP.js +37 -0
  52. package/dist/app-77FIZHCG.js +49 -0
  53. package/dist/app.js +19 -19
  54. package/dist/bam-IETNVAYD.js +860 -0
  55. package/dist/barchart-YUVXJNH4.js +47 -0
  56. package/dist/barchart.data-P4EIQXGE.js +22 -0
  57. package/dist/barchart.events-JPVCLTIG.js +47 -0
  58. package/dist/barchart.integration.spec-ZH7DEQI2.js +2196 -0
  59. package/dist/barchart2-XO2FG76J.js +314 -0
  60. package/dist/bars.renderer-AUIWUJDH.js +12 -0
  61. package/dist/block-NBTCOT3H.js +6255 -0
  62. package/dist/block-NBTCOT3H.js.map +7 -0
  63. package/dist/block.init-X7Y2EEVR.js +38 -0
  64. package/dist/block.mds.expressionrank-BIAOZIZ3.js +359 -0
  65. package/dist/block.mds.geneboxplot-CNICDVLK.js +828 -0
  66. package/dist/block.mds.junction-PQXCTSUI.js +1545 -0
  67. package/dist/block.mds.svcnv-32KMVTCT.js +6801 -0
  68. package/dist/block.svg-LRTOYQK2.js +164 -0
  69. package/dist/block.tk.aicheck-HDV7ZIUD.js +283 -0
  70. package/dist/block.tk.ase-JIDWKMYI.js +365 -0
  71. package/dist/block.tk.bam-5X3OS5HB.js +1906 -0
  72. package/dist/block.tk.bedgraphdot-T7JX7YQL.js +384 -0
  73. package/dist/block.tk.bigwig.ui-OSAYEBAE.js +212 -0
  74. package/dist/block.tk.hicstraw-DEY3VQFK.js +823 -0
  75. package/dist/block.tk.junction-7UAFEZSJ.js +2364 -0
  76. package/dist/block.tk.junction.textmatrixui-27LHS33U.js +199 -0
  77. package/dist/block.tk.ld-DF2PI7OO.js +99 -0
  78. package/dist/block.tk.menu-L2D5KBIV.js +1029 -0
  79. package/dist/block.tk.pgv-QO56SKBV.js +944 -0
  80. package/dist/brainImaging-NIPQWFWO.js +423 -0
  81. package/dist/brainRegions-ZNZ2WHSU.js +221 -0
  82. package/dist/bubbleHeatmap-ERWNEKZB.js +383 -0
  83. package/dist/chunk-2GYWFQML.js +299 -0
  84. package/dist/chunk-2HYJ4GDH.js +50 -0
  85. package/dist/chunk-2MG6XE6R.js +272 -0
  86. package/dist/chunk-2X6W4E3W.js +1507 -0
  87. package/dist/chunk-2X6W4E3W.js.map +7 -0
  88. package/dist/chunk-33K5PA52.js +54 -0
  89. package/dist/chunk-37XDBPOP.js +26 -0
  90. package/dist/chunk-3EWB3246.js +58 -0
  91. package/dist/chunk-3RSKOPIY.js +100 -0
  92. package/dist/chunk-3XVVN66M.js +4085 -0
  93. package/dist/chunk-3XVVN66M.js.map +7 -0
  94. package/dist/chunk-4DPVT4NE.js +1102 -0
  95. package/dist/chunk-4IH7DORZ.js +98 -0
  96. package/dist/chunk-4QNBFIIR.js +399 -0
  97. package/dist/chunk-4STKL6SR.js +217 -0
  98. package/dist/chunk-4TZIVSL5.js +34 -0
  99. package/dist/chunk-5ABGFJSP.js +467 -0
  100. package/dist/chunk-5AZNP47R.js +302 -0
  101. package/dist/chunk-5RL2OHXX.js +5070 -0
  102. package/dist/chunk-5RL2OHXX.js.map +7 -0
  103. package/dist/chunk-5VOPABBA.js +20941 -0
  104. package/dist/chunk-5VOPABBA.js.map +7 -0
  105. package/dist/chunk-6BB43SIB.js +102 -0
  106. package/dist/chunk-7OHRR2IE.js +276 -0
  107. package/dist/chunk-ARBHWDMY.js +226 -0
  108. package/dist/chunk-ARBHWDMY.js.map +7 -0
  109. package/dist/chunk-ASATD4T7.js +14 -0
  110. package/dist/chunk-AZ47Q7BX.js +1223 -0
  111. package/dist/chunk-AZ47Q7BX.js.map +7 -0
  112. package/dist/chunk-B5B3LZB3.js +236 -0
  113. package/dist/chunk-BHGISFCA.js +2681 -0
  114. package/dist/chunk-BMBOZ64T.js +2786 -0
  115. package/dist/chunk-BOZJHPJP.js +216 -0
  116. package/dist/chunk-CDD7LYJM.js +194 -0
  117. package/dist/chunk-CTQ3IUCA.js +2327 -0
  118. package/dist/chunk-D7TID3HR.js +158 -0
  119. package/dist/chunk-DBKNWR4J.js +1561 -0
  120. package/dist/chunk-DBKNWR4J.js.map +7 -0
  121. package/dist/chunk-E55LLYRX.js +55 -0
  122. package/dist/chunk-ESGXULRH.js +386 -0
  123. package/dist/chunk-EZ4LZ6ZT.js +117 -0
  124. package/dist/chunk-F3SJTVP5.js +4284 -0
  125. package/dist/chunk-F5IXNJO7.js +222 -0
  126. package/dist/chunk-FJYECRHW.js +448 -0
  127. package/dist/chunk-FPNRUQOU.js +833 -0
  128. package/dist/chunk-G5S4R77D.js +1942 -0
  129. package/dist/chunk-G5S4R77D.js.map +7 -0
  130. package/dist/chunk-G764NXQN.js +170 -0
  131. package/dist/chunk-GAPI4MML.js +148 -0
  132. package/dist/chunk-HLUZOZXJ.js +272 -0
  133. package/dist/chunk-HOKIK2FR.js +375 -0
  134. package/dist/chunk-I6WR4CG7.js +323 -0
  135. package/dist/chunk-I6WR4CG7.js.map +7 -0
  136. package/dist/chunk-KLGL6XZD.js +129 -0
  137. package/dist/chunk-KTKZSYIH.js +24 -0
  138. package/dist/chunk-KTKZSYIH.js.map +7 -0
  139. package/dist/chunk-L7IRWUKT.js +480 -0
  140. package/dist/chunk-LFCYMSVA.js +314 -0
  141. package/dist/chunk-LFCYMSVA.js.map +7 -0
  142. package/dist/chunk-LX6G7HJJ.js +617 -0
  143. package/dist/chunk-M2G5R4WB.js +142 -0
  144. package/dist/chunk-M4TTGGT4.js +102 -0
  145. package/dist/chunk-M6EF3WVV.js +1825 -0
  146. package/dist/chunk-M6KHT3MM.js +146 -0
  147. package/dist/chunk-MCZFHWIR.js +230 -0
  148. package/dist/chunk-MFQACKYU.js +448 -0
  149. package/dist/chunk-MVGAGTM3.js +343 -0
  150. package/dist/chunk-NELOT3NJ.js +119 -0
  151. package/dist/chunk-NRKMXULC.js +54 -0
  152. package/dist/chunk-NSTL4MY2.js +2110 -0
  153. package/dist/chunk-NSTL4MY2.js.map +7 -0
  154. package/dist/chunk-NYRZNRG5.js +177 -0
  155. package/dist/chunk-ONPKE6DC.js +368 -0
  156. package/dist/chunk-OXVLWQ6M.js +556 -0
  157. package/dist/chunk-OXVLWQ6M.js.map +7 -0
  158. package/dist/chunk-PFRWS4CR.js +203 -0
  159. package/dist/chunk-PJKQUXEN.js +1275 -0
  160. package/dist/chunk-Q2L44HK3.js +6364 -0
  161. package/dist/chunk-QNHT74XC.js +1245 -0
  162. package/dist/chunk-QNHT74XC.js.map +7 -0
  163. package/dist/chunk-RKO6BL5N.js +446 -0
  164. package/dist/chunk-T25QNZHB.js +254 -0
  165. package/dist/chunk-U7TBYVIQ.js +31 -0
  166. package/dist/chunk-UGRQXBL4.js +381 -0
  167. package/dist/chunk-USFSHSCJ.js +477 -0
  168. package/dist/chunk-VJ6UFVGC.js +2833 -0
  169. package/dist/chunk-W3WPPOXH.js +292 -0
  170. package/dist/chunk-WFCSOTBO.js +263 -0
  171. package/dist/chunk-WHP4AKDM.js +185 -0
  172. package/dist/chunk-WHP4AKDM.js.map +7 -0
  173. package/dist/chunk-WZ2L57MB.js +102 -0
  174. package/dist/chunk-XPY6AWXO.js +787 -0
  175. package/dist/chunk-XPY6AWXO.js.map +7 -0
  176. package/dist/chunk-Y4UAKFWC.js +37 -0
  177. package/dist/chunk-YQBS2ZCK.js +514 -0
  178. package/dist/chunk-Z5U6HOE4.js +190 -0
  179. package/dist/chunk-Z5U6HOE4.js.map +7 -0
  180. package/dist/chunk-ZNEJUKJW.js +140 -0
  181. package/dist/chunk-ZNEJUKJW.js.map +7 -0
  182. package/dist/chunk-ZTHM2TKP.js +176 -0
  183. package/dist/condition-2PASYSUC.js +332 -0
  184. package/dist/controls-5IMJ6K5L.js +41 -0
  185. package/dist/controls.config-P5PG2DHW.js +39 -0
  186. package/dist/correlation-U3EDLNHR.js +102 -0
  187. package/dist/cuminc-2HUFEROK.js +1149 -0
  188. package/dist/cuminc.integration.spec-WFWAPTDA.js +678 -0
  189. package/dist/cuminc.integration.spec-WFWAPTDA.js.map +7 -0
  190. package/dist/customdata.inputui-ZHWNEPFH.js +289 -0
  191. package/dist/dataDownload-VBSJBKMP.js +330 -0
  192. package/dist/dataDownload.integration.spec-LUFSETOP.js +193 -0
  193. package/dist/databrowser.ui-6H2KMSTJ.js +433 -0
  194. package/dist/dictionary-V37LXFIP.js +118 -0
  195. package/dist/dnaMethylation-OIZMHMLK.js +38 -0
  196. package/dist/dnaMethylation.integration.spec-CWPTJ74H.js +203 -0
  197. package/dist/dofetch-IWPZQB5N.js +51 -0
  198. package/dist/e2pca-7SLIAGYW.js +350 -0
  199. package/dist/ep-7L6KF6K4.js +1256 -0
  200. package/dist/expclust.gdc.spec-JT452Q3G.js +307 -0
  201. package/dist/facet-CXOUU5AS.js +521 -0
  202. package/dist/forms2-VPNCLQOY.js +539 -0
  203. package/dist/gb-P4VRXRED.js +88 -0
  204. package/dist/geneExpClustering-FQTCKRJJ.js +249 -0
  205. package/dist/geneExpression-BHO5326K.js +313 -0
  206. package/dist/geneExpression-ZMERB64E.js +38 -0
  207. package/dist/geneExpression.unit.spec-CNVHZWNG.js +102 -0
  208. package/dist/geneORA-FXVUCXGX.js +278 -0
  209. package/dist/geneRanking-SFK4UBKQ.js +553 -0
  210. package/dist/geneVariant-IYEHB4H7.js +41 -0
  211. package/dist/geneVariant-LIRRLUFR.js +39 -0
  212. package/dist/geneVariant.integration.spec-Y2NPNTYX.js +198 -0
  213. package/dist/genefusion.ui-L3HIJM3N.js +309 -0
  214. package/dist/geneset-A6VUFX63.js +208 -0
  215. package/dist/genomeBrowser.spec-CB4HHHBN.js +281 -0
  216. package/dist/grin2-FKBIMH5N.js +75 -0
  217. package/dist/grin2-V36KLEBU.js +1143 -0
  218. package/dist/grin2-V36KLEBU.js.map +7 -0
  219. package/dist/hierCluster-QFPRMHVA.js +63 -0
  220. package/dist/hierCluster-YWC3XYPV.js +59 -0
  221. package/dist/hierCluster.config-F7YYZNM3.js +40 -0
  222. package/dist/hierCluster.integration.spec-AF4L3YT6.js +488 -0
  223. package/dist/hierCluster.interactivity-RPY74PK6.js +54 -0
  224. package/dist/hierCluster.renderers-LOKHZ3V2.js +21 -0
  225. package/dist/imagePlot-BBEXA754.js +163 -0
  226. package/dist/importPlot-7QGANZGK.js +8 -0
  227. package/dist/isoformExpression-4SLLCVFD.js +40 -0
  228. package/dist/isoformExpression.unit.spec-GEL4JJ64.js +208 -0
  229. package/dist/launch.adhoc-LWLBQJS5.js +42 -0
  230. package/dist/leftlabel.sample-RTEZOIH2.js +264 -0
  231. package/dist/legacyDataset-VLD7ZYWI.js +119 -0
  232. package/dist/lollipop-XKQK5QZU.js +171 -0
  233. package/dist/maf-AZQPPWDO.js +459 -0
  234. package/dist/maftimeline-7MSVYKQU.js +593 -0
  235. package/dist/matrix-BGLWC25D.js +58 -0
  236. package/dist/matrix-IQR5SRMK.js +63 -0
  237. package/dist/matrix.cells-5C57NWOY.js +28 -0
  238. package/dist/matrix.config-2DQXAN2E.js +41 -0
  239. package/dist/matrix.data-ADCGF5H6.js +25 -0
  240. package/dist/matrix.groups-V4ITQ5F7.js +27 -0
  241. package/dist/matrix.integration.spec-IBNOO2WP.js +3072 -0
  242. package/dist/matrix.integration.spec-IBNOO2WP.js.map +7 -0
  243. package/dist/matrix.interactivity-JNELJFOV.js +42 -0
  244. package/dist/matrix.layout-WBVIV6GR.js +44 -0
  245. package/dist/matrix.legend-YHOWPK77.js +22 -0
  246. package/dist/matrix.renderers-5BGVRR3M.js +38 -0
  247. package/dist/matrix.serieses-2GZJOASZ.js +21 -0
  248. package/dist/matrix.sort-WKIWPJKP.js +27 -0
  249. package/dist/matrix.sort.unit.spec-L2E4D4AS.js +472 -0
  250. package/dist/matrix.sorterUi-TEJWWJ64.js +18 -0
  251. package/dist/matrix.sorterUi.unit.spec-SHP7C4P7.js +342 -0
  252. package/dist/mavb-4MXNYUEO.js +732 -0
  253. package/dist/mds.fimo-WHIJIBOI.js +518 -0
  254. package/dist/mds.samplescatterplot-BRJ6NG2D.js +1550 -0
  255. package/dist/mds.survivalplot-OPCMB5PB.js +483 -0
  256. package/dist/numericDictTermCluster-7MIFOP2K.js +65 -0
  257. package/dist/oncomatrix-BGG6BEUI.js +295 -0
  258. package/dist/oncomatrix.spec-LYQ4L4F3.js +448 -0
  259. package/dist/plot.2dvaf-6WVCP2ZI.js +377 -0
  260. package/dist/plot.app-MLBP6WFP.js +41 -0
  261. package/dist/plot.barplot-JEPRZSCU.js +102 -0
  262. package/dist/plot.boxplot-GNFW42VM.js +152 -0
  263. package/dist/plot.brainImaging-5ACNSD45.js +51 -0
  264. package/dist/plot.disco-Q2V2KKIH.js +102 -0
  265. package/dist/plot.dzi-KVT6S7K7.js +33 -0
  266. package/dist/plot.ssgq-4N3KFJQ2.js +139 -0
  267. package/dist/plot.vaf2cov-ITRG5U43.js +259 -0
  268. package/dist/plot.wsi-26YZNU4V.js +36 -0
  269. package/dist/polar2-J7GVUK4X.js +231 -0
  270. package/dist/profileForms-VXV2JLXU.js +446 -0
  271. package/dist/profilePlot-ZZYZK4SY.js +54 -0
  272. package/dist/proteinView-7KN532D3.js +1568 -0
  273. package/dist/qualitative-MLRVLIAU.js +43 -0
  274. package/dist/radar2-WM2ZBOH3.js +326 -0
  275. package/dist/radarFacility2-3SBR2JJ3.js +334 -0
  276. package/dist/regression-WMRPQJW2.js +56 -0
  277. package/dist/regression.inputs-VWZKSYNY.js +48 -0
  278. package/dist/regression.inputs.term-OWE6GWHM.js +48 -0
  279. package/dist/regression.inputs.values.table-4INNZQI2.js +45 -0
  280. package/dist/regression.integration.spec-XKQ2JOOT.js +784 -0
  281. package/dist/regression.results-VZBYMBYC.js +40 -0
  282. package/dist/regression.spec-DU3UTDCJ.js +708 -0
  283. package/dist/render-N5FOF247.js +38 -0
  284. package/dist/report-DW3OHB67.js +222 -0
  285. package/dist/sampleScatter.spec-REFSK2V4.js +202 -0
  286. package/dist/sampleView-ICOT2R6O.js +48 -0
  287. package/dist/samplelst-TJEVASYG.js +111 -0
  288. package/dist/samplematrix-6DAWCXQ3.js +2198 -0
  289. package/dist/sc-53LNOB7N.js +86 -0
  290. package/dist/scatter-DKYSS4DL.js +851 -0
  291. package/dist/selectGenomeWithTklst-WTX66TV3.js +134 -0
  292. package/dist/singleCellCellType-D2CN2BHQ.js +38 -0
  293. package/dist/singleCellCellType.unit.spec-LADUCI4R.js +160 -0
  294. package/dist/singleCellGeneExpression-YR2ZT34W.js +38 -0
  295. package/dist/singleCellGeneExpression.unit.spec-BM63M432.js +153 -0
  296. package/dist/singleCellPlot-3ICIOILE.js +54 -0
  297. package/dist/singlecell-6ZUFA3BQ.js +86 -0
  298. package/dist/singlecell-KX7W4U57.js +1572 -0
  299. package/dist/snp-VIURB7L3.js +38 -0
  300. package/dist/snp.unit.spec-ACZNZUNS.js +176 -0
  301. package/dist/snplocus-3LW4ZUZR.js +208 -0
  302. package/dist/spliceevent.a53ss.diagram-AKTZGWNM.js +151 -0
  303. package/dist/spliceevent.exonskip.diagram-XZHXB77R.js +283 -0
  304. package/dist/spliceevent.exonskip.diagram-XZHXB77R.js.map +7 -0
  305. package/dist/spliceevent.noeventdiagram-YTXWWNTJ.js +460 -0
  306. package/dist/ssGSEA-THW4WFMI.js +38 -0
  307. package/dist/ssGSEA.unit.spec-HTRGQI2K.js +88 -0
  308. package/dist/summarizeCnvGeneexp-RFYC3H2Z.js +163 -0
  309. package/dist/summarizeGeneexpSurvival-DQBZUTQ6.js +114 -0
  310. package/dist/summarizeMutationCnv-7AYEMHAI.js +164 -0
  311. package/dist/summarizeMutationDiagnosis-AKFJDSAF.js +40 -0
  312. package/dist/summarizeMutationSurvival-QJHZRQBZ.js +99 -0
  313. package/dist/summary-A5P7AYK4.js +49 -0
  314. package/dist/summary.integration.spec-HQISXGNL.js +414 -0
  315. package/dist/summaryInput-HP675QOQ.js +235 -0
  316. package/dist/sunburst-65LSYRXX.js +284 -0
  317. package/dist/survival-QNEI6YVK.js +46 -0
  318. package/dist/survival-UI74VXSM.js +58 -0
  319. package/dist/survival.integration.spec-X5N3JQXS.js +915 -0
  320. package/dist/survival.integration.spec-X5N3JQXS.js.map +7 -0
  321. package/dist/svgraph-PSX2NER3.js +1387 -0
  322. package/dist/svmr-QDQ33EFX.js +3842 -0
  323. package/dist/table-LWAI27UO.js +200 -0
  324. package/dist/termCollection-3JHR74FG.js +179 -0
  325. package/dist/termCollection-CDF5LYUG.js +38 -0
  326. package/dist/termCollection.unit.spec-HOJKYWHF.js +208 -0
  327. package/dist/tk-GL4QCL4K.js +1019 -0
  328. package/dist/tk-GL4QCL4K.js.map +7 -0
  329. package/dist/tk-OEQFO73V.js +46 -0
  330. package/dist/tp.ui-SHNERDGC.js +1459 -0
  331. package/dist/tvs.dt-CZDC4TSR.js +39 -0
  332. package/dist/tvs.dtcnv.categorical-OPBDHZGB.js +40 -0
  333. package/dist/tvs.dtcnv.continuous-AR6P4EP3.js +72 -0
  334. package/dist/tvs.dtfusion-2YQ7N6FQ.js +40 -0
  335. package/dist/tvs.dtitd-ATCHW735.js +40 -0
  336. package/dist/tvs.dtitd-ATCHW735.js.map +7 -0
  337. package/dist/tvs.dtsnvindel-WHHWAATJ.js +40 -0
  338. package/dist/tvs.dtsv-3UMCW65O.js +40 -0
  339. package/dist/tvs.numeric-TOEPASWN.js +21 -0
  340. package/dist/tvs.samplelst-M7XKXRTZ.js +104 -0
  341. package/dist/tvs.termCollection-WT4WZMYR.js +159 -0
  342. package/dist/violin-2YGXTBDS.js +46 -0
  343. package/dist/violin.integration.spec-YWNHVAGS.js +1425 -0
  344. package/dist/violin.interactivity-J6BE2UQL.js +38 -0
  345. package/dist/violin.renderer-3GRUWP2U.js +40 -0
  346. package/dist/vocabulary-2INCVPYJ.js +41 -0
  347. package/package.json +3 -3
  348. package/dist/2dmaf-SKNV7IHT.js +0 -1373
  349. package/dist/AIProjectAdmin-AOTVRBNH.js +0 -958
  350. package/dist/AppHeader-M2ZSS3M3.js +0 -835
  351. package/dist/BoxPlot-P3EECSQA.js +0 -1217
  352. package/dist/CorrelationVolcano-YCQ5S6MT.js +0 -619
  353. package/dist/DE-RBMOQZCR.js +0 -95
  354. package/dist/DEinput-PTW6RS6U.js +0 -301
  355. package/dist/DifferentialAnalysis-M6IDWPYX.js +0 -245
  356. package/dist/DifferentialAnalysis-M6IDWPYX.js.map +0 -7
  357. package/dist/Disco-GUKDAHUY.js +0 -3297
  358. package/dist/Disco-GUKDAHUY.js.map +0 -7
  359. package/dist/Disco.UI-YBIMV7RH.js +0 -249
  360. package/dist/DmrPlot-JQPLLU6P.js +0 -642
  361. package/dist/GB-UOTFNVJE.js +0 -1353
  362. package/dist/GB-UOTFNVJE.js.map +0 -7
  363. package/dist/GeneExpInput-3OPDDCXR.js +0 -367
  364. package/dist/HicApp-VFOWRP6G.js +0 -2250
  365. package/dist/IDCViewer-Y7EOIIBG.js +0 -10455
  366. package/dist/IDCViewer-Y7EOIIBG.js.map +0 -7
  367. package/dist/NumBinaryEditor-RL44SO3T.js +0 -271
  368. package/dist/NumBinaryEditor.unit.spec-P73PGAX5.js +0 -286
  369. package/dist/NumContEditor-MIC7M73G.js +0 -109
  370. package/dist/NumContEditor.unit.spec-5XZH7OCG.js +0 -169
  371. package/dist/NumCustomBinEditor-W357XTIR.js +0 -38
  372. package/dist/NumCustomBinEditor.unit.spec-CJMK4CYW.js +0 -284
  373. package/dist/NumDiscreteEditor-PRSUMS3I.js +0 -179
  374. package/dist/NumDiscreteEditor.unit.spec-A6R56P3Z.js +0 -202
  375. package/dist/NumRegularBinEditor-7OHUEUCC.js +0 -38
  376. package/dist/NumRegularBinEditor.unit.spec-NOAX42UZ.js +0 -227
  377. package/dist/NumSplineEditor-XI7AT5LM.js +0 -198
  378. package/dist/NumSplineEditor.unit.spec-ZH4M2N2C.js +0 -199
  379. package/dist/NumericDensity-X6IHQAW3.js +0 -38
  380. package/dist/NumericDensity.unit.spec-EKVD4AUG.js +0 -221
  381. package/dist/NumericHandler-5ONBWFJ5.js +0 -39
  382. package/dist/NumericHandler.unit.spec-SHI6E4VA.js +0 -219
  383. package/dist/ProteomeInput-HN46MIBP.js +0 -396
  384. package/dist/ProteomeInput-HN46MIBP.js.map +0 -7
  385. package/dist/RunChart2-Y6IY6MW2.js +0 -758
  386. package/dist/SC-JYF564FK.js +0 -1130
  387. package/dist/SC-JYF564FK.js.map +0 -7
  388. package/dist/Volcano-WZGAUYGY.js +0 -1380
  389. package/dist/Volcano-WZGAUYGY.js.map +0 -7
  390. package/dist/WSIViewer-RLLL7MAL.js +0 -48562
  391. package/dist/WsiSamplesPlot-FU3TCOTY.js +0 -165
  392. package/dist/adSandbox-ZINST5DE.js +0 -38
  393. package/dist/animatedBubbleChart-PIQWCVBJ.js +0 -555
  394. package/dist/app-N42SVGI2.js +0 -37
  395. package/dist/app-RWN4XLCP.js +0 -49
  396. package/dist/bam-QTSTXJ4N.js +0 -860
  397. package/dist/barchart-27BYTRVI.js +0 -47
  398. package/dist/barchart.data-OUNVH4JU.js +0 -22
  399. package/dist/barchart.events-PY4CEDSO.js +0 -47
  400. package/dist/barchart.integration.spec-H4WGHQ7R.js +0 -2196
  401. package/dist/barchart2-TIOTRAC2.js +0 -314
  402. package/dist/bars.renderer-57KSYAAT.js +0 -12
  403. package/dist/block-YPM767A4.js +0 -6226
  404. package/dist/block-YPM767A4.js.map +0 -7
  405. package/dist/block.init-LRZ3QAGC.js +0 -38
  406. package/dist/block.mds.expressionrank-IV7JLC52.js +0 -359
  407. package/dist/block.mds.geneboxplot-IBCE5XZU.js +0 -828
  408. package/dist/block.mds.junction-ISSCJHNF.js +0 -1545
  409. package/dist/block.mds.svcnv-ZEBVBTL7.js +0 -6801
  410. package/dist/block.svg-FYWA5VYH.js +0 -164
  411. package/dist/block.tk.aicheck-AD6DTKXR.js +0 -283
  412. package/dist/block.tk.ase-LO2J4KRE.js +0 -365
  413. package/dist/block.tk.bam-XGX22FCN.js +0 -1906
  414. package/dist/block.tk.bedgraphdot-SUIRFNFL.js +0 -384
  415. package/dist/block.tk.bigwig.ui-2Q7FAK3V.js +0 -212
  416. package/dist/block.tk.hicstraw-4MVP2PCL.js +0 -823
  417. package/dist/block.tk.junction-F54FTEPB.js +0 -2364
  418. package/dist/block.tk.junction.textmatrixui-ETROZJVK.js +0 -199
  419. package/dist/block.tk.ld-NJEDKSTU.js +0 -99
  420. package/dist/block.tk.menu-LZOY4FKT.js +0 -1029
  421. package/dist/block.tk.pgv-I3XHJ7VU.js +0 -944
  422. package/dist/brainImaging-BGP6VRFV.js +0 -423
  423. package/dist/brainRegions-AAN7LM2Y.js +0 -221
  424. package/dist/bubbleHeatmap-HNEU4CYA.js +0 -383
  425. package/dist/chunk-25XCVML7.js +0 -236
  426. package/dist/chunk-2XV6U42J.js +0 -100
  427. package/dist/chunk-36NAWXQ7.js +0 -5067
  428. package/dist/chunk-36NAWXQ7.js.map +0 -7
  429. package/dist/chunk-3LYZMOLO.js +0 -58
  430. package/dist/chunk-427UL37G.js +0 -222
  431. package/dist/chunk-4C3XRI6J.js +0 -54
  432. package/dist/chunk-4O6H4ZHL.js +0 -514
  433. package/dist/chunk-53JJ7SXN.js +0 -276
  434. package/dist/chunk-5CR24RTX.js +0 -381
  435. package/dist/chunk-5HMX4NUJ.js +0 -217
  436. package/dist/chunk-5QTJUPFS.js +0 -26
  437. package/dist/chunk-5V2BMEAS.js +0 -55
  438. package/dist/chunk-6MBTPVIM.js +0 -1275
  439. package/dist/chunk-6MQWYMPB.js +0 -183
  440. package/dist/chunk-6MQWYMPB.js.map +0 -7
  441. package/dist/chunk-7D3WX34I.js +0 -1230
  442. package/dist/chunk-7D3WX34I.js.map +0 -7
  443. package/dist/chunk-7FSIZZOX.js +0 -176
  444. package/dist/chunk-7KRS7L4U.js +0 -1443
  445. package/dist/chunk-7KRS7L4U.js.map +0 -7
  446. package/dist/chunk-A3URBFXN.js +0 -119
  447. package/dist/chunk-A45KH7LP.js +0 -254
  448. package/dist/chunk-B4GS7OLB.js +0 -4284
  449. package/dist/chunk-BKPDYW5T.js +0 -177
  450. package/dist/chunk-BWQV2OBL.js +0 -102
  451. package/dist/chunk-BXGQXLHP.js +0 -2786
  452. package/dist/chunk-CDJAHMAN.js +0 -299
  453. package/dist/chunk-CXHLROWX.js +0 -37
  454. package/dist/chunk-EKKQMKQI.js +0 -102
  455. package/dist/chunk-EPWIJEMK.js +0 -158
  456. package/dist/chunk-F7Y67LK7.js +0 -230
  457. package/dist/chunk-FDBVAL6K.js +0 -14
  458. package/dist/chunk-FISP5YN2.js +0 -292
  459. package/dist/chunk-G3FSS7GR.js +0 -477
  460. package/dist/chunk-GE4NJDV4.js +0 -98
  461. package/dist/chunk-GYGU4UT5.js +0 -34
  462. package/dist/chunk-I5IPJG2R.js +0 -148
  463. package/dist/chunk-I73KUUYG.js +0 -287
  464. package/dist/chunk-I73KUUYG.js.map +0 -7
  465. package/dist/chunk-IFK24IXL.js +0 -194
  466. package/dist/chunk-ILE6ML2D.js +0 -50
  467. package/dist/chunk-IRKP6IZ4.js +0 -216
  468. package/dist/chunk-J6ZOUCWN.js +0 -170
  469. package/dist/chunk-JFRSVFWO.js +0 -736
  470. package/dist/chunk-JFRSVFWO.js.map +0 -7
  471. package/dist/chunk-JNBJG57F.js +0 -448
  472. package/dist/chunk-K5UVG3FQ.js +0 -117
  473. package/dist/chunk-KE5B34CS.js +0 -102
  474. package/dist/chunk-L6A2BEXB.js +0 -2681
  475. package/dist/chunk-LQJMCE7G.js +0 -467
  476. package/dist/chunk-LSWU6EAQ.js +0 -31
  477. package/dist/chunk-LWEGSYDD.js +0 -226
  478. package/dist/chunk-LWEGSYDD.js.map +0 -7
  479. package/dist/chunk-LYVLF6HO.js +0 -1825
  480. package/dist/chunk-MBUQ34CF.js +0 -189
  481. package/dist/chunk-MBUQ34CF.js.map +0 -7
  482. package/dist/chunk-MN3KDNHC.js +0 -617
  483. package/dist/chunk-MNIBZTQE.js +0 -146
  484. package/dist/chunk-MTHEEXT2.js +0 -1450
  485. package/dist/chunk-MTHEEXT2.js.map +0 -7
  486. package/dist/chunk-MTZSN3H4.js +0 -302
  487. package/dist/chunk-N7O7NPUO.js +0 -534
  488. package/dist/chunk-N7O7NPUO.js.map +0 -7
  489. package/dist/chunk-NNFAUP2I.js +0 -315
  490. package/dist/chunk-NNFAUP2I.js.map +0 -7
  491. package/dist/chunk-OF5FE6GT.js +0 -142
  492. package/dist/chunk-OVSKJROY.js +0 -815
  493. package/dist/chunk-OVSKJROY.js.map +0 -7
  494. package/dist/chunk-PJ3FCJBZ.js +0 -480
  495. package/dist/chunk-PU2Q4SZR.js +0 -2327
  496. package/dist/chunk-PZPS56Z6.js +0 -343
  497. package/dist/chunk-QKR3ZD3S.js +0 -833
  498. package/dist/chunk-QMXCK4Y5.js +0 -203
  499. package/dist/chunk-ROJ3LJLE.js +0 -448
  500. package/dist/chunk-SLHWUFAW.js +0 -1943
  501. package/dist/chunk-SLHWUFAW.js.map +0 -7
  502. package/dist/chunk-SOTB4FRE.js +0 -2098
  503. package/dist/chunk-SOTB4FRE.js.map +0 -7
  504. package/dist/chunk-TJYRBEBK.js +0 -2878
  505. package/dist/chunk-TJYRBEBK.js.map +0 -7
  506. package/dist/chunk-U3G4JGKJ.js +0 -54
  507. package/dist/chunk-UN3O2MNB.js +0 -375
  508. package/dist/chunk-VDZ5QOF6.js +0 -446
  509. package/dist/chunk-VO5XZ2EG.js +0 -129
  510. package/dist/chunk-VRH7NP6R.js +0 -263
  511. package/dist/chunk-VTMJGRT5.js +0 -272
  512. package/dist/chunk-W5X6C7LY.js +0 -399
  513. package/dist/chunk-WJGUNGFK.js +0 -272
  514. package/dist/chunk-WKT46ZJ6.js +0 -368
  515. package/dist/chunk-WQCQWUUP.js +0 -2833
  516. package/dist/chunk-WY2PGUVX.js +0 -20898
  517. package/dist/chunk-WY2PGUVX.js.map +0 -7
  518. package/dist/chunk-WZ2U5QXJ.js +0 -6364
  519. package/dist/chunk-WZUWK5Q6.js +0 -1102
  520. package/dist/chunk-XPMTUVSS.js +0 -1220
  521. package/dist/chunk-XPMTUVSS.js.map +0 -7
  522. package/dist/chunk-YYFQPGIE.js +0 -386
  523. package/dist/condition-GVIEMQG7.js +0 -332
  524. package/dist/controls-73K3XBDR.js +0 -41
  525. package/dist/controls.config-FQKY2LRE.js +0 -39
  526. package/dist/correlation-AOAXIUFJ.js +0 -102
  527. package/dist/cuminc-OD2PPCEK.js +0 -1149
  528. package/dist/cuminc.integration.spec-TMIFW7EO.js +0 -678
  529. package/dist/cuminc.integration.spec-TMIFW7EO.js.map +0 -7
  530. package/dist/customdata.inputui-SWLGLATL.js +0 -289
  531. package/dist/dataDownload-456HL2OE.js +0 -330
  532. package/dist/dataDownload.integration.spec-5YS4MWK5.js +0 -193
  533. package/dist/databrowser.ui-7APC5MNM.js +0 -433
  534. package/dist/dictionary-A3HA5MVK.js +0 -118
  535. package/dist/dnaMethylation-6ONBKARD.js +0 -38
  536. package/dist/dnaMethylation.integration.spec-T3WEGVX3.js +0 -203
  537. package/dist/dofetch-RVPQUMVX.js +0 -51
  538. package/dist/e2pca-75WZ46XG.js +0 -350
  539. package/dist/ep-QG5CWPTW.js +0 -1256
  540. package/dist/expclust.gdc.spec-KBBQJR4M.js +0 -307
  541. package/dist/facet-QGB2Q7YV.js +0 -521
  542. package/dist/forms2-CJGDCWYH.js +0 -539
  543. package/dist/gb-NEFAHKQI.js +0 -88
  544. package/dist/geneExpClustering-ZVR44UZC.js +0 -249
  545. package/dist/geneExpression-25EX4DFK.js +0 -313
  546. package/dist/geneExpression-FALOA4GC.js +0 -38
  547. package/dist/geneExpression.unit.spec-BQLELQUS.js +0 -102
  548. package/dist/geneORA-K2B7JYWD.js +0 -278
  549. package/dist/geneRanking-6AXL5ZJS.js +0 -553
  550. package/dist/geneVariant-RZFDP5J5.js +0 -41
  551. package/dist/geneVariant-UIBZ5UIQ.js +0 -39
  552. package/dist/geneVariant.integration.spec-4EZQMPQB.js +0 -198
  553. package/dist/genefusion.ui-YK4TNS2P.js +0 -309
  554. package/dist/geneset-47J4D5ID.js +0 -208
  555. package/dist/genomeBrowser.spec-LFFWRIWG.js +0 -281
  556. package/dist/grin2-DQB2WW3C.js +0 -75
  557. package/dist/grin2-TZFU4JM3.js +0 -1078
  558. package/dist/grin2-TZFU4JM3.js.map +0 -7
  559. package/dist/gsea-KKLAMLMG.js +0 -47
  560. package/dist/hierCluster-3MZEJG6B.js +0 -59
  561. package/dist/hierCluster-YGBC4XCZ.js +0 -63
  562. package/dist/hierCluster.config-A4N54K3A.js +0 -40
  563. package/dist/hierCluster.integration.spec-GLKXFZDM.js +0 -488
  564. package/dist/hierCluster.interactivity-4TPWGIVC.js +0 -54
  565. package/dist/hierCluster.renderers-WUWSXXHU.js +0 -21
  566. package/dist/imagePlot-JRPYOV3Q.js +0 -163
  567. package/dist/importPlot-A3PFUP6K.js +0 -8
  568. package/dist/isoformExpression-5L4O3WKL.js +0 -40
  569. package/dist/isoformExpression.unit.spec-SLB6XIX4.js +0 -208
  570. package/dist/launch.adhoc-QI7TPYSC.js +0 -42
  571. package/dist/leftlabel.sample-OSIRTJFW.js +0 -264
  572. package/dist/legacyDataset-TNIIJABK.js +0 -119
  573. package/dist/lollipop-LAELXNQY.js +0 -171
  574. package/dist/maf-HZAYVZFO.js +0 -459
  575. package/dist/maftimeline-BLBNUGAL.js +0 -593
  576. package/dist/matrix-LVJSHXDM.js +0 -58
  577. package/dist/matrix-S5QQV4JU.js +0 -63
  578. package/dist/matrix.cells-JUTRYPG4.js +0 -28
  579. package/dist/matrix.config-ZTWWYNIZ.js +0 -41
  580. package/dist/matrix.data-BREYB54F.js +0 -25
  581. package/dist/matrix.groups-WMHTLOXC.js +0 -27
  582. package/dist/matrix.integration.spec-S6FIEE2X.js +0 -3072
  583. package/dist/matrix.integration.spec-S6FIEE2X.js.map +0 -7
  584. package/dist/matrix.interactivity-TMBVAM5M.js +0 -42
  585. package/dist/matrix.layout-POK5NOUV.js +0 -44
  586. package/dist/matrix.legend-6XVQ67AC.js +0 -22
  587. package/dist/matrix.renderers-G5FQZZ73.js +0 -38
  588. package/dist/matrix.serieses-XNLQSQS6.js +0 -21
  589. package/dist/matrix.sort-XNES23OQ.js +0 -27
  590. package/dist/matrix.sort.unit.spec-65BDBQUV.js +0 -472
  591. package/dist/matrix.sorterUi-WC2YX7S7.js +0 -18
  592. package/dist/matrix.sorterUi.unit.spec-GZQBW7F7.js +0 -342
  593. package/dist/mavb-T2UCRWWM.js +0 -732
  594. package/dist/mds.fimo-65UUK7ER.js +0 -518
  595. package/dist/mds.samplescatterplot-4NHGQBJF.js +0 -1550
  596. package/dist/mds.survivalplot-WVAHDM3Z.js +0 -483
  597. package/dist/numericDictTermCluster-CXASCSQ6.js +0 -65
  598. package/dist/oncomatrix-5WMOICWR.js +0 -295
  599. package/dist/oncomatrix.spec-POVBNFJR.js +0 -448
  600. package/dist/plot.2dvaf-63K5RSIU.js +0 -377
  601. package/dist/plot.app-V5IY25QS.js +0 -41
  602. package/dist/plot.barplot-IQTYHNFE.js +0 -102
  603. package/dist/plot.boxplot-2RMTO7AS.js +0 -152
  604. package/dist/plot.brainImaging-DLUHAHHG.js +0 -51
  605. package/dist/plot.disco-WK6GDLNF.js +0 -102
  606. package/dist/plot.dzi-3V3FWE7U.js +0 -33
  607. package/dist/plot.ssgq-TENK2RP4.js +0 -139
  608. package/dist/plot.vaf2cov-P2QOOZGZ.js +0 -259
  609. package/dist/plot.wsi-BVRGJF4E.js +0 -36
  610. package/dist/polar2-NNOZOQQJ.js +0 -231
  611. package/dist/profileForms-RS4GEZZV.js +0 -446
  612. package/dist/profilePlot-3DLME3NH.js +0 -54
  613. package/dist/proteinView-NPKJAQAI.js +0 -1568
  614. package/dist/qualitative-S45RXXRJ.js +0 -43
  615. package/dist/radar2-EX7YBNMT.js +0 -326
  616. package/dist/radarFacility2-WU5O6O77.js +0 -334
  617. package/dist/regression-7MCOYJVD.js +0 -56
  618. package/dist/regression.inputs-QHSWJ23R.js +0 -48
  619. package/dist/regression.inputs.term-EJ4Z5Q5O.js +0 -48
  620. package/dist/regression.inputs.values.table-YKMAWNXN.js +0 -45
  621. package/dist/regression.integration.spec-XOX7OXXA.js +0 -784
  622. package/dist/regression.results-YKPOTPCC.js +0 -40
  623. package/dist/regression.spec-YIIY2AZA.js +0 -708
  624. package/dist/report-JEJFCWUU.js +0 -222
  625. package/dist/sampleScatter.spec-LBAZBDYA.js +0 -202
  626. package/dist/sampleView-WKZT5ZFE.js +0 -48
  627. package/dist/samplelst-HXM3H6M4.js +0 -111
  628. package/dist/samplematrix-LCGHK2EK.js +0 -2198
  629. package/dist/sc-3OE2G4BU.js +0 -86
  630. package/dist/scatter-AGVUDTTU.js +0 -851
  631. package/dist/selectGenomeWithTklst-WF2XZ6GH.js +0 -134
  632. package/dist/singleCellCellType-2SRGROMS.js +0 -38
  633. package/dist/singleCellCellType.unit.spec-DCGHNRJI.js +0 -160
  634. package/dist/singleCellGeneExpression-RASZA4NO.js +0 -38
  635. package/dist/singleCellGeneExpression.unit.spec-5MRGH2OO.js +0 -153
  636. package/dist/singleCellPlot-TIYA3GNM.js +0 -54
  637. package/dist/singlecell-CFA43TTU.js +0 -1572
  638. package/dist/singlecell-JS5SIZHY.js +0 -86
  639. package/dist/snp-VXZXPMKS.js +0 -38
  640. package/dist/snp.unit.spec-TR5TCO7X.js +0 -176
  641. package/dist/snplocus-VLPH5Y65.js +0 -208
  642. package/dist/spliceevent.a53ss.diagram-PATK67SH.js +0 -151
  643. package/dist/spliceevent.exonskip.diagram-7B3SEOAJ.js +0 -277
  644. package/dist/spliceevent.exonskip.diagram-7B3SEOAJ.js.map +0 -7
  645. package/dist/spliceevent.noeventdiagram-4NPNZUEN.js +0 -460
  646. package/dist/ssGSEA-XMW5BLAU.js +0 -38
  647. package/dist/ssGSEA.unit.spec-ASUWKVUT.js +0 -88
  648. package/dist/summarizeCnvGeneexp-KWRFGX32.js +0 -163
  649. package/dist/summarizeGeneexpSurvival-FIPIMEJR.js +0 -114
  650. package/dist/summarizeMutationCnv-IUYRVLZG.js +0 -164
  651. package/dist/summarizeMutationDiagnosis-ZFJPCABL.js +0 -40
  652. package/dist/summarizeMutationSurvival-HFHYB7DT.js +0 -99
  653. package/dist/summary-AZUNEZ5I.js +0 -49
  654. package/dist/summary.integration.spec-WLBAJL44.js +0 -414
  655. package/dist/summaryInput-NJWVXDXW.js +0 -235
  656. package/dist/sunburst-PXGF4WM6.js +0 -284
  657. package/dist/survival-RAU4XCKG.js +0 -58
  658. package/dist/survival-ZZ4QLZHK.js +0 -46
  659. package/dist/survival.integration.spec-GBQ5X362.js +0 -915
  660. package/dist/survival.integration.spec-GBQ5X362.js.map +0 -7
  661. package/dist/svgraph-7UCFRL6A.js +0 -1387
  662. package/dist/svmr-DB3RY2ID.js +0 -3842
  663. package/dist/table-HJRWWXGM.js +0 -200
  664. package/dist/termCollection-AW7M6DTP.js +0 -38
  665. package/dist/termCollection-WPON7RG3.js +0 -179
  666. package/dist/termCollection.unit.spec-254ESHOE.js +0 -208
  667. package/dist/tk-SUAFM5YA.js +0 -46
  668. package/dist/tp.ui-ELEQGSK2.js +0 -1459
  669. package/dist/tvs.dt-DCXY66YY.js +0 -39
  670. package/dist/tvs.dtcnv.categorical-SFQZMYX7.js +0 -40
  671. package/dist/tvs.dtcnv.continuous-AUZNJMC3.js +0 -72
  672. package/dist/tvs.dtfusion-5F7MYFHZ.js +0 -40
  673. package/dist/tvs.dtsnvindel-JJSPL4PH.js +0 -40
  674. package/dist/tvs.dtsv-DARTSV5H.js +0 -40
  675. package/dist/tvs.numeric-KYAU5OV3.js +0 -21
  676. package/dist/tvs.samplelst-HHBIO26C.js +0 -104
  677. package/dist/tvs.termCollection-KCMALH6B.js +0 -159
  678. package/dist/violin-C26FW5WK.js +0 -46
  679. package/dist/violin.integration.spec-QQ43XWHQ.js +0 -1425
  680. package/dist/violin.interactivity-H2BHC6M4.js +0 -38
  681. package/dist/violin.renderer-GSG2I7AV.js +0 -40
  682. package/dist/vocabulary-3G525O5V.js +0 -41
  683. /package/dist/{2dmaf-SKNV7IHT.js.map → 2dmaf-R3PFZNRN.js.map} +0 -0
  684. /package/dist/{AIProjectAdmin-AOTVRBNH.js.map → AIProjectAdmin-DM3KG6SR.js.map} +0 -0
  685. /package/dist/{AppHeader-M2ZSS3M3.js.map → AppHeader-6DZQ6YZX.js.map} +0 -0
  686. /package/dist/{BoxPlot-P3EECSQA.js.map → BoxPlot-76NINVX4.js.map} +0 -0
  687. /package/dist/{CorrelationVolcano-YCQ5S6MT.js.map → CorrelationVolcano-U5UMJNH5.js.map} +0 -0
  688. /package/dist/{DE-RBMOQZCR.js.map → DE-AXNYWIQK.js.map} +0 -0
  689. /package/dist/{DEinput-PTW6RS6U.js.map → DEinput-JH6YY6LS.js.map} +0 -0
  690. /package/dist/{Disco.UI-YBIMV7RH.js.map → Disco.UI-C7CZINUQ.js.map} +0 -0
  691. /package/dist/{DmrPlot-JQPLLU6P.js.map → DmrPlot-WROR4ENM.js.map} +0 -0
  692. /package/dist/{GeneExpInput-3OPDDCXR.js.map → GeneExpInput-JDU6EI7K.js.map} +0 -0
  693. /package/dist/{HicApp-VFOWRP6G.js.map → HicApp-UNIJLH4B.js.map} +0 -0
  694. /package/dist/{NumBinaryEditor-RL44SO3T.js.map → NumBinaryEditor-WMN2GGO4.js.map} +0 -0
  695. /package/dist/{NumBinaryEditor.unit.spec-P73PGAX5.js.map → NumBinaryEditor.unit.spec-TAMXV6SE.js.map} +0 -0
  696. /package/dist/{NumContEditor-MIC7M73G.js.map → NumContEditor-XYIOJY4E.js.map} +0 -0
  697. /package/dist/{NumContEditor.unit.spec-5XZH7OCG.js.map → NumContEditor.unit.spec-WDZ75BHO.js.map} +0 -0
  698. /package/dist/{NumCustomBinEditor-W357XTIR.js.map → NumCustomBinEditor-5SY3C4TY.js.map} +0 -0
  699. /package/dist/{NumCustomBinEditor.unit.spec-CJMK4CYW.js.map → NumCustomBinEditor.unit.spec-XHTAIXR3.js.map} +0 -0
  700. /package/dist/{NumDiscreteEditor-PRSUMS3I.js.map → NumDiscreteEditor-NRDRX4FD.js.map} +0 -0
  701. /package/dist/{NumDiscreteEditor.unit.spec-A6R56P3Z.js.map → NumDiscreteEditor.unit.spec-2CJW7OAT.js.map} +0 -0
  702. /package/dist/{NumRegularBinEditor-7OHUEUCC.js.map → NumRegularBinEditor-DUDVTNDC.js.map} +0 -0
  703. /package/dist/{NumRegularBinEditor.unit.spec-NOAX42UZ.js.map → NumRegularBinEditor.unit.spec-H3GNQHMN.js.map} +0 -0
  704. /package/dist/{NumSplineEditor-XI7AT5LM.js.map → NumSplineEditor-7Q4AC7KH.js.map} +0 -0
  705. /package/dist/{NumSplineEditor.unit.spec-ZH4M2N2C.js.map → NumSplineEditor.unit.spec-YRZK5PH5.js.map} +0 -0
  706. /package/dist/{NumericDensity-X6IHQAW3.js.map → NumericDensity-NTNWUESG.js.map} +0 -0
  707. /package/dist/{NumericDensity.unit.spec-EKVD4AUG.js.map → NumericDensity.unit.spec-5I5U6T6P.js.map} +0 -0
  708. /package/dist/{NumericHandler-5ONBWFJ5.js.map → NumericHandler-MEW2KMPX.js.map} +0 -0
  709. /package/dist/{NumericHandler.unit.spec-SHI6E4VA.js.map → NumericHandler.unit.spec-JFX4BPRG.js.map} +0 -0
  710. /package/dist/{RunChart2-Y6IY6MW2.js.map → RunChart2-BEBDU7RC.js.map} +0 -0
  711. /package/dist/{WSIViewer-RLLL7MAL.js.map → WSIViewer-ZLQU62PD.js.map} +0 -0
  712. /package/dist/{WsiSamplesPlot-FU3TCOTY.js.map → WsiSamplesPlot-JMBSITOM.js.map} +0 -0
  713. /package/dist/{adSandbox-ZINST5DE.js.map → adSandbox-664IRCRL.js.map} +0 -0
  714. /package/dist/{animatedBubbleChart-PIQWCVBJ.js.map → animatedBubbleChart-TX7NW34K.js.map} +0 -0
  715. /package/dist/{app-N42SVGI2.js.map → app-63WJ3BMP.js.map} +0 -0
  716. /package/dist/{app-RWN4XLCP.js.map → app-77FIZHCG.js.map} +0 -0
  717. /package/dist/{bam-QTSTXJ4N.js.map → bam-IETNVAYD.js.map} +0 -0
  718. /package/dist/{barchart-27BYTRVI.js.map → barchart-YUVXJNH4.js.map} +0 -0
  719. /package/dist/{barchart.data-OUNVH4JU.js.map → barchart.data-P4EIQXGE.js.map} +0 -0
  720. /package/dist/{barchart.events-PY4CEDSO.js.map → barchart.events-JPVCLTIG.js.map} +0 -0
  721. /package/dist/{barchart.integration.spec-H4WGHQ7R.js.map → barchart.integration.spec-ZH7DEQI2.js.map} +0 -0
  722. /package/dist/{barchart2-TIOTRAC2.js.map → barchart2-XO2FG76J.js.map} +0 -0
  723. /package/dist/{bars.renderer-57KSYAAT.js.map → bars.renderer-AUIWUJDH.js.map} +0 -0
  724. /package/dist/{block.init-LRZ3QAGC.js.map → block.init-X7Y2EEVR.js.map} +0 -0
  725. /package/dist/{block.mds.expressionrank-IV7JLC52.js.map → block.mds.expressionrank-BIAOZIZ3.js.map} +0 -0
  726. /package/dist/{block.mds.geneboxplot-IBCE5XZU.js.map → block.mds.geneboxplot-CNICDVLK.js.map} +0 -0
  727. /package/dist/{block.mds.junction-ISSCJHNF.js.map → block.mds.junction-PQXCTSUI.js.map} +0 -0
  728. /package/dist/{block.mds.svcnv-ZEBVBTL7.js.map → block.mds.svcnv-32KMVTCT.js.map} +0 -0
  729. /package/dist/{block.svg-FYWA5VYH.js.map → block.svg-LRTOYQK2.js.map} +0 -0
  730. /package/dist/{block.tk.aicheck-AD6DTKXR.js.map → block.tk.aicheck-HDV7ZIUD.js.map} +0 -0
  731. /package/dist/{block.tk.ase-LO2J4KRE.js.map → block.tk.ase-JIDWKMYI.js.map} +0 -0
  732. /package/dist/{block.tk.bam-XGX22FCN.js.map → block.tk.bam-5X3OS5HB.js.map} +0 -0
  733. /package/dist/{block.tk.bedgraphdot-SUIRFNFL.js.map → block.tk.bedgraphdot-T7JX7YQL.js.map} +0 -0
  734. /package/dist/{block.tk.bigwig.ui-2Q7FAK3V.js.map → block.tk.bigwig.ui-OSAYEBAE.js.map} +0 -0
  735. /package/dist/{block.tk.hicstraw-4MVP2PCL.js.map → block.tk.hicstraw-DEY3VQFK.js.map} +0 -0
  736. /package/dist/{block.tk.junction-F54FTEPB.js.map → block.tk.junction-7UAFEZSJ.js.map} +0 -0
  737. /package/dist/{block.tk.junction.textmatrixui-ETROZJVK.js.map → block.tk.junction.textmatrixui-27LHS33U.js.map} +0 -0
  738. /package/dist/{block.tk.ld-NJEDKSTU.js.map → block.tk.ld-DF2PI7OO.js.map} +0 -0
  739. /package/dist/{block.tk.menu-LZOY4FKT.js.map → block.tk.menu-L2D5KBIV.js.map} +0 -0
  740. /package/dist/{block.tk.pgv-I3XHJ7VU.js.map → block.tk.pgv-QO56SKBV.js.map} +0 -0
  741. /package/dist/{brainImaging-BGP6VRFV.js.map → brainImaging-NIPQWFWO.js.map} +0 -0
  742. /package/dist/{brainRegions-AAN7LM2Y.js.map → brainRegions-ZNZ2WHSU.js.map} +0 -0
  743. /package/dist/{bubbleHeatmap-HNEU4CYA.js.map → bubbleHeatmap-ERWNEKZB.js.map} +0 -0
  744. /package/dist/{chunk-CDJAHMAN.js.map → chunk-2GYWFQML.js.map} +0 -0
  745. /package/dist/{chunk-ILE6ML2D.js.map → chunk-2HYJ4GDH.js.map} +0 -0
  746. /package/dist/{chunk-VTMJGRT5.js.map → chunk-2MG6XE6R.js.map} +0 -0
  747. /package/dist/{chunk-4C3XRI6J.js.map → chunk-33K5PA52.js.map} +0 -0
  748. /package/dist/{chunk-5QTJUPFS.js.map → chunk-37XDBPOP.js.map} +0 -0
  749. /package/dist/{chunk-3LYZMOLO.js.map → chunk-3EWB3246.js.map} +0 -0
  750. /package/dist/{chunk-2XV6U42J.js.map → chunk-3RSKOPIY.js.map} +0 -0
  751. /package/dist/{chunk-WZUWK5Q6.js.map → chunk-4DPVT4NE.js.map} +0 -0
  752. /package/dist/{chunk-GE4NJDV4.js.map → chunk-4IH7DORZ.js.map} +0 -0
  753. /package/dist/{chunk-W5X6C7LY.js.map → chunk-4QNBFIIR.js.map} +0 -0
  754. /package/dist/{chunk-5HMX4NUJ.js.map → chunk-4STKL6SR.js.map} +0 -0
  755. /package/dist/{chunk-GYGU4UT5.js.map → chunk-4TZIVSL5.js.map} +0 -0
  756. /package/dist/{chunk-LQJMCE7G.js.map → chunk-5ABGFJSP.js.map} +0 -0
  757. /package/dist/{chunk-MTZSN3H4.js.map → chunk-5AZNP47R.js.map} +0 -0
  758. /package/dist/{chunk-KE5B34CS.js.map → chunk-6BB43SIB.js.map} +0 -0
  759. /package/dist/{chunk-53JJ7SXN.js.map → chunk-7OHRR2IE.js.map} +0 -0
  760. /package/dist/{chunk-FDBVAL6K.js.map → chunk-ASATD4T7.js.map} +0 -0
  761. /package/dist/{chunk-25XCVML7.js.map → chunk-B5B3LZB3.js.map} +0 -0
  762. /package/dist/{chunk-L6A2BEXB.js.map → chunk-BHGISFCA.js.map} +0 -0
  763. /package/dist/{chunk-BXGQXLHP.js.map → chunk-BMBOZ64T.js.map} +0 -0
  764. /package/dist/{chunk-IRKP6IZ4.js.map → chunk-BOZJHPJP.js.map} +0 -0
  765. /package/dist/{chunk-IFK24IXL.js.map → chunk-CDD7LYJM.js.map} +0 -0
  766. /package/dist/{chunk-PU2Q4SZR.js.map → chunk-CTQ3IUCA.js.map} +0 -0
  767. /package/dist/{chunk-EPWIJEMK.js.map → chunk-D7TID3HR.js.map} +0 -0
  768. /package/dist/{chunk-5V2BMEAS.js.map → chunk-E55LLYRX.js.map} +0 -0
  769. /package/dist/{chunk-YYFQPGIE.js.map → chunk-ESGXULRH.js.map} +0 -0
  770. /package/dist/{chunk-K5UVG3FQ.js.map → chunk-EZ4LZ6ZT.js.map} +0 -0
  771. /package/dist/{chunk-B4GS7OLB.js.map → chunk-F3SJTVP5.js.map} +0 -0
  772. /package/dist/{chunk-427UL37G.js.map → chunk-F5IXNJO7.js.map} +0 -0
  773. /package/dist/{chunk-ROJ3LJLE.js.map → chunk-FJYECRHW.js.map} +0 -0
  774. /package/dist/{chunk-QKR3ZD3S.js.map → chunk-FPNRUQOU.js.map} +0 -0
  775. /package/dist/{chunk-J6ZOUCWN.js.map → chunk-G764NXQN.js.map} +0 -0
  776. /package/dist/{chunk-I5IPJG2R.js.map → chunk-GAPI4MML.js.map} +0 -0
  777. /package/dist/{chunk-WJGUNGFK.js.map → chunk-HLUZOZXJ.js.map} +0 -0
  778. /package/dist/{chunk-UN3O2MNB.js.map → chunk-HOKIK2FR.js.map} +0 -0
  779. /package/dist/{chunk-VO5XZ2EG.js.map → chunk-KLGL6XZD.js.map} +0 -0
  780. /package/dist/{chunk-PJ3FCJBZ.js.map → chunk-L7IRWUKT.js.map} +0 -0
  781. /package/dist/{chunk-MN3KDNHC.js.map → chunk-LX6G7HJJ.js.map} +0 -0
  782. /package/dist/{chunk-OF5FE6GT.js.map → chunk-M2G5R4WB.js.map} +0 -0
  783. /package/dist/{chunk-EKKQMKQI.js.map → chunk-M4TTGGT4.js.map} +0 -0
  784. /package/dist/{chunk-LYVLF6HO.js.map → chunk-M6EF3WVV.js.map} +0 -0
  785. /package/dist/{chunk-MNIBZTQE.js.map → chunk-M6KHT3MM.js.map} +0 -0
  786. /package/dist/{chunk-F7Y67LK7.js.map → chunk-MCZFHWIR.js.map} +0 -0
  787. /package/dist/{chunk-JNBJG57F.js.map → chunk-MFQACKYU.js.map} +0 -0
  788. /package/dist/{chunk-PZPS56Z6.js.map → chunk-MVGAGTM3.js.map} +0 -0
  789. /package/dist/{chunk-A3URBFXN.js.map → chunk-NELOT3NJ.js.map} +0 -0
  790. /package/dist/{chunk-U3G4JGKJ.js.map → chunk-NRKMXULC.js.map} +0 -0
  791. /package/dist/{chunk-BKPDYW5T.js.map → chunk-NYRZNRG5.js.map} +0 -0
  792. /package/dist/{chunk-WKT46ZJ6.js.map → chunk-ONPKE6DC.js.map} +0 -0
  793. /package/dist/{chunk-QMXCK4Y5.js.map → chunk-PFRWS4CR.js.map} +0 -0
  794. /package/dist/{chunk-6MBTPVIM.js.map → chunk-PJKQUXEN.js.map} +0 -0
  795. /package/dist/{chunk-WZ2U5QXJ.js.map → chunk-Q2L44HK3.js.map} +0 -0
  796. /package/dist/{chunk-VDZ5QOF6.js.map → chunk-RKO6BL5N.js.map} +0 -0
  797. /package/dist/{chunk-A45KH7LP.js.map → chunk-T25QNZHB.js.map} +0 -0
  798. /package/dist/{chunk-LSWU6EAQ.js.map → chunk-U7TBYVIQ.js.map} +0 -0
  799. /package/dist/{chunk-5CR24RTX.js.map → chunk-UGRQXBL4.js.map} +0 -0
  800. /package/dist/{chunk-G3FSS7GR.js.map → chunk-USFSHSCJ.js.map} +0 -0
  801. /package/dist/{chunk-WQCQWUUP.js.map → chunk-VJ6UFVGC.js.map} +0 -0
  802. /package/dist/{chunk-FISP5YN2.js.map → chunk-W3WPPOXH.js.map} +0 -0
  803. /package/dist/{chunk-VRH7NP6R.js.map → chunk-WFCSOTBO.js.map} +0 -0
  804. /package/dist/{chunk-BWQV2OBL.js.map → chunk-WZ2L57MB.js.map} +0 -0
  805. /package/dist/{chunk-CXHLROWX.js.map → chunk-Y4UAKFWC.js.map} +0 -0
  806. /package/dist/{chunk-4O6H4ZHL.js.map → chunk-YQBS2ZCK.js.map} +0 -0
  807. /package/dist/{chunk-7FSIZZOX.js.map → chunk-ZTHM2TKP.js.map} +0 -0
  808. /package/dist/{condition-GVIEMQG7.js.map → condition-2PASYSUC.js.map} +0 -0
  809. /package/dist/{controls-73K3XBDR.js.map → controls-5IMJ6K5L.js.map} +0 -0
  810. /package/dist/{controls.config-FQKY2LRE.js.map → controls.config-P5PG2DHW.js.map} +0 -0
  811. /package/dist/{correlation-AOAXIUFJ.js.map → correlation-U3EDLNHR.js.map} +0 -0
  812. /package/dist/{cuminc-OD2PPCEK.js.map → cuminc-2HUFEROK.js.map} +0 -0
  813. /package/dist/{customdata.inputui-SWLGLATL.js.map → customdata.inputui-ZHWNEPFH.js.map} +0 -0
  814. /package/dist/{dataDownload-456HL2OE.js.map → dataDownload-VBSJBKMP.js.map} +0 -0
  815. /package/dist/{dataDownload.integration.spec-5YS4MWK5.js.map → dataDownload.integration.spec-LUFSETOP.js.map} +0 -0
  816. /package/dist/{databrowser.ui-7APC5MNM.js.map → databrowser.ui-6H2KMSTJ.js.map} +0 -0
  817. /package/dist/{dictionary-A3HA5MVK.js.map → dictionary-V37LXFIP.js.map} +0 -0
  818. /package/dist/{dnaMethylation-6ONBKARD.js.map → dnaMethylation-OIZMHMLK.js.map} +0 -0
  819. /package/dist/{dnaMethylation.integration.spec-T3WEGVX3.js.map → dnaMethylation.integration.spec-CWPTJ74H.js.map} +0 -0
  820. /package/dist/{dofetch-RVPQUMVX.js.map → dofetch-IWPZQB5N.js.map} +0 -0
  821. /package/dist/{e2pca-75WZ46XG.js.map → e2pca-7SLIAGYW.js.map} +0 -0
  822. /package/dist/{ep-QG5CWPTW.js.map → ep-7L6KF6K4.js.map} +0 -0
  823. /package/dist/{expclust.gdc.spec-KBBQJR4M.js.map → expclust.gdc.spec-JT452Q3G.js.map} +0 -0
  824. /package/dist/{facet-QGB2Q7YV.js.map → facet-CXOUU5AS.js.map} +0 -0
  825. /package/dist/{forms2-CJGDCWYH.js.map → forms2-VPNCLQOY.js.map} +0 -0
  826. /package/dist/{gb-NEFAHKQI.js.map → gb-P4VRXRED.js.map} +0 -0
  827. /package/dist/{geneExpClustering-ZVR44UZC.js.map → geneExpClustering-FQTCKRJJ.js.map} +0 -0
  828. /package/dist/{geneExpression-25EX4DFK.js.map → geneExpression-BHO5326K.js.map} +0 -0
  829. /package/dist/{geneExpression-FALOA4GC.js.map → geneExpression-ZMERB64E.js.map} +0 -0
  830. /package/dist/{geneExpression.unit.spec-BQLELQUS.js.map → geneExpression.unit.spec-CNVHZWNG.js.map} +0 -0
  831. /package/dist/{geneORA-K2B7JYWD.js.map → geneORA-FXVUCXGX.js.map} +0 -0
  832. /package/dist/{geneRanking-6AXL5ZJS.js.map → geneRanking-SFK4UBKQ.js.map} +0 -0
  833. /package/dist/{geneVariant-RZFDP5J5.js.map → geneVariant-IYEHB4H7.js.map} +0 -0
  834. /package/dist/{geneVariant-UIBZ5UIQ.js.map → geneVariant-LIRRLUFR.js.map} +0 -0
  835. /package/dist/{geneVariant.integration.spec-4EZQMPQB.js.map → geneVariant.integration.spec-Y2NPNTYX.js.map} +0 -0
  836. /package/dist/{genefusion.ui-YK4TNS2P.js.map → genefusion.ui-L3HIJM3N.js.map} +0 -0
  837. /package/dist/{geneset-47J4D5ID.js.map → geneset-A6VUFX63.js.map} +0 -0
  838. /package/dist/{genomeBrowser.spec-LFFWRIWG.js.map → genomeBrowser.spec-CB4HHHBN.js.map} +0 -0
  839. /package/dist/{grin2-DQB2WW3C.js.map → grin2-FKBIMH5N.js.map} +0 -0
  840. /package/dist/{gsea-KKLAMLMG.js.map → hierCluster-QFPRMHVA.js.map} +0 -0
  841. /package/dist/{hierCluster-3MZEJG6B.js.map → hierCluster-YWC3XYPV.js.map} +0 -0
  842. /package/dist/{hierCluster-YGBC4XCZ.js.map → hierCluster.config-F7YYZNM3.js.map} +0 -0
  843. /package/dist/{hierCluster.integration.spec-GLKXFZDM.js.map → hierCluster.integration.spec-AF4L3YT6.js.map} +0 -0
  844. /package/dist/{hierCluster.config-A4N54K3A.js.map → hierCluster.interactivity-RPY74PK6.js.map} +0 -0
  845. /package/dist/{hierCluster.interactivity-4TPWGIVC.js.map → hierCluster.renderers-LOKHZ3V2.js.map} +0 -0
  846. /package/dist/{imagePlot-JRPYOV3Q.js.map → imagePlot-BBEXA754.js.map} +0 -0
  847. /package/dist/{hierCluster.renderers-WUWSXXHU.js.map → importPlot-7QGANZGK.js.map} +0 -0
  848. /package/dist/{importPlot-A3PFUP6K.js.map → isoformExpression-4SLLCVFD.js.map} +0 -0
  849. /package/dist/{isoformExpression.unit.spec-SLB6XIX4.js.map → isoformExpression.unit.spec-GEL4JJ64.js.map} +0 -0
  850. /package/dist/{isoformExpression-5L4O3WKL.js.map → launch.adhoc-LWLBQJS5.js.map} +0 -0
  851. /package/dist/{leftlabel.sample-OSIRTJFW.js.map → leftlabel.sample-RTEZOIH2.js.map} +0 -0
  852. /package/dist/{legacyDataset-TNIIJABK.js.map → legacyDataset-VLD7ZYWI.js.map} +0 -0
  853. /package/dist/{lollipop-LAELXNQY.js.map → lollipop-XKQK5QZU.js.map} +0 -0
  854. /package/dist/{maf-HZAYVZFO.js.map → maf-AZQPPWDO.js.map} +0 -0
  855. /package/dist/{maftimeline-BLBNUGAL.js.map → maftimeline-7MSVYKQU.js.map} +0 -0
  856. /package/dist/{launch.adhoc-QI7TPYSC.js.map → matrix-BGLWC25D.js.map} +0 -0
  857. /package/dist/{matrix-LVJSHXDM.js.map → matrix-IQR5SRMK.js.map} +0 -0
  858. /package/dist/{matrix-S5QQV4JU.js.map → matrix.cells-5C57NWOY.js.map} +0 -0
  859. /package/dist/{matrix.cells-JUTRYPG4.js.map → matrix.config-2DQXAN2E.js.map} +0 -0
  860. /package/dist/{matrix.config-ZTWWYNIZ.js.map → matrix.data-ADCGF5H6.js.map} +0 -0
  861. /package/dist/{matrix.data-BREYB54F.js.map → matrix.groups-V4ITQ5F7.js.map} +0 -0
  862. /package/dist/{matrix.groups-WMHTLOXC.js.map → matrix.interactivity-JNELJFOV.js.map} +0 -0
  863. /package/dist/{matrix.interactivity-TMBVAM5M.js.map → matrix.layout-WBVIV6GR.js.map} +0 -0
  864. /package/dist/{matrix.layout-POK5NOUV.js.map → matrix.legend-YHOWPK77.js.map} +0 -0
  865. /package/dist/{matrix.legend-6XVQ67AC.js.map → matrix.renderers-5BGVRR3M.js.map} +0 -0
  866. /package/dist/{matrix.renderers-G5FQZZ73.js.map → matrix.serieses-2GZJOASZ.js.map} +0 -0
  867. /package/dist/{matrix.serieses-XNLQSQS6.js.map → matrix.sort-WKIWPJKP.js.map} +0 -0
  868. /package/dist/{matrix.sort.unit.spec-65BDBQUV.js.map → matrix.sort.unit.spec-L2E4D4AS.js.map} +0 -0
  869. /package/dist/{matrix.sort-XNES23OQ.js.map → matrix.sorterUi-TEJWWJ64.js.map} +0 -0
  870. /package/dist/{matrix.sorterUi.unit.spec-GZQBW7F7.js.map → matrix.sorterUi.unit.spec-SHP7C4P7.js.map} +0 -0
  871. /package/dist/{mavb-T2UCRWWM.js.map → mavb-4MXNYUEO.js.map} +0 -0
  872. /package/dist/{mds.fimo-65UUK7ER.js.map → mds.fimo-WHIJIBOI.js.map} +0 -0
  873. /package/dist/{mds.samplescatterplot-4NHGQBJF.js.map → mds.samplescatterplot-BRJ6NG2D.js.map} +0 -0
  874. /package/dist/{mds.survivalplot-WVAHDM3Z.js.map → mds.survivalplot-OPCMB5PB.js.map} +0 -0
  875. /package/dist/{numericDictTermCluster-CXASCSQ6.js.map → numericDictTermCluster-7MIFOP2K.js.map} +0 -0
  876. /package/dist/{oncomatrix-5WMOICWR.js.map → oncomatrix-BGG6BEUI.js.map} +0 -0
  877. /package/dist/{oncomatrix.spec-POVBNFJR.js.map → oncomatrix.spec-LYQ4L4F3.js.map} +0 -0
  878. /package/dist/{plot.2dvaf-63K5RSIU.js.map → plot.2dvaf-6WVCP2ZI.js.map} +0 -0
  879. /package/dist/{matrix.sorterUi-WC2YX7S7.js.map → plot.app-MLBP6WFP.js.map} +0 -0
  880. /package/dist/{plot.barplot-IQTYHNFE.js.map → plot.barplot-JEPRZSCU.js.map} +0 -0
  881. /package/dist/{plot.boxplot-2RMTO7AS.js.map → plot.boxplot-GNFW42VM.js.map} +0 -0
  882. /package/dist/{plot.brainImaging-DLUHAHHG.js.map → plot.brainImaging-5ACNSD45.js.map} +0 -0
  883. /package/dist/{plot.disco-WK6GDLNF.js.map → plot.disco-Q2V2KKIH.js.map} +0 -0
  884. /package/dist/{plot.dzi-3V3FWE7U.js.map → plot.dzi-KVT6S7K7.js.map} +0 -0
  885. /package/dist/{plot.ssgq-TENK2RP4.js.map → plot.ssgq-4N3KFJQ2.js.map} +0 -0
  886. /package/dist/{plot.vaf2cov-P2QOOZGZ.js.map → plot.vaf2cov-ITRG5U43.js.map} +0 -0
  887. /package/dist/{plot.wsi-BVRGJF4E.js.map → plot.wsi-26YZNU4V.js.map} +0 -0
  888. /package/dist/{polar2-NNOZOQQJ.js.map → polar2-J7GVUK4X.js.map} +0 -0
  889. /package/dist/{profileForms-RS4GEZZV.js.map → profileForms-VXV2JLXU.js.map} +0 -0
  890. /package/dist/{plot.app-V5IY25QS.js.map → profilePlot-ZZYZK4SY.js.map} +0 -0
  891. /package/dist/{proteinView-NPKJAQAI.js.map → proteinView-7KN532D3.js.map} +0 -0
  892. /package/dist/{profilePlot-3DLME3NH.js.map → qualitative-MLRVLIAU.js.map} +0 -0
  893. /package/dist/{radar2-EX7YBNMT.js.map → radar2-WM2ZBOH3.js.map} +0 -0
  894. /package/dist/{radarFacility2-WU5O6O77.js.map → radarFacility2-3SBR2JJ3.js.map} +0 -0
  895. /package/dist/{qualitative-S45RXXRJ.js.map → regression-WMRPQJW2.js.map} +0 -0
  896. /package/dist/{regression-7MCOYJVD.js.map → regression.inputs-VWZKSYNY.js.map} +0 -0
  897. /package/dist/{regression.inputs-QHSWJ23R.js.map → regression.inputs.term-OWE6GWHM.js.map} +0 -0
  898. /package/dist/{regression.inputs.term-EJ4Z5Q5O.js.map → regression.inputs.values.table-4INNZQI2.js.map} +0 -0
  899. /package/dist/{regression.integration.spec-XOX7OXXA.js.map → regression.integration.spec-XKQ2JOOT.js.map} +0 -0
  900. /package/dist/{regression.inputs.values.table-YKMAWNXN.js.map → regression.results-VZBYMBYC.js.map} +0 -0
  901. /package/dist/{regression.spec-YIIY2AZA.js.map → regression.spec-DU3UTDCJ.js.map} +0 -0
  902. /package/dist/{regression.results-YKPOTPCC.js.map → render-N5FOF247.js.map} +0 -0
  903. /package/dist/{report-JEJFCWUU.js.map → report-DW3OHB67.js.map} +0 -0
  904. /package/dist/{sampleScatter.spec-LBAZBDYA.js.map → sampleScatter.spec-REFSK2V4.js.map} +0 -0
  905. /package/dist/{sampleView-WKZT5ZFE.js.map → sampleView-ICOT2R6O.js.map} +0 -0
  906. /package/dist/{samplelst-HXM3H6M4.js.map → samplelst-TJEVASYG.js.map} +0 -0
  907. /package/dist/{samplematrix-LCGHK2EK.js.map → samplematrix-6DAWCXQ3.js.map} +0 -0
  908. /package/dist/{sc-3OE2G4BU.js.map → sc-53LNOB7N.js.map} +0 -0
  909. /package/dist/{scatter-AGVUDTTU.js.map → scatter-DKYSS4DL.js.map} +0 -0
  910. /package/dist/{selectGenomeWithTklst-WF2XZ6GH.js.map → selectGenomeWithTklst-WTX66TV3.js.map} +0 -0
  911. /package/dist/{singleCellCellType-2SRGROMS.js.map → singleCellCellType-D2CN2BHQ.js.map} +0 -0
  912. /package/dist/{singleCellCellType.unit.spec-DCGHNRJI.js.map → singleCellCellType.unit.spec-LADUCI4R.js.map} +0 -0
  913. /package/dist/{singleCellGeneExpression-RASZA4NO.js.map → singleCellGeneExpression-YR2ZT34W.js.map} +0 -0
  914. /package/dist/{singleCellGeneExpression.unit.spec-5MRGH2OO.js.map → singleCellGeneExpression.unit.spec-BM63M432.js.map} +0 -0
  915. /package/dist/{singleCellPlot-TIYA3GNM.js.map → singleCellPlot-3ICIOILE.js.map} +0 -0
  916. /package/dist/{singlecell-JS5SIZHY.js.map → singlecell-6ZUFA3BQ.js.map} +0 -0
  917. /package/dist/{singlecell-CFA43TTU.js.map → singlecell-KX7W4U57.js.map} +0 -0
  918. /package/dist/{snp-VXZXPMKS.js.map → snp-VIURB7L3.js.map} +0 -0
  919. /package/dist/{snp.unit.spec-TR5TCO7X.js.map → snp.unit.spec-ACZNZUNS.js.map} +0 -0
  920. /package/dist/{snplocus-VLPH5Y65.js.map → snplocus-3LW4ZUZR.js.map} +0 -0
  921. /package/dist/{spliceevent.a53ss.diagram-PATK67SH.js.map → spliceevent.a53ss.diagram-AKTZGWNM.js.map} +0 -0
  922. /package/dist/{spliceevent.noeventdiagram-4NPNZUEN.js.map → spliceevent.noeventdiagram-YTXWWNTJ.js.map} +0 -0
  923. /package/dist/{ssGSEA-XMW5BLAU.js.map → ssGSEA-THW4WFMI.js.map} +0 -0
  924. /package/dist/{ssGSEA.unit.spec-ASUWKVUT.js.map → ssGSEA.unit.spec-HTRGQI2K.js.map} +0 -0
  925. /package/dist/{summarizeCnvGeneexp-KWRFGX32.js.map → summarizeCnvGeneexp-RFYC3H2Z.js.map} +0 -0
  926. /package/dist/{summarizeGeneexpSurvival-FIPIMEJR.js.map → summarizeGeneexpSurvival-DQBZUTQ6.js.map} +0 -0
  927. /package/dist/{summarizeMutationCnv-IUYRVLZG.js.map → summarizeMutationCnv-7AYEMHAI.js.map} +0 -0
  928. /package/dist/{summarizeMutationDiagnosis-ZFJPCABL.js.map → summarizeMutationDiagnosis-AKFJDSAF.js.map} +0 -0
  929. /package/dist/{summarizeMutationSurvival-HFHYB7DT.js.map → summarizeMutationSurvival-QJHZRQBZ.js.map} +0 -0
  930. /package/dist/{summary-AZUNEZ5I.js.map → summary-A5P7AYK4.js.map} +0 -0
  931. /package/dist/{summary.integration.spec-WLBAJL44.js.map → summary.integration.spec-HQISXGNL.js.map} +0 -0
  932. /package/dist/{summaryInput-NJWVXDXW.js.map → summaryInput-HP675QOQ.js.map} +0 -0
  933. /package/dist/{sunburst-PXGF4WM6.js.map → sunburst-65LSYRXX.js.map} +0 -0
  934. /package/dist/{survival-ZZ4QLZHK.js.map → survival-QNEI6YVK.js.map} +0 -0
  935. /package/dist/{survival-RAU4XCKG.js.map → survival-UI74VXSM.js.map} +0 -0
  936. /package/dist/{svgraph-7UCFRL6A.js.map → svgraph-PSX2NER3.js.map} +0 -0
  937. /package/dist/{svmr-DB3RY2ID.js.map → svmr-QDQ33EFX.js.map} +0 -0
  938. /package/dist/{table-HJRWWXGM.js.map → table-LWAI27UO.js.map} +0 -0
  939. /package/dist/{termCollection-WPON7RG3.js.map → termCollection-3JHR74FG.js.map} +0 -0
  940. /package/dist/{termCollection-AW7M6DTP.js.map → termCollection-CDF5LYUG.js.map} +0 -0
  941. /package/dist/{termCollection.unit.spec-254ESHOE.js.map → termCollection.unit.spec-HOJKYWHF.js.map} +0 -0
  942. /package/dist/{tk-SUAFM5YA.js.map → tk-OEQFO73V.js.map} +0 -0
  943. /package/dist/{tp.ui-ELEQGSK2.js.map → tp.ui-SHNERDGC.js.map} +0 -0
  944. /package/dist/{tvs.dt-DCXY66YY.js.map → tvs.dt-CZDC4TSR.js.map} +0 -0
  945. /package/dist/{tvs.dtcnv.categorical-SFQZMYX7.js.map → tvs.dtcnv.categorical-OPBDHZGB.js.map} +0 -0
  946. /package/dist/{tvs.dtcnv.continuous-AUZNJMC3.js.map → tvs.dtcnv.continuous-AR6P4EP3.js.map} +0 -0
  947. /package/dist/{tvs.dtfusion-5F7MYFHZ.js.map → tvs.dtfusion-2YQ7N6FQ.js.map} +0 -0
  948. /package/dist/{tvs.dtsnvindel-JJSPL4PH.js.map → tvs.dtsnvindel-WHHWAATJ.js.map} +0 -0
  949. /package/dist/{tvs.dtsv-DARTSV5H.js.map → tvs.dtsv-3UMCW65O.js.map} +0 -0
  950. /package/dist/{tvs.numeric-KYAU5OV3.js.map → tvs.numeric-TOEPASWN.js.map} +0 -0
  951. /package/dist/{tvs.samplelst-HHBIO26C.js.map → tvs.samplelst-M7XKXRTZ.js.map} +0 -0
  952. /package/dist/{tvs.termCollection-KCMALH6B.js.map → tvs.termCollection-WT4WZMYR.js.map} +0 -0
  953. /package/dist/{violin-C26FW5WK.js.map → violin-2YGXTBDS.js.map} +0 -0
  954. /package/dist/{violin.integration.spec-QQ43XWHQ.js.map → violin.integration.spec-YWNHVAGS.js.map} +0 -0
  955. /package/dist/{violin.interactivity-H2BHC6M4.js.map → violin.interactivity-J6BE2UQL.js.map} +0 -0
  956. /package/dist/{violin.renderer-GSG2I7AV.js.map → violin.renderer-3GRUWP2U.js.map} +0 -0
  957. /package/dist/{vocabulary-3G525O5V.js.map → vocabulary-2INCVPYJ.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../plots/disco/arc/FullArcRenderer.ts", "../plots/disco/menu/MenuProvider.ts", "../plots/disco/fusion/FusionColorProvider.ts", "../plots/disco/fusion/FusionRenderer.ts", "../plots/disco/DiscoRenderer.ts", "../plots/disco/interactions/DiscoInteractions.ts", "../plots/disco/chromosome/Reference.ts", "../plots/disco/data/DataObjectMapper.ts", "../plots/disco/data/PercentileMapper.ts", "../plots/disco/snv/vafTooltip.ts", "../plots/disco/data/DataMapper.ts", "../plots/disco/legend/Legend.ts", "../plots/disco/fusion/Fusion.ts", "../plots/disco/fusion/FusionSubgroup.ts", "../plots/disco/fusion/FusionMapper.ts", "../plots/disco/loh/LohLegend.ts", "../plots/disco/viewmodel/ViewModel.ts", "../plots/disco/ring/Ring.ts", "../plots/disco/label/MLabel.ts", "../plots/disco/snv/SnvLegendElement.ts", "../plots/disco/snv/SnvArcsMapper.ts", "../plots/disco/cnv/CnvLegend.ts", "../plots/disco/cnv/CnvColorProvider.ts", "../plots/disco/cnv/CnvArcsMapper.ts", "../plots/disco/label/Line.ts", "../plots/disco/label/LabelFactory.ts", "../plots/disco/label/LabelsMapper.ts", "../plots/disco/label/Labels.ts", "../plots/disco/snv/NonExonicSnvArcsMapper.ts", "../plots/disco/loh/GradientColorProvider.ts", "../plots/disco/loh/LohArcMapper.ts", "../plots/disco/ring/Rings.ts", "../plots/disco/waterfall/MutationWaterfallMapper.ts", "../plots/disco/viewmodel/ViewModelProvider.ts", "../plots/disco/viewmodel/ViewModelMapper.ts", "../plots/disco/legend/LegendJSONMapper.ts", "../plots/disco/cnv/renderCnvSourceLegend.ts", "../plots/disco/legend/LegendRenderer.ts", "../plots/disco/chromosome/ChromosomesRenderer.ts", "../plots/disco/label/LabelsRenderer.ts", "../plots/disco/defaults.ts", "../plots/disco/snv/NonExonicSnvRenderer.ts", "../plots/disco/snv/SnvRenderer.ts", "../plots/disco/loh/LohRenderer.ts", "../plots/disco/cnv/CnvBarRenderer.ts", "../plots/disco/cnv/CnvHeatmapRenderer.ts", "../plots/disco/waterfall/MutationWaterfallRenderer.ts", "../plots/disco/Disco.ts"],
4
+ "sourcesContent": ["import * as d3 from 'd3'\nimport type Arc from './Arc.ts'\n\nexport default class FullArcRenderer {\n\tprivate radius: number\n\tprivate width: number\n\tprivate color: string\n\tconstructor(radius: number, width: number, color: string) {\n\t\tthis.radius = radius\n\t\tthis.width = width\n\t\tthis.color = color\n\t}\n\trender(holder: any) {\n\t\tconst donutGenerator = d3.arc<Arc>()\n\t\tconst arc: Arc = {\n\t\t\tstartAngle: 0,\n\t\t\tendAngle: Math.PI * 2,\n\t\t\tinnerRadius: this.radius,\n\t\t\touterRadius: this.radius + this.width,\n\t\t\tcolor: this.color,\n\t\t\ttext: 'No label'\n\t\t}\n\n\t\tconst array: Array<Arc> = []\n\t\tarray.push(arc)\n\t\tconst donutArc = holder.append('g')\n\t\tdonutArc\n\t\t\t.selectAll('path')\n\t\t\t.data(array)\n\t\t\t.enter()\n\t\t\t.append('path')\n\t\t\t.attr('d', (d: Arc) => donutGenerator(d))\n\t\t\t.attr('fill', (d: Arc) => d.color)\n\t}\n}\n", "import { Menu } from '#dom/menu'\n\nexport default class MenuProvider {\n\tstatic create(): Menu {\n\t\tconst menu = new Menu({ padding: 5 })\n\t\tmenu.d.style('border', '1px solid #FFF').style('position', 'absolute').style('z-index', 1001)\n\n\t\treturn menu\n\t}\n}\n", "import { FusionLegend } from '#plots/disco/fusion/FusionLegend.ts'\n\nexport default class FusionColorProvider {\n\tstatic getColor(chrA: string, chrB: string) {\n\t\tif (chrA != chrB) {\n\t\t\treturn FusionLegend.Interchromosomal.valueOf()\n\t\t} else {\n\t\t\treturn FusionLegend.Intrachromosomal.valueOf()\n\t\t}\n\t}\n}\n", "import * as d3 from 'd3'\nimport FullArcRenderer from '#plots/disco/arc/FullArcRenderer.ts'\nimport type Fusion from './Fusion.ts'\nimport MenuProvider from '#plots/disco/menu/MenuProvider.ts'\nimport FusionColorProvider from '#plots/disco/fusion/FusionColorProvider.ts'\nimport { table2col } from '#dom/table2col'\nimport { dofetch3 } from '#common/dofetch'\nimport type { ClientGenome } from '../../../types/clientGenome.ts'\n\n// dynamically load svgraph when user clicks on a fusion arc\n\nexport default class FusionRenderer {\n\tprivate genome: ClientGenome\n\n\tconstructor(genome: ClientGenome) {\n\t\tthis.genome = genome\n\t}\n\n\trender(holder: any, fusions: Array<Fusion>, opacity = 1) {\n\t\tlet radius = 0\n\t\tconst fusionsWithTarget = fusions.filter(f => f.target)\n\t\tif (fusionsWithTarget.length > 0) {\n\t\t\tradius = fusionsWithTarget[0].target.radius\n\t\t\tconst fullArcRenderer = new FullArcRenderer(radius, 2, '#6464641A')\n\t\t\tfullArcRenderer.render(holder)\n\t\t} else return\n\n\t\tconst ribbon = d3.ribbon().radius(radius)\n\t\tconst ribbons = holder.selectAll('.chord').data(fusions)\n\n\t\t//Used in the fusion elems (i.e. ribbons) mouse and click events\n\t\tconst menu = MenuProvider.create()\n\t\tconst createTooltip = this.createTooltip.bind(this)\n\t\tconst genome = this.genome\n\n\t\tribbons\n\t\t\t.enter()\n\t\t\t.append('path')\n\t\t\t.attr('class', 'chord')\n\t\t\t.attr('d', ribbon)\n\t\t\t.attr('fill', (fusion: Fusion) => {\n\t\t\t\treturn FusionColorProvider.getColor(\n\t\t\t\t\tfusion.source.positionInChromosome.chromosome,\n\t\t\t\t\tfusion.target.positionInChromosome.chromosome\n\t\t\t\t)\n\t\t\t})\n\t\t\t.style('opacity', opacity)\n\t\t\t.each(function (this: any, d: Fusion) {\n\t\t\t\tconst path = d3.select(this)\n\t\t\t\t//Create a new tooltip for each fusion arc\n\t\t\t\t//Allows the graph to presist whilst allowing\n\t\t\t\t//the user to see tooltips on other elemenets\n\t\t\t\tconst tip = MenuProvider.create()\n\n\t\t\t\tpath.on('click', async function (event: MouseEvent) {\n\t\t\t\t\ttip.clear().show(event.x, event.y)\n\t\t\t\t\tconst div = tip.d.append('div')\n\t\t\t\t\tawait makeSvgraph(d, div, genome)\n\t\t\t\t})\n\t\t\t})\n\t\t\t.on('mouseover', async function (mouseEvent: MouseEvent, fusion: Fusion) {\n\t\t\t\t//TODO: Add note to user \"click to see fusion graph\"?\n\t\t\t\tconst table = table2col({ holder: menu.d })\n\t\t\t\tcreateTooltip(table, fusion)\n\t\t\t\tmenu.show(mouseEvent.x, mouseEvent.y)\n\t\t\t})\n\t\t\t.on('mouseout', () => {\n\t\t\t\tmenu.clear()\n\t\t\t\tmenu.hide()\n\t\t\t})\n\t}\n\n\tcreateTooltip(table: any, fusion: Fusion) {\n\t\t{\n\t\t\tconst [td1, td2] = table.addRow()\n\t\t\ttd1.text('Data type')\n\t\t\ttd2.append('span').style('margin-left', '5px').text('Fusion transcript')\n\t\t}\n\t\t{\n\t\t\tconst positionInChromosomeSource = fusion.source.positionInChromosome\n\t\t\tconst positionInChromosomeTarget = fusion.target.positionInChromosome\n\n\t\t\tconst [td1, td2] = table.addRow()\n\t\t\ttd1.text('Position')\n\t\t\ttd2\n\t\t\t\t.append('span')\n\t\t\t\t.style('margin-left', '5px')\n\t\t\t\t.text(\n\t\t\t\t\t` ${fusion.source.gene || ''} ${positionInChromosomeSource.chromosome}:${\n\t\t\t\t\t\tpositionInChromosomeSource.position\n\t\t\t\t\t} ${fusion.source.strand === '+' ? 'forward' : 'reverse'} > ` +\n\t\t\t\t\t\t` ${fusion.target.gene || ''} ${positionInChromosomeTarget.chromosome}:${\n\t\t\t\t\t\t\tpositionInChromosomeTarget.position\n\t\t\t\t\t\t} ${fusion.target.strand === '+' ? 'forward' : 'reverse'} `\n\t\t\t\t)\n\t\t}\n\t}\n}\n\nasync function makeSvgraph(fusion: Fusion, div: any, genome: ClientGenome) {\n\tconst wait = div.append('div').text('Loading...')\n\tconst svpair = {\n\t\ta: {\n\t\t\tchr: fusion.source.positionInChromosome.chromosome,\n\t\t\tposition: fusion.source.positionInChromosome.position,\n\t\t\tstrand: fusion.source.strand\n\t\t},\n\t\tb: {\n\t\t\tchr: fusion.target.positionInChromosome.chromosome,\n\t\t\tposition: fusion.target.positionInChromosome.position,\n\t\t\tstrand: fusion.target.strand\n\t\t}\n\t}\n\n\tawait getGm(svpair.a, genome.name, fusion.source.gene)\n\tawait getGm(svpair.b, genome.name, fusion.target.gene)\n\n\twait.remove()\n\n\tconst _ = await import('#src/svgraph')\n\t_.default({\n\t\tpairlst: [svpair],\n\t\tgenome,\n\t\tholder: div\n\t})\n}\n\nasync function getGm(p: any, genome: string, name: string) {\n\tconst d = await dofetch3('isoformbycoord', {\n\t\tbody: { genome, chr: p.chr, pos: p.position }\n\t})\n\tif (d.error) throw d.error\n\tconst u = d.lst.find((i: any) => i.isdefault && name === i.name) || d.lst[0]\n\tif (u) {\n\t\tp.name = u.name\n\t\tp.gm = { isoform: u.isoform }\n\t}\n}\n", "import type IRenderer from './IRenderer.ts'\nimport type ViewModel from './viewmodel/ViewModel.ts'\nimport type LegendRenderer from './legend/LegendRenderer.ts'\nimport type { RingType } from './ring/RingType.ts'\nimport FusionRenderer from './fusion/FusionRenderer.ts'\n\nexport class DiscoRenderer {\n\tprivate renders: Map<RingType, IRenderer>\n\tprivate legendRenderer: LegendRenderer\n\tprivate fusionRenderer: FusionRenderer\n\n\tconstructor(renders: Map<RingType, IRenderer>, legendRenderer: LegendRenderer, genome: any) {\n\t\tthis.renders = renders\n\t\tthis.legendRenderer = legendRenderer\n\t\tthis.fusionRenderer = new FusionRenderer(genome)\n\t}\n\n\trender(holder: any, viewModel: ViewModel, onCnvSourceSelect: (index: number) => void) {\n\t\tconst svgDiv = holder.append('div').style('display', 'inline-block').style('font-family', 'Arial')\n\n\t\tconst svg = svgDiv\n\t\t\t.append('svg')\n\t\t\t.attr('id', 'sjpp_disco_plot')\n\t\t\t.attr('data-testid', 'sjpp_disco_plot')\n\t\t\t.attr('width', viewModel.width)\n\t\t\t.attr('height', viewModel.height + viewModel.legendHeight)\n\n\t\tconst mainG = svg\n\t\t\t.append('g')\n\t\t\t.attr('class', 'mainG')\n\t\t\t.attr(\n\t\t\t\t'transform',\n\t\t\t\t`translate(${\n\t\t\t\t\tviewModel.settings.rings.labelLinesInnerRadius + viewModel.settings.rings.labelsToLinesDistance + 100\n\t\t\t\t},${viewModel.height / 2})`\n\t\t\t)\n\n\t\tfor (const [ringType, renderer] of this.renders) {\n\t\t\tconst elements = viewModel.getElements(ringType)\n\t\t\tconst collisions = viewModel.getCollisions(ringType)\n\n\t\t\trenderer.render(mainG, elements, collisions)\n\t\t}\n\n\t\tthis.fusionRenderer.render(mainG, viewModel.fusions, viewModel.settings.Disco.fusionOpacity)\n\n\t\tif (viewModel.settings.Disco.centerText) {\n\t\t\tconst chrRingBbox = mainG.select('[data-testid=\"sjpp_chromosomes_arc_group\"]').node().getBBox()\n\t\t\t/** Truncate longer texts to stay within the center */\n\t\t\tconst text =\n\t\t\t\tviewModel.settings.Disco.centerText.length > 20\n\t\t\t\t\t? viewModel.settings.Disco.centerText.slice(0, 20) + '...'\n\t\t\t\t\t: viewModel.settings.Disco.centerText\n\t\t\tconst textElem = mainG.append('text').attr('class', 'sjpp-disco-center-text').text(text)\n\t\t\tconst textBbox = textElem.node().getBBox()\n\t\t\ttextElem.attr('transform', `translate(${chrRingBbox.x + chrRingBbox.width / 2 - textBbox.width / 2},0)`)\n\t\t}\n\n\t\tthis.legendRenderer.render(\n\t\t\tmainG,\n\t\t\tviewModel.legend,\n\t\t\t-1 * (viewModel.settings.rings.labelLinesInnerRadius + viewModel.settings.rings.labelsToLinesDistance + 75),\n\t\t\tviewModel.width,\n\t\t\tviewModel.height / 2,\n\t\t\tviewModel,\n\t\t\tonCnvSourceSelect\n\t\t)\n\t}\n}\n", "import { getNormalRoot } from '#filter'\n\nexport class DiscoInteractions {\n\tdiscoApp: any\n\n\tdownloadClickListener: (d: any) => void\n\tgeneClickListener: (gene: string, mnames: Array<string>) => void\n\tcolorScaleNumericInputsCallback: (obj: {\n\t\tcutoffMode: string\n\t\tmin?: number\n\t\tmax?: number\n\t\tpercentile?: number\n\t}) => void\n\tonMutationWaterfallColorChange: (color: string) => void\n\n\tconstructor(discoApp: any) {\n\t\t// note: discoApp will be set when discoApp.state{} is created\n\t\tthis.discoApp = discoApp\n\n\t\tthis.downloadClickListener = (svg: any) => {\n\t\t\tconst downloadImgName = this.discoApp.state.settings.downloadImgName || 'disco.plot'\n\t\t\tconst a = document.createElement('a')\n\t\t\tdocument.body.appendChild(a)\n\n\t\t\ta.addEventListener(\n\t\t\t\t'click',\n\t\t\t\t() => {\n\t\t\t\t\t// must use arrow function but not \"function()\", so this.downloadImgName is accessible\n\t\t\t\t\tconst serializer = new XMLSerializer()\n\t\t\t\t\tconst svg_blob = new Blob([serializer.serializeToString(svg)], {\n\t\t\t\t\t\ttype: 'image/svg+xml'\n\t\t\t\t\t})\n\t\t\t\t\ta.download = downloadImgName + '.svg'\n\t\t\t\t\ta.href = URL.createObjectURL(svg_blob)\n\t\t\t\t\tdocument.body.removeChild(a)\n\t\t\t\t},\n\t\t\t\tfalse\n\t\t\t)\n\t\t\ta.click()\n\t\t}\n\n\t\tthis.geneClickListener = async (gene: string, mnames: Array<string>) => {\n\t\t\tconst { filter, filter0 } = this.discoApp.app.getState().termfilter\n\t\t\tconst arg = {\n\t\t\t\tholder: this.discoApp.app.opts.holder,\n\t\t\t\tgenome: this.discoApp.app.opts.state.args.genome,\n\t\t\t\tnobox: true,\n\t\t\t\tquery: gene,\n\t\t\t\ttklst: [\n\t\t\t\t\t{\n\t\t\t\t\t\ttype: 'mds3',\n\t\t\t\t\t\tdslabel: this.discoApp.app.opts.state.vocab.dslabel,\n\t\t\t\t\t\thlaachange: mnames.join(','),\n\t\t\t\t\t\tfilter0,\n\t\t\t\t\t\tfilterObj: getNormalRoot(filter) // must not pass filter as frozen. pass unfrozen, normalized copy so mds3 code will work\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t}\n\t\t\tconst _ = await import('#src/block.init')\n\t\t\tawait _.default(arg)\n\t\t}\n\n\t\t/** Corresponds to the numericInputs callback in dom/ColorScale.ts\n\t\t * Used for CNV legend items only. */\n\t\tthis.colorScaleNumericInputsCallback = async (obj: {\n\t\t\tcutoffMode: string\n\t\t\tmin?: number\n\t\t\tmax?: number\n\t\t\tpercentile?: number\n\t\t}) => {\n\t\t\tconst callAppDispatch = (settings: Record<string, any>) => {\n\t\t\t\tthis.discoApp.app.dispatch({\n\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\tid: this.discoApp.id,\n\t\t\t\t\tconfig: { settings: { Disco: Object.assign({ cnvCutoffMode: obj.cutoffMode }, settings) } }\n\t\t\t\t})\n\t\t\t}\n\t\t\tif (obj.cutoffMode == 'auto') {\n\t\t\t\tif (obj.min == null || obj.max == null)\n\t\t\t\t\tthrow new Error('Color scale must return min and max if cutoffMode \"auto\"')\n\t\t\t\tcallAppDispatch({\n\t\t\t\t\tcnvCapping: this.discoApp.state.settings.cnv.capping,\n\t\t\t\t\tcnvPercentile: this.discoApp.state.settings.cnv.percentile\n\t\t\t\t})\n\t\t\t} else if (obj.cutoffMode == 'fixed') {\n\t\t\t\tif (obj.min == null || obj.max == null)\n\t\t\t\t\tthrow new Error('Color scale must return min and max if cutoffMode \"fixed\"')\n\t\t\t\tconst diffValue = obj.max !== this.discoApp.state.settings.cnv.capping ? obj.max : Math.abs(obj.min)\n\t\t\t\tcallAppDispatch({\n\t\t\t\t\tcnvCapping: diffValue\n\t\t\t\t})\n\t\t\t} else if (obj.cutoffMode == 'percentile') callAppDispatch({ cnvPercentile: obj.percentile })\n\t\t\telse throw new Error('Unknown cutoff mode returned from dom/ColorScale')\n\t\t}\n\n\t\tthis.onMutationWaterfallColorChange = (color: string) => {\n\t\t\tthis.discoApp.app.dispatch({\n\t\t\t\ttype: 'plot_edit',\n\t\t\t\tid: this.discoApp.id,\n\t\t\t\tconfig: { settings: { Disco: { mutationWaterfallColor: color } } }\n\t\t\t})\n\t\t}\n\t}\n}\n", "import type Chromosome from './Chromosome.ts'\nimport type Settings from '../Settings.ts'\n\nexport default class Reference {\n\tchromosomes: Array<Chromosome> = []\n\tchromosomesOrder: Array<string> = []\n\ttotalSize: number\n\n\ttotalPadAngle: number\n\ttotalChromosomesAngle: number\n\n\tprivate keysArray: Array<string> = []\n\tprivate totalSizeArray: Array<number> = []\n\tprivate chrSizesArray: Array<number> = []\n\n\tprivate settings: Settings\n\n\t/**\n\t * Creates a Reference object that contains information about chromosomes.\n\t * @param settings State settings\n\t * @param chromosomes Chromosome order. This function formats into an obj with `chr` removed.\n\t * @param chromosomeOverride Obj of chromsome keys and sizes. Filtered to remove hidden chromosomes in settings.\n\t */\n\tconstructor(\n\t\tsettings: Settings,\n\t\tchromosomes: string[] | { [chromosome: string]: number },\n\t\tchromosomeOverride?: { [chromosome: string]: number }\n\t) {\n\t\tconst chrSizes = chromosomeOverride || chromosomes\n\n\t\tthis.settings = settings\n\n\t\tthis.chromosomesOrder = []\n\t\tlet totalSize = 0\n\t\tthis.totalPadAngle = Object.keys(chrSizes).length * this.settings.padAngle\n\t\tthis.totalChromosomesAngle = 2 * Math.PI - this.totalPadAngle\n\n\t\tfor (const chr in chrSizes) {\n\t\t\tconst key = chr.slice(0, 3) === 'chr' ? chr.slice(3) : chr\n\t\t\tthis.chromosomesOrder.push(chr)\n\t\t\tthis.keysArray.push(key)\n\t\t\tthis.totalSizeArray.push(totalSize)\n\t\t\tthis.chrSizesArray.push(chrSizes[chr])\n\n\t\t\ttotalSize += chrSizes[chr]\n\t\t}\n\n\t\tthis.totalSize = totalSize\n\n\t\tlet lastAngle = 0\n\n\t\tfor (let i = 0; i < this.keysArray.length; i++) {\n\t\t\tconst chromosomeAngle = this.totalChromosomesAngle * (this.chrSizesArray[i] / totalSize)\n\n\t\t\tconst startAngle = i == 0 ? this.settings.padAngle / 2 : lastAngle + this.settings.padAngle\n\t\t\tconst endAngle =\n\t\t\t\ti == 0 ? this.settings.padAngle / 2 + chromosomeAngle : lastAngle + this.settings.padAngle + chromosomeAngle\n\t\t\tconst chromosome: Chromosome = {\n\t\t\t\tstart: this.totalSizeArray[i],\n\t\t\t\tsize: this.chrSizesArray[i],\n\t\t\t\tfactor: 1,\n\t\t\t\tstartAngle: startAngle,\n\t\t\t\tendAngle: endAngle,\n\t\t\t\tangle: (startAngle + endAngle) / 2,\n\t\t\t\tinnerRadius: this.settings.rings.chromosomeInnerRadius,\n\t\t\t\touterRadius: this.settings.rings.chromosomeInnerRadius + this.settings.rings.chromosomeWidth,\n\t\t\t\tcolor: '#AAA',\n\t\t\t\ttext: this.keysArray[i]\n\t\t\t}\n\n\t\t\tthis.chromosomes.push(chromosome)\n\n\t\t\tif (chromosome.endAngle != null) {\n\t\t\t\tlastAngle = chromosome.endAngle\n\t\t\t}\n\t\t}\n\t}\n}\n", "import type Data from './Data.ts'\n\nexport default class DataObjectMapper {\n\tprivate sampleName: string\n\tprivate prioritizedGenes: Array<string>\n\n\tconstructor(sampleName: string, prioritizedGenes: Array<string>) {\n\t\tthis.sampleName = sampleName\n\t\tthis.prioritizedGenes = prioritizedGenes\n\t}\n\n\tmap(dObject: any): Data {\n\t\treturn {\n\t\t\tdt: dObject.dt,\n\t\t\tmname: dObject.mname,\n\t\t\tmClass: dObject.class,\n\t\t\tgene: dObject.gene,\n\t\t\tchr: dObject.chr,\n\t\t\tref: dObject.ref,\n\t\t\talt: dObject.alt,\n\t\t\tvafs: dObject.vafs,\n\t\t\tposition: dObject.pos ? dObject.pos : dObject.position,\n\t\t\tposchr: dObject.poschr,\n\t\t\tposbins: dObject.posbins,\n\t\t\tposlabel: dObject.poslabel,\n\t\t\tsampleName: this.sampleName,\n\t\t\tssm_id: dObject.ssm_id,\n\t\t\tstart: dObject.start,\n\t\t\tstop: dObject.stop,\n\t\t\tvalue: dObject.value,\n\t\t\tsegmean: dObject.segmean,\n\t\t\tisPrioritized: this.prioritizedGenes.some(cancerGene => cancerGene == dObject.gene),\n\t\t\tchrA: dObject.chrA,\n\t\t\tchrB: dObject.chrB,\n\t\t\tgeneA: dObject.geneA,\n\t\t\tgeneB: dObject.geneB,\n\t\t\tposA: dObject.posA,\n\t\t\tposB: dObject.posB,\n\t\t\tstrandA: dObject.strandA,\n\t\t\tstrandB: dObject.strandB\n\t\t}\n\t}\n}\n", "// import Data from '#plots/disco/data/Data.ts'\n\nexport class PercentileMapper {\n\tmap(data: Array<number>, percentile: number) {\n\t\treturn this.calculatePercentileForPositivesAndNegatives(data, percentile)\n\t}\n\n\tprivate calculatePercentileForPositivesAndNegatives(\n\t\tdata: Array<number>,\n\t\tpercentile: number\n\t): {\n\t\tpositive: number\n\t\tnegative: number\n\t} {\n\t\t// Filter positive and negative numbers\n\t\tconst positives = data.filter(x => x > 0)\n\t\tconst negatives = data.filter(x => x < 0).map(x => -1 * x)\n\n\t\tlet positive = NaN\n\t\tlet negative = NaN\n\n\t\tif (positives.length > 0) {\n\t\t\tpositive = this.calculatePercentile(positives, percentile)\n\t\t}\n\n\t\tif (negatives.length > 0) {\n\t\t\tnegative = -1 * this.calculatePercentile(negatives, percentile)\n\t\t}\n\n\t\treturn { positive: positive, negative: negative }\n\t}\n\n\tprivate calculatePercentile(data: Array<number>, percentile: number): number {\n\t\tif (data.length === 0) {\n\t\t\tthrow new Error('Array must contain at least one element.')\n\t\t}\n\n\t\tconst sortedValues = data.sort((a, b) => a - b)\n\t\tconst index = (percentile / 100) * (sortedValues.length - 1)\n\n\t\tconst lowerIndex = Math.floor(index)\n\t\tconst upperIndex = Math.ceil(index)\n\t\tconst fraction = index - lowerIndex\n\n\t\tif (lowerIndex === upperIndex) {\n\t\t\treturn sortedValues[lowerIndex]\n\t\t}\n\n\t\treturn sortedValues[lowerIndex] + fraction * (sortedValues[upperIndex] - sortedValues[lowerIndex])\n\t}\n}\n", "import { fillbar } from '#dom'\nimport type Data from '#plots/disco/data/Data.ts'\n\nexport type ReadCountValue = string | number | undefined\nexport type VafEntry = {\n\tlabel: string\n\trefCount?: ReadCountValue\n\ttotalCount?: ReadCountValue\n\taltCount: ReadCountValue\n}\n\nexport function getIntegerCount(v: ReadCountValue): number | null {\n\tif (Number.isInteger(v)) return v as number\n\tif (typeof v == 'string' && /^-?\\d+$/.test(v)) {\n\t\tconst n = Number(v)\n\t\tif (Number.isInteger(n)) return n\n\t}\n\treturn null\n}\n\nexport function getReadCounts(\n\trefCountValue: ReadCountValue,\n\taltCountValue: ReadCountValue,\n\ttotalCountValue?: ReadCountValue\n) {\n\tconst altCount = getIntegerCount(altCountValue)\n\tif (altCount == null || altCount < 0) return null\n\n\tconst totalCount = getIntegerCount(totalCountValue)\n\tif (totalCount != null) {\n\t\tif (totalCount <= 0 || totalCount < altCount) return null\n\t\treturn { altCount, refCount: totalCount - altCount, totalCount }\n\t}\n\n\tconst refCount = getIntegerCount(refCountValue)\n\tif (refCount == null || refCount < 0 || refCount + altCount <= 0) return null\n\treturn { altCount, refCount, totalCount: refCount + altCount }\n}\n\nexport function hasValidReadCounts(\n\trefCountValue: ReadCountValue,\n\taltCountValue: ReadCountValue,\n\ttotalCountValue?: ReadCountValue\n): boolean {\n\treturn getReadCounts(refCountValue, altCountValue, totalCountValue) != null\n}\n\nexport function getVafEntries(vafs: Data['vafs']): VafEntry[] {\n\tconst entries: VafEntry[] = []\n\tif (Array.isArray(vafs)) {\n\t\tfor (const vaf of vafs) {\n\t\t\tconst label = vaf?.id || vaf?.name\n\t\t\tconst refCount = vaf?.refCount\n\t\t\tconst totalCount = vaf?.totalCount\n\t\t\tconst altCount = vaf?.altCount\n\t\t\tif (!label || altCount == null || (refCount == null && totalCount == null)) continue\n\t\t\tconst entry: VafEntry = { label, altCount }\n\t\t\tif (refCount != null) entry.refCount = refCount\n\t\t\tif (totalCount != null) entry.totalCount = totalCount\n\t\t\tentries.push(entry)\n\t\t}\n\t}\n\treturn entries\n}\n\nexport function getNumericFraction(v: ReadCountValue): number | null {\n\tif (typeof v != 'number' && typeof v != 'string') return null\n\tconst n = Number(v)\n\treturn Number.isFinite(n) && n >= 0 && n <= 1 ? n : null\n}\n\nexport function getMutationFractions(vafs: Data['vafs']): number[] {\n\tconst fractions: number[] = []\n\tif (!Array.isArray(vafs)) return fractions\n\n\tfor (const vaf of vafs) {\n\t\tconst explicitFraction = getNumericFraction(vaf?.fraction ?? vaf?.mutationFraction)\n\t\tif (explicitFraction != null) {\n\t\t\tfractions.push(explicitFraction)\n\t\t\tcontinue\n\t\t}\n\n\t\tconst counts = getReadCounts(vaf?.refCount, vaf?.altCount, vaf?.totalCount)\n\t\tif (!counts) continue\n\t\tfractions.push(counts.altCount / counts.totalCount)\n\t}\n\treturn fractions\n}\n\nexport function getMaxMutationFraction(vafs: Data['vafs']): number | null {\n\tconst fractions = getMutationFractions(vafs)\n\treturn fractions.length ? Math.max(...fractions) : null\n}\n\nexport function hasAnyValidVafEntry(vafs: Data['vafs']): boolean {\n\treturn getVafEntries(vafs).some(vaf => hasValidReadCounts(vaf.refCount, vaf.altCount, vaf.totalCount))\n}\n\nexport function appendVafBar(\n\ttd2: any,\n\trefCountValue: ReadCountValue,\n\taltCountValue: ReadCountValue,\n\tlabel = 'VAF',\n\ttotalCountValue?: ReadCountValue\n) {\n\tconst counts = getReadCounts(refCountValue, altCountValue, totalCountValue)\n\tif (!counts) return\n\n\tconst fraction = counts.altCount / counts.totalCount\n\tconst div = td2\n\t\t.append('div')\n\t\t.style('margin-left', '5px')\n\t\t.style('margin-top', '4px')\n\t\t.style('display', 'flex')\n\t\t.style('align-items', 'center')\n\t\t.style('gap', '6px')\n\n\tdiv.append('span').style('font-size', '0.8em').style('color', '#555').text(label)\n\tfillbar(div, { f: fraction, v1: counts.altCount, v2: counts.totalCount })\n}\n\nexport function appendVafBars(td2: any, vafs: Data['vafs']) {\n\tfor (const vaf of getVafEntries(vafs)) {\n\t\tif (!hasValidReadCounts(vaf.refCount, vaf.altCount, vaf.totalCount)) continue\n\t\tappendVafBar(td2, vaf.refCount, vaf.altCount, vaf.label, vaf.totalCount)\n\t}\n}\n", "import type Data from './Data.ts'\nimport type Reference from '#plots/disco/chromosome/Reference.ts'\nimport DataObjectMapper from './DataObjectMapper.ts'\nimport type Settings from '#plots/disco/Settings.ts'\nimport { ViewModelMapper } from '#plots/disco/viewmodel/ViewModelMapper.ts'\nimport type { DataHolder } from '#plots/disco/data/DataHolder.ts'\nimport { dtsnvindel, dtfusionrna, dtsv, dtcnv, dtloh, dtitd } from '#shared/common.js'\nimport { PercentileMapper } from '#plots/disco/data/PercentileMapper.ts'\nimport type { MutationWaterfallDatum } from '#plots/disco/waterfall/MutationWaterfallDatum.ts'\nimport { getMaxMutationFraction } from '#plots/disco/snv/vafTooltip.ts'\n\nexport default class DataMapper {\n\t// remove fields and extract filters to seperate classes\n\n\tprivate labelData: Array<Data> = []\n\n\tprivate nonExonicSnvData: Array<Data> = []\n\tprivate nonExonicInnerRadius = 0\n\n\tprivate snvRingDataMap: Map<number, Array<Data>> = new Map()\n\tprivate snvInnerRadius = 0\n\n\tprivate snvData: Array<Data> = []\n\tprivate bpx = 0\n\tprivate onePxArcAngle = 0\n\tprivate filteredSnvData: Array<Data> = []\n\tprivate filteredSnvCountByChr: Map<string, number> = new Map()\n\n\tprivate lohData: Array<Data> = []\n\tprivate lohInnerRadius = 0\n\n\tprivate cnvData: Array<Data> = []\n\tprivate cnvInnerRadius = 0\n\n\tprivate fusionData: Array<Data> = []\n\tprivate fusionRadius = 0\n\n\tprivate hasPrioritizedGenes = false\n\tprivate hasWaterfallEligibleChromosome = false\n\n\tprivate invalidEntries: { dataType: string; reason: string }[] = []\n\n\tprivate cnvLossMaxValue = 0\n\tprivate cnvGainMaxValue = 0\n\tprivate gainCapped: number\n\tprivate lossCapped: number\n\tprivate cappedCnvMaxAbsValue?: number\n\tprivate percentilePositive = 0\n\tprivate percentileNegative = 0\n\tprivate cnvMaxPercentileAbs = 0\n\n\tprivate mutationWaterfallData: Array<MutationWaterfallDatum> = []\n\tprivate hasMutationFractionData = false\n\tprivate mutationWaterfallInnerRadius = 0\n\tprivate mutationWaterfallRangeMin = Infinity\n\tprivate mutationWaterfallRangeMax = -Infinity\n\n\tprivate lohMaxValue?: number = undefined\n\tprivate lohMinValue?: number = undefined\n\n\tprivate settings: Settings\n\tprivate reference: Reference\n\tprivate sample: string\n\n\tprivate nonExonicFilter: (data: Data) => boolean\n\tprivate snvRingFilter: (data: Data) => boolean\n\tprivate dataObjectMapper: DataObjectMapper\n\tprivate lastInnerRadious: number\n\tprivate excludedChromosomes: string[]\n\n\tprivate snvFilter = (data: Data) => data.dt == dtsnvindel\n\tprivate fusionFilter = (data: Data) => data.dt == dtfusionrna || data.dt == dtsv\n\n\tprivate cnvFilter = (data: Data) => data.dt == dtcnv || data.dt == dtitd\n\tprivate lohFilter = (data: Data) => data.dt == dtloh\n\n\tprivate compareData = (a, b) => {\n\t\tconst chrDiff = this.reference.chromosomesOrder.indexOf(a.chr) - this.reference.chromosomesOrder.indexOf(b.chr)\n\t\tif (chrDiff != 0) {\n\t\t\treturn chrDiff\n\t\t}\n\n\t\tconst aPos = a.pos ? a.pos : a.start\n\n\t\tconst bPos = b.pos ? b.pos : b.start\n\n\t\treturn aPos - bPos\n\t}\n\n\tconstructor(settings: Settings, reference: Reference, sample: string, prioritizedGenes: Array<string> = []) {\n\t\tthis.settings = settings\n\t\tthis.reference = reference\n\t\tthis.sample = sample\n\t\tthis.excludedChromosomes = this.settings.Disco.hiddenChromosomes\n\t\tthis.lastInnerRadious = this.settings.rings.chromosomeInnerRadius\n\n\t\tthis.gainCapped = this.settings.Disco.cnvCapping\n\t\tthis.lossCapped = -1 * this.settings.Disco.cnvCapping\n\n\t\tthis.nonExonicFilter = (data: Data) => {\n\t\t\tif (prioritizedGenes.length > 0 && this.settings.Disco.prioritizeGeneLabelsByGeneSets) {\n\t\t\t\treturn (\n\t\t\t\t\tprioritizedGenes.includes(data.gene) &&\n\t\t\t\t\tsettings.rings.nonExonicFilterValues.includes(ViewModelMapper.snvClassLayer[data.mClass])\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\treturn settings.rings.nonExonicFilterValues.includes(ViewModelMapper.snvClassLayer[data.mClass])\n\t\t\t}\n\t\t}\n\n\t\tthis.snvRingFilter = (data: Data) => {\n\t\t\tif (prioritizedGenes.length > 0 && this.settings.Disco.prioritizeGeneLabelsByGeneSets) {\n\t\t\t\treturn (\n\t\t\t\t\tprioritizedGenes.includes(data.gene) &&\n\t\t\t\t\tsettings.rings.snvRingFilters.includes(ViewModelMapper.snvClassLayer[data.mClass])\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\treturn settings.rings.snvRingFilters.includes(ViewModelMapper.snvClassLayer[data.mClass])\n\t\t\t}\n\t\t}\n\n\t\tthis.dataObjectMapper = new DataObjectMapper(sample, prioritizedGenes)\n\t}\n\n\tmap(data: any) {\n\t\tconst dataArray: Array<Data> = []\n\n\t\tthis.filteredSnvCountByChr.clear()\n\t\tthis.hasWaterfallEligibleChromosome = false\n\t\tthis.mutationWaterfallData = []\n\t\tthis.mutationWaterfallInnerRadius = 0\n\t\tthis.mutationWaterfallRangeMin = Infinity\n\t\tthis.mutationWaterfallRangeMax = -Infinity\n\t\tthis.hasMutationFractionData = false\n\n\t\tdata.forEach(dObject => {\n\t\t\tif (dObject.dt == dtsnvindel && getMaxMutationFraction(dObject.vafs) != null) {\n\t\t\t\tthis.hasMutationFractionData = true\n\t\t\t}\n\t\t\tconst index = this.reference.chromosomesOrder.indexOf(dObject.chr)\n\t\t\tconst indexA = this.reference.chromosomesOrder.indexOf(dObject.chrA)\n\t\t\tconst indexB = this.reference.chromosomesOrder.indexOf(dObject.chrB)\n\n\t\t\tif (dObject.dt == dtsnvindel) {\n\t\t\t\tif (index != -1 && this.snvData.length < this.settings.snv.maxMutationCount) {\n\t\t\t\t\tconst pos = dObject.pos ?? dObject.position\n\t\t\t\t\tconst chrSize = this.reference.chromosomes[index].size\n\t\t\t\t\t// ensure position is numeric and within chromosome range\n\t\t\t\t\tif (Number.isFinite(pos) && pos >= 0 && pos <= chrSize) {\n\t\t\t\t\t\tthis.addData(dObject, dataArray)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.invalidEntries.push({ dataType: 'SNV', reason: `Position ${pos} outside of ${dObject.chr}` })\n\t\t\t\t\t}\n\t\t\t\t} else if (index == -1) {\n\t\t\t\t\tif (!this.excludedChromosomes.includes(dObject.chr)) {\n\t\t\t\t\t\tthis.invalidEntries.push({ dataType: 'SNV', reason: `Unknown chr ${dObject.chr}` })\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (dObject.dt == dtfusionrna || dObject.dt == dtsv) {\n\t\t\t\tif (indexA != -1 && indexB != -1) {\n\t\t\t\t\t// show sv/fusion event with valid A/B breakpoints.\n\t\t\t\t\tconst posA = dObject.posA\n\t\t\t\t\tconst posB = dObject.posB\n\t\t\t\t\tconst chrSizeA = this.reference.chromosomes[indexA].size\n\t\t\t\t\tconst chrSizeB = this.reference.chromosomes[indexB].size\n\t\t\t\t\t// verify that both breakpoints are numeric and within chromosome ranges\n\t\t\t\t\tif (\n\t\t\t\t\t\tNumber.isFinite(posA) &&\n\t\t\t\t\t\tNumber.isFinite(posB) &&\n\t\t\t\t\t\tposA >= 0 &&\n\t\t\t\t\t\tposA <= chrSizeA &&\n\t\t\t\t\t\tposB >= 0 &&\n\t\t\t\t\t\tposB <= chrSizeB\n\t\t\t\t\t) {\n\t\t\t\t\t\tthis.addData(dObject, dataArray)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tconst reasonParts: string[] = []\n\t\t\t\t\t\tif (!(Number.isFinite(posA) && posA >= 0 && posA <= chrSizeA))\n\t\t\t\t\t\t\treasonParts.push(`Position ${posA} outside of ${dObject.chrA}`)\n\t\t\t\t\t\tif (!(Number.isFinite(posB) && posB >= 0 && posB <= chrSizeB))\n\t\t\t\t\t\t\treasonParts.push(`Position ${posB} outside of ${dObject.chrB}`)\n\t\t\t\t\t\tthis.invalidEntries.push({ dataType: 'Fusion', reason: reasonParts.join('; ') })\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst missing: string[] = []\n\t\t\t\t\tif (indexA == -1 && !this.excludedChromosomes.includes(dObject.chrA)) missing.push(dObject.chrA)\n\t\t\t\t\tif (indexB == -1 && !this.excludedChromosomes.includes(dObject.chrB)) missing.push(dObject.chrB)\n\t\t\t\t\tif (missing.length) this.invalidEntries.push({ dataType: 'Fusion', reason: 'Unknown chr in fusion' })\n\t\t\t\t}\n\t\t\t} else if ([dtcnv, dtloh, dtitd].includes(Number(dObject.dt))) {\n\t\t\t\tconst idx = this.reference.chromosomesOrder.indexOf(dObject.chr)\n\t\t\t\tconst dataType = dObject.dt == dtcnv ? 'CNV' : dObject.dt == dtloh ? 'LOH' : 'ITD'\n\t\t\t\tif (dObject.chr && idx != -1) {\n\t\t\t\t\tconst chrSize = this.reference.chromosomes[idx].size\n\t\t\t\t\tconst start = dObject.start\n\t\t\t\t\tconst stop = dObject.stop\n\t\t\t\t\t// validate CNV/LOH/ITD boundaries are numeric and fall within chromosome range\n\t\t\t\t\tif (Number.isFinite(start) && Number.isFinite(stop) && start >= 0 && stop <= chrSize && start <= stop) {\n\t\t\t\t\t\tthis.addData(dObject, dataArray)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.invalidEntries.push({\n\t\t\t\t\t\t\tdataType,\n\t\t\t\t\t\t\treason: `Position ${start}-${stop} outside of ${dObject.chr}`\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tif (!this.excludedChromosomes.includes(dObject.chr)) {\n\t\t\t\t\t\tthis.invalidEntries.push({\n\t\t\t\t\t\t\tdataType,\n\t\t\t\t\t\t\treason: `Unknown chr ${dObject.chr}`\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tthrow Error('Unknown mutation type!')\n\t\t\t}\n\t\t})\n\n\t\tconst sortedData = dataArray.sort(this.compareData)\n\n\t\tif (this.settings.rings.nonExonicRingEnabled) {\n\t\t\tsortedData.forEach(data => {\n\t\t\t\tthis.filterNonExonicSnvData(data)\n\t\t\t})\n\t\t}\n\n\t\tif (this.nonExonicSnvData.length > 0) {\n\t\t\tthis.nonExonicInnerRadius = this.lastInnerRadious - this.settings.rings.nonExonicRingWidth\n\t\t\tthis.lastInnerRadious = this.nonExonicInnerRadius\n\t\t}\n\n\t\tsortedData.forEach(data => {\n\t\t\tthis.filterSnvs(data)\n\t\t})\n\n\t\tthis.hasWaterfallEligibleChromosome = Array.from(this.filteredSnvCountByChr.values()).some(count => count >= 2)\n\n\t\tif (this.settings.Disco.mutationWaterfallPlot && this.hasWaterfallEligibleChromosome) {\n\t\t\tthis.prepareMutationWaterfallData()\n\t\t}\n\n\t\tsortedData.forEach(data => {\n\t\t\tthis.filterLohs(data)\n\t\t})\n\n\t\tif (this.lohData.length > 0) {\n\t\t\tthis.lohInnerRadius = this.lastInnerRadious - this.settings.rings.lohRingWidth\n\t\t\tthis.lastInnerRadious = this.lohInnerRadius\n\t\t}\n\n\t\tsortedData.forEach(data => {\n\t\t\tthis.filterCnvs(data)\n\t\t})\n\n\t\tif (this.cnvData.length > 0) {\n\t\t\tthis.cnvInnerRadius = this.lastInnerRadious - this.settings.rings.cnvRingWidth\n\t\t\tthis.lastInnerRadious = this.cnvInnerRadius\n\n\t\t\tthis.cappedCnvMaxAbsValue = Math.min(\n\t\t\t\tthis.settings.Disco.cnvCapping,\n\t\t\t\tMath.max(\n\t\t\t\t\tMath.abs(DataMapper.capMaxValue(this.cnvLossMaxValue, this.gainCapped, this.lossCapped)),\n\t\t\t\t\tMath.abs(DataMapper.capMaxValue(this.cnvGainMaxValue, this.gainCapped, this.lossCapped))\n\t\t\t\t)\n\t\t\t)\n\n\t\t\tconst cnvValues = this.cnvData.filter(data => data.dt == dtcnv).map(data => data.value)\n\t\t\tif (cnvValues.length) {\n\t\t\t\tconst percentilePair = new PercentileMapper().map(cnvValues, this.settings.Disco.cnvPercentile)\n\t\t\t\tthis.percentilePositive = DataMapper.capMaxValue(percentilePair.positive, this.gainCapped, this.lossCapped)\n\t\t\t\tthis.percentileNegative = DataMapper.capMaxValue(percentilePair.negative, this.gainCapped, this.lossCapped)\n\n\t\t\t\tthis.cnvMaxPercentileAbs = Math.min(\n\t\t\t\t\tthis.settings.Disco.cnvCapping,\n\t\t\t\t\tMath.max(this.percentilePositive, Math.abs(this.percentileNegative))\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\tsortedData.forEach(data => {\n\t\t\tthis.filterFusion(data)\n\t\t})\n\n\t\tif (this.fusionData.length > 0) {\n\t\t\tthis.fusionRadius = this.lastInnerRadious\n\t\t}\n\n\t\tconst dataHolder: DataHolder = {\n\t\t\tlabelData: this.labelData,\n\t\t\tnonExonicSnvData: this.nonExonicSnvData,\n\t\t\tnonExonicInnerRadius: this.nonExonicInnerRadius,\n\t\t\tsnvRingDataMap: this.snvRingDataMap,\n\t\t\tsnvInnerRadius: this.snvInnerRadius,\n\n\t\t\tsnvData: this.snvData,\n\t\t\tbpx: this.bpx,\n\t\t\tonePxArcAngle: this.onePxArcAngle,\n\t\t\tfilteredSnvData: this.filteredSnvData,\n\n\t\t\tlohData: this.lohData,\n\t\t\tlohInnerRadius: this.lohInnerRadius,\n\n\t\t\tcnvData: this.cnvData,\n\t\t\tcnvInnerRadius: this.cnvInnerRadius,\n\n\t\t\tfusionData: this.fusionData,\n\t\t\tfusionRadius: this.fusionRadius,\n\n\t\t\thasPrioritizedGenes: this.hasPrioritizedGenes,\n\t\t\thasWaterfallEligibleChromosome: this.hasWaterfallEligibleChromosome,\n\n\t\t\tcnvGainMaxValue: this.cnvGainMaxValue,\n\t\t\tcnvLossMaxValue: this.cnvLossMaxValue,\n\t\t\tcappedCnvMaxAbsValue: this.cappedCnvMaxAbsValue,\n\t\t\tpercentilePositive: this.percentilePositive,\n\t\t\tpercentileNegative: this.percentileNegative,\n\t\t\tcnvMaxPercentileAbs: this.cnvMaxPercentileAbs,\n\n\t\t\tlohMaxValue: this.lohMaxValue,\n\t\t\tlohMinValue: this.lohMinValue,\n\n\t\t\thasMutationFractionData: this.hasMutationFractionData,\n\n\t\t\tmutationWaterfallData: this.mutationWaterfallData,\n\t\t\tmutationWaterfallInnerRadius: this.mutationWaterfallInnerRadius,\n\t\t\tmutationWaterfallLogRange: this.mutationWaterfallData.length\n\t\t\t\t? { min: this.mutationWaterfallRangeMin, max: this.mutationWaterfallRangeMax }\n\t\t\t\t: undefined,\n\n\t\t\tinvalidDataInfo: {\n\t\t\t\tentries: this.invalidEntries,\n\t\t\t\terrorMsg: `Entries listed above were skipped due to invalid or unsupported chromosome information.`\n\t\t\t}\n\t\t}\n\n\t\treturn dataHolder\n\t}\n\n\tprivate addData(dObject, dataArray: Array<Data>) {\n\t\tconst instance = this.dataObjectMapper.map(dObject)\n\n\t\tif (instance.isPrioritized) {\n\t\t\tthis.hasPrioritizedGenes = true\n\t\t}\n\n\t\tdataArray.push(instance)\n\t}\n\n\tprivate filterNonExonicSnvData(data: Data) {\n\t\tif (this.snvFilter(data) && this.passesMutationFractionFilter(data)) {\n\t\t\tif (this.settings.rings.nonExonicRingEnabled && this.nonExonicFilter(data)) {\n\t\t\t\tthis.nonExonicSnvData.push(data)\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate filterSnvs(data: Data) {\n\t\tif (this.snvFilter(data)) {\n\t\t\tthis.snvData.push(data)\n\n\t\t\tif (this.passesMutationFractionFilter(data) && this.snvRingFilter(data)) {\n\t\t\t\tif (this.snvInnerRadius == 0) {\n\t\t\t\t\tthis.snvInnerRadius = this.lastInnerRadious - this.settings.rings.snvRingWidth\n\t\t\t\t\tthis.lastInnerRadious = this.snvInnerRadius\n\n\t\t\t\t\t// number of base pairs per pixel\n\t\t\t\t\t// TODO verify place of bpx calculation\n\t\t\t\t\tthis.bpx = Math.floor(this.reference.totalSize / (this.reference.totalChromosomesAngle * this.snvInnerRadius))\n\t\t\t\t\tthis.onePxArcAngle = 1 / this.snvInnerRadius\n\t\t\t\t}\n\n\t\t\t\tthis.filteredSnvData.push(data)\n\t\t\t\tthis.labelData.push(data)\n\n\t\t\t\tconst currentCount = this.filteredSnvCountByChr.get(data.chr) || 0\n\t\t\t\tthis.filteredSnvCountByChr.set(data.chr, currentCount + 1)\n\n\t\t\t\tconst arcAngle = this.calculateArcAngle(data)\n\t\t\t\tlet dataArray = this.snvRingDataMap.get(arcAngle)\n\t\t\t\tif (!dataArray) {\n\t\t\t\t\tdataArray = new Array<Data>()\n\t\t\t\t}\n\t\t\t\tdataArray.push(data)\n\t\t\t\tthis.snvRingDataMap.set(arcAngle, dataArray)\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate passesMutationFractionFilter(data: Data): boolean {\n\t\t// If the dataset has no usable mutation-fraction info anywhere, don't apply the threshold.\n\t\tif (!this.hasMutationFractionData) return true\n\t\tconst minMutationFraction = this.settings.Disco.minMutationFraction || 0\n\t\tif (minMutationFraction <= 0) return true\n\n\t\tconst fraction = getMaxMutationFraction(data.vafs)\n\t\treturn fraction != null && fraction >= minMutationFraction\n\t}\n\n\tprivate filterFusion(data: Data) {\n\t\tif (this.fusionFilter(data)) {\n\t\t\tdata.isPrioritized = true\n\t\t\tthis.fusionData.push(data)\n\t\t\tthis.labelData.push(data)\n\t\t}\n\t}\n\n\tprivate filterLohs(data: Data) {\n\t\tif (this.lohFilter(data)) {\n\t\t\tif (this.lohMaxValue == undefined || this.lohMaxValue < data.value) {\n\t\t\t\tthis.lohMaxValue = data.segmean\n\t\t\t}\n\n\t\t\tif (this.lohMinValue == undefined || this.lohMinValue > data.value) {\n\t\t\t\tthis.lohMinValue = data.segmean\n\t\t\t}\n\n\t\t\tthis.lohData.push(data)\n\t\t}\n\t}\n\n\tprivate filterCnvs(data: Data) {\n\t\tif (this.cnvFilter(data)) {\n\t\t\tif (!data.chr || this.reference.chromosomesOrder.indexOf(data.chr) == -1) {\n\t\t\t\t// when chr is unknown or not in reference chromosomes (chr1-22, X, Y), do not render arc\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t// ITDs share the CNV interval ring, but must not affect the CNV color scale.\n\t\t\tif (data.dt == dtcnv) {\n\t\t\t\tif (this.cnvGainMaxValue == undefined || this.cnvGainMaxValue < data.value) {\n\t\t\t\t\tthis.cnvGainMaxValue = data.value\n\t\t\t\t}\n\n\t\t\t\tif (this.cnvLossMaxValue == undefined || this.cnvLossMaxValue > data.value) {\n\t\t\t\t\tthis.cnvLossMaxValue = data.value\n\t\t\t\t}\n\t\t\t}\n\t\t\tthis.cnvData.push(data)\n\t\t}\n\t}\n\n\tprivate prepareMutationWaterfallData() {\n\t\tthis.mutationWaterfallInnerRadius = this.lastInnerRadious - this.settings.rings.mutationWaterfallRingWidth\n\t\tthis.lastInnerRadious = this.mutationWaterfallInnerRadius\n\n\t\tconst groupedSnvs: Map<string, Array<Data>> = new Map()\n\t\tconst firstMutationByChr: MutationWaterfallDatum[] = []\n\t\tfor (const snv of this.filteredSnvData) {\n\t\t\tconst list = groupedSnvs.get(snv.chr) || []\n\t\t\tlist.push(snv)\n\t\t\tgroupedSnvs.set(snv.chr, list)\n\t\t}\n\n\t\tfor (const [, snvs] of groupedSnvs) {\n\t\t\tif (snvs.length < 2) continue\n\t\t\tsnvs.sort((a, b) => a.position - b.position)\n\t\t\tfirstMutationByChr.push({\n\t\t\t\tchr: snvs[0].chr,\n\t\t\t\tposition: snvs[0].position,\n\t\t\t\tlogDistance: 0 // placeholder updated after range computed\n\t\t\t})\n\t\t\tfor (let i = 1; i < snvs.length; i++) {\n\t\t\t\tconst prev = snvs[i - 1]\n\t\t\t\tconst curr = snvs[i]\n\t\t\t\tconst distance = Math.max(1, Math.abs(curr.position - prev.position))\n\t\t\t\tconst logDistance = Math.log10(distance)\n\t\t\t\tthis.mutationWaterfallData.push({\n\t\t\t\t\tchr: curr.chr,\n\t\t\t\t\tposition: curr.position,\n\t\t\t\t\tlogDistance\n\t\t\t\t})\n\t\t\t\tif (logDistance < this.mutationWaterfallRangeMin) {\n\t\t\t\t\tthis.mutationWaterfallRangeMin = logDistance\n\t\t\t\t}\n\t\t\t\tif (logDistance > this.mutationWaterfallRangeMax) {\n\t\t\t\t\tthis.mutationWaterfallRangeMax = logDistance\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (!this.mutationWaterfallData.length) {\n\t\t\tthis.mutationWaterfallRangeMin = 0\n\t\t\tthis.mutationWaterfallRangeMax = 0\n\t\t}\n\n\t\tconst topLogDistance = this.mutationWaterfallRangeMax\n\t\tfor (const first of firstMutationByChr) {\n\t\t\tthis.mutationWaterfallData.push({\n\t\t\t\t...first,\n\t\t\t\tlogDistance: topLogDistance\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate calculateArcAngle(data: Data) {\n\t\tconst currentChromosome =\n\t\t\tthis.reference.chromosomes[\n\t\t\t\tthis.reference.chromosomesOrder.findIndex(chromosomeOrder => data.chr == chromosomeOrder)\n\t\t\t]\n\n\t\tconst dataAnglePos = Math.floor(data.position / this.bpx)\n\n\t\treturn currentChromosome.startAngle + dataAnglePos * this.onePxArcAngle\n\t}\n\n\tstatic capMaxValue(value: number, gainCapped: number, lossCapped: number) {\n\t\tif (value && Math.sign(value) == 1) {\n\t\t\treturn value > gainCapped ? gainCapped : value\n\t\t}\n\n\t\tif (Math.sign(value) == -1) {\n\t\t\treturn value < lossCapped ? lossCapped : value\n\t\t}\n\n\t\treturn 0\n\t}\n\n\tstatic capMinValue(value: number, capMinValue = 1) {\n\t\tif (Math.sign(value) == 1) {\n\t\t\treturn value > capMinValue ? value : capMinValue\n\t\t}\n\n\t\tif (Math.sign(value) == -1) {\n\t\t\treturn value < -1 * capMinValue ? value : -1 * capMinValue\n\t\t}\n\n\t\treturn 1\n\t}\n}\n", "import type SnvLegendElement from '#plots/disco/snv/SnvLegendElement.ts'\nimport type CnvLegend from '#plots/disco/cnv/CnvLegend.ts'\nimport type LohLegend from '#plots/disco/loh/LohLegend.ts'\nimport { CnvType } from '#plots/disco/cnv/CnvType.ts'\nimport type { DiscoInteractions } from '../interactions/DiscoInteractions'\n\nexport type MutationWaterfallLegend = {\n\tcolor: string\n\tonColorChange: (color: string) => void\n}\n\nexport type FusionLegendCounts = {\n\tinterchromosomal: number\n\tintrachromosomal: number\n}\n\nexport default class Legend {\n\tsnvTitle: string\n\tsnvClassMap: Map<string, SnvLegendElement>\n\n\tcnvTitle: string\n\tcnvClassMap: Map<CnvType, CnvLegend>\n\tcnvPercentile: number\n\tcnvCutoffMode: string\n\tcnvCount: number\n\n\tlohTitle: string\n\tlohLegend?: LohLegend\n\n\tfusionTitle: string\n\tfusionLegend: boolean\n\tfusionLegendCounts: FusionLegendCounts\n\tcnvRenderingType: string\n\n\tdiscoInteractions: DiscoInteractions\n\n\tmutationWaterfallLegend?: MutationWaterfallLegend\n\n\tconstructor(\n\t\tsnvTitle: string,\n\t\tcnvTitle: string,\n\t\tlohTitle: string,\n\t\tfusionTitle: string,\n\t\tcnvPercentile: number,\n\t\tcnvCutoffmode: string,\n\t\tsnvClassMap: Map<string, SnvLegendElement>,\n\t\tcnvClassMap: Map<CnvType, CnvLegend>,\n\t\tcnvRenderingType: string,\n\t\tfusionLegend: boolean,\n\t\tdiscoInteractions: DiscoInteractions,\n\t\tlohLegend?: LohLegend,\n\t\tmutationWaterfallLegend?: MutationWaterfallLegend,\n\t\tfusionLegendCounts: FusionLegendCounts = { interchromosomal: 0, intrachromosomal: 0 },\n\t\tcnvCount = 0\n\t) {\n\t\tthis.snvTitle = snvTitle\n\t\tthis.cnvTitle = cnvTitle\n\t\tthis.lohTitle = lohTitle\n\t\tthis.fusionTitle = fusionTitle\n\t\tthis.cnvPercentile = cnvPercentile\n\t\tthis.cnvCutoffMode = cnvCutoffmode\n\t\tthis.cnvCount = cnvCount\n\t\tthis.snvClassMap = snvClassMap\n\t\tthis.cnvClassMap = cnvClassMap\n\t\tthis.cnvRenderingType = cnvRenderingType\n\t\tthis.lohLegend = lohLegend\n\t\tthis.fusionLegend = fusionLegend\n\t\tthis.fusionLegendCounts = fusionLegendCounts\n\t\tthis.discoInteractions = discoInteractions\n\t\tthis.mutationWaterfallLegend = mutationWaterfallLegend\n\t}\n\n\tlegendCount(): number {\n\t\tconst hasItd = this.cnvClassMap.has(CnvType.ITD)\n\t\treturn (\n\t\t\t(this.snvClassMap.size > 0 ? 1 : 0) +\n\t\t\t(this.cnvCount > 0 ? 1 : 0) +\n\t\t\t(hasItd ? 1 : 0) +\n\t\t\t(this.lohLegend ? 1 : 0) +\n\t\t\t(this.fusionLegend ? 1 : 0) +\n\t\t\t(this.mutationWaterfallLegend ? 1 : 0)\n\t\t)\n\t}\n}\n", "import type { Ribbon } from 'd3'\nimport type FusionSubgroup from './FusionSubgroup.ts'\n\nexport default class Fusion implements Ribbon {\n\tsource: FusionSubgroup\n\ttarget: FusionSubgroup\n\tgenes: string\n\tcount: number\n\tendpts: string\n\n\tconstructor(source: FusionSubgroup, target: FusionSubgroup, genes: string, count: number, endpts: string) {\n\t\tthis.source = source\n\t\tthis.target = target\n\t\tthis.genes = genes\n\t\tthis.count = count\n\t\tthis.endpts = endpts\n\t}\n}\n", "import type { RibbonSubgroup } from 'd3'\nimport type PositionInChromosome from './PositionInChromosome.ts'\n\nexport default class FusionSubgroup implements RibbonSubgroup {\n\tstartAngle: number\n\tendAngle: number\n\tradius: number\n\n\tgene: string\n\tvalue: number\n\tgenes: Set<string>\n\tpositionInChromosome: PositionInChromosome\n\tstrand: string\n\n\tconstructor(\n\t\tstartAngle: number,\n\t\tendAngle: number,\n\t\tradius: number,\n\t\tgene: string,\n\t\tvalue: number,\n\t\tgenes: Set<string>,\n\t\tpositionInChromosome: PositionInChromosome,\n\t\tstrand: string\n\t) {\n\t\tthis.startAngle = startAngle\n\t\tthis.endAngle = endAngle\n\t\tthis.radius = radius\n\t\tthis.gene = gene\n\t\tthis.value = value\n\t\tthis.genes = genes\n\t\tthis.positionInChromosome = positionInChromosome\n\t\tthis.strand = strand\n\t}\n}\n", "import type Reference from '#plots/disco/chromosome/Reference.ts'\nimport type Data from '#plots/disco/data/Data.ts'\nimport Fusion from './Fusion.ts'\nimport FusionSubgroup from './FusionSubgroup.ts'\n\nexport default class FusionMapper {\n\tprivate radius: number\n\tprivate sampleName: string\n\tprivate reference: Reference\n\n\tconstructor(radius: number, sampleName: string, reference: Reference) {\n\t\tthis.radius = radius\n\t\tthis.sampleName = sampleName\n\t\tthis.reference = reference\n\t}\n\n\tmap(fusionData: Array<Data>): Array<Fusion> {\n\t\tconst fusions: Array<Fusion> = []\n\n\t\tfusionData.forEach(data => {\n\t\t\tconst genes = new Set<string>()\n\t\t\tgenes.add(data.geneA)\n\t\t\tgenes.add(data.geneB)\n\n\t\t\t/** skip any null (i.e. from isoforms or minor chrs) fusions */\n\t\t\tconst startAngle = this.calculateStartAngle(data.chrA, data.posA)\n\t\t\tconst endAngle = this.calculateEndAngle(data.chrA, data.posA)\n\t\t\tif (startAngle === null || endAngle === null) return\n\n\t\t\tconst source = new FusionSubgroup(\n\t\t\t\tstartAngle,\n\t\t\t\tendAngle,\n\t\t\t\tthis.radius,\n\t\t\t\tdata.geneA,\n\t\t\t\tdata.value,\n\t\t\t\tgenes,\n\t\t\t\t{\n\t\t\t\t\tchromosome: data.chrA,\n\t\t\t\t\tposition: data.posA\n\t\t\t\t},\n\t\t\t\tdata.strandA\n\t\t\t)\n\n\t\t\tlet target\n\t\t\tif (data.chrB && data.posB) {\n\t\t\t\t/** skip any null (i.e. from isoforms or minor chrs) fusions */\n\t\t\t\tconst startAngle = this.calculateStartAngle(data.chrB, data.posB)\n\t\t\t\tconst endAngle = this.calculateEndAngle(data.chrB, data.posB)\n\t\t\t\tif (startAngle === null || endAngle === null) return\n\t\t\t\ttarget = new FusionSubgroup(\n\t\t\t\t\tstartAngle,\n\t\t\t\t\tendAngle,\n\t\t\t\t\tthis.radius,\n\t\t\t\t\tdata.geneB,\n\t\t\t\t\tdata.value,\n\t\t\t\t\tgenes,\n\t\t\t\t\t{\n\t\t\t\t\t\tchromosome: data.chrB,\n\t\t\t\t\t\tposition: data.posB\n\t\t\t\t\t},\n\t\t\t\t\tdata.strandB\n\t\t\t\t)\n\t\t\t}\n\t\t\tconst fusion = new Fusion(source, target, 'genes', -1, 'Endpoints')\n\n\t\t\tfusions.push(fusion)\n\t\t})\n\n\t\treturn fusions\n\t}\n\n\tcalculateStartAngle(chr: string, pos: number) {\n\t\tconst index = this.reference.chromosomesOrder.indexOf(chr)\n\t\t/** Return null for isforms or minor chr */\n\t\tif (index === -1) return null\n\t\tconst chromosome = this.reference.chromosomes[index]\n\t\t// TODO calculate 0.01 base on BPs\n\t\treturn (\n\t\t\tchromosome.startAngle + (chromosome.endAngle - chromosome.startAngle) * (Number(pos) / chromosome.size) - 0.01\n\t\t)\n\t}\n\n\tprivate calculateEndAngle(chr: string, pos: number) {\n\t\tconst index = this.reference.chromosomesOrder.indexOf(chr)\n\t\t/** Return null for isforms or minor chr*/\n\t\tif (index === -1) return null\n\t\tconst chromosome = this.reference.chromosomes[index]\n\t\t// TODO calculate 0.01 base on BPs\n\t\treturn (\n\t\t\t0.01 + chromosome.startAngle + (chromosome.endAngle - chromosome.startAngle) * (Number(pos) / chromosome.size)\n\t\t)\n\t}\n}\n", "export default class LohLegend {\n\tcount: number\n\tconstructor(count: number) {\n\t\tthis.count = count\n\t}\n}\n", "import type Rings from '#plots/disco/ring/Rings.ts'\nimport type Legend from '#plots/disco/legend/Legend.ts'\nimport { RingType } from '#plots/disco/ring/RingType.ts'\nimport type Arc from '#plots/disco/arc/Arc.ts'\nimport type Settings from '#plots/disco/Settings.ts'\nimport { select } from 'd3-selection'\nimport { getMaxLabelWidth } from '#dom/maxLabelWidth'\nimport type Fusion from '#plots/disco/fusion/Fusion.ts'\nimport type { DataHolder } from '#plots/disco/data/DataHolder.ts'\nimport type { InvalidDataInfo } from '#dom'\n\nexport default class ViewModel {\n\tpublic appState: any\n\tpublic svgDiv: any\n\n\twidth: number\n\theight: number\n\tlegendHeight: number\n\n\trings: Rings\n\tlegend: Legend\n\n\tfusions: Array<Fusion>\n\n\tsettings: Settings\n\tsnvDataLength: number\n\tfilteredSnvDataLength: number\n\tsnvDataLengthAll: number\n\tgenesetName: string\n\tcnvMaxValue?: number\n\tcnvMinValue?: number\n\tcappedCnvMaxAbsValue?: number\n\tnegativePercentile?: number\n\tpositivePercentile?: number\n\tinvalidDataInfo?: InvalidDataInfo\n\tcanShowMutationWaterfallPlot: boolean\n\thasMutationFractionData: boolean\n\n\tconstructor(\n\t\tsettings: Settings,\n\t\trings: Rings,\n\t\tlegend: Legend,\n\t\tfusions: Array<Fusion>,\n\t\tdataHolder: DataHolder,\n\t\tgenesetName: string,\n\t\t// TODO do we need this?\n\t\tsnvDataLengthAll: number\n\t) {\n\t\tthis.settings = settings\n\t\tthis.rings = rings\n\t\tthis.legend = legend\n\t\tthis.fusions = fusions\n\t\tthis.genesetName = genesetName\n\n\t\tconst tempHolder = select('body').append('div').style('position', 'absolute').style('visibility', 'hidden')\n\t\tconst tempSvg = tempHolder.append('svg')\n\t\tconst labels = rings.labelsRing?.elementsToDisplay?.map(l => l.text) || []\n\t\tconst maxLabelSpace = getMaxLabelWidth(tempSvg as any, labels)\n\t\ttempHolder.remove()\n\n\t\t//Diameter of the disco and labels usedd to calculate height and with of canvas\n\t\tthis.width =\n\t\t\t2 *\n\t\t\t(this.settings.horizontalPadding +\n\t\t\t\tthis.settings.rings.labelLinesInnerRadius +\n\t\t\t\tthis.settings.rings.labelsToLinesDistance +\n\t\t\t\tmaxLabelSpace)\n\t\tthis.height =\n\t\t\t2 *\n\t\t\t(this.settings.rings.labelLinesInnerRadius +\n\t\t\t\tthis.settings.rings.labelsToLinesDistance +\n\t\t\t\tthis.settings.verticalPadding +\n\t\t\t\tthis.settings.label.fontSize * 2 +\n\t\t\t\tmaxLabelSpace)\n\n\t\tthis.legendHeight = this.calculateLegendHeight(legend)\n\t\tthis.snvDataLength = dataHolder.snvData.length\n\t\tthis.filteredSnvDataLength = dataHolder.filteredSnvData.length\n\t\tthis.snvDataLengthAll = snvDataLengthAll\n\n\t\tthis.cnvMaxValue = dataHolder.cnvGainMaxValue\n\t\tthis.cnvMinValue = dataHolder.cnvLossMaxValue\n\t\tthis.cappedCnvMaxAbsValue = dataHolder.cappedCnvMaxAbsValue\n\t\tthis.negativePercentile = dataHolder.percentileNegative\n\t\tthis.positivePercentile = dataHolder.percentilePositive\n\t\tthis.invalidDataInfo = dataHolder.invalidDataInfo\n\t\tthis.canShowMutationWaterfallPlot = dataHolder.hasWaterfallEligibleChromosome\n\t\tthis.hasMutationFractionData = dataHolder.hasMutationFractionData\n\t}\n\n\tgetElements(ringType: RingType): Array<Arc> {\n\t\tswitch (ringType) {\n\t\t\tcase RingType.CHROMOSOME:\n\t\t\t\treturn this.rings.chromosomesRing ? this.rings.chromosomesRing.elements : []\n\t\t\tcase RingType.LABEL:\n\t\t\t\treturn this.rings.labelsRing.elementsToDisplay\n\t\t\tcase RingType.NONEXONICSNV:\n\t\t\t\treturn this.rings.nonExonicArcRing ? this.rings.nonExonicArcRing.elements : []\n\t\t\tcase RingType.SNV:\n\t\t\t\treturn this.rings.snvArcRing ? this.rings.snvArcRing.elements : []\n\t\t\tcase RingType.CNV:\n\t\t\t\treturn this.rings.cnvArcRing ? this.rings.cnvArcRing.elements : []\n\t\t\tcase RingType.LOH:\n\t\t\t\treturn this.rings.lohArcRing ? this.rings.lohArcRing.elements : []\n\t\t\tcase RingType.MUTATION_WATERFALL:\n\t\t\t\treturn this.rings.mutationWaterfallRing ? this.rings.mutationWaterfallRing.elements : []\n\t\t\tdefault:\n\t\t\t\tthrow new Error(`ringType ${ringType} not defined`)\n\t\t}\n\t}\n\n\tgetCollisions(ringType: RingType): Array<Arc> | undefined {\n\t\tif (ringType == RingType.LABEL) {\n\t\t\treturn this.rings.labelsRing.collisions\n\t\t} else {\n\t\t\treturn undefined\n\t\t}\n\t}\n\n\tprivate calculateLegendHeight(legend: Legend): number {\n\t\tconst rawHeight = this.settings.legend.rowHeight\n\t\treturn rawHeight * legend.legendCount()\n\t}\n}\n", "import type Arc from '#plots/disco/arc/Arc.ts'\n\nexport default class Ring<T extends Arc> {\n\twidth: number\n\n\tinnerRadius: number\n\touterRadius: number\n\n\telements: Array<T>\n\n\tconstructor(innerRadius: number, width: number, elements: Array<T>) {\n\t\tthis.innerRadius = innerRadius\n\t\tthis.outerRadius = innerRadius + width\n\t\tthis.width = width\n\t\tthis.elements = elements\n\t}\n}\n", "import { mclass } from '#shared/common.js'\nexport default class MLabel {\n\tprivate static instance: MLabel\n\treadonly mlabel\n\n\t/**\n\t * The Singleton's constructor should always be private to prevent direct\n\t * construction calls with the `new` operator.\n\t */\n\tprivate constructor() {\n\t\tconst mlabel = {}\n\t\tfor (const key in mclass) {\n\t\t\tmlabel[mclass[key].label] = mclass[key]\n\t\t\tmlabel[key] = mclass[key]\n\t\t}\n\n\t\tthis.mlabel = mlabel\n\t}\n\n\t/**\n\t * The static method that controls the access to the singleton instance.\n\t *\n\t * This implementation let you subclass the Singleton class while keeping\n\t * just one instance of each subclass around.\n\t */\n\tpublic static getInstance(): MLabel {\n\t\tif (!MLabel.instance) {\n\t\t\tMLabel.instance = new MLabel()\n\t\t}\n\n\t\treturn MLabel.instance\n\t}\n}\n", "export default class SnvLegendElement {\n snvType: string\n color: string\n count: number;\n\n constructor(snvType: string, color: string, count: number) {\n this.snvType = snvType;\n this.color = color;\n this.count = count\n }\n}", "import type Reference from '#plots/disco/chromosome/Reference.ts'\nimport type Data from '#plots/disco/data/Data.ts'\nimport type SnvArc from './SnvArc.ts'\nimport MLabel from '#plots/disco/label/MLabel.ts'\nimport SnvLegendElement from './SnvLegendElement.ts'\n\nexport default class SnvArcsMapper {\n\tsnvClassMap: Map<string, SnvLegendElement> = new Map()\n\n\tprivate sampleName: string\n\tprivate reference: Reference\n\n\tprivate onePxArcAngle: number\n\tprivate bpx: number\n\tprivate svnInnerRadius: number\n\tprivate svnWidth: number\n\n\tconstructor(svnInnerRadius: number, svnWidth: number, sampleName: string, reference: Reference) {\n\t\tthis.svnInnerRadius = svnInnerRadius\n\t\tthis.svnWidth = svnWidth\n\t\tthis.sampleName = sampleName\n\t\tthis.reference = reference\n\n\t\t// number of base pairs per pixel\n\t\tthis.bpx = Math.floor(this.reference.totalSize / (this.reference.totalChromosomesAngle * svnInnerRadius))\n\t\tthis.onePxArcAngle = 1 / svnInnerRadius\n\t}\n\n\tmap(exonicSnvDataMap: Map<number, Array<Data>>): Array<SnvArc> {\n\t\tconst snvArray: Array<SnvArc> = []\n\t\tfor (const angle of exonicSnvDataMap.keys()) {\n\t\t\tconst array = exonicSnvDataMap.get(angle)\n\t\t\tif (array) {\n\t\t\t\tconst arraySize = array.length\n\n\t\t\t\tfor (let i = 0; i < array.length; i++) {\n\t\t\t\t\tconst data = array[i]\n\t\t\t\t\tconst snvLegendElement = this.snvClassMap.get(data.mClass)\n\t\t\t\t\tif (snvLegendElement) {\n\t\t\t\t\t\tthis.snvClassMap.set(data.mClass, this.createSnvLegend(data.mClass, ++snvLegendElement.count))\n\t\t\t\t\t} else {\n\t\t\t\t\t\tthis.snvClassMap.set(data.mClass, this.createSnvLegend(data.mClass, 1))\n\t\t\t\t\t}\n\n\t\t\t\t\tconst startAngle = angle\n\t\t\t\t\tconst endAngle = angle + this.onePxArcAngle\n\n\t\t\t\t\tconst mLabel = MLabel.getInstance().mlabel ? MLabel.getInstance().mlabel[data.mClass] : undefined\n\n\t\t\t\t\tconst arc: SnvArc = {\n\t\t\t\t\t\tstartAngle: startAngle,\n\t\t\t\t\t\tendAngle: endAngle,\n\t\t\t\t\t\tinnerRadius: this.svnInnerRadius + (i * this.svnWidth) / arraySize,\n\t\t\t\t\t\touterRadius: this.svnInnerRadius + ((i + 1) * this.svnWidth) / arraySize,\n\t\t\t\t\t\tcolor: mLabel.color,\n\t\t\t\t\t\ttext: data.gene,\n\t\t\t\t\t\tdataClass: mLabel.label,\n\t\t\t\t\t\tmname: data.mname,\n\t\t\t\t\t\tchr: data.chr,\n\t\t\t\t\t\tpos: data.position,\n\t\t\t\t\t\tvafs: data.vafs,\n\t\t\t\t\t\tsampleName: [data.sampleName]\n\t\t\t\t\t}\n\t\t\t\t\tsnvArray.push(arc)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn snvArray\n\t}\n\n\tprivate createSnvLegend(dataClass: string, count: number) {\n\t\tconst mClass = MLabel.getInstance().mlabel[dataClass]\n\t\treturn new SnvLegendElement(mClass.label, mClass.color, count)\n\t}\n}\n", "import type { CnvType } from './CnvType.ts'\n\nexport default class CnvLegend {\n\ttext: string\n\tcnvType: CnvType\n\tcolor: string\n\tvalue: number\n\n\tconstructor(text: string, cnvType: CnvType, color: string, value: number) {\n\t\tthis.text = text\n\t\tthis.cnvType = cnvType\n\t\tthis.color = color\n\t\tthis.value = value\n\t}\n}\n", "import type Settings from '#plots/disco/Settings.ts'\nimport { CnvRenderingType } from '#plots/disco/cnv/CnvRenderingType.ts'\n\nexport default class CnvColorProvider {\n\tstatic getColor(value: number, settings: Settings, cnvMaxPercentileAbs = 0) {\n\t\tconst cnv = settings.cnv\n\t\tconst gainCapped =\n\t\t\tsettings.Disco.cnvRenderingType == CnvRenderingType.heatmap ? settings.Disco.cnvCapping : cnvMaxPercentileAbs\n\t\tconst lossCapped =\n\t\t\tsettings.Disco.cnvRenderingType == CnvRenderingType.heatmap\n\t\t\t\t? -1 * settings.Disco.cnvCapping\n\t\t\t\t: -1 * cnvMaxPercentileAbs\n\t\tif (value < lossCapped) {\n\t\t\treturn cnv.cappedLossColor\n\t\t} else if (value >= lossCapped && value <= 0) {\n\t\t\treturn cnv.lossColor\n\t\t} else if (value > 0 && value <= gainCapped) {\n\t\t\treturn cnv.ampColor\n\t\t} else {\n\t\t\treturn cnv.cappedAmpColor\n\t\t}\n\t}\n}\n", "import type Data from '#plots/disco/data/Data.ts'\nimport type Reference from '#plots/disco/chromosome/Reference.ts'\nimport type CnvArc from './CnvArc.ts'\nimport CnvLegend from './CnvLegend.ts'\nimport { CnvType } from './CnvType.ts'\nimport type Settings from '#plots/disco/Settings.ts'\nimport CnvColorProvider from '#plots/disco/cnv/CnvColorProvider.ts'\nimport { CnvRenderingType } from '#plots/disco/cnv/CnvRenderingType.ts'\nimport DataMapper from '#plots/disco/data/DataMapper.ts'\nimport { dtitd, mclass, mclassitd } from '#shared/common.js'\n\nexport default class CnvArcsMapper {\n\tcnvClassMap: Map<CnvType, CnvLegend> = new Map()\n\n\tprivate settings: Settings\n\tprivate sampleName: string\n\tprivate reference: Reference\n\tprivate cnvMaxValue: number\n\tprivate cnvMinValue: number\n\tprivate cnvUnit: string\n\n\tprivate onePxArcAngle: number\n\tprivate lossOnly: boolean\n\tprivate gainOnly: boolean\n\tprivate gainCapped: number\n\tprivate lossCapped: number\n\tprivate cnvMaxAbsValue: number\n\tprivate cnvInnerRadius: number\n\tprivate cnvWidth: number\n\tprivate cnvRenderingType: string\n\tprivate cnvAbsPercentile: number\n\n\tconstructor(\n\t\tcnvInnerRadius: number,\n\t\tcnvWidth: number,\n\t\tsettings: Settings,\n\t\tsampleName: string,\n\t\treference: Reference,\n\t\tcnvMaxValue = 0,\n\t\tcnvMinValue = 0,\n\t\tcnvMaxAbsValue = 0,\n\t\tcnvAbsPercentile = 0,\n\t\tcnvUnit = '',\n\t\tcnvRenderingType: string\n\t) {\n\t\tthis.cnvInnerRadius = cnvInnerRadius\n\t\tthis.cnvWidth = cnvWidth\n\t\tthis.settings = settings\n\t\tthis.sampleName = sampleName\n\t\tthis.reference = reference\n\t\tthis.cnvMaxValue = cnvMaxValue\n\t\tthis.cnvMinValue = cnvMinValue\n\t\tthis.cnvMaxAbsValue = cnvMaxAbsValue\n\t\tthis.cnvAbsPercentile = cnvAbsPercentile\n\t\tthis.cnvUnit = cnvUnit\n\t\tthis.cnvRenderingType = cnvRenderingType\n\n\t\tthis.gainCapped = Math.min(cnvAbsPercentile, this.settings.Disco.cnvCapping)\n\t\tthis.lossCapped = -1 * Math.min(cnvAbsPercentile, this.settings.Disco.cnvCapping)\n\n\t\tthis.lossOnly = cnvMaxValue <= 0\n\t\tthis.gainOnly = cnvMinValue >= 0\n\n\t\tthis.onePxArcAngle = 1 / this.cnvInnerRadius\n\n\t\tconst gain = new CnvLegend(\n\t\t\t'Max',\n\t\t\tcnvMaxValue > 0 ? CnvType.Gain : CnvType.Loss,\n\t\t\tthis.getColor(cnvMaxValue),\n\t\t\tcnvMaxValue\n\t\t)\n\t\tconst loss = new CnvLegend(\n\t\t\t'Min',\n\t\t\tcnvMinValue > 0 ? CnvType.Gain : CnvType.Loss,\n\t\t\tthis.getColor(cnvMinValue),\n\t\t\tcnvMinValue\n\t\t)\n\t\tconst cap = new CnvLegend(\n\t\t\t'Capping',\n\t\t\tCnvType.Loss,\n\t\t\tthis.getColor(cnvMinValue > 0 ? cnvMinValue : cnvMaxValue),\n\t\t\tthis.settings.Disco.cnvCapping\n\t\t)\n\n\t\tthis.cnvClassMap.set(CnvType.Gain, gain)\n\t\tthis.cnvClassMap.set(CnvType.Loss, loss)\n\t\tthis.cnvClassMap.set(CnvType.Cap, cap)\n\t}\n\n\tmap(arcData: Array<Data>): Array<CnvArc> {\n\t\tconst arcs: Array<CnvArc> = []\n\t\tlet itdCount = 0\n\n\t\tarcData.forEach(data => {\n\t\t\tlet startAngle = this.calculateStartAngle(data)\n\t\t\tlet endAngle = this.calculateEndAngle(data)\n\n\t\t\tif (startAngle === null || endAngle === null) return\n\n\t\t\tif (endAngle - startAngle < this.onePxArcAngle) {\n\t\t\t\tconst restAngle = this.onePxArcAngle - (endAngle - startAngle)\n\t\t\t\tstartAngle = startAngle - restAngle / 2\n\t\t\t\tendAngle = endAngle + restAngle / 2\n\t\t\t}\n\n\t\t\tconst isItd = data.dt == dtitd\n\t\t\tif (isItd) itdCount++\n\t\t\tconst color = isItd ? mclass[mclassitd].color : this.getColor(data.value)\n\t\t\tconst innerRadius = isItd ? this.cnvInnerRadius : this.calculateInnerRadius(data)\n\t\t\tconst outerRadius = isItd ? this.cnvInnerRadius + this.cnvWidth : this.calculateOuterRadius(data)\n\n\t\t\tconst arc: CnvArc = {\n\t\t\t\tstartAngle: startAngle,\n\t\t\t\tendAngle: endAngle,\n\t\t\t\tinnerRadius,\n\t\t\t\touterRadius,\n\t\t\t\tcolor: color,\n\t\t\t\tdt: data.dt,\n\t\t\t\tdataClass: data.mClass,\n\t\t\t\ttext: data.gene,\n\t\t\t\tchr: data.chr,\n\t\t\t\tstart: data.start,\n\t\t\t\tstop: data.stop,\n\t\t\t\tvalue: data.value,\n\t\t\t\tunit: this.cnvUnit,\n\t\t\t\tsampleName: [this.sampleName]\n\t\t\t}\n\n\t\t\tarcs.push(arc)\n\t\t})\n\t\tif (itdCount) {\n\t\t\tthis.cnvClassMap.set(CnvType.ITD, new CnvLegend('ITD', CnvType.ITD, mclass[mclassitd].color, itdCount))\n\t\t}\n\n\t\treturn arcs\n\t}\n\n\tcalculateStartAngle(data: Data) {\n\t\tconst index = this.reference.chromosomesOrder.indexOf(data.chr)\n\t\tif (index == -1) return null\n\t\tconst chromosome = this.reference.chromosomes[index]\n\t\treturn (\n\t\t\tchromosome.startAngle + (chromosome.endAngle - chromosome.startAngle) * (Number(data.start) / chromosome.size)\n\t\t)\n\t}\n\n\tprivate calculateEndAngle(data: Data) {\n\t\tconst index = this.reference.chromosomesOrder.indexOf(data.chr)\n\t\tconst chromosome = this.reference.chromosomes[index]\n\t\treturn chromosome.startAngle + (chromosome.endAngle - chromosome.startAngle) * (Number(data.stop) / chromosome.size)\n\t}\n\n\tgetColor(value: number) {\n\t\treturn CnvColorProvider.getColor(value, this.settings, this.cnvAbsPercentile)\n\t}\n\n\tprivate calculateInnerRadius(data: Data) {\n\t\tif (this.cnvRenderingType == CnvRenderingType.heatmap) {\n\t\t\treturn this.cnvInnerRadius\n\t\t}\n\n\t\tif (this.gainOnly) {\n\t\t\treturn this.cnvInnerRadius\n\t\t}\n\n\t\tif (this.lossOnly) {\n\t\t\tconst outerRadius = this.cnvInnerRadius + this.cnvWidth\n\n\t\t\treturn (\n\t\t\t\touterRadius +\n\t\t\t\tDataMapper.capMinValue(\n\t\t\t\t\t(this.cnvWidth * DataMapper.capMaxValue(data.value, this.gainCapped, this.lossCapped)) / this.cnvAbsPercentile\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\n\t\tconst centerRadius = this.cnvInnerRadius + this.cnvWidth / 2\n\n\t\tif (Math.sign(data.value) == 1) {\n\t\t\treturn centerRadius\n\t\t}\n\n\t\tif (Math.sign(data.value) == -1) {\n\t\t\treturn (\n\t\t\t\tcenterRadius +\n\t\t\t\tDataMapper.capMinValue(\n\t\t\t\t\t(DataMapper.capMaxValue(data.value, this.gainCapped, this.lossCapped) / this.cnvAbsPercentile) *\n\t\t\t\t\t\t(this.cnvWidth / 2)\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\n\t\treturn 1\n\t}\n\n\tprivate calculateOuterRadius(data: Data) {\n\t\tconst maxOuterRadius = this.cnvInnerRadius + this.cnvWidth\n\n\t\tif (this.cnvRenderingType == CnvRenderingType.heatmap) {\n\t\t\treturn maxOuterRadius\n\t\t}\n\n\t\tif (this.gainOnly) {\n\t\t\treturn (\n\t\t\t\tthis.cnvInnerRadius +\n\t\t\t\tDataMapper.capMinValue(\n\t\t\t\t\t(this.cnvWidth * DataMapper.capMaxValue(data.value, this.gainCapped, this.lossCapped)) / this.cnvAbsPercentile\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\n\t\tif (this.lossOnly) {\n\t\t\treturn maxOuterRadius\n\t\t}\n\n\t\tconst centerRadius = this.cnvInnerRadius + this.cnvWidth / 2\n\n\t\tif (Math.sign(data.value) == 1) {\n\t\t\treturn (\n\t\t\t\tcenterRadius +\n\t\t\t\tDataMapper.capMinValue(\n\t\t\t\t\t(DataMapper.capMaxValue(data.value, this.gainCapped, this.lossCapped) / this.cnvMaxAbsValue) *\n\t\t\t\t\t\t(this.cnvWidth / 2)\n\t\t\t\t)\n\t\t\t)\n\t\t}\n\n\t\tif (Math.sign(data.value) == -1) {\n\t\t\treturn centerRadius\n\t\t}\n\t\treturn 1\n\t}\n}\n", "import type Point from './Point.ts'\n\nexport default class Line {\n\tcolor: string\n\tpoints = new Array<Point>()\n\n\tconstructor(points: Array<Point>, color: string) {\n\t\tthis.points = points\n\t\tthis.color = color\n\t}\n}\n", "import type Label from './Label.ts'\nimport type Point from './Point.ts'\nimport Line from './Line.ts'\nimport type MutationTooltip from '#plots/disco/label/MutationTooltip.ts'\nimport type FusionTooltip from '#plots/disco/fusion/FusionTooltip.ts'\n\nexport default class LabelFactory {\n\tstatic createLabel(\n\t\tstartAngle: number,\n\t\tendAngle: number,\n\t\tinnerRadius: number,\n\t\touterRadius: number,\n\t\tvalue: number,\n\t\tgene: string,\n\t\tcolor: string,\n\t\tdataClass: string,\n\t\tchr: string,\n\t\tposition: number,\n\t\tisPrioritized = false,\n\t\tlabelsToLinesGap: number,\n\t\tmutationTooltip?: MutationTooltip,\n\t\tfusionTooltip?: FusionTooltip\n\t) {\n\t\tconst angle = (startAngle + endAngle) / 2\n\t\tconst ccAngle = angle - Math.PI / 2\n\t\tconst transform = `rotate(${(angle * 180) / Math.PI - 90}) translate(${outerRadius})${\n\t\t\tangle > Math.PI ? 'rotate(180)' : ''\n\t\t}`\n\t\tconst textAnchor = angle > Math.PI ? 'end' : ''\n\t\tconst r0 = innerRadius\n\t\tconst r1 = outerRadius - labelsToLinesGap\n\n\t\tconst points: Array<Point> = []\n\t\tconst point0: Point = {\n\t\t\tx: r0 * Math.cos(ccAngle),\n\t\t\ty: r0 * Math.sin(ccAngle)\n\t\t}\n\t\tconst point1: Point = {\n\t\t\tx: r1 * Math.cos(ccAngle),\n\t\t\ty: r1 * Math.sin(ccAngle)\n\t\t}\n\n\t\tpoints.push(point0)\n\t\tpoints.push(point1)\n\n\t\tconst line = new Line(points, color)\n\n\t\tconst label: Label = {\n\t\t\tstartAngle,\n\t\t\tendAngle,\n\t\t\tinnerRadius,\n\t\t\touterRadius,\n\t\t\tangle,\n\t\t\tvalue,\n\t\t\ttext: gene,\n\t\t\tcolor,\n\t\t\ttransform,\n\t\t\ttextAnchor,\n\t\t\tccAngle,\n\t\t\tline,\n\t\t\tisPrioritized,\n\t\t\tstart: position,\n\t\t\tstop: position,\n\t\t\tchr: chr,\n\t\t\tmutationsTooltip: mutationTooltip ? [mutationTooltip] : undefined,\n\t\t\tfusionTooltip: fusionTooltip ? [fusionTooltip] : undefined\n\t\t}\n\n\t\treturn label\n\t}\n\n\tstatic createMovedLabel(element: Label, overlap: number): Label {\n\t\tconst startAngle = element.startAngle + overlap\n\t\tconst endAngle = element.endAngle + overlap\n\n\t\tconst angle = (startAngle + endAngle) / 2\n\t\tconst ccAngle = angle - Math.PI / 2\n\n\t\tconst r0 = element.innerRadius\n\t\tconst r1 = element.outerRadius - 2\n\t\tconst dr = (r1 - r0) / 3\n\t\tconst cos0 = Math.cos(element.ccAngle)\n\t\tconst sin0 = Math.sin(element.ccAngle)\n\t\tconst cos1 = Math.cos(element.ccAngle + overlap)\n\t\tconst sin1 = Math.sin(element.ccAngle + overlap)\n\n\t\tconst points: Array<Point> = []\n\n\t\tconst point0: Point = {\n\t\t\tx: r0 * cos0,\n\t\t\ty: r0 * sin0\n\t\t}\n\t\tconst point1: Point = {\n\t\t\tx: (r0 + dr) * cos0,\n\t\t\ty: (r0 + dr) * sin0\n\t\t}\n\t\tconst point2: Point = {\n\t\t\tx: (r0 + 2 * dr) * cos1,\n\t\t\ty: (r0 + 2 * dr) * sin1\n\t\t}\n\n\t\tconst point3: Point = {\n\t\t\tx: (r0 + 3 * dr) * cos1,\n\t\t\ty: (r0 + 3 * dr) * sin1\n\t\t}\n\n\t\tpoints.push(point0)\n\t\tpoints.push(point1)\n\t\tpoints.push(point2)\n\t\tpoints.push(point3)\n\n\t\tconst line = new Line(points, element.color)\n\n\t\tconst transform: string =\n\t\t\t'rotate(' +\n\t\t\t((angle * 180) / Math.PI - 90) +\n\t\t\t')' +\n\t\t\t'translate(' +\n\t\t\telement.outerRadius +\n\t\t\t')' +\n\t\t\t(angle > Math.PI ? 'rotate(180)' : '')\n\n\t\tconst textAnchor = angle > Math.PI ? 'end' : ''\n\n\t\tconst color = element.mutationsTooltip\n\t\t\t? element.mutationsTooltip[0].color\n\t\t\t: element.fusionTooltip\n\t\t\t? element.fusionTooltip[0].color\n\t\t\t: undefined\n\n\t\tconst label: Label = {\n\t\t\tstartAngle: startAngle,\n\t\t\tendAngle: endAngle,\n\t\t\tinnerRadius: element.innerRadius,\n\t\t\touterRadius: element.outerRadius,\n\t\t\tangle: angle,\n\t\t\tvalue: element.value,\n\t\t\ttext: element.text,\n\t\t\ttransform: transform,\n\t\t\ttextAnchor: textAnchor,\n\t\t\tccAngle: ccAngle,\n\t\t\tcolor: color,\n\t\t\tline: line,\n\t\t\tisPrioritized: element.isPrioritized,\n\t\t\tstart: element.start,\n\t\t\tstop: element.stop,\n\t\t\tchr: element.chr,\n\t\t\tmutationsTooltip: element.mutationsTooltip,\n\t\t\tfusionTooltip: element.fusionTooltip,\n\t\t\tcnvTooltip: element.cnvTooltip\n\t\t}\n\n\t\treturn label\n\t}\n}\n", "import type Data from '#plots/disco/data/Data.ts'\nimport type Reference from '#plots/disco/chromosome/Reference.ts'\nimport type Label from './Label.ts'\nimport LabelFactory from './LabelFactory.ts'\nimport MLabel from './MLabel.ts'\nimport type MutationTooltip from '#plots/disco/label/MutationTooltip.ts'\nimport type Settings from '#plots/disco/Settings.ts'\nimport FusionColorProvider from '#plots/disco/fusion/FusionColorProvider.ts'\nimport type FusionTooltip from '#plots/disco/fusion/FusionTooltip.ts'\nimport type CnvTooltip from '#plots/disco/cnv/CnvTooltip.ts'\nimport CnvColorProvider from '#plots/disco/cnv/CnvColorProvider.ts'\nimport { dtsnvindel, dtfusionrna, dtcnv, dtitd, mclass, mclassitd } from '#shared/common.js'\n\nexport default class LabelsMapper {\n\tprivate settings: Settings\n\tprivate sampleName: string\n\tprivate reference: Reference\n\n\tprivate labelMap: Map<string, Label> = new Map()\n\tprivate cnvMaxPercentileAbs: number\n\n\tconstructor(settings: Settings, sampleName: string, reference: Reference, cnvMaxPercentileAbs = 0) {\n\t\tthis.settings = settings\n\t\tthis.sampleName = sampleName\n\t\tthis.reference = reference\n\t\tthis.cnvMaxPercentileAbs = cnvMaxPercentileAbs\n\t}\n\n\tmap(data: Array<Data>, cnvData: Array<Data> = []): Array<Label> {\n\t\tconst innerRadius = this.settings.rings.labelLinesInnerRadius\n\t\tconst outerRadius = innerRadius + this.settings.rings.labelsToLinesDistance\n\n\t\tdata.forEach(data => {\n\t\t\tif (data.dt == dtsnvindel) {\n\t\t\t\tconst startAngle = this.calculateStartAngle(data.chr, data.position)\n\t\t\t\tconst endAngle = this.calculateEndAngle(data.chr, data.position)\n\t\t\t\tif (startAngle === null || endAngle === null) return\n\n\t\t\t\tconst mLabel = MLabel.getInstance().mlabel ? MLabel.getInstance().mlabel[data.mClass] : undefined\n\n\t\t\t\tthis.addLabelOrMutation(\n\t\t\t\t\tdata,\n\t\t\t\t\tdata.gene,\n\t\t\t\t\tdata.mname,\n\t\t\t\t\tstartAngle,\n\t\t\t\t\tendAngle,\n\t\t\t\t\tinnerRadius,\n\t\t\t\t\touterRadius,\n\t\t\t\t\tmLabel.color,\n\t\t\t\t\tmLabel.label\n\t\t\t\t)\n\t\t\t}\n\n\t\t\tif (data.dt == dtfusionrna) {\n\t\t\t\tconst color = FusionColorProvider.getColor(data.chrA, data.chrB)\n\t\t\t\tif (data.geneA) {\n\t\t\t\t\tconst startAngleSource = this.calculateStartAngle(data.chrA, data.posA)\n\t\t\t\t\tconst endAngleSource = this.calculateEndAngle(data.chrA, data.posA)\n\t\t\t\t\tif (startAngleSource === null || endAngleSource === null) return\n\n\t\t\t\t\tthis.addLabelOrFusion(\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\tdata.geneA,\n\t\t\t\t\t\tdata.posA,\n\t\t\t\t\t\tdata.chrA,\n\t\t\t\t\t\tstartAngleSource,\n\t\t\t\t\t\tendAngleSource,\n\t\t\t\t\t\tinnerRadius,\n\t\t\t\t\t\touterRadius,\n\t\t\t\t\t\tcolor\n\t\t\t\t\t)\n\t\t\t\t}\n\n\t\t\t\tif (data.geneB && data.geneA != data.geneB) {\n\t\t\t\t\tconst startAngleTarget = this.calculateStartAngle(data.chrB, data.posB)\n\t\t\t\t\tconst endAngleTarget = this.calculateEndAngle(data.chrB, data.posB)\n\n\t\t\t\t\tif (startAngleTarget == null || endAngleTarget == null) return\n\n\t\t\t\t\tthis.addLabelOrFusion(\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\tdata.geneB,\n\t\t\t\t\t\tdata.posB,\n\t\t\t\t\t\tdata.chrB,\n\t\t\t\t\t\tstartAngleTarget,\n\t\t\t\t\t\tendAngleTarget,\n\t\t\t\t\t\tinnerRadius,\n\t\t\t\t\t\touterRadius,\n\t\t\t\t\t\tcolor\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tconst labelsArray = Array.from(this.labelMap.values())\n\t\tlabelsArray.forEach((label: Label) => {\n\t\t\tcnvData.forEach((cnv: Data) => {\n\t\t\t\tif (\n\t\t\t\t\t(cnv.dt == dtcnv || cnv.dt == dtitd) &&\n\t\t\t\t\tlabel.chr == cnv.chr &&\n\t\t\t\t\tlabel.stop >= cnv.start &&\n\t\t\t\t\tcnv.stop >= label.start\n\t\t\t\t) {\n\t\t\t\t\tconst mutation: CnvTooltip = {\n\t\t\t\t\t\tdt: cnv.dt,\n\t\t\t\t\t\tvalue: cnv.value,\n\t\t\t\t\t\tcolor:\n\t\t\t\t\t\t\tcnv.dt == dtitd\n\t\t\t\t\t\t\t\t? mclass[mclassitd].color\n\t\t\t\t\t\t\t\t: CnvColorProvider.getColor(cnv.value, this.settings, this.cnvMaxPercentileAbs),\n\t\t\t\t\t\tchr: cnv.chr,\n\t\t\t\t\t\tstart: cnv.start,\n\t\t\t\t\t\tstop: cnv.stop\n\t\t\t\t\t}\n\t\t\t\t\tif (label.cnvTooltip) {\n\t\t\t\t\t\tlabel.cnvTooltip.push(mutation)\n\t\t\t\t\t} else {\n\t\t\t\t\t\tlabel.cnvTooltip = []\n\t\t\t\t\t\tlabel.cnvTooltip.push(mutation)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t})\n\n\t\treturn Array.from(this.labelMap.values())\n\t}\n\n\tprivate addLabelOrMutation(\n\t\tdata: Data,\n\t\tgene: string,\n\t\tmname: string,\n\t\tstartAngle: number,\n\t\tendAngle: number,\n\t\tinnerRadius,\n\t\touterRadius,\n\t\tcolor,\n\t\tdataClass\n\t) {\n\t\tconst label = this.labelMap.get(gene)\n\t\tconst mutation: MutationTooltip = {\n\t\t\tmname: mname,\n\t\t\tcolor: color,\n\t\t\tdataClass: dataClass,\n\t\t\tchr: data.chr,\n\t\t\tposition: data.position,\n\t\t\tvafs: data.vafs\n\t\t}\n\t\tif (!label) {\n\t\t\tthis.labelMap.set(\n\t\t\t\tgene,\n\t\t\t\tLabelFactory.createLabel(\n\t\t\t\t\tstartAngle,\n\t\t\t\t\tendAngle,\n\t\t\t\t\tinnerRadius,\n\t\t\t\t\touterRadius,\n\t\t\t\t\tdata.value,\n\t\t\t\t\tgene,\n\t\t\t\t\tcolor,\n\t\t\t\t\tdataClass,\n\t\t\t\t\tdata.chr,\n\t\t\t\t\tdata.position,\n\t\t\t\t\tdata.isPrioritized,\n\t\t\t\t\tthis.settings.rings.labelsToLinesGap,\n\t\t\t\t\tmutation\n\t\t\t\t)\n\t\t\t)\n\t\t} else {\n\t\t\tif (label.mutationsTooltip) {\n\t\t\t\tlabel.start = Math.min(label.start, data.position)\n\t\t\t\tlabel.stop = Math.max(label.stop, data.position)\n\t\t\t\tlabel.mutationsTooltip.push(mutation)\n\t\t\t} else {\n\t\t\t\tlabel.mutationsTooltip = []\n\t\t\t\tlabel.start = Math.min(label.start, data.position)\n\t\t\t\tlabel.stop = Math.max(label.stop, data.position)\n\t\t\t\tlabel.mutationsTooltip.push(mutation)\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate addLabelOrFusion(\n\t\tdata: Data,\n\t\tgene: string,\n\t\tposition: number,\n\t\tchr: string,\n\t\tstartAngle: number,\n\t\tendAngle: number,\n\t\tinnerRadius,\n\t\touterRadius,\n\t\tcolor\n\t) {\n\t\tconst label = this.labelMap.get(gene)\n\t\tconst fusionTooltip: FusionTooltip = {\n\t\t\tcolor: color,\n\t\t\tchrA: data.chrA,\n\t\t\tchrB: data.chrB,\n\t\t\tposA: data.posA,\n\t\t\tposB: data.posB,\n\t\t\tgeneA: data.geneA,\n\t\t\tgeneB: data.geneB,\n\t\t\tstrandA: data.strandA,\n\t\t\tstrandB: data.strandB\n\t\t}\n\t\tif (!label) {\n\t\t\tthis.labelMap.set(\n\t\t\t\tgene,\n\t\t\t\tLabelFactory.createLabel(\n\t\t\t\t\tstartAngle,\n\t\t\t\t\tendAngle,\n\t\t\t\t\tinnerRadius,\n\t\t\t\t\touterRadius,\n\t\t\t\t\tdata.value,\n\t\t\t\t\tgene,\n\t\t\t\t\tcolor,\n\t\t\t\t\t'Fusion transcript',\n\t\t\t\t\tchr,\n\t\t\t\t\tposition,\n\t\t\t\t\tdata.isPrioritized,\n\t\t\t\t\tthis.settings.rings.labelsToLinesGap,\n\t\t\t\t\tundefined,\n\t\t\t\t\tfusionTooltip\n\t\t\t\t)\n\t\t\t)\n\t\t} else {\n\t\t\tif (label.fusionTooltip) {\n\t\t\t\tlabel.start = Math.min(label.start, position)\n\t\t\t\tlabel.stop = Math.max(label.stop, position)\n\t\t\t\tlabel.fusionTooltip.push(fusionTooltip)\n\t\t\t} else {\n\t\t\t\tlabel.fusionTooltip = []\n\t\t\t\tlabel.start = Math.min(label.start, position)\n\t\t\t\tlabel.stop = Math.max(label.stop, position)\n\t\t\t\tlabel.fusionTooltip.push(fusionTooltip)\n\t\t\t}\n\t\t}\n\t}\n\n\tprivate calculateStartAngle(chr: string, position: number) {\n\t\tconst index = this.reference.chromosomesOrder.findIndex(element => element == chr)\n\t\tif (index === -1) return null\n\t\tconst chromosome = this.reference.chromosomes[index]\n\n\t\treturn chromosome.startAngle + (chromosome.endAngle - chromosome.startAngle) * (Number(position) / chromosome.size)\n\t}\n\n\tprivate calculateEndAngle(chr: string, position: number) {\n\t\tconst index = this.reference.chromosomesOrder.findIndex(element => element == chr)\n\t\tif (index === -1) return null\n\t\tconst chromosome = this.reference.chromosomes[index]\n\n\t\treturn chromosome.startAngle + (chromosome.endAngle - chromosome.startAngle) * (Number(position) / chromosome.size)\n\t}\n}\n", "import Ring from '#plots/disco/ring/Ring.ts'\nimport type Label from './Label.ts'\nimport LabelFactory from './LabelFactory.ts'\nimport type Settings from '#plots/disco/Settings.ts'\n\nexport default class Labels extends Ring<Label> {\n\tcollisions?: Array<Label>\n\tsettings: any\n\telementsToDisplay: Array<Label> = []\n\n\tprivate hasPrioritizedGenes: boolean\n\tprivate overlapAngle: number\n\n\tconstructor(settings: Settings, elements: Array<Label>, hasPrioritizedGenes: boolean) {\n\t\tsuper(\n\t\t\tsettings.rings.labelLinesInnerRadius,\n\t\t\tsettings.rings.labelsToLinesDistance,\n\t\t\telements.sort((a, b) => {\n\t\t\t\treturn a.startAngle < b.startAngle ? -1 : a.startAngle > b.startAngle ? 1 : 0\n\t\t\t})\n\t\t)\n\n\t\tthis.settings = settings\n\t\tthis.hasPrioritizedGenes = hasPrioritizedGenes\n\n\t\tconst circumference = 2 * Math.PI * (settings.rings.labelLinesInnerRadius + settings.rings.labelsToLinesDistance)\n\t\tthis.overlapAngle = (this.settings.label.overlapAngleFactor * this.settings.label.fontSize) / circumference\n\n\t\tthis.calculateCollisions()\n\t}\n\n\tprivate calculateCollisions() {\n\t\tthis.collisions = []\n\n\t\tlet hasPrioritizedGenesList: Array<Label> = []\n\t\thasPrioritizedGenesList = this.elements.filter(label => label.isPrioritized)\n\n\t\tif (this.settings.label.prioritizeGeneLabelsByGeneSets) {\n\t\t\tthis.elementsToDisplay = this.getLabelsWithPrioritizedGenes(hasPrioritizedGenesList)\n\t\t} else if (this.hasPrioritizedGenes) {\n\t\t\tconst prioritizedGenesList = this.elements.filter(label => label.isPrioritized)\n\t\t\tconst filteredPrioritizedGenesList = this.getLabelsWithPrioritizedGenes(prioritizedGenesList)\n\n\t\t\tconst withoutPrioritizedGenesList = this.elements.filter(label => !label.isPrioritized)\n\n\t\t\tconst combinedAndSortedList = [...withoutPrioritizedGenesList, ...filteredPrioritizedGenesList].sort(\n\t\t\t\t(a, b) => a.startAngle - b.startAngle\n\t\t\t)\n\n\t\t\tthis.elementsToDisplay = this.getAllLabels(combinedAndSortedList)\n\t\t} else {\n\t\t\tthis.elementsToDisplay = this.getLabelsWithPrioritizedGenes(this.elements)\n\t\t}\n\t}\n\n\tprivate getLabelsWithPrioritizedGenes(elemenets: Array<Label>) {\n\t\tconst filteredList: Array<Label> = []\n\n\t\tlet prev = { endAngle: 0 }\n\t\telemenets.forEach((element, index) => {\n\t\t\tif (index == 0) {\n\t\t\t\tfilteredList.push(element)\n\t\t\t\tprev = element\n\t\t\t} else {\n\t\t\t\tconst overlap = prev.endAngle - element.startAngle + this.overlapAngle\n\n\t\t\t\tif (overlap > 0 && overlap < this.settings.label.maxDeltaAngle) {\n\t\t\t\t\tconst labelCopy = LabelFactory.createMovedLabel(element, overlap)\n\t\t\t\t\tfilteredList?.push(labelCopy)\n\t\t\t\t\tprev = labelCopy\n\t\t\t\t}\n\n\t\t\t\tif (overlap <= 0) {\n\t\t\t\t\tfilteredList.push(element)\n\t\t\t\t\tprev = element\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\treturn filteredList\n\t}\n\n\tprivate getAllLabels(elemenets: Array<Label>) {\n\t\tconst filteredList: Array<Label> = []\n\t\tlet prev = { endAngle: 0 }\n\t\tconst elemenetsLength = elemenets.length\n\t\tlet lastCancerGeneLabelIndex = -1\n\n\t\tfor (let index = 0; index < elemenets.length; index++) {\n\t\t\tconst element = elemenets[index]\n\t\t\tif (element.isPrioritized) {\n\t\t\t\tfilteredList.push(element)\n\t\t\t\tlastCancerGeneLabelIndex = index\n\t\t\t\tprev = element\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tif (index == 0) {\n\t\t\t\tif (elemenetsLength > 1) {\n\t\t\t\t\tif (this.isElementOverlappingNextCancerGene(elemenets, lastCancerGeneLabelIndex, element, 0)) {\n\t\t\t\t\t\tcontinue\n\t\t\t\t\t}\n\t\t\t\t\tfilteredList.push(element)\n\t\t\t\t\tprev = element\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\n\t\t\tconst prevOverlap = prev.endAngle - element.startAngle + this.overlapAngle\n\n\t\t\tif (prevOverlap > 0 && prevOverlap < this.settings.label.maxDeltaAngle) {\n\t\t\t\tif (index == length - 1) {\n\t\t\t\t\t// last element\n\t\t\t\t\tfilteredList.push(element)\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tif (this.isElementOverlappingNextCancerGene(elemenets, lastCancerGeneLabelIndex, element, prevOverlap)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tconst labelCopy = LabelFactory.createMovedLabel(element, prevOverlap)\n\t\t\t\tthis.collisions?.push(labelCopy)\n\t\t\t\tfilteredList.push(element)\n\t\t\t\tprev = labelCopy\n\t\t\t}\n\n\t\t\tif (prevOverlap <= 0) {\n\t\t\t\tif (this.isElementOverlappingNextCancerGene(elemenets, lastCancerGeneLabelIndex, element, 0)) {\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\n\t\t\t\tfilteredList.push(element)\n\t\t\t\tprev = element\n\t\t\t}\n\t\t}\n\t\treturn filteredList\n\t}\n\n\tprivate isElementOverlappingNextCancerGene(\n\t\telemenets: Array<Label>,\n\t\tlastCancerGeneLabelIndex: number,\n\t\telement: Label,\n\t\tprevOverlap: number\n\t) {\n\t\tconst nextLabelWithCancerGene = this.getNextLabelWithCancerGene(elemenets, lastCancerGeneLabelIndex)\n\t\tif (nextLabelWithCancerGene) {\n\t\t\tconst nextOverlap = element.endAngle + prevOverlap - nextLabelWithCancerGene.startAngle + this.overlapAngle\n\t\t\tif (nextOverlap > 0) {\n\t\t\t\t// skip element\n\t\t\t\treturn true\n\t\t\t}\n\t\t}\n\n\t\treturn false\n\t}\n\n\tprivate getNextLabelWithCancerGene(elemenets: Array<Label>, lastCancerGeneLabelIndex: number) {\n\t\treturn elemenets.find((label, index) => label.isPrioritized && index > lastCancerGeneLabelIndex)\n\t}\n}\n", "import type Reference from '#plots/disco/chromosome/Reference.ts'\nimport type Data from '#plots/disco/data/Data.ts'\nimport MLabel from '#plots/disco/label/MLabel.ts'\nimport type SnvArc from './SnvArc.ts'\n\nexport default class NonExonicSnvArcsMapper {\n\tprivate sampleName: string\n\tprivate reference: Reference\n\tprivate onePxArcAngle: number\n\tprivate nonExonicInnerRadius: number\n\tprivate nonExonicWidht: number\n\n\tconstructor(nonExonicInnerRadius: number, nonExonicWidht: number, sampleName: string, reference: Reference) {\n\t\tthis.nonExonicInnerRadius = nonExonicInnerRadius\n\t\tthis.nonExonicWidht = nonExonicWidht\n\t\tthis.sampleName = sampleName\n\t\tthis.reference = reference\n\n\t\tthis.onePxArcAngle = 1 / nonExonicInnerRadius\n\t}\n\n\tmap(arcData: Array<Data>): Array<SnvArc> {\n\t\tconst innerRadius = this.nonExonicInnerRadius\n\t\tconst outerRadius = innerRadius + this.nonExonicWidht\n\n\t\tconst arcs: Array<SnvArc> = []\n\n\t\tarcData.forEach(data => {\n\t\t\tconst mLabel = MLabel.getInstance().mlabel ? MLabel.getInstance().mlabel[data.mClass] : undefined\n\n\t\t\tconst startAngle = this.calculateStartAngle(data)\n\t\t\tconst endAngle = this.calculateEndAngle(data)\n\t\t\tif (startAngle === null || endAngle === null) return\n\n\t\t\tconst arc: SnvArc = {\n\t\t\t\tstartAngle: startAngle,\n\t\t\t\tendAngle: endAngle,\n\t\t\t\tinnerRadius: innerRadius,\n\t\t\t\touterRadius: outerRadius,\n\t\t\t\tcolor: mLabel.color,\n\t\t\t\ttext: data.gene,\n\t\t\t\tdataClass: mLabel.label,\n\t\t\t\tmname: data.mname,\n\t\t\t\tchr: data.chr,\n\t\t\t\tpos: data.position,\n\t\t\t\tvafs: data.vafs,\n\t\t\t\tsampleName: [data.sampleName]\n\t\t\t}\n\n\t\t\tarcs.push(arc)\n\t\t})\n\n\t\treturn arcs\n\t}\n\n\tcalculateStartAngle(data: Data) {\n\t\tconst index = this.reference.chromosomesOrder.indexOf(data.chr)\n\t\tif (index === -1) return null\n\t\tconst chromosome = this.reference.chromosomes[index]\n\t\treturn (\n\t\t\tchromosome.startAngle +\n\t\t\t(chromosome.endAngle - chromosome.startAngle) * (Number(data.position) / chromosome.size) -\n\t\t\tthis.onePxArcAngle\n\t\t)\n\t}\n\n\tprivate calculateEndAngle(data: Data) {\n\t\tconst index = this.reference.chromosomesOrder.indexOf(data.chr)\n\t\tconst chromosome = this.reference.chromosomes[index]\n\t\treturn (\n\t\t\tthis.onePxArcAngle +\n\t\t\tchromosome.startAngle +\n\t\t\t(chromosome.endAngle - chromosome.startAngle) * (Number(data.position) / chromosome.size)\n\t\t)\n\t}\n}\n", "export default class GradientColorProvider {\n static provide(value: number): string {\n const clampedValue = Math.min(Math.max(value, 0), 1);\n\n const colorValue = Math.round(clampedValue * 255);\n\n return `rgb(${colorValue}, ${colorValue}, ${colorValue})`;\n }\n}", "import type Reference from '#plots/disco/chromosome/Reference.ts'\nimport type Data from '#plots/disco/data/Data.ts'\nimport type LohArc from './LohArc.ts'\nimport GradientColorProvider from './GradientColorProvider.ts'\n\nexport default class LohArcMapper {\n\tprivate sampleName: string\n\tprivate reference: Reference\n\tprivate lohInnerRadius: number\n\tprivate lohWidth: number\n\n\tconstructor(lohInnerRadius: number, lohWidth: number, sampleName: string, reference: Reference) {\n\t\tthis.lohInnerRadius = lohInnerRadius\n\t\tthis.lohWidth = lohWidth\n\t\tthis.sampleName = sampleName\n\t\tthis.reference = reference\n\t}\n\n\tmap(arcData: Array<Data>): Array<LohArc> {\n\t\tconst arcs: Array<LohArc> = []\n\n\t\tarcData.forEach(data => {\n\t\t\tconst startAngle = this.calculateStartAngle(data)\n\t\t\tconst endAngle = this.calculateEndAngle(data)\n\n\t\t\tif (startAngle === null || endAngle === null) return\n\n\t\t\tconst innerRadius = this.lohInnerRadius\n\t\t\tconst outerRadius = innerRadius + this.lohWidth\n\t\t\tconst color = GradientColorProvider.provide(data.segmean)\n\n\t\t\tconst arc: LohArc = {\n\t\t\t\tstartAngle: startAngle,\n\t\t\t\tendAngle: endAngle,\n\t\t\t\tinnerRadius: innerRadius,\n\t\t\t\touterRadius: outerRadius,\n\t\t\t\tcolor: color,\n\t\t\t\ttext: data.gene,\n\t\t\t\tchr: data.chr,\n\t\t\t\tstart: data.start,\n\t\t\t\tstop: data.stop,\n\t\t\t\tvalue: data.segmean\n\t\t\t}\n\n\t\t\tarcs.push(arc)\n\t\t})\n\n\t\treturn arcs\n\t}\n\n\tprivate calculateStartAngle(data: Data) {\n\t\tconst index = this.reference.chromosomesOrder.indexOf(data.chr)\n\t\tif (index === -1) return null\n\t\tconst chromosome = this.reference.chromosomes[index]\n\t\treturn (\n\t\t\tchromosome.startAngle + (chromosome.endAngle - chromosome.startAngle) * (Number(data.start) / chromosome.size)\n\t\t)\n\t}\n\n\tprivate calculateEndAngle(data: Data) {\n\t\tconst index = this.reference.chromosomesOrder.indexOf(data.chr)\n\t\tconst chromosome = this.reference.chromosomes[index]\n\t\treturn chromosome.startAngle + (chromosome.endAngle - chromosome.startAngle) * (Number(data.stop) / chromosome.size)\n\t}\n}\n", "import type Ring from './Ring.ts'\nimport type Chromosome from '#plots/disco/chromosome/Chromosome.ts'\nimport type Labels from '#plots/disco/label/Labels.ts'\nimport type SnvArc from '#plots/disco/snv/SnvArc.ts'\nimport type CnvArc from '#plots/disco/cnv/CnvArc.ts'\nimport type LohArc from '#plots/disco/loh/LohArc.ts'\nimport type MutationWaterfallPoint from '#plots/disco/waterfall/MutationWaterfallPoint.ts'\n\nexport default class Rings {\n\tlabelsRing: Labels\n\tchromosomesRing: Ring<Chromosome>\n\tnonExonicArcRing?: Ring<SnvArc>\n\tsnvArcRing?: Ring<SnvArc>\n\tcnvArcRing?: Ring<CnvArc>\n\tlohArcRing?: Ring<LohArc>\n\tmutationWaterfallRing?: Ring<MutationWaterfallPoint>\n\n\tconstructor(\n\t\tlabelsRing: Labels,\n\t\tchromosomesRing: Ring<Chromosome>,\n\t\tnonExonicArcRing?: Ring<SnvArc>,\n\t\tsnvArcRing?: Ring<SnvArc>,\n\t\tcnvArcRing?: Ring<CnvArc>,\n\t\tlohArcRing?: Ring<LohArc>,\n\t\tmutationWaterfallRing?: Ring<MutationWaterfallPoint>\n\t) {\n\t\tthis.labelsRing = labelsRing\n\t\tthis.chromosomesRing = chromosomesRing\n\t\tthis.nonExonicArcRing = nonExonicArcRing\n\t\tthis.snvArcRing = snvArcRing\n\t\tthis.cnvArcRing = cnvArcRing\n\t\tthis.lohArcRing = lohArcRing\n\t\tthis.mutationWaterfallRing = mutationWaterfallRing\n\t}\n}\n", "import type Reference from '#plots/disco/chromosome/Reference.ts'\nimport type MutationWaterfallPoint from './MutationWaterfallPoint.ts'\nimport type { MutationWaterfallDatum, MutationWaterfallLogRange } from './MutationWaterfallDatum.ts'\n\nexport default class MutationWaterfallMapper {\n\tprivate innerRadius: number\n\tprivate ringWidth: number\n\tprivate reference: Reference\n\tprivate logRange?: MutationWaterfallLogRange\n\tprivate color: string\n\n\tconstructor(\n\t\tinnerRadius: number,\n\t\tringWidth: number,\n\t\treference: Reference,\n\t\tlogRange?: MutationWaterfallLogRange,\n\t\tcolor = '#4d4d4d'\n\t) {\n\t\tthis.innerRadius = innerRadius\n\t\tthis.ringWidth = ringWidth\n\t\tthis.reference = reference\n\t\tthis.logRange = logRange\n\t\tthis.color = color\n\t}\n\n\tmap(data: Array<MutationWaterfallDatum> = []): Array<MutationWaterfallPoint> {\n\t\tif (!data.length) return []\n\n\t\tconst min = this.logRange?.min ?? 0\n\t\tconst max = this.logRange?.max ?? min + 1\n\t\tconst span = max - min || 1\n\n\t\tconst points: MutationWaterfallPoint[] = []\n\t\tfor (const datum of data) {\n\t\t\tconst chrIndex = this.reference.chromosomesOrder.indexOf(datum.chr)\n\t\t\tif (chrIndex === -1) continue\n\n\t\t\tconst chromosome = this.reference.chromosomes[chrIndex]\n\t\t\tconst chrAngleSpan = chromosome.endAngle - chromosome.startAngle\n\t\t\tconst relPos = chromosome.size > 0 ? datum.position / chromosome.size : 0\n\t\t\tconst angle = chromosome.startAngle + chrAngleSpan * relPos\n\n\t\t\tconst normalized = Math.max(0, Math.min(1, (datum.logDistance - min) / span))\n\t\t\tconst radius = this.innerRadius + this.ringWidth * normalized\n\n\t\t\tpoints.push({\n\t\t\t\tstartAngle: angle,\n\t\t\t\tendAngle: angle,\n\t\t\t\tinnerRadius: radius,\n\t\t\t\touterRadius: radius,\n\t\t\t\ttext: chromosome.text,\n\t\t\t\tcolor: this.color,\n\t\t\t\tchr: datum.chr,\n\t\t\t\tposition: datum.position,\n\t\t\t\tlogDistance: datum.logDistance,\n\t\t\t\tringInnerRadius: this.innerRadius,\n\t\t\t\tringWidth: this.ringWidth,\n\t\t\t\trangeMin: min,\n\t\t\t\trangeMax: max\n\t\t\t})\n\t\t}\n\n\t\treturn points\n\t}\n}\n", "import type Settings from '#plots/disco/Settings.ts'\nimport type Reference from '#plots/disco/chromosome/Reference.ts'\nimport Legend from '#plots/disco/legend/Legend.ts'\nimport FusionMapper from '#plots/disco/fusion/FusionMapper.ts'\nimport LohLegend from '#plots/disco/loh/LohLegend.ts'\nimport ViewModel from './ViewModel.ts'\nimport type DataMapper from '#plots/disco/data/DataMapper.ts'\nimport Ring from '#plots/disco/ring/Ring.ts'\nimport SnvArcsMapper from '#plots/disco/snv/SnvArcsMapper.ts'\nimport type SnvArc from '#plots/disco/snv/SnvArc.ts'\nimport type LohArc from '#plots/disco/loh/LohArc.ts'\nimport CnvArcsMapper from '#plots/disco/cnv/CnvArcsMapper.ts'\nimport type CnvArc from '#plots/disco/cnv/CnvArc.ts'\nimport LabelsMapper from '#plots/disco/label/LabelsMapper.ts'\nimport Labels from '#plots/disco/label/Labels.ts'\nimport NonExonicSnvArcsMapper from '#plots/disco/snv/NonExonicSnvArcsMapper.ts'\nimport LohArcMapper from '#plots/disco/loh/LohArcMapper.ts'\nimport Rings from '#plots/disco/ring/Rings.ts'\nimport { dtcnv, dtsnvindel } from '#shared/common.js'\nimport type { DiscoInteractions } from '../interactions/DiscoInteractions.ts'\nimport MutationWaterfallMapper from '#plots/disco/waterfall/MutationWaterfallMapper.ts'\nimport type MutationWaterfallPoint from '#plots/disco/waterfall/MutationWaterfallPoint.ts'\n\nexport default class ViewModelProvider {\n\tprivate settings: Settings\n\tprivate reference: Reference\n\tprivate sampleName: string\n\tprivate genesetName: string\n\tprivate dataMapper: DataMapper\n\tprivate discoInteractions: DiscoInteractions\n\n\tprivate nonExonicArcRing?: Ring<SnvArc> = undefined\n\tprivate snvArcsMapper?: SnvArcsMapper\n\tprivate snvArcRing?: Ring<SnvArc>\n\tprivate lohArcRing?: Ring<LohArc>\n\tprivate cnvArcsMapper?: CnvArcsMapper\n\tprivate cnvArcRing?: Ring<CnvArc>\n\tprivate mutationWaterfallRing?: Ring<MutationWaterfallPoint>\n\n\tconstructor(\n\t\tsettings: Settings,\n\t\tdataMapper: DataMapper,\n\t\treference: Reference,\n\t\tsampleName: string,\n\t\tgenesetName: string,\n\t\tdiscoInteractions: DiscoInteractions\n\t) {\n\t\tthis.settings = settings\n\t\tthis.dataMapper = dataMapper\n\t\tthis.reference = reference\n\t\tthis.sampleName = sampleName\n\t\tthis.genesetName = genesetName\n\t\tthis.discoInteractions = discoInteractions\n\t}\n\n\tmap(data: Array<any>) {\n\t\tconst dataHolder = this.dataMapper.map(data)\n\n\t\tlet labelsRing: Labels\n\t\tif (this.settings.Disco.showGeneNames) {\n\t\t\tconst labelsMapper = new LabelsMapper(\n\t\t\t\tthis.settings,\n\t\t\t\tthis.sampleName,\n\t\t\t\tthis.reference,\n\t\t\t\tdataHolder.cnvMaxPercentileAbs\n\t\t\t)\n\n\t\t\tconst labelsData = labelsMapper.map(dataHolder.labelData, dataHolder.cnvData)\n\t\t\tlabelsRing = new Labels(this.settings, labelsData, dataHolder.hasPrioritizedGenes)\n\t\t} else {\n\t\t\tlabelsRing = new Labels(this.settings, [], false)\n\t\t}\n\n\t\tconst chromosomesRing = new Ring(\n\t\t\tthis.settings.rings.chromosomeInnerRadius,\n\t\t\tthis.settings.rings.chromosomeWidth,\n\t\t\tthis.reference.chromosomes\n\t\t)\n\n\t\tconst nonExonicSnvArcsMapper = new NonExonicSnvArcsMapper(\n\t\t\tdataHolder.nonExonicInnerRadius,\n\t\t\tthis.settings.rings.nonExonicRingWidth,\n\t\t\tthis.sampleName,\n\t\t\tthis.reference\n\t\t)\n\n\t\tconst nonExonicData = nonExonicSnvArcsMapper.map(dataHolder.nonExonicSnvData)\n\n\t\tif (nonExonicData.length > 0) {\n\t\t\tthis.nonExonicArcRing = new Ring(\n\t\t\t\tdataHolder.nonExonicInnerRadius,\n\t\t\t\tthis.settings.rings.nonExonicRingWidth,\n\t\t\t\tnonExonicData\n\t\t\t)\n\t\t}\n\n\t\tthis.snvArcsMapper = new SnvArcsMapper(\n\t\t\tdataHolder.snvInnerRadius,\n\t\t\tthis.settings.rings.snvRingWidth,\n\t\t\tthis.sampleName,\n\t\t\tthis.reference\n\t\t)\n\t\tconst snvData = this.snvArcsMapper.map(dataHolder.snvRingDataMap)\n\t\tif (snvData.length > 0) {\n\t\t\tthis.snvArcRing = new Ring(dataHolder.snvInnerRadius, this.settings.rings.snvRingWidth, snvData)\n\t\t}\n\n\t\tconst lohMapper = new LohArcMapper(\n\t\t\tdataHolder.lohInnerRadius,\n\t\t\tthis.settings.rings.lohRingWidth,\n\t\t\tthis.sampleName,\n\t\t\tthis.reference\n\t\t)\n\t\tconst lohData = lohMapper.map(dataHolder.lohData)\n\t\tif (lohData.length > 0) {\n\t\t\tthis.lohArcRing = new Ring(dataHolder.lohInnerRadius, this.settings.rings.lohRingWidth, lohData)\n\t\t}\n\n\t\tthis.cnvArcsMapper = new CnvArcsMapper(\n\t\t\tdataHolder.cnvInnerRadius,\n\t\t\tthis.settings.rings.cnvRingWidth,\n\t\t\tthis.settings,\n\t\t\tthis.sampleName,\n\t\t\tthis.reference,\n\t\t\tdataHolder.percentilePositive,\n\t\t\tdataHolder.percentileNegative,\n\t\t\tdataHolder.cappedCnvMaxAbsValue,\n\t\t\tdataHolder.cnvMaxPercentileAbs,\n\t\t\tthis.settings.cnv.unit,\n\t\t\tthis.settings.Disco.cnvRenderingType\n\t\t)\n\n\t\tconst cnvData = this.cnvArcsMapper.map(dataHolder.cnvData)\n\t\tif (cnvData.length > 0) {\n\t\t\tthis.cnvArcRing = new Ring(dataHolder.cnvInnerRadius, this.settings.rings.cnvRingWidth, cnvData)\n\t\t}\n\n\t\tif (\n\t\t\tthis.settings.Disco.mutationWaterfallPlot &&\n\t\t\tdataHolder.mutationWaterfallData?.length &&\n\t\t\tdataHolder.mutationWaterfallInnerRadius !== undefined &&\n\t\t\t//Added this check to prevent TypeScript error \"mutationWaterfallInnerRadius might be undefined\"\n\t\t\t(dataHolder.mutationWaterfallInnerRadius ?? 0) > 0 &&\n\t\t\tdataHolder.mutationWaterfallLogRange\n\t\t) {\n\t\t\tconst mutationWaterfallMapper = new MutationWaterfallMapper(\n\t\t\t\tdataHolder.mutationWaterfallInnerRadius,\n\t\t\t\tthis.settings.rings.mutationWaterfallRingWidth,\n\t\t\t\tthis.reference,\n\t\t\t\tdataHolder.mutationWaterfallLogRange,\n\t\t\t\tthis.settings.Disco.mutationWaterfallColor || '#4d4d4d'\n\t\t\t)\n\n\t\t\tconst waterfallData = mutationWaterfallMapper.map(dataHolder.mutationWaterfallData)\n\t\t\tif (waterfallData.length > 0) {\n\t\t\t\tthis.mutationWaterfallRing = new Ring(\n\t\t\t\t\tdataHolder.mutationWaterfallInnerRadius,\n\t\t\t\t\tthis.settings.rings.mutationWaterfallRingWidth,\n\t\t\t\t\twaterfallData\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\tconst fusionMapper = new FusionMapper(dataHolder.fusionRadius, this.sampleName, this.reference)\n\n\t\tconst fusions = fusionMapper.map(dataHolder.fusionData)\n\n\t\tlet lohLegend: LohLegend | undefined\n\n\t\tif (this.settings.legend.lohLegendEnabled && dataHolder.lohData.length) {\n\t\t\tlohLegend = new LohLegend(dataHolder.lohData.length)\n\t\t}\n\n\t\tconst fusionLegendCounts = fusions.reduce(\n\t\t\t(counts, fusion) => {\n\t\t\t\tif (\n\t\t\t\t\tfusion.target &&\n\t\t\t\t\tfusion.source.positionInChromosome.chromosome == fusion.target.positionInChromosome.chromosome\n\t\t\t\t)\n\t\t\t\t\tcounts.intrachromosomal++\n\t\t\t\telse counts.interchromosomal++\n\t\t\t\treturn counts\n\t\t\t},\n\t\t\t{ interchromosomal: 0, intrachromosomal: 0 }\n\t\t)\n\n\t\tconst legend = new Legend(\n\t\t\tthis.settings.legend.snvTitle,\n\t\t\tthis.settings.legend.cnvTitle,\n\t\t\tthis.settings.legend.lohTitle,\n\t\t\tthis.settings.legend.fusionTitle,\n\t\t\tthis.settings.Disco.cnvPercentile,\n\t\t\tthis.settings.Disco.cnvCutoffMode,\n\t\t\tthis.snvArcsMapper ? this.snvArcsMapper.snvClassMap : new Map(),\n\t\t\tthis.cnvArcsMapper ? this.cnvArcsMapper.cnvClassMap : new Map(),\n\t\t\tthis.settings.Disco.cnvRenderingType,\n\t\t\tfusions.length > 0,\n\t\t\tthis.discoInteractions,\n\t\t\tlohLegend,\n\t\t\tthis.settings.Disco.mutationWaterfallPlot && this.mutationWaterfallRing\n\t\t\t\t? {\n\t\t\t\t\t\tcolor: this.settings.Disco.mutationWaterfallColor || '#4d4d4d',\n\t\t\t\t\t\tonColorChange: this.discoInteractions.onMutationWaterfallColorChange\n\t\t\t\t }\n\t\t\t\t: undefined,\n\t\t\tfusionLegendCounts,\n\t\t\tdataHolder.cnvData.filter(event => event.dt == dtcnv).length\n\t\t)\n\n\t\tconst rings = new Rings(\n\t\t\tlabelsRing,\n\t\t\tchromosomesRing,\n\t\t\tthis.nonExonicArcRing,\n\t\t\tthis.snvArcRing,\n\t\t\tthis.cnvArcRing,\n\t\t\tthis.lohArcRing,\n\t\t\tthis.mutationWaterfallRing\n\t\t)\n\n\t\treturn new ViewModel(\n\t\t\tthis.settings,\n\t\t\trings,\n\t\t\tlegend,\n\t\t\tfusions,\n\t\t\tdataHolder,\n\t\t\tthis.genesetName,\n\t\t\tdata.filter(i => i.dt == dtsnvindel).length\n\t\t)\n\t}\n}\n", "import type ViewModel from '#plots/disco/viewmodel/ViewModel.ts'\nimport Reference from '#plots/disco/chromosome/Reference.ts'\nimport DataMapper from '#plots/disco/data/DataMapper.ts'\nimport type Settings from '#plots/disco/Settings.ts'\nimport ViewModelProvider from './ViewModelProvider.ts'\nimport type { DiscoInteractions } from '../interactions/DiscoInteractions.ts'\nimport { dtsnvindel, dtcnv, dtloh, dtitd } from '#shared/common.js'\n\nexport class ViewModelMapper {\n\tstatic snvClassLayer = {\n\t\tM: 'exonic',\n\t\tE: 'exonic',\n\t\tF: 'exonic',\n\t\tN: 'exonic',\n\t\tS: 'exonic',\n\t\tD: 'exonic',\n\t\tI: 'exonic',\n\t\tP: 'exonic',\n\t\tL: 'exonic',\n\t\tUtr3: 'exonic',\n\t\tUtr5: 'exonic',\n\t\tProteinAltering: 'exonic',\n\t\tmnv: 'non-exonic',\n\t\tITD: 'non-exonic',\n\t\tinsertion: 'non-exonic',\n\t\tdeletion: 'non-exonic',\n\t\tIntron: 'non-exonic',\n\t\tX: 'non-exonic',\n\t\tnoncoding: 'non-exonic'\n\t}\n\n\tprivate settings: Settings\n\tprivate discoInteractions: DiscoInteractions\n\n\tconstructor(settings: Settings, discoInteractions: DiscoInteractions) {\n\t\t// the settings object retrieved is frozen. created\n\t\t// a mutable copy so ring dimensions can be adjusted at runtime\n\t\tthis.settings = JSON.parse(JSON.stringify(settings))\n\t\tthis.discoInteractions = discoInteractions\n\t}\n\n\tprivate applyRadius() {\n\t\tconst radius = this.settings.Disco.radius\n\t\tif (!radius) return\n\n\t\tconst scale = radius / this.settings.rings.labelLinesInnerRadius\n\n\t\tthis.settings.rings.labelLinesInnerRadius *= scale\n\t\tthis.settings.rings.labelsToLinesDistance *= scale\n\t\tthis.settings.rings.chromosomeInnerRadius *= scale\n\t}\n\n\tstatic computeDynamicRadius(data: Array<any>): number {\n\t\tlet ringCount = 0\n\t\tif (data.some(d => d.dt == dtsnvindel)) ringCount++\n\t\tif (data.some(d => d.dt == dtcnv || d.dt == dtitd)) ringCount++\n\t\tif (data.some(d => d.dt == dtloh)) ringCount++\n\n\t\tif (ringCount <= 1) return 200\n\t\tif (ringCount == 2) return 250\n\t\treturn 300\n\t}\n\n\tmap(opts: any): ViewModel {\n\t\tconst chrSizes = opts.args.genome.majorchr\n\n\t\t/** Remove hidden chromosomes */\n\t\tconst chromosomesOverride = {}\n\t\tfor (const chr of Object.keys(chrSizes)) {\n\t\t\tif (!this.settings.Disco.hiddenChromosomes.includes(chr)) {\n\t\t\t\tchromosomesOverride[chr] = chrSizes[chr]\n\t\t\t}\n\t\t}\n\n\t\tconst sampleName = opts.args.sampleName\n\n\t\tconst genome = opts.args.genome\n\n\t\tconst prioritizedGenes = genome?.geneset?.[0] ? genome.geneset[0].lst : []\n\n\t\tconst genesetName = genome?.geneset?.[0] ? genome.geneset[0].name : ''\n\n\t\tconst data: Array<any> = opts.args.data\n\n\t\tif (this.settings.Disco.autoRadius) {\n\t\t\tthis.settings.Disco.radius = ViewModelMapper.computeDynamicRadius(data)\n\t\t}\n\n\t\tthis.applyRadius()\n\n\t\tconst reference = new Reference(this.settings, chrSizes, chromosomesOverride)\n\n\t\tconst dataMapper = new DataMapper(this.settings, reference, sampleName, prioritizedGenes)\n\n\t\treturn new ViewModelProvider(\n\t\t\tthis.settings,\n\t\t\tdataMapper,\n\t\t\treference,\n\t\t\tsampleName,\n\t\t\tgenesetName,\n\t\t\tthis.discoInteractions\n\t\t).map(data)\n\t}\n}\n", "import type Legend from './Legend.ts'\nimport { CnvType } from '#plots/disco/cnv/CnvType.ts'\nimport { FusionLegend } from '#plots/disco/fusion/FusionLegend.ts'\nimport { CnvRenderingType } from '#plots/disco/cnv/CnvRenderingType.ts'\nimport { scaleLinear } from 'd3-scale'\n\nexport default class LegendJSONMapper {\n\tprivate cappedCnvMaxAbsValue: number\n\n\tconstructor(cappedCnvMaxAbsValue: number) {\n\t\tthis.cappedCnvMaxAbsValue = cappedCnvMaxAbsValue\n\t}\n\n\tmap(legend: Legend) {\n\t\tconst legendJSON: Array<any> = []\n\n\t\tlet order = 0\n\t\tif (legend.snvClassMap) {\n\t\t\tthis.mapSnv(legend, legendJSON, order++)\n\t\t}\n\n\t\tif (legend.cnvCount > 0 && legend.cnvRenderingType == CnvRenderingType.heatmap) {\n\t\t\tthis.mapCnvHeatmap(legend, legendJSON, order++)\n\t\t} else if (legend.cnvCount > 0 && legend.cnvRenderingType == CnvRenderingType.bar) {\n\t\t\tif (legend.cnvClassMap) {\n\t\t\t\tthis.mapCnvBar(legend, legendJSON, order++)\n\t\t\t}\n\t\t}\n\n\t\tif (legend.cnvClassMap.has(CnvType.ITD)) {\n\t\t\tthis.mapItd(legend, legendJSON, order++)\n\t\t}\n\n\t\tif (legend.lohLegend) {\n\t\t\tthis.mapLoh(legend, legendJSON, order++)\n\t\t}\n\n\t\tif (legend.fusionLegend) {\n\t\t\tthis.mapFusion(legend, legendJSON, order++)\n\t\t}\n\n\t\tif (legend.mutationWaterfallLegend) {\n\t\t\tthis.mapMutationWaterfall(legend, legendJSON, order++)\n\t\t}\n\n\t\treturn legendJSON\n\t}\n\n\tprivate mapSnv(legend: Legend, legendJSON: Array<any>, order: number) {\n\t\tconst snvItems: Array<any> = []\n\n\t\tlet snvOrder = 0\n\n\t\tfor (const [snvKey, snvLegendElement] of legend.snvClassMap) {\n\t\t\tsnvItems.push({\n\t\t\t\ttermid: legend.snvTitle,\n\t\t\t\tkey: snvKey,\n\t\t\t\ttext: `${snvLegendElement.snvType} (${snvLegendElement.count})`,\n\t\t\t\tcolor: snvLegendElement.color,\n\t\t\t\torder: snvOrder++\n\t\t\t})\n\t\t}\n\n\t\tlegendJSON.push({\n\t\t\tname: legend.snvTitle,\n\t\t\torder: order,\n\t\t\titems: snvItems\n\t\t})\n\t}\n\n\tprivate mapCnvBar(legend: Legend, legendJSON: Array<any>, order: number) {\n\t\tif (!legend.cnvClassMap) return\n\t\tconst gain = legend.cnvClassMap.get(CnvType.Gain)\n\t\tconst loss = legend.cnvClassMap.get(CnvType.Loss)\n\t\tconst cap = legend.cnvClassMap.get(CnvType.Cap)\n\n\t\tif (gain && loss && cap) {\n\t\t\tlet cnvOrder = 0\n\t\t\tconst cnvItems: Array<any> = []\n\t\t\tif (gain.value > 0) {\n\t\t\t\tcnvItems.push({\n\t\t\t\t\ttermid: legend.cnvTitle,\n\t\t\t\t\tkey: CnvType.Gain,\n\t\t\t\t\ttext: `Max: ${gain.value}`,\n\t\t\t\t\tcolor: gain.color,\n\t\t\t\t\torder: cnvOrder++\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (loss.value < 0) {\n\t\t\t\tcnvItems.push({\n\t\t\t\t\ttermid: legend.cnvTitle,\n\t\t\t\t\tkey: CnvType.Loss,\n\t\t\t\t\ttext: `Min: ${loss.value}`,\n\t\t\t\t\tcolor: loss.color,\n\t\t\t\t\torder: cnvOrder++\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tcnvItems.push({\n\t\t\t\ttermid: legend.cnvTitle,\n\t\t\t\tkey: CnvType.Cap,\n\t\t\t\ttext: `Capping: ${cap.value}`,\n\t\t\t\tcolor: cap.color,\n\t\t\t\torder: cnvOrder++\n\t\t\t\t// ,\n\t\t\t\t// onClickCallback: this.onClickCallback\n\t\t\t})\n\t\t\tlegendJSON.push({\n\t\t\t\tname: legend.cnvTitle,\n\t\t\t\tid: 'sjpp-disco-cnv-legend',\n\t\t\t\torder: order,\n\t\t\t\titems: cnvItems\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate mapCnvHeatmap(legend: Legend, legendJSON: Array<any>, order: number) {\n\t\tif (!legend.cnvClassMap) return\n\t\tconst gain = legend.cnvClassMap.get(CnvType.Gain)\n\t\tconst loss = legend.cnvClassMap.get(CnvType.Loss)\n\t\tconst cap = legend.cnvClassMap.get(CnvType.Cap)\n\n\t\tif (gain && loss && cap) {\n\t\t\tlet cnvOrder = 0\n\n\t\t\tconst cnvItems: Array<any> = []\n\t\t\tconst base = {\n\t\t\t\ttermid: legend.cnvTitle,\n\t\t\t\twidth: 100,\n\t\t\t\torder: cnvOrder++,\n\t\t\t\tisLegendItem: true,\n\t\t\t\tdt: 4\n\t\t\t}\n\t\t\tif (gain.value > 0 && loss.value < 0) {\n\t\t\t\t// Use a symmetric scale for the heatmap\n\t\t\t\t// Matches the logic for coloring the arcs in the heatmap\n\t\t\t\t// in CnvHeatmapRenderer.ts\n\t\t\t\tconst maxValue = Math.max(Math.abs(loss.value), gain.value)\n\t\t\t\tconst domain = [-maxValue, 0, maxValue]\n\t\t\t\tcnvItems.push(\n\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: CnvType.LossGain,\n\t\t\t\t\t\t\tdomain,\n\t\t\t\t\t\t\tscale: scaleLinear([-1, 0, 1], [loss.color, 'white', gain.color]),\n\t\t\t\t\t\t\tlabels: { left: 'Loss', right: 'Gain' },\n\t\t\t\t\t\t\tnumericInputs: {\n\t\t\t\t\t\t\t\tcutoffMode: legend.cnvCutoffMode,\n\t\t\t\t\t\t\t\tdefaultPercentile: legend.cnvPercentile,\n\t\t\t\t\t\t\t\tcallback: obj => legend.discoInteractions.colorScaleNumericInputsCallback(obj)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\tbase\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t} else {\n\t\t\t\tif (gain.value > 0) {\n\t\t\t\t\tcnvItems.push(\n\t\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkey: CnvType.Gain,\n\t\t\t\t\t\t\t\ttext: 'Copy number gain',\n\t\t\t\t\t\t\t\tdomain: [0, gain.value],\n\t\t\t\t\t\t\t\tscale: scaleLinear([0, 1], ['white', gain.color])\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbase\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tif (loss.value < 0) {\n\t\t\t\t\tcnvItems.push(\n\t\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tkey: CnvType.Loss,\n\t\t\t\t\t\t\t\ttext: 'Copy number loss',\n\t\t\t\t\t\t\t\tdomain: [loss.value, 0],\n\t\t\t\t\t\t\t\tscale: scaleLinear([0, 1], [loss.color, 'white'])\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tbase\n\t\t\t\t\t\t)\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t\tlegendJSON.push({\n\t\t\t\tname: legend.cnvTitle,\n\t\t\t\torder: order,\n\t\t\t\tid: 'sjpp-disco-cnv-legend',\n\t\t\t\titems: cnvItems\n\t\t\t})\n\t\t}\n\t}\n\n\tprivate mapItd(legend: Legend, legendJSON: Array<any>, order: number) {\n\t\tconst itd = legend.cnvClassMap.get(CnvType.ITD)\n\t\tif (!itd) return\n\t\tlegendJSON.push({\n\t\t\tname: 'ITD',\n\t\t\torder,\n\t\t\titems: [\n\t\t\t\t{\n\t\t\t\t\ttermid: 'ITD',\n\t\t\t\t\tkey: CnvType.ITD,\n\t\t\t\t\ttext: `ITD (${itd.value})`,\n\t\t\t\t\tcolor: itd.color,\n\t\t\t\t\torder: 0\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t}\n\n\tprivate mapLoh(legend: Legend, legendJSON: Array<any>, order: number) {\n\t\tif (!legend.lohLegend) return\n\n\t\tlegendJSON.push({\n\t\t\tname: legend.lohTitle,\n\t\t\torder: order,\n\t\t\titems: [\n\t\t\t\t{\n\t\t\t\t\ttermid: legend.lohTitle,\n\t\t\t\t\tkey: 'count',\n\t\t\t\t\ttext: `LOH (${legend.lohLegend.count})`,\n\t\t\t\t\tskipIcon: true,\n\t\t\t\t\torder: 0\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t}\n\n\tprivate mapFusion(legend: Legend, legendJSON: Array<any>, order: number) {\n\t\tconst fusionItems: Array<any> = []\n\n\t\tfusionItems.push({\n\t\t\ttermid: legend.fusionTitle,\n\t\t\tkey: FusionLegend.Interchromosomal,\n\t\t\ttext: `Interchromosomal (${legend.fusionLegendCounts.interchromosomal})`,\n\t\t\tcolor: FusionLegend.Interchromosomal.valueOf(),\n\t\t\torder: 0\n\t\t})\n\n\t\tfusionItems.push({\n\t\t\ttermid: legend.fusionTitle,\n\t\t\tkey: FusionLegend.Intrachromosomal,\n\t\t\ttext: `Intrachromosomal (${legend.fusionLegendCounts.intrachromosomal})`,\n\t\t\tcolor: FusionLegend.Intrachromosomal.valueOf(),\n\t\t\torder: 1\n\t\t})\n\n\t\tlegendJSON.push({\n\t\t\tname: legend.fusionTitle,\n\t\t\torder: order,\n\t\t\titems: fusionItems\n\t\t})\n\t}\n\n\tprivate mapMutationWaterfall(legend: Legend, legendJSON: Array<any>, order: number) {\n\t\tif (!legend.mutationWaterfallLegend) return\n\n\t\tconst waterfallItems: Array<any> = []\n\n\t\twaterfallItems.push({\n\t\t\ttermid: 'Mutation Waterfall Plot',\n\t\t\tkey: 'mutation-waterfall-color',\n\t\t\ttext: 'Dot color',\n\t\t\tcolor: legend.mutationWaterfallLegend.color,\n\t\t\torder: 0,\n\t\t\tcolorPicker: true,\n\t\t\tinputWidth: 28,\n\t\t\twidth: 0,\n\t\t\tonColorChange: legend.mutationWaterfallLegend.onColorChange\n\t\t})\n\n\t\twaterfallItems.push({\n\t\t\ttermid: 'Mutation Waterfall Plot',\n\t\t\tkey: 'mutation-waterfall-axis',\n\t\t\ttext: 'Axis: log10 intermutation distance',\n\t\t\torder: 1,\n\t\t\tskipIcon: true,\n\t\t\twidth: 0\n\t\t})\n\n\t\tlegendJSON.push({\n\t\t\tname: 'Mutation Waterfall Plot',\n\t\t\torder: order,\n\t\t\titems: waterfallItems\n\t\t})\n\t}\n}\n", "import type { SvgG } from '../../../types/d3'\nimport { Menu, renderTable } from '#dom'\nimport type { TableCell, TableColumn } from '#dom'\n\nexport type AlternativeCnvSet = {\n\tnameHtml?: string\n\tname?: string\n\tinuse?: boolean\n\tmlst: any[]\n\tattrs?: { [key: string]: string }\n}\n\nfunction parseSetLabel(set: AlternativeCnvSet, index: number) {\n\tlet text = set.name || `Set ${index + 1}`\n\tlet href: string | undefined\n\tlet target = '_blank'\n\n\tif (set.nameHtml) {\n\t\tconst parser = new DOMParser()\n\t\tconst doc = parser.parseFromString(set.nameHtml, 'text/html')\n\t\tconst anchor = doc.querySelector('a')\n\t\tif (anchor) {\n\t\t\thref = anchor.getAttribute('href') || undefined\n\t\t\ttarget = anchor.getAttribute('target') || '_blank'\n\t\t\ttext = anchor.textContent?.trim() || text\n\t\t} else {\n\t\t\ttext = doc.body.textContent?.trim() || text\n\t\t}\n\t}\n\n\treturn { text, href, target }\n}\n\n/**\n * Render the CNV source label and a control inside the legend. Clicking the\n * control will display a menu with a table to choose among the\n * available CNV data sets.\n *\n * @param legendG - legend <g> element to append the label and control to\n * @param datasets - list of alternative CNV data sets from the server\n * @param fontSize - font size used in the legend\n * @param onChange - callback fired with the index of the selected data set\n */\nexport function renderCnvSourceLegend(\n\tlegendG: SvgG,\n\tdatasets: AlternativeCnvSet[],\n\tfontSize: number,\n\tonChange: (index: number) => void\n) {\n\tif (!legendG || legendG.empty()) throw new Error('legendG is required')\n\tif (!datasets || datasets.length === 0) throw new Error('at least one dataset is required')\n\n\tlegendG.select('g.sjpp-cnv-source').remove()\n\n\tconst gBBox = legendG.node()!.getBBox()\n\tconst cnvSrcWrapper = legendG\n\t\t.append('g')\n\t\t.attr('class', 'sjpp-cnv-source')\n\t\t.attr('transform', `translate(${gBBox.width},${gBBox.y + fontSize})`)\n\n\tconst btnPaddingX = Math.round(fontSize * 0.8)\n\tconst btnHgt = Math.round(fontSize * 1.8)\n\n\tconst btnWrapper = cnvSrcWrapper\n\t\t.append('g')\n\t\t.attr('transform', `translate(${fontSize},${-btnHgt / 2})`)\n\t\t.style('cursor', 'pointer')\n\t\t.on('click', function (event: MouseEvent) {\n\t\t\tevent.stopPropagation()\n\t\t\tshowCnvMenu(this)\n\t\t})\n\n\tconst btnText = btnWrapper\n\t\t.append('text')\n\t\t.attr('x', 0)\n\t\t.attr('y', btnHgt / 2)\n\t\t.attr('font-size', fontSize)\n\t\t.attr('text-anchor', 'start')\n\t\t.attr('dominant-baseline', 'middle')\n\t\t.text('Select source \u25B2'.toUpperCase())\n\n\tconst textW = btnText.node() ? Math.ceil(btnText.node()!.getBBox().width) : 0\n\tconst btnWdt = textW + btnPaddingX * 2\n\n\tbtnWrapper\n\t\t.insert('rect', ':first-child')\n\t\t.attr('width', btnWdt)\n\t\t.attr('height', btnHgt)\n\t\t.attr('rx', 10)\n\t\t.attr('ry', 10)\n\t\t.style('fill', '#f2f2f2')\n\n\tbtnText.attr('x', btnWdt / 2).attr('text-anchor', 'middle')\n\n\tconst cnvMenu = new Menu({\n\t\tonHide: () => {\n\t\t\tbtnText.text('Select source \u25B2'.toUpperCase())\n\t\t}\n\t})\n\n\tfunction showCnvMenu(dom: Element) {\n\t\tbtnText.text('Select source \u25BC'.toUpperCase())\n\t\tcnvMenu.clear().showunder(dom)\n\n\t\tcnvMenu.d.append('div').text('Choose data source for CNV:').style('margin', '5px 5px 0 5px')\n\n\t\tconst tableHolder = cnvMenu.d.append('div').style('padding', '5px')\n\n\t\tconst { columns, rows } = buildTableData(datasets)\n\t\tconst [, activeIndex] = getActiveDataset(datasets)\n\n\t\trenderTable({\n\t\t\tcolumns,\n\t\t\trows,\n\t\t\tdiv: tableHolder,\n\t\t\tsingleMode: true,\n\t\t\tmaxWidth: '70vw',\n\t\t\tmaxHeight: '60vh',\n\t\t\tselectedRows: [activeIndex],\n\t\t\theader: { allowSort: false },\n\t\t\tnoButtonCallback: (rowIndex, node) => {\n\t\t\t\tconst inputIndex = Number(node?.value)\n\t\t\t\tconst selectedIndex = Number.isNaN(inputIndex) ? rowIndex : inputIndex\n\t\t\t\tif (!Number.isNaN(selectedIndex)) onChange(selectedIndex)\n\t\t\t\tcnvMenu.hide()\n\t\t\t}\n\t\t})\n\t}\n}\n\nfunction getActiveDataset(datasets) {\n\tlet currentIndex = datasets.findIndex(d => d.inuse)\n\tif (currentIndex == -1) currentIndex = 0\n\treturn [datasets[currentIndex], currentIndex]\n}\n\nfunction buildTableData(datasets: AlternativeCnvSet[]): { columns: TableColumn[]; rows: TableCell[][] } {\n\tconst attrKeys: string[] = []\n\tfor (const set of datasets) {\n\t\tif (!set.attrs) continue\n\t\tfor (const key of Object.keys(set.attrs)) {\n\t\t\tif (!attrKeys.includes(key)) attrKeys.push(key)\n\t\t}\n\t}\n\n\tconst columns: TableColumn[] = [{ label: 'Source' }]\n\tfor (const key of attrKeys) columns.push({ label: key })\n\n\tconst rows: TableCell[][] = datasets.map((set, index) => {\n\t\tconst sourceInfo = parseSetLabel(set, index)\n\t\tconst cells: TableCell[] = []\n\n\t\tif (set.nameHtml) cells.push({ html: set.nameHtml })\n\t\telse if (sourceInfo.href) cells.push({ value: sourceInfo.text, url: sourceInfo.href })\n\t\telse cells.push({ value: sourceInfo.text })\n\n\t\tfor (const key of attrKeys) {\n\t\t\tconst value = set.attrs?.[key]\n\t\t\tcells.push({ value: value ?? '' })\n\t\t}\n\n\t\treturn cells\n\t})\n\n\treturn { columns, rows }\n}\n", "import type Legend from './Legend.ts'\nimport { svgLegend, getMaxLabelWidth } from '#dom'\nimport LegendJSONMapper from './LegendJSONMapper.ts'\nimport { dtcnv } from '#shared/common.js'\nimport { renderCnvSourceLegend, type AlternativeCnvSet } from '../cnv/renderCnvSourceLegend.ts'\nimport type ViewModel from '../viewmodel/ViewModel.ts'\n\nexport default class LegendRenderer {\n\tprivate legendJSONMapper: LegendJSONMapper\n\tprivate fontSize: number\n\n\tconstructor(cappedCnvMaxAbsValue = 0, fontSize: number) {\n\t\tthis.fontSize = fontSize\n\t\tthis.legendJSONMapper = new LegendJSONMapper(cappedCnvMaxAbsValue)\n\t}\n\n\trender(\n\t\tholder: any,\n\t\tlegend: Legend,\n\t\txOffset: number,\n\t\tsvgw: number,\n\t\tsvgh: number,\n\t\tviewModel: ViewModel,\n\t\tonCnvSourceSelect: (index: number) => void\n\t) {\n\t\tconst svgLegendRenderer = svgLegend({\n\t\t\tholder: holder.append('g').attr('data-testid', 'sjpp_disco_plot_legend'),\n\t\t\trectFillFxn: d => d.color,\n\t\t\ticonStroke: '#aaa'\n\t\t})\n\t\tconst data = this.legendJSONMapper.map(legend)\n\n\t\tconst legendTitles = data.map(d => d.name.trim())\n\t\tconst maxLabelWidth = getMaxLabelWidth(holder, legendTitles)\n\n\t\tconst d = {\n\t\t\txOffset: maxLabelWidth + xOffset\n\t\t}\n\n\t\tsvgLegendRenderer(data, {\n\t\t\tsettings: Object.assign(\n\t\t\t\t{},\n\t\t\t\t{\n\t\t\t\t\tsvgw: svgw,\n\t\t\t\t\tsvgh: svgh,\n\t\t\t\t\tdimensions: d,\n\t\t\t\t\tfontsize: this.fontSize\n\t\t\t\t}\n\t\t\t)\n\t\t})\n\t\tconst altCnv: AlternativeCnvSet[] = viewModel.appState.args.alternativeDataByDt?.[dtcnv]\n\n\t\tif (altCnv && altCnv.length > 0) {\n\t\t\tconst legendG = holder.select('g[data-testid=\"sjpp_disco_plot_legend\"]')\n\t\t\tconst cnvLegendG = legendG.select('#sjpp-disco-cnv-legend')\n\n\t\t\tif (!legendG.empty()) {\n\t\t\t\t/** This shouldn't be necessary. It's reasonable to assume\n\t\t\t\t * a cnv legend group will exist if there is a cnvClassMap.*/\n\t\t\t\tconst add2G = cnvLegendG.empty() ? legendG : cnvLegendG\n\t\t\t\trenderCnvSourceLegend(add2G, altCnv, this.fontSize, onCnvSourceSelect)\n\t\t\t}\n\t\t}\n\t}\n}\n", "import * as d3 from 'd3'\nimport type IRenderer from '#plots/disco/IRenderer.ts'\nimport type Chromosome from './Chromosome.ts'\nimport MenuProvider from '#plots/disco/menu/MenuProvider.ts'\nimport { bplen } from '#shared/common.js'\n\nexport default class ChromosomesRenderer implements IRenderer {\n private padAngle: number\n private innerRadius: number\n private outerRadius: number\n private fontSize: number\n\n constructor(\n padAngle: number,\n innerRadius: number,\n outerRadius: number,\n fontSize: number\n ) {\n this.padAngle = padAngle\n this.innerRadius = innerRadius\n this.outerRadius = outerRadius\n this.fontSize = fontSize\n }\n\n\trender(holder: any, elements: Array<Chromosome>) {\n\t\tconst pie = d3\n\t\t\t.pie<Chromosome>()\n\t\t\t.padAngle(this.padAngle)\n\t\t\t.value(d => d.size)\n\t\t\t.sort(null)\n\n\t\tconst arcData = pie(elements)\n\n\t\tconst arc = d3.arc<d3.PieArcDatum<number>>().innerRadius(this.innerRadius).outerRadius(this.outerRadius)\n\n\t\tconst arcs = holder.append('g').attr('data-testid', 'sjpp_chromosomes_arc_group')\n\n\t\tconst menu = MenuProvider.create()\n\n\t\tarcs\n\t\t\t.selectAll('path')\n\t\t\t.data(arcData)\n\t\t\t.enter()\n\t\t\t.append('path')\n\t\t\t.attr('d', arc)\n\t\t\t.attr('fill', 'black')\n\t\t\t.on('mousemove', (event: MouseEvent, d: d3.PieArcDatum<Chromosome>) => {\n\t\t\t\t// Get mouse pointer coordinates relative to the arcs group\n\t\t\t\tconst [x, y] = d3.pointer(event, arcs.node())\n\t\t\t\t// Convert Cartesian coordinates to polar angle (in radians)\n\t\t\t\tlet angle = Math.atan2(y, x) + Math.PI / 2\n\t\t\t\t// Normalize angle to be within [0, 2\u03C0]\n\t\t\t\tif (angle < 0) angle += 2 * Math.PI\n\t\t\t\t// Compute how far along this arc segment the angle falls (fraction between 0 and 1)\n\t\t\t\tconst frac = Math.max(0, Math.min(1, (angle - d.data.startAngle) / (d.data.endAngle - d.data.startAngle)))\n\t\t\t\t// Interpolate position along chromosome based on angle\n\t\t\t\tconst pos = Math.round(frac * d.data.size)\n\t\t\t\t// Update tooltip text with chromosome name and position (formatted with commas)\n\t\t\t\tmenu.d.html(`<span style=\"font-size:.8em\">chr${d.data.text}</span> ${bplen(pos)}`).style('padding', '5px')\n\t\t\t\t// Display tooltip at cursor position\n\t\t\t\tmenu.show(event.x, event.y)\n\t\t\t})\n\t\t\t.on('mouseenter', (event: MouseEvent) => {\n\t\t\t\t// When hovering over an arc, highlight it with an orange border\n\t\t\t\td3.select(event.currentTarget as SVGElement)\n\t\t\t\t\t.attr('stroke', 'orange')\n\t\t\t\t\t.attr('stroke-width', 1)\n\t\t\t})\n\t\t\t.on('mouseleave', event => {\n\t\t\t\t// Remove highlight and hide tooltip when mouse leaves the arc\n\t\t\t\td3.select(event.currentTarget as SVGElement)\n\t\t\t\t\t.attr('stroke', null)\n\t\t\t\t\t.attr('stroke-width', null)\n\t\t\t\tmenu.hide()\n\t\t\t})\n\n\t\tarcs\n\t\t\t.selectAll('text')\n\t\t\t.data(arcData)\n\t\t\t.enter()\n\t\t\t.append('text')\n\t\t\t// TODO extract all value and functions to Chromosomes\n\t\t\t.attr('transform', (d: d3.PieArcDatum<Chromosome>) => {\n\t\t\t\treturn `translate(${arc.centroid(<any>d)}) rotate(${(d.data.angle * 180) / Math.PI - 90})${\n\t\t\t\t\td.data.angle > Math.PI ? 'rotate(180)' : ''\n\t\t\t\t}`\n\t\t\t})\n .attr('dy', '0.35em')\n .attr('text-anchor', 'middle')\n .text((d: d3.PieArcDatum<Chromosome>) => d.data.text)\n .style('fill', 'white')\n .style('font-size', `${this.fontSize}px`)\n .style('padding', '500px')\n //prevents chromosome number from interfering with hover\n .style('pointer-events', 'none')\n .style('padding', '500px')\n\t}\n}\n", "import type IRenderer from '#plots/disco/IRenderer.ts'\nimport { select } from 'd3-selection'\nimport { line } from 'd3-shape'\nimport type Label from './Label.ts'\nimport MenuProvider from '#plots/disco/menu/MenuProvider.ts'\nimport type MutationTooltip from '#plots/disco/label/MutationTooltip.ts'\nimport type FusionTooltip from '#plots/disco/fusion/FusionTooltip.ts'\nimport { table2col } from '#dom/table2col'\nimport type CnvTooltip from '#plots/disco/cnv/CnvTooltip.ts'\nimport { appendVafBars, hasAnyValidVafEntry } from '#plots/disco/snv/vafTooltip.ts'\nimport { dtitd, dtloh } from '#shared/common.js'\nimport { dofetch3 } from '#common/dofetch'\n\ntype GeneCoordinates = {\n\tchr: string\n\tstart: number\n\tstop: number\n}\n\ntype GeneLookup = (gene: string, genome: string) => Promise<any>\n\nexport default class LabelsRenderer implements IRenderer {\n\tprivate animationDuration: number\n\tprivate fontSize: number\n\tprivate geneClickListener: (gene: string, mnames: Array<string>) => void\n\tprivate genomeName?: string\n\tprivate intervalEvents: Array<CnvTooltip>\n\tprivate geneLookup: GeneLookup\n\tprivate geneCoordinatesCache = new Map<string, Promise<GeneCoordinates | undefined>>()\n\tprivate hoverRequestId = 0\n\n\tconstructor(\n\t\tanimationDuration: number,\n\t\tfontSize: number,\n\t\tgeneClickListener: (gene: string, mnames: Array<string>) => void,\n\t\tgenomeName?: string,\n\t\tintervalEvents: Array<CnvTooltip> = [],\n\t\tgeneLookup: GeneLookup = async (gene, genome) =>\n\t\t\tawait dofetch3('genelookup', { body: { deep: 1, input: gene, genome } })\n\t) {\n\t\tthis.animationDuration = animationDuration\n\t\tthis.fontSize = fontSize\n\t\tthis.geneClickListener = geneClickListener\n\t\tthis.genomeName = genomeName\n\t\tthis.intervalEvents = intervalEvents\n\t\tthis.geneLookup = geneLookup\n\t}\n\n\trender(holder: any, elements: Array<Label>, collisions?: Array<Label>) {\n\t\tconst labelsG = holder.append('g')\n\n\t\tconst lineFunction = line<{ x: number; y: number }>()\n\t\t\t.x(point => point.x)\n\t\t\t.y(point => point.y)\n\n\t\tconst menu = MenuProvider.create()\n\n\t\tlabelsG\n\t\t\t.selectAll('.group')\n\t\t\t.data(elements)\n\t\t\t.enter()\n\t\t\t.append('g')\n\t\t\t.attr('class', 'group')\n\t\t\t.each((label: Label, i: number, nodes: HTMLDivElement[]) => {\n\t\t\t\tconst g = select(nodes[i])\n\t\t\t\tg.append('text')\n\t\t\t\t\t.attr('class', 'chord-text')\n\t\t\t\t\t.attr('data-testid', 'sjpp-disco-genelabel')\n\t\t\t\t\t.attr('dy', '.35em')\n\t\t\t\t\t.attr('transform', label.transform)\n\t\t\t\t\t.style('text-anchor', label.textAnchor)\n\t\t\t\t\t.style('font-size', `${this.fontSize}px`)\n\t\t\t\t\t.style('fill', label.color)\n\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t\t.text(label.text)\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tif (label.mutationsTooltip) {\n\t\t\t\t\t\t\tthis.geneClickListener(\n\t\t\t\t\t\t\t\tlabel.text,\n\t\t\t\t\t\t\t\tlabel.mutationsTooltip.map(value => value.mname)\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseover', async (mouseEvent: MouseEvent) => {\n\t\t\t\t\t\tconst requestId = ++this.hoverRequestId\n\t\t\t\t\t\tthis.renderTooltip(menu, label)\n\t\t\t\t\t\tmenu.show(mouseEvent.x, mouseEvent.y)\n\n\t\t\t\t\t\tconst coordinates = await this.getGeneCoordinates(label)\n\t\t\t\t\t\tif (requestId != this.hoverRequestId || !coordinates) return\n\n\t\t\t\t\t\tconst overlappingEvents = this.intervalEvents.filter(\n\t\t\t\t\t\t\tevent =>\n\t\t\t\t\t\t\t\tthis.sameChromosome(event.chr, coordinates.chr) &&\n\t\t\t\t\t\t\t\tcoordinates.stop >= event.start &&\n\t\t\t\t\t\t\t\tevent.stop >= coordinates.start\n\t\t\t\t\t\t)\n\t\t\t\t\t\tthis.renderTooltip(menu, label, overlappingEvents)\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseout', () => {\n\t\t\t\t\t\tthis.hoverRequestId++\n\t\t\t\t\t\tmenu.clear()\n\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t})\n\n\t\t\t\tg.append('path')\n\t\t\t\t\t.attr('class', 'chord-tick')\n\t\t\t\t\t.datum(label.line.points)\n\t\t\t\t\t.style('stroke', label.color)\n\t\t\t\t\t.style('fill', 'none')\n\t\t\t\t\t.attr('d', lineFunction)\n\t\t\t})\n\n\t\tlabelsG.selectAll('.group').each((label: Label, i: number, nodes: HTMLDivElement[]) => {\n\t\t\tconst collision = collisions ? collisions.find(l => l.text === label.text) : undefined\n\t\t\tif (collision) {\n\t\t\t\tconst g = select(nodes[i])\n\t\t\t\tg.selectAll('.chord-text')\n\t\t\t\t\t.datum(collision)\n\t\t\t\t\t.transition()\n\t\t\t\t\t.duration(this.animationDuration)\n\t\t\t\t\t.attr('transform', collision.transform)\n\t\t\t\t\t.style('text-anchor', collision.textAnchor)\n\n\t\t\t\tg.selectAll('.chord-tick')\n\t\t\t\t\t.datum(collision.line.points)\n\t\t\t\t\t.transition()\n\t\t\t\t\t.duration(this.animationDuration)\n\t\t\t\t\t.style('fill', 'none')\n\t\t\t\t\t.attr('d', lineFunction)\n\t\t\t}\n\t\t})\n\t}\n\n\tprivate renderTooltip(menu: any, label: Label, intervalEvents = label.cnvTooltip) {\n\t\tmenu.clear()\n\t\tconst table = table2col({ holder: menu.d })\n\t\tthis.createTooltip(table, label, intervalEvents)\n\t}\n\n\tprivate async getGeneCoordinates(label: Label): Promise<GeneCoordinates | undefined> {\n\t\tif (!this.genomeName || !this.intervalEvents.length) return\n\n\t\tconst cacheKey = `${this.genomeName}:${label.text}:${label.chr}`\n\t\tlet lookup = this.geneCoordinatesCache.get(cacheKey)\n\t\tif (!lookup) {\n\t\t\tlookup = this.lookupGeneCoordinates(label)\n\t\t\tthis.geneCoordinatesCache.set(cacheKey, lookup)\n\t\t}\n\t\treturn await lookup\n\t}\n\n\tprivate async lookupGeneCoordinates(label: Label): Promise<GeneCoordinates | undefined> {\n\t\ttry {\n\t\t\tconst response = await this.geneLookup(label.text, this.genomeName!)\n\t\t\tif (response?.error || !Array.isArray(response?.gmlst)) return\n\n\t\t\tconst models = response.gmlst.filter(\n\t\t\t\tmodel =>\n\t\t\t\t\tthis.sameChromosome(model.chr, label.chr) && Number.isFinite(model.start) && Number.isFinite(model.stop)\n\t\t\t)\n\t\t\tif (!models.length) return\n\n\t\t\treturn {\n\t\t\t\tchr: models[0].chr,\n\t\t\t\tstart: Math.min(...models.map(model => model.start)),\n\t\t\t\tstop: Math.max(...models.map(model => model.stop))\n\t\t\t}\n\t\t} catch {\n\t\t\treturn\n\t\t}\n\t}\n\n\tprivate sameChromosome(a: string, b: string) {\n\t\treturn a?.replace(/^chr/i, '').toLowerCase() == b?.replace(/^chr/i, '').toLowerCase()\n\t}\n\n\tcreateTooltip(table: any, label: Label, intervalEvents = label.cnvTooltip) {\n\t\tif (label.mutationsTooltip) {\n\t\t\tconst [td1, td2] = table.addRow()\n\t\t\ttd1.text('Gene')\n\t\t\ttd2.append('span').style('margin-left', '5px').text(label.text)\n\n\t\t\tlabel.mutationsTooltip.forEach((mutation: MutationTooltip) => {\n\t\t\t\t{\n\t\t\t\t\tconst [td1, td2] = table.addRow()\n\n\t\t\t\t\ttd1.text('Mutation')\n\t\t\t\t\ttd2\n\t\t\t\t\t\t.append('span')\n\t\t\t\t\t\t.style('margin-left', '5px')\n\t\t\t\t\t\t.text(mutation.mname)\n\t\t\t\t\t\t.append('span')\n\t\t\t\t\t\t.style('margin-left', '5px')\n\t\t\t\t\t\t.style('color', mutation.color)\n\t\t\t\t\t\t.text(`${mutation.dataClass}`)\n\t\t\t\t\t\t.append('span')\n\t\t\t\t\t\t.style('margin-left', '5px')\n\t\t\t\t\t\t.style('color', 'black')\n\t\t\t\t\t\t.style('font-size', '0.8em')\n\t\t\t\t\t\t.text(` ${mutation.chr}:${mutation.position}`)\n\t\t\t\t\tif (hasAnyValidVafEntry(mutation.vafs)) {\n\t\t\t\t\t\tappendVafBars(td2, mutation.vafs)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\tif (label.fusionTooltip) {\n\t\t\tconst [td1, td2] = table.addRow()\n\n\t\t\ttd1.text('Data type')\n\t\t\ttd2.append('span').text('Fusion transcript')\n\t\t\tlabel.fusionTooltip.forEach((fusionTooltip: FusionTooltip) => {\n\t\t\t\tconst [td1, td2] = table.addRow()\n\n\t\t\t\ttd1.text('Position')\n\t\t\t\ttd2.append('span').text(\n\t\t\t\t\t` ${fusionTooltip.geneA ? fusionTooltip.geneA : '?'} ${fusionTooltip.chrA}:${fusionTooltip.posA}\n\t\t\t\t\t\t${fusionTooltip.strandA == '+' ? 'forward' : 'reverse'} > ` +\n\t\t\t\t\t\t`${fusionTooltip.geneB ? fusionTooltip.geneB : '?'} ${fusionTooltip.chrB}:${fusionTooltip.posB} ${\n\t\t\t\t\t\t\tfusionTooltip.strandB == '+' ? 'forward' : 'reverse'\n\t\t\t\t\t\t} `\n\t\t\t\t)\n\t\t\t})\n\t\t}\n\n\t\tif (intervalEvents) {\n\t\t\tintervalEvents.forEach((cnv: CnvTooltip) => {\n\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\ttd1.text(cnv.dt == dtitd ? 'ITD' : cnv.dt == dtloh ? 'LOH' : 'CNV')\n\t\t\t\ttd2.append('span').style('margin-left', '5px').style('background-color', cnv.color).html('&nbsp;&nbsp;')\n\n\t\t\t\tif (cnv.dt != dtitd && cnv.dt != dtloh) td2.append('span').style('margin-left', '7.5px').text(cnv.value)\n\t\t\t\ttd2\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.style('margin-left', '7.5px')\n\t\t\t\t\t.style('font-size', '0.8em')\n\t\t\t\t\t.text(`${cnv.chr}:${cnv.start}-${cnv.stop}`)\n\t\t\t})\n\t\t}\n\t}\n}\n", "import type Settings from './Settings'\nimport { copyMerge } from '#rx'\nimport { CnvRenderingType } from '#plots/disco/cnv/CnvRenderingType.ts'\n\nexport default function discoDefaults(overrides: any = {}, app?: any): Settings {\n\tconst hiddenChromosomes: string[] = []\n\t//TODO: Change skipChrM into Set to accept multiple chromosomes\n\tif (app?.vocabApi?.termdbConfig?.queries?.singleSampleMutation?.discoPlot?.skipChrM) {\n\t\thiddenChromosomes.push('chrM')\n\t}\n\n\tconst defaults = {\n\t\tdownloadImgName: 'disco.plot',\n\n\t\tDisco: {\n\t\t\tcenterText: null,\n\t\t\tcnvCapping: 5,\n\t\t\tisOpen: false,\n\t\t\tprioritizeGeneLabelsByGeneSets: false,\n\t\t\tshowPrioritizeGeneLabelsByGeneSets: false,\n\t\t\tshowGeneNames: true,\n\t\t\tmutationWaterfallPlot: false,\n\t\t\tmutationWaterfallColor: '#4d4d4d',\n\t\t\tminMutationFraction: 0,\n\t\t\tcnvRenderingType: CnvRenderingType.heatmap,\n\t\t\tcnvPercentile: 90, // 90th percentile for removing outliers\n\t\t\tcnvCutoffMode: 'percentile',\n\t\t\tautoRadius: true,\n\t\t\tradius: 300,\n\t\t\tfusionOpacity: 1,\n\t\t\thiddenChromosomes\n\t\t},\n\n\t\trings: {\n\t\t\tnonExonicRingWidth: 20,\n\t\t\tsnvRingWidth: 20,\n\t\t\tlohRingWidth: 20,\n\t\t\tcnvRingWidth: 30,\n\t\t\tmutationWaterfallRingWidth: 35,\n\n\t\t\tsnvRingFilters: ['exonic'],\n\n\t\t\tchromosomeInnerRadius: 190,\n\t\t\tchromosomeWidth: 20,\n\n\t\t\tlabelLinesInnerRadius: 210,\n\t\t\tlabelsToLinesDistance: 30,\n\t\t\tlabelsToLinesGap: 2,\n\n\t\t\tnonExonicRingEnabled: true,\n\t\t\tnonExonicFilterValues: ['non-exonic']\n\t\t},\n\n\t\tverticalPadding: 0,\n\t\thorizontalPadding: 50,\n\n\t\tlayerScaler: 1,\n\t\tpadAngle: 0.002, //0.01, //0.04,\n\n\t\tlabel: {\n\t\t\tfontSize: 12,\n\t\t\tmaxDeltaAngle: 0.05,\n\t\t\tanimationDuration: 1000,\n\t\t\toverlapAngleFactor: 5 // 5 is set by testing, because label height is not known before rendering\n\t\t},\n\n\t\tcnv: {\n\t\t\tcapping: 5,\n\t\t\tpercentile: 80,\n\t\t\tampColor: '#D6683C',\n\t\t\tlossColor: '#67a9cf',\n\t\t\tcappedAmpColor: '#8B0000',\n\t\t\tcappedLossColor: '#00008B',\n\t\t\tunit: 'Unit'\n\t\t},\n\t\tsnv: {\n\t\t\tmaxMutationCount: 10000\n\t\t},\n\t\tlegend: {\n\t\t\tsnvTitle: 'Mutations',\n\t\t\tcnvTitle: 'CNV',\n\t\t\tlohTitle: 'LOH',\n\t\t\tfusionTitle: 'SV', // Structural Variants (color by co-location)\n\t\t\tlohLegendEnabled: true,\n\t\t\tfontSize: 12,\n\t\t\trowHeight: 48\n\t\t},\n\n\t\tmenu: {\n\t\t\tpadding: 5\n\t\t}\n\t}\n\n\tif (overrides?.Disco?.radius != null && (overrides.Disco.radius > 1000 || overrides.Disco.radius < 200)) {\n\t\tconsole.log(`${overrides?.Disco?.radius} is greater or lower than the min and max for the radius`)\n\t}\n\n\treturn copyMerge(defaults, overrides)\n}\n", "import type IRenderer from '#plots/disco/IRenderer.ts'\nimport * as d3 from 'd3'\nimport type SnvArc from './SnvArc.ts'\nimport type Arc from '#plots/disco/arc/Arc.ts'\nimport MenuProvider from '#plots/disco/menu/MenuProvider.ts'\nimport { dtsnvindel } from '#shared/common.js'\nimport { table2col } from '#dom/table2col'\nimport { appendVafBars, hasAnyValidVafEntry } from './vafTooltip.ts'\n\nexport default class NonExonicSnvRenderer implements IRenderer {\n\tprivate geneClickListener: (gene: string, mnames: Array<string>) => void\n\n\tconstructor(geneClickListener: (gene: string, mnames: Array<string>) => void) {\n\t\tthis.geneClickListener = geneClickListener\n\t}\n\n\trender(holder: any, elements: Array<Arc>) {\n\t\tconst arcGenerator = d3.arc<SnvArc>()\n\n\t\tconst arcs = holder.append('g')\n\n\t\tconst menu = MenuProvider.create()\n\n\t\tarcs\n\t\t\t.selectAll('path')\n\t\t\t.data(elements)\n\t\t\t.enter()\n\t\t\t.append('path')\n\t\t\t.attr('d', (d: SnvArc) => arcGenerator(d))\n\t\t\t.attr('fill', (d: SnvArc) => d.color)\n\t\t\t.on('mouseover', (mouseEvent: MouseEvent, arc: SnvArc) => {\n\t\t\t\tconst table = table2col({ holder: menu.d })\n\t\t\t\tconst snv: any = structuredClone(arc)\n\t\t\t\tsnv.dt = dtsnvindel\n\t\t\t\tsnv.class = arc.dataClass\n\t\t\t\tsnv.gene = snv.text\n\n\t\t\t\t{\n\t\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\t\ttd1.text('Consequence')\n\t\t\t\t\ttd2.append('span').text(snv.mname)\n\t\t\t\t\ttd2\n\t\t\t\t\t\t.append('span')\n\t\t\t\t\t\t.style('margin-left', '5px')\n\t\t\t\t\t\t.style('color', snv.color)\n\t\t\t\t\t\t.style('font-size', '.8em')\n\t\t\t\t\t\t.text(snv.dataClass)\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\t\ttd1.text(snv.ref && snv.alt ? 'Mutation' : 'Position')\n\t\t\t\t\ttd2.append('span').text(`${snv.chr}:${snv.pos + 1} ${snv.ref && snv.alt ? snv.ref + '>' + snv.alt : ''}`)\n\t\t\t\t}\n\n\t\t\t\tif (snv.gene) {\n\t\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\t\ttd1.text('Gene')\n\t\t\t\t\ttd2.text(snv.gene)\n\t\t\t\t}\n\n\t\t\t\tif (snv.occurrence > 1) {\n\t\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\t\ttd1.text('Occurrence')\n\t\t\t\t\ttd2.text(snv.occurrence)\n\t\t\t\t}\n\t\t\t\tif (hasAnyValidVafEntry(arc.vafs)) {\n\t\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\t\ttd1.text('Read count')\n\t\t\t\t\tappendVafBars(td2, arc.vafs)\n\t\t\t\t}\n\n\t\t\t\tmenu.show(mouseEvent.x, mouseEvent.y)\n\t\t\t})\n\t\t\t.on('mouseout', () => {\n\t\t\t\tmenu.clear()\n\t\t\t\tmenu.hide()\n\t\t\t})\n\t\t\t.on('click', (mouseEvent: MouseEvent, arc: SnvArc) => {\n\t\t\t\tthis.geneClickListener(arc.text, [arc.mname])\n\t\t\t})\n\t}\n}\n", "import * as d3 from 'd3'\nimport type SnvArc from './SnvArc.ts'\nimport type IRenderer from '#plots/disco/IRenderer.ts'\nimport FullArcRenderer from '#plots/disco/arc/FullArcRenderer.ts'\nimport MenuProvider from '#plots/disco/menu/MenuProvider.ts'\nimport { dtsnvindel } from '#shared/common.js'\nimport { table2col } from '#dom/table2col'\nimport { appendVafBars, hasAnyValidVafEntry } from './vafTooltip.ts'\n\nexport default class SnvRenderer implements IRenderer {\n\tprivate svnWidth: number\n\n\tprivate geneClickListener: (gene: string, mnames: Array<string>) => void\n\n\tconstructor(svnWidth: number, geneClickListener: (gene: string, mnames: Array<string>) => void) {\n\t\tthis.svnWidth = svnWidth\n\n\t\tthis.geneClickListener = geneClickListener\n\t}\n\n\trender(holder: any, elements: Array<SnvArc>) {\n\t\tif (elements.length > 0) {\n\t\t\tconst svnInnerRadius = elements[0].innerRadius\n\t\t\tconst fullArcRenderer = new FullArcRenderer(svnInnerRadius, this.svnWidth, '#6464641A')\n\t\t\tfullArcRenderer.render(holder)\n\t\t}\n\n\t\tconst arcGenerator = d3.arc<SnvArc>()\n\n\t\tconst arcs = holder.append('g')\n\n\t\tconst menu = MenuProvider.create()\n\n\t\tarcs\n\t\t\t.selectAll('path')\n\t\t\t.data(elements)\n\t\t\t.enter()\n\t\t\t.append('path')\n\t\t\t.attr('d', (d: SnvArc) => arcGenerator(d))\n\t\t\t.attr('fill', (d: SnvArc) => d.color)\n\t\t\t.on('mouseover', (mouseEvent: MouseEvent, arc: SnvArc) => {\n\t\t\t\tconst table = table2col({ holder: menu.d })\n\t\t\t\tconst snv: any = structuredClone(arc)\n\t\t\t\tsnv.dt = dtsnvindel\n\t\t\t\tsnv.class = arc.dataClass\n\t\t\t\tsnv.gene = snv.text\n\n\t\t\t\t{\n\t\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\t\ttd1.text('Consequence')\n\t\t\t\t\ttd2.append('span').text(snv.mname)\n\t\t\t\t\ttd2\n\t\t\t\t\t\t.append('span')\n\t\t\t\t\t\t.style('margin-left', '5px')\n\t\t\t\t\t\t.style('color', snv.color)\n\t\t\t\t\t\t.style('font-size', '.8em')\n\t\t\t\t\t\t.text(snv.dataClass)\n\t\t\t\t}\n\t\t\t\t{\n\t\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\t\ttd1.text(snv.ref && snv.alt ? 'Mutation' : 'Position')\n\t\t\t\t\ttd2.append('span').text(`${snv.chr}:${snv.pos + 1} ${snv.ref && snv.alt ? snv.ref + '>' + snv.alt : ''}`)\n\t\t\t\t}\n\n\t\t\t\tif (snv.gene) {\n\t\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\t\ttd1.text('Gene')\n\t\t\t\t\ttd2.text(snv.gene)\n\t\t\t\t}\n\n\t\t\t\tif (snv.occurrence > 1) {\n\t\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\t\ttd1.text('Occurrence')\n\t\t\t\t\ttd2.text(snv.occurrence)\n\t\t\t\t}\n\n\t\t\t\tif (hasAnyValidVafEntry(arc.vafs)) {\n\t\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\t\ttd1.text('Read count')\n\t\t\t\t\tappendVafBars(td2, arc.vafs)\n\t\t\t\t}\n\n\t\t\t\tmenu.show(mouseEvent.x, mouseEvent.y)\n\t\t\t})\n\t\t\t.on('mouseout', () => {\n\t\t\t\tmenu.clear()\n\t\t\t\tmenu.hide()\n\t\t\t})\n\t\t\t.on('click', (mouseEvent: MouseEvent, arc: SnvArc) => {\n\t\t\t\tthis.geneClickListener(arc.text, [arc.mname])\n\t\t\t})\n\t}\n}\n", "import * as d3 from 'd3'\nimport type LohArc from './LohArc.ts'\nimport type IRenderer from '#plots/disco/IRenderer.ts'\nimport MenuProvider from '#plots/disco/menu/MenuProvider.ts'\nimport { dtloh } from '#shared/common.js'\nimport { table2col } from '#dom/table2col'\n\nexport default class LohRenderer implements IRenderer {\n\trender(holder: any, elements: Array<LohArc>) {\n\t\tconst arcGenerator = d3.arc<LohArc>()\n\n\t\tconst arcs = holder.append('g')\n\n\t\tconst menu = MenuProvider.create()\n\n\t\tarcs\n\t\t\t.selectAll('path')\n\t\t\t.data(elements)\n\t\t\t.enter()\n\t\t\t.append('path')\n\t\t\t.attr('d', (d: LohArc) => arcGenerator(d))\n\t\t\t.attr('fill', (d: LohArc) => d.color)\n\t\t\t.on('mouseover', (mouseEvent: MouseEvent, arc: LohArc) => {\n\t\t\t\tconst table = table2col({ holder: menu.d })\n\t\t\t\tconst loh: any = structuredClone(arc)\n\t\t\t\tloh.dt = dtloh\n\t\t\t\tloh.gene = loh.text\n\t\t\t\t{\n\t\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\t\ttd1.text('Data type')\n\t\t\t\t\ttd2.append('span').style('margin-left', '5px').text('Loss of Heterozygosity')\n\t\t\t\t}\n\n\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\ttd1.text('Position')\n\t\t\t\ttd2.append('span').text(`${arc.chr}:${arc.start}-${arc.stop}`)\n\n\t\t\t\tmenu.show(mouseEvent.x, mouseEvent.y)\n\t\t\t})\n\t\t\t.on('mouseout', () => {\n\t\t\t\tmenu.clear()\n\t\t\t\tmenu.hide()\n\t\t\t})\n\t}\n}\n", "import * as d3 from 'd3'\nimport type IRenderer from '#plots/disco/IRenderer.ts'\nimport type CnvArc from './CnvArc.ts'\nimport MenuProvider from '#plots/disco/menu/MenuProvider.ts'\nimport { dtcnv, dtitd } from '#shared/common.js'\nimport { table2col } from '#dom/table2col'\n\nexport default class CnvBarRenderer implements IRenderer {\n\trender(holder: any, elements: Array<CnvArc>) {\n\t\tconst arcGenerator = d3.arc<CnvArc>()\n\n\t\t// Create a group for the arcs (actual CNV bars)\n\t\tconst arcs = holder.append('g')\n\t\t// Create a group for overlays used to highlight hovered bars\n\t\tconst hoverOverlay = holder\n\t\t\t.append('g')\n\t\t\t.attr('class', 'hover-overlay')\n\t\t\t// prevent highlighht from blocking thin CNVs\n\t\t\t.style('pointer-events', 'none')\n\n\t\tconst menu = MenuProvider.create()\n\n\t\tarcs\n\t\t\t.selectAll('path')\n\t\t\t.data(elements)\n\t\t\t.enter()\n\t\t\t.append('path')\n\t\t\t// Generate arc path for each CNV\n\t\t\t.attr('d', (d: CnvArc) => arcGenerator(d))\n\t\t\t// Fill with the CNV's specified color\n\t\t\t.attr('fill', (d: CnvArc) => d.color)\n\t\t\t// Start of highlight + tooltip behavior\n\t\t\t.on('mouseover', (mouseEvent: MouseEvent, arc: CnvArc) => {\n\t\t\t\t// Remove any existing overlay (e.g., from previous hover)\n\t\t\t\thoverOverlay.selectAll('*').remove()\n\t\t\t\t// Add a highlighted black stroke on top of the hovered arc\n\t\t\t\thoverOverlay\n\t\t\t\t\t.append('path')\n\t\t\t\t\t.datum(arc)\n\t\t\t\t\t.attr('d', arcGenerator(arc))\n\t\t\t\t\t.attr('fill', 'none')\n\t\t\t\t\t.attr('stroke', 'black')\n\t\t\t\t\t.attr('stroke-width', 1)\n\n\t\t\t\t// Prepare the CNV data for tooltip display\n\t\t\t\tconst cnv: any = structuredClone(arc)\n\t\t\t\tcnv.dt = arc.dt\n\t\t\t\tcnv.samples = [{ sample_id: arc.sampleName }]\n\t\t\t\tcnv.gene = cnv.text\n\n\t\t\t\t// Create a two-column table in the tooltip\n\t\t\t\tconst table = table2col({ holder: menu.d })\n\t\t\t\t// Add: Copy number change row\n\t\t\t\tif (arc.dt == dtcnv) {\n\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\tc1.text('CNV')\n\t\t\t\t\tc2.html(`<span style=\"background:${cnv.color}\">&nbsp;&nbsp;</span> ${cnv.value}`)\n\t\t\t\t}\n\t\t\t\tif (arc.dt == dtitd) {\n\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\tc1.text('ITD')\n\t\t\t\t\tc2.html(`<span style=\"background:${cnv.color}\">&nbsp;&nbsp;</span>`)\n\t\t\t\t}\n\t\t\t\t// Add: Position row\n\t\t\t\t{\n\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\tc1.text('Position')\n\t\t\t\t\tc2.text(cnv.chr + ':' + cnv.start + '-' + cnv.stop)\n\t\t\t\t}\n\t\t\t\t// Add: Unit value row\n\t\t\t\tif (arc.dt == dtcnv) {\n\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\tc1.text('Unit')\n\t\t\t\t\tc2.text(cnv.value)\n\t\t\t\t}\n\n\t\t\t\t// Show tooltip near the cursor\n\t\t\t\tmenu.show(mouseEvent.x, mouseEvent.y)\n\t\t\t})\n\t\t\t// Remove highlight and tooltip when mouse leaves\n\t\t\t.on('mouseout', () => {\n\t\t\t\thoverOverlay.selectAll('*').remove()\n\t\t\t\tmenu.clear()\n\t\t\t\tmenu.hide()\n\t\t\t})\n\t}\n}\n", "import type CnvArc from '#plots/disco/cnv/CnvArc.ts'\nimport * as d3 from 'd3'\nimport MenuProvider from '#plots/disco/menu/MenuProvider.ts'\nimport { table2col } from '#dom/table2col'\nimport { scaleLinear } from 'd3-scale'\nimport { dtcnv, dtitd } from '#shared/common.js'\n\nexport class CnvHeatmapRenderer {\n\tprivate positivePercentile: number\n\tprivate negativePercentile: number\n\n\tconstructor(positivePercentile = 0, negativePercentile = 0) {\n\t\tthis.positivePercentile = positivePercentile\n\t\tthis.negativePercentile = negativePercentile\n\t}\n\n\trender(holder: any, elements: Array<CnvArc>) {\n\t\tconst arcGenerator = d3.arc<CnvArc>()\n\n\t\t// Group for actual heatmap CNV arcs\n\t\tconst arcs = holder.append('g')\n\n\t\t// Separate group for overlays on hover (not blocking interactions)\n\t\tconst hoverOverlay = holder.append('g').attr('class', 'hover-overlay').style('pointer-events', 'none')\n\n\t\tconst menu = MenuProvider.create()\n\n\t\tarcs\n\t\t\t.selectAll('path')\n\t\t\t.data(elements)\n\t\t\t.enter()\n\t\t\t.append('path')\n\t\t\t// Generate the arc shape for each CNV\n\t\t\t.attr('d', (d: CnvArc) => arcGenerator(d))\n\t\t\t// Fill using interpolated color based on CNV value and percentile range\n\t\t\t.attr('fill', (d: CnvArc) => this.getColor(d.color, d.value, d.dt))\n\n\t\t\t// Hover event: show highlight stroke and tooltip\n\t\t\t.on('mouseenter', (mouseEvent: MouseEvent, arc: CnvArc) => {\n\t\t\t\t// Add highlight stroke over the hovered arc\n\t\t\t\thoverOverlay\n\t\t\t\t\t.append('path')\n\t\t\t\t\t.datum(arc)\n\t\t\t\t\t.attr('d', arcGenerator(arc))\n\t\t\t\t\t.attr('fill', 'none')\n\t\t\t\t\t.attr('stroke', 'black')\n\t\t\t\t\t.attr('stroke-width', 1)\n\n\t\t\t\t// Prepare data for tooltip\n\t\t\t\tconst table = table2col({ holder: menu.d })\n\t\t\t\tconst cnv: any = structuredClone(arc)\n\t\t\t\tcnv.dt = arc.dt\n\t\t\t\tcnv.samples = [{ sample_id: arc.sampleName }]\n\t\t\t\tcnv.gene = cnv.text\n\n\t\t\t\t// Row 1: Copy number change + colored square\n\t\t\t\tif (arc.dt == dtcnv) {\n\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\tc1.text('CNV')\n\t\t\t\t\t//Match the color shown in the tooltip to the heatmap\n\t\t\t\t\tc2.html(\n\t\t\t\t\t\t`<span style=\"background:${this.getColor(\n\t\t\t\t\t\t\tcnv.color,\n\t\t\t\t\t\t\tcnv.value,\n\t\t\t\t\t\t\tcnv.dt\n\t\t\t\t\t\t)}; border:solid lightgrey 0.1px;\">&nbsp;&nbsp;</span> ${cnv.value}`\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tif (arc.dt == dtitd) {\n\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\tc1.text('ITD')\n\t\t\t\t\tc2.html(`<span style=\"background:${cnv.color}; border:solid lightgrey 0.1px;\">&nbsp;&nbsp;</span>`)\n\t\t\t\t}\n\t\t\t\t// Row 2: Position\n\t\t\t\t{\n\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\tc1.text('Position')\n\t\t\t\t\tc2.text(cnv.chr + ':' + cnv.start + '-' + cnv.stop)\n\t\t\t\t}\n\n\t\t\t\t// Show tooltip near mouse\n\t\t\t\tmenu.show(mouseEvent.x, mouseEvent.y)\n\t\t\t})\n\n\t\t\t// Cleanup on hover out: remove highlight and hide tooltip\n\t\t\t.on('mouseleave', () => {\n\t\t\t\thoverOverlay.selectAll('*').remove()\n\t\t\t\tmenu.clear()\n\t\t\t\tmenu.hide()\n\t\t\t})\n\t}\n\n\t// Computes fill color using linear scale between -P80, 0, and +P80\n\tgetColor(color: string, value: number, dt = dtcnv) {\n\t\tif (dt == dtitd) return color\n\t\t//For cnv values, use a zero-centered symmetric scale rather than the absolute values\n\t\tconst maxValue = Math.max(this.positivePercentile, Math.abs(this.negativePercentile))\n\t\treturn scaleLinear(\n\t\t\t[-maxValue, 0, maxValue],\n\t\t\t[color, 'white', color] // transitions to white in the middle\n\t\t).clamp(true)(value)\n\t}\n}\n", "import type IRenderer from '#plots/disco/IRenderer.ts'\nimport type MutationWaterfallPoint from './MutationWaterfallPoint.ts'\nimport MenuProvider from '#plots/disco/menu/MenuProvider.ts'\nimport { table2col } from '#dom/table2col'\nimport { bplen } from '#shared/common.js'\nimport { ticks } from 'd3-array'\n\nexport default class MutationWaterfallRenderer implements IRenderer {\n\tprivate dotRadius: number\n\n\tconstructor(dotRadius = 1.5) {\n\t\tthis.dotRadius = dotRadius\n\t}\n\n\trender(holder: any, elements: Array<MutationWaterfallPoint>) {\n\t\tif (!elements.length) return\n\n\t\tconst ringGroup = holder.append('g').attr('data-testid', 'sjpp_mutation_waterfall_ring')\n\t\tconst menu = MenuProvider.create()\n\n\t\tringGroup\n\t\t\t.append('g')\n\t\t\t.selectAll('circle')\n\t\t\t.data(elements)\n\t\t\t.enter()\n\t\t\t.append('circle')\n\t\t\t.attr('cx', d => Math.cos(d.startAngle - Math.PI / 2) * d.innerRadius)\n\t\t\t.attr('cy', d => Math.sin(d.startAngle - Math.PI / 2) * d.innerRadius)\n\t\t\t.attr('r', this.dotRadius)\n\t\t\t.attr('fill', d => d.color)\n\t\t\t.attr('opacity', 0.9)\n\t\t\t.on('mouseover', (event: MouseEvent, d: MutationWaterfallPoint) => {\n\t\t\t\tconst distance = Math.round(Math.pow(10, d.logDistance))\n\t\t\t\tmenu.clear()\n\t\t\t\tconst table = table2col({ holder: menu.d })\n\t\t\t\t{\n\t\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\t\ttd1.text('Intermutation distance')\n\t\t\t\t\ttd2.text(`${bplen(distance)}`)\n\t\t\t\t}\n\t\t\t\tmenu.show(event.x, event.y)\n\t\t\t})\n\t\t\t.on('mouseout', () => {\n\t\t\t\tmenu.clear()\n\t\t\t\tmenu.hide()\n\t\t\t})\n\n\t\tthis.renderAxis(ringGroup, elements[0])\n\t}\n\n\tprivate renderAxis(holder: any, referencePoint: MutationWaterfallPoint) {\n\t\tconst { ringInnerRadius, ringWidth, rangeMin, rangeMax } = referencePoint\n\t\tconst axisGroup = holder.append('g').attr('class', 'sjpp-waterfall-axis')\n\t\tconst topRadius = ringInnerRadius + ringWidth\n\n\t\taxisGroup\n\t\t\t.append('line')\n\t\t\t.attr('x1', 0)\n\t\t\t.attr('y1', -topRadius)\n\t\t\t.attr('x2', 0)\n\t\t\t.attr('y2', -ringInnerRadius)\n\t\t\t.attr('stroke', '#6e6e6e')\n\t\t\t.attr('stroke-width', 1)\n\n\t\tconst span = rangeMax - rangeMin || 1\n\t\tconst tickValues = rangeMax === rangeMin ? [rangeMin] : ticks(rangeMin, rangeMax, 4)\n\n\t\ttickValues.forEach(value => {\n\t\t\tconst ratio = (value - rangeMin) / span\n\t\t\tconst radius = ringInnerRadius + ringWidth * ratio\n\t\t\tconst y = -radius\n\t\t\taxisGroup.append('line').attr('x1', -4).attr('x2', 4).attr('y1', y).attr('y2', y).attr('stroke', '#6e6e6e')\n\n\t\t\tconst exponent = Math.round(value * 10) / 10\n\t\t\tconst formatted = Number.isInteger(exponent) ? `${exponent}` : exponent.toFixed(1)\n\t\t\taxisGroup\n\t\t\t\t.append('text')\n\t\t\t\t.attr('x', 6)\n\t\t\t\t.attr('y', y + 3)\n\t\t\t\t.style('font-size', '10px')\n\t\t\t\t.style('fill', '#4d4d4d')\n\t\t\t\t.text(`10^${formatted} bp`)\n\t\t})\n\t}\n}\n", "import { getCompInit } from '#rx'\nimport { DiscoRenderer } from './DiscoRenderer.ts'\nimport { DiscoInteractions } from './interactions/DiscoInteractions.ts'\nimport { ViewModelMapper } from './viewmodel/ViewModelMapper.ts'\nimport LegendRenderer from './legend/LegendRenderer.ts'\nimport ChromosomesRenderer from './chromosome/ChromosomesRenderer.ts'\nimport LabelsRenderer from './label/LabelsRenderer.ts'\nimport discoDefaults from './defaults.ts'\nimport NonExonicSnvRenderer from './snv/NonExonicSnvRenderer.ts'\nimport SnvRenderer from './snv/SnvRenderer.ts'\nimport LohRenderer from './loh/LohRenderer.ts'\nimport CnvBarRenderer from './cnv/CnvBarRenderer.ts'\nimport type IRenderer from './IRenderer.ts'\nimport { RingType } from './ring/RingType.ts'\nimport type Settings from './Settings.ts'\nimport { multiInit } from '../../rx'\nimport { topBarInit } from '../controls.btns'\nimport { configUiInit } from '../controls.config'\nimport { CnvHeatmapRenderer } from '#plots/disco/cnv/CnvHeatmapRenderer.ts'\nimport type ViewModel from '#plots/disco/viewmodel/ViewModel.ts'\nimport { CnvRenderingType } from '#plots/disco/cnv/CnvRenderingType.ts'\nimport { InvalidDataUI } from '#dom'\nimport { dtcnv, dtloh } from '#shared/common.js'\nimport MutationWaterfallRenderer from './waterfall/MutationWaterfallRenderer.ts'\n\nexport default class Disco {\n\tstatic type = 'Disco'\n\n\t// following attributes are required by rx\n\tprivate type: string\n\tprivate opts: any\n\tprivate state: any\n\tprivate id: any\n\tprivate app: any\n\tprivate features: any\n\tprivate isOpen: boolean\n\tprivate discoInteractions: DiscoInteractions\n\n\tprivate stateViewModelMapper?: ViewModelMapper\n\tprivate viewModel?: ViewModel\n\tprivate recreateViewModel = false\n\tprivate errorDiv: any\n\tprivate svgDiv: any\n\n\tconstructor(opts: any) {\n\t\tthis.type = 'Disco'\n\t\tthis.opts = opts\n\t\tthis.isOpen = false\n\t\tthis.discoInteractions = new DiscoInteractions(this)\n\t}\n\n\tasync init() {\n\t\tconst state = this.app.getState()\n\t\tconst settings = state.plots.find(p => p.id === this.id).settings\n\n\t\tthis.stateViewModelMapper = new ViewModelMapper(settings, this.discoInteractions)\n\t\tthis.viewModel = this.stateViewModelMapper.map(state)\n\n\t\tconst holder = this.opts.holder\n\t\tconst controlsHolder = holder.append('div').style('display', 'inline-block').style('vertical-align', 'top') // on the left\n\t\tconst mainDiv = holder.append('div').style('display', 'inline-block') // on the right\n\n\t\tconst topbar = controlsHolder.append('div')\n\t\tconst config_div = controlsHolder.append('div')\n\t\tconst configInputsOptions = this.getConfigInputsOptions(this.viewModel)\n\n\t\tthis.features = await multiInit({\n\t\t\ttopbar: topBarInit({\n\t\t\t\tapp: this.app,\n\t\t\t\tid: this.id,\n\t\t\t\t// TODO change the way svg is selected\n\t\t\t\tdownloadHandler: () =>\n\t\t\t\t\tthis.discoInteractions.downloadClickListener(holder.select('svg[id=\"sjpp_disco_plot\"]').node()),\n\t\t\t\tcallback: () => this.toggleVisibility(this.isOpen),\n\t\t\t\tisOpen: () => this.isOpen,\n\t\t\t\tholder: topbar\n\t\t\t}),\n\n\t\t\tconfig: configUiInit({\n\t\t\t\tapp: this.app,\n\t\t\t\tid: this.id,\n\t\t\t\tholder: config_div,\n\t\t\t\tisOpen: () => this.isOpen,\n\t\t\t\tinputs: configInputsOptions\n\t\t\t})\n\t\t})\n\n\t\tthis.errorDiv = mainDiv.append('div').attr('data-testid', 'sjpp-disco-errorDiv')\n\t\tthis.svgDiv = mainDiv.append('div').attr('data-testid', 'sjpp-disco-svgDiv')\n\t}\n\n\tprivate getConfigInputsOptions(viewModel: ViewModel) {\n\t\tconst configInputsOptions: Array<any> = []\n\n\t\tif (viewModel.settings.Disco.showPrioritizeGeneLabelsByGeneSets) {\n\t\t\tconst filterMutationsGenesCheckbox = [\n\t\t\t\t{\n\t\t\t\t\tboxLabel: viewModel.genesetName,\n\t\t\t\t\tlabel: `Filter mutations`,\n\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\tchartType: 'Disco',\n\t\t\t\t\tsettingsKey: 'prioritizeGeneLabelsByGeneSets',\n\t\t\t\t\ttitle: `Only show mutations for ${viewModel.genesetName} genes`\n\t\t\t\t}\n\t\t\t]\n\n\t\t\tconfigInputsOptions.push(...filterMutationsGenesCheckbox)\n\t\t}\n\n\t\tif (viewModel.cnvMaxValue !== 0 || viewModel.cnvMinValue !== 0) {\n\t\t\tconst cnvConfigInputOptions = [\n\t\t\t\t{\n\t\t\t\t\tboxLabel: '',\n\t\t\t\t\tlabel: 'CNV rendering type',\n\t\t\t\t\ttype: 'radio',\n\t\t\t\t\tchartType: 'Disco',\n\t\t\t\t\tsettingsKey: 'cnvRenderingType',\n\t\t\t\t\ttitle: 'CNV rendering type',\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{ label: 'Heatmap', value: CnvRenderingType.heatmap },\n\t\t\t\t\t\t{ label: 'Bar', value: CnvRenderingType.bar }\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t\tconfigInputsOptions.push(...cnvConfigInputOptions)\n\t\t}\n\n\t\tif (viewModel.hasMutationFractionData) {\n\t\t\tconfigInputsOptions.push({\n\t\t\t\tboxLabel: '',\n\t\t\t\tlabel: 'Minimum mutation fraction',\n\t\t\t\ttype: 'number',\n\t\t\t\tchartType: 'Disco',\n\t\t\t\tsettingsKey: 'minMutationFraction',\n\t\t\t\ttitle: 'Only show SNV/indel mutations with at least one DNA/RNA mutation fraction at or above this value.',\n\t\t\t\tstep: 0.01,\n\t\t\t\tmin: 0,\n\t\t\t\tmax: 1,\n\t\t\t\tdebounceInterval: 500\n\t\t\t})\n\t\t}\n\n\t\tconfigInputsOptions.push({\n\t\t\tboxLabel: '',\n\t\t\tlabel: 'Show gene names',\n\t\t\ttype: 'checkbox',\n\t\t\tchartType: 'Disco',\n\t\t\tsettingsKey: 'showGeneNames',\n\t\t\ttitle: 'Show gene name labels on the outside of the plot'\n\t\t})\n\n\t\tconst genomeChr = this.app.opts.state.args.genome.majorchr\n\t\tconst chromosomeConfigOption = {\n\t\t\tlabel: 'Chromosomes',\n\t\t\ttitle: 'Chromosomes shown in the plot',\n\t\t\ttype: 'multiCheckbox',\n\t\t\tchartType: 'Disco',\n\t\t\tsettingsKey: 'hiddenChromosomes',\n\t\t\tstyle: {\n\t\t\t\tcolNum: 4\n\t\t\t},\n\t\t\toptions: Object.keys(genomeChr).map(c => ({ label: c, value: c })),\n\t\t\tprocessInput: (values: string[] = []) => {\n\t\t\t\t/** Show all chromosomes as checked by default but only\n\t\t\t\t * save to the state hidden (unchecked) chromosomes.\n\t\t\t\t * Allows for easier debugging, reduces user error when\n\t\t\t\t * embedding, and code clarity. */\n\t\t\t\tconst reverse = Object.keys(genomeChr).filter(c => !values.includes(c))\n\t\t\t\treturn reverse\n\t\t\t}\n\t\t}\n\n\t\tconfigInputsOptions.push(chromosomeConfigOption)\n\n\t\tconfigInputsOptions.push({\n\t\t\tboxLabel: '',\n\t\t\tlabel: 'Auto radius',\n\t\t\ttype: 'checkbox',\n\t\t\tchartType: 'Disco',\n\t\t\tsettingsKey: 'autoRadius',\n\t\t\ttitle: 'Automatically set the radius based on the number of data rings'\n\t\t})\n\n\t\tconst dimensionOptions = [\n\t\t\t{\n\t\t\t\tlabel: 'Radius',\n\t\t\t\ttitle: 'Set the radius of the entire plot, between 200 and 1000 pixels.',\n\t\t\t\ttype: 'number',\n\t\t\t\tchartType: 'Disco',\n\t\t\t\tsettingsKey: 'radius',\n\t\t\t\tdebounceInterval: 500,\n\t\t\t\tstep: 25,\n\t\t\t\tmin: 200,\n\t\t\t\tmax: 1000,\n\t\t\t\tgetDisplayStyle: (plot: any) => (plot.settings.Disco.autoRadius ? 'none' : 'table-row')\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Fusion opacity',\n\t\t\t\ttitle: 'Adjust opacity of fusion arcs, between 0 and 1',\n\t\t\t\ttype: 'number',\n\t\t\t\tchartType: 'Disco',\n\t\t\t\tsettingsKey: 'fusionOpacity',\n\t\t\t\tstep: 0.01,\n\t\t\t\tmin: 0,\n\t\t\t\tmax: 1,\n\t\t\t\tdebounceInterval: 500\n\t\t\t}\n\t\t]\n\n\t\tconfigInputsOptions.push(...dimensionOptions)\n\t\tif (viewModel.canShowMutationWaterfallPlot && viewModel.snvDataLength > 0) {\n\t\t\tconfigInputsOptions.push({\n\t\t\t\tboxLabel: '',\n\t\t\t\tlabel: 'Mutation Waterfall Plot',\n\t\t\t\ttype: 'checkbox',\n\t\t\t\tchartType: 'Disco',\n\t\t\t\tsettingsKey: 'mutationWaterfallPlot',\n\t\t\t\ttitle: 'Render log10 intermutation distance ring for SNV/indel data'\n\t\t\t})\n\t\t}\n\t\treturn configInputsOptions\n\t}\n\n\tasync main(): Promise<void> {\n\t\t// run this only when this.state{} is set; cannot do this step in constructor()\n\t\tconst settings: Settings = this.state.settings\n\n\t\tthis.isOpen = settings.Disco.isOpen\n\n\t\tif (this.recreateViewModel) {\n\t\t\tthis.stateViewModelMapper = new ViewModelMapper(settings, this.discoInteractions)\n\t\t\tthis.viewModel = this.stateViewModelMapper.map(this.app.getState())\n\t\t}\n\t\tthis.recreateViewModel = true\n\n\t\tif (this.viewModel) {\n\t\t\t// TODO calculate viewModel.filteredSnvDataLength always\n\t\t\tthis.svgDiv.selectAll('*').remove() // todo not to need this\n\t\t\tconst appState = this.app.getState()\n\t\t\tthis.viewModel.svgDiv = this.svgDiv\n\t\t\tthis.viewModel.appState = appState\n\n\t\t\tfor (const name in this.features) {\n\t\t\t\tthis.features[name].update({ state: this.state, appState })\n\t\t\t}\n\n\t\t\tconst legendRenderer = new LegendRenderer(this.viewModel.cappedCnvMaxAbsValue, settings.label.fontSize)\n\n\t\t\tconst discoRenderer = new DiscoRenderer(\n\t\t\t\tthis.getRingRenderers(this.viewModel.settings, this.viewModel, this.discoInteractions.geneClickListener),\n\t\t\t\tlegendRenderer,\n\t\t\t\tthis.app.opts.state.args.genome\n\t\t\t)\n\n\t\t\tdiscoRenderer.render(this.svgDiv, this.viewModel, this.onCnvSourceSelect)\n\n\t\t\tif (this.viewModel.invalidDataInfo?.entries?.length) {\n\t\t\t\tInvalidDataUI.render(this.errorDiv, this.viewModel.invalidDataInfo)\n\t\t\t}\n\t\t}\n\t}\n\n\tgetState(appState: any) {\n\t\tconst config = appState.plots.find(p => p.id === this.id)\n\t\tif (!config) return config\n\t\t// include args.data so updates rerender when mutation list changes\n\t\treturn { ...config, mlst: appState.args.data }\n\t}\n\n\tgetRingRenderers(\n\t\tsettings: Settings,\n\t\tviewModel: ViewModel,\n\t\tgeneClickListener: (gene: string, mnames: Array<string>) => void\n\t) {\n\t\tconst chromosomesRenderer = new ChromosomesRenderer(\n\t\t\tsettings.padAngle,\n\t\t\tsettings.rings.chromosomeInnerRadius,\n\t\t\tsettings.rings.chromosomeInnerRadius + settings.rings.chromosomeWidth,\n\t\t\tsettings.label.fontSize\n\t\t)\n\t\tconst labelsRenderer = new LabelsRenderer(\n\t\t\tsettings.label.animationDuration,\n\t\t\tsettings.label.fontSize,\n\t\t\tgeneClickListener,\n\t\t\tthis.app.opts.state.args.genome.name,\n\t\t\t[\n\t\t\t\t...(viewModel.rings.cnvArcRing?.elements || []),\n\t\t\t\t...(viewModel.rings.lohArcRing?.elements || []).map(event => ({ ...event, dt: dtloh }))\n\t\t\t]\n\t\t)\n\t\tconst nonExonicSnvRenderer = new NonExonicSnvRenderer(geneClickListener)\n\t\tconst snvRenderer = new SnvRenderer(settings.rings.snvRingWidth, geneClickListener)\n\t\tconst cnvRenderer =\n\t\t\tsettings.Disco.cnvRenderingType === CnvRenderingType.heatmap\n\t\t\t\t? new CnvHeatmapRenderer(viewModel.positivePercentile, viewModel.negativePercentile)\n\t\t\t\t: new CnvBarRenderer()\n\t\tconst lohRenderer = new LohRenderer()\n\t\tconst mutationWaterfallRenderer = new MutationWaterfallRenderer()\n\n\t\tconst renderersMap: Map<RingType, IRenderer> = new Map()\n\t\trenderersMap.set(RingType.CHROMOSOME, chromosomesRenderer)\n\t\trenderersMap.set(RingType.LABEL, labelsRenderer)\n\t\trenderersMap.set(RingType.NONEXONICSNV, nonExonicSnvRenderer)\n\t\trenderersMap.set(RingType.SNV, snvRenderer)\n\t\trenderersMap.set(RingType.MUTATION_WATERFALL, mutationWaterfallRenderer)\n\t\trenderersMap.set(RingType.CNV, cnvRenderer)\n\t\trenderersMap.set(RingType.LOH, lohRenderer)\n\n\t\treturn renderersMap\n\t}\n\n\tprivate onCnvSourceSelect = (index: number) => {\n\t\tconst state = this.app.getState()\n\t\tconst args = state.args\n\t\tconst alt = args.alternativeDataByDt?.[dtcnv]\n\t\tif (!alt) return\n\t\tconst altClone = structuredClone(args.alternativeDataByDt)\n\t\taltClone[dtcnv].forEach((d, i) => (d.inuse = i === index))\n\t\tconst selected = altClone[dtcnv][index]\n\t\tselected.mlst.forEach((d: any) => (d.position = d.pos))\n\t\tconst baseData = args.data.filter((d: any) => d.dt != dtcnv && d.dt != dtloh)\n\t\tconst newData = baseData.concat(selected.mlst)\n\t\tthis.app.dispatch({\n\t\t\ttype: 'app_refresh',\n\t\t\tstate: { args: { ...args, data: newData, alternativeDataByDt: altClone } }\n\t\t})\n\t}\n\n\ttoggleVisibility(isOpen: boolean) {\n\t\tthis.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: this.opts.id,\n\t\t\tconfig: {\n\t\t\t\tsettings: {\n\t\t\t\t\tDisco: { isOpen: !isOpen }\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n}\n\nexport const discoInit = getCompInit(Disco)\n\nexport const componentInit = discoInit\n\nexport async function getPlotConfig(opts: any, app: any) {\n\treturn {\n\t\tchartType: 'Disco',\n\t\tsubfolder: 'disco',\n\t\textension: 'ts',\n\t\tsettings: discoDefaults(opts.overrides, app)\n\t}\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["data", "startAngle", "endAngle", "data", "d", "td1", "td2", "td1", "td2"]
7
+ }