@sjcrh/proteinpaint-client 2.191.4 → 2.193.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 (963) hide show
  1. package/dist/2dmaf-US2ZAJJJ.js +1373 -0
  2. package/dist/AIProjectAdmin-QQO2PNAJ.js +958 -0
  3. package/dist/AIProjectAdmin-QQO2PNAJ.js.map +7 -0
  4. package/dist/AppHeader-UKB344GC.js +835 -0
  5. package/dist/BoxPlot-JEBLRKBY.js +1217 -0
  6. package/dist/BoxPlot-JEBLRKBY.js.map +7 -0
  7. package/dist/CorrelationVolcano-J3IFVSZB.js +619 -0
  8. package/dist/DE-PAPJP6AH.js +95 -0
  9. package/dist/DEinput-YON466QQ.js +301 -0
  10. package/dist/DifferentialAnalysis-DEUODXGG.js +245 -0
  11. package/dist/Disco-OZM4S7HF.js +3297 -0
  12. package/dist/Disco-OZM4S7HF.js.map +7 -0
  13. package/dist/Disco.UI-VIHYJGYU.js +249 -0
  14. package/dist/Disco.UI-VIHYJGYU.js.map +7 -0
  15. package/dist/DmrPlot-DSELMC4E.js +642 -0
  16. package/dist/GB-MUPI6RL5.js +1151 -0
  17. package/dist/GB-MUPI6RL5.js.map +7 -0
  18. package/dist/GeneExpInput-3AQEPTFZ.js +367 -0
  19. package/dist/GeneExpInput-3AQEPTFZ.js.map +7 -0
  20. package/dist/HicApp-BP7PSXY2.js +2250 -0
  21. package/dist/NumBinaryEditor-CHWQT445.js +271 -0
  22. package/dist/NumBinaryEditor.unit.spec-MXRNK7XH.js +286 -0
  23. package/dist/NumContEditor-XS3RA7GY.js +109 -0
  24. package/dist/NumContEditor.unit.spec-662MHSP4.js +169 -0
  25. package/dist/NumCustomBinEditor-LUVIAXMZ.js +38 -0
  26. package/dist/NumCustomBinEditor.unit.spec-3D3GY3F4.js +284 -0
  27. package/dist/NumDiscreteEditor-24W2A5IN.js +179 -0
  28. package/dist/NumDiscreteEditor.unit.spec-B5T42Z5S.js +202 -0
  29. package/dist/NumRegularBinEditor-AING4HZ5.js +38 -0
  30. package/dist/NumRegularBinEditor.unit.spec-UKSVZH2S.js +227 -0
  31. package/dist/NumSplineEditor-54KNKHJX.js +198 -0
  32. package/dist/NumSplineEditor.unit.spec-5FTST3Y5.js +199 -0
  33. package/dist/NumericDensity-C7DQZ5Q5.js +38 -0
  34. package/dist/NumericDensity.unit.spec-HV6SD3ZS.js +221 -0
  35. package/dist/NumericHandler-FV3L23EC.js +39 -0
  36. package/dist/NumericHandler.unit.spec-E72DXVBB.js +219 -0
  37. package/dist/ProteomeInput-3XTK74SN.js +396 -0
  38. package/dist/RunChart2-X5FBZVRX.js +758 -0
  39. package/dist/SC-WE5DG2CQ.js +1127 -0
  40. package/dist/SC-WE5DG2CQ.js.map +7 -0
  41. package/dist/Volcano-2USCTLKO.js +1379 -0
  42. package/dist/WSIViewer-U6VSJUFF.js +48562 -0
  43. package/dist/WSIViewer-U6VSJUFF.js.map +7 -0
  44. package/dist/WsiSamplesPlot-VIKSG63U.js +165 -0
  45. package/dist/adSandbox-VXUJGPD3.js +38 -0
  46. package/dist/animatedBubbleChart-4P7XLKSB.js +555 -0
  47. package/dist/animatedBubbleChart-4P7XLKSB.js.map +7 -0
  48. package/dist/app-KHZT2BVF.js +49 -0
  49. package/dist/app-XLYH3YPL.js +37 -0
  50. package/dist/app.js +20 -20
  51. package/dist/bam-C23ZARYE.js +860 -0
  52. package/dist/barchart-KGXLYEIP.js +47 -0
  53. package/dist/barchart.data-7OI5GZZ6.js +22 -0
  54. package/dist/barchart.events-3KDNIFBG.js +47 -0
  55. package/dist/barchart.integration.spec-OQYY54AQ.js +2010 -0
  56. package/dist/barchart.integration.spec-OQYY54AQ.js.map +7 -0
  57. package/dist/barchart2-AT5FXOUY.js +314 -0
  58. package/dist/barchart2-AT5FXOUY.js.map +7 -0
  59. package/dist/bars.renderer-57KSYAAT.js +12 -0
  60. package/dist/block-TCWYUB4R.js +6226 -0
  61. package/dist/block-TCWYUB4R.js.map +7 -0
  62. package/dist/block.init-7FHXQJNE.js +38 -0
  63. package/dist/block.mds.expressionrank-UGZQK7Z3.js +359 -0
  64. package/dist/block.mds.geneboxplot-2CQLB4YN.js +828 -0
  65. package/dist/block.mds.junction-JHPHWVOS.js +1545 -0
  66. package/dist/block.mds.svcnv-E7P2SVKK.js +6801 -0
  67. package/dist/block.svg-MVRR3C6V.js +164 -0
  68. package/dist/block.tk.aicheck-KX46G4TR.js +283 -0
  69. package/dist/block.tk.ase-WMXI47BF.js +365 -0
  70. package/dist/block.tk.bam-KFEGVEQQ.js +1906 -0
  71. package/dist/block.tk.bedgraphdot-P4DBCWFK.js +384 -0
  72. package/dist/block.tk.bigwig.ui-WJPH2Z7F.js +212 -0
  73. package/dist/block.tk.hicstraw-RSD6I2NX.js +823 -0
  74. package/dist/block.tk.junction-VZS2DEDO.js +2364 -0
  75. package/dist/block.tk.junction.textmatrixui-UCWGHZDI.js +199 -0
  76. package/dist/block.tk.ld-ERSIIBM2.js +99 -0
  77. package/dist/block.tk.menu-2ZNXE7CE.js +1029 -0
  78. package/dist/block.tk.pgv-EJLACCFR.js +944 -0
  79. package/dist/brainImaging-BMZJY6OT.js +423 -0
  80. package/dist/brainRegions-RZEBXPAS.js +221 -0
  81. package/dist/brainRegions-RZEBXPAS.js.map +7 -0
  82. package/dist/bubbleHeatmap-ERJFMLPK.js +383 -0
  83. package/dist/bubbleHeatmap-ERJFMLPK.js.map +7 -0
  84. package/dist/chunk-27FPMFP2.js +54 -0
  85. package/dist/chunk-3LYZMOLO.js +58 -0
  86. package/dist/chunk-455XZIIA.js +222 -0
  87. package/dist/chunk-474DTKP7.js +263 -0
  88. package/dist/chunk-4AP3O3JW.js +226 -0
  89. package/dist/chunk-4JWN7E7Q.js +117 -0
  90. package/dist/chunk-55MOHL3P.js +158 -0
  91. package/dist/chunk-5CR24RTX.js +381 -0
  92. package/dist/chunk-5QTJUPFS.js +26 -0
  93. package/dist/chunk-5TJQ6633.js +291 -0
  94. package/dist/chunk-5X5LI5YM.js +254 -0
  95. package/dist/chunk-634MOGE3.js +314 -0
  96. package/dist/chunk-634MOGE3.js.map +7 -0
  97. package/dist/chunk-6G4YOMWW.js +1825 -0
  98. package/dist/chunk-6SCBPP4C.js +95 -0
  99. package/dist/chunk-6YVEYTNH.js +4269 -0
  100. package/dist/chunk-6YVEYTNH.js.map +7 -0
  101. package/dist/chunk-73R5BVCY.js +5067 -0
  102. package/dist/chunk-73R5BVCY.js.map +7 -0
  103. package/dist/chunk-74XVBQF7.js +55 -0
  104. package/dist/chunk-7I3LST7R.js +272 -0
  105. package/dist/chunk-7KRS7L4U.js +1443 -0
  106. package/dist/chunk-7KRS7L4U.js.map +7 -0
  107. package/dist/chunk-ATUYZWHV.js +1289 -0
  108. package/dist/chunk-ATUYZWHV.js.map +7 -0
  109. package/dist/chunk-B6U3EDAF.js +448 -0
  110. package/dist/chunk-B6U3EDAF.js.map +7 -0
  111. package/dist/chunk-BKPDYW5T.js +177 -0
  112. package/dist/chunk-BO47H3VP.js +477 -0
  113. package/dist/chunk-BOO4W7WD.js +482 -0
  114. package/dist/chunk-C6YT5EM2.js +217 -0
  115. package/dist/chunk-CDUNE45Q.js +534 -0
  116. package/dist/chunk-CLN7ANNL.js +216 -0
  117. package/dist/chunk-CLNSNNQU.js +302 -0
  118. package/dist/chunk-COYULNJF.js +119 -0
  119. package/dist/chunk-DBFKUPM6.js +1275 -0
  120. package/dist/chunk-DNVSEW6P.js +170 -0
  121. package/dist/chunk-E6XLLQCG.js +299 -0
  122. package/dist/chunk-E6XLLQCG.js.map +7 -0
  123. package/dist/chunk-EC3SKPQT.js +446 -0
  124. package/dist/chunk-EDXQKDVQ.js +368 -0
  125. package/dist/chunk-EY253UB7.js +448 -0
  126. package/dist/chunk-EY253UB7.js.map +7 -0
  127. package/dist/chunk-FABY3ISP.js +176 -0
  128. package/dist/chunk-FABY3ISP.js.map +7 -0
  129. package/dist/chunk-FOPHIWFD.js +100 -0
  130. package/dist/chunk-FVX76DZS.js +203 -0
  131. package/dist/chunk-FXGE233W.js +2681 -0
  132. package/dist/chunk-GBXX3AHJ.js +343 -0
  133. package/dist/chunk-GVCQGWN7.js +34 -0
  134. package/dist/chunk-HXNUQOGN.js +234 -0
  135. package/dist/chunk-HXNUQOGN.js.map +7 -0
  136. package/dist/chunk-HXZSSHEB.js +37 -0
  137. package/dist/chunk-I73KUUYG.js +287 -0
  138. package/dist/chunk-IKDWQJZE.js +736 -0
  139. package/dist/chunk-IVXCWCKS.js +317 -0
  140. package/dist/chunk-IVXCWCKS.js.map +7 -0
  141. package/dist/chunk-JEZUPG4J.js +617 -0
  142. package/dist/chunk-JEZUPG4J.js.map +7 -0
  143. package/dist/chunk-JWHFMFF2.js +142 -0
  144. package/dist/chunk-K3OJJZCQ.js +230 -0
  145. package/dist/chunk-KM4JBR26.js +815 -0
  146. package/dist/chunk-KNOFEVOJ.js +54 -0
  147. package/dist/chunk-L7VDSIM7.js +20881 -0
  148. package/dist/chunk-L7VDSIM7.js.map +7 -0
  149. package/dist/chunk-LLX3NKB4.js +148 -0
  150. package/dist/chunk-LQJMCE7G.js +467 -0
  151. package/dist/chunk-LSWU6EAQ.js +31 -0
  152. package/dist/chunk-MNIBZTQE.js +146 -0
  153. package/dist/chunk-MQJVDIQK.js +2786 -0
  154. package/dist/chunk-N25ENPO3.js +14 -0
  155. package/dist/chunk-N3JT3KCV.js +399 -0
  156. package/dist/chunk-N6QEVQZV.js +194 -0
  157. package/dist/chunk-NJDW6ZQP.js +102 -0
  158. package/dist/chunk-NLQQIVTC.js +276 -0
  159. package/dist/chunk-NU2W6B7I.js +833 -0
  160. package/dist/chunk-NU2W6B7I.js.map +7 -0
  161. package/dist/chunk-OR43PGBV.js +98 -0
  162. package/dist/chunk-PWUERAAF.js +182 -0
  163. package/dist/chunk-PXCFA4ZQ.js +2327 -0
  164. package/dist/chunk-QSEGY3U5.js +129 -0
  165. package/dist/chunk-SC6IPDJR.js +6364 -0
  166. package/dist/chunk-SDMOLIEU.js +1205 -0
  167. package/dist/chunk-SDMOLIEU.js.map +7 -0
  168. package/dist/chunk-SOTB4FRE.js +2098 -0
  169. package/dist/chunk-SOTB4FRE.js.map +7 -0
  170. package/dist/chunk-T46LHXJW.js +283 -0
  171. package/dist/chunk-TJYRBEBK.js +2878 -0
  172. package/dist/chunk-UDL2DEBB.js +50 -0
  173. package/dist/chunk-UN3O2MNB.js +375 -0
  174. package/dist/chunk-UN3O2MNB.js.map +7 -0
  175. package/dist/chunk-UXDVUCXU.js +190 -0
  176. package/dist/chunk-UXDVUCXU.js.map +7 -0
  177. package/dist/chunk-VDIVDU3T.js +386 -0
  178. package/dist/chunk-VQZ2Z5YU.js +587 -0
  179. package/dist/chunk-VQZ2Z5YU.js.map +7 -0
  180. package/dist/chunk-VRLC7DAU.js +2833 -0
  181. package/dist/chunk-VRLC7DAU.js.map +7 -0
  182. package/dist/chunk-XQSQQSGB.js +1102 -0
  183. package/dist/chunk-XVXAQ3FI.js +1943 -0
  184. package/dist/chunk-Y45JIQ5Y.js +1219 -0
  185. package/dist/chunk-Y45JIQ5Y.js.map +7 -0
  186. package/dist/chunk-YQMENK5H.js +102 -0
  187. package/dist/chunk-ZUC4XNWU.js +514 -0
  188. package/dist/condition-ZPFBPMEZ.js +332 -0
  189. package/dist/controls-LIVMV2GV.js +41 -0
  190. package/dist/controls.config-2EOMBN5E.js +39 -0
  191. package/dist/correlation-D6GAPOP5.js +102 -0
  192. package/dist/correlation-D6GAPOP5.js.map +7 -0
  193. package/dist/cuminc-GPFDRNUP.js +1149 -0
  194. package/dist/cuminc.integration.spec-V4JYKLA6.js +678 -0
  195. package/dist/customdata.inputui-DSEUS3CT.js +289 -0
  196. package/dist/dataDownload-KT6K3M7Q.js +330 -0
  197. package/dist/dataDownload.integration.spec-VEX2RTSA.js +193 -0
  198. package/dist/databrowser.ui-VJKNMIXA.js +433 -0
  199. package/dist/dictionary-B27BMR5H.js +118 -0
  200. package/dist/dictionary-B27BMR5H.js.map +7 -0
  201. package/dist/dnaMethylation-BWQGUXVR.js +38 -0
  202. package/dist/dnaMethylation.integration.spec-YMGT2HYZ.js +203 -0
  203. package/dist/dofetch-BMSZZAAQ.js +51 -0
  204. package/dist/e2pca-KSY4DP53.js +350 -0
  205. package/dist/ep-4PAYGMWK.js +1256 -0
  206. package/dist/expclust.gdc.spec-XXFP2HHE.js +307 -0
  207. package/dist/facet-VCJQ7QPE.js +521 -0
  208. package/dist/forms2-IUD2SNOQ.js +539 -0
  209. package/dist/forms2-IUD2SNOQ.js.map +7 -0
  210. package/dist/gb-JDH242LG.js +88 -0
  211. package/dist/geneExpClustering-L23JB7XA.js +249 -0
  212. package/dist/geneExpression-P2ERCRXO.js +313 -0
  213. package/dist/geneExpression-QGPVFAN4.js +38 -0
  214. package/dist/geneExpression.unit.spec-6BQBM6VL.js +102 -0
  215. package/dist/geneORA-XIMJP665.js +278 -0
  216. package/dist/geneRanking-AJH5G22J.js +551 -0
  217. package/dist/geneVariant-AUUZ7S2B.js +41 -0
  218. package/dist/geneVariant-H6BGRRON.js +39 -0
  219. package/dist/geneVariant.integration.spec-FRCH6VI4.js +198 -0
  220. package/dist/genefusion.ui-AAJ37VFA.js +309 -0
  221. package/dist/geneset-5ARBBUYH.js +208 -0
  222. package/dist/genomeBrowser.spec-RV7YBSMZ.js +281 -0
  223. package/dist/grin2-4MYLICII.js +75 -0
  224. package/dist/grin2-4MYLICII.js.map +7 -0
  225. package/dist/grin2-RBK4NI6W.js +967 -0
  226. package/dist/grin2-RBK4NI6W.js.map +7 -0
  227. package/dist/gsea-XUMCVLFK.js +47 -0
  228. package/dist/hierCluster-HXOTNMC5.js +63 -0
  229. package/dist/hierCluster-PEDY7OTZ.js +59 -0
  230. package/dist/hierCluster.config-RKYCGNWW.js +40 -0
  231. package/dist/hierCluster.integration.spec-YKMAT7UU.js +395 -0
  232. package/dist/hierCluster.interactivity-LPTHVWHR.js +54 -0
  233. package/dist/hierCluster.renderers-4XWKHCNW.js +21 -0
  234. package/dist/imagePlot-3DF7ZH3U.js +163 -0
  235. package/dist/importPlot-N74SV3TL.js +8 -0
  236. package/dist/isoformExpression-FU7Y4OGU.js +40 -0
  237. package/dist/isoformExpression.unit.spec-BLQDKV37.js +208 -0
  238. package/dist/launch.adhoc-Y35FZV6H.js +42 -0
  239. package/dist/leftlabel.sample-ERJGAYTF.js +264 -0
  240. package/dist/leftlabel.sample-ERJGAYTF.js.map +7 -0
  241. package/dist/legacyDataset-TNIIJABK.js +119 -0
  242. package/dist/lollipop-DU37Q5E2.js +171 -0
  243. package/dist/maf-NRLSNDOT.js +452 -0
  244. package/dist/maftimeline-GRXGOOSJ.js +593 -0
  245. package/dist/matrix-G3BULZ7Y.js +58 -0
  246. package/dist/matrix-TCTX26A4.js +63 -0
  247. package/dist/matrix.cells-ED6RS5EC.js +28 -0
  248. package/dist/matrix.config-QHO2YNOT.js +41 -0
  249. package/dist/matrix.data-KQFMXWRX.js +25 -0
  250. package/dist/matrix.groups-RE74EFLY.js +27 -0
  251. package/dist/matrix.integration.spec-Y4FCZ2Q2.js +3072 -0
  252. package/dist/matrix.interactivity-3DW5WAM3.js +42 -0
  253. package/dist/matrix.layout-W57D765I.js +44 -0
  254. package/dist/matrix.legend-ZST44PIB.js +22 -0
  255. package/dist/matrix.renderers-NFRKXO7Y.js +38 -0
  256. package/dist/matrix.serieses-6ZKTFVWY.js +21 -0
  257. package/dist/matrix.sort-2UE47IOC.js +27 -0
  258. package/dist/matrix.sort.unit.spec-5CMWEXPE.js +472 -0
  259. package/dist/matrix.sorterUi-WC2YX7S7.js +18 -0
  260. package/dist/matrix.sorterUi.unit.spec-Y2HXWHJN.js +342 -0
  261. package/dist/mavb-BI4XKI5P.js +732 -0
  262. package/dist/mds.fimo-UJYESPNC.js +518 -0
  263. package/dist/mds.samplescatterplot-JKU5B4QR.js +1550 -0
  264. package/dist/mds.survivalplot-OP7Y4D3L.js +483 -0
  265. package/dist/numericDictTermCluster-DRIEJJSP.js +72 -0
  266. package/dist/oncomatrix-A3IE47HV.js +295 -0
  267. package/dist/oncomatrix.spec-TDWB2ROF.js +448 -0
  268. package/dist/plot.2dvaf-XY34TDSM.js +377 -0
  269. package/dist/plot.app-WRCBLYGO.js +41 -0
  270. package/dist/plot.barplot-RXGOUNHM.js +102 -0
  271. package/dist/plot.boxplot-GBZGSS3D.js +152 -0
  272. package/dist/plot.brainImaging-DYPKMNHL.js +51 -0
  273. package/dist/plot.disco-5K2SCKJ4.js +102 -0
  274. package/dist/plot.dzi-THJIFHIS.js +33 -0
  275. package/dist/plot.ssgq-FSIUIV3A.js +139 -0
  276. package/dist/plot.vaf2cov-HP6KEBVJ.js +259 -0
  277. package/dist/plot.wsi-MR6JMOXW.js +36 -0
  278. package/dist/polar2-IT3OF5DX.js +231 -0
  279. package/dist/polar2-IT3OF5DX.js.map +7 -0
  280. package/dist/profileForms-XXGJVF2T.js +446 -0
  281. package/dist/profileForms-XXGJVF2T.js.map +7 -0
  282. package/dist/profilePlot-J2C35OEY.js +54 -0
  283. package/dist/proteinView-7FDCILPH.js +1556 -0
  284. package/dist/proteinView-7FDCILPH.js.map +7 -0
  285. package/dist/qualitative-N7S2JHZM.js +43 -0
  286. package/dist/radar2-CDDOQGQX.js +326 -0
  287. package/dist/radar2-CDDOQGQX.js.map +7 -0
  288. package/dist/radarFacility2-ZQTHO2ON.js +334 -0
  289. package/dist/radarFacility2-ZQTHO2ON.js.map +7 -0
  290. package/dist/regression-PBGAMZAV.js +56 -0
  291. package/dist/regression.inputs-54E5YKI4.js +48 -0
  292. package/dist/regression.inputs.term-52MBTMVM.js +48 -0
  293. package/dist/regression.inputs.values.table-F3FOAYFV.js +45 -0
  294. package/dist/regression.integration.spec-M4RPJUE4.js +784 -0
  295. package/dist/regression.results-JOK6I2ZD.js +40 -0
  296. package/dist/regression.spec-O4HZB2HQ.js +708 -0
  297. package/dist/report-BDDTM7SV.js +222 -0
  298. package/dist/sampleScatter.spec-272GLYEK.js +202 -0
  299. package/dist/sampleView-E6OHEEP4.js +48 -0
  300. package/dist/samplelst-3LNF3DBG.js +111 -0
  301. package/dist/samplematrix-HL445X7I.js +2198 -0
  302. package/dist/sc-4LELHVIS.js +86 -0
  303. package/dist/scatter-IZIZURQD.js +851 -0
  304. package/dist/scatter-IZIZURQD.js.map +7 -0
  305. package/dist/scatter.integration.spec-BBEWMA7M.js +1206 -0
  306. package/dist/scatter.integration.spec-BBEWMA7M.js.map +7 -0
  307. package/dist/selectGenomeWithTklst-5LQGT4Z7.js +134 -0
  308. package/dist/singleCellCellType-T3ZT64EK.js +38 -0
  309. package/dist/singleCellCellType.unit.spec-AE4IAHOF.js +160 -0
  310. package/dist/singleCellGeneExpression-SRJXSDEB.js +38 -0
  311. package/dist/singleCellGeneExpression.unit.spec-EPL73UUO.js +153 -0
  312. package/dist/singleCellPlot-P2BHFTYZ.js +54 -0
  313. package/dist/singlecell-32SSD7VN.js +1572 -0
  314. package/dist/singlecell-7KRD5DP7.js +86 -0
  315. package/dist/snp-LE5R377N.js +38 -0
  316. package/dist/snp.unit.spec-UY6KQ5NJ.js +176 -0
  317. package/dist/snplocus-CP34ABUJ.js +208 -0
  318. package/dist/spliceevent.a53ss.diagram-JWLWQDNJ.js +151 -0
  319. package/dist/spliceevent.exonskip.diagram-C5526P7P.js +277 -0
  320. package/dist/spliceevent.noeventdiagram-352M63YB.js +460 -0
  321. package/dist/ssGSEA-BFTCECV3.js +38 -0
  322. package/dist/ssGSEA.unit.spec-4OUCKRDQ.js +88 -0
  323. package/dist/summarizeCnvGeneexp-Y3AWFIZA.js +163 -0
  324. package/dist/summarizeGeneexpSurvival-U5JSPG22.js +108 -0
  325. package/dist/summarizeMutationCnv-KCOVQEBC.js +164 -0
  326. package/dist/summarizeMutationDiagnosis-EQXEQABW.js +40 -0
  327. package/dist/summarizeMutationSurvival-4VGLG4SC.js +99 -0
  328. package/dist/summary-DXYCBNI4.js +49 -0
  329. package/dist/summary.integration.spec-MZTJISLP.js +414 -0
  330. package/dist/summaryInput-5Z3XVIL6.js +235 -0
  331. package/dist/sunburst-WVSQJYP2.js +284 -0
  332. package/dist/survival-3R3J2JBE.js +46 -0
  333. package/dist/survival-XQWFVGCJ.js +58 -0
  334. package/dist/survival.integration.spec-EBDPIBYM.js +821 -0
  335. package/dist/svgraph-SY2HVMYL.js +1387 -0
  336. package/dist/svmr-TIIMFKG7.js +3842 -0
  337. package/dist/table-5RFTXIQL.js +200 -0
  338. package/dist/termCollection-23QXTZDN.js +38 -0
  339. package/dist/termCollection-7KXABWVW.js +179 -0
  340. package/dist/termCollection.unit.spec-4AN2Z4PQ.js +208 -0
  341. package/dist/tk-WW6PJGPQ.js +46 -0
  342. package/dist/tp.ui-S5PO3MPH.js +1459 -0
  343. package/dist/tvs.dt-O7LUM5TK.js +39 -0
  344. package/dist/tvs.dtcnv.categorical-2OUFOD3W.js +40 -0
  345. package/dist/tvs.dtcnv.continuous-NOOUY5SZ.js +72 -0
  346. package/dist/tvs.dtfusion-KXQMP3UF.js +40 -0
  347. package/dist/tvs.dtsnvindel-PWHFTWZU.js +40 -0
  348. package/dist/tvs.dtsv-25FLS572.js +40 -0
  349. package/dist/tvs.numeric-KYAU5OV3.js +21 -0
  350. package/dist/tvs.samplelst-FLXNJFIV.js +104 -0
  351. package/dist/tvs.termCollection-PSVOMJE4.js +159 -0
  352. package/dist/violin-SWMEFWRA.js +46 -0
  353. package/dist/violin.integration.spec-6EQ6GC2N.js +1425 -0
  354. package/dist/violin.interactivity-WBIWPLSM.js +38 -0
  355. package/dist/violin.renderer-3WARZUOH.js +40 -0
  356. package/dist/vocabulary-WLHYHDX7.js +41 -0
  357. package/package.json +3 -3
  358. package/dist/2dmaf-Z3D2M3FB.js +0 -1373
  359. package/dist/AIProjectAdmin-2OQOQXH4.js +0 -956
  360. package/dist/AIProjectAdmin-2OQOQXH4.js.map +0 -7
  361. package/dist/AppHeader-PXLGVCVS.js +0 -835
  362. package/dist/BoxPlot-PUZKHACO.js +0 -1211
  363. package/dist/BoxPlot-PUZKHACO.js.map +0 -7
  364. package/dist/CorrelationVolcano-RO6CFLZA.js +0 -619
  365. package/dist/DE-CCA5SBJG.js +0 -95
  366. package/dist/DEinput-MRUQW6X6.js +0 -301
  367. package/dist/DifferentialAnalysis-5YQQLJKR.js +0 -245
  368. package/dist/Disco-4FTOJBLG.js +0 -3237
  369. package/dist/Disco-4FTOJBLG.js.map +0 -7
  370. package/dist/Disco.UI-IWVSK3RN.js +0 -245
  371. package/dist/Disco.UI-IWVSK3RN.js.map +0 -7
  372. package/dist/DmrPlot-FPJJHTM5.js +0 -642
  373. package/dist/GB-H6JETPRC.js +0 -1130
  374. package/dist/GB-H6JETPRC.js.map +0 -7
  375. package/dist/GeneExpInput-Q42COANS.js +0 -366
  376. package/dist/GeneExpInput-Q42COANS.js.map +0 -7
  377. package/dist/HicApp-BBD2YOMT.js +0 -2250
  378. package/dist/NumBinaryEditor-WMSF7HIO.js +0 -271
  379. package/dist/NumBinaryEditor.unit.spec-QQATLHF7.js +0 -286
  380. package/dist/NumContEditor-4CSTHVRX.js +0 -109
  381. package/dist/NumContEditor.unit.spec-2YF3OS3A.js +0 -169
  382. package/dist/NumCustomBinEditor-KFAYUWYV.js +0 -38
  383. package/dist/NumCustomBinEditor.unit.spec-YHAUSGPN.js +0 -284
  384. package/dist/NumDiscreteEditor-F46H5CME.js +0 -179
  385. package/dist/NumDiscreteEditor.unit.spec-5BIAWAVN.js +0 -202
  386. package/dist/NumRegularBinEditor-G7KOA7NR.js +0 -38
  387. package/dist/NumRegularBinEditor.unit.spec-Y6CBCWLN.js +0 -227
  388. package/dist/NumSplineEditor-JP2V2L4Y.js +0 -198
  389. package/dist/NumSplineEditor.unit.spec-N34QBZN3.js +0 -199
  390. package/dist/NumericDensity-JOPHLURB.js +0 -38
  391. package/dist/NumericDensity.unit.spec-N45PCLOT.js +0 -221
  392. package/dist/NumericHandler-SIM4E2Z5.js +0 -39
  393. package/dist/NumericHandler.unit.spec-NKLYDVTG.js +0 -219
  394. package/dist/ProteomeInput-5KMNE3PZ.js +0 -396
  395. package/dist/RunChart2-N7AZVQXJ.js +0 -758
  396. package/dist/SC-M6RGALZM.js +0 -936
  397. package/dist/SC-M6RGALZM.js.map +0 -7
  398. package/dist/Volcano-YH4RJTT5.js +0 -1379
  399. package/dist/WSIViewer-7LOVM3AU.js +0 -48508
  400. package/dist/WSIViewer-7LOVM3AU.js.map +0 -7
  401. package/dist/WsiSamplesPlot-QPPB7OOD.js +0 -165
  402. package/dist/adSandbox-R2QP74P7.js +0 -38
  403. package/dist/app-AIIN4WDE.js +0 -37
  404. package/dist/app-FJT5VXMF.js +0 -49
  405. package/dist/bam-QBO22VQB.js +0 -860
  406. package/dist/barchart-VDOP6FQU.js +0 -47
  407. package/dist/barchart.data-Z2E72EET.js +0 -22
  408. package/dist/barchart.events-NUYQBI5S.js +0 -47
  409. package/dist/barchart.integration.spec-COVZPXMH.js +0 -1980
  410. package/dist/barchart.integration.spec-COVZPXMH.js.map +0 -7
  411. package/dist/barchart2-KMSU4ROO.js +0 -311
  412. package/dist/barchart2-KMSU4ROO.js.map +0 -7
  413. package/dist/bars.renderer-JHCZDSM6.js +0 -12
  414. package/dist/block-TTN2IQAH.js +0 -6202
  415. package/dist/block-TTN2IQAH.js.map +0 -7
  416. package/dist/block.init-RRHHCNSR.js +0 -38
  417. package/dist/block.mds.expressionrank-7NWBRUII.js +0 -359
  418. package/dist/block.mds.geneboxplot-4BAJJWCC.js +0 -828
  419. package/dist/block.mds.junction-XRUIHAF5.js +0 -1545
  420. package/dist/block.mds.svcnv-YZ7PL733.js +0 -6801
  421. package/dist/block.svg-FUMP2J7A.js +0 -164
  422. package/dist/block.tk.aicheck-AIZEND45.js +0 -283
  423. package/dist/block.tk.ase-H26PKO5U.js +0 -365
  424. package/dist/block.tk.bam-XNZFHSDQ.js +0 -1906
  425. package/dist/block.tk.bedgraphdot-QTDBLBO2.js +0 -384
  426. package/dist/block.tk.bigwig.ui-OSRCPTQC.js +0 -212
  427. package/dist/block.tk.hicstraw-7GH6LVIH.js +0 -823
  428. package/dist/block.tk.junction-AJYML4AW.js +0 -2364
  429. package/dist/block.tk.junction.textmatrixui-4RIH3EZI.js +0 -199
  430. package/dist/block.tk.ld-AJYQ4C6T.js +0 -99
  431. package/dist/block.tk.menu-57OP5UW5.js +0 -1029
  432. package/dist/block.tk.pgv-XO7HP5MM.js +0 -944
  433. package/dist/brainImaging-65QDNR4D.js +0 -423
  434. package/dist/chunk-2XCUERHJ.js +0 -102
  435. package/dist/chunk-322QC6R4.js +0 -222
  436. package/dist/chunk-35SCELN4.js +0 -217
  437. package/dist/chunk-36EHIPV4.js +0 -514
  438. package/dist/chunk-3SZ6GKLB.js +0 -14
  439. package/dist/chunk-3ZLJDFJU.js +0 -368
  440. package/dist/chunk-4DXZGZOB.js +0 -54
  441. package/dist/chunk-4UWS5Y3N.js +0 -1438
  442. package/dist/chunk-4UWS5Y3N.js.map +0 -7
  443. package/dist/chunk-54EMVNPW.js +0 -102
  444. package/dist/chunk-57RBC6IZ.js +0 -302
  445. package/dist/chunk-5OUTR67M.js +0 -37
  446. package/dist/chunk-67DBIM6H.js +0 -293
  447. package/dist/chunk-67DBIM6H.js.map +0 -7
  448. package/dist/chunk-6A3IPDE2.js +0 -1943
  449. package/dist/chunk-6GN7X6LU.js +0 -2681
  450. package/dist/chunk-72X7LSBN.js +0 -54
  451. package/dist/chunk-74ZU4BT6.js +0 -2824
  452. package/dist/chunk-74ZU4BT6.js.map +0 -7
  453. package/dist/chunk-7EMWHCVW.js +0 -1825
  454. package/dist/chunk-7FACFCZK.js +0 -226
  455. package/dist/chunk-7XFGYYRV.js +0 -371
  456. package/dist/chunk-7XFGYYRV.js.map +0 -7
  457. package/dist/chunk-B6CSYKZJ.js +0 -1275
  458. package/dist/chunk-BDIKFVWZ.js +0 -443
  459. package/dist/chunk-BDIKFVWZ.js.map +0 -7
  460. package/dist/chunk-BWGU5NJS.js +0 -291
  461. package/dist/chunk-C5ZMAQXQ.js +0 -1173
  462. package/dist/chunk-C5ZMAQXQ.js.map +0 -7
  463. package/dist/chunk-CC3GFVV6.js +0 -117
  464. package/dist/chunk-CXQ6KS3Z.js +0 -1348
  465. package/dist/chunk-CXQ6KS3Z.js.map +0 -7
  466. package/dist/chunk-DCH54HC5.js +0 -824
  467. package/dist/chunk-DCH54HC5.js.map +0 -7
  468. package/dist/chunk-DD4R5P6W.js +0 -177
  469. package/dist/chunk-DKVUOBIE.js +0 -203
  470. package/dist/chunk-DR6H3QAA.js +0 -399
  471. package/dist/chunk-EH4NQ7C4.js +0 -170
  472. package/dist/chunk-EVN6KWPN.js +0 -50
  473. package/dist/chunk-FFEIP5CT.js +0 -458
  474. package/dist/chunk-FFEIP5CT.js.map +0 -7
  475. package/dist/chunk-FJP77STI.js +0 -158
  476. package/dist/chunk-FJP77STI.js.map +0 -7
  477. package/dist/chunk-G6O3URDN.js +0 -467
  478. package/dist/chunk-GNIK4JYM.js +0 -534
  479. package/dist/chunk-HKSNADSX.js +0 -477
  480. package/dist/chunk-I5RAQKKJ.js +0 -129
  481. package/dist/chunk-IW57W7EQ.js +0 -1210
  482. package/dist/chunk-IW57W7EQ.js.map +0 -7
  483. package/dist/chunk-J4SOF2ZH.js +0 -263
  484. package/dist/chunk-KPJZBCVI.js +0 -272
  485. package/dist/chunk-KSGA62R2.js +0 -2878
  486. package/dist/chunk-LTOBEUM2.js +0 -98
  487. package/dist/chunk-MYF2BWKC.js +0 -205
  488. package/dist/chunk-MYF2BWKC.js.map +0 -7
  489. package/dist/chunk-N2SKTCDK.js +0 -148
  490. package/dist/chunk-NGM3ZLIP.js +0 -230
  491. package/dist/chunk-NOEAT6CX.js +0 -317
  492. package/dist/chunk-NOEAT6CX.js.map +0 -7
  493. package/dist/chunk-NSXZPWRP.js +0 -482
  494. package/dist/chunk-O3JB4PIX.js +0 -31
  495. package/dist/chunk-OAWQ6LOO.js +0 -2063
  496. package/dist/chunk-OAWQ6LOO.js.map +0 -7
  497. package/dist/chunk-ODG6RD7P.js +0 -254
  498. package/dist/chunk-OEDZHPBJ.js +0 -58
  499. package/dist/chunk-ORL44TIK.js +0 -386
  500. package/dist/chunk-P3IENRWJ.js +0 -613
  501. package/dist/chunk-P3IENRWJ.js.map +0 -7
  502. package/dist/chunk-PCZNTK74.js +0 -26
  503. package/dist/chunk-QH6W3NVF.js +0 -287
  504. package/dist/chunk-QNETLNPB.js +0 -343
  505. package/dist/chunk-QQZ3SBF3.js +0 -216
  506. package/dist/chunk-R2MMURGK.js +0 -2786
  507. package/dist/chunk-SA7APTJR.js +0 -20792
  508. package/dist/chunk-SA7APTJR.js.map +0 -7
  509. package/dist/chunk-SHWLROJG.js +0 -283
  510. package/dist/chunk-SKREEF3H.js +0 -184
  511. package/dist/chunk-SKREEF3H.js.map +0 -7
  512. package/dist/chunk-TOU7EVFQ.js +0 -396
  513. package/dist/chunk-TOU7EVFQ.js.map +0 -7
  514. package/dist/chunk-UGVNZMLU.js +0 -4274
  515. package/dist/chunk-UGVNZMLU.js.map +0 -7
  516. package/dist/chunk-UI7OCM2A.js +0 -815
  517. package/dist/chunk-UJKW42DI.js +0 -6364
  518. package/dist/chunk-ULPMYS5B.js +0 -100
  519. package/dist/chunk-UOVALHAJ.js +0 -182
  520. package/dist/chunk-VGJSASRT.js +0 -446
  521. package/dist/chunk-VGYTAYFK.js +0 -276
  522. package/dist/chunk-VHOEJBFP.js +0 -736
  523. package/dist/chunk-VOUMS6IP.js +0 -1102
  524. package/dist/chunk-VV36JRUF.js +0 -381
  525. package/dist/chunk-W55XSG6K.js +0 -142
  526. package/dist/chunk-W6ME65LV.js +0 -34
  527. package/dist/chunk-WHI6466S.js +0 -146
  528. package/dist/chunk-WSDUD52Y.js +0 -55
  529. package/dist/chunk-XAVNZNXQ.js +0 -95
  530. package/dist/chunk-XMLURPEP.js +0 -194
  531. package/dist/chunk-YKXUK7HJ.js +0 -5041
  532. package/dist/chunk-YKXUK7HJ.js.map +0 -7
  533. package/dist/chunk-YZK37YCC.js +0 -119
  534. package/dist/chunk-ZTYNN6G5.js +0 -2327
  535. package/dist/chunk-ZXTHADSC.js +0 -158
  536. package/dist/condition-HDVYPJJD.js +0 -332
  537. package/dist/controls-YEEW46C6.js +0 -41
  538. package/dist/controls.config-C535H5DL.js +0 -39
  539. package/dist/correlation-AOSSSSL3.js +0 -99
  540. package/dist/correlation-AOSSSSL3.js.map +0 -7
  541. package/dist/cuminc-II7NFIFP.js +0 -1149
  542. package/dist/cuminc.integration.spec-B4N6OMBJ.js +0 -678
  543. package/dist/customdata.inputui-AI4ZBIEP.js +0 -289
  544. package/dist/dataDownload-ZQYLXN6D.js +0 -330
  545. package/dist/dataDownload.integration.spec-2PKYZ2AY.js +0 -193
  546. package/dist/databrowser.ui-WGD7D3XV.js +0 -433
  547. package/dist/dictionary-RYM4WP2W.js +0 -111
  548. package/dist/dictionary-RYM4WP2W.js.map +0 -7
  549. package/dist/dnaMethylation-WGJMJL5B.js +0 -38
  550. package/dist/dnaMethylation.integration.spec-DO3PV4MO.js +0 -203
  551. package/dist/dofetch-RADX3AFU.js +0 -51
  552. package/dist/e2pca-KOAAU2JX.js +0 -350
  553. package/dist/ep-CXCATXYH.js +0 -1256
  554. package/dist/expclust.gdc.spec-UJO2R3CW.js +0 -307
  555. package/dist/facet-2FBUAD7P.js +0 -521
  556. package/dist/forms2-ZBT5BZW3.js +0 -534
  557. package/dist/forms2-ZBT5BZW3.js.map +0 -7
  558. package/dist/gb-VCJFV63W.js +0 -88
  559. package/dist/geneExpClustering-FUNS6D2P.js +0 -249
  560. package/dist/geneExpression-2BWWGYL4.js +0 -38
  561. package/dist/geneExpression-2OPFWV2K.js +0 -313
  562. package/dist/geneExpression.unit.spec-G7BSHJQT.js +0 -102
  563. package/dist/geneORA-S3KQMBYL.js +0 -278
  564. package/dist/geneRanking-UZ36XAL7.js +0 -551
  565. package/dist/geneVariant-OOZ2SBXO.js +0 -41
  566. package/dist/geneVariant-ZHNVEKQ6.js +0 -39
  567. package/dist/geneVariant.integration.spec-2C7EWKEV.js +0 -198
  568. package/dist/genefusion.ui-ASICJNII.js +0 -309
  569. package/dist/geneset-SNM4M6UM.js +0 -208
  570. package/dist/genomeBrowser.spec-DJIRW2X7.js +0 -281
  571. package/dist/grin2-7AOJP5QJ.js +0 -1560
  572. package/dist/grin2-7AOJP5QJ.js.map +0 -7
  573. package/dist/grin2-RKJXYWJ5.js +0 -821
  574. package/dist/grin2-RKJXYWJ5.js.map +0 -7
  575. package/dist/gsea-SPTQJW67.js +0 -47
  576. package/dist/hierCluster-KDE5SMYP.js +0 -63
  577. package/dist/hierCluster-XG4YLVL3.js +0 -59
  578. package/dist/hierCluster.config-VNEEJCKJ.js +0 -40
  579. package/dist/hierCluster.integration.spec-SSDN7LSH.js +0 -395
  580. package/dist/hierCluster.interactivity-DKBSJ644.js +0 -54
  581. package/dist/hierCluster.renderers-OG6LZAT7.js +0 -21
  582. package/dist/imagePlot-M5JSHEY4.js +0 -163
  583. package/dist/importPlot-YH7ZY6RJ.js +0 -8
  584. package/dist/isoformExpression-EV27MKYZ.js +0 -40
  585. package/dist/isoformExpression.unit.spec-7T2GOHH3.js +0 -208
  586. package/dist/launch.adhoc-NOISOX5E.js +0 -42
  587. package/dist/leftlabel.sample-42AX4KTV.js +0 -260
  588. package/dist/leftlabel.sample-42AX4KTV.js.map +0 -7
  589. package/dist/legacyDataset-SWJCAWIR.js +0 -119
  590. package/dist/lollipop-LQCQBTSX.js +0 -171
  591. package/dist/maf-U237OWZ3.js +0 -452
  592. package/dist/maftimeline-NLZLMHT2.js +0 -593
  593. package/dist/matrix-DZJXYRYN.js +0 -63
  594. package/dist/matrix-Y5345QQG.js +0 -58
  595. package/dist/matrix.cells-PT7S74QP.js +0 -28
  596. package/dist/matrix.config-2ORCUWKX.js +0 -41
  597. package/dist/matrix.data-C6VPQJJ4.js +0 -25
  598. package/dist/matrix.groups-CEOCG2CT.js +0 -27
  599. package/dist/matrix.integration.spec-U4B3JB6N.js +0 -3072
  600. package/dist/matrix.interactivity-GFLIFIER.js +0 -42
  601. package/dist/matrix.layout-DOVDHTDX.js +0 -44
  602. package/dist/matrix.legend-JE4ZSLP7.js +0 -22
  603. package/dist/matrix.renderers-GPUJQ7KF.js +0 -38
  604. package/dist/matrix.serieses-REE4DCSR.js +0 -21
  605. package/dist/matrix.sort-VD5URUWY.js +0 -27
  606. package/dist/matrix.sort.unit.spec-4IOFVHJN.js +0 -472
  607. package/dist/matrix.sorterUi-VQYY6KBK.js +0 -18
  608. package/dist/matrix.sorterUi.unit.spec-V5O2EJBX.js +0 -342
  609. package/dist/mavb-SQDA3B2B.js +0 -732
  610. package/dist/mds.fimo-ZJSEPLD7.js +0 -518
  611. package/dist/mds.samplescatterplot-Y5V73GOY.js +0 -1550
  612. package/dist/mds.survivalplot-CZBRMHYN.js +0 -483
  613. package/dist/numericDictTermCluster-TFXBBUVI.js +0 -72
  614. package/dist/oncomatrix-ZILACPPI.js +0 -295
  615. package/dist/oncomatrix.spec-RLIVVVD6.js +0 -448
  616. package/dist/plot.2dvaf-BNRZPIKU.js +0 -377
  617. package/dist/plot.app-NRUARQCN.js +0 -41
  618. package/dist/plot.barplot-342AYQC7.js +0 -102
  619. package/dist/plot.boxplot-OHEJDPTW.js +0 -152
  620. package/dist/plot.brainImaging-KV72PAON.js +0 -51
  621. package/dist/plot.disco-OUE4RFHL.js +0 -102
  622. package/dist/plot.dzi-T3GPUH36.js +0 -33
  623. package/dist/plot.ssgq-WJHGMXW5.js +0 -139
  624. package/dist/plot.vaf2cov-NGD5PCV4.js +0 -259
  625. package/dist/plot.wsi-2MU5BDG3.js +0 -36
  626. package/dist/polar2-YCWPBPFU.js +0 -226
  627. package/dist/polar2-YCWPBPFU.js.map +0 -7
  628. package/dist/profileForms-OV3I6RK7.js +0 -441
  629. package/dist/profileForms-OV3I6RK7.js.map +0 -7
  630. package/dist/profilePlot-OMVO3K4H.js +0 -54
  631. package/dist/proteinView-OAR2RC6U.js +0 -1320
  632. package/dist/proteinView-OAR2RC6U.js.map +0 -7
  633. package/dist/qualitative-MEYBRUC6.js +0 -43
  634. package/dist/radar2-KREAMGVV.js +0 -321
  635. package/dist/radar2-KREAMGVV.js.map +0 -7
  636. package/dist/radarFacility2-DBPEV7VC.js +0 -329
  637. package/dist/radarFacility2-DBPEV7VC.js.map +0 -7
  638. package/dist/regression-ZPDPLI6G.js +0 -56
  639. package/dist/regression.inputs-QOSBAGL6.js +0 -48
  640. package/dist/regression.inputs.term-HMUMPY7X.js +0 -48
  641. package/dist/regression.inputs.values.table-VMCTZHLG.js +0 -45
  642. package/dist/regression.integration.spec-RP74JTAA.js +0 -784
  643. package/dist/regression.results-5XC6M67C.js +0 -40
  644. package/dist/regression.spec-EZYM24J7.js +0 -708
  645. package/dist/report-ZOVQCOGQ.js +0 -222
  646. package/dist/sampleScatter.spec-CD52FEOC.js +0 -202
  647. package/dist/sampleView-SVTLSWRG.js +0 -48
  648. package/dist/samplelst-HXF5POJD.js +0 -111
  649. package/dist/samplematrix-NYDAH74I.js +0 -2198
  650. package/dist/sc-JIDT4W4K.js +0 -86
  651. package/dist/scatter-WNRTPSEE.js +0 -849
  652. package/dist/scatter-WNRTPSEE.js.map +0 -7
  653. package/dist/scatter.integration.spec-3EYTPY5B.js +0 -1197
  654. package/dist/scatter.integration.spec-3EYTPY5B.js.map +0 -7
  655. package/dist/selectGenomeWithTklst-OSB7B6L3.js +0 -134
  656. package/dist/singleCellCellType-3BH7LWQ6.js +0 -38
  657. package/dist/singleCellCellType.unit.spec-RU4RJXFF.js +0 -160
  658. package/dist/singleCellGeneExpression-3UA4YER7.js +0 -38
  659. package/dist/singleCellGeneExpression.unit.spec-4ZTBG37H.js +0 -153
  660. package/dist/singleCellPlot-ZUAWK5RE.js +0 -54
  661. package/dist/singlecell-BGJZB7MF.js +0 -86
  662. package/dist/singlecell-RO3BL5OO.js +0 -1572
  663. package/dist/snp-HD7VQKBR.js +0 -38
  664. package/dist/snp.unit.spec-ISXCLMWW.js +0 -176
  665. package/dist/snplocus-IL5Z4XWV.js +0 -208
  666. package/dist/spliceevent.a53ss.diagram-LLJSPV7M.js +0 -151
  667. package/dist/spliceevent.exonskip.diagram-LAOIOIST.js +0 -277
  668. package/dist/spliceevent.noeventdiagram-MVA7Q3HT.js +0 -460
  669. package/dist/ssGSEA-7T6S3DSE.js +0 -38
  670. package/dist/ssGSEA.unit.spec-XJ3W4NWX.js +0 -88
  671. package/dist/summarizeCnvGeneexp-RRP6JUV6.js +0 -163
  672. package/dist/summarizeGeneexpSurvival-AFLHDD6Q.js +0 -108
  673. package/dist/summarizeMutationCnv-NABUYHMX.js +0 -164
  674. package/dist/summarizeMutationDiagnosis-2LQ7JU3K.js +0 -40
  675. package/dist/summarizeMutationSurvival-3WBT5TXG.js +0 -99
  676. package/dist/summary-FRDKOFXW.js +0 -49
  677. package/dist/summary.integration.spec-ZLRIA7G2.js +0 -414
  678. package/dist/summaryInput-4JO6MHP4.js +0 -235
  679. package/dist/sunburst-DRCVSC2X.js +0 -284
  680. package/dist/survival-AK75COPY.js +0 -58
  681. package/dist/survival-IF5NI3A6.js +0 -46
  682. package/dist/survival.integration.spec-7IWBTPJG.js +0 -821
  683. package/dist/svgraph-QBDF2SLB.js +0 -1387
  684. package/dist/svmr-O4GJJUT2.js +0 -3842
  685. package/dist/table-FQAIXKLE.js +0 -200
  686. package/dist/termCollection-GMDDL3L7.js +0 -179
  687. package/dist/termCollection-ZO5PZ7E3.js +0 -38
  688. package/dist/termCollection.unit.spec-5JBCTXHX.js +0 -208
  689. package/dist/tk-GJX23IV7.js +0 -46
  690. package/dist/tp.ui-T7FVMTGQ.js +0 -1459
  691. package/dist/tvs.dt-X7L7NSU6.js +0 -39
  692. package/dist/tvs.dtcnv.categorical-73G2V6CH.js +0 -40
  693. package/dist/tvs.dtcnv.continuous-DWFJL3X7.js +0 -72
  694. package/dist/tvs.dtfusion-HQADHCSV.js +0 -40
  695. package/dist/tvs.dtsnvindel-PY5OBMGW.js +0 -40
  696. package/dist/tvs.dtsv-OTBEEWSW.js +0 -40
  697. package/dist/tvs.numeric-WGDHEBJV.js +0 -21
  698. package/dist/tvs.samplelst-LCXSU5MG.js +0 -104
  699. package/dist/tvs.termCollection-L527XN4X.js +0 -159
  700. package/dist/violin-6VKRUQV3.js +0 -46
  701. package/dist/violin.integration.spec-RJATDLQH.js +0 -1425
  702. package/dist/violin.interactivity-SKF5H7MN.js +0 -38
  703. package/dist/violin.renderer-GB4TPX3B.js +0 -40
  704. package/dist/vocabulary-D3W44IWE.js +0 -41
  705. /package/dist/{2dmaf-Z3D2M3FB.js.map → 2dmaf-US2ZAJJJ.js.map} +0 -0
  706. /package/dist/{AppHeader-PXLGVCVS.js.map → AppHeader-UKB344GC.js.map} +0 -0
  707. /package/dist/{CorrelationVolcano-RO6CFLZA.js.map → CorrelationVolcano-J3IFVSZB.js.map} +0 -0
  708. /package/dist/{DE-CCA5SBJG.js.map → DE-PAPJP6AH.js.map} +0 -0
  709. /package/dist/{DEinput-MRUQW6X6.js.map → DEinput-YON466QQ.js.map} +0 -0
  710. /package/dist/{DifferentialAnalysis-5YQQLJKR.js.map → DifferentialAnalysis-DEUODXGG.js.map} +0 -0
  711. /package/dist/{DmrPlot-FPJJHTM5.js.map → DmrPlot-DSELMC4E.js.map} +0 -0
  712. /package/dist/{HicApp-BBD2YOMT.js.map → HicApp-BP7PSXY2.js.map} +0 -0
  713. /package/dist/{NumBinaryEditor-WMSF7HIO.js.map → NumBinaryEditor-CHWQT445.js.map} +0 -0
  714. /package/dist/{NumBinaryEditor.unit.spec-QQATLHF7.js.map → NumBinaryEditor.unit.spec-MXRNK7XH.js.map} +0 -0
  715. /package/dist/{NumContEditor-4CSTHVRX.js.map → NumContEditor-XS3RA7GY.js.map} +0 -0
  716. /package/dist/{NumContEditor.unit.spec-2YF3OS3A.js.map → NumContEditor.unit.spec-662MHSP4.js.map} +0 -0
  717. /package/dist/{NumCustomBinEditor-KFAYUWYV.js.map → NumCustomBinEditor-LUVIAXMZ.js.map} +0 -0
  718. /package/dist/{NumCustomBinEditor.unit.spec-YHAUSGPN.js.map → NumCustomBinEditor.unit.spec-3D3GY3F4.js.map} +0 -0
  719. /package/dist/{NumDiscreteEditor-F46H5CME.js.map → NumDiscreteEditor-24W2A5IN.js.map} +0 -0
  720. /package/dist/{NumDiscreteEditor.unit.spec-5BIAWAVN.js.map → NumDiscreteEditor.unit.spec-B5T42Z5S.js.map} +0 -0
  721. /package/dist/{NumRegularBinEditor-G7KOA7NR.js.map → NumRegularBinEditor-AING4HZ5.js.map} +0 -0
  722. /package/dist/{NumRegularBinEditor.unit.spec-Y6CBCWLN.js.map → NumRegularBinEditor.unit.spec-UKSVZH2S.js.map} +0 -0
  723. /package/dist/{NumSplineEditor-JP2V2L4Y.js.map → NumSplineEditor-54KNKHJX.js.map} +0 -0
  724. /package/dist/{NumSplineEditor.unit.spec-N34QBZN3.js.map → NumSplineEditor.unit.spec-5FTST3Y5.js.map} +0 -0
  725. /package/dist/{NumericDensity-JOPHLURB.js.map → NumericDensity-C7DQZ5Q5.js.map} +0 -0
  726. /package/dist/{NumericDensity.unit.spec-N45PCLOT.js.map → NumericDensity.unit.spec-HV6SD3ZS.js.map} +0 -0
  727. /package/dist/{NumericHandler-SIM4E2Z5.js.map → NumericHandler-FV3L23EC.js.map} +0 -0
  728. /package/dist/{NumericHandler.unit.spec-NKLYDVTG.js.map → NumericHandler.unit.spec-E72DXVBB.js.map} +0 -0
  729. /package/dist/{ProteomeInput-5KMNE3PZ.js.map → ProteomeInput-3XTK74SN.js.map} +0 -0
  730. /package/dist/{RunChart2-N7AZVQXJ.js.map → RunChart2-X5FBZVRX.js.map} +0 -0
  731. /package/dist/{Volcano-YH4RJTT5.js.map → Volcano-2USCTLKO.js.map} +0 -0
  732. /package/dist/{WsiSamplesPlot-QPPB7OOD.js.map → WsiSamplesPlot-VIKSG63U.js.map} +0 -0
  733. /package/dist/{adSandbox-R2QP74P7.js.map → adSandbox-VXUJGPD3.js.map} +0 -0
  734. /package/dist/{app-AIIN4WDE.js.map → app-KHZT2BVF.js.map} +0 -0
  735. /package/dist/{app-FJT5VXMF.js.map → app-XLYH3YPL.js.map} +0 -0
  736. /package/dist/{bam-QBO22VQB.js.map → bam-C23ZARYE.js.map} +0 -0
  737. /package/dist/{barchart-VDOP6FQU.js.map → barchart-KGXLYEIP.js.map} +0 -0
  738. /package/dist/{barchart.data-Z2E72EET.js.map → barchart.data-7OI5GZZ6.js.map} +0 -0
  739. /package/dist/{barchart.events-NUYQBI5S.js.map → barchart.events-3KDNIFBG.js.map} +0 -0
  740. /package/dist/{bars.renderer-JHCZDSM6.js.map → bars.renderer-57KSYAAT.js.map} +0 -0
  741. /package/dist/{block.init-RRHHCNSR.js.map → block.init-7FHXQJNE.js.map} +0 -0
  742. /package/dist/{block.mds.expressionrank-7NWBRUII.js.map → block.mds.expressionrank-UGZQK7Z3.js.map} +0 -0
  743. /package/dist/{block.mds.geneboxplot-4BAJJWCC.js.map → block.mds.geneboxplot-2CQLB4YN.js.map} +0 -0
  744. /package/dist/{block.mds.junction-XRUIHAF5.js.map → block.mds.junction-JHPHWVOS.js.map} +0 -0
  745. /package/dist/{block.mds.svcnv-YZ7PL733.js.map → block.mds.svcnv-E7P2SVKK.js.map} +0 -0
  746. /package/dist/{block.svg-FUMP2J7A.js.map → block.svg-MVRR3C6V.js.map} +0 -0
  747. /package/dist/{block.tk.aicheck-AIZEND45.js.map → block.tk.aicheck-KX46G4TR.js.map} +0 -0
  748. /package/dist/{block.tk.ase-H26PKO5U.js.map → block.tk.ase-WMXI47BF.js.map} +0 -0
  749. /package/dist/{block.tk.bam-XNZFHSDQ.js.map → block.tk.bam-KFEGVEQQ.js.map} +0 -0
  750. /package/dist/{block.tk.bedgraphdot-QTDBLBO2.js.map → block.tk.bedgraphdot-P4DBCWFK.js.map} +0 -0
  751. /package/dist/{block.tk.bigwig.ui-OSRCPTQC.js.map → block.tk.bigwig.ui-WJPH2Z7F.js.map} +0 -0
  752. /package/dist/{block.tk.hicstraw-7GH6LVIH.js.map → block.tk.hicstraw-RSD6I2NX.js.map} +0 -0
  753. /package/dist/{block.tk.junction-AJYML4AW.js.map → block.tk.junction-VZS2DEDO.js.map} +0 -0
  754. /package/dist/{block.tk.junction.textmatrixui-4RIH3EZI.js.map → block.tk.junction.textmatrixui-UCWGHZDI.js.map} +0 -0
  755. /package/dist/{block.tk.ld-AJYQ4C6T.js.map → block.tk.ld-ERSIIBM2.js.map} +0 -0
  756. /package/dist/{block.tk.menu-57OP5UW5.js.map → block.tk.menu-2ZNXE7CE.js.map} +0 -0
  757. /package/dist/{block.tk.pgv-XO7HP5MM.js.map → block.tk.pgv-EJLACCFR.js.map} +0 -0
  758. /package/dist/{brainImaging-65QDNR4D.js.map → brainImaging-BMZJY6OT.js.map} +0 -0
  759. /package/dist/{chunk-72X7LSBN.js.map → chunk-27FPMFP2.js.map} +0 -0
  760. /package/dist/{chunk-OEDZHPBJ.js.map → chunk-3LYZMOLO.js.map} +0 -0
  761. /package/dist/{chunk-322QC6R4.js.map → chunk-455XZIIA.js.map} +0 -0
  762. /package/dist/{chunk-J4SOF2ZH.js.map → chunk-474DTKP7.js.map} +0 -0
  763. /package/dist/{chunk-7FACFCZK.js.map → chunk-4AP3O3JW.js.map} +0 -0
  764. /package/dist/{chunk-CC3GFVV6.js.map → chunk-4JWN7E7Q.js.map} +0 -0
  765. /package/dist/{chunk-ZXTHADSC.js.map → chunk-55MOHL3P.js.map} +0 -0
  766. /package/dist/{chunk-VV36JRUF.js.map → chunk-5CR24RTX.js.map} +0 -0
  767. /package/dist/{chunk-PCZNTK74.js.map → chunk-5QTJUPFS.js.map} +0 -0
  768. /package/dist/{chunk-BWGU5NJS.js.map → chunk-5TJQ6633.js.map} +0 -0
  769. /package/dist/{chunk-ODG6RD7P.js.map → chunk-5X5LI5YM.js.map} +0 -0
  770. /package/dist/{chunk-7EMWHCVW.js.map → chunk-6G4YOMWW.js.map} +0 -0
  771. /package/dist/{chunk-XAVNZNXQ.js.map → chunk-6SCBPP4C.js.map} +0 -0
  772. /package/dist/{chunk-WSDUD52Y.js.map → chunk-74XVBQF7.js.map} +0 -0
  773. /package/dist/{chunk-KPJZBCVI.js.map → chunk-7I3LST7R.js.map} +0 -0
  774. /package/dist/{chunk-DD4R5P6W.js.map → chunk-BKPDYW5T.js.map} +0 -0
  775. /package/dist/{chunk-HKSNADSX.js.map → chunk-BO47H3VP.js.map} +0 -0
  776. /package/dist/{chunk-NSXZPWRP.js.map → chunk-BOO4W7WD.js.map} +0 -0
  777. /package/dist/{chunk-35SCELN4.js.map → chunk-C6YT5EM2.js.map} +0 -0
  778. /package/dist/{chunk-GNIK4JYM.js.map → chunk-CDUNE45Q.js.map} +0 -0
  779. /package/dist/{chunk-QQZ3SBF3.js.map → chunk-CLN7ANNL.js.map} +0 -0
  780. /package/dist/{chunk-57RBC6IZ.js.map → chunk-CLNSNNQU.js.map} +0 -0
  781. /package/dist/{chunk-YZK37YCC.js.map → chunk-COYULNJF.js.map} +0 -0
  782. /package/dist/{chunk-B6CSYKZJ.js.map → chunk-DBFKUPM6.js.map} +0 -0
  783. /package/dist/{chunk-EH4NQ7C4.js.map → chunk-DNVSEW6P.js.map} +0 -0
  784. /package/dist/{chunk-VGJSASRT.js.map → chunk-EC3SKPQT.js.map} +0 -0
  785. /package/dist/{chunk-3ZLJDFJU.js.map → chunk-EDXQKDVQ.js.map} +0 -0
  786. /package/dist/{chunk-ULPMYS5B.js.map → chunk-FOPHIWFD.js.map} +0 -0
  787. /package/dist/{chunk-DKVUOBIE.js.map → chunk-FVX76DZS.js.map} +0 -0
  788. /package/dist/{chunk-6GN7X6LU.js.map → chunk-FXGE233W.js.map} +0 -0
  789. /package/dist/{chunk-QNETLNPB.js.map → chunk-GBXX3AHJ.js.map} +0 -0
  790. /package/dist/{chunk-W6ME65LV.js.map → chunk-GVCQGWN7.js.map} +0 -0
  791. /package/dist/{chunk-5OUTR67M.js.map → chunk-HXZSSHEB.js.map} +0 -0
  792. /package/dist/{chunk-QH6W3NVF.js.map → chunk-I73KUUYG.js.map} +0 -0
  793. /package/dist/{chunk-VHOEJBFP.js.map → chunk-IKDWQJZE.js.map} +0 -0
  794. /package/dist/{chunk-W55XSG6K.js.map → chunk-JWHFMFF2.js.map} +0 -0
  795. /package/dist/{chunk-NGM3ZLIP.js.map → chunk-K3OJJZCQ.js.map} +0 -0
  796. /package/dist/{chunk-UI7OCM2A.js.map → chunk-KM4JBR26.js.map} +0 -0
  797. /package/dist/{chunk-4DXZGZOB.js.map → chunk-KNOFEVOJ.js.map} +0 -0
  798. /package/dist/{chunk-N2SKTCDK.js.map → chunk-LLX3NKB4.js.map} +0 -0
  799. /package/dist/{chunk-G6O3URDN.js.map → chunk-LQJMCE7G.js.map} +0 -0
  800. /package/dist/{chunk-O3JB4PIX.js.map → chunk-LSWU6EAQ.js.map} +0 -0
  801. /package/dist/{chunk-WHI6466S.js.map → chunk-MNIBZTQE.js.map} +0 -0
  802. /package/dist/{chunk-R2MMURGK.js.map → chunk-MQJVDIQK.js.map} +0 -0
  803. /package/dist/{chunk-3SZ6GKLB.js.map → chunk-N25ENPO3.js.map} +0 -0
  804. /package/dist/{chunk-DR6H3QAA.js.map → chunk-N3JT3KCV.js.map} +0 -0
  805. /package/dist/{chunk-XMLURPEP.js.map → chunk-N6QEVQZV.js.map} +0 -0
  806. /package/dist/{chunk-54EMVNPW.js.map → chunk-NJDW6ZQP.js.map} +0 -0
  807. /package/dist/{chunk-VGYTAYFK.js.map → chunk-NLQQIVTC.js.map} +0 -0
  808. /package/dist/{chunk-LTOBEUM2.js.map → chunk-OR43PGBV.js.map} +0 -0
  809. /package/dist/{chunk-UOVALHAJ.js.map → chunk-PWUERAAF.js.map} +0 -0
  810. /package/dist/{chunk-ZTYNN6G5.js.map → chunk-PXCFA4ZQ.js.map} +0 -0
  811. /package/dist/{chunk-I5RAQKKJ.js.map → chunk-QSEGY3U5.js.map} +0 -0
  812. /package/dist/{chunk-UJKW42DI.js.map → chunk-SC6IPDJR.js.map} +0 -0
  813. /package/dist/{chunk-SHWLROJG.js.map → chunk-T46LHXJW.js.map} +0 -0
  814. /package/dist/{chunk-KSGA62R2.js.map → chunk-TJYRBEBK.js.map} +0 -0
  815. /package/dist/{chunk-EVN6KWPN.js.map → chunk-UDL2DEBB.js.map} +0 -0
  816. /package/dist/{chunk-ORL44TIK.js.map → chunk-VDIVDU3T.js.map} +0 -0
  817. /package/dist/{chunk-VOUMS6IP.js.map → chunk-XQSQQSGB.js.map} +0 -0
  818. /package/dist/{chunk-6A3IPDE2.js.map → chunk-XVXAQ3FI.js.map} +0 -0
  819. /package/dist/{chunk-2XCUERHJ.js.map → chunk-YQMENK5H.js.map} +0 -0
  820. /package/dist/{chunk-36EHIPV4.js.map → chunk-ZUC4XNWU.js.map} +0 -0
  821. /package/dist/{condition-HDVYPJJD.js.map → condition-ZPFBPMEZ.js.map} +0 -0
  822. /package/dist/{controls-YEEW46C6.js.map → controls-LIVMV2GV.js.map} +0 -0
  823. /package/dist/{controls.config-C535H5DL.js.map → controls.config-2EOMBN5E.js.map} +0 -0
  824. /package/dist/{cuminc-II7NFIFP.js.map → cuminc-GPFDRNUP.js.map} +0 -0
  825. /package/dist/{cuminc.integration.spec-B4N6OMBJ.js.map → cuminc.integration.spec-V4JYKLA6.js.map} +0 -0
  826. /package/dist/{customdata.inputui-AI4ZBIEP.js.map → customdata.inputui-DSEUS3CT.js.map} +0 -0
  827. /package/dist/{dataDownload-ZQYLXN6D.js.map → dataDownload-KT6K3M7Q.js.map} +0 -0
  828. /package/dist/{dataDownload.integration.spec-2PKYZ2AY.js.map → dataDownload.integration.spec-VEX2RTSA.js.map} +0 -0
  829. /package/dist/{databrowser.ui-WGD7D3XV.js.map → databrowser.ui-VJKNMIXA.js.map} +0 -0
  830. /package/dist/{dnaMethylation-WGJMJL5B.js.map → dnaMethylation-BWQGUXVR.js.map} +0 -0
  831. /package/dist/{dnaMethylation.integration.spec-DO3PV4MO.js.map → dnaMethylation.integration.spec-YMGT2HYZ.js.map} +0 -0
  832. /package/dist/{dofetch-RADX3AFU.js.map → dofetch-BMSZZAAQ.js.map} +0 -0
  833. /package/dist/{e2pca-KOAAU2JX.js.map → e2pca-KSY4DP53.js.map} +0 -0
  834. /package/dist/{ep-CXCATXYH.js.map → ep-4PAYGMWK.js.map} +0 -0
  835. /package/dist/{expclust.gdc.spec-UJO2R3CW.js.map → expclust.gdc.spec-XXFP2HHE.js.map} +0 -0
  836. /package/dist/{facet-2FBUAD7P.js.map → facet-VCJQ7QPE.js.map} +0 -0
  837. /package/dist/{gb-VCJFV63W.js.map → gb-JDH242LG.js.map} +0 -0
  838. /package/dist/{geneExpClustering-FUNS6D2P.js.map → geneExpClustering-L23JB7XA.js.map} +0 -0
  839. /package/dist/{geneExpression-2OPFWV2K.js.map → geneExpression-P2ERCRXO.js.map} +0 -0
  840. /package/dist/{geneExpression-2BWWGYL4.js.map → geneExpression-QGPVFAN4.js.map} +0 -0
  841. /package/dist/{geneExpression.unit.spec-G7BSHJQT.js.map → geneExpression.unit.spec-6BQBM6VL.js.map} +0 -0
  842. /package/dist/{geneORA-S3KQMBYL.js.map → geneORA-XIMJP665.js.map} +0 -0
  843. /package/dist/{geneRanking-UZ36XAL7.js.map → geneRanking-AJH5G22J.js.map} +0 -0
  844. /package/dist/{geneVariant-OOZ2SBXO.js.map → geneVariant-AUUZ7S2B.js.map} +0 -0
  845. /package/dist/{geneVariant-ZHNVEKQ6.js.map → geneVariant-H6BGRRON.js.map} +0 -0
  846. /package/dist/{geneVariant.integration.spec-2C7EWKEV.js.map → geneVariant.integration.spec-FRCH6VI4.js.map} +0 -0
  847. /package/dist/{genefusion.ui-ASICJNII.js.map → genefusion.ui-AAJ37VFA.js.map} +0 -0
  848. /package/dist/{geneset-SNM4M6UM.js.map → geneset-5ARBBUYH.js.map} +0 -0
  849. /package/dist/{genomeBrowser.spec-DJIRW2X7.js.map → genomeBrowser.spec-RV7YBSMZ.js.map} +0 -0
  850. /package/dist/{gsea-SPTQJW67.js.map → gsea-XUMCVLFK.js.map} +0 -0
  851. /package/dist/{hierCluster-KDE5SMYP.js.map → hierCluster-HXOTNMC5.js.map} +0 -0
  852. /package/dist/{hierCluster-XG4YLVL3.js.map → hierCluster-PEDY7OTZ.js.map} +0 -0
  853. /package/dist/{hierCluster.config-VNEEJCKJ.js.map → hierCluster.config-RKYCGNWW.js.map} +0 -0
  854. /package/dist/{hierCluster.integration.spec-SSDN7LSH.js.map → hierCluster.integration.spec-YKMAT7UU.js.map} +0 -0
  855. /package/dist/{hierCluster.interactivity-DKBSJ644.js.map → hierCluster.interactivity-LPTHVWHR.js.map} +0 -0
  856. /package/dist/{hierCluster.renderers-OG6LZAT7.js.map → hierCluster.renderers-4XWKHCNW.js.map} +0 -0
  857. /package/dist/{imagePlot-M5JSHEY4.js.map → imagePlot-3DF7ZH3U.js.map} +0 -0
  858. /package/dist/{importPlot-YH7ZY6RJ.js.map → importPlot-N74SV3TL.js.map} +0 -0
  859. /package/dist/{isoformExpression-EV27MKYZ.js.map → isoformExpression-FU7Y4OGU.js.map} +0 -0
  860. /package/dist/{isoformExpression.unit.spec-7T2GOHH3.js.map → isoformExpression.unit.spec-BLQDKV37.js.map} +0 -0
  861. /package/dist/{launch.adhoc-NOISOX5E.js.map → launch.adhoc-Y35FZV6H.js.map} +0 -0
  862. /package/dist/{legacyDataset-SWJCAWIR.js.map → legacyDataset-TNIIJABK.js.map} +0 -0
  863. /package/dist/{lollipop-LQCQBTSX.js.map → lollipop-DU37Q5E2.js.map} +0 -0
  864. /package/dist/{maf-U237OWZ3.js.map → maf-NRLSNDOT.js.map} +0 -0
  865. /package/dist/{maftimeline-NLZLMHT2.js.map → maftimeline-GRXGOOSJ.js.map} +0 -0
  866. /package/dist/{matrix-DZJXYRYN.js.map → matrix-G3BULZ7Y.js.map} +0 -0
  867. /package/dist/{matrix-Y5345QQG.js.map → matrix-TCTX26A4.js.map} +0 -0
  868. /package/dist/{matrix.cells-PT7S74QP.js.map → matrix.cells-ED6RS5EC.js.map} +0 -0
  869. /package/dist/{matrix.config-2ORCUWKX.js.map → matrix.config-QHO2YNOT.js.map} +0 -0
  870. /package/dist/{matrix.data-C6VPQJJ4.js.map → matrix.data-KQFMXWRX.js.map} +0 -0
  871. /package/dist/{matrix.groups-CEOCG2CT.js.map → matrix.groups-RE74EFLY.js.map} +0 -0
  872. /package/dist/{matrix.integration.spec-U4B3JB6N.js.map → matrix.integration.spec-Y4FCZ2Q2.js.map} +0 -0
  873. /package/dist/{matrix.interactivity-GFLIFIER.js.map → matrix.interactivity-3DW5WAM3.js.map} +0 -0
  874. /package/dist/{matrix.layout-DOVDHTDX.js.map → matrix.layout-W57D765I.js.map} +0 -0
  875. /package/dist/{matrix.legend-JE4ZSLP7.js.map → matrix.legend-ZST44PIB.js.map} +0 -0
  876. /package/dist/{matrix.renderers-GPUJQ7KF.js.map → matrix.renderers-NFRKXO7Y.js.map} +0 -0
  877. /package/dist/{matrix.serieses-REE4DCSR.js.map → matrix.serieses-6ZKTFVWY.js.map} +0 -0
  878. /package/dist/{matrix.sort-VD5URUWY.js.map → matrix.sort-2UE47IOC.js.map} +0 -0
  879. /package/dist/{matrix.sort.unit.spec-4IOFVHJN.js.map → matrix.sort.unit.spec-5CMWEXPE.js.map} +0 -0
  880. /package/dist/{matrix.sorterUi-VQYY6KBK.js.map → matrix.sorterUi-WC2YX7S7.js.map} +0 -0
  881. /package/dist/{matrix.sorterUi.unit.spec-V5O2EJBX.js.map → matrix.sorterUi.unit.spec-Y2HXWHJN.js.map} +0 -0
  882. /package/dist/{mavb-SQDA3B2B.js.map → mavb-BI4XKI5P.js.map} +0 -0
  883. /package/dist/{mds.fimo-ZJSEPLD7.js.map → mds.fimo-UJYESPNC.js.map} +0 -0
  884. /package/dist/{mds.samplescatterplot-Y5V73GOY.js.map → mds.samplescatterplot-JKU5B4QR.js.map} +0 -0
  885. /package/dist/{mds.survivalplot-CZBRMHYN.js.map → mds.survivalplot-OP7Y4D3L.js.map} +0 -0
  886. /package/dist/{numericDictTermCluster-TFXBBUVI.js.map → numericDictTermCluster-DRIEJJSP.js.map} +0 -0
  887. /package/dist/{oncomatrix-ZILACPPI.js.map → oncomatrix-A3IE47HV.js.map} +0 -0
  888. /package/dist/{oncomatrix.spec-RLIVVVD6.js.map → oncomatrix.spec-TDWB2ROF.js.map} +0 -0
  889. /package/dist/{plot.2dvaf-BNRZPIKU.js.map → plot.2dvaf-XY34TDSM.js.map} +0 -0
  890. /package/dist/{plot.app-NRUARQCN.js.map → plot.app-WRCBLYGO.js.map} +0 -0
  891. /package/dist/{plot.barplot-342AYQC7.js.map → plot.barplot-RXGOUNHM.js.map} +0 -0
  892. /package/dist/{plot.boxplot-OHEJDPTW.js.map → plot.boxplot-GBZGSS3D.js.map} +0 -0
  893. /package/dist/{plot.brainImaging-KV72PAON.js.map → plot.brainImaging-DYPKMNHL.js.map} +0 -0
  894. /package/dist/{plot.disco-OUE4RFHL.js.map → plot.disco-5K2SCKJ4.js.map} +0 -0
  895. /package/dist/{plot.dzi-T3GPUH36.js.map → plot.dzi-THJIFHIS.js.map} +0 -0
  896. /package/dist/{plot.ssgq-WJHGMXW5.js.map → plot.ssgq-FSIUIV3A.js.map} +0 -0
  897. /package/dist/{plot.vaf2cov-NGD5PCV4.js.map → plot.vaf2cov-HP6KEBVJ.js.map} +0 -0
  898. /package/dist/{plot.wsi-2MU5BDG3.js.map → plot.wsi-MR6JMOXW.js.map} +0 -0
  899. /package/dist/{profilePlot-OMVO3K4H.js.map → profilePlot-J2C35OEY.js.map} +0 -0
  900. /package/dist/{qualitative-MEYBRUC6.js.map → qualitative-N7S2JHZM.js.map} +0 -0
  901. /package/dist/{regression-ZPDPLI6G.js.map → regression-PBGAMZAV.js.map} +0 -0
  902. /package/dist/{regression.inputs-QOSBAGL6.js.map → regression.inputs-54E5YKI4.js.map} +0 -0
  903. /package/dist/{regression.inputs.term-HMUMPY7X.js.map → regression.inputs.term-52MBTMVM.js.map} +0 -0
  904. /package/dist/{regression.inputs.values.table-VMCTZHLG.js.map → regression.inputs.values.table-F3FOAYFV.js.map} +0 -0
  905. /package/dist/{regression.integration.spec-RP74JTAA.js.map → regression.integration.spec-M4RPJUE4.js.map} +0 -0
  906. /package/dist/{regression.results-5XC6M67C.js.map → regression.results-JOK6I2ZD.js.map} +0 -0
  907. /package/dist/{regression.spec-EZYM24J7.js.map → regression.spec-O4HZB2HQ.js.map} +0 -0
  908. /package/dist/{report-ZOVQCOGQ.js.map → report-BDDTM7SV.js.map} +0 -0
  909. /package/dist/{sampleScatter.spec-CD52FEOC.js.map → sampleScatter.spec-272GLYEK.js.map} +0 -0
  910. /package/dist/{sampleView-SVTLSWRG.js.map → sampleView-E6OHEEP4.js.map} +0 -0
  911. /package/dist/{samplelst-HXF5POJD.js.map → samplelst-3LNF3DBG.js.map} +0 -0
  912. /package/dist/{samplematrix-NYDAH74I.js.map → samplematrix-HL445X7I.js.map} +0 -0
  913. /package/dist/{sc-JIDT4W4K.js.map → sc-4LELHVIS.js.map} +0 -0
  914. /package/dist/{selectGenomeWithTklst-OSB7B6L3.js.map → selectGenomeWithTklst-5LQGT4Z7.js.map} +0 -0
  915. /package/dist/{singleCellCellType-3BH7LWQ6.js.map → singleCellCellType-T3ZT64EK.js.map} +0 -0
  916. /package/dist/{singleCellCellType.unit.spec-RU4RJXFF.js.map → singleCellCellType.unit.spec-AE4IAHOF.js.map} +0 -0
  917. /package/dist/{singleCellGeneExpression-3UA4YER7.js.map → singleCellGeneExpression-SRJXSDEB.js.map} +0 -0
  918. /package/dist/{singleCellGeneExpression.unit.spec-4ZTBG37H.js.map → singleCellGeneExpression.unit.spec-EPL73UUO.js.map} +0 -0
  919. /package/dist/{singleCellPlot-ZUAWK5RE.js.map → singleCellPlot-P2BHFTYZ.js.map} +0 -0
  920. /package/dist/{singlecell-RO3BL5OO.js.map → singlecell-32SSD7VN.js.map} +0 -0
  921. /package/dist/{singlecell-BGJZB7MF.js.map → singlecell-7KRD5DP7.js.map} +0 -0
  922. /package/dist/{snp-HD7VQKBR.js.map → snp-LE5R377N.js.map} +0 -0
  923. /package/dist/{snp.unit.spec-ISXCLMWW.js.map → snp.unit.spec-UY6KQ5NJ.js.map} +0 -0
  924. /package/dist/{snplocus-IL5Z4XWV.js.map → snplocus-CP34ABUJ.js.map} +0 -0
  925. /package/dist/{spliceevent.a53ss.diagram-LLJSPV7M.js.map → spliceevent.a53ss.diagram-JWLWQDNJ.js.map} +0 -0
  926. /package/dist/{spliceevent.exonskip.diagram-LAOIOIST.js.map → spliceevent.exonskip.diagram-C5526P7P.js.map} +0 -0
  927. /package/dist/{spliceevent.noeventdiagram-MVA7Q3HT.js.map → spliceevent.noeventdiagram-352M63YB.js.map} +0 -0
  928. /package/dist/{ssGSEA-7T6S3DSE.js.map → ssGSEA-BFTCECV3.js.map} +0 -0
  929. /package/dist/{ssGSEA.unit.spec-XJ3W4NWX.js.map → ssGSEA.unit.spec-4OUCKRDQ.js.map} +0 -0
  930. /package/dist/{summarizeCnvGeneexp-RRP6JUV6.js.map → summarizeCnvGeneexp-Y3AWFIZA.js.map} +0 -0
  931. /package/dist/{summarizeGeneexpSurvival-AFLHDD6Q.js.map → summarizeGeneexpSurvival-U5JSPG22.js.map} +0 -0
  932. /package/dist/{summarizeMutationCnv-NABUYHMX.js.map → summarizeMutationCnv-KCOVQEBC.js.map} +0 -0
  933. /package/dist/{summarizeMutationDiagnosis-2LQ7JU3K.js.map → summarizeMutationDiagnosis-EQXEQABW.js.map} +0 -0
  934. /package/dist/{summarizeMutationSurvival-3WBT5TXG.js.map → summarizeMutationSurvival-4VGLG4SC.js.map} +0 -0
  935. /package/dist/{summary-FRDKOFXW.js.map → summary-DXYCBNI4.js.map} +0 -0
  936. /package/dist/{summary.integration.spec-ZLRIA7G2.js.map → summary.integration.spec-MZTJISLP.js.map} +0 -0
  937. /package/dist/{summaryInput-4JO6MHP4.js.map → summaryInput-5Z3XVIL6.js.map} +0 -0
  938. /package/dist/{sunburst-DRCVSC2X.js.map → sunburst-WVSQJYP2.js.map} +0 -0
  939. /package/dist/{survival-IF5NI3A6.js.map → survival-3R3J2JBE.js.map} +0 -0
  940. /package/dist/{survival-AK75COPY.js.map → survival-XQWFVGCJ.js.map} +0 -0
  941. /package/dist/{survival.integration.spec-7IWBTPJG.js.map → survival.integration.spec-EBDPIBYM.js.map} +0 -0
  942. /package/dist/{svgraph-QBDF2SLB.js.map → svgraph-SY2HVMYL.js.map} +0 -0
  943. /package/dist/{svmr-O4GJJUT2.js.map → svmr-TIIMFKG7.js.map} +0 -0
  944. /package/dist/{table-FQAIXKLE.js.map → table-5RFTXIQL.js.map} +0 -0
  945. /package/dist/{termCollection-ZO5PZ7E3.js.map → termCollection-23QXTZDN.js.map} +0 -0
  946. /package/dist/{termCollection-GMDDL3L7.js.map → termCollection-7KXABWVW.js.map} +0 -0
  947. /package/dist/{termCollection.unit.spec-5JBCTXHX.js.map → termCollection.unit.spec-4AN2Z4PQ.js.map} +0 -0
  948. /package/dist/{tk-GJX23IV7.js.map → tk-WW6PJGPQ.js.map} +0 -0
  949. /package/dist/{tp.ui-T7FVMTGQ.js.map → tp.ui-S5PO3MPH.js.map} +0 -0
  950. /package/dist/{tvs.dt-X7L7NSU6.js.map → tvs.dt-O7LUM5TK.js.map} +0 -0
  951. /package/dist/{tvs.dtcnv.categorical-73G2V6CH.js.map → tvs.dtcnv.categorical-2OUFOD3W.js.map} +0 -0
  952. /package/dist/{tvs.dtcnv.continuous-DWFJL3X7.js.map → tvs.dtcnv.continuous-NOOUY5SZ.js.map} +0 -0
  953. /package/dist/{tvs.dtfusion-HQADHCSV.js.map → tvs.dtfusion-KXQMP3UF.js.map} +0 -0
  954. /package/dist/{tvs.dtsnvindel-PY5OBMGW.js.map → tvs.dtsnvindel-PWHFTWZU.js.map} +0 -0
  955. /package/dist/{tvs.dtsv-OTBEEWSW.js.map → tvs.dtsv-25FLS572.js.map} +0 -0
  956. /package/dist/{tvs.numeric-WGDHEBJV.js.map → tvs.numeric-KYAU5OV3.js.map} +0 -0
  957. /package/dist/{tvs.samplelst-LCXSU5MG.js.map → tvs.samplelst-FLXNJFIV.js.map} +0 -0
  958. /package/dist/{tvs.termCollection-L527XN4X.js.map → tvs.termCollection-PSVOMJE4.js.map} +0 -0
  959. /package/dist/{violin-6VKRUQV3.js.map → violin-SWMEFWRA.js.map} +0 -0
  960. /package/dist/{violin.integration.spec-RJATDLQH.js.map → violin.integration.spec-6EQ6GC2N.js.map} +0 -0
  961. /package/dist/{violin.interactivity-SKF5H7MN.js.map → violin.interactivity-WBIWPLSM.js.map} +0 -0
  962. /package/dist/{violin.renderer-GB4TPX3B.js.map → violin.renderer-3WARZUOH.js.map} +0 -0
  963. /package/dist/{vocabulary-D3W44IWE.js.map → vocabulary-WLHYHDX7.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../plots/brainRegions.samples.ts", "../plots/proteinView.ts"],
4
+ "sourcesContent": ["import type { Menu } from '#dom'\nimport { scaleSequential, interpolateBlues, scaleLinear } from 'd3'\nimport { loadBrainAssets, renderBrainSvg } from './brainRegions.svg'\n\nconst NO_DATA_COLOR = '#dcdcdc'\nconst BRAIN_RENDER_W = 440\n\n// Monotonic counter for unique <linearGradient> ids (Date.now() can collide when the\n// brain re-renders within the same millisecond on volcano changes).\nlet gradientSeq = 0\n\nexport type BrainRegionSamplesOpts = {\n\t/** region code \u2192 display name */\n\tregions: { [code: string]: string }\n\t/** region code \u2192 sample count (case + control) */\n\tcounts: { [code: string]: number }\n\ttemplateUrl: string\n\tsvgUrl: string\n\t/** total distinct samples behind the counts; shown in the title */\n\ttotalSamples: number\n\ttip: Menu\n\t/** number of samples whose region value wasn't a configured region */\n\tunmappedCount?: number\n\t/** invoked when a region is clicked (e.g. the Protein View volcano sync) */\n\tonRegionClick?: (code: string, event: MouseEvent) => void\n\t/** when true for a code, render that region as filtered-out */\n\tisRegionDimmed?: (code: string) => boolean\n}\n\n// Render the brain \"sample distribution\" view: each region filled by its sample\n// count (sequential blues) with a samples-per-region legend. Kept as a standalone\n// renderer (not a plot component) so Protein View \u2014 and future callers \u2014 can embed\n// it next to the cohort volcano.\nexport async function drawBrainRegionSamples(holder: any, opts: BrainRegionSamplesOpts) {\n\tconst { regions, counts, templateUrl, svgUrl, totalSamples, tip } = opts\n\tconst assets = await loadBrainAssets(svgUrl, Object.keys(regions))\n\t// Title is built live from totalSamples (case + control) so it stays correct as\n\t// cohorts/regions are hidden.\n\tconst title = `All samples (n=${totalSamples})`\n\tconst max = Math.max(0, ...Object.values(counts))\n\tconst colorScale = scaleSequential(interpolateBlues).domain([0, Math.max(1, max)])\n\n\tconst container = holder\n\t\t.append('div')\n\t\t.attr('class', 'sjpp-brain-region-samples-container')\n\t\t.style('display', 'flex')\n\t\t.style('gap', '20px')\n\t\t.style('flex-wrap', 'wrap')\n\t\t.style('align-items', 'flex-start')\n\n\trenderBrainSvg({\n\t\tholder: container,\n\t\twidth: BRAIN_RENDER_W,\n\t\ttemplateUrl,\n\t\tassets,\n\t\tregions,\n\t\ttip,\n\t\ttitle,\n\t\tfillByRegion: (code: string) => {\n\t\t\tconst n = counts[code] ?? 0\n\t\t\treturn n > 0 ? (colorScale(n) as string) : NO_DATA_COLOR\n\t\t},\n\t\ttooltipByRegion: (code: string, label: string) => {\n\t\t\tconst n = counts[code] ?? 0\n\t\t\treturn `${label} (${code})\\nSamples: ${n}`\n\t\t},\n\t\tonRegionClick: opts.onRegionClick,\n\t\tisRegionDimmed: opts.isRegionDimmed\n\t})\n\n\trenderSamplesLegend(container, colorScale, max)\n\n\tconst unmappedCount = opts.unmappedCount ?? 0\n\tif (unmappedCount > 0) {\n\t\tholder\n\t\t\t.append('div')\n\t\t\t.style('margin-top', '4px')\n\t\t\t.style('width', `${BRAIN_RENDER_W}px`)\n\t\t\t.style('text-align', 'right')\n\t\t\t.style('font-size', '11px')\n\t\t\t.style('color', '#888')\n\t\t\t.text(`${unmappedCount} sample${unmappedCount === 1 ? '' : 's'} had unmapped region values`)\n\t}\n}\n\nfunction renderSamplesLegend(container: any, colorScale: any, max: number) {\n\tconst legendDiv = container\n\t\t.append('div')\n\t\t.style('display', 'flex')\n\t\t.style('flex-direction', 'column')\n\t\t.style('justify-content', 'center')\n\t\t.style('padding', '10px')\n\n\tlegendDiv\n\t\t.append('div')\n\t\t.style('font-weight', 'bold')\n\t\t.style('font-size', '13px')\n\t\t.style('margin-bottom', '8px')\n\t\t.text('Samples per region')\n\n\tconst legendWidth = 20\n\tconst legendHeight = 200\n\tconst svg = legendDiv\n\t\t.append('svg')\n\t\t.attr('width', legendWidth + 60)\n\t\t.attr('height', legendHeight + 30)\n\n\tconst defs = svg.append('defs')\n\tconst gradientId = `brain-samples-gradient-${gradientSeq++}`\n\tconst gradient = defs\n\t\t.append('linearGradient')\n\t\t.attr('id', gradientId)\n\t\t.attr('x1', '0')\n\t\t.attr('y1', '0')\n\t\t.attr('x2', '0')\n\t\t.attr('y2', '1')\n\n\t// Gradient is drawn high (max) \u2192 low (0), so y1=0 takes color at max.\n\tconst steps = 10\n\tfor (let i = 0; i <= steps; i++) {\n\t\tconst t = i / steps\n\t\tconst val = max * (1 - t)\n\t\tgradient\n\t\t\t.append('stop')\n\t\t\t.attr('offset', `${t * 100}%`)\n\t\t\t.attr('stop-color', colorScale(val))\n\t}\n\n\tsvg\n\t\t.append('rect')\n\t\t.attr('x', 0)\n\t\t.attr('y', 10)\n\t\t.attr('width', legendWidth)\n\t\t.attr('height', legendHeight)\n\t\t.style('fill', `url(#${gradientId})`)\n\t\t.attr('stroke', '#999')\n\n\tconst legendScale = scaleLinear()\n\t\t.domain([max, 0])\n\t\t.range([10, legendHeight + 10])\n\tconst ticks = max > 0 ? [max, Math.round((max * 3) / 4), Math.round(max / 2), Math.round(max / 4), 0] : [0]\n\tfor (const tick of ticks) {\n\t\tconst y = legendScale(tick)\n\t\tsvg\n\t\t\t.append('line')\n\t\t\t.attr('x1', legendWidth)\n\t\t\t.attr('y1', y)\n\t\t\t.attr('x2', legendWidth + 5)\n\t\t\t.attr('y2', y)\n\t\t\t.attr('stroke', '#666')\n\t\tsvg\n\t\t\t.append('text')\n\t\t\t.attr('x', legendWidth + 8)\n\t\t\t.attr('y', y)\n\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t.attr('font-size', '10px')\n\t\t\t.text(String(tick))\n\t}\n\n\tlegendDiv\n\t\t.append('div')\n\t\t.style('margin-top', '10px')\n\t\t.style('font-size', '12px')\n\t\t.style('color', '#666')\n\t\t.html(\n\t\t\t`<span style=\"display:inline-block;width:14px;height:14px;background:${NO_DATA_COLOR};border:1px solid #999;vertical-align:middle;margin-right:4px\"></span> No samples`\n\t\t)\n}\n", "import type { MassState, BasePlotConfig } from '#mass/types/mass'\nimport { getCompInit, copyMerge, type RxComponent } from '#rx'\nimport { axisstyle, to_svg } from '#src/client'\nimport { Menu, table2col, LegendCircleReference, addGeneSearchbox, DataPointInteractions, make_radios } from '#dom'\nimport { PlotBase } from './PlotBase'\nimport { dofetch3 } from '#common/dofetch'\nimport { drawBrainRegionSamples } from './brainRegions.samples'\nimport { axisBottom, axisLeft, scaleLinear, rgb, select, creator } from 'd3'\nimport { shapeSelector, shapes } from '../dom/shapes.js'\nimport { NumericModes, TermTypes } from '#shared/terms.js'\nimport { aa2gmcoord } from '#src/coord'\nimport { mclass, getColors } from '#shared/common.js'\nimport { roundValue } from '#shared/roundValue.js'\nimport { icons as controlIcons } from '../dom/control.icons'\n\nconst defaultConfig = {\n\tchartType: 'proteinView'\n}\n\n// Cohort volcano hover/hit-test tuning. Kept together so they're easy to find\n// and adjust as a group when the dot styling changes.\nconst COHORT_VOLCANO_HIT_RADIUS_PADDING_PX = 3 // px added to maxDotRadius for the quadtree broad-query\nconst COHORT_VOLCANO_HIT_BUFFER_PX = 2 // px of forgiveness around each dot's own visual edge\nconst COHORT_VOLCANO_HOVER_RING_SIZE_SCALE = 1.15 // hover ring grows the dot by this factor\nconst COHORT_VOLCANO_HOVER_RING_STROKE_PX = 1.5 // hover ring stroke width (non-scaling)\nconst COHORT_VOLCANO_HOVER_MAX_COHORTS = 5 // max rows shown in the hover tooltip table; rest collapse into \"and N more...\"\n\nclass ProteinView extends PlotBase implements RxComponent {\n\tstatic type = 'proteinView'\n\ttype: string\n\tdom!: {\n\t\tholder: any\n\t\tbody: any\n\t\ttip: Menu\n\t\theader?: any\n\t}\n\tcomponents: any\n\n\tconstructor(opts: any, api) {\n\t\tsuper(opts, api)\n\t\tthis.type = ProteinView.type\n\t\tthis.components = {}\n\t}\n\n\tasync init() {\n\t\tconst holder = this.opts.holder.append('div').style('padding', '10px')\n\t\tthis.dom = {\n\t\t\tholder,\n\t\t\tbody: holder.append('div'),\n\t\t\ttip: new Menu({ padding: '' }),\n\t\t\theader: this.opts.header\n\t\t}\n\t\tif (this.dom.header) this.dom.header.html('Protein View')\n\t}\n\n\tgetState(appState: MassState) {\n\t\tconst config: any = appState.plots.find((p: BasePlotConfig) => p.id === this.id)\n\t\tif (!config) throw `No plot with id='${this.id}' found`\n\t\treturn { config }\n\t}\n\n\tmaySetSandboxHeader() {\n\t\tif (!this.dom.header) return\n\t\tconst term = this.state.config?.tw?.term\n\t\tconst header = `Protein View: ${term?.name}`\n\t\tthis.dom.header.text(header)\n\t}\n\n\tasync main() {\n\t\tconst term = this.state.config?.tw?.term\n\t\tif (!term?.name) throw new Error('proteinView: selected protein term is missing')\n\n\t\tconst body = {\n\t\t\tgenome: this.app.opts.state.vocab.genome,\n\t\t\tdslabel: this.app.opts.state.vocab.dslabel,\n\t\t\tterm: this.state.config.tw,\n\t\t\tfilter: this.state.config.filter,\n\t\t\tfilter0: this.state.config.filter0\n\t\t}\n\n\t\tthis.maySetSandboxHeader()\n\t\tconst data = await dofetch3('termdb/proteome', { body })\n\t\tif (data.error) throw data.error\n\t\tthis.dom.body.selectAll('*').remove()\n\n\t\tconst topRow = this.dom.body\n\t\t\t.append('div')\n\t\t\t.style('display', 'flex')\n\t\t\t.style('gap', '16px')\n\t\t\t.style('align-items', 'flex-start')\n\t\t\t.style('flex-wrap', 'wrap')\n\t\tconst volcanoApi = renderCohortVolcano(topRow, data, this)\n\n\t\tconst termdbConfig = this.app.vocabApi.termdbConfig\n\t\tif (termdbConfig?.queries?.proteome?.brainRegions) {\n\t\t\tawait renderBrainRegionSamplesPanel(topRow, data, this, volcanoApi)\n\t\t}\n\n\t\t// group PTM cohorts by organism first, then isoform.\n\t\tconst ptmDataByOrganism = new Map<string, Map<string, any[]>>()\n\t\tfor (const cohortData of data.cohorts || []) {\n\t\t\tif (!cohortData.PTMType) continue // filter out non-PTM cohorts\n\t\t\tconst organism = cohortData.organism\n\t\t\tconst isoform = cohortData.isoform\n\t\t\tconst ptmDataByIsoform = ptmDataByOrganism.get(organism) || new Map<string, any[]>()\n\t\t\tptmDataByOrganism.set(organism, ptmDataByIsoform)\n\t\t\tconst existingCohorts = ptmDataByIsoform.get(isoform)\n\t\t\tif (!existingCohorts) {\n\t\t\t\tptmDataByIsoform.set(isoform, [cohortData])\n\t\t\t} else {\n\t\t\t\texistingCohorts.push(cohortData)\n\t\t\t}\n\t\t}\n\n\t\ttype LollipopSection = { organism: string; isoform: string; cohorts: any[]; genomeName: string }\n\t\tconst sections: LollipopSection[] = []\n\t\tfor (const [organism, byIso] of ptmDataByOrganism) {\n\t\t\tfor (const [isoform, cohorts] of byIso) {\n\t\t\t\tsections.push({ organism, isoform, cohorts, genomeName: cohorts[0].genomeName })\n\t\t\t}\n\t\t}\n\t\tif (sections.length === 0) return\n\n\t\tlet allGenomes: any = null\n\t\tconst baseGenome = this.app.opts.genome\n\t\tconst getGenome = async (genomeName: string) => {\n\t\t\tif (genomeName === baseGenome.name) return baseGenome\n\t\t\tif (!allGenomes) {\n\t\t\t\tconst result = await dofetch3('genomes')\n\t\t\t\tallGenomes = result.genomes || {}\n\t\t\t\tfor (const g of Object.values(allGenomes) as any[]) {\n\t\t\t\t\tif (g.chrlookup || g.name == baseGenome.name) continue\n\t\t\t\t\tg.chrlookup = {}\n\t\t\t\t\tfor (const chr in g.majorchr) {\n\t\t\t\t\t\tg.chrlookup[chr.toUpperCase()] = { name: chr, len: g.majorchr[chr], major: true }\n\t\t\t\t\t}\n\t\t\t\t\tfor (const chr in g.minorchr || {}) {\n\t\t\t\t\t\tg.chrlookup[chr.toUpperCase()] = { name: chr, len: g.minorchr[chr] }\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tconst g = allGenomes[genomeName]\n\t\t\tif (!g) throw `genome ${genomeName} not supported`\n\t\t\treturn g\n\t\t}\n\n\t\tif (sections.length === 1) {\n\t\t\tconst s = sections[0]\n\t\t\tconst genome = await getGenome(s.genomeName)\n\t\t\tawait renderPTMLollipop(this.dom.body.append('div'), s.cohorts, this, s.isoform, genome)\n\t\t\treturn\n\t\t}\n\n\t\tconst keyOf = (s: LollipopSection) => `${s.organism}\\u0001${s.isoform}`\n\t\tconst selectedKeys = new Set<string>([keyOf(sections[0])])\n\t\tlet compareMode = false\n\n\t\tconst layoutDiv = this.dom.body\n\t\t\t.append('div')\n\t\t\t.style('display', 'flex')\n\t\t\t.style('gap', '16px')\n\t\t\t.style('margin-top', '10px')\n\t\t\t.style('margin-left', '70px')\n\t\t\t.style('align-items', 'flex-start')\n\t\tconst sidebar = layoutDiv\n\t\t\t.append('div')\n\t\t\t.style('flex', '0 0 220px')\n\t\t\t.style('border', '1px solid #e5e7eb')\n\t\t\t.style('border-radius', '4px')\n\t\t\t.style('padding', '8px')\n\t\t\t.style('font-size', '.85em')\n\t\t\t.style('position', 'sticky')\n\t\t\t.style('top', '8px')\n\t\t\t.style('margin-top', '20px')\n\t\t\t.style('max-height', '85vh')\n\t\t\t.style('overflow', 'auto')\n\t\tconst rightPane = layoutDiv.append('div').style('flex', '1 1 auto').style('min-width', '0')\n\n\t\tconst sidebarHeader = sidebar\n\t\t\t.append('div')\n\t\t\t.style('display', 'flex')\n\t\t\t.style('flex-direction', 'column')\n\t\t\t.style('gap', '6px')\n\t\t\t.style('margin-bottom', '8px')\n\t\tsidebarHeader\n\t\t\t.append('span')\n\t\t\t.style('font-weight', '600')\n\t\t\t.style('font-size', '1.5em')\n\t\t\t.style('text-transform', 'uppercase')\n\t\t\t.text('Isoforms')\n\n\t\tconst modeToggle = sidebarHeader\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-flex')\n\t\t\t.style('align-items', 'center')\n\t\t\t.style('gap', '6px')\n\t\tmodeToggle.append('span').style('color', '#6b7280').text('Mode:')\n\t\tmake_radios({\n\t\t\tholder: modeToggle.append('div').attr('aria-label', 'Isoform view mode'),\n\t\t\toptions: [\n\t\t\t\t{ label: 'Single', value: 'single', checked: true },\n\t\t\t\t{ label: 'Compare', value: 'compare' }\n\t\t\t],\n\t\t\tstyles: { display: 'inline-block' },\n\t\t\tcallback: (value: string) => {\n\t\t\t\tconst asCompare = value === 'compare'\n\t\t\t\tif (asCompare === compareMode) return\n\t\t\t\tcompareMode = asCompare\n\t\t\t\tif (!compareMode && selectedKeys.size > 1) {\n\t\t\t\t\tconst first = selectedKeys.values().next().value as string\n\t\t\t\t\tselectedKeys.clear()\n\t\t\t\t\tselectedKeys.add(first)\n\t\t\t\t}\n\t\t\t\trenderSidebar()\n\t\t\t\tvoid renderRight()\n\t\t\t}\n\t\t})\n\n\t\tconst sidebarList = sidebar.append('div')\n\t\tconst sectionsByOrganism = new Map<string, LollipopSection[]>()\n\t\tfor (const s of sections) {\n\t\t\tconst arr = sectionsByOrganism.get(s.organism) || []\n\t\t\tarr.push(s)\n\t\t\tsectionsByOrganism.set(s.organism, arr)\n\t\t}\n\t\tconst showOrganismHeading = sectionsByOrganism.size > 1\n\n\t\tconst renderSidebar = () => {\n\t\t\tsidebarList.selectAll('*').remove()\n\t\t\tfor (const [organism, items] of sectionsByOrganism) {\n\t\t\t\tif (showOrganismHeading) {\n\t\t\t\t\tsidebarList\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.text(organism)\n\t\t\t\t\t\t.style('font-weight', '600')\n\t\t\t\t\t\t.style('color', '#374151')\n\t\t\t\t\t\t.style('margin', '6px 0 4px 0')\n\t\t\t\t}\n\t\t\t\tfor (const s of items) {\n\t\t\t\t\tconst key = keyOf(s)\n\t\t\t\t\tconst isSelected = selectedKeys.has(key)\n\t\t\t\t\tconst isSoleSelection = isSelected && selectedKeys.size === 1\n\t\t\t\t\tconst toggleSelection = () => {\n\t\t\t\t\t\tif (compareMode) {\n\t\t\t\t\t\t\tif (selectedKeys.has(key)) {\n\t\t\t\t\t\t\t\tif (selectedKeys.size > 1) selectedKeys.delete(key)\n\t\t\t\t\t\t\t\telse return // keep at least one\n\t\t\t\t\t\t\t} else selectedKeys.add(key)\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tif (selectedKeys.has(key) && selectedKeys.size === 1) return\n\t\t\t\t\t\t\tselectedKeys.clear()\n\t\t\t\t\t\t\tselectedKeys.add(key)\n\t\t\t\t\t\t}\n\t\t\t\t\t\trenderSidebar()\n\t\t\t\t\t\tvoid renderRight()\n\t\t\t\t\t}\n\t\t\t\t\tconst row = sidebarList\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.attr('role', compareMode ? 'checkbox' : 'radio')\n\t\t\t\t\t\t.attr('aria-checked', String(isSelected))\n\t\t\t\t\t\t.attr('aria-label', `${s.organism} ${s.isoform}`)\n\t\t\t\t\t\t.attr('tabindex', '0')\n\t\t\t\t\t\t.style('display', 'flex')\n\t\t\t\t\t\t.style('align-items', 'center')\n\t\t\t\t\t\t.style('gap', '6px')\n\t\t\t\t\t\t.style('padding', '3px 4px')\n\t\t\t\t\t\t.style('border-radius', '3px')\n\t\t\t\t\t\t.style('background', isSelected ? '#eff6ff' : 'transparent')\n\t\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t\t\t.on('click', toggleSelection)\n\t\t\t\t\t\t.on('keydown', (event: KeyboardEvent) => {\n\t\t\t\t\t\t\tif (event.key === 'Enter' || event.key === ' ') {\n\t\t\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\t\t\ttoggleSelection()\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t})\n\t\t\t\t\tif (compareMode) {\n\t\t\t\t\t\trow\n\t\t\t\t\t\t\t.append('input')\n\t\t\t\t\t\t\t.attr('type', 'checkbox')\n\t\t\t\t\t\t\t.attr('tabindex', '-1')\n\t\t\t\t\t\t\t.attr('aria-hidden', 'true')\n\t\t\t\t\t\t\t.property('checked', isSelected)\n\t\t\t\t\t\t\t.property('disabled', isSoleSelection)\n\t\t\t\t\t\t\t.style('margin', '0')\n\t\t\t\t\t\t\t.style('cursor', isSoleSelection ? 'not-allowed' : 'pointer')\n\t\t\t\t\t\t\t.on('click', (event: Event) => {\n\t\t\t\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\t\t\t\ttoggleSelection()\n\t\t\t\t\t\t\t})\n\t\t\t\t\t}\n\t\t\t\t\trow.append('span').text(s.isoform)\n\t\t\t\t\trow.append('span').style('color', '#6b7280').style('margin-left', 'auto').text(String(s.cohorts.length))\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst renderRight = async () => {\n\t\t\trightPane.selectAll('*').remove()\n\t\t\tconst selected = sections.filter(s => selectedKeys.has(keyOf(s)))\n\t\t\tif (!selected.length) return\n\t\t\tconst cols = rightPane\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'flex')\n\t\t\t\t.style('flex-direction', 'column')\n\t\t\t\t.style('gap', '16px')\n\t\t\tfor (const s of selected) {\n\t\t\t\tconst col = cols.append('div').style('min-width', '0')\n\t\t\t\ttry {\n\t\t\t\t\tconst genome = await getGenome(s.genomeName)\n\t\t\t\t\tawait renderPTMLollipop(col, s.cohorts, this, s.isoform, genome)\n\t\t\t\t} catch (err: any) {\n\t\t\t\t\tcol\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.style('color', '#b91c1c')\n\t\t\t\t\t\t.style('padding', '6px')\n\t\t\t\t\t\t.text(`Failed to render ${s.organism} \u00B7 ${s.isoform}: ${err?.message || err}`)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\trenderSidebar()\n\t\tawait renderRight()\n\t}\n}\n\n// Draws the brain \"sample distribution\" panel next to the cohort volcano, kept in\n// sync with it: the brain counts the exact samples the visible volcano dots represent,\n// and clicking a region hides the dots whose samples fall only in hidden regions.\nasync function renderBrainRegionSamplesPanel(holder: any, data: any, self: ProteinView, volcanoApi: VolcanoApi) {\n\tconst brConfig = self.app.vocabApi.termdbConfig?.queries?.proteome?.brainRegions\n\tif (!brConfig?.regions) return\n\tconst regions: { [code: string]: string } = brConfig.regions\n\tconst allRegionCodes = Object.keys(regions)\n\t// Global sample-id \u2192 region-code map (deduped, sent once by the proteome route).\n\tconst sampleRegionById: { [sid: string]: string } = data?.sampleRegions || {}\n\n\t// Each volcano dot is a proteome cohort entry carrying its own sample ids; a\n\t// sample's region is looked up in sampleRegionById. Driving the brain from these\n\t// (instead of a separate endpoint) makes the brain's counts match the volcano exactly.\n\tconst allDots: any[] = (data?.cohorts || []).filter((d: any) => Array.isArray(d.sampleIds) && d.sampleIds.length)\n\tif (!allDots.length) return\n\n\t// Created lazily on the first redraw so a stub volcano (no valid dots, hence no\n\t// visibility callback) doesn't leave an empty panel div behind.\n\tlet panel: any\n\n\t// Sentinel for samples that carry no configured brain-region annotation. Held\n\t// in hiddenRegions only by \"Show only\" (and cleared by \"Show all\"), so a dot\n\t// made up of unannotated samples is hidden when isolating a single region but\n\t// stays visible under a plain per-region Hide.\n\tconst NO_REGION = '__no_region__'\n\n\tconst hiddenRegions = new Set<string>()\n\t// Overwritten by the immediate onVisibilityChange fire below, before the first redraw.\n\tlet visibleDots: any[] = []\n\n\t// Count DISTINCT samples (case + control) per region across the given dots.\n\t// Distinct is required because isoform dots of one cohort share samples.\n\t// unmappedCount = distinct samples whose region isn't one of the configured\n\t// regions (so they're absent from the brain), surfaced as a legend note.\n\tconst countFromDots = (dotList: any[]) => {\n\t\tconst seen = new Set<string>()\n\t\tconst counts: { [code: string]: number } = {}\n\t\tfor (const code of allRegionCodes) counts[code] = 0\n\t\tlet totalSamples = 0\n\t\tfor (const dot of dotList) {\n\t\t\tfor (const sid of dot.sampleIds) {\n\t\t\t\tif (seen.has(sid)) continue\n\t\t\t\tseen.add(sid)\n\t\t\t\tconst code = sampleRegionById[sid]\n\t\t\t\tif (code && counts[code] !== undefined) {\n\t\t\t\t\tcounts[code]++\n\t\t\t\t\ttotalSamples++\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\treturn { counts, totalSamples, unmappedCount: seen.size - totalSamples }\n\t}\n\n\t// A cohort is hidden if every region its samples occupy is hidden. Collect\n\t// those cohort names to drive the volcano's external hide (the volcano hides\n\t// by cohort name). Region-pinned cohorts map to a single region, so hiding a\n\t// region hides exactly its cohorts.\n\tconst deriveHiddenCohorts = (): Set<string> => {\n\t\tconst hidden = new Set<string>()\n\t\tif (!hiddenRegions.size) return hidden\n\t\tconst regionsByCohort = new Map<string, Set<string>>()\n\t\tfor (const dot of allDots) {\n\t\t\tconst set = regionsByCohort.get(dot.cohortName) || new Set<string>()\n\t\t\tfor (const sid of dot.sampleIds) {\n\t\t\t\t// unannotated samples count as NO_REGION so \"Show only\" can hide them.\n\t\t\t\tset.add(sampleRegionById[sid] || NO_REGION)\n\t\t\t}\n\t\t\tregionsByCohort.set(dot.cohortName, set)\n\t\t}\n\t\tfor (const [cohort, set] of regionsByCohort) {\n\t\t\tif (!set.size) continue\n\t\t\tlet allHidden = true\n\t\t\tfor (const code of set) {\n\t\t\t\tif (!hiddenRegions.has(code)) {\n\t\t\t\t\tallHidden = false\n\t\t\t\t\tbreak\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (allHidden) hidden.add(cohort)\n\t\t}\n\t\treturn hidden\n\t}\n\n\t// Separate Menu so the click popup doesn't fight with hover tooltips.\n\tconst regionMenu = new Menu({ padding: '0px' })\n\n\tconst applyHiddenRegions = () => {\n\t\tvolcanoApi.setExternallyHiddenCohorts(deriveHiddenCohorts())\n\t}\n\n\tconst openRegionMenu = (code: string, event: MouseEvent) => {\n\t\tself.dom.tip.hide()\n\t\tregionMenu.clear()\n\t\tconst list = regionMenu.d.append('div').style('min-width', '140px').style('font-size', '13px')\n\t\tconst addItem = (label: string, action: () => void) => {\n\t\t\tlist\n\t\t\t\t.append('div')\n\t\t\t\t.style('padding', '6px 12px')\n\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t.style('user-select', 'none')\n\t\t\t\t.text(label)\n\t\t\t\t.on('mouseover', function (this: HTMLDivElement) {\n\t\t\t\t\tthis.style.background = '#f3f4f6'\n\t\t\t\t})\n\t\t\t\t.on('mouseout', function (this: HTMLDivElement) {\n\t\t\t\t\tthis.style.background = ''\n\t\t\t\t})\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tregionMenu.hide()\n\t\t\t\t\taction()\n\t\t\t\t})\n\t\t}\n\t\tconst isHidden = hiddenRegions.has(code)\n\t\tif (isHidden) {\n\t\t\taddItem(`Show ${code}`, () => {\n\t\t\t\thiddenRegions.delete(code)\n\t\t\t\tapplyHiddenRegions()\n\t\t\t})\n\t\t} else {\n\t\t\taddItem(`Hide ${code}`, () => {\n\t\t\t\thiddenRegions.add(code)\n\t\t\t\tapplyHiddenRegions()\n\t\t\t})\n\t\t}\n\t\taddItem(`Show only ${code}`, () => {\n\t\t\thiddenRegions.clear()\n\t\t\tfor (const r of allRegionCodes) if (r !== code) hiddenRegions.add(r)\n\t\t\t// also hide dots whose samples have no brain-region annotation\n\t\t\thiddenRegions.add(NO_REGION)\n\t\t\tapplyHiddenRegions()\n\t\t})\n\t\tif (hiddenRegions.size) {\n\t\t\taddItem('Show all', () => {\n\t\t\t\thiddenRegions.clear()\n\t\t\t\tapplyHiddenRegions()\n\t\t\t})\n\t\t}\n\t\tregionMenu.show(event.clientX, event.clientY)\n\t}\n\n\tconst redraw = async () => {\n\t\tif (!panel) panel = holder.append('div').style('margin-bottom', '14px')\n\t\tpanel.selectAll('*').remove()\n\t\tconst { counts, totalSamples, unmappedCount } = countFromDots(visibleDots)\n\t\tawait drawBrainRegionSamples(panel, {\n\t\t\tregions,\n\t\t\tcounts,\n\t\t\ttotalSamples,\n\t\t\tunmappedCount,\n\t\t\ttemplateUrl: brConfig.templateUrl,\n\t\t\tsvgUrl: brConfig.svgUrl,\n\t\t\ttip: self.dom.tip,\n\t\t\tonRegionClick: openRegionMenu,\n\t\t\t// A region with no visible-dot samples has count 0, which is exactly when it\n\t\t\t// should be dimmed \u2014 so no separate \"visible regions\" set is needed.\n\t\t\tisRegionDimmed: (code: string) => hiddenRegions.has(code) || (counts[code] ?? 0) === 0\n\t\t})\n\t}\n\n\t// Fires once immediately with the initial visible dots, then on every change.\n\tvolcanoApi.onVisibilityChange(({ dots }) => {\n\t\tvisibleDots = dots\n\t\tredraw()\n\t})\n}\n\nfunction renderCohortVolcano(holder: any, data: any, self: ProteinView) {\n\tconst dots: any[] = []\n\t// Global sample-id \u2192 region-code map (deduped, sent once by the proteome route).\n\tconst sampleRegionById: { [sid: string]: string } = data?.sampleRegions || {}\n\n\tfor (const cohortData of data?.cohorts || []) {\n\t\tconst log2fc = getLog2Ratio(cohortData.foldChange)\n\t\tconst pValue = Number(cohortData.pValue)\n\t\tconst testedN = Number(cohortData.testedN)\n\t\tconst controlN = Number(cohortData.controlN)\n\t\tif (log2fc === null || !Number.isFinite(pValue) || pValue <= 0) continue\n\t\tdots.push({\n\t\t\torganismName: cohortData.organism,\n\t\t\tdisease: cohortData.disease,\n\t\t\tassayName: cohortData.assayName,\n\t\t\tcohortName: cohortData.cohortName,\n\t\t\tPTMType: cohortData.PTMType,\n\t\t\tmodSites: cohortData.modSites,\n\t\t\tproteinAccession: cohortData.proteinAccession,\n\t\t\tuniqueIdentifier: cohortData.uniqueIdentifier,\n\t\t\tlog2fc,\n\t\t\tpValue,\n\t\t\tscore: -Math.log10(Math.max(pValue, 1e-300)),\n\t\t\ttestedN: Number.isFinite(testedN) ? testedN : 0,\n\t\t\tcontrolN: Number.isFinite(controlN) ? controlN : 0,\n\t\t\t// per-dot sample identity (case + control); each sample's region comes from the\n\t\t\t// response-level sampleRegions map, used to count brain-region samples that\n\t\t\t// exactly match the visible dots.\n\t\t\tsampleIds: Array.isArray(cohortData.sampleIds) ? cohortData.sampleIds : []\n\t\t})\n\t}\n\n\tconst panel = holder.append('div').style('margin-bottom', '14px')\n\tconst header = panel\n\t\t.append('div')\n\t\t.style('display', 'flex')\n\t\t.style('align-items', 'center')\n\t\t.style('gap', '6px')\n\t\t.style('margin-bottom', '6px')\n\n\tconst downloadBtn = header.append('div').style('display', 'inline-block')\n\n\theader.append('div').style('font-weight', 600).text('Sample Set Volcano')\n\n\tif (!dots.length) {\n\t\tdownloadBtn.style('display', 'none')\n\t\tpanel\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.85em')\n\t\t\t.style('color', '#666')\n\t\t\t.text('No cohorts with valid fold-change and p-value to plot.')\n\t\treturn { setExternallyHiddenCohorts() {}, onVisibilityChange() {} }\n\t}\n\n\tconst width = 500\n\tconst height = 480\n\tconst margin = { top: 20, right: 30, bottom: 60, left: 70 }\n\tconst innerW = width - margin.left - margin.right\n\tconst innerH = height - margin.top - margin.bottom\n\n\tlet minX = Number.POSITIVE_INFINITY\n\tlet maxX = Number.NEGATIVE_INFINITY\n\tlet maxY = 0\n\tlet maxTestedN = 0\n\tlet minTestedN = Number.POSITIVE_INFINITY\n\tfor (const p of dots) {\n\t\tminX = Math.min(minX, p.log2fc)\n\t\tmaxX = Math.max(maxX, p.log2fc)\n\t\tmaxY = Math.max(maxY, p.score)\n\t\tmaxTestedN = Math.max(maxTestedN, p.testedN)\n\t\tif (p.testedN > 0) minTestedN = Math.min(minTestedN, p.testedN)\n\t}\n\n\tif (maxY < 1) maxY = 1\n\tif (!Number.isFinite(minTestedN)) minTestedN = 1\n\n\tconst xSpan = Math.max(0.05, maxX - minX)\n\tconst xPad = Math.max(0.01, xSpan * 0.1)\n\tconst xMin = Math.min(0, minX - xPad)\n\tconst xMax = Math.max(0, maxX + xPad)\n\tconst yMax = maxY * 1.15\n\n\tconst xScale = scaleLinear().domain([xMin, xMax]).range([0, innerW])\n\tconst yScale = scaleLinear().domain([0, yMax]).range([innerH, 0])\n\tconst radiusRange: [number, number] = [4, 12]\n\tconst radiusScale = scaleLinear()\n\t\t.domain([minTestedN, Math.max(minTestedN + 1, maxTestedN)])\n\t\t.range(radiusRange)\n\tlet scaleDotSize = true\n\tconst getDotRadius = (d: any) =>\n\t\tscaleDotSize ? radiusScale(Math.max(minTestedN, d.testedN || minTestedN)) : (radiusRange[0] + radiusRange[1]) / 2\n\n\tconst organismNames = [...new Set(dots.map((d: any) => d.organismName).filter(Boolean))].sort() as string[]\n\tconst assayNames = [...new Set(dots.map((d: any) => d.assayName))].sort() as string[]\n\tconst cohortNames = [...new Set(dots.map((d: any) => d.cohortName))].sort() as string[]\n\tconst proteinAccessions = [...new Set(dots.map((d: any) => d.proteinAccession))].sort() as string[]\n\n\t// Create color scales for each grouping category\n\tconst organismColorScale = getColors(organismNames.length).domain(organismNames)\n\tconst assayColorScale = getColors(assayNames.length).domain(assayNames)\n\tconst cohortColorScale = getColors(cohortNames.length).domain(cohortNames)\n\tconst proteinColorScale = getColors(proteinAccessions.length).domain(proteinAccessions)\n\n\t// Store colors in maps\n\tconst organismColors = new Map<string, string>(\n\t\torganismNames.map(name => [name, rgb(organismColorScale(name)).formatHex()])\n\t)\n\tconst assayColors = new Map<string, string>(assayNames.map(name => [name, rgb(assayColorScale(name)).formatHex()]))\n\tconst cohortColors = new Map<string, string>(cohortNames.map(name => [name, rgb(cohortColorScale(name)).formatHex()]))\n\tconst proteinColors = new Map<string, string>(\n\t\tproteinAccessions.map(acc => [acc, rgb(proteinColorScale(acc)).formatHex()])\n\t)\n\n\t// Prioritize filled shapes first, then empty shapes\n\tconst prioritizedShapesArray = (() => {\n\t\tconst entries = Object.entries(shapes)\n\t\tconst sorted = [\n\t\t\t...entries.filter(([, s]) => s.isFilled === true),\n\t\t\t...entries.filter(([, s]) => s.isFilled === false),\n\t\t\t...entries.filter(([, s]) => !('isFilled' in s))\n\t\t]\n\t\treturn sorted.map(([, s]) => s.path)\n\t})()\n\n\tconst makeShapeMap = (items: string[]) =>\n\t\tnew Map<string, number>(items.map((item, i) => [item, i % prioritizedShapesArray.length]))\n\tconst organismShapes = makeShapeMap(organismNames)\n\tconst assayShapes = makeShapeMap(assayNames)\n\tconst cohortShapes = makeShapeMap(cohortNames)\n\tconst proteinShapes = makeShapeMap(proteinAccessions)\n\n\ttype ColorMode = 'organism' | 'assayType' | 'cohort' | 'proteinAccession'\n\ttype ShapeMode = 'organism' | 'assayType' | 'cohort' | 'proteinAccession'\n\n\tlet colorMode: ColorMode = 'assayType'\n\tlet shapeMode: ShapeMode = 'organism'\n\tconst customGroupPrefix = '__custom_group__:'\n\tconst makeCustomGroupKey = (name: string) => `${customGroupPrefix}${name}`\n\tconst isCustomGroupKey = (value: string) => value.startsWith(customGroupPrefix)\n\tconst getCustomGroupNameFromKey = (value: string) => value.slice(customGroupPrefix.length)\n\tconst customShapeGroupPrefix = '__custom_shape_group__:'\n\tconst makeCustomShapeGroupKey = (name: string) => `${customShapeGroupPrefix}${name}`\n\tconst isCustomShapeGroupKey = (value: string) => value.startsWith(customShapeGroupPrefix)\n\tconst getCustomShapeGroupNameFromKey = (value: string) => value.slice(customShapeGroupPrefix.length)\n\tconst customColorDomain = Array.from({ length: 64 }, (_, i) => `custom-${i}`)\n\tconst customColorScale = getColors(customColorDomain.length).domain(customColorDomain)\n\tconst colorModesWithGroups: ColorMode[] = ['organism', 'assayType', 'cohort', 'proteinAccession']\n\tconst shapeModesWithGroups: ShapeMode[] = ['organism', 'assayType', 'cohort', 'proteinAccession']\n\tconst createModeMap = <T>(factory: () => T) => ({\n\t\torganism: factory(),\n\t\tassayType: factory(),\n\t\tcohort: factory(),\n\t\tproteinAccession: factory()\n\t})\n\tconst customGroupsByMode = createModeMap(() => new Map<string, Set<string>>())\n\tconst customGroupColorsByMode = createModeMap(() => new Map<string, string>())\n\tconst customShapeGroupsByMode = createModeMap(() => new Map<string, Set<string>>())\n\tconst customShapeIndicesByMode = createModeMap(() => new Map<string, number>())\n\tconst checkedItemsByMode = createModeMap(() => new Set<string>())\n\tconst checkedShapeItemsByMode = createModeMap(() => new Set<string>())\n\tconst groupingModeActive = new Set<ColorMode>()\n\tconst shapeGroupingModeActive = new Set<ShapeMode>()\n\tlet customColorSeed = 0\n\n\tconst getBaseColorValue = (d: any, mode: ColorMode) => {\n\t\tswitch (mode) {\n\t\t\tcase 'organism':\n\t\t\t\treturn d.organismName\n\t\t\tcase 'assayType':\n\t\t\t\treturn d.assayName\n\t\t\tcase 'cohort':\n\t\t\t\treturn d.cohortName\n\t\t\tcase 'proteinAccession':\n\t\t\t\treturn d.proteinAccession\n\t\t\tdefault:\n\t\t\t\treturn ''\n\t\t}\n\t}\n\tconst getCustomGroupOfValue = (mode: ColorMode, value: string) => {\n\t\tfor (const [group, members] of customGroupsByMode[mode]) {\n\t\t\tif (members.has(value)) return group\n\t\t}\n\t\treturn null\n\t}\n\tconst getCustomGroupOfDot = (d: any, mode: ColorMode) => {\n\t\treturn getCustomGroupOfValue(mode, getBaseColorValue(d, mode))\n\t}\n\tconst getCustomShapeGroupOfValue = (mode: ShapeMode, value: string) => {\n\t\tfor (const [group, members] of customShapeGroupsByMode[mode]) {\n\t\t\tif (members.has(value)) return group\n\t\t}\n\t\treturn null\n\t}\n\tconst getCustomShapeGroupOfDot = (d: any, mode: ShapeMode) => {\n\t\treturn getCustomShapeGroupOfValue(mode, getBaseColorValue(d, mode))\n\t}\n\tconst getNextCustomColor = () => {\n\t\tconst color = rgb(customColorScale(customColorDomain[customColorSeed % customColorDomain.length])).formatHex()\n\t\tcustomColorSeed++\n\t\treturn color\n\t}\n\tconst addOrUpdateCustomGroup = (mode: ColorMode, name: string, baseValues: string[]) => {\n\t\tif (!name || !baseValues.length) return\n\t\tfor (const members of customGroupsByMode[mode].values()) {\n\t\t\tfor (const val of baseValues) members.delete(val)\n\t\t}\n\t\tconst existing = customGroupsByMode[mode].get(name) || new Set<string>()\n\t\tfor (const val of baseValues) existing.add(val)\n\t\tcustomGroupsByMode[mode].set(name, existing)\n\t\tif (!customGroupColorsByMode[mode].has(name)) customGroupColorsByMode[mode].set(name, getNextCustomColor())\n\t}\n\tconst removeCustomGroup = (mode: ColorMode, name: string) => {\n\t\tcustomGroupsByMode[mode].delete(name)\n\t\tcustomGroupColorsByMode[mode].delete(name)\n\t\thiddenColor[mode].delete(makeCustomGroupKey(name))\n\t}\n\tconst addOrUpdateCustomShapeGroup = (mode: ShapeMode, name: string, baseValues: string[]) => {\n\t\tif (!name || !baseValues.length) return\n\t\tfor (const members of customShapeGroupsByMode[mode].values()) {\n\t\t\tfor (const val of baseValues) members.delete(val)\n\t\t}\n\t\tconst existing = customShapeGroupsByMode[mode].get(name) || new Set<string>()\n\t\tfor (const val of baseValues) existing.add(val)\n\t\tcustomShapeGroupsByMode[mode].set(name, existing)\n\t\tif (!customShapeIndicesByMode[mode].has(name)) {\n\t\t\tconst idx = customShapeIndicesByMode[mode].size % prioritizedShapesArray.length\n\t\t\tcustomShapeIndicesByMode[mode].set(name, idx)\n\t\t}\n\t}\n\tconst removeCustomShapeGroup = (mode: ShapeMode, name: string) => {\n\t\tcustomShapeGroupsByMode[mode].delete(name)\n\t\tcustomShapeIndicesByMode[mode].delete(name)\n\t\thiddenShape[mode].delete(makeCustomShapeGroupKey(name))\n\t}\n\tconst getCustomGroupItems = (mode: ColorMode) => {\n\t\treturn [...customGroupsByMode[mode].keys()].sort().map(name => makeCustomGroupKey(name))\n\t}\n\tconst getCustomShapeGroupItems = (mode: ShapeMode) => {\n\t\treturn [...customShapeGroupsByMode[mode].keys()].sort().map(name => makeCustomShapeGroupKey(name))\n\t}\n\tconst getLegendItemSampleCount = (mode: ColorMode | ShapeMode, item: string, dotsToCount: any[] = dots) => {\n\t\tif (isCustomGroupKey(item)) {\n\t\t\tconst groupName = getCustomGroupNameFromKey(item)\n\t\t\treturn dotsToCount.filter(\n\t\t\t\td => getCustomGroupOfValue(mode as ColorMode, getBaseColorValue(d, mode as ColorMode)) === groupName\n\t\t\t).length\n\t\t}\n\n\t\tif (isCustomShapeGroupKey(item)) {\n\t\t\tconst groupName = getCustomShapeGroupNameFromKey(item)\n\t\t\treturn dotsToCount.filter(\n\t\t\t\td => getCustomShapeGroupOfValue(mode as ShapeMode, getBaseColorValue(d, mode as ColorMode)) === groupName\n\t\t\t).length\n\t\t}\n\n\t\treturn dotsToCount.filter(d => getBaseColorValue(d, mode as ColorMode) === item).length\n\t}\n\tconst getColor = (d: any) => {\n\t\tconst customGroup = getCustomGroupOfDot(d, colorMode)\n\t\tswitch (colorMode) {\n\t\t\tcase 'organism':\n\t\t\t\tif (customGroup) return customGroupColorsByMode[colorMode].get(customGroup) ?? '#888'\n\t\t\t\treturn organismColors.get(d.organismName) ?? '#888'\n\t\t\tcase 'assayType':\n\t\t\t\tif (customGroup) return customGroupColorsByMode[colorMode].get(customGroup) ?? '#888'\n\t\t\t\treturn assayColors.get(d.assayName) ?? '#888'\n\t\t\tcase 'cohort':\n\t\t\t\tif (customGroup) return customGroupColorsByMode[colorMode].get(customGroup) ?? '#888'\n\t\t\t\treturn cohortColors.get(d.cohortName) ?? '#888'\n\t\t\tcase 'proteinAccession':\n\t\t\t\tif (customGroup) return customGroupColorsByMode[colorMode].get(customGroup) ?? '#888'\n\t\t\t\treturn proteinColors.get(d.proteinAccession) ?? '#888'\n\t\t\tdefault:\n\t\t\t\treturn '#888'\n\t\t}\n\t}\n\tconst getShapeIndex = (d: any) => {\n\t\tconst customShapeGroup = getCustomShapeGroupOfDot(d, shapeMode)\n\t\tif (customShapeGroup) {\n\t\t\treturn customShapeIndicesByMode[shapeMode].get(customShapeGroup) ?? 0\n\t\t}\n\t\tswitch (shapeMode) {\n\t\t\tcase 'organism':\n\t\t\t\treturn organismShapes.get(d.organismName) ?? 0\n\t\t\tcase 'assayType':\n\t\t\t\treturn assayShapes.get(d.assayName) ?? 0\n\t\t\tcase 'cohort':\n\t\t\t\treturn cohortShapes.get(d.cohortName) ?? 0\n\t\t\tcase 'proteinAccession':\n\t\t\t\treturn proteinShapes.get(d.proteinAccession) ?? 0\n\t\t\tdefault:\n\t\t\t\treturn 0\n\t\t}\n\t}\n\tconst getShapePath = (d: any) => {\n\t\tconst index = getShapeIndex(d) % prioritizedShapesArray.length\n\t\treturn prioritizedShapesArray[index]\n\t}\n\tconst getShapeTransform = (d: any, sizeScale = 1) => {\n\t\tconst r = getDotRadius(d) * sizeScale\n\t\tconst scale = r / 8\n\t\tconst x = xScale(d.log2fc) - 8 * scale\n\t\tconst y = yScale(d.score) - 8 * scale\n\t\treturn `translate(${x},${y}) scale(${scale})`\n\t}\n\tconst colorGroupingModes: Array<{ key: ColorMode; label: string }> = [\n\t\t{ key: 'organism', label: 'Organism' },\n\t\t{ key: 'assayType', label: 'Assay' },\n\t\t{ key: 'cohort', label: 'Sample Set' },\n\t\t{ key: 'proteinAccession', label: 'Isoform' }\n\t]\n\tconst shapeGroupingModes: Array<{ key: ShapeMode; label: string }> = [\n\t\t{ key: 'organism', label: 'Organism' },\n\t\t{ key: 'assayType', label: 'Assay' },\n\t\t{ key: 'cohort', label: 'Sample Set' },\n\t\t{ key: 'proteinAccession', label: 'Isoform' }\n\t]\n\tconst makeHiddenState = () => ({\n\t\torganism: new Set<string>(),\n\t\tassayType: new Set<string>(),\n\t\tcohort: new Set<string>(),\n\t\tproteinAccession: new Set<string>()\n\t})\n\tconst hiddenColor = makeHiddenState()\n\tconst hiddenShape = makeHiddenState()\n\t// Cohorts hidden by an external driver (the brain plot). Kept separate from\n\t// hiddenColor so manual hide/show in the legend doesn't fight with it.\n\tlet externalHiddenCohorts: Set<string> = new Set()\n\tconst visibilityChangeListeners: ((v: { dots: any[] }) => void)[] = []\n\tconst getColorValueByMode = (d: any, mode: ColorMode) => {\n\t\tswitch (mode) {\n\t\t\tcase 'organism':\n\t\t\t\treturn getCustomGroupOfDot(d, mode)\n\t\t\t\t\t? makeCustomGroupKey(getCustomGroupOfDot(d, mode) as string)\n\t\t\t\t\t: d.organismName\n\t\t\tcase 'assayType':\n\t\t\t\treturn getCustomGroupOfDot(d, mode) ? makeCustomGroupKey(getCustomGroupOfDot(d, mode) as string) : d.assayName\n\t\t\tcase 'cohort':\n\t\t\t\treturn getCustomGroupOfDot(d, mode) ? makeCustomGroupKey(getCustomGroupOfDot(d, mode) as string) : d.cohortName\n\t\t\tcase 'proteinAccession':\n\t\t\t\treturn getCustomGroupOfDot(d, mode)\n\t\t\t\t\t? makeCustomGroupKey(getCustomGroupOfDot(d, mode) as string)\n\t\t\t\t\t: d.proteinAccession\n\t\t\tdefault:\n\t\t\t\treturn ''\n\t\t}\n\t}\n\tconst getShapeValueByMode = (d: any, mode: ShapeMode) => {\n\t\tswitch (mode) {\n\t\t\tcase 'organism':\n\t\t\t\treturn getCustomShapeGroupOfDot(d, mode)\n\t\t\t\t\t? makeCustomShapeGroupKey(getCustomShapeGroupOfDot(d, mode) as string)\n\t\t\t\t\t: d.organismName\n\t\t\tcase 'assayType':\n\t\t\t\treturn getCustomShapeGroupOfDot(d, mode)\n\t\t\t\t\t? makeCustomShapeGroupKey(getCustomShapeGroupOfDot(d, mode) as string)\n\t\t\t\t\t: d.assayName\n\t\t\tcase 'cohort':\n\t\t\t\treturn getCustomShapeGroupOfDot(d, mode)\n\t\t\t\t\t? makeCustomShapeGroupKey(getCustomShapeGroupOfDot(d, mode) as string)\n\t\t\t\t\t: d.cohortName\n\t\t\tcase 'proteinAccession':\n\t\t\t\treturn getCustomShapeGroupOfDot(d, mode)\n\t\t\t\t\t? makeCustomShapeGroupKey(getCustomShapeGroupOfDot(d, mode) as string)\n\t\t\t\t\t: d.proteinAccession\n\t\t\tdefault:\n\t\t\t\treturn ''\n\t\t}\n\t}\n\tconst isDotHidden = (d: any) => {\n\t\tconst colorValue = getColorValueByMode(d, colorMode)\n\t\tconst shapeValue = getShapeValueByMode(d, shapeMode)\n\t\treturn (\n\t\t\thiddenColor[colorMode].has(colorValue) ||\n\t\t\thiddenShape[shapeMode].has(shapeValue) ||\n\t\t\texternalHiddenCohorts.has(d.cohortName)\n\t\t)\n\t}\n\tconst getDotDistancePx = (d1: any, d2: any) => {\n\t\tconst x = xScale(d1.log2fc) - xScale(d2.log2fc)\n\t\tconst y = yScale(d1.score) - yScale(d2.score)\n\t\treturn Math.sqrt(x * x + y * y)\n\t}\n\tconst getVisibleDots = () => dots.filter(d => !isDotHidden(d))\n\tconst getVisibleTestedNStats = () => {\n\t\tconst visibleDots = getVisibleDots()\n\t\tif (!visibleDots.length) {\n\t\t\treturn { domainMin: 1, domainMax: 2, minLabel: 0, maxLabel: 0 }\n\t\t}\n\n\t\tlet visibleMax = 0\n\t\tlet visibleMin = Number.POSITIVE_INFINITY\n\t\tfor (const d of visibleDots) {\n\t\t\tvisibleMax = Math.max(visibleMax, d.testedN)\n\t\t\tif (d.testedN > 0) visibleMin = Math.min(visibleMin, d.testedN)\n\t\t}\n\n\t\tif (!Number.isFinite(visibleMin)) visibleMin = 1\n\t\tconst domainMax = Math.max(visibleMin + 1, visibleMax)\n\t\treturn { domainMin: visibleMin, domainMax, minLabel: visibleMin, maxLabel: visibleMax || visibleMin }\n\t}\n\tconst updateRadiusScaleForVisibleDots = () => {\n\t\tconst stats = getVisibleTestedNStats()\n\t\tradiusScale.domain([stats.domainMin, stats.domainMax]).range(radiusRange)\n\t\treturn stats\n\t}\n\tconst getClusterDots = (seed: any) => {\n\t\tconst thresholdPx = 5\n\t\treturn dots\n\t\t\t.filter(d => !isDotHidden(d) && getDotDistancePx(d, seed) < thresholdPx)\n\t\t\t.sort((a, b) => getDotDistancePx(a, seed) - getDotDistancePx(b, seed))\n\t}\n\tconst buildClusterTableData = (clusterDots: any[]): { columns: any[]; rows: any[] } => {\n\t\t// Union semantics: PTM dots and non-PTM dots have different attribute\n\t\t// keys (PTM Type, Modified Site, PTM identifier vs Isoform identifier),\n\t\t// so include any column whose underlying field is present on at least\n\t\t// one row in the cluster. Cells for rows that don't have that field\n\t\t// render as blank.\n\t\tconst hasPtm = clusterDots.some(d => d.PTMType)\n\t\tconst hasNonPtm = clusterDots.some(d => !d.PTMType)\n\t\tconst hasModSites = clusterDots.some(d => d.modSites)\n\n\t\tconst columns: any[] = [{ label: 'Organism' }, { label: 'Assay' }, { label: 'Sample Set' }]\n\t\tif (hasPtm) columns.push({ label: 'PTM Type' })\n\t\tif (hasModSites) columns.push({ label: 'Modified Site' })\n\t\tif (hasPtm) columns.push({ label: 'PTM' })\n\t\tif (hasNonPtm) columns.push({ label: 'Isoform' })\n\t\tcolumns.push({ label: 'log\u2082(FC)', sortable: true }, { label: 'p-value', sortable: true })\n\n\t\tconst rows = clusterDots.map(d => {\n\t\t\tconst isPtm = !!d.PTMType\n\t\t\tconst row: any[] = [{ value: d.organismName || '' }, { value: d.assayName || '' }, { value: d.cohortName || '' }]\n\t\t\tif (hasPtm) row.push({ value: isPtm ? d.PTMType || '' : '' })\n\t\t\tif (hasModSites) row.push({ value: d.modSites || '' })\n\t\t\tif (hasPtm) row.push({ value: isPtm ? d.uniqueIdentifier || '' : '' })\n\t\t\tif (hasNonPtm) row.push({ value: !isPtm ? d.uniqueIdentifier || '' : '' })\n\t\t\trow.push({ value: roundValue(d.log2fc, 3) }, { value: d.pValue.toExponential(2) })\n\t\t\treturn row\n\t\t})\n\t\treturn { columns, rows }\n\t}\n\n\tconst updateDots = () => {\n\t\tcohortDots\n\t\t\t.attr('fill', (d: any) => getColor(d))\n\t\t\t.attr('stroke', (d: any) => getColor(d))\n\t\t\t.attr('stroke-width', 1)\n\t\t\t.attr('d', (d: any) => getShapePath(d))\n\t\t\t.attr('transform', (d: any) => getShapeTransform(d))\n\t\t\t.style('opacity', (d: any) => (isDotHidden(d) ? 0 : 1))\n\t\t\t.style('pointer-events', (d: any) => (isDotHidden(d) ? 'none' : 'auto'))\n\t}\n\tconst getShapeMapInUse = () => {\n\t\tswitch (shapeMode) {\n\t\t\tcase 'organism':\n\t\t\t\treturn organismShapes\n\t\t\tcase 'assayType':\n\t\t\t\treturn assayShapes\n\t\t\tcase 'cohort':\n\t\t\t\treturn cohortShapes\n\t\t\tcase 'proteinAccession':\n\t\t\t\treturn proteinShapes\n\t\t\tdefault:\n\t\t\t\treturn assayShapes\n\t\t}\n\t}\n\n\tconst plotAndLegend = panel\n\t\t.append('div')\n\t\t.style('display', 'flex')\n\t\t.style('align-items', 'flex-start')\n\t\t.style('gap', '4px')\n\t\t.style('flex-wrap', 'wrap')\n\n\tconst svg = plotAndLegend\n\t\t.append('svg')\n\t\t.attr('width', width)\n\t\t.attr('height', height)\n\t\t.style('display', 'block')\n\t\t.style('max-width', '100%')\n\t\t.style('height', 'auto')\n\tconst g = svg.append('g').attr('transform', `translate(${margin.left},${margin.top})`)\n\n\tconst xAxis = g.append('g').attr('transform', `translate(0,${innerH})`).call(axisBottom(xScale))\n\taxisstyle({ axis: xAxis, color: 'black', showline: true })\n\n\tconst yAxis = g.append('g').call(axisLeft(yScale))\n\taxisstyle({ axis: yAxis, color: 'black', showline: true })\n\n\tconst x0 = xScale(0)\n\tconst pThreshold = -Math.log10(0.05)\n\tconst thresholdY = yScale(Math.min(yMax, pThreshold))\n\n\t// Guide lines\n\tg.append('line')\n\t\t.attr('x1', x0)\n\t\t.attr('x2', x0)\n\t\t.attr('y1', 0)\n\t\t.attr('y2', innerH)\n\t\t.attr('stroke', 'black')\n\t\t.attr('stroke-dasharray', '5 4')\n\t\t.attr('stroke-opacity', 0.4)\n\n\tg.append('line')\n\t\t.attr('x1', 0)\n\t\t.attr('x2', innerW)\n\t\t.attr('y1', thresholdY)\n\t\t.attr('y2', thresholdY)\n\t\t.attr('stroke', 'black')\n\t\t.attr('stroke-dasharray', '5 4')\n\t\t.attr('stroke-opacity', 0.4)\n\n\t// Axis labels\n\tg.append('text')\n\t\t.attr('x', innerW / 2)\n\t\t.attr('y', innerH + 44)\n\t\t.attr('text-anchor', 'middle')\n\t\t.style('font-weight', 600)\n\t\t.text('log2 fold change (disease / control)')\n\n\tg.append('text')\n\t\t.attr('transform', `translate(${-50},${innerH / 2}) rotate(-90)`)\n\t\t.attr('text-anchor', 'middle')\n\t\t.style('font-weight', 600)\n\t\t.text('-log10(p-value)')\n\n\t// Points\n\tconst cohortDots = g\n\t\t.selectAll('path.cohort-dot')\n\t\t.data(dots)\n\t\t.enter()\n\t\t.append('path')\n\t\t.attr('class', 'cohort-dot')\n\t\t.attr('transform', (d: any) => getShapeTransform(d, 0.9))\n\t\t.attr('d', (d: any) => getShapePath(d))\n\t\t.attr('fill', (d: any) => getColor(d))\n\t\t.attr('fill-opacity', 0.5)\n\t\t.attr('stroke', (d: any) => getColor(d))\n\t\t.attr('stroke-width', 1)\n\t\t.attr('vector-effect', 'non-scaling-stroke')\n\n\tcohortDots\n\t\t.transition()\n\t\t.duration(350)\n\t\t.attr('d', (d: any) => getShapePath(d))\n\t\t.attr('transform', (d: any) => getShapeTransform(d, 1))\n\n\t// Hover-ring layer \u2014 visual only, never intercepts mouse events.\n\tconst hoverLayer = g.append('g').attr('class', 'cohort-volcano-hover').style('pointer-events', 'none')\n\n\t// Cover rect \u2014 last child so it sits on top of dots and hover shapes.\n\tconst cover = g\n\t\t.append('rect')\n\t\t.attr('class', 'cohort-volcano-cover')\n\t\t.attr('x', 0)\n\t\t.attr('y', 0)\n\t\t.attr('width', innerW)\n\t\t.attr('height', innerH)\n\t\t.attr('fill', 'transparent')\n\t\t.style('pointer-events', 'all')\n\t\t.style('cursor', 'default')\n\n\tupdateDots()\n\n\tconst renderDotInfoTable = (d: any, container: any) => {\n\t\tconst tbl = table2col({ holder: container.append('table') })\n\t\ttbl.addRow('Organism', d.organismName)\n\t\ttbl.addRow('Disease', d.disease)\n\t\ttbl.addRow('Assay', d.assayName)\n\t\ttbl.addRow('Sample Set', d.cohortName)\n\t\t// Distinct brain regions the dot's samples come from (names when configured).\n\t\tconst dotRegions = [\n\t\t\t...new Set((d.sampleIds || []).map((sid: string) => sampleRegionById[sid]).filter(Boolean))\n\t\t] as string[]\n\t\tif (dotRegions.length) {\n\t\t\tconst regionNames = self.app.vocabApi.termdbConfig?.queries?.proteome?.brainRegions?.regions || {}\n\t\t\ttbl.addRow(\n\t\t\t\t'Brain Region',\n\t\t\t\tdotRegions\n\t\t\t\t\t.sort()\n\t\t\t\t\t.map(c => (regionNames[c] ? `${regionNames[c]} (${c})` : c))\n\t\t\t\t\t.join(', ')\n\t\t\t)\n\t\t}\n\t\ttbl.addRow('Protein Accession', d.proteinAccession)\n\t\tif (d.PTMType) {\n\t\t\ttbl.addRow('PTM Type', d.PTMType)\n\t\t\ttbl.addRow('Modified Site', d.modSites)\n\t\t\ttbl.addRow('PTM', d.uniqueIdentifier)\n\t\t} else {\n\t\t\ttbl.addRow('Isoform', d.uniqueIdentifier)\n\t\t}\n\t\ttbl.addRow('log2 fold change', roundValue(d.log2fc, 3))\n\t\ttbl.addRow('p value', d.pValue.toExponential(2))\n\t\ttbl.addRow('-log10(p)', roundValue(d.score, 3))\n\t\ttbl.addRow('Case samples', d.testedN)\n\t\ttbl.addRow('Control samples', d.controlN)\n\t}\n\n\tconst interactions = new DataPointInteractions<any>({\n\t\tcover,\n\t\thoverLayer,\n\t\thoverTip: self.dom.tip,\n\t\tpoints: dots,\n\t\tgetX: (d: any) => xScale(d.log2fc),\n\t\tgetY: (d: any) => yScale(d.score),\n\t\t// Function form because the size-legend menu mutates radiusRange at runtime;\n\t\t// caching this once would leave the broad-query stale after dots are enlarged.\n\t\thitRadius: () => radiusRange[1] + COHORT_VOLCANO_HIT_RADIUS_PADDING_PX,\n\t\tperDotRadius: (d: any) => getDotRadius(d),\n\t\tperDotBuffer: COHORT_VOLCANO_HIT_BUFFER_PX,\n\t\tisHidden: isDotHidden,\n\t\tgetCluster: (seed: any) => getClusterDots(seed),\n\t\ttoHoverSpec: (d: any) => ({\n\t\t\tpath: getShapePath(d),\n\t\t\ttransform: getShapeTransform(d, COHORT_VOLCANO_HOVER_RING_SIZE_SCALE),\n\t\t\tstroke: 'black',\n\t\t\tstrokeWidth: COHORT_VOLCANO_HOVER_RING_STROKE_PX\n\t\t}),\n\t\tmaxTooltipRows: COHORT_VOLCANO_HOVER_MAX_COHORTS,\n\t\titemNoun: 'cohort',\n\t\trenderSingleHoverTooltip: renderDotInfoTable,\n\t\tbuildMultiHitTableData: buildClusterTableData,\n\t\tgetActions: (d: any) => [\n\t\t\t{\n\t\t\t\tlabel: 'Violin plot',\n\t\t\t\tonClick: () => {\n\t\t\t\t\tlaunchViolinPlot(self, d.organismName, d.assayName, d.cohortName, d.uniqueIdentifier)\n\t\t\t\t}\n\t\t\t}\n\t\t],\n\t\trenderSingleHitInfo: renderDotInfoTable,\n\t\tgetRowKey: (d: any) => d.uniqueIdentifier\n\t})\n\n\tinteractions.attach()\n\n\tconst legend = plotAndLegend\n\t\t.append('div')\n\t\t.style('margin', '0')\n\t\t.style('min-width', '220px')\n\t\t.style('font-size', '.75em')\n\t\t.style('color', '#374151')\n\tfunction renderSizeLegend() {\n\t\tlegendSvg.selectAll('*').remove()\n\t\tconst stats = updateRadiusScaleForVisibleDots()\n\n\t\tnew LegendCircleReference({\n\t\t\tg: legendSvg.append('g').attr('transform', 'translate(12, 8)'),\n\t\t\tinputMax: radiusRange[1],\n\t\t\tinputMin: radiusRange[0],\n\t\t\tmaxLabel: stats.maxLabel,\n\t\t\tmaxRadius: radiusScale(stats.domainMax),\n\t\t\tminLabel: stats.minLabel,\n\t\t\tminRadius: radiusScale(stats.domainMin),\n\t\t\ttitle: '',\n\t\t\tmenu: {\n\t\t\t\tminMaxLabel: 'pixels',\n\t\t\t\tcallback: async (obj: { min: number; max: number }) => {\n\t\t\t\t\tradiusRange[0] = obj.min\n\t\t\t\t\tradiusRange[1] = obj.max\n\t\t\t\t\tradiusScale.range([obj.min, obj.max])\n\t\t\t\t\tupdateDots()\n\t\t\t\t\trenderSizeLegend()\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\tconst refreshAfterVisibilityChange = () => {\n\t\tupdateRadiusScaleForVisibleDots()\n\t\tupdateDots()\n\t\trenderColorLegend()\n\t\trenderSizeLegend()\n\t\tif (visibilityChangeListeners.length) {\n\t\t\tconst visibleDots = getVisibleDots()\n\t\t\tfor (const cb of visibilityChangeListeners) cb({ dots: visibleDots })\n\t\t}\n\t}\n\n\tconst termName = self.state.config?.tw?.term?.name || ''\n\tconst svgName = `${termName}.cohort-volcano`\n\tconst downloadVolcanoSvg = () => {\n\t\tconst plotNode = svg.node()\n\t\tconst legendNode = legend.node()\n\t\tif (!plotNode) return\n\n\t\tconst plotWidth = width\n\t\tconst plotHeight = height\n\t\tconst legendRect = legendNode?.getBoundingClientRect()\n\t\tconst legendWidth = Math.max(220, Math.ceil(legendRect?.width || 220))\n\t\tconst legendHeight = Math.max(plotHeight, Math.ceil(legendRect?.height || 0))\n\t\tconst gap = 14\n\n\t\tconst combinedSvg = select(creator('svg').call(document.documentElement) as SVGSVGElement)\n\t\t\t.attr('width', plotWidth + gap + legendWidth)\n\t\t\t.attr('height', legendHeight)\n\n\t\tcombinedSvg.append(() => plotNode.cloneNode(true) as SVGSVGElement)\n\n\t\tcombinedSvg\n\t\t\t.append('foreignObject')\n\t\t\t.attr('x', plotWidth + gap)\n\t\t\t.attr('y', 0)\n\t\t\t.attr('width', legendWidth)\n\t\t\t.attr('height', legendHeight)\n\t\t\t.append(() => {\n\t\t\t\tconst clone = legendNode!.cloneNode(true) as HTMLDivElement\n\t\t\t\tclone.style.margin = '0px'\n\t\t\t\tclone.style.minWidth = '0px'\n\t\t\t\treturn clone\n\t\t\t})\n\n\t\tto_svg(combinedSvg.node()!, svgName, { apply_dom_styles: true })\n\t}\n\tcontrolIcons.download(downloadBtn, { handler: downloadVolcanoSvg, title: 'Download' })\n\n\tconst colorLegendDiv = legend.append('div').style('margin-bottom', '12px')\n\tconst shapeLegendDiv = legend.append('div').style('margin-bottom', '12px')\n\tconst sizeLegendRow = legend\n\t\t.append('div')\n\t\t.style('display', 'flex')\n\t\t.style('flex-direction', 'column')\n\t\t.style('gap', '6px')\n\t\t.style('margin-top', '8px')\n\n\tsizeLegendRow.append('div').style('border-top', '1px solid #e5e7eb').style('margin', '8px 0 8px 0')\n\n\tconst sizeModeRow = sizeLegendRow\n\t\t.append('div')\n\t\t.style('display', 'flex')\n\t\t.style('align-items', 'center')\n\t\t.style('gap', '4px')\n\t\t.style('flex-wrap', 'wrap')\n\n\tconst sizeToggleCheckbox = sizeModeRow\n\t\t.append('input')\n\t\t.attr('type', 'checkbox')\n\t\t.attr('aria-label', 'Scale dot size by case sample size')\n\t\t.property('checked', scaleDotSize)\n\t\t.style('cursor', 'pointer')\n\t\t.style('margin', '0')\n\t\t.on('change', function (this: HTMLInputElement) {\n\t\t\tscaleDotSize = this.checked\n\t\t\tsizeModeText.style('opacity', scaleDotSize ? 1 : 0.4)\n\t\t\tlegendSvg.style('opacity', scaleDotSize ? 1 : 0.4)\n\t\t\tupdateDots()\n\t\t\trenderSizeLegend()\n\t\t})\n\tvoid sizeToggleCheckbox\n\n\tconst sizeModeText = sizeModeRow.append('span').style('display', 'inline-flex').style('gap', '6px')\n\tsizeModeText.append('span').text('Scale by')\n\tsizeModeText\n\t\t.append('span')\n\t\t.text('Case sample size')\n\t\t.style('font-weight', '600')\n\t\t.style('text-decoration', 'underline')\n\t\t.style('color', '#111')\n\tsizeModeText.style('opacity', scaleDotSize ? 1 : 0.4)\n\n\tconst legendSvg = sizeLegendRow.append('svg').attr('width', 190).attr('height', 110).style('display', 'block')\n\tlegendSvg.style('opacity', scaleDotSize ? 1 : 0.4)\n\n\tfunction renderColorLegend() {\n\t\tcolorLegendDiv.selectAll('*').remove()\n\t\tshapeLegendDiv.selectAll('*').remove()\n\n\t\tconst setCreateButtonState = (\n\t\t\tcontainer: any,\n\t\t\tisActive: boolean,\n\t\t\tinputSelector: string,\n\t\t\tbuttonSelector: string,\n\t\t\thasCheckedItems: boolean\n\t\t) => {\n\t\t\tif (!isActive) return\n\t\t\tconst inputNode = container.select(inputSelector).node() as HTMLInputElement | null\n\t\t\tconst createBtn = container.select(buttonSelector)\n\t\t\tif (!inputNode || createBtn.empty()) return\n\t\t\tconst shouldDisable = !inputNode.value.trim() || !hasCheckedItems\n\t\t\tcreateBtn\n\t\t\t\t.property('disabled', shouldDisable)\n\t\t\t\t.style('opacity', shouldDisable ? '0.5' : '1')\n\t\t\t\t.style('cursor', shouldDisable ? 'not-allowed' : 'pointer')\n\t\t}\n\n\t\tconst updateColorCreateButtonState = () => {\n\t\t\tsetCreateButtonState(\n\t\t\t\tcolorLegendDiv,\n\t\t\t\tgroupingModeActive.has(colorMode),\n\t\t\t\t'input[data-role=\"custom-group-name\"]',\n\t\t\t\t'button[data-role=\"create-custom-group-submit\"]',\n\t\t\t\tcheckedItemsByMode[colorMode].size > 0\n\t\t\t)\n\t\t}\n\n\t\tconst updateShapeCreateButtonState = () => {\n\t\t\tsetCreateButtonState(\n\t\t\t\tshapeLegendDiv,\n\t\t\t\tshapeGroupingModeActive.has(shapeMode),\n\t\t\t\t'input[data-role=\"custom-shape-group-name\"]',\n\t\t\t\t'button[data-role=\"create-custom-shape-group-submit\"]',\n\t\t\t\tcheckedShapeItemsByMode[shapeMode].size > 0\n\t\t\t)\n\t\t}\n\n\t\tconst modeRow = colorLegendDiv\n\t\t\t.append('div')\n\t\t\t.style('display', 'flex')\n\t\t\t.style('gap', '10px')\n\t\t\t.style('margin-bottom', '6px')\n\t\t\t.style('flex-wrap', 'wrap')\n\n\t\tmodeRow.append('span').text('Color by')\n\n\t\tfor (const { key, label } of colorGroupingModes) {\n\t\t\tmodeRow\n\t\t\t\t.append('span')\n\t\t\t\t.text(label)\n\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t.style('font-weight', key === colorMode ? '600' : '400')\n\t\t\t\t.style('text-decoration', key === colorMode ? 'underline' : 'none')\n\t\t\t\t.style('color', key === colorMode ? '#111' : '#6b7280')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tgroupingModeActive.delete(colorMode)\n\t\t\t\t\tcheckedItemsByMode[colorMode].clear()\n\t\t\t\t\tcolorMode = key\n\t\t\t\t\trefreshAfterVisibilityChange()\n\t\t\t\t})\n\t\t}\n\n\t\tconst makeLegendItems = (items: string[], colorMap: Map<string, string>) => {\n\t\t\t// Filter dots to exclude those hidden by shape filtering or by the brain\n\t\t\t// plot's region hide (externalHiddenCohorts), so legend n= reflects both.\n\t\t\tconst dotsVisibleByShape = dots.filter(\n\t\t\t\td => !hiddenShape[shapeMode].has(getShapeValueByMode(d, shapeMode)) && !externalHiddenCohorts.has(d.cohortName)\n\t\t\t)\n\t\t\tconst openColorMenu = (event: any, name: string, swatch: any) => {\n\t\t\t\tconst menu = new Menu({ padding: '0px' })\n\t\t\t\tconst div = menu.d.append('div')\n\t\t\t\tconst hidden = hiddenColor[colorMode].has(name)\n\t\t\t\tconst hiddenCount = hiddenColor[colorMode].size\n\n\t\t\t\tdiv\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t.text(hidden ? 'Show' : 'Hide')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tif (hidden) hiddenColor[colorMode].delete(name)\n\t\t\t\t\t\telse hiddenColor[colorMode].add(name)\n\t\t\t\t\t\trefreshAfterVisibilityChange()\n\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t})\n\n\t\t\t\tdiv\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t.text('Show only')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\thiddenColor[colorMode].clear()\n\t\t\t\t\t\tfor (const item of items) {\n\t\t\t\t\t\t\tif (item != name) hiddenColor[colorMode].add(item)\n\t\t\t\t\t\t}\n\t\t\t\t\t\trefreshAfterVisibilityChange()\n\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t})\n\n\t\t\t\tif (hiddenCount > 1)\n\t\t\t\t\tdiv\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t\t.text('Show all')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\thiddenColor[colorMode].clear()\n\t\t\t\t\t\t\trefreshAfterVisibilityChange()\n\t\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t\t})\n\n\t\t\t\tconst input: any = div\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr('class', 'sja_sharp_border')\n\t\t\t\t\t.style('padding', '0px 10px')\n\t\t\t\t\t.text('Color:')\n\t\t\t\t\t.append('input')\n\t\t\t\t\t.attr('type', 'color')\n\t\t\t\t\t.attr('value', colorMap.get(name) ?? '#888')\n\t\t\t\t\t.on('change', () => {\n\t\t\t\t\t\tconst newColor = input.node().value\n\t\t\t\t\t\tif (isCustomGroupKey(name)) {\n\t\t\t\t\t\t\tcustomGroupColorsByMode[colorMode].set(getCustomGroupNameFromKey(name), newColor)\n\t\t\t\t\t\t} else if (!isCustomGroupKey(name)) {\n\t\t\t\t\t\t\tif (colorMode == 'organism') organismColors.set(name, newColor)\n\t\t\t\t\t\t\telse if (colorMode == 'assayType') assayColors.set(name, newColor)\n\t\t\t\t\t\t\telse if (colorMode == 'cohort') cohortColors.set(name, newColor)\n\t\t\t\t\t\t\telse if (colorMode == 'proteinAccession') proteinColors.set(name, newColor)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tcolorMap.set(name, newColor)\n\t\t\t\t\t\tswatch.style('background', newColor)\n\t\t\t\t\t\tupdateDots()\n\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t})\n\n\t\t\t\tif (isCustomGroupKey(name))\n\t\t\t\t\tdiv\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t\t.text('Remove group')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\tremoveCustomGroup(colorMode, getCustomGroupNameFromKey(name))\n\t\t\t\t\t\t\trefreshAfterVisibilityChange()\n\t\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t\t})\n\t\t\t\tmenu.showunder(event.target)\n\t\t\t}\n\n\t\t\tfor (const name of items) {\n\t\t\t\tconst hidden = hiddenColor[colorMode].has(name)\n\t\t\t\tconst isGroup = isCustomGroupKey(name)\n\t\t\t\tconst displayName = isGroup ? getCustomGroupNameFromKey(name) : name\n\t\t\t\tconst inGroup = !isGroup ? getCustomGroupOfValue(colorMode, name) : null\n\t\t\t\tconst sampleCount = getLegendItemSampleCount(colorMode, name, dotsVisibleByShape)\n\t\t\t\tif (sampleCount === 0) continue\n\t\t\t\tconst row = colorLegendDiv\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('display', 'flex')\n\t\t\t\t\t.style('align-items', 'center')\n\t\t\t\t\t.style('gap', '6px')\n\t\t\t\t\t.style('margin-bottom', '3px')\n\t\t\t\tif (!isGroup && groupingModeActive.has(colorMode)) {\n\t\t\t\t\tconst cb = row.append('input').attr('type', 'checkbox').style('cursor', 'pointer').style('flex-shrink', '0')\n\t\t\t\t\tconst cbNode = cb.node() as HTMLInputElement\n\t\t\t\t\tcbNode.checked = checkedItemsByMode[colorMode].has(name)\n\t\t\t\t\tcb.on('change', () => {\n\t\t\t\t\t\tif (cbNode.checked) checkedItemsByMode[colorMode].add(name)\n\t\t\t\t\t\telse checkedItemsByMode[colorMode].delete(name)\n\t\t\t\t\t\tupdateColorCreateButtonState()\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tconst swatch = row\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t\t.style('width', '10px')\n\t\t\t\t\t.style('height', '10px')\n\t\t\t\t\t.style('border-radius', '50%')\n\t\t\t\t\t.style('background', colorMap.get(name) ?? '#888')\n\t\t\t\t\t.style('opacity', hidden ? 0.35 : 0.8)\n\t\t\t\t\t.style('flex-shrink', '0')\n\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\tswatch.on('click', (event: any) => openColorMenu(event, name, swatch))\n\t\t\t\trow\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.text(`${displayName}, n=${sampleCount}`)\n\t\t\t\t\t.style('text-decoration', hidden ? 'line-through' : 'none')\n\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t\t.on('click', (event: any) => openColorMenu(event, name, swatch))\n\t\t\t\tif (isGroup) {\n\t\t\t\t\tconst count = customGroupsByMode[colorMode].get(getCustomGroupNameFromKey(name))?.size || 0\n\t\t\t\t\tconst itemLabel =\n\t\t\t\t\t\tcolorMode === 'organism'\n\t\t\t\t\t\t\t? 'organisms'\n\t\t\t\t\t\t\t: colorMode === 'assayType'\n\t\t\t\t\t\t\t? 'assays'\n\t\t\t\t\t\t\t: colorMode === 'cohort'\n\t\t\t\t\t\t\t? 'sample sets'\n\t\t\t\t\t\t\t: colorMode === 'proteinAccession'\n\t\t\t\t\t\t\t? 'isoforms'\n\t\t\t\t\t\t\t: 'items'\n\t\t\t\t\trow.append('span').style('color', '#6b7280').text(`(${count} ${itemLabel})`)\n\t\t\t\t} else if (inGroup) {\n\t\t\t\t\trow.append('span').style('color', '#6b7280').style('font-style', 'italic').text(`\u2192 ${inGroup}`)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst buildModeLegendItems = (baseItems: string[], baseColorMap: Map<string, string>) => {\n\t\t\t// Hide base items that have been absorbed into a custom group\n\t\t\tconst visibleBaseItems = baseItems.filter(name => !getCustomGroupOfValue(colorMode, name))\n\t\t\tconst mergedColorMap = new Map<string, string>()\n\t\t\tfor (const name of visibleBaseItems) mergedColorMap.set(name, baseColorMap.get(name) ?? '#888')\n\t\t\tfor (const name of getCustomGroupItems(colorMode)) {\n\t\t\t\tconst rawName = getCustomGroupNameFromKey(name)\n\t\t\t\tmergedColorMap.set(name, customGroupColorsByMode[colorMode].get(rawName) ?? '#888')\n\t\t\t}\n\t\t\treturn { items: [...visibleBaseItems, ...getCustomGroupItems(colorMode)], colorMap: mergedColorMap }\n\t\t}\n\n\t\tconst renderCustomGroupControls = () => {\n\t\t\tif (!colorModesWithGroups.includes(colorMode)) return\n\n\t\t\tif (!groupingModeActive.has(colorMode)) {\n\t\t\t\tconst createBtn = colorLegendDiv\n\t\t\t\t\t.append('button')\n\t\t\t\t\t.attr('type', 'button')\n\t\t\t\t\t.style('font-size', '1em')\n\t\t\t\t\t.style('font-weight', '400')\n\t\t\t\t\t.style('margin-top', '6px')\n\t\t\t\t\t.style('padding', '0')\n\t\t\t\t\t.style('border', 'none')\n\t\t\t\t\t.style('border-radius', '0')\n\t\t\t\t\t.style('background', 'transparent')\n\t\t\t\t\t.style('color', '#6b7280')\n\t\t\t\t\t.style('box-shadow', 'none')\n\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t\t.style('transition', 'color 120ms ease')\n\t\t\t\t\t.text('+ Create custom group')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tgroupingModeActive.add(colorMode)\n\t\t\t\t\t\trenderColorLegend()\n\t\t\t\t\t})\n\t\t\t\tcreateBtn\n\t\t\t\t\t.on('mouseover', function (this: any) {\n\t\t\t\t\t\tselect(this).style('color', '#111827')\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseout', function (this: any) {\n\t\t\t\t\t\tselect(this).style('color', '#6b7280')\n\t\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tcolorLegendDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('font-size', '11px')\n\t\t\t\t.style('color', '#6b7280')\n\t\t\t\t.style('margin-bottom', '4px')\n\t\t\t\t.text('Check items to include in the new group:')\n\n\t\t\tconst controls = colorLegendDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'flex')\n\t\t\t\t.style('gap', '6px')\n\t\t\t\t.style('align-items', 'center')\n\t\t\t\t.style('flex-wrap', 'wrap')\n\t\t\t\t.style('margin-top', '4px')\n\n\t\t\tconst nameInput = controls\n\t\t\t\t.append('input')\n\t\t\t\t.attr('data-role', 'custom-group-name')\n\t\t\t\t.attr('type', 'text')\n\t\t\t\t.attr('placeholder', 'Group name')\n\t\t\t\t.style('font-size', '12px')\n\t\t\t\t.style('padding', '2px 4px')\n\t\t\t\t.style('min-width', '100px')\n\t\t\t\t.on('input', () => updateColorCreateButtonState())\n\n\t\t\tcontrols\n\t\t\t\t.append('button')\n\t\t\t\t.attr('data-role', 'create-custom-group-submit')\n\t\t\t\t.attr('type', 'button')\n\t\t\t\t.style('font-size', '12px')\n\t\t\t\t.style('padding', '2px 6px')\n\t\t\t\t.text('Create')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tconst groupName = ((nameInput.node() as HTMLInputElement)?.value || '').trim()\n\t\t\t\t\tif (!groupName || checkedItemsByMode[colorMode].size < 1) return\n\t\t\t\t\taddOrUpdateCustomGroup(colorMode, groupName, [...checkedItemsByMode[colorMode]])\n\t\t\t\t\tcheckedItemsByMode[colorMode].clear()\n\t\t\t\t\tgroupingModeActive.delete(colorMode)\n\t\t\t\t\trefreshAfterVisibilityChange()\n\t\t\t\t})\n\n\t\t\tupdateColorCreateButtonState()\n\n\t\t\tcontrols\n\t\t\t\t.append('button')\n\t\t\t\t.attr('type', 'button')\n\t\t\t\t.style('font-size', '12px')\n\t\t\t\t.style('padding', '2px 6px')\n\t\t\t\t.text('Cancel')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tcheckedItemsByMode[colorMode].clear()\n\t\t\t\t\tgroupingModeActive.delete(colorMode)\n\t\t\t\t\trenderColorLegend()\n\t\t\t\t})\n\t\t}\n\n\t\tif (colorMode === 'organism') {\n\t\t\tconst { items, colorMap } = buildModeLegendItems(organismNames, organismColors)\n\t\t\tmakeLegendItems(items, colorMap)\n\t\t\trenderCustomGroupControls()\n\t\t} else if (colorMode === 'assayType') {\n\t\t\tconst { items, colorMap } = buildModeLegendItems(assayNames, assayColors)\n\t\t\tmakeLegendItems(items, colorMap)\n\t\t\trenderCustomGroupControls()\n\t\t} else if (colorMode === 'cohort') {\n\t\t\tconst { items, colorMap } = buildModeLegendItems(cohortNames, cohortColors)\n\t\t\tmakeLegendItems(items, colorMap)\n\t\t\trenderCustomGroupControls()\n\t\t} else if (colorMode === 'proteinAccession') {\n\t\t\tconst { items, colorMap } = buildModeLegendItems(proteinAccessions, proteinColors)\n\t\t\tmakeLegendItems(items, colorMap)\n\t\t\trenderCustomGroupControls()\n\t\t}\n\n\t\tshapeLegendDiv.append('div').style('border-top', '1px solid #e5e7eb').style('margin', '8px 0 8px 0')\n\n\t\tconst shapeModeRow = shapeLegendDiv\n\t\t\t.append('div')\n\t\t\t.style('display', 'flex')\n\t\t\t.style('gap', '10px')\n\t\t\t.style('margin-bottom', '6px')\n\t\t\t.style('flex-wrap', 'wrap')\n\n\t\tshapeModeRow.append('span').text('Shape by')\n\n\t\tfor (const { key, label } of shapeGroupingModes) {\n\t\t\tshapeModeRow\n\t\t\t\t.append('span')\n\t\t\t\t.text(label)\n\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t.style('font-weight', key === shapeMode ? '600' : '400')\n\t\t\t\t.style('text-decoration', key === shapeMode ? 'underline' : 'none')\n\t\t\t\t.style('color', key === shapeMode ? '#111' : '#6b7280')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tshapeGroupingModeActive.delete(shapeMode)\n\t\t\t\t\tcheckedShapeItemsByMode[shapeMode].clear()\n\t\t\t\t\tshapeMode = key\n\t\t\t\t\trefreshAfterVisibilityChange()\n\t\t\t\t})\n\t\t}\n\n\t\tconst buildShapeLegendItems = (baseItems: string[]) => {\n\t\t\tconst visibleBaseItems = baseItems.filter(name => !getCustomShapeGroupOfValue(shapeMode, name))\n\t\t\treturn { items: [...visibleBaseItems, ...getCustomShapeGroupItems(shapeMode)] }\n\t\t}\n\n\t\tconst drawShapeLegend = (items: string[], shapeMap: Map<string, number>) => {\n\t\t\t// Filter dots to exclude those hidden by color filtering or by the brain\n\t\t\t// plot's region hide (externalHiddenCohorts), so legend n= reflects both.\n\t\t\tconst dotsVisibleByColor = dots.filter(\n\t\t\t\td => !hiddenColor[colorMode].has(getColorValueByMode(d, colorMode)) && !externalHiddenCohorts.has(d.cohortName)\n\t\t\t)\n\t\t\tconst openShapeMenu = (event: any, name: string) => {\n\t\t\t\tconst menu = new Menu({ padding: '0px' })\n\t\t\t\tconst activeShapeMap = isCustomShapeGroupKey(name) ? customShapeIndicesByMode[shapeMode] : getShapeMapInUse()\n\t\t\t\tconst div = menu.d.append('div')\n\t\t\t\tconst hidden = hiddenShape[shapeMode].has(name)\n\t\t\t\tconst hiddenCount = hiddenShape[shapeMode].size\n\n\t\t\t\tdiv\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t.text(hidden ? 'Show' : 'Hide')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tif (hidden) hiddenShape[shapeMode].delete(name)\n\t\t\t\t\t\telse hiddenShape[shapeMode].add(name)\n\t\t\t\t\t\trefreshAfterVisibilityChange()\n\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t})\n\n\t\t\t\tdiv\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t.text('Show only')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\thiddenShape[shapeMode].clear()\n\t\t\t\t\t\tfor (const item of items) {\n\t\t\t\t\t\t\tif (item != name) hiddenShape[shapeMode].add(item)\n\t\t\t\t\t\t}\n\t\t\t\t\t\trefreshAfterVisibilityChange()\n\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t})\n\n\t\t\t\tif (hiddenCount > 1)\n\t\t\t\t\tdiv\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t\t.text('Show all')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\thiddenShape[shapeMode].clear()\n\t\t\t\t\t\t\trefreshAfterVisibilityChange()\n\t\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t\t})\n\n\t\t\t\tdiv\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t.text('Change shape')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tdiv.selectAll('*').remove()\n\t\t\t\t\t\tshapeSelector(\n\t\t\t\t\t\t\tdiv,\n\t\t\t\t\t\t\t(index: number) => {\n\t\t\t\t\t\t\t\tconst shapeKey = isCustomShapeGroupKey(name) ? getCustomShapeGroupNameFromKey(name) : name\n\t\t\t\t\t\t\t\tactiveShapeMap.set(shapeKey, index)\n\t\t\t\t\t\t\t\tupdateDots()\n\t\t\t\t\t\t\t\trenderColorLegend()\n\t\t\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tprioritizedShapesArray\n\t\t\t\t\t\t)\n\t\t\t\t\t})\n\n\t\t\t\tif (isCustomShapeGroupKey(name))\n\t\t\t\t\tdiv\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t\t.text('Remove group')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\tremoveCustomShapeGroup(shapeMode, getCustomShapeGroupNameFromKey(name))\n\t\t\t\t\t\t\trefreshAfterVisibilityChange()\n\t\t\t\t\t\t\tmenu.hide()\n\t\t\t\t\t\t})\n\n\t\t\t\tmenu.showunder(event.target)\n\t\t\t}\n\n\t\t\tfor (const name of items) {\n\t\t\t\tconst hidden = hiddenShape[shapeMode].has(name)\n\t\t\t\tconst isGroup = isCustomShapeGroupKey(name)\n\t\t\t\tconst displayName = isGroup ? getCustomShapeGroupNameFromKey(name) : name\n\t\t\t\tconst inGroup = !isGroup ? getCustomShapeGroupOfValue(shapeMode, name) : null\n\t\t\t\tconst sampleCount = getLegendItemSampleCount(shapeMode, name, dotsVisibleByColor)\n\t\t\t\tif (sampleCount === 0) continue\n\t\t\t\tconst row = shapeLegendDiv\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('display', 'flex')\n\t\t\t\t\t.style('align-items', 'center')\n\t\t\t\t\t.style('gap', '6px')\n\t\t\t\t\t.style('margin-bottom', '3px')\n\t\t\t\tif (!isGroup && shapeGroupingModeActive.has(shapeMode)) {\n\t\t\t\t\tconst cb = row.append('input').attr('type', 'checkbox').style('cursor', 'pointer').style('flex-shrink', '0')\n\t\t\t\t\tconst cbNode = cb.node() as HTMLInputElement\n\t\t\t\t\tcbNode.checked = checkedShapeItemsByMode[shapeMode].has(name)\n\t\t\t\t\tcb.on('change', () => {\n\t\t\t\t\t\tif (cbNode.checked) checkedShapeItemsByMode[shapeMode].add(name)\n\t\t\t\t\t\telse checkedShapeItemsByMode[shapeMode].delete(name)\n\t\t\t\t\t\tupdateShapeCreateButtonState()\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tconst icon = row\n\t\t\t\t\t.append('svg')\n\t\t\t\t\t.attr('width', 16)\n\t\t\t\t\t.attr('height', 16)\n\t\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\ticon\n\t\t\t\t\t.append('path')\n\t\t\t\t\t.attr('transform', 'scale(0.8)')\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'd',\n\t\t\t\t\t\tprioritizedShapesArray[\n\t\t\t\t\t\t\t((isGroup\n\t\t\t\t\t\t\t\t? customShapeIndicesByMode[shapeMode].get(getCustomShapeGroupNameFromKey(name))\n\t\t\t\t\t\t\t\t: shapeMap.get(name)) || 0) % prioritizedShapesArray.length\n\t\t\t\t\t\t]\n\t\t\t\t\t)\n\t\t\t\t\t.attr('fill', '#4b5563')\n\t\t\t\t\t.attr('fill-opacity', hidden ? 0.35 : 0.9)\n\t\t\t\ticon.on('click', (event: any) => openShapeMenu(event, name))\n\t\t\t\trow\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.text(`${displayName}, n=${sampleCount}`)\n\t\t\t\t\t.style('text-decoration', hidden ? 'line-through' : 'none')\n\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t\t.on('click', (event: any) => openShapeMenu(event, name))\n\t\t\t\tif (isGroup) {\n\t\t\t\t\tconst count = customShapeGroupsByMode[shapeMode].get(getCustomShapeGroupNameFromKey(name))?.size || 0\n\t\t\t\t\tconst itemLabel =\n\t\t\t\t\t\tshapeMode === 'organism'\n\t\t\t\t\t\t\t? 'organisms'\n\t\t\t\t\t\t\t: shapeMode === 'assayType'\n\t\t\t\t\t\t\t? 'assays'\n\t\t\t\t\t\t\t: shapeMode === 'cohort'\n\t\t\t\t\t\t\t? 'sample sets'\n\t\t\t\t\t\t\t: shapeMode === 'proteinAccession'\n\t\t\t\t\t\t\t? 'isoforms'\n\t\t\t\t\t\t\t: 'items'\n\t\t\t\t\trow.append('span').style('color', '#6b7280').text(`(${count} ${itemLabel})`)\n\t\t\t\t} else if (inGroup) {\n\t\t\t\t\trow.append('span').style('color', '#6b7280').style('font-style', 'italic').text(`\u2192 ${inGroup}`)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tconst renderShapeCustomGroupControls = () => {\n\t\t\tif (!shapeModesWithGroups.includes(shapeMode)) return\n\n\t\t\tif (!shapeGroupingModeActive.has(shapeMode)) {\n\t\t\t\tconst createBtn = shapeLegendDiv\n\t\t\t\t\t.append('button')\n\t\t\t\t\t.attr('type', 'button')\n\t\t\t\t\t.style('font-size', '1em')\n\t\t\t\t\t.style('font-weight', '400')\n\t\t\t\t\t.style('margin-top', '6px')\n\t\t\t\t\t.style('padding', '0')\n\t\t\t\t\t.style('border', 'none')\n\t\t\t\t\t.style('border-radius', '0')\n\t\t\t\t\t.style('background', 'transparent')\n\t\t\t\t\t.style('color', '#6b7280')\n\t\t\t\t\t.style('box-shadow', 'none')\n\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t\t.style('transition', 'color 120ms ease')\n\t\t\t\t\t.text('+ Create custom group')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tshapeGroupingModeActive.add(shapeMode)\n\t\t\t\t\t\trenderColorLegend()\n\t\t\t\t\t})\n\t\t\t\tcreateBtn\n\t\t\t\t\t.on('mouseover', function (this: any) {\n\t\t\t\t\t\tselect(this).style('color', '#111827')\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseout', function (this: any) {\n\t\t\t\t\t\tselect(this).style('color', '#6b7280')\n\t\t\t\t\t})\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tshapeLegendDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('font-size', '11px')\n\t\t\t\t.style('color', '#6b7280')\n\t\t\t\t.style('margin-bottom', '4px')\n\t\t\t\t.text('Check items to include in the new group:')\n\n\t\t\tconst controls = shapeLegendDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'flex')\n\t\t\t\t.style('gap', '6px')\n\t\t\t\t.style('align-items', 'center')\n\t\t\t\t.style('flex-wrap', 'wrap')\n\t\t\t\t.style('margin-top', '4px')\n\n\t\t\tconst nameInput = controls\n\t\t\t\t.append('input')\n\t\t\t\t.attr('data-role', 'custom-shape-group-name')\n\t\t\t\t.attr('type', 'text')\n\t\t\t\t.attr('placeholder', 'Group name')\n\t\t\t\t.style('font-size', '12px')\n\t\t\t\t.style('padding', '2px 4px')\n\t\t\t\t.style('min-width', '100px')\n\t\t\t\t.on('input', () => updateShapeCreateButtonState())\n\n\t\t\tcontrols\n\t\t\t\t.append('button')\n\t\t\t\t.attr('data-role', 'create-custom-shape-group-submit')\n\t\t\t\t.attr('type', 'button')\n\t\t\t\t.style('font-size', '12px')\n\t\t\t\t.style('padding', '2px 6px')\n\t\t\t\t.text('Create')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tconst groupName = ((nameInput.node() as HTMLInputElement)?.value || '').trim()\n\t\t\t\t\tif (!groupName || checkedShapeItemsByMode[shapeMode].size < 1) return\n\t\t\t\t\taddOrUpdateCustomShapeGroup(shapeMode, groupName, [...checkedShapeItemsByMode[shapeMode]])\n\t\t\t\t\tcheckedShapeItemsByMode[shapeMode].clear()\n\t\t\t\t\tshapeGroupingModeActive.delete(shapeMode)\n\t\t\t\t\trefreshAfterVisibilityChange()\n\t\t\t\t})\n\n\t\t\tupdateShapeCreateButtonState()\n\n\t\t\tcontrols\n\t\t\t\t.append('button')\n\t\t\t\t.attr('type', 'button')\n\t\t\t\t.style('font-size', '12px')\n\t\t\t\t.style('padding', '2px 6px')\n\t\t\t\t.text('Cancel')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tcheckedShapeItemsByMode[shapeMode].clear()\n\t\t\t\t\tshapeGroupingModeActive.delete(shapeMode)\n\t\t\t\t\trenderColorLegend()\n\t\t\t\t})\n\t\t}\n\n\t\tif (shapeMode === 'organism') {\n\t\t\tconst { items } = buildShapeLegendItems(organismNames)\n\t\t\tdrawShapeLegend(items, organismShapes)\n\t\t\trenderShapeCustomGroupControls()\n\t\t} else if (shapeMode === 'assayType') {\n\t\t\tconst { items } = buildShapeLegendItems(assayNames)\n\t\t\tdrawShapeLegend(items, assayShapes)\n\t\t\trenderShapeCustomGroupControls()\n\t\t} else if (shapeMode === 'cohort') {\n\t\t\tconst { items } = buildShapeLegendItems(cohortNames)\n\t\t\tdrawShapeLegend(items, cohortShapes)\n\t\t\trenderShapeCustomGroupControls()\n\t\t} else if (shapeMode === 'proteinAccession') {\n\t\t\tconst { items } = buildShapeLegendItems(proteinAccessions)\n\t\t\tdrawShapeLegend(items, proteinShapes)\n\t\t\trenderShapeCustomGroupControls()\n\t\t}\n\t}\n\n\tupdateRadiusScaleForVisibleDots()\n\trenderColorLegend()\n\trenderSizeLegend()\n\n\tconst api: VolcanoApi = {\n\t\tsetExternallyHiddenCohorts(cohorts: Set<string>) {\n\t\t\texternalHiddenCohorts = cohorts\n\t\t\trefreshAfterVisibilityChange()\n\t\t},\n\t\tonVisibilityChange(cb) {\n\t\t\tvisibilityChangeListeners.push(cb)\n\t\t\t// Fire once immediately so the subscriber gets the initial state.\n\t\t\tcb({ dots: getVisibleDots() })\n\t\t}\n\t}\n\treturn api\n}\n\nexport type VolcanoApi = {\n\t// Set the list of cohort names to hide externally (e.g. driven by the brain\n\t// plot). Replaces any previously-set external hides.\n\tsetExternallyHiddenCohorts(cohorts: Set<string>): void\n\t// Subscribe to visibility changes. Called once on subscribe with the current\n\t// state, then on every subsequent change. `dots` is the currently-visible dot\n\t// list (each carrying sampleIds) so subscribers can count the exact samples the\n\t// volcano represents (region per sample comes from the response sampleRegions map).\n\tonVisibilityChange(cb: (v: { dots: any[] }) => void): void\n}\n\nfunction launchViolinPlot(\n\tself: ProteinView,\n\torganismName: string,\n\tassayName: string,\n\tcohortName: string,\n\tisoform: string\n) {\n\tconst selectedProtein = self.state.config?.tw?.term\n\tif (!selectedProtein) throw new Error('proteinView: selected protein term is missing')\n\n\tconst action: any = {\n\t\ttype: 'plot_create',\n\t\tconfig: {\n\t\t\tchartType: 'summary'\n\t\t}\n\t}\n\taction.config.assayCohortTitle = `${organismName} ${assayName}: ${cohortName}`\n\taction.config.proteomeDetails = { organism: organismName, assay: assayName, cohort: cohortName }\n\n\tconst termdbConfig = self.app.vocabApi.termdbConfig\n\tconst proteomeOverlayTerm = termdbConfig?.queries?.proteome?.organisms?.[organismName]?.overlayTerm\n\tconst t = structuredClone(selectedProtein)\n\tt.name = `${t.name}: ${isoform}`\n\tt.dataTypeDetails = { organism: organismName, assay: assayName, cohort: cohortName }\n\taction.config.term = { term: t, q: { mode: NumericModes.continuous } }\n\n\tif (proteomeOverlayTerm) {\n\t\taction.config.term2 = { term: structuredClone(proteomeOverlayTerm), q: {} }\n\t}\n\n\tself.app.dispatch(action)\n}\n\nasync function renderPTMLollipop(holder: any, ptmCohorts: any, self: ProteinView, isoform: string, genome: any) {\n\tif (!ptmCohorts?.length) return\n\n\tconst custom_variants: any[] = []\n\tconst mergedMclassOverride: any = {}\n\tconst gm = await getGmForPTM(ptmCohorts[0].geneName, genome.name, isoform)\n\tfor (const ptm of ptmCohorts) {\n\t\t//use default gene model to get coordinates for all PTM sites, which is sufficient for most cases\n\t\t//and avoids the complexity of mapping between different isoforms. TODO:support isoform-specific mapping.\n\t\tif (!gm) continue\n\t\tconst logValue = getLog2Ratio(ptm.foldChange)\n\t\tconst pValue = Number(ptm.pValue)\n\t\tconst testedN = Number(ptm.testedN)\n\t\tconst controlN = Number(ptm.controlN)\n\n\t\tif (ptm.mclassOverride && typeof ptm.mclassOverride == 'object') {\n\t\t\tObject.assign(mergedMclassOverride, ptm.mclassOverride)\n\t\t}\n\n\t\tconst site = parsePTMModSites(ptm.modSites)\n\t\tif (!site) continue\n\t\tconst pos = aa2gmcoord(site, gm)\n\t\tif (!Number.isInteger(pos)) continue\n\t\tconst ptmClass = Object.keys(ptm.mclassOverride || {})[0]\n\t\tcustom_variants.push({\n\t\t\tchr: gm.chr,\n\t\t\tpos,\n\t\t\tmname: ptm.modSites,\n\t\t\tclass: ptmClass,\n\t\t\tdt: 1,\n\t\t\tlogValue,\n\t\t\tpValue,\n\t\t\ttestedN: Number.isFinite(testedN) ? testedN : null,\n\t\t\tcontrolN: Number.isFinite(controlN) ? controlN : null,\n\t\t\torganism: ptm.organism || null,\n\t\t\tassayName: ptm.assayName || null,\n\t\t\tcohortName: ptm.cohortName || null,\n\t\t\tproteinAccession: ptm.proteinAccession || null,\n\t\t\tPTMStr: ptm.uniqueIdentifier || null,\n\t\t\thtmlSections: [\n\t\t\t\t{\n\t\t\t\t\tkey: 'Action',\n\t\t\t\t\tlabel: 'Launch Violin Plot',\n\t\t\t\t\tcallback: () => launchViolinPlot(self, ptm.organism, ptm.assayName, ptm.cohortName, ptm.uniqueIdentifier)\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t}\n\tif (!custom_variants.length) return\n\n\tconst mclassOverride = {\n\t\tclassName: 'PTM',\n\t\tclasses: mergedMclassOverride\n\t}\n\n\t// apply mclass override to global mclass, which will be used by the mds3 track to display the PTM sites.\n\t// this is necessary because the lollipop plot relies on mclass for variant\n\t// TODO: find a better way (such as defining PTM-specific class keys) to pass mclass override to the track\n\t// without modifying global mclass, which can have unintended side effects on other plots.\n\tfor (const key in mclassOverride.classes) {\n\t\tif (mclass[key]) Object.assign(mclass[key], mclassOverride.classes[key])\n\t}\n\n\t// create mds3 custom track using numeric mode with logValue on y-axis\n\tconst tk = {\n\t\ttype: 'mds3',\n\t\tname: 'PTMs',\n\t\tcustom_variants: custom_variants,\n\t\tskewerModes: [\n\t\t\t{\n\t\t\t\ttype: 'numeric',\n\t\t\t\tbyAttribute: 'logValue',\n\t\t\t\tlabel: 'Log2FC',\n\t\t\t\ttooltipPrintValue: m => {\n\t\t\t\t\tconst p = Number(m.pValue)\n\t\t\t\t\treturn [\n\t\t\t\t\t\t{ k: 'Organism', v: m.organism ?? 'NA' },\n\t\t\t\t\t\t{ k: 'Assay', v: m.assayName ?? 'NA' },\n\t\t\t\t\t\t{ k: 'Sample set', v: m.cohortName ?? 'NA' },\n\t\t\t\t\t\t{ k: 'PTM', v: m.PTMStr ?? 'NA' },\n\t\t\t\t\t\t{ k: 'Log2 fold change', v: Number.isFinite(m.logValue) ? roundValue(m.logValue, 3) : 'NA' },\n\t\t\t\t\t\t{ k: 'P value', v: Number.isFinite(p) && p > 0 ? p.toExponential(2) : 'NA' },\n\t\t\t\t\t\t{ k: 'Case samples', v: Number.isFinite(m.testedN) ? m.testedN : 'NA' },\n\t\t\t\t\t\t{ k: 'Control samples', v: Number.isFinite(m.controlN) ? m.controlN : 'NA' },\n\t\t\t\t\t\t{ k: 'Protein accession', v: m.proteinAccession ?? 'NA' }\n\t\t\t\t\t]\n\t\t\t\t},\n\t\t\t\tinuse: true,\n\t\t\t\taxisheight: 100\n\t\t\t}\n\t\t],\n\t\tmclassOverride\n\t}\n\n\t// launch block in protein mode with custom track\n\tconst arg = {\n\t\tholder: holder.append('div'),\n\t\tgenome,\n\t\tnobox: true,\n\t\ttklst: [tk],\n\t\tmclassOverride,\n\t\tdebugmode: self.app.opts.debug,\n\t\tquery: gm.isoform,\n\t\thide_dsHandles: true\n\t}\n\n\tconst _ = await import('#src/block.init')\n\tawait _.default(arg)\n}\n\n// return the first valid modification site parsed from the modSites string, which is expected to be in the format like \"S10\", or \"S10,T11\"\n// for now return the first valid site for simplicity. TODO: parse and display multiple sites if available.\nfunction parsePTMModSites(modSites: string) {\n\tif (!modSites) return null\n\tconst regex = /([A-Za-z])(\\d+)/g\n\tlet m\n\twhile ((m = regex.exec(modSites)) !== null) {\n\t\tconst position = Number(m[2])\n\t\tif (!Number.isInteger(position) || position < 1) continue\n\t\treturn position\n\t}\n\treturn null\n}\n\nasync function getGmForPTM(geneName: string, genomeName: string, isoform: string) {\n\tif (!geneName) return null\n\tconst d = await dofetch3('genelookup', {\n\t\tbody: {\n\t\t\tdeep: 1,\n\t\t\tgenome: genomeName,\n\t\t\tinput: geneName\n\t\t}\n\t})\n\n\tif (d.error || !Array.isArray(d.gmlst) || !d.gmlst.length) return null\n\n\tconst normalizedIsoform = isoform?.trim().toUpperCase()\n\tconst gm =\n\t\td.gmlst.find((i: any) => i.isoform && normalizedIsoform && i.isoform.toUpperCase() == normalizedIsoform) ||\n\t\td.gmlst.find((i: any) => i.isdefault) ||\n\t\td.gmlst[0]\n\treturn gm\n}\n\nfunction getLog2Ratio(foldChange: number) {\n\tif (!Number.isFinite(foldChange) || foldChange <= 0) return null\n\treturn Math.log2(foldChange)\n}\n\nexport async function getPlotConfig(opts: any) {\n\tconst config = structuredClone(defaultConfig)\n\tif (!opts.tw) throw new Error('proteinView requires opts.tw')\n\treturn copyMerge(config, opts)\n}\n\nexport function makeChartBtnMenu(holder: any, chartsInstance: any) {\n\tconst row = holder.append('div').style('padding', '5px')\n\trow.append('span').style('font-weight', 'bold').text('Enter a gene name:')\n\n\tconst geneSearch = addGeneSearchbox({\n\t\trow,\n\t\tgenome: chartsInstance.app.opts.genome,\n\t\ttip: new Menu({ padding: '0px' }),\n\t\tsearchOnly: 'gene',\n\t\tcallback: async () => {\n\t\t\tif (!geneSearch.geneSymbol) throw new Error('A valid gene selection is required')\n\t\t\tchartsInstance.dom.tip.hide()\n\t\t\tchartsInstance.app.dispatch({\n\t\t\t\ttype: 'plot_create',\n\t\t\t\tconfig: {\n\t\t\t\t\tchartType: 'proteinView',\n\t\t\t\t\ttw: {\n\t\t\t\t\t\tterm: {\n\t\t\t\t\t\t\tgene: geneSearch.geneSymbol,\n\t\t\t\t\t\t\tname: geneSearch.geneSymbol,\n\t\t\t\t\t\t\ttype: TermTypes.PROTEOME_ABUNDANCE\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 const proteinViewInit = getCompInit(ProteinView)\nexport const componentInit = proteinViewInit\n"],
5
+ "mappings": "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",
6
+ "names": ["g"]
7
+ }
@@ -0,0 +1,43 @@
1
+ import {
2
+ QualCustomGS,
3
+ QualPredefinedGS,
4
+ QualValues,
5
+ QualitativeBase
6
+ } from "./chunk-L7VDSIM7.js";
7
+ import "./chunk-HJ6L54YS.js";
8
+ import "./chunk-LSEFWW72.js";
9
+ import "./chunk-UXDVUCXU.js";
10
+ import "./chunk-HYOEWQ5P.js";
11
+ import "./chunk-HBW42TDT.js";
12
+ import "./chunk-LQJMCE7G.js";
13
+ import "./chunk-FN5XPUPH.js";
14
+ import "./chunk-IIT367QZ.js";
15
+ import "./chunk-RZGEKL77.js";
16
+ import "./chunk-KM4JBR26.js";
17
+ import "./chunk-COYULNJF.js";
18
+ import "./chunk-6G4YOMWW.js";
19
+ import "./chunk-7IYJZZQI.js";
20
+ import "./chunk-M3J4MINX.js";
21
+ import "./chunk-PF4DSFDR.js";
22
+ import "./chunk-I73KUUYG.js";
23
+ import "./chunk-IVXCWCKS.js";
24
+ import "./chunk-7KRS7L4U.js";
25
+ import "./chunk-BKPDYW5T.js";
26
+ import "./chunk-JNITUVXP.js";
27
+ import "./chunk-TJYRBEBK.js";
28
+ import "./chunk-LOZEKOES.js";
29
+ import "./chunk-VQZ2Z5YU.js";
30
+ import "./chunk-SOTB4FRE.js";
31
+ import "./chunk-TLT4YIG3.js";
32
+ import "./chunk-KYBIQBXE.js";
33
+ import "./chunk-I6Y4O3RR.js";
34
+ import "./chunk-OMR2DT66.js";
35
+ import "./chunk-DQC5FFGV.js";
36
+ import "./chunk-HFNDKYVF.js";
37
+ export {
38
+ QualCustomGS,
39
+ QualPredefinedGS,
40
+ QualValues,
41
+ QualitativeBase
42
+ };
43
+ //# sourceMappingURL=qualitative-N7S2JHZM.js.map