@sjcrh/proteinpaint-client 2.224.2 → 2.225.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 (970) hide show
  1. package/dist/2dmaf-4W2R2HXG.js +1362 -0
  2. package/dist/AggMatrixInput-3SQ7UW5L.js +402 -0
  3. package/dist/AggregateMatrix-QI55DXDU.js +37 -0
  4. package/dist/AppHeader-C26OHIUQ.js +826 -0
  5. package/dist/BoxPlot-27OYBGJ3.js +1247 -0
  6. package/dist/CorrelationVolcano-XIMXCSHG.js +613 -0
  7. package/dist/Cuminc-737O733E.js +1217 -0
  8. package/dist/DE-EDTGDY6L.js +85 -0
  9. package/dist/DEinput-ZN76I5M5.js +479 -0
  10. package/dist/DM-25IRANGL.js +86 -0
  11. package/dist/DifferentialAnalysis-7HQYEA5T.js +236 -0
  12. package/dist/Disco-4YNXWGRX.js +3445 -0
  13. package/dist/Disco-4YNXWGRX.js.map +7 -0
  14. package/dist/Disco.UI-67HBGS4Y.js +239 -0
  15. package/dist/DmrPlot-KZVDVPUT.js +366 -0
  16. package/dist/DmrPlot-KZVDVPUT.js.map +7 -0
  17. package/dist/GB-HT3B7Y7R.js +1388 -0
  18. package/dist/GSEA-CMFMNK5Y.js +870 -0
  19. package/dist/GeneExpInput-HMGV23E7.js +38 -0
  20. package/dist/Geomap-RB4SGVPC.js +80 -0
  21. package/dist/HicApp-YRP6YQFA.js +2240 -0
  22. package/dist/IDCViewer-OUSOZNSR.js +10810 -0
  23. package/dist/NumBinaryEditor-YFQDPBB6.js +274 -0
  24. package/dist/NumBinaryEditor.unit.spec-6YC5PCPK.js +308 -0
  25. package/dist/NumContEditor-EH6MA2RW.js +100 -0
  26. package/dist/NumContEditor.unit.spec-Q2JBVIRT.js +160 -0
  27. package/dist/NumCustomBinEditor-USQA3BC6.js +29 -0
  28. package/dist/NumCustomBinEditor.unit.spec-PE2HFRCK.js +393 -0
  29. package/dist/NumDiscreteEditor-VKE4WT24.js +165 -0
  30. package/dist/NumDiscreteEditor.unit.spec-JNG673LE.js +229 -0
  31. package/dist/NumRegularBinEditor-KCCPGJSX.js +29 -0
  32. package/dist/NumRegularBinEditor.unit.spec-4BLKQRZU.js +274 -0
  33. package/dist/NumSplineEditor-4YELHGUO.js +205 -0
  34. package/dist/NumSplineEditor.unit.spec-CKHHK6GH.js +220 -0
  35. package/dist/NumericDensity-LCFM7VSY.js +29 -0
  36. package/dist/NumericDensity.unit.spec-R4ARTJ5I.js +414 -0
  37. package/dist/NumericHandler-2OHRSY6Z.js +30 -0
  38. package/dist/NumericHandler.unit.spec-M3TRIFZW.js +225 -0
  39. package/dist/ProteomeInput-G2EP6QH2.js +610 -0
  40. package/dist/Regression-2HKE6C7F.js +1412 -0
  41. package/dist/RunChart2-WRVW63PB.js +744 -0
  42. package/dist/SC-37RDNFGH.js +1290 -0
  43. package/dist/Violin-KD6FPWC7.js +1105 -0
  44. package/dist/Violin-KD6FPWC7.js.map +7 -0
  45. package/dist/Volcano-U62TCDEL.js +2748 -0
  46. package/dist/Volcano-U62TCDEL.js.map +7 -0
  47. package/dist/Wsi-PB77PVAA.js +637 -0
  48. package/dist/aboutSunburst-5Z24ODIN.js +93 -0
  49. package/dist/adSandbox-AFORHU3V.js +29 -0
  50. package/dist/animatedBubbleChart-F75OBRZW.js +542 -0
  51. package/dist/app-4RZ76DZZ.js +28 -0
  52. package/dist/app-IHE3RNI5.js +38 -0
  53. package/dist/app.js +14 -14
  54. package/dist/bam-IIRZX3IK.js +872 -0
  55. package/dist/barchart-UIHRIMOE.js +38 -0
  56. package/dist/barchart2-DG3S6FDJ.js +305 -0
  57. package/dist/block-COZKGPXY.js +6203 -0
  58. package/dist/block.init-UBXYVTPQ.js +29 -0
  59. package/dist/block.mds.expressionrank-KSXPPPGR.js +350 -0
  60. package/dist/block.mds.geneboxplot-5RDFDVDE.js +819 -0
  61. package/dist/block.mds.junction-LMM24KXJ.js +1534 -0
  62. package/dist/block.mds.svcnv-4XRXZMPS.js +6325 -0
  63. package/dist/block.svg-VAKLMPMS.js +155 -0
  64. package/dist/block.tk.aicheck-6GHZK2YY.js +274 -0
  65. package/dist/block.tk.bam-7H3BSHR2.js +1906 -0
  66. package/dist/block.tk.bigwig.ui-KX2GACY5.js +202 -0
  67. package/dist/block.tk.hicstraw-OOWEWGMF.js +814 -0
  68. package/dist/block.tk.junction-U7W36OZA.js +2353 -0
  69. package/dist/block.tk.junction.textmatrixui-PAMSBYZT.js +190 -0
  70. package/dist/block.tk.ld-RFQPDG7Q.js +90 -0
  71. package/dist/block.tk.menu-JDJU2OGK.js +1050 -0
  72. package/dist/block.tk.pgv-G2UFCQUT.js +934 -0
  73. package/dist/brainImaging-ASAHWZJH.js +550 -0
  74. package/dist/brainRegions-XTJDLUU4.js +213 -0
  75. package/dist/bubbleHeatmap-UPUITTU6.js +374 -0
  76. package/dist/cellTypeBubbleHeatmap-25SOXC2Q.js +274 -0
  77. package/dist/chunk-2N345NXD.js +5790 -0
  78. package/dist/chunk-2N345NXD.js.map +7 -0
  79. package/dist/chunk-2ZYAC3DC.js +299 -0
  80. package/dist/chunk-325X3T7G.js +692 -0
  81. package/dist/chunk-3UXHTSZJ.js +159 -0
  82. package/dist/chunk-4DFKK46J.js +96 -0
  83. package/dist/chunk-54W2RWRB.js +123 -0
  84. package/dist/chunk-5QGC2624.js +54 -0
  85. package/dist/chunk-5YKXYWP3.js +480 -0
  86. package/dist/chunk-6B4AME6E.js +4389 -0
  87. package/dist/chunk-6H4FFHFQ.js +82 -0
  88. package/dist/chunk-6PVVV3UW.js +37 -0
  89. package/dist/chunk-72QBXULB.js +102 -0
  90. package/dist/chunk-7APH7QLC.js +141 -0
  91. package/dist/chunk-7HBAALWJ.js +2685 -0
  92. package/dist/chunk-7UK7CU4F.js +398 -0
  93. package/dist/chunk-7ZTUUKLX.js +203 -0
  94. package/dist/chunk-A7GCFL3R.js +30 -0
  95. package/dist/chunk-AGWIWLOP.js +14 -0
  96. package/dist/chunk-CHQ43UJQ.js +397 -0
  97. package/dist/chunk-CQWR4QZO.js +70 -0
  98. package/dist/chunk-D6TLBMIX.js +1339 -0
  99. package/dist/chunk-DDABG5BR.js +328 -0
  100. package/dist/chunk-DDABG5BR.js.map +7 -0
  101. package/dist/chunk-DOC3HBOV.js +119 -0
  102. package/dist/chunk-DR5JLHTB.js +35 -0
  103. package/dist/chunk-E2Z4X6C2.js +55 -0
  104. package/dist/chunk-E4WAVMI5.js +194 -0
  105. package/dist/chunk-EM76Y3HQ.js +1253 -0
  106. package/dist/chunk-ES7XNERS.js +468 -0
  107. package/dist/chunk-F2RTD23W.js +848 -0
  108. package/dist/chunk-FEE2HAON.js +418 -0
  109. package/dist/chunk-FIWVGOSE.js +54 -0
  110. package/dist/chunk-FT5HOBHJ.js +31 -0
  111. package/dist/chunk-G5BQJGRA.js +2799 -0
  112. package/dist/chunk-GAYYXHOG.js +257 -0
  113. package/dist/chunk-GDIKNIEA.js +263 -0
  114. package/dist/chunk-GIZTZCE5.js +195 -0
  115. package/dist/chunk-GONC3LVY.js +626 -0
  116. package/dist/chunk-HGC4EON3.js +348 -0
  117. package/dist/chunk-HM23KADV.js +281 -0
  118. package/dist/chunk-I7R6YROK.js +267 -0
  119. package/dist/chunk-I7R6YROK.js.map +7 -0
  120. package/dist/chunk-JWX6GEWQ.js +276 -0
  121. package/dist/chunk-K4LZR3HU.js +56 -0
  122. package/dist/chunk-K55KOEI6.js +6375 -0
  123. package/dist/chunk-K7YJILBY.js +5254 -0
  124. package/dist/chunk-K7YJILBY.js.map +7 -0
  125. package/dist/chunk-KLJM7HE5.js +2349 -0
  126. package/dist/chunk-LFH5VSSF.js +176 -0
  127. package/dist/chunk-LVFWXUUX.js +34 -0
  128. package/dist/chunk-LVFWXUUX.js.map +7 -0
  129. package/dist/chunk-MBWG3QHI.js +1219 -0
  130. package/dist/chunk-MZTVOOR6.js +56 -0
  131. package/dist/chunk-N2JOZ3QD.js +444 -0
  132. package/dist/chunk-NG2U3VHX.js +170 -0
  133. package/dist/chunk-NUGYNLTL.js +2334 -0
  134. package/dist/chunk-OCOB7XJW.js +2008 -0
  135. package/dist/chunk-OGDBTL5C.js +54 -0
  136. package/dist/chunk-OOVVKQSD.js +26747 -0
  137. package/dist/chunk-OOVVKQSD.js.map +7 -0
  138. package/dist/chunk-OVXHMJJJ.js +59 -0
  139. package/dist/chunk-PAF5KZCR.js +2932 -0
  140. package/dist/chunk-PI2MCZXG.js +140 -0
  141. package/dist/chunk-PPICALUF.js +2102 -0
  142. package/dist/chunk-QFOT5WAZ.js +134 -0
  143. package/dist/chunk-QFQJO7LD.js +472 -0
  144. package/dist/chunk-QFQJO7LD.js.map +7 -0
  145. package/dist/chunk-QGCB5AKN.js +243 -0
  146. package/dist/chunk-QRZRAMHA.js +184 -0
  147. package/dist/chunk-RGOZHZCN.js +103 -0
  148. package/dist/chunk-RJKY22D4.js +240 -0
  149. package/dist/chunk-RZ2HG7G3.js +102 -0
  150. package/dist/chunk-SI2KSG6E.js +379 -0
  151. package/dist/chunk-U4PLKSSS.js +50 -0
  152. package/dist/chunk-U7G65D2G.js +466 -0
  153. package/dist/chunk-UU3FWU6D.js +305 -0
  154. package/dist/chunk-UXLT7W2N.js +562 -0
  155. package/dist/chunk-VHQDN3OA.js +182 -0
  156. package/dist/chunk-VTMNHAFC.js +30 -0
  157. package/dist/chunk-W3K7KLIR.js +217 -0
  158. package/dist/chunk-WSLS55SH.js +296 -0
  159. package/dist/chunk-WUCIHN7D.js +382 -0
  160. package/dist/chunk-XQIB27PB.js +516 -0
  161. package/dist/chunk-XSBGICK5.js +652 -0
  162. package/dist/chunk-YHW2RAAG.js +274 -0
  163. package/dist/chunk-Z7CCL464.js +550 -0
  164. package/dist/chunk-ZBNPXXMK.js +42 -0
  165. package/dist/chunk-ZNHC46CT.js +340 -0
  166. package/dist/chunk-ZSTD6Y3K.js +255 -0
  167. package/dist/chunk-ZSTD6Y3K.js.map +7 -0
  168. package/dist/cohort-ZFGFEEBD.js +66 -0
  169. package/dist/cohortSunburst-EEPGV2RB.js +402 -0
  170. package/dist/condition-7EWFLQSO.js +323 -0
  171. package/dist/controls-QHDSDWKI.js +30 -0
  172. package/dist/controls.config-LBSCZ6GP.js +30 -0
  173. package/dist/correlation-IJQJPNNP.js +91 -0
  174. package/dist/customdata.inputui-TZGX2CUD.js +280 -0
  175. package/dist/dataDownload-33EWD3AD.js +326 -0
  176. package/dist/databrowser.ui-YNKDTAAN.js +424 -0
  177. package/dist/dictionary-OTR6Z5EZ.js +109 -0
  178. package/dist/dnaMethylation-LQTCTOOE.js +29 -0
  179. package/dist/dnaMethylation.integration.spec-U5VQYAK3.js +194 -0
  180. package/dist/dofetch-HLG7G7RX.js +49 -0
  181. package/dist/e2pca-AXDPYR7U.js +340 -0
  182. package/dist/ep-4WK46CH7.js +1247 -0
  183. package/dist/expclust.gdc.spec-CYGWGREQ.js +298 -0
  184. package/dist/facet-IZSSZDHK.js +556 -0
  185. package/dist/gb-AUZBUZFM.js +77 -0
  186. package/dist/geneExpClustering-AQBFLXLP.js +240 -0
  187. package/dist/geneExpression-HDJVPVPK.js +309 -0
  188. package/dist/geneExpression-V4JMTMLI.js +29 -0
  189. package/dist/geneExpression.unit.spec-KFMSDVMX.js +151 -0
  190. package/dist/geneORA-LDFFSEMQ.js +269 -0
  191. package/dist/geneRanking-IVKDSNDV.js +544 -0
  192. package/dist/geneVariant-7X7EEUDW.js +289 -0
  193. package/dist/geneVariant-TK3FJ22L.js +32 -0
  194. package/dist/geneVariant.integration.spec-ZHAFWQ2O.js +672 -0
  195. package/dist/genefusion.ui-U5YPVXAF.js +299 -0
  196. package/dist/geneset-NSHQ2NDR.js +199 -0
  197. package/dist/genomeBrowser.spec-HP4OQPCV.js +272 -0
  198. package/dist/grin2-5WKONQPG.js +66 -0
  199. package/dist/grin2-V2ZBOJBO.js +945 -0
  200. package/dist/hierCluster-7IOPNYFN.js +55 -0
  201. package/dist/hierCluster-IDBCUKHJ.js +51 -0
  202. package/dist/hierCluster.config-Z4NRL5P5.js +32 -0
  203. package/dist/hierCluster.integration.spec-PHEXOGPI.js +479 -0
  204. package/dist/hierCluster.interactivity-NHZ5EPBV.js +45 -0
  205. package/dist/hierCluster.renderers-WXJUMDFN.js +18 -0
  206. package/dist/imagePlot-NMNCAYS7.js +152 -0
  207. package/dist/importPlot-HZML5XMJ.js +8 -0
  208. package/dist/isoformExpression-4IU4AUQ2.js +31 -0
  209. package/dist/isoformExpression.unit.spec-KKMKU5Z2.js +233 -0
  210. package/dist/junction-EXA2WANI.js +32 -0
  211. package/dist/junction.customTerm-LQYKCZX4.js +15 -0
  212. package/dist/junction.unit.spec-H3FGTLEP.js +178 -0
  213. package/dist/launch.adhoc-YA6FRHSC.js +33 -0
  214. package/dist/leftlabel.sample-N6M4OL2X.js +254 -0
  215. package/dist/leftlabel.sample-N6M4OL2X.js.map +7 -0
  216. package/dist/lollipop-EWLGYDIR.js +162 -0
  217. package/dist/maf-PXMHR3PY.js +451 -0
  218. package/dist/maftimeline-QFKT7PW2.js +583 -0
  219. package/dist/matrix-KASG3KIY.js +55 -0
  220. package/dist/matrix-VSX63V3L.js +50 -0
  221. package/dist/matrix.cells-7TTOQRWU.js +25 -0
  222. package/dist/matrix.config-U3I726EC.js +33 -0
  223. package/dist/matrix.data-Y4DXSR2P.js +22 -0
  224. package/dist/matrix.groups-C5CHYWQZ.js +25 -0
  225. package/dist/matrix.integration.spec-4KWLFXMY.js +3156 -0
  226. package/dist/matrix.interactivity-JK6URU6Z.js +33 -0
  227. package/dist/matrix.layout-KKOA7GGL.js +35 -0
  228. package/dist/matrix.legend-3FFHXTLX.js +19 -0
  229. package/dist/matrix.renderers-F7EWYQWL.js +30 -0
  230. package/dist/matrix.serieses-I4JWWONC.js +18 -0
  231. package/dist/matrix.sort-5JTCLBPB.js +25 -0
  232. package/dist/matrix.sort.unit.spec-EW53F5DT.js +464 -0
  233. package/dist/matrix.sorterUi-Z4JDY7VW.js +15 -0
  234. package/dist/matrix.sorterUi.unit.spec-OGTYY6GC.js +334 -0
  235. package/dist/matrix.unit.spec-RXKKHRUN.js +146 -0
  236. package/dist/mavb-YI2WEGFI.js +726 -0
  237. package/dist/mds.samplescatterplot-GGJE67MF.js +1545 -0
  238. package/dist/mds.survivalplot-A6DS6FHO.js +472 -0
  239. package/dist/multivalue-3WCYDVL3.js +79 -0
  240. package/dist/numericDictTermCluster-AOTEPNEI.js +62 -0
  241. package/dist/oncomatrix-BB4SB5AJ.js +286 -0
  242. package/dist/oncomatrix.spec-M4ZC3KFC.js +439 -0
  243. package/dist/plot.2dvaf-QUD743E6.js +368 -0
  244. package/dist/plot.app-35I4DJXK.js +32 -0
  245. package/dist/plot.barplot-7OL4HWZB.js +93 -0
  246. package/dist/plot.boxplot-N2VSPDYA.js +142 -0
  247. package/dist/plot.brainImaging-4PIAFROV.js +51 -0
  248. package/dist/plot.disco-6CFYMWU3.js +100 -0
  249. package/dist/plot.disco-6CFYMWU3.js.map +7 -0
  250. package/dist/plot.ssgq-MGUBQNWE.js +130 -0
  251. package/dist/plot.vaf2cov-KVI2GMG4.js +249 -0
  252. package/dist/polar2-IGAOHGPE.js +228 -0
  253. package/dist/profileForms-MW7JQURG.js +937 -0
  254. package/dist/profilePlot-OVOSFR47.js +45 -0
  255. package/dist/proteinView-LFP5YYMK.js +1346 -0
  256. package/dist/proteomeCohortCompare-ONYL2UN4.js +866 -0
  257. package/dist/proteomeCohortCompare-ONYL2UN4.js.map +7 -0
  258. package/dist/pseudbulk.unit.spec-CGV4JTEK.js +82 -0
  259. package/dist/pseudobulk-WFCQX5KR.js +31 -0
  260. package/dist/qualitative-4SLUE6BW.js +241 -0
  261. package/dist/qualitative-6H674T7D.js +34 -0
  262. package/dist/radar2-QXHO2MQA.js +323 -0
  263. package/dist/radarFacility2-JCVOYMH4.js +331 -0
  264. package/dist/rememberedGvQ.unit.spec-Q3UZJPE2.js +210 -0
  265. package/dist/render-IIFS3Y2N.js +29 -0
  266. package/dist/report-NFBB3PUI.js +213 -0
  267. package/dist/sampleView-XQXKIPC7.js +39 -0
  268. package/dist/samplelst-RIC5E2W4.js +114 -0
  269. package/dist/samplematrix-WLCFCPBR.js +2188 -0
  270. package/dist/sc-TXRF7D6F.js +77 -0
  271. package/dist/scatter-JUGGPR4B.js +919 -0
  272. package/dist/scatter-YQ47446T.js +84 -0
  273. package/dist/selectGenomeWithTklst-2ELB6HQK.js +125 -0
  274. package/dist/singleCellCellType-DUTH4SZF.js +29 -0
  275. package/dist/singleCellCellType.unit.spec-PWP6I5PZ.js +150 -0
  276. package/dist/singleCellGeneExpression-3563T7GE.js +29 -0
  277. package/dist/singleCellGeneExpression.unit.spec-66IDCFJC.js +144 -0
  278. package/dist/singleCellNumericValue-XVQTKLTS.js +29 -0
  279. package/dist/singleCellNumericValue.unit.spec-LJSTGKNS.js +412 -0
  280. package/dist/singleCellPlot-MKYJJXSG.js +44 -0
  281. package/dist/singlecell-ANCWPAAO.js +1562 -0
  282. package/dist/singlecell-KMRVFOC5.js +77 -0
  283. package/dist/snp-B5UHGWVD.js +29 -0
  284. package/dist/snp.unit.spec-YAHITASM.js +167 -0
  285. package/dist/snplocus-MLGICRGT.js +200 -0
  286. package/dist/snplst-DZPIQEKI.js +36 -0
  287. package/dist/spliceevent.a53ss.diagram-4NYPSFC2.js +142 -0
  288. package/dist/spliceevent.exonskip.diagram-WLLTP7NP.js +274 -0
  289. package/dist/spliceevent.noeventdiagram-NOSO752Y.js +451 -0
  290. package/dist/ssGSEA-4DVY6Z5U.js +29 -0
  291. package/dist/ssGSEA.unit.spec-UDXV4Q7S.js +79 -0
  292. package/dist/stattable-T5X76Q32.js +112 -0
  293. package/dist/studyCatalog-O3EPBJPW.js +457 -0
  294. package/dist/summarizeCnvGeneexp-ST36TPEJ.js +154 -0
  295. package/dist/summarizeGeneexpSurvival-AZOFCBMT.js +101 -0
  296. package/dist/summarizeMutationCnv-HRCW6BYV.js +155 -0
  297. package/dist/summarizeMutationDiagnosis-RQQO2MOR.js +31 -0
  298. package/dist/summarizeMutationSurvival-UHSUJ7FU.js +95 -0
  299. package/dist/summary-ZMM5ET67.js +40 -0
  300. package/dist/summary.integration.spec-GW5UGDDU.js +405 -0
  301. package/dist/summaryInput-ZO5TPARQ.js +238 -0
  302. package/dist/sunburst-6VJS2SUY.js +34 -0
  303. package/dist/sunburst-LXRG2SFE.js +274 -0
  304. package/dist/survival-QXHY7JRR.js +49 -0
  305. package/dist/survival-U6J6KFN2.js +1248 -0
  306. package/dist/survival.integration.spec-HN3LL6IY.js +609 -0
  307. package/dist/svgraph-CVI27CTM.js +1377 -0
  308. package/dist/svmr-GZHAP5IV.js +3834 -0
  309. package/dist/swimmer-M4JGBO72.js +993 -0
  310. package/dist/table-QO22C2ER.js +192 -0
  311. package/dist/termCollection-EN73BZV5.js +247 -0
  312. package/dist/termCollection-KWNFLRWJ.js +29 -0
  313. package/dist/termCollection.unit.spec-Z27AZUE6.js +295 -0
  314. package/dist/termCollectionFractionSelection-Q7QFEPKA.js +38 -0
  315. package/dist/termCollectionFractionSelection.unit.spec-PYLIFZN5.js +184 -0
  316. package/dist/tk-BISILMKL.js +1198 -0
  317. package/dist/tk-BISILMKL.js.map +7 -0
  318. package/dist/tk-WVEDS5OU.js +38 -0
  319. package/dist/tp.ui-CG36YXBY.js +1453 -0
  320. package/dist/tvs.categorical-GCJISWBS.js +28 -0
  321. package/dist/tvs.condition-YTCVMB3I.js +160 -0
  322. package/dist/tvs.dt-UCSZ5S44.js +34 -0
  323. package/dist/tvs.dtcnv.categorical-KYB6XPL3.js +31 -0
  324. package/dist/tvs.dtcnv.continuous-MJWJNMKJ.js +72 -0
  325. package/dist/tvs.dtfusion-IZCEMTH5.js +31 -0
  326. package/dist/tvs.dtitd-DZ4WWGNO.js +31 -0
  327. package/dist/tvs.dtsnvindel-PMJCV4E7.js +31 -0
  328. package/dist/tvs.dtsv-5K2RNWDH.js +31 -0
  329. package/dist/tvs.multivalue-6NSC6JPR.js +84 -0
  330. package/dist/tvs.numeric-7U2NDY4A.js +32 -0
  331. package/dist/tvs.samplelst-3SIYTFWZ.js +95 -0
  332. package/dist/tvs.survival-Q3F5SLBW.js +110 -0
  333. package/dist/tvs.termCollection-OR73LBNX.js +118 -0
  334. package/dist/vocabulary-RWRAQ4VJ.js +32 -0
  335. package/dist/wsi.direct-HABLR3IF.js +11515 -0
  336. package/package.json +3 -3
  337. package/dist/2dmaf-OWA6REJ5.js +0 -1362
  338. package/dist/AggMatrixInput-5GC33U5A.js +0 -402
  339. package/dist/AggregateMatrix-CMJFO53B.js +0 -37
  340. package/dist/AppHeader-KJCXF35P.js +0 -826
  341. package/dist/BoxPlot-NZTO6CLZ.js +0 -1247
  342. package/dist/CorrelationVolcano-GHTPFM2V.js +0 -613
  343. package/dist/Cuminc-HHBYFFFM.js +0 -1217
  344. package/dist/DE-VVKIMVXD.js +0 -85
  345. package/dist/DEinput-F7HSM2SO.js +0 -479
  346. package/dist/DM-UBCIWZEY.js +0 -86
  347. package/dist/DifferentialAnalysis-UUXXMOQS.js +0 -236
  348. package/dist/Disco-NHXU7LG7.js +0 -3384
  349. package/dist/Disco-NHXU7LG7.js.map +0 -7
  350. package/dist/Disco.UI-GSSSK4YJ.js +0 -239
  351. package/dist/DmrPlot-QFSU62PY.js +0 -344
  352. package/dist/DmrPlot-QFSU62PY.js.map +0 -7
  353. package/dist/GB-CIQGJBJP.js +0 -1388
  354. package/dist/GSEA-3GVFEJTX.js +0 -870
  355. package/dist/GeneExpInput-CFU3Q7FM.js +0 -38
  356. package/dist/Geomap-NMVFA77Q.js +0 -80
  357. package/dist/HicApp-4FCGUUJD.js +0 -2240
  358. package/dist/IDCViewer-WFB6AXHD.js +0 -10810
  359. package/dist/NumBinaryEditor-4WUDJRSU.js +0 -274
  360. package/dist/NumBinaryEditor.unit.spec-MV53GTGQ.js +0 -308
  361. package/dist/NumContEditor-U4R6HPDM.js +0 -100
  362. package/dist/NumContEditor.unit.spec-J4ANPBSF.js +0 -160
  363. package/dist/NumCustomBinEditor-QRGDNFP4.js +0 -29
  364. package/dist/NumCustomBinEditor.unit.spec-PPF233FW.js +0 -393
  365. package/dist/NumDiscreteEditor-LNK4KHSL.js +0 -165
  366. package/dist/NumDiscreteEditor.unit.spec-QY6O62JU.js +0 -229
  367. package/dist/NumRegularBinEditor-XTINNM5L.js +0 -29
  368. package/dist/NumRegularBinEditor.unit.spec-FSLARHOC.js +0 -274
  369. package/dist/NumSplineEditor-YSQTKBFA.js +0 -205
  370. package/dist/NumSplineEditor.unit.spec-QNITPY7R.js +0 -220
  371. package/dist/NumericDensity-J5WS74JZ.js +0 -29
  372. package/dist/NumericDensity.unit.spec-4WQWLSSJ.js +0 -414
  373. package/dist/NumericHandler-ZEWC25U2.js +0 -30
  374. package/dist/NumericHandler.unit.spec-A3G5FWGV.js +0 -225
  375. package/dist/ProteomeInput-7DXGQIOO.js +0 -610
  376. package/dist/Regression-VQ5MC6KW.js +0 -1412
  377. package/dist/RunChart2-B33CQUXH.js +0 -744
  378. package/dist/SC-LEVWXS4P.js +0 -1290
  379. package/dist/Violin-L43OHY63.js +0 -1105
  380. package/dist/Violin-L43OHY63.js.map +0 -7
  381. package/dist/Volcano-NTXVM3UR.js +0 -2657
  382. package/dist/Volcano-NTXVM3UR.js.map +0 -7
  383. package/dist/Wsi-VPF6RX3B.js +0 -637
  384. package/dist/aboutSunburst-NGH3V74S.js +0 -93
  385. package/dist/adSandbox-VOAL4P5A.js +0 -29
  386. package/dist/animatedBubbleChart-HKOGYPSS.js +0 -542
  387. package/dist/app-AZLUP2BA.js +0 -28
  388. package/dist/app-JJPKGBEV.js +0 -38
  389. package/dist/bam-GIZSH2MF.js +0 -872
  390. package/dist/barchart-CVTXLIIQ.js +0 -38
  391. package/dist/barchart2-XYC6WITL.js +0 -305
  392. package/dist/block-DXRSU62C.js +0 -6203
  393. package/dist/block.init-U4Y6ROG4.js +0 -29
  394. package/dist/block.mds.expressionrank-BB26LVTM.js +0 -350
  395. package/dist/block.mds.geneboxplot-VVKEU3SL.js +0 -819
  396. package/dist/block.mds.junction-XUZX6EAQ.js +0 -1534
  397. package/dist/block.mds.svcnv-WDSACPWG.js +0 -6325
  398. package/dist/block.svg-T5BA7VLS.js +0 -155
  399. package/dist/block.tk.aicheck-3VN2RDPD.js +0 -274
  400. package/dist/block.tk.bam-5XZ3N4Y7.js +0 -1906
  401. package/dist/block.tk.bigwig.ui-JODVOS4R.js +0 -202
  402. package/dist/block.tk.hicstraw-AFNWJ2YP.js +0 -814
  403. package/dist/block.tk.junction-T2G6XEVS.js +0 -2353
  404. package/dist/block.tk.junction.textmatrixui-FL5MZH7K.js +0 -190
  405. package/dist/block.tk.ld-JKBXDOB5.js +0 -90
  406. package/dist/block.tk.menu-2X4BN7BN.js +0 -1050
  407. package/dist/block.tk.pgv-ASUVEGQF.js +0 -934
  408. package/dist/brainImaging-27442GMQ.js +0 -550
  409. package/dist/brainRegions-3367RQCU.js +0 -213
  410. package/dist/bubbleHeatmap-IOVS6SHX.js +0 -374
  411. package/dist/cellTypeBubbleHeatmap-7XJP6B5W.js +0 -274
  412. package/dist/chunk-2CTAWHGB.js +0 -56
  413. package/dist/chunk-2ESAB2PP.js +0 -848
  414. package/dist/chunk-2GP3LH7J.js +0 -194
  415. package/dist/chunk-2UGYE6EJ.js +0 -54
  416. package/dist/chunk-3TJBSAIO.js +0 -170
  417. package/dist/chunk-46KQE4DV.js +0 -418
  418. package/dist/chunk-4ICGMPPE.js +0 -56
  419. package/dist/chunk-4RQTQDHF.js +0 -5214
  420. package/dist/chunk-4RQTQDHF.js.map +0 -7
  421. package/dist/chunk-5FD6NRGE.js +0 -472
  422. package/dist/chunk-5FD6NRGE.js.map +0 -7
  423. package/dist/chunk-5JBOGNSG.js +0 -159
  424. package/dist/chunk-5OWPH4IH.js +0 -626
  425. package/dist/chunk-63TCOVAK.js +0 -30
  426. package/dist/chunk-7ONTCJWB.js +0 -1219
  427. package/dist/chunk-7Q4KAFCS.js +0 -281
  428. package/dist/chunk-7UXV4IX5.js +0 -102
  429. package/dist/chunk-7ZCYC2DQ.js +0 -70
  430. package/dist/chunk-AQSZLUDV.js +0 -184
  431. package/dist/chunk-BBA5MAFS.js +0 -240
  432. package/dist/chunk-BNJC6OX5.js +0 -2102
  433. package/dist/chunk-BOQYGAYA.js +0 -119
  434. package/dist/chunk-C4YACFGH.js +0 -692
  435. package/dist/chunk-CKO54XWB.js +0 -54
  436. package/dist/chunk-COWLQ74R.js +0 -82
  437. package/dist/chunk-CU434U4N.js +0 -35
  438. package/dist/chunk-CZOJUH3C.js +0 -30
  439. package/dist/chunk-D22DJFFZ.js +0 -254
  440. package/dist/chunk-D22DJFFZ.js.map +0 -7
  441. package/dist/chunk-D2YPS46O.js +0 -266
  442. package/dist/chunk-D2YPS46O.js.map +0 -7
  443. package/dist/chunk-DVSTBGZT.js +0 -182
  444. package/dist/chunk-EIO6DMIQ.js +0 -31
  445. package/dist/chunk-EM56Y4X6.js +0 -2685
  446. package/dist/chunk-F6CYUMSM.js +0 -37
  447. package/dist/chunk-FUTHP5J4.js +0 -274
  448. package/dist/chunk-G5GFCBJT.js +0 -217
  449. package/dist/chunk-GOL6A746.js +0 -96
  450. package/dist/chunk-GVLXSPTN.js +0 -141
  451. package/dist/chunk-HNU4RYI5.js +0 -203
  452. package/dist/chunk-HTIZFNBC.js +0 -4389
  453. package/dist/chunk-HUF5BTO6.js +0 -562
  454. package/dist/chunk-HWP3U2VY.js +0 -382
  455. package/dist/chunk-JEXS72M5.js +0 -550
  456. package/dist/chunk-JNIYPQWY.js +0 -176
  457. package/dist/chunk-K5RCZIZN.js +0 -2799
  458. package/dist/chunk-KA3KYNOP.js +0 -195
  459. package/dist/chunk-KGFH5VTH.js +0 -444
  460. package/dist/chunk-KTRDLHCP.js +0 -397
  461. package/dist/chunk-L6TGKNRA.js +0 -516
  462. package/dist/chunk-LN4KNFOQ.js +0 -55
  463. package/dist/chunk-M4ML4ACA.js +0 -134
  464. package/dist/chunk-MIDVLNN3.js +0 -123
  465. package/dist/chunk-MUVXIOXM.js +0 -276
  466. package/dist/chunk-N2RAPA7D.js +0 -42
  467. package/dist/chunk-N6AHRJAM.js +0 -1339
  468. package/dist/chunk-NB4UU4DH.js +0 -54
  469. package/dist/chunk-NGG4737W.js +0 -296
  470. package/dist/chunk-O4BDFBVK.js +0 -1253
  471. package/dist/chunk-OGU7IDV7.js +0 -102
  472. package/dist/chunk-OT2DMA2D.js +0 -652
  473. package/dist/chunk-OVO6NYUR.js +0 -480
  474. package/dist/chunk-OXRZSZKA.js +0 -2008
  475. package/dist/chunk-QMR3QMJG.js +0 -50
  476. package/dist/chunk-QUVGLTCF.js +0 -103
  477. package/dist/chunk-R2H22S4J.js +0 -5786
  478. package/dist/chunk-R2H22S4J.js.map +0 -7
  479. package/dist/chunk-RCLCEA55.js +0 -305
  480. package/dist/chunk-RCVA2RWU.js +0 -466
  481. package/dist/chunk-RSCSTOUN.js +0 -6375
  482. package/dist/chunk-SCXWXLMR.js +0 -237
  483. package/dist/chunk-SCXWXLMR.js.map +0 -7
  484. package/dist/chunk-SQUMXZXI.js +0 -257
  485. package/dist/chunk-T2DORAV4.js +0 -398
  486. package/dist/chunk-TBXJ2CUA.js +0 -14
  487. package/dist/chunk-TQLHKDNS.js +0 -140
  488. package/dist/chunk-TTSKLWP7.js +0 -2932
  489. package/dist/chunk-VQD6GZMU.js +0 -59
  490. package/dist/chunk-VZBRG6HQ.js +0 -263
  491. package/dist/chunk-WQHL6SR3.js +0 -468
  492. package/dist/chunk-X7JGAQ5N.js +0 -340
  493. package/dist/chunk-Z6ZFRHXK.js +0 -2334
  494. package/dist/chunk-ZCY72DDM.js +0 -379
  495. package/dist/chunk-ZHY7ZHWC.js +0 -243
  496. package/dist/chunk-ZIMAIUZD.js +0 -26744
  497. package/dist/chunk-ZIMAIUZD.js.map +0 -7
  498. package/dist/chunk-ZLQ6PAI6.js +0 -299
  499. package/dist/chunk-ZUG4EY4T.js +0 -348
  500. package/dist/chunk-ZUXXBQ7D.js +0 -2349
  501. package/dist/cohort-2DQOQ5AO.js +0 -66
  502. package/dist/cohortSunburst-W6XC7VD6.js +0 -402
  503. package/dist/condition-3A7I5UQA.js +0 -323
  504. package/dist/controls-G5WYBX4P.js +0 -30
  505. package/dist/controls.config-TAFGM2S2.js +0 -30
  506. package/dist/correlation-K4EOOQJU.js +0 -91
  507. package/dist/customdata.inputui-E7RRN3KY.js +0 -280
  508. package/dist/dataDownload-OXZGAE5R.js +0 -326
  509. package/dist/databrowser.ui-IPUF6LUC.js +0 -424
  510. package/dist/dictionary-MUNAUI43.js +0 -109
  511. package/dist/dnaMethylation-SOV4HBAX.js +0 -29
  512. package/dist/dnaMethylation.integration.spec-T4KKTMRL.js +0 -194
  513. package/dist/dofetch-2CR2TVWC.js +0 -49
  514. package/dist/e2pca-EIOJCV4O.js +0 -340
  515. package/dist/ep-5QX3CW6D.js +0 -1247
  516. package/dist/expclust.gdc.spec-TNHPZLYQ.js +0 -298
  517. package/dist/facet-I3OC4DK2.js +0 -556
  518. package/dist/gb-WPIUHR3O.js +0 -77
  519. package/dist/geneExpClustering-EYGZENSP.js +0 -240
  520. package/dist/geneExpression-54L3DH32.js +0 -309
  521. package/dist/geneExpression-6S6H2EVY.js +0 -29
  522. package/dist/geneExpression.unit.spec-VVI2MXIH.js +0 -151
  523. package/dist/geneORA-7M64LXZC.js +0 -269
  524. package/dist/geneRanking-676CAA3B.js +0 -544
  525. package/dist/geneVariant-4UPJE6MJ.js +0 -289
  526. package/dist/geneVariant-PFVPL22U.js +0 -32
  527. package/dist/geneVariant.integration.spec-EAJ4OSFQ.js +0 -672
  528. package/dist/genefusion.ui-LP4EJUTO.js +0 -299
  529. package/dist/geneset-ANDOMTPO.js +0 -199
  530. package/dist/genomeBrowser.spec-NUXOOL5N.js +0 -272
  531. package/dist/grin2-K4LRVCES.js +0 -66
  532. package/dist/grin2-YFCWJZFR.js +0 -945
  533. package/dist/hierCluster-POD3DRO4.js +0 -55
  534. package/dist/hierCluster-QA7HXKRD.js +0 -51
  535. package/dist/hierCluster.config-HQ3SVKCE.js +0 -32
  536. package/dist/hierCluster.integration.spec-MOYDWJL3.js +0 -479
  537. package/dist/hierCluster.interactivity-OZTNHXZQ.js +0 -45
  538. package/dist/hierCluster.renderers-46E37NL4.js +0 -18
  539. package/dist/imagePlot-HNAYBWY3.js +0 -152
  540. package/dist/importPlot-XTW46VF4.js +0 -8
  541. package/dist/isoformExpression-2TMTILKG.js +0 -31
  542. package/dist/isoformExpression.unit.spec-SIJWP7TH.js +0 -233
  543. package/dist/junction-AICKHNXX.js +0 -32
  544. package/dist/junction.customTerm-5STKYZ4B.js +0 -15
  545. package/dist/junction.unit.spec-EXFN4MLW.js +0 -178
  546. package/dist/launch.adhoc-PB6PGR7Q.js +0 -33
  547. package/dist/leftlabel.sample-ISUD4A7F.js +0 -253
  548. package/dist/leftlabel.sample-ISUD4A7F.js.map +0 -7
  549. package/dist/lollipop-5UXUAFYY.js +0 -162
  550. package/dist/maf-L6YD25JK.js +0 -451
  551. package/dist/maftimeline-63YZDGJ3.js +0 -583
  552. package/dist/matrix-OPEBHZCW.js +0 -55
  553. package/dist/matrix-TLMWPG7C.js +0 -50
  554. package/dist/matrix.cells-IELMNYC6.js +0 -25
  555. package/dist/matrix.config-J7SVFXLM.js +0 -33
  556. package/dist/matrix.data-DJTJCPO4.js +0 -22
  557. package/dist/matrix.groups-2REICNZK.js +0 -25
  558. package/dist/matrix.integration.spec-ZXU2OEFU.js +0 -3156
  559. package/dist/matrix.interactivity-SX3OR6OI.js +0 -33
  560. package/dist/matrix.layout-ZJ6X5RON.js +0 -35
  561. package/dist/matrix.legend-ZOP72TIO.js +0 -19
  562. package/dist/matrix.renderers-YUSROXKN.js +0 -30
  563. package/dist/matrix.serieses-UMAZNCMR.js +0 -18
  564. package/dist/matrix.sort-2JNIZHNL.js +0 -25
  565. package/dist/matrix.sort.unit.spec-SNB643Y6.js +0 -464
  566. package/dist/matrix.sorterUi-JXEIY6UL.js +0 -15
  567. package/dist/matrix.sorterUi.unit.spec-LDAT4R3H.js +0 -334
  568. package/dist/matrix.unit.spec-QBQIMDLD.js +0 -146
  569. package/dist/mavb-EQUF3VGG.js +0 -726
  570. package/dist/mds.samplescatterplot-73E45ZT7.js +0 -1545
  571. package/dist/mds.survivalplot-DL53IRVD.js +0 -472
  572. package/dist/multivalue-PQN75ENP.js +0 -79
  573. package/dist/numericDictTermCluster-FGMIOTBO.js +0 -62
  574. package/dist/oncomatrix-CCHWOA3N.js +0 -286
  575. package/dist/oncomatrix.spec-GQT3UTCR.js +0 -439
  576. package/dist/plot.2dvaf-L6ZI5ROR.js +0 -368
  577. package/dist/plot.app-A73VXJCP.js +0 -32
  578. package/dist/plot.barplot-HSCHPOO7.js +0 -93
  579. package/dist/plot.boxplot-AXBVNTNH.js +0 -142
  580. package/dist/plot.brainImaging-PEMURKM3.js +0 -51
  581. package/dist/plot.disco-YKMYYVMV.js +0 -98
  582. package/dist/plot.disco-YKMYYVMV.js.map +0 -7
  583. package/dist/plot.ssgq-FGMQXKZU.js +0 -130
  584. package/dist/plot.vaf2cov-IBM7NQEB.js +0 -249
  585. package/dist/polar2-N7KWY36S.js +0 -228
  586. package/dist/profileForms-Q4NN7653.js +0 -937
  587. package/dist/profilePlot-SQ77M6LI.js +0 -45
  588. package/dist/proteinView-KSIZRDNP.js +0 -1346
  589. package/dist/proteomeCohortCompare-GYSBJSDY.js +0 -866
  590. package/dist/proteomeCohortCompare-GYSBJSDY.js.map +0 -7
  591. package/dist/pseudbulk.unit.spec-XELPZVXM.js +0 -82
  592. package/dist/pseudobulk-H3USXM5U.js +0 -31
  593. package/dist/qualitative-ABXENRAF.js +0 -34
  594. package/dist/qualitative-OSEJTJ4D.js +0 -241
  595. package/dist/radar2-VTDQGHWN.js +0 -323
  596. package/dist/radarFacility2-BWGEC5A2.js +0 -331
  597. package/dist/rememberedGvQ.unit.spec-TWUDSEDP.js +0 -210
  598. package/dist/render-C3XJQ2QY.js +0 -29
  599. package/dist/report-7ZZ44X4R.js +0 -213
  600. package/dist/sampleView-CUCNI65Q.js +0 -39
  601. package/dist/samplelst-S7AJQ36J.js +0 -114
  602. package/dist/samplematrix-U7WM6GNB.js +0 -2188
  603. package/dist/sc-FMJHN2SW.js +0 -77
  604. package/dist/scatter-4UMCJNEH.js +0 -919
  605. package/dist/scatter-KMAZ3ZNR.js +0 -84
  606. package/dist/selectGenomeWithTklst-5SRM45BI.js +0 -125
  607. package/dist/singleCellCellType-GIIICJK5.js +0 -29
  608. package/dist/singleCellCellType.unit.spec-MVA7BMGL.js +0 -150
  609. package/dist/singleCellGeneExpression-2QFQHJJH.js +0 -29
  610. package/dist/singleCellGeneExpression.unit.spec-SAIETYHV.js +0 -144
  611. package/dist/singleCellNumericValue-45H5EPIB.js +0 -29
  612. package/dist/singleCellNumericValue.unit.spec-FNKEJ2WC.js +0 -412
  613. package/dist/singleCellPlot-SP7OEGYQ.js +0 -44
  614. package/dist/singlecell-AVZQX4AH.js +0 -1562
  615. package/dist/singlecell-JQKUHGIH.js +0 -77
  616. package/dist/snp-4SA7VABN.js +0 -29
  617. package/dist/snp.unit.spec-YIYGR6GW.js +0 -167
  618. package/dist/snplocus-TDGQ57ZJ.js +0 -200
  619. package/dist/snplst-SWBGRYPA.js +0 -36
  620. package/dist/spliceevent.a53ss.diagram-YODOBS6U.js +0 -142
  621. package/dist/spliceevent.exonskip.diagram-PMZIQ5UG.js +0 -274
  622. package/dist/spliceevent.noeventdiagram-A4T2PNUX.js +0 -451
  623. package/dist/ssGSEA-U7D6HOIV.js +0 -29
  624. package/dist/ssGSEA.unit.spec-SMNAM5DJ.js +0 -79
  625. package/dist/stattable-DBYMPJU6.js +0 -112
  626. package/dist/studyCatalog-7RABX4W5.js +0 -457
  627. package/dist/summarizeCnvGeneexp-YVRW7LWY.js +0 -154
  628. package/dist/summarizeGeneexpSurvival-ZB7IWGPS.js +0 -101
  629. package/dist/summarizeMutationCnv-CUSYURDK.js +0 -155
  630. package/dist/summarizeMutationDiagnosis-NSPCT5WI.js +0 -31
  631. package/dist/summarizeMutationSurvival-2PZZCC4G.js +0 -95
  632. package/dist/summary-CYDZSICI.js +0 -40
  633. package/dist/summary.integration.spec-2TLKJS3X.js +0 -405
  634. package/dist/summaryInput-BRQ5JRGV.js +0 -238
  635. package/dist/sunburst-435LKL2S.js +0 -34
  636. package/dist/sunburst-D5WAGHX6.js +0 -274
  637. package/dist/survival-M63B6DY5.js +0 -1248
  638. package/dist/survival-MHESSYWF.js +0 -49
  639. package/dist/survival.integration.spec-WMS3FTNR.js +0 -609
  640. package/dist/svgraph-LYFGVTHI.js +0 -1377
  641. package/dist/svmr-UR67QZIP.js +0 -3834
  642. package/dist/swimmer-RP4SUEZS.js +0 -993
  643. package/dist/table-V4OOMF3B.js +0 -192
  644. package/dist/termCollection-VHGVBSWW.js +0 -29
  645. package/dist/termCollection-WSNM3YFK.js +0 -247
  646. package/dist/termCollection.unit.spec-NCZUZL6P.js +0 -295
  647. package/dist/termCollectionFractionSelection-XM3FJWBQ.js +0 -38
  648. package/dist/termCollectionFractionSelection.unit.spec-VO4SAV72.js +0 -184
  649. package/dist/tk-G5PKWSXJ.js +0 -1193
  650. package/dist/tk-G5PKWSXJ.js.map +0 -7
  651. package/dist/tk-KIELQHVI.js +0 -37
  652. package/dist/tp.ui-HAKSWLFB.js +0 -1453
  653. package/dist/tvs.categorical-G4DM4JY5.js +0 -28
  654. package/dist/tvs.condition-E5NUQONB.js +0 -160
  655. package/dist/tvs.dt-T4BK24VZ.js +0 -34
  656. package/dist/tvs.dtcnv.categorical-V57TZFRA.js +0 -31
  657. package/dist/tvs.dtcnv.continuous-D4YIB4PN.js +0 -72
  658. package/dist/tvs.dtfusion-6DUFLUNH.js +0 -31
  659. package/dist/tvs.dtitd-GOEPAQGR.js +0 -31
  660. package/dist/tvs.dtsnvindel-ASTXGC4O.js +0 -31
  661. package/dist/tvs.dtsv-7TGDEWXK.js +0 -31
  662. package/dist/tvs.multivalue-SEIGL2W6.js +0 -84
  663. package/dist/tvs.numeric-MLLX5L7Z.js +0 -32
  664. package/dist/tvs.samplelst-HAV7C2EA.js +0 -95
  665. package/dist/tvs.survival-3B522MT2.js +0 -110
  666. package/dist/tvs.termCollection-R5NG4VXP.js +0 -118
  667. package/dist/vocabulary-LBNHNSEN.js +0 -32
  668. package/dist/wsi.direct-ZEZO4NLR.js +0 -11515
  669. /package/dist/{2dmaf-OWA6REJ5.js.map → 2dmaf-4W2R2HXG.js.map} +0 -0
  670. /package/dist/{AggMatrixInput-5GC33U5A.js.map → AggMatrixInput-3SQ7UW5L.js.map} +0 -0
  671. /package/dist/{AggregateMatrix-CMJFO53B.js.map → AggregateMatrix-QI55DXDU.js.map} +0 -0
  672. /package/dist/{AppHeader-KJCXF35P.js.map → AppHeader-C26OHIUQ.js.map} +0 -0
  673. /package/dist/{BoxPlot-NZTO6CLZ.js.map → BoxPlot-27OYBGJ3.js.map} +0 -0
  674. /package/dist/{CorrelationVolcano-GHTPFM2V.js.map → CorrelationVolcano-XIMXCSHG.js.map} +0 -0
  675. /package/dist/{Cuminc-HHBYFFFM.js.map → Cuminc-737O733E.js.map} +0 -0
  676. /package/dist/{DE-VVKIMVXD.js.map → DE-EDTGDY6L.js.map} +0 -0
  677. /package/dist/{DEinput-F7HSM2SO.js.map → DEinput-ZN76I5M5.js.map} +0 -0
  678. /package/dist/{DM-UBCIWZEY.js.map → DM-25IRANGL.js.map} +0 -0
  679. /package/dist/{DifferentialAnalysis-UUXXMOQS.js.map → DifferentialAnalysis-7HQYEA5T.js.map} +0 -0
  680. /package/dist/{Disco.UI-GSSSK4YJ.js.map → Disco.UI-67HBGS4Y.js.map} +0 -0
  681. /package/dist/{GB-CIQGJBJP.js.map → GB-HT3B7Y7R.js.map} +0 -0
  682. /package/dist/{GSEA-3GVFEJTX.js.map → GSEA-CMFMNK5Y.js.map} +0 -0
  683. /package/dist/{GeneExpInput-CFU3Q7FM.js.map → GeneExpInput-HMGV23E7.js.map} +0 -0
  684. /package/dist/{Geomap-NMVFA77Q.js.map → Geomap-RB4SGVPC.js.map} +0 -0
  685. /package/dist/{HicApp-4FCGUUJD.js.map → HicApp-YRP6YQFA.js.map} +0 -0
  686. /package/dist/{IDCViewer-WFB6AXHD.js.map → IDCViewer-OUSOZNSR.js.map} +0 -0
  687. /package/dist/{NumBinaryEditor-4WUDJRSU.js.map → NumBinaryEditor-YFQDPBB6.js.map} +0 -0
  688. /package/dist/{NumBinaryEditor.unit.spec-MV53GTGQ.js.map → NumBinaryEditor.unit.spec-6YC5PCPK.js.map} +0 -0
  689. /package/dist/{NumContEditor-U4R6HPDM.js.map → NumContEditor-EH6MA2RW.js.map} +0 -0
  690. /package/dist/{NumContEditor.unit.spec-J4ANPBSF.js.map → NumContEditor.unit.spec-Q2JBVIRT.js.map} +0 -0
  691. /package/dist/{NumCustomBinEditor-QRGDNFP4.js.map → NumCustomBinEditor-USQA3BC6.js.map} +0 -0
  692. /package/dist/{NumCustomBinEditor.unit.spec-PPF233FW.js.map → NumCustomBinEditor.unit.spec-PE2HFRCK.js.map} +0 -0
  693. /package/dist/{NumDiscreteEditor-LNK4KHSL.js.map → NumDiscreteEditor-VKE4WT24.js.map} +0 -0
  694. /package/dist/{NumDiscreteEditor.unit.spec-QY6O62JU.js.map → NumDiscreteEditor.unit.spec-JNG673LE.js.map} +0 -0
  695. /package/dist/{NumRegularBinEditor-XTINNM5L.js.map → NumRegularBinEditor-KCCPGJSX.js.map} +0 -0
  696. /package/dist/{NumRegularBinEditor.unit.spec-FSLARHOC.js.map → NumRegularBinEditor.unit.spec-4BLKQRZU.js.map} +0 -0
  697. /package/dist/{NumSplineEditor-YSQTKBFA.js.map → NumSplineEditor-4YELHGUO.js.map} +0 -0
  698. /package/dist/{NumSplineEditor.unit.spec-QNITPY7R.js.map → NumSplineEditor.unit.spec-CKHHK6GH.js.map} +0 -0
  699. /package/dist/{NumericDensity-J5WS74JZ.js.map → NumericDensity-LCFM7VSY.js.map} +0 -0
  700. /package/dist/{NumericDensity.unit.spec-4WQWLSSJ.js.map → NumericDensity.unit.spec-R4ARTJ5I.js.map} +0 -0
  701. /package/dist/{NumericHandler-ZEWC25U2.js.map → NumericHandler-2OHRSY6Z.js.map} +0 -0
  702. /package/dist/{NumericHandler.unit.spec-A3G5FWGV.js.map → NumericHandler.unit.spec-M3TRIFZW.js.map} +0 -0
  703. /package/dist/{ProteomeInput-7DXGQIOO.js.map → ProteomeInput-G2EP6QH2.js.map} +0 -0
  704. /package/dist/{Regression-VQ5MC6KW.js.map → Regression-2HKE6C7F.js.map} +0 -0
  705. /package/dist/{RunChart2-B33CQUXH.js.map → RunChart2-WRVW63PB.js.map} +0 -0
  706. /package/dist/{SC-LEVWXS4P.js.map → SC-37RDNFGH.js.map} +0 -0
  707. /package/dist/{Wsi-VPF6RX3B.js.map → Wsi-PB77PVAA.js.map} +0 -0
  708. /package/dist/{aboutSunburst-NGH3V74S.js.map → aboutSunburst-5Z24ODIN.js.map} +0 -0
  709. /package/dist/{adSandbox-VOAL4P5A.js.map → adSandbox-AFORHU3V.js.map} +0 -0
  710. /package/dist/{animatedBubbleChart-HKOGYPSS.js.map → animatedBubbleChart-F75OBRZW.js.map} +0 -0
  711. /package/dist/{app-AZLUP2BA.js.map → app-4RZ76DZZ.js.map} +0 -0
  712. /package/dist/{app-JJPKGBEV.js.map → app-IHE3RNI5.js.map} +0 -0
  713. /package/dist/{bam-GIZSH2MF.js.map → bam-IIRZX3IK.js.map} +0 -0
  714. /package/dist/{barchart-CVTXLIIQ.js.map → barchart-UIHRIMOE.js.map} +0 -0
  715. /package/dist/{barchart2-XYC6WITL.js.map → barchart2-DG3S6FDJ.js.map} +0 -0
  716. /package/dist/{block-DXRSU62C.js.map → block-COZKGPXY.js.map} +0 -0
  717. /package/dist/{block.init-U4Y6ROG4.js.map → block.init-UBXYVTPQ.js.map} +0 -0
  718. /package/dist/{block.mds.expressionrank-BB26LVTM.js.map → block.mds.expressionrank-KSXPPPGR.js.map} +0 -0
  719. /package/dist/{block.mds.geneboxplot-VVKEU3SL.js.map → block.mds.geneboxplot-5RDFDVDE.js.map} +0 -0
  720. /package/dist/{block.mds.junction-XUZX6EAQ.js.map → block.mds.junction-LMM24KXJ.js.map} +0 -0
  721. /package/dist/{block.mds.svcnv-WDSACPWG.js.map → block.mds.svcnv-4XRXZMPS.js.map} +0 -0
  722. /package/dist/{block.svg-T5BA7VLS.js.map → block.svg-VAKLMPMS.js.map} +0 -0
  723. /package/dist/{block.tk.aicheck-3VN2RDPD.js.map → block.tk.aicheck-6GHZK2YY.js.map} +0 -0
  724. /package/dist/{block.tk.bam-5XZ3N4Y7.js.map → block.tk.bam-7H3BSHR2.js.map} +0 -0
  725. /package/dist/{block.tk.bigwig.ui-JODVOS4R.js.map → block.tk.bigwig.ui-KX2GACY5.js.map} +0 -0
  726. /package/dist/{block.tk.hicstraw-AFNWJ2YP.js.map → block.tk.hicstraw-OOWEWGMF.js.map} +0 -0
  727. /package/dist/{block.tk.junction-T2G6XEVS.js.map → block.tk.junction-U7W36OZA.js.map} +0 -0
  728. /package/dist/{block.tk.junction.textmatrixui-FL5MZH7K.js.map → block.tk.junction.textmatrixui-PAMSBYZT.js.map} +0 -0
  729. /package/dist/{block.tk.ld-JKBXDOB5.js.map → block.tk.ld-RFQPDG7Q.js.map} +0 -0
  730. /package/dist/{block.tk.menu-2X4BN7BN.js.map → block.tk.menu-JDJU2OGK.js.map} +0 -0
  731. /package/dist/{block.tk.pgv-ASUVEGQF.js.map → block.tk.pgv-G2UFCQUT.js.map} +0 -0
  732. /package/dist/{brainImaging-27442GMQ.js.map → brainImaging-ASAHWZJH.js.map} +0 -0
  733. /package/dist/{brainRegions-3367RQCU.js.map → brainRegions-XTJDLUU4.js.map} +0 -0
  734. /package/dist/{bubbleHeatmap-IOVS6SHX.js.map → bubbleHeatmap-UPUITTU6.js.map} +0 -0
  735. /package/dist/{cellTypeBubbleHeatmap-7XJP6B5W.js.map → cellTypeBubbleHeatmap-25SOXC2Q.js.map} +0 -0
  736. /package/dist/{chunk-ZLQ6PAI6.js.map → chunk-2ZYAC3DC.js.map} +0 -0
  737. /package/dist/{chunk-C4YACFGH.js.map → chunk-325X3T7G.js.map} +0 -0
  738. /package/dist/{chunk-5JBOGNSG.js.map → chunk-3UXHTSZJ.js.map} +0 -0
  739. /package/dist/{chunk-GOL6A746.js.map → chunk-4DFKK46J.js.map} +0 -0
  740. /package/dist/{chunk-MIDVLNN3.js.map → chunk-54W2RWRB.js.map} +0 -0
  741. /package/dist/{chunk-CKO54XWB.js.map → chunk-5QGC2624.js.map} +0 -0
  742. /package/dist/{chunk-OVO6NYUR.js.map → chunk-5YKXYWP3.js.map} +0 -0
  743. /package/dist/{chunk-HTIZFNBC.js.map → chunk-6B4AME6E.js.map} +0 -0
  744. /package/dist/{chunk-COWLQ74R.js.map → chunk-6H4FFHFQ.js.map} +0 -0
  745. /package/dist/{chunk-F6CYUMSM.js.map → chunk-6PVVV3UW.js.map} +0 -0
  746. /package/dist/{chunk-7UXV4IX5.js.map → chunk-72QBXULB.js.map} +0 -0
  747. /package/dist/{chunk-GVLXSPTN.js.map → chunk-7APH7QLC.js.map} +0 -0
  748. /package/dist/{chunk-EM56Y4X6.js.map → chunk-7HBAALWJ.js.map} +0 -0
  749. /package/dist/{chunk-T2DORAV4.js.map → chunk-7UK7CU4F.js.map} +0 -0
  750. /package/dist/{chunk-HNU4RYI5.js.map → chunk-7ZTUUKLX.js.map} +0 -0
  751. /package/dist/{chunk-CZOJUH3C.js.map → chunk-A7GCFL3R.js.map} +0 -0
  752. /package/dist/{chunk-TBXJ2CUA.js.map → chunk-AGWIWLOP.js.map} +0 -0
  753. /package/dist/{chunk-KTRDLHCP.js.map → chunk-CHQ43UJQ.js.map} +0 -0
  754. /package/dist/{chunk-7ZCYC2DQ.js.map → chunk-CQWR4QZO.js.map} +0 -0
  755. /package/dist/{chunk-N6AHRJAM.js.map → chunk-D6TLBMIX.js.map} +0 -0
  756. /package/dist/{chunk-BOQYGAYA.js.map → chunk-DOC3HBOV.js.map} +0 -0
  757. /package/dist/{chunk-CU434U4N.js.map → chunk-DR5JLHTB.js.map} +0 -0
  758. /package/dist/{chunk-LN4KNFOQ.js.map → chunk-E2Z4X6C2.js.map} +0 -0
  759. /package/dist/{chunk-2GP3LH7J.js.map → chunk-E4WAVMI5.js.map} +0 -0
  760. /package/dist/{chunk-O4BDFBVK.js.map → chunk-EM76Y3HQ.js.map} +0 -0
  761. /package/dist/{chunk-WQHL6SR3.js.map → chunk-ES7XNERS.js.map} +0 -0
  762. /package/dist/{chunk-2ESAB2PP.js.map → chunk-F2RTD23W.js.map} +0 -0
  763. /package/dist/{chunk-46KQE4DV.js.map → chunk-FEE2HAON.js.map} +0 -0
  764. /package/dist/{chunk-2UGYE6EJ.js.map → chunk-FIWVGOSE.js.map} +0 -0
  765. /package/dist/{chunk-EIO6DMIQ.js.map → chunk-FT5HOBHJ.js.map} +0 -0
  766. /package/dist/{chunk-K5RCZIZN.js.map → chunk-G5BQJGRA.js.map} +0 -0
  767. /package/dist/{chunk-SQUMXZXI.js.map → chunk-GAYYXHOG.js.map} +0 -0
  768. /package/dist/{chunk-VZBRG6HQ.js.map → chunk-GDIKNIEA.js.map} +0 -0
  769. /package/dist/{chunk-KA3KYNOP.js.map → chunk-GIZTZCE5.js.map} +0 -0
  770. /package/dist/{chunk-5OWPH4IH.js.map → chunk-GONC3LVY.js.map} +0 -0
  771. /package/dist/{chunk-ZUG4EY4T.js.map → chunk-HGC4EON3.js.map} +0 -0
  772. /package/dist/{chunk-7Q4KAFCS.js.map → chunk-HM23KADV.js.map} +0 -0
  773. /package/dist/{chunk-MUVXIOXM.js.map → chunk-JWX6GEWQ.js.map} +0 -0
  774. /package/dist/{chunk-4ICGMPPE.js.map → chunk-K4LZR3HU.js.map} +0 -0
  775. /package/dist/{chunk-RSCSTOUN.js.map → chunk-K55KOEI6.js.map} +0 -0
  776. /package/dist/{chunk-ZUXXBQ7D.js.map → chunk-KLJM7HE5.js.map} +0 -0
  777. /package/dist/{chunk-JNIYPQWY.js.map → chunk-LFH5VSSF.js.map} +0 -0
  778. /package/dist/{chunk-7ONTCJWB.js.map → chunk-MBWG3QHI.js.map} +0 -0
  779. /package/dist/{chunk-2CTAWHGB.js.map → chunk-MZTVOOR6.js.map} +0 -0
  780. /package/dist/{chunk-KGFH5VTH.js.map → chunk-N2JOZ3QD.js.map} +0 -0
  781. /package/dist/{chunk-3TJBSAIO.js.map → chunk-NG2U3VHX.js.map} +0 -0
  782. /package/dist/{chunk-Z6ZFRHXK.js.map → chunk-NUGYNLTL.js.map} +0 -0
  783. /package/dist/{chunk-OXRZSZKA.js.map → chunk-OCOB7XJW.js.map} +0 -0
  784. /package/dist/{chunk-NB4UU4DH.js.map → chunk-OGDBTL5C.js.map} +0 -0
  785. /package/dist/{chunk-VQD6GZMU.js.map → chunk-OVXHMJJJ.js.map} +0 -0
  786. /package/dist/{chunk-TTSKLWP7.js.map → chunk-PAF5KZCR.js.map} +0 -0
  787. /package/dist/{chunk-TQLHKDNS.js.map → chunk-PI2MCZXG.js.map} +0 -0
  788. /package/dist/{chunk-BNJC6OX5.js.map → chunk-PPICALUF.js.map} +0 -0
  789. /package/dist/{chunk-M4ML4ACA.js.map → chunk-QFOT5WAZ.js.map} +0 -0
  790. /package/dist/{chunk-ZHY7ZHWC.js.map → chunk-QGCB5AKN.js.map} +0 -0
  791. /package/dist/{chunk-AQSZLUDV.js.map → chunk-QRZRAMHA.js.map} +0 -0
  792. /package/dist/{chunk-QUVGLTCF.js.map → chunk-RGOZHZCN.js.map} +0 -0
  793. /package/dist/{chunk-BBA5MAFS.js.map → chunk-RJKY22D4.js.map} +0 -0
  794. /package/dist/{chunk-OGU7IDV7.js.map → chunk-RZ2HG7G3.js.map} +0 -0
  795. /package/dist/{chunk-ZCY72DDM.js.map → chunk-SI2KSG6E.js.map} +0 -0
  796. /package/dist/{chunk-QMR3QMJG.js.map → chunk-U4PLKSSS.js.map} +0 -0
  797. /package/dist/{chunk-RCVA2RWU.js.map → chunk-U7G65D2G.js.map} +0 -0
  798. /package/dist/{chunk-RCLCEA55.js.map → chunk-UU3FWU6D.js.map} +0 -0
  799. /package/dist/{chunk-HUF5BTO6.js.map → chunk-UXLT7W2N.js.map} +0 -0
  800. /package/dist/{chunk-DVSTBGZT.js.map → chunk-VHQDN3OA.js.map} +0 -0
  801. /package/dist/{chunk-63TCOVAK.js.map → chunk-VTMNHAFC.js.map} +0 -0
  802. /package/dist/{chunk-G5GFCBJT.js.map → chunk-W3K7KLIR.js.map} +0 -0
  803. /package/dist/{chunk-NGG4737W.js.map → chunk-WSLS55SH.js.map} +0 -0
  804. /package/dist/{chunk-HWP3U2VY.js.map → chunk-WUCIHN7D.js.map} +0 -0
  805. /package/dist/{chunk-L6TGKNRA.js.map → chunk-XQIB27PB.js.map} +0 -0
  806. /package/dist/{chunk-OT2DMA2D.js.map → chunk-XSBGICK5.js.map} +0 -0
  807. /package/dist/{chunk-FUTHP5J4.js.map → chunk-YHW2RAAG.js.map} +0 -0
  808. /package/dist/{chunk-JEXS72M5.js.map → chunk-Z7CCL464.js.map} +0 -0
  809. /package/dist/{chunk-N2RAPA7D.js.map → chunk-ZBNPXXMK.js.map} +0 -0
  810. /package/dist/{chunk-X7JGAQ5N.js.map → chunk-ZNHC46CT.js.map} +0 -0
  811. /package/dist/{cohort-2DQOQ5AO.js.map → cohort-ZFGFEEBD.js.map} +0 -0
  812. /package/dist/{cohortSunburst-W6XC7VD6.js.map → cohortSunburst-EEPGV2RB.js.map} +0 -0
  813. /package/dist/{condition-3A7I5UQA.js.map → condition-7EWFLQSO.js.map} +0 -0
  814. /package/dist/{controls-G5WYBX4P.js.map → controls-QHDSDWKI.js.map} +0 -0
  815. /package/dist/{controls.config-TAFGM2S2.js.map → controls.config-LBSCZ6GP.js.map} +0 -0
  816. /package/dist/{correlation-K4EOOQJU.js.map → correlation-IJQJPNNP.js.map} +0 -0
  817. /package/dist/{customdata.inputui-E7RRN3KY.js.map → customdata.inputui-TZGX2CUD.js.map} +0 -0
  818. /package/dist/{dataDownload-OXZGAE5R.js.map → dataDownload-33EWD3AD.js.map} +0 -0
  819. /package/dist/{databrowser.ui-IPUF6LUC.js.map → databrowser.ui-YNKDTAAN.js.map} +0 -0
  820. /package/dist/{dictionary-MUNAUI43.js.map → dictionary-OTR6Z5EZ.js.map} +0 -0
  821. /package/dist/{dnaMethylation-SOV4HBAX.js.map → dnaMethylation-LQTCTOOE.js.map} +0 -0
  822. /package/dist/{dnaMethylation.integration.spec-T4KKTMRL.js.map → dnaMethylation.integration.spec-U5VQYAK3.js.map} +0 -0
  823. /package/dist/{dofetch-2CR2TVWC.js.map → dofetch-HLG7G7RX.js.map} +0 -0
  824. /package/dist/{e2pca-EIOJCV4O.js.map → e2pca-AXDPYR7U.js.map} +0 -0
  825. /package/dist/{ep-5QX3CW6D.js.map → ep-4WK46CH7.js.map} +0 -0
  826. /package/dist/{expclust.gdc.spec-TNHPZLYQ.js.map → expclust.gdc.spec-CYGWGREQ.js.map} +0 -0
  827. /package/dist/{facet-I3OC4DK2.js.map → facet-IZSSZDHK.js.map} +0 -0
  828. /package/dist/{gb-WPIUHR3O.js.map → gb-AUZBUZFM.js.map} +0 -0
  829. /package/dist/{geneExpClustering-EYGZENSP.js.map → geneExpClustering-AQBFLXLP.js.map} +0 -0
  830. /package/dist/{geneExpression-54L3DH32.js.map → geneExpression-HDJVPVPK.js.map} +0 -0
  831. /package/dist/{geneExpression-6S6H2EVY.js.map → geneExpression-V4JMTMLI.js.map} +0 -0
  832. /package/dist/{geneExpression.unit.spec-VVI2MXIH.js.map → geneExpression.unit.spec-KFMSDVMX.js.map} +0 -0
  833. /package/dist/{geneORA-7M64LXZC.js.map → geneORA-LDFFSEMQ.js.map} +0 -0
  834. /package/dist/{geneRanking-676CAA3B.js.map → geneRanking-IVKDSNDV.js.map} +0 -0
  835. /package/dist/{geneVariant-4UPJE6MJ.js.map → geneVariant-7X7EEUDW.js.map} +0 -0
  836. /package/dist/{geneVariant-PFVPL22U.js.map → geneVariant-TK3FJ22L.js.map} +0 -0
  837. /package/dist/{geneVariant.integration.spec-EAJ4OSFQ.js.map → geneVariant.integration.spec-ZHAFWQ2O.js.map} +0 -0
  838. /package/dist/{genefusion.ui-LP4EJUTO.js.map → genefusion.ui-U5YPVXAF.js.map} +0 -0
  839. /package/dist/{geneset-ANDOMTPO.js.map → geneset-NSHQ2NDR.js.map} +0 -0
  840. /package/dist/{genomeBrowser.spec-NUXOOL5N.js.map → genomeBrowser.spec-HP4OQPCV.js.map} +0 -0
  841. /package/dist/{grin2-K4LRVCES.js.map → grin2-5WKONQPG.js.map} +0 -0
  842. /package/dist/{grin2-YFCWJZFR.js.map → grin2-V2ZBOJBO.js.map} +0 -0
  843. /package/dist/{hierCluster-POD3DRO4.js.map → hierCluster-7IOPNYFN.js.map} +0 -0
  844. /package/dist/{hierCluster-QA7HXKRD.js.map → hierCluster-IDBCUKHJ.js.map} +0 -0
  845. /package/dist/{hierCluster.config-HQ3SVKCE.js.map → hierCluster.config-Z4NRL5P5.js.map} +0 -0
  846. /package/dist/{hierCluster.integration.spec-MOYDWJL3.js.map → hierCluster.integration.spec-PHEXOGPI.js.map} +0 -0
  847. /package/dist/{hierCluster.interactivity-OZTNHXZQ.js.map → hierCluster.interactivity-NHZ5EPBV.js.map} +0 -0
  848. /package/dist/{hierCluster.renderers-46E37NL4.js.map → hierCluster.renderers-WXJUMDFN.js.map} +0 -0
  849. /package/dist/{imagePlot-HNAYBWY3.js.map → imagePlot-NMNCAYS7.js.map} +0 -0
  850. /package/dist/{importPlot-XTW46VF4.js.map → importPlot-HZML5XMJ.js.map} +0 -0
  851. /package/dist/{isoformExpression-2TMTILKG.js.map → isoformExpression-4IU4AUQ2.js.map} +0 -0
  852. /package/dist/{isoformExpression.unit.spec-SIJWP7TH.js.map → isoformExpression.unit.spec-KKMKU5Z2.js.map} +0 -0
  853. /package/dist/{junction-AICKHNXX.js.map → junction-EXA2WANI.js.map} +0 -0
  854. /package/dist/{junction.customTerm-5STKYZ4B.js.map → junction.customTerm-LQYKCZX4.js.map} +0 -0
  855. /package/dist/{junction.unit.spec-EXFN4MLW.js.map → junction.unit.spec-H3FGTLEP.js.map} +0 -0
  856. /package/dist/{launch.adhoc-PB6PGR7Q.js.map → launch.adhoc-YA6FRHSC.js.map} +0 -0
  857. /package/dist/{lollipop-5UXUAFYY.js.map → lollipop-EWLGYDIR.js.map} +0 -0
  858. /package/dist/{maf-L6YD25JK.js.map → maf-PXMHR3PY.js.map} +0 -0
  859. /package/dist/{maftimeline-63YZDGJ3.js.map → maftimeline-QFKT7PW2.js.map} +0 -0
  860. /package/dist/{matrix-OPEBHZCW.js.map → matrix-KASG3KIY.js.map} +0 -0
  861. /package/dist/{matrix-TLMWPG7C.js.map → matrix-VSX63V3L.js.map} +0 -0
  862. /package/dist/{matrix.cells-IELMNYC6.js.map → matrix.cells-7TTOQRWU.js.map} +0 -0
  863. /package/dist/{matrix.config-J7SVFXLM.js.map → matrix.config-U3I726EC.js.map} +0 -0
  864. /package/dist/{matrix.data-DJTJCPO4.js.map → matrix.data-Y4DXSR2P.js.map} +0 -0
  865. /package/dist/{matrix.groups-2REICNZK.js.map → matrix.groups-C5CHYWQZ.js.map} +0 -0
  866. /package/dist/{matrix.integration.spec-ZXU2OEFU.js.map → matrix.integration.spec-4KWLFXMY.js.map} +0 -0
  867. /package/dist/{matrix.interactivity-SX3OR6OI.js.map → matrix.interactivity-JK6URU6Z.js.map} +0 -0
  868. /package/dist/{matrix.layout-ZJ6X5RON.js.map → matrix.layout-KKOA7GGL.js.map} +0 -0
  869. /package/dist/{matrix.legend-ZOP72TIO.js.map → matrix.legend-3FFHXTLX.js.map} +0 -0
  870. /package/dist/{matrix.renderers-YUSROXKN.js.map → matrix.renderers-F7EWYQWL.js.map} +0 -0
  871. /package/dist/{matrix.serieses-UMAZNCMR.js.map → matrix.serieses-I4JWWONC.js.map} +0 -0
  872. /package/dist/{matrix.sort-2JNIZHNL.js.map → matrix.sort-5JTCLBPB.js.map} +0 -0
  873. /package/dist/{matrix.sort.unit.spec-SNB643Y6.js.map → matrix.sort.unit.spec-EW53F5DT.js.map} +0 -0
  874. /package/dist/{matrix.sorterUi-JXEIY6UL.js.map → matrix.sorterUi-Z4JDY7VW.js.map} +0 -0
  875. /package/dist/{matrix.sorterUi.unit.spec-LDAT4R3H.js.map → matrix.sorterUi.unit.spec-OGTYY6GC.js.map} +0 -0
  876. /package/dist/{matrix.unit.spec-QBQIMDLD.js.map → matrix.unit.spec-RXKKHRUN.js.map} +0 -0
  877. /package/dist/{mavb-EQUF3VGG.js.map → mavb-YI2WEGFI.js.map} +0 -0
  878. /package/dist/{mds.samplescatterplot-73E45ZT7.js.map → mds.samplescatterplot-GGJE67MF.js.map} +0 -0
  879. /package/dist/{mds.survivalplot-DL53IRVD.js.map → mds.survivalplot-A6DS6FHO.js.map} +0 -0
  880. /package/dist/{multivalue-PQN75ENP.js.map → multivalue-3WCYDVL3.js.map} +0 -0
  881. /package/dist/{numericDictTermCluster-FGMIOTBO.js.map → numericDictTermCluster-AOTEPNEI.js.map} +0 -0
  882. /package/dist/{oncomatrix-CCHWOA3N.js.map → oncomatrix-BB4SB5AJ.js.map} +0 -0
  883. /package/dist/{oncomatrix.spec-GQT3UTCR.js.map → oncomatrix.spec-M4ZC3KFC.js.map} +0 -0
  884. /package/dist/{plot.2dvaf-L6ZI5ROR.js.map → plot.2dvaf-QUD743E6.js.map} +0 -0
  885. /package/dist/{plot.app-A73VXJCP.js.map → plot.app-35I4DJXK.js.map} +0 -0
  886. /package/dist/{plot.barplot-HSCHPOO7.js.map → plot.barplot-7OL4HWZB.js.map} +0 -0
  887. /package/dist/{plot.boxplot-AXBVNTNH.js.map → plot.boxplot-N2VSPDYA.js.map} +0 -0
  888. /package/dist/{plot.brainImaging-PEMURKM3.js.map → plot.brainImaging-4PIAFROV.js.map} +0 -0
  889. /package/dist/{plot.ssgq-FGMQXKZU.js.map → plot.ssgq-MGUBQNWE.js.map} +0 -0
  890. /package/dist/{plot.vaf2cov-IBM7NQEB.js.map → plot.vaf2cov-KVI2GMG4.js.map} +0 -0
  891. /package/dist/{polar2-N7KWY36S.js.map → polar2-IGAOHGPE.js.map} +0 -0
  892. /package/dist/{profileForms-Q4NN7653.js.map → profileForms-MW7JQURG.js.map} +0 -0
  893. /package/dist/{profilePlot-SQ77M6LI.js.map → profilePlot-OVOSFR47.js.map} +0 -0
  894. /package/dist/{proteinView-KSIZRDNP.js.map → proteinView-LFP5YYMK.js.map} +0 -0
  895. /package/dist/{pseudbulk.unit.spec-XELPZVXM.js.map → pseudbulk.unit.spec-CGV4JTEK.js.map} +0 -0
  896. /package/dist/{pseudobulk-H3USXM5U.js.map → pseudobulk-WFCQX5KR.js.map} +0 -0
  897. /package/dist/{qualitative-OSEJTJ4D.js.map → qualitative-4SLUE6BW.js.map} +0 -0
  898. /package/dist/{qualitative-ABXENRAF.js.map → qualitative-6H674T7D.js.map} +0 -0
  899. /package/dist/{radar2-VTDQGHWN.js.map → radar2-QXHO2MQA.js.map} +0 -0
  900. /package/dist/{radarFacility2-BWGEC5A2.js.map → radarFacility2-JCVOYMH4.js.map} +0 -0
  901. /package/dist/{rememberedGvQ.unit.spec-TWUDSEDP.js.map → rememberedGvQ.unit.spec-Q3UZJPE2.js.map} +0 -0
  902. /package/dist/{render-C3XJQ2QY.js.map → render-IIFS3Y2N.js.map} +0 -0
  903. /package/dist/{report-7ZZ44X4R.js.map → report-NFBB3PUI.js.map} +0 -0
  904. /package/dist/{sampleView-CUCNI65Q.js.map → sampleView-XQXKIPC7.js.map} +0 -0
  905. /package/dist/{samplelst-S7AJQ36J.js.map → samplelst-RIC5E2W4.js.map} +0 -0
  906. /package/dist/{samplematrix-U7WM6GNB.js.map → samplematrix-WLCFCPBR.js.map} +0 -0
  907. /package/dist/{sc-FMJHN2SW.js.map → sc-TXRF7D6F.js.map} +0 -0
  908. /package/dist/{scatter-4UMCJNEH.js.map → scatter-JUGGPR4B.js.map} +0 -0
  909. /package/dist/{scatter-KMAZ3ZNR.js.map → scatter-YQ47446T.js.map} +0 -0
  910. /package/dist/{selectGenomeWithTklst-5SRM45BI.js.map → selectGenomeWithTklst-2ELB6HQK.js.map} +0 -0
  911. /package/dist/{singleCellCellType-GIIICJK5.js.map → singleCellCellType-DUTH4SZF.js.map} +0 -0
  912. /package/dist/{singleCellCellType.unit.spec-MVA7BMGL.js.map → singleCellCellType.unit.spec-PWP6I5PZ.js.map} +0 -0
  913. /package/dist/{singleCellGeneExpression-2QFQHJJH.js.map → singleCellGeneExpression-3563T7GE.js.map} +0 -0
  914. /package/dist/{singleCellGeneExpression.unit.spec-SAIETYHV.js.map → singleCellGeneExpression.unit.spec-66IDCFJC.js.map} +0 -0
  915. /package/dist/{singleCellNumericValue-45H5EPIB.js.map → singleCellNumericValue-XVQTKLTS.js.map} +0 -0
  916. /package/dist/{singleCellNumericValue.unit.spec-FNKEJ2WC.js.map → singleCellNumericValue.unit.spec-LJSTGKNS.js.map} +0 -0
  917. /package/dist/{singleCellPlot-SP7OEGYQ.js.map → singleCellPlot-MKYJJXSG.js.map} +0 -0
  918. /package/dist/{singlecell-AVZQX4AH.js.map → singlecell-ANCWPAAO.js.map} +0 -0
  919. /package/dist/{singlecell-JQKUHGIH.js.map → singlecell-KMRVFOC5.js.map} +0 -0
  920. /package/dist/{snp-4SA7VABN.js.map → snp-B5UHGWVD.js.map} +0 -0
  921. /package/dist/{snp.unit.spec-YIYGR6GW.js.map → snp.unit.spec-YAHITASM.js.map} +0 -0
  922. /package/dist/{snplocus-TDGQ57ZJ.js.map → snplocus-MLGICRGT.js.map} +0 -0
  923. /package/dist/{snplst-SWBGRYPA.js.map → snplst-DZPIQEKI.js.map} +0 -0
  924. /package/dist/{spliceevent.a53ss.diagram-YODOBS6U.js.map → spliceevent.a53ss.diagram-4NYPSFC2.js.map} +0 -0
  925. /package/dist/{spliceevent.exonskip.diagram-PMZIQ5UG.js.map → spliceevent.exonskip.diagram-WLLTP7NP.js.map} +0 -0
  926. /package/dist/{spliceevent.noeventdiagram-A4T2PNUX.js.map → spliceevent.noeventdiagram-NOSO752Y.js.map} +0 -0
  927. /package/dist/{ssGSEA-U7D6HOIV.js.map → ssGSEA-4DVY6Z5U.js.map} +0 -0
  928. /package/dist/{ssGSEA.unit.spec-SMNAM5DJ.js.map → ssGSEA.unit.spec-UDXV4Q7S.js.map} +0 -0
  929. /package/dist/{stattable-DBYMPJU6.js.map → stattable-T5X76Q32.js.map} +0 -0
  930. /package/dist/{studyCatalog-7RABX4W5.js.map → studyCatalog-O3EPBJPW.js.map} +0 -0
  931. /package/dist/{summarizeCnvGeneexp-YVRW7LWY.js.map → summarizeCnvGeneexp-ST36TPEJ.js.map} +0 -0
  932. /package/dist/{summarizeGeneexpSurvival-ZB7IWGPS.js.map → summarizeGeneexpSurvival-AZOFCBMT.js.map} +0 -0
  933. /package/dist/{summarizeMutationCnv-CUSYURDK.js.map → summarizeMutationCnv-HRCW6BYV.js.map} +0 -0
  934. /package/dist/{summarizeMutationDiagnosis-NSPCT5WI.js.map → summarizeMutationDiagnosis-RQQO2MOR.js.map} +0 -0
  935. /package/dist/{summarizeMutationSurvival-2PZZCC4G.js.map → summarizeMutationSurvival-UHSUJ7FU.js.map} +0 -0
  936. /package/dist/{summary-CYDZSICI.js.map → summary-ZMM5ET67.js.map} +0 -0
  937. /package/dist/{summary.integration.spec-2TLKJS3X.js.map → summary.integration.spec-GW5UGDDU.js.map} +0 -0
  938. /package/dist/{summaryInput-BRQ5JRGV.js.map → summaryInput-ZO5TPARQ.js.map} +0 -0
  939. /package/dist/{sunburst-435LKL2S.js.map → sunburst-6VJS2SUY.js.map} +0 -0
  940. /package/dist/{sunburst-D5WAGHX6.js.map → sunburst-LXRG2SFE.js.map} +0 -0
  941. /package/dist/{survival-MHESSYWF.js.map → survival-QXHY7JRR.js.map} +0 -0
  942. /package/dist/{survival-M63B6DY5.js.map → survival-U6J6KFN2.js.map} +0 -0
  943. /package/dist/{survival.integration.spec-WMS3FTNR.js.map → survival.integration.spec-HN3LL6IY.js.map} +0 -0
  944. /package/dist/{svgraph-LYFGVTHI.js.map → svgraph-CVI27CTM.js.map} +0 -0
  945. /package/dist/{svmr-UR67QZIP.js.map → svmr-GZHAP5IV.js.map} +0 -0
  946. /package/dist/{swimmer-RP4SUEZS.js.map → swimmer-M4JGBO72.js.map} +0 -0
  947. /package/dist/{table-V4OOMF3B.js.map → table-QO22C2ER.js.map} +0 -0
  948. /package/dist/{termCollection-WSNM3YFK.js.map → termCollection-EN73BZV5.js.map} +0 -0
  949. /package/dist/{termCollection-VHGVBSWW.js.map → termCollection-KWNFLRWJ.js.map} +0 -0
  950. /package/dist/{termCollection.unit.spec-NCZUZL6P.js.map → termCollection.unit.spec-Z27AZUE6.js.map} +0 -0
  951. /package/dist/{termCollectionFractionSelection-XM3FJWBQ.js.map → termCollectionFractionSelection-Q7QFEPKA.js.map} +0 -0
  952. /package/dist/{termCollectionFractionSelection.unit.spec-VO4SAV72.js.map → termCollectionFractionSelection.unit.spec-PYLIFZN5.js.map} +0 -0
  953. /package/dist/{tk-KIELQHVI.js.map → tk-WVEDS5OU.js.map} +0 -0
  954. /package/dist/{tp.ui-HAKSWLFB.js.map → tp.ui-CG36YXBY.js.map} +0 -0
  955. /package/dist/{tvs.categorical-G4DM4JY5.js.map → tvs.categorical-GCJISWBS.js.map} +0 -0
  956. /package/dist/{tvs.condition-E5NUQONB.js.map → tvs.condition-YTCVMB3I.js.map} +0 -0
  957. /package/dist/{tvs.dt-T4BK24VZ.js.map → tvs.dt-UCSZ5S44.js.map} +0 -0
  958. /package/dist/{tvs.dtcnv.categorical-V57TZFRA.js.map → tvs.dtcnv.categorical-KYB6XPL3.js.map} +0 -0
  959. /package/dist/{tvs.dtcnv.continuous-D4YIB4PN.js.map → tvs.dtcnv.continuous-MJWJNMKJ.js.map} +0 -0
  960. /package/dist/{tvs.dtfusion-6DUFLUNH.js.map → tvs.dtfusion-IZCEMTH5.js.map} +0 -0
  961. /package/dist/{tvs.dtitd-GOEPAQGR.js.map → tvs.dtitd-DZ4WWGNO.js.map} +0 -0
  962. /package/dist/{tvs.dtsnvindel-ASTXGC4O.js.map → tvs.dtsnvindel-PMJCV4E7.js.map} +0 -0
  963. /package/dist/{tvs.dtsv-7TGDEWXK.js.map → tvs.dtsv-5K2RNWDH.js.map} +0 -0
  964. /package/dist/{tvs.multivalue-SEIGL2W6.js.map → tvs.multivalue-6NSC6JPR.js.map} +0 -0
  965. /package/dist/{tvs.numeric-MLLX5L7Z.js.map → tvs.numeric-7U2NDY4A.js.map} +0 -0
  966. /package/dist/{tvs.samplelst-HAV7C2EA.js.map → tvs.samplelst-3SIYTFWZ.js.map} +0 -0
  967. /package/dist/{tvs.survival-3B522MT2.js.map → tvs.survival-Q3F5SLBW.js.map} +0 -0
  968. /package/dist/{tvs.termCollection-R5NG4VXP.js.map → tvs.termCollection-OR73LBNX.js.map} +0 -0
  969. /package/dist/{vocabulary-LBNHNSEN.js.map → vocabulary-RWRAQ4VJ.js.map} +0 -0
  970. /package/dist/{wsi.direct-ZEZO4NLR.js.map → wsi.direct-HABLR3IF.js.map} +0 -0
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../plots/proteomeCohortCompare.ts"],
4
- "sourcesContent": ["import type { MassState, BasePlotConfig } from '#mass/types/mass'\nimport { getCompInit, copyMerge, type RxComponent } from '#rx'\nimport { PlotBase } from './PlotBase'\nimport { Menu } from '#dom'\nimport { dofetch3 } from '#common/dofetch'\nimport { scaleLinear, axisBottom, axisLeft } from 'd3'\nimport {\n\tmakeTileGrid,\n\tmakeTileCard,\n\trenderPlaceholderTiles,\n\trenderTileError,\n\ttileExpandState\n} from './proteinView.tiles'\n\n/*\nproteomeCohortCompare \u2014 cross-cohort comparison of standardized fold change (log2FC-z).\n\nLaunched from the Studies catalog when \u22652 cohorts are selected. Fetches the aligned z matrix\nfrom termdb/proteomeCohortCompare and renders:\n - 2 cohorts \u2192 a concordance scatter tile (z vs z); points colored by shared DAP direction\n - \u22653 cohorts \u2192 one live tile card per tool (as in the Protein View): a cohort correlation matrix,\n a protein \u00D7 cohort clustered heatmap, a shared-vs-specific DAP overlap (an UpSet\n per up/down direction, each intersection click-through to its protein list), and\n the trajectory below\n every tile expands in place (click or \u2922) to the full interactive tool\n - a series \u2192 an age/progression trajectory: when the selection contains \u22651 ordered series\n (cohorts sharing dataset trajectory.series), one panel per k-means cluster showing\n the member proteins' relative-abundance trajectories + a thick eigengene trend line\n*/\n\nconst defaultConfig = { chartType: 'proteomeCohortCompare' }\n\ntype CohortRef = { organism: string; assay: string; cohort: string; label?: string }\n\nconst PLOT = 360\nconst MARGIN = { top: 16, right: 12, bottom: 46, left: 50 }\nconst UP = '#b2182b'\nconst DOWN = '#2166ac'\nconst DISCORDANT = '#e08214' // DAP in both cohorts, opposite directions\nconst NEUTRAL = '#cccccc' // not a shared DAP\n/** default DAP cutoffs. A real DAP needs BOTH a fold-change and a significance cutoff\n * (the DAP file lists every identified protein). papers use |log2FC-z|>2 (human)/2.5 (mouse)\n * and FDR<0.05; both are user-adjustable. */\nconst Z_THRESH = 2\nconst FDR_THRESH = 0.05\n\ntype ViewKey = 'scatter' | 'default' | 'heatmap' | 'overlap' | 'trajectory'\n\n/** the comparison tools. Each is a live tile card (Protein View style): the card face shows\n * the tool rendered at a reduced scale with its side panels hidden; expanding the card shows\n * the full interactive tool in place. `available` gates the tile on the current\n * selection; an unavailable tool is shown as a greyed placeholder that says what it needs. */\ntype ToolTile = {\n\tkey: ViewKey\n\ttitle: string\n\tsubtitle: string\n\tavailable: (self: ProteomeCohortCompare, data: any) => boolean\n\tunavailableNote: string\n\trender: (self: ProteomeCohortCompare, data: any) => void\n\t/** optional tool-specific controls, rendered unscaled in the tile card (between subtitle and\n\t * face) and at the top of the expanded view, so they belong to the tool rather than the plot */\n\tcontrols?: (self: ProteomeCohortCompare, holder: any) => void\n}\n\n/** side panels (cutoff controls, legends, gene lists) carry this class so the tile face can hide them */\nconst PANEL_CLASS = 'sjpp-cc-panel'\n/** the card face: inner box the scaled tool is fitted into */\nconst FACE_W = 206\nconst FACE_H = 170\n\n/** the 2-cohort tool */\nconst PAIR_TILES: ToolTile[] = [\n\t{\n\t\tkey: 'scatter',\n\t\ttitle: 'Concordance scatter',\n\t\tsubtitle: 'log2FC-z of one cohort vs the other',\n\t\tavailable: () => true,\n\t\tunavailableNote: '',\n\t\trender: (self, data) => self.renderScatter(data)\n\t}\n]\n\n/** the \u22653-cohort tools */\nconst TOOL_TILES: ToolTile[] = [\n\t{\n\t\tkey: 'default',\n\t\ttitle: 'Correlation matrix',\n\t\tsubtitle: 'Cohort \u00D7 cohort concordance of log2FC-z',\n\t\tavailable: () => true,\n\t\tunavailableNote: '',\n\t\trender: (self, data) => self.renderMatrix(data),\n\t\tcontrols: (self, holder) => self.renderMatrixMetricSelect(holder)\n\t},\n\t{\n\t\tkey: 'heatmap',\n\t\ttitle: 'Protein heatmap',\n\t\tsubtitle: 'Clustered protein \u00D7 cohort log2FC-z',\n\t\tavailable: (_, data) => !!data.heatmap,\n\t\tunavailableNote: 'Heatmap unavailable for this selection',\n\t\trender: (self, data) => self.renderHeatmap(data.heatmap)\n\t},\n\t{\n\t\tkey: 'overlap',\n\t\ttitle: 'UpSet',\n\t\tsubtitle: 'Shared vs cohort-specific DAPs',\n\t\tavailable: (_, data) => !!data.overlap,\n\t\tunavailableNote: 'Overlap unavailable for this selection',\n\t\trender: (self, data) => self.renderOverlap(data.overlap)\n\t},\n\t{\n\t\tkey: 'trajectory',\n\t\ttitle: 'Trajectory',\n\t\tsubtitle: 'Protein clusters over age / progression',\n\t\tavailable: (self, data) => self.trajectorySeriesCount(data.cohorts) > 0 && Array.isArray(data.trajectory),\n\t\tunavailableNote: 'Needs an ordered series (\u22653 timepoints) in the selection',\n\t\trender: (self, data) => self.renderTrajectory(data.trajectory)\n\t}\n]\n\nclass ProteomeCohortCompare extends PlotBase implements RxComponent {\n\tstatic type = 'proteomeCohortCompare'\n\ttype: string\n\tdom!: {\n\t\tholder: any\n\t\tbody: any\n\t\ttip: Menu\n\t\theader?: any\n\t}\n\tcohorts: CohortRef[] = []\n\tmatrixMetric: 'spearman' | 'pearson' = 'spearman'\n\t/** DAP thresholds (scatter coloring + heatmap row selection) */\n\tzThresh = Z_THRESH\n\tfdrThresh = FDR_THRESH\n\t/** max heatmap rows (DAP-union capped by cross-cohort variance) */\n\tmaxRows = 30\n\t/** number of k-means clusters in the trajectory view */\n\tnClusters = 3\n\t/** trajectory drill-down selection: which series/cluster's genes are listed + highlighted */\n\ttrajSelected: { si: number; pi: number } | null = null\n\t/** last fetched response, kept so threshold changes re-render without refetching */\n\tdata: any = null\n\t/** signature of the current cohort selection \u2014 used to reset the trajectory drill-down when it changes */\n\tcohortKey = ''\n\t/** key of the in-place expanded tile, kept so a refetch or redraw reopens it */\n\texpandedTileKey: ViewKey | null = null\n\n\tconstructor(opts: any, api) {\n\t\tsuper(opts, api)\n\t\tthis.type = ProteomeCohortCompare.type\n\t}\n\n\tasync init() {\n\t\tconst holder = this.opts.holder.append('div').style('padding', '10px')\n\t\tthis.dom = {\n\t\t\tholder,\n\t\t\tbody: holder.append('div'),\n\t\t\ttip: new Menu({ padding: '' }),\n\t\t\theader: this.opts.header\n\t\t}\n\t\tif (this.dom.header) this.dom.header.html('Cohort Comparison')\n\t}\n\n\tgetState(appState: MassState) {\n\t\tconst config: any = appState.plots.find((p: BasePlotConfig) => p.id === this.id)\n\t\tif (!config) throw `No plot with id='${this.id}' found`\n\t\treturn { config }\n\t}\n\n\tasync main() {\n\t\tconst config: any = this.state.config\n\t\tthis.cohorts = config.cohorts || []\n\t\tif (this.cohorts.length < 2) {\n\t\t\tthis.dom.body.selectAll('*').remove()\n\t\t\tthis.dom.body.append('div').style('color', '#666').text('Select at least two cohorts to compare.')\n\t\t\treturn\n\t\t}\n\t\t// reset the trajectory drill-down when the cohort selection changes (its si/pi would be stale)\n\t\tconst key = this.cohorts.map(c => `${c.organism}|${c.assay}|${c.cohort}`).join(';')\n\t\tif (key !== this.cohortKey) {\n\t\t\tthis.cohortKey = key\n\t\t\tthis.trajSelected = null\n\t\t}\n\t\tawait this.reload()\n\t}\n\n\tcohortLabel(c: CohortRef) {\n\t\treturn c.label || c.cohort\n\t}\n\n\t/** number of ordered series with \u22653 distinct timepoints among the response cohorts \u2014 gates the\n\t * Trajectory view (matches the server, which needs \u22653 distinct ages to build a trajectory) */\n\ttrajectorySeriesCount(cohortsData: any[]): number {\n\t\tconst bySeries = new Map<string, Set<number>>()\n\t\tfor (const c of cohortsData || []) {\n\t\t\tconst t = c?.trajectory\n\t\t\tif (!t?.series) continue\n\t\t\tlet vals = bySeries.get(t.series)\n\t\t\tif (!vals) bySeries.set(t.series, (vals = new Set()))\n\t\t\tvals.add(t.value)\n\t\t}\n\t\tlet n = 0\n\t\tfor (const vals of bySeries.values()) if (vals.size >= 3) n++\n\t\treturn n\n\t}\n\n\tasync reload() {\n\t\tconst multi = this.cohorts.length > 2\n\t\tconst data = await dofetch3('termdb/proteomeCohortCompare', {\n\t\t\tbody: {\n\t\t\t\tgenome: this.app.opts.state.vocab.genome,\n\t\t\t\tdslabel: this.app.opts.state.vocab.dslabel,\n\t\t\t\tcohorts: this.cohorts,\n\t\t\t\t// \u22653 cohorts: every tool is rendered as a tile, so fetch them all in one request\n\t\t\t\theatmap: multi,\n\t\t\t\toverlap: multi,\n\t\t\t\ttrajectory: multi,\n\t\t\t\tzThresh: this.zThresh,\n\t\t\t\tfdrThresh: this.fdrThresh,\n\t\t\t\tmaxRows: this.maxRows,\n\t\t\t\tnClusters: this.nClusters\n\t\t\t}\n\t\t}).catch(e => {\n\t\t\tthis.dom.body.selectAll('*').remove()\n\t\t\tthrow e\n\t\t})\n\t\t// clear after the fetch (not before) so the page doesn't collapse and jump while\n\t\t// a cutoff change inside an expanded tile refetches\n\t\tthis.dom.body.selectAll('*').remove()\n\t\t// guard: a missing/failed endpoint (e.g. 404) returns no z matrix \u2014 fail clearly, don't crash\n\t\tif (!data || data.error || !Array.isArray(data.z) || typeof data.sharedGeneCount !== 'number') {\n\t\t\tthis.dom.body\n\t\t\t\t.append('div')\n\t\t\t\t.style('padding', '12px')\n\t\t\t\t.style('color', '#a00')\n\t\t\t\t.text(\n\t\t\t\t\t(data && data.error) ||\n\t\t\t\t\t\t'Cohort comparison is unavailable \u2014 the server may need to be restarted to load the comparison endpoint.'\n\t\t\t\t)\n\t\t\treturn\n\t\t}\n\t\tthis.data = data\n\t\tif (data.sharedGeneCount < 3) {\n\t\t\tthis.dom.body\n\t\t\t\t.append('div')\n\t\t\t\t.style('padding', '12px')\n\t\t\t\t.style('color', '#a00')\n\t\t\t\t.text('Too few shared proteins to compare.')\n\t\t\treturn\n\t\t}\n\t\tthis.renderToolTiles(data)\n\t}\n\n\ttiles(): ToolTile[] {\n\t\treturn this.cohorts.length > 2 ? TOOL_TILES : PAIR_TILES\n\t}\n\n\t/** run a renderer (which draws into this.dom.body) against another holder */\n\trenderInto(holder: any, draw: () => void) {\n\t\tconst body = this.dom.body\n\t\tthis.dom.body = holder\n\t\ttry {\n\t\t\tdraw()\n\t\t} finally {\n\t\t\tthis.dom.body = body\n\t\t}\n\t}\n\n\t/** one live tile card per tool (same cards as the Protein View study tiles): the face is the\n\t * tool drawn at full size then scaled to fit, side panels hidden; expanding the card shows the\n\t * full tool in place. Tools without data render as greyed placeholders after the live ones. */\n\trenderToolTiles(data: any) {\n\t\tconst grid = makeTileGrid(this.dom.body)\n\t\tconst missing: ToolTile[] = []\n\t\tfor (const tile of this.tiles()) {\n\t\t\tif (!tile.available(this, data)) {\n\t\t\t\tmissing.push(tile)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tconst body = makeTileCard(grid, {\n\t\t\t\ttitle: tile.title,\n\t\t\t\tsubtitle: tile.subtitle,\n\t\t\t\tuniform: true,\n\t\t\t\texpand: { render: holder => this.renderExpanded(tile, holder, data), ...tileExpandState(this, tile.key) }\n\t\t\t})\n\t\t\tif (tile.controls) {\n\t\t\t\ttile.controls(this, body.append('div').style('margin-top', '2px'))\n\t\t\t}\n\t\t\t// fixed viewport the scaled drawing is fitted into\n\t\t\tconst face = body\n\t\t\t\t.append('div')\n\t\t\t\t.style('width', `${FACE_W}px`)\n\t\t\t\t.style('height', `${FACE_H}px`)\n\t\t\t\t.style('overflow', 'hidden')\n\t\t\t\t.style('margin-top', '4px')\n\t\t\t\t.attr('title', `Expand ${tile.title}`)\n\t\t\tconst inner = face.append('div').style('display', 'inline-block').style('transform-origin', 'top left')\n\t\t\ttry {\n\t\t\t\tthis.renderInto(inner, () => tile.render(this, data))\n\t\t\t\tinner.selectAll(`.${PANEL_CLASS}`).style('display', 'none')\n\t\t\t\t// fit: measure the unscaled drawing and scale it down to the face\n\t\t\t\tconst node = inner.node() as HTMLElement\n\t\t\t\tconst w = node.scrollWidth || node.offsetWidth\n\t\t\t\tconst h = node.scrollHeight || node.offsetHeight\n\t\t\t\tconst k = w && h ? Math.min(1, FACE_W / w, FACE_H / h) : 1\n\t\t\t\tinner.style('transform', `scale(${k})`)\n\t\t\t\t// center the scaled drawing in the face (transform doesn't affect layout, so offset\n\t\t\t\t// by the leftover space around the scaled box) instead of pinning it top-left\n\t\t\t\tinner\n\t\t\t\t\t.style('margin-left', `${Math.max(0, (FACE_W - w * k) / 2)}px`)\n\t\t\t\t\t.style('margin-top', `${Math.max(0, (FACE_H - h * k) / 2)}px`)\n\t\t\t\t// the face is a preview: swallow clicks that would drill down from the mini drawing\n\t\t\t\tinner.style('pointer-events', 'none')\n\t\t\t} catch (err: any) {\n\t\t\t\trenderTileError(face, err, this)\n\t\t\t}\n\t\t}\n\t\trenderPlaceholderTiles(\n\t\t\tgrid,\n\t\t\tmissing.map(t => ({ title: t.title, note: t.unavailableNote }))\n\t\t)\n\t}\n\n\t/** the expanded tile: the full interactive tool with its side panels and controls */\n\trenderExpanded(tile: ToolTile, holder: any, data: any) {\n\t\tif (tile.controls) tile.controls(this, holder.append('div').style('margin-bottom', '8px'))\n\t\ttry {\n\t\t\tthis.renderInto(holder.append('div'), () => tile.render(this, data))\n\t\t} catch (err: any) {\n\t\t\trenderTileError(holder, err, this)\n\t\t}\n\t}\n\n\t/** Spearman/Pearson toggle for the correlation matrix. The response carries both matrices,\n\t * so switching only redraws the tiles \u2014 no refetch. */\n\trenderMatrixMetricSelect(holder: any) {\n\t\tconst label = holder.append('label').style('font-size', '0.8em').style('color', '#374151')\n\t\tlabel.append('span').style('margin-right', '6px').text('Correlation:')\n\t\tconst sel = label\n\t\t\t.append('select')\n\t\t\t.style('font-size', '1em')\n\t\t\t.on('change', (event: any) => {\n\t\t\t\tthis.matrixMetric = event.target.value\n\t\t\t\tthis.redrawTools()\n\t\t\t})\n\t\tfor (const m of ['spearman', 'pearson']) {\n\t\t\tconst o = sel\n\t\t\t\t.append('option')\n\t\t\t\t.attr('value', m)\n\t\t\t\t.text(m[0].toUpperCase() + m.slice(1))\n\t\t\tif (m === this.matrixMetric) o.property('selected', true)\n\t\t}\n\t}\n\n\t/** re-render the tool tiles (and the expanded one) from the cached response (no refetch) */\n\tredrawTools() {\n\t\tif (!this.data) return\n\t\tthis.dom.body.selectAll('*').remove()\n\t\tthis.renderToolTiles(this.data)\n\t}\n\n\trenderScatter(data: any) {\n\t\tconst [ca, cb] = this.cohorts\n\t\tconst zx: number[] = data.z[0]\n\t\tconst zy: number[] = data.z[1]\n\t\tconst px: number[] = data.fdr[0] // per-cohort FDR for the shared genes\n\t\tconst py: number[] = data.fdr[1]\n\t\tconst genes: string[] = data.genes\n\t\tconst rho: number = data.spearman[0][1]\n\t\tconst r: number = data.pearson[0][1]\n\t\tconst rhoP: number | null = data.spearmanP?.[0]?.[1] ?? null\n\t\tconst rP: number | null = data.pearsonP?.[0]?.[1] ?? null\n\t\tconst fmtP = (p: number | null) =>\n\t\t\tp === null || !Number.isFinite(p) ? '' : `, p = ${p < 1e-4 ? p.toExponential(1) : p.toFixed(4)}`\n\t\tconst n: number = data.sharedGeneCount\n\t\tconst zT = this.zThresh\n\t\tconst fT = this.fdrThresh\n\n\t\t// a protein is a DAP in a cohort only if it clears BOTH the |z| and FDR cutoffs.\n\t\t// classify by shared direction across the two cohorts.\n\t\tconst isDap = (z: number, fdr: number) => Math.abs(z) >= zT && fdr <= fT\n\t\tconst catOf = (i: number): 'up' | 'down' | 'discordant' | 'other' => {\n\t\t\tif (!isDap(zx[i], px[i]) || !isDap(zy[i], py[i])) return 'other'\n\t\t\tconst a = zx[i] > 0,\n\t\t\t\tb = zy[i] > 0\n\t\t\tif (a && b) return 'up'\n\t\t\tif (!a && !b) return 'down'\n\t\t\treturn 'discordant'\n\t\t}\n\t\tconst cats = genes.map((_, i) => catOf(i))\n\t\tconst counts = { up: 0, down: 0, discordant: 0, other: 0 }\n\t\tfor (const c of cats) counts[c]++\n\t\tconst catColor = { up: UP, down: DOWN, discordant: DISCORDANT, other: NEUTRAL }\n\n\t\t// --- plot on the left, info/controls/legend panel on the right ---\n\t\tconst row = this.dom.body\n\t\t\t.append('div')\n\t\t\t.style('display', 'flex')\n\t\t\t.style('gap', '18px')\n\t\t\t.style('align-items', 'flex-start')\n\n\t\t// axes on the ACTUAL data extent (no empty margins around the cloud)\n\t\tlet xmin = Infinity,\n\t\t\txmax = -Infinity,\n\t\t\tymin = Infinity,\n\t\t\tymax = -Infinity\n\t\tfor (let i = 0; i < genes.length; i++) {\n\t\t\tif (zx[i] < xmin) xmin = zx[i]\n\t\t\tif (zx[i] > xmax) xmax = zx[i]\n\t\t\tif (zy[i] < ymin) ymin = zy[i]\n\t\t\tif (zy[i] > ymax) ymax = zy[i]\n\t\t}\n\t\tconst padX = (xmax - xmin) * 0.04 || 1\n\t\tconst padY = (ymax - ymin) * 0.04 || 1\n\t\tconst x = scaleLinear()\n\t\t\t.domain([xmin - padX, xmax + padX])\n\t\t\t.range([MARGIN.left, MARGIN.left + PLOT])\n\t\tconst y = scaleLinear()\n\t\t\t.domain([ymin - padY, ymax + padY])\n\t\t\t.range([MARGIN.top + PLOT, MARGIN.top])\n\n\t\tconst svg = row\n\t\t\t.append('svg')\n\t\t\t.attr('width', MARGIN.left + PLOT + MARGIN.right)\n\t\t\t.attr('height', MARGIN.top + PLOT + MARGIN.bottom)\n\n\t\t// zero reference lines (only when 0 is within the plotted range)\n\t\tif (xmin < 0 && xmax > 0)\n\t\t\tsvg\n\t\t\t\t.append('line')\n\t\t\t\t.attr('x1', x(0))\n\t\t\t\t.attr('y1', MARGIN.top)\n\t\t\t\t.attr('x2', x(0))\n\t\t\t\t.attr('y2', MARGIN.top + PLOT)\n\t\t\t\t.attr('stroke', '#eee')\n\t\tif (ymin < 0 && ymax > 0)\n\t\t\tsvg\n\t\t\t\t.append('line')\n\t\t\t\t.attr('x1', MARGIN.left)\n\t\t\t\t.attr('y1', y(0))\n\t\t\t\t.attr('x2', MARGIN.left + PLOT)\n\t\t\t\t.attr('y2', y(0))\n\t\t\t\t.attr('stroke', '#eee')\n\n\t\t// points \u2014 draw the grey background cloud first, colored shared movers on top\n\t\tconst pts = svg.append('g')\n\t\tconst drawPoint = (i: number) => {\n\t\t\tconst c = cats[i]\n\t\t\tpts\n\t\t\t\t.append('circle')\n\t\t\t\t.attr('cx', x(zx[i]))\n\t\t\t\t.attr('cy', y(zy[i]))\n\t\t\t\t.attr('r', c === 'other' ? 1.8 : 2.6)\n\t\t\t\t.attr('fill', catColor[c])\n\t\t\t\t.attr('fill-opacity', c === 'other' ? 0.3 : 0.8)\n\t\t\t\t.on('mouseover', (event: any) => {\n\t\t\t\t\tthis.dom.tip.clear().show(event.clientX, event.clientY)\n\t\t\t\t\tthis.dom.tip.d\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.style('padding', '5px 8px')\n\t\t\t\t\t\t.style('font-size', '0.85em')\n\t\t\t\t\t\t.html(\n\t\t\t\t\t\t\t`<b>${genes[i]}</b><br>${this.cohortLabel(ca)}: z=${zx[i].toFixed(2)} (log2FC ${data.fc[0][i].toFixed(\n\t\t\t\t\t\t\t\t2\n\t\t\t\t\t\t\t)}, FDR ${px[i].toExponential(1)})<br>${this.cohortLabel(cb)}: z=${zy[i].toFixed(2)} (log2FC ${data.fc[1][\n\t\t\t\t\t\t\t\ti\n\t\t\t\t\t\t\t].toFixed(2)}, FDR ${py[i].toExponential(1)})`\n\t\t\t\t\t\t)\n\t\t\t\t})\n\t\t\t\t.on('mouseout', () => this.dom.tip.hide())\n\t\t}\n\t\tfor (let i = 0; i < genes.length; i++) if (cats[i] === 'other') drawPoint(i)\n\t\tfor (let i = 0; i < genes.length; i++) if (cats[i] !== 'other') drawPoint(i)\n\n\t\t// axes + titles\n\t\tsvg\n\t\t\t.append('g')\n\t\t\t.attr('transform', `translate(0,${MARGIN.top + PLOT})`)\n\t\t\t.call(axisBottom(x).ticks(5) as any)\n\t\tsvg\n\t\t\t.append('g')\n\t\t\t.attr('transform', `translate(${MARGIN.left},0)`)\n\t\t\t.call(axisLeft(y).ticks(5) as any)\n\t\tsvg\n\t\t\t.append('text')\n\t\t\t.attr('x', MARGIN.left + PLOT / 2)\n\t\t\t.attr('y', MARGIN.top + PLOT + 36)\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.style('font-size', '11px')\n\t\t\t.text(`${this.cohortLabel(ca)} (log2FC-z)`)\n\t\tsvg\n\t\t\t.append('text')\n\t\t\t.attr('transform', `translate(12,${MARGIN.top + PLOT / 2}) rotate(-90)`)\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.style('font-size', '11px')\n\t\t\t.text(`${this.cohortLabel(cb)} (log2FC-z)`)\n\n\t\t// --- right panel: stats, DAP-cutoff controls, legend ---\n\t\tconst panel = row\n\t\t\t.append('div')\n\t\t\t.classed(PANEL_CLASS, true)\n\t\t\t.style('font-size', '0.85em')\n\t\t\t.style('padding-top', '4px')\n\t\t\t.style('min-width', '190px')\n\n\t\tconst statBox = panel.append('div').style('margin-bottom', '12px').style('line-height', '1.6')\n\t\tstatBox\n\t\t\t.append('div')\n\t\t\t.attr('title', 'Number of shared proteins compared')\n\t\t\t.html(`<b>n</b> = ${n.toLocaleString()} shared proteins`)\n\t\tstatBox\n\t\t\t.append('div')\n\t\t\t.attr('title', 'Spearman rank correlation of log2FC-z (robust; no linearity assumption)')\n\t\t\t.html(`<b>\u03C1</b> (Spearman) = ${rho.toFixed(3)}${fmtP(rhoP)}`)\n\t\tstatBox\n\t\t\t.append('div')\n\t\t\t.attr('title', 'Pearson correlation of log2FC-z (linear agreement; the papers\u2019 R)')\n\t\t\t.html(`<b>r</b> (Pearson) = ${r.toFixed(3)}${fmtP(rP)}`)\n\n\t\t// DAP-cutoff controls \u2014 recolor without refetching\n\t\tconst cutoffs = panel.append('div').style('margin-bottom', '12px')\n\t\tcutoffs\n\t\t\t.append('div')\n\t\t\t.style('font-weight', '600')\n\t\t\t.style('margin-bottom', '3px')\n\t\t\t.attr('title', 'A protein is a shared DAP only if it clears BOTH cutoffs in BOTH cohorts')\n\t\t\t.text('DAP cutoffs')\n\t\tconst numInput = (label: string, value: number, step: number, title: string, onSet: (v: number) => void) => {\n\t\t\tconst l = cutoffs.append('div').style('margin-bottom', '2px').attr('title', title)\n\t\t\tl.append('span').style('display', 'inline-block').style('width', '44px').html(label)\n\t\t\tl.append('input')\n\t\t\t\t.attr('type', 'number')\n\t\t\t\t.attr('step', step)\n\t\t\t\t.attr('min', 0)\n\t\t\t\t.property('value', value)\n\t\t\t\t.style('width', '70px')\n\t\t\t\t.on('change', (event: any) => {\n\t\t\t\t\tconst v = Number(event.target.value)\n\t\t\t\t\tif (Number.isFinite(v) && v >= 0) {\n\t\t\t\t\t\tonSet(v)\n\t\t\t\t\t\tthis.redrawTools()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\t\tnumInput('|z| \u2265', this.zThresh, 0.5, 'Minimum |log2FC-z| (standardized fold change)', v => (this.zThresh = v))\n\t\tnumInput('FDR \u2264', this.fdrThresh, 0.01, 'Maximum FDR', v => (this.fdrThresh = v))\n\n\t\t// legend\n\t\tconst legend = panel.append('div')\n\t\tlegend.append('div').style('font-weight', '600').style('margin-bottom', '6px').text('Shared regulation')\n\t\tconst legItems: [string, string, number][] = [\n\t\t\t[UP, 'Up in both', counts.up],\n\t\t\t[DOWN, 'Down in both', counts.down],\n\t\t\t[DISCORDANT, 'Opposite (DAP in both)', counts.discordant],\n\t\t\t[NEUTRAL, 'Not a shared DAP', counts.other]\n\t\t]\n\t\tfor (const [col, lab, ct] of legItems) {\n\t\t\tconst item = legend\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'flex')\n\t\t\t\t.style('align-items', 'center')\n\t\t\t\t.style('gap', '6px')\n\t\t\t\t.style('margin-bottom', '3px')\n\t\t\titem\n\t\t\t\t.append('span')\n\t\t\t\t.style('width', '10px')\n\t\t\t\t.style('height', '10px')\n\t\t\t\t.style('border-radius', '50%')\n\t\t\t\t.style('background', col)\n\t\t\t\t.style('display', 'inline-block')\n\t\t\titem.append('span').html(`${lab} <span style=\"color:#999\">(${ct.toLocaleString()})</span>`)\n\t\t}\n\t}\n\n\trenderMatrix(data: any) {\n\t\tconst n = this.cohorts.length\n\t\tconst corr: number[][] = data[this.matrixMetric]\n\t\tconst order = leafOrder(corr)\n\t\tconst labels = order.map(i => this.cohortLabel(this.cohorts[i]))\n\n\t\tconst cell = Math.max(26, Math.min(48, Math.floor(360 / n)))\n\t\t// label gutter sized to the longest label (\u22486.5px/char at 11px) so short names don't\n\t\t// leave a blank strip on the left that throws the tile preview off-center\n\t\tconst maxLabelLen = Math.max(...labels.map(l => l.length))\n\t\tconst labelPad = Math.min(120, Math.max(40, Math.ceil(maxLabelLen * 6.5) + 12))\n\t\tconst svg = this.dom.body\n\t\t\t.append('svg')\n\t\t\t.attr('width', labelPad + n * cell + 60)\n\t\t\t.attr('height', labelPad + n * cell + 20)\n\n\t\tconst cscale = scaleLinear<string>().domain([-1, 0, 1]).range([DOWN, '#f7f7f7', UP]).clamp(true)\n\n\t\tconst g = svg.append('g').attr('transform', `translate(${labelPad},${labelPad})`)\n\t\tfor (let ri = 0; ri < n; ri++) {\n\t\t\tfor (let ci = 0; ci < n; ci++) {\n\t\t\t\tconst v = corr[order[ri]][order[ci]]\n\t\t\t\tg.append('rect')\n\t\t\t\t\t.attr('x', ci * cell)\n\t\t\t\t\t.attr('y', ri * cell)\n\t\t\t\t\t.attr('width', cell - 1)\n\t\t\t\t\t.attr('height', cell - 1)\n\t\t\t\t\t.attr('fill', cscale(v))\n\t\t\t\t\t.style('cursor', ri === ci ? 'default' : 'pointer')\n\t\t\t\t\t.on('mouseover', (event: any) => {\n\t\t\t\t\t\tthis.dom.tip.clear().show(event.clientX, event.clientY)\n\t\t\t\t\t\tthis.dom.tip.d\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.style('padding', '5px 8px')\n\t\t\t\t\t\t\t.style('font-size', '0.85em')\n\t\t\t\t\t\t\t.html(`${labels[ri]} \u00D7 ${labels[ci]}<br><b>${this.matrixMetric} = ${v.toFixed(3)}</b>`)\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseout', () => this.dom.tip.hide())\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tif (ri === ci) return\n\t\t\t\t\t\tthis.openPair(this.cohorts[order[ri]], this.cohorts[order[ci]])\n\t\t\t\t\t})\n\t\t\t\tg.append('text')\n\t\t\t\t\t.attr('x', ci * cell + cell / 2)\n\t\t\t\t\t.attr('y', ri * cell + cell / 2)\n\t\t\t\t\t.attr('text-anchor', 'middle')\n\t\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t\t.style('font-size', '10px')\n\t\t\t\t\t.style('fill', Math.abs(v) > 0.6 ? '#fff' : '#333')\n\t\t\t\t\t.style('pointer-events', 'none') // let hover/click fall through to the cell rect below\n\t\t\t\t\t.text(v.toFixed(2))\n\t\t\t}\n\t\t}\n\n\t\t// row labels (left) + column labels (top, rotated)\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tsvg\n\t\t\t\t.append('text')\n\t\t\t\t.attr('x', labelPad - 6)\n\t\t\t\t.attr('y', labelPad + i * cell + cell / 2)\n\t\t\t\t.attr('text-anchor', 'end')\n\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t.style('font-size', '11px')\n\t\t\t\t.text(labels[i])\n\t\t\tsvg\n\t\t\t\t.append('text')\n\t\t\t\t.attr('transform', `translate(${labelPad + i * cell + cell / 2},${labelPad - 6}) rotate(-45)`)\n\t\t\t\t.attr('text-anchor', 'start')\n\t\t\t\t.style('font-size', '11px')\n\t\t\t\t.text(labels[i])\n\t\t}\n\n\t\tthis.dom.body\n\t\t\t.append('div')\n\t\t\t.classed(PANEL_CLASS, true)\n\t\t\t.style('font-size', '0.8em')\n\t\t\t.style('color', '#777')\n\t\t\t.style('margin-top', '6px')\n\t\t\t.text('Rows/cols ordered by hierarchical clustering. Click a cell to open the pairwise scatter.')\n\t}\n\n\t/** open a fresh 2-cohort comparison for the clicked matrix pair */\n\topenPair(a: CohortRef, b: CohortRef) {\n\t\tthis.app.dispatch({\n\t\t\ttype: 'plot_create',\n\t\t\tconfig: { chartType: 'proteomeCohortCompare', cohorts: [a, b] }\n\t\t})\n\t}\n\n\t/** protein \u00D7 cohort log2FC-z heatmap, clustered on both axes (via server hclust.R) */\n\trenderHeatmap(hm: any) {\n\t\tif (!hm) {\n\t\t\tthis.dom.body.append('div').style('padding', '12px').style('color', '#a00').text('Heatmap unavailable.')\n\t\t\treturn\n\t\t}\n\n\t\t// layout: heatmap on the left, controls + legend + count on the right, bottom-aligned to the heatmap\n\t\tconst wrap = this.dom.body\n\t\t\t.append('div')\n\t\t\t.style('display', 'flex')\n\t\t\t.style('gap', '18px')\n\t\t\t.style('align-items', 'flex-end')\n\t\tconst left = wrap.append('div')\n\t\tconst panel = wrap.append('div').classed(PANEL_CLASS, true).style('font-size', '0.85em').style('min-width', '160px')\n\n\t\t// DAP-cutoff + row-cap controls \u2014 changing any recomputes rows/clustering on the server\n\t\tpanel.append('div').style('font-weight', '600').style('margin-bottom', '3px').text('DAP cutoffs')\n\t\tconst numInput = (label: string, value: number, step: number, title: string, onSet: (v: number) => void) => {\n\t\t\tconst l = panel.append('div').style('margin-bottom', '3px').attr('title', title)\n\t\t\tl.append('span').style('display', 'inline-block').style('width', '58px').html(label)\n\t\t\tl.append('input')\n\t\t\t\t.attr('type', 'number')\n\t\t\t\t.attr('step', step)\n\t\t\t\t.attr('min', 0)\n\t\t\t\t.property('value', value)\n\t\t\t\t.style('width', '64px')\n\t\t\t\t.on('change', (e: any) => {\n\t\t\t\t\tconst v = Number(e.target.value)\n\t\t\t\t\tif (Number.isFinite(v) && v >= 0) {\n\t\t\t\t\t\tonSet(v)\n\t\t\t\t\t\tthis.reload()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\t\tnumInput('|z| \u2265', this.zThresh, 0.5, 'DAP fold-change cutoff', v => (this.zThresh = v))\n\t\tnumInput('FDR \u2264', this.fdrThresh, 0.01, 'DAP significance cutoff (FDR)', v => (this.fdrThresh = v))\n\t\tnumInput(\n\t\t\t'max rows',\n\t\t\tthis.maxRows,\n\t\t\t25,\n\t\t\t'Cap on proteins shown (top by variance of z across cohorts)',\n\t\t\tv => (this.maxRows = Math.round(v))\n\t\t)\n\t\t// color legend goes here, directly under the DAP cutoffs (filled in once `cap` is known)\n\t\tconst legendHolder = panel.append('div').style('margin-top', '12px')\n\t\tconst countTxt =\n\t\t\thm.shown < hm.totalDap ? `${hm.shown} of ${hm.totalDap} DAP-union proteins` : `${hm.shown} DAP-union proteins`\n\t\tpanel.append('div').style('margin-top', '12px').style('color', '#777').text(countTxt)\n\n\t\tif (!hm.rowNames.length) {\n\t\t\tleft\n\t\t\t\t.append('div')\n\t\t\t\t.style('padding', '12px')\n\t\t\t\t.style('color', '#a00')\n\t\t\t\t.text('No DAP proteins at these cutoffs \u2014 loosen |z| or FDR.')\n\t\t\treturn\n\t\t}\n\n\t\tconst rows: string[] = hm.rowNames\n\t\tconst cols: string[] = hm.colLabels\n\t\tconst Z: number[][] = hm.z\n\t\tconst cellW = 45\n\t\t// cap the gene-rows grid at MAX_GRID_H px tall; shrink cell height when there are many genes,\n\t\t// and drop the gene names once cells get too short to fit readable text (hover still shows them)\n\t\tconst MAX_GRID_H = 600\n\t\tconst cellH = Math.min(18, MAX_GRID_H / rows.length)\n\t\tconst showRowNames = cellH >= 8\n\t\tconst rowDendW = hm.rowDendrogram ? 90 : 0\n\t\tconst colDendH = hm.colDendrogram ? 70 : 0\n\t\tconst maxLabelLen = Math.max(1, ...cols.map(c => c.length))\n\t\t// size the vertical-label band to the longest name + a gap so labels never touch the top dendrogram\n\t\tconst colLabelH = Math.min(220, Math.max(70, Math.round(maxLabelLen * 7) + 12))\n\t\tconst rowLabelW = showRowNames ? 140 : 8\n\t\tconst legendW = 12 // just a little right padding now that the legend lives in the side panel\n\t\tconst gridW = cols.length * cellW\n\t\tconst gridH = rows.length * cellH\n\t\tconst gridX = rowDendW\n\t\tconst gridY = colDendH + colLabelH\n\n\t\tconst svg = left\n\t\t\t.append('svg')\n\t\t\t.attr('width', gridX + gridW + rowLabelW + legendW)\n\t\t\t.attr('height', gridY + gridH + 12)\n\t\t\t.attr('font-family', 'sans-serif')\n\n\t\tlet cap = 1\n\t\tfor (const row of Z) for (const v of row) cap = Math.max(cap, Math.abs(v))\n\t\tconst color = scaleLinear<string>().domain([-cap, 0, cap]).range([DOWN, '#f7f7f7', UP]).clamp(true)\n\n\t\t// dendrograms (both axes)\n\t\tif (hm.rowDendrogram)\n\t\t\tdrawDendrogram(\n\t\t\t\tsvg.append('g').attr('transform', `translate(0,${gridY})`),\n\t\t\t\thm.rowDendrogram,\n\t\t\t\tcellH,\n\t\t\t\trowDendW,\n\t\t\t\t'left'\n\t\t\t)\n\t\tif (hm.colDendrogram)\n\t\t\tdrawDendrogram(\n\t\t\t\tsvg.append('g').attr('transform', `translate(${gridX},0)`),\n\t\t\t\thm.colDendrogram,\n\t\t\t\tcellW,\n\t\t\t\tcolDendH,\n\t\t\t\t'top'\n\t\t\t)\n\n\t\t// column labels \u2014 vertical (90\u00B0), reading upward from the grid\n\t\tconst labG = svg.append('g').attr('transform', `translate(${gridX},${gridY - 4})`)\n\t\tcols.forEach((c, i) => {\n\t\t\tconst cx = i * cellW + cellW / 2\n\t\t\tlabG\n\t\t\t\t.append('text')\n\t\t\t\t.attr('x', cx)\n\t\t\t\t.attr('y', 0)\n\t\t\t\t.attr('transform', `rotate(-90,${cx},0)`)\n\t\t\t\t.attr('text-anchor', 'start')\n\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t.style('font-size', '11px')\n\t\t\t\t.text(c)\n\t\t})\n\n\t\t// cells\n\t\tconst cg = svg.append('g').attr('transform', `translate(${gridX},${gridY})`)\n\t\tfor (let r = 0; r < rows.length; r++) {\n\t\t\tfor (let c = 0; c < cols.length; c++) {\n\t\t\t\tconst v = Z[r][c]\n\t\t\t\tcg.append('rect')\n\t\t\t\t\t.attr('x', c * cellW)\n\t\t\t\t\t.attr('y', r * cellH)\n\t\t\t\t\t.attr('width', cellW - 0.5)\n\t\t\t\t\t.attr('height', cellH - 0.5)\n\t\t\t\t\t.attr('fill', color(v))\n\t\t\t\t\t.on('mouseover', (event: any) => {\n\t\t\t\t\t\tthis.dom.tip.clear().show(event.clientX, event.clientY)\n\t\t\t\t\t\tthis.dom.tip.d\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.style('padding', '5px 8px')\n\t\t\t\t\t\t\t.style('font-size', '0.85em')\n\t\t\t\t\t\t\t.html(\n\t\t\t\t\t\t\t\t`<b>${rows[r]}</b> \u2014 ${cols[c]}<br>z = ${v.toFixed(2)}, log2FC = ${hm.fc[r][c].toFixed(\n\t\t\t\t\t\t\t\t\t2\n\t\t\t\t\t\t\t\t)}, FDR = ${hm.fdr[r][c].toExponential(1)}`\n\t\t\t\t\t\t\t)\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseout', () => this.dom.tip.hide())\n\t\t\t}\n\t\t}\n\n\t\t// row labels (right of grid) \u2014 only when cells are tall enough; font scales with cell height\n\t\tif (showRowNames) {\n\t\t\tconst rowFont = Math.min(11, Math.max(7, Math.floor(cellH - 1)))\n\t\t\tconst rg = svg.append('g').attr('transform', `translate(${gridX + gridW + 4},${gridY})`)\n\t\t\trows.forEach((name, r) =>\n\t\t\t\trg\n\t\t\t\t\t.append('text')\n\t\t\t\t\t.attr('x', 0)\n\t\t\t\t\t.attr('y', r * cellH + cellH / 2)\n\t\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t\t.style('font-size', `${rowFont}px`)\n\t\t\t\t\t.text(name)\n\t\t\t)\n\t\t}\n\n\t\t// color legend \u2014 horizontal bar in the side panel, same font as gene labels\n\t\tconst legLen = 150\n\t\tconst legThick = 16\n\t\tconst steps = 24\n\t\tconst legSvg = legendHolder\n\t\t\t.append('svg')\n\t\t\t.attr('width', legLen + 8)\n\t\t\t.attr('height', legThick + 36)\n\t\t\t.attr('font-family', 'sans-serif')\n\t\tlegSvg\n\t\t\t.append('text')\n\t\t\t.attr('x', 0)\n\t\t\t.attr('y', 10)\n\t\t\t.style('font-size', '11px')\n\t\t\t.style('font-weight', '600')\n\t\t\t.text('log2FC-z')\n\t\tconst legG = legSvg.append('g').attr('transform', 'translate(2,18)')\n\t\tfor (let s = 0; s < steps; s++) {\n\t\t\tconst t = s / (steps - 1)\n\t\t\tlegG\n\t\t\t\t.append('rect')\n\t\t\t\t.attr('x', t * legLen)\n\t\t\t\t.attr('y', 0)\n\t\t\t\t.attr('width', legLen / steps + 0.6)\n\t\t\t\t.attr('height', legThick)\n\t\t\t\t.attr('fill', color(-cap + 2 * cap * t))\n\t\t}\n\t\tfor (const [t, lab] of [\n\t\t\t[0, `\u2212${cap.toFixed(1)}`],\n\t\t\t[0.5, '0'],\n\t\t\t[1, `+${cap.toFixed(1)}`]\n\t\t] as [number, string][])\n\t\t\tlegG\n\t\t\t\t.append('text')\n\t\t\t\t.attr('x', t * legLen)\n\t\t\t\t.attr('y', legThick + 13)\n\t\t\t\t.attr('text-anchor', t === 0 ? 'start' : t === 1 ? 'end' : 'middle')\n\t\t\t\t.style('font-size', '11px')\n\t\t\t\t.text(lab)\n\t}\n\n\t/** render a capped, expandable gene list (5 per row; first 10 shown, rest behind a black \"more\") */\n\trenderGeneList(holder: any, headerText: string, genes: string[]) {\n\t\tholder.selectAll('*').remove()\n\t\tholder.append('div').style('font-weight', '600').style('margin-bottom', '4px').text(headerText)\n\t\tconst list = holder\n\t\t\t.append('div')\n\t\t\t.style('max-width', '360px')\n\t\t\t.style('line-height', '1.6')\n\t\t\t.style('color', '#333')\n\t\t\t.style('word-break', 'break-word')\n\t\tconst LIMIT = 10\n\t\tconst PER_ROW = 5\n\t\tconst render = (expanded: boolean) => {\n\t\t\tlist.selectAll('*').remove()\n\t\t\tif (!genes.length) {\n\t\t\t\tlist.text('(none)')\n\t\t\t\treturn\n\t\t\t}\n\t\t\tconst shown = expanded ? genes : genes.slice(0, LIMIT)\n\t\t\tfor (let i = 0; i < shown.length; i += PER_ROW) {\n\t\t\t\tconst chunk = shown.slice(i, i + PER_ROW)\n\t\t\t\tconst last = i + PER_ROW >= shown.length\n\t\t\t\tlist.append('div').text(chunk.join(', ') + (last ? '' : ','))\n\t\t\t}\n\t\t\tif (genes.length > LIMIT)\n\t\t\t\tlist\n\t\t\t\t\t.append('button')\n\t\t\t\t\t.attr('type', 'button')\n\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t\t.style('color', '#333') // same color as the gene names, not a link color\n\t\t\t\t\t.style('text-decoration', 'underline')\n\t\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t\t.style('margin-top', '3px')\n\t\t\t\t\t.style('background', 'none')\n\t\t\t\t\t.style('border', 'none')\n\t\t\t\t\t.style('padding', '0')\n\t\t\t\t\t.style('font', 'inherit')\n\t\t\t\t\t.text(expanded ? 'less' : `more (${(genes.length - LIMIT).toLocaleString()})`)\n\t\t\t\t\t.on('click', () => render(!expanded))\n\t\t}\n\t\trender(false)\n\t}\n\n\t/** age/progression trajectory. One section per ordered series; within a section, one small panel\n\t * per k-means cluster: faint individual member trajectories (relative abundance)\n\t * plus a thick black module-eigengene trend line. Click a panel to list that cluster's genes.\n\t * DAP cutoffs + cluster count live in the right panel (all refetch). */\n\trenderTrajectory(traj: any) {\n\t\tconst body = this.dom.body\n\t\tif (!Array.isArray(traj) || !traj.length) {\n\t\t\tbody\n\t\t\t\t.append('div')\n\t\t\t\t.style('padding', '12px')\n\t\t\t\t.style('color', '#a00')\n\t\t\t\t.text(\n\t\t\t\t\t'No age/progression series in this selection \u2014 pick \u22653 cohorts that form one ordered series (same model/region/cell type, differing only by age or stage).'\n\t\t\t\t)\n\t\t\treturn\n\t\t}\n\t\tconst row = body.append('div').style('display', 'flex').style('gap', '24px').style('align-items', 'flex-start')\n\t\tconst left = row.append('div')\n\t\tconst panel = row.append('div').classed(PANEL_CLASS, true).style('font-size', '0.85em').style('min-width', '170px')\n\n\t\t// controls (all refetch, and reset the drill-down since cluster identities change)\n\t\tpanel.append('div').style('font-weight', '600').style('margin-bottom', '3px').text('DAP cutoffs')\n\t\tconst numInput = (label: string, value: number, step: number, title: string, onSet: (v: number) => void) => {\n\t\t\tconst l = panel.append('div').style('margin-bottom', '3px').attr('title', title)\n\t\t\tl.append('span').style('display', 'inline-block').style('width', '62px').html(label)\n\t\t\tl.append('input')\n\t\t\t\t.attr('type', 'number')\n\t\t\t\t.attr('step', step)\n\t\t\t\t.attr('min', 0)\n\t\t\t\t.property('value', value)\n\t\t\t\t.style('width', '60px')\n\t\t\t\t.on('change', (e: any) => {\n\t\t\t\t\tconst v = Number(e.target.value)\n\t\t\t\t\tif (Number.isFinite(v) && v >= 0) {\n\t\t\t\t\t\tonSet(v)\n\t\t\t\t\t\tthis.trajSelected = null\n\t\t\t\t\t\tthis.reload()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\t\tnumInput('|z| \u2265', this.zThresh, 0.5, 'Variable-protein fold-change cutoff', v => (this.zThresh = v))\n\t\tnumInput(\n\t\t\t'FDR \u2264',\n\t\t\tthis.fdrThresh,\n\t\t\t0.01,\n\t\t\t'Variable-protein significance cutoff (already an FDR)',\n\t\t\tv => (this.fdrThresh = v)\n\t\t)\n\t\tnumInput(\n\t\t\t'clusters',\n\t\t\tthis.nClusters,\n\t\t\t1,\n\t\t\t'Number of k-means clusters',\n\t\t\tv => (this.nClusters = Math.max(1, Math.round(v)))\n\t\t)\n\n\t\tpanel\n\t\t\t.append('div')\n\t\t\t.style('margin-top', '10px')\n\t\t\t.style('font-size', '0.8em')\n\t\t\t.style('color', '#777')\n\t\t\t.style('line-height', '1.4')\n\t\t\t.html(\n\t\t\t\t'Each thin line is one protein (standardized log2FC-z).<br>The thick black line is the cluster eigengene (PC1).'\n\t\t\t)\n\n\t\tconst genePanel = panel.append('div').style('margin-top', '14px')\n\t\tconst showGenes = () => {\n\t\t\tconst selSi = this.trajSelected?.si\n\t\t\tconst s = selSi != null ? traj[selSi] : null\n\t\t\tconst pr = s?.clusters?.[this.trajSelected!.pi]\n\t\t\tif (!pr) {\n\t\t\t\tgenePanel.selectAll('*').remove()\n\t\t\t\tgenePanel.append('div').style('color', '#888').text('Click a cluster to list its proteins.')\n\t\t\t\treturn\n\t\t\t}\n\t\t\tthis.renderGeneList(\n\t\t\t\tgenePanel,\n\t\t\t\t`${pr.size.toLocaleString()} proteins \u00B7 ${s!.label} \u00B7 C${this.trajSelected!.pi + 1}:`,\n\t\t\t\tpr.genes\n\t\t\t)\n\t\t}\n\n\t\tconst renderAll = () => {\n\t\t\tleft.selectAll('*').remove()\n\t\t\ttraj.forEach((s: any, si: number) => {\n\t\t\t\tconst section = left.append('div').style('margin-bottom', '20px')\n\t\t\t\tsection.append('div').style('font-weight', '600').style('max-width', '640px').text(s.label)\n\t\t\t\tsection\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('font-size', '0.8em')\n\t\t\t\t\t.style('color', '#888')\n\t\t\t\t\t.style('margin-bottom', '6px')\n\t\t\t\t\t.text(\n\t\t\t\t\t\t`${(s.geneCount || 0).toLocaleString()} variable proteins \u00B7 ${s.points\n\t\t\t\t\t\t\t.map((p: any) => p.label)\n\t\t\t\t\t\t\t.join(' \u2192 ')}`\n\t\t\t\t\t)\n\t\t\t\tconst grid = section.append('div').style('display', 'flex').style('flex-wrap', 'wrap').style('gap', '12px')\n\t\t\t\tif (!s.clusters?.length) {\n\t\t\t\t\tgrid\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.style('color', '#a00')\n\t\t\t\t\t\t.style('font-size', '0.85em')\n\t\t\t\t\t\t.text('No variable proteins at these cutoffs.')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\ts.clusters.forEach((pr: any, pi: number) => {\n\t\t\t\t\tconst selected = this.trajSelected != null && this.trajSelected.si === si && this.trajSelected.pi === pi\n\t\t\t\t\tconst cell = grid\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.style('border', selected ? '2px solid #333' : '1px solid #ddd')\n\t\t\t\t\t\t.style('border-radius', '4px')\n\t\t\t\t\t\t.style('padding', '4px 6px 2px')\n\t\t\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\tthis.trajSelected = selected ? null : { si, pi }\n\t\t\t\t\t\t\trenderAll()\n\t\t\t\t\t\t\tshowGenes()\n\t\t\t\t\t\t})\n\t\t\t\t\tcell\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.style('font-size', '0.8em')\n\t\t\t\t\t\t.style('font-weight', selected ? '700' : '600')\n\t\t\t\t\t\t.style('margin-bottom', '1px')\n\t\t\t\t\t\t.text(`C${pi + 1} \u00B7 ${pr.size.toLocaleString()} proteins`)\n\t\t\t\t\tthis.drawClusterPlot(cell.append('div'), s.points, pr)\n\t\t\t\t})\n\t\t\t})\n\t\t}\n\t\trenderAll()\n\t\tshowGenes()\n\t}\n\n\t/** one cluster panel: faint member trajectories + a thick black eigengene line, over the ordered\n\t * timepoints (true-spaced by age). y = relative abundance (standardized log2FC-z). */\n\tdrawClusterPlot(holder: any, points: { value: number; label: string }[], cluster: any) {\n\t\tconst lines: number[][] = cluster.lines || []\n\t\tconst eigengene: number[] = cluster.eigengene || []\n\t\tconst W = 232,\n\t\t\tH = 162\n\t\tconst M = { top: 8, right: 10, bottom: 34, left: 44 }\n\t\tconst innerW = W - M.left - M.right\n\t\tconst innerH = H - M.top - M.bottom\n\t\tconst xs = points.map(p => p.value)\n\t\tconst xmin = Math.min(...xs)\n\t\tconst xmax = Math.max(...xs)\n\n\t\tlet ymin = Infinity,\n\t\t\tymax = -Infinity\n\t\tfor (const ln of lines)\n\t\t\tfor (const v of ln) {\n\t\t\t\tif (v < ymin) ymin = v\n\t\t\t\tif (v > ymax) ymax = v\n\t\t\t}\n\t\tfor (const v of eigengene) {\n\t\t\tif (v < ymin) ymin = v\n\t\t\tif (v > ymax) ymax = v\n\t\t}\n\t\tif (!Number.isFinite(ymin)) {\n\t\t\tymin = -2\n\t\t\tymax = 2\n\t\t}\n\t\tif (ymin === ymax) {\n\t\t\tymin -= 1\n\t\t\tymax += 1\n\t\t}\n\t\tconst padY = (ymax - ymin) * 0.06\n\t\tconst x = scaleLinear()\n\t\t\t.domain([xmin, xmax])\n\t\t\t.range([M.left, M.left + innerW])\n\t\tconst y = scaleLinear()\n\t\t\t.domain([ymin - padY, ymax + padY])\n\t\t\t.range([M.top + innerH, M.top])\n\n\t\tconst svg = holder.append('svg').attr('width', W).attr('height', H).attr('font-family', 'sans-serif')\n\t\tif (ymin < 0 && ymax > 0)\n\t\t\tsvg\n\t\t\t\t.append('line')\n\t\t\t\t.attr('x1', M.left)\n\t\t\t\t.attr('x2', M.left + innerW)\n\t\t\t\t.attr('y1', y(0))\n\t\t\t\t.attr('y2', y(0))\n\t\t\t\t.attr('stroke', '#eee')\n\t\tsvg\n\t\t\t.append('g')\n\t\t\t.attr('transform', `translate(0,${M.top + innerH})`)\n\t\t\t.call(\n\t\t\t\taxisBottom(x)\n\t\t\t\t\t.tickValues(xs)\n\t\t\t\t\t.tickFormat(((_d: any, i: number) => points[i]?.label ?? '') as any) as any\n\t\t\t)\n\t\tsvg\n\t\t\t.append('g')\n\t\t\t.attr('transform', `translate(${M.left},0)`)\n\t\t\t.call(axisLeft(y).ticks(3) as any)\n\n\t\t// axis labels: x = age (ticks are the ages), y = relative abundance (standardized log2FC-z)\n\t\tsvg\n\t\t\t.append('text')\n\t\t\t.attr('x', M.left + innerW / 2)\n\t\t\t.attr('y', H - 3)\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.style('font-size', '9px')\n\t\t\t.style('fill', '#555')\n\t\t\t.text('age')\n\t\tsvg\n\t\t\t.append('text')\n\t\t\t.attr('transform', `translate(9,${M.top + innerH / 2}) rotate(-90)`)\n\t\t\t.attr('text-anchor', 'middle')\n\t\t\t.style('font-size', '9px')\n\t\t\t.style('fill', '#555')\n\t\t\t.text('relative abundance')\n\n\t\tconst pathOf = (vec: number[]) => vec.map((v, i) => `${i ? 'L' : 'M'}${x(points[i].value)},${y(v)}`).join(' ')\n\n\t\t// faint individual member trajectories\n\t\tfor (const ln of lines)\n\t\t\tsvg\n\t\t\t\t.append('path')\n\t\t\t\t.attr('d', pathOf(ln))\n\t\t\t\t.attr('fill', 'none')\n\t\t\t\t.attr('stroke', '#888')\n\t\t\t\t.attr('stroke-width', 0.5)\n\t\t\t\t.attr('stroke-opacity', 0.22)\n\t\t// thick black eigengene trend\n\t\tif (eigengene.length)\n\t\t\tsvg\n\t\t\t\t.append('path')\n\t\t\t\t.attr('d', pathOf(eigengene))\n\t\t\t\t.attr('fill', 'none')\n\t\t\t\t.attr('stroke', '#000')\n\t\t\t\t.attr('stroke-width', 2.5)\n\t}\n\n\t/** shared-vs-specific DAP overlap: an UpSet plot per direction (only offered for \u22653 cohorts).\n\t * Each protein falls in exactly one combination \u2014 the set of cohorts where it's a DAP in that\n\t * direction (|z| \u2265 zThresh, FDR \u2264 fdrThresh). Single-cohort groups are cohort-specific. */\n\trenderOverlap(overlap: any) {\n\t\tif (!overlap || !Array.isArray(overlap.up) || !Array.isArray(overlap.down)) {\n\t\t\tthis.dom.body.append('div').style('padding', '12px').style('color', '#a00').text('Overlap unavailable.')\n\t\t\treturn\n\t\t}\n\t\tconst labels = this.cohorts.map(c => this.cohortLabel(c))\n\t\tconst wrap = this.dom.body.append('div')\n\n\t\t// plots on the left, DAP-cutoff controls on the right\n\t\tconst row = wrap.append('div').style('display', 'flex').style('gap', '24px').style('align-items', 'flex-start')\n\t\tconst left = row.append('div')\n\t\tconst panel = row.append('div').classed(PANEL_CLASS, true).style('font-size', '0.85em').style('min-width', '150px')\n\n\t\t// DAP-cutoff controls (shared with the other views) \u2014 changing refetches\n\t\tpanel.append('div').style('font-weight', '600').style('margin-bottom', '3px').text('DAP cutoffs')\n\t\tconst numInput = (label: string, value: number, step: number, title: string, onSet: (v: number) => void) => {\n\t\t\tconst l = panel.append('div').style('margin-bottom', '3px').attr('title', title)\n\t\t\tl.append('span').style('display', 'inline-block').style('width', '48px').html(label)\n\t\t\tl.append('input')\n\t\t\t\t.attr('type', 'number')\n\t\t\t\t.attr('step', step)\n\t\t\t\t.attr('min', 0)\n\t\t\t\t.property('value', value)\n\t\t\t\t.style('width', '64px')\n\t\t\t\t.on('change', (e: any) => {\n\t\t\t\t\tconst v = Number(e.target.value)\n\t\t\t\t\tif (Number.isFinite(v) && v >= 0) {\n\t\t\t\t\t\tonSet(v)\n\t\t\t\t\t\tthis.reload()\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t}\n\t\tnumInput('|z| \u2265', this.zThresh, 0.5, 'DAP fold-change cutoff', v => (this.zThresh = v))\n\t\tnumInput('FDR \u2264', this.fdrThresh, 0.01, 'DAP significance cutoff (FDR)', v => (this.fdrThresh = v))\n\n\t\tconst diagrams = left.append('div')\n\n\t\t// gene-list panel (right side, under the cutoffs), filled on click; first 10 shown, rest behind \"more\"\n\t\tconst genePanel = panel.append('div').style('margin-top', '16px')\n\t\tconst cohortPhrase = (idxs: number[]) => {\n\t\t\tconst names = idxs.map(i => labels[i])\n\t\t\tif (names.length <= 1) return names[0] || '\u2014'\n\t\t\tif (names.length === 2) return `${names[0]} and ${names[1]}`\n\t\t\treturn `${names.slice(0, -1).join(', ')}, and ${names[names.length - 1]}`\n\t\t}\n\t\tconst showGenes = (dir: string, combo: { cohorts: number[]; genes: string[] }) => {\n\t\t\tconst cnt = combo.genes.length\n\t\t\tthis.renderGeneList(\n\t\t\t\tgenePanel,\n\t\t\t\t`${cnt.toLocaleString()} protein${cnt === 1 ? '' : 's'} ${dir.toLowerCase()} in ${cohortPhrase(\n\t\t\t\t\tcombo.cohorts\n\t\t\t\t)}:`,\n\t\t\t\tcombo.genes\n\t\t\t)\n\t\t}\n\n\t\t// one UpSet per direction, stacked (up above down)\n\t\tfor (const [dir, combos] of [\n\t\t\t['Up-regulated', overlap.up],\n\t\t\t['Down-regulated', overlap.down]\n\t\t] as [string, any[]][]) {\n\t\t\tconst box = diagrams.append('div').style('margin-bottom', '24px')\n\t\t\tbox\n\t\t\t\t.append('div')\n\t\t\t\t.style('font-weight', '600')\n\t\t\t\t.style('margin-bottom', '4px')\n\t\t\t\t.text(`${dir} (${totalGenes(combos).toLocaleString()})`)\n\t\t\tthis.drawUpSet(box, combos, labels, dir, showGenes)\n\t\t}\n\t}\n\n\t/** UpSet plot: intersection-size bars over a cohort-membership dot matrix. Bars clickable. */\n\tdrawUpSet(\n\t\tcontainer: any,\n\t\tcombos: { cohorts: number[]; genes: string[] }[],\n\t\tlabels: string[],\n\t\tdir: string,\n\t\tshowGenes: (dir: string, combo: { cohorts: number[]; genes: string[] }) => void\n\t) {\n\t\tconst n = labels.length\n\t\tconst MAX_COLS = 22\n\t\tconst shown = combos.slice(0, MAX_COLS)\n\t\tif (!shown.length) {\n\t\t\tcontainer.append('div').style('color', '#a00').style('padding', '8px 0').text('No DAPs at these cutoffs.')\n\t\t\treturn\n\t\t}\n\t\tconst maxCount = Math.max(1, ...shown.map(c => c.genes.length))\n\t\tconst leftW = 150,\n\t\t\ttopPad = 14,\n\t\t\tbarMaxH = 110,\n\t\t\tcolW = 26,\n\t\t\trowH = 15,\n\t\t\tdotR = 4.5\n\t\tconst matrixTop = topPad + barMaxH + 14\n\t\tconst W = leftW + shown.length * colW + 12\n\t\tconst H = matrixTop + n * rowH + 8\n\t\tconst svg = container.append('svg').attr('width', W).attr('height', H).attr('font-family', 'sans-serif')\n\t\tconst barColor = dir[0] === 'U' ? UP : DOWN\n\n\t\t// per-cohort total DAP count (set size), over ALL combos (not just the shown ones)\n\t\tconst totals = labels.map((_, i) => combos.reduce((s, c) => s + (c.cohorts.includes(i) ? c.genes.length : 0), 0))\n\t\tconst yBar = scaleLinear().domain([0, maxCount]).range([0, barMaxH])\n\n\t\t// cohort rows (left labels + zebra background)\n\t\tfor (let i = 0; i < n; i++) {\n\t\t\tsvg\n\t\t\t\t.append('rect')\n\t\t\t\t.attr('x', leftW - 6)\n\t\t\t\t.attr('y', matrixTop + i * rowH)\n\t\t\t\t.attr('width', shown.length * colW + 6)\n\t\t\t\t.attr('height', rowH)\n\t\t\t\t.attr('fill', i % 2 ? '#f4f4f4' : '#fff')\n\t\t\tsvg\n\t\t\t\t.append('text')\n\t\t\t\t.attr('x', leftW - 10)\n\t\t\t\t.attr('y', matrixTop + i * rowH + rowH / 2)\n\t\t\t\t.attr('text-anchor', 'end')\n\t\t\t\t.attr('dominant-baseline', 'central')\n\t\t\t\t.style('font-size', '11px')\n\t\t\t\t.text(`${labels[i]} (${totals[i].toLocaleString()})`)\n\t\t}\n\n\t\tshown.forEach((combo, j) => {\n\t\t\tconst x = leftW + j * colW + colW / 2\n\t\t\tconst cnt = combo.genes.length\n\t\t\tconst barH = yBar(cnt)\n\t\t\tconst members = new Set(combo.cohorts)\n\t\t\tconst tip = `${combo.cohorts.map(i => labels[i]).join(' \u2229 ')}: ${cnt} proteins \u2014 click to list`\n\n\t\t\t// intersection bar\n\t\t\tsvg\n\t\t\t\t.append('rect')\n\t\t\t\t.attr('x', x - colW * 0.34)\n\t\t\t\t.attr('y', topPad + barMaxH - barH)\n\t\t\t\t.attr('width', colW * 0.68)\n\t\t\t\t.attr('height', Math.max(1, barH))\n\t\t\t\t.attr('fill', barColor)\n\t\t\t\t.attr('fill-opacity', 0.85)\n\t\t\tsvg\n\t\t\t\t.append('text')\n\t\t\t\t.attr('x', x)\n\t\t\t\t.attr('y', topPad + barMaxH - barH - 3)\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', '#333')\n\t\t\t\t.text(cnt.toLocaleString())\n\n\t\t\t// membership connector line\n\t\t\tif (combo.cohorts.length > 1)\n\t\t\t\tsvg\n\t\t\t\t\t.append('line')\n\t\t\t\t\t.attr('x1', x)\n\t\t\t\t\t.attr('x2', x)\n\t\t\t\t\t.attr('y1', matrixTop + Math.min(...combo.cohorts) * rowH + rowH / 2)\n\t\t\t\t\t.attr('y2', matrixTop + Math.max(...combo.cohorts) * rowH + rowH / 2)\n\t\t\t\t\t.attr('stroke', '#444')\n\t\t\t\t\t.attr('stroke-width', 1.5)\n\t\t\tfor (let i = 0; i < n; i++)\n\t\t\t\tsvg\n\t\t\t\t\t.append('circle')\n\t\t\t\t\t.attr('cx', x)\n\t\t\t\t\t.attr('cy', matrixTop + i * rowH + rowH / 2)\n\t\t\t\t\t.attr('r', dotR)\n\t\t\t\t\t.attr('fill', members.has(i) ? '#444' : '#d0d0d0')\n\n\t\t\t// transparent full-column hit area (small bars are otherwise hard to click)\n\t\t\tconst hit = svg\n\t\t\t\t.append('rect')\n\t\t\t\t.attr('x', x - colW / 2)\n\t\t\t\t.attr('y', topPad)\n\t\t\t\t.attr('width', colW)\n\t\t\t\t.attr('height', H - topPad)\n\t\t\t\t.attr('fill', 'transparent')\n\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t.on('click', () => showGenes(dir, combo))\n\t\t\thit.append('title').text(tip)\n\t\t})\n\n\t\tif (combos.length > shown.length)\n\t\t\tcontainer\n\t\t\t\t.append('div')\n\t\t\t\t.style('font-size', '0.8em')\n\t\t\t\t.style('color', '#999')\n\t\t\t\t.style('margin-top', '2px')\n\t\t\t\t.text(`Showing the ${shown.length} largest of ${combos.length.toLocaleString()} intersections.`)\n\t}\n}\n\ntype Hclust = {\n\tmerge: { n1: number; n2: number }[]\n\theight: { height: number }[]\n\torder: { name: string }[]\n\tinputOrder: string[]\n}\n\n/** draw an hclust dendrogram into <g>. orient 'left' \u2192 leaves along y (row dendrogram, branches\n * grow leftward); orient 'top' \u2192 leaves along x (column dendrogram, branches grow upward).\n * leafSize = px per leaf (cell height/width); depth = px available for the height axis. */\nfunction drawDendrogram(g: any, dend: Hclust, leafSize: number, depth: number, orient: 'left' | 'top') {\n\tconst heights = dend.height.map(h => h.height)\n\tconst maxH = Math.max(...heights, 1e-9)\n\tconst toDepth = scaleLinear().domain([0, maxH]).range([depth, 0])\n\tconst leafPos = new Map<string, number>()\n\tdend.order.forEach((leaf, i) => leafPos.set(leaf.name, i * leafSize + leafSize / 2))\n\tconst merged = new Map<number, { leaf: number; depth: number }>()\n\tconst pos = (n: number) =>\n\t\tn < 0 ? { leaf: leafPos.get(dend.inputOrder[-n - 1]) ?? 0, depth } : merged.get(n) || { leaf: 0, depth }\n\tconst seg = (l1: number, d1: number, l2: number, d2: number) => {\n\t\tconst [x1, y1, x2, y2] = orient === 'left' ? [d1, l1, d2, l2] : [l1, d1, l2, d2]\n\t\tg.append('line')\n\t\t\t.attr('x1', x1)\n\t\t\t.attr('y1', y1)\n\t\t\t.attr('x2', x2)\n\t\t\t.attr('y2', y2)\n\t\t\t.attr('stroke', '#555')\n\t\t\t.attr('stroke-width', 1)\n\t}\n\tfor (let i = 0; i < dend.merge.length; i++) {\n\t\tconst { n1, n2 } = dend.merge[i]\n\t\tconst a = pos(n1),\n\t\t\tb = pos(n2)\n\t\tconst d = toDepth(heights[i])\n\t\tseg(a.leaf, a.depth, a.leaf, d)\n\t\tseg(b.leaf, b.depth, b.leaf, d)\n\t\tseg(a.leaf, d, b.leaf, d)\n\t\tmerged.set(i + 1, { leaf: (a.leaf + b.leaf) / 2, depth: d })\n\t}\n}\n\n/** average-linkage agglomerative clustering \u2192 leaf order (distance = 1 \u2212 correlation). n is small. */\nfunction leafOrder(corr: number[][]): number[] {\n\tconst n = corr.length\n\tconst nodes: { members: number[] }[] = []\n\tfor (let i = 0; i < n; i++) nodes.push({ members: [i] })\n\tlet active = nodes.map((_, i) => i)\n\tconst d0 = (i: number, j: number) => 1 - corr[i][j]\n\tconst avgDist = (a: number, b: number) => {\n\t\tlet s = 0\n\t\tfor (const x of nodes[a].members) for (const y of nodes[b].members) s += d0(x, y)\n\t\treturn s / (nodes[a].members.length * nodes[b].members.length)\n\t}\n\twhile (active.length > 1) {\n\t\tlet bi = 0,\n\t\t\tbj = 1,\n\t\t\tbd = Infinity\n\t\tfor (let a = 0; a < active.length; a++)\n\t\t\tfor (let b = a + 1; b < active.length; b++) {\n\t\t\t\tconst d = avgDist(active[a], active[b])\n\t\t\t\tif (d < bd) {\n\t\t\t\t\tbd = d\n\t\t\t\t\tbi = a\n\t\t\t\t\tbj = b\n\t\t\t\t}\n\t\t\t}\n\t\tconst A = active[bi],\n\t\t\tB = active[bj]\n\t\tnodes.push({ members: [...nodes[A].members, ...nodes[B].members] })\n\t\tactive = active.filter((_, k) => k !== bi && k !== bj)\n\t\tactive.push(nodes.length - 1)\n\t}\n\treturn nodes[active[0]].members\n}\n\n/** total DAP proteins across all combinations of one direction (each protein is in exactly one) */\nfunction totalGenes(combos: { genes: string[] }[]): number {\n\treturn combos.reduce((s, c) => s + c.genes.length, 0)\n}\n\nexport const componentInit = getCompInit(ProteomeCohortCompare)\n\nexport async function getPlotConfig(opts: any) {\n\tconst config = structuredClone(defaultConfig)\n\tif (!opts.cohorts || opts.cohorts.length < 2) throw new Error('proteomeCohortCompare requires \u22652 cohorts')\n\treturn copyMerge(config, opts)\n}\n"],
5
- "mappings": "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",
6
- "names": []
7
- }
@@ -1,82 +0,0 @@
1
- import {
2
- SearchHandler,
3
- createPseudobulkTerm
4
- } from "./chunk-DVSTBGZT.js";
5
- import {
6
- require_tape
7
- } from "./chunk-PJYCTAMC.js";
8
- import "./chunk-ZIMAIUZD.js";
9
- import "./chunk-HJ6L54YS.js";
10
- import "./chunk-AQSZLUDV.js";
11
- import "./chunk-CNFTQSNE.js";
12
- import "./chunk-BOQYGAYA.js";
13
- import "./chunk-TVJOSRCH.js";
14
- import "./chunk-3CIL7KH7.js";
15
- import "./chunk-T4XPCSLP.js";
16
- import "./chunk-ZUXXBQ7D.js";
17
- import "./chunk-W5J3LTYS.js";
18
- import "./chunk-ZUG4EY4T.js";
19
- import "./chunk-5FD6NRGE.js";
20
- import "./chunk-R2H22S4J.js";
21
- import "./chunk-HBNB5TRH.js";
22
- import "./chunk-PF4DSFDR.js";
23
- import "./chunk-4OLM3KSB.js";
24
- import "./chunk-PWYMHUXY.js";
25
- import "./chunk-TLT4YIG3.js";
26
- import "./chunk-5R63Q5KH.js";
27
- import "./chunk-I6Y4O3RR.js";
28
- import "./chunk-Q5RDQNIT.js";
29
- import {
30
- __toESM
31
- } from "./chunk-HS5PO5ZQ.js";
32
-
33
- // termdb/handlers/test/pseudbulk.unit.spec.ts
34
- var import_tape = __toESM(require_tape(), 1);
35
- (0, import_tape.default)("\n", function(test) {
36
- test.comment("-***- termdb/handlers/pseudobulk -***-");
37
- test.end();
38
- });
39
- (0, import_tape.default)("buildRenderingDataMap() groups terms by assay and memberId", function(test) {
40
- const handler = new SearchHandler();
41
- const terms = [
42
- { id: "t1", name: "A", assay: "geneExpression", memberId: "CD4" },
43
- { id: "t2", name: "B", assay: "geneExpression", memberId: "CD4" },
44
- { id: "t3", name: "C", assay: "geneExpression", memberId: "CD8" },
45
- { id: "t4", name: "D", assay: "cellType", memberId: "Myeloid" }
46
- ];
47
- const map = handler.buildRenderingDataMap(terms);
48
- test.equal(map.size, 2, "creates one top-level key per assay");
49
- test.ok(map.has("geneExpression"), "contains geneExpression assay");
50
- test.ok(map.has("cellType"), "contains cellType assay");
51
- const geneExpressionMap = map.get("geneExpression");
52
- test.equal(geneExpressionMap.size, 2, "creates one nested key per memberId within assay");
53
- test.equal(geneExpressionMap.get("CD4").length, 2, "groups multiple terms under same assay/memberId");
54
- test.equal(geneExpressionMap.get("CD8")[0].id, "t3", "stores the correct term under another memberId");
55
- const cellTypeMap = map.get("cellType");
56
- test.equal(cellTypeMap.size, 1, "cellType assay has one memberId");
57
- test.equal(cellTypeMap.get("Myeloid")[0].id, "t4", "stores term under expected cellType memberId");
58
- test.end();
59
- });
60
- (0, import_tape.default)("buildRenderingDataMap() returns an empty map for empty input", function(test) {
61
- const handler = new SearchHandler();
62
- const map = handler.buildRenderingDataMap([]);
63
- test.equal(map.size, 0, "empty input produces empty map");
64
- test.end();
65
- });
66
- (0, import_tape.default)("createPseudobulkTerm() creates one term for one cell type and gene", function(test) {
67
- const selectedTerm = {
68
- id: "blast",
69
- name: "Blast",
70
- type: "pseudobulk",
71
- assay: "geneExpression",
72
- memberId: "Cell Type"
73
- };
74
- const term = createPseudobulkTerm(selectedTerm, "TP53");
75
- test.equal(term.id, "geneExpression blast TP53", "sets a unique term.id");
76
- test.equal(term.category, "blast", "sets term.category");
77
- test.equal(term.gene, "TP53", "sets term.gene");
78
- test.equal(term.name, "geneExpression blast TP53", "sets term.name");
79
- test.notOk("genes" in term, "does not add the obsolete genes array");
80
- test.end();
81
- });
82
- //# sourceMappingURL=pseudbulk.unit.spec-XELPZVXM.js.map
@@ -1,31 +0,0 @@
1
- import {
2
- SearchHandler,
3
- createPseudobulkTerm
4
- } from "./chunk-DVSTBGZT.js";
5
- import "./chunk-ZIMAIUZD.js";
6
- import "./chunk-HJ6L54YS.js";
7
- import "./chunk-AQSZLUDV.js";
8
- import "./chunk-CNFTQSNE.js";
9
- import "./chunk-BOQYGAYA.js";
10
- import "./chunk-TVJOSRCH.js";
11
- import "./chunk-3CIL7KH7.js";
12
- import "./chunk-T4XPCSLP.js";
13
- import "./chunk-ZUXXBQ7D.js";
14
- import "./chunk-W5J3LTYS.js";
15
- import "./chunk-ZUG4EY4T.js";
16
- import "./chunk-5FD6NRGE.js";
17
- import "./chunk-R2H22S4J.js";
18
- import "./chunk-HBNB5TRH.js";
19
- import "./chunk-PF4DSFDR.js";
20
- import "./chunk-4OLM3KSB.js";
21
- import "./chunk-PWYMHUXY.js";
22
- import "./chunk-TLT4YIG3.js";
23
- import "./chunk-5R63Q5KH.js";
24
- import "./chunk-I6Y4O3RR.js";
25
- import "./chunk-Q5RDQNIT.js";
26
- import "./chunk-HS5PO5ZQ.js";
27
- export {
28
- SearchHandler,
29
- createPseudobulkTerm
30
- };
31
- //# sourceMappingURL=pseudobulk-H3USXM5U.js.map
@@ -1,34 +0,0 @@
1
- import {
2
- QualCustomGS,
3
- QualPredefinedGS,
4
- QualValues,
5
- QualitativeBase
6
- } from "./chunk-ZIMAIUZD.js";
7
- import "./chunk-HJ6L54YS.js";
8
- import "./chunk-AQSZLUDV.js";
9
- import "./chunk-CNFTQSNE.js";
10
- import "./chunk-BOQYGAYA.js";
11
- import "./chunk-TVJOSRCH.js";
12
- import "./chunk-3CIL7KH7.js";
13
- import "./chunk-T4XPCSLP.js";
14
- import "./chunk-ZUXXBQ7D.js";
15
- import "./chunk-W5J3LTYS.js";
16
- import "./chunk-ZUG4EY4T.js";
17
- import "./chunk-5FD6NRGE.js";
18
- import "./chunk-R2H22S4J.js";
19
- import "./chunk-HBNB5TRH.js";
20
- import "./chunk-PF4DSFDR.js";
21
- import "./chunk-4OLM3KSB.js";
22
- import "./chunk-PWYMHUXY.js";
23
- import "./chunk-TLT4YIG3.js";
24
- import "./chunk-5R63Q5KH.js";
25
- import "./chunk-I6Y4O3RR.js";
26
- import "./chunk-Q5RDQNIT.js";
27
- import "./chunk-HS5PO5ZQ.js";
28
- export {
29
- QualCustomGS,
30
- QualPredefinedGS,
31
- QualValues,
32
- QualitativeBase
33
- };
34
- //# sourceMappingURL=qualitative-ABXENRAF.js.map
@@ -1,241 +0,0 @@
1
- import {
2
- HandlerBase,
3
- require_debounce
4
- } from "./chunk-ZIMAIUZD.js";
5
- import "./chunk-HJ6L54YS.js";
6
- import "./chunk-AQSZLUDV.js";
7
- import "./chunk-CNFTQSNE.js";
8
- import "./chunk-BOQYGAYA.js";
9
- import "./chunk-TVJOSRCH.js";
10
- import "./chunk-3CIL7KH7.js";
11
- import "./chunk-T4XPCSLP.js";
12
- import "./chunk-ZUXXBQ7D.js";
13
- import "./chunk-W5J3LTYS.js";
14
- import "./chunk-ZUG4EY4T.js";
15
- import "./chunk-5FD6NRGE.js";
16
- import "./chunk-R2H22S4J.js";
17
- import "./chunk-HBNB5TRH.js";
18
- import "./chunk-PF4DSFDR.js";
19
- import "./chunk-4OLM3KSB.js";
20
- import "./chunk-PWYMHUXY.js";
21
- import "./chunk-TLT4YIG3.js";
22
- import "./chunk-5R63Q5KH.js";
23
- import {
24
- select_default
25
- } from "./chunk-I6Y4O3RR.js";
26
- import "./chunk-Q5RDQNIT.js";
27
- import {
28
- __toESM
29
- } from "./chunk-HS5PO5ZQ.js";
30
-
31
- // termsetting/handlers/qualitative.ts
32
- var import_debounce = __toESM(require_debounce(), 1);
33
- var GroupSet = class extends HandlerBase {
34
- constructor(opts) {
35
- super(opts);
36
- this.defaultMaxGrpNum = 5;
37
- this.minGrpNum = 3;
38
- //{groups: any[], values: any[]}
39
- this.dom = {};
40
- this.termsetting = opts.termsetting;
41
- this.tw = opts.termsetting.tw;
42
- this.dom.holder = opts.holder || this.termsetting.dom.tip.d;
43
- this.data = { groups: [], values: [], filters: [] };
44
- }
45
- getPillStatus() {
46
- this.tw = this.termsetting.tw;
47
- return this.tw.getStatus(this.termsetting.usecase);
48
- }
49
- async showEditMenu() {
50
- const self = this.termsetting;
51
- const holder = this.dom.holder;
52
- this.dom.loadingDiv = holder.append("div").style("margin", "15px").text("Getting categories...");
53
- this.dom.menuWrapper = holder.append("div");
54
- const body = self.opts.getBodyParams?.() || {};
55
- const data = await self.vocabApi.getCategories(self.term, self.filter, body);
56
- this.dom.loadingDiv.style("display", "none");
57
- this.category2samplecount = data.lst;
58
- this.tw = this.termsetting.tw;
59
- this.data = this.tw.getGroups(this.category2samplecount);
60
- await this.initGrpSetUI();
61
- }
62
- async initGrpSetUI() {
63
- const self = this.termsetting;
64
- this.maxGrpNum = this.data.values.length >= this.defaultMaxGrpNum ? this.defaultMaxGrpNum + 1 : this.data.values.length;
65
- self.dom.tip.showunder(self.dom.holder.node());
66
- await this.showDraggables();
67
- }
68
- async showDraggables() {
69
- const self = this.termsetting;
70
- this.dom.menuWrapper.style("padding", "10px");
71
- this.dom.actionDiv = this.dom.menuWrapper.append("div").attr("class", "sjpp-group-actions").style("padding", "0px 10px 10px 0px");
72
- const findNewGrps = this.data.groups.filter((g) => g.name.startsWith("New Group"));
73
- let newGrpNum = findNewGrps.length > 0 ? findNewGrps[findNewGrps.length - 1].name.replace(`New Group `, "") : 0;
74
- const q = this.tw.q;
75
- this.dom.actionDiv.addGroup = this.dom.actionDiv.append("button").classed("sjpp_grpset_addGrp_btn", true).style("display", "inline-block").style("text-align", "center").style("cursor", q.mode == "binary" ? "default" : "pointer").property("disabled", q.mode == "binary" ? true : this.data.groups.length >= this.maxGrpNum).text("Add Group").on("click", async () => {
76
- newGrpNum++;
77
- this.data.groups.push({
78
- currentIdx: this.data.groups.length,
79
- type: "values",
80
- name: `New Group${newGrpNum != 1 ? ` ${newGrpNum}` : ""}`
81
- });
82
- const group = this.data.groups[this.data.groups.length - 1];
83
- await this.initGroupDiv(group);
84
- await this.update();
85
- });
86
- this.dom.actionDiv.applyBtn = this.dom.actionDiv.append("button").classed("sjpp_grpset_apply_btn", true).style("display", self.opts.hideApply ? "none" : "inline-block").style("text-align", "center").style("float", "right").style("cursor", "pointer").text("Apply").on("click", () => {
87
- this.processDraggables();
88
- self.dom.tip.hide();
89
- self.api.runCallback();
90
- });
91
- this.dom.menuWrapper.append("div").style("display", "block").style("margin", "5px 2px").style("font-size", ".6em").style("color", "#999").text("Drag-and-drop to assign categories to groups.");
92
- this.dom.grpsWrapper = this.dom.menuWrapper.append("div").classed("sjpp-groups-wrapper", true);
93
- this.dom.includedWrapper = this.dom.grpsWrapper.append("div").classed("sjpp-groups-include", true).classed("sjpp-group-edit-div", true).style("display", "flex");
94
- this.dom.excludedWrapper = this.dom.grpsWrapper.append("div").classed("sjpp-groups-exclude", true).classed("sjpp-group-edit-div", true).classed("sjpp-drag-drop-div", true);
95
- const excludedGroup = this.data.groups.find((d) => d.currentIdx === 0);
96
- delete excludedGroup.wrapper;
97
- await this.initGroupDiv(excludedGroup);
98
- const handler = this;
99
- await this.dom.includedWrapper.selectAll("div").data(this.data.groups.filter((d) => d.currentIdx != 0)).enter().append("div").classed("sjpp-drag-drop-div", true).style("border", "1px solid #efefef").style("display", "block").style("padding", "10px").style("vertical-align", "top").each(async function(group) {
100
- group.wrapper = select_default(this);
101
- await handler.initGroupDiv(group);
102
- });
103
- }
104
- processDraggables() {
105
- const self = this.termsetting;
106
- const editedGrpset = this.draggedItem || this.editedName || this.removedGrp;
107
- if (!editedGrpset) return;
108
- const customset = { groups: [] };
109
- for (const group of this.data.groups) {
110
- if (group.type != "values" && group.type != "QualTWValues" && group.type != "QualTWValues")
111
- throw `group.type='${group.type}' is not recognized`;
112
- const customgroup = { name: group.name, type: "values", uncomputable: group.uncomputable };
113
- const groupValues = this.data.values.filter((v) => v.group == group.currentIdx).map((v) => {
114
- return { key: v.key, label: v.label, samplecount: v.samplecount };
115
- });
116
- customgroup.values = groupValues;
117
- customset.groups.push(customgroup);
118
- }
119
- Object.assign(self.q, {
120
- type: "custom-groupset",
121
- customset
122
- });
123
- }
124
- async initGroupDiv(group) {
125
- const wrapper = group.currentIdx === 0 ? this.dom.excludedWrapper : this.dom.includedWrapper;
126
- if (!group.type) group.type = "values";
127
- if (!group.wrapper)
128
- group.wrapper = wrapper.append("div").classed("sjpp-drag-drop-div", true).style("border", "1px solid #efefef").style("display", "block").style("padding", "10px").style("vertical-align", "top");
129
- group.wrapper.on("drop", (event) => {
130
- const itemData = this.draggedItem.node().__data__;
131
- if (itemData.group === group.currentIdx) return;
132
- group.draggables.node().appendChild(this.draggedItem.node());
133
- this.draggedItem.style("transition-property", "background-color").style("transition-duration", "1s").style("background-color", "#fff2cc");
134
- this.data.values.find((v) => v === itemData).group = group.currentIdx;
135
- event.preventDefault();
136
- event.stopPropagation();
137
- }).on("dragleave", (event) => {
138
- event.preventDefault();
139
- event.stopPropagation();
140
- group.wrapper.style("background-color", "#fff");
141
- }).on("dragend", (event) => {
142
- event.preventDefault();
143
- event.stopPropagation();
144
- group.wrapper.style("background-color", "#fff");
145
- }).on("dragover", (event) => {
146
- event.preventDefault();
147
- event.stopPropagation();
148
- group.wrapper.style(
149
- "background-color",
150
- group.currentIdx !== this.draggedItem.node().__data__.group ? "#cfe2f3" : "#fff"
151
- );
152
- }).on("dragenter", (event) => {
153
- if (this.draggedItem.node().__data__.group === group.currentIdx) return;
154
- event.preventDefault();
155
- event.stopPropagation();
156
- group.wrapper.style(
157
- "background-color",
158
- group.currentIdx !== this.draggedItem.node().__data__.group ? "#cfe2f3" : "#fff"
159
- );
160
- });
161
- if (group.currentIdx === 0) {
162
- group.title = group.wrapper.append("div").style("display", "inline-block").style("padding", "3px 10px").style("text-align", "left").style("font-size", ".6em").style("text-transform", "uppercase").style("color", "#999").text(group.name);
163
- } else {
164
- group.dragActionDiv = group.wrapper.append("div").style("display", "flex").style("align-items", "center");
165
- group.input = group.dragActionDiv.append("input").attr("size", 12).attr("value", group.name).style("margin", "5px").style("margin-left", "8px").style("display", "inline-block").style("font-size", ".8em").style("width", "87%").on("keyup", () => {
166
- (0, import_debounce.debounce)(this.onKeyUp(group), 1e3);
167
- });
168
- group.inputMessage = group.dragActionDiv.append("span").style("color", "red").style("font-size", "0.7em").text("NOT unique").style("display", "none");
169
- group.destroyBtn = group.dragActionDiv.append("button").style("display", "inline-block").style("padding", "0px 4px").property("disabled", this.data.groups.length <= this.minGrpNum).text("x").on("click", async () => {
170
- if (this.data.groups.length <= this.minGrpNum) return;
171
- this.data.groups = this.data.groups.filter((d) => d.currentIdx != group.currentIdx);
172
- await this.removeGroup(group);
173
- });
174
- }
175
- group.draggables = group.wrapper.append("div").classed("sjpp-drag-list-div", true);
176
- await this.addItems(group);
177
- }
178
- async addItems(group) {
179
- const handler = this;
180
- await group.draggables.selectAll("div").data(this.data.values.filter((d) => d.group == group.currentIdx)).enter().append("div").attr("draggable", "true").attr("class", "sjpp-drag-item").style("margin", "3px").style("cursor", "default").style("padding", "3px 10px").style("border-radius", "5px").style("color", (d) => d.samplecount == 0 ? "#777" : "black").text((d) => `${d.label}${d.samplecount !== void 0 ? ` (n=${d.samplecount})` : ""}`).style("background-color", "#eee").each(function() {
181
- const itemNode = select_default(this).on("dragstart", function() {
182
- itemNode.style("background-color", "#fff2cc");
183
- handler.draggedItem = itemNode;
184
- }).on("mouseenter", function() {
185
- itemNode.style("background-color", "#fff2cc");
186
- }).on("mouseleave", function() {
187
- itemNode.style("background-color", "#eee");
188
- });
189
- });
190
- }
191
- async removeGroup(group) {
192
- this.removedGrp = true;
193
- const itemsNum = group.wrapper.selectAll(".sjpp-drag-item").nodes();
194
- if (itemsNum.length === 0) {
195
- group.wrapper.remove();
196
- } else {
197
- group.input.remove();
198
- group.destroyBtn.remove();
199
- group.wrapper.remove();
200
- for (const v of this.data.values) {
201
- if (v.group == group.currentIdx) v.group = 0;
202
- }
203
- }
204
- await this.update();
205
- }
206
- async update() {
207
- this.dom.actionDiv.addGroup.property("disabled", this.data.groups.length >= this.maxGrpNum);
208
- for (const [i, grp] of this.data.groups.entries()) {
209
- if (i === 0) continue;
210
- if (grp.currentIdx != i) {
211
- this.data.values.filter((v) => v.group == grp.currentIdx).forEach((v) => v.group = i);
212
- this.data.filters.filter((f) => f.group == grp.currentIdx).forEach((f) => f.group = i);
213
- grp.currentIdx = i;
214
- }
215
- }
216
- this.dom.grpsWrapper.selectAll(".sjpp-drag-drop-div").data(this.data.groups).each(async (group) => {
217
- if (group.currentIdx !== 0) {
218
- group.input.node().value = group.name;
219
- group.destroyBtn.property("disabled", this.data.groups.length <= this.minGrpNum);
220
- }
221
- await this.addItems(group);
222
- });
223
- }
224
- async onKeyUp(group) {
225
- if (group.name == group.input.node().value) return;
226
- this.editedName = true;
227
- const match = this.data.groups.filter((g) => g.name == group.input.node().value);
228
- if (match.length > 0) {
229
- this.dom.actionDiv.applyBtn.property("disabled", true);
230
- group.inputMessage.style("display", "block");
231
- } else {
232
- this.dom.actionDiv.applyBtn.property("disabled", false);
233
- group.inputMessage.style("display", "none");
234
- this.data.groups[group.currentIdx].name = group.input.node().value.trim();
235
- }
236
- }
237
- };
238
- export {
239
- GroupSet
240
- };
241
- //# sourceMappingURL=qualitative-OSEJTJ4D.js.map