@sjcrh/proteinpaint-client 2.191.4 → 2.192.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-BNMEUJVM.js +1373 -0
  2. package/dist/AIProjectAdmin-AEXQY5LY.js +958 -0
  3. package/dist/AIProjectAdmin-AEXQY5LY.js.map +7 -0
  4. package/dist/AppHeader-RXDJBHXZ.js +835 -0
  5. package/dist/BoxPlot-HDP3SIGU.js +1217 -0
  6. package/dist/BoxPlot-HDP3SIGU.js.map +7 -0
  7. package/dist/CorrelationVolcano-V2E566XL.js +619 -0
  8. package/dist/DE-7YUZSW4E.js +95 -0
  9. package/dist/DEinput-P2HOQC4Z.js +301 -0
  10. package/dist/DifferentialAnalysis-2Z6BHS7A.js +245 -0
  11. package/dist/Disco-ZLC54X7T.js +3297 -0
  12. package/dist/Disco-ZLC54X7T.js.map +7 -0
  13. package/dist/Disco.UI-LXJJYQVV.js +249 -0
  14. package/dist/Disco.UI-LXJJYQVV.js.map +7 -0
  15. package/dist/DmrPlot-OEJRGNI3.js +642 -0
  16. package/dist/GB-2GHDD3MW.js +1130 -0
  17. package/dist/GeneExpInput-PWLPDLYT.js +367 -0
  18. package/dist/GeneExpInput-PWLPDLYT.js.map +7 -0
  19. package/dist/HicApp-CAYC4DPO.js +2250 -0
  20. package/dist/NumBinaryEditor-EUOYSGPM.js +271 -0
  21. package/dist/NumBinaryEditor.unit.spec-5B3W4B4F.js +286 -0
  22. package/dist/NumContEditor-7KK6CIB3.js +109 -0
  23. package/dist/NumContEditor.unit.spec-IMKGVYFZ.js +169 -0
  24. package/dist/NumCustomBinEditor-PDAF6I7B.js +38 -0
  25. package/dist/NumCustomBinEditor.unit.spec-IU3DPECJ.js +284 -0
  26. package/dist/NumDiscreteEditor-YTKUHG6Z.js +179 -0
  27. package/dist/NumDiscreteEditor.unit.spec-FUBS7Z7Z.js +202 -0
  28. package/dist/NumRegularBinEditor-LU3KLBLY.js +38 -0
  29. package/dist/NumRegularBinEditor.unit.spec-2BKOHI7L.js +227 -0
  30. package/dist/NumSplineEditor-56RJ2HT2.js +198 -0
  31. package/dist/NumSplineEditor.unit.spec-PW6VUUBZ.js +199 -0
  32. package/dist/NumericDensity-EB4H54EF.js +38 -0
  33. package/dist/NumericDensity.unit.spec-LSEM4OEY.js +221 -0
  34. package/dist/NumericHandler-VGPDXP35.js +39 -0
  35. package/dist/NumericHandler.unit.spec-NR3F7XHV.js +219 -0
  36. package/dist/ProteomeInput-AUXWUIWK.js +396 -0
  37. package/dist/RunChart2-SQ6TFOHD.js +758 -0
  38. package/dist/SC-OWJ6LYIW.js +1124 -0
  39. package/dist/SC-OWJ6LYIW.js.map +7 -0
  40. package/dist/Volcano-XHDH6UN7.js +1379 -0
  41. package/dist/WSIViewer-WT2QV747.js +48562 -0
  42. package/dist/WSIViewer-WT2QV747.js.map +7 -0
  43. package/dist/WsiSamplesPlot-YUOAWG2A.js +165 -0
  44. package/dist/adSandbox-VMMAL22L.js +38 -0
  45. package/dist/animatedBubbleChart-Q6Z5W2UL.js +555 -0
  46. package/dist/animatedBubbleChart-Q6Z5W2UL.js.map +7 -0
  47. package/dist/app-FX3KZ67X.js +37 -0
  48. package/dist/app-X7ZYEOZN.js +49 -0
  49. package/dist/app.js +20 -20
  50. package/dist/bam-ZYLH4U5R.js +860 -0
  51. package/dist/barchart-MXSPTKV4.js +47 -0
  52. package/dist/barchart.data-ZWF6EVJH.js +22 -0
  53. package/dist/barchart.events-XON2ANOC.js +47 -0
  54. package/dist/barchart.integration.spec-PJIENJGT.js +1980 -0
  55. package/dist/barchart2-HIKBGSSE.js +314 -0
  56. package/dist/barchart2-HIKBGSSE.js.map +7 -0
  57. package/dist/bars.renderer-57KSYAAT.js +12 -0
  58. package/dist/block-EGPYVWNP.js +6226 -0
  59. package/dist/block-EGPYVWNP.js.map +7 -0
  60. package/dist/block.init-IJBRPZNM.js +38 -0
  61. package/dist/block.mds.expressionrank-3DANCP7E.js +359 -0
  62. package/dist/block.mds.geneboxplot-CRGSCZMG.js +828 -0
  63. package/dist/block.mds.junction-4UIH2ZYN.js +1545 -0
  64. package/dist/block.mds.svcnv-NF4UIRR2.js +6801 -0
  65. package/dist/block.svg-AIZ47JCQ.js +164 -0
  66. package/dist/block.tk.aicheck-7HZFGE63.js +283 -0
  67. package/dist/block.tk.ase-U3VNPZEA.js +365 -0
  68. package/dist/block.tk.bam-4TQ7P2OX.js +1906 -0
  69. package/dist/block.tk.bedgraphdot-MYHKKO6K.js +384 -0
  70. package/dist/block.tk.bigwig.ui-E3YVGIDN.js +212 -0
  71. package/dist/block.tk.hicstraw-Y4XOMG7T.js +823 -0
  72. package/dist/block.tk.junction-T5C7LK6F.js +2364 -0
  73. package/dist/block.tk.junction.textmatrixui-Z3ACCVXH.js +199 -0
  74. package/dist/block.tk.ld-Y5KDA5AU.js +99 -0
  75. package/dist/block.tk.menu-EWRRISDY.js +1029 -0
  76. package/dist/block.tk.pgv-3JYGOZVQ.js +944 -0
  77. package/dist/brainImaging-P3AF3C5N.js +423 -0
  78. package/dist/brainRegions-YA2H2QOI.js +221 -0
  79. package/dist/brainRegions-YA2H2QOI.js.map +7 -0
  80. package/dist/chunk-2JR7RPB6.js +1825 -0
  81. package/dist/chunk-2U2CP2Y2.js +317 -0
  82. package/dist/chunk-2U2CP2Y2.js.map +7 -0
  83. package/dist/chunk-3BBK6A4X.js +176 -0
  84. package/dist/chunk-3BBK6A4X.js.map +7 -0
  85. package/dist/chunk-3FVIDQOX.js +54 -0
  86. package/dist/chunk-3K2O2NIH.js +446 -0
  87. package/dist/chunk-3RSJU6YM.js +2681 -0
  88. package/dist/chunk-3ZKD6C5S.js +34 -0
  89. package/dist/chunk-46AEH34Z.js +95 -0
  90. package/dist/chunk-4CQVC6XL.js +182 -0
  91. package/dist/chunk-5FXNI724.js +216 -0
  92. package/dist/chunk-634MOGE3.js +314 -0
  93. package/dist/chunk-634MOGE3.js.map +7 -0
  94. package/dist/chunk-6JHIX4RA.js +4269 -0
  95. package/dist/chunk-6JHIX4RA.js.map +7 -0
  96. package/dist/chunk-7PFRBGMN.js +129 -0
  97. package/dist/chunk-7R63MAPC.js +448 -0
  98. package/dist/chunk-7R63MAPC.js.map +7 -0
  99. package/dist/chunk-A4Z3CI24.js +276 -0
  100. package/dist/chunk-AI2LUQS6.js +119 -0
  101. package/dist/chunk-AJYJW4LX.js +6364 -0
  102. package/dist/chunk-BKPDYW5T.js +177 -0
  103. package/dist/chunk-BMS32SNA.js +37 -0
  104. package/dist/chunk-C4BCMAIK.js +188 -0
  105. package/dist/chunk-C4BCMAIK.js.map +7 -0
  106. package/dist/chunk-CJPGYPI3.js +291 -0
  107. package/dist/chunk-CTQH7LQ6.js +31 -0
  108. package/dist/chunk-D5CVYITI.js +203 -0
  109. package/dist/chunk-DMSX5PSO.js +477 -0
  110. package/dist/chunk-E3JRW3T3.js +1102 -0
  111. package/dist/chunk-E574SMCX.js +283 -0
  112. package/dist/chunk-E76O5Z42.js +98 -0
  113. package/dist/chunk-EEW443GL.js +14 -0
  114. package/dist/chunk-EVNMW7BS.js +833 -0
  115. package/dist/chunk-EVNMW7BS.js.map +7 -0
  116. package/dist/chunk-F2WPS7VY.js +1943 -0
  117. package/dist/chunk-FDPWWODM.js +2832 -0
  118. package/dist/chunk-FDPWWODM.js.map +7 -0
  119. package/dist/chunk-FVHUROIJ.js +446 -0
  120. package/dist/chunk-FVHUROIJ.js.map +7 -0
  121. package/dist/chunk-FYFX42YD.js +222 -0
  122. package/dist/chunk-G6RZYGWY.js +386 -0
  123. package/dist/chunk-GTZV2UZV.js +736 -0
  124. package/dist/chunk-H34LAFGH.js +142 -0
  125. package/dist/chunk-I2R5O2XX.js +263 -0
  126. package/dist/chunk-IEYDMN3H.js +26 -0
  127. package/dist/chunk-JWBP4ZZB.js +148 -0
  128. package/dist/chunk-KUZPTJJO.js +20874 -0
  129. package/dist/chunk-KUZPTJJO.js.map +7 -0
  130. package/dist/chunk-KVIH5JPC.js +1275 -0
  131. package/dist/chunk-L5HCOTRF.js +302 -0
  132. package/dist/chunk-LHKDLWG5.js +194 -0
  133. package/dist/chunk-LQJMCE7G.js +467 -0
  134. package/dist/chunk-M7UKOCJA.js +234 -0
  135. package/dist/chunk-M7UKOCJA.js.map +7 -0
  136. package/dist/chunk-MHFH66I3.js +1289 -0
  137. package/dist/chunk-MHFH66I3.js.map +7 -0
  138. package/dist/chunk-MNIBZTQE.js +146 -0
  139. package/dist/chunk-MP3DN6JK.js +117 -0
  140. package/dist/chunk-N5OVBS5L.js +2786 -0
  141. package/dist/chunk-NEKAGDTL.js +58 -0
  142. package/dist/chunk-NPCNDM6Y.js +54 -0
  143. package/dist/chunk-NYN2WQN3.js +100 -0
  144. package/dist/chunk-O6WL7USJ.js +343 -0
  145. package/dist/chunk-OH5I6I2D.js +368 -0
  146. package/dist/chunk-PDFCQ7AU.js +5054 -0
  147. package/dist/chunk-PDFCQ7AU.js.map +7 -0
  148. package/dist/chunk-PSJVMAWA.js +294 -0
  149. package/dist/chunk-PSJVMAWA.js.map +7 -0
  150. package/dist/chunk-PTQ774XH.js +514 -0
  151. package/dist/chunk-PXOH4ZN2.js +399 -0
  152. package/dist/chunk-QG4BJUM7.js +102 -0
  153. package/dist/chunk-R7AV73BV.js +617 -0
  154. package/dist/chunk-R7AV73BV.js.map +7 -0
  155. package/dist/chunk-RITTG5WN.js +158 -0
  156. package/dist/chunk-SMSFTTEO.js +272 -0
  157. package/dist/chunk-SOTB4FRE.js +2098 -0
  158. package/dist/chunk-SOTB4FRE.js.map +7 -0
  159. package/dist/chunk-TBZKVKR4.js +50 -0
  160. package/dist/chunk-TJYRBEBK.js +2878 -0
  161. package/dist/chunk-TLTS33EY.js +287 -0
  162. package/dist/chunk-TMM7BWW7.js +381 -0
  163. package/dist/chunk-TTC4MNEM.js +2327 -0
  164. package/dist/chunk-UN3O2MNB.js +375 -0
  165. package/dist/chunk-UN3O2MNB.js.map +7 -0
  166. package/dist/chunk-UQ5CDHYF.js +1218 -0
  167. package/dist/chunk-UQ5CDHYF.js.map +7 -0
  168. package/dist/chunk-UXIZYI3X.js +226 -0
  169. package/dist/chunk-VIUATDO2.js +170 -0
  170. package/dist/chunk-VIUDFDN4.js +102 -0
  171. package/dist/chunk-VQZ2Z5YU.js +587 -0
  172. package/dist/chunk-VQZ2Z5YU.js.map +7 -0
  173. package/dist/chunk-W5OEFZCR.js +254 -0
  174. package/dist/chunk-WXSRK3XR.js +534 -0
  175. package/dist/chunk-XHGMDBTS.js +230 -0
  176. package/dist/chunk-XQ2OBL6R.js +1205 -0
  177. package/dist/chunk-XQ2OBL6R.js.map +7 -0
  178. package/dist/chunk-XVGS3QXS.js +55 -0
  179. package/dist/chunk-XYNYQMLH.js +482 -0
  180. package/dist/chunk-Y4JJMUWG.js +217 -0
  181. package/dist/chunk-Z457XQSX.js +815 -0
  182. package/dist/chunk-ZF6HNVYD.js +1444 -0
  183. package/dist/chunk-ZF6HNVYD.js.map +7 -0
  184. package/dist/condition-QXTOTGZX.js +332 -0
  185. package/dist/controls-7TDB75LK.js +41 -0
  186. package/dist/controls.config-IBF5ILFP.js +39 -0
  187. package/dist/correlation-M2T5R7CM.js +102 -0
  188. package/dist/correlation-M2T5R7CM.js.map +7 -0
  189. package/dist/cuminc-CAHPKW7W.js +1149 -0
  190. package/dist/cuminc.integration.spec-NNSQGBRI.js +678 -0
  191. package/dist/customdata.inputui-RRTQK7OK.js +289 -0
  192. package/dist/dataDownload-SOUCBKXM.js +330 -0
  193. package/dist/dataDownload.integration.spec-C6TLWSSO.js +193 -0
  194. package/dist/databrowser.ui-KLFEU5QA.js +433 -0
  195. package/dist/dictionary-RUT5VXDD.js +118 -0
  196. package/dist/dictionary-RUT5VXDD.js.map +7 -0
  197. package/dist/dnaMethylation-WOKGG33W.js +38 -0
  198. package/dist/dnaMethylation.integration.spec-YUPP42UK.js +203 -0
  199. package/dist/dofetch-V7PLLWSO.js +51 -0
  200. package/dist/e2pca-VT7EM4E3.js +350 -0
  201. package/dist/ep-X6B43UXE.js +1256 -0
  202. package/dist/expclust.gdc.spec-DTBFOXBC.js +307 -0
  203. package/dist/facet-T5ZX7ZGV.js +521 -0
  204. package/dist/forms2-S5OGBFKL.js +539 -0
  205. package/dist/forms2-S5OGBFKL.js.map +7 -0
  206. package/dist/gb-TWXREZIP.js +88 -0
  207. package/dist/geneExpClustering-2G6YDCIN.js +249 -0
  208. package/dist/geneExpression-2A4ZPT7K.js +38 -0
  209. package/dist/geneExpression-ZHQH6SNA.js +313 -0
  210. package/dist/geneExpression.unit.spec-2M223S4P.js +102 -0
  211. package/dist/geneORA-YLIRUMCZ.js +278 -0
  212. package/dist/geneRanking-JDJXNGEC.js +551 -0
  213. package/dist/geneVariant-5ZIOT5BT.js +39 -0
  214. package/dist/geneVariant-GIXIMJ2I.js +41 -0
  215. package/dist/geneVariant.integration.spec-QCROW73S.js +198 -0
  216. package/dist/genefusion.ui-56UQLUKJ.js +309 -0
  217. package/dist/geneset-ACRMGBJO.js +208 -0
  218. package/dist/genomeBrowser.spec-EDILOQON.js +281 -0
  219. package/dist/grin2-5P7CYUT7.js +1560 -0
  220. package/dist/grin2-GNB35CMF.js +871 -0
  221. package/dist/grin2-GNB35CMF.js.map +7 -0
  222. package/dist/gsea-2PQ5HNNT.js +47 -0
  223. package/dist/hierCluster-H5HB7FPW.js +63 -0
  224. package/dist/hierCluster-L3LCP2II.js +59 -0
  225. package/dist/hierCluster.config-6UIJWCND.js +40 -0
  226. package/dist/hierCluster.integration.spec-EVAPT2VF.js +395 -0
  227. package/dist/hierCluster.interactivity-7MW6ZT6O.js +54 -0
  228. package/dist/hierCluster.renderers-F34EVY5J.js +21 -0
  229. package/dist/imagePlot-RSFZ2OKD.js +163 -0
  230. package/dist/importPlot-DQFWY5A7.js +8 -0
  231. package/dist/isoformExpression-2KANPCBH.js +40 -0
  232. package/dist/isoformExpression.unit.spec-6FSMHT4K.js +208 -0
  233. package/dist/launch.adhoc-ZYTIRVIC.js +42 -0
  234. package/dist/leftlabel.sample-66U6MHPN.js +260 -0
  235. package/dist/legacyDataset-TNIIJABK.js +119 -0
  236. package/dist/lollipop-PJDUFWEY.js +171 -0
  237. package/dist/maf-DLJHCKHJ.js +452 -0
  238. package/dist/maftimeline-NK5QYJMJ.js +593 -0
  239. package/dist/matrix-7BFYR6QL.js +63 -0
  240. package/dist/matrix-USAB2CHO.js +58 -0
  241. package/dist/matrix.cells-OTAXAJ4N.js +28 -0
  242. package/dist/matrix.config-AL4WSFZ7.js +41 -0
  243. package/dist/matrix.data-BDHCSN2G.js +25 -0
  244. package/dist/matrix.groups-MV2D2636.js +27 -0
  245. package/dist/matrix.integration.spec-DESORC2Y.js +3072 -0
  246. package/dist/matrix.interactivity-H7EJW3P2.js +42 -0
  247. package/dist/matrix.layout-7CAS2IBO.js +44 -0
  248. package/dist/matrix.legend-JDVG2JDF.js +22 -0
  249. package/dist/matrix.renderers-PDR5FIBC.js +38 -0
  250. package/dist/matrix.serieses-QVDS5HKK.js +21 -0
  251. package/dist/matrix.sort-HCK4CSTJ.js +27 -0
  252. package/dist/matrix.sort.unit.spec-2GC4E26N.js +472 -0
  253. package/dist/matrix.sorterUi-XGBQOPG4.js +18 -0
  254. package/dist/matrix.sorterUi.unit.spec-BJQKDU2F.js +342 -0
  255. package/dist/mavb-6E6Z4LPK.js +732 -0
  256. package/dist/mds.fimo-5P2TK5U4.js +518 -0
  257. package/dist/mds.samplescatterplot-KLKOD4AS.js +1550 -0
  258. package/dist/mds.survivalplot-SWQCOFIU.js +483 -0
  259. package/dist/numericDictTermCluster-WIVO33AV.js +72 -0
  260. package/dist/oncomatrix-SDUUQZCK.js +295 -0
  261. package/dist/oncomatrix.spec-YGQYIUDT.js +448 -0
  262. package/dist/plot.2dvaf-K53KTP5W.js +377 -0
  263. package/dist/plot.app-FNJVWLPQ.js +41 -0
  264. package/dist/plot.barplot-VTC3N6BR.js +102 -0
  265. package/dist/plot.boxplot-RJFGQSLA.js +152 -0
  266. package/dist/plot.brainImaging-6KVNPPMT.js +51 -0
  267. package/dist/plot.disco-ZFH5RK6B.js +102 -0
  268. package/dist/plot.dzi-IA2SOFUD.js +33 -0
  269. package/dist/plot.ssgq-QARGQVKB.js +139 -0
  270. package/dist/plot.vaf2cov-2JUXYCPG.js +259 -0
  271. package/dist/plot.wsi-C2DULA7U.js +36 -0
  272. package/dist/polar2-3HS3QBU6.js +231 -0
  273. package/dist/polar2-3HS3QBU6.js.map +7 -0
  274. package/dist/profileForms-Y6ZBMZWQ.js +446 -0
  275. package/dist/profileForms-Y6ZBMZWQ.js.map +7 -0
  276. package/dist/profilePlot-SVI3QKMD.js +54 -0
  277. package/dist/proteinView-YPFJSBL7.js +1556 -0
  278. package/dist/proteinView-YPFJSBL7.js.map +7 -0
  279. package/dist/qualitative-AQFKAZID.js +43 -0
  280. package/dist/radar2-TTQZLARY.js +326 -0
  281. package/dist/radar2-TTQZLARY.js.map +7 -0
  282. package/dist/radarFacility2-YGS56QUA.js +334 -0
  283. package/dist/radarFacility2-YGS56QUA.js.map +7 -0
  284. package/dist/regression-DLPBCDZT.js +56 -0
  285. package/dist/regression.inputs-42LY4MEZ.js +48 -0
  286. package/dist/regression.inputs.term-TTUFFPG6.js +48 -0
  287. package/dist/regression.inputs.values.table-CJAPTSMS.js +45 -0
  288. package/dist/regression.integration.spec-UDA26OGS.js +784 -0
  289. package/dist/regression.results-IA3C7SHR.js +40 -0
  290. package/dist/regression.spec-HEXCL3QV.js +708 -0
  291. package/dist/report-4CFOWNPJ.js +222 -0
  292. package/dist/sampleScatter.spec-N6V4BQ5Q.js +202 -0
  293. package/dist/sampleView-CZF7U23I.js +48 -0
  294. package/dist/samplelst-XUGDS5TU.js +111 -0
  295. package/dist/samplematrix-R5PZLZDE.js +2198 -0
  296. package/dist/sc-WTZZA5J5.js +86 -0
  297. package/dist/scatter-EY7HQVCO.js +851 -0
  298. package/dist/scatter-EY7HQVCO.js.map +7 -0
  299. package/dist/scatter.integration.spec-CRMLFO4J.js +1206 -0
  300. package/dist/scatter.integration.spec-CRMLFO4J.js.map +7 -0
  301. package/dist/selectGenomeWithTklst-2S2MXVCI.js +134 -0
  302. package/dist/singleCellCellType-LJWFG7MY.js +38 -0
  303. package/dist/singleCellCellType.unit.spec-RGN2XVUR.js +160 -0
  304. package/dist/singleCellGeneExpression-IW2QXTTU.js +38 -0
  305. package/dist/singleCellGeneExpression.unit.spec-4PO3Q7TM.js +153 -0
  306. package/dist/singleCellPlot-6EZ6JXCM.js +54 -0
  307. package/dist/singlecell-3LFPQ6KO.js +86 -0
  308. package/dist/singlecell-NTTAVVMR.js +1572 -0
  309. package/dist/snp-XB4IBG4Z.js +38 -0
  310. package/dist/snp.unit.spec-HAJPM53L.js +176 -0
  311. package/dist/snplocus-HE6TITSX.js +208 -0
  312. package/dist/spliceevent.a53ss.diagram-TCZMBMD7.js +151 -0
  313. package/dist/spliceevent.exonskip.diagram-VESOF6UC.js +277 -0
  314. package/dist/spliceevent.noeventdiagram-4K7FMO4F.js +460 -0
  315. package/dist/ssGSEA-2XYMX36P.js +38 -0
  316. package/dist/ssGSEA.unit.spec-J36KM2HO.js +88 -0
  317. package/dist/summarizeCnvGeneexp-LYVDZXXD.js +163 -0
  318. package/dist/summarizeGeneexpSurvival-Y52TGAHF.js +108 -0
  319. package/dist/summarizeMutationCnv-6EEJT3PV.js +164 -0
  320. package/dist/summarizeMutationDiagnosis-HZKXHOOQ.js +40 -0
  321. package/dist/summarizeMutationSurvival-TU7TQYFQ.js +99 -0
  322. package/dist/summary-4QQZUAMU.js +49 -0
  323. package/dist/summary.integration.spec-SLIIM4HN.js +414 -0
  324. package/dist/summaryInput-6HROPKCE.js +235 -0
  325. package/dist/sunburst-MBJJPERL.js +284 -0
  326. package/dist/survival-CXLMQSV2.js +58 -0
  327. package/dist/survival-QSL2KDKD.js +46 -0
  328. package/dist/survival.integration.spec-EUAAALVW.js +821 -0
  329. package/dist/svgraph-JM5MHQDX.js +1387 -0
  330. package/dist/svmr-MCMST2FL.js +3842 -0
  331. package/dist/table-MVX3IMAL.js +200 -0
  332. package/dist/termCollection-FZ2SCVA7.js +38 -0
  333. package/dist/termCollection-IGC7REFK.js +179 -0
  334. package/dist/termCollection.unit.spec-VY2EZZIP.js +208 -0
  335. package/dist/tk-5F3TWZ2G.js +46 -0
  336. package/dist/tp.ui-IURWTMAS.js +1459 -0
  337. package/dist/tvs.dt-BPZCFPYK.js +39 -0
  338. package/dist/tvs.dtcnv.categorical-UFS62DTR.js +40 -0
  339. package/dist/tvs.dtcnv.continuous-R6YXNNLA.js +72 -0
  340. package/dist/tvs.dtfusion-FGXXS4XX.js +40 -0
  341. package/dist/tvs.dtsnvindel-DR43K7X3.js +40 -0
  342. package/dist/tvs.dtsv-NO34GIOL.js +40 -0
  343. package/dist/tvs.numeric-KYAU5OV3.js +21 -0
  344. package/dist/tvs.samplelst-2QP7IV2Y.js +104 -0
  345. package/dist/tvs.termCollection-UEJDG22G.js +159 -0
  346. package/dist/violin-NBZTGGYF.js +46 -0
  347. package/dist/violin.integration.spec-5CLYJSAR.js +1425 -0
  348. package/dist/violin.interactivity-KXVKTT22.js +38 -0
  349. package/dist/violin.renderer-37OF6K7Q.js +40 -0
  350. package/dist/vocabulary-GR6J3VKW.js +41 -0
  351. package/package.json +3 -3
  352. package/dist/2dmaf-Z3D2M3FB.js +0 -1373
  353. package/dist/AIProjectAdmin-2OQOQXH4.js +0 -956
  354. package/dist/AIProjectAdmin-2OQOQXH4.js.map +0 -7
  355. package/dist/AppHeader-PXLGVCVS.js +0 -835
  356. package/dist/BoxPlot-PUZKHACO.js +0 -1211
  357. package/dist/BoxPlot-PUZKHACO.js.map +0 -7
  358. package/dist/CorrelationVolcano-RO6CFLZA.js +0 -619
  359. package/dist/DE-CCA5SBJG.js +0 -95
  360. package/dist/DEinput-MRUQW6X6.js +0 -301
  361. package/dist/DifferentialAnalysis-5YQQLJKR.js +0 -245
  362. package/dist/Disco-4FTOJBLG.js +0 -3237
  363. package/dist/Disco-4FTOJBLG.js.map +0 -7
  364. package/dist/Disco.UI-IWVSK3RN.js +0 -245
  365. package/dist/Disco.UI-IWVSK3RN.js.map +0 -7
  366. package/dist/DmrPlot-FPJJHTM5.js +0 -642
  367. package/dist/GB-H6JETPRC.js +0 -1130
  368. package/dist/GeneExpInput-Q42COANS.js +0 -366
  369. package/dist/GeneExpInput-Q42COANS.js.map +0 -7
  370. package/dist/HicApp-BBD2YOMT.js +0 -2250
  371. package/dist/NumBinaryEditor-WMSF7HIO.js +0 -271
  372. package/dist/NumBinaryEditor.unit.spec-QQATLHF7.js +0 -286
  373. package/dist/NumContEditor-4CSTHVRX.js +0 -109
  374. package/dist/NumContEditor.unit.spec-2YF3OS3A.js +0 -169
  375. package/dist/NumCustomBinEditor-KFAYUWYV.js +0 -38
  376. package/dist/NumCustomBinEditor.unit.spec-YHAUSGPN.js +0 -284
  377. package/dist/NumDiscreteEditor-F46H5CME.js +0 -179
  378. package/dist/NumDiscreteEditor.unit.spec-5BIAWAVN.js +0 -202
  379. package/dist/NumRegularBinEditor-G7KOA7NR.js +0 -38
  380. package/dist/NumRegularBinEditor.unit.spec-Y6CBCWLN.js +0 -227
  381. package/dist/NumSplineEditor-JP2V2L4Y.js +0 -198
  382. package/dist/NumSplineEditor.unit.spec-N34QBZN3.js +0 -199
  383. package/dist/NumericDensity-JOPHLURB.js +0 -38
  384. package/dist/NumericDensity.unit.spec-N45PCLOT.js +0 -221
  385. package/dist/NumericHandler-SIM4E2Z5.js +0 -39
  386. package/dist/NumericHandler.unit.spec-NKLYDVTG.js +0 -219
  387. package/dist/ProteomeInput-5KMNE3PZ.js +0 -396
  388. package/dist/RunChart2-N7AZVQXJ.js +0 -758
  389. package/dist/SC-M6RGALZM.js +0 -936
  390. package/dist/SC-M6RGALZM.js.map +0 -7
  391. package/dist/Volcano-YH4RJTT5.js +0 -1379
  392. package/dist/WSIViewer-7LOVM3AU.js +0 -48508
  393. package/dist/WSIViewer-7LOVM3AU.js.map +0 -7
  394. package/dist/WsiSamplesPlot-QPPB7OOD.js +0 -165
  395. package/dist/adSandbox-R2QP74P7.js +0 -38
  396. package/dist/app-AIIN4WDE.js +0 -37
  397. package/dist/app-FJT5VXMF.js +0 -49
  398. package/dist/bam-QBO22VQB.js +0 -860
  399. package/dist/barchart-VDOP6FQU.js +0 -47
  400. package/dist/barchart.data-Z2E72EET.js +0 -22
  401. package/dist/barchart.events-NUYQBI5S.js +0 -47
  402. package/dist/barchart.integration.spec-COVZPXMH.js +0 -1980
  403. package/dist/barchart2-KMSU4ROO.js +0 -311
  404. package/dist/barchart2-KMSU4ROO.js.map +0 -7
  405. package/dist/bars.renderer-JHCZDSM6.js +0 -12
  406. package/dist/block-TTN2IQAH.js +0 -6202
  407. package/dist/block-TTN2IQAH.js.map +0 -7
  408. package/dist/block.init-RRHHCNSR.js +0 -38
  409. package/dist/block.mds.expressionrank-7NWBRUII.js +0 -359
  410. package/dist/block.mds.geneboxplot-4BAJJWCC.js +0 -828
  411. package/dist/block.mds.junction-XRUIHAF5.js +0 -1545
  412. package/dist/block.mds.svcnv-YZ7PL733.js +0 -6801
  413. package/dist/block.svg-FUMP2J7A.js +0 -164
  414. package/dist/block.tk.aicheck-AIZEND45.js +0 -283
  415. package/dist/block.tk.ase-H26PKO5U.js +0 -365
  416. package/dist/block.tk.bam-XNZFHSDQ.js +0 -1906
  417. package/dist/block.tk.bedgraphdot-QTDBLBO2.js +0 -384
  418. package/dist/block.tk.bigwig.ui-OSRCPTQC.js +0 -212
  419. package/dist/block.tk.hicstraw-7GH6LVIH.js +0 -823
  420. package/dist/block.tk.junction-AJYML4AW.js +0 -2364
  421. package/dist/block.tk.junction.textmatrixui-4RIH3EZI.js +0 -199
  422. package/dist/block.tk.ld-AJYQ4C6T.js +0 -99
  423. package/dist/block.tk.menu-57OP5UW5.js +0 -1029
  424. package/dist/block.tk.pgv-XO7HP5MM.js +0 -944
  425. package/dist/brainImaging-65QDNR4D.js +0 -423
  426. package/dist/chunk-2XCUERHJ.js +0 -102
  427. package/dist/chunk-322QC6R4.js +0 -222
  428. package/dist/chunk-35SCELN4.js +0 -217
  429. package/dist/chunk-36EHIPV4.js +0 -514
  430. package/dist/chunk-3SZ6GKLB.js +0 -14
  431. package/dist/chunk-3ZLJDFJU.js +0 -368
  432. package/dist/chunk-4DXZGZOB.js +0 -54
  433. package/dist/chunk-4UWS5Y3N.js +0 -1438
  434. package/dist/chunk-4UWS5Y3N.js.map +0 -7
  435. package/dist/chunk-54EMVNPW.js +0 -102
  436. package/dist/chunk-57RBC6IZ.js +0 -302
  437. package/dist/chunk-5OUTR67M.js +0 -37
  438. package/dist/chunk-67DBIM6H.js +0 -293
  439. package/dist/chunk-67DBIM6H.js.map +0 -7
  440. package/dist/chunk-6A3IPDE2.js +0 -1943
  441. package/dist/chunk-6GN7X6LU.js +0 -2681
  442. package/dist/chunk-72X7LSBN.js +0 -54
  443. package/dist/chunk-74ZU4BT6.js +0 -2824
  444. package/dist/chunk-74ZU4BT6.js.map +0 -7
  445. package/dist/chunk-7EMWHCVW.js +0 -1825
  446. package/dist/chunk-7FACFCZK.js +0 -226
  447. package/dist/chunk-7XFGYYRV.js +0 -371
  448. package/dist/chunk-7XFGYYRV.js.map +0 -7
  449. package/dist/chunk-B6CSYKZJ.js +0 -1275
  450. package/dist/chunk-BDIKFVWZ.js +0 -443
  451. package/dist/chunk-BDIKFVWZ.js.map +0 -7
  452. package/dist/chunk-BWGU5NJS.js +0 -291
  453. package/dist/chunk-C5ZMAQXQ.js +0 -1173
  454. package/dist/chunk-C5ZMAQXQ.js.map +0 -7
  455. package/dist/chunk-CC3GFVV6.js +0 -117
  456. package/dist/chunk-CXQ6KS3Z.js +0 -1348
  457. package/dist/chunk-CXQ6KS3Z.js.map +0 -7
  458. package/dist/chunk-DCH54HC5.js +0 -824
  459. package/dist/chunk-DCH54HC5.js.map +0 -7
  460. package/dist/chunk-DD4R5P6W.js +0 -177
  461. package/dist/chunk-DKVUOBIE.js +0 -203
  462. package/dist/chunk-DR6H3QAA.js +0 -399
  463. package/dist/chunk-EH4NQ7C4.js +0 -170
  464. package/dist/chunk-EVN6KWPN.js +0 -50
  465. package/dist/chunk-FFEIP5CT.js +0 -458
  466. package/dist/chunk-FFEIP5CT.js.map +0 -7
  467. package/dist/chunk-FJP77STI.js +0 -158
  468. package/dist/chunk-FJP77STI.js.map +0 -7
  469. package/dist/chunk-G6O3URDN.js +0 -467
  470. package/dist/chunk-GNIK4JYM.js +0 -534
  471. package/dist/chunk-HKSNADSX.js +0 -477
  472. package/dist/chunk-I5RAQKKJ.js +0 -129
  473. package/dist/chunk-IW57W7EQ.js +0 -1210
  474. package/dist/chunk-IW57W7EQ.js.map +0 -7
  475. package/dist/chunk-J4SOF2ZH.js +0 -263
  476. package/dist/chunk-KPJZBCVI.js +0 -272
  477. package/dist/chunk-KSGA62R2.js +0 -2878
  478. package/dist/chunk-LTOBEUM2.js +0 -98
  479. package/dist/chunk-MYF2BWKC.js +0 -205
  480. package/dist/chunk-MYF2BWKC.js.map +0 -7
  481. package/dist/chunk-N2SKTCDK.js +0 -148
  482. package/dist/chunk-NGM3ZLIP.js +0 -230
  483. package/dist/chunk-NOEAT6CX.js +0 -317
  484. package/dist/chunk-NOEAT6CX.js.map +0 -7
  485. package/dist/chunk-NSXZPWRP.js +0 -482
  486. package/dist/chunk-O3JB4PIX.js +0 -31
  487. package/dist/chunk-OAWQ6LOO.js +0 -2063
  488. package/dist/chunk-OAWQ6LOO.js.map +0 -7
  489. package/dist/chunk-ODG6RD7P.js +0 -254
  490. package/dist/chunk-OEDZHPBJ.js +0 -58
  491. package/dist/chunk-ORL44TIK.js +0 -386
  492. package/dist/chunk-P3IENRWJ.js +0 -613
  493. package/dist/chunk-P3IENRWJ.js.map +0 -7
  494. package/dist/chunk-PCZNTK74.js +0 -26
  495. package/dist/chunk-QH6W3NVF.js +0 -287
  496. package/dist/chunk-QNETLNPB.js +0 -343
  497. package/dist/chunk-QQZ3SBF3.js +0 -216
  498. package/dist/chunk-R2MMURGK.js +0 -2786
  499. package/dist/chunk-SA7APTJR.js +0 -20792
  500. package/dist/chunk-SA7APTJR.js.map +0 -7
  501. package/dist/chunk-SHWLROJG.js +0 -283
  502. package/dist/chunk-SKREEF3H.js +0 -184
  503. package/dist/chunk-SKREEF3H.js.map +0 -7
  504. package/dist/chunk-TOU7EVFQ.js +0 -396
  505. package/dist/chunk-TOU7EVFQ.js.map +0 -7
  506. package/dist/chunk-UGVNZMLU.js +0 -4274
  507. package/dist/chunk-UGVNZMLU.js.map +0 -7
  508. package/dist/chunk-UI7OCM2A.js +0 -815
  509. package/dist/chunk-UJKW42DI.js +0 -6364
  510. package/dist/chunk-ULPMYS5B.js +0 -100
  511. package/dist/chunk-UOVALHAJ.js +0 -182
  512. package/dist/chunk-VGJSASRT.js +0 -446
  513. package/dist/chunk-VGYTAYFK.js +0 -276
  514. package/dist/chunk-VHOEJBFP.js +0 -736
  515. package/dist/chunk-VOUMS6IP.js +0 -1102
  516. package/dist/chunk-VV36JRUF.js +0 -381
  517. package/dist/chunk-W55XSG6K.js +0 -142
  518. package/dist/chunk-W6ME65LV.js +0 -34
  519. package/dist/chunk-WHI6466S.js +0 -146
  520. package/dist/chunk-WSDUD52Y.js +0 -55
  521. package/dist/chunk-XAVNZNXQ.js +0 -95
  522. package/dist/chunk-XMLURPEP.js +0 -194
  523. package/dist/chunk-YKXUK7HJ.js +0 -5041
  524. package/dist/chunk-YKXUK7HJ.js.map +0 -7
  525. package/dist/chunk-YZK37YCC.js +0 -119
  526. package/dist/chunk-ZTYNN6G5.js +0 -2327
  527. package/dist/chunk-ZXTHADSC.js +0 -158
  528. package/dist/condition-HDVYPJJD.js +0 -332
  529. package/dist/controls-YEEW46C6.js +0 -41
  530. package/dist/controls.config-C535H5DL.js +0 -39
  531. package/dist/correlation-AOSSSSL3.js +0 -99
  532. package/dist/correlation-AOSSSSL3.js.map +0 -7
  533. package/dist/cuminc-II7NFIFP.js +0 -1149
  534. package/dist/cuminc.integration.spec-B4N6OMBJ.js +0 -678
  535. package/dist/customdata.inputui-AI4ZBIEP.js +0 -289
  536. package/dist/dataDownload-ZQYLXN6D.js +0 -330
  537. package/dist/dataDownload.integration.spec-2PKYZ2AY.js +0 -193
  538. package/dist/databrowser.ui-WGD7D3XV.js +0 -433
  539. package/dist/dictionary-RYM4WP2W.js +0 -111
  540. package/dist/dictionary-RYM4WP2W.js.map +0 -7
  541. package/dist/dnaMethylation-WGJMJL5B.js +0 -38
  542. package/dist/dnaMethylation.integration.spec-DO3PV4MO.js +0 -203
  543. package/dist/dofetch-RADX3AFU.js +0 -51
  544. package/dist/e2pca-KOAAU2JX.js +0 -350
  545. package/dist/ep-CXCATXYH.js +0 -1256
  546. package/dist/expclust.gdc.spec-UJO2R3CW.js +0 -307
  547. package/dist/facet-2FBUAD7P.js +0 -521
  548. package/dist/forms2-ZBT5BZW3.js +0 -534
  549. package/dist/forms2-ZBT5BZW3.js.map +0 -7
  550. package/dist/gb-VCJFV63W.js +0 -88
  551. package/dist/geneExpClustering-FUNS6D2P.js +0 -249
  552. package/dist/geneExpression-2BWWGYL4.js +0 -38
  553. package/dist/geneExpression-2OPFWV2K.js +0 -313
  554. package/dist/geneExpression.unit.spec-G7BSHJQT.js +0 -102
  555. package/dist/geneORA-S3KQMBYL.js +0 -278
  556. package/dist/geneRanking-UZ36XAL7.js +0 -551
  557. package/dist/geneVariant-OOZ2SBXO.js +0 -41
  558. package/dist/geneVariant-ZHNVEKQ6.js +0 -39
  559. package/dist/geneVariant.integration.spec-2C7EWKEV.js +0 -198
  560. package/dist/genefusion.ui-ASICJNII.js +0 -309
  561. package/dist/geneset-SNM4M6UM.js +0 -208
  562. package/dist/genomeBrowser.spec-DJIRW2X7.js +0 -281
  563. package/dist/grin2-7AOJP5QJ.js +0 -1560
  564. package/dist/grin2-RKJXYWJ5.js +0 -821
  565. package/dist/grin2-RKJXYWJ5.js.map +0 -7
  566. package/dist/gsea-SPTQJW67.js +0 -47
  567. package/dist/hierCluster-KDE5SMYP.js +0 -63
  568. package/dist/hierCluster-XG4YLVL3.js +0 -59
  569. package/dist/hierCluster.config-VNEEJCKJ.js +0 -40
  570. package/dist/hierCluster.integration.spec-SSDN7LSH.js +0 -395
  571. package/dist/hierCluster.interactivity-DKBSJ644.js +0 -54
  572. package/dist/hierCluster.renderers-OG6LZAT7.js +0 -21
  573. package/dist/imagePlot-M5JSHEY4.js +0 -163
  574. package/dist/importPlot-YH7ZY6RJ.js +0 -8
  575. package/dist/isoformExpression-EV27MKYZ.js +0 -40
  576. package/dist/isoformExpression.unit.spec-7T2GOHH3.js +0 -208
  577. package/dist/launch.adhoc-NOISOX5E.js +0 -42
  578. package/dist/leftlabel.sample-42AX4KTV.js +0 -260
  579. package/dist/legacyDataset-SWJCAWIR.js +0 -119
  580. package/dist/lollipop-LQCQBTSX.js +0 -171
  581. package/dist/maf-U237OWZ3.js +0 -452
  582. package/dist/maftimeline-NLZLMHT2.js +0 -593
  583. package/dist/matrix-DZJXYRYN.js +0 -63
  584. package/dist/matrix-Y5345QQG.js +0 -58
  585. package/dist/matrix.cells-PT7S74QP.js +0 -28
  586. package/dist/matrix.config-2ORCUWKX.js +0 -41
  587. package/dist/matrix.data-C6VPQJJ4.js +0 -25
  588. package/dist/matrix.groups-CEOCG2CT.js +0 -27
  589. package/dist/matrix.integration.spec-U4B3JB6N.js +0 -3072
  590. package/dist/matrix.interactivity-GFLIFIER.js +0 -42
  591. package/dist/matrix.layout-DOVDHTDX.js +0 -44
  592. package/dist/matrix.legend-JE4ZSLP7.js +0 -22
  593. package/dist/matrix.renderers-GPUJQ7KF.js +0 -38
  594. package/dist/matrix.serieses-REE4DCSR.js +0 -21
  595. package/dist/matrix.sort-VD5URUWY.js +0 -27
  596. package/dist/matrix.sort.unit.spec-4IOFVHJN.js +0 -472
  597. package/dist/matrix.sorterUi-VQYY6KBK.js +0 -18
  598. package/dist/matrix.sorterUi.unit.spec-V5O2EJBX.js +0 -342
  599. package/dist/mavb-SQDA3B2B.js +0 -732
  600. package/dist/mds.fimo-ZJSEPLD7.js +0 -518
  601. package/dist/mds.samplescatterplot-Y5V73GOY.js +0 -1550
  602. package/dist/mds.survivalplot-CZBRMHYN.js +0 -483
  603. package/dist/numericDictTermCluster-TFXBBUVI.js +0 -72
  604. package/dist/oncomatrix-ZILACPPI.js +0 -295
  605. package/dist/oncomatrix.spec-RLIVVVD6.js +0 -448
  606. package/dist/plot.2dvaf-BNRZPIKU.js +0 -377
  607. package/dist/plot.app-NRUARQCN.js +0 -41
  608. package/dist/plot.barplot-342AYQC7.js +0 -102
  609. package/dist/plot.boxplot-OHEJDPTW.js +0 -152
  610. package/dist/plot.brainImaging-KV72PAON.js +0 -51
  611. package/dist/plot.disco-OUE4RFHL.js +0 -102
  612. package/dist/plot.dzi-T3GPUH36.js +0 -33
  613. package/dist/plot.ssgq-WJHGMXW5.js +0 -139
  614. package/dist/plot.vaf2cov-NGD5PCV4.js +0 -259
  615. package/dist/plot.wsi-2MU5BDG3.js +0 -36
  616. package/dist/polar2-YCWPBPFU.js +0 -226
  617. package/dist/polar2-YCWPBPFU.js.map +0 -7
  618. package/dist/profileForms-OV3I6RK7.js +0 -441
  619. package/dist/profileForms-OV3I6RK7.js.map +0 -7
  620. package/dist/profilePlot-OMVO3K4H.js +0 -54
  621. package/dist/proteinView-OAR2RC6U.js +0 -1320
  622. package/dist/proteinView-OAR2RC6U.js.map +0 -7
  623. package/dist/qualitative-MEYBRUC6.js +0 -43
  624. package/dist/radar2-KREAMGVV.js +0 -321
  625. package/dist/radar2-KREAMGVV.js.map +0 -7
  626. package/dist/radarFacility2-DBPEV7VC.js +0 -329
  627. package/dist/radarFacility2-DBPEV7VC.js.map +0 -7
  628. package/dist/regression-ZPDPLI6G.js +0 -56
  629. package/dist/regression.inputs-QOSBAGL6.js +0 -48
  630. package/dist/regression.inputs.term-HMUMPY7X.js +0 -48
  631. package/dist/regression.inputs.values.table-VMCTZHLG.js +0 -45
  632. package/dist/regression.integration.spec-RP74JTAA.js +0 -784
  633. package/dist/regression.results-5XC6M67C.js +0 -40
  634. package/dist/regression.spec-EZYM24J7.js +0 -708
  635. package/dist/report-ZOVQCOGQ.js +0 -222
  636. package/dist/sampleScatter.spec-CD52FEOC.js +0 -202
  637. package/dist/sampleView-SVTLSWRG.js +0 -48
  638. package/dist/samplelst-HXF5POJD.js +0 -111
  639. package/dist/samplematrix-NYDAH74I.js +0 -2198
  640. package/dist/sc-JIDT4W4K.js +0 -86
  641. package/dist/scatter-WNRTPSEE.js +0 -849
  642. package/dist/scatter-WNRTPSEE.js.map +0 -7
  643. package/dist/scatter.integration.spec-3EYTPY5B.js +0 -1197
  644. package/dist/scatter.integration.spec-3EYTPY5B.js.map +0 -7
  645. package/dist/selectGenomeWithTklst-OSB7B6L3.js +0 -134
  646. package/dist/singleCellCellType-3BH7LWQ6.js +0 -38
  647. package/dist/singleCellCellType.unit.spec-RU4RJXFF.js +0 -160
  648. package/dist/singleCellGeneExpression-3UA4YER7.js +0 -38
  649. package/dist/singleCellGeneExpression.unit.spec-4ZTBG37H.js +0 -153
  650. package/dist/singleCellPlot-ZUAWK5RE.js +0 -54
  651. package/dist/singlecell-BGJZB7MF.js +0 -86
  652. package/dist/singlecell-RO3BL5OO.js +0 -1572
  653. package/dist/snp-HD7VQKBR.js +0 -38
  654. package/dist/snp.unit.spec-ISXCLMWW.js +0 -176
  655. package/dist/snplocus-IL5Z4XWV.js +0 -208
  656. package/dist/spliceevent.a53ss.diagram-LLJSPV7M.js +0 -151
  657. package/dist/spliceevent.exonskip.diagram-LAOIOIST.js +0 -277
  658. package/dist/spliceevent.noeventdiagram-MVA7Q3HT.js +0 -460
  659. package/dist/ssGSEA-7T6S3DSE.js +0 -38
  660. package/dist/ssGSEA.unit.spec-XJ3W4NWX.js +0 -88
  661. package/dist/summarizeCnvGeneexp-RRP6JUV6.js +0 -163
  662. package/dist/summarizeGeneexpSurvival-AFLHDD6Q.js +0 -108
  663. package/dist/summarizeMutationCnv-NABUYHMX.js +0 -164
  664. package/dist/summarizeMutationDiagnosis-2LQ7JU3K.js +0 -40
  665. package/dist/summarizeMutationSurvival-3WBT5TXG.js +0 -99
  666. package/dist/summary-FRDKOFXW.js +0 -49
  667. package/dist/summary.integration.spec-ZLRIA7G2.js +0 -414
  668. package/dist/summaryInput-4JO6MHP4.js +0 -235
  669. package/dist/sunburst-DRCVSC2X.js +0 -284
  670. package/dist/survival-AK75COPY.js +0 -58
  671. package/dist/survival-IF5NI3A6.js +0 -46
  672. package/dist/survival.integration.spec-7IWBTPJG.js +0 -821
  673. package/dist/svgraph-QBDF2SLB.js +0 -1387
  674. package/dist/svmr-O4GJJUT2.js +0 -3842
  675. package/dist/table-FQAIXKLE.js +0 -200
  676. package/dist/termCollection-GMDDL3L7.js +0 -179
  677. package/dist/termCollection-ZO5PZ7E3.js +0 -38
  678. package/dist/termCollection.unit.spec-5JBCTXHX.js +0 -208
  679. package/dist/tk-GJX23IV7.js +0 -46
  680. package/dist/tp.ui-T7FVMTGQ.js +0 -1459
  681. package/dist/tvs.dt-X7L7NSU6.js +0 -39
  682. package/dist/tvs.dtcnv.categorical-73G2V6CH.js +0 -40
  683. package/dist/tvs.dtcnv.continuous-DWFJL3X7.js +0 -72
  684. package/dist/tvs.dtfusion-HQADHCSV.js +0 -40
  685. package/dist/tvs.dtsnvindel-PY5OBMGW.js +0 -40
  686. package/dist/tvs.dtsv-OTBEEWSW.js +0 -40
  687. package/dist/tvs.numeric-WGDHEBJV.js +0 -21
  688. package/dist/tvs.samplelst-LCXSU5MG.js +0 -104
  689. package/dist/tvs.termCollection-L527XN4X.js +0 -159
  690. package/dist/violin-6VKRUQV3.js +0 -46
  691. package/dist/violin.integration.spec-RJATDLQH.js +0 -1425
  692. package/dist/violin.interactivity-SKF5H7MN.js +0 -38
  693. package/dist/violin.renderer-GB4TPX3B.js +0 -40
  694. package/dist/vocabulary-D3W44IWE.js +0 -41
  695. /package/dist/{2dmaf-Z3D2M3FB.js.map → 2dmaf-BNMEUJVM.js.map} +0 -0
  696. /package/dist/{AppHeader-PXLGVCVS.js.map → AppHeader-RXDJBHXZ.js.map} +0 -0
  697. /package/dist/{CorrelationVolcano-RO6CFLZA.js.map → CorrelationVolcano-V2E566XL.js.map} +0 -0
  698. /package/dist/{DE-CCA5SBJG.js.map → DE-7YUZSW4E.js.map} +0 -0
  699. /package/dist/{DEinput-MRUQW6X6.js.map → DEinput-P2HOQC4Z.js.map} +0 -0
  700. /package/dist/{DifferentialAnalysis-5YQQLJKR.js.map → DifferentialAnalysis-2Z6BHS7A.js.map} +0 -0
  701. /package/dist/{DmrPlot-FPJJHTM5.js.map → DmrPlot-OEJRGNI3.js.map} +0 -0
  702. /package/dist/{GB-H6JETPRC.js.map → GB-2GHDD3MW.js.map} +0 -0
  703. /package/dist/{HicApp-BBD2YOMT.js.map → HicApp-CAYC4DPO.js.map} +0 -0
  704. /package/dist/{NumBinaryEditor-WMSF7HIO.js.map → NumBinaryEditor-EUOYSGPM.js.map} +0 -0
  705. /package/dist/{NumBinaryEditor.unit.spec-QQATLHF7.js.map → NumBinaryEditor.unit.spec-5B3W4B4F.js.map} +0 -0
  706. /package/dist/{NumContEditor-4CSTHVRX.js.map → NumContEditor-7KK6CIB3.js.map} +0 -0
  707. /package/dist/{NumContEditor.unit.spec-2YF3OS3A.js.map → NumContEditor.unit.spec-IMKGVYFZ.js.map} +0 -0
  708. /package/dist/{NumCustomBinEditor-KFAYUWYV.js.map → NumCustomBinEditor-PDAF6I7B.js.map} +0 -0
  709. /package/dist/{NumCustomBinEditor.unit.spec-YHAUSGPN.js.map → NumCustomBinEditor.unit.spec-IU3DPECJ.js.map} +0 -0
  710. /package/dist/{NumDiscreteEditor-F46H5CME.js.map → NumDiscreteEditor-YTKUHG6Z.js.map} +0 -0
  711. /package/dist/{NumDiscreteEditor.unit.spec-5BIAWAVN.js.map → NumDiscreteEditor.unit.spec-FUBS7Z7Z.js.map} +0 -0
  712. /package/dist/{NumRegularBinEditor-G7KOA7NR.js.map → NumRegularBinEditor-LU3KLBLY.js.map} +0 -0
  713. /package/dist/{NumRegularBinEditor.unit.spec-Y6CBCWLN.js.map → NumRegularBinEditor.unit.spec-2BKOHI7L.js.map} +0 -0
  714. /package/dist/{NumSplineEditor-JP2V2L4Y.js.map → NumSplineEditor-56RJ2HT2.js.map} +0 -0
  715. /package/dist/{NumSplineEditor.unit.spec-N34QBZN3.js.map → NumSplineEditor.unit.spec-PW6VUUBZ.js.map} +0 -0
  716. /package/dist/{NumericDensity-JOPHLURB.js.map → NumericDensity-EB4H54EF.js.map} +0 -0
  717. /package/dist/{NumericDensity.unit.spec-N45PCLOT.js.map → NumericDensity.unit.spec-LSEM4OEY.js.map} +0 -0
  718. /package/dist/{NumericHandler-SIM4E2Z5.js.map → NumericHandler-VGPDXP35.js.map} +0 -0
  719. /package/dist/{NumericHandler.unit.spec-NKLYDVTG.js.map → NumericHandler.unit.spec-NR3F7XHV.js.map} +0 -0
  720. /package/dist/{ProteomeInput-5KMNE3PZ.js.map → ProteomeInput-AUXWUIWK.js.map} +0 -0
  721. /package/dist/{RunChart2-N7AZVQXJ.js.map → RunChart2-SQ6TFOHD.js.map} +0 -0
  722. /package/dist/{Volcano-YH4RJTT5.js.map → Volcano-XHDH6UN7.js.map} +0 -0
  723. /package/dist/{WsiSamplesPlot-QPPB7OOD.js.map → WsiSamplesPlot-YUOAWG2A.js.map} +0 -0
  724. /package/dist/{adSandbox-R2QP74P7.js.map → adSandbox-VMMAL22L.js.map} +0 -0
  725. /package/dist/{app-AIIN4WDE.js.map → app-FX3KZ67X.js.map} +0 -0
  726. /package/dist/{app-FJT5VXMF.js.map → app-X7ZYEOZN.js.map} +0 -0
  727. /package/dist/{bam-QBO22VQB.js.map → bam-ZYLH4U5R.js.map} +0 -0
  728. /package/dist/{barchart-VDOP6FQU.js.map → barchart-MXSPTKV4.js.map} +0 -0
  729. /package/dist/{barchart.data-Z2E72EET.js.map → barchart.data-ZWF6EVJH.js.map} +0 -0
  730. /package/dist/{barchart.events-NUYQBI5S.js.map → barchart.events-XON2ANOC.js.map} +0 -0
  731. /package/dist/{barchart.integration.spec-COVZPXMH.js.map → barchart.integration.spec-PJIENJGT.js.map} +0 -0
  732. /package/dist/{bars.renderer-JHCZDSM6.js.map → bars.renderer-57KSYAAT.js.map} +0 -0
  733. /package/dist/{block.init-RRHHCNSR.js.map → block.init-IJBRPZNM.js.map} +0 -0
  734. /package/dist/{block.mds.expressionrank-7NWBRUII.js.map → block.mds.expressionrank-3DANCP7E.js.map} +0 -0
  735. /package/dist/{block.mds.geneboxplot-4BAJJWCC.js.map → block.mds.geneboxplot-CRGSCZMG.js.map} +0 -0
  736. /package/dist/{block.mds.junction-XRUIHAF5.js.map → block.mds.junction-4UIH2ZYN.js.map} +0 -0
  737. /package/dist/{block.mds.svcnv-YZ7PL733.js.map → block.mds.svcnv-NF4UIRR2.js.map} +0 -0
  738. /package/dist/{block.svg-FUMP2J7A.js.map → block.svg-AIZ47JCQ.js.map} +0 -0
  739. /package/dist/{block.tk.aicheck-AIZEND45.js.map → block.tk.aicheck-7HZFGE63.js.map} +0 -0
  740. /package/dist/{block.tk.ase-H26PKO5U.js.map → block.tk.ase-U3VNPZEA.js.map} +0 -0
  741. /package/dist/{block.tk.bam-XNZFHSDQ.js.map → block.tk.bam-4TQ7P2OX.js.map} +0 -0
  742. /package/dist/{block.tk.bedgraphdot-QTDBLBO2.js.map → block.tk.bedgraphdot-MYHKKO6K.js.map} +0 -0
  743. /package/dist/{block.tk.bigwig.ui-OSRCPTQC.js.map → block.tk.bigwig.ui-E3YVGIDN.js.map} +0 -0
  744. /package/dist/{block.tk.hicstraw-7GH6LVIH.js.map → block.tk.hicstraw-Y4XOMG7T.js.map} +0 -0
  745. /package/dist/{block.tk.junction-AJYML4AW.js.map → block.tk.junction-T5C7LK6F.js.map} +0 -0
  746. /package/dist/{block.tk.junction.textmatrixui-4RIH3EZI.js.map → block.tk.junction.textmatrixui-Z3ACCVXH.js.map} +0 -0
  747. /package/dist/{block.tk.ld-AJYQ4C6T.js.map → block.tk.ld-Y5KDA5AU.js.map} +0 -0
  748. /package/dist/{block.tk.menu-57OP5UW5.js.map → block.tk.menu-EWRRISDY.js.map} +0 -0
  749. /package/dist/{block.tk.pgv-XO7HP5MM.js.map → block.tk.pgv-3JYGOZVQ.js.map} +0 -0
  750. /package/dist/{brainImaging-65QDNR4D.js.map → brainImaging-P3AF3C5N.js.map} +0 -0
  751. /package/dist/{chunk-7EMWHCVW.js.map → chunk-2JR7RPB6.js.map} +0 -0
  752. /package/dist/{chunk-72X7LSBN.js.map → chunk-3FVIDQOX.js.map} +0 -0
  753. /package/dist/{chunk-VGJSASRT.js.map → chunk-3K2O2NIH.js.map} +0 -0
  754. /package/dist/{chunk-6GN7X6LU.js.map → chunk-3RSJU6YM.js.map} +0 -0
  755. /package/dist/{chunk-W6ME65LV.js.map → chunk-3ZKD6C5S.js.map} +0 -0
  756. /package/dist/{chunk-XAVNZNXQ.js.map → chunk-46AEH34Z.js.map} +0 -0
  757. /package/dist/{chunk-UOVALHAJ.js.map → chunk-4CQVC6XL.js.map} +0 -0
  758. /package/dist/{chunk-QQZ3SBF3.js.map → chunk-5FXNI724.js.map} +0 -0
  759. /package/dist/{chunk-I5RAQKKJ.js.map → chunk-7PFRBGMN.js.map} +0 -0
  760. /package/dist/{chunk-VGYTAYFK.js.map → chunk-A4Z3CI24.js.map} +0 -0
  761. /package/dist/{chunk-YZK37YCC.js.map → chunk-AI2LUQS6.js.map} +0 -0
  762. /package/dist/{chunk-UJKW42DI.js.map → chunk-AJYJW4LX.js.map} +0 -0
  763. /package/dist/{chunk-DD4R5P6W.js.map → chunk-BKPDYW5T.js.map} +0 -0
  764. /package/dist/{chunk-5OUTR67M.js.map → chunk-BMS32SNA.js.map} +0 -0
  765. /package/dist/{chunk-BWGU5NJS.js.map → chunk-CJPGYPI3.js.map} +0 -0
  766. /package/dist/{chunk-O3JB4PIX.js.map → chunk-CTQH7LQ6.js.map} +0 -0
  767. /package/dist/{chunk-DKVUOBIE.js.map → chunk-D5CVYITI.js.map} +0 -0
  768. /package/dist/{chunk-HKSNADSX.js.map → chunk-DMSX5PSO.js.map} +0 -0
  769. /package/dist/{chunk-VOUMS6IP.js.map → chunk-E3JRW3T3.js.map} +0 -0
  770. /package/dist/{chunk-SHWLROJG.js.map → chunk-E574SMCX.js.map} +0 -0
  771. /package/dist/{chunk-LTOBEUM2.js.map → chunk-E76O5Z42.js.map} +0 -0
  772. /package/dist/{chunk-3SZ6GKLB.js.map → chunk-EEW443GL.js.map} +0 -0
  773. /package/dist/{chunk-6A3IPDE2.js.map → chunk-F2WPS7VY.js.map} +0 -0
  774. /package/dist/{chunk-322QC6R4.js.map → chunk-FYFX42YD.js.map} +0 -0
  775. /package/dist/{chunk-ORL44TIK.js.map → chunk-G6RZYGWY.js.map} +0 -0
  776. /package/dist/{chunk-VHOEJBFP.js.map → chunk-GTZV2UZV.js.map} +0 -0
  777. /package/dist/{chunk-W55XSG6K.js.map → chunk-H34LAFGH.js.map} +0 -0
  778. /package/dist/{chunk-J4SOF2ZH.js.map → chunk-I2R5O2XX.js.map} +0 -0
  779. /package/dist/{chunk-PCZNTK74.js.map → chunk-IEYDMN3H.js.map} +0 -0
  780. /package/dist/{chunk-N2SKTCDK.js.map → chunk-JWBP4ZZB.js.map} +0 -0
  781. /package/dist/{chunk-B6CSYKZJ.js.map → chunk-KVIH5JPC.js.map} +0 -0
  782. /package/dist/{chunk-57RBC6IZ.js.map → chunk-L5HCOTRF.js.map} +0 -0
  783. /package/dist/{chunk-XMLURPEP.js.map → chunk-LHKDLWG5.js.map} +0 -0
  784. /package/dist/{chunk-G6O3URDN.js.map → chunk-LQJMCE7G.js.map} +0 -0
  785. /package/dist/{chunk-WHI6466S.js.map → chunk-MNIBZTQE.js.map} +0 -0
  786. /package/dist/{chunk-CC3GFVV6.js.map → chunk-MP3DN6JK.js.map} +0 -0
  787. /package/dist/{chunk-R2MMURGK.js.map → chunk-N5OVBS5L.js.map} +0 -0
  788. /package/dist/{chunk-OEDZHPBJ.js.map → chunk-NEKAGDTL.js.map} +0 -0
  789. /package/dist/{chunk-4DXZGZOB.js.map → chunk-NPCNDM6Y.js.map} +0 -0
  790. /package/dist/{chunk-ULPMYS5B.js.map → chunk-NYN2WQN3.js.map} +0 -0
  791. /package/dist/{chunk-QNETLNPB.js.map → chunk-O6WL7USJ.js.map} +0 -0
  792. /package/dist/{chunk-3ZLJDFJU.js.map → chunk-OH5I6I2D.js.map} +0 -0
  793. /package/dist/{chunk-36EHIPV4.js.map → chunk-PTQ774XH.js.map} +0 -0
  794. /package/dist/{chunk-DR6H3QAA.js.map → chunk-PXOH4ZN2.js.map} +0 -0
  795. /package/dist/{chunk-54EMVNPW.js.map → chunk-QG4BJUM7.js.map} +0 -0
  796. /package/dist/{chunk-ZXTHADSC.js.map → chunk-RITTG5WN.js.map} +0 -0
  797. /package/dist/{chunk-KPJZBCVI.js.map → chunk-SMSFTTEO.js.map} +0 -0
  798. /package/dist/{chunk-EVN6KWPN.js.map → chunk-TBZKVKR4.js.map} +0 -0
  799. /package/dist/{chunk-KSGA62R2.js.map → chunk-TJYRBEBK.js.map} +0 -0
  800. /package/dist/{chunk-QH6W3NVF.js.map → chunk-TLTS33EY.js.map} +0 -0
  801. /package/dist/{chunk-VV36JRUF.js.map → chunk-TMM7BWW7.js.map} +0 -0
  802. /package/dist/{chunk-ZTYNN6G5.js.map → chunk-TTC4MNEM.js.map} +0 -0
  803. /package/dist/{chunk-7FACFCZK.js.map → chunk-UXIZYI3X.js.map} +0 -0
  804. /package/dist/{chunk-EH4NQ7C4.js.map → chunk-VIUATDO2.js.map} +0 -0
  805. /package/dist/{chunk-2XCUERHJ.js.map → chunk-VIUDFDN4.js.map} +0 -0
  806. /package/dist/{chunk-ODG6RD7P.js.map → chunk-W5OEFZCR.js.map} +0 -0
  807. /package/dist/{chunk-GNIK4JYM.js.map → chunk-WXSRK3XR.js.map} +0 -0
  808. /package/dist/{chunk-NGM3ZLIP.js.map → chunk-XHGMDBTS.js.map} +0 -0
  809. /package/dist/{chunk-WSDUD52Y.js.map → chunk-XVGS3QXS.js.map} +0 -0
  810. /package/dist/{chunk-NSXZPWRP.js.map → chunk-XYNYQMLH.js.map} +0 -0
  811. /package/dist/{chunk-35SCELN4.js.map → chunk-Y4JJMUWG.js.map} +0 -0
  812. /package/dist/{chunk-UI7OCM2A.js.map → chunk-Z457XQSX.js.map} +0 -0
  813. /package/dist/{condition-HDVYPJJD.js.map → condition-QXTOTGZX.js.map} +0 -0
  814. /package/dist/{controls-YEEW46C6.js.map → controls-7TDB75LK.js.map} +0 -0
  815. /package/dist/{controls.config-C535H5DL.js.map → controls.config-IBF5ILFP.js.map} +0 -0
  816. /package/dist/{cuminc-II7NFIFP.js.map → cuminc-CAHPKW7W.js.map} +0 -0
  817. /package/dist/{cuminc.integration.spec-B4N6OMBJ.js.map → cuminc.integration.spec-NNSQGBRI.js.map} +0 -0
  818. /package/dist/{customdata.inputui-AI4ZBIEP.js.map → customdata.inputui-RRTQK7OK.js.map} +0 -0
  819. /package/dist/{dataDownload-ZQYLXN6D.js.map → dataDownload-SOUCBKXM.js.map} +0 -0
  820. /package/dist/{dataDownload.integration.spec-2PKYZ2AY.js.map → dataDownload.integration.spec-C6TLWSSO.js.map} +0 -0
  821. /package/dist/{databrowser.ui-WGD7D3XV.js.map → databrowser.ui-KLFEU5QA.js.map} +0 -0
  822. /package/dist/{dnaMethylation-WGJMJL5B.js.map → dnaMethylation-WOKGG33W.js.map} +0 -0
  823. /package/dist/{dnaMethylation.integration.spec-DO3PV4MO.js.map → dnaMethylation.integration.spec-YUPP42UK.js.map} +0 -0
  824. /package/dist/{dofetch-RADX3AFU.js.map → dofetch-V7PLLWSO.js.map} +0 -0
  825. /package/dist/{e2pca-KOAAU2JX.js.map → e2pca-VT7EM4E3.js.map} +0 -0
  826. /package/dist/{ep-CXCATXYH.js.map → ep-X6B43UXE.js.map} +0 -0
  827. /package/dist/{expclust.gdc.spec-UJO2R3CW.js.map → expclust.gdc.spec-DTBFOXBC.js.map} +0 -0
  828. /package/dist/{facet-2FBUAD7P.js.map → facet-T5ZX7ZGV.js.map} +0 -0
  829. /package/dist/{gb-VCJFV63W.js.map → gb-TWXREZIP.js.map} +0 -0
  830. /package/dist/{geneExpClustering-FUNS6D2P.js.map → geneExpClustering-2G6YDCIN.js.map} +0 -0
  831. /package/dist/{geneExpression-2BWWGYL4.js.map → geneExpression-2A4ZPT7K.js.map} +0 -0
  832. /package/dist/{geneExpression-2OPFWV2K.js.map → geneExpression-ZHQH6SNA.js.map} +0 -0
  833. /package/dist/{geneExpression.unit.spec-G7BSHJQT.js.map → geneExpression.unit.spec-2M223S4P.js.map} +0 -0
  834. /package/dist/{geneORA-S3KQMBYL.js.map → geneORA-YLIRUMCZ.js.map} +0 -0
  835. /package/dist/{geneRanking-UZ36XAL7.js.map → geneRanking-JDJXNGEC.js.map} +0 -0
  836. /package/dist/{geneVariant-OOZ2SBXO.js.map → geneVariant-5ZIOT5BT.js.map} +0 -0
  837. /package/dist/{geneVariant-ZHNVEKQ6.js.map → geneVariant-GIXIMJ2I.js.map} +0 -0
  838. /package/dist/{geneVariant.integration.spec-2C7EWKEV.js.map → geneVariant.integration.spec-QCROW73S.js.map} +0 -0
  839. /package/dist/{genefusion.ui-ASICJNII.js.map → genefusion.ui-56UQLUKJ.js.map} +0 -0
  840. /package/dist/{geneset-SNM4M6UM.js.map → geneset-ACRMGBJO.js.map} +0 -0
  841. /package/dist/{genomeBrowser.spec-DJIRW2X7.js.map → genomeBrowser.spec-EDILOQON.js.map} +0 -0
  842. /package/dist/{grin2-7AOJP5QJ.js.map → grin2-5P7CYUT7.js.map} +0 -0
  843. /package/dist/{gsea-SPTQJW67.js.map → gsea-2PQ5HNNT.js.map} +0 -0
  844. /package/dist/{hierCluster-KDE5SMYP.js.map → hierCluster-H5HB7FPW.js.map} +0 -0
  845. /package/dist/{hierCluster-XG4YLVL3.js.map → hierCluster-L3LCP2II.js.map} +0 -0
  846. /package/dist/{hierCluster.config-VNEEJCKJ.js.map → hierCluster.config-6UIJWCND.js.map} +0 -0
  847. /package/dist/{hierCluster.integration.spec-SSDN7LSH.js.map → hierCluster.integration.spec-EVAPT2VF.js.map} +0 -0
  848. /package/dist/{hierCluster.interactivity-DKBSJ644.js.map → hierCluster.interactivity-7MW6ZT6O.js.map} +0 -0
  849. /package/dist/{hierCluster.renderers-OG6LZAT7.js.map → hierCluster.renderers-F34EVY5J.js.map} +0 -0
  850. /package/dist/{imagePlot-M5JSHEY4.js.map → imagePlot-RSFZ2OKD.js.map} +0 -0
  851. /package/dist/{importPlot-YH7ZY6RJ.js.map → importPlot-DQFWY5A7.js.map} +0 -0
  852. /package/dist/{isoformExpression-EV27MKYZ.js.map → isoformExpression-2KANPCBH.js.map} +0 -0
  853. /package/dist/{isoformExpression.unit.spec-7T2GOHH3.js.map → isoformExpression.unit.spec-6FSMHT4K.js.map} +0 -0
  854. /package/dist/{launch.adhoc-NOISOX5E.js.map → launch.adhoc-ZYTIRVIC.js.map} +0 -0
  855. /package/dist/{leftlabel.sample-42AX4KTV.js.map → leftlabel.sample-66U6MHPN.js.map} +0 -0
  856. /package/dist/{legacyDataset-SWJCAWIR.js.map → legacyDataset-TNIIJABK.js.map} +0 -0
  857. /package/dist/{lollipop-LQCQBTSX.js.map → lollipop-PJDUFWEY.js.map} +0 -0
  858. /package/dist/{maf-U237OWZ3.js.map → maf-DLJHCKHJ.js.map} +0 -0
  859. /package/dist/{maftimeline-NLZLMHT2.js.map → maftimeline-NK5QYJMJ.js.map} +0 -0
  860. /package/dist/{matrix-DZJXYRYN.js.map → matrix-7BFYR6QL.js.map} +0 -0
  861. /package/dist/{matrix-Y5345QQG.js.map → matrix-USAB2CHO.js.map} +0 -0
  862. /package/dist/{matrix.cells-PT7S74QP.js.map → matrix.cells-OTAXAJ4N.js.map} +0 -0
  863. /package/dist/{matrix.config-2ORCUWKX.js.map → matrix.config-AL4WSFZ7.js.map} +0 -0
  864. /package/dist/{matrix.data-C6VPQJJ4.js.map → matrix.data-BDHCSN2G.js.map} +0 -0
  865. /package/dist/{matrix.groups-CEOCG2CT.js.map → matrix.groups-MV2D2636.js.map} +0 -0
  866. /package/dist/{matrix.integration.spec-U4B3JB6N.js.map → matrix.integration.spec-DESORC2Y.js.map} +0 -0
  867. /package/dist/{matrix.interactivity-GFLIFIER.js.map → matrix.interactivity-H7EJW3P2.js.map} +0 -0
  868. /package/dist/{matrix.layout-DOVDHTDX.js.map → matrix.layout-7CAS2IBO.js.map} +0 -0
  869. /package/dist/{matrix.legend-JE4ZSLP7.js.map → matrix.legend-JDVG2JDF.js.map} +0 -0
  870. /package/dist/{matrix.renderers-GPUJQ7KF.js.map → matrix.renderers-PDR5FIBC.js.map} +0 -0
  871. /package/dist/{matrix.serieses-REE4DCSR.js.map → matrix.serieses-QVDS5HKK.js.map} +0 -0
  872. /package/dist/{matrix.sort-VD5URUWY.js.map → matrix.sort-HCK4CSTJ.js.map} +0 -0
  873. /package/dist/{matrix.sort.unit.spec-4IOFVHJN.js.map → matrix.sort.unit.spec-2GC4E26N.js.map} +0 -0
  874. /package/dist/{matrix.sorterUi-VQYY6KBK.js.map → matrix.sorterUi-XGBQOPG4.js.map} +0 -0
  875. /package/dist/{matrix.sorterUi.unit.spec-V5O2EJBX.js.map → matrix.sorterUi.unit.spec-BJQKDU2F.js.map} +0 -0
  876. /package/dist/{mavb-SQDA3B2B.js.map → mavb-6E6Z4LPK.js.map} +0 -0
  877. /package/dist/{mds.fimo-ZJSEPLD7.js.map → mds.fimo-5P2TK5U4.js.map} +0 -0
  878. /package/dist/{mds.samplescatterplot-Y5V73GOY.js.map → mds.samplescatterplot-KLKOD4AS.js.map} +0 -0
  879. /package/dist/{mds.survivalplot-CZBRMHYN.js.map → mds.survivalplot-SWQCOFIU.js.map} +0 -0
  880. /package/dist/{numericDictTermCluster-TFXBBUVI.js.map → numericDictTermCluster-WIVO33AV.js.map} +0 -0
  881. /package/dist/{oncomatrix-ZILACPPI.js.map → oncomatrix-SDUUQZCK.js.map} +0 -0
  882. /package/dist/{oncomatrix.spec-RLIVVVD6.js.map → oncomatrix.spec-YGQYIUDT.js.map} +0 -0
  883. /package/dist/{plot.2dvaf-BNRZPIKU.js.map → plot.2dvaf-K53KTP5W.js.map} +0 -0
  884. /package/dist/{plot.app-NRUARQCN.js.map → plot.app-FNJVWLPQ.js.map} +0 -0
  885. /package/dist/{plot.barplot-342AYQC7.js.map → plot.barplot-VTC3N6BR.js.map} +0 -0
  886. /package/dist/{plot.boxplot-OHEJDPTW.js.map → plot.boxplot-RJFGQSLA.js.map} +0 -0
  887. /package/dist/{plot.brainImaging-KV72PAON.js.map → plot.brainImaging-6KVNPPMT.js.map} +0 -0
  888. /package/dist/{plot.disco-OUE4RFHL.js.map → plot.disco-ZFH5RK6B.js.map} +0 -0
  889. /package/dist/{plot.dzi-T3GPUH36.js.map → plot.dzi-IA2SOFUD.js.map} +0 -0
  890. /package/dist/{plot.ssgq-WJHGMXW5.js.map → plot.ssgq-QARGQVKB.js.map} +0 -0
  891. /package/dist/{plot.vaf2cov-NGD5PCV4.js.map → plot.vaf2cov-2JUXYCPG.js.map} +0 -0
  892. /package/dist/{plot.wsi-2MU5BDG3.js.map → plot.wsi-C2DULA7U.js.map} +0 -0
  893. /package/dist/{profilePlot-OMVO3K4H.js.map → profilePlot-SVI3QKMD.js.map} +0 -0
  894. /package/dist/{qualitative-MEYBRUC6.js.map → qualitative-AQFKAZID.js.map} +0 -0
  895. /package/dist/{regression-ZPDPLI6G.js.map → regression-DLPBCDZT.js.map} +0 -0
  896. /package/dist/{regression.inputs-QOSBAGL6.js.map → regression.inputs-42LY4MEZ.js.map} +0 -0
  897. /package/dist/{regression.inputs.term-HMUMPY7X.js.map → regression.inputs.term-TTUFFPG6.js.map} +0 -0
  898. /package/dist/{regression.inputs.values.table-VMCTZHLG.js.map → regression.inputs.values.table-CJAPTSMS.js.map} +0 -0
  899. /package/dist/{regression.integration.spec-RP74JTAA.js.map → regression.integration.spec-UDA26OGS.js.map} +0 -0
  900. /package/dist/{regression.results-5XC6M67C.js.map → regression.results-IA3C7SHR.js.map} +0 -0
  901. /package/dist/{regression.spec-EZYM24J7.js.map → regression.spec-HEXCL3QV.js.map} +0 -0
  902. /package/dist/{report-ZOVQCOGQ.js.map → report-4CFOWNPJ.js.map} +0 -0
  903. /package/dist/{sampleScatter.spec-CD52FEOC.js.map → sampleScatter.spec-N6V4BQ5Q.js.map} +0 -0
  904. /package/dist/{sampleView-SVTLSWRG.js.map → sampleView-CZF7U23I.js.map} +0 -0
  905. /package/dist/{samplelst-HXF5POJD.js.map → samplelst-XUGDS5TU.js.map} +0 -0
  906. /package/dist/{samplematrix-NYDAH74I.js.map → samplematrix-R5PZLZDE.js.map} +0 -0
  907. /package/dist/{sc-JIDT4W4K.js.map → sc-WTZZA5J5.js.map} +0 -0
  908. /package/dist/{selectGenomeWithTklst-OSB7B6L3.js.map → selectGenomeWithTklst-2S2MXVCI.js.map} +0 -0
  909. /package/dist/{singleCellCellType-3BH7LWQ6.js.map → singleCellCellType-LJWFG7MY.js.map} +0 -0
  910. /package/dist/{singleCellCellType.unit.spec-RU4RJXFF.js.map → singleCellCellType.unit.spec-RGN2XVUR.js.map} +0 -0
  911. /package/dist/{singleCellGeneExpression-3UA4YER7.js.map → singleCellGeneExpression-IW2QXTTU.js.map} +0 -0
  912. /package/dist/{singleCellGeneExpression.unit.spec-4ZTBG37H.js.map → singleCellGeneExpression.unit.spec-4PO3Q7TM.js.map} +0 -0
  913. /package/dist/{singleCellPlot-ZUAWK5RE.js.map → singleCellPlot-6EZ6JXCM.js.map} +0 -0
  914. /package/dist/{singlecell-BGJZB7MF.js.map → singlecell-3LFPQ6KO.js.map} +0 -0
  915. /package/dist/{singlecell-RO3BL5OO.js.map → singlecell-NTTAVVMR.js.map} +0 -0
  916. /package/dist/{snp-HD7VQKBR.js.map → snp-XB4IBG4Z.js.map} +0 -0
  917. /package/dist/{snp.unit.spec-ISXCLMWW.js.map → snp.unit.spec-HAJPM53L.js.map} +0 -0
  918. /package/dist/{snplocus-IL5Z4XWV.js.map → snplocus-HE6TITSX.js.map} +0 -0
  919. /package/dist/{spliceevent.a53ss.diagram-LLJSPV7M.js.map → spliceevent.a53ss.diagram-TCZMBMD7.js.map} +0 -0
  920. /package/dist/{spliceevent.exonskip.diagram-LAOIOIST.js.map → spliceevent.exonskip.diagram-VESOF6UC.js.map} +0 -0
  921. /package/dist/{spliceevent.noeventdiagram-MVA7Q3HT.js.map → spliceevent.noeventdiagram-4K7FMO4F.js.map} +0 -0
  922. /package/dist/{ssGSEA-7T6S3DSE.js.map → ssGSEA-2XYMX36P.js.map} +0 -0
  923. /package/dist/{ssGSEA.unit.spec-XJ3W4NWX.js.map → ssGSEA.unit.spec-J36KM2HO.js.map} +0 -0
  924. /package/dist/{summarizeCnvGeneexp-RRP6JUV6.js.map → summarizeCnvGeneexp-LYVDZXXD.js.map} +0 -0
  925. /package/dist/{summarizeGeneexpSurvival-AFLHDD6Q.js.map → summarizeGeneexpSurvival-Y52TGAHF.js.map} +0 -0
  926. /package/dist/{summarizeMutationCnv-NABUYHMX.js.map → summarizeMutationCnv-6EEJT3PV.js.map} +0 -0
  927. /package/dist/{summarizeMutationDiagnosis-2LQ7JU3K.js.map → summarizeMutationDiagnosis-HZKXHOOQ.js.map} +0 -0
  928. /package/dist/{summarizeMutationSurvival-3WBT5TXG.js.map → summarizeMutationSurvival-TU7TQYFQ.js.map} +0 -0
  929. /package/dist/{summary-FRDKOFXW.js.map → summary-4QQZUAMU.js.map} +0 -0
  930. /package/dist/{summary.integration.spec-ZLRIA7G2.js.map → summary.integration.spec-SLIIM4HN.js.map} +0 -0
  931. /package/dist/{summaryInput-4JO6MHP4.js.map → summaryInput-6HROPKCE.js.map} +0 -0
  932. /package/dist/{sunburst-DRCVSC2X.js.map → sunburst-MBJJPERL.js.map} +0 -0
  933. /package/dist/{survival-AK75COPY.js.map → survival-CXLMQSV2.js.map} +0 -0
  934. /package/dist/{survival-IF5NI3A6.js.map → survival-QSL2KDKD.js.map} +0 -0
  935. /package/dist/{survival.integration.spec-7IWBTPJG.js.map → survival.integration.spec-EUAAALVW.js.map} +0 -0
  936. /package/dist/{svgraph-QBDF2SLB.js.map → svgraph-JM5MHQDX.js.map} +0 -0
  937. /package/dist/{svmr-O4GJJUT2.js.map → svmr-MCMST2FL.js.map} +0 -0
  938. /package/dist/{table-FQAIXKLE.js.map → table-MVX3IMAL.js.map} +0 -0
  939. /package/dist/{termCollection-ZO5PZ7E3.js.map → termCollection-FZ2SCVA7.js.map} +0 -0
  940. /package/dist/{termCollection-GMDDL3L7.js.map → termCollection-IGC7REFK.js.map} +0 -0
  941. /package/dist/{termCollection.unit.spec-5JBCTXHX.js.map → termCollection.unit.spec-VY2EZZIP.js.map} +0 -0
  942. /package/dist/{tk-GJX23IV7.js.map → tk-5F3TWZ2G.js.map} +0 -0
  943. /package/dist/{tp.ui-T7FVMTGQ.js.map → tp.ui-IURWTMAS.js.map} +0 -0
  944. /package/dist/{tvs.dt-X7L7NSU6.js.map → tvs.dt-BPZCFPYK.js.map} +0 -0
  945. /package/dist/{tvs.dtcnv.categorical-73G2V6CH.js.map → tvs.dtcnv.categorical-UFS62DTR.js.map} +0 -0
  946. /package/dist/{tvs.dtcnv.continuous-DWFJL3X7.js.map → tvs.dtcnv.continuous-R6YXNNLA.js.map} +0 -0
  947. /package/dist/{tvs.dtfusion-HQADHCSV.js.map → tvs.dtfusion-FGXXS4XX.js.map} +0 -0
  948. /package/dist/{tvs.dtsnvindel-PY5OBMGW.js.map → tvs.dtsnvindel-DR43K7X3.js.map} +0 -0
  949. /package/dist/{tvs.dtsv-OTBEEWSW.js.map → tvs.dtsv-NO34GIOL.js.map} +0 -0
  950. /package/dist/{tvs.numeric-WGDHEBJV.js.map → tvs.numeric-KYAU5OV3.js.map} +0 -0
  951. /package/dist/{tvs.samplelst-LCXSU5MG.js.map → tvs.samplelst-2QP7IV2Y.js.map} +0 -0
  952. /package/dist/{tvs.termCollection-L527XN4X.js.map → tvs.termCollection-UEJDG22G.js.map} +0 -0
  953. /package/dist/{violin-6VKRUQV3.js.map → violin-NBZTGGYF.js.map} +0 -0
  954. /package/dist/{violin.integration.spec-RJATDLQH.js.map → violin.integration.spec-5CLYJSAR.js.map} +0 -0
  955. /package/dist/{violin.interactivity-SKF5H7MN.js.map → violin.interactivity-KXVKTT22.js.map} +0 -0
  956. /package/dist/{violin.renderer-GB4TPX3B.js.map → violin.renderer-37OF6K7Q.js.map} +0 -0
  957. /package/dist/{vocabulary-D3W44IWE.js.map → vocabulary-GR6J3VKW.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/GradientColorProvider.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/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 } 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\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].includes(Number(dObject.dt))) {\n\t\t\t\tconst idx = this.reference.chromosomesOrder.indexOf(dObject.chr)\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 segment 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: dObject.dt == dtcnv ? 'CNV' : 'LOH',\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: dObject.dt == dtcnv ? 'CNV' : 'LOH',\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 percentilePair = new PercentileMapper().map(\n\t\t\t\tthis.cnvData.map(data => data.value),\n\t\t\t\tthis.settings.Disco.cnvPercentile\n\t\t\t)\n\t\t\tthis.percentilePositive = DataMapper.capMaxValue(percentilePair.positive, this.gainCapped, this.lossCapped)\n\t\t\tthis.percentileNegative = DataMapper.capMaxValue(percentilePair.negative, this.gainCapped, this.lossCapped)\n\n\t\t\tthis.cnvMaxPercentileAbs = Math.min(\n\t\t\t\tthis.settings.Disco.cnvCapping,\n\t\t\t\tMath.max(this.percentilePositive, Math.abs(this.percentileNegative))\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\tif (this.cnvGainMaxValue == undefined || this.cnvGainMaxValue < data.value) {\n\t\t\t\tthis.cnvGainMaxValue = data.value\n\t\t\t}\n\n\t\t\tif (this.cnvLossMaxValue == undefined || this.cnvLossMaxValue > data.value) {\n\t\t\t\tthis.cnvLossMaxValue = data.value\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 type { 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\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) {\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.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\treturn (\n\t\t\t(this.snvClassMap.size > 0 ? 1 : 0) +\n\t\t\t(this.cnvClassMap.size > 0 ? 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 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 GradientColorProvider from './GradientColorProvider.ts'\n\nexport default class LohLegend {\n\tminValue: number\n\tmaxValue: number\n\tcolorStartValue: string\n\tcolorEndValue: string\n\tconstructor(minValue: number, maxValue: number) {\n\t\tthis.minValue = minValue\n\t\tthis.maxValue = maxValue\n\t\tthis.colorStartValue = GradientColorProvider.provide(minValue)\n\t\tthis.colorEndValue = GradientColorProvider.provide(maxValue)\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'\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\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 = startAngle + restAngle / 2\n\t\t\t}\n\n\t\t\tconst innerRadius = this.calculateInnerRadius(data)\n\n\t\t\tconst outerRadius = this.calculateOuterRadius(data)\n\n\t\t\tconst color = this.getColor(data.value)\n\n\t\t\tconst arc: CnvArc = {\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.value,\n\t\t\t\tunit: this.cnvUnit,\n\t\t\t\tsampleName: [this.sampleName]\n\t\t\t}\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 + (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}\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 } 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\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\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 (label.stop >= cnv.start && cnv.stop >= label.start && label.chr == cnv.chr) {\n\t\t\t\t\tconst mutation: CnvTooltip = {\n\t\t\t\t\t\tvalue: cnv.value,\n\t\t\t\t\t\tcolor: 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\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\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\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", "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 { 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.lohMinValue && dataHolder.lohMaxValue) {\n\t\t\tlohLegend = new LohLegend(dataHolder.lohMinValue, dataHolder.lohMaxValue)\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)\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 } 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)) 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.cnvRenderingType == CnvRenderingType.heatmap) {\n\t\t\tthis.mapCnvHeatmap(legend, legendJSON, order++)\n\t\t} else if (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.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\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 mapLoh(legend: Legend, legendJSON: Array<any>, order: number) {\n\t\tif (!legend.lohLegend) return\n\t\tconst lohItems: Array<any> = []\n\n\t\tlohItems.push({\n\t\t\ttermid: legend.lohTitle,\n\t\t\tkey: 'min',\n\t\t\ttext: 'min',\n\t\t\tcolor: legend.lohLegend.colorStartValue,\n\t\t\torder: 0\n\t\t})\n\n\t\tlohItems.push({\n\t\t\ttermid: legend.lohTitle,\n\t\t\tkey: 'max',\n\t\t\ttext: 'max',\n\t\t\tcolor: legend.lohLegend.colorEndValue,\n\t\t\torder: 1\n\t\t})\n\n\t\tlegendJSON.push({\n\t\t\tname: legend.lohTitle,\n\t\t\torder: order,\n\t\t\titems: lohItems\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'\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\n\tconstructor(\n\t\tanimationDuration: number,\n\t\tfontSize: number,\n\t\tgeneClickListener: (gene: string, mnames: Array<string>) => void\n\t) {\n\t\tthis.animationDuration = animationDuration\n\t\tthis.fontSize = fontSize\n\t\tthis.geneClickListener = geneClickListener\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('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', (mouseEvent: MouseEvent) => {\n\t\t\t\t\t\tconst table = table2col({ holder: menu.d })\n\t\t\t\t\t\tthis.createTooltip(table, label)\n\t\t\t\t\t\tmenu.show(mouseEvent.x, mouseEvent.y)\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseout', () => {\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\tcreateTooltip(table: any, label: Label) {\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 (label.cnvTooltip) {\n\t\t\tlabel.cnvTooltip.forEach((cnv: CnvTooltip) => {\n\t\t\t\tconst [td1, td2] = table.addRow()\n\t\t\t\ttd1.text('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\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.text(cnv.value)\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 } 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 = dtcnv\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\t{\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\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\t{\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 } 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))\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 = dtcnv\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\t{\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)}; 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\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) {\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)\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
+ }