@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.tiles.ts"],
4
+ "sourcesContent": ["import { Menu, table2col } from '#dom'\nimport { axisstyle } from '#src/client'\nimport { dofetch3 } from '#common/dofetch'\nimport { cohortMatches } from './proteome.catalog'\nimport type { DapConcordance, ProteomeCohortMatch } from '#types'\nimport {\n\tloadBrainAssets,\n\trenderBrainSvg,\n\tmakeDiseaseTabs,\n\tmakeBrainFcScale,\n\tbrainFillByRegion,\n\tbrainTooltipByRegion,\n\tBRAIN_P_THRESHOLD,\n\ttype BrainAssets\n} from './brainRegions.svg'\nimport { axisBottom, axisLeft, scaleLinear, scaleBand, scalePoint, scaleSqrt, line as d3line, select } from 'd3'\nimport { NumericModes } from '#shared/terms.js'\nimport { roundValue } from '#shared/roundValue.js'\n\n/*********************************************************************\n * proteinView study tiles\n *\n * Each tile answers one question about the searched protein and renders\n * only when the underlying study data supports it (tile-per-plot design).\n * Nothing about the dataset is hardcoded here: the tile list (titles,\n * order, which cohorts feed which tile) and the vocabulary (diseases,\n * models, cell types) come from queries.proteome.proteinView in the\n * dataset file; cohort metadata (disease/model/cellType/ageGroup/\n * brainRegion) from the per-cohort `catalog` blocks that termdb.config\n * ships to the client. This file only holds the renderers.\n *\n * Tiles are gene-level: when a cohort measured several isoforms\n * (accessions), the most significant one represents the cohort, matching\n * how the source papers report proteins (protein-group level, by gene\n * symbol). The full per-isoform detail stays in the overview volcano and\n * the PTM track.\n *********************************************************************/\n\n/************ dataset config accessors ************/\n\ntype PairSide = ProteomeCohortMatch & { label: string; ageVaries?: boolean }\nexport type TileCfg = {\n\tkey: string\n\ttitle: string\n\tsubtitle: string\n\tcohortMatch?: ProteomeCohortMatch\n\txLabel?: string\n\tyLabel?: string\n\tpairs?: { key: string; label: string; x: PairSide; y: PairSide }[]\n\t/** key of another tile whose entries are the reference side of a paired tile\n\t * (e.g. the whole-proteome tile for the insoluble dumbbell), matched by cohort name */\n\treferenceTile?: string\n\tdefaultAge?: string\n\tnote?: string\n}\n\nexport function getProteinViewConfig(self: any): any {\n\treturn self?.app?.vocabApi?.termdbConfig?.queries?.proteome?.proteinView || {}\n}\nexport function getTileConfigs(self: any): TileCfg[] {\n\treturn getProteinViewConfig(self).tiles || []\n}\nexport function getTileConfig(self: any, key: string): TileCfg | undefined {\n\treturn getTileConfigs(self).find(t => t.key === key)\n}\n// disease code \u2192 {name,label?,specificityControl?}; key order = axis order\nfunction diseaseCfg(self: any): { [code: string]: { name: string; label?: string; specificityControl?: boolean } } {\n\treturn getProteinViewConfig(self).diseases || {}\n}\nconst diseaseOrder = (self: any) => Object.keys(diseaseCfg(self))\nconst diseaseLabel = (self: any, d: string) => diseaseCfg(self)[d]?.label || d\nconst isSpecificityControl = (self: any, d: string) => !!diseaseCfg(self)[d]?.specificityControl\nconst modelOrder = (self: any): string[] => Object.keys(getProteinViewConfig(self).models || {})\nconst modelColor = (self: any, m: string) => getProteinViewConfig(self).models?.[m]?.color || SINGLE_MODEL_COLOR\nconst cellTypeCfg = (self: any): { [ct: string]: { note?: string } } => getProteinViewConfig(self).cellTypes || {}\nconst proteomeLabel = (self: any, organism: string, assay: string) =>\n\tself?.app?.vocabApi?.termdbConfig?.queries?.proteome?.organisms?.[organism]?.assays?.[assay]?.proteomeLabel || assay\n\n// sort keys by their position in a configured order; unknown keys keep\n// their relative order after the known ones\nexport function orderBy(keys: string[], order: string[]) {\n\tconst rank = (k: string) => (order.indexOf(k) === -1 ? order.length : order.indexOf(k))\n\treturn [...keys].sort((a, b) => rank(a) - rank(b))\n}\n\nconst SIG_P = 0.05\n\n// leading integer of an age-group label (\"6 months\" \u2192 6); null when absent\nexport function parseAge(ageGroup: string | undefined): number | null {\n\tconst n = parseInt(ageGroup || '')\n\treturn Number.isFinite(n) ? n : null\n}\nconst byAge = (a: string, b: string) => (parseAge(a) ?? 0) - (parseAge(b) ?? 0)\n\n// memoized fetch shared by the tile faces and their expanded views: one\n// in-flight promise per key; a rejection is not cached so a retry refetches\nconst fetchCache = new Map<string, Promise<any>>()\nfunction cachedFetch<T>(key: string, load: () => Promise<T>): Promise<T> {\n\tif (!fetchCache.has(key)) {\n\t\tconst p = load()\n\t\tp.catch(() => fetchCache.delete(key))\n\t\tfetchCache.set(key, p)\n\t}\n\treturn fetchCache.get(key)!\n}\nconst vocabKey = (self: any) => `${self.app.opts.state.vocab.genome}|${self.app.opts.state.vocab.dslabel}`\n\n// geometry scaling: tile faces render compact, the expanded view large.\n// scaleX compresses widths further than heights so charts fit narrow cards;\n// it defaults to scale when unset.\nexport type TileRenderOpts = { scale?: number; scaleX?: number; expanded?: boolean }\nconst TILE_FACE_SCALE = 0.67\nconst TILE_FACE_SCALE_X = 0.45\nconst EXPANDED_SCALE = 1.7\n// uniform card footprint so the grid reads as even rows\nconst CARD_W = 230\nconst CARD_MIN_H = 235\n\nconst SINGLE_MODEL_COLOR = '#6b7280'\nconst ND_COLOR = '#4263eb'\nconst PSY_COLOR = '#9ca3af'\nconst WHOLE_COLOR = '#2166ac'\nconst INSOLUBLE_COLOR = '#b2182b'\nconst REFERENCE_COLOR = '#111827'\n// diverging fold-change colors, same semantics as cellTypeBubbleHeatmap\nconst FC_NEG_COLOR = '#762a83'\nconst FC_ZERO_COLOR = '#f7f7f7'\nconst FC_POS_COLOR = '#2166ac'\n\nexport function getLog2Ratio(foldChange: number) {\n\tif (!Number.isFinite(foldChange) || foldChange <= 0) return null\n\treturn Math.log2(foldChange)\n}\n\nexport function launchViolinPlot(\n\tself: any,\n\torganismName: string,\n\tassayName: string,\n\tcohortName: string,\n\tisoform: string\n) {\n\tconst selectedProtein = self.state.config?.tw?.term\n\tif (!selectedProtein) throw new Error('proteinView: selected protein term is missing')\n\n\tconst action: any = {\n\t\ttype: 'plot_create',\n\t\tconfig: {\n\t\t\tchartType: 'summary'\n\t\t}\n\t}\n\taction.config.assayCohortTitle = `${organismName} ${assayName}: ${cohortName}`\n\taction.config.proteomeDetails = { organism: organismName, assay: assayName, cohort: cohortName }\n\n\tconst termdbConfig = self.app.vocabApi.termdbConfig\n\tconst proteomeOverlayTerm = termdbConfig?.queries?.proteome?.organisms?.[organismName]?.overlayTerm\n\tconst t = structuredClone(selectedProtein)\n\tt.name = `${t.name}: ${isoform}`\n\tt.dataTypeDetails = { organism: organismName, assay: assayName, cohort: cohortName }\n\taction.config.term = { term: t, q: { mode: NumericModes.continuous } }\n\n\tif (proteomeOverlayTerm) {\n\t\taction.config.term2 = { term: structuredClone(proteomeOverlayTerm), q: {} }\n\t}\n\n\tself.app.dispatch(action)\n}\n\nexport type TileEntry = {\n\torganism: string\n\tassayName: string\n\tcohortName: string\n\tdisease?: string\n\tuniqueIdentifier: string\n\tproteinAccession: string\n\tlog2fc: number | null\n\t/** FDR (BH-adjusted p) from the cohort's DAP file */\n\tfdr: number | null\n\ttestedN: number\n\tcontrolN: number\n\tisoformCount: number // how many accessions this cohort measured; entry is the most significant\n\tcatalog: any\n\t// set only for PTM-site entries (the PTM summary card face)\n\tptmType?: string\n\tmodSites?: string\n}\n\nexport type TileData = {\n\t/** tile key \u2192 its cohort entries, routed by each tile's cohortMatch */\n\tbyTile: { [tileKey: string]: TileEntry[] }\n\tisoformCount: number\n\tptmSiteCount: number\n\tcohortCount: number\n}\n\nconst entries = (td: TileData, key: string): TileEntry[] => td.byTile[key] || []\n\n// per-cohort catalog metadata (disease/model/cellType/ageGroup/\u2026) that\n// termdb.config ships to the client for the studyCatalog plot\nexport function catalogForEntry(self: any, e: any) {\n\treturn self.app.vocabApi.termdbConfig?.queries?.proteome?.organisms?.[e.organism]?.assays?.[e.assayName]?.cohorts?.[\n\t\te.cohortName\n\t]?.catalog\n}\n\n// One representative (most significant, valid fold change) entry per\n// cohort; the source papers report at protein-group level, so tiles do too.\nexport function prepareTileData(data: any, self: any): TileData {\n\tconst catalogFor = (e: any) => catalogForEntry(self, e)\n\n\tconst accessions = new Set<string>()\n\tlet ptmSiteCount = 0\n\n\t// collapse to one representative entry per (organism, assay, cohort)\n\tconst byCohort = new Map<string, { best: any; count: number }>()\n\tfor (const e of data?.cohorts || []) {\n\t\tif (e.PTMType) {\n\t\t\tptmSiteCount++\n\t\t\tcontinue\n\t\t}\n\t\taccessions.add(e.proteinAccession)\n\t\tconst log2fc = getLog2Ratio(e.foldChange)\n\t\tif (log2fc === null) continue\n\t\tconst key = `${e.organism}|${e.assayName}|${e.cohortName}`\n\t\tconst p = Number(e.fdr)\n\t\tconst pRank = Number.isFinite(p) && p > 0 ? p : Infinity\n\t\tconst cur = byCohort.get(key)\n\t\tif (!cur) byCohort.set(key, { best: { e, pRank }, count: 1 })\n\t\telse {\n\t\t\tcur.count++\n\t\t\tif (pRank < cur.best.pRank) cur.best = { e, pRank }\n\t\t}\n\t}\n\n\tconst tiles = getTileConfigs(self)\n\tconst td: TileData = {\n\t\tbyTile: Object.fromEntries(tiles.map(t => [t.key, []])),\n\t\tisoformCount: accessions.size,\n\t\tptmSiteCount,\n\t\tcohortCount: byCohort.size\n\t}\n\n\tfor (const { best, count } of byCohort.values()) {\n\t\tconst e = best.e\n\t\tconst catalog = catalogFor(e)\n\t\tif (!catalog) continue // cohort not in the study catalog; volcano still shows it\n\t\tconst p = Number(e.fdr)\n\t\tconst entry: TileEntry = {\n\t\t\torganism: e.organism,\n\t\t\tassayName: e.assayName,\n\t\t\tcohortName: e.cohortName,\n\t\t\tdisease: catalog.disease || e.disease,\n\t\t\tuniqueIdentifier: e.uniqueIdentifier,\n\t\t\tproteinAccession: e.proteinAccession,\n\t\t\tlog2fc: getLog2Ratio(e.foldChange),\n\t\t\tfdr: Number.isFinite(p) && p > 0 ? p : null,\n\t\t\ttestedN: Number(e.testedN) || 0,\n\t\t\tcontrolN: Number(e.controlN) || 0,\n\t\t\tisoformCount: count,\n\t\t\tcatalog\n\t\t}\n\t\t// first tile (in dataset order) whose rule the cohort satisfies\n\t\tconst tile = tiles.find(t => cohortMatches(t.cohortMatch, e.organism, e.assayName, catalog))\n\t\tif (tile) td.byTile[tile.key].push(entry)\n\t}\n\n\treturn td\n}\n\n/************ card + interaction scaffolding ************/\n\n// outer card width (content CARD_W + 2\u00D712px padding + 2\u00D71px border); the\n// grid column track, so cards line up in even columns\nconst CARD_OUTER_W = CARD_W + 26\n\nexport function makeTileGrid(holder: any) {\n\t// CSS grid with fixed column tracks: an expanded card spans every column\n\t// (grid-column 1 / -1) and `dense` packing lets the cards after it back-fill\n\t// the gap it leaves in the row above, so the rest of the grid shifts around\n\t// it. Default align-items (stretch) equalizes card heights within a row.\n\t// white-space is reset because the mass plot holder sets nowrap (for\n\t// horizontally-scrolling plots), which would keep card text from wrapping.\n\treturn holder\n\t\t.append('div')\n\t\t.style('display', 'grid')\n\t\t.style('grid-template-columns', `repeat(auto-fill, ${CARD_OUTER_W}px)`)\n\t\t.style('grid-auto-flow', 'row dense')\n\t\t.style('gap', '14px')\n\t\t.style('margin-top', '10px')\n\t\t.style('white-space', 'normal')\n}\n\n/** in-place expansion of a tile card: render() fills the expanded body each\n * time the card opens (so it reflects the current data); `open` starts the\n * card expanded (to keep a tile open across re-renders) and onToggle reports\n * every open/close so the caller can remember which tile is open */\nexport type TileExpand = {\n\trender: (holder: any) => void | Promise<void>\n\topen?: boolean\n\tonToggle?: (open: boolean) => void\n}\n\n// the one expanded card per grid, as its collapse function\nconst expandedInGrid = new WeakMap<Element, () => void>()\n\n// clicks on these never expand a card: they belong to controls on the face\nconst NO_EXPAND_SELECTOR = 'button,select,input,textarea,label,a,[role=\"button\"],[role=\"tab\"],[data-no-expand]'\n\n/** remember which tile of a plot instance is expanded, so a re-render (new\n * filter, refetch, cutoff change) reopens it; one expanded tile per plot */\nexport function tileExpandState(self: any, key: string): Pick<TileExpand, 'open' | 'onToggle'> {\n\treturn {\n\t\topen: self.expandedTileKey === key,\n\t\tonToggle: open => {\n\t\t\tif (open) self.expandedTileKey = key\n\t\t\telse if (self.expandedTileKey === key) self.expandedTileKey = null\n\t\t}\n\t}\n}\n\nexport function makeTileCard(\n\tgrid: any,\n\topts: {\n\t\ttitle: string\n\t\tsubtitle?: string\n\t\tfullWidth?: boolean\n\t\t// fixed footprint (CARD_W \u00D7 \u2265CARD_MIN_H) so tile cards line up evenly\n\t\tuniform?: boolean\n\t\t// greyed placeholder card (tile exists in the atlas but has no data here)\n\t\tdisabled?: boolean\n\t\t// when set, clicking the card (or its \u2922 button) expands it in place to the\n\t\t// full grid width; \u2921 collapses it back to the face\n\t\texpand?: TileExpand\n\t}\n) {\n\tconst card = grid\n\t\t.append('div')\n\t\t.style('border', opts.disabled ? '1px dashed #e5e7eb' : '1px solid #e5e7eb')\n\t\t.style('border-radius', '8px')\n\t\t.style('padding', '10px 12px')\n\t\t.style('background', opts.disabled ? '#f9fafb' : '#fff')\n\t\t.style('min-width', '0')\n\tif (opts.fullWidth) card.style('grid-column', '1 / -1')\n\tif (opts.uniform) {\n\t\tcard\n\t\t\t.style('width', `${CARD_W}px`)\n\t\t\t.style('min-height', `${CARD_MIN_H}px`)\n\t\t\t.style('display', 'flex')\n\t\t\t.style('flex-direction', 'column')\n\t}\n\n\tconst header = card\n\t\t.append('div')\n\t\t.style('display', 'flex')\n\t\t.style('align-items', 'baseline')\n\t\t.style('gap', '8px')\n\t\t.style('flex-wrap', 'wrap')\n\theader\n\t\t.append('span')\n\t\t.style('font-weight', '600')\n\t\t.style('font-size', '.9em')\n\t\t.style('min-width', '0') // let long titles wrap instead of overflowing the card\n\t\t.style('color', opts.disabled ? '#9ca3af' : '#111827')\n\t\t.text(opts.title)\n\tif (opts.subtitle) {\n\t\tcard\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.style('margin', '2px 0 4px 0')\n\t\t\t.text(opts.subtitle)\n\t}\n\tconst face = card.append('div')\n\tconst expand = opts.expand\n\tif (!expand) return face\n\n\tconst expandedBody = card.append('div').style('display', 'none').style('overflow-x', 'auto')\n\tconst gridNode = grid.node() as Element\n\tlet isOpen = false\n\n\tconst toggleBtn = header\n\t\t.append('span')\n\t\t.attr('role', 'button')\n\t\t.attr('tabindex', '0')\n\t\t.style('margin-left', 'auto')\n\t\t.style('cursor', 'pointer')\n\t\t.style('color', '#9ca3af')\n\t\t.style('font-size', '1em')\n\t\t.style('line-height', '1')\n\t\t.on('mouseover', function (this: any) {\n\t\t\tselect(this).style('color', '#374151')\n\t\t})\n\t\t.on('mouseout', function (this: any) {\n\t\t\tselect(this).style('color', '#9ca3af')\n\t\t})\n\tconst setToggleBtn = () =>\n\t\ttoggleBtn\n\t\t\t.text(isOpen ? '\u2921' : '\u2922')\n\t\t\t.attr('title', isOpen ? 'Collapse' : 'Expand')\n\t\t\t.attr('aria-label', `${isOpen ? 'Collapse' : 'Expand'} ${opts.title}`)\n\t\t\t.attr('aria-expanded', String(isOpen))\n\tsetToggleBtn()\n\n\tconst collapse = () => {\n\t\tif (!isOpen) return\n\t\tisOpen = false\n\t\tif (expandedInGrid.get(gridNode) === collapse) expandedInGrid.delete(gridNode)\n\t\tconst bodyNode = expandedBody.node() as HTMLElement\n\t\t// detach only the direct children: an expanded view may re-attach a kept-alive\n\t\t// subtree on the next open (selectAll('*') would also take apart its descendants)\n\t\tbodyNode.replaceChildren()\n\t\texpandedBody.style('display', 'none')\n\t\tface.style('display', null)\n\t\tcard.style('grid-column', opts.fullWidth ? '1 / -1' : null).style('cursor', 'pointer')\n\t\tif (opts.uniform) card.style('width', `${CARD_W}px`).style('min-height', `${CARD_MIN_H}px`)\n\t\tsetToggleBtn()\n\t\texpand.onToggle?.(false)\n\t}\n\tconst open = (scroll: boolean) => {\n\t\tif (isOpen) return\n\t\texpandedInGrid.get(gridNode)?.()\n\t\tisOpen = true\n\t\texpandedInGrid.set(gridNode, collapse)\n\t\tface.style('display', 'none')\n\t\tcard.style('grid-column', '1 / -1').style('width', null).style('min-height', null).style('cursor', null)\n\t\texpandedBody.style('display', null)\n\t\t;(expandedBody.node() as HTMLElement).replaceChildren()\n\t\tsetToggleBtn()\n\t\texpand.onToggle?.(true)\n\t\tconst holder = expandedBody.append('div').style('padding', '4px 4px 0 4px')\n\t\ttry {\n\t\t\tconst p = expand.render(holder)\n\t\t\tif (p instanceof Promise) {\n\t\t\t\tconst wait = holder.append('div').style('color', '#6b7280').style('font-size', '.85em').text('Loading\u2026')\n\t\t\t\tp.catch(err => renderTileError(holder, err, null)).finally(() => wait.remove())\n\t\t\t}\n\t\t} catch (err: any) {\n\t\t\trenderTileError(holder, err, null)\n\t\t}\n\t\tif (scroll) (card.node() as HTMLElement).scrollIntoView?.({ block: 'nearest', behavior: 'smooth' })\n\t}\n\n\ttoggleBtn\n\t\t.on('click', (event: MouseEvent) => {\n\t\t\tevent.stopPropagation()\n\t\t\tif (isOpen) collapse()\n\t\t\telse open(true)\n\t\t})\n\t\t.on('keydown', (event: KeyboardEvent) => {\n\t\t\tif (event.key === 'Enter' || event.key === ' ') {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tif (isOpen) collapse()\n\t\t\t\telse open(true)\n\t\t\t}\n\t\t})\n\t// clicking anywhere on a collapsed card expands it, except on face controls\n\t// (tabs, selects, search boxes) and data marks that stop propagation\n\tcard.style('cursor', 'pointer').on('click', (event: MouseEvent) => {\n\t\tif (isOpen) return\n\t\tconst t = event.target as Element | null\n\t\tif (t?.closest?.(NO_EXPAND_SELECTOR)) return\n\t\topen(true)\n\t})\n\t// start expanded once the caller has drawn the face (faces measure their own\n\t// layout, which needs them visible)\n\tif (expand.open) queueMicrotask(() => open(false))\n\treturn face\n}\n\nconst tileClickMenu = new Menu({ padding: '0px' })\n\nfunction entryTipTable(entry: TileEntry, holder: any) {\n\tconst tbl = table2col({ holder: holder.append('table') })\n\ttbl.addRow('Sample set', entry.cohortName)\n\tconst c = entry.catalog || {}\n\tif (entry.disease) tbl.addRow('Disease', entry.disease)\n\tif (c.model) tbl.addRow('Model', c.model)\n\tif (c.cellType) tbl.addRow('Cell type', c.cellType)\n\tif (c.ageGroup) tbl.addRow('Age group', c.ageGroup)\n\tif (c.sampleSource) tbl.addRow('Sample source', c.sampleSource)\n\tif (entry.ptmType) tbl.addRow('PTM type', entry.ptmType)\n\tif (entry.modSites) tbl.addRow('Modified site', entry.modSites)\n\ttbl.addRow('Assay', entry.assayName)\n\ttbl.addRow('log2 fold change', entry.log2fc === null ? 'NA' : roundValue(entry.log2fc, 3))\n\ttbl.addRow('FDR', entry.fdr === null ? 'NA' : entry.fdr.toExponential(2))\n\ttbl.addRow('Case samples', entry.testedN)\n\ttbl.addRow('Control samples', entry.controlN)\n\ttbl.addRow('Protein accession', entry.proteinAccession)\n\tif (entry.isoformCount > 1) tbl.addRow('Note', `most significant of ${entry.isoformCount} isoforms`)\n}\n\n// hover tooltip + click menu (violin launch) for a tile data point\nfunction attachEntryBehavior(shape: any, entry: TileEntry, self: any) {\n\tshape\n\t\t.style('cursor', 'pointer')\n\t\t.on('mouseover', (event: MouseEvent) => {\n\t\t\tself.dom.tip.clear()\n\t\t\tentryTipTable(entry, self.dom.tip.d)\n\t\t\tself.dom.tip.show(event.clientX, event.clientY)\n\t\t})\n\t\t.on('mouseout', () => self.dom.tip.hide())\n\t\t.on('click', (event: MouseEvent) => {\n\t\t\t// a data point opens its own menu; it must not also expand the card\n\t\t\tevent.stopPropagation()\n\t\t\tself.dom.tip.hide()\n\t\t\ttileClickMenu.clear()\n\t\t\tconst div = tileClickMenu.d.append('div')\n\t\t\tentryTipTable(entry, div.append('div').style('padding', '5px'))\n\t\t\tdiv\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t.text('Violin plot')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\ttileClickMenu.hide()\n\t\t\t\t\tlaunchViolinPlot(self, entry.organism, entry.assayName, entry.cohortName, entry.uniqueIdentifier)\n\t\t\t\t})\n\t\t\ttileClickMenu.show(event.clientX, event.clientY)\n\t\t})\n}\n\nconst isSig = (e: TileEntry) => e.fdr !== null && e.fdr < SIG_P\n\nfunction drawMarker(g: any, x: number, y: number, color: string, sig: boolean, r = 4.5) {\n\treturn g\n\t\t.append('circle')\n\t\t.attr('cx', x)\n\t\t.attr('cy', y)\n\t\t.attr('r', r)\n\t\t.attr('fill', sig ? color : '#fff')\n\t\t.attr('fill-opacity', sig ? 0.9 : 1)\n\t\t.attr('stroke', color)\n\t\t.attr('stroke-width', 1.5)\n}\n\n// y (or x) domain for log2FC values: always includes 0, padded\nfunction fcDomain(values: number[]): [number, number] {\n\tlet min = Math.min(0, ...values)\n\tlet max = Math.max(0, ...values)\n\tconst span = Math.max(0.4, max - min)\n\tconst pad = span * 0.15\n\tif (min < 0) min -= pad\n\tmax += pad\n\tif (min === 0) min = -span * 0.05 // keep the zero line off the plot edge\n\treturn [min, max]\n}\n\nfunction addSigFootnote(body: any) {\n\tbody\n\t\t.append('div')\n\t\t.style('font-size', '.7em')\n\t\t.style('color', '#9ca3af')\n\t\t.style('margin-top', '2px')\n\t\t.text(`filled: FDR < ${SIG_P}; hollow: not significant`)\n}\n\nfunction drawZeroLine(g: any, x1: number, y1: number, x2: number, y2: number) {\n\tg.append('line')\n\t\t.attr('x1', x1)\n\t\t.attr('y1', y1)\n\t\t.attr('x2', x2)\n\t\t.attr('y2', y2)\n\t\t.attr('stroke', 'black')\n\t\t.attr('stroke-dasharray', '4 3')\n\t\t.attr('stroke-opacity', 0.35)\n}\n\nfunction styledAxis(g: any, axis: any, tickFontSize?: string | null) {\n\tconst a = g.call(axis)\n\taxisstyle({ axis: a, color: 'black', showline: true })\n\t// compact tile faces shrink tick labels so categorical axes don't collide\n\tif (tickFontSize) a.selectAll('text').style('font-size', tickFontSize)\n\treturn a\n}\n\n// slant categorical x-tick labels on very narrow charts so they don't collide\nfunction rotateXTicks(axisG: any) {\n\taxisG\n\t\t.selectAll('text')\n\t\t.attr('transform', 'rotate(-38)')\n\t\t.attr('text-anchor', 'end')\n\t\t.attr('dx', '-2px')\n\t\t.attr('dy', '5px')\n}\n\nfunction yAxisTitle(svg: any, innerH: number, marginTop: number, text: string) {\n\tsvg\n\t\t.append('text')\n\t\t.attr('transform', `translate(11,${marginTop + innerH / 2}) rotate(-90)`)\n\t\t.attr('text-anchor', 'middle')\n\t\t.style('font-size', '11px')\n\t\t.style('fill', '#374151')\n\t\t.text(text)\n}\n\n/************ tile renderers ************/\n\n// Tile \u2014 cross-disease profile: lollipop of log2FC per disease;\n// the blue side answers \"this protein changes in which diseases?\"\n// BD and SCZ are psychiatric disorders, while the others are neurodegenerative diseases.\n// the grey side (diseases flagged specificityControl in the dataset config,\n// e.g. psychiatric controls) answers \"is the change neurodegeneration-specific or a generic brain-disease signal?\"\nfunction renderCrossDiseaseTile(body: any, td: TileData, self: any, cfg: TileCfg, opts: TileRenderOpts = {}) {\n\tconst k = opts.scale || 1\n\tconst kx = opts.scaleX ?? k\n\tconst mr = 4.5 * Math.sqrt(k)\n\tconst tickFont = k < 1 ? '8.5px' : null\n\tconst byDisease = new Map<string, TileEntry>()\n\t// several cohorts may share a disease: show the most significant one and say so\n\tconst multiCohort = new Set<string>()\n\tfor (const e of entries(td, cfg.key)) {\n\t\tconst d = e.disease || e.cohortName\n\t\tconst cur = byDisease.get(d)\n\t\tif (cur) multiCohort.add(d)\n\t\tif (!cur || (e.fdr ?? Infinity) < (cur.fdr ?? Infinity)) byDisease.set(d, e)\n\t}\n\tconst diseases = orderBy([...byDisease.keys()], diseaseOrder(self))\n\tconst isControl = (d: string) => isSpecificityControl(self, d)\n\n\tconst margin = { top: 12, right: 10, bottom: 34, left: 46 }\n\tconst innerW = Math.max(200, diseases.length * 38) * kx\n\tconst innerH = 150 * k\n\tconst svg = body\n\t\t.append('svg')\n\t\t.attr('width', innerW + margin.left + margin.right)\n\t\t.attr('height', innerH + margin.top + margin.bottom)\n\tconst g = svg.append('g').attr('transform', `translate(${margin.left},${margin.top})`)\n\n\tconst x = scaleBand().domain(diseases).range([0, innerW]).padding(0.4)\n\tconst y = scaleLinear()\n\t\t.domain(fcDomain(diseases.map(d => byDisease.get(d)!.log2fc as number)))\n\t\t.range([innerH, 0])\n\n\tconst xAxisG = styledAxis(g.append('g').attr('transform', `translate(0,${innerH})`), axisBottom(x), tickFont)\n\tif (kx < 0.6) rotateXTicks(xAxisG)\n\tstyledAxis(g.append('g'), axisLeft(y).ticks(4), tickFont)\n\tdrawZeroLine(g, 0, y(0), innerW, y(0))\n\tyAxisTitle(svg, innerH, margin.top, 'log2FC vs control')\n\n\t// separator before the psychiatric controls\n\tconst firstPsy = diseases.findIndex(isControl)\n\tif (firstPsy > 0) {\n\t\tconst xSep = (x(diseases[firstPsy - 1])! + x.bandwidth() + x(diseases[firstPsy])!) / 2\n\t\tg.append('line')\n\t\t\t.attr('x1', xSep)\n\t\t\t.attr('x2', xSep)\n\t\t\t.attr('y1', 0)\n\t\t\t.attr('y2', innerH)\n\t\t\t.attr('stroke', '#d1d5db')\n\t\t\t.attr('stroke-dasharray', '2 3')\n\t\t// the label needs more room than a narrow face has; the muted grey\n\t\t// dots still mark the group, and the expanded view spells it out\n\t\tif (kx >= 0.6) {\n\t\t\tg.append('text')\n\t\t\t\t.attr('x', (xSep + innerW) / 2)\n\t\t\t\t.attr('y', 9)\n\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t.style('font-size', '9px')\n\t\t\t\t.style('fill', '#9ca3af')\n\t\t\t\t.text(getProteinViewConfig(self).specificityControlLabel || 'controls')\n\t\t}\n\t}\n\n\tfor (const d of diseases) {\n\t\tconst e = byDisease.get(d)!\n\t\tconst cx = x(d)! + x.bandwidth() / 2\n\t\tconst color = isControl(d) ? PSY_COLOR : ND_COLOR\n\t\tg.append('line')\n\t\t\t.attr('x1', cx)\n\t\t\t.attr('x2', cx)\n\t\t\t.attr('y1', y(0))\n\t\t\t.attr('y2', y(e.log2fc as number))\n\t\t\t.attr('stroke', color)\n\t\t\t.attr('stroke-width', 1.5)\n\t\tattachEntryBehavior(drawMarker(g, cx, y(e.log2fc as number), color, isSig(e), mr), e, self)\n\t}\n\n\t// relabel ticks that have a nicer display name\n\tg.selectAll('text').each(function (this: any) {\n\t\tconst t = (this as SVGTextElement).textContent || ''\n\t\tconst l = diseaseLabel(self, t)\n\t\tif (l !== t) (this as SVGTextElement).textContent = l\n\t})\n\n\taddSigFootnote(body)\n\tif (multiCohort.size) {\n\t\tbody\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.7em')\n\t\t\t.style('color', '#9ca3af')\n\t\t\t.text(`${[...multiCohort].map(d => diseaseLabel(self, d)).join(', ')}: several cohorts, most significant shown`)\n\t}\n\tif (opts.expanded) {\n\t\tbody\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.style('margin-top', '4px')\n\t\t\t.style('max-width', `${innerW + margin.left + margin.right}px`)\n\t\t\t.text(diseases.map(d => `${diseaseLabel(self, d)} = ${diseaseCfg(self)[d]?.name || d}`).join(' \u00B7 '))\n\t}\n}\n\n// Tile 2 \u2014 whole vs insoluble dumbbell:\n// answers: \"Does this protein accumulate in the insoluble/aggregated fraction beyond any change in its total abundance (is it aggregating)?\"\n// Red far to the right of blue \u2192 the protein piles up in the insoluble fraction much more than its total level rises: the aggregation signature.\nfunction renderInsolubleTile(body: any, td: TileData, self: any, cfg: TileCfg, opts: TileRenderOpts = {}) {\n\tconst k = opts.scale || 1\n\tconst kx = opts.scaleX ?? k\n\tconst mr = 4.5 * Math.sqrt(k)\n\tconst tickFont = k < 1 ? '8.5px' : null\n\tconst wholeByCohort = new Map<string, TileEntry>()\n\t// the reference (whole proteome) side comes from the tile named by cfg.referenceTile\n\tif (cfg.referenceTile) for (const e of entries(td, cfg.referenceTile)) wholeByCohort.set(e.cohortName, e)\n\tconst insol = entries(td, cfg.key)\n\tconst rows = orderBy([...new Set(insol.map(e => e.cohortName))], diseaseOrder(self))\n\n\tconst pairs = rows.map(c => ({\n\t\tcohortName: c,\n\t\twhole: wholeByCohort.get(c) || null,\n\t\tinsoluble: insol.find(e => e.cohortName === c) || null\n\t}))\n\t// legend labels from the assays' proteomeLabel in the dataset config\n\tconst wholeEntry = pairs.find(p => p.whole)?.whole\n\tconst labelOf = (e: TileEntry | null | undefined, fallback: string) =>\n\t\te ? proteomeLabel(self, e.organism, e.assayName) : fallback\n\n\tconst margin = { top: 24, right: 12, bottom: 34, left: 46 }\n\tconst innerW = 240 * kx\n\tconst innerH = Math.max(90, rows.length * 30 * k)\n\tconst svg = body\n\t\t.append('svg')\n\t\t.attr('width', innerW + margin.left + margin.right)\n\t\t.attr('height', innerH + margin.top + margin.bottom)\n\tconst g = svg.append('g').attr('transform', `translate(${margin.left},${margin.top})`)\n\n\tconst values: number[] = []\n\tfor (const p of pairs) {\n\t\tif (p.whole) values.push(p.whole.log2fc as number)\n\t\tif (p.insoluble) values.push(p.insoluble.log2fc as number)\n\t}\n\tconst x = scaleLinear().domain(fcDomain(values)).range([0, innerW])\n\tconst y = scaleBand().domain(rows).range([0, innerH]).padding(0.4)\n\n\tstyledAxis(g.append('g').attr('transform', `translate(0,${innerH})`), axisBottom(x).ticks(4), tickFont)\n\tstyledAxis(g.append('g'), axisLeft(y), tickFont)\n\tdrawZeroLine(g, x(0), 0, x(0), innerH)\n\tsvg\n\t\t.append('text')\n\t\t.attr('x', margin.left + innerW / 2)\n\t\t.attr('y', margin.top + innerH + 30)\n\t\t.attr('text-anchor', 'middle')\n\t\t.style('font-size', '11px')\n\t\t.style('fill', '#374151')\n\t\t.text('log2FC vs control')\n\n\t// inline legend\n\tconst legend = g.append('g').attr('transform', `translate(0,-12)`)\n\tfor (const [i, item] of [\n\t\t{\n\t\t\tlabel: labelOf(wholeEntry, getTileConfig(self, cfg.referenceTile || '')?.title || 'reference'),\n\t\t\tcolor: WHOLE_COLOR\n\t\t},\n\t\t{ label: labelOf(insol[0], cfg.cohortMatch?.assay || cfg.title), color: INSOLUBLE_COLOR }\n\t].entries()) {\n\t\tconst lx = i * (kx < 0.6 ? 58 : 80)\n\t\tlegend.append('circle').attr('cx', lx).attr('cy', 0).attr('r', 4).attr('fill', item.color).attr('fill-opacity', 0.9)\n\t\tlegend\n\t\t\t.append('text')\n\t\t\t.attr('x', lx + 8)\n\t\t\t.attr('y', 3)\n\t\t\t.style('font-size', '10px')\n\t\t\t.style('fill', '#374151')\n\t\t\t.text(item.label)\n\t}\n\n\tfor (const p of pairs) {\n\t\tconst cy = y(p.cohortName)! + y.bandwidth() / 2\n\t\tif (p.whole && p.insoluble) {\n\t\t\tg.append('line')\n\t\t\t\t.attr('x1', x(p.whole.log2fc as number))\n\t\t\t\t.attr('x2', x(p.insoluble.log2fc as number))\n\t\t\t\t.attr('y1', cy)\n\t\t\t\t.attr('y2', cy)\n\t\t\t\t.attr('stroke', '#9ca3af')\n\t\t\t\t.attr('stroke-width', 1.5)\n\t\t}\n\t\tif (p.whole)\n\t\t\tattachEntryBehavior(\n\t\t\t\tdrawMarker(g, x(p.whole.log2fc as number), cy, WHOLE_COLOR, isSig(p.whole), mr),\n\t\t\t\tp.whole,\n\t\t\t\tself\n\t\t\t)\n\t\tif (p.insoluble)\n\t\t\tattachEntryBehavior(\n\t\t\t\tdrawMarker(g, x(p.insoluble.log2fc as number), cy, INSOLUBLE_COLOR, isSig(p.insoluble), mr),\n\t\t\t\tp.insoluble,\n\t\t\t\tself\n\t\t\t)\n\t}\n\n\taddSigFootnote(body)\n}\n\n// Tile \u2014 brain regional proteome: 9 regions coloured by log2FC where significant\n// answers: Where in the brain does this protein change?\n// thresholding/coloring rules are shared with the standalone brainRegions plot (brainRegions.svg.ts)\nlet brainGradientSeq = 0\n\n// per-gene fetch of the brainRegions route data; the parsed svg assets are\n// gene-independent and cached once per svgUrl\nfunction getBrainRegionsData(self: any): Promise<{ data: any; assets: BrainAssets | null }> {\n\tconst gene = self.state?.config?.tw?.term?.name\n\tconst [genome, dslabel] = vocabKey(self).split('|')\n\treturn cachedFetch(`brainRegions|${vocabKey(self)}|${gene}`, async () => {\n\t\tconst data = await dofetch3('termdb/brainRegions', { body: { genome, dslabel, gene } })\n\t\tif (data.error) throw data.error\n\t\tconst assets = Object.keys(data.isoforms || {}).length\n\t\t\t? await cachedFetch(`brainAssets|${data.svgUrl}`, () => loadBrainAssets(data.svgUrl, Object.keys(data.regions)))\n\t\t\t: null\n\t\treturn { data, assets }\n\t})\n}\n\n// fold-change color scale for one isoform, scoped to the selected disease\nconst brainFcScale = (isoformData: any, disease: string) => makeBrainFcScale(isoformData.data[disease] || {})\n\n// one brain for one disease; same coloring rules as the standalone\n// brainRegions plot (significant fold changes only)\nfunction drawBrainForDisease(\n\tholder: any,\n\tdata: any,\n\tassets: BrainAssets,\n\tisoform: string,\n\tdisease: string,\n\tself: any,\n\tbrainW: number,\n\tcolorScale: any\n) {\n\tconst regionData = data.isoforms[isoform]?.data?.[disease] || {}\n\trenderBrainSvg({\n\t\tholder: holder.append('div'),\n\t\twidth: brainW,\n\t\ttemplateUrl: data.templateUrl,\n\t\tassets,\n\t\tregions: data.regions,\n\t\ttip: self.dom.tip,\n\t\tfillByRegion: brainFillByRegion(regionData, colorScale),\n\t\ttooltipByRegion: brainTooltipByRegion(regionData)\n\t})\n}\n\nfunction drawBrainLegend(holder: any, colorScale: any, maxAbsFC: number, nSig: number, disease: string) {\n\tconst legend = holder.append('div').style('margin-top', '6px')\n\tif (!nSig) {\n\t\t// nothing passes the threshold: the gradient would only show the \u00B11 fallback domain\n\t\tlegend\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(`No region reaches p < ${BRAIN_P_THRESHOLD} for this isoform in ${disease} (all regions grey).`)\n\t\treturn\n\t}\n\tconst w = 160\n\tconst h = 10\n\tconst svg = legend\n\t\t.append('svg')\n\t\t.attr('width', w)\n\t\t.attr('height', h + 16)\n\tconst gradientId = `pv-brain-fc-gradient-${brainGradientSeq++}`\n\tconst gradient = svg\n\t\t.append('defs')\n\t\t.append('linearGradient')\n\t\t.attr('id', gradientId)\n\t\t.attr('x1', '0')\n\t\t.attr('y1', '0')\n\t\t.attr('x2', '1')\n\t\t.attr('y2', '0')\n\tconst steps = 10\n\tfor (let i = 0; i <= steps; i++) {\n\t\tconst t = i / steps\n\t\tgradient\n\t\t\t.append('stop')\n\t\t\t.attr('offset', `${t * 100}%`)\n\t\t\t.attr('stop-color', colorScale(-maxAbsFC + t * 2 * maxAbsFC))\n\t}\n\tsvg.append('rect').attr('width', w).attr('height', h).attr('fill', `url(#${gradientId})`).attr('stroke', '#d1d5db')\n\tconst labels: Array<[number, string, string]> = [\n\t\t[0, `-${maxAbsFC.toFixed(2)}`, 'start'],\n\t\t[w / 2, '0', 'middle'],\n\t\t[w, maxAbsFC.toFixed(2), 'end']\n\t]\n\tfor (const [x, text, anchor] of labels) {\n\t\tsvg\n\t\t\t.append('text')\n\t\t\t.attr('x', x)\n\t\t\t.attr('y', h + 12)\n\t\t\t.attr('text-anchor', anchor)\n\t\t\t.style('font-size', '9px')\n\t\t\t.style('fill', '#374151')\n\t\t\t.text(text)\n\t}\n\tlegend\n\t\t.append('div')\n\t\t.style('font-size', '.7em')\n\t\t.style('color', '#9ca3af')\n\t\t.text(`log\u2082 fold change vs control \u00B7 grey: not significant (p \u2265 ${BRAIN_P_THRESHOLD})`)\n}\n\n// gating uses proteome cohorts; the drawing uses the brainRegions route\nfunction renderBrainRegionTile(body: any, _td: TileData, self: any, _cfg: TileCfg, opts: TileRenderOpts = {}) {\n\tconst expanded = !!opts.expanded\n\tconst wait = body.append('div').style('font-size', '.75em').style('color', '#9ca3af').text('Loading\u2026')\n\tgetBrainRegionsData(self)\n\t\t.then(({ data, assets }) => {\n\t\t\twait.remove()\n\t\t\tconst isoformIds = Object.keys(data.isoforms || {})\n\t\t\tif (!isoformIds.length || !assets) {\n\t\t\t\tbody\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('font-size', '.75em')\n\t\t\t\t\t.style('color', '#9ca3af')\n\t\t\t\t\t.text('No brain-region data for this protein.')\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (!expanded) {\n\t\t\t\tconst iso = isoformIds[0]\n\t\t\t\tconst tabsHolder = body.append('div')\n\t\t\t\tconst brainHolder = body.append('div')\n\t\t\t\tconst caption = body\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('font-size', '.7em')\n\t\t\t\t\t.style('color', '#9ca3af')\n\t\t\t\t\t.style('margin-top', '2px')\n\t\t\t\tconst redraw = (disease: string) => {\n\t\t\t\t\tbrainHolder.selectAll('*').remove()\n\t\t\t\t\tconst { colorScale, nSig } = brainFcScale(data.isoforms[iso], disease)\n\t\t\t\t\tdrawBrainForDisease(brainHolder, data, assets, iso, disease, self, 185, colorScale)\n\t\t\t\t\tcaption.text(\n\t\t\t\t\t\tnSig\n\t\t\t\t\t\t\t? `red: up \u00B7 blue: down \u00B7 grey: p \u2265 ${BRAIN_P_THRESHOLD}`\n\t\t\t\t\t\t\t: `no region reaches p < ${BRAIN_P_THRESHOLD} in ${disease}`\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tif (data.diseases.length > 1) makeDiseaseTabs(tabsHolder, data.diseases, data.diseases[0], redraw, '.75em')\n\t\t\t\tredraw(data.diseases[0])\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst description = self.app.vocabApi.termdbConfig?.queries?.proteome?.brainRegions?.description\n\t\t\tif (description) {\n\t\t\t\tbody\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('font-size', '.8em')\n\t\t\t\t\t.style('color', '#555')\n\t\t\t\t\t.style('max-width', '640px')\n\t\t\t\t\t.style('line-height', '1.4')\n\t\t\t\t\t.style('margin-bottom', '8px')\n\t\t\t\t\t.text(description)\n\t\t\t}\n\n\t\t\tlet selectedIso = isoformIds[0]\n\t\t\tlet selectedDisease = data.diseases[0]\n\t\t\tconst controlRow = body.append('div').style('margin-bottom', '8px').style('font-size', '.85em')\n\t\t\tcontrolRow.append('span').style('font-weight', '600').text('Isoform: ')\n\t\t\tconst tabsHolder = body.append('div')\n\t\t\tconst brainHolder = body.append('div')\n\t\t\tconst redraw = () => {\n\t\t\t\tbrainHolder.selectAll('*').remove()\n\t\t\t\tconst isoformData = data.isoforms[selectedIso]\n\t\t\t\tif (!isoformData) return\n\t\t\t\tconst { colorScale, maxAbsFC, nSig } = brainFcScale(isoformData, selectedDisease)\n\t\t\t\tdrawBrainForDisease(brainHolder, data, assets, selectedIso, selectedDisease, self, 460, colorScale)\n\t\t\t\tdrawBrainLegend(brainHolder, colorScale, maxAbsFC, nSig, selectedDisease)\n\t\t\t}\n\t\t\tif (data.diseases.length > 1) {\n\t\t\t\tmakeDiseaseTabs(\n\t\t\t\t\ttabsHolder,\n\t\t\t\t\tdata.diseases,\n\t\t\t\t\tselectedDisease,\n\t\t\t\t\t(d: string) => {\n\t\t\t\t\t\tselectedDisease = d\n\t\t\t\t\t\tredraw()\n\t\t\t\t\t},\n\t\t\t\t\t'.9em'\n\t\t\t\t)\n\t\t\t}\n\t\t\tif (isoformIds.length > 1) {\n\t\t\t\tconst sel = controlRow\n\t\t\t\t\t.append('select')\n\t\t\t\t\t.style('margin-left', '5px')\n\t\t\t\t\t.on('change', () => {\n\t\t\t\t\t\tselectedIso = sel.node().value\n\t\t\t\t\t\tredraw()\n\t\t\t\t\t})\n\t\t\t\tsel\n\t\t\t\t\t.selectAll('option')\n\t\t\t\t\t.data(isoformIds)\n\t\t\t\t\t.enter()\n\t\t\t\t\t.append('option')\n\t\t\t\t\t.attr('value', (d: string) => d)\n\t\t\t\t\t.text((d: string) => `${data.isoforms[d].gene_name} \u2014 ${d}`)\n\t\t\t} else {\n\t\t\t\tcontrolRow\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.style('margin-left', '5px')\n\t\t\t\t\t.text(`${data.isoforms[selectedIso].gene_name} \u2014 ${selectedIso}`)\n\t\t\t}\n\t\t\tredraw()\n\t\t})\n\t\t.catch((err: any) => {\n\t\t\twait.style('color', '#b91c1c').text(`Failed to load: ${err?.message || err}`)\n\t\t\tif (self.app?.opts?.debug) console.error(err)\n\t\t})\n}\n\n// Tile \u2014 models over age: log2FC vs control, one line per model with an\n// ageGroup series; single-timepoint models sit in a separate strip so no\n// age is implied.\n// answers: \"when does this protein start to change, in which models?\"\"\nfunction renderMouseModelsTile(body: any, td: TileData, self: any, cfg: TileCfg, opts: TileRenderOpts = {}) {\n\tconst k = opts.scale || 1\n\tconst kx = opts.scaleX ?? k\n\tconst mr = 4 * Math.sqrt(k)\n\tconst tickFont = k < 1 ? '8.5px' : null\n\ttype AgedPoint = { age: number; e: TileEntry }\n\tconst aged = new Map<string, AgedPoint[]>()\n\tconst singles: TileEntry[] = []\n\tfor (const e of entries(td, cfg.key)) {\n\t\tconst age = e.catalog.ageGroup ? parseAge(e.catalog.ageGroup) : null\n\t\tif (age === null) {\n\t\t\tsingles.push(e)\n\t\t\tcontinue\n\t\t}\n\t\tif (!aged.has(e.catalog.model)) aged.set(e.catalog.model, [])\n\t\taged.get(e.catalog.model)!.push({ age, e })\n\t}\n\tfor (const pts of aged.values()) pts.sort((a, b) => a.age - b.age)\n\n\tconst ages = [...new Set([...aged.values()].flatMap(pts => pts.map(p => p.age)))].sort((a, b) => a - b)\n\t// no aged series (every model single-timepoint): only the strip is drawn\n\tconst hasAged = ages.length > 0\n\tconst margin = { top: 20, right: 12, bottom: 36, left: 46 }\n\tconst mainW = hasAged ? 210 * kx : 0\n\tconst stripGap = singles.length && hasAged ? 18 * kx : 0\n\tconst stripW = singles.length * 34 * kx\n\tconst innerH = 150 * k\n\tconst svg = body\n\t\t.append('svg')\n\t\t.attr('width', margin.left + mainW + stripGap + stripW + margin.right)\n\t\t.attr('height', innerH + margin.top + margin.bottom)\n\tconst g = svg.append('g').attr('transform', `translate(${margin.left},${margin.top})`)\n\n\tconst values: number[] = []\n\tfor (const pts of aged.values()) for (const p of pts) values.push(p.e.log2fc as number)\n\tfor (const e of singles) values.push(e.log2fc as number)\n\n\t// a single age would give a degenerate domain; pad it by a month either side\n\tconst x = scaleLinear()\n\t\t.domain(ages.length > 1 ? [ages[0], ages[ages.length - 1]] : [(ages[0] ?? 0) - 1, (ages[0] ?? 0) + 1])\n\t\t.range([0, mainW])\n\tconst y = scaleLinear().domain(fcDomain(values)).range([innerH, 0])\n\n\tif (hasAged) {\n\t\tstyledAxis(g.append('g').attr('transform', `translate(0,${innerH})`), axisBottom(x).tickValues(ages), tickFont)\n\t\tsvg\n\t\t\t.append('text')\n\t\t\t.attr('x', margin.left + mainW / 2)\n\t\t\t.attr('y', margin.top + innerH + 32)\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.style('font-size', '11px')\n\t\t\t.style('fill', '#374151')\n\t\t\t.text(cfg.xLabel || 'age')\n\t}\n\tstyledAxis(g.append('g'), axisLeft(y).ticks(4), tickFont)\n\tdrawZeroLine(g, 0, y(0), mainW + stripGap + stripW, y(0))\n\tyAxisTitle(svg, innerH, margin.top, cfg.yLabel || 'log2FC vs control')\n\n\tlet legendX = 0\n\tfor (const model of orderBy([...aged.keys()], modelOrder(self))) {\n\t\tconst pts = aged.get(model)!\n\t\tconst color = modelColor(self, model)\n\t\tconst path = d3line<AgedPoint>()\n\t\t\t.x(p => x(p.age))\n\t\t\t.y(p => y(p.e.log2fc as number))\n\t\tg.append('path')\n\t\t\t.attr('d', path(pts))\n\t\t\t.attr('fill', 'none')\n\t\t\t.attr('stroke', color)\n\t\t\t.attr('stroke-width', 1.5)\n\t\t\t.attr('stroke-opacity', 0.75)\n\t\tfor (const p of pts)\n\t\t\tattachEntryBehavior(drawMarker(g, x(p.age), y(p.e.log2fc as number), color, isSig(p.e), mr), p.e, self)\n\t\tg.append('text')\n\t\t\t.attr('x', legendX)\n\t\t\t.attr('y', -8)\n\t\t\t.style('font-size', '10px')\n\t\t\t.style('font-weight', '600')\n\t\t\t.style('fill', color)\n\t\t\t.text(model)\n\t\tlegendX += 52\n\t}\n\n\tif (singles.length) {\n\t\tconst stripX0 = mainW + stripGap\n\t\tg.append('line')\n\t\t\t.attr('x1', stripX0 - stripGap / 2)\n\t\t\t.attr('x2', stripX0 - stripGap / 2)\n\t\t\t.attr('y1', 0)\n\t\t\t.attr('y2', innerH)\n\t\t\t.attr('stroke', '#d1d5db')\n\t\t\t.attr('stroke-dasharray', '2 3')\n\t\tfor (const [i, e] of singles.entries()) {\n\t\t\tconst cx = stripX0 + i * 34 * kx + 17 * kx\n\t\t\tattachEntryBehavior(drawMarker(g, cx, y(e.log2fc as number), SINGLE_MODEL_COLOR, isSig(e), mr), e, self)\n\t\t\tconst lbl = g\n\t\t\t\t.append('text')\n\t\t\t\t.attr('x', cx)\n\t\t\t\t.attr('y', innerH + 14)\n\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t.style('font-size', '9px')\n\t\t\t\t.style('fill', '#6b7280')\n\t\t\t\t.text(e.catalog.model)\n\t\t\t// narrow strips slant the model names so they don't collide\n\t\t\tif (kx < 0.6) lbl.attr('transform', `rotate(-38 ${cx} ${innerH + 14})`).attr('text-anchor', 'end')\n\t\t}\n\t}\n\n\taddSigFootnote(body)\n}\n\n// Tile \u2014 cell type \u00D7 age grid: bubble per model, color = log2FC, size = significance.\n// answers: \"Which cell type carries this protein's change, and when does it appear?\"\"\nfunction renderCellTypesTile(body: any, td: TileData, self: any, cfg: TileCfg, opts: TileRenderOpts = {}) {\n\tconst k = opts.scale || 1\n\tconst kx = opts.scaleX ?? k\n\tconst all = entries(td, cfg.key)\n\tconst models = orderBy([...new Set(all.map(e => e.catalog.model))], modelOrder(self))\n\tconst cellTypes = orderBy([...new Set(all.map(e => e.catalog.cellType))], Object.keys(cellTypeCfg(self)))\n\n\t// per model, the ages actually present (sorted)\n\tconst agesByModel = new Map<string, string[]>()\n\tfor (const m of models) {\n\t\tconst ages = [...new Set(all.filter(e => e.catalog.model === m).map(e => e.catalog.ageGroup))].sort(byAge)\n\t\tagesByModel.set(m, ages)\n\t}\n\n\tconst CELL_W = 34 * kx\n\tconst CELL_H = 28 * k\n\tconst ROW_LABEL_W = 82\n\tconst MODEL_GAP = 12 * kx\n\tconst HEADER_H = 34\n\n\tconst colX = new Map<string, number>() // `${model}|${age}` \u2192 x center\n\tlet xCursor = 0\n\tconst modelSpans: Array<{ model: string; x0: number; x1: number }> = []\n\tfor (const m of models) {\n\t\tconst x0 = xCursor\n\t\tfor (const a of agesByModel.get(m)!) {\n\t\t\tcolX.set(`${m}|${a}`, xCursor + CELL_W / 2)\n\t\t\txCursor += CELL_W\n\t\t}\n\t\tmodelSpans.push({ model: m, x0, x1: xCursor })\n\t\txCursor += MODEL_GAP\n\t}\n\tconst gridW = xCursor - MODEL_GAP\n\tconst gridH = cellTypes.length * CELL_H\n\n\tconst svg = body\n\t\t.append('svg')\n\t\t.attr('width', ROW_LABEL_W + gridW + 10)\n\t\t.attr('height', HEADER_H + gridH + 8)\n\tconst g = svg.append('g').attr('transform', `translate(${ROW_LABEL_W},${HEADER_H})`)\n\n\t// column headers: model band + age labels\n\tfor (const span of modelSpans) {\n\t\tsvg\n\t\t\t.append('text')\n\t\t\t.attr('x', ROW_LABEL_W + (span.x0 + span.x1) / 2)\n\t\t\t.attr('y', 12)\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.style('font-size', '10px')\n\t\t\t.style('font-weight', '600')\n\t\t\t.style('fill', modelColor(self, span.model))\n\t\t\t.text(span.model)\n\t}\n\tfor (const [key, cx] of colX) {\n\t\tsvg\n\t\t\t.append('text')\n\t\t\t.attr('x', ROW_LABEL_W + cx)\n\t\t\t.attr('y', 27)\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.style('font-size', '9px')\n\t\t\t.style('fill', '#6b7280')\n\t\t\t.text(key.split('|')[1])\n\t}\n\t// row labels\n\tfor (const [i, ct] of cellTypes.entries()) {\n\t\tsvg\n\t\t\t.append('text')\n\t\t\t.attr('x', ROW_LABEL_W - 6)\n\t\t\t.attr('y', HEADER_H + i * CELL_H + CELL_H / 2 + 3)\n\t\t\t.attr('text-anchor', 'end')\n\t\t\t.style('font-size', '10px')\n\t\t\t.style('fill', '#374151')\n\t\t\t.text(ct)\n\t}\n\n\tconst maxAbsFc = Math.max(1, ...all.map(e => Math.abs(e.log2fc as number)))\n\tconst colorScale = scaleLinear<string>()\n\t\t.domain([-maxAbsFc, 0, maxAbsFc])\n\t\t.range([FC_NEG_COLOR, FC_ZERO_COLOR, FC_POS_COLOR])\n\tconst NEG_LOG_P_CAP = 10\n\t// bubble radius capped so the largest dot stays inside a narrowed cell\n\tconst rScale = scaleSqrt()\n\t\t.domain([0, NEG_LOG_P_CAP])\n\t\t.range([3 * k, Math.min(11 * k, CELL_W / 2 - 0.5)])\n\n\tfor (const e of all) {\n\t\tconst cx = colX.get(`${e.catalog.model}|${e.catalog.ageGroup}`)\n\t\tconst row = cellTypes.indexOf(e.catalog.cellType)\n\t\tif (cx === undefined || row < 0) continue\n\t\tconst negLogP = e.fdr === null ? 0 : Math.min(NEG_LOG_P_CAP, -Math.log10(Math.max(e.fdr, 1e-300)))\n\t\tconst circle = g\n\t\t\t.append('circle')\n\t\t\t.attr('cx', cx)\n\t\t\t.attr('cy', row * CELL_H + CELL_H / 2)\n\t\t\t.attr('r', rScale(negLogP))\n\t\t\t.attr('fill', colorScale(e.log2fc as number))\n\t\t\t.attr('stroke', isSig(e) ? '#374151' : '#d1d5db')\n\t\t\t.attr('stroke-width', 1)\n\t\tattachEntryBehavior(circle, e, self)\n\t}\n\n\tconst foot = body.append('div').style('font-size', '.7em').style('color', '#9ca3af').style('margin-top', '2px')\n\tfoot.style('max-width', '100%')\n\tfoot.append('span').text(`color: log2FC (purple down, blue up) \u00B7 size: \u2212log10(FDR) \u00B7 outline: FDR < ${SIG_P}`)\n\tfor (const ct of cellTypes) {\n\t\tconst note = cellTypeCfg(self)[ct]?.note\n\t\tif (note) foot.append('div').text(note)\n\t}\n}\n\n// Tile \u2014 plaque microenvironment: plaque vs adjacent non-plaque log2FC over\n// age (cohorts with model+ageGroup, one line per model); cohorts without an\n// age series (e.g. human) render as single reference marks labeled by organism.\n// answers: \"Is this protein recruited to amyloid plaques \u2014 how strongly, how early,\n// and does the same thing happen in human tissue?\"\nfunction renderPlaqueTile(body: any, td: TileData, self: any, cfg: TileCfg, opts: TileRenderOpts = {}) {\n\tconst k = opts.scale || 1\n\tconst kx = opts.scaleX ?? k\n\tconst mr = 4 * Math.sqrt(k)\n\tconst tickFont = k < 1 ? '8.5px' : null\n\tconst all = entries(td, cfg.key)\n\tconst series = all.filter(e => e.catalog.ageGroup && e.catalog.model)\n\tconst reference = all.filter(e => !(e.catalog.ageGroup && e.catalog.model))\n\tconst refLabel = (e: TileEntry) => e.organism.charAt(0).toUpperCase() + e.organism.slice(1)\n\tconst ages = [...new Set(series.map(e => e.catalog.ageGroup))].sort(byAge)\n\tconst refCategories = [...new Set(reference.map(refLabel))]\n\tconst categories = [...ages, ...refCategories]\n\n\tconst margin = { top: 20, right: 14, bottom: 36, left: 46 }\n\tconst innerW = Math.max(180, categories.length * 52) * kx\n\tconst innerH = 140 * k\n\tconst svg = body\n\t\t.append('svg')\n\t\t.attr('width', innerW + margin.left + margin.right)\n\t\t.attr('height', innerH + margin.top + margin.bottom)\n\tconst g = svg.append('g').attr('transform', `translate(${margin.left},${margin.top})`)\n\n\tconst x = scalePoint().domain(categories).range([0, innerW]).padding(0.5)\n\tconst y = scaleLinear()\n\t\t.domain(fcDomain(all.map(e => e.log2fc as number)))\n\t\t.range([innerH, 0])\n\n\tconst xAxisG = styledAxis(g.append('g').attr('transform', `translate(0,${innerH})`), axisBottom(x), tickFont)\n\tif (kx < 0.6) rotateXTicks(xAxisG)\n\tstyledAxis(g.append('g'), axisLeft(y).ticks(4), tickFont)\n\tdrawZeroLine(g, 0, y(0), innerW, y(0))\n\tyAxisTitle(svg, innerH, margin.top, cfg.yLabel || 'log2FC vs control')\n\t// the slanted tick labels of a narrow face would collide with this title;\n\t// the age ticks are self-explanatory there\n\tif (kx >= 0.6) {\n\t\tsvg\n\t\t\t.append('text')\n\t\t\t.attr('x', margin.left + innerW / 2)\n\t\t\t.attr('y', margin.top + innerH + 32)\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.style('font-size', '11px')\n\t\t\t.style('fill', '#374151')\n\t\t\t.text(cfg.xLabel || 'age')\n\t}\n\n\tif (refCategories.length && ages.length) {\n\t\tconst xSep = (x(ages[ages.length - 1])! + x(refCategories[0])!) / 2\n\t\tg.append('line')\n\t\t\t.attr('x1', xSep)\n\t\t\t.attr('x2', xSep)\n\t\t\t.attr('y1', 0)\n\t\t\t.attr('y2', innerH)\n\t\t\t.attr('stroke', '#d1d5db')\n\t\t\t.attr('stroke-dasharray', '2 3')\n\t}\n\n\tconst models = orderBy([...new Set(series.map(e => e.catalog.model))], modelOrder(self))\n\tlet legendX = 0\n\tfor (const model of models) {\n\t\tconst color = modelColor(self, model)\n\t\tconst pts = series\n\t\t\t.filter(e => e.catalog.model === model)\n\t\t\t.sort((a, b) => byAge(a.catalog.ageGroup, b.catalog.ageGroup))\n\t\tconst path = d3line<TileEntry>()\n\t\t\t.x(e => x(e.catalog.ageGroup)!)\n\t\t\t.y(e => y(e.log2fc as number))\n\t\tg.append('path')\n\t\t\t.attr('d', path(pts))\n\t\t\t.attr('fill', 'none')\n\t\t\t.attr('stroke', color)\n\t\t\t.attr('stroke-width', 1.5)\n\t\t\t.attr('stroke-opacity', 0.75)\n\t\t\t// a gap in the age series (a model missing one age) still gets connected;\n\t\t\t// dash the line so the interpolation is visible as such\n\t\t\t.attr('stroke-dasharray', pts.length < ages.length ? '5 3' : null)\n\t\tfor (const e of pts)\n\t\t\tattachEntryBehavior(drawMarker(g, x(e.catalog.ageGroup)!, y(e.log2fc as number), color, isSig(e), mr), e, self)\n\t\tg.append('text')\n\t\t\t.attr('x', legendX)\n\t\t\t.attr('y', -8)\n\t\t\t.style('font-size', '10px')\n\t\t\t.style('font-weight', '600')\n\t\t\t.style('fill', color)\n\t\t\t.text(model)\n\t\tlegendX += 52\n\t}\n\n\tfor (const e of reference) {\n\t\tconst cx = x(refLabel(e))!\n\t\tconst cy = y(e.log2fc as number)\n\t\tconst r = 5.5 * Math.sqrt(k)\n\t\tconst diamond = g\n\t\t\t.append('path')\n\t\t\t.attr('d', `M ${cx} ${cy - r} L ${cx + r} ${cy} L ${cx} ${cy + r} L ${cx - r} ${cy} Z`)\n\t\t\t.attr('fill', isSig(e) ? REFERENCE_COLOR : '#fff')\n\t\t\t.attr('stroke', REFERENCE_COLOR)\n\t\t\t.attr('stroke-width', 1.5)\n\t\tattachEntryBehavior(diamond, e, self)\n\t}\n\n\taddSigFootnote(body)\n}\n\n// Tile 7 \u2014 multiomic ranking: Integrative rank (\"#n of N\") of\n// GWAS, transcriptome, proteomes, PTMs and interactome per disease. Face: integrative\n// rank per disease + a mini strip of per-modality rank percentiles. Expanded:\n// the description and a full per-modality table.\n// Proteins are ranked by p/FDR value or its log2FC-z score (so rank 1 = the strongest disease-associated signal in that dataset).\n// Answers: \"How strong is the overall multi-omic evidence for this protein in AD / LBD / FTLD, and which modalities drive it?\"\nfunction getGeneRanks(self: any): Promise<any> {\n\tconst gene = self.state?.config?.tw?.term?.name\n\tconst [genome, dslabel] = vocabKey(self).split('|')\n\treturn cachedFetch(`geneRanks|${vocabKey(self)}|${gene}`, async () => {\n\t\tconst data = await dofetch3('termdb/geneRanking', { body: { genome, dslabel, gene } })\n\t\tif (data.error) throw data.error\n\t\treturn data.geneRanks || {}\n\t})\n}\n\n// percentile (0 = best) \u2192 color, dark for top-ranked\nconst rankColor = scaleLinear<string>().domain([0, 0.1, 1]).range(['#1d4ed8', '#93c5fd', '#f3f4f6']).clamp(true)\n\nfunction renderMultiomicRankTile(body: any, _td: TileData, self: any, _cfg: TileCfg, opts: TileRenderOpts = {}) {\n\tconst expanded = !!opts.expanded\n\t// column vocabulary of the ranking files and per-ranking display labels come from the dataset\n\tconst rankCfg = self.app.vocabApi.termdbConfig?.queries?.geneRanking || {}\n\tconst modalities: string[] = rankCfg.modalities || []\n\tconst integrativeColumn: string | undefined = rankCfg.integrativeColumn\n\tconst statColumns: string[] = rankCfg.statColumns || []\n\tconst rankingLabel = (key: string) => rankCfg.labels?.[key] || key\n\tconst wait = body.append('div').style('font-size', '.75em').style('color', '#9ca3af').text('Loading\u2026')\n\tgetGeneRanks(self)\n\t\t.then((geneRanks: any) => {\n\t\t\twait.remove()\n\t\t\tconst keys = Object.keys(geneRanks)\n\t\t\tconst ranked = keys.filter(k => geneRanks[k].row)\n\t\t\tif (!ranked.length) {\n\t\t\t\tbody\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('font-size', '.75em')\n\t\t\t\t\t.style('color', '#9ca3af')\n\t\t\t\t\t.text('Not present in the multiomic rankings.')\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst fmt = (n: number) => n.toLocaleString()\n\n\t\t\tif (expanded) {\n\t\t\t\tconst description = self.app.vocabApi.termdbConfig?.queries?.geneRanking?.description\n\t\t\t\tif (description) {\n\t\t\t\t\tbody\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.style('font-size', '.8em')\n\t\t\t\t\t\t.style('color', '#555')\n\t\t\t\t\t\t.style('max-width', '640px')\n\t\t\t\t\t\t.style('line-height', '1.4')\n\t\t\t\t\t\t.style('margin-bottom', '10px')\n\t\t\t\t\t\t.text(description)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const key of keys) {\n\t\t\t\tconst r = geneRanks[key]\n\t\t\t\tconst colIdx = new Map<string, number>(r.columns.map((c: string, i: number) => [c, i]))\n\t\t\t\tconst intIdx = integrativeColumn ? colIdx.get(integrativeColumn) : undefined\n\t\t\t\tconst intRank = r.row && intIdx !== undefined ? r.row[intIdx] : null\n\t\t\t\tconst section = body.append('div').style('margin-bottom', expanded ? '12px' : '6px')\n\t\t\t\tconst head = section\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', 'baseline')\n\t\t\t\t\t.style('gap', '6px')\n\t\t\t\t\t.style('font-size', expanded ? '.9em' : '.8em')\n\t\t\t\thead.append('span').style('font-weight', '600').style('color', '#374151').text(rankingLabel(key))\n\t\t\t\tif (!r.row) {\n\t\t\t\t\thead.append('span').style('color', '#9ca3af').text('not ranked')\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\thead\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.style('color', typeof intRank === 'number' ? '#111827' : '#9ca3af')\n\t\t\t\t\t.text(typeof intRank === 'number' ? `#${fmt(intRank)} of ${fmt(r.counts[intIdx!])}` : 'no integrative rank')\n\n\t\t\t\t// per-modality ranks: strip on the face, table when expanded\n\t\t\t\tconst mods = modalities.filter(m => colIdx.has(m))\n\t\t\t\tif (!expanded) {\n\t\t\t\t\tconst strip = section.append('div').style('display', 'flex').style('gap', '2px').style('margin-top', '2px')\n\t\t\t\t\tfor (const m of mods) {\n\t\t\t\t\t\tconst c = colIdx.get(m)!\n\t\t\t\t\t\tconst v = r.row[c]\n\t\t\t\t\t\tconst n = r.counts[c]\n\t\t\t\t\t\tconst pct = typeof v === 'number' && n ? (v - 1) / Math.max(1, n - 1) : null\n\t\t\t\t\t\tstrip\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.attr('title', pct === null ? `${m}: not ranked` : `${m}: #${fmt(v as number)} of ${fmt(n)}`)\n\t\t\t\t\t\t\t.style('width', '20px')\n\t\t\t\t\t\t\t.style('height', '9px')\n\t\t\t\t\t\t\t.style('border-radius', '2px')\n\t\t\t\t\t\t\t.style('background', pct === null ? '#fff' : rankColor(pct))\n\t\t\t\t\t\t\t.style('border', pct === null ? '1px dashed #d1d5db' : '1px solid transparent')\n\t\t\t\t\t\t\t.style('box-sizing', 'border-box')\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst tbl = table2col({ holder: section.append('table') })\n\t\t\t\tfor (const m of mods) {\n\t\t\t\t\tconst c = colIdx.get(m)!\n\t\t\t\t\tconst v = r.row[c]\n\t\t\t\t\tconst n = r.counts[c]\n\t\t\t\t\tconst pctTop = typeof v === 'number' ? (100 * v) / n : null\n\t\t\t\t\tconst pctText = pctTop === null ? '' : ` (top ${pctTop < 0.1 ? pctTop.toFixed(2) : pctTop.toFixed(1)}%)`\n\t\t\t\t\ttbl.addRow(m, typeof v === 'number' ? `#${fmt(v)} of ${fmt(n)}${pctText}` : 'not ranked')\n\t\t\t\t}\n\t\t\t\tfor (const extra of statColumns) {\n\t\t\t\t\tconst c = colIdx.get(extra)\n\t\t\t\t\tif (c === undefined) continue\n\t\t\t\t\tconst v = r.row[c]\n\t\t\t\t\ttbl.addRow(extra, typeof v === 'number' ? (v < 0.001 && v > 0 ? v.toExponential(2) : String(v)) : 'NA')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!expanded) {\n\t\t\t\tconst foot = body.append('div').style('font-size', '.7em').style('color', '#9ca3af').style('margin-top', '4px')\n\t\t\t\tfoot.text('strip: one cell per modality, darker = ranked higher \u00B7 hover for ranks')\n\t\t\t}\n\t\t})\n\t\t.catch((err: any) => {\n\t\t\twait.style('color', '#b91c1c').text(`Failed to load: ${err?.message || err}`)\n\t\t\tif (self.app?.opts?.debug) console.error(err)\n\t\t})\n}\n\n// Tile \u2014 concordance: All-gene scatter of log2FC in one cohort vs another\n// (human vs mouse model, or model vs model), this protein highlighted,\n// human-vs-mouse panels ask \"does this mouse model reproduce human AD?\",\n// the mouse-vs-mouse panel \"do the two models agree with each other?\".\n// R: Pearson correlation between the two cohorts' log2FC values across all\n// shared genes (not just the searched protein), i.e. how well the whole\n// proteome's direction and magnitude of change in one dataset tracks the\n// other. High R (> 0.5): largely the same changes; ~0.2\u20130.3: only a subset\n// moves in concert; \u2248 0: no global relationship.\n// Answers: \"Does the mouse model reproduce the human change for this protein \u2014 and for the proteome as a whole?\"\ntype CohortRef = { organism: string; assay: string; cohort: string; label: string }\ntype ConcordancePair = { key: string; label: string; x: CohortRef; y: CohortRef }\n// server joins the two DAP files on upper-cased gene and runs R's cor.test (R/src/corr.R)\nfunction getConcordance(self: any, x: CohortRef, y: CohortRef): Promise<DapConcordance> {\n\tconst [genome, dslabel] = vocabKey(self).split('|')\n\tconst refKey = (r: CohortRef) => `${r.organism}|${r.assay}|${r.cohort}`\n\treturn cachedFetch(`dapConcordance|${vocabKey(self)}|${refKey(x)}|${refKey(y)}`, async () => {\n\t\tconst data = await dofetch3('termdb/dapVolcano', {\n\t\t\tbody: {\n\t\t\t\tgenome,\n\t\t\t\tdslabel,\n\t\t\t\torganism: x.organism,\n\t\t\t\tassay: x.assay,\n\t\t\t\tcohort: x.cohort,\n\t\t\t\tconcordanceWith: { organism: y.organism, assay: y.assay, cohort: y.cohort }\n\t\t\t}\n\t\t})\n\t\tif (data.error) throw data.error\n\t\treturn data.concordance\n\t})\n}\n\n// first cohort (with a DAP file) satisfying a pair side's cohortMatch; an\n// ageVaries side additionally requires catalog.ageGroup == age\nfunction findPairCohort(self: any, side: PairSide, age: string): CohortRef | null {\n\tconst organisms = self.app?.vocabApi?.termdbConfig?.queries?.proteome?.organisms || {}\n\tfor (const organism in organisms) {\n\t\tconst assays = organisms[organism]?.assays || {}\n\t\tfor (const assay in assays) {\n\t\t\tfor (const cohort in assays[assay].cohorts || {}) {\n\t\t\t\tconst c = assays[assay].cohorts[cohort]\n\t\t\t\tif (!c.DAPfile || !c.catalog) continue\n\t\t\t\tif (!cohortMatches(side, organism, assay, c.catalog)) continue\n\t\t\t\tif (side.ageVaries && c.catalog.ageGroup !== age) continue\n\t\t\t\tconst label = side.ageVaries ? `${side.label} ${age}` : side.label\n\t\t\t\treturn { organism, assay, cohort, label }\n\t\t\t}\n\t\t}\n\t}\n\treturn null\n}\n\n// ages at which at least one ageVaries side has a DAP cohort, sorted numerically\nfunction concordanceAges(self: any, cfg: TileCfg): string[] {\n\tconst organisms = self.app?.vocabApi?.termdbConfig?.queries?.proteome?.organisms || {}\n\tconst sides = (cfg.pairs || []).flatMap(p => [p.x, p.y]).filter(sd => sd.ageVaries)\n\tconst ages = new Set<string>()\n\tfor (const organism in organisms) {\n\t\tconst assays = organisms[organism]?.assays || {}\n\t\tfor (const assay in assays) {\n\t\t\tfor (const cohort in assays[assay].cohorts || {}) {\n\t\t\t\tconst c = assays[assay].cohorts[cohort]\n\t\t\t\tif (!c.DAPfile || !c.catalog?.ageGroup) continue\n\t\t\t\tif (sides.some(sd => cohortMatches(sd, organism, assay, c.catalog))) ages.add(c.catalog.ageGroup)\n\t\t\t}\n\t\t}\n\t}\n\treturn [...ages].sort(byAge)\n}\n\n// age used when none is selected: the configured defaultAge if cohorts exist at\n// it, else the first age that has any; '' only when no side varies by age\nfunction defaultConcordanceAge(self: any, cfg: TileCfg): string {\n\tconst ages = concordanceAges(self, cfg)\n\tif (cfg.defaultAge && ages.includes(cfg.defaultAge)) return cfg.defaultAge\n\treturn ages[0] || cfg.defaultAge || ''\n}\n\nfunction concordancePairs(self: any, cfg: TileCfg, age = defaultConcordanceAge(self, cfg)): ConcordancePair[] {\n\tconst pairs: ConcordancePair[] = []\n\tfor (const p of cfg.pairs || []) {\n\t\tconst x = findPairCohort(self, p.x, age)\n\t\tconst y = findPairCohort(self, p.y, age)\n\t\tif (x && y) pairs.push({ key: p.key, label: p.label, x, y })\n\t}\n\treturn pairs\n}\n\nasync function drawConcordance(holder: any, self: any, pair: ConcordancePair, gene: string, expanded: boolean) {\n\tconst { points: pts, r: R, p: P } = await getConcordance(self, pair.x, pair.y)\n\tconst target = gene.toUpperCase()\n\tconst hit = pts.find(p => p.gene === target)\n\n\tconst margin = expanded ? { top: 14, right: 16, bottom: 44, left: 52 } : { top: 8, right: 10, bottom: 32, left: 38 }\n\tconst innerW = expanded ? 380 : 150\n\tconst innerH = expanded ? 320 : 118\n\tconst svg = holder\n\t\t.append('svg')\n\t\t.attr('width', innerW + margin.left + margin.right)\n\t\t.attr('height', innerH + margin.top + margin.bottom)\n\tconst g = svg.append('g').attr('transform', `translate(${margin.left},${margin.top})`)\n\tconst x = scaleLinear()\n\t\t.domain(fcDomain(pts.map(p => p.x)))\n\t\t.range([0, innerW])\n\tconst y = scaleLinear()\n\t\t.domain(fcDomain(pts.map(p => p.y)))\n\t\t.range([innerH, 0])\n\tconst tickFont = expanded ? null : '8.5px'\n\tstyledAxis(g.append('g').attr('transform', `translate(0,${innerH})`), axisBottom(x).ticks(expanded ? 6 : 4), tickFont)\n\tstyledAxis(g.append('g'), axisLeft(y).ticks(expanded ? 6 : 4), tickFont)\n\tdrawZeroLine(g, x(0), 0, x(0), innerH)\n\tdrawZeroLine(g, 0, y(0), innerW, y(0))\n\tyAxisTitle(svg, innerH, margin.top, `${pair.y.label} log2FC`)\n\tsvg\n\t\t.append('text')\n\t\t.attr('x', margin.left + innerW / 2)\n\t\t.attr('y', margin.top + innerH + (expanded ? 36 : 28))\n\t\t.attr('text-anchor', 'middle')\n\t\t.style('font-size', expanded ? '11px' : '10px')\n\t\t.style('fill', '#374151')\n\t\t.text(`${pair.x.label} log2FC`)\n\tfor (const p of pts) {\n\t\tif (p === hit) continue\n\t\tg.append('circle')\n\t\t\t.attr('cx', x(p.x))\n\t\t\t.attr('cy', y(p.y))\n\t\t\t.attr('r', expanded ? 1.6 : 1.1)\n\t\t\t.attr('fill', '#9ca3af')\n\t\t\t.attr('fill-opacity', 0.45)\n\t}\n\tif (hit) {\n\t\tg.append('circle')\n\t\t\t.attr('cx', x(hit.x))\n\t\t\t.attr('cy', y(hit.y))\n\t\t\t.attr('r', expanded ? 6 : 4)\n\t\t\t.attr('fill', '#e75480')\n\t\t\t.attr('stroke', '#7f1d1d')\n\t\t\t.attr('stroke-width', 1.2)\n\t\tg.append('text')\n\t\t\t.attr('x', x(hit.x) + (expanded ? 9 : 6))\n\t\t\t.attr('y', y(hit.y) - (expanded ? 6 : 4))\n\t\t\t.style('font-size', expanded ? '12px' : '9px')\n\t\t\t.style('font-weight', '600')\n\t\t\t.style('fill', '#7f1d1d')\n\t\t\t.text(gene)\n\t}\n\tg.append('text')\n\t\t.attr('x', innerW)\n\t\t.attr('y', -2)\n\t\t.attr('text-anchor', 'end')\n\t\t.style('font-size', expanded ? '11px' : '9px')\n\t\t.style('fill', '#374151')\n\t\t.attr('title', P === null ? null : `Pearson cor.test p = ${P < 1e-4 ? P.toExponential(1) : P.toFixed(4)}`)\n\t\t.text(`R = ${R === null ? 'NA' : R.toFixed(2)} \u00B7 n = ${pts.length.toLocaleString()}`)\n\tif (!hit) {\n\t\tholder\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.72em')\n\t\t\t.style('color', '#9ca3af')\n\t\t\t.text(`${gene} is not quantified in both datasets`)\n\t} else if (expanded) {\n\t\tholder\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.8em')\n\t\t\t.style('color', '#374151')\n\t\t\t.style('margin-top', '4px')\n\t\t\t.text(`${gene}: ${pair.x.label} log2FC ${hit.x.toFixed(2)} \u00B7 ${pair.y.label} log2FC ${hit.y.toFixed(2)}`)\n\t}\n}\n\nfunction renderConcordanceTile(body: any, _td: TileData, self: any, cfg: TileCfg, opts: TileRenderOpts = {}) {\n\tconst expanded = !!opts.expanded\n\tconst gene = self.state?.config?.tw?.term?.name || ''\n\tlet age = defaultConcordanceAge(self, cfg)\n\tlet pairs = concordancePairs(self, cfg, age)\n\tif (!pairs.length) return\n\tlet pair = pairs[0]\n\tconst controls = body.append('div').style('display', 'flex').style('align-items', 'center').style('gap', '12px')\n\tconst tabsHolder = controls.append('div')\n\tconst plotHolder = body.append('div')\n\t// a redraw issued while an earlier one is still fetching must win: each\n\t// draw gets a generation and only the latest one may touch plotHolder\n\tlet generation = 0\n\tconst redraw = () => {\n\t\tconst gen = ++generation\n\t\tplotHolder.selectAll('*').remove()\n\t\tconst wait = plotHolder.append('div').style('font-size', '.75em').style('color', '#9ca3af').text('Loading\u2026')\n\t\tconst target = plotHolder.append('div')\n\t\tdrawConcordance(target, self, pair, gene, expanded)\n\t\t\t.then(() => {\n\t\t\t\tif (gen !== generation) target.remove()\n\t\t\t\telse wait.remove()\n\t\t\t})\n\t\t\t.catch((err: any) => {\n\t\t\t\tif (gen !== generation) return\n\t\t\t\twait.style('color', '#b91c1c').text(`Failed to load: ${err?.message || err}`)\n\t\t\t\tif (self.app?.opts?.debug) console.error(err)\n\t\t\t})\n\t}\n\tconst makeTabs = () => {\n\t\ttabsHolder.selectAll('*').remove()\n\t\tif (pairs.length < 2) return\n\t\tmakeDiseaseTabs(\n\t\t\ttabsHolder,\n\t\t\tpairs.map(p => p.label),\n\t\t\tpair.label,\n\t\t\t(label: string) => {\n\t\t\t\tpair = pairs.find(p => p.label === label) || pairs[0]\n\t\t\t\tredraw()\n\t\t\t},\n\t\t\t'.9em'\n\t\t)\n\t}\n\tif (expanded) {\n\t\tmakeTabs()\n\t\t// age selector; the same pair (by key) is kept across ages when it\n\t\t// exists at the new age, otherwise the first available pair is shown\n\t\tconst ages = concordanceAges(self, cfg)\n\t\tif (ages.length > 1) {\n\t\t\tconst ageDiv = controls.append('div').style('font-size', '.85em').style('color', '#374151')\n\t\t\tageDiv.append('span').text('Age: ')\n\t\t\tconst sel = ageDiv.append('select').style('font-size', 'inherit')\n\t\t\tfor (const a of ages)\n\t\t\t\tsel\n\t\t\t\t\t.append('option')\n\t\t\t\t\t.attr('value', a)\n\t\t\t\t\t.property('selected', a === age)\n\t\t\t\t\t.text(a)\n\t\t\tsel.on('change', () => {\n\t\t\t\tage = sel.property('value')\n\t\t\t\tconst next = concordancePairs(self, cfg, age)\n\t\t\t\tif (!next.length) {\n\t\t\t\t\tplotHolder.selectAll('*').remove()\n\t\t\t\t\tplotHolder.append('div').style('font-size', '.8em').style('color', '#9ca3af').text(`No cohorts at ${age}`)\n\t\t\t\t\ttabsHolder.selectAll('*').remove()\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tpairs = next\n\t\t\t\tpair = pairs.find(p => p.key === pair.key) || pairs[0]\n\t\t\t\tmakeTabs()\n\t\t\t\tredraw()\n\t\t\t})\n\t\t}\n\t}\n\tredraw()\n\tif (!expanded) {\n\t\tbody\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.7em')\n\t\t\t.style('color', '#9ca3af')\n\t\t\t.style('margin-top', '2px')\n\t\t\t.text(`${pair.label}${age ? ', ' + age : ''}, all genes \u00B7 expand for other pairs and ages`)\n\t} else if (cfg.note) {\n\t\tbody.append('div').style('font-size', '.75em').style('color', '#9ca3af').style('margin-top', '6px').text(cfg.note)\n\t}\n}\n\n/************ registry ************/\n\n// renderer per tile key; the dataset config decides which tiles exist, their\n// titles and order. `has` gates rendering on the data actually present.\ntype TileRenderer = {\n\thas: (td: TileData, self: any, cfg: TileCfg) => boolean\n\trender: (body: any, td: TileData, self: any, cfg: TileCfg, opts?: TileRenderOpts) => void\n}\nconst TILE_RENDERERS: { [key: string]: TileRenderer } = {\n\tcrossDisease: {\n\t\thas: (td, _s, cfg) => new Set(entries(td, cfg.key).map(e => e.disease || e.cohortName)).size >= 2,\n\t\trender: renderCrossDiseaseTile\n\t},\n\tinsoluble: { has: (td, _s, cfg) => entries(td, cfg.key).length >= 1, render: renderInsolubleTile },\n\tbrainRegions: { has: (td, _s, cfg) => entries(td, cfg.key).length >= 2, render: renderBrainRegionTile },\n\tmouseModels: { has: (td, _s, cfg) => entries(td, cfg.key).length >= 2, render: renderMouseModelsTile },\n\tcellTypes: { has: (td, _s, cfg) => entries(td, cfg.key).length >= 2, render: renderCellTypesTile },\n\tplaque: { has: (td, _s, cfg) => entries(td, cfg.key).length >= 1, render: renderPlaqueTile },\n\tmultiomicRank: {\n\t\t// available whenever the dataset ships rankings; the gene may still be absent\n\t\thas: (_td, self) => !!self?.app?.vocabApi?.termdbConfig?.queries?.geneRanking?.rankings,\n\t\trender: renderMultiomicRankTile\n\t},\n\tconcordance: { has: (_td, self, cfg) => concordancePairs(self, cfg).length > 0, render: renderConcordanceTile }\n\t// 'ptm' is rendered by renderPTMSummaryCard from site-level data, not here\n}\n\nexport type TileDef = TileCfg & TileRenderer\n\n// tiles the dataset configures that this file can draw, in dataset order\nfunction configuredTiles(self: any): TileDef[] {\n\tconst out: TileDef[] = []\n\tfor (const cfg of getTileConfigs(self)) {\n\t\tconst r = TILE_RENDERERS[cfg.key]\n\t\tif (!r) continue\n\t\tout.push({ ...cfg, ...r })\n\t}\n\treturn out\n}\n\n// inline error box used by every tile face and expanded view\nexport function renderTileError(holder: any, err: any, self: any) {\n\tholder\n\t\t.append('div')\n\t\t.style('color', '#b91c1c')\n\t\t.style('font-size', '.8em')\n\t\t.text(`Failed to render: ${err?.message || err}`)\n\tif (self?.app?.opts?.debug) console.error(err)\n}\n\n// expanded view: the same renderer at a larger scale with extra detail\nfunction renderExpandedTile(holder: any, tile: TileDef, td: TileData, self: any) {\n\ttry {\n\t\ttile.render(holder.append('div'), td, self, tile, { scale: EXPANDED_SCALE, expanded: true })\n\t} catch (err: any) {\n\t\trenderTileError(holder, err, self)\n\t}\n}\n\n// renders a chart card for every tile whose data requirement is met (in\n// canonical order) and returns the tiles that have no data, so the caller\n// can append their greyed placeholders after the other live cards.\nexport function renderStudyTiles(grid: any, td: TileData, self: any): { missing: TileDef[] } {\n\tconst missing: TileDef[] = []\n\tfor (const tile of configuredTiles(self)) {\n\t\tif (!tile.has(td, self, tile)) {\n\t\t\tmissing.push(tile)\n\t\t\tcontinue\n\t\t}\n\t\tconst body = makeTileCard(grid, {\n\t\t\ttitle: tile.title,\n\t\t\tsubtitle: tile.subtitle,\n\t\t\tuniform: true,\n\t\t\texpand: { render: holder => renderExpandedTile(holder, tile, td, self), ...tileExpandState(self, tile.key) }\n\t\t})\n\t\ttry {\n\t\t\ttile.render(body, td, self, tile, { scale: TILE_FACE_SCALE, scaleX: TILE_FACE_SCALE_X })\n\t\t} catch (err: any) {\n\t\t\trenderTileError(body, err, self)\n\t\t}\n\t}\n\treturn { missing }\n}\n\n// greyed placeholder cards for tiles without data, appended after the live\n// cards so real data leads the grid\nexport function renderPlaceholderTiles(grid: any, tiles: { title: string; note?: string }[]) {\n\tfor (const tile of tiles) {\n\t\tconst body = makeTileCard(grid, { title: tile.title, disabled: true, uniform: true })\n\t\tbody\n\t\t\t.style('flex', '1')\n\t\t\t.style('display', 'flex')\n\t\t\t.style('align-items', 'center')\n\t\t\t.style('justify-content', 'center')\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.75em')\n\t\t\t.style('color', '#9ca3af')\n\t\t\t.style('max-width', '200px')\n\t\t\t.style('text-align', 'center')\n\t\t\t.text(tile.note || 'No data for this protein in this study')\n\t}\n}\n\n// fallback dot colors for the PTM summary card face when the dataset's\n// mclassOverride doesn't provide one: assigned by order of first appearance\nconst PTM_FALLBACK_PALETTE = ['#d7301f', '#2166ac', '#1b9e77', '#7570b3', '#e6ab02']\n\n// first residue position in a modSites string like \"S10\" or \"S10,T11\"\nfunction firstModSitePos(modSites: string): number | null {\n\tconst m = /[A-Za-z](\\d+)/.exec(modSites || '')\n\tif (!m) return null\n\tconst pos = Number(m[1])\n\treturn Number.isInteger(pos) && pos >= 1 ? pos : null\n}\n\n// Compact overview volcano card: Every protein-level measurement across sample sets\n// as one volcano.\n// Answers: At a glance, how consistent and how significant are this protein's changes across all studies?\nexport function renderOverviewVolcanoCard(\n\tgrid: any,\n\tdata: any,\n\tself: any,\n\topts: { onExpandRender: (holder: any) => void }\n) {\n\ttype Pt = { x: number; y: number; sig: boolean }\n\tconst pts: Pt[] = []\n\tfor (const e of data?.cohorts || []) {\n\t\tif (e.PTMType) continue\n\t\tconst log2fc = getLog2Ratio(e.foldChange)\n\t\tconst p = Number(e.fdr)\n\t\tif (log2fc === null || !Number.isFinite(p) || p <= 0) continue\n\t\tpts.push({ x: log2fc, y: -Math.log10(Math.max(p, 1e-300)), sig: p < SIG_P })\n\t}\n\tconst body = makeTileCard(grid, {\n\t\ttitle: 'All sample sets',\n\t\tsubtitle: 'log2FC vs significance, every cohort',\n\t\tuniform: true,\n\t\texpand: { render: opts.onExpandRender, ...tileExpandState(self, 'volcano') }\n\t})\n\tif (!pts.length) {\n\t\tbody.append('div').style('font-size', '.75em').style('color', '#9ca3af').text('No protein-level data.')\n\t\treturn\n\t}\n\n\tconst margin = { top: 8, right: 10, bottom: 32, left: 38 }\n\tconst innerW = 156\n\tconst innerH = 118\n\tconst svg = body\n\t\t.append('svg')\n\t\t.attr('width', innerW + margin.left + margin.right)\n\t\t.attr('height', innerH + margin.top + margin.bottom)\n\tconst g = svg.append('g').attr('transform', `translate(${margin.left},${margin.top})`)\n\tconst x = scaleLinear()\n\t\t.domain(fcDomain(pts.map(p => p.x)))\n\t\t.range([0, innerW])\n\tconst y = scaleLinear()\n\t\t.domain([0, Math.max(2, ...pts.map(p => p.y)) * 1.05])\n\t\t.range([innerH, 0])\n\tstyledAxis(g.append('g').attr('transform', `translate(0,${innerH})`), axisBottom(x).ticks(4), '8.5px')\n\tstyledAxis(g.append('g'), axisLeft(y).ticks(4), '8.5px')\n\tdrawZeroLine(g, x(0), 0, x(0), innerH)\n\t// significance threshold line\n\tg.append('line')\n\t\t.attr('x1', 0)\n\t\t.attr('x2', innerW)\n\t\t.attr('y1', y(-Math.log10(SIG_P)))\n\t\t.attr('y2', y(-Math.log10(SIG_P)))\n\t\t.attr('stroke', '#9ca3af')\n\t\t.attr('stroke-dasharray', '3 3')\n\t\t.attr('stroke-opacity', 0.5)\n\tyAxisTitle(svg, innerH, margin.top, '\\u2212log\\u2081\\u2080(FDR)')\n\tsvg\n\t\t.append('text')\n\t\t.attr('x', margin.left + innerW / 2)\n\t\t.attr('y', margin.top + innerH + 28)\n\t\t.attr('text-anchor', 'middle')\n\t\t.style('font-size', '10px')\n\t\t.style('fill', '#374151')\n\t\t.text('log2FC')\n\tfor (const p of pts) {\n\t\tg.append('circle')\n\t\t\t.attr('cx', x(p.x))\n\t\t\t.attr('cy', y(p.y))\n\t\t\t.attr('r', 2)\n\t\t\t.attr('fill', p.sig ? '#e75480' : '#c7cbd1')\n\t\t\t.attr('fill-opacity', 0.6)\n\t}\n\tbody\n\t\t.append('div')\n\t\t.style('font-size', '.7em')\n\t\t.style('color', '#9ca3af')\n\t\t.style('margin-top', '2px')\n\t\t.text(`${pts.length} dots (accession \\u00d7 sample set) \\u00b7 expand for the interactive view`)\n}\n\n// Modified sites along the protein, coloured by PTM type (phospho,\n// ubiquitin), log2FC per site\nexport function renderPTMSummaryCard(\n\tgrid: any,\n\tptmEntries: any[],\n\tself: any,\n\topts: { onExpandRender: (holder: any) => void | Promise<void> }\n) {\n\tif (!ptmEntries?.length) return\n\tconst cfg = getTileConfig(self, 'ptm')\n\tconst title = cfg?.title || 'PTM sites'\n\tconst body = makeTileCard(grid, {\n\t\ttitle,\n\t\tsubtitle: cfg?.subtitle || 'Site-level log2FC along the protein',\n\t\tuniform: true,\n\t\texpand: { render: opts.onExpandRender, ...tileExpandState(self, 'ptm') }\n\t})\n\n\ttype SitePoint = { pos: number; log2fc: number; color: string; entry: TileEntry }\n\tconst byOrganism = new Map<string, SitePoint[]>()\n\tconst typeCounts = new Map<string, { count: number; color: string }>()\n\tfor (const e of ptmEntries) {\n\t\tconst pos = firstModSitePos(e.modSites)\n\t\tconst log2fc = getLog2Ratio(e.foldChange)\n\t\tconst mclass: any = Object.values(e.mclassOverride || {})[0]\n\t\tconst existing = typeCounts.get(e.PTMType)\n\t\tconst color =\n\t\t\texisting?.color || mclass?.color || PTM_FALLBACK_PALETTE[typeCounts.size % PTM_FALLBACK_PALETTE.length]\n\t\tconst tc = existing || { count: 0, color }\n\t\ttc.count++\n\t\ttypeCounts.set(e.PTMType, tc)\n\t\tif (pos === null || log2fc === null) continue\n\t\tconst p = Number(e.fdr)\n\t\tconst entry: TileEntry = {\n\t\t\torganism: e.organism,\n\t\t\tassayName: e.assayName,\n\t\t\tcohortName: e.cohortName,\n\t\t\tdisease: e.disease,\n\t\t\tuniqueIdentifier: e.uniqueIdentifier,\n\t\t\tproteinAccession: e.proteinAccession,\n\t\t\tlog2fc,\n\t\t\tfdr: Number.isFinite(p) && p > 0 ? p : null,\n\t\t\ttestedN: Number(e.testedN) || 0,\n\t\t\tcontrolN: Number(e.controlN) || 0,\n\t\t\tisoformCount: 1,\n\t\t\tcatalog: catalogForEntry(self, e) || {},\n\t\t\tptmType: e.PTMType,\n\t\t\tmodSites: e.modSites\n\t\t}\n\t\tconst arr = byOrganism.get(e.organism) || []\n\t\tarr.push({ pos, log2fc, color, entry })\n\t\tbyOrganism.set(e.organism, arr)\n\t}\n\n\t// one mini strip per organism (site numbering is isoform-specific, so\n\t// organisms never share an x-axis)\n\tconst stripW = 152\n\tconst stripH = 46\n\tconst labelW = 46\n\tfor (const [organism, points] of byOrganism) {\n\t\tconst maxPos = Math.max(...points.map(p => p.pos)) * 1.05\n\t\tconst maxAbs = Math.max(0.2, ...points.map(p => Math.abs(p.log2fc)))\n\t\tconst row = body.append('div').style('display', 'flex').style('align-items', 'center').style('gap', '4px')\n\t\trow\n\t\t\t.append('span')\n\t\t\t.style('flex', `0 0 ${labelW}px`)\n\t\t\t.style('font-size', '.7em')\n\t\t\t.style('color', '#6b7280')\n\t\t\t.text(organism)\n\t\tconst svg = row.append('svg').attr('width', stripW).attr('height', stripH)\n\t\tconst x = scaleLinear()\n\t\t\t.domain([0, maxPos])\n\t\t\t.range([4, stripW - 4])\n\t\tconst y = scaleLinear()\n\t\t\t.domain([-maxAbs, maxAbs])\n\t\t\t.range([stripH - 4, 4])\n\t\tsvg.append('line').attr('x1', 0).attr('x2', stripW).attr('y1', y(0)).attr('y2', y(0)).attr('stroke', '#e5e7eb')\n\t\tfor (const p of points) {\n\t\t\tsvg\n\t\t\t\t.append('line')\n\t\t\t\t.attr('x1', x(p.pos))\n\t\t\t\t.attr('x2', x(p.pos))\n\t\t\t\t.attr('y1', y(0))\n\t\t\t\t.attr('y2', y(p.log2fc))\n\t\t\t\t.attr('stroke', p.color)\n\t\t\t\t.attr('stroke-opacity', 0.4)\n\t\t\tattachEntryBehavior(\n\t\t\t\tsvg\n\t\t\t\t\t.append('circle')\n\t\t\t\t\t.attr('cx', x(p.pos))\n\t\t\t\t\t.attr('cy', y(p.log2fc))\n\t\t\t\t\t.attr('r', 2.5)\n\t\t\t\t\t.attr('fill', p.color)\n\t\t\t\t\t.attr('fill-opacity', 0.8),\n\t\t\t\tp.entry,\n\t\t\t\tself\n\t\t\t)\n\t\t}\n\t}\n\n\tconst foot = body\n\t\t.append('div')\n\t\t.style('display', 'flex')\n\t\t.style('gap', '10px')\n\t\t.style('flex-wrap', 'wrap')\n\t\t.style('font-size', '.7em')\n\t\t.style('color', '#6b7280')\n\t\t.style('margin-top', '4px')\n\tfor (const [type, tc] of typeCounts) {\n\t\tconst item = foot.append('span').style('display', 'inline-flex').style('align-items', 'center').style('gap', '4px')\n\t\titem\n\t\t\t.append('span')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('width', '7px')\n\t\t\t.style('height', '7px')\n\t\t\t.style('border-radius', '50%')\n\t\t\t.style('background', tc.color)\n\t\titem.append('span').text(`${tc.count} ${type}`)\n\t}\n}\n\n// header coverage line: which studies detected this protein, sample-set and\n// PTM counts, and the isoform-collapsing note\nexport function renderCoverageLine(holder: any, td: TileData) {\n\tconst parts = [`${td.cohortCount} sample set${td.cohortCount === 1 ? '' : 's'}`]\n\tif (td.ptmSiteCount) parts.push(`${td.ptmSiteCount} PTM site measurement${td.ptmSiteCount === 1 ? '' : 's'}`)\n\tif (td.isoformCount > 1) parts.push(`${td.isoformCount} isoforms (tiles show the most significant per sample set)`)\n\tholder\n\t\t.append('div')\n\t\t.style('font-size', '.8em')\n\t\t.style('color', '#6b7280')\n\t\t.style('margin-bottom', '4px')\n\t\t.text(parts.join(' \u00B7 '))\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["tabsHolder", "brainHolder", "redraw"]
7
+ }