@sjcrh/proteinpaint-client 2.185.0 → 2.186.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 (848) hide show
  1. package/dist/2dmaf-F5QNP7AQ.js +1371 -0
  2. package/dist/AIProjectAdmin-ROSQHK6Q.js +827 -0
  3. package/dist/AIProjectAdmin-ROSQHK6Q.js.map +7 -0
  4. package/dist/AppHeader-STVCDLET.js +833 -0
  5. package/dist/BoxPlot-CU7MEBH7.js +1217 -0
  6. package/dist/CorrelationVolcano-OE4R2GS3.js +617 -0
  7. package/dist/DE-SR7PJPKI.js +93 -0
  8. package/dist/DEinput-PRIAIBFH.js +299 -0
  9. package/dist/DEinput-PRIAIBFH.js.map +7 -0
  10. package/dist/DifferentialAnalysis-UWTYK7NU.js +241 -0
  11. package/dist/Disco-IL6REGSA.js +3235 -0
  12. package/dist/Disco.UI-JHHLS5BA.js +242 -0
  13. package/dist/DmrPlot-DDP53T3F.js +640 -0
  14. package/dist/GB-F4LMYMHF.js +1127 -0
  15. package/dist/GB-F4LMYMHF.js.map +7 -0
  16. package/dist/GeneExpInput-ZWBC226P.js +363 -0
  17. package/dist/GeneExpInput-ZWBC226P.js.map +7 -0
  18. package/dist/HicApp-RVFHTYED.js +2248 -0
  19. package/dist/NumBinaryEditor-B3FXQAOH.js +268 -0
  20. package/dist/NumBinaryEditor.unit.spec-75YQJ2U6.js +284 -0
  21. package/dist/NumContEditor-5PYW3OLY.js +105 -0
  22. package/dist/NumContEditor.unit.spec-F7ZRDGBN.js +167 -0
  23. package/dist/NumCustomBinEditor-TBT6GLYQ.js +36 -0
  24. package/dist/NumCustomBinEditor.unit.spec-6YHU45XV.js +282 -0
  25. package/dist/NumDiscreteEditor-N6OJYSJA.js +177 -0
  26. package/dist/NumDiscreteEditor.unit.spec-HQS5RZ6R.js +200 -0
  27. package/dist/NumRegularBinEditor-HSDDKVNG.js +36 -0
  28. package/dist/NumRegularBinEditor.unit.spec-33KN2MVM.js +225 -0
  29. package/dist/NumSplineEditor-XERKOACS.js +190 -0
  30. package/dist/NumSplineEditor.unit.spec-MPVM6KSC.js +197 -0
  31. package/dist/NumericDensity-35EKYW3V.js +36 -0
  32. package/dist/NumericDensity.unit.spec-OR24PPRJ.js +219 -0
  33. package/dist/NumericHandler-D6ZNGRE3.js +37 -0
  34. package/dist/NumericHandler.unit.spec-EKPGVSXI.js +217 -0
  35. package/dist/RunChart2-7DOXOFXV.js +756 -0
  36. package/dist/SC-APZRV4H6.js +826 -0
  37. package/dist/SC-APZRV4H6.js.map +7 -0
  38. package/dist/Volcano-X4ZWK644.js +1344 -0
  39. package/dist/Volcano-X4ZWK644.js.map +7 -0
  40. package/dist/WSIViewer-E247ELKN.js +47971 -0
  41. package/dist/WsiSamplesPlot-3522VRB5.js +163 -0
  42. package/dist/adSandbox-IDFY5P2P.js +36 -0
  43. package/dist/alphaGenome-F3W7GJQ5.js +173 -0
  44. package/dist/app-2HDSFMRM.js +47 -0
  45. package/dist/app-LIWPFL7C.js +35 -0
  46. package/dist/app.js +10 -10
  47. package/dist/bam-TBHHSATL.js +857 -0
  48. package/dist/barchart-HHFCBOZE.js +45 -0
  49. package/dist/barchart.events-UQUSSRXB.js +45 -0
  50. package/dist/barchart.integration.spec-OF3MWFQ5.js +1675 -0
  51. package/dist/barchart2-XRMPCBBU.js +309 -0
  52. package/dist/block-5UEORHFB.js +6200 -0
  53. package/dist/block.init-QSSFUVIT.js +36 -0
  54. package/dist/block.mds.expressionrank-VBIIJHQF.js +357 -0
  55. package/dist/block.mds.geneboxplot-KSBHXBNX.js +826 -0
  56. package/dist/block.mds.junction-FWZWMZJ2.js +1543 -0
  57. package/dist/block.mds.svcnv-UXORVLH2.js +6799 -0
  58. package/dist/block.svg-6KIGW4QH.js +162 -0
  59. package/dist/block.tk.aicheck-DK566Q4C.js +281 -0
  60. package/dist/block.tk.ase-2GB2VJJ6.js +363 -0
  61. package/dist/block.tk.bam-RQNOLY52.js +1904 -0
  62. package/dist/block.tk.bedgraphdot-N4YMZFO4.js +382 -0
  63. package/dist/block.tk.bigwig.ui-4S7L7D7D.js +209 -0
  64. package/dist/block.tk.hicstraw-AHFNQKCS.js +821 -0
  65. package/dist/block.tk.junction-7E6SNQMQ.js +2362 -0
  66. package/dist/block.tk.junction.textmatrixui-3C5JVYX5.js +197 -0
  67. package/dist/block.tk.ld-TOUCLT3W.js +97 -0
  68. package/dist/block.tk.menu-JCV5ORD6.js +1027 -0
  69. package/dist/block.tk.pgv-CUU22U6M.js +942 -0
  70. package/dist/brainImaging-MTQTXNNL.js +421 -0
  71. package/dist/chunk-2UYBBUXK.js +293 -0
  72. package/dist/chunk-2VPEFXEJ.js +4207 -0
  73. package/dist/chunk-2YC6ZVE4.js +20377 -0
  74. package/dist/chunk-2YC6ZVE4.js.map +7 -0
  75. package/dist/chunk-37MD3Y5G.js +1230 -0
  76. package/dist/chunk-37MD3Y5G.js.map +7 -0
  77. package/dist/chunk-3QHIL3V3.js +55 -0
  78. package/dist/chunk-44VXWKYJ.js +129 -0
  79. package/dist/chunk-52D6EGUS.js +95 -0
  80. package/dist/chunk-5FHM3L4I.js +102 -0
  81. package/dist/chunk-62TF2MCH.js +142 -0
  82. package/dist/chunk-67QM2NUK.js +6364 -0
  83. package/dist/chunk-6AAPHEWK.js +676 -0
  84. package/dist/chunk-6KPGMUHS.js +153 -0
  85. package/dist/chunk-6WBIZXNI.js +455 -0
  86. package/dist/chunk-7AAJVXEG.js +302 -0
  87. package/dist/chunk-AFJRAR4N.js +1271 -0
  88. package/dist/chunk-BBNO6JLO.js +200 -0
  89. package/dist/chunk-BBNO6JLO.js.map +7 -0
  90. package/dist/chunk-CVRYZMDE.js +148 -0
  91. package/dist/chunk-DGUTCYH2.js +276 -0
  92. package/dist/chunk-DHNXATHC.js +158 -0
  93. package/dist/chunk-DXHATYHE.js +180 -0
  94. package/dist/chunk-DXHATYHE.js.map +7 -0
  95. package/dist/chunk-E3BI23UK.js +229 -0
  96. package/dist/chunk-E4JDHA3C.js +621 -0
  97. package/dist/chunk-FOJWYEGV.js +228 -0
  98. package/dist/chunk-FTN7Y34O.js +158 -0
  99. package/dist/chunk-GAOUV4ID.js +1943 -0
  100. package/dist/chunk-GAOUV4ID.js.map +7 -0
  101. package/dist/chunk-GRG5MMPN.js +2815 -0
  102. package/dist/chunk-GSU4PZN3.js +482 -0
  103. package/dist/chunk-I55NLUCQ.js +1823 -0
  104. package/dist/chunk-I55NLUCQ.js.map +7 -0
  105. package/dist/chunk-IIRU2JLK.js +217 -0
  106. package/dist/chunk-JCB74ZSK.js +272 -0
  107. package/dist/chunk-JUDWPYMA.js +824 -0
  108. package/dist/chunk-KT6VZBC7.js +1087 -0
  109. package/dist/chunk-L2HBHFTK.js +2370 -0
  110. package/dist/chunk-LKADRF3Q.js +368 -0
  111. package/dist/chunk-MAXFRUGM.js +407 -0
  112. package/dist/chunk-MQN7RYCK.js +37 -0
  113. package/dist/chunk-OEUI4CYZ.js +470 -0
  114. package/dist/chunk-OM36XUQL.js +34 -0
  115. package/dist/chunk-P5LNIH5X.js +54 -0
  116. package/dist/chunk-PG62PRMF.js +102 -0
  117. package/dist/chunk-Q3J3F2NU.js +205 -0
  118. package/dist/chunk-RYCOJY7M.js +188 -0
  119. package/dist/chunk-RYCOJY7M.js.map +7 -0
  120. package/dist/chunk-RZBV6474.js +117 -0
  121. package/dist/chunk-T5V4OC27.js +442 -0
  122. package/dist/chunk-TXJG4N6S.js +4992 -0
  123. package/dist/chunk-TXJG4N6S.js.map +7 -0
  124. package/dist/chunk-UCKSUNSJ.js +335 -0
  125. package/dist/chunk-W4TLYHZO.js +514 -0
  126. package/dist/chunk-WPZUXKIB.js +56 -0
  127. package/dist/chunk-XM47XD6G.js +215 -0
  128. package/dist/chunk-XVA3UOWD.js +263 -0
  129. package/dist/chunk-XVA3UOWD.js.map +7 -0
  130. package/dist/chunk-YIMRBXQK.js +1210 -0
  131. package/dist/chunk-YIMRBXQK.js.map +7 -0
  132. package/dist/chunk-YL7VT4QT.js +1159 -0
  133. package/dist/chunk-YL7VT4QT.js.map +7 -0
  134. package/dist/chunk-YWBUK4B7.js +291 -0
  135. package/dist/chunk-YWBUK4B7.js.map +7 -0
  136. package/dist/chunk-YZHGLSKQ.js +50 -0
  137. package/dist/chunk-ZGOOZK3I.js +203 -0
  138. package/dist/chunk-ZH2VP6Q6.js +95 -0
  139. package/dist/chunk-ZLOQXO5K.js +14 -0
  140. package/dist/chunk-ZMNDBPJU.js +100 -0
  141. package/dist/chunk-ZRTW6X3F.js +2784 -0
  142. package/dist/chunk-ZTT52MBP.js +2681 -0
  143. package/dist/condition-VUACUQYF.js +330 -0
  144. package/dist/controls-N4MPSNO4.js +39 -0
  145. package/dist/controls.config-PRXVODCM.js +37 -0
  146. package/dist/correlation-QJZUYDFH.js +96 -0
  147. package/dist/cuminc-JJHXW55V.js +1147 -0
  148. package/dist/cuminc.integration.spec-IXS2UO2O.js +676 -0
  149. package/dist/customdata.inputui-DUHO6M6I.js +287 -0
  150. package/dist/dataDownload-OFB7TYDB.js +328 -0
  151. package/dist/dataDownload.integration.spec-4HWDQO4C.js +191 -0
  152. package/dist/databrowser.ui-FGZ5SWG3.js +430 -0
  153. package/dist/databrowser.ui-FGZ5SWG3.js.map +7 -0
  154. package/dist/dictionary-BSKN37CP.js +109 -0
  155. package/dist/dnaMethylation-5QNEEGC6.js +36 -0
  156. package/dist/dnaMethylation.integration.spec-YIX3JSA7.js +201 -0
  157. package/dist/dofetch-KFMGQY7G.js +50 -0
  158. package/dist/e2pca-VX42HDYZ.js +348 -0
  159. package/dist/ep-B6ZNETLI.js +1254 -0
  160. package/dist/expclust.gdc.spec-SGECIILQ.js +305 -0
  161. package/dist/facet-2W5SBPGP.js +519 -0
  162. package/dist/gb-67KTSE2W.js +86 -0
  163. package/dist/gb-67KTSE2W.js.map +7 -0
  164. package/dist/geneExpClustering-6A7364T5.js +247 -0
  165. package/dist/geneExpression-NAM2UEYN.js +36 -0
  166. package/dist/geneExpression-WF56ODMZ.js +312 -0
  167. package/dist/geneExpression.unit.spec-DNE2T3WI.js +100 -0
  168. package/dist/geneORA-33FK2YOS.js +276 -0
  169. package/dist/geneVariant-C7PCNBOQ.js +37 -0
  170. package/dist/geneVariant-REELFRRA.js +39 -0
  171. package/dist/geneVariant.integration.spec-GNXUGDKL.js +196 -0
  172. package/dist/genefusion.ui-WO5EPJDS.js +306 -0
  173. package/dist/geneset-4C6ZLVMN.js +201 -0
  174. package/dist/geneset-4C6ZLVMN.js.map +7 -0
  175. package/dist/genomeBrowser.spec-VPAKTUJF.js +279 -0
  176. package/dist/grin2-AJFEBD43.js +852 -0
  177. package/dist/grin2-AJFEBD43.js.map +7 -0
  178. package/dist/grin2-GYHUYNEF.js +1554 -0
  179. package/dist/gsea-PE5WZ5ZI.js +45 -0
  180. package/dist/hierCluster-FH6YJHRT.js +61 -0
  181. package/dist/hierCluster-IFM5I5QN.js +57 -0
  182. package/dist/hierCluster.config-M57ZIWMB.js +38 -0
  183. package/dist/hierCluster.integration.spec-Z64RL7MC.js +393 -0
  184. package/dist/hierCluster.interactivity-CDBAJXOY.js +52 -0
  185. package/dist/imagePlot-NFEE6IGV.js +161 -0
  186. package/dist/imagePlot-NFEE6IGV.js.map +7 -0
  187. package/dist/importPlot-OWKXSK77.js +8 -0
  188. package/dist/isoformExpression-66XLJG73.js +38 -0
  189. package/dist/isoformExpression.unit.spec-QJX2IRHL.js +206 -0
  190. package/dist/launch.adhoc-JCWID253.js +40 -0
  191. package/dist/leftlabel.sample-5NZ6VQDN.js +257 -0
  192. package/dist/lollipop-BPFDEM2R.js +169 -0
  193. package/dist/lollipop-BPFDEM2R.js.map +7 -0
  194. package/dist/maf-HIS2FQXK.js +450 -0
  195. package/dist/maftimeline-UPJJQE23.js +591 -0
  196. package/dist/matrix-62CN2KXR.js +56 -0
  197. package/dist/matrix-SPEDEB3J.js +61 -0
  198. package/dist/matrix.config-XB6WFXUY.js +39 -0
  199. package/dist/matrix.integration.spec-NN7OR5XM.js +3070 -0
  200. package/dist/matrix.interactivity-OWMHUJCX.js +40 -0
  201. package/dist/matrix.layout-27QB6MWK.js +42 -0
  202. package/dist/matrix.renderers-EPXES5E4.js +36 -0
  203. package/dist/matrix.sort.unit.spec-NBT5FSZ6.js +470 -0
  204. package/dist/matrix.sorterUi.unit.spec-QKGUE4RR.js +340 -0
  205. package/dist/mavb-M7Y74OWQ.js +730 -0
  206. package/dist/mds.fimo-WCDFA7HG.js +516 -0
  207. package/dist/mds.samplescatterplot-ZDHQ3MKJ.js +1548 -0
  208. package/dist/mds.survivalplot-R74DL2RA.js +481 -0
  209. package/dist/oncomatrix-MOITJBII.js +293 -0
  210. package/dist/oncomatrix.spec-NALJBPYS.js +446 -0
  211. package/dist/plot.2dvaf-IE2EZEFA.js +375 -0
  212. package/dist/plot.app-HTW6TZEH.js +39 -0
  213. package/dist/plot.barplot-NCQEPEOY.js +100 -0
  214. package/dist/plot.boxplot-WNKVBVJJ.js +150 -0
  215. package/dist/plot.brainImaging-2Z3TOO6J.js +51 -0
  216. package/dist/plot.disco-4JAEIAYK.js +101 -0
  217. package/dist/plot.dzi-ZGLOVJJN.js +33 -0
  218. package/dist/plot.ssgq-IHUILM43.js +137 -0
  219. package/dist/plot.vaf2cov-ZYCQMD27.js +257 -0
  220. package/dist/plot.wsi-3GISVBDH.js +36 -0
  221. package/dist/polar-4AUAZHBV.js +184 -0
  222. package/dist/polar2-SRD4WWXU.js +226 -0
  223. package/dist/profile.spec-TOITKBBZ.js +78 -0
  224. package/dist/profileBarchart-Z4SYIYBE.js +265 -0
  225. package/dist/profileForms-RA7XQ2QT.js +438 -0
  226. package/dist/profilePlot-4BM3XZVK.js +52 -0
  227. package/dist/profileRadar-EYBESEPI.js +261 -0
  228. package/dist/profileRadarFacility-FZYTFM26.js +261 -0
  229. package/dist/proteinView-F6XKT2A5.js +1122 -0
  230. package/dist/proteinView-F6XKT2A5.js.map +7 -0
  231. package/dist/proteomeAbundance-3RJMRXYI.js +68 -0
  232. package/dist/proteomeAbundance-3RJMRXYI.js.map +7 -0
  233. package/dist/proteomeAbundance-65R6M4YQ.js +21 -0
  234. package/dist/qualitative-E7WL6DN4.js +41 -0
  235. package/dist/radar2-I6FN5SUX.js +314 -0
  236. package/dist/radarFacility2-GVK7PT3V.js +323 -0
  237. package/dist/regression-TIR5D354.js +54 -0
  238. package/dist/regression.inputs-2AMJCJ3L.js +46 -0
  239. package/dist/regression.inputs.term-D6D2QEUB.js +46 -0
  240. package/dist/regression.inputs.values.table-M3IPLGDJ.js +43 -0
  241. package/dist/regression.integration.spec-ROUSXLMH.js +782 -0
  242. package/dist/regression.results-YD5S74YS.js +38 -0
  243. package/dist/regression.spec-4OXBBTNO.js +706 -0
  244. package/dist/report-ETNALKTY.js +220 -0
  245. package/dist/sampleScatter.spec-LECMFMI2.js +200 -0
  246. package/dist/sampleView-B5TM7JOW.js +46 -0
  247. package/dist/samplelst-GFQCG4SS.js +109 -0
  248. package/dist/samplematrix-OMTNWCJK.js +2196 -0
  249. package/dist/sc-MIEEZBWG.js +84 -0
  250. package/dist/scatter-ETOZ722F.js +800 -0
  251. package/dist/scatter.integration.spec-TS4PNRLX.js +1194 -0
  252. package/dist/selectGenomeWithTklst-Y5QIM2JB.js +132 -0
  253. package/dist/singleCellCellType-HOJHZF5W.js +36 -0
  254. package/dist/singleCellCellType.unit.spec-MH5V3RPX.js +158 -0
  255. package/dist/singleCellGeneExpression-YVQ5TIKN.js +36 -0
  256. package/dist/singleCellGeneExpression.unit.spec-BMFFT5HO.js +151 -0
  257. package/dist/singleCellPlot-3YFUYA2Y.js +51 -0
  258. package/dist/singlecell-FK5JETW5.js +1570 -0
  259. package/dist/singlecell-RL7V7DIC.js +84 -0
  260. package/dist/snp-FT7HB3XN.js +36 -0
  261. package/dist/snp.unit.spec-CLYVYPPG.js +174 -0
  262. package/dist/snplocus-M5SEQGAC.js +206 -0
  263. package/dist/spliceevent.a53ss.diagram-EJ5CTRCZ.js +149 -0
  264. package/dist/spliceevent.exonskip.diagram-ETXMOHZ3.js +275 -0
  265. package/dist/spliceevent.noeventdiagram-S2O4ZM2Z.js +458 -0
  266. package/dist/ssGSEA-6PMDQDTJ.js +36 -0
  267. package/dist/ssGSEA.unit.spec-JD5T4R2N.js +86 -0
  268. package/dist/summarizeCnvGeneexp-GCHNKTIU.js +161 -0
  269. package/dist/summarizeGeneexpSurvival-R2RYQZ3M.js +106 -0
  270. package/dist/summarizeMutationCnv-LB2BIYRL.js +162 -0
  271. package/dist/summarizeMutationDiagnosis-3JUY75LM.js +38 -0
  272. package/dist/summarizeMutationSurvival-VYLRWTCF.js +97 -0
  273. package/dist/summary-2QQ72IEQ.js +47 -0
  274. package/dist/summary.integration.spec-XXU362UQ.js +412 -0
  275. package/dist/summaryInput-OZHZG3PV.js +233 -0
  276. package/dist/sunburst-CMCJCANX.js +282 -0
  277. package/dist/survival-EBD4DHO7.js +44 -0
  278. package/dist/survival-ISLRRPKU.js +56 -0
  279. package/dist/survival.integration.spec-FS7V4OXK.js +800 -0
  280. package/dist/svgraph-KGLNUM7W.js +1385 -0
  281. package/dist/svmr-NXZ5VLKH.js +3840 -0
  282. package/dist/table-ISOQOI6C.js +198 -0
  283. package/dist/termCollection-7ZSU3I45.js +36 -0
  284. package/dist/termCollection-V2A5BDQB.js +177 -0
  285. package/dist/termCollection.unit.spec-6VLCJGOU.js +206 -0
  286. package/dist/tk-6AB6XYIE.js +44 -0
  287. package/dist/tp.ui-2O4UW5N7.js +1457 -0
  288. package/dist/tvs.dt-CY6TOQVB.js +37 -0
  289. package/dist/tvs.dtcnv.categorical-AYQ432TW.js +38 -0
  290. package/dist/tvs.dtcnv.continuous-XVDL6SG3.js +70 -0
  291. package/dist/tvs.dtfusion-V3AV7A6Q.js +38 -0
  292. package/dist/tvs.dtsnvindel-XM3NXIT7.js +38 -0
  293. package/dist/tvs.dtsv-Z2GYRINW.js +38 -0
  294. package/dist/tvs.samplelst-C4FB63G7.js +102 -0
  295. package/dist/tvs.termCollection-VHTSC2ST.js +157 -0
  296. package/dist/violin-KGGTUQFF.js +44 -0
  297. package/dist/violin.integration.spec-5EW6PLJX.js +1423 -0
  298. package/dist/violin.interactivity-RI4RURGO.js +36 -0
  299. package/dist/violin.renderer-EWU2IFZE.js +38 -0
  300. package/dist/vocabulary-VLIGC7OP.js +39 -0
  301. package/package.json +3 -3
  302. package/src/databrowser/dictionary.parse.js +14 -2
  303. package/dist/2dmaf-X7LATQT7.js +0 -1371
  304. package/dist/AIProjectAdmin-GUBKURGO.js +0 -830
  305. package/dist/AIProjectAdmin-GUBKURGO.js.map +0 -7
  306. package/dist/AppHeader-RDOFP322.js +0 -833
  307. package/dist/BoxPlot-AZF2EMGQ.js +0 -1217
  308. package/dist/CorrelationVolcano-VXW35SXU.js +0 -617
  309. package/dist/DE-NLGMZ44O.js +0 -93
  310. package/dist/DEinput-OJ7P4UMP.js +0 -297
  311. package/dist/DEinput-OJ7P4UMP.js.map +0 -7
  312. package/dist/DifferentialAnalysis-G75VUHDI.js +0 -241
  313. package/dist/Disco-DX4S44SI.js +0 -3235
  314. package/dist/Disco.UI-5FYIACCU.js +0 -242
  315. package/dist/DmrPlot-HWYITHK2.js +0 -640
  316. package/dist/GB-DBTMRVYH.js +0 -1125
  317. package/dist/GB-DBTMRVYH.js.map +0 -7
  318. package/dist/GeneExpInput-DWB7OYT2.js +0 -335
  319. package/dist/GeneExpInput-DWB7OYT2.js.map +0 -7
  320. package/dist/HicApp-XPZVZXB7.js +0 -2248
  321. package/dist/NumBinaryEditor-M6MJYIHK.js +0 -268
  322. package/dist/NumBinaryEditor.unit.spec-W6MMYDAW.js +0 -284
  323. package/dist/NumContEditor-YRVENTS5.js +0 -105
  324. package/dist/NumContEditor.unit.spec-A6OH4TI7.js +0 -167
  325. package/dist/NumCustomBinEditor-BLBOYSCQ.js +0 -36
  326. package/dist/NumCustomBinEditor.unit.spec-55V5CKLB.js +0 -282
  327. package/dist/NumDiscreteEditor-DTRM6VL2.js +0 -177
  328. package/dist/NumDiscreteEditor.unit.spec-YMB6QRER.js +0 -200
  329. package/dist/NumRegularBinEditor-XW4SVA7S.js +0 -36
  330. package/dist/NumRegularBinEditor.unit.spec-VAHC3VOD.js +0 -225
  331. package/dist/NumSplineEditor-H22HTRFR.js +0 -190
  332. package/dist/NumSplineEditor.unit.spec-4JUADXZR.js +0 -197
  333. package/dist/NumericDensity-ECSZCQRX.js +0 -36
  334. package/dist/NumericDensity.unit.spec-SXXCXM4X.js +0 -219
  335. package/dist/NumericHandler-CMBN3FZX.js +0 -37
  336. package/dist/NumericHandler.unit.spec-UYTJG2Z2.js +0 -217
  337. package/dist/RunChart2-MVFWLXZX.js +0 -756
  338. package/dist/SC-BRC3J2O4.js +0 -797
  339. package/dist/SC-BRC3J2O4.js.map +0 -7
  340. package/dist/Volcano-WMNFZSX2.js +0 -1234
  341. package/dist/Volcano-WMNFZSX2.js.map +0 -7
  342. package/dist/WSIViewer-2Z636FMA.js +0 -47971
  343. package/dist/WsiSamplesPlot-LN75PND3.js +0 -163
  344. package/dist/adSandbox-AJ7QUDOI.js +0 -36
  345. package/dist/alphaGenome-PVCRXAQK.js +0 -173
  346. package/dist/app-DWYCAFRP.js +0 -47
  347. package/dist/app-RENXV7VR.js +0 -35
  348. package/dist/bam-5G6IT6OX.js +0 -857
  349. package/dist/barchart-MLCCU6SU.js +0 -45
  350. package/dist/barchart.events-B6HQTLK2.js +0 -45
  351. package/dist/barchart.integration.spec-S43A7C7N.js +0 -1675
  352. package/dist/barchart2-QMKEN6MN.js +0 -309
  353. package/dist/block-IGBB4BJH.js +0 -6200
  354. package/dist/block.init-NLCYAKV4.js +0 -36
  355. package/dist/block.mds.expressionrank-TZWGRDY7.js +0 -357
  356. package/dist/block.mds.geneboxplot-OAFROYDL.js +0 -826
  357. package/dist/block.mds.junction-NSLXTW3D.js +0 -1543
  358. package/dist/block.mds.svcnv-ICPG4BW6.js +0 -6799
  359. package/dist/block.svg-DTFVIAAC.js +0 -162
  360. package/dist/block.tk.aicheck-ZIMIBWHA.js +0 -281
  361. package/dist/block.tk.ase-I7UNK5BK.js +0 -363
  362. package/dist/block.tk.bam-W7JG46RS.js +0 -1904
  363. package/dist/block.tk.bedgraphdot-XAQJPKGJ.js +0 -382
  364. package/dist/block.tk.bigwig.ui-YQOJPJSG.js +0 -209
  365. package/dist/block.tk.hicstraw-OWWGGCHU.js +0 -821
  366. package/dist/block.tk.junction-V63ZQQX6.js +0 -2362
  367. package/dist/block.tk.junction.textmatrixui-B7KXX7WN.js +0 -197
  368. package/dist/block.tk.ld-2J6CT74S.js +0 -97
  369. package/dist/block.tk.menu-6AQLG7PW.js +0 -1027
  370. package/dist/block.tk.pgv-4V6PKVCQ.js +0 -942
  371. package/dist/brainImaging-WRBGYLHK.js +0 -421
  372. package/dist/chat-X2BCTEDF.js +0 -148
  373. package/dist/chat-X2BCTEDF.js.map +0 -7
  374. package/dist/chunk-23VG37CB.js +0 -1939
  375. package/dist/chunk-23VG37CB.js.map +0 -7
  376. package/dist/chunk-2VOHINOC.js +0 -262
  377. package/dist/chunk-2VOHINOC.js.map +0 -7
  378. package/dist/chunk-3AK6GP4M.js +0 -215
  379. package/dist/chunk-3B7EWIVB.js +0 -153
  380. package/dist/chunk-3JAC5CHL.js +0 -407
  381. package/dist/chunk-3QBZ2Y77.js +0 -188
  382. package/dist/chunk-3QBZ2Y77.js.map +0 -7
  383. package/dist/chunk-3T2PCWII.js +0 -442
  384. package/dist/chunk-4BTAI6HQ.js +0 -100
  385. package/dist/chunk-4JVNATQR.js +0 -621
  386. package/dist/chunk-4ZCR6CPK.js +0 -4964
  387. package/dist/chunk-4ZCR6CPK.js.map +0 -7
  388. package/dist/chunk-5MW5VMWD.js +0 -2784
  389. package/dist/chunk-5ZBEDKBD.js +0 -158
  390. package/dist/chunk-65YTZS3R.js +0 -203
  391. package/dist/chunk-6ZCHECOT.js +0 -1816
  392. package/dist/chunk-6ZCHECOT.js.map +0 -7
  393. package/dist/chunk-73ZT6NAT.js +0 -34
  394. package/dist/chunk-7HJ6H7AZ.js +0 -2681
  395. package/dist/chunk-AFXYPMFZ.js +0 -117
  396. package/dist/chunk-BL4ALBZ7.js +0 -37
  397. package/dist/chunk-BRCDZJBQ.js +0 -824
  398. package/dist/chunk-EBGX226R.js +0 -205
  399. package/dist/chunk-EHXI36HJ.js +0 -2815
  400. package/dist/chunk-ENP4FLOX.js +0 -293
  401. package/dist/chunk-FDOSJKDA.js +0 -1209
  402. package/dist/chunk-FDOSJKDA.js.map +0 -7
  403. package/dist/chunk-HP2BASCY.js +0 -1159
  404. package/dist/chunk-HP2BASCY.js.map +0 -7
  405. package/dist/chunk-HROKXT4K.js +0 -14
  406. package/dist/chunk-HTMXVOTH.js +0 -482
  407. package/dist/chunk-IA7S4UL5.js +0 -302
  408. package/dist/chunk-JFIOYO3M.js +0 -272
  409. package/dist/chunk-JMJW3ERE.js +0 -470
  410. package/dist/chunk-K7XWZSQA.js +0 -148
  411. package/dist/chunk-KSN3EVKI.js +0 -102
  412. package/dist/chunk-L5SOHZ5V.js +0 -229
  413. package/dist/chunk-LMGE54CQ.js +0 -54
  414. package/dist/chunk-LOMVTHAM.js +0 -95
  415. package/dist/chunk-MSW7OS2O.js +0 -276
  416. package/dist/chunk-MVCGSYS2.js +0 -50
  417. package/dist/chunk-N2HBIQKU.js +0 -102
  418. package/dist/chunk-NL3DVEVX.js +0 -158
  419. package/dist/chunk-O4WJSZC3.js +0 -1087
  420. package/dist/chunk-OLUDD6EC.js +0 -2370
  421. package/dist/chunk-OVPVPPRG.js +0 -55
  422. package/dist/chunk-OYEISJSJ.js +0 -289
  423. package/dist/chunk-OYEISJSJ.js.map +0 -7
  424. package/dist/chunk-P2JDCMXW.js +0 -4207
  425. package/dist/chunk-PMDXCESS.js +0 -514
  426. package/dist/chunk-PXYYICV7.js +0 -1271
  427. package/dist/chunk-PZ3KIUWJ.js +0 -56
  428. package/dist/chunk-QEWMCAJW.js +0 -335
  429. package/dist/chunk-QLWDUZ5K.js +0 -129
  430. package/dist/chunk-QRSIID3T.js +0 -95
  431. package/dist/chunk-ST644IDH.js +0 -217
  432. package/dist/chunk-UOOMFM7K.js +0 -6364
  433. package/dist/chunk-VGHSLILD.js +0 -368
  434. package/dist/chunk-W35IOI74.js +0 -228
  435. package/dist/chunk-XKF4KMCB.js +0 -146
  436. package/dist/chunk-XKF4KMCB.js.map +0 -7
  437. package/dist/chunk-XVDWYTJ6.js +0 -676
  438. package/dist/chunk-YQVEBFGT.js +0 -455
  439. package/dist/chunk-YWUVCXFS.js +0 -20271
  440. package/dist/chunk-YWUVCXFS.js.map +0 -7
  441. package/dist/chunk-ZT3PB4XX.js +0 -1150
  442. package/dist/chunk-ZT3PB4XX.js.map +0 -7
  443. package/dist/chunk-ZVSXHCGP.js +0 -142
  444. package/dist/condition-CZX2GSN4.js +0 -330
  445. package/dist/controls-BQR3WY5W.js +0 -39
  446. package/dist/controls.config-TAVZDHFZ.js +0 -37
  447. package/dist/correlation-BIWVZNC6.js +0 -96
  448. package/dist/cuminc-EDXOOI5R.js +0 -1147
  449. package/dist/cuminc.integration.spec-UZA7BDTB.js +0 -676
  450. package/dist/customdata.inputui-PEB4CE7J.js +0 -287
  451. package/dist/dataDownload-KANEHJXJ.js +0 -328
  452. package/dist/dataDownload.integration.spec-23WLHSWJ.js +0 -191
  453. package/dist/databrowser.ui-B2TNECC4.js +0 -419
  454. package/dist/databrowser.ui-B2TNECC4.js.map +0 -7
  455. package/dist/dictionary-YOTUFVES.js +0 -109
  456. package/dist/dnaMethylation-TRFAZWRJ.js +0 -36
  457. package/dist/dnaMethylation.integration.spec-SPFZO76D.js +0 -201
  458. package/dist/dofetch-MH4MRMGY.js +0 -50
  459. package/dist/e2pca-AFVAFUJ2.js +0 -348
  460. package/dist/ep-4FXTLWB4.js +0 -1254
  461. package/dist/expclust.gdc.spec-SFOCKBLR.js +0 -305
  462. package/dist/facet-SY6PYSTN.js +0 -519
  463. package/dist/gb-JUV63QCN.js +0 -93
  464. package/dist/gb-JUV63QCN.js.map +0 -7
  465. package/dist/geneExpClustering-FOY77R7P.js +0 -247
  466. package/dist/geneExpression-AHKX57BT.js +0 -312
  467. package/dist/geneExpression-D2F2KVGY.js +0 -36
  468. package/dist/geneExpression.unit.spec-SR2BGZQL.js +0 -100
  469. package/dist/geneORA-VJMYI4BT.js +0 -276
  470. package/dist/geneVariant-LFM5SO2P.js +0 -37
  471. package/dist/geneVariant-OIKEV4JM.js +0 -39
  472. package/dist/geneVariant.integration.spec-T6BINPIN.js +0 -196
  473. package/dist/genefusion.ui-NLMW5XMI.js +0 -306
  474. package/dist/geneset-HKXFHM5K.js +0 -197
  475. package/dist/geneset-HKXFHM5K.js.map +0 -7
  476. package/dist/genomeBrowser.spec-DRYIFJLY.js +0 -279
  477. package/dist/grin2-GJKLNT4J.js +0 -1031
  478. package/dist/grin2-GJKLNT4J.js.map +0 -7
  479. package/dist/grin2-LGI535FF.js +0 -1554
  480. package/dist/gsea-Z7DSDFOA.js +0 -45
  481. package/dist/hierCluster-HC2B5XRR.js +0 -61
  482. package/dist/hierCluster-PLHVN5S3.js +0 -57
  483. package/dist/hierCluster.config-E3DIJWL5.js +0 -38
  484. package/dist/hierCluster.integration.spec-OQLPUQG4.js +0 -393
  485. package/dist/hierCluster.interactivity-LRNPDTEH.js +0 -52
  486. package/dist/imagePlot-GUXRGYQA.js +0 -139
  487. package/dist/imagePlot-GUXRGYQA.js.map +0 -7
  488. package/dist/importPlot-M5HGLHRO.js +0 -8
  489. package/dist/isoformExpression-PADLHHR5.js +0 -38
  490. package/dist/isoformExpression.unit.spec-5BPAL4OS.js +0 -206
  491. package/dist/launch.adhoc-JH6ZZFDB.js +0 -40
  492. package/dist/leftlabel.sample-NS2TBANH.js +0 -257
  493. package/dist/lollipop-W6NOHHCP.js +0 -166
  494. package/dist/lollipop-W6NOHHCP.js.map +0 -7
  495. package/dist/maf-NOHIKTUP.js +0 -450
  496. package/dist/maftimeline-WGWE52EF.js +0 -591
  497. package/dist/matrix-B6NPQFFF.js +0 -61
  498. package/dist/matrix-UAKRJL5A.js +0 -56
  499. package/dist/matrix.config-KJNJXPJJ.js +0 -39
  500. package/dist/matrix.integration.spec-VAXIR3E6.js +0 -3070
  501. package/dist/matrix.interactivity-H4MCMJXU.js +0 -40
  502. package/dist/matrix.layout-RFKQJM5D.js +0 -42
  503. package/dist/matrix.renderers-7JJIC6VC.js +0 -36
  504. package/dist/matrix.sort.unit.spec-MQQVWWNT.js +0 -470
  505. package/dist/matrix.sorterUi.unit.spec-LG4TI7VF.js +0 -340
  506. package/dist/mavb-EIZHS6F4.js +0 -730
  507. package/dist/mds.fimo-XVC6MI7W.js +0 -516
  508. package/dist/mds.samplescatterplot-PRR4TKYI.js +0 -1548
  509. package/dist/mds.survivalplot-3OG4Y2B6.js +0 -481
  510. package/dist/oncomatrix-SO6S6IIB.js +0 -293
  511. package/dist/oncomatrix.spec-VXTF44K5.js +0 -446
  512. package/dist/plot.2dvaf-JW5OJJXV.js +0 -375
  513. package/dist/plot.app-T3GVCFQ3.js +0 -39
  514. package/dist/plot.barplot-2TYP6DPI.js +0 -100
  515. package/dist/plot.boxplot-HOQHM7JF.js +0 -150
  516. package/dist/plot.brainImaging-5AI7BSD4.js +0 -51
  517. package/dist/plot.disco-HNNZHK5Z.js +0 -101
  518. package/dist/plot.dzi-4OQSO7SY.js +0 -33
  519. package/dist/plot.ssgq-VZTTGECT.js +0 -137
  520. package/dist/plot.vaf2cov-ASEELRDV.js +0 -257
  521. package/dist/plot.wsi-MDWYLU4R.js +0 -36
  522. package/dist/polar-QSY6JG4P.js +0 -184
  523. package/dist/polar2-FD6656VD.js +0 -226
  524. package/dist/profile.spec-V7EQBXT2.js +0 -78
  525. package/dist/profileBarchart-EIKHZAPD.js +0 -265
  526. package/dist/profileForms-NGFRXPFF.js +0 -438
  527. package/dist/profilePlot-2UFKJ2OC.js +0 -52
  528. package/dist/profileRadar-B2R7OV5F.js +0 -261
  529. package/dist/profileRadarFacility-ILC7POCI.js +0 -261
  530. package/dist/proteinView-AS6ZV2JT.js +0 -758
  531. package/dist/proteinView-AS6ZV2JT.js.map +0 -7
  532. package/dist/proteomeAbundance-6J5YF4V2.js +0 -63
  533. package/dist/proteomeAbundance-6J5YF4V2.js.map +0 -7
  534. package/dist/proteomeAbundance-OF27N347.js +0 -21
  535. package/dist/qualitative-CSUO2WG5.js +0 -41
  536. package/dist/radar2-L2HGCUYR.js +0 -314
  537. package/dist/radarFacility2-HXUUTRYO.js +0 -323
  538. package/dist/regression-Y4NYGZSA.js +0 -54
  539. package/dist/regression.inputs-RWFIJLNF.js +0 -46
  540. package/dist/regression.inputs.term-QIU5SHTN.js +0 -46
  541. package/dist/regression.inputs.values.table-FM6QTSEV.js +0 -43
  542. package/dist/regression.integration.spec-YRKKU7HL.js +0 -782
  543. package/dist/regression.results-YUDCHUZJ.js +0 -38
  544. package/dist/regression.spec-G4GIIV32.js +0 -706
  545. package/dist/report-2N4FBR4Q.js +0 -220
  546. package/dist/sampleScatter.spec-UIUYO4WR.js +0 -200
  547. package/dist/sampleView-TOK5Y5KU.js +0 -46
  548. package/dist/samplelst-YW5ZS3GJ.js +0 -109
  549. package/dist/samplematrix-447BHSO7.js +0 -2196
  550. package/dist/sc-O2PL3FL2.js +0 -84
  551. package/dist/scatter-4DXHOWVY.js +0 -800
  552. package/dist/scatter.integration.spec-ZPTM3AGQ.js +0 -1194
  553. package/dist/selectGenomeWithTklst-3RLZFW62.js +0 -132
  554. package/dist/singleCellCellType-3LQJXS7H.js +0 -36
  555. package/dist/singleCellCellType.unit.spec-UJM72SP4.js +0 -158
  556. package/dist/singleCellGeneExpression-JOWJWPIQ.js +0 -36
  557. package/dist/singleCellGeneExpression.unit.spec-VY5CGRZH.js +0 -151
  558. package/dist/singleCellPlot-IVLVKOO6.js +0 -51
  559. package/dist/singlecell-VJJZJZF7.js +0 -1570
  560. package/dist/singlecell-VQJ2252L.js +0 -84
  561. package/dist/snp-ALMKZKL2.js +0 -36
  562. package/dist/snp.unit.spec-GJQBAHGQ.js +0 -174
  563. package/dist/snplocus-WCNCMFWZ.js +0 -206
  564. package/dist/spliceevent.a53ss.diagram-4Q4JF4RX.js +0 -149
  565. package/dist/spliceevent.exonskip.diagram-IOYOKELT.js +0 -275
  566. package/dist/spliceevent.noeventdiagram-77ZCOHSF.js +0 -458
  567. package/dist/ssGSEA-QTXXIN4K.js +0 -36
  568. package/dist/ssGSEA.unit.spec-LQESATT3.js +0 -86
  569. package/dist/summarizeCnvGeneexp-YKUQGDQF.js +0 -161
  570. package/dist/summarizeGeneexpSurvival-ARGG5VDC.js +0 -106
  571. package/dist/summarizeMutationCnv-FMZYT3EC.js +0 -162
  572. package/dist/summarizeMutationDiagnosis-ZX7I46SC.js +0 -38
  573. package/dist/summarizeMutationSurvival-RCFMTT43.js +0 -97
  574. package/dist/summary-QLL5YVI2.js +0 -47
  575. package/dist/summary.integration.spec-DHY6XCEJ.js +0 -412
  576. package/dist/summaryInput-ANCUQGIB.js +0 -233
  577. package/dist/sunburst-RDNFBOCK.js +0 -282
  578. package/dist/survival-BG7QV52L.js +0 -44
  579. package/dist/survival-WSN36OQE.js +0 -56
  580. package/dist/survival.integration.spec-37KAJ5IK.js +0 -800
  581. package/dist/svgraph-A5WGHW4S.js +0 -1385
  582. package/dist/svmr-CYRHHWZF.js +0 -3840
  583. package/dist/table-VHO7E5PI.js +0 -198
  584. package/dist/termCollection-E4Q6GLXN.js +0 -177
  585. package/dist/termCollection-HSVSH7TJ.js +0 -36
  586. package/dist/termCollection.unit.spec-ZCE3TUMS.js +0 -206
  587. package/dist/tk-GPRHDN4K.js +0 -44
  588. package/dist/tp.ui-LTUA3FSL.js +0 -1457
  589. package/dist/tvs.dt-G43PAAKD.js +0 -37
  590. package/dist/tvs.dtcnv.categorical-UHDS2TGZ.js +0 -38
  591. package/dist/tvs.dtcnv.continuous-ZNGYQKTD.js +0 -70
  592. package/dist/tvs.dtfusion-JBEEUDUS.js +0 -38
  593. package/dist/tvs.dtsnvindel-XXN5Q7RN.js +0 -38
  594. package/dist/tvs.dtsv-MO6L7HHV.js +0 -38
  595. package/dist/tvs.samplelst-HKY6UUJM.js +0 -102
  596. package/dist/tvs.termCollection-TY6FPL25.js +0 -157
  597. package/dist/violin-YHE3WSGR.js +0 -44
  598. package/dist/violin.integration.spec-F2UD7BHC.js +0 -1423
  599. package/dist/violin.interactivity-LVDTDEPQ.js +0 -36
  600. package/dist/violin.renderer-IIEIUGRI.js +0 -38
  601. package/dist/vocabulary-WQRYXBRO.js +0 -39
  602. /package/dist/{2dmaf-X7LATQT7.js.map → 2dmaf-F5QNP7AQ.js.map} +0 -0
  603. /package/dist/{AppHeader-RDOFP322.js.map → AppHeader-STVCDLET.js.map} +0 -0
  604. /package/dist/{BoxPlot-AZF2EMGQ.js.map → BoxPlot-CU7MEBH7.js.map} +0 -0
  605. /package/dist/{CorrelationVolcano-VXW35SXU.js.map → CorrelationVolcano-OE4R2GS3.js.map} +0 -0
  606. /package/dist/{DE-NLGMZ44O.js.map → DE-SR7PJPKI.js.map} +0 -0
  607. /package/dist/{DifferentialAnalysis-G75VUHDI.js.map → DifferentialAnalysis-UWTYK7NU.js.map} +0 -0
  608. /package/dist/{Disco-DX4S44SI.js.map → Disco-IL6REGSA.js.map} +0 -0
  609. /package/dist/{Disco.UI-5FYIACCU.js.map → Disco.UI-JHHLS5BA.js.map} +0 -0
  610. /package/dist/{DmrPlot-HWYITHK2.js.map → DmrPlot-DDP53T3F.js.map} +0 -0
  611. /package/dist/{HicApp-XPZVZXB7.js.map → HicApp-RVFHTYED.js.map} +0 -0
  612. /package/dist/{NumBinaryEditor-M6MJYIHK.js.map → NumBinaryEditor-B3FXQAOH.js.map} +0 -0
  613. /package/dist/{NumBinaryEditor.unit.spec-W6MMYDAW.js.map → NumBinaryEditor.unit.spec-75YQJ2U6.js.map} +0 -0
  614. /package/dist/{NumContEditor-YRVENTS5.js.map → NumContEditor-5PYW3OLY.js.map} +0 -0
  615. /package/dist/{NumContEditor.unit.spec-A6OH4TI7.js.map → NumContEditor.unit.spec-F7ZRDGBN.js.map} +0 -0
  616. /package/dist/{NumCustomBinEditor-BLBOYSCQ.js.map → NumCustomBinEditor-TBT6GLYQ.js.map} +0 -0
  617. /package/dist/{NumCustomBinEditor.unit.spec-55V5CKLB.js.map → NumCustomBinEditor.unit.spec-6YHU45XV.js.map} +0 -0
  618. /package/dist/{NumDiscreteEditor-DTRM6VL2.js.map → NumDiscreteEditor-N6OJYSJA.js.map} +0 -0
  619. /package/dist/{NumDiscreteEditor.unit.spec-YMB6QRER.js.map → NumDiscreteEditor.unit.spec-HQS5RZ6R.js.map} +0 -0
  620. /package/dist/{NumRegularBinEditor-XW4SVA7S.js.map → NumRegularBinEditor-HSDDKVNG.js.map} +0 -0
  621. /package/dist/{NumRegularBinEditor.unit.spec-VAHC3VOD.js.map → NumRegularBinEditor.unit.spec-33KN2MVM.js.map} +0 -0
  622. /package/dist/{NumSplineEditor-H22HTRFR.js.map → NumSplineEditor-XERKOACS.js.map} +0 -0
  623. /package/dist/{NumSplineEditor.unit.spec-4JUADXZR.js.map → NumSplineEditor.unit.spec-MPVM6KSC.js.map} +0 -0
  624. /package/dist/{NumericDensity-ECSZCQRX.js.map → NumericDensity-35EKYW3V.js.map} +0 -0
  625. /package/dist/{NumericDensity.unit.spec-SXXCXM4X.js.map → NumericDensity.unit.spec-OR24PPRJ.js.map} +0 -0
  626. /package/dist/{NumericHandler-CMBN3FZX.js.map → NumericHandler-D6ZNGRE3.js.map} +0 -0
  627. /package/dist/{NumericHandler.unit.spec-UYTJG2Z2.js.map → NumericHandler.unit.spec-EKPGVSXI.js.map} +0 -0
  628. /package/dist/{RunChart2-MVFWLXZX.js.map → RunChart2-7DOXOFXV.js.map} +0 -0
  629. /package/dist/{WSIViewer-2Z636FMA.js.map → WSIViewer-E247ELKN.js.map} +0 -0
  630. /package/dist/{WsiSamplesPlot-LN75PND3.js.map → WsiSamplesPlot-3522VRB5.js.map} +0 -0
  631. /package/dist/{adSandbox-AJ7QUDOI.js.map → adSandbox-IDFY5P2P.js.map} +0 -0
  632. /package/dist/{alphaGenome-PVCRXAQK.js.map → alphaGenome-F3W7GJQ5.js.map} +0 -0
  633. /package/dist/{app-DWYCAFRP.js.map → app-2HDSFMRM.js.map} +0 -0
  634. /package/dist/{app-RENXV7VR.js.map → app-LIWPFL7C.js.map} +0 -0
  635. /package/dist/{bam-5G6IT6OX.js.map → bam-TBHHSATL.js.map} +0 -0
  636. /package/dist/{barchart-MLCCU6SU.js.map → barchart-HHFCBOZE.js.map} +0 -0
  637. /package/dist/{barchart.events-B6HQTLK2.js.map → barchart.events-UQUSSRXB.js.map} +0 -0
  638. /package/dist/{barchart.integration.spec-S43A7C7N.js.map → barchart.integration.spec-OF3MWFQ5.js.map} +0 -0
  639. /package/dist/{barchart2-QMKEN6MN.js.map → barchart2-XRMPCBBU.js.map} +0 -0
  640. /package/dist/{block-IGBB4BJH.js.map → block-5UEORHFB.js.map} +0 -0
  641. /package/dist/{block.init-NLCYAKV4.js.map → block.init-QSSFUVIT.js.map} +0 -0
  642. /package/dist/{block.mds.expressionrank-TZWGRDY7.js.map → block.mds.expressionrank-VBIIJHQF.js.map} +0 -0
  643. /package/dist/{block.mds.geneboxplot-OAFROYDL.js.map → block.mds.geneboxplot-KSBHXBNX.js.map} +0 -0
  644. /package/dist/{block.mds.junction-NSLXTW3D.js.map → block.mds.junction-FWZWMZJ2.js.map} +0 -0
  645. /package/dist/{block.mds.svcnv-ICPG4BW6.js.map → block.mds.svcnv-UXORVLH2.js.map} +0 -0
  646. /package/dist/{block.svg-DTFVIAAC.js.map → block.svg-6KIGW4QH.js.map} +0 -0
  647. /package/dist/{block.tk.aicheck-ZIMIBWHA.js.map → block.tk.aicheck-DK566Q4C.js.map} +0 -0
  648. /package/dist/{block.tk.ase-I7UNK5BK.js.map → block.tk.ase-2GB2VJJ6.js.map} +0 -0
  649. /package/dist/{block.tk.bam-W7JG46RS.js.map → block.tk.bam-RQNOLY52.js.map} +0 -0
  650. /package/dist/{block.tk.bedgraphdot-XAQJPKGJ.js.map → block.tk.bedgraphdot-N4YMZFO4.js.map} +0 -0
  651. /package/dist/{block.tk.bigwig.ui-YQOJPJSG.js.map → block.tk.bigwig.ui-4S7L7D7D.js.map} +0 -0
  652. /package/dist/{block.tk.hicstraw-OWWGGCHU.js.map → block.tk.hicstraw-AHFNQKCS.js.map} +0 -0
  653. /package/dist/{block.tk.junction-V63ZQQX6.js.map → block.tk.junction-7E6SNQMQ.js.map} +0 -0
  654. /package/dist/{block.tk.junction.textmatrixui-B7KXX7WN.js.map → block.tk.junction.textmatrixui-3C5JVYX5.js.map} +0 -0
  655. /package/dist/{block.tk.ld-2J6CT74S.js.map → block.tk.ld-TOUCLT3W.js.map} +0 -0
  656. /package/dist/{block.tk.menu-6AQLG7PW.js.map → block.tk.menu-JCV5ORD6.js.map} +0 -0
  657. /package/dist/{block.tk.pgv-4V6PKVCQ.js.map → block.tk.pgv-CUU22U6M.js.map} +0 -0
  658. /package/dist/{brainImaging-WRBGYLHK.js.map → brainImaging-MTQTXNNL.js.map} +0 -0
  659. /package/dist/{chunk-ENP4FLOX.js.map → chunk-2UYBBUXK.js.map} +0 -0
  660. /package/dist/{chunk-P2JDCMXW.js.map → chunk-2VPEFXEJ.js.map} +0 -0
  661. /package/dist/{chunk-OVPVPPRG.js.map → chunk-3QHIL3V3.js.map} +0 -0
  662. /package/dist/{chunk-QLWDUZ5K.js.map → chunk-44VXWKYJ.js.map} +0 -0
  663. /package/dist/{chunk-QRSIID3T.js.map → chunk-52D6EGUS.js.map} +0 -0
  664. /package/dist/{chunk-N2HBIQKU.js.map → chunk-5FHM3L4I.js.map} +0 -0
  665. /package/dist/{chunk-ZVSXHCGP.js.map → chunk-62TF2MCH.js.map} +0 -0
  666. /package/dist/{chunk-UOOMFM7K.js.map → chunk-67QM2NUK.js.map} +0 -0
  667. /package/dist/{chunk-XVDWYTJ6.js.map → chunk-6AAPHEWK.js.map} +0 -0
  668. /package/dist/{chunk-3B7EWIVB.js.map → chunk-6KPGMUHS.js.map} +0 -0
  669. /package/dist/{chunk-YQVEBFGT.js.map → chunk-6WBIZXNI.js.map} +0 -0
  670. /package/dist/{chunk-IA7S4UL5.js.map → chunk-7AAJVXEG.js.map} +0 -0
  671. /package/dist/{chunk-PXYYICV7.js.map → chunk-AFJRAR4N.js.map} +0 -0
  672. /package/dist/{chunk-K7XWZSQA.js.map → chunk-CVRYZMDE.js.map} +0 -0
  673. /package/dist/{chunk-MSW7OS2O.js.map → chunk-DGUTCYH2.js.map} +0 -0
  674. /package/dist/{chunk-5ZBEDKBD.js.map → chunk-DHNXATHC.js.map} +0 -0
  675. /package/dist/{chunk-L5SOHZ5V.js.map → chunk-E3BI23UK.js.map} +0 -0
  676. /package/dist/{chunk-4JVNATQR.js.map → chunk-E4JDHA3C.js.map} +0 -0
  677. /package/dist/{chunk-W35IOI74.js.map → chunk-FOJWYEGV.js.map} +0 -0
  678. /package/dist/{chunk-NL3DVEVX.js.map → chunk-FTN7Y34O.js.map} +0 -0
  679. /package/dist/{chunk-EHXI36HJ.js.map → chunk-GRG5MMPN.js.map} +0 -0
  680. /package/dist/{chunk-HTMXVOTH.js.map → chunk-GSU4PZN3.js.map} +0 -0
  681. /package/dist/{chunk-ST644IDH.js.map → chunk-IIRU2JLK.js.map} +0 -0
  682. /package/dist/{chunk-JFIOYO3M.js.map → chunk-JCB74ZSK.js.map} +0 -0
  683. /package/dist/{chunk-BRCDZJBQ.js.map → chunk-JUDWPYMA.js.map} +0 -0
  684. /package/dist/{chunk-O4WJSZC3.js.map → chunk-KT6VZBC7.js.map} +0 -0
  685. /package/dist/{chunk-OLUDD6EC.js.map → chunk-L2HBHFTK.js.map} +0 -0
  686. /package/dist/{chunk-VGHSLILD.js.map → chunk-LKADRF3Q.js.map} +0 -0
  687. /package/dist/{chunk-3JAC5CHL.js.map → chunk-MAXFRUGM.js.map} +0 -0
  688. /package/dist/{chunk-BL4ALBZ7.js.map → chunk-MQN7RYCK.js.map} +0 -0
  689. /package/dist/{chunk-JMJW3ERE.js.map → chunk-OEUI4CYZ.js.map} +0 -0
  690. /package/dist/{chunk-73ZT6NAT.js.map → chunk-OM36XUQL.js.map} +0 -0
  691. /package/dist/{chunk-LMGE54CQ.js.map → chunk-P5LNIH5X.js.map} +0 -0
  692. /package/dist/{chunk-KSN3EVKI.js.map → chunk-PG62PRMF.js.map} +0 -0
  693. /package/dist/{chunk-EBGX226R.js.map → chunk-Q3J3F2NU.js.map} +0 -0
  694. /package/dist/{chunk-AFXYPMFZ.js.map → chunk-RZBV6474.js.map} +0 -0
  695. /package/dist/{chunk-3T2PCWII.js.map → chunk-T5V4OC27.js.map} +0 -0
  696. /package/dist/{chunk-QEWMCAJW.js.map → chunk-UCKSUNSJ.js.map} +0 -0
  697. /package/dist/{chunk-PMDXCESS.js.map → chunk-W4TLYHZO.js.map} +0 -0
  698. /package/dist/{chunk-PZ3KIUWJ.js.map → chunk-WPZUXKIB.js.map} +0 -0
  699. /package/dist/{chunk-3AK6GP4M.js.map → chunk-XM47XD6G.js.map} +0 -0
  700. /package/dist/{chunk-MVCGSYS2.js.map → chunk-YZHGLSKQ.js.map} +0 -0
  701. /package/dist/{chunk-65YTZS3R.js.map → chunk-ZGOOZK3I.js.map} +0 -0
  702. /package/dist/{chunk-LOMVTHAM.js.map → chunk-ZH2VP6Q6.js.map} +0 -0
  703. /package/dist/{chunk-HROKXT4K.js.map → chunk-ZLOQXO5K.js.map} +0 -0
  704. /package/dist/{chunk-4BTAI6HQ.js.map → chunk-ZMNDBPJU.js.map} +0 -0
  705. /package/dist/{chunk-5MW5VMWD.js.map → chunk-ZRTW6X3F.js.map} +0 -0
  706. /package/dist/{chunk-7HJ6H7AZ.js.map → chunk-ZTT52MBP.js.map} +0 -0
  707. /package/dist/{condition-CZX2GSN4.js.map → condition-VUACUQYF.js.map} +0 -0
  708. /package/dist/{controls-BQR3WY5W.js.map → controls-N4MPSNO4.js.map} +0 -0
  709. /package/dist/{controls.config-TAVZDHFZ.js.map → controls.config-PRXVODCM.js.map} +0 -0
  710. /package/dist/{correlation-BIWVZNC6.js.map → correlation-QJZUYDFH.js.map} +0 -0
  711. /package/dist/{cuminc-EDXOOI5R.js.map → cuminc-JJHXW55V.js.map} +0 -0
  712. /package/dist/{cuminc.integration.spec-UZA7BDTB.js.map → cuminc.integration.spec-IXS2UO2O.js.map} +0 -0
  713. /package/dist/{customdata.inputui-PEB4CE7J.js.map → customdata.inputui-DUHO6M6I.js.map} +0 -0
  714. /package/dist/{dataDownload-KANEHJXJ.js.map → dataDownload-OFB7TYDB.js.map} +0 -0
  715. /package/dist/{dataDownload.integration.spec-23WLHSWJ.js.map → dataDownload.integration.spec-4HWDQO4C.js.map} +0 -0
  716. /package/dist/{dictionary-YOTUFVES.js.map → dictionary-BSKN37CP.js.map} +0 -0
  717. /package/dist/{dnaMethylation-TRFAZWRJ.js.map → dnaMethylation-5QNEEGC6.js.map} +0 -0
  718. /package/dist/{dnaMethylation.integration.spec-SPFZO76D.js.map → dnaMethylation.integration.spec-YIX3JSA7.js.map} +0 -0
  719. /package/dist/{dofetch-MH4MRMGY.js.map → dofetch-KFMGQY7G.js.map} +0 -0
  720. /package/dist/{e2pca-AFVAFUJ2.js.map → e2pca-VX42HDYZ.js.map} +0 -0
  721. /package/dist/{ep-4FXTLWB4.js.map → ep-B6ZNETLI.js.map} +0 -0
  722. /package/dist/{expclust.gdc.spec-SFOCKBLR.js.map → expclust.gdc.spec-SGECIILQ.js.map} +0 -0
  723. /package/dist/{facet-SY6PYSTN.js.map → facet-2W5SBPGP.js.map} +0 -0
  724. /package/dist/{geneExpClustering-FOY77R7P.js.map → geneExpClustering-6A7364T5.js.map} +0 -0
  725. /package/dist/{geneExpression-D2F2KVGY.js.map → geneExpression-NAM2UEYN.js.map} +0 -0
  726. /package/dist/{geneExpression-AHKX57BT.js.map → geneExpression-WF56ODMZ.js.map} +0 -0
  727. /package/dist/{geneExpression.unit.spec-SR2BGZQL.js.map → geneExpression.unit.spec-DNE2T3WI.js.map} +0 -0
  728. /package/dist/{geneORA-VJMYI4BT.js.map → geneORA-33FK2YOS.js.map} +0 -0
  729. /package/dist/{geneVariant-LFM5SO2P.js.map → geneVariant-C7PCNBOQ.js.map} +0 -0
  730. /package/dist/{geneVariant-OIKEV4JM.js.map → geneVariant-REELFRRA.js.map} +0 -0
  731. /package/dist/{geneVariant.integration.spec-T6BINPIN.js.map → geneVariant.integration.spec-GNXUGDKL.js.map} +0 -0
  732. /package/dist/{genefusion.ui-NLMW5XMI.js.map → genefusion.ui-WO5EPJDS.js.map} +0 -0
  733. /package/dist/{genomeBrowser.spec-DRYIFJLY.js.map → genomeBrowser.spec-VPAKTUJF.js.map} +0 -0
  734. /package/dist/{grin2-LGI535FF.js.map → grin2-GYHUYNEF.js.map} +0 -0
  735. /package/dist/{gsea-Z7DSDFOA.js.map → gsea-PE5WZ5ZI.js.map} +0 -0
  736. /package/dist/{hierCluster-HC2B5XRR.js.map → hierCluster-FH6YJHRT.js.map} +0 -0
  737. /package/dist/{hierCluster-PLHVN5S3.js.map → hierCluster-IFM5I5QN.js.map} +0 -0
  738. /package/dist/{hierCluster.config-E3DIJWL5.js.map → hierCluster.config-M57ZIWMB.js.map} +0 -0
  739. /package/dist/{hierCluster.integration.spec-OQLPUQG4.js.map → hierCluster.integration.spec-Z64RL7MC.js.map} +0 -0
  740. /package/dist/{hierCluster.interactivity-LRNPDTEH.js.map → hierCluster.interactivity-CDBAJXOY.js.map} +0 -0
  741. /package/dist/{importPlot-M5HGLHRO.js.map → importPlot-OWKXSK77.js.map} +0 -0
  742. /package/dist/{isoformExpression-PADLHHR5.js.map → isoformExpression-66XLJG73.js.map} +0 -0
  743. /package/dist/{isoformExpression.unit.spec-5BPAL4OS.js.map → isoformExpression.unit.spec-QJX2IRHL.js.map} +0 -0
  744. /package/dist/{launch.adhoc-JH6ZZFDB.js.map → launch.adhoc-JCWID253.js.map} +0 -0
  745. /package/dist/{leftlabel.sample-NS2TBANH.js.map → leftlabel.sample-5NZ6VQDN.js.map} +0 -0
  746. /package/dist/{maf-NOHIKTUP.js.map → maf-HIS2FQXK.js.map} +0 -0
  747. /package/dist/{maftimeline-WGWE52EF.js.map → maftimeline-UPJJQE23.js.map} +0 -0
  748. /package/dist/{matrix-B6NPQFFF.js.map → matrix-62CN2KXR.js.map} +0 -0
  749. /package/dist/{matrix-UAKRJL5A.js.map → matrix-SPEDEB3J.js.map} +0 -0
  750. /package/dist/{matrix.config-KJNJXPJJ.js.map → matrix.config-XB6WFXUY.js.map} +0 -0
  751. /package/dist/{matrix.integration.spec-VAXIR3E6.js.map → matrix.integration.spec-NN7OR5XM.js.map} +0 -0
  752. /package/dist/{matrix.interactivity-H4MCMJXU.js.map → matrix.interactivity-OWMHUJCX.js.map} +0 -0
  753. /package/dist/{matrix.layout-RFKQJM5D.js.map → matrix.layout-27QB6MWK.js.map} +0 -0
  754. /package/dist/{matrix.renderers-7JJIC6VC.js.map → matrix.renderers-EPXES5E4.js.map} +0 -0
  755. /package/dist/{matrix.sort.unit.spec-MQQVWWNT.js.map → matrix.sort.unit.spec-NBT5FSZ6.js.map} +0 -0
  756. /package/dist/{matrix.sorterUi.unit.spec-LG4TI7VF.js.map → matrix.sorterUi.unit.spec-QKGUE4RR.js.map} +0 -0
  757. /package/dist/{mavb-EIZHS6F4.js.map → mavb-M7Y74OWQ.js.map} +0 -0
  758. /package/dist/{mds.fimo-XVC6MI7W.js.map → mds.fimo-WCDFA7HG.js.map} +0 -0
  759. /package/dist/{mds.samplescatterplot-PRR4TKYI.js.map → mds.samplescatterplot-ZDHQ3MKJ.js.map} +0 -0
  760. /package/dist/{mds.survivalplot-3OG4Y2B6.js.map → mds.survivalplot-R74DL2RA.js.map} +0 -0
  761. /package/dist/{oncomatrix-SO6S6IIB.js.map → oncomatrix-MOITJBII.js.map} +0 -0
  762. /package/dist/{oncomatrix.spec-VXTF44K5.js.map → oncomatrix.spec-NALJBPYS.js.map} +0 -0
  763. /package/dist/{plot.2dvaf-JW5OJJXV.js.map → plot.2dvaf-IE2EZEFA.js.map} +0 -0
  764. /package/dist/{plot.app-T3GVCFQ3.js.map → plot.app-HTW6TZEH.js.map} +0 -0
  765. /package/dist/{plot.barplot-2TYP6DPI.js.map → plot.barplot-NCQEPEOY.js.map} +0 -0
  766. /package/dist/{plot.boxplot-HOQHM7JF.js.map → plot.boxplot-WNKVBVJJ.js.map} +0 -0
  767. /package/dist/{plot.brainImaging-5AI7BSD4.js.map → plot.brainImaging-2Z3TOO6J.js.map} +0 -0
  768. /package/dist/{plot.disco-HNNZHK5Z.js.map → plot.disco-4JAEIAYK.js.map} +0 -0
  769. /package/dist/{plot.dzi-4OQSO7SY.js.map → plot.dzi-ZGLOVJJN.js.map} +0 -0
  770. /package/dist/{plot.ssgq-VZTTGECT.js.map → plot.ssgq-IHUILM43.js.map} +0 -0
  771. /package/dist/{plot.vaf2cov-ASEELRDV.js.map → plot.vaf2cov-ZYCQMD27.js.map} +0 -0
  772. /package/dist/{plot.wsi-MDWYLU4R.js.map → plot.wsi-3GISVBDH.js.map} +0 -0
  773. /package/dist/{polar-QSY6JG4P.js.map → polar-4AUAZHBV.js.map} +0 -0
  774. /package/dist/{polar2-FD6656VD.js.map → polar2-SRD4WWXU.js.map} +0 -0
  775. /package/dist/{profile.spec-V7EQBXT2.js.map → profile.spec-TOITKBBZ.js.map} +0 -0
  776. /package/dist/{profileBarchart-EIKHZAPD.js.map → profileBarchart-Z4SYIYBE.js.map} +0 -0
  777. /package/dist/{profileForms-NGFRXPFF.js.map → profileForms-RA7XQ2QT.js.map} +0 -0
  778. /package/dist/{profilePlot-2UFKJ2OC.js.map → profilePlot-4BM3XZVK.js.map} +0 -0
  779. /package/dist/{profileRadar-B2R7OV5F.js.map → profileRadar-EYBESEPI.js.map} +0 -0
  780. /package/dist/{profileRadarFacility-ILC7POCI.js.map → profileRadarFacility-FZYTFM26.js.map} +0 -0
  781. /package/dist/{proteomeAbundance-OF27N347.js.map → proteomeAbundance-65R6M4YQ.js.map} +0 -0
  782. /package/dist/{qualitative-CSUO2WG5.js.map → qualitative-E7WL6DN4.js.map} +0 -0
  783. /package/dist/{radar2-L2HGCUYR.js.map → radar2-I6FN5SUX.js.map} +0 -0
  784. /package/dist/{radarFacility2-HXUUTRYO.js.map → radarFacility2-GVK7PT3V.js.map} +0 -0
  785. /package/dist/{regression-Y4NYGZSA.js.map → regression-TIR5D354.js.map} +0 -0
  786. /package/dist/{regression.inputs-RWFIJLNF.js.map → regression.inputs-2AMJCJ3L.js.map} +0 -0
  787. /package/dist/{regression.inputs.term-QIU5SHTN.js.map → regression.inputs.term-D6D2QEUB.js.map} +0 -0
  788. /package/dist/{regression.inputs.values.table-FM6QTSEV.js.map → regression.inputs.values.table-M3IPLGDJ.js.map} +0 -0
  789. /package/dist/{regression.integration.spec-YRKKU7HL.js.map → regression.integration.spec-ROUSXLMH.js.map} +0 -0
  790. /package/dist/{regression.results-YUDCHUZJ.js.map → regression.results-YD5S74YS.js.map} +0 -0
  791. /package/dist/{regression.spec-G4GIIV32.js.map → regression.spec-4OXBBTNO.js.map} +0 -0
  792. /package/dist/{report-2N4FBR4Q.js.map → report-ETNALKTY.js.map} +0 -0
  793. /package/dist/{sampleScatter.spec-UIUYO4WR.js.map → sampleScatter.spec-LECMFMI2.js.map} +0 -0
  794. /package/dist/{sampleView-TOK5Y5KU.js.map → sampleView-B5TM7JOW.js.map} +0 -0
  795. /package/dist/{samplelst-YW5ZS3GJ.js.map → samplelst-GFQCG4SS.js.map} +0 -0
  796. /package/dist/{samplematrix-447BHSO7.js.map → samplematrix-OMTNWCJK.js.map} +0 -0
  797. /package/dist/{sc-O2PL3FL2.js.map → sc-MIEEZBWG.js.map} +0 -0
  798. /package/dist/{scatter-4DXHOWVY.js.map → scatter-ETOZ722F.js.map} +0 -0
  799. /package/dist/{scatter.integration.spec-ZPTM3AGQ.js.map → scatter.integration.spec-TS4PNRLX.js.map} +0 -0
  800. /package/dist/{selectGenomeWithTklst-3RLZFW62.js.map → selectGenomeWithTklst-Y5QIM2JB.js.map} +0 -0
  801. /package/dist/{singleCellCellType-3LQJXS7H.js.map → singleCellCellType-HOJHZF5W.js.map} +0 -0
  802. /package/dist/{singleCellCellType.unit.spec-UJM72SP4.js.map → singleCellCellType.unit.spec-MH5V3RPX.js.map} +0 -0
  803. /package/dist/{singleCellGeneExpression-JOWJWPIQ.js.map → singleCellGeneExpression-YVQ5TIKN.js.map} +0 -0
  804. /package/dist/{singleCellGeneExpression.unit.spec-VY5CGRZH.js.map → singleCellGeneExpression.unit.spec-BMFFT5HO.js.map} +0 -0
  805. /package/dist/{singleCellPlot-IVLVKOO6.js.map → singleCellPlot-3YFUYA2Y.js.map} +0 -0
  806. /package/dist/{singlecell-VJJZJZF7.js.map → singlecell-FK5JETW5.js.map} +0 -0
  807. /package/dist/{singlecell-VQJ2252L.js.map → singlecell-RL7V7DIC.js.map} +0 -0
  808. /package/dist/{snp-ALMKZKL2.js.map → snp-FT7HB3XN.js.map} +0 -0
  809. /package/dist/{snp.unit.spec-GJQBAHGQ.js.map → snp.unit.spec-CLYVYPPG.js.map} +0 -0
  810. /package/dist/{snplocus-WCNCMFWZ.js.map → snplocus-M5SEQGAC.js.map} +0 -0
  811. /package/dist/{spliceevent.a53ss.diagram-4Q4JF4RX.js.map → spliceevent.a53ss.diagram-EJ5CTRCZ.js.map} +0 -0
  812. /package/dist/{spliceevent.exonskip.diagram-IOYOKELT.js.map → spliceevent.exonskip.diagram-ETXMOHZ3.js.map} +0 -0
  813. /package/dist/{spliceevent.noeventdiagram-77ZCOHSF.js.map → spliceevent.noeventdiagram-S2O4ZM2Z.js.map} +0 -0
  814. /package/dist/{ssGSEA-QTXXIN4K.js.map → ssGSEA-6PMDQDTJ.js.map} +0 -0
  815. /package/dist/{ssGSEA.unit.spec-LQESATT3.js.map → ssGSEA.unit.spec-JD5T4R2N.js.map} +0 -0
  816. /package/dist/{summarizeCnvGeneexp-YKUQGDQF.js.map → summarizeCnvGeneexp-GCHNKTIU.js.map} +0 -0
  817. /package/dist/{summarizeGeneexpSurvival-ARGG5VDC.js.map → summarizeGeneexpSurvival-R2RYQZ3M.js.map} +0 -0
  818. /package/dist/{summarizeMutationCnv-FMZYT3EC.js.map → summarizeMutationCnv-LB2BIYRL.js.map} +0 -0
  819. /package/dist/{summarizeMutationDiagnosis-ZX7I46SC.js.map → summarizeMutationDiagnosis-3JUY75LM.js.map} +0 -0
  820. /package/dist/{summarizeMutationSurvival-RCFMTT43.js.map → summarizeMutationSurvival-VYLRWTCF.js.map} +0 -0
  821. /package/dist/{summary-QLL5YVI2.js.map → summary-2QQ72IEQ.js.map} +0 -0
  822. /package/dist/{summary.integration.spec-DHY6XCEJ.js.map → summary.integration.spec-XXU362UQ.js.map} +0 -0
  823. /package/dist/{summaryInput-ANCUQGIB.js.map → summaryInput-OZHZG3PV.js.map} +0 -0
  824. /package/dist/{sunburst-RDNFBOCK.js.map → sunburst-CMCJCANX.js.map} +0 -0
  825. /package/dist/{survival-BG7QV52L.js.map → survival-EBD4DHO7.js.map} +0 -0
  826. /package/dist/{survival-WSN36OQE.js.map → survival-ISLRRPKU.js.map} +0 -0
  827. /package/dist/{survival.integration.spec-37KAJ5IK.js.map → survival.integration.spec-FS7V4OXK.js.map} +0 -0
  828. /package/dist/{svgraph-A5WGHW4S.js.map → svgraph-KGLNUM7W.js.map} +0 -0
  829. /package/dist/{svmr-CYRHHWZF.js.map → svmr-NXZ5VLKH.js.map} +0 -0
  830. /package/dist/{table-VHO7E5PI.js.map → table-ISOQOI6C.js.map} +0 -0
  831. /package/dist/{termCollection-HSVSH7TJ.js.map → termCollection-7ZSU3I45.js.map} +0 -0
  832. /package/dist/{termCollection-E4Q6GLXN.js.map → termCollection-V2A5BDQB.js.map} +0 -0
  833. /package/dist/{termCollection.unit.spec-ZCE3TUMS.js.map → termCollection.unit.spec-6VLCJGOU.js.map} +0 -0
  834. /package/dist/{tk-GPRHDN4K.js.map → tk-6AB6XYIE.js.map} +0 -0
  835. /package/dist/{tp.ui-LTUA3FSL.js.map → tp.ui-2O4UW5N7.js.map} +0 -0
  836. /package/dist/{tvs.dt-G43PAAKD.js.map → tvs.dt-CY6TOQVB.js.map} +0 -0
  837. /package/dist/{tvs.dtcnv.categorical-UHDS2TGZ.js.map → tvs.dtcnv.categorical-AYQ432TW.js.map} +0 -0
  838. /package/dist/{tvs.dtcnv.continuous-ZNGYQKTD.js.map → tvs.dtcnv.continuous-XVDL6SG3.js.map} +0 -0
  839. /package/dist/{tvs.dtfusion-JBEEUDUS.js.map → tvs.dtfusion-V3AV7A6Q.js.map} +0 -0
  840. /package/dist/{tvs.dtsnvindel-XXN5Q7RN.js.map → tvs.dtsnvindel-XM3NXIT7.js.map} +0 -0
  841. /package/dist/{tvs.dtsv-MO6L7HHV.js.map → tvs.dtsv-Z2GYRINW.js.map} +0 -0
  842. /package/dist/{tvs.samplelst-HKY6UUJM.js.map → tvs.samplelst-C4FB63G7.js.map} +0 -0
  843. /package/dist/{tvs.termCollection-TY6FPL25.js.map → tvs.termCollection-VHTSC2ST.js.map} +0 -0
  844. /package/dist/{violin-YHE3WSGR.js.map → violin-KGGTUQFF.js.map} +0 -0
  845. /package/dist/{violin.integration.spec-F2UD7BHC.js.map → violin.integration.spec-5EW6PLJX.js.map} +0 -0
  846. /package/dist/{violin.interactivity-LVDTDEPQ.js.map → violin.interactivity-RI4RURGO.js.map} +0 -0
  847. /package/dist/{violin.renderer-IIEIUGRI.js.map → violin.renderer-EWU2IFZE.js.map} +0 -0
  848. /package/dist/{vocabulary-WQRYXBRO.js.map → vocabulary-VLIGC7OP.js.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../plots/matrix/matrix.controls.samples.ts", "../plots/matrix/matrix.controls.genes.ts", "../plots/matrix/matrix.controls.variables.ts", "../plots/matrix/matrix.controls.dimensions.ts", "../plots/matrix/matrix.controls.legend.ts", "../plots/matrix/matrix.controls.mutations.ts", "../plots/matrix/matrix.controls.cnv.ts", "../plots/matrix/matrix.controls.download.ts", "../plots/matrix/matrix.zoomPanScroll.ts", "../plots/matrix/matrix.controls.ts", "../plots/matrix/matrix.xtw.ts", "../plots/matrix/matrix.js"],
4
- "sourcesContent": ["import { getSorterUi } from './matrix.sorterUi'\nimport { fillTermWrapper } from '#termsetting'\nimport { make_radios, make_one_checkbox } from '#dom'\nimport { select } from 'd3-selection'\nimport { isNumericTerm } from '#shared/terms.js'\nimport type { MatrixControls } from './matrix.controls'\n\nexport function setSamplesBtn(self: MatrixControls, s: any) {\n\tconst l = s.controlLabels\n\tconst controls = self\n\tconst parent = self.parent\n\tconst rows: any[] = [\n\t\t{\n\t\t\tlabel: `Maximum # ${l.Samples}`,\n\t\t\ttitle: `Limit the number of displayed ${l.samples}`,\n\t\t\ttype: 'number',\n\t\t\tchartType: 'matrix',\n\t\t\tsettingsKey: 'maxSample',\n\t\t\tgetDisplayStyle(plot: any) {\n\t\t\t\treturn plot.chartType == 'hierCluster' ? 'none' : 'table-row'\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tlabel: `Sort ${l.Sample} Groups`,\n\t\t\ttitle: `Set how to sort ${l.sample} groups`,\n\t\t\ttype: 'radio',\n\t\t\tchartType: 'matrix',\n\t\t\tsettingsKey: 'sortSampleGrpsBy',\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Predefined or Group Name',\n\t\t\t\t\tvalue: 'name',\n\t\t\t\t\ttitle: `Sort by group name`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: `${l.Sample} Count`,\n\t\t\t\t\tvalue: 'sampleCount',\n\t\t\t\t\ttitle: `Sort by the number of samples in the group`\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: `Hits`,\n\t\t\t\t\tvalue: 'hits',\n\t\t\t\t\ttitle: `Sort by the total number of variants for every ${l.sample} in the group`\n\t\t\t\t}\n\t\t\t],\n\t\t\tgetDisplayStyle(plot: any) {\n\t\t\t\treturn plot.divideBy && !plot.hierCluster ? 'table-row' : 'none'\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tlabel: `${l.Sample} Group Label Character Limit`,\n\t\t\ttitle: `Truncate the ${l.sample} group label if it exceeds this maximum number of characters`,\n\t\t\ttype: 'number',\n\t\t\tchartType: 'matrix',\n\t\t\tsettingsKey: 'sampleGrpLabelMaxChars',\n\t\t\tgetDisplayStyle(plot: any) {\n\t\t\t\treturn plot.divideBy && !plot.hierCluster ? 'table-row' : 'none'\n\t\t\t}\n\t\t},\n\t\t{\n\t\t\tlabel: `${l.Sample} Label Character Limit`,\n\t\t\ttitle: `Truncate the ${l.sample} label if it exceeds this maximum number of characters`,\n\t\t\ttype: 'number',\n\t\t\tchartType: 'matrix',\n\t\t\tsettingsKey: 'collabelmaxchars'\n\t\t},\n\t\t{\n\t\t\tlabel: `Toggle sample labels`,\n\t\t\ttitle: `Do not automatically show sample labels based on column width`,\n\t\t\ttype: 'radio',\n\t\t\tchartType: 'matrix',\n\t\t\tsettingsKey: 'sampleLabelsToggle',\n\t\t\tstyles: { display: 'inline-block' },\n\t\t\toptions: [\n\t\t\t\t{ label: `Based on column width`, value: 'auto' },\n\t\t\t\t{ label: 'Always hide', value: 'hide' }\n\t\t\t]\n\t\t},\n\t\t{\n\t\t\tlabel: `Group ${l.Samples} By`,\n\t\t\ttitle: `Select a variable with discrete values to group ${l.samples}`,\n\t\t\ttype: 'term',\n\t\t\tchartType: 'matrix',\n\t\t\tconfigKey: 'divideBy',\n\t\t\tvocabApi: self.opts.app.vocabApi,\n\t\t\tstate: {\n\t\t\t\tvocab: self.opts.vocab\n\t\t\t\t//activeCohort: appState.activeCohort\n\t\t\t},\n\t\t\tprocessInput: async (tw: any) => {\n\t\t\t\tif (tw?.term && isNumericTerm(tw.term)) {\n\t\t\t\t\t// any numeric term should be discrete when used as divideBy term\n\t\t\t\t\t// tw is missing when dividedBy term deleted\n\t\t\t\t\ttw.q = { ...tw.q, mode: 'discrete' }\n\t\t\t\t}\n\t\t\t\tif (tw) await fillTermWrapper(tw, self.opts.app.vocabApi)\n\t\t\t\treturn tw\n\t\t\t},\n\t\t\tprocessConfig: (config: any) => {\n\t\t\t\tif (self.parent.chartType == 'hierCluster' && config['divideBy']) {\n\t\t\t\t\tconfig.settings = {\n\t\t\t\t\t\thierCluster: {\n\t\t\t\t\t\t\tyDendrogramHeight: 0,\n\t\t\t\t\t\t\tclusterSamples: false\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (self.parent.config.divideBy)\n\t\t\t\t\tconfig.legendValueFilter = self.parent.mayRemoveTvsEntry(self.parent.config.divideBy)\n\t\t\t},\n\t\t\tgetBodyParams: () => {\n\t\t\t\t// hierCluster hides the groupBy, so no need to consider gene expression term type\n\t\t\t\tconst currentGeneNames = self.parent.termOrder\n\t\t\t\t\t.filter((t: any) => t.tw.term.type === 'geneVariant')\n\t\t\t\t\t.map((t: any) =>\n\t\t\t\t\t\tt.tw.term.chr ? `${t.tw.term.chr}:${t.tw.term.start}-${t.tw.term.stop}` : t.tw.term.gene || t.tw.term.name\n\t\t\t\t\t) // TODO term.gene replaces term.name\n\t\t\t\tif (currentGeneNames.length) return { currentGeneNames }\n\t\t\t\treturn {}\n\t\t\t}\n\t\t}\n\t]\n\n\trows.push({\n\t\tlabel: `Sort ${l.Sample} Priority`,\n\t\ttitle: `Set how to sort ${l.samples}`,\n\t\ttype: 'custom',\n\t\t// the \"input\" argument is created by controls\n\t\tinit(input: any) {\n\t\t\tconst m = parent.config.settings.matrix\n\t\t\tif (!controls.activeTab) controls.activeTab = 'basic'\n\t\t\tinput.dom.inputTd.style('padding', '5px')\n\t\t\t// **** !!! TODO: use dom/toggleButtons to create tabbed sections !!!\n\t\t\tconst btnsDiv = input.dom.inputTd.append('div').style('margin-bottom', '5px')\n\t\t\tconst basicBtn = btnsDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.style('padding-right', '5px')\n\t\t\t\t.style('border-right', '2px solid black')\n\t\t\t\t.style('text-decoration', controls.activeTab == 'basic' ? 'underline' : '')\n\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t.html('Basic')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tcontrols.activeTab = 'basic'\n\t\t\t\t\tbasicBtn.style('text-decoration', 'underline')\n\t\t\t\t\tadvancedBtn.style('text-decoration', '')\n\t\t\t\t\tbasicDiv.style('display', '')\n\t\t\t\t\tadvancedDiv.style('display', 'none')\n\t\t\t\t})\n\t\t\tconst advancedBtn = btnsDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.style('margin-left', '5px')\n\t\t\t\t.style('text-decoration', controls.activeTab == 'advanced' ? 'underline' : '')\n\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t.html('Advanced')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tcontrols.activeTab = 'advanced'\n\t\t\t\t\tbasicBtn.style('text-decoration', '')\n\t\t\t\t\tadvancedBtn.style('text-decoration', 'underline')\n\t\t\t\t\tbasicDiv.style('display', 'none')\n\t\t\t\t\tadvancedDiv.style('display', '')\n\t\t\t\t})\n\n\t\t\tconst basicDiv = input.dom.inputTd.append('div').style('display', controls.activeTab == 'basic' ? '' : 'none')\n\t\t\tconst ssmDiv = basicDiv.append('div')\n\t\t\tssmDiv.append('span').html('SSM')\n\t\t\tconst { inputs } = make_radios({\n\t\t\t\t// holder, options, callback, styles\n\t\t\t\tholder: ssmDiv.append('span'),\n\t\t\t\toptions: [\n\t\t\t\t\t{ label: 'by consequence', value: 'consequence', checked: m.sortByMutation === 'consequence' },\n\t\t\t\t\t{ label: 'by presence', value: 'presence', checked: m.sortByMutation === 'presence' }\n\t\t\t\t],\n\t\t\t\tstyles: {\n\t\t\t\t\tdisplay: 'inline-block'\n\t\t\t\t},\n\t\t\t\tcallback: (sortByMutation: any) => {\n\t\t\t\t\tconst sortOptions = parent.config.settings.matrix.sortOptions\n\t\t\t\t\tconst activeOption = sortOptions.a\n\t\t\t\t\tconst mutTb = activeOption.sortPriority[0].tiebreakers[1]\n\t\t\t\t\tmutTb.disabled = !sortByMutation\n\t\t\t\t\tmutTb.isOrdered = sortByMutation === 'consequence'\n\n\t\t\t\t\tparent.app.dispatch({\n\t\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\t\tid: parent.id,\n\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\tsettings: {\n\t\t\t\t\t\t\t\tmatrix: {\n\t\t\t\t\t\t\t\t\tsortByMutation, // needed to show the correct status for checkbox, but actual sorting behavior\n\t\t\t\t\t\t\t\t\tsortOptions // is based on sortOptions.a[*].tiebreaker[*][disabled, isOrdered]\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\t\t\t})\n\n\t\t\tinputs.style('margin', '2px 0 0 2px').style('vertical-align', 'top')\n\t\t\tconst cnvDiv = basicDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', m.showMatrixCNV != 'none' && !m.allMatrixCNVHidden ? 'block' : 'none')\n\n\t\t\tcnvDiv.append('span').html('CNV')\n\t\t\t// holder, labeltext, callback, checked, divstyle\n\t\t\tconst checkbox = make_one_checkbox({\n\t\t\t\tholder: cnvDiv.append('span'),\n\t\t\t\tdivstyle: { display: 'inline-block' },\n\t\t\t\tchecked: m.sortByCNV,\n\t\t\t\tlabeltext: 'sort by CNV',\n\t\t\t\tcallback: () => {\n\t\t\t\t\tconst sortByCNV = checkbox.property('checked')\n\t\t\t\t\tconst sortOptions = parent.config.settings.matrix.sortOptions\n\t\t\t\t\tconst activeOption = sortOptions.a\n\t\t\t\t\tconst cnvTb = activeOption.sortPriority[0].tiebreakers[2]\n\t\t\t\t\tcnvTb.disabled = !sortByCNV\n\t\t\t\t\tcnvTb.isOrdered = sortByCNV\n\n\t\t\t\t\tparent.app.dispatch({\n\t\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\t\tid: parent.id,\n\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\tsettings: {\n\t\t\t\t\t\t\t\tmatrix: {\n\t\t\t\t\t\t\t\t\tsortByCNV, // needed to show the correct status for checkbox, but actual sorting behavior\n\t\t\t\t\t\t\t\t\tsortOptions // is based on sortOptions.a[*].tiebreaker[*][disabled, isOrdered]\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\t\t\t})\n\n\t\t\tconst advancedDiv = input.dom.inputTd\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', controls.activeTab == 'advanced' ? '' : 'none')\n\t\t\tinput.dom.row.on('mouseover', function (this: any) {\n\t\t\t\tthis.style.backgroundColor = '#fff'\n\t\t\t\tthis.style.textShadow = 'none'\n\t\t\t})\n\n\t\t\tif (!controls.sorterUi) {\n\t\t\t\tcontrols.sorterUi = getSorterUi({\n\t\t\t\t\tcontrols: controls,\n\t\t\t\t\tholder: advancedDiv,\n\t\t\t\t\ttip: controls.parent.app.tip\n\t\t\t\t})\n\t\t\t} else {\n\t\t\t\tcontrols.sorterUi.main(controls.parent.config.settings.matrix, { holder: advancedDiv })\n\t\t\t}\n\n\t\t\treturn {\n\t\t\t\tmain: (plot: any) => {\n\t\t\t\t\tconst s = plot.settings.matrix\n\t\t\t\t\t// ssm\n\t\t\t\t\tinputs.property('checked', (d: any) => d.value == s.sortByMutation)\n\t\t\t\t\t// cnv\n\t\t\t\t\tcheckbox.property('checked', s.sortByCNV)\n\t\t\t\t\tcnvDiv.style('display', s.showMatrixCNV != 'none' && !s.allMatrixCNVHidden ? 'block' : 'none')\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t})\n\n\tself.opts.holder\n\t\t.append('button')\n\t\t//.property('disabled', d => d.disabled)\n\t\t.datum({\n\t\t\tlabel: l.Samples || `Samples`,\n\t\t\tgetCount: () =>\n\t\t\t\t'sampleCount' in self.overrides ? self.overrides.sampleCount : self.parent.sampleOrder?.length || 0,\n\t\t\trows,\n\t\t\tcustomInputs: updateSamplesControls\n\t\t})\n\t\t.html((d: any) => d.label)\n\t\t.style('margin', '2px 0')\n\t\t.on('click', (event: any, d: any) => self.callback(event, d))\n}\n\nexport function updateSamplesControls(self: MatrixControls, app: any, parent: any, table: any) {\n\tif (parent.chartType == 'hierCluster' && parent.config.settings.hierCluster.clusterSamples) {\n\t\tconst l = parent.config.settings.matrix.controlLabels\n\t\tconst sortingControl = select(\n\t\t\ttable\n\t\t\t\t.selectAll('td')\n\t\t\t\t.filter(function (this: any) {\n\t\t\t\t\treturn select(this).text() == `Sort ${l.Sample} Priority`\n\t\t\t\t})\n\t\t\t\t.node()\n\t\t\t\t.closest('tr')\n\t\t)\n\t\tsortingControl.style('display', 'none')\n\t}\n}\n", "import { initByInput } from '#plots/controls.config.js'\nimport { fillTermWrapper, get$id } from '#termsetting'\nimport { Menu, GeneSetEditUI } from '#dom'\nimport { TermTypes } from '#shared/terms.js'\nimport { getGEunit } from '#tw/geneExpression'\nimport type { MatrixControls } from './matrix.controls'\n\nconst tip = new Menu({ padding: '' })\n\nexport function setGenesBtn(self: MatrixControls, s: any) {\n\tconst l = s.controlLabels\n\tconst renderStyleOptions = [\n\t\t{\n\t\t\tlabel: `&nbsp;Stacked <span style=\"font-size:.7em;color:#555;\">Show stacked rectangles in the same matrix cell to render variants for the same ${l.sample} and gene</span>`,\n\t\t\tvalue: '',\n\t\t\ttitle: `Show stacked rectangles in the same matrix cell to render variants for the same ${l.sample} and gene`\n\t\t},\n\t\t{\n\t\t\tlabel: `&nbsp;OncoPrint <span style=\"font-size:.7em;color:#555;\">Show overlapping rectangles in the same matrix cell to render variants for the same ${l.sample} and gene</span>`,\n\t\t\tvalue: 'oncoprint',\n\t\t\ttitle: `Show overlapping rectangles in the same matrix cell to render variants for the same ${l.sample} and gene`\n\t\t}\n\t]\n\tif (s.addMutationCNVButtons && self.parent.chartType !== 'hierCluster')\n\t\trenderStyleOptions.unshift({\n\t\t\tlabel: `&nbsp;Single <span style=\"font-size:.7em;color:#555;\">Show a single rectangle in a matrix cell to render the most severe variant (truncating > indels > missense > synonymous) for the same ${l.sample} and gene</span>`,\n\t\t\tvalue: 'single',\n\t\t\ttitle: `Show a single rectangle in a matrix cell to render the most severe variant (truncating > indels > missense > synonymous) for the same ${l.sample} and gene`\n\t\t})\n\tself.opts.holder\n\t\t.append('button')\n\t\t//.property('disabled', d => d.disabled)\n\t\t.datum({\n\t\t\tlabel: 'Genes',\n\t\t\tgetCount: () =>\n\t\t\t\tself.parent.termOrder?.filter(\n\t\t\t\t\t(t: any) => t.tw.term.type == TermTypes.GENE_VARIANT || t.tw.term.type == TermTypes.GENE_EXPRESSION\n\t\t\t\t).length || 0,\n\t\t\tcustomInputs: addGeneInputs,\n\t\t\trows: [\n\t\t\t\t{\n\t\t\t\t\tlabel: `Display ${l.Sample} Counts for Gene`,\n\t\t\t\t\ttitle: `Include the ${l.sample} count in the gene label`,\n\t\t\t\t\ttype: 'radio',\n\t\t\t\t\tchartType: 'matrix',\n\t\t\t\t\tsettingsKey: 'samplecount4gene',\n\t\t\t\t\tstyles: { display: 'inline-block' },\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{ label: 'Absolute', value: 'abs' },\n\t\t\t\t\t\t{ label: `Percent`, value: 'pct' },\n\t\t\t\t\t\t{ label: `None`, value: '' }\n\t\t\t\t\t],\n\t\t\t\t\tgetDisplayStyle() {\n\t\t\t\t\t\treturn self.parent.termOrder?.filter((t: any) => t.tw.term.type == 'geneVariant').length\n\t\t\t\t\t\t\t? 'table-row'\n\t\t\t\t\t\t\t: 'none'\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\t// TODO: implement this contol option\n\t\t\t\t// {\n\t\t\t\t// \tlabel: `Exclude From ${l.Sample} Displayed Counts`,\n\t\t\t\t// \ttitle: `Do not include these variations/mutations when counting samples for a gene.`,\n\t\t\t\t// \ttype: 'text',\n\t\t\t\t// \tchartType: 'matrix',\n\t\t\t\t// \tsettingsKey: 'geneVariantCountSamplesSkipMclass',\n\t\t\t\t// \tprocessInput: tw => {},\n\t\t\t\t// },\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Genomic Alterations Rendering',\n\t\t\t\t\ttitle: `Set how to indicate a ${l.sample}'s applicable variant types in the same matrix cell`,\n\t\t\t\t\ttype: 'radio',\n\t\t\t\t\tchartType: 'matrix',\n\t\t\t\t\tsettingsKey: 'cellEncoding',\n\t\t\t\t\toptions: renderStyleOptions,\n\t\t\t\t\tstyles: { padding: '5px 0px', margin: 0 },\n\t\t\t\t\tlabelDisplay: 'block',\n\t\t\t\t\tgetDisplayStyle() {\n\t\t\t\t\t\treturn self.parent.termOrder?.filter((t: any) => t.tw.term.type == 'geneVariant').length\n\t\t\t\t\t\t\t? 'table-row'\n\t\t\t\t\t\t\t: 'none'\n\t\t\t\t\t},\n\t\t\t\t\tcallback: self.parent.geneStyleControlCallback\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Sort Genes',\n\t\t\t\t\ttitle: 'Set how to order the genes as rows',\n\t\t\t\t\ttype: 'radio',\n\t\t\t\t\tchartType: 'matrix',\n\t\t\t\t\tsettingsKey: 'sortTermsBy',\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{ label: 'By Input Data Order', value: 'asListed' },\n\t\t\t\t\t\t{ label: `By ${l.sample} Count`, value: 'sampleCount' }\n\t\t\t\t\t],\n\t\t\t\t\tstyles: { padding: 0, 'padding-right': '10px', margin: 0, display: 'inline-block' },\n\t\t\t\t\tgetDisplayStyle() {\n\t\t\t\t\t\treturn self.parent.termOrder?.filter((t: any) => t.tw.term.type == 'geneVariant').length\n\t\t\t\t\t\t\t? 'table-row'\n\t\t\t\t\t\t\t: 'none'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t\t.html((d: any) => d.label)\n\t\t.style('margin', '2px 0')\n\t\t.on('click', (event: any, d: any) => self.callback(event, d))\n}\n\nexport async function addGeneInputs(self: MatrixControls, app: any, parent: any, table: any) {\n\tif (parent.chartType == 'hierCluster' && parent.config.dataType == TermTypes.GENE_EXPRESSION) {\n\t\tappendGeneInputs(self, app, parent, table, 'hierCluster')\n\t}\n\tif (\n\t\tparent.state?.termdbConfig?.allowedTermTypes?.includes(TermTypes.GENE_VARIANT) ||\n\t\tparent.state.termdbConfig.queries.snvindel\n\t)\n\t\tappendGeneInputs(self, app, parent, table)\n}\n\nexport async function appendGeneInputs(self: MatrixControls, app: any, parent: any, table: any, geneInputType?: string) {\n\ttip.clear()\n\tif (!parent.selectedGroup) parent.selectedGroup = 0\n\n\tif (parent.opts.customInputs?.genes) {\n\t\t// these are embedder portal specific controls\n\t\tfor (const inputConfig of parent.opts.customInputs.genes) {\n\t\t\tinputConfig.chartType = 'matrix'\n\t\t\tconst holder = table.append('tr')\n\t\t\tif (inputConfig.title) holder.attr('aria-label', inputConfig.title)\n\t\t\tconst input = await initByInput[inputConfig.type](\n\t\t\t\tObject.assign(\n\t\t\t\t\t{},\n\t\t\t\t\t{\n\t\t\t\t\t\tholder,\n\t\t\t\t\t\tapp,\n\t\t\t\t\t\tid: parent.id,\n\t\t\t\t\t\tdebug: self.opts.debug,\n\t\t\t\t\t\tparent\n\t\t\t\t\t},\n\t\t\t\t\tinputConfig\n\t\t\t\t)\n\t\t\t)\n\t\t\tinput.main(parent.config)\n\t\t}\n\t}\n\tlet geneInputTr\n\tif (geneInputType == 'hierCluster' || parent.chartType !== 'hierCluster') {\n\t\t// Insert the gene set edit UI at the top\n\t\tgeneInputTr = table.insert('tr', () => table.select('tr').node())\n\t} else {\n\t\t// Insert after first gene set edit UI\n\t\tconst secondTr = table.selectAll('tr').nodes()[1] || null\n\t\t// Add visual separator: <hr> row\n\t\tconst hrTr = table.insert('tr', () => secondTr)\n\t\thrTr.append('td').attr('colspan', 2).append('hr').style('border', '1px solid #ccc')\n\t\tgeneInputTr = table.insert('tr', () => secondTr)\n\t}\n\taddGenesetInput(self, app, parent, geneInputTr, geneInputType)\n}\n\nexport function addGenesetInput(self: MatrixControls, app: any, parent: any, tr: any, geneInputType?: string) {\n\tconst controlPanelBtn = self.btns.filter((d: any) => d.label.endsWith('Genes'))?.node()\n\tconst tip = app.tip //new Menu({ padding: '5px' })\n\tconst tg = parent.config.termgroups\n\n\tlet selectedGroup: any\n\tconst triggerGenesetEdit = (holder: any) => {\n\t\tholder.selectAll('*').remove()\n\t\tconst geneList = selectedGroup.lst.map((item: any) => {\n\t\t\treturn { gene: item.name }\n\t\t}) //To do, selectedGroup.lst may replace name with gene as well\n\t\tnew GeneSetEditUI({\n\t\t\tholder,\n\t\t\tgenome: app.opts.genome,\n\t\t\tgeneList,\n\t\t\t// Remove the GFF Loads Gene Sets option from unclustered genes panel.\n\t\t\tcustomInputs:\n\t\t\t\tparent.chartType !== 'hierCluster' || geneInputType == 'hierCluster'\n\t\t\t\t\t? self.parent.opts.customInputs?.geneset\n\t\t\t\t\t: undefined,\n\t\t\t/* running hier clustering and the editing group is the group used for clustering\n\t\t\tpass this mode value to inform ui to support the optional button \"top variably exp gene\"\n\t\t\tthis is hardcoded for the purpose of gene expression and should be improved\n\t\t\t*/\n\n\t\t\tmode: selectedGroup.mode,\n\t\t\tminNumGenes: selectedGroup.mode == 'geneExpression' ? 3 : 1,\n\t\t\tvocabApi: self.opts.app.vocabApi,\n\t\t\tcallback: async ({ geneList, groupName }: any) => {\n\t\t\t\tif (!selectedGroup) throw `missing selectedGroup`\n\t\t\t\ttip.hide()\n\t\t\t\tconst group = selectedGroup.status == 'new' ? { name: groupName, lst: [] } : tg[selectedGroup.index]\n\t\t\t\tif (selectedGroup.status == 'new') tg.push(group)\n\t\t\t\tconst targetTermType = selectedGroup.mode == 'geneExpression' ? 'geneExpression' : 'geneVariant'\n\t\t\t\t// remove gene terms to be replaced by the new lst, keep all other term types in the group\n\t\t\t\tconst lst = group.lst.filter((tw: any) => tw.term.type != targetTermType)\n\t\t\t\tconst tws = await Promise.all(\n\t\t\t\t\tgeneList.map(async (d: any) => {\n\t\t\t\t\t\tlet term\n\t\t\t\t\t\tif (targetTermType == 'geneExpression') {\n\t\t\t\t\t\t\tconst gene = d.symbol || d.gene\n\t\t\t\t\t\t\tconst unit = getGEunit(app.vocabApi)\n\t\t\t\t\t\t\tconst name = `${gene} ${unit}`\n\t\t\t\t\t\t\tterm = { gene, name, type: 'geneExpression' }\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tterm = {\n\t\t\t\t\t\t\t\tgene: d.symbol || d.gene,\n\t\t\t\t\t\t\t\tname: d.symbol || d.gene,\n\t\t\t\t\t\t\t\ttype: 'geneVariant'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\t//if it was present use the previous term, genomic range terms require chr, start and stop fields, found in the original term\n\t\t\t\t\t\tlet tw = group.lst.find((t: any) => {\n\t\t\t\t\t\t\tconst geneName = t.term.gene || t.term.name\n\t\t\t\t\t\t\tconst match = d.symbol ? geneName === d.symbol : d.gene ? geneName === d.gene : false\n\t\t\t\t\t\t\treturn match && t.term.type == targetTermType\n\t\t\t\t\t\t})\n\t\t\t\t\t\tif (!tw) {\n\t\t\t\t\t\t\ttw = { term }\n\t\t\t\t\t\t\tawait fillTermWrapper(tw, self.opts.app.vocabApi)\n\t\t\t\t\t\t} else if (!tw.$id) {\n\t\t\t\t\t\t\ttw.$id = await get$id(self.opts.app.vocabApi.getTwMinCopy({ term }))\n\t\t\t\t\t\t}\n\t\t\t\t\t\treturn tw\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\tgroup.lst = [...lst, ...tws]\n\t\t\t\tif (!group.lst.length) tg.splice(selectedGroup.index, 1)\n\t\t\t\tapp.dispatch({\n\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\tid: self.parent.id,\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\ttermgroups: tg\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t},\n\t\t\tbackBtn: {\n\t\t\t\ttarget: 'Genes Menu',\n\t\t\t\tcallback: () => {\n\t\t\t\t\tcontrolPanelBtn.click()\n\t\t\t\t}\n\t\t\t},\n\t\t\ttermsAsListed:\n\t\t\t\t(geneInputType == 'hierCluster' && !self.parent.config.settings.hierCluster.clusterRows) ||\n\t\t\t\t(geneInputType != 'hierCluster' && self.parent.config.settings.matrix.sortTermsBy == 'asListed')\n\t\t})\n\t}\n\n\t//the number of groups in the current matrix that is editable: hiercluster group should not be edited from \"Genes\" control panel.\n\tconst numOfEditableGrps = tg.filter((g: any) => g.type != 'hierCluster').length\n\n\ttr.append('td')\n\t\t.attr('class', 'sja-termdb-config-row-label')\n\t\t.html(geneInputType == 'hierCluster' ? 'Hierarchical Clustering Gene Set' : 'Genomic Alteration Gene Set')\n\n\tif (numOfEditableGrps > 0 || geneInputType == 'hierCluster') {\n\t\tconst td1 = tr.append('td').style('display', 'block').style('padding', '5px 0px')\n\t\tconst editGrpDiv = td1.append('div').append('label')\n\n\t\teditGrpDiv\n\t\t\t.append('button')\n\t\t\t.html(\n\t\t\t\tnumOfEditableGrps > 1 && geneInputType !== 'hierCluster'\n\t\t\t\t\t? 'Edit Selected Group'\n\t\t\t\t\t: geneInputType == 'hierCluster'\n\t\t\t\t\t? 'Edit Gene Set'\n\t\t\t\t\t: 'Edit Current Group'\n\t\t\t)\n\t\t\t.on('click', () => {\n\t\t\t\ttip.clear()\n\t\t\t\tsetMenuBackBtn(tip.d.append('div').style('padding', '5px'), () => controlPanelBtn.click(), `Back`)\n\t\t\t\tconst genesetEdiUiHolder = tip.d.append('div')\n\t\t\t\ttriggerGenesetEdit(genesetEdiUiHolder)\n\t\t\t})\n\n\t\tif (numOfEditableGrps > 1 && geneInputType !== 'hierCluster') {\n\t\t\tconst { nonHierClusterGroups, groupSelect } = setTermGroupSelector(self, editGrpDiv, tg)\n\t\t\tselectedGroup = nonHierClusterGroups.find((g: any) => g.selected)\n\t\t\tgroupSelect.on('change', () => {\n\t\t\t\tselectedGroup = nonHierClusterGroups[groupSelect.property('value')]\n\t\t\t})\n\t\t} else {\n\t\t\tconst s = parent.config.settings.hierCluster\n\t\t\tconst g =\n\t\t\t\tgeneInputType == 'hierCluster'\n\t\t\t\t\t? tg.find((g: any) => g.type == 'hierCluster')\n\t\t\t\t\t: tg.find((g: any) => g.type != 'hierCluster')\n\n\t\t\tselectedGroup = {\n\t\t\t\tindex:\n\t\t\t\t\tgeneInputType == 'hierCluster'\n\t\t\t\t\t\t? tg.findIndex((g: any) => g.type == 'hierCluster')\n\t\t\t\t\t\t: tg[0].type == g.type\n\t\t\t\t\t\t? 0\n\t\t\t\t\t\t: 1,\n\t\t\t\tname: g.name,\n\t\t\t\ttype: g.type,\n\t\t\t\tlst:\n\t\t\t\t\tg.type == 'hierCluster'\n\t\t\t\t\t\t? g.lst.map((tw: any) => ({ name: tw.term.gene || tw.term.name }))\n\t\t\t\t\t\t: g.lst\n\t\t\t\t\t\t\t\t.filter((tw: any) => tw.term.type == TermTypes.GENE_VARIANT)\n\t\t\t\t\t\t\t\t.map((tw: any) => ({ name: tw.term.name })),\n\t\t\t\tmode:\n\t\t\t\t\tg.type == 'hierCluster'\n\t\t\t\t\t\t? s.dataType // is clustering group, pass dataType\n\t\t\t\t\t\t: // !!subject to change!! when group is not clustering, and ds has mutation, defaults to MUTATION_CNV_FUSION\n\t\t\t\t\t\tself.parent.state.termdbConfig.queries?.snvindel\n\t\t\t\t\t\t? TermTypes.GENE_VARIANT\n\t\t\t\t\t\t: '',\n\t\t\t\tselected: true\n\t\t\t}\n\t\t}\n\t}\n\n\tif (geneInputType == 'hierCluster') {\n\t\t// Gene set edit UI under \"Clustering\" control panel doesn't need \"create New Group\"\n\t\treturn\n\t}\n\tconst td2 = tr.append('td').style('display', 'block').style('padding', '5px 0px')\n\tconst createNewGrpDiv = td2.append('div').append('label')\n\n\tconst createBtn = createNewGrpDiv\n\t\t.append('button')\n\t\t.html('Create New Group')\n\t\t.property('disabled', true)\n\t\t.on('click', () => {\n\t\t\ttip.clear()\n\t\t\tsetMenuBackBtn(tip.d.append('div'), () => controlPanelBtn.click(), 'Back')\n\t\t\tconst name = nameInput.property('value')\n\t\t\tselectedGroup = {\n\t\t\t\tindex: tg.length,\n\t\t\t\tname,\n\t\t\t\tlabel: name,\n\t\t\t\tlst: [],\n\t\t\t\tstatus: 'new',\n\t\t\t\tmode: parent.state.termdbConfig.queries?.snvindel ? TermTypes.GENE_VARIANT : ''\n\t\t\t}\n\t\t\ttriggerGenesetEdit(tip.d.append('div'))\n\t\t})\n\n\tconst nameInput = createNewGrpDiv\n\t\t.append('input')\n\t\t.style('margin', '2px 5px')\n\t\t.style('width', '210px')\n\t\t.attr('placeholder', 'Group Name')\n\t\t.on('input', () => {\n\t\t\tcreateBtn.property('disabled', !nameInput.property('value'))\n\t\t})\n\t\t.on('keyup', (event: any) => {\n\t\t\tif (event.key == 'Enter' && !createBtn.property('disabled')) {\n\t\t\t\tcreateBtn.node().click()\n\t\t\t}\n\t\t})\n\n\t// if (parent.opts.customInputs?.geneset) {\n\t// \tfor (const btn of parent.opts.customInputs.geneset) {\n\t// \t\ttd.append('button')\n\t// \t\t\t.html(btn.label)\n\t// \t\t\t.on('click', () => {\n\t// \t\t\t\ttip.hide()\n\t// \t\t\t\tbtn.showInput({\n\t// \t\t\t\t\tcallback: genesArr => {\n\t// \t\t\t\t\t\tconst geneLst = genesArr.map(gene => ({ gene }))\n\t// \t\t\t\t\t\t// TODO: this may not be the first term group\n\t// \t\t\t\t\t\tlet group = tg.find(g => g.lst.find(tw => tw.term?.type == 'geneVariant'))\n\t// \t\t\t\t\t\tif (!group) group = tg[0]\n\t// \t\t\t\t\t\tconst lst = group.lst.filter(tw => tw.term.type != 'geneVariant')\n\t// \t\t\t\t\t\tconst tws = geneLst.map(d => {\n\t// \t\t\t\t\t\t\t//if it was present use the previous term, genomic range terms require chr, start and stop fields, found in the original term\n\t// \t\t\t\t\t\t\tlet tw = group.lst.find(tw => tw.term.name == d.symbol || tw.term.name == d.gene)\n\t// \t\t\t\t\t\t\tif (!tw)\n\t// \t\t\t\t\t\t\t\ttw = {\n\t// \t\t\t\t\t\t\t\t\t$id: get$id(),\n\t// \t\t\t\t\t\t\t\t\tterm: {\n\t// \t\t\t\t\t\t\t\t\t\tname: d.symbol || d.gene,\n\t// \t\t\t\t\t\t\t\t\t\ttype: 'geneVariant'\n\t// \t\t\t\t\t\t\t\t\t},\n\t// \t\t\t\t\t\t\t\t\tq: {}\n\t// \t\t\t\t\t\t\t\t}\n\t// \t\t\t\t\t\t\treturn tw\n\t// \t\t\t\t\t\t})\n\t// \t\t\t\t\t\tgroup.lst = [...lst, ...tws]\n\t// \t\t\t\t\t\tif (!group.lst.length) tg.splice(selectedGroup.index, 1)\n\t// \t\t\t\t\t\tapp.dispatch({\n\t// \t\t\t\t\t\t\ttype: 'plot_edit',\n\t// \t\t\t\t\t\t\tid: self.parent.id,\n\t// \t\t\t\t\t\t\tconfig: {\n\t// \t\t\t\t\t\t\t\ttermgroups: tg\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\t// \t}\n\t// }\n}\n\nexport function setMenuBackBtn(holder: any, callback: any, label: string) {\n\tholder\n\t\t.attr('tabindex', 0)\n\t\t.style('padding', '5px')\n\t\t.style('text-decoration', 'underline')\n\t\t.style('cursor', 'pointer')\n\t\t.style('margin-bottom', '12px')\n\t\t.html(`&#171; ${label}`)\n\t\t.on('click', callback)\n\t\t.on('keyup', (event: any) => {\n\t\t\tif (event.key == 'Enter') event.target.click()\n\t\t})\n}\n\nexport function setTermGroupSelector(self: MatrixControls, holder: any, tg: any) {\n\t//const label = grpDiv.append('label')\n\t//label.append('span').html('')\n\tconst firstGrpWithGeneTw = tg.find((g: any) =>\n\t\tg.lst.find((tw: any) => tw.term.type == TermTypes.GENE_VARIANT && g.type !== 'hierCluster')\n\t)\n\tconst groups = tg.map((g: any, index: number) => {\n\t\treturn {\n\t\t\tindex,\n\t\t\tname: g.name,\n\t\t\ttype: g.type,\n\t\t\tlst: g.lst.filter((tw: any) => tw.term.type == TermTypes.GENE_VARIANT).map((tw: any) => ({ name: tw.term.name })),\n\t\t\tmode: self.parent.state.termdbConfig.queries?.snvindel ? TermTypes.GENE_VARIANT : '',\n\t\t\tselected: g === firstGrpWithGeneTw\n\t\t}\n\t})\n\tconst nonHierClusterGroups = groups.filter((g: any) => g.type != 'hierCluster')\n\n\tconst groupSelect = holder.append('select').style('width', '218px').style('margin', '2px 5px')\n\tfor (const [i, group] of nonHierClusterGroups.entries()) {\n\t\tif (group.label) continue\n\t\tif (group.name) group.label = group.name\n\t\telse group.label = `Unlabeled group #${i + 1}` // cannot assume \"gene\" group\n\t}\n\n\tgroupSelect\n\t\t.selectAll('option')\n\t\t.data(nonHierClusterGroups)\n\t\t.enter()\n\t\t.append('option')\n\t\t.property('selected', (grp: any) => grp.selected)\n\t\t.attr('value', (d: any, i: number) => i)\n\t\t.html((grp: any) => grp.label)\n\n\treturn { nonHierClusterGroups, groupSelect }\n}\n", "import { fillTermWrapper } from '#termsetting'\nimport { Menu } from '#dom'\nimport type { MatrixControls } from './matrix.controls'\n\nconst tip = new Menu({ padding: '' })\n\nexport function setVariablesBtn(self: MatrixControls, s: any) {\n\tself.opts.holder\n\t\t.append('button')\n\t\t.datum({\n\t\t\tlabel: s.controlLabels.Terms || `Variables`,\n\t\t\t//getCount: () => self.parent.termOrder.filter(t => t.tw.term.type != 'geneVariant').length.length,\n\t\t\trows: [\n\t\t\t\t{\n\t\t\t\t\tlabel: `Row Group Label Max Length`,\n\t\t\t\t\ttitle: `Truncate the row group label if it exceeds this maximum number of characters`,\n\t\t\t\t\ttype: 'number',\n\t\t\t\t\tchartType: 'matrix',\n\t\t\t\t\tsettingsKey: 'termGrpLabelMaxChars'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: `Row Label Max Length`,\n\t\t\t\t\ttitle: `Truncate the row label if it exceeds this maximum number of characters`,\n\t\t\t\t\ttype: 'number',\n\t\t\t\t\tchartType: 'matrix',\n\t\t\t\t\tsettingsKey: 'rowlabelmaxchars'\n\t\t\t\t}\n\t\t\t],\n\t\t\tcustomInputs: appendDictInputs\n\t\t})\n\t\t.html((d: any) => d.label)\n\t\t.style('margin', '2px 0')\n\t\t.on('click', (event: any, d: any) => self.callback(event, d))\n}\n\nexport function appendDictInputs(self: MatrixControls, app: any, parent: any) {\n\ttip.clear()\n\tif (!parent.selectedGroup) parent.selectedGroup = parent.chartType == 'hierCluster' ? 1 : 0\n\tapp.tip.d.append('hr')\n\taddDictMenu(self, app, parent, app.tip.d.append('div'))\n}\n\nexport async function addDictMenu(self: MatrixControls, app: any, parent: any, holder: any = undefined) {\n\t//app.tip.clear()\n\n\tconst termdb = await import('#termdb/app')\n\ttermdb.appInit({\n\t\tholder: holder || app.tip.d,\n\t\tvocabApi: self.parent.app.vocabApi,\n\t\tfocus: 'off',\n\t\tstate: {\n\t\t\tvocab: self.parent.state.vocab,\n\t\t\tactiveCohort: self.parent.activeCohort,\n\t\t\tnav: {\n\t\t\t\theader_mode: 'search_only'\n\t\t\t},\n\t\t\ttree: {\n\t\t\t\tusecase: { target: 'matrix', detail: 'termgroups' }\n\t\t\t}\n\t\t},\n\t\ttree: {\n\t\t\tsubmit_lst: (termlst: any) => {\n\t\t\t\tsubmitLst(self, termlst)\n\t\t\t\tapp.tip.hide()\n\t\t\t}\n\t\t},\n\t\tsearch: {\n\t\t\tfocus: 'off'\n\t\t}\n\t})\n}\n\nexport async function submitLst(self: MatrixControls, termlst: any) {\n\tconst newterms = await Promise.all(\n\t\ttermlst.map(async (_term: any) => {\n\t\t\tconst term = structuredClone(_term)\n\t\t\tconst tw = 'id' in term ? { id: term.id, term } : { term }\n\t\t\tawait fillTermWrapper(tw, self.opts.app.vocabApi)\n\t\t\treturn tw\n\t\t})\n\t)\n\n\tconst termgroups = structuredClone(self.parent.config.termgroups)\n\n\tconst i = termgroups.findIndex((g: any) => g.name == 'Variables')\n\tif (i !== -1) {\n\t\tconst grp = termgroups[i]\n\t\tgrp.lst.push(...newterms)\n\t\tself.parent.app.dispatch({\n\t\t\ttype: 'plot_nestedEdits',\n\t\t\tid: self.parent.id,\n\t\t\tedits: [\n\t\t\t\t{\n\t\t\t\t\tnestedKeys: ['termgroups', i, 'lst'],\n\t\t\t\t\tvalue: grp.lst\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t} else {\n\t\tconst grp = { name: 'Variables', lst: newterms }\n\t\ttermgroups.push(grp)\n\t\tself.parent.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: self.parent.id,\n\t\t\tconfig: { termgroups }\n\t\t})\n\t}\n}\n", "import type { MatrixControls } from './matrix.controls'\n\nexport function setDimensionsBtn(self: MatrixControls, s: any) {\n\tconst l = s.controlLabels\n\tself.opts.holder\n\t\t.append('button')\n\t\t.datum({\n\t\t\tlabel: 'Cell Layout',\n\t\t\ttables: [\n\t\t\t\t{\n\t\t\t\t\trows: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Grid',\n\t\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\t'Show grid lines, which creates borders around each matrix cells. ' +\n\t\t\t\t\t\t\t\t' Note that grid lines are hidden when the auto-computed width <= 2, or when either the column and row spacing is set to 0.',\n\t\t\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\t\t\tboxLabel: 'show',\n\t\t\t\t\t\t\t// v===true means property('checked') and convert to recognized 'rect' value for dispatch\n\t\t\t\t\t\t\t// otherwise, compared value to 'rect' to set the current value of the checkbox\n\t\t\t\t\t\t\t// note: the non-boolean showGrid values allow keeping the hidden value='pattern' option for benchmark tests\n\t\t\t\t\t\t\tprocessInput: (v: any) => (v === true ? 'rect' : v === 'rect'),\n\t\t\t\t\t\t\tchartType: 'matrix',\n\t\t\t\t\t\t\tsettingsKey: 'showGrid',\n\t\t\t\t\t\t\tcolspan: 2,\n\t\t\t\t\t\t\talign: 'center'\n\t\t\t\t\t\t\t// for testing/benchmarking\n\t\t\t\t\t\t\t// type: 'radio',\n\t\t\t\t\t\t\t// options: [\n\t\t\t\t\t\t\t// \t{\n\t\t\t\t\t\t\t// \t\tlabel: 'hide',\n\t\t\t\t\t\t\t// \t\tvalue: ''\n\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\tlabel: 'lines',\n\t\t\t\t\t\t\t// \t\tvalue: 'pattern' // needs debugging for when s.rowh or d.colw does not apply to all rows\n\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\tlabel: 'rect',\n\t\t\t\t\t\t\t// \t\tvalue: 'rect'\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\t{\n\t\t\t\t\t\t\tlabel: 'Outline Color',\n\t\t\t\t\t\t\ttitle: 'Set a border color for the whole matrix',\n\t\t\t\t\t\t\ttype: 'color',\n\t\t\t\t\t\t\tchartType: 'matrix',\n\t\t\t\t\t\t\tsettingsKey: 'outlineStroke',\n\t\t\t\t\t\t\tcolspan: 2,\n\t\t\t\t\t\t\talign: 'center'\n\t\t\t\t\t\t\t//getDisplayStyle: plot => self.parent.settings.matrix.showGrid ? '' : 'none'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Beam Color',\n\t\t\t\t\t\t\ttitle: 'Set a color for the beam highlighter',\n\t\t\t\t\t\t\ttype: 'color',\n\t\t\t\t\t\t\tchartType: 'matrix',\n\t\t\t\t\t\t\tsettingsKey: 'beamStroke',\n\t\t\t\t\t\t\tcolspan: 2,\n\t\t\t\t\t\t\talign: 'center'\n\t\t\t\t\t\t\t//getDisplayStyle: plot => self.parent.settings.matrix.showGrid ? '' : 'none'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Grid Line Color',\n\t\t\t\t\t\t\ttitle: 'Set the grid color, equivalent to applying the same border color for each matrix cell',\n\t\t\t\t\t\t\ttype: 'color',\n\t\t\t\t\t\t\tchartType: 'matrix',\n\t\t\t\t\t\t\tsettingsKey: 'gridStroke',\n\t\t\t\t\t\t\tcolspan: 2,\n\t\t\t\t\t\t\talign: 'center'\n\t\t\t\t\t\t\t//getDisplayStyle: plot => self.parent.settings.matrix.showGrid ? '' : 'none'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Background Color',\n\t\t\t\t\t\t\ttitle: `Set the background color when there are no alterations or annotation data for a ${l.sample}`,\n\t\t\t\t\t\t\ttype: 'color',\n\t\t\t\t\t\t\tchartType: 'matrix',\n\t\t\t\t\t\t\tsettingsKey: 'cellbg',\n\t\t\t\t\t\t\tcolspan: 2,\n\t\t\t\t\t\t\talign: 'center'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: `Use Canvas If # ${l.sample} Exceeds`,\n\t\t\t\t\t\t\ttitle: `Switch from SVG to canvas rendering when the number of ${l.samples} exceeds this number`,\n\t\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\t\tchartType: 'matrix',\n\t\t\t\t\t\t\tsettingsKey: 'svgCanvasSwitch',\n\t\t\t\t\t\t\tcolspan: 2,\n\t\t\t\t\t\t\talign: 'center',\n\t\t\t\t\t\t\twidth: 60,\n\t\t\t\t\t\t\tmin: 0,\n\t\t\t\t\t\t\tmax: 10000,\n\t\t\t\t\t\t\tstep: 1\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Canvas Min. Pixel Width',\n\t\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\t'Set a minimum pixel width for a matrix cell when using canvas, may affect the perceived sharpness of the canvas image',\n\t\t\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\t\t\tboxLabel: 'apply',\n\t\t\t\t\t\t\tchartType: 'matrix',\n\t\t\t\t\t\t\tsettingsKey: 'useMinPixelWidth',\n\t\t\t\t\t\t\tcolspan: 2,\n\t\t\t\t\t\t\talign: 'center',\n\t\t\t\t\t\t\tgetDisplayStyle: () => (self.parent.settings.matrix.useCanvas ? '' : 'none')\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\theader: ['Cells', 'Columns', 'Rows'],\n\t\t\t\t\trows: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Row Height',\n\t\t\t\t\t\t\ttitle: 'Set the height of a matrix row',\n\t\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\t\twidth: 50,\n\t\t\t\t\t\t\talign: 'center',\n\t\t\t\t\t\t\tchartType: 'matrix',\n\t\t\t\t\t\t\tinputs: [{ label: 'N/A' }, { settingsKey: 'rowh', min: 8, max: 30, step: 1 }],\n\t\t\t\t\t\t\tgetDisplayStyle(plot: any) {\n\t\t\t\t\t\t\t\treturn plot.chartType == 'hierCluster' ? 'none' : 'table-row'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Min Col. Width',\n\t\t\t\t\t\t\ttitle: 'Set the minimum width of the auto-computed matrix column width',\n\t\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\t\twidth: 50,\n\t\t\t\t\t\t\talign: 'center',\n\t\t\t\t\t\t\tchartType: 'matrix',\n\t\t\t\t\t\t\tinputs: [{ settingsKey: 'colwMin', min: 0.1, max: 16, step: 0.2 }, { label: 'N/A' }]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Max Col. Width',\n\t\t\t\t\t\t\ttitle: 'Set the maximum width of the auto-computed matrix column width',\n\t\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\t\twidth: 50,\n\t\t\t\t\t\t\talign: 'center',\n\t\t\t\t\t\t\tchartType: 'matrix',\n\t\t\t\t\t\t\tinputs: [{ settingsKey: 'colwMax', min: 1, max: 24, step: 0.2 }, { label: 'N/A' }]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Spacing',\n\t\t\t\t\t\t\ttitle: 'Set the column spacing. Note that this will be set to 0 when the auto-computed width < 2.',\n\t\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\t\twidth: 50,\n\t\t\t\t\t\t\talign: 'center',\n\t\t\t\t\t\t\tchartType: 'matrix',\n\t\t\t\t\t\t\tinputs: [\n\t\t\t\t\t\t\t\t{ settingsKey: 'colspace', min: 0, max: 20, step: 1 },\n\t\t\t\t\t\t\t\t{ settingsKey: 'rowspace', min: 0, max: 20, step: 1 }\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tgetDisplayStyle(plot: any) {\n\t\t\t\t\t\t\t\treturn plot.chartType == 'hierCluster' ? 'none' : 'table-row'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Group spacing',\n\t\t\t\t\t\t\ttitle: 'Set the spacing between column and row groups.',\n\t\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\t\twidth: 50,\n\t\t\t\t\t\t\talign: 'center',\n\t\t\t\t\t\t\tchartType: 'matrix',\n\t\t\t\t\t\t\tinputs: [\n\t\t\t\t\t\t\t\tself.parent.chartType == 'hierCluster'\n\t\t\t\t\t\t\t\t\t? { label: 'N/A' }\n\t\t\t\t\t\t\t\t\t: { settingsKey: 'colgspace', min: 0, max: 20, step: 1 },\n\t\t\t\t\t\t\t\t{ settingsKey: 'rowgspace', min: 0, max: 20, step: 1 }\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\t\t\t\t{\n\t\t\t\t\theader: ['Labels', 'Columns', 'Rows'],\n\t\t\t\t\trows: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Offset',\n\t\t\t\t\t\t\ttitle: 'Set the gap between the label text and matrix edge',\n\t\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\t\twidth: 50,\n\t\t\t\t\t\t\talign: 'center',\n\t\t\t\t\t\t\tchartType: 'matrix',\n\t\t\t\t\t\t\tinputs: [\n\t\t\t\t\t\t\t\t{ settingsKey: 'collabelgap', min: 0, max: 20, step: 1 },\n\t\t\t\t\t\t\t\t{ settingsKey: 'rowlabelgap', min: 0, max: 20, step: 1 }\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Spacing',\n\t\t\t\t\t\t\ttitle: 'Set the gap between labels',\n\t\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\t\twidth: 50,\n\t\t\t\t\t\t\talign: 'center',\n\t\t\t\t\t\t\tchartType: 'matrix',\n\t\t\t\t\t\t\tinputs: [\n\t\t\t\t\t\t\t\t{ settingsKey: 'collabelpad', min: 0, max: 20, step: 1 },\n\t\t\t\t\t\t\t\t{ settingsKey: 'rowlabelpad', min: 0, max: 20, step: 1 }\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Min font size',\n\t\t\t\t\t\t\ttitle:\n\t\t\t\t\t\t\t\t'Set the minimum auto-computed font size for labels. Note that labels will be hidden if the auto-computed values falls below this minimum.',\n\t\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\t\twidth: 50,\n\t\t\t\t\t\t\talign: 'center',\n\t\t\t\t\t\t\tcolspan: 2,\n\t\t\t\t\t\t\tchartType: 'matrix',\n\t\t\t\t\t\t\tsettingsKey: 'minLabelFontSize',\n\t\t\t\t\t\t\tmin: 0,\n\t\t\t\t\t\t\tmax: 24,\n\t\t\t\t\t\t\tstep: 0.1\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Max font size',\n\t\t\t\t\t\t\ttitle: 'Set the maximum auto-computed font size for labels',\n\t\t\t\t\t\t\ttype: 'number',\n\t\t\t\t\t\t\twidth: 50,\n\t\t\t\t\t\t\talign: 'center',\n\t\t\t\t\t\t\tcolspan: 2,\n\t\t\t\t\t\t\tchartType: 'matrix',\n\t\t\t\t\t\t\tsettingsKey: 'maxLabelFontSize',\n\t\t\t\t\t\t\tmin: 0,\n\t\t\t\t\t\t\tmax: 24,\n\t\t\t\t\t\t\tstep: 0.1\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tlabel: 'Group label<br/>position',\n\t\t\t\t\t\t\ttitle: 'Set which side of the matrix to display group labels',\n\t\t\t\t\t\t\ttype: 'radio',\n\t\t\t\t\t\t\twidth: 50,\n\t\t\t\t\t\t\tchartType: 'matrix',\n\t\t\t\t\t\t\tlabelDisplay: 'block',\n\t\t\t\t\t\t\tgetDisplayStyle(plot: any) {\n\t\t\t\t\t\t\t\treturn plot.chartType == 'hierCluster' ? 'none' : 'table-row'\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tinputs: [\n\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\tsettingsKey: 'collabelpos',\n\t\t\t\t\t\t\t\t\t// switched since settings.collabelpos refers to the individual column label, not group\n\t\t\t\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t\t\t\t{ label: 'Top', value: 'bottom', title: `Display ${l.sample} group labels at the bottom` },\n\t\t\t\t\t\t\t\t\t\t{ label: 'Bottom', value: 'top', title: `Display ${l.sample} group labels on top` }\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{\n\t\t\t\t\t\t\t\t\tsettingsKey: 'rowlabelpos',\n\t\t\t\t\t\t\t\t\t// switched since settings.rowlabelpos refers to the individual column label, not group\n\t\t\t\t\t\t\t\t\toptions: [\n\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\tlabel: 'Left',\n\t\t\t\t\t\t\t\t\t\t\tvalue: 'right',\n\t\t\t\t\t\t\t\t\t\t\ttitle: `Display gene or variable group labels on the left side`\n\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\tlabel: 'Right',\n\t\t\t\t\t\t\t\t\t\t\tvalue: 'left',\n\t\t\t\t\t\t\t\t\t\t\ttitle: `Display gene or variable group labels on the right side`\n\t\t\t\t\t\t\t\t\t\t}\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\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t\t.html((d: any) => d.label)\n\t\t.style('margin', '2px 0')\n\t\t.on('click', (event: any, d: any) => self.callback(event, d))\n}\n", "import type { MatrixControls } from './matrix.controls'\n\nexport function setLegendBtn(self: MatrixControls) {\n\tself.opts.holder\n\t\t.append('button')\n\t\t.style('margin', '2px 0')\n\t\t.datum({\n\t\t\tlabel: 'Legend Layout',\n\t\t\trows: [\n\t\t\t\t//ontop: false,\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Font Size',\n\t\t\t\t\ttitle: 'Set the font size for the legend text',\n\t\t\t\t\ttype: 'number',\n\t\t\t\t\tchartType: 'legend',\n\t\t\t\t\tsettingsKey: 'fontsize'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Line Height',\n\t\t\t\t\ttitle: 'Set the line height for a legend group',\n\t\t\t\t\ttype: 'number',\n\t\t\t\t\tchartType: 'legend',\n\t\t\t\t\tsettingsKey: 'lineh'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Icon Height',\n\t\t\t\t\ttitle: 'Set the icon height for a legend item',\n\t\t\t\t\ttype: 'number',\n\t\t\t\t\tchartType: 'legend',\n\t\t\t\t\tsettingsKey: 'iconh'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Icon Width',\n\t\t\t\t\ttitle: 'Set the icon width for a legend item',\n\t\t\t\t\ttype: 'number',\n\t\t\t\t\tchartType: 'legend',\n\t\t\t\t\tsettingsKey: 'iconw'\n\t\t\t\t},\n\t\t\t\t/*{\n\t\t\t\t\tlabel: 'Bottom margin',\n\t\t\t\t\ttype: 'number',\n\t\t\t\t\tchartType: 'legend',\n\t\t\t\t\tsettingsKey: 'padbtm'\n\t\t\t\t},*/\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Item Left Pad',\n\t\t\t\t\ttitle: 'Set a left margin for each legend item',\n\t\t\t\t\ttype: 'number',\n\t\t\t\t\tchartType: 'legend',\n\t\t\t\t\tsettingsKey: 'padx'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Left Margin',\n\t\t\t\t\ttitle: 'Set a left margin for the whole legend',\n\t\t\t\t\ttype: 'number',\n\t\t\t\t\tchartType: 'legend',\n\t\t\t\t\tsettingsKey: 'padleft'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Left Indent',\n\t\t\t\t\ttitle:\n\t\t\t\t\t\t`Set a left margin for the first legend item in each group, and should be set to the length of the longest group label.` +\n\t\t\t\t\t\t` The left indent will align the legend group label text to the right.`,\n\t\t\t\t\ttype: 'number',\n\t\t\t\t\tchartType: 'legend',\n\t\t\t\t\tsettingsKey: 'hangleft'\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tlabel: 'Item Layout',\n\t\t\t\t\ttitle:\n\t\t\t\t\t\t'Option to separate each legend item into a new line, instead of a horizontal layout in the same line.',\n\t\t\t\t\ttype: 'checkbox',\n\t\t\t\t\tchartType: 'legend',\n\t\t\t\t\tsettingsKey: 'linesep',\n\t\t\t\t\tboxLabel: 'Line separated'\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t\t.html((d: any) => d.label)\n\t\t.style('margin', '2px 0')\n\t\t.on('click', (event: any, d: any) => self.callback(event, d))\n}\n", "import { dtcnv } from '#shared/common.js'\nimport type { MatrixControls } from './matrix.controls'\n\n// Mutation button for selecting mutations to display on the matrix\nexport function setMutationBtn(self: MatrixControls) {\n\tself.opts.holder\n\t\t.append('button')\n\t\t.style('margin', '2px 0')\n\t\t.datum({\n\t\t\tlabel: 'Mutation',\n\t\t\tupdateBtn: (btn: any) => {\n\t\t\t\tconst s = self.parent.config.settings.matrix\n\t\t\t\tbtn\n\t\t\t\t\t.style('text-decoration', s.allMatrixMutationHidden ? 'line-through' : '')\n\t\t\t\t\t.style('text-decoration-thickness', s.allMatrixMutationHidden ? '2px' : '')\n\t\t\t},\n\t\t\trows: [\n\t\t\t\t{\n\t\t\t\t\ttitle: `Show mutation options`,\n\t\t\t\t\ttype: 'radio',\n\t\t\t\t\tchartType: 'matrix',\n\t\t\t\t\tsettingsKey: 'showMatrixMutation',\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{ label: 'Show all mutations', value: 'all' },\n\t\t\t\t\t\t{ label: `Show only truncating mutations`, value: 'onlyTruncating' },\n\t\t\t\t\t\t{ label: `Show only protein-changing mutations`, value: 'onlyPC' },\n\t\t\t\t\t\t{ label: `Do not show mutations`, value: 'none' },\n\t\t\t\t\t\t{ label: `Show selected mutation`, value: 'bySelection' }\n\t\t\t\t\t],\n\t\t\t\t\tlabelDisplay: 'block',\n\t\t\t\t\tgetDisplayStyle(plot: any) {\n\t\t\t\t\t\treturn plot.chartType == 'hierCluster' ? 'none' : 'table-row'\n\t\t\t\t\t},\n\t\t\t\t\tcallback: self.parent.mutationControlCallback\n\t\t\t\t}\n\t\t\t],\n\t\t\tcustomInputs: generateMutationItems\n\t\t})\n\t\t.html((d: any) => d.label)\n\t\t.style('margin', '2px 0')\n\t\t.on('click', (event: any, d: any) => self.callback(event, d))\n}\n\nexport function generateMutationItems(self: MatrixControls, app: any, parent: any, table: any) {\n\ttable.attr('class', null) // remove the hoverover background for CNV button\n\tconst m = parent.config.settings.matrix\n\tconst cnvLegendGrp = parent.legendData.find((l: any) => l.dt?.includes(dtcnv))\n\tif (\n\t\tm.showMatrixMutation !== 'none' &&\n\t\t(m.allMatrixCNVHidden ||\n\t\t\t!cnvLegendGrp ||\n\t\t\tcnvLegendGrp.crossedOut ||\n\t\t\t!cnvLegendGrp.items.find((i: any) => !i.greyedOut && !i.crossedOut))\n\t) {\n\t\t// when all CNV items in the current matrix are hidden or there is no CNV data\n\t\ttable.select(\"input[type='radio'][value='none']\").property('disabled', true)\n\n\t\ttable.select(\"input[type='radio'][value='none'] + span\").style('opacity', '0.5').on('mouseup', null)\n\t}\n\tif (m.addMutationCNVButtons && parent.chartType !== 'hierCluster' && m.showMatrixMutation == 'bySelection')\n\t\tparent.mutationControlCallback('bySelection')\n}\n", "import { dtsnvindel } from '#shared/common.js'\nimport type { MatrixControls } from './matrix.controls'\n\n// CNV button for selecting the CNVs to display on the matrix\nexport function setCNVBtn(self: MatrixControls) {\n\tself.opts.holder\n\t\t.append('button')\n\t\t.style('margin', '2px 0')\n\t\t.datum({\n\t\t\tlabel: 'CNV',\n\t\t\tupdateBtn: (btn: any) => {\n\t\t\t\tconst s = self.parent.config.settings.matrix\n\t\t\t\tconst notRendered = s.allMatrixCNVHidden\n\t\t\t\tbtn\n\t\t\t\t\t.style('text-decoration', notRendered ? 'line-through' : '')\n\t\t\t\t\t.style('text-decoration-thickness', notRendered ? '2px' : '')\n\t\t\t},\n\t\t\trows: [\n\t\t\t\t{\n\t\t\t\t\ttitle: `Show CNV options`,\n\t\t\t\t\ttype: 'radio',\n\t\t\t\t\tchartType: 'matrix',\n\t\t\t\t\tsettingsKey: 'showMatrixCNV',\n\t\t\t\t\toptions: [\n\t\t\t\t\t\t{ label: 'Show all CNV', value: 'all' },\n\t\t\t\t\t\t{ label: `Do not show CNV`, value: 'none' },\n\t\t\t\t\t\t{ label: `Show selected CNV`, value: 'bySelection' }\n\t\t\t\t\t],\n\t\t\t\t\tlabelDisplay: 'block',\n\t\t\t\t\tgetDisplayStyle(plot: any) {\n\t\t\t\t\t\treturn plot.chartType == 'hierCluster' ? 'none' : 'table-row'\n\t\t\t\t\t},\n\t\t\t\t\tcallback: self.parent.CNVControlCallback\n\t\t\t\t}\n\t\t\t],\n\t\t\tcustomInputs: generateCNVItems\n\t\t})\n\t\t.html((d: any) => d.label)\n\t\t.style('margin', '2px 0')\n\t\t.on('click', (event: any, d: any) => self.callback(event, d))\n}\n\nexport function generateCNVItems(self: MatrixControls, app: any, parent: any, table: any) {\n\ttable.attr('class', null) // remove the hoverover background for CNV button\n\tconst m = parent.config.settings.matrix\n\tconst mutationLegendGrp = parent.legendData.find((l: any) => l.dt?.includes(dtsnvindel))\n\tif (\n\t\tm.showMatrixCNV !== 'none' &&\n\t\t(m.allMatrixMutationHidden ||\n\t\t\t!mutationLegendGrp ||\n\t\t\tmutationLegendGrp.crossedOut ||\n\t\t\t!mutationLegendGrp.items.find((i: any) => !i.greyedOut && !i.crossedOut))\n\t) {\n\t\t// when all mutation items in the current matrix are hidden or there is no mutation data\n\t\ttable.select(\"input[type='radio'][value='none']\").property('disabled', true)\n\n\t\ttable.select(\"input[type='radio'][value='none'] + span\").style('opacity', '0.5').on('mouseup', null)\n\t}\n\tif (m.addMutationCNVButtons && parent.chartType !== 'hierCluster' && m.showMatrixCNV == 'bySelection')\n\t\tparent.CNVControlCallback('bySelection')\n}\n", "import { to_svg } from '#src/client'\nimport { Menu } from '#dom'\nimport { mclass, dt2label, dtsnvindel, dtcnv, dtfusionrna, dtsv } from '#shared/common.js'\nimport { TermTypes } from '#shared/terms.js'\nimport type { MatrixControls } from './matrix.controls'\n\nexport function setDownloadBtn(self: MatrixControls) {\n\tself.opts.holder\n\t\t.append('button')\n\t\t.style('margin', '2px 0')\n\t\t//.property('disabled', d => d.disabled)\n\t\t.text('Download')\n\t\t.on('focus', () => self.parent.app.tip.hide())\n\t\t.on('click.sjpp-matrix-download', (event: any) => {\n\t\t\tconst p = self.parent\n\t\t\tif (!p.dom.downloadMenu) p.dom.downloadMenu = new Menu({ padding: '' })\n\t\t\tconst downloadMenu = p.dom.downloadMenu.clear()\n\t\t\tconst div = downloadMenu.d.append('div')\n\t\t\tdiv\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t.text(`SVG image`)\n\t\t\t\t.on('click.sjpp-matrix-download', () => {\n\t\t\t\t\tto_svg(self.opts.getSvg(), 'matrix', { apply_dom_styles: true })\n\t\t\t\t\tp.dom.downloadMenu.destroy()\n\t\t\t\t})\n\n\t\t\tdiv\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t.text(`TSV data`)\n\t\t\t\t.on('click.sjpp-matrix-download', () => {\n\t\t\t\t\tconst lst = p.data.lst\n\t\t\t\t\tconst allTerms = p.termOrder.map((t: any) => t.tw)\n\t\t\t\t\tconst assayAvailability = p.state.termdbConfig.assayAvailability\n\t\t\t\t\tconst controlLabels = p.settings.matrix.controlLabels\n\t\t\t\t\tif (p.config.divideBy?.id && !allTerms.find((a: any) => a.id == p.config.divideBy.id)) {\n\t\t\t\t\t\t// when divideBy term is not in the matrix terms\n\t\t\t\t\t\tallTerms.push(p.config.divideBy)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst activeSamples: any[] = []\n\t\t\t\t\tfor (const d of lst) {\n\t\t\t\t\t\tfor (const tw of allTerms) {\n\t\t\t\t\t\t\tif (tw.$id in d) {\n\t\t\t\t\t\t\t\tactiveSamples.push(d)\n\t\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tconst header = [controlLabels.Sample]\n\t\t\t\t\tfor (const tw of allTerms) header.push(tw.term.name)\n\n\t\t\t\t\tconst rows = [header]\n\t\t\t\t\tfor (const sample of activeSamples) {\n\t\t\t\t\t\tconst row = [sample._ref_.label]\n\t\t\t\t\t\tfor (const tw of allTerms) {\n\t\t\t\t\t\t\tif (!sample[tw.$id]) {\n\t\t\t\t\t\t\t\trow.push('')\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (tw.term.type == 'geneVariant') {\n\t\t\t\t\t\t\t\t\tconst allVariant: string[] = []\n\t\t\t\t\t\t\t\t\tfor (const v of sample[tw.$id].renderedValues) {\n\t\t\t\t\t\t\t\t\t\t// when assayAvailability presents, has WT and Blank\n\t\t\t\t\t\t\t\t\t\tconst hasAssayAvailability = assayAvailability?.byDt?.[parseInt(v.dt)]\n\t\t\t\t\t\t\t\t\t\tif (v.dt == dtsnvindel) {\n\t\t\t\t\t\t\t\t\t\t\tallVariant.push(\n\t\t\t\t\t\t\t\t\t\t\t\t(v.origin ? `${v.origin} ` : '') +\n\t\t\t\t\t\t\t\t\t\t\t\t\t(hasAssayAvailability ? `${dt2label[v.dt]}:` : '') +\n\t\t\t\t\t\t\t\t\t\t\t\t\t`${mclass[v.class]?.label}` +\n\t\t\t\t\t\t\t\t\t\t\t\t\t(v.mname ? `,${v.mname}` : '')\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t} else if (v.dt == dtcnv) {\n\t\t\t\t\t\t\t\t\t\t\tconst cnvValue = v.value\n\t\t\t\t\t\t\t\t\t\t\t\t? `${hasAssayAvailability ? '' : 'CNV:'}${v.value}` //show v.value for numerical CNV, otherwise show CNV gain/loss\n\t\t\t\t\t\t\t\t\t\t\t\t: v.class == 'CNV_amp'\n\t\t\t\t\t\t\t\t\t\t\t\t? 'CNV gain'\n\t\t\t\t\t\t\t\t\t\t\t\t: v.class == 'CNV_loss'\n\t\t\t\t\t\t\t\t\t\t\t\t? 'CNV loss'\n\t\t\t\t\t\t\t\t\t\t\t\t: v.class == 'CNV_homozygous_deletion'\n\t\t\t\t\t\t\t\t\t\t\t\t? 'CNV homozygous deletion'\n\t\t\t\t\t\t\t\t\t\t\t\t: v.class == 'CNV_amplification'\n\t\t\t\t\t\t\t\t\t\t\t\t? 'CNV amplification'\n\t\t\t\t\t\t\t\t\t\t\t\t: v.class == 'CNV_loh'\n\t\t\t\t\t\t\t\t\t\t\t\t? 'CNV loss of heterozygosity'\n\t\t\t\t\t\t\t\t\t\t\t\t: mclass[v.class]?.label\n\n\t\t\t\t\t\t\t\t\t\t\tallVariant.push(\n\t\t\t\t\t\t\t\t\t\t\t\t(v.origin ? `${v.origin} ` : '') + (hasAssayAvailability ? `${dt2label[v.dt]}:` : '') + cnvValue\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t} else if (v.dt == dtfusionrna || v.dt == dtsv) {\n\t\t\t\t\t\t\t\t\t\t\tallVariant.push(\n\t\t\t\t\t\t\t\t\t\t\t\t(v.origin ? `${v.origin} ` : '') +\n\t\t\t\t\t\t\t\t\t\t\t\t\t(hasAssayAvailability ? `${dt2label[v.dt]}:` : '') +\n\t\t\t\t\t\t\t\t\t\t\t\t\t`${mclass[v.class]?.label}` +\n\t\t\t\t\t\t\t\t\t\t\t\t\t(v.gene && v.mname ? `(${v.gene}::${v.mname})` : '')\n\t\t\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tallVariant.push(`DO NOT SUPPORT dt='${v.dt}'`)\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\trow.push(allVariant.join('|'))\n\t\t\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t\t\ttw.term.type == TermTypes.GENE_EXPRESSION ||\n\t\t\t\t\t\t\t\t\ttw.term.type == TermTypes.METABOLITE_INTENSITY ||\n\t\t\t\t\t\t\t\t\ttw.term.type == TermTypes.PROTEOME_ABUNDANCE\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\trow.push(sample[tw.$id]?.renderedValues?.[0]?.value || '')\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\trow.push(sample[tw.$id]?.renderedValues?.[0] || sample[tw.$id]?.value || '')\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\trows.push(row)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst matrix = rows.map((row: any[]) => row.join('\\t')).join('\\n')\n\t\t\t\t\tconst a = document.createElement('a')\n\t\t\t\t\tdocument.body.appendChild(a)\n\t\t\t\t\ta.addEventListener(\n\t\t\t\t\t\t'click',\n\t\t\t\t\t\tfunction () {\n\t\t\t\t\t\t\tconst currentDate = new Date().toISOString().split('T')[0]\n\t\t\t\t\t\t\ta.download = p.config.settings?.hierCluster?.termGroupName?.startsWith('Gene Expression')\n\t\t\t\t\t\t\t\t? `GeneExpression.${currentDate}.tsv`\n\t\t\t\t\t\t\t\t: p.chartType == 'hierCluster'\n\t\t\t\t\t\t\t\t? `HierCluster.${currentDate}.tsv`\n\t\t\t\t\t\t\t\t: `${p.app.vocabApi.termdbConfig.matrix?.appName || 'Matrix'}.${currentDate}.tsv`\n\t\t\t\t\t\t\ta.href = URL.createObjectURL(new Blob([matrix], { type: 'text/tab-separated-values' }))\n\t\t\t\t\t\t\tdocument.body.removeChild(a)\n\t\t\t\t\t\t},\n\t\t\t\t\t\tfalse\n\t\t\t\t\t)\n\t\t\t\t\ta.click()\n\t\t\t\t\tp.dom.downloadMenu.destroy()\n\t\t\t\t})\n\t\t\tdownloadMenu.showunder(event.target)\n\t\t})\n}\n", "import { zoom, icons, svgScroll } from '#dom'\nimport type { MatrixControls } from './matrix.controls'\n\nexport function setZoomInput(self: MatrixControls) {\n\tconst holder = self.opts.holder.append('div').style('display', 'inline-block').style('margin-left', '50px')\n\tconst s = self.parent.settings.matrix || self.parent.config.settings.matrix\n\tself.zoomApi = zoom({\n\t\tholder,\n\t\ttitle:\n\t\t\t'Zoom factor relative to the ideal column width, as computed for the number of columns versus available screen width',\n\t\tunit: '',\n\t\twidth: '80px',\n\t\tsettings: {\n\t\t\tmin: 0.1, // will be determined once the auto-computed width is determined\n\t\t\tmax: 1, // will be determined once the auto-computed width is determined\n\t\t\tvalue: 1,\n\t\t\tincrement: s.zoomIncrement,\n\t\t\tstep: s.zoomStep || 5\n\t\t},\n\t\tcallback: (zoomLevel: any) => {\n\t\t\tconst p = self.parent\n\t\t\tconst c = p.getVisibleCenterCell(0)\n\t\t\tp.app.dispatch({\n\t\t\t\ttype: 'plot_edit',\n\t\t\t\tid: p.id,\n\t\t\t\tconfig: {\n\t\t\t\t\tsettings: {\n\t\t\t\t\t\tmatrix: {\n\t\t\t\t\t\t\tzoomLevel,\n\t\t\t\t\t\t\tzoomCenterPct: 0.5,\n\t\t\t\t\t\t\tzoomIndex: c.totalIndex,\n\t\t\t\t\t\t\tzoomGrpIndex: c.grpIndex\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t},\n\t\treset: () => {\n\t\t\tself.parent.app.dispatch({\n\t\t\t\ttype: 'plot_edit',\n\t\t\t\tid: self.parent.id,\n\t\t\t\tconfig: {\n\t\t\t\t\tsettings: {\n\t\t\t\t\t\tmatrix: {\n\t\t\t\t\t\t\tzoomLevel: 1,\n\t\t\t\t\t\t\tzoomCenterPct: 0\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t})\n}\n\nexport function setDragToggle(self: MatrixControls, opts: any = {}) {\n\tconst defaults = {\n\t\tmouseMode: 'select',\n\t\tactiveBgColor: 'rgb(255, 255, 255)'\n\t}\n\n\t// hardcode to always be in select mode on first render\n\topts.target.style('cursor', 'default')\n\n\tconst instance: any = {\n\t\topts: Object.assign({}, defaults, opts),\n\t\tdom: {\n\t\t\tselectBtn: opts.holder\n\t\t\t\t.append('button')\n\t\t\t\t.attr('aria-label', 'Click the matrix to select data')\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.style('width', '25px')\n\t\t\t\t.style('height', '24.5px')\n\t\t\t\t.style('background-color', defaults.activeBgColor)\n\t\t\t\t.on('click', () => setMode('select')),\n\n\t\t\tgrabBtn: opts.holder\n\t\t\t\t.append('button')\n\t\t\t\t.attr('aria-label', 'Click the matrix to drag and move')\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.style('width', '25px')\n\t\t\t\t.style('height', '24.5px')\n\t\t\t\t.on('click', () => setMode('pan'))\n\t\t}\n\t}\n\n\ticons.arrowPointer(instance.dom.selectBtn, { width: 14, height: 14, transform: 'translate(50,50)' })\n\ticons.grab(instance.dom.grabBtn, { width: 14, height: 14, transform: 'translate(30,50)' })\n\n\tfunction setMode(m: string) {\n\t\tinstance.opts.mouseMode = m\n\t\tself.parent.settings.matrix.mouseMode = m\n\t\topts.target.style('cursor', m == 'select' ? 'default' : 'grab')\n\t\tinstance.dom.selectBtn.style('background-color', m == 'select' ? instance.opts.activeBgColor : '')\n\t\tinstance.dom.grabBtn.style('background-color', m == 'pan' ? instance.opts.activeBgColor : '')\n\t}\n\n\t// NOTE:\n\tself.dragToggleApi = {\n\t\tupdate(s: any = {}) {\n\t\t\tObject.assign(instance.opts, s)\n\t\t\tsetMode(instance.opts.mouseMode)\n\t\t},\n\t\tgetSettings() {\n\t\t\treturn {\n\t\t\t\tmouseMode: instance.opts.mouseMode\n\t\t\t}\n\t\t}\n\t}\n}\n\nexport function setSvgScroll(self: MatrixControls, state: any) {\n\tself.svgScrollApi = svgScroll({\n\t\tholder: self.parent.dom.scroll,\n\t\theight: state.config.settings.matrix.scrollHeight,\n\t\tcallback: (dx: number, eventType: string) => {\n\t\t\tconst p = self.parent\n\t\t\tconst s = p.settings.matrix\n\t\t\tconst d = p.dimensions\n\t\t\tif (eventType == 'move') {\n\t\t\t\tp.dom.seriesesG.attr('transform', `translate(${d.xOffset + d.seriesXoffset - dx},${d.yOffset})`)\n\t\t\t\tp.clusterRenderer.translateElems(-dx, s, d)\n\t\t\t\tp.layout.top.attr.adjustBoxTransform(-dx)\n\t\t\t\tp.layout.btm.attr.adjustBoxTransform(-dx)\n\t\t\t\tif (p.dom.topDendrogram) {\n\t\t\t\t\tp.dom.topDendrogram.attr('transform', `translate(${p.topDendroX - dx},0)`)\n\t\t\t\t}\n\t\t\t} else if (eventType == 'up') {\n\t\t\t\tconst c = p.getVisibleCenterCell(-dx)\n\t\t\t\tp.app.dispatch({\n\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\tid: p.id,\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\tsettings: {\n\t\t\t\t\t\t\tmatrix: {\n\t\t\t\t\t\t\t\tzoomCenterPct: 0.5,\n\t\t\t\t\t\t\t\tzoomIndex: c.totalIndex,\n\t\t\t\t\t\t\t\tzoomGrpIndex: c.grpIndex\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\t\t\t}\n\t\t}\n\t})\n}\n", "import { initByInput } from '#plots/controls.config.js'\nimport { select } from 'd3-selection'\nimport { TermTypes } from '#shared/terms.js'\nimport { setSamplesBtn } from './matrix.controls.samples'\nimport { setGenesBtn } from './matrix.controls.genes'\nimport { setVariablesBtn } from './matrix.controls.variables'\nimport { setDimensionsBtn } from './matrix.controls.dimensions'\nimport { setLegendBtn } from './matrix.controls.legend'\nimport { setMutationBtn } from './matrix.controls.mutations'\nimport { setCNVBtn } from './matrix.controls.cnv'\nimport { setDownloadBtn } from './matrix.controls.download'\nimport { setZoomInput, setDragToggle, setSvgScroll } from './matrix.zoomPanScroll'\n\nexport class MatrixControls {\n\ttype: string\n\topts: any\n\tparent: any\n\toverrides: any\n\tzoomApi: any\n\tsvgScrollApi: any\n\tdragToggleApi: any\n\tkeyEventTarget: any\n\tbtns: any\n\tactiveTab: 'basic' | 'advanced' = 'basic'\n\tsorterUi!: any\n\n\tconstructor(opts: any, appState: any) {\n\t\tthis.type = 'matrixControls'\n\t\tthis.opts = opts\n\t\tthis.parent = opts.parent\n\t\tthis.overrides = {}\n\n\t\tthis.opts.holder.style('margin', '10px 10px 20px 10px').style('white-space', 'nowrap')\n\t\tconst state = this.parent.getState(appState)\n\t\tconst s = state.config.settings.matrix\n\t\tif (this.parent.setClusteringBtn)\n\t\t\tthis.parent.setClusteringBtn(this.opts.holder, (event: any, data: any) => this.callback(event, data))\n\t\tsetSamplesBtn(this, s)\n\t\tif (\n\t\t\tstate.termdbConfig?.allowedTermTypes?.includes(TermTypes.GENE_VARIANT) ||\n\t\t\tstate.termdbConfig.queries.snvindel ||\n\t\t\t(this.parent.chartType == 'hierCluster' && this.parent.config.dataType == TermTypes.GENE_EXPRESSION)\n\t\t) {\n\t\t\tsetGenesBtn(this, s)\n\t\t}\n\t\tif (s.addMutationCNVButtons && this.parent.chartType !== 'hierCluster') {\n\t\t\tsetMutationBtn(this)\n\t\t\tsetCNVBtn(this)\n\t\t}\n\t\tsetVariablesBtn(this, s)\n\t\tsetDimensionsBtn(this, s)\n\t\tsetLegendBtn(this)\n\t\tsetDownloadBtn(this)\n\t\tsetZoomInput(this)\n\t\tsetDragToggle(this, {\n\t\t\tholder: this.opts.holder.append('div').style('display', 'inline-block'),\n\t\t\ttarget: this.parent.dom.seriesesG\n\t\t})\n\t\tsetSvgScroll(this, state)\n\n\t\tthis.keyboardNavHandler = async (event: any) => {\n\t\t\tif (event.target.tagName == 'BUTTON') this.keyEventTarget = event.target\n\t\t\tif (event.key == 'Escape') {\n\t\t\t\tthis.parent.app.tip.hide()\n\t\t\t} else if (event.key == 'Enter' || event.key == 'ArrowDown') {\n\t\t\t\tconst elems =\n\t\t\t\t\tevent.target.tagName == 'BUTTON'\n\t\t\t\t\t\t? this.parent.app.tip.d.node().querySelectorAll('input, select')\n\t\t\t\t\t\t: event.target.querySelectorAll('input, select')\n\t\t\t\tfor (const elem of elems) {\n\t\t\t\t\tif (elem.checkVisibility?.() || (!elem.checkVisibility && elem.getBoundingClientRect().height)) {\n\t\t\t\t\t\telem.focus()\n\t\t\t\t\t\treturn false\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if ((event.key == 'Tab' && event.shiftKey) || event.key == 'Backspace' || event.key == 'ArrowUp') {\n\t\t\t\tthis.keyEventTarget.focus()\n\t\t\t\treturn false\n\t\t\t} //else if (event.keyShift && el)\n\t\t}\n\n\t\tthis.btns = this.opts.holder\n\t\t\t.selectAll(':scope>button')\n\t\t\t.filter((d: any) => d && d.label)\n\t\t\t.on(`keyup.matrix-${this.parent.id}`, this.keyboardNavHandler)\n\t}\n\n\tkeyboardNavHandler: any\n\n\tmain(overrides: any = {}) {\n\t\tthis.overrides = overrides\n\t\tthis.parent.app.tip.hide()\n\n\t\tthis.btns\n\t\t\t.text((d: any) =>\n\t\t\t\t!d.getCount || d.showCount == 'hide'\n\t\t\t\t\t? d.label\n\t\t\t\t\t: d.showCount == 'append'\n\t\t\t\t\t? `${d.label} (n=${d.getCount()})`\n\t\t\t\t\t: `${d.getCount()} ${d.label}`\n\t\t\t)\n\t\t\t.each(function (this: any, d: any) {\n\t\t\t\tif (d.updateBtn) d.updateBtn(select(this))\n\t\t\t})\n\n\t\tconst s = this.parent.settings.matrix || this.parent.config.settings.matrix\n\t\tconst min = this.parent.computedSettings.zoomMin\n\t\tconst max = this.parent.computedSettings.zoomMax\n\t\tconst increment = Math.max(0.01, Number((min / max).toFixed(2)))\n\n\t\tconst d = this.parent.dimensions\n\t\tif (this.zoomApi)\n\t\t\tthis.zoomApi.update({\n\t\t\t\tvalue: s.zoomLevel.toFixed(2),\n\t\t\t\tmin: min.toFixed(2),\n\t\t\t\tmax: max.toFixed(2),\n\t\t\t\tincrement,\n\t\t\t\tstep: s.zoomStep || 1\n\t\t\t})\n\n\t\tif (this.svgScrollApi && d) {\n\t\t\tthis.svgScrollApi.update({\n\t\t\t\tx: d.xOffset,\n\t\t\t\ty: d.yOffset - s.scrollHeight,\n\t\t\t\ttotalWidth: d.zoomedMainW,\n\t\t\t\tvisibleWidth: d.mainw,\n\t\t\t\tzoomCenter: s.zoomCenterPct * d.mainw - d.seriesXoffset\n\t\t\t})\n\t\t}\n\n\t\tif (this.dragToggleApi) {\n\t\t\tthis.dragToggleApi.update(s.mouseMode ? { mouseMode: s.mouseMode } : {})\n\t\t}\n\t}\n\n\tgetSettings() {\n\t\t// return control settings that are not tracked in the global app state or plot state\n\t\treturn {\n\t\t\tmouseMode: this.dragToggleApi.getSettings().mouseMode\n\t\t}\n\t}\n\n\tasync callback(event: any, d: any) {\n\t\tconst app = this.opts.app\n\t\tconst parent = this.opts.parent\n\t\tconst tables = d.tables || [d]\n\n\t\tevent.target.focus()\n\t\tapp.tip.clear()\n\n\t\tconst table = app.tip.d.append('table').attr('class', 'sjpp-controls-table')\n\t\tfor (const t of tables) {\n\t\t\t//if (d.customHeaderRows) d.customHeaderRows(parent, table)\n\t\t\tif (t.header) {\n\t\t\t\ttable\n\t\t\t\t\t.append('tr')\n\t\t\t\t\t.selectAll('th')\n\t\t\t\t\t.data(t.header)\n\t\t\t\t\t.enter()\n\t\t\t\t\t.append('th')\n\t\t\t\t\t.html((d: any) => d)\n\t\t\t}\n\n\t\t\tfor (const inputConfig of t.rows) {\n\t\t\t\tconst holder = table.append('tr')\n\t\t\t\tconst input = await initByInput[inputConfig.type](\n\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t{},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tholder,\n\t\t\t\t\t\t\tapp,\n\t\t\t\t\t\t\tdispatch: (action: any) => app.dispatch(action),\n\t\t\t\t\t\t\tid: parent.id,\n\t\t\t\t\t\t\tdebug: this.opts.debug,\n\t\t\t\t\t\t\tparent\n\t\t\t\t\t\t},\n\t\t\t\t\t\tinputConfig\n\t\t\t\t\t)\n\t\t\t\t)\n\t\t\t\tinput.main(parent.config)\n\t\t\t}\n\n\t\t\tif (t.customInputs) t.customInputs(this, app, parent, table)\n\t\t\ttable.selectAll('select, input, button').attr('tabindex', 0).on('keydown', this.keyboardNavHandler)\n\t\t}\n\n\t\tapp.tip.showunder(event.target)\n\t}\n}\n", "import type { ContinuousXTW, DiscreteXTW, CollectionCont, TermCollectionTransformedValue } from '#tw'\nimport { TwRouter, routedTermTypes } from '#tw'\nimport type { TermWrapper } from '#types'\nimport { convertUnits } from '#shared/helpers.js'\n\nlet addons\n\nexport async function getTermGroups(termgroups, app) {\n\tconst termGroups = structuredClone(termgroups)\n\t// should only set the addons once, it should not vary from one call to the next\n\tif (!addons)\n\t\taddons = {\n\t\t\tQualTWValues: discreteAddons,\n\t\t\tQualTWPredefinedGS: discreteAddons,\n\t\t\tQualTWCustomGS: discreteAddons,\n\t\t\tNumTWRegularBin: discreteAddons,\n\t\t\tNumTWCustomBin: discreteAddons,\n\t\t\tNumTWCont: continuousAddons,\n\t\t\tTermCollectionTWCont: TermCollectionContAddons\n\t\t}\n\n\tconst opts = {\n\t\tvocabApi: app.vocabApi,\n\t\taddons\n\t}\n\n\tfor (const [origIndex, tG] of termGroups.entries()) {\n\t\ttG.origIndex = origIndex\n\t\tif (tG.type == 'hierCluster') continue\n\t\tconst xtwlst: (MatrixTWObj | TermWrapper)[] = []\n\t\tfor (const tw of tG.lst) {\n\t\t\tconst inputTw = tw.getTw?.() || tw\n\t\t\txtwlst.push(\n\t\t\t\tinputTw.type in opts.addons && routedTermTypes.has(inputTw.term.type)\n\t\t\t\t\t? await TwRouter.init(inputTw, opts)\n\t\t\t\t\t: inputTw\n\t\t\t)\n\t\t}\n\t\ttG.lst = xtwlst\n\t}\n\treturn termGroups\n}\n\nexport type SetCellPropsSignature = {\n\tvalue: (\n\t\t/** a plain object for matrix cell data to be rendered, including sibling cells */\n\t\tcell: any,\n\t\tanno: any,\n\t\tvalue: string | number,\n\t\ts: any,\n\t\tt: any,\n\t\tself: any,\n\t\twidth: number,\n\t\theight: number,\n\t\tdx: number,\n\t\tdy: number,\n\t\ti: number\n\t) => any\n}\n\ninterface MatrixTWObj {\n\tsetCellProps: SetCellPropsSignature\n}\n\nconst discreteAddons: MatrixTWObj = {\n\tsetCellProps: {\n\t\tvalue: function (\n\t\t\tthis: DiscreteXTW,\n\t\t\tcell: any,\n\t\t\tanno: any,\n\t\t\tvalue: string | number,\n\t\t\ts: any,\n\t\t\tt: any,\n\t\t\tself: any,\n\t\t\twidth: number,\n\t\t\theight: number,\n\t\t\tdx: number,\n\t\t\tdy: number,\n\t\t\ti: number\n\t\t) {\n\t\t\tconst tw = this.getTw()\n\t\t\tconst key = anno.key\n\t\t\tconst values = tw.term.values || {}\n\t\t\tcell.label = 'label' in anno ? anno.label : values[key]?.label ? values[key].label : key\n\t\t\tconst tw$id = tw.$id\n\t\t\tcell.fill =\n\t\t\t\tself.config.settings.matrix.twSpecificSettings?.[tw$id!]?.[key]?.color ||\n\t\t\t\tanno.color ||\n\t\t\t\tvalues[anno.key]?.color ||\n\t\t\t\tself.data.refs.byTermId?.[tw$id!]?.bins?.find(b => anno.key == b.name)?.color\n\t\t\t// only for numeric terms for now\n\t\t\t// TODO: should also consider categorical term.values[*].order\n\t\t\tcell.order = t.ref.bins ? t.ref.bins.findIndex(bin => bin.name == key) : 0\n\n\t\t\tcell.x = cell.totalIndex * dx + cell.grpIndex * s.colgspace\n\t\t\tcell.y = height * i\n\t\t\tconst group = tw.legend?.group || tw$id\n\t\t\treturn { ref: t.ref, group, value: key, entry: { key, label: cell.label, fill: cell.fill } }\n\t\t}\n\t}\n}\n\nconst continuousAddons: MatrixTWObj = {\n\tsetCellProps: {\n\t\tvalue: function (\n\t\t\tthis: ContinuousXTW,\n\t\t\tcell: any,\n\t\t\tanno: any,\n\t\t\tvalue: string | number,\n\t\t\ts: any,\n\t\t\tt: any,\n\t\t\tself: any,\n\t\t\twidth: number,\n\t\t\theight: number,\n\t\t\tdx: number,\n\t\t\tdy: number,\n\t\t\ti: number\n\t\t) {\n\t\t\tconst tw = this.getTw()\n\t\t\tconst key = anno.key\n\t\t\tconst values = tw.term.values || {}\n\t\t\tcell.label = 'label' in anno ? anno.label : values[key]?.label ? values[key].label : key\n\t\t\tcell.fill = anno.color || values[anno.key]?.color\n\t\t\tconst tw$id = tw.$id\n\t\t\tconst twSpecificSettings = self.config.settings.matrix.twSpecificSettings\n\t\t\tif (!twSpecificSettings[tw$id!]) twSpecificSettings[tw$id!] = {}\n\t\t\tconst twSettings = twSpecificSettings[tw$id!]\n\t\t\tif (!twSettings.contBarH) twSettings.contBarH = s.barh\n\t\t\tif (!('gap' in twSettings)) twSettings.contBarGap = 4\n\n\t\t\tconst specialValue = tw.term.values?.[cell.key]\n\n\t\t\t// handle uncomputable values\n\t\t\t// TODO: the server response data should not have uncomputable values when mode='continuous'\n\t\t\t// this may be implemented in getData(), but will require lots of testing since it is used\n\t\t\t// by multiple charts\n\t\t\tif (specialValue?.uncomputable) {\n\t\t\t\tcell.x = cell.totalIndex * dx + cell.grpIndex * s.colgspace\n\t\t\t\tcell.y = height * i\n\t\t\t\tcell.height = twSettings.contBarH\n\t\t\t\tcell.fill = 'transparent'\n\t\t\t\tcell.label = specialValue.label\n\t\t\t\tconst group = tw.legend?.group || tw.$id\n\t\t\t\treturn {\n\t\t\t\t\tref: t.ref,\n\t\t\t\t\tgroup,\n\t\t\t\t\tvalue: specialValue.label || specialValue.key,\n\t\t\t\t\tentry: { key, label: cell.label, fill: cell.fill }\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// TODO: may use color scale instead of bars\n\t\t\t// for bars, use a hardcoded color; TODO: allow a user to customize the bar color?\n\t\t\tcell.fill = self.config.settings.matrix.twSpecificSettings?.[tw$id!]?.contBarColor || '#555'\n\t\t\tif (s.transpose) {\n\t\t\t\tcell.height = t.scale(cell.key)\n\t\t\t\tcell.x = twSettings.contBarGap // - cell.width\n\t\t\t} else {\n\t\t\t\tconst vc = cell.term.valueConversion\n\t\t\t\tlet renderV = vc ? cell.key * vc.scaleFactor : cell.key\n\t\t\t\t// todo: convert from a boolean into maybe `q.units or q.transform: 'zscore' | ...`\n\t\t\t\tif (this.q.convert2ZScore) {\n\t\t\t\t\trenderV = (renderV - t.mean) / t.std\n\n\t\t\t\t\t// show positive z-score as soft red and negative z-score as soft blue\n\t\t\t\t\tcell.fill = renderV > 0 ? '#FF6666' : '#6666FF'\n\t\t\t\t\tcell.zscoreLabel = ` (Z-score: ${renderV.toFixed(2)})`\n\t\t\t\t}\n\t\t\t\tcell.label =\n\t\t\t\t\t'label' in anno\n\t\t\t\t\t\t? anno.label\n\t\t\t\t\t\t: values[key]?.label\n\t\t\t\t\t\t? values[key].label\n\t\t\t\t\t\t: this.term.unit\n\t\t\t\t\t\t? `${cell.key.toFixed(2)} ${this.term.unit}`\n\t\t\t\t\t\t: cell.key.toFixed(2)\n\t\t\t\tcell.height = renderV >= 0 ? t.scales.pos(renderV) : t.scales.neg(renderV)\n\t\t\t\tcell.x = cell.totalIndex * dx + cell.grpIndex * s.colgspace\n\t\t\t\tcell.y =\n\t\t\t\t\trenderV >= 0\n\t\t\t\t\t\t? t.counts.posMaxHt + twSettings.contBarGap - cell.height\n\t\t\t\t\t\t: t.counts.posMaxHt + twSettings.contBarGap\n\t\t\t\tcell.convertedValueLabel = !vc ? '' : convertUnits(cell.key, vc.fromUnit, vc.toUnit, vc.scaleFactor)\n\t\t\t}\n\t\t}\n\t}\n}\n\nconst TermCollectionContAddons = {\n\tsetCellProps: {\n\t\tvalue: function (\n\t\t\tthis: CollectionCont,\n\t\t\tcell: any,\n\t\t\tanno: any,\n\t\t\tvalue: TermCollectionTransformedValue,\n\t\t\ts: any,\n\t\t\tt: any,\n\t\t\tself: any,\n\t\t\twidth: number,\n\t\t\theight: number,\n\t\t\tdx: number,\n\t\t\t_dy: number,\n\t\t\t_i: number\n\t\t) {\n\t\t\t//\n\t\t\tconst tw = this.getTw() as CollectionCont\n\t\t\t//cell, tw, anno, value, s, t, self, width, height, dx, dy, i) {\n\t\t\tconst twSpecificSettings = self.config.settings.matrix.twSpecificSettings\n\t\t\tif (!twSpecificSettings[tw.$id]) twSpecificSettings[tw.$id] = {}\n\t\t\tconst twSettings = twSpecificSettings[tw.$id]\n\n\t\t\tif (!twSettings.contBarH) twSettings.contBarH = s.barh\n\t\t\tif (!('gap' in twSettings)) twSettings.contBarGap = 4\n\n\t\t\t// Determine if value is positive or negative\n\t\t\tconst isNegative = value.value < 0\n\n\t\t\tif (isNegative) {\n\t\t\t\t// For negative values, use the neg scale and position below the zero line\n\t\t\t\t// Height is the scale distance from 0 to the value\n\t\t\t\tcell.height = t.scales.neg ? t.scales.neg(value.value) - t.scales.neg(0) : 0\n\t\t\t\tcell.x = cell.totalIndex * dx + cell.grpIndex * s.colgspace\n\t\t\t\t// Position negative bars downward from the zero line\n\t\t\t\t// Cumulative height is the scale distance from 0 to pre_val_sum\n\t\t\t\tconst cumulativeHeight = t.scales.neg ? t.scales.neg(value.pre_val_sum) - t.scales.neg(0) : 0\n\t\t\t\tcell.y = t.counts.posMaxHt + twSettings.contBarGap + (t.scales.neg ? t.scales.neg(0) : 0) + cumulativeHeight\n\t\t\t} else {\n\t\t\t\t// For positive values, use the pos scale and position above the zero line\n\t\t\t\t// Height is the scale distance from 0 to the value\n\t\t\t\tcell.height = t.scales.pos(value.value) - t.scales.pos(0)\n\t\t\t\tcell.x = cell.totalIndex * dx + cell.grpIndex * s.colgspace\n\t\t\t\t// Position positive bars upward from the zero line\n\t\t\t\t// Cumulative height is the scale distance from 0 to pre_val_sum\n\t\t\t\tconst cumulativeHeight = t.scales.pos(value.pre_val_sum) - t.scales.pos(0)\n\t\t\t\tcell.y = t.counts.posMaxHt + twSettings.contBarGap - t.scales.pos(0) - cumulativeHeight - cell.height\n\t\t\t}\n\n\t\t\tcell.label = value.label\n\t\t\tcell.fill = twSettings[value.label]?.color || value.color || tw.term.propsByTermId?.[value.label]?.color\n\t\t\tcell.value = value.value\n\n\t\t\t// return the corresponding legend item data\n\t\t\treturn {\n\t\t\t\tref: t.ref,\n\t\t\t\tgroup: tw.$id,\n\t\t\t\tvalue: value.label,\n\t\t\t\torder: -1,\n\t\t\t\tentry: { key: value.label, label: value.label, fill: cell.fill }\n\t\t\t}\n\t\t}\n\t}\n}\n", "import { getCompInit, copyMerge, deepEqual } from '#rx'\nimport { setMatrixDom } from './matrix.dom'\nimport { setInteractivity } from './matrix.interactivity'\nimport { setRenderers } from './matrix.renderers'\nimport { MatrixCluster } from './matrix.cluster'\nimport { MatrixControls } from './matrix.controls'\nimport * as matrixData from './matrix.data'\nimport * as matrixLayout from './matrix.layout'\nimport * as matrixSerieses from './matrix.serieses'\nimport * as matrixLegend from './matrix.legend'\nimport * as matrixGroups from './matrix.groups'\nimport { setComputedConfig } from './matrix.config'\nimport { getTermGroups } from './matrix.xtw'\nimport svgLegend from '#dom/svg.legend'\nimport { mclass, dt2label, morigin, dtsnvindel, dtcnv } from '#shared/common.js'\nimport { select } from 'd3-selection'\nimport { sayerror } from '#dom'\nimport { getCombinedTermFilter } from '#filter'\nimport { rebaseGroupFilter } from '../../mass/groups.js'\nimport { PlotBase } from '#plots/PlotBase.js'\n\nexport class Matrix extends PlotBase {\n\tstatic type = 'matrix'\n\tconfigTermKeys = ['termgroups.lst', 'divideBy']\n\n\tconstructor(opts) {\n\t\tsuper(opts)\n\t\tthis.type = Matrix.type\n\t\tthis.holderTitle = 'Sample Matrix'\n\t\tthis.optionalFeatures = JSON.parse(sessionStorage.getItem('optionalFeatures') || `{}`)?.matrix || []\n\t\tsetInteractivity(this)\n\t\tsetRenderers(this)\n\t}\n\n\tasync init(appState) {\n\t\tconst opts = this.opts\n\t\tif (opts.reactsTo) this.reactsTo = opts.reactsTo\n\t\tthis.setDom = setMatrixDom\n\t\tthis.setDom(opts)\n\n\t\tthis.config = appState.plots.find(p => p.id === this.id)\n\t\tthis.settings = Object.assign({}, this.config.settings.matrix)\n\t\tthis.computed = {} // will hold settings/configuration/data that are computed or derived from other data\n\t\tif (this.dom.header) this.dom.header.html(this.config.preBuiltPlotTitle || this.holderTitle)\n\n\t\tthis.setControls(appState)\n\t\tthis.clusterRenderer = new MatrixCluster({ holder: this.dom.cluster, app: this.app, parent: this })\n\t\tthis.legendRenderer = svgLegend({\n\t\t\tholder: this.dom.legendG,\n\t\t\trectFillFxn: d => d.color,\n\t\t\ticonStroke: '#aaa',\n\t\t\thandlers: {\n\t\t\t\tlegend: {\n\t\t\t\t\tclick: this.legendClick\n\t\t\t\t}\n\t\t\t},\n\t\t\tsettings: {\n\t\t\t\tisExcludedAttr: 'isExcluded'\n\t\t\t},\n\t\t\tnote: 'CLICK A ROW LABEL OR ITEM TO APPLY FILTERING'\n\t\t})\n\n\t\t// enable embedding of termsetting and tree menu inside self.dom.menu\n\t\tthis.customTipApi = this.dom.tip.getCustomApi({\n\t\t\td: this.dom.menubody,\n\t\t\tclear: event => {\n\t\t\t\tif (event?.target) this.dom.menutop.style('display', 'none')\n\t\t\t\tthis.dom.menubody.selectAll('*').remove()\n\t\t\t\treturn this.customTipApi\n\t\t\t},\n\t\t\tshow: () => {\n\t\t\t\tthis.dom.menubody.style('display', 'block')\n\t\t\t},\n\t\t\thide: () => {\n\t\t\t\t//this.dom.menubody.style('display', 'none')\n\t\t\t}\n\t\t})\n\n\t\tthis.setPill(appState)\n\n\t\t/*\n\t\tLevels of mclass overrides, from more general to more specific. Same logic for dt2label\n\n\t\t1. server-level:\n\t\t - specified as serverconfig.commonOverrides\n\t\t - applied to the mclass from #shared/common on server startup\n\t\t - applies to all datasets and charts\n\t\t - overrides are applied to the static common.mclass object\n\t\t\n\t\t2. dataset-level: \n\t\t - specified as termdb.mclass in the dataset's js file\n\t\t - applied to the termdbConfig.mclass payload as returned from the /termdb?getTermdbConfig=1 route\n\t\t - applies to all charts rendered for only the dataset/dslabel\n\t\t - overrides are applied to a copy of common.mclass, not the original \"static\" object\n\n\t\t3. chart-level: \n\t\t - specified as termdb[chartType].mclass in the dataset's js file\n\t\t - applied to the termdbConfig[chartType].mclass payload as returned from the /termdb?getTermdbConfig=1 route\n\t\t - applies to only the specific chart type as rendered for the dataset/dslabel\n\t\t - overrides are applied to a copy of common.mclass + termdb.mclass\n\n\t\t!!! NOTE: \n\t\t\tBoolean configuration flags for mutually exclusive values may cause conflicting configurations\n\t\t\tin the resulting merged overrides, as outputted by rx.copyMerge()\n\t\t!!!\n\t\t*/\n\t\tconst commonKeys = { mclass, dt2label, morigin }\n\t\tfor (const k in commonKeys) {\n\t\t\tconst v = commonKeys[k]\n\t\t\tthis[k] = copyMerge({}, v, appState.termdbConfig[k] || {}, appState.termdbConfig.matrix?.[k] || {})\n\t\t}\n\t}\n\n\tsetControls(appState) {\n\t\t//if (this.opts.controls) return\n\t\tthis.controlsRenderer = new MatrixControls(\n\t\t\t{\n\t\t\t\tapp: this.app,\n\t\t\t\tid: this.id,\n\t\t\t\tparent: this,\n\t\t\t\tholder: this.dom.controls,\n\t\t\t\tgetSvg: () => this.dom.svg.node()\n\t\t\t},\n\t\t\tappState\n\t\t)\n\t}\n\n\t// reactsTo(action) {\n\t// \t// note: a parent app or 'plot' component is expected to already have\n\t// \t// a comprehensive reactsTo() call to filter the actions for this component,\n\t// \t// so only farther selective action filters should be applied here as needed\n\t// \treturn true\n\t// }\n\n\tgetState(appState) {\n\t\tconst config = appState.plots.find(p => p.id === this.id)\n\t\tconst filter0 = appState.termfilter.filter0\n\t\tthis.prevFilter0 = this.state?.filter0 // will be used to detect cohort change\n\n\t\tconst parentConfig = appState.plots.find(p => p.id === this.parentId)\n\t\tconst termfilter = getCombinedTermFilter(appState, config.filter || parentConfig?.filter)\n\t\treturn {\n\t\t\tisVisible: true,\n\t\t\tconfig,\n\t\t\tfilter: termfilter.filter,\n\t\t\tfilter0, // read-only, invisible filter currently only used for gdc dataset\n\t\t\thasVerifiedToken: this.app.vocabApi.hasVerifiedToken(),\n\t\t\ttokenVerificationMessage: this.app.vocabApi.tokenVerificationMessage,\n\t\t\tvocab: appState.vocab,\n\t\t\ttermdbConfig: appState.termdbConfig,\n\t\t\tclusterMethod: config.settings.hierCluster?.clusterMethod,\n\t\t\tdistanceMethod: config.settings.hierCluster?.distanceMethod,\n\t\t\tclusterSamples: config.settings.hierCluster?.clusterSamples,\n\t\t\tclusterRows: config.settings.hierCluster?.clusterRows,\n\t\t\tzScoreTransformation: config.settings.hierCluster?.zScoreTransformation,\n\t\t\tnav: appState.nav,\n\t\t\tgroups: rebaseGroupFilter(appState)\n\t\t}\n\t}\n\n\tasync main() {\n\t\ttry {\n\t\t\tthis.config = await this.getMutableConfig()\n\t\t\tif (this.mayRequireToken()) return\n\t\t\t// do not assign this.termgroups until the data request is complete, to avoid stale value in a race condition;\n\t\t\t// this termGroups value is directly associated with the submitted data request, and the response will match\n\t\t\t// the tw.$id's in these term groups\n\t\t\tconst termGroups = await getTermGroups(this.config.termgroups, this.app)\n\n\t\t\tconst prevTranspose = this.settings.transpose\n\t\t\t// controlsRenderer.getSettings() supplies settings that are not tracked in the global app and plot state\n\t\t\t// use structuredClone to avoid overwriting of original settings.matrix\n\t\t\tObject.assign(this.settings, structuredClone(this.config.settings), this.controlsRenderer.getSettings())\n\n\t\t\tthis.dom.loadingDiv.selectAll('*').remove()\n\t\t\tthis.dom.loadingDiv.html('').style('display', '').style('position', 'relative').style('left', '45%')\n\t\t\tthis.dom.svg.style('opacity', 0.1).style('pointer-events', 'none')\n\n\t\t\t// reset highlighted top/left dendrogram children to black when data request is triggered\n\t\t\tdelete this.clickedClusterIds\n\t\t\tdelete this.clickedLeftClusterIds\n\n\t\t\ttry {\n\t\t\t\tsetComputedConfig(this.config)\n\t\t\t\tconst promises = []\n\t\t\t\t// get the data\n\t\t\t\tif (this.setHierClusterData) promises.push(this.setHierClusterData())\n\t\t\t\tpromises.push(this.setData())\n\t\t\t\tthis.dom.loadingDiv.html('Processing data ...')\n\t\t\t\tawait Promise.all(promises)\n\t\t\t\tconst warnings = this.data.warnings.join('\\n')\n\t\t\t\tthis.dom.warningDiv.style('display', warnings.length ? '' : 'none').html(warnings)\n\t\t\t\tthis.applyLegendValueFilter() // need to applyLegendValueFiter before combineData to avoid error for hierCluster\n\t\t\t\tif (this.combineData) this.combineData()\n\t\t\t\t// tws in the config may be filled-in based on applicable server response data;\n\t\t\t\t// these filled-in config, such as tw.term.values|category2samplecount, will need to replace\n\t\t\t\t// the corresponding tracked state values in the app store, without causing unnecessary\n\t\t\t\t// dispatch notifications, so use app.save()\n\t\t\t\tthis.app.save({ type: 'plot_edit', id: this.id, config: this.config })\n\t\t\t} catch (e) {\n\t\t\t\tif (e == 'no data') {\n\t\t\t\t\tthis.showNoMatchingDataMessage()\n\t\t\t\t\treturn\n\t\t\t\t} else if (this.app.isAbortError(e)) {\n\t\t\t\t\t// ignore this error, but skip this update since a subsequent action is being processed\n\t\t\t\t\treturn\n\t\t\t\t} else {\n\t\t\t\t\tthis.dom.svg.style('display', 'none')\n\t\t\t\t\tthrow e\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tthis.termGroups = termGroups // onl assign this as instance value after the data request, to prevent incorrect reference in a race condition\n\t\t\tthis.dom.loadingDiv.html('Updating ...').style('display', '')\n\t\t\tthis.termOrder = this.getTermOrder(this.data)\n\t\t\tthis.sampleGroups = this.getSampleGroups(this.hierClusterSamples || this.data)\n\t\t\tthis.sampleOrder = this.getSampleOrder(this.data)\n\t\t\t// even though there may not be sampleOrder (matrix columns) to render,\n\t\t\t// should still compute empty series data, legendData, etc to not break\n\t\t\t// controls/interactions handlers that use those data\n\t\t\tthis.setLayout()\n\t\t\tif (this.setHierColorScale) this.setHierColorScale(this.hierClusterData.clustering)\n\t\t\tif (!this.sampleOrder?.length) {\n\t\t\t\tthis.showNoMatchingDataMessage()\n\t\t\t\t// do not return early yet\n\t\t\t}\n\t\t\t// make sure computed dimensions are available from preceding steps, to use as control input values\n\t\t\tthis.controlsRenderer.main() // to update button count or cross out button labels\n\n\t\t\tthis.serieses = this.getSerieses(this.data)\n\t\t\t// TODO: may re-enable below if showing no-data message/suggestions is preferred over rendering empty matrix\n\t\t\t// can now return early before rendering computed data\n\t\t\t// if (!this.sampleOrder?.length) return\n\n\t\t\t// render the data\n\t\t\tthis.dom.loadingDiv.html('Rendering ...')\n\t\t\tif (this.plotDendrogramHclust) this.plotDendrogramHclust()\n\t\t\tthis.render()\n\t\t\tthis.mayDisplayCohortMessage()\n\t\t\tthis.dom.svg.style('display', '').style('opacity', 1).style('pointer-events', '')\n\n\t\t\tconst [xGrps, yGrps] = !this.settings.matrix.transpose ? ['sampleGrps', 'termGrps'] : ['termGrps', 'sampleGrps']\n\t\t\tconst d = this.dimensions\n\t\t\tthis.clusterRenderer.main({\n\t\t\t\tsettings: this.settings.matrix,\n\t\t\t\txGrps: this[xGrps],\n\t\t\t\tyGrps: this[yGrps],\n\t\t\t\tdimensions: d\n\t\t\t})\n\n\t\t\tthis.legendRenderer(this.legendData, {\n\t\t\t\tsettings: Object.assign({}, this.settings.legend, {\n\t\t\t\t\tsvgw: Math.max(400, d.mainw + d.xOffset - this.settings.matrix.margin.right),\n\t\t\t\t\tsvgh: d.mainh + d.yOffset,\n\t\t\t\t\tdimensions: d,\n\t\t\t\t\tpadleft: this.settings.legend.padleft //+ d.xOffset\n\t\t\t\t})\n\t\t\t})\n\t\t\tawait this.adjustSvgDimensions(prevTranspose)\n\t\t\tthis.controlsRenderer.main()\n\t\t\tif (this.data.removedHierClusterTerms) {\n\t\t\t\tfor (const r of this.data.removedHierClusterTerms) {\n\t\t\t\t\tsayerror(this.dom.errorDiv, r.text + ': ' + r.lst.join(', '))\n\t\t\t\t}\n\t\t\t}\n\t\t} catch (e) {\n\t\t\t// a new token message error may have been triggered by the data request here,\n\t\t\t// even if the initial state did not have a token message at the start of a dispatch\n\t\t\tconst message = this.app.vocabApi.tokenVerificationMessage\n\t\t\tthis.mayRequireToken(message)\n\t\t\tif (!message) {\n\t\t\t\tthis.app.tip.hide()\n\t\t\t\tthis.dom.loadingDiv.style('display', 'none')\n\t\t\t\tthrow e\n\t\t\t}\n\t\t}\n\n\t\tthis.resetInteractions()\n\t}\n\n\tshowNoMatchingDataMessage() {\n\t\tthis.forcedSampleCount = 0\n\t\tthis.dom.svg.style('opacity', 0.001).style('display', 'none')\n\t\t// an error on initial load/data request will cause computed data/settings to be empty,\n\t\t// which would cause input values to be empty for controls and likely thrown errors\n\t\tif (this.termOrder && this.dimensions) this.controlsRenderer.main({ sampleCount: 0 })\n\t\tthis.dom.loadingDiv.html('')\n\t\tconst div = this.dom.loadingDiv\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('text-align', 'center')\n\t\t\t.style('position', 'relative')\n\t\t\t.style('left', '-150px')\n\t\tdiv.append('div').style('margin', '5px 10px').html('No matching cohort sample data for the current gene list.')\n\n\t\tif (this.settings.matrix.showHints?.includes('genesetEdit')) {\n\t\t\tconst div1 = div.append('div').style('margin', '5px 10px')\n\t\t\tdiv1.append('span').html('You may change the selected cohort,')\n\n\t\t\tif (this.config.legendGrpFilter?.lst.length || this.config.legendValueFilter?.lst.length) {\n\t\t\t\tconst cnvBtn = this.controlsRenderer.btns.filter(d => d.label == 'CNV')?.node()\n\t\t\t\tif (cnvBtn) {\n\t\t\t\t\tdiv1.append('br')\n\t\t\t\t\tdiv1.append('span').html('show hidden ')\n\t\t\t\t\tdiv1\n\t\t\t\t\t\t.append('span')\n\t\t\t\t\t\t.html('CNV')\n\t\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t\t\t.style('text-decoration', 'underline')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\tcnvBtn.click()\n\t\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tconst mutationBtn = this.controlsRenderer.btns.filter(d => d.label == 'Mutation')?.node()\n\n\t\t\t\tif (cnvBtn && mutationBtn) div1.append('span').html(' or ')\n\t\t\t\tif (mutationBtn) {\n\t\t\t\t\tdiv1\n\t\t\t\t\t\t.append('span')\n\t\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t\t\t.style('text-decoration', 'underline')\n\t\t\t\t\t\t.html('Mutation')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\tmutationBtn.click()\n\t\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tif (cnvBtn || mutationBtn) div1.append('span').html(' data,')\n\t\t\t}\n\n\t\t\tdiv1.append('br')\n\t\t\tdiv1.append('span').html('or edit the gene list from the ')\n\t\t\tdiv1\n\t\t\t\t.append('span')\n\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t.style('text-decoration', 'underline')\n\t\t\t\t.html('Gene Set Edit Group menu.')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tconst GenesBtn = this.controlsRenderer.btns\n\t\t\t\t\t\t.filter(d => d.label == 'Genes')\n\t\t\t\t\t\t?.node()\n\t\t\t\t\t\t.click()\n\t\t\t\t\tconst i = setInterval(() => {\n\t\t\t\t\t\tconst editBtn = this.app.tip.d\n\t\t\t\t\t\t\t.selectAll('button')\n\t\t\t\t\t\t\t.filter(function () {\n\t\t\t\t\t\t\t\treturn this.innerHTML == 'Edit Group'\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t.node()\n\t\t\t\t\t\tif (editBtn) {\n\t\t\t\t\t\t\teditBtn.click()\n\t\t\t\t\t\t\tclearInterval(i)\n\t\t\t\t\t\t}\n\t\t\t\t\t}, 100)\n\t\t\t\t})\n\t\t}\n\t\tthis.dom.svg.style('display', 'none')\n\t}\n\n\tmayDisplayCohortMessage() {\n\t\tconst msg = deepEqual(this.state.filter0, this.prevFilter0) ? '' : 'The gene list is persisted across cohorts.'\n\t\tif (msg) {\n\t\t\tthis.dom.loadingDiv.html('')\n\t\t\tconst div = this.dom.loadingDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.style('text-align', 'center')\n\t\t\t\t.style('position', 'relative')\n\t\t\t\t.style('left', '-150px')\n\t\t\tdiv.append('div').html(msg)\n\n\t\t\tif (this.settings.matrix.showHints?.includes('genesetEdit')) {\n\t\t\t\tconst div1 = div.append('div')\n\t\t\t\tdiv1.append('span').html(' You may edit the gene list from the ')\n\t\t\t\tdiv1\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t\t.style('text-decoration', 'underline')\n\t\t\t\t\t.html('Gene Set Edit Group menu.')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tconst GenesBtn = this.controlsRenderer.btns\n\t\t\t\t\t\t\t.filter(d => d.label == 'Genes')\n\t\t\t\t\t\t\t?.node()\n\t\t\t\t\t\t\t.click()\n\t\t\t\t\t\tconst i = setInterval(() => {\n\t\t\t\t\t\t\tconst editBtn = this.app.tip.d\n\t\t\t\t\t\t\t\t.selectAll('button')\n\t\t\t\t\t\t\t\t.filter(function () {\n\t\t\t\t\t\t\t\t\treturn this.innerHTML == 'Edit Group'\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.node()\n\t\t\t\t\t\t\tif (editBtn) {\n\t\t\t\t\t\t\t\teditBtn.click()\n\t\t\t\t\t\t\t\tclearInterval(i)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}, 100)\n\t\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tthis.dom.loadingDiv.style('display', msg ? '' : 'none')\n\t}\n\n\tsampleKey(s) {\n\t\treturn s.row.sample\n\t}\n\n\tsampleLabel(s) {\n\t\treturn s.label || s.row._ref_.label || ''\n\t}\n\n\tsampleGrpKey(s) {\n\t\treturn s.grp.name\n\t}\n\n\tsampleGrpLabel(s) {\n\t\treturn s.grp.label || s.grp.name || ''\n\t}\n\n\ttermKey(t) {\n\t\treturn t.tw.$id\n\t}\n\n\ttermLabel(t) {\n\t\treturn t.label\n\t}\n\n\ttermGrpKey(t) {\n\t\treturn t.grp.name\n\t}\n\n\ttermGrpLabel(t) {\n\t\treturn t.grp.label || t.grp.name || [{ text: '\u22EE', dx: 3, cls: 'sjpp-exclude-svg-download' }]\n\t}\n\tdestroy() {\n\t\tselect(window).on(`resize.sjpp-${self.id}`, null)\n\t}\n}\n\n// assign class prototype methods and props that are exported from other matrix.* code files\nfor (const m of [matrixData, matrixGroups, matrixLayout, matrixSerieses, matrixLegend]) {\n\tfor (const methodName in m) {\n\t\tMatrix.prototype[methodName] = m[methodName]\n\t}\n}\n\nexport const matrixInit = getCompInit(Matrix)\n// this alias will allow abstracted dynamic imports\nexport const componentInit = matrixInit\n\nexport function makeChartBtnMenu(holder, chartsInstance) {\n\t/*\n\tholder: the holder in the tooltip\n\tchartsInstance: MassCharts instance\n\t\ttermdbConfig is accessible at chartsInstance.state.termdbConfig{}\n\t\tmass option is accessible at chartsInstance.app.opts{}\n\t*/\n\tchartsInstance.dom.tip.clear()\n\tconst menuDiv = holder.append('div')\n\tif (chartsInstance.state.termdbConfig.matrixplots) {\n\t\tfor (const plot of chartsInstance.state.termdbConfig.matrixplots) {\n\t\t\t/* plot: \n\t\t\t{\n\t\t\t\tname=str\n\t\t\t}\n\t\t\t*/\n\t\t\tmenuDiv\n\t\t\t\t.append('button')\n\t\t\t\t.style('margin', '10px')\n\t\t\t\t.style('padding', '10px 15px')\n\t\t\t\t.style('border-radius', '20px')\n\t\t\t\t.style('border-color', '#ededed')\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.text(plot.name)\n\t\t\t\t.on('click', async () => {\n\t\t\t\t\tchartsInstance.dom.tip.hide()\n\t\t\t\t\tconst config = await chartsInstance.app.vocabApi.getMatrixByName(plot.name)\n\t\t\t\t\t//add pre-built plot name to config to be shown in the sandbox header\n\t\t\t\t\tconfig.preBuiltPlotTitle = plot.name\n\t\t\t\t\tchartsInstance.app.dispatch({\n\t\t\t\t\t\ttype: 'plot_create',\n\t\t\t\t\t\tconfig\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t}\n\t}\n\n\tconst chart = {\n\t\tclickTo: chartsInstance.showTree_selectlst,\n\t\tchartType: 'matrix',\n\t\tusecase: { target: 'matrix', detail: 'termgroups' },\n\t\tprocessSelection: lst => {\n\t\t\treturn [\n\t\t\t\t{\n\t\t\t\t\tname: '',\n\t\t\t\t\tlst: lst.map(term => {\n\t\t\t\t\t\treturn { term }\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t}\n\tchartsInstance.showTree_selectlst(chart)\n}\n"],
5
- "mappings": "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",
6
- "names": ["self", "s", "self", "tip", "geneList", "g", "tip", "self", "self", "self", "self", "self", "self", "a", "self", "d", "self"]
7
- }
@@ -1,262 +0,0 @@
1
- import {
2
- hierCluster_renderers_exports
3
- } from "./chunk-BT4OOYPT.js";
4
- import {
5
- hierCluster_interactivity_exports
6
- } from "./chunk-HTMXVOTH.js";
7
- import {
8
- Matrix
9
- } from "./chunk-23VG37CB.js";
10
- import {
11
- filterJoin,
12
- getNormalRoot
13
- } from "./chunk-YWUVCXFS.js";
14
- import {
15
- clusterMethodLst,
16
- distanceMethodLst,
17
- dofetch3
18
- } from "./chunk-6ZCHECOT.js";
19
- import {
20
- deepEqual,
21
- getCompInit
22
- } from "./chunk-MVTCBVSX.js";
23
- import {
24
- NUMERIC_DICTIONARY_TERM,
25
- TermTypes2Dt
26
- } from "./chunk-EGWVYY7K.js";
27
- import {
28
- colorScaleMap
29
- } from "./chunk-AMYSEKPF.js";
30
- import {
31
- extent,
32
- linear
33
- } from "./chunk-OAWQ6LOO.js";
34
-
35
- // plots/matrix/hierCluster.js
36
- var HierCluster = class _HierCluster extends Matrix {
37
- static type = "hierCluster";
38
- constructor(opts) {
39
- super(opts);
40
- this.type = _HierCluster.type;
41
- this.chartType = _HierCluster.type;
42
- }
43
- async init(appState) {
44
- await super.init(appState);
45
- this.maySetSandboxHeader(appState);
46
- this.hcClipId = this.seriesClipId + "-hc";
47
- this.dom.hcClipRect = this.dom.svg.select("defs").append("clipPath").attr("id", this.hcClipId).attr("clipPathUnits", "userSpaceOnUse").append("rect").attr("display", "block");
48
- this.dom.topDendrogram = this.dom.svg.insert("g", "g").attr("clip-path", `url(#${this.hcClipId})`).append("g").attr("class", "sjpp-matrix-dendrogram").attr("data-testid", "hierCluster_top_dendrogram").on("click", (event) => {
49
- const clickedClusterId = this.getClusterFromTopDendrogram(event);
50
- if (clickedClusterId) {
51
- this.clickedClusterIds = this.getAllChildrenClusterIds(clickedClusterId);
52
- this.clickedClusterIds.push(clickedClusterId);
53
- const clickedCluster = this.hierClusterData.clustering.col.mergedClusters.get(clickedClusterId);
54
- const clickedClusterSampleNames = clickedCluster.children.map((c) => c.name);
55
- this.addSelectedSamplesOptions(clickedClusterSampleNames, event);
56
- } else {
57
- delete this.clickedClusterIds;
58
- }
59
- if (this.clickedLeftClusterIds) {
60
- delete this.clickedLeftClusterIds;
61
- this.plotDendrogramHclust();
62
- } else this.plotDendrogramHclust("top");
63
- });
64
- this.dom.leftDendrogram = this.dom.svg.insert("g", "g").attr("class", "sjpp-matrix-dendrogram").attr("data-testid", "hierCluster_left_dendrogram").on("click", (event) => {
65
- const clickedLeftClusterId = this.getClusterFromLeftDendrogram(event);
66
- if (clickedLeftClusterId) {
67
- this.clickedLeftClusterIds = this.getAllChildrenClusterIds(clickedLeftClusterId, true);
68
- this.clickedLeftClusterIds.push(clickedLeftClusterId);
69
- const clickedLeftCluster = this.hierClusterData.clustering.row.mergedClusters.get(clickedLeftClusterId);
70
- const clickedLeftClusterRowsNames = clickedLeftCluster.children.map((c) => c.name);
71
- this.addSelectedRowsOptions(clickedLeftClusterRowsNames, event);
72
- } else {
73
- delete this.clickedLeftClusterIds;
74
- }
75
- if (this.clickedClusterIds) {
76
- delete this.clickedClusterIds;
77
- this.plotDendrogramHclust();
78
- } else this.plotDendrogramHclust("left");
79
- });
80
- }
81
- async setHierClusterData(_data = {}) {
82
- this.prevServerData = this.currServerData;
83
- const [d, twlst] = await this.requestData({});
84
- if (d.error) throw d.error;
85
- this.currServerData = structuredClone(d);
86
- if (!deepEqual(this.prevServerData, this.currServerData)) {
87
- delete this.clickedClusterIds;
88
- delete this.clickedLeftClusterIds;
89
- }
90
- const s = this.settings.hierCluster;
91
- if (!d.clustering) {
92
- if (d.gene) {
93
- throw `Cannot do clustering: data is only available for 1 gene (${d.gene}). Try again by adding more genes.`;
94
- }
95
- }
96
- this.hierClusterData = d;
97
- const c = this.hierClusterData.clustering;
98
- this.setHierColorScale(c);
99
- const samples = {};
100
- for (const [i, column] of c.col.order.entries()) {
101
- samples[column.name] = { sample: column.name };
102
- for (const [j, row] of c.row.order.entries()) {
103
- const tw = twlst.find((tw2) => tw2.$id === row.name || tw2.id === row.name);
104
- const value = c.matrix[j][i];
105
- samples[column.name][tw.$id] = {
106
- key: tw.term.name,
107
- values: [
108
- {
109
- sample: column.name,
110
- dt: TermTypes2Dt[this.state.config.dataType],
111
- label: s.termGroupName,
112
- // gene: tw.term.name,
113
- // chr: tw.term.chr,
114
- // pos: `${tw.term.start}-${tw.term.stop}`,
115
- value
116
- // the color will be computed in matrix.cells, so that
117
- // it can get updated even when there are no nonsetting state diff
118
- }
119
- ]
120
- };
121
- }
122
- }
123
- this.hcTermNameOrder = this.settings.hierCluster.sortClusterRows == "asListed" ? twlst.map((t) => t.term.name) : this.settings.hierCluster.sortClusterRows == "byName" ? twlst.map((t) => t.term.name).sort() : this.config.dataType === NUMERIC_DICTIONARY_TERM ? c.row.order.map((row) => twlst.find((t) => t.$id == row.name || t.term.id == row.name)?.term.name) : c.row.order.map((row) => twlst.find((t) => t.$id == row.name)?.term.name);
124
- if (this.hcTermNameOrder.includes(void 0)) throw `unable to map row.name to term.name`;
125
- this.hcTermSorter = (a, b) => {
126
- const i = this.hcTermNameOrder.indexOf(a.tw.term.name);
127
- const j = this.hcTermNameOrder.indexOf(b.tw.term.name);
128
- if (i == -1 && j == -1) return 0;
129
- if (i == -1) return 1;
130
- if (j == -1) return -1;
131
- return i - j;
132
- };
133
- this.hcSampleNameOrder = c.col.order.map((col) => col.name);
134
- this.hcSampleSorter = (a, b) => {
135
- const i = this.hcSampleNameOrder.indexOf(a.sample);
136
- const j = this.hcSampleNameOrder.indexOf(b.sample);
137
- if (i == -1 && j == -1) return 0;
138
- if (i == -1) return 1;
139
- if (j == -1) return -1;
140
- return i - j;
141
- };
142
- const byTermId = {};
143
- for (const tw of twlst) {
144
- if (d.byTermId?.[tw.term.name]) byTermId[tw.$id] = d.byTermId[tw.term.name];
145
- }
146
- this.hierClusterSamples = {
147
- refs: { byTermId, bySampleId: d.bySampleId },
148
- lst: c.col.order.map((c2) => samples[c2.name]),
149
- samples,
150
- removedHierClusterTerms: d.removedHierClusterTerms
151
- };
152
- }
153
- async requestData() {
154
- const body = this.currRequestOpts?.hierCluster || this.getHCRequestBody(this.state);
155
- const twlst = this.hcTermGroup.lst;
156
- const data = await dofetch3("termdb/cluster", { body, signal: this.api.getAbortSignal?.() });
157
- return [data, twlst];
158
- }
159
- getHCRequestBody(state) {
160
- this.hcTermGroup = this.config.termgroups.find((grp) => grp.type == "hierCluster") || this.termOrder?.find((t) => t.grp.type == "hierCluster")?.grp;
161
- const s = state.config.settings.hierCluster;
162
- const dictionaryLegendFilter = {
163
- type: "tvslst",
164
- in: true,
165
- join: "and",
166
- lst: state.config.legendValueFilter.lst.filter((f) => !f.tvs.legendFilterType)
167
- };
168
- const terms = this.getClusterRowTermsAsParameter();
169
- if (!terms.length) throw "no data";
170
- if (!clusterMethodLst.find((i) => i.value == s.clusterMethod)) throw "Invalid cluster method";
171
- if (!distanceMethodLst.find((i) => i.value == s.distanceMethod)) throw "Invalid distance method";
172
- const body = {
173
- genome: state.vocab.genome,
174
- dslabel: state.vocab.dslabel,
175
- dataType: state.config.dataType,
176
- clusterMethod: s.clusterMethod,
177
- distanceMethod: s.distanceMethod,
178
- zScoreTransformation: s.zScoreTransformation,
179
- terms,
180
- filter: getNormalRoot(filterJoin([state.filter, dictionaryLegendFilter])),
181
- filter0: state.filter0
182
- };
183
- if (state.config.dataType == "proteomeAbundance") {
184
- body.proteomeDetails = {
185
- assay: state.config.proteomeDetails?.assay,
186
- cohort: state.config.proteomeDetails?.cohort
187
- };
188
- }
189
- return body;
190
- }
191
- combineData() {
192
- if (!this.hierClusterSamples) return;
193
- const d = this.data;
194
- const removedHierClusterTerms = this.hierClusterSamples.removedHierClusterTerms;
195
- const samples = {};
196
- const lst = [];
197
- for (const sampleId in this.hierClusterSamples.samples) {
198
- const s = this.hierClusterSamples.samples[sampleId];
199
- samples[sampleId] = s;
200
- lst.push(s);
201
- if (sampleId in d.samples) Object.assign(s, d.samples[sampleId]);
202
- const _ref_ = this.hierClusterSamples.refs.bySampleId[sampleId] || {};
203
- if (!s._ref_) s._ref_ = _ref_;
204
- else Object.assign(s._ref_, _ref_);
205
- }
206
- const t = this.hierClusterSamples.refs.byTermId;
207
- for (const $id of Object.keys(t)) {
208
- d.refs.byTermId[$id] = Object.assign({}, d.refs.byTermId[$id] || {}, t[$id]);
209
- }
210
- this.data = { samples, lst, refs: d.refs, removedHierClusterTerms };
211
- }
212
- setHierColorScale(c) {
213
- const hc = this.settings.hierCluster;
214
- const scale = linear(colorScaleMap[hc.colorScale].domain, colorScaleMap[hc.colorScale].range).clamp(true);
215
- const globalMinMaxes = [];
216
- for (const row of c.matrix) {
217
- globalMinMaxes.push(...extent(row));
218
- }
219
- const absMax = Math.min(hc.zScoreCap, Math.max(...extent(globalMinMaxes).map(Math.abs)));
220
- const [min, max] = hc.zScoreTransformation ? [-absMax, absMax] : [Math.min(...globalMinMaxes), Math.max(...globalMinMaxes)];
221
- this.hierClusterValues = { scale, min, max };
222
- }
223
- getValueColor(value) {
224
- const hc = this.settings.hierCluster;
225
- if (hc.zScoreTransformation) {
226
- const zScoreCap = this.settings.hierCluster.zScoreCap;
227
- return this.hierClusterValues.scale((value - -zScoreCap) / (zScoreCap * 2));
228
- } else {
229
- return this.hierClusterValues.scale(value / this.hierClusterValues.max);
230
- }
231
- }
232
- /* returns list of gene terms as request parameter, e.g. {gene,chr,start,stop}
233
- request parameter only need term but not tw, as it will simply fetch continuous sample values on terms without transform
234
-
235
- use of this function is unfortunate because:
236
- the incomplete migration of {name} to {gene} for gene-based term
237
- geneset edit ui is hardcoded to return {name}
238
- existing plot states contain {name}
239
-
240
- !!! migration instruction !!!
241
- - term.name is for display only, if a term is gene-based, it has term.gene=str
242
- - a geneVariant term can be based on a genomic range (and not a gene), in that case it won't have term.gene and cannot be used where gene is expected, e.g. gene-based clustering analysis
243
-
244
- */
245
- getClusterRowTermsAsParameter() {
246
- const lst = this.hcTermGroup.lst.map(this.opts.app.vocabApi.getTwMinCopy);
247
- lst.sort((a, b) => a.term.name < b.term.name ? -1 : 1);
248
- return lst;
249
- }
250
- };
251
- for (const methods of [hierCluster_renderers_exports, hierCluster_interactivity_exports]) {
252
- for (const methodName in methods) HierCluster.prototype[methodName] = methods[methodName];
253
- }
254
- var hierClusterInit = getCompInit(HierCluster);
255
- var componentInit = hierClusterInit;
256
-
257
- export {
258
- HierCluster,
259
- hierClusterInit,
260
- componentInit
261
- };
262
- //# sourceMappingURL=chunk-2VOHINOC.js.map