@sjcrh/proteinpaint-client 2.226.0 → 2.227.1

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 (949) hide show
  1. package/dist/2dmaf-75YAQQ3P.js +1362 -0
  2. package/dist/AggMatrixInput-KYDS23KP.js +402 -0
  3. package/dist/AggregateMatrix-XGGF6KBX.js +37 -0
  4. package/dist/AppHeader-CNY5RTJN.js +826 -0
  5. package/dist/BoxPlot-OQIJJO66.js +1247 -0
  6. package/dist/CorrelationVolcano-QN5D37V7.js +613 -0
  7. package/dist/CorrelationVolcano-QN5D37V7.js.map +7 -0
  8. package/dist/Cuminc-J6DONJTA.js +1217 -0
  9. package/dist/DE-XUBJUUBB.js +85 -0
  10. package/dist/DEinput-DCOPTSWO.js +483 -0
  11. package/dist/DEinput-DCOPTSWO.js.map +7 -0
  12. package/dist/DM-2UUXUJOC.js +86 -0
  13. package/dist/DifferentialAnalysis-U6ZPFHNM.js +236 -0
  14. package/dist/Disco-RR2NN66T.js +3445 -0
  15. package/dist/Disco.UI-MQ7WZQOP.js +239 -0
  16. package/dist/DmrPlot-MKAKFUJR.js +366 -0
  17. package/dist/GB-2X3ZRFXN.js +1388 -0
  18. package/dist/GB-2X3ZRFXN.js.map +7 -0
  19. package/dist/GSEA-DTIA4MNS.js +870 -0
  20. package/dist/GeneExpInput-4GM5MBBX.js +38 -0
  21. package/dist/Geomap-FF6DBN7M.js +80 -0
  22. package/dist/HicApp-LGXNL36X.js +2240 -0
  23. package/dist/IDCViewer-FQABJNUI.js +10810 -0
  24. package/dist/NumBinaryEditor-7NOHUH76.js +274 -0
  25. package/dist/NumBinaryEditor.unit.spec-SVE5SZYB.js +308 -0
  26. package/dist/NumContEditor-MSWCQUKL.js +100 -0
  27. package/dist/NumContEditor.unit.spec-UFPASWBH.js +160 -0
  28. package/dist/NumCustomBinEditor-DF24SO2N.js +29 -0
  29. package/dist/NumCustomBinEditor.unit.spec-N3S3ROBI.js +393 -0
  30. package/dist/NumDiscreteEditor-HL257XGY.js +165 -0
  31. package/dist/NumDiscreteEditor.unit.spec-6PTPX547.js +229 -0
  32. package/dist/NumRegularBinEditor-EWCKTXWY.js +29 -0
  33. package/dist/NumRegularBinEditor.unit.spec-AMGPMY7U.js +274 -0
  34. package/dist/NumSplineEditor-YDNJ2DW2.js +205 -0
  35. package/dist/NumSplineEditor.unit.spec-L4JZ3OND.js +220 -0
  36. package/dist/NumericDensity-SQW67WKL.js +29 -0
  37. package/dist/NumericDensity.unit.spec-KBK3JZZG.js +414 -0
  38. package/dist/NumericHandler-HG7FK4D4.js +30 -0
  39. package/dist/NumericHandler.unit.spec-N7PYAGGF.js +225 -0
  40. package/dist/ProteomeInput-6XGREJFP.js +610 -0
  41. package/dist/Regression-4DDXNQNO.js +1412 -0
  42. package/dist/RunChart2-ARCUC4Z3.js +744 -0
  43. package/dist/SC-AV6COOPI.js +1290 -0
  44. package/dist/Violin-2P5I6NL5.js +1105 -0
  45. package/dist/Volcano-TZQF3HY6.js +2745 -0
  46. package/dist/Volcano-TZQF3HY6.js.map +7 -0
  47. package/dist/Wsi-KN26SIP3.js +650 -0
  48. package/dist/Wsi-KN26SIP3.js.map +7 -0
  49. package/dist/aboutSunburst-V557OK5L.js +93 -0
  50. package/dist/adSandbox-76PMWKTX.js +29 -0
  51. package/dist/animatedBubbleChart-CFRJJDAC.js +542 -0
  52. package/dist/app-2SUVPURX.js +38 -0
  53. package/dist/app-PR42RXHC.js +28 -0
  54. package/dist/app.js +12 -12
  55. package/dist/bam-AYHWKHXL.js +872 -0
  56. package/dist/barchart-S4CLMJO7.js +38 -0
  57. package/dist/barchart2-R2BGA2WO.js +305 -0
  58. package/dist/block-QKO2PO4A.js +6208 -0
  59. package/dist/block-QKO2PO4A.js.map +7 -0
  60. package/dist/block.init-SSWOFFJR.js +29 -0
  61. package/dist/block.mds.expressionrank-GJBLSUUM.js +350 -0
  62. package/dist/block.mds.geneboxplot-SAAU4OH5.js +819 -0
  63. package/dist/block.mds.junction-IIZPRLPH.js +1534 -0
  64. package/dist/block.mds.svcnv-KOG7O25F.js +6325 -0
  65. package/dist/block.svg-5GJ744H3.js +155 -0
  66. package/dist/block.tk.aicheck-CTIJCHIC.js +274 -0
  67. package/dist/block.tk.bam-RTB7C6CW.js +1906 -0
  68. package/dist/block.tk.bigwig.ui-OJVOCOWS.js +202 -0
  69. package/dist/block.tk.hicstraw-GUE6G2DA.js +814 -0
  70. package/dist/block.tk.junction-XILEKNJY.js +2353 -0
  71. package/dist/block.tk.junction.textmatrixui-OF6BW6OY.js +190 -0
  72. package/dist/block.tk.ld-QZVJUGZU.js +90 -0
  73. package/dist/block.tk.menu-B2NV6ZX3.js +1050 -0
  74. package/dist/block.tk.pgv-46OQHX7S.js +934 -0
  75. package/dist/brainImaging-TWTGRSHJ.js +550 -0
  76. package/dist/brainRegions-YTTLJMBU.js +213 -0
  77. package/dist/bubbleHeatmap-OZVG67KF.js +374 -0
  78. package/dist/bubbleHeatmap-OZVG67KF.js.map +7 -0
  79. package/dist/cellTypeBubbleHeatmap-4QFAAED5.js +274 -0
  80. package/dist/cellTypeBubbleHeatmap-4QFAAED5.js.map +7 -0
  81. package/dist/chunk-255OQYGC.js +267 -0
  82. package/dist/chunk-2B3CYHUF.js +30 -0
  83. package/dist/chunk-2BXMWQTJ.js +1339 -0
  84. package/dist/chunk-2E3AJFOA.js +550 -0
  85. package/dist/chunk-2IAELUCN.js +348 -0
  86. package/dist/chunk-2W6U53AG.js +195 -0
  87. package/dist/chunk-3R6VYZYB.js +96 -0
  88. package/dist/chunk-3YAQY5NZ.js +626 -0
  89. package/dist/chunk-52WVSXYC.js +305 -0
  90. package/dist/chunk-6CQ5ADIY.js +56 -0
  91. package/dist/chunk-6UHSGC6G.js +276 -0
  92. package/dist/chunk-6YRM7Z4F.js +4521 -0
  93. package/dist/chunk-6YRM7Z4F.js.map +7 -0
  94. package/dist/chunk-7E37WMAX.js +141 -0
  95. package/dist/chunk-7EP77LOA.js +194 -0
  96. package/dist/chunk-7LJ4LTD6.js +54 -0
  97. package/dist/chunk-7MEBMH77.js +14 -0
  98. package/dist/chunk-7NVFEGCE.js +30 -0
  99. package/dist/chunk-A52K2E32.js +340 -0
  100. package/dist/chunk-A6DDXPLN.js +961 -0
  101. package/dist/chunk-A6DDXPLN.js.map +7 -0
  102. package/dist/chunk-A7UNLPQQ.js +243 -0
  103. package/dist/chunk-BH4KIOUQ.js +480 -0
  104. package/dist/chunk-CFYWQJ7F.js +472 -0
  105. package/dist/chunk-CFYWQJ7F.js.map +7 -0
  106. package/dist/chunk-CG2H6EFQ.js +55 -0
  107. package/dist/chunk-CNDQFKUB.js +468 -0
  108. package/dist/chunk-CVLHDO2O.js +2685 -0
  109. package/dist/chunk-CVRTDBLZ.js +2008 -0
  110. package/dist/chunk-CXCAQOFB.js +26888 -0
  111. package/dist/chunk-CXCAQOFB.js.map +7 -0
  112. package/dist/chunk-DMG4ZMX5.js +830 -0
  113. package/dist/chunk-DMG4ZMX5.js.map +7 -0
  114. package/dist/chunk-DYX6B6RN.js +328 -0
  115. package/dist/chunk-FA2B6PKK.js +42 -0
  116. package/dist/chunk-FA6M7PSZ.js +134 -0
  117. package/dist/chunk-FCQPQD7Z.js +181 -0
  118. package/dist/chunk-FCQPQD7Z.js.map +7 -0
  119. package/dist/chunk-FF4J6QSF.js +240 -0
  120. package/dist/chunk-FYHUHKUC.js +6375 -0
  121. package/dist/chunk-G3CJDTG4.js +48 -0
  122. package/dist/chunk-HRD5MN33.js +1219 -0
  123. package/dist/chunk-HRD5MN33.js.map +7 -0
  124. package/dist/chunk-ILAYJZBC.js +184 -0
  125. package/dist/chunk-IT7EE7LY.js +2334 -0
  126. package/dist/chunk-JG5CF5Q3.js +397 -0
  127. package/dist/chunk-JI632MAR.js +400 -0
  128. package/dist/chunk-JI632MAR.js.map +7 -0
  129. package/dist/chunk-L3ORR2TC.js +2799 -0
  130. package/dist/chunk-L6BT6WZP.js +54 -0
  131. package/dist/chunk-LF2DWEKN.js +255 -0
  132. package/dist/chunk-MJZ66SUG.js +35 -0
  133. package/dist/chunk-N5T7TT5H.js +56 -0
  134. package/dist/chunk-NB4C446B.js +299 -0
  135. package/dist/chunk-NJYYF2LF.js +263 -0
  136. package/dist/chunk-NMVEXITA.js +379 -0
  137. package/dist/chunk-NS2H3C6X.js +182 -0
  138. package/dist/chunk-O7346S3P.js +1253 -0
  139. package/dist/chunk-OV3W5AMN.js +103 -0
  140. package/dist/chunk-PQDYA3ZQ.js +274 -0
  141. package/dist/chunk-QFRR3ZRE.js +466 -0
  142. package/dist/chunk-QLKEA3WE.js +102 -0
  143. package/dist/chunk-QM7CXRSF.js +96 -0
  144. package/dist/chunk-QV6VZLS5.js +2932 -0
  145. package/dist/chunk-RTE32A22.js +123 -0
  146. package/dist/chunk-RUFY5VCS.js +161 -0
  147. package/dist/chunk-RUFY5VCS.js.map +7 -0
  148. package/dist/chunk-SB5DR4NL.js +562 -0
  149. package/dist/chunk-SCATA75L.js +100 -0
  150. package/dist/chunk-SCATA75L.js.map +7 -0
  151. package/dist/chunk-SDUMZTIK.js +2095 -0
  152. package/dist/chunk-TIU2GGWN.js +5258 -0
  153. package/dist/chunk-TIU2GGWN.js.map +7 -0
  154. package/dist/chunk-TYLCIGGN.js +296 -0
  155. package/dist/chunk-UHZDDPUU.js +444 -0
  156. package/dist/chunk-UW6GRHZ4.js +516 -0
  157. package/dist/chunk-UYA5LCAR.js +281 -0
  158. package/dist/chunk-V7CB5D7A.js +50 -0
  159. package/dist/chunk-VBUDRJJG.js +203 -0
  160. package/dist/chunk-VVWZ4BOI.js +2349 -0
  161. package/dist/chunk-W3K3N275.js +418 -0
  162. package/dist/chunk-WENNRY5E.js +170 -0
  163. package/dist/chunk-Z4R7TCTB.js +257 -0
  164. package/dist/chunk-ZFNEHOW4.js +848 -0
  165. package/dist/chunk-ZLEGHQOO.js +217 -0
  166. package/dist/cohort-TLSGXKV5.js +66 -0
  167. package/dist/cohortSunburst-TNMXPHJW.js +402 -0
  168. package/dist/condition-NN7YK7AI.js +323 -0
  169. package/dist/controls-472G34VU.js +30 -0
  170. package/dist/controls.config-2BQ7QYOB.js +30 -0
  171. package/dist/correlation-5UPYEHC6.js +91 -0
  172. package/dist/customdata.inputui-EWYP4MRY.js +280 -0
  173. package/dist/dataDownload-X5UXBEK4.js +326 -0
  174. package/dist/databrowser.ui-PFHJKHIW.js +424 -0
  175. package/dist/dictionary-M2MCNRN2.js +109 -0
  176. package/dist/dnaMethylation-A7AWG2P5.js +29 -0
  177. package/dist/dnaMethylation.integration.spec-JWCMRFAM.js +194 -0
  178. package/dist/dnaMethylation.unit.spec-PIVJBW7Z.js +95 -0
  179. package/dist/dofetch-XID2XEJT.js +49 -0
  180. package/dist/e2pca-VJRNE6BU.js +340 -0
  181. package/dist/ep-BZE65IX2.js +1247 -0
  182. package/dist/expclust.gdc.spec-5BGBANUV.js +298 -0
  183. package/dist/facet-RXUO4LRY.js +556 -0
  184. package/dist/gb-NDRFDS5A.js +77 -0
  185. package/dist/geneExpClustering-ONJGTSGM.js +240 -0
  186. package/dist/geneExpression-NXDXXKEA.js +309 -0
  187. package/dist/geneExpression-PYI42HV6.js +29 -0
  188. package/dist/geneExpression.unit.spec-PTFHHTP7.js +150 -0
  189. package/dist/geneORA-SDR43UOL.js +269 -0
  190. package/dist/geneRanking-QI43IRNV.js +544 -0
  191. package/dist/geneVariant-OT4V554H.js +32 -0
  192. package/dist/geneVariant-V7EKM7RW.js +289 -0
  193. package/dist/geneVariant-V7EKM7RW.js.map +7 -0
  194. package/dist/geneVariant.integration.spec-6OE4HKYB.js +672 -0
  195. package/dist/genefusion.ui-IQDKCZPX.js +299 -0
  196. package/dist/geneset-TLZPZOQP.js +199 -0
  197. package/dist/genomeBrowser.spec-HIOTFKFK.js +272 -0
  198. package/dist/grin2-G2PVFRKR.js +945 -0
  199. package/dist/grin2-RJQZRVFF.js +66 -0
  200. package/dist/hierCluster-C6ICZSOB.js +51 -0
  201. package/dist/hierCluster-MESFVAO7.js +55 -0
  202. package/dist/hierCluster.config-7HROWR2T.js +32 -0
  203. package/dist/hierCluster.integration.spec-CJT22MJI.js +479 -0
  204. package/dist/hierCluster.interactivity-MDX5QSEF.js +45 -0
  205. package/dist/hierCluster.renderers-SU5IYI33.js +18 -0
  206. package/dist/imagePlot-3Y5FNIJL.js +152 -0
  207. package/dist/importPlot-WE5QSSFY.js +8 -0
  208. package/dist/isoformExpression-TMLFOZVK.js +31 -0
  209. package/dist/isoformExpression.unit.spec-MSVTQC3E.js +233 -0
  210. package/dist/junction-YKZV4LEL.js +32 -0
  211. package/dist/junction.unit.spec-3GPBCHXJ.js +224 -0
  212. package/dist/junction.unit.spec-3GPBCHXJ.js.map +7 -0
  213. package/dist/launch.adhoc-DS6UME2S.js +33 -0
  214. package/dist/leftlabel.sample-F6TEFWEW.js +260 -0
  215. package/dist/leftlabel.sample-F6TEFWEW.js.map +7 -0
  216. package/dist/lollipop-ZKDAU3O5.js +162 -0
  217. package/dist/maf-DKOORWGV.js +451 -0
  218. package/dist/maftimeline-EHJ2CWJJ.js +583 -0
  219. package/dist/matrix-7JDLGNU7.js +55 -0
  220. package/dist/matrix-EB7YOLMN.js +50 -0
  221. package/dist/matrix.cells-A5E63KDN.js +25 -0
  222. package/dist/matrix.config-GSW2WJM4.js +33 -0
  223. package/dist/matrix.data-R4FW2PQH.js +22 -0
  224. package/dist/matrix.groups-3UH2KOIY.js +25 -0
  225. package/dist/matrix.integration.spec-R32TIABT.js +3156 -0
  226. package/dist/matrix.interactivity-RDPMBDVK.js +33 -0
  227. package/dist/matrix.layout-FD275D3P.js +35 -0
  228. package/dist/matrix.legend-SE7SQTNN.js +19 -0
  229. package/dist/matrix.renderers-RK2BRCHZ.js +30 -0
  230. package/dist/matrix.serieses-BEZCQDLJ.js +18 -0
  231. package/dist/matrix.sort-KRNS4VPF.js +25 -0
  232. package/dist/matrix.sort.unit.spec-LZG3GOXM.js +464 -0
  233. package/dist/matrix.sorterUi.unit.spec-RR2KK4R5.js +334 -0
  234. package/dist/matrix.unit.spec-3PK6LUNE.js +146 -0
  235. package/dist/mavb-CUPAESFH.js +726 -0
  236. package/dist/mds.samplescatterplot-WGQ7A7UC.js +1545 -0
  237. package/dist/mds.survivalplot-ZEGSEJO2.js +472 -0
  238. package/dist/multivalue-DKUQCROX.js +79 -0
  239. package/dist/numericDictTermCluster-IFIEM3E4.js +62 -0
  240. package/dist/oncomatrix-WSPJAWHW.js +286 -0
  241. package/dist/oncomatrix.spec-LDWTZ7LO.js +439 -0
  242. package/dist/plot.2dvaf-N333YSMC.js +368 -0
  243. package/dist/plot.app-HU5RQS5I.js +32 -0
  244. package/dist/plot.barplot-4T2UEIYX.js +93 -0
  245. package/dist/plot.boxplot-C4OXCRFB.js +142 -0
  246. package/dist/plot.brainImaging-A6FEKFEA.js +51 -0
  247. package/dist/plot.disco-VDL7YKRX.js +100 -0
  248. package/dist/plot.ssgq-OII7PFPG.js +130 -0
  249. package/dist/plot.vaf2cov-RZ5JPWMC.js +249 -0
  250. package/dist/polar2-6KR2KX5D.js +228 -0
  251. package/dist/profileForms-YJDJIBSY.js +937 -0
  252. package/dist/profilePlot-U4U4AYMO.js +45 -0
  253. package/dist/proteinView-F5QEDDWR.js +1346 -0
  254. package/dist/proteinView-F5QEDDWR.js.map +7 -0
  255. package/dist/proteomeCohortCompare-QCXKLAWG.js +866 -0
  256. package/dist/pseudbulk.unit.spec-3A2FWQZI.js +82 -0
  257. package/dist/pseudobulk-WB6NXFJ6.js +31 -0
  258. package/dist/qualitative-CQUBCCGT.js +34 -0
  259. package/dist/qualitative-QQ3CWFVP.js +241 -0
  260. package/dist/radar2-FNC67FNX.js +323 -0
  261. package/dist/radarFacility2-3X77B4WP.js +331 -0
  262. package/dist/render-G5NCZTMW.js +29 -0
  263. package/dist/report-CR645KQ4.js +213 -0
  264. package/dist/sampleView-6PG2HJZL.js +39 -0
  265. package/dist/samplelst-FCQ7YPPQ.js +114 -0
  266. package/dist/samplematrix-GXMN5QTS.js +2188 -0
  267. package/dist/sc-4ZTSQOXC.js +77 -0
  268. package/dist/scatter-2PUQU22I.js +84 -0
  269. package/dist/scatter-ZSZTA37T.js +919 -0
  270. package/dist/selectGenomeWithTklst-XHWBEM2G.js +125 -0
  271. package/dist/singleCellCellType-NP7Y4N6Z.js +29 -0
  272. package/dist/singleCellCellType.unit.spec-5I3FECB4.js +150 -0
  273. package/dist/singleCellGeneExpression-7RWH633E.js +29 -0
  274. package/dist/singleCellGeneExpression.unit.spec-2X2BDTNO.js +144 -0
  275. package/dist/singleCellNumericValue-I6V4ME6T.js +29 -0
  276. package/dist/singleCellNumericValue.unit.spec-4HKAJXB3.js +412 -0
  277. package/dist/singleCellPlot-QRFR3AJH.js +44 -0
  278. package/dist/singlecell-AQEAB445.js +77 -0
  279. package/dist/singlecell-DX4EXNUV.js +1562 -0
  280. package/dist/snp-2URSYPBL.js +29 -0
  281. package/dist/snp.unit.spec-ZV2RCDT4.js +167 -0
  282. package/dist/snplocus-BB4I2QIP.js +200 -0
  283. package/dist/snplst-A5S7CQEM.js +36 -0
  284. package/dist/spliceevent.a53ss.diagram-6C4OQOVF.js +142 -0
  285. package/dist/spliceevent.exonskip.diagram-FKSR3JEL.js +274 -0
  286. package/dist/spliceevent.noeventdiagram-G3JQUZKK.js +451 -0
  287. package/dist/ssGSEA-KLMOSI53.js +29 -0
  288. package/dist/ssGSEA.unit.spec-HBALWLVB.js +79 -0
  289. package/dist/stattable-ZCMPIC3I.js +112 -0
  290. package/dist/studyCatalog-UZ4BSYY6.js +457 -0
  291. package/dist/summarizeCnvGeneexp-Z43GYKZB.js +154 -0
  292. package/dist/summarizeGeneexpSurvival-4OHRMCFV.js +101 -0
  293. package/dist/summarizeMutationCnv-EZXMLADC.js +155 -0
  294. package/dist/summarizeMutationDiagnosis-RPQP4TM5.js +31 -0
  295. package/dist/summarizeMutationSurvival-LX4TRGJZ.js +95 -0
  296. package/dist/summary-FZQVK5KR.js +40 -0
  297. package/dist/summary.integration.spec-46T65LR5.js +405 -0
  298. package/dist/summaryInput-BHU7G5FC.js +238 -0
  299. package/dist/sunburst-A5NS3KJQ.js +274 -0
  300. package/dist/sunburst-R5X2C7FK.js +34 -0
  301. package/dist/survival-MKW5J5ZH.js +1248 -0
  302. package/dist/survival-N2NKMVOV.js +49 -0
  303. package/dist/survival.integration.spec-K5FMOOTF.js +609 -0
  304. package/dist/svgraph-3WRCJA5D.js +1377 -0
  305. package/dist/svmr-TLMT7GE3.js +3574 -0
  306. package/dist/svmr-TLMT7GE3.js.map +7 -0
  307. package/dist/swimmer-XV5KVWEM.js +993 -0
  308. package/dist/table-XUGFZSGV.js +192 -0
  309. package/dist/termCollection-23ZRHZHF.js +247 -0
  310. package/dist/termCollection-NWTAUSSW.js +29 -0
  311. package/dist/termCollection.unit.spec-WE3JMSUI.js +295 -0
  312. package/dist/termCollectionFractionSelection-5FLFLMIY.js +38 -0
  313. package/dist/termCollectionFractionSelection.unit.spec-CCFGGXAA.js +184 -0
  314. package/dist/tk-CTHINOMN.js +1224 -0
  315. package/dist/tk-CTHINOMN.js.map +7 -0
  316. package/dist/tk-F3TSB4IB.js +38 -0
  317. package/dist/tp.ui-4QDX3FGM.js +1453 -0
  318. package/dist/tvs.categorical-24OT3XZI.js +28 -0
  319. package/dist/tvs.condition-X4SXCVGN.js +160 -0
  320. package/dist/tvs.dt-FRBJRSWI.js +34 -0
  321. package/dist/tvs.dtcnv.categorical-4RRSO735.js +31 -0
  322. package/dist/tvs.dtcnv.continuous-HXY2PBUA.js +72 -0
  323. package/dist/tvs.dtfusion-67LXBQA4.js +31 -0
  324. package/dist/tvs.dtitd-MCJZCNV2.js +31 -0
  325. package/dist/tvs.dtsnvindel-K5YIIBQJ.js +31 -0
  326. package/dist/tvs.dtsv-RP7FUB2N.js +31 -0
  327. package/dist/tvs.multivalue-CROMWUCP.js +84 -0
  328. package/dist/tvs.numeric-IYYYV6ZJ.js +32 -0
  329. package/dist/tvs.samplelst-5DXKRFYM.js +95 -0
  330. package/dist/tvs.survival-W5RXODBT.js +110 -0
  331. package/dist/tvs.termCollection-OSJYIWDX.js +118 -0
  332. package/dist/vocabulary-HTRYJUD7.js +32 -0
  333. package/dist/wsi.direct-UHVG525G.js +11600 -0
  334. package/dist/wsi.direct-UHVG525G.js.map +7 -0
  335. package/package.json +3 -3
  336. package/dist/2dmaf-CSBPMYHO.js +0 -1362
  337. package/dist/AggMatrixInput-2HST4LLJ.js +0 -402
  338. package/dist/AggregateMatrix-UPOAX44L.js +0 -37
  339. package/dist/AppHeader-H5QBVKUS.js +0 -826
  340. package/dist/BoxPlot-JTBQA6PL.js +0 -1247
  341. package/dist/CorrelationVolcano-AWBPVDMT.js +0 -613
  342. package/dist/CorrelationVolcano-AWBPVDMT.js.map +0 -7
  343. package/dist/Cuminc-3BXJVWIH.js +0 -1217
  344. package/dist/DE-237VV46D.js +0 -85
  345. package/dist/DEinput-W443UW5T.js +0 -479
  346. package/dist/DEinput-W443UW5T.js.map +0 -7
  347. package/dist/DM-TIW623IR.js +0 -86
  348. package/dist/DifferentialAnalysis-PHUA2GPK.js +0 -236
  349. package/dist/Disco-WHV52SCI.js +0 -3445
  350. package/dist/Disco.UI-UDUXNCZX.js +0 -239
  351. package/dist/DmrPlot-FZCD6FTX.js +0 -366
  352. package/dist/GB-6UW5LOUV.js +0 -1388
  353. package/dist/GB-6UW5LOUV.js.map +0 -7
  354. package/dist/GSEA-3CNHMK6M.js +0 -870
  355. package/dist/GeneExpInput-ZOVP7BFY.js +0 -38
  356. package/dist/Geomap-JREOIESM.js +0 -80
  357. package/dist/HicApp-RKAMIUXQ.js +0 -2240
  358. package/dist/IDCViewer-KXV4FU3V.js +0 -10810
  359. package/dist/NumBinaryEditor-FNVYUK2J.js +0 -274
  360. package/dist/NumBinaryEditor.unit.spec-PWR23U3J.js +0 -308
  361. package/dist/NumContEditor-YLBJW64K.js +0 -100
  362. package/dist/NumContEditor.unit.spec-6JWBCPFY.js +0 -160
  363. package/dist/NumCustomBinEditor-42AFCXRN.js +0 -29
  364. package/dist/NumCustomBinEditor.unit.spec-AFBTF2CL.js +0 -393
  365. package/dist/NumDiscreteEditor-FJIBZTBP.js +0 -165
  366. package/dist/NumDiscreteEditor.unit.spec-MC4INDCB.js +0 -229
  367. package/dist/NumRegularBinEditor-2WRE72TL.js +0 -29
  368. package/dist/NumRegularBinEditor.unit.spec-L3S6NRCM.js +0 -274
  369. package/dist/NumSplineEditor-TVMVAN7I.js +0 -205
  370. package/dist/NumSplineEditor.unit.spec-GEL36GZZ.js +0 -220
  371. package/dist/NumericDensity-BNFAVOFO.js +0 -29
  372. package/dist/NumericDensity.unit.spec-XBYUFBTQ.js +0 -414
  373. package/dist/NumericHandler-4VFFJNX6.js +0 -30
  374. package/dist/NumericHandler.unit.spec-76T2IVRS.js +0 -225
  375. package/dist/ProteomeInput-M5UIO73Q.js +0 -610
  376. package/dist/Regression-5LB5TLA6.js +0 -1412
  377. package/dist/RunChart2-HIFXOEKZ.js +0 -744
  378. package/dist/SC-SMMW5MJG.js +0 -1290
  379. package/dist/Violin-COAFYZOV.js +0 -1105
  380. package/dist/Volcano-62II76B4.js +0 -2748
  381. package/dist/Volcano-62II76B4.js.map +0 -7
  382. package/dist/Wsi-OYW2L7FR.js +0 -637
  383. package/dist/Wsi-OYW2L7FR.js.map +0 -7
  384. package/dist/aboutSunburst-3FYJGR6B.js +0 -93
  385. package/dist/adSandbox-4VHYWBQC.js +0 -29
  386. package/dist/animatedBubbleChart-QCCIC5IT.js +0 -542
  387. package/dist/app-IF7YPCGZ.js +0 -28
  388. package/dist/app-JZ43TSJP.js +0 -38
  389. package/dist/bam-2VPZGSW3.js +0 -872
  390. package/dist/barchart-VYTWYYGG.js +0 -38
  391. package/dist/barchart2-XC7J4VEO.js +0 -305
  392. package/dist/block-YGQFUK5L.js +0 -6203
  393. package/dist/block-YGQFUK5L.js.map +0 -7
  394. package/dist/block.init-BVP3YZHQ.js +0 -29
  395. package/dist/block.mds.expressionrank-RKDDKY4J.js +0 -350
  396. package/dist/block.mds.geneboxplot-3FZ3EZZ6.js +0 -819
  397. package/dist/block.mds.junction-MCOG37RA.js +0 -1534
  398. package/dist/block.mds.svcnv-IEOR5IQZ.js +0 -6325
  399. package/dist/block.svg-3XHRHYCV.js +0 -155
  400. package/dist/block.tk.aicheck-TMDUGNZX.js +0 -274
  401. package/dist/block.tk.bam-73KW4QEJ.js +0 -1906
  402. package/dist/block.tk.bigwig.ui-E5W6R7DQ.js +0 -202
  403. package/dist/block.tk.hicstraw-BNNE6ZMW.js +0 -814
  404. package/dist/block.tk.junction-DMPRZRNY.js +0 -2353
  405. package/dist/block.tk.junction.textmatrixui-XS2E7MQL.js +0 -190
  406. package/dist/block.tk.ld-QD3XDLO4.js +0 -90
  407. package/dist/block.tk.menu-S6XI732E.js +0 -1050
  408. package/dist/block.tk.pgv-KH4TMR3A.js +0 -934
  409. package/dist/brainImaging-NK4JENN3.js +0 -550
  410. package/dist/brainRegions-YUEMTKYH.js +0 -213
  411. package/dist/bubbleHeatmap-LQCVS4WK.js +0 -374
  412. package/dist/bubbleHeatmap-LQCVS4WK.js.map +0 -7
  413. package/dist/cellTypeBubbleHeatmap-DFRSPWAY.js +0 -274
  414. package/dist/cellTypeBubbleHeatmap-DFRSPWAY.js.map +0 -7
  415. package/dist/chunk-37ZEGLVY.js +0 -267
  416. package/dist/chunk-3RPX4ZVV.js +0 -2334
  417. package/dist/chunk-4LK5YFHF.js +0 -102
  418. package/dist/chunk-4WFG5Y3A.js +0 -2095
  419. package/dist/chunk-4WFXCUT4.js +0 -141
  420. package/dist/chunk-5LY2ASQX.js +0 -305
  421. package/dist/chunk-6V7ITU5F.js +0 -2349
  422. package/dist/chunk-7UK7CU4F.js +0 -398
  423. package/dist/chunk-7UK7CU4F.js.map +0 -7
  424. package/dist/chunk-AAQDXVQT.js +0 -134
  425. package/dist/chunk-ADJBQCFM.js +0 -243
  426. package/dist/chunk-ATIITEOR.js +0 -692
  427. package/dist/chunk-ATIITEOR.js.map +0 -7
  428. package/dist/chunk-BWVJAFEQ.js +0 -35
  429. package/dist/chunk-CDCNBN6G.js +0 -50
  430. package/dist/chunk-CGSBIFFO.js +0 -1339
  431. package/dist/chunk-DPWSIN62.js +0 -26787
  432. package/dist/chunk-DPWSIN62.js.map +0 -7
  433. package/dist/chunk-EARMOT6Q.js +0 -176
  434. package/dist/chunk-EARMOT6Q.js.map +0 -7
  435. package/dist/chunk-ECCXTB5S.js +0 -562
  436. package/dist/chunk-ECTOEM7X.js +0 -96
  437. package/dist/chunk-EKIWZUEO.js +0 -54
  438. package/dist/chunk-FALP6GXG.js +0 -96
  439. package/dist/chunk-FRD6LQF7.js +0 -103
  440. package/dist/chunk-FRPYXYYQ.js +0 -263
  441. package/dist/chunk-FV2GLMSI.js +0 -397
  442. package/dist/chunk-G6SP5IQT.js +0 -626
  443. package/dist/chunk-GZL6YFZJ.js +0 -30
  444. package/dist/chunk-H353EVLK.js +0 -240
  445. package/dist/chunk-HKR5R5YR.js +0 -466
  446. package/dist/chunk-HULTLO4D.js +0 -217
  447. package/dist/chunk-IIN4CG67.js +0 -56
  448. package/dist/chunk-ISWFHYEZ.js +0 -123
  449. package/dist/chunk-JBUTLI3V.js +0 -1253
  450. package/dist/chunk-JCNZJKLK.js +0 -55
  451. package/dist/chunk-JEVDRC64.js +0 -56
  452. package/dist/chunk-KBZAB2H2.js +0 -340
  453. package/dist/chunk-KDKJLITX.js +0 -54
  454. package/dist/chunk-KNFJN6CM.js +0 -299
  455. package/dist/chunk-KSYGLBZ4.js +0 -4389
  456. package/dist/chunk-KSYGLBZ4.js.map +0 -7
  457. package/dist/chunk-KUOXZIH4.js +0 -348
  458. package/dist/chunk-KZ54E2FU.js +0 -184
  459. package/dist/chunk-L7FMBWWK.js +0 -6375
  460. package/dist/chunk-LMONIWPI.js +0 -30
  461. package/dist/chunk-LTY7WOAT.js +0 -281
  462. package/dist/chunk-LYDN734A.js +0 -194
  463. package/dist/chunk-LYMYO6TY.js +0 -652
  464. package/dist/chunk-LYMYO6TY.js.map +0 -7
  465. package/dist/chunk-MRZUZDRA.js +0 -444
  466. package/dist/chunk-NGBI4FST.js +0 -195
  467. package/dist/chunk-OKM4ACTA.js +0 -170
  468. package/dist/chunk-OUDHHMZU.js +0 -159
  469. package/dist/chunk-OUDHHMZU.js.map +0 -7
  470. package/dist/chunk-OYXRYWGU.js +0 -2932
  471. package/dist/chunk-P2HMCEMM.js +0 -5254
  472. package/dist/chunk-P2HMCEMM.js.map +0 -7
  473. package/dist/chunk-P5FHYGJK.js +0 -848
  474. package/dist/chunk-P7QDNXSH.js +0 -276
  475. package/dist/chunk-Q7GK35TB.js +0 -257
  476. package/dist/chunk-QXRM5NMW.js +0 -274
  477. package/dist/chunk-RI3GAHQE.js +0 -255
  478. package/dist/chunk-SH7SL4I5.js +0 -1219
  479. package/dist/chunk-SH7SL4I5.js.map +0 -7
  480. package/dist/chunk-SJHWZZ4M.js +0 -70
  481. package/dist/chunk-SJHWZZ4M.js.map +0 -7
  482. package/dist/chunk-T2W4JHWJ.js +0 -472
  483. package/dist/chunk-T2W4JHWJ.js.map +0 -7
  484. package/dist/chunk-TDBS3UFZ.js +0 -379
  485. package/dist/chunk-THHYPA5K.js +0 -48
  486. package/dist/chunk-U2OB3S3M.js +0 -14
  487. package/dist/chunk-UA2ADBTO.js +0 -42
  488. package/dist/chunk-USGUVW5Q.js +0 -182
  489. package/dist/chunk-UWVDD4C2.js +0 -480
  490. package/dist/chunk-W2SBSEKT.js +0 -550
  491. package/dist/chunk-XAHZYGKW.js +0 -468
  492. package/dist/chunk-XKWLP433.js +0 -328
  493. package/dist/chunk-YWB2QHV2.js +0 -2799
  494. package/dist/chunk-Z6M77JDG.js +0 -2008
  495. package/dist/chunk-Z7RFFJXU.js +0 -516
  496. package/dist/chunk-ZG7EBTHK.js +0 -203
  497. package/dist/chunk-ZJLJHQWM.js +0 -418
  498. package/dist/chunk-ZKU6RST3.js +0 -2685
  499. package/dist/chunk-ZLWEUYPT.js +0 -296
  500. package/dist/cohort-X327AG3O.js +0 -66
  501. package/dist/cohortSunburst-GNWIVDNA.js +0 -402
  502. package/dist/condition-3M4L2HIM.js +0 -323
  503. package/dist/controls-OKNHZJOU.js +0 -30
  504. package/dist/controls.config-FUKM5LEP.js +0 -30
  505. package/dist/correlation-PC4MXCFM.js +0 -91
  506. package/dist/customdata.inputui-HCRTX56R.js +0 -280
  507. package/dist/dataDownload-HJO7UW7S.js +0 -326
  508. package/dist/databrowser.ui-EY3H6B4S.js +0 -424
  509. package/dist/dictionary-L6CTMFY7.js +0 -109
  510. package/dist/dnaMethylation-FEB5GGXK.js +0 -29
  511. package/dist/dnaMethylation.integration.spec-4DC6TJNZ.js +0 -194
  512. package/dist/dnaMethylation.unit.spec-REOHQOBC.js +0 -95
  513. package/dist/dofetch-YFGOKCKV.js +0 -49
  514. package/dist/e2pca-QSAVTCPL.js +0 -340
  515. package/dist/ep-LAFLKVSW.js +0 -1247
  516. package/dist/expclust.gdc.spec-OM4J6WBL.js +0 -298
  517. package/dist/facet-WHTV2VIX.js +0 -556
  518. package/dist/gb-DLXWWBB6.js +0 -77
  519. package/dist/geneExpClustering-KB2MB2VM.js +0 -240
  520. package/dist/geneExpression-3D7PDZ2I.js +0 -309
  521. package/dist/geneExpression-3RSRGYGQ.js +0 -29
  522. package/dist/geneExpression.unit.spec-EINAWLPR.js +0 -150
  523. package/dist/geneORA-J4KVSZT3.js +0 -269
  524. package/dist/geneRanking-HKLJ7CN6.js +0 -544
  525. package/dist/geneVariant-3BRGRFPT.js +0 -32
  526. package/dist/geneVariant-VI5DGDAB.js +0 -289
  527. package/dist/geneVariant-VI5DGDAB.js.map +0 -7
  528. package/dist/geneVariant.integration.spec-3IBX4NNE.js +0 -672
  529. package/dist/genefusion.ui-OESQL7TW.js +0 -299
  530. package/dist/geneset-3BMV3KP4.js +0 -199
  531. package/dist/genomeBrowser.spec-I3WKAITC.js +0 -272
  532. package/dist/grin2-4BBCH3H5.js +0 -66
  533. package/dist/grin2-5L2U32LY.js +0 -945
  534. package/dist/hierCluster-KM56NTN6.js +0 -51
  535. package/dist/hierCluster-XCJF5IQ6.js +0 -55
  536. package/dist/hierCluster.config-E2EYOXX6.js +0 -32
  537. package/dist/hierCluster.integration.spec-IIEJ2YEI.js +0 -479
  538. package/dist/hierCluster.interactivity-AJFEJTGX.js +0 -45
  539. package/dist/hierCluster.renderers-XKI344FM.js +0 -18
  540. package/dist/imagePlot-3B3BXI6I.js +0 -152
  541. package/dist/importPlot-JDVH7Q2Z.js +0 -8
  542. package/dist/isoformExpression-UFHY5LB2.js +0 -31
  543. package/dist/isoformExpression.unit.spec-U6GDCNQR.js +0 -233
  544. package/dist/junction-W2STW5WW.js +0 -32
  545. package/dist/junction.unit.spec-R4DIBFLB.js +0 -178
  546. package/dist/junction.unit.spec-R4DIBFLB.js.map +0 -7
  547. package/dist/launch.adhoc-KN7HFHJH.js +0 -33
  548. package/dist/leftlabel.sample-CK2EK7J6.js +0 -254
  549. package/dist/leftlabel.sample-CK2EK7J6.js.map +0 -7
  550. package/dist/lollipop-EKIGAAK6.js +0 -162
  551. package/dist/maf-MK2MM7J4.js +0 -451
  552. package/dist/maftimeline-7RTMXWFA.js +0 -583
  553. package/dist/matrix-UM2EZODJ.js +0 -50
  554. package/dist/matrix-YBL4FZYJ.js +0 -55
  555. package/dist/matrix.cells-45ZFADK5.js +0 -25
  556. package/dist/matrix.config-QTBIRXKU.js +0 -33
  557. package/dist/matrix.data-WAMOLSKW.js +0 -22
  558. package/dist/matrix.groups-RXFXZABD.js +0 -25
  559. package/dist/matrix.integration.spec-JZDZRVOK.js +0 -3156
  560. package/dist/matrix.interactivity-P4VYGTB2.js +0 -33
  561. package/dist/matrix.layout-WWPRXXHX.js +0 -35
  562. package/dist/matrix.legend-4MCMVVKO.js +0 -19
  563. package/dist/matrix.renderers-JQTUODDS.js +0 -30
  564. package/dist/matrix.serieses-3IDRKSGO.js +0 -18
  565. package/dist/matrix.sort-EAWOB56R.js +0 -25
  566. package/dist/matrix.sort.unit.spec-FOWLULHA.js +0 -464
  567. package/dist/matrix.sorterUi.unit.spec-U5CQDTMX.js +0 -334
  568. package/dist/matrix.unit.spec-VTLD4EOZ.js +0 -146
  569. package/dist/mavb-JIIXJHBK.js +0 -726
  570. package/dist/mds.samplescatterplot-PTWA2V6E.js +0 -1545
  571. package/dist/mds.survivalplot-XVZ66GP5.js +0 -472
  572. package/dist/multivalue-2H7QX7MG.js +0 -79
  573. package/dist/numericDictTermCluster-EHCDRT6J.js +0 -62
  574. package/dist/oncomatrix-RZLZUC32.js +0 -286
  575. package/dist/oncomatrix.spec-Z5UQGTW2.js +0 -439
  576. package/dist/plot.2dvaf-IRBZBJ6B.js +0 -368
  577. package/dist/plot.app-I23IAZ3Z.js +0 -32
  578. package/dist/plot.barplot-PYLRAZB7.js +0 -93
  579. package/dist/plot.boxplot-VBWU7DUG.js +0 -142
  580. package/dist/plot.brainImaging-HDJMEMTK.js +0 -51
  581. package/dist/plot.disco-5BVG3WMT.js +0 -100
  582. package/dist/plot.ssgq-S3BKXJMW.js +0 -130
  583. package/dist/plot.vaf2cov-VD7DU2XR.js +0 -249
  584. package/dist/polar2-PYLEVG7E.js +0 -228
  585. package/dist/profileForms-CI2YYD3Y.js +0 -937
  586. package/dist/profilePlot-UCC4ZVHQ.js +0 -45
  587. package/dist/proteinView-FBY6TK3S.js +0 -1346
  588. package/dist/proteinView-FBY6TK3S.js.map +0 -7
  589. package/dist/proteomeCohortCompare-2VUSLC6I.js +0 -866
  590. package/dist/pseudbulk.unit.spec-VPZWNTIA.js +0 -82
  591. package/dist/pseudobulk-RUXGZ7OY.js +0 -31
  592. package/dist/qualitative-3AVR4GRX.js +0 -34
  593. package/dist/qualitative-5QNBKDOZ.js +0 -241
  594. package/dist/radar2-AOYMS54Y.js +0 -323
  595. package/dist/radarFacility2-PP2MAXIP.js +0 -331
  596. package/dist/render-ASLVKYEX.js +0 -29
  597. package/dist/report-UVYKDMQC.js +0 -213
  598. package/dist/sampleView-6UHR7FSR.js +0 -39
  599. package/dist/samplelst-ABC2CCNN.js +0 -114
  600. package/dist/samplematrix-36UCHZLC.js +0 -2188
  601. package/dist/sc-XLSAM725.js +0 -77
  602. package/dist/scatter-ADOBAOW2.js +0 -84
  603. package/dist/scatter-ZNVLI627.js +0 -919
  604. package/dist/selectGenomeWithTklst-DPDBDYTR.js +0 -125
  605. package/dist/singleCellCellType-STVPYZD4.js +0 -29
  606. package/dist/singleCellCellType.unit.spec-ZLY37AXL.js +0 -150
  607. package/dist/singleCellGeneExpression-PCGLU35S.js +0 -29
  608. package/dist/singleCellGeneExpression.unit.spec-PSLKK362.js +0 -144
  609. package/dist/singleCellNumericValue-SR3SJEOB.js +0 -29
  610. package/dist/singleCellNumericValue.unit.spec-PXVXJ4HJ.js +0 -412
  611. package/dist/singleCellPlot-JXB7M6OH.js +0 -44
  612. package/dist/singlecell-EDSX56QO.js +0 -1562
  613. package/dist/singlecell-PH55NFRX.js +0 -77
  614. package/dist/snp-3VEYBTAQ.js +0 -29
  615. package/dist/snp.unit.spec-V7OB44US.js +0 -167
  616. package/dist/snplocus-HX67RBT5.js +0 -200
  617. package/dist/snplst-H5YXCY33.js +0 -36
  618. package/dist/spliceevent.a53ss.diagram-DBDEEHSK.js +0 -142
  619. package/dist/spliceevent.exonskip.diagram-EYEL6BY6.js +0 -274
  620. package/dist/spliceevent.noeventdiagram-64OEXK7U.js +0 -451
  621. package/dist/ssGSEA-3YWQH6KM.js +0 -29
  622. package/dist/ssGSEA.unit.spec-23V2IXP5.js +0 -79
  623. package/dist/stattable-GPSBCNYC.js +0 -112
  624. package/dist/studyCatalog-W5PATRNY.js +0 -457
  625. package/dist/summarizeCnvGeneexp-YGI23QH5.js +0 -154
  626. package/dist/summarizeGeneexpSurvival-KQ6OLWYR.js +0 -101
  627. package/dist/summarizeMutationCnv-XDHBNEPU.js +0 -155
  628. package/dist/summarizeMutationDiagnosis-VKIJRJ2Q.js +0 -31
  629. package/dist/summarizeMutationSurvival-57YKJGLE.js +0 -95
  630. package/dist/summary-4WQOVIUF.js +0 -40
  631. package/dist/summary.integration.spec-FRNWBU7F.js +0 -405
  632. package/dist/summaryInput-X7DS2YA7.js +0 -238
  633. package/dist/sunburst-3OEAQA3O.js +0 -34
  634. package/dist/sunburst-MSGTXYMM.js +0 -274
  635. package/dist/survival-5KC5CNZU.js +0 -1248
  636. package/dist/survival-QXDS6N46.js +0 -49
  637. package/dist/survival.integration.spec-PKENHLTZ.js +0 -609
  638. package/dist/svgraph-VJLB7BBN.js +0 -1377
  639. package/dist/svmr-6BDEZAS6.js +0 -3834
  640. package/dist/svmr-6BDEZAS6.js.map +0 -7
  641. package/dist/swimmer-R3DN7N36.js +0 -993
  642. package/dist/table-YF5VORU6.js +0 -192
  643. package/dist/termCollection-3KGLZFDW.js +0 -29
  644. package/dist/termCollection-KSHVOPS5.js +0 -247
  645. package/dist/termCollection.unit.spec-HTBDG5PL.js +0 -295
  646. package/dist/termCollectionFractionSelection-MK4NKWUX.js +0 -38
  647. package/dist/termCollectionFractionSelection.unit.spec-AMF32FDN.js +0 -184
  648. package/dist/tk-FDHBAKXQ.js +0 -1198
  649. package/dist/tk-FDHBAKXQ.js.map +0 -7
  650. package/dist/tk-Z54DOECH.js +0 -38
  651. package/dist/tp.ui-M4TZVT53.js +0 -1453
  652. package/dist/tvs.categorical-HY3BWCZR.js +0 -28
  653. package/dist/tvs.condition-Y36TRIX4.js +0 -160
  654. package/dist/tvs.dt-XKVJZP7Y.js +0 -34
  655. package/dist/tvs.dtcnv.categorical-OMRZR4Y7.js +0 -31
  656. package/dist/tvs.dtcnv.continuous-AGYOBI5K.js +0 -72
  657. package/dist/tvs.dtfusion-2JX5Y2IH.js +0 -31
  658. package/dist/tvs.dtitd-SDSLBBWC.js +0 -31
  659. package/dist/tvs.dtsnvindel-LI7K464K.js +0 -31
  660. package/dist/tvs.dtsv-VRCLX7QY.js +0 -31
  661. package/dist/tvs.multivalue-4OTY6J2S.js +0 -84
  662. package/dist/tvs.numeric-CDATYOR2.js +0 -32
  663. package/dist/tvs.samplelst-76JOJG2M.js +0 -95
  664. package/dist/tvs.survival-WTFJOKIZ.js +0 -110
  665. package/dist/tvs.termCollection-QQXAS7PE.js +0 -118
  666. package/dist/vocabulary-6ACAEFTL.js +0 -32
  667. package/dist/wsi.direct-OS32TQRM.js +0 -11515
  668. package/dist/wsi.direct-OS32TQRM.js.map +0 -7
  669. /package/dist/{2dmaf-CSBPMYHO.js.map → 2dmaf-75YAQQ3P.js.map} +0 -0
  670. /package/dist/{AggMatrixInput-2HST4LLJ.js.map → AggMatrixInput-KYDS23KP.js.map} +0 -0
  671. /package/dist/{AggregateMatrix-UPOAX44L.js.map → AggregateMatrix-XGGF6KBX.js.map} +0 -0
  672. /package/dist/{AppHeader-H5QBVKUS.js.map → AppHeader-CNY5RTJN.js.map} +0 -0
  673. /package/dist/{BoxPlot-JTBQA6PL.js.map → BoxPlot-OQIJJO66.js.map} +0 -0
  674. /package/dist/{Cuminc-3BXJVWIH.js.map → Cuminc-J6DONJTA.js.map} +0 -0
  675. /package/dist/{DE-237VV46D.js.map → DE-XUBJUUBB.js.map} +0 -0
  676. /package/dist/{DM-TIW623IR.js.map → DM-2UUXUJOC.js.map} +0 -0
  677. /package/dist/{DifferentialAnalysis-PHUA2GPK.js.map → DifferentialAnalysis-U6ZPFHNM.js.map} +0 -0
  678. /package/dist/{Disco-WHV52SCI.js.map → Disco-RR2NN66T.js.map} +0 -0
  679. /package/dist/{Disco.UI-UDUXNCZX.js.map → Disco.UI-MQ7WZQOP.js.map} +0 -0
  680. /package/dist/{DmrPlot-FZCD6FTX.js.map → DmrPlot-MKAKFUJR.js.map} +0 -0
  681. /package/dist/{GSEA-3CNHMK6M.js.map → GSEA-DTIA4MNS.js.map} +0 -0
  682. /package/dist/{GeneExpInput-ZOVP7BFY.js.map → GeneExpInput-4GM5MBBX.js.map} +0 -0
  683. /package/dist/{Geomap-JREOIESM.js.map → Geomap-FF6DBN7M.js.map} +0 -0
  684. /package/dist/{HicApp-RKAMIUXQ.js.map → HicApp-LGXNL36X.js.map} +0 -0
  685. /package/dist/{IDCViewer-KXV4FU3V.js.map → IDCViewer-FQABJNUI.js.map} +0 -0
  686. /package/dist/{NumBinaryEditor-FNVYUK2J.js.map → NumBinaryEditor-7NOHUH76.js.map} +0 -0
  687. /package/dist/{NumBinaryEditor.unit.spec-PWR23U3J.js.map → NumBinaryEditor.unit.spec-SVE5SZYB.js.map} +0 -0
  688. /package/dist/{NumContEditor-YLBJW64K.js.map → NumContEditor-MSWCQUKL.js.map} +0 -0
  689. /package/dist/{NumContEditor.unit.spec-6JWBCPFY.js.map → NumContEditor.unit.spec-UFPASWBH.js.map} +0 -0
  690. /package/dist/{NumCustomBinEditor-42AFCXRN.js.map → NumCustomBinEditor-DF24SO2N.js.map} +0 -0
  691. /package/dist/{NumCustomBinEditor.unit.spec-AFBTF2CL.js.map → NumCustomBinEditor.unit.spec-N3S3ROBI.js.map} +0 -0
  692. /package/dist/{NumDiscreteEditor-FJIBZTBP.js.map → NumDiscreteEditor-HL257XGY.js.map} +0 -0
  693. /package/dist/{NumDiscreteEditor.unit.spec-MC4INDCB.js.map → NumDiscreteEditor.unit.spec-6PTPX547.js.map} +0 -0
  694. /package/dist/{NumRegularBinEditor-2WRE72TL.js.map → NumRegularBinEditor-EWCKTXWY.js.map} +0 -0
  695. /package/dist/{NumRegularBinEditor.unit.spec-L3S6NRCM.js.map → NumRegularBinEditor.unit.spec-AMGPMY7U.js.map} +0 -0
  696. /package/dist/{NumSplineEditor-TVMVAN7I.js.map → NumSplineEditor-YDNJ2DW2.js.map} +0 -0
  697. /package/dist/{NumSplineEditor.unit.spec-GEL36GZZ.js.map → NumSplineEditor.unit.spec-L4JZ3OND.js.map} +0 -0
  698. /package/dist/{NumericDensity-BNFAVOFO.js.map → NumericDensity-SQW67WKL.js.map} +0 -0
  699. /package/dist/{NumericDensity.unit.spec-XBYUFBTQ.js.map → NumericDensity.unit.spec-KBK3JZZG.js.map} +0 -0
  700. /package/dist/{NumericHandler-4VFFJNX6.js.map → NumericHandler-HG7FK4D4.js.map} +0 -0
  701. /package/dist/{NumericHandler.unit.spec-76T2IVRS.js.map → NumericHandler.unit.spec-N7PYAGGF.js.map} +0 -0
  702. /package/dist/{ProteomeInput-M5UIO73Q.js.map → ProteomeInput-6XGREJFP.js.map} +0 -0
  703. /package/dist/{Regression-5LB5TLA6.js.map → Regression-4DDXNQNO.js.map} +0 -0
  704. /package/dist/{RunChart2-HIFXOEKZ.js.map → RunChart2-ARCUC4Z3.js.map} +0 -0
  705. /package/dist/{SC-SMMW5MJG.js.map → SC-AV6COOPI.js.map} +0 -0
  706. /package/dist/{Violin-COAFYZOV.js.map → Violin-2P5I6NL5.js.map} +0 -0
  707. /package/dist/{aboutSunburst-3FYJGR6B.js.map → aboutSunburst-V557OK5L.js.map} +0 -0
  708. /package/dist/{adSandbox-4VHYWBQC.js.map → adSandbox-76PMWKTX.js.map} +0 -0
  709. /package/dist/{animatedBubbleChart-QCCIC5IT.js.map → animatedBubbleChart-CFRJJDAC.js.map} +0 -0
  710. /package/dist/{app-IF7YPCGZ.js.map → app-2SUVPURX.js.map} +0 -0
  711. /package/dist/{app-JZ43TSJP.js.map → app-PR42RXHC.js.map} +0 -0
  712. /package/dist/{bam-2VPZGSW3.js.map → bam-AYHWKHXL.js.map} +0 -0
  713. /package/dist/{barchart-VYTWYYGG.js.map → barchart-S4CLMJO7.js.map} +0 -0
  714. /package/dist/{barchart2-XC7J4VEO.js.map → barchart2-R2BGA2WO.js.map} +0 -0
  715. /package/dist/{block.init-BVP3YZHQ.js.map → block.init-SSWOFFJR.js.map} +0 -0
  716. /package/dist/{block.mds.expressionrank-RKDDKY4J.js.map → block.mds.expressionrank-GJBLSUUM.js.map} +0 -0
  717. /package/dist/{block.mds.geneboxplot-3FZ3EZZ6.js.map → block.mds.geneboxplot-SAAU4OH5.js.map} +0 -0
  718. /package/dist/{block.mds.junction-MCOG37RA.js.map → block.mds.junction-IIZPRLPH.js.map} +0 -0
  719. /package/dist/{block.mds.svcnv-IEOR5IQZ.js.map → block.mds.svcnv-KOG7O25F.js.map} +0 -0
  720. /package/dist/{block.svg-3XHRHYCV.js.map → block.svg-5GJ744H3.js.map} +0 -0
  721. /package/dist/{block.tk.aicheck-TMDUGNZX.js.map → block.tk.aicheck-CTIJCHIC.js.map} +0 -0
  722. /package/dist/{block.tk.bam-73KW4QEJ.js.map → block.tk.bam-RTB7C6CW.js.map} +0 -0
  723. /package/dist/{block.tk.bigwig.ui-E5W6R7DQ.js.map → block.tk.bigwig.ui-OJVOCOWS.js.map} +0 -0
  724. /package/dist/{block.tk.hicstraw-BNNE6ZMW.js.map → block.tk.hicstraw-GUE6G2DA.js.map} +0 -0
  725. /package/dist/{block.tk.junction-DMPRZRNY.js.map → block.tk.junction-XILEKNJY.js.map} +0 -0
  726. /package/dist/{block.tk.junction.textmatrixui-XS2E7MQL.js.map → block.tk.junction.textmatrixui-OF6BW6OY.js.map} +0 -0
  727. /package/dist/{block.tk.ld-QD3XDLO4.js.map → block.tk.ld-QZVJUGZU.js.map} +0 -0
  728. /package/dist/{block.tk.menu-S6XI732E.js.map → block.tk.menu-B2NV6ZX3.js.map} +0 -0
  729. /package/dist/{block.tk.pgv-KH4TMR3A.js.map → block.tk.pgv-46OQHX7S.js.map} +0 -0
  730. /package/dist/{brainImaging-NK4JENN3.js.map → brainImaging-TWTGRSHJ.js.map} +0 -0
  731. /package/dist/{brainRegions-YUEMTKYH.js.map → brainRegions-YTTLJMBU.js.map} +0 -0
  732. /package/dist/{chunk-37ZEGLVY.js.map → chunk-255OQYGC.js.map} +0 -0
  733. /package/dist/{chunk-GZL6YFZJ.js.map → chunk-2B3CYHUF.js.map} +0 -0
  734. /package/dist/{chunk-CGSBIFFO.js.map → chunk-2BXMWQTJ.js.map} +0 -0
  735. /package/dist/{chunk-W2SBSEKT.js.map → chunk-2E3AJFOA.js.map} +0 -0
  736. /package/dist/{chunk-KUOXZIH4.js.map → chunk-2IAELUCN.js.map} +0 -0
  737. /package/dist/{chunk-NGBI4FST.js.map → chunk-2W6U53AG.js.map} +0 -0
  738. /package/dist/{chunk-FALP6GXG.js.map → chunk-3R6VYZYB.js.map} +0 -0
  739. /package/dist/{chunk-G6SP5IQT.js.map → chunk-3YAQY5NZ.js.map} +0 -0
  740. /package/dist/{chunk-5LY2ASQX.js.map → chunk-52WVSXYC.js.map} +0 -0
  741. /package/dist/{chunk-JEVDRC64.js.map → chunk-6CQ5ADIY.js.map} +0 -0
  742. /package/dist/{chunk-P7QDNXSH.js.map → chunk-6UHSGC6G.js.map} +0 -0
  743. /package/dist/{chunk-4WFXCUT4.js.map → chunk-7E37WMAX.js.map} +0 -0
  744. /package/dist/{chunk-LYDN734A.js.map → chunk-7EP77LOA.js.map} +0 -0
  745. /package/dist/{chunk-KDKJLITX.js.map → chunk-7LJ4LTD6.js.map} +0 -0
  746. /package/dist/{chunk-U2OB3S3M.js.map → chunk-7MEBMH77.js.map} +0 -0
  747. /package/dist/{chunk-LMONIWPI.js.map → chunk-7NVFEGCE.js.map} +0 -0
  748. /package/dist/{chunk-KBZAB2H2.js.map → chunk-A52K2E32.js.map} +0 -0
  749. /package/dist/{chunk-ADJBQCFM.js.map → chunk-A7UNLPQQ.js.map} +0 -0
  750. /package/dist/{chunk-UWVDD4C2.js.map → chunk-BH4KIOUQ.js.map} +0 -0
  751. /package/dist/{chunk-JCNZJKLK.js.map → chunk-CG2H6EFQ.js.map} +0 -0
  752. /package/dist/{chunk-XAHZYGKW.js.map → chunk-CNDQFKUB.js.map} +0 -0
  753. /package/dist/{chunk-ZKU6RST3.js.map → chunk-CVLHDO2O.js.map} +0 -0
  754. /package/dist/{chunk-Z6M77JDG.js.map → chunk-CVRTDBLZ.js.map} +0 -0
  755. /package/dist/{chunk-XKWLP433.js.map → chunk-DYX6B6RN.js.map} +0 -0
  756. /package/dist/{chunk-UA2ADBTO.js.map → chunk-FA2B6PKK.js.map} +0 -0
  757. /package/dist/{chunk-AAQDXVQT.js.map → chunk-FA6M7PSZ.js.map} +0 -0
  758. /package/dist/{chunk-H353EVLK.js.map → chunk-FF4J6QSF.js.map} +0 -0
  759. /package/dist/{chunk-L7FMBWWK.js.map → chunk-FYHUHKUC.js.map} +0 -0
  760. /package/dist/{chunk-THHYPA5K.js.map → chunk-G3CJDTG4.js.map} +0 -0
  761. /package/dist/{chunk-KZ54E2FU.js.map → chunk-ILAYJZBC.js.map} +0 -0
  762. /package/dist/{chunk-3RPX4ZVV.js.map → chunk-IT7EE7LY.js.map} +0 -0
  763. /package/dist/{chunk-FV2GLMSI.js.map → chunk-JG5CF5Q3.js.map} +0 -0
  764. /package/dist/{chunk-YWB2QHV2.js.map → chunk-L3ORR2TC.js.map} +0 -0
  765. /package/dist/{chunk-EKIWZUEO.js.map → chunk-L6BT6WZP.js.map} +0 -0
  766. /package/dist/{chunk-RI3GAHQE.js.map → chunk-LF2DWEKN.js.map} +0 -0
  767. /package/dist/{chunk-BWVJAFEQ.js.map → chunk-MJZ66SUG.js.map} +0 -0
  768. /package/dist/{chunk-IIN4CG67.js.map → chunk-N5T7TT5H.js.map} +0 -0
  769. /package/dist/{chunk-KNFJN6CM.js.map → chunk-NB4C446B.js.map} +0 -0
  770. /package/dist/{chunk-FRPYXYYQ.js.map → chunk-NJYYF2LF.js.map} +0 -0
  771. /package/dist/{chunk-TDBS3UFZ.js.map → chunk-NMVEXITA.js.map} +0 -0
  772. /package/dist/{chunk-USGUVW5Q.js.map → chunk-NS2H3C6X.js.map} +0 -0
  773. /package/dist/{chunk-JBUTLI3V.js.map → chunk-O7346S3P.js.map} +0 -0
  774. /package/dist/{chunk-FRD6LQF7.js.map → chunk-OV3W5AMN.js.map} +0 -0
  775. /package/dist/{chunk-QXRM5NMW.js.map → chunk-PQDYA3ZQ.js.map} +0 -0
  776. /package/dist/{chunk-HKR5R5YR.js.map → chunk-QFRR3ZRE.js.map} +0 -0
  777. /package/dist/{chunk-4LK5YFHF.js.map → chunk-QLKEA3WE.js.map} +0 -0
  778. /package/dist/{chunk-ECTOEM7X.js.map → chunk-QM7CXRSF.js.map} +0 -0
  779. /package/dist/{chunk-OYXRYWGU.js.map → chunk-QV6VZLS5.js.map} +0 -0
  780. /package/dist/{chunk-ISWFHYEZ.js.map → chunk-RTE32A22.js.map} +0 -0
  781. /package/dist/{chunk-ECCXTB5S.js.map → chunk-SB5DR4NL.js.map} +0 -0
  782. /package/dist/{chunk-4WFG5Y3A.js.map → chunk-SDUMZTIK.js.map} +0 -0
  783. /package/dist/{chunk-ZLWEUYPT.js.map → chunk-TYLCIGGN.js.map} +0 -0
  784. /package/dist/{chunk-MRZUZDRA.js.map → chunk-UHZDDPUU.js.map} +0 -0
  785. /package/dist/{chunk-Z7RFFJXU.js.map → chunk-UW6GRHZ4.js.map} +0 -0
  786. /package/dist/{chunk-LTY7WOAT.js.map → chunk-UYA5LCAR.js.map} +0 -0
  787. /package/dist/{chunk-CDCNBN6G.js.map → chunk-V7CB5D7A.js.map} +0 -0
  788. /package/dist/{chunk-ZG7EBTHK.js.map → chunk-VBUDRJJG.js.map} +0 -0
  789. /package/dist/{chunk-6V7ITU5F.js.map → chunk-VVWZ4BOI.js.map} +0 -0
  790. /package/dist/{chunk-ZJLJHQWM.js.map → chunk-W3K3N275.js.map} +0 -0
  791. /package/dist/{chunk-OKM4ACTA.js.map → chunk-WENNRY5E.js.map} +0 -0
  792. /package/dist/{chunk-Q7GK35TB.js.map → chunk-Z4R7TCTB.js.map} +0 -0
  793. /package/dist/{chunk-P5FHYGJK.js.map → chunk-ZFNEHOW4.js.map} +0 -0
  794. /package/dist/{chunk-HULTLO4D.js.map → chunk-ZLEGHQOO.js.map} +0 -0
  795. /package/dist/{cohort-X327AG3O.js.map → cohort-TLSGXKV5.js.map} +0 -0
  796. /package/dist/{cohortSunburst-GNWIVDNA.js.map → cohortSunburst-TNMXPHJW.js.map} +0 -0
  797. /package/dist/{condition-3M4L2HIM.js.map → condition-NN7YK7AI.js.map} +0 -0
  798. /package/dist/{controls-OKNHZJOU.js.map → controls-472G34VU.js.map} +0 -0
  799. /package/dist/{controls.config-FUKM5LEP.js.map → controls.config-2BQ7QYOB.js.map} +0 -0
  800. /package/dist/{correlation-PC4MXCFM.js.map → correlation-5UPYEHC6.js.map} +0 -0
  801. /package/dist/{customdata.inputui-HCRTX56R.js.map → customdata.inputui-EWYP4MRY.js.map} +0 -0
  802. /package/dist/{dataDownload-HJO7UW7S.js.map → dataDownload-X5UXBEK4.js.map} +0 -0
  803. /package/dist/{databrowser.ui-EY3H6B4S.js.map → databrowser.ui-PFHJKHIW.js.map} +0 -0
  804. /package/dist/{dictionary-L6CTMFY7.js.map → dictionary-M2MCNRN2.js.map} +0 -0
  805. /package/dist/{dnaMethylation-FEB5GGXK.js.map → dnaMethylation-A7AWG2P5.js.map} +0 -0
  806. /package/dist/{dnaMethylation.integration.spec-4DC6TJNZ.js.map → dnaMethylation.integration.spec-JWCMRFAM.js.map} +0 -0
  807. /package/dist/{dnaMethylation.unit.spec-REOHQOBC.js.map → dnaMethylation.unit.spec-PIVJBW7Z.js.map} +0 -0
  808. /package/dist/{dofetch-YFGOKCKV.js.map → dofetch-XID2XEJT.js.map} +0 -0
  809. /package/dist/{e2pca-QSAVTCPL.js.map → e2pca-VJRNE6BU.js.map} +0 -0
  810. /package/dist/{ep-LAFLKVSW.js.map → ep-BZE65IX2.js.map} +0 -0
  811. /package/dist/{expclust.gdc.spec-OM4J6WBL.js.map → expclust.gdc.spec-5BGBANUV.js.map} +0 -0
  812. /package/dist/{facet-WHTV2VIX.js.map → facet-RXUO4LRY.js.map} +0 -0
  813. /package/dist/{gb-DLXWWBB6.js.map → gb-NDRFDS5A.js.map} +0 -0
  814. /package/dist/{geneExpClustering-KB2MB2VM.js.map → geneExpClustering-ONJGTSGM.js.map} +0 -0
  815. /package/dist/{geneExpression-3D7PDZ2I.js.map → geneExpression-NXDXXKEA.js.map} +0 -0
  816. /package/dist/{geneExpression-3RSRGYGQ.js.map → geneExpression-PYI42HV6.js.map} +0 -0
  817. /package/dist/{geneExpression.unit.spec-EINAWLPR.js.map → geneExpression.unit.spec-PTFHHTP7.js.map} +0 -0
  818. /package/dist/{geneORA-J4KVSZT3.js.map → geneORA-SDR43UOL.js.map} +0 -0
  819. /package/dist/{geneRanking-HKLJ7CN6.js.map → geneRanking-QI43IRNV.js.map} +0 -0
  820. /package/dist/{geneVariant-3BRGRFPT.js.map → geneVariant-OT4V554H.js.map} +0 -0
  821. /package/dist/{geneVariant.integration.spec-3IBX4NNE.js.map → geneVariant.integration.spec-6OE4HKYB.js.map} +0 -0
  822. /package/dist/{genefusion.ui-OESQL7TW.js.map → genefusion.ui-IQDKCZPX.js.map} +0 -0
  823. /package/dist/{geneset-3BMV3KP4.js.map → geneset-TLZPZOQP.js.map} +0 -0
  824. /package/dist/{genomeBrowser.spec-I3WKAITC.js.map → genomeBrowser.spec-HIOTFKFK.js.map} +0 -0
  825. /package/dist/{grin2-5L2U32LY.js.map → grin2-G2PVFRKR.js.map} +0 -0
  826. /package/dist/{grin2-4BBCH3H5.js.map → grin2-RJQZRVFF.js.map} +0 -0
  827. /package/dist/{hierCluster-KM56NTN6.js.map → hierCluster-C6ICZSOB.js.map} +0 -0
  828. /package/dist/{hierCluster-XCJF5IQ6.js.map → hierCluster-MESFVAO7.js.map} +0 -0
  829. /package/dist/{hierCluster.config-E2EYOXX6.js.map → hierCluster.config-7HROWR2T.js.map} +0 -0
  830. /package/dist/{hierCluster.integration.spec-IIEJ2YEI.js.map → hierCluster.integration.spec-CJT22MJI.js.map} +0 -0
  831. /package/dist/{hierCluster.interactivity-AJFEJTGX.js.map → hierCluster.interactivity-MDX5QSEF.js.map} +0 -0
  832. /package/dist/{hierCluster.renderers-XKI344FM.js.map → hierCluster.renderers-SU5IYI33.js.map} +0 -0
  833. /package/dist/{imagePlot-3B3BXI6I.js.map → imagePlot-3Y5FNIJL.js.map} +0 -0
  834. /package/dist/{importPlot-JDVH7Q2Z.js.map → importPlot-WE5QSSFY.js.map} +0 -0
  835. /package/dist/{isoformExpression-UFHY5LB2.js.map → isoformExpression-TMLFOZVK.js.map} +0 -0
  836. /package/dist/{isoformExpression.unit.spec-U6GDCNQR.js.map → isoformExpression.unit.spec-MSVTQC3E.js.map} +0 -0
  837. /package/dist/{junction-W2STW5WW.js.map → junction-YKZV4LEL.js.map} +0 -0
  838. /package/dist/{launch.adhoc-KN7HFHJH.js.map → launch.adhoc-DS6UME2S.js.map} +0 -0
  839. /package/dist/{lollipop-EKIGAAK6.js.map → lollipop-ZKDAU3O5.js.map} +0 -0
  840. /package/dist/{maf-MK2MM7J4.js.map → maf-DKOORWGV.js.map} +0 -0
  841. /package/dist/{maftimeline-7RTMXWFA.js.map → maftimeline-EHJ2CWJJ.js.map} +0 -0
  842. /package/dist/{matrix-UM2EZODJ.js.map → matrix-7JDLGNU7.js.map} +0 -0
  843. /package/dist/{matrix-YBL4FZYJ.js.map → matrix-EB7YOLMN.js.map} +0 -0
  844. /package/dist/{matrix.cells-45ZFADK5.js.map → matrix.cells-A5E63KDN.js.map} +0 -0
  845. /package/dist/{matrix.config-QTBIRXKU.js.map → matrix.config-GSW2WJM4.js.map} +0 -0
  846. /package/dist/{matrix.data-WAMOLSKW.js.map → matrix.data-R4FW2PQH.js.map} +0 -0
  847. /package/dist/{matrix.groups-RXFXZABD.js.map → matrix.groups-3UH2KOIY.js.map} +0 -0
  848. /package/dist/{matrix.integration.spec-JZDZRVOK.js.map → matrix.integration.spec-R32TIABT.js.map} +0 -0
  849. /package/dist/{matrix.interactivity-P4VYGTB2.js.map → matrix.interactivity-RDPMBDVK.js.map} +0 -0
  850. /package/dist/{matrix.layout-WWPRXXHX.js.map → matrix.layout-FD275D3P.js.map} +0 -0
  851. /package/dist/{matrix.legend-4MCMVVKO.js.map → matrix.legend-SE7SQTNN.js.map} +0 -0
  852. /package/dist/{matrix.renderers-JQTUODDS.js.map → matrix.renderers-RK2BRCHZ.js.map} +0 -0
  853. /package/dist/{matrix.serieses-3IDRKSGO.js.map → matrix.serieses-BEZCQDLJ.js.map} +0 -0
  854. /package/dist/{matrix.sort-EAWOB56R.js.map → matrix.sort-KRNS4VPF.js.map} +0 -0
  855. /package/dist/{matrix.sort.unit.spec-FOWLULHA.js.map → matrix.sort.unit.spec-LZG3GOXM.js.map} +0 -0
  856. /package/dist/{matrix.sorterUi.unit.spec-U5CQDTMX.js.map → matrix.sorterUi.unit.spec-RR2KK4R5.js.map} +0 -0
  857. /package/dist/{matrix.unit.spec-VTLD4EOZ.js.map → matrix.unit.spec-3PK6LUNE.js.map} +0 -0
  858. /package/dist/{mavb-JIIXJHBK.js.map → mavb-CUPAESFH.js.map} +0 -0
  859. /package/dist/{mds.samplescatterplot-PTWA2V6E.js.map → mds.samplescatterplot-WGQ7A7UC.js.map} +0 -0
  860. /package/dist/{mds.survivalplot-XVZ66GP5.js.map → mds.survivalplot-ZEGSEJO2.js.map} +0 -0
  861. /package/dist/{multivalue-2H7QX7MG.js.map → multivalue-DKUQCROX.js.map} +0 -0
  862. /package/dist/{numericDictTermCluster-EHCDRT6J.js.map → numericDictTermCluster-IFIEM3E4.js.map} +0 -0
  863. /package/dist/{oncomatrix-RZLZUC32.js.map → oncomatrix-WSPJAWHW.js.map} +0 -0
  864. /package/dist/{oncomatrix.spec-Z5UQGTW2.js.map → oncomatrix.spec-LDWTZ7LO.js.map} +0 -0
  865. /package/dist/{plot.2dvaf-IRBZBJ6B.js.map → plot.2dvaf-N333YSMC.js.map} +0 -0
  866. /package/dist/{plot.app-I23IAZ3Z.js.map → plot.app-HU5RQS5I.js.map} +0 -0
  867. /package/dist/{plot.barplot-PYLRAZB7.js.map → plot.barplot-4T2UEIYX.js.map} +0 -0
  868. /package/dist/{plot.boxplot-VBWU7DUG.js.map → plot.boxplot-C4OXCRFB.js.map} +0 -0
  869. /package/dist/{plot.brainImaging-HDJMEMTK.js.map → plot.brainImaging-A6FEKFEA.js.map} +0 -0
  870. /package/dist/{plot.disco-5BVG3WMT.js.map → plot.disco-VDL7YKRX.js.map} +0 -0
  871. /package/dist/{plot.ssgq-S3BKXJMW.js.map → plot.ssgq-OII7PFPG.js.map} +0 -0
  872. /package/dist/{plot.vaf2cov-VD7DU2XR.js.map → plot.vaf2cov-RZ5JPWMC.js.map} +0 -0
  873. /package/dist/{polar2-PYLEVG7E.js.map → polar2-6KR2KX5D.js.map} +0 -0
  874. /package/dist/{profileForms-CI2YYD3Y.js.map → profileForms-YJDJIBSY.js.map} +0 -0
  875. /package/dist/{profilePlot-UCC4ZVHQ.js.map → profilePlot-U4U4AYMO.js.map} +0 -0
  876. /package/dist/{proteomeCohortCompare-2VUSLC6I.js.map → proteomeCohortCompare-QCXKLAWG.js.map} +0 -0
  877. /package/dist/{pseudbulk.unit.spec-VPZWNTIA.js.map → pseudbulk.unit.spec-3A2FWQZI.js.map} +0 -0
  878. /package/dist/{pseudobulk-RUXGZ7OY.js.map → pseudobulk-WB6NXFJ6.js.map} +0 -0
  879. /package/dist/{qualitative-3AVR4GRX.js.map → qualitative-CQUBCCGT.js.map} +0 -0
  880. /package/dist/{qualitative-5QNBKDOZ.js.map → qualitative-QQ3CWFVP.js.map} +0 -0
  881. /package/dist/{radar2-AOYMS54Y.js.map → radar2-FNC67FNX.js.map} +0 -0
  882. /package/dist/{radarFacility2-PP2MAXIP.js.map → radarFacility2-3X77B4WP.js.map} +0 -0
  883. /package/dist/{render-ASLVKYEX.js.map → render-G5NCZTMW.js.map} +0 -0
  884. /package/dist/{report-UVYKDMQC.js.map → report-CR645KQ4.js.map} +0 -0
  885. /package/dist/{sampleView-6UHR7FSR.js.map → sampleView-6PG2HJZL.js.map} +0 -0
  886. /package/dist/{samplelst-ABC2CCNN.js.map → samplelst-FCQ7YPPQ.js.map} +0 -0
  887. /package/dist/{samplematrix-36UCHZLC.js.map → samplematrix-GXMN5QTS.js.map} +0 -0
  888. /package/dist/{sc-XLSAM725.js.map → sc-4ZTSQOXC.js.map} +0 -0
  889. /package/dist/{scatter-ADOBAOW2.js.map → scatter-2PUQU22I.js.map} +0 -0
  890. /package/dist/{scatter-ZNVLI627.js.map → scatter-ZSZTA37T.js.map} +0 -0
  891. /package/dist/{selectGenomeWithTklst-DPDBDYTR.js.map → selectGenomeWithTklst-XHWBEM2G.js.map} +0 -0
  892. /package/dist/{singleCellCellType-STVPYZD4.js.map → singleCellCellType-NP7Y4N6Z.js.map} +0 -0
  893. /package/dist/{singleCellCellType.unit.spec-ZLY37AXL.js.map → singleCellCellType.unit.spec-5I3FECB4.js.map} +0 -0
  894. /package/dist/{singleCellGeneExpression-PCGLU35S.js.map → singleCellGeneExpression-7RWH633E.js.map} +0 -0
  895. /package/dist/{singleCellGeneExpression.unit.spec-PSLKK362.js.map → singleCellGeneExpression.unit.spec-2X2BDTNO.js.map} +0 -0
  896. /package/dist/{singleCellNumericValue-SR3SJEOB.js.map → singleCellNumericValue-I6V4ME6T.js.map} +0 -0
  897. /package/dist/{singleCellNumericValue.unit.spec-PXVXJ4HJ.js.map → singleCellNumericValue.unit.spec-4HKAJXB3.js.map} +0 -0
  898. /package/dist/{singleCellPlot-JXB7M6OH.js.map → singleCellPlot-QRFR3AJH.js.map} +0 -0
  899. /package/dist/{singlecell-PH55NFRX.js.map → singlecell-AQEAB445.js.map} +0 -0
  900. /package/dist/{singlecell-EDSX56QO.js.map → singlecell-DX4EXNUV.js.map} +0 -0
  901. /package/dist/{snp-3VEYBTAQ.js.map → snp-2URSYPBL.js.map} +0 -0
  902. /package/dist/{snp.unit.spec-V7OB44US.js.map → snp.unit.spec-ZV2RCDT4.js.map} +0 -0
  903. /package/dist/{snplocus-HX67RBT5.js.map → snplocus-BB4I2QIP.js.map} +0 -0
  904. /package/dist/{snplst-H5YXCY33.js.map → snplst-A5S7CQEM.js.map} +0 -0
  905. /package/dist/{spliceevent.a53ss.diagram-DBDEEHSK.js.map → spliceevent.a53ss.diagram-6C4OQOVF.js.map} +0 -0
  906. /package/dist/{spliceevent.exonskip.diagram-EYEL6BY6.js.map → spliceevent.exonskip.diagram-FKSR3JEL.js.map} +0 -0
  907. /package/dist/{spliceevent.noeventdiagram-64OEXK7U.js.map → spliceevent.noeventdiagram-G3JQUZKK.js.map} +0 -0
  908. /package/dist/{ssGSEA-3YWQH6KM.js.map → ssGSEA-KLMOSI53.js.map} +0 -0
  909. /package/dist/{ssGSEA.unit.spec-23V2IXP5.js.map → ssGSEA.unit.spec-HBALWLVB.js.map} +0 -0
  910. /package/dist/{stattable-GPSBCNYC.js.map → stattable-ZCMPIC3I.js.map} +0 -0
  911. /package/dist/{studyCatalog-W5PATRNY.js.map → studyCatalog-UZ4BSYY6.js.map} +0 -0
  912. /package/dist/{summarizeCnvGeneexp-YGI23QH5.js.map → summarizeCnvGeneexp-Z43GYKZB.js.map} +0 -0
  913. /package/dist/{summarizeGeneexpSurvival-KQ6OLWYR.js.map → summarizeGeneexpSurvival-4OHRMCFV.js.map} +0 -0
  914. /package/dist/{summarizeMutationCnv-XDHBNEPU.js.map → summarizeMutationCnv-EZXMLADC.js.map} +0 -0
  915. /package/dist/{summarizeMutationDiagnosis-VKIJRJ2Q.js.map → summarizeMutationDiagnosis-RPQP4TM5.js.map} +0 -0
  916. /package/dist/{summarizeMutationSurvival-57YKJGLE.js.map → summarizeMutationSurvival-LX4TRGJZ.js.map} +0 -0
  917. /package/dist/{summary-4WQOVIUF.js.map → summary-FZQVK5KR.js.map} +0 -0
  918. /package/dist/{summary.integration.spec-FRNWBU7F.js.map → summary.integration.spec-46T65LR5.js.map} +0 -0
  919. /package/dist/{summaryInput-X7DS2YA7.js.map → summaryInput-BHU7G5FC.js.map} +0 -0
  920. /package/dist/{sunburst-MSGTXYMM.js.map → sunburst-A5NS3KJQ.js.map} +0 -0
  921. /package/dist/{sunburst-3OEAQA3O.js.map → sunburst-R5X2C7FK.js.map} +0 -0
  922. /package/dist/{survival-5KC5CNZU.js.map → survival-MKW5J5ZH.js.map} +0 -0
  923. /package/dist/{survival-QXDS6N46.js.map → survival-N2NKMVOV.js.map} +0 -0
  924. /package/dist/{survival.integration.spec-PKENHLTZ.js.map → survival.integration.spec-K5FMOOTF.js.map} +0 -0
  925. /package/dist/{svgraph-VJLB7BBN.js.map → svgraph-3WRCJA5D.js.map} +0 -0
  926. /package/dist/{swimmer-R3DN7N36.js.map → swimmer-XV5KVWEM.js.map} +0 -0
  927. /package/dist/{table-YF5VORU6.js.map → table-XUGFZSGV.js.map} +0 -0
  928. /package/dist/{termCollection-KSHVOPS5.js.map → termCollection-23ZRHZHF.js.map} +0 -0
  929. /package/dist/{termCollection-3KGLZFDW.js.map → termCollection-NWTAUSSW.js.map} +0 -0
  930. /package/dist/{termCollection.unit.spec-HTBDG5PL.js.map → termCollection.unit.spec-WE3JMSUI.js.map} +0 -0
  931. /package/dist/{termCollectionFractionSelection-MK4NKWUX.js.map → termCollectionFractionSelection-5FLFLMIY.js.map} +0 -0
  932. /package/dist/{termCollectionFractionSelection.unit.spec-AMF32FDN.js.map → termCollectionFractionSelection.unit.spec-CCFGGXAA.js.map} +0 -0
  933. /package/dist/{tk-Z54DOECH.js.map → tk-F3TSB4IB.js.map} +0 -0
  934. /package/dist/{tp.ui-M4TZVT53.js.map → tp.ui-4QDX3FGM.js.map} +0 -0
  935. /package/dist/{tvs.categorical-HY3BWCZR.js.map → tvs.categorical-24OT3XZI.js.map} +0 -0
  936. /package/dist/{tvs.condition-Y36TRIX4.js.map → tvs.condition-X4SXCVGN.js.map} +0 -0
  937. /package/dist/{tvs.dt-XKVJZP7Y.js.map → tvs.dt-FRBJRSWI.js.map} +0 -0
  938. /package/dist/{tvs.dtcnv.categorical-OMRZR4Y7.js.map → tvs.dtcnv.categorical-4RRSO735.js.map} +0 -0
  939. /package/dist/{tvs.dtcnv.continuous-AGYOBI5K.js.map → tvs.dtcnv.continuous-HXY2PBUA.js.map} +0 -0
  940. /package/dist/{tvs.dtfusion-2JX5Y2IH.js.map → tvs.dtfusion-67LXBQA4.js.map} +0 -0
  941. /package/dist/{tvs.dtitd-SDSLBBWC.js.map → tvs.dtitd-MCJZCNV2.js.map} +0 -0
  942. /package/dist/{tvs.dtsnvindel-LI7K464K.js.map → tvs.dtsnvindel-K5YIIBQJ.js.map} +0 -0
  943. /package/dist/{tvs.dtsv-VRCLX7QY.js.map → tvs.dtsv-RP7FUB2N.js.map} +0 -0
  944. /package/dist/{tvs.multivalue-4OTY6J2S.js.map → tvs.multivalue-CROMWUCP.js.map} +0 -0
  945. /package/dist/{tvs.numeric-CDATYOR2.js.map → tvs.numeric-IYYYV6ZJ.js.map} +0 -0
  946. /package/dist/{tvs.samplelst-76JOJG2M.js.map → tvs.samplelst-5DXKRFYM.js.map} +0 -0
  947. /package/dist/{tvs.survival-WTFJOKIZ.js.map → tvs.survival-W5RXODBT.js.map} +0 -0
  948. /package/dist/{tvs.termCollection-QQXAS7PE.js.map → tvs.termCollection-OSJYIWDX.js.map} +0 -0
  949. /package/dist/{vocabulary-6ACAEFTL.js.map → vocabulary-HTRYJUD7.js.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../plots/proteinView.tiles.ts"],
4
- "sourcesContent": ["import { Menu, table2col } from '#dom'\nimport { axisstyle } from '#src/client'\nimport { dofetch3 } from '#common/dofetch'\nimport { cohortMatches } from './proteome.catalog'\nimport type { DapConcordance, ProteomeCohortMatch } from '#types'\nimport {\n\tloadBrainAssets,\n\trenderBrainSvg,\n\tmakeDiseaseTabs,\n\tmakeBrainFcScale,\n\tbrainFillByRegion,\n\tbrainTooltipByRegion,\n\tBRAIN_P_THRESHOLD,\n\ttype BrainAssets\n} from './brainRegions.svg'\nimport { axisBottom, axisLeft, scaleLinear, scaleBand, scalePoint, scaleSqrt, line as d3line, select } from 'd3'\nimport { NumericModes } from '#shared/terms.js'\nimport { roundValue } from '#shared/roundValue.js'\n\n/*********************************************************************\n * proteinView study tiles\n *\n * Each tile answers one question about the searched protein and renders\n * only when the underlying study data supports it (tile-per-plot design).\n * Nothing about the dataset is hardcoded here: the tile list (titles,\n * order, which cohorts feed which tile) and the vocabulary (diseases,\n * models, cell types) come from queries.proteome.proteinView in the\n * dataset file; cohort metadata (disease/model/cellType/ageGroup/\n * brainRegion) from the per-cohort `catalog` blocks that termdb.config\n * ships to the client. This file only holds the renderers.\n *\n * Tiles are gene-level: when a cohort measured several isoforms\n * (accessions), the most significant one represents the cohort, matching\n * how the source papers report proteins (protein-group level, by gene\n * symbol). The full per-isoform detail stays in the overview volcano and\n * the PTM track.\n *********************************************************************/\n\n/************ dataset config accessors ************/\n\ntype PairSide = ProteomeCohortMatch & { label: string; ageVaries?: boolean }\nexport type TileCfg = {\n\tkey: string\n\ttitle: string\n\tsubtitle: string\n\tcohortMatch?: ProteomeCohortMatch\n\txLabel?: string\n\tyLabel?: string\n\tpairs?: { key: string; label: string; x: PairSide; y: PairSide }[]\n\t/** key of another tile whose entries are the reference side of a paired tile\n\t * (e.g. the whole-proteome tile for the insoluble dumbbell), matched by cohort name */\n\treferenceTile?: string\n\tdefaultAge?: string\n\tnote?: string\n}\n\nexport function getProteinViewConfig(self: any): any {\n\treturn self?.app?.vocabApi?.termdbConfig?.queries?.proteome?.proteinView || {}\n}\nexport function getTileConfigs(self: any): TileCfg[] {\n\treturn getProteinViewConfig(self).tiles || []\n}\nexport function getTileConfig(self: any, key: string): TileCfg | undefined {\n\treturn getTileConfigs(self).find(t => t.key === key)\n}\n// disease code \u2192 {name,label?,specificityControl?}; key order = axis order\nfunction diseaseCfg(self: any): { [code: string]: { name: string; label?: string; specificityControl?: boolean } } {\n\treturn getProteinViewConfig(self).diseases || {}\n}\nconst diseaseOrder = (self: any) => Object.keys(diseaseCfg(self))\nconst diseaseLabel = (self: any, d: string) => diseaseCfg(self)[d]?.label || d\nconst isSpecificityControl = (self: any, d: string) => !!diseaseCfg(self)[d]?.specificityControl\nconst modelOrder = (self: any): string[] => Object.keys(getProteinViewConfig(self).models || {})\nconst modelColor = (self: any, m: string) => getProteinViewConfig(self).models?.[m]?.color || SINGLE_MODEL_COLOR\nconst cellTypeCfg = (self: any): { [ct: string]: { note?: string } } => getProteinViewConfig(self).cellTypes || {}\nconst proteomeLabel = (self: any, organism: string, assay: string) =>\n\tself?.app?.vocabApi?.termdbConfig?.queries?.proteome?.organisms?.[organism]?.assays?.[assay]?.proteomeLabel || assay\n\n// sort keys by their position in a configured order; unknown keys keep\n// their relative order after the known ones\nexport function orderBy(keys: string[], order: string[]) {\n\tconst rank = (k: string) => (order.indexOf(k) === -1 ? order.length : order.indexOf(k))\n\treturn [...keys].sort((a, b) => rank(a) - rank(b))\n}\n\nconst SIG_P = 0.05\n\n// leading integer of an age-group label (\"6 months\" \u2192 6); null when absent\nexport function parseAge(ageGroup: string | undefined): number | null {\n\tconst n = parseInt(ageGroup || '')\n\treturn Number.isFinite(n) ? n : null\n}\nconst byAge = (a: string, b: string) => (parseAge(a) ?? 0) - (parseAge(b) ?? 0)\n\n// memoized fetch shared by the tile faces and their expanded views: one\n// in-flight promise per key; a rejection is not cached so a retry refetches\nconst fetchCache = new Map<string, Promise<any>>()\nfunction cachedFetch<T>(key: string, load: () => Promise<T>): Promise<T> {\n\tif (!fetchCache.has(key)) {\n\t\tconst p = load()\n\t\tp.catch(() => fetchCache.delete(key))\n\t\tfetchCache.set(key, p)\n\t}\n\treturn fetchCache.get(key)!\n}\nconst vocabKey = (self: any) => `${self.app.opts.state.vocab.genome}|${self.app.opts.state.vocab.dslabel}`\n\n// geometry scaling: tile faces render compact, the expanded view large.\n// scaleX compresses widths further than heights so charts fit narrow cards;\n// it defaults to scale when unset.\nexport type TileRenderOpts = { scale?: number; scaleX?: number; expanded?: boolean }\nconst TILE_FACE_SCALE = 0.67\nconst TILE_FACE_SCALE_X = 0.45\nconst EXPANDED_SCALE = 1.7\n// uniform card footprint so the grid reads as even rows\nconst CARD_W = 230\nconst CARD_MIN_H = 235\n\nconst SINGLE_MODEL_COLOR = '#6b7280'\nconst ND_COLOR = '#4263eb'\nconst PSY_COLOR = '#9ca3af'\nconst WHOLE_COLOR = '#2166ac'\nconst INSOLUBLE_COLOR = '#b2182b'\nconst REFERENCE_COLOR = '#111827'\n// diverging fold-change colors, same semantics as cellTypeBubbleHeatmap\nconst FC_NEG_COLOR = '#762a83'\nconst FC_ZERO_COLOR = '#f7f7f7'\nconst FC_POS_COLOR = '#2166ac'\n\nexport function getLog2Ratio(foldChange: number) {\n\tif (!Number.isFinite(foldChange) || foldChange <= 0) return null\n\treturn Math.log2(foldChange)\n}\n\nexport function launchViolinPlot(\n\tself: any,\n\torganismName: string,\n\tassayName: string,\n\tcohortName: string,\n\tisoform: string\n) {\n\tconst selectedProtein = self.state.config?.tw?.term\n\tif (!selectedProtein) throw new Error('proteinView: selected protein term is missing')\n\n\tconst action: any = {\n\t\ttype: 'plot_create',\n\t\tconfig: {\n\t\t\tchartType: 'summary'\n\t\t}\n\t}\n\taction.config.assayCohortTitle = `${organismName} ${assayName}: ${cohortName}`\n\taction.config.proteomeDetails = { organism: organismName, assay: assayName, cohort: cohortName }\n\n\tconst termdbConfig = self.app.vocabApi.termdbConfig\n\tconst proteomeOverlayTerm = termdbConfig?.queries?.proteome?.organisms?.[organismName]?.overlayTerm\n\tconst t = structuredClone(selectedProtein)\n\tt.name = `${t.name}: ${isoform}`\n\tt.dataTypeDetails = { organism: organismName, assay: assayName, cohort: cohortName }\n\taction.config.term = { term: t, q: { mode: NumericModes.continuous } }\n\n\tif (proteomeOverlayTerm) {\n\t\taction.config.term2 = { term: structuredClone(proteomeOverlayTerm), q: {} }\n\t}\n\n\tself.app.dispatch(action)\n}\n\nexport type TileEntry = {\n\torganism: string\n\tassayName: string\n\tcohortName: string\n\tdisease?: string\n\tuniqueIdentifier: string\n\tproteinAccession: string\n\tlog2fc: number | null\n\t/** FDR (BH-adjusted p) from the cohort's DAP file */\n\tfdr: number | null\n\ttestedN: number\n\tcontrolN: number\n\tisoformCount: number // how many accessions this cohort measured; entry is the most significant\n\tcatalog: any\n\t// set only for PTM-site entries (the PTM summary card face)\n\tptmType?: string\n\tmodSites?: string\n}\n\nexport type TileData = {\n\t/** tile key \u2192 its cohort entries, routed by each tile's cohortMatch */\n\tbyTile: { [tileKey: string]: TileEntry[] }\n\tisoformCount: number\n\tptmSiteCount: number\n\tcohortCount: number\n}\n\nconst entries = (td: TileData, key: string): TileEntry[] => td.byTile[key] || []\n\n// per-cohort catalog metadata (disease/model/cellType/ageGroup/\u2026) that\n// termdb.config ships to the client for the studyCatalog plot\nexport function catalogForEntry(self: any, e: any) {\n\treturn self.app.vocabApi.termdbConfig?.queries?.proteome?.organisms?.[e.organism]?.assays?.[e.assayName]?.cohorts?.[\n\t\te.cohortName\n\t]?.catalog\n}\n\n// One representative (most significant, valid fold change) entry per\n// cohort; the source papers report at protein-group level, so tiles do too.\nexport function prepareTileData(data: any, self: any): TileData {\n\tconst catalogFor = (e: any) => catalogForEntry(self, e)\n\n\tconst accessions = new Set<string>()\n\tlet ptmSiteCount = 0\n\n\t// collapse to one representative entry per (organism, assay, cohort)\n\tconst byCohort = new Map<string, { best: any; count: number }>()\n\tfor (const e of data?.cohorts || []) {\n\t\tif (e.PTMType) {\n\t\t\tptmSiteCount++\n\t\t\tcontinue\n\t\t}\n\t\taccessions.add(e.proteinAccession)\n\t\tconst log2fc = getLog2Ratio(e.foldChange)\n\t\tif (log2fc === null) continue\n\t\tconst key = `${e.organism}|${e.assayName}|${e.cohortName}`\n\t\tconst p = Number(e.fdr)\n\t\tconst pRank = Number.isFinite(p) && p > 0 ? p : Infinity\n\t\tconst cur = byCohort.get(key)\n\t\tif (!cur) byCohort.set(key, { best: { e, pRank }, count: 1 })\n\t\telse {\n\t\t\tcur.count++\n\t\t\tif (pRank < cur.best.pRank) cur.best = { e, pRank }\n\t\t}\n\t}\n\n\tconst tiles = getTileConfigs(self)\n\tconst td: TileData = {\n\t\tbyTile: Object.fromEntries(tiles.map(t => [t.key, []])),\n\t\tisoformCount: accessions.size,\n\t\tptmSiteCount,\n\t\tcohortCount: byCohort.size\n\t}\n\n\tfor (const { best, count } of byCohort.values()) {\n\t\tconst e = best.e\n\t\tconst catalog = catalogFor(e)\n\t\tif (!catalog) continue // cohort not in the study catalog; volcano still shows it\n\t\tconst p = Number(e.fdr)\n\t\tconst entry: TileEntry = {\n\t\t\torganism: e.organism,\n\t\t\tassayName: e.assayName,\n\t\t\tcohortName: e.cohortName,\n\t\t\tdisease: catalog.disease || e.disease,\n\t\t\tuniqueIdentifier: e.uniqueIdentifier,\n\t\t\tproteinAccession: e.proteinAccession,\n\t\t\tlog2fc: getLog2Ratio(e.foldChange),\n\t\t\tfdr: Number.isFinite(p) && p > 0 ? p : null,\n\t\t\ttestedN: Number(e.testedN) || 0,\n\t\t\tcontrolN: Number(e.controlN) || 0,\n\t\t\tisoformCount: count,\n\t\t\tcatalog\n\t\t}\n\t\t// first tile (in dataset order) whose rule the cohort satisfies\n\t\tconst tile = tiles.find(t => cohortMatches(t.cohortMatch, e.organism, e.assayName, catalog))\n\t\tif (tile) td.byTile[tile.key].push(entry)\n\t}\n\n\treturn td\n}\n\n/************ card + interaction scaffolding ************/\n\n// outer card width (content CARD_W + 2\u00D712px padding + 2\u00D71px border); the\n// grid column track, so cards line up in even columns\nconst CARD_OUTER_W = CARD_W + 26\n\nexport function makeTileGrid(holder: any) {\n\t// CSS grid with fixed column tracks: an expanded card spans every column\n\t// (grid-column 1 / -1) and `dense` packing lets the cards after it back-fill\n\t// the gap it leaves in the row above, so the rest of the grid shifts around\n\t// it. Default align-items (stretch) equalizes card heights within a row.\n\t// white-space is reset because the mass plot holder sets nowrap (for\n\t// horizontally-scrolling plots), which would keep card text from wrapping.\n\treturn holder\n\t\t.append('div')\n\t\t.style('display', 'grid')\n\t\t.style('grid-template-columns', `repeat(auto-fill, ${CARD_OUTER_W}px)`)\n\t\t.style('grid-auto-flow', 'row dense')\n\t\t.style('gap', '14px')\n\t\t.style('margin-top', '10px')\n\t\t.style('white-space', 'normal')\n}\n\n/** in-place expansion of a tile card: render() fills the expanded body each\n * time the card opens (so it reflects the current data); `open` starts the\n * card expanded (to keep a tile open across re-renders) and onToggle reports\n * every open/close so the caller can remember which tile is open */\nexport type TileExpand = {\n\trender: (holder: any) => void | Promise<void>\n\topen?: boolean\n\tonToggle?: (open: boolean) => void\n}\n\n// the one expanded card per grid, as its collapse function\nconst expandedInGrid = new WeakMap<Element, () => void>()\n\n// clicks on these never expand a card: they belong to controls on the face\nconst NO_EXPAND_SELECTOR = 'button,select,input,textarea,label,a,[role=\"button\"],[role=\"tab\"],[data-no-expand]'\n\n/** remember which tile of a plot instance is expanded, so a re-render (new\n * filter, refetch, cutoff change) reopens it; one expanded tile per plot */\nexport function tileExpandState(self: any, key: string): Pick<TileExpand, 'open' | 'onToggle'> {\n\treturn {\n\t\topen: self.expandedTileKey === key,\n\t\tonToggle: open => {\n\t\t\tif (open) self.expandedTileKey = key\n\t\t\telse if (self.expandedTileKey === key) self.expandedTileKey = null\n\t\t}\n\t}\n}\n\nexport function makeTileCard(\n\tgrid: any,\n\topts: {\n\t\ttitle: string\n\t\tsubtitle?: string\n\t\tfullWidth?: boolean\n\t\t// fixed footprint (CARD_W \u00D7 \u2265CARD_MIN_H) so tile cards line up evenly\n\t\tuniform?: boolean\n\t\t// greyed placeholder card (tile exists in the atlas but has no data here)\n\t\tdisabled?: boolean\n\t\t// when set, clicking the card (or its \u2922 button) expands it in place to the\n\t\t// full grid width; \u2921 collapses it back to the face\n\t\texpand?: TileExpand\n\t}\n) {\n\tconst card = grid\n\t\t.append('div')\n\t\t.style('border', opts.disabled ? '1px dashed #e5e7eb' : '1px solid #e5e7eb')\n\t\t.style('border-radius', '8px')\n\t\t.style('padding', '10px 12px')\n\t\t.style('background', opts.disabled ? '#f9fafb' : '#fff')\n\t\t.style('min-width', '0')\n\tif (opts.fullWidth) card.style('grid-column', '1 / -1')\n\tif (opts.uniform) {\n\t\tcard\n\t\t\t.style('width', `${CARD_W}px`)\n\t\t\t.style('min-height', `${CARD_MIN_H}px`)\n\t\t\t.style('display', 'flex')\n\t\t\t.style('flex-direction', 'column')\n\t}\n\n\tconst header = card\n\t\t.append('div')\n\t\t.style('display', 'flex')\n\t\t.style('align-items', 'baseline')\n\t\t.style('gap', '8px')\n\t\t.style('flex-wrap', 'wrap')\n\theader\n\t\t.append('span')\n\t\t.style('font-weight', '600')\n\t\t.style('font-size', '.9em')\n\t\t.style('min-width', '0') // let long titles wrap instead of overflowing the card\n\t\t.style('color', opts.disabled ? '#9ca3af' : '#111827')\n\t\t.text(opts.title)\n\tif (opts.subtitle) {\n\t\tcard\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.75em')\n\t\t\t.style('color', '#6b7280')\n\t\t\t.style('margin', '2px 0 4px 0')\n\t\t\t.text(opts.subtitle)\n\t}\n\tconst face = card.append('div')\n\tconst expand = opts.expand\n\tif (!expand) return face\n\n\tconst expandedBody = card.append('div').style('display', 'none').style('overflow-x', 'auto')\n\tconst gridNode = grid.node() as Element\n\tlet isOpen = false\n\n\tconst toggleBtn = header\n\t\t.append('span')\n\t\t.attr('role', 'button')\n\t\t.attr('tabindex', '0')\n\t\t.style('margin-left', 'auto')\n\t\t.style('cursor', 'pointer')\n\t\t.style('color', '#9ca3af')\n\t\t.style('font-size', '1em')\n\t\t.style('line-height', '1')\n\t\t.on('mouseover', function (this: any) {\n\t\t\tselect(this).style('color', '#374151')\n\t\t})\n\t\t.on('mouseout', function (this: any) {\n\t\t\tselect(this).style('color', '#9ca3af')\n\t\t})\n\tconst setToggleBtn = () =>\n\t\ttoggleBtn\n\t\t\t.text(isOpen ? '\u2921' : '\u2922')\n\t\t\t.attr('title', isOpen ? 'Collapse' : 'Expand')\n\t\t\t.attr('aria-label', `${isOpen ? 'Collapse' : 'Expand'} ${opts.title}`)\n\t\t\t.attr('aria-expanded', String(isOpen))\n\tsetToggleBtn()\n\n\tconst collapse = () => {\n\t\tif (!isOpen) return\n\t\tisOpen = false\n\t\tif (expandedInGrid.get(gridNode) === collapse) expandedInGrid.delete(gridNode)\n\t\tconst bodyNode = expandedBody.node() as HTMLElement\n\t\t// detach only the direct children: an expanded view may re-attach a kept-alive\n\t\t// subtree on the next open (selectAll('*') would also take apart its descendants)\n\t\tbodyNode.replaceChildren()\n\t\texpandedBody.style('display', 'none')\n\t\tface.style('display', null)\n\t\tcard.style('grid-column', opts.fullWidth ? '1 / -1' : null).style('cursor', 'pointer')\n\t\tif (opts.uniform) card.style('width', `${CARD_W}px`).style('min-height', `${CARD_MIN_H}px`)\n\t\tsetToggleBtn()\n\t\texpand.onToggle?.(false)\n\t}\n\tconst open = (scroll: boolean) => {\n\t\tif (isOpen) return\n\t\texpandedInGrid.get(gridNode)?.()\n\t\tisOpen = true\n\t\texpandedInGrid.set(gridNode, collapse)\n\t\tface.style('display', 'none')\n\t\tcard.style('grid-column', '1 / -1').style('width', null).style('min-height', null).style('cursor', null)\n\t\texpandedBody.style('display', null)\n\t\t;(expandedBody.node() as HTMLElement).replaceChildren()\n\t\tsetToggleBtn()\n\t\texpand.onToggle?.(true)\n\t\tconst holder = expandedBody.append('div').style('padding', '4px 4px 0 4px')\n\t\ttry {\n\t\t\tconst p = expand.render(holder)\n\t\t\tif (p instanceof Promise) {\n\t\t\t\tconst wait = holder.append('div').style('color', '#6b7280').style('font-size', '.85em').text('Loading\u2026')\n\t\t\t\tp.catch(err => renderTileError(holder, err, null)).finally(() => wait.remove())\n\t\t\t}\n\t\t} catch (err: any) {\n\t\t\trenderTileError(holder, err, null)\n\t\t}\n\t\tif (scroll) (card.node() as HTMLElement).scrollIntoView?.({ block: 'nearest', behavior: 'smooth' })\n\t}\n\n\ttoggleBtn\n\t\t.on('click', (event: MouseEvent) => {\n\t\t\tevent.stopPropagation()\n\t\t\tif (isOpen) collapse()\n\t\t\telse open(true)\n\t\t})\n\t\t.on('keydown', (event: KeyboardEvent) => {\n\t\t\tif (event.key === 'Enter' || event.key === ' ') {\n\t\t\t\tevent.preventDefault()\n\t\t\t\tif (isOpen) collapse()\n\t\t\t\telse open(true)\n\t\t\t}\n\t\t})\n\t// clicking anywhere on a collapsed card expands it, except on face controls\n\t// (tabs, selects, search boxes) and data marks that stop propagation\n\tcard.style('cursor', 'pointer').on('click', (event: MouseEvent) => {\n\t\tif (isOpen) return\n\t\tconst t = event.target as Element | null\n\t\tif (t?.closest?.(NO_EXPAND_SELECTOR)) return\n\t\topen(true)\n\t})\n\t// start expanded once the caller has drawn the face (faces measure their own\n\t// layout, which needs them visible)\n\tif (expand.open) queueMicrotask(() => open(false))\n\treturn face\n}\n\nconst tileClickMenu = new Menu({ padding: '0px' })\n\nfunction entryTipTable(entry: TileEntry, holder: any) {\n\tconst tbl = table2col({ holder: holder.append('table') })\n\ttbl.addRow('Sample set', entry.cohortName)\n\tconst c = entry.catalog || {}\n\tif (entry.disease) tbl.addRow('Disease', entry.disease)\n\tif (c.model) tbl.addRow('Model', c.model)\n\tif (c.cellType) tbl.addRow('Cell type', c.cellType)\n\tif (c.ageGroup) tbl.addRow('Age group', c.ageGroup)\n\tif (c.sampleSource) tbl.addRow('Sample source', c.sampleSource)\n\tif (entry.ptmType) tbl.addRow('PTM type', entry.ptmType)\n\tif (entry.modSites) tbl.addRow('Modified site', entry.modSites)\n\ttbl.addRow('Assay', entry.assayName)\n\ttbl.addRow('log2 fold change', entry.log2fc === null ? 'NA' : roundValue(entry.log2fc, 3))\n\ttbl.addRow('FDR', entry.fdr === null ? 'NA' : entry.fdr.toExponential(2))\n\ttbl.addRow('Case samples', entry.testedN)\n\ttbl.addRow('Control samples', entry.controlN)\n\ttbl.addRow('Protein accession', entry.proteinAccession)\n\tif (entry.isoformCount > 1) tbl.addRow('Note', `most significant of ${entry.isoformCount} isoforms`)\n}\n\n// hover tooltip + click menu (violin launch) for a tile data point\nfunction attachEntryBehavior(shape: any, entry: TileEntry, self: any) {\n\tshape\n\t\t.style('cursor', 'pointer')\n\t\t.on('mouseover', (event: MouseEvent) => {\n\t\t\tself.dom.tip.clear()\n\t\t\tentryTipTable(entry, self.dom.tip.d)\n\t\t\tself.dom.tip.show(event.clientX, event.clientY)\n\t\t})\n\t\t.on('mouseout', () => self.dom.tip.hide())\n\t\t.on('click', (event: MouseEvent) => {\n\t\t\t// a data point opens its own menu; it must not also expand the card\n\t\t\tevent.stopPropagation()\n\t\t\tself.dom.tip.hide()\n\t\t\ttileClickMenu.clear()\n\t\t\tconst div = tileClickMenu.d.append('div')\n\t\t\tentryTipTable(entry, div.append('div').style('padding', '5px'))\n\t\t\tdiv\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t.text('Violin plot')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\ttileClickMenu.hide()\n\t\t\t\t\tlaunchViolinPlot(self, entry.organism, entry.assayName, entry.cohortName, entry.uniqueIdentifier)\n\t\t\t\t})\n\t\t\ttileClickMenu.show(event.clientX, event.clientY)\n\t\t})\n}\n\nconst isSig = (e: TileEntry) => e.fdr !== null && e.fdr < SIG_P\n\nfunction drawMarker(g: any, x: number, y: number, color: string, sig: boolean, r = 4.5) {\n\treturn g\n\t\t.append('circle')\n\t\t.attr('cx', x)\n\t\t.attr('cy', y)\n\t\t.attr('r', r)\n\t\t.attr('fill', sig ? color : '#fff')\n\t\t.attr('fill-opacity', sig ? 0.9 : 1)\n\t\t.attr('stroke', color)\n\t\t.attr('stroke-width', 1.5)\n}\n\n// y (or x) domain for log2FC values: always includes 0, padded\nfunction fcDomain(values: number[]): [number, number] {\n\tlet min = Math.min(0, ...values)\n\tlet max = Math.max(0, ...values)\n\tconst span = Math.max(0.4, max - min)\n\tconst pad = span * 0.15\n\tif (min < 0) min -= pad\n\tmax += pad\n\tif (min === 0) min = -span * 0.05 // keep the zero line off the plot edge\n\treturn [min, max]\n}\n\nfunction addSigFootnote(body: any) {\n\tbody\n\t\t.append('div')\n\t\t.style('font-size', '.7em')\n\t\t.style('color', '#9ca3af')\n\t\t.style('margin-top', '2px')\n\t\t.text(`filled: FDR < ${SIG_P}; hollow: not significant`)\n}\n\nfunction drawZeroLine(g: any, x1: number, y1: number, x2: number, y2: number) {\n\tg.append('line')\n\t\t.attr('x1', x1)\n\t\t.attr('y1', y1)\n\t\t.attr('x2', x2)\n\t\t.attr('y2', y2)\n\t\t.attr('stroke', 'black')\n\t\t.attr('stroke-dasharray', '4 3')\n\t\t.attr('stroke-opacity', 0.35)\n}\n\nfunction styledAxis(g: any, axis: any, tickFontSize?: string | null) {\n\tconst a = g.call(axis)\n\taxisstyle({ axis: a, color: 'black', showline: true })\n\t// compact tile faces shrink tick labels so categorical axes don't collide\n\tif (tickFontSize) a.selectAll('text').style('font-size', tickFontSize)\n\treturn a\n}\n\n// slant categorical x-tick labels on very narrow charts so they don't collide\nfunction rotateXTicks(axisG: any) {\n\taxisG\n\t\t.selectAll('text')\n\t\t.attr('transform', 'rotate(-38)')\n\t\t.attr('text-anchor', 'end')\n\t\t.attr('dx', '-2px')\n\t\t.attr('dy', '5px')\n}\n\nfunction yAxisTitle(svg: any, innerH: number, marginTop: number, text: string) {\n\tsvg\n\t\t.append('text')\n\t\t.attr('transform', `translate(11,${marginTop + innerH / 2}) rotate(-90)`)\n\t\t.attr('text-anchor', 'middle')\n\t\t.style('font-size', '11px')\n\t\t.style('fill', '#374151')\n\t\t.text(text)\n}\n\n/************ tile renderers ************/\n\n// Tile \u2014 cross-disease profile: lollipop of log2FC per disease;\n// the blue side answers \"this protein changes in which diseases?\"\n// BD and SCZ are psychiatric disorders, while the others are neurodegenerative diseases.\n// the grey side (diseases flagged specificityControl in the dataset config,\n// e.g. psychiatric controls) answers \"is the change neurodegeneration-specific or a generic brain-disease signal?\"\nfunction renderCrossDiseaseTile(body: any, td: TileData, self: any, cfg: TileCfg, opts: TileRenderOpts = {}) {\n\tconst k = opts.scale || 1\n\tconst kx = opts.scaleX ?? k\n\tconst mr = 4.5 * Math.sqrt(k)\n\tconst tickFont = k < 1 ? '8.5px' : null\n\tconst byDisease = new Map<string, TileEntry>()\n\t// several cohorts may share a disease: show the most significant one and say so\n\tconst multiCohort = new Set<string>()\n\tfor (const e of entries(td, cfg.key)) {\n\t\tconst d = e.disease || e.cohortName\n\t\tconst cur = byDisease.get(d)\n\t\tif (cur) multiCohort.add(d)\n\t\tif (!cur || (e.fdr ?? Infinity) < (cur.fdr ?? Infinity)) byDisease.set(d, e)\n\t}\n\tconst diseases = orderBy([...byDisease.keys()], diseaseOrder(self))\n\tconst isControl = (d: string) => isSpecificityControl(self, d)\n\n\tconst margin = { top: 12, right: 10, bottom: 34, left: 46 }\n\tconst innerW = Math.max(200, diseases.length * 38) * kx\n\tconst innerH = 150 * k\n\tconst svg = body\n\t\t.append('svg')\n\t\t.attr('width', innerW + margin.left + margin.right)\n\t\t.attr('height', innerH + margin.top + margin.bottom)\n\tconst g = svg.append('g').attr('transform', `translate(${margin.left},${margin.top})`)\n\n\tconst x = scaleBand().domain(diseases).range([0, innerW]).padding(0.4)\n\tconst y = scaleLinear()\n\t\t.domain(fcDomain(diseases.map(d => byDisease.get(d)!.log2fc as number)))\n\t\t.range([innerH, 0])\n\n\tconst xAxisG = styledAxis(g.append('g').attr('transform', `translate(0,${innerH})`), axisBottom(x), tickFont)\n\tif (kx < 0.6) rotateXTicks(xAxisG)\n\tstyledAxis(g.append('g'), axisLeft(y).ticks(4), tickFont)\n\tdrawZeroLine(g, 0, y(0), innerW, y(0))\n\tyAxisTitle(svg, innerH, margin.top, 'log2FC vs control')\n\n\t// separator before the psychiatric controls\n\tconst firstPsy = diseases.findIndex(isControl)\n\tif (firstPsy > 0) {\n\t\tconst xSep = (x(diseases[firstPsy - 1])! + x.bandwidth() + x(diseases[firstPsy])!) / 2\n\t\tg.append('line')\n\t\t\t.attr('x1', xSep)\n\t\t\t.attr('x2', xSep)\n\t\t\t.attr('y1', 0)\n\t\t\t.attr('y2', innerH)\n\t\t\t.attr('stroke', '#d1d5db')\n\t\t\t.attr('stroke-dasharray', '2 3')\n\t\t// the label needs more room than a narrow face has; the muted grey\n\t\t// dots still mark the group, and the expanded view spells it out\n\t\tif (kx >= 0.6) {\n\t\t\tg.append('text')\n\t\t\t\t.attr('x', (xSep + innerW) / 2)\n\t\t\t\t.attr('y', 9)\n\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t.style('font-size', '9px')\n\t\t\t\t.style('fill', '#9ca3af')\n\t\t\t\t.text(getProteinViewConfig(self).specificityControlLabel || 'controls')\n\t\t}\n\t}\n\n\tfor (const d of diseases) {\n\t\tconst e = byDisease.get(d)!\n\t\tconst cx = x(d)! + x.bandwidth() / 2\n\t\tconst color = isControl(d) ? PSY_COLOR : ND_COLOR\n\t\tg.append('line')\n\t\t\t.attr('x1', cx)\n\t\t\t.attr('x2', cx)\n\t\t\t.attr('y1', y(0))\n\t\t\t.attr('y2', y(e.log2fc as number))\n\t\t\t.attr('stroke', color)\n\t\t\t.attr('stroke-width', 1.5)\n\t\tattachEntryBehavior(drawMarker(g, cx, y(e.log2fc as number), color, isSig(e), mr), e, self)\n\t}\n\n\t// relabel ticks that have a nicer display name\n\tg.selectAll('text').each(function (this: any) {\n\t\tconst t = (this as SVGTextElement).textContent || ''\n\t\tconst l = diseaseLabel(self, t)\n\t\tif (l !== t) (this as SVGTextElement).textContent = l\n\t})\n\n\taddSigFootnote(body)\n\tif (multiCohort.size) {\n\t\tbody\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.7em')\n\t\t\t.style('color', '#9ca3af')\n\t\t\t.text(`${[...multiCohort].map(d => diseaseLabel(self, d)).join(', ')}: several cohorts, most significant shown`)\n\t}\n\tif (opts.expanded) {\n\t\tbody\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.75em')\n\t\t\t.style('color', '#6b7280')\n\t\t\t.style('margin-top', '4px')\n\t\t\t.style('max-width', `${innerW + margin.left + margin.right}px`)\n\t\t\t.text(diseases.map(d => `${diseaseLabel(self, d)} = ${diseaseCfg(self)[d]?.name || d}`).join(' \u00B7 '))\n\t}\n}\n\n// Tile 2 \u2014 whole vs insoluble dumbbell:\n// answers: \"Does this protein accumulate in the insoluble/aggregated fraction beyond any change in its total abundance (is it aggregating)?\"\n// Red far to the right of blue \u2192 the protein piles up in the insoluble fraction much more than its total level rises: the aggregation signature.\nfunction renderInsolubleTile(body: any, td: TileData, self: any, cfg: TileCfg, opts: TileRenderOpts = {}) {\n\tconst k = opts.scale || 1\n\tconst kx = opts.scaleX ?? k\n\tconst mr = 4.5 * Math.sqrt(k)\n\tconst tickFont = k < 1 ? '8.5px' : null\n\tconst wholeByCohort = new Map<string, TileEntry>()\n\t// the reference (whole proteome) side comes from the tile named by cfg.referenceTile\n\tif (cfg.referenceTile) for (const e of entries(td, cfg.referenceTile)) wholeByCohort.set(e.cohortName, e)\n\tconst insol = entries(td, cfg.key)\n\tconst rows = orderBy([...new Set(insol.map(e => e.cohortName))], diseaseOrder(self))\n\n\tconst pairs = rows.map(c => ({\n\t\tcohortName: c,\n\t\twhole: wholeByCohort.get(c) || null,\n\t\tinsoluble: insol.find(e => e.cohortName === c) || null\n\t}))\n\t// legend labels from the assays' proteomeLabel in the dataset config\n\tconst wholeEntry = pairs.find(p => p.whole)?.whole\n\tconst labelOf = (e: TileEntry | null | undefined, fallback: string) =>\n\t\te ? proteomeLabel(self, e.organism, e.assayName) : fallback\n\n\tconst margin = { top: 24, right: 12, bottom: 34, left: 46 }\n\tconst innerW = 240 * kx\n\tconst innerH = Math.max(90, rows.length * 30 * k)\n\tconst svg = body\n\t\t.append('svg')\n\t\t.attr('width', innerW + margin.left + margin.right)\n\t\t.attr('height', innerH + margin.top + margin.bottom)\n\tconst g = svg.append('g').attr('transform', `translate(${margin.left},${margin.top})`)\n\n\tconst values: number[] = []\n\tfor (const p of pairs) {\n\t\tif (p.whole) values.push(p.whole.log2fc as number)\n\t\tif (p.insoluble) values.push(p.insoluble.log2fc as number)\n\t}\n\tconst x = scaleLinear().domain(fcDomain(values)).range([0, innerW])\n\tconst y = scaleBand().domain(rows).range([0, innerH]).padding(0.4)\n\n\tstyledAxis(g.append('g').attr('transform', `translate(0,${innerH})`), axisBottom(x).ticks(4), tickFont)\n\tstyledAxis(g.append('g'), axisLeft(y), tickFont)\n\tdrawZeroLine(g, x(0), 0, x(0), innerH)\n\tsvg\n\t\t.append('text')\n\t\t.attr('x', margin.left + innerW / 2)\n\t\t.attr('y', margin.top + innerH + 30)\n\t\t.attr('text-anchor', 'middle')\n\t\t.style('font-size', '11px')\n\t\t.style('fill', '#374151')\n\t\t.text('log2FC vs control')\n\n\t// inline legend\n\tconst legend = g.append('g').attr('transform', `translate(0,-12)`)\n\tfor (const [i, item] of [\n\t\t{\n\t\t\tlabel: labelOf(wholeEntry, getTileConfig(self, cfg.referenceTile || '')?.title || 'reference'),\n\t\t\tcolor: WHOLE_COLOR\n\t\t},\n\t\t{ label: labelOf(insol[0], cfg.cohortMatch?.assay || cfg.title), color: INSOLUBLE_COLOR }\n\t].entries()) {\n\t\tconst lx = i * (kx < 0.6 ? 58 : 80)\n\t\tlegend.append('circle').attr('cx', lx).attr('cy', 0).attr('r', 4).attr('fill', item.color).attr('fill-opacity', 0.9)\n\t\tlegend\n\t\t\t.append('text')\n\t\t\t.attr('x', lx + 8)\n\t\t\t.attr('y', 3)\n\t\t\t.style('font-size', '10px')\n\t\t\t.style('fill', '#374151')\n\t\t\t.text(item.label)\n\t}\n\n\tfor (const p of pairs) {\n\t\tconst cy = y(p.cohortName)! + y.bandwidth() / 2\n\t\tif (p.whole && p.insoluble) {\n\t\t\tg.append('line')\n\t\t\t\t.attr('x1', x(p.whole.log2fc as number))\n\t\t\t\t.attr('x2', x(p.insoluble.log2fc as number))\n\t\t\t\t.attr('y1', cy)\n\t\t\t\t.attr('y2', cy)\n\t\t\t\t.attr('stroke', '#9ca3af')\n\t\t\t\t.attr('stroke-width', 1.5)\n\t\t}\n\t\tif (p.whole)\n\t\t\tattachEntryBehavior(\n\t\t\t\tdrawMarker(g, x(p.whole.log2fc as number), cy, WHOLE_COLOR, isSig(p.whole), mr),\n\t\t\t\tp.whole,\n\t\t\t\tself\n\t\t\t)\n\t\tif (p.insoluble)\n\t\t\tattachEntryBehavior(\n\t\t\t\tdrawMarker(g, x(p.insoluble.log2fc as number), cy, INSOLUBLE_COLOR, isSig(p.insoluble), mr),\n\t\t\t\tp.insoluble,\n\t\t\t\tself\n\t\t\t)\n\t}\n\n\taddSigFootnote(body)\n}\n\n// Tile \u2014 brain regional proteome: 9 regions coloured by log2FC where significant\n// answers: Where in the brain does this protein change?\n// thresholding/coloring rules are shared with the standalone brainRegions plot (brainRegions.svg.ts)\nlet brainGradientSeq = 0\n\n// per-gene fetch of the brainRegions route data; the parsed svg assets are\n// gene-independent and cached once per svgUrl\nfunction getBrainRegionsData(self: any): Promise<{ data: any; assets: BrainAssets | null }> {\n\tconst gene = self.state?.config?.tw?.term?.name\n\tconst [genome, dslabel] = vocabKey(self).split('|')\n\treturn cachedFetch(`brainRegions|${vocabKey(self)}|${gene}`, async () => {\n\t\tconst data = await dofetch3('termdb/brainRegions', { body: { genome, dslabel, gene } })\n\t\tif (data.error) throw data.error\n\t\tconst assets = Object.keys(data.isoforms || {}).length\n\t\t\t? await cachedFetch(`brainAssets|${data.svgUrl}`, () => loadBrainAssets(data.svgUrl, Object.keys(data.regions)))\n\t\t\t: null\n\t\treturn { data, assets }\n\t})\n}\n\n// fold-change color scale for one isoform, scoped to the selected disease\nconst brainFcScale = (isoformData: any, disease: string) => makeBrainFcScale(isoformData.data[disease] || {})\n\n// one brain for one disease; same coloring rules as the standalone\n// brainRegions plot (significant fold changes only)\nfunction drawBrainForDisease(\n\tholder: any,\n\tdata: any,\n\tassets: BrainAssets,\n\tisoform: string,\n\tdisease: string,\n\tself: any,\n\tbrainW: number,\n\tcolorScale: any\n) {\n\tconst regionData = data.isoforms[isoform]?.data?.[disease] || {}\n\trenderBrainSvg({\n\t\tholder: holder.append('div'),\n\t\twidth: brainW,\n\t\ttemplateUrl: data.templateUrl,\n\t\tassets,\n\t\tregions: data.regions,\n\t\ttip: self.dom.tip,\n\t\tfillByRegion: brainFillByRegion(regionData, colorScale),\n\t\ttooltipByRegion: brainTooltipByRegion(regionData)\n\t})\n}\n\nfunction drawBrainLegend(holder: any, colorScale: any, maxAbsFC: number, nSig: number, disease: string) {\n\tconst legend = holder.append('div').style('margin-top', '6px')\n\tif (!nSig) {\n\t\t// nothing passes the threshold: the gradient would only show the \u00B11 fallback domain\n\t\tlegend\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.75em')\n\t\t\t.style('color', '#6b7280')\n\t\t\t.text(`No region reaches p < ${BRAIN_P_THRESHOLD} for this isoform in ${disease} (all regions grey).`)\n\t\treturn\n\t}\n\tconst w = 160\n\tconst h = 10\n\tconst svg = legend\n\t\t.append('svg')\n\t\t.attr('width', w)\n\t\t.attr('height', h + 16)\n\tconst gradientId = `pv-brain-fc-gradient-${brainGradientSeq++}`\n\tconst gradient = svg\n\t\t.append('defs')\n\t\t.append('linearGradient')\n\t\t.attr('id', gradientId)\n\t\t.attr('x1', '0')\n\t\t.attr('y1', '0')\n\t\t.attr('x2', '1')\n\t\t.attr('y2', '0')\n\tconst steps = 10\n\tfor (let i = 0; i <= steps; i++) {\n\t\tconst t = i / steps\n\t\tgradient\n\t\t\t.append('stop')\n\t\t\t.attr('offset', `${t * 100}%`)\n\t\t\t.attr('stop-color', colorScale(-maxAbsFC + t * 2 * maxAbsFC))\n\t}\n\tsvg.append('rect').attr('width', w).attr('height', h).attr('fill', `url(#${gradientId})`).attr('stroke', '#d1d5db')\n\tconst labels: Array<[number, string, string]> = [\n\t\t[0, `-${maxAbsFC.toFixed(2)}`, 'start'],\n\t\t[w / 2, '0', 'middle'],\n\t\t[w, maxAbsFC.toFixed(2), 'end']\n\t]\n\tfor (const [x, text, anchor] of labels) {\n\t\tsvg\n\t\t\t.append('text')\n\t\t\t.attr('x', x)\n\t\t\t.attr('y', h + 12)\n\t\t\t.attr('text-anchor', anchor)\n\t\t\t.style('font-size', '9px')\n\t\t\t.style('fill', '#374151')\n\t\t\t.text(text)\n\t}\n\tlegend\n\t\t.append('div')\n\t\t.style('font-size', '.7em')\n\t\t.style('color', '#9ca3af')\n\t\t.text(`log\u2082 fold change vs control \u00B7 grey: not significant (p \u2265 ${BRAIN_P_THRESHOLD})`)\n}\n\n// gating uses proteome cohorts; the drawing uses the brainRegions route\nfunction renderBrainRegionTile(body: any, _td: TileData, self: any, _cfg: TileCfg, opts: TileRenderOpts = {}) {\n\tconst expanded = !!opts.expanded\n\tconst wait = body.append('div').style('font-size', '.75em').style('color', '#9ca3af').text('Loading\u2026')\n\tgetBrainRegionsData(self)\n\t\t.then(({ data, assets }) => {\n\t\t\twait.remove()\n\t\t\tconst isoformIds = Object.keys(data.isoforms || {})\n\t\t\tif (!isoformIds.length || !assets) {\n\t\t\t\tbody\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('font-size', '.75em')\n\t\t\t\t\t.style('color', '#9ca3af')\n\t\t\t\t\t.text('No brain-region data for this protein.')\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (!expanded) {\n\t\t\t\tconst iso = isoformIds[0]\n\t\t\t\tconst tabsHolder = body.append('div')\n\t\t\t\tconst brainHolder = body.append('div')\n\t\t\t\tconst caption = body\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('font-size', '.7em')\n\t\t\t\t\t.style('color', '#9ca3af')\n\t\t\t\t\t.style('margin-top', '2px')\n\t\t\t\tconst redraw = (disease: string) => {\n\t\t\t\t\tbrainHolder.selectAll('*').remove()\n\t\t\t\t\tconst { colorScale, nSig } = brainFcScale(data.isoforms[iso], disease)\n\t\t\t\t\tdrawBrainForDisease(brainHolder, data, assets, iso, disease, self, 185, colorScale)\n\t\t\t\t\tcaption.text(\n\t\t\t\t\t\tnSig\n\t\t\t\t\t\t\t? `red: up \u00B7 blue: down \u00B7 grey: p \u2265 ${BRAIN_P_THRESHOLD}`\n\t\t\t\t\t\t\t: `no region reaches p < ${BRAIN_P_THRESHOLD} in ${disease}`\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tif (data.diseases.length > 1) makeDiseaseTabs(tabsHolder, data.diseases, data.diseases[0], redraw, '.75em')\n\t\t\t\tredraw(data.diseases[0])\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst description = self.app.vocabApi.termdbConfig?.queries?.proteome?.brainRegions?.description\n\t\t\tif (description) {\n\t\t\t\tbody\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('font-size', '.8em')\n\t\t\t\t\t.style('color', '#555')\n\t\t\t\t\t.style('max-width', '640px')\n\t\t\t\t\t.style('line-height', '1.4')\n\t\t\t\t\t.style('margin-bottom', '8px')\n\t\t\t\t\t.text(description)\n\t\t\t}\n\n\t\t\tlet selectedIso = isoformIds[0]\n\t\t\tlet selectedDisease = data.diseases[0]\n\t\t\tconst controlRow = body.append('div').style('margin-bottom', '8px').style('font-size', '.85em')\n\t\t\tcontrolRow.append('span').style('font-weight', '600').text('Isoform: ')\n\t\t\tconst tabsHolder = body.append('div')\n\t\t\tconst brainHolder = body.append('div')\n\t\t\tconst redraw = () => {\n\t\t\t\tbrainHolder.selectAll('*').remove()\n\t\t\t\tconst isoformData = data.isoforms[selectedIso]\n\t\t\t\tif (!isoformData) return\n\t\t\t\tconst { colorScale, maxAbsFC, nSig } = brainFcScale(isoformData, selectedDisease)\n\t\t\t\tdrawBrainForDisease(brainHolder, data, assets, selectedIso, selectedDisease, self, 460, colorScale)\n\t\t\t\tdrawBrainLegend(brainHolder, colorScale, maxAbsFC, nSig, selectedDisease)\n\t\t\t}\n\t\t\tif (data.diseases.length > 1) {\n\t\t\t\tmakeDiseaseTabs(\n\t\t\t\t\ttabsHolder,\n\t\t\t\t\tdata.diseases,\n\t\t\t\t\tselectedDisease,\n\t\t\t\t\t(d: string) => {\n\t\t\t\t\t\tselectedDisease = d\n\t\t\t\t\t\tredraw()\n\t\t\t\t\t},\n\t\t\t\t\t'.9em'\n\t\t\t\t)\n\t\t\t}\n\t\t\tif (isoformIds.length > 1) {\n\t\t\t\tconst sel = controlRow\n\t\t\t\t\t.append('select')\n\t\t\t\t\t.style('margin-left', '5px')\n\t\t\t\t\t.on('change', () => {\n\t\t\t\t\t\tselectedIso = sel.node().value\n\t\t\t\t\t\tredraw()\n\t\t\t\t\t})\n\t\t\t\tsel\n\t\t\t\t\t.selectAll('option')\n\t\t\t\t\t.data(isoformIds)\n\t\t\t\t\t.enter()\n\t\t\t\t\t.append('option')\n\t\t\t\t\t.attr('value', (d: string) => d)\n\t\t\t\t\t.text((d: string) => `${data.isoforms[d].gene_name} \u2014 ${d}`)\n\t\t\t} else {\n\t\t\t\tcontrolRow\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.style('margin-left', '5px')\n\t\t\t\t\t.text(`${data.isoforms[selectedIso].gene_name} \u2014 ${selectedIso}`)\n\t\t\t}\n\t\t\tredraw()\n\t\t})\n\t\t.catch((err: any) => {\n\t\t\twait.style('color', '#b91c1c').text(`Failed to load: ${err?.message || err}`)\n\t\t\tif (self.app?.opts?.debug) console.error(err)\n\t\t})\n}\n\n// Tile \u2014 models over age: log2FC vs control, one line per model with an\n// ageGroup series; single-timepoint models sit in a separate strip so no\n// age is implied.\n// answers: \"when does this protein start to change, in which models?\"\"\nfunction renderMouseModelsTile(body: any, td: TileData, self: any, cfg: TileCfg, opts: TileRenderOpts = {}) {\n\tconst k = opts.scale || 1\n\tconst kx = opts.scaleX ?? k\n\tconst mr = 4 * Math.sqrt(k)\n\tconst tickFont = k < 1 ? '8.5px' : null\n\ttype AgedPoint = { age: number; e: TileEntry }\n\tconst aged = new Map<string, AgedPoint[]>()\n\tconst singles: TileEntry[] = []\n\tfor (const e of entries(td, cfg.key)) {\n\t\tconst age = e.catalog.ageGroup ? parseAge(e.catalog.ageGroup) : null\n\t\tif (age === null) {\n\t\t\tsingles.push(e)\n\t\t\tcontinue\n\t\t}\n\t\tif (!aged.has(e.catalog.model)) aged.set(e.catalog.model, [])\n\t\taged.get(e.catalog.model)!.push({ age, e })\n\t}\n\tfor (const pts of aged.values()) pts.sort((a, b) => a.age - b.age)\n\n\tconst ages = [...new Set([...aged.values()].flatMap(pts => pts.map(p => p.age)))].sort((a, b) => a - b)\n\t// no aged series (every model single-timepoint): only the strip is drawn\n\tconst hasAged = ages.length > 0\n\tconst margin = { top: 20, right: 12, bottom: 36, left: 46 }\n\tconst mainW = hasAged ? 210 * kx : 0\n\tconst stripGap = singles.length && hasAged ? 18 * kx : 0\n\tconst stripW = singles.length * 34 * kx\n\tconst innerH = 150 * k\n\tconst svg = body\n\t\t.append('svg')\n\t\t.attr('width', margin.left + mainW + stripGap + stripW + margin.right)\n\t\t.attr('height', innerH + margin.top + margin.bottom)\n\tconst g = svg.append('g').attr('transform', `translate(${margin.left},${margin.top})`)\n\n\tconst values: number[] = []\n\tfor (const pts of aged.values()) for (const p of pts) values.push(p.e.log2fc as number)\n\tfor (const e of singles) values.push(e.log2fc as number)\n\n\t// a single age would give a degenerate domain; pad it by a month either side\n\tconst x = scaleLinear()\n\t\t.domain(ages.length > 1 ? [ages[0], ages[ages.length - 1]] : [(ages[0] ?? 0) - 1, (ages[0] ?? 0) + 1])\n\t\t.range([0, mainW])\n\tconst y = scaleLinear().domain(fcDomain(values)).range([innerH, 0])\n\n\tif (hasAged) {\n\t\tstyledAxis(g.append('g').attr('transform', `translate(0,${innerH})`), axisBottom(x).tickValues(ages), tickFont)\n\t\tsvg\n\t\t\t.append('text')\n\t\t\t.attr('x', margin.left + mainW / 2)\n\t\t\t.attr('y', margin.top + innerH + 32)\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.style('font-size', '11px')\n\t\t\t.style('fill', '#374151')\n\t\t\t.text(cfg.xLabel || 'age')\n\t}\n\tstyledAxis(g.append('g'), axisLeft(y).ticks(4), tickFont)\n\tdrawZeroLine(g, 0, y(0), mainW + stripGap + stripW, y(0))\n\tyAxisTitle(svg, innerH, margin.top, cfg.yLabel || 'log2FC vs control')\n\n\tlet legendX = 0\n\tfor (const model of orderBy([...aged.keys()], modelOrder(self))) {\n\t\tconst pts = aged.get(model)!\n\t\tconst color = modelColor(self, model)\n\t\tconst path = d3line<AgedPoint>()\n\t\t\t.x(p => x(p.age))\n\t\t\t.y(p => y(p.e.log2fc as number))\n\t\tg.append('path')\n\t\t\t.attr('d', path(pts))\n\t\t\t.attr('fill', 'none')\n\t\t\t.attr('stroke', color)\n\t\t\t.attr('stroke-width', 1.5)\n\t\t\t.attr('stroke-opacity', 0.75)\n\t\tfor (const p of pts)\n\t\t\tattachEntryBehavior(drawMarker(g, x(p.age), y(p.e.log2fc as number), color, isSig(p.e), mr), p.e, self)\n\t\tg.append('text')\n\t\t\t.attr('x', legendX)\n\t\t\t.attr('y', -8)\n\t\t\t.style('font-size', '10px')\n\t\t\t.style('font-weight', '600')\n\t\t\t.style('fill', color)\n\t\t\t.text(model)\n\t\tlegendX += 52\n\t}\n\n\tif (singles.length) {\n\t\tconst stripX0 = mainW + stripGap\n\t\tg.append('line')\n\t\t\t.attr('x1', stripX0 - stripGap / 2)\n\t\t\t.attr('x2', stripX0 - stripGap / 2)\n\t\t\t.attr('y1', 0)\n\t\t\t.attr('y2', innerH)\n\t\t\t.attr('stroke', '#d1d5db')\n\t\t\t.attr('stroke-dasharray', '2 3')\n\t\tfor (const [i, e] of singles.entries()) {\n\t\t\tconst cx = stripX0 + i * 34 * kx + 17 * kx\n\t\t\tattachEntryBehavior(drawMarker(g, cx, y(e.log2fc as number), SINGLE_MODEL_COLOR, isSig(e), mr), e, self)\n\t\t\tconst lbl = g\n\t\t\t\t.append('text')\n\t\t\t\t.attr('x', cx)\n\t\t\t\t.attr('y', innerH + 14)\n\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t.style('font-size', '9px')\n\t\t\t\t.style('fill', '#6b7280')\n\t\t\t\t.text(e.catalog.model)\n\t\t\t// narrow strips slant the model names so they don't collide\n\t\t\tif (kx < 0.6) lbl.attr('transform', `rotate(-38 ${cx} ${innerH + 14})`).attr('text-anchor', 'end')\n\t\t}\n\t}\n\n\taddSigFootnote(body)\n}\n\n// Tile \u2014 cell type \u00D7 age grid: bubble per model, color = log2FC, size = significance.\n// answers: \"Which cell type carries this protein's change, and when does it appear?\"\"\nfunction renderCellTypesTile(body: any, td: TileData, self: any, cfg: TileCfg, opts: TileRenderOpts = {}) {\n\tconst k = opts.scale || 1\n\tconst kx = opts.scaleX ?? k\n\tconst all = entries(td, cfg.key)\n\tconst models = orderBy([...new Set(all.map(e => e.catalog.model))], modelOrder(self))\n\tconst cellTypes = orderBy([...new Set(all.map(e => e.catalog.cellType))], Object.keys(cellTypeCfg(self)))\n\n\t// per model, the ages actually present (sorted)\n\tconst agesByModel = new Map<string, string[]>()\n\tfor (const m of models) {\n\t\tconst ages = [...new Set(all.filter(e => e.catalog.model === m).map(e => e.catalog.ageGroup))].sort(byAge)\n\t\tagesByModel.set(m, ages)\n\t}\n\n\tconst CELL_W = 34 * kx\n\tconst CELL_H = 28 * k\n\tconst ROW_LABEL_W = 82\n\tconst MODEL_GAP = 12 * kx\n\tconst HEADER_H = 34\n\n\tconst colX = new Map<string, number>() // `${model}|${age}` \u2192 x center\n\tlet xCursor = 0\n\tconst modelSpans: Array<{ model: string; x0: number; x1: number }> = []\n\tfor (const m of models) {\n\t\tconst x0 = xCursor\n\t\tfor (const a of agesByModel.get(m)!) {\n\t\t\tcolX.set(`${m}|${a}`, xCursor + CELL_W / 2)\n\t\t\txCursor += CELL_W\n\t\t}\n\t\tmodelSpans.push({ model: m, x0, x1: xCursor })\n\t\txCursor += MODEL_GAP\n\t}\n\tconst gridW = xCursor - MODEL_GAP\n\tconst gridH = cellTypes.length * CELL_H\n\n\tconst svg = body\n\t\t.append('svg')\n\t\t.attr('width', ROW_LABEL_W + gridW + 10)\n\t\t.attr('height', HEADER_H + gridH + 8)\n\tconst g = svg.append('g').attr('transform', `translate(${ROW_LABEL_W},${HEADER_H})`)\n\n\t// column headers: model band + age labels\n\tfor (const span of modelSpans) {\n\t\tsvg\n\t\t\t.append('text')\n\t\t\t.attr('x', ROW_LABEL_W + (span.x0 + span.x1) / 2)\n\t\t\t.attr('y', 12)\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.style('font-size', '10px')\n\t\t\t.style('font-weight', '600')\n\t\t\t.style('fill', modelColor(self, span.model))\n\t\t\t.text(span.model)\n\t}\n\tfor (const [key, cx] of colX) {\n\t\tsvg\n\t\t\t.append('text')\n\t\t\t.attr('x', ROW_LABEL_W + cx)\n\t\t\t.attr('y', 27)\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.style('font-size', '9px')\n\t\t\t.style('fill', '#6b7280')\n\t\t\t.text(key.split('|')[1])\n\t}\n\t// row labels\n\tfor (const [i, ct] of cellTypes.entries()) {\n\t\tsvg\n\t\t\t.append('text')\n\t\t\t.attr('x', ROW_LABEL_W - 6)\n\t\t\t.attr('y', HEADER_H + i * CELL_H + CELL_H / 2 + 3)\n\t\t\t.attr('text-anchor', 'end')\n\t\t\t.style('font-size', '10px')\n\t\t\t.style('fill', '#374151')\n\t\t\t.text(ct)\n\t}\n\n\tconst maxAbsFc = Math.max(1, ...all.map(e => Math.abs(e.log2fc as number)))\n\tconst colorScale = scaleLinear<string>()\n\t\t.domain([-maxAbsFc, 0, maxAbsFc])\n\t\t.range([FC_NEG_COLOR, FC_ZERO_COLOR, FC_POS_COLOR])\n\tconst NEG_LOG_P_CAP = 10\n\t// bubble radius capped so the largest dot stays inside a narrowed cell\n\tconst rScale = scaleSqrt()\n\t\t.domain([0, NEG_LOG_P_CAP])\n\t\t.range([3 * k, Math.min(11 * k, CELL_W / 2 - 0.5)])\n\n\tfor (const e of all) {\n\t\tconst cx = colX.get(`${e.catalog.model}|${e.catalog.ageGroup}`)\n\t\tconst row = cellTypes.indexOf(e.catalog.cellType)\n\t\tif (cx === undefined || row < 0) continue\n\t\tconst negLogP = e.fdr === null ? 0 : Math.min(NEG_LOG_P_CAP, -Math.log10(Math.max(e.fdr, 1e-300)))\n\t\tconst circle = g\n\t\t\t.append('circle')\n\t\t\t.attr('cx', cx)\n\t\t\t.attr('cy', row * CELL_H + CELL_H / 2)\n\t\t\t.attr('r', rScale(negLogP))\n\t\t\t.attr('fill', colorScale(e.log2fc as number))\n\t\t\t.attr('stroke', isSig(e) ? '#374151' : '#d1d5db')\n\t\t\t.attr('stroke-width', 1)\n\t\tattachEntryBehavior(circle, e, self)\n\t}\n\n\tconst foot = body.append('div').style('font-size', '.7em').style('color', '#9ca3af').style('margin-top', '2px')\n\tfoot.style('max-width', '100%')\n\tfoot.append('span').text(`color: log2FC (purple down, blue up) \u00B7 size: \u2212log10(FDR) \u00B7 outline: FDR < ${SIG_P}`)\n\tfor (const ct of cellTypes) {\n\t\tconst note = cellTypeCfg(self)[ct]?.note\n\t\tif (note) foot.append('div').text(note)\n\t}\n}\n\n// Tile \u2014 plaque microenvironment: plaque vs adjacent non-plaque log2FC over\n// age (cohorts with model+ageGroup, one line per model); cohorts without an\n// age series (e.g. human) render as single reference marks labeled by organism.\n// answers: \"Is this protein recruited to amyloid plaques \u2014 how strongly, how early,\n// and does the same thing happen in human tissue?\"\nfunction renderPlaqueTile(body: any, td: TileData, self: any, cfg: TileCfg, opts: TileRenderOpts = {}) {\n\tconst k = opts.scale || 1\n\tconst kx = opts.scaleX ?? k\n\tconst mr = 4 * Math.sqrt(k)\n\tconst tickFont = k < 1 ? '8.5px' : null\n\tconst all = entries(td, cfg.key)\n\tconst series = all.filter(e => e.catalog.ageGroup && e.catalog.model)\n\tconst reference = all.filter(e => !(e.catalog.ageGroup && e.catalog.model))\n\tconst refLabel = (e: TileEntry) => e.organism.charAt(0).toUpperCase() + e.organism.slice(1)\n\tconst ages = [...new Set(series.map(e => e.catalog.ageGroup))].sort(byAge)\n\tconst refCategories = [...new Set(reference.map(refLabel))]\n\tconst categories = [...ages, ...refCategories]\n\n\tconst margin = { top: 20, right: 14, bottom: 36, left: 46 }\n\tconst innerW = Math.max(180, categories.length * 52) * kx\n\tconst innerH = 140 * k\n\tconst svg = body\n\t\t.append('svg')\n\t\t.attr('width', innerW + margin.left + margin.right)\n\t\t.attr('height', innerH + margin.top + margin.bottom)\n\tconst g = svg.append('g').attr('transform', `translate(${margin.left},${margin.top})`)\n\n\tconst x = scalePoint().domain(categories).range([0, innerW]).padding(0.5)\n\tconst y = scaleLinear()\n\t\t.domain(fcDomain(all.map(e => e.log2fc as number)))\n\t\t.range([innerH, 0])\n\n\tconst xAxisG = styledAxis(g.append('g').attr('transform', `translate(0,${innerH})`), axisBottom(x), tickFont)\n\tif (kx < 0.6) rotateXTicks(xAxisG)\n\tstyledAxis(g.append('g'), axisLeft(y).ticks(4), tickFont)\n\tdrawZeroLine(g, 0, y(0), innerW, y(0))\n\tyAxisTitle(svg, innerH, margin.top, cfg.yLabel || 'log2FC vs control')\n\t// the slanted tick labels of a narrow face would collide with this title;\n\t// the age ticks are self-explanatory there\n\tif (kx >= 0.6) {\n\t\tsvg\n\t\t\t.append('text')\n\t\t\t.attr('x', margin.left + innerW / 2)\n\t\t\t.attr('y', margin.top + innerH + 32)\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.style('font-size', '11px')\n\t\t\t.style('fill', '#374151')\n\t\t\t.text(cfg.xLabel || 'age')\n\t}\n\n\tif (refCategories.length && ages.length) {\n\t\tconst xSep = (x(ages[ages.length - 1])! + x(refCategories[0])!) / 2\n\t\tg.append('line')\n\t\t\t.attr('x1', xSep)\n\t\t\t.attr('x2', xSep)\n\t\t\t.attr('y1', 0)\n\t\t\t.attr('y2', innerH)\n\t\t\t.attr('stroke', '#d1d5db')\n\t\t\t.attr('stroke-dasharray', '2 3')\n\t}\n\n\tconst models = orderBy([...new Set(series.map(e => e.catalog.model))], modelOrder(self))\n\tlet legendX = 0\n\tfor (const model of models) {\n\t\tconst color = modelColor(self, model)\n\t\tconst pts = series\n\t\t\t.filter(e => e.catalog.model === model)\n\t\t\t.sort((a, b) => byAge(a.catalog.ageGroup, b.catalog.ageGroup))\n\t\tconst path = d3line<TileEntry>()\n\t\t\t.x(e => x(e.catalog.ageGroup)!)\n\t\t\t.y(e => y(e.log2fc as number))\n\t\tg.append('path')\n\t\t\t.attr('d', path(pts))\n\t\t\t.attr('fill', 'none')\n\t\t\t.attr('stroke', color)\n\t\t\t.attr('stroke-width', 1.5)\n\t\t\t.attr('stroke-opacity', 0.75)\n\t\t\t// a gap in the age series (a model missing one age) still gets connected;\n\t\t\t// dash the line so the interpolation is visible as such\n\t\t\t.attr('stroke-dasharray', pts.length < ages.length ? '5 3' : null)\n\t\tfor (const e of pts)\n\t\t\tattachEntryBehavior(drawMarker(g, x(e.catalog.ageGroup)!, y(e.log2fc as number), color, isSig(e), mr), e, self)\n\t\tg.append('text')\n\t\t\t.attr('x', legendX)\n\t\t\t.attr('y', -8)\n\t\t\t.style('font-size', '10px')\n\t\t\t.style('font-weight', '600')\n\t\t\t.style('fill', color)\n\t\t\t.text(model)\n\t\tlegendX += 52\n\t}\n\n\tfor (const e of reference) {\n\t\tconst cx = x(refLabel(e))!\n\t\tconst cy = y(e.log2fc as number)\n\t\tconst r = 5.5 * Math.sqrt(k)\n\t\tconst diamond = g\n\t\t\t.append('path')\n\t\t\t.attr('d', `M ${cx} ${cy - r} L ${cx + r} ${cy} L ${cx} ${cy + r} L ${cx - r} ${cy} Z`)\n\t\t\t.attr('fill', isSig(e) ? REFERENCE_COLOR : '#fff')\n\t\t\t.attr('stroke', REFERENCE_COLOR)\n\t\t\t.attr('stroke-width', 1.5)\n\t\tattachEntryBehavior(diamond, e, self)\n\t}\n\n\taddSigFootnote(body)\n}\n\n// Tile 7 \u2014 multiomic ranking: Integrative rank (\"#n of N\") of\n// GWAS, transcriptome, proteomes, PTMs and interactome per disease. Face: integrative\n// rank per disease + a mini strip of per-modality rank percentiles. Expanded:\n// the description and a full per-modality table.\n// Proteins are ranked by p/FDR value or its log2FC-z score (so rank 1 = the strongest disease-associated signal in that dataset).\n// Answers: \"How strong is the overall multi-omic evidence for this protein in AD / LBD / FTLD, and which modalities drive it?\"\nfunction getGeneRanks(self: any): Promise<any> {\n\tconst gene = self.state?.config?.tw?.term?.name\n\tconst [genome, dslabel] = vocabKey(self).split('|')\n\treturn cachedFetch(`geneRanks|${vocabKey(self)}|${gene}`, async () => {\n\t\tconst data = await dofetch3('termdb/geneRanking', { body: { genome, dslabel, gene } })\n\t\tif (data.error) throw data.error\n\t\treturn data.geneRanks || {}\n\t})\n}\n\n// percentile (0 = best) \u2192 color, dark for top-ranked\nconst rankColor = scaleLinear<string>().domain([0, 0.1, 1]).range(['#1d4ed8', '#93c5fd', '#f3f4f6']).clamp(true)\n\nfunction renderMultiomicRankTile(body: any, _td: TileData, self: any, _cfg: TileCfg, opts: TileRenderOpts = {}) {\n\tconst expanded = !!opts.expanded\n\t// column vocabulary of the ranking files and per-ranking display labels come from the dataset\n\tconst rankCfg = self.app.vocabApi.termdbConfig?.queries?.geneRanking || {}\n\tconst modalities: string[] = rankCfg.modalities || []\n\tconst integrativeColumn: string | undefined = rankCfg.integrativeColumn\n\tconst statColumns: string[] = rankCfg.statColumns || []\n\tconst rankingLabel = (key: string) => rankCfg.labels?.[key] || key\n\tconst wait = body.append('div').style('font-size', '.75em').style('color', '#9ca3af').text('Loading\u2026')\n\tgetGeneRanks(self)\n\t\t.then((geneRanks: any) => {\n\t\t\twait.remove()\n\t\t\tconst keys = Object.keys(geneRanks)\n\t\t\tconst ranked = keys.filter(k => geneRanks[k].row)\n\t\t\tif (!ranked.length) {\n\t\t\t\tbody\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('font-size', '.75em')\n\t\t\t\t\t.style('color', '#9ca3af')\n\t\t\t\t\t.text('Not present in the multiomic rankings.')\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst fmt = (n: number) => n.toLocaleString()\n\n\t\t\tif (expanded) {\n\t\t\t\tconst description = self.app.vocabApi.termdbConfig?.queries?.geneRanking?.description\n\t\t\t\tif (description) {\n\t\t\t\t\tbody\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.style('font-size', '.8em')\n\t\t\t\t\t\t.style('color', '#555')\n\t\t\t\t\t\t.style('max-width', '640px')\n\t\t\t\t\t\t.style('line-height', '1.4')\n\t\t\t\t\t\t.style('margin-bottom', '10px')\n\t\t\t\t\t\t.text(description)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const key of keys) {\n\t\t\t\tconst r = geneRanks[key]\n\t\t\t\tconst colIdx = new Map<string, number>(r.columns.map((c: string, i: number) => [c, i]))\n\t\t\t\tconst intIdx = integrativeColumn ? colIdx.get(integrativeColumn) : undefined\n\t\t\t\tconst intRank = r.row && intIdx !== undefined ? r.row[intIdx] : null\n\t\t\t\tconst section = body.append('div').style('margin-bottom', expanded ? '12px' : '6px')\n\t\t\t\tconst head = section\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('display', 'flex')\n\t\t\t\t\t.style('align-items', 'baseline')\n\t\t\t\t\t.style('gap', '6px')\n\t\t\t\t\t.style('font-size', expanded ? '.9em' : '.8em')\n\t\t\t\thead.append('span').style('font-weight', '600').style('color', '#374151').text(rankingLabel(key))\n\t\t\t\tif (!r.row) {\n\t\t\t\t\thead.append('span').style('color', '#9ca3af').text('not ranked')\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\thead\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.style('color', typeof intRank === 'number' ? '#111827' : '#9ca3af')\n\t\t\t\t\t.text(typeof intRank === 'number' ? `#${fmt(intRank)} of ${fmt(r.counts[intIdx!])}` : 'no integrative rank')\n\n\t\t\t\t// per-modality ranks: strip on the face, table when expanded\n\t\t\t\tconst mods = modalities.filter(m => colIdx.has(m))\n\t\t\t\tif (!expanded) {\n\t\t\t\t\tconst strip = section.append('div').style('display', 'flex').style('gap', '2px').style('margin-top', '2px')\n\t\t\t\t\tfor (const m of mods) {\n\t\t\t\t\t\tconst c = colIdx.get(m)!\n\t\t\t\t\t\tconst v = r.row[c]\n\t\t\t\t\t\tconst n = r.counts[c]\n\t\t\t\t\t\tconst pct = typeof v === 'number' && n ? (v - 1) / Math.max(1, n - 1) : null\n\t\t\t\t\t\tstrip\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.attr('title', pct === null ? `${m}: not ranked` : `${m}: #${fmt(v as number)} of ${fmt(n)}`)\n\t\t\t\t\t\t\t.style('width', '20px')\n\t\t\t\t\t\t\t.style('height', '9px')\n\t\t\t\t\t\t\t.style('border-radius', '2px')\n\t\t\t\t\t\t\t.style('background', pct === null ? '#fff' : rankColor(pct))\n\t\t\t\t\t\t\t.style('border', pct === null ? '1px dashed #d1d5db' : '1px solid transparent')\n\t\t\t\t\t\t\t.style('box-sizing', 'border-box')\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst tbl = table2col({ holder: section.append('table') })\n\t\t\t\tfor (const m of mods) {\n\t\t\t\t\tconst c = colIdx.get(m)!\n\t\t\t\t\tconst v = r.row[c]\n\t\t\t\t\tconst n = r.counts[c]\n\t\t\t\t\tconst pctTop = typeof v === 'number' ? (100 * v) / n : null\n\t\t\t\t\tconst pctText = pctTop === null ? '' : ` (top ${pctTop < 0.1 ? pctTop.toFixed(2) : pctTop.toFixed(1)}%)`\n\t\t\t\t\ttbl.addRow(m, typeof v === 'number' ? `#${fmt(v)} of ${fmt(n)}${pctText}` : 'not ranked')\n\t\t\t\t}\n\t\t\t\tfor (const extra of statColumns) {\n\t\t\t\t\tconst c = colIdx.get(extra)\n\t\t\t\t\tif (c === undefined) continue\n\t\t\t\t\tconst v = r.row[c]\n\t\t\t\t\ttbl.addRow(extra, typeof v === 'number' ? (v < 0.001 && v > 0 ? v.toExponential(2) : String(v)) : 'NA')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!expanded) {\n\t\t\t\tconst foot = body.append('div').style('font-size', '.7em').style('color', '#9ca3af').style('margin-top', '4px')\n\t\t\t\tfoot.text('strip: one cell per modality, darker = ranked higher \u00B7 hover for ranks')\n\t\t\t}\n\t\t})\n\t\t.catch((err: any) => {\n\t\t\twait.style('color', '#b91c1c').text(`Failed to load: ${err?.message || err}`)\n\t\t\tif (self.app?.opts?.debug) console.error(err)\n\t\t})\n}\n\n// Tile \u2014 concordance: All-gene scatter of log2FC in one cohort vs another\n// (human vs mouse model, or model vs model), this protein highlighted,\n// human-vs-mouse panels ask \"does this mouse model reproduce human AD?\",\n// the mouse-vs-mouse panel \"do the two models agree with each other?\".\n// R: Pearson correlation between the two cohorts' log2FC values across all\n// shared genes (not just the searched protein), i.e. how well the whole\n// proteome's direction and magnitude of change in one dataset tracks the\n// other. High R (> 0.5): largely the same changes; ~0.2\u20130.3: only a subset\n// moves in concert; \u2248 0: no global relationship.\n// Answers: \"Does the mouse model reproduce the human change for this protein \u2014 and for the proteome as a whole?\"\ntype CohortRef = { organism: string; assay: string; cohort: string; label: string }\ntype ConcordancePair = { key: string; label: string; x: CohortRef; y: CohortRef }\n// server joins the two DAP files on upper-cased gene and runs R's cor.test (R/src/corr.R)\nfunction getConcordance(self: any, x: CohortRef, y: CohortRef): Promise<DapConcordance> {\n\tconst [genome, dslabel] = vocabKey(self).split('|')\n\tconst refKey = (r: CohortRef) => `${r.organism}|${r.assay}|${r.cohort}`\n\treturn cachedFetch(`dapConcordance|${vocabKey(self)}|${refKey(x)}|${refKey(y)}`, async () => {\n\t\tconst data = await dofetch3('termdb/dapVolcano', {\n\t\t\tbody: {\n\t\t\t\tgenome,\n\t\t\t\tdslabel,\n\t\t\t\torganism: x.organism,\n\t\t\t\tassay: x.assay,\n\t\t\t\tcohort: x.cohort,\n\t\t\t\tconcordanceWith: { organism: y.organism, assay: y.assay, cohort: y.cohort }\n\t\t\t}\n\t\t})\n\t\tif (data.error) throw data.error\n\t\treturn data.concordance\n\t})\n}\n\n// first cohort (with a DAP file) satisfying a pair side's cohortMatch; an\n// ageVaries side additionally requires catalog.ageGroup == age\nfunction findPairCohort(self: any, side: PairSide, age: string): CohortRef | null {\n\tconst organisms = self.app?.vocabApi?.termdbConfig?.queries?.proteome?.organisms || {}\n\tfor (const organism in organisms) {\n\t\tconst assays = organisms[organism]?.assays || {}\n\t\tfor (const assay in assays) {\n\t\t\tfor (const cohort in assays[assay].cohorts || {}) {\n\t\t\t\tconst c = assays[assay].cohorts[cohort]\n\t\t\t\tif (!c.DAPfile || !c.catalog) continue\n\t\t\t\tif (!cohortMatches(side, organism, assay, c.catalog)) continue\n\t\t\t\tif (side.ageVaries && c.catalog.ageGroup !== age) continue\n\t\t\t\tconst label = side.ageVaries ? `${side.label} ${age}` : side.label\n\t\t\t\treturn { organism, assay, cohort, label }\n\t\t\t}\n\t\t}\n\t}\n\treturn null\n}\n\n// ages at which at least one ageVaries side has a DAP cohort, sorted numerically\nfunction concordanceAges(self: any, cfg: TileCfg): string[] {\n\tconst organisms = self.app?.vocabApi?.termdbConfig?.queries?.proteome?.organisms || {}\n\tconst sides = (cfg.pairs || []).flatMap(p => [p.x, p.y]).filter(sd => sd.ageVaries)\n\tconst ages = new Set<string>()\n\tfor (const organism in organisms) {\n\t\tconst assays = organisms[organism]?.assays || {}\n\t\tfor (const assay in assays) {\n\t\t\tfor (const cohort in assays[assay].cohorts || {}) {\n\t\t\t\tconst c = assays[assay].cohorts[cohort]\n\t\t\t\tif (!c.DAPfile || !c.catalog?.ageGroup) continue\n\t\t\t\tif (sides.some(sd => cohortMatches(sd, organism, assay, c.catalog))) ages.add(c.catalog.ageGroup)\n\t\t\t}\n\t\t}\n\t}\n\treturn [...ages].sort(byAge)\n}\n\n// age used when none is selected: the configured defaultAge if cohorts exist at\n// it, else the first age that has any; '' only when no side varies by age\nfunction defaultConcordanceAge(self: any, cfg: TileCfg): string {\n\tconst ages = concordanceAges(self, cfg)\n\tif (cfg.defaultAge && ages.includes(cfg.defaultAge)) return cfg.defaultAge\n\treturn ages[0] || cfg.defaultAge || ''\n}\n\nfunction concordancePairs(self: any, cfg: TileCfg, age = defaultConcordanceAge(self, cfg)): ConcordancePair[] {\n\tconst pairs: ConcordancePair[] = []\n\tfor (const p of cfg.pairs || []) {\n\t\tconst x = findPairCohort(self, p.x, age)\n\t\tconst y = findPairCohort(self, p.y, age)\n\t\tif (x && y) pairs.push({ key: p.key, label: p.label, x, y })\n\t}\n\treturn pairs\n}\n\nasync function drawConcordance(holder: any, self: any, pair: ConcordancePair, gene: string, expanded: boolean) {\n\tconst { points: pts, r: R, p: P } = await getConcordance(self, pair.x, pair.y)\n\tconst target = gene.toUpperCase()\n\tconst hit = pts.find(p => p.gene === target)\n\n\tconst margin = expanded ? { top: 14, right: 16, bottom: 44, left: 52 } : { top: 8, right: 10, bottom: 32, left: 38 }\n\tconst innerW = expanded ? 380 : 150\n\tconst innerH = expanded ? 320 : 118\n\tconst svg = holder\n\t\t.append('svg')\n\t\t.attr('width', innerW + margin.left + margin.right)\n\t\t.attr('height', innerH + margin.top + margin.bottom)\n\tconst g = svg.append('g').attr('transform', `translate(${margin.left},${margin.top})`)\n\tconst x = scaleLinear()\n\t\t.domain(fcDomain(pts.map(p => p.x)))\n\t\t.range([0, innerW])\n\tconst y = scaleLinear()\n\t\t.domain(fcDomain(pts.map(p => p.y)))\n\t\t.range([innerH, 0])\n\tconst tickFont = expanded ? null : '8.5px'\n\tstyledAxis(g.append('g').attr('transform', `translate(0,${innerH})`), axisBottom(x).ticks(expanded ? 6 : 4), tickFont)\n\tstyledAxis(g.append('g'), axisLeft(y).ticks(expanded ? 6 : 4), tickFont)\n\tdrawZeroLine(g, x(0), 0, x(0), innerH)\n\tdrawZeroLine(g, 0, y(0), innerW, y(0))\n\tyAxisTitle(svg, innerH, margin.top, `${pair.y.label} log2FC`)\n\tsvg\n\t\t.append('text')\n\t\t.attr('x', margin.left + innerW / 2)\n\t\t.attr('y', margin.top + innerH + (expanded ? 36 : 28))\n\t\t.attr('text-anchor', 'middle')\n\t\t.style('font-size', expanded ? '11px' : '10px')\n\t\t.style('fill', '#374151')\n\t\t.text(`${pair.x.label} log2FC`)\n\tfor (const p of pts) {\n\t\tif (p === hit) continue\n\t\tg.append('circle')\n\t\t\t.attr('cx', x(p.x))\n\t\t\t.attr('cy', y(p.y))\n\t\t\t.attr('r', expanded ? 1.6 : 1.1)\n\t\t\t.attr('fill', '#9ca3af')\n\t\t\t.attr('fill-opacity', 0.45)\n\t}\n\tif (hit) {\n\t\tg.append('circle')\n\t\t\t.attr('cx', x(hit.x))\n\t\t\t.attr('cy', y(hit.y))\n\t\t\t.attr('r', expanded ? 6 : 4)\n\t\t\t.attr('fill', '#e75480')\n\t\t\t.attr('stroke', '#7f1d1d')\n\t\t\t.attr('stroke-width', 1.2)\n\t\tg.append('text')\n\t\t\t.attr('x', x(hit.x) + (expanded ? 9 : 6))\n\t\t\t.attr('y', y(hit.y) - (expanded ? 6 : 4))\n\t\t\t.style('font-size', expanded ? '12px' : '9px')\n\t\t\t.style('font-weight', '600')\n\t\t\t.style('fill', '#7f1d1d')\n\t\t\t.text(gene)\n\t}\n\tg.append('text')\n\t\t.attr('x', innerW)\n\t\t.attr('y', -2)\n\t\t.attr('text-anchor', 'end')\n\t\t.style('font-size', expanded ? '11px' : '9px')\n\t\t.style('fill', '#374151')\n\t\t.attr('title', P === null ? null : `Pearson cor.test p = ${P < 1e-4 ? P.toExponential(1) : P.toFixed(4)}`)\n\t\t.text(`R = ${R === null ? 'NA' : R.toFixed(2)} \u00B7 n = ${pts.length.toLocaleString()}`)\n\tif (!hit) {\n\t\tholder\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.72em')\n\t\t\t.style('color', '#9ca3af')\n\t\t\t.text(`${gene} is not quantified in both datasets`)\n\t} else if (expanded) {\n\t\tholder\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.8em')\n\t\t\t.style('color', '#374151')\n\t\t\t.style('margin-top', '4px')\n\t\t\t.text(`${gene}: ${pair.x.label} log2FC ${hit.x.toFixed(2)} \u00B7 ${pair.y.label} log2FC ${hit.y.toFixed(2)}`)\n\t}\n}\n\nfunction renderConcordanceTile(body: any, _td: TileData, self: any, cfg: TileCfg, opts: TileRenderOpts = {}) {\n\tconst expanded = !!opts.expanded\n\tconst gene = self.state?.config?.tw?.term?.name || ''\n\tlet age = defaultConcordanceAge(self, cfg)\n\tlet pairs = concordancePairs(self, cfg, age)\n\tif (!pairs.length) return\n\tlet pair = pairs[0]\n\tconst controls = body.append('div').style('display', 'flex').style('align-items', 'center').style('gap', '12px')\n\tconst tabsHolder = controls.append('div')\n\tconst plotHolder = body.append('div')\n\t// a redraw issued while an earlier one is still fetching must win: each\n\t// draw gets a generation and only the latest one may touch plotHolder\n\tlet generation = 0\n\tconst redraw = () => {\n\t\tconst gen = ++generation\n\t\tplotHolder.selectAll('*').remove()\n\t\tconst wait = plotHolder.append('div').style('font-size', '.75em').style('color', '#9ca3af').text('Loading\u2026')\n\t\tconst target = plotHolder.append('div')\n\t\tdrawConcordance(target, self, pair, gene, expanded)\n\t\t\t.then(() => {\n\t\t\t\tif (gen !== generation) target.remove()\n\t\t\t\telse wait.remove()\n\t\t\t})\n\t\t\t.catch((err: any) => {\n\t\t\t\tif (gen !== generation) return\n\t\t\t\twait.style('color', '#b91c1c').text(`Failed to load: ${err?.message || err}`)\n\t\t\t\tif (self.app?.opts?.debug) console.error(err)\n\t\t\t})\n\t}\n\tconst makeTabs = () => {\n\t\ttabsHolder.selectAll('*').remove()\n\t\tif (pairs.length < 2) return\n\t\tmakeDiseaseTabs(\n\t\t\ttabsHolder,\n\t\t\tpairs.map(p => p.label),\n\t\t\tpair.label,\n\t\t\t(label: string) => {\n\t\t\t\tpair = pairs.find(p => p.label === label) || pairs[0]\n\t\t\t\tredraw()\n\t\t\t},\n\t\t\t'.9em'\n\t\t)\n\t}\n\tif (expanded) {\n\t\tmakeTabs()\n\t\t// age selector; the same pair (by key) is kept across ages when it\n\t\t// exists at the new age, otherwise the first available pair is shown\n\t\tconst ages = concordanceAges(self, cfg)\n\t\tif (ages.length > 1) {\n\t\t\tconst ageDiv = controls.append('div').style('font-size', '.85em').style('color', '#374151')\n\t\t\tageDiv.append('span').text('Age: ')\n\t\t\tconst sel = ageDiv.append('select').style('font-size', 'inherit')\n\t\t\tfor (const a of ages)\n\t\t\t\tsel\n\t\t\t\t\t.append('option')\n\t\t\t\t\t.attr('value', a)\n\t\t\t\t\t.property('selected', a === age)\n\t\t\t\t\t.text(a)\n\t\t\tsel.on('change', () => {\n\t\t\t\tage = sel.property('value')\n\t\t\t\tconst next = concordancePairs(self, cfg, age)\n\t\t\t\tif (!next.length) {\n\t\t\t\t\tplotHolder.selectAll('*').remove()\n\t\t\t\t\tplotHolder.append('div').style('font-size', '.8em').style('color', '#9ca3af').text(`No cohorts at ${age}`)\n\t\t\t\t\ttabsHolder.selectAll('*').remove()\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tpairs = next\n\t\t\t\tpair = pairs.find(p => p.key === pair.key) || pairs[0]\n\t\t\t\tmakeTabs()\n\t\t\t\tredraw()\n\t\t\t})\n\t\t}\n\t}\n\tredraw()\n\tif (!expanded) {\n\t\tbody\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.7em')\n\t\t\t.style('color', '#9ca3af')\n\t\t\t.style('margin-top', '2px')\n\t\t\t.text(`${pair.label}${age ? ', ' + age : ''}, all genes \u00B7 expand for other pairs and ages`)\n\t} else if (cfg.note) {\n\t\tbody.append('div').style('font-size', '.75em').style('color', '#9ca3af').style('margin-top', '6px').text(cfg.note)\n\t}\n}\n\n/************ registry ************/\n\n// renderer per tile key; the dataset config decides which tiles exist, their\n// titles and order. `has` gates rendering on the data actually present.\ntype TileRenderer = {\n\thas: (td: TileData, self: any, cfg: TileCfg) => boolean\n\trender: (body: any, td: TileData, self: any, cfg: TileCfg, opts?: TileRenderOpts) => void\n}\nconst TILE_RENDERERS: { [key: string]: TileRenderer } = {\n\tcrossDisease: {\n\t\thas: (td, _s, cfg) => new Set(entries(td, cfg.key).map(e => e.disease || e.cohortName)).size >= 2,\n\t\trender: renderCrossDiseaseTile\n\t},\n\tinsoluble: { has: (td, _s, cfg) => entries(td, cfg.key).length >= 1, render: renderInsolubleTile },\n\tbrainRegions: { has: (td, _s, cfg) => entries(td, cfg.key).length >= 2, render: renderBrainRegionTile },\n\tmouseModels: { has: (td, _s, cfg) => entries(td, cfg.key).length >= 2, render: renderMouseModelsTile },\n\tcellTypes: { has: (td, _s, cfg) => entries(td, cfg.key).length >= 2, render: renderCellTypesTile },\n\tplaque: { has: (td, _s, cfg) => entries(td, cfg.key).length >= 1, render: renderPlaqueTile },\n\tmultiomicRank: {\n\t\t// available whenever the dataset ships rankings; the gene may still be absent\n\t\thas: (_td, self) => !!self?.app?.vocabApi?.termdbConfig?.queries?.geneRanking?.rankings,\n\t\trender: renderMultiomicRankTile\n\t},\n\tconcordance: { has: (_td, self, cfg) => concordancePairs(self, cfg).length > 0, render: renderConcordanceTile }\n\t// 'ptm' is rendered by renderPTMSummaryCard from site-level data, not here\n}\n\nexport type TileDef = TileCfg & TileRenderer\n\n// tiles the dataset configures that this file can draw, in dataset order\nfunction configuredTiles(self: any): TileDef[] {\n\tconst out: TileDef[] = []\n\tfor (const cfg of getTileConfigs(self)) {\n\t\tconst r = TILE_RENDERERS[cfg.key]\n\t\tif (!r) continue\n\t\tout.push({ ...cfg, ...r })\n\t}\n\treturn out\n}\n\n// inline error box used by every tile face and expanded view\nexport function renderTileError(holder: any, err: any, self: any) {\n\tholder\n\t\t.append('div')\n\t\t.style('color', '#b91c1c')\n\t\t.style('font-size', '.8em')\n\t\t.text(`Failed to render: ${err?.message || err}`)\n\tif (self?.app?.opts?.debug) console.error(err)\n}\n\n// expanded view: the same renderer at a larger scale with extra detail\nfunction renderExpandedTile(holder: any, tile: TileDef, td: TileData, self: any) {\n\ttry {\n\t\ttile.render(holder.append('div'), td, self, tile, { scale: EXPANDED_SCALE, expanded: true })\n\t} catch (err: any) {\n\t\trenderTileError(holder, err, self)\n\t}\n}\n\n// renders a chart card for every tile whose data requirement is met (in\n// canonical order) and returns the tiles that have no data, so the caller\n// can append their greyed placeholders after the other live cards.\nexport function renderStudyTiles(grid: any, td: TileData, self: any): { missing: TileDef[] } {\n\tconst missing: TileDef[] = []\n\tfor (const tile of configuredTiles(self)) {\n\t\tif (!tile.has(td, self, tile)) {\n\t\t\tmissing.push(tile)\n\t\t\tcontinue\n\t\t}\n\t\tconst body = makeTileCard(grid, {\n\t\t\ttitle: tile.title,\n\t\t\tsubtitle: tile.subtitle,\n\t\t\tuniform: true,\n\t\t\texpand: { render: holder => renderExpandedTile(holder, tile, td, self), ...tileExpandState(self, tile.key) }\n\t\t})\n\t\ttry {\n\t\t\ttile.render(body, td, self, tile, { scale: TILE_FACE_SCALE, scaleX: TILE_FACE_SCALE_X })\n\t\t} catch (err: any) {\n\t\t\trenderTileError(body, err, self)\n\t\t}\n\t}\n\treturn { missing }\n}\n\n// greyed placeholder cards for tiles without data, appended after the live\n// cards so real data leads the grid\nexport function renderPlaceholderTiles(grid: any, tiles: { title: string; note?: string }[]) {\n\tfor (const tile of tiles) {\n\t\tconst body = makeTileCard(grid, { title: tile.title, disabled: true, uniform: true })\n\t\tbody\n\t\t\t.style('flex', '1')\n\t\t\t.style('display', 'flex')\n\t\t\t.style('align-items', 'center')\n\t\t\t.style('justify-content', 'center')\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.75em')\n\t\t\t.style('color', '#9ca3af')\n\t\t\t.style('max-width', '200px')\n\t\t\t.style('text-align', 'center')\n\t\t\t.text(tile.note || 'No data for this protein in this study')\n\t}\n}\n\n// fallback dot colors for the PTM summary card face when the dataset's\n// mclassOverride doesn't provide one: assigned by order of first appearance\nconst PTM_FALLBACK_PALETTE = ['#d7301f', '#2166ac', '#1b9e77', '#7570b3', '#e6ab02']\n\n// first residue position in a modSites string like \"S10\" or \"S10,T11\"\nfunction firstModSitePos(modSites: string): number | null {\n\tconst m = /[A-Za-z](\\d+)/.exec(modSites || '')\n\tif (!m) return null\n\tconst pos = Number(m[1])\n\treturn Number.isInteger(pos) && pos >= 1 ? pos : null\n}\n\n// Compact overview volcano card: Every protein-level measurement across sample sets\n// as one volcano.\n// Answers: At a glance, how consistent and how significant are this protein's changes across all studies?\nexport function renderOverviewVolcanoCard(\n\tgrid: any,\n\tdata: any,\n\tself: any,\n\topts: { onExpandRender: (holder: any) => void }\n) {\n\ttype Pt = { x: number; y: number; sig: boolean }\n\tconst pts: Pt[] = []\n\tfor (const e of data?.cohorts || []) {\n\t\tif (e.PTMType) continue\n\t\tconst log2fc = getLog2Ratio(e.foldChange)\n\t\tconst p = Number(e.fdr)\n\t\tif (log2fc === null || !Number.isFinite(p) || p <= 0) continue\n\t\tpts.push({ x: log2fc, y: -Math.log10(Math.max(p, 1e-300)), sig: p < SIG_P })\n\t}\n\tconst body = makeTileCard(grid, {\n\t\ttitle: 'All sample sets',\n\t\tsubtitle: 'log2FC vs significance, every cohort',\n\t\tuniform: true,\n\t\texpand: { render: opts.onExpandRender, ...tileExpandState(self, 'volcano') }\n\t})\n\tif (!pts.length) {\n\t\tbody.append('div').style('font-size', '.75em').style('color', '#9ca3af').text('No protein-level data.')\n\t\treturn\n\t}\n\n\tconst margin = { top: 8, right: 10, bottom: 32, left: 38 }\n\tconst innerW = 156\n\tconst innerH = 118\n\tconst svg = body\n\t\t.append('svg')\n\t\t.attr('width', innerW + margin.left + margin.right)\n\t\t.attr('height', innerH + margin.top + margin.bottom)\n\tconst g = svg.append('g').attr('transform', `translate(${margin.left},${margin.top})`)\n\tconst x = scaleLinear()\n\t\t.domain(fcDomain(pts.map(p => p.x)))\n\t\t.range([0, innerW])\n\tconst y = scaleLinear()\n\t\t.domain([0, Math.max(2, ...pts.map(p => p.y)) * 1.05])\n\t\t.range([innerH, 0])\n\tstyledAxis(g.append('g').attr('transform', `translate(0,${innerH})`), axisBottom(x).ticks(4), '8.5px')\n\tstyledAxis(g.append('g'), axisLeft(y).ticks(4), '8.5px')\n\tdrawZeroLine(g, x(0), 0, x(0), innerH)\n\t// significance threshold line\n\tg.append('line')\n\t\t.attr('x1', 0)\n\t\t.attr('x2', innerW)\n\t\t.attr('y1', y(-Math.log10(SIG_P)))\n\t\t.attr('y2', y(-Math.log10(SIG_P)))\n\t\t.attr('stroke', '#9ca3af')\n\t\t.attr('stroke-dasharray', '3 3')\n\t\t.attr('stroke-opacity', 0.5)\n\tyAxisTitle(svg, innerH, margin.top, '\\u2212log\\u2081\\u2080(FDR)')\n\tsvg\n\t\t.append('text')\n\t\t.attr('x', margin.left + innerW / 2)\n\t\t.attr('y', margin.top + innerH + 28)\n\t\t.attr('text-anchor', 'middle')\n\t\t.style('font-size', '10px')\n\t\t.style('fill', '#374151')\n\t\t.text('log2FC')\n\tfor (const p of pts) {\n\t\tg.append('circle')\n\t\t\t.attr('cx', x(p.x))\n\t\t\t.attr('cy', y(p.y))\n\t\t\t.attr('r', 2)\n\t\t\t.attr('fill', p.sig ? '#e75480' : '#c7cbd1')\n\t\t\t.attr('fill-opacity', 0.6)\n\t}\n\tbody\n\t\t.append('div')\n\t\t.style('font-size', '.7em')\n\t\t.style('color', '#9ca3af')\n\t\t.style('margin-top', '2px')\n\t\t.text(`${pts.length} dots (accession \\u00d7 sample set) \\u00b7 expand for the interactive view`)\n}\n\n// Modified sites along the protein, coloured by PTM type (phospho,\n// ubiquitin), log2FC per site\nexport function renderPTMSummaryCard(\n\tgrid: any,\n\tptmEntries: any[],\n\tself: any,\n\topts: { onExpandRender: (holder: any) => void | Promise<void> }\n) {\n\tif (!ptmEntries?.length) return\n\tconst cfg = getTileConfig(self, 'ptm')\n\tconst title = cfg?.title || 'PTM sites'\n\tconst body = makeTileCard(grid, {\n\t\ttitle,\n\t\tsubtitle: cfg?.subtitle || 'Site-level log2FC along the protein',\n\t\tuniform: true,\n\t\texpand: { render: opts.onExpandRender, ...tileExpandState(self, 'ptm') }\n\t})\n\n\ttype SitePoint = { pos: number; log2fc: number; color: string; entry: TileEntry }\n\tconst byOrganism = new Map<string, SitePoint[]>()\n\tconst typeCounts = new Map<string, { count: number; color: string }>()\n\tfor (const e of ptmEntries) {\n\t\tconst pos = firstModSitePos(e.modSites)\n\t\tconst log2fc = getLog2Ratio(e.foldChange)\n\t\tconst mclass: any = Object.values(e.mclassOverride || {})[0]\n\t\tconst existing = typeCounts.get(e.PTMType)\n\t\tconst color =\n\t\t\texisting?.color || mclass?.color || PTM_FALLBACK_PALETTE[typeCounts.size % PTM_FALLBACK_PALETTE.length]\n\t\tconst tc = existing || { count: 0, color }\n\t\ttc.count++\n\t\ttypeCounts.set(e.PTMType, tc)\n\t\tif (pos === null || log2fc === null) continue\n\t\tconst p = Number(e.fdr)\n\t\tconst entry: TileEntry = {\n\t\t\torganism: e.organism,\n\t\t\tassayName: e.assayName,\n\t\t\tcohortName: e.cohortName,\n\t\t\tdisease: e.disease,\n\t\t\tuniqueIdentifier: e.uniqueIdentifier,\n\t\t\tproteinAccession: e.proteinAccession,\n\t\t\tlog2fc,\n\t\t\tfdr: Number.isFinite(p) && p > 0 ? p : null,\n\t\t\ttestedN: Number(e.testedN) || 0,\n\t\t\tcontrolN: Number(e.controlN) || 0,\n\t\t\tisoformCount: 1,\n\t\t\tcatalog: catalogForEntry(self, e) || {},\n\t\t\tptmType: e.PTMType,\n\t\t\tmodSites: e.modSites\n\t\t}\n\t\tconst arr = byOrganism.get(e.organism) || []\n\t\tarr.push({ pos, log2fc, color, entry })\n\t\tbyOrganism.set(e.organism, arr)\n\t}\n\n\t// one mini strip per organism (site numbering is isoform-specific, so\n\t// organisms never share an x-axis)\n\tconst stripW = 152\n\tconst stripH = 46\n\tconst labelW = 46\n\tfor (const [organism, points] of byOrganism) {\n\t\tconst maxPos = Math.max(...points.map(p => p.pos)) * 1.05\n\t\tconst maxAbs = Math.max(0.2, ...points.map(p => Math.abs(p.log2fc)))\n\t\tconst row = body.append('div').style('display', 'flex').style('align-items', 'center').style('gap', '4px')\n\t\trow\n\t\t\t.append('span')\n\t\t\t.style('flex', `0 0 ${labelW}px`)\n\t\t\t.style('font-size', '.7em')\n\t\t\t.style('color', '#6b7280')\n\t\t\t.text(organism)\n\t\tconst svg = row.append('svg').attr('width', stripW).attr('height', stripH)\n\t\tconst x = scaleLinear()\n\t\t\t.domain([0, maxPos])\n\t\t\t.range([4, stripW - 4])\n\t\tconst y = scaleLinear()\n\t\t\t.domain([-maxAbs, maxAbs])\n\t\t\t.range([stripH - 4, 4])\n\t\tsvg.append('line').attr('x1', 0).attr('x2', stripW).attr('y1', y(0)).attr('y2', y(0)).attr('stroke', '#e5e7eb')\n\t\tfor (const p of points) {\n\t\t\tsvg\n\t\t\t\t.append('line')\n\t\t\t\t.attr('x1', x(p.pos))\n\t\t\t\t.attr('x2', x(p.pos))\n\t\t\t\t.attr('y1', y(0))\n\t\t\t\t.attr('y2', y(p.log2fc))\n\t\t\t\t.attr('stroke', p.color)\n\t\t\t\t.attr('stroke-opacity', 0.4)\n\t\t\tattachEntryBehavior(\n\t\t\t\tsvg\n\t\t\t\t\t.append('circle')\n\t\t\t\t\t.attr('cx', x(p.pos))\n\t\t\t\t\t.attr('cy', y(p.log2fc))\n\t\t\t\t\t.attr('r', 2.5)\n\t\t\t\t\t.attr('fill', p.color)\n\t\t\t\t\t.attr('fill-opacity', 0.8),\n\t\t\t\tp.entry,\n\t\t\t\tself\n\t\t\t)\n\t\t}\n\t}\n\n\tconst foot = body\n\t\t.append('div')\n\t\t.style('display', 'flex')\n\t\t.style('gap', '10px')\n\t\t.style('flex-wrap', 'wrap')\n\t\t.style('font-size', '.7em')\n\t\t.style('color', '#6b7280')\n\t\t.style('margin-top', '4px')\n\tfor (const [type, tc] of typeCounts) {\n\t\tconst item = foot.append('span').style('display', 'inline-flex').style('align-items', 'center').style('gap', '4px')\n\t\titem\n\t\t\t.append('span')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('width', '7px')\n\t\t\t.style('height', '7px')\n\t\t\t.style('border-radius', '50%')\n\t\t\t.style('background', tc.color)\n\t\titem.append('span').text(`${tc.count} ${type}`)\n\t}\n}\n\n// header coverage line: which studies detected this protein, sample-set and\n// PTM counts, and the isoform-collapsing note\nexport function renderCoverageLine(holder: any, td: TileData) {\n\tconst parts = [`${td.cohortCount} sample set${td.cohortCount === 1 ? '' : 's'}`]\n\tif (td.ptmSiteCount) parts.push(`${td.ptmSiteCount} PTM site measurement${td.ptmSiteCount === 1 ? '' : 's'}`)\n\tif (td.isoformCount > 1) parts.push(`${td.isoformCount} isoforms (tiles show the most significant per sample set)`)\n\tholder\n\t\t.append('div')\n\t\t.style('font-size', '.8em')\n\t\t.style('color', '#6b7280')\n\t\t.style('margin-bottom', '4px')\n\t\t.text(parts.join(' \u00B7 '))\n}\n"],
5
- "mappings": "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",
6
- "names": ["tabsHolder", "brainHolder", "redraw"]
7
- }
@@ -1,70 +0,0 @@
1
- import {
2
- junctionCustomTermSource
3
- } from "./chunk-FIWVGOSE.js";
4
- import {
5
- mayRenderFractionSelection
6
- } from "./chunk-DPWSIN62.js";
7
-
8
- // termdb/handlers/junction.ts
9
- var SearchHandler = class {
10
- async init(opts) {
11
- if (!opts?.holder) throw new Error("opts.holder is required");
12
- if (typeof opts.callback != "function") throw new Error("opts.callback is required");
13
- const entries = getJunctionCustomTerms(opts.app.vocabApi.state?.customTerms);
14
- render(opts, entries);
15
- }
16
- };
17
- function getJunctionCustomTerms(customTerms) {
18
- if (!Array.isArray(customTerms)) return [];
19
- return customTerms.filter((term) => term?.source === junctionCustomTermSource && term.tw?.term);
20
- }
21
- function render(opts, entries) {
22
- const holder = opts.holder;
23
- holder.selectAll("*").remove();
24
- const div = holder.append("div").style("padding", "10px 0px");
25
- if (!entries.length) {
26
- div.append("div").text("Junctions selected from genome browser will be shown here.");
27
- return;
28
- }
29
- const listDiv = div.append("div");
30
- const fractionDiv = div.append("div");
31
- for (const entry of entries) {
32
- if (entry.eventlabel) renderJunctionEvent(listDiv, fractionDiv, entry, opts);
33
- else renderJunction(listDiv, entry, opts);
34
- }
35
- listDiv.append("div").style("font-size", ".7em").style("margin-top", "10px").style("opacity", 0.7).text("Select additional junctions from genome browser.");
36
- }
37
- function renderJunction(holder, entry, opts) {
38
- const choice = holder.append("div");
39
- choice.append("div").attr("class", "ts_pill sja_filter_tag_btn sja_tree_click_term").style("display", "inline-block").style("border-radius", "6px").style("margin", "1px 0").text(entry.tw.term.name).on("click", () => opts.callback(entry.tw.term));
40
- addDeleteButton(choice, entry, opts);
41
- }
42
- function renderJunctionEvent(holder, fractionDiv, entry, opts) {
43
- const eventHolder = holder.append("div");
44
- const pillRow = eventHolder.append("div");
45
- pillRow.append("div").attr("class", "ts_pill sja_filter_tag_btn sja_tree_click_term").style("display", "inline-block").style("border-radius", "6px").style("margin", "1px 0").text(entry.eventlabel).on("click", () => selectJunctionEvent(holder, fractionDiv, entry, opts));
46
- addDeleteButton(pillRow, entry, opts);
47
- eventHolder.append("div").style("margin-left", "10px").style("font-size", ".7em").selectAll("div").data(entry.tw.term.termlst, (term) => term.id).enter().append("div").text((term) => term.name);
48
- }
49
- function selectJunctionEvent(listDiv, fractionDiv, entry, opts) {
50
- const isStaged = mayRenderFractionSelection({
51
- term: entry.tw.term,
52
- selectionMode: opts.termCollectionSelectionMode,
53
- listDiv,
54
- fractionDiv,
55
- callback: (tw) => opts.callback(tw)
56
- });
57
- if (!isStaged) opts.callback(entry.tw.term);
58
- }
59
- function addDeleteButton(holder, entry, opts) {
60
- holder.append("button").attr("data-testid", "sjpp-junction-delete").style("margin-left", "4px").attr("aria-label", `Delete ${entry.name}`).text("\xD7").on("click", async () => {
61
- await opts.app.vocabApi.deleteCustomTermById(entry.id);
62
- render(opts, getJunctionCustomTerms(opts.app.vocabApi.state?.customTerms));
63
- });
64
- }
65
-
66
- export {
67
- SearchHandler,
68
- getJunctionCustomTerms
69
- };
70
- //# sourceMappingURL=chunk-SJHWZZ4M.js.map
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../termdb/handlers/junction.ts"],
4
- "sourcesContent": ["import { junctionCustomTermSource, type JunctionCustomTerm } from './junction.customTerm.ts'\nimport { mayRenderFractionSelection } from './termCollectionFractionSelection.ts'\n\nexport class SearchHandler {\n\tasync init(opts) {\n\t\tif (!opts?.holder) throw new Error('opts.holder is required')\n\t\tif (typeof opts.callback != 'function') throw new Error('opts.callback is required')\n\n\t\tconst entries = getJunctionCustomTerms(opts.app.vocabApi.state?.customTerms)\n\t\trender(opts, entries)\n\t}\n}\n\nexport function getJunctionCustomTerms(customTerms: any): JunctionCustomTerm[] {\n\tif (!Array.isArray(customTerms)) return []\n\treturn customTerms.filter(term => term?.source === junctionCustomTermSource && term.tw?.term)\n}\n\nfunction render(opts, entries: JunctionCustomTerm[]) {\n\tconst holder = opts.holder\n\tholder.selectAll('*').remove()\n\tconst div = holder.append('div').style('padding', '10px 0px')\n\n\tif (!entries.length) {\n\t\tdiv.append('div').text('Junctions selected from genome browser will be shown here.')\n\t\treturn\n\t}\n\n\t// the fraction chooser is rendered in a sibling div, so that the list may be\n\t// restored without reloading, when the user backs out of the chooser\n\tconst listDiv = div.append('div')\n\tconst fractionDiv = div.append('div')\n\n\tfor (const entry of entries) {\n\t\tif (entry.eventlabel) renderJunctionEvent(listDiv, fractionDiv, entry, opts)\n\t\telse renderJunction(listDiv, entry, opts)\n\t}\n\n\tlistDiv\n\t\t.append('div')\n\t\t.style('font-size', '.7em')\n\t\t.style('margin-top', '10px')\n\t\t.style('opacity', 0.7)\n\t\t.text('Select additional junctions from genome browser.')\n}\n\nfunction renderJunction(holder, entry: JunctionCustomTerm, opts) {\n\tconst choice = holder.append('div')\n\tchoice\n\t\t.append('div')\n\t\t.attr('class', 'ts_pill sja_filter_tag_btn sja_tree_click_term')\n\t\t.style('display', 'inline-block')\n\t\t.style('border-radius', '6px')\n\t\t.style('margin', '1px 0')\n\t\t.text(entry.tw.term.name)\n\t\t.on('click', () => opts.callback(entry.tw.term))\n\taddDeleteButton(choice, entry, opts)\n}\n\nfunction renderJunctionEvent(holder, fractionDiv, entry: JunctionCustomTerm, opts) {\n\tconst eventHolder = holder.append('div')\n\tconst pillRow = eventHolder.append('div')\n\tpillRow\n\t\t.append('div')\n\t\t.attr('class', 'ts_pill sja_filter_tag_btn sja_tree_click_term')\n\t\t.style('display', 'inline-block')\n\t\t.style('border-radius', '6px')\n\t\t.style('margin', '1px 0')\n\t\t.text(entry.eventlabel!)\n\t\t.on('click', () => selectJunctionEvent(holder, fractionDiv, entry, opts))\n\taddDeleteButton(pillRow, entry, opts)\n\teventHolder\n\t\t.append('div')\n\t\t.style('margin-left', '10px')\n\t\t.style('font-size', '.7em')\n\t\t.selectAll('div')\n\t\t.data(entry.tw.term.termlst, term => term.id)\n\t\t.enter()\n\t\t.append('div')\n\t\t.text(term => term.name)\n}\n\nfunction selectJunctionEvent(listDiv, fractionDiv, entry: JunctionCustomTerm, opts) {\n\tconst isStaged = mayRenderFractionSelection({\n\t\tterm: entry.tw.term,\n\t\tselectionMode: opts.termCollectionSelectionMode,\n\t\tlistDiv,\n\t\tfractionDiv,\n\t\tcallback: tw => opts.callback(tw)\n\t})\n\tif (!isStaged) opts.callback(entry.tw.term)\n}\n\nfunction addDeleteButton(holder, entry: JunctionCustomTerm, opts) {\n\tholder\n\t\t.append('button')\n\t\t.attr('data-testid', 'sjpp-junction-delete')\n\t\t.style('margin-left', '4px')\n\t\t.attr('aria-label', `Delete ${entry.name}`)\n\t\t.text('\u00D7')\n\t\t.on('click', async () => {\n\t\t\tawait opts.app.vocabApi.deleteCustomTermById(entry.id)\n\t\t\trender(opts, getJunctionCustomTerms(opts.app.vocabApi.state?.customTerms))\n\t\t})\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }