@sjcrh/proteinpaint-client 2.192.0 → 2.194.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (908) hide show
  1. package/dist/2dmaf-HS37GJYM.js +1373 -0
  2. package/dist/AIProjectAdmin-V5NVBBOA.js +958 -0
  3. package/dist/AppHeader-VIQ2VZPI.js +835 -0
  4. package/dist/BoxPlot-J7DPHT2N.js +1217 -0
  5. package/dist/CorrelationVolcano-ZHP7IPFD.js +619 -0
  6. package/dist/DE-VW4MQHYP.js +95 -0
  7. package/dist/DEinput-2EKXGUP3.js +301 -0
  8. package/dist/DifferentialAnalysis-H7LZWEIL.js +245 -0
  9. package/dist/Disco-5AA67AO5.js +3297 -0
  10. package/dist/Disco.UI-K4RBVRJP.js +249 -0
  11. package/dist/DmrPlot-RVJUKBOB.js +642 -0
  12. package/dist/GB-TA5LQGX6.js +1353 -0
  13. package/dist/GB-TA5LQGX6.js.map +7 -0
  14. package/dist/GeneExpInput-HHOIK6X7.js +367 -0
  15. package/dist/HicApp-YTQNK5DC.js +2250 -0
  16. package/dist/IDCViewer-T74AFWY3.js +10455 -0
  17. package/dist/IDCViewer-T74AFWY3.js.map +7 -0
  18. package/dist/NumBinaryEditor-ICZCNBRL.js +271 -0
  19. package/dist/NumBinaryEditor.unit.spec-WDJPDAVT.js +286 -0
  20. package/dist/NumContEditor-5KEM54CE.js +109 -0
  21. package/dist/NumContEditor.unit.spec-WG5QKOD3.js +169 -0
  22. package/dist/NumCustomBinEditor-MGHR7VQT.js +38 -0
  23. package/dist/NumCustomBinEditor.unit.spec-JWSHEIJJ.js +284 -0
  24. package/dist/NumDiscreteEditor-XT2GSGUR.js +179 -0
  25. package/dist/NumDiscreteEditor.unit.spec-DSCWGYBS.js +202 -0
  26. package/dist/NumRegularBinEditor-JMDBM5PU.js +38 -0
  27. package/dist/NumRegularBinEditor.unit.spec-BWRP6OO2.js +227 -0
  28. package/dist/NumSplineEditor-QJNRSORC.js +198 -0
  29. package/dist/NumSplineEditor.unit.spec-CXBTVND4.js +199 -0
  30. package/dist/NumericDensity-XQWCBSGT.js +38 -0
  31. package/dist/NumericDensity.unit.spec-7JS5R3AZ.js +221 -0
  32. package/dist/NumericHandler-QXXBEJC3.js +39 -0
  33. package/dist/NumericHandler.unit.spec-SRQJQVPP.js +219 -0
  34. package/dist/ProteomeInput-E4MJLAKF.js +396 -0
  35. package/dist/RunChart2-N6S7HBXV.js +758 -0
  36. package/dist/SC-RQ32A4YB.js +1127 -0
  37. package/dist/SC-RQ32A4YB.js.map +7 -0
  38. package/dist/Volcano-OHJPYZQE.js +1379 -0
  39. package/dist/WSIViewer-SAKVU52Z.js +48562 -0
  40. package/dist/WsiSamplesPlot-QV5GFFCR.js +165 -0
  41. package/dist/adSandbox-IE7TOJUE.js +38 -0
  42. package/dist/animatedBubbleChart-ZNEDQND3.js +555 -0
  43. package/dist/app-7MRKEE2J.js +49 -0
  44. package/dist/app-QIBNB4AA.js +37 -0
  45. package/dist/app.js +15 -15
  46. package/dist/bam-OBS5ULFF.js +860 -0
  47. package/dist/barchart-2RVEEMPK.js +47 -0
  48. package/dist/barchart.data-7OI5GZZ6.js +22 -0
  49. package/dist/barchart.events-AASSQL3J.js +47 -0
  50. package/dist/barchart.integration.spec-UU2ARJS5.js +2010 -0
  51. package/dist/barchart.integration.spec-UU2ARJS5.js.map +7 -0
  52. package/dist/barchart2-TUBYGLMC.js +314 -0
  53. package/dist/block-BYXWS7H7.js +6226 -0
  54. package/dist/block.init-QOAPDKCC.js +38 -0
  55. package/dist/block.mds.expressionrank-Q46AAYOA.js +359 -0
  56. package/dist/block.mds.geneboxplot-IC26RT7L.js +828 -0
  57. package/dist/block.mds.junction-RIUZIBFB.js +1545 -0
  58. package/dist/block.mds.svcnv-GUB2TTXQ.js +6801 -0
  59. package/dist/block.svg-I4NHMOEJ.js +164 -0
  60. package/dist/block.tk.aicheck-X57EGAOB.js +283 -0
  61. package/dist/block.tk.ase-JMBKBZAH.js +365 -0
  62. package/dist/block.tk.bam-6UAEWVVD.js +1906 -0
  63. package/dist/block.tk.bedgraphdot-7QSRLAJ7.js +384 -0
  64. package/dist/block.tk.bigwig.ui-SBD6S5SA.js +212 -0
  65. package/dist/block.tk.hicstraw-LIGPTMX7.js +823 -0
  66. package/dist/block.tk.junction-X6HFXKW7.js +2364 -0
  67. package/dist/block.tk.junction.textmatrixui-XJIUGHAX.js +199 -0
  68. package/dist/block.tk.ld-OZVW7LSL.js +99 -0
  69. package/dist/block.tk.menu-B2CEZAYR.js +1029 -0
  70. package/dist/block.tk.pgv-XAAQBQQE.js +944 -0
  71. package/dist/brainImaging-KFKM3XWD.js +423 -0
  72. package/dist/brainRegions-ZHKXILK7.js +221 -0
  73. package/dist/bubbleHeatmap-75N23URG.js +383 -0
  74. package/dist/bubbleHeatmap-75N23URG.js.map +7 -0
  75. package/dist/chunk-2IITC4V5.js +617 -0
  76. package/dist/chunk-2P3U6XTF.js +2327 -0
  77. package/dist/chunk-35UCHCOQ.js +54 -0
  78. package/dist/chunk-3LYZMOLO.js +58 -0
  79. package/dist/chunk-4E6HJ4ZW.js +98 -0
  80. package/dist/chunk-57LW6RUM.js +129 -0
  81. package/dist/chunk-5CR24RTX.js +381 -0
  82. package/dist/chunk-5DHRDF2Y.js +216 -0
  83. package/dist/chunk-5POMWXDZ.js +117 -0
  84. package/dist/chunk-5QTJUPFS.js +26 -0
  85. package/dist/chunk-5X5LI5YM.js +254 -0
  86. package/dist/chunk-67QZRGIJ.js +148 -0
  87. package/dist/chunk-6G4YOMWW.js +1825 -0
  88. package/dist/chunk-6RKL2FLA.js +14 -0
  89. package/dist/chunk-6YJCBK4J.js +2681 -0
  90. package/dist/chunk-7K6LTROG.js +190 -0
  91. package/dist/chunk-7K6LTROG.js.map +7 -0
  92. package/dist/chunk-7KRS7L4U.js +1443 -0
  93. package/dist/chunk-ADAKSWID.js +399 -0
  94. package/dist/chunk-ANKGIHCM.js +34 -0
  95. package/dist/chunk-AUP7W7MK.js +343 -0
  96. package/dist/chunk-AXKUVSXP.js +448 -0
  97. package/dist/chunk-AXKUVSXP.js.map +7 -0
  98. package/dist/chunk-B4QM73WG.js +222 -0
  99. package/dist/chunk-BKPV67UA.js +299 -0
  100. package/dist/chunk-BKPV67UA.js.map +7 -0
  101. package/dist/chunk-BMOB36XM.js +226 -0
  102. package/dist/chunk-BMOB36XM.js.map +7 -0
  103. package/dist/chunk-C6YT5EM2.js +217 -0
  104. package/dist/chunk-CD3VY5WW.js +1943 -0
  105. package/dist/chunk-CDUNE45Q.js +534 -0
  106. package/dist/chunk-COYULNJF.js +119 -0
  107. package/dist/chunk-DNVSEW6P.js +170 -0
  108. package/dist/chunk-EC3SKPQT.js +446 -0
  109. package/dist/chunk-F47X3VUC.js +95 -0
  110. package/dist/chunk-G2DLWJCB.js +37 -0
  111. package/dist/chunk-I4G4FXLO.js +302 -0
  112. package/dist/chunk-I73KUUYG.js +287 -0
  113. package/dist/chunk-INU357UG.js +230 -0
  114. package/dist/chunk-IVXCWCKS.js +317 -0
  115. package/dist/chunk-IVXCWCKS.js.map +7 -0
  116. package/dist/chunk-IZ3BPOTQ.js +833 -0
  117. package/dist/chunk-J5GTIQTL.js +2833 -0
  118. package/dist/chunk-J5GTIQTL.js.map +7 -0
  119. package/dist/chunk-JBI6P3UX.js +55 -0
  120. package/dist/chunk-JRDHTECQ.js +234 -0
  121. package/dist/chunk-JRZZ6GN3.js +102 -0
  122. package/dist/chunk-KM4JBR26.js +815 -0
  123. package/dist/chunk-KXRTPE65.js +158 -0
  124. package/dist/chunk-L5C3B7PS.js +1220 -0
  125. package/dist/chunk-L5C3B7PS.js.map +7 -0
  126. package/dist/chunk-LHNKTWFL.js +5067 -0
  127. package/dist/chunk-LHNKTWFL.js.map +7 -0
  128. package/dist/chunk-LSWU6EAQ.js +31 -0
  129. package/dist/chunk-MCYVUHEZ.js +1230 -0
  130. package/dist/chunk-MCYVUHEZ.js.map +7 -0
  131. package/dist/chunk-N6QEVQZV.js +194 -0
  132. package/dist/chunk-NLQQIVTC.js +276 -0
  133. package/dist/chunk-O4VKIC66.js +1275 -0
  134. package/dist/chunk-OWPBE2LB.js +263 -0
  135. package/dist/chunk-PWUERAAF.js +182 -0
  136. package/dist/chunk-QFSSC5VW.js +176 -0
  137. package/dist/chunk-RHGAE6PY.js +20888 -0
  138. package/dist/chunk-RHGAE6PY.js.map +7 -0
  139. package/dist/chunk-T46LHXJW.js +283 -0
  140. package/dist/chunk-T4CFXTIG.js +100 -0
  141. package/dist/chunk-T5UGVJCK.js +102 -0
  142. package/dist/chunk-TJCRAFKM.js +448 -0
  143. package/dist/chunk-TNF2LHJR.js +142 -0
  144. package/dist/chunk-U4IYNHVD.js +6364 -0
  145. package/dist/chunk-UAOPKEMR.js +482 -0
  146. package/dist/chunk-UFGV7554.js +736 -0
  147. package/dist/chunk-UV66X5JN.js +291 -0
  148. package/dist/chunk-VC642GDC.js +54 -0
  149. package/dist/chunk-VDIVDU3T.js +386 -0
  150. package/dist/chunk-VNF7DC36.js +1289 -0
  151. package/dist/chunk-VOGPIAQL.js +477 -0
  152. package/dist/chunk-VZOTKHPM.js +272 -0
  153. package/dist/chunk-YAU2Z6EN.js +4269 -0
  154. package/dist/chunk-YNAPHPMG.js +368 -0
  155. package/dist/chunk-YP2LHXFC.js +514 -0
  156. package/dist/chunk-YWF7GHUW.js +50 -0
  157. package/dist/chunk-YYZQMJLW.js +2786 -0
  158. package/dist/chunk-ZBEJVZMY.js +203 -0
  159. package/dist/chunk-ZZLBK6P6.js +1102 -0
  160. package/dist/condition-MP65K762.js +332 -0
  161. package/dist/controls-HKHMEWC7.js +41 -0
  162. package/dist/controls.config-LUPIT34L.js +39 -0
  163. package/dist/correlation-5UTW6EEI.js +102 -0
  164. package/dist/cuminc-LLUR2FLL.js +1149 -0
  165. package/dist/cuminc.integration.spec-CH5UZTIM.js +678 -0
  166. package/dist/customdata.inputui-6IGE5HCZ.js +289 -0
  167. package/dist/dataDownload-MCE2OJGZ.js +330 -0
  168. package/dist/dataDownload.integration.spec-VETU75VQ.js +193 -0
  169. package/dist/databrowser.ui-3BRSJHIW.js +433 -0
  170. package/dist/dictionary-UV43XQAU.js +118 -0
  171. package/dist/dnaMethylation-QDE3S4TV.js +38 -0
  172. package/dist/dnaMethylation.integration.spec-JBHJE47S.js +203 -0
  173. package/dist/dofetch-BMSZZAAQ.js +51 -0
  174. package/dist/e2pca-JMH74VN4.js +350 -0
  175. package/dist/ep-NDT7C2IT.js +1256 -0
  176. package/dist/expclust.gdc.spec-GZ3XLPHA.js +307 -0
  177. package/dist/facet-ABIWCCVT.js +521 -0
  178. package/dist/forms2-DRRRLG4I.js +539 -0
  179. package/dist/gb-EFZ62HCR.js +88 -0
  180. package/dist/geneExpClustering-CKH6M6KK.js +249 -0
  181. package/dist/geneExpression-CNKX7XVX.js +38 -0
  182. package/dist/geneExpression-P2ERCRXO.js +313 -0
  183. package/dist/geneExpression.unit.spec-7UJB43L3.js +102 -0
  184. package/dist/geneORA-TZOSNGRJ.js +278 -0
  185. package/dist/geneRanking-26GDRALC.js +551 -0
  186. package/dist/geneVariant-2DHMJUJL.js +39 -0
  187. package/dist/geneVariant-FOKRLND3.js +41 -0
  188. package/dist/geneVariant.integration.spec-XXNSWUOR.js +198 -0
  189. package/dist/genefusion.ui-ZJBKC2RH.js +309 -0
  190. package/dist/geneset-6FN5BFP3.js +208 -0
  191. package/dist/genomeBrowser.spec-QLHJYDRZ.js +281 -0
  192. package/dist/grin2-DR7XJIAS.js +968 -0
  193. package/dist/grin2-DR7XJIAS.js.map +7 -0
  194. package/dist/grin2-QOOJBELM.js +75 -0
  195. package/dist/grin2-QOOJBELM.js.map +7 -0
  196. package/dist/gsea-6YBRMGOC.js +47 -0
  197. package/dist/hierCluster-B3TULT27.js +59 -0
  198. package/dist/hierCluster-NF75B7MZ.js +63 -0
  199. package/dist/hierCluster.config-TEFI7M4K.js +40 -0
  200. package/dist/hierCluster.integration.spec-IUK6Q5SQ.js +395 -0
  201. package/dist/hierCluster.interactivity-MPD4AV4D.js +54 -0
  202. package/dist/hierCluster.renderers-4XWKHCNW.js +21 -0
  203. package/dist/imagePlot-HNJDBPO4.js +163 -0
  204. package/dist/importPlot-OBS55TCA.js +8 -0
  205. package/dist/isoformExpression-K4QIYBZR.js +40 -0
  206. package/dist/isoformExpression.unit.spec-INB6655U.js +208 -0
  207. package/dist/launch.adhoc-VDXES33R.js +42 -0
  208. package/dist/leftlabel.sample-R6IXXFZT.js +264 -0
  209. package/dist/leftlabel.sample-R6IXXFZT.js.map +7 -0
  210. package/dist/lollipop-O3XJC7BR.js +171 -0
  211. package/dist/maf-GLZ7KCDP.js +452 -0
  212. package/dist/maftimeline-Q4YPFSZP.js +593 -0
  213. package/dist/matrix-KVTQNDRZ.js +63 -0
  214. package/dist/matrix-QDHUX4QD.js +58 -0
  215. package/dist/matrix.cells-ED6RS5EC.js +28 -0
  216. package/dist/matrix.config-B65UXJNA.js +41 -0
  217. package/dist/matrix.data-KQFMXWRX.js +25 -0
  218. package/dist/matrix.groups-RE74EFLY.js +27 -0
  219. package/dist/matrix.integration.spec-2ITZRE4N.js +3072 -0
  220. package/dist/matrix.interactivity-3RF4YOAP.js +42 -0
  221. package/dist/matrix.layout-ERVRJAK2.js +44 -0
  222. package/dist/matrix.legend-ZST44PIB.js +22 -0
  223. package/dist/matrix.renderers-HNEUKUGS.js +38 -0
  224. package/dist/matrix.serieses-6ZKTFVWY.js +21 -0
  225. package/dist/matrix.sort-2UE47IOC.js +27 -0
  226. package/dist/matrix.sort.unit.spec-QGEVGY7M.js +472 -0
  227. package/dist/matrix.sorterUi-WC2YX7S7.js +18 -0
  228. package/dist/matrix.sorterUi.unit.spec-YNS7IVUF.js +342 -0
  229. package/dist/mavb-27VSL5LG.js +732 -0
  230. package/dist/mds.fimo-E5EXGT75.js +518 -0
  231. package/dist/mds.samplescatterplot-YDMRZFS7.js +1550 -0
  232. package/dist/mds.survivalplot-INJA2NDC.js +483 -0
  233. package/dist/numericDictTermCluster-DRIEJJSP.js +72 -0
  234. package/dist/oncomatrix-334LCTXB.js +295 -0
  235. package/dist/oncomatrix.spec-VHCJWO7S.js +448 -0
  236. package/dist/plot.2dvaf-F7GJEUMD.js +377 -0
  237. package/dist/plot.app-AKA7UVUC.js +41 -0
  238. package/dist/plot.barplot-HZAG43A5.js +102 -0
  239. package/dist/plot.boxplot-U52BJ4EP.js +152 -0
  240. package/dist/plot.brainImaging-3CB4WYQ4.js +51 -0
  241. package/dist/plot.disco-I2VLOSAU.js +102 -0
  242. package/dist/plot.dzi-K6KI52L7.js +33 -0
  243. package/dist/plot.ssgq-L67X4FUG.js +139 -0
  244. package/dist/plot.vaf2cov-PH4ZSY2K.js +259 -0
  245. package/dist/plot.wsi-Y6FZWHXT.js +36 -0
  246. package/dist/polar2-XT5QZ4VH.js +231 -0
  247. package/dist/profileForms-4LLSYMF6.js +446 -0
  248. package/dist/profilePlot-C52DDMZ4.js +54 -0
  249. package/dist/proteinView-CCL4MPXS.js +1556 -0
  250. package/dist/qualitative-DZ6JYYRS.js +43 -0
  251. package/dist/radar2-GEEOQF2A.js +326 -0
  252. package/dist/radarFacility2-OWXSKHBW.js +334 -0
  253. package/dist/regression-ZK75B4OR.js +56 -0
  254. package/dist/regression.inputs-UR7Q7HIK.js +48 -0
  255. package/dist/regression.inputs.term-PJZ7T3AI.js +48 -0
  256. package/dist/regression.inputs.values.table-CRGBKWMM.js +45 -0
  257. package/dist/regression.integration.spec-OCUFEVQS.js +784 -0
  258. package/dist/regression.results-7EHMKQ5F.js +40 -0
  259. package/dist/regression.spec-E4W3WOLI.js +708 -0
  260. package/dist/report-WWILHPI6.js +222 -0
  261. package/dist/sampleScatter.spec-VCKCJKII.js +202 -0
  262. package/dist/sampleView-STGP7UUP.js +48 -0
  263. package/dist/samplelst-U4BL6GYP.js +111 -0
  264. package/dist/samplematrix-FU3EZF6M.js +2198 -0
  265. package/dist/sc-JRLELKHN.js +86 -0
  266. package/dist/scatter-GT2VKNFG.js +851 -0
  267. package/dist/scatter.integration.spec-VDMKRPVM.js +1206 -0
  268. package/dist/selectGenomeWithTklst-F5372VC5.js +134 -0
  269. package/dist/singleCellCellType-D77PUUCZ.js +38 -0
  270. package/dist/singleCellCellType.unit.spec-J4EEZAWB.js +160 -0
  271. package/dist/singleCellGeneExpression-WCWCSHIY.js +38 -0
  272. package/dist/singleCellGeneExpression.unit.spec-CELJIAJ5.js +153 -0
  273. package/dist/singleCellPlot-2OPOJZ5U.js +54 -0
  274. package/dist/singlecell-K2SHYDHA.js +1572 -0
  275. package/dist/singlecell-K7Z6ES7B.js +86 -0
  276. package/dist/snp-ICWKGR7H.js +38 -0
  277. package/dist/snp.unit.spec-PV2UZCYO.js +176 -0
  278. package/dist/snplocus-W5D4A7QJ.js +208 -0
  279. package/dist/spliceevent.a53ss.diagram-DEQJ2C2H.js +151 -0
  280. package/dist/spliceevent.exonskip.diagram-MKA32GTK.js +277 -0
  281. package/dist/spliceevent.noeventdiagram-NFYPM4EZ.js +460 -0
  282. package/dist/ssGSEA-FAZK5FSC.js +38 -0
  283. package/dist/ssGSEA.unit.spec-S5D6JMOD.js +88 -0
  284. package/dist/summarizeCnvGeneexp-WDGJ5YOM.js +163 -0
  285. package/dist/summarizeGeneexpSurvival-J7UYKBN2.js +108 -0
  286. package/dist/summarizeMutationCnv-6ZXA32XN.js +164 -0
  287. package/dist/summarizeMutationDiagnosis-BK7QPF6A.js +40 -0
  288. package/dist/summarizeMutationSurvival-UODP6R6S.js +99 -0
  289. package/dist/summary-P6XVOWSB.js +49 -0
  290. package/dist/summary.integration.spec-XKMQ77CF.js +414 -0
  291. package/dist/summaryInput-U7XNGLGC.js +235 -0
  292. package/dist/sunburst-WHZ77REP.js +284 -0
  293. package/dist/survival-HQ5JC76V.js +46 -0
  294. package/dist/survival-QFWZNB4W.js +58 -0
  295. package/dist/survival.integration.spec-7STGYBGG.js +915 -0
  296. package/dist/survival.integration.spec-7STGYBGG.js.map +7 -0
  297. package/dist/svgraph-TYIBQ3RD.js +1387 -0
  298. package/dist/svmr-ZZIRWUVA.js +3842 -0
  299. package/dist/table-MPM3ET2V.js +200 -0
  300. package/dist/termCollection-5DF5MFBK.js +38 -0
  301. package/dist/termCollection-CQESAD6G.js +179 -0
  302. package/dist/termCollection.unit.spec-ASYBZQLO.js +208 -0
  303. package/dist/tk-NCEB2L7K.js +46 -0
  304. package/dist/tp.ui-AHTGSLBN.js +1459 -0
  305. package/dist/tvs.dt-TXG4FL3B.js +39 -0
  306. package/dist/tvs.dtcnv.categorical-7SA4PCKE.js +40 -0
  307. package/dist/tvs.dtcnv.continuous-E3VQWM5N.js +72 -0
  308. package/dist/tvs.dtfusion-F72VEUPO.js +40 -0
  309. package/dist/tvs.dtsnvindel-RAVTRO5M.js +40 -0
  310. package/dist/tvs.dtsv-ZZDBZYAJ.js +40 -0
  311. package/dist/tvs.samplelst-POTNAX4E.js +104 -0
  312. package/dist/tvs.termCollection-AHNHKJPJ.js +159 -0
  313. package/dist/violin-YR35XLAS.js +46 -0
  314. package/dist/violin.integration.spec-2VSILDUW.js +1425 -0
  315. package/dist/violin.interactivity-S7QY6HVJ.js +38 -0
  316. package/dist/violin.renderer-OUWK7EL4.js +40 -0
  317. package/dist/vocabulary-6IZJ6F7N.js +41 -0
  318. package/package.json +8 -2
  319. package/dist/2dmaf-BNMEUJVM.js +0 -1373
  320. package/dist/AIProjectAdmin-AEXQY5LY.js +0 -958
  321. package/dist/AppHeader-RXDJBHXZ.js +0 -835
  322. package/dist/BoxPlot-HDP3SIGU.js +0 -1217
  323. package/dist/CorrelationVolcano-V2E566XL.js +0 -619
  324. package/dist/DE-7YUZSW4E.js +0 -95
  325. package/dist/DEinput-P2HOQC4Z.js +0 -301
  326. package/dist/DifferentialAnalysis-2Z6BHS7A.js +0 -245
  327. package/dist/Disco-ZLC54X7T.js +0 -3297
  328. package/dist/Disco.UI-LXJJYQVV.js +0 -249
  329. package/dist/DmrPlot-OEJRGNI3.js +0 -642
  330. package/dist/GB-2GHDD3MW.js +0 -1130
  331. package/dist/GB-2GHDD3MW.js.map +0 -7
  332. package/dist/GeneExpInput-PWLPDLYT.js +0 -367
  333. package/dist/HicApp-CAYC4DPO.js +0 -2250
  334. package/dist/NumBinaryEditor-EUOYSGPM.js +0 -271
  335. package/dist/NumBinaryEditor.unit.spec-5B3W4B4F.js +0 -286
  336. package/dist/NumContEditor-7KK6CIB3.js +0 -109
  337. package/dist/NumContEditor.unit.spec-IMKGVYFZ.js +0 -169
  338. package/dist/NumCustomBinEditor-PDAF6I7B.js +0 -38
  339. package/dist/NumCustomBinEditor.unit.spec-IU3DPECJ.js +0 -284
  340. package/dist/NumDiscreteEditor-YTKUHG6Z.js +0 -179
  341. package/dist/NumDiscreteEditor.unit.spec-FUBS7Z7Z.js +0 -202
  342. package/dist/NumRegularBinEditor-LU3KLBLY.js +0 -38
  343. package/dist/NumRegularBinEditor.unit.spec-2BKOHI7L.js +0 -227
  344. package/dist/NumSplineEditor-56RJ2HT2.js +0 -198
  345. package/dist/NumSplineEditor.unit.spec-PW6VUUBZ.js +0 -199
  346. package/dist/NumericDensity-EB4H54EF.js +0 -38
  347. package/dist/NumericDensity.unit.spec-LSEM4OEY.js +0 -221
  348. package/dist/NumericHandler-VGPDXP35.js +0 -39
  349. package/dist/NumericHandler.unit.spec-NR3F7XHV.js +0 -219
  350. package/dist/ProteomeInput-AUXWUIWK.js +0 -396
  351. package/dist/RunChart2-SQ6TFOHD.js +0 -758
  352. package/dist/SC-OWJ6LYIW.js +0 -1124
  353. package/dist/SC-OWJ6LYIW.js.map +0 -7
  354. package/dist/Volcano-XHDH6UN7.js +0 -1379
  355. package/dist/WSIViewer-WT2QV747.js +0 -48562
  356. package/dist/WsiSamplesPlot-YUOAWG2A.js +0 -165
  357. package/dist/adSandbox-VMMAL22L.js +0 -38
  358. package/dist/animatedBubbleChart-Q6Z5W2UL.js +0 -555
  359. package/dist/app-FX3KZ67X.js +0 -37
  360. package/dist/app-X7ZYEOZN.js +0 -49
  361. package/dist/bam-ZYLH4U5R.js +0 -860
  362. package/dist/barchart-MXSPTKV4.js +0 -47
  363. package/dist/barchart.data-ZWF6EVJH.js +0 -22
  364. package/dist/barchart.events-XON2ANOC.js +0 -47
  365. package/dist/barchart.integration.spec-PJIENJGT.js +0 -1980
  366. package/dist/barchart.integration.spec-PJIENJGT.js.map +0 -7
  367. package/dist/barchart2-HIKBGSSE.js +0 -314
  368. package/dist/block-EGPYVWNP.js +0 -6226
  369. package/dist/block.init-IJBRPZNM.js +0 -38
  370. package/dist/block.mds.expressionrank-3DANCP7E.js +0 -359
  371. package/dist/block.mds.geneboxplot-CRGSCZMG.js +0 -828
  372. package/dist/block.mds.junction-4UIH2ZYN.js +0 -1545
  373. package/dist/block.mds.svcnv-NF4UIRR2.js +0 -6801
  374. package/dist/block.svg-AIZ47JCQ.js +0 -164
  375. package/dist/block.tk.aicheck-7HZFGE63.js +0 -283
  376. package/dist/block.tk.ase-U3VNPZEA.js +0 -365
  377. package/dist/block.tk.bam-4TQ7P2OX.js +0 -1906
  378. package/dist/block.tk.bedgraphdot-MYHKKO6K.js +0 -384
  379. package/dist/block.tk.bigwig.ui-E3YVGIDN.js +0 -212
  380. package/dist/block.tk.hicstraw-Y4XOMG7T.js +0 -823
  381. package/dist/block.tk.junction-T5C7LK6F.js +0 -2364
  382. package/dist/block.tk.junction.textmatrixui-Z3ACCVXH.js +0 -199
  383. package/dist/block.tk.ld-Y5KDA5AU.js +0 -99
  384. package/dist/block.tk.menu-EWRRISDY.js +0 -1029
  385. package/dist/block.tk.pgv-3JYGOZVQ.js +0 -944
  386. package/dist/brainImaging-P3AF3C5N.js +0 -423
  387. package/dist/brainRegions-YA2H2QOI.js +0 -221
  388. package/dist/chunk-2JR7RPB6.js +0 -1825
  389. package/dist/chunk-2U2CP2Y2.js +0 -317
  390. package/dist/chunk-2U2CP2Y2.js.map +0 -7
  391. package/dist/chunk-3BBK6A4X.js +0 -176
  392. package/dist/chunk-3FVIDQOX.js +0 -54
  393. package/dist/chunk-3K2O2NIH.js +0 -446
  394. package/dist/chunk-3RSJU6YM.js +0 -2681
  395. package/dist/chunk-3ZKD6C5S.js +0 -34
  396. package/dist/chunk-46AEH34Z.js +0 -95
  397. package/dist/chunk-4CQVC6XL.js +0 -182
  398. package/dist/chunk-5FXNI724.js +0 -216
  399. package/dist/chunk-6JHIX4RA.js +0 -4269
  400. package/dist/chunk-7PFRBGMN.js +0 -129
  401. package/dist/chunk-7R63MAPC.js +0 -448
  402. package/dist/chunk-A4Z3CI24.js +0 -276
  403. package/dist/chunk-AI2LUQS6.js +0 -119
  404. package/dist/chunk-AJYJW4LX.js +0 -6364
  405. package/dist/chunk-BMS32SNA.js +0 -37
  406. package/dist/chunk-C4BCMAIK.js +0 -188
  407. package/dist/chunk-C4BCMAIK.js.map +0 -7
  408. package/dist/chunk-CJPGYPI3.js +0 -291
  409. package/dist/chunk-CTQH7LQ6.js +0 -31
  410. package/dist/chunk-D5CVYITI.js +0 -203
  411. package/dist/chunk-DMSX5PSO.js +0 -477
  412. package/dist/chunk-E3JRW3T3.js +0 -1102
  413. package/dist/chunk-E574SMCX.js +0 -283
  414. package/dist/chunk-E76O5Z42.js +0 -98
  415. package/dist/chunk-EEW443GL.js +0 -14
  416. package/dist/chunk-EVNMW7BS.js +0 -833
  417. package/dist/chunk-F2WPS7VY.js +0 -1943
  418. package/dist/chunk-FDPWWODM.js +0 -2832
  419. package/dist/chunk-FDPWWODM.js.map +0 -7
  420. package/dist/chunk-FVHUROIJ.js +0 -446
  421. package/dist/chunk-FVHUROIJ.js.map +0 -7
  422. package/dist/chunk-FYFX42YD.js +0 -222
  423. package/dist/chunk-G6RZYGWY.js +0 -386
  424. package/dist/chunk-GTZV2UZV.js +0 -736
  425. package/dist/chunk-H34LAFGH.js +0 -142
  426. package/dist/chunk-I2R5O2XX.js +0 -263
  427. package/dist/chunk-IEYDMN3H.js +0 -26
  428. package/dist/chunk-JWBP4ZZB.js +0 -148
  429. package/dist/chunk-KUZPTJJO.js +0 -20874
  430. package/dist/chunk-KUZPTJJO.js.map +0 -7
  431. package/dist/chunk-KVIH5JPC.js +0 -1275
  432. package/dist/chunk-L5HCOTRF.js +0 -302
  433. package/dist/chunk-LHKDLWG5.js +0 -194
  434. package/dist/chunk-M7UKOCJA.js +0 -234
  435. package/dist/chunk-MHFH66I3.js +0 -1289
  436. package/dist/chunk-MP3DN6JK.js +0 -117
  437. package/dist/chunk-N5OVBS5L.js +0 -2786
  438. package/dist/chunk-NEKAGDTL.js +0 -58
  439. package/dist/chunk-NPCNDM6Y.js +0 -54
  440. package/dist/chunk-NYN2WQN3.js +0 -100
  441. package/dist/chunk-O6WL7USJ.js +0 -343
  442. package/dist/chunk-OH5I6I2D.js +0 -368
  443. package/dist/chunk-PDFCQ7AU.js +0 -5054
  444. package/dist/chunk-PDFCQ7AU.js.map +0 -7
  445. package/dist/chunk-PSJVMAWA.js +0 -294
  446. package/dist/chunk-PSJVMAWA.js.map +0 -7
  447. package/dist/chunk-PTQ774XH.js +0 -514
  448. package/dist/chunk-PXOH4ZN2.js +0 -399
  449. package/dist/chunk-QG4BJUM7.js +0 -102
  450. package/dist/chunk-R7AV73BV.js +0 -617
  451. package/dist/chunk-RITTG5WN.js +0 -158
  452. package/dist/chunk-SMSFTTEO.js +0 -272
  453. package/dist/chunk-TBZKVKR4.js +0 -50
  454. package/dist/chunk-TLTS33EY.js +0 -287
  455. package/dist/chunk-TMM7BWW7.js +0 -381
  456. package/dist/chunk-TTC4MNEM.js +0 -2327
  457. package/dist/chunk-UQ5CDHYF.js +0 -1218
  458. package/dist/chunk-UQ5CDHYF.js.map +0 -7
  459. package/dist/chunk-UXIZYI3X.js +0 -226
  460. package/dist/chunk-UXIZYI3X.js.map +0 -7
  461. package/dist/chunk-VIUATDO2.js +0 -170
  462. package/dist/chunk-VIUDFDN4.js +0 -102
  463. package/dist/chunk-W5OEFZCR.js +0 -254
  464. package/dist/chunk-WXSRK3XR.js +0 -534
  465. package/dist/chunk-XHGMDBTS.js +0 -230
  466. package/dist/chunk-XQ2OBL6R.js +0 -1205
  467. package/dist/chunk-XQ2OBL6R.js.map +0 -7
  468. package/dist/chunk-XVGS3QXS.js +0 -55
  469. package/dist/chunk-XYNYQMLH.js +0 -482
  470. package/dist/chunk-Y4JJMUWG.js +0 -217
  471. package/dist/chunk-Z457XQSX.js +0 -815
  472. package/dist/chunk-ZF6HNVYD.js +0 -1444
  473. package/dist/condition-QXTOTGZX.js +0 -332
  474. package/dist/controls-7TDB75LK.js +0 -41
  475. package/dist/controls.config-IBF5ILFP.js +0 -39
  476. package/dist/correlation-M2T5R7CM.js +0 -102
  477. package/dist/cuminc-CAHPKW7W.js +0 -1149
  478. package/dist/cuminc.integration.spec-NNSQGBRI.js +0 -678
  479. package/dist/customdata.inputui-RRTQK7OK.js +0 -289
  480. package/dist/dataDownload-SOUCBKXM.js +0 -330
  481. package/dist/dataDownload.integration.spec-C6TLWSSO.js +0 -193
  482. package/dist/databrowser.ui-KLFEU5QA.js +0 -433
  483. package/dist/dictionary-RUT5VXDD.js +0 -118
  484. package/dist/dnaMethylation-WOKGG33W.js +0 -38
  485. package/dist/dnaMethylation.integration.spec-YUPP42UK.js +0 -203
  486. package/dist/dofetch-V7PLLWSO.js +0 -51
  487. package/dist/e2pca-VT7EM4E3.js +0 -350
  488. package/dist/ep-X6B43UXE.js +0 -1256
  489. package/dist/expclust.gdc.spec-DTBFOXBC.js +0 -307
  490. package/dist/facet-T5ZX7ZGV.js +0 -521
  491. package/dist/forms2-S5OGBFKL.js +0 -539
  492. package/dist/gb-TWXREZIP.js +0 -88
  493. package/dist/geneExpClustering-2G6YDCIN.js +0 -249
  494. package/dist/geneExpression-2A4ZPT7K.js +0 -38
  495. package/dist/geneExpression-ZHQH6SNA.js +0 -313
  496. package/dist/geneExpression.unit.spec-2M223S4P.js +0 -102
  497. package/dist/geneORA-YLIRUMCZ.js +0 -278
  498. package/dist/geneRanking-JDJXNGEC.js +0 -551
  499. package/dist/geneVariant-5ZIOT5BT.js +0 -39
  500. package/dist/geneVariant-GIXIMJ2I.js +0 -41
  501. package/dist/geneVariant.integration.spec-QCROW73S.js +0 -198
  502. package/dist/genefusion.ui-56UQLUKJ.js +0 -309
  503. package/dist/geneset-ACRMGBJO.js +0 -208
  504. package/dist/genomeBrowser.spec-EDILOQON.js +0 -281
  505. package/dist/grin2-5P7CYUT7.js +0 -1560
  506. package/dist/grin2-5P7CYUT7.js.map +0 -7
  507. package/dist/grin2-GNB35CMF.js +0 -871
  508. package/dist/grin2-GNB35CMF.js.map +0 -7
  509. package/dist/gsea-2PQ5HNNT.js +0 -47
  510. package/dist/hierCluster-H5HB7FPW.js +0 -63
  511. package/dist/hierCluster-L3LCP2II.js +0 -59
  512. package/dist/hierCluster.config-6UIJWCND.js +0 -40
  513. package/dist/hierCluster.integration.spec-EVAPT2VF.js +0 -395
  514. package/dist/hierCluster.interactivity-7MW6ZT6O.js +0 -54
  515. package/dist/hierCluster.renderers-F34EVY5J.js +0 -21
  516. package/dist/imagePlot-RSFZ2OKD.js +0 -163
  517. package/dist/importPlot-DQFWY5A7.js +0 -8
  518. package/dist/isoformExpression-2KANPCBH.js +0 -40
  519. package/dist/isoformExpression.unit.spec-6FSMHT4K.js +0 -208
  520. package/dist/launch.adhoc-ZYTIRVIC.js +0 -42
  521. package/dist/leftlabel.sample-66U6MHPN.js +0 -260
  522. package/dist/leftlabel.sample-66U6MHPN.js.map +0 -7
  523. package/dist/lollipop-PJDUFWEY.js +0 -171
  524. package/dist/maf-DLJHCKHJ.js +0 -452
  525. package/dist/maftimeline-NK5QYJMJ.js +0 -593
  526. package/dist/matrix-7BFYR6QL.js +0 -63
  527. package/dist/matrix-USAB2CHO.js +0 -58
  528. package/dist/matrix.cells-OTAXAJ4N.js +0 -28
  529. package/dist/matrix.config-AL4WSFZ7.js +0 -41
  530. package/dist/matrix.data-BDHCSN2G.js +0 -25
  531. package/dist/matrix.groups-MV2D2636.js +0 -27
  532. package/dist/matrix.integration.spec-DESORC2Y.js +0 -3072
  533. package/dist/matrix.interactivity-H7EJW3P2.js +0 -42
  534. package/dist/matrix.layout-7CAS2IBO.js +0 -44
  535. package/dist/matrix.legend-JDVG2JDF.js +0 -22
  536. package/dist/matrix.renderers-PDR5FIBC.js +0 -38
  537. package/dist/matrix.serieses-QVDS5HKK.js +0 -21
  538. package/dist/matrix.sort-HCK4CSTJ.js +0 -27
  539. package/dist/matrix.sort.unit.spec-2GC4E26N.js +0 -472
  540. package/dist/matrix.sorterUi-XGBQOPG4.js +0 -18
  541. package/dist/matrix.sorterUi.unit.spec-BJQKDU2F.js +0 -342
  542. package/dist/mavb-6E6Z4LPK.js +0 -732
  543. package/dist/mds.fimo-5P2TK5U4.js +0 -518
  544. package/dist/mds.samplescatterplot-KLKOD4AS.js +0 -1550
  545. package/dist/mds.survivalplot-SWQCOFIU.js +0 -483
  546. package/dist/numericDictTermCluster-WIVO33AV.js +0 -72
  547. package/dist/oncomatrix-SDUUQZCK.js +0 -295
  548. package/dist/oncomatrix.spec-YGQYIUDT.js +0 -448
  549. package/dist/plot.2dvaf-K53KTP5W.js +0 -377
  550. package/dist/plot.app-FNJVWLPQ.js +0 -41
  551. package/dist/plot.barplot-VTC3N6BR.js +0 -102
  552. package/dist/plot.boxplot-RJFGQSLA.js +0 -152
  553. package/dist/plot.brainImaging-6KVNPPMT.js +0 -51
  554. package/dist/plot.disco-ZFH5RK6B.js +0 -102
  555. package/dist/plot.dzi-IA2SOFUD.js +0 -33
  556. package/dist/plot.ssgq-QARGQVKB.js +0 -139
  557. package/dist/plot.vaf2cov-2JUXYCPG.js +0 -259
  558. package/dist/plot.wsi-C2DULA7U.js +0 -36
  559. package/dist/polar2-3HS3QBU6.js +0 -231
  560. package/dist/profileForms-Y6ZBMZWQ.js +0 -446
  561. package/dist/profilePlot-SVI3QKMD.js +0 -54
  562. package/dist/proteinView-YPFJSBL7.js +0 -1556
  563. package/dist/qualitative-AQFKAZID.js +0 -43
  564. package/dist/radar2-TTQZLARY.js +0 -326
  565. package/dist/radarFacility2-YGS56QUA.js +0 -334
  566. package/dist/regression-DLPBCDZT.js +0 -56
  567. package/dist/regression.inputs-42LY4MEZ.js +0 -48
  568. package/dist/regression.inputs.term-TTUFFPG6.js +0 -48
  569. package/dist/regression.inputs.values.table-CJAPTSMS.js +0 -45
  570. package/dist/regression.integration.spec-UDA26OGS.js +0 -784
  571. package/dist/regression.results-IA3C7SHR.js +0 -40
  572. package/dist/regression.spec-HEXCL3QV.js +0 -708
  573. package/dist/report-4CFOWNPJ.js +0 -222
  574. package/dist/sampleScatter.spec-N6V4BQ5Q.js +0 -202
  575. package/dist/sampleView-CZF7U23I.js +0 -48
  576. package/dist/samplelst-XUGDS5TU.js +0 -111
  577. package/dist/samplematrix-R5PZLZDE.js +0 -2198
  578. package/dist/sc-WTZZA5J5.js +0 -86
  579. package/dist/scatter-EY7HQVCO.js +0 -851
  580. package/dist/scatter.integration.spec-CRMLFO4J.js +0 -1206
  581. package/dist/selectGenomeWithTklst-2S2MXVCI.js +0 -134
  582. package/dist/singleCellCellType-LJWFG7MY.js +0 -38
  583. package/dist/singleCellCellType.unit.spec-RGN2XVUR.js +0 -160
  584. package/dist/singleCellGeneExpression-IW2QXTTU.js +0 -38
  585. package/dist/singleCellGeneExpression.unit.spec-4PO3Q7TM.js +0 -153
  586. package/dist/singleCellPlot-6EZ6JXCM.js +0 -54
  587. package/dist/singlecell-3LFPQ6KO.js +0 -86
  588. package/dist/singlecell-NTTAVVMR.js +0 -1572
  589. package/dist/snp-XB4IBG4Z.js +0 -38
  590. package/dist/snp.unit.spec-HAJPM53L.js +0 -176
  591. package/dist/snplocus-HE6TITSX.js +0 -208
  592. package/dist/spliceevent.a53ss.diagram-TCZMBMD7.js +0 -151
  593. package/dist/spliceevent.exonskip.diagram-VESOF6UC.js +0 -277
  594. package/dist/spliceevent.noeventdiagram-4K7FMO4F.js +0 -460
  595. package/dist/ssGSEA-2XYMX36P.js +0 -38
  596. package/dist/ssGSEA.unit.spec-J36KM2HO.js +0 -88
  597. package/dist/summarizeCnvGeneexp-LYVDZXXD.js +0 -163
  598. package/dist/summarizeGeneexpSurvival-Y52TGAHF.js +0 -108
  599. package/dist/summarizeMutationCnv-6EEJT3PV.js +0 -164
  600. package/dist/summarizeMutationDiagnosis-HZKXHOOQ.js +0 -40
  601. package/dist/summarizeMutationSurvival-TU7TQYFQ.js +0 -99
  602. package/dist/summary-4QQZUAMU.js +0 -49
  603. package/dist/summary.integration.spec-SLIIM4HN.js +0 -414
  604. package/dist/summaryInput-6HROPKCE.js +0 -235
  605. package/dist/sunburst-MBJJPERL.js +0 -284
  606. package/dist/survival-CXLMQSV2.js +0 -58
  607. package/dist/survival-QSL2KDKD.js +0 -46
  608. package/dist/survival.integration.spec-EUAAALVW.js +0 -821
  609. package/dist/survival.integration.spec-EUAAALVW.js.map +0 -7
  610. package/dist/svgraph-JM5MHQDX.js +0 -1387
  611. package/dist/svmr-MCMST2FL.js +0 -3842
  612. package/dist/table-MVX3IMAL.js +0 -200
  613. package/dist/termCollection-FZ2SCVA7.js +0 -38
  614. package/dist/termCollection-IGC7REFK.js +0 -179
  615. package/dist/termCollection.unit.spec-VY2EZZIP.js +0 -208
  616. package/dist/tk-5F3TWZ2G.js +0 -46
  617. package/dist/tp.ui-IURWTMAS.js +0 -1459
  618. package/dist/tvs.dt-BPZCFPYK.js +0 -39
  619. package/dist/tvs.dtcnv.categorical-UFS62DTR.js +0 -40
  620. package/dist/tvs.dtcnv.continuous-R6YXNNLA.js +0 -72
  621. package/dist/tvs.dtfusion-FGXXS4XX.js +0 -40
  622. package/dist/tvs.dtsnvindel-DR43K7X3.js +0 -40
  623. package/dist/tvs.dtsv-NO34GIOL.js +0 -40
  624. package/dist/tvs.samplelst-2QP7IV2Y.js +0 -104
  625. package/dist/tvs.termCollection-UEJDG22G.js +0 -159
  626. package/dist/violin-NBZTGGYF.js +0 -46
  627. package/dist/violin.integration.spec-5CLYJSAR.js +0 -1425
  628. package/dist/violin.interactivity-KXVKTT22.js +0 -38
  629. package/dist/violin.renderer-37OF6K7Q.js +0 -40
  630. package/dist/vocabulary-GR6J3VKW.js +0 -41
  631. /package/dist/{2dmaf-BNMEUJVM.js.map → 2dmaf-HS37GJYM.js.map} +0 -0
  632. /package/dist/{AIProjectAdmin-AEXQY5LY.js.map → AIProjectAdmin-V5NVBBOA.js.map} +0 -0
  633. /package/dist/{AppHeader-RXDJBHXZ.js.map → AppHeader-VIQ2VZPI.js.map} +0 -0
  634. /package/dist/{BoxPlot-HDP3SIGU.js.map → BoxPlot-J7DPHT2N.js.map} +0 -0
  635. /package/dist/{CorrelationVolcano-V2E566XL.js.map → CorrelationVolcano-ZHP7IPFD.js.map} +0 -0
  636. /package/dist/{DE-7YUZSW4E.js.map → DE-VW4MQHYP.js.map} +0 -0
  637. /package/dist/{DEinput-P2HOQC4Z.js.map → DEinput-2EKXGUP3.js.map} +0 -0
  638. /package/dist/{DifferentialAnalysis-2Z6BHS7A.js.map → DifferentialAnalysis-H7LZWEIL.js.map} +0 -0
  639. /package/dist/{Disco-ZLC54X7T.js.map → Disco-5AA67AO5.js.map} +0 -0
  640. /package/dist/{Disco.UI-LXJJYQVV.js.map → Disco.UI-K4RBVRJP.js.map} +0 -0
  641. /package/dist/{DmrPlot-OEJRGNI3.js.map → DmrPlot-RVJUKBOB.js.map} +0 -0
  642. /package/dist/{GeneExpInput-PWLPDLYT.js.map → GeneExpInput-HHOIK6X7.js.map} +0 -0
  643. /package/dist/{HicApp-CAYC4DPO.js.map → HicApp-YTQNK5DC.js.map} +0 -0
  644. /package/dist/{NumBinaryEditor-EUOYSGPM.js.map → NumBinaryEditor-ICZCNBRL.js.map} +0 -0
  645. /package/dist/{NumBinaryEditor.unit.spec-5B3W4B4F.js.map → NumBinaryEditor.unit.spec-WDJPDAVT.js.map} +0 -0
  646. /package/dist/{NumContEditor-7KK6CIB3.js.map → NumContEditor-5KEM54CE.js.map} +0 -0
  647. /package/dist/{NumContEditor.unit.spec-IMKGVYFZ.js.map → NumContEditor.unit.spec-WG5QKOD3.js.map} +0 -0
  648. /package/dist/{NumCustomBinEditor-PDAF6I7B.js.map → NumCustomBinEditor-MGHR7VQT.js.map} +0 -0
  649. /package/dist/{NumCustomBinEditor.unit.spec-IU3DPECJ.js.map → NumCustomBinEditor.unit.spec-JWSHEIJJ.js.map} +0 -0
  650. /package/dist/{NumDiscreteEditor-YTKUHG6Z.js.map → NumDiscreteEditor-XT2GSGUR.js.map} +0 -0
  651. /package/dist/{NumDiscreteEditor.unit.spec-FUBS7Z7Z.js.map → NumDiscreteEditor.unit.spec-DSCWGYBS.js.map} +0 -0
  652. /package/dist/{NumRegularBinEditor-LU3KLBLY.js.map → NumRegularBinEditor-JMDBM5PU.js.map} +0 -0
  653. /package/dist/{NumRegularBinEditor.unit.spec-2BKOHI7L.js.map → NumRegularBinEditor.unit.spec-BWRP6OO2.js.map} +0 -0
  654. /package/dist/{NumSplineEditor-56RJ2HT2.js.map → NumSplineEditor-QJNRSORC.js.map} +0 -0
  655. /package/dist/{NumSplineEditor.unit.spec-PW6VUUBZ.js.map → NumSplineEditor.unit.spec-CXBTVND4.js.map} +0 -0
  656. /package/dist/{NumericDensity-EB4H54EF.js.map → NumericDensity-XQWCBSGT.js.map} +0 -0
  657. /package/dist/{NumericDensity.unit.spec-LSEM4OEY.js.map → NumericDensity.unit.spec-7JS5R3AZ.js.map} +0 -0
  658. /package/dist/{NumericHandler-VGPDXP35.js.map → NumericHandler-QXXBEJC3.js.map} +0 -0
  659. /package/dist/{NumericHandler.unit.spec-NR3F7XHV.js.map → NumericHandler.unit.spec-SRQJQVPP.js.map} +0 -0
  660. /package/dist/{ProteomeInput-AUXWUIWK.js.map → ProteomeInput-E4MJLAKF.js.map} +0 -0
  661. /package/dist/{RunChart2-SQ6TFOHD.js.map → RunChart2-N6S7HBXV.js.map} +0 -0
  662. /package/dist/{Volcano-XHDH6UN7.js.map → Volcano-OHJPYZQE.js.map} +0 -0
  663. /package/dist/{WSIViewer-WT2QV747.js.map → WSIViewer-SAKVU52Z.js.map} +0 -0
  664. /package/dist/{WsiSamplesPlot-YUOAWG2A.js.map → WsiSamplesPlot-QV5GFFCR.js.map} +0 -0
  665. /package/dist/{adSandbox-VMMAL22L.js.map → adSandbox-IE7TOJUE.js.map} +0 -0
  666. /package/dist/{animatedBubbleChart-Q6Z5W2UL.js.map → animatedBubbleChart-ZNEDQND3.js.map} +0 -0
  667. /package/dist/{app-FX3KZ67X.js.map → app-7MRKEE2J.js.map} +0 -0
  668. /package/dist/{app-X7ZYEOZN.js.map → app-QIBNB4AA.js.map} +0 -0
  669. /package/dist/{bam-ZYLH4U5R.js.map → bam-OBS5ULFF.js.map} +0 -0
  670. /package/dist/{barchart-MXSPTKV4.js.map → barchart-2RVEEMPK.js.map} +0 -0
  671. /package/dist/{barchart.data-ZWF6EVJH.js.map → barchart.data-7OI5GZZ6.js.map} +0 -0
  672. /package/dist/{barchart.events-XON2ANOC.js.map → barchart.events-AASSQL3J.js.map} +0 -0
  673. /package/dist/{barchart2-HIKBGSSE.js.map → barchart2-TUBYGLMC.js.map} +0 -0
  674. /package/dist/{block-EGPYVWNP.js.map → block-BYXWS7H7.js.map} +0 -0
  675. /package/dist/{block.init-IJBRPZNM.js.map → block.init-QOAPDKCC.js.map} +0 -0
  676. /package/dist/{block.mds.expressionrank-3DANCP7E.js.map → block.mds.expressionrank-Q46AAYOA.js.map} +0 -0
  677. /package/dist/{block.mds.geneboxplot-CRGSCZMG.js.map → block.mds.geneboxplot-IC26RT7L.js.map} +0 -0
  678. /package/dist/{block.mds.junction-4UIH2ZYN.js.map → block.mds.junction-RIUZIBFB.js.map} +0 -0
  679. /package/dist/{block.mds.svcnv-NF4UIRR2.js.map → block.mds.svcnv-GUB2TTXQ.js.map} +0 -0
  680. /package/dist/{block.svg-AIZ47JCQ.js.map → block.svg-I4NHMOEJ.js.map} +0 -0
  681. /package/dist/{block.tk.aicheck-7HZFGE63.js.map → block.tk.aicheck-X57EGAOB.js.map} +0 -0
  682. /package/dist/{block.tk.ase-U3VNPZEA.js.map → block.tk.ase-JMBKBZAH.js.map} +0 -0
  683. /package/dist/{block.tk.bam-4TQ7P2OX.js.map → block.tk.bam-6UAEWVVD.js.map} +0 -0
  684. /package/dist/{block.tk.bedgraphdot-MYHKKO6K.js.map → block.tk.bedgraphdot-7QSRLAJ7.js.map} +0 -0
  685. /package/dist/{block.tk.bigwig.ui-E3YVGIDN.js.map → block.tk.bigwig.ui-SBD6S5SA.js.map} +0 -0
  686. /package/dist/{block.tk.hicstraw-Y4XOMG7T.js.map → block.tk.hicstraw-LIGPTMX7.js.map} +0 -0
  687. /package/dist/{block.tk.junction-T5C7LK6F.js.map → block.tk.junction-X6HFXKW7.js.map} +0 -0
  688. /package/dist/{block.tk.junction.textmatrixui-Z3ACCVXH.js.map → block.tk.junction.textmatrixui-XJIUGHAX.js.map} +0 -0
  689. /package/dist/{block.tk.ld-Y5KDA5AU.js.map → block.tk.ld-OZVW7LSL.js.map} +0 -0
  690. /package/dist/{block.tk.menu-EWRRISDY.js.map → block.tk.menu-B2CEZAYR.js.map} +0 -0
  691. /package/dist/{block.tk.pgv-3JYGOZVQ.js.map → block.tk.pgv-XAAQBQQE.js.map} +0 -0
  692. /package/dist/{brainImaging-P3AF3C5N.js.map → brainImaging-KFKM3XWD.js.map} +0 -0
  693. /package/dist/{brainRegions-YA2H2QOI.js.map → brainRegions-ZHKXILK7.js.map} +0 -0
  694. /package/dist/{chunk-R7AV73BV.js.map → chunk-2IITC4V5.js.map} +0 -0
  695. /package/dist/{chunk-TTC4MNEM.js.map → chunk-2P3U6XTF.js.map} +0 -0
  696. /package/dist/{chunk-NPCNDM6Y.js.map → chunk-35UCHCOQ.js.map} +0 -0
  697. /package/dist/{chunk-NEKAGDTL.js.map → chunk-3LYZMOLO.js.map} +0 -0
  698. /package/dist/{chunk-E76O5Z42.js.map → chunk-4E6HJ4ZW.js.map} +0 -0
  699. /package/dist/{chunk-7PFRBGMN.js.map → chunk-57LW6RUM.js.map} +0 -0
  700. /package/dist/{chunk-TMM7BWW7.js.map → chunk-5CR24RTX.js.map} +0 -0
  701. /package/dist/{chunk-5FXNI724.js.map → chunk-5DHRDF2Y.js.map} +0 -0
  702. /package/dist/{chunk-MP3DN6JK.js.map → chunk-5POMWXDZ.js.map} +0 -0
  703. /package/dist/{chunk-IEYDMN3H.js.map → chunk-5QTJUPFS.js.map} +0 -0
  704. /package/dist/{chunk-W5OEFZCR.js.map → chunk-5X5LI5YM.js.map} +0 -0
  705. /package/dist/{chunk-JWBP4ZZB.js.map → chunk-67QZRGIJ.js.map} +0 -0
  706. /package/dist/{chunk-2JR7RPB6.js.map → chunk-6G4YOMWW.js.map} +0 -0
  707. /package/dist/{chunk-EEW443GL.js.map → chunk-6RKL2FLA.js.map} +0 -0
  708. /package/dist/{chunk-3RSJU6YM.js.map → chunk-6YJCBK4J.js.map} +0 -0
  709. /package/dist/{chunk-ZF6HNVYD.js.map → chunk-7KRS7L4U.js.map} +0 -0
  710. /package/dist/{chunk-PXOH4ZN2.js.map → chunk-ADAKSWID.js.map} +0 -0
  711. /package/dist/{chunk-3ZKD6C5S.js.map → chunk-ANKGIHCM.js.map} +0 -0
  712. /package/dist/{chunk-O6WL7USJ.js.map → chunk-AUP7W7MK.js.map} +0 -0
  713. /package/dist/{chunk-FYFX42YD.js.map → chunk-B4QM73WG.js.map} +0 -0
  714. /package/dist/{chunk-Y4JJMUWG.js.map → chunk-C6YT5EM2.js.map} +0 -0
  715. /package/dist/{chunk-F2WPS7VY.js.map → chunk-CD3VY5WW.js.map} +0 -0
  716. /package/dist/{chunk-WXSRK3XR.js.map → chunk-CDUNE45Q.js.map} +0 -0
  717. /package/dist/{chunk-AI2LUQS6.js.map → chunk-COYULNJF.js.map} +0 -0
  718. /package/dist/{chunk-VIUATDO2.js.map → chunk-DNVSEW6P.js.map} +0 -0
  719. /package/dist/{chunk-3K2O2NIH.js.map → chunk-EC3SKPQT.js.map} +0 -0
  720. /package/dist/{chunk-46AEH34Z.js.map → chunk-F47X3VUC.js.map} +0 -0
  721. /package/dist/{chunk-BMS32SNA.js.map → chunk-G2DLWJCB.js.map} +0 -0
  722. /package/dist/{chunk-L5HCOTRF.js.map → chunk-I4G4FXLO.js.map} +0 -0
  723. /package/dist/{chunk-TLTS33EY.js.map → chunk-I73KUUYG.js.map} +0 -0
  724. /package/dist/{chunk-XHGMDBTS.js.map → chunk-INU357UG.js.map} +0 -0
  725. /package/dist/{chunk-EVNMW7BS.js.map → chunk-IZ3BPOTQ.js.map} +0 -0
  726. /package/dist/{chunk-XVGS3QXS.js.map → chunk-JBI6P3UX.js.map} +0 -0
  727. /package/dist/{chunk-M7UKOCJA.js.map → chunk-JRDHTECQ.js.map} +0 -0
  728. /package/dist/{chunk-QG4BJUM7.js.map → chunk-JRZZ6GN3.js.map} +0 -0
  729. /package/dist/{chunk-Z457XQSX.js.map → chunk-KM4JBR26.js.map} +0 -0
  730. /package/dist/{chunk-RITTG5WN.js.map → chunk-KXRTPE65.js.map} +0 -0
  731. /package/dist/{chunk-CTQH7LQ6.js.map → chunk-LSWU6EAQ.js.map} +0 -0
  732. /package/dist/{chunk-LHKDLWG5.js.map → chunk-N6QEVQZV.js.map} +0 -0
  733. /package/dist/{chunk-A4Z3CI24.js.map → chunk-NLQQIVTC.js.map} +0 -0
  734. /package/dist/{chunk-KVIH5JPC.js.map → chunk-O4VKIC66.js.map} +0 -0
  735. /package/dist/{chunk-I2R5O2XX.js.map → chunk-OWPBE2LB.js.map} +0 -0
  736. /package/dist/{chunk-4CQVC6XL.js.map → chunk-PWUERAAF.js.map} +0 -0
  737. /package/dist/{chunk-3BBK6A4X.js.map → chunk-QFSSC5VW.js.map} +0 -0
  738. /package/dist/{chunk-E574SMCX.js.map → chunk-T46LHXJW.js.map} +0 -0
  739. /package/dist/{chunk-NYN2WQN3.js.map → chunk-T4CFXTIG.js.map} +0 -0
  740. /package/dist/{chunk-VIUDFDN4.js.map → chunk-T5UGVJCK.js.map} +0 -0
  741. /package/dist/{chunk-7R63MAPC.js.map → chunk-TJCRAFKM.js.map} +0 -0
  742. /package/dist/{chunk-H34LAFGH.js.map → chunk-TNF2LHJR.js.map} +0 -0
  743. /package/dist/{chunk-AJYJW4LX.js.map → chunk-U4IYNHVD.js.map} +0 -0
  744. /package/dist/{chunk-XYNYQMLH.js.map → chunk-UAOPKEMR.js.map} +0 -0
  745. /package/dist/{chunk-GTZV2UZV.js.map → chunk-UFGV7554.js.map} +0 -0
  746. /package/dist/{chunk-CJPGYPI3.js.map → chunk-UV66X5JN.js.map} +0 -0
  747. /package/dist/{chunk-3FVIDQOX.js.map → chunk-VC642GDC.js.map} +0 -0
  748. /package/dist/{chunk-G6RZYGWY.js.map → chunk-VDIVDU3T.js.map} +0 -0
  749. /package/dist/{chunk-MHFH66I3.js.map → chunk-VNF7DC36.js.map} +0 -0
  750. /package/dist/{chunk-DMSX5PSO.js.map → chunk-VOGPIAQL.js.map} +0 -0
  751. /package/dist/{chunk-SMSFTTEO.js.map → chunk-VZOTKHPM.js.map} +0 -0
  752. /package/dist/{chunk-6JHIX4RA.js.map → chunk-YAU2Z6EN.js.map} +0 -0
  753. /package/dist/{chunk-OH5I6I2D.js.map → chunk-YNAPHPMG.js.map} +0 -0
  754. /package/dist/{chunk-PTQ774XH.js.map → chunk-YP2LHXFC.js.map} +0 -0
  755. /package/dist/{chunk-TBZKVKR4.js.map → chunk-YWF7GHUW.js.map} +0 -0
  756. /package/dist/{chunk-N5OVBS5L.js.map → chunk-YYZQMJLW.js.map} +0 -0
  757. /package/dist/{chunk-D5CVYITI.js.map → chunk-ZBEJVZMY.js.map} +0 -0
  758. /package/dist/{chunk-E3JRW3T3.js.map → chunk-ZZLBK6P6.js.map} +0 -0
  759. /package/dist/{condition-QXTOTGZX.js.map → condition-MP65K762.js.map} +0 -0
  760. /package/dist/{controls-7TDB75LK.js.map → controls-HKHMEWC7.js.map} +0 -0
  761. /package/dist/{controls.config-IBF5ILFP.js.map → controls.config-LUPIT34L.js.map} +0 -0
  762. /package/dist/{correlation-M2T5R7CM.js.map → correlation-5UTW6EEI.js.map} +0 -0
  763. /package/dist/{cuminc-CAHPKW7W.js.map → cuminc-LLUR2FLL.js.map} +0 -0
  764. /package/dist/{cuminc.integration.spec-NNSQGBRI.js.map → cuminc.integration.spec-CH5UZTIM.js.map} +0 -0
  765. /package/dist/{customdata.inputui-RRTQK7OK.js.map → customdata.inputui-6IGE5HCZ.js.map} +0 -0
  766. /package/dist/{dataDownload-SOUCBKXM.js.map → dataDownload-MCE2OJGZ.js.map} +0 -0
  767. /package/dist/{dataDownload.integration.spec-C6TLWSSO.js.map → dataDownload.integration.spec-VETU75VQ.js.map} +0 -0
  768. /package/dist/{databrowser.ui-KLFEU5QA.js.map → databrowser.ui-3BRSJHIW.js.map} +0 -0
  769. /package/dist/{dictionary-RUT5VXDD.js.map → dictionary-UV43XQAU.js.map} +0 -0
  770. /package/dist/{dnaMethylation-WOKGG33W.js.map → dnaMethylation-QDE3S4TV.js.map} +0 -0
  771. /package/dist/{dnaMethylation.integration.spec-YUPP42UK.js.map → dnaMethylation.integration.spec-JBHJE47S.js.map} +0 -0
  772. /package/dist/{dofetch-V7PLLWSO.js.map → dofetch-BMSZZAAQ.js.map} +0 -0
  773. /package/dist/{e2pca-VT7EM4E3.js.map → e2pca-JMH74VN4.js.map} +0 -0
  774. /package/dist/{ep-X6B43UXE.js.map → ep-NDT7C2IT.js.map} +0 -0
  775. /package/dist/{expclust.gdc.spec-DTBFOXBC.js.map → expclust.gdc.spec-GZ3XLPHA.js.map} +0 -0
  776. /package/dist/{facet-T5ZX7ZGV.js.map → facet-ABIWCCVT.js.map} +0 -0
  777. /package/dist/{forms2-S5OGBFKL.js.map → forms2-DRRRLG4I.js.map} +0 -0
  778. /package/dist/{gb-TWXREZIP.js.map → gb-EFZ62HCR.js.map} +0 -0
  779. /package/dist/{geneExpClustering-2G6YDCIN.js.map → geneExpClustering-CKH6M6KK.js.map} +0 -0
  780. /package/dist/{geneExpression-2A4ZPT7K.js.map → geneExpression-CNKX7XVX.js.map} +0 -0
  781. /package/dist/{geneExpression-ZHQH6SNA.js.map → geneExpression-P2ERCRXO.js.map} +0 -0
  782. /package/dist/{geneExpression.unit.spec-2M223S4P.js.map → geneExpression.unit.spec-7UJB43L3.js.map} +0 -0
  783. /package/dist/{geneORA-YLIRUMCZ.js.map → geneORA-TZOSNGRJ.js.map} +0 -0
  784. /package/dist/{geneRanking-JDJXNGEC.js.map → geneRanking-26GDRALC.js.map} +0 -0
  785. /package/dist/{geneVariant-5ZIOT5BT.js.map → geneVariant-2DHMJUJL.js.map} +0 -0
  786. /package/dist/{geneVariant-GIXIMJ2I.js.map → geneVariant-FOKRLND3.js.map} +0 -0
  787. /package/dist/{geneVariant.integration.spec-QCROW73S.js.map → geneVariant.integration.spec-XXNSWUOR.js.map} +0 -0
  788. /package/dist/{genefusion.ui-56UQLUKJ.js.map → genefusion.ui-ZJBKC2RH.js.map} +0 -0
  789. /package/dist/{geneset-ACRMGBJO.js.map → geneset-6FN5BFP3.js.map} +0 -0
  790. /package/dist/{genomeBrowser.spec-EDILOQON.js.map → genomeBrowser.spec-QLHJYDRZ.js.map} +0 -0
  791. /package/dist/{gsea-2PQ5HNNT.js.map → gsea-6YBRMGOC.js.map} +0 -0
  792. /package/dist/{hierCluster-H5HB7FPW.js.map → hierCluster-B3TULT27.js.map} +0 -0
  793. /package/dist/{hierCluster-L3LCP2II.js.map → hierCluster-NF75B7MZ.js.map} +0 -0
  794. /package/dist/{hierCluster.config-6UIJWCND.js.map → hierCluster.config-TEFI7M4K.js.map} +0 -0
  795. /package/dist/{hierCluster.integration.spec-EVAPT2VF.js.map → hierCluster.integration.spec-IUK6Q5SQ.js.map} +0 -0
  796. /package/dist/{hierCluster.interactivity-7MW6ZT6O.js.map → hierCluster.interactivity-MPD4AV4D.js.map} +0 -0
  797. /package/dist/{hierCluster.renderers-F34EVY5J.js.map → hierCluster.renderers-4XWKHCNW.js.map} +0 -0
  798. /package/dist/{imagePlot-RSFZ2OKD.js.map → imagePlot-HNJDBPO4.js.map} +0 -0
  799. /package/dist/{importPlot-DQFWY5A7.js.map → importPlot-OBS55TCA.js.map} +0 -0
  800. /package/dist/{isoformExpression-2KANPCBH.js.map → isoformExpression-K4QIYBZR.js.map} +0 -0
  801. /package/dist/{isoformExpression.unit.spec-6FSMHT4K.js.map → isoformExpression.unit.spec-INB6655U.js.map} +0 -0
  802. /package/dist/{launch.adhoc-ZYTIRVIC.js.map → launch.adhoc-VDXES33R.js.map} +0 -0
  803. /package/dist/{lollipop-PJDUFWEY.js.map → lollipop-O3XJC7BR.js.map} +0 -0
  804. /package/dist/{maf-DLJHCKHJ.js.map → maf-GLZ7KCDP.js.map} +0 -0
  805. /package/dist/{maftimeline-NK5QYJMJ.js.map → maftimeline-Q4YPFSZP.js.map} +0 -0
  806. /package/dist/{matrix-7BFYR6QL.js.map → matrix-KVTQNDRZ.js.map} +0 -0
  807. /package/dist/{matrix-USAB2CHO.js.map → matrix-QDHUX4QD.js.map} +0 -0
  808. /package/dist/{matrix.cells-OTAXAJ4N.js.map → matrix.cells-ED6RS5EC.js.map} +0 -0
  809. /package/dist/{matrix.config-AL4WSFZ7.js.map → matrix.config-B65UXJNA.js.map} +0 -0
  810. /package/dist/{matrix.data-BDHCSN2G.js.map → matrix.data-KQFMXWRX.js.map} +0 -0
  811. /package/dist/{matrix.groups-MV2D2636.js.map → matrix.groups-RE74EFLY.js.map} +0 -0
  812. /package/dist/{matrix.integration.spec-DESORC2Y.js.map → matrix.integration.spec-2ITZRE4N.js.map} +0 -0
  813. /package/dist/{matrix.interactivity-H7EJW3P2.js.map → matrix.interactivity-3RF4YOAP.js.map} +0 -0
  814. /package/dist/{matrix.layout-7CAS2IBO.js.map → matrix.layout-ERVRJAK2.js.map} +0 -0
  815. /package/dist/{matrix.legend-JDVG2JDF.js.map → matrix.legend-ZST44PIB.js.map} +0 -0
  816. /package/dist/{matrix.renderers-PDR5FIBC.js.map → matrix.renderers-HNEUKUGS.js.map} +0 -0
  817. /package/dist/{matrix.serieses-QVDS5HKK.js.map → matrix.serieses-6ZKTFVWY.js.map} +0 -0
  818. /package/dist/{matrix.sort-HCK4CSTJ.js.map → matrix.sort-2UE47IOC.js.map} +0 -0
  819. /package/dist/{matrix.sort.unit.spec-2GC4E26N.js.map → matrix.sort.unit.spec-QGEVGY7M.js.map} +0 -0
  820. /package/dist/{matrix.sorterUi-XGBQOPG4.js.map → matrix.sorterUi-WC2YX7S7.js.map} +0 -0
  821. /package/dist/{matrix.sorterUi.unit.spec-BJQKDU2F.js.map → matrix.sorterUi.unit.spec-YNS7IVUF.js.map} +0 -0
  822. /package/dist/{mavb-6E6Z4LPK.js.map → mavb-27VSL5LG.js.map} +0 -0
  823. /package/dist/{mds.fimo-5P2TK5U4.js.map → mds.fimo-E5EXGT75.js.map} +0 -0
  824. /package/dist/{mds.samplescatterplot-KLKOD4AS.js.map → mds.samplescatterplot-YDMRZFS7.js.map} +0 -0
  825. /package/dist/{mds.survivalplot-SWQCOFIU.js.map → mds.survivalplot-INJA2NDC.js.map} +0 -0
  826. /package/dist/{numericDictTermCluster-WIVO33AV.js.map → numericDictTermCluster-DRIEJJSP.js.map} +0 -0
  827. /package/dist/{oncomatrix-SDUUQZCK.js.map → oncomatrix-334LCTXB.js.map} +0 -0
  828. /package/dist/{oncomatrix.spec-YGQYIUDT.js.map → oncomatrix.spec-VHCJWO7S.js.map} +0 -0
  829. /package/dist/{plot.2dvaf-K53KTP5W.js.map → plot.2dvaf-F7GJEUMD.js.map} +0 -0
  830. /package/dist/{plot.app-FNJVWLPQ.js.map → plot.app-AKA7UVUC.js.map} +0 -0
  831. /package/dist/{plot.barplot-VTC3N6BR.js.map → plot.barplot-HZAG43A5.js.map} +0 -0
  832. /package/dist/{plot.boxplot-RJFGQSLA.js.map → plot.boxplot-U52BJ4EP.js.map} +0 -0
  833. /package/dist/{plot.brainImaging-6KVNPPMT.js.map → plot.brainImaging-3CB4WYQ4.js.map} +0 -0
  834. /package/dist/{plot.disco-ZFH5RK6B.js.map → plot.disco-I2VLOSAU.js.map} +0 -0
  835. /package/dist/{plot.dzi-IA2SOFUD.js.map → plot.dzi-K6KI52L7.js.map} +0 -0
  836. /package/dist/{plot.ssgq-QARGQVKB.js.map → plot.ssgq-L67X4FUG.js.map} +0 -0
  837. /package/dist/{plot.vaf2cov-2JUXYCPG.js.map → plot.vaf2cov-PH4ZSY2K.js.map} +0 -0
  838. /package/dist/{plot.wsi-C2DULA7U.js.map → plot.wsi-Y6FZWHXT.js.map} +0 -0
  839. /package/dist/{polar2-3HS3QBU6.js.map → polar2-XT5QZ4VH.js.map} +0 -0
  840. /package/dist/{profileForms-Y6ZBMZWQ.js.map → profileForms-4LLSYMF6.js.map} +0 -0
  841. /package/dist/{profilePlot-SVI3QKMD.js.map → profilePlot-C52DDMZ4.js.map} +0 -0
  842. /package/dist/{proteinView-YPFJSBL7.js.map → proteinView-CCL4MPXS.js.map} +0 -0
  843. /package/dist/{qualitative-AQFKAZID.js.map → qualitative-DZ6JYYRS.js.map} +0 -0
  844. /package/dist/{radar2-TTQZLARY.js.map → radar2-GEEOQF2A.js.map} +0 -0
  845. /package/dist/{radarFacility2-YGS56QUA.js.map → radarFacility2-OWXSKHBW.js.map} +0 -0
  846. /package/dist/{regression-DLPBCDZT.js.map → regression-ZK75B4OR.js.map} +0 -0
  847. /package/dist/{regression.inputs-42LY4MEZ.js.map → regression.inputs-UR7Q7HIK.js.map} +0 -0
  848. /package/dist/{regression.inputs.term-TTUFFPG6.js.map → regression.inputs.term-PJZ7T3AI.js.map} +0 -0
  849. /package/dist/{regression.inputs.values.table-CJAPTSMS.js.map → regression.inputs.values.table-CRGBKWMM.js.map} +0 -0
  850. /package/dist/{regression.integration.spec-UDA26OGS.js.map → regression.integration.spec-OCUFEVQS.js.map} +0 -0
  851. /package/dist/{regression.results-IA3C7SHR.js.map → regression.results-7EHMKQ5F.js.map} +0 -0
  852. /package/dist/{regression.spec-HEXCL3QV.js.map → regression.spec-E4W3WOLI.js.map} +0 -0
  853. /package/dist/{report-4CFOWNPJ.js.map → report-WWILHPI6.js.map} +0 -0
  854. /package/dist/{sampleScatter.spec-N6V4BQ5Q.js.map → sampleScatter.spec-VCKCJKII.js.map} +0 -0
  855. /package/dist/{sampleView-CZF7U23I.js.map → sampleView-STGP7UUP.js.map} +0 -0
  856. /package/dist/{samplelst-XUGDS5TU.js.map → samplelst-U4BL6GYP.js.map} +0 -0
  857. /package/dist/{samplematrix-R5PZLZDE.js.map → samplematrix-FU3EZF6M.js.map} +0 -0
  858. /package/dist/{sc-WTZZA5J5.js.map → sc-JRLELKHN.js.map} +0 -0
  859. /package/dist/{scatter-EY7HQVCO.js.map → scatter-GT2VKNFG.js.map} +0 -0
  860. /package/dist/{scatter.integration.spec-CRMLFO4J.js.map → scatter.integration.spec-VDMKRPVM.js.map} +0 -0
  861. /package/dist/{selectGenomeWithTklst-2S2MXVCI.js.map → selectGenomeWithTklst-F5372VC5.js.map} +0 -0
  862. /package/dist/{singleCellCellType-LJWFG7MY.js.map → singleCellCellType-D77PUUCZ.js.map} +0 -0
  863. /package/dist/{singleCellCellType.unit.spec-RGN2XVUR.js.map → singleCellCellType.unit.spec-J4EEZAWB.js.map} +0 -0
  864. /package/dist/{singleCellGeneExpression-IW2QXTTU.js.map → singleCellGeneExpression-WCWCSHIY.js.map} +0 -0
  865. /package/dist/{singleCellGeneExpression.unit.spec-4PO3Q7TM.js.map → singleCellGeneExpression.unit.spec-CELJIAJ5.js.map} +0 -0
  866. /package/dist/{singleCellPlot-6EZ6JXCM.js.map → singleCellPlot-2OPOJZ5U.js.map} +0 -0
  867. /package/dist/{singlecell-NTTAVVMR.js.map → singlecell-K2SHYDHA.js.map} +0 -0
  868. /package/dist/{singlecell-3LFPQ6KO.js.map → singlecell-K7Z6ES7B.js.map} +0 -0
  869. /package/dist/{snp-XB4IBG4Z.js.map → snp-ICWKGR7H.js.map} +0 -0
  870. /package/dist/{snp.unit.spec-HAJPM53L.js.map → snp.unit.spec-PV2UZCYO.js.map} +0 -0
  871. /package/dist/{snplocus-HE6TITSX.js.map → snplocus-W5D4A7QJ.js.map} +0 -0
  872. /package/dist/{spliceevent.a53ss.diagram-TCZMBMD7.js.map → spliceevent.a53ss.diagram-DEQJ2C2H.js.map} +0 -0
  873. /package/dist/{spliceevent.exonskip.diagram-VESOF6UC.js.map → spliceevent.exonskip.diagram-MKA32GTK.js.map} +0 -0
  874. /package/dist/{spliceevent.noeventdiagram-4K7FMO4F.js.map → spliceevent.noeventdiagram-NFYPM4EZ.js.map} +0 -0
  875. /package/dist/{ssGSEA-2XYMX36P.js.map → ssGSEA-FAZK5FSC.js.map} +0 -0
  876. /package/dist/{ssGSEA.unit.spec-J36KM2HO.js.map → ssGSEA.unit.spec-S5D6JMOD.js.map} +0 -0
  877. /package/dist/{summarizeCnvGeneexp-LYVDZXXD.js.map → summarizeCnvGeneexp-WDGJ5YOM.js.map} +0 -0
  878. /package/dist/{summarizeGeneexpSurvival-Y52TGAHF.js.map → summarizeGeneexpSurvival-J7UYKBN2.js.map} +0 -0
  879. /package/dist/{summarizeMutationCnv-6EEJT3PV.js.map → summarizeMutationCnv-6ZXA32XN.js.map} +0 -0
  880. /package/dist/{summarizeMutationDiagnosis-HZKXHOOQ.js.map → summarizeMutationDiagnosis-BK7QPF6A.js.map} +0 -0
  881. /package/dist/{summarizeMutationSurvival-TU7TQYFQ.js.map → summarizeMutationSurvival-UODP6R6S.js.map} +0 -0
  882. /package/dist/{summary-4QQZUAMU.js.map → summary-P6XVOWSB.js.map} +0 -0
  883. /package/dist/{summary.integration.spec-SLIIM4HN.js.map → summary.integration.spec-XKMQ77CF.js.map} +0 -0
  884. /package/dist/{summaryInput-6HROPKCE.js.map → summaryInput-U7XNGLGC.js.map} +0 -0
  885. /package/dist/{sunburst-MBJJPERL.js.map → sunburst-WHZ77REP.js.map} +0 -0
  886. /package/dist/{survival-QSL2KDKD.js.map → survival-HQ5JC76V.js.map} +0 -0
  887. /package/dist/{survival-CXLMQSV2.js.map → survival-QFWZNB4W.js.map} +0 -0
  888. /package/dist/{svgraph-JM5MHQDX.js.map → svgraph-TYIBQ3RD.js.map} +0 -0
  889. /package/dist/{svmr-MCMST2FL.js.map → svmr-ZZIRWUVA.js.map} +0 -0
  890. /package/dist/{table-MVX3IMAL.js.map → table-MPM3ET2V.js.map} +0 -0
  891. /package/dist/{termCollection-FZ2SCVA7.js.map → termCollection-5DF5MFBK.js.map} +0 -0
  892. /package/dist/{termCollection-IGC7REFK.js.map → termCollection-CQESAD6G.js.map} +0 -0
  893. /package/dist/{termCollection.unit.spec-VY2EZZIP.js.map → termCollection.unit.spec-ASYBZQLO.js.map} +0 -0
  894. /package/dist/{tk-5F3TWZ2G.js.map → tk-NCEB2L7K.js.map} +0 -0
  895. /package/dist/{tp.ui-IURWTMAS.js.map → tp.ui-AHTGSLBN.js.map} +0 -0
  896. /package/dist/{tvs.dt-BPZCFPYK.js.map → tvs.dt-TXG4FL3B.js.map} +0 -0
  897. /package/dist/{tvs.dtcnv.categorical-UFS62DTR.js.map → tvs.dtcnv.categorical-7SA4PCKE.js.map} +0 -0
  898. /package/dist/{tvs.dtcnv.continuous-R6YXNNLA.js.map → tvs.dtcnv.continuous-E3VQWM5N.js.map} +0 -0
  899. /package/dist/{tvs.dtfusion-FGXXS4XX.js.map → tvs.dtfusion-F72VEUPO.js.map} +0 -0
  900. /package/dist/{tvs.dtsnvindel-DR43K7X3.js.map → tvs.dtsnvindel-RAVTRO5M.js.map} +0 -0
  901. /package/dist/{tvs.dtsv-NO34GIOL.js.map → tvs.dtsv-ZZDBZYAJ.js.map} +0 -0
  902. /package/dist/{tvs.samplelst-2QP7IV2Y.js.map → tvs.samplelst-POTNAX4E.js.map} +0 -0
  903. /package/dist/{tvs.termCollection-UEJDG22G.js.map → tvs.termCollection-AHNHKJPJ.js.map} +0 -0
  904. /package/dist/{violin-NBZTGGYF.js.map → violin-YR35XLAS.js.map} +0 -0
  905. /package/dist/{violin.integration.spec-5CLYJSAR.js.map → violin.integration.spec-2VSILDUW.js.map} +0 -0
  906. /package/dist/{violin.interactivity-KXVKTT22.js.map → violin.interactivity-S7QY6HVJ.js.map} +0 -0
  907. /package/dist/{violin.renderer-37OF6K7Q.js.map → violin.renderer-OUWK7EL4.js.map} +0 -0
  908. /package/dist/{vocabulary-GR6J3VKW.js.map → vocabulary-6IZJ6F7N.js.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../gdc/grin2/ui-components.ts", "../plots/manhattan/manhattanGDC.ts", "../gdc/grin2.ts"],
4
- "sourcesContent": ["// ================================================================================\n// UI COMPONENT TEMPLATES AND UTILITIES for GDC-GRIN2\n// ================================================================================\n\n/**\n * Common style definitions to reduce repetitive inline styling\n */\nexport const STYLES = {\n\t// Layout styles\n\tflexRow: {\n\t\tdisplay: 'flex',\n\t\t'align-items': 'center',\n\t\tgap: '8px'\n\t},\n\n\tgridTwoColumn: {\n\t\tdisplay: 'grid',\n\t\t'grid-template-columns': 'auto auto',\n\t\tgap: '15px',\n\t\t'max-width': 'fit-content'\n\t},\n\n\t// Form element styles\n\tlabel: {\n\t\t'font-size': '14px',\n\t\t'font-weight': '500'\n\t},\n\n\tnumberInput: {\n\t\tpadding: '4px 8px',\n\t\tborder: '1px solid #ccc',\n\t\t'border-radius': '4px',\n\t\t'font-size': '14px'\n\t},\n\n\tcheckbox: {\n\t\tmargin: '0',\n\t\tcursor: 'pointer'\n\t},\n\n\tcheckboxLabel: {\n\t\tcursor: 'pointer',\n\t\t'font-weight': '500'\n\t},\n\n\t// Table styles\n\ttableHeader: {\n\t\tpadding: '12px',\n\t\t'background-color': '#f8f9fa',\n\t\tborder: '1px solid #ddd',\n\t\t'font-weight': 'bold',\n\t\t'text-align': 'left'\n\t},\n\n\ttableCell: {\n\t\tpadding: '12px',\n\t\tborder: '1px solid #ddd',\n\t\t'vertical-align': 'top'\n\t},\n\n\toptionsTable: {\n\t\twidth: 'auto',\n\t\t'border-collapse': 'collapse',\n\t\t'margin-top': '10px',\n\t\tborder: '1px solid #ddd'\n\t},\n\n\t// Panel styles\n\tinfoPanel: {\n\t\tpadding: '8px',\n\t\t'background-color': '#f8f9fa',\n\t\t'border-radius': '4px',\n\t\t'border-left': '3px solid #6c757d',\n\t\t'font-size': '12px',\n\t\tcolor: '#495057',\n\t\t'line-height': '1.4'\n\t},\n\n\t// Expandable section styles\n\texpandableHeader: {\n\t\tdisplay: 'flex',\n\t\t'align-items': 'center',\n\t\tgap: '8px',\n\t\tcursor: 'pointer',\n\t\tpadding: '8px',\n\t\t'border-radius': '4px',\n\t\ttransition: 'background-color 0.2s'\n\t},\n\n\texpandIcon: {\n\t\t'font-size': '12px',\n\t\ttransition: 'transform 0.2s'\n\t},\n\n\texpandableContent: {\n\t\tdisplay: 'none',\n\t\t'margin-top': '12px',\n\t\tpadding: '12px',\n\t\t'background-color': '#fff',\n\t\t'border-radius': '4px',\n\t\t'box-shadow': 'inset 0 1px 3px rgba(0, 0, 0, 0.1)'\n\t},\n\n\texpandHeaderText: {\n\t\t'text-decoration': 'underline',\n\t\t'font-size': '13px',\n\t\t'font-weight': '500'\n\t}\n}\n\n/**\n * Applies styles to a D3 selection\n */\nexport function applyStyles(selection: any, styles: Record<string, string>) {\n\tObject.entries(styles).forEach(([property, value]) => {\n\t\tselection.style(property, value)\n\t})\n\treturn selection\n}\n\n/**\n * Creates a labeled number input with consistent styling\n */\nexport function createNumberInput(\n\tcontainer: any,\n\tconfig: {\n\t\tlabel: string\n\t\tvalue: number\n\t\tmin?: number\n\t\tmax?: number\n\t\tstep?: number | string\n\t\twidth?: string\n\t\tonChange: (value: number) => void\n\t\tlabelWidth?: string\n\t}\n) {\n\tconst inputContainer = container.append('div')\n\tapplyStyles(inputContainer, STYLES.flexRow)\n\n\tconst label = inputContainer.append('label')\n\tapplyStyles(label, STYLES.label)\n\tif (config.labelWidth) {\n\t\tlabel.style('min-width', config.labelWidth)\n\t}\n\tlabel.text(config.label)\n\n\tconst input = inputContainer.append('input').attr('type', 'number').attr('value', config.value)\n\n\tapplyStyles(input, STYLES.numberInput)\n\n\tif (config.min !== undefined) input.attr('min', config.min)\n\tif (config.max !== undefined) input.attr('max', config.max)\n\tif (config.step !== undefined) input.attr('step', config.step)\n\tif (config.width) input.style('width', config.width)\n\n\tinput.on('input', function (this: HTMLInputElement) {\n\t\tconst value = parseFloat(this.value)\n\t\tif (!isNaN(value)) {\n\t\t\tconfig.onChange(value)\n\t\t}\n\t})\n\n\treturn { container: inputContainer, input, label }\n}\n\n/**\n * Creates a checkbox with label\n */\nexport function createCheckbox(\n\tcontainer: any,\n\tconfig: {\n\t\tid: string\n\t\tlabel: string\n\t\tchecked: boolean\n\t\tonChange: (checked: boolean) => void\n\t}\n) {\n\tconst checkboxContainer = container.append('div')\n\tapplyStyles(checkboxContainer, STYLES.flexRow)\n\n\tconst checkbox = checkboxContainer\n\t\t.append('input')\n\t\t.attr('type', 'checkbox')\n\t\t.attr('id', config.id)\n\t\t.property('checked', config.checked)\n\n\tapplyStyles(checkbox, STYLES.checkbox)\n\n\tconst label = checkboxContainer.append('label').attr('for', config.id).text(config.label)\n\n\tapplyStyles(label, STYLES.checkboxLabel)\n\n\tcheckbox.on('change', function (this: HTMLInputElement) {\n\t\tconfig.onChange(this.checked)\n\t})\n\n\treturn { container: checkboxContainer, checkbox, label }\n}\n\n/**\n * Creates an options table with consistent styling\n */\nexport function createOptionsTable(container: any) {\n\tconst table = container.append('table')\n\tapplyStyles(table, STYLES.optionsTable)\n\treturn table\n}\n\n/**\n * Creates a table header row\n */\nexport function createTableHeader(table: any, columns: string[]) {\n\tconst headerRow = table.append('tr')\n\n\tcolumns.forEach((columnText, index) => {\n\t\tconst th = headerRow.append('th')\n\t\tapplyStyles(th, STYLES.tableHeader)\n\t\tif (index === 0) {\n\t\t\tth.style('width', '200px')\n\t\t}\n\t\tth.text(columnText)\n\t})\n\n\treturn headerRow\n}\n\n/**\n * Creates a table row with checkbox and options\n */\nexport function createDataTypeRow(\n\ttable: any,\n\tconfig: {\n\t\tid: string\n\t\tlabel: string\n\t\tchecked: boolean\n\t\tonChange: (checked: boolean) => void\n\t\tcreateOptionsContent: (container: any) => void\n\t}\n) {\n\tconst row = table.append('tr')\n\n\t// Checkbox cell\n\tconst checkboxCell = row.append('td')\n\tapplyStyles(checkboxCell, STYLES.tableCell)\n\n\tconst { checkbox } = createCheckbox(checkboxCell, {\n\t\tid: config.id,\n\t\tlabel: config.label,\n\t\tchecked: config.checked,\n\t\tonChange: config.onChange\n\t})\n\n\t// Options cell\n\tconst optionsCell = row.append('td')\n\tapplyStyles(optionsCell, STYLES.tableCell)\n\n\tconst optionsContainer = optionsCell.append('div').style('display', config.checked ? 'block' : 'none')\n\n\tconfig.createOptionsContent(optionsContainer)\n\n\treturn { row, optionsContainer, checkbox }\n}\n\n/**\n * Creates an expandable section with header and content\n */\nexport function createExpandableSection(\n\tcontainer: any,\n\tconfig: {\n\t\theaderText: string\n\t\theaderColor?: string\n\t\tbackgroundColor?: string\n\t\tborderColor?: string\n\t\tonToggle?: (expanded: boolean) => void\n\t}\n) {\n\tconst expandableContainer = container.append('div').style('margin-top', '12px')\n\n\t// Create header\n\tconst header = expandableContainer.append('div')\n\tapplyStyles(header, STYLES.expandableHeader)\n\n\tconst bgColor = config.backgroundColor || 'rgba(220, 53, 69, 0.1)'\n\tconst borderColor = config.borderColor || 'rgba(220, 53, 69, 0.2)'\n\tconst hoverColor = config.backgroundColor?.replace('0.1)', '0.15)') || 'rgba(220, 53, 69, 0.15)'\n\n\theader\n\t\t.style('background-color', bgColor)\n\t\t.style('border', `1px solid ${borderColor}`)\n\t\t.on('mouseenter', function (this: HTMLElement) {\n\t\t\theader.style('background-color', hoverColor)\n\t\t})\n\t\t.on('mouseleave', function (this: HTMLElement) {\n\t\t\theader.style('background-color', bgColor)\n\t\t})\n\n\t// Expand icon\n\tconst expandIcon = header.append('span')\n\tapplyStyles(expandIcon, STYLES.expandIcon)\n\texpandIcon.style('color', config.headerColor || '#dc3545').text('\u25B6')\n\n\t// Header text\n\tconst headerText = header.append('span')\n\tapplyStyles(headerText, STYLES.expandHeaderText)\n\theaderText.style('color', config.headerColor || '#dc3545').text(config.headerText)\n\n\t// Content (hidden by default)\n\tconst content = expandableContainer.append('div')\n\tapplyStyles(content, STYLES.expandableContent)\n\tcontent.style('border', `1px solid ${borderColor}`)\n\n\t// Track state and add click handler\n\tlet isExpanded = false\n\theader.on('click', function () {\n\t\tisExpanded = !isExpanded\n\t\tif (isExpanded) {\n\t\t\tcontent.style('display', 'block')\n\t\t\texpandIcon.style('transform', 'rotate(90deg)').text('\u25BC')\n\t\t} else {\n\t\t\tcontent.style('display', 'none')\n\t\t\texpandIcon.style('transform', 'rotate(0deg)').text('\u25B6')\n\t\t}\n\t\tconfig.onToggle?.(isExpanded)\n\t})\n\n\treturn { container: expandableContainer, header, content, expandIcon }\n}\n\n/**\n * Creates an info panel with consistent styling\n */\nexport function createInfoPanel(\n\tcontainer: any,\n\tconfig: {\n\t\ttitle?: string\n\t\tcontent: string\n\t\tcolor?: string\n\t}\n) {\n\tconst panel = container.append('div')\n\tapplyStyles(panel, STYLES.infoPanel)\n\n\tif (config.color) {\n\t\tpanel.style('border-left-color', config.color)\n\t}\n\n\tif (config.title) {\n\t\tpanel.append('strong').text(config.title)\n\t\tpanel.append('br')\n\t}\n\n\tpanel.append('span').html(config.content)\n\n\treturn panel\n}\n", "import { scaleLinear } from 'd3-scale'\nimport * as d3axis from 'd3-axis'\nimport { Menu, table2col, icons } from '#dom'\nimport { to_svg } from '#src/client'\n\n/**\n * Creates an interactive Manhattan plot on top of a PNG background plot image.\n *\n * @param {Object} div - div element to contain the plot\n * @param {Object} data - Plot data\n * @param {Object} settings - Display configuration options:\n * @param {number} [settings.plotWidth=1000] - Plot area width\n * @param {number} [settings.plotHeight=400] - Plot area height\n * @param {boolean} [settings.showLegend=true] - Whether to display legend\n * @param {boolean} [settings.showDownload=true] - Whether to show download button\n * @param {boolean} [settings.showInteractiveDots=true] - Whether to show hoverable data points\n * @param {number} [settings.yAxisX=70] - Y-axis positioning\n * @param {number} [settings.yAxisSpace=40] - Space between Y-axis and plot\n * @param {number} [settings.yAxisY=40] - Top margin\n * @param {number} [settings.fontSize=12] - Base font size\n * @param {number} [settings.pngDotRadius=2] - Radius of dots in PNG plot\n * @param {number} [settings.legendItemWidth=80] - Horizontal space per legend item\n * @param {number} [settings.legendDotRadius=3] - Size of legend dots\n * @param {number} [settings.legendRightOffset=15] - Offset from right edge\n * @param {number} [settings.legendTextOffset=12] - Distance between dot and text\n * @param {number} [settings.legendVerticalOffset=4] - Vertical offset for legend items\n * @param {number} [settings.legendFontSize=12] - Font size for legend text\n * @param {number} [settings.interactiveDotRadius=3] - Radius of interactive dots\n * @param {number} [settings.interactiveDotStrokeWidth=1] - Stroke width for interactive dots\n * @param {Object} [app] - Optional app context for dispatching events\n *\n *\n * @description\n * Renders a genomic Manhattan plot by overlaying interactive elements on the base PNG plot image.\n * Features include chromosome labels, legend, hoverable data points with tooltips,\n * and proper axis scaling. The plot combines a static PNG plot image of all points with dynamic SVG elements\n * including axes, labels, legend, and top genes (represented as interactive dots) for detailed information on hover.\n */\n\nexport function plotManhattanGDC(div: any, data: any, settings: any, app?: any) {\n\t// Default settings\n\tsettings = {\n\t\tpngDotRadius: 2,\n\t\tplotWidth: 1000,\n\t\tplotHeight: 400,\n\t\tyAxisX: 70,\n\t\tyAxisY: 40,\n\t\tyAxisSpace: 40,\n\t\tfontSize: 12,\n\t\tshowLegend: true,\n\t\tlegendItemWidth: 80,\n\t\tlegendDotRadius: 3,\n\t\tlegendRightOffset: 15,\n\t\tlegendTextOffset: 12,\n\t\tlegendVerticalOffset: 4,\n\t\tlegendFontSize: 12,\n\t\tshowInteractiveDots: true,\n\t\tshowDownload: true,\n\t\tinteractiveDotRadius: 3,\n\t\tinteractiveDotStrokeWidth: 1,\n\t\t...settings\n\t}\n\n\t// Set the positioning up for download button to work properly\n\tdiv.style('position', 'relative')\n\n\t// Create tooltip menu\n\tconst geneTip = new Menu({ padding: '' })\n\n\tconst svg = div\n\t\t.append('svg')\n\t\t.attr('width', data.plotData.png_width + settings.yAxisX + settings.yAxisSpace)\n\t\t.attr('height', data.plotData.png_height + settings.yAxisY * 4) // Extra space for x-axis labels, legend, and title\n\n\t// Add y-axis\n\tconst yAxisG = svg\n\t\t.append('g')\n\t\t.attr('transform', `translate(${settings.yAxisX + settings.yAxisSpace},${settings.yAxisY})`)\n\tconst yScale = scaleLinear().domain([0, data.plotData.y_max]).range([data.plotData.png_height, 0])\n\tyAxisG.call(d3axis.axisLeft(yScale))\n\n\t// Add y-axis label\n\tsvg\n\t\t.append('text')\n\t\t.attr('x', -(data.plotData.png_height / 2) - settings.yAxisY)\n\t\t.attr('y', settings.yAxisX / 2)\n\t\t.attr('transform', 'rotate(-90)')\n\t\t.attr('text-anchor', 'middle')\n\t\t.attr('font-size', `${settings.fontSize}px`)\n\t\t.attr('fill', 'black')\n\t\t.text('-log\u2081\u2080(q-value)')\n\n\t// Add png image\n\tsvg\n\t\t.append('image')\n\t\t.attr('transform', `translate(${settings.yAxisX + settings.yAxisSpace},${settings.yAxisY})`)\n\t\t.attr('width', data.plotData.png_width)\n\t\t.attr('height', data.plotData.png_height)\n\t\t.attr('href', `data:image/png;base64,${data.pngImg || data.png}`)\n\n\t// Create scales for positioning elements\n\tconst xScale = scaleLinear()\n\t\t.domain([-data.plotData.x_buffer, data.plotData.total_genome_length + data.plotData.x_buffer])\n\t\t.range([0, data.plotData.png_width])\n\n\t// Add interactive dots layer\n\tif (settings.showInteractiveDots && data.plotData.points && data.plotData.points.length > 0) {\n\t\tconst pointsLayer = svg\n\t\t\t.append('g')\n\t\t\t.attr('transform', `translate(${settings.yAxisX + settings.yAxisSpace},${settings.yAxisY})`)\n\n\t\tpointsLayer\n\t\t\t.selectAll('circle')\n\t\t\t.data(data.plotData.points)\n\t\t\t.enter()\n\t\t\t.append('circle')\n\t\t\t.attr('cx', d => xScale(d.x)) // Use xScale to convert pre-calculated genomic coordinates because of our chromosome scaling on the x-axis\n\t\t\t.attr('cy', d => yScale(d.y)) // Use pre-calculated coordinates for y and yScale for proper scaling from the scale we made earlier\n\t\t\t.attr('r', settings.interactiveDotRadius)\n\t\t\t.attr('fill-opacity', 0)\n\t\t\t.attr('stroke', 'black')\n\t\t\t.attr('stroke-width', settings.interactiveDotStrokeWidth)\n\t\t\t.attr('stroke-opacity', 0)\n\t\t\t.on('mouseover', (event, d) => {\n\t\t\t\t// Show stroke on hover\n\t\t\t\tevent.target.setAttribute('stroke-opacity', 1)\n\n\t\t\t\tgeneTip.clear().show(event.clientX, event.clientY)\n\n\t\t\t\tconst table = table2col({\n\t\t\t\t\tholder: geneTip.d.append('div'),\n\t\t\t\t\tmargin: '10px'\n\t\t\t\t})\n\t\t\t\ttable.addRow('Gene', d.gene)\n\t\t\t\tconst [t1, t2] = table.addRow()\n\t\t\t\tt1.text('Type')\n\t\t\t\tt2.html(`<span style=\"color:${d.color}\">\u25CF</span> ${d.type.charAt(0).toUpperCase() + d.type.slice(1)}`)\n\t\t\t\ttable.addRow('-log\u2081\u2080(q-value)', d.y.toFixed(3))\n\t\t\t\tif (d.nsubj) table.addRow('Subject count', d.nsubj)\n\t\t\t\ttable.addRow('Chromosome', d.chrom)\n\t\t\t})\n\t\t\t.on('mouseout', event => {\n\t\t\t\t// Hide stroke on mouseout\n\t\t\t\tevent.target.setAttribute('stroke-opacity', 0)\n\t\t\t\tgeneTip.hide()\n\t\t\t})\n\t\t\t.on('click', (event, d) => {\n\t\t\t\tif (app) {\n\t\t\t\t\t// Open the genome browser with the current gene that is being clicked on\n\t\t\t\t\tapp.dispatch({\n\t\t\t\t\t\ttype: 'plot_create',\n\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\tchartType: 'genomeBrowser',\n\t\t\t\t\t\t\tgeneSearchResult: { geneSymbol: d.gene }\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t})\n\t}\n\n\t// Add chromosome labels\n\tif (data.plotData.chrom_data) {\n\t\tconst chromLabelY = data.plotData.png_height + settings.yAxisY + 20\n\n\t\tObject.entries(data.plotData.chrom_data).forEach(([chrom, chromData]: [string, any]) => {\n\t\t\tconst chromLabel = chrom.replace('chr', '')\n\n\t\t\t// Skip chrM if desired\n\t\t\tif (chromLabel === 'M') return\n\n\t\t\t// Calculate center position for label\n\t\t\tconst centerPos = settings.yAxisX + settings.yAxisSpace + xScale(chromData.center)\n\n\t\t\t// Append chromosome label\n\t\t\tsvg\n\t\t\t\t.append('text')\n\t\t\t\t.attr('x', centerPos)\n\t\t\t\t.attr('y', chromLabelY)\n\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t.attr('font-size', `${settings.fontSize - 2}px`)\n\t\t\t\t.attr('fill', 'black')\n\t\t\t\t.text(chromLabel)\n\t\t})\n\t}\n\n\t// Add x-axis label\n\tsvg\n\t\t.append('text')\n\t\t.attr('x', settings.yAxisX + settings.yAxisSpace + data.plotData.png_width / 2)\n\t\t.attr('y', data.plotData.png_height + settings.yAxisY + 45)\n\t\t.attr('text-anchor', 'middle')\n\t\t.attr('font-size', `${settings.fontSize}px`)\n\t\t.attr('fill', 'black')\n\t\t.text('Chromosomes')\n\n\t// Add title\n\tsvg\n\t\t.append('text')\n\t\t.attr('x', settings.yAxisX + settings.yAxisSpace)\n\t\t.attr('y', settings.yAxisY / 2)\n\t\t.attr('text-anchor', 'left')\n\t\t.attr('font-weight', 'bold')\n\t\t.attr('font-size', `${settings.fontSize + 2}px`)\n\t\t.attr('fill', 'black')\n\t\t.text('Manhattan Plot')\n\n\tif (settings.showDownload) {\n\t\tconst downloadDiv = div\n\t\t\t.append('div')\n\t\t\t.style('position', 'absolute')\n\t\t\t.style('top', '5px')\n\t\t\t.style('left', `${settings.yAxisX + settings.yAxisSpace + 108}px`)\n\t\t\t.style('z-index', '10')\n\t\t\t.style('background', `${settings.background}`)\n\t\t\t.style('padding', `${settings.padding + 2}px`)\n\t\t\t.style('border-radius', `${settings.borderRadius + 10}px`)\n\n\t\ticons['download'](downloadDiv, {\n\t\t\twidth: 16,\n\t\t\theight: 16,\n\t\t\ttitle: 'Download Manhattan plot',\n\t\t\thandler: () => {\n\t\t\t\tto_svg(\n\t\t\t\t\tsvg.node() as SVGSVGElement,\n\t\t\t\t\t`manhattan_plot_${new Date().toISOString().replace(/[:.]/g, '-').slice(0, -5)}`,\n\t\t\t\t\t{ apply_dom_styles: true }\n\t\t\t\t)\n\t\t\t}\n\t\t})\n\t}\n\n\t// Generate legend data\n\tconst mutationTypes = [...new Set(data.plotData.points.map((p: any) => p.type))]\n\tconst legendData = mutationTypes.map(type => {\n\t\tconst point = data.plotData.points.find((p: any) => p.type === type)\n\t\treturn {\n\t\t\ttype: String(type).charAt(0).toUpperCase() + String(type).slice(1),\n\t\t\tcolor: point?.color\n\t\t}\n\t})\n\n\t// Add legend\n\tif (settings.showLegend && legendData.length > 0) {\n\t\tconst legendY = settings.yAxisY / 2\n\t\tconst totalWidth = legendData.length * settings.legendItemWidth\n\t\tconst legendX =\n\t\t\tsettings.yAxisX + settings.yAxisSpace + data.plotData.png_width - totalWidth - settings.legendRightOffset\n\n\t\tlegendData.forEach((item, i) => {\n\t\t\tconst x = legendX + i * settings.legendItemWidth\n\n\t\t\t// Legend dot\n\t\t\tsvg\n\t\t\t\t.append('circle')\n\t\t\t\t.attr('cx', x + 8)\n\t\t\t\t.attr('cy', legendY)\n\t\t\t\t.attr('r', settings.legendDotRadius)\n\t\t\t\t.attr('fill', item.color)\n\t\t\t\t.attr('stroke', 'black')\n\t\t\t\t.attr('stroke-width', 1)\n\n\t\t\t// Legend text\n\t\t\tsvg\n\t\t\t\t.append('text')\n\t\t\t\t.attr('x', x + 8 + settings.legendTextOffset)\n\t\t\t\t.attr('y', legendY + settings.legendVerticalOffset)\n\t\t\t\t.attr('font-size', `${settings.legendFontSize}px`)\n\t\t\t\t.attr('fill', 'black')\n\t\t\t\t.text(item.type)\n\t\t})\n\t}\n}\n", "/*\n================================================================================\nGRIN2 UI Module - Genomic Data Analysis Interface\n================================================================================\nA comprehensive UI for listing genomic data (MAF, CNV, Fusion)\nfrom GDC cohorts and analyzing and visualizing with GRIN2.\n\nAuthor: PP Team\n================================================================================\n*/\n\nimport { dofetch3 } from '#common/dofetch'\nimport { renderTable, sayerror, make_one_checkbox } from '#dom'\nimport { select } from 'd3-selection'\nimport type { GdcGRIN2listRequest } from '#types'\nimport { mclass, dtsnvindel, class2SOterm, bplen } from '#shared'\nimport {\n\tSTYLES,\n\tapplyStyles,\n\tcreateNumberInput,\n\tcreateOptionsTable,\n\tcreateTableHeader,\n\tcreateDataTypeRow,\n\tcreateInfoPanel\n} from './grin2/ui-components'\nimport { plotManhattanGDC } from '#plots/manhattan/manhattanGDC.ts'\n\n// ================================================================================\n// TYPE DEFINITIONS, INTERFACES, & DEFAULTS\n// ================================================================================\n\n// Interface for table row item\ninterface TableRowItem {\n\thtml?: string\n\tvalue?: any\n\trawData?: any\n\tdataType?: string\n}\n\n// Default MAF classes for mutation types\nconst defaultCheckedClasses = ['M', 'F', 'N', 'StopLost', 'StartLost', 'L', 'I', 'D', 'ProteinAltering']\n\n// Classes to skip in MAF analysis\nconst skipMAFclasses = ['WT', 'Blank', 'X']\n\n// ================================================================================\n// UI COMPONENT BUILDERS\n// ================================================================================\n\n/** Function to transform our R top gene table to the format expected by renderTable for proper sorting\n * @param rows - Array of rows from R, each row is an array of objects with a 'value' property\n * @param columns - Array of column headers from R, each header is an object with a 'label' property\n * @returns Transformed rows in the format expected by renderTable\n */\n// Transform rows to match the expected format for renderTable\nfunction transformRows(rows, columns) {\n\treturn rows.map(row => {\n\t\tconst transformedRow: Array<{ value: any }> = []\n\n\t\tfor (let i = 0; i < columns.length; i++) {\n\t\t\tconst cellData = row[i]\n\t\t\tlet value = null\n\n\t\t\t// Extract value from complex structure from R\n\t\t\tif (cellData && cellData.value && Array.isArray(cellData.value)) {\n\t\t\t\tvalue = cellData.value[0]\n\t\t\t} else if (cellData && 'value' in cellData) {\n\t\t\t\tvalue = cellData.value\n\t\t\t} else {\n\t\t\t\tvalue = cellData\n\t\t\t}\n\n\t\t\t// Create object with value property\n\t\t\ttransformedRow.push({ value: value })\n\t\t}\n\n\t\treturn transformedRow\n\t})\n}\n\nfunction parseRecordsByCaseData(\n\trecordsByCase: any,\n\texcludedByMaxRecord: { maf?: string[]; cnv?: string[] } = {}\n): { columns: any[]; rows: any[][] } {\n\t// Adding columns for detailed filtering stats\n\tconst columns = [\n\t\t{ label: 'Case ID', sortable: true },\n\t\t{ label: 'MAF Total Processed', sortable: true },\n\t\t{ label: 'MAF Included', sortable: true },\n\t\t{ label: 'MAF Excluded by Depth', sortable: true },\n\t\t{ label: 'MAF Excluded by Alt Count', sortable: true },\n\t\t{ label: 'MAF Excluded by Consequence', sortable: true },\n\t\t{ label: 'MAF Skipped Chromosomes', sortable: true },\n\t\t{ label: 'MAF Excluded by Records Cap', sortable: true },\n\t\t{ label: 'CNV Total Processed', sortable: true },\n\t\t{ label: 'CNV Included', sortable: true },\n\t\t{ label: 'CNV Excluded by Thresholds', sortable: true },\n\t\t{ label: 'CNV Excluded by Length', sortable: true },\n\t\t{ label: 'CNV Skipped Chromosomes', sortable: true },\n\t\t{ label: 'CNV Excluded by Records Cap', sortable: true },\n\t\t{ label: 'Invalid Rows', sortable: true }\n\t]\n\n\tconst rows: TableRowItem[][] = []\n\n\tObject.entries(recordsByCase).forEach(([caseId, caseData]: [string, any]) => {\n\t\tconst row: TableRowItem[] = []\n\n\t\t// Case ID\n\t\trow.push({ value: caseId })\n\n\t\t// Parse the case data\n\t\tlet parsedData\n\t\ttry {\n\t\t\tparsedData = typeof caseData === 'string' ? JSON.parse(caseData) : caseData\n\t\t} catch (_e) {\n\t\t\tparsedData = caseData\n\t\t}\n\n\t\t// MAF Statistics\n\t\tlet mafTotalProcessed = 0\n\t\tlet mafIncluded = 0\n\t\tlet mafExcludedByDepth = 0\n\t\tlet mafExcludedByAltCount = 0\n\t\tlet mafExcludedByConsequence = 0\n\t\tlet mafSkippedChromosomes = 0\n\n\t\tif (parsedData.maf) {\n\t\t\tmafTotalProcessed = parsedData.maf.total_processed || 0\n\t\t\tmafIncluded = parsedData.maf.total_included || 0\n\t\t\tmafExcludedByDepth = parsedData.maf.excluded_by_min_depth || 0\n\t\t\tmafExcludedByAltCount = parsedData.maf.excluded_by_min_alt_count || 0\n\t\t\tmafExcludedByConsequence = parsedData.maf.excluded_by_consequence_type || 0\n\n\t\t\t// Calculate total count from the chromosome object\n\t\t\tif (parsedData.maf.skipped_chromosomes && typeof parsedData.maf.skipped_chromosomes === 'object') {\n\t\t\t\tmafSkippedChromosomes = Object.values(parsedData.maf.skipped_chromosomes).reduce(\n\t\t\t\t\t(sum: number, count: any) => sum + (Number(count) || 0),\n\t\t\t\t\t0\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\trow.push({ value: mafTotalProcessed })\n\t\trow.push({ value: mafIncluded })\n\t\trow.push({ value: mafExcludedByDepth })\n\t\trow.push({ value: mafExcludedByAltCount })\n\t\trow.push({ value: mafExcludedByConsequence })\n\t\tif (parsedData.maf?.skipped_chromosomes && Object.keys(parsedData.maf.skipped_chromosomes).length > 0) {\n\t\t\tconst chromosomeEntries = Object.entries(parsedData.maf.skipped_chromosomes)\n\t\t\tconst tableHtml = `\n\t\t\t\t<div style=\"text-align: center;\">\n\t\t\t\t<table style=\"border-collapse: collapse; margin: 0 auto; font-size: 11px; border: 1px solid #ddd;\">\n\t\t\t\t\t<thead>\n\t\t\t\t\t<tr style=\"background-color: #f8f9fa;\">\n\t\t\t\t\t\t<th style=\"border: 1px solid #ddd; padding: 2px 6px;\">Chr</th>\n\t\t\t\t\t\t<th style=\"border: 1px solid #ddd; padding: 2px 6px;\">Count</th>\n\t\t\t\t\t</tr>\n\t\t\t\t\t</thead>\n\t\t\t\t\t<tbody>\n\t\t\t\t\t${chromosomeEntries\n\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t([chr, count]) =>\n\t\t\t\t\t\t\t\t`<tr>\n\t\t\t\t\t\t<td style=\"border: 1px solid #ddd; padding: 2px 6px;\">${chr}</td>\n\t\t\t\t\t\t<td style=\"border: 1px solid #ddd; padding: 2px 6px; text-align: right;\">${count}</td>\n\t\t\t\t\t\t</tr>`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('')}\n\t\t\t\t\t</tbody>\n\t\t\t\t</table>\n\t\t\t\t</div>\n\t\t\t`\n\t\t\trow.push({\n\t\t\t\thtml: tableHtml,\n\t\t\t\tvalue: mafSkippedChromosomes,\n\t\t\t\trawData: parsedData.maf.skipped_chromosomes,\n\t\t\t\tdataType: 'chromosome-details'\n\t\t\t})\n\t\t} else {\n\t\t\trow.push({\n\t\t\t\tvalue: mafSkippedChromosomes,\n\t\t\t\trawData: null,\n\t\t\t\tdataType: 'chromosome-details'\n\t\t\t})\n\t\t}\n\n\t\t// Check if this case was excluded by max record for MAF\n\t\tconst mafExcludedByMax = excludedByMaxRecord.maf?.includes(caseId) ? 'Yes' : 'No'\n\t\trow.push({\n\t\t\tvalue: mafExcludedByMax,\n\t\t\thtml:\n\t\t\t\tmafExcludedByMax === 'Yes'\n\t\t\t\t\t? `<span style=\"color: #dc3545; font-weight: bold;\">${mafExcludedByMax}</span>`\n\t\t\t\t\t: mafExcludedByMax\n\t\t})\n\n\t\t// CNV Statistics\n\t\tlet cnvTotalProcessed = 0\n\t\tlet cnvIncluded = 0\n\t\tlet cnvExcludedByThresholds = 0\n\t\tlet cnvExcludedByLength = 0\n\t\tlet cnvSkippedChromosomes = 0\n\n\t\tif (parsedData.cnv) {\n\t\t\tcnvTotalProcessed = parsedData.cnv.total_processed || 0\n\t\t\tcnvIncluded = parsedData.cnv.total_included || 0\n\t\t\t// Combine loss and gain threshold exclusions\n\t\t\tcnvExcludedByThresholds =\n\t\t\t\t(parsedData.cnv.excluded_by_loss_threshold || 0) + (parsedData.cnv.excluded_by_gain_threshold || 0)\n\t\t\tcnvExcludedByLength = parsedData.cnv.excluded_by_segment_length || 0\n\t\t\t// Calculate total count from the chromosome object\n\t\t\tif (parsedData.cnv.skipped_chromosomes && typeof parsedData.cnv.skipped_chromosomes === 'object') {\n\t\t\t\tcnvSkippedChromosomes = Object.values(parsedData.cnv.skipped_chromosomes).reduce(\n\t\t\t\t\t(sum: number, count: any) => sum + (Number(count) || 0),\n\t\t\t\t\t0\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\n\t\trow.push({ value: cnvTotalProcessed })\n\t\trow.push({ value: cnvIncluded })\n\t\trow.push({ value: cnvExcludedByThresholds })\n\t\trow.push({ value: cnvExcludedByLength })\n\t\tif (parsedData.cnv?.skipped_chromosomes && Object.keys(parsedData.cnv.skipped_chromosomes).length > 0) {\n\t\t\tconst chromosomeEntries = Object.entries(parsedData.cnv.skipped_chromosomes)\n\t\t\tconst tableHtml = `\n <div style=\"text-align: center;\">\n <table style=\"border-collapse: collapse; margin: 0 auto; font-size: 11px; border: 1px solid #ddd;\">\n <thead>\n <tr style=\"background-color: #f8f9fa;\">\n <th style=\"border: 1px solid #ddd; padding: 2px 6px;\">Chr</th>\n <th style=\"border: 1px solid #ddd; padding: 2px 6px;\">Count</th>\n </tr>\n </thead>\n <tbody>\n ${chromosomeEntries\n\t\t\t\t\t\t.map(\n\t\t\t\t\t\t\t([chr, count]) =>\n\t\t\t\t\t\t\t\t`<tr>\n <td style=\"border: 1px solid #ddd; padding: 2px 6px;\">${chr}</td>\n <td style=\"border: 1px solid #ddd; padding: 2px 6px; text-align: right;\">${count}</td>\n </tr>`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.join('')}\n </tbody>\n </table>\n </div>\n `\n\t\t\trow.push({\n\t\t\t\thtml: tableHtml,\n\t\t\t\tvalue: cnvSkippedChromosomes,\n\t\t\t\trawData: parsedData.cnv.skipped_chromosomes,\n\t\t\t\tdataType: 'chromosome-details'\n\t\t\t})\n\t\t} else {\n\t\t\trow.push({\n\t\t\t\tvalue: cnvSkippedChromosomes,\n\t\t\t\trawData: null,\n\t\t\t\tdataType: 'chromosome-details'\n\t\t\t})\n\t\t}\n\n\t\t// Check if this case was excluded by max record for CNV\n\t\tconst cnvExcludedByMax = excludedByMaxRecord.cnv?.includes(caseId) ? 'Yes' : 'No'\n\t\trow.push({\n\t\t\tvalue: cnvExcludedByMax,\n\t\t\thtml:\n\t\t\t\tcnvExcludedByMax === 'Yes'\n\t\t\t\t\t? `<span style=\"color: #dc3545; font-weight: bold;\">${cnvExcludedByMax}</span>`\n\t\t\t\t\t: cnvExcludedByMax\n\t\t})\n\n\t\t// Invalid Rows (MAF + CNV combined)\n\t\tlet totalInvalidRows = 0\n\t\tif (parsedData.maf && parsedData.maf.invalid_rows !== undefined) {\n\t\t\ttotalInvalidRows += Number(parsedData.maf.invalid_rows) || 0\n\t\t}\n\t\tif (parsedData.cnv && parsedData.cnv.invalid_rows !== undefined) {\n\t\t\ttotalInvalidRows += Number(parsedData.cnv.invalid_rows) || 0\n\t\t}\n\t\trow.push({ value: totalInvalidRows })\n\n\t\trows.push(row)\n\t})\n\n\treturn { columns, rows }\n}\n\n/**\n * Adds expandable failed files section to any stats container\n * @param statsContainer - The stats container to append the expandable section to\n * @param failedFilesInfo - Object containing failed files data and error summaries\n * @returns void\n */\nfunction addExpandableFailedFilesToStats(statsContainer, failedFilesInfo) {\n\t// Create expandable container for failed files\n\tconst expandableContainer = statsContainer.append('div').style('margin-top', '12px')\n\n\t// Create clickable header\n\tconst expandableHeader = expandableContainer\n\t\t.append('div')\n\t\t.style('display', 'flex')\n\t\t.style('align-items', 'center')\n\t\t.style('gap', '8px')\n\t\t.style('cursor', 'pointer')\n\t\t.style('padding', '8px')\n\t\t.style('border-radius', '4px')\n\t\t.style('transition', 'background-color 0.2s')\n\t\t.style('background-color', 'rgba(220, 53, 69, 0.1)')\n\t\t.style('border', '1px solid rgba(220, 53, 69, 0.2)')\n\t\t.on('mouseenter', function (this: HTMLElement) {\n\t\t\tselect(this).style('background-color', 'rgba(220, 53, 69, 0.15)')\n\t\t})\n\t\t.on('mouseleave', function (this) {\n\t\t\tselect(this).style('background-color', 'rgba(220, 53, 69, 0.1)')\n\t\t})\n\n\t// Expand/collapse icon\n\tconst expandIcon = expandableHeader\n\t\t.append('span')\n\t\t.style('font-size', '12px')\n\t\t.style('color', '#dc3545')\n\t\t.style('transition', 'transform 0.2s')\n\t\t.text('\u25B6')\n\n\t// Clickable text\n\texpandableHeader\n\t\t.append('span')\n\t\t.style('color', '#dc3545')\n\t\t.style('text-decoration', 'underline')\n\t\t.style('font-size', '13px')\n\t\t.style('font-weight', '500')\n\t\t.text(`View ${failedFilesInfo.count} failed files details`)\n\n\t// Error summary text (visible by default)\n\tif (failedFilesInfo.errorSummary) {\n\t\tconst { errorSummary } = failedFilesInfo\n\t\tconst summaryItems: string[] = []\n\n\t\tif (errorSummary.connectionErrors > 0) {\n\t\t\tsummaryItems.push(`${errorSummary.connectionErrors} connection`)\n\t\t}\n\t\tif (errorSummary.timeoutErrors > 0) {\n\t\t\tsummaryItems.push(`${errorSummary.timeoutErrors} timeout`)\n\t\t}\n\t\tif (errorSummary.serverErrors > 0) {\n\t\t\tsummaryItems.push(`${errorSummary.serverErrors} server`)\n\t\t}\n\t\tif (errorSummary.otherErrors > 0) {\n\t\t\tsummaryItems.push(`${errorSummary.otherErrors} other`)\n\t\t}\n\n\t\tif (summaryItems.length > 0) {\n\t\t\texpandableHeader\n\t\t\t\t.append('span')\n\t\t\t\t.style('margin-left', '8px')\n\t\t\t\t.style('font-size', '12px')\n\t\t\t\t.style('color', '#666')\n\t\t\t\t.style('font-weight', 'normal')\n\t\t\t\t.text(`(${summaryItems.join(', ')})`)\n\t\t}\n\t}\n\n\t// Create expandable content (hidden by default)\n\tconst expandableContent = expandableContainer\n\t\t.append('div')\n\t\t.style('display', 'none')\n\t\t.style('margin-top', '12px')\n\t\t.style('padding', '12px')\n\t\t.style('background-color', '#fff')\n\t\t.style('border', '1px solid #f5c6cb')\n\t\t.style('border-radius', '4px')\n\t\t.style('box-shadow', 'inset 0 1px 3px rgba(0, 0, 0, 0.1)')\n\n\t// Failed files table section (no error summary box)\n\tconst tableSection = expandableContent.append('div')\n\n\ttableSection\n\t\t.append('h6')\n\t\t.style('margin', '0 0 12px 0')\n\t\t.style('color', '#721c24')\n\t\t.style('font-size', '14px')\n\t\t.style('font-weight', 'bold')\n\t\t.text('Failed Files Details')\n\n\t// Create table container with max height and scroll\n\tconst tableContainer = tableSection\n\t\t.append('div')\n\t\t.style('max-height', '300px')\n\t\t.style('overflow-y', 'auto')\n\t\t.style('border', '1px solid #dee2e6')\n\t\t.style('border-radius', '4px')\n\n\t// Render the failed files table using existing renderTable function\n\trenderTable({\n\t\tdiv: tableContainer,\n\t\tcolumns: failedFilesInfo.tableData.headers.map(header => ({\n\t\t\tlabel: header,\n\t\t\tsortable: true\n\t\t})),\n\t\trows: failedFilesInfo.tableData.rows.map(row => row.map(cell => ({ value: cell }))),\n\t\tshowLines: true,\n\t\tstriped: true,\n\t\tshowHeader: true,\n\t\tmaxHeight: '280px',\n\t\tresize: false,\n\t\theader: {\n\t\t\tallowSort: true,\n\t\t\tstyle: {\n\t\t\t\t'background-color': '#f8f9fa',\n\t\t\t\t'font-weight': 'bold',\n\t\t\t\t'border-bottom': '2px solid #dee2e6'\n\t\t\t}\n\t\t}\n\t})\n\n\t// Add explanatory text\n\texpandableContent\n\t\t.append('div')\n\t\t.style('margin-top', '12px')\n\t\t.style('padding', '8px')\n\t\t.style('background-color', '#f8f9fa')\n\t\t.style('border-radius', '4px')\n\t\t.style('font-size', '12px')\n\t\t.style('color', '#495057')\n\t\t.style('line-height', '1.4')\n\t\t.text('These files could not be downloaded due to network or server issues and were excluded from the analysis.')\n\n\t// Track expanded state\n\tlet isExpanded = false\n\n\t// Add click handler for expand/collapse\n\texpandableHeader.on('click', function () {\n\t\tisExpanded = !isExpanded\n\n\t\tif (isExpanded) {\n\t\t\t// Expand\n\t\t\texpandableContent.style('display', 'block')\n\t\t\texpandIcon.style('transform', 'rotate(90deg)').text('\u25BC')\n\t\t} else {\n\t\t\t// Collapse\n\t\t\texpandableContent.style('display', 'none')\n\t\t\texpandIcon.style('transform', 'rotate(0deg)').text('\u25B6')\n\t\t}\n\t})\n}\n\n/**\n * Creates an expandable deduplication section inline with multi-column layout\n * @param container - The container to append the expandable section to\n * @param deduplicationStats - Object containing deduplication data\n * @returns void\n */\nfunction createExpandableDeduplicationSection(container, deduplicationStats) {\n\tconst duplicatesRemoved = deduplicationStats.duplicatesRemoved || 0\n\tconst sizeFilteredCount = deduplicationStats.filteredFiles ? deduplicationStats.filteredFiles.length : 0\n\tconst totalExcluded = duplicatesRemoved + sizeFilteredCount\n\n\tif (totalExcluded === 0) {\n\t\t// No exclusions - just show success message\n\t\treturn\n\t}\n\n\t// Create expandable container for excluded files\n\tconst expandableContainer = container.append('div').style('margin-top', '8px')\n\n\t// Create clickable header\n\tconst expandableHeader = expandableContainer\n\t\t.append('div')\n\t\t.style('display', 'flex')\n\t\t.style('align-items', 'center')\n\t\t.style('gap', '8px')\n\t\t.style('cursor', 'pointer')\n\t\t.style('padding', '6px 8px')\n\t\t.style('border-radius', '4px')\n\t\t.style('transition', 'background-color 0.2s')\n\t\t.style('background-color', 'rgba(216, 67, 21, 0.1)') // Orange theme for deduplication\n\t\t.style('border', '1px solid rgba(216, 67, 21, 0.2)')\n\t\t.on('mouseenter', function (this: HTMLElement) {\n\t\t\tselect(this).style('background-color', 'rgba(216, 67, 21, 0.15)')\n\t\t})\n\t\t.on('mouseleave', function (this: HTMLElement) {\n\t\t\tselect(this).style('background-color', 'rgba(216, 67, 21, 0.1)')\n\t\t})\n\n\t// Expand/collapse icon\n\tconst expandIcon = expandableHeader\n\t\t.append('span')\n\t\t.style('font-size', '12px')\n\t\t.style('color', '#d84315')\n\t\t.style('transition', 'transform 0.2s')\n\t\t.text('\u25B6')\n\n\t// Clickable text\n\texpandableHeader\n\t\t.append('span')\n\t\t.style('color', '#d84315')\n\t\t.style('text-decoration', 'underline')\n\t\t.style('font-size', '12px')\n\t\t.style('font-weight', '500')\n\t\t.text('View excluded files details')\n\n\t// Summary text (visible by default)\n\tconst exclusionDetails: string[] = []\n\tif (duplicatesRemoved > 0) {\n\t\texclusionDetails.push(`${duplicatesRemoved} duplicates`)\n\t}\n\tif (sizeFilteredCount > 0) {\n\t\texclusionDetails.push(`${sizeFilteredCount} oversized`)\n\t}\n\n\tif (exclusionDetails.length > 0) {\n\t\texpandableHeader\n\t\t\t.append('span')\n\t\t\t.style('margin-left', '8px')\n\t\t\t.style('font-size', '11px')\n\t\t\t.style('color', '#666')\n\t\t\t.style('font-weight', 'normal')\n\t\t\t.text(`(${exclusionDetails.join(', ')})`)\n\t}\n\n\t// Create expandable content\n\tconst expandableContent = expandableContainer\n\t\t.append('div')\n\t\t.style('display', 'none')\n\t\t.style('margin-top', '8px')\n\t\t.style('padding', '12px')\n\t\t.style('background-color', '#fff')\n\t\t.style('border', '1px solid rgba(216, 67, 21, 0.3)')\n\t\t.style('border-radius', '4px')\n\t\t.style('box-shadow', 'inset 0 1px 3px rgba(0, 0, 0, 0.1)')\n\t\t.style('max-height', '400px')\n\t\t.style('overflow-y', 'auto')\n\n\t// Section 1: Duplicate Files Removed\n\tif (deduplicationStats.caseDetails && deduplicationStats.caseDetails.length > 0) {\n\t\tconst duplicatesSection = expandableContent.append('div').style('margin-bottom', '16px')\n\n\t\tduplicatesSection\n\t\t\t.append('h6')\n\t\t\t.style('margin', '0 0 8px 0')\n\t\t\t.style('color', '#d84315')\n\t\t\t.style('font-size', '13px')\n\t\t\t.style('font-weight', 'bold')\n\t\t\t.text('Duplicate Files Removed')\n\n\t\tduplicatesSection\n\t\t\t.append('p')\n\t\t\t.style('margin', '0 0 12px 0')\n\t\t\t.style('font-size', '12px')\n\t\t\t.style('color', '#666')\n\t\t\t.text(`${deduplicationStats.duplicatesRemoved} duplicate files were removed (largest file kept for each case)`)\n\n\t\t// Create multi-column container for duplicate cases\n\t\tconst duplicatesCasesContainer = duplicatesSection\n\t\t\t.append('div')\n\t\t\t.style('display', 'grid')\n\t\t\t.style('grid-template-columns', 'repeat(auto-fill, minmax(300px, 1fr))')\n\t\t\t.style('gap', '8px')\n\n\t\tdeduplicationStats.caseDetails.forEach(caseInfo => {\n\t\t\tconst caseDiv = duplicatesCasesContainer\n\t\t\t\t.append('div')\n\t\t\t\t.style('padding', '6px 8px')\n\t\t\t\t.style('background-color', '#fff3e0')\n\t\t\t\t.style('border-radius', '3px')\n\t\t\t\t.style('border-left', '3px solid #ff9800')\n\n\t\t\tcaseDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('font-size', '12px')\n\t\t\t\t.style('color', '#333')\n\t\t\t\t.style('line-height', '1.3')\n\t\t\t\t.html(\n\t\t\t\t\t`<strong>Case ${caseInfo.caseName}:</strong> Found ${caseInfo.fileCount} MAF files, keeping largest (${bplen(\n\t\t\t\t\t\tcaseInfo.keptFileSize\n\t\t\t\t\t)})`\n\t\t\t\t)\n\t\t})\n\t}\n\n\t// Section 2: Size-Filtered Files\n\tif (deduplicationStats.filteredFiles && deduplicationStats.filteredFiles.length > 0) {\n\t\t// Add separator if we have both sections\n\t\tif (deduplicationStats.caseDetails && deduplicationStats.caseDetails.length > 0) {\n\t\t\texpandableContent\n\t\t\t\t.append('hr')\n\t\t\t\t.style('margin', '12px 0')\n\t\t\t\t.style('border', 'none')\n\t\t\t\t.style('border-top', '1px solid #e0e0e0')\n\t\t}\n\n\t\tconst sizeFilterSection = expandableContent.append('div')\n\n\t\tsizeFilterSection\n\t\t\t.append('h6')\n\t\t\t.style('margin', '0 0 8px 0')\n\t\t\t.style('color', '#c62828')\n\t\t\t.style('font-size', '13px')\n\t\t\t.style('font-weight', 'bold')\n\t\t\t.text('Files Excluded by Size')\n\n\t\tsizeFilterSection\n\t\t\t.append('p')\n\t\t\t.style('margin', '0 0 12px 0')\n\t\t\t.style('font-size', '12px')\n\t\t\t.style('color', '#666')\n\t\t\t.text(`${deduplicationStats.filteredFiles.length} files were excluded for being too large (>${bplen(1000000)})`)\n\n\t\t// Create multi-column container for oversized files\n\t\tconst oversizedFilesContainer = sizeFilterSection\n\t\t\t.append('div')\n\t\t\t.style('display', 'grid')\n\t\t\t.style('grid-template-columns', 'repeat(auto-fill, minmax(280px, 1fr))')\n\t\t\t.style('gap', '8px')\n\n\t\tdeduplicationStats.filteredFiles.forEach(fileInfo => {\n\t\t\tconst fileDiv = oversizedFilesContainer\n\t\t\t\t.append('div')\n\t\t\t\t.style('padding', '6px 8px')\n\t\t\t\t.style('background-color', '#ffebee')\n\t\t\t\t.style('border-radius', '3px')\n\t\t\t\t.style('border-left', '3px solid #f44336')\n\n\t\t\tfileDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('font-size', '11px')\n\t\t\t\t.style('color', '#333')\n\t\t\t\t.style('margin-bottom', '2px')\n\t\t\t\t.style('line-height', '1.2')\n\t\t\t\t.html(`<strong>File ID:</strong> ${fileInfo.fileId}`)\n\n\t\t\tfileDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('font-size', '10px')\n\t\t\t\t.style('color', '#666')\n\t\t\t\t.style('line-height', '1.2')\n\t\t\t\t.text(`Size: ${bplen(fileInfo.fileSize)} - ${fileInfo.reason}`)\n\t\t})\n\t}\n\n\t// Add explanatory text\n\texpandableContent\n\t\t.append('div')\n\t\t.style('margin-top', '12px')\n\t\t.style('padding', '6px 8px')\n\t\t.style('background-color', '#f8f9fa')\n\t\t.style('border-radius', '4px')\n\t\t.style('font-size', '11px')\n\t\t.style('color', '#495057')\n\t\t.style('line-height', '1.3')\n\t\t.text('Files are filtered to ensure optimal performance and avoid duplicates.')\n\n\t// Track expanded state\n\tlet isExpanded = false\n\n\t// Add click handler for expand/collapse\n\texpandableHeader.on('click', function () {\n\t\tisExpanded = !isExpanded\n\n\t\tif (isExpanded) {\n\t\t\t// Expand\n\t\t\texpandableContent.style('display', 'block')\n\t\t\texpandIcon.style('transform', 'rotate(90deg)').text('\u25BC')\n\t\t} else {\n\t\t\t// Collapse\n\t\t\texpandableContent.style('display', 'none')\n\t\t\texpandIcon.style('transform', 'rotate(0deg)').text('\u25B6')\n\t\t}\n\t})\n}\n\n/**\n * Updates deduplication status display in MAF options section\n * Shows summary of file filtering and provides expandable details\n *\n * @param obj - Main application object containing UI references\n * @param deduplicationStats - Statistics from backend deduplication process\n * @returns void\n */\nfunction updateDedupStatus(obj, deduplicationStats) {\n\tif (!obj.dedupStatusElement) return\n\n\tconst dedupElement = obj.dedupStatusElement\n\tdedupElement.selectAll('*').remove() // Clear existing content\n\n\tif (!deduplicationStats) {\n\t\tdedupElement.style('color', '#666').text('No deduplication data available')\n\t\treturn\n\t}\n\n\t// Create a container for the detailed dedup info\n\tconst dedupContainer = dedupElement\n\t\t.append('div')\n\t\t.style('display', 'flex')\n\t\t.style('flex-direction', 'column')\n\t\t.style('gap', '6px')\n\n\tconst duplicatesRemoved = deduplicationStats.duplicatesRemoved || 0\n\tconst sizeFilteredCount = deduplicationStats.filteredFiles ? deduplicationStats.filteredFiles.length : 0\n\tconst totalExcluded = duplicatesRemoved + sizeFilteredCount\n\tconst originalTotal = deduplicationStats.originalFileCount + sizeFilteredCount\n\n\tif (totalExcluded > 0) {\n\t\t// Summary line\n\t\tconst summaryDiv = dedupContainer\n\t\t\t.append('div')\n\t\t\t.style('font-size', '14px')\n\t\t\t.style('color', '#d84315')\n\t\t\t.style('font-weight', '500')\n\n\t\tsummaryDiv.html(\n\t\t\t`Found <strong>${originalTotal}</strong> total MAF files, excluded <strong>${totalExcluded}</strong>`\n\t\t)\n\n\t\t// Final result line\n\t\tconst resultDiv = dedupContainer\n\t\t\t.append('div')\n\t\t\t.style('font-size', '13px')\n\t\t\t.style('color', '#28a745')\n\t\t\t.style('font-weight', '500')\n\n\t\tresultDiv.html(`Showing <strong>${deduplicationStats.deduplicatedFileCount}</strong> unique cases`)\n\t\tif (duplicatesRemoved > 0) {\n\t\t\tresultDiv.append('span').style('color', '#666').style('font-weight', 'normal').text(' (largest file per case)')\n\t\t}\n\n\t\t// Add inline expandable section instead of popup link\n\t\tcreateExpandableDeduplicationSection(dedupContainer, deduplicationStats)\n\t} else {\n\t\t// No exclusions\n\t\tdedupContainer\n\t\t\t.append('div')\n\t\t\t.style('color', '#28a745')\n\t\t\t.style('font-weight', '500')\n\t\t\t.style('font-size', '14px')\n\t\t\t.html(`All <strong>${deduplicationStats.deduplicatedFileCount}</strong> files included`)\n\n\t\tdedupContainer\n\t\t\t.append('div')\n\t\t\t.style('color', '#666')\n\t\t\t.style('font-size', '13px')\n\t\t\t.text('No duplicates or oversized files found')\n\t}\n}\n\n/** Main UI Builders */\n\n/**\n * Creates MAF options content using the new component system\n */\nfunction createMAFOptionsContent(container: any, obj: any) {\n\tcontainer.selectAll('*').remove()\n\n\t// Create options grid\n\tconst optionsGrid = container.append('div')\n\tapplyStyles(optionsGrid, STYLES.gridTwoColumn)\n\toptionsGrid.style('margin-top', '10px')\n\n\t// Min Total Depth input\n\tcreateNumberInput(optionsGrid, {\n\t\tlabel: 'Min Total Depth:',\n\t\tvalue: obj.mafOptions.minTotalDepth || 10,\n\t\tmin: 0,\n\t\tstep: 1,\n\t\twidth: '80px',\n\t\tlabelWidth: '140px',\n\t\tonChange: value => {\n\t\t\tif (value >= 0) obj.mafOptions.minTotalDepth = value\n\t\t}\n\t})\n\n\t// Min Mutant Allele Count input\n\tcreateNumberInput(optionsGrid, {\n\t\tlabel: 'Min Mutant Allele Count:',\n\t\tvalue: obj.mafOptions.minAltAlleleCount || 2,\n\t\tmin: 0,\n\t\tstep: 1,\n\t\twidth: '80px',\n\t\tlabelWidth: '160px',\n\t\tonChange: value => {\n\t\t\tif (value >= 0) obj.mafOptions.minAltAlleleCount = value\n\t\t}\n\t})\n\n\t// Consequences section\n\tcreateConsequencesSection(optionsGrid, obj)\n\n\t// Hypermutator input\n\tcreateNumberInput(optionsGrid, {\n\t\tlabel: 'Hypermutator Max Cut Off:',\n\t\tvalue: obj.mafOptions.hyperMutator || 8000,\n\t\tmin: 0,\n\t\tstep: 100,\n\t\twidth: '70px',\n\t\tlabelWidth: '160px',\n\t\tonChange: value => {\n\t\t\tif (value >= 0) obj.mafOptions.hyperMutator = value\n\t\t}\n\t})\n\n\t// Workflow type (read-only)\n\tcreateWorkflowSection(optionsGrid)\n\n\t// Deduplication status\n\tcreateDeduplicationSection(optionsGrid, obj)\n}\n\n/**\n * Creates the consequences selection section\n */\nfunction createConsequencesSection(optionsGrid: any, obj: any) {\n\tconst consequencesContainer = optionsGrid\n\t\t.append('div')\n\t\t.style('display', 'flex')\n\t\t.style('align-items', 'flex-start')\n\t\t.style('gap', '8px')\n\t\t.style('grid-column', '1 / -1')\n\n\tconsequencesContainer\n\t\t.append('label')\n\t\t.style('font-size', '14px')\n\t\t.style('font-weight', '500')\n\t\t.style('min-width', '100px')\n\t\t.style('margin-top', '4px')\n\t\t.text('Consequences:')\n\n\tconst selectionDiv = consequencesContainer.append('div').style('flex', '1')\n\n\t// Checkbox container\n\tconst checkboxContainer = selectionDiv\n\t\t.append('div')\n\t\t.style('display', 'grid')\n\t\t.style('grid-template-columns', 'repeat(auto-fit, minmax(200px, 1fr))')\n\t\t.style('gap', '8px')\n\t\t.style('margin-bottom', '12px')\n\n\t// Create checkboxes for mutation classes\n\tcreateMutationClassCheckboxes(checkboxContainer, obj)\n\n\t// Add info panel\n\tcreateInfoPanel(selectionDiv, {\n\t\ttitle: 'Mutation Types:',\n\t\tcontent: `Select the types of mutations to include in your analysis.\n High-impact mutations (missense, nonsense, frameshift) are selected by default.\n Silent/synonymous mutations are excluded by default as they don't change protein sequence.`\n\t})\n}\n\n/**\n * Creates mutation class checkboxes\n */\nfunction createMutationClassCheckboxes(container: any, obj: any) {\n\tconst seenLabels = new Set()\n\n\tfor (const cls in mclass) {\n\t\tif (mclass[cls].dt !== dtsnvindel) continue\n\t\tif (skipMAFclasses.includes(cls)) continue\n\n\t\tconst labelText = mclass[cls].label\n\t\tif (seenLabels.has(labelText)) continue\n\t\tseenLabels.add(labelText)\n\n\t\tconst isDefaultChecked = defaultCheckedClasses.includes(cls)\n\t\tconst checkboxDiv = container.append('div')\n\n\t\tmake_one_checkbox({\n\t\t\tholder: checkboxDiv,\n\t\t\tlabeltext: labelText,\n\t\t\tchecked: isDefaultChecked,\n\t\t\tid: `consequence-${cls}`,\n\t\t\tdivstyle: {\n\t\t\t\t'font-size': '13px',\n\t\t\t\tmargin: '0'\n\t\t\t},\n\t\t\tcallback: async isChecked => {\n\t\t\t\tif (isChecked) {\n\t\t\t\t\tif (!obj.mafOptions.consequences.includes(cls)) {\n\t\t\t\t\t\tobj.mafOptions.consequences.push(cls)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tobj.mafOptions.consequences = obj.mafOptions.consequences.filter(c => c !== cls)\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tcheckboxDiv.select('label').attr('title', mclass[cls].desc)\n\n\t\tif (isDefaultChecked && !obj.mafOptions.consequences.includes(cls)) {\n\t\t\tobj.mafOptions.consequences.push(cls)\n\t\t}\n\t}\n}\n\n/**\n * Creates workflow type section (read-only)\n */\nfunction createWorkflowSection(optionsGrid: any) {\n\tconst workflowContainer = optionsGrid.append('div')\n\tapplyStyles(workflowContainer, STYLES.flexRow)\n\tworkflowContainer.style('grid-column', '1 / -1')\n\n\tconst label = workflowContainer.append('label')\n\tapplyStyles(label, STYLES.label)\n\tlabel.style('min-width', '100px').text('Workflow Type:')\n\n\tworkflowContainer\n\t\t.append('span')\n\t\t.style('font-size', '14px')\n\t\t.style('color', '#666')\n\t\t.text('Aliquot Ensemble Somatic Variant Merging and Masking')\n}\n\n/**\n * Creates deduplication status section\n */\nfunction createDeduplicationSection(optionsGrid: any, obj: any) {\n\tconst dedupContainer = optionsGrid.append('div')\n\tapplyStyles(dedupContainer, STYLES.flexRow)\n\tdedupContainer.style('grid-column', '1 / -1')\n\n\tconst label = dedupContainer.append('label')\n\tapplyStyles(label, STYLES.label)\n\tlabel.style('min-width', '100px').text('Deduplication:')\n\n\tconst dedupStatus = dedupContainer\n\t\t.append('span')\n\t\t.attr('id', 'dedup-status')\n\t\t.style('font-size', '14px')\n\t\t.style('color', '#666')\n\n\tobj.dedupStatusElement = dedupStatus\n}\n\n/**\n * Creates CNV options content using the new component system\n */\nfunction createCNVOptionsContent(container: any, obj: any) {\n\tcontainer.selectAll('*').remove()\n\n\tif (!obj.cnvOptions.dataType) {\n\t\tobj.cnvOptions.dataType = 'segment_mean'\n\t}\n\n\tconst optionsGrid = container.append('div')\n\tapplyStyles(optionsGrid, STYLES.gridTwoColumn)\n\toptionsGrid.style('margin-top', '10px')\n\n\t// Data Type radio section\n\tcreateDataTypeRadioSection(optionsGrid, obj)\n\n\t// Loss Threshold\n\tcreateNumberInput(optionsGrid, {\n\t\tlabel: 'Loss Threshold:',\n\t\tvalue: obj.cnvOptions.lossThreshold || -0.4,\n\t\tmin: -10,\n\t\tmax: 0,\n\t\tstep: 0.1,\n\t\twidth: '70px',\n\t\tlabelWidth: '120px',\n\t\tonChange: value => {\n\t\t\tif (value <= 0) obj.cnvOptions.lossThreshold = value\n\t\t}\n\t})\n\n\t// Gain Threshold\n\tcreateNumberInput(optionsGrid, {\n\t\tlabel: 'Gain Threshold:',\n\t\tvalue: obj.cnvOptions.gainThreshold || 0.3,\n\t\tmin: 0,\n\t\tmax: 10,\n\t\tstep: 0.1,\n\t\twidth: '70px',\n\t\tlabelWidth: '120px',\n\t\tonChange: value => {\n\t\t\tif (value >= 0) obj.cnvOptions.gainThreshold = value\n\t\t}\n\t})\n\n\t// Hypermutator\n\tcreateNumberInput(optionsGrid, {\n\t\tlabel: 'Hypermutator Max Cut Off:',\n\t\tvalue: obj.cnvOptions.hyperMutator || 500,\n\t\tmin: 0,\n\t\tstep: 100,\n\t\twidth: '70px',\n\t\tlabelWidth: '160px',\n\t\tonChange: value => {\n\t\t\tif (value >= 0) obj.cnvOptions.hyperMutator = value\n\t\t}\n\t})\n\n\t// Segment Length\n\tcreateSegmentLengthSection(optionsGrid, obj)\n\n\t// Help section\n\tcreateCNVHelpSection(optionsGrid)\n}\n\n/**\n * Creates CNV data type radio section\n */\nfunction createDataTypeRadioSection(optionsGrid: any, obj: any) {\n\tconst dataTypeContainer = optionsGrid.append('div')\n\tapplyStyles(dataTypeContainer, STYLES.flexRow)\n\tdataTypeContainer.style('grid-column', '1 / -1')\n\n\tconst label = dataTypeContainer.append('label')\n\tapplyStyles(label, STYLES.label)\n\tlabel.style('min-width', '80px').text('Data Type:')\n\n\tconst radioContainer = dataTypeContainer.append('div')\n\tapplyStyles(radioContainer, STYLES.flexRow)\n\tradioContainer.style('gap', '6px')\n\n\tconst radio = radioContainer\n\t\t.append('input')\n\t\t.attr('type', 'radio')\n\t\t.attr('id', 'cnv-segment-mean')\n\t\t.attr('name', 'cnv-data-type')\n\t\t.attr('value', 'segment_mean')\n\t\t.property('checked', obj.cnvOptions.dataType === 'segment_mean')\n\t\t.style('margin', '0')\n\t\t.style('cursor', 'pointer')\n\n\tradioContainer\n\t\t.append('label')\n\t\t.attr('for', 'cnv-segment-mean')\n\t\t.style('cursor', 'pointer')\n\t\t.style('font-size', '14px')\n\t\t.style('color', '#333')\n\t\t.text('Segment mean')\n\n\tradio.on('change', function (this: HTMLInputElement) {\n\t\tif (this.checked) {\n\t\t\tobj.cnvOptions.dataType = this.value\n\t\t}\n\t})\n}\n\n/**\n * Creates segment length section with unit\n */\nfunction createSegmentLengthSection(optionsGrid: any, obj: any) {\n\tconst segmentContainer = optionsGrid.append('div')\n\tapplyStyles(segmentContainer, STYLES.flexRow)\n\tsegmentContainer.style('grid-column', '1 / -1')\n\n\tconst label = segmentContainer.append('label')\n\tapplyStyles(label, STYLES.label)\n\tlabel.style('min-width', '140px').text('Segment Length Cutoff:')\n\n\tconst input = segmentContainer\n\t\t.append('input')\n\t\t.attr('type', 'number')\n\t\t.attr('min', '0')\n\t\t.attr('max', '2000000')\n\t\t.attr('step', '1000')\n\t\t.attr('value', obj.cnvOptions.segLength || 0)\n\n\tapplyStyles(input, STYLES.numberInput)\n\tinput.style('width', '100px')\n\n\tsegmentContainer.append('span').style('font-size', '13px').style('color', '#666').text('bp')\n\n\tinput.on('input', function (this: HTMLInputElement) {\n\t\tconst value = parseInt(this.value, 10)\n\t\tif (!isNaN(value) && value >= 0) {\n\t\t\tobj.cnvOptions.segLength = value\n\t\t}\n\t})\n}\n\n/**\n * Creates CNV help section\n */\nfunction createCNVHelpSection(optionsGrid: any) {\n\tconst helpContainer = optionsGrid.append('div').style('grid-column', '1 / -1').style('margin-top', '8px')\n\n\tcreateInfoPanel(helpContainer, {\n\t\ttitle: 'CNV Options:',\n\t\tcontent: `\u2022 Loss Threshold: Log2 ratio for copy number loss (negative values)<br>\n \u2022 Gain Threshold: Log2 ratio for copy number gain (positive values)<br>\n \u2022 Hypermutator Max Cut Off: Maximum number of CNVs per case<br>\n \u2022 Segment Length: Maximum CNV segment size to include (no filter if 0)`\n\t})\n}\n\n/**\n * Main refactored makeControls function\n */\nfunction makeControls(obj: any) {\n\t// Initialize options if not exists\n\tif (!obj.mafOptions) {\n\t\tobj.mafOptions = {\n\t\t\tminTotalDepth: 10,\n\t\t\tminAltAlleleCount: 2,\n\t\t\tconsequences: [],\n\t\t\thyperMutator: 8000\n\t\t}\n\t}\n\tif (!obj.cnvOptions) {\n\t\tobj.cnvOptions = {\n\t\t\tlossThreshold: -0.4,\n\t\t\tgainThreshold: 0.3,\n\t\t\tsegLength: 0,\n\t\t\thyperMutator: 500\n\t\t}\n\t}\n\n\tobj.dataTypeStates = {\n\t\tmaf: true,\n\t\tcnv: true,\n\t\tfusion: false\n\t}\n\n\t// Create main options table\n\tconst optionsTable = createOptionsTable(obj.controlDiv)\n\tcreateTableHeader(optionsTable, ['Data Type', 'Options'])\n\n\t// MAF row\n\tconst mafRow = createDataTypeRow(optionsTable, {\n\t\tid: 'maf-checkbox',\n\t\tlabel: 'MAF (Mutation)',\n\t\tchecked: true,\n\t\tonChange: isChecked => {\n\t\t\tobj.dataTypeStates.maf = isChecked\n\t\t\tmafRow.optionsContainer.style('display', isChecked ? 'block' : 'none')\n\t\t\tobj.updateSubmitButtonState?.()\n\t\t},\n\t\tcreateOptionsContent: container => createMAFOptionsContent(container, obj)\n\t})\n\n\t// CNV row\n\tconst cnvRow = createDataTypeRow(optionsTable, {\n\t\tid: 'cnv-checkbox',\n\t\tlabel: 'CNV (Copy Number)',\n\t\tchecked: true,\n\t\tonChange: isChecked => {\n\t\t\tobj.dataTypeStates.cnv = isChecked\n\t\t\tcnvRow.optionsContainer.style('display', isChecked ? 'block' : 'none')\n\t\t\tif (isChecked) {\n\t\t\t\tcreateCNVOptionsContent(cnvRow.optionsContainer, obj)\n\t\t\t}\n\t\t\tobj.updateSubmitButtonState?.()\n\t\t},\n\t\tcreateOptionsContent: container => createCNVOptionsContent(container, obj)\n\t})\n\n\t// Fusion row (placeholder)\n\tconst fusionRow = createDataTypeRow(optionsTable, {\n\t\tid: 'fusion-checkbox',\n\t\tlabel: 'Fusion',\n\t\tchecked: false,\n\t\tonChange: isChecked => {\n\t\t\tobj.dataTypeStates.fusion = isChecked\n\t\t\tfusionRow.optionsContainer.style('display', isChecked ? 'block' : 'none')\n\t\t\tobj.updateSubmitButtonState?.()\n\t\t},\n\t\tcreateOptionsContent: container => {\n\t\t\tcontainer\n\t\t\t\t.append('div')\n\t\t\t\t.style('color', '#666')\n\t\t\t\t.style('font-style', 'italic')\n\t\t\t\t.text('Please login to access RNA fusion data.')\n\t\t}\n\t})\n\n\t// GRIN2 row (info only)\n\tcreateGRIN2InfoRow(optionsTable)\n\n\t// Submit button\n\tcreateSubmitButton(obj)\n\n\t// Store references\n\tobj.mafOptionsContainer = mafRow.optionsContainer\n\tobj.cnvOptionsContainer = cnvRow.optionsContainer\n\tobj.fusionOptionsContainer = fusionRow.optionsContainer\n}\n\n/**\n * Creates GRIN2 info row\n */\nfunction createGRIN2InfoRow(optionsTable: any) {\n\tconst grin2Row = optionsTable.append('tr')\n\n\tconst labelCell = grin2Row.append('td')\n\tapplyStyles(labelCell, STYLES.tableCell)\n\tlabelCell.append('div').style('font-weight', '500').style('color', '#333').text('GRIN2 Analysis')\n\n\tconst optionsCell = grin2Row.append('td')\n\tapplyStyles(optionsCell, STYLES.tableCell)\n\toptionsCell.append('div').style('color', '#666').text('GRIN2 analysis options will be configured here')\n}\n\n/**\n * Creates submit button with state management\n */\nfunction createSubmitButton(obj: any) {\n\tconst submitButtonContainer = obj.controlDiv\n\t\t.append('div')\n\t\t.style('margin-top', '2px')\n\t\t.style('margin-bottom', '2px')\n\t\t.style('text-align', 'left')\n\n\tconst submitButton = submitButtonContainer\n\t\t.append('button')\n\t\t.attr('id', 'submit-options-button')\n\t\t.style('margin', '10px 10px 0 0')\n\t\t.text('Apply Options & Refresh Files')\n\n\tobj.submitButton = submitButton\n\n\tsubmitButton.on('click', function (this: HTMLButtonElement) {\n\t\tif (!this.disabled) {\n\t\t\tgetFilesAndShowTable(obj)\n\t\t}\n\t})\n\n\t// State management function\n\tobj.updateSubmitButtonState = function () {\n\t\tconst hasAnyDataTypeSelected = obj.dataTypeStates.maf || obj.dataTypeStates.cnv || obj.dataTypeStates.fusion\n\n\t\tif (hasAnyDataTypeSelected) {\n\t\t\tsubmitButton.attr('disabled', null).text('Apply Options & Refresh Files')\n\t\t} else {\n\t\t\tsubmitButton.attr('disabled', true).text('Select at least one data type')\n\t\t}\n\t}\n\n\t// Initial state check\n\tobj.updateSubmitButtonState()\n}\n\n/**\n * Fetches available files and renders the selection table\n * Main data loading function that handles file filtering and display\n *\n * @param obj - Main application object containing configuration\n * @returns void\n */\nasync function getFilesAndShowTable(obj) {\n\tobj.tableDiv.selectAll('*').remove()\n\tobj.resultDiv.selectAll('*').remove()\n\tconst wait = obj.tableDiv.append('div').style('margin', '30px 10px 10px 10px').text('Loading...')\n\n\tlet result\n\ttry {\n\t\tconst body: GdcGRIN2listRequest = {}\n\n\t\tif (obj.opts.filter0) body.filter0 = obj.opts.filter0\n\n\t\t// Always include mafOptions when MAF is selected\n\t\tif (obj.dataTypeStates.maf) {\n\t\t\tbody.mafOptions = {\n\t\t\t\texperimentalStrategy: obj.opts.experimentalStrategy || 'WXS'\n\t\t\t}\n\t\t}\n\n\t\t// Only include cnvOptions when CNV is selected\n\t\tif (obj.dataTypeStates.cnv) {\n\t\t\tbody.cnvOptions = {\n\t\t\t\tdataType: obj.cnvOptions.dataType\n\t\t\t}\n\t\t}\n\t\tconsole.log('Request body for GRIN2list:', body)\n\t\tresult = await dofetch3('gdc/GRIN2list', { body })\n\t\tconsole.log('GRIN2list result:', result)\n\n\t\t// Modified to handle both MAF and CNV files\n\t\tif (result.error) throw result.error\n\n\t\t// Validate that we have the expected data structure based on selected data types\n\t\tif (obj.dataTypeStates.maf && (!result.mafFiles || !Array.isArray(result.mafFiles.files))) {\n\t\t\tthrow 'Invalid response: missing mafFiles.files array'\n\t\t}\n\n\t\tif (obj.dataTypeStates.cnv && (!result.cnvFiles || !Array.isArray(result.cnvFiles.files))) {\n\t\t\tthrow 'Invalid response: missing cnvFiles.files array'\n\t\t}\n\n\t\t// Check if we have any files to work with\n\t\tconst hasMafFiles = result.mafFiles?.files?.length > 0\n\t\tconst hasCnvFiles = result.cnvFiles?.files?.length > 0\n\n\t\tif (obj.dataTypeStates.maf && !hasMafFiles) {\n\t\t\tthrow 'No MAF files available for the selected criteria.'\n\t\t}\n\n\t\tif (obj.dataTypeStates.cnv && !hasCnvFiles) {\n\t\t\tthrow 'No CNV files available for the selected criteria.'\n\t\t}\n\n\t\tif (!hasMafFiles && !hasCnvFiles) {\n\t\t\tthrow 'No files available for the selected data types.'\n\t\t}\n\n\t\t// Update the dedup status in MAF options (only if MAF files exist)\n\t\tif (result.mafFiles && result.mafFiles.deduplicationStats) {\n\t\t\tupdateDedupStatus(obj, result.mafFiles.deduplicationStats)\n\t\t}\n\n\t\t// Create CNV files map for lookup\n\t\tconst cnvFilesByCase = new Map<string, any>()\n\t\tif (obj.dataTypeStates.cnv && result.cnvFiles && result.cnvFiles.files) {\n\t\t\tfor (const cnvFile of result.cnvFiles.files) {\n\t\t\t\tconst caseId = cnvFile.case_submitter_id\n\t\t\t\tif (!cnvFilesByCase.has(caseId)) {\n\t\t\t\t\tcnvFilesByCase.set(caseId, cnvFile)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// Filter files based on selected data types and availability\n\t\tlet filteredFiles = result.mafFiles ? result.mafFiles.files : []\n\t\tlet filteringMessage = ''\n\n\t\t// Determine which data types are selected\n\t\tconst mafSelected = obj.dataTypeStates.maf\n\t\tconst cnvSelected = obj.dataTypeStates.cnv\n\n\t\t// If both MAF and CNV are selected, only include cases that have both\n\t\tif (mafSelected && cnvSelected) {\n\t\t\tconst originalCount = filteredFiles.length\n\t\t\tfilteredFiles = filteredFiles.filter(mafFile => {\n\t\t\t\tconst caseId = mafFile.case_submitter_id\n\t\t\t\tconst hasCnv = cnvFilesByCase.has(caseId)\n\t\t\t\treturn hasCnv\n\t\t\t})\n\t\t\tconst filteredCount = filteredFiles.length\n\t\t\tconst excludedCount = originalCount - filteredCount\n\n\t\t\tif (excludedCount > 0) {\n\t\t\t\tfilteringMessage = `Filtered to ${filteredCount} cases with both MAF and CNV files (excluded ${excludedCount} cases with only MAF files)`\n\t\t\t} else {\n\t\t\t\tfilteringMessage = `All ${filteredCount} cases have both MAF and CNV files`\n\t\t\t}\n\t\t}\n\t\t// If only CNV is selected, filter to cases that have CNV files\n\t\telse if (cnvSelected && !mafSelected) {\n\t\t\tconst originalCount = filteredFiles.length\n\t\t\t// In this case, we need to build the list from CNV files instead\n\t\t\t// const cnvCases = Array.from(cnvFilesByCase.keys())\n\t\t\tfilteredFiles = result.cnvFiles ? result.cnvFiles.files : []\n\t\t\tconst filteredCount = filteredFiles.length\n\t\t\tconst excludedCount = originalCount - filteredCount\n\n\t\t\tif (excludedCount > 0) {\n\t\t\t\tfilteringMessage = `Filtered to ${filteredCount} cases with CNV files (excluded ${excludedCount} cases without CNV files)`\n\t\t\t}\n\t\t}\n\t\t// If only MAF is selected, no additional filtering needed\n\t\telse if (mafSelected && !cnvSelected) {\n\t\t\tfilteringMessage = `Showing ${filteredFiles.length} cases with MAF files`\n\t\t}\n\n\t\t// Check if we have any files left after filtering\n\t\tif (filteredFiles.length === 0) {\n\t\t\tthrow 'No files match the selected data type criteria. Try adjusting your data type selections.'\n\t\t}\n\n\t\t// Render status message with filtering information\n\t\tconst mafFiles = result.mafFiles ? result.mafFiles.files : []\n\t\tconst cnvFiles = result.cnvFiles ? result.cnvFiles.files : []\n\t\tconst mafTotal = result.mafFiles ? result.mafFiles.filesTotal : 0\n\n\t\t// Determine what to show based on selected data types\n\t\tlet statusMessage = ''\n\t\tif (mafSelected && cnvSelected) {\n\t\t\t// Both selected - show based on MAF files (which is the base)\n\t\t\tif (mafTotal > mafFiles.length) {\n\t\t\t\tstatusMessage = `Showing first ${mafFiles.length.toLocaleString()} files out of ${mafTotal.toLocaleString()} total.`\n\t\t\t} else {\n\t\t\t\tstatusMessage = `Showing ${filteredFiles.length.toLocaleString()} files.`\n\t\t\t}\n\t\t} else if (mafSelected && !cnvSelected) {\n\t\t\t// MAF only\n\t\t\tif (mafTotal > mafFiles.length) {\n\t\t\t\tstatusMessage = `Showing first ${mafFiles.length.toLocaleString()} MAF files out of ${mafTotal.toLocaleString()} total.`\n\t\t\t} else {\n\t\t\t\tstatusMessage = `Showing ${filteredFiles.length.toLocaleString()} MAF files.`\n\t\t\t}\n\t\t} else if (!mafSelected && cnvSelected) {\n\t\t\t// CNV only\n\t\t\tstatusMessage = `Showing ${cnvFiles.length.toLocaleString()} CNV files.`\n\t\t}\n\n\t\twait.html(`\n\t\t\t${statusMessage}<br>\n\t\t\t${filteringMessage ? `<span style=\"color: #666; font-style: italic;\">${filteringMessage}</span>` : ''}\n\t\t`)\n\n\t\t// Build table columns dynamically based on selected data types\n\t\tconst dynamicTableColumns = [\n\t\t\t{ label: 'Case', sortable: true },\n\t\t\t{ label: 'Project', sortable: true }\n\t\t]\n\n\t\t// Add MAF columns only if MAF is selected\n\t\tif (obj.dataTypeStates.maf) {\n\t\t\tdynamicTableColumns.push({ label: 'MAF Sample', sortable: false }, {\n\t\t\t\tlabel: 'MAF File Size',\n\t\t\t\tbarplot: { tickFormat: '~s' },\n\t\t\t\tsortable: true\n\t\t\t} as any)\n\t\t}\n\n\t\t// Add CNV columns only if CNV is selected\n\t\tif (obj.dataTypeStates.cnv) {\n\t\t\tdynamicTableColumns.push({ label: 'CNV File ID', sortable: true }, { label: 'CNV Sample', sortable: false }, {\n\t\t\t\tlabel: 'CNV File Size',\n\t\t\t\tbarplot: { tickFormat: '~s' },\n\t\t\t\tsortable: true\n\t\t\t} as any)\n\t\t}\n\n\t\t// Add Fusion columns only if Fusion is selected (when implemented)\n\t\tif (obj.dataTypeStates.fusion) {\n\t\t\tdynamicTableColumns.push(\n\t\t\t\t{ label: 'Fusion File ID', sortable: true },\n\t\t\t\t{ label: 'Fusion Sample', sortable: false },\n\t\t\t\t{ label: 'Fusion File Size', barplot: { tickFormat: '~s' }, sortable: true } as any\n\t\t\t)\n\t\t}\n\n\t\tconst rows: TableRowItem[][] = []\n\n\t\t// Build table rows using filtered files**\n\t\tfor (const f of filteredFiles) {\n\t\t\tconst row: TableRowItem[] = []\n\n\t\t\t// Always include Case and Project columns\n\t\t\trow.push(\n\t\t\t\t{\n\t\t\t\t\thtml: `<a href=https://portal.gdc.cancer.gov/files/${f.id} target=_blank>${f.case_submitter_id}</a>`,\n\t\t\t\t\tvalue: f.case_submitter_id\n\t\t\t\t},\n\t\t\t\t{ value: f.project_id }\n\t\t\t)\n\n\t\t\t// Add MAF columns only if MAF is selected\n\t\t\tif (obj.dataTypeStates.maf) {\n\t\t\t\trow.push(\n\t\t\t\t\t{\n\t\t\t\t\t\thtml: f.sample_types\n\t\t\t\t\t\t\t.map(i => {\n\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t'<span class=\"sja_mcdot\" style=\"padding:1px 8px;background:#ddd;color:black;white-space:nowrap\">' +\n\t\t\t\t\t\t\t\t\ti +\n\t\t\t\t\t\t\t\t\t'</span>'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.join(' ')\n\t\t\t\t\t},\n\t\t\t\t\t{ value: f.file_size }\n\t\t\t\t)\n\t\t\t}\n\n\t\t\t// Add CNV columns only if CNV is selected\n\t\t\tif (obj.dataTypeStates.cnv) {\n\t\t\t\tconst cnvFile = cnvFilesByCase.get(f.case_submitter_id)\n\n\t\t\t\t// **IMPROVED: Better handling when CNV file should exist**\n\t\t\t\tif (cnvSelected && !cnvFile) {\n\t\t\t\t\tconsole.warn(`Expected CNV file for case ${f.case_submitter_id} but not found`)\n\t\t\t\t}\n\n\t\t\t\trow.push(\n\t\t\t\t\t{\n\t\t\t\t\t\thtml: cnvFile\n\t\t\t\t\t\t\t? `<a href=https://portal.gdc.cancer.gov/files/${cnvFile.id} target=_blank>${cnvFile.id}</a>`\n\t\t\t\t\t\t\t: '<span style=\"color: #dc3545; font-weight: 500;\">Missing CNV file</span>',\n\t\t\t\t\t\tvalue: cnvFile ? cnvFile.id : 'Missing CNV file'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\thtml:\n\t\t\t\t\t\t\tcnvFile && cnvFile.sample_types\n\t\t\t\t\t\t\t\t? cnvFile.sample_types\n\t\t\t\t\t\t\t\t\t\t.map(i => {\n\t\t\t\t\t\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t\t\t\t\t\t'<span class=\"sja_mcdot\" style=\"padding:1px 8px;background:#ddd;color:black;white-space:nowrap\">' +\n\t\t\t\t\t\t\t\t\t\t\t\ti +\n\t\t\t\t\t\t\t\t\t\t\t\t'</span>'\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t\t\t.join(' ')\n\t\t\t\t\t\t\t\t: '<span style=\"color: #dc3545;\">No CNV sample</span>',\n\t\t\t\t\t\tvalue: cnvFile && cnvFile.sample_types ? cnvFile.sample_types.join(' ') : 'No CNV sample'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tvalue: cnvFile ? cnvFile.file_size : 0\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t}\n\n\t\t\t// Add Fusion columns only if Fusion is selected (placeholder for when implemented)\n\t\t\tif (obj.dataTypeStates.fusion) {\n\t\t\t\trow.push(\n\t\t\t\t\t{ html: '<span style=\"color: #6c757d;\">No Fusion file</span>', value: 'No Fusion file' },\n\t\t\t\t\t{ html: '<span style=\"color: #6c757d;\">No Fusion sample</span>', value: 'No Fusion sample' },\n\t\t\t\t\t{ value: 0 }\n\t\t\t\t)\n\t\t\t}\n\n\t\t\trows.push(row)\n\t\t}\n\n\t\t// Use filteredFiles for table operations**\n\t\tobj.mafTableArg = {\n\t\t\trows,\n\t\t\tcolumns: dynamicTableColumns,\n\t\t\tresize: false,\n\t\t\tdiv: obj.tableDiv.append('div'),\n\t\t\tselectAll: true,\n\t\t\tdataTestId: 'sja_FileTable',\n\t\t\theader: { allowSort: true },\n\t\t\tselectedRows: [],\n\t\t\tbuttons: [\n\t\t\t\t{\n\t\t\t\t\ttext: 'Run GRIN2 Analysis',\n\t\t\t\t\tonChange: (lst, button) => updateButtonBySelectionChange(lst, button, filteredFiles),\n\t\t\t\t\tcallback: (lst, button) => runGRIN2Analysis(lst, button, obj, filteredFiles)\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\n\t\t// Render the table with the dynamic columns\n\t\trenderTable(obj.mafTableArg)\n\t} catch (e) {\n\t\twait.text(e instanceof Error ? e.message : String(e))\n\t\tif (e instanceof Error && e.stack) console.log(e.stack)\n\t}\n\n\tfunction updateButtonBySelectionChange(lst, button, filteredFiles) {\n\t\tif (obj.busy) {\n\t\t\t/* is waiting for server response. do not proceed to alter submit button\n because the checkboxes in the maf table cannot be disabled when submission is running,\n thus user can still check and uncheck maf files, that can cause the submit button to be enabled\n thus do below to disable it\n */\n\t\t\tbutton.property('disabled', true)\n\t\t\treturn\n\t\t}\n\n\t\tlet sum = 0\n\t\tfor (const i of lst) sum += filteredFiles[i].file_size\n\t\tif (sum == 0) {\n\t\t\tbutton.innerHTML = 'No file selected'\n\t\t\tbutton.disabled = true\n\t\t\treturn\n\t\t}\n\n\t\t// TEMP fix! later add `buttonsToLeft:true` at line 321; this fix avoid changing table.ts to make it easy to cherrypick for 2.16 gdc release\n\t\tselect(button.parentElement).style('float', 'left')\n\n\t\tbutton.disabled = false\n\t\tconst mafMaxSize = result.mafFiles ? result.mafFiles.maxTotalSizeCompressed : Infinity\n\t\tconst cnvMaxSize = result.cnvFiles ? result.cnvFiles.maxTotalSizeCompressed : Infinity\n\t\tconst maxSize = Math.min(mafMaxSize, cnvMaxSize) // Use the smaller limit\n\n\t\tbutton.innerHTML = sum < maxSize ? `Run GRIN2 Analysis` : `Run GRIN2 Analysis (Large Files)`\n\t}\n\n\t/* after table is created, on clicking download btn for first time, create a <span> after download btn,\n in order to show server-sent message on problematic files (emtpy, failed, invalid)\n scope this <span> for easy access by helpers,\n detect if it is truthy to only create it once\n */\n\n\t/**\n\t * Formats selected files for GRIN2 Rust backend\n\t *\n\t * @param lst - Array of selected table row indices\n\t * @param button - Button element that triggered the action\n\t * @param obj - Main application object containing configuration\n\t * @param filteredFiles - Array of files to filter from (default: result.files)\n\t * @returns void\n\t * Creates structure expected by Rust:\n\t * {\n\t * caseFiles: {\n\t * [case_submitter_id]: { maf: file_id, cnv: file_id },\n\t * },\n\t * mafOptions: { minTotalDepth: 10, minAltAlleleCount: 2, consequences: [] },\n\t * cnvOptions: { dataType: 'segment_mean', lossThreshold: -0.4, gainThreshold: 0.3, segLength: 0, hyperMutator: 500 }\n\t * }\n\t *\n\t */\n\n\tasync function runGRIN2Analysis(lst, button, obj, filteredFiles = result.files) {\n\t\t// Check what data types are selected\n\t\tconst mafSelected = obj.dataTypeStates.maf\n\t\tconst cnvSelected = obj.dataTypeStates.cnv\n\n\t\t// Build the request object conditionally\n\t\tconst caseFiles: any = {\n\t\t\tcaseFiles: {}\n\t\t}\n\n\t\t// Only add mafOptions if MAF is selected\n\t\tif (mafSelected) {\n\t\t\t// Convert mclass codes to SO terms using existing mapping for rust backend\n\t\t\tconst soTerms: string[] = []\n\t\t\tfor (const mclassCode of obj.mafOptions.consequences) {\n\t\t\t\tconst soTermsForCode = class2SOterm.get(mclassCode) || []\n\t\t\t\tsoTerms.push(...soTermsForCode)\n\t\t\t}\n\n\t\t\tcaseFiles.mafOptions = {\n\t\t\t\tminTotalDepth: obj.mafOptions.minTotalDepth,\n\t\t\t\tminAltAlleleCount: obj.mafOptions.minAltAlleleCount,\n\t\t\t\tconsequences: soTerms,\n\t\t\t\thyperMutator: obj.mafOptions.hyperMutator\n\t\t\t}\n\t\t}\n\n\t\t// Only add cnvOptions if CNV is selected\n\t\tif (cnvSelected) {\n\t\t\tcaseFiles.cnvOptions = {\n\t\t\t\tdataType: obj.cnvOptions.dataType,\n\t\t\t\tlossThreshold: obj.cnvOptions.lossThreshold,\n\t\t\t\tgainThreshold: obj.cnvOptions.gainThreshold,\n\t\t\t\tsegLength: obj.cnvOptions.segLength,\n\t\t\t\thyperMutator: obj.cnvOptions.hyperMutator\n\t\t\t}\n\t\t}\n\n\t\t// Create CNV files map for lookup (same as in getFilesAndShowTable)\n\t\tconst cnvFilesByCase = new Map()\n\t\tif (result.cnvFiles && result.cnvFiles.files) {\n\t\t\tfor (const cnvFile of result.cnvFiles.files) {\n\t\t\t\tconst caseId = cnvFile.case_submitter_id\n\t\t\t\tif (!cnvFilesByCase.has(caseId)) {\n\t\t\t\t\tcnvFilesByCase.set(caseId, cnvFile)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfor (const i of lst) {\n\t\t\tconst file = filteredFiles[i]\n\t\t\t// console.log('File object:', file)\n\t\t\tconst caseId = file.case_submitter_id\n\n\t\t\tif (!caseFiles.caseFiles[caseId]) {\n\t\t\t\tcaseFiles.caseFiles[caseId] = {}\n\t\t\t}\n\n\t\t\t// Check what data types are selected to determine how to handle the files\n\t\t\tconst mafSelected = obj.dataTypeStates.maf\n\t\t\tconst cnvSelected = obj.dataTypeStates.cnv\n\n\t\t\tif (mafSelected) {\n\t\t\t\t// MAF is selected - files in result.files are MAF files\n\t\t\t\tcaseFiles.caseFiles[caseId].maf = file.id\n\t\t\t}\n\n\t\t\tif (cnvSelected) {\n\t\t\t\t// CNV is selected - check if this case has a CNV file\n\t\t\t\tconst cnvFile = cnvFilesByCase.get(caseId)\n\t\t\t\tif (cnvFile) {\n\t\t\t\t\tcaseFiles.caseFiles[caseId].cnv = cnvFile.id\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tif (Object.keys(caseFiles.caseFiles).length === 0) return\n\n\t\tconst oldText = button.innerHTML\n\t\tbutton.innerHTML = 'Analyzing... Please wait'\n\t\tbutton.disabled = true\n\n\t\t// Clear/hide download button when starting new analysis\n\t\tif (obj.downloadButtonDiv) {\n\t\t\tobj.downloadButtonDiv.selectAll('*').remove()\n\t\t\tobj.downloadButtonDiv.style('display', 'none')\n\t\t}\n\n\t\t// Clear previous results\n\t\tobj.resultDiv.selectAll('*').remove()\n\n\t\ttry {\n\t\t\tobj.busy = true\n\n\t\t\t// Call the GRIN2 run endpoint with the correctly formatted data\n\t\t\t// console.log('Sending GRIN2 request:', caseFiles)\n\t\t\t// console.log('GRIN2 request structure:', JSON.stringify(caseFiles, null, 2))\n\t\t\tconst response = await dofetch3('gdc/runGRIN2', { body: caseFiles })\n\t\t\tif (!response) throw 'invalid response'\n\t\t\tif (response.error) throw Object.assign(new Error(response.error), { code: response.code })\n\n\t\t\tconsole.log('GRIN2 response:', response)\n\n\t\t\tif (response.rustResult) {\n\t\t\t\t// console.log('[GRIN2] Rust result received: ', response)\n\t\t\t\t// console.log('[GRIN2] rustResult received:', response.rustResult)\n\t\t\t\t// console.log('[GRIN2] Summary:', response.rustResult.summary)\n\t\t\t\t// console.log('[GRIN2] Failed files:', response.rustResult.failed_files)\n\t\t\t\t// console.log('[GRIN2] Successful data arrays:', response.rustResult.successful_data?.length)\n\t\t\t} else {\n\t\t\t\tconsole.log('[GRIN2] No rustResult in response')\n\t\t\t}\n\n\t\t\t// Handle the structured Rust output\n\t\t\tconst rustData = response.rustResult\n\t\t\tlet failedFilesInfo: any = null\n\n\t\t\t// Parse the rustResult if it's a string\n\t\t\tlet parsedRustResult\n\t\t\tlet processedData: any[] = []\n\n\t\t\ttry {\n\t\t\t\tparsedRustResult = typeof rustData === 'string' ? JSON.parse(rustData) : rustData\n\t\t\t\t// console.log(`[GRIN2] Parsed Rust result structure received`)\n\t\t\t\t// console.log(`[GRIN2] Parsed Rust result:`, parsedRustResult)\n\n\t\t\t\t// Handle the new structured output\n\t\t\t\tif (parsedRustResult) {\n\t\t\t\t\t// Check if it's the new structured format\n\t\t\t\t\tif (parsedRustResult.successful_data && parsedRustResult.summary) {\n\t\t\t\t\t\t// console.log(`[GRIN2] New format detected - Processing ${parsedRustResult.summary.total_files} files`)\n\t\t\t\t\t\t// console.log(\n\t\t\t\t\t\t// \t`[GRIN2] Success: ${parsedRustResult.summary.successful_files}, Failed: ${parsedRustResult.summary.failed_files}`\n\t\t\t\t\t\t// )\n\n\t\t\t\t\t\t// Successful data goes to python\n\t\t\t\t\t\tprocessedData = parsedRustResult.successful_data\n\n\t\t\t\t\t\tconsole.log(`[GRIN2] parsedRustResult structure:`, parsedRustResult)\n\n\t\t\t\t\t\t// Process failed files information for UI display\n\t\t\t\t\t\tif (parsedRustResult.failed_files && parsedRustResult.failed_files.length > 0) {\n\t\t\t\t\t\t\tfailedFilesInfo = {\n\t\t\t\t\t\t\t\tcount: parsedRustResult.failed_files.length,\n\t\t\t\t\t\t\t\tfiles: parsedRustResult.failed_files,\n\t\t\t\t\t\t\t\t// Create table data for UI display (similar to your deduplication/filter tables)\n\t\t\t\t\t\t\t\ttableData: {\n\t\t\t\t\t\t\t\t\theaders: ['Case ID', 'Data Type', 'Error Type', 'Error Details', 'Attempts'],\n\t\t\t\t\t\t\t\t\trows: parsedRustResult.failed_files.map(file => [\n\t\t\t\t\t\t\t\t\t\tfile.case_id,\n\t\t\t\t\t\t\t\t\t\tfile.data_type,\n\t\t\t\t\t\t\t\t\t\tfile.error_type,\n\t\t\t\t\t\t\t\t\t\tfile.error_details,\n\t\t\t\t\t\t\t\t\t\tfile.attempts_made.toString()\n\t\t\t\t\t\t\t\t\t])\n\t\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t\t// Error summary for the popup\n\t\t\t\t\t\t\t\terrorSummary: {\n\t\t\t\t\t\t\t\t\tconnectionErrors: parsedRustResult.failed_files.filter(f => f.error_type === 'connection_error')\n\t\t\t\t\t\t\t\t\t\t.length,\n\t\t\t\t\t\t\t\t\ttimeoutErrors: parsedRustResult.failed_files.filter(f => f.error_type === 'timeout_error').length,\n\t\t\t\t\t\t\t\t\tserverErrors: parsedRustResult.failed_files.filter(f => f.error_type === 'server_error').length,\n\t\t\t\t\t\t\t\t\totherErrors: parsedRustResult.failed_files.filter(\n\t\t\t\t\t\t\t\t\t\tf => !['connection_error', 'timeout_error', 'server_error'].includes(f.error_type)\n\t\t\t\t\t\t\t\t\t).length\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t// console.log(`[GRIN2] ${failedFilesInfo.count} files failed - error details prepared for UI`)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconsole.log(`[GRIN2] Final processed data contains ${processedData.length.toLocaleString()} characters`)\n\t\t\t\t}\n\t\t\t} catch (parseError) {\n\t\t\t\tconsole.error('[GRIN2] Error parsing Rust result:', parseError)\n\t\t\t\t// Set empty defaults on parse error\n\t\t\t\tprocessedData = []\n\t\t\t\tfailedFilesInfo = null\n\t\t\t}\n\t\t\tif (!response.resultData.png) throw 'png missing'\n\n\t\t\t// Create results container\n\t\t\tconst resultContainer = obj.resultDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('text-align', 'left')\n\t\t\t\t.style('margin', '0 auto')\n\t\t\t\t.style('margin-top', '40px')\n\n\t\t\tconst plotData = response.resultData\n\n\t\t\tconst plotDiv = resultContainer.append('div')\n\n\t\t\tplotManhattanGDC(plotDiv, plotData, { yAxisSpace: 0 })\n\n\t\t\t// Add error handler for image\n\t\t\tresultContainer.node().onerror = () => {\n\t\t\t\tresultContainer.select('img').remove()\n\t\t\t\tsayerror(resultContainer, 'Failed to load image result.')\n\t\t\t}\n\n\t\t\tif (response.topGeneTable && response.topGeneTable.rows && response.topGeneTable.rows.length > 0) {\n\t\t\t\t// Add table title with summary information\n\t\t\t\tconst tableTitle = resultContainer.append('h4').style('margin-bottom', '15px').style('text-align', 'left')\n\n\t\t\t\t// Show summary info if available\n\t\t\t\tif (response.totalGenes && response.showingTop) {\n\t\t\t\t\ttableTitle.text(`Top ${response.showingTop} Genes`)\n\n\t\t\t\t\tresultContainer\n\t\t\t\t\t\t.append('p')\n\t\t\t\t\t\t.html(\n\t\t\t\t\t\t\t`Showing top <strong>${\n\t\t\t\t\t\t\t\tresponse.showingTop\n\t\t\t\t\t\t\t}</strong> genes out of <strong>${response.totalGenes.toLocaleString()}</strong> total genes analyzed.`\n\t\t\t\t\t\t)\n\t\t\t\t\t\t.style('color', '#495057')\n\t\t\t\t\t\t.style('font-size', '14px')\n\t\t\t\t\t\t.style('margin', '10px 0 20px 0')\n\t\t\t\t} else {\n\t\t\t\t\ttableTitle.text('Top Genes')\n\n\t\t\t\t\tresultContainer\n\t\t\t\t\t\t.append('p')\n\t\t\t\t\t\t.style('color', '#495057')\n\t\t\t\t\t\t.style('font-size', '14px')\n\t\t\t\t\t\t.style('margin', '10px 0 20px 0')\n\t\t\t\t}\n\n\t\t\t\t// Create a container for the genes container\n\t\t\t\tconst tableContainer = resultContainer\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('margin-bottom', '20px')\n\t\t\t\t\t.style('display', 'flex')\n\t\t\t\t\t.style('flex', '2')\n\n\t\t\t\t// Summary statistics container\n\t\t\t\tconst statsContainer = resultContainer\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('flex', '1')\n\t\t\t\t\t.style('min-width', '250px')\n\t\t\t\t\t.style('max-width', '350px')\n\n\t\t\t\t// Apply transformation\n\t\t\t\tconst transformedRows = transformRows(response.topGeneTable.rows, response.topGeneTable.columns)\n\n\t\t\t\t// Render the table using your existing table component\n\t\t\t\trenderTable({\n\t\t\t\t\tdiv: tableContainer,\n\t\t\t\t\trows: transformedRows,\n\t\t\t\t\tcolumns: response.topGeneTable.columns,\n\t\t\t\t\tshowLines: true,\n\t\t\t\t\tstriped: true,\n\t\t\t\t\tshowHeader: true,\n\t\t\t\t\tmaxHeight: '500px',\n\t\t\t\t\tmaxWidth: '100%',\n\t\t\t\t\tresize: false,\n\t\t\t\t\theader: {\n\t\t\t\t\t\tallowSort: true,\n\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t'background-color': '#f8f9fa',\n\t\t\t\t\t\t\t'font-weight': 'bold',\n\t\t\t\t\t\t\t'border-bottom': '2px solid #dee2e6'\n\t\t\t\t\t\t}\n\t\t\t\t\t},\n\t\t\t\t\tdownload: {\n\t\t\t\t\t\t// Enable table download functionality\n\t\t\t\t\t\tfileName: `GRIN2_TopGenes.tsv`\n\t\t\t\t\t}\n\t\t\t\t})\n\n\t\t\t\t// This consolidates both the analysis stats and file download stats into one panel\n\t\t\t\t// Create summary statistics panel\n\t\t\t\tif (parsedRustResult?.summary) {\n\t\t\t\t\tconst statsPanel = statsContainer\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.style('background-color', '#f8f9fa')\n\t\t\t\t\t\t.style('border', '1px solid #dee2e6')\n\t\t\t\t\t\t.style('border-radius', '8px')\n\t\t\t\t\t\t.style('padding', '20px')\n\t\t\t\t\t\t.style('box-shadow', '0 2px 4px rgba(0,0,0,0.1)')\n\n\t\t\t\t\t// Stats panel title\n\t\t\t\t\tstatsPanel\n\t\t\t\t\t\t.append('h5')\n\t\t\t\t\t\t.text('Analysis Summary')\n\t\t\t\t\t\t.style('margin', '0 0 15px 0')\n\t\t\t\t\t\t.style('color', '#343a40')\n\t\t\t\t\t\t.style('font-weight', 'bold')\n\t\t\t\t\t\t.style('border-bottom', '2px solid #dee2e6')\n\t\t\t\t\t\t.style('padding-bottom', '8px')\n\n\t\t\t\t\t// File Download/Processing Stats Section\n\t\t\t\t\tif (parsedRustResult && parsedRustResult.summary) {\n\t\t\t\t\t\tconst downloadStats = statsPanel.append('div').style('margin-bottom', '20px')\n\n\t\t\t\t\t\tdownloadStats\n\t\t\t\t\t\t\t.append('h6')\n\t\t\t\t\t\t\t.text('File Download & Processing')\n\t\t\t\t\t\t\t.style('margin', '0 0 10px 0')\n\t\t\t\t\t\t\t.style('color', '#495057')\n\t\t\t\t\t\t\t.style('font-size', '14px')\n\t\t\t\t\t\t\t.style('font-weight', 'bold')\n\n\t\t\t\t\t\tconst downloadStatsGrid = downloadStats\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.style('display', 'grid')\n\t\t\t\t\t\t\t.style('grid-template-columns', '1fr 1fr')\n\t\t\t\t\t\t\t.style('gap', '8px')\n\t\t\t\t\t\t\t.style('font-size', '13px')\n\n\t\t\t\t\t\t// File download metrics from parsedRustResult\n\t\t\t\t\t\tconst totalAttempted = parsedRustResult.summary.total_files\n\t\t\t\t\t\tconst successful = parsedRustResult.summary.successful_files\n\t\t\t\t\t\tconst failed = parsedRustResult.summary.failed_files\n\n\t\t\t\t\t\tdownloadStatsGrid.append('div').style('color', '#6c757d').text('Total Attempted:')\n\t\t\t\t\t\tdownloadStatsGrid\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.style('font-weight', 'bold')\n\t\t\t\t\t\t\t.text(totalAttempted || 0)\n\n\t\t\t\t\t\tdownloadStatsGrid.append('div').style('color', '#28a745').text('Successfully Downloaded:')\n\t\t\t\t\t\tdownloadStatsGrid\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.style('font-weight', 'bold')\n\t\t\t\t\t\t\t.style('color', '#28a745')\n\t\t\t\t\t\t\t.text(successful || 0)\n\n\t\t\t\t\t\tdownloadStatsGrid.append('div').style('color', '#dc3545').text('Failed Downloads:')\n\t\t\t\t\t\tdownloadStatsGrid\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.style('font-weight', 'bold')\n\t\t\t\t\t\t\t.style('color', '#dc3545')\n\t\t\t\t\t\t\t.text(failed || 0)\n\n\t\t\t\t\t\t// Add expandable failed files section if there are failures\n\t\t\t\t\t\tif (failedFilesInfo && failedFilesInfo.count > 0) {\n\t\t\t\t\t\t\taddExpandableFailedFilesToStats(downloadStats, failedFilesInfo)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Processing Timings Section\n\t\t\t\t\tif (response.timing) {\n\t\t\t\t\t\tconst timingStats = statsPanel.append('div').style('margin-bottom', '20px')\n\n\t\t\t\t\t\ttimingStats\n\t\t\t\t\t\t\t.append('h6')\n\t\t\t\t\t\t\t.text('Timings')\n\t\t\t\t\t\t\t.style('margin', '0 0 10px 0')\n\t\t\t\t\t\t\t.style('color', '#495057')\n\t\t\t\t\t\t\t.style('font-size', '14px')\n\t\t\t\t\t\t\t.style('font-weight', 'bold')\n\n\t\t\t\t\t\tconst timingStatsGrid = timingStats\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.style('display', 'grid')\n\t\t\t\t\t\t\t.style('grid-template-columns', '1fr 1fr')\n\t\t\t\t\t\t\t.style('gap', '8px')\n\t\t\t\t\t\t\t.style('font-size', '13px')\n\n\t\t\t\t\t\t// Rust Processing Time\n\t\t\t\t\t\tif (response.timing.rustProcessingTime !== undefined) {\n\t\t\t\t\t\t\ttimingStatsGrid.append('div').style('color', '#6c757d').text('GDC API Data Query and Parsing (s):')\n\t\t\t\t\t\t\ttimingStatsGrid\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.style('font-weight', 'bold')\n\t\t\t\t\t\t\t\t.style('color', 'black')\n\t\t\t\t\t\t\t\t.text(response.timing.rustProcessingTime)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// GRIN2 Processing Time\n\t\t\t\t\t\tif (response.timing.grin2ProcessingTime !== undefined) {\n\t\t\t\t\t\t\ttimingStatsGrid.append('div').style('color', '#6c757d').text('GRIN2 Analysis (s):')\n\t\t\t\t\t\t\ttimingStatsGrid\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.style('font-weight', 'bold')\n\t\t\t\t\t\t\t\t.style('color', 'black')\n\t\t\t\t\t\t\t\t.text(response.timing.grin2ProcessingTime)\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Total Time\n\t\t\t\t\t\tif (response.timing.totalTime !== undefined) {\n\t\t\t\t\t\t\ttimingStatsGrid.append('div').style('color', '#6c757d').text('Total Processing Time (s):')\n\t\t\t\t\t\t\ttimingStatsGrid\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.style('font-weight', 'bold')\n\t\t\t\t\t\t\t\t.style('color', 'black')\n\t\t\t\t\t\t\t\t.text(response.timing.totalTime)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Data Filtering Stats Section (if available)\n\t\t\t\t\tif (\n\t\t\t\t\t\tresponse.rustResult.summary &&\n\t\t\t\t\t\t(response.rustResult.summary.filtered_records !== undefined ||\n\t\t\t\t\t\t\tresponse.rustResult.summary.filtered_maf_records !== undefined ||\n\t\t\t\t\t\t\tresponse.rustResult.summary.filtered_cnv_records !== undefined)\n\t\t\t\t\t) {\n\t\t\t\t\t\tconst filterStats = statsPanel.append('div').style('margin-bottom', '20px')\n\n\t\t\t\t\t\tfilterStats\n\t\t\t\t\t\t\t.append('h6')\n\t\t\t\t\t\t\t.text('Data Filtering')\n\t\t\t\t\t\t\t.style('margin', '0 0 10px 0')\n\t\t\t\t\t\t\t.style('color', '#495057')\n\t\t\t\t\t\t\t.style('font-size', '14px')\n\t\t\t\t\t\t\t.style('font-weight', 'bold')\n\n\t\t\t\t\t\tconst filterStatsGrid = filterStats\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.style('display', 'grid')\n\t\t\t\t\t\t\t.style('grid-template-columns', '1fr 1fr')\n\t\t\t\t\t\t\t.style('gap', '8px')\n\t\t\t\t\t\t\t.style('font-size', '13px')\n\n\t\t\t\t\t\t// Total excluded (filtered) records\n\t\t\t\t\t\tif (response.rustResult.summary.filtered_records !== undefined) {\n\t\t\t\t\t\t\tfilterStatsGrid.append('div').style('color', '#6c757d').text('Total Number of Excluded Records:')\n\t\t\t\t\t\t\tfilterStatsGrid\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.style('font-weight', 'bold')\n\t\t\t\t\t\t\t\t.style('color', 'black')\n\t\t\t\t\t\t\t\t.text(response.rustResult.summary.filtered_records.toLocaleString())\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Total included records in the analysis\n\t\t\t\t\t\tconst mafRecords = response.rustResult.summary.included_maf_records || 0\n\t\t\t\t\t\tconst cnvRecords = response.rustResult.summary.included_cnv_records || 0\n\t\t\t\t\t\tconst totalIncludedRecords = mafRecords + cnvRecords\n\t\t\t\t\t\tfilterStatsGrid.append('div').style('color', '#6c757d').text('Total Number of Included Records:')\n\t\t\t\t\t\tfilterStatsGrid\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.style('font-weight', 'bold')\n\t\t\t\t\t\t\t.style('color', 'black')\n\t\t\t\t\t\t\t.text(totalIncludedRecords.toLocaleString())\n\n\t\t\t\t\t\t// MAF excluded (filtered) records\n\t\t\t\t\t\tif (response.rustResult.summary.filtered_maf_records !== undefined) {\n\t\t\t\t\t\t\tfilterStatsGrid.append('div').style('color', '#6c757d').text('MAF Records Excluded:')\n\t\t\t\t\t\t\tfilterStatsGrid\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.style('font-weight', 'bold')\n\t\t\t\t\t\t\t\t.style('color', 'black')\n\t\t\t\t\t\t\t\t.text(response.rustResult.summary.filtered_maf_records.toLocaleString())\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// MAF included (non-filtered) records\n\t\t\t\t\t\tif (response.rustResult.summary.included_maf_records !== undefined) {\n\t\t\t\t\t\t\tfilterStatsGrid.append('div').style('color', '#6c757d').text('MAF Records Included:')\n\t\t\t\t\t\t\tfilterStatsGrid\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.style('font-weight', 'bold')\n\t\t\t\t\t\t\t\t.style('color', 'black')\n\t\t\t\t\t\t\t\t.text(response.rustResult.summary.included_maf_records.toLocaleString())\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// CNV excluded (filtered) records\n\t\t\t\t\t\tif (response.rustResult.summary.filtered_cnv_records !== undefined) {\n\t\t\t\t\t\t\tfilterStatsGrid.append('div').style('color', '#6c757d').text('CNV Records Excluded:')\n\t\t\t\t\t\t\tfilterStatsGrid\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.style('font-weight', 'bold')\n\t\t\t\t\t\t\t\t.style('color', 'black')\n\t\t\t\t\t\t\t\t.text(response.rustResult.summary.filtered_cnv_records.toLocaleString())\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// CNV included (non-filtered) records\n\t\t\t\t\t\tif (response.rustResult.summary.included_cnv_records !== undefined) {\n\t\t\t\t\t\t\tfilterStatsGrid.append('div').style('color', '#6c757d').text('CNV Records Included:')\n\t\t\t\t\t\t\tfilterStatsGrid\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.style('font-weight', 'bold')\n\t\t\t\t\t\t\t\t.style('color', 'black')\n\t\t\t\t\t\t\t\t.text(response.rustResult.summary.included_cnv_records.toLocaleString())\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// Records by case\n\t\t\t\t\t\tif (response.rustResult.summary.filtered_records_by_case !== undefined) {\n\t\t\t\t\t\t\t// Parse the records by case data and create table structure\n\t\t\t\t\t\t\tconst { columns, rows } = parseRecordsByCaseData(\n\t\t\t\t\t\t\t\tresponse.rustResult.summary.filtered_records_by_case,\n\t\t\t\t\t\t\t\tresponse.rustResult.summary.excluded_by_max_record\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t// Create container that spans both columns\n\t\t\t\t\t\t\tconst recordsByCaseContainer = filterStats\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.style('grid-column', '1 / -1')\n\t\t\t\t\t\t\t\t.style('margin-top', '15px')\n\n\t\t\t\t\t\t\t// Create expandable header\n\t\t\t\t\t\t\tconst expandableHeader = recordsByCaseContainer\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.style('display', 'flex')\n\t\t\t\t\t\t\t\t.style('align-items', 'center')\n\t\t\t\t\t\t\t\t.style('gap', '8px')\n\t\t\t\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t\t\t\t\t.style('padding', '8px')\n\t\t\t\t\t\t\t\t.style('border-radius', '4px')\n\t\t\t\t\t\t\t\t.style('transition', 'background-color 0.2s')\n\t\t\t\t\t\t\t\t.style('background-color', 'rgba(0, 123, 255, 0.1)')\n\t\t\t\t\t\t\t\t.style('border', '1px solid rgba(0, 123, 255, 0.2)')\n\t\t\t\t\t\t\t\t.on('mouseenter', function (this: HTMLElement) {\n\t\t\t\t\t\t\t\t\tselect(this).style('background-color', 'rgba(0, 123, 255, 0.15)')\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.on('mouseleave', function (this: HTMLElement) {\n\t\t\t\t\t\t\t\t\tselect(this).style('background-color', 'rgba(0, 123, 255, 0.1)')\n\t\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t// Expand/collapse icon\n\t\t\t\t\t\t\tconst expandIcon = expandableHeader\n\t\t\t\t\t\t\t\t.append('span')\n\t\t\t\t\t\t\t\t.style('font-size', '12px')\n\t\t\t\t\t\t\t\t.style('color', '#007bff')\n\t\t\t\t\t\t\t\t.style('transition', 'transform 0.2s')\n\t\t\t\t\t\t\t\t.text('\u25B6')\n\n\t\t\t\t\t\t\t// Header text\n\t\t\t\t\t\t\texpandableHeader\n\t\t\t\t\t\t\t\t.append('span')\n\t\t\t\t\t\t\t\t.style('color', '#007bff')\n\t\t\t\t\t\t\t\t.style('text-decoration', 'underline')\n\t\t\t\t\t\t\t\t.style('font-size', '13px')\n\t\t\t\t\t\t\t\t.style('font-weight', '500')\n\t\t\t\t\t\t\t\t.text(\n\t\t\t\t\t\t\t\t\t`View detailed statistics for ${\n\t\t\t\t\t\t\t\t\t\tObject.keys(response.rustResult.summary.filtered_records_by_case).length\n\t\t\t\t\t\t\t\t\t} cases`\n\t\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t// Create expandable content (hidden by default)\n\t\t\t\t\t\t\tconst expandableContent = recordsByCaseContainer\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.style('display', 'none')\n\t\t\t\t\t\t\t\t.style('margin-top', '12px')\n\n\t\t\t\t\t\t\t// Create table container\n\t\t\t\t\t\t\tconst tableContainer = expandableContent\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.style('max-height', '400px')\n\t\t\t\t\t\t\t\t.style('overflow-y', 'auto')\n\t\t\t\t\t\t\t\t.style('border', '1px solid #dee2e6')\n\t\t\t\t\t\t\t\t.style('border-radius', '4px')\n\n\t\t\t\t\t\t\t// Render the table using renderTable\n\t\t\t\t\t\t\trenderTable({\n\t\t\t\t\t\t\t\tdiv: tableContainer,\n\t\t\t\t\t\t\t\tcolumns: columns,\n\t\t\t\t\t\t\t\trows: rows,\n\t\t\t\t\t\t\t\tshowLines: true,\n\t\t\t\t\t\t\t\tstriped: true,\n\t\t\t\t\t\t\t\tshowHeader: true,\n\t\t\t\t\t\t\t\tmaxHeight: '380px',\n\t\t\t\t\t\t\t\tresize: false,\n\t\t\t\t\t\t\t\theader: {\n\t\t\t\t\t\t\t\t\tallowSort: true,\n\t\t\t\t\t\t\t\t\tstyle: {\n\t\t\t\t\t\t\t\t\t\t'background-color': '#f8f9fa',\n\t\t\t\t\t\t\t\t\t\t'font-weight': 'bold',\n\t\t\t\t\t\t\t\t\t\t'border-bottom': '2px solid #dee2e6'\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\t// Add explanatory text\n\t\t\t\t\t\t\texpandableContent\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.style('margin-top', '12px')\n\t\t\t\t\t\t\t\t.style('padding', '8px')\n\t\t\t\t\t\t\t\t.style('background-color', '#f8f9fa')\n\t\t\t\t\t\t\t\t.style('border-radius', '4px')\n\t\t\t\t\t\t\t\t.style('font-size', '12px')\n\t\t\t\t\t\t\t\t.style('color', '#495057')\n\t\t\t\t\t\t\t\t.style('line-height', '1.4')\n\t\t\t\t\t\t\t\t.text('This table shows analysis statistics per case.')\n\n\t\t\t\t\t\t\t// Track expanded state and add click handler\n\t\t\t\t\t\t\tlet isExpanded = false\n\t\t\t\t\t\t\texpandableHeader.on('click', function () {\n\t\t\t\t\t\t\t\tisExpanded = !isExpanded\n\t\t\t\t\t\t\t\tif (isExpanded) {\n\t\t\t\t\t\t\t\t\texpandableContent.style('display', 'block')\n\t\t\t\t\t\t\t\t\texpandIcon.style('transform', 'rotate(90deg)').text('\u25BC')\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\texpandableContent.style('display', 'none')\n\t\t\t\t\t\t\t\t\texpandIcon.style('transform', 'rotate(0deg)').text('\u25B6')\n\t\t\t\t\t\t\t\t}\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}\n\n\t\t\t\tconsole.log(`Displayed table with ${response.topGeneTable.rows.length} genes`)\n\n\t\t\t\t// Add note about full results if truncated\n\t\t\t\tif (response.totalGenes && response.showingTop && response.totalGenes > response.showingTop) {\n\t\t\t\t\tresultContainer\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.style('margin-top', '15px')\n\t\t\t\t\t\t.style('padding', '10px')\n\t\t\t\t\t\t.style('background-color', '#e9ecef')\n\t\t\t\t\t\t.style('border-radius', '4px')\n\t\t\t\t\t\t.style('font-size', '14px')\n\t\t\t\t\t\t.style('max-width', '100%')\n\t\t\t\t\t\t.style('width', 'fit-content')\n\t\t\t\t\t\t.style('color', '#495057').html(`\n\t\t\t\t\t\t<strong>Note:</strong> For performance reasons, only the top ${response.showingTop} \n\t\t\t\t\t\tmost significant genes are displayed. The complete analysis identified \n\t\t\t\t\t\t${response.totalGenes.toLocaleString()} genes total.\n\t\t\t\t\t`)\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// No table data available\n\t\t\t\tconsole.log('No table data received or empty results')\n\t\t\t\tresultContainer\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('padding', '15px')\n\t\t\t\t\t.style('background-color', '#fff3cd')\n\t\t\t\t\t.style('border', '1px solid #ffeaa7')\n\t\t\t\t\t.style('border-radius', '4px')\n\t\t\t\t\t.style('margin', '15px 0')\n\t\t\t\t\t.style('max-width', '100%')\n\t\t\t\t\t.style('width', 'fit-content')\n\t\t\t\t\t.text('No significant genes found in the analysis.')\n\t\t\t}\n\t\t} catch (e: any) {\n\t\t\tif (e?.code === 'CACHE_BUSY') {\n\t\t\t\tif (window.confirm(e.message || String(e))) {\n\t\t\t\t\trunGRIN2Analysis(lst, button, obj, filteredFiles)\n\t\t\t\t}\n\t\t\t} else sayerror(obj.errDiv, e.message || e)\n\t\t\tif (e.stack) console.log(e.stack)\n\t\t}\n\t\t// Reset button state\n\t\tbutton.innerHTML = oldText\n\t\tbutton.disabled = false\n\t\tobj.busy = false\n\t}\n}\n\n/**\n * Main GRIN2 UI initialization function\n * Entry point for the GRIN2 analysis interface\n *\n * @param config - Configuration object containing holder, filters, and callbacks\n * @returns Public API object with update method\n */\nexport async function gdcGRIN2ui({ filter0, callbacks, debugmode = false }, holder) {\n\tif (debugmode) {\n\t\t// Debug logic\n\t}\n\ttry {\n\t\tif (callbacks) {\n\t\t\t/* due to src/app.js line 100\n delete this when that is reshaped to app.sjcharts.callbacks={}\n */\n\t\t\tdelete callbacks.sjcharts\n\t\t\tfor (const n in callbacks) {\n\t\t\t\tif (typeof callbacks[n] != 'function') throw `callbacks.${n} not function`\n\t\t\t}\n\t\t}\n\t\tupdate({ filter0 })\n\t} catch (e) {\n\t\tconsole.log(e)\n\t\tsayerror(holder, e instanceof Error ? e.message : String(e))\n\t}\n\n\tasync function update({ filter0 }) {\n\t\tholder.selectAll('*').remove()\n\t\tholder.style('width', '100%').style('max-width', 'none')\n\t\tconst obj = {\n\t\t\terrDiv: holder.append('div'),\n\t\t\tcontrolDiv: holder.append('div'),\n\t\t\ttableDiv: holder.append('div').style('width', '100%'),\n\t\t\tdeduplicationInfoDiv: holder.append('div'),\n\t\t\tdownloadButtonDiv: holder.append('div').style('margin-top', '10px').style('display', 'none'),\n\t\t\tresultDiv: holder.append('div').style('margin-top', '20px'),\n\t\t\topts: {\n\t\t\t\tfilter0,\n\t\t\t\texperimentalStrategy: 'WXS'\n\t\t\t},\n\t\t\tbusy: false, // when analyzing, set to true for disabling ui interactivity\n\t\t\tmafTableArg: null,\n\t\t\texpStrategyRadio: null\n\t\t}\n\t\tmakeControls(obj)\n\t\tawait getFilesAndShowTable(obj)\n\t\tcallbacks?.postRender?.(publicApi)\n\t}\n\n\t// return api to be accessible by react wrapper; will call api.update() to auto refresh cohortmaf UI on GFF cohort change\n\tconst publicApi = { update }\n\treturn publicApi\n}\n"],
5
- "mappings": "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",
6
- "names": ["obj", "mafSelected", "cnvSelected", "tableContainer", "filter0"]
7
- }