@sjcrh/proteinpaint-client 2.205.0 → 2.206.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 (928) hide show
  1. package/dist/2dmaf-5OYM4MXA.js +1367 -0
  2. package/dist/AggMatrixInput-4VTI4Y6E.js +277 -0
  3. package/dist/AggregateMatrix-K7SGNO63.js +41 -0
  4. package/dist/AppHeader-WU6TO2OZ.js +830 -0
  5. package/dist/BoxPlot-OW7U3XTF.js +1211 -0
  6. package/dist/CorrelationVolcano-B3JTTZHF.js +614 -0
  7. package/dist/Cuminc-AJEXWRU2.js +1219 -0
  8. package/dist/DE-2J7DSRPC.js +89 -0
  9. package/dist/DEinput-I7JWNOSD.js +499 -0
  10. package/dist/DM-NQ46YPGF.js +90 -0
  11. package/dist/DifferentialAnalysis-BFCQBX5J.js +237 -0
  12. package/dist/Disco-ZJLVQRTC.js +3389 -0
  13. package/dist/Disco.UI-AEDACXW2.js +243 -0
  14. package/dist/DmrPlot-QMRXAOM3.js +637 -0
  15. package/dist/GB-MFU2UJ22.js +1391 -0
  16. package/dist/GSEA-E3NHU22A.js +851 -0
  17. package/dist/GeneExpInput-MIUNSOPY.js +362 -0
  18. package/dist/Geomap-HAJG3STN.js +84 -0
  19. package/dist/HicApp-ECFFIRWI.js +2245 -0
  20. package/dist/IDCViewer-TNSD3U2V.js +10812 -0
  21. package/dist/NumBinaryEditor-CNBGZ6WY.js +279 -0
  22. package/dist/NumBinaryEditor.unit.spec-SKFDALF3.js +312 -0
  23. package/dist/NumContEditor-7ID2U7JL.js +105 -0
  24. package/dist/NumContEditor.unit.spec-XHSQSAWK.js +164 -0
  25. package/dist/NumCustomBinEditor-PAIPRJPO.js +33 -0
  26. package/dist/NumCustomBinEditor.unit.spec-QYVZMMHV.js +397 -0
  27. package/dist/NumDiscreteEditor-K2NZZQTH.js +170 -0
  28. package/dist/NumDiscreteEditor.unit.spec-3CG5VEQL.js +233 -0
  29. package/dist/NumRegularBinEditor-EOVZ22TP.js +33 -0
  30. package/dist/NumRegularBinEditor.unit.spec-FHTVH5FH.js +278 -0
  31. package/dist/NumSplineEditor-N3REMJUC.js +210 -0
  32. package/dist/NumSplineEditor.unit.spec-DZCP35GL.js +224 -0
  33. package/dist/NumericDensity-42MWVI2S.js +33 -0
  34. package/dist/NumericDensity.unit.spec-T2HHSQON.js +418 -0
  35. package/dist/NumericHandler-5XU3SSPD.js +34 -0
  36. package/dist/NumericHandler.unit.spec-3F23KSAQ.js +214 -0
  37. package/dist/ProteomeInput-UN2BUNRO.js +388 -0
  38. package/dist/Regression-HWLJENA5.js +1416 -0
  39. package/dist/RunChart2-YO55WE4M.js +749 -0
  40. package/dist/SC-LEDJ4DQR.js +1107 -0
  41. package/dist/Violin-E6PDJZ2B.js +1082 -0
  42. package/dist/Volcano-XJTBWYUK.js +1649 -0
  43. package/dist/Wsi-S675CYTW.js +431 -0
  44. package/dist/adSandbox-ZJQ5ZW2T.js +33 -0
  45. package/dist/animatedBubbleChart-LRUS7W36.js +547 -0
  46. package/dist/app-7Q3QIBU4.js +32 -0
  47. package/dist/app-PKSI4MV5.js +42 -0
  48. package/dist/app.js +17 -17
  49. package/dist/bam-X5JH5ZT7.js +876 -0
  50. package/dist/barchart-UT6J4L2N.js +42 -0
  51. package/dist/barchart2-ZG5QJO3C.js +309 -0
  52. package/dist/block-TC466NGW.js +6249 -0
  53. package/dist/block.init-CIBNSYAC.js +33 -0
  54. package/dist/block.mds.expressionrank-EY5PCQCK.js +354 -0
  55. package/dist/block.mds.geneboxplot-R6AOMHO5.js +823 -0
  56. package/dist/block.mds.junction-JMV6FNYC.js +1539 -0
  57. package/dist/block.mds.svcnv-IHTV3QYG.js +6796 -0
  58. package/dist/block.svg-NTFLVQAQ.js +159 -0
  59. package/dist/block.tk.aicheck-FYPL32Y4.js +278 -0
  60. package/dist/block.tk.ase-FWCB6VBO.js +360 -0
  61. package/dist/block.tk.bam-Q5UFUABN.js +1901 -0
  62. package/dist/block.tk.bedgraphdot-KBI3GFDM.js +379 -0
  63. package/dist/block.tk.bigwig.ui-KXNFX7G7.js +206 -0
  64. package/dist/block.tk.hicstraw-MQBH3YAJ.js +818 -0
  65. package/dist/block.tk.junction-EBTVXLJH.js +2358 -0
  66. package/dist/block.tk.junction.textmatrixui-ETYLCP2O.js +194 -0
  67. package/dist/block.tk.ld-NLB6L6WQ.js +94 -0
  68. package/dist/block.tk.menu-PJLCOXVJ.js +1024 -0
  69. package/dist/block.tk.pgv-JOIQVWL2.js +938 -0
  70. package/dist/brainImaging-SPRC3QFB.js +515 -0
  71. package/dist/brainRegions-LGQGRWG7.js +217 -0
  72. package/dist/brainRegions-LGQGRWG7.js.map +7 -0
  73. package/dist/bubbleHeatmap-CFTZ5RXH.js +378 -0
  74. package/dist/cellTypeBubbleHeatmap-DXPLFT5U.js +278 -0
  75. package/dist/chunk-2BQ572SL.js +102 -0
  76. package/dist/chunk-2DQIQYY3.js +103 -0
  77. package/dist/chunk-2POQWEK6.js +134 -0
  78. package/dist/chunk-2SQEVMAL.js +446 -0
  79. package/dist/chunk-37HTZ6IG.js +158 -0
  80. package/dist/chunk-452765PG.js +2676 -0
  81. package/dist/chunk-4DXQJGJ7.js +31 -0
  82. package/dist/chunk-4OLM3KSB.js +2708 -0
  83. package/dist/chunk-4OLM3KSB.js.map +7 -0
  84. package/dist/chunk-54KC7DAB.js +178 -0
  85. package/dist/chunk-5D5YTFI2.js +783 -0
  86. package/dist/chunk-5DBW3WLK.js +129 -0
  87. package/dist/chunk-5ILEFNXJ.js +402 -0
  88. package/dist/chunk-5UO7MKCO.js +59 -0
  89. package/dist/chunk-7R7P6VMT.js +243 -0
  90. package/dist/chunk-7X6NF7NI.js +96 -0
  91. package/dist/chunk-ANGLZ4XR.js +26 -0
  92. package/dist/chunk-BMQDU7KN.js +38 -0
  93. package/dist/chunk-C5TU4AYP.js +281 -0
  94. package/dist/chunk-DBQA6QIJ.js +4311 -0
  95. package/dist/chunk-DHNET3P4.js +42 -0
  96. package/dist/chunk-EGKHDALO.js +382 -0
  97. package/dist/chunk-EPWGUWQP.js +34 -0
  98. package/dist/chunk-F3EYPES3.js +1339 -0
  99. package/dist/chunk-F4DM3WS4.js +194 -0
  100. package/dist/chunk-FTLCINDC.js +294 -0
  101. package/dist/chunk-GT6WJUJY.js +480 -0
  102. package/dist/chunk-GWCK5QGV.js +70 -0
  103. package/dist/chunk-HJSGHFJ6.js +464 -0
  104. package/dist/chunk-HS6BTSFX.js +49 -0
  105. package/dist/chunk-IB5TKNG5.js +5071 -0
  106. package/dist/chunk-IIMTOPH3.js +54 -0
  107. package/dist/chunk-ILEXRHF7.js +367 -0
  108. package/dist/chunk-ILEXRHF7.js.map +7 -0
  109. package/dist/chunk-IZUYLFOX.js +1608 -0
  110. package/dist/chunk-IZUYLFOX.js.map +7 -0
  111. package/dist/chunk-JAXN3Q3K.js +272 -0
  112. package/dist/chunk-K6PYTAXW.js +2853 -0
  113. package/dist/chunk-KIRZXPMB.js +141 -0
  114. package/dist/chunk-KT4OZVO3.js +1275 -0
  115. package/dist/chunk-L32KMIC3.js +54 -0
  116. package/dist/chunk-LB7NENEB.js +123 -0
  117. package/dist/chunk-LDWMVZYF.js +562 -0
  118. package/dist/chunk-M367Y7ML.js +140 -0
  119. package/dist/chunk-M4XXKTH2.js +339 -0
  120. package/dist/chunk-ME7OF3CS.js +176 -0
  121. package/dist/chunk-N2CXLMNX.js +626 -0
  122. package/dist/chunk-N7DVQTPC.js +119 -0
  123. package/dist/chunk-N7TD7N7D.js +518 -0
  124. package/dist/chunk-NBX6TT5C.js +299 -0
  125. package/dist/chunk-NLR7JIMM.js +1986 -0
  126. package/dist/chunk-NSRGYBDM.js +339 -0
  127. package/dist/chunk-NVS7KYYI.js +379 -0
  128. package/dist/chunk-OVPEMVXT.js +397 -0
  129. package/dist/chunk-OXWLQQXL.js +274 -0
  130. package/dist/chunk-Q5SK3U2T.js +24163 -0
  131. package/dist/chunk-Q5SK3U2T.js.map +7 -0
  132. package/dist/chunk-QGGSYEVJ.js +55 -0
  133. package/dist/chunk-QLEVONLD.js +50 -0
  134. package/dist/chunk-RFW5BRIZ.js +1233 -0
  135. package/dist/chunk-RFW5BRIZ.js.map +7 -0
  136. package/dist/chunk-RNWHB5DI.js +98 -0
  137. package/dist/chunk-RPDVFM7E.js +2133 -0
  138. package/dist/chunk-RUHLDUOT.js +203 -0
  139. package/dist/chunk-RV34WFGZ.js +197 -0
  140. package/dist/chunk-SDVE5ECI.js +6360 -0
  141. package/dist/chunk-SWO6DZTG.js +170 -0
  142. package/dist/chunk-SYPSS3JQ.js +387 -0
  143. package/dist/chunk-TDM3645O.js +2327 -0
  144. package/dist/chunk-VVO3R5JV.js +217 -0
  145. package/dist/chunk-VYEU6Y35.js +14 -0
  146. package/dist/chunk-WGXC6IEF.js +263 -0
  147. package/dist/chunk-WPDM57B5.js +1720 -0
  148. package/dist/chunk-WS7WKS2B.js +2784 -0
  149. package/dist/chunk-X63NSV33.js +276 -0
  150. package/dist/chunk-XXNRSSBR.js +56 -0
  151. package/dist/chunk-YD6UGDFI.js +102 -0
  152. package/dist/chunk-YRIYDFNU.js +160 -0
  153. package/dist/chunk-YY5WQQ3J.js +194 -0
  154. package/dist/chunk-Z2ZITHT4.js +4195 -0
  155. package/dist/chunk-Z4SM3FBK.js +302 -0
  156. package/dist/chunk-ZEYEIUEZ.js +240 -0
  157. package/dist/chunk-ZLYTDHQP.js +677 -0
  158. package/dist/chunk-ZWCVRVV4.js +550 -0
  159. package/dist/cohort-FZNMFWOX.js +70 -0
  160. package/dist/condition-AJJLFCBQ.js +327 -0
  161. package/dist/controls-SZOLV37V.js +34 -0
  162. package/dist/controls.config-CVP75WFA.js +34 -0
  163. package/dist/correlation-UFJFQHQ3.js +95 -0
  164. package/dist/customdata.inputui-HOVA4A6O.js +284 -0
  165. package/dist/dataDownload-VTUG4IOK.js +329 -0
  166. package/dist/databrowser.ui-O5S4Y4EK.js +425 -0
  167. package/dist/dictionary-L2UNNNP7.js +113 -0
  168. package/dist/dnaMethylation-B4SWZI4O.js +33 -0
  169. package/dist/dnaMethylation.integration.spec-ANJAMNYJ.js +198 -0
  170. package/dist/dofetch-F5XSHQIS.js +48 -0
  171. package/dist/e2pca-66ARIMKL.js +344 -0
  172. package/dist/ep-OFGJYVUY.js +1249 -0
  173. package/dist/expclust.gdc.spec-22RXQTTP.js +302 -0
  174. package/dist/facet-GVZQ3RPN.js +519 -0
  175. package/dist/gb-HEPGVYEK.js +81 -0
  176. package/dist/geneExpClustering-3NU2U422.js +244 -0
  177. package/dist/geneExpression-FXQ4L2J2.js +310 -0
  178. package/dist/geneExpression-XYVYJJA5.js +33 -0
  179. package/dist/geneExpression.unit.spec-K3FIRSNK.js +99 -0
  180. package/dist/geneORA-5M2JSDMF.js +273 -0
  181. package/dist/geneRanking-TP3R3CS3.js +548 -0
  182. package/dist/geneVariant-232EYUFJ.js +36 -0
  183. package/dist/geneVariant-BHXTPUDC.js +286 -0
  184. package/dist/geneVariant.integration.spec-ICFHVFIR.js +388 -0
  185. package/dist/genefusion.ui-ABRCUQFC.js +303 -0
  186. package/dist/geneset-N42FIVA6.js +203 -0
  187. package/dist/genomeBrowser.spec-5HKQKLRU.js +276 -0
  188. package/dist/grin2-H2KJYLP6.js +1137 -0
  189. package/dist/grin2-NGMTEMXF.js +70 -0
  190. package/dist/hierCluster-JU5JPLM7.js +55 -0
  191. package/dist/hierCluster-LSSH275H.js +59 -0
  192. package/dist/hierCluster.config-ILOR7GBB.js +36 -0
  193. package/dist/hierCluster.integration.spec-CNR5OJOH.js +483 -0
  194. package/dist/hierCluster.interactivity-TLEIVTFK.js +49 -0
  195. package/dist/hierCluster.renderers-P7JNIT3N.js +19 -0
  196. package/dist/imagePlot-BF67SXQR.js +156 -0
  197. package/dist/importPlot-OHXSXNZN.js +8 -0
  198. package/dist/isoformExpression-4VKHE4HA.js +35 -0
  199. package/dist/isoformExpression.unit.spec-4TVSIFG4.js +237 -0
  200. package/dist/junction-VUHORV43.js +36 -0
  201. package/dist/junction.customTerm-FRYWSS4P.js +16 -0
  202. package/dist/junction.unit.spec-KKVLYT7Q.js +182 -0
  203. package/dist/launch.adhoc-UDYMFZTQ.js +37 -0
  204. package/dist/leftlabel.sample-R5FFBWG3.js +258 -0
  205. package/dist/legacyDataset-IEFWFVS6.js +117 -0
  206. package/dist/lollipop-3IX6ZYUN.js +166 -0
  207. package/dist/maf-42UFYSL4.js +455 -0
  208. package/dist/maftimeline-M5WYEN62.js +587 -0
  209. package/dist/matrix-CI76EDHU.js +54 -0
  210. package/dist/matrix-WJZKA6VR.js +59 -0
  211. package/dist/matrix.cells-ZFKVIPDC.js +26 -0
  212. package/dist/matrix.config-24TFHBEM.js +37 -0
  213. package/dist/matrix.data-NCGZPNWR.js +23 -0
  214. package/dist/matrix.groups-XQJTGM6M.js +26 -0
  215. package/dist/matrix.integration.spec-OGXZUDE6.js +3160 -0
  216. package/dist/matrix.interactivity-ZOOTPNSW.js +37 -0
  217. package/dist/matrix.layout-5J2YENK3.js +39 -0
  218. package/dist/matrix.legend-U36VCS46.js +20 -0
  219. package/dist/matrix.renderers-4KFE7ZVR.js +34 -0
  220. package/dist/matrix.serieses-AW7XBXLJ.js +19 -0
  221. package/dist/matrix.sort-7PMECLOE.js +26 -0
  222. package/dist/matrix.sort.unit.spec-GIA2YOTQ.js +468 -0
  223. package/dist/matrix.sorterUi-J6PRUT6J.js +16 -0
  224. package/dist/matrix.sorterUi.unit.spec-OPGKZZL6.js +338 -0
  225. package/dist/matrix.unit.spec-7UIVVR4T.js +150 -0
  226. package/dist/mavb-MSYUMT6W.js +727 -0
  227. package/dist/mds.fimo-OYEAQP37.js +513 -0
  228. package/dist/mds.samplescatterplot-EXISSRQQ.js +1545 -0
  229. package/dist/mds.survivalplot-SZST6BLN.js +477 -0
  230. package/dist/multivalue-YDE7L75Y.js +83 -0
  231. package/dist/numericDictTermCluster-5AKP6ICC.js +63 -0
  232. package/dist/oncomatrix-2OEIYWR6.js +290 -0
  233. package/dist/oncomatrix.spec-CXQW4JWU.js +443 -0
  234. package/dist/plot.2dvaf-LN7A3NNC.js +372 -0
  235. package/dist/plot.app-YIQOY2Z7.js +36 -0
  236. package/dist/plot.barplot-HF2J25XP.js +97 -0
  237. package/dist/plot.boxplot-YJH4L27U.js +146 -0
  238. package/dist/plot.brainImaging-PS4TRSPI.js +51 -0
  239. package/dist/plot.disco-BN5RNZ6Q.js +99 -0
  240. package/dist/plot.ssgq-N2HTOIY3.js +134 -0
  241. package/dist/plot.vaf2cov-6AOHRUQ2.js +253 -0
  242. package/dist/polar2-TC5OEJRE.js +232 -0
  243. package/dist/profileForms-5WV2TSBB.js +941 -0
  244. package/dist/profilePlot-OJLLW44P.js +49 -0
  245. package/dist/proteinView-CGNAJN4S.js +1357 -0
  246. package/dist/proteinView-CGNAJN4S.js.map +7 -0
  247. package/dist/proteomeCohortCompare-XXQGGVCF.js +912 -0
  248. package/dist/proteomeCohortCompare-XXQGGVCF.js.map +7 -0
  249. package/dist/pseudbulk.unit.spec-RAYRGN6C.js +86 -0
  250. package/dist/pseudobulk-ADHAYVSQ.js +35 -0
  251. package/dist/qualitative-JXEI3IYC.js +38 -0
  252. package/dist/radar2-BWTKSTT3.js +327 -0
  253. package/dist/radarFacility2-WIRSKTDG.js +335 -0
  254. package/dist/rememberedGvQ.unit.spec-N43O4YTF.js +211 -0
  255. package/dist/render-J7WOYBOL.js +33 -0
  256. package/dist/report-DRPCXX2B.js +217 -0
  257. package/dist/sampleView-BV6BQGGQ.js +43 -0
  258. package/dist/samplelst-ZD63EYO7.js +106 -0
  259. package/dist/samplematrix-ZZ3DVELU.js +2193 -0
  260. package/dist/sc-MUI43YTB.js +81 -0
  261. package/dist/scatter-7B44HTKN.js +88 -0
  262. package/dist/scatter-UEDVIE4Y.js +880 -0
  263. package/dist/selectGenomeWithTklst-WGOKGVZ5.js +129 -0
  264. package/dist/singleCellCellType-Z7OXK7PI.js +33 -0
  265. package/dist/singleCellCellType.unit.spec-IIOVCCJQ.js +154 -0
  266. package/dist/singleCellGeneExpression-LYZAIJ2Z.js +33 -0
  267. package/dist/singleCellGeneExpression.unit.spec-67AAWZTG.js +148 -0
  268. package/dist/singleCellPlot-TXPYQLSH.js +49 -0
  269. package/dist/singlecell-22OG6HNI.js +1566 -0
  270. package/dist/singlecell-7TBALI2S.js +81 -0
  271. package/dist/snp-3U2G3Z57.js +33 -0
  272. package/dist/snp.unit.spec-BMBBUBYD.js +171 -0
  273. package/dist/snplocus-SSVZDIQV.js +203 -0
  274. package/dist/spliceevent.a53ss.diagram-FK7CN4AU.js +146 -0
  275. package/dist/spliceevent.exonskip.diagram-EFLGV3O4.js +278 -0
  276. package/dist/spliceevent.noeventdiagram-2DYO7CCZ.js +455 -0
  277. package/dist/ssGSEA-52LWBQJP.js +33 -0
  278. package/dist/ssGSEA.unit.spec-3JV6WHUQ.js +83 -0
  279. package/dist/stattable-RLMYQ4G6.js +117 -0
  280. package/dist/studyCatalog-DKB3U7EV.js +414 -0
  281. package/dist/studyCatalog-DKB3U7EV.js.map +7 -0
  282. package/dist/summarizeCnvGeneexp-QPRYAKC2.js +158 -0
  283. package/dist/summarizeGeneexpSurvival-RWVQXEKB.js +105 -0
  284. package/dist/summarizeMutationCnv-DW5F6NUJ.js +159 -0
  285. package/dist/summarizeMutationDiagnosis-5FOQ7CHI.js +35 -0
  286. package/dist/summarizeMutationSurvival-4UKB4EVO.js +99 -0
  287. package/dist/summary-TYC6QNT4.js +42 -0
  288. package/dist/summary.integration.spec-5GLJJZNM.js +409 -0
  289. package/dist/summaryInput-4IJGKW4P.js +242 -0
  290. package/dist/sunburst-G7DGATWP.js +278 -0
  291. package/dist/survival-IHM6A7LL.js +1248 -0
  292. package/dist/survival-MKNABJPU.js +53 -0
  293. package/dist/survival.integration.spec-THOKI3DL.js +613 -0
  294. package/dist/survival.integration.spec-THOKI3DL.js.map +7 -0
  295. package/dist/svgraph-VB7JWWR5.js +1382 -0
  296. package/dist/svmr-VLQIO2U5.js +3837 -0
  297. package/dist/table-EAXMDWOY.js +197 -0
  298. package/dist/termCollection-5LG7ICQY.js +252 -0
  299. package/dist/termCollection-SB6MWLFK.js +33 -0
  300. package/dist/termCollection.unit.spec-H5ITGTR3.js +299 -0
  301. package/dist/termCollectionFractionSelection-2XZSTDCQ.js +42 -0
  302. package/dist/termCollectionFractionSelection.unit.spec-BIO7V6KA.js +188 -0
  303. package/dist/tk-TRWYZLQ2.js +1121 -0
  304. package/dist/tk-VZI5HNSX.js +41 -0
  305. package/dist/tp.ui-J5SNNAT3.js +1454 -0
  306. package/dist/tvs.dt-6YHFJPER.js +34 -0
  307. package/dist/tvs.dtcnv.categorical-WTIE63GM.js +35 -0
  308. package/dist/tvs.dtcnv.continuous-OCMKGTF5.js +67 -0
  309. package/dist/tvs.dtfusion-CA23UNM3.js +35 -0
  310. package/dist/tvs.dtitd-VSYMR3OD.js +35 -0
  311. package/dist/tvs.dtsnvindel-YBNO3CYF.js +35 -0
  312. package/dist/tvs.dtsv-S743GBB5.js +35 -0
  313. package/dist/tvs.numeric-22AHXO5K.js +20 -0
  314. package/dist/tvs.samplelst-XAJO4EM6.js +98 -0
  315. package/dist/tvs.termCollection-QOVJGAUC.js +124 -0
  316. package/dist/vocabulary-6EADTHP3.js +36 -0
  317. package/dist/wsi.direct-2WB2NGC5.js +8184 -0
  318. package/package.json +3 -3
  319. package/dist/2dmaf-ZQ7ACPAD.js +0 -1367
  320. package/dist/AggMatrixInput-EACGUIQA.js +0 -277
  321. package/dist/AggregateMatrix-TC5DTSYN.js +0 -41
  322. package/dist/AppHeader-PHI6US5B.js +0 -830
  323. package/dist/BoxPlot-QWKK3IJ7.js +0 -1211
  324. package/dist/CorrelationVolcano-QJJN7FVP.js +0 -614
  325. package/dist/Cuminc-6F2C5C4E.js +0 -1219
  326. package/dist/DE-HRJH6ZQL.js +0 -89
  327. package/dist/DEinput-T3MPAYPH.js +0 -499
  328. package/dist/DM-PEG4ED2X.js +0 -90
  329. package/dist/DifferentialAnalysis-XGXHWGPI.js +0 -237
  330. package/dist/Disco-7SRTTB3X.js +0 -3389
  331. package/dist/Disco.UI-CKKZ5MMK.js +0 -243
  332. package/dist/DmrPlot-N4CT4J2I.js +0 -637
  333. package/dist/GB-NVCLPRWN.js +0 -1391
  334. package/dist/GSEA-UZUNJG7Z.js +0 -851
  335. package/dist/GeneExpInput-3MDN2CAW.js +0 -362
  336. package/dist/Geomap-ZUF2PE5A.js +0 -84
  337. package/dist/HicApp-OIJT5TFU.js +0 -2245
  338. package/dist/IDCViewer-ZSH2E57L.js +0 -10812
  339. package/dist/NumBinaryEditor-74ZPGT7L.js +0 -279
  340. package/dist/NumBinaryEditor.unit.spec-T2I66SO5.js +0 -312
  341. package/dist/NumContEditor-M2GARZXM.js +0 -105
  342. package/dist/NumContEditor.unit.spec-G2QBBNH7.js +0 -164
  343. package/dist/NumCustomBinEditor-P44G67KS.js +0 -33
  344. package/dist/NumCustomBinEditor.unit.spec-AZHJN3V6.js +0 -397
  345. package/dist/NumDiscreteEditor-VOZ63LZY.js +0 -170
  346. package/dist/NumDiscreteEditor.unit.spec-CFSVPNBA.js +0 -233
  347. package/dist/NumRegularBinEditor-I6GJQR7W.js +0 -33
  348. package/dist/NumRegularBinEditor.unit.spec-IDJE7H6S.js +0 -278
  349. package/dist/NumSplineEditor-BCGWE52A.js +0 -210
  350. package/dist/NumSplineEditor.unit.spec-YQAL7L2E.js +0 -224
  351. package/dist/NumericDensity-P25W63RV.js +0 -33
  352. package/dist/NumericDensity.unit.spec-N7CQ5W5L.js +0 -418
  353. package/dist/NumericHandler-R7JWIFEO.js +0 -34
  354. package/dist/NumericHandler.unit.spec-LMGIAGZJ.js +0 -214
  355. package/dist/ProteomeInput-PRYKKF5E.js +0 -388
  356. package/dist/Regression-PSHH7ZXN.js +0 -1416
  357. package/dist/RunChart2-KJ2UWVCE.js +0 -749
  358. package/dist/SC-R6ZIJZ6F.js +0 -1107
  359. package/dist/Violin-GTQAUJ7B.js +0 -1082
  360. package/dist/Volcano-NER64J7W.js +0 -1649
  361. package/dist/Wsi-GXNGL7O6.js +0 -431
  362. package/dist/adSandbox-SXSHVG4P.js +0 -33
  363. package/dist/animatedBubbleChart-Q4NEETEH.js +0 -547
  364. package/dist/app-MX4PL2QO.js +0 -42
  365. package/dist/app-R5CTEVAC.js +0 -32
  366. package/dist/bam-45N3FEEM.js +0 -876
  367. package/dist/barchart-YCTKQJQX.js +0 -42
  368. package/dist/barchart2-252GS3CA.js +0 -309
  369. package/dist/block-CR75JHV3.js +0 -6249
  370. package/dist/block.init-U3JMED2E.js +0 -33
  371. package/dist/block.mds.expressionrank-TAN3BDPS.js +0 -354
  372. package/dist/block.mds.geneboxplot-EN344GEP.js +0 -823
  373. package/dist/block.mds.junction-RFVVJUTR.js +0 -1539
  374. package/dist/block.mds.svcnv-SSUMXEWD.js +0 -6796
  375. package/dist/block.svg-LRPGNFFI.js +0 -159
  376. package/dist/block.tk.aicheck-YY23FT2G.js +0 -278
  377. package/dist/block.tk.ase-JCGPFKFT.js +0 -360
  378. package/dist/block.tk.bam-NZDC4H7Y.js +0 -1901
  379. package/dist/block.tk.bedgraphdot-NCNZPZH6.js +0 -379
  380. package/dist/block.tk.bigwig.ui-Z7G6ZITU.js +0 -206
  381. package/dist/block.tk.hicstraw-VVDP4UF5.js +0 -818
  382. package/dist/block.tk.junction-L4YBPAHM.js +0 -2358
  383. package/dist/block.tk.junction.textmatrixui-6CMKKUB5.js +0 -194
  384. package/dist/block.tk.ld-VCP2R5UO.js +0 -94
  385. package/dist/block.tk.menu-ZJYGMEDX.js +0 -1024
  386. package/dist/block.tk.pgv-M5WNUIVS.js +0 -938
  387. package/dist/brainImaging-JGECJHZO.js +0 -515
  388. package/dist/brainRegions-NTEAXNZJ.js +0 -234
  389. package/dist/brainRegions-NTEAXNZJ.js.map +0 -7
  390. package/dist/bubbleHeatmap-7DQNWBQ2.js +0 -378
  391. package/dist/cellTypeBubbleHeatmap-LAE7U3RF.js +0 -278
  392. package/dist/chunk-2AQT3ZWL.js +0 -626
  393. package/dist/chunk-2GLNPB5J.js +0 -203
  394. package/dist/chunk-2O4CS3EZ.js +0 -274
  395. package/dist/chunk-2Z4ZSINZ.js +0 -323
  396. package/dist/chunk-2Z4ZSINZ.js.map +0 -7
  397. package/dist/chunk-3MFFZRH3.js +0 -6360
  398. package/dist/chunk-3PHXBY3Z.js +0 -1275
  399. package/dist/chunk-4AQQ3BXD.js +0 -70
  400. package/dist/chunk-4PPZYVWZ.js +0 -281
  401. package/dist/chunk-4WEA7HHH.js +0 -26
  402. package/dist/chunk-57NYHASA.js +0 -38
  403. package/dist/chunk-5AAAH4OZ.js +0 -141
  404. package/dist/chunk-5BCNVZIW.js +0 -480
  405. package/dist/chunk-6JBLNS4D.js +0 -387
  406. package/dist/chunk-6JBQLOJW.js +0 -1339
  407. package/dist/chunk-756KZF5Y.js +0 -158
  408. package/dist/chunk-ABTO5QSB.js +0 -276
  409. package/dist/chunk-ALEZQQOK.js +0 -299
  410. package/dist/chunk-APK7TUJX.js +0 -102
  411. package/dist/chunk-AQAFURQM.js +0 -59
  412. package/dist/chunk-BEJJS2HC.js +0 -194
  413. package/dist/chunk-CZ5QLVWK.js +0 -49
  414. package/dist/chunk-D2MZT7CC.js +0 -176
  415. package/dist/chunk-D6G64XPJ.js +0 -96
  416. package/dist/chunk-DE3F7FAP.js +0 -34
  417. package/dist/chunk-DF3IMIR2.js +0 -464
  418. package/dist/chunk-E4WIMTK4.js +0 -446
  419. package/dist/chunk-E7TJXNIL.js +0 -42
  420. package/dist/chunk-G3JNTWCX.js +0 -103
  421. package/dist/chunk-GN2IIC6U.js +0 -160
  422. package/dist/chunk-GRI74AXV.js +0 -294
  423. package/dist/chunk-HDTFYTEL.js +0 -2694
  424. package/dist/chunk-HDTFYTEL.js.map +0 -7
  425. package/dist/chunk-IAE3KWN5.js +0 -550
  426. package/dist/chunk-IB4NE4SI.js +0 -397
  427. package/dist/chunk-IK2BO37K.js +0 -1608
  428. package/dist/chunk-IK2BO37K.js.map +0 -7
  429. package/dist/chunk-IS4VLUEX.js +0 -382
  430. package/dist/chunk-J2DICGKC.js +0 -194
  431. package/dist/chunk-J7JDCNLU.js +0 -24141
  432. package/dist/chunk-J7JDCNLU.js.map +0 -7
  433. package/dist/chunk-JBUEQ4E6.js +0 -263
  434. package/dist/chunk-JIDJBM2R.js +0 -2676
  435. package/dist/chunk-JNVWSFNC.js +0 -54
  436. package/dist/chunk-JYOIO5UY.js +0 -2133
  437. package/dist/chunk-KAFDQKN7.js +0 -1720
  438. package/dist/chunk-L743GRJE.js +0 -783
  439. package/dist/chunk-LGOTIL62.js +0 -54
  440. package/dist/chunk-LHP7RXET.js +0 -243
  441. package/dist/chunk-LK2GHBUH.js +0 -123
  442. package/dist/chunk-MAVDQAZE.js +0 -518
  443. package/dist/chunk-MKT4OJ3G.js +0 -102
  444. package/dist/chunk-N635HDJ4.js +0 -178
  445. package/dist/chunk-NFAE6VNU.js +0 -2327
  446. package/dist/chunk-NG7K5KYO.js +0 -56
  447. package/dist/chunk-NXVUL3EY.js +0 -2853
  448. package/dist/chunk-ODMLC5FN.js +0 -55
  449. package/dist/chunk-OJ4TDGPQ.js +0 -339
  450. package/dist/chunk-OXLBPSJ6.js +0 -379
  451. package/dist/chunk-P5GRGXH4.js +0 -98
  452. package/dist/chunk-POWG4MPT.js +0 -31
  453. package/dist/chunk-Q25DABNW.js +0 -217
  454. package/dist/chunk-QHJGWCH3.js +0 -4311
  455. package/dist/chunk-R5OIIFSF.js +0 -197
  456. package/dist/chunk-RJFCT67B.js +0 -2784
  457. package/dist/chunk-RN4BOWRH.js +0 -402
  458. package/dist/chunk-RZFJ6K77.js +0 -302
  459. package/dist/chunk-S5UN4VIQ.js +0 -272
  460. package/dist/chunk-SDMNZJ7X.js +0 -50
  461. package/dist/chunk-SWZAHJYP.js +0 -170
  462. package/dist/chunk-SY63UUF7.js +0 -562
  463. package/dist/chunk-T46FA72N.js +0 -119
  464. package/dist/chunk-TBPVP3KZ.js +0 -1986
  465. package/dist/chunk-UM5NWVMA.js +0 -140
  466. package/dist/chunk-VIBK253J.js +0 -134
  467. package/dist/chunk-XKL2D2NN.js +0 -240
  468. package/dist/chunk-XXJT7DSL.js +0 -677
  469. package/dist/chunk-YHA3AYAM.js +0 -5071
  470. package/dist/chunk-YLJOZP4P.js +0 -4195
  471. package/dist/chunk-YN5NY3D3.js +0 -339
  472. package/dist/chunk-YX6FIREB.js +0 -14
  473. package/dist/chunk-ZXU4ALLZ.js +0 -129
  474. package/dist/cohort-75FUW3UO.js +0 -70
  475. package/dist/condition-VW43Q6ZE.js +0 -327
  476. package/dist/controls-HOP2AFHD.js +0 -34
  477. package/dist/controls.config-CMIFSKQE.js +0 -34
  478. package/dist/correlation-PN7BS5OR.js +0 -95
  479. package/dist/customdata.inputui-ZBZX63PS.js +0 -284
  480. package/dist/dataDownload-LGA4LAUF.js +0 -329
  481. package/dist/databrowser.ui-IQRDVL66.js +0 -425
  482. package/dist/dictionary-BPWD77LJ.js +0 -113
  483. package/dist/dnaMethylation-A3XPPBBB.js +0 -33
  484. package/dist/dnaMethylation.integration.spec-554ITDQC.js +0 -198
  485. package/dist/dofetch-FQ42AX7C.js +0 -48
  486. package/dist/e2pca-F3GWG7WZ.js +0 -344
  487. package/dist/ep-QAVN472H.js +0 -1249
  488. package/dist/expclust.gdc.spec-DQNX7FTL.js +0 -302
  489. package/dist/facet-DH7OOZTJ.js +0 -519
  490. package/dist/gb-OCXOLAMD.js +0 -81
  491. package/dist/geneExpClustering-DWYRZGTS.js +0 -244
  492. package/dist/geneExpression-2NKSKZR6.js +0 -33
  493. package/dist/geneExpression-BGFR3KQE.js +0 -310
  494. package/dist/geneExpression.unit.spec-63EKKMET.js +0 -99
  495. package/dist/geneORA-BED6XL4D.js +0 -273
  496. package/dist/geneRanking-UB5RCQNP.js +0 -548
  497. package/dist/geneVariant-WJEONTTY.js +0 -286
  498. package/dist/geneVariant-Y4C2FPJK.js +0 -36
  499. package/dist/geneVariant.integration.spec-VFYLC47N.js +0 -388
  500. package/dist/genefusion.ui-P3NBIMLE.js +0 -303
  501. package/dist/geneset-O22RQAED.js +0 -203
  502. package/dist/genomeBrowser.spec-MM7WZUGI.js +0 -276
  503. package/dist/grin2-3YBIRKUT.js +0 -70
  504. package/dist/grin2-O637DNDS.js +0 -1137
  505. package/dist/hierCluster-3X3BQVNE.js +0 -59
  506. package/dist/hierCluster-7P7M75TU.js +0 -55
  507. package/dist/hierCluster.config-XFUOLLDK.js +0 -36
  508. package/dist/hierCluster.integration.spec-HKYGSDDG.js +0 -483
  509. package/dist/hierCluster.interactivity-JUZSWCM7.js +0 -49
  510. package/dist/hierCluster.renderers-NGPPAYFM.js +0 -19
  511. package/dist/imagePlot-LKGAFJO7.js +0 -156
  512. package/dist/importPlot-SRWQA2FH.js +0 -8
  513. package/dist/isoformExpression-RYIZQIVX.js +0 -35
  514. package/dist/isoformExpression.unit.spec-DP4ECITF.js +0 -237
  515. package/dist/junction-D7QQ3YSG.js +0 -36
  516. package/dist/junction.customTerm-ZEVNCVU7.js +0 -16
  517. package/dist/junction.unit.spec-6MAKIB3R.js +0 -182
  518. package/dist/launch.adhoc-FAHRZFYG.js +0 -37
  519. package/dist/leftlabel.sample-PDZLWLJ4.js +0 -258
  520. package/dist/legacyDataset-27L4DMCL.js +0 -117
  521. package/dist/lollipop-VWGJUHNX.js +0 -166
  522. package/dist/maf-W52H44WK.js +0 -455
  523. package/dist/maftimeline-5JV3HZLE.js +0 -587
  524. package/dist/matrix-CEVGKXSK.js +0 -54
  525. package/dist/matrix-EXNYXYLK.js +0 -59
  526. package/dist/matrix.cells-DVPWSLJW.js +0 -26
  527. package/dist/matrix.config-RLSTWDXC.js +0 -37
  528. package/dist/matrix.data-Z6GUACVZ.js +0 -23
  529. package/dist/matrix.groups-3ZSTUWRK.js +0 -26
  530. package/dist/matrix.integration.spec-4U2R3UB2.js +0 -3160
  531. package/dist/matrix.interactivity-DJZFQ7DN.js +0 -37
  532. package/dist/matrix.layout-RQJ6VB4P.js +0 -39
  533. package/dist/matrix.legend-YQ36NWKW.js +0 -20
  534. package/dist/matrix.renderers-MWDFI6HW.js +0 -34
  535. package/dist/matrix.serieses-LTC4RLYD.js +0 -19
  536. package/dist/matrix.sort-5VFYLABY.js +0 -26
  537. package/dist/matrix.sort.unit.spec-2RUEKUT4.js +0 -468
  538. package/dist/matrix.sorterUi-EEMYZLPI.js +0 -16
  539. package/dist/matrix.sorterUi.unit.spec-ZXGSPRFZ.js +0 -338
  540. package/dist/matrix.unit.spec-HTF6UV4L.js +0 -150
  541. package/dist/mavb-GGQRDCO6.js +0 -727
  542. package/dist/mds.fimo-YKV5OIYV.js +0 -513
  543. package/dist/mds.samplescatterplot-RQOEW2AW.js +0 -1545
  544. package/dist/mds.survivalplot-TN636DED.js +0 -477
  545. package/dist/multivalue-MDQY64EH.js +0 -83
  546. package/dist/numericDictTermCluster-E73TJCLI.js +0 -63
  547. package/dist/oncomatrix-AENXQMLL.js +0 -290
  548. package/dist/oncomatrix.spec-UD6U462U.js +0 -443
  549. package/dist/plot.2dvaf-XMRV6KEG.js +0 -372
  550. package/dist/plot.app-A6JKLYQQ.js +0 -36
  551. package/dist/plot.barplot-UIX7LVWR.js +0 -97
  552. package/dist/plot.boxplot-DIFWVLMA.js +0 -146
  553. package/dist/plot.brainImaging-ZRPVE2UK.js +0 -51
  554. package/dist/plot.disco-I56MT3PC.js +0 -99
  555. package/dist/plot.ssgq-FCKFSZTV.js +0 -134
  556. package/dist/plot.vaf2cov-E5C7RJ7Z.js +0 -253
  557. package/dist/polar2-SKVBB4FD.js +0 -232
  558. package/dist/profileForms-5B3MTUNP.js +0 -941
  559. package/dist/profilePlot-MCYCGEWT.js +0 -49
  560. package/dist/proteinView-5X55JWVL.js +0 -1562
  561. package/dist/proteinView-5X55JWVL.js.map +0 -7
  562. package/dist/proteomeCohortCompare-WZBMBLFD.js +0 -780
  563. package/dist/proteomeCohortCompare-WZBMBLFD.js.map +0 -7
  564. package/dist/pseudbulk.unit.spec-Q4YTIPH7.js +0 -86
  565. package/dist/pseudobulk-3UIWCCCQ.js +0 -35
  566. package/dist/qualitative-6TJRXZFV.js +0 -38
  567. package/dist/radar2-6X4XW5IZ.js +0 -327
  568. package/dist/radarFacility2-UVPXWPV5.js +0 -335
  569. package/dist/rememberedGvQ.unit.spec-GVRFRVSO.js +0 -211
  570. package/dist/render-G7V6R4PV.js +0 -33
  571. package/dist/report-O7D46EKQ.js +0 -217
  572. package/dist/sampleView-6Y3OOOMW.js +0 -43
  573. package/dist/samplelst-JRVC4GYC.js +0 -106
  574. package/dist/samplematrix-VP5RQVRH.js +0 -2193
  575. package/dist/sc-BPHVEP6N.js +0 -81
  576. package/dist/scatter-2YYRZCSW.js +0 -88
  577. package/dist/scatter-Y4BIG2PW.js +0 -880
  578. package/dist/selectGenomeWithTklst-2BVZU5SW.js +0 -129
  579. package/dist/singleCellCellType-XBGCSIQT.js +0 -33
  580. package/dist/singleCellCellType.unit.spec-T4GFRLVZ.js +0 -154
  581. package/dist/singleCellGeneExpression-5ZPWLSVW.js +0 -33
  582. package/dist/singleCellGeneExpression.unit.spec-4O5UBUDU.js +0 -148
  583. package/dist/singleCellPlot-CZLQBGVU.js +0 -49
  584. package/dist/singlecell-IIUYX7OG.js +0 -1566
  585. package/dist/singlecell-O3P5BLWT.js +0 -81
  586. package/dist/snp-ZCYBF3ZQ.js +0 -33
  587. package/dist/snp.unit.spec-TAGD2DRL.js +0 -171
  588. package/dist/snplocus-TL25OOPE.js +0 -203
  589. package/dist/spliceevent.a53ss.diagram-I7J4PQZT.js +0 -146
  590. package/dist/spliceevent.exonskip.diagram-SB4454HB.js +0 -278
  591. package/dist/spliceevent.noeventdiagram-FOSDNYLH.js +0 -455
  592. package/dist/ssGSEA-WANB2X5L.js +0 -33
  593. package/dist/ssGSEA.unit.spec-4XXWU4XV.js +0 -83
  594. package/dist/stattable-FNTJLVNB.js +0 -117
  595. package/dist/studyCatalog-7KEOFLO2.js +0 -378
  596. package/dist/studyCatalog-7KEOFLO2.js.map +0 -7
  597. package/dist/summarizeCnvGeneexp-P4AFZMKD.js +0 -158
  598. package/dist/summarizeGeneexpSurvival-YL2J7F4R.js +0 -105
  599. package/dist/summarizeMutationCnv-BHBHST5F.js +0 -159
  600. package/dist/summarizeMutationDiagnosis-Z7ZHTV27.js +0 -35
  601. package/dist/summarizeMutationSurvival-PZ4TYHT7.js +0 -99
  602. package/dist/summary-ZMNPO65S.js +0 -42
  603. package/dist/summary.integration.spec-DPJR2ZBE.js +0 -409
  604. package/dist/summaryInput-6JUFJZ5P.js +0 -242
  605. package/dist/sunburst-OWAUI3HC.js +0 -278
  606. package/dist/survival-6JPKG3VA.js +0 -53
  607. package/dist/survival-7EXICNK7.js +0 -1248
  608. package/dist/survival.integration.spec-A6NUJLL6.js +0 -613
  609. package/dist/survival.integration.spec-A6NUJLL6.js.map +0 -7
  610. package/dist/svgraph-34IKFHUS.js +0 -1382
  611. package/dist/svmr-4XNPSVVQ.js +0 -3837
  612. package/dist/table-LPZATFLC.js +0 -197
  613. package/dist/termCollection-DYY5FXU5.js +0 -252
  614. package/dist/termCollection-WOAUFFIC.js +0 -33
  615. package/dist/termCollection.unit.spec-WTICTZ7H.js +0 -299
  616. package/dist/termCollectionFractionSelection-K5HPDEFP.js +0 -42
  617. package/dist/termCollectionFractionSelection.unit.spec-D7DG2HOI.js +0 -188
  618. package/dist/tk-DD2LWVGM.js +0 -1121
  619. package/dist/tk-NV7NBLT6.js +0 -41
  620. package/dist/tp.ui-B5J3UUVB.js +0 -1454
  621. package/dist/tvs.dt-XLKQT64T.js +0 -34
  622. package/dist/tvs.dtcnv.categorical-XIC3RH2D.js +0 -35
  623. package/dist/tvs.dtcnv.continuous-OA2K4LHF.js +0 -67
  624. package/dist/tvs.dtfusion-ZGNKALZB.js +0 -35
  625. package/dist/tvs.dtitd-6QSG4E34.js +0 -35
  626. package/dist/tvs.dtsnvindel-5CXXOGPH.js +0 -35
  627. package/dist/tvs.dtsv-QYYEYUD3.js +0 -35
  628. package/dist/tvs.numeric-3UXW4JHJ.js +0 -20
  629. package/dist/tvs.samplelst-X77ODFFR.js +0 -98
  630. package/dist/tvs.termCollection-VXROWAPS.js +0 -124
  631. package/dist/vocabulary-DKWYTZRC.js +0 -36
  632. package/dist/wsi.direct-C3HQEC2V.js +0 -8184
  633. /package/dist/{2dmaf-ZQ7ACPAD.js.map → 2dmaf-5OYM4MXA.js.map} +0 -0
  634. /package/dist/{AggMatrixInput-EACGUIQA.js.map → AggMatrixInput-4VTI4Y6E.js.map} +0 -0
  635. /package/dist/{AggregateMatrix-TC5DTSYN.js.map → AggregateMatrix-K7SGNO63.js.map} +0 -0
  636. /package/dist/{AppHeader-PHI6US5B.js.map → AppHeader-WU6TO2OZ.js.map} +0 -0
  637. /package/dist/{BoxPlot-QWKK3IJ7.js.map → BoxPlot-OW7U3XTF.js.map} +0 -0
  638. /package/dist/{CorrelationVolcano-QJJN7FVP.js.map → CorrelationVolcano-B3JTTZHF.js.map} +0 -0
  639. /package/dist/{Cuminc-6F2C5C4E.js.map → Cuminc-AJEXWRU2.js.map} +0 -0
  640. /package/dist/{DE-HRJH6ZQL.js.map → DE-2J7DSRPC.js.map} +0 -0
  641. /package/dist/{DEinput-T3MPAYPH.js.map → DEinput-I7JWNOSD.js.map} +0 -0
  642. /package/dist/{DM-PEG4ED2X.js.map → DM-NQ46YPGF.js.map} +0 -0
  643. /package/dist/{DifferentialAnalysis-XGXHWGPI.js.map → DifferentialAnalysis-BFCQBX5J.js.map} +0 -0
  644. /package/dist/{Disco-7SRTTB3X.js.map → Disco-ZJLVQRTC.js.map} +0 -0
  645. /package/dist/{Disco.UI-CKKZ5MMK.js.map → Disco.UI-AEDACXW2.js.map} +0 -0
  646. /package/dist/{DmrPlot-N4CT4J2I.js.map → DmrPlot-QMRXAOM3.js.map} +0 -0
  647. /package/dist/{GB-NVCLPRWN.js.map → GB-MFU2UJ22.js.map} +0 -0
  648. /package/dist/{GSEA-UZUNJG7Z.js.map → GSEA-E3NHU22A.js.map} +0 -0
  649. /package/dist/{GeneExpInput-3MDN2CAW.js.map → GeneExpInput-MIUNSOPY.js.map} +0 -0
  650. /package/dist/{Geomap-ZUF2PE5A.js.map → Geomap-HAJG3STN.js.map} +0 -0
  651. /package/dist/{HicApp-OIJT5TFU.js.map → HicApp-ECFFIRWI.js.map} +0 -0
  652. /package/dist/{IDCViewer-ZSH2E57L.js.map → IDCViewer-TNSD3U2V.js.map} +0 -0
  653. /package/dist/{NumBinaryEditor-74ZPGT7L.js.map → NumBinaryEditor-CNBGZ6WY.js.map} +0 -0
  654. /package/dist/{NumBinaryEditor.unit.spec-T2I66SO5.js.map → NumBinaryEditor.unit.spec-SKFDALF3.js.map} +0 -0
  655. /package/dist/{NumContEditor-M2GARZXM.js.map → NumContEditor-7ID2U7JL.js.map} +0 -0
  656. /package/dist/{NumContEditor.unit.spec-G2QBBNH7.js.map → NumContEditor.unit.spec-XHSQSAWK.js.map} +0 -0
  657. /package/dist/{NumCustomBinEditor-P44G67KS.js.map → NumCustomBinEditor-PAIPRJPO.js.map} +0 -0
  658. /package/dist/{NumCustomBinEditor.unit.spec-AZHJN3V6.js.map → NumCustomBinEditor.unit.spec-QYVZMMHV.js.map} +0 -0
  659. /package/dist/{NumDiscreteEditor-VOZ63LZY.js.map → NumDiscreteEditor-K2NZZQTH.js.map} +0 -0
  660. /package/dist/{NumDiscreteEditor.unit.spec-CFSVPNBA.js.map → NumDiscreteEditor.unit.spec-3CG5VEQL.js.map} +0 -0
  661. /package/dist/{NumRegularBinEditor-I6GJQR7W.js.map → NumRegularBinEditor-EOVZ22TP.js.map} +0 -0
  662. /package/dist/{NumRegularBinEditor.unit.spec-IDJE7H6S.js.map → NumRegularBinEditor.unit.spec-FHTVH5FH.js.map} +0 -0
  663. /package/dist/{NumSplineEditor-BCGWE52A.js.map → NumSplineEditor-N3REMJUC.js.map} +0 -0
  664. /package/dist/{NumSplineEditor.unit.spec-YQAL7L2E.js.map → NumSplineEditor.unit.spec-DZCP35GL.js.map} +0 -0
  665. /package/dist/{NumericDensity-P25W63RV.js.map → NumericDensity-42MWVI2S.js.map} +0 -0
  666. /package/dist/{NumericDensity.unit.spec-N7CQ5W5L.js.map → NumericDensity.unit.spec-T2HHSQON.js.map} +0 -0
  667. /package/dist/{NumericHandler-R7JWIFEO.js.map → NumericHandler-5XU3SSPD.js.map} +0 -0
  668. /package/dist/{NumericHandler.unit.spec-LMGIAGZJ.js.map → NumericHandler.unit.spec-3F23KSAQ.js.map} +0 -0
  669. /package/dist/{ProteomeInput-PRYKKF5E.js.map → ProteomeInput-UN2BUNRO.js.map} +0 -0
  670. /package/dist/{Regression-PSHH7ZXN.js.map → Regression-HWLJENA5.js.map} +0 -0
  671. /package/dist/{RunChart2-KJ2UWVCE.js.map → RunChart2-YO55WE4M.js.map} +0 -0
  672. /package/dist/{SC-R6ZIJZ6F.js.map → SC-LEDJ4DQR.js.map} +0 -0
  673. /package/dist/{Violin-GTQAUJ7B.js.map → Violin-E6PDJZ2B.js.map} +0 -0
  674. /package/dist/{Volcano-NER64J7W.js.map → Volcano-XJTBWYUK.js.map} +0 -0
  675. /package/dist/{Wsi-GXNGL7O6.js.map → Wsi-S675CYTW.js.map} +0 -0
  676. /package/dist/{adSandbox-SXSHVG4P.js.map → adSandbox-ZJQ5ZW2T.js.map} +0 -0
  677. /package/dist/{animatedBubbleChart-Q4NEETEH.js.map → animatedBubbleChart-LRUS7W36.js.map} +0 -0
  678. /package/dist/{app-MX4PL2QO.js.map → app-7Q3QIBU4.js.map} +0 -0
  679. /package/dist/{app-R5CTEVAC.js.map → app-PKSI4MV5.js.map} +0 -0
  680. /package/dist/{bam-45N3FEEM.js.map → bam-X5JH5ZT7.js.map} +0 -0
  681. /package/dist/{barchart-YCTKQJQX.js.map → barchart-UT6J4L2N.js.map} +0 -0
  682. /package/dist/{barchart2-252GS3CA.js.map → barchart2-ZG5QJO3C.js.map} +0 -0
  683. /package/dist/{block-CR75JHV3.js.map → block-TC466NGW.js.map} +0 -0
  684. /package/dist/{block.init-U3JMED2E.js.map → block.init-CIBNSYAC.js.map} +0 -0
  685. /package/dist/{block.mds.expressionrank-TAN3BDPS.js.map → block.mds.expressionrank-EY5PCQCK.js.map} +0 -0
  686. /package/dist/{block.mds.geneboxplot-EN344GEP.js.map → block.mds.geneboxplot-R6AOMHO5.js.map} +0 -0
  687. /package/dist/{block.mds.junction-RFVVJUTR.js.map → block.mds.junction-JMV6FNYC.js.map} +0 -0
  688. /package/dist/{block.mds.svcnv-SSUMXEWD.js.map → block.mds.svcnv-IHTV3QYG.js.map} +0 -0
  689. /package/dist/{block.svg-LRPGNFFI.js.map → block.svg-NTFLVQAQ.js.map} +0 -0
  690. /package/dist/{block.tk.aicheck-YY23FT2G.js.map → block.tk.aicheck-FYPL32Y4.js.map} +0 -0
  691. /package/dist/{block.tk.ase-JCGPFKFT.js.map → block.tk.ase-FWCB6VBO.js.map} +0 -0
  692. /package/dist/{block.tk.bam-NZDC4H7Y.js.map → block.tk.bam-Q5UFUABN.js.map} +0 -0
  693. /package/dist/{block.tk.bedgraphdot-NCNZPZH6.js.map → block.tk.bedgraphdot-KBI3GFDM.js.map} +0 -0
  694. /package/dist/{block.tk.bigwig.ui-Z7G6ZITU.js.map → block.tk.bigwig.ui-KXNFX7G7.js.map} +0 -0
  695. /package/dist/{block.tk.hicstraw-VVDP4UF5.js.map → block.tk.hicstraw-MQBH3YAJ.js.map} +0 -0
  696. /package/dist/{block.tk.junction-L4YBPAHM.js.map → block.tk.junction-EBTVXLJH.js.map} +0 -0
  697. /package/dist/{block.tk.junction.textmatrixui-6CMKKUB5.js.map → block.tk.junction.textmatrixui-ETYLCP2O.js.map} +0 -0
  698. /package/dist/{block.tk.ld-VCP2R5UO.js.map → block.tk.ld-NLB6L6WQ.js.map} +0 -0
  699. /package/dist/{block.tk.menu-ZJYGMEDX.js.map → block.tk.menu-PJLCOXVJ.js.map} +0 -0
  700. /package/dist/{block.tk.pgv-M5WNUIVS.js.map → block.tk.pgv-JOIQVWL2.js.map} +0 -0
  701. /package/dist/{brainImaging-JGECJHZO.js.map → brainImaging-SPRC3QFB.js.map} +0 -0
  702. /package/dist/{bubbleHeatmap-7DQNWBQ2.js.map → bubbleHeatmap-CFTZ5RXH.js.map} +0 -0
  703. /package/dist/{cellTypeBubbleHeatmap-LAE7U3RF.js.map → cellTypeBubbleHeatmap-DXPLFT5U.js.map} +0 -0
  704. /package/dist/{chunk-APK7TUJX.js.map → chunk-2BQ572SL.js.map} +0 -0
  705. /package/dist/{chunk-G3JNTWCX.js.map → chunk-2DQIQYY3.js.map} +0 -0
  706. /package/dist/{chunk-VIBK253J.js.map → chunk-2POQWEK6.js.map} +0 -0
  707. /package/dist/{chunk-E4WIMTK4.js.map → chunk-2SQEVMAL.js.map} +0 -0
  708. /package/dist/{chunk-756KZF5Y.js.map → chunk-37HTZ6IG.js.map} +0 -0
  709. /package/dist/{chunk-JIDJBM2R.js.map → chunk-452765PG.js.map} +0 -0
  710. /package/dist/{chunk-POWG4MPT.js.map → chunk-4DXQJGJ7.js.map} +0 -0
  711. /package/dist/{chunk-N635HDJ4.js.map → chunk-54KC7DAB.js.map} +0 -0
  712. /package/dist/{chunk-L743GRJE.js.map → chunk-5D5YTFI2.js.map} +0 -0
  713. /package/dist/{chunk-ZXU4ALLZ.js.map → chunk-5DBW3WLK.js.map} +0 -0
  714. /package/dist/{chunk-RN4BOWRH.js.map → chunk-5ILEFNXJ.js.map} +0 -0
  715. /package/dist/{chunk-AQAFURQM.js.map → chunk-5UO7MKCO.js.map} +0 -0
  716. /package/dist/{chunk-LHP7RXET.js.map → chunk-7R7P6VMT.js.map} +0 -0
  717. /package/dist/{chunk-D6G64XPJ.js.map → chunk-7X6NF7NI.js.map} +0 -0
  718. /package/dist/{chunk-4WEA7HHH.js.map → chunk-ANGLZ4XR.js.map} +0 -0
  719. /package/dist/{chunk-57NYHASA.js.map → chunk-BMQDU7KN.js.map} +0 -0
  720. /package/dist/{chunk-4PPZYVWZ.js.map → chunk-C5TU4AYP.js.map} +0 -0
  721. /package/dist/{chunk-QHJGWCH3.js.map → chunk-DBQA6QIJ.js.map} +0 -0
  722. /package/dist/{chunk-E7TJXNIL.js.map → chunk-DHNET3P4.js.map} +0 -0
  723. /package/dist/{chunk-IS4VLUEX.js.map → chunk-EGKHDALO.js.map} +0 -0
  724. /package/dist/{chunk-DE3F7FAP.js.map → chunk-EPWGUWQP.js.map} +0 -0
  725. /package/dist/{chunk-6JBQLOJW.js.map → chunk-F3EYPES3.js.map} +0 -0
  726. /package/dist/{chunk-BEJJS2HC.js.map → chunk-F4DM3WS4.js.map} +0 -0
  727. /package/dist/{chunk-GRI74AXV.js.map → chunk-FTLCINDC.js.map} +0 -0
  728. /package/dist/{chunk-5BCNVZIW.js.map → chunk-GT6WJUJY.js.map} +0 -0
  729. /package/dist/{chunk-4AQQ3BXD.js.map → chunk-GWCK5QGV.js.map} +0 -0
  730. /package/dist/{chunk-DF3IMIR2.js.map → chunk-HJSGHFJ6.js.map} +0 -0
  731. /package/dist/{chunk-CZ5QLVWK.js.map → chunk-HS6BTSFX.js.map} +0 -0
  732. /package/dist/{chunk-YHA3AYAM.js.map → chunk-IB5TKNG5.js.map} +0 -0
  733. /package/dist/{chunk-LGOTIL62.js.map → chunk-IIMTOPH3.js.map} +0 -0
  734. /package/dist/{chunk-S5UN4VIQ.js.map → chunk-JAXN3Q3K.js.map} +0 -0
  735. /package/dist/{chunk-NXVUL3EY.js.map → chunk-K6PYTAXW.js.map} +0 -0
  736. /package/dist/{chunk-5AAAH4OZ.js.map → chunk-KIRZXPMB.js.map} +0 -0
  737. /package/dist/{chunk-3PHXBY3Z.js.map → chunk-KT4OZVO3.js.map} +0 -0
  738. /package/dist/{chunk-JNVWSFNC.js.map → chunk-L32KMIC3.js.map} +0 -0
  739. /package/dist/{chunk-LK2GHBUH.js.map → chunk-LB7NENEB.js.map} +0 -0
  740. /package/dist/{chunk-SY63UUF7.js.map → chunk-LDWMVZYF.js.map} +0 -0
  741. /package/dist/{chunk-UM5NWVMA.js.map → chunk-M367Y7ML.js.map} +0 -0
  742. /package/dist/{chunk-YN5NY3D3.js.map → chunk-M4XXKTH2.js.map} +0 -0
  743. /package/dist/{chunk-D2MZT7CC.js.map → chunk-ME7OF3CS.js.map} +0 -0
  744. /package/dist/{chunk-2AQT3ZWL.js.map → chunk-N2CXLMNX.js.map} +0 -0
  745. /package/dist/{chunk-T46FA72N.js.map → chunk-N7DVQTPC.js.map} +0 -0
  746. /package/dist/{chunk-MAVDQAZE.js.map → chunk-N7TD7N7D.js.map} +0 -0
  747. /package/dist/{chunk-ALEZQQOK.js.map → chunk-NBX6TT5C.js.map} +0 -0
  748. /package/dist/{chunk-TBPVP3KZ.js.map → chunk-NLR7JIMM.js.map} +0 -0
  749. /package/dist/{chunk-OJ4TDGPQ.js.map → chunk-NSRGYBDM.js.map} +0 -0
  750. /package/dist/{chunk-OXLBPSJ6.js.map → chunk-NVS7KYYI.js.map} +0 -0
  751. /package/dist/{chunk-IB4NE4SI.js.map → chunk-OVPEMVXT.js.map} +0 -0
  752. /package/dist/{chunk-2O4CS3EZ.js.map → chunk-OXWLQQXL.js.map} +0 -0
  753. /package/dist/{chunk-ODMLC5FN.js.map → chunk-QGGSYEVJ.js.map} +0 -0
  754. /package/dist/{chunk-SDMNZJ7X.js.map → chunk-QLEVONLD.js.map} +0 -0
  755. /package/dist/{chunk-P5GRGXH4.js.map → chunk-RNWHB5DI.js.map} +0 -0
  756. /package/dist/{chunk-JYOIO5UY.js.map → chunk-RPDVFM7E.js.map} +0 -0
  757. /package/dist/{chunk-2GLNPB5J.js.map → chunk-RUHLDUOT.js.map} +0 -0
  758. /package/dist/{chunk-R5OIIFSF.js.map → chunk-RV34WFGZ.js.map} +0 -0
  759. /package/dist/{chunk-3MFFZRH3.js.map → chunk-SDVE5ECI.js.map} +0 -0
  760. /package/dist/{chunk-SWZAHJYP.js.map → chunk-SWO6DZTG.js.map} +0 -0
  761. /package/dist/{chunk-6JBLNS4D.js.map → chunk-SYPSS3JQ.js.map} +0 -0
  762. /package/dist/{chunk-NFAE6VNU.js.map → chunk-TDM3645O.js.map} +0 -0
  763. /package/dist/{chunk-Q25DABNW.js.map → chunk-VVO3R5JV.js.map} +0 -0
  764. /package/dist/{chunk-YX6FIREB.js.map → chunk-VYEU6Y35.js.map} +0 -0
  765. /package/dist/{chunk-JBUEQ4E6.js.map → chunk-WGXC6IEF.js.map} +0 -0
  766. /package/dist/{chunk-KAFDQKN7.js.map → chunk-WPDM57B5.js.map} +0 -0
  767. /package/dist/{chunk-RJFCT67B.js.map → chunk-WS7WKS2B.js.map} +0 -0
  768. /package/dist/{chunk-ABTO5QSB.js.map → chunk-X63NSV33.js.map} +0 -0
  769. /package/dist/{chunk-NG7K5KYO.js.map → chunk-XXNRSSBR.js.map} +0 -0
  770. /package/dist/{chunk-MKT4OJ3G.js.map → chunk-YD6UGDFI.js.map} +0 -0
  771. /package/dist/{chunk-GN2IIC6U.js.map → chunk-YRIYDFNU.js.map} +0 -0
  772. /package/dist/{chunk-J2DICGKC.js.map → chunk-YY5WQQ3J.js.map} +0 -0
  773. /package/dist/{chunk-YLJOZP4P.js.map → chunk-Z2ZITHT4.js.map} +0 -0
  774. /package/dist/{chunk-RZFJ6K77.js.map → chunk-Z4SM3FBK.js.map} +0 -0
  775. /package/dist/{chunk-XKL2D2NN.js.map → chunk-ZEYEIUEZ.js.map} +0 -0
  776. /package/dist/{chunk-XXJT7DSL.js.map → chunk-ZLYTDHQP.js.map} +0 -0
  777. /package/dist/{chunk-IAE3KWN5.js.map → chunk-ZWCVRVV4.js.map} +0 -0
  778. /package/dist/{cohort-75FUW3UO.js.map → cohort-FZNMFWOX.js.map} +0 -0
  779. /package/dist/{condition-VW43Q6ZE.js.map → condition-AJJLFCBQ.js.map} +0 -0
  780. /package/dist/{controls-HOP2AFHD.js.map → controls-SZOLV37V.js.map} +0 -0
  781. /package/dist/{controls.config-CMIFSKQE.js.map → controls.config-CVP75WFA.js.map} +0 -0
  782. /package/dist/{correlation-PN7BS5OR.js.map → correlation-UFJFQHQ3.js.map} +0 -0
  783. /package/dist/{customdata.inputui-ZBZX63PS.js.map → customdata.inputui-HOVA4A6O.js.map} +0 -0
  784. /package/dist/{dataDownload-LGA4LAUF.js.map → dataDownload-VTUG4IOK.js.map} +0 -0
  785. /package/dist/{databrowser.ui-IQRDVL66.js.map → databrowser.ui-O5S4Y4EK.js.map} +0 -0
  786. /package/dist/{dictionary-BPWD77LJ.js.map → dictionary-L2UNNNP7.js.map} +0 -0
  787. /package/dist/{dnaMethylation-A3XPPBBB.js.map → dnaMethylation-B4SWZI4O.js.map} +0 -0
  788. /package/dist/{dnaMethylation.integration.spec-554ITDQC.js.map → dnaMethylation.integration.spec-ANJAMNYJ.js.map} +0 -0
  789. /package/dist/{dofetch-FQ42AX7C.js.map → dofetch-F5XSHQIS.js.map} +0 -0
  790. /package/dist/{e2pca-F3GWG7WZ.js.map → e2pca-66ARIMKL.js.map} +0 -0
  791. /package/dist/{ep-QAVN472H.js.map → ep-OFGJYVUY.js.map} +0 -0
  792. /package/dist/{expclust.gdc.spec-DQNX7FTL.js.map → expclust.gdc.spec-22RXQTTP.js.map} +0 -0
  793. /package/dist/{facet-DH7OOZTJ.js.map → facet-GVZQ3RPN.js.map} +0 -0
  794. /package/dist/{gb-OCXOLAMD.js.map → gb-HEPGVYEK.js.map} +0 -0
  795. /package/dist/{geneExpClustering-DWYRZGTS.js.map → geneExpClustering-3NU2U422.js.map} +0 -0
  796. /package/dist/{geneExpression-BGFR3KQE.js.map → geneExpression-FXQ4L2J2.js.map} +0 -0
  797. /package/dist/{geneExpression-2NKSKZR6.js.map → geneExpression-XYVYJJA5.js.map} +0 -0
  798. /package/dist/{geneExpression.unit.spec-63EKKMET.js.map → geneExpression.unit.spec-K3FIRSNK.js.map} +0 -0
  799. /package/dist/{geneORA-BED6XL4D.js.map → geneORA-5M2JSDMF.js.map} +0 -0
  800. /package/dist/{geneRanking-UB5RCQNP.js.map → geneRanking-TP3R3CS3.js.map} +0 -0
  801. /package/dist/{geneVariant-Y4C2FPJK.js.map → geneVariant-232EYUFJ.js.map} +0 -0
  802. /package/dist/{geneVariant-WJEONTTY.js.map → geneVariant-BHXTPUDC.js.map} +0 -0
  803. /package/dist/{geneVariant.integration.spec-VFYLC47N.js.map → geneVariant.integration.spec-ICFHVFIR.js.map} +0 -0
  804. /package/dist/{genefusion.ui-P3NBIMLE.js.map → genefusion.ui-ABRCUQFC.js.map} +0 -0
  805. /package/dist/{geneset-O22RQAED.js.map → geneset-N42FIVA6.js.map} +0 -0
  806. /package/dist/{genomeBrowser.spec-MM7WZUGI.js.map → genomeBrowser.spec-5HKQKLRU.js.map} +0 -0
  807. /package/dist/{grin2-O637DNDS.js.map → grin2-H2KJYLP6.js.map} +0 -0
  808. /package/dist/{grin2-3YBIRKUT.js.map → grin2-NGMTEMXF.js.map} +0 -0
  809. /package/dist/{hierCluster-3X3BQVNE.js.map → hierCluster-JU5JPLM7.js.map} +0 -0
  810. /package/dist/{hierCluster-7P7M75TU.js.map → hierCluster-LSSH275H.js.map} +0 -0
  811. /package/dist/{hierCluster.config-XFUOLLDK.js.map → hierCluster.config-ILOR7GBB.js.map} +0 -0
  812. /package/dist/{hierCluster.integration.spec-HKYGSDDG.js.map → hierCluster.integration.spec-CNR5OJOH.js.map} +0 -0
  813. /package/dist/{hierCluster.interactivity-JUZSWCM7.js.map → hierCluster.interactivity-TLEIVTFK.js.map} +0 -0
  814. /package/dist/{hierCluster.renderers-NGPPAYFM.js.map → hierCluster.renderers-P7JNIT3N.js.map} +0 -0
  815. /package/dist/{imagePlot-LKGAFJO7.js.map → imagePlot-BF67SXQR.js.map} +0 -0
  816. /package/dist/{importPlot-SRWQA2FH.js.map → importPlot-OHXSXNZN.js.map} +0 -0
  817. /package/dist/{isoformExpression-RYIZQIVX.js.map → isoformExpression-4VKHE4HA.js.map} +0 -0
  818. /package/dist/{isoformExpression.unit.spec-DP4ECITF.js.map → isoformExpression.unit.spec-4TVSIFG4.js.map} +0 -0
  819. /package/dist/{junction-D7QQ3YSG.js.map → junction-VUHORV43.js.map} +0 -0
  820. /package/dist/{junction.customTerm-ZEVNCVU7.js.map → junction.customTerm-FRYWSS4P.js.map} +0 -0
  821. /package/dist/{junction.unit.spec-6MAKIB3R.js.map → junction.unit.spec-KKVLYT7Q.js.map} +0 -0
  822. /package/dist/{launch.adhoc-FAHRZFYG.js.map → launch.adhoc-UDYMFZTQ.js.map} +0 -0
  823. /package/dist/{leftlabel.sample-PDZLWLJ4.js.map → leftlabel.sample-R5FFBWG3.js.map} +0 -0
  824. /package/dist/{legacyDataset-27L4DMCL.js.map → legacyDataset-IEFWFVS6.js.map} +0 -0
  825. /package/dist/{lollipop-VWGJUHNX.js.map → lollipop-3IX6ZYUN.js.map} +0 -0
  826. /package/dist/{maf-W52H44WK.js.map → maf-42UFYSL4.js.map} +0 -0
  827. /package/dist/{maftimeline-5JV3HZLE.js.map → maftimeline-M5WYEN62.js.map} +0 -0
  828. /package/dist/{matrix-CEVGKXSK.js.map → matrix-CI76EDHU.js.map} +0 -0
  829. /package/dist/{matrix-EXNYXYLK.js.map → matrix-WJZKA6VR.js.map} +0 -0
  830. /package/dist/{matrix.cells-DVPWSLJW.js.map → matrix.cells-ZFKVIPDC.js.map} +0 -0
  831. /package/dist/{matrix.config-RLSTWDXC.js.map → matrix.config-24TFHBEM.js.map} +0 -0
  832. /package/dist/{matrix.data-Z6GUACVZ.js.map → matrix.data-NCGZPNWR.js.map} +0 -0
  833. /package/dist/{matrix.groups-3ZSTUWRK.js.map → matrix.groups-XQJTGM6M.js.map} +0 -0
  834. /package/dist/{matrix.integration.spec-4U2R3UB2.js.map → matrix.integration.spec-OGXZUDE6.js.map} +0 -0
  835. /package/dist/{matrix.interactivity-DJZFQ7DN.js.map → matrix.interactivity-ZOOTPNSW.js.map} +0 -0
  836. /package/dist/{matrix.layout-RQJ6VB4P.js.map → matrix.layout-5J2YENK3.js.map} +0 -0
  837. /package/dist/{matrix.legend-YQ36NWKW.js.map → matrix.legend-U36VCS46.js.map} +0 -0
  838. /package/dist/{matrix.renderers-MWDFI6HW.js.map → matrix.renderers-4KFE7ZVR.js.map} +0 -0
  839. /package/dist/{matrix.serieses-LTC4RLYD.js.map → matrix.serieses-AW7XBXLJ.js.map} +0 -0
  840. /package/dist/{matrix.sort-5VFYLABY.js.map → matrix.sort-7PMECLOE.js.map} +0 -0
  841. /package/dist/{matrix.sort.unit.spec-2RUEKUT4.js.map → matrix.sort.unit.spec-GIA2YOTQ.js.map} +0 -0
  842. /package/dist/{matrix.sorterUi-EEMYZLPI.js.map → matrix.sorterUi-J6PRUT6J.js.map} +0 -0
  843. /package/dist/{matrix.sorterUi.unit.spec-ZXGSPRFZ.js.map → matrix.sorterUi.unit.spec-OPGKZZL6.js.map} +0 -0
  844. /package/dist/{matrix.unit.spec-HTF6UV4L.js.map → matrix.unit.spec-7UIVVR4T.js.map} +0 -0
  845. /package/dist/{mavb-GGQRDCO6.js.map → mavb-MSYUMT6W.js.map} +0 -0
  846. /package/dist/{mds.fimo-YKV5OIYV.js.map → mds.fimo-OYEAQP37.js.map} +0 -0
  847. /package/dist/{mds.samplescatterplot-RQOEW2AW.js.map → mds.samplescatterplot-EXISSRQQ.js.map} +0 -0
  848. /package/dist/{mds.survivalplot-TN636DED.js.map → mds.survivalplot-SZST6BLN.js.map} +0 -0
  849. /package/dist/{multivalue-MDQY64EH.js.map → multivalue-YDE7L75Y.js.map} +0 -0
  850. /package/dist/{numericDictTermCluster-E73TJCLI.js.map → numericDictTermCluster-5AKP6ICC.js.map} +0 -0
  851. /package/dist/{oncomatrix-AENXQMLL.js.map → oncomatrix-2OEIYWR6.js.map} +0 -0
  852. /package/dist/{oncomatrix.spec-UD6U462U.js.map → oncomatrix.spec-CXQW4JWU.js.map} +0 -0
  853. /package/dist/{plot.2dvaf-XMRV6KEG.js.map → plot.2dvaf-LN7A3NNC.js.map} +0 -0
  854. /package/dist/{plot.app-A6JKLYQQ.js.map → plot.app-YIQOY2Z7.js.map} +0 -0
  855. /package/dist/{plot.barplot-UIX7LVWR.js.map → plot.barplot-HF2J25XP.js.map} +0 -0
  856. /package/dist/{plot.boxplot-DIFWVLMA.js.map → plot.boxplot-YJH4L27U.js.map} +0 -0
  857. /package/dist/{plot.brainImaging-ZRPVE2UK.js.map → plot.brainImaging-PS4TRSPI.js.map} +0 -0
  858. /package/dist/{plot.disco-I56MT3PC.js.map → plot.disco-BN5RNZ6Q.js.map} +0 -0
  859. /package/dist/{plot.ssgq-FCKFSZTV.js.map → plot.ssgq-N2HTOIY3.js.map} +0 -0
  860. /package/dist/{plot.vaf2cov-E5C7RJ7Z.js.map → plot.vaf2cov-6AOHRUQ2.js.map} +0 -0
  861. /package/dist/{polar2-SKVBB4FD.js.map → polar2-TC5OEJRE.js.map} +0 -0
  862. /package/dist/{profileForms-5B3MTUNP.js.map → profileForms-5WV2TSBB.js.map} +0 -0
  863. /package/dist/{profilePlot-MCYCGEWT.js.map → profilePlot-OJLLW44P.js.map} +0 -0
  864. /package/dist/{pseudbulk.unit.spec-Q4YTIPH7.js.map → pseudbulk.unit.spec-RAYRGN6C.js.map} +0 -0
  865. /package/dist/{pseudobulk-3UIWCCCQ.js.map → pseudobulk-ADHAYVSQ.js.map} +0 -0
  866. /package/dist/{qualitative-6TJRXZFV.js.map → qualitative-JXEI3IYC.js.map} +0 -0
  867. /package/dist/{radar2-6X4XW5IZ.js.map → radar2-BWTKSTT3.js.map} +0 -0
  868. /package/dist/{radarFacility2-UVPXWPV5.js.map → radarFacility2-WIRSKTDG.js.map} +0 -0
  869. /package/dist/{rememberedGvQ.unit.spec-GVRFRVSO.js.map → rememberedGvQ.unit.spec-N43O4YTF.js.map} +0 -0
  870. /package/dist/{render-G7V6R4PV.js.map → render-J7WOYBOL.js.map} +0 -0
  871. /package/dist/{report-O7D46EKQ.js.map → report-DRPCXX2B.js.map} +0 -0
  872. /package/dist/{sampleView-6Y3OOOMW.js.map → sampleView-BV6BQGGQ.js.map} +0 -0
  873. /package/dist/{samplelst-JRVC4GYC.js.map → samplelst-ZD63EYO7.js.map} +0 -0
  874. /package/dist/{samplematrix-VP5RQVRH.js.map → samplematrix-ZZ3DVELU.js.map} +0 -0
  875. /package/dist/{sc-BPHVEP6N.js.map → sc-MUI43YTB.js.map} +0 -0
  876. /package/dist/{scatter-2YYRZCSW.js.map → scatter-7B44HTKN.js.map} +0 -0
  877. /package/dist/{scatter-Y4BIG2PW.js.map → scatter-UEDVIE4Y.js.map} +0 -0
  878. /package/dist/{selectGenomeWithTklst-2BVZU5SW.js.map → selectGenomeWithTklst-WGOKGVZ5.js.map} +0 -0
  879. /package/dist/{singleCellCellType-XBGCSIQT.js.map → singleCellCellType-Z7OXK7PI.js.map} +0 -0
  880. /package/dist/{singleCellCellType.unit.spec-T4GFRLVZ.js.map → singleCellCellType.unit.spec-IIOVCCJQ.js.map} +0 -0
  881. /package/dist/{singleCellGeneExpression-5ZPWLSVW.js.map → singleCellGeneExpression-LYZAIJ2Z.js.map} +0 -0
  882. /package/dist/{singleCellGeneExpression.unit.spec-4O5UBUDU.js.map → singleCellGeneExpression.unit.spec-67AAWZTG.js.map} +0 -0
  883. /package/dist/{singleCellPlot-CZLQBGVU.js.map → singleCellPlot-TXPYQLSH.js.map} +0 -0
  884. /package/dist/{singlecell-IIUYX7OG.js.map → singlecell-22OG6HNI.js.map} +0 -0
  885. /package/dist/{singlecell-O3P5BLWT.js.map → singlecell-7TBALI2S.js.map} +0 -0
  886. /package/dist/{snp-ZCYBF3ZQ.js.map → snp-3U2G3Z57.js.map} +0 -0
  887. /package/dist/{snp.unit.spec-TAGD2DRL.js.map → snp.unit.spec-BMBBUBYD.js.map} +0 -0
  888. /package/dist/{snplocus-TL25OOPE.js.map → snplocus-SSVZDIQV.js.map} +0 -0
  889. /package/dist/{spliceevent.a53ss.diagram-I7J4PQZT.js.map → spliceevent.a53ss.diagram-FK7CN4AU.js.map} +0 -0
  890. /package/dist/{spliceevent.exonskip.diagram-SB4454HB.js.map → spliceevent.exonskip.diagram-EFLGV3O4.js.map} +0 -0
  891. /package/dist/{spliceevent.noeventdiagram-FOSDNYLH.js.map → spliceevent.noeventdiagram-2DYO7CCZ.js.map} +0 -0
  892. /package/dist/{ssGSEA-WANB2X5L.js.map → ssGSEA-52LWBQJP.js.map} +0 -0
  893. /package/dist/{ssGSEA.unit.spec-4XXWU4XV.js.map → ssGSEA.unit.spec-3JV6WHUQ.js.map} +0 -0
  894. /package/dist/{stattable-FNTJLVNB.js.map → stattable-RLMYQ4G6.js.map} +0 -0
  895. /package/dist/{summarizeCnvGeneexp-P4AFZMKD.js.map → summarizeCnvGeneexp-QPRYAKC2.js.map} +0 -0
  896. /package/dist/{summarizeGeneexpSurvival-YL2J7F4R.js.map → summarizeGeneexpSurvival-RWVQXEKB.js.map} +0 -0
  897. /package/dist/{summarizeMutationCnv-BHBHST5F.js.map → summarizeMutationCnv-DW5F6NUJ.js.map} +0 -0
  898. /package/dist/{summarizeMutationDiagnosis-Z7ZHTV27.js.map → summarizeMutationDiagnosis-5FOQ7CHI.js.map} +0 -0
  899. /package/dist/{summarizeMutationSurvival-PZ4TYHT7.js.map → summarizeMutationSurvival-4UKB4EVO.js.map} +0 -0
  900. /package/dist/{summary-ZMNPO65S.js.map → summary-TYC6QNT4.js.map} +0 -0
  901. /package/dist/{summary.integration.spec-DPJR2ZBE.js.map → summary.integration.spec-5GLJJZNM.js.map} +0 -0
  902. /package/dist/{summaryInput-6JUFJZ5P.js.map → summaryInput-4IJGKW4P.js.map} +0 -0
  903. /package/dist/{sunburst-OWAUI3HC.js.map → sunburst-G7DGATWP.js.map} +0 -0
  904. /package/dist/{survival-7EXICNK7.js.map → survival-IHM6A7LL.js.map} +0 -0
  905. /package/dist/{survival-6JPKG3VA.js.map → survival-MKNABJPU.js.map} +0 -0
  906. /package/dist/{svgraph-34IKFHUS.js.map → svgraph-VB7JWWR5.js.map} +0 -0
  907. /package/dist/{svmr-4XNPSVVQ.js.map → svmr-VLQIO2U5.js.map} +0 -0
  908. /package/dist/{table-LPZATFLC.js.map → table-EAXMDWOY.js.map} +0 -0
  909. /package/dist/{termCollection-DYY5FXU5.js.map → termCollection-5LG7ICQY.js.map} +0 -0
  910. /package/dist/{termCollection-WOAUFFIC.js.map → termCollection-SB6MWLFK.js.map} +0 -0
  911. /package/dist/{termCollection.unit.spec-WTICTZ7H.js.map → termCollection.unit.spec-H5ITGTR3.js.map} +0 -0
  912. /package/dist/{termCollectionFractionSelection-K5HPDEFP.js.map → termCollectionFractionSelection-2XZSTDCQ.js.map} +0 -0
  913. /package/dist/{termCollectionFractionSelection.unit.spec-D7DG2HOI.js.map → termCollectionFractionSelection.unit.spec-BIO7V6KA.js.map} +0 -0
  914. /package/dist/{tk-DD2LWVGM.js.map → tk-TRWYZLQ2.js.map} +0 -0
  915. /package/dist/{tk-NV7NBLT6.js.map → tk-VZI5HNSX.js.map} +0 -0
  916. /package/dist/{tp.ui-B5J3UUVB.js.map → tp.ui-J5SNNAT3.js.map} +0 -0
  917. /package/dist/{tvs.dt-XLKQT64T.js.map → tvs.dt-6YHFJPER.js.map} +0 -0
  918. /package/dist/{tvs.dtcnv.categorical-XIC3RH2D.js.map → tvs.dtcnv.categorical-WTIE63GM.js.map} +0 -0
  919. /package/dist/{tvs.dtcnv.continuous-OA2K4LHF.js.map → tvs.dtcnv.continuous-OCMKGTF5.js.map} +0 -0
  920. /package/dist/{tvs.dtfusion-ZGNKALZB.js.map → tvs.dtfusion-CA23UNM3.js.map} +0 -0
  921. /package/dist/{tvs.dtitd-6QSG4E34.js.map → tvs.dtitd-VSYMR3OD.js.map} +0 -0
  922. /package/dist/{tvs.dtsnvindel-5CXXOGPH.js.map → tvs.dtsnvindel-YBNO3CYF.js.map} +0 -0
  923. /package/dist/{tvs.dtsv-QYYEYUD3.js.map → tvs.dtsv-S743GBB5.js.map} +0 -0
  924. /package/dist/{tvs.numeric-3UXW4JHJ.js.map → tvs.numeric-22AHXO5K.js.map} +0 -0
  925. /package/dist/{tvs.samplelst-X77ODFFR.js.map → tvs.samplelst-XAJO4EM6.js.map} +0 -0
  926. /package/dist/{tvs.termCollection-VXROWAPS.js.map → tvs.termCollection-QOVJGAUC.js.map} +0 -0
  927. /package/dist/{vocabulary-DKWYTZRC.js.map → vocabulary-6EADTHP3.js.map} +0 -0
  928. /package/dist/{wsi.direct-C3HQEC2V.js.map → wsi.direct-2WB2NGC5.js.map} +0 -0
@@ -1,7 +0,0 @@
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, type ComponentApi } 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 } from '#shared/terms.js'\nimport { TermTypes } from '#types'\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: ComponentApi) {\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 wholeProteomeLog2 = getLog2Ratio(ptm.proteinFoldChange)\n\t\tconst normalizedLog2 = logValue != null && wholeProteomeLog2 != null ? logValue - wholeProteomeLog2 : null\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\twholeProteomeLog2,\n\t\t\tnormalizedLog2,\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{\n\t\t\t\t\t\t\tk: 'Whole proteome Log2 FC',\n\t\t\t\t\t\t\tv: Number.isFinite(m.wholeProteomeLog2) ? roundValue(m.wholeProteomeLog2, 3) : 'NA'\n\t\t\t\t\t\t},\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tk: 'Normalized Log2 FC',\n\t\t\t\t\t\t\tv: Number.isFinite(m.normalizedLog2) ? roundValue(m.normalizedLog2, 3) : 'NA'\n\t\t\t\t\t\t},\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
- }