@sjcrh/proteinpaint-client 2.182.0 → 2.182.1

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 (1007) hide show
  1. package/dist/2dmaf-YHYYSSKR.js +1371 -0
  2. package/dist/AIProjectAdmin-D4AASQBM.js +830 -0
  3. package/dist/AIProjectAdmin-D4AASQBM.js.map +7 -0
  4. package/dist/AppHeader-T4ZLY3VG.js +833 -0
  5. package/dist/BoxPlot-DIU4YXNK.js +1217 -0
  6. package/dist/BoxPlot-DIU4YXNK.js.map +7 -0
  7. package/dist/CorrelationVolcano-EXH4P56S.js +617 -0
  8. package/dist/DE-C5K2TVUQ.js +93 -0
  9. package/dist/DEinput-KVILE7QQ.js +297 -0
  10. package/dist/DifferentialAnalysis-P6GKHAS5.js +238 -0
  11. package/dist/Disco-IMLXEBPG.js +3235 -0
  12. package/dist/Disco-IMLXEBPG.js.map +7 -0
  13. package/dist/Disco.UI-4A2P5Q55.js +242 -0
  14. package/dist/DmrPlot-6EEEGD32.js +640 -0
  15. package/dist/GB-XFO5I6ND.js +1125 -0
  16. package/dist/HicApp-3LFHOOAR.js +2248 -0
  17. package/dist/NumBinaryEditor-74PY52BP.js +268 -0
  18. package/dist/NumBinaryEditor.unit.spec-2PYZ7P2R.js +284 -0
  19. package/dist/NumContEditor-BMWALLQM.js +105 -0
  20. package/dist/NumContEditor.unit.spec-ETVLVX6A.js +167 -0
  21. package/dist/NumCustomBinEditor-2XJ6GUWY.js +36 -0
  22. package/dist/NumCustomBinEditor.unit.spec-TZVL553E.js +282 -0
  23. package/dist/NumDiscreteEditor-4LNLKAXT.js +177 -0
  24. package/dist/NumDiscreteEditor.unit.spec-KQND2XAE.js +200 -0
  25. package/dist/NumRegularBinEditor-OYELFDIB.js +36 -0
  26. package/dist/NumRegularBinEditor.unit.spec-44SALKLH.js +225 -0
  27. package/dist/NumSplineEditor-SENQC4P2.js +190 -0
  28. package/dist/NumSplineEditor.unit.spec-XKB4XXU4.js +197 -0
  29. package/dist/NumericDensity-GCNWO7YS.js +36 -0
  30. package/dist/NumericDensity.unit.spec-7LWNOUYK.js +219 -0
  31. package/dist/NumericHandler-EMQBI5UI.js +37 -0
  32. package/dist/NumericHandler.unit.spec-TEELPRIM.js +217 -0
  33. package/dist/RunChart2-LJBC5X2H.js +756 -0
  34. package/dist/RunChart2-LJBC5X2H.js.map +7 -0
  35. package/dist/SC-3EB6UYIS.js +682 -0
  36. package/dist/SC-3EB6UYIS.js.map +7 -0
  37. package/dist/Volcano-CPULLVYV.js +1185 -0
  38. package/dist/Volcano-CPULLVYV.js.map +7 -0
  39. package/dist/WSIViewer-2YCT4LCM.js +47974 -0
  40. package/dist/WSIViewer-2YCT4LCM.js.map +7 -0
  41. package/dist/WsiSamplesPlot-B2DM7Z3Q.js +163 -0
  42. package/dist/adSandbox-INF3NNEV.js +36 -0
  43. package/dist/alphaGenome-CO4TQHXN.js +173 -0
  44. package/dist/app-63JU2YIT.js +47 -0
  45. package/dist/app-BL3POUOO.js +35 -0
  46. package/dist/app.js +22 -22
  47. package/dist/bam-SVEJYICC.js +857 -0
  48. package/dist/barchart-PDUXZAIH.js +45 -0
  49. package/dist/barchart.data-EXENRVMU.js +22 -0
  50. package/dist/barchart.events-MQNQTSWI.js +45 -0
  51. package/dist/barchart.integration.spec-DSO2377T.js +1675 -0
  52. package/dist/bars.renderer-S7A7I6BQ.js +12 -0
  53. package/dist/block-OO2NLGUP.js +6200 -0
  54. package/dist/block-OO2NLGUP.js.map +7 -0
  55. package/dist/block.init-7J5OHYKA.js +36 -0
  56. package/dist/block.mds.expressionrank-643H7PN7.js +357 -0
  57. package/dist/block.mds.geneboxplot-C222ODSL.js +826 -0
  58. package/dist/block.mds.junction-C5DJRUOK.js +1543 -0
  59. package/dist/block.mds.svcnv-4G74JQ7Y.js +6799 -0
  60. package/dist/block.svg-35KUC5R7.js +162 -0
  61. package/dist/block.tk.aicheck-LLWT6K6H.js +281 -0
  62. package/dist/block.tk.ase-PQUKY65E.js +363 -0
  63. package/dist/block.tk.bam-EUEOB7BR.js +1904 -0
  64. package/dist/block.tk.bedgraphdot-XAHUY545.js +382 -0
  65. package/dist/block.tk.bigwig.ui-HEOPNL3T.js +209 -0
  66. package/dist/block.tk.hicstraw-EPH3LEX2.js +821 -0
  67. package/dist/block.tk.junction-MIUDAIAR.js +2362 -0
  68. package/dist/block.tk.junction.textmatrixui-AVFUQBDS.js +197 -0
  69. package/dist/block.tk.ld-ED7YMBQ4.js +97 -0
  70. package/dist/block.tk.menu-3CVIECWQ.js +1027 -0
  71. package/dist/block.tk.pgv-HETJVWXH.js +942 -0
  72. package/dist/brainImaging-K3LHK3DD.js +421 -0
  73. package/dist/chat-BYX5ARUK.js +148 -0
  74. package/dist/chunk-25RP5OSE.js +1426 -0
  75. package/dist/chunk-25RP5OSE.js.map +7 -0
  76. package/dist/chunk-2K5DSRBJ.js +84 -0
  77. package/dist/chunk-2K5DSRBJ.js.map +7 -0
  78. package/dist/chunk-2LULD7RN.js +31 -0
  79. package/dist/chunk-2M6JV7YS.js +261 -0
  80. package/dist/chunk-2M6JV7YS.js.map +7 -0
  81. package/dist/chunk-2TJESM3Z.js +158 -0
  82. package/dist/chunk-2VFYZ3EY.js +102 -0
  83. package/dist/chunk-3CD5ZROA.js +4952 -0
  84. package/dist/chunk-3DCABJHB.js +381 -0
  85. package/dist/chunk-3MMKHYUM.js +95 -0
  86. package/dist/chunk-3PRPMJTG.js +55 -0
  87. package/dist/chunk-4JON7TLI.js +176 -0
  88. package/dist/chunk-4JON7TLI.js.map +7 -0
  89. package/dist/chunk-5HCB4HNL.js +147 -0
  90. package/dist/chunk-5JD4D5GD.js +215 -0
  91. package/dist/chunk-5UMPBVA6.js +534 -0
  92. package/dist/chunk-64FGLSIM.js +56 -0
  93. package/dist/chunk-64FGLSIM.js.map +7 -0
  94. package/dist/chunk-6ITDJ5UR.js +261 -0
  95. package/dist/chunk-6ITDJ5UR.js.map +7 -0
  96. package/dist/chunk-6LAE5AVA.js +13624 -0
  97. package/dist/chunk-6VLA5NEW.js +335 -0
  98. package/dist/chunk-6VLA5NEW.js.map +7 -0
  99. package/dist/chunk-7FKIAQ4K.js +17 -0
  100. package/dist/chunk-7FKIAQ4K.js.map +7 -0
  101. package/dist/chunk-7FTDQDVF.js +824 -0
  102. package/dist/chunk-7IEZ2KMW.js +142 -0
  103. package/dist/chunk-7RN3L2BX.js +1788 -0
  104. package/dist/chunk-7RN3L2BX.js.map +7 -0
  105. package/dist/chunk-A5AFIW2T.js +14 -0
  106. package/dist/chunk-A6TQGNDQ.js +421 -0
  107. package/dist/chunk-A6TQGNDQ.js.map +7 -0
  108. package/dist/chunk-AIBODF32.js +2784 -0
  109. package/dist/chunk-AQ4OP4GR.js +39 -0
  110. package/dist/chunk-AWWW6K2I.js +407 -0
  111. package/dist/chunk-BAY47D5E.js +226 -0
  112. package/dist/chunk-CFHKYLDY.js +26 -0
  113. package/dist/chunk-CJZN7HFL.js +293 -0
  114. package/dist/chunk-CXOF4UGH.js +229 -0
  115. package/dist/chunk-D4QFQQWJ.js +170 -0
  116. package/dist/chunk-DNCSPTOQ.js +446 -0
  117. package/dist/chunk-DQGSCCI3.js +100 -0
  118. package/dist/chunk-EWGMLVC7.js +34 -0
  119. package/dist/chunk-F7PB5HGT.js +148 -0
  120. package/dist/chunk-FVWCYGJL.js +121 -0
  121. package/dist/chunk-G7QKLA54.js +92 -0
  122. package/dist/chunk-HWHG63LH.js +148 -0
  123. package/dist/chunk-HWHG63LH.js.map +7 -0
  124. package/dist/chunk-HYZG6OPC.js +467 -0
  125. package/dist/chunk-HYZG6OPC.js.map +7 -0
  126. package/dist/chunk-IBBMKCO7.js +526 -0
  127. package/dist/chunk-IBBMKCO7.js.map +7 -0
  128. package/dist/chunk-IQUYTZOA.js +455 -0
  129. package/dist/chunk-IQUYTZOA.js.map +7 -0
  130. package/dist/chunk-J5RINDKS.js +480 -0
  131. package/dist/chunk-JMPSZMDD.js +52 -0
  132. package/dist/chunk-KQMEJUWI.js +815 -0
  133. package/dist/chunk-KWFEGPZL.js +97 -0
  134. package/dist/chunk-KWFEGPZL.js.map +7 -0
  135. package/dist/chunk-L4QG7XZE.js +46 -0
  136. package/dist/chunk-L4QG7XZE.js.map +7 -0
  137. package/dist/chunk-LBXZGYU5.js +368 -0
  138. package/dist/chunk-LI7FE335.js +371 -0
  139. package/dist/chunk-LRBNYEFI.js +50 -0
  140. package/dist/chunk-LRBNYEFI.js.map +7 -0
  141. package/dist/chunk-LRMV5DNW.js +441 -0
  142. package/dist/chunk-LWNOC7AJ.js +54 -0
  143. package/dist/chunk-MICNOSX7.js +129 -0
  144. package/dist/chunk-MLWNMXAV.js +272 -0
  145. package/dist/chunk-MMBLSLQR.js +158 -0
  146. package/dist/chunk-N3QEGDEZ.js +117 -0
  147. package/dist/chunk-N3QEGDEZ.js.map +7 -0
  148. package/dist/chunk-NV5XWADG.js +1150 -0
  149. package/dist/chunk-NVB7MQLH.js +20649 -0
  150. package/dist/chunk-NVB7MQLH.js.map +7 -0
  151. package/dist/chunk-O3255WPP.js +1087 -0
  152. package/dist/chunk-OSM7YS23.js +276 -0
  153. package/dist/chunk-OSM7YS23.js.map +7 -0
  154. package/dist/chunk-PEWHCKCH.js +1205 -0
  155. package/dist/chunk-Q7PYFSNU.js +107 -0
  156. package/dist/chunk-QEZPKEWB.js +1159 -0
  157. package/dist/chunk-QEZPKEWB.js.map +7 -0
  158. package/dist/chunk-QMI222IJ.js +386 -0
  159. package/dist/chunk-QRIRWDIW.js +252 -0
  160. package/dist/chunk-SEQLC4AD.js +177 -0
  161. package/dist/chunk-SJTOSA7E.js +629 -0
  162. package/dist/chunk-SRYFYAXK.js +615 -0
  163. package/dist/chunk-SSPDNHDW.js +398 -0
  164. package/dist/chunk-SSPDNHDW.js.map +7 -0
  165. package/dist/chunk-SYMOQE3X.js +37 -0
  166. package/dist/chunk-SYMOQE3X.js.map +7 -0
  167. package/dist/chunk-TITA4HJA.js +228 -0
  168. package/dist/chunk-TV74I3Y5.js +43 -0
  169. package/dist/chunk-TV74I3Y5.js.map +7 -0
  170. package/dist/chunk-U7ZMIMI5.js +2815 -0
  171. package/dist/chunk-UJU3Q7QJ.js +119 -0
  172. package/dist/chunk-UL2ISTHR.js +2672 -0
  173. package/dist/chunk-VIPMLSZP.js +217 -0
  174. package/dist/chunk-VYIO7T6J.js +82 -0
  175. package/dist/chunk-VYIO7T6J.js.map +7 -0
  176. package/dist/chunk-VZPYIG77.js +1271 -0
  177. package/dist/chunk-W345H42C.js +273 -0
  178. package/dist/chunk-W345H42C.js.map +7 -0
  179. package/dist/chunk-WGL6FIUE.js +330 -0
  180. package/dist/chunk-WGL6FIUE.js.map +7 -0
  181. package/dist/chunk-WIYKAKWE.js +302 -0
  182. package/dist/chunk-WJGVQJSX.js +514 -0
  183. package/dist/chunk-WJGVQJSX.js.map +7 -0
  184. package/dist/chunk-WPHOEG56.js +194 -0
  185. package/dist/chunk-WU63AOK2.js +4207 -0
  186. package/dist/chunk-XS4QWRS3.js +205 -0
  187. package/dist/chunk-XYFDBYOY.js +1658 -0
  188. package/dist/chunk-XYFDBYOY.js.map +7 -0
  189. package/dist/chunk-YDWRIMCT.js +289 -0
  190. package/dist/chunk-YDWRIMCT.js.map +7 -0
  191. package/dist/chunk-YK5NFMHR.js +269 -0
  192. package/dist/chunk-YK5NFMHR.js.map +7 -0
  193. package/dist/chunk-YSW57QDM.js +6364 -0
  194. package/dist/chunk-YXQNZPCO.js +203 -0
  195. package/dist/chunk-YYYJB53A.js +2370 -0
  196. package/dist/chunk-YYYJB53A.js.map +7 -0
  197. package/dist/chunk-ZTKQLABY.js +470 -0
  198. package/dist/condition-AM523RDR.js +330 -0
  199. package/dist/controls-HTMH5QBP.js +39 -0
  200. package/dist/controls.config-EEK2RBPI.js +37 -0
  201. package/dist/correlation-HKD67SPS.js +96 -0
  202. package/dist/cuminc-66V55MMN.js +1147 -0
  203. package/dist/cuminc.integration.spec-PNTOPB2L.js +676 -0
  204. package/dist/customdata.inputui-Z4WQDU6I.js +285 -0
  205. package/dist/dataDownload-3ZEI22OK.js +328 -0
  206. package/dist/dataDownload.integration.spec-C3JRC6K5.js +191 -0
  207. package/dist/databrowser.ui-Q365SHBG.js +419 -0
  208. package/dist/dictionary-D4E2VEJT.js +109 -0
  209. package/dist/dictionary-D4E2VEJT.js.map +7 -0
  210. package/dist/dnaMethylation-IFZWWBUG.js +36 -0
  211. package/dist/dnaMethylation.integration.spec-UKV4BSIO.js +165 -0
  212. package/dist/dnaMethylation.integration.spec-UKV4BSIO.js.map +7 -0
  213. package/dist/e2pca-I3QXF7EM.js +348 -0
  214. package/dist/ep-2VCQ36GT.js +1254 -0
  215. package/dist/expclust.gdc.spec-VWIQFY67.js +305 -0
  216. package/dist/facet-CHP3VUWS.js +519 -0
  217. package/dist/geneExpClustering-YDIDEH2O.js +246 -0
  218. package/dist/geneExpression-FA5RJRHZ.js +36 -0
  219. package/dist/geneExpression-X2KXJPND.js +312 -0
  220. package/dist/geneExpression.unit.spec-3LVHYZGG.js +100 -0
  221. package/dist/geneORA-4CAYRKSN.js +276 -0
  222. package/dist/geneVariant-OCOTNUH4.js +39 -0
  223. package/dist/geneVariant-Y4L5W5HF.js +37 -0
  224. package/dist/geneVariant.integration.spec-BOJ5MM5K.js +196 -0
  225. package/dist/genefusion.ui-I6HZOBIV.js +249 -0
  226. package/dist/geneset-GEWKDAAT.js +194 -0
  227. package/dist/genomeBrowser.spec-FDEGH4DY.js +279 -0
  228. package/dist/grin2-K56B6XBZ.js +1031 -0
  229. package/dist/grin2-V6FMM44N.js +1554 -0
  230. package/dist/gsea-UNPPRU2U.js +45 -0
  231. package/dist/hierCluster-DXAWRQNI.js +58 -0
  232. package/dist/hierCluster-SPIQA2M2.js +62 -0
  233. package/dist/hierCluster.config-JW6D3T3Q.js +38 -0
  234. package/dist/hierCluster.integration.spec-5NXZY4LG.js +374 -0
  235. package/dist/hierCluster.interactivity-CPPBXHM7.js +52 -0
  236. package/dist/hierCluster.renderers-A6MEGO2B.js +21 -0
  237. package/dist/imagePlot-QLAHCULW.js +139 -0
  238. package/dist/importPlot-6ITZ6U7G.js +8 -0
  239. package/dist/isoformExpression-7GAUF2QV.js +38 -0
  240. package/dist/isoformExpression.unit.spec-3BVXVVNO.js +206 -0
  241. package/dist/isoformExpression.unit.spec-3BVXVVNO.js.map +7 -0
  242. package/dist/jspdf.es.min-FC3BCETM.js +40 -0
  243. package/dist/launch.adhoc-HFHBAUR6.js +40 -0
  244. package/dist/leftlabel.sample-CWPJUCHR.js +257 -0
  245. package/dist/legacyDataset-PBCPC5I7.js +119 -0
  246. package/dist/lollipop-QFRQLEER.js +166 -0
  247. package/dist/maf-OEODBT3Y.js +450 -0
  248. package/dist/maftimeline-2DFIF4C4.js +591 -0
  249. package/dist/matrix-3HFB5TUU.js +57 -0
  250. package/dist/matrix-MIXK27AD.js +62 -0
  251. package/dist/matrix.cells-U7AQNEBP.js +28 -0
  252. package/dist/matrix.config-FX5MHX6O.js +39 -0
  253. package/dist/matrix.controls-5K7BB5Z4.js +37 -0
  254. package/dist/matrix.data-EEIY6AO4.js +25 -0
  255. package/dist/matrix.dom-6QL3AJMW.js +11 -0
  256. package/dist/matrix.groups-CUB6UWC5.js +26 -0
  257. package/dist/matrix.integration.spec-ML4T7FRG.js +3070 -0
  258. package/dist/matrix.interactivity-QMPWX63Q.js +40 -0
  259. package/dist/matrix.layout-7SEF6MYI.js +42 -0
  260. package/dist/matrix.legend-42LQGAGX.js +22 -0
  261. package/dist/matrix.renderers-ZF7LLER3.js +36 -0
  262. package/dist/matrix.serieses-4B2WB526.js +21 -0
  263. package/dist/matrix.sort-BJACNR7G.js +27 -0
  264. package/dist/matrix.sort.unit.spec-ZGSM7HDJ.js +470 -0
  265. package/dist/matrix.sorterUi-W6XFYZY2.js +18 -0
  266. package/dist/matrix.sorterUi.unit.spec-V34ZZD7A.js +340 -0
  267. package/dist/mavb-NVQVFU6E.js +730 -0
  268. package/dist/mds.fimo-HOCF6U6K.js +516 -0
  269. package/dist/mds.samplescatterplot-ULD5BK5R.js +1548 -0
  270. package/dist/mds.survivalplot-5US32RQD.js +481 -0
  271. package/dist/oncomatrix-Y3G3MUJJ.js +293 -0
  272. package/dist/oncomatrix.spec-MFUJLWEP.js +446 -0
  273. package/dist/plot.2dvaf-F4WZ4YPU.js +375 -0
  274. package/dist/plot.app-YFFLLBU5.js +39 -0
  275. package/dist/plot.barplot-2EJ2MWQD.js +100 -0
  276. package/dist/plot.boxplot-AKZM443E.js +150 -0
  277. package/dist/plot.brainImaging-DR6WJNFZ.js +51 -0
  278. package/dist/plot.disco-LBE5H67U.js +101 -0
  279. package/dist/plot.disco-LBE5H67U.js.map +7 -0
  280. package/dist/plot.dzi-R2MR7HAT.js +33 -0
  281. package/dist/plot.ssgq-C52YIUFY.js +137 -0
  282. package/dist/plot.vaf2cov-FOD3K7BC.js +257 -0
  283. package/dist/plot.wsi-D2TXYERK.js +36 -0
  284. package/dist/polar-2LC35O6K.js +184 -0
  285. package/dist/polar2-QPUOEUJZ.js +226 -0
  286. package/dist/profile.spec-3NCDGHLX.js +78 -0
  287. package/dist/profileBarchart-PPQ3NL4D.js +265 -0
  288. package/dist/profileForms-GS3VVW65.js +438 -0
  289. package/dist/profilePlot-DQWFH5NC.js +52 -0
  290. package/dist/profileRadar-KAKRDC4R.js +261 -0
  291. package/dist/profileRadarFacility-FZP62VPV.js +261 -0
  292. package/dist/profileRadarFacility-FZP62VPV.js.map +7 -0
  293. package/dist/proteinView-LWVWJY54.js +444 -0
  294. package/dist/proteinView-LWVWJY54.js.map +7 -0
  295. package/dist/proteomeAbundance-DE4NVBCN.js +21 -0
  296. package/dist/proteomeAbundance-LTB3QR3G.js +63 -0
  297. package/dist/qualitative-YOFAROVR.js +41 -0
  298. package/dist/regression-PF6IAHJK.js +54 -0
  299. package/dist/regression.inputs-77IUYED3.js +46 -0
  300. package/dist/regression.inputs.term-WWCHU6KF.js +46 -0
  301. package/dist/regression.inputs.values.table-I6GM6MU7.js +43 -0
  302. package/dist/regression.integration.spec-DGEZUURU.js +782 -0
  303. package/dist/regression.integration.spec-DGEZUURU.js.map +7 -0
  304. package/dist/regression.results-6GXNKYUS.js +38 -0
  305. package/dist/regression.spec-MEFQNY34.js +706 -0
  306. package/dist/report-LG3UKZHL.js +220 -0
  307. package/dist/sampleScatter.spec-D3IK7MSA.js +200 -0
  308. package/dist/sampleView-XUI2J5EC.js +46 -0
  309. package/dist/samplelst-A7IHCBAX.js +109 -0
  310. package/dist/samplematrix-VGUU7Q75.js +2196 -0
  311. package/dist/sc-UVKVT2RY.js +84 -0
  312. package/dist/scatter-UILUYOGO.js +800 -0
  313. package/dist/scatter.integration.spec-VPNALPUG.js +1194 -0
  314. package/dist/scatter.integration.spec-VPNALPUG.js.map +7 -0
  315. package/dist/selectGenomeWithTklst-LWKIMZEJ.js +132 -0
  316. package/dist/singleCellCellType-TI52WQQ4.js +36 -0
  317. package/dist/singleCellCellType.unit.spec-R3BTRFRU.js +158 -0
  318. package/dist/singleCellCellType.unit.spec-R3BTRFRU.js.map +7 -0
  319. package/dist/singleCellGeneExpression-I5SAHMGI.js +36 -0
  320. package/dist/singleCellGeneExpression.unit.spec-2JTB5HLY.js +151 -0
  321. package/dist/singleCellGeneExpression.unit.spec-2JTB5HLY.js.map +7 -0
  322. package/dist/singleCellPlot-HRWCHYCI.js +51 -0
  323. package/dist/singlecell-BHPP7KCO.js +1570 -0
  324. package/dist/singlecell-PQNKBKR7.js +84 -0
  325. package/dist/snp-V4YGI7B3.js +36 -0
  326. package/dist/snp.unit.spec-JSUCMGNP.js +174 -0
  327. package/dist/snplocus-3YT5NNCH.js +206 -0
  328. package/dist/spliceevent.a53ss.diagram-QEQJ44YH.js +149 -0
  329. package/dist/spliceevent.exonskip.diagram-HMWVSOJG.js +275 -0
  330. package/dist/spliceevent.noeventdiagram-L5HUCT5A.js +458 -0
  331. package/dist/ssGSEA-Z3XRCBYW.js +36 -0
  332. package/dist/ssGSEA.unit.spec-EUCTV2XJ.js +86 -0
  333. package/dist/summarizeCnvGeneexp-O7O2CFW4.js +161 -0
  334. package/dist/summarizeCnvGeneexp-O7O2CFW4.js.map +7 -0
  335. package/dist/summarizeGeneexpSurvival-DDPH56EI.js +106 -0
  336. package/dist/summarizeGeneexpSurvival-DDPH56EI.js.map +7 -0
  337. package/dist/summarizeMutationCnv-6KJQUJWR.js +162 -0
  338. package/dist/summarizeMutationCnv-6KJQUJWR.js.map +7 -0
  339. package/dist/summarizeMutationDiagnosis-HFFYLQOF.js +38 -0
  340. package/dist/summarizeMutationSurvival-OBK6YILP.js +97 -0
  341. package/dist/summary-W55WWIU2.js +47 -0
  342. package/dist/summary.integration.spec-X2PNAUKW.js +412 -0
  343. package/dist/summaryInput-X547Q6C7.js +218 -0
  344. package/dist/sunburst-KWNGYBRI.js +282 -0
  345. package/dist/sunburst-KWNGYBRI.js.map +7 -0
  346. package/dist/survival-PAJZHZPD.js +56 -0
  347. package/dist/survival-TQPWMOD5.js +44 -0
  348. package/dist/survival.integration.spec-YMQASOMX.js +800 -0
  349. package/dist/survival.integration.spec-YMQASOMX.js.map +7 -0
  350. package/dist/svg2pdf.es.min-CYTPRWNB.js +3157 -0
  351. package/dist/svgraph-Y35C2M3D.js +1385 -0
  352. package/dist/svmr-WGCIR7PE.js +3840 -0
  353. package/dist/table-Q3B2YXEN.js +198 -0
  354. package/dist/termCollection-A6YTSM5I.js +177 -0
  355. package/dist/termCollection-NTFNVQ7D.js +36 -0
  356. package/dist/termCollection.unit.spec-BX54PHKT.js +206 -0
  357. package/dist/tk-OCBZ7YR6.js +44 -0
  358. package/dist/tp.ui-ZT47N2CO.js +1457 -0
  359. package/dist/tvs.density-HSVPDDGA.js +18 -0
  360. package/dist/tvs.dt-BFB253O3.js +37 -0
  361. package/dist/tvs.dtcnv.categorical-ARGAYIDO.js +38 -0
  362. package/dist/tvs.dtcnv.continuous-JCU23ERV.js +70 -0
  363. package/dist/tvs.dtfusion-FV64XLZI.js +38 -0
  364. package/dist/tvs.dtsnvindel-DMOXMEVL.js +38 -0
  365. package/dist/tvs.dtsv-53FSZEPV.js +38 -0
  366. package/dist/tvs.numeric-ICUGA4WY.js +21 -0
  367. package/dist/tvs.samplelst-MVPL6VXX.js +102 -0
  368. package/dist/tvs.termCollection-UGJXTHTG.js +151 -0
  369. package/dist/violin-ZLUDGSQG.js +44 -0
  370. package/dist/violin.integration.spec-KWOFOFLT.js +1423 -0
  371. package/dist/violin.integration.spec-KWOFOFLT.js.map +7 -0
  372. package/dist/violin.interactivity-ULDOCZWW.js +36 -0
  373. package/dist/violin.renderer-KJAXPMIK.js +38 -0
  374. package/dist/vocabulary-34YUQ4ZQ.js +39 -0
  375. package/package.json +3 -3
  376. package/dist/2dmaf-SLBAWGPG.js +0 -1371
  377. package/dist/AIProjectAdmin-6SH5X3AF.js +0 -830
  378. package/dist/AIProjectAdmin-6SH5X3AF.js.map +0 -7
  379. package/dist/AppHeader-MVYNRMC7.js +0 -833
  380. package/dist/BoxPlot-HLGWW3IK.js +0 -1295
  381. package/dist/BoxPlot-HLGWW3IK.js.map +0 -7
  382. package/dist/CorrelationVolcano-TZCYC3NI.js +0 -617
  383. package/dist/DE-2J2SK5UT.js +0 -93
  384. package/dist/DEinput-QM3GOQHM.js +0 -297
  385. package/dist/DifferentialAnalysis-DS7CQOT6.js +0 -238
  386. package/dist/Disco-U5I6NJUT.js +0 -3199
  387. package/dist/Disco-U5I6NJUT.js.map +0 -7
  388. package/dist/Disco.UI-J2B7GGEZ.js +0 -242
  389. package/dist/DmrPlot-D5W76QPY.js +0 -640
  390. package/dist/GB-LM5SGUG4.js +0 -1125
  391. package/dist/HicApp-YNBGAGKM.js +0 -2248
  392. package/dist/NumBinaryEditor-4QA5DQJT.js +0 -268
  393. package/dist/NumBinaryEditor.unit.spec-YWSIFTOJ.js +0 -284
  394. package/dist/NumContEditor-ZPLVZFLH.js +0 -105
  395. package/dist/NumContEditor.unit.spec-NBCFOCOX.js +0 -167
  396. package/dist/NumCustomBinEditor-TXEYRVPL.js +0 -36
  397. package/dist/NumCustomBinEditor.unit.spec-SQM63H4B.js +0 -282
  398. package/dist/NumDiscreteEditor-6C4OWX62.js +0 -177
  399. package/dist/NumDiscreteEditor.unit.spec-4HC4AGAM.js +0 -200
  400. package/dist/NumRegularBinEditor-VQAS3OXK.js +0 -36
  401. package/dist/NumRegularBinEditor.unit.spec-RGVEPB3Z.js +0 -225
  402. package/dist/NumSplineEditor-SXOJICHU.js +0 -190
  403. package/dist/NumSplineEditor.unit.spec-HF5E6ANH.js +0 -197
  404. package/dist/NumericDensity-LMLPMOSE.js +0 -36
  405. package/dist/NumericDensity.unit.spec-3ZI5EVON.js +0 -219
  406. package/dist/NumericHandler-Q6F6ANOS.js +0 -37
  407. package/dist/NumericHandler.unit.spec-E6Z5HUNZ.js +0 -217
  408. package/dist/RunChart2-XSNWNAIL.js +0 -756
  409. package/dist/RunChart2-XSNWNAIL.js.map +0 -7
  410. package/dist/SC-RA46YM57.js +0 -733
  411. package/dist/SC-RA46YM57.js.map +0 -7
  412. package/dist/Volcano-75UDYPVB.js +0 -1187
  413. package/dist/Volcano-75UDYPVB.js.map +0 -7
  414. package/dist/WSIViewer-GYUUXCSJ.js +0 -47933
  415. package/dist/WSIViewer-GYUUXCSJ.js.map +0 -7
  416. package/dist/WsiSamplesPlot-KMI5S2EL.js +0 -163
  417. package/dist/adSandbox-JTK5XEQL.js +0 -36
  418. package/dist/alphaGenome-JRAV6WIY.js +0 -173
  419. package/dist/app-JKDZL23V.js +0 -35
  420. package/dist/app-OEARXM6E.js +0 -47
  421. package/dist/bam-CYEPLBK4.js +0 -857
  422. package/dist/barchart-GG5UFDG4.js +0 -45
  423. package/dist/barchart.data-KXA66FAL.js +0 -22
  424. package/dist/barchart.events-P2USOIR7.js +0 -45
  425. package/dist/barchart.integration.spec-5QSPQQLJ.js +0 -1675
  426. package/dist/bars.renderer-T5R3UIBW.js +0 -12
  427. package/dist/block-6DVPQBSH.js +0 -6200
  428. package/dist/block-6DVPQBSH.js.map +0 -7
  429. package/dist/block.init-ZHX6DFWF.js +0 -36
  430. package/dist/block.mds.expressionrank-YMGYXXYT.js +0 -357
  431. package/dist/block.mds.geneboxplot-IAILQYX4.js +0 -826
  432. package/dist/block.mds.junction-BRNFNQMU.js +0 -1543
  433. package/dist/block.mds.svcnv-OHKC7YPO.js +0 -6799
  434. package/dist/block.svg-PNGK45HW.js +0 -162
  435. package/dist/block.tk.aicheck-SCIOJ4WN.js +0 -281
  436. package/dist/block.tk.ase-BABJ73GG.js +0 -363
  437. package/dist/block.tk.bam-LZWJ5BCQ.js +0 -1904
  438. package/dist/block.tk.bedgraphdot-7NQLC3XJ.js +0 -382
  439. package/dist/block.tk.bigwig.ui-VNY4SFD5.js +0 -209
  440. package/dist/block.tk.hicstraw-36A7VDRM.js +0 -821
  441. package/dist/block.tk.junction-D373YEMK.js +0 -2362
  442. package/dist/block.tk.junction.textmatrixui-FFII7J3X.js +0 -197
  443. package/dist/block.tk.ld-XGB6KMDO.js +0 -97
  444. package/dist/block.tk.menu-PEZANZBZ.js +0 -1027
  445. package/dist/block.tk.pgv-MU5BPTT2.js +0 -942
  446. package/dist/brainImaging-LVJON47N.js +0 -421
  447. package/dist/chat-5FDIAQJ4.js +0 -148
  448. package/dist/chunk-22NJUYET.js +0 -281
  449. package/dist/chunk-22NJUYET.js.map +0 -7
  450. package/dist/chunk-2J3566TA.js +0 -215
  451. package/dist/chunk-2OSEZCWZ.js +0 -205
  452. package/dist/chunk-2SRMRC6L.js +0 -421
  453. package/dist/chunk-2SRMRC6L.js.map +0 -7
  454. package/dist/chunk-5OHXYXLD.js +0 -46
  455. package/dist/chunk-5OHXYXLD.js.map +0 -7
  456. package/dist/chunk-6MSCYO7K.js +0 -119
  457. package/dist/chunk-75EBDB7G.js +0 -21
  458. package/dist/chunk-75EBDB7G.js.map +0 -7
  459. package/dist/chunk-7A7NMCQ3.js +0 -534
  460. package/dist/chunk-7FEHI46K.js +0 -20456
  461. package/dist/chunk-7FEHI46K.js.map +0 -7
  462. package/dist/chunk-AETE4F7R.js +0 -252
  463. package/dist/chunk-AZYDW5T7.js +0 -441
  464. package/dist/chunk-B6HCIAM3.js +0 -34
  465. package/dist/chunk-BEWDIM6H.js +0 -42
  466. package/dist/chunk-BEWDIM6H.js.map +0 -7
  467. package/dist/chunk-CCIZJAXB.js +0 -2815
  468. package/dist/chunk-DHZL3FBC.js +0 -107
  469. package/dist/chunk-DONWY7TP.js +0 -39
  470. package/dist/chunk-DVDDXOWT.js +0 -815
  471. package/dist/chunk-E6DRQJJT.js +0 -480
  472. package/dist/chunk-ESKU6LNC.js +0 -36
  473. package/dist/chunk-ESKU6LNC.js.map +0 -7
  474. package/dist/chunk-F6V4AYWP.js +0 -177
  475. package/dist/chunk-FBAJTPBU.js +0 -302
  476. package/dist/chunk-FGMPKWT5.js +0 -371
  477. package/dist/chunk-FK4MYVW2.js +0 -261
  478. package/dist/chunk-FK4MYVW2.js.map +0 -7
  479. package/dist/chunk-FMBJ4SKC.js +0 -98
  480. package/dist/chunk-FMBJ4SKC.js.map +0 -7
  481. package/dist/chunk-FOEZG4VX.js +0 -505
  482. package/dist/chunk-FOEZG4VX.js.map +0 -7
  483. package/dist/chunk-FQRLSKJC.js +0 -226
  484. package/dist/chunk-G6ELKVBG.js +0 -629
  485. package/dist/chunk-GKK3CZ6H.js +0 -4207
  486. package/dist/chunk-GO5SIPFE.js +0 -194
  487. package/dist/chunk-GPOECA3V.js +0 -386
  488. package/dist/chunk-GTOY3JJO.js +0 -288
  489. package/dist/chunk-GTOY3JJO.js.map +0 -7
  490. package/dist/chunk-GW7DHJYH.js +0 -439
  491. package/dist/chunk-GW7DHJYH.js.map +0 -7
  492. package/dist/chunk-H2D7EVUA.js +0 -158
  493. package/dist/chunk-H2K5KZP7.js +0 -95
  494. package/dist/chunk-H5XFH3FV.js +0 -153
  495. package/dist/chunk-H5XFH3FV.js.map +0 -7
  496. package/dist/chunk-HAMDFQIX.js +0 -228
  497. package/dist/chunk-HH4QLSTK.js +0 -4952
  498. package/dist/chunk-IBTPGSYI.js +0 -526
  499. package/dist/chunk-IBTPGSYI.js.map +0 -7
  500. package/dist/chunk-IC7SUXJD.js +0 -82
  501. package/dist/chunk-IC7SUXJD.js.map +0 -7
  502. package/dist/chunk-IGEQI6MR.js +0 -1561
  503. package/dist/chunk-IGEQI6MR.js.map +0 -7
  504. package/dist/chunk-IIRU6VK2.js +0 -2672
  505. package/dist/chunk-ILF2GKBY.js +0 -1205
  506. package/dist/chunk-IP4T477W.js +0 -92
  507. package/dist/chunk-IQIXGTQV.js +0 -84
  508. package/dist/chunk-IQIXGTQV.js.map +0 -7
  509. package/dist/chunk-IXT4U5CE.js +0 -91
  510. package/dist/chunk-IXT4U5CE.js.map +0 -7
  511. package/dist/chunk-JHOGX5VE.js +0 -272
  512. package/dist/chunk-JOXUBWN3.js +0 -381
  513. package/dist/chunk-K57RR3FD.js +0 -142
  514. package/dist/chunk-K6JLCMVL.js +0 -129
  515. package/dist/chunk-KISFQDQE.js +0 -258
  516. package/dist/chunk-KISFQDQE.js.map +0 -7
  517. package/dist/chunk-KSFSM46X.js +0 -100
  518. package/dist/chunk-KVG7FTTK.js +0 -470
  519. package/dist/chunk-LEDPPLQK.js +0 -158
  520. package/dist/chunk-LUTT3MBZ.js +0 -1150
  521. package/dist/chunk-MDL2HG3N.js +0 -257
  522. package/dist/chunk-MDL2HG3N.js.map +0 -7
  523. package/dist/chunk-MNRYCG2S.js +0 -1271
  524. package/dist/chunk-MPJHDHBA.js +0 -2784
  525. package/dist/chunk-MXI3NXRB.js +0 -407
  526. package/dist/chunk-O4PXELXF.js +0 -615
  527. package/dist/chunk-ORPCSG6T.js +0 -14
  528. package/dist/chunk-OUKDZKSZ.js +0 -334
  529. package/dist/chunk-OUKDZKSZ.js.map +0 -7
  530. package/dist/chunk-P5HLYAHP.js +0 -1087
  531. package/dist/chunk-PIACSJPH.js +0 -148
  532. package/dist/chunk-PQABAAEZ.js +0 -31
  533. package/dist/chunk-PSMDCZET.js +0 -46
  534. package/dist/chunk-PSMDCZET.js.map +0 -7
  535. package/dist/chunk-RFIVPTMS.js +0 -217
  536. package/dist/chunk-RSU37SVQ.js +0 -54
  537. package/dist/chunk-RTC4U4PH.js +0 -2327
  538. package/dist/chunk-RTC4U4PH.js.map +0 -7
  539. package/dist/chunk-RZ5JP44H.js +0 -276
  540. package/dist/chunk-RZ5JP44H.js.map +0 -7
  541. package/dist/chunk-SPAIFVM2.js +0 -1155
  542. package/dist/chunk-SPAIFVM2.js.map +0 -7
  543. package/dist/chunk-T2HYA2KL.js +0 -55
  544. package/dist/chunk-TCPU43TU.js +0 -1741
  545. package/dist/chunk-TCPU43TU.js.map +0 -7
  546. package/dist/chunk-TE3DK3A6.js +0 -147
  547. package/dist/chunk-TIQPSXFJ.js +0 -237
  548. package/dist/chunk-TIQPSXFJ.js.map +0 -7
  549. package/dist/chunk-TN5GSG34.js +0 -26
  550. package/dist/chunk-UBGTQMOO.js +0 -52
  551. package/dist/chunk-UBS5UVIY.js +0 -13624
  552. package/dist/chunk-UE5ZYM63.js +0 -48
  553. package/dist/chunk-UE5ZYM63.js.map +0 -7
  554. package/dist/chunk-UQACPOCM.js +0 -102
  555. package/dist/chunk-UR3C4SCH.js +0 -446
  556. package/dist/chunk-UWX7W22M.js +0 -121
  557. package/dist/chunk-VJ37HKM6.js +0 -368
  558. package/dist/chunk-VLTDUJRM.js +0 -293
  559. package/dist/chunk-W6UUEAEP.js +0 -6364
  560. package/dist/chunk-X6UPDFDX.js +0 -229
  561. package/dist/chunk-XD6BFNMR.js +0 -172
  562. package/dist/chunk-XD6BFNMR.js.map +0 -7
  563. package/dist/chunk-XDI4UFCZ.js +0 -467
  564. package/dist/chunk-XDI4UFCZ.js.map +0 -7
  565. package/dist/chunk-XOBD3EAM.js +0 -1425
  566. package/dist/chunk-XOBD3EAM.js.map +0 -7
  567. package/dist/chunk-Y3TDC7NU.js +0 -170
  568. package/dist/chunk-YOTWMCT5.js +0 -824
  569. package/dist/chunk-YUMPQ3CJ.js +0 -203
  570. package/dist/chunk-ZIBWLDQI.js +0 -230
  571. package/dist/chunk-ZIBWLDQI.js.map +0 -7
  572. package/dist/condition-VHP2L4GM.js +0 -330
  573. package/dist/controls-N5Q7U7JR.js +0 -39
  574. package/dist/controls.config-NJMW4SLR.js +0 -37
  575. package/dist/correlation-3LDASF5I.js +0 -96
  576. package/dist/cuminc-UWJ23W6C.js +0 -1147
  577. package/dist/cuminc.integration.spec-OZYYET3W.js +0 -676
  578. package/dist/customdata.inputui-2FVCVSE4.js +0 -285
  579. package/dist/dataDownload-4S4PE5HX.js +0 -328
  580. package/dist/dataDownload.integration.spec-B57LEKFZ.js +0 -191
  581. package/dist/databrowser.ui-N6GHEQ2P.js +0 -419
  582. package/dist/dictionary-UP46QRYZ.js +0 -98
  583. package/dist/dictionary-UP46QRYZ.js.map +0 -7
  584. package/dist/dnaMethylation-BOGAUAWA.js +0 -36
  585. package/dist/dnaMethylation.integration.spec-UAHBJSSJ.js +0 -179
  586. package/dist/dnaMethylation.integration.spec-UAHBJSSJ.js.map +0 -7
  587. package/dist/e2pca-L5EBQJNP.js +0 -348
  588. package/dist/ep-Z67ORKUX.js +0 -1254
  589. package/dist/expclust.gdc.spec-SP7VOL64.js +0 -305
  590. package/dist/facet-HDB4VDGU.js +0 -519
  591. package/dist/geneExpClustering-6ZPOLTDJ.js +0 -246
  592. package/dist/geneExpression-T6YIG4XQ.js +0 -312
  593. package/dist/geneExpression-T7QUHV5S.js +0 -36
  594. package/dist/geneExpression.unit.spec-DO52L5IB.js +0 -100
  595. package/dist/geneORA-KOUDUWUO.js +0 -276
  596. package/dist/geneVariant-FVR76F6I.js +0 -39
  597. package/dist/geneVariant-I5QUITKG.js +0 -37
  598. package/dist/geneVariant.integration.spec-D4IRM7B5.js +0 -196
  599. package/dist/genefusion.ui-35IYSZD7.js +0 -249
  600. package/dist/geneset-7ZHJ5KWK.js +0 -194
  601. package/dist/genomeBrowser.spec-VXASVLNH.js +0 -279
  602. package/dist/grin2-7NM56COO.js +0 -1554
  603. package/dist/grin2-IY26UUQI.js +0 -1031
  604. package/dist/gsea-TORO46C6.js +0 -45
  605. package/dist/hierCluster-3BKEGW6P.js +0 -58
  606. package/dist/hierCluster-HM3LOM6V.js +0 -62
  607. package/dist/hierCluster.config-LDO5IGQ5.js +0 -38
  608. package/dist/hierCluster.integration.spec-XO5R6CQT.js +0 -374
  609. package/dist/hierCluster.interactivity-NVQ6262K.js +0 -52
  610. package/dist/hierCluster.renderers-SWPPNBLU.js +0 -21
  611. package/dist/imagePlot-V4WLAPV6.js +0 -139
  612. package/dist/importPlot-NZKQEOX4.js +0 -8
  613. package/dist/isoformExpression-TIZBIGNL.js +0 -38
  614. package/dist/isoformExpression.unit.spec-WHH5LPFG.js +0 -124
  615. package/dist/isoformExpression.unit.spec-WHH5LPFG.js.map +0 -7
  616. package/dist/jspdf.es.min-DO4YWL2R.js +0 -40
  617. package/dist/launch.adhoc-JYEN42NM.js +0 -40
  618. package/dist/leftlabel.sample-43DL3J3H.js +0 -257
  619. package/dist/legacyDataset-QRSNRVUA.js +0 -119
  620. package/dist/lollipop-NMWZ4FVF.js +0 -166
  621. package/dist/maf-DS3EOVGV.js +0 -450
  622. package/dist/maftimeline-ZB2753S7.js +0 -591
  623. package/dist/matrix-RCGQWQ3C.js +0 -57
  624. package/dist/matrix-WTTEK4FT.js +0 -62
  625. package/dist/matrix.cells-UO5ASQ35.js +0 -28
  626. package/dist/matrix.config-3UQAT3QR.js +0 -39
  627. package/dist/matrix.controls-PRZ77K5L.js +0 -37
  628. package/dist/matrix.data-4W73RQ3H.js +0 -25
  629. package/dist/matrix.dom-IZFFS4RQ.js +0 -11
  630. package/dist/matrix.groups-5VMPI7SA.js +0 -26
  631. package/dist/matrix.integration.spec-2F5LDLC2.js +0 -3070
  632. package/dist/matrix.interactivity-MIPZ6ELV.js +0 -40
  633. package/dist/matrix.layout-EO5LVYRO.js +0 -42
  634. package/dist/matrix.legend-QBFBFEUG.js +0 -22
  635. package/dist/matrix.renderers-ERJXVCQL.js +0 -36
  636. package/dist/matrix.serieses-E23EPXHA.js +0 -21
  637. package/dist/matrix.sort-I4UGMEXR.js +0 -27
  638. package/dist/matrix.sort.unit.spec-CRGF6CSE.js +0 -470
  639. package/dist/matrix.sorterUi-YLSYTYLE.js +0 -18
  640. package/dist/matrix.sorterUi.unit.spec-ENG3ICOO.js +0 -340
  641. package/dist/mavb-5WR7OJHI.js +0 -730
  642. package/dist/mds.fimo-3ZRH7BBJ.js +0 -516
  643. package/dist/mds.samplescatterplot-RPXR2FVK.js +0 -1548
  644. package/dist/mds.survivalplot-WSSMYUZD.js +0 -481
  645. package/dist/oncomatrix-JKYPUJQR.js +0 -293
  646. package/dist/oncomatrix.spec-OEGU4DYK.js +0 -446
  647. package/dist/plot.2dvaf-ZGARLQNK.js +0 -375
  648. package/dist/plot.app-TKUJH3LK.js +0 -39
  649. package/dist/plot.barplot-FEIPGDZ2.js +0 -100
  650. package/dist/plot.boxplot-6RASUMZB.js +0 -150
  651. package/dist/plot.brainImaging-ZJPFWX2W.js +0 -51
  652. package/dist/plot.disco-2KTKB3XX.js +0 -101
  653. package/dist/plot.disco-2KTKB3XX.js.map +0 -7
  654. package/dist/plot.dzi-PC34YI6Y.js +0 -33
  655. package/dist/plot.ssgq-Z4UNJKWO.js +0 -137
  656. package/dist/plot.vaf2cov-NZ4WULKT.js +0 -257
  657. package/dist/plot.wsi-YYXFAZWY.js +0 -36
  658. package/dist/polar-X2GPIBLB.js +0 -184
  659. package/dist/polar2-TZ553QQH.js +0 -226
  660. package/dist/profile.spec-VB6VMFLY.js +0 -78
  661. package/dist/profileBarchart-SKJSTC7B.js +0 -265
  662. package/dist/profileForms-RLOGSMAQ.js +0 -438
  663. package/dist/profilePlot-267ZS3RG.js +0 -52
  664. package/dist/profileRadar-KGOBHCSF.js +0 -261
  665. package/dist/profileRadarFacility-MCJKSHUM.js +0 -261
  666. package/dist/profileRadarFacility-MCJKSHUM.js.map +0 -7
  667. package/dist/proteomeAbundance-JUYAYO5I.js +0 -63
  668. package/dist/proteomeAbundance-PGHZSVAF.js +0 -19
  669. package/dist/qualitative-3IECKKJM.js +0 -41
  670. package/dist/regression-J6FFRPXN.js +0 -54
  671. package/dist/regression.inputs-T7LWBSYZ.js +0 -46
  672. package/dist/regression.inputs.term-TT7PNX6G.js +0 -46
  673. package/dist/regression.inputs.values.table-SHFUNKCS.js +0 -43
  674. package/dist/regression.integration.spec-QKHMJTHA.js +0 -784
  675. package/dist/regression.integration.spec-QKHMJTHA.js.map +0 -7
  676. package/dist/regression.results-D4WX6VIV.js +0 -38
  677. package/dist/regression.spec-7SW55L7X.js +0 -706
  678. package/dist/report-QYOZ4BRF.js +0 -220
  679. package/dist/sampleScatter.spec-JCHFMGNF.js +0 -200
  680. package/dist/sampleView-7RPKNAZC.js +0 -46
  681. package/dist/samplelst-4WNPHZVG.js +0 -109
  682. package/dist/samplematrix-CG52DSXJ.js +0 -2196
  683. package/dist/sc-OJSWILSA.js +0 -84
  684. package/dist/scatter-LG2RMMEC.js +0 -800
  685. package/dist/scatter.integration.spec-QPANYTKW.js +0 -1194
  686. package/dist/scatter.integration.spec-QPANYTKW.js.map +0 -7
  687. package/dist/selectGenomeWithTklst-QXRVE6N4.js +0 -132
  688. package/dist/singleCellCellType-XBSRL33U.js +0 -36
  689. package/dist/singleCellCellType.unit.spec-YZX4CSXA.js +0 -177
  690. package/dist/singleCellCellType.unit.spec-YZX4CSXA.js.map +0 -7
  691. package/dist/singleCellGeneExpression-64ECP62X.js +0 -36
  692. package/dist/singleCellGeneExpression.unit.spec-CFHFXMA6.js +0 -163
  693. package/dist/singleCellGeneExpression.unit.spec-CFHFXMA6.js.map +0 -7
  694. package/dist/singleCellPlot-E5F62JY6.js +0 -51
  695. package/dist/singlecell-FCY5EOUV.js +0 -84
  696. package/dist/singlecell-S7B5V7NK.js +0 -1570
  697. package/dist/snp-ACKX4GRX.js +0 -36
  698. package/dist/snp.unit.spec-QBGHKKUD.js +0 -174
  699. package/dist/snplocus-7EUOW7J7.js +0 -206
  700. package/dist/spliceevent.a53ss.diagram-ALQZA35Z.js +0 -149
  701. package/dist/spliceevent.exonskip.diagram-UF7WJA5R.js +0 -275
  702. package/dist/spliceevent.noeventdiagram-4HPGRNRR.js +0 -458
  703. package/dist/ssGSEA-FDRBBBLJ.js +0 -36
  704. package/dist/ssGSEA.unit.spec-EZEOWJVV.js +0 -86
  705. package/dist/summarizeCnvGeneexp-FTL2MGAJ.js +0 -158
  706. package/dist/summarizeCnvGeneexp-FTL2MGAJ.js.map +0 -7
  707. package/dist/summarizeGeneexpSurvival-DDIF4UW6.js +0 -105
  708. package/dist/summarizeGeneexpSurvival-DDIF4UW6.js.map +0 -7
  709. package/dist/summarizeMutationCnv-L3GL5YDY.js +0 -159
  710. package/dist/summarizeMutationCnv-L3GL5YDY.js.map +0 -7
  711. package/dist/summarizeMutationDiagnosis-LALOJTHV.js +0 -38
  712. package/dist/summarizeMutationSurvival-TSNTSOBZ.js +0 -97
  713. package/dist/summary-YRHVS64T.js +0 -47
  714. package/dist/summary.integration.spec-766YQLQA.js +0 -412
  715. package/dist/summaryInput-VQ2X6GSX.js +0 -218
  716. package/dist/sunburst-XFOONS6K.js +0 -282
  717. package/dist/sunburst-XFOONS6K.js.map +0 -7
  718. package/dist/survival-FQXZH2MM.js +0 -44
  719. package/dist/survival-TVA3ZWVP.js +0 -56
  720. package/dist/survival.integration.spec-WFIOPD6A.js +0 -787
  721. package/dist/survival.integration.spec-WFIOPD6A.js.map +0 -7
  722. package/dist/svg2pdf.es.min-EZ4UYRSH.js +0 -3157
  723. package/dist/svgraph-4BFBO7EL.js +0 -1385
  724. package/dist/svmr-ML7GAIIA.js +0 -3840
  725. package/dist/table-SMLMUWPP.js +0 -198
  726. package/dist/termCollection-22CPTISZ.js +0 -36
  727. package/dist/termCollection-EE6AOIVA.js +0 -177
  728. package/dist/termCollection.unit.spec-4DIW3CJ3.js +0 -206
  729. package/dist/tk-ITZCKOQ5.js +0 -44
  730. package/dist/tp.ui-R6HVKCBC.js +0 -1457
  731. package/dist/tvs.density-AQ5GD437.js +0 -18
  732. package/dist/tvs.dt-2263TBEJ.js +0 -37
  733. package/dist/tvs.dtcnv.categorical-TRRHL33N.js +0 -38
  734. package/dist/tvs.dtcnv.continuous-GREYNF52.js +0 -70
  735. package/dist/tvs.dtfusion-XOX46L3M.js +0 -38
  736. package/dist/tvs.dtsnvindel-IDMXT53F.js +0 -38
  737. package/dist/tvs.dtsv-ZDWFYH2C.js +0 -38
  738. package/dist/tvs.numeric-ZN2R7BH3.js +0 -21
  739. package/dist/tvs.samplelst-GAP76HRH.js +0 -102
  740. package/dist/tvs.termCollection-GQ65UKSI.js +0 -151
  741. package/dist/violin-JGDL62YA.js +0 -44
  742. package/dist/violin.integration.spec-W4NN7LBY.js +0 -1417
  743. package/dist/violin.integration.spec-W4NN7LBY.js.map +0 -7
  744. package/dist/violin.interactivity-H4RP4K5U.js +0 -36
  745. package/dist/violin.renderer-QPHLACDC.js +0 -38
  746. package/dist/vocabulary-7JACY4J2.js +0 -39
  747. /package/dist/{2dmaf-SLBAWGPG.js.map → 2dmaf-YHYYSSKR.js.map} +0 -0
  748. /package/dist/{AppHeader-MVYNRMC7.js.map → AppHeader-T4ZLY3VG.js.map} +0 -0
  749. /package/dist/{CorrelationVolcano-TZCYC3NI.js.map → CorrelationVolcano-EXH4P56S.js.map} +0 -0
  750. /package/dist/{DE-2J2SK5UT.js.map → DE-C5K2TVUQ.js.map} +0 -0
  751. /package/dist/{DEinput-QM3GOQHM.js.map → DEinput-KVILE7QQ.js.map} +0 -0
  752. /package/dist/{DifferentialAnalysis-DS7CQOT6.js.map → DifferentialAnalysis-P6GKHAS5.js.map} +0 -0
  753. /package/dist/{Disco.UI-J2B7GGEZ.js.map → Disco.UI-4A2P5Q55.js.map} +0 -0
  754. /package/dist/{DmrPlot-D5W76QPY.js.map → DmrPlot-6EEEGD32.js.map} +0 -0
  755. /package/dist/{GB-LM5SGUG4.js.map → GB-XFO5I6ND.js.map} +0 -0
  756. /package/dist/{HicApp-YNBGAGKM.js.map → HicApp-3LFHOOAR.js.map} +0 -0
  757. /package/dist/{NumBinaryEditor-4QA5DQJT.js.map → NumBinaryEditor-74PY52BP.js.map} +0 -0
  758. /package/dist/{NumBinaryEditor.unit.spec-YWSIFTOJ.js.map → NumBinaryEditor.unit.spec-2PYZ7P2R.js.map} +0 -0
  759. /package/dist/{NumContEditor-ZPLVZFLH.js.map → NumContEditor-BMWALLQM.js.map} +0 -0
  760. /package/dist/{NumContEditor.unit.spec-NBCFOCOX.js.map → NumContEditor.unit.spec-ETVLVX6A.js.map} +0 -0
  761. /package/dist/{NumCustomBinEditor-TXEYRVPL.js.map → NumCustomBinEditor-2XJ6GUWY.js.map} +0 -0
  762. /package/dist/{NumCustomBinEditor.unit.spec-SQM63H4B.js.map → NumCustomBinEditor.unit.spec-TZVL553E.js.map} +0 -0
  763. /package/dist/{NumDiscreteEditor-6C4OWX62.js.map → NumDiscreteEditor-4LNLKAXT.js.map} +0 -0
  764. /package/dist/{NumDiscreteEditor.unit.spec-4HC4AGAM.js.map → NumDiscreteEditor.unit.spec-KQND2XAE.js.map} +0 -0
  765. /package/dist/{NumRegularBinEditor-VQAS3OXK.js.map → NumRegularBinEditor-OYELFDIB.js.map} +0 -0
  766. /package/dist/{NumRegularBinEditor.unit.spec-RGVEPB3Z.js.map → NumRegularBinEditor.unit.spec-44SALKLH.js.map} +0 -0
  767. /package/dist/{NumSplineEditor-SXOJICHU.js.map → NumSplineEditor-SENQC4P2.js.map} +0 -0
  768. /package/dist/{NumSplineEditor.unit.spec-HF5E6ANH.js.map → NumSplineEditor.unit.spec-XKB4XXU4.js.map} +0 -0
  769. /package/dist/{NumericDensity-LMLPMOSE.js.map → NumericDensity-GCNWO7YS.js.map} +0 -0
  770. /package/dist/{NumericDensity.unit.spec-3ZI5EVON.js.map → NumericDensity.unit.spec-7LWNOUYK.js.map} +0 -0
  771. /package/dist/{NumericHandler-Q6F6ANOS.js.map → NumericHandler-EMQBI5UI.js.map} +0 -0
  772. /package/dist/{NumericHandler.unit.spec-E6Z5HUNZ.js.map → NumericHandler.unit.spec-TEELPRIM.js.map} +0 -0
  773. /package/dist/{WsiSamplesPlot-KMI5S2EL.js.map → WsiSamplesPlot-B2DM7Z3Q.js.map} +0 -0
  774. /package/dist/{adSandbox-JTK5XEQL.js.map → adSandbox-INF3NNEV.js.map} +0 -0
  775. /package/dist/{alphaGenome-JRAV6WIY.js.map → alphaGenome-CO4TQHXN.js.map} +0 -0
  776. /package/dist/{app-JKDZL23V.js.map → app-63JU2YIT.js.map} +0 -0
  777. /package/dist/{app-OEARXM6E.js.map → app-BL3POUOO.js.map} +0 -0
  778. /package/dist/{bam-CYEPLBK4.js.map → bam-SVEJYICC.js.map} +0 -0
  779. /package/dist/{barchart-GG5UFDG4.js.map → barchart-PDUXZAIH.js.map} +0 -0
  780. /package/dist/{barchart.data-KXA66FAL.js.map → barchart.data-EXENRVMU.js.map} +0 -0
  781. /package/dist/{barchart.events-P2USOIR7.js.map → barchart.events-MQNQTSWI.js.map} +0 -0
  782. /package/dist/{barchart.integration.spec-5QSPQQLJ.js.map → barchart.integration.spec-DSO2377T.js.map} +0 -0
  783. /package/dist/{bars.renderer-T5R3UIBW.js.map → bars.renderer-S7A7I6BQ.js.map} +0 -0
  784. /package/dist/{block.init-ZHX6DFWF.js.map → block.init-7J5OHYKA.js.map} +0 -0
  785. /package/dist/{block.mds.expressionrank-YMGYXXYT.js.map → block.mds.expressionrank-643H7PN7.js.map} +0 -0
  786. /package/dist/{block.mds.geneboxplot-IAILQYX4.js.map → block.mds.geneboxplot-C222ODSL.js.map} +0 -0
  787. /package/dist/{block.mds.junction-BRNFNQMU.js.map → block.mds.junction-C5DJRUOK.js.map} +0 -0
  788. /package/dist/{block.mds.svcnv-OHKC7YPO.js.map → block.mds.svcnv-4G74JQ7Y.js.map} +0 -0
  789. /package/dist/{block.svg-PNGK45HW.js.map → block.svg-35KUC5R7.js.map} +0 -0
  790. /package/dist/{block.tk.aicheck-SCIOJ4WN.js.map → block.tk.aicheck-LLWT6K6H.js.map} +0 -0
  791. /package/dist/{block.tk.ase-BABJ73GG.js.map → block.tk.ase-PQUKY65E.js.map} +0 -0
  792. /package/dist/{block.tk.bam-LZWJ5BCQ.js.map → block.tk.bam-EUEOB7BR.js.map} +0 -0
  793. /package/dist/{block.tk.bedgraphdot-7NQLC3XJ.js.map → block.tk.bedgraphdot-XAHUY545.js.map} +0 -0
  794. /package/dist/{block.tk.bigwig.ui-VNY4SFD5.js.map → block.tk.bigwig.ui-HEOPNL3T.js.map} +0 -0
  795. /package/dist/{block.tk.hicstraw-36A7VDRM.js.map → block.tk.hicstraw-EPH3LEX2.js.map} +0 -0
  796. /package/dist/{block.tk.junction-D373YEMK.js.map → block.tk.junction-MIUDAIAR.js.map} +0 -0
  797. /package/dist/{block.tk.junction.textmatrixui-FFII7J3X.js.map → block.tk.junction.textmatrixui-AVFUQBDS.js.map} +0 -0
  798. /package/dist/{block.tk.ld-XGB6KMDO.js.map → block.tk.ld-ED7YMBQ4.js.map} +0 -0
  799. /package/dist/{block.tk.menu-PEZANZBZ.js.map → block.tk.menu-3CVIECWQ.js.map} +0 -0
  800. /package/dist/{block.tk.pgv-MU5BPTT2.js.map → block.tk.pgv-HETJVWXH.js.map} +0 -0
  801. /package/dist/{brainImaging-LVJON47N.js.map → brainImaging-K3LHK3DD.js.map} +0 -0
  802. /package/dist/{chat-5FDIAQJ4.js.map → chat-BYX5ARUK.js.map} +0 -0
  803. /package/dist/{chunk-PQABAAEZ.js.map → chunk-2LULD7RN.js.map} +0 -0
  804. /package/dist/{chunk-H2D7EVUA.js.map → chunk-2TJESM3Z.js.map} +0 -0
  805. /package/dist/{chunk-UQACPOCM.js.map → chunk-2VFYZ3EY.js.map} +0 -0
  806. /package/dist/{chunk-HH4QLSTK.js.map → chunk-3CD5ZROA.js.map} +0 -0
  807. /package/dist/{chunk-JOXUBWN3.js.map → chunk-3DCABJHB.js.map} +0 -0
  808. /package/dist/{chunk-H2K5KZP7.js.map → chunk-3MMKHYUM.js.map} +0 -0
  809. /package/dist/{chunk-T2HYA2KL.js.map → chunk-3PRPMJTG.js.map} +0 -0
  810. /package/dist/{chunk-TE3DK3A6.js.map → chunk-5HCB4HNL.js.map} +0 -0
  811. /package/dist/{chunk-2J3566TA.js.map → chunk-5JD4D5GD.js.map} +0 -0
  812. /package/dist/{chunk-7A7NMCQ3.js.map → chunk-5UMPBVA6.js.map} +0 -0
  813. /package/dist/{chunk-UBS5UVIY.js.map → chunk-6LAE5AVA.js.map} +0 -0
  814. /package/dist/{chunk-YOTWMCT5.js.map → chunk-7FTDQDVF.js.map} +0 -0
  815. /package/dist/{chunk-K57RR3FD.js.map → chunk-7IEZ2KMW.js.map} +0 -0
  816. /package/dist/{chunk-ORPCSG6T.js.map → chunk-A5AFIW2T.js.map} +0 -0
  817. /package/dist/{chunk-MPJHDHBA.js.map → chunk-AIBODF32.js.map} +0 -0
  818. /package/dist/{chunk-DONWY7TP.js.map → chunk-AQ4OP4GR.js.map} +0 -0
  819. /package/dist/{chunk-MXI3NXRB.js.map → chunk-AWWW6K2I.js.map} +0 -0
  820. /package/dist/{chunk-FQRLSKJC.js.map → chunk-BAY47D5E.js.map} +0 -0
  821. /package/dist/{chunk-TN5GSG34.js.map → chunk-CFHKYLDY.js.map} +0 -0
  822. /package/dist/{chunk-VLTDUJRM.js.map → chunk-CJZN7HFL.js.map} +0 -0
  823. /package/dist/{chunk-X6UPDFDX.js.map → chunk-CXOF4UGH.js.map} +0 -0
  824. /package/dist/{chunk-Y3TDC7NU.js.map → chunk-D4QFQQWJ.js.map} +0 -0
  825. /package/dist/{chunk-UR3C4SCH.js.map → chunk-DNCSPTOQ.js.map} +0 -0
  826. /package/dist/{chunk-KSFSM46X.js.map → chunk-DQGSCCI3.js.map} +0 -0
  827. /package/dist/{chunk-B6HCIAM3.js.map → chunk-EWGMLVC7.js.map} +0 -0
  828. /package/dist/{chunk-PIACSJPH.js.map → chunk-F7PB5HGT.js.map} +0 -0
  829. /package/dist/{chunk-UWX7W22M.js.map → chunk-FVWCYGJL.js.map} +0 -0
  830. /package/dist/{chunk-IP4T477W.js.map → chunk-G7QKLA54.js.map} +0 -0
  831. /package/dist/{chunk-E6DRQJJT.js.map → chunk-J5RINDKS.js.map} +0 -0
  832. /package/dist/{chunk-UBGTQMOO.js.map → chunk-JMPSZMDD.js.map} +0 -0
  833. /package/dist/{chunk-DVDDXOWT.js.map → chunk-KQMEJUWI.js.map} +0 -0
  834. /package/dist/{chunk-VJ37HKM6.js.map → chunk-LBXZGYU5.js.map} +0 -0
  835. /package/dist/{chunk-FGMPKWT5.js.map → chunk-LI7FE335.js.map} +0 -0
  836. /package/dist/{chunk-AZYDW5T7.js.map → chunk-LRMV5DNW.js.map} +0 -0
  837. /package/dist/{chunk-RSU37SVQ.js.map → chunk-LWNOC7AJ.js.map} +0 -0
  838. /package/dist/{chunk-K6JLCMVL.js.map → chunk-MICNOSX7.js.map} +0 -0
  839. /package/dist/{chunk-JHOGX5VE.js.map → chunk-MLWNMXAV.js.map} +0 -0
  840. /package/dist/{chunk-LEDPPLQK.js.map → chunk-MMBLSLQR.js.map} +0 -0
  841. /package/dist/{chunk-LUTT3MBZ.js.map → chunk-NV5XWADG.js.map} +0 -0
  842. /package/dist/{chunk-P5HLYAHP.js.map → chunk-O3255WPP.js.map} +0 -0
  843. /package/dist/{chunk-ILF2GKBY.js.map → chunk-PEWHCKCH.js.map} +0 -0
  844. /package/dist/{chunk-DHZL3FBC.js.map → chunk-Q7PYFSNU.js.map} +0 -0
  845. /package/dist/{chunk-GPOECA3V.js.map → chunk-QMI222IJ.js.map} +0 -0
  846. /package/dist/{chunk-AETE4F7R.js.map → chunk-QRIRWDIW.js.map} +0 -0
  847. /package/dist/{chunk-F6V4AYWP.js.map → chunk-SEQLC4AD.js.map} +0 -0
  848. /package/dist/{chunk-G6ELKVBG.js.map → chunk-SJTOSA7E.js.map} +0 -0
  849. /package/dist/{chunk-O4PXELXF.js.map → chunk-SRYFYAXK.js.map} +0 -0
  850. /package/dist/{chunk-HAMDFQIX.js.map → chunk-TITA4HJA.js.map} +0 -0
  851. /package/dist/{chunk-CCIZJAXB.js.map → chunk-U7ZMIMI5.js.map} +0 -0
  852. /package/dist/{chunk-6MSCYO7K.js.map → chunk-UJU3Q7QJ.js.map} +0 -0
  853. /package/dist/{chunk-IIRU6VK2.js.map → chunk-UL2ISTHR.js.map} +0 -0
  854. /package/dist/{chunk-RFIVPTMS.js.map → chunk-VIPMLSZP.js.map} +0 -0
  855. /package/dist/{chunk-MNRYCG2S.js.map → chunk-VZPYIG77.js.map} +0 -0
  856. /package/dist/{chunk-FBAJTPBU.js.map → chunk-WIYKAKWE.js.map} +0 -0
  857. /package/dist/{chunk-GO5SIPFE.js.map → chunk-WPHOEG56.js.map} +0 -0
  858. /package/dist/{chunk-GKK3CZ6H.js.map → chunk-WU63AOK2.js.map} +0 -0
  859. /package/dist/{chunk-2OSEZCWZ.js.map → chunk-XS4QWRS3.js.map} +0 -0
  860. /package/dist/{chunk-W6UUEAEP.js.map → chunk-YSW57QDM.js.map} +0 -0
  861. /package/dist/{chunk-YUMPQ3CJ.js.map → chunk-YXQNZPCO.js.map} +0 -0
  862. /package/dist/{chunk-KVG7FTTK.js.map → chunk-ZTKQLABY.js.map} +0 -0
  863. /package/dist/{condition-VHP2L4GM.js.map → condition-AM523RDR.js.map} +0 -0
  864. /package/dist/{controls-N5Q7U7JR.js.map → controls-HTMH5QBP.js.map} +0 -0
  865. /package/dist/{controls.config-NJMW4SLR.js.map → controls.config-EEK2RBPI.js.map} +0 -0
  866. /package/dist/{correlation-3LDASF5I.js.map → correlation-HKD67SPS.js.map} +0 -0
  867. /package/dist/{cuminc-UWJ23W6C.js.map → cuminc-66V55MMN.js.map} +0 -0
  868. /package/dist/{cuminc.integration.spec-OZYYET3W.js.map → cuminc.integration.spec-PNTOPB2L.js.map} +0 -0
  869. /package/dist/{customdata.inputui-2FVCVSE4.js.map → customdata.inputui-Z4WQDU6I.js.map} +0 -0
  870. /package/dist/{dataDownload-4S4PE5HX.js.map → dataDownload-3ZEI22OK.js.map} +0 -0
  871. /package/dist/{dataDownload.integration.spec-B57LEKFZ.js.map → dataDownload.integration.spec-C3JRC6K5.js.map} +0 -0
  872. /package/dist/{databrowser.ui-N6GHEQ2P.js.map → databrowser.ui-Q365SHBG.js.map} +0 -0
  873. /package/dist/{dnaMethylation-BOGAUAWA.js.map → dnaMethylation-IFZWWBUG.js.map} +0 -0
  874. /package/dist/{e2pca-L5EBQJNP.js.map → e2pca-I3QXF7EM.js.map} +0 -0
  875. /package/dist/{ep-Z67ORKUX.js.map → ep-2VCQ36GT.js.map} +0 -0
  876. /package/dist/{expclust.gdc.spec-SP7VOL64.js.map → expclust.gdc.spec-VWIQFY67.js.map} +0 -0
  877. /package/dist/{facet-HDB4VDGU.js.map → facet-CHP3VUWS.js.map} +0 -0
  878. /package/dist/{geneExpClustering-6ZPOLTDJ.js.map → geneExpClustering-YDIDEH2O.js.map} +0 -0
  879. /package/dist/{geneExpression-T7QUHV5S.js.map → geneExpression-FA5RJRHZ.js.map} +0 -0
  880. /package/dist/{geneExpression-T6YIG4XQ.js.map → geneExpression-X2KXJPND.js.map} +0 -0
  881. /package/dist/{geneExpression.unit.spec-DO52L5IB.js.map → geneExpression.unit.spec-3LVHYZGG.js.map} +0 -0
  882. /package/dist/{geneORA-KOUDUWUO.js.map → geneORA-4CAYRKSN.js.map} +0 -0
  883. /package/dist/{geneVariant-FVR76F6I.js.map → geneVariant-OCOTNUH4.js.map} +0 -0
  884. /package/dist/{geneVariant-I5QUITKG.js.map → geneVariant-Y4L5W5HF.js.map} +0 -0
  885. /package/dist/{geneVariant.integration.spec-D4IRM7B5.js.map → geneVariant.integration.spec-BOJ5MM5K.js.map} +0 -0
  886. /package/dist/{genefusion.ui-35IYSZD7.js.map → genefusion.ui-I6HZOBIV.js.map} +0 -0
  887. /package/dist/{geneset-7ZHJ5KWK.js.map → geneset-GEWKDAAT.js.map} +0 -0
  888. /package/dist/{genomeBrowser.spec-VXASVLNH.js.map → genomeBrowser.spec-FDEGH4DY.js.map} +0 -0
  889. /package/dist/{grin2-IY26UUQI.js.map → grin2-K56B6XBZ.js.map} +0 -0
  890. /package/dist/{grin2-7NM56COO.js.map → grin2-V6FMM44N.js.map} +0 -0
  891. /package/dist/{gsea-TORO46C6.js.map → gsea-UNPPRU2U.js.map} +0 -0
  892. /package/dist/{hierCluster-3BKEGW6P.js.map → hierCluster-DXAWRQNI.js.map} +0 -0
  893. /package/dist/{hierCluster-HM3LOM6V.js.map → hierCluster-SPIQA2M2.js.map} +0 -0
  894. /package/dist/{hierCluster.config-LDO5IGQ5.js.map → hierCluster.config-JW6D3T3Q.js.map} +0 -0
  895. /package/dist/{hierCluster.integration.spec-XO5R6CQT.js.map → hierCluster.integration.spec-5NXZY4LG.js.map} +0 -0
  896. /package/dist/{hierCluster.interactivity-NVQ6262K.js.map → hierCluster.interactivity-CPPBXHM7.js.map} +0 -0
  897. /package/dist/{hierCluster.renderers-SWPPNBLU.js.map → hierCluster.renderers-A6MEGO2B.js.map} +0 -0
  898. /package/dist/{imagePlot-V4WLAPV6.js.map → imagePlot-QLAHCULW.js.map} +0 -0
  899. /package/dist/{importPlot-NZKQEOX4.js.map → importPlot-6ITZ6U7G.js.map} +0 -0
  900. /package/dist/{isoformExpression-TIZBIGNL.js.map → isoformExpression-7GAUF2QV.js.map} +0 -0
  901. /package/dist/{jspdf.es.min-DO4YWL2R.js.map → jspdf.es.min-FC3BCETM.js.map} +0 -0
  902. /package/dist/{launch.adhoc-JYEN42NM.js.map → launch.adhoc-HFHBAUR6.js.map} +0 -0
  903. /package/dist/{leftlabel.sample-43DL3J3H.js.map → leftlabel.sample-CWPJUCHR.js.map} +0 -0
  904. /package/dist/{legacyDataset-QRSNRVUA.js.map → legacyDataset-PBCPC5I7.js.map} +0 -0
  905. /package/dist/{lollipop-NMWZ4FVF.js.map → lollipop-QFRQLEER.js.map} +0 -0
  906. /package/dist/{maf-DS3EOVGV.js.map → maf-OEODBT3Y.js.map} +0 -0
  907. /package/dist/{maftimeline-ZB2753S7.js.map → maftimeline-2DFIF4C4.js.map} +0 -0
  908. /package/dist/{matrix-RCGQWQ3C.js.map → matrix-3HFB5TUU.js.map} +0 -0
  909. /package/dist/{matrix-WTTEK4FT.js.map → matrix-MIXK27AD.js.map} +0 -0
  910. /package/dist/{matrix.cells-UO5ASQ35.js.map → matrix.cells-U7AQNEBP.js.map} +0 -0
  911. /package/dist/{matrix.config-3UQAT3QR.js.map → matrix.config-FX5MHX6O.js.map} +0 -0
  912. /package/dist/{matrix.controls-PRZ77K5L.js.map → matrix.controls-5K7BB5Z4.js.map} +0 -0
  913. /package/dist/{matrix.data-4W73RQ3H.js.map → matrix.data-EEIY6AO4.js.map} +0 -0
  914. /package/dist/{matrix.dom-IZFFS4RQ.js.map → matrix.dom-6QL3AJMW.js.map} +0 -0
  915. /package/dist/{matrix.groups-5VMPI7SA.js.map → matrix.groups-CUB6UWC5.js.map} +0 -0
  916. /package/dist/{matrix.integration.spec-2F5LDLC2.js.map → matrix.integration.spec-ML4T7FRG.js.map} +0 -0
  917. /package/dist/{matrix.interactivity-MIPZ6ELV.js.map → matrix.interactivity-QMPWX63Q.js.map} +0 -0
  918. /package/dist/{matrix.layout-EO5LVYRO.js.map → matrix.layout-7SEF6MYI.js.map} +0 -0
  919. /package/dist/{matrix.legend-QBFBFEUG.js.map → matrix.legend-42LQGAGX.js.map} +0 -0
  920. /package/dist/{matrix.renderers-ERJXVCQL.js.map → matrix.renderers-ZF7LLER3.js.map} +0 -0
  921. /package/dist/{matrix.serieses-E23EPXHA.js.map → matrix.serieses-4B2WB526.js.map} +0 -0
  922. /package/dist/{matrix.sort-I4UGMEXR.js.map → matrix.sort-BJACNR7G.js.map} +0 -0
  923. /package/dist/{matrix.sort.unit.spec-CRGF6CSE.js.map → matrix.sort.unit.spec-ZGSM7HDJ.js.map} +0 -0
  924. /package/dist/{matrix.sorterUi-YLSYTYLE.js.map → matrix.sorterUi-W6XFYZY2.js.map} +0 -0
  925. /package/dist/{matrix.sorterUi.unit.spec-ENG3ICOO.js.map → matrix.sorterUi.unit.spec-V34ZZD7A.js.map} +0 -0
  926. /package/dist/{mavb-5WR7OJHI.js.map → mavb-NVQVFU6E.js.map} +0 -0
  927. /package/dist/{mds.fimo-3ZRH7BBJ.js.map → mds.fimo-HOCF6U6K.js.map} +0 -0
  928. /package/dist/{mds.samplescatterplot-RPXR2FVK.js.map → mds.samplescatterplot-ULD5BK5R.js.map} +0 -0
  929. /package/dist/{mds.survivalplot-WSSMYUZD.js.map → mds.survivalplot-5US32RQD.js.map} +0 -0
  930. /package/dist/{oncomatrix-JKYPUJQR.js.map → oncomatrix-Y3G3MUJJ.js.map} +0 -0
  931. /package/dist/{oncomatrix.spec-OEGU4DYK.js.map → oncomatrix.spec-MFUJLWEP.js.map} +0 -0
  932. /package/dist/{plot.2dvaf-ZGARLQNK.js.map → plot.2dvaf-F4WZ4YPU.js.map} +0 -0
  933. /package/dist/{plot.app-TKUJH3LK.js.map → plot.app-YFFLLBU5.js.map} +0 -0
  934. /package/dist/{plot.barplot-FEIPGDZ2.js.map → plot.barplot-2EJ2MWQD.js.map} +0 -0
  935. /package/dist/{plot.boxplot-6RASUMZB.js.map → plot.boxplot-AKZM443E.js.map} +0 -0
  936. /package/dist/{plot.brainImaging-ZJPFWX2W.js.map → plot.brainImaging-DR6WJNFZ.js.map} +0 -0
  937. /package/dist/{plot.dzi-PC34YI6Y.js.map → plot.dzi-R2MR7HAT.js.map} +0 -0
  938. /package/dist/{plot.ssgq-Z4UNJKWO.js.map → plot.ssgq-C52YIUFY.js.map} +0 -0
  939. /package/dist/{plot.vaf2cov-NZ4WULKT.js.map → plot.vaf2cov-FOD3K7BC.js.map} +0 -0
  940. /package/dist/{plot.wsi-YYXFAZWY.js.map → plot.wsi-D2TXYERK.js.map} +0 -0
  941. /package/dist/{polar-X2GPIBLB.js.map → polar-2LC35O6K.js.map} +0 -0
  942. /package/dist/{polar2-TZ553QQH.js.map → polar2-QPUOEUJZ.js.map} +0 -0
  943. /package/dist/{profile.spec-VB6VMFLY.js.map → profile.spec-3NCDGHLX.js.map} +0 -0
  944. /package/dist/{profileBarchart-SKJSTC7B.js.map → profileBarchart-PPQ3NL4D.js.map} +0 -0
  945. /package/dist/{profileForms-RLOGSMAQ.js.map → profileForms-GS3VVW65.js.map} +0 -0
  946. /package/dist/{profilePlot-267ZS3RG.js.map → profilePlot-DQWFH5NC.js.map} +0 -0
  947. /package/dist/{profileRadar-KGOBHCSF.js.map → profileRadar-KAKRDC4R.js.map} +0 -0
  948. /package/dist/{proteomeAbundance-PGHZSVAF.js.map → proteomeAbundance-DE4NVBCN.js.map} +0 -0
  949. /package/dist/{proteomeAbundance-JUYAYO5I.js.map → proteomeAbundance-LTB3QR3G.js.map} +0 -0
  950. /package/dist/{qualitative-3IECKKJM.js.map → qualitative-YOFAROVR.js.map} +0 -0
  951. /package/dist/{regression-J6FFRPXN.js.map → regression-PF6IAHJK.js.map} +0 -0
  952. /package/dist/{regression.inputs-T7LWBSYZ.js.map → regression.inputs-77IUYED3.js.map} +0 -0
  953. /package/dist/{regression.inputs.term-TT7PNX6G.js.map → regression.inputs.term-WWCHU6KF.js.map} +0 -0
  954. /package/dist/{regression.inputs.values.table-SHFUNKCS.js.map → regression.inputs.values.table-I6GM6MU7.js.map} +0 -0
  955. /package/dist/{regression.results-D4WX6VIV.js.map → regression.results-6GXNKYUS.js.map} +0 -0
  956. /package/dist/{regression.spec-7SW55L7X.js.map → regression.spec-MEFQNY34.js.map} +0 -0
  957. /package/dist/{report-QYOZ4BRF.js.map → report-LG3UKZHL.js.map} +0 -0
  958. /package/dist/{sampleScatter.spec-JCHFMGNF.js.map → sampleScatter.spec-D3IK7MSA.js.map} +0 -0
  959. /package/dist/{sampleView-7RPKNAZC.js.map → sampleView-XUI2J5EC.js.map} +0 -0
  960. /package/dist/{samplelst-4WNPHZVG.js.map → samplelst-A7IHCBAX.js.map} +0 -0
  961. /package/dist/{samplematrix-CG52DSXJ.js.map → samplematrix-VGUU7Q75.js.map} +0 -0
  962. /package/dist/{sc-OJSWILSA.js.map → sc-UVKVT2RY.js.map} +0 -0
  963. /package/dist/{scatter-LG2RMMEC.js.map → scatter-UILUYOGO.js.map} +0 -0
  964. /package/dist/{selectGenomeWithTklst-QXRVE6N4.js.map → selectGenomeWithTklst-LWKIMZEJ.js.map} +0 -0
  965. /package/dist/{singleCellCellType-XBSRL33U.js.map → singleCellCellType-TI52WQQ4.js.map} +0 -0
  966. /package/dist/{singleCellGeneExpression-64ECP62X.js.map → singleCellGeneExpression-I5SAHMGI.js.map} +0 -0
  967. /package/dist/{singleCellPlot-E5F62JY6.js.map → singleCellPlot-HRWCHYCI.js.map} +0 -0
  968. /package/dist/{singlecell-S7B5V7NK.js.map → singlecell-BHPP7KCO.js.map} +0 -0
  969. /package/dist/{singlecell-FCY5EOUV.js.map → singlecell-PQNKBKR7.js.map} +0 -0
  970. /package/dist/{snp-ACKX4GRX.js.map → snp-V4YGI7B3.js.map} +0 -0
  971. /package/dist/{snp.unit.spec-QBGHKKUD.js.map → snp.unit.spec-JSUCMGNP.js.map} +0 -0
  972. /package/dist/{snplocus-7EUOW7J7.js.map → snplocus-3YT5NNCH.js.map} +0 -0
  973. /package/dist/{spliceevent.a53ss.diagram-ALQZA35Z.js.map → spliceevent.a53ss.diagram-QEQJ44YH.js.map} +0 -0
  974. /package/dist/{spliceevent.exonskip.diagram-UF7WJA5R.js.map → spliceevent.exonskip.diagram-HMWVSOJG.js.map} +0 -0
  975. /package/dist/{spliceevent.noeventdiagram-4HPGRNRR.js.map → spliceevent.noeventdiagram-L5HUCT5A.js.map} +0 -0
  976. /package/dist/{ssGSEA-FDRBBBLJ.js.map → ssGSEA-Z3XRCBYW.js.map} +0 -0
  977. /package/dist/{ssGSEA.unit.spec-EZEOWJVV.js.map → ssGSEA.unit.spec-EUCTV2XJ.js.map} +0 -0
  978. /package/dist/{summarizeMutationDiagnosis-LALOJTHV.js.map → summarizeMutationDiagnosis-HFFYLQOF.js.map} +0 -0
  979. /package/dist/{summarizeMutationSurvival-TSNTSOBZ.js.map → summarizeMutationSurvival-OBK6YILP.js.map} +0 -0
  980. /package/dist/{summary-YRHVS64T.js.map → summary-W55WWIU2.js.map} +0 -0
  981. /package/dist/{summary.integration.spec-766YQLQA.js.map → summary.integration.spec-X2PNAUKW.js.map} +0 -0
  982. /package/dist/{summaryInput-VQ2X6GSX.js.map → summaryInput-X547Q6C7.js.map} +0 -0
  983. /package/dist/{survival-TVA3ZWVP.js.map → survival-PAJZHZPD.js.map} +0 -0
  984. /package/dist/{survival-FQXZH2MM.js.map → survival-TQPWMOD5.js.map} +0 -0
  985. /package/dist/{svg2pdf.es.min-EZ4UYRSH.js.map → svg2pdf.es.min-CYTPRWNB.js.map} +0 -0
  986. /package/dist/{svgraph-4BFBO7EL.js.map → svgraph-Y35C2M3D.js.map} +0 -0
  987. /package/dist/{svmr-ML7GAIIA.js.map → svmr-WGCIR7PE.js.map} +0 -0
  988. /package/dist/{table-SMLMUWPP.js.map → table-Q3B2YXEN.js.map} +0 -0
  989. /package/dist/{termCollection-EE6AOIVA.js.map → termCollection-A6YTSM5I.js.map} +0 -0
  990. /package/dist/{termCollection-22CPTISZ.js.map → termCollection-NTFNVQ7D.js.map} +0 -0
  991. /package/dist/{termCollection.unit.spec-4DIW3CJ3.js.map → termCollection.unit.spec-BX54PHKT.js.map} +0 -0
  992. /package/dist/{tk-ITZCKOQ5.js.map → tk-OCBZ7YR6.js.map} +0 -0
  993. /package/dist/{tp.ui-R6HVKCBC.js.map → tp.ui-ZT47N2CO.js.map} +0 -0
  994. /package/dist/{tvs.density-AQ5GD437.js.map → tvs.density-HSVPDDGA.js.map} +0 -0
  995. /package/dist/{tvs.dt-2263TBEJ.js.map → tvs.dt-BFB253O3.js.map} +0 -0
  996. /package/dist/{tvs.dtcnv.categorical-TRRHL33N.js.map → tvs.dtcnv.categorical-ARGAYIDO.js.map} +0 -0
  997. /package/dist/{tvs.dtcnv.continuous-GREYNF52.js.map → tvs.dtcnv.continuous-JCU23ERV.js.map} +0 -0
  998. /package/dist/{tvs.dtfusion-XOX46L3M.js.map → tvs.dtfusion-FV64XLZI.js.map} +0 -0
  999. /package/dist/{tvs.dtsnvindel-IDMXT53F.js.map → tvs.dtsnvindel-DMOXMEVL.js.map} +0 -0
  1000. /package/dist/{tvs.dtsv-ZDWFYH2C.js.map → tvs.dtsv-53FSZEPV.js.map} +0 -0
  1001. /package/dist/{tvs.numeric-ZN2R7BH3.js.map → tvs.numeric-ICUGA4WY.js.map} +0 -0
  1002. /package/dist/{tvs.samplelst-GAP76HRH.js.map → tvs.samplelst-MVPL6VXX.js.map} +0 -0
  1003. /package/dist/{tvs.termCollection-GQ65UKSI.js.map → tvs.termCollection-UGJXTHTG.js.map} +0 -0
  1004. /package/dist/{violin-JGDL62YA.js.map → violin-ZLUDGSQG.js.map} +0 -0
  1005. /package/dist/{violin.interactivity-H4RP4K5U.js.map → violin.interactivity-ULDOCZWW.js.map} +0 -0
  1006. /package/dist/{violin.renderer-QPHLACDC.js.map → violin.renderer-KJAXPMIK.js.map} +0 -0
  1007. /package/dist/{vocabulary-7JACY4J2.js.map → vocabulary-34YUQ4ZQ.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/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/snv/vafTooltip.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 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'\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 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\n\t\tdata.forEach(dObject => {\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\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)) {\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.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 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 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\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) {\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.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\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}\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 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\tcolor: this.settings.Disco.mutationWaterfallColor || '#4d4d4d',\n\t\t\t\t\tonColorChange: this.discoInteractions.onMutationWaterfallColorChange\n\t\t\t\t}\n\t\t\t\t: undefined\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\tthis.settings.rings.chromosomeWidth *= scale\n\t\tthis.settings.rings.nonExonicRingWidth *= scale\n\t\tthis.settings.rings.snvRingWidth *= scale\n\t\tthis.settings.rings.lohRingWidth *= scale\n\t\tthis.settings.rings.cnvRingWidth *= scale\n\t\tthis.settings.rings.mutationWaterfallRingWidth *= scale\n\t\tthis.settings.label.fontSize *= scale\n\t\tthis.settings.legend.fontSize *= 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\tborder: '1px solid #ccc'\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\tborder: '1px solid #ccc'\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\tborder: '1px solid #ccc'\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\tborder: '1px solid #ccc'\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\tborder: '1px solid #ccc'\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\tborder: '1px solid #ccc'\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',\n\t\t\tcolor: FusionLegend.Interchromosomal.valueOf(),\n\t\t\torder: 0,\n\t\t\tborder: '1px solid #ccc'\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',\n\t\t\tcolor: FusionLegend.Intrachromosomal.valueOf(),\n\t\t\torder: 1,\n\t\t\tborder: '1px solid #ccc'\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 { 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\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 hasValidReadCounts(refCountValue: ReadCountValue, altCountValue: ReadCountValue): boolean {\n\tconst refCount = getIntegerCount(refCountValue)\n\tconst altCount = getIntegerCount(altCountValue)\n\treturn refCount != null && altCount != null && refCount >= 0 && altCount >= 0 && refCount + altCount > 0\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 altCount = vaf?.altCount\n\t\t\tif (!label || refCount == null || altCount == null) continue\n\t\t\tentries.push({ label, refCount, altCount })\n\t\t}\n\t}\n\treturn entries\n}\n\nexport function hasAnyValidVafEntry(vafs: Data['vafs']): boolean {\n\treturn getVafEntries(vafs).some(vaf => hasValidReadCounts(vaf.refCount, vaf.altCount))\n}\n\nexport function appendVafBar(td2: any, refCountValue: ReadCountValue, altCountValue: ReadCountValue, label = 'VAF') {\n\tconst refCount = getIntegerCount(refCountValue)\n\tconst altCount = getIntegerCount(altCountValue)\n\tif (refCount == null || altCount == null) return\n\n\tconst totalCount = refCount + altCount\n\tconst fraction = altCount / 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: altCount, v2: 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)) continue\n\t\tappendVafBar(td2, vaf.refCount, vaf.altCount, vaf.label)\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\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: 'SNV',\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\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
+ }