@sjcrh/proteinpaint-client 2.205.0 → 2.206.0

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