@sjcrh/proteinpaint-client 2.204.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 (955) 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/DE-2J7DSRPC.js.map +7 -0
  10. package/dist/DEinput-I7JWNOSD.js +499 -0
  11. package/dist/DEinput-I7JWNOSD.js.map +7 -0
  12. package/dist/DM-NQ46YPGF.js +90 -0
  13. package/dist/DM-NQ46YPGF.js.map +7 -0
  14. package/dist/DifferentialAnalysis-BFCQBX5J.js +237 -0
  15. package/dist/Disco-ZJLVQRTC.js +3389 -0
  16. package/dist/Disco.UI-AEDACXW2.js +243 -0
  17. package/dist/DmrPlot-QMRXAOM3.js +637 -0
  18. package/dist/GB-MFU2UJ22.js +1391 -0
  19. package/dist/GSEA-E3NHU22A.js +851 -0
  20. package/dist/GeneExpInput-MIUNSOPY.js +362 -0
  21. package/dist/Geomap-HAJG3STN.js +84 -0
  22. package/dist/HicApp-ECFFIRWI.js +2245 -0
  23. package/dist/IDCViewer-TNSD3U2V.js +10812 -0
  24. package/dist/NumBinaryEditor-CNBGZ6WY.js +279 -0
  25. package/dist/NumBinaryEditor.unit.spec-SKFDALF3.js +312 -0
  26. package/dist/NumContEditor-7ID2U7JL.js +105 -0
  27. package/dist/NumContEditor.unit.spec-XHSQSAWK.js +164 -0
  28. package/dist/NumCustomBinEditor-PAIPRJPO.js +33 -0
  29. package/dist/NumCustomBinEditor.unit.spec-QYVZMMHV.js +397 -0
  30. package/dist/NumDiscreteEditor-K2NZZQTH.js +170 -0
  31. package/dist/NumDiscreteEditor.unit.spec-3CG5VEQL.js +233 -0
  32. package/dist/NumRegularBinEditor-EOVZ22TP.js +33 -0
  33. package/dist/NumRegularBinEditor.unit.spec-FHTVH5FH.js +278 -0
  34. package/dist/NumSplineEditor-N3REMJUC.js +210 -0
  35. package/dist/NumSplineEditor.unit.spec-DZCP35GL.js +224 -0
  36. package/dist/NumericDensity-42MWVI2S.js +33 -0
  37. package/dist/NumericDensity.unit.spec-T2HHSQON.js +418 -0
  38. package/dist/NumericHandler-5XU3SSPD.js +34 -0
  39. package/dist/NumericHandler.unit.spec-3F23KSAQ.js +214 -0
  40. package/dist/ProteomeInput-UN2BUNRO.js +388 -0
  41. package/dist/Regression-HWLJENA5.js +1416 -0
  42. package/dist/RunChart2-YO55WE4M.js +749 -0
  43. package/dist/SC-LEDJ4DQR.js +1107 -0
  44. package/dist/Violin-E6PDJZ2B.js +1082 -0
  45. package/dist/Volcano-XJTBWYUK.js +1649 -0
  46. package/dist/Volcano-XJTBWYUK.js.map +7 -0
  47. package/dist/Wsi-S675CYTW.js +431 -0
  48. package/dist/adSandbox-ZJQ5ZW2T.js +33 -0
  49. package/dist/animatedBubbleChart-LRUS7W36.js +547 -0
  50. package/dist/app-7Q3QIBU4.js +32 -0
  51. package/dist/app-PKSI4MV5.js +42 -0
  52. package/dist/app.js +17 -17
  53. package/dist/bam-X5JH5ZT7.js +876 -0
  54. package/dist/barchart-UT6J4L2N.js +42 -0
  55. package/dist/barchart2-ZG5QJO3C.js +309 -0
  56. package/dist/block-TC466NGW.js +6249 -0
  57. package/dist/block.init-CIBNSYAC.js +33 -0
  58. package/dist/block.mds.expressionrank-EY5PCQCK.js +354 -0
  59. package/dist/block.mds.geneboxplot-R6AOMHO5.js +823 -0
  60. package/dist/block.mds.junction-JMV6FNYC.js +1539 -0
  61. package/dist/block.mds.svcnv-IHTV3QYG.js +6796 -0
  62. package/dist/block.svg-NTFLVQAQ.js +159 -0
  63. package/dist/block.tk.aicheck-FYPL32Y4.js +278 -0
  64. package/dist/block.tk.ase-FWCB6VBO.js +360 -0
  65. package/dist/block.tk.bam-Q5UFUABN.js +1901 -0
  66. package/dist/block.tk.bedgraphdot-KBI3GFDM.js +379 -0
  67. package/dist/block.tk.bigwig.ui-KXNFX7G7.js +206 -0
  68. package/dist/block.tk.hicstraw-MQBH3YAJ.js +818 -0
  69. package/dist/block.tk.junction-EBTVXLJH.js +2358 -0
  70. package/dist/block.tk.junction.textmatrixui-ETYLCP2O.js +194 -0
  71. package/dist/block.tk.ld-NLB6L6WQ.js +94 -0
  72. package/dist/block.tk.menu-PJLCOXVJ.js +1024 -0
  73. package/dist/block.tk.pgv-JOIQVWL2.js +938 -0
  74. package/dist/brainImaging-SPRC3QFB.js +515 -0
  75. package/dist/brainRegions-LGQGRWG7.js +217 -0
  76. package/dist/brainRegions-LGQGRWG7.js.map +7 -0
  77. package/dist/bubbleHeatmap-CFTZ5RXH.js +378 -0
  78. package/dist/cellTypeBubbleHeatmap-DXPLFT5U.js +278 -0
  79. package/dist/chunk-2BQ572SL.js +102 -0
  80. package/dist/chunk-2DQIQYY3.js +103 -0
  81. package/dist/chunk-2POQWEK6.js +134 -0
  82. package/dist/chunk-2SQEVMAL.js +446 -0
  83. package/dist/chunk-37HTZ6IG.js +158 -0
  84. package/dist/chunk-452765PG.js +2676 -0
  85. package/dist/chunk-4DXQJGJ7.js +31 -0
  86. package/dist/chunk-4OLM3KSB.js +2708 -0
  87. package/dist/chunk-4OLM3KSB.js.map +7 -0
  88. package/dist/chunk-54KC7DAB.js +178 -0
  89. package/dist/chunk-54KC7DAB.js.map +7 -0
  90. package/dist/chunk-5D5YTFI2.js +783 -0
  91. package/dist/chunk-5D5YTFI2.js.map +7 -0
  92. package/dist/chunk-5DBW3WLK.js +129 -0
  93. package/dist/chunk-5ILEFNXJ.js +402 -0
  94. package/dist/chunk-5UO7MKCO.js +59 -0
  95. package/dist/chunk-7R7P6VMT.js +243 -0
  96. package/dist/chunk-7X6NF7NI.js +96 -0
  97. package/dist/chunk-ANGLZ4XR.js +26 -0
  98. package/dist/chunk-BMQDU7KN.js +38 -0
  99. package/dist/chunk-C5TU4AYP.js +281 -0
  100. package/dist/chunk-DBQA6QIJ.js +4311 -0
  101. package/dist/chunk-DBQA6QIJ.js.map +7 -0
  102. package/dist/chunk-DHNET3P4.js +42 -0
  103. package/dist/chunk-EGKHDALO.js +382 -0
  104. package/dist/chunk-EPWGUWQP.js +34 -0
  105. package/dist/chunk-F3EYPES3.js +1339 -0
  106. package/dist/chunk-F4DM3WS4.js +194 -0
  107. package/dist/chunk-FTLCINDC.js +294 -0
  108. package/dist/chunk-GT6WJUJY.js +480 -0
  109. package/dist/chunk-GWCK5QGV.js +70 -0
  110. package/dist/chunk-HJSGHFJ6.js +464 -0
  111. package/dist/chunk-HS6BTSFX.js +49 -0
  112. package/dist/chunk-IB5TKNG5.js +5071 -0
  113. package/dist/chunk-IIMTOPH3.js +54 -0
  114. package/dist/chunk-ILEXRHF7.js +367 -0
  115. package/dist/chunk-ILEXRHF7.js.map +7 -0
  116. package/dist/chunk-IZUYLFOX.js +1608 -0
  117. package/dist/chunk-IZUYLFOX.js.map +7 -0
  118. package/dist/chunk-JAXN3Q3K.js +272 -0
  119. package/dist/chunk-K6PYTAXW.js +2853 -0
  120. package/dist/chunk-K6PYTAXW.js.map +7 -0
  121. package/dist/chunk-KIRZXPMB.js +141 -0
  122. package/dist/chunk-KT4OZVO3.js +1275 -0
  123. package/dist/chunk-KT4OZVO3.js.map +7 -0
  124. package/dist/chunk-L32KMIC3.js +54 -0
  125. package/dist/chunk-LB7NENEB.js +123 -0
  126. package/dist/chunk-LDWMVZYF.js +562 -0
  127. package/dist/chunk-M367Y7ML.js +140 -0
  128. package/dist/chunk-M4XXKTH2.js +339 -0
  129. package/dist/chunk-ME7OF3CS.js +176 -0
  130. package/dist/chunk-N2CXLMNX.js +626 -0
  131. package/dist/chunk-N7DVQTPC.js +119 -0
  132. package/dist/chunk-N7TD7N7D.js +518 -0
  133. package/dist/chunk-NBX6TT5C.js +299 -0
  134. package/dist/chunk-NLR7JIMM.js +1986 -0
  135. package/dist/chunk-NLR7JIMM.js.map +7 -0
  136. package/dist/chunk-NSRGYBDM.js +339 -0
  137. package/dist/chunk-NVS7KYYI.js +379 -0
  138. package/dist/chunk-OVPEMVXT.js +397 -0
  139. package/dist/chunk-OXWLQQXL.js +274 -0
  140. package/dist/chunk-Q5SK3U2T.js +24163 -0
  141. package/dist/chunk-Q5SK3U2T.js.map +7 -0
  142. package/dist/chunk-QGGSYEVJ.js +55 -0
  143. package/dist/chunk-QLEVONLD.js +50 -0
  144. package/dist/chunk-RFW5BRIZ.js +1233 -0
  145. package/dist/chunk-RFW5BRIZ.js.map +7 -0
  146. package/dist/chunk-RNWHB5DI.js +98 -0
  147. package/dist/chunk-RPDVFM7E.js +2133 -0
  148. package/dist/chunk-RPDVFM7E.js.map +7 -0
  149. package/dist/chunk-RUHLDUOT.js +203 -0
  150. package/dist/chunk-RV34WFGZ.js +197 -0
  151. package/dist/chunk-SDVE5ECI.js +6360 -0
  152. package/dist/chunk-SWO6DZTG.js +170 -0
  153. package/dist/chunk-SYPSS3JQ.js +387 -0
  154. package/dist/chunk-TDM3645O.js +2327 -0
  155. package/dist/chunk-VVO3R5JV.js +217 -0
  156. package/dist/chunk-VYEU6Y35.js +14 -0
  157. package/dist/chunk-WGXC6IEF.js +263 -0
  158. package/dist/chunk-WPDM57B5.js +1720 -0
  159. package/dist/chunk-WS7WKS2B.js +2784 -0
  160. package/dist/chunk-WTAPOH2W.js +22699 -0
  161. package/dist/chunk-WTAPOH2W.js.map +7 -0
  162. package/dist/chunk-X63NSV33.js +276 -0
  163. package/dist/chunk-XXNRSSBR.js +56 -0
  164. package/dist/chunk-YD6UGDFI.js +102 -0
  165. package/dist/chunk-YRIYDFNU.js +160 -0
  166. package/dist/chunk-YY5WQQ3J.js +194 -0
  167. package/dist/chunk-Z2ZITHT4.js +4195 -0
  168. package/dist/chunk-Z4SM3FBK.js +302 -0
  169. package/dist/chunk-ZEYEIUEZ.js +240 -0
  170. package/dist/chunk-ZLYTDHQP.js +677 -0
  171. package/dist/chunk-ZWCVRVV4.js +550 -0
  172. package/dist/cohort-FZNMFWOX.js +70 -0
  173. package/dist/condition-AJJLFCBQ.js +327 -0
  174. package/dist/controls-SZOLV37V.js +34 -0
  175. package/dist/controls.config-CVP75WFA.js +34 -0
  176. package/dist/correlation-UFJFQHQ3.js +95 -0
  177. package/dist/customdata.inputui-HOVA4A6O.js +284 -0
  178. package/dist/dataDownload-VTUG4IOK.js +329 -0
  179. package/dist/databrowser.ui-O5S4Y4EK.js +425 -0
  180. package/dist/dictionary-L2UNNNP7.js +113 -0
  181. package/dist/dnaMethylation-B4SWZI4O.js +33 -0
  182. package/dist/dnaMethylation.integration.spec-ANJAMNYJ.js +198 -0
  183. package/dist/dofetch-F5XSHQIS.js +48 -0
  184. package/dist/e2pca-66ARIMKL.js +344 -0
  185. package/dist/ep-OFGJYVUY.js +1249 -0
  186. package/dist/expclust.gdc.spec-22RXQTTP.js +302 -0
  187. package/dist/facet-GVZQ3RPN.js +519 -0
  188. package/dist/gb-HEPGVYEK.js +81 -0
  189. package/dist/geneExpClustering-3NU2U422.js +244 -0
  190. package/dist/geneExpression-FXQ4L2J2.js +310 -0
  191. package/dist/geneExpression-XYVYJJA5.js +33 -0
  192. package/dist/geneExpression.unit.spec-K3FIRSNK.js +99 -0
  193. package/dist/geneORA-5M2JSDMF.js +273 -0
  194. package/dist/geneRanking-TP3R3CS3.js +548 -0
  195. package/dist/geneVariant-232EYUFJ.js +36 -0
  196. package/dist/geneVariant-BHXTPUDC.js +286 -0
  197. package/dist/geneVariant.integration.spec-ICFHVFIR.js +388 -0
  198. package/dist/genefusion.ui-ABRCUQFC.js +303 -0
  199. package/dist/geneset-N42FIVA6.js +203 -0
  200. package/dist/genomeBrowser.spec-5HKQKLRU.js +276 -0
  201. package/dist/grin2-H2KJYLP6.js +1137 -0
  202. package/dist/grin2-NGMTEMXF.js +70 -0
  203. package/dist/hierCluster-JU5JPLM7.js +55 -0
  204. package/dist/hierCluster-LSSH275H.js +59 -0
  205. package/dist/hierCluster.config-ILOR7GBB.js +36 -0
  206. package/dist/hierCluster.integration.spec-CNR5OJOH.js +483 -0
  207. package/dist/hierCluster.interactivity-TLEIVTFK.js +49 -0
  208. package/dist/hierCluster.renderers-P7JNIT3N.js +19 -0
  209. package/dist/imagePlot-BF67SXQR.js +156 -0
  210. package/dist/importPlot-OHXSXNZN.js +8 -0
  211. package/dist/isoformExpression-4VKHE4HA.js +35 -0
  212. package/dist/isoformExpression.unit.spec-4TVSIFG4.js +237 -0
  213. package/dist/junction-VUHORV43.js +36 -0
  214. package/dist/junction.customTerm-FRYWSS4P.js +16 -0
  215. package/dist/junction.unit.spec-KKVLYT7Q.js +182 -0
  216. package/dist/launch.adhoc-UDYMFZTQ.js +37 -0
  217. package/dist/leftlabel.sample-R5FFBWG3.js +258 -0
  218. package/dist/legacyDataset-IEFWFVS6.js +117 -0
  219. package/dist/lollipop-3IX6ZYUN.js +166 -0
  220. package/dist/maf-42UFYSL4.js +455 -0
  221. package/dist/maftimeline-M5WYEN62.js +587 -0
  222. package/dist/matrix-CI76EDHU.js +54 -0
  223. package/dist/matrix-WJZKA6VR.js +59 -0
  224. package/dist/matrix.cells-ZFKVIPDC.js +26 -0
  225. package/dist/matrix.config-24TFHBEM.js +37 -0
  226. package/dist/matrix.data-NCGZPNWR.js +23 -0
  227. package/dist/matrix.groups-XQJTGM6M.js +26 -0
  228. package/dist/matrix.integration.spec-OGXZUDE6.js +3160 -0
  229. package/dist/matrix.interactivity-ZOOTPNSW.js +37 -0
  230. package/dist/matrix.layout-5J2YENK3.js +39 -0
  231. package/dist/matrix.legend-U36VCS46.js +20 -0
  232. package/dist/matrix.renderers-4KFE7ZVR.js +34 -0
  233. package/dist/matrix.serieses-AW7XBXLJ.js +19 -0
  234. package/dist/matrix.sort-7PMECLOE.js +26 -0
  235. package/dist/matrix.sort.unit.spec-GIA2YOTQ.js +468 -0
  236. package/dist/matrix.sorterUi-J6PRUT6J.js +16 -0
  237. package/dist/matrix.sorterUi.unit.spec-OPGKZZL6.js +338 -0
  238. package/dist/matrix.unit.spec-7UIVVR4T.js +150 -0
  239. package/dist/mavb-MSYUMT6W.js +727 -0
  240. package/dist/mds.fimo-OYEAQP37.js +513 -0
  241. package/dist/mds.samplescatterplot-EXISSRQQ.js +1545 -0
  242. package/dist/mds.survivalplot-SZST6BLN.js +477 -0
  243. package/dist/multivalue-YDE7L75Y.js +83 -0
  244. package/dist/numericDictTermCluster-5AKP6ICC.js +63 -0
  245. package/dist/oncomatrix-2OEIYWR6.js +290 -0
  246. package/dist/oncomatrix.spec-CXQW4JWU.js +443 -0
  247. package/dist/plot.2dvaf-LN7A3NNC.js +372 -0
  248. package/dist/plot.app-YIQOY2Z7.js +36 -0
  249. package/dist/plot.barplot-HF2J25XP.js +97 -0
  250. package/dist/plot.boxplot-YJH4L27U.js +146 -0
  251. package/dist/plot.brainImaging-PS4TRSPI.js +51 -0
  252. package/dist/plot.disco-BN5RNZ6Q.js +99 -0
  253. package/dist/plot.ssgq-N2HTOIY3.js +134 -0
  254. package/dist/plot.vaf2cov-6AOHRUQ2.js +253 -0
  255. package/dist/polar2-TC5OEJRE.js +232 -0
  256. package/dist/profileForms-5WV2TSBB.js +941 -0
  257. package/dist/profilePlot-OJLLW44P.js +49 -0
  258. package/dist/proteinView-CGNAJN4S.js +1357 -0
  259. package/dist/proteinView-CGNAJN4S.js.map +7 -0
  260. package/dist/proteomeCohortCompare-XXQGGVCF.js +912 -0
  261. package/dist/proteomeCohortCompare-XXQGGVCF.js.map +7 -0
  262. package/dist/pseudbulk.unit.spec-RAYRGN6C.js +86 -0
  263. package/dist/pseudobulk-ADHAYVSQ.js +35 -0
  264. package/dist/qualitative-JXEI3IYC.js +38 -0
  265. package/dist/radar2-BWTKSTT3.js +327 -0
  266. package/dist/radarFacility2-WIRSKTDG.js +335 -0
  267. package/dist/rememberedGvQ.unit.spec-N43O4YTF.js +211 -0
  268. package/dist/render-J7WOYBOL.js +33 -0
  269. package/dist/report-DRPCXX2B.js +217 -0
  270. package/dist/sampleView-BV6BQGGQ.js +43 -0
  271. package/dist/samplelst-ZD63EYO7.js +106 -0
  272. package/dist/samplematrix-ZZ3DVELU.js +2193 -0
  273. package/dist/sc-MUI43YTB.js +81 -0
  274. package/dist/scatter-7B44HTKN.js +88 -0
  275. package/dist/scatter-UEDVIE4Y.js +880 -0
  276. package/dist/selectGenomeWithTklst-WGOKGVZ5.js +129 -0
  277. package/dist/singleCellCellType-Z7OXK7PI.js +33 -0
  278. package/dist/singleCellCellType.unit.spec-IIOVCCJQ.js +154 -0
  279. package/dist/singleCellGeneExpression-LYZAIJ2Z.js +33 -0
  280. package/dist/singleCellGeneExpression.unit.spec-67AAWZTG.js +148 -0
  281. package/dist/singleCellPlot-TXPYQLSH.js +49 -0
  282. package/dist/singlecell-22OG6HNI.js +1566 -0
  283. package/dist/singlecell-7TBALI2S.js +81 -0
  284. package/dist/snp-3U2G3Z57.js +33 -0
  285. package/dist/snp.unit.spec-BMBBUBYD.js +171 -0
  286. package/dist/snplocus-SSVZDIQV.js +203 -0
  287. package/dist/spliceevent.a53ss.diagram-FK7CN4AU.js +146 -0
  288. package/dist/spliceevent.exonskip.diagram-EFLGV3O4.js +278 -0
  289. package/dist/spliceevent.noeventdiagram-2DYO7CCZ.js +455 -0
  290. package/dist/ssGSEA-52LWBQJP.js +33 -0
  291. package/dist/ssGSEA.unit.spec-3JV6WHUQ.js +83 -0
  292. package/dist/stattable-RLMYQ4G6.js +117 -0
  293. package/dist/studyCatalog-DKB3U7EV.js +414 -0
  294. package/dist/studyCatalog-DKB3U7EV.js.map +7 -0
  295. package/dist/summarizeCnvGeneexp-QPRYAKC2.js +158 -0
  296. package/dist/summarizeGeneexpSurvival-RWVQXEKB.js +105 -0
  297. package/dist/summarizeMutationCnv-DW5F6NUJ.js +159 -0
  298. package/dist/summarizeMutationDiagnosis-5FOQ7CHI.js +35 -0
  299. package/dist/summarizeMutationSurvival-4UKB4EVO.js +99 -0
  300. package/dist/summary-TYC6QNT4.js +42 -0
  301. package/dist/summary.integration.spec-5GLJJZNM.js +409 -0
  302. package/dist/summaryInput-4IJGKW4P.js +242 -0
  303. package/dist/sunburst-G7DGATWP.js +278 -0
  304. package/dist/survival-IHM6A7LL.js +1248 -0
  305. package/dist/survival-IHM6A7LL.js.map +7 -0
  306. package/dist/survival-MKNABJPU.js +53 -0
  307. package/dist/survival.integration.spec-THOKI3DL.js +613 -0
  308. package/dist/survival.integration.spec-THOKI3DL.js.map +7 -0
  309. package/dist/svgraph-VB7JWWR5.js +1382 -0
  310. package/dist/svmr-VLQIO2U5.js +3837 -0
  311. package/dist/table-EAXMDWOY.js +197 -0
  312. package/dist/termCollection-5LG7ICQY.js +252 -0
  313. package/dist/termCollection-SB6MWLFK.js +33 -0
  314. package/dist/termCollection.unit.spec-H5ITGTR3.js +299 -0
  315. package/dist/termCollectionFractionSelection-2XZSTDCQ.js +42 -0
  316. package/dist/termCollectionFractionSelection.unit.spec-BIO7V6KA.js +188 -0
  317. package/dist/tk-TRWYZLQ2.js +1121 -0
  318. package/dist/tk-VZI5HNSX.js +41 -0
  319. package/dist/tp.ui-J5SNNAT3.js +1454 -0
  320. package/dist/tvs.dt-6YHFJPER.js +34 -0
  321. package/dist/tvs.dtcnv.categorical-WTIE63GM.js +35 -0
  322. package/dist/tvs.dtcnv.continuous-OCMKGTF5.js +67 -0
  323. package/dist/tvs.dtfusion-CA23UNM3.js +35 -0
  324. package/dist/tvs.dtitd-VSYMR3OD.js +35 -0
  325. package/dist/tvs.dtsnvindel-YBNO3CYF.js +35 -0
  326. package/dist/tvs.dtsv-S743GBB5.js +35 -0
  327. package/dist/tvs.numeric-22AHXO5K.js +20 -0
  328. package/dist/tvs.samplelst-XAJO4EM6.js +98 -0
  329. package/dist/tvs.termCollection-QOVJGAUC.js +124 -0
  330. package/dist/vocabulary-6EADTHP3.js +36 -0
  331. package/dist/wsi.direct-2WB2NGC5.js +8184 -0
  332. package/dist/wsi.direct-2WB2NGC5.js.map +7 -0
  333. package/package.json +3 -3
  334. package/dist/2dmaf-JIY57FG6.js +0 -1367
  335. package/dist/AIProjectAdmin-DGTBIE6E.js +0 -952
  336. package/dist/AIProjectAdmin-DGTBIE6E.js.map +0 -7
  337. package/dist/AggMatrixInput-FH6WRTLP.js +0 -277
  338. package/dist/AggregateMatrix-MGEX5AVF.js +0 -41
  339. package/dist/AppHeader-FFOQFH55.js +0 -830
  340. package/dist/BoxPlot-KCY4JVRX.js +0 -1211
  341. package/dist/CorrelationVolcano-E5URKQSM.js +0 -614
  342. package/dist/Cuminc-CBPMCKIC.js +0 -1219
  343. package/dist/DE-VANPWKZI.js +0 -88
  344. package/dist/DE-VANPWKZI.js.map +0 -7
  345. package/dist/DEinput-MONPHDB2.js +0 -405
  346. package/dist/DEinput-MONPHDB2.js.map +0 -7
  347. package/dist/DifferentialAnalysis-XRBS4PZI.js +0 -237
  348. package/dist/Disco-V2VJIDWG.js +0 -3389
  349. package/dist/Disco.UI-OEF5JXBU.js +0 -243
  350. package/dist/DmrPlot-KZUWJWBD.js +0 -637
  351. package/dist/GB-IYTEMMU7.js +0 -1391
  352. package/dist/GSEA-QB62B5KB.js +0 -851
  353. package/dist/GeneExpInput-CXX7SXMQ.js +0 -362
  354. package/dist/Geomap-QNHSCN4N.js +0 -84
  355. package/dist/HicApp-UIULZYYJ.js +0 -2245
  356. package/dist/IDCViewer-B2JENGZZ.js +0 -10812
  357. package/dist/NumBinaryEditor-JOU2J23M.js +0 -279
  358. package/dist/NumBinaryEditor.unit.spec-UXZBBVWL.js +0 -312
  359. package/dist/NumContEditor-BJGP4PVS.js +0 -105
  360. package/dist/NumContEditor.unit.spec-HEXOYIXC.js +0 -164
  361. package/dist/NumCustomBinEditor-HDRTVWNK.js +0 -33
  362. package/dist/NumCustomBinEditor.unit.spec-MN6QZ3ZB.js +0 -397
  363. package/dist/NumDiscreteEditor-JUBR45IJ.js +0 -170
  364. package/dist/NumDiscreteEditor.unit.spec-SDK2LR5B.js +0 -233
  365. package/dist/NumRegularBinEditor-AQPRZ3MI.js +0 -33
  366. package/dist/NumRegularBinEditor.unit.spec-GM3SFB2N.js +0 -278
  367. package/dist/NumSplineEditor-LYLROEGE.js +0 -210
  368. package/dist/NumSplineEditor.unit.spec-3Q2HP6IB.js +0 -224
  369. package/dist/NumericDensity-3ZCDZORO.js +0 -33
  370. package/dist/NumericDensity.unit.spec-MNIAR2PR.js +0 -418
  371. package/dist/NumericHandler-MUNEB5IS.js +0 -34
  372. package/dist/NumericHandler.unit.spec-KPWG2T27.js +0 -214
  373. package/dist/ProteomeInput-NEUHQ2G4.js +0 -388
  374. package/dist/Regression-C75T5LOY.js +0 -1416
  375. package/dist/RunChart2-CMQ2BBSJ.js +0 -749
  376. package/dist/SC-HYK26DXI.js +0 -1107
  377. package/dist/Violin-J5Z3NKMU.js +0 -1082
  378. package/dist/Volcano-VZGOJFM7.js +0 -1573
  379. package/dist/Volcano-VZGOJFM7.js.map +0 -7
  380. package/dist/WSIViewer-EEKHINZU.js +0 -18892
  381. package/dist/WSIViewer-EEKHINZU.js.map +0 -7
  382. package/dist/Wsi-ZP36MKK7.js +0 -431
  383. package/dist/WsiSamplesPlot-6G3U7U5L.js +0 -160
  384. package/dist/WsiSamplesPlot-6G3U7U5L.js.map +0 -7
  385. package/dist/adSandbox-W4THMDUI.js +0 -33
  386. package/dist/animatedBubbleChart-2IVR2WC3.js +0 -547
  387. package/dist/app-LAIPU5IO.js +0 -42
  388. package/dist/app-WMRDJINC.js +0 -32
  389. package/dist/bam-44WCWB5P.js +0 -876
  390. package/dist/barchart-P6XKCJRF.js +0 -42
  391. package/dist/barchart2-5NTYCQYN.js +0 -309
  392. package/dist/block-VEOD6CP4.js +0 -6249
  393. package/dist/block.init-RCPDUYAV.js +0 -33
  394. package/dist/block.mds.expressionrank-KALPK27B.js +0 -354
  395. package/dist/block.mds.geneboxplot-ZASU25BG.js +0 -823
  396. package/dist/block.mds.junction-DCVGVSYG.js +0 -1539
  397. package/dist/block.mds.svcnv-CEGYMRSE.js +0 -6796
  398. package/dist/block.svg-AW4E7NSS.js +0 -159
  399. package/dist/block.tk.aicheck-4ZPFLI5I.js +0 -278
  400. package/dist/block.tk.ase-F3VMNBE3.js +0 -360
  401. package/dist/block.tk.bam-3VDSEMVO.js +0 -1901
  402. package/dist/block.tk.bedgraphdot-3F6AMWFD.js +0 -379
  403. package/dist/block.tk.bigwig.ui-QO334QC3.js +0 -206
  404. package/dist/block.tk.hicstraw-VA7GNOOD.js +0 -818
  405. package/dist/block.tk.junction-7WIZ63R7.js +0 -2358
  406. package/dist/block.tk.junction.textmatrixui-ZHSVODGI.js +0 -194
  407. package/dist/block.tk.ld-JME4SP6A.js +0 -94
  408. package/dist/block.tk.menu-7BFQTH3Q.js +0 -1024
  409. package/dist/block.tk.pgv-C2N7UFYT.js +0 -938
  410. package/dist/brainImaging-6XFUKFZE.js +0 -515
  411. package/dist/brainRegions-SEMS7V4O.js +0 -216
  412. package/dist/brainRegions-SEMS7V4O.js.map +0 -7
  413. package/dist/bubbleHeatmap-YO4232WO.js +0 -378
  414. package/dist/cellTypeBubbleHeatmap-GM4BGCQ3.js +0 -278
  415. package/dist/chunk-2YDQC5BV.js +0 -562
  416. package/dist/chunk-3QMXNK7G.js +0 -379
  417. package/dist/chunk-4C2N2BQC.js +0 -6360
  418. package/dist/chunk-4Q46RDNU.js +0 -34
  419. package/dist/chunk-4YEDSMFX.js +0 -123
  420. package/dist/chunk-56HEUYYM.js +0 -2891
  421. package/dist/chunk-56HEUYYM.js.map +0 -7
  422. package/dist/chunk-5VMEMA4O.js +0 -158
  423. package/dist/chunk-66BJC6ZX.js +0 -217
  424. package/dist/chunk-6JBLNS4D.js +0 -387
  425. package/dist/chunk-6RN4RVKF.js +0 -480
  426. package/dist/chunk-6SKLD7JU.js +0 -59
  427. package/dist/chunk-7C45EYL6.js +0 -274
  428. package/dist/chunk-7RX5UEF3.js +0 -24193
  429. package/dist/chunk-7RX5UEF3.js.map +0 -7
  430. package/dist/chunk-AAM7HHPU.js +0 -103
  431. package/dist/chunk-AFMD6226.js +0 -240
  432. package/dist/chunk-AK3SW3VT.js +0 -176
  433. package/dist/chunk-BBYVVPEO.js +0 -1271
  434. package/dist/chunk-BBYVVPEO.js.map +0 -7
  435. package/dist/chunk-BEJJS2HC.js +0 -194
  436. package/dist/chunk-BMVRYEN2.js +0 -397
  437. package/dist/chunk-BZYTL2EU.js +0 -294
  438. package/dist/chunk-CLOHFGFX.js +0 -14
  439. package/dist/chunk-D6G64XPJ.js +0 -96
  440. package/dist/chunk-DAJT3XVZ.js +0 -31
  441. package/dist/chunk-DKPV7GCZ.js +0 -7966
  442. package/dist/chunk-DKPV7GCZ.js.map +0 -7
  443. package/dist/chunk-DMT6S5HJ.js +0 -5071
  444. package/dist/chunk-DO4SLQNP.js +0 -194
  445. package/dist/chunk-DUGOFIQS.js +0 -464
  446. package/dist/chunk-E3O6ZEWQ.js +0 -129
  447. package/dist/chunk-EJ3SSI5J.js +0 -382
  448. package/dist/chunk-FSDY4QVA.js +0 -272
  449. package/dist/chunk-FUEJFIQX.js +0 -203
  450. package/dist/chunk-FUSTNOQZ.js +0 -2130
  451. package/dist/chunk-FUSTNOQZ.js.map +0 -7
  452. package/dist/chunk-GAW2EETX.js +0 -281
  453. package/dist/chunk-GF6CKFXE.js +0 -1720
  454. package/dist/chunk-GI3RVOO4.js +0 -339
  455. package/dist/chunk-GQ6T62VJ.js +0 -141
  456. package/dist/chunk-GTMHDSOQ.js +0 -550
  457. package/dist/chunk-H555QBYP.js +0 -243
  458. package/dist/chunk-HDTFYTEL.js +0 -2694
  459. package/dist/chunk-HDTFYTEL.js.map +0 -7
  460. package/dist/chunk-HKQDZKSF.js +0 -119
  461. package/dist/chunk-HLZVDBAI.js +0 -1985
  462. package/dist/chunk-HLZVDBAI.js.map +0 -7
  463. package/dist/chunk-HWMZ2OHD.js +0 -49
  464. package/dist/chunk-JG6SE6YU.js +0 -1339
  465. package/dist/chunk-JSVLKCIQ.js +0 -160
  466. package/dist/chunk-JVRGY6IU.js +0 -54
  467. package/dist/chunk-JXUFZZRJ.js +0 -626
  468. package/dist/chunk-K5YG7MVJ.js +0 -2676
  469. package/dist/chunk-KAUMP3RR.js +0 -56
  470. package/dist/chunk-KLGNLUXR.js +0 -518
  471. package/dist/chunk-KWLBPOPE.js +0 -38
  472. package/dist/chunk-L42F5J5C.js +0 -185
  473. package/dist/chunk-L42F5J5C.js.map +0 -7
  474. package/dist/chunk-LXTBOUBG.js +0 -677
  475. package/dist/chunk-MCRWA655.js +0 -98
  476. package/dist/chunk-NGBQL4CM.js +0 -54
  477. package/dist/chunk-OKUFTLFL.js +0 -4297
  478. package/dist/chunk-OKUFTLFL.js.map +0 -7
  479. package/dist/chunk-ONXYJWY6.js +0 -102
  480. package/dist/chunk-OYHID2D7.js +0 -50
  481. package/dist/chunk-PT5JDHPR.js +0 -42
  482. package/dist/chunk-PZZIDJIB.js +0 -806
  483. package/dist/chunk-PZZIDJIB.js.map +0 -7
  484. package/dist/chunk-S5SOLLGM.js +0 -1654
  485. package/dist/chunk-S5SOLLGM.js.map +0 -7
  486. package/dist/chunk-S6XG74R4.js +0 -70
  487. package/dist/chunk-TAEU6SPJ.js +0 -197
  488. package/dist/chunk-UBZRZ3PS.js +0 -102
  489. package/dist/chunk-UM5NWVMA.js +0 -140
  490. package/dist/chunk-VHDVTQFR.js +0 -2784
  491. package/dist/chunk-VRY7WSS6.js +0 -170
  492. package/dist/chunk-VSPUFGDX.js +0 -339
  493. package/dist/chunk-VVDFRJVN.js +0 -306
  494. package/dist/chunk-VVDFRJVN.js.map +0 -7
  495. package/dist/chunk-WFOC4W5A.js +0 -55
  496. package/dist/chunk-WVPFLPWB.js +0 -402
  497. package/dist/chunk-WZUUWGEU.js +0 -22834
  498. package/dist/chunk-WZUUWGEU.js.map +0 -7
  499. package/dist/chunk-X7IAKV5Z.js +0 -276
  500. package/dist/chunk-XHOL37O6.js +0 -299
  501. package/dist/chunk-XJGPL2JZ.js +0 -39
  502. package/dist/chunk-XJGPL2JZ.js.map +0 -7
  503. package/dist/chunk-XPB2GP3C.js +0 -2327
  504. package/dist/chunk-XPVU5AMT.js +0 -263
  505. package/dist/chunk-YLJOZP4P.js +0 -4195
  506. package/dist/chunk-YLWSTPPL.js +0 -302
  507. package/dist/chunk-YZVWOQBP.js +0 -134
  508. package/dist/chunk-ZB3RP5QP.js +0 -446
  509. package/dist/chunk-ZU47ERPU.js +0 -26
  510. package/dist/cohort-ZTT2PSQA.js +0 -70
  511. package/dist/condition-L5DXIAJT.js +0 -327
  512. package/dist/controls-ROZP2O7A.js +0 -34
  513. package/dist/controls.config-YQKGHMIP.js +0 -34
  514. package/dist/correlation-6AKRIQXN.js +0 -95
  515. package/dist/customdata.inputui-DD3OFHUS.js +0 -284
  516. package/dist/dataDownload-VHHSLSZV.js +0 -329
  517. package/dist/databrowser.ui-RLYJOEWQ.js +0 -425
  518. package/dist/dictionary-IMOOQHIH.js +0 -113
  519. package/dist/dnaMethylation-T6XUIOJF.js +0 -33
  520. package/dist/dnaMethylation.integration.spec-NRJOIDRD.js +0 -198
  521. package/dist/dofetch-MLAEV3A2.js +0 -48
  522. package/dist/e2pca-F3TGJOMW.js +0 -344
  523. package/dist/ep-UAF6OL2Y.js +0 -1249
  524. package/dist/expclust.gdc.spec-GHH3JQ65.js +0 -302
  525. package/dist/facet-MB4C7GII.js +0 -519
  526. package/dist/gb-C5YSAFWP.js +0 -81
  527. package/dist/geneExpClustering-3BRSI5BR.js +0 -244
  528. package/dist/geneExpression-K3IZLSYC.js +0 -310
  529. package/dist/geneExpression-SIAPRA3E.js +0 -33
  530. package/dist/geneExpression.unit.spec-I66QVNT5.js +0 -99
  531. package/dist/geneORA-SLM3SNNS.js +0 -273
  532. package/dist/geneRanking-4EFYOR6A.js +0 -548
  533. package/dist/geneVariant-O347F2OY.js +0 -286
  534. package/dist/geneVariant-Z3BUIBLS.js +0 -36
  535. package/dist/geneVariant.integration.spec-ZZ65EYEL.js +0 -388
  536. package/dist/genefusion.ui-TK6UKPDR.js +0 -303
  537. package/dist/geneset-MVXSEOKZ.js +0 -203
  538. package/dist/genomeBrowser.spec-QDB4Z2L6.js +0 -276
  539. package/dist/grin2-DCU6PLPU.js +0 -70
  540. package/dist/grin2-P6Z45MCJ.js +0 -1137
  541. package/dist/hierCluster-3H47NLKS.js +0 -55
  542. package/dist/hierCluster-JG6VXTCV.js +0 -59
  543. package/dist/hierCluster.config-IP6I7RTS.js +0 -36
  544. package/dist/hierCluster.integration.spec-7PUNHRRS.js +0 -483
  545. package/dist/hierCluster.interactivity-FIDVRACV.js +0 -49
  546. package/dist/hierCluster.renderers-QMJWUPAI.js +0 -19
  547. package/dist/imagePlot-CXYKBCWS.js +0 -156
  548. package/dist/importPlot-Z4A54RXH.js +0 -8
  549. package/dist/isoformExpression-DMDV2PZY.js +0 -35
  550. package/dist/isoformExpression.unit.spec-W2LIYOXS.js +0 -237
  551. package/dist/junction-R5GMEO7Z.js +0 -36
  552. package/dist/junction.customTerm-AI44GNFV.js +0 -16
  553. package/dist/junction.unit.spec-SCRCANOC.js +0 -182
  554. package/dist/launch.adhoc-THLTYZJT.js +0 -37
  555. package/dist/leftlabel.sample-GKQXEY4J.js +0 -258
  556. package/dist/legacyDataset-27L4DMCL.js +0 -117
  557. package/dist/lollipop-2TW6GGPY.js +0 -166
  558. package/dist/maf-A4PVW5V2.js +0 -455
  559. package/dist/maftimeline-QMX3HOAU.js +0 -587
  560. package/dist/matrix-BGRYRU3T.js +0 -54
  561. package/dist/matrix-GPXTUVCQ.js +0 -59
  562. package/dist/matrix.cells-C6OY7F5T.js +0 -26
  563. package/dist/matrix.config-Z5ZGHXDV.js +0 -37
  564. package/dist/matrix.data-WB26I3TF.js +0 -23
  565. package/dist/matrix.groups-C2V2CV4A.js +0 -26
  566. package/dist/matrix.integration.spec-3COAXQBV.js +0 -3160
  567. package/dist/matrix.interactivity-NGHIQR3A.js +0 -37
  568. package/dist/matrix.layout-NYIOESGN.js +0 -39
  569. package/dist/matrix.legend-Q5HHWP5Q.js +0 -20
  570. package/dist/matrix.renderers-GLXZARIP.js +0 -34
  571. package/dist/matrix.serieses-LDQEPXPD.js +0 -19
  572. package/dist/matrix.sort-44TQNRIX.js +0 -26
  573. package/dist/matrix.sort.unit.spec-T3BDWJ3Z.js +0 -468
  574. package/dist/matrix.sorterUi-6Y4YBQYL.js +0 -16
  575. package/dist/matrix.sorterUi.unit.spec-NHUYNMNU.js +0 -338
  576. package/dist/matrix.unit.spec-C7IRIBN6.js +0 -150
  577. package/dist/mavb-E37LI73X.js +0 -727
  578. package/dist/mds.fimo-YTGX7VEN.js +0 -513
  579. package/dist/mds.samplescatterplot-FFGGJSI3.js +0 -1545
  580. package/dist/mds.survivalplot-NCWRXXV4.js +0 -477
  581. package/dist/multivalue-N7A2PU5K.js +0 -83
  582. package/dist/numericDictTermCluster-AKQKRBQH.js +0 -63
  583. package/dist/oncomatrix-QPVGACMF.js +0 -290
  584. package/dist/oncomatrix.spec-6L2NDN2G.js +0 -443
  585. package/dist/plot.2dvaf-6TLON77B.js +0 -372
  586. package/dist/plot.app-VM273TXU.js +0 -36
  587. package/dist/plot.barplot-IQTZURHK.js +0 -97
  588. package/dist/plot.boxplot-WEXB6HII.js +0 -146
  589. package/dist/plot.brainImaging-REGSSBHV.js +0 -51
  590. package/dist/plot.disco-F25Z3FQL.js +0 -99
  591. package/dist/plot.ssgq-CRRK26RS.js +0 -134
  592. package/dist/plot.vaf2cov-WCNPZKXK.js +0 -253
  593. package/dist/plot.wsi-6OAPT5BA.js +0 -36
  594. package/dist/plot.wsi-6OAPT5BA.js.map +0 -7
  595. package/dist/polar2-MH5GPXHJ.js +0 -232
  596. package/dist/profileForms-2YX2OYDI.js +0 -941
  597. package/dist/profilePlot-FUTMZ2PP.js +0 -49
  598. package/dist/proteinView-6Z4ALZW2.js +0 -1562
  599. package/dist/proteinView-6Z4ALZW2.js.map +0 -7
  600. package/dist/proteomeCohortCompare-6GLFOYI5.js +0 -780
  601. package/dist/proteomeCohortCompare-6GLFOYI5.js.map +0 -7
  602. package/dist/pseudbulk.unit.spec-S7FDL3IX.js +0 -86
  603. package/dist/pseudobulk-A3LB23N2.js +0 -35
  604. package/dist/qualitative-5VJRMF4S.js +0 -38
  605. package/dist/radar2-2SJX4ZXN.js +0 -327
  606. package/dist/radarFacility2-7FPO34JS.js +0 -335
  607. package/dist/rememberedGvQ.unit.spec-WOQVPQ75.js +0 -211
  608. package/dist/render-ZLA2RRBP.js +0 -33
  609. package/dist/report-VCE6RILD.js +0 -217
  610. package/dist/sampleView-QYTX4OLI.js +0 -43
  611. package/dist/samplelst-7NGH3SUM.js +0 -106
  612. package/dist/samplematrix-SNAR6IBB.js +0 -2193
  613. package/dist/sc-2JETYAI4.js +0 -81
  614. package/dist/scatter-D7VZOBEE.js +0 -880
  615. package/dist/scatter-GHBQM2RR.js +0 -88
  616. package/dist/selectGenomeWithTklst-BD4GMGX3.js +0 -129
  617. package/dist/singleCellCellType-XHLOJVVC.js +0 -33
  618. package/dist/singleCellCellType.unit.spec-LCLR3IOD.js +0 -154
  619. package/dist/singleCellGeneExpression-JRBONI5C.js +0 -33
  620. package/dist/singleCellGeneExpression.unit.spec-Z2KSVCIG.js +0 -148
  621. package/dist/singleCellPlot-4462CQHF.js +0 -49
  622. package/dist/singlecell-CDUQ6MTO.js +0 -81
  623. package/dist/singlecell-SO3B5KJ7.js +0 -1566
  624. package/dist/snp-YE2MXKJO.js +0 -33
  625. package/dist/snp.unit.spec-MT57TGGQ.js +0 -171
  626. package/dist/snplocus-RSNKWY63.js +0 -203
  627. package/dist/spliceevent.a53ss.diagram-6N6YGYV7.js +0 -146
  628. package/dist/spliceevent.exonskip.diagram-LMNUS4XV.js +0 -278
  629. package/dist/spliceevent.noeventdiagram-LTBH4YD5.js +0 -455
  630. package/dist/ssGSEA-DPK4PDM2.js +0 -33
  631. package/dist/ssGSEA.unit.spec-K2SA7ME7.js +0 -83
  632. package/dist/stattable-PR47XT4F.js +0 -117
  633. package/dist/studyCatalog-GMUWIUL4.js +0 -378
  634. package/dist/studyCatalog-GMUWIUL4.js.map +0 -7
  635. package/dist/summarizeCnvGeneexp-YZEMDLES.js +0 -158
  636. package/dist/summarizeGeneexpSurvival-3TXV6ZNI.js +0 -105
  637. package/dist/summarizeMutationCnv-EBWSEHWJ.js +0 -159
  638. package/dist/summarizeMutationDiagnosis-FXA25W3O.js +0 -35
  639. package/dist/summarizeMutationSurvival-MR4AOMNS.js +0 -99
  640. package/dist/summary-4C6LGTMF.js +0 -42
  641. package/dist/summary.integration.spec-Y6JLH7NH.js +0 -409
  642. package/dist/summaryInput-NWT2DXWU.js +0 -242
  643. package/dist/sunburst-266MA7E2.js +0 -278
  644. package/dist/survival-CAZCIY2N.js +0 -53
  645. package/dist/survival-EILGNIY7.js +0 -1246
  646. package/dist/survival-EILGNIY7.js.map +0 -7
  647. package/dist/survival.integration.spec-34JJVLLI.js +0 -613
  648. package/dist/survival.integration.spec-34JJVLLI.js.map +0 -7
  649. package/dist/svgraph-OFUESREM.js +0 -1382
  650. package/dist/svmr-PVH42MY4.js +0 -3837
  651. package/dist/table-C2SICFZV.js +0 -197
  652. package/dist/termCollection-H4RL5WJG.js +0 -33
  653. package/dist/termCollection-TGYDI7NP.js +0 -252
  654. package/dist/termCollection.unit.spec-JSALS7GL.js +0 -299
  655. package/dist/termCollectionFractionSelection-YJVDNV4I.js +0 -42
  656. package/dist/termCollectionFractionSelection.unit.spec-4GM7P4ZW.js +0 -188
  657. package/dist/tk-RZCPSHJG.js +0 -1121
  658. package/dist/tk-SNTRA5CC.js +0 -41
  659. package/dist/tp.ui-2W4K3XH6.js +0 -1454
  660. package/dist/tvs.dt-GIPVC3R6.js +0 -34
  661. package/dist/tvs.dtcnv.categorical-TEYAS4OU.js +0 -35
  662. package/dist/tvs.dtcnv.continuous-VQRATYPZ.js +0 -67
  663. package/dist/tvs.dtfusion-P2KF5Z4H.js +0 -35
  664. package/dist/tvs.dtitd-TM6UROSH.js +0 -35
  665. package/dist/tvs.dtsnvindel-FZXC23NF.js +0 -35
  666. package/dist/tvs.dtsv-Y5QEJPYG.js +0 -35
  667. package/dist/tvs.numeric-3UXW4JHJ.js +0 -20
  668. package/dist/tvs.samplelst-MLAFPFER.js +0 -98
  669. package/dist/tvs.termCollection-ZQQDKESH.js +0 -124
  670. package/dist/vocabulary-JRUZPHMG.js +0 -36
  671. package/dist/wsi.direct-6QYNXOBY.js +0 -244
  672. package/dist/wsi.direct-6QYNXOBY.js.map +0 -7
  673. /package/dist/{2dmaf-JIY57FG6.js.map → 2dmaf-5OYM4MXA.js.map} +0 -0
  674. /package/dist/{AggMatrixInput-FH6WRTLP.js.map → AggMatrixInput-4VTI4Y6E.js.map} +0 -0
  675. /package/dist/{AggregateMatrix-MGEX5AVF.js.map → AggregateMatrix-K7SGNO63.js.map} +0 -0
  676. /package/dist/{AppHeader-FFOQFH55.js.map → AppHeader-WU6TO2OZ.js.map} +0 -0
  677. /package/dist/{BoxPlot-KCY4JVRX.js.map → BoxPlot-OW7U3XTF.js.map} +0 -0
  678. /package/dist/{CorrelationVolcano-E5URKQSM.js.map → CorrelationVolcano-B3JTTZHF.js.map} +0 -0
  679. /package/dist/{Cuminc-CBPMCKIC.js.map → Cuminc-AJEXWRU2.js.map} +0 -0
  680. /package/dist/{DifferentialAnalysis-XRBS4PZI.js.map → DifferentialAnalysis-BFCQBX5J.js.map} +0 -0
  681. /package/dist/{Disco-V2VJIDWG.js.map → Disco-ZJLVQRTC.js.map} +0 -0
  682. /package/dist/{Disco.UI-OEF5JXBU.js.map → Disco.UI-AEDACXW2.js.map} +0 -0
  683. /package/dist/{DmrPlot-KZUWJWBD.js.map → DmrPlot-QMRXAOM3.js.map} +0 -0
  684. /package/dist/{GB-IYTEMMU7.js.map → GB-MFU2UJ22.js.map} +0 -0
  685. /package/dist/{GSEA-QB62B5KB.js.map → GSEA-E3NHU22A.js.map} +0 -0
  686. /package/dist/{GeneExpInput-CXX7SXMQ.js.map → GeneExpInput-MIUNSOPY.js.map} +0 -0
  687. /package/dist/{Geomap-QNHSCN4N.js.map → Geomap-HAJG3STN.js.map} +0 -0
  688. /package/dist/{HicApp-UIULZYYJ.js.map → HicApp-ECFFIRWI.js.map} +0 -0
  689. /package/dist/{IDCViewer-B2JENGZZ.js.map → IDCViewer-TNSD3U2V.js.map} +0 -0
  690. /package/dist/{NumBinaryEditor-JOU2J23M.js.map → NumBinaryEditor-CNBGZ6WY.js.map} +0 -0
  691. /package/dist/{NumBinaryEditor.unit.spec-UXZBBVWL.js.map → NumBinaryEditor.unit.spec-SKFDALF3.js.map} +0 -0
  692. /package/dist/{NumContEditor-BJGP4PVS.js.map → NumContEditor-7ID2U7JL.js.map} +0 -0
  693. /package/dist/{NumContEditor.unit.spec-HEXOYIXC.js.map → NumContEditor.unit.spec-XHSQSAWK.js.map} +0 -0
  694. /package/dist/{NumCustomBinEditor-HDRTVWNK.js.map → NumCustomBinEditor-PAIPRJPO.js.map} +0 -0
  695. /package/dist/{NumCustomBinEditor.unit.spec-MN6QZ3ZB.js.map → NumCustomBinEditor.unit.spec-QYVZMMHV.js.map} +0 -0
  696. /package/dist/{NumDiscreteEditor-JUBR45IJ.js.map → NumDiscreteEditor-K2NZZQTH.js.map} +0 -0
  697. /package/dist/{NumDiscreteEditor.unit.spec-SDK2LR5B.js.map → NumDiscreteEditor.unit.spec-3CG5VEQL.js.map} +0 -0
  698. /package/dist/{NumRegularBinEditor-AQPRZ3MI.js.map → NumRegularBinEditor-EOVZ22TP.js.map} +0 -0
  699. /package/dist/{NumRegularBinEditor.unit.spec-GM3SFB2N.js.map → NumRegularBinEditor.unit.spec-FHTVH5FH.js.map} +0 -0
  700. /package/dist/{NumSplineEditor-LYLROEGE.js.map → NumSplineEditor-N3REMJUC.js.map} +0 -0
  701. /package/dist/{NumSplineEditor.unit.spec-3Q2HP6IB.js.map → NumSplineEditor.unit.spec-DZCP35GL.js.map} +0 -0
  702. /package/dist/{NumericDensity-3ZCDZORO.js.map → NumericDensity-42MWVI2S.js.map} +0 -0
  703. /package/dist/{NumericDensity.unit.spec-MNIAR2PR.js.map → NumericDensity.unit.spec-T2HHSQON.js.map} +0 -0
  704. /package/dist/{NumericHandler-MUNEB5IS.js.map → NumericHandler-5XU3SSPD.js.map} +0 -0
  705. /package/dist/{NumericHandler.unit.spec-KPWG2T27.js.map → NumericHandler.unit.spec-3F23KSAQ.js.map} +0 -0
  706. /package/dist/{ProteomeInput-NEUHQ2G4.js.map → ProteomeInput-UN2BUNRO.js.map} +0 -0
  707. /package/dist/{Regression-C75T5LOY.js.map → Regression-HWLJENA5.js.map} +0 -0
  708. /package/dist/{RunChart2-CMQ2BBSJ.js.map → RunChart2-YO55WE4M.js.map} +0 -0
  709. /package/dist/{SC-HYK26DXI.js.map → SC-LEDJ4DQR.js.map} +0 -0
  710. /package/dist/{Violin-J5Z3NKMU.js.map → Violin-E6PDJZ2B.js.map} +0 -0
  711. /package/dist/{Wsi-ZP36MKK7.js.map → Wsi-S675CYTW.js.map} +0 -0
  712. /package/dist/{adSandbox-W4THMDUI.js.map → adSandbox-ZJQ5ZW2T.js.map} +0 -0
  713. /package/dist/{animatedBubbleChart-2IVR2WC3.js.map → animatedBubbleChart-LRUS7W36.js.map} +0 -0
  714. /package/dist/{app-LAIPU5IO.js.map → app-7Q3QIBU4.js.map} +0 -0
  715. /package/dist/{app-WMRDJINC.js.map → app-PKSI4MV5.js.map} +0 -0
  716. /package/dist/{bam-44WCWB5P.js.map → bam-X5JH5ZT7.js.map} +0 -0
  717. /package/dist/{barchart-P6XKCJRF.js.map → barchart-UT6J4L2N.js.map} +0 -0
  718. /package/dist/{barchart2-5NTYCQYN.js.map → barchart2-ZG5QJO3C.js.map} +0 -0
  719. /package/dist/{block-VEOD6CP4.js.map → block-TC466NGW.js.map} +0 -0
  720. /package/dist/{block.init-RCPDUYAV.js.map → block.init-CIBNSYAC.js.map} +0 -0
  721. /package/dist/{block.mds.expressionrank-KALPK27B.js.map → block.mds.expressionrank-EY5PCQCK.js.map} +0 -0
  722. /package/dist/{block.mds.geneboxplot-ZASU25BG.js.map → block.mds.geneboxplot-R6AOMHO5.js.map} +0 -0
  723. /package/dist/{block.mds.junction-DCVGVSYG.js.map → block.mds.junction-JMV6FNYC.js.map} +0 -0
  724. /package/dist/{block.mds.svcnv-CEGYMRSE.js.map → block.mds.svcnv-IHTV3QYG.js.map} +0 -0
  725. /package/dist/{block.svg-AW4E7NSS.js.map → block.svg-NTFLVQAQ.js.map} +0 -0
  726. /package/dist/{block.tk.aicheck-4ZPFLI5I.js.map → block.tk.aicheck-FYPL32Y4.js.map} +0 -0
  727. /package/dist/{block.tk.ase-F3VMNBE3.js.map → block.tk.ase-FWCB6VBO.js.map} +0 -0
  728. /package/dist/{block.tk.bam-3VDSEMVO.js.map → block.tk.bam-Q5UFUABN.js.map} +0 -0
  729. /package/dist/{block.tk.bedgraphdot-3F6AMWFD.js.map → block.tk.bedgraphdot-KBI3GFDM.js.map} +0 -0
  730. /package/dist/{block.tk.bigwig.ui-QO334QC3.js.map → block.tk.bigwig.ui-KXNFX7G7.js.map} +0 -0
  731. /package/dist/{block.tk.hicstraw-VA7GNOOD.js.map → block.tk.hicstraw-MQBH3YAJ.js.map} +0 -0
  732. /package/dist/{block.tk.junction-7WIZ63R7.js.map → block.tk.junction-EBTVXLJH.js.map} +0 -0
  733. /package/dist/{block.tk.junction.textmatrixui-ZHSVODGI.js.map → block.tk.junction.textmatrixui-ETYLCP2O.js.map} +0 -0
  734. /package/dist/{block.tk.ld-JME4SP6A.js.map → block.tk.ld-NLB6L6WQ.js.map} +0 -0
  735. /package/dist/{block.tk.menu-7BFQTH3Q.js.map → block.tk.menu-PJLCOXVJ.js.map} +0 -0
  736. /package/dist/{block.tk.pgv-C2N7UFYT.js.map → block.tk.pgv-JOIQVWL2.js.map} +0 -0
  737. /package/dist/{brainImaging-6XFUKFZE.js.map → brainImaging-SPRC3QFB.js.map} +0 -0
  738. /package/dist/{bubbleHeatmap-YO4232WO.js.map → bubbleHeatmap-CFTZ5RXH.js.map} +0 -0
  739. /package/dist/{cellTypeBubbleHeatmap-GM4BGCQ3.js.map → cellTypeBubbleHeatmap-DXPLFT5U.js.map} +0 -0
  740. /package/dist/{chunk-UBZRZ3PS.js.map → chunk-2BQ572SL.js.map} +0 -0
  741. /package/dist/{chunk-AAM7HHPU.js.map → chunk-2DQIQYY3.js.map} +0 -0
  742. /package/dist/{chunk-YZVWOQBP.js.map → chunk-2POQWEK6.js.map} +0 -0
  743. /package/dist/{chunk-ZB3RP5QP.js.map → chunk-2SQEVMAL.js.map} +0 -0
  744. /package/dist/{chunk-5VMEMA4O.js.map → chunk-37HTZ6IG.js.map} +0 -0
  745. /package/dist/{chunk-K5YG7MVJ.js.map → chunk-452765PG.js.map} +0 -0
  746. /package/dist/{chunk-DAJT3XVZ.js.map → chunk-4DXQJGJ7.js.map} +0 -0
  747. /package/dist/{chunk-E3O6ZEWQ.js.map → chunk-5DBW3WLK.js.map} +0 -0
  748. /package/dist/{chunk-WVPFLPWB.js.map → chunk-5ILEFNXJ.js.map} +0 -0
  749. /package/dist/{chunk-6SKLD7JU.js.map → chunk-5UO7MKCO.js.map} +0 -0
  750. /package/dist/{chunk-H555QBYP.js.map → chunk-7R7P6VMT.js.map} +0 -0
  751. /package/dist/{chunk-D6G64XPJ.js.map → chunk-7X6NF7NI.js.map} +0 -0
  752. /package/dist/{chunk-ZU47ERPU.js.map → chunk-ANGLZ4XR.js.map} +0 -0
  753. /package/dist/{chunk-KWLBPOPE.js.map → chunk-BMQDU7KN.js.map} +0 -0
  754. /package/dist/{chunk-GAW2EETX.js.map → chunk-C5TU4AYP.js.map} +0 -0
  755. /package/dist/{chunk-PT5JDHPR.js.map → chunk-DHNET3P4.js.map} +0 -0
  756. /package/dist/{chunk-EJ3SSI5J.js.map → chunk-EGKHDALO.js.map} +0 -0
  757. /package/dist/{chunk-4Q46RDNU.js.map → chunk-EPWGUWQP.js.map} +0 -0
  758. /package/dist/{chunk-JG6SE6YU.js.map → chunk-F3EYPES3.js.map} +0 -0
  759. /package/dist/{chunk-BEJJS2HC.js.map → chunk-F4DM3WS4.js.map} +0 -0
  760. /package/dist/{chunk-BZYTL2EU.js.map → chunk-FTLCINDC.js.map} +0 -0
  761. /package/dist/{chunk-6RN4RVKF.js.map → chunk-GT6WJUJY.js.map} +0 -0
  762. /package/dist/{chunk-S6XG74R4.js.map → chunk-GWCK5QGV.js.map} +0 -0
  763. /package/dist/{chunk-DUGOFIQS.js.map → chunk-HJSGHFJ6.js.map} +0 -0
  764. /package/dist/{chunk-HWMZ2OHD.js.map → chunk-HS6BTSFX.js.map} +0 -0
  765. /package/dist/{chunk-DMT6S5HJ.js.map → chunk-IB5TKNG5.js.map} +0 -0
  766. /package/dist/{chunk-NGBQL4CM.js.map → chunk-IIMTOPH3.js.map} +0 -0
  767. /package/dist/{chunk-FSDY4QVA.js.map → chunk-JAXN3Q3K.js.map} +0 -0
  768. /package/dist/{chunk-GQ6T62VJ.js.map → chunk-KIRZXPMB.js.map} +0 -0
  769. /package/dist/{chunk-JVRGY6IU.js.map → chunk-L32KMIC3.js.map} +0 -0
  770. /package/dist/{chunk-4YEDSMFX.js.map → chunk-LB7NENEB.js.map} +0 -0
  771. /package/dist/{chunk-2YDQC5BV.js.map → chunk-LDWMVZYF.js.map} +0 -0
  772. /package/dist/{chunk-UM5NWVMA.js.map → chunk-M367Y7ML.js.map} +0 -0
  773. /package/dist/{chunk-VSPUFGDX.js.map → chunk-M4XXKTH2.js.map} +0 -0
  774. /package/dist/{chunk-AK3SW3VT.js.map → chunk-ME7OF3CS.js.map} +0 -0
  775. /package/dist/{chunk-JXUFZZRJ.js.map → chunk-N2CXLMNX.js.map} +0 -0
  776. /package/dist/{chunk-HKQDZKSF.js.map → chunk-N7DVQTPC.js.map} +0 -0
  777. /package/dist/{chunk-KLGNLUXR.js.map → chunk-N7TD7N7D.js.map} +0 -0
  778. /package/dist/{chunk-XHOL37O6.js.map → chunk-NBX6TT5C.js.map} +0 -0
  779. /package/dist/{chunk-GI3RVOO4.js.map → chunk-NSRGYBDM.js.map} +0 -0
  780. /package/dist/{chunk-3QMXNK7G.js.map → chunk-NVS7KYYI.js.map} +0 -0
  781. /package/dist/{chunk-BMVRYEN2.js.map → chunk-OVPEMVXT.js.map} +0 -0
  782. /package/dist/{chunk-7C45EYL6.js.map → chunk-OXWLQQXL.js.map} +0 -0
  783. /package/dist/{chunk-WFOC4W5A.js.map → chunk-QGGSYEVJ.js.map} +0 -0
  784. /package/dist/{chunk-OYHID2D7.js.map → chunk-QLEVONLD.js.map} +0 -0
  785. /package/dist/{chunk-MCRWA655.js.map → chunk-RNWHB5DI.js.map} +0 -0
  786. /package/dist/{chunk-FUEJFIQX.js.map → chunk-RUHLDUOT.js.map} +0 -0
  787. /package/dist/{chunk-TAEU6SPJ.js.map → chunk-RV34WFGZ.js.map} +0 -0
  788. /package/dist/{chunk-4C2N2BQC.js.map → chunk-SDVE5ECI.js.map} +0 -0
  789. /package/dist/{chunk-VRY7WSS6.js.map → chunk-SWO6DZTG.js.map} +0 -0
  790. /package/dist/{chunk-6JBLNS4D.js.map → chunk-SYPSS3JQ.js.map} +0 -0
  791. /package/dist/{chunk-XPB2GP3C.js.map → chunk-TDM3645O.js.map} +0 -0
  792. /package/dist/{chunk-66BJC6ZX.js.map → chunk-VVO3R5JV.js.map} +0 -0
  793. /package/dist/{chunk-CLOHFGFX.js.map → chunk-VYEU6Y35.js.map} +0 -0
  794. /package/dist/{chunk-XPVU5AMT.js.map → chunk-WGXC6IEF.js.map} +0 -0
  795. /package/dist/{chunk-GF6CKFXE.js.map → chunk-WPDM57B5.js.map} +0 -0
  796. /package/dist/{chunk-VHDVTQFR.js.map → chunk-WS7WKS2B.js.map} +0 -0
  797. /package/dist/{chunk-X7IAKV5Z.js.map → chunk-X63NSV33.js.map} +0 -0
  798. /package/dist/{chunk-KAUMP3RR.js.map → chunk-XXNRSSBR.js.map} +0 -0
  799. /package/dist/{chunk-ONXYJWY6.js.map → chunk-YD6UGDFI.js.map} +0 -0
  800. /package/dist/{chunk-JSVLKCIQ.js.map → chunk-YRIYDFNU.js.map} +0 -0
  801. /package/dist/{chunk-DO4SLQNP.js.map → chunk-YY5WQQ3J.js.map} +0 -0
  802. /package/dist/{chunk-YLJOZP4P.js.map → chunk-Z2ZITHT4.js.map} +0 -0
  803. /package/dist/{chunk-YLWSTPPL.js.map → chunk-Z4SM3FBK.js.map} +0 -0
  804. /package/dist/{chunk-AFMD6226.js.map → chunk-ZEYEIUEZ.js.map} +0 -0
  805. /package/dist/{chunk-LXTBOUBG.js.map → chunk-ZLYTDHQP.js.map} +0 -0
  806. /package/dist/{chunk-GTMHDSOQ.js.map → chunk-ZWCVRVV4.js.map} +0 -0
  807. /package/dist/{cohort-ZTT2PSQA.js.map → cohort-FZNMFWOX.js.map} +0 -0
  808. /package/dist/{condition-L5DXIAJT.js.map → condition-AJJLFCBQ.js.map} +0 -0
  809. /package/dist/{controls-ROZP2O7A.js.map → controls-SZOLV37V.js.map} +0 -0
  810. /package/dist/{controls.config-YQKGHMIP.js.map → controls.config-CVP75WFA.js.map} +0 -0
  811. /package/dist/{correlation-6AKRIQXN.js.map → correlation-UFJFQHQ3.js.map} +0 -0
  812. /package/dist/{customdata.inputui-DD3OFHUS.js.map → customdata.inputui-HOVA4A6O.js.map} +0 -0
  813. /package/dist/{dataDownload-VHHSLSZV.js.map → dataDownload-VTUG4IOK.js.map} +0 -0
  814. /package/dist/{databrowser.ui-RLYJOEWQ.js.map → databrowser.ui-O5S4Y4EK.js.map} +0 -0
  815. /package/dist/{dictionary-IMOOQHIH.js.map → dictionary-L2UNNNP7.js.map} +0 -0
  816. /package/dist/{dnaMethylation-T6XUIOJF.js.map → dnaMethylation-B4SWZI4O.js.map} +0 -0
  817. /package/dist/{dnaMethylation.integration.spec-NRJOIDRD.js.map → dnaMethylation.integration.spec-ANJAMNYJ.js.map} +0 -0
  818. /package/dist/{dofetch-MLAEV3A2.js.map → dofetch-F5XSHQIS.js.map} +0 -0
  819. /package/dist/{e2pca-F3TGJOMW.js.map → e2pca-66ARIMKL.js.map} +0 -0
  820. /package/dist/{ep-UAF6OL2Y.js.map → ep-OFGJYVUY.js.map} +0 -0
  821. /package/dist/{expclust.gdc.spec-GHH3JQ65.js.map → expclust.gdc.spec-22RXQTTP.js.map} +0 -0
  822. /package/dist/{facet-MB4C7GII.js.map → facet-GVZQ3RPN.js.map} +0 -0
  823. /package/dist/{gb-C5YSAFWP.js.map → gb-HEPGVYEK.js.map} +0 -0
  824. /package/dist/{geneExpClustering-3BRSI5BR.js.map → geneExpClustering-3NU2U422.js.map} +0 -0
  825. /package/dist/{geneExpression-K3IZLSYC.js.map → geneExpression-FXQ4L2J2.js.map} +0 -0
  826. /package/dist/{geneExpression-SIAPRA3E.js.map → geneExpression-XYVYJJA5.js.map} +0 -0
  827. /package/dist/{geneExpression.unit.spec-I66QVNT5.js.map → geneExpression.unit.spec-K3FIRSNK.js.map} +0 -0
  828. /package/dist/{geneORA-SLM3SNNS.js.map → geneORA-5M2JSDMF.js.map} +0 -0
  829. /package/dist/{geneRanking-4EFYOR6A.js.map → geneRanking-TP3R3CS3.js.map} +0 -0
  830. /package/dist/{geneVariant-Z3BUIBLS.js.map → geneVariant-232EYUFJ.js.map} +0 -0
  831. /package/dist/{geneVariant-O347F2OY.js.map → geneVariant-BHXTPUDC.js.map} +0 -0
  832. /package/dist/{geneVariant.integration.spec-ZZ65EYEL.js.map → geneVariant.integration.spec-ICFHVFIR.js.map} +0 -0
  833. /package/dist/{genefusion.ui-TK6UKPDR.js.map → genefusion.ui-ABRCUQFC.js.map} +0 -0
  834. /package/dist/{geneset-MVXSEOKZ.js.map → geneset-N42FIVA6.js.map} +0 -0
  835. /package/dist/{genomeBrowser.spec-QDB4Z2L6.js.map → genomeBrowser.spec-5HKQKLRU.js.map} +0 -0
  836. /package/dist/{grin2-P6Z45MCJ.js.map → grin2-H2KJYLP6.js.map} +0 -0
  837. /package/dist/{grin2-DCU6PLPU.js.map → grin2-NGMTEMXF.js.map} +0 -0
  838. /package/dist/{hierCluster-3H47NLKS.js.map → hierCluster-JU5JPLM7.js.map} +0 -0
  839. /package/dist/{hierCluster-JG6VXTCV.js.map → hierCluster-LSSH275H.js.map} +0 -0
  840. /package/dist/{hierCluster.config-IP6I7RTS.js.map → hierCluster.config-ILOR7GBB.js.map} +0 -0
  841. /package/dist/{hierCluster.integration.spec-7PUNHRRS.js.map → hierCluster.integration.spec-CNR5OJOH.js.map} +0 -0
  842. /package/dist/{hierCluster.interactivity-FIDVRACV.js.map → hierCluster.interactivity-TLEIVTFK.js.map} +0 -0
  843. /package/dist/{hierCluster.renderers-QMJWUPAI.js.map → hierCluster.renderers-P7JNIT3N.js.map} +0 -0
  844. /package/dist/{imagePlot-CXYKBCWS.js.map → imagePlot-BF67SXQR.js.map} +0 -0
  845. /package/dist/{importPlot-Z4A54RXH.js.map → importPlot-OHXSXNZN.js.map} +0 -0
  846. /package/dist/{isoformExpression-DMDV2PZY.js.map → isoformExpression-4VKHE4HA.js.map} +0 -0
  847. /package/dist/{isoformExpression.unit.spec-W2LIYOXS.js.map → isoformExpression.unit.spec-4TVSIFG4.js.map} +0 -0
  848. /package/dist/{junction-R5GMEO7Z.js.map → junction-VUHORV43.js.map} +0 -0
  849. /package/dist/{junction.customTerm-AI44GNFV.js.map → junction.customTerm-FRYWSS4P.js.map} +0 -0
  850. /package/dist/{junction.unit.spec-SCRCANOC.js.map → junction.unit.spec-KKVLYT7Q.js.map} +0 -0
  851. /package/dist/{launch.adhoc-THLTYZJT.js.map → launch.adhoc-UDYMFZTQ.js.map} +0 -0
  852. /package/dist/{leftlabel.sample-GKQXEY4J.js.map → leftlabel.sample-R5FFBWG3.js.map} +0 -0
  853. /package/dist/{legacyDataset-27L4DMCL.js.map → legacyDataset-IEFWFVS6.js.map} +0 -0
  854. /package/dist/{lollipop-2TW6GGPY.js.map → lollipop-3IX6ZYUN.js.map} +0 -0
  855. /package/dist/{maf-A4PVW5V2.js.map → maf-42UFYSL4.js.map} +0 -0
  856. /package/dist/{maftimeline-QMX3HOAU.js.map → maftimeline-M5WYEN62.js.map} +0 -0
  857. /package/dist/{matrix-BGRYRU3T.js.map → matrix-CI76EDHU.js.map} +0 -0
  858. /package/dist/{matrix-GPXTUVCQ.js.map → matrix-WJZKA6VR.js.map} +0 -0
  859. /package/dist/{matrix.cells-C6OY7F5T.js.map → matrix.cells-ZFKVIPDC.js.map} +0 -0
  860. /package/dist/{matrix.config-Z5ZGHXDV.js.map → matrix.config-24TFHBEM.js.map} +0 -0
  861. /package/dist/{matrix.data-WB26I3TF.js.map → matrix.data-NCGZPNWR.js.map} +0 -0
  862. /package/dist/{matrix.groups-C2V2CV4A.js.map → matrix.groups-XQJTGM6M.js.map} +0 -0
  863. /package/dist/{matrix.integration.spec-3COAXQBV.js.map → matrix.integration.spec-OGXZUDE6.js.map} +0 -0
  864. /package/dist/{matrix.interactivity-NGHIQR3A.js.map → matrix.interactivity-ZOOTPNSW.js.map} +0 -0
  865. /package/dist/{matrix.layout-NYIOESGN.js.map → matrix.layout-5J2YENK3.js.map} +0 -0
  866. /package/dist/{matrix.legend-Q5HHWP5Q.js.map → matrix.legend-U36VCS46.js.map} +0 -0
  867. /package/dist/{matrix.renderers-GLXZARIP.js.map → matrix.renderers-4KFE7ZVR.js.map} +0 -0
  868. /package/dist/{matrix.serieses-LDQEPXPD.js.map → matrix.serieses-AW7XBXLJ.js.map} +0 -0
  869. /package/dist/{matrix.sort-44TQNRIX.js.map → matrix.sort-7PMECLOE.js.map} +0 -0
  870. /package/dist/{matrix.sort.unit.spec-T3BDWJ3Z.js.map → matrix.sort.unit.spec-GIA2YOTQ.js.map} +0 -0
  871. /package/dist/{matrix.sorterUi-6Y4YBQYL.js.map → matrix.sorterUi-J6PRUT6J.js.map} +0 -0
  872. /package/dist/{matrix.sorterUi.unit.spec-NHUYNMNU.js.map → matrix.sorterUi.unit.spec-OPGKZZL6.js.map} +0 -0
  873. /package/dist/{matrix.unit.spec-C7IRIBN6.js.map → matrix.unit.spec-7UIVVR4T.js.map} +0 -0
  874. /package/dist/{mavb-E37LI73X.js.map → mavb-MSYUMT6W.js.map} +0 -0
  875. /package/dist/{mds.fimo-YTGX7VEN.js.map → mds.fimo-OYEAQP37.js.map} +0 -0
  876. /package/dist/{mds.samplescatterplot-FFGGJSI3.js.map → mds.samplescatterplot-EXISSRQQ.js.map} +0 -0
  877. /package/dist/{mds.survivalplot-NCWRXXV4.js.map → mds.survivalplot-SZST6BLN.js.map} +0 -0
  878. /package/dist/{multivalue-N7A2PU5K.js.map → multivalue-YDE7L75Y.js.map} +0 -0
  879. /package/dist/{numericDictTermCluster-AKQKRBQH.js.map → numericDictTermCluster-5AKP6ICC.js.map} +0 -0
  880. /package/dist/{oncomatrix-QPVGACMF.js.map → oncomatrix-2OEIYWR6.js.map} +0 -0
  881. /package/dist/{oncomatrix.spec-6L2NDN2G.js.map → oncomatrix.spec-CXQW4JWU.js.map} +0 -0
  882. /package/dist/{plot.2dvaf-6TLON77B.js.map → plot.2dvaf-LN7A3NNC.js.map} +0 -0
  883. /package/dist/{plot.app-VM273TXU.js.map → plot.app-YIQOY2Z7.js.map} +0 -0
  884. /package/dist/{plot.barplot-IQTZURHK.js.map → plot.barplot-HF2J25XP.js.map} +0 -0
  885. /package/dist/{plot.boxplot-WEXB6HII.js.map → plot.boxplot-YJH4L27U.js.map} +0 -0
  886. /package/dist/{plot.brainImaging-REGSSBHV.js.map → plot.brainImaging-PS4TRSPI.js.map} +0 -0
  887. /package/dist/{plot.disco-F25Z3FQL.js.map → plot.disco-BN5RNZ6Q.js.map} +0 -0
  888. /package/dist/{plot.ssgq-CRRK26RS.js.map → plot.ssgq-N2HTOIY3.js.map} +0 -0
  889. /package/dist/{plot.vaf2cov-WCNPZKXK.js.map → plot.vaf2cov-6AOHRUQ2.js.map} +0 -0
  890. /package/dist/{polar2-MH5GPXHJ.js.map → polar2-TC5OEJRE.js.map} +0 -0
  891. /package/dist/{profileForms-2YX2OYDI.js.map → profileForms-5WV2TSBB.js.map} +0 -0
  892. /package/dist/{profilePlot-FUTMZ2PP.js.map → profilePlot-OJLLW44P.js.map} +0 -0
  893. /package/dist/{pseudbulk.unit.spec-S7FDL3IX.js.map → pseudbulk.unit.spec-RAYRGN6C.js.map} +0 -0
  894. /package/dist/{pseudobulk-A3LB23N2.js.map → pseudobulk-ADHAYVSQ.js.map} +0 -0
  895. /package/dist/{qualitative-5VJRMF4S.js.map → qualitative-JXEI3IYC.js.map} +0 -0
  896. /package/dist/{radar2-2SJX4ZXN.js.map → radar2-BWTKSTT3.js.map} +0 -0
  897. /package/dist/{radarFacility2-7FPO34JS.js.map → radarFacility2-WIRSKTDG.js.map} +0 -0
  898. /package/dist/{rememberedGvQ.unit.spec-WOQVPQ75.js.map → rememberedGvQ.unit.spec-N43O4YTF.js.map} +0 -0
  899. /package/dist/{render-ZLA2RRBP.js.map → render-J7WOYBOL.js.map} +0 -0
  900. /package/dist/{report-VCE6RILD.js.map → report-DRPCXX2B.js.map} +0 -0
  901. /package/dist/{sampleView-QYTX4OLI.js.map → sampleView-BV6BQGGQ.js.map} +0 -0
  902. /package/dist/{samplelst-7NGH3SUM.js.map → samplelst-ZD63EYO7.js.map} +0 -0
  903. /package/dist/{samplematrix-SNAR6IBB.js.map → samplematrix-ZZ3DVELU.js.map} +0 -0
  904. /package/dist/{sc-2JETYAI4.js.map → sc-MUI43YTB.js.map} +0 -0
  905. /package/dist/{scatter-GHBQM2RR.js.map → scatter-7B44HTKN.js.map} +0 -0
  906. /package/dist/{scatter-D7VZOBEE.js.map → scatter-UEDVIE4Y.js.map} +0 -0
  907. /package/dist/{selectGenomeWithTklst-BD4GMGX3.js.map → selectGenomeWithTklst-WGOKGVZ5.js.map} +0 -0
  908. /package/dist/{singleCellCellType-XHLOJVVC.js.map → singleCellCellType-Z7OXK7PI.js.map} +0 -0
  909. /package/dist/{singleCellCellType.unit.spec-LCLR3IOD.js.map → singleCellCellType.unit.spec-IIOVCCJQ.js.map} +0 -0
  910. /package/dist/{singleCellGeneExpression-JRBONI5C.js.map → singleCellGeneExpression-LYZAIJ2Z.js.map} +0 -0
  911. /package/dist/{singleCellGeneExpression.unit.spec-Z2KSVCIG.js.map → singleCellGeneExpression.unit.spec-67AAWZTG.js.map} +0 -0
  912. /package/dist/{singleCellPlot-4462CQHF.js.map → singleCellPlot-TXPYQLSH.js.map} +0 -0
  913. /package/dist/{singlecell-SO3B5KJ7.js.map → singlecell-22OG6HNI.js.map} +0 -0
  914. /package/dist/{singlecell-CDUQ6MTO.js.map → singlecell-7TBALI2S.js.map} +0 -0
  915. /package/dist/{snp-YE2MXKJO.js.map → snp-3U2G3Z57.js.map} +0 -0
  916. /package/dist/{snp.unit.spec-MT57TGGQ.js.map → snp.unit.spec-BMBBUBYD.js.map} +0 -0
  917. /package/dist/{snplocus-RSNKWY63.js.map → snplocus-SSVZDIQV.js.map} +0 -0
  918. /package/dist/{spliceevent.a53ss.diagram-6N6YGYV7.js.map → spliceevent.a53ss.diagram-FK7CN4AU.js.map} +0 -0
  919. /package/dist/{spliceevent.exonskip.diagram-LMNUS4XV.js.map → spliceevent.exonskip.diagram-EFLGV3O4.js.map} +0 -0
  920. /package/dist/{spliceevent.noeventdiagram-LTBH4YD5.js.map → spliceevent.noeventdiagram-2DYO7CCZ.js.map} +0 -0
  921. /package/dist/{ssGSEA-DPK4PDM2.js.map → ssGSEA-52LWBQJP.js.map} +0 -0
  922. /package/dist/{ssGSEA.unit.spec-K2SA7ME7.js.map → ssGSEA.unit.spec-3JV6WHUQ.js.map} +0 -0
  923. /package/dist/{stattable-PR47XT4F.js.map → stattable-RLMYQ4G6.js.map} +0 -0
  924. /package/dist/{summarizeCnvGeneexp-YZEMDLES.js.map → summarizeCnvGeneexp-QPRYAKC2.js.map} +0 -0
  925. /package/dist/{summarizeGeneexpSurvival-3TXV6ZNI.js.map → summarizeGeneexpSurvival-RWVQXEKB.js.map} +0 -0
  926. /package/dist/{summarizeMutationCnv-EBWSEHWJ.js.map → summarizeMutationCnv-DW5F6NUJ.js.map} +0 -0
  927. /package/dist/{summarizeMutationDiagnosis-FXA25W3O.js.map → summarizeMutationDiagnosis-5FOQ7CHI.js.map} +0 -0
  928. /package/dist/{summarizeMutationSurvival-MR4AOMNS.js.map → summarizeMutationSurvival-4UKB4EVO.js.map} +0 -0
  929. /package/dist/{summary-4C6LGTMF.js.map → summary-TYC6QNT4.js.map} +0 -0
  930. /package/dist/{summary.integration.spec-Y6JLH7NH.js.map → summary.integration.spec-5GLJJZNM.js.map} +0 -0
  931. /package/dist/{summaryInput-NWT2DXWU.js.map → summaryInput-4IJGKW4P.js.map} +0 -0
  932. /package/dist/{sunburst-266MA7E2.js.map → sunburst-G7DGATWP.js.map} +0 -0
  933. /package/dist/{survival-CAZCIY2N.js.map → survival-MKNABJPU.js.map} +0 -0
  934. /package/dist/{svgraph-OFUESREM.js.map → svgraph-VB7JWWR5.js.map} +0 -0
  935. /package/dist/{svmr-PVH42MY4.js.map → svmr-VLQIO2U5.js.map} +0 -0
  936. /package/dist/{table-C2SICFZV.js.map → table-EAXMDWOY.js.map} +0 -0
  937. /package/dist/{termCollection-TGYDI7NP.js.map → termCollection-5LG7ICQY.js.map} +0 -0
  938. /package/dist/{termCollection-H4RL5WJG.js.map → termCollection-SB6MWLFK.js.map} +0 -0
  939. /package/dist/{termCollection.unit.spec-JSALS7GL.js.map → termCollection.unit.spec-H5ITGTR3.js.map} +0 -0
  940. /package/dist/{termCollectionFractionSelection-YJVDNV4I.js.map → termCollectionFractionSelection-2XZSTDCQ.js.map} +0 -0
  941. /package/dist/{termCollectionFractionSelection.unit.spec-4GM7P4ZW.js.map → termCollectionFractionSelection.unit.spec-BIO7V6KA.js.map} +0 -0
  942. /package/dist/{tk-RZCPSHJG.js.map → tk-TRWYZLQ2.js.map} +0 -0
  943. /package/dist/{tk-SNTRA5CC.js.map → tk-VZI5HNSX.js.map} +0 -0
  944. /package/dist/{tp.ui-2W4K3XH6.js.map → tp.ui-J5SNNAT3.js.map} +0 -0
  945. /package/dist/{tvs.dt-GIPVC3R6.js.map → tvs.dt-6YHFJPER.js.map} +0 -0
  946. /package/dist/{tvs.dtcnv.categorical-TEYAS4OU.js.map → tvs.dtcnv.categorical-WTIE63GM.js.map} +0 -0
  947. /package/dist/{tvs.dtcnv.continuous-VQRATYPZ.js.map → tvs.dtcnv.continuous-OCMKGTF5.js.map} +0 -0
  948. /package/dist/{tvs.dtfusion-P2KF5Z4H.js.map → tvs.dtfusion-CA23UNM3.js.map} +0 -0
  949. /package/dist/{tvs.dtitd-TM6UROSH.js.map → tvs.dtitd-VSYMR3OD.js.map} +0 -0
  950. /package/dist/{tvs.dtsnvindel-FZXC23NF.js.map → tvs.dtsnvindel-YBNO3CYF.js.map} +0 -0
  951. /package/dist/{tvs.dtsv-Y5QEJPYG.js.map → tvs.dtsv-S743GBB5.js.map} +0 -0
  952. /package/dist/{tvs.numeric-3UXW4JHJ.js.map → tvs.numeric-22AHXO5K.js.map} +0 -0
  953. /package/dist/{tvs.samplelst-MLAFPFER.js.map → tvs.samplelst-XAJO4EM6.js.map} +0 -0
  954. /package/dist/{tvs.termCollection-ZQQDKESH.js.map → tvs.termCollection-QOVJGAUC.js.map} +0 -0
  955. /package/dist/{vocabulary-JRUZPHMG.js.map → vocabulary-6EADTHP3.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
- }