@sjcrh/proteinpaint-client 2.204.0 → 2.206.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (955) hide show
  1. package/dist/2dmaf-5OYM4MXA.js +1367 -0
  2. package/dist/AggMatrixInput-4VTI4Y6E.js +277 -0
  3. package/dist/AggregateMatrix-K7SGNO63.js +41 -0
  4. package/dist/AppHeader-WU6TO2OZ.js +830 -0
  5. package/dist/BoxPlot-OW7U3XTF.js +1211 -0
  6. package/dist/CorrelationVolcano-B3JTTZHF.js +614 -0
  7. package/dist/Cuminc-AJEXWRU2.js +1219 -0
  8. package/dist/DE-2J7DSRPC.js +89 -0
  9. package/dist/DE-2J7DSRPC.js.map +7 -0
  10. package/dist/DEinput-I7JWNOSD.js +499 -0
  11. package/dist/DEinput-I7JWNOSD.js.map +7 -0
  12. package/dist/DM-NQ46YPGF.js +90 -0
  13. package/dist/DM-NQ46YPGF.js.map +7 -0
  14. package/dist/DifferentialAnalysis-BFCQBX5J.js +237 -0
  15. package/dist/Disco-ZJLVQRTC.js +3389 -0
  16. package/dist/Disco.UI-AEDACXW2.js +243 -0
  17. package/dist/DmrPlot-QMRXAOM3.js +637 -0
  18. package/dist/GB-MFU2UJ22.js +1391 -0
  19. package/dist/GSEA-E3NHU22A.js +851 -0
  20. package/dist/GeneExpInput-MIUNSOPY.js +362 -0
  21. package/dist/Geomap-HAJG3STN.js +84 -0
  22. package/dist/HicApp-ECFFIRWI.js +2245 -0
  23. package/dist/IDCViewer-TNSD3U2V.js +10812 -0
  24. package/dist/NumBinaryEditor-CNBGZ6WY.js +279 -0
  25. package/dist/NumBinaryEditor.unit.spec-SKFDALF3.js +312 -0
  26. package/dist/NumContEditor-7ID2U7JL.js +105 -0
  27. package/dist/NumContEditor.unit.spec-XHSQSAWK.js +164 -0
  28. package/dist/NumCustomBinEditor-PAIPRJPO.js +33 -0
  29. package/dist/NumCustomBinEditor.unit.spec-QYVZMMHV.js +397 -0
  30. package/dist/NumDiscreteEditor-K2NZZQTH.js +170 -0
  31. package/dist/NumDiscreteEditor.unit.spec-3CG5VEQL.js +233 -0
  32. package/dist/NumRegularBinEditor-EOVZ22TP.js +33 -0
  33. package/dist/NumRegularBinEditor.unit.spec-FHTVH5FH.js +278 -0
  34. package/dist/NumSplineEditor-N3REMJUC.js +210 -0
  35. package/dist/NumSplineEditor.unit.spec-DZCP35GL.js +224 -0
  36. package/dist/NumericDensity-42MWVI2S.js +33 -0
  37. package/dist/NumericDensity.unit.spec-T2HHSQON.js +418 -0
  38. package/dist/NumericHandler-5XU3SSPD.js +34 -0
  39. package/dist/NumericHandler.unit.spec-3F23KSAQ.js +214 -0
  40. package/dist/ProteomeInput-UN2BUNRO.js +388 -0
  41. package/dist/Regression-HWLJENA5.js +1416 -0
  42. package/dist/RunChart2-YO55WE4M.js +749 -0
  43. package/dist/SC-LEDJ4DQR.js +1107 -0
  44. package/dist/Violin-E6PDJZ2B.js +1082 -0
  45. package/dist/Volcano-XJTBWYUK.js +1649 -0
  46. package/dist/Volcano-XJTBWYUK.js.map +7 -0
  47. package/dist/Wsi-S675CYTW.js +431 -0
  48. package/dist/adSandbox-ZJQ5ZW2T.js +33 -0
  49. package/dist/animatedBubbleChart-LRUS7W36.js +547 -0
  50. package/dist/app-7Q3QIBU4.js +32 -0
  51. package/dist/app-PKSI4MV5.js +42 -0
  52. package/dist/app.js +17 -17
  53. package/dist/bam-X5JH5ZT7.js +876 -0
  54. package/dist/barchart-UT6J4L2N.js +42 -0
  55. package/dist/barchart2-ZG5QJO3C.js +309 -0
  56. package/dist/block-TC466NGW.js +6249 -0
  57. package/dist/block.init-CIBNSYAC.js +33 -0
  58. package/dist/block.mds.expressionrank-EY5PCQCK.js +354 -0
  59. package/dist/block.mds.geneboxplot-R6AOMHO5.js +823 -0
  60. package/dist/block.mds.junction-JMV6FNYC.js +1539 -0
  61. package/dist/block.mds.svcnv-IHTV3QYG.js +6796 -0
  62. package/dist/block.svg-NTFLVQAQ.js +159 -0
  63. package/dist/block.tk.aicheck-FYPL32Y4.js +278 -0
  64. package/dist/block.tk.ase-FWCB6VBO.js +360 -0
  65. package/dist/block.tk.bam-Q5UFUABN.js +1901 -0
  66. package/dist/block.tk.bedgraphdot-KBI3GFDM.js +379 -0
  67. package/dist/block.tk.bigwig.ui-KXNFX7G7.js +206 -0
  68. package/dist/block.tk.hicstraw-MQBH3YAJ.js +818 -0
  69. package/dist/block.tk.junction-EBTVXLJH.js +2358 -0
  70. package/dist/block.tk.junction.textmatrixui-ETYLCP2O.js +194 -0
  71. package/dist/block.tk.ld-NLB6L6WQ.js +94 -0
  72. package/dist/block.tk.menu-PJLCOXVJ.js +1024 -0
  73. package/dist/block.tk.pgv-JOIQVWL2.js +938 -0
  74. package/dist/brainImaging-SPRC3QFB.js +515 -0
  75. package/dist/brainRegions-LGQGRWG7.js +217 -0
  76. package/dist/brainRegions-LGQGRWG7.js.map +7 -0
  77. package/dist/bubbleHeatmap-CFTZ5RXH.js +378 -0
  78. package/dist/cellTypeBubbleHeatmap-DXPLFT5U.js +278 -0
  79. package/dist/chunk-2BQ572SL.js +102 -0
  80. package/dist/chunk-2DQIQYY3.js +103 -0
  81. package/dist/chunk-2POQWEK6.js +134 -0
  82. package/dist/chunk-2SQEVMAL.js +446 -0
  83. package/dist/chunk-37HTZ6IG.js +158 -0
  84. package/dist/chunk-452765PG.js +2676 -0
  85. package/dist/chunk-4DXQJGJ7.js +31 -0
  86. package/dist/chunk-4OLM3KSB.js +2708 -0
  87. package/dist/chunk-4OLM3KSB.js.map +7 -0
  88. package/dist/chunk-54KC7DAB.js +178 -0
  89. package/dist/chunk-54KC7DAB.js.map +7 -0
  90. package/dist/chunk-5D5YTFI2.js +783 -0
  91. package/dist/chunk-5D5YTFI2.js.map +7 -0
  92. package/dist/chunk-5DBW3WLK.js +129 -0
  93. package/dist/chunk-5ILEFNXJ.js +402 -0
  94. package/dist/chunk-5UO7MKCO.js +59 -0
  95. package/dist/chunk-7R7P6VMT.js +243 -0
  96. package/dist/chunk-7X6NF7NI.js +96 -0
  97. package/dist/chunk-ANGLZ4XR.js +26 -0
  98. package/dist/chunk-BMQDU7KN.js +38 -0
  99. package/dist/chunk-C5TU4AYP.js +281 -0
  100. package/dist/chunk-DBQA6QIJ.js +4311 -0
  101. package/dist/chunk-DBQA6QIJ.js.map +7 -0
  102. package/dist/chunk-DHNET3P4.js +42 -0
  103. package/dist/chunk-EGKHDALO.js +382 -0
  104. package/dist/chunk-EPWGUWQP.js +34 -0
  105. package/dist/chunk-F3EYPES3.js +1339 -0
  106. package/dist/chunk-F4DM3WS4.js +194 -0
  107. package/dist/chunk-FTLCINDC.js +294 -0
  108. package/dist/chunk-GT6WJUJY.js +480 -0
  109. package/dist/chunk-GWCK5QGV.js +70 -0
  110. package/dist/chunk-HJSGHFJ6.js +464 -0
  111. package/dist/chunk-HS6BTSFX.js +49 -0
  112. package/dist/chunk-IB5TKNG5.js +5071 -0
  113. package/dist/chunk-IIMTOPH3.js +54 -0
  114. package/dist/chunk-ILEXRHF7.js +367 -0
  115. package/dist/chunk-ILEXRHF7.js.map +7 -0
  116. package/dist/chunk-IZUYLFOX.js +1608 -0
  117. package/dist/chunk-IZUYLFOX.js.map +7 -0
  118. package/dist/chunk-JAXN3Q3K.js +272 -0
  119. package/dist/chunk-K6PYTAXW.js +2853 -0
  120. package/dist/chunk-K6PYTAXW.js.map +7 -0
  121. package/dist/chunk-KIRZXPMB.js +141 -0
  122. package/dist/chunk-KT4OZVO3.js +1275 -0
  123. package/dist/chunk-KT4OZVO3.js.map +7 -0
  124. package/dist/chunk-L32KMIC3.js +54 -0
  125. package/dist/chunk-LB7NENEB.js +123 -0
  126. package/dist/chunk-LDWMVZYF.js +562 -0
  127. package/dist/chunk-M367Y7ML.js +140 -0
  128. package/dist/chunk-M4XXKTH2.js +339 -0
  129. package/dist/chunk-ME7OF3CS.js +176 -0
  130. package/dist/chunk-N2CXLMNX.js +626 -0
  131. package/dist/chunk-N7DVQTPC.js +119 -0
  132. package/dist/chunk-N7TD7N7D.js +518 -0
  133. package/dist/chunk-NBX6TT5C.js +299 -0
  134. package/dist/chunk-NLR7JIMM.js +1986 -0
  135. package/dist/chunk-NLR7JIMM.js.map +7 -0
  136. package/dist/chunk-NSRGYBDM.js +339 -0
  137. package/dist/chunk-NVS7KYYI.js +379 -0
  138. package/dist/chunk-OVPEMVXT.js +397 -0
  139. package/dist/chunk-OXWLQQXL.js +274 -0
  140. package/dist/chunk-Q5SK3U2T.js +24163 -0
  141. package/dist/chunk-Q5SK3U2T.js.map +7 -0
  142. package/dist/chunk-QGGSYEVJ.js +55 -0
  143. package/dist/chunk-QLEVONLD.js +50 -0
  144. package/dist/chunk-RFW5BRIZ.js +1233 -0
  145. package/dist/chunk-RFW5BRIZ.js.map +7 -0
  146. package/dist/chunk-RNWHB5DI.js +98 -0
  147. package/dist/chunk-RPDVFM7E.js +2133 -0
  148. package/dist/chunk-RPDVFM7E.js.map +7 -0
  149. package/dist/chunk-RUHLDUOT.js +203 -0
  150. package/dist/chunk-RV34WFGZ.js +197 -0
  151. package/dist/chunk-SDVE5ECI.js +6360 -0
  152. package/dist/chunk-SWO6DZTG.js +170 -0
  153. package/dist/chunk-SYPSS3JQ.js +387 -0
  154. package/dist/chunk-TDM3645O.js +2327 -0
  155. package/dist/chunk-VVO3R5JV.js +217 -0
  156. package/dist/chunk-VYEU6Y35.js +14 -0
  157. package/dist/chunk-WGXC6IEF.js +263 -0
  158. package/dist/chunk-WPDM57B5.js +1720 -0
  159. package/dist/chunk-WS7WKS2B.js +2784 -0
  160. package/dist/chunk-WTAPOH2W.js +22699 -0
  161. package/dist/chunk-WTAPOH2W.js.map +7 -0
  162. package/dist/chunk-X63NSV33.js +276 -0
  163. package/dist/chunk-XXNRSSBR.js +56 -0
  164. package/dist/chunk-YD6UGDFI.js +102 -0
  165. package/dist/chunk-YRIYDFNU.js +160 -0
  166. package/dist/chunk-YY5WQQ3J.js +194 -0
  167. package/dist/chunk-Z2ZITHT4.js +4195 -0
  168. package/dist/chunk-Z4SM3FBK.js +302 -0
  169. package/dist/chunk-ZEYEIUEZ.js +240 -0
  170. package/dist/chunk-ZLYTDHQP.js +677 -0
  171. package/dist/chunk-ZWCVRVV4.js +550 -0
  172. package/dist/cohort-FZNMFWOX.js +70 -0
  173. package/dist/condition-AJJLFCBQ.js +327 -0
  174. package/dist/controls-SZOLV37V.js +34 -0
  175. package/dist/controls.config-CVP75WFA.js +34 -0
  176. package/dist/correlation-UFJFQHQ3.js +95 -0
  177. package/dist/customdata.inputui-HOVA4A6O.js +284 -0
  178. package/dist/dataDownload-VTUG4IOK.js +329 -0
  179. package/dist/databrowser.ui-O5S4Y4EK.js +425 -0
  180. package/dist/dictionary-L2UNNNP7.js +113 -0
  181. package/dist/dnaMethylation-B4SWZI4O.js +33 -0
  182. package/dist/dnaMethylation.integration.spec-ANJAMNYJ.js +198 -0
  183. package/dist/dofetch-F5XSHQIS.js +48 -0
  184. package/dist/e2pca-66ARIMKL.js +344 -0
  185. package/dist/ep-OFGJYVUY.js +1249 -0
  186. package/dist/expclust.gdc.spec-22RXQTTP.js +302 -0
  187. package/dist/facet-GVZQ3RPN.js +519 -0
  188. package/dist/gb-HEPGVYEK.js +81 -0
  189. package/dist/geneExpClustering-3NU2U422.js +244 -0
  190. package/dist/geneExpression-FXQ4L2J2.js +310 -0
  191. package/dist/geneExpression-XYVYJJA5.js +33 -0
  192. package/dist/geneExpression.unit.spec-K3FIRSNK.js +99 -0
  193. package/dist/geneORA-5M2JSDMF.js +273 -0
  194. package/dist/geneRanking-TP3R3CS3.js +548 -0
  195. package/dist/geneVariant-232EYUFJ.js +36 -0
  196. package/dist/geneVariant-BHXTPUDC.js +286 -0
  197. package/dist/geneVariant.integration.spec-ICFHVFIR.js +388 -0
  198. package/dist/genefusion.ui-ABRCUQFC.js +303 -0
  199. package/dist/geneset-N42FIVA6.js +203 -0
  200. package/dist/genomeBrowser.spec-5HKQKLRU.js +276 -0
  201. package/dist/grin2-H2KJYLP6.js +1137 -0
  202. package/dist/grin2-NGMTEMXF.js +70 -0
  203. package/dist/hierCluster-JU5JPLM7.js +55 -0
  204. package/dist/hierCluster-LSSH275H.js +59 -0
  205. package/dist/hierCluster.config-ILOR7GBB.js +36 -0
  206. package/dist/hierCluster.integration.spec-CNR5OJOH.js +483 -0
  207. package/dist/hierCluster.interactivity-TLEIVTFK.js +49 -0
  208. package/dist/hierCluster.renderers-P7JNIT3N.js +19 -0
  209. package/dist/imagePlot-BF67SXQR.js +156 -0
  210. package/dist/importPlot-OHXSXNZN.js +8 -0
  211. package/dist/isoformExpression-4VKHE4HA.js +35 -0
  212. package/dist/isoformExpression.unit.spec-4TVSIFG4.js +237 -0
  213. package/dist/junction-VUHORV43.js +36 -0
  214. package/dist/junction.customTerm-FRYWSS4P.js +16 -0
  215. package/dist/junction.unit.spec-KKVLYT7Q.js +182 -0
  216. package/dist/launch.adhoc-UDYMFZTQ.js +37 -0
  217. package/dist/leftlabel.sample-R5FFBWG3.js +258 -0
  218. package/dist/legacyDataset-IEFWFVS6.js +117 -0
  219. package/dist/lollipop-3IX6ZYUN.js +166 -0
  220. package/dist/maf-42UFYSL4.js +455 -0
  221. package/dist/maftimeline-M5WYEN62.js +587 -0
  222. package/dist/matrix-CI76EDHU.js +54 -0
  223. package/dist/matrix-WJZKA6VR.js +59 -0
  224. package/dist/matrix.cells-ZFKVIPDC.js +26 -0
  225. package/dist/matrix.config-24TFHBEM.js +37 -0
  226. package/dist/matrix.data-NCGZPNWR.js +23 -0
  227. package/dist/matrix.groups-XQJTGM6M.js +26 -0
  228. package/dist/matrix.integration.spec-OGXZUDE6.js +3160 -0
  229. package/dist/matrix.interactivity-ZOOTPNSW.js +37 -0
  230. package/dist/matrix.layout-5J2YENK3.js +39 -0
  231. package/dist/matrix.legend-U36VCS46.js +20 -0
  232. package/dist/matrix.renderers-4KFE7ZVR.js +34 -0
  233. package/dist/matrix.serieses-AW7XBXLJ.js +19 -0
  234. package/dist/matrix.sort-7PMECLOE.js +26 -0
  235. package/dist/matrix.sort.unit.spec-GIA2YOTQ.js +468 -0
  236. package/dist/matrix.sorterUi-J6PRUT6J.js +16 -0
  237. package/dist/matrix.sorterUi.unit.spec-OPGKZZL6.js +338 -0
  238. package/dist/matrix.unit.spec-7UIVVR4T.js +150 -0
  239. package/dist/mavb-MSYUMT6W.js +727 -0
  240. package/dist/mds.fimo-OYEAQP37.js +513 -0
  241. package/dist/mds.samplescatterplot-EXISSRQQ.js +1545 -0
  242. package/dist/mds.survivalplot-SZST6BLN.js +477 -0
  243. package/dist/multivalue-YDE7L75Y.js +83 -0
  244. package/dist/numericDictTermCluster-5AKP6ICC.js +63 -0
  245. package/dist/oncomatrix-2OEIYWR6.js +290 -0
  246. package/dist/oncomatrix.spec-CXQW4JWU.js +443 -0
  247. package/dist/plot.2dvaf-LN7A3NNC.js +372 -0
  248. package/dist/plot.app-YIQOY2Z7.js +36 -0
  249. package/dist/plot.barplot-HF2J25XP.js +97 -0
  250. package/dist/plot.boxplot-YJH4L27U.js +146 -0
  251. package/dist/plot.brainImaging-PS4TRSPI.js +51 -0
  252. package/dist/plot.disco-BN5RNZ6Q.js +99 -0
  253. package/dist/plot.ssgq-N2HTOIY3.js +134 -0
  254. package/dist/plot.vaf2cov-6AOHRUQ2.js +253 -0
  255. package/dist/polar2-TC5OEJRE.js +232 -0
  256. package/dist/profileForms-5WV2TSBB.js +941 -0
  257. package/dist/profilePlot-OJLLW44P.js +49 -0
  258. package/dist/proteinView-CGNAJN4S.js +1357 -0
  259. package/dist/proteinView-CGNAJN4S.js.map +7 -0
  260. package/dist/proteomeCohortCompare-XXQGGVCF.js +912 -0
  261. package/dist/proteomeCohortCompare-XXQGGVCF.js.map +7 -0
  262. package/dist/pseudbulk.unit.spec-RAYRGN6C.js +86 -0
  263. package/dist/pseudobulk-ADHAYVSQ.js +35 -0
  264. package/dist/qualitative-JXEI3IYC.js +38 -0
  265. package/dist/radar2-BWTKSTT3.js +327 -0
  266. package/dist/radarFacility2-WIRSKTDG.js +335 -0
  267. package/dist/rememberedGvQ.unit.spec-N43O4YTF.js +211 -0
  268. package/dist/render-J7WOYBOL.js +33 -0
  269. package/dist/report-DRPCXX2B.js +217 -0
  270. package/dist/sampleView-BV6BQGGQ.js +43 -0
  271. package/dist/samplelst-ZD63EYO7.js +106 -0
  272. package/dist/samplematrix-ZZ3DVELU.js +2193 -0
  273. package/dist/sc-MUI43YTB.js +81 -0
  274. package/dist/scatter-7B44HTKN.js +88 -0
  275. package/dist/scatter-UEDVIE4Y.js +880 -0
  276. package/dist/selectGenomeWithTklst-WGOKGVZ5.js +129 -0
  277. package/dist/singleCellCellType-Z7OXK7PI.js +33 -0
  278. package/dist/singleCellCellType.unit.spec-IIOVCCJQ.js +154 -0
  279. package/dist/singleCellGeneExpression-LYZAIJ2Z.js +33 -0
  280. package/dist/singleCellGeneExpression.unit.spec-67AAWZTG.js +148 -0
  281. package/dist/singleCellPlot-TXPYQLSH.js +49 -0
  282. package/dist/singlecell-22OG6HNI.js +1566 -0
  283. package/dist/singlecell-7TBALI2S.js +81 -0
  284. package/dist/snp-3U2G3Z57.js +33 -0
  285. package/dist/snp.unit.spec-BMBBUBYD.js +171 -0
  286. package/dist/snplocus-SSVZDIQV.js +203 -0
  287. package/dist/spliceevent.a53ss.diagram-FK7CN4AU.js +146 -0
  288. package/dist/spliceevent.exonskip.diagram-EFLGV3O4.js +278 -0
  289. package/dist/spliceevent.noeventdiagram-2DYO7CCZ.js +455 -0
  290. package/dist/ssGSEA-52LWBQJP.js +33 -0
  291. package/dist/ssGSEA.unit.spec-3JV6WHUQ.js +83 -0
  292. package/dist/stattable-RLMYQ4G6.js +117 -0
  293. package/dist/studyCatalog-DKB3U7EV.js +414 -0
  294. package/dist/studyCatalog-DKB3U7EV.js.map +7 -0
  295. package/dist/summarizeCnvGeneexp-QPRYAKC2.js +158 -0
  296. package/dist/summarizeGeneexpSurvival-RWVQXEKB.js +105 -0
  297. package/dist/summarizeMutationCnv-DW5F6NUJ.js +159 -0
  298. package/dist/summarizeMutationDiagnosis-5FOQ7CHI.js +35 -0
  299. package/dist/summarizeMutationSurvival-4UKB4EVO.js +99 -0
  300. package/dist/summary-TYC6QNT4.js +42 -0
  301. package/dist/summary.integration.spec-5GLJJZNM.js +409 -0
  302. package/dist/summaryInput-4IJGKW4P.js +242 -0
  303. package/dist/sunburst-G7DGATWP.js +278 -0
  304. package/dist/survival-IHM6A7LL.js +1248 -0
  305. package/dist/survival-IHM6A7LL.js.map +7 -0
  306. package/dist/survival-MKNABJPU.js +53 -0
  307. package/dist/survival.integration.spec-THOKI3DL.js +613 -0
  308. package/dist/survival.integration.spec-THOKI3DL.js.map +7 -0
  309. package/dist/svgraph-VB7JWWR5.js +1382 -0
  310. package/dist/svmr-VLQIO2U5.js +3837 -0
  311. package/dist/table-EAXMDWOY.js +197 -0
  312. package/dist/termCollection-5LG7ICQY.js +252 -0
  313. package/dist/termCollection-SB6MWLFK.js +33 -0
  314. package/dist/termCollection.unit.spec-H5ITGTR3.js +299 -0
  315. package/dist/termCollectionFractionSelection-2XZSTDCQ.js +42 -0
  316. package/dist/termCollectionFractionSelection.unit.spec-BIO7V6KA.js +188 -0
  317. package/dist/tk-TRWYZLQ2.js +1121 -0
  318. package/dist/tk-VZI5HNSX.js +41 -0
  319. package/dist/tp.ui-J5SNNAT3.js +1454 -0
  320. package/dist/tvs.dt-6YHFJPER.js +34 -0
  321. package/dist/tvs.dtcnv.categorical-WTIE63GM.js +35 -0
  322. package/dist/tvs.dtcnv.continuous-OCMKGTF5.js +67 -0
  323. package/dist/tvs.dtfusion-CA23UNM3.js +35 -0
  324. package/dist/tvs.dtitd-VSYMR3OD.js +35 -0
  325. package/dist/tvs.dtsnvindel-YBNO3CYF.js +35 -0
  326. package/dist/tvs.dtsv-S743GBB5.js +35 -0
  327. package/dist/tvs.numeric-22AHXO5K.js +20 -0
  328. package/dist/tvs.samplelst-XAJO4EM6.js +98 -0
  329. package/dist/tvs.termCollection-QOVJGAUC.js +124 -0
  330. package/dist/vocabulary-6EADTHP3.js +36 -0
  331. package/dist/wsi.direct-2WB2NGC5.js +8184 -0
  332. package/dist/wsi.direct-2WB2NGC5.js.map +7 -0
  333. package/package.json +3 -3
  334. package/dist/2dmaf-JIY57FG6.js +0 -1367
  335. package/dist/AIProjectAdmin-DGTBIE6E.js +0 -952
  336. package/dist/AIProjectAdmin-DGTBIE6E.js.map +0 -7
  337. package/dist/AggMatrixInput-FH6WRTLP.js +0 -277
  338. package/dist/AggregateMatrix-MGEX5AVF.js +0 -41
  339. package/dist/AppHeader-FFOQFH55.js +0 -830
  340. package/dist/BoxPlot-KCY4JVRX.js +0 -1211
  341. package/dist/CorrelationVolcano-E5URKQSM.js +0 -614
  342. package/dist/Cuminc-CBPMCKIC.js +0 -1219
  343. package/dist/DE-VANPWKZI.js +0 -88
  344. package/dist/DE-VANPWKZI.js.map +0 -7
  345. package/dist/DEinput-MONPHDB2.js +0 -405
  346. package/dist/DEinput-MONPHDB2.js.map +0 -7
  347. package/dist/DifferentialAnalysis-XRBS4PZI.js +0 -237
  348. package/dist/Disco-V2VJIDWG.js +0 -3389
  349. package/dist/Disco.UI-OEF5JXBU.js +0 -243
  350. package/dist/DmrPlot-KZUWJWBD.js +0 -637
  351. package/dist/GB-IYTEMMU7.js +0 -1391
  352. package/dist/GSEA-QB62B5KB.js +0 -851
  353. package/dist/GeneExpInput-CXX7SXMQ.js +0 -362
  354. package/dist/Geomap-QNHSCN4N.js +0 -84
  355. package/dist/HicApp-UIULZYYJ.js +0 -2245
  356. package/dist/IDCViewer-B2JENGZZ.js +0 -10812
  357. package/dist/NumBinaryEditor-JOU2J23M.js +0 -279
  358. package/dist/NumBinaryEditor.unit.spec-UXZBBVWL.js +0 -312
  359. package/dist/NumContEditor-BJGP4PVS.js +0 -105
  360. package/dist/NumContEditor.unit.spec-HEXOYIXC.js +0 -164
  361. package/dist/NumCustomBinEditor-HDRTVWNK.js +0 -33
  362. package/dist/NumCustomBinEditor.unit.spec-MN6QZ3ZB.js +0 -397
  363. package/dist/NumDiscreteEditor-JUBR45IJ.js +0 -170
  364. package/dist/NumDiscreteEditor.unit.spec-SDK2LR5B.js +0 -233
  365. package/dist/NumRegularBinEditor-AQPRZ3MI.js +0 -33
  366. package/dist/NumRegularBinEditor.unit.spec-GM3SFB2N.js +0 -278
  367. package/dist/NumSplineEditor-LYLROEGE.js +0 -210
  368. package/dist/NumSplineEditor.unit.spec-3Q2HP6IB.js +0 -224
  369. package/dist/NumericDensity-3ZCDZORO.js +0 -33
  370. package/dist/NumericDensity.unit.spec-MNIAR2PR.js +0 -418
  371. package/dist/NumericHandler-MUNEB5IS.js +0 -34
  372. package/dist/NumericHandler.unit.spec-KPWG2T27.js +0 -214
  373. package/dist/ProteomeInput-NEUHQ2G4.js +0 -388
  374. package/dist/Regression-C75T5LOY.js +0 -1416
  375. package/dist/RunChart2-CMQ2BBSJ.js +0 -749
  376. package/dist/SC-HYK26DXI.js +0 -1107
  377. package/dist/Violin-J5Z3NKMU.js +0 -1082
  378. package/dist/Volcano-VZGOJFM7.js +0 -1573
  379. package/dist/Volcano-VZGOJFM7.js.map +0 -7
  380. package/dist/WSIViewer-EEKHINZU.js +0 -18892
  381. package/dist/WSIViewer-EEKHINZU.js.map +0 -7
  382. package/dist/Wsi-ZP36MKK7.js +0 -431
  383. package/dist/WsiSamplesPlot-6G3U7U5L.js +0 -160
  384. package/dist/WsiSamplesPlot-6G3U7U5L.js.map +0 -7
  385. package/dist/adSandbox-W4THMDUI.js +0 -33
  386. package/dist/animatedBubbleChart-2IVR2WC3.js +0 -547
  387. package/dist/app-LAIPU5IO.js +0 -42
  388. package/dist/app-WMRDJINC.js +0 -32
  389. package/dist/bam-44WCWB5P.js +0 -876
  390. package/dist/barchart-P6XKCJRF.js +0 -42
  391. package/dist/barchart2-5NTYCQYN.js +0 -309
  392. package/dist/block-VEOD6CP4.js +0 -6249
  393. package/dist/block.init-RCPDUYAV.js +0 -33
  394. package/dist/block.mds.expressionrank-KALPK27B.js +0 -354
  395. package/dist/block.mds.geneboxplot-ZASU25BG.js +0 -823
  396. package/dist/block.mds.junction-DCVGVSYG.js +0 -1539
  397. package/dist/block.mds.svcnv-CEGYMRSE.js +0 -6796
  398. package/dist/block.svg-AW4E7NSS.js +0 -159
  399. package/dist/block.tk.aicheck-4ZPFLI5I.js +0 -278
  400. package/dist/block.tk.ase-F3VMNBE3.js +0 -360
  401. package/dist/block.tk.bam-3VDSEMVO.js +0 -1901
  402. package/dist/block.tk.bedgraphdot-3F6AMWFD.js +0 -379
  403. package/dist/block.tk.bigwig.ui-QO334QC3.js +0 -206
  404. package/dist/block.tk.hicstraw-VA7GNOOD.js +0 -818
  405. package/dist/block.tk.junction-7WIZ63R7.js +0 -2358
  406. package/dist/block.tk.junction.textmatrixui-ZHSVODGI.js +0 -194
  407. package/dist/block.tk.ld-JME4SP6A.js +0 -94
  408. package/dist/block.tk.menu-7BFQTH3Q.js +0 -1024
  409. package/dist/block.tk.pgv-C2N7UFYT.js +0 -938
  410. package/dist/brainImaging-6XFUKFZE.js +0 -515
  411. package/dist/brainRegions-SEMS7V4O.js +0 -216
  412. package/dist/brainRegions-SEMS7V4O.js.map +0 -7
  413. package/dist/bubbleHeatmap-YO4232WO.js +0 -378
  414. package/dist/cellTypeBubbleHeatmap-GM4BGCQ3.js +0 -278
  415. package/dist/chunk-2YDQC5BV.js +0 -562
  416. package/dist/chunk-3QMXNK7G.js +0 -379
  417. package/dist/chunk-4C2N2BQC.js +0 -6360
  418. package/dist/chunk-4Q46RDNU.js +0 -34
  419. package/dist/chunk-4YEDSMFX.js +0 -123
  420. package/dist/chunk-56HEUYYM.js +0 -2891
  421. package/dist/chunk-56HEUYYM.js.map +0 -7
  422. package/dist/chunk-5VMEMA4O.js +0 -158
  423. package/dist/chunk-66BJC6ZX.js +0 -217
  424. package/dist/chunk-6JBLNS4D.js +0 -387
  425. package/dist/chunk-6RN4RVKF.js +0 -480
  426. package/dist/chunk-6SKLD7JU.js +0 -59
  427. package/dist/chunk-7C45EYL6.js +0 -274
  428. package/dist/chunk-7RX5UEF3.js +0 -24193
  429. package/dist/chunk-7RX5UEF3.js.map +0 -7
  430. package/dist/chunk-AAM7HHPU.js +0 -103
  431. package/dist/chunk-AFMD6226.js +0 -240
  432. package/dist/chunk-AK3SW3VT.js +0 -176
  433. package/dist/chunk-BBYVVPEO.js +0 -1271
  434. package/dist/chunk-BBYVVPEO.js.map +0 -7
  435. package/dist/chunk-BEJJS2HC.js +0 -194
  436. package/dist/chunk-BMVRYEN2.js +0 -397
  437. package/dist/chunk-BZYTL2EU.js +0 -294
  438. package/dist/chunk-CLOHFGFX.js +0 -14
  439. package/dist/chunk-D6G64XPJ.js +0 -96
  440. package/dist/chunk-DAJT3XVZ.js +0 -31
  441. package/dist/chunk-DKPV7GCZ.js +0 -7966
  442. package/dist/chunk-DKPV7GCZ.js.map +0 -7
  443. package/dist/chunk-DMT6S5HJ.js +0 -5071
  444. package/dist/chunk-DO4SLQNP.js +0 -194
  445. package/dist/chunk-DUGOFIQS.js +0 -464
  446. package/dist/chunk-E3O6ZEWQ.js +0 -129
  447. package/dist/chunk-EJ3SSI5J.js +0 -382
  448. package/dist/chunk-FSDY4QVA.js +0 -272
  449. package/dist/chunk-FUEJFIQX.js +0 -203
  450. package/dist/chunk-FUSTNOQZ.js +0 -2130
  451. package/dist/chunk-FUSTNOQZ.js.map +0 -7
  452. package/dist/chunk-GAW2EETX.js +0 -281
  453. package/dist/chunk-GF6CKFXE.js +0 -1720
  454. package/dist/chunk-GI3RVOO4.js +0 -339
  455. package/dist/chunk-GQ6T62VJ.js +0 -141
  456. package/dist/chunk-GTMHDSOQ.js +0 -550
  457. package/dist/chunk-H555QBYP.js +0 -243
  458. package/dist/chunk-HDTFYTEL.js +0 -2694
  459. package/dist/chunk-HDTFYTEL.js.map +0 -7
  460. package/dist/chunk-HKQDZKSF.js +0 -119
  461. package/dist/chunk-HLZVDBAI.js +0 -1985
  462. package/dist/chunk-HLZVDBAI.js.map +0 -7
  463. package/dist/chunk-HWMZ2OHD.js +0 -49
  464. package/dist/chunk-JG6SE6YU.js +0 -1339
  465. package/dist/chunk-JSVLKCIQ.js +0 -160
  466. package/dist/chunk-JVRGY6IU.js +0 -54
  467. package/dist/chunk-JXUFZZRJ.js +0 -626
  468. package/dist/chunk-K5YG7MVJ.js +0 -2676
  469. package/dist/chunk-KAUMP3RR.js +0 -56
  470. package/dist/chunk-KLGNLUXR.js +0 -518
  471. package/dist/chunk-KWLBPOPE.js +0 -38
  472. package/dist/chunk-L42F5J5C.js +0 -185
  473. package/dist/chunk-L42F5J5C.js.map +0 -7
  474. package/dist/chunk-LXTBOUBG.js +0 -677
  475. package/dist/chunk-MCRWA655.js +0 -98
  476. package/dist/chunk-NGBQL4CM.js +0 -54
  477. package/dist/chunk-OKUFTLFL.js +0 -4297
  478. package/dist/chunk-OKUFTLFL.js.map +0 -7
  479. package/dist/chunk-ONXYJWY6.js +0 -102
  480. package/dist/chunk-OYHID2D7.js +0 -50
  481. package/dist/chunk-PT5JDHPR.js +0 -42
  482. package/dist/chunk-PZZIDJIB.js +0 -806
  483. package/dist/chunk-PZZIDJIB.js.map +0 -7
  484. package/dist/chunk-S5SOLLGM.js +0 -1654
  485. package/dist/chunk-S5SOLLGM.js.map +0 -7
  486. package/dist/chunk-S6XG74R4.js +0 -70
  487. package/dist/chunk-TAEU6SPJ.js +0 -197
  488. package/dist/chunk-UBZRZ3PS.js +0 -102
  489. package/dist/chunk-UM5NWVMA.js +0 -140
  490. package/dist/chunk-VHDVTQFR.js +0 -2784
  491. package/dist/chunk-VRY7WSS6.js +0 -170
  492. package/dist/chunk-VSPUFGDX.js +0 -339
  493. package/dist/chunk-VVDFRJVN.js +0 -306
  494. package/dist/chunk-VVDFRJVN.js.map +0 -7
  495. package/dist/chunk-WFOC4W5A.js +0 -55
  496. package/dist/chunk-WVPFLPWB.js +0 -402
  497. package/dist/chunk-WZUUWGEU.js +0 -22834
  498. package/dist/chunk-WZUUWGEU.js.map +0 -7
  499. package/dist/chunk-X7IAKV5Z.js +0 -276
  500. package/dist/chunk-XHOL37O6.js +0 -299
  501. package/dist/chunk-XJGPL2JZ.js +0 -39
  502. package/dist/chunk-XJGPL2JZ.js.map +0 -7
  503. package/dist/chunk-XPB2GP3C.js +0 -2327
  504. package/dist/chunk-XPVU5AMT.js +0 -263
  505. package/dist/chunk-YLJOZP4P.js +0 -4195
  506. package/dist/chunk-YLWSTPPL.js +0 -302
  507. package/dist/chunk-YZVWOQBP.js +0 -134
  508. package/dist/chunk-ZB3RP5QP.js +0 -446
  509. package/dist/chunk-ZU47ERPU.js +0 -26
  510. package/dist/cohort-ZTT2PSQA.js +0 -70
  511. package/dist/condition-L5DXIAJT.js +0 -327
  512. package/dist/controls-ROZP2O7A.js +0 -34
  513. package/dist/controls.config-YQKGHMIP.js +0 -34
  514. package/dist/correlation-6AKRIQXN.js +0 -95
  515. package/dist/customdata.inputui-DD3OFHUS.js +0 -284
  516. package/dist/dataDownload-VHHSLSZV.js +0 -329
  517. package/dist/databrowser.ui-RLYJOEWQ.js +0 -425
  518. package/dist/dictionary-IMOOQHIH.js +0 -113
  519. package/dist/dnaMethylation-T6XUIOJF.js +0 -33
  520. package/dist/dnaMethylation.integration.spec-NRJOIDRD.js +0 -198
  521. package/dist/dofetch-MLAEV3A2.js +0 -48
  522. package/dist/e2pca-F3TGJOMW.js +0 -344
  523. package/dist/ep-UAF6OL2Y.js +0 -1249
  524. package/dist/expclust.gdc.spec-GHH3JQ65.js +0 -302
  525. package/dist/facet-MB4C7GII.js +0 -519
  526. package/dist/gb-C5YSAFWP.js +0 -81
  527. package/dist/geneExpClustering-3BRSI5BR.js +0 -244
  528. package/dist/geneExpression-K3IZLSYC.js +0 -310
  529. package/dist/geneExpression-SIAPRA3E.js +0 -33
  530. package/dist/geneExpression.unit.spec-I66QVNT5.js +0 -99
  531. package/dist/geneORA-SLM3SNNS.js +0 -273
  532. package/dist/geneRanking-4EFYOR6A.js +0 -548
  533. package/dist/geneVariant-O347F2OY.js +0 -286
  534. package/dist/geneVariant-Z3BUIBLS.js +0 -36
  535. package/dist/geneVariant.integration.spec-ZZ65EYEL.js +0 -388
  536. package/dist/genefusion.ui-TK6UKPDR.js +0 -303
  537. package/dist/geneset-MVXSEOKZ.js +0 -203
  538. package/dist/genomeBrowser.spec-QDB4Z2L6.js +0 -276
  539. package/dist/grin2-DCU6PLPU.js +0 -70
  540. package/dist/grin2-P6Z45MCJ.js +0 -1137
  541. package/dist/hierCluster-3H47NLKS.js +0 -55
  542. package/dist/hierCluster-JG6VXTCV.js +0 -59
  543. package/dist/hierCluster.config-IP6I7RTS.js +0 -36
  544. package/dist/hierCluster.integration.spec-7PUNHRRS.js +0 -483
  545. package/dist/hierCluster.interactivity-FIDVRACV.js +0 -49
  546. package/dist/hierCluster.renderers-QMJWUPAI.js +0 -19
  547. package/dist/imagePlot-CXYKBCWS.js +0 -156
  548. package/dist/importPlot-Z4A54RXH.js +0 -8
  549. package/dist/isoformExpression-DMDV2PZY.js +0 -35
  550. package/dist/isoformExpression.unit.spec-W2LIYOXS.js +0 -237
  551. package/dist/junction-R5GMEO7Z.js +0 -36
  552. package/dist/junction.customTerm-AI44GNFV.js +0 -16
  553. package/dist/junction.unit.spec-SCRCANOC.js +0 -182
  554. package/dist/launch.adhoc-THLTYZJT.js +0 -37
  555. package/dist/leftlabel.sample-GKQXEY4J.js +0 -258
  556. package/dist/legacyDataset-27L4DMCL.js +0 -117
  557. package/dist/lollipop-2TW6GGPY.js +0 -166
  558. package/dist/maf-A4PVW5V2.js +0 -455
  559. package/dist/maftimeline-QMX3HOAU.js +0 -587
  560. package/dist/matrix-BGRYRU3T.js +0 -54
  561. package/dist/matrix-GPXTUVCQ.js +0 -59
  562. package/dist/matrix.cells-C6OY7F5T.js +0 -26
  563. package/dist/matrix.config-Z5ZGHXDV.js +0 -37
  564. package/dist/matrix.data-WB26I3TF.js +0 -23
  565. package/dist/matrix.groups-C2V2CV4A.js +0 -26
  566. package/dist/matrix.integration.spec-3COAXQBV.js +0 -3160
  567. package/dist/matrix.interactivity-NGHIQR3A.js +0 -37
  568. package/dist/matrix.layout-NYIOESGN.js +0 -39
  569. package/dist/matrix.legend-Q5HHWP5Q.js +0 -20
  570. package/dist/matrix.renderers-GLXZARIP.js +0 -34
  571. package/dist/matrix.serieses-LDQEPXPD.js +0 -19
  572. package/dist/matrix.sort-44TQNRIX.js +0 -26
  573. package/dist/matrix.sort.unit.spec-T3BDWJ3Z.js +0 -468
  574. package/dist/matrix.sorterUi-6Y4YBQYL.js +0 -16
  575. package/dist/matrix.sorterUi.unit.spec-NHUYNMNU.js +0 -338
  576. package/dist/matrix.unit.spec-C7IRIBN6.js +0 -150
  577. package/dist/mavb-E37LI73X.js +0 -727
  578. package/dist/mds.fimo-YTGX7VEN.js +0 -513
  579. package/dist/mds.samplescatterplot-FFGGJSI3.js +0 -1545
  580. package/dist/mds.survivalplot-NCWRXXV4.js +0 -477
  581. package/dist/multivalue-N7A2PU5K.js +0 -83
  582. package/dist/numericDictTermCluster-AKQKRBQH.js +0 -63
  583. package/dist/oncomatrix-QPVGACMF.js +0 -290
  584. package/dist/oncomatrix.spec-6L2NDN2G.js +0 -443
  585. package/dist/plot.2dvaf-6TLON77B.js +0 -372
  586. package/dist/plot.app-VM273TXU.js +0 -36
  587. package/dist/plot.barplot-IQTZURHK.js +0 -97
  588. package/dist/plot.boxplot-WEXB6HII.js +0 -146
  589. package/dist/plot.brainImaging-REGSSBHV.js +0 -51
  590. package/dist/plot.disco-F25Z3FQL.js +0 -99
  591. package/dist/plot.ssgq-CRRK26RS.js +0 -134
  592. package/dist/plot.vaf2cov-WCNPZKXK.js +0 -253
  593. package/dist/plot.wsi-6OAPT5BA.js +0 -36
  594. package/dist/plot.wsi-6OAPT5BA.js.map +0 -7
  595. package/dist/polar2-MH5GPXHJ.js +0 -232
  596. package/dist/profileForms-2YX2OYDI.js +0 -941
  597. package/dist/profilePlot-FUTMZ2PP.js +0 -49
  598. package/dist/proteinView-6Z4ALZW2.js +0 -1562
  599. package/dist/proteinView-6Z4ALZW2.js.map +0 -7
  600. package/dist/proteomeCohortCompare-6GLFOYI5.js +0 -780
  601. package/dist/proteomeCohortCompare-6GLFOYI5.js.map +0 -7
  602. package/dist/pseudbulk.unit.spec-S7FDL3IX.js +0 -86
  603. package/dist/pseudobulk-A3LB23N2.js +0 -35
  604. package/dist/qualitative-5VJRMF4S.js +0 -38
  605. package/dist/radar2-2SJX4ZXN.js +0 -327
  606. package/dist/radarFacility2-7FPO34JS.js +0 -335
  607. package/dist/rememberedGvQ.unit.spec-WOQVPQ75.js +0 -211
  608. package/dist/render-ZLA2RRBP.js +0 -33
  609. package/dist/report-VCE6RILD.js +0 -217
  610. package/dist/sampleView-QYTX4OLI.js +0 -43
  611. package/dist/samplelst-7NGH3SUM.js +0 -106
  612. package/dist/samplematrix-SNAR6IBB.js +0 -2193
  613. package/dist/sc-2JETYAI4.js +0 -81
  614. package/dist/scatter-D7VZOBEE.js +0 -880
  615. package/dist/scatter-GHBQM2RR.js +0 -88
  616. package/dist/selectGenomeWithTklst-BD4GMGX3.js +0 -129
  617. package/dist/singleCellCellType-XHLOJVVC.js +0 -33
  618. package/dist/singleCellCellType.unit.spec-LCLR3IOD.js +0 -154
  619. package/dist/singleCellGeneExpression-JRBONI5C.js +0 -33
  620. package/dist/singleCellGeneExpression.unit.spec-Z2KSVCIG.js +0 -148
  621. package/dist/singleCellPlot-4462CQHF.js +0 -49
  622. package/dist/singlecell-CDUQ6MTO.js +0 -81
  623. package/dist/singlecell-SO3B5KJ7.js +0 -1566
  624. package/dist/snp-YE2MXKJO.js +0 -33
  625. package/dist/snp.unit.spec-MT57TGGQ.js +0 -171
  626. package/dist/snplocus-RSNKWY63.js +0 -203
  627. package/dist/spliceevent.a53ss.diagram-6N6YGYV7.js +0 -146
  628. package/dist/spliceevent.exonskip.diagram-LMNUS4XV.js +0 -278
  629. package/dist/spliceevent.noeventdiagram-LTBH4YD5.js +0 -455
  630. package/dist/ssGSEA-DPK4PDM2.js +0 -33
  631. package/dist/ssGSEA.unit.spec-K2SA7ME7.js +0 -83
  632. package/dist/stattable-PR47XT4F.js +0 -117
  633. package/dist/studyCatalog-GMUWIUL4.js +0 -378
  634. package/dist/studyCatalog-GMUWIUL4.js.map +0 -7
  635. package/dist/summarizeCnvGeneexp-YZEMDLES.js +0 -158
  636. package/dist/summarizeGeneexpSurvival-3TXV6ZNI.js +0 -105
  637. package/dist/summarizeMutationCnv-EBWSEHWJ.js +0 -159
  638. package/dist/summarizeMutationDiagnosis-FXA25W3O.js +0 -35
  639. package/dist/summarizeMutationSurvival-MR4AOMNS.js +0 -99
  640. package/dist/summary-4C6LGTMF.js +0 -42
  641. package/dist/summary.integration.spec-Y6JLH7NH.js +0 -409
  642. package/dist/summaryInput-NWT2DXWU.js +0 -242
  643. package/dist/sunburst-266MA7E2.js +0 -278
  644. package/dist/survival-CAZCIY2N.js +0 -53
  645. package/dist/survival-EILGNIY7.js +0 -1246
  646. package/dist/survival-EILGNIY7.js.map +0 -7
  647. package/dist/survival.integration.spec-34JJVLLI.js +0 -613
  648. package/dist/survival.integration.spec-34JJVLLI.js.map +0 -7
  649. package/dist/svgraph-OFUESREM.js +0 -1382
  650. package/dist/svmr-PVH42MY4.js +0 -3837
  651. package/dist/table-C2SICFZV.js +0 -197
  652. package/dist/termCollection-H4RL5WJG.js +0 -33
  653. package/dist/termCollection-TGYDI7NP.js +0 -252
  654. package/dist/termCollection.unit.spec-JSALS7GL.js +0 -299
  655. package/dist/termCollectionFractionSelection-YJVDNV4I.js +0 -42
  656. package/dist/termCollectionFractionSelection.unit.spec-4GM7P4ZW.js +0 -188
  657. package/dist/tk-RZCPSHJG.js +0 -1121
  658. package/dist/tk-SNTRA5CC.js +0 -41
  659. package/dist/tp.ui-2W4K3XH6.js +0 -1454
  660. package/dist/tvs.dt-GIPVC3R6.js +0 -34
  661. package/dist/tvs.dtcnv.categorical-TEYAS4OU.js +0 -35
  662. package/dist/tvs.dtcnv.continuous-VQRATYPZ.js +0 -67
  663. package/dist/tvs.dtfusion-P2KF5Z4H.js +0 -35
  664. package/dist/tvs.dtitd-TM6UROSH.js +0 -35
  665. package/dist/tvs.dtsnvindel-FZXC23NF.js +0 -35
  666. package/dist/tvs.dtsv-Y5QEJPYG.js +0 -35
  667. package/dist/tvs.numeric-3UXW4JHJ.js +0 -20
  668. package/dist/tvs.samplelst-MLAFPFER.js +0 -98
  669. package/dist/tvs.termCollection-ZQQDKESH.js +0 -124
  670. package/dist/vocabulary-JRUZPHMG.js +0 -36
  671. package/dist/wsi.direct-6QYNXOBY.js +0 -244
  672. package/dist/wsi.direct-6QYNXOBY.js.map +0 -7
  673. /package/dist/{2dmaf-JIY57FG6.js.map → 2dmaf-5OYM4MXA.js.map} +0 -0
  674. /package/dist/{AggMatrixInput-FH6WRTLP.js.map → AggMatrixInput-4VTI4Y6E.js.map} +0 -0
  675. /package/dist/{AggregateMatrix-MGEX5AVF.js.map → AggregateMatrix-K7SGNO63.js.map} +0 -0
  676. /package/dist/{AppHeader-FFOQFH55.js.map → AppHeader-WU6TO2OZ.js.map} +0 -0
  677. /package/dist/{BoxPlot-KCY4JVRX.js.map → BoxPlot-OW7U3XTF.js.map} +0 -0
  678. /package/dist/{CorrelationVolcano-E5URKQSM.js.map → CorrelationVolcano-B3JTTZHF.js.map} +0 -0
  679. /package/dist/{Cuminc-CBPMCKIC.js.map → Cuminc-AJEXWRU2.js.map} +0 -0
  680. /package/dist/{DifferentialAnalysis-XRBS4PZI.js.map → DifferentialAnalysis-BFCQBX5J.js.map} +0 -0
  681. /package/dist/{Disco-V2VJIDWG.js.map → Disco-ZJLVQRTC.js.map} +0 -0
  682. /package/dist/{Disco.UI-OEF5JXBU.js.map → Disco.UI-AEDACXW2.js.map} +0 -0
  683. /package/dist/{DmrPlot-KZUWJWBD.js.map → DmrPlot-QMRXAOM3.js.map} +0 -0
  684. /package/dist/{GB-IYTEMMU7.js.map → GB-MFU2UJ22.js.map} +0 -0
  685. /package/dist/{GSEA-QB62B5KB.js.map → GSEA-E3NHU22A.js.map} +0 -0
  686. /package/dist/{GeneExpInput-CXX7SXMQ.js.map → GeneExpInput-MIUNSOPY.js.map} +0 -0
  687. /package/dist/{Geomap-QNHSCN4N.js.map → Geomap-HAJG3STN.js.map} +0 -0
  688. /package/dist/{HicApp-UIULZYYJ.js.map → HicApp-ECFFIRWI.js.map} +0 -0
  689. /package/dist/{IDCViewer-B2JENGZZ.js.map → IDCViewer-TNSD3U2V.js.map} +0 -0
  690. /package/dist/{NumBinaryEditor-JOU2J23M.js.map → NumBinaryEditor-CNBGZ6WY.js.map} +0 -0
  691. /package/dist/{NumBinaryEditor.unit.spec-UXZBBVWL.js.map → NumBinaryEditor.unit.spec-SKFDALF3.js.map} +0 -0
  692. /package/dist/{NumContEditor-BJGP4PVS.js.map → NumContEditor-7ID2U7JL.js.map} +0 -0
  693. /package/dist/{NumContEditor.unit.spec-HEXOYIXC.js.map → NumContEditor.unit.spec-XHSQSAWK.js.map} +0 -0
  694. /package/dist/{NumCustomBinEditor-HDRTVWNK.js.map → NumCustomBinEditor-PAIPRJPO.js.map} +0 -0
  695. /package/dist/{NumCustomBinEditor.unit.spec-MN6QZ3ZB.js.map → NumCustomBinEditor.unit.spec-QYVZMMHV.js.map} +0 -0
  696. /package/dist/{NumDiscreteEditor-JUBR45IJ.js.map → NumDiscreteEditor-K2NZZQTH.js.map} +0 -0
  697. /package/dist/{NumDiscreteEditor.unit.spec-SDK2LR5B.js.map → NumDiscreteEditor.unit.spec-3CG5VEQL.js.map} +0 -0
  698. /package/dist/{NumRegularBinEditor-AQPRZ3MI.js.map → NumRegularBinEditor-EOVZ22TP.js.map} +0 -0
  699. /package/dist/{NumRegularBinEditor.unit.spec-GM3SFB2N.js.map → NumRegularBinEditor.unit.spec-FHTVH5FH.js.map} +0 -0
  700. /package/dist/{NumSplineEditor-LYLROEGE.js.map → NumSplineEditor-N3REMJUC.js.map} +0 -0
  701. /package/dist/{NumSplineEditor.unit.spec-3Q2HP6IB.js.map → NumSplineEditor.unit.spec-DZCP35GL.js.map} +0 -0
  702. /package/dist/{NumericDensity-3ZCDZORO.js.map → NumericDensity-42MWVI2S.js.map} +0 -0
  703. /package/dist/{NumericDensity.unit.spec-MNIAR2PR.js.map → NumericDensity.unit.spec-T2HHSQON.js.map} +0 -0
  704. /package/dist/{NumericHandler-MUNEB5IS.js.map → NumericHandler-5XU3SSPD.js.map} +0 -0
  705. /package/dist/{NumericHandler.unit.spec-KPWG2T27.js.map → NumericHandler.unit.spec-3F23KSAQ.js.map} +0 -0
  706. /package/dist/{ProteomeInput-NEUHQ2G4.js.map → ProteomeInput-UN2BUNRO.js.map} +0 -0
  707. /package/dist/{Regression-C75T5LOY.js.map → Regression-HWLJENA5.js.map} +0 -0
  708. /package/dist/{RunChart2-CMQ2BBSJ.js.map → RunChart2-YO55WE4M.js.map} +0 -0
  709. /package/dist/{SC-HYK26DXI.js.map → SC-LEDJ4DQR.js.map} +0 -0
  710. /package/dist/{Violin-J5Z3NKMU.js.map → Violin-E6PDJZ2B.js.map} +0 -0
  711. /package/dist/{Wsi-ZP36MKK7.js.map → Wsi-S675CYTW.js.map} +0 -0
  712. /package/dist/{adSandbox-W4THMDUI.js.map → adSandbox-ZJQ5ZW2T.js.map} +0 -0
  713. /package/dist/{animatedBubbleChart-2IVR2WC3.js.map → animatedBubbleChart-LRUS7W36.js.map} +0 -0
  714. /package/dist/{app-LAIPU5IO.js.map → app-7Q3QIBU4.js.map} +0 -0
  715. /package/dist/{app-WMRDJINC.js.map → app-PKSI4MV5.js.map} +0 -0
  716. /package/dist/{bam-44WCWB5P.js.map → bam-X5JH5ZT7.js.map} +0 -0
  717. /package/dist/{barchart-P6XKCJRF.js.map → barchart-UT6J4L2N.js.map} +0 -0
  718. /package/dist/{barchart2-5NTYCQYN.js.map → barchart2-ZG5QJO3C.js.map} +0 -0
  719. /package/dist/{block-VEOD6CP4.js.map → block-TC466NGW.js.map} +0 -0
  720. /package/dist/{block.init-RCPDUYAV.js.map → block.init-CIBNSYAC.js.map} +0 -0
  721. /package/dist/{block.mds.expressionrank-KALPK27B.js.map → block.mds.expressionrank-EY5PCQCK.js.map} +0 -0
  722. /package/dist/{block.mds.geneboxplot-ZASU25BG.js.map → block.mds.geneboxplot-R6AOMHO5.js.map} +0 -0
  723. /package/dist/{block.mds.junction-DCVGVSYG.js.map → block.mds.junction-JMV6FNYC.js.map} +0 -0
  724. /package/dist/{block.mds.svcnv-CEGYMRSE.js.map → block.mds.svcnv-IHTV3QYG.js.map} +0 -0
  725. /package/dist/{block.svg-AW4E7NSS.js.map → block.svg-NTFLVQAQ.js.map} +0 -0
  726. /package/dist/{block.tk.aicheck-4ZPFLI5I.js.map → block.tk.aicheck-FYPL32Y4.js.map} +0 -0
  727. /package/dist/{block.tk.ase-F3VMNBE3.js.map → block.tk.ase-FWCB6VBO.js.map} +0 -0
  728. /package/dist/{block.tk.bam-3VDSEMVO.js.map → block.tk.bam-Q5UFUABN.js.map} +0 -0
  729. /package/dist/{block.tk.bedgraphdot-3F6AMWFD.js.map → block.tk.bedgraphdot-KBI3GFDM.js.map} +0 -0
  730. /package/dist/{block.tk.bigwig.ui-QO334QC3.js.map → block.tk.bigwig.ui-KXNFX7G7.js.map} +0 -0
  731. /package/dist/{block.tk.hicstraw-VA7GNOOD.js.map → block.tk.hicstraw-MQBH3YAJ.js.map} +0 -0
  732. /package/dist/{block.tk.junction-7WIZ63R7.js.map → block.tk.junction-EBTVXLJH.js.map} +0 -0
  733. /package/dist/{block.tk.junction.textmatrixui-ZHSVODGI.js.map → block.tk.junction.textmatrixui-ETYLCP2O.js.map} +0 -0
  734. /package/dist/{block.tk.ld-JME4SP6A.js.map → block.tk.ld-NLB6L6WQ.js.map} +0 -0
  735. /package/dist/{block.tk.menu-7BFQTH3Q.js.map → block.tk.menu-PJLCOXVJ.js.map} +0 -0
  736. /package/dist/{block.tk.pgv-C2N7UFYT.js.map → block.tk.pgv-JOIQVWL2.js.map} +0 -0
  737. /package/dist/{brainImaging-6XFUKFZE.js.map → brainImaging-SPRC3QFB.js.map} +0 -0
  738. /package/dist/{bubbleHeatmap-YO4232WO.js.map → bubbleHeatmap-CFTZ5RXH.js.map} +0 -0
  739. /package/dist/{cellTypeBubbleHeatmap-GM4BGCQ3.js.map → cellTypeBubbleHeatmap-DXPLFT5U.js.map} +0 -0
  740. /package/dist/{chunk-UBZRZ3PS.js.map → chunk-2BQ572SL.js.map} +0 -0
  741. /package/dist/{chunk-AAM7HHPU.js.map → chunk-2DQIQYY3.js.map} +0 -0
  742. /package/dist/{chunk-YZVWOQBP.js.map → chunk-2POQWEK6.js.map} +0 -0
  743. /package/dist/{chunk-ZB3RP5QP.js.map → chunk-2SQEVMAL.js.map} +0 -0
  744. /package/dist/{chunk-5VMEMA4O.js.map → chunk-37HTZ6IG.js.map} +0 -0
  745. /package/dist/{chunk-K5YG7MVJ.js.map → chunk-452765PG.js.map} +0 -0
  746. /package/dist/{chunk-DAJT3XVZ.js.map → chunk-4DXQJGJ7.js.map} +0 -0
  747. /package/dist/{chunk-E3O6ZEWQ.js.map → chunk-5DBW3WLK.js.map} +0 -0
  748. /package/dist/{chunk-WVPFLPWB.js.map → chunk-5ILEFNXJ.js.map} +0 -0
  749. /package/dist/{chunk-6SKLD7JU.js.map → chunk-5UO7MKCO.js.map} +0 -0
  750. /package/dist/{chunk-H555QBYP.js.map → chunk-7R7P6VMT.js.map} +0 -0
  751. /package/dist/{chunk-D6G64XPJ.js.map → chunk-7X6NF7NI.js.map} +0 -0
  752. /package/dist/{chunk-ZU47ERPU.js.map → chunk-ANGLZ4XR.js.map} +0 -0
  753. /package/dist/{chunk-KWLBPOPE.js.map → chunk-BMQDU7KN.js.map} +0 -0
  754. /package/dist/{chunk-GAW2EETX.js.map → chunk-C5TU4AYP.js.map} +0 -0
  755. /package/dist/{chunk-PT5JDHPR.js.map → chunk-DHNET3P4.js.map} +0 -0
  756. /package/dist/{chunk-EJ3SSI5J.js.map → chunk-EGKHDALO.js.map} +0 -0
  757. /package/dist/{chunk-4Q46RDNU.js.map → chunk-EPWGUWQP.js.map} +0 -0
  758. /package/dist/{chunk-JG6SE6YU.js.map → chunk-F3EYPES3.js.map} +0 -0
  759. /package/dist/{chunk-BEJJS2HC.js.map → chunk-F4DM3WS4.js.map} +0 -0
  760. /package/dist/{chunk-BZYTL2EU.js.map → chunk-FTLCINDC.js.map} +0 -0
  761. /package/dist/{chunk-6RN4RVKF.js.map → chunk-GT6WJUJY.js.map} +0 -0
  762. /package/dist/{chunk-S6XG74R4.js.map → chunk-GWCK5QGV.js.map} +0 -0
  763. /package/dist/{chunk-DUGOFIQS.js.map → chunk-HJSGHFJ6.js.map} +0 -0
  764. /package/dist/{chunk-HWMZ2OHD.js.map → chunk-HS6BTSFX.js.map} +0 -0
  765. /package/dist/{chunk-DMT6S5HJ.js.map → chunk-IB5TKNG5.js.map} +0 -0
  766. /package/dist/{chunk-NGBQL4CM.js.map → chunk-IIMTOPH3.js.map} +0 -0
  767. /package/dist/{chunk-FSDY4QVA.js.map → chunk-JAXN3Q3K.js.map} +0 -0
  768. /package/dist/{chunk-GQ6T62VJ.js.map → chunk-KIRZXPMB.js.map} +0 -0
  769. /package/dist/{chunk-JVRGY6IU.js.map → chunk-L32KMIC3.js.map} +0 -0
  770. /package/dist/{chunk-4YEDSMFX.js.map → chunk-LB7NENEB.js.map} +0 -0
  771. /package/dist/{chunk-2YDQC5BV.js.map → chunk-LDWMVZYF.js.map} +0 -0
  772. /package/dist/{chunk-UM5NWVMA.js.map → chunk-M367Y7ML.js.map} +0 -0
  773. /package/dist/{chunk-VSPUFGDX.js.map → chunk-M4XXKTH2.js.map} +0 -0
  774. /package/dist/{chunk-AK3SW3VT.js.map → chunk-ME7OF3CS.js.map} +0 -0
  775. /package/dist/{chunk-JXUFZZRJ.js.map → chunk-N2CXLMNX.js.map} +0 -0
  776. /package/dist/{chunk-HKQDZKSF.js.map → chunk-N7DVQTPC.js.map} +0 -0
  777. /package/dist/{chunk-KLGNLUXR.js.map → chunk-N7TD7N7D.js.map} +0 -0
  778. /package/dist/{chunk-XHOL37O6.js.map → chunk-NBX6TT5C.js.map} +0 -0
  779. /package/dist/{chunk-GI3RVOO4.js.map → chunk-NSRGYBDM.js.map} +0 -0
  780. /package/dist/{chunk-3QMXNK7G.js.map → chunk-NVS7KYYI.js.map} +0 -0
  781. /package/dist/{chunk-BMVRYEN2.js.map → chunk-OVPEMVXT.js.map} +0 -0
  782. /package/dist/{chunk-7C45EYL6.js.map → chunk-OXWLQQXL.js.map} +0 -0
  783. /package/dist/{chunk-WFOC4W5A.js.map → chunk-QGGSYEVJ.js.map} +0 -0
  784. /package/dist/{chunk-OYHID2D7.js.map → chunk-QLEVONLD.js.map} +0 -0
  785. /package/dist/{chunk-MCRWA655.js.map → chunk-RNWHB5DI.js.map} +0 -0
  786. /package/dist/{chunk-FUEJFIQX.js.map → chunk-RUHLDUOT.js.map} +0 -0
  787. /package/dist/{chunk-TAEU6SPJ.js.map → chunk-RV34WFGZ.js.map} +0 -0
  788. /package/dist/{chunk-4C2N2BQC.js.map → chunk-SDVE5ECI.js.map} +0 -0
  789. /package/dist/{chunk-VRY7WSS6.js.map → chunk-SWO6DZTG.js.map} +0 -0
  790. /package/dist/{chunk-6JBLNS4D.js.map → chunk-SYPSS3JQ.js.map} +0 -0
  791. /package/dist/{chunk-XPB2GP3C.js.map → chunk-TDM3645O.js.map} +0 -0
  792. /package/dist/{chunk-66BJC6ZX.js.map → chunk-VVO3R5JV.js.map} +0 -0
  793. /package/dist/{chunk-CLOHFGFX.js.map → chunk-VYEU6Y35.js.map} +0 -0
  794. /package/dist/{chunk-XPVU5AMT.js.map → chunk-WGXC6IEF.js.map} +0 -0
  795. /package/dist/{chunk-GF6CKFXE.js.map → chunk-WPDM57B5.js.map} +0 -0
  796. /package/dist/{chunk-VHDVTQFR.js.map → chunk-WS7WKS2B.js.map} +0 -0
  797. /package/dist/{chunk-X7IAKV5Z.js.map → chunk-X63NSV33.js.map} +0 -0
  798. /package/dist/{chunk-KAUMP3RR.js.map → chunk-XXNRSSBR.js.map} +0 -0
  799. /package/dist/{chunk-ONXYJWY6.js.map → chunk-YD6UGDFI.js.map} +0 -0
  800. /package/dist/{chunk-JSVLKCIQ.js.map → chunk-YRIYDFNU.js.map} +0 -0
  801. /package/dist/{chunk-DO4SLQNP.js.map → chunk-YY5WQQ3J.js.map} +0 -0
  802. /package/dist/{chunk-YLJOZP4P.js.map → chunk-Z2ZITHT4.js.map} +0 -0
  803. /package/dist/{chunk-YLWSTPPL.js.map → chunk-Z4SM3FBK.js.map} +0 -0
  804. /package/dist/{chunk-AFMD6226.js.map → chunk-ZEYEIUEZ.js.map} +0 -0
  805. /package/dist/{chunk-LXTBOUBG.js.map → chunk-ZLYTDHQP.js.map} +0 -0
  806. /package/dist/{chunk-GTMHDSOQ.js.map → chunk-ZWCVRVV4.js.map} +0 -0
  807. /package/dist/{cohort-ZTT2PSQA.js.map → cohort-FZNMFWOX.js.map} +0 -0
  808. /package/dist/{condition-L5DXIAJT.js.map → condition-AJJLFCBQ.js.map} +0 -0
  809. /package/dist/{controls-ROZP2O7A.js.map → controls-SZOLV37V.js.map} +0 -0
  810. /package/dist/{controls.config-YQKGHMIP.js.map → controls.config-CVP75WFA.js.map} +0 -0
  811. /package/dist/{correlation-6AKRIQXN.js.map → correlation-UFJFQHQ3.js.map} +0 -0
  812. /package/dist/{customdata.inputui-DD3OFHUS.js.map → customdata.inputui-HOVA4A6O.js.map} +0 -0
  813. /package/dist/{dataDownload-VHHSLSZV.js.map → dataDownload-VTUG4IOK.js.map} +0 -0
  814. /package/dist/{databrowser.ui-RLYJOEWQ.js.map → databrowser.ui-O5S4Y4EK.js.map} +0 -0
  815. /package/dist/{dictionary-IMOOQHIH.js.map → dictionary-L2UNNNP7.js.map} +0 -0
  816. /package/dist/{dnaMethylation-T6XUIOJF.js.map → dnaMethylation-B4SWZI4O.js.map} +0 -0
  817. /package/dist/{dnaMethylation.integration.spec-NRJOIDRD.js.map → dnaMethylation.integration.spec-ANJAMNYJ.js.map} +0 -0
  818. /package/dist/{dofetch-MLAEV3A2.js.map → dofetch-F5XSHQIS.js.map} +0 -0
  819. /package/dist/{e2pca-F3TGJOMW.js.map → e2pca-66ARIMKL.js.map} +0 -0
  820. /package/dist/{ep-UAF6OL2Y.js.map → ep-OFGJYVUY.js.map} +0 -0
  821. /package/dist/{expclust.gdc.spec-GHH3JQ65.js.map → expclust.gdc.spec-22RXQTTP.js.map} +0 -0
  822. /package/dist/{facet-MB4C7GII.js.map → facet-GVZQ3RPN.js.map} +0 -0
  823. /package/dist/{gb-C5YSAFWP.js.map → gb-HEPGVYEK.js.map} +0 -0
  824. /package/dist/{geneExpClustering-3BRSI5BR.js.map → geneExpClustering-3NU2U422.js.map} +0 -0
  825. /package/dist/{geneExpression-K3IZLSYC.js.map → geneExpression-FXQ4L2J2.js.map} +0 -0
  826. /package/dist/{geneExpression-SIAPRA3E.js.map → geneExpression-XYVYJJA5.js.map} +0 -0
  827. /package/dist/{geneExpression.unit.spec-I66QVNT5.js.map → geneExpression.unit.spec-K3FIRSNK.js.map} +0 -0
  828. /package/dist/{geneORA-SLM3SNNS.js.map → geneORA-5M2JSDMF.js.map} +0 -0
  829. /package/dist/{geneRanking-4EFYOR6A.js.map → geneRanking-TP3R3CS3.js.map} +0 -0
  830. /package/dist/{geneVariant-Z3BUIBLS.js.map → geneVariant-232EYUFJ.js.map} +0 -0
  831. /package/dist/{geneVariant-O347F2OY.js.map → geneVariant-BHXTPUDC.js.map} +0 -0
  832. /package/dist/{geneVariant.integration.spec-ZZ65EYEL.js.map → geneVariant.integration.spec-ICFHVFIR.js.map} +0 -0
  833. /package/dist/{genefusion.ui-TK6UKPDR.js.map → genefusion.ui-ABRCUQFC.js.map} +0 -0
  834. /package/dist/{geneset-MVXSEOKZ.js.map → geneset-N42FIVA6.js.map} +0 -0
  835. /package/dist/{genomeBrowser.spec-QDB4Z2L6.js.map → genomeBrowser.spec-5HKQKLRU.js.map} +0 -0
  836. /package/dist/{grin2-P6Z45MCJ.js.map → grin2-H2KJYLP6.js.map} +0 -0
  837. /package/dist/{grin2-DCU6PLPU.js.map → grin2-NGMTEMXF.js.map} +0 -0
  838. /package/dist/{hierCluster-3H47NLKS.js.map → hierCluster-JU5JPLM7.js.map} +0 -0
  839. /package/dist/{hierCluster-JG6VXTCV.js.map → hierCluster-LSSH275H.js.map} +0 -0
  840. /package/dist/{hierCluster.config-IP6I7RTS.js.map → hierCluster.config-ILOR7GBB.js.map} +0 -0
  841. /package/dist/{hierCluster.integration.spec-7PUNHRRS.js.map → hierCluster.integration.spec-CNR5OJOH.js.map} +0 -0
  842. /package/dist/{hierCluster.interactivity-FIDVRACV.js.map → hierCluster.interactivity-TLEIVTFK.js.map} +0 -0
  843. /package/dist/{hierCluster.renderers-QMJWUPAI.js.map → hierCluster.renderers-P7JNIT3N.js.map} +0 -0
  844. /package/dist/{imagePlot-CXYKBCWS.js.map → imagePlot-BF67SXQR.js.map} +0 -0
  845. /package/dist/{importPlot-Z4A54RXH.js.map → importPlot-OHXSXNZN.js.map} +0 -0
  846. /package/dist/{isoformExpression-DMDV2PZY.js.map → isoformExpression-4VKHE4HA.js.map} +0 -0
  847. /package/dist/{isoformExpression.unit.spec-W2LIYOXS.js.map → isoformExpression.unit.spec-4TVSIFG4.js.map} +0 -0
  848. /package/dist/{junction-R5GMEO7Z.js.map → junction-VUHORV43.js.map} +0 -0
  849. /package/dist/{junction.customTerm-AI44GNFV.js.map → junction.customTerm-FRYWSS4P.js.map} +0 -0
  850. /package/dist/{junction.unit.spec-SCRCANOC.js.map → junction.unit.spec-KKVLYT7Q.js.map} +0 -0
  851. /package/dist/{launch.adhoc-THLTYZJT.js.map → launch.adhoc-UDYMFZTQ.js.map} +0 -0
  852. /package/dist/{leftlabel.sample-GKQXEY4J.js.map → leftlabel.sample-R5FFBWG3.js.map} +0 -0
  853. /package/dist/{legacyDataset-27L4DMCL.js.map → legacyDataset-IEFWFVS6.js.map} +0 -0
  854. /package/dist/{lollipop-2TW6GGPY.js.map → lollipop-3IX6ZYUN.js.map} +0 -0
  855. /package/dist/{maf-A4PVW5V2.js.map → maf-42UFYSL4.js.map} +0 -0
  856. /package/dist/{maftimeline-QMX3HOAU.js.map → maftimeline-M5WYEN62.js.map} +0 -0
  857. /package/dist/{matrix-BGRYRU3T.js.map → matrix-CI76EDHU.js.map} +0 -0
  858. /package/dist/{matrix-GPXTUVCQ.js.map → matrix-WJZKA6VR.js.map} +0 -0
  859. /package/dist/{matrix.cells-C6OY7F5T.js.map → matrix.cells-ZFKVIPDC.js.map} +0 -0
  860. /package/dist/{matrix.config-Z5ZGHXDV.js.map → matrix.config-24TFHBEM.js.map} +0 -0
  861. /package/dist/{matrix.data-WB26I3TF.js.map → matrix.data-NCGZPNWR.js.map} +0 -0
  862. /package/dist/{matrix.groups-C2V2CV4A.js.map → matrix.groups-XQJTGM6M.js.map} +0 -0
  863. /package/dist/{matrix.integration.spec-3COAXQBV.js.map → matrix.integration.spec-OGXZUDE6.js.map} +0 -0
  864. /package/dist/{matrix.interactivity-NGHIQR3A.js.map → matrix.interactivity-ZOOTPNSW.js.map} +0 -0
  865. /package/dist/{matrix.layout-NYIOESGN.js.map → matrix.layout-5J2YENK3.js.map} +0 -0
  866. /package/dist/{matrix.legend-Q5HHWP5Q.js.map → matrix.legend-U36VCS46.js.map} +0 -0
  867. /package/dist/{matrix.renderers-GLXZARIP.js.map → matrix.renderers-4KFE7ZVR.js.map} +0 -0
  868. /package/dist/{matrix.serieses-LDQEPXPD.js.map → matrix.serieses-AW7XBXLJ.js.map} +0 -0
  869. /package/dist/{matrix.sort-44TQNRIX.js.map → matrix.sort-7PMECLOE.js.map} +0 -0
  870. /package/dist/{matrix.sort.unit.spec-T3BDWJ3Z.js.map → matrix.sort.unit.spec-GIA2YOTQ.js.map} +0 -0
  871. /package/dist/{matrix.sorterUi-6Y4YBQYL.js.map → matrix.sorterUi-J6PRUT6J.js.map} +0 -0
  872. /package/dist/{matrix.sorterUi.unit.spec-NHUYNMNU.js.map → matrix.sorterUi.unit.spec-OPGKZZL6.js.map} +0 -0
  873. /package/dist/{matrix.unit.spec-C7IRIBN6.js.map → matrix.unit.spec-7UIVVR4T.js.map} +0 -0
  874. /package/dist/{mavb-E37LI73X.js.map → mavb-MSYUMT6W.js.map} +0 -0
  875. /package/dist/{mds.fimo-YTGX7VEN.js.map → mds.fimo-OYEAQP37.js.map} +0 -0
  876. /package/dist/{mds.samplescatterplot-FFGGJSI3.js.map → mds.samplescatterplot-EXISSRQQ.js.map} +0 -0
  877. /package/dist/{mds.survivalplot-NCWRXXV4.js.map → mds.survivalplot-SZST6BLN.js.map} +0 -0
  878. /package/dist/{multivalue-N7A2PU5K.js.map → multivalue-YDE7L75Y.js.map} +0 -0
  879. /package/dist/{numericDictTermCluster-AKQKRBQH.js.map → numericDictTermCluster-5AKP6ICC.js.map} +0 -0
  880. /package/dist/{oncomatrix-QPVGACMF.js.map → oncomatrix-2OEIYWR6.js.map} +0 -0
  881. /package/dist/{oncomatrix.spec-6L2NDN2G.js.map → oncomatrix.spec-CXQW4JWU.js.map} +0 -0
  882. /package/dist/{plot.2dvaf-6TLON77B.js.map → plot.2dvaf-LN7A3NNC.js.map} +0 -0
  883. /package/dist/{plot.app-VM273TXU.js.map → plot.app-YIQOY2Z7.js.map} +0 -0
  884. /package/dist/{plot.barplot-IQTZURHK.js.map → plot.barplot-HF2J25XP.js.map} +0 -0
  885. /package/dist/{plot.boxplot-WEXB6HII.js.map → plot.boxplot-YJH4L27U.js.map} +0 -0
  886. /package/dist/{plot.brainImaging-REGSSBHV.js.map → plot.brainImaging-PS4TRSPI.js.map} +0 -0
  887. /package/dist/{plot.disco-F25Z3FQL.js.map → plot.disco-BN5RNZ6Q.js.map} +0 -0
  888. /package/dist/{plot.ssgq-CRRK26RS.js.map → plot.ssgq-N2HTOIY3.js.map} +0 -0
  889. /package/dist/{plot.vaf2cov-WCNPZKXK.js.map → plot.vaf2cov-6AOHRUQ2.js.map} +0 -0
  890. /package/dist/{polar2-MH5GPXHJ.js.map → polar2-TC5OEJRE.js.map} +0 -0
  891. /package/dist/{profileForms-2YX2OYDI.js.map → profileForms-5WV2TSBB.js.map} +0 -0
  892. /package/dist/{profilePlot-FUTMZ2PP.js.map → profilePlot-OJLLW44P.js.map} +0 -0
  893. /package/dist/{pseudbulk.unit.spec-S7FDL3IX.js.map → pseudbulk.unit.spec-RAYRGN6C.js.map} +0 -0
  894. /package/dist/{pseudobulk-A3LB23N2.js.map → pseudobulk-ADHAYVSQ.js.map} +0 -0
  895. /package/dist/{qualitative-5VJRMF4S.js.map → qualitative-JXEI3IYC.js.map} +0 -0
  896. /package/dist/{radar2-2SJX4ZXN.js.map → radar2-BWTKSTT3.js.map} +0 -0
  897. /package/dist/{radarFacility2-7FPO34JS.js.map → radarFacility2-WIRSKTDG.js.map} +0 -0
  898. /package/dist/{rememberedGvQ.unit.spec-WOQVPQ75.js.map → rememberedGvQ.unit.spec-N43O4YTF.js.map} +0 -0
  899. /package/dist/{render-ZLA2RRBP.js.map → render-J7WOYBOL.js.map} +0 -0
  900. /package/dist/{report-VCE6RILD.js.map → report-DRPCXX2B.js.map} +0 -0
  901. /package/dist/{sampleView-QYTX4OLI.js.map → sampleView-BV6BQGGQ.js.map} +0 -0
  902. /package/dist/{samplelst-7NGH3SUM.js.map → samplelst-ZD63EYO7.js.map} +0 -0
  903. /package/dist/{samplematrix-SNAR6IBB.js.map → samplematrix-ZZ3DVELU.js.map} +0 -0
  904. /package/dist/{sc-2JETYAI4.js.map → sc-MUI43YTB.js.map} +0 -0
  905. /package/dist/{scatter-GHBQM2RR.js.map → scatter-7B44HTKN.js.map} +0 -0
  906. /package/dist/{scatter-D7VZOBEE.js.map → scatter-UEDVIE4Y.js.map} +0 -0
  907. /package/dist/{selectGenomeWithTklst-BD4GMGX3.js.map → selectGenomeWithTklst-WGOKGVZ5.js.map} +0 -0
  908. /package/dist/{singleCellCellType-XHLOJVVC.js.map → singleCellCellType-Z7OXK7PI.js.map} +0 -0
  909. /package/dist/{singleCellCellType.unit.spec-LCLR3IOD.js.map → singleCellCellType.unit.spec-IIOVCCJQ.js.map} +0 -0
  910. /package/dist/{singleCellGeneExpression-JRBONI5C.js.map → singleCellGeneExpression-LYZAIJ2Z.js.map} +0 -0
  911. /package/dist/{singleCellGeneExpression.unit.spec-Z2KSVCIG.js.map → singleCellGeneExpression.unit.spec-67AAWZTG.js.map} +0 -0
  912. /package/dist/{singleCellPlot-4462CQHF.js.map → singleCellPlot-TXPYQLSH.js.map} +0 -0
  913. /package/dist/{singlecell-SO3B5KJ7.js.map → singlecell-22OG6HNI.js.map} +0 -0
  914. /package/dist/{singlecell-CDUQ6MTO.js.map → singlecell-7TBALI2S.js.map} +0 -0
  915. /package/dist/{snp-YE2MXKJO.js.map → snp-3U2G3Z57.js.map} +0 -0
  916. /package/dist/{snp.unit.spec-MT57TGGQ.js.map → snp.unit.spec-BMBBUBYD.js.map} +0 -0
  917. /package/dist/{snplocus-RSNKWY63.js.map → snplocus-SSVZDIQV.js.map} +0 -0
  918. /package/dist/{spliceevent.a53ss.diagram-6N6YGYV7.js.map → spliceevent.a53ss.diagram-FK7CN4AU.js.map} +0 -0
  919. /package/dist/{spliceevent.exonskip.diagram-LMNUS4XV.js.map → spliceevent.exonskip.diagram-EFLGV3O4.js.map} +0 -0
  920. /package/dist/{spliceevent.noeventdiagram-LTBH4YD5.js.map → spliceevent.noeventdiagram-2DYO7CCZ.js.map} +0 -0
  921. /package/dist/{ssGSEA-DPK4PDM2.js.map → ssGSEA-52LWBQJP.js.map} +0 -0
  922. /package/dist/{ssGSEA.unit.spec-K2SA7ME7.js.map → ssGSEA.unit.spec-3JV6WHUQ.js.map} +0 -0
  923. /package/dist/{stattable-PR47XT4F.js.map → stattable-RLMYQ4G6.js.map} +0 -0
  924. /package/dist/{summarizeCnvGeneexp-YZEMDLES.js.map → summarizeCnvGeneexp-QPRYAKC2.js.map} +0 -0
  925. /package/dist/{summarizeGeneexpSurvival-3TXV6ZNI.js.map → summarizeGeneexpSurvival-RWVQXEKB.js.map} +0 -0
  926. /package/dist/{summarizeMutationCnv-EBWSEHWJ.js.map → summarizeMutationCnv-DW5F6NUJ.js.map} +0 -0
  927. /package/dist/{summarizeMutationDiagnosis-FXA25W3O.js.map → summarizeMutationDiagnosis-5FOQ7CHI.js.map} +0 -0
  928. /package/dist/{summarizeMutationSurvival-MR4AOMNS.js.map → summarizeMutationSurvival-4UKB4EVO.js.map} +0 -0
  929. /package/dist/{summary-4C6LGTMF.js.map → summary-TYC6QNT4.js.map} +0 -0
  930. /package/dist/{summary.integration.spec-Y6JLH7NH.js.map → summary.integration.spec-5GLJJZNM.js.map} +0 -0
  931. /package/dist/{summaryInput-NWT2DXWU.js.map → summaryInput-4IJGKW4P.js.map} +0 -0
  932. /package/dist/{sunburst-266MA7E2.js.map → sunburst-G7DGATWP.js.map} +0 -0
  933. /package/dist/{survival-CAZCIY2N.js.map → survival-MKNABJPU.js.map} +0 -0
  934. /package/dist/{svgraph-OFUESREM.js.map → svgraph-VB7JWWR5.js.map} +0 -0
  935. /package/dist/{svmr-PVH42MY4.js.map → svmr-VLQIO2U5.js.map} +0 -0
  936. /package/dist/{table-C2SICFZV.js.map → table-EAXMDWOY.js.map} +0 -0
  937. /package/dist/{termCollection-TGYDI7NP.js.map → termCollection-5LG7ICQY.js.map} +0 -0
  938. /package/dist/{termCollection-H4RL5WJG.js.map → termCollection-SB6MWLFK.js.map} +0 -0
  939. /package/dist/{termCollection.unit.spec-JSALS7GL.js.map → termCollection.unit.spec-H5ITGTR3.js.map} +0 -0
  940. /package/dist/{termCollectionFractionSelection-YJVDNV4I.js.map → termCollectionFractionSelection-2XZSTDCQ.js.map} +0 -0
  941. /package/dist/{termCollectionFractionSelection.unit.spec-4GM7P4ZW.js.map → termCollectionFractionSelection.unit.spec-BIO7V6KA.js.map} +0 -0
  942. /package/dist/{tk-RZCPSHJG.js.map → tk-TRWYZLQ2.js.map} +0 -0
  943. /package/dist/{tk-SNTRA5CC.js.map → tk-VZI5HNSX.js.map} +0 -0
  944. /package/dist/{tp.ui-2W4K3XH6.js.map → tp.ui-J5SNNAT3.js.map} +0 -0
  945. /package/dist/{tvs.dt-GIPVC3R6.js.map → tvs.dt-6YHFJPER.js.map} +0 -0
  946. /package/dist/{tvs.dtcnv.categorical-TEYAS4OU.js.map → tvs.dtcnv.categorical-WTIE63GM.js.map} +0 -0
  947. /package/dist/{tvs.dtcnv.continuous-VQRATYPZ.js.map → tvs.dtcnv.continuous-OCMKGTF5.js.map} +0 -0
  948. /package/dist/{tvs.dtfusion-P2KF5Z4H.js.map → tvs.dtfusion-CA23UNM3.js.map} +0 -0
  949. /package/dist/{tvs.dtitd-TM6UROSH.js.map → tvs.dtitd-VSYMR3OD.js.map} +0 -0
  950. /package/dist/{tvs.dtsnvindel-FZXC23NF.js.map → tvs.dtsnvindel-YBNO3CYF.js.map} +0 -0
  951. /package/dist/{tvs.dtsv-Y5QEJPYG.js.map → tvs.dtsv-S743GBB5.js.map} +0 -0
  952. /package/dist/{tvs.numeric-3UXW4JHJ.js.map → tvs.numeric-22AHXO5K.js.map} +0 -0
  953. /package/dist/{tvs.samplelst-MLAFPFER.js.map → tvs.samplelst-XAJO4EM6.js.map} +0 -0
  954. /package/dist/{tvs.termCollection-ZQQDKESH.js.map → tvs.termCollection-QOVJGAUC.js.map} +0 -0
  955. /package/dist/{vocabulary-JRUZPHMG.js.map → vocabulary-6EADTHP3.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../plots/proteinView.tiles.ts"],
4
+ "sourcesContent": ["import { Menu, table2col } from '#dom'\nimport { axisstyle, newpane } from '#src/client'\nimport { dofetch3 } from '#common/dofetch'\nimport type { DapConcordance } from '#types'\nimport {\n\tloadBrainAssets,\n\trenderBrainSvg,\n\tmakeDiseaseTabs,\n\tmakeBrainFcScale,\n\tbrainFillByRegion,\n\tbrainTooltipByRegion,\n\tBRAIN_P_THRESHOLD,\n\ttype BrainAssets\n} from './brainRegions.svg'\nimport { axisBottom, axisLeft, scaleLinear, scaleBand, scalePoint, scaleSqrt, line as d3line, select } from 'd3'\nimport { NumericModes } from '#shared/terms.js'\nimport { roundValue } from '#shared/roundValue.js'\n\n/*********************************************************************\n * proteinView study tiles\n *\n * Each tile answers one question about the searched protein and renders\n * only when the underlying study data supports it (tile-per-plot design).\n * Nothing about the dataset is hardcoded here: the tile list (titles,\n * order, which cohorts feed which tile) and the vocabulary (diseases,\n * models, cell types) come from queries.proteome.proteinView in the\n * dataset file; cohort metadata (disease/model/cellType/ageGroup/\n * brainRegion) from the per-cohort `catalog` blocks that termdb.config\n * ships to the client. This file only holds the renderers.\n *\n * Tiles are gene-level: when a cohort measured several isoforms\n * (accessions), the most significant one represents the cohort, matching\n * how the source papers report proteins (protein-group level, by gene\n * symbol). The full per-isoform detail stays in the overview volcano and\n * the PTM track.\n *********************************************************************/\n\n/************ dataset config accessors ************/\n\ntype CohortMatch = {\n\torganism?: string\n\tassay?: string\n\tcatalog?: { [k: string]: string }\n\twith?: string[]\n\twithout?: string[]\n}\ntype PairSide = CohortMatch & { label: string; ageVaries?: boolean }\nexport type TileCfg = {\n\tkey: string\n\ttitle: string\n\tsubtitle: string\n\tcohortMatch?: CohortMatch\n\txLabel?: string\n\tyLabel?: string\n\tpairs?: { key: string; label: string; x: PairSide; y: PairSide }[]\n\t/** key of another tile whose entries are the reference side of a paired tile\n\t * (e.g. the whole-proteome tile for the insoluble dumbbell), matched by cohort name */\n\treferenceTile?: string\n\tdefaultAge?: string\n\tnote?: string\n}\n\nexport function getProteinViewConfig(self: any): any {\n\treturn self?.app?.vocabApi?.termdbConfig?.queries?.proteome?.proteinView || {}\n}\nexport function getTileConfigs(self: any): TileCfg[] {\n\treturn getProteinViewConfig(self).tiles || []\n}\nexport function getTileConfig(self: any, key: string): TileCfg | undefined {\n\treturn getTileConfigs(self).find(t => t.key === key)\n}\n// disease code \u2192 {name,label?,specificityControl?}; key order = axis order\nfunction diseaseCfg(self: any): { [code: string]: { name: string; label?: string; specificityControl?: boolean } } {\n\treturn getProteinViewConfig(self).diseases || {}\n}\nconst diseaseOrder = (self: any) => Object.keys(diseaseCfg(self))\nconst diseaseLabel = (self: any, d: string) => diseaseCfg(self)[d]?.label || d\nconst isSpecificityControl = (self: any, d: string) => !!diseaseCfg(self)[d]?.specificityControl\nconst modelOrder = (self: any): string[] => Object.keys(getProteinViewConfig(self).models || {})\nconst modelColor = (self: any, m: string) => getProteinViewConfig(self).models?.[m]?.color || SINGLE_MODEL_COLOR\nconst cellTypeCfg = (self: any): { [ct: string]: { note?: string } } => getProteinViewConfig(self).cellTypes || {}\nconst proteomeLabel = (self: any, organism: string, assay: string) =>\n\tself?.app?.vocabApi?.termdbConfig?.queries?.proteome?.organisms?.[organism]?.assays?.[assay]?.proteomeLabel || assay\n\n// sort keys by their position in a configured order; unknown keys keep\n// their relative order after the known ones\nexport function orderBy(keys: string[], order: string[]) {\n\tconst rank = (k: string) => (order.indexOf(k) === -1 ? order.length : order.indexOf(k))\n\treturn [...keys].sort((a, b) => rank(a) - rank(b))\n}\n\n// does a cohort (by organism/assay + catalog) satisfy a cohortMatch rule\nexport function cohortMatches(m: CohortMatch | undefined, organism: string, assay: string, catalog: any): boolean {\n\tif (!m) return false\n\tif (m.organism && m.organism !== organism) return false\n\tif (m.assay && m.assay !== assay) return false\n\tconst c = catalog || {}\n\tfor (const k in m.catalog || {}) if (c[k] !== m.catalog![k]) return false\n\tfor (const k of m.with || []) if (!c[k]) return false\n\tfor (const k of m.without || []) if (c[k]) return false\n\treturn true\n}\n\nconst SIG_P = 0.05\n\n// leading integer of an age-group label (\"6 months\" \u2192 6); null when absent\nexport function parseAge(ageGroup: string | undefined): number | null {\n\tconst n = parseInt(ageGroup || '')\n\treturn Number.isFinite(n) ? n : null\n}\nconst byAge = (a: string, b: string) => (parseAge(a) ?? 0) - (parseAge(b) ?? 0)\n\n// memoized fetch shared by the tile faces and their expanded panes: one\n// in-flight promise per key; a rejection is not cached so a retry refetches\nconst fetchCache = new Map<string, Promise<any>>()\nfunction cachedFetch<T>(key: string, load: () => Promise<T>): Promise<T> {\n\tif (!fetchCache.has(key)) {\n\t\tconst p = load()\n\t\tp.catch(() => fetchCache.delete(key))\n\t\tfetchCache.set(key, p)\n\t}\n\treturn fetchCache.get(key)!\n}\nconst vocabKey = (self: any) => `${self.app.opts.state.vocab.genome}|${self.app.opts.state.vocab.dslabel}`\n\n// geometry scaling: tile faces render compact, the expanded pane large.\n// scaleX compresses widths further than heights so charts fit narrow cards;\n// it defaults to scale when unset.\nexport type TileRenderOpts = { scale?: number; scaleX?: number; expanded?: boolean }\nconst TILE_FACE_SCALE = 0.67\nconst TILE_FACE_SCALE_X = 0.45\nconst EXPANDED_SCALE = 1.7\n// uniform card footprint so the grid reads as even rows\nconst CARD_W = 230\nconst CARD_MIN_H = 235\n\nconst SINGLE_MODEL_COLOR = '#6b7280'\nconst ND_COLOR = '#4263eb'\nconst PSY_COLOR = '#9ca3af'\nconst WHOLE_COLOR = '#2166ac'\nconst INSOLUBLE_COLOR = '#b2182b'\nconst REFERENCE_COLOR = '#111827'\n// diverging fold-change colors, same semantics as cellTypeBubbleHeatmap\nconst FC_NEG_COLOR = '#762a83'\nconst FC_ZERO_COLOR = '#f7f7f7'\nconst FC_POS_COLOR = '#2166ac'\n\nexport function getLog2Ratio(foldChange: number) {\n\tif (!Number.isFinite(foldChange) || foldChange <= 0) return null\n\treturn Math.log2(foldChange)\n}\n\nexport function launchViolinPlot(\n\tself: any,\n\torganismName: string,\n\tassayName: string,\n\tcohortName: string,\n\tisoform: string\n) {\n\tconst selectedProtein = self.state.config?.tw?.term\n\tif (!selectedProtein) throw new Error('proteinView: selected protein term is missing')\n\n\tconst action: any = {\n\t\ttype: 'plot_create',\n\t\tconfig: {\n\t\t\tchartType: 'summary'\n\t\t}\n\t}\n\taction.config.assayCohortTitle = `${organismName} ${assayName}: ${cohortName}`\n\taction.config.proteomeDetails = { organism: organismName, assay: assayName, cohort: cohortName }\n\n\tconst termdbConfig = self.app.vocabApi.termdbConfig\n\tconst proteomeOverlayTerm = termdbConfig?.queries?.proteome?.organisms?.[organismName]?.overlayTerm\n\tconst t = structuredClone(selectedProtein)\n\tt.name = `${t.name}: ${isoform}`\n\tt.dataTypeDetails = { organism: organismName, assay: assayName, cohort: cohortName }\n\taction.config.term = { term: t, q: { mode: NumericModes.continuous } }\n\n\tif (proteomeOverlayTerm) {\n\t\taction.config.term2 = { term: structuredClone(proteomeOverlayTerm), q: {} }\n\t}\n\n\tself.app.dispatch(action)\n}\n\nexport type TileEntry = {\n\torganism: string\n\tassayName: string\n\tcohortName: string\n\tdisease?: string\n\tuniqueIdentifier: string\n\tproteinAccession: string\n\tlog2fc: number | null\n\t/** FDR (BH-adjusted p) from the cohort's DAP file */\n\tfdr: number | null\n\ttestedN: number\n\tcontrolN: number\n\tisoformCount: number // how many accessions this cohort measured; entry is the most significant\n\tcatalog: any\n\t// set only for PTM-site entries (the PTM summary card face)\n\tptmType?: string\n\tmodSites?: string\n}\n\nexport type TileData = {\n\t/** tile key \u2192 its cohort entries, routed by each tile's cohortMatch */\n\tbyTile: { [tileKey: string]: TileEntry[] }\n\tisoformCount: number\n\tptmSiteCount: number\n\tcohortCount: number\n}\n\nconst entries = (td: TileData, key: string): TileEntry[] => td.byTile[key] || []\n\n// per-cohort catalog metadata (disease/model/cellType/ageGroup/\u2026) that\n// termdb.config ships to the client for the studyCatalog plot\nexport function catalogForEntry(self: any, e: any) {\n\treturn self.app.vocabApi.termdbConfig?.queries?.proteome?.organisms?.[e.organism]?.assays?.[e.assayName]?.cohorts?.[\n\t\te.cohortName\n\t]?.catalog\n}\n\n// One representative (most significant, valid fold change) entry per\n// cohort; the source papers report at protein-group level, so tiles do too.\nexport function prepareTileData(data: any, self: any): TileData {\n\tconst catalogFor = (e: any) => catalogForEntry(self, e)\n\n\tconst accessions = new Set<string>()\n\tlet ptmSiteCount = 0\n\n\t// collapse to one representative entry per (organism, assay, cohort)\n\tconst byCohort = new Map<string, { best: any; count: number }>()\n\tfor (const e of data?.cohorts || []) {\n\t\tif (e.PTMType) {\n\t\t\tptmSiteCount++\n\t\t\tcontinue\n\t\t}\n\t\taccessions.add(e.proteinAccession)\n\t\tconst log2fc = getLog2Ratio(e.foldChange)\n\t\tif (log2fc === null) continue\n\t\tconst key = `${e.organism}|${e.assayName}|${e.cohortName}`\n\t\tconst p = Number(e.fdr)\n\t\tconst pRank = Number.isFinite(p) && p > 0 ? p : Infinity\n\t\tconst cur = byCohort.get(key)\n\t\tif (!cur) byCohort.set(key, { best: { e, pRank }, count: 1 })\n\t\telse {\n\t\t\tcur.count++\n\t\t\tif (pRank < cur.best.pRank) cur.best = { e, pRank }\n\t\t}\n\t}\n\n\tconst tiles = getTileConfigs(self)\n\tconst td: TileData = {\n\t\tbyTile: Object.fromEntries(tiles.map(t => [t.key, []])),\n\t\tisoformCount: accessions.size,\n\t\tptmSiteCount,\n\t\tcohortCount: byCohort.size\n\t}\n\n\tfor (const { best, count } of byCohort.values()) {\n\t\tconst e = best.e\n\t\tconst catalog = catalogFor(e)\n\t\tif (!catalog) continue // cohort not in the study catalog; volcano still shows it\n\t\tconst p = Number(e.fdr)\n\t\tconst entry: TileEntry = {\n\t\t\torganism: e.organism,\n\t\t\tassayName: e.assayName,\n\t\t\tcohortName: e.cohortName,\n\t\t\tdisease: catalog.disease || e.disease,\n\t\t\tuniqueIdentifier: e.uniqueIdentifier,\n\t\t\tproteinAccession: e.proteinAccession,\n\t\t\tlog2fc: getLog2Ratio(e.foldChange),\n\t\t\tfdr: Number.isFinite(p) && p > 0 ? p : null,\n\t\t\ttestedN: Number(e.testedN) || 0,\n\t\t\tcontrolN: Number(e.controlN) || 0,\n\t\t\tisoformCount: count,\n\t\t\tcatalog\n\t\t}\n\t\t// first tile (in dataset order) whose rule the cohort satisfies\n\t\tconst tile = tiles.find(t => cohortMatches(t.cohortMatch, e.organism, e.assayName, catalog))\n\t\tif (tile) td.byTile[tile.key].push(entry)\n\t}\n\n\treturn td\n}\n\n/************ card + interaction scaffolding ************/\n\nexport function makeTileGrid(holder: any) {\n\t// default align-items (stretch) equalizes card heights within each row.\n\t// white-space is reset because the mass plot holder sets nowrap (for\n\t// horizontally-scrolling plots), which would keep card text from wrapping.\n\treturn holder\n\t\t.append('div')\n\t\t.style('display', 'flex')\n\t\t.style('flex-wrap', 'wrap')\n\t\t.style('gap', '14px')\n\t\t.style('margin-top', '10px')\n\t\t.style('white-space', 'normal')\n}\n\nexport function makeTileCard(\n\tgrid: any,\n\topts: {\n\t\ttitle: string\n\t\tsubtitle?: string\n\t\tfullWidth?: boolean\n\t\t// fixed footprint (CARD_W \u00D7 \u2265CARD_MIN_H) so tile cards line up evenly\n\t\tuniform?: boolean\n\t\t// greyed placeholder card (tile exists in the atlas but has no data here)\n\t\tdisabled?: boolean\n\t\t// when set, an expand button in the card header opens the larger view\n\t\tonExpand?: () => void\n\t}\n) {\n\tconst card = grid\n\t\t.append('div')\n\t\t.style('border', opts.disabled ? '1px dashed #e5e7eb' : '1px solid #e5e7eb')\n\t\t.style('border-radius', '8px')\n\t\t.style('padding', '10px 12px')\n\t\t.style('background', opts.disabled ? '#f9fafb' : '#fff')\n\tif (opts.fullWidth) card.style('flex', '1 1 100%')\n\tif (opts.uniform) {\n\t\tcard\n\t\t\t.style('width', `${CARD_W}px`)\n\t\t\t.style('min-height', `${CARD_MIN_H}px`)\n\t\t\t.style('display', 'flex')\n\t\t\t.style('flex-direction', 'column')\n\t}\n\n\tconst header = card\n\t\t.append('div')\n\t\t.style('display', 'flex')\n\t\t.style('align-items', 'baseline')\n\t\t.style('gap', '8px')\n\t\t.style('flex-wrap', 'wrap')\n\theader\n\t\t.append('span')\n\t\t.style('font-weight', '600')\n\t\t.style('font-size', '.9em')\n\t\t.style('min-width', '0') // let long titles wrap instead of overflowing the card\n\t\t.style('color', opts.disabled ? '#9ca3af' : '#111827')\n\t\t.text(opts.title)\n\tif (opts.onExpand) {\n\t\theader\n\t\t\t.append('span')\n\t\t\t.attr('title', 'Expand')\n\t\t\t.attr('role', 'button')\n\t\t\t.attr('tabindex', '0')\n\t\t\t.attr('aria-label', `Expand ${opts.title}`)\n\t\t\t.style('margin-left', 'auto')\n\t\t\t.style('cursor', 'pointer')\n\t\t\t.style('color', '#9ca3af')\n\t\t\t.style('font-size', '1em')\n\t\t\t.style('line-height', '1')\n\t\t\t.text('\u2922')\n\t\t\t.on('mouseover', function (this: any) {\n\t\t\t\tselect(this).style('color', '#374151')\n\t\t\t})\n\t\t\t.on('mouseout', function (this: any) {\n\t\t\t\tselect(this).style('color', '#9ca3af')\n\t\t\t})\n\t\t\t.on('click', opts.onExpand)\n\t\t\t.on('keydown', (event: KeyboardEvent) => {\n\t\t\t\tif (event.key === 'Enter' || event.key === ' ') {\n\t\t\t\t\tevent.preventDefault()\n\t\t\t\t\topts.onExpand?.()\n\t\t\t\t}\n\t\t\t})\n\t}\n\tif (opts.subtitle) {\n\t\tcard\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.75em')\n\t\t\t.style('color', '#6b7280')\n\t\t\t.style('margin', '2px 0 4px 0')\n\t\t\t.text(opts.subtitle)\n\t}\n\treturn card.append('div')\n}\n\nconst tileClickMenu = new Menu({ padding: '0px' })\n\n// Expanded-tile panes need an explicit z-index: app chrome such as the\n// sandbox header carries z-index 99, which would paint over a z-auto pane's\n// top edge. Shared menus go one higher so tooltips stay above panes. When\n// the embedder configures base_zindex, newpane/Menu already set their own\n// inline z-index and these defaults stay out of the way.\nexport const TILE_PANE_ZINDEX = 100\n\n// Re-append the shared menus so tooltips stay above an expanded-tile pane in\n// DOM order too (also after the pane is dragged, which re-appends the pane),\n// and give them a z-index above the pane's.\nexport function raiseSharedMenus(self: any) {\n\tfor (const m of [self?.dom?.tip, tileClickMenu]) {\n\t\tconst n = m?.d?.node?.()\n\t\tif (!n) continue\n\t\tif (!n.style.zIndex) n.style.zIndex = String(TILE_PANE_ZINDEX + 1)\n\t\tif (n.parentNode === document.body && n !== document.body.lastChild) document.body.appendChild(n)\n\t}\n}\n\nfunction entryTipTable(entry: TileEntry, holder: any) {\n\tconst tbl = table2col({ holder: holder.append('table') })\n\ttbl.addRow('Sample set', entry.cohortName)\n\tconst c = entry.catalog || {}\n\tif (entry.disease) tbl.addRow('Disease', entry.disease)\n\tif (c.model) tbl.addRow('Model', c.model)\n\tif (c.cellType) tbl.addRow('Cell type', c.cellType)\n\tif (c.ageGroup) tbl.addRow('Age group', c.ageGroup)\n\tif (c.brainRegion) tbl.addRow('Brain region', c.brainRegion)\n\tif (entry.ptmType) tbl.addRow('PTM type', entry.ptmType)\n\tif (entry.modSites) tbl.addRow('Modified site', entry.modSites)\n\ttbl.addRow('Assay', entry.assayName)\n\ttbl.addRow('log2 fold change', entry.log2fc === null ? 'NA' : roundValue(entry.log2fc, 3))\n\ttbl.addRow('FDR', entry.fdr === null ? 'NA' : entry.fdr.toExponential(2))\n\ttbl.addRow('Case samples', entry.testedN)\n\ttbl.addRow('Control samples', entry.controlN)\n\ttbl.addRow('Protein accession', entry.proteinAccession)\n\tif (entry.isoformCount > 1) tbl.addRow('Note', `most significant of ${entry.isoformCount} isoforms`)\n}\n\n// hover tooltip + click menu (violin launch) for a tile data point\nfunction attachEntryBehavior(shape: any, entry: TileEntry, self: any) {\n\tshape\n\t\t.style('cursor', 'pointer')\n\t\t.on('mouseover', (event: MouseEvent) => {\n\t\t\traiseSharedMenus(self)\n\t\t\tself.dom.tip.clear()\n\t\t\tentryTipTable(entry, self.dom.tip.d)\n\t\t\tself.dom.tip.show(event.clientX, event.clientY)\n\t\t})\n\t\t.on('mouseout', () => self.dom.tip.hide())\n\t\t.on('click', (event: MouseEvent) => {\n\t\t\traiseSharedMenus(self)\n\t\t\tself.dom.tip.hide()\n\t\t\ttileClickMenu.clear()\n\t\t\tconst div = tileClickMenu.d.append('div')\n\t\t\tentryTipTable(entry, div.append('div').style('padding', '5px'))\n\t\t\tdiv\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t.text('Violin plot')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\ttileClickMenu.hide()\n\t\t\t\t\tlaunchViolinPlot(self, entry.organism, entry.assayName, entry.cohortName, entry.uniqueIdentifier)\n\t\t\t\t})\n\t\t\ttileClickMenu.show(event.clientX, event.clientY)\n\t\t})\n}\n\nconst isSig = (e: TileEntry) => e.fdr !== null && e.fdr < SIG_P\n\nfunction drawMarker(g: any, x: number, y: number, color: string, sig: boolean, r = 4.5) {\n\treturn g\n\t\t.append('circle')\n\t\t.attr('cx', x)\n\t\t.attr('cy', y)\n\t\t.attr('r', r)\n\t\t.attr('fill', sig ? color : '#fff')\n\t\t.attr('fill-opacity', sig ? 0.9 : 1)\n\t\t.attr('stroke', color)\n\t\t.attr('stroke-width', 1.5)\n}\n\n// y (or x) domain for log2FC values: always includes 0, padded\nfunction fcDomain(values: number[]): [number, number] {\n\tlet min = Math.min(0, ...values)\n\tlet max = Math.max(0, ...values)\n\tconst span = Math.max(0.4, max - min)\n\tconst pad = span * 0.15\n\tif (min < 0) min -= pad\n\tmax += pad\n\tif (min === 0) min = -span * 0.05 // keep the zero line off the plot edge\n\treturn [min, max]\n}\n\nfunction addSigFootnote(body: any) {\n\tbody\n\t\t.append('div')\n\t\t.style('font-size', '.7em')\n\t\t.style('color', '#9ca3af')\n\t\t.style('margin-top', '2px')\n\t\t.text(`filled: FDR < ${SIG_P}; hollow: not significant`)\n}\n\nfunction drawZeroLine(g: any, x1: number, y1: number, x2: number, y2: number) {\n\tg.append('line')\n\t\t.attr('x1', x1)\n\t\t.attr('y1', y1)\n\t\t.attr('x2', x2)\n\t\t.attr('y2', y2)\n\t\t.attr('stroke', 'black')\n\t\t.attr('stroke-dasharray', '4 3')\n\t\t.attr('stroke-opacity', 0.35)\n}\n\nfunction styledAxis(g: any, axis: any, tickFontSize?: string | null) {\n\tconst a = g.call(axis)\n\taxisstyle({ axis: a, color: 'black', showline: true })\n\t// compact tile faces shrink tick labels so categorical axes don't collide\n\tif (tickFontSize) a.selectAll('text').style('font-size', tickFontSize)\n\treturn a\n}\n\n// slant categorical x-tick labels on very narrow charts so they don't collide\nfunction rotateXTicks(axisG: any) {\n\taxisG\n\t\t.selectAll('text')\n\t\t.attr('transform', 'rotate(-38)')\n\t\t.attr('text-anchor', 'end')\n\t\t.attr('dx', '-2px')\n\t\t.attr('dy', '5px')\n}\n\nfunction yAxisTitle(svg: any, innerH: number, marginTop: number, text: string) {\n\tsvg\n\t\t.append('text')\n\t\t.attr('transform', `translate(11,${marginTop + innerH / 2}) rotate(-90)`)\n\t\t.attr('text-anchor', 'middle')\n\t\t.style('font-size', '11px')\n\t\t.style('fill', '#374151')\n\t\t.text(text)\n}\n\n/************ tile renderers ************/\n\n// Tile \u2014 cross-disease profile: lollipop of log2FC per disease;\n// the blue side answers \"this protein changes in which diseases?\"\n// BD and SCZ are psychiatric disorders, while the others are neurodegenerative diseases.\n// the grey side (diseases flagged specificityControl in the dataset config,\n// e.g. psychiatric controls) answers \"is the change neurodegeneration-specific or a generic brain-disease signal?\"\nfunction renderCrossDiseaseTile(body: any, td: TileData, self: any, cfg: TileCfg, opts: TileRenderOpts = {}) {\n\tconst k = opts.scale || 1\n\tconst kx = opts.scaleX ?? k\n\tconst mr = 4.5 * Math.sqrt(k)\n\tconst tickFont = k < 1 ? '8.5px' : null\n\tconst byDisease = new Map<string, TileEntry>()\n\t// several cohorts may share a disease: show the most significant one and say so\n\tconst multiCohort = new Set<string>()\n\tfor (const e of entries(td, cfg.key)) {\n\t\tconst d = e.disease || e.cohortName\n\t\tconst cur = byDisease.get(d)\n\t\tif (cur) multiCohort.add(d)\n\t\tif (!cur || (e.fdr ?? Infinity) < (cur.fdr ?? Infinity)) byDisease.set(d, e)\n\t}\n\tconst diseases = orderBy([...byDisease.keys()], diseaseOrder(self))\n\tconst isControl = (d: string) => isSpecificityControl(self, d)\n\n\tconst margin = { top: 12, right: 10, bottom: 34, left: 46 }\n\tconst innerW = Math.max(200, diseases.length * 38) * kx\n\tconst innerH = 150 * k\n\tconst svg = body\n\t\t.append('svg')\n\t\t.attr('width', innerW + margin.left + margin.right)\n\t\t.attr('height', innerH + margin.top + margin.bottom)\n\tconst g = svg.append('g').attr('transform', `translate(${margin.left},${margin.top})`)\n\n\tconst x = scaleBand().domain(diseases).range([0, innerW]).padding(0.4)\n\tconst y = scaleLinear()\n\t\t.domain(fcDomain(diseases.map(d => byDisease.get(d)!.log2fc as number)))\n\t\t.range([innerH, 0])\n\n\tconst xAxisG = styledAxis(g.append('g').attr('transform', `translate(0,${innerH})`), axisBottom(x), tickFont)\n\tif (kx < 0.6) rotateXTicks(xAxisG)\n\tstyledAxis(g.append('g'), axisLeft(y).ticks(4), tickFont)\n\tdrawZeroLine(g, 0, y(0), innerW, y(0))\n\tyAxisTitle(svg, innerH, margin.top, 'log2FC vs control')\n\n\t// separator before the psychiatric controls\n\tconst firstPsy = diseases.findIndex(isControl)\n\tif (firstPsy > 0) {\n\t\tconst xSep = (x(diseases[firstPsy - 1])! + x.bandwidth() + x(diseases[firstPsy])!) / 2\n\t\tg.append('line')\n\t\t\t.attr('x1', xSep)\n\t\t\t.attr('x2', xSep)\n\t\t\t.attr('y1', 0)\n\t\t\t.attr('y2', innerH)\n\t\t\t.attr('stroke', '#d1d5db')\n\t\t\t.attr('stroke-dasharray', '2 3')\n\t\t// the label needs more room than a narrow face has; the muted grey\n\t\t// dots still mark the group, and the expanded view spells it out\n\t\tif (kx >= 0.6) {\n\t\t\tg.append('text')\n\t\t\t\t.attr('x', (xSep + innerW) / 2)\n\t\t\t\t.attr('y', 9)\n\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t.style('font-size', '9px')\n\t\t\t\t.style('fill', '#9ca3af')\n\t\t\t\t.text(getProteinViewConfig(self).specificityControlLabel || 'controls')\n\t\t}\n\t}\n\n\tfor (const d of diseases) {\n\t\tconst e = byDisease.get(d)!\n\t\tconst cx = x(d)! + x.bandwidth() / 2\n\t\tconst color = isControl(d) ? PSY_COLOR : ND_COLOR\n\t\tg.append('line')\n\t\t\t.attr('x1', cx)\n\t\t\t.attr('x2', cx)\n\t\t\t.attr('y1', y(0))\n\t\t\t.attr('y2', y(e.log2fc as number))\n\t\t\t.attr('stroke', color)\n\t\t\t.attr('stroke-width', 1.5)\n\t\tattachEntryBehavior(drawMarker(g, cx, y(e.log2fc as number), color, isSig(e), mr), e, self)\n\t}\n\n\t// relabel ticks that have a nicer display name\n\tg.selectAll('text').each(function (this: any) {\n\t\tconst t = (this as SVGTextElement).textContent || ''\n\t\tconst l = diseaseLabel(self, t)\n\t\tif (l !== t) (this as SVGTextElement).textContent = l\n\t})\n\n\taddSigFootnote(body)\n\tif (multiCohort.size) {\n\t\tbody\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.7em')\n\t\t\t.style('color', '#9ca3af')\n\t\t\t.text(`${[...multiCohort].map(d => diseaseLabel(self, d)).join(', ')}: several cohorts, most significant shown`)\n\t}\n\tif (opts.expanded) {\n\t\tbody\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.75em')\n\t\t\t.style('color', '#6b7280')\n\t\t\t.style('margin-top', '4px')\n\t\t\t.style('max-width', `${innerW + margin.left + margin.right}px`)\n\t\t\t.text(diseases.map(d => `${diseaseLabel(self, d)} = ${diseaseCfg(self)[d]?.name || d}`).join(' \u00B7 '))\n\t}\n}\n\n// Tile 2 \u2014 whole vs insoluble dumbbell:\n// answers: \"Does this protein accumulate in the insoluble/aggregated fraction beyond any change in its total abundance (is it aggregating)?\"\n// Red far to the right of blue \u2192 the protein piles up in the insoluble fraction much more than its total level rises: the aggregation signature.\nfunction renderInsolubleTile(body: any, td: TileData, self: any, cfg: TileCfg, opts: TileRenderOpts = {}) {\n\tconst k = opts.scale || 1\n\tconst kx = opts.scaleX ?? k\n\tconst mr = 4.5 * Math.sqrt(k)\n\tconst tickFont = k < 1 ? '8.5px' : null\n\tconst wholeByCohort = new Map<string, TileEntry>()\n\t// the reference (whole proteome) side comes from the tile named by cfg.referenceTile\n\tif (cfg.referenceTile) for (const e of entries(td, cfg.referenceTile)) wholeByCohort.set(e.cohortName, e)\n\tconst insol = entries(td, cfg.key)\n\tconst rows = orderBy([...new Set(insol.map(e => e.cohortName))], diseaseOrder(self))\n\n\tconst pairs = rows.map(c => ({\n\t\tcohortName: c,\n\t\twhole: wholeByCohort.get(c) || null,\n\t\tinsoluble: insol.find(e => e.cohortName === c) || null\n\t}))\n\t// legend labels from the assays' proteomeLabel in the dataset config\n\tconst wholeEntry = pairs.find(p => p.whole)?.whole\n\tconst labelOf = (e: TileEntry | null | undefined, fallback: string) =>\n\t\te ? proteomeLabel(self, e.organism, e.assayName) : fallback\n\n\tconst margin = { top: 24, right: 12, bottom: 34, left: 46 }\n\tconst innerW = 240 * kx\n\tconst innerH = Math.max(90, rows.length * 30 * k)\n\tconst svg = body\n\t\t.append('svg')\n\t\t.attr('width', innerW + margin.left + margin.right)\n\t\t.attr('height', innerH + margin.top + margin.bottom)\n\tconst g = svg.append('g').attr('transform', `translate(${margin.left},${margin.top})`)\n\n\tconst values: number[] = []\n\tfor (const p of pairs) {\n\t\tif (p.whole) values.push(p.whole.log2fc as number)\n\t\tif (p.insoluble) values.push(p.insoluble.log2fc as number)\n\t}\n\tconst x = scaleLinear().domain(fcDomain(values)).range([0, innerW])\n\tconst y = scaleBand().domain(rows).range([0, innerH]).padding(0.4)\n\n\tstyledAxis(g.append('g').attr('transform', `translate(0,${innerH})`), axisBottom(x).ticks(4), tickFont)\n\tstyledAxis(g.append('g'), axisLeft(y), tickFont)\n\tdrawZeroLine(g, x(0), 0, x(0), innerH)\n\tsvg\n\t\t.append('text')\n\t\t.attr('x', margin.left + innerW / 2)\n\t\t.attr('y', margin.top + innerH + 30)\n\t\t.attr('text-anchor', 'middle')\n\t\t.style('font-size', '11px')\n\t\t.style('fill', '#374151')\n\t\t.text('log2FC vs control')\n\n\t// inline legend\n\tconst legend = g.append('g').attr('transform', `translate(0,-12)`)\n\tfor (const [i, item] of [\n\t\t{\n\t\t\tlabel: labelOf(wholeEntry, getTileConfig(self, cfg.referenceTile || '')?.title || 'reference'),\n\t\t\tcolor: WHOLE_COLOR\n\t\t},\n\t\t{ label: labelOf(insol[0], cfg.cohortMatch?.assay || cfg.title), color: INSOLUBLE_COLOR }\n\t].entries()) {\n\t\tconst lx = i * (kx < 0.6 ? 58 : 80)\n\t\tlegend.append('circle').attr('cx', lx).attr('cy', 0).attr('r', 4).attr('fill', item.color).attr('fill-opacity', 0.9)\n\t\tlegend\n\t\t\t.append('text')\n\t\t\t.attr('x', lx + 8)\n\t\t\t.attr('y', 3)\n\t\t\t.style('font-size', '10px')\n\t\t\t.style('fill', '#374151')\n\t\t\t.text(item.label)\n\t}\n\n\tfor (const p of pairs) {\n\t\tconst cy = y(p.cohortName)! + y.bandwidth() / 2\n\t\tif (p.whole && p.insoluble) {\n\t\t\tg.append('line')\n\t\t\t\t.attr('x1', x(p.whole.log2fc as number))\n\t\t\t\t.attr('x2', x(p.insoluble.log2fc as number))\n\t\t\t\t.attr('y1', cy)\n\t\t\t\t.attr('y2', cy)\n\t\t\t\t.attr('stroke', '#9ca3af')\n\t\t\t\t.attr('stroke-width', 1.5)\n\t\t}\n\t\tif (p.whole)\n\t\t\tattachEntryBehavior(\n\t\t\t\tdrawMarker(g, x(p.whole.log2fc as number), cy, WHOLE_COLOR, isSig(p.whole), mr),\n\t\t\t\tp.whole,\n\t\t\t\tself\n\t\t\t)\n\t\tif (p.insoluble)\n\t\t\tattachEntryBehavior(\n\t\t\t\tdrawMarker(g, x(p.insoluble.log2fc as number), cy, INSOLUBLE_COLOR, isSig(p.insoluble), mr),\n\t\t\t\tp.insoluble,\n\t\t\t\tself\n\t\t\t)\n\t}\n\n\taddSigFootnote(body)\n}\n\n// Tile \u2014 brain regional proteome: 9 regions coloured by log2FC where significant\n// answers: Where in the brain does this protein change?\n// thresholding/coloring rules are shared with the standalone brainRegions plot (brainRegions.svg.ts)\nlet brainGradientSeq = 0\n\n// per-gene fetch of the brainRegions route data; the parsed svg assets are\n// gene-independent and cached once per svgUrl\nfunction getBrainRegionsData(self: any): Promise<{ data: any; assets: BrainAssets | null }> {\n\tconst gene = self.state?.config?.tw?.term?.name\n\tconst [genome, dslabel] = vocabKey(self).split('|')\n\treturn cachedFetch(`brainRegions|${vocabKey(self)}|${gene}`, async () => {\n\t\tconst data = await dofetch3('termdb/brainRegions', { body: { genome, dslabel, gene } })\n\t\tif (data.error) throw data.error\n\t\tconst assets = Object.keys(data.isoforms || {}).length\n\t\t\t? await cachedFetch(`brainAssets|${data.svgUrl}`, () => loadBrainAssets(data.svgUrl, Object.keys(data.regions)))\n\t\t\t: null\n\t\treturn { data, assets }\n\t})\n}\n\n// fold-change color scale for one isoform, scoped to the selected disease\nconst brainFcScale = (isoformData: any, disease: string) => makeBrainFcScale(isoformData.data[disease] || {})\n\n// one brain for one disease; same coloring rules as the standalone\n// brainRegions plot (significant fold changes only)\nfunction drawBrainForDisease(\n\tholder: any,\n\tdata: any,\n\tassets: BrainAssets,\n\tisoform: string,\n\tdisease: string,\n\tself: any,\n\tbrainW: number,\n\tcolorScale: any\n) {\n\tconst regionData = data.isoforms[isoform]?.data?.[disease] || {}\n\trenderBrainSvg({\n\t\tholder: holder.append('div'),\n\t\twidth: brainW,\n\t\ttemplateUrl: data.templateUrl,\n\t\tassets,\n\t\tregions: data.regions,\n\t\ttip: self.dom.tip,\n\t\tfillByRegion: brainFillByRegion(regionData, colorScale),\n\t\ttooltipByRegion: brainTooltipByRegion(regionData)\n\t})\n}\n\nfunction drawBrainLegend(holder: any, colorScale: any, maxAbsFC: number, nSig: number, disease: string) {\n\tconst legend = holder.append('div').style('margin-top', '6px')\n\tif (!nSig) {\n\t\t// nothing passes the threshold: the gradient would only show the \u00B11 fallback domain\n\t\tlegend\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.75em')\n\t\t\t.style('color', '#6b7280')\n\t\t\t.text(`No region reaches p < ${BRAIN_P_THRESHOLD} for this isoform in ${disease} (all regions grey).`)\n\t\treturn\n\t}\n\tconst w = 160\n\tconst h = 10\n\tconst svg = legend\n\t\t.append('svg')\n\t\t.attr('width', w)\n\t\t.attr('height', h + 16)\n\tconst gradientId = `pv-brain-fc-gradient-${brainGradientSeq++}`\n\tconst gradient = svg\n\t\t.append('defs')\n\t\t.append('linearGradient')\n\t\t.attr('id', gradientId)\n\t\t.attr('x1', '0')\n\t\t.attr('y1', '0')\n\t\t.attr('x2', '1')\n\t\t.attr('y2', '0')\n\tconst steps = 10\n\tfor (let i = 0; i <= steps; i++) {\n\t\tconst t = i / steps\n\t\tgradient\n\t\t\t.append('stop')\n\t\t\t.attr('offset', `${t * 100}%`)\n\t\t\t.attr('stop-color', colorScale(-maxAbsFC + t * 2 * maxAbsFC))\n\t}\n\tsvg.append('rect').attr('width', w).attr('height', h).attr('fill', `url(#${gradientId})`).attr('stroke', '#d1d5db')\n\tconst labels: Array<[number, string, string]> = [\n\t\t[0, `-${maxAbsFC.toFixed(2)}`, 'start'],\n\t\t[w / 2, '0', 'middle'],\n\t\t[w, maxAbsFC.toFixed(2), 'end']\n\t]\n\tfor (const [x, text, anchor] of labels) {\n\t\tsvg\n\t\t\t.append('text')\n\t\t\t.attr('x', x)\n\t\t\t.attr('y', h + 12)\n\t\t\t.attr('text-anchor', anchor)\n\t\t\t.style('font-size', '9px')\n\t\t\t.style('fill', '#374151')\n\t\t\t.text(text)\n\t}\n\tlegend\n\t\t.append('div')\n\t\t.style('font-size', '.7em')\n\t\t.style('color', '#9ca3af')\n\t\t.text(`log\u2082 fold change vs control \u00B7 grey: not significant (p \u2265 ${BRAIN_P_THRESHOLD})`)\n}\n\n// gating uses proteome cohorts; the drawing uses the brainRegions route\nfunction renderBrainRegionTile(body: any, _td: TileData, self: any, _cfg: TileCfg, opts: TileRenderOpts = {}) {\n\tconst expanded = !!opts.expanded\n\tconst wait = body.append('div').style('font-size', '.75em').style('color', '#9ca3af').text('Loading\u2026')\n\tgetBrainRegionsData(self)\n\t\t.then(({ data, assets }) => {\n\t\t\twait.remove()\n\t\t\tconst isoformIds = Object.keys(data.isoforms || {})\n\t\t\tif (!isoformIds.length || !assets) {\n\t\t\t\tbody\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('font-size', '.75em')\n\t\t\t\t\t.style('color', '#9ca3af')\n\t\t\t\t\t.text('No brain-region data for this protein.')\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tif (!expanded) {\n\t\t\t\tconst iso = isoformIds[0]\n\t\t\t\tconst tabsHolder = body.append('div')\n\t\t\t\tconst brainHolder = body.append('div')\n\t\t\t\tconst caption = body\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('font-size', '.7em')\n\t\t\t\t\t.style('color', '#9ca3af')\n\t\t\t\t\t.style('margin-top', '2px')\n\t\t\t\tconst redraw = (disease: string) => {\n\t\t\t\t\tbrainHolder.selectAll('*').remove()\n\t\t\t\t\tconst { colorScale, nSig } = brainFcScale(data.isoforms[iso], disease)\n\t\t\t\t\tdrawBrainForDisease(brainHolder, data, assets, iso, disease, self, 185, colorScale)\n\t\t\t\t\tcaption.text(\n\t\t\t\t\t\tnSig\n\t\t\t\t\t\t\t? `red: up \u00B7 blue: down \u00B7 grey: p \u2265 ${BRAIN_P_THRESHOLD}`\n\t\t\t\t\t\t\t: `no region reaches p < ${BRAIN_P_THRESHOLD} in ${disease}`\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t\tif (data.diseases.length > 1) makeDiseaseTabs(tabsHolder, data.diseases, data.diseases[0], redraw, '.75em')\n\t\t\t\tredraw(data.diseases[0])\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\tconst description = self.app.vocabApi.termdbConfig?.queries?.proteome?.brainRegions?.description\n\t\t\tif (description) {\n\t\t\t\tbody\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('font-size', '.8em')\n\t\t\t\t\t.style('color', '#555')\n\t\t\t\t\t.style('max-width', '640px')\n\t\t\t\t\t.style('line-height', '1.4')\n\t\t\t\t\t.style('margin-bottom', '8px')\n\t\t\t\t\t.text(description)\n\t\t\t}\n\n\t\t\tlet selectedIso = isoformIds[0]\n\t\t\tlet selectedDisease = data.diseases[0]\n\t\t\tconst controlRow = body.append('div').style('margin-bottom', '8px').style('font-size', '.85em')\n\t\t\tcontrolRow.append('span').style('font-weight', '600').text('Isoform: ')\n\t\t\tconst tabsHolder = body.append('div')\n\t\t\tconst brainHolder = body.append('div')\n\t\t\tconst redraw = () => {\n\t\t\t\tbrainHolder.selectAll('*').remove()\n\t\t\t\tconst isoformData = data.isoforms[selectedIso]\n\t\t\t\tif (!isoformData) return\n\t\t\t\tconst { colorScale, maxAbsFC, nSig } = brainFcScale(isoformData, selectedDisease)\n\t\t\t\tdrawBrainForDisease(brainHolder, data, assets, selectedIso, selectedDisease, self, 460, colorScale)\n\t\t\t\tdrawBrainLegend(brainHolder, colorScale, maxAbsFC, nSig, selectedDisease)\n\t\t\t}\n\t\t\tif (data.diseases.length > 1) {\n\t\t\t\tmakeDiseaseTabs(\n\t\t\t\t\ttabsHolder,\n\t\t\t\t\tdata.diseases,\n\t\t\t\t\tselectedDisease,\n\t\t\t\t\t(d: string) => {\n\t\t\t\t\t\tselectedDisease = d\n\t\t\t\t\t\tredraw()\n\t\t\t\t\t},\n\t\t\t\t\t'.9em'\n\t\t\t\t)\n\t\t\t}\n\t\t\tif (isoformIds.length > 1) {\n\t\t\t\tconst sel = controlRow\n\t\t\t\t\t.append('select')\n\t\t\t\t\t.style('margin-left', '5px')\n\t\t\t\t\t.on('change', () => {\n\t\t\t\t\t\tselectedIso = sel.node().value\n\t\t\t\t\t\tredraw()\n\t\t\t\t\t})\n\t\t\t\tsel\n\t\t\t\t\t.selectAll('option')\n\t\t\t\t\t.data(isoformIds)\n\t\t\t\t\t.enter()\n\t\t\t\t\t.append('option')\n\t\t\t\t\t.attr('value', (d: string) => d)\n\t\t\t\t\t.text((d: string) => `${data.isoforms[d].gene_name} \u2014 ${d}`)\n\t\t\t} else {\n\t\t\t\tcontrolRow\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.style('margin-left', '5px')\n\t\t\t\t\t.text(`${data.isoforms[selectedIso].gene_name} \u2014 ${selectedIso}`)\n\t\t\t}\n\t\t\tredraw()\n\t\t})\n\t\t.catch((err: any) => {\n\t\t\twait.style('color', '#b91c1c').text(`Failed to load: ${err?.message || err}`)\n\t\t\tif (self.app?.opts?.debug) console.error(err)\n\t\t})\n}\n\n// Tile \u2014 models over age: log2FC vs control, one line per model with an\n// ageGroup series; single-timepoint models sit in a separate strip so no\n// age is implied.\n// answers: \"when does this protein start to change, in which models?\"\"\nfunction renderMouseModelsTile(body: any, td: TileData, self: any, cfg: TileCfg, opts: TileRenderOpts = {}) {\n\tconst k = opts.scale || 1\n\tconst kx = opts.scaleX ?? k\n\tconst mr = 4 * Math.sqrt(k)\n\tconst tickFont = k < 1 ? '8.5px' : null\n\ttype AgedPoint = { age: number; e: TileEntry }\n\tconst aged = new Map<string, AgedPoint[]>()\n\tconst singles: TileEntry[] = []\n\tfor (const e of entries(td, cfg.key)) {\n\t\tconst age = e.catalog.ageGroup ? parseAge(e.catalog.ageGroup) : null\n\t\tif (age === null) {\n\t\t\tsingles.push(e)\n\t\t\tcontinue\n\t\t}\n\t\tif (!aged.has(e.catalog.model)) aged.set(e.catalog.model, [])\n\t\taged.get(e.catalog.model)!.push({ age, e })\n\t}\n\tfor (const pts of aged.values()) pts.sort((a, b) => a.age - b.age)\n\n\tconst ages = [...new Set([...aged.values()].flatMap(pts => pts.map(p => p.age)))].sort((a, b) => a - b)\n\t// no aged series (every model single-timepoint): only the strip is drawn\n\tconst hasAged = ages.length > 0\n\tconst margin = { top: 20, right: 12, bottom: 36, left: 46 }\n\tconst mainW = hasAged ? 210 * kx : 0\n\tconst stripGap = singles.length && hasAged ? 18 * kx : 0\n\tconst stripW = singles.length * 34 * kx\n\tconst innerH = 150 * k\n\tconst svg = body\n\t\t.append('svg')\n\t\t.attr('width', margin.left + mainW + stripGap + stripW + margin.right)\n\t\t.attr('height', innerH + margin.top + margin.bottom)\n\tconst g = svg.append('g').attr('transform', `translate(${margin.left},${margin.top})`)\n\n\tconst values: number[] = []\n\tfor (const pts of aged.values()) for (const p of pts) values.push(p.e.log2fc as number)\n\tfor (const e of singles) values.push(e.log2fc as number)\n\n\t// a single age would give a degenerate domain; pad it by a month either side\n\tconst x = scaleLinear()\n\t\t.domain(ages.length > 1 ? [ages[0], ages[ages.length - 1]] : [(ages[0] ?? 0) - 1, (ages[0] ?? 0) + 1])\n\t\t.range([0, mainW])\n\tconst y = scaleLinear().domain(fcDomain(values)).range([innerH, 0])\n\n\tif (hasAged) {\n\t\tstyledAxis(g.append('g').attr('transform', `translate(0,${innerH})`), axisBottom(x).tickValues(ages), tickFont)\n\t\tsvg\n\t\t\t.append('text')\n\t\t\t.attr('x', margin.left + mainW / 2)\n\t\t\t.attr('y', margin.top + innerH + 32)\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.style('font-size', '11px')\n\t\t\t.style('fill', '#374151')\n\t\t\t.text(cfg.xLabel || 'age')\n\t}\n\tstyledAxis(g.append('g'), axisLeft(y).ticks(4), tickFont)\n\tdrawZeroLine(g, 0, y(0), mainW + stripGap + stripW, y(0))\n\tyAxisTitle(svg, innerH, margin.top, cfg.yLabel || 'log2FC vs control')\n\n\tlet legendX = 0\n\tfor (const model of orderBy([...aged.keys()], modelOrder(self))) {\n\t\tconst pts = aged.get(model)!\n\t\tconst color = modelColor(self, model)\n\t\tconst path = d3line<AgedPoint>()\n\t\t\t.x(p => x(p.age))\n\t\t\t.y(p => y(p.e.log2fc as number))\n\t\tg.append('path')\n\t\t\t.attr('d', path(pts))\n\t\t\t.attr('fill', 'none')\n\t\t\t.attr('stroke', color)\n\t\t\t.attr('stroke-width', 1.5)\n\t\t\t.attr('stroke-opacity', 0.75)\n\t\tfor (const p of pts)\n\t\t\tattachEntryBehavior(drawMarker(g, x(p.age), y(p.e.log2fc as number), color, isSig(p.e), mr), p.e, self)\n\t\tg.append('text')\n\t\t\t.attr('x', legendX)\n\t\t\t.attr('y', -8)\n\t\t\t.style('font-size', '10px')\n\t\t\t.style('font-weight', '600')\n\t\t\t.style('fill', color)\n\t\t\t.text(model)\n\t\tlegendX += 52\n\t}\n\n\tif (singles.length) {\n\t\tconst stripX0 = mainW + stripGap\n\t\tg.append('line')\n\t\t\t.attr('x1', stripX0 - stripGap / 2)\n\t\t\t.attr('x2', stripX0 - stripGap / 2)\n\t\t\t.attr('y1', 0)\n\t\t\t.attr('y2', innerH)\n\t\t\t.attr('stroke', '#d1d5db')\n\t\t\t.attr('stroke-dasharray', '2 3')\n\t\tfor (const [i, e] of singles.entries()) {\n\t\t\tconst cx = stripX0 + i * 34 * kx + 17 * kx\n\t\t\tattachEntryBehavior(drawMarker(g, cx, y(e.log2fc as number), SINGLE_MODEL_COLOR, isSig(e), mr), e, self)\n\t\t\tconst lbl = g\n\t\t\t\t.append('text')\n\t\t\t\t.attr('x', cx)\n\t\t\t\t.attr('y', innerH + 14)\n\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t.style('font-size', '9px')\n\t\t\t\t.style('fill', '#6b7280')\n\t\t\t\t.text(e.catalog.model)\n\t\t\t// narrow strips slant the model names so they don't collide\n\t\t\tif (kx < 0.6) lbl.attr('transform', `rotate(-38 ${cx} ${innerH + 14})`).attr('text-anchor', 'end')\n\t\t}\n\t}\n\n\taddSigFootnote(body)\n}\n\n// Tile \u2014 cell type \u00D7 age grid: bubble per model, color = log2FC, size = significance.\n// answers: \"Which cell type carries this protein's change, and when does it appear?\"\"\nfunction renderCellTypesTile(body: any, td: TileData, self: any, cfg: TileCfg, opts: TileRenderOpts = {}) {\n\tconst k = opts.scale || 1\n\tconst kx = opts.scaleX ?? k\n\tconst all = entries(td, cfg.key)\n\tconst models = orderBy([...new Set(all.map(e => e.catalog.model))], modelOrder(self))\n\tconst cellTypes = orderBy([...new Set(all.map(e => e.catalog.cellType))], Object.keys(cellTypeCfg(self)))\n\n\t// per model, the ages actually present (sorted)\n\tconst agesByModel = new Map<string, string[]>()\n\tfor (const m of models) {\n\t\tconst ages = [...new Set(all.filter(e => e.catalog.model === m).map(e => e.catalog.ageGroup))].sort(byAge)\n\t\tagesByModel.set(m, ages)\n\t}\n\n\tconst CELL_W = 34 * kx\n\tconst CELL_H = 28 * k\n\tconst ROW_LABEL_W = 82\n\tconst MODEL_GAP = 12 * kx\n\tconst HEADER_H = 34\n\n\tconst colX = new Map<string, number>() // `${model}|${age}` \u2192 x center\n\tlet xCursor = 0\n\tconst modelSpans: Array<{ model: string; x0: number; x1: number }> = []\n\tfor (const m of models) {\n\t\tconst x0 = xCursor\n\t\tfor (const a of agesByModel.get(m)!) {\n\t\t\tcolX.set(`${m}|${a}`, xCursor + CELL_W / 2)\n\t\t\txCursor += CELL_W\n\t\t}\n\t\tmodelSpans.push({ model: m, x0, x1: xCursor })\n\t\txCursor += MODEL_GAP\n\t}\n\tconst gridW = xCursor - MODEL_GAP\n\tconst gridH = cellTypes.length * CELL_H\n\n\tconst svg = body\n\t\t.append('svg')\n\t\t.attr('width', ROW_LABEL_W + gridW + 10)\n\t\t.attr('height', HEADER_H + gridH + 8)\n\tconst g = svg.append('g').attr('transform', `translate(${ROW_LABEL_W},${HEADER_H})`)\n\n\t// column headers: model band + age labels\n\tfor (const span of modelSpans) {\n\t\tsvg\n\t\t\t.append('text')\n\t\t\t.attr('x', ROW_LABEL_W + (span.x0 + span.x1) / 2)\n\t\t\t.attr('y', 12)\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.style('font-size', '10px')\n\t\t\t.style('font-weight', '600')\n\t\t\t.style('fill', modelColor(self, span.model))\n\t\t\t.text(span.model)\n\t}\n\tfor (const [key, cx] of colX) {\n\t\tsvg\n\t\t\t.append('text')\n\t\t\t.attr('x', ROW_LABEL_W + cx)\n\t\t\t.attr('y', 27)\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.style('font-size', '9px')\n\t\t\t.style('fill', '#6b7280')\n\t\t\t.text(key.split('|')[1])\n\t}\n\t// row labels\n\tfor (const [i, ct] of cellTypes.entries()) {\n\t\tsvg\n\t\t\t.append('text')\n\t\t\t.attr('x', ROW_LABEL_W - 6)\n\t\t\t.attr('y', HEADER_H + i * CELL_H + CELL_H / 2 + 3)\n\t\t\t.attr('text-anchor', 'end')\n\t\t\t.style('font-size', '10px')\n\t\t\t.style('fill', '#374151')\n\t\t\t.text(ct)\n\t}\n\n\tconst maxAbsFc = Math.max(1, ...all.map(e => Math.abs(e.log2fc as number)))\n\tconst colorScale = scaleLinear<string>()\n\t\t.domain([-maxAbsFc, 0, maxAbsFc])\n\t\t.range([FC_NEG_COLOR, FC_ZERO_COLOR, FC_POS_COLOR])\n\tconst NEG_LOG_P_CAP = 10\n\t// bubble radius capped so the largest dot stays inside a narrowed cell\n\tconst rScale = scaleSqrt()\n\t\t.domain([0, NEG_LOG_P_CAP])\n\t\t.range([3 * k, Math.min(11 * k, CELL_W / 2 - 0.5)])\n\n\tfor (const e of all) {\n\t\tconst cx = colX.get(`${e.catalog.model}|${e.catalog.ageGroup}`)\n\t\tconst row = cellTypes.indexOf(e.catalog.cellType)\n\t\tif (cx === undefined || row < 0) continue\n\t\tconst negLogP = e.fdr === null ? 0 : Math.min(NEG_LOG_P_CAP, -Math.log10(Math.max(e.fdr, 1e-300)))\n\t\tconst circle = g\n\t\t\t.append('circle')\n\t\t\t.attr('cx', cx)\n\t\t\t.attr('cy', row * CELL_H + CELL_H / 2)\n\t\t\t.attr('r', rScale(negLogP))\n\t\t\t.attr('fill', colorScale(e.log2fc as number))\n\t\t\t.attr('stroke', isSig(e) ? '#374151' : '#d1d5db')\n\t\t\t.attr('stroke-width', 1)\n\t\tattachEntryBehavior(circle, e, self)\n\t}\n\n\tconst foot = body.append('div').style('font-size', '.7em').style('color', '#9ca3af').style('margin-top', '2px')\n\tfoot.style('max-width', '100%')\n\tfoot.append('span').text(`color: log2FC (purple down, blue up) \u00B7 size: \u2212log10(FDR) \u00B7 outline: FDR < ${SIG_P}`)\n\tfor (const ct of cellTypes) {\n\t\tconst note = cellTypeCfg(self)[ct]?.note\n\t\tif (note) foot.append('div').text(note)\n\t}\n}\n\n// Tile \u2014 plaque microenvironment: plaque vs adjacent non-plaque log2FC over\n// age (cohorts with model+ageGroup, one line per model); cohorts without an\n// age series (e.g. human) render as single reference marks labeled by organism.\n// answers: \"Is this protein recruited to amyloid plaques \u2014 how strongly, how early,\n// and does the same thing happen in human tissue?\"\nfunction renderPlaqueTile(body: any, td: TileData, self: any, cfg: TileCfg, opts: TileRenderOpts = {}) {\n\tconst k = opts.scale || 1\n\tconst kx = opts.scaleX ?? k\n\tconst mr = 4 * Math.sqrt(k)\n\tconst tickFont = k < 1 ? '8.5px' : null\n\tconst all = entries(td, cfg.key)\n\tconst series = all.filter(e => e.catalog.ageGroup && e.catalog.model)\n\tconst reference = all.filter(e => !(e.catalog.ageGroup && e.catalog.model))\n\tconst refLabel = (e: TileEntry) => e.organism.charAt(0).toUpperCase() + e.organism.slice(1)\n\tconst ages = [...new Set(series.map(e => e.catalog.ageGroup))].sort(byAge)\n\tconst refCategories = [...new Set(reference.map(refLabel))]\n\tconst categories = [...ages, ...refCategories]\n\n\tconst margin = { top: 20, right: 14, bottom: 36, left: 46 }\n\tconst innerW = Math.max(180, categories.length * 52) * kx\n\tconst innerH = 140 * k\n\tconst svg = body\n\t\t.append('svg')\n\t\t.attr('width', innerW + margin.left + margin.right)\n\t\t.attr('height', innerH + margin.top + margin.bottom)\n\tconst g = svg.append('g').attr('transform', `translate(${margin.left},${margin.top})`)\n\n\tconst x = scalePoint().domain(categories).range([0, innerW]).padding(0.5)\n\tconst y = scaleLinear()\n\t\t.domain(fcDomain(all.map(e => e.log2fc as number)))\n\t\t.range([innerH, 0])\n\n\tconst xAxisG = styledAxis(g.append('g').attr('transform', `translate(0,${innerH})`), axisBottom(x), tickFont)\n\tif (kx < 0.6) rotateXTicks(xAxisG)\n\tstyledAxis(g.append('g'), axisLeft(y).ticks(4), tickFont)\n\tdrawZeroLine(g, 0, y(0), innerW, y(0))\n\tyAxisTitle(svg, innerH, margin.top, cfg.yLabel || 'log2FC vs control')\n\t// the slanted tick labels of a narrow face would collide with this title;\n\t// the age ticks are self-explanatory there\n\tif (kx >= 0.6) {\n\t\tsvg\n\t\t\t.append('text')\n\t\t\t.attr('x', margin.left + innerW / 2)\n\t\t\t.attr('y', margin.top + innerH + 32)\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.style('font-size', '11px')\n\t\t\t.style('fill', '#374151')\n\t\t\t.text(cfg.xLabel || 'age')\n\t}\n\n\tif (refCategories.length && ages.length) {\n\t\tconst xSep = (x(ages[ages.length - 1])! + x(refCategories[0])!) / 2\n\t\tg.append('line')\n\t\t\t.attr('x1', xSep)\n\t\t\t.attr('x2', xSep)\n\t\t\t.attr('y1', 0)\n\t\t\t.attr('y2', innerH)\n\t\t\t.attr('stroke', '#d1d5db')\n\t\t\t.attr('stroke-dasharray', '2 3')\n\t}\n\n\tconst models = orderBy([...new Set(series.map(e => e.catalog.model))], modelOrder(self))\n\tlet legendX = 0\n\tfor (const model of models) {\n\t\tconst color = modelColor(self, model)\n\t\tconst pts = series\n\t\t\t.filter(e => e.catalog.model === model)\n\t\t\t.sort((a, b) => byAge(a.catalog.ageGroup, b.catalog.ageGroup))\n\t\tconst path = d3line<TileEntry>()\n\t\t\t.x(e => x(e.catalog.ageGroup)!)\n\t\t\t.y(e => y(e.log2fc as number))\n\t\tg.append('path')\n\t\t\t.attr('d', path(pts))\n\t\t\t.attr('fill', 'none')\n\t\t\t.attr('stroke', color)\n\t\t\t.attr('stroke-width', 1.5)\n\t\t\t.attr('stroke-opacity', 0.75)\n\t\t\t// a gap in the age series (a model missing one age) still gets connected;\n\t\t\t// dash the line so the interpolation is visible as such\n\t\t\t.attr('stroke-dasharray', pts.length < ages.length ? '5 3' : null)\n\t\tfor (const e of pts)\n\t\t\tattachEntryBehavior(drawMarker(g, x(e.catalog.ageGroup)!, y(e.log2fc as number), color, isSig(e), mr), e, self)\n\t\tg.append('text')\n\t\t\t.attr('x', legendX)\n\t\t\t.attr('y', -8)\n\t\t\t.style('font-size', '10px')\n\t\t\t.style('font-weight', '600')\n\t\t\t.style('fill', color)\n\t\t\t.text(model)\n\t\tlegendX += 52\n\t}\n\n\tfor (const e of reference) {\n\t\tconst cx = x(refLabel(e))!\n\t\tconst cy = y(e.log2fc as number)\n\t\tconst r = 5.5 * Math.sqrt(k)\n\t\tconst diamond = g\n\t\t\t.append('path')\n\t\t\t.attr('d', `M ${cx} ${cy - r} L ${cx + r} ${cy} L ${cx} ${cy + r} L ${cx - r} ${cy} Z`)\n\t\t\t.attr('fill', isSig(e) ? REFERENCE_COLOR : '#fff')\n\t\t\t.attr('stroke', REFERENCE_COLOR)\n\t\t\t.attr('stroke-width', 1.5)\n\t\tattachEntryBehavior(diamond, e, self)\n\t}\n\n\taddSigFootnote(body)\n}\n\n// Tile 7 \u2014 multiomic ranking: Integrative rank (\"#n of N\") of\n// GWAS, transcriptome, proteomes, PTMs and interactome per disease. Face: integrative\n// rank per disease + a mini strip of per-modality rank percentiles. Expanded:\n// the description and a full per-modality table.\n// Proteins are ranked by p/FDR value or its log2FC-z score (so rank 1 = the strongest disease-associated signal in that dataset).\n// Answers: \"How strong is the overall multi-omic evidence for this protein in AD / LBD / FTLD, and which modalities drive it?\"\nfunction getGeneRanks(self: any): Promise<any> {\n\tconst gene = self.state?.config?.tw?.term?.name\n\tconst [genome, dslabel] = vocabKey(self).split('|')\n\treturn cachedFetch(`geneRanks|${vocabKey(self)}|${gene}`, async () => {\n\t\tconst data = await dofetch3('termdb/geneRanking', { body: { genome, dslabel, gene } })\n\t\tif (data.error) throw data.error\n\t\treturn data.geneRanks || {}\n\t})\n}\n\n// percentile (0 = best) \u2192 color, dark for top-ranked\nconst rankColor = scaleLinear<string>().domain([0, 0.1, 1]).range(['#1d4ed8', '#93c5fd', '#f3f4f6']).clamp(true)\n\nfunction renderMultiomicRankTile(body: any, _td: TileData, self: any, _cfg: TileCfg, opts: TileRenderOpts = {}) {\n\tconst expanded = !!opts.expanded\n\t// column vocabulary of the ranking files and per-ranking display labels come from the dataset\n\tconst rankCfg = self.app.vocabApi.termdbConfig?.queries?.geneRanking || {}\n\tconst modalities: string[] = rankCfg.modalities || []\n\tconst integrativeColumn: string | undefined = rankCfg.integrativeColumn\n\tconst statColumns: string[] = rankCfg.statColumns || []\n\tconst rankingLabel = (key: string) => rankCfg.labels?.[key] || key\n\tconst wait = body.append('div').style('font-size', '.75em').style('color', '#9ca3af').text('Loading\u2026')\n\tgetGeneRanks(self)\n\t\t.then((geneRanks: any) => {\n\t\t\twait.remove()\n\t\t\tconst keys = Object.keys(geneRanks)\n\t\t\tconst ranked = keys.filter(k => geneRanks[k].row)\n\t\t\tif (!ranked.length) {\n\t\t\t\tbody\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('font-size', '.75em')\n\t\t\t\t\t.style('color', '#9ca3af')\n\t\t\t\t\t.text('Not present in the multiomic rankings.')\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst fmt = (n: number) => n.toLocaleString()\n\n\t\t\tif (expanded) {\n\t\t\t\tconst description = self.app.vocabApi.termdbConfig?.queries?.geneRanking?.description\n\t\t\t\tif (description) {\n\t\t\t\t\tbody\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.style('font-size', '.8em')\n\t\t\t\t\t\t.style('color', '#555')\n\t\t\t\t\t\t.style('max-width', '640px')\n\t\t\t\t\t\t.style('line-height', '1.4')\n\t\t\t\t\t\t.style('margin-bottom', '10px')\n\t\t\t\t\t\t.text(description)\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const key of keys) {\n\t\t\t\tconst r = geneRanks[key]\n\t\t\t\tconst colIdx = new Map<string, number>(r.columns.map((c: string, i: number) => [c, i]))\n\t\t\t\tconst intIdx = integrativeColumn ? colIdx.get(integrativeColumn) : undefined\n\t\t\t\tconst intRank = r.row && intIdx !== undefined ? r.row[intIdx] : null\n\t\t\t\tconst section = body.append('div').style('margin-bottom', expanded ? '12px' : '6px')\n\t\t\t\tconst head = section\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('display', 'flex')\n\t\t\t\t\t.style('align-items', 'baseline')\n\t\t\t\t\t.style('gap', '6px')\n\t\t\t\t\t.style('font-size', expanded ? '.9em' : '.8em')\n\t\t\t\thead.append('span').style('font-weight', '600').style('color', '#374151').text(rankingLabel(key))\n\t\t\t\tif (!r.row) {\n\t\t\t\t\thead.append('span').style('color', '#9ca3af').text('not ranked')\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\thead\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.style('color', typeof intRank === 'number' ? '#111827' : '#9ca3af')\n\t\t\t\t\t.text(typeof intRank === 'number' ? `#${fmt(intRank)} of ${fmt(r.counts[intIdx!])}` : 'no integrative rank')\n\n\t\t\t\t// per-modality ranks: strip on the face, table when expanded\n\t\t\t\tconst mods = modalities.filter(m => colIdx.has(m))\n\t\t\t\tif (!expanded) {\n\t\t\t\t\tconst strip = section.append('div').style('display', 'flex').style('gap', '2px').style('margin-top', '2px')\n\t\t\t\t\tfor (const m of mods) {\n\t\t\t\t\t\tconst c = colIdx.get(m)!\n\t\t\t\t\t\tconst v = r.row[c]\n\t\t\t\t\t\tconst n = r.counts[c]\n\t\t\t\t\t\tconst pct = typeof v === 'number' && n ? (v - 1) / Math.max(1, n - 1) : null\n\t\t\t\t\t\tstrip\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.attr('title', pct === null ? `${m}: not ranked` : `${m}: #${fmt(v as number)} of ${fmt(n)}`)\n\t\t\t\t\t\t\t.style('width', '20px')\n\t\t\t\t\t\t\t.style('height', '9px')\n\t\t\t\t\t\t\t.style('border-radius', '2px')\n\t\t\t\t\t\t\t.style('background', pct === null ? '#fff' : rankColor(pct))\n\t\t\t\t\t\t\t.style('border', pct === null ? '1px dashed #d1d5db' : '1px solid transparent')\n\t\t\t\t\t\t\t.style('box-sizing', 'border-box')\n\t\t\t\t\t}\n\t\t\t\t\tcontinue\n\t\t\t\t}\n\t\t\t\tconst tbl = table2col({ holder: section.append('table') })\n\t\t\t\tfor (const m of mods) {\n\t\t\t\t\tconst c = colIdx.get(m)!\n\t\t\t\t\tconst v = r.row[c]\n\t\t\t\t\tconst n = r.counts[c]\n\t\t\t\t\tconst pctTop = typeof v === 'number' ? (100 * v) / n : null\n\t\t\t\t\tconst pctText = pctTop === null ? '' : ` (top ${pctTop < 0.1 ? pctTop.toFixed(2) : pctTop.toFixed(1)}%)`\n\t\t\t\t\ttbl.addRow(m, typeof v === 'number' ? `#${fmt(v)} of ${fmt(n)}${pctText}` : 'not ranked')\n\t\t\t\t}\n\t\t\t\tfor (const extra of statColumns) {\n\t\t\t\t\tconst c = colIdx.get(extra)\n\t\t\t\t\tif (c === undefined) continue\n\t\t\t\t\tconst v = r.row[c]\n\t\t\t\t\ttbl.addRow(extra, typeof v === 'number' ? (v < 0.001 && v > 0 ? v.toExponential(2) : String(v)) : 'NA')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tif (!expanded) {\n\t\t\t\tconst foot = body.append('div').style('font-size', '.7em').style('color', '#9ca3af').style('margin-top', '4px')\n\t\t\t\tfoot.text('strip: one cell per modality, darker = ranked higher \u00B7 hover for ranks')\n\t\t\t}\n\t\t})\n\t\t.catch((err: any) => {\n\t\t\twait.style('color', '#b91c1c').text(`Failed to load: ${err?.message || err}`)\n\t\t\tif (self.app?.opts?.debug) console.error(err)\n\t\t})\n}\n\n// Tile \u2014 concordance: All-gene scatter of log2FC in one cohort vs another\n// (human vs mouse model, or model vs model), this protein highlighted,\n// human-vs-mouse panels ask \"does this mouse model reproduce human AD?\",\n// the mouse-vs-mouse panel \"do the two models agree with each other?\".\n// R: Pearson correlation between the two cohorts' log2FC values across all\n// shared genes (not just the searched protein), i.e. how well the whole\n// proteome's direction and magnitude of change in one dataset tracks the\n// other. High R (> 0.5): largely the same changes; ~0.2\u20130.3: only a subset\n// moves in concert; \u2248 0: no global relationship.\n// Answers: \"Does the mouse model reproduce the human change for this protein \u2014 and for the proteome as a whole?\"\ntype CohortRef = { organism: string; assay: string; cohort: string; label: string }\ntype ConcordancePair = { key: string; label: string; x: CohortRef; y: CohortRef }\n// server joins the two DAP files on upper-cased gene and runs R's cor.test (R/src/corr.R)\nfunction getConcordance(self: any, x: CohortRef, y: CohortRef): Promise<DapConcordance> {\n\tconst [genome, dslabel] = vocabKey(self).split('|')\n\tconst refKey = (r: CohortRef) => `${r.organism}|${r.assay}|${r.cohort}`\n\treturn cachedFetch(`dapConcordance|${vocabKey(self)}|${refKey(x)}|${refKey(y)}`, async () => {\n\t\tconst data = await dofetch3('termdb/dapVolcano', {\n\t\t\tbody: {\n\t\t\t\tgenome,\n\t\t\t\tdslabel,\n\t\t\t\torganism: x.organism,\n\t\t\t\tassay: x.assay,\n\t\t\t\tcohort: x.cohort,\n\t\t\t\tconcordanceWith: { organism: y.organism, assay: y.assay, cohort: y.cohort }\n\t\t\t}\n\t\t})\n\t\tif (data.error) throw data.error\n\t\treturn data.concordance\n\t})\n}\n\n// first cohort (with a DAP file) satisfying a pair side's cohortMatch; an\n// ageVaries side additionally requires catalog.ageGroup == age\nfunction findPairCohort(self: any, side: PairSide, age: string): CohortRef | null {\n\tconst organisms = self.app?.vocabApi?.termdbConfig?.queries?.proteome?.organisms || {}\n\tfor (const organism in organisms) {\n\t\tconst assays = organisms[organism]?.assays || {}\n\t\tfor (const assay in assays) {\n\t\t\tfor (const cohort in assays[assay].cohorts || {}) {\n\t\t\t\tconst c = assays[assay].cohorts[cohort]\n\t\t\t\tif (!c.DAPfile || !c.catalog) continue\n\t\t\t\tif (!cohortMatches(side, organism, assay, c.catalog)) continue\n\t\t\t\tif (side.ageVaries && c.catalog.ageGroup !== age) continue\n\t\t\t\tconst label = side.ageVaries ? `${side.label} ${age}` : side.label\n\t\t\t\treturn { organism, assay, cohort, label }\n\t\t\t}\n\t\t}\n\t}\n\treturn null\n}\n\n// ages at which at least one ageVaries side has a DAP cohort, sorted numerically\nfunction concordanceAges(self: any, cfg: TileCfg): string[] {\n\tconst organisms = self.app?.vocabApi?.termdbConfig?.queries?.proteome?.organisms || {}\n\tconst sides = (cfg.pairs || []).flatMap(p => [p.x, p.y]).filter(sd => sd.ageVaries)\n\tconst ages = new Set<string>()\n\tfor (const organism in organisms) {\n\t\tconst assays = organisms[organism]?.assays || {}\n\t\tfor (const assay in assays) {\n\t\t\tfor (const cohort in assays[assay].cohorts || {}) {\n\t\t\t\tconst c = assays[assay].cohorts[cohort]\n\t\t\t\tif (!c.DAPfile || !c.catalog?.ageGroup) continue\n\t\t\t\tif (sides.some(sd => cohortMatches(sd, organism, assay, c.catalog))) ages.add(c.catalog.ageGroup)\n\t\t\t}\n\t\t}\n\t}\n\treturn [...ages].sort(byAge)\n}\n\n// age used when none is selected: the configured defaultAge if cohorts exist at\n// it, else the first age that has any; '' only when no side varies by age\nfunction defaultConcordanceAge(self: any, cfg: TileCfg): string {\n\tconst ages = concordanceAges(self, cfg)\n\tif (cfg.defaultAge && ages.includes(cfg.defaultAge)) return cfg.defaultAge\n\treturn ages[0] || cfg.defaultAge || ''\n}\n\nfunction concordancePairs(self: any, cfg: TileCfg, age = defaultConcordanceAge(self, cfg)): ConcordancePair[] {\n\tconst pairs: ConcordancePair[] = []\n\tfor (const p of cfg.pairs || []) {\n\t\tconst x = findPairCohort(self, p.x, age)\n\t\tconst y = findPairCohort(self, p.y, age)\n\t\tif (x && y) pairs.push({ key: p.key, label: p.label, x, y })\n\t}\n\treturn pairs\n}\n\nasync function drawConcordance(holder: any, self: any, pair: ConcordancePair, gene: string, expanded: boolean) {\n\tconst { points: pts, r: R, p: P } = await getConcordance(self, pair.x, pair.y)\n\tconst target = gene.toUpperCase()\n\tconst hit = pts.find(p => p.gene === target)\n\n\tconst margin = expanded ? { top: 14, right: 16, bottom: 44, left: 52 } : { top: 8, right: 10, bottom: 32, left: 38 }\n\tconst innerW = expanded ? 380 : 150\n\tconst innerH = expanded ? 320 : 118\n\tconst svg = holder\n\t\t.append('svg')\n\t\t.attr('width', innerW + margin.left + margin.right)\n\t\t.attr('height', innerH + margin.top + margin.bottom)\n\tconst g = svg.append('g').attr('transform', `translate(${margin.left},${margin.top})`)\n\tconst x = scaleLinear()\n\t\t.domain(fcDomain(pts.map(p => p.x)))\n\t\t.range([0, innerW])\n\tconst y = scaleLinear()\n\t\t.domain(fcDomain(pts.map(p => p.y)))\n\t\t.range([innerH, 0])\n\tconst tickFont = expanded ? null : '8.5px'\n\tstyledAxis(g.append('g').attr('transform', `translate(0,${innerH})`), axisBottom(x).ticks(expanded ? 6 : 4), tickFont)\n\tstyledAxis(g.append('g'), axisLeft(y).ticks(expanded ? 6 : 4), tickFont)\n\tdrawZeroLine(g, x(0), 0, x(0), innerH)\n\tdrawZeroLine(g, 0, y(0), innerW, y(0))\n\tyAxisTitle(svg, innerH, margin.top, `${pair.y.label} log2FC`)\n\tsvg\n\t\t.append('text')\n\t\t.attr('x', margin.left + innerW / 2)\n\t\t.attr('y', margin.top + innerH + (expanded ? 36 : 28))\n\t\t.attr('text-anchor', 'middle')\n\t\t.style('font-size', expanded ? '11px' : '10px')\n\t\t.style('fill', '#374151')\n\t\t.text(`${pair.x.label} log2FC`)\n\tfor (const p of pts) {\n\t\tif (p === hit) continue\n\t\tg.append('circle')\n\t\t\t.attr('cx', x(p.x))\n\t\t\t.attr('cy', y(p.y))\n\t\t\t.attr('r', expanded ? 1.6 : 1.1)\n\t\t\t.attr('fill', '#9ca3af')\n\t\t\t.attr('fill-opacity', 0.45)\n\t}\n\tif (hit) {\n\t\tg.append('circle')\n\t\t\t.attr('cx', x(hit.x))\n\t\t\t.attr('cy', y(hit.y))\n\t\t\t.attr('r', expanded ? 6 : 4)\n\t\t\t.attr('fill', '#e75480')\n\t\t\t.attr('stroke', '#7f1d1d')\n\t\t\t.attr('stroke-width', 1.2)\n\t\tg.append('text')\n\t\t\t.attr('x', x(hit.x) + (expanded ? 9 : 6))\n\t\t\t.attr('y', y(hit.y) - (expanded ? 6 : 4))\n\t\t\t.style('font-size', expanded ? '12px' : '9px')\n\t\t\t.style('font-weight', '600')\n\t\t\t.style('fill', '#7f1d1d')\n\t\t\t.text(gene)\n\t}\n\tg.append('text')\n\t\t.attr('x', innerW)\n\t\t.attr('y', -2)\n\t\t.attr('text-anchor', 'end')\n\t\t.style('font-size', expanded ? '11px' : '9px')\n\t\t.style('fill', '#374151')\n\t\t.attr('title', P === null ? null : `Pearson cor.test p = ${P < 1e-4 ? P.toExponential(1) : P.toFixed(4)}`)\n\t\t.text(`R = ${R === null ? 'NA' : R.toFixed(2)} \u00B7 n = ${pts.length.toLocaleString()}`)\n\tif (!hit) {\n\t\tholder\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.72em')\n\t\t\t.style('color', '#9ca3af')\n\t\t\t.text(`${gene} is not quantified in both datasets`)\n\t} else if (expanded) {\n\t\tholder\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.8em')\n\t\t\t.style('color', '#374151')\n\t\t\t.style('margin-top', '4px')\n\t\t\t.text(`${gene}: ${pair.x.label} log2FC ${hit.x.toFixed(2)} \u00B7 ${pair.y.label} log2FC ${hit.y.toFixed(2)}`)\n\t}\n}\n\nfunction renderConcordanceTile(body: any, _td: TileData, self: any, cfg: TileCfg, opts: TileRenderOpts = {}) {\n\tconst expanded = !!opts.expanded\n\tconst gene = self.state?.config?.tw?.term?.name || ''\n\tlet age = defaultConcordanceAge(self, cfg)\n\tlet pairs = concordancePairs(self, cfg, age)\n\tif (!pairs.length) return\n\tlet pair = pairs[0]\n\tconst controls = body.append('div').style('display', 'flex').style('align-items', 'center').style('gap', '12px')\n\tconst tabsHolder = controls.append('div')\n\tconst plotHolder = body.append('div')\n\t// a redraw issued while an earlier one is still fetching must win: each\n\t// draw gets a generation and only the latest one may touch plotHolder\n\tlet generation = 0\n\tconst redraw = () => {\n\t\tconst gen = ++generation\n\t\tplotHolder.selectAll('*').remove()\n\t\tconst wait = plotHolder.append('div').style('font-size', '.75em').style('color', '#9ca3af').text('Loading\u2026')\n\t\tconst target = plotHolder.append('div')\n\t\tdrawConcordance(target, self, pair, gene, expanded)\n\t\t\t.then(() => {\n\t\t\t\tif (gen !== generation) target.remove()\n\t\t\t\telse wait.remove()\n\t\t\t})\n\t\t\t.catch((err: any) => {\n\t\t\t\tif (gen !== generation) return\n\t\t\t\twait.style('color', '#b91c1c').text(`Failed to load: ${err?.message || err}`)\n\t\t\t\tif (self.app?.opts?.debug) console.error(err)\n\t\t\t})\n\t}\n\tconst makeTabs = () => {\n\t\ttabsHolder.selectAll('*').remove()\n\t\tif (pairs.length < 2) return\n\t\tmakeDiseaseTabs(\n\t\t\ttabsHolder,\n\t\t\tpairs.map(p => p.label),\n\t\t\tpair.label,\n\t\t\t(label: string) => {\n\t\t\t\tpair = pairs.find(p => p.label === label) || pairs[0]\n\t\t\t\tredraw()\n\t\t\t},\n\t\t\t'.9em'\n\t\t)\n\t}\n\tif (expanded) {\n\t\tmakeTabs()\n\t\t// age selector; the same pair (by key) is kept across ages when it\n\t\t// exists at the new age, otherwise the first available pair is shown\n\t\tconst ages = concordanceAges(self, cfg)\n\t\tif (ages.length > 1) {\n\t\t\tconst ageDiv = controls.append('div').style('font-size', '.85em').style('color', '#374151')\n\t\t\tageDiv.append('span').text('Age: ')\n\t\t\tconst sel = ageDiv.append('select').style('font-size', 'inherit')\n\t\t\tfor (const a of ages)\n\t\t\t\tsel\n\t\t\t\t\t.append('option')\n\t\t\t\t\t.attr('value', a)\n\t\t\t\t\t.property('selected', a === age)\n\t\t\t\t\t.text(a)\n\t\t\tsel.on('change', () => {\n\t\t\t\tage = sel.property('value')\n\t\t\t\tconst next = concordancePairs(self, cfg, age)\n\t\t\t\tif (!next.length) {\n\t\t\t\t\tplotHolder.selectAll('*').remove()\n\t\t\t\t\tplotHolder.append('div').style('font-size', '.8em').style('color', '#9ca3af').text(`No cohorts at ${age}`)\n\t\t\t\t\ttabsHolder.selectAll('*').remove()\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tpairs = next\n\t\t\t\tpair = pairs.find(p => p.key === pair.key) || pairs[0]\n\t\t\t\tmakeTabs()\n\t\t\t\tredraw()\n\t\t\t})\n\t\t}\n\t}\n\tredraw()\n\tif (!expanded) {\n\t\tbody\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.7em')\n\t\t\t.style('color', '#9ca3af')\n\t\t\t.style('margin-top', '2px')\n\t\t\t.text(`${pair.label}${age ? ', ' + age : ''}, all genes \u00B7 expand for other pairs and ages`)\n\t} else if (cfg.note) {\n\t\tbody.append('div').style('font-size', '.75em').style('color', '#9ca3af').style('margin-top', '6px').text(cfg.note)\n\t}\n}\n\n/************ registry ************/\n\n// renderer per tile key; the dataset config decides which tiles exist, their\n// titles and order. `has` gates rendering on the data actually present.\ntype TileRenderer = {\n\thas: (td: TileData, self: any, cfg: TileCfg) => boolean\n\trender: (body: any, td: TileData, self: any, cfg: TileCfg, opts?: TileRenderOpts) => void\n}\nconst TILE_RENDERERS: { [key: string]: TileRenderer } = {\n\tcrossDisease: {\n\t\thas: (td, _s, cfg) => new Set(entries(td, cfg.key).map(e => e.disease || e.cohortName)).size >= 2,\n\t\trender: renderCrossDiseaseTile\n\t},\n\tinsoluble: { has: (td, _s, cfg) => entries(td, cfg.key).length >= 1, render: renderInsolubleTile },\n\tbrainRegions: { has: (td, _s, cfg) => entries(td, cfg.key).length >= 2, render: renderBrainRegionTile },\n\tmouseModels: { has: (td, _s, cfg) => entries(td, cfg.key).length >= 2, render: renderMouseModelsTile },\n\tcellTypes: { has: (td, _s, cfg) => entries(td, cfg.key).length >= 2, render: renderCellTypesTile },\n\tplaque: { has: (td, _s, cfg) => entries(td, cfg.key).length >= 1, render: renderPlaqueTile },\n\tmultiomicRank: {\n\t\t// available whenever the dataset ships rankings; the gene may still be absent\n\t\thas: (_td, self) => !!self?.app?.vocabApi?.termdbConfig?.queries?.geneRanking?.rankings,\n\t\trender: renderMultiomicRankTile\n\t},\n\tconcordance: { has: (_td, self, cfg) => concordancePairs(self, cfg).length > 0, render: renderConcordanceTile }\n\t// 'ptm' is rendered by renderPTMSummaryCard from site-level data, not here\n}\n\nexport type TileDef = TileCfg & TileRenderer\n\n// tiles the dataset configures that this file can draw, in dataset order\nfunction configuredTiles(self: any): TileDef[] {\n\tconst out: TileDef[] = []\n\tfor (const cfg of getTileConfigs(self)) {\n\t\tconst r = TILE_RENDERERS[cfg.key]\n\t\tif (!r) continue\n\t\tout.push({ ...cfg, ...r })\n\t}\n\treturn out\n}\n\n// inline error box used by every tile face and pane\nexport function renderTileError(holder: any, err: any, self: any) {\n\tholder\n\t\t.append('div')\n\t\t.style('color', '#b91c1c')\n\t\t.style('font-size', '.8em')\n\t\t.text(`Failed to render: ${err?.message || err}`)\n\tif (self?.app?.opts?.debug) console.error(err)\n}\n\n// Open expanded-tile panes, keyed per plot instance + tile so the \u2922 button\n// toggles (second click closes) instead of stacking duplicate panes.\nconst openTilePanes = new Map<string, any>()\nconst tilePaneKey = (self: any, key: string) => `${self?.id ?? ''}|${key}`\n\n// close all panes belonging to this plot instance; called on re-render so\n// panes never outlive the data they were drawn from\nexport function closeTilePanes(self: any) {\n\tconst prefix = `${self?.id ?? ''}|`\n\tfor (const [k, pane] of openTilePanes) {\n\t\tif (!k.startsWith(prefix)) continue\n\t\tpane.pane.remove()\n\t\topenTilePanes.delete(k)\n\t}\n}\n\n// close one tile's pane if open; returns whether one was closed\nexport function closeTilePane(self: any, key: string): boolean {\n\tconst k = tilePaneKey(self, key)\n\tconst existing = openTilePanes.get(k)\n\tif (!existing) return false\n\texisting.pane.remove()\n\topenTilePanes.delete(k)\n\treturn true\n}\n\n// toggle a draggable pane (the app's standard floating panel) for one tile;\n// make() fills the pane body. Returns the newly opened pane, or null when the\n// call closed an existing one. onClose fires whenever the pane goes away\n// (toggle, \u2715 button, or closeTilePane[s]) so callers can drop their own refs.\nexport function toggleTilePane(\n\tself: any,\n\tkey: string,\n\ttitle: string,\n\tmake: (body: any) => void,\n\tonClose?: () => void\n): any {\n\tconst k = tilePaneKey(self, key)\n\tif (closeTilePane(self, key)) return null\n\t// newpane offsets by the page scroll itself, so y is viewport-relative\n\tconst pane: any = newpane({\n\t\tx: Math.max(16, (window.innerWidth - 760) / 2),\n\t\ty: 60,\n\t\tclose: () => {\n\t\t\tpane.pane.remove()\n\t\t\topenTilePanes.delete(k)\n\t\t}\n\t})\n\tif (onClose) {\n\t\tconst remove = pane.pane.remove.bind(pane.pane)\n\t\tpane.pane.remove = () => {\n\t\t\tremove()\n\t\t\tonClose()\n\t\t}\n\t}\n\topenTilePanes.set(k, pane)\n\t// lift the pane above app chrome (sandbox header z-index 99) unless the\n\t// embedder's base_zindex already set one\n\tif (!pane.pane.node().style.zIndex) pane.pane.style('z-index', TILE_PANE_ZINDEX)\n\tpane.header.text(title)\n\tmake(pane.body)\n\t// keep hover tooltips above this newly-appended pane\n\traiseSharedMenus(self)\n\treturn pane\n}\n\n// click-to-expand: the same renderer at a larger scale with extra detail\nfunction openExpandedTile(tile: TileDef, td: TileData, self: any) {\n\tconst protein = self.state?.config?.tw?.term?.name || ''\n\ttoggleTilePane(self, tile.key, `${protein ? protein + ' \u2014 ' : ''}${tile.title}`, paneBody => {\n\t\tconst body = paneBody.append('div').style('padding', '12px 16px')\n\t\tbody\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.8em')\n\t\t\t.style('color', '#6b7280')\n\t\t\t.style('margin-bottom', '6px')\n\t\t\t.text(tile.subtitle)\n\t\ttry {\n\t\t\ttile.render(body.append('div'), td, self, tile, { scale: EXPANDED_SCALE, expanded: true })\n\t\t} catch (err: any) {\n\t\t\trenderTileError(body, err, self)\n\t\t}\n\t})\n}\n\n// renders a chart card for every tile whose data requirement is met (in\n// canonical order) and returns the tiles that have no data, so the caller\n// can append their greyed placeholders after the other live cards.\nexport function renderStudyTiles(grid: any, td: TileData, self: any): { missing: TileDef[] } {\n\tconst missing: TileDef[] = []\n\tfor (const tile of configuredTiles(self)) {\n\t\tif (!tile.has(td, self, tile)) {\n\t\t\tmissing.push(tile)\n\t\t\tcontinue\n\t\t}\n\t\tconst body = makeTileCard(grid, {\n\t\t\ttitle: tile.title,\n\t\t\tsubtitle: tile.subtitle,\n\t\t\tuniform: true,\n\t\t\tonExpand: () => openExpandedTile(tile, td, self)\n\t\t})\n\t\ttry {\n\t\t\ttile.render(body, td, self, tile, { scale: TILE_FACE_SCALE, scaleX: TILE_FACE_SCALE_X })\n\t\t} catch (err: any) {\n\t\t\trenderTileError(body, err, self)\n\t\t}\n\t}\n\treturn { missing }\n}\n\n// greyed placeholder cards for tiles without data, appended after the live\n// cards so real data leads the grid\nexport function renderPlaceholderTiles(grid: any, tiles: { title: string; note?: string }[]) {\n\tfor (const tile of tiles) {\n\t\tconst body = makeTileCard(grid, { title: tile.title, disabled: true, uniform: true })\n\t\tbody\n\t\t\t.style('flex', '1')\n\t\t\t.style('display', 'flex')\n\t\t\t.style('align-items', 'center')\n\t\t\t.style('justify-content', 'center')\n\t\t\t.append('div')\n\t\t\t.style('font-size', '.75em')\n\t\t\t.style('color', '#9ca3af')\n\t\t\t.style('max-width', '200px')\n\t\t\t.style('text-align', 'center')\n\t\t\t.text(tile.note || 'No data for this protein in this study')\n\t}\n}\n\n// fallback dot colors for the PTM summary card face when the dataset's\n// mclassOverride doesn't provide one: assigned by order of first appearance\nconst PTM_FALLBACK_PALETTE = ['#d7301f', '#2166ac', '#1b9e77', '#7570b3', '#e6ab02']\n\n// first residue position in a modSites string like \"S10\" or \"S10,T11\"\nfunction firstModSitePos(modSites: string): number | null {\n\tconst m = /[A-Za-z](\\d+)/.exec(modSites || '')\n\tif (!m) return null\n\tconst pos = Number(m[1])\n\treturn Number.isInteger(pos) && pos >= 1 ? pos : null\n}\n\n// Compact overview volcano card: Every protein-level measurement across sample sets\n// as one volcano.\n// Answers: At a glance, how consistent and how significant are this protein's changes across all studies?\nexport function renderOverviewVolcanoCard(\n\tgrid: any,\n\tdata: any,\n\tself: any,\n\topts: { onExpandRender: (holder: any) => void }\n) {\n\ttype Pt = { x: number; y: number; sig: boolean }\n\tconst pts: Pt[] = []\n\tfor (const e of data?.cohorts || []) {\n\t\tif (e.PTMType) continue\n\t\tconst log2fc = getLog2Ratio(e.foldChange)\n\t\tconst p = Number(e.fdr)\n\t\tif (log2fc === null || !Number.isFinite(p) || p <= 0) continue\n\t\tpts.push({ x: log2fc, y: -Math.log10(Math.max(p, 1e-300)), sig: p < SIG_P })\n\t}\n\tconst protein = self.state?.config?.tw?.term?.name || ''\n\tconst body = makeTileCard(grid, {\n\t\ttitle: 'All sample sets',\n\t\tsubtitle: 'log2FC vs significance, every cohort',\n\t\tuniform: true,\n\t\tonExpand: () =>\n\t\t\ttoggleTilePane(self, 'volcano', `${protein ? protein + ' \u2014 ' : ''}All sample sets`, (paneBody: any) => {\n\t\t\t\topts.onExpandRender(paneBody.append('div').style('padding', '12px 16px'))\n\t\t\t})\n\t})\n\tif (!pts.length) {\n\t\tbody.append('div').style('font-size', '.75em').style('color', '#9ca3af').text('No protein-level data.')\n\t\treturn\n\t}\n\n\tconst margin = { top: 8, right: 10, bottom: 32, left: 38 }\n\tconst innerW = 156\n\tconst innerH = 118\n\tconst svg = body\n\t\t.append('svg')\n\t\t.attr('width', innerW + margin.left + margin.right)\n\t\t.attr('height', innerH + margin.top + margin.bottom)\n\tconst g = svg.append('g').attr('transform', `translate(${margin.left},${margin.top})`)\n\tconst x = scaleLinear()\n\t\t.domain(fcDomain(pts.map(p => p.x)))\n\t\t.range([0, innerW])\n\tconst y = scaleLinear()\n\t\t.domain([0, Math.max(2, ...pts.map(p => p.y)) * 1.05])\n\t\t.range([innerH, 0])\n\tstyledAxis(g.append('g').attr('transform', `translate(0,${innerH})`), axisBottom(x).ticks(4), '8.5px')\n\tstyledAxis(g.append('g'), axisLeft(y).ticks(4), '8.5px')\n\tdrawZeroLine(g, x(0), 0, x(0), innerH)\n\t// significance threshold line\n\tg.append('line')\n\t\t.attr('x1', 0)\n\t\t.attr('x2', innerW)\n\t\t.attr('y1', y(-Math.log10(SIG_P)))\n\t\t.attr('y2', y(-Math.log10(SIG_P)))\n\t\t.attr('stroke', '#9ca3af')\n\t\t.attr('stroke-dasharray', '3 3')\n\t\t.attr('stroke-opacity', 0.5)\n\tyAxisTitle(svg, innerH, margin.top, '\\u2212log\\u2081\\u2080(FDR)')\n\tsvg\n\t\t.append('text')\n\t\t.attr('x', margin.left + innerW / 2)\n\t\t.attr('y', margin.top + innerH + 28)\n\t\t.attr('text-anchor', 'middle')\n\t\t.style('font-size', '10px')\n\t\t.style('fill', '#374151')\n\t\t.text('log2FC')\n\tfor (const p of pts) {\n\t\tg.append('circle')\n\t\t\t.attr('cx', x(p.x))\n\t\t\t.attr('cy', y(p.y))\n\t\t\t.attr('r', 2)\n\t\t\t.attr('fill', p.sig ? '#e75480' : '#c7cbd1')\n\t\t\t.attr('fill-opacity', 0.6)\n\t}\n\tbody\n\t\t.append('div')\n\t\t.style('font-size', '.7em')\n\t\t.style('color', '#9ca3af')\n\t\t.style('margin-top', '2px')\n\t\t.text(`${pts.length} dots (accession \\u00d7 sample set) \\u00b7 expand for the interactive view`)\n}\n\n// Modified sites along the protein, coloured by PTM type (phospho,\n// ubiquitin), log2FC per site\nexport function renderPTMSummaryCard(\n\tgrid: any,\n\tptmEntries: any[],\n\tself: any,\n\topts: { onExpandRender: (holder: any) => void | Promise<void> }\n) {\n\tif (!ptmEntries?.length) return\n\tconst protein = self.state?.config?.tw?.term?.name || ''\n\tconst cfg = getTileConfig(self, 'ptm')\n\tconst title = cfg?.title || 'PTM sites'\n\tconst body = makeTileCard(grid, {\n\t\ttitle,\n\t\tsubtitle: cfg?.subtitle || 'Site-level log2FC along the protein',\n\t\tuniform: true,\n\t\tonExpand: () =>\n\t\t\ttoggleTilePane(self, 'ptm', `${protein ? protein + ' \u2014 ' : ''}${title}`, async (paneBody: any) => {\n\t\t\t\tconst holder = paneBody.append('div').style('padding', '12px 16px')\n\t\t\t\tconst wait = holder.append('div').style('color', '#6b7280').style('font-size', '.85em').text('Loading\u2026')\n\t\t\t\ttry {\n\t\t\t\t\tawait opts.onExpandRender(holder)\n\t\t\t\t} catch (err: any) {\n\t\t\t\t\trenderTileError(holder, err, self)\n\t\t\t\t}\n\t\t\t\twait.remove()\n\t\t\t})\n\t})\n\n\ttype SitePoint = { pos: number; log2fc: number; color: string; entry: TileEntry }\n\tconst byOrganism = new Map<string, SitePoint[]>()\n\tconst typeCounts = new Map<string, { count: number; color: string }>()\n\tfor (const e of ptmEntries) {\n\t\tconst pos = firstModSitePos(e.modSites)\n\t\tconst log2fc = getLog2Ratio(e.foldChange)\n\t\tconst mclass: any = Object.values(e.mclassOverride || {})[0]\n\t\tconst existing = typeCounts.get(e.PTMType)\n\t\tconst color =\n\t\t\texisting?.color || mclass?.color || PTM_FALLBACK_PALETTE[typeCounts.size % PTM_FALLBACK_PALETTE.length]\n\t\tconst tc = existing || { count: 0, color }\n\t\ttc.count++\n\t\ttypeCounts.set(e.PTMType, tc)\n\t\tif (pos === null || log2fc === null) continue\n\t\tconst p = Number(e.fdr)\n\t\tconst entry: TileEntry = {\n\t\t\torganism: e.organism,\n\t\t\tassayName: e.assayName,\n\t\t\tcohortName: e.cohortName,\n\t\t\tdisease: e.disease,\n\t\t\tuniqueIdentifier: e.uniqueIdentifier,\n\t\t\tproteinAccession: e.proteinAccession,\n\t\t\tlog2fc,\n\t\t\tfdr: Number.isFinite(p) && p > 0 ? p : null,\n\t\t\ttestedN: Number(e.testedN) || 0,\n\t\t\tcontrolN: Number(e.controlN) || 0,\n\t\t\tisoformCount: 1,\n\t\t\tcatalog: catalogForEntry(self, e) || {},\n\t\t\tptmType: e.PTMType,\n\t\t\tmodSites: e.modSites\n\t\t}\n\t\tconst arr = byOrganism.get(e.organism) || []\n\t\tarr.push({ pos, log2fc, color, entry })\n\t\tbyOrganism.set(e.organism, arr)\n\t}\n\n\t// one mini strip per organism (site numbering is isoform-specific, so\n\t// organisms never share an x-axis)\n\tconst stripW = 152\n\tconst stripH = 46\n\tconst labelW = 46\n\tfor (const [organism, points] of byOrganism) {\n\t\tconst maxPos = Math.max(...points.map(p => p.pos)) * 1.05\n\t\tconst maxAbs = Math.max(0.2, ...points.map(p => Math.abs(p.log2fc)))\n\t\tconst row = body.append('div').style('display', 'flex').style('align-items', 'center').style('gap', '4px')\n\t\trow\n\t\t\t.append('span')\n\t\t\t.style('flex', `0 0 ${labelW}px`)\n\t\t\t.style('font-size', '.7em')\n\t\t\t.style('color', '#6b7280')\n\t\t\t.text(organism)\n\t\tconst svg = row.append('svg').attr('width', stripW).attr('height', stripH)\n\t\tconst x = scaleLinear()\n\t\t\t.domain([0, maxPos])\n\t\t\t.range([4, stripW - 4])\n\t\tconst y = scaleLinear()\n\t\t\t.domain([-maxAbs, maxAbs])\n\t\t\t.range([stripH - 4, 4])\n\t\tsvg.append('line').attr('x1', 0).attr('x2', stripW).attr('y1', y(0)).attr('y2', y(0)).attr('stroke', '#e5e7eb')\n\t\tfor (const p of points) {\n\t\t\tsvg\n\t\t\t\t.append('line')\n\t\t\t\t.attr('x1', x(p.pos))\n\t\t\t\t.attr('x2', x(p.pos))\n\t\t\t\t.attr('y1', y(0))\n\t\t\t\t.attr('y2', y(p.log2fc))\n\t\t\t\t.attr('stroke', p.color)\n\t\t\t\t.attr('stroke-opacity', 0.4)\n\t\t\tattachEntryBehavior(\n\t\t\t\tsvg\n\t\t\t\t\t.append('circle')\n\t\t\t\t\t.attr('cx', x(p.pos))\n\t\t\t\t\t.attr('cy', y(p.log2fc))\n\t\t\t\t\t.attr('r', 2.5)\n\t\t\t\t\t.attr('fill', p.color)\n\t\t\t\t\t.attr('fill-opacity', 0.8),\n\t\t\t\tp.entry,\n\t\t\t\tself\n\t\t\t)\n\t\t}\n\t}\n\n\tconst foot = body\n\t\t.append('div')\n\t\t.style('display', 'flex')\n\t\t.style('gap', '10px')\n\t\t.style('flex-wrap', 'wrap')\n\t\t.style('font-size', '.7em')\n\t\t.style('color', '#6b7280')\n\t\t.style('margin-top', '4px')\n\tfor (const [type, tc] of typeCounts) {\n\t\tconst item = foot.append('span').style('display', 'inline-flex').style('align-items', 'center').style('gap', '4px')\n\t\titem\n\t\t\t.append('span')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.style('width', '7px')\n\t\t\t.style('height', '7px')\n\t\t\t.style('border-radius', '50%')\n\t\t\t.style('background', tc.color)\n\t\titem.append('span').text(`${tc.count} ${type}`)\n\t}\n}\n\n// header coverage line: which studies detected this protein, sample-set and\n// PTM counts, and the isoform-collapsing note\nexport function renderCoverageLine(holder: any, td: TileData) {\n\tconst parts = [`${td.cohortCount} sample set${td.cohortCount === 1 ? '' : 's'}`]\n\tif (td.ptmSiteCount) parts.push(`${td.ptmSiteCount} PTM site measurement${td.ptmSiteCount === 1 ? '' : 's'}`)\n\tif (td.isoformCount > 1) parts.push(`${td.isoformCount} isoforms (tiles show the most significant per sample set)`)\n\tholder\n\t\t.append('div')\n\t\t.style('font-size', '.8em')\n\t\t.style('color', '#6b7280')\n\t\t.style('margin-bottom', '4px')\n\t\t.text(parts.join(' \u00B7 '))\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["tabsHolder", "brainHolder", "redraw"]
7
+ }
@@ -0,0 +1,98 @@
1
+ import {
2
+ keyupEnter
3
+ } from "./chunk-Q5SK3U2T.js";
4
+ import {
5
+ require_debounce
6
+ } from "./chunk-KV4W2ACA.js";
7
+ import {
8
+ Menu
9
+ } from "./chunk-ELJX3QIQ.js";
10
+ import {
11
+ dofetch,
12
+ dofetch3
13
+ } from "./chunk-RPDVFM7E.js";
14
+ import {
15
+ __toESM
16
+ } from "./chunk-HS5PO5ZQ.js";
17
+
18
+ // src/gene.js
19
+ var import_debounce = __toESM(require_debounce(), 1);
20
+ var tip;
21
+ function gene_searchbox(p) {
22
+ if (!tip) {
23
+ tip = new Menu({ padding: "" });
24
+ tip.d.style("z-index", 1e3);
25
+ }
26
+ const input = p.div.append("input").attr("placeholder", "Search gene").style("width", p.width || "100px");
27
+ const printdiv = p.resultdiv || (p.tip ? p.tip.d : tip.d);
28
+ function fold() {
29
+ if (p.resultdiv) {
30
+ p.resultdiv.selectAll("*").remove();
31
+ } else if (p.tip) {
32
+ p.tip.hide();
33
+ } else {
34
+ tip.hide();
35
+ }
36
+ }
37
+ input.on("keyup", (event) => {
38
+ const str = event.target.value;
39
+ if (str.length <= 1) {
40
+ fold();
41
+ return;
42
+ }
43
+ if (keyupEnter(event)) {
44
+ const hitgene = printdiv.select(".sja_menuoption");
45
+ if (hitgene.size() > 0) {
46
+ p.callback(hitgene.text());
47
+ fold();
48
+ }
49
+ return;
50
+ }
51
+ debouncer();
52
+ });
53
+ input.node().focus();
54
+ function genesearch() {
55
+ dofetch("genelookup", { genome: p.genome, input: input.property("value") }).then((data) => {
56
+ if (data.error) throw data.error;
57
+ if (!data.hits) throw ".hits[] missing";
58
+ if (p.resultdiv) {
59
+ p.resultdiv.selectAll("*").remove();
60
+ } else if (p.tip) {
61
+ p.tip.clear().showunder(input.node());
62
+ } else {
63
+ tip.clear().showunder(input.node());
64
+ }
65
+ for (const name of data.hits) {
66
+ printdiv.append("div").attr("class", "sja_menuoption").text(name).on("click", () => {
67
+ p.callback(name);
68
+ fold();
69
+ });
70
+ }
71
+ }).catch((err) => {
72
+ printdiv.append("div").text(err.message || err);
73
+ if (err.stack) console.log(err.stack);
74
+ });
75
+ }
76
+ const debouncer = (0, import_debounce.debounce)(genesearch, 300);
77
+ }
78
+ function findgenemodel_bysymbol(genome, str) {
79
+ return dofetch3("genelookup", {
80
+ body: {
81
+ deep: 1,
82
+ input: str,
83
+ genome
84
+ }
85
+ }).then((data) => {
86
+ if (data.error) throw data.error;
87
+ if (!data.gmlst || data.gmlst.length == 0) return null;
88
+ return data.gmlst;
89
+ }).catch((e) => {
90
+ throw e;
91
+ });
92
+ }
93
+
94
+ export {
95
+ gene_searchbox,
96
+ findgenemodel_bysymbol
97
+ };
98
+ //# sourceMappingURL=chunk-RNWHB5DI.js.map