@sjcrh/proteinpaint-client 2.181.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 (980) 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/DE-C5K2TVUQ.js.map +7 -0
  10. package/dist/DEinput-KVILE7QQ.js +297 -0
  11. package/dist/DEinput-KVILE7QQ.js.map +7 -0
  12. package/dist/DifferentialAnalysis-P6GKHAS5.js +238 -0
  13. package/dist/Disco-IMLXEBPG.js +3235 -0
  14. package/dist/Disco-IMLXEBPG.js.map +7 -0
  15. package/dist/Disco.UI-4A2P5Q55.js +242 -0
  16. package/dist/DmrPlot-6EEEGD32.js +640 -0
  17. package/dist/GB-XFO5I6ND.js +1125 -0
  18. package/dist/HicApp-3LFHOOAR.js +2248 -0
  19. package/dist/NumBinaryEditor-74PY52BP.js +268 -0
  20. package/dist/NumBinaryEditor-74PY52BP.js.map +7 -0
  21. package/dist/NumBinaryEditor.unit.spec-2PYZ7P2R.js +284 -0
  22. package/dist/NumContEditor-BMWALLQM.js +105 -0
  23. package/dist/NumContEditor.unit.spec-ETVLVX6A.js +167 -0
  24. package/dist/NumCustomBinEditor-2XJ6GUWY.js +36 -0
  25. package/dist/NumCustomBinEditor.unit.spec-TZVL553E.js +282 -0
  26. package/dist/NumDiscreteEditor-4LNLKAXT.js +177 -0
  27. package/dist/NumDiscreteEditor-4LNLKAXT.js.map +7 -0
  28. package/dist/NumDiscreteEditor.unit.spec-KQND2XAE.js +200 -0
  29. package/dist/NumRegularBinEditor-OYELFDIB.js +36 -0
  30. package/dist/NumRegularBinEditor.unit.spec-44SALKLH.js +225 -0
  31. package/dist/NumSplineEditor-SENQC4P2.js +190 -0
  32. package/dist/NumSplineEditor-SENQC4P2.js.map +7 -0
  33. package/dist/NumSplineEditor.unit.spec-XKB4XXU4.js +197 -0
  34. package/dist/NumericDensity-GCNWO7YS.js +36 -0
  35. package/dist/NumericDensity.unit.spec-7LWNOUYK.js +219 -0
  36. package/dist/NumericHandler-EMQBI5UI.js +37 -0
  37. package/dist/NumericHandler.unit.spec-TEELPRIM.js +217 -0
  38. package/dist/RunChart2-LJBC5X2H.js +756 -0
  39. package/dist/RunChart2-LJBC5X2H.js.map +7 -0
  40. package/dist/SC-3EB6UYIS.js +682 -0
  41. package/dist/SC-3EB6UYIS.js.map +7 -0
  42. package/dist/Volcano-CPULLVYV.js +1185 -0
  43. package/dist/Volcano-CPULLVYV.js.map +7 -0
  44. package/dist/WSIViewer-2YCT4LCM.js +47974 -0
  45. package/dist/WSIViewer-2YCT4LCM.js.map +7 -0
  46. package/dist/WsiSamplesPlot-B2DM7Z3Q.js +163 -0
  47. package/dist/adSandbox-INF3NNEV.js +36 -0
  48. package/dist/alphaGenome-CO4TQHXN.js +173 -0
  49. package/dist/app-63JU2YIT.js +47 -0
  50. package/dist/app-BL3POUOO.js +35 -0
  51. package/dist/app.js +17 -17
  52. package/dist/bam-SVEJYICC.js +857 -0
  53. package/dist/bam-SVEJYICC.js.map +7 -0
  54. package/dist/barchart-PDUXZAIH.js +45 -0
  55. package/dist/barchart.data-EXENRVMU.js +22 -0
  56. package/dist/barchart.events-MQNQTSWI.js +45 -0
  57. package/dist/barchart.integration.spec-DSO2377T.js +1675 -0
  58. package/dist/bars.renderer-S7A7I6BQ.js +12 -0
  59. package/dist/block-OO2NLGUP.js +6200 -0
  60. package/dist/block-OO2NLGUP.js.map +7 -0
  61. package/dist/block.init-7J5OHYKA.js +36 -0
  62. package/dist/block.mds.expressionrank-643H7PN7.js +357 -0
  63. package/dist/block.mds.geneboxplot-C222ODSL.js +826 -0
  64. package/dist/block.mds.junction-C5DJRUOK.js +1543 -0
  65. package/dist/block.mds.svcnv-4G74JQ7Y.js +6799 -0
  66. package/dist/block.svg-35KUC5R7.js +162 -0
  67. package/dist/block.tk.aicheck-LLWT6K6H.js +281 -0
  68. package/dist/block.tk.ase-PQUKY65E.js +363 -0
  69. package/dist/block.tk.bam-EUEOB7BR.js +1904 -0
  70. package/dist/block.tk.bedgraphdot-XAHUY545.js +382 -0
  71. package/dist/block.tk.bigwig.ui-HEOPNL3T.js +209 -0
  72. package/dist/block.tk.hicstraw-EPH3LEX2.js +821 -0
  73. package/dist/block.tk.junction-MIUDAIAR.js +2362 -0
  74. package/dist/block.tk.junction.textmatrixui-AVFUQBDS.js +197 -0
  75. package/dist/block.tk.ld-ED7YMBQ4.js +97 -0
  76. package/dist/block.tk.menu-3CVIECWQ.js +1027 -0
  77. package/dist/block.tk.pgv-HETJVWXH.js +942 -0
  78. package/dist/brainImaging-K3LHK3DD.js +421 -0
  79. package/dist/chat-BYX5ARUK.js +148 -0
  80. package/dist/chunk-25RP5OSE.js +1426 -0
  81. package/dist/chunk-25RP5OSE.js.map +7 -0
  82. package/dist/chunk-2LULD7RN.js +31 -0
  83. package/dist/chunk-2M6JV7YS.js +261 -0
  84. package/dist/chunk-2M6JV7YS.js.map +7 -0
  85. package/dist/chunk-2TJESM3Z.js +158 -0
  86. package/dist/chunk-2TJESM3Z.js.map +7 -0
  87. package/dist/chunk-2VFYZ3EY.js +102 -0
  88. package/dist/chunk-3CD5ZROA.js +4952 -0
  89. package/dist/chunk-3DCABJHB.js +381 -0
  90. package/dist/chunk-3MMKHYUM.js +95 -0
  91. package/dist/chunk-3PRPMJTG.js +55 -0
  92. package/dist/chunk-4JON7TLI.js +176 -0
  93. package/dist/chunk-4JON7TLI.js.map +7 -0
  94. package/dist/chunk-5JD4D5GD.js +215 -0
  95. package/dist/chunk-5JD4D5GD.js.map +7 -0
  96. package/dist/chunk-5UMPBVA6.js +534 -0
  97. package/dist/chunk-64FGLSIM.js +56 -0
  98. package/dist/chunk-64FGLSIM.js.map +7 -0
  99. package/dist/chunk-6ITDJ5UR.js +261 -0
  100. package/dist/chunk-6ITDJ5UR.js.map +7 -0
  101. package/dist/chunk-6LAE5AVA.js +13624 -0
  102. package/dist/chunk-6VLA5NEW.js +335 -0
  103. package/dist/chunk-6VLA5NEW.js.map +7 -0
  104. package/dist/chunk-7FKIAQ4K.js +17 -0
  105. package/dist/chunk-7FKIAQ4K.js.map +7 -0
  106. package/dist/chunk-7FTDQDVF.js +824 -0
  107. package/dist/chunk-7IEZ2KMW.js +142 -0
  108. package/dist/chunk-7RN3L2BX.js +1788 -0
  109. package/dist/chunk-7RN3L2BX.js.map +7 -0
  110. package/dist/chunk-A5AFIW2T.js +14 -0
  111. package/dist/chunk-A6TQGNDQ.js +421 -0
  112. package/dist/chunk-A6TQGNDQ.js.map +7 -0
  113. package/dist/chunk-AIBODF32.js +2784 -0
  114. package/dist/chunk-AWWW6K2I.js +407 -0
  115. package/dist/chunk-AWWW6K2I.js.map +7 -0
  116. package/dist/chunk-BAY47D5E.js +226 -0
  117. package/dist/chunk-CFHKYLDY.js +26 -0
  118. package/dist/chunk-CJZN7HFL.js +293 -0
  119. package/dist/chunk-CXOF4UGH.js +229 -0
  120. package/dist/chunk-CXOF4UGH.js.map +7 -0
  121. package/dist/chunk-D4QFQQWJ.js +170 -0
  122. package/dist/chunk-DNCSPTOQ.js +446 -0
  123. package/dist/chunk-DQGSCCI3.js +100 -0
  124. package/dist/chunk-EWGMLVC7.js +34 -0
  125. package/dist/chunk-F7PB5HGT.js +148 -0
  126. package/dist/chunk-G7QKLA54.js +92 -0
  127. package/dist/chunk-HWHG63LH.js +148 -0
  128. package/dist/chunk-HWHG63LH.js.map +7 -0
  129. package/dist/chunk-HYZG6OPC.js +467 -0
  130. package/dist/chunk-HYZG6OPC.js.map +7 -0
  131. package/dist/chunk-IBBMKCO7.js +526 -0
  132. package/dist/chunk-IBBMKCO7.js.map +7 -0
  133. package/dist/chunk-IQUYTZOA.js +455 -0
  134. package/dist/chunk-IQUYTZOA.js.map +7 -0
  135. package/dist/chunk-J5RINDKS.js +480 -0
  136. package/dist/chunk-JMPSZMDD.js +52 -0
  137. package/dist/chunk-KQMEJUWI.js +815 -0
  138. package/dist/chunk-KWFEGPZL.js +97 -0
  139. package/dist/chunk-KWFEGPZL.js.map +7 -0
  140. package/dist/chunk-LBXZGYU5.js +368 -0
  141. package/dist/chunk-LBXZGYU5.js.map +7 -0
  142. package/dist/chunk-LRBNYEFI.js +50 -0
  143. package/dist/chunk-LRBNYEFI.js.map +7 -0
  144. package/dist/chunk-LRMV5DNW.js +441 -0
  145. package/dist/chunk-LWNOC7AJ.js +54 -0
  146. package/dist/chunk-MICNOSX7.js +129 -0
  147. package/dist/chunk-MLWNMXAV.js +272 -0
  148. package/dist/chunk-MMBLSLQR.js +158 -0
  149. package/dist/chunk-N3QEGDEZ.js +117 -0
  150. package/dist/chunk-N3QEGDEZ.js.map +7 -0
  151. package/dist/chunk-NV5XWADG.js +1150 -0
  152. package/dist/chunk-NVB7MQLH.js +20649 -0
  153. package/dist/chunk-NVB7MQLH.js.map +7 -0
  154. package/dist/chunk-O3255WPP.js +1087 -0
  155. package/dist/chunk-OSM7YS23.js +276 -0
  156. package/dist/chunk-PEWHCKCH.js +1205 -0
  157. package/dist/chunk-PEWHCKCH.js.map +7 -0
  158. package/dist/chunk-Q7PYFSNU.js +107 -0
  159. package/dist/chunk-QEZPKEWB.js +1159 -0
  160. package/dist/chunk-QEZPKEWB.js.map +7 -0
  161. package/dist/chunk-QMI222IJ.js +386 -0
  162. package/dist/chunk-QRIRWDIW.js +252 -0
  163. package/dist/chunk-SJTOSA7E.js +629 -0
  164. package/dist/chunk-SRYFYAXK.js +615 -0
  165. package/dist/chunk-SSPDNHDW.js +398 -0
  166. package/dist/chunk-SSPDNHDW.js.map +7 -0
  167. package/dist/chunk-SYMOQE3X.js +37 -0
  168. package/dist/chunk-SYMOQE3X.js.map +7 -0
  169. package/dist/chunk-TITA4HJA.js +228 -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-VZPYIG77.js.map +7 -0
  178. package/dist/chunk-W345H42C.js +273 -0
  179. package/dist/chunk-W345H42C.js.map +7 -0
  180. package/dist/chunk-WGL6FIUE.js +330 -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-WU63AOK2.js.map +7 -0
  187. package/dist/chunk-XS4QWRS3.js +205 -0
  188. package/dist/chunk-XYFDBYOY.js +1658 -0
  189. package/dist/chunk-XYFDBYOY.js.map +7 -0
  190. package/dist/chunk-YDWRIMCT.js +289 -0
  191. package/dist/chunk-YDWRIMCT.js.map +7 -0
  192. package/dist/chunk-YK5NFMHR.js +269 -0
  193. package/dist/chunk-YK5NFMHR.js.map +7 -0
  194. package/dist/chunk-YSW57QDM.js +6364 -0
  195. package/dist/chunk-YXQNZPCO.js +203 -0
  196. package/dist/chunk-YYYJB53A.js +2370 -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/lollipop-QFRQLEER.js +166 -0
  246. package/dist/maf-OEODBT3Y.js +450 -0
  247. package/dist/maf-OEODBT3Y.js.map +7 -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-Y3G3MUJJ.js.map +7 -0
  273. package/dist/oncomatrix.spec-MFUJLWEP.js +446 -0
  274. package/dist/plot.2dvaf-F4WZ4YPU.js +375 -0
  275. package/dist/plot.app-YFFLLBU5.js +39 -0
  276. package/dist/plot.barplot-2EJ2MWQD.js +100 -0
  277. package/dist/plot.boxplot-AKZM443E.js +150 -0
  278. package/dist/plot.brainImaging-DR6WJNFZ.js +51 -0
  279. package/dist/plot.disco-LBE5H67U.js +101 -0
  280. package/dist/plot.disco-LBE5H67U.js.map +7 -0
  281. package/dist/plot.dzi-R2MR7HAT.js +33 -0
  282. package/dist/plot.ssgq-C52YIUFY.js +137 -0
  283. package/dist/plot.vaf2cov-FOD3K7BC.js +257 -0
  284. package/dist/plot.wsi-D2TXYERK.js +36 -0
  285. package/dist/polar-2LC35O6K.js +184 -0
  286. package/dist/polar2-QPUOEUJZ.js +226 -0
  287. package/dist/profile.spec-3NCDGHLX.js +78 -0
  288. package/dist/profileBarchart-PPQ3NL4D.js +265 -0
  289. package/dist/profileForms-GS3VVW65.js +438 -0
  290. package/dist/profilePlot-DQWFH5NC.js +52 -0
  291. package/dist/profileRadar-KAKRDC4R.js +261 -0
  292. package/dist/profileRadarFacility-FZP62VPV.js +261 -0
  293. package/dist/profileRadarFacility-FZP62VPV.js.map +7 -0
  294. package/dist/proteinView-LWVWJY54.js +444 -0
  295. package/dist/proteinView-LWVWJY54.js.map +7 -0
  296. package/dist/proteomeAbundance-DE4NVBCN.js +21 -0
  297. package/dist/proteomeAbundance-LTB3QR3G.js +63 -0
  298. package/dist/qualitative-YOFAROVR.js +41 -0
  299. package/dist/regression-PF6IAHJK.js +54 -0
  300. package/dist/regression.inputs-77IUYED3.js +46 -0
  301. package/dist/regression.inputs.term-WWCHU6KF.js +46 -0
  302. package/dist/regression.inputs.values.table-I6GM6MU7.js +43 -0
  303. package/dist/regression.integration.spec-DGEZUURU.js +782 -0
  304. package/dist/regression.integration.spec-DGEZUURU.js.map +7 -0
  305. package/dist/regression.results-6GXNKYUS.js +38 -0
  306. package/dist/regression.spec-MEFQNY34.js +706 -0
  307. package/dist/report-LG3UKZHL.js +220 -0
  308. package/dist/sampleScatter.spec-D3IK7MSA.js +200 -0
  309. package/dist/sampleView-XUI2J5EC.js +46 -0
  310. package/dist/samplelst-A7IHCBAX.js +109 -0
  311. package/dist/samplematrix-VGUU7Q75.js +2196 -0
  312. package/dist/sc-UVKVT2RY.js +84 -0
  313. package/dist/scatter-UILUYOGO.js +800 -0
  314. package/dist/scatter.integration.spec-VPNALPUG.js +1194 -0
  315. package/dist/scatter.integration.spec-VPNALPUG.js.map +7 -0
  316. package/dist/selectGenomeWithTklst-LWKIMZEJ.js +132 -0
  317. package/dist/singleCellCellType-TI52WQQ4.js +36 -0
  318. package/dist/singleCellCellType.unit.spec-R3BTRFRU.js +158 -0
  319. package/dist/singleCellCellType.unit.spec-R3BTRFRU.js.map +7 -0
  320. package/dist/singleCellGeneExpression-I5SAHMGI.js +36 -0
  321. package/dist/singleCellGeneExpression.unit.spec-2JTB5HLY.js +151 -0
  322. package/dist/singleCellGeneExpression.unit.spec-2JTB5HLY.js.map +7 -0
  323. package/dist/singleCellPlot-HRWCHYCI.js +51 -0
  324. package/dist/singlecell-BHPP7KCO.js +1570 -0
  325. package/dist/singlecell-PQNKBKR7.js +84 -0
  326. package/dist/snp-V4YGI7B3.js +36 -0
  327. package/dist/snp.unit.spec-JSUCMGNP.js +174 -0
  328. package/dist/snplocus-3YT5NNCH.js +206 -0
  329. package/dist/spliceevent.a53ss.diagram-QEQJ44YH.js +149 -0
  330. package/dist/spliceevent.exonskip.diagram-HMWVSOJG.js +275 -0
  331. package/dist/spliceevent.noeventdiagram-L5HUCT5A.js +458 -0
  332. package/dist/ssGSEA-Z3XRCBYW.js +36 -0
  333. package/dist/ssGSEA.unit.spec-EUCTV2XJ.js +86 -0
  334. package/dist/summarizeCnvGeneexp-O7O2CFW4.js +161 -0
  335. package/dist/summarizeCnvGeneexp-O7O2CFW4.js.map +7 -0
  336. package/dist/summarizeGeneexpSurvival-DDPH56EI.js +106 -0
  337. package/dist/summarizeGeneexpSurvival-DDPH56EI.js.map +7 -0
  338. package/dist/summarizeMutationCnv-6KJQUJWR.js +162 -0
  339. package/dist/summarizeMutationCnv-6KJQUJWR.js.map +7 -0
  340. package/dist/summarizeMutationDiagnosis-HFFYLQOF.js +38 -0
  341. package/dist/summarizeMutationSurvival-OBK6YILP.js +97 -0
  342. package/dist/summary-W55WWIU2.js +47 -0
  343. package/dist/summary.integration.spec-X2PNAUKW.js +412 -0
  344. package/dist/summaryInput-X547Q6C7.js +218 -0
  345. package/dist/sunburst-KWNGYBRI.js +282 -0
  346. package/dist/sunburst-KWNGYBRI.js.map +7 -0
  347. package/dist/survival-PAJZHZPD.js +56 -0
  348. package/dist/survival-TQPWMOD5.js +44 -0
  349. package/dist/survival.integration.spec-YMQASOMX.js +800 -0
  350. package/dist/survival.integration.spec-YMQASOMX.js.map +7 -0
  351. package/dist/svg2pdf.es.min-CYTPRWNB.js +3157 -0
  352. package/dist/svgraph-Y35C2M3D.js +1385 -0
  353. package/dist/svmr-WGCIR7PE.js +3840 -0
  354. package/dist/table-Q3B2YXEN.js +198 -0
  355. package/dist/termCollection-A6YTSM5I.js +177 -0
  356. package/dist/termCollection-NTFNVQ7D.js +36 -0
  357. package/dist/termCollection.unit.spec-BX54PHKT.js +206 -0
  358. package/dist/tk-OCBZ7YR6.js +44 -0
  359. package/dist/tp.ui-ZT47N2CO.js +1457 -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.samplelst-MVPL6VXX.js +102 -0
  367. package/dist/tvs.termCollection-UGJXTHTG.js +151 -0
  368. package/dist/violin-ZLUDGSQG.js +44 -0
  369. package/dist/violin.integration.spec-KWOFOFLT.js +1423 -0
  370. package/dist/violin.integration.spec-KWOFOFLT.js.map +7 -0
  371. package/dist/violin.interactivity-ULDOCZWW.js +36 -0
  372. package/dist/violin.renderer-KJAXPMIK.js +38 -0
  373. package/dist/vocabulary-34YUQ4ZQ.js +39 -0
  374. package/package.json +3 -3
  375. package/dist/2dmaf-PFPBHIUI.js +0 -1371
  376. package/dist/AIProjectAdmin-H2GB5ZOX.js +0 -830
  377. package/dist/AIProjectAdmin-H2GB5ZOX.js.map +0 -7
  378. package/dist/AppHeader-FCWML6WH.js +0 -833
  379. package/dist/BoxPlot-QKXGF76K.js +0 -1295
  380. package/dist/BoxPlot-QKXGF76K.js.map +0 -7
  381. package/dist/CorrelationVolcano-ZJ7Q6JBC.js +0 -617
  382. package/dist/DifferentialAnalysis-PWCFCWFY.js +0 -238
  383. package/dist/Disco-IE5JKIF2.js +0 -3199
  384. package/dist/Disco-IE5JKIF2.js.map +0 -7
  385. package/dist/Disco.UI-SR7LSJE3.js +0 -242
  386. package/dist/DmrPlot-UDY7GOSY.js +0 -640
  387. package/dist/GB-GNTOP5C6.js +0 -1125
  388. package/dist/HicApp-FZTJL3OA.js +0 -2248
  389. package/dist/NumBinaryEditor-R5QVG3C4.js +0 -266
  390. package/dist/NumBinaryEditor-R5QVG3C4.js.map +0 -7
  391. package/dist/NumBinaryEditor.unit.spec-BMVRI24W.js +0 -284
  392. package/dist/NumContEditor-6JT5D6IW.js +0 -105
  393. package/dist/NumContEditor.unit.spec-XBQF2SW6.js +0 -167
  394. package/dist/NumCustomBinEditor-MEKEFOQI.js +0 -36
  395. package/dist/NumCustomBinEditor.unit.spec-LEMQJHDT.js +0 -282
  396. package/dist/NumDiscreteEditor-U3N37XRQ.js +0 -170
  397. package/dist/NumDiscreteEditor-U3N37XRQ.js.map +0 -7
  398. package/dist/NumDiscreteEditor.unit.spec-WQM4DLKO.js +0 -200
  399. package/dist/NumRegularBinEditor-HQR5Y6P7.js +0 -36
  400. package/dist/NumRegularBinEditor.unit.spec-FL4IFT7L.js +0 -225
  401. package/dist/NumSplineEditor-OESWMWP5.js +0 -188
  402. package/dist/NumSplineEditor-OESWMWP5.js.map +0 -7
  403. package/dist/NumSplineEditor.unit.spec-HYOXO45B.js +0 -197
  404. package/dist/NumericDensity-GJZ4BBJS.js +0 -36
  405. package/dist/NumericDensity.unit.spec-6LXWAXW7.js +0 -219
  406. package/dist/NumericHandler-LZIMPOHS.js +0 -37
  407. package/dist/NumericHandler.unit.spec-ZSU35AMD.js +0 -217
  408. package/dist/RunChart2-7XV6TIFO.js +0 -756
  409. package/dist/RunChart2-7XV6TIFO.js.map +0 -7
  410. package/dist/SC-E4EYAG26.js +0 -733
  411. package/dist/SC-E4EYAG26.js.map +0 -7
  412. package/dist/Volcano-Z7TJK6PW.js +0 -1187
  413. package/dist/Volcano-Z7TJK6PW.js.map +0 -7
  414. package/dist/WSIViewer-ZH2XABLC.js +0 -47933
  415. package/dist/WSIViewer-ZH2XABLC.js.map +0 -7
  416. package/dist/WsiSamplesPlot-BL47MDHQ.js +0 -163
  417. package/dist/adSandbox-V3NTKVBC.js +0 -36
  418. package/dist/alphaGenome-IQVFCSWQ.js +0 -173
  419. package/dist/app-GJLZ2G2U.js +0 -47
  420. package/dist/app-YSD2U64Q.js +0 -35
  421. package/dist/bam-TRIF3AIQ.js +0 -849
  422. package/dist/bam-TRIF3AIQ.js.map +0 -7
  423. package/dist/barchart-GLLUYTAJ.js +0 -45
  424. package/dist/barchart.data-FRYRGKH3.js +0 -22
  425. package/dist/barchart.events-WODVSHRN.js +0 -45
  426. package/dist/barchart.integration.spec-6POS3V3T.js +0 -1675
  427. package/dist/bars.renderer-T5R3UIBW.js +0 -12
  428. package/dist/block-2QM37YSE.js +0 -6300
  429. package/dist/block-2QM37YSE.js.map +0 -7
  430. package/dist/block.init-7HDLKQVX.js +0 -36
  431. package/dist/block.mds.expressionrank-UIB25S6E.js +0 -357
  432. package/dist/block.mds.geneboxplot-4PQYO3MR.js +0 -826
  433. package/dist/block.mds.junction-DWFYZEC2.js +0 -1543
  434. package/dist/block.mds.svcnv-N3KJJ4GQ.js +0 -6799
  435. package/dist/block.svg-2HBDI7BT.js +0 -162
  436. package/dist/block.tk.aicheck-2M4522IQ.js +0 -281
  437. package/dist/block.tk.ase-URIKF6JD.js +0 -363
  438. package/dist/block.tk.bam-HTDMASHX.js +0 -1904
  439. package/dist/block.tk.bedgraphdot-RVKMSFCQ.js +0 -382
  440. package/dist/block.tk.bigwig.ui-7JPEOIKM.js +0 -209
  441. package/dist/block.tk.hicstraw-72J7UJ2J.js +0 -821
  442. package/dist/block.tk.junction-GGFMBCV5.js +0 -2362
  443. package/dist/block.tk.junction.textmatrixui-44SAYYWE.js +0 -197
  444. package/dist/block.tk.ld-XDKJFEOL.js +0 -97
  445. package/dist/block.tk.menu-46FOTM7H.js +0 -1027
  446. package/dist/block.tk.pgv-ZVONRT4B.js +0 -942
  447. package/dist/brainImaging-CSLO7ODJ.js +0 -421
  448. package/dist/chat-GMD22F3K.js +0 -148
  449. package/dist/chunk-22KWZOCN.js +0 -153
  450. package/dist/chunk-22KWZOCN.js.map +0 -7
  451. package/dist/chunk-2NQ4TM74.js +0 -48
  452. package/dist/chunk-2NQ4TM74.js.map +0 -7
  453. package/dist/chunk-2SRMRC6L.js +0 -421
  454. package/dist/chunk-2SRMRC6L.js.map +0 -7
  455. package/dist/chunk-2TIYJ3PH.js +0 -815
  456. package/dist/chunk-2UWHV2SB.js +0 -261
  457. package/dist/chunk-2UWHV2SB.js.map +0 -7
  458. package/dist/chunk-3656ZY4T.js +0 -237
  459. package/dist/chunk-3656ZY4T.js.map +0 -7
  460. package/dist/chunk-3TU6TRLQ.js +0 -98
  461. package/dist/chunk-3TU6TRLQ.js.map +0 -7
  462. package/dist/chunk-4FJ5GS6P.js +0 -4202
  463. package/dist/chunk-4FJ5GS6P.js.map +0 -7
  464. package/dist/chunk-4FO7KZY2.js +0 -534
  465. package/dist/chunk-4OEOQX4L.js +0 -334
  466. package/dist/chunk-4OEOQX4L.js.map +0 -7
  467. package/dist/chunk-5ZICCKEH.js +0 -4952
  468. package/dist/chunk-6UU7VPDO.js +0 -272
  469. package/dist/chunk-6YLQN7FF.js +0 -441
  470. package/dist/chunk-74QJDBIP.js +0 -480
  471. package/dist/chunk-75EBDB7G.js +0 -21
  472. package/dist/chunk-75EBDB7G.js.map +0 -7
  473. package/dist/chunk-7FXPMQRW.js +0 -34
  474. package/dist/chunk-A2Y3GEUH.js +0 -228
  475. package/dist/chunk-AAEXTQT3.js +0 -330
  476. package/dist/chunk-AG6HVFQY.js +0 -504
  477. package/dist/chunk-AG6HVFQY.js.map +0 -7
  478. package/dist/chunk-AHLUW2BN.js +0 -129
  479. package/dist/chunk-AYDXOUFX.js +0 -1275
  480. package/dist/chunk-AYDXOUFX.js.map +0 -7
  481. package/dist/chunk-BBIPZ2UF.js +0 -52
  482. package/dist/chunk-BBVOZ5BY.js +0 -230
  483. package/dist/chunk-BBVOZ5BY.js.map +0 -7
  484. package/dist/chunk-BHVDOW3W.js +0 -470
  485. package/dist/chunk-BNN32RI2.js +0 -36
  486. package/dist/chunk-BNN32RI2.js.map +0 -7
  487. package/dist/chunk-BQLC6QOH.js +0 -368
  488. package/dist/chunk-BQLC6QOH.js.map +0 -7
  489. package/dist/chunk-C5QOWZK6.js +0 -629
  490. package/dist/chunk-CJJ6LDZM.js +0 -170
  491. package/dist/chunk-CJJ6LDZM.js.map +0 -7
  492. package/dist/chunk-D4U5X2QQ.js +0 -261
  493. package/dist/chunk-D4U5X2QQ.js.map +0 -7
  494. package/dist/chunk-DV444SFD.js +0 -26
  495. package/dist/chunk-DWWAB4YQ.js +0 -102
  496. package/dist/chunk-FP5VKE3Z.js +0 -170
  497. package/dist/chunk-G2MAZI6I.js +0 -205
  498. package/dist/chunk-HLRNIO5K.js +0 -158
  499. package/dist/chunk-HTHH2B6D.js +0 -46
  500. package/dist/chunk-HTHH2B6D.js.map +0 -7
  501. package/dist/chunk-I7X6K4OL.js +0 -217
  502. package/dist/chunk-IC7SUXJD.js +0 -82
  503. package/dist/chunk-IC7SUXJD.js.map +0 -7
  504. package/dist/chunk-ITYEOGLB.js +0 -302
  505. package/dist/chunk-J6XKDYNZ.js +0 -276
  506. package/dist/chunk-JDX4E7ZO.js +0 -381
  507. package/dist/chunk-JWX7GYHP.js +0 -95
  508. package/dist/chunk-KISFQDQE.js +0 -258
  509. package/dist/chunk-KISFQDQE.js.map +0 -7
  510. package/dist/chunk-KLFROH3F.js +0 -203
  511. package/dist/chunk-KQSN7PUK.js +0 -215
  512. package/dist/chunk-KQSN7PUK.js.map +0 -7
  513. package/dist/chunk-L2ED35QZ.js +0 -2815
  514. package/dist/chunk-LLPFFNLV.js +0 -526
  515. package/dist/chunk-LLPFFNLV.js.map +0 -7
  516. package/dist/chunk-LRV4VWRF.js +0 -94
  517. package/dist/chunk-LRV4VWRF.js.map +0 -7
  518. package/dist/chunk-M464GTNI.js +0 -615
  519. package/dist/chunk-MDN3K2BG.js +0 -229
  520. package/dist/chunk-MDN3K2BG.js.map +0 -7
  521. package/dist/chunk-N46WTUX7.js +0 -286
  522. package/dist/chunk-N46WTUX7.js.map +0 -7
  523. package/dist/chunk-NBMJ2UMA.js +0 -194
  524. package/dist/chunk-NI7VSKJI.js +0 -293
  525. package/dist/chunk-NTVM4ZPG.js +0 -2784
  526. package/dist/chunk-O64UTRAC.js +0 -252
  527. package/dist/chunk-OM326NV3.js +0 -100
  528. package/dist/chunk-P4ENJUBN.js +0 -386
  529. package/dist/chunk-PEKVBCIH.js +0 -824
  530. package/dist/chunk-PF6MKI4X.js +0 -92
  531. package/dist/chunk-PJTQP6RL.js +0 -54
  532. package/dist/chunk-PVSRVJBE.js +0 -1201
  533. package/dist/chunk-PVSRVJBE.js.map +0 -7
  534. package/dist/chunk-PZ3L3KM6.js +0 -55
  535. package/dist/chunk-QEHUEG4X.js +0 -1788
  536. package/dist/chunk-QEHUEG4X.js.map +0 -7
  537. package/dist/chunk-QXCVG66S.js +0 -2672
  538. package/dist/chunk-RIGZHHCP.js +0 -119
  539. package/dist/chunk-SEIANPCX.js +0 -142
  540. package/dist/chunk-SK7YVOQN.js +0 -148
  541. package/dist/chunk-SPPZB5ZQ.js +0 -158
  542. package/dist/chunk-SPPZB5ZQ.js.map +0 -7
  543. package/dist/chunk-T5KFRIP4.js +0 -1087
  544. package/dist/chunk-TTSNECVD.js +0 -1413
  545. package/dist/chunk-TTSNECVD.js.map +0 -7
  546. package/dist/chunk-TVXESYIR.js +0 -439
  547. package/dist/chunk-TVXESYIR.js.map +0 -7
  548. package/dist/chunk-U3UR3U3F.js +0 -446
  549. package/dist/chunk-UBS5UVIY.js +0 -13624
  550. package/dist/chunk-UFYU7AKL.js +0 -107
  551. package/dist/chunk-VIYGTRUZ.js +0 -6364
  552. package/dist/chunk-WCTH7CB3.js +0 -31
  553. package/dist/chunk-WGSWVYHY.js +0 -1155
  554. package/dist/chunk-WGSWVYHY.js.map +0 -7
  555. package/dist/chunk-WYZ4COTF.js +0 -226
  556. package/dist/chunk-WZRXJ5LL.js +0 -2370
  557. package/dist/chunk-XDI4UFCZ.js +0 -467
  558. package/dist/chunk-XDI4UFCZ.js.map +0 -7
  559. package/dist/chunk-XZZLEHWC.js +0 -20328
  560. package/dist/chunk-XZZLEHWC.js.map +0 -7
  561. package/dist/chunk-Y7JAPSMG.js +0 -406
  562. package/dist/chunk-Y7JAPSMG.js.map +0 -7
  563. package/dist/chunk-YJ2HC4CP.js +0 -1150
  564. package/dist/chunk-ZLH4PJKX.js +0 -1658
  565. package/dist/chunk-ZLH4PJKX.js.map +0 -7
  566. package/dist/chunk-ZZSDYKD5.js +0 -14
  567. package/dist/condition-S52W57ZO.js +0 -330
  568. package/dist/controls-B4MTTPWO.js +0 -39
  569. package/dist/controls.config-6KBCTIPN.js +0 -37
  570. package/dist/correlation-VSBCBFFP.js +0 -96
  571. package/dist/cuminc-T5ZPAGVB.js +0 -1147
  572. package/dist/cuminc.integration.spec-2QT3IPHU.js +0 -676
  573. package/dist/customdata.inputui-5MHQQHJL.js +0 -285
  574. package/dist/dataDownload-S4EBNHMW.js +0 -328
  575. package/dist/dataDownload.integration.spec-OVSIWI34.js +0 -191
  576. package/dist/databrowser.ui-EAJS3NXV.js +0 -419
  577. package/dist/dictionary-CQHSMVYF.js +0 -98
  578. package/dist/dictionary-CQHSMVYF.js.map +0 -7
  579. package/dist/dnaMethylation-G3F2INDH.js +0 -36
  580. package/dist/dnaMethylation.integration.spec-FWF4353K.js +0 -179
  581. package/dist/dnaMethylation.integration.spec-FWF4353K.js.map +0 -7
  582. package/dist/e2pca-SLXGPVHP.js +0 -348
  583. package/dist/ep-4HGUSDGJ.js +0 -1254
  584. package/dist/expclust.gdc.spec-JJ42ESKE.js +0 -305
  585. package/dist/facet-6WVTVKDV.js +0 -519
  586. package/dist/geneExpClustering-5LOZPD5X.js +0 -246
  587. package/dist/geneExpression-BJ46UGXW.js +0 -312
  588. package/dist/geneExpression-PTSZWKCM.js +0 -36
  589. package/dist/geneExpression.unit.spec-NW5HTO7F.js +0 -100
  590. package/dist/geneORA-H65EZ7QO.js +0 -276
  591. package/dist/geneVariant-T6GWOVZD.js +0 -39
  592. package/dist/geneVariant-WTDFZTXG.js +0 -37
  593. package/dist/geneVariant.integration.spec-OPSBRUM3.js +0 -196
  594. package/dist/genefusion.ui-RSBCC37C.js +0 -249
  595. package/dist/geneset-B67PAZVL.js +0 -194
  596. package/dist/genomeBrowser.spec-AUTULF4C.js +0 -279
  597. package/dist/grin2-CMBP7XVH.js +0 -1031
  598. package/dist/grin2-JVCNH3KW.js +0 -1554
  599. package/dist/gsea-H774WVPQ.js +0 -45
  600. package/dist/hierCluster-IQTXQUMI.js +0 -58
  601. package/dist/hierCluster-ZQJDXYBD.js +0 -62
  602. package/dist/hierCluster.config-ZHJTZK5L.js +0 -38
  603. package/dist/hierCluster.integration.spec-MSJ5GHHK.js +0 -374
  604. package/dist/hierCluster.interactivity-H2GNO6AA.js +0 -52
  605. package/dist/hierCluster.renderers-2TE6HMK2.js +0 -21
  606. package/dist/imagePlot-FMNMB7JZ.js +0 -139
  607. package/dist/importPlot-N66G43XX.js +0 -8
  608. package/dist/isoformExpression-B64WLO3H.js +0 -38
  609. package/dist/isoformExpression.unit.spec-D2R6CRKO.js +0 -126
  610. package/dist/isoformExpression.unit.spec-D2R6CRKO.js.map +0 -7
  611. package/dist/jspdf.es.min-DO4YWL2R.js +0 -40
  612. package/dist/launch.adhoc-MPRAJ3GN.js +0 -40
  613. package/dist/leftlabel.sample-4JCKYXED.js +0 -257
  614. package/dist/lollipop-25ADHT7O.js +0 -166
  615. package/dist/maf-POYTGXT4.js +0 -442
  616. package/dist/maf-POYTGXT4.js.map +0 -7
  617. package/dist/maftimeline-FOQF6O3X.js +0 -591
  618. package/dist/matrix-LHLAYDTQ.js +0 -57
  619. package/dist/matrix-ZKF7NRAD.js +0 -62
  620. package/dist/matrix.cells-H4TS74FJ.js +0 -28
  621. package/dist/matrix.config-HE7QUDER.js +0 -39
  622. package/dist/matrix.controls-VILCLNSC.js +0 -37
  623. package/dist/matrix.data-2OUWYD35.js +0 -25
  624. package/dist/matrix.dom-IZFFS4RQ.js +0 -11
  625. package/dist/matrix.groups-5BGJIOOJ.js +0 -26
  626. package/dist/matrix.integration.spec-DSXZHAEY.js +0 -3070
  627. package/dist/matrix.interactivity-VK3NWX5M.js +0 -40
  628. package/dist/matrix.layout-PUNMMNCC.js +0 -42
  629. package/dist/matrix.legend-QMERGVYU.js +0 -22
  630. package/dist/matrix.renderers-2KQ2NXSQ.js +0 -36
  631. package/dist/matrix.serieses-24G3XPJD.js +0 -21
  632. package/dist/matrix.sort-HTVT4K7C.js +0 -27
  633. package/dist/matrix.sort.unit.spec-EUVL76NB.js +0 -470
  634. package/dist/matrix.sorterUi-PJPFXWOJ.js +0 -18
  635. package/dist/matrix.sorterUi.unit.spec-QWL5Y4DQ.js +0 -340
  636. package/dist/mavb-UGM5SHEF.js +0 -730
  637. package/dist/mds.fimo-64US7RTE.js +0 -516
  638. package/dist/mds.samplescatterplot-JMXLXVIE.js +0 -1548
  639. package/dist/mds.survivalplot-RJ5UD3IU.js +0 -481
  640. package/dist/oncomatrix-ZFT3DRAP.js +0 -293
  641. package/dist/oncomatrix-ZFT3DRAP.js.map +0 -7
  642. package/dist/oncomatrix.spec-4YLKDGFE.js +0 -446
  643. package/dist/plot.2dvaf-DYSU6BBN.js +0 -375
  644. package/dist/plot.app-NFBVLAXZ.js +0 -39
  645. package/dist/plot.barplot-DBGTDK7J.js +0 -100
  646. package/dist/plot.boxplot-MCKZUROP.js +0 -150
  647. package/dist/plot.brainImaging-BBAVUEB4.js +0 -51
  648. package/dist/plot.disco-VGOEQYRL.js +0 -101
  649. package/dist/plot.disco-VGOEQYRL.js.map +0 -7
  650. package/dist/plot.dzi-YQIFOTZQ.js +0 -33
  651. package/dist/plot.ssgq-MU3BRTMC.js +0 -137
  652. package/dist/plot.vaf2cov-KDHZ7JXJ.js +0 -257
  653. package/dist/plot.wsi-G2TUGQF7.js +0 -36
  654. package/dist/polar-RCCZXZIU.js +0 -184
  655. package/dist/polar2-COQ3WIGW.js +0 -226
  656. package/dist/profile.spec-A4ZASR2T.js +0 -78
  657. package/dist/profileBarchart-GB4RK5DF.js +0 -265
  658. package/dist/profileForms-O5KBHRF6.js +0 -438
  659. package/dist/profilePlot-COCLCP5B.js +0 -52
  660. package/dist/profileRadar-4EE3YDOH.js +0 -261
  661. package/dist/profileRadarFacility-JYTSGA5H.js +0 -261
  662. package/dist/profileRadarFacility-JYTSGA5H.js.map +0 -7
  663. package/dist/proteomeAbundance-JBVXUSD6.js +0 -19
  664. package/dist/proteomeAbundance-NQVU4DOW.js +0 -63
  665. package/dist/qualitative-QROOPDSI.js +0 -41
  666. package/dist/regression-7FQZ22OO.js +0 -54
  667. package/dist/regression.inputs-F62CES3A.js +0 -46
  668. package/dist/regression.inputs.term-BCGP7PX4.js +0 -46
  669. package/dist/regression.inputs.values.table-D3ZXZSH7.js +0 -43
  670. package/dist/regression.integration.spec-P2BBTT2O.js +0 -784
  671. package/dist/regression.integration.spec-P2BBTT2O.js.map +0 -7
  672. package/dist/regression.results-JX6RJQQP.js +0 -38
  673. package/dist/regression.spec-ROME7T33.js +0 -706
  674. package/dist/report-B6MM4T6B.js +0 -220
  675. package/dist/sampleScatter.spec-EPCMC3SR.js +0 -200
  676. package/dist/sampleView-77EAJ75T.js +0 -46
  677. package/dist/samplelst-CX4NQWA7.js +0 -109
  678. package/dist/samplematrix-PYQFAH64.js +0 -2196
  679. package/dist/sc-X6SI5VVI.js +0 -84
  680. package/dist/scatter-ZFFHAI4F.js +0 -800
  681. package/dist/scatter.integration.spec-NN43OXRN.js +0 -1194
  682. package/dist/scatter.integration.spec-NN43OXRN.js.map +0 -7
  683. package/dist/selectGenomeWithTklst-CZMVTBMD.js +0 -132
  684. package/dist/singleCellCellType-GOBX7JKV.js +0 -36
  685. package/dist/singleCellCellType.unit.spec-F344QMTQ.js +0 -177
  686. package/dist/singleCellCellType.unit.spec-F344QMTQ.js.map +0 -7
  687. package/dist/singleCellGeneExpression-BLMNMEAI.js +0 -36
  688. package/dist/singleCellGeneExpression.unit.spec-6ZEPUFWC.js +0 -163
  689. package/dist/singleCellGeneExpression.unit.spec-6ZEPUFWC.js.map +0 -7
  690. package/dist/singleCellPlot-HLD7PLQH.js +0 -51
  691. package/dist/singlecell-HL4GLGIA.js +0 -1570
  692. package/dist/singlecell-JQFPINRS.js +0 -84
  693. package/dist/snp-EAUNFDAV.js +0 -36
  694. package/dist/snp.unit.spec-AVLPMAWI.js +0 -174
  695. package/dist/snplocus-2J7OA6OL.js +0 -206
  696. package/dist/spliceevent.a53ss.diagram-4DU2U7NW.js +0 -149
  697. package/dist/spliceevent.exonskip.diagram-GG5FGXOK.js +0 -275
  698. package/dist/spliceevent.noeventdiagram-T6RNIMCM.js +0 -458
  699. package/dist/ssGSEA-XJWLRVFQ.js +0 -36
  700. package/dist/ssGSEA.unit.spec-MQ23ODYO.js +0 -86
  701. package/dist/summarizeCnvGeneexp-CJPC76RM.js +0 -158
  702. package/dist/summarizeCnvGeneexp-CJPC76RM.js.map +0 -7
  703. package/dist/summarizeGeneexpSurvival-FGCFZTVG.js +0 -105
  704. package/dist/summarizeGeneexpSurvival-FGCFZTVG.js.map +0 -7
  705. package/dist/summarizeMutationCnv-4E7R2NHQ.js +0 -159
  706. package/dist/summarizeMutationCnv-4E7R2NHQ.js.map +0 -7
  707. package/dist/summarizeMutationDiagnosis-ZVX7AZK7.js +0 -38
  708. package/dist/summarizeMutationSurvival-EWXD7TCT.js +0 -97
  709. package/dist/summary-VUYBKQOC.js +0 -47
  710. package/dist/summary.integration.spec-EPBV5XCT.js +0 -412
  711. package/dist/summaryInput-YX5IRGWM.js +0 -218
  712. package/dist/sunburst-HPDML45I.js +0 -282
  713. package/dist/sunburst-HPDML45I.js.map +0 -7
  714. package/dist/survival-E6SRRXBB.js +0 -44
  715. package/dist/survival-XOXDPXZR.js +0 -56
  716. package/dist/survival.integration.spec-SJBPJZGJ.js +0 -787
  717. package/dist/survival.integration.spec-SJBPJZGJ.js.map +0 -7
  718. package/dist/svg2pdf.es.min-EZ4UYRSH.js +0 -3157
  719. package/dist/svgraph-D23WG3UE.js +0 -1385
  720. package/dist/svmr-UFC4TKWV.js +0 -3840
  721. package/dist/table-US2K6IYZ.js +0 -198
  722. package/dist/termCollection-E7S57CIN.js +0 -177
  723. package/dist/termCollection-ZMP3VE2G.js +0 -36
  724. package/dist/termCollection.unit.spec-MDWK6XH3.js +0 -206
  725. package/dist/tk-TLQJK6R4.js +0 -44
  726. package/dist/tp.ui-NQEAKWUH.js +0 -1457
  727. package/dist/tvs.dt-U2MINIBH.js +0 -37
  728. package/dist/tvs.dtcnv.categorical-2OOAZJKC.js +0 -38
  729. package/dist/tvs.dtcnv.continuous-5ETKBJ52.js +0 -70
  730. package/dist/tvs.dtfusion-EB4PPR3Y.js +0 -38
  731. package/dist/tvs.dtsnvindel-IRQPTKQF.js +0 -38
  732. package/dist/tvs.dtsv-TOVXZJCR.js +0 -38
  733. package/dist/tvs.samplelst-4SCH543Y.js +0 -102
  734. package/dist/tvs.termCollection-GGN5F6HC.js +0 -151
  735. package/dist/violin-7D7DN74I.js +0 -44
  736. package/dist/violin.integration.spec-KE76AL54.js +0 -1417
  737. package/dist/violin.integration.spec-KE76AL54.js.map +0 -7
  738. package/dist/violin.interactivity-YPJ2H6SQ.js +0 -36
  739. package/dist/violin.renderer-UK7WSA2Z.js +0 -38
  740. package/dist/vocabulary-KLWZ6LRP.js +0 -39
  741. /package/dist/{2dmaf-PFPBHIUI.js.map → 2dmaf-YHYYSSKR.js.map} +0 -0
  742. /package/dist/{AppHeader-FCWML6WH.js.map → AppHeader-T4ZLY3VG.js.map} +0 -0
  743. /package/dist/{CorrelationVolcano-ZJ7Q6JBC.js.map → CorrelationVolcano-EXH4P56S.js.map} +0 -0
  744. /package/dist/{DifferentialAnalysis-PWCFCWFY.js.map → DifferentialAnalysis-P6GKHAS5.js.map} +0 -0
  745. /package/dist/{Disco.UI-SR7LSJE3.js.map → Disco.UI-4A2P5Q55.js.map} +0 -0
  746. /package/dist/{DmrPlot-UDY7GOSY.js.map → DmrPlot-6EEEGD32.js.map} +0 -0
  747. /package/dist/{GB-GNTOP5C6.js.map → GB-XFO5I6ND.js.map} +0 -0
  748. /package/dist/{HicApp-FZTJL3OA.js.map → HicApp-3LFHOOAR.js.map} +0 -0
  749. /package/dist/{NumBinaryEditor.unit.spec-BMVRI24W.js.map → NumBinaryEditor.unit.spec-2PYZ7P2R.js.map} +0 -0
  750. /package/dist/{NumContEditor-6JT5D6IW.js.map → NumContEditor-BMWALLQM.js.map} +0 -0
  751. /package/dist/{NumContEditor.unit.spec-XBQF2SW6.js.map → NumContEditor.unit.spec-ETVLVX6A.js.map} +0 -0
  752. /package/dist/{NumCustomBinEditor-MEKEFOQI.js.map → NumCustomBinEditor-2XJ6GUWY.js.map} +0 -0
  753. /package/dist/{NumCustomBinEditor.unit.spec-LEMQJHDT.js.map → NumCustomBinEditor.unit.spec-TZVL553E.js.map} +0 -0
  754. /package/dist/{NumDiscreteEditor.unit.spec-WQM4DLKO.js.map → NumDiscreteEditor.unit.spec-KQND2XAE.js.map} +0 -0
  755. /package/dist/{NumRegularBinEditor-HQR5Y6P7.js.map → NumRegularBinEditor-OYELFDIB.js.map} +0 -0
  756. /package/dist/{NumRegularBinEditor.unit.spec-FL4IFT7L.js.map → NumRegularBinEditor.unit.spec-44SALKLH.js.map} +0 -0
  757. /package/dist/{NumSplineEditor.unit.spec-HYOXO45B.js.map → NumSplineEditor.unit.spec-XKB4XXU4.js.map} +0 -0
  758. /package/dist/{NumericDensity-GJZ4BBJS.js.map → NumericDensity-GCNWO7YS.js.map} +0 -0
  759. /package/dist/{NumericDensity.unit.spec-6LXWAXW7.js.map → NumericDensity.unit.spec-7LWNOUYK.js.map} +0 -0
  760. /package/dist/{NumericHandler-LZIMPOHS.js.map → NumericHandler-EMQBI5UI.js.map} +0 -0
  761. /package/dist/{NumericHandler.unit.spec-ZSU35AMD.js.map → NumericHandler.unit.spec-TEELPRIM.js.map} +0 -0
  762. /package/dist/{WsiSamplesPlot-BL47MDHQ.js.map → WsiSamplesPlot-B2DM7Z3Q.js.map} +0 -0
  763. /package/dist/{adSandbox-V3NTKVBC.js.map → adSandbox-INF3NNEV.js.map} +0 -0
  764. /package/dist/{alphaGenome-IQVFCSWQ.js.map → alphaGenome-CO4TQHXN.js.map} +0 -0
  765. /package/dist/{app-GJLZ2G2U.js.map → app-63JU2YIT.js.map} +0 -0
  766. /package/dist/{app-YSD2U64Q.js.map → app-BL3POUOO.js.map} +0 -0
  767. /package/dist/{barchart-GLLUYTAJ.js.map → barchart-PDUXZAIH.js.map} +0 -0
  768. /package/dist/{barchart.data-FRYRGKH3.js.map → barchart.data-EXENRVMU.js.map} +0 -0
  769. /package/dist/{barchart.events-WODVSHRN.js.map → barchart.events-MQNQTSWI.js.map} +0 -0
  770. /package/dist/{barchart.integration.spec-6POS3V3T.js.map → barchart.integration.spec-DSO2377T.js.map} +0 -0
  771. /package/dist/{bars.renderer-T5R3UIBW.js.map → bars.renderer-S7A7I6BQ.js.map} +0 -0
  772. /package/dist/{block.init-7HDLKQVX.js.map → block.init-7J5OHYKA.js.map} +0 -0
  773. /package/dist/{block.mds.expressionrank-UIB25S6E.js.map → block.mds.expressionrank-643H7PN7.js.map} +0 -0
  774. /package/dist/{block.mds.geneboxplot-4PQYO3MR.js.map → block.mds.geneboxplot-C222ODSL.js.map} +0 -0
  775. /package/dist/{block.mds.junction-DWFYZEC2.js.map → block.mds.junction-C5DJRUOK.js.map} +0 -0
  776. /package/dist/{block.mds.svcnv-N3KJJ4GQ.js.map → block.mds.svcnv-4G74JQ7Y.js.map} +0 -0
  777. /package/dist/{block.svg-2HBDI7BT.js.map → block.svg-35KUC5R7.js.map} +0 -0
  778. /package/dist/{block.tk.aicheck-2M4522IQ.js.map → block.tk.aicheck-LLWT6K6H.js.map} +0 -0
  779. /package/dist/{block.tk.ase-URIKF6JD.js.map → block.tk.ase-PQUKY65E.js.map} +0 -0
  780. /package/dist/{block.tk.bam-HTDMASHX.js.map → block.tk.bam-EUEOB7BR.js.map} +0 -0
  781. /package/dist/{block.tk.bedgraphdot-RVKMSFCQ.js.map → block.tk.bedgraphdot-XAHUY545.js.map} +0 -0
  782. /package/dist/{block.tk.bigwig.ui-7JPEOIKM.js.map → block.tk.bigwig.ui-HEOPNL3T.js.map} +0 -0
  783. /package/dist/{block.tk.hicstraw-72J7UJ2J.js.map → block.tk.hicstraw-EPH3LEX2.js.map} +0 -0
  784. /package/dist/{block.tk.junction-GGFMBCV5.js.map → block.tk.junction-MIUDAIAR.js.map} +0 -0
  785. /package/dist/{block.tk.junction.textmatrixui-44SAYYWE.js.map → block.tk.junction.textmatrixui-AVFUQBDS.js.map} +0 -0
  786. /package/dist/{block.tk.ld-XDKJFEOL.js.map → block.tk.ld-ED7YMBQ4.js.map} +0 -0
  787. /package/dist/{block.tk.menu-46FOTM7H.js.map → block.tk.menu-3CVIECWQ.js.map} +0 -0
  788. /package/dist/{block.tk.pgv-ZVONRT4B.js.map → block.tk.pgv-HETJVWXH.js.map} +0 -0
  789. /package/dist/{brainImaging-CSLO7ODJ.js.map → brainImaging-K3LHK3DD.js.map} +0 -0
  790. /package/dist/{chat-GMD22F3K.js.map → chat-BYX5ARUK.js.map} +0 -0
  791. /package/dist/{chunk-WCTH7CB3.js.map → chunk-2LULD7RN.js.map} +0 -0
  792. /package/dist/{chunk-DWWAB4YQ.js.map → chunk-2VFYZ3EY.js.map} +0 -0
  793. /package/dist/{chunk-5ZICCKEH.js.map → chunk-3CD5ZROA.js.map} +0 -0
  794. /package/dist/{chunk-JDX4E7ZO.js.map → chunk-3DCABJHB.js.map} +0 -0
  795. /package/dist/{chunk-JWX7GYHP.js.map → chunk-3MMKHYUM.js.map} +0 -0
  796. /package/dist/{chunk-PZ3L3KM6.js.map → chunk-3PRPMJTG.js.map} +0 -0
  797. /package/dist/{chunk-4FO7KZY2.js.map → chunk-5UMPBVA6.js.map} +0 -0
  798. /package/dist/{chunk-UBS5UVIY.js.map → chunk-6LAE5AVA.js.map} +0 -0
  799. /package/dist/{chunk-PEKVBCIH.js.map → chunk-7FTDQDVF.js.map} +0 -0
  800. /package/dist/{chunk-SEIANPCX.js.map → chunk-7IEZ2KMW.js.map} +0 -0
  801. /package/dist/{chunk-ZZSDYKD5.js.map → chunk-A5AFIW2T.js.map} +0 -0
  802. /package/dist/{chunk-NTVM4ZPG.js.map → chunk-AIBODF32.js.map} +0 -0
  803. /package/dist/{chunk-WYZ4COTF.js.map → chunk-BAY47D5E.js.map} +0 -0
  804. /package/dist/{chunk-DV444SFD.js.map → chunk-CFHKYLDY.js.map} +0 -0
  805. /package/dist/{chunk-NI7VSKJI.js.map → chunk-CJZN7HFL.js.map} +0 -0
  806. /package/dist/{chunk-FP5VKE3Z.js.map → chunk-D4QFQQWJ.js.map} +0 -0
  807. /package/dist/{chunk-U3UR3U3F.js.map → chunk-DNCSPTOQ.js.map} +0 -0
  808. /package/dist/{chunk-OM326NV3.js.map → chunk-DQGSCCI3.js.map} +0 -0
  809. /package/dist/{chunk-7FXPMQRW.js.map → chunk-EWGMLVC7.js.map} +0 -0
  810. /package/dist/{chunk-SK7YVOQN.js.map → chunk-F7PB5HGT.js.map} +0 -0
  811. /package/dist/{chunk-PF6MKI4X.js.map → chunk-G7QKLA54.js.map} +0 -0
  812. /package/dist/{chunk-74QJDBIP.js.map → chunk-J5RINDKS.js.map} +0 -0
  813. /package/dist/{chunk-BBIPZ2UF.js.map → chunk-JMPSZMDD.js.map} +0 -0
  814. /package/dist/{chunk-2TIYJ3PH.js.map → chunk-KQMEJUWI.js.map} +0 -0
  815. /package/dist/{chunk-6YLQN7FF.js.map → chunk-LRMV5DNW.js.map} +0 -0
  816. /package/dist/{chunk-PJTQP6RL.js.map → chunk-LWNOC7AJ.js.map} +0 -0
  817. /package/dist/{chunk-AHLUW2BN.js.map → chunk-MICNOSX7.js.map} +0 -0
  818. /package/dist/{chunk-6UU7VPDO.js.map → chunk-MLWNMXAV.js.map} +0 -0
  819. /package/dist/{chunk-HLRNIO5K.js.map → chunk-MMBLSLQR.js.map} +0 -0
  820. /package/dist/{chunk-YJ2HC4CP.js.map → chunk-NV5XWADG.js.map} +0 -0
  821. /package/dist/{chunk-T5KFRIP4.js.map → chunk-O3255WPP.js.map} +0 -0
  822. /package/dist/{chunk-J6XKDYNZ.js.map → chunk-OSM7YS23.js.map} +0 -0
  823. /package/dist/{chunk-UFYU7AKL.js.map → chunk-Q7PYFSNU.js.map} +0 -0
  824. /package/dist/{chunk-P4ENJUBN.js.map → chunk-QMI222IJ.js.map} +0 -0
  825. /package/dist/{chunk-O64UTRAC.js.map → chunk-QRIRWDIW.js.map} +0 -0
  826. /package/dist/{chunk-C5QOWZK6.js.map → chunk-SJTOSA7E.js.map} +0 -0
  827. /package/dist/{chunk-M464GTNI.js.map → chunk-SRYFYAXK.js.map} +0 -0
  828. /package/dist/{chunk-A2Y3GEUH.js.map → chunk-TITA4HJA.js.map} +0 -0
  829. /package/dist/{chunk-L2ED35QZ.js.map → chunk-U7ZMIMI5.js.map} +0 -0
  830. /package/dist/{chunk-RIGZHHCP.js.map → chunk-UJU3Q7QJ.js.map} +0 -0
  831. /package/dist/{chunk-QXCVG66S.js.map → chunk-UL2ISTHR.js.map} +0 -0
  832. /package/dist/{chunk-I7X6K4OL.js.map → chunk-VIPMLSZP.js.map} +0 -0
  833. /package/dist/{chunk-AAEXTQT3.js.map → chunk-WGL6FIUE.js.map} +0 -0
  834. /package/dist/{chunk-ITYEOGLB.js.map → chunk-WIYKAKWE.js.map} +0 -0
  835. /package/dist/{chunk-NBMJ2UMA.js.map → chunk-WPHOEG56.js.map} +0 -0
  836. /package/dist/{chunk-G2MAZI6I.js.map → chunk-XS4QWRS3.js.map} +0 -0
  837. /package/dist/{chunk-VIYGTRUZ.js.map → chunk-YSW57QDM.js.map} +0 -0
  838. /package/dist/{chunk-KLFROH3F.js.map → chunk-YXQNZPCO.js.map} +0 -0
  839. /package/dist/{chunk-WZRXJ5LL.js.map → chunk-YYYJB53A.js.map} +0 -0
  840. /package/dist/{chunk-BHVDOW3W.js.map → chunk-ZTKQLABY.js.map} +0 -0
  841. /package/dist/{condition-S52W57ZO.js.map → condition-AM523RDR.js.map} +0 -0
  842. /package/dist/{controls-B4MTTPWO.js.map → controls-HTMH5QBP.js.map} +0 -0
  843. /package/dist/{controls.config-6KBCTIPN.js.map → controls.config-EEK2RBPI.js.map} +0 -0
  844. /package/dist/{correlation-VSBCBFFP.js.map → correlation-HKD67SPS.js.map} +0 -0
  845. /package/dist/{cuminc-T5ZPAGVB.js.map → cuminc-66V55MMN.js.map} +0 -0
  846. /package/dist/{cuminc.integration.spec-2QT3IPHU.js.map → cuminc.integration.spec-PNTOPB2L.js.map} +0 -0
  847. /package/dist/{customdata.inputui-5MHQQHJL.js.map → customdata.inputui-Z4WQDU6I.js.map} +0 -0
  848. /package/dist/{dataDownload-S4EBNHMW.js.map → dataDownload-3ZEI22OK.js.map} +0 -0
  849. /package/dist/{dataDownload.integration.spec-OVSIWI34.js.map → dataDownload.integration.spec-C3JRC6K5.js.map} +0 -0
  850. /package/dist/{databrowser.ui-EAJS3NXV.js.map → databrowser.ui-Q365SHBG.js.map} +0 -0
  851. /package/dist/{dnaMethylation-G3F2INDH.js.map → dnaMethylation-IFZWWBUG.js.map} +0 -0
  852. /package/dist/{e2pca-SLXGPVHP.js.map → e2pca-I3QXF7EM.js.map} +0 -0
  853. /package/dist/{ep-4HGUSDGJ.js.map → ep-2VCQ36GT.js.map} +0 -0
  854. /package/dist/{expclust.gdc.spec-JJ42ESKE.js.map → expclust.gdc.spec-VWIQFY67.js.map} +0 -0
  855. /package/dist/{facet-6WVTVKDV.js.map → facet-CHP3VUWS.js.map} +0 -0
  856. /package/dist/{geneExpClustering-5LOZPD5X.js.map → geneExpClustering-YDIDEH2O.js.map} +0 -0
  857. /package/dist/{geneExpression-PTSZWKCM.js.map → geneExpression-FA5RJRHZ.js.map} +0 -0
  858. /package/dist/{geneExpression-BJ46UGXW.js.map → geneExpression-X2KXJPND.js.map} +0 -0
  859. /package/dist/{geneExpression.unit.spec-NW5HTO7F.js.map → geneExpression.unit.spec-3LVHYZGG.js.map} +0 -0
  860. /package/dist/{geneORA-H65EZ7QO.js.map → geneORA-4CAYRKSN.js.map} +0 -0
  861. /package/dist/{geneVariant-T6GWOVZD.js.map → geneVariant-OCOTNUH4.js.map} +0 -0
  862. /package/dist/{geneVariant-WTDFZTXG.js.map → geneVariant-Y4L5W5HF.js.map} +0 -0
  863. /package/dist/{geneVariant.integration.spec-OPSBRUM3.js.map → geneVariant.integration.spec-BOJ5MM5K.js.map} +0 -0
  864. /package/dist/{genefusion.ui-RSBCC37C.js.map → genefusion.ui-I6HZOBIV.js.map} +0 -0
  865. /package/dist/{geneset-B67PAZVL.js.map → geneset-GEWKDAAT.js.map} +0 -0
  866. /package/dist/{genomeBrowser.spec-AUTULF4C.js.map → genomeBrowser.spec-FDEGH4DY.js.map} +0 -0
  867. /package/dist/{grin2-CMBP7XVH.js.map → grin2-K56B6XBZ.js.map} +0 -0
  868. /package/dist/{grin2-JVCNH3KW.js.map → grin2-V6FMM44N.js.map} +0 -0
  869. /package/dist/{gsea-H774WVPQ.js.map → gsea-UNPPRU2U.js.map} +0 -0
  870. /package/dist/{hierCluster-IQTXQUMI.js.map → hierCluster-DXAWRQNI.js.map} +0 -0
  871. /package/dist/{hierCluster-ZQJDXYBD.js.map → hierCluster-SPIQA2M2.js.map} +0 -0
  872. /package/dist/{hierCluster.config-ZHJTZK5L.js.map → hierCluster.config-JW6D3T3Q.js.map} +0 -0
  873. /package/dist/{hierCluster.integration.spec-MSJ5GHHK.js.map → hierCluster.integration.spec-5NXZY4LG.js.map} +0 -0
  874. /package/dist/{hierCluster.interactivity-H2GNO6AA.js.map → hierCluster.interactivity-CPPBXHM7.js.map} +0 -0
  875. /package/dist/{hierCluster.renderers-2TE6HMK2.js.map → hierCluster.renderers-A6MEGO2B.js.map} +0 -0
  876. /package/dist/{imagePlot-FMNMB7JZ.js.map → imagePlot-QLAHCULW.js.map} +0 -0
  877. /package/dist/{importPlot-N66G43XX.js.map → importPlot-6ITZ6U7G.js.map} +0 -0
  878. /package/dist/{isoformExpression-B64WLO3H.js.map → isoformExpression-7GAUF2QV.js.map} +0 -0
  879. /package/dist/{jspdf.es.min-DO4YWL2R.js.map → jspdf.es.min-FC3BCETM.js.map} +0 -0
  880. /package/dist/{launch.adhoc-MPRAJ3GN.js.map → launch.adhoc-HFHBAUR6.js.map} +0 -0
  881. /package/dist/{leftlabel.sample-4JCKYXED.js.map → leftlabel.sample-CWPJUCHR.js.map} +0 -0
  882. /package/dist/{lollipop-25ADHT7O.js.map → lollipop-QFRQLEER.js.map} +0 -0
  883. /package/dist/{maftimeline-FOQF6O3X.js.map → maftimeline-2DFIF4C4.js.map} +0 -0
  884. /package/dist/{matrix-LHLAYDTQ.js.map → matrix-3HFB5TUU.js.map} +0 -0
  885. /package/dist/{matrix-ZKF7NRAD.js.map → matrix-MIXK27AD.js.map} +0 -0
  886. /package/dist/{matrix.cells-H4TS74FJ.js.map → matrix.cells-U7AQNEBP.js.map} +0 -0
  887. /package/dist/{matrix.config-HE7QUDER.js.map → matrix.config-FX5MHX6O.js.map} +0 -0
  888. /package/dist/{matrix.controls-VILCLNSC.js.map → matrix.controls-5K7BB5Z4.js.map} +0 -0
  889. /package/dist/{matrix.data-2OUWYD35.js.map → matrix.data-EEIY6AO4.js.map} +0 -0
  890. /package/dist/{matrix.dom-IZFFS4RQ.js.map → matrix.dom-6QL3AJMW.js.map} +0 -0
  891. /package/dist/{matrix.groups-5BGJIOOJ.js.map → matrix.groups-CUB6UWC5.js.map} +0 -0
  892. /package/dist/{matrix.integration.spec-DSXZHAEY.js.map → matrix.integration.spec-ML4T7FRG.js.map} +0 -0
  893. /package/dist/{matrix.interactivity-VK3NWX5M.js.map → matrix.interactivity-QMPWX63Q.js.map} +0 -0
  894. /package/dist/{matrix.layout-PUNMMNCC.js.map → matrix.layout-7SEF6MYI.js.map} +0 -0
  895. /package/dist/{matrix.legend-QMERGVYU.js.map → matrix.legend-42LQGAGX.js.map} +0 -0
  896. /package/dist/{matrix.renderers-2KQ2NXSQ.js.map → matrix.renderers-ZF7LLER3.js.map} +0 -0
  897. /package/dist/{matrix.serieses-24G3XPJD.js.map → matrix.serieses-4B2WB526.js.map} +0 -0
  898. /package/dist/{matrix.sort-HTVT4K7C.js.map → matrix.sort-BJACNR7G.js.map} +0 -0
  899. /package/dist/{matrix.sort.unit.spec-EUVL76NB.js.map → matrix.sort.unit.spec-ZGSM7HDJ.js.map} +0 -0
  900. /package/dist/{matrix.sorterUi-PJPFXWOJ.js.map → matrix.sorterUi-W6XFYZY2.js.map} +0 -0
  901. /package/dist/{matrix.sorterUi.unit.spec-QWL5Y4DQ.js.map → matrix.sorterUi.unit.spec-V34ZZD7A.js.map} +0 -0
  902. /package/dist/{mavb-UGM5SHEF.js.map → mavb-NVQVFU6E.js.map} +0 -0
  903. /package/dist/{mds.fimo-64US7RTE.js.map → mds.fimo-HOCF6U6K.js.map} +0 -0
  904. /package/dist/{mds.samplescatterplot-JMXLXVIE.js.map → mds.samplescatterplot-ULD5BK5R.js.map} +0 -0
  905. /package/dist/{mds.survivalplot-RJ5UD3IU.js.map → mds.survivalplot-5US32RQD.js.map} +0 -0
  906. /package/dist/{oncomatrix.spec-4YLKDGFE.js.map → oncomatrix.spec-MFUJLWEP.js.map} +0 -0
  907. /package/dist/{plot.2dvaf-DYSU6BBN.js.map → plot.2dvaf-F4WZ4YPU.js.map} +0 -0
  908. /package/dist/{plot.app-NFBVLAXZ.js.map → plot.app-YFFLLBU5.js.map} +0 -0
  909. /package/dist/{plot.barplot-DBGTDK7J.js.map → plot.barplot-2EJ2MWQD.js.map} +0 -0
  910. /package/dist/{plot.boxplot-MCKZUROP.js.map → plot.boxplot-AKZM443E.js.map} +0 -0
  911. /package/dist/{plot.brainImaging-BBAVUEB4.js.map → plot.brainImaging-DR6WJNFZ.js.map} +0 -0
  912. /package/dist/{plot.dzi-YQIFOTZQ.js.map → plot.dzi-R2MR7HAT.js.map} +0 -0
  913. /package/dist/{plot.ssgq-MU3BRTMC.js.map → plot.ssgq-C52YIUFY.js.map} +0 -0
  914. /package/dist/{plot.vaf2cov-KDHZ7JXJ.js.map → plot.vaf2cov-FOD3K7BC.js.map} +0 -0
  915. /package/dist/{plot.wsi-G2TUGQF7.js.map → plot.wsi-D2TXYERK.js.map} +0 -0
  916. /package/dist/{polar-RCCZXZIU.js.map → polar-2LC35O6K.js.map} +0 -0
  917. /package/dist/{polar2-COQ3WIGW.js.map → polar2-QPUOEUJZ.js.map} +0 -0
  918. /package/dist/{profile.spec-A4ZASR2T.js.map → profile.spec-3NCDGHLX.js.map} +0 -0
  919. /package/dist/{profileBarchart-GB4RK5DF.js.map → profileBarchart-PPQ3NL4D.js.map} +0 -0
  920. /package/dist/{profileForms-O5KBHRF6.js.map → profileForms-GS3VVW65.js.map} +0 -0
  921. /package/dist/{profilePlot-COCLCP5B.js.map → profilePlot-DQWFH5NC.js.map} +0 -0
  922. /package/dist/{profileRadar-4EE3YDOH.js.map → profileRadar-KAKRDC4R.js.map} +0 -0
  923. /package/dist/{proteomeAbundance-JBVXUSD6.js.map → proteomeAbundance-DE4NVBCN.js.map} +0 -0
  924. /package/dist/{proteomeAbundance-NQVU4DOW.js.map → proteomeAbundance-LTB3QR3G.js.map} +0 -0
  925. /package/dist/{qualitative-QROOPDSI.js.map → qualitative-YOFAROVR.js.map} +0 -0
  926. /package/dist/{regression-7FQZ22OO.js.map → regression-PF6IAHJK.js.map} +0 -0
  927. /package/dist/{regression.inputs-F62CES3A.js.map → regression.inputs-77IUYED3.js.map} +0 -0
  928. /package/dist/{regression.inputs.term-BCGP7PX4.js.map → regression.inputs.term-WWCHU6KF.js.map} +0 -0
  929. /package/dist/{regression.inputs.values.table-D3ZXZSH7.js.map → regression.inputs.values.table-I6GM6MU7.js.map} +0 -0
  930. /package/dist/{regression.results-JX6RJQQP.js.map → regression.results-6GXNKYUS.js.map} +0 -0
  931. /package/dist/{regression.spec-ROME7T33.js.map → regression.spec-MEFQNY34.js.map} +0 -0
  932. /package/dist/{report-B6MM4T6B.js.map → report-LG3UKZHL.js.map} +0 -0
  933. /package/dist/{sampleScatter.spec-EPCMC3SR.js.map → sampleScatter.spec-D3IK7MSA.js.map} +0 -0
  934. /package/dist/{sampleView-77EAJ75T.js.map → sampleView-XUI2J5EC.js.map} +0 -0
  935. /package/dist/{samplelst-CX4NQWA7.js.map → samplelst-A7IHCBAX.js.map} +0 -0
  936. /package/dist/{samplematrix-PYQFAH64.js.map → samplematrix-VGUU7Q75.js.map} +0 -0
  937. /package/dist/{sc-X6SI5VVI.js.map → sc-UVKVT2RY.js.map} +0 -0
  938. /package/dist/{scatter-ZFFHAI4F.js.map → scatter-UILUYOGO.js.map} +0 -0
  939. /package/dist/{selectGenomeWithTklst-CZMVTBMD.js.map → selectGenomeWithTklst-LWKIMZEJ.js.map} +0 -0
  940. /package/dist/{singleCellCellType-GOBX7JKV.js.map → singleCellCellType-TI52WQQ4.js.map} +0 -0
  941. /package/dist/{singleCellGeneExpression-BLMNMEAI.js.map → singleCellGeneExpression-I5SAHMGI.js.map} +0 -0
  942. /package/dist/{singleCellPlot-HLD7PLQH.js.map → singleCellPlot-HRWCHYCI.js.map} +0 -0
  943. /package/dist/{singlecell-HL4GLGIA.js.map → singlecell-BHPP7KCO.js.map} +0 -0
  944. /package/dist/{singlecell-JQFPINRS.js.map → singlecell-PQNKBKR7.js.map} +0 -0
  945. /package/dist/{snp-EAUNFDAV.js.map → snp-V4YGI7B3.js.map} +0 -0
  946. /package/dist/{snp.unit.spec-AVLPMAWI.js.map → snp.unit.spec-JSUCMGNP.js.map} +0 -0
  947. /package/dist/{snplocus-2J7OA6OL.js.map → snplocus-3YT5NNCH.js.map} +0 -0
  948. /package/dist/{spliceevent.a53ss.diagram-4DU2U7NW.js.map → spliceevent.a53ss.diagram-QEQJ44YH.js.map} +0 -0
  949. /package/dist/{spliceevent.exonskip.diagram-GG5FGXOK.js.map → spliceevent.exonskip.diagram-HMWVSOJG.js.map} +0 -0
  950. /package/dist/{spliceevent.noeventdiagram-T6RNIMCM.js.map → spliceevent.noeventdiagram-L5HUCT5A.js.map} +0 -0
  951. /package/dist/{ssGSEA-XJWLRVFQ.js.map → ssGSEA-Z3XRCBYW.js.map} +0 -0
  952. /package/dist/{ssGSEA.unit.spec-MQ23ODYO.js.map → ssGSEA.unit.spec-EUCTV2XJ.js.map} +0 -0
  953. /package/dist/{summarizeMutationDiagnosis-ZVX7AZK7.js.map → summarizeMutationDiagnosis-HFFYLQOF.js.map} +0 -0
  954. /package/dist/{summarizeMutationSurvival-EWXD7TCT.js.map → summarizeMutationSurvival-OBK6YILP.js.map} +0 -0
  955. /package/dist/{summary-VUYBKQOC.js.map → summary-W55WWIU2.js.map} +0 -0
  956. /package/dist/{summary.integration.spec-EPBV5XCT.js.map → summary.integration.spec-X2PNAUKW.js.map} +0 -0
  957. /package/dist/{summaryInput-YX5IRGWM.js.map → summaryInput-X547Q6C7.js.map} +0 -0
  958. /package/dist/{survival-XOXDPXZR.js.map → survival-PAJZHZPD.js.map} +0 -0
  959. /package/dist/{survival-E6SRRXBB.js.map → survival-TQPWMOD5.js.map} +0 -0
  960. /package/dist/{svg2pdf.es.min-EZ4UYRSH.js.map → svg2pdf.es.min-CYTPRWNB.js.map} +0 -0
  961. /package/dist/{svgraph-D23WG3UE.js.map → svgraph-Y35C2M3D.js.map} +0 -0
  962. /package/dist/{svmr-UFC4TKWV.js.map → svmr-WGCIR7PE.js.map} +0 -0
  963. /package/dist/{table-US2K6IYZ.js.map → table-Q3B2YXEN.js.map} +0 -0
  964. /package/dist/{termCollection-E7S57CIN.js.map → termCollection-A6YTSM5I.js.map} +0 -0
  965. /package/dist/{termCollection-ZMP3VE2G.js.map → termCollection-NTFNVQ7D.js.map} +0 -0
  966. /package/dist/{termCollection.unit.spec-MDWK6XH3.js.map → termCollection.unit.spec-BX54PHKT.js.map} +0 -0
  967. /package/dist/{tk-TLQJK6R4.js.map → tk-OCBZ7YR6.js.map} +0 -0
  968. /package/dist/{tp.ui-NQEAKWUH.js.map → tp.ui-ZT47N2CO.js.map} +0 -0
  969. /package/dist/{tvs.dt-U2MINIBH.js.map → tvs.dt-BFB253O3.js.map} +0 -0
  970. /package/dist/{tvs.dtcnv.categorical-2OOAZJKC.js.map → tvs.dtcnv.categorical-ARGAYIDO.js.map} +0 -0
  971. /package/dist/{tvs.dtcnv.continuous-5ETKBJ52.js.map → tvs.dtcnv.continuous-JCU23ERV.js.map} +0 -0
  972. /package/dist/{tvs.dtfusion-EB4PPR3Y.js.map → tvs.dtfusion-FV64XLZI.js.map} +0 -0
  973. /package/dist/{tvs.dtsnvindel-IRQPTKQF.js.map → tvs.dtsnvindel-DMOXMEVL.js.map} +0 -0
  974. /package/dist/{tvs.dtsv-TOVXZJCR.js.map → tvs.dtsv-53FSZEPV.js.map} +0 -0
  975. /package/dist/{tvs.samplelst-4SCH543Y.js.map → tvs.samplelst-MVPL6VXX.js.map} +0 -0
  976. /package/dist/{tvs.termCollection-GGN5F6HC.js.map → tvs.termCollection-UGJXTHTG.js.map} +0 -0
  977. /package/dist/{violin-7D7DN74I.js.map → violin-ZLUDGSQG.js.map} +0 -0
  978. /package/dist/{violin.interactivity-YPJ2H6SQ.js.map → violin.interactivity-ULDOCZWW.js.map} +0 -0
  979. /package/dist/{violin.renderer-UK7WSA2Z.js.map → violin.renderer-KJAXPMIK.js.map} +0 -0
  980. /package/dist/{vocabulary-KLWZ6LRP.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
+ }