@sjcrh/proteinpaint-client 2.216.0 → 2.217.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 (956) hide show
  1. package/dist/2dmaf-RRHATFHO.js +1362 -0
  2. package/dist/AggMatrixInput-4UHBCXYH.js +402 -0
  3. package/dist/AggregateMatrix-IJE5CM5Y.js +37 -0
  4. package/dist/AppHeader-UXGLRW6C.js +826 -0
  5. package/dist/BoxPlot-GQYC22KY.js +1233 -0
  6. package/dist/CorrelationVolcano-5CWRWZTI.js +613 -0
  7. package/dist/Cuminc-TYHKAPRK.js +1217 -0
  8. package/dist/DE-UUFQGSOI.js +85 -0
  9. package/dist/DEinput-DU7MF4YY.js +497 -0
  10. package/dist/DM-SSI5KUBC.js +86 -0
  11. package/dist/DifferentialAnalysis-G6FE2MXY.js +235 -0
  12. package/dist/Disco-B3KGNEAW.js +3384 -0
  13. package/dist/Disco.UI-UNPUBQCN.js +239 -0
  14. package/dist/DmrPlot-27NGDMT4.js +358 -0
  15. package/dist/GB-SXACUA4V.js +1388 -0
  16. package/dist/GSEA-EHMBA3TF.js +870 -0
  17. package/dist/GeneExpInput-NDXISF2U.js +38 -0
  18. package/dist/Geomap-3CNT227W.js +80 -0
  19. package/dist/HicApp-VQBUB6EZ.js +2240 -0
  20. package/dist/IDCViewer-DTOE7KDX.js +10808 -0
  21. package/dist/NumBinaryEditor-IVZ4MMQT.js +274 -0
  22. package/dist/NumBinaryEditor.unit.spec-3BSQ6FM4.js +308 -0
  23. package/dist/NumContEditor-CUZHU3IO.js +100 -0
  24. package/dist/NumContEditor.unit.spec-SCQFD2Y7.js +160 -0
  25. package/dist/NumCustomBinEditor-UEEYZ4ZO.js +29 -0
  26. package/dist/NumCustomBinEditor.unit.spec-GYS35OQV.js +393 -0
  27. package/dist/NumDiscreteEditor-IT7NIXTV.js +165 -0
  28. package/dist/NumDiscreteEditor.unit.spec-LB6VLAWO.js +229 -0
  29. package/dist/NumRegularBinEditor-FF6UXZWN.js +29 -0
  30. package/dist/NumRegularBinEditor.unit.spec-Z4S5LH2C.js +274 -0
  31. package/dist/NumSplineEditor-IW5WEN3P.js +205 -0
  32. package/dist/NumSplineEditor.unit.spec-PAEN3SAD.js +220 -0
  33. package/dist/NumericDensity-CPJIQLYT.js +29 -0
  34. package/dist/NumericDensity.unit.spec-4KHECHVU.js +414 -0
  35. package/dist/NumericHandler-SEFTQJDM.js +30 -0
  36. package/dist/NumericHandler.unit.spec-UGDR3476.js +210 -0
  37. package/dist/ProteomeInput-NYPUYVN5.js +610 -0
  38. package/dist/ProteomeInput-NYPUYVN5.js.map +7 -0
  39. package/dist/Regression-WDSISHYL.js +1412 -0
  40. package/dist/RunChart2-2NPADXUR.js +744 -0
  41. package/dist/SC-EWDBPHEL.js +1344 -0
  42. package/dist/Violin-POGGPCZY.js +1095 -0
  43. package/dist/Volcano-U2B4KEUL.js +2452 -0
  44. package/dist/Wsi-G7OCAJ3R.js +625 -0
  45. package/dist/adSandbox-SUCX6DAQ.js +29 -0
  46. package/dist/animatedBubbleChart-SDBWJELZ.js +542 -0
  47. package/dist/app-ATQM5PKI.js +28 -0
  48. package/dist/app-BCKEWJCY.js +38 -0
  49. package/dist/app.js +14 -14
  50. package/dist/bam-QK2ZLZDI.js +872 -0
  51. package/dist/barchart-RHDKI3NZ.js +38 -0
  52. package/dist/barchart2-CS3E6FOY.js +305 -0
  53. package/dist/block-RQ3HTJVP.js +6232 -0
  54. package/dist/block.init-T33F47DO.js +29 -0
  55. package/dist/block.mds.expressionrank-LQD6MN6Z.js +350 -0
  56. package/dist/block.mds.geneboxplot-N5XHHVR7.js +819 -0
  57. package/dist/block.mds.junction-JD4WQUSH.js +1534 -0
  58. package/dist/block.mds.svcnv-LCTYWXL2.js +6408 -0
  59. package/dist/block.svg-2F3RGTI3.js +155 -0
  60. package/dist/block.tk.aicheck-BOF6WZ5E.js +274 -0
  61. package/dist/block.tk.bam-5GBYEQBM.js +1897 -0
  62. package/dist/block.tk.bedgraphdot-LVQEP4RS.js +375 -0
  63. package/dist/block.tk.bigwig.ui-HHBO4JAC.js +202 -0
  64. package/dist/block.tk.hicstraw-JBO4UEOA.js +814 -0
  65. package/dist/block.tk.junction-S5S2N7FK.js +2353 -0
  66. package/dist/block.tk.junction.textmatrixui-DNQL7WB5.js +190 -0
  67. package/dist/block.tk.ld-JHQNR67E.js +90 -0
  68. package/dist/block.tk.menu-7JBJOY2O.js +1050 -0
  69. package/dist/block.tk.pgv-FQPREV6P.js +934 -0
  70. package/dist/brainImaging-HEWGZZNY.js +550 -0
  71. package/dist/brainRegions-QUGB7YUW.js +213 -0
  72. package/dist/bubbleHeatmap-OZRONGAX.js +374 -0
  73. package/dist/cellTypeBubbleHeatmap-N7NDE325.js +274 -0
  74. package/dist/chunk-2FWSNJEN.js +54 -0
  75. package/dist/chunk-2JIKMCJR.js +34 -0
  76. package/dist/chunk-3SPEW6R6.js +102 -0
  77. package/dist/chunk-5G6O5RYM.js +123 -0
  78. package/dist/chunk-65DO5IKM.js +299 -0
  79. package/dist/chunk-6D4HOTG7.js +1844 -0
  80. package/dist/chunk-6D4HOTG7.js.map +7 -0
  81. package/dist/chunk-6Q5SOSSU.js +2685 -0
  82. package/dist/chunk-7JHIUS54.js +626 -0
  83. package/dist/chunk-7X347XMF.js +397 -0
  84. package/dist/chunk-ABLG7GUS.js +55 -0
  85. package/dist/chunk-AFEFZ74T.js +276 -0
  86. package/dist/chunk-AIC43DTG.js +243 -0
  87. package/dist/chunk-AJXP4AV7.js +182 -0
  88. package/dist/chunk-AMW5LCUB.js +424 -0
  89. package/dist/chunk-AV2IH5K2.js +156 -0
  90. package/dist/chunk-B3WLXXGY.js +263 -0
  91. package/dist/chunk-BG6GAROI.js +302 -0
  92. package/dist/chunk-BIJOXCLN.js +2277 -0
  93. package/dist/chunk-BIJOXCLN.js.map +7 -0
  94. package/dist/chunk-BU6PAOGA.js +103 -0
  95. package/dist/chunk-C2TII2FF.js +96 -0
  96. package/dist/chunk-CTFHEDG2.js +550 -0
  97. package/dist/chunk-CXEECHP5.js +37 -0
  98. package/dist/chunk-CZK4EV3Y.js +1339 -0
  99. package/dist/chunk-D35GNF3Y.js +2325 -0
  100. package/dist/chunk-DFZWE3TR.js +170 -0
  101. package/dist/chunk-DX23HAW7.js +1219 -0
  102. package/dist/chunk-DX23HAW7.js.map +7 -0
  103. package/dist/chunk-E7XHA4YL.js +1988 -0
  104. package/dist/chunk-EDFBRXX2.js +54 -0
  105. package/dist/chunk-F23EQSGU.js +26 -0
  106. package/dist/chunk-F2EEQ7KG.js +379 -0
  107. package/dist/chunk-F5FFI7Z7.js +468 -0
  108. package/dist/chunk-FK5NL2DF.js +141 -0
  109. package/dist/chunk-FVZTRWAO.js +692 -0
  110. package/dist/chunk-GDHQVEIO.js +217 -0
  111. package/dist/chunk-GSVB4XNS.js +2799 -0
  112. package/dist/chunk-GVAV4VRI.js +418 -0
  113. package/dist/chunk-H2FELGYK.js +140 -0
  114. package/dist/chunk-HFKZGMVV.js +839 -0
  115. package/dist/chunk-HFKZGMVV.js.map +7 -0
  116. package/dist/chunk-HJARHSDC.js +274 -0
  117. package/dist/chunk-HWNQOADC.js +182 -0
  118. package/dist/chunk-HWNQOADC.js.map +7 -0
  119. package/dist/chunk-HXRG7XYB.js +54 -0
  120. package/dist/chunk-J5KCTRJC.js +80 -0
  121. package/dist/chunk-JMFVXWDX.js +59 -0
  122. package/dist/chunk-KGX2OIR4.js +203 -0
  123. package/dist/chunk-L2NPLA43.js +257 -0
  124. package/dist/chunk-L2WOLNZK.js +339 -0
  125. package/dist/chunk-LQKMDIRB.js +466 -0
  126. package/dist/chunk-LSQ5AQ6Q.js +562 -0
  127. package/dist/chunk-MBQIHLGI.js +1269 -0
  128. package/dist/chunk-MFR4WWDM.js +14 -0
  129. package/dist/chunk-MU4Z2MX2.js +340 -0
  130. package/dist/chunk-MU4Z2MX2.js.map +7 -0
  131. package/dist/chunk-NHMIMTJA.js +281 -0
  132. package/dist/chunk-NNDKYTUV.js +25353 -0
  133. package/dist/chunk-NNDKYTUV.js.map +7 -0
  134. package/dist/chunk-NPBN3PPZ.js +6358 -0
  135. package/dist/chunk-NULQJF73.js +56 -0
  136. package/dist/chunk-NYO7YANQ.js +294 -0
  137. package/dist/chunk-OBNHXAYG.js +194 -0
  138. package/dist/chunk-PETYR7LC.js +134 -0
  139. package/dist/chunk-PLFPXOGX.js +119 -0
  140. package/dist/chunk-PQVHRM4L.js +5213 -0
  141. package/dist/chunk-QLUTQPZE.js +240 -0
  142. package/dist/chunk-QNQ2ZYT7.js +38 -0
  143. package/dist/chunk-QYCPIVCX.js +255 -0
  144. package/dist/chunk-RZ2THVK4.js +516 -0
  145. package/dist/chunk-S4IZ4VM7.js +31 -0
  146. package/dist/chunk-SFUDTUXF.js +382 -0
  147. package/dist/chunk-SUT75MRI.js +102 -0
  148. package/dist/chunk-SYLYLOHK.js +56 -0
  149. package/dist/chunk-TEFWF3SK.js +176 -0
  150. package/dist/chunk-TPSVPMAN.js +70 -0
  151. package/dist/chunk-V4ZKHM6D.js +2960 -0
  152. package/dist/chunk-V7DNHPZD.js +4373 -0
  153. package/dist/chunk-VPMQDTYR.js +194 -0
  154. package/dist/chunk-VV6JIG4D.js +444 -0
  155. package/dist/chunk-WU3YXPRE.js +217 -0
  156. package/dist/chunk-X2HWRISK.js +480 -0
  157. package/dist/chunk-X77QVINS.js +49 -0
  158. package/dist/chunk-XXFLJWTQ.js +237 -0
  159. package/dist/chunk-ZPWBYHNE.js +5799 -0
  160. package/dist/chunk-ZPWBYHNE.js.map +7 -0
  161. package/dist/chunk-ZX75ZAUG.js +45 -0
  162. package/dist/chunk-ZX75ZAUG.js.map +7 -0
  163. package/dist/cohort-ATIZW34H.js +66 -0
  164. package/dist/cohortSunburst-WQK2UV25.js +686 -0
  165. package/dist/cohortSunburst-WQK2UV25.js.map +7 -0
  166. package/dist/condition-SGJIDZNB.js +323 -0
  167. package/dist/controls-JQCMGPXP.js +30 -0
  168. package/dist/controls.config-WQHVQAIJ.js +30 -0
  169. package/dist/correlation-S3MN3L5Q.js +91 -0
  170. package/dist/customdata.inputui-LGTGMJBZ.js +280 -0
  171. package/dist/dataDownload-FAWN2WKE.js +325 -0
  172. package/dist/databrowser.ui-KF3LWQXG.js +421 -0
  173. package/dist/dictionary-EVLEOT72.js +109 -0
  174. package/dist/dnaMethylation-J3SPEM4S.js +29 -0
  175. package/dist/dnaMethylation.integration.spec-CTA53YCT.js +194 -0
  176. package/dist/dofetch-3C3MI5NR.js +47 -0
  177. package/dist/e2pca-PTWPY5WP.js +340 -0
  178. package/dist/ep-MS4LQQDR.js +1245 -0
  179. package/dist/expclust.gdc.spec-S5FE4MMD.js +298 -0
  180. package/dist/facet-FSOIZJCA.js +515 -0
  181. package/dist/gb-YDEOK7NW.js +77 -0
  182. package/dist/geneExpClustering-37JKKFW3.js +240 -0
  183. package/dist/geneExpression-G6ODP3VY.js +29 -0
  184. package/dist/geneExpression-VQPRFNKE.js +309 -0
  185. package/dist/geneExpression.unit.spec-ZHXCUG6Q.js +124 -0
  186. package/dist/geneORA-E3PSS3CI.js +269 -0
  187. package/dist/geneRanking-MK3YYINC.js +544 -0
  188. package/dist/geneVariant-LEMAVFOY.js +32 -0
  189. package/dist/geneVariant-NNSB7JLS.js +285 -0
  190. package/dist/geneVariant.integration.spec-6CC5UAOP.js +499 -0
  191. package/dist/genefusion.ui-5NCQIQPN.js +299 -0
  192. package/dist/geneset-ZX4V3CFB.js +199 -0
  193. package/dist/genomeBrowser.spec-J7ISXY6H.js +272 -0
  194. package/dist/grin2-GN3DQNON.js +945 -0
  195. package/dist/grin2-LBGBBB4L.js +66 -0
  196. package/dist/hierCluster-5JURTKAZ.js +55 -0
  197. package/dist/hierCluster-BJ5VBPXR.js +51 -0
  198. package/dist/hierCluster.config-4EERP4KK.js +32 -0
  199. package/dist/hierCluster.integration.spec-VR4GULRV.js +479 -0
  200. package/dist/hierCluster.interactivity-SMTQOKUY.js +45 -0
  201. package/dist/hierCluster.renderers-PAME7BWU.js +18 -0
  202. package/dist/imagePlot-4LMIKBVE.js +152 -0
  203. package/dist/importPlot-3CG6ASNH.js +8 -0
  204. package/dist/isoformExpression-VCDNKTZ6.js +31 -0
  205. package/dist/isoformExpression.unit.spec-ZXYY37TA.js +233 -0
  206. package/dist/junction-5DXJO4PS.js +32 -0
  207. package/dist/junction.customTerm-UOPUSEOE.js +15 -0
  208. package/dist/junction.unit.spec-F35E3GJW.js +178 -0
  209. package/dist/launch.adhoc-V2HTCQGD.js +33 -0
  210. package/dist/leftlabel.sample-V7O2EC36.js +253 -0
  211. package/dist/lollipop-RNRZLG64.js +162 -0
  212. package/dist/maf-W6SF6BJS.js +451 -0
  213. package/dist/maftimeline-NABCAMHG.js +583 -0
  214. package/dist/matrix-JC6AJT2N.js +55 -0
  215. package/dist/matrix-UCHESWVK.js +50 -0
  216. package/dist/matrix.cells-B4L42TBM.js +25 -0
  217. package/dist/matrix.config-6US3AAH7.js +33 -0
  218. package/dist/matrix.data-FYFXYDA3.js +22 -0
  219. package/dist/matrix.groups-Y7DEG3GS.js +25 -0
  220. package/dist/matrix.integration.spec-KXX7SFX5.js +3156 -0
  221. package/dist/matrix.interactivity-NHWG4WCC.js +33 -0
  222. package/dist/matrix.layout-5DQNT7DD.js +35 -0
  223. package/dist/matrix.legend-OY7IF6AS.js +19 -0
  224. package/dist/matrix.renderers-GYOXGHPU.js +30 -0
  225. package/dist/matrix.serieses-657TLDAV.js +18 -0
  226. package/dist/matrix.sort-IMA2ES3T.js +25 -0
  227. package/dist/matrix.sort.unit.spec-S6BAFYPR.js +464 -0
  228. package/dist/matrix.sorterUi-77F36Q5H.js +15 -0
  229. package/dist/matrix.sorterUi.unit.spec-V5NVQGD5.js +334 -0
  230. package/dist/matrix.unit.spec-R4NMTZYQ.js +146 -0
  231. package/dist/mavb-MRCVMBPD.js +723 -0
  232. package/dist/mds.fimo-5DCH5BEM.js +509 -0
  233. package/dist/mds.samplescatterplot-VIBCS5M6.js +1545 -0
  234. package/dist/mds.survivalplot-AZ7LJDZZ.js +472 -0
  235. package/dist/multivalue-4QKGYYW2.js +79 -0
  236. package/dist/numericDictTermCluster-GLLG6IK2.js +62 -0
  237. package/dist/oncomatrix-R32ZPMX7.js +286 -0
  238. package/dist/oncomatrix.spec-BMK6LMBS.js +439 -0
  239. package/dist/plot.2dvaf-46FT53MF.js +368 -0
  240. package/dist/plot.app-7EE4YCV4.js +32 -0
  241. package/dist/plot.barplot-FK4J2G7K.js +93 -0
  242. package/dist/plot.boxplot-ATY4LK3X.js +142 -0
  243. package/dist/plot.brainImaging-S7B547V4.js +51 -0
  244. package/dist/plot.disco-K5MMC2GD.js +98 -0
  245. package/dist/plot.ssgq-B3OVMZFD.js +130 -0
  246. package/dist/plot.vaf2cov-RBHDQULW.js +249 -0
  247. package/dist/polar2-GECELCTG.js +228 -0
  248. package/dist/profileForms-2USYOA34.js +937 -0
  249. package/dist/profilePlot-YGD2CF6P.js +45 -0
  250. package/dist/proteinView-FCPWJLGU.js +1346 -0
  251. package/dist/proteinView-FCPWJLGU.js.map +7 -0
  252. package/dist/proteomeCohortCompare-TYYUF5A5.js +866 -0
  253. package/dist/proteomeCohortCompare-TYYUF5A5.js.map +7 -0
  254. package/dist/pseudbulk.unit.spec-UVVRP6NR.js +82 -0
  255. package/dist/pseudobulk-ZIN5VJGB.js +31 -0
  256. package/dist/qualitative-27BZGASV.js +34 -0
  257. package/dist/qualitative-N4F6NITI.js +241 -0
  258. package/dist/radar2-X465RPJX.js +323 -0
  259. package/dist/radarFacility2-AE7BA62N.js +331 -0
  260. package/dist/rememberedGvQ.unit.spec-4PDIU5RY.js +210 -0
  261. package/dist/render-TD2QWOHT.js +29 -0
  262. package/dist/report-3Y2OWDF7.js +213 -0
  263. package/dist/sampleView-BUMMYRHJ.js +39 -0
  264. package/dist/samplelst-BWK53BLI.js +102 -0
  265. package/dist/samplematrix-RQU43UYR.js +2188 -0
  266. package/dist/sc-LCBFWCZZ.js +77 -0
  267. package/dist/scatter-6S5I7OW3.js +921 -0
  268. package/dist/scatter-MJELX75N.js +84 -0
  269. package/dist/selectGenomeWithTklst-WAVXHXR5.js +125 -0
  270. package/dist/singleCellCellType-WMCAJ7JF.js +29 -0
  271. package/dist/singleCellCellType.unit.spec-4Z46ZT5Q.js +150 -0
  272. package/dist/singleCellGeneExpression-7Q5ZJT4R.js +29 -0
  273. package/dist/singleCellGeneExpression.unit.spec-6C7PDGRH.js +144 -0
  274. package/dist/singleCellNumericValue-QGYITZRC.js +29 -0
  275. package/dist/singleCellNumericValue.unit.spec-MQUKPEZJ.js +412 -0
  276. package/dist/singleCellPlot-JJMFJ2KQ.js +44 -0
  277. package/dist/singlecell-J23S3JR2.js +1562 -0
  278. package/dist/singlecell-Y4OGUWEC.js +77 -0
  279. package/dist/snp-IO6TKWGD.js +29 -0
  280. package/dist/snp.unit.spec-X7ILEEPO.js +167 -0
  281. package/dist/snplocus-Z2NGIKMO.js +200 -0
  282. package/dist/snplst-XCS2FCQV.js +36 -0
  283. package/dist/spliceevent.a53ss.diagram-F3S4BRVG.js +142 -0
  284. package/dist/spliceevent.exonskip.diagram-AXCDJKH4.js +274 -0
  285. package/dist/spliceevent.noeventdiagram-UK3X667E.js +451 -0
  286. package/dist/ssGSEA-ZRPNQKJ5.js +29 -0
  287. package/dist/ssGSEA.unit.spec-DG5ZHLC7.js +79 -0
  288. package/dist/stattable-XYSC3CYU.js +112 -0
  289. package/dist/studyCatalog-Y75LMI62.js +457 -0
  290. package/dist/studyCatalog-Y75LMI62.js.map +7 -0
  291. package/dist/summarizeCnvGeneexp-H2NP7VLU.js +154 -0
  292. package/dist/summarizeGeneexpSurvival-HTCD3VQQ.js +101 -0
  293. package/dist/summarizeMutationCnv-UEGXWK2P.js +155 -0
  294. package/dist/summarizeMutationDiagnosis-MJGWP7IT.js +31 -0
  295. package/dist/summarizeMutationSurvival-55JW5LA6.js +95 -0
  296. package/dist/summary-HJO23RGB.js +40 -0
  297. package/dist/summary.integration.spec-OWI2C2N5.js +405 -0
  298. package/dist/summaryInput-RL2JXRDE.js +238 -0
  299. package/dist/sunburst-JFY6V5E2.js +274 -0
  300. package/dist/survival-6FLR4YCJ.js +1246 -0
  301. package/dist/survival-PBBU6PA5.js +49 -0
  302. package/dist/survival.integration.spec-WAKTGYGP.js +609 -0
  303. package/dist/svgraph-WD3DUZV7.js +1377 -0
  304. package/dist/svmr-AP6ZFO7S.js +3832 -0
  305. package/dist/swimmer-VPKSBV6V.js +741 -0
  306. package/dist/swimmer-VPKSBV6V.js.map +7 -0
  307. package/dist/table-GX3VJLPZ.js +192 -0
  308. package/dist/termCollection-QE7U5QBD.js +29 -0
  309. package/dist/termCollection-YQ332WKB.js +247 -0
  310. package/dist/termCollection.unit.spec-ELLN7VRA.js +295 -0
  311. package/dist/termCollectionFractionSelection-V3RP5KAT.js +38 -0
  312. package/dist/termCollectionFractionSelection.unit.spec-JR7Q7TJI.js +184 -0
  313. package/dist/tk-GD2KJM5W.js +1116 -0
  314. package/dist/tk-J5VPFEX6.js +37 -0
  315. package/dist/tp.ui-5K3AAXDW.js +1449 -0
  316. package/dist/tvs.categorical-RPACB4VU.js +28 -0
  317. package/dist/tvs.condition-O6JBUM6D.js +160 -0
  318. package/dist/tvs.dt-5EVBSRX3.js +30 -0
  319. package/dist/tvs.dtcnv.categorical-Y5YHBZNC.js +31 -0
  320. package/dist/tvs.dtcnv.continuous-WP322QUP.js +63 -0
  321. package/dist/tvs.dtfusion-CCMUFDMQ.js +31 -0
  322. package/dist/tvs.dtitd-P3ED3MWA.js +31 -0
  323. package/dist/tvs.dtsnvindel-X2MXPLC6.js +31 -0
  324. package/dist/tvs.dtsv-4FOWFNVV.js +31 -0
  325. package/dist/tvs.multivalue-IRF467ZK.js +84 -0
  326. package/dist/tvs.numeric-C7FDCGCS.js +32 -0
  327. package/dist/tvs.samplelst-CBU6ATI5.js +95 -0
  328. package/dist/tvs.survival-3K5ASAXV.js +110 -0
  329. package/dist/tvs.termCollection-MXEWO6KJ.js +118 -0
  330. package/dist/vocabulary-GQBHDP3K.js +32 -0
  331. package/dist/wsi.direct-25JUHWEF.js +8339 -0
  332. package/package.json +3 -3
  333. package/dist/2dmaf-Y4CPQCKD.js +0 -1362
  334. package/dist/AggMatrixInput-XSZSKYJM.js +0 -402
  335. package/dist/AggregateMatrix-BETOEO7U.js +0 -37
  336. package/dist/AppHeader-6X6SNEBI.js +0 -826
  337. package/dist/BoxPlot-J6JKDOH6.js +0 -1233
  338. package/dist/CorrelationVolcano-DMDE4LAP.js +0 -613
  339. package/dist/Cuminc-6WHLJVOC.js +0 -1217
  340. package/dist/DE-EJM6W4Q4.js +0 -85
  341. package/dist/DEinput-AU3E7JM2.js +0 -497
  342. package/dist/DM-FN4WJNDX.js +0 -86
  343. package/dist/DifferentialAnalysis-FD57SA7H.js +0 -235
  344. package/dist/Disco-BMNSQ6YL.js +0 -3384
  345. package/dist/Disco.UI-4VXFHJQV.js +0 -239
  346. package/dist/DmrPlot-P5WKLC5J.js +0 -358
  347. package/dist/GB-BO75K7TF.js +0 -1388
  348. package/dist/GSEA-OEFXDJ23.js +0 -870
  349. package/dist/GeneExpInput-FP7RBRXH.js +0 -38
  350. package/dist/Geomap-ELX6O3IS.js +0 -80
  351. package/dist/HicApp-3JVEBSWO.js +0 -2240
  352. package/dist/IDCViewer-76N6I34Q.js +0 -10808
  353. package/dist/NumBinaryEditor-XLACD6VG.js +0 -274
  354. package/dist/NumBinaryEditor.unit.spec-3Z62H2JG.js +0 -308
  355. package/dist/NumContEditor-Z5ONNXFC.js +0 -100
  356. package/dist/NumContEditor.unit.spec-EJ3L7WH6.js +0 -160
  357. package/dist/NumCustomBinEditor-WKXAK5ZW.js +0 -29
  358. package/dist/NumCustomBinEditor.unit.spec-WXCLBBWT.js +0 -393
  359. package/dist/NumDiscreteEditor-5UBFABFT.js +0 -165
  360. package/dist/NumDiscreteEditor.unit.spec-5EMKOQZU.js +0 -229
  361. package/dist/NumRegularBinEditor-DMOKU5UM.js +0 -29
  362. package/dist/NumRegularBinEditor.unit.spec-QT2WSGNL.js +0 -274
  363. package/dist/NumSplineEditor-G3T26V5H.js +0 -205
  364. package/dist/NumSplineEditor.unit.spec-P4WNWJKE.js +0 -220
  365. package/dist/NumericDensity-AWQK5BKC.js +0 -29
  366. package/dist/NumericDensity.unit.spec-TO5EUJF3.js +0 -414
  367. package/dist/NumericHandler-MZ4WZDMW.js +0 -30
  368. package/dist/NumericHandler.unit.spec-JFLQQ2RI.js +0 -210
  369. package/dist/ProteomeInput-2XRW7WFL.js +0 -384
  370. package/dist/ProteomeInput-2XRW7WFL.js.map +0 -7
  371. package/dist/Regression-QO5EKLTZ.js +0 -1412
  372. package/dist/RunChart2-JLN324L6.js +0 -744
  373. package/dist/SC-W3M6IEDU.js +0 -1344
  374. package/dist/Violin-BCHEWRDU.js +0 -1095
  375. package/dist/Volcano-2PP67BZI.js +0 -2452
  376. package/dist/Wsi-GNGKPGJF.js +0 -625
  377. package/dist/adSandbox-XRWLD73B.js +0 -29
  378. package/dist/animatedBubbleChart-23CVOAXV.js +0 -542
  379. package/dist/app-KRJBODQD.js +0 -28
  380. package/dist/app-YLGQTR3U.js +0 -38
  381. package/dist/bam-3VPOMNJU.js +0 -872
  382. package/dist/barchart-I4S7TYFY.js +0 -38
  383. package/dist/barchart2-VXUP2L4M.js +0 -305
  384. package/dist/block-NVXPY2IK.js +0 -6232
  385. package/dist/block.init-CQ76SLCN.js +0 -29
  386. package/dist/block.mds.expressionrank-CTMM4IFI.js +0 -350
  387. package/dist/block.mds.geneboxplot-XYUU3PUZ.js +0 -819
  388. package/dist/block.mds.junction-LX4ETPO6.js +0 -1534
  389. package/dist/block.mds.svcnv-ABWHJJOA.js +0 -6408
  390. package/dist/block.svg-NY7ZDCUD.js +0 -155
  391. package/dist/block.tk.aicheck-3C52WICS.js +0 -274
  392. package/dist/block.tk.bam-QQHY3KEB.js +0 -1897
  393. package/dist/block.tk.bedgraphdot-EWZAMZ6E.js +0 -375
  394. package/dist/block.tk.bigwig.ui-OW3Q6THD.js +0 -202
  395. package/dist/block.tk.hicstraw-T7GJ7ZV6.js +0 -814
  396. package/dist/block.tk.junction-WKD34BUV.js +0 -2353
  397. package/dist/block.tk.junction.textmatrixui-G6KNHIUC.js +0 -190
  398. package/dist/block.tk.ld-PXXGZMUF.js +0 -90
  399. package/dist/block.tk.menu-W3RFEKFJ.js +0 -1050
  400. package/dist/block.tk.pgv-QVRJDGGG.js +0 -934
  401. package/dist/brainImaging-D42IV6LT.js +0 -550
  402. package/dist/brainRegions-DLXBHC4Y.js +0 -213
  403. package/dist/bubbleHeatmap-LATPOGLF.js +0 -374
  404. package/dist/cellTypeBubbleHeatmap-H7VHFQFD.js +0 -274
  405. package/dist/chunk-2XH5T5HA.js +0 -176
  406. package/dist/chunk-3Z7FX6GQ.js +0 -102
  407. package/dist/chunk-42II4FNQ.js +0 -14
  408. package/dist/chunk-4BQ3HUD2.js +0 -1988
  409. package/dist/chunk-4IWOYJ4D.js +0 -56
  410. package/dist/chunk-5D5Y3XVS.js +0 -56
  411. package/dist/chunk-5KHI46ZP.js +0 -26
  412. package/dist/chunk-5KNC4AJ7.js +0 -103
  413. package/dist/chunk-5MHE7AIV.js +0 -2260
  414. package/dist/chunk-5MHE7AIV.js.map +0 -7
  415. package/dist/chunk-6WYKPBZI.js +0 -339
  416. package/dist/chunk-AIH5PKJN.js +0 -626
  417. package/dist/chunk-AWZOZLFI.js +0 -217
  418. package/dist/chunk-AYZ6BEK4.js +0 -5213
  419. package/dist/chunk-B4NTLUWL.js +0 -2685
  420. package/dist/chunk-BQXK7K5J.js +0 -134
  421. package/dist/chunk-C5YMSIGN.js +0 -6358
  422. package/dist/chunk-CBAU2QMR.js +0 -31
  423. package/dist/chunk-CFHGRMLN.js +0 -468
  424. package/dist/chunk-CNQJ4LOC.js +0 -102
  425. package/dist/chunk-CVT7JE5B.js +0 -123
  426. package/dist/chunk-D4UCM6R7.js +0 -562
  427. package/dist/chunk-DBOJ3TMI.js +0 -424
  428. package/dist/chunk-DDDL46RE.js +0 -550
  429. package/dist/chunk-DURCB2KS.js +0 -141
  430. package/dist/chunk-E64SCL4O.js +0 -418
  431. package/dist/chunk-EAVA7XQL.js +0 -240
  432. package/dist/chunk-EG7HOBJY.js +0 -54
  433. package/dist/chunk-EZFO5UYD.js +0 -5795
  434. package/dist/chunk-EZFO5UYD.js.map +0 -7
  435. package/dist/chunk-F22GGUNI.js +0 -243
  436. package/dist/chunk-F4TEXJ74.js +0 -49
  437. package/dist/chunk-F5ERVYFW.js +0 -783
  438. package/dist/chunk-F5ERVYFW.js.map +0 -7
  439. package/dist/chunk-FIFNXVTS.js +0 -25345
  440. package/dist/chunk-FIFNXVTS.js.map +0 -7
  441. package/dist/chunk-G7YFQ4AK.js +0 -692
  442. package/dist/chunk-GGUCMNZ2.js +0 -339
  443. package/dist/chunk-GGUCMNZ2.js.map +0 -7
  444. package/dist/chunk-HAQGBJZ7.js +0 -156
  445. package/dist/chunk-HCEB7HBL.js +0 -2960
  446. package/dist/chunk-ISYZNLED.js +0 -444
  447. package/dist/chunk-IXQQHAHZ.js +0 -237
  448. package/dist/chunk-JSYPAJVF.js +0 -37
  449. package/dist/chunk-KBEIJEOX.js +0 -194
  450. package/dist/chunk-KE5IMRCJ.js +0 -516
  451. package/dist/chunk-KSWKOKY7.js +0 -38
  452. package/dist/chunk-L2TWQXK2.js +0 -203
  453. package/dist/chunk-L4ORRHDP.js +0 -2325
  454. package/dist/chunk-LH4BM6C7.js +0 -257
  455. package/dist/chunk-LLLRH3MB.js +0 -274
  456. package/dist/chunk-MWDPHZ2K.js +0 -1269
  457. package/dist/chunk-N2FCAFJH.js +0 -178
  458. package/dist/chunk-N2FCAFJH.js.map +0 -7
  459. package/dist/chunk-NT4BDYKQ.js +0 -466
  460. package/dist/chunk-OH33WT6Q.js +0 -119
  461. package/dist/chunk-PEBOVSIC.js +0 -1339
  462. package/dist/chunk-Q37PHHHH.js +0 -59
  463. package/dist/chunk-QCPXDSKH.js +0 -379
  464. package/dist/chunk-QDWEKA5J.js +0 -382
  465. package/dist/chunk-QVQI5DW7.js +0 -1817
  466. package/dist/chunk-QVQI5DW7.js.map +0 -7
  467. package/dist/chunk-R3UYQXJL.js +0 -1233
  468. package/dist/chunk-R3UYQXJL.js.map +0 -7
  469. package/dist/chunk-R47CRASM.js +0 -182
  470. package/dist/chunk-ROLQAMNM.js +0 -96
  471. package/dist/chunk-RXAKFDZM.js +0 -302
  472. package/dist/chunk-STDPI4K3.js +0 -281
  473. package/dist/chunk-SYDK5RV5.js +0 -54
  474. package/dist/chunk-SZ2VC2I2.js +0 -276
  475. package/dist/chunk-TAOTFHMT.js +0 -170
  476. package/dist/chunk-TMEDFIPS.js +0 -2799
  477. package/dist/chunk-TRZVM7OG.js +0 -194
  478. package/dist/chunk-VB47XOA4.js +0 -397
  479. package/dist/chunk-VCXAL36U.js +0 -54
  480. package/dist/chunk-VP3BJXOR.js +0 -55
  481. package/dist/chunk-VZGARY6D.js +0 -255
  482. package/dist/chunk-WO5S6USJ.js +0 -4373
  483. package/dist/chunk-WPR2CMWS.js +0 -34
  484. package/dist/chunk-WTKV6KPV.js +0 -70
  485. package/dist/chunk-XCJHO2PZ.js +0 -263
  486. package/dist/chunk-XVBFTP6A.js +0 -294
  487. package/dist/chunk-YKR3O6TN.js +0 -480
  488. package/dist/chunk-YZO7NVZW.js +0 -299
  489. package/dist/chunk-ZNOQYTF7.js +0 -140
  490. package/dist/chunk-ZOOMCQVD.js +0 -80
  491. package/dist/chunk-ZZTAUDJV.js +0 -217
  492. package/dist/cohort-E2RISYWQ.js +0 -66
  493. package/dist/condition-ZCROOBW2.js +0 -323
  494. package/dist/controls-TRUCBCUG.js +0 -30
  495. package/dist/controls.config-ZWEI3PWR.js +0 -30
  496. package/dist/correlation-ODRXACI5.js +0 -91
  497. package/dist/customdata.inputui-WADNWN4A.js +0 -280
  498. package/dist/dataDownload-TKACVGQG.js +0 -325
  499. package/dist/databrowser.ui-P74LKVPW.js +0 -421
  500. package/dist/dictionary-AR7TU32A.js +0 -109
  501. package/dist/dnaMethylation-FAA5NEAR.js +0 -29
  502. package/dist/dnaMethylation.integration.spec-XO5KTHGG.js +0 -194
  503. package/dist/dofetch-3ZCQBYTP.js +0 -47
  504. package/dist/e2pca-545GHJWM.js +0 -340
  505. package/dist/ep-DFBBKNXP.js +0 -1245
  506. package/dist/expclust.gdc.spec-IW2EKLIJ.js +0 -298
  507. package/dist/facet-JNIRJGUK.js +0 -515
  508. package/dist/gb-C3Z24J7G.js +0 -77
  509. package/dist/geneExpClustering-ZYYXVWEH.js +0 -240
  510. package/dist/geneExpression-AFI6PX7J.js +0 -29
  511. package/dist/geneExpression-QAHT5JK3.js +0 -309
  512. package/dist/geneExpression.unit.spec-QD6FBA7Y.js +0 -124
  513. package/dist/geneORA-UJUDJH33.js +0 -269
  514. package/dist/geneRanking-W4GJTT2D.js +0 -544
  515. package/dist/geneVariant-7TLTYMRN.js +0 -285
  516. package/dist/geneVariant-PIPW23ZL.js +0 -32
  517. package/dist/geneVariant.integration.spec-EWVEPYWR.js +0 -499
  518. package/dist/genefusion.ui-CQMINB6C.js +0 -299
  519. package/dist/geneset-DB2UIWDN.js +0 -199
  520. package/dist/genomeBrowser.spec-5PPCZGJY.js +0 -272
  521. package/dist/grin2-6FKWST7P.js +0 -66
  522. package/dist/grin2-CRHH7XQL.js +0 -945
  523. package/dist/hierCluster-LVVQUFIA.js +0 -55
  524. package/dist/hierCluster-N4BWRDRD.js +0 -51
  525. package/dist/hierCluster.config-RXYYXEKK.js +0 -32
  526. package/dist/hierCluster.integration.spec-32ELKHGP.js +0 -479
  527. package/dist/hierCluster.interactivity-O5PWSGD7.js +0 -45
  528. package/dist/hierCluster.renderers-E6FQE2DK.js +0 -18
  529. package/dist/imagePlot-CJJPFFND.js +0 -152
  530. package/dist/importPlot-IT2VCT3E.js +0 -8
  531. package/dist/isoformExpression-MB7VXNYL.js +0 -31
  532. package/dist/isoformExpression.unit.spec-WBGH5T22.js +0 -233
  533. package/dist/junction-RUMI5YFR.js +0 -32
  534. package/dist/junction.customTerm-LBVLFTOA.js +0 -15
  535. package/dist/junction.unit.spec-VU665JWH.js +0 -178
  536. package/dist/launch.adhoc-PG2VDOP5.js +0 -33
  537. package/dist/leftlabel.sample-O4EI4FEW.js +0 -253
  538. package/dist/lollipop-LWQ3ZPUC.js +0 -162
  539. package/dist/maf-Z7IN4HAW.js +0 -451
  540. package/dist/maftimeline-AQLIVUW3.js +0 -583
  541. package/dist/matrix-LTXFBGFW.js +0 -55
  542. package/dist/matrix-W2XR54DY.js +0 -50
  543. package/dist/matrix.cells-F44JHGOO.js +0 -25
  544. package/dist/matrix.config-Y5OUBSEC.js +0 -33
  545. package/dist/matrix.data-VLIW75OR.js +0 -22
  546. package/dist/matrix.groups-QEWUDMPF.js +0 -25
  547. package/dist/matrix.integration.spec-24DH4HNF.js +0 -3156
  548. package/dist/matrix.interactivity-R3BQYXAY.js +0 -33
  549. package/dist/matrix.layout-TENBEUJ6.js +0 -35
  550. package/dist/matrix.legend-E35GDZWD.js +0 -19
  551. package/dist/matrix.renderers-CMPAIUYT.js +0 -30
  552. package/dist/matrix.serieses-GXVQBJML.js +0 -18
  553. package/dist/matrix.sort-VQS6E6S5.js +0 -25
  554. package/dist/matrix.sort.unit.spec-P5C6EVDC.js +0 -464
  555. package/dist/matrix.sorterUi-4R2TVBUJ.js +0 -15
  556. package/dist/matrix.sorterUi.unit.spec-UMI2N2OG.js +0 -334
  557. package/dist/matrix.unit.spec-HSA7OWME.js +0 -146
  558. package/dist/mavb-ZARQZJJR.js +0 -723
  559. package/dist/mds.fimo-YRNNY5KA.js +0 -509
  560. package/dist/mds.samplescatterplot-ESIALOMA.js +0 -1545
  561. package/dist/mds.survivalplot-5E6ITKIU.js +0 -472
  562. package/dist/multivalue-CT2QWWB4.js +0 -79
  563. package/dist/numericDictTermCluster-CRVSJ6PI.js +0 -62
  564. package/dist/oncomatrix-MX5EHBNW.js +0 -286
  565. package/dist/oncomatrix.spec-DN2RAWGZ.js +0 -439
  566. package/dist/plot.2dvaf-B5QAKDTK.js +0 -368
  567. package/dist/plot.app-V5DZWC6N.js +0 -32
  568. package/dist/plot.barplot-VAJLAU7H.js +0 -93
  569. package/dist/plot.boxplot-PT3BUNVT.js +0 -142
  570. package/dist/plot.brainImaging-2WB7XJJM.js +0 -51
  571. package/dist/plot.disco-64IPBCII.js +0 -98
  572. package/dist/plot.ssgq-ET4OBMUM.js +0 -130
  573. package/dist/plot.vaf2cov-DGMVJ7UN.js +0 -249
  574. package/dist/polar2-CWWDVNZQ.js +0 -228
  575. package/dist/profileForms-FM7D4WO2.js +0 -937
  576. package/dist/profilePlot-LQ6K4EXX.js +0 -45
  577. package/dist/proteinView-WVI3OVDD.js +0 -1352
  578. package/dist/proteinView-WVI3OVDD.js.map +0 -7
  579. package/dist/proteomeCohortCompare-6FWTYPDF.js +0 -908
  580. package/dist/proteomeCohortCompare-6FWTYPDF.js.map +0 -7
  581. package/dist/pseudbulk.unit.spec-IAONX4QR.js +0 -82
  582. package/dist/pseudobulk-NIX4JOOZ.js +0 -31
  583. package/dist/qualitative-GLTKWA6H.js +0 -241
  584. package/dist/qualitative-M3XSQZA2.js +0 -34
  585. package/dist/radar2-JBULXNFQ.js +0 -323
  586. package/dist/radarFacility2-YYIBHZCY.js +0 -331
  587. package/dist/rememberedGvQ.unit.spec-YJV6DVPN.js +0 -210
  588. package/dist/render-ZCH7R3WL.js +0 -29
  589. package/dist/report-YPIAIMND.js +0 -213
  590. package/dist/sampleView-K4GSYMAE.js +0 -39
  591. package/dist/samplelst-F2SLVHFP.js +0 -102
  592. package/dist/samplematrix-Z6F4F7YN.js +0 -2188
  593. package/dist/sc-UM7SEGED.js +0 -77
  594. package/dist/scatter-63XRRLGP.js +0 -921
  595. package/dist/scatter-HFTYLGDP.js +0 -84
  596. package/dist/selectGenomeWithTklst-PJNALPM2.js +0 -125
  597. package/dist/singleCellCellType-HR3R6KBD.js +0 -29
  598. package/dist/singleCellCellType.unit.spec-VK57HQ2O.js +0 -150
  599. package/dist/singleCellGeneExpression-VWOA7MLN.js +0 -29
  600. package/dist/singleCellGeneExpression.unit.spec-YP64T3XD.js +0 -144
  601. package/dist/singleCellNumericValue-3VIUPYPB.js +0 -29
  602. package/dist/singleCellNumericValue.unit.spec-VR5ICRQA.js +0 -412
  603. package/dist/singleCellPlot-36QDY7VL.js +0 -44
  604. package/dist/singlecell-D2MZVFR4.js +0 -77
  605. package/dist/singlecell-EXEOLJ3J.js +0 -1562
  606. package/dist/snp-XHEHXZMB.js +0 -29
  607. package/dist/snp.unit.spec-YR6IDLL7.js +0 -167
  608. package/dist/snplocus-BM7LUK2U.js +0 -200
  609. package/dist/snplst-22VSEZ7R.js +0 -36
  610. package/dist/spliceevent.a53ss.diagram-KERTJ3QA.js +0 -142
  611. package/dist/spliceevent.exonskip.diagram-K74VIUA4.js +0 -274
  612. package/dist/spliceevent.noeventdiagram-W7WGSVVL.js +0 -451
  613. package/dist/ssGSEA-XDEA5TVX.js +0 -29
  614. package/dist/ssGSEA.unit.spec-RDCPXJ5S.js +0 -79
  615. package/dist/stattable-HZ3DOUEM.js +0 -112
  616. package/dist/studyCatalog-FWNHGZUT.js +0 -410
  617. package/dist/studyCatalog-FWNHGZUT.js.map +0 -7
  618. package/dist/summarizeCnvGeneexp-VB4SOJHT.js +0 -154
  619. package/dist/summarizeGeneexpSurvival-5ZWIJ6O4.js +0 -101
  620. package/dist/summarizeMutationCnv-MBPU64C5.js +0 -155
  621. package/dist/summarizeMutationDiagnosis-QRP4ITNL.js +0 -31
  622. package/dist/summarizeMutationSurvival-SSXAY5W4.js +0 -95
  623. package/dist/summary-SRESZS4Z.js +0 -40
  624. package/dist/summary.integration.spec-3V2CEPJM.js +0 -405
  625. package/dist/summaryInput-3VD4KBCU.js +0 -238
  626. package/dist/sunburst-E5IEQQUV.js +0 -274
  627. package/dist/survival-H4HYC6GC.js +0 -1246
  628. package/dist/survival-K5WWAELO.js +0 -49
  629. package/dist/survival.integration.spec-SPN2TSQW.js +0 -609
  630. package/dist/svgraph-USRAYSBN.js +0 -1377
  631. package/dist/svmr-MOKLLJKJ.js +0 -3832
  632. package/dist/table-WD3P3WL2.js +0 -192
  633. package/dist/termCollection-JU4OJRWD.js +0 -29
  634. package/dist/termCollection-VWS5CKVH.js +0 -247
  635. package/dist/termCollection.unit.spec-TPUJWKKW.js +0 -295
  636. package/dist/termCollectionFractionSelection-UWLHDPX2.js +0 -38
  637. package/dist/termCollectionFractionSelection.unit.spec-RBHJY34K.js +0 -184
  638. package/dist/tk-OAOVCATS.js +0 -1116
  639. package/dist/tk-SMOGJUD7.js +0 -37
  640. package/dist/tp.ui-EMWJCGRX.js +0 -1449
  641. package/dist/tvs.categorical-A7J4RIKL.js +0 -28
  642. package/dist/tvs.condition-HFLZES5E.js +0 -160
  643. package/dist/tvs.dt-GBYX2RWX.js +0 -30
  644. package/dist/tvs.dtcnv.categorical-X2K3MIPG.js +0 -31
  645. package/dist/tvs.dtcnv.continuous-5EMX4PBP.js +0 -63
  646. package/dist/tvs.dtfusion-7VVSPNRK.js +0 -31
  647. package/dist/tvs.dtitd-2YGFPXOY.js +0 -31
  648. package/dist/tvs.dtsnvindel-EISO52O6.js +0 -31
  649. package/dist/tvs.dtsv-RTAMAW3G.js +0 -31
  650. package/dist/tvs.multivalue-5N6PSG4L.js +0 -84
  651. package/dist/tvs.numeric-R5UT7ARM.js +0 -32
  652. package/dist/tvs.samplelst-SZDNNFK5.js +0 -95
  653. package/dist/tvs.survival-EUUDDXP7.js +0 -110
  654. package/dist/tvs.termCollection-DAHEYZK2.js +0 -118
  655. package/dist/vocabulary-P4XRHR34.js +0 -32
  656. package/dist/wsi.direct-J7VX5EMI.js +0 -8339
  657. /package/dist/{2dmaf-Y4CPQCKD.js.map → 2dmaf-RRHATFHO.js.map} +0 -0
  658. /package/dist/{AggMatrixInput-XSZSKYJM.js.map → AggMatrixInput-4UHBCXYH.js.map} +0 -0
  659. /package/dist/{AggregateMatrix-BETOEO7U.js.map → AggregateMatrix-IJE5CM5Y.js.map} +0 -0
  660. /package/dist/{AppHeader-6X6SNEBI.js.map → AppHeader-UXGLRW6C.js.map} +0 -0
  661. /package/dist/{BoxPlot-J6JKDOH6.js.map → BoxPlot-GQYC22KY.js.map} +0 -0
  662. /package/dist/{CorrelationVolcano-DMDE4LAP.js.map → CorrelationVolcano-5CWRWZTI.js.map} +0 -0
  663. /package/dist/{Cuminc-6WHLJVOC.js.map → Cuminc-TYHKAPRK.js.map} +0 -0
  664. /package/dist/{DE-EJM6W4Q4.js.map → DE-UUFQGSOI.js.map} +0 -0
  665. /package/dist/{DEinput-AU3E7JM2.js.map → DEinput-DU7MF4YY.js.map} +0 -0
  666. /package/dist/{DM-FN4WJNDX.js.map → DM-SSI5KUBC.js.map} +0 -0
  667. /package/dist/{DifferentialAnalysis-FD57SA7H.js.map → DifferentialAnalysis-G6FE2MXY.js.map} +0 -0
  668. /package/dist/{Disco-BMNSQ6YL.js.map → Disco-B3KGNEAW.js.map} +0 -0
  669. /package/dist/{Disco.UI-4VXFHJQV.js.map → Disco.UI-UNPUBQCN.js.map} +0 -0
  670. /package/dist/{DmrPlot-P5WKLC5J.js.map → DmrPlot-27NGDMT4.js.map} +0 -0
  671. /package/dist/{GB-BO75K7TF.js.map → GB-SXACUA4V.js.map} +0 -0
  672. /package/dist/{GSEA-OEFXDJ23.js.map → GSEA-EHMBA3TF.js.map} +0 -0
  673. /package/dist/{GeneExpInput-FP7RBRXH.js.map → GeneExpInput-NDXISF2U.js.map} +0 -0
  674. /package/dist/{Geomap-ELX6O3IS.js.map → Geomap-3CNT227W.js.map} +0 -0
  675. /package/dist/{HicApp-3JVEBSWO.js.map → HicApp-VQBUB6EZ.js.map} +0 -0
  676. /package/dist/{IDCViewer-76N6I34Q.js.map → IDCViewer-DTOE7KDX.js.map} +0 -0
  677. /package/dist/{NumBinaryEditor-XLACD6VG.js.map → NumBinaryEditor-IVZ4MMQT.js.map} +0 -0
  678. /package/dist/{NumBinaryEditor.unit.spec-3Z62H2JG.js.map → NumBinaryEditor.unit.spec-3BSQ6FM4.js.map} +0 -0
  679. /package/dist/{NumContEditor-Z5ONNXFC.js.map → NumContEditor-CUZHU3IO.js.map} +0 -0
  680. /package/dist/{NumContEditor.unit.spec-EJ3L7WH6.js.map → NumContEditor.unit.spec-SCQFD2Y7.js.map} +0 -0
  681. /package/dist/{NumCustomBinEditor-WKXAK5ZW.js.map → NumCustomBinEditor-UEEYZ4ZO.js.map} +0 -0
  682. /package/dist/{NumCustomBinEditor.unit.spec-WXCLBBWT.js.map → NumCustomBinEditor.unit.spec-GYS35OQV.js.map} +0 -0
  683. /package/dist/{NumDiscreteEditor-5UBFABFT.js.map → NumDiscreteEditor-IT7NIXTV.js.map} +0 -0
  684. /package/dist/{NumDiscreteEditor.unit.spec-5EMKOQZU.js.map → NumDiscreteEditor.unit.spec-LB6VLAWO.js.map} +0 -0
  685. /package/dist/{NumRegularBinEditor-DMOKU5UM.js.map → NumRegularBinEditor-FF6UXZWN.js.map} +0 -0
  686. /package/dist/{NumRegularBinEditor.unit.spec-QT2WSGNL.js.map → NumRegularBinEditor.unit.spec-Z4S5LH2C.js.map} +0 -0
  687. /package/dist/{NumSplineEditor-G3T26V5H.js.map → NumSplineEditor-IW5WEN3P.js.map} +0 -0
  688. /package/dist/{NumSplineEditor.unit.spec-P4WNWJKE.js.map → NumSplineEditor.unit.spec-PAEN3SAD.js.map} +0 -0
  689. /package/dist/{NumericDensity-AWQK5BKC.js.map → NumericDensity-CPJIQLYT.js.map} +0 -0
  690. /package/dist/{NumericDensity.unit.spec-TO5EUJF3.js.map → NumericDensity.unit.spec-4KHECHVU.js.map} +0 -0
  691. /package/dist/{NumericHandler-MZ4WZDMW.js.map → NumericHandler-SEFTQJDM.js.map} +0 -0
  692. /package/dist/{NumericHandler.unit.spec-JFLQQ2RI.js.map → NumericHandler.unit.spec-UGDR3476.js.map} +0 -0
  693. /package/dist/{Regression-QO5EKLTZ.js.map → Regression-WDSISHYL.js.map} +0 -0
  694. /package/dist/{RunChart2-JLN324L6.js.map → RunChart2-2NPADXUR.js.map} +0 -0
  695. /package/dist/{SC-W3M6IEDU.js.map → SC-EWDBPHEL.js.map} +0 -0
  696. /package/dist/{Violin-BCHEWRDU.js.map → Violin-POGGPCZY.js.map} +0 -0
  697. /package/dist/{Volcano-2PP67BZI.js.map → Volcano-U2B4KEUL.js.map} +0 -0
  698. /package/dist/{Wsi-GNGKPGJF.js.map → Wsi-G7OCAJ3R.js.map} +0 -0
  699. /package/dist/{adSandbox-XRWLD73B.js.map → adSandbox-SUCX6DAQ.js.map} +0 -0
  700. /package/dist/{animatedBubbleChart-23CVOAXV.js.map → animatedBubbleChart-SDBWJELZ.js.map} +0 -0
  701. /package/dist/{app-KRJBODQD.js.map → app-ATQM5PKI.js.map} +0 -0
  702. /package/dist/{app-YLGQTR3U.js.map → app-BCKEWJCY.js.map} +0 -0
  703. /package/dist/{bam-3VPOMNJU.js.map → bam-QK2ZLZDI.js.map} +0 -0
  704. /package/dist/{barchart-I4S7TYFY.js.map → barchart-RHDKI3NZ.js.map} +0 -0
  705. /package/dist/{barchart2-VXUP2L4M.js.map → barchart2-CS3E6FOY.js.map} +0 -0
  706. /package/dist/{block-NVXPY2IK.js.map → block-RQ3HTJVP.js.map} +0 -0
  707. /package/dist/{block.init-CQ76SLCN.js.map → block.init-T33F47DO.js.map} +0 -0
  708. /package/dist/{block.mds.expressionrank-CTMM4IFI.js.map → block.mds.expressionrank-LQD6MN6Z.js.map} +0 -0
  709. /package/dist/{block.mds.geneboxplot-XYUU3PUZ.js.map → block.mds.geneboxplot-N5XHHVR7.js.map} +0 -0
  710. /package/dist/{block.mds.junction-LX4ETPO6.js.map → block.mds.junction-JD4WQUSH.js.map} +0 -0
  711. /package/dist/{block.mds.svcnv-ABWHJJOA.js.map → block.mds.svcnv-LCTYWXL2.js.map} +0 -0
  712. /package/dist/{block.svg-NY7ZDCUD.js.map → block.svg-2F3RGTI3.js.map} +0 -0
  713. /package/dist/{block.tk.aicheck-3C52WICS.js.map → block.tk.aicheck-BOF6WZ5E.js.map} +0 -0
  714. /package/dist/{block.tk.bam-QQHY3KEB.js.map → block.tk.bam-5GBYEQBM.js.map} +0 -0
  715. /package/dist/{block.tk.bedgraphdot-EWZAMZ6E.js.map → block.tk.bedgraphdot-LVQEP4RS.js.map} +0 -0
  716. /package/dist/{block.tk.bigwig.ui-OW3Q6THD.js.map → block.tk.bigwig.ui-HHBO4JAC.js.map} +0 -0
  717. /package/dist/{block.tk.hicstraw-T7GJ7ZV6.js.map → block.tk.hicstraw-JBO4UEOA.js.map} +0 -0
  718. /package/dist/{block.tk.junction-WKD34BUV.js.map → block.tk.junction-S5S2N7FK.js.map} +0 -0
  719. /package/dist/{block.tk.junction.textmatrixui-G6KNHIUC.js.map → block.tk.junction.textmatrixui-DNQL7WB5.js.map} +0 -0
  720. /package/dist/{block.tk.ld-PXXGZMUF.js.map → block.tk.ld-JHQNR67E.js.map} +0 -0
  721. /package/dist/{block.tk.menu-W3RFEKFJ.js.map → block.tk.menu-7JBJOY2O.js.map} +0 -0
  722. /package/dist/{block.tk.pgv-QVRJDGGG.js.map → block.tk.pgv-FQPREV6P.js.map} +0 -0
  723. /package/dist/{brainImaging-D42IV6LT.js.map → brainImaging-HEWGZZNY.js.map} +0 -0
  724. /package/dist/{brainRegions-DLXBHC4Y.js.map → brainRegions-QUGB7YUW.js.map} +0 -0
  725. /package/dist/{bubbleHeatmap-LATPOGLF.js.map → bubbleHeatmap-OZRONGAX.js.map} +0 -0
  726. /package/dist/{cellTypeBubbleHeatmap-H7VHFQFD.js.map → cellTypeBubbleHeatmap-N7NDE325.js.map} +0 -0
  727. /package/dist/{chunk-EG7HOBJY.js.map → chunk-2FWSNJEN.js.map} +0 -0
  728. /package/dist/{chunk-WPR2CMWS.js.map → chunk-2JIKMCJR.js.map} +0 -0
  729. /package/dist/{chunk-CNQJ4LOC.js.map → chunk-3SPEW6R6.js.map} +0 -0
  730. /package/dist/{chunk-CVT7JE5B.js.map → chunk-5G6O5RYM.js.map} +0 -0
  731. /package/dist/{chunk-YZO7NVZW.js.map → chunk-65DO5IKM.js.map} +0 -0
  732. /package/dist/{chunk-B4NTLUWL.js.map → chunk-6Q5SOSSU.js.map} +0 -0
  733. /package/dist/{chunk-AIH5PKJN.js.map → chunk-7JHIUS54.js.map} +0 -0
  734. /package/dist/{chunk-VB47XOA4.js.map → chunk-7X347XMF.js.map} +0 -0
  735. /package/dist/{chunk-VP3BJXOR.js.map → chunk-ABLG7GUS.js.map} +0 -0
  736. /package/dist/{chunk-SZ2VC2I2.js.map → chunk-AFEFZ74T.js.map} +0 -0
  737. /package/dist/{chunk-F22GGUNI.js.map → chunk-AIC43DTG.js.map} +0 -0
  738. /package/dist/{chunk-R47CRASM.js.map → chunk-AJXP4AV7.js.map} +0 -0
  739. /package/dist/{chunk-DBOJ3TMI.js.map → chunk-AMW5LCUB.js.map} +0 -0
  740. /package/dist/{chunk-HAQGBJZ7.js.map → chunk-AV2IH5K2.js.map} +0 -0
  741. /package/dist/{chunk-XCJHO2PZ.js.map → chunk-B3WLXXGY.js.map} +0 -0
  742. /package/dist/{chunk-RXAKFDZM.js.map → chunk-BG6GAROI.js.map} +0 -0
  743. /package/dist/{chunk-5KNC4AJ7.js.map → chunk-BU6PAOGA.js.map} +0 -0
  744. /package/dist/{chunk-ROLQAMNM.js.map → chunk-C2TII2FF.js.map} +0 -0
  745. /package/dist/{chunk-DDDL46RE.js.map → chunk-CTFHEDG2.js.map} +0 -0
  746. /package/dist/{chunk-JSYPAJVF.js.map → chunk-CXEECHP5.js.map} +0 -0
  747. /package/dist/{chunk-PEBOVSIC.js.map → chunk-CZK4EV3Y.js.map} +0 -0
  748. /package/dist/{chunk-L4ORRHDP.js.map → chunk-D35GNF3Y.js.map} +0 -0
  749. /package/dist/{chunk-TAOTFHMT.js.map → chunk-DFZWE3TR.js.map} +0 -0
  750. /package/dist/{chunk-4BQ3HUD2.js.map → chunk-E7XHA4YL.js.map} +0 -0
  751. /package/dist/{chunk-SYDK5RV5.js.map → chunk-EDFBRXX2.js.map} +0 -0
  752. /package/dist/{chunk-5KHI46ZP.js.map → chunk-F23EQSGU.js.map} +0 -0
  753. /package/dist/{chunk-QCPXDSKH.js.map → chunk-F2EEQ7KG.js.map} +0 -0
  754. /package/dist/{chunk-CFHGRMLN.js.map → chunk-F5FFI7Z7.js.map} +0 -0
  755. /package/dist/{chunk-DURCB2KS.js.map → chunk-FK5NL2DF.js.map} +0 -0
  756. /package/dist/{chunk-G7YFQ4AK.js.map → chunk-FVZTRWAO.js.map} +0 -0
  757. /package/dist/{chunk-AWZOZLFI.js.map → chunk-GDHQVEIO.js.map} +0 -0
  758. /package/dist/{chunk-TMEDFIPS.js.map → chunk-GSVB4XNS.js.map} +0 -0
  759. /package/dist/{chunk-E64SCL4O.js.map → chunk-GVAV4VRI.js.map} +0 -0
  760. /package/dist/{chunk-ZNOQYTF7.js.map → chunk-H2FELGYK.js.map} +0 -0
  761. /package/dist/{chunk-LLLRH3MB.js.map → chunk-HJARHSDC.js.map} +0 -0
  762. /package/dist/{chunk-VCXAL36U.js.map → chunk-HXRG7XYB.js.map} +0 -0
  763. /package/dist/{chunk-ZOOMCQVD.js.map → chunk-J5KCTRJC.js.map} +0 -0
  764. /package/dist/{chunk-Q37PHHHH.js.map → chunk-JMFVXWDX.js.map} +0 -0
  765. /package/dist/{chunk-L2TWQXK2.js.map → chunk-KGX2OIR4.js.map} +0 -0
  766. /package/dist/{chunk-LH4BM6C7.js.map → chunk-L2NPLA43.js.map} +0 -0
  767. /package/dist/{chunk-6WYKPBZI.js.map → chunk-L2WOLNZK.js.map} +0 -0
  768. /package/dist/{chunk-NT4BDYKQ.js.map → chunk-LQKMDIRB.js.map} +0 -0
  769. /package/dist/{chunk-D4UCM6R7.js.map → chunk-LSQ5AQ6Q.js.map} +0 -0
  770. /package/dist/{chunk-MWDPHZ2K.js.map → chunk-MBQIHLGI.js.map} +0 -0
  771. /package/dist/{chunk-42II4FNQ.js.map → chunk-MFR4WWDM.js.map} +0 -0
  772. /package/dist/{chunk-STDPI4K3.js.map → chunk-NHMIMTJA.js.map} +0 -0
  773. /package/dist/{chunk-C5YMSIGN.js.map → chunk-NPBN3PPZ.js.map} +0 -0
  774. /package/dist/{chunk-5D5Y3XVS.js.map → chunk-NULQJF73.js.map} +0 -0
  775. /package/dist/{chunk-XVBFTP6A.js.map → chunk-NYO7YANQ.js.map} +0 -0
  776. /package/dist/{chunk-TRZVM7OG.js.map → chunk-OBNHXAYG.js.map} +0 -0
  777. /package/dist/{chunk-BQXK7K5J.js.map → chunk-PETYR7LC.js.map} +0 -0
  778. /package/dist/{chunk-OH33WT6Q.js.map → chunk-PLFPXOGX.js.map} +0 -0
  779. /package/dist/{chunk-AYZ6BEK4.js.map → chunk-PQVHRM4L.js.map} +0 -0
  780. /package/dist/{chunk-EAVA7XQL.js.map → chunk-QLUTQPZE.js.map} +0 -0
  781. /package/dist/{chunk-KSWKOKY7.js.map → chunk-QNQ2ZYT7.js.map} +0 -0
  782. /package/dist/{chunk-VZGARY6D.js.map → chunk-QYCPIVCX.js.map} +0 -0
  783. /package/dist/{chunk-KE5IMRCJ.js.map → chunk-RZ2THVK4.js.map} +0 -0
  784. /package/dist/{chunk-CBAU2QMR.js.map → chunk-S4IZ4VM7.js.map} +0 -0
  785. /package/dist/{chunk-QDWEKA5J.js.map → chunk-SFUDTUXF.js.map} +0 -0
  786. /package/dist/{chunk-3Z7FX6GQ.js.map → chunk-SUT75MRI.js.map} +0 -0
  787. /package/dist/{chunk-4IWOYJ4D.js.map → chunk-SYLYLOHK.js.map} +0 -0
  788. /package/dist/{chunk-2XH5T5HA.js.map → chunk-TEFWF3SK.js.map} +0 -0
  789. /package/dist/{chunk-WTKV6KPV.js.map → chunk-TPSVPMAN.js.map} +0 -0
  790. /package/dist/{chunk-HCEB7HBL.js.map → chunk-V4ZKHM6D.js.map} +0 -0
  791. /package/dist/{chunk-WO5S6USJ.js.map → chunk-V7DNHPZD.js.map} +0 -0
  792. /package/dist/{chunk-KBEIJEOX.js.map → chunk-VPMQDTYR.js.map} +0 -0
  793. /package/dist/{chunk-ISYZNLED.js.map → chunk-VV6JIG4D.js.map} +0 -0
  794. /package/dist/{chunk-ZZTAUDJV.js.map → chunk-WU3YXPRE.js.map} +0 -0
  795. /package/dist/{chunk-YKR3O6TN.js.map → chunk-X2HWRISK.js.map} +0 -0
  796. /package/dist/{chunk-F4TEXJ74.js.map → chunk-X77QVINS.js.map} +0 -0
  797. /package/dist/{chunk-IXQQHAHZ.js.map → chunk-XXFLJWTQ.js.map} +0 -0
  798. /package/dist/{cohort-E2RISYWQ.js.map → cohort-ATIZW34H.js.map} +0 -0
  799. /package/dist/{condition-ZCROOBW2.js.map → condition-SGJIDZNB.js.map} +0 -0
  800. /package/dist/{controls-TRUCBCUG.js.map → controls-JQCMGPXP.js.map} +0 -0
  801. /package/dist/{controls.config-ZWEI3PWR.js.map → controls.config-WQHVQAIJ.js.map} +0 -0
  802. /package/dist/{correlation-ODRXACI5.js.map → correlation-S3MN3L5Q.js.map} +0 -0
  803. /package/dist/{customdata.inputui-WADNWN4A.js.map → customdata.inputui-LGTGMJBZ.js.map} +0 -0
  804. /package/dist/{dataDownload-TKACVGQG.js.map → dataDownload-FAWN2WKE.js.map} +0 -0
  805. /package/dist/{databrowser.ui-P74LKVPW.js.map → databrowser.ui-KF3LWQXG.js.map} +0 -0
  806. /package/dist/{dictionary-AR7TU32A.js.map → dictionary-EVLEOT72.js.map} +0 -0
  807. /package/dist/{dnaMethylation-FAA5NEAR.js.map → dnaMethylation-J3SPEM4S.js.map} +0 -0
  808. /package/dist/{dnaMethylation.integration.spec-XO5KTHGG.js.map → dnaMethylation.integration.spec-CTA53YCT.js.map} +0 -0
  809. /package/dist/{dofetch-3ZCQBYTP.js.map → dofetch-3C3MI5NR.js.map} +0 -0
  810. /package/dist/{e2pca-545GHJWM.js.map → e2pca-PTWPY5WP.js.map} +0 -0
  811. /package/dist/{ep-DFBBKNXP.js.map → ep-MS4LQQDR.js.map} +0 -0
  812. /package/dist/{expclust.gdc.spec-IW2EKLIJ.js.map → expclust.gdc.spec-S5FE4MMD.js.map} +0 -0
  813. /package/dist/{facet-JNIRJGUK.js.map → facet-FSOIZJCA.js.map} +0 -0
  814. /package/dist/{gb-C3Z24J7G.js.map → gb-YDEOK7NW.js.map} +0 -0
  815. /package/dist/{geneExpClustering-ZYYXVWEH.js.map → geneExpClustering-37JKKFW3.js.map} +0 -0
  816. /package/dist/{geneExpression-AFI6PX7J.js.map → geneExpression-G6ODP3VY.js.map} +0 -0
  817. /package/dist/{geneExpression-QAHT5JK3.js.map → geneExpression-VQPRFNKE.js.map} +0 -0
  818. /package/dist/{geneExpression.unit.spec-QD6FBA7Y.js.map → geneExpression.unit.spec-ZHXCUG6Q.js.map} +0 -0
  819. /package/dist/{geneORA-UJUDJH33.js.map → geneORA-E3PSS3CI.js.map} +0 -0
  820. /package/dist/{geneRanking-W4GJTT2D.js.map → geneRanking-MK3YYINC.js.map} +0 -0
  821. /package/dist/{geneVariant-PIPW23ZL.js.map → geneVariant-LEMAVFOY.js.map} +0 -0
  822. /package/dist/{geneVariant-7TLTYMRN.js.map → geneVariant-NNSB7JLS.js.map} +0 -0
  823. /package/dist/{geneVariant.integration.spec-EWVEPYWR.js.map → geneVariant.integration.spec-6CC5UAOP.js.map} +0 -0
  824. /package/dist/{genefusion.ui-CQMINB6C.js.map → genefusion.ui-5NCQIQPN.js.map} +0 -0
  825. /package/dist/{geneset-DB2UIWDN.js.map → geneset-ZX4V3CFB.js.map} +0 -0
  826. /package/dist/{genomeBrowser.spec-5PPCZGJY.js.map → genomeBrowser.spec-J7ISXY6H.js.map} +0 -0
  827. /package/dist/{grin2-CRHH7XQL.js.map → grin2-GN3DQNON.js.map} +0 -0
  828. /package/dist/{grin2-6FKWST7P.js.map → grin2-LBGBBB4L.js.map} +0 -0
  829. /package/dist/{hierCluster-LVVQUFIA.js.map → hierCluster-5JURTKAZ.js.map} +0 -0
  830. /package/dist/{hierCluster-N4BWRDRD.js.map → hierCluster-BJ5VBPXR.js.map} +0 -0
  831. /package/dist/{hierCluster.config-RXYYXEKK.js.map → hierCluster.config-4EERP4KK.js.map} +0 -0
  832. /package/dist/{hierCluster.integration.spec-32ELKHGP.js.map → hierCluster.integration.spec-VR4GULRV.js.map} +0 -0
  833. /package/dist/{hierCluster.interactivity-O5PWSGD7.js.map → hierCluster.interactivity-SMTQOKUY.js.map} +0 -0
  834. /package/dist/{hierCluster.renderers-E6FQE2DK.js.map → hierCluster.renderers-PAME7BWU.js.map} +0 -0
  835. /package/dist/{imagePlot-CJJPFFND.js.map → imagePlot-4LMIKBVE.js.map} +0 -0
  836. /package/dist/{importPlot-IT2VCT3E.js.map → importPlot-3CG6ASNH.js.map} +0 -0
  837. /package/dist/{isoformExpression-MB7VXNYL.js.map → isoformExpression-VCDNKTZ6.js.map} +0 -0
  838. /package/dist/{isoformExpression.unit.spec-WBGH5T22.js.map → isoformExpression.unit.spec-ZXYY37TA.js.map} +0 -0
  839. /package/dist/{junction-RUMI5YFR.js.map → junction-5DXJO4PS.js.map} +0 -0
  840. /package/dist/{junction.customTerm-LBVLFTOA.js.map → junction.customTerm-UOPUSEOE.js.map} +0 -0
  841. /package/dist/{junction.unit.spec-VU665JWH.js.map → junction.unit.spec-F35E3GJW.js.map} +0 -0
  842. /package/dist/{launch.adhoc-PG2VDOP5.js.map → launch.adhoc-V2HTCQGD.js.map} +0 -0
  843. /package/dist/{leftlabel.sample-O4EI4FEW.js.map → leftlabel.sample-V7O2EC36.js.map} +0 -0
  844. /package/dist/{lollipop-LWQ3ZPUC.js.map → lollipop-RNRZLG64.js.map} +0 -0
  845. /package/dist/{maf-Z7IN4HAW.js.map → maf-W6SF6BJS.js.map} +0 -0
  846. /package/dist/{maftimeline-AQLIVUW3.js.map → maftimeline-NABCAMHG.js.map} +0 -0
  847. /package/dist/{matrix-LTXFBGFW.js.map → matrix-JC6AJT2N.js.map} +0 -0
  848. /package/dist/{matrix-W2XR54DY.js.map → matrix-UCHESWVK.js.map} +0 -0
  849. /package/dist/{matrix.cells-F44JHGOO.js.map → matrix.cells-B4L42TBM.js.map} +0 -0
  850. /package/dist/{matrix.config-Y5OUBSEC.js.map → matrix.config-6US3AAH7.js.map} +0 -0
  851. /package/dist/{matrix.data-VLIW75OR.js.map → matrix.data-FYFXYDA3.js.map} +0 -0
  852. /package/dist/{matrix.groups-QEWUDMPF.js.map → matrix.groups-Y7DEG3GS.js.map} +0 -0
  853. /package/dist/{matrix.integration.spec-24DH4HNF.js.map → matrix.integration.spec-KXX7SFX5.js.map} +0 -0
  854. /package/dist/{matrix.interactivity-R3BQYXAY.js.map → matrix.interactivity-NHWG4WCC.js.map} +0 -0
  855. /package/dist/{matrix.layout-TENBEUJ6.js.map → matrix.layout-5DQNT7DD.js.map} +0 -0
  856. /package/dist/{matrix.legend-E35GDZWD.js.map → matrix.legend-OY7IF6AS.js.map} +0 -0
  857. /package/dist/{matrix.renderers-CMPAIUYT.js.map → matrix.renderers-GYOXGHPU.js.map} +0 -0
  858. /package/dist/{matrix.serieses-GXVQBJML.js.map → matrix.serieses-657TLDAV.js.map} +0 -0
  859. /package/dist/{matrix.sort-VQS6E6S5.js.map → matrix.sort-IMA2ES3T.js.map} +0 -0
  860. /package/dist/{matrix.sort.unit.spec-P5C6EVDC.js.map → matrix.sort.unit.spec-S6BAFYPR.js.map} +0 -0
  861. /package/dist/{matrix.sorterUi-4R2TVBUJ.js.map → matrix.sorterUi-77F36Q5H.js.map} +0 -0
  862. /package/dist/{matrix.sorterUi.unit.spec-UMI2N2OG.js.map → matrix.sorterUi.unit.spec-V5NVQGD5.js.map} +0 -0
  863. /package/dist/{matrix.unit.spec-HSA7OWME.js.map → matrix.unit.spec-R4NMTZYQ.js.map} +0 -0
  864. /package/dist/{mavb-ZARQZJJR.js.map → mavb-MRCVMBPD.js.map} +0 -0
  865. /package/dist/{mds.fimo-YRNNY5KA.js.map → mds.fimo-5DCH5BEM.js.map} +0 -0
  866. /package/dist/{mds.samplescatterplot-ESIALOMA.js.map → mds.samplescatterplot-VIBCS5M6.js.map} +0 -0
  867. /package/dist/{mds.survivalplot-5E6ITKIU.js.map → mds.survivalplot-AZ7LJDZZ.js.map} +0 -0
  868. /package/dist/{multivalue-CT2QWWB4.js.map → multivalue-4QKGYYW2.js.map} +0 -0
  869. /package/dist/{numericDictTermCluster-CRVSJ6PI.js.map → numericDictTermCluster-GLLG6IK2.js.map} +0 -0
  870. /package/dist/{oncomatrix-MX5EHBNW.js.map → oncomatrix-R32ZPMX7.js.map} +0 -0
  871. /package/dist/{oncomatrix.spec-DN2RAWGZ.js.map → oncomatrix.spec-BMK6LMBS.js.map} +0 -0
  872. /package/dist/{plot.2dvaf-B5QAKDTK.js.map → plot.2dvaf-46FT53MF.js.map} +0 -0
  873. /package/dist/{plot.app-V5DZWC6N.js.map → plot.app-7EE4YCV4.js.map} +0 -0
  874. /package/dist/{plot.barplot-VAJLAU7H.js.map → plot.barplot-FK4J2G7K.js.map} +0 -0
  875. /package/dist/{plot.boxplot-PT3BUNVT.js.map → plot.boxplot-ATY4LK3X.js.map} +0 -0
  876. /package/dist/{plot.brainImaging-2WB7XJJM.js.map → plot.brainImaging-S7B547V4.js.map} +0 -0
  877. /package/dist/{plot.disco-64IPBCII.js.map → plot.disco-K5MMC2GD.js.map} +0 -0
  878. /package/dist/{plot.ssgq-ET4OBMUM.js.map → plot.ssgq-B3OVMZFD.js.map} +0 -0
  879. /package/dist/{plot.vaf2cov-DGMVJ7UN.js.map → plot.vaf2cov-RBHDQULW.js.map} +0 -0
  880. /package/dist/{polar2-CWWDVNZQ.js.map → polar2-GECELCTG.js.map} +0 -0
  881. /package/dist/{profileForms-FM7D4WO2.js.map → profileForms-2USYOA34.js.map} +0 -0
  882. /package/dist/{profilePlot-LQ6K4EXX.js.map → profilePlot-YGD2CF6P.js.map} +0 -0
  883. /package/dist/{pseudbulk.unit.spec-IAONX4QR.js.map → pseudbulk.unit.spec-UVVRP6NR.js.map} +0 -0
  884. /package/dist/{pseudobulk-NIX4JOOZ.js.map → pseudobulk-ZIN5VJGB.js.map} +0 -0
  885. /package/dist/{qualitative-M3XSQZA2.js.map → qualitative-27BZGASV.js.map} +0 -0
  886. /package/dist/{qualitative-GLTKWA6H.js.map → qualitative-N4F6NITI.js.map} +0 -0
  887. /package/dist/{radar2-JBULXNFQ.js.map → radar2-X465RPJX.js.map} +0 -0
  888. /package/dist/{radarFacility2-YYIBHZCY.js.map → radarFacility2-AE7BA62N.js.map} +0 -0
  889. /package/dist/{rememberedGvQ.unit.spec-YJV6DVPN.js.map → rememberedGvQ.unit.spec-4PDIU5RY.js.map} +0 -0
  890. /package/dist/{render-ZCH7R3WL.js.map → render-TD2QWOHT.js.map} +0 -0
  891. /package/dist/{report-YPIAIMND.js.map → report-3Y2OWDF7.js.map} +0 -0
  892. /package/dist/{sampleView-K4GSYMAE.js.map → sampleView-BUMMYRHJ.js.map} +0 -0
  893. /package/dist/{samplelst-F2SLVHFP.js.map → samplelst-BWK53BLI.js.map} +0 -0
  894. /package/dist/{samplematrix-Z6F4F7YN.js.map → samplematrix-RQU43UYR.js.map} +0 -0
  895. /package/dist/{sc-UM7SEGED.js.map → sc-LCBFWCZZ.js.map} +0 -0
  896. /package/dist/{scatter-63XRRLGP.js.map → scatter-6S5I7OW3.js.map} +0 -0
  897. /package/dist/{scatter-HFTYLGDP.js.map → scatter-MJELX75N.js.map} +0 -0
  898. /package/dist/{selectGenomeWithTklst-PJNALPM2.js.map → selectGenomeWithTklst-WAVXHXR5.js.map} +0 -0
  899. /package/dist/{singleCellCellType-HR3R6KBD.js.map → singleCellCellType-WMCAJ7JF.js.map} +0 -0
  900. /package/dist/{singleCellCellType.unit.spec-VK57HQ2O.js.map → singleCellCellType.unit.spec-4Z46ZT5Q.js.map} +0 -0
  901. /package/dist/{singleCellGeneExpression-VWOA7MLN.js.map → singleCellGeneExpression-7Q5ZJT4R.js.map} +0 -0
  902. /package/dist/{singleCellGeneExpression.unit.spec-YP64T3XD.js.map → singleCellGeneExpression.unit.spec-6C7PDGRH.js.map} +0 -0
  903. /package/dist/{singleCellNumericValue-3VIUPYPB.js.map → singleCellNumericValue-QGYITZRC.js.map} +0 -0
  904. /package/dist/{singleCellNumericValue.unit.spec-VR5ICRQA.js.map → singleCellNumericValue.unit.spec-MQUKPEZJ.js.map} +0 -0
  905. /package/dist/{singleCellPlot-36QDY7VL.js.map → singleCellPlot-JJMFJ2KQ.js.map} +0 -0
  906. /package/dist/{singlecell-EXEOLJ3J.js.map → singlecell-J23S3JR2.js.map} +0 -0
  907. /package/dist/{singlecell-D2MZVFR4.js.map → singlecell-Y4OGUWEC.js.map} +0 -0
  908. /package/dist/{snp-XHEHXZMB.js.map → snp-IO6TKWGD.js.map} +0 -0
  909. /package/dist/{snp.unit.spec-YR6IDLL7.js.map → snp.unit.spec-X7ILEEPO.js.map} +0 -0
  910. /package/dist/{snplocus-BM7LUK2U.js.map → snplocus-Z2NGIKMO.js.map} +0 -0
  911. /package/dist/{snplst-22VSEZ7R.js.map → snplst-XCS2FCQV.js.map} +0 -0
  912. /package/dist/{spliceevent.a53ss.diagram-KERTJ3QA.js.map → spliceevent.a53ss.diagram-F3S4BRVG.js.map} +0 -0
  913. /package/dist/{spliceevent.exonskip.diagram-K74VIUA4.js.map → spliceevent.exonskip.diagram-AXCDJKH4.js.map} +0 -0
  914. /package/dist/{spliceevent.noeventdiagram-W7WGSVVL.js.map → spliceevent.noeventdiagram-UK3X667E.js.map} +0 -0
  915. /package/dist/{ssGSEA-XDEA5TVX.js.map → ssGSEA-ZRPNQKJ5.js.map} +0 -0
  916. /package/dist/{ssGSEA.unit.spec-RDCPXJ5S.js.map → ssGSEA.unit.spec-DG5ZHLC7.js.map} +0 -0
  917. /package/dist/{stattable-HZ3DOUEM.js.map → stattable-XYSC3CYU.js.map} +0 -0
  918. /package/dist/{summarizeCnvGeneexp-VB4SOJHT.js.map → summarizeCnvGeneexp-H2NP7VLU.js.map} +0 -0
  919. /package/dist/{summarizeGeneexpSurvival-5ZWIJ6O4.js.map → summarizeGeneexpSurvival-HTCD3VQQ.js.map} +0 -0
  920. /package/dist/{summarizeMutationCnv-MBPU64C5.js.map → summarizeMutationCnv-UEGXWK2P.js.map} +0 -0
  921. /package/dist/{summarizeMutationDiagnosis-QRP4ITNL.js.map → summarizeMutationDiagnosis-MJGWP7IT.js.map} +0 -0
  922. /package/dist/{summarizeMutationSurvival-SSXAY5W4.js.map → summarizeMutationSurvival-55JW5LA6.js.map} +0 -0
  923. /package/dist/{summary-SRESZS4Z.js.map → summary-HJO23RGB.js.map} +0 -0
  924. /package/dist/{summary.integration.spec-3V2CEPJM.js.map → summary.integration.spec-OWI2C2N5.js.map} +0 -0
  925. /package/dist/{summaryInput-3VD4KBCU.js.map → summaryInput-RL2JXRDE.js.map} +0 -0
  926. /package/dist/{sunburst-E5IEQQUV.js.map → sunburst-JFY6V5E2.js.map} +0 -0
  927. /package/dist/{survival-H4HYC6GC.js.map → survival-6FLR4YCJ.js.map} +0 -0
  928. /package/dist/{survival-K5WWAELO.js.map → survival-PBBU6PA5.js.map} +0 -0
  929. /package/dist/{survival.integration.spec-SPN2TSQW.js.map → survival.integration.spec-WAKTGYGP.js.map} +0 -0
  930. /package/dist/{svgraph-USRAYSBN.js.map → svgraph-WD3DUZV7.js.map} +0 -0
  931. /package/dist/{svmr-MOKLLJKJ.js.map → svmr-AP6ZFO7S.js.map} +0 -0
  932. /package/dist/{table-WD3P3WL2.js.map → table-GX3VJLPZ.js.map} +0 -0
  933. /package/dist/{termCollection-JU4OJRWD.js.map → termCollection-QE7U5QBD.js.map} +0 -0
  934. /package/dist/{termCollection-VWS5CKVH.js.map → termCollection-YQ332WKB.js.map} +0 -0
  935. /package/dist/{termCollection.unit.spec-TPUJWKKW.js.map → termCollection.unit.spec-ELLN7VRA.js.map} +0 -0
  936. /package/dist/{termCollectionFractionSelection-UWLHDPX2.js.map → termCollectionFractionSelection-V3RP5KAT.js.map} +0 -0
  937. /package/dist/{termCollectionFractionSelection.unit.spec-RBHJY34K.js.map → termCollectionFractionSelection.unit.spec-JR7Q7TJI.js.map} +0 -0
  938. /package/dist/{tk-OAOVCATS.js.map → tk-GD2KJM5W.js.map} +0 -0
  939. /package/dist/{tk-SMOGJUD7.js.map → tk-J5VPFEX6.js.map} +0 -0
  940. /package/dist/{tp.ui-EMWJCGRX.js.map → tp.ui-5K3AAXDW.js.map} +0 -0
  941. /package/dist/{tvs.categorical-A7J4RIKL.js.map → tvs.categorical-RPACB4VU.js.map} +0 -0
  942. /package/dist/{tvs.condition-HFLZES5E.js.map → tvs.condition-O6JBUM6D.js.map} +0 -0
  943. /package/dist/{tvs.dt-GBYX2RWX.js.map → tvs.dt-5EVBSRX3.js.map} +0 -0
  944. /package/dist/{tvs.dtcnv.categorical-X2K3MIPG.js.map → tvs.dtcnv.categorical-Y5YHBZNC.js.map} +0 -0
  945. /package/dist/{tvs.dtcnv.continuous-5EMX4PBP.js.map → tvs.dtcnv.continuous-WP322QUP.js.map} +0 -0
  946. /package/dist/{tvs.dtfusion-7VVSPNRK.js.map → tvs.dtfusion-CCMUFDMQ.js.map} +0 -0
  947. /package/dist/{tvs.dtitd-2YGFPXOY.js.map → tvs.dtitd-P3ED3MWA.js.map} +0 -0
  948. /package/dist/{tvs.dtsnvindel-EISO52O6.js.map → tvs.dtsnvindel-X2MXPLC6.js.map} +0 -0
  949. /package/dist/{tvs.dtsv-RTAMAW3G.js.map → tvs.dtsv-4FOWFNVV.js.map} +0 -0
  950. /package/dist/{tvs.multivalue-5N6PSG4L.js.map → tvs.multivalue-IRF467ZK.js.map} +0 -0
  951. /package/dist/{tvs.numeric-R5UT7ARM.js.map → tvs.numeric-C7FDCGCS.js.map} +0 -0
  952. /package/dist/{tvs.samplelst-SZDNNFK5.js.map → tvs.samplelst-CBU6ATI5.js.map} +0 -0
  953. /package/dist/{tvs.survival-EUUDDXP7.js.map → tvs.survival-3K5ASAXV.js.map} +0 -0
  954. /package/dist/{tvs.termCollection-DAHEYZK2.js.map → tvs.termCollection-MXEWO6KJ.js.map} +0 -0
  955. /package/dist/{vocabulary-P4XRHR34.js.map → vocabulary-GQBHDP3K.js.map} +0 -0
  956. /package/dist/{wsi.direct-J7VX5EMI.js.map → wsi.direct-25JUHWEF.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../plots/proteinView.ts"],
4
+ "sourcesContent": ["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 {\n\tprepareTileData,\n\trenderStudyTiles,\n\trenderPlaceholderTiles,\n\tmakeTileGrid,\n\trenderCoverageLine,\n\trenderPTMSummaryCard,\n\trenderOverviewVolcanoCard,\n\tgetTileConfig,\n\tlaunchViolinPlot,\n\tgetLog2Ratio\n} from './proteinView.tiles'\nimport { axisBottom, axisLeft, scaleLinear, rgb, select, creator } from 'd3'\nimport { shapeSelector, shapes } from '../dom/shapes.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\t// per-study tiles: each answers one question and renders only when its\n\t\t// data requirement is met; the coverage line explains missing tiles\n\t\tconst tileData = prepareTileData(data, this)\n\t\trenderCoverageLine(this.dom.body, tileData)\n\t\tconst grid = makeTileGrid(this.dom.body)\n\n\t\t// overview volcano leads the grid; its expanded view hosts the full\n\t\t// interactive volcano\n\t\trenderOverviewVolcanoCard(grid, data, this, {\n\t\t\tonExpandRender: (holder: any) => {\n\t\t\t\trenderCohortVolcano(holder, data, this, tileData.ptmSiteCount)\n\t\t\t}\n\t\t})\n\n\t\tconst { missing: missingTiles } = renderStudyTiles(grid, tileData, this)\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\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\t// full lollipop UI (single track, or isoform sidebar with compare mode),\n\t\t// rendered on demand into the PTM card's expanded view\n\t\tconst renderPTMSectionsInto = async (holder: any) => {\n\t\t\tif (sections.length === 1) {\n\t\t\t\tconst s = sections[0]\n\t\t\t\tconst genome = await getGenome(s.genomeName)\n\t\t\t\tawait renderPTMLollipop(holder.append('div'), s.cohorts, this, s.isoform, genome)\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst keyOf = (s: LollipopSection) => `${s.organism}\\u0001${s.isoform}`\n\t\t\tconst selectedKeys = new Set<string>([keyOf(sections[0])])\n\t\t\tlet compareMode = false\n\n\t\t\tconst layoutDiv = holder\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'flex')\n\t\t\t\t.style('gap', '16px')\n\t\t\t\t.style('margin-top', '10px')\n\t\t\t\t.style('margin-left', '70px')\n\t\t\t\t.style('align-items', 'flex-start')\n\t\t\tconst sidebar = layoutDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('flex', '0 0 220px')\n\t\t\t\t.style('border', '1px solid #e5e7eb')\n\t\t\t\t.style('border-radius', '4px')\n\t\t\t\t.style('padding', '8px')\n\t\t\t\t.style('font-size', '.85em')\n\t\t\t\t.style('position', 'sticky')\n\t\t\t\t.style('top', '8px')\n\t\t\t\t.style('margin-top', '20px')\n\t\t\t\t.style('max-height', '85vh')\n\t\t\t\t.style('overflow', 'auto')\n\t\t\tconst rightPane = layoutDiv.append('div').style('flex', '1 1 auto').style('min-width', '0')\n\n\t\t\tconst sidebarHeader = sidebar\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', '6px')\n\t\t\t\t.style('margin-bottom', '8px')\n\t\t\tsidebarHeader\n\t\t\t\t.append('span')\n\t\t\t\t.style('font-weight', '600')\n\t\t\t\t.style('font-size', '1.5em')\n\t\t\t\t.style('text-transform', 'uppercase')\n\t\t\t\t.text('Isoforms')\n\n\t\t\tconst modeToggle = sidebarHeader\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'inline-flex')\n\t\t\t\t.style('align-items', 'center')\n\t\t\t\t.style('gap', '6px')\n\t\t\tmodeToggle.append('span').style('color', '#6b7280').text('Mode:')\n\t\t\tmake_radios({\n\t\t\t\tholder: modeToggle.append('div').attr('aria-label', 'Isoform view mode'),\n\t\t\t\toptions: [\n\t\t\t\t\t{ label: 'Single', value: 'single', checked: true },\n\t\t\t\t\t{ label: 'Compare', value: 'compare' }\n\t\t\t\t],\n\t\t\t\tstyles: { display: 'inline-block' },\n\t\t\t\tcallback: (value: string) => {\n\t\t\t\t\tconst asCompare = value === 'compare'\n\t\t\t\t\tif (asCompare === compareMode) return\n\t\t\t\t\tcompareMode = asCompare\n\t\t\t\t\tif (!compareMode && selectedKeys.size > 1) {\n\t\t\t\t\t\tconst first = selectedKeys.values().next().value as string\n\t\t\t\t\t\tselectedKeys.clear()\n\t\t\t\t\t\tselectedKeys.add(first)\n\t\t\t\t\t}\n\t\t\t\t\trenderSidebar()\n\t\t\t\t\tvoid renderRight()\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tconst sidebarList = sidebar.append('div')\n\t\t\tconst sectionsByOrganism = new Map<string, LollipopSection[]>()\n\t\t\tfor (const s of sections) {\n\t\t\t\tconst arr = sectionsByOrganism.get(s.organism) || []\n\t\t\t\tarr.push(s)\n\t\t\t\tsectionsByOrganism.set(s.organism, arr)\n\t\t\t}\n\t\t\tconst showOrganismHeading = sectionsByOrganism.size > 1\n\n\t\t\tconst renderSidebar = () => {\n\t\t\t\tsidebarList.selectAll('*').remove()\n\t\t\t\tfor (const [organism, items] of sectionsByOrganism) {\n\t\t\t\t\tif (showOrganismHeading) {\n\t\t\t\t\t\tsidebarList\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.text(organism)\n\t\t\t\t\t\t\t.style('font-weight', '600')\n\t\t\t\t\t\t\t.style('color', '#374151')\n\t\t\t\t\t\t\t.style('margin', '6px 0 4px 0')\n\t\t\t\t\t}\n\t\t\t\t\tfor (const s of items) {\n\t\t\t\t\t\tconst key = keyOf(s)\n\t\t\t\t\t\tconst isSelected = selectedKeys.has(key)\n\t\t\t\t\t\tconst isSoleSelection = isSelected && selectedKeys.size === 1\n\t\t\t\t\t\tconst toggleSelection = () => {\n\t\t\t\t\t\t\tif (compareMode) {\n\t\t\t\t\t\t\t\tif (selectedKeys.has(key)) {\n\t\t\t\t\t\t\t\t\tif (selectedKeys.size > 1) selectedKeys.delete(key)\n\t\t\t\t\t\t\t\t\telse return // keep at least one\n\t\t\t\t\t\t\t\t} else selectedKeys.add(key)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tif (selectedKeys.has(key) && selectedKeys.size === 1) return\n\t\t\t\t\t\t\t\tselectedKeys.clear()\n\t\t\t\t\t\t\t\tselectedKeys.add(key)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\trenderSidebar()\n\t\t\t\t\t\t\tvoid renderRight()\n\t\t\t\t\t\t}\n\t\t\t\t\t\tconst row = sidebarList\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.attr('role', compareMode ? 'checkbox' : 'radio')\n\t\t\t\t\t\t\t.attr('aria-checked', String(isSelected))\n\t\t\t\t\t\t\t.attr('aria-label', `${s.organism} ${s.isoform}`)\n\t\t\t\t\t\t\t.attr('tabindex', '0')\n\t\t\t\t\t\t\t.style('display', 'flex')\n\t\t\t\t\t\t\t.style('align-items', 'center')\n\t\t\t\t\t\t\t.style('gap', '6px')\n\t\t\t\t\t\t\t.style('padding', '3px 4px')\n\t\t\t\t\t\t\t.style('border-radius', '3px')\n\t\t\t\t\t\t\t.style('background', isSelected ? '#eff6ff' : 'transparent')\n\t\t\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t\t\t\t.on('click', toggleSelection)\n\t\t\t\t\t\t\t.on('keydown', (event: KeyboardEvent) => {\n\t\t\t\t\t\t\t\tif (event.key === 'Enter' || event.key === ' ') {\n\t\t\t\t\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\t\t\t\t\ttoggleSelection()\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\tif (compareMode) {\n\t\t\t\t\t\t\trow\n\t\t\t\t\t\t\t\t.append('input')\n\t\t\t\t\t\t\t\t.attr('type', 'checkbox')\n\t\t\t\t\t\t\t\t.attr('tabindex', '-1')\n\t\t\t\t\t\t\t\t.attr('aria-hidden', 'true')\n\t\t\t\t\t\t\t\t.property('checked', isSelected)\n\t\t\t\t\t\t\t\t.property('disabled', isSoleSelection)\n\t\t\t\t\t\t\t\t.style('margin', '0')\n\t\t\t\t\t\t\t\t.style('cursor', isSoleSelection ? 'not-allowed' : 'pointer')\n\t\t\t\t\t\t\t\t.on('click', (event: Event) => {\n\t\t\t\t\t\t\t\t\tevent.stopPropagation()\n\t\t\t\t\t\t\t\t\ttoggleSelection()\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t}\n\t\t\t\t\t\trow.append('span').text(s.isoform)\n\t\t\t\t\t\trow.append('span').style('color', '#6b7280').style('margin-left', 'auto').text(String(s.cohorts.length))\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst renderRight = async () => {\n\t\t\t\trightPane.selectAll('*').remove()\n\t\t\t\tconst selected = sections.filter(s => selectedKeys.has(keyOf(s)))\n\t\t\t\tif (!selected.length) return\n\t\t\t\tconst cols = rightPane\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('display', 'flex')\n\t\t\t\t\t.style('flex-direction', 'column')\n\t\t\t\t\t.style('gap', '16px')\n\t\t\t\tfor (const s of selected) {\n\t\t\t\t\tconst col = cols.append('div').style('min-width', '0')\n\t\t\t\t\ttry {\n\t\t\t\t\t\tconst genome = await getGenome(s.genomeName)\n\t\t\t\t\t\tawait renderPTMLollipop(col, s.cohorts, this, s.isoform, genome)\n\t\t\t\t\t} catch (err: any) {\n\t\t\t\t\t\tcol\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.style('color', '#b91c1c')\n\t\t\t\t\t\t\t.style('padding', '6px')\n\t\t\t\t\t\t\t.text(`Failed to render ${s.organism} \u00B7 ${s.isoform}: ${err?.message || err}`)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\n\t\t\trenderSidebar()\n\t\t\tawait renderRight()\n\t\t}\n\n\t\tif (sections.length) {\n\t\t\trenderPTMSummaryCard(\n\t\t\t\tgrid,\n\t\t\t\t(data.cohorts || []).filter((c: any) => c.PTMType),\n\t\t\t\tthis,\n\t\t\t\t{ onExpandRender: renderPTMSectionsInto }\n\t\t\t)\n\t\t}\n\n\t\t// data-first ordering: greyed no-data placeholders come after every live card.\n\t\t// the PTM card is not in the study-tile registry (its data is site-level, rendered\n\t\t// separately above), so add its placeholder here when the protein has no PTM sites\n\t\tconst ptmCfg = getTileConfig(this, 'ptm')\n\t\tconst placeholders: { title: string; note?: string }[] = missingTiles.map(t => ({ title: t.title }))\n\t\tif (!sections.length && ptmCfg && ptmAssaysConfigured(this)) placeholders.push({ title: ptmCfg.title })\n\t\trenderPlaceholderTiles(grid, placeholders)\n\t}\n}\n\n/** does the dataset configure any PTM (site-level) assay, marked by PTMType */\nfunction ptmAssaysConfigured(self: ProteinView): boolean {\n\tconst organisms = self.app.vocabApi.termdbConfig?.queries?.proteome?.organisms || {}\n\tfor (const org of Object.values(organisms) as any[]) {\n\t\tfor (const assay of Object.values(org?.assays || {}) as any[]) if (assay?.PTMType) return true\n\t}\n\treturn false\n}\n\nfunction renderCohortVolcano(holder: any, data: any, self: ProteinView, ptmSiteCount = 0) {\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\t// site-level PTM fold changes are a different quantity than protein\n\t\t// abundance (confounded by protein level); they live in the PTM track\n\t\tif (cohortData.PTMType) continue\n\t\tconst log2fc = getLog2Ratio(cohortData.foldChange)\n\t\tconst fdr = Number(cohortData.fdr)\n\t\tconst testedN = Number(cohortData.testedN)\n\t\tconst controlN = Number(cohortData.controlN)\n\t\tif (log2fc === null || !Number.isFinite(fdr) || fdr <= 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\tproteinAccession: cohortData.proteinAccession,\n\t\t\tuniqueIdentifier: cohortData.uniqueIdentifier,\n\t\t\tlog2fc,\n\t\t\tfdr,\n\t\t\tscore: -Math.log10(Math.max(fdr, 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 and is listed in the dot's tooltip\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\tif (ptmSiteCount) {\n\t\theader\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.75em')\n\t\t\t.style('color', '#6b7280')\n\t\t\t.text(\n\t\t\t\t`${ptmSiteCount} site-level PTM measurement${ptmSiteCount === 1 ? '' : 's'} excluded \u2014 see the PTM track below.`\n\t\t\t)\n\t}\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 FDR to plot.')\n\t\treturn\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\t// Number of distinct sample sets (cohorts) represented by one legend item.\n\t// Dots are accession-level (one per isoform per cohort), so counting dots\n\t// would overstate; distinct cohorts matches the header's \"sample sets\".\n\tconst getLegendItemSampleCount = (mode: ColorMode | ShapeMode, item: string, dotsToCount: any[] = dots) => {\n\t\tlet matched: any[]\n\t\tif (isCustomGroupKey(item)) {\n\t\t\tconst groupName = getCustomGroupNameFromKey(item)\n\t\t\tmatched = dotsToCount.filter(\n\t\t\t\td => getCustomGroupOfValue(mode as ColorMode, getBaseColorValue(d, mode as ColorMode)) === groupName\n\t\t\t)\n\t\t} else if (isCustomShapeGroupKey(item)) {\n\t\t\tconst groupName = getCustomShapeGroupNameFromKey(item)\n\t\t\tmatched = dotsToCount.filter(\n\t\t\t\td => getCustomShapeGroupOfValue(mode as ShapeMode, getBaseColorValue(d, mode as ColorMode)) === groupName\n\t\t\t)\n\t\t} else {\n\t\t\tmatched = dotsToCount.filter(d => getBaseColorValue(d, mode as ColorMode) === item)\n\t\t}\n\t\t// a sample set's identity is organism+assay+cohort: cohort names repeat\n\t\t// across assays (e.g. whole vs insoluble both have an 'AD' cohort)\n\t\treturn new Set(matched.map(d => `${d.organismName}|${d.assayName}|${d.cohortName}`)).size\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\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 hiddenColor[colorMode].has(colorValue) || hiddenShape[shapeMode].has(shapeValue)\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\tconst columns: any[] = [\n\t\t\t{ label: 'Organism' },\n\t\t\t{ label: 'Assay' },\n\t\t\t{ label: 'Sample Set' },\n\t\t\t{ label: 'Isoform' },\n\t\t\t{ label: 'log\u2082(FC)', sortable: true },\n\t\t\t{ label: 'FDR', sortable: true }\n\t\t]\n\t\tconst rows = clusterDots.map(d => [\n\t\t\t{ value: d.organismName || '' },\n\t\t\t{ value: d.assayName || '' },\n\t\t\t{ value: d.cohortName || '' },\n\t\t\t{ value: d.uniqueIdentifier || '' },\n\t\t\t{ value: roundValue(d.log2fc, 3) },\n\t\t\t{ value: d.fdr.toExponential(2) }\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')\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(FDR)')\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\ttbl.addRow('Isoform', d.uniqueIdentifier)\n\t\ttbl.addRow('log2 fold change', roundValue(d.log2fc, 3))\n\t\ttbl.addRow('FDR', d.fdr.toExponential(2))\n\t\ttbl.addRow('-log10(FDR)', 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}\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// exclude dots hidden by shape filtering so legend counts reflect it\n\t\t\tconst dotsVisibleByShape = dots.filter(d => !hiddenShape[shapeMode].has(getShapeValueByMode(d, shapeMode)))\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}, ${sampleCount} sample set${sampleCount === 1 ? '' : 's'}`)\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// exclude dots hidden by color filtering so legend counts reflect it\n\t\t\tconst dotsVisibleByColor = dots.filter(d => !hiddenColor[colorMode].has(getColorValueByMode(d, colorMode)))\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}, ${sampleCount} sample set${sampleCount === 1 ? '' : 's'}`)\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\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 fdr = Number(ptm.fdr)\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\tfdr,\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.fdr)\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: 'FDR', 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\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
+ }