@sjcrh/proteinpaint-client 2.191.4 → 2.193.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 (963) hide show
  1. package/dist/2dmaf-US2ZAJJJ.js +1373 -0
  2. package/dist/AIProjectAdmin-QQO2PNAJ.js +958 -0
  3. package/dist/AIProjectAdmin-QQO2PNAJ.js.map +7 -0
  4. package/dist/AppHeader-UKB344GC.js +835 -0
  5. package/dist/BoxPlot-JEBLRKBY.js +1217 -0
  6. package/dist/BoxPlot-JEBLRKBY.js.map +7 -0
  7. package/dist/CorrelationVolcano-J3IFVSZB.js +619 -0
  8. package/dist/DE-PAPJP6AH.js +95 -0
  9. package/dist/DEinput-YON466QQ.js +301 -0
  10. package/dist/DifferentialAnalysis-DEUODXGG.js +245 -0
  11. package/dist/Disco-OZM4S7HF.js +3297 -0
  12. package/dist/Disco-OZM4S7HF.js.map +7 -0
  13. package/dist/Disco.UI-VIHYJGYU.js +249 -0
  14. package/dist/Disco.UI-VIHYJGYU.js.map +7 -0
  15. package/dist/DmrPlot-DSELMC4E.js +642 -0
  16. package/dist/GB-MUPI6RL5.js +1151 -0
  17. package/dist/GB-MUPI6RL5.js.map +7 -0
  18. package/dist/GeneExpInput-3AQEPTFZ.js +367 -0
  19. package/dist/GeneExpInput-3AQEPTFZ.js.map +7 -0
  20. package/dist/HicApp-BP7PSXY2.js +2250 -0
  21. package/dist/NumBinaryEditor-CHWQT445.js +271 -0
  22. package/dist/NumBinaryEditor.unit.spec-MXRNK7XH.js +286 -0
  23. package/dist/NumContEditor-XS3RA7GY.js +109 -0
  24. package/dist/NumContEditor.unit.spec-662MHSP4.js +169 -0
  25. package/dist/NumCustomBinEditor-LUVIAXMZ.js +38 -0
  26. package/dist/NumCustomBinEditor.unit.spec-3D3GY3F4.js +284 -0
  27. package/dist/NumDiscreteEditor-24W2A5IN.js +179 -0
  28. package/dist/NumDiscreteEditor.unit.spec-B5T42Z5S.js +202 -0
  29. package/dist/NumRegularBinEditor-AING4HZ5.js +38 -0
  30. package/dist/NumRegularBinEditor.unit.spec-UKSVZH2S.js +227 -0
  31. package/dist/NumSplineEditor-54KNKHJX.js +198 -0
  32. package/dist/NumSplineEditor.unit.spec-5FTST3Y5.js +199 -0
  33. package/dist/NumericDensity-C7DQZ5Q5.js +38 -0
  34. package/dist/NumericDensity.unit.spec-HV6SD3ZS.js +221 -0
  35. package/dist/NumericHandler-FV3L23EC.js +39 -0
  36. package/dist/NumericHandler.unit.spec-E72DXVBB.js +219 -0
  37. package/dist/ProteomeInput-3XTK74SN.js +396 -0
  38. package/dist/RunChart2-X5FBZVRX.js +758 -0
  39. package/dist/SC-WE5DG2CQ.js +1127 -0
  40. package/dist/SC-WE5DG2CQ.js.map +7 -0
  41. package/dist/Volcano-2USCTLKO.js +1379 -0
  42. package/dist/WSIViewer-U6VSJUFF.js +48562 -0
  43. package/dist/WSIViewer-U6VSJUFF.js.map +7 -0
  44. package/dist/WsiSamplesPlot-VIKSG63U.js +165 -0
  45. package/dist/adSandbox-VXUJGPD3.js +38 -0
  46. package/dist/animatedBubbleChart-4P7XLKSB.js +555 -0
  47. package/dist/animatedBubbleChart-4P7XLKSB.js.map +7 -0
  48. package/dist/app-KHZT2BVF.js +49 -0
  49. package/dist/app-XLYH3YPL.js +37 -0
  50. package/dist/app.js +20 -20
  51. package/dist/bam-C23ZARYE.js +860 -0
  52. package/dist/barchart-KGXLYEIP.js +47 -0
  53. package/dist/barchart.data-7OI5GZZ6.js +22 -0
  54. package/dist/barchart.events-3KDNIFBG.js +47 -0
  55. package/dist/barchart.integration.spec-OQYY54AQ.js +2010 -0
  56. package/dist/barchart.integration.spec-OQYY54AQ.js.map +7 -0
  57. package/dist/barchart2-AT5FXOUY.js +314 -0
  58. package/dist/barchart2-AT5FXOUY.js.map +7 -0
  59. package/dist/bars.renderer-57KSYAAT.js +12 -0
  60. package/dist/block-TCWYUB4R.js +6226 -0
  61. package/dist/block-TCWYUB4R.js.map +7 -0
  62. package/dist/block.init-7FHXQJNE.js +38 -0
  63. package/dist/block.mds.expressionrank-UGZQK7Z3.js +359 -0
  64. package/dist/block.mds.geneboxplot-2CQLB4YN.js +828 -0
  65. package/dist/block.mds.junction-JHPHWVOS.js +1545 -0
  66. package/dist/block.mds.svcnv-E7P2SVKK.js +6801 -0
  67. package/dist/block.svg-MVRR3C6V.js +164 -0
  68. package/dist/block.tk.aicheck-KX46G4TR.js +283 -0
  69. package/dist/block.tk.ase-WMXI47BF.js +365 -0
  70. package/dist/block.tk.bam-KFEGVEQQ.js +1906 -0
  71. package/dist/block.tk.bedgraphdot-P4DBCWFK.js +384 -0
  72. package/dist/block.tk.bigwig.ui-WJPH2Z7F.js +212 -0
  73. package/dist/block.tk.hicstraw-RSD6I2NX.js +823 -0
  74. package/dist/block.tk.junction-VZS2DEDO.js +2364 -0
  75. package/dist/block.tk.junction.textmatrixui-UCWGHZDI.js +199 -0
  76. package/dist/block.tk.ld-ERSIIBM2.js +99 -0
  77. package/dist/block.tk.menu-2ZNXE7CE.js +1029 -0
  78. package/dist/block.tk.pgv-EJLACCFR.js +944 -0
  79. package/dist/brainImaging-BMZJY6OT.js +423 -0
  80. package/dist/brainRegions-RZEBXPAS.js +221 -0
  81. package/dist/brainRegions-RZEBXPAS.js.map +7 -0
  82. package/dist/bubbleHeatmap-ERJFMLPK.js +383 -0
  83. package/dist/bubbleHeatmap-ERJFMLPK.js.map +7 -0
  84. package/dist/chunk-27FPMFP2.js +54 -0
  85. package/dist/chunk-3LYZMOLO.js +58 -0
  86. package/dist/chunk-455XZIIA.js +222 -0
  87. package/dist/chunk-474DTKP7.js +263 -0
  88. package/dist/chunk-4AP3O3JW.js +226 -0
  89. package/dist/chunk-4JWN7E7Q.js +117 -0
  90. package/dist/chunk-55MOHL3P.js +158 -0
  91. package/dist/chunk-5CR24RTX.js +381 -0
  92. package/dist/chunk-5QTJUPFS.js +26 -0
  93. package/dist/chunk-5TJQ6633.js +291 -0
  94. package/dist/chunk-5X5LI5YM.js +254 -0
  95. package/dist/chunk-634MOGE3.js +314 -0
  96. package/dist/chunk-634MOGE3.js.map +7 -0
  97. package/dist/chunk-6G4YOMWW.js +1825 -0
  98. package/dist/chunk-6SCBPP4C.js +95 -0
  99. package/dist/chunk-6YVEYTNH.js +4269 -0
  100. package/dist/chunk-6YVEYTNH.js.map +7 -0
  101. package/dist/chunk-73R5BVCY.js +5067 -0
  102. package/dist/chunk-73R5BVCY.js.map +7 -0
  103. package/dist/chunk-74XVBQF7.js +55 -0
  104. package/dist/chunk-7I3LST7R.js +272 -0
  105. package/dist/chunk-7KRS7L4U.js +1443 -0
  106. package/dist/chunk-7KRS7L4U.js.map +7 -0
  107. package/dist/chunk-ATUYZWHV.js +1289 -0
  108. package/dist/chunk-ATUYZWHV.js.map +7 -0
  109. package/dist/chunk-B6U3EDAF.js +448 -0
  110. package/dist/chunk-B6U3EDAF.js.map +7 -0
  111. package/dist/chunk-BKPDYW5T.js +177 -0
  112. package/dist/chunk-BO47H3VP.js +477 -0
  113. package/dist/chunk-BOO4W7WD.js +482 -0
  114. package/dist/chunk-C6YT5EM2.js +217 -0
  115. package/dist/chunk-CDUNE45Q.js +534 -0
  116. package/dist/chunk-CLN7ANNL.js +216 -0
  117. package/dist/chunk-CLNSNNQU.js +302 -0
  118. package/dist/chunk-COYULNJF.js +119 -0
  119. package/dist/chunk-DBFKUPM6.js +1275 -0
  120. package/dist/chunk-DNVSEW6P.js +170 -0
  121. package/dist/chunk-E6XLLQCG.js +299 -0
  122. package/dist/chunk-E6XLLQCG.js.map +7 -0
  123. package/dist/chunk-EC3SKPQT.js +446 -0
  124. package/dist/chunk-EDXQKDVQ.js +368 -0
  125. package/dist/chunk-EY253UB7.js +448 -0
  126. package/dist/chunk-EY253UB7.js.map +7 -0
  127. package/dist/chunk-FABY3ISP.js +176 -0
  128. package/dist/chunk-FABY3ISP.js.map +7 -0
  129. package/dist/chunk-FOPHIWFD.js +100 -0
  130. package/dist/chunk-FVX76DZS.js +203 -0
  131. package/dist/chunk-FXGE233W.js +2681 -0
  132. package/dist/chunk-GBXX3AHJ.js +343 -0
  133. package/dist/chunk-GVCQGWN7.js +34 -0
  134. package/dist/chunk-HXNUQOGN.js +234 -0
  135. package/dist/chunk-HXNUQOGN.js.map +7 -0
  136. package/dist/chunk-HXZSSHEB.js +37 -0
  137. package/dist/chunk-I73KUUYG.js +287 -0
  138. package/dist/chunk-IKDWQJZE.js +736 -0
  139. package/dist/chunk-IVXCWCKS.js +317 -0
  140. package/dist/chunk-IVXCWCKS.js.map +7 -0
  141. package/dist/chunk-JEZUPG4J.js +617 -0
  142. package/dist/chunk-JEZUPG4J.js.map +7 -0
  143. package/dist/chunk-JWHFMFF2.js +142 -0
  144. package/dist/chunk-K3OJJZCQ.js +230 -0
  145. package/dist/chunk-KM4JBR26.js +815 -0
  146. package/dist/chunk-KNOFEVOJ.js +54 -0
  147. package/dist/chunk-L7VDSIM7.js +20881 -0
  148. package/dist/chunk-L7VDSIM7.js.map +7 -0
  149. package/dist/chunk-LLX3NKB4.js +148 -0
  150. package/dist/chunk-LQJMCE7G.js +467 -0
  151. package/dist/chunk-LSWU6EAQ.js +31 -0
  152. package/dist/chunk-MNIBZTQE.js +146 -0
  153. package/dist/chunk-MQJVDIQK.js +2786 -0
  154. package/dist/chunk-N25ENPO3.js +14 -0
  155. package/dist/chunk-N3JT3KCV.js +399 -0
  156. package/dist/chunk-N6QEVQZV.js +194 -0
  157. package/dist/chunk-NJDW6ZQP.js +102 -0
  158. package/dist/chunk-NLQQIVTC.js +276 -0
  159. package/dist/chunk-NU2W6B7I.js +833 -0
  160. package/dist/chunk-NU2W6B7I.js.map +7 -0
  161. package/dist/chunk-OR43PGBV.js +98 -0
  162. package/dist/chunk-PWUERAAF.js +182 -0
  163. package/dist/chunk-PXCFA4ZQ.js +2327 -0
  164. package/dist/chunk-QSEGY3U5.js +129 -0
  165. package/dist/chunk-SC6IPDJR.js +6364 -0
  166. package/dist/chunk-SDMOLIEU.js +1205 -0
  167. package/dist/chunk-SDMOLIEU.js.map +7 -0
  168. package/dist/chunk-SOTB4FRE.js +2098 -0
  169. package/dist/chunk-SOTB4FRE.js.map +7 -0
  170. package/dist/chunk-T46LHXJW.js +283 -0
  171. package/dist/chunk-TJYRBEBK.js +2878 -0
  172. package/dist/chunk-UDL2DEBB.js +50 -0
  173. package/dist/chunk-UN3O2MNB.js +375 -0
  174. package/dist/chunk-UN3O2MNB.js.map +7 -0
  175. package/dist/chunk-UXDVUCXU.js +190 -0
  176. package/dist/chunk-UXDVUCXU.js.map +7 -0
  177. package/dist/chunk-VDIVDU3T.js +386 -0
  178. package/dist/chunk-VQZ2Z5YU.js +587 -0
  179. package/dist/chunk-VQZ2Z5YU.js.map +7 -0
  180. package/dist/chunk-VRLC7DAU.js +2833 -0
  181. package/dist/chunk-VRLC7DAU.js.map +7 -0
  182. package/dist/chunk-XQSQQSGB.js +1102 -0
  183. package/dist/chunk-XVXAQ3FI.js +1943 -0
  184. package/dist/chunk-Y45JIQ5Y.js +1219 -0
  185. package/dist/chunk-Y45JIQ5Y.js.map +7 -0
  186. package/dist/chunk-YQMENK5H.js +102 -0
  187. package/dist/chunk-ZUC4XNWU.js +514 -0
  188. package/dist/condition-ZPFBPMEZ.js +332 -0
  189. package/dist/controls-LIVMV2GV.js +41 -0
  190. package/dist/controls.config-2EOMBN5E.js +39 -0
  191. package/dist/correlation-D6GAPOP5.js +102 -0
  192. package/dist/correlation-D6GAPOP5.js.map +7 -0
  193. package/dist/cuminc-GPFDRNUP.js +1149 -0
  194. package/dist/cuminc.integration.spec-V4JYKLA6.js +678 -0
  195. package/dist/customdata.inputui-DSEUS3CT.js +289 -0
  196. package/dist/dataDownload-KT6K3M7Q.js +330 -0
  197. package/dist/dataDownload.integration.spec-VEX2RTSA.js +193 -0
  198. package/dist/databrowser.ui-VJKNMIXA.js +433 -0
  199. package/dist/dictionary-B27BMR5H.js +118 -0
  200. package/dist/dictionary-B27BMR5H.js.map +7 -0
  201. package/dist/dnaMethylation-BWQGUXVR.js +38 -0
  202. package/dist/dnaMethylation.integration.spec-YMGT2HYZ.js +203 -0
  203. package/dist/dofetch-BMSZZAAQ.js +51 -0
  204. package/dist/e2pca-KSY4DP53.js +350 -0
  205. package/dist/ep-4PAYGMWK.js +1256 -0
  206. package/dist/expclust.gdc.spec-XXFP2HHE.js +307 -0
  207. package/dist/facet-VCJQ7QPE.js +521 -0
  208. package/dist/forms2-IUD2SNOQ.js +539 -0
  209. package/dist/forms2-IUD2SNOQ.js.map +7 -0
  210. package/dist/gb-JDH242LG.js +88 -0
  211. package/dist/geneExpClustering-L23JB7XA.js +249 -0
  212. package/dist/geneExpression-P2ERCRXO.js +313 -0
  213. package/dist/geneExpression-QGPVFAN4.js +38 -0
  214. package/dist/geneExpression.unit.spec-6BQBM6VL.js +102 -0
  215. package/dist/geneORA-XIMJP665.js +278 -0
  216. package/dist/geneRanking-AJH5G22J.js +551 -0
  217. package/dist/geneVariant-AUUZ7S2B.js +41 -0
  218. package/dist/geneVariant-H6BGRRON.js +39 -0
  219. package/dist/geneVariant.integration.spec-FRCH6VI4.js +198 -0
  220. package/dist/genefusion.ui-AAJ37VFA.js +309 -0
  221. package/dist/geneset-5ARBBUYH.js +208 -0
  222. package/dist/genomeBrowser.spec-RV7YBSMZ.js +281 -0
  223. package/dist/grin2-4MYLICII.js +75 -0
  224. package/dist/grin2-4MYLICII.js.map +7 -0
  225. package/dist/grin2-RBK4NI6W.js +967 -0
  226. package/dist/grin2-RBK4NI6W.js.map +7 -0
  227. package/dist/gsea-XUMCVLFK.js +47 -0
  228. package/dist/hierCluster-HXOTNMC5.js +63 -0
  229. package/dist/hierCluster-PEDY7OTZ.js +59 -0
  230. package/dist/hierCluster.config-RKYCGNWW.js +40 -0
  231. package/dist/hierCluster.integration.spec-YKMAT7UU.js +395 -0
  232. package/dist/hierCluster.interactivity-LPTHVWHR.js +54 -0
  233. package/dist/hierCluster.renderers-4XWKHCNW.js +21 -0
  234. package/dist/imagePlot-3DF7ZH3U.js +163 -0
  235. package/dist/importPlot-N74SV3TL.js +8 -0
  236. package/dist/isoformExpression-FU7Y4OGU.js +40 -0
  237. package/dist/isoformExpression.unit.spec-BLQDKV37.js +208 -0
  238. package/dist/launch.adhoc-Y35FZV6H.js +42 -0
  239. package/dist/leftlabel.sample-ERJGAYTF.js +264 -0
  240. package/dist/leftlabel.sample-ERJGAYTF.js.map +7 -0
  241. package/dist/legacyDataset-TNIIJABK.js +119 -0
  242. package/dist/lollipop-DU37Q5E2.js +171 -0
  243. package/dist/maf-NRLSNDOT.js +452 -0
  244. package/dist/maftimeline-GRXGOOSJ.js +593 -0
  245. package/dist/matrix-G3BULZ7Y.js +58 -0
  246. package/dist/matrix-TCTX26A4.js +63 -0
  247. package/dist/matrix.cells-ED6RS5EC.js +28 -0
  248. package/dist/matrix.config-QHO2YNOT.js +41 -0
  249. package/dist/matrix.data-KQFMXWRX.js +25 -0
  250. package/dist/matrix.groups-RE74EFLY.js +27 -0
  251. package/dist/matrix.integration.spec-Y4FCZ2Q2.js +3072 -0
  252. package/dist/matrix.interactivity-3DW5WAM3.js +42 -0
  253. package/dist/matrix.layout-W57D765I.js +44 -0
  254. package/dist/matrix.legend-ZST44PIB.js +22 -0
  255. package/dist/matrix.renderers-NFRKXO7Y.js +38 -0
  256. package/dist/matrix.serieses-6ZKTFVWY.js +21 -0
  257. package/dist/matrix.sort-2UE47IOC.js +27 -0
  258. package/dist/matrix.sort.unit.spec-5CMWEXPE.js +472 -0
  259. package/dist/matrix.sorterUi-WC2YX7S7.js +18 -0
  260. package/dist/matrix.sorterUi.unit.spec-Y2HXWHJN.js +342 -0
  261. package/dist/mavb-BI4XKI5P.js +732 -0
  262. package/dist/mds.fimo-UJYESPNC.js +518 -0
  263. package/dist/mds.samplescatterplot-JKU5B4QR.js +1550 -0
  264. package/dist/mds.survivalplot-OP7Y4D3L.js +483 -0
  265. package/dist/numericDictTermCluster-DRIEJJSP.js +72 -0
  266. package/dist/oncomatrix-A3IE47HV.js +295 -0
  267. package/dist/oncomatrix.spec-TDWB2ROF.js +448 -0
  268. package/dist/plot.2dvaf-XY34TDSM.js +377 -0
  269. package/dist/plot.app-WRCBLYGO.js +41 -0
  270. package/dist/plot.barplot-RXGOUNHM.js +102 -0
  271. package/dist/plot.boxplot-GBZGSS3D.js +152 -0
  272. package/dist/plot.brainImaging-DYPKMNHL.js +51 -0
  273. package/dist/plot.disco-5K2SCKJ4.js +102 -0
  274. package/dist/plot.dzi-THJIFHIS.js +33 -0
  275. package/dist/plot.ssgq-FSIUIV3A.js +139 -0
  276. package/dist/plot.vaf2cov-HP6KEBVJ.js +259 -0
  277. package/dist/plot.wsi-MR6JMOXW.js +36 -0
  278. package/dist/polar2-IT3OF5DX.js +231 -0
  279. package/dist/polar2-IT3OF5DX.js.map +7 -0
  280. package/dist/profileForms-XXGJVF2T.js +446 -0
  281. package/dist/profileForms-XXGJVF2T.js.map +7 -0
  282. package/dist/profilePlot-J2C35OEY.js +54 -0
  283. package/dist/proteinView-7FDCILPH.js +1556 -0
  284. package/dist/proteinView-7FDCILPH.js.map +7 -0
  285. package/dist/qualitative-N7S2JHZM.js +43 -0
  286. package/dist/radar2-CDDOQGQX.js +326 -0
  287. package/dist/radar2-CDDOQGQX.js.map +7 -0
  288. package/dist/radarFacility2-ZQTHO2ON.js +334 -0
  289. package/dist/radarFacility2-ZQTHO2ON.js.map +7 -0
  290. package/dist/regression-PBGAMZAV.js +56 -0
  291. package/dist/regression.inputs-54E5YKI4.js +48 -0
  292. package/dist/regression.inputs.term-52MBTMVM.js +48 -0
  293. package/dist/regression.inputs.values.table-F3FOAYFV.js +45 -0
  294. package/dist/regression.integration.spec-M4RPJUE4.js +784 -0
  295. package/dist/regression.results-JOK6I2ZD.js +40 -0
  296. package/dist/regression.spec-O4HZB2HQ.js +708 -0
  297. package/dist/report-BDDTM7SV.js +222 -0
  298. package/dist/sampleScatter.spec-272GLYEK.js +202 -0
  299. package/dist/sampleView-E6OHEEP4.js +48 -0
  300. package/dist/samplelst-3LNF3DBG.js +111 -0
  301. package/dist/samplematrix-HL445X7I.js +2198 -0
  302. package/dist/sc-4LELHVIS.js +86 -0
  303. package/dist/scatter-IZIZURQD.js +851 -0
  304. package/dist/scatter-IZIZURQD.js.map +7 -0
  305. package/dist/scatter.integration.spec-BBEWMA7M.js +1206 -0
  306. package/dist/scatter.integration.spec-BBEWMA7M.js.map +7 -0
  307. package/dist/selectGenomeWithTklst-5LQGT4Z7.js +134 -0
  308. package/dist/singleCellCellType-T3ZT64EK.js +38 -0
  309. package/dist/singleCellCellType.unit.spec-AE4IAHOF.js +160 -0
  310. package/dist/singleCellGeneExpression-SRJXSDEB.js +38 -0
  311. package/dist/singleCellGeneExpression.unit.spec-EPL73UUO.js +153 -0
  312. package/dist/singleCellPlot-P2BHFTYZ.js +54 -0
  313. package/dist/singlecell-32SSD7VN.js +1572 -0
  314. package/dist/singlecell-7KRD5DP7.js +86 -0
  315. package/dist/snp-LE5R377N.js +38 -0
  316. package/dist/snp.unit.spec-UY6KQ5NJ.js +176 -0
  317. package/dist/snplocus-CP34ABUJ.js +208 -0
  318. package/dist/spliceevent.a53ss.diagram-JWLWQDNJ.js +151 -0
  319. package/dist/spliceevent.exonskip.diagram-C5526P7P.js +277 -0
  320. package/dist/spliceevent.noeventdiagram-352M63YB.js +460 -0
  321. package/dist/ssGSEA-BFTCECV3.js +38 -0
  322. package/dist/ssGSEA.unit.spec-4OUCKRDQ.js +88 -0
  323. package/dist/summarizeCnvGeneexp-Y3AWFIZA.js +163 -0
  324. package/dist/summarizeGeneexpSurvival-U5JSPG22.js +108 -0
  325. package/dist/summarizeMutationCnv-KCOVQEBC.js +164 -0
  326. package/dist/summarizeMutationDiagnosis-EQXEQABW.js +40 -0
  327. package/dist/summarizeMutationSurvival-4VGLG4SC.js +99 -0
  328. package/dist/summary-DXYCBNI4.js +49 -0
  329. package/dist/summary.integration.spec-MZTJISLP.js +414 -0
  330. package/dist/summaryInput-5Z3XVIL6.js +235 -0
  331. package/dist/sunburst-WVSQJYP2.js +284 -0
  332. package/dist/survival-3R3J2JBE.js +46 -0
  333. package/dist/survival-XQWFVGCJ.js +58 -0
  334. package/dist/survival.integration.spec-EBDPIBYM.js +821 -0
  335. package/dist/svgraph-SY2HVMYL.js +1387 -0
  336. package/dist/svmr-TIIMFKG7.js +3842 -0
  337. package/dist/table-5RFTXIQL.js +200 -0
  338. package/dist/termCollection-23QXTZDN.js +38 -0
  339. package/dist/termCollection-7KXABWVW.js +179 -0
  340. package/dist/termCollection.unit.spec-4AN2Z4PQ.js +208 -0
  341. package/dist/tk-WW6PJGPQ.js +46 -0
  342. package/dist/tp.ui-S5PO3MPH.js +1459 -0
  343. package/dist/tvs.dt-O7LUM5TK.js +39 -0
  344. package/dist/tvs.dtcnv.categorical-2OUFOD3W.js +40 -0
  345. package/dist/tvs.dtcnv.continuous-NOOUY5SZ.js +72 -0
  346. package/dist/tvs.dtfusion-KXQMP3UF.js +40 -0
  347. package/dist/tvs.dtsnvindel-PWHFTWZU.js +40 -0
  348. package/dist/tvs.dtsv-25FLS572.js +40 -0
  349. package/dist/tvs.numeric-KYAU5OV3.js +21 -0
  350. package/dist/tvs.samplelst-FLXNJFIV.js +104 -0
  351. package/dist/tvs.termCollection-PSVOMJE4.js +159 -0
  352. package/dist/violin-SWMEFWRA.js +46 -0
  353. package/dist/violin.integration.spec-6EQ6GC2N.js +1425 -0
  354. package/dist/violin.interactivity-WBIWPLSM.js +38 -0
  355. package/dist/violin.renderer-3WARZUOH.js +40 -0
  356. package/dist/vocabulary-WLHYHDX7.js +41 -0
  357. package/package.json +3 -3
  358. package/dist/2dmaf-Z3D2M3FB.js +0 -1373
  359. package/dist/AIProjectAdmin-2OQOQXH4.js +0 -956
  360. package/dist/AIProjectAdmin-2OQOQXH4.js.map +0 -7
  361. package/dist/AppHeader-PXLGVCVS.js +0 -835
  362. package/dist/BoxPlot-PUZKHACO.js +0 -1211
  363. package/dist/BoxPlot-PUZKHACO.js.map +0 -7
  364. package/dist/CorrelationVolcano-RO6CFLZA.js +0 -619
  365. package/dist/DE-CCA5SBJG.js +0 -95
  366. package/dist/DEinput-MRUQW6X6.js +0 -301
  367. package/dist/DifferentialAnalysis-5YQQLJKR.js +0 -245
  368. package/dist/Disco-4FTOJBLG.js +0 -3237
  369. package/dist/Disco-4FTOJBLG.js.map +0 -7
  370. package/dist/Disco.UI-IWVSK3RN.js +0 -245
  371. package/dist/Disco.UI-IWVSK3RN.js.map +0 -7
  372. package/dist/DmrPlot-FPJJHTM5.js +0 -642
  373. package/dist/GB-H6JETPRC.js +0 -1130
  374. package/dist/GB-H6JETPRC.js.map +0 -7
  375. package/dist/GeneExpInput-Q42COANS.js +0 -366
  376. package/dist/GeneExpInput-Q42COANS.js.map +0 -7
  377. package/dist/HicApp-BBD2YOMT.js +0 -2250
  378. package/dist/NumBinaryEditor-WMSF7HIO.js +0 -271
  379. package/dist/NumBinaryEditor.unit.spec-QQATLHF7.js +0 -286
  380. package/dist/NumContEditor-4CSTHVRX.js +0 -109
  381. package/dist/NumContEditor.unit.spec-2YF3OS3A.js +0 -169
  382. package/dist/NumCustomBinEditor-KFAYUWYV.js +0 -38
  383. package/dist/NumCustomBinEditor.unit.spec-YHAUSGPN.js +0 -284
  384. package/dist/NumDiscreteEditor-F46H5CME.js +0 -179
  385. package/dist/NumDiscreteEditor.unit.spec-5BIAWAVN.js +0 -202
  386. package/dist/NumRegularBinEditor-G7KOA7NR.js +0 -38
  387. package/dist/NumRegularBinEditor.unit.spec-Y6CBCWLN.js +0 -227
  388. package/dist/NumSplineEditor-JP2V2L4Y.js +0 -198
  389. package/dist/NumSplineEditor.unit.spec-N34QBZN3.js +0 -199
  390. package/dist/NumericDensity-JOPHLURB.js +0 -38
  391. package/dist/NumericDensity.unit.spec-N45PCLOT.js +0 -221
  392. package/dist/NumericHandler-SIM4E2Z5.js +0 -39
  393. package/dist/NumericHandler.unit.spec-NKLYDVTG.js +0 -219
  394. package/dist/ProteomeInput-5KMNE3PZ.js +0 -396
  395. package/dist/RunChart2-N7AZVQXJ.js +0 -758
  396. package/dist/SC-M6RGALZM.js +0 -936
  397. package/dist/SC-M6RGALZM.js.map +0 -7
  398. package/dist/Volcano-YH4RJTT5.js +0 -1379
  399. package/dist/WSIViewer-7LOVM3AU.js +0 -48508
  400. package/dist/WSIViewer-7LOVM3AU.js.map +0 -7
  401. package/dist/WsiSamplesPlot-QPPB7OOD.js +0 -165
  402. package/dist/adSandbox-R2QP74P7.js +0 -38
  403. package/dist/app-AIIN4WDE.js +0 -37
  404. package/dist/app-FJT5VXMF.js +0 -49
  405. package/dist/bam-QBO22VQB.js +0 -860
  406. package/dist/barchart-VDOP6FQU.js +0 -47
  407. package/dist/barchart.data-Z2E72EET.js +0 -22
  408. package/dist/barchart.events-NUYQBI5S.js +0 -47
  409. package/dist/barchart.integration.spec-COVZPXMH.js +0 -1980
  410. package/dist/barchart.integration.spec-COVZPXMH.js.map +0 -7
  411. package/dist/barchart2-KMSU4ROO.js +0 -311
  412. package/dist/barchart2-KMSU4ROO.js.map +0 -7
  413. package/dist/bars.renderer-JHCZDSM6.js +0 -12
  414. package/dist/block-TTN2IQAH.js +0 -6202
  415. package/dist/block-TTN2IQAH.js.map +0 -7
  416. package/dist/block.init-RRHHCNSR.js +0 -38
  417. package/dist/block.mds.expressionrank-7NWBRUII.js +0 -359
  418. package/dist/block.mds.geneboxplot-4BAJJWCC.js +0 -828
  419. package/dist/block.mds.junction-XRUIHAF5.js +0 -1545
  420. package/dist/block.mds.svcnv-YZ7PL733.js +0 -6801
  421. package/dist/block.svg-FUMP2J7A.js +0 -164
  422. package/dist/block.tk.aicheck-AIZEND45.js +0 -283
  423. package/dist/block.tk.ase-H26PKO5U.js +0 -365
  424. package/dist/block.tk.bam-XNZFHSDQ.js +0 -1906
  425. package/dist/block.tk.bedgraphdot-QTDBLBO2.js +0 -384
  426. package/dist/block.tk.bigwig.ui-OSRCPTQC.js +0 -212
  427. package/dist/block.tk.hicstraw-7GH6LVIH.js +0 -823
  428. package/dist/block.tk.junction-AJYML4AW.js +0 -2364
  429. package/dist/block.tk.junction.textmatrixui-4RIH3EZI.js +0 -199
  430. package/dist/block.tk.ld-AJYQ4C6T.js +0 -99
  431. package/dist/block.tk.menu-57OP5UW5.js +0 -1029
  432. package/dist/block.tk.pgv-XO7HP5MM.js +0 -944
  433. package/dist/brainImaging-65QDNR4D.js +0 -423
  434. package/dist/chunk-2XCUERHJ.js +0 -102
  435. package/dist/chunk-322QC6R4.js +0 -222
  436. package/dist/chunk-35SCELN4.js +0 -217
  437. package/dist/chunk-36EHIPV4.js +0 -514
  438. package/dist/chunk-3SZ6GKLB.js +0 -14
  439. package/dist/chunk-3ZLJDFJU.js +0 -368
  440. package/dist/chunk-4DXZGZOB.js +0 -54
  441. package/dist/chunk-4UWS5Y3N.js +0 -1438
  442. package/dist/chunk-4UWS5Y3N.js.map +0 -7
  443. package/dist/chunk-54EMVNPW.js +0 -102
  444. package/dist/chunk-57RBC6IZ.js +0 -302
  445. package/dist/chunk-5OUTR67M.js +0 -37
  446. package/dist/chunk-67DBIM6H.js +0 -293
  447. package/dist/chunk-67DBIM6H.js.map +0 -7
  448. package/dist/chunk-6A3IPDE2.js +0 -1943
  449. package/dist/chunk-6GN7X6LU.js +0 -2681
  450. package/dist/chunk-72X7LSBN.js +0 -54
  451. package/dist/chunk-74ZU4BT6.js +0 -2824
  452. package/dist/chunk-74ZU4BT6.js.map +0 -7
  453. package/dist/chunk-7EMWHCVW.js +0 -1825
  454. package/dist/chunk-7FACFCZK.js +0 -226
  455. package/dist/chunk-7XFGYYRV.js +0 -371
  456. package/dist/chunk-7XFGYYRV.js.map +0 -7
  457. package/dist/chunk-B6CSYKZJ.js +0 -1275
  458. package/dist/chunk-BDIKFVWZ.js +0 -443
  459. package/dist/chunk-BDIKFVWZ.js.map +0 -7
  460. package/dist/chunk-BWGU5NJS.js +0 -291
  461. package/dist/chunk-C5ZMAQXQ.js +0 -1173
  462. package/dist/chunk-C5ZMAQXQ.js.map +0 -7
  463. package/dist/chunk-CC3GFVV6.js +0 -117
  464. package/dist/chunk-CXQ6KS3Z.js +0 -1348
  465. package/dist/chunk-CXQ6KS3Z.js.map +0 -7
  466. package/dist/chunk-DCH54HC5.js +0 -824
  467. package/dist/chunk-DCH54HC5.js.map +0 -7
  468. package/dist/chunk-DD4R5P6W.js +0 -177
  469. package/dist/chunk-DKVUOBIE.js +0 -203
  470. package/dist/chunk-DR6H3QAA.js +0 -399
  471. package/dist/chunk-EH4NQ7C4.js +0 -170
  472. package/dist/chunk-EVN6KWPN.js +0 -50
  473. package/dist/chunk-FFEIP5CT.js +0 -458
  474. package/dist/chunk-FFEIP5CT.js.map +0 -7
  475. package/dist/chunk-FJP77STI.js +0 -158
  476. package/dist/chunk-FJP77STI.js.map +0 -7
  477. package/dist/chunk-G6O3URDN.js +0 -467
  478. package/dist/chunk-GNIK4JYM.js +0 -534
  479. package/dist/chunk-HKSNADSX.js +0 -477
  480. package/dist/chunk-I5RAQKKJ.js +0 -129
  481. package/dist/chunk-IW57W7EQ.js +0 -1210
  482. package/dist/chunk-IW57W7EQ.js.map +0 -7
  483. package/dist/chunk-J4SOF2ZH.js +0 -263
  484. package/dist/chunk-KPJZBCVI.js +0 -272
  485. package/dist/chunk-KSGA62R2.js +0 -2878
  486. package/dist/chunk-LTOBEUM2.js +0 -98
  487. package/dist/chunk-MYF2BWKC.js +0 -205
  488. package/dist/chunk-MYF2BWKC.js.map +0 -7
  489. package/dist/chunk-N2SKTCDK.js +0 -148
  490. package/dist/chunk-NGM3ZLIP.js +0 -230
  491. package/dist/chunk-NOEAT6CX.js +0 -317
  492. package/dist/chunk-NOEAT6CX.js.map +0 -7
  493. package/dist/chunk-NSXZPWRP.js +0 -482
  494. package/dist/chunk-O3JB4PIX.js +0 -31
  495. package/dist/chunk-OAWQ6LOO.js +0 -2063
  496. package/dist/chunk-OAWQ6LOO.js.map +0 -7
  497. package/dist/chunk-ODG6RD7P.js +0 -254
  498. package/dist/chunk-OEDZHPBJ.js +0 -58
  499. package/dist/chunk-ORL44TIK.js +0 -386
  500. package/dist/chunk-P3IENRWJ.js +0 -613
  501. package/dist/chunk-P3IENRWJ.js.map +0 -7
  502. package/dist/chunk-PCZNTK74.js +0 -26
  503. package/dist/chunk-QH6W3NVF.js +0 -287
  504. package/dist/chunk-QNETLNPB.js +0 -343
  505. package/dist/chunk-QQZ3SBF3.js +0 -216
  506. package/dist/chunk-R2MMURGK.js +0 -2786
  507. package/dist/chunk-SA7APTJR.js +0 -20792
  508. package/dist/chunk-SA7APTJR.js.map +0 -7
  509. package/dist/chunk-SHWLROJG.js +0 -283
  510. package/dist/chunk-SKREEF3H.js +0 -184
  511. package/dist/chunk-SKREEF3H.js.map +0 -7
  512. package/dist/chunk-TOU7EVFQ.js +0 -396
  513. package/dist/chunk-TOU7EVFQ.js.map +0 -7
  514. package/dist/chunk-UGVNZMLU.js +0 -4274
  515. package/dist/chunk-UGVNZMLU.js.map +0 -7
  516. package/dist/chunk-UI7OCM2A.js +0 -815
  517. package/dist/chunk-UJKW42DI.js +0 -6364
  518. package/dist/chunk-ULPMYS5B.js +0 -100
  519. package/dist/chunk-UOVALHAJ.js +0 -182
  520. package/dist/chunk-VGJSASRT.js +0 -446
  521. package/dist/chunk-VGYTAYFK.js +0 -276
  522. package/dist/chunk-VHOEJBFP.js +0 -736
  523. package/dist/chunk-VOUMS6IP.js +0 -1102
  524. package/dist/chunk-VV36JRUF.js +0 -381
  525. package/dist/chunk-W55XSG6K.js +0 -142
  526. package/dist/chunk-W6ME65LV.js +0 -34
  527. package/dist/chunk-WHI6466S.js +0 -146
  528. package/dist/chunk-WSDUD52Y.js +0 -55
  529. package/dist/chunk-XAVNZNXQ.js +0 -95
  530. package/dist/chunk-XMLURPEP.js +0 -194
  531. package/dist/chunk-YKXUK7HJ.js +0 -5041
  532. package/dist/chunk-YKXUK7HJ.js.map +0 -7
  533. package/dist/chunk-YZK37YCC.js +0 -119
  534. package/dist/chunk-ZTYNN6G5.js +0 -2327
  535. package/dist/chunk-ZXTHADSC.js +0 -158
  536. package/dist/condition-HDVYPJJD.js +0 -332
  537. package/dist/controls-YEEW46C6.js +0 -41
  538. package/dist/controls.config-C535H5DL.js +0 -39
  539. package/dist/correlation-AOSSSSL3.js +0 -99
  540. package/dist/correlation-AOSSSSL3.js.map +0 -7
  541. package/dist/cuminc-II7NFIFP.js +0 -1149
  542. package/dist/cuminc.integration.spec-B4N6OMBJ.js +0 -678
  543. package/dist/customdata.inputui-AI4ZBIEP.js +0 -289
  544. package/dist/dataDownload-ZQYLXN6D.js +0 -330
  545. package/dist/dataDownload.integration.spec-2PKYZ2AY.js +0 -193
  546. package/dist/databrowser.ui-WGD7D3XV.js +0 -433
  547. package/dist/dictionary-RYM4WP2W.js +0 -111
  548. package/dist/dictionary-RYM4WP2W.js.map +0 -7
  549. package/dist/dnaMethylation-WGJMJL5B.js +0 -38
  550. package/dist/dnaMethylation.integration.spec-DO3PV4MO.js +0 -203
  551. package/dist/dofetch-RADX3AFU.js +0 -51
  552. package/dist/e2pca-KOAAU2JX.js +0 -350
  553. package/dist/ep-CXCATXYH.js +0 -1256
  554. package/dist/expclust.gdc.spec-UJO2R3CW.js +0 -307
  555. package/dist/facet-2FBUAD7P.js +0 -521
  556. package/dist/forms2-ZBT5BZW3.js +0 -534
  557. package/dist/forms2-ZBT5BZW3.js.map +0 -7
  558. package/dist/gb-VCJFV63W.js +0 -88
  559. package/dist/geneExpClustering-FUNS6D2P.js +0 -249
  560. package/dist/geneExpression-2BWWGYL4.js +0 -38
  561. package/dist/geneExpression-2OPFWV2K.js +0 -313
  562. package/dist/geneExpression.unit.spec-G7BSHJQT.js +0 -102
  563. package/dist/geneORA-S3KQMBYL.js +0 -278
  564. package/dist/geneRanking-UZ36XAL7.js +0 -551
  565. package/dist/geneVariant-OOZ2SBXO.js +0 -41
  566. package/dist/geneVariant-ZHNVEKQ6.js +0 -39
  567. package/dist/geneVariant.integration.spec-2C7EWKEV.js +0 -198
  568. package/dist/genefusion.ui-ASICJNII.js +0 -309
  569. package/dist/geneset-SNM4M6UM.js +0 -208
  570. package/dist/genomeBrowser.spec-DJIRW2X7.js +0 -281
  571. package/dist/grin2-7AOJP5QJ.js +0 -1560
  572. package/dist/grin2-7AOJP5QJ.js.map +0 -7
  573. package/dist/grin2-RKJXYWJ5.js +0 -821
  574. package/dist/grin2-RKJXYWJ5.js.map +0 -7
  575. package/dist/gsea-SPTQJW67.js +0 -47
  576. package/dist/hierCluster-KDE5SMYP.js +0 -63
  577. package/dist/hierCluster-XG4YLVL3.js +0 -59
  578. package/dist/hierCluster.config-VNEEJCKJ.js +0 -40
  579. package/dist/hierCluster.integration.spec-SSDN7LSH.js +0 -395
  580. package/dist/hierCluster.interactivity-DKBSJ644.js +0 -54
  581. package/dist/hierCluster.renderers-OG6LZAT7.js +0 -21
  582. package/dist/imagePlot-M5JSHEY4.js +0 -163
  583. package/dist/importPlot-YH7ZY6RJ.js +0 -8
  584. package/dist/isoformExpression-EV27MKYZ.js +0 -40
  585. package/dist/isoformExpression.unit.spec-7T2GOHH3.js +0 -208
  586. package/dist/launch.adhoc-NOISOX5E.js +0 -42
  587. package/dist/leftlabel.sample-42AX4KTV.js +0 -260
  588. package/dist/leftlabel.sample-42AX4KTV.js.map +0 -7
  589. package/dist/legacyDataset-SWJCAWIR.js +0 -119
  590. package/dist/lollipop-LQCQBTSX.js +0 -171
  591. package/dist/maf-U237OWZ3.js +0 -452
  592. package/dist/maftimeline-NLZLMHT2.js +0 -593
  593. package/dist/matrix-DZJXYRYN.js +0 -63
  594. package/dist/matrix-Y5345QQG.js +0 -58
  595. package/dist/matrix.cells-PT7S74QP.js +0 -28
  596. package/dist/matrix.config-2ORCUWKX.js +0 -41
  597. package/dist/matrix.data-C6VPQJJ4.js +0 -25
  598. package/dist/matrix.groups-CEOCG2CT.js +0 -27
  599. package/dist/matrix.integration.spec-U4B3JB6N.js +0 -3072
  600. package/dist/matrix.interactivity-GFLIFIER.js +0 -42
  601. package/dist/matrix.layout-DOVDHTDX.js +0 -44
  602. package/dist/matrix.legend-JE4ZSLP7.js +0 -22
  603. package/dist/matrix.renderers-GPUJQ7KF.js +0 -38
  604. package/dist/matrix.serieses-REE4DCSR.js +0 -21
  605. package/dist/matrix.sort-VD5URUWY.js +0 -27
  606. package/dist/matrix.sort.unit.spec-4IOFVHJN.js +0 -472
  607. package/dist/matrix.sorterUi-VQYY6KBK.js +0 -18
  608. package/dist/matrix.sorterUi.unit.spec-V5O2EJBX.js +0 -342
  609. package/dist/mavb-SQDA3B2B.js +0 -732
  610. package/dist/mds.fimo-ZJSEPLD7.js +0 -518
  611. package/dist/mds.samplescatterplot-Y5V73GOY.js +0 -1550
  612. package/dist/mds.survivalplot-CZBRMHYN.js +0 -483
  613. package/dist/numericDictTermCluster-TFXBBUVI.js +0 -72
  614. package/dist/oncomatrix-ZILACPPI.js +0 -295
  615. package/dist/oncomatrix.spec-RLIVVVD6.js +0 -448
  616. package/dist/plot.2dvaf-BNRZPIKU.js +0 -377
  617. package/dist/plot.app-NRUARQCN.js +0 -41
  618. package/dist/plot.barplot-342AYQC7.js +0 -102
  619. package/dist/plot.boxplot-OHEJDPTW.js +0 -152
  620. package/dist/plot.brainImaging-KV72PAON.js +0 -51
  621. package/dist/plot.disco-OUE4RFHL.js +0 -102
  622. package/dist/plot.dzi-T3GPUH36.js +0 -33
  623. package/dist/plot.ssgq-WJHGMXW5.js +0 -139
  624. package/dist/plot.vaf2cov-NGD5PCV4.js +0 -259
  625. package/dist/plot.wsi-2MU5BDG3.js +0 -36
  626. package/dist/polar2-YCWPBPFU.js +0 -226
  627. package/dist/polar2-YCWPBPFU.js.map +0 -7
  628. package/dist/profileForms-OV3I6RK7.js +0 -441
  629. package/dist/profileForms-OV3I6RK7.js.map +0 -7
  630. package/dist/profilePlot-OMVO3K4H.js +0 -54
  631. package/dist/proteinView-OAR2RC6U.js +0 -1320
  632. package/dist/proteinView-OAR2RC6U.js.map +0 -7
  633. package/dist/qualitative-MEYBRUC6.js +0 -43
  634. package/dist/radar2-KREAMGVV.js +0 -321
  635. package/dist/radar2-KREAMGVV.js.map +0 -7
  636. package/dist/radarFacility2-DBPEV7VC.js +0 -329
  637. package/dist/radarFacility2-DBPEV7VC.js.map +0 -7
  638. package/dist/regression-ZPDPLI6G.js +0 -56
  639. package/dist/regression.inputs-QOSBAGL6.js +0 -48
  640. package/dist/regression.inputs.term-HMUMPY7X.js +0 -48
  641. package/dist/regression.inputs.values.table-VMCTZHLG.js +0 -45
  642. package/dist/regression.integration.spec-RP74JTAA.js +0 -784
  643. package/dist/regression.results-5XC6M67C.js +0 -40
  644. package/dist/regression.spec-EZYM24J7.js +0 -708
  645. package/dist/report-ZOVQCOGQ.js +0 -222
  646. package/dist/sampleScatter.spec-CD52FEOC.js +0 -202
  647. package/dist/sampleView-SVTLSWRG.js +0 -48
  648. package/dist/samplelst-HXF5POJD.js +0 -111
  649. package/dist/samplematrix-NYDAH74I.js +0 -2198
  650. package/dist/sc-JIDT4W4K.js +0 -86
  651. package/dist/scatter-WNRTPSEE.js +0 -849
  652. package/dist/scatter-WNRTPSEE.js.map +0 -7
  653. package/dist/scatter.integration.spec-3EYTPY5B.js +0 -1197
  654. package/dist/scatter.integration.spec-3EYTPY5B.js.map +0 -7
  655. package/dist/selectGenomeWithTklst-OSB7B6L3.js +0 -134
  656. package/dist/singleCellCellType-3BH7LWQ6.js +0 -38
  657. package/dist/singleCellCellType.unit.spec-RU4RJXFF.js +0 -160
  658. package/dist/singleCellGeneExpression-3UA4YER7.js +0 -38
  659. package/dist/singleCellGeneExpression.unit.spec-4ZTBG37H.js +0 -153
  660. package/dist/singleCellPlot-ZUAWK5RE.js +0 -54
  661. package/dist/singlecell-BGJZB7MF.js +0 -86
  662. package/dist/singlecell-RO3BL5OO.js +0 -1572
  663. package/dist/snp-HD7VQKBR.js +0 -38
  664. package/dist/snp.unit.spec-ISXCLMWW.js +0 -176
  665. package/dist/snplocus-IL5Z4XWV.js +0 -208
  666. package/dist/spliceevent.a53ss.diagram-LLJSPV7M.js +0 -151
  667. package/dist/spliceevent.exonskip.diagram-LAOIOIST.js +0 -277
  668. package/dist/spliceevent.noeventdiagram-MVA7Q3HT.js +0 -460
  669. package/dist/ssGSEA-7T6S3DSE.js +0 -38
  670. package/dist/ssGSEA.unit.spec-XJ3W4NWX.js +0 -88
  671. package/dist/summarizeCnvGeneexp-RRP6JUV6.js +0 -163
  672. package/dist/summarizeGeneexpSurvival-AFLHDD6Q.js +0 -108
  673. package/dist/summarizeMutationCnv-NABUYHMX.js +0 -164
  674. package/dist/summarizeMutationDiagnosis-2LQ7JU3K.js +0 -40
  675. package/dist/summarizeMutationSurvival-3WBT5TXG.js +0 -99
  676. package/dist/summary-FRDKOFXW.js +0 -49
  677. package/dist/summary.integration.spec-ZLRIA7G2.js +0 -414
  678. package/dist/summaryInput-4JO6MHP4.js +0 -235
  679. package/dist/sunburst-DRCVSC2X.js +0 -284
  680. package/dist/survival-AK75COPY.js +0 -58
  681. package/dist/survival-IF5NI3A6.js +0 -46
  682. package/dist/survival.integration.spec-7IWBTPJG.js +0 -821
  683. package/dist/svgraph-QBDF2SLB.js +0 -1387
  684. package/dist/svmr-O4GJJUT2.js +0 -3842
  685. package/dist/table-FQAIXKLE.js +0 -200
  686. package/dist/termCollection-GMDDL3L7.js +0 -179
  687. package/dist/termCollection-ZO5PZ7E3.js +0 -38
  688. package/dist/termCollection.unit.spec-5JBCTXHX.js +0 -208
  689. package/dist/tk-GJX23IV7.js +0 -46
  690. package/dist/tp.ui-T7FVMTGQ.js +0 -1459
  691. package/dist/tvs.dt-X7L7NSU6.js +0 -39
  692. package/dist/tvs.dtcnv.categorical-73G2V6CH.js +0 -40
  693. package/dist/tvs.dtcnv.continuous-DWFJL3X7.js +0 -72
  694. package/dist/tvs.dtfusion-HQADHCSV.js +0 -40
  695. package/dist/tvs.dtsnvindel-PY5OBMGW.js +0 -40
  696. package/dist/tvs.dtsv-OTBEEWSW.js +0 -40
  697. package/dist/tvs.numeric-WGDHEBJV.js +0 -21
  698. package/dist/tvs.samplelst-LCXSU5MG.js +0 -104
  699. package/dist/tvs.termCollection-L527XN4X.js +0 -159
  700. package/dist/violin-6VKRUQV3.js +0 -46
  701. package/dist/violin.integration.spec-RJATDLQH.js +0 -1425
  702. package/dist/violin.interactivity-SKF5H7MN.js +0 -38
  703. package/dist/violin.renderer-GB4TPX3B.js +0 -40
  704. package/dist/vocabulary-D3W44IWE.js +0 -41
  705. /package/dist/{2dmaf-Z3D2M3FB.js.map → 2dmaf-US2ZAJJJ.js.map} +0 -0
  706. /package/dist/{AppHeader-PXLGVCVS.js.map → AppHeader-UKB344GC.js.map} +0 -0
  707. /package/dist/{CorrelationVolcano-RO6CFLZA.js.map → CorrelationVolcano-J3IFVSZB.js.map} +0 -0
  708. /package/dist/{DE-CCA5SBJG.js.map → DE-PAPJP6AH.js.map} +0 -0
  709. /package/dist/{DEinput-MRUQW6X6.js.map → DEinput-YON466QQ.js.map} +0 -0
  710. /package/dist/{DifferentialAnalysis-5YQQLJKR.js.map → DifferentialAnalysis-DEUODXGG.js.map} +0 -0
  711. /package/dist/{DmrPlot-FPJJHTM5.js.map → DmrPlot-DSELMC4E.js.map} +0 -0
  712. /package/dist/{HicApp-BBD2YOMT.js.map → HicApp-BP7PSXY2.js.map} +0 -0
  713. /package/dist/{NumBinaryEditor-WMSF7HIO.js.map → NumBinaryEditor-CHWQT445.js.map} +0 -0
  714. /package/dist/{NumBinaryEditor.unit.spec-QQATLHF7.js.map → NumBinaryEditor.unit.spec-MXRNK7XH.js.map} +0 -0
  715. /package/dist/{NumContEditor-4CSTHVRX.js.map → NumContEditor-XS3RA7GY.js.map} +0 -0
  716. /package/dist/{NumContEditor.unit.spec-2YF3OS3A.js.map → NumContEditor.unit.spec-662MHSP4.js.map} +0 -0
  717. /package/dist/{NumCustomBinEditor-KFAYUWYV.js.map → NumCustomBinEditor-LUVIAXMZ.js.map} +0 -0
  718. /package/dist/{NumCustomBinEditor.unit.spec-YHAUSGPN.js.map → NumCustomBinEditor.unit.spec-3D3GY3F4.js.map} +0 -0
  719. /package/dist/{NumDiscreteEditor-F46H5CME.js.map → NumDiscreteEditor-24W2A5IN.js.map} +0 -0
  720. /package/dist/{NumDiscreteEditor.unit.spec-5BIAWAVN.js.map → NumDiscreteEditor.unit.spec-B5T42Z5S.js.map} +0 -0
  721. /package/dist/{NumRegularBinEditor-G7KOA7NR.js.map → NumRegularBinEditor-AING4HZ5.js.map} +0 -0
  722. /package/dist/{NumRegularBinEditor.unit.spec-Y6CBCWLN.js.map → NumRegularBinEditor.unit.spec-UKSVZH2S.js.map} +0 -0
  723. /package/dist/{NumSplineEditor-JP2V2L4Y.js.map → NumSplineEditor-54KNKHJX.js.map} +0 -0
  724. /package/dist/{NumSplineEditor.unit.spec-N34QBZN3.js.map → NumSplineEditor.unit.spec-5FTST3Y5.js.map} +0 -0
  725. /package/dist/{NumericDensity-JOPHLURB.js.map → NumericDensity-C7DQZ5Q5.js.map} +0 -0
  726. /package/dist/{NumericDensity.unit.spec-N45PCLOT.js.map → NumericDensity.unit.spec-HV6SD3ZS.js.map} +0 -0
  727. /package/dist/{NumericHandler-SIM4E2Z5.js.map → NumericHandler-FV3L23EC.js.map} +0 -0
  728. /package/dist/{NumericHandler.unit.spec-NKLYDVTG.js.map → NumericHandler.unit.spec-E72DXVBB.js.map} +0 -0
  729. /package/dist/{ProteomeInput-5KMNE3PZ.js.map → ProteomeInput-3XTK74SN.js.map} +0 -0
  730. /package/dist/{RunChart2-N7AZVQXJ.js.map → RunChart2-X5FBZVRX.js.map} +0 -0
  731. /package/dist/{Volcano-YH4RJTT5.js.map → Volcano-2USCTLKO.js.map} +0 -0
  732. /package/dist/{WsiSamplesPlot-QPPB7OOD.js.map → WsiSamplesPlot-VIKSG63U.js.map} +0 -0
  733. /package/dist/{adSandbox-R2QP74P7.js.map → adSandbox-VXUJGPD3.js.map} +0 -0
  734. /package/dist/{app-AIIN4WDE.js.map → app-KHZT2BVF.js.map} +0 -0
  735. /package/dist/{app-FJT5VXMF.js.map → app-XLYH3YPL.js.map} +0 -0
  736. /package/dist/{bam-QBO22VQB.js.map → bam-C23ZARYE.js.map} +0 -0
  737. /package/dist/{barchart-VDOP6FQU.js.map → barchart-KGXLYEIP.js.map} +0 -0
  738. /package/dist/{barchart.data-Z2E72EET.js.map → barchart.data-7OI5GZZ6.js.map} +0 -0
  739. /package/dist/{barchart.events-NUYQBI5S.js.map → barchart.events-3KDNIFBG.js.map} +0 -0
  740. /package/dist/{bars.renderer-JHCZDSM6.js.map → bars.renderer-57KSYAAT.js.map} +0 -0
  741. /package/dist/{block.init-RRHHCNSR.js.map → block.init-7FHXQJNE.js.map} +0 -0
  742. /package/dist/{block.mds.expressionrank-7NWBRUII.js.map → block.mds.expressionrank-UGZQK7Z3.js.map} +0 -0
  743. /package/dist/{block.mds.geneboxplot-4BAJJWCC.js.map → block.mds.geneboxplot-2CQLB4YN.js.map} +0 -0
  744. /package/dist/{block.mds.junction-XRUIHAF5.js.map → block.mds.junction-JHPHWVOS.js.map} +0 -0
  745. /package/dist/{block.mds.svcnv-YZ7PL733.js.map → block.mds.svcnv-E7P2SVKK.js.map} +0 -0
  746. /package/dist/{block.svg-FUMP2J7A.js.map → block.svg-MVRR3C6V.js.map} +0 -0
  747. /package/dist/{block.tk.aicheck-AIZEND45.js.map → block.tk.aicheck-KX46G4TR.js.map} +0 -0
  748. /package/dist/{block.tk.ase-H26PKO5U.js.map → block.tk.ase-WMXI47BF.js.map} +0 -0
  749. /package/dist/{block.tk.bam-XNZFHSDQ.js.map → block.tk.bam-KFEGVEQQ.js.map} +0 -0
  750. /package/dist/{block.tk.bedgraphdot-QTDBLBO2.js.map → block.tk.bedgraphdot-P4DBCWFK.js.map} +0 -0
  751. /package/dist/{block.tk.bigwig.ui-OSRCPTQC.js.map → block.tk.bigwig.ui-WJPH2Z7F.js.map} +0 -0
  752. /package/dist/{block.tk.hicstraw-7GH6LVIH.js.map → block.tk.hicstraw-RSD6I2NX.js.map} +0 -0
  753. /package/dist/{block.tk.junction-AJYML4AW.js.map → block.tk.junction-VZS2DEDO.js.map} +0 -0
  754. /package/dist/{block.tk.junction.textmatrixui-4RIH3EZI.js.map → block.tk.junction.textmatrixui-UCWGHZDI.js.map} +0 -0
  755. /package/dist/{block.tk.ld-AJYQ4C6T.js.map → block.tk.ld-ERSIIBM2.js.map} +0 -0
  756. /package/dist/{block.tk.menu-57OP5UW5.js.map → block.tk.menu-2ZNXE7CE.js.map} +0 -0
  757. /package/dist/{block.tk.pgv-XO7HP5MM.js.map → block.tk.pgv-EJLACCFR.js.map} +0 -0
  758. /package/dist/{brainImaging-65QDNR4D.js.map → brainImaging-BMZJY6OT.js.map} +0 -0
  759. /package/dist/{chunk-72X7LSBN.js.map → chunk-27FPMFP2.js.map} +0 -0
  760. /package/dist/{chunk-OEDZHPBJ.js.map → chunk-3LYZMOLO.js.map} +0 -0
  761. /package/dist/{chunk-322QC6R4.js.map → chunk-455XZIIA.js.map} +0 -0
  762. /package/dist/{chunk-J4SOF2ZH.js.map → chunk-474DTKP7.js.map} +0 -0
  763. /package/dist/{chunk-7FACFCZK.js.map → chunk-4AP3O3JW.js.map} +0 -0
  764. /package/dist/{chunk-CC3GFVV6.js.map → chunk-4JWN7E7Q.js.map} +0 -0
  765. /package/dist/{chunk-ZXTHADSC.js.map → chunk-55MOHL3P.js.map} +0 -0
  766. /package/dist/{chunk-VV36JRUF.js.map → chunk-5CR24RTX.js.map} +0 -0
  767. /package/dist/{chunk-PCZNTK74.js.map → chunk-5QTJUPFS.js.map} +0 -0
  768. /package/dist/{chunk-BWGU5NJS.js.map → chunk-5TJQ6633.js.map} +0 -0
  769. /package/dist/{chunk-ODG6RD7P.js.map → chunk-5X5LI5YM.js.map} +0 -0
  770. /package/dist/{chunk-7EMWHCVW.js.map → chunk-6G4YOMWW.js.map} +0 -0
  771. /package/dist/{chunk-XAVNZNXQ.js.map → chunk-6SCBPP4C.js.map} +0 -0
  772. /package/dist/{chunk-WSDUD52Y.js.map → chunk-74XVBQF7.js.map} +0 -0
  773. /package/dist/{chunk-KPJZBCVI.js.map → chunk-7I3LST7R.js.map} +0 -0
  774. /package/dist/{chunk-DD4R5P6W.js.map → chunk-BKPDYW5T.js.map} +0 -0
  775. /package/dist/{chunk-HKSNADSX.js.map → chunk-BO47H3VP.js.map} +0 -0
  776. /package/dist/{chunk-NSXZPWRP.js.map → chunk-BOO4W7WD.js.map} +0 -0
  777. /package/dist/{chunk-35SCELN4.js.map → chunk-C6YT5EM2.js.map} +0 -0
  778. /package/dist/{chunk-GNIK4JYM.js.map → chunk-CDUNE45Q.js.map} +0 -0
  779. /package/dist/{chunk-QQZ3SBF3.js.map → chunk-CLN7ANNL.js.map} +0 -0
  780. /package/dist/{chunk-57RBC6IZ.js.map → chunk-CLNSNNQU.js.map} +0 -0
  781. /package/dist/{chunk-YZK37YCC.js.map → chunk-COYULNJF.js.map} +0 -0
  782. /package/dist/{chunk-B6CSYKZJ.js.map → chunk-DBFKUPM6.js.map} +0 -0
  783. /package/dist/{chunk-EH4NQ7C4.js.map → chunk-DNVSEW6P.js.map} +0 -0
  784. /package/dist/{chunk-VGJSASRT.js.map → chunk-EC3SKPQT.js.map} +0 -0
  785. /package/dist/{chunk-3ZLJDFJU.js.map → chunk-EDXQKDVQ.js.map} +0 -0
  786. /package/dist/{chunk-ULPMYS5B.js.map → chunk-FOPHIWFD.js.map} +0 -0
  787. /package/dist/{chunk-DKVUOBIE.js.map → chunk-FVX76DZS.js.map} +0 -0
  788. /package/dist/{chunk-6GN7X6LU.js.map → chunk-FXGE233W.js.map} +0 -0
  789. /package/dist/{chunk-QNETLNPB.js.map → chunk-GBXX3AHJ.js.map} +0 -0
  790. /package/dist/{chunk-W6ME65LV.js.map → chunk-GVCQGWN7.js.map} +0 -0
  791. /package/dist/{chunk-5OUTR67M.js.map → chunk-HXZSSHEB.js.map} +0 -0
  792. /package/dist/{chunk-QH6W3NVF.js.map → chunk-I73KUUYG.js.map} +0 -0
  793. /package/dist/{chunk-VHOEJBFP.js.map → chunk-IKDWQJZE.js.map} +0 -0
  794. /package/dist/{chunk-W55XSG6K.js.map → chunk-JWHFMFF2.js.map} +0 -0
  795. /package/dist/{chunk-NGM3ZLIP.js.map → chunk-K3OJJZCQ.js.map} +0 -0
  796. /package/dist/{chunk-UI7OCM2A.js.map → chunk-KM4JBR26.js.map} +0 -0
  797. /package/dist/{chunk-4DXZGZOB.js.map → chunk-KNOFEVOJ.js.map} +0 -0
  798. /package/dist/{chunk-N2SKTCDK.js.map → chunk-LLX3NKB4.js.map} +0 -0
  799. /package/dist/{chunk-G6O3URDN.js.map → chunk-LQJMCE7G.js.map} +0 -0
  800. /package/dist/{chunk-O3JB4PIX.js.map → chunk-LSWU6EAQ.js.map} +0 -0
  801. /package/dist/{chunk-WHI6466S.js.map → chunk-MNIBZTQE.js.map} +0 -0
  802. /package/dist/{chunk-R2MMURGK.js.map → chunk-MQJVDIQK.js.map} +0 -0
  803. /package/dist/{chunk-3SZ6GKLB.js.map → chunk-N25ENPO3.js.map} +0 -0
  804. /package/dist/{chunk-DR6H3QAA.js.map → chunk-N3JT3KCV.js.map} +0 -0
  805. /package/dist/{chunk-XMLURPEP.js.map → chunk-N6QEVQZV.js.map} +0 -0
  806. /package/dist/{chunk-54EMVNPW.js.map → chunk-NJDW6ZQP.js.map} +0 -0
  807. /package/dist/{chunk-VGYTAYFK.js.map → chunk-NLQQIVTC.js.map} +0 -0
  808. /package/dist/{chunk-LTOBEUM2.js.map → chunk-OR43PGBV.js.map} +0 -0
  809. /package/dist/{chunk-UOVALHAJ.js.map → chunk-PWUERAAF.js.map} +0 -0
  810. /package/dist/{chunk-ZTYNN6G5.js.map → chunk-PXCFA4ZQ.js.map} +0 -0
  811. /package/dist/{chunk-I5RAQKKJ.js.map → chunk-QSEGY3U5.js.map} +0 -0
  812. /package/dist/{chunk-UJKW42DI.js.map → chunk-SC6IPDJR.js.map} +0 -0
  813. /package/dist/{chunk-SHWLROJG.js.map → chunk-T46LHXJW.js.map} +0 -0
  814. /package/dist/{chunk-KSGA62R2.js.map → chunk-TJYRBEBK.js.map} +0 -0
  815. /package/dist/{chunk-EVN6KWPN.js.map → chunk-UDL2DEBB.js.map} +0 -0
  816. /package/dist/{chunk-ORL44TIK.js.map → chunk-VDIVDU3T.js.map} +0 -0
  817. /package/dist/{chunk-VOUMS6IP.js.map → chunk-XQSQQSGB.js.map} +0 -0
  818. /package/dist/{chunk-6A3IPDE2.js.map → chunk-XVXAQ3FI.js.map} +0 -0
  819. /package/dist/{chunk-2XCUERHJ.js.map → chunk-YQMENK5H.js.map} +0 -0
  820. /package/dist/{chunk-36EHIPV4.js.map → chunk-ZUC4XNWU.js.map} +0 -0
  821. /package/dist/{condition-HDVYPJJD.js.map → condition-ZPFBPMEZ.js.map} +0 -0
  822. /package/dist/{controls-YEEW46C6.js.map → controls-LIVMV2GV.js.map} +0 -0
  823. /package/dist/{controls.config-C535H5DL.js.map → controls.config-2EOMBN5E.js.map} +0 -0
  824. /package/dist/{cuminc-II7NFIFP.js.map → cuminc-GPFDRNUP.js.map} +0 -0
  825. /package/dist/{cuminc.integration.spec-B4N6OMBJ.js.map → cuminc.integration.spec-V4JYKLA6.js.map} +0 -0
  826. /package/dist/{customdata.inputui-AI4ZBIEP.js.map → customdata.inputui-DSEUS3CT.js.map} +0 -0
  827. /package/dist/{dataDownload-ZQYLXN6D.js.map → dataDownload-KT6K3M7Q.js.map} +0 -0
  828. /package/dist/{dataDownload.integration.spec-2PKYZ2AY.js.map → dataDownload.integration.spec-VEX2RTSA.js.map} +0 -0
  829. /package/dist/{databrowser.ui-WGD7D3XV.js.map → databrowser.ui-VJKNMIXA.js.map} +0 -0
  830. /package/dist/{dnaMethylation-WGJMJL5B.js.map → dnaMethylation-BWQGUXVR.js.map} +0 -0
  831. /package/dist/{dnaMethylation.integration.spec-DO3PV4MO.js.map → dnaMethylation.integration.spec-YMGT2HYZ.js.map} +0 -0
  832. /package/dist/{dofetch-RADX3AFU.js.map → dofetch-BMSZZAAQ.js.map} +0 -0
  833. /package/dist/{e2pca-KOAAU2JX.js.map → e2pca-KSY4DP53.js.map} +0 -0
  834. /package/dist/{ep-CXCATXYH.js.map → ep-4PAYGMWK.js.map} +0 -0
  835. /package/dist/{expclust.gdc.spec-UJO2R3CW.js.map → expclust.gdc.spec-XXFP2HHE.js.map} +0 -0
  836. /package/dist/{facet-2FBUAD7P.js.map → facet-VCJQ7QPE.js.map} +0 -0
  837. /package/dist/{gb-VCJFV63W.js.map → gb-JDH242LG.js.map} +0 -0
  838. /package/dist/{geneExpClustering-FUNS6D2P.js.map → geneExpClustering-L23JB7XA.js.map} +0 -0
  839. /package/dist/{geneExpression-2OPFWV2K.js.map → geneExpression-P2ERCRXO.js.map} +0 -0
  840. /package/dist/{geneExpression-2BWWGYL4.js.map → geneExpression-QGPVFAN4.js.map} +0 -0
  841. /package/dist/{geneExpression.unit.spec-G7BSHJQT.js.map → geneExpression.unit.spec-6BQBM6VL.js.map} +0 -0
  842. /package/dist/{geneORA-S3KQMBYL.js.map → geneORA-XIMJP665.js.map} +0 -0
  843. /package/dist/{geneRanking-UZ36XAL7.js.map → geneRanking-AJH5G22J.js.map} +0 -0
  844. /package/dist/{geneVariant-OOZ2SBXO.js.map → geneVariant-AUUZ7S2B.js.map} +0 -0
  845. /package/dist/{geneVariant-ZHNVEKQ6.js.map → geneVariant-H6BGRRON.js.map} +0 -0
  846. /package/dist/{geneVariant.integration.spec-2C7EWKEV.js.map → geneVariant.integration.spec-FRCH6VI4.js.map} +0 -0
  847. /package/dist/{genefusion.ui-ASICJNII.js.map → genefusion.ui-AAJ37VFA.js.map} +0 -0
  848. /package/dist/{geneset-SNM4M6UM.js.map → geneset-5ARBBUYH.js.map} +0 -0
  849. /package/dist/{genomeBrowser.spec-DJIRW2X7.js.map → genomeBrowser.spec-RV7YBSMZ.js.map} +0 -0
  850. /package/dist/{gsea-SPTQJW67.js.map → gsea-XUMCVLFK.js.map} +0 -0
  851. /package/dist/{hierCluster-KDE5SMYP.js.map → hierCluster-HXOTNMC5.js.map} +0 -0
  852. /package/dist/{hierCluster-XG4YLVL3.js.map → hierCluster-PEDY7OTZ.js.map} +0 -0
  853. /package/dist/{hierCluster.config-VNEEJCKJ.js.map → hierCluster.config-RKYCGNWW.js.map} +0 -0
  854. /package/dist/{hierCluster.integration.spec-SSDN7LSH.js.map → hierCluster.integration.spec-YKMAT7UU.js.map} +0 -0
  855. /package/dist/{hierCluster.interactivity-DKBSJ644.js.map → hierCluster.interactivity-LPTHVWHR.js.map} +0 -0
  856. /package/dist/{hierCluster.renderers-OG6LZAT7.js.map → hierCluster.renderers-4XWKHCNW.js.map} +0 -0
  857. /package/dist/{imagePlot-M5JSHEY4.js.map → imagePlot-3DF7ZH3U.js.map} +0 -0
  858. /package/dist/{importPlot-YH7ZY6RJ.js.map → importPlot-N74SV3TL.js.map} +0 -0
  859. /package/dist/{isoformExpression-EV27MKYZ.js.map → isoformExpression-FU7Y4OGU.js.map} +0 -0
  860. /package/dist/{isoformExpression.unit.spec-7T2GOHH3.js.map → isoformExpression.unit.spec-BLQDKV37.js.map} +0 -0
  861. /package/dist/{launch.adhoc-NOISOX5E.js.map → launch.adhoc-Y35FZV6H.js.map} +0 -0
  862. /package/dist/{legacyDataset-SWJCAWIR.js.map → legacyDataset-TNIIJABK.js.map} +0 -0
  863. /package/dist/{lollipop-LQCQBTSX.js.map → lollipop-DU37Q5E2.js.map} +0 -0
  864. /package/dist/{maf-U237OWZ3.js.map → maf-NRLSNDOT.js.map} +0 -0
  865. /package/dist/{maftimeline-NLZLMHT2.js.map → maftimeline-GRXGOOSJ.js.map} +0 -0
  866. /package/dist/{matrix-DZJXYRYN.js.map → matrix-G3BULZ7Y.js.map} +0 -0
  867. /package/dist/{matrix-Y5345QQG.js.map → matrix-TCTX26A4.js.map} +0 -0
  868. /package/dist/{matrix.cells-PT7S74QP.js.map → matrix.cells-ED6RS5EC.js.map} +0 -0
  869. /package/dist/{matrix.config-2ORCUWKX.js.map → matrix.config-QHO2YNOT.js.map} +0 -0
  870. /package/dist/{matrix.data-C6VPQJJ4.js.map → matrix.data-KQFMXWRX.js.map} +0 -0
  871. /package/dist/{matrix.groups-CEOCG2CT.js.map → matrix.groups-RE74EFLY.js.map} +0 -0
  872. /package/dist/{matrix.integration.spec-U4B3JB6N.js.map → matrix.integration.spec-Y4FCZ2Q2.js.map} +0 -0
  873. /package/dist/{matrix.interactivity-GFLIFIER.js.map → matrix.interactivity-3DW5WAM3.js.map} +0 -0
  874. /package/dist/{matrix.layout-DOVDHTDX.js.map → matrix.layout-W57D765I.js.map} +0 -0
  875. /package/dist/{matrix.legend-JE4ZSLP7.js.map → matrix.legend-ZST44PIB.js.map} +0 -0
  876. /package/dist/{matrix.renderers-GPUJQ7KF.js.map → matrix.renderers-NFRKXO7Y.js.map} +0 -0
  877. /package/dist/{matrix.serieses-REE4DCSR.js.map → matrix.serieses-6ZKTFVWY.js.map} +0 -0
  878. /package/dist/{matrix.sort-VD5URUWY.js.map → matrix.sort-2UE47IOC.js.map} +0 -0
  879. /package/dist/{matrix.sort.unit.spec-4IOFVHJN.js.map → matrix.sort.unit.spec-5CMWEXPE.js.map} +0 -0
  880. /package/dist/{matrix.sorterUi-VQYY6KBK.js.map → matrix.sorterUi-WC2YX7S7.js.map} +0 -0
  881. /package/dist/{matrix.sorterUi.unit.spec-V5O2EJBX.js.map → matrix.sorterUi.unit.spec-Y2HXWHJN.js.map} +0 -0
  882. /package/dist/{mavb-SQDA3B2B.js.map → mavb-BI4XKI5P.js.map} +0 -0
  883. /package/dist/{mds.fimo-ZJSEPLD7.js.map → mds.fimo-UJYESPNC.js.map} +0 -0
  884. /package/dist/{mds.samplescatterplot-Y5V73GOY.js.map → mds.samplescatterplot-JKU5B4QR.js.map} +0 -0
  885. /package/dist/{mds.survivalplot-CZBRMHYN.js.map → mds.survivalplot-OP7Y4D3L.js.map} +0 -0
  886. /package/dist/{numericDictTermCluster-TFXBBUVI.js.map → numericDictTermCluster-DRIEJJSP.js.map} +0 -0
  887. /package/dist/{oncomatrix-ZILACPPI.js.map → oncomatrix-A3IE47HV.js.map} +0 -0
  888. /package/dist/{oncomatrix.spec-RLIVVVD6.js.map → oncomatrix.spec-TDWB2ROF.js.map} +0 -0
  889. /package/dist/{plot.2dvaf-BNRZPIKU.js.map → plot.2dvaf-XY34TDSM.js.map} +0 -0
  890. /package/dist/{plot.app-NRUARQCN.js.map → plot.app-WRCBLYGO.js.map} +0 -0
  891. /package/dist/{plot.barplot-342AYQC7.js.map → plot.barplot-RXGOUNHM.js.map} +0 -0
  892. /package/dist/{plot.boxplot-OHEJDPTW.js.map → plot.boxplot-GBZGSS3D.js.map} +0 -0
  893. /package/dist/{plot.brainImaging-KV72PAON.js.map → plot.brainImaging-DYPKMNHL.js.map} +0 -0
  894. /package/dist/{plot.disco-OUE4RFHL.js.map → plot.disco-5K2SCKJ4.js.map} +0 -0
  895. /package/dist/{plot.dzi-T3GPUH36.js.map → plot.dzi-THJIFHIS.js.map} +0 -0
  896. /package/dist/{plot.ssgq-WJHGMXW5.js.map → plot.ssgq-FSIUIV3A.js.map} +0 -0
  897. /package/dist/{plot.vaf2cov-NGD5PCV4.js.map → plot.vaf2cov-HP6KEBVJ.js.map} +0 -0
  898. /package/dist/{plot.wsi-2MU5BDG3.js.map → plot.wsi-MR6JMOXW.js.map} +0 -0
  899. /package/dist/{profilePlot-OMVO3K4H.js.map → profilePlot-J2C35OEY.js.map} +0 -0
  900. /package/dist/{qualitative-MEYBRUC6.js.map → qualitative-N7S2JHZM.js.map} +0 -0
  901. /package/dist/{regression-ZPDPLI6G.js.map → regression-PBGAMZAV.js.map} +0 -0
  902. /package/dist/{regression.inputs-QOSBAGL6.js.map → regression.inputs-54E5YKI4.js.map} +0 -0
  903. /package/dist/{regression.inputs.term-HMUMPY7X.js.map → regression.inputs.term-52MBTMVM.js.map} +0 -0
  904. /package/dist/{regression.inputs.values.table-VMCTZHLG.js.map → regression.inputs.values.table-F3FOAYFV.js.map} +0 -0
  905. /package/dist/{regression.integration.spec-RP74JTAA.js.map → regression.integration.spec-M4RPJUE4.js.map} +0 -0
  906. /package/dist/{regression.results-5XC6M67C.js.map → regression.results-JOK6I2ZD.js.map} +0 -0
  907. /package/dist/{regression.spec-EZYM24J7.js.map → regression.spec-O4HZB2HQ.js.map} +0 -0
  908. /package/dist/{report-ZOVQCOGQ.js.map → report-BDDTM7SV.js.map} +0 -0
  909. /package/dist/{sampleScatter.spec-CD52FEOC.js.map → sampleScatter.spec-272GLYEK.js.map} +0 -0
  910. /package/dist/{sampleView-SVTLSWRG.js.map → sampleView-E6OHEEP4.js.map} +0 -0
  911. /package/dist/{samplelst-HXF5POJD.js.map → samplelst-3LNF3DBG.js.map} +0 -0
  912. /package/dist/{samplematrix-NYDAH74I.js.map → samplematrix-HL445X7I.js.map} +0 -0
  913. /package/dist/{sc-JIDT4W4K.js.map → sc-4LELHVIS.js.map} +0 -0
  914. /package/dist/{selectGenomeWithTklst-OSB7B6L3.js.map → selectGenomeWithTklst-5LQGT4Z7.js.map} +0 -0
  915. /package/dist/{singleCellCellType-3BH7LWQ6.js.map → singleCellCellType-T3ZT64EK.js.map} +0 -0
  916. /package/dist/{singleCellCellType.unit.spec-RU4RJXFF.js.map → singleCellCellType.unit.spec-AE4IAHOF.js.map} +0 -0
  917. /package/dist/{singleCellGeneExpression-3UA4YER7.js.map → singleCellGeneExpression-SRJXSDEB.js.map} +0 -0
  918. /package/dist/{singleCellGeneExpression.unit.spec-4ZTBG37H.js.map → singleCellGeneExpression.unit.spec-EPL73UUO.js.map} +0 -0
  919. /package/dist/{singleCellPlot-ZUAWK5RE.js.map → singleCellPlot-P2BHFTYZ.js.map} +0 -0
  920. /package/dist/{singlecell-RO3BL5OO.js.map → singlecell-32SSD7VN.js.map} +0 -0
  921. /package/dist/{singlecell-BGJZB7MF.js.map → singlecell-7KRD5DP7.js.map} +0 -0
  922. /package/dist/{snp-HD7VQKBR.js.map → snp-LE5R377N.js.map} +0 -0
  923. /package/dist/{snp.unit.spec-ISXCLMWW.js.map → snp.unit.spec-UY6KQ5NJ.js.map} +0 -0
  924. /package/dist/{snplocus-IL5Z4XWV.js.map → snplocus-CP34ABUJ.js.map} +0 -0
  925. /package/dist/{spliceevent.a53ss.diagram-LLJSPV7M.js.map → spliceevent.a53ss.diagram-JWLWQDNJ.js.map} +0 -0
  926. /package/dist/{spliceevent.exonskip.diagram-LAOIOIST.js.map → spliceevent.exonskip.diagram-C5526P7P.js.map} +0 -0
  927. /package/dist/{spliceevent.noeventdiagram-MVA7Q3HT.js.map → spliceevent.noeventdiagram-352M63YB.js.map} +0 -0
  928. /package/dist/{ssGSEA-7T6S3DSE.js.map → ssGSEA-BFTCECV3.js.map} +0 -0
  929. /package/dist/{ssGSEA.unit.spec-XJ3W4NWX.js.map → ssGSEA.unit.spec-4OUCKRDQ.js.map} +0 -0
  930. /package/dist/{summarizeCnvGeneexp-RRP6JUV6.js.map → summarizeCnvGeneexp-Y3AWFIZA.js.map} +0 -0
  931. /package/dist/{summarizeGeneexpSurvival-AFLHDD6Q.js.map → summarizeGeneexpSurvival-U5JSPG22.js.map} +0 -0
  932. /package/dist/{summarizeMutationCnv-NABUYHMX.js.map → summarizeMutationCnv-KCOVQEBC.js.map} +0 -0
  933. /package/dist/{summarizeMutationDiagnosis-2LQ7JU3K.js.map → summarizeMutationDiagnosis-EQXEQABW.js.map} +0 -0
  934. /package/dist/{summarizeMutationSurvival-3WBT5TXG.js.map → summarizeMutationSurvival-4VGLG4SC.js.map} +0 -0
  935. /package/dist/{summary-FRDKOFXW.js.map → summary-DXYCBNI4.js.map} +0 -0
  936. /package/dist/{summary.integration.spec-ZLRIA7G2.js.map → summary.integration.spec-MZTJISLP.js.map} +0 -0
  937. /package/dist/{summaryInput-4JO6MHP4.js.map → summaryInput-5Z3XVIL6.js.map} +0 -0
  938. /package/dist/{sunburst-DRCVSC2X.js.map → sunburst-WVSQJYP2.js.map} +0 -0
  939. /package/dist/{survival-IF5NI3A6.js.map → survival-3R3J2JBE.js.map} +0 -0
  940. /package/dist/{survival-AK75COPY.js.map → survival-XQWFVGCJ.js.map} +0 -0
  941. /package/dist/{survival.integration.spec-7IWBTPJG.js.map → survival.integration.spec-EBDPIBYM.js.map} +0 -0
  942. /package/dist/{svgraph-QBDF2SLB.js.map → svgraph-SY2HVMYL.js.map} +0 -0
  943. /package/dist/{svmr-O4GJJUT2.js.map → svmr-TIIMFKG7.js.map} +0 -0
  944. /package/dist/{table-FQAIXKLE.js.map → table-5RFTXIQL.js.map} +0 -0
  945. /package/dist/{termCollection-ZO5PZ7E3.js.map → termCollection-23QXTZDN.js.map} +0 -0
  946. /package/dist/{termCollection-GMDDL3L7.js.map → termCollection-7KXABWVW.js.map} +0 -0
  947. /package/dist/{termCollection.unit.spec-5JBCTXHX.js.map → termCollection.unit.spec-4AN2Z4PQ.js.map} +0 -0
  948. /package/dist/{tk-GJX23IV7.js.map → tk-WW6PJGPQ.js.map} +0 -0
  949. /package/dist/{tp.ui-T7FVMTGQ.js.map → tp.ui-S5PO3MPH.js.map} +0 -0
  950. /package/dist/{tvs.dt-X7L7NSU6.js.map → tvs.dt-O7LUM5TK.js.map} +0 -0
  951. /package/dist/{tvs.dtcnv.categorical-73G2V6CH.js.map → tvs.dtcnv.categorical-2OUFOD3W.js.map} +0 -0
  952. /package/dist/{tvs.dtcnv.continuous-DWFJL3X7.js.map → tvs.dtcnv.continuous-NOOUY5SZ.js.map} +0 -0
  953. /package/dist/{tvs.dtfusion-HQADHCSV.js.map → tvs.dtfusion-KXQMP3UF.js.map} +0 -0
  954. /package/dist/{tvs.dtsnvindel-PY5OBMGW.js.map → tvs.dtsnvindel-PWHFTWZU.js.map} +0 -0
  955. /package/dist/{tvs.dtsv-OTBEEWSW.js.map → tvs.dtsv-25FLS572.js.map} +0 -0
  956. /package/dist/{tvs.numeric-WGDHEBJV.js.map → tvs.numeric-KYAU5OV3.js.map} +0 -0
  957. /package/dist/{tvs.samplelst-LCXSU5MG.js.map → tvs.samplelst-FLXNJFIV.js.map} +0 -0
  958. /package/dist/{tvs.termCollection-L527XN4X.js.map → tvs.termCollection-PSVOMJE4.js.map} +0 -0
  959. /package/dist/{violin-6VKRUQV3.js.map → violin-SWMEFWRA.js.map} +0 -0
  960. /package/dist/{violin.integration.spec-RJATDLQH.js.map → violin.integration.spec-6EQ6GC2N.js.map} +0 -0
  961. /package/dist/{violin.interactivity-SKF5H7MN.js.map → violin.interactivity-WBIWPLSM.js.map} +0 -0
  962. /package/dist/{violin.renderer-GB4TPX3B.js.map → violin.renderer-3WARZUOH.js.map} +0 -0
  963. /package/dist/{vocabulary-D3W44IWE.js.map → vocabulary-WLHYHDX7.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../plots/gb/model/Model.ts", "../plots/gb/interactions/Interactions.ts", "../plots/gb/view/TabsRenderer.ts", "../plots/gb/view/GeneSearchRenderer.ts", "../plots/gb/view/View.ts", "../plots/gb/GB.ts"],
4
+ "sourcesContent": ["import { dofetch3 } from '#common/dofetch'\n\nexport class Model {\n\tstate: any\n\tapp: any\n\tconstructor(state, app) {\n\t\tthis.state = state\n\t\tthis.app = app\n\t}\n\n\tasync preComputeData() {\n\t\t// precompute variant data that will be displayed on track\n\n\t\tif (\n\t\t\t!this.state.config.geneSearchResult ||\n\t\t\t!this.state.config.snvindel?.shown ||\n\t\t\t!this.state.config.snvindel?.details\n\t\t)\n\t\t\treturn\n\n\t\t// state.config.snvindel.details{} contains analysis details, cohorts, and compute methods\n\t\t// send to backend to compute and get results back\n\n\t\tconst body = {\n\t\t\tgenome: this.app.opts.state.vocab.genome,\n\t\t\tdslabel: this.app.opts.state.vocab.dslabel,\n\t\t\tfor: 'mds3variantData',\n\t\t\tchr: this.state.config.geneSearchResult.chr,\n\t\t\tstart: this.state.config.geneSearchResult.start,\n\t\t\tstop: this.state.config.geneSearchResult.stop,\n\t\t\tdetails: this.state.config.snvindel.details,\n\t\t\tfilter: this.state.filter,\n\t\t\tfilter0: this.state.filter0,\n\t\t\tvariantFilter: this.state.config.variantFilter?.filter\n\t\t}\n\n\t\t// using dofetch prevents the app from working with custom dataset; may change to vocab method later\n\n\t\tconst data = await dofetch3('termdb', { body })\n\t\tif (data.error) throw data.error\n\n\t\treturn data\n\t}\n}\n", "import type { MassAppApi } from '#mass/types/mass'\nimport { getNormalRoot } from '#filter'\n\nexport class Interactions {\n\tapp: MassAppApi\n\tdom: any\n\tid: string\n\tconstructor(app: MassAppApi, dom: any, id: string) {\n\t\tthis.app = app\n\t\tthis.dom = dom\n\t\tthis.id = id\n\t}\n\n\t// using arrow function to bind \"this\" to the Interactions class\n\t// otherwise \"this\" can refer to the Block class\n\tonCoordinateChange = rglst => {\n\t\tthis.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: this.id,\n\t\t\tconfig: { geneSearchResult: { chr: rglst[0].chr, start: rglst[0].start, stop: rglst[0].stop } }\n\t\t})\n\t}\n\n\tonGeneSearch = (result, blockIsProteinMode) => {\n\t\tthis.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: this.id,\n\t\t\tconfig: {\n\t\t\t\tgeneSearchResult: result,\n\t\t\t\tblockIsProteinMode\n\t\t\t}\n\t\t})\n\t}\n\n\t// copied from \"GB.ts\", should try to inherit it instead\n\tgetState(appState) {\n\t\tconst config = appState.plots.find(p => p.id === this.id)\n\t\tif (!config) throw `No plot with id='${this.id}' found`\n\t\treturn {\n\t\t\tconfig,\n\t\t\tfilter: getNormalRoot(appState.termfilter.filter),\n\t\t\tvocab: appState.vocab\n\t\t}\n\t}\n\n\tmaySaveTrackUpdatesToState = blockInstance => {\n\t\t/* following changes will be saved in state:\n\t\t- when a mds3 subtk is created/updated, its tk.filterObj should be saved to state so it can be recovered from session\n\t\t- a facet track is removed by user via block ui */\n\t\tif (!blockInstance) return\n\t\t// since maySaveTrackUpdatesToState() is used as callback in block.js,\n\t\t// this.state.config will become stale; therefore need to regenerate\n\t\t// live plot state\n\t\tconst state = this.getState(this.app.getState())\n\t\tconst config = structuredClone(state.config)\n\t\tconfig.subMds3Tks = []\n\t\tfor (const t of blockInstance.tklst) {\n\t\t\tif (t.type == 'mds3' && t.filterObj) {\n\t\t\t\tconst mclassHiddenValues = t.legend?.mclass?.hiddenvalues\n\t\t\t\tif (!t.subtk) {\n\t\t\t\t\t// \"main\" track\n\t\t\t\t\tif (mclassHiddenValues) {\n\t\t\t\t\t\t// track has hidden mclass values, store in config root\n\t\t\t\t\t\tconfig.mclassHiddenValues = [...mclassHiddenValues]\n\t\t\t\t\t}\n\t\t\t\t\t// do not add this track to subMds3Tks[], as it would cause an issue of auto-creating unwanted subtk on global filter change\n\t\t\t\t\tcontinue\n\t\t\t\t} else {\n\t\t\t\t\t// sub track\n\t\t\t\t\tconst subtk: any = { filterObj: t.filterObj }\n\t\t\t\t\tif (mclassHiddenValues) {\n\t\t\t\t\t\t// track has hidden mclass values, store in subtk obj\n\t\t\t\t\t\tsubtk.mclassHiddenValues = [...mclassHiddenValues]\n\t\t\t\t\t}\n\t\t\t\t\tconfig.subMds3Tks.push(subtk)\n\t\t\t\t\t// filter0?\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tlet facetActiveTracksChanged = false\n\t\tif (config.trackLst?.activeTracks && config.trackLst.facets) {\n\t\t\t// collect names of all facet tracks (across all facet tables)\n\t\t\tconst facetTrackNames = new Set<string>()\n\t\t\tfor (const f of config.trackLst.facets) {\n\t\t\t\tfor (const t of f.tracks) facetTrackNames.add(t.name)\n\t\t\t}\n\t\t\t// active facet tracks are inuse; if user deletes such tracks from block ui, remove from activeTracks\n\t\t\tconst newLst = config.trackLst.activeTracks.filter(n => blockInstance.tklst.find(i => i.name == n))\n\t\t\t// if user re-adds a facet track from block ui (e.g. block.tk.menu), add it back to activeTracks\n\t\t\tfor (const t of blockInstance.tklst) {\n\t\t\t\tif (t.name && facetTrackNames.has(t.name) && !newLst.includes(t.name)) {\n\t\t\t\t\tnewLst.push(t.name)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (\n\t\t\t\tnewLst.length != config.trackLst.activeTracks.length ||\n\t\t\t\tnewLst.some(n => !config.trackLst.activeTracks.includes(n))\n\t\t\t) {\n\t\t\t\tfacetActiveTracksChanged = true\n\t\t\t}\n\t\t\tconfig.trackLst.activeTracks = newLst\n\t\t}\n\t\tif (facetActiveTracksChanged) {\n\t\t\t// a facet track was added or removed via block ui (e.g. block.tk.menu);\n\t\t\t// must dispatch so the facet table ui re-renders to reflect the change\n\t\t\tthis.app.dispatch({\n\t\t\t\ttype: 'plot_edit',\n\t\t\t\tid: this.id,\n\t\t\t\tconfig\n\t\t\t})\n\t\t} else {\n\t\t\tthis.app.save({\n\t\t\t\ttype: 'plot_edit',\n\t\t\t\tid: this.id,\n\t\t\t\tconfig\n\t\t\t})\n\t\t}\n\t}\n\n\tlaunchFacet = config => {\n\t\tthis.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: this.id,\n\t\t\tconfig\n\t\t})\n\t}\n\n\tlaunchVariantTrack = toDisplay => {\n\t\tthis.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: this.id,\n\t\t\tconfig: { snvindel: { shown: toDisplay } }\n\t\t})\n\t}\n\n\tlaunchLdTrack = tracks => {\n\t\tthis.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: this.id,\n\t\t\tconfig: { ld: { tracks } }\n\t\t})\n\t}\n\n\tlaunchGroupsFilter = groups => {\n\t\tthis.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: this.id,\n\t\t\tconfig: { snvindel: { details: { groups } } }\n\t\t})\n\t}\n\n\tlaunchSnvIndelDetails = details => {\n\t\tthis.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: this.id,\n\t\t\tconfig: { snvindel: { details } }\n\t\t})\n\t}\n\n\tlaunchVariantFilter = filter => {\n\t\tthis.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: this.id,\n\t\t\tconfig: { variantFilter: { filter } }\n\t\t})\n\t}\n}\n\nexport function mayUpdateGroupTestMethodsIdx(state, d) {\n\tif (d.groups.length != 2) return // not two groups, no need to update test method\n\t// depending on types of two groups, may need to update test method\n\tconst [g1, g2] = d.groups\n\tif (g1.type == 'info' || g2.type == 'info' || (g1.type == 'population' && g2.type == 'population')) {\n\t\t// if any group is INFO, or both are population, can only allow value difference and not fisher test\n\t\tconst i = state.config.snvindel.details.groupTestMethods.findIndex(i => i.name == 'Allele frequency difference')\n\t\tif (i == -1) throw 'Allele frequency difference not found'\n\t\td.groupTestMethodsIdx = i\n\t} else {\n\t\t// otherwise, do not change existing method idx\n\t}\n}\n", "import { Tabs, make_one_checkbox, renderTable } from '#dom'\nimport { filterInit } from '#filter'\nimport { mayUpdateGroupTestMethodsIdx } from '../interactions/Interactions.ts'\nimport { appInit } from '#termdb/app'\n\nexport class TabsRenderer {\n\tstate: any\n\tdom: any\n\topts: any\n\tinteractions: any\n\ttabs: any\n\tfilterUI: any\n\tconstructor(state, dom, opts, interactions) {\n\t\tthis.state = state\n\t\tthis.dom = dom\n\t\tthis.opts = opts\n\t\tthis.interactions = interactions\n\t\tthis.filterUI = {}\n\t}\n\n\tasync main() {\n\t\t// Preserve the currently active tab label before clearing\n\t\tlet previousActiveTabLabel: string | null = null\n\t\tconst existingActiveButton = this.dom.tabsDiv.select('button.sjpp-active')\n\t\tif (!existingActiveButton.empty()) {\n\t\t\tpreviousActiveTabLabel = existingActiveButton.datum()?.label ?? null\n\t\t}\n\n\t\tthis.dom.tabsDiv.selectAll('*').remove()\n\t\tthis.getTabs()\n\n\t\t// Restore the active tab if it still exists in the new tabs array\n\t\tif (previousActiveTabLabel) {\n\t\t\tconst matchingTab = this.tabs.find(tab => tab.label === previousActiveTabLabel)\n\t\t\tif (matchingTab) {\n\t\t\t\t// Clear active state from all tabs first\n\t\t\t\tthis.tabs.forEach(tab => (tab.active = false))\n\t\t\t\t// Set the preserved tab as active\n\t\t\t\tmatchingTab.active = true\n\t\t\t}\n\t\t}\n\n\t\tawait this.mayRenderTabs()\n\t}\n\n\tgetTabs() {\n\t\tconst tabs: any[] = []\n\t\t/* based on ds configuration and data/query type availability, \n get list of tabs corresponding to different functionalities of the genome browser\n due to constrain of how tab works, must generate tab array first, call `new Tabs` to initiate holder for each tab\n then render contents into each holder for each tab\n thus has to duplicate the logic for computing tabs\n */\n\n\t\tif (this.state.config.trackLst?.facets) {\n\t\t\t// one tab for each facet table\n\t\t\t// quick fix to hardcode showing facet table as first tab. allow customization later\n\t\t\tconst activeTracks = this.state.config.trackLst.activeTracks\n\t\t\tfor (const facet of this.state.config.trackLst.facets) {\n\t\t\t\tconst shown = facet.tracks.some(t => activeTracks.includes(t.name))\n\t\t\t\ttabs.push({ label: facet.name || 'Facet Table', active: shown })\n\t\t\t}\n\t\t}\n\n\t\tif (this.state.config.snvindel) {\n\t\t\tconst shown = this.state.config.snvindel.shown\n\t\t\t// has snvindel. some logic to decide if show tab for it\n\t\t\tif (this.state.config.snvindel.details) {\n\t\t\t\t// has details for data precomputing, must show tab in order to generate contents\n\t\t\t\ttabs.push({ label: 'Variant Values', active: shown })\n\n\t\t\t\tif (this.state.config.variantFilter) {\n\t\t\t\t\t// for now, this filter only works with snvindel.details\n\t\t\t\t\ttabs.push({ label: 'Variant Filter' })\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// no computing detail.\n\t\t\t\tif (this.state.config.trackLst) {\n\t\t\t\t\t// also there is trackLst. in order *not to show trackLst tab alone*, also show snvindel tab and allow to toggle mds3 tk on/off\n\t\t\t\t\ttabs.push({ label: 'Variants', active: shown })\n\t\t\t\t} else {\n\t\t\t\t\t// do not add tab, to avoid showing a lone snvindel tab\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (this.state.config.ld) {\n\t\t\tconst shown = this.state.config.ld.tracks.some(t => t.shown)\n\t\t\ttabs.push({ label: 'LD Map', active: shown })\n\t\t}\n\t\tthis.tabs = tabs\n\t}\n\n\tasync mayRenderTabs() {\n\t\tconst tabs = this.tabs\n\t\tif (!tabs?.length) return\n\t\t// has some tabs! initiate the tab ui, then at <div> of each tab, render contents\n\t\tconst toggles = new Tabs({\n\t\t\tholder: this.dom.tabsDiv.append('div').style('border-bottom', 'solid 1px #ccc').style('padding-bottom', '20px'),\n\t\t\ttabs,\n\t\t\thideOnDblClick: true\n\t\t})\n\t\ttoggles.main()\n\n\t\t////////////////////////////////////\n\t\t//\n\t\t// must repeat tab-computing logic in exact order above!! otherwise out of sync\n\t\t// after filling contents for each tab, advance index value of tabsIdx\n\t\t//\n\t\t////////////////////////////////////\n\t\tlet tabsIdx = 0\n\n\t\tif (this.state.config.trackLst?.facets) {\n\t\t\t// (above) quick fix to hardcode showing facet table as first tab. allow customization later\n\t\t\tfor (const facet of this.state.config.trackLst.facets) {\n\t\t\t\tconst div = tabs[tabsIdx++].contentHolder.append('div')\n\t\t\t\tthis.renderFacetTable(facet, div)\n\t\t\t}\n\t\t}\n\n\t\tif (this.state.config.snvindel) {\n\t\t\tif (this.state.config.snvindel.details) {\n\t\t\t\tconst div = tabs[tabsIdx++].contentHolder.append('div')\n\t\t\t\t// hardcode to 2 groups used by this.state.config.snvindel.details.groups[]\n\t\t\t\tthis.dom.group1div = div.append('div').attr('class', 'sjpp-gb-group1')\n\t\t\t\tthis.dom.group2div = div.append('div').attr('class', 'sjpp-gb-group2')\n\t\t\t\tthis.dom.testMethodDiv = div.append('div').style('margin-top', '3px')\n\t\t\t\tawait this.mayRenderGroups()\n\n\t\t\t\tif (this.state.config.variantFilter) {\n\t\t\t\t\t// the whole holder has white-space=nowrap (likely from sjpp-output-sandbox-content)\n\t\t\t\t\t// must set white-space=normal to let INFO filter wrap and not to extend beyond holder\n\t\t\t\t\tthis.dom.variantFilterHolder = tabs[tabsIdx++].contentHolder.append('div').style('white-space', 'normal')\n\t\t\t\t\tthis.mayRenderVariantFilter()\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tif (this.state.config.trackLst) {\n\t\t\t\t\t// snvindel show/hide toggling\n\t\t\t\t\tconst div = tabs[tabsIdx++].contentHolder.append('div')\n\t\t\t\t\tmake_one_checkbox({\n\t\t\t\t\t\tlabeltext: 'Show variant track',\n\t\t\t\t\t\tchecked: this.state.config.snvindel.shown,\n\t\t\t\t\t\tholder: div,\n\t\t\t\t\t\tcallback: this.interactions.launchVariantTrack\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (this.state.config.ld) {\n\t\t\t/* tricky: duplicate ld.tracks[] and scope it here, to pass to dispatch\n somehow, this doesn't work for dispatch\n config: {\n ld: {\n tracks: {\n [i]: {shown}\n }\n }\n }\n */\n\t\t\tconst tracks = structuredClone(this.state.config.ld.tracks)\n\n\t\t\tconst div = tabs[tabsIdx++].contentHolder.append('div')\n\t\t\tdiv.append('div').text('Show/hide linkage disequilibrium map from an ancestry:').style('opacity', 0.5)\n\t\t\tfor (const [i, t] of tracks.entries()) {\n\t\t\t\tmake_one_checkbox({\n\t\t\t\t\tlabeltext: t.name,\n\t\t\t\t\tchecked: t.shown,\n\t\t\t\t\tholder: div,\n\t\t\t\t\tcallback: checked => {\n\t\t\t\t\t\ttracks[i].shown = checked\n\t\t\t\t\t\tthis.interactions.launchLdTrack(tracks)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\t}\n\n\trenderFacetTable(facet, div) {\n\t\t/* facet.tracks[] each is {name/assay/sample}\n layout a table with assay for columns, sample for rows, cells are tracks\n */\n\t\tconst assayset = new Set(),\n\t\t\tsampleset = new Set()\n\t\tfor (const t of facet.tracks) {\n\t\t\tif (t.assay) assayset.add(t.assay)\n\t\t\tif (t.sample) sampleset.add(t.sample)\n\t\t}\n\n\t\tconst sampleLst = [...sampleset]\n\t\tconst assayLst = [...assayset] // TODO facet hardcodes assay order\n\n\t\t// TODO click on row/column header to batch operate\n\n\t\tconst columns: any = [{ label: 'Sample' }] // TODO use ds sample type\n\t\tfor (const assay of assayLst) {\n\t\t\tcolumns.push({\n\t\t\t\tlabel: assay,\n\t\t\t\tfillCell: (td, si) => {\n\t\t\t\t\t// \"si\" index of sample/rows[]; find tracks belonging to this assay+sample combo\n\t\t\t\t\tconst tklst = facet.tracks.filter(i => i.assay == assay && i.sample == sampleLst[si])\n\t\t\t\t\tif (tklst.length == 0) return // no tracks for this combo\n\t\t\t\t\t// has track(s) for this combo; render <div> in table cell; click to launch tracks\n\t\t\t\t\t// Count how many tracks are currently shown\n\t\t\t\t\tconst shownCount = tklst.filter(tk => this.state.config.trackLst.activeTracks.includes(tk.name)).length\n\t\t\t\t\tconst displayText = shownCount ? `${shownCount}/${tklst.length}` : `${tklst.length}`\n\t\t\t\t\ttd.append('div')\n\t\t\t\t\t\t.attr('class', 'sja_clbtext')\n\t\t\t\t\t\t.style('text-align', 'center')\n\t\t\t\t\t\t.text(displayText)\n\t\t\t\t\t\t.on('click', event => {\n\t\t\t\t\t\t\tthis.clickFacetCell(event, tklst)\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t\tconst rows: any[] = []\n\t\tfor (const sample of sampleLst) {\n\t\t\t// 1st column is sample name\n\t\t\t// TODO may link sample to sampleview\n\t\t\tconst row: any[] = [{ value: sample }]\n\t\t\t// one blank cell for each assay\n\t\t\tfor (let i = 0; i < assayLst.length; i++) {\n\t\t\t\trow.push({})\n\t\t\t}\n\t\t\trows.push(row)\n\t\t}\n\t\trenderTable({\n\t\t\tcolumns,\n\t\t\trows,\n\t\t\tdiv\n\t\t})\n\t}\n\n\tclickFacetCell(event, tklst) {\n\t\tthis.dom.tip.clear().showunder(event.target)\n\t\tconst activeTracks = this.state.config.trackLst.activeTracks\n\t\tconst table = this.dom.tip.d.append('table').style('margin', '5px 5px 5px 2px')\n\t\tfor (const tk of tklst) {\n\t\t\tconst tr = table.append('tr')\n\t\t\tconst td1 = tr\n\t\t\t\t.append('td')\n\t\t\t\t.style('font-size', '.8em')\n\t\t\t\t.text(activeTracks.includes(tk.name) ? 'SHOWN' : '')\n\t\t\ttr.append('td')\n\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t.text(tk.name)\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tthis.dom.tip.hide()\n\t\t\t\t\tlet newActiveTracks, newRemoveTracks // default undefined to not remove any track\n\t\t\t\t\tif (activeTracks.includes(tk.name)) {\n\t\t\t\t\t\ttd1.text('')\n\t\t\t\t\t\tnewActiveTracks = structuredClone(activeTracks).filter(n => n != tk.name)\n\t\t\t\t\t\tnewRemoveTracks = [tk.name]\n\t\t\t\t\t} else {\n\t\t\t\t\t\ttd1.text('SHOWN')\n\t\t\t\t\t\tnewActiveTracks = structuredClone(activeTracks)\n\t\t\t\t\t\tnewActiveTracks.push(tk.name)\n\t\t\t\t\t}\n\t\t\t\t\tconst config = {\n\t\t\t\t\t\ttrackLst: {\n\t\t\t\t\t\t\tactiveTracks: newActiveTracks,\n\t\t\t\t\t\t\tremoveTracks: newRemoveTracks\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tthis.interactions.launchFacet(config)\n\t\t\t\t})\n\t\t}\n\t}\n\n\tasync mayRenderGroups() {\n\t\tconst groups = this.state.config.snvindel.details.groups\n\t\tif (!groups) return\n\n\t\t// is equipped with comparison groups, render group ui\n\t\tawait this.render1group(0)\n\t\tawait this.render1group(1)\n\n\t\tif (this.state.config.snvindel.details.groupTestMethods) {\n\t\t\t// render the test method\n\t\t\tthis.renderTestMethod()\n\t\t}\n\t}\n\n\tmayRenderVariantFilter() {\n\t\tif (this.state.config.variantFilter) {\n\t\t\tthis.dom.variantFilterHolder.selectAll('*').remove()\n\t\t\tfilterInit({\n\t\t\t\tjoinWith: this.state.config.variantFilter.opts.joinWith,\n\t\t\t\temptyLabel: '+Add Filter',\n\t\t\t\tholder: this.dom.variantFilterHolder,\n\t\t\t\tvocab: { terms: this.state.config.variantFilter.terms },\n\t\t\t\tcallback: filter => this.interactions.launchVariantFilter(filter)\n\t\t\t}).main(this.state.config.variantFilter.filter)\n\t\t}\n\t}\n\n\t/*\n\trender ui contents of one group, both arguments are provided to be convenient for ad-hoc update\n\n\tgroupIdx: array index of self.state.config.snvindel.details.groups[]\n\t\tdetermines which <div> to render to at self.dom.group1/2div\n\tgroup{}: element of same array\n\t*/\n\tasync render1group(groupIdx) {\n\t\tconst group = this.state.config.snvindel.details.groups[groupIdx]\n\t\tconst div = groupIdx == 0 ? this.dom.group1div : this.dom.group2div\n\n\t\tlet canReuse = false\n\t\tif (group?.type == 'filter' && this.filterUI[groupIdx]) {\n\t\t\t// will reuse an existing filterUI[${groupIdx}] and div\n\t\t\tcanReuse = true\n\t\t} else {\n\t\t\tdelete this.filterUI[groupIdx] // ok to delete even if not existing\n\t\t\tdiv.selectAll('*').remove()\n\t\t}\n\n\t\tif (!group) {\n\t\t\t// group does not exist in groups[] based on array index, e.g. when there's just 1 group and groups[1] is undefined\n\t\t\t// add a prompt in place of header button\n\t\t\tthis.makePrompt2addNewGroup(groupIdx, div)\n\t\t\treturn\n\t\t}\n\n\t\t// the group exists; first show the group header button\n\t\tif (!canReuse) this.makeGroupHeaderButton(groupIdx, div)\n\n\t\tif (group.type == 'info') return this.render1group_info(groupIdx, group, div)\n\t\tif (group.type == 'population') return this.render1group_population(groupIdx, group, div)\n\t\tif (group.type == 'filter') return await this.render1group_filter(groupIdx, group, div)\n\t\tthrow 'render1group: unknown group type'\n\t}\n\n\tmakePrompt2addNewGroup(groupIdx, div) {\n\t\t// the prompt <div> is created in group2div\n\t\tdiv\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.text('Create Group 2')\n\t\t\t.attr('class', 'sja_clbtext')\n\t\t\t.style('margin', '10px')\n\t\t\t.on('click', event => {\n\t\t\t\tthis.dom.tip.showunder(event.target).clear()\n\t\t\t\tthis.launchMenu_createGroup(groupIdx, this.dom.tip.d)\n\t\t\t})\n\t}\n\n\tmakeGroupHeaderButton(groupIdx, div) {\n\t\tdiv\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.text('Group ' + (groupIdx + 1))\n\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t.style('margin-right', '10px')\n\t\t\t.on('click', event => {\n\t\t\t\tthis.dom.tip.showunder(event.target).clear()\n\t\t\t\tif (groupIdx == 0) {\n\t\t\t\t\t// this is 1st group, directly launch menu to change group, but do not allow to delete\n\t\t\t\t\tthis.launchMenu_createGroup(0, this.dom.tip.d)\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tthis.dom.tip.d\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.text('Change')\n\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t.style('border-radius', '0px')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tthis.launchMenu_createGroup(1, this.dom.tip.clear().d)\n\t\t\t\t\t})\n\t\t\t\tthis.dom.tip.d\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.text('Delete')\n\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t.style('border-radius', '0px')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tthis.dom.tip.hide()\n\t\t\t\t\t\t/*\n\t\t\t\t\t\t// ui is not reactive\n\t\t\t\t\t\tdiv.selectAll('*').remove()\n\t\t\t\t\t\tmakePrompt2addNewGroup(self, 1, div)\n\t\t\t\t\t\t*/\n\n\t\t\t\t\t\tconst groups = [this.state.config.snvindel.details.groups[0]] // only keep first group\n\t\t\t\t\t\tthis.interactions.launchGroupsFilter(groups)\n\t\t\t\t\t})\n\t\t\t})\n\t}\n\n\trender1group_info(groupIdx, group, div) {\n\t\t// this group is an INFO field\n\t\tlet name = group.infoKey\n\t\tif (this.state.config.variantFilter?.terms) {\n\t\t\tconst f = this.state.config.variantFilter.terms.find(i => i.id == group.infoKey)\n\t\t\tif (f && f.name) name = f.name\n\t\t}\n\t\tdiv\n\t\t\t.append('span')\n\t\t\t.text(name)\n\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t.on('click', event => {\n\t\t\t\tif (this.state.config.variantFilter.terms.length <= 1) {\n\t\t\t\t\t// only 1, no other option to switch to\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\t// multiple options, allow to replace\n\t\t\t\tthis.dom.tip\n\t\t\t\t\t.clear()\n\t\t\t\t\t.showunder(event.target)\n\t\t\t\t\t.d.append('div')\n\t\t\t\t\t.text('Replace with:')\n\t\t\t\t\t.style('margin', '10px')\n\t\t\t\t\t.style('font-size', '.8em')\n\t\t\t\tfor (const f of this.state.config.variantFilter.terms) {\n\t\t\t\t\tif (f.type != 'integer' && f.type != 'float') continue // only allow numeric fields\n\t\t\t\t\tif (f.id == group.infoKey) continue // same one\n\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.text(f.name)\n\t\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\t/////////////////////////////////\n\t\t\t\t\t\t\t// create a new group using this info field\n\t\t\t\t\t\t\tthis.dom.tip.hide()\n\t\t\t\t\t\t\tconst groups = structuredClone(this.state.config.snvindel.details.groups)\n\t\t\t\t\t\t\tgroups[groupIdx].infoKey = f.id\n\t\t\t\t\t\t\tgroups[groupIdx].type = 'info'\n\t\t\t\t\t\t\tthis.interactions.launchGroupsFilter(groups)\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t})\n\t\tdiv\n\t\t\t.append('span')\n\t\t\t.text('PER-VARIANT NUMERICAL VALUES')\n\t\t\t.style('font-size', '.7em')\n\t\t\t.style('opacity', 0.6)\n\t\t\t.style('margin-left', '10px')\n\t}\n\n\trender1group_population(groupIdx, group, div) {\n\t\t// this group is a predefined population\n\t\tdiv\n\t\t\t.append('span')\n\t\t\t.text(group.label)\n\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t.on('click', event => {\n\t\t\t\tif (this.state.config.snvindel.populations.length <= 1) {\n\t\t\t\t\t// only 1, no other option to switch to\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\t// multiple options, allow to replace\n\t\t\t\tthis.dom.tip\n\t\t\t\t\t.clear()\n\t\t\t\t\t.showunder(event.target)\n\t\t\t\t\t.d.append('div')\n\t\t\t\t\t.text('Replace with:')\n\t\t\t\t\t.style('margin', '10px')\n\t\t\t\t\t.style('font-size', '.8em')\n\n\t\t\t\tfor (const p of this.state.config.snvindel.populations) {\n\t\t\t\t\tif (p.key == group.key) continue\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.text(p.label)\n\t\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\tthis.dom.tip.hide()\n\t\t\t\t\t\t\tconst groups = structuredClone(this.state.config.snvindel.details.groups)\n\t\t\t\t\t\t\tgroups[groupIdx] = structuredClone(p)\n\t\t\t\t\t\t\tgroups[groupIdx].type = 'population'\n\t\t\t\t\t\t\tthis.interactions.launchGroupsFilter(groups)\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t})\n\t\tdiv\n\t\t\t.append('span')\n\t\t\t.text(`POPULATION${group.adjust_race ? ', RACE ADJUSTED' : ''}`)\n\t\t\t.style('font-size', '.7em')\n\t\t\t.style('margin-left', '10px')\n\t\t\t.style('opacity', 0.6)\n\n\t\tif (this.state.config.snvindel.details.groups[groupIdx == 1 ? 0 : 1]?.type == 'filter') {\n\t\t\t/*\n\t\t\t!!poor fix!!\n\t\t\tonly render the text when the other group is \"filter\",\n\t\t\tso that when the other group is no longer type=filter, the admix text will disappear from this group\n\t\t\tthis is because self._partialData is *sticky* and is never deleted, due to the way parent passing it to child\n\t\t\tand assume that pop2average must be from comparison between 2 groups of filter-vs-population\n\t\t\te.g. when info-vs-population, despite the _partialData is still there, must not render it\n\t\t\t*/\n\t\t\tdiv\n\t\t\t\t.append('span')\n\t\t\t\t.attr('class', 'sja_clbtext')\n\t\t\t\t.attr('id', 'sjpp-gb-pop2avg')\n\t\t\t\t.style('display', 'none') // hidden for now, will display once pop2average data becomes available (see View.ts)\n\t\t\t\t.style('margin-left', '20px')\n\t\t\t\t.text(`Group ${groupIdx == 1 ? 1 : 2} average admixture:`)\n\t\t\t\t.on('click', event => {\n\t\t\t\t\tthis.dom.tip.clear().showunder(event.target).d.append('div').style('margin', '10px').style('width', '500px')\n\t\t\t\t\t\t.html(`These are average admixture coefficients based on current Group ${groupIdx == 1 ? 1 : 2} samples.\n\t\t\t\t\tThey are used to adjust variant allele counts of matching ancestries from <span class=sja_menuoption style=\"padding:2px 5px\">${\n\t\t\t\t\t\tgroup.label\n\t\t\t\t\t}</span>,\n\t\t\t\t\tso that the adjusted allele counts can be compared against Group ${groupIdx == 1 ? 1 : 2} allele counts.\n\t\t\t\t\tThis allows to account for ancestry composition difference between the two groups.\n\t\t\t\t\t`)\n\t\t\t\t})\n\t\t\t\t.append('span')\n\t\t\t\t.attr('id', 'sjpp-gb-pop2avg-values') // will fill with values once pop2average data becomes available (see View.ts)\n\t\t}\n\t}\n\n\tasync render1group_filter(groupIdx, group, div) {\n\t\t/*\n\t\tthis group is based on a termdb-filter\n\t\twhen initiating the filter ui, must join group's filter with mass global filter and submit the joined filter to main()\n\t\tthis allows tvs edit to show correct number of samples\n\t\t*/\n\t\tif (!this.filterUI[groupIdx]) {\n\t\t\tthis.filterUI[groupIdx] = await filterInit({\n\t\t\t\tholder: div,\n\t\t\t\tvocab: this.state.vocab,\n\t\t\t\temptyLabel: 'Entire cohort',\n\t\t\t\ttermdbConfig: this.opts.vocabApi.termdbConfig,\n\t\t\t\tcallback: f => {\n\t\t\t\t\tconst groups = JSON.parse(JSON.stringify(this.state.config.snvindel.details.groups))\n\t\t\t\t\tgroups[groupIdx].filter = f\n\t\t\t\t\tthis.interactions.launchGroupsFilter(groups)\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\n\t\tthis.filterUI[groupIdx].main(this.getJoinedFilter(group))\n\n\t\t// placeholder for sample count\n\t\tdiv\n\t\t\t.append('span')\n\t\t\t.attr('class', 'sjpp-gb-filter-count')\n\t\t\t.style('display', 'none')\n\t\t\t.style('margin-left', '10px')\n\t\t\t.style('opacity', 0.5)\n\t\t\t.style('font-size', '.9em')\n\t}\n\n\tgetJoinedFilter(group) {\n\t\t// clone the global filter; group filter will be joined into it\n\t\tconst joinedFilter = structuredClone(this.state.filter || { type: 'tvslst', in: true, join: '', lst: [] })\n\t\tconst gf = structuredClone(group.filter)\n\t\t// tag group filter for it to be rendered in filter ui\n\t\t// rest of state.filter will remain invisible\n\t\tgf.tag = 'filterUiRoot'\n\t\tjoinedFilter.lst.push(gf)\n\t\tjoinedFilter.join = 'and'\n\t\treturn joinedFilter\n\t}\n\n\t// show vertical toggle options: filter/population/info\n\t// when any is selected, create a new group object and set to snvindel.details.groups[groupIdx]\n\tlaunchMenu_createGroup(groupIdx, div) {\n\t\tconst opt: any = {\n\t\t\tholder: div.append('div').style('margin', '5px'),\n\t\t\ttabs: this.state.config.snvindel.details.groupTypes.map(i => {\n\t\t\t\treturn { label: i.name }\n\t\t\t}),\n\t\t\ttabsPosition: 'vertical',\n\t\t\tlinePosition: 'right'\n\t\t}\n\t\tnew Tabs(opt).main()\n\t\tfor (const [idx, groupType] of this.state.config.snvindel.details.groupTypes.entries()) {\n\t\t\t// { type:str, name:str }\n\t\t\tconst tab = opt.tabs[idx]\n\t\t\ttab.contentHolder.style('margin', '10px')\n\t\t\tif (groupType.type == 'info') {\n\t\t\t\tif (!this.state.config.variantFilter?.terms)\n\t\t\t\t\tthrow 'looking for snvindel info fields but self.state.config.variantFilter.terms[] missing'\n\t\t\t\tfor (const f of this.state.config.variantFilter.terms) {\n\t\t\t\t\tif (f.type != 'integer' && f.type != 'float') continue // only allow numeric fields\n\t\t\t\t\ttab.contentHolder\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.text(f.name)\n\t\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\t/////////////////////////////////\n\t\t\t\t\t\t\t// create a new group using this info field\n\t\t\t\t\t\t\tthis.dom.tip.hide()\n\t\t\t\t\t\t\tconst newGroup = {\n\t\t\t\t\t\t\t\ttype: 'info',\n\t\t\t\t\t\t\t\tinfoKey: f.id\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst details = this.makeNewDetail(newGroup, groupIdx)\n\t\t\t\t\t\t\tmayUpdateGroupTestMethodsIdx(this.state, details)\n\t\t\t\t\t\t\tthis.interactions.launchSnvIndelDetails(details)\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (groupType.type == 'population') {\n\t\t\t\tif (!this.state.config.snvindel.populations) throw 'state.config.snvindel.populations missing'\n\t\t\t\tfor (const p of this.state.config.snvindel.populations) {\n\t\t\t\t\t// {key,label, allowto_adjust_race, adjust_race}\n\t\t\t\t\ttab.contentHolder\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.text(p.label)\n\t\t\t\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\t/////////////////////////////////\n\t\t\t\t\t\t\t// create a new group using this population\n\t\t\t\t\t\t\tthis.dom.tip.hide()\n\t\t\t\t\t\t\tconst newGroup = {\n\t\t\t\t\t\t\t\ttype: 'population',\n\t\t\t\t\t\t\t\tkey: p.key,\n\t\t\t\t\t\t\t\tlabel: p.label,\n\t\t\t\t\t\t\t\tallowto_adjust_race: p.allowto_adjust_race,\n\t\t\t\t\t\t\t\tadjust_race: p.adjust_race\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst details = this.makeNewDetail(newGroup, groupIdx)\n\t\t\t\t\t\t\tmayUpdateGroupTestMethodsIdx(this.state, details)\n\t\t\t\t\t\t\tthis.interactions.launchSnvIndelDetails(details)\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tif (groupType.type == 'filter') {\n\t\t\t\tconst arg = {\n\t\t\t\t\tholder: tab.contentHolder,\n\t\t\t\t\tvocabApi: this.opts.vocabApi,\n\t\t\t\t\tstate: {\n\t\t\t\t\t\tactiveCohort: this.state.activeCohort,\n\t\t\t\t\t\ttermfilter: { filter: this.state.filter }\n\t\t\t\t\t},\n\t\t\t\t\ttree: {\n\t\t\t\t\t\tclick_term2select_tvs: tvs => {\n\t\t\t\t\t\t\t/////////////////////////////////\n\t\t\t\t\t\t\t// create a new group using this tvs\n\t\t\t\t\t\t\tthis.dom.tip.hide()\n\t\t\t\t\t\t\tconst newGroup = {\n\t\t\t\t\t\t\t\ttype: 'filter',\n\t\t\t\t\t\t\t\tfilter: {\n\t\t\t\t\t\t\t\t\tin: true,\n\t\t\t\t\t\t\t\t\tjoin: '',\n\t\t\t\t\t\t\t\t\ttype: 'tvslst',\n\t\t\t\t\t\t\t\t\tlst: [{ type: 'tvs', tvs }]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tconst details = this.makeNewDetail(newGroup, groupIdx)\n\t\t\t\t\t\t\tmayUpdateGroupTestMethodsIdx(this.state, details)\n\t\t\t\t\t\t\tthis.interactions.launchSnvIndelDetails(details)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tappInit(arg)\n\t\t\t\tcontinue\n\t\t\t}\n\t\t\tthrow 'unknown group type'\n\t\t}\n\t}\n\n\tmakeNewDetail(newGroup, groupIdx) {\n\t\tconst newDetail = {\n\t\t\tgroups: JSON.parse(JSON.stringify(this.state.config.snvindel.details.groups))\n\t\t}\n\t\tnewDetail.groups[groupIdx] = newGroup\n\t\treturn newDetail\n\t}\n\n\trenderTestMethod() {\n\t\tconst div = this.dom.testMethodDiv\n\t\tdiv.selectAll('*').remove()\n\n\t\tconst [g1, g2] = this.state.config.snvindel.details.groups\n\t\tif (!g2) {\n\t\t\t// only 1 group, do not show ui as test method is not configurable\n\t\t\treturn\n\t\t}\n\n\t\tdiv.append('span').text('TEST METHOD').style('font-size', '.8em').style('opacity', 0.6)\n\n\t\tif (g1.type != 'filter' && g2.type != 'filter') {\n\t\t\t// neither group is filter, test method can only be value diff and also not configurable\n\t\t\tdiv.append('span').style('padding-left', '10px').text('Value difference').style('opacity', 0.6)\n\t\t\treturn\n\t\t}\n\n\t\tconst select = div\n\t\t\t.append('select')\n\t\t\t.style('margin-left', '10px')\n\t\t\t.on('change', () => {\n\t\t\t\tconst details = { groupTestMethodsIdx: select.property('selectedIndex') }\n\t\t\t\tthis.interactions.launchSnvIndelDetails(details)\n\t\t\t})\n\t\tfor (const m of this.state.config.snvindel.details.groupTestMethods) {\n\t\t\tselect.append('option').text(m.name)\n\t\t}\n\t\tselect.property('selectedIndex', this.state.config.snvindel.details.groupTestMethodsIdx)\n\t}\n}\n", "import { addGeneSearchbox, Menu } from '#dom'\n\nexport class GeneSearchRenderer {\n\tstate: any\n\tholder: any\n\topts: any\n\tinteractions: any\n\tconstructor(state, holder, opts, interactions) {\n\t\tthis.state = state\n\t\tthis.holder = holder\n\t\tthis.opts = opts\n\t\tthis.interactions = interactions\n\t}\n\n\tmain() {\n\t\tthis.renderGeneSearch()\n\t}\n\n\trenderGeneSearch() {\n\t\tconst gbRestrictMode = this.opts.vocabApi.termdbConfig.queries.gbRestrictMode\n\t\tthis.holder.selectAll('*').remove()\n\t\tconst row = this.holder.append('div')\n\t\trow.append('span').html('Search')\n\t\tconst arg: any = {\n\t\t\ttip: new Menu({ padding: '0px' }),\n\t\t\tgenome: this.opts.genome,\n\t\t\trow,\n\t\t\tcallback: async () => {\n\t\t\t\t// found a hit {chr,start,stop,geneSymbol}\n\t\t\t\tif (result.geneSymbol && !gbRestrictMode) {\n\t\t\t\t\t// user found a gene and no restricted mode from ds, ask user if to use either protein/genomic mode\n\n\t\t\t\t\t// on repeated gene search, detect if btndiv is present, and remove, avoiding showing duplicate buttons\n\t\t\t\t\tthis.holder.select('.sjpp_gbmodebtndiv').remove()\n\t\t\t\t\t// create new div and buttons\n\t\t\t\t\tconst btndiv = this.holder.append('div').attr('class', 'sjpp_gbmodebtndiv').style('margin-top', '10px')\n\t\t\t\t\tbtndiv\n\t\t\t\t\t\t.append('button')\n\t\t\t\t\t\t.style('margin-right', '10px')\n\t\t\t\t\t\t.text('Protein view of ' + result.geneSymbol)\n\t\t\t\t\t\t.on('click', async () => {\n\t\t\t\t\t\t\tawait this.interactions.onGeneSearch(result, true)\n\t\t\t\t\t\t})\n\t\t\t\t\tbtndiv\n\t\t\t\t\t\t.append('button')\n\t\t\t\t\t\t.text('Genomic view of ' + result.geneSymbol)\n\t\t\t\t\t\t.on('click', async () => {\n\t\t\t\t\t\t\tawait this.interactions.onGeneSearch(result, false)\n\t\t\t\t\t\t})\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\t// only one possibility of gb mode and it can be auto determined\n\t\t\t\tawait this.interactions.onGeneSearch(result, gbRestrictMode == 'protein')\n\t\t\t}\n\t\t}\n\n\t\tswitch (gbRestrictMode) {\n\t\t\tcase undefined:\n\t\t\t\t// not set. allowed\n\t\t\t\tbreak\n\t\t\tcase 'genomic':\n\t\t\t\t// gb can only be block mode, add default coord to arg\n\t\t\t\targ.defaultCoord = this.opts.vocabApi.termdbConfig.queries.defaultCoord\n\t\t\t\tbreak\n\t\t\tcase 'protein':\n\t\t\t\t// gb can only be protein mode, only allow searching gene\n\t\t\t\targ.searchOnly = 'gene'\n\t\t\t\tbreak\n\t\t\tdefault:\n\t\t\t\tthrow 'unknown gbRestrictMode'\n\t\t}\n\n\t\tconst result = addGeneSearchbox(arg)\n\t}\n}\n", "import { first_genetrack_tolist } from '#common/1stGenetk'\nimport { filterJoin } from '#filter'\nimport { TabsRenderer } from './TabsRenderer.ts'\nimport { GeneSearchRenderer } from './GeneSearchRenderer.ts'\n\nexport class View {\n\tstate: any\n\tblockInstance: any\n\tdata: any\n\tdom: any\n\topts: any\n\tinteractions: any\n\tconstructor(state, blockInstance, data, dom, opts, interactions) {\n\t\tthis.state = state\n\t\tthis.blockInstance = blockInstance\n\t\tthis.data = data\n\t\tthis.dom = dom\n\t\tthis.opts = opts\n\t\tthis.interactions = interactions\n\t}\n\n\tasync main() {\n\t\tconst tabs = new TabsRenderer(this.state, this.dom, this.opts, this.interactions)\n\t\tawait tabs.main()\n\t\tconst geneSearch = new GeneSearchRenderer(this.state, this.dom.geneSearchDiv, this.opts, this.interactions)\n\t\tgeneSearch.main()\n\t\tif (this.state.config.geneSearchResult) {\n\t\t\t// valid gene search result\n\t\t\t// launch block\n\t\t\tthis.dom.geneSearchDiv.style('display', 'none')\n\t\t\tconst tklst = await this.generateTracks()\n\t\t\tawait this.launchBlockWithTracks(tklst)\n\t\t}\n\t}\n\n\tasync generateTracks() {\n\t\t// handle multiple possibilities of generating genome browser tracks\n\n\t\tconst tklst: any = [] // list of tracks to be shown in block\n\n\t\tif (this.state.config.snvindel?.shown) {\n\t\t\t// show snvindel-based mds3 tk\n\t\t\tif (this.data) {\n\t\t\t\t// variant data has been precomputed\n\t\t\t\t// TODO move computing logic to official mds3 tk and avoid tricky workaround using custom tk\n\t\t\t\tif (this.blockInstance) {\n\t\t\t\t\t// block already launched, update variant data on tk and rerender\n\t\t\t\t\tthis.updateCustomMds3tk()\n\t\t\t\t} else {\n\t\t\t\t\t// block not present, launch custom mds3 tk to display variant data\n\t\t\t\t\tconst tk = await this.launchCustomMds3tk()\n\t\t\t\t\tif (tk) {\n\t\t\t\t\t\t// tricky! will not return obj when block is already shown, since it updates data for existing tk obj\n\t\t\t\t\t\ttklst.push(tk)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// official mds3 tk without precomputed tk data\n\t\t\t\tconst tk: any = {\n\t\t\t\t\ttype: 'mds3',\n\t\t\t\t\tdslabel: this.state.vocab.dslabel,\n\t\t\t\t\tallow2selectSamples: this.opts.allow2selectSamples,\n\t\t\t\t\tonClose: () => {\n\t\t\t\t\t\t// on closing subtk, the filterObj corresponding to the subtk will be \"removed\" from subMds3Tks[], by regenerating the array\n\t\t\t\t\t\tthis.interactions.maySaveTrackUpdatesToState(this.blockInstance)\n\t\t\t\t\t},\n\t\t\t\t\tcallbackOnRender: () => {\n\t\t\t\t\t\t// will allow legend filtering changes to be saved to state\n\t\t\t\t\t\tthis.interactions.maySaveTrackUpdatesToState(this.blockInstance)\n\t\t\t\t\t},\n\t\t\t\t\t// for showing disco etc as ad-hoc sandbox, persistently in the mass plotDiv, rather than a menu\n\t\t\t\t\tnewChartHolder: this.opts.plotDiv\n\t\t\t\t}\n\t\t\t\t// any cohort filter for this tk\n\t\t\t\t{\n\t\t\t\t\tconst lst: any = []\n\t\t\t\t\t// register both global filter and local filter to pass to mds3 data queries\n\t\t\t\t\tif (this.state.filter?.lst?.length) lst.push(this.state.filter)\n\t\t\t\t\tif (this.state.config.snvindel.filter) lst.push(this.state.config.snvindel.filter)\n\t\t\t\t\tif (lst.length == 1) {\n\t\t\t\t\t\ttk.filterObj = structuredClone(lst[0])\n\t\t\t\t\t} else if (lst.length > 1) {\n\t\t\t\t\t\ttk.filterObj = filterJoin(lst)\n\t\t\t\t\t}\n\t\t\t\t\t// TODO this will cause mds3 tk to show a leftlabel to indicate the filtering, which should be hidden\n\t\t\t\t}\n\t\t\t\tif (this.state.filter0) tk.filter0 = this.state.filter0\n\t\t\t\tif (this.state.config.mclassHiddenValues) {\n\t\t\t\t\ttk.legend = { mclass: { hiddenvalues: new Set(this.state.config.mclassHiddenValues) } }\n\t\t\t\t}\n\t\t\t\ttklst.push(tk)\n\n\t\t\t\tif (this.state.config?.subMds3Tks) {\n\t\t\t\t\tfor (const subtk of this.state.config.subMds3Tks) {\n\t\t\t\t\t\t// for every element, create a new subtk\n\t\t\t\t\t\tconst t2: any = {\n\t\t\t\t\t\t\ttype: 'mds3',\n\t\t\t\t\t\t\tsubtk: true,\n\t\t\t\t\t\t\tdslabel: this.state.vocab.dslabel,\n\t\t\t\t\t\t\tonClose: () => {\n\t\t\t\t\t\t\t\t// on closing subtk, the filterObj corresponding to the subtk will be \"removed\" from subMds3Tks[], by regenerating the array\n\t\t\t\t\t\t\t\tthis.interactions.maySaveTrackUpdatesToState(this.blockInstance)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tcallbackOnRender: () => {\n\t\t\t\t\t\t\t\t// will allow legend filtering changes to be saved to state\n\t\t\t\t\t\t\t\tthis.interactions.maySaveTrackUpdatesToState(this.blockInstance)\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t// for showing disco etc as ad-hoc sandbox, persistently in the mass plotDiv, rather than a menu\n\t\t\t\t\t\t\tnewChartHolder: this.opts.plotDiv\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.state.filter?.lst?.length) {\n\t\t\t\t\t\t\t// join sub filter with global\n\t\t\t\t\t\t\tt2.filterObj = filterJoin([this.state.filter, subtk.filterObj])\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// no global. only sub\n\t\t\t\t\t\t\tt2.filterObj = structuredClone(subtk.filterObj)\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (this.state.filter0) t2.filter0 = this.state.filter0\n\t\t\t\t\t\tif (subtk.mclassHiddenValues) {\n\t\t\t\t\t\t\tt2.legend = { mclass: { hiddenvalues: new Set(subtk.mclassHiddenValues) } }\n\t\t\t\t\t\t}\n\t\t\t\t\t\ttklst.push(t2)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (this.state.config?.trackLst?.activeTracks?.length) {\n\t\t\t// include active facet tracks\n\t\t\tfor (const n of this.state.config.trackLst.activeTracks) {\n\t\t\t\tfor (const f of this.state.config.trackLst.facets) {\n\t\t\t\t\tfor (const t of f.tracks) {\n\t\t\t\t\t\tif (t.name == n) tklst.push(t)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tif (this.state.config.ld?.tracks) {\n\t\t\tfor (const t of this.state.config.ld.tracks) {\n\t\t\t\tif (t.shown) tklst.push(t)\n\t\t\t}\n\t\t}\n\t\treturn tklst\n\t}\n\n\tasync launchCustomMds3tk() {\n\t\tthis.mayGetSampleCounts()\n\n\t\tconst nm = {\n\t\t\t// numeric mode object; to fill in based on snvindel.details{}\n\t\t\ttype: 'numeric',\n\t\t\tinuse: true,\n\t\t\tbyAttribute: 'nm_axis_value'\n\t\t}\n\t\tfurbishViewModeWithSnvindelComputeDetails(this, nm)\n\t\tconst tk = {\n\t\t\ttype: 'mds3',\n\t\t\t// despite having custom data, still provide dslabel for the mds3 tk to function as an official dataset\n\t\t\tdslabel: this.state.vocab.dslabel,\n\t\t\tname: 'Variants',\n\t\t\tcustom_variants: this.data.mlst,\n\t\t\tskewerModes: [nm],\n\t\t\tfilter0: this.state.filter0\n\t\t}\n\t\treturn tk\n\t}\n\n\tupdateCustomMds3tk() {\n\t\tif (!this.blockInstance) throw 'blockInstance is missing'\n\t\tthis.mayGetSampleCounts()\n\n\t\tconst t2 = this.blockInstance.tklst.find(i => i.type == 'mds3')\n\t\tt2.custom_variants = this.data.mlst\n\n\t\t// details.groups[] may have changed. update label and tooltip callback etc, of tk numeric axis view mode object\n\t\tfurbishViewModeWithSnvindelComputeDetails(\n\t\t\tthis,\n\t\t\tt2.skewer.viewModes.find(i => i.type == 'numeric')\n\t\t)\n\n\t\tt2.load()\n\t}\n\n\tmayGetSampleCounts() {\n\t\tconst data = this.data\n\t\tthis.mayRenderSampleCount('group1', data.totalSampleCount_group1)\n\t\tthis.mayRenderSampleCount('group2', data.totalSampleCount_group2)\n\t\tthis.mayRenderPop2Avg(data.pop2average)\n\t}\n\n\tmayRenderSampleCount(group, count) {\n\t\tif (!Number.isInteger(count)) return\n\t\tthis.dom.tabsDiv\n\t\t\t.select(`.sjpp-gb-${group}`)\n\t\t\t.select('.sjpp-gb-filter-count')\n\t\t\t.style('display', 'inline')\n\t\t\t.text('n=' + count)\n\t}\n\n\tmayRenderPop2Avg(pop2average) {\n\t\tif (!pop2average) return\n\t\tconst span = this.dom.tabsDiv.select('#sjpp-gb-pop2avg')\n\t\tconst lst: any = []\n\t\tfor (const k in pop2average) {\n\t\t\tconst value = pop2average[k]\n\t\t\tif (!Number.isFinite(value)) continue // if there are no samples involved in current view, admix value is null\n\t\t\tlst.push(`${k}=${value.toFixed(2)}`)\n\t\t}\n\t\tif (lst.length) {\n\t\t\t// has valid admix values to display\n\t\t\tspan.style('display', 'inline')\n\t\t\tspan.select('#sjpp-gb-pop2avg-values').text(` ${lst.join(', ')}`)\n\t\t} else {\n\t\t\tspan.style('display', 'none')\n\t\t}\n\t}\n\n\t/* tricky logic */\n\tasync launchBlockWithTracks(tklst) {\n\t\tif (!['GDC', 'MMRF'].includes(this.state?.vocab?.dslabel) && this.blockInstance) {\n\t\t\t/* block instance is present\n this should be updating tracks in this block, by adding new ones listed in tklst[],\n and deleting old ones via a tricky method\n */\n\t\t\tfor (const tk of tklst) {\n\t\t\t\tlet tki // index of this tk in block\n\t\t\t\tif (tk.dslabel) {\n\t\t\t\t\t// tk has dslabel and must be identified by it\n\t\t\t\t\ttki = this.blockInstance.tklst.findIndex(i => i.dslabel == tk.dslabel)\n\t\t\t\t} else if (tk.name) {\n\t\t\t\t\t// identify tk by name\n\t\t\t\t\ttki = this.blockInstance.tklst.findIndex(i => i.name == tk.name)\n\t\t\t\t} else {\n\t\t\t\t\tthrow 'tk missing dslabel & name'\n\t\t\t\t}\n\t\t\t\tif (tki == -1) {\n\t\t\t\t\t// this tk is not in block, add to block\n\t\t\t\t\tconst t = this.blockInstance.block_addtk_template(tk)\n\t\t\t\t\tthis.blockInstance.tk_load(t)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.state.config.trackLst?.removeTracks) {\n\t\t\t\t// facet table marks these tracks for removal. they are all identified by tk.name\n\t\t\t\tfor (const n of this.state.config.trackLst.removeTracks) {\n\t\t\t\t\tconst i = this.blockInstance.tklst.findIndex(i => i.name == n)\n\t\t\t\t\tif (i != -1) this.blockInstance.tk_remove(i)\n\t\t\t\t}\n\t\t\t}\n\t\t\tif (this.state.config.ld?.tracks) {\n\t\t\t\tfor (const t of this.state.config.ld.tracks) {\n\t\t\t\t\tconst i = this.blockInstance.tklst.findIndex(i => i.name == t.name)\n\t\t\t\t\tif (!t.shown && i != -1) this.blockInstance.tk_remove(i)\n\t\t\t\t}\n\t\t\t}\n\t\t\t// tricky! if snvindel.shown is false, means user has toggled it off. thus find all mds3 tk and remove them\n\t\t\tif (this.state.config.snvindel && !this.state.config.snvindel.shown) {\n\t\t\t\tlet found = true\n\t\t\t\twhile (found) {\n\t\t\t\t\tfound = false\n\t\t\t\t\tfor (const [i, tk] of this.blockInstance.tklst.entries()) {\n\t\t\t\t\t\tif (tk.type == 'mds3') {\n\t\t\t\t\t\t\tthis.blockInstance.tk_remove(i)\n\t\t\t\t\t\t\tfound = true\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn\n\t\t}\n\n\t\t// is GDC, MMRF, and/or no block instance, create new block\n\n\t\tthis.dom.blockHolder.selectAll('*').remove()\n\t\tconst arg: any = {\n\t\t\tholder: this.dom.blockHolder,\n\t\t\tgenome: this.opts.genome, // genome obj\n\t\t\tnobox: true,\n\t\t\ttklst,\n\t\t\tdebugmode: this.opts.debug,\n\t\t\tonAddRemoveTk: () => {\n\t\t\t\tthis.interactions.maySaveTrackUpdatesToState(this.blockInstance)\n\t\t\t},\n\t\t\tfilter0: this.state.filter0\n\t\t}\n\n\t\tif (this.data) {\n\t\t\t// variant data has been precomputed\n\t\t\t// need to recompute upon coordinate change\n\t\t\targ.onCoordinateChange = this.interactions.onCoordinateChange\n\t\t}\n\n\t\tif (this.state.config.blockIsProteinMode) {\n\t\t\t// must be in protein mode and requires gene symbol\n\t\t\tif (!this.state.config.geneSearchResult.geneSymbol) throw 'blockIsProteinMode=true but geneSymbol missing'\n\t\t\t// dataset config wants to default to gene view, and gene symbol is available\n\t\t\t// call block.init to launch gene view\n\t\t\targ.query = this.state.config.geneSearchResult.geneSymbol\n\t\t\tconst _ = await import('#src/block.init')\n\t\t\tawait _.default(arg)\n\t\t\tthis.blockInstance = arg.__blockInstance\n\n\t\t\t// update sandbox header with gene name\n\t\t\tif (this.opts.header) this.opts.header.text(arg.query)\n\t\t\treturn\n\t\t}\n\t\t// must be in genomic mode and requires coord\n\t\tif (!this.state.config.geneSearchResult.chr) throw 'blockIsProteinMode=false but chr missing'\n\t\targ.chr = this.state.config.geneSearchResult.chr\n\t\targ.start = this.state.config.geneSearchResult.start\n\t\targ.stop = this.state.config.geneSearchResult.stop\n\t\tfirst_genetrack_tolist(this.opts.genome, arg.tklst)\n\n\t\tconst _ = await import('#src/block')\n\t\tthis.blockInstance = new _.Block(arg)\n\t}\n}\n\n/* given group configuration, determine: numeric track axis label\n- viewmode.label as axis label of numeric mode\n- viewmode.tooltipPrintValue()\n*/\nfunction furbishViewModeWithSnvindelComputeDetails(self, viewmode) {\n\tdelete viewmode.tooltipPrintValue\n\n\tconst [g1, g2] = self.state.config.snvindel.details.groups\n\tif (g1 && g2) {\n\t\tif (g1.type == 'info' || g2.type == 'info') {\n\t\t\t// either group is info field. value type can only be value difference\n\t\t\tviewmode.label = 'Value difference'\n\t\t\treturn\n\t\t}\n\t\t// none of the group is info field. each group should derive AF and there can be different ways of comparing it from two groups\n\t\tconst testMethod =\n\t\t\tself.state.config.snvindel.details.groupTestMethods[self.state.config.snvindel.details.groupTestMethodsIdx]\n\t\tviewmode.label = testMethod.axisLabel || testMethod.name\n\t\tif (testMethod.name == 'Allele frequency difference') {\n\t\t\t// callback returns value separated by ' = ', which allows this to be also displayed in itemtable.js\n\t\t\tviewmode.tooltipPrintValue = m => [{ k: 'AF diff', v: m.nm_axis_value }]\n\t\t} else if (testMethod.name == \"Fisher's exact test\") {\n\t\t\tviewmode.tooltipPrintValue = m => [{ k: 'p-value', v: m.p_value }]\n\t\t}\n\t\treturn\n\t}\n\n\t// only 1 group\n\tif (g1.type == 'info') {\n\t\tconst f = self.state.config.variantFilter?.terms?.find(i => i.id == g1.infoKey)\n\t\tviewmode.label = f?.name || g1.infoKey\n\t\tviewmode.tooltipPrintValue = m => [{ k: viewmode.label, v: m.info[g1.infoKey] }]\n\t\treturn\n\t}\n\tif (g1.type == 'filter') {\n\t\tviewmode.label = 'Allele frequency'\n\t\tviewmode.tooltipPrintValue = m => [{ k: 'Allele frequency', v: m.nm_axis_value }]\n\t\treturn\n\t}\n\tif (g1.type == 'population') {\n\t\tviewmode.label = 'Allele frequency'\n\t\tviewmode.tooltipPrintValue = m => [{ k: 'Allele frequency', v: m.nm_axis_value }]\n\t\treturn\n\t}\n\tthrow 'unknown type of the only group'\n}\n", "import { PlotBase } from '../PlotBase.ts'\nimport { getCompInit, type ComponentApi, type RxComponent } from '#rx'\nimport { Menu, sayerror } from '#dom'\nimport { getNormalRoot } from '#filter'\nimport { Model } from './model/Model.ts'\nimport { View } from './view/View.ts'\nimport { Interactions, mayUpdateGroupTestMethodsIdx } from './interactions/Interactions.ts'\n\nclass TdbGenomeBrowser extends PlotBase implements RxComponent {\n\tstatic type = 'genomeBrowser'\n\n\t// expected RxComponentInner props, some are already declared/set in PlotBase\n\ttype: string\n\tparentId?: string\n\tdom!: {\n\t\t[index: string]: any\n\t}\n\tcomponents: {\n\t\t[name: string]: ComponentApi | { [name: string]: ComponentApi }\n\t} = {}\n\tinteractions: any\n\tblockInstance: any\n\n\tconstructor(opts, api) {\n\t\tsuper(opts, api)\n\t\tthis.type = TdbGenomeBrowser.type\n\t\tthis.dom = this.getDom()\n\t}\n\n\tgetDom() {\n\t\tconst holder = this.opts.holder.append('div')\n\t\tif (this.opts.header) {\n\t\t\t/** Plot may not launch in a sandbox (such as in GDC), hence no header. */\n\t\t\tthis.opts.header\n\t\t\t\t.append('div')\n\t\t\t\t.style('opacity', 0.6)\n\t\t\t\t.style('padding-left', '10px')\n\t\t\t\t.style('font-size', '0.75em')\n\t\t\t\t.text('GENOME BROWSER')\n\t\t}\n\t\t// layout rows from top to bottom\n\t\tconst loadingDiv = holder.append('div').style('display', 'none').style('margin-left', '25px').text('Loading...')\n\t\tconst errDiv = holder.append('div').style('display', 'none').style('margin', '10px')\n\t\tconst controlsDiv = holder.append('div').style('margin', '15px 0px 0px 25px')\n\t\tconst dom = {\n\t\t\ttip: new Menu(),\n\t\t\tholder,\n\t\t\tloadingDiv,\n\t\t\terrDiv,\n\t\t\ttabsDiv: controlsDiv.append('div'),\n\t\t\tgeneSearchDiv: controlsDiv.append('div').style('margin', '20px 0px'),\n\t\t\tblockHolder: holder.append('div')\n\t\t}\n\t\treturn dom\n\t}\n\n\tasync init() {\n\t\tthis.interactions = new Interactions(this.app, this.dom, this.id)\n\t}\n\n\tgetState(appState) {\n\t\tconst config = appState.plots.find(p => p.id === this.id)\n\t\tif (!config) throw `No plot with id='${this.id}' found`\n\t\treturn {\n\t\t\tconfig,\n\t\t\tfilter: getNormalRoot(appState.termfilter.filter),\n\t\t\tfilter0: appState.termfilter.filter0,\n\t\t\tvocab: appState.vocab\n\t\t}\n\t}\n\n\tasync main() {\n\t\tthis.dom.loadingDiv.style('display', 'block')\n\t\tthis.dom.errDiv.style('display', 'none')\n\t\tconst state = this.getState(this.app.getState())\n\t\tif (state.config.chartType != this.type) return\n\t\tconst opts = this.getOpts()\n\t\ttry {\n\t\t\tconst model = new Model(state, this.app)\n\t\t\tconst data = await model.preComputeData()\n\t\t\tconst view = new View(state, this.blockInstance, data, this.dom, opts, this.interactions)\n\t\t\tawait view.main()\n\t\t\tthis.blockInstance = view.blockInstance\n\t\t} catch (e: any) {\n\t\t\tthis.dom.errDiv.style('display', 'block')\n\t\t\tsayerror(this.dom.errDiv, 'Error: ' + (e.message || e))\n\t\t\tif (e.stack) console.log(e.stack)\n\t\t}\n\t\tthis.dom.loadingDiv.style('display', 'none')\n\t}\n\n\t// get options for view instance\n\tgetOpts() {\n\t\tconst opts = {\n\t\t\tgenome: this.app.opts.genome,\n\t\t\tvocabApi: this.app.vocabApi,\n\t\t\tdebug: this.app.opts.debug,\n\t\t\tplotDiv: this.opts.plotDiv,\n\t\t\theader: this.opts.header,\n\t\t\tallow2selectSamples: this.opts.allow2selectSamples\n\t\t}\n\t\treturn opts\n\t}\n}\n\nexport const genomeBrowserInit = getCompInit(TdbGenomeBrowser)\n// this alias will allow abstracted dynamic imports\nexport const componentInit = genomeBrowserInit\n\nexport async function getPlotConfig(opts, app, activeCohort) {\n\ttry {\n\t\t// request default queries config from dataset, and allows opts to override\n\t\tconst c = await getDefaultConfig(app.vocabApi, opts, activeCohort)\n\t\treturn c\n\t} catch (e) {\n\t\tthrow `${e} [genomeBrowser getPlotConfig()]`\n\t}\n}\n\n/* compute default config\nvocabApi\noverride? {}\n optional custom state to override default\nactiveCohort\n\tindex of active cohort (-1/0/1)\n*/\nasync function getDefaultConfig(vocabApi, override, activeCohort) {\n\tconst config = Object.assign(\n\t\t// clone for modifying\n\t\tstructuredClone({\n\t\t\tsnvindel: vocabApi.termdbConfig.queries.snvindel,\n\t\t\ttrackLst: vocabApi.termdbConfig.queries.trackLst,\n\t\t\tld: vocabApi.termdbConfig.queries.ld\n\t\t}),\n\t\toverride || {}\n\t)\n\tcomputeBlockModeFlag(config, vocabApi)\n\n\tif (config.snvindel) {\n\t\t// presence of snvindel will generate the \"mds3\" tk, here setup associated config\n\t\t// request default variant filter (vcf INFO), required for snvindel\n\t\tif (!config.variantFilter) {\n\t\t\tconst vf = await vocabApi.get_variantFilter()\n\t\t\tif (vf?.filter) {\n\t\t\t\tconfig.variantFilter = vf\n\t\t\t}\n\t\t}\n\t\tif (config.snvindel.details) {\n\t\t\t// test method may be inconsistent with group configuration (e.g. no fisher for INFO fields), update test method here\n\t\t\t// 1st arg is a fake \"self\"\n\t\t\tmayUpdateGroupTestMethodsIdx({ config }, config.snvindel.details)\n\t\t\t// a type=filter group may use filterByCohort. in such case, modify default state to assign proper filter based on current cohort\n\t\t\tconst gf = config.snvindel.details.groups.find(i => i.type == 'filter')\n\t\t\tif (gf?.filterByCohort) {\n\t\t\t\tif (!Number.isInteger(activeCohort)) throw 'filterByCohort but activeCohort not integer'\n\t\t\t\t// modify and assign\n\t\t\t\tgf.filter = gf.filterByCohort[vocabApi.termdbConfig.selectCohort.values[activeCohort].keys.join(',')]\n\t\t\t\tif (!gf.filter) throw 'unknown filter by current cohort name'\n\t\t\t\tdelete gf.filterByCohort\n\t\t\t}\n\t\t}\n\n\t\tif (typeof config.snvindel.shown != 'boolean') {\n\t\t\t// create missing tracker property with default value to determine if to show/hide snvindel mds3 tk\n\t\t\tif (config.trackLst) {\n\t\t\t\t// also has track lst/facet\n\t\t\t\t// hardcoded! hide snvindel by default! definitely change it later!\n\t\t\t\tconfig.snvindel.shown = false\n\t\t\t} else {\n\t\t\t\t// no tklst/facet\n\t\t\t\tconfig.snvindel.shown = true\n\t\t\t}\n\t\t}\n\t}\n\n\tif (config.trackLst) {\n\t\tif (!config.trackLst.facets) throw 'trackLst.facets[] missing'\n\t\tif (!config.trackLst.activeTracks) config.trackLst.activeTracks = []\n\t}\n\treturn config\n}\n\nexport function computeBlockModeFlag(config, vocabApi?) {\n\t// steps follow the order of priority\n\tif (typeof config.blockIsProteinMode == 'boolean') {\n\t\t// state has predefined mode, do not modify\n\t\treturn\n\t}\n\t// lack of mode e.g. from urlparam shorthand state. compute default value\n\tswitch (vocabApi.termdbConfig.queries.gbRestrictMode) {\n\t\tcase undefined:\n\t\t\t// ds doesn't restrict mode; when user searched gene, assume it should be in genomic mode\n\t\t\tif (config.geneSearchResult?.geneSymbol) {\n\t\t\t\tconfig.blockIsProteinMode = true\n\t\t\t} else {\n\t\t\t\tconfig.blockIsProteinMode = false\n\t\t\t}\n\t\t\tbreak\n\t\tcase 'protein':\n\t\t\t// ds only allow protein mode\n\t\t\tconfig.blockIsProteinMode = true\n\t\t\tbreak\n\t\tcase 'genomic':\n\t\t\t// ds only allow genomic mode\n\t\t\tconfig.blockIsProteinMode = false\n\t\t\tbreak\n\t\tdefault:\n\t\t\tthrow 'unknown gbRestrictMode'\n\t}\n}\n\n/*\ncalled in mass/charts.js, to render the menu upon clicking the chart button in the charts tray\n\tholder: the holder in the tooltip\n\tchartsInstance: MassCharts instance\n*/\nexport function makeChartBtnMenu(_holder, chartsInstance) {\n\tconst chart = { config: { chartType: 'genomeBrowser' } }\n\tchartsInstance.prepPlot(chart)\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["i", "i", "_"]
7
+ }
@@ -0,0 +1,367 @@
1
+ import {
2
+ GeneSetEditUI,
3
+ PlotBase,
4
+ addGeneSearchbox,
5
+ getCurrentCohortChartTypes,
6
+ getGEunit,
7
+ getSCGEunit,
8
+ sayerror
9
+ } from "./chunk-L7VDSIM7.js";
10
+ import "./chunk-HJ6L54YS.js";
11
+ import "./chunk-LSEFWW72.js";
12
+ import {
13
+ importPlot
14
+ } from "./chunk-UXDVUCXU.js";
15
+ import {
16
+ Menu
17
+ } from "./chunk-HYOEWQ5P.js";
18
+ import {
19
+ Tabs
20
+ } from "./chunk-HBW42TDT.js";
21
+ import "./chunk-LQJMCE7G.js";
22
+ import "./chunk-FN5XPUPH.js";
23
+ import "./chunk-IIT367QZ.js";
24
+ import "./chunk-RZGEKL77.js";
25
+ import "./chunk-KM4JBR26.js";
26
+ import "./chunk-COYULNJF.js";
27
+ import "./chunk-6G4YOMWW.js";
28
+ import "./chunk-7IYJZZQI.js";
29
+ import {
30
+ copyMerge,
31
+ getCompInit
32
+ } from "./chunk-M3J4MINX.js";
33
+ import "./chunk-PF4DSFDR.js";
34
+ import "./chunk-I73KUUYG.js";
35
+ import {
36
+ GENE_EXPRESSION,
37
+ SINGLECELL_GENE_EXPRESSION,
38
+ SSGSEA,
39
+ typeGroup
40
+ } from "./chunk-IVXCWCKS.js";
41
+ import "./chunk-7KRS7L4U.js";
42
+ import "./chunk-BKPDYW5T.js";
43
+ import "./chunk-JNITUVXP.js";
44
+ import "./chunk-TJYRBEBK.js";
45
+ import "./chunk-LOZEKOES.js";
46
+ import "./chunk-VQZ2Z5YU.js";
47
+ import "./chunk-SOTB4FRE.js";
48
+ import "./chunk-TLT4YIG3.js";
49
+ import "./chunk-KYBIQBXE.js";
50
+ import "./chunk-I6Y4O3RR.js";
51
+ import "./chunk-OMR2DT66.js";
52
+ import "./chunk-DQC5FFGV.js";
53
+ import "./chunk-HFNDKYVF.js";
54
+
55
+ // plots/GeneExpInput.ts
56
+ var GeneExpInput = class _GeneExpInput extends PlotBase {
57
+ static {
58
+ this.type = "GeneExpInput";
59
+ }
60
+ constructor(opts, api) {
61
+ super(opts, api);
62
+ this.type = _GeneExpInput.type;
63
+ this.opts = opts;
64
+ this.components = {
65
+ plots: {}
66
+ };
67
+ }
68
+ makeTerm(_term) {
69
+ const termProperties = this.state.config?.termProperties || {};
70
+ const term = { ..._term, ...termProperties, type: this.termType, unit: this.unit };
71
+ return term;
72
+ }
73
+ makeConfig(_config) {
74
+ const spawnConfig = this.state.config?.spawnConfig || {};
75
+ const tmp = { ..._config, ...spawnConfig };
76
+ return tmp;
77
+ }
78
+ getState(appState) {
79
+ const config = appState.plots.find((p) => p.id === this.id);
80
+ if (!config) {
81
+ throw `No plot with id='${this.id}' found. Did you set this.id before this.api = getComponentApi(this)?`;
82
+ }
83
+ const subplots = appState.plots.filter((p) => p.parentId === this.id);
84
+ return {
85
+ config,
86
+ termdbConfig: appState.termdbConfig,
87
+ subplots
88
+ };
89
+ }
90
+ async init(appState) {
91
+ const state = this.getState(appState);
92
+ this.genome = this.app.opts.genome;
93
+ this.termType = state.config.termType;
94
+ this.unit = this.getUnit();
95
+ this.dom = this.initDom();
96
+ const chartTypes = new Set(getCurrentCohortChartTypes(appState));
97
+ this.tabs = [
98
+ {
99
+ label: "One gene",
100
+ isVisible: () => true,
101
+ callback: (event, tab) => {
102
+ this.renderGeneSelect(tab);
103
+ delete tab.callback;
104
+ }
105
+ },
106
+ {
107
+ label: "Two genes",
108
+ isVisible: () => true,
109
+ callback: (event, tab) => {
110
+ this.renderTwoGeneSelect(tab);
111
+ delete tab.callback;
112
+ }
113
+ },
114
+ {
115
+ label: "Hierarchical clustering",
116
+ isVisible: () => chartTypes.has("matrix"),
117
+ callback: (event, tab) => {
118
+ this.renderGeneMultiSelect(tab);
119
+ delete tab.callback;
120
+ }
121
+ },
122
+ {
123
+ label: `Differential ${typeGroup[this.termType].toLowerCase()} analysis`,
124
+ //Only enabling for gene expression for now
125
+ chartType: "DEinput",
126
+ isVisible: () => chartTypes.has("DA") && this.termType === GENE_EXPRESSION,
127
+ callback: async (event, tab) => {
128
+ await this.app.dispatch({
129
+ type: "plot_create",
130
+ parentId: this.id,
131
+ config: {
132
+ chartType: "DEinput",
133
+ parentId: this.id,
134
+ /** ' ' overrides the default 'hide_search' mode in DEInput.
135
+ * 'hide_search' by default expands all terms. */
136
+ header_mode: " "
137
+ }
138
+ });
139
+ delete tab.callback;
140
+ }
141
+ },
142
+ {
143
+ label: typeGroup[SSGSEA],
144
+ isVisible: () => {
145
+ return this.termType === GENE_EXPRESSION && state.termdbConfig?.allowedTermTypes?.includes(SSGSEA);
146
+ },
147
+ callback: async (event, tab) => {
148
+ await this.renderSSGSEA(tab);
149
+ delete tab.callback;
150
+ }
151
+ }
152
+ ];
153
+ const chartTabs = new Tabs({
154
+ holder: this.dom.tabs,
155
+ tabs: this.tabs,
156
+ tabsPosition: "vertical"
157
+ });
158
+ await chartTabs.main();
159
+ }
160
+ getUnit() {
161
+ return this.termType === GENE_EXPRESSION ? getGEunit(this.app.vocabApi) : getSCGEunit(this.app.vocabApi);
162
+ }
163
+ initDom() {
164
+ const headerText = this.opts.headerText ? `${this.opts.headerText} ` : "";
165
+ const dom = {
166
+ header: {
167
+ title: this.opts.header.append("span").style("padding-right", "5px").text(headerText).attr("data-testid", "sjpp-gene-exp-input-headerText"),
168
+ plot: this.opts.header.append("span").text(typeGroup[this.termType].toUpperCase()).style("font-size", "0.7em").style("opacity", "0.6").attr("data-testid", "sjpp-gene-exp-input-termType")
169
+ },
170
+ tabs: this.opts.holder.append("div").style("margin", "10px").attr("data-testid", "sjpp-gene-exp-input-tabs-wrapper")
171
+ };
172
+ return dom;
173
+ }
174
+ async main() {
175
+ const state = this.getState(this.app.getState());
176
+ for (const subplot of state.subplots || []) {
177
+ if (!this.components.plots[subplot.id]) await this.initSubplotInTab(subplot);
178
+ }
179
+ }
180
+ renderGeneSelect(tab) {
181
+ const row = tab.contentHolder.style("padding", "15px");
182
+ row.append("span").style("padding", "5px").text("Select a gene:");
183
+ const geneSearch = addGeneSearchbox({
184
+ row,
185
+ genome: this.genome,
186
+ tip: new Menu({ padding: "0px" }),
187
+ searchOnly: "gene",
188
+ callback: async () => {
189
+ const tw = {
190
+ term: this.makeTerm({
191
+ gene: geneSearch.geneSymbol,
192
+ name: `${geneSearch.geneSymbol} ${this.unit}`
193
+ })
194
+ };
195
+ const config = this.makeConfig({
196
+ chartType: "summary",
197
+ term: tw
198
+ });
199
+ await this.dispatchEdits(config);
200
+ }
201
+ });
202
+ }
203
+ /** Guide the user to select the first gene then
204
+ * a second to launch the summary plot on submit.*/
205
+ renderTwoGeneSelect(tab) {
206
+ const term = {};
207
+ const term2 = {};
208
+ const holder = tab.contentHolder.style("padding", "10px");
209
+ const gene1row = holder.append("div").style("padding", "5px");
210
+ const gene2row = holder.append("div").style("padding", "5px").style("display", "none");
211
+ const submitButton = holder.append("button").attr("type", "button").attr("disabled", true);
212
+ gene1row.append("span").text("Select the first gene:");
213
+ const geneSearch1 = addGeneSearchbox({
214
+ row: gene1row,
215
+ genome: this.genome,
216
+ tip: new Menu({ padding: "0px" }),
217
+ searchOnly: "gene",
218
+ callback: async () => {
219
+ gene2row.style("display", "block");
220
+ if (!geneSearch1.geneSymbol) throw new Error("First gene result is required");
221
+ term.gene = geneSearch1.geneSymbol;
222
+ term.name = `${geneSearch1.geneSymbol} ${this.unit}`;
223
+ }
224
+ });
225
+ gene2row.append("span").text("Select the second gene:");
226
+ const geneSearch2 = addGeneSearchbox({
227
+ row: gene2row,
228
+ genome: this.genome,
229
+ tip: new Menu({ padding: "0px" }),
230
+ searchOnly: "gene",
231
+ callback: async () => {
232
+ if (!geneSearch2.geneSymbol) throw new Error("Second gene result is required");
233
+ term2.gene = geneSearch2.geneSymbol;
234
+ term2.name = `${geneSearch2.geneSymbol} ${this.unit}`;
235
+ submitButton.attr("disabled", null);
236
+ }
237
+ });
238
+ submitButton.text("Submit").style("border", "none").style("border-radius", "20px").style("padding", "10px 15px").on("click", async () => {
239
+ if (!term.name || !term.gene) {
240
+ sayerror(holder, "Missing first gene. Please provide a valid gene.");
241
+ return;
242
+ }
243
+ if (!term2.name || !term2.gene) {
244
+ sayerror(holder, "Missing second gene. Please provide a valid gene.");
245
+ return;
246
+ }
247
+ const config = this.makeConfig({
248
+ chartType: "summary",
249
+ term: { term: this.makeTerm(term) },
250
+ term2: { term: this.makeTerm(term2) }
251
+ });
252
+ await this.dispatchEdits(config);
253
+ });
254
+ }
255
+ // /** Render the GeneSetEdit UI for selection and then
256
+ // * launch the hierarchical clustering on submit.*/
257
+ renderGeneMultiSelect(tab) {
258
+ const holder = tab.contentHolder.style("padding", "10px");
259
+ const grpWrapper = holder.append("div").style("padding", "10px");
260
+ grpWrapper.append("span").style("font-weight", "bold").text("Group name:");
261
+ let customName = "New custom group";
262
+ const input = grpWrapper.append("input").style("margin", "2px 5px").style("width", "210px").attr("placeholder", "Group Name").on("input", () => {
263
+ customName = input.property("value");
264
+ });
265
+ new GeneSetEditUI({
266
+ holder: holder.append("div"),
267
+ /** running hier clustering and the editing group
268
+ * is the group used for clustering pass this mode
269
+ * value to inform ui to support the optional button
270
+ * "top variably exp gene" this is hardcoded for
271
+ * the purpose of gene expression and should be improved. */
272
+ genome: this.genome,
273
+ mode: "geneExpression",
274
+ vocabApi: this.app.vocabApi,
275
+ callback: async ({ geneList, name }) => {
276
+ if (geneList.length <= 2) {
277
+ return alert("At least three genes are required for hierarchical clustering. Please select more genes.");
278
+ }
279
+ const group = {
280
+ name: name || customName,
281
+ lst: [],
282
+ type: "hierCluster"
283
+ };
284
+ const tws = await Promise.all(
285
+ geneList.map((d) => {
286
+ const gene = d.symbol || d.gene;
287
+ const name2 = `${gene} ${this.unit}`;
288
+ const term = this.makeTerm({ gene, name: name2 });
289
+ return { term, q: {} };
290
+ })
291
+ );
292
+ group.lst = [...tws];
293
+ const config = this.makeConfig({
294
+ chartType: "hierCluster",
295
+ termgroups: [group],
296
+ //TODO: Need to allow singleCellGeneExpression as well
297
+ dataType: GENE_EXPRESSION
298
+ });
299
+ await this.dispatchEdits(config);
300
+ }
301
+ });
302
+ }
303
+ async renderSSGSEA(tab) {
304
+ const holder = tab.contentHolder.style("padding", "10px");
305
+ const _ = await import("./ssGSEA-BFTCECV3.js");
306
+ const searchHandler = new _.SearchHandler();
307
+ await searchHandler.init({
308
+ holder,
309
+ app: this.app,
310
+ genomeObj: this.genome,
311
+ callback: async (term) => {
312
+ const config = this.makeConfig({
313
+ chartType: "summary",
314
+ term: { term }
315
+ });
316
+ await this.dispatchEdits(config);
317
+ }
318
+ });
319
+ }
320
+ async initSubplotInTab(subplot) {
321
+ const holder = this.tabs.find((tab) => tab.chartType === subplot.chartType)?.contentHolder;
322
+ if (!holder) throw new Error(`No tab found for chart type ${subplot.chartType}`);
323
+ const opts = Object.assign({}, subplot, {
324
+ holder,
325
+ app: this.app,
326
+ parentId: this.id,
327
+ id: subplot.id
328
+ });
329
+ const { componentInit: componentInit2 } = await importPlot(opts.chartType);
330
+ this.components.plots[subplot.id] = await componentInit2(opts);
331
+ }
332
+ async dispatchEdits(config) {
333
+ await this.app.dispatch({
334
+ type: "app_refresh",
335
+ subactions: [
336
+ {
337
+ type: "plot_create",
338
+ config
339
+ },
340
+ {
341
+ type: "plot_delete",
342
+ id: this.id
343
+ }
344
+ ]
345
+ });
346
+ }
347
+ };
348
+ var geneExpInputInit = getCompInit(GeneExpInput);
349
+ var componentInit = geneExpInputInit;
350
+ var enabledTermTypes = /* @__PURE__ */ new Set([GENE_EXPRESSION, SINGLECELL_GENE_EXPRESSION]);
351
+ function getPlotConfig(opts) {
352
+ if (!opts?.termType) throw new Error("termType is required in opts");
353
+ if (!enabledTermTypes.has(opts.termType)) throw new Error(`Invalid termType: ${opts.termType}`);
354
+ const config = {
355
+ chartType: "GeneExpInput",
356
+ termType: opts.termType,
357
+ hidePlotFilter: true
358
+ };
359
+ return copyMerge(config, opts);
360
+ }
361
+ export {
362
+ GeneExpInput,
363
+ componentInit,
364
+ geneExpInputInit,
365
+ getPlotConfig
366
+ };
367
+ //# sourceMappingURL=GeneExpInput-3AQEPTFZ.js.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../plots/GeneExpInput.ts"],
4
+ "sourcesContent": ["import { PlotBase } from './PlotBase.ts'\nimport { getCompInit, copyMerge, type ComponentApi, type RxComponent } from '#rx'\nimport { GENE_EXPRESSION, SINGLECELL_GENE_EXPRESSION, SSGSEA, typeGroup } from '#shared/terms.js'\nimport { getGEunit } from '../tw/geneExpression'\nimport { getSCGEunit } from '../tw/singleCellGeneExpression'\nimport { addGeneSearchbox, GeneSetEditUI, Menu, sayerror, Tabs } from '#dom'\nimport type { ClientGenome } from '../types/clientGenome'\nimport { getCurrentCohortChartTypes } from '../mass/charts.js'\nimport { importPlot } from '#plots/importPlot.js'\n\ntype GeneExpInputOpts = {\n\t/** sandbox header\n\t * Normally this is optional but there's no reason to launch this plot\n\t * sans sandbox. */\n\theader: any\n\t/** Optional text to display in the header before the term type */\n\theaderText?: string\n\ttermProperties?: { [key: string]: any }\n\tspawnConfig?: { [key: string]: any }\n}\n\n/** Transient plot for users to pick gene(s) of interest and launch\n * the appropriate plot. */\nexport class GeneExpInput extends PlotBase implements RxComponent {\n\tstatic type = 'GeneExpInput'\n\n\ttype: string\n\tcomponents: { plots: { [key: string]: any } }\n\tgenome!: ClientGenome\n\ttermType!: string\n\t/** termType dependent */\n\tunit!: string\n\tdom!: { [index: string]: any }\n\ttabs!: any\n\n\tconstructor(opts: GeneExpInputOpts, api: ComponentApi) {\n\t\tsuper(opts, api)\n\t\tthis.type = GeneExpInput.type\n\t\tthis.opts = opts\n\t\tthis.components = {\n\t\t\tplots: {}\n\t\t}\n\t}\n\n\tmakeTerm(_term) {\n\t\tconst termProperties = this.state.config?.termProperties || {}\n\t\tconst term = { ..._term, ...termProperties, type: this.termType, unit: this.unit }\n\t\treturn term\n\t}\n\n\tmakeConfig(_config) {\n\t\tconst spawnConfig = this.state.config?.spawnConfig || {}\n\t\tconst tmp = { ..._config, ...spawnConfig }\n\t\treturn tmp\n\t}\n\n\tgetState(appState) {\n\t\tconst config = appState.plots.find(p => p.id === this.id)\n\t\tif (!config) {\n\t\t\tthrow `No plot with id='${this.id}' found. Did you set this.id before this.api = getComponentApi(this)?`\n\t\t}\n\t\tconst subplots = appState.plots.filter(p => p.parentId === this.id)\n\t\treturn {\n\t\t\tconfig,\n\t\t\ttermdbConfig: appState.termdbConfig,\n\t\t\tsubplots\n\t\t}\n\t}\n\n\tasync init(appState) {\n\t\tconst state = this.getState(appState)\n\t\tthis.genome = this.app.opts.genome\n\t\tthis.termType = state.config.termType\n\t\tthis.unit = this.getUnit()\n\t\tthis.dom = this.initDom()\n\n\t\tconst chartTypes = new Set(getCurrentCohortChartTypes(appState))\n\n\t\tthis.tabs = [\n\t\t\t{\n\t\t\t\tlabel: 'One gene',\n\t\t\t\tisVisible: () => true,\n\t\t\t\tcallback: (event, tab) => {\n\t\t\t\t\tthis.renderGeneSelect(tab)\n\t\t\t\t\tdelete tab.callback\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Two genes',\n\t\t\t\tisVisible: () => true,\n\t\t\t\tcallback: (event, tab) => {\n\t\t\t\t\tthis.renderTwoGeneSelect(tab)\n\t\t\t\t\tdelete tab.callback\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: 'Hierarchical clustering',\n\t\t\t\tisVisible: () => chartTypes.has('matrix'),\n\t\t\t\tcallback: (event, tab) => {\n\t\t\t\t\tthis.renderGeneMultiSelect(tab)\n\t\t\t\t\tdelete tab.callback\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: `Differential ${typeGroup[this.termType].toLowerCase()} analysis`,\n\t\t\t\t//Only enabling for gene expression for now\n\t\t\t\tchartType: 'DEinput',\n\t\t\t\tisVisible: () => chartTypes.has('DA') && this.termType === GENE_EXPRESSION,\n\t\t\t\tcallback: async (event, tab) => {\n\t\t\t\t\tawait this.app.dispatch({\n\t\t\t\t\t\ttype: 'plot_create',\n\t\t\t\t\t\tparentId: this.id,\n\t\t\t\t\t\tconfig: {\n\t\t\t\t\t\t\tchartType: 'DEinput',\n\t\t\t\t\t\t\tparentId: this.id,\n\t\t\t\t\t\t\t/** ' ' overrides the default 'hide_search' mode in DEInput.\n\t\t\t\t\t\t\t * 'hide_search' by default expands all terms. */\n\t\t\t\t\t\t\theader_mode: ' '\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\t\t\t\t\tdelete tab.callback\n\t\t\t\t}\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: typeGroup[SSGSEA],\n\t\t\t\tisVisible: () => {\n\t\t\t\t\treturn this.termType === GENE_EXPRESSION && state.termdbConfig?.allowedTermTypes?.includes(SSGSEA)\n\t\t\t\t},\n\t\t\t\tcallback: async (event, tab) => {\n\t\t\t\t\tawait this.renderSSGSEA(tab)\n\t\t\t\t\tdelete tab.callback\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\n\t\tconst chartTabs = new Tabs({\n\t\t\tholder: this.dom.tabs,\n\t\t\ttabs: this.tabs,\n\t\t\ttabsPosition: 'vertical'\n\t\t})\n\t\tawait chartTabs.main()\n\t}\n\n\tgetUnit() {\n\t\treturn this.termType === GENE_EXPRESSION ? getGEunit(this.app.vocabApi) : getSCGEunit(this.app.vocabApi)\n\t}\n\n\tinitDom() {\n\t\tconst headerText = this.opts.headerText ? `${this.opts.headerText} ` : ''\n\t\tconst dom: { [index: string]: any } = {\n\t\t\theader: {\n\t\t\t\ttitle: this.opts.header\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.style('padding-right', '5px')\n\t\t\t\t\t.text(headerText)\n\t\t\t\t\t.attr('data-testid', 'sjpp-gene-exp-input-headerText'),\n\t\t\t\tplot: this.opts.header\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.text(typeGroup[this.termType].toUpperCase())\n\t\t\t\t\t.style('font-size', '0.7em')\n\t\t\t\t\t.style('opacity', '0.6')\n\t\t\t\t\t.attr('data-testid', 'sjpp-gene-exp-input-termType')\n\t\t\t},\n\t\t\ttabs: this.opts.holder\n\t\t\t\t.append('div')\n\t\t\t\t.style('margin', '10px')\n\t\t\t\t.attr('data-testid', 'sjpp-gene-exp-input-tabs-wrapper')\n\t\t}\n\n\t\treturn dom\n\t}\n\n\tasync main() {\n\t\tconst state = this.getState(this.app.getState())\n\n\t\tfor (const subplot of state.subplots || []) {\n\t\t\tif (!this.components.plots[subplot.id]) await this.initSubplotInTab(subplot)\n\t\t}\n\t}\n\n\trenderGeneSelect(tab) {\n\t\tconst row = tab.contentHolder.style('padding', '15px')\n\t\trow.append('span').style('padding', '5px').text('Select a gene:')\n\t\tconst geneSearch = addGeneSearchbox({\n\t\t\trow,\n\t\t\tgenome: this.genome,\n\t\t\ttip: new Menu({ padding: '0px' }),\n\t\t\tsearchOnly: 'gene',\n\t\t\tcallback: async () => {\n\t\t\t\tconst tw = {\n\t\t\t\t\tterm: this.makeTerm({\n\t\t\t\t\t\tgene: geneSearch.geneSymbol,\n\t\t\t\t\t\tname: `${geneSearch.geneSymbol} ${this.unit}`\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tconst config = this.makeConfig({\n\t\t\t\t\tchartType: 'summary',\n\t\t\t\t\tterm: tw\n\t\t\t\t})\n\t\t\t\tawait this.dispatchEdits(config)\n\t\t\t}\n\t\t})\n\t}\n\n\t/** Guide the user to select the first gene then\n\t * a second to launch the summary plot on submit.*/\n\trenderTwoGeneSelect(tab) {\n\t\tconst term: any = {}\n\t\tconst term2: any = {}\n\n\t\tconst holder = tab.contentHolder.style('padding', '10px')\n\n\t\tconst gene1row = holder.append('div').style('padding', '5px')\n\t\tconst gene2row = holder.append('div').style('padding', '5px').style('display', 'none')\n\t\tconst submitButton = holder.append('button').attr('type', 'button').attr('disabled', true)\n\n\t\tgene1row.append('span').text('Select the first gene:')\n\t\tconst geneSearch1 = addGeneSearchbox({\n\t\t\trow: gene1row,\n\t\t\tgenome: this.genome,\n\t\t\ttip: new Menu({ padding: '0px' }),\n\t\t\tsearchOnly: 'gene',\n\t\t\tcallback: async () => {\n\t\t\t\tgene2row.style('display', 'block')\n\t\t\t\tif (!geneSearch1.geneSymbol) throw new Error('First gene result is required')\n\t\t\t\tterm.gene = geneSearch1.geneSymbol\n\t\t\t\tterm.name = `${geneSearch1.geneSymbol} ${this.unit}`\n\t\t\t}\n\t\t})\n\n\t\tgene2row.append('span').text('Select the second gene:')\n\t\tconst geneSearch2 = addGeneSearchbox({\n\t\t\trow: gene2row,\n\t\t\tgenome: this.genome,\n\t\t\ttip: new Menu({ padding: '0px' }),\n\t\t\tsearchOnly: 'gene',\n\t\t\tcallback: async () => {\n\t\t\t\tif (!geneSearch2.geneSymbol) throw new Error('Second gene result is required')\n\t\t\t\tterm2.gene = geneSearch2.geneSymbol\n\t\t\t\tterm2.name = `${geneSearch2.geneSymbol} ${this.unit}`\n\t\t\t\tsubmitButton.attr('disabled', null)\n\t\t\t}\n\t\t})\n\n\t\tsubmitButton\n\t\t\t.text('Submit')\n\t\t\t.style('border', 'none')\n\t\t\t.style('border-radius', '20px')\n\t\t\t.style('padding', '10px 15px')\n\t\t\t.on('click', async () => {\n\t\t\t\tif (!term.name || !term.gene) {\n\t\t\t\t\tsayerror(holder, 'Missing first gene. Please provide a valid gene.')\n\t\t\t\t\treturn\n\t\t\t\t}\n\t\t\t\tif (!term2.name || !term2.gene) {\n\t\t\t\t\tsayerror(holder, 'Missing second gene. Please provide a valid gene.')\n\t\t\t\t\treturn\n\t\t\t\t}\n\n\t\t\t\tconst config = this.makeConfig({\n\t\t\t\t\tchartType: 'summary',\n\t\t\t\t\tterm: { term: this.makeTerm(term) },\n\t\t\t\t\tterm2: { term: this.makeTerm(term2) }\n\t\t\t\t})\n\t\t\t\tawait this.dispatchEdits(config)\n\t\t\t})\n\t}\n\t// /** Render the GeneSetEdit UI for selection and then\n\t// * launch the hierarchical clustering on submit.*/\n\trenderGeneMultiSelect(tab) {\n\t\tconst holder = tab.contentHolder.style('padding', '10px')\n\t\tconst grpWrapper = holder.append('div').style('padding', '10px')\n\t\tgrpWrapper.append('span').style('font-weight', 'bold').text('Group name:')\n\n\t\tlet customName: string = 'New custom group'\n\t\tconst input = grpWrapper\n\t\t\t.append('input')\n\t\t\t.style('margin', '2px 5px')\n\t\t\t.style('width', '210px')\n\t\t\t.attr('placeholder', 'Group Name')\n\t\t\t.on('input', () => {\n\t\t\t\tcustomName = input.property('value')\n\t\t\t})\n\n\t\tnew GeneSetEditUI({\n\t\t\tholder: holder.append('div'),\n\t\t\t/** running hier clustering and the editing group\n\t\t\t * is the group used for clustering pass this mode\n\t\t\t * value to inform ui to support the optional button\n\t\t\t * \"top variably exp gene\" this is hardcoded for\n\t\t\t * the purpose of gene expression and should be improved. */\n\t\t\tgenome: this.genome,\n\t\t\tmode: 'geneExpression',\n\t\t\tvocabApi: this.app.vocabApi,\n\t\t\tcallback: async ({ geneList, name }) => {\n\t\t\t\tif (geneList.length <= 2) {\n\t\t\t\t\treturn alert('At least three genes are required for hierarchical clustering. Please select more genes.')\n\t\t\t\t}\n\n\t\t\t\tconst group: { name: string; lst: { [index: string]: any }[]; type: string } = {\n\t\t\t\t\tname: name || customName,\n\t\t\t\t\tlst: [],\n\t\t\t\t\ttype: 'hierCluster'\n\t\t\t\t}\n\t\t\t\tconst tws = await Promise.all(\n\t\t\t\t\tgeneList.map((d: any) => {\n\t\t\t\t\t\tconst gene: string = d.symbol || d.gene\n\t\t\t\t\t\tconst name = `${gene} ${this.unit}`\n\t\t\t\t\t\tconst term = this.makeTerm({ gene, name })\n\t\t\t\t\t\treturn { term, q: {} }\n\t\t\t\t\t})\n\t\t\t\t)\n\t\t\t\tgroup.lst = [...tws]\n\n\t\t\t\tconst config = this.makeConfig({\n\t\t\t\t\tchartType: 'hierCluster',\n\t\t\t\t\ttermgroups: [group],\n\t\t\t\t\t//TODO: Need to allow singleCellGeneExpression as well\n\t\t\t\t\tdataType: GENE_EXPRESSION\n\t\t\t\t})\n\n\t\t\t\tawait this.dispatchEdits(config)\n\t\t\t}\n\t\t})\n\t}\n\n\tasync renderSSGSEA(tab) {\n\t\tconst holder = tab.contentHolder.style('padding', '10px')\n\t\tconst _ = await import('../termdb/handlers/ssGSEA.ts')\n\t\tconst searchHandler = new _.SearchHandler()\n\t\tawait searchHandler.init({\n\t\t\tholder,\n\t\t\tapp: this.app,\n\t\t\tgenomeObj: this.genome,\n\t\t\tcallback: async term => {\n\t\t\t\tconst config = this.makeConfig({\n\t\t\t\t\tchartType: 'summary',\n\t\t\t\t\tterm: { term: term }\n\t\t\t\t})\n\t\t\t\tawait this.dispatchEdits(config)\n\t\t\t}\n\t\t})\n\t}\n\n\tasync initSubplotInTab(subplot) {\n\t\tconst holder = this.tabs.find(tab => tab.chartType === subplot.chartType)?.contentHolder\n\t\tif (!holder) throw new Error(`No tab found for chart type ${subplot.chartType}`)\n\n\t\tconst opts = Object.assign({}, subplot, {\n\t\t\tholder,\n\t\t\tapp: this.app,\n\t\t\tparentId: this.id,\n\t\t\tid: subplot.id\n\t\t})\n\n\t\tconst { componentInit } = await importPlot(opts.chartType)\n\t\tthis.components.plots[subplot.id] = await componentInit(opts)\n\t}\n\n\tasync dispatchEdits(config) {\n\t\tawait this.app.dispatch({\n\t\t\ttype: 'app_refresh',\n\t\t\tsubactions: [\n\t\t\t\t{\n\t\t\t\t\ttype: 'plot_create',\n\t\t\t\t\tconfig\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\ttype: 'plot_delete',\n\t\t\t\t\tid: this.id\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t}\n}\n\nexport const geneExpInputInit = getCompInit(GeneExpInput)\nexport const componentInit = geneExpInputInit\n\n//Sanity check\nconst enabledTermTypes = new Set([GENE_EXPRESSION, SINGLECELL_GENE_EXPRESSION])\n\nexport function getPlotConfig(opts) {\n\tif (!opts?.termType) throw new Error('termType is required in opts')\n\tif (!enabledTermTypes.has(opts.termType)) throw new Error(`Invalid termType: ${opts.termType}`)\n\n\tconst config = {\n\t\tchartType: 'GeneExpInput',\n\t\ttermType: opts.termType,\n\t\thidePlotFilter: true\n\t}\n\n\treturn copyMerge(config, opts)\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAuBO,IAAM,eAAN,MAAM,sBAAqB,SAAgC;AAAA,EACjE;AAAA,SAAO,OAAO;AAAA;AAAA,EAWd,YAAY,MAAwB,KAAmB;AACtD,UAAM,MAAM,GAAG;AACf,SAAK,OAAO,cAAa;AACzB,SAAK,OAAO;AACZ,SAAK,aAAa;AAAA,MACjB,OAAO,CAAC;AAAA,IACT;AAAA,EACD;AAAA,EAEA,SAAS,OAAO;AACf,UAAM,iBAAiB,KAAK,MAAM,QAAQ,kBAAkB,CAAC;AAC7D,UAAM,OAAO,EAAE,GAAG,OAAO,GAAG,gBAAgB,MAAM,KAAK,UAAU,MAAM,KAAK,KAAK;AACjF,WAAO;AAAA,EACR;AAAA,EAEA,WAAW,SAAS;AACnB,UAAM,cAAc,KAAK,MAAM,QAAQ,eAAe,CAAC;AACvD,UAAM,MAAM,EAAE,GAAG,SAAS,GAAG,YAAY;AACzC,WAAO;AAAA,EACR;AAAA,EAEA,SAAS,UAAU;AAClB,UAAM,SAAS,SAAS,MAAM,KAAK,OAAK,EAAE,OAAO,KAAK,EAAE;AACxD,QAAI,CAAC,QAAQ;AACZ,YAAM,oBAAoB,KAAK,EAAE;AAAA,IAClC;AACA,UAAM,WAAW,SAAS,MAAM,OAAO,OAAK,EAAE,aAAa,KAAK,EAAE;AAClE,WAAO;AAAA,MACN;AAAA,MACA,cAAc,SAAS;AAAA,MACvB;AAAA,IACD;AAAA,EACD;AAAA,EAEA,MAAM,KAAK,UAAU;AACpB,UAAM,QAAQ,KAAK,SAAS,QAAQ;AACpC,SAAK,SAAS,KAAK,IAAI,KAAK;AAC5B,SAAK,WAAW,MAAM,OAAO;AAC7B,SAAK,OAAO,KAAK,QAAQ;AACzB,SAAK,MAAM,KAAK,QAAQ;AAExB,UAAM,aAAa,IAAI,IAAI,2BAA2B,QAAQ,CAAC;AAE/D,SAAK,OAAO;AAAA,MACX;AAAA,QACC,OAAO;AAAA,QACP,WAAW,MAAM;AAAA,QACjB,UAAU,CAAC,OAAO,QAAQ;AACzB,eAAK,iBAAiB,GAAG;AACzB,iBAAO,IAAI;AAAA,QACZ;AAAA,MACD;AAAA,MACA;AAAA,QACC,OAAO;AAAA,QACP,WAAW,MAAM;AAAA,QACjB,UAAU,CAAC,OAAO,QAAQ;AACzB,eAAK,oBAAoB,GAAG;AAC5B,iBAAO,IAAI;AAAA,QACZ;AAAA,MACD;AAAA,MACA;AAAA,QACC,OAAO;AAAA,QACP,WAAW,MAAM,WAAW,IAAI,QAAQ;AAAA,QACxC,UAAU,CAAC,OAAO,QAAQ;AACzB,eAAK,sBAAsB,GAAG;AAC9B,iBAAO,IAAI;AAAA,QACZ;AAAA,MACD;AAAA,MACA;AAAA,QACC,OAAO,gBAAgB,UAAU,KAAK,QAAQ,EAAE,YAAY,CAAC;AAAA;AAAA,QAE7D,WAAW;AAAA,QACX,WAAW,MAAM,WAAW,IAAI,IAAI,KAAK,KAAK,aAAa;AAAA,QAC3D,UAAU,OAAO,OAAO,QAAQ;AAC/B,gBAAM,KAAK,IAAI,SAAS;AAAA,YACvB,MAAM;AAAA,YACN,UAAU,KAAK;AAAA,YACf,QAAQ;AAAA,cACP,WAAW;AAAA,cACX,UAAU,KAAK;AAAA;AAAA;AAAA,cAGf,aAAa;AAAA,YACd;AAAA,UACD,CAAC;AACD,iBAAO,IAAI;AAAA,QACZ;AAAA,MACD;AAAA,MACA;AAAA,QACC,OAAO,UAAU,MAAM;AAAA,QACvB,WAAW,MAAM;AAChB,iBAAO,KAAK,aAAa,mBAAmB,MAAM,cAAc,kBAAkB,SAAS,MAAM;AAAA,QAClG;AAAA,QACA,UAAU,OAAO,OAAO,QAAQ;AAC/B,gBAAM,KAAK,aAAa,GAAG;AAC3B,iBAAO,IAAI;AAAA,QACZ;AAAA,MACD;AAAA,IACD;AAEA,UAAM,YAAY,IAAI,KAAK;AAAA,MAC1B,QAAQ,KAAK,IAAI;AAAA,MACjB,MAAM,KAAK;AAAA,MACX,cAAc;AAAA,IACf,CAAC;AACD,UAAM,UAAU,KAAK;AAAA,EACtB;AAAA,EAEA,UAAU;AACT,WAAO,KAAK,aAAa,kBAAkB,UAAU,KAAK,IAAI,QAAQ,IAAI,YAAY,KAAK,IAAI,QAAQ;AAAA,EACxG;AAAA,EAEA,UAAU;AACT,UAAM,aAAa,KAAK,KAAK,aAAa,GAAG,KAAK,KAAK,UAAU,MAAM;AACvE,UAAM,MAAgC;AAAA,MACrC,QAAQ;AAAA,QACP,OAAO,KAAK,KAAK,OACf,OAAO,MAAM,EACb,MAAM,iBAAiB,KAAK,EAC5B,KAAK,UAAU,EACf,KAAK,eAAe,gCAAgC;AAAA,QACtD,MAAM,KAAK,KAAK,OACd,OAAO,MAAM,EACb,KAAK,UAAU,KAAK,QAAQ,EAAE,YAAY,CAAC,EAC3C,MAAM,aAAa,OAAO,EAC1B,MAAM,WAAW,KAAK,EACtB,KAAK,eAAe,8BAA8B;AAAA,MACrD;AAAA,MACA,MAAM,KAAK,KAAK,OACd,OAAO,KAAK,EACZ,MAAM,UAAU,MAAM,EACtB,KAAK,eAAe,kCAAkC;AAAA,IACzD;AAEA,WAAO;AAAA,EACR;AAAA,EAEA,MAAM,OAAO;AACZ,UAAM,QAAQ,KAAK,SAAS,KAAK,IAAI,SAAS,CAAC;AAE/C,eAAW,WAAW,MAAM,YAAY,CAAC,GAAG;AAC3C,UAAI,CAAC,KAAK,WAAW,MAAM,QAAQ,EAAE,EAAG,OAAM,KAAK,iBAAiB,OAAO;AAAA,IAC5E;AAAA,EACD;AAAA,EAEA,iBAAiB,KAAK;AACrB,UAAM,MAAM,IAAI,cAAc,MAAM,WAAW,MAAM;AACrD,QAAI,OAAO,MAAM,EAAE,MAAM,WAAW,KAAK,EAAE,KAAK,gBAAgB;AAChE,UAAM,aAAa,iBAAiB;AAAA,MACnC;AAAA,MACA,QAAQ,KAAK;AAAA,MACb,KAAK,IAAI,KAAK,EAAE,SAAS,MAAM,CAAC;AAAA,MAChC,YAAY;AAAA,MACZ,UAAU,YAAY;AACrB,cAAM,KAAK;AAAA,UACV,MAAM,KAAK,SAAS;AAAA,YACnB,MAAM,WAAW;AAAA,YACjB,MAAM,GAAG,WAAW,UAAU,IAAI,KAAK,IAAI;AAAA,UAC5C,CAAC;AAAA,QACF;AACA,cAAM,SAAS,KAAK,WAAW;AAAA,UAC9B,WAAW;AAAA,UACX,MAAM;AAAA,QACP,CAAC;AACD,cAAM,KAAK,cAAc,MAAM;AAAA,MAChC;AAAA,IACD,CAAC;AAAA,EACF;AAAA;AAAA;AAAA,EAIA,oBAAoB,KAAK;AACxB,UAAM,OAAY,CAAC;AACnB,UAAM,QAAa,CAAC;AAEpB,UAAM,SAAS,IAAI,cAAc,MAAM,WAAW,MAAM;AAExD,UAAM,WAAW,OAAO,OAAO,KAAK,EAAE,MAAM,WAAW,KAAK;AAC5D,UAAM,WAAW,OAAO,OAAO,KAAK,EAAE,MAAM,WAAW,KAAK,EAAE,MAAM,WAAW,MAAM;AACrF,UAAM,eAAe,OAAO,OAAO,QAAQ,EAAE,KAAK,QAAQ,QAAQ,EAAE,KAAK,YAAY,IAAI;AAEzF,aAAS,OAAO,MAAM,EAAE,KAAK,wBAAwB;AACrD,UAAM,cAAc,iBAAiB;AAAA,MACpC,KAAK;AAAA,MACL,QAAQ,KAAK;AAAA,MACb,KAAK,IAAI,KAAK,EAAE,SAAS,MAAM,CAAC;AAAA,MAChC,YAAY;AAAA,MACZ,UAAU,YAAY;AACrB,iBAAS,MAAM,WAAW,OAAO;AACjC,YAAI,CAAC,YAAY,WAAY,OAAM,IAAI,MAAM,+BAA+B;AAC5E,aAAK,OAAO,YAAY;AACxB,aAAK,OAAO,GAAG,YAAY,UAAU,IAAI,KAAK,IAAI;AAAA,MACnD;AAAA,IACD,CAAC;AAED,aAAS,OAAO,MAAM,EAAE,KAAK,yBAAyB;AACtD,UAAM,cAAc,iBAAiB;AAAA,MACpC,KAAK;AAAA,MACL,QAAQ,KAAK;AAAA,MACb,KAAK,IAAI,KAAK,EAAE,SAAS,MAAM,CAAC;AAAA,MAChC,YAAY;AAAA,MACZ,UAAU,YAAY;AACrB,YAAI,CAAC,YAAY,WAAY,OAAM,IAAI,MAAM,gCAAgC;AAC7E,cAAM,OAAO,YAAY;AACzB,cAAM,OAAO,GAAG,YAAY,UAAU,IAAI,KAAK,IAAI;AACnD,qBAAa,KAAK,YAAY,IAAI;AAAA,MACnC;AAAA,IACD,CAAC;AAED,iBACE,KAAK,QAAQ,EACb,MAAM,UAAU,MAAM,EACtB,MAAM,iBAAiB,MAAM,EAC7B,MAAM,WAAW,WAAW,EAC5B,GAAG,SAAS,YAAY;AACxB,UAAI,CAAC,KAAK,QAAQ,CAAC,KAAK,MAAM;AAC7B,iBAAS,QAAQ,kDAAkD;AACnE;AAAA,MACD;AACA,UAAI,CAAC,MAAM,QAAQ,CAAC,MAAM,MAAM;AAC/B,iBAAS,QAAQ,mDAAmD;AACpE;AAAA,MACD;AAEA,YAAM,SAAS,KAAK,WAAW;AAAA,QAC9B,WAAW;AAAA,QACX,MAAM,EAAE,MAAM,KAAK,SAAS,IAAI,EAAE;AAAA,QAClC,OAAO,EAAE,MAAM,KAAK,SAAS,KAAK,EAAE;AAAA,MACrC,CAAC;AACD,YAAM,KAAK,cAAc,MAAM;AAAA,IAChC,CAAC;AAAA,EACH;AAAA;AAAA;AAAA,EAGA,sBAAsB,KAAK;AAC1B,UAAM,SAAS,IAAI,cAAc,MAAM,WAAW,MAAM;AACxD,UAAM,aAAa,OAAO,OAAO,KAAK,EAAE,MAAM,WAAW,MAAM;AAC/D,eAAW,OAAO,MAAM,EAAE,MAAM,eAAe,MAAM,EAAE,KAAK,aAAa;AAEzE,QAAI,aAAqB;AACzB,UAAM,QAAQ,WACZ,OAAO,OAAO,EACd,MAAM,UAAU,SAAS,EACzB,MAAM,SAAS,OAAO,EACtB,KAAK,eAAe,YAAY,EAChC,GAAG,SAAS,MAAM;AAClB,mBAAa,MAAM,SAAS,OAAO;AAAA,IACpC,CAAC;AAEF,QAAI,cAAc;AAAA,MACjB,QAAQ,OAAO,OAAO,KAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,MAM3B,QAAQ,KAAK;AAAA,MACb,MAAM;AAAA,MACN,UAAU,KAAK,IAAI;AAAA,MACnB,UAAU,OAAO,EAAE,UAAU,KAAK,MAAM;AACvC,YAAI,SAAS,UAAU,GAAG;AACzB,iBAAO,MAAM,0FAA0F;AAAA,QACxG;AAEA,cAAM,QAAyE;AAAA,UAC9E,MAAM,QAAQ;AAAA,UACd,KAAK,CAAC;AAAA,UACN,MAAM;AAAA,QACP;AACA,cAAM,MAAM,MAAM,QAAQ;AAAA,UACzB,SAAS,IAAI,CAAC,MAAW;AACxB,kBAAM,OAAe,EAAE,UAAU,EAAE;AACnC,kBAAMA,QAAO,GAAG,IAAI,IAAI,KAAK,IAAI;AACjC,kBAAM,OAAO,KAAK,SAAS,EAAE,MAAM,MAAAA,MAAK,CAAC;AACzC,mBAAO,EAAE,MAAM,GAAG,CAAC,EAAE;AAAA,UACtB,CAAC;AAAA,QACF;AACA,cAAM,MAAM,CAAC,GAAG,GAAG;AAEnB,cAAM,SAAS,KAAK,WAAW;AAAA,UAC9B,WAAW;AAAA,UACX,YAAY,CAAC,KAAK;AAAA;AAAA,UAElB,UAAU;AAAA,QACX,CAAC;AAED,cAAM,KAAK,cAAc,MAAM;AAAA,MAChC;AAAA,IACD,CAAC;AAAA,EACF;AAAA,EAEA,MAAM,aAAa,KAAK;AACvB,UAAM,SAAS,IAAI,cAAc,MAAM,WAAW,MAAM;AACxD,UAAM,IAAI,MAAM,OAAO,sBAA8B;AACrD,UAAM,gBAAgB,IAAI,EAAE,cAAc;AAC1C,UAAM,cAAc,KAAK;AAAA,MACxB;AAAA,MACA,KAAK,KAAK;AAAA,MACV,WAAW,KAAK;AAAA,MAChB,UAAU,OAAM,SAAQ;AACvB,cAAM,SAAS,KAAK,WAAW;AAAA,UAC9B,WAAW;AAAA,UACX,MAAM,EAAE,KAAW;AAAA,QACpB,CAAC;AACD,cAAM,KAAK,cAAc,MAAM;AAAA,MAChC;AAAA,IACD,CAAC;AAAA,EACF;AAAA,EAEA,MAAM,iBAAiB,SAAS;AAC/B,UAAM,SAAS,KAAK,KAAK,KAAK,SAAO,IAAI,cAAc,QAAQ,SAAS,GAAG;AAC3E,QAAI,CAAC,OAAQ,OAAM,IAAI,MAAM,+BAA+B,QAAQ,SAAS,EAAE;AAE/E,UAAM,OAAO,OAAO,OAAO,CAAC,GAAG,SAAS;AAAA,MACvC;AAAA,MACA,KAAK,KAAK;AAAA,MACV,UAAU,KAAK;AAAA,MACf,IAAI,QAAQ;AAAA,IACb,CAAC;AAED,UAAM,EAAE,eAAAC,eAAc,IAAI,MAAM,WAAW,KAAK,SAAS;AACzD,SAAK,WAAW,MAAM,QAAQ,EAAE,IAAI,MAAMA,eAAc,IAAI;AAAA,EAC7D;AAAA,EAEA,MAAM,cAAc,QAAQ;AAC3B,UAAM,KAAK,IAAI,SAAS;AAAA,MACvB,MAAM;AAAA,MACN,YAAY;AAAA,QACX;AAAA,UACC,MAAM;AAAA,UACN;AAAA,QACD;AAAA,QACA;AAAA,UACC,MAAM;AAAA,UACN,IAAI,KAAK;AAAA,QACV;AAAA,MACD;AAAA,IACD,CAAC;AAAA,EACF;AACD;AAEO,IAAM,mBAAmB,YAAY,YAAY;AACjD,IAAM,gBAAgB;AAG7B,IAAM,mBAAmB,oBAAI,IAAI,CAAC,iBAAiB,0BAA0B,CAAC;AAEvE,SAAS,cAAc,MAAM;AACnC,MAAI,CAAC,MAAM,SAAU,OAAM,IAAI,MAAM,8BAA8B;AACnE,MAAI,CAAC,iBAAiB,IAAI,KAAK,QAAQ,EAAG,OAAM,IAAI,MAAM,qBAAqB,KAAK,QAAQ,EAAE;AAE9F,QAAM,SAAS;AAAA,IACd,WAAW;AAAA,IACX,UAAU,KAAK;AAAA,IACf,gBAAgB;AAAA,EACjB;AAEA,SAAO,UAAU,QAAQ,IAAI;AAC9B;",
6
+ "names": ["name", "componentInit"]
7
+ }